From 70ba974348dda7f650f078677a8ede2cb7befbc8 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Tue, 1 Apr 2025 15:58:25 -0700 Subject: [PATCH 001/262] [Balance] Remove accuracy cap from Wide Lens --- src/modifier/modifier.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 7c9207bbea5..80f14ba22ce 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -2734,7 +2734,7 @@ export class PokemonMoveAccuracyBoosterModifier extends PokemonHeldItemModifier * @returns always `true` */ override apply(_pokemon: Pokemon, moveAccuracy: NumberHolder): boolean { - moveAccuracy.value = Math.min(moveAccuracy.value + this.accuracyAmount * this.getStackCount(), 100); + moveAccuracy.value = moveAccuracy.value + this.accuracyAmount * this.getStackCount(); return true; } From 7b38596a12df6678dcd8fc726510b72e02d0807c Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Wed, 2 Apr 2025 19:37:48 -0700 Subject: [PATCH 002/262] Sync locales and update version to 1.8.4 (#5620) --- package-lock.json | 4 ++-- package.json | 2 +- public/locales | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 971715d241a..33e9dd08104 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pokemon-rogue-battle", - "version": "1.8.3", + "version": "1.8.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pokemon-rogue-battle", - "version": "1.8.3", + "version": "1.8.4", "hasInstallScript": true, "dependencies": { "@material/material-color-utilities": "^0.2.7", diff --git a/package.json b/package.json index 199a77449a2..6b1c73db158 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.8.3", + "version": "1.8.4", "type": "module", "scripts": { "start": "vite", diff --git a/public/locales b/public/locales index 213701f8047..e98f0eb9c20 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit 213701f80471d38142827dec2d798f047db471d1 +Subproject commit e98f0eb9c2022bc78b53f0444424c636498e725a From b364bb18991475d8622af07955efe0580edf0393 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Fri, 4 Apr 2025 16:39:53 -0500 Subject: [PATCH 003/262] [Bug][Ability] Fix wimp out and emergency exit skipping waves in double battles (#5261) Fix wimp out causing battles to skip --- src/phases/battle-end-phase.ts | 17 +++++++++++++++++ src/phases/new-battle-phase.ts | 5 +++++ test/abilities/wimp_out.test.ts | 26 ++++++++++++++++++++++++++ 3 files changed, 48 insertions(+) diff --git a/src/phases/battle-end-phase.ts b/src/phases/battle-end-phase.ts index a7158264ab7..e6a0c66548e 100644 --- a/src/phases/battle-end-phase.ts +++ b/src/phases/battle-end-phase.ts @@ -17,6 +17,23 @@ export class BattleEndPhase extends BattlePhase { start() { super.start(); + // cull any extra `BattleEnd` phases from the queue. + globalScene.phaseQueue = globalScene.phaseQueue.filter(phase => { + if (phase instanceof BattleEndPhase) { + this.isVictory ||= phase.isVictory; + return false; + } + return true; + }); + // `phaseQueuePrepend` is private, so we have to use this inefficient loop. + while (globalScene.tryRemoveUnshiftedPhase(phase => { + if (phase instanceof BattleEndPhase) { + this.isVictory ||= phase.isVictory; + return true; + } + return false; + })) {} + globalScene.gameData.gameStats.battles++; if ( globalScene.gameMode.isEndless && diff --git a/src/phases/new-battle-phase.ts b/src/phases/new-battle-phase.ts index 8cdbdc5891a..09b8ab1d335 100644 --- a/src/phases/new-battle-phase.ts +++ b/src/phases/new-battle-phase.ts @@ -5,6 +5,11 @@ export class NewBattlePhase extends BattlePhase { start() { super.start(); + // cull any extra `NewBattle` phases from the queue. + globalScene.phaseQueue = globalScene.phaseQueue.filter(phase => !(phase instanceof NewBattlePhase)); + // `phaseQueuePrepend` is private, so we have to use this inefficient loop. + while (globalScene.tryRemoveUnshiftedPhase(phase => phase instanceof NewBattlePhase)) {} + globalScene.newBattle(); this.end(); diff --git a/test/abilities/wimp_out.test.ts b/test/abilities/wimp_out.test.ts index ef201cbf8dd..294025a10e7 100644 --- a/test/abilities/wimp_out.test.ts +++ b/test/abilities/wimp_out.test.ts @@ -498,6 +498,7 @@ describe("Abilities - Wimp Out", () => { const hasFled = enemyPokemon.switchOutStatus; expect(isVisible && !hasFled).toBe(true); }); + it("wimp out will not skip battles when triggered in a double battle", async () => { const wave = 2; game.override @@ -525,4 +526,29 @@ describe("Abilities - Wimp Out", () => { await game.toNextWave(); expect(game.scene.currentBattle.waveIndex).toBe(wave + 1); }); + + it("wimp out should not skip battles when triggering the same turn as another enemy faints", async () => { + const wave = 2; + game.override + .enemySpecies(Species.WIMPOD) + .enemyAbility(Abilities.WIMP_OUT) + .startingLevel(50) + .enemyLevel(1) + .enemyMoveset([ Moves.SPLASH, Moves.ENDURE ]) + .battleType("double") + .moveset([ Moves.DRAGON_ENERGY, Moves.SPLASH ]) + .startingWave(wave); + + await game.classicMode.startBattle([ Species.REGIDRAGO, Species.MAGIKARP ]); + + // turn 1 + game.move.select(Moves.DRAGON_ENERGY, 0); + game.move.select(Moves.SPLASH, 1); + await game.forceEnemyMove(Moves.SPLASH); + await game.forceEnemyMove(Moves.ENDURE); + + await game.phaseInterceptor.to("SelectModifierPhase"); + expect(game.scene.currentBattle.waveIndex).toBe(wave + 1); + + }); }); From e31bf912231709c42b3044d7ff5f3a244f60f209 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Fri, 4 Apr 2025 16:57:39 -0500 Subject: [PATCH 004/262] [Bug][Ability] Fix mold breaker effect lingering if the user's move runs out of PP (#5265) * Fix mold breaker pp bug * Update Dancer test to account for changed phase behavior * Update doc comment for move-phase's `end` method * Add null handling for pokemon in `move-end` phase --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/phases/move-end-phase.ts | 9 ++++- src/phases/move-phase.ts | 7 ++-- test/abilities/dancer.test.ts | 20 ++++++----- test/abilities/mold_breaker.test.ts | 51 +++++++++++++++++++++++++++++ 4 files changed, 73 insertions(+), 14 deletions(-) create mode 100644 test/abilities/mold_breaker.test.ts diff --git a/src/phases/move-end-phase.ts b/src/phases/move-end-phase.ts index 46e266a32b7..f3a40ce69bd 100644 --- a/src/phases/move-end-phase.ts +++ b/src/phases/move-end-phase.ts @@ -1,13 +1,20 @@ import { globalScene } from "#app/global-scene"; import { BattlerTagLapseType } from "#app/data/battler-tags"; import { PokemonPhase } from "./pokemon-phase"; +import type { BattlerIndex } from "#app/battle"; export class MoveEndPhase extends PokemonPhase { + private wasFollowUp: boolean; + constructor(battlerIndex: BattlerIndex, wasFollowUp: boolean = false) { + super(battlerIndex); + this.wasFollowUp = wasFollowUp; + } + start() { super.start(); const pokemon = this.getPokemon(); - if (pokemon.isActive(true)) { + if (!this.wasFollowUp && pokemon?.isActive(true)) { pokemon.lapseTags(BattlerTagLapseType.AFTER_MOVE); } diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index e04f48c2880..cab02174605 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -465,13 +465,10 @@ export class MovePhase extends BattlePhase { } /** - * Queues a {@linkcode MoveEndPhase} if the move wasn't a {@linkcode followUp} and {@linkcode canMove()} returns `true`, - * then ends the phase. + * Queues a {@linkcode MoveEndPhase} and then ends the phase */ public end(): void { - if (!this.followUp && this.canMove()) { - globalScene.unshiftPhase(new MoveEndPhase(this.pokemon.getBattlerIndex())); - } + globalScene.unshiftPhase(new MoveEndPhase(this.pokemon.getBattlerIndex(), this.followUp)); super.end(); } diff --git a/test/abilities/dancer.test.ts b/test/abilities/dancer.test.ts index 56c357b2212..c296329473d 100644 --- a/test/abilities/dancer.test.ts +++ b/test/abilities/dancer.test.ts @@ -39,20 +39,24 @@ describe("Abilities - Dancer", () => { game.move.select(Moves.SPLASH); game.move.select(Moves.SWORDS_DANCE, 1); await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2]); - await game.phaseInterceptor.to("MovePhase"); - // immediately copies ally move - await game.phaseInterceptor.to("MovePhase", false); + await game.phaseInterceptor.to("MovePhase"); // feebas uses swords dance + await game.phaseInterceptor.to("MovePhase", false); // oricorio copies swords dance + let currentPhase = game.scene.getCurrentPhase() as MovePhase; expect(currentPhase.pokemon).toBe(oricorio); expect(currentPhase.move.moveId).toBe(Moves.SWORDS_DANCE); - await game.phaseInterceptor.to("MoveEndPhase"); - await game.phaseInterceptor.to("MovePhase"); - // immediately copies enemy move - await game.phaseInterceptor.to("MovePhase", false); + + await game.phaseInterceptor.to("MoveEndPhase"); // end oricorio's move + await game.phaseInterceptor.to("MovePhase"); // magikarp 1 copies swords dance + await game.phaseInterceptor.to("MovePhase"); // magikarp 2 copies swords dance + await game.phaseInterceptor.to("MovePhase"); // magikarp (left) uses victory dance + await game.phaseInterceptor.to("MovePhase", false); // oricorio copies magikarp's victory dance + currentPhase = game.scene.getCurrentPhase() as MovePhase; expect(currentPhase.pokemon).toBe(oricorio); expect(currentPhase.move.moveId).toBe(Moves.VICTORY_DANCE); - await game.phaseInterceptor.to("BerryPhase"); + + await game.phaseInterceptor.to("BerryPhase"); // finish the turn // doesn't use PP if copied move is also in moveset expect(oricorio.moveset[0]?.ppUsed).toBe(0); diff --git a/test/abilities/mold_breaker.test.ts b/test/abilities/mold_breaker.test.ts new file mode 100644 index 00000000000..8f050a68d76 --- /dev/null +++ b/test/abilities/mold_breaker.test.ts @@ -0,0 +1,51 @@ +import { BattlerIndex } from "#app/battle"; +import { globalScene } from "#app/global-scene"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Mold Breaker", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.MOLD_BREAKER) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should turn off the ignore abilities arena variable after the user's move", async () => { + game.override.enemyMoveset(Moves.SPLASH) + .ability(Abilities.MOLD_BREAKER) + .moveset([ Moves.ERUPTION ]) + .startingLevel(100) + .enemyLevel(2); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + const enemy = game.scene.getEnemyPokemon()!; + + expect(enemy.isFainted()).toBe(false); + game.move.select(Moves.SPLASH); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("MoveEndPhase", true); + expect(globalScene.arena.ignoreAbilities).toBe(false); + }); +}); From 420c2e37c21d123e1fb88bb64e68070305efd7c5 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Fri, 4 Apr 2025 17:13:21 -0500 Subject: [PATCH 005/262] [GitHub] Add path filters to avoid unnecessarily re-running tests (#5497) * Add path filters to avoid unnecessarily re-running tests * Apply suggestions from kev's review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update .github/workflows/tests.yml Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Don't ignore image files for tests --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- .github/workflows/tests.yml | 48 +++++++++++++++++++++++++++++++++---- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 167a108e58c..ccc8604ff7e 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -5,18 +5,58 @@ on: # but only for the main branch push: branches: - - main # Trigger on push events to the main branch + - main # Trigger on push events to the main branch - beta # Trigger on push events to the beta branch + # go upvote https://github.com/actions/runner/issues/1182 and yell at microsoft until they fix this or ditch yml for workflows + paths: + # src and test files + - "src/**" + - "test/**" + - "public/**" + # Workflows that can impact tests + - ".github/workflows/test*.yml" + # top-level files + - "package*.json" + - ".nvrmc" # Updates to node version can break tests + - "vite.*.ts" # vite.config.ts, vite.vitest.config.ts, vitest.workspace.ts + - "tsconfig*.json" # tsconfig.json tweaking can impact compilation + - "global.d.ts" + - ".env.*" + # Blanket negations for files that cannot impact tests + - "!**/*.py" # No .py files + - "!**/*.sh" # No .sh files + - "!**/*.md" # No .md files + - "!**/.git*" # .gitkeep and family + pull_request: branches: - - main # Trigger on pull request events targeting the main branch + - main # Trigger on pull request events targeting the main branch - beta # Trigger on pull request events targeting the beta branch + paths: # go upvote https://github.com/actions/runner/issues/1182 and yell at microsoft because until then we have to duplicate this + # src and test files + - "src/**" + - "test/**" + - "public/**" + # Workflows that can impact tests + - ".github/workflows/test*.yml" + # top-level files + - "package*.json" + - ".nvrmc" # Updates to node version can break tests + - "vite*" # vite.config.ts, vite.vitest.config.ts, vitest.workspace.ts + - "tsconfig*.json" # tsconfig.json tweaking can impact compilation + - "global.d.ts" + - ".env.*" + # Blanket negations for files that cannot impact tests + - "!**/*.py" # No .py files + - "!**/*.sh" # No .sh files + - "!**/*.md" # No .md files + - "!**/.git*" # .gitkeep and family merge_group: types: [checks_requested] jobs: run-tests: - name: Run Tests + name: Run Tests strategy: matrix: shard: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] @@ -24,4 +64,4 @@ jobs: with: project: main shard: ${{ matrix.shard }} - totalShards: 10 \ No newline at end of file + totalShards: 10 From 9e4162d4299466d15a04185f6e86eb0de0189671 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Fri, 4 Apr 2025 19:40:25 -0500 Subject: [PATCH 006/262] [Bug] Fix super luck implementation (#5625) * Fix super luck implementation * Use numberholder instead of booleanholder * Update tsdoc for getCritStage --- src/data/ability.ts | 14 ++++++++-- src/field/pokemon.ts | 14 +++------- test/abilities/super_luck.test.ts | 43 +++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 12 deletions(-) create mode 100644 test/abilities/super_luck.test.ts diff --git a/src/data/ability.ts b/src/data/ability.ts index eea24c791b0..790bff2290d 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -3499,8 +3499,18 @@ export class BonusCritAbAttr extends AbAttr { constructor() { super(false); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[0] as Utils.BooleanHolder).value = true; + + /** + * Apply the bonus crit ability by increasing the value in the provided number holder by 1 + * + * @param pokemon The pokemon with the BonusCrit ability (unused) + * @param passive Unused + * @param simulated Unused + * @param cancelled Unused + * @param args Args[0] is a number holder containing the crit stage. + */ + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: [Utils.NumberHolder, ...any]): void { + (args[0] as Utils.NumberHolder).value += 1; } } diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index f89319a6e30..f3e758e4efd 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1340,8 +1340,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } /** - * Retrieves the critical-hit stage considering the move used and the Pokemon - * who used it. + * Calculate the critical-hit stage of a move used against this pokemon by + * the given source + * * @param source the {@linkcode Pokemon} who using the move * @param move the {@linkcode Move} being used * @returns the final critical-hit stage value @@ -1360,14 +1361,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { source.isPlayer(), critStage, ); - const bonusCrit = new Utils.BooleanHolder(false); - //@ts-ignore - if (applyAbAttrs(BonusCritAbAttr, source, null, false, bonusCrit)) { - // TODO: resolve ts-ignore. This is a promise. Checking a promise is bogus. - if (bonusCrit.value) { - critStage.value += 1; - } - } + applyAbAttrs(BonusCritAbAttr, source, null, false, critStage) const critBoostTag = source.getTag(CritBoostTag); if (critBoostTag) { if (critBoostTag instanceof DragonCheerTag) { diff --git a/test/abilities/super_luck.test.ts b/test/abilities/super_luck.test.ts new file mode 100644 index 00000000000..bc9524de801 --- /dev/null +++ b/test/abilities/super_luck.test.ts @@ -0,0 +1,43 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Abilities - Super Luck", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([Moves.TACKLE]) + .ability(Abilities.SUPER_LUCK) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should increase the crit stage of a user by 1", async () => { + await game.classicMode.startBattle([Species.MAGIKARP]); + const enemy = game.scene.getEnemyPokemon()!; + const fn = vi.spyOn(enemy, "getCritStage"); + game.move.select(Moves.TACKLE); + await game.phaseInterceptor.to("BerryPhase"); + expect(fn).toHaveReturnedWith(1); + fn.mockRestore(); + }); +}); From 5318d717b3035f0e047533961d6a3e22505693dd Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Fri, 4 Apr 2025 19:43:46 -0500 Subject: [PATCH 007/262] [Refactor] [Docs] Minor refactor of `move.checkFlags` into `move.doesFlagEffectApply` (#5264) * Refactor Move.checkFlags * Improve jsdoc clarity * Fix improper recursive call for the IGNORE_PROTECT check * Fix improper placement of followUp check * Get rid of unnecssary break * Fix last import * Remove latent checkFlag call in move-effect-phase * Remedy perish body oversight * Apply kev's suggestions from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/data/ability.ts | 21 ++++++++++----------- src/data/moves/move.ts | 32 ++++++++++++++++++++++++++------ src/phases/move-effect-phase.ts | 5 +++-- src/phases/move-phase.ts | 2 +- 4 files changed, 40 insertions(+), 20 deletions(-) diff --git a/src/data/ability.ts b/src/data/ability.ts index 790bff2290d..a7107ce2e9d 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -998,7 +998,7 @@ export class PostDefendContactApplyStatusEffectAbAttr extends PostDefendAbAttr { override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { const effect = this.effects.length === 1 ? this.effects[0] : this.effects[pokemon.randSeedInt(this.effects.length)]; - return move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && !attacker.status + return move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) && !attacker.status && (this.chance === -1 || pokemon.randSeedInt(100) < this.chance) && !move.hitsSubstitute(attacker, pokemon) && attacker.canSetStatus(effect, true, false, pokemon); } @@ -1038,7 +1038,7 @@ export class PostDefendContactApplyTagChanceAbAttr extends PostDefendAbAttr { } override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - return move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && pokemon.randSeedInt(100) < this.chance + return move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) && pokemon.randSeedInt(100) < this.chance && !move.hitsSubstitute(attacker, pokemon) && attacker.canAddTag(this.tagType); } @@ -1085,7 +1085,7 @@ export class PostDefendContactDamageAbAttr extends PostDefendAbAttr { } override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - return !simulated && move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) + return !simulated && move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) && !attacker.hasAbilityWithAttr(BlockNonDirectDamageAbAttr) && !move.hitsSubstitute(attacker, pokemon); } @@ -1118,8 +1118,7 @@ export class PostDefendPerishSongAbAttr extends PostDefendAbAttr { } override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - return (move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && !move.hitsSubstitute(attacker, pokemon)) - && !attacker.getTag(BattlerTagType.PERISH_SONG); + return move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) && !attacker.getTag(BattlerTagType.PERISH_SONG); } override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { @@ -1163,7 +1162,7 @@ export class PostDefendAbilitySwapAbAttr extends PostDefendAbAttr { } override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - return move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) + return move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) && attacker.getAbility().isSwappable && !move.hitsSubstitute(attacker, pokemon); } @@ -1189,7 +1188,7 @@ export class PostDefendAbilityGiveAbAttr extends PostDefendAbAttr { } override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - return move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && attacker.getAbility().isSuppressable + return move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) && attacker.getAbility().isSuppressable && !attacker.getAbility().hasAttr(PostDefendAbilityGiveAbAttr) && !move.hitsSubstitute(attacker, pokemon); } @@ -1220,7 +1219,7 @@ export class PostDefendMoveDisableAbAttr extends PostDefendAbAttr { override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { return attacker.getTag(BattlerTagType.DISABLED) === null && !move.hitsSubstitute(attacker, pokemon) - && move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && (this.chance === -1 || pokemon.randSeedInt(100) < this.chance); + && move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) && (this.chance === -1 || pokemon.randSeedInt(100) < this.chance); } override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { @@ -1925,7 +1924,7 @@ export class PostAttackApplyStatusEffectAbAttr extends PostAttackAbAttr { super.canApplyPostAttack(pokemon, passive, simulated, attacker, move, hitResult, args) && !(pokemon !== attacker && move.hitsSubstitute(attacker, pokemon)) && (simulated || !attacker.hasAbilityWithAttr(IgnoreMoveEffectsAbAttr) && pokemon !== attacker - && (!this.contactRequired || move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon)) && pokemon.randSeedInt(100) < this.chance && !pokemon.status) + && (!this.contactRequired || move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon})) && pokemon.randSeedInt(100) < this.chance && !pokemon.status) ) { const effect = this.effects.length === 1 ? this.effects[0] : this.effects[pokemon.randSeedInt(this.effects.length)]; return simulated || attacker.canSetStatus(effect, true, false, pokemon); @@ -1964,7 +1963,7 @@ export class PostAttackApplyBattlerTagAbAttr extends PostAttackAbAttr { /**Battler tags inflicted by abilities post attacking are also considered additional effects.*/ return super.canApplyPostAttack(pokemon, passive, simulated, attacker, move, hitResult, args) && !attacker.hasAbilityWithAttr(IgnoreMoveEffectsAbAttr) && pokemon !== attacker && - (!this.contactRequired || move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon)) && + (!this.contactRequired || move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon})) && pokemon.randSeedInt(100) < this.chance(attacker, pokemon, move) && !pokemon.status; } @@ -4761,7 +4760,7 @@ export class PostFaintContactDamageAbAttr extends PostFaintAbAttr { } override canApplyPostFaint(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker?: Pokemon, move?: Move, hitResult?: HitResult, ...args: any[]): boolean { - const diedToDirectDamage = move !== undefined && attacker !== undefined && move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon); + const diedToDirectDamage = move !== undefined && attacker !== undefined && move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}); const cancelled = new Utils.BooleanHolder(false); globalScene.getField(true).map(p => applyAbAttrs(FieldPreventExplosiveMovesAbAttr, p, cancelled, simulated)); if (!diedToDirectDamage || cancelled.value || attacker!.hasAbilityWithAttr(BlockNonDirectDamageAbAttr)) { diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 2624fe6cda9..421314b1945 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -346,7 +346,7 @@ export default class Move implements Localizable { * @param target The {@linkcode Pokemon} targeted by this move * @returns `true` if the move can bypass the target's Substitute; `false` otherwise. */ - hitsSubstitute(user: Pokemon, target: Pokemon | null): boolean { + hitsSubstitute(user: Pokemon, target?: Pokemon): boolean { if ([ MoveTarget.USER, MoveTarget.USER_SIDE, MoveTarget.ENEMY_SIDE, MoveTarget.BOTH_SIDES ].includes(this.moveTarget) || !target?.getTag(BattlerTagType.SUBSTITUTE)) { return false; @@ -618,12 +618,30 @@ export default class Move implements Localizable { /** * Checks if the move flag applies to the pokemon(s) using/receiving the move + * + * This method will take the `user`'s ability into account when reporting flags, e.g. + * calling this method for {@linkcode MoveFlags.MAKES_CONTACT | MAKES_CONTACT} + * will return `false` if the user has a {@linkcode Abilities.LONG_REACH} that is not being suppressed. + * + * **Note:** This method only checks if the move should have effectively have the flag applied to its use. + * It does *not* check whether the flag will trigger related effects. + * For example using this method to check {@linkcode MoveFlags.WIND_MOVE} + * will not consider {@linkcode Abilities.WIND_RIDER | Wind Rider }. + * + * To simply check whether the move has a flag, use {@linkcode hasFlag}. * @param flag {@linkcode MoveFlags} MoveFlag to check on user and/or target * @param user {@linkcode Pokemon} the Pokemon using the move * @param target {@linkcode Pokemon} the Pokemon receiving the move + * @param isFollowUp (defaults to `false`) `true` if the move was used as a follow up * @returns boolean + * @see {@linkcode hasFlag} */ - checkFlag(flag: MoveFlags, user: Pokemon, target: Pokemon | null): boolean { + doesFlagEffectApply({ flag, user, target, isFollowUp = false }: { + flag: MoveFlags; + user: Pokemon; + target?: Pokemon; + isFollowUp?: boolean; + }): boolean { // special cases below, eg: if the move flag is MAKES_CONTACT, and the user pokemon has an ability that ignores contact (like "Long Reach"), then overrides and move does not make contact switch (flag) { case MoveFlags.MAKES_CONTACT: @@ -633,16 +651,18 @@ export default class Move implements Localizable { break; case MoveFlags.IGNORE_ABILITIES: if (user.hasAbilityWithAttr(MoveAbilityBypassAbAttr)) { - const abilityEffectsIgnored = new Utils.BooleanHolder(false); + const abilityEffectsIgnored = new Utils.BooleanHolder(false); applyAbAttrs(MoveAbilityBypassAbAttr, user, abilityEffectsIgnored, false, this); if (abilityEffectsIgnored.value) { return true; } + // Sunsteel strike, Moongeist beam, and photon geyser will not ignore abilities if invoked + // by another move, such as via metronome. } - break; + return this.hasFlag(MoveFlags.IGNORE_ABILITIES) && !isFollowUp; case MoveFlags.IGNORE_PROTECT: if (user.hasAbilityWithAttr(IgnoreProtectOnContactAbAttr) - && this.checkFlag(MoveFlags.MAKES_CONTACT, user, null)) { + && this.doesFlagEffectApply({ flag: MoveFlags.MAKES_CONTACT, user })) { return true; } break; @@ -1214,7 +1234,7 @@ export class MoveEffectAttr extends MoveAttr { canApply(user: Pokemon, target: Pokemon, move: Move, args?: any[]) { return !! (this.selfTarget ? user.hp && !user.getTag(BattlerTagType.FRENZY) : target.hp) && (this.selfTarget || !target.getTag(BattlerTagType.PROTECTED) || - move.checkFlag(MoveFlags.IGNORE_PROTECT, user, target)); + move.doesFlagEffectApply({ flag: MoveFlags.IGNORE_PROTECT, user, target })); } /** Applies move effects so long as they are able based on {@linkcode canApply} */ diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index bd1c9caad96..7cc389651dd 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -289,7 +289,8 @@ export class MoveEffectPhase extends PokemonPhase { /** Is the target protected by Protect, etc. or a relevant conditional protection effect? */ const isProtected = ![MoveTarget.ENEMY_SIDE, MoveTarget.BOTH_SIDES].includes(this.move.getMove().moveTarget) && - (bypassIgnoreProtect.value || !this.move.getMove().checkFlag(MoveFlags.IGNORE_PROTECT, user, target)) && + (bypassIgnoreProtect.value || + !this.move.getMove().doesFlagEffectApply({ flag: MoveFlags.IGNORE_PROTECT, user, target })) && (hasConditionalProtectApplied.value || (!target.findTags(t => t instanceof DamageProtectedTag).length && target.findTags(t => t instanceof ProtectedTag).find(t => target.lapseTag(t.tagType))) || @@ -307,7 +308,7 @@ export class MoveEffectPhase extends PokemonPhase { /** Is the target's magic bounce ability not ignored and able to reflect this move? */ const canMagicBounce = !isReflecting && - !move.checkFlag(MoveFlags.IGNORE_ABILITIES, user, target) && + !move.doesFlagEffectApply({ flag: MoveFlags.IGNORE_ABILITIES, user, target }) && target.hasAbilityWithAttr(ReflectStatusMoveAbAttr); const semiInvulnerableTag = target.getTag(SemiInvulnerableTag); diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index cab02174605..33e772eb2ea 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -168,7 +168,7 @@ export class MovePhase extends BattlePhase { // Check move to see if arena.ignoreAbilities should be true. if (!this.followUp || this.reflected) { - if (this.move.getMove().checkFlag(MoveFlags.IGNORE_ABILITIES, this.pokemon, null)) { + if (this.move.getMove().doesFlagEffectApply({ flag: MoveFlags.IGNORE_ABILITIES, user: this.pokemon, isFollowUp: this.followUp })) { globalScene.arena.setIgnoreAbilities(true, this.pokemon.getBattlerIndex()); } } From 1e6ceb55812fe00dde450ecdbc31d8876e5c4066 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Sat, 5 Apr 2025 20:10:52 -0700 Subject: [PATCH 008/262] [Misc] Clean up various phases (part 1) (#4797) * Clean up various phases Remove redundant code, utilize default parameters, clean up some leftover `strict-null` `TODO`s, replace `integer` with `number` * Replace `* as Utils` imports with named imports * Apply Biome --- src/battle-scene.ts | 2 - src/phases/add-enemy-buff-modifier-phase.ts | 4 -- src/phases/attempt-run-phase.ts | 10 +-- src/phases/battle-end-phase.ts | 16 +++-- src/phases/battle-phase.ts | 12 ++-- src/phases/berry-phase.ts | 6 +- src/phases/common-anim-phase.ts | 11 +++- src/phases/damage-anim-phase.ts | 9 ++- src/phases/egg-hatch-phase.ts | 73 ++++++++++----------- src/phases/encounter-phase.ts | 4 +- src/phases/evolution-phase.ts | 28 ++++---- src/phases/exp-phase.ts | 4 +- src/phases/form-change-phase.ts | 8 +-- src/phases/game-over-phase.ts | 4 +- src/phases/login-phase.ts | 16 ++--- src/phases/message-phase.ts | 12 ++-- src/phases/money-reward-phase.ts | 4 +- src/phases/move-anim-test-phase.ts | 50 -------------- src/phases/move-end-phase.ts | 2 +- src/phases/move-phase.ts | 3 +- src/phases/mystery-encounter-phases.ts | 5 +- src/phases/new-biome-encounter-phase.ts | 4 -- src/phases/next-encounter-phase.ts | 4 -- src/phases/party-heal-phase.ts | 4 +- src/phases/pokemon-anim-phase.ts | 10 +-- src/phases/pokemon-heal-phase.ts | 6 +- src/phases/pokemon-phase.ts | 11 ++-- src/phases/post-game-over-phase.ts | 4 +- src/phases/post-turn-status-effect-phase.ts | 6 +- src/phases/reload-session-phase.ts | 8 +-- src/phases/scan-ivs-phase.ts | 4 +- src/phases/select-biome-phase.ts | 12 ++-- src/phases/select-challenge-phase.ts | 4 -- src/phases/select-gender-phase.ts | 4 -- src/phases/select-modifier-phase.ts | 3 +- src/phases/select-starter-phase.ts | 4 -- src/phases/select-target-phase.ts | 1 + src/phases/shiny-sparkle-phase.ts | 1 + src/phases/show-party-exp-bar-phase.ts | 4 +- src/phases/show-trainer-phase.ts | 4 -- src/phases/summon-missing-phase.ts | 4 -- src/phases/switch-summon-phase.ts | 10 +-- src/phases/test-message-phase.ts | 7 -- src/phases/title-phase.ts | 14 ++-- src/phases/trainer-message-test-phase.ts | 47 ------------- src/phases/trainer-victory-phase.ts | 8 +-- src/phases/turn-end-phase.ts | 4 -- src/phases/turn-init-phase.ts | 4 -- src/phases/turn-start-phase.ts | 14 ++-- src/phases/unavailable-phase.ts | 4 -- src/phases/weather-effect-phase.ts | 13 ++-- 51 files changed, 178 insertions(+), 332 deletions(-) delete mode 100644 src/phases/move-anim-test-phase.ts delete mode 100644 src/phases/test-message-phase.ts delete mode 100644 src/phases/trainer-message-test-phase.ts diff --git a/src/battle-scene.ts b/src/battle-scene.ts index a759cbb84c2..f676ba63306 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1526,8 +1526,6 @@ export default class BattleScene extends SceneBase { this.currentBattle.mysteryEncounterType = mysteryEncounterType; } - //this.pushPhase(new TrainerMessageTestPhase(this, TrainerType.RIVAL, TrainerType.RIVAL_2, TrainerType.RIVAL_3, TrainerType.RIVAL_4, TrainerType.RIVAL_5, TrainerType.RIVAL_6)); - if (!waveIndex && lastBattle) { const isWaveIndexMultipleOfTen = !(lastBattle.waveIndex % 10); const isEndlessOrDaily = this.gameMode.hasShortBiomes || this.gameMode.isDaily; diff --git a/src/phases/add-enemy-buff-modifier-phase.ts b/src/phases/add-enemy-buff-modifier-phase.ts index 7d91e64382a..16ed78e6d0d 100644 --- a/src/phases/add-enemy-buff-modifier-phase.ts +++ b/src/phases/add-enemy-buff-modifier-phase.ts @@ -9,10 +9,6 @@ import { Phase } from "#app/phase"; import { globalScene } from "#app/global-scene"; export class AddEnemyBuffModifierPhase extends Phase { - constructor() { - super(); - } - start() { super.start(); diff --git a/src/phases/attempt-run-phase.ts b/src/phases/attempt-run-phase.ts index dab5b8789da..e5691f5fb8e 100644 --- a/src/phases/attempt-run-phase.ts +++ b/src/phases/attempt-run-phase.ts @@ -1,10 +1,10 @@ import { applyAbAttrs, applyPreLeaveFieldAbAttrs, PreLeaveFieldAbAttr, RunSuccessAbAttr } from "#app/data/ability"; -import { Stat } from "#app/enums/stat"; -import { StatusEffect } from "#app/enums/status-effect"; +import { Stat } from "#enums/stat"; +import { StatusEffect } from "#enums/status-effect"; import type { PlayerPokemon, EnemyPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import i18next from "i18next"; -import * as Utils from "#app/utils"; +import { NumberHolder } from "#app/utils"; import { BattleEndPhase } from "./battle-end-phase"; import { NewBattlePhase } from "./new-battle-phase"; import { PokemonPhase } from "./pokemon-phase"; @@ -22,7 +22,7 @@ export class AttemptRunPhase extends PokemonPhase { const playerPokemon = this.getPokemon(); - const escapeChance = new Utils.NumberHolder(0); + const escapeChance = new NumberHolder(0); this.attemptRunAway(playerField, enemyField, escapeChance); @@ -63,7 +63,7 @@ export class AttemptRunPhase extends PokemonPhase { this.end(); } - attemptRunAway(playerField: PlayerPokemon[], enemyField: EnemyPokemon[], escapeChance: Utils.NumberHolder) { + attemptRunAway(playerField: PlayerPokemon[], enemyField: EnemyPokemon[], escapeChance: NumberHolder) { /** Sum of the speed of all enemy pokemon on the field */ const enemySpeed = enemyField.reduce( (total: number, enemyPokemon: Pokemon) => total + enemyPokemon.getStat(Stat.SPD), diff --git a/src/phases/battle-end-phase.ts b/src/phases/battle-end-phase.ts index e6a0c66548e..ff17b17ab8b 100644 --- a/src/phases/battle-end-phase.ts +++ b/src/phases/battle-end-phase.ts @@ -26,13 +26,15 @@ export class BattleEndPhase extends BattlePhase { return true; }); // `phaseQueuePrepend` is private, so we have to use this inefficient loop. - while (globalScene.tryRemoveUnshiftedPhase(phase => { - if (phase instanceof BattleEndPhase) { - this.isVictory ||= phase.isVictory; - return true; - } - return false; - })) {} + while ( + globalScene.tryRemoveUnshiftedPhase(phase => { + if (phase instanceof BattleEndPhase) { + this.isVictory ||= phase.isVictory; + return true; + } + return false; + }) + ) {} globalScene.gameData.gameStats.battles++; if ( diff --git a/src/phases/battle-phase.ts b/src/phases/battle-phase.ts index 72bcc85bc62..d70b3909639 100644 --- a/src/phases/battle-phase.ts +++ b/src/phases/battle-phase.ts @@ -3,13 +3,13 @@ import { TrainerSlot } from "#enums/trainer-slot"; import { Phase } from "#app/phase"; export class BattlePhase extends Phase { - constructor() { - super(); - } - showEnemyTrainer(trainerSlot: TrainerSlot = TrainerSlot.NONE): void { - const sprites = globalScene.currentBattle.trainer?.getSprites()!; // TODO: is this bang correct? - const tintSprites = globalScene.currentBattle.trainer?.getTintSprites()!; // TODO: is this bang correct? + if (!globalScene.currentBattle.trainer) { + console.warn("Enemy trainer is missing!"); + return; + } + const sprites = globalScene.currentBattle.trainer.getSprites(); + const tintSprites = globalScene.currentBattle.trainer.getTintSprites(); for (let i = 0; i < sprites.length; i++) { const visible = !trainerSlot || !i === (trainerSlot === TrainerSlot.TRAINER) || sprites.length < 2; [sprites[i], tintSprites[i]].map(sprite => { diff --git a/src/phases/berry-phase.ts b/src/phases/berry-phase.ts index 0048f8cd2f2..e5614739903 100644 --- a/src/phases/berry-phase.ts +++ b/src/phases/berry-phase.ts @@ -4,7 +4,7 @@ import { BerryUsedEvent } from "#app/events/battle-scene"; import { getPokemonNameWithAffix } from "#app/messages"; import { BerryModifier } from "#app/modifier/modifier"; import i18next from "i18next"; -import * as Utils from "#app/utils"; +import { BooleanHolder } from "#app/utils"; import { FieldPhase } from "./field-phase"; import { CommonAnimPhase } from "./common-anim-phase"; import { globalScene } from "#app/global-scene"; @@ -20,7 +20,7 @@ export class BerryPhase extends FieldPhase { }, pokemon.isPlayer()); if (hasUsableBerry) { - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); pokemon.getOpponents().map(opp => applyAbAttrs(PreventBerryUseAbAttr, opp, cancelled)); if (cancelled.value) { @@ -44,7 +44,7 @@ export class BerryPhase extends FieldPhase { globalScene.updateModifiers(pokemon.isPlayer()); - applyAbAttrs(HealFromBerryUseAbAttr, pokemon, new Utils.BooleanHolder(false)); + applyAbAttrs(HealFromBerryUseAbAttr, pokemon, new BooleanHolder(false)); } } }); diff --git a/src/phases/common-anim-phase.ts b/src/phases/common-anim-phase.ts index d32e93ea6aa..5be5e112389 100644 --- a/src/phases/common-anim-phase.ts +++ b/src/phases/common-anim-phase.ts @@ -6,13 +6,18 @@ import { PokemonPhase } from "./pokemon-phase"; export class CommonAnimPhase extends PokemonPhase { private anim: CommonAnim | null; - private targetIndex: number | undefined; + private targetIndex?: BattlerIndex; private playOnEmptyField: boolean; - constructor(battlerIndex?: BattlerIndex, targetIndex?: BattlerIndex, anim?: CommonAnim, playOnEmptyField = false) { + constructor( + battlerIndex?: BattlerIndex, + targetIndex?: BattlerIndex, + anim: CommonAnim | null = null, + playOnEmptyField = false, + ) { super(battlerIndex); - this.anim = anim!; // TODO: is this bang correct? + this.anim = anim; this.targetIndex = targetIndex; this.playOnEmptyField = playOnEmptyField; } diff --git a/src/phases/damage-anim-phase.ts b/src/phases/damage-anim-phase.ts index 703cd3d160e..696a2e55b6f 100644 --- a/src/phases/damage-anim-phase.ts +++ b/src/phases/damage-anim-phase.ts @@ -10,11 +10,16 @@ export class DamageAnimPhase extends PokemonPhase { private damageResult: DamageResult; private critical: boolean; - constructor(battlerIndex: BattlerIndex, amount: number, damageResult?: DamageResult, critical = false) { + constructor( + battlerIndex: BattlerIndex, + amount: number, + damageResult: DamageResult = HitResult.EFFECTIVE, + critical = false, + ) { super(battlerIndex); this.amount = amount; - this.damageResult = damageResult || HitResult.EFFECTIVE; + this.damageResult = damageResult; this.critical = critical; } diff --git a/src/phases/egg-hatch-phase.ts b/src/phases/egg-hatch-phase.ts index 49a408e8699..07eeeb0f8ae 100644 --- a/src/phases/egg-hatch-phase.ts +++ b/src/phases/egg-hatch-phase.ts @@ -11,7 +11,7 @@ import PokemonInfoContainer from "#app/ui/pokemon-info-container"; import { Mode } from "#app/ui/ui"; import i18next from "i18next"; import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; -import * as Utils from "#app/utils"; +import { fixedInt, getFrameMs, randInt } from "#app/utils"; import type { EggLapsePhase } from "./egg-lapse-phase"; import type { EggHatchData } from "#app/data/egg-hatch-data"; import { doShinySparkleAnim } from "#app/field/anims"; @@ -306,17 +306,17 @@ export class EggHatchPhase extends Phase { this.canSkip = false; this.hatched = true; if (this.evolutionBgm) { - SoundFade.fadeOut(globalScene, this.evolutionBgm, Utils.fixedInt(100)); + SoundFade.fadeOut(globalScene, this.evolutionBgm, fixedInt(100)); } for (let e = 0; e < 5; e++) { - globalScene.time.delayedCall(Utils.fixedInt(375 * e), () => + globalScene.time.delayedCall(fixedInt(375 * e), () => globalScene.playSound("se/egg_hatch", { volume: 1 - e * 0.2 }), ); } this.eggLightraysOverlay.setVisible(true); this.eggLightraysOverlay.play("egg_lightrays"); globalScene.tweens.add({ - duration: Utils.fixedInt(125), + duration: fixedInt(125), targets: this.eggHatchOverlay, alpha: 1, ease: "Cubic.easeIn", @@ -325,7 +325,7 @@ export class EggHatchPhase extends Phase { this.canSkip = true; }, }); - globalScene.time.delayedCall(Utils.fixedInt(1500), () => { + globalScene.time.delayedCall(fixedInt(1500), () => { this.canSkip = false; if (!this.skipped) { this.doReveal(); @@ -363,46 +363,43 @@ export class EggHatchPhase extends Phase { this.pokemonSprite.setPipelineData("shiny", this.pokemon.shiny); this.pokemonSprite.setPipelineData("variant", this.pokemon.variant); this.pokemonSprite.setVisible(true); - globalScene.time.delayedCall(Utils.fixedInt(250), () => { + globalScene.time.delayedCall(fixedInt(250), () => { this.eggsToHatchCount--; this.eggHatchHandler.eventTarget.dispatchEvent(new EggCountChangedEvent(this.eggsToHatchCount)); this.pokemon.cry(); if (isShiny) { - globalScene.time.delayedCall(Utils.fixedInt(500), () => { + globalScene.time.delayedCall(fixedInt(500), () => { doShinySparkleAnim(this.pokemonShinySparkle, this.pokemon.variant); }); } - globalScene.time.delayedCall( - Utils.fixedInt(!this.skipped ? (!isShiny ? 1250 : 1750) : !isShiny ? 250 : 750), - () => { - this.infoContainer.show(this.pokemon, false, this.skipped ? 2 : 1); + globalScene.time.delayedCall(fixedInt(!this.skipped ? (!isShiny ? 1250 : 1750) : !isShiny ? 250 : 750), () => { + this.infoContainer.show(this.pokemon, false, this.skipped ? 2 : 1); - globalScene.playSoundWithoutBgm("evolution_fanfare"); + globalScene.playSoundWithoutBgm("evolution_fanfare"); - globalScene.ui.showText( - i18next.t("egg:hatchFromTheEgg", { - pokemonName: this.pokemon.species.getExpandedSpeciesName(), - }), - null, - () => { - globalScene.gameData.updateSpeciesDexIvs(this.pokemon.species.speciesId, this.pokemon.ivs); - globalScene.gameData.setPokemonCaught(this.pokemon, true, true).then(() => { - globalScene.gameData.setEggMoveUnlocked(this.pokemon.species, this.eggMoveIndex).then(value => { - this.eggHatchData.setEggMoveUnlocked(value); - globalScene.ui.showText("", 0); - this.end(); - }); + globalScene.ui.showText( + i18next.t("egg:hatchFromTheEgg", { + pokemonName: this.pokemon.species.getExpandedSpeciesName(), + }), + null, + () => { + globalScene.gameData.updateSpeciesDexIvs(this.pokemon.species.speciesId, this.pokemon.ivs); + globalScene.gameData.setPokemonCaught(this.pokemon, true, true).then(() => { + globalScene.gameData.setEggMoveUnlocked(this.pokemon.species, this.eggMoveIndex).then(value => { + this.eggHatchData.setEggMoveUnlocked(value); + globalScene.ui.showText("", 0); + this.end(); }); - }, - null, - true, - 3000, - ); - }, - ); + }); + }, + null, + true, + 3000, + ); + }); }); globalScene.tweens.add({ - duration: Utils.fixedInt(this.skipped ? 500 : 3000), + duration: fixedInt(this.skipped ? 500 : 3000), targets: this.eggHatchOverlay, alpha: 0, ease: "Cubic.easeOut", @@ -427,9 +424,9 @@ export class EggHatchPhase extends Phase { doSpray(intensity: number, offsetY?: number) { globalScene.tweens.addCounter({ repeat: intensity, - duration: Utils.getFrameMs(1), + duration: getFrameMs(1), onRepeat: () => { - this.doSprayParticle(Utils.randInt(8), offsetY || 0); + this.doSprayParticle(randInt(8), offsetY || 0); }, }); } @@ -448,12 +445,12 @@ export class EggHatchPhase extends Phase { let f = 0; let yOffset = 0; - const speed = 3 - Utils.randInt(8); - const amp = 24 + Utils.randInt(32); + const speed = 3 - randInt(8); + const amp = 24 + randInt(32); const particleTimer = globalScene.tweens.addCounter({ repeat: -1, - duration: Utils.getFrameMs(1), + duration: getFrameMs(1), onRepeat: () => { updateParticle(); }, diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index ad2bf689e38..9e5edf3e1d9 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -43,10 +43,10 @@ import { getNatureName } from "#app/data/nature"; export class EncounterPhase extends BattlePhase { private loaded: boolean; - constructor(loaded?: boolean) { + constructor(loaded = false) { super(); - this.loaded = !!loaded; + this.loaded = loaded; } start() { diff --git a/src/phases/evolution-phase.ts b/src/phases/evolution-phase.ts index bb283fa8139..203c7542eff 100644 --- a/src/phases/evolution-phase.ts +++ b/src/phases/evolution-phase.ts @@ -5,7 +5,7 @@ import { globalScene } from "#app/global-scene"; import type { SpeciesFormEvolution } from "#app/data/balance/pokemon-evolutions"; import { FusionSpeciesFormEvolution } from "#app/data/balance/pokemon-evolutions"; import type EvolutionSceneHandler from "#app/ui/evolution-scene-handler"; -import * as Utils from "#app/utils"; +import { fixedInt, getFrameMs, randInt } from "#app/utils"; import { Mode } from "#app/ui/ui"; import { cos, sin } from "#app/field/anims"; import type { PlayerPokemon } from "#app/field/pokemon"; @@ -332,9 +332,9 @@ export class EvolutionPhase extends Phase { () => this.end(), null, true, - Utils.fixedInt(4000), + fixedInt(4000), ); - globalScene.time.delayedCall(Utils.fixedInt(4250), () => globalScene.playBgm()); + globalScene.time.delayedCall(fixedInt(4250), () => globalScene.playBgm()); }); }); }; @@ -392,7 +392,7 @@ export class EvolutionPhase extends Phase { globalScene.tweens.addCounter({ repeat: 64, - duration: Utils.getFrameMs(1), + duration: getFrameMs(1), onRepeat: () => { if (f < 64) { if (!(f & 7)) { @@ -411,7 +411,7 @@ export class EvolutionPhase extends Phase { globalScene.tweens.addCounter({ repeat: 96, - duration: Utils.getFrameMs(1), + duration: getFrameMs(1), onRepeat: () => { if (f < 96) { if (f < 6) { @@ -461,7 +461,7 @@ export class EvolutionPhase extends Phase { globalScene.tweens.addCounter({ repeat: 48, - duration: Utils.getFrameMs(1), + duration: getFrameMs(1), onRepeat: () => { if (!f) { for (let i = 0; i < 16; i++) { @@ -482,14 +482,14 @@ export class EvolutionPhase extends Phase { globalScene.tweens.addCounter({ repeat: 48, - duration: Utils.getFrameMs(1), + duration: getFrameMs(1), onRepeat: () => { if (!f) { for (let i = 0; i < 8; i++) { this.doSprayParticle(i); } } else if (f < 50) { - this.doSprayParticle(Utils.randInt(8)); + this.doSprayParticle(randInt(8)); } f++; }, @@ -506,7 +506,7 @@ export class EvolutionPhase extends Phase { const particleTimer = globalScene.tweens.addCounter({ repeat: -1, - duration: Utils.getFrameMs(1), + duration: getFrameMs(1), onRepeat: () => { updateParticle(); }, @@ -543,7 +543,7 @@ export class EvolutionPhase extends Phase { const particleTimer = globalScene.tweens.addCounter({ repeat: -1, - duration: Utils.getFrameMs(1), + duration: getFrameMs(1), onRepeat: () => { updateParticle(); }, @@ -575,7 +575,7 @@ export class EvolutionPhase extends Phase { const particleTimer = globalScene.tweens.addCounter({ repeat: -1, - duration: Utils.getFrameMs(1), + duration: getFrameMs(1), onRepeat: () => { updateParticle(); }, @@ -605,12 +605,12 @@ export class EvolutionPhase extends Phase { let f = 0; let yOffset = 0; - const speed = 3 - Utils.randInt(8); - const amp = 48 + Utils.randInt(64); + const speed = 3 - randInt(8); + const amp = 48 + randInt(64); const particleTimer = globalScene.tweens.addCounter({ repeat: -1, - duration: Utils.getFrameMs(1), + duration: getFrameMs(1), onRepeat: () => { updateParticle(); }, diff --git a/src/phases/exp-phase.ts b/src/phases/exp-phase.ts index 092482d4c18..b7d62c92bcf 100644 --- a/src/phases/exp-phase.ts +++ b/src/phases/exp-phase.ts @@ -2,7 +2,7 @@ import { globalScene } from "#app/global-scene"; import { getPokemonNameWithAffix } from "#app/messages"; import { ExpBoosterModifier } from "#app/modifier/modifier"; import i18next from "i18next"; -import * as Utils from "#app/utils"; +import { NumberHolder } from "#app/utils"; import { PlayerPartyMemberPokemonPhase } from "./player-party-member-pokemon-phase"; import { LevelUpPhase } from "./level-up-phase"; @@ -19,7 +19,7 @@ export class ExpPhase extends PlayerPartyMemberPokemonPhase { super.start(); const pokemon = this.getPokemon(); - const exp = new Utils.NumberHolder(this.expValue); + const exp = new NumberHolder(this.expValue); globalScene.applyModifiers(ExpBoosterModifier, true, exp); exp.value = Math.floor(exp.value); globalScene.ui.showText( diff --git a/src/phases/form-change-phase.ts b/src/phases/form-change-phase.ts index e0ec4e87600..bf94284b117 100644 --- a/src/phases/form-change-phase.ts +++ b/src/phases/form-change-phase.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import * as Utils from "../utils"; +import { fixedInt } from "#app/utils"; import { achvs } from "../system/achv"; import type { SpeciesFormChange } from "../data/pokemon-forms"; import { getSpeciesFormChangeMessage } from "../data/pokemon-forms"; @@ -9,7 +9,7 @@ import type PartyUiHandler from "../ui/party-ui-handler"; import { getPokemonNameWithAffix } from "../messages"; import { EndEvolutionPhase } from "./end-evolution-phase"; import { EvolutionPhase } from "./evolution-phase"; -import { BattlerTagType } from "#app/enums/battler-tag-type"; +import { BattlerTagType } from "#enums/battler-tag-type"; import { SpeciesFormKey } from "#enums/species-form-key"; export class FormChangePhase extends EvolutionPhase { @@ -151,9 +151,9 @@ export class FormChangePhase extends EvolutionPhase { () => this.end(), null, true, - Utils.fixedInt(delay), + fixedInt(delay), ); - globalScene.time.delayedCall(Utils.fixedInt(delay + 250), () => + globalScene.time.delayedCall(fixedInt(delay + 250), () => globalScene.playBgm(), ); }); diff --git a/src/phases/game-over-phase.ts b/src/phases/game-over-phase.ts index f105b625cc8..1ccdc9c7106 100644 --- a/src/phases/game-over-phase.ts +++ b/src/phases/game-over-phase.ts @@ -20,7 +20,7 @@ import { UnlockPhase } from "#app/phases/unlock-phase"; import { achvs, ChallengeAchv } from "#app/system/achv"; import { Unlockables } from "#app/system/unlockables"; import { Mode } from "#app/ui/ui"; -import * as Utils from "#app/utils"; +import { isLocal, isLocalServerConnected } from "#app/utils"; import { PlayerGender } from "#enums/player-gender"; import { TrainerType } from "#enums/trainer-type"; import i18next from "i18next"; @@ -219,7 +219,7 @@ export class GameOverPhase extends BattlePhase { /* Added a local check to see if the game is running offline If Online, execute apiFetch as intended If Offline, execute offlineNewClear() only for victory, a localStorage implementation of newClear daily run checks */ - if (!Utils.isLocal || Utils.isLocalServerConnected) { + if (!isLocal || isLocalServerConnected) { pokerogueApi.savedata.session .newclear({ slot: globalScene.sessionSlotId, diff --git a/src/phases/login-phase.ts b/src/phases/login-phase.ts index 5cce6ca0298..846482ff726 100644 --- a/src/phases/login-phase.ts +++ b/src/phases/login-phase.ts @@ -5,26 +5,26 @@ import { Phase } from "#app/phase"; import { handleTutorial, Tutorial } from "#app/tutorial"; import { Mode } from "#app/ui/ui"; import i18next, { t } from "i18next"; -import * as Utils from "#app/utils"; +import { getCookie, sessionIdKey, executeIf, removeCookie } from "#app/utils"; import { SelectGenderPhase } from "./select-gender-phase"; import { UnavailablePhase } from "./unavailable-phase"; export class LoginPhase extends Phase { private showText: boolean; - constructor(showText?: boolean) { + constructor(showText = true) { super(); - this.showText = showText === undefined || !!showText; + this.showText = showText; } start(): void { super.start(); - const hasSession = !!Utils.getCookie(Utils.sessionIdKey); + const hasSession = !!getCookie(sessionIdKey); globalScene.ui.setMode(Mode.LOADING, { buttonActions: [] }); - Utils.executeIf(bypassLogin || hasSession, updateUserInfo).then(response => { + executeIf(bypassLogin || hasSession, updateUserInfo).then(response => { const success = response ? response[0] : false; const statusCode = response ? response[1] : null; if (!success) { @@ -38,7 +38,7 @@ export class LoginPhase extends Phase { const loadData = () => { updateUserInfo().then(success => { if (!success[0]) { - Utils.removeCookie(Utils.sessionIdKey); + removeCookie(sessionIdKey); globalScene.reset(true, true); return; } @@ -60,7 +60,7 @@ export class LoginPhase extends Phase { globalScene.ui.playSelect(); updateUserInfo().then(success => { if (!success[0]) { - Utils.removeCookie(Utils.sessionIdKey); + removeCookie(sessionIdKey); globalScene.reset(true, true); return; } @@ -89,7 +89,7 @@ export class LoginPhase extends Phase { ], }); } else if (statusCode === 401) { - Utils.removeCookie(Utils.sessionIdKey); + removeCookie(sessionIdKey); globalScene.reset(true, true); } else { globalScene.unshiftPhase(new UnavailablePhase()); diff --git a/src/phases/message-phase.ts b/src/phases/message-phase.ts index cff7249fcfa..f6777579857 100644 --- a/src/phases/message-phase.ts +++ b/src/phases/message-phase.ts @@ -3,9 +3,9 @@ import { Phase } from "#app/phase"; export class MessagePhase extends Phase { private text: string; - private callbackDelay: number | null; - private prompt: boolean | null; - private promptDelay: number | null; + private callbackDelay?: number | null; + private prompt?: boolean | null; + private promptDelay?: number | null; private speaker?: string; constructor( @@ -18,9 +18,9 @@ export class MessagePhase extends Phase { super(); this.text = text; - this.callbackDelay = callbackDelay!; // TODO: is this bang correct? - this.prompt = prompt!; // TODO: is this bang correct? - this.promptDelay = promptDelay!; // TODO: is this bang correct? + this.callbackDelay = callbackDelay; + this.prompt = prompt; + this.promptDelay = promptDelay; this.speaker = speaker; } diff --git a/src/phases/money-reward-phase.ts b/src/phases/money-reward-phase.ts index 56f46d25f77..ae8dc90616d 100644 --- a/src/phases/money-reward-phase.ts +++ b/src/phases/money-reward-phase.ts @@ -2,7 +2,7 @@ import { globalScene } from "#app/global-scene"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import { MoneyMultiplierModifier } from "#app/modifier/modifier"; import i18next from "i18next"; -import * as Utils from "#app/utils"; +import { NumberHolder } from "#app/utils"; import { BattlePhase } from "./battle-phase"; export class MoneyRewardPhase extends BattlePhase { @@ -15,7 +15,7 @@ export class MoneyRewardPhase extends BattlePhase { } start() { - const moneyAmount = new Utils.NumberHolder(globalScene.getWaveMoneyAmount(this.moneyMultiplier)); + const moneyAmount = new NumberHolder(globalScene.getWaveMoneyAmount(this.moneyMultiplier)); globalScene.applyModifiers(MoneyMultiplierModifier, true, moneyAmount); diff --git a/src/phases/move-anim-test-phase.ts b/src/phases/move-anim-test-phase.ts deleted file mode 100644 index e8b7c0c8fa7..00000000000 --- a/src/phases/move-anim-test-phase.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { globalScene } from "#app/global-scene"; -import { initMoveAnim, loadMoveAnimAssets, MoveAnim } from "#app/data/battle-anims"; -import { allMoves, SelfStatusMove } from "#app/data/moves/move"; -import { Moves } from "#app/enums/moves"; -import * as Utils from "#app/utils"; -import { BattlePhase } from "./battle-phase"; - -export class MoveAnimTestPhase extends BattlePhase { - private moveQueue: Moves[]; - - constructor(moveQueue?: Moves[]) { - super(); - - this.moveQueue = moveQueue || Utils.getEnumValues(Moves).slice(1); - } - - start() { - const moveQueue = this.moveQueue.slice(0); - this.playMoveAnim(moveQueue, true); - } - - playMoveAnim(moveQueue: Moves[], player: boolean) { - const moveId = player ? moveQueue[0] : moveQueue.shift(); - if (moveId === undefined) { - this.playMoveAnim(this.moveQueue.slice(0), true); - return; - } - if (player) { - console.log(Moves[moveId]); - } - - initMoveAnim(moveId).then(() => { - loadMoveAnimAssets([moveId], true).then(() => { - const user = player ? globalScene.getPlayerPokemon()! : globalScene.getEnemyPokemon()!; - const target = - player !== allMoves[moveId] instanceof SelfStatusMove - ? globalScene.getEnemyPokemon()! - : globalScene.getPlayerPokemon()!; - new MoveAnim(moveId, user, target.getBattlerIndex()).play(allMoves[moveId].hitsSubstitute(user, target), () => { - // TODO: are the bangs correct here? - if (player) { - this.playMoveAnim(moveQueue, false); - } else { - this.playMoveAnim(moveQueue, true); - } - }); - }); - }); - } -} diff --git a/src/phases/move-end-phase.ts b/src/phases/move-end-phase.ts index f3a40ce69bd..53856956401 100644 --- a/src/phases/move-end-phase.ts +++ b/src/phases/move-end-phase.ts @@ -5,7 +5,7 @@ import type { BattlerIndex } from "#app/battle"; export class MoveEndPhase extends PokemonPhase { private wasFollowUp: boolean; - constructor(battlerIndex: BattlerIndex, wasFollowUp: boolean = false) { + constructor(battlerIndex: BattlerIndex, wasFollowUp = false) { super(battlerIndex); this.wasFollowUp = wasFollowUp; } diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index 33e772eb2ea..82b73f681a0 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -227,7 +227,7 @@ export class MovePhase extends BattlePhase { (!this.pokemon.randSeedInt(4) || Overrides.STATUS_ACTIVATION_OVERRIDE === true) && Overrides.STATUS_ACTIVATION_OVERRIDE !== false; break; - case StatusEffect.SLEEP: + case StatusEffect.SLEEP: { applyMoveAttrs(BypassSleepAttr, this.pokemon, null, this.move.getMove()); const turnsRemaining = new NumberHolder(this.pokemon.status.sleepTurnsRemaining ?? 0); applyAbAttrs( @@ -242,6 +242,7 @@ export class MovePhase extends BattlePhase { healed = this.pokemon.status.sleepTurnsRemaining <= 0; activated = !healed && !this.pokemon.getTag(BattlerTagType.BYPASS_SLEEP); break; + } case StatusEffect.FREEZE: healed = !!this.move diff --git a/src/phases/mystery-encounter-phases.ts b/src/phases/mystery-encounter-phases.ts index eb187617e69..f42290ff872 100644 --- a/src/phases/mystery-encounter-phases.ts +++ b/src/phases/mystery-encounter-phases.ts @@ -26,8 +26,7 @@ import { TrainerSlot } from "#enums/trainer-slot"; import { IvScannerModifier } from "../modifier/modifier"; import { Phase } from "../phase"; import { Mode } from "../ui/ui"; -import * as Utils from "../utils"; -import { isNullOrUndefined } from "../utils"; +import { isNullOrUndefined, randSeedItem } from "#app/utils"; /** * Will handle (in order): @@ -387,7 +386,7 @@ export class MysteryEncounterBattlePhase extends Phase { const trainer = globalScene.currentBattle.trainer; let message: string; globalScene.executeWithSeedOffset( - () => (message = Utils.randSeedItem(encounterMessages)), + () => (message = randSeedItem(encounterMessages)), globalScene.currentBattle.mysteryEncounter?.getSeedOffset(), ); message = message!; // tell TS compiler it's defined now diff --git a/src/phases/new-biome-encounter-phase.ts b/src/phases/new-biome-encounter-phase.ts index bb1fe54fe9f..3449a562c4a 100644 --- a/src/phases/new-biome-encounter-phase.ts +++ b/src/phases/new-biome-encounter-phase.ts @@ -4,10 +4,6 @@ import { getRandomWeatherType } from "#app/data/weather"; import { NextEncounterPhase } from "./next-encounter-phase"; export class NewBiomeEncounterPhase extends NextEncounterPhase { - constructor() { - super(); - } - doEncounter(): void { globalScene.playBgm(undefined, true); diff --git a/src/phases/next-encounter-phase.ts b/src/phases/next-encounter-phase.ts index e53f775f083..e5e61312c3b 100644 --- a/src/phases/next-encounter-phase.ts +++ b/src/phases/next-encounter-phase.ts @@ -2,10 +2,6 @@ import { globalScene } from "#app/global-scene"; import { EncounterPhase } from "./encounter-phase"; export class NextEncounterPhase extends EncounterPhase { - constructor() { - super(); - } - start() { super.start(); } diff --git a/src/phases/party-heal-phase.ts b/src/phases/party-heal-phase.ts index a9b24309e24..137af9f3a2d 100644 --- a/src/phases/party-heal-phase.ts +++ b/src/phases/party-heal-phase.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import * as Utils from "#app/utils"; +import { fixedInt } from "#app/utils"; import { BattlePhase } from "./battle-phase"; export class PartyHealPhase extends BattlePhase { @@ -28,7 +28,7 @@ export class PartyHealPhase extends BattlePhase { pokemon.updateInfo(true); } const healSong = globalScene.playSoundWithoutBgm("heal"); - globalScene.time.delayedCall(Utils.fixedInt(healSong.totalDuration * 1000), () => { + globalScene.time.delayedCall(fixedInt(healSong.totalDuration * 1000), () => { healSong.destroy(); if (this.resumeBgm && bgmPlaying) { globalScene.playBgm(); diff --git a/src/phases/pokemon-anim-phase.ts b/src/phases/pokemon-anim-phase.ts index b9c91508b5a..f0693a52aaa 100644 --- a/src/phases/pokemon-anim-phase.ts +++ b/src/phases/pokemon-anim-phase.ts @@ -8,18 +8,18 @@ import { Species } from "#enums/species"; export class PokemonAnimPhase extends BattlePhase { /** The type of animation to play in this phase */ - private key: PokemonAnimType; + protected key: PokemonAnimType; /** The Pokemon to which this animation applies */ - private pokemon: Pokemon; + protected pokemon: Pokemon; /** Any other field sprites affected by this animation */ - private fieldAssets: Phaser.GameObjects.Sprite[]; + protected fieldAssets: Phaser.GameObjects.Sprite[]; - constructor(key: PokemonAnimType, pokemon: Pokemon, fieldAssets?: Phaser.GameObjects.Sprite[]) { + constructor(key: PokemonAnimType, pokemon: Pokemon, fieldAssets: Phaser.GameObjects.Sprite[] = []) { super(); this.key = key; this.pokemon = pokemon; - this.fieldAssets = fieldAssets ?? []; + this.fieldAssets = fieldAssets; } start(): void { diff --git a/src/phases/pokemon-heal-phase.ts b/src/phases/pokemon-heal-phase.ts index ecfe99389eb..651c625b23a 100644 --- a/src/phases/pokemon-heal-phase.ts +++ b/src/phases/pokemon-heal-phase.ts @@ -8,7 +8,7 @@ import { getPokemonNameWithAffix } from "#app/messages"; import { HealingBoosterModifier } from "#app/modifier/modifier"; import { HealAchv } from "#app/system/achv"; import i18next from "i18next"; -import * as Utils from "#app/utils"; +import { NumberHolder } from "#app/utils"; import { CommonAnimPhase } from "./common-anim-phase"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import type { HealBlockTag } from "#app/data/battler-tags"; @@ -72,11 +72,11 @@ export class PokemonHealPhase extends CommonAnimPhase { return super.end(); } if (healOrDamage) { - const hpRestoreMultiplier = new Utils.NumberHolder(1); + const hpRestoreMultiplier = new NumberHolder(1); if (!this.revive) { globalScene.applyModifiers(HealingBoosterModifier, this.player, hpRestoreMultiplier); } - const healAmount = new Utils.NumberHolder(Math.floor(this.hpHealed * hpRestoreMultiplier.value)); + const healAmount = new NumberHolder(Math.floor(this.hpHealed * hpRestoreMultiplier.value)); if (healAmount.value < 0) { pokemon.damageAndUpdate(healAmount.value * -1, { result: HitResult.INDIRECT }); healAmount.value = 0; diff --git a/src/phases/pokemon-phase.ts b/src/phases/pokemon-phase.ts index 3ca5f09f953..8c30512cdc4 100644 --- a/src/phases/pokemon-phase.ts +++ b/src/phases/pokemon-phase.ts @@ -11,11 +11,14 @@ export abstract class PokemonPhase extends FieldPhase { constructor(battlerIndex?: BattlerIndex | number) { super(); - if (battlerIndex === undefined) { - battlerIndex = globalScene + battlerIndex = + battlerIndex ?? + globalScene .getField() - .find(p => p?.isActive())! - .getBattlerIndex(); // TODO: is the bang correct here? + .find(p => p?.isActive())! // TODO: is the bang correct here? + .getBattlerIndex(); + if (battlerIndex === undefined) { + console.warn("There are no Pokemon on the field!"); // TODO: figure out a suitable fallback behavior } this.battlerIndex = battlerIndex; diff --git a/src/phases/post-game-over-phase.ts b/src/phases/post-game-over-phase.ts index f86ec8496e0..753251e992f 100644 --- a/src/phases/post-game-over-phase.ts +++ b/src/phases/post-game-over-phase.ts @@ -4,12 +4,12 @@ import type { EndCardPhase } from "./end-card-phase"; import { TitlePhase } from "./title-phase"; export class PostGameOverPhase extends Phase { - private endCardPhase: EndCardPhase | null; + private endCardPhase?: EndCardPhase; constructor(endCardPhase?: EndCardPhase) { super(); - this.endCardPhase = endCardPhase!; // TODO: is this bang correct? + this.endCardPhase = endCardPhase; } start() { diff --git a/src/phases/post-turn-status-effect-phase.ts b/src/phases/post-turn-status-effect-phase.ts index f6341666e7e..619ef22d01e 100644 --- a/src/phases/post-turn-status-effect-phase.ts +++ b/src/phases/post-turn-status-effect-phase.ts @@ -13,7 +13,7 @@ import { getStatusEffectActivationText } from "#app/data/status-effect"; import { BattleSpec } from "#app/enums/battle-spec"; import { StatusEffect } from "#app/enums/status-effect"; import { getPokemonNameWithAffix } from "#app/messages"; -import * as Utils from "#app/utils"; +import { BooleanHolder, NumberHolder } from "#app/utils"; import { PokemonPhase } from "./pokemon-phase"; export class PostTurnStatusEffectPhase extends PokemonPhase { @@ -26,7 +26,7 @@ export class PostTurnStatusEffectPhase extends PokemonPhase { const pokemon = this.getPokemon(); if (pokemon?.isActive(true) && pokemon.status && pokemon.status.isPostTurn() && !pokemon.switchOutStatus) { pokemon.status.incrementTurn(); - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); applyAbAttrs(BlockStatusDamageAbAttr, pokemon, cancelled); @@ -34,7 +34,7 @@ export class PostTurnStatusEffectPhase extends PokemonPhase { globalScene.queueMessage( getStatusEffectActivationText(pokemon.status.effect, getPokemonNameWithAffix(pokemon)), ); - const damage = new Utils.NumberHolder(0); + const damage = new NumberHolder(0); switch (pokemon.status.effect) { case StatusEffect.POISON: damage.value = Math.max(pokemon.getMaxHp() >> 3, 1); diff --git a/src/phases/reload-session-phase.ts b/src/phases/reload-session-phase.ts index 3a4a4e0e3a5..a7ac0002b03 100644 --- a/src/phases/reload-session-phase.ts +++ b/src/phases/reload-session-phase.ts @@ -1,15 +1,15 @@ import { globalScene } from "#app/global-scene"; import { Phase } from "#app/phase"; import { Mode } from "#app/ui/ui"; -import * as Utils from "#app/utils"; +import { fixedInt } from "#app/utils"; export class ReloadSessionPhase extends Phase { - private systemDataStr: string | null; + private systemDataStr?: string; constructor(systemDataStr?: string) { super(); - this.systemDataStr = systemDataStr ?? null; + this.systemDataStr = systemDataStr; } start(): void { @@ -18,7 +18,7 @@ export class ReloadSessionPhase extends Phase { let delayElapsed = false; let loaded = false; - globalScene.time.delayedCall(Utils.fixedInt(1500), () => { + globalScene.time.delayedCall(fixedInt(1500), () => { if (loaded) { this.end(); } else { diff --git a/src/phases/scan-ivs-phase.ts b/src/phases/scan-ivs-phase.ts index 2a2d68591ca..aaeeb7f84f8 100644 --- a/src/phases/scan-ivs-phase.ts +++ b/src/phases/scan-ivs-phase.ts @@ -8,6 +8,7 @@ import i18next from "i18next"; import { PokemonPhase } from "./pokemon-phase"; export class ScanIvsPhase extends PokemonPhase { + // biome-ignore lint/complexity/noUselessConstructor: This changes `battlerIndex` to be required constructor(battlerIndex: BattlerIndex) { super(battlerIndex); } @@ -24,7 +25,8 @@ export class ScanIvsPhase extends PokemonPhase { const uiTheme = globalScene.uiTheme; // Assuming uiTheme is accessible for (let e = 0; e < enemyField.length; e++) { enemyIvs = enemyField[e].ivs; - const currentIvs = globalScene.gameData.dexData[enemyField[e].species.getRootSpeciesId()].ivs; // we are using getRootSpeciesId() here because we want to check against the baby form, not the mid form if it exists + // we are using getRootSpeciesId() here because we want to check against the baby form, not the mid form if it exists + const currentIvs = globalScene.gameData.dexData[enemyField[e].species.getRootSpeciesId()].ivs; statsContainer = enemyField[e].getBattleInfo().getStatsValueContainer().list as Phaser.GameObjects.Sprite[]; statsContainerLabels = statsContainer.filter(m => m.name.indexOf("icon_stat_label") >= 0); for (let s = 0; s < statsContainerLabels.length; s++) { diff --git a/src/phases/select-biome-phase.ts b/src/phases/select-biome-phase.ts index 6a11967832a..2d67cb87405 100644 --- a/src/phases/select-biome-phase.ts +++ b/src/phases/select-biome-phase.ts @@ -5,15 +5,11 @@ import { MoneyInterestModifier, MapModifier } from "#app/modifier/modifier"; import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import { Mode } from "#app/ui/ui"; import { BattlePhase } from "./battle-phase"; -import * as Utils from "#app/utils"; +import { randSeedInt } from "#app/utils"; import { PartyHealPhase } from "./party-heal-phase"; import { SwitchBiomePhase } from "./switch-biome-phase"; export class SelectBiomePhase extends BattlePhase { - constructor() { - super(); - } - start() { super.start(); @@ -40,7 +36,7 @@ export class SelectBiomePhase extends BattlePhase { let biomes: Biome[] = []; globalScene.executeWithSeedOffset(() => { biomes = (biomeLinks[currentBiome] as (Biome | [Biome, number])[]) - .filter(b => !Array.isArray(b) || !Utils.randSeedInt(b[1])) + .filter(b => !Array.isArray(b) || !randSeedInt(b[1])) .map(b => (!Array.isArray(b) ? b : b[0])); }, globalScene.currentBattle.waveIndex); if (biomes.length > 1 && globalScene.findModifier(m => m instanceof MapModifier)) { @@ -51,7 +47,7 @@ export class SelectBiomePhase extends BattlePhase { ? [biomeLinks[currentBiome] as Biome] : (biomeLinks[currentBiome] as (Biome | [Biome, number])[]) ) - .filter((b, _i) => !Array.isArray(b) || !Utils.randSeedInt(b[1])) + .filter(b => !Array.isArray(b) || !randSeedInt(b[1])) .map(b => (Array.isArray(b) ? b[0] : b)); }, globalScene.currentBattle.waveIndex); const biomeSelectItems = biomeChoices.map(b => { @@ -70,7 +66,7 @@ export class SelectBiomePhase extends BattlePhase { delay: 1000, }); } else { - setNextBiome(biomes[Utils.randSeedInt(biomes.length)]); + setNextBiome(biomes[randSeedInt(biomes.length)]); } } else if (biomeLinks.hasOwnProperty(currentBiome)) { setNextBiome(biomeLinks[currentBiome] as Biome); diff --git a/src/phases/select-challenge-phase.ts b/src/phases/select-challenge-phase.ts index 2a6797d3556..5e6f20f93ee 100644 --- a/src/phases/select-challenge-phase.ts +++ b/src/phases/select-challenge-phase.ts @@ -3,10 +3,6 @@ import { Phase } from "#app/phase"; import { Mode } from "#app/ui/ui"; export class SelectChallengePhase extends Phase { - constructor() { - super(); - } - start() { super.start(); diff --git a/src/phases/select-gender-phase.ts b/src/phases/select-gender-phase.ts index 1c86536de53..4da60b38aa1 100644 --- a/src/phases/select-gender-phase.ts +++ b/src/phases/select-gender-phase.ts @@ -6,10 +6,6 @@ import { Mode } from "#app/ui/ui"; import i18next from "i18next"; export class SelectGenderPhase extends Phase { - constructor() { - super(); - } - start(): void { super.start(); diff --git a/src/phases/select-modifier-phase.ts b/src/phases/select-modifier-phase.ts index 11d448876d3..27ab7e374a2 100644 --- a/src/phases/select-modifier-phase.ts +++ b/src/phases/select-modifier-phase.ts @@ -26,7 +26,6 @@ import { SHOP_OPTIONS_ROW_LIMIT } from "#app/ui/modifier-select-ui-handler"; import PartyUiHandler, { PartyUiMode, PartyOption } from "#app/ui/party-ui-handler"; import { Mode } from "#app/ui/ui"; import i18next from "i18next"; -import * as Utils from "#app/utils"; import { BattlePhase } from "./battle-phase"; import Overrides from "#app/overrides"; import type { CustomModifierSettings } from "#app/modifier/modifier-type"; @@ -67,7 +66,7 @@ export class SelectModifierPhase extends BattlePhase { if (!this.isCopy) { regenerateModifierPoolThresholds(party, this.getPoolType(), this.rerollCount); } - const modifierCount = new Utils.NumberHolder(3); + const modifierCount = new NumberHolder(3); if (this.isPlayer()) { globalScene.applyModifiers(ExtraModifierModifier, true, modifierCount); globalScene.applyModifiers(TempExtraModifierModifier, true, modifierCount); diff --git a/src/phases/select-starter-phase.ts b/src/phases/select-starter-phase.ts index b3ebe6731c9..c6ded6be7af 100644 --- a/src/phases/select-starter-phase.ts +++ b/src/phases/select-starter-phase.ts @@ -15,10 +15,6 @@ import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; import * as Utils from "../utils"; export class SelectStarterPhase extends Phase { - constructor() { - super(); - } - start() { super.start(); diff --git a/src/phases/select-target-phase.ts b/src/phases/select-target-phase.ts index 2042d0a3fcf..035eaff41fa 100644 --- a/src/phases/select-target-phase.ts +++ b/src/phases/select-target-phase.ts @@ -8,6 +8,7 @@ import i18next from "#app/plugins/i18n"; import { allMoves } from "#app/data/moves/move"; export class SelectTargetPhase extends PokemonPhase { + // biome-ignore lint/complexity/noUselessConstructor: This makes `fieldIndex` required constructor(fieldIndex: number) { super(fieldIndex); } diff --git a/src/phases/shiny-sparkle-phase.ts b/src/phases/shiny-sparkle-phase.ts index 2540d98fb79..87a7db29cf6 100644 --- a/src/phases/shiny-sparkle-phase.ts +++ b/src/phases/shiny-sparkle-phase.ts @@ -3,6 +3,7 @@ import type { BattlerIndex } from "#app/battle"; import { PokemonPhase } from "./pokemon-phase"; export class ShinySparklePhase extends PokemonPhase { + // biome-ignore lint/complexity/noUselessConstructor: This makes `battlerIndex` required constructor(battlerIndex: BattlerIndex) { super(battlerIndex); } diff --git a/src/phases/show-party-exp-bar-phase.ts b/src/phases/show-party-exp-bar-phase.ts index 568b8b615c8..139f4efcc49 100644 --- a/src/phases/show-party-exp-bar-phase.ts +++ b/src/phases/show-party-exp-bar-phase.ts @@ -2,7 +2,7 @@ import { globalScene } from "#app/global-scene"; import { ExpGainsSpeed } from "#app/enums/exp-gains-speed"; import { ExpNotification } from "#app/enums/exp-notification"; import { ExpBoosterModifier } from "#app/modifier/modifier"; -import * as Utils from "#app/utils"; +import { NumberHolder } from "#app/utils"; import { HidePartyExpBarPhase } from "./hide-party-exp-bar-phase"; import { LevelUpPhase } from "./level-up-phase"; import { PlayerPartyMemberPokemonPhase } from "./player-party-member-pokemon-phase"; @@ -20,7 +20,7 @@ export class ShowPartyExpBarPhase extends PlayerPartyMemberPokemonPhase { super.start(); const pokemon = this.getPokemon(); - const exp = new Utils.NumberHolder(this.expValue); + const exp = new NumberHolder(this.expValue); globalScene.applyModifiers(ExpBoosterModifier, true, exp); exp.value = Math.floor(exp.value); diff --git a/src/phases/show-trainer-phase.ts b/src/phases/show-trainer-phase.ts index 740c11f5c5d..b6c1e345c70 100644 --- a/src/phases/show-trainer-phase.ts +++ b/src/phases/show-trainer-phase.ts @@ -3,10 +3,6 @@ import { PlayerGender } from "#app/enums/player-gender"; import { BattlePhase } from "./battle-phase"; export class ShowTrainerPhase extends BattlePhase { - constructor() { - super(); - } - start() { super.start(); diff --git a/src/phases/summon-missing-phase.ts b/src/phases/summon-missing-phase.ts index 32bc7495dce..a692455ce47 100644 --- a/src/phases/summon-missing-phase.ts +++ b/src/phases/summon-missing-phase.ts @@ -4,10 +4,6 @@ import { SummonPhase } from "./summon-phase"; import { globalScene } from "#app/global-scene"; export class SummonMissingPhase extends SummonPhase { - constructor(fieldIndex: number) { - super(fieldIndex); - } - preSummon(): void { globalScene.ui.showText( i18next.t("battle:sendOutPokemon", { diff --git a/src/phases/switch-summon-phase.ts b/src/phases/switch-summon-phase.ts index 16868bf9bc0..e0903ada275 100644 --- a/src/phases/switch-summon-phase.ts +++ b/src/phases/switch-summon-phase.ts @@ -23,11 +23,11 @@ export class SwitchSummonPhase extends SummonPhase { /** * Constructor for creating a new SwitchSummonPhase - * @param switchType the type of switch behavior - * @param fieldIndex integer representing position on the battle field - * @param slotIndex integer for the index of pokemon (in party of 6) to switch into - * @param doReturn boolean whether to render "comeback" dialogue - * @param player boolean if the switch is from the player + * @param switchType - The type of switch behavior + * @param fieldIndex - Position on the battle field + * @param slotIndex - The index of pokemon (in party of 6) to switch into + * @param doReturn - Whether to render "comeback" dialogue + * @param player - (Optional) `true` if the switch is from the player */ constructor(switchType: SwitchType, fieldIndex: number, slotIndex: number, doReturn: boolean, player?: boolean) { super(fieldIndex, player !== undefined ? player : true); diff --git a/src/phases/test-message-phase.ts b/src/phases/test-message-phase.ts deleted file mode 100644 index d5e74efd490..00000000000 --- a/src/phases/test-message-phase.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { MessagePhase } from "./message-phase"; - -export class TestMessagePhase extends MessagePhase { - constructor(message: string) { - super(message, null, true); - } -} diff --git a/src/phases/title-phase.ts b/src/phases/title-phase.ts index dc455a0a62a..108366d4774 100644 --- a/src/phases/title-phase.ts +++ b/src/phases/title-phase.ts @@ -18,7 +18,7 @@ import { vouchers } from "#app/system/voucher"; import type { OptionSelectConfig, OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import { SaveSlotUiMode } from "#app/ui/save-slot-select-ui-handler"; import { Mode } from "#app/ui/ui"; -import * as Utils from "#app/utils"; +import { isLocal, isLocalServerConnected, isNullOrUndefined } from "#app/utils"; import i18next from "i18next"; import { CheckSwitchPhase } from "./check-switch-phase"; import { EncounterPhase } from "./encounter-phase"; @@ -29,16 +29,10 @@ import { globalScene } from "#app/global-scene"; import Overrides from "#app/overrides"; export class TitlePhase extends Phase { - private loaded: boolean; + private loaded = false; private lastSessionData: SessionSaveData; public gameMode: GameModes; - constructor() { - super(); - - this.loaded = false; - } - start(): void { super.start(); @@ -282,7 +276,7 @@ export class TitlePhase extends Phase { }; // If Online, calls seed fetch from db to generate daily run. If Offline, generates a daily run based on current date. - if (!Utils.isLocal || Utils.isLocalServerConnected) { + if (!isLocal || isLocalServerConnected) { fetchDailyRunSeed() .then(seed => { if (seed) { @@ -296,7 +290,7 @@ export class TitlePhase extends Phase { }); } else { let seed: string = btoa(new Date().toISOString().substring(0, 10)); - if (!Utils.isNullOrUndefined(Overrides.DAILY_RUN_SEED_OVERRIDE)) { + if (!isNullOrUndefined(Overrides.DAILY_RUN_SEED_OVERRIDE)) { seed = Overrides.DAILY_RUN_SEED_OVERRIDE; } generateDaily(seed); diff --git a/src/phases/trainer-message-test-phase.ts b/src/phases/trainer-message-test-phase.ts deleted file mode 100644 index 23c2c86361c..00000000000 --- a/src/phases/trainer-message-test-phase.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { globalScene } from "#app/global-scene"; -import { trainerConfigs } from "#app/data/trainers/trainer-config"; -import type { TrainerType } from "#app/enums/trainer-type"; -import { BattlePhase } from "./battle-phase"; -import { TestMessagePhase } from "./test-message-phase"; - -export class TrainerMessageTestPhase extends BattlePhase { - private trainerTypes: TrainerType[]; - - constructor(...trainerTypes: TrainerType[]) { - super(); - - this.trainerTypes = trainerTypes; - } - - start() { - super.start(); - - const testMessages: string[] = []; - - for (const t of Object.keys(trainerConfigs)) { - const type = Number.parseInt(t); - if (this.trainerTypes.length && !this.trainerTypes.find(tt => tt === (type as TrainerType))) { - continue; - } - const config = trainerConfigs[type]; - [ - config.encounterMessages, - config.femaleEncounterMessages, - config.victoryMessages, - config.femaleVictoryMessages, - config.defeatMessages, - config.femaleDefeatMessages, - ].map(messages => { - if (messages?.length) { - testMessages.push(...messages); - } - }); - } - - for (const message of testMessages) { - globalScene.pushPhase(new TestMessagePhase(message)); - } - - this.end(); - } -} diff --git a/src/phases/trainer-victory-phase.ts b/src/phases/trainer-victory-phase.ts index a024885121f..637ddea8b56 100644 --- a/src/phases/trainer-victory-phase.ts +++ b/src/phases/trainer-victory-phase.ts @@ -3,7 +3,7 @@ import { TrainerType } from "#app/enums/trainer-type"; import { modifierTypes } from "#app/modifier/modifier-type"; import { vouchers } from "#app/system/voucher"; import i18next from "i18next"; -import * as Utils from "#app/utils"; +import { randSeedItem } from "#app/utils"; import { BattlePhase } from "./battle-phase"; import { ModifierRewardPhase } from "./modifier-reward-phase"; import { MoneyRewardPhase } from "./money-reward-phase"; @@ -14,10 +14,6 @@ import { achvs } from "#app/system/achv"; import { timedEventManager } from "#app/global-event-manager"; export class TrainerVictoryPhase extends BattlePhase { - constructor() { - super(); - } - start() { globalScene.disableMenu = true; @@ -82,7 +78,7 @@ export class TrainerVictoryPhase extends BattlePhase { const victoryMessages = globalScene.currentBattle.trainer?.getVictoryMessages()!; // TODO: is this bang correct? let message: string; globalScene.executeWithSeedOffset( - () => (message = Utils.randSeedItem(victoryMessages)), + () => (message = randSeedItem(victoryMessages)), globalScene.currentBattle.waveIndex, ); message = message!; // tell TS compiler it's defined now diff --git a/src/phases/turn-end-phase.ts b/src/phases/turn-end-phase.ts index ddfc0955508..9b84ea05e58 100644 --- a/src/phases/turn-end-phase.ts +++ b/src/phases/turn-end-phase.ts @@ -18,10 +18,6 @@ import { PokemonHealPhase } from "./pokemon-heal-phase"; import { globalScene } from "#app/global-scene"; export class TurnEndPhase extends FieldPhase { - constructor() { - super(); - } - start() { super.start(); diff --git a/src/phases/turn-init-phase.ts b/src/phases/turn-init-phase.ts index 3104b65eb3f..0c110024af7 100644 --- a/src/phases/turn-init-phase.ts +++ b/src/phases/turn-init-phase.ts @@ -15,10 +15,6 @@ import { TurnStartPhase } from "./turn-start-phase"; import { globalScene } from "#app/global-scene"; export class TurnInitPhase extends FieldPhase { - constructor() { - super(); - } - start() { super.start(); diff --git a/src/phases/turn-start-phase.ts b/src/phases/turn-start-phase.ts index 34dd7df3e89..d5b4160fe1b 100644 --- a/src/phases/turn-start-phase.ts +++ b/src/phases/turn-start-phase.ts @@ -6,7 +6,7 @@ import type Pokemon from "#app/field/pokemon"; import { PokemonMove } from "#app/field/pokemon"; import { BypassSpeedChanceModifier } from "#app/modifier/modifier"; import { Command } from "#app/ui/command-ui-handler"; -import * as Utils from "#app/utils"; +import { randSeedShuffle, BooleanHolder } from "#app/utils"; import { AttemptCapturePhase } from "./attempt-capture-phase"; import { AttemptRunPhase } from "./attempt-run-phase"; import { BerryPhase } from "./berry-phase"; @@ -24,10 +24,6 @@ import { globalScene } from "#app/global-scene"; import { TeraPhase } from "./tera-phase"; export class TurnStartPhase extends FieldPhase { - constructor() { - super(); - } - /** * This orders the active Pokemon on the field by speed into an BattlerIndex array and returns that array. * It also checks for Trick Room and reverses the array if it is present. @@ -43,14 +39,14 @@ export class TurnStartPhase extends FieldPhase { // was varying based on how long since you last reloaded globalScene.executeWithSeedOffset( () => { - orderedTargets = Utils.randSeedShuffle(orderedTargets); + orderedTargets = randSeedShuffle(orderedTargets); }, globalScene.currentBattle.turn, globalScene.waveSeed, ); // Next, a check for Trick Room is applied to determine sort order. - const speedReversed = new Utils.BooleanHolder(false); + const speedReversed = new BooleanHolder(false); globalScene.arena.applyTags(TrickRoomTag, false, speedReversed); // Adjust the sort function based on whether Trick Room is active. @@ -80,8 +76,8 @@ export class TurnStartPhase extends FieldPhase { .getField(true) .filter(p => p.summonData) .map(p => { - const bypassSpeed = new Utils.BooleanHolder(false); - const canCheckHeldItems = new Utils.BooleanHolder(true); + const bypassSpeed = new BooleanHolder(false); + const canCheckHeldItems = new BooleanHolder(true); applyAbAttrs(BypassSpeedChanceAbAttr, p, null, false, bypassSpeed); applyAbAttrs(PreventBypassSpeedChanceAbAttr, p, null, false, bypassSpeed, canCheckHeldItems); if (canCheckHeldItems.value) { diff --git a/src/phases/unavailable-phase.ts b/src/phases/unavailable-phase.ts index c0b5d4224c5..33042739971 100644 --- a/src/phases/unavailable-phase.ts +++ b/src/phases/unavailable-phase.ts @@ -4,10 +4,6 @@ import { Mode } from "#app/ui/ui"; import { LoginPhase } from "./login-phase"; export class UnavailablePhase extends Phase { - constructor() { - super(); - } - start(): void { globalScene.ui.setMode(Mode.UNAVAILABLE, () => { globalScene.unshiftPhase(new LoginPhase(true)); diff --git a/src/phases/weather-effect-phase.ts b/src/phases/weather-effect-phase.ts index d7a1f193029..5284c9fba85 100644 --- a/src/phases/weather-effect-phase.ts +++ b/src/phases/weather-effect-phase.ts @@ -15,7 +15,7 @@ import { BattlerTagType } from "#app/enums/battler-tag-type"; import { WeatherType } from "#app/enums/weather-type"; import type Pokemon from "#app/field/pokemon"; import { HitResult } from "#app/field/pokemon"; -import * as Utils from "#app/utils"; +import { BooleanHolder, toDmgValue } from "#app/utils"; import { CommonAnimPhase } from "./common-anim-phase"; export class WeatherEffectPhase extends CommonAnimPhase { @@ -35,14 +35,13 @@ export class WeatherEffectPhase extends CommonAnimPhase { this.weather = globalScene?.arena?.weather; if (!this.weather) { - this.end(); - return; + return this.end(); } this.setAnimation(CommonAnim.SUNNY + (this.weather.weatherType - 1)); if (this.weather.isDamaging()) { - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); this.executeForAll((pokemon: Pokemon) => applyPreWeatherEffectAbAttrs(SuppressWeatherEffectAbAttr, pokemon, this.weather, cancelled), @@ -50,7 +49,7 @@ export class WeatherEffectPhase extends CommonAnimPhase { if (!cancelled.value) { const inflictDamage = (pokemon: Pokemon) => { - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); applyPreWeatherEffectAbAttrs(PreWeatherDamageAbAttr, pokemon, this.weather, cancelled); applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); @@ -63,9 +62,9 @@ export class WeatherEffectPhase extends CommonAnimPhase { return; } - const damage = Utils.toDmgValue(pokemon.getMaxHp() / 16); + const damage = toDmgValue(pokemon.getMaxHp() / 16); - globalScene.queueMessage(getWeatherDamageMessage(this.weather?.weatherType!, pokemon)!); // TODO: are those bangs correct? + globalScene.queueMessage(getWeatherDamageMessage(this.weather!.weatherType, pokemon) ?? ""); pokemon.damageAndUpdate(damage, { result: HitResult.INDIRECT, ignoreSegments: true }); }; From 0479b9dfcc951969fec368f938ac3419673536e6 Mon Sep 17 00:00:00 2001 From: Diogo Cruz Diniz <50275496+didas72@users.noreply.github.com> Date: Mon, 7 Apr 2025 14:50:52 +0100 Subject: [PATCH 009/262] Fix #2735: Hazard moves incorrectly require targets (#5635) * Fix #2735: Hazard moves incorrectly require targets Hazard moves should no longer require targets to successfully execute * Apply suggestions from code review made by NightKev Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/data/battle-anims.ts | 3 +- src/data/moves/move.ts | 4 +- src/phases/move-effect-phase.ts | 415 ++++++++++++++++---------------- src/phases/move-phase.ts | 6 +- test/moves/spikes.test.ts | 14 ++ 5 files changed, 236 insertions(+), 206 deletions(-) diff --git a/src/data/battle-anims.ts b/src/data/battle-anims.ts index 341976b388d..511c80bee72 100644 --- a/src/data/battle-anims.ts +++ b/src/data/battle-anims.ts @@ -1428,7 +1428,8 @@ export class MoveAnim extends BattleAnim { public move: Moves; constructor(move: Moves, user: Pokemon, target: BattlerIndex, playOnEmptyField = false) { - super(user, globalScene.getField()[target], playOnEmptyField); + // Set target to the user pokemon if no target is found to avoid crashes + super(user, globalScene.getField()[target] ?? user, playOnEmptyField); this.move = move; } diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 421314b1945..7a820d984d0 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -5928,7 +5928,7 @@ export class AddArenaTagAttr extends MoveEffectAttr { } if ((move.chance < 0 || move.chance === 100 || user.randSeedInt(100) < move.chance) && user.getLastXMoves(1)[0]?.result === MoveResult.SUCCESS) { - const side = (this.selfSideTarget ? user : target).isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + const side = ((this.selfSideTarget ? user : target).isPlayer() !== (move.hasAttr(AddArenaTrapTagAttr) && target === user)) ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; globalScene.arena.addTag(this.tagType, this.turnCount, move.id, user.id, side); return true; } @@ -5977,7 +5977,7 @@ export class RemoveArenaTagsAttr extends MoveEffectAttr { export class AddArenaTrapTagAttr extends AddArenaTagAttr { getCondition(): MoveConditionFunc { return (user, target, move) => { - const side = (this.selfSideTarget ? user : target).isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + const side = (this.selfSideTarget !== user.isPlayer()) ? ArenaTagSide.ENEMY : ArenaTagSide.PLAYER; const tag = globalScene.arena.getTagOnSide(this.tagType, side) as ArenaTrapTag; if (!tag) { return true; diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index 7cc389651dd..6c46f7ff8c0 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -26,6 +26,7 @@ import { } from "#app/data/battler-tags"; import type { MoveAttr } from "#app/data/moves/move"; import { + AddArenaTrapTagAttr, applyFilteredMoveAttrs, applyMoveAttrs, AttackMove, @@ -209,12 +210,12 @@ export class MoveEffectPhase extends PokemonPhase { targets.some(t => t.hasAbilityWithAttr(ReflectStatusMoveAbAttr) || !!t.getTag(BattlerTagType.MAGIC_COAT)); /** - * If no targets are left for the move to hit (FAIL), or the invoked move is non-reflectable, single-target + * If no targets are left for the move to hit and it is not a hazard move (FAIL), or the invoked move is non-reflectable, single-target * (and not random target) and failed the hit check against its target (MISS), log the move * as FAILed or MISSed (depending on the conditions above) and end this phase. */ if ( - !hasActiveTargets || + (!hasActiveTargets && !move.hasAttr(AddArenaTrapTagAttr)) || (!mayBounce && !move.hasAttr(VariableTargetAttr) && !move.isMultiTarget() && @@ -239,18 +240,28 @@ export class MoveEffectPhase extends PokemonPhase { return this.end(); } - const playOnEmptyField = globalScene.currentBattle?.mysteryEncounter?.hasBattleAnimationsWithoutTargets ?? false; - // Move animation only needs one target - new MoveAnim(move.id as Moves, user, this.getFirstTarget()!.getBattlerIndex(), playOnEmptyField).play( - move.hitsSubstitute(user, this.getFirstTarget()!), - () => { - /** Has the move successfully hit a target (for damage) yet? */ - let hasHit = false; + const playOnEmptyField = + (globalScene.currentBattle?.mysteryEncounter?.hasBattleAnimationsWithoutTargets ?? false) || + (!hasActiveTargets && move.hasAttr(AddArenaTrapTagAttr)); + // Move animation only needs one target. The attacker is used as a fallback. + new MoveAnim( + move.id as Moves, + user, + this.getFirstTarget()?.getBattlerIndex() ?? BattlerIndex.ATTACKER, + playOnEmptyField, + ).play(move.hitsSubstitute(user, this.getFirstTarget()!), () => { + /** Has the move successfully hit a target (for damage) yet? */ + let hasHit = false; - // Prevent ENEMY_SIDE targeted moves from occurring twice in double battles - // and check which target will magic bounce. - const trueTargets: Pokemon[] = - move.moveTarget !== MoveTarget.ENEMY_SIDE + // Prevent ENEMY_SIDE targeted moves from occurring twice in double battles + // and check which target will magic bounce. + // In the event that the move is a hazard move, there may be no target and the move should still succeed. + // In this case, the user is used as the "target" to prevent a crash. + // This should not affect normal execution of the move otherwise. + const trueTargets: Pokemon[] = + !hasActiveTargets && move.hasAttr(AddArenaTrapTagAttr) + ? [user] + : move.moveTarget !== MoveTarget.ENEMY_SIDE ? targets : (() => { const magicCoatTargets = targets.filter( @@ -264,27 +275,27 @@ export class MoveEffectPhase extends PokemonPhase { return [magicCoatTargets[0]]; })(); - const queuedPhases: Phase[] = []; - for (const target of trueTargets) { - /** The {@linkcode ArenaTagSide} to which the target belongs */ - const targetSide = target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; - /** Has the invoked move been cancelled by conditional protection (e.g Quick Guard)? */ - const hasConditionalProtectApplied = new BooleanHolder(false); - /** Does the applied conditional protection bypass Protect-ignoring effects? */ - const bypassIgnoreProtect = new BooleanHolder(false); - /** If the move is not targeting a Pokemon on the user's side, try to apply conditional protection effects */ - if (!this.move.getMove().isAllyTarget()) { - globalScene.arena.applyTagsForSide( - ConditionalProtectTag, - targetSide, - false, - hasConditionalProtectApplied, - user, - target, - move.id, - bypassIgnoreProtect, - ); - } + const queuedPhases: Phase[] = []; + for (const target of trueTargets) { + /** The {@linkcode ArenaTagSide} to which the target belongs */ + const targetSide = target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + /** Has the invoked move been cancelled by conditional protection (e.g Quick Guard)? */ + const hasConditionalProtectApplied = new BooleanHolder(false); + /** Does the applied conditional protection bypass Protect-ignoring effects? */ + const bypassIgnoreProtect = new BooleanHolder(false); + /** If the move is not targeting a Pokemon on the user's side, try to apply conditional protection effects */ + if (!this.move.getMove().isAllyTarget()) { + globalScene.arena.applyTagsForSide( + ConditionalProtectTag, + targetSide, + false, + hasConditionalProtectApplied, + user, + target, + move.id, + bypassIgnoreProtect, + ); + } /** Is the target protected by Protect, etc. or a relevant conditional protection effect? */ const isProtected = @@ -297,13 +308,13 @@ export class MoveEffectPhase extends PokemonPhase { (this.move.getMove().category !== MoveCategory.STATUS && target.findTags(t => t instanceof DamageProtectedTag).find(t => target.lapseTag(t.tagType)))); - /** Is the target hidden by the effects of its Commander ability? */ - const isCommanding = - globalScene.currentBattle.double && - target.getAlly()?.getTag(BattlerTagType.COMMANDED)?.getSourcePokemon() === target; + /** Is the target hidden by the effects of its Commander ability? */ + const isCommanding = + globalScene.currentBattle.double && + target.getAlly()?.getTag(BattlerTagType.COMMANDED)?.getSourcePokemon() === target; - /** Is the target reflecting status moves from the magic coat move? */ - const isReflecting = !!target.getTag(BattlerTagType.MAGIC_COAT); + /** Is the target reflecting status moves from the magic coat move? */ + const isReflecting = !!target.getTag(BattlerTagType.MAGIC_COAT); /** Is the target's magic bounce ability not ignored and able to reflect this move? */ const canMagicBounce = @@ -311,16 +322,16 @@ export class MoveEffectPhase extends PokemonPhase { !move.doesFlagEffectApply({ flag: MoveFlags.IGNORE_ABILITIES, user, target }) && target.hasAbilityWithAttr(ReflectStatusMoveAbAttr); - const semiInvulnerableTag = target.getTag(SemiInvulnerableTag); + const semiInvulnerableTag = target.getTag(SemiInvulnerableTag); - /** Is the target reflecting the effect, not protected, and not in an semi-invulnerable state?*/ - const willBounce = - !isProtected && - !this.reflected && - !isCommanding && - move.hasFlag(MoveFlags.REFLECTABLE) && - (isReflecting || canMagicBounce) && - !semiInvulnerableTag; + /** Is the target reflecting the effect, not protected, and not in an semi-invulnerable state?*/ + const willBounce = + !isProtected && + !this.reflected && + !isCommanding && + move.hasFlag(MoveFlags.REFLECTABLE) && + (isReflecting || canMagicBounce) && + !semiInvulnerableTag; // If the move will bounce, then queue the bounce and move on to the next target if (!target.switchOutStatus && willBounce) { @@ -338,171 +349,171 @@ export class MoveEffectPhase extends PokemonPhase { queuedPhases.push(new HideAbilityPhase()); } - queuedPhases.push( - new MovePhase(target, newTargets, new PokemonMove(move.id, 0, 0, true), true, true, true), + queuedPhases.push(new MovePhase(target, newTargets, new PokemonMove(move.id, 0, 0, true), true, true, true)); + continue; + } + + /** Is the pokemon immune due to an ablility, and also not in a semi invulnerable state? */ + const isImmune = + target.hasAbilityWithAttr(TypeImmunityAbAttr) && + target.getAbility()?.getAttrs(TypeImmunityAbAttr)?.[0]?.getImmuneType() === user.getMoveType(move) && + !semiInvulnerableTag; + + /** + * If the move missed a target, stop all future hits against that target + * and move on to the next target (if there is one). + */ + if ( + target.switchOutStatus || + isCommanding || + (!isImmune && + !isProtected && + !targetHitChecks[target.getBattlerIndex()] && + !move.hasAttr(AddArenaTrapTagAttr)) + ) { + this.stopMultiHit(target); + if (!target.switchOutStatus) { + globalScene.queueMessage( + i18next.t("battle:attackMissed", { + pokemonNameWithAffix: getPokemonNameWithAffix(target), + }), ); - continue; } - - /** Is the pokemon immune due to an ablility, and also not in a semi invulnerable state? */ - const isImmune = - target.hasAbilityWithAttr(TypeImmunityAbAttr) && - target.getAbility()?.getAttrs(TypeImmunityAbAttr)?.[0]?.getImmuneType() === user.getMoveType(move) && - !semiInvulnerableTag; - - /** - * If the move missed a target, stop all future hits against that target - * and move on to the next target (if there is one). - */ - if ( - target.switchOutStatus || - isCommanding || - (!isImmune && !isProtected && !targetHitChecks[target.getBattlerIndex()]) - ) { - this.stopMultiHit(target); - if (!target.switchOutStatus) { - globalScene.queueMessage( - i18next.t("battle:attackMissed", { - pokemonNameWithAffix: getPokemonNameWithAffix(target), - }), - ); - } - if (moveHistoryEntry.result === MoveResult.PENDING) { - moveHistoryEntry.result = MoveResult.MISS; - } - user.pushMoveHistory(moveHistoryEntry); - applyMoveAttrs(MissEffectAttr, user, null, move); - continue; - } - - /** Does this phase represent the invoked move's first strike? */ - const firstHit = user.turnData.hitsLeft === user.turnData.hitCount; - - // Only log the move's result on the first strike - if (firstHit) { - user.pushMoveHistory(moveHistoryEntry); - } - - /** - * Since all fail/miss checks have applied, the move is considered successfully applied. - * It's worth noting that if the move has no effect or is protected against, this assignment - * is overwritten and the move is logged as a FAIL. - */ - moveHistoryEntry.result = MoveResult.SUCCESS; - - /** - * Stores the result of applying the invoked move to the target. - * If the target is protected, the result is always `NO_EFFECT`. - * Otherwise, the hit result is based on type effectiveness, immunities, - * and other factors that may negate the attack or status application. - * - * Internally, the call to {@linkcode Pokemon.apply} is where damage is calculated - * (for attack moves) and the target's HP is updated. However, this isn't - * made visible to the user until the resulting {@linkcode DamagePhase} - * is invoked. - */ - const hitResult = !isProtected ? target.apply(user, move) : HitResult.NO_EFFECT; - - /** Does {@linkcode hitResult} indicate that damage was dealt to the target? */ - const dealsDamage = [ - HitResult.EFFECTIVE, - HitResult.SUPER_EFFECTIVE, - HitResult.NOT_VERY_EFFECTIVE, - HitResult.ONE_HIT_KO, - ].includes(hitResult); - - /** Is this target the first one hit by the move on its current strike? */ - const firstTarget = dealsDamage && !hasHit; - if (firstTarget) { - hasHit = true; - } - - /** - * If the move has no effect on the target (i.e. the target is protected or immune), - * change the logged move result to FAIL. - */ - if (hitResult === HitResult.NO_EFFECT) { - moveHistoryEntry.result = MoveResult.FAIL; - } - - /** Does this phase represent the invoked move's last strike? */ - const lastHit = user.turnData.hitsLeft === 1 || !this.getFirstTarget()?.isActive(); - - /** - * If the user can change forms by using the invoked move, - * it only changes forms after the move's last hit - * (see Relic Song's interaction with Parental Bond when used by Meloetta). - */ - if (lastHit) { - globalScene.triggerPokemonFormChange(user, SpeciesFormChangePostMoveTrigger); - /** - * Multi-Lens, Multi Hit move and Parental Bond check for PostDamageAbAttr - * other damage source are calculated in damageAndUpdate in pokemon.ts - */ - if (user.turnData.hitCount > 1) { - applyPostDamageAbAttrs(PostDamageAbAttr, target, 0, target.hasPassive(), false, [], user); - } - } - - applyFilteredMoveAttrs( - (attr: MoveAttr) => - attr instanceof MoveEffectAttr && - attr.trigger === MoveEffectTrigger.PRE_APPLY && - (!attr.firstHitOnly || firstHit) && - (!attr.lastHitOnly || lastHit) && - hitResult !== HitResult.NO_EFFECT, - user, - target, - move, - ); - - if (hitResult !== HitResult.FAIL) { - this.applySelfTargetEffects(user, target, firstHit, lastHit); - - if (hitResult !== HitResult.NO_EFFECT) { - this.applyPostApplyEffects(user, target, firstHit, lastHit); - this.applyHeldItemFlinchCheck(user, target, dealsDamage); - this.applySuccessfulAttackEffects(user, target, firstHit, lastHit, !!isProtected, hitResult, firstTarget); - } else { - applyMoveAttrs(NoEffectAttr, user, null, move); - } + if (moveHistoryEntry.result === MoveResult.PENDING) { + moveHistoryEntry.result = MoveResult.MISS; } + user.pushMoveHistory(moveHistoryEntry); + applyMoveAttrs(MissEffectAttr, user, null, move); + continue; } - // Apply queued phases - if (queuedPhases.length) { - globalScene.appendToPhase(queuedPhases, MoveEndPhase); - } - // Apply the move's POST_TARGET effects on the move's last hit, after all targeted effects have resolved - if (user.turnData.hitsLeft === 1 || !this.getFirstTarget()?.isActive()) { - applyFilteredMoveAttrs( - (attr: MoveAttr) => attr instanceof MoveEffectAttr && attr.trigger === MoveEffectTrigger.POST_TARGET, - user, - null, - move, - ); + /** Does this phase represent the invoked move's first strike? */ + const firstHit = user.turnData.hitsLeft === user.turnData.hitCount; + + // Only log the move's result on the first strike + if (firstHit) { + user.pushMoveHistory(moveHistoryEntry); } /** - * Remove the target's substitute (if it exists and has expired) - * after all targeted effects have applied. - * This prevents blocked effects from applying until after this hit resolves. + * Since all fail/miss checks have applied, the move is considered successfully applied. + * It's worth noting that if the move has no effect or is protected against, this assignment + * is overwritten and the move is logged as a FAIL. */ - targets.forEach(target => { - const substitute = target.getTag(SubstituteTag); - if (substitute && substitute.hp <= 0) { - target.lapseTag(BattlerTagType.SUBSTITUTE); - } - }); + moveHistoryEntry.result = MoveResult.SUCCESS; - const moveType = user.getMoveType(move, true); - if (move.category !== MoveCategory.STATUS && !user.stellarTypesBoosted.includes(moveType)) { - user.stellarTypesBoosted.push(moveType); + /** + * Stores the result of applying the invoked move to the target. + * If the target is protected, the result is always `NO_EFFECT`. + * Otherwise, the hit result is based on type effectiveness, immunities, + * and other factors that may negate the attack or status application. + * + * Internally, the call to {@linkcode Pokemon.apply} is where damage is calculated + * (for attack moves) and the target's HP is updated. However, this isn't + * made visible to the user until the resulting {@linkcode DamagePhase} + * is invoked. + */ + const hitResult = !isProtected ? target.apply(user, move) : HitResult.NO_EFFECT; + + /** Does {@linkcode hitResult} indicate that damage was dealt to the target? */ + const dealsDamage = [ + HitResult.EFFECTIVE, + HitResult.SUPER_EFFECTIVE, + HitResult.NOT_VERY_EFFECTIVE, + HitResult.ONE_HIT_KO, + ].includes(hitResult); + + /** Is this target the first one hit by the move on its current strike? */ + const firstTarget = dealsDamage && !hasHit; + if (firstTarget) { + hasHit = true; } - this.end(); - }, - ); + /** + * If the move has no effect on the target (i.e. the target is protected or immune), + * change the logged move result to FAIL. + */ + if (hitResult === HitResult.NO_EFFECT) { + moveHistoryEntry.result = MoveResult.FAIL; + } + + /** Does this phase represent the invoked move's last strike? */ + const lastHit = user.turnData.hitsLeft === 1 || !this.getFirstTarget()?.isActive(); + + /** + * If the user can change forms by using the invoked move, + * it only changes forms after the move's last hit + * (see Relic Song's interaction with Parental Bond when used by Meloetta). + */ + if (lastHit) { + globalScene.triggerPokemonFormChange(user, SpeciesFormChangePostMoveTrigger); + /** + * Multi-Lens, Multi Hit move and Parental Bond check for PostDamageAbAttr + * other damage source are calculated in damageAndUpdate in pokemon.ts + */ + if (user.turnData.hitCount > 1) { + applyPostDamageAbAttrs(PostDamageAbAttr, target, 0, target.hasPassive(), false, [], user); + } + } + + applyFilteredMoveAttrs( + (attr: MoveAttr) => + attr instanceof MoveEffectAttr && + attr.trigger === MoveEffectTrigger.PRE_APPLY && + (!attr.firstHitOnly || firstHit) && + (!attr.lastHitOnly || lastHit) && + hitResult !== HitResult.NO_EFFECT, + user, + target, + move, + ); + + if (hitResult !== HitResult.FAIL) { + this.applySelfTargetEffects(user, target, firstHit, lastHit); + + if (hitResult !== HitResult.NO_EFFECT) { + this.applyPostApplyEffects(user, target, firstHit, lastHit); + this.applyHeldItemFlinchCheck(user, target, dealsDamage); + this.applySuccessfulAttackEffects(user, target, firstHit, lastHit, !!isProtected, hitResult, firstTarget); + } else { + applyMoveAttrs(NoEffectAttr, user, null, move); + } + } + } + + // Apply queued phases + if (queuedPhases.length) { + globalScene.appendToPhase(queuedPhases, MoveEndPhase); + } + // Apply the move's POST_TARGET effects on the move's last hit, after all targeted effects have resolved + if (user.turnData.hitsLeft === 1 || !this.getFirstTarget()?.isActive()) { + applyFilteredMoveAttrs( + (attr: MoveAttr) => attr instanceof MoveEffectAttr && attr.trigger === MoveEffectTrigger.POST_TARGET, + user, + null, + move, + ); + } + + /** + * Remove the target's substitute (if it exists and has expired) + * after all targeted effects have applied. + * This prevents blocked effects from applying until after this hit resolves. + */ + targets.forEach(target => { + const substitute = target.getTag(SubstituteTag); + if (substitute && substitute.hp <= 0) { + target.lapseTag(BattlerTagType.SUBSTITUTE); + } + }); + + const moveType = user.getMoveType(move, true); + if (move.category !== MoveCategory.STATUS && !user.stellarTypesBoosted.includes(moveType)) { + user.stellarTypesBoosted.push(moveType); + } + + this.end(); + }); } public override end(): void { diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index 82b73f681a0..5232dfee8ba 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -15,6 +15,7 @@ import type { DelayedAttackTag } from "#app/data/arena-tag"; import { CommonAnim } from "#app/data/battle-anims"; import { BattlerTagLapseType, CenterOfAttentionTag } from "#app/data/battler-tags"; import { + AddArenaTrapTagAttr, allMoves, applyMoveAttrs, BypassRedirectAttr, @@ -201,7 +202,10 @@ export class MovePhase extends BattlePhase { const targets = this.getActiveTargetPokemon(); const moveQueue = this.pokemon.getMoveQueue(); - if (targets.length === 0 || (moveQueue.length && moveQueue[0].move === Moves.NONE)) { + if ( + (targets.length === 0 && !this.move.getMove().hasAttr(AddArenaTrapTagAttr)) || + (moveQueue.length && moveQueue[0].move === Moves.NONE) + ) { this.showMoveText(); this.showFailedText(); this.cancel(); diff --git a/test/moves/spikes.test.ts b/test/moves/spikes.test.ts index 9bf0e5e1437..76af15777bb 100644 --- a/test/moves/spikes.test.ts +++ b/test/moves/spikes.test.ts @@ -4,6 +4,7 @@ import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; describe("Moves - Spikes", () => { let phaserGame: Phaser.Game; @@ -77,4 +78,17 @@ describe("Moves - Spikes", () => { const enemy = game.scene.getEnemyParty()[0]; expect(enemy.hp).toBeLessThan(enemy.getMaxHp()); }, 20000); + + it("should work when all targets fainted", async () => { + game.override.enemySpecies(Species.DIGLETT); + game.override.battleType("double"); + game.override.startingLevel(50); + await game.classicMode.startBattle([Species.RAYQUAZA, Species.ROWLET]); + + game.move.select(Moves.EARTHQUAKE); + game.move.select(Moves.SPIKES, 1); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(game.scene.arena.getTagOnSide(ArenaTrapTag, ArenaTagSide.ENEMY)).toBeDefined(); + }, 20000); }); From 1b79d1f832b2163b265beb4bff2ec0ae45a0fb28 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Mon, 7 Apr 2025 15:53:35 -0700 Subject: [PATCH 010/262] [Refactor] Re-implement save migration system (#5634) --- package-lock.json | 7 + package.json | 1 + src/@types/SessionSaveMigrator.ts | 6 + src/@types/SettingsSaveMigrator.ts | 5 + src/@types/SystemSaveMigrator.ts | 6 + .../version_migration/version_converter.ts | 273 +++++++----------- .../version_migration/versions/v1_0_4.ts | 104 ++++--- .../version_migration/versions/v1_1_0.ts | 5 - .../version_migration/versions/v1_7_0.ts | 36 ++- .../version_migration/versions/v1_8_3.ts | 22 +- 10 files changed, 227 insertions(+), 238 deletions(-) create mode 100644 src/@types/SessionSaveMigrator.ts create mode 100644 src/@types/SettingsSaveMigrator.ts create mode 100644 src/@types/SystemSaveMigrator.ts delete mode 100644 src/system/version_migration/versions/v1_1_0.ts diff --git a/package-lock.json b/package-lock.json index 33e9dd08104..6b880370f0b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "hasInstallScript": true, "dependencies": { "@material/material-color-utilities": "^0.2.7", + "compare-versions": "^6.1.1", "crypto-js": "^4.2.0", "i18next": "^24.2.2", "i18next-browser-languagedetector": "^8.0.4", @@ -3605,6 +3606,12 @@ "node": ">=18" } }, + "node_modules/compare-versions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", + "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", + "license": "MIT" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", diff --git a/package.json b/package.json index 6b1c73db158..c84e926fc35 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,7 @@ }, "dependencies": { "@material/material-color-utilities": "^0.2.7", + "compare-versions": "^6.1.1", "crypto-js": "^4.2.0", "i18next": "^24.2.2", "i18next-browser-languagedetector": "^8.0.4", diff --git a/src/@types/SessionSaveMigrator.ts b/src/@types/SessionSaveMigrator.ts new file mode 100644 index 00000000000..c4b0ad8dda4 --- /dev/null +++ b/src/@types/SessionSaveMigrator.ts @@ -0,0 +1,6 @@ +import type { SessionSaveData } from "#app/system/game-data"; + +export interface SessionSaveMigrator { + version: string; + migrate: (data: SessionSaveData) => void; +} diff --git a/src/@types/SettingsSaveMigrator.ts b/src/@types/SettingsSaveMigrator.ts new file mode 100644 index 00000000000..aae3df7cc60 --- /dev/null +++ b/src/@types/SettingsSaveMigrator.ts @@ -0,0 +1,5 @@ +export interface SettingsSaveMigrator { + version: string; + // biome-ignore lint/complexity/noBannedTypes: TODO - refactor settings + migrate: (data: Object) => void; +} diff --git a/src/@types/SystemSaveMigrator.ts b/src/@types/SystemSaveMigrator.ts new file mode 100644 index 00000000000..a22b5f6c93d --- /dev/null +++ b/src/@types/SystemSaveMigrator.ts @@ -0,0 +1,6 @@ +import type { SystemSaveData } from "#app/system/game-data"; + +export interface SystemSaveMigrator { + version: string; + migrate: (data: SystemSaveData) => void; +} diff --git a/src/system/version_migration/version_converter.ts b/src/system/version_migration/version_converter.ts index 074f60c2c5d..4b712609819 100644 --- a/src/system/version_migration/version_converter.ts +++ b/src/system/version_migration/version_converter.ts @@ -1,19 +1,104 @@ -import type { SessionSaveData, SystemSaveData } from "../game-data"; +import type { SessionSaveMigrator } from "#app/@types/SessionSaveMigrator"; +import type { SettingsSaveMigrator } from "#app/@types/SettingsSaveMigrator"; +import type { SystemSaveMigrator } from "#app/@types/SystemSaveMigrator"; +import type { SessionSaveData, SystemSaveData } from "#app/system/game-data"; +import { compareVersions } from "compare-versions"; import { version } from "../../../package.json"; +/* +// template for save migrator creation +// versions/vA_B_C.ts + +// The version for each migrator should match the filename, ie: `vA_B_C.ts` -> `version: "A.B.C" +// This is the target version (aka the version we're ending up on after the migrators are run) + +// The name for each migrator should match its purpose. For example, if you're fixing +// the ability index of a pokemon, it might be called `migratePokemonAbilityIndex` + +const systemMigratorA: SystemSaveMigrator = { + version: "A.B.C", + migrate: (data: SystemSaveData): void => { + // migration code goes here + }, +}; + +export const systemMigrators: Readonly = [systemMigratorA] as const; + +const sessionMigratorA: SessionSaveMigrator = { + version: "A.B.C", + migrate: (data: SessionSaveData): void => { + // migration code goes here + }, +}; + +export const sessionMigrators: Readonly = [sessionMigratorA] as const; + +const settingsMigratorA: SettingsSaveMigrator = { + version: "A.B.C", + // biome-ignore lint/complexity/noBannedTypes: TODO - refactor settings + migrate: (data: Object): void => { + // migration code goes here + }, +}; + +export const settingsMigrators: Readonly = [settingsMigratorA] as const; +*/ + +// --- vA.B.C PATCHES --- // +// import * as vA_B_C from "./versions/vA_B_C"; + // --- v1.0.4 (and below) PATCHES --- // import * as v1_0_4 from "./versions/v1_0_4"; -// --- v1.1.0 PATCHES --- // -import * as v1_1_0 from "./versions/v1_1_0"; - // --- v1.7.0 PATCHES --- // import * as v1_7_0 from "./versions/v1_7_0"; // --- v1.8.3 PATCHES --- // import * as v1_8_3 from "./versions/v1_8_3"; -const LATEST_VERSION = version.split(".").map(value => Number.parseInt(value)); +/** Current game version */ +const LATEST_VERSION = version; + +type SaveMigrator = SystemSaveMigrator | SessionSaveMigrator | SettingsSaveMigrator; + +// biome-ignore lint/complexity/noBannedTypes: TODO - refactor settings +type SaveData = SystemSaveData | SessionSaveData | Object; + +// To add a new set of migrators, create a new `.push()` line like so: +// `systemMigrators.push(...vA_B_C.systemMigrators);` + +/** All system save migrators */ +const systemMigrators: SystemSaveMigrator[] = []; +systemMigrators.push(...v1_0_4.systemMigrators); +systemMigrators.push(...v1_7_0.systemMigrators); +systemMigrators.push(...v1_8_3.systemMigrators); + +/** All session save migrators */ +const sessionMigrators: SessionSaveMigrator[] = []; +sessionMigrators.push(...v1_0_4.sessionMigrators); +sessionMigrators.push(...v1_7_0.sessionMigrators); + +/** All settings migrators */ +const settingsMigrators: SettingsSaveMigrator[] = []; +settingsMigrators.push(...v1_0_4.settingsMigrators); + +/** Sorts migrators by their stated version, ensuring they are applied in order from oldest to newest */ +const sortMigrators = (migrators: SaveMigrator[]): void => { + migrators.sort((a, b) => compareVersions(a.version, b.version)); +}; + +sortMigrators(systemMigrators); +sortMigrators(sessionMigrators); +sortMigrators(settingsMigrators); + +const applyMigrators = (migrators: readonly SaveMigrator[], data: SaveData, saveVersion: string) => { + for (const migrator of migrators) { + const isMigratorVersionHigher = compareVersions(saveVersion, migrator.version) === -1; + if (isMigratorVersionHigher) { + migrator.migrate(data as any); + } + } +}; /** * Converts incoming {@linkcode SystemSaveData} that has a version below the @@ -26,12 +111,12 @@ const LATEST_VERSION = version.split(".").map(value => Number.parseInt(value)); * @see {@link SystemVersionConverter} */ export function applySystemVersionMigration(data: SystemSaveData) { - const curVersion = data.gameVersion.split(".").map(value => Number.parseInt(value)); + const prevVersion = data.gameVersion; + const isCurrentVersionHigher = compareVersions(prevVersion, LATEST_VERSION) === -1; - if (!curVersion.every((value, index) => value === LATEST_VERSION[index])) { - const converter = new SystemVersionConverter(); - converter.applyStaticPreprocessors(data); - converter.applyMigration(data, curVersion); + if (isCurrentVersionHigher) { + applyMigrators(systemMigrators, data, prevVersion); + console.log(`System data successfully migrated to v${LATEST_VERSION}!`); } } @@ -46,12 +131,15 @@ export function applySystemVersionMigration(data: SystemSaveData) { * @see {@link SessionVersionConverter} */ export function applySessionVersionMigration(data: SessionSaveData) { - const curVersion = data.gameVersion.split(".").map(value => Number.parseInt(value)); + const prevVersion = data.gameVersion; + const isCurrentVersionHigher = compareVersions(prevVersion, LATEST_VERSION) === -1; - if (!curVersion.every((value, index) => value === LATEST_VERSION[index])) { - const converter = new SessionVersionConverter(); - converter.applyStaticPreprocessors(data); - converter.applyMigration(data, curVersion); + if (isCurrentVersionHigher) { + // Always sanitize money as a safeguard + data.money = Math.floor(data.money); + + applyMigrators(sessionMigrators, data, prevVersion); + console.log(`Session data successfully migrated to v${LATEST_VERSION}!`); } } @@ -65,156 +153,13 @@ export function applySessionVersionMigration(data: SessionSaveData) { * @param data Settings data object * @see {@link SettingsVersionConverter} */ +// biome-ignore lint/complexity/noBannedTypes: TODO - refactor settings export function applySettingsVersionMigration(data: Object) { - const gameVersion: string = data.hasOwnProperty("gameVersion") ? data["gameVersion"] : "1.0.0"; - const curVersion = gameVersion.split(".").map(value => Number.parseInt(value)); + const prevVersion: string = data.hasOwnProperty("gameVersion") ? data["gameVersion"] : "1.0.0"; + const isCurrentVersionHigher = compareVersions(prevVersion, LATEST_VERSION) === -1; - if (!curVersion.every((value, index) => value === LATEST_VERSION[index])) { - const converter = new SettingsVersionConverter(); - converter.applyStaticPreprocessors(data); - converter.applyMigration(data, curVersion); - } -} - -/** - * Abstract class encapsulating the logic for migrating data from a given version up to - * the current version listed in `package.json`. - * - * Note that, for any version converter, the corresponding `applyMigration` - * function would only need to be changed once when the first migration for a - * given version is introduced. Similarly, a version file (within the `versions` - * folder) would only need to be created for a version once with the appropriate - * array nomenclature. - */ -abstract class VersionConverter { - /** - * Iterates through an array of designated migration functions that are each - * called one by one to transform the data. - * @param data The data to be operated on - * @param migrationArr An array of functions that will transform the incoming data - */ - callMigrators(data: any, migrationArr: readonly any[]) { - for (const migrate of migrationArr) { - migrate(data); - } - } - - /** - * Applies any version-agnostic data sanitation as defined within the function - * body. - * @param data The data to be operated on - */ - applyStaticPreprocessors(_data: any): void {} - - /** - * Uses the current version the incoming data to determine the starting point - * of the migration which will cascade up to the latest version, calling the - * necessary migration functions in the process. - * @param data The data to be operated on - * @param curVersion [0] Current major version - * [1] Current minor version - * [2] Current patch version - */ - abstract applyMigration(data: any, curVersion: number[]): void; -} - -/** - * Class encapsulating the logic for migrating {@linkcode SessionSaveData} from - * a given version up to the current version listed in `package.json`. - * @extends VersionConverter - */ -class SessionVersionConverter extends VersionConverter { - override applyStaticPreprocessors(data: SessionSaveData): void { - // Always sanitize money as a safeguard - data.money = Math.floor(data.money); - } - - override applyMigration(data: SessionSaveData, curVersion: number[]): void { - const [curMajor, curMinor, curPatch] = curVersion; - - if (curMajor === 1) { - if (curMinor === 0) { - if (curPatch <= 5) { - console.log("Applying v1.0.4 session data migration!"); - this.callMigrators(data, v1_0_4.sessionMigrators); - } - } - if (curMinor <= 1) { - console.log("Applying v1.1.0 session data migration!"); - this.callMigrators(data, v1_1_0.sessionMigrators); - } - if (curMinor < 7) { - console.log("Applying v1.7.0 session data migration!"); - this.callMigrators(data, v1_7_0.sessionMigrators); - } - } - - console.log(`Session data successfully migrated to v${version}!`); - } -} - -/** - * Class encapsulating the logic for migrating {@linkcode SystemSaveData} from - * a given version up to the current version listed in `package.json`. - * @extends VersionConverter - */ -class SystemVersionConverter extends VersionConverter { - override applyMigration(data: SystemSaveData, curVersion: number[]): void { - const [curMajor, curMinor, curPatch] = curVersion; - - if (curMajor === 1) { - if (curMinor === 0) { - if (curPatch <= 4) { - console.log("Applying v1.0.4 system data migraton!"); - this.callMigrators(data, v1_0_4.systemMigrators); - } - } - if (curMinor <= 1) { - console.log("Applying v1.1.0 system data migraton!"); - this.callMigrators(data, v1_1_0.systemMigrators); - } - if (curMinor < 7) { - console.log("Applying v1.7.0 system data migration!"); - this.callMigrators(data, v1_7_0.systemMigrators); - } - if (curMinor === 8) { - if (curPatch <= 2) { - console.log("Applying v1.8.3 system data migration!"); - this.callMigrators(data, v1_8_3.systemMigrators); - } - } - } - - console.log(`System data successfully migrated to v${version}!`); - } -} - -/** - * Class encapsulating the logic for migrating settings data from - * a given version up to the current version listed in `package.json`. - * @extends VersionConverter - */ -class SettingsVersionConverter extends VersionConverter { - override applyMigration(data: Object, curVersion: number[]): void { - const [curMajor, curMinor, curPatch] = curVersion; - - if (curMajor === 1) { - if (curMinor === 0) { - if (curPatch <= 4) { - console.log("Applying v1.0.4 settings data migraton!"); - this.callMigrators(data, v1_0_4.settingsMigrators); - } - } - if (curMinor <= 1) { - console.log("Applying v1.1.0 settings data migraton!"); - this.callMigrators(data, v1_1_0.settingsMigrators); - } - if (curMinor < 7) { - console.log("Applying v1.7.0 settings data migration!"); - this.callMigrators(data, v1_7_0.settingsMigrators); - } - } - - console.log(`Settings data successfully migrated to v${version}!`); + if (isCurrentVersionHigher) { + applyMigrators(settingsMigrators, data, prevVersion); + console.log(`Settings successfully migrated to v${LATEST_VERSION}!`); } } diff --git a/src/system/version_migration/versions/v1_0_4.ts b/src/system/version_migration/versions/v1_0_4.ts index 16bd9db9915..2139352b783 100644 --- a/src/system/version_migration/versions/v1_0_4.ts +++ b/src/system/version_migration/versions/v1_0_4.ts @@ -4,15 +4,18 @@ import { AbilityAttr, defaultStarterSpecies, DexAttr } from "#app/system/game-da import { allSpecies } from "#app/data/pokemon-species"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import { isNullOrUndefined } from "#app/utils"; +import type { SystemSaveMigrator } from "#app/@types/SystemSaveMigrator"; +import type { SettingsSaveMigrator } from "#app/@types/SettingsSaveMigrator"; +import type { SessionSaveMigrator } from "#app/@types/SessionSaveMigrator"; -export const systemMigrators = [ - /** - * Migrate ability starter data if empty for caught species. - * @param data {@linkcode SystemSaveData} - */ - function migrateAbilityData(data: SystemSaveData) { +/** + * Migrate ability starter data if empty for caught species. + * @param data - {@linkcode SystemSaveData} + */ +const migrateAbilityData: SystemSaveMigrator = { + version: "1.0.4", + migrate: (data: SystemSaveData): void => { if (data.starterData && data.dexData) { - // biome-ignore lint/complexity/noForEach: Object.keys(data.starterData).forEach(sd => { if (data.dexData[sd]?.caughtAttr && data.starterData[sd] && !data.starterData[sd].abilityAttr) { data.starterData[sd].abilityAttr = 1; @@ -20,12 +23,15 @@ export const systemMigrators = [ }); } }, +}; - /** - * Populate legendary Pokémon statistics if they are missing. - * @param data {@linkcode SystemSaveData} - */ - function fixLegendaryStats(data: SystemSaveData) { +/** + * Populate legendary Pokémon statistics if they are missing. + * @param data - {@linkcode SystemSaveData} + */ +const fixLegendaryStats: SystemSaveMigrator = { + version: "1.0.4", + migrate: (data: SystemSaveData): void => { if ( data.gameStats && data.gameStats.legendaryPokemonCaught !== undefined && @@ -34,7 +40,6 @@ export const systemMigrators = [ data.gameStats.subLegendaryPokemonSeen = 0; data.gameStats.subLegendaryPokemonCaught = 0; data.gameStats.subLegendaryPokemonHatched = 0; - // biome-ignore lint/complexity/noForEach: allSpecies .filter(s => s.subLegendary) .forEach(s => { @@ -66,12 +71,15 @@ export const systemMigrators = [ ); } }, +}; - /** - * Unlock all starters' first ability and female gender option. - * @param data {@linkcode SystemSaveData} - */ - function fixStarterData(data: SystemSaveData) { +/** + * Unlock all starters' first ability and female gender option. + * @param data - {@linkcode SystemSaveData} + */ +const fixStarterData: SystemSaveMigrator = { + version: "1.0.4", + migrate: (data: SystemSaveData): void => { if (!isNullOrUndefined(data.starterData)) { for (const starterId of defaultStarterSpecies) { if (data.starterData[starterId]?.abilityAttr) { @@ -83,17 +91,22 @@ export const systemMigrators = [ } } }, +}; + +export const systemMigrators: Readonly = [ + migrateAbilityData, + fixLegendaryStats, + fixStarterData, ] as const; -export const settingsMigrators = [ - /** - * Migrate from "REROLL_TARGET" property to {@linkcode - * SettingKeys.Shop_Cursor_Target}. - * @param data the `settings` object - */ - - // biome-ignore lint/complexity/noBannedTypes: TODO: fix the type to not be object... - function fixRerollTarget(data: Object) { +/** + * Migrate from `REROLL_TARGET` property to {@linkcode SettingKeys.Shop_Cursor_Target} + * @param data - The `settings` object + */ +const fixRerollTarget: SettingsSaveMigrator = { + version: "1.0.4", + // biome-ignore lint/complexity/noBannedTypes: TODO - refactor settings + migrate: (data: Object): void => { if (data.hasOwnProperty("REROLL_TARGET") && !data.hasOwnProperty(SettingKeys.Shop_Cursor_Target)) { data[SettingKeys.Shop_Cursor_Target] = data["REROLL_TARGET"]; // biome-ignore lint/performance/noDelete: intentional @@ -101,16 +114,20 @@ export const settingsMigrators = [ localStorage.setItem("settings", JSON.stringify(data)); } }, -] as const; +}; -export const sessionMigrators = [ - /** - * Converts old lapsing modifiers (battle items, lures, and Dire Hit) and - * other miscellaneous modifiers (vitamins, White Herb) to any new class - * names and/or change in reload arguments. - * @param data {@linkcode SessionSaveData} - */ - function migrateModifiers(data: SessionSaveData) { +export const settingsMigrators: Readonly = [fixRerollTarget] as const; + +/** + * Converts old lapsing modifiers (battle items, lures, and Dire Hit) and + * other miscellaneous modifiers (vitamins, White Herb) to any new class + * names and/or change in reload arguments. + * @param data - {@linkcode SessionSaveData} + */ +const migrateModifiers: SessionSaveMigrator = { + version: "1.0.4", + // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: necessary? + migrate: (data: SessionSaveData): void => { for (const m of data.modifiers) { if (m.className === "PokemonBaseStatModifier") { m.className = "BaseStatModifier"; @@ -163,12 +180,11 @@ export const sessionMigrators = [ } } }, - /** - * Converts old Pokemon natureOverride and mysteryEncounterData - * to use the new conjoined {@linkcode Pokemon.customPokemonData} structure instead. - * @param data {@linkcode SessionSaveData} - */ - function migrateCustomPokemonDataAndNatureOverrides(data: SessionSaveData) { +}; + +const migrateCustomPokemonData: SessionSaveMigrator = { + version: "1.0.4", + migrate: (data: SessionSaveData): void => { // Fix Pokemon nature overrides and custom data migration for (const pokemon of data.party) { if (pokemon["mysteryEncounterPokemonData"]) { @@ -186,4 +202,6 @@ export const sessionMigrators = [ } } }, -] as const; +}; + +export const sessionMigrators: Readonly = [migrateModifiers, migrateCustomPokemonData] as const; diff --git a/src/system/version_migration/versions/v1_1_0.ts b/src/system/version_migration/versions/v1_1_0.ts deleted file mode 100644 index 5d6247aeaa2..00000000000 --- a/src/system/version_migration/versions/v1_1_0.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const systemMigrators = [] as const; - -export const settingsMigrators = [] as const; - -export const sessionMigrators = [] as const; diff --git a/src/system/version_migration/versions/v1_7_0.ts b/src/system/version_migration/versions/v1_7_0.ts index 167cd974e56..a1213ccf64c 100644 --- a/src/system/version_migration/versions/v1_7_0.ts +++ b/src/system/version_migration/versions/v1_7_0.ts @@ -1,15 +1,18 @@ +import type { SessionSaveMigrator } from "#app/@types/SessionSaveMigrator"; +import type { SystemSaveMigrator } from "#app/@types/SystemSaveMigrator"; import { getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; import { globalScene } from "#app/global-scene"; import { DexAttr, type SessionSaveData, type SystemSaveData } from "#app/system/game-data"; -import * as Utils from "#app/utils"; +import { isNullOrUndefined } from "#app/utils"; -export const systemMigrators = [ - /** - * If a starter is caught, but the only forms registered as caught are not starterSelectable, - * unlock the default form. - * @param data {@linkcode SystemSaveData} - */ - function migrateUnselectableForms(data: SystemSaveData) { +/** + * If a starter is caught, but the only forms registered as caught are not starterSelectable, + * unlock the default form. + * @param data - {@linkcode SystemSaveData} + */ +const migrateUnselectableForms: SystemSaveMigrator = { + version: "1.7.0", + migrate: (data: SystemSaveData): void => { if (data.starterData && data.dexData) { Object.keys(data.starterData).forEach(sd => { const caughtAttr = data.dexData[sd]?.caughtAttr; @@ -30,12 +33,13 @@ export const systemMigrators = [ }); } }, -] as const; +}; -export const settingsMigrators = [] as const; +export const systemMigrators: Readonly = [migrateUnselectableForms] as const; -export const sessionMigrators = [ - function migrateTera(data: SessionSaveData) { +const migrateTera: SessionSaveMigrator = { + version: "1.7.0", + migrate: (data: SessionSaveData): void => { for (let i = 0; i < data.modifiers.length; ) { if (data.modifiers[i].className === "TerastallizeModifier") { data.party.forEach(p => { @@ -63,15 +67,17 @@ export const sessionMigrators = [ } data.party.forEach(p => { - if (Utils.isNullOrUndefined(p.teraType)) { + if (isNullOrUndefined(p.teraType)) { p.teraType = getPokemonSpeciesForm(p.species, p.formIndex).type1; } }); data.enemyParty.forEach(p => { - if (Utils.isNullOrUndefined(p.teraType)) { + if (isNullOrUndefined(p.teraType)) { p.teraType = getPokemonSpeciesForm(p.species, p.formIndex).type1; } }); }, -] as const; +}; + +export const sessionMigrators: Readonly = [migrateTera] as const; diff --git a/src/system/version_migration/versions/v1_8_3.ts b/src/system/version_migration/versions/v1_8_3.ts index d35530c28e9..6e2d96d3673 100644 --- a/src/system/version_migration/versions/v1_8_3.ts +++ b/src/system/version_migration/versions/v1_8_3.ts @@ -1,14 +1,16 @@ +import type { SystemSaveMigrator } from "#app/@types/SystemSaveMigrator"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { DexAttr, type SystemSaveData } from "#app/system/game-data"; import { Species } from "#enums/species"; -export const systemMigrators = [ - /** - * If a starter is caught, but the only forms registered as caught are not starterSelectable, - * unlock the default form. - * @param data {@linkcode SystemSaveData} - */ - function migratePichuForms(data: SystemSaveData) { +/** + * If a starter is caught, but the only forms registered as caught are not starterSelectable, + * unlock the default form. + * @param data - {@linkcode SystemSaveData} + */ +const migratePichuForms: SystemSaveMigrator = { + version: "1.8.3", + migrate: (data: SystemSaveData): void => { if (data.starterData && data.dexData) { // This is Pichu's Pokédex number const sd = 172; @@ -23,8 +25,6 @@ export const systemMigrators = [ } } }, -] as const; +}; -export const settingsMigrators = [] as const; - -export const sessionMigrators = [] as const; +export const systemMigrators: Readonly = [migratePichuForms] as const; From cb5deb408ff75310cf4fca403099d3b57f4c376d Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Sun, 6 Apr 2025 21:25:20 -0700 Subject: [PATCH 011/262] [Refactor] Delete stale pokemon objects at the end of a battle Co-authored-by: Frutescens --- src/phases/battle-end-phase.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/phases/battle-end-phase.ts b/src/phases/battle-end-phase.ts index ff17b17ab8b..dea575a71b3 100644 --- a/src/phases/battle-end-phase.ts +++ b/src/phases/battle-end-phase.ts @@ -73,6 +73,11 @@ export class BattleEndPhase extends BattlePhase { } globalScene.clearEnemyHeldItemModifiers(); + try { + globalScene.getEnemyParty().forEach(p => p.destroy()); + } catch { + console.warn("Unable to destroy stale pokemon objects in BattleEndPhase."); + } const lapsingModifiers = globalScene.findModifiers( m => m instanceof LapsingPersistentModifier || m instanceof LapsingPokemonHeldItemModifier, From 17a56cc6c1d2dfebfd6fbb0045fb742b421ccb7b Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Mon, 7 Apr 2025 15:57:50 -0700 Subject: [PATCH 012/262] Move `try/catch` inside `for` loop Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> --- src/phases/battle-end-phase.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/phases/battle-end-phase.ts b/src/phases/battle-end-phase.ts index dea575a71b3..645b04aea46 100644 --- a/src/phases/battle-end-phase.ts +++ b/src/phases/battle-end-phase.ts @@ -73,10 +73,12 @@ export class BattleEndPhase extends BattlePhase { } globalScene.clearEnemyHeldItemModifiers(); - try { - globalScene.getEnemyParty().forEach(p => p.destroy()); - } catch { - console.warn("Unable to destroy stale pokemon objects in BattleEndPhase."); + for (const p of globalScene.getEnemyParty()) { + try { + p.destroy(); + } catch { + console.warn("Unable to destroy stale pokemon objects in BattleEndPhase."); + } } const lapsingModifiers = globalScene.findModifiers( From 1171656d12b6333bfda5ff9c10b55d393d21898f Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Mon, 7 Apr 2025 16:02:58 -0700 Subject: [PATCH 013/262] Update console message --- src/phases/battle-end-phase.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/phases/battle-end-phase.ts b/src/phases/battle-end-phase.ts index 645b04aea46..0d831c65b52 100644 --- a/src/phases/battle-end-phase.ts +++ b/src/phases/battle-end-phase.ts @@ -77,7 +77,7 @@ export class BattleEndPhase extends BattlePhase { try { p.destroy(); } catch { - console.warn("Unable to destroy stale pokemon objects in BattleEndPhase."); + console.warn("Unable to destroy stale pokemon object in BattleEndPhase:", p); } } From 31835e6d534b0a399df01222633f3d5ba8eaa81d Mon Sep 17 00:00:00 2001 From: Dean <69436131+emdeann@users.noreply.github.com> Date: Mon, 7 Apr 2025 16:32:10 -0700 Subject: [PATCH 014/262] [Bug] Fix #4972 Status-Prevention Abilities do not Cure Status (#5406) * Add PostSummonHealAbAttr and give it to appropriate abilities * Add attr to insomnia * Remove attr from leaf guard (it does not activate on gain with sun up) * Add tests and remove attr from shields down * Add PostSummonRemoveBattlerTag and give it to oblivious and own tempo * Add tests for oblivious and own tempo * Fix oblivious test sometimes failing * Remove Comatose changes as it doesn't reapply * Remove unused tagRemoved field * Fix tests checking status instead of tag * Fix attr comments * Add PostSetStatusHealStatusAbAttr * Add ResetStatusPhase * Modify pokemon.resetStatus to use ResetStatusPhase * Move post status effects to ObtainStatusEffectPhase * Ensure status overriding (ie rest) works properly * Add PostApplyBattlerTagRemoveTagAbAttr for own tempo and oblivious * Guard removeTag call in PostApplyBattlerTagRemoveTagAbAttr * Commenting * Handle Mold Breaker case in MoveEndPhase * Remove PostSummonHealStatusAbAttr from purifying salt * Fix not passing overrideStatus to canSetStatus * Apply suggestions from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Add isNullOrUndefined import * Add canApply to new attrs * Add followup argument back * Remove guard around new MoveEndPhase --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/data/ability.ts | 78 ++++++++++++++++++++++++ src/data/moves/move.ts | 12 ++-- src/field/pokemon.ts | 38 +++--------- src/phases/move-end-phase.ts | 17 +++++- src/phases/move-phase.ts | 10 ++- src/phases/obtain-status-effect-phase.ts | 9 +++ src/phases/reset-status-phase.ts | 44 +++++++++++++ test/abilities/immunity.test.ts | 51 ++++++++++++++++ test/abilities/insomnia.test.ts | 51 ++++++++++++++++ test/abilities/limber.test.ts | 51 ++++++++++++++++ test/abilities/magma_armor.test.ts | 51 ++++++++++++++++ test/abilities/oblivious.test.ts | 69 +++++++++++++++++++++ test/abilities/own_tempo.test.ts | 51 ++++++++++++++++ test/abilities/thermal_exchange.test.ts | 51 ++++++++++++++++ test/abilities/vital_spirit.test.ts | 51 ++++++++++++++++ test/abilities/water_bubble.test.ts | 51 ++++++++++++++++ test/abilities/water_veil.test.ts | 51 ++++++++++++++++ 17 files changed, 693 insertions(+), 43 deletions(-) create mode 100644 src/phases/reset-status-phase.ts create mode 100644 test/abilities/immunity.test.ts create mode 100644 test/abilities/insomnia.test.ts create mode 100644 test/abilities/limber.test.ts create mode 100644 test/abilities/magma_armor.test.ts create mode 100644 test/abilities/oblivious.test.ts create mode 100644 test/abilities/own_tempo.test.ts create mode 100644 test/abilities/thermal_exchange.test.ts create mode 100644 test/abilities/vital_spirit.test.ts create mode 100644 test/abilities/water_bubble.test.ts create mode 100644 test/abilities/water_veil.test.ts diff --git a/src/data/ability.ts b/src/data/ability.ts index a7107ce2e9d..f8c9b4cb8fe 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -2295,6 +2295,11 @@ export class PostSummonAbAttr extends AbAttr { applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void {} } +/** + * Base class for ability attributes which remove an effect on summon + */ +export class PostSummonRemoveEffectAbAttr extends PostSummonAbAttr {} + /** * Removes specified arena tags when a Pokemon is summoned. */ @@ -2405,6 +2410,31 @@ export class PostSummonAddBattlerTagAbAttr extends PostSummonAbAttr { } } +/** + * Removes Specific battler tags when a Pokemon is summoned + * + * This should realistically only ever activate on gain rather than on summon + */ +export class PostSummonRemoveBattlerTagAbAttr extends PostSummonRemoveEffectAbAttr { + private immuneTags: BattlerTagType[]; + + /** + * @param immuneTags - The {@linkcode BattlerTagType | battler tags} the Pokémon is immune to. + */ + constructor(...immuneTags: BattlerTagType[]) { + super(); + this.immuneTags = immuneTags; + } + + public override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + return this.immuneTags.some(tagType => !!pokemon.getTag(tagType)); + } + + public override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + this.immuneTags.forEach(tagType => pokemon.removeTag(tagType)); + } +} + export class PostSummonStatStageChangeAbAttr extends PostSummonAbAttr { private stats: BattleStat[]; private stages: number; @@ -2592,6 +2622,43 @@ export class PostSummonTerrainChangeAbAttr extends PostSummonAbAttr { } } +/** + * Heals a status effect if the Pokemon is afflicted with it upon switch in (or gain) + */ +export class PostSummonHealStatusAbAttr extends PostSummonRemoveEffectAbAttr { + private immuneEffects: StatusEffect[]; + private statusHealed: StatusEffect; + + /** + * @param immuneEffects - The {@linkcode StatusEffect}s the Pokémon is immune to. + */ + constructor(...immuneEffects: StatusEffect[]) { + super(); + this.immuneEffects = immuneEffects; + } + + public override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + const status = pokemon.status?.effect; + return !Utils.isNullOrUndefined(status) && (this.immuneEffects.length < 1 || this.immuneEffects.includes(status)) + } + + public override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + const status = pokemon.status?.effect; + if (!Utils.isNullOrUndefined(status)) { + this.statusHealed = status; + pokemon.resetStatus(false); + pokemon.updateInfo(); + } + } + + public override getTriggerMessage(_pokemon: Pokemon, _abilityName: string, ..._args: any[]): string | null { + if (this.statusHealed) { + return getStatusEffectHealText(this.statusHealed, getPokemonNameWithAffix(_pokemon)); + } + return null; + } +} + export class PostSummonFormChangeAbAttr extends PostSummonAbAttr { private formFunc: (p: Pokemon) => number; @@ -6291,6 +6358,7 @@ export function initAbilities() { .ignorable(), new Ability(Abilities.LIMBER, 3) .attr(StatusEffectImmunityAbAttr, StatusEffect.PARALYSIS) + .attr(PostSummonHealStatusAbAttr, StatusEffect.PARALYSIS) .ignorable(), new Ability(Abilities.SAND_VEIL, 3) .attr(StatMultiplierAbAttr, Stat.EVA, 1.2) @@ -6308,6 +6376,7 @@ export function initAbilities() { .ignorable(), new Ability(Abilities.OBLIVIOUS, 3) .attr(BattlerTagImmunityAbAttr, [ BattlerTagType.INFATUATED, BattlerTagType.TAUNT ]) + .attr(PostSummonRemoveBattlerTagAbAttr, BattlerTagType.INFATUATED, BattlerTagType.TAUNT) .attr(IntimidateImmunityAbAttr) .ignorable(), new Ability(Abilities.CLOUD_NINE, 3) @@ -6320,6 +6389,7 @@ export function initAbilities() { .attr(StatMultiplierAbAttr, Stat.ACC, 1.3), new Ability(Abilities.INSOMNIA, 3) .attr(StatusEffectImmunityAbAttr, StatusEffect.SLEEP) + .attr(PostSummonHealStatusAbAttr, StatusEffect.SLEEP) .attr(BattlerTagImmunityAbAttr, BattlerTagType.DROWSY) .ignorable(), new Ability(Abilities.COLOR_CHANGE, 3) @@ -6327,6 +6397,7 @@ export function initAbilities() { .condition(getSheerForceHitDisableAbCondition()), new Ability(Abilities.IMMUNITY, 3) .attr(StatusEffectImmunityAbAttr, StatusEffect.POISON, StatusEffect.TOXIC) + .attr(PostSummonHealStatusAbAttr, StatusEffect.POISON, StatusEffect.TOXIC) .ignorable(), new Ability(Abilities.FLASH_FIRE, 3) .attr(TypeImmunityAddBattlerTagAbAttr, PokemonType.FIRE, BattlerTagType.FIRE_BOOST, 1) @@ -6336,6 +6407,7 @@ export function initAbilities() { .ignorable(), new Ability(Abilities.OWN_TEMPO, 3) .attr(BattlerTagImmunityAbAttr, BattlerTagType.CONFUSED) + .attr(PostSummonRemoveBattlerTagAbAttr, BattlerTagType.CONFUSED) .attr(IntimidateImmunityAbAttr) .ignorable(), new Ability(Abilities.SUCTION_CUPS, 3) @@ -6401,9 +6473,11 @@ export function initAbilities() { .ignorable(), new Ability(Abilities.MAGMA_ARMOR, 3) .attr(StatusEffectImmunityAbAttr, StatusEffect.FREEZE) + .attr(PostSummonHealStatusAbAttr, StatusEffect.FREEZE) .ignorable(), new Ability(Abilities.WATER_VEIL, 3) .attr(StatusEffectImmunityAbAttr, StatusEffect.BURN) + .attr(PostSummonHealStatusAbAttr, StatusEffect.BURN) .ignorable(), new Ability(Abilities.MAGNET_PULL, 3) .attr(ArenaTrapAbAttr, (user, target) => { @@ -6497,6 +6571,7 @@ export function initAbilities() { .attr(DoubleBattleChanceAbAttr), new Ability(Abilities.VITAL_SPIRIT, 3) .attr(StatusEffectImmunityAbAttr, StatusEffect.SLEEP) + .attr(PostSummonHealStatusAbAttr, StatusEffect.SLEEP) .attr(BattlerTagImmunityAbAttr, BattlerTagType.DROWSY) .ignorable(), new Ability(Abilities.WHITE_SMOKE, 3) @@ -6835,6 +6910,7 @@ export function initAbilities() { .attr(MoveTypeChangeAbAttr, PokemonType.ICE, 1.2, (user, target, move) => move.type === PokemonType.NORMAL && !move.hasAttr(VariableMoveTypeAttr)), new Ability(Abilities.SWEET_VEIL, 6) .attr(UserFieldStatusEffectImmunityAbAttr, StatusEffect.SLEEP) + .attr(PostSummonUserFieldRemoveStatusEffectAbAttr, StatusEffect.SLEEP) .attr(UserFieldBattlerTagImmunityAbAttr, BattlerTagType.DROWSY) .ignorable() .partial(), // Mold Breaker ally should not be affected by Sweet Veil @@ -6919,6 +6995,7 @@ export function initAbilities() { .attr(ReceivedTypeDamageMultiplierAbAttr, PokemonType.FIRE, 0.5) .attr(MoveTypePowerBoostAbAttr, PokemonType.WATER, 2) .attr(StatusEffectImmunityAbAttr, StatusEffect.BURN) + .attr(PostSummonHealStatusAbAttr, StatusEffect.BURN) .ignorable(), new Ability(Abilities.STEELWORKER, 7) .attr(MoveTypePowerBoostAbAttr, PokemonType.STEEL), @@ -7197,6 +7274,7 @@ export function initAbilities() { new Ability(Abilities.THERMAL_EXCHANGE, 9) .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => user.getMoveType(move) === PokemonType.FIRE && move.category !== MoveCategory.STATUS, Stat.ATK, 1) .attr(StatusEffectImmunityAbAttr, StatusEffect.BURN) + .attr(PostSummonHealStatusAbAttr, StatusEffect.BURN) .ignorable(), new Ability(Abilities.ANGER_SHELL, 9) .attr(PostDefendHpGatedStatStageChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, 0.5, [ Stat.ATK, Stat.SPATK, Stat.SPD ], 1) diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 7a820d984d0..1af4be4fdf0 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -2443,12 +2443,8 @@ export class StatusEffectAttr extends MoveEffectAttr { const statusCheck = moveChance < 0 || moveChance === 100 || user.randSeedInt(100) < moveChance; if (statusCheck) { const pokemon = this.selfTarget ? user : target; - if (pokemon.status) { - if (this.overrideStatus) { - pokemon.resetStatus(); - } else { - return false; - } + if (pokemon.status && !this.overrideStatus) { + return false; } if (user !== target && target.isSafeguarded(user)) { @@ -2457,8 +2453,8 @@ export class StatusEffectAttr extends MoveEffectAttr { } return false; } - if ((!pokemon.status || (pokemon.status.effect === this.effect && moveChance < 0)) - && pokemon.trySetStatus(this.effect, true, user, this.turnsRemaining)) { + if (((!pokemon.status || this.overrideStatus) || (pokemon.status.effect === this.effect && moveChance < 0)) + && pokemon.trySetStatus(this.effect, true, user, this.turnsRemaining, null, this.overrideStatus)) { applyPostAttackAbAttrs(ConfusionOnStatusEffectAbAttr, user, target, move, null, false, this.effect); return true; } diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index f3e758e4efd..7d856696188 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -264,6 +264,7 @@ import { StatusEffect } from "#enums/status-effect"; import { doShinySparkleAnim } from "#app/field/anims"; import { MoveFlags } from "#enums/MoveFlags"; import { timedEventManager } from "#app/global-event-manager"; +import { ResetStatusPhase } from "#app/phases/reset-status-phase"; export enum LearnMoveSituation { MISC, @@ -4809,7 +4810,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (newTag.canAdd(this)) { this.summonData.tags.push(newTag); newTag.onAdd(this); - return true; } @@ -5480,8 +5480,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { sourcePokemon: Pokemon | null = null, turnsRemaining = 0, sourceText: string | null = null, + overrideStatus?: boolean ): boolean { - if (!this.canSetStatus(effect, asPhase, false, sourcePokemon)) { + if (!this.canSetStatus(effect, asPhase, overrideStatus, sourcePokemon)) { return false; } if (this.isFainted() && effect !== StatusEffect.FAINT) { @@ -5497,6 +5498,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } if (asPhase) { + if (overrideStatus) { + this.resetStatus(false); + } globalScene.unshiftPhase( new ObtainStatusEffectPhase( this.getBattlerIndex(), @@ -5536,20 +5540,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { effect = effect!; // If `effect` is undefined then `trySetStatus()` will have already returned early via the `canSetStatus()` call this.status = new Status(effect, 0, sleepTurnsRemaining?.value); - if (effect !== StatusEffect.FAINT) { - globalScene.triggerPokemonFormChange( - this, - SpeciesFormChangeStatusEffectTrigger, - true, - ); - applyPostSetStatusAbAttrs( - PostSetStatusAbAttr, - this, - effect, - sourcePokemon, - ); - } - return true; } @@ -5564,21 +5554,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (!revive && lastStatus === StatusEffect.FAINT) { return; } - this.status = null; - if (lastStatus === StatusEffect.SLEEP) { - this.setFrameRate(10); - if (this.getTag(BattlerTagType.NIGHTMARE)) { - this.lapseTag(BattlerTagType.NIGHTMARE); - } - } - if (confusion) { - if (this.getTag(BattlerTagType.CONFUSED)) { - this.lapseTag(BattlerTagType.CONFUSED); - } - } - if (reloadAssets) { - this.loadAssets(false).then(() => this.playAnim()); - } + globalScene.unshiftPhase(new ResetStatusPhase(this, confusion, reloadAssets)); } /** diff --git a/src/phases/move-end-phase.ts b/src/phases/move-end-phase.ts index 53856956401..176abee5e98 100644 --- a/src/phases/move-end-phase.ts +++ b/src/phases/move-end-phase.ts @@ -2,11 +2,18 @@ import { globalScene } from "#app/global-scene"; import { BattlerTagLapseType } from "#app/data/battler-tags"; import { PokemonPhase } from "./pokemon-phase"; import type { BattlerIndex } from "#app/battle"; +import { applyPostSummonAbAttrs, PostSummonRemoveEffectAbAttr } from "#app/data/ability"; +import type Pokemon from "#app/field/pokemon"; export class MoveEndPhase extends PokemonPhase { private wasFollowUp: boolean; - constructor(battlerIndex: BattlerIndex, wasFollowUp = false) { + + /** Targets from the preceding MovePhase */ + private targets: Pokemon[]; + constructor(battlerIndex: BattlerIndex, targets: Pokemon[], wasFollowUp = false) { super(battlerIndex); + + this.targets = targets; this.wasFollowUp = wasFollowUp; } @@ -17,9 +24,15 @@ export class MoveEndPhase extends PokemonPhase { if (!this.wasFollowUp && pokemon?.isActive(true)) { pokemon.lapseTags(BattlerTagLapseType.AFTER_MOVE); } - globalScene.arena.setIgnoreAbilities(false); + // Remove effects which were set on a Pokemon which removes them on summon (i.e. via Mold Breaker) + for (const target of this.targets) { + if (target) { + applyPostSummonAbAttrs(PostSummonRemoveEffectAbAttr, target); + } + } + this.end(); } } diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index 5232dfee8ba..478229dcae8 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -169,7 +169,11 @@ export class MovePhase extends BattlePhase { // Check move to see if arena.ignoreAbilities should be true. if (!this.followUp || this.reflected) { - if (this.move.getMove().doesFlagEffectApply({ flag: MoveFlags.IGNORE_ABILITIES, user: this.pokemon, isFollowUp: this.followUp })) { + if ( + this.move + .getMove() + .doesFlagEffectApply({ flag: MoveFlags.IGNORE_ABILITIES, user: this.pokemon, isFollowUp: this.followUp }) + ) { globalScene.arena.setIgnoreAbilities(true, this.pokemon.getBattlerIndex()); } } @@ -473,7 +477,9 @@ export class MovePhase extends BattlePhase { * Queues a {@linkcode MoveEndPhase} and then ends the phase */ public end(): void { - globalScene.unshiftPhase(new MoveEndPhase(this.pokemon.getBattlerIndex(), this.followUp)); + globalScene.unshiftPhase( + new MoveEndPhase(this.pokemon.getBattlerIndex(), this.getActiveTargetPokemon(), this.followUp), + ); super.end(); } diff --git a/src/phases/obtain-status-effect-phase.ts b/src/phases/obtain-status-effect-phase.ts index a0c0c14e93f..cba9399b996 100644 --- a/src/phases/obtain-status-effect-phase.ts +++ b/src/phases/obtain-status-effect-phase.ts @@ -6,6 +6,9 @@ import { StatusEffect } from "#app/enums/status-effect"; import type Pokemon from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { PokemonPhase } from "./pokemon-phase"; +import { SpeciesFormChangeStatusEffectTrigger } from "#app/data/pokemon-forms"; +import { applyPostSetStatusAbAttrs, PostSetStatusAbAttr } from "#app/data/ability"; +import { isNullOrUndefined } from "#app/utils"; export class ObtainStatusEffectPhase extends PokemonPhase { private statusEffect?: StatusEffect; @@ -44,6 +47,12 @@ export class ObtainStatusEffectPhase extends PokemonPhase { this.sourceText ?? undefined, ), ); + if (!isNullOrUndefined(this.statusEffect) && this.statusEffect !== StatusEffect.FAINT) { + globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeStatusEffectTrigger, true); + // If mold breaker etc was used to set this status, it shouldn't apply to abilities activated afterwards + globalScene.arena.setIgnoreAbilities(false); + applyPostSetStatusAbAttrs(PostSetStatusAbAttr, pokemon, this.statusEffect, this.sourcePokemon); + } this.end(); }); return; diff --git a/src/phases/reset-status-phase.ts b/src/phases/reset-status-phase.ts new file mode 100644 index 00000000000..0ba3559d9b7 --- /dev/null +++ b/src/phases/reset-status-phase.ts @@ -0,0 +1,44 @@ +import type Pokemon from "#app/field/pokemon"; +import { BattlePhase } from "#app/phases/battle-phase"; +import { BattlerTagType } from "#enums/battler-tag-type"; +import { StatusEffect } from "#enums/status-effect"; + +/** + * Phase which handles resetting a Pokemon's status to none + * + * This is necessary to perform in a phase primarly to ensure that the status icon disappears at the correct time in the battle + */ +export class ResetStatusPhase extends BattlePhase { + private readonly pokemon: Pokemon; + private readonly affectConfusion: boolean; + private readonly reloadAssets: boolean; + + constructor(pokemon: Pokemon, affectConfusion: boolean, reloadAssets: boolean) { + super(); + + this.pokemon = pokemon; + this.affectConfusion = affectConfusion; + this.reloadAssets = reloadAssets; + } + + public override start() { + const lastStatus = this.pokemon.status?.effect; + this.pokemon.status = null; + if (lastStatus === StatusEffect.SLEEP) { + this.pokemon.setFrameRate(10); + if (this.pokemon.getTag(BattlerTagType.NIGHTMARE)) { + this.pokemon.lapseTag(BattlerTagType.NIGHTMARE); + } + } + if (this.affectConfusion) { + if (this.pokemon.getTag(BattlerTagType.CONFUSED)) { + this.pokemon.lapseTag(BattlerTagType.CONFUSED); + } + } + if (this.reloadAssets) { + this.pokemon.loadAssets(false).then(() => this.pokemon.playAnim()); + } + this.pokemon.updateInfo(true); + this.end(); + } +} diff --git a/test/abilities/immunity.test.ts b/test/abilities/immunity.test.ts new file mode 100644 index 00000000000..51e9598720b --- /dev/null +++ b/test/abilities/immunity.test.ts @@ -0,0 +1,51 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { StatusEffect } from "#enums/status-effect"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Immunity", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should remove poison when gained", async () => { + game.override.ability(Abilities.IMMUNITY) + .enemyAbility(Abilities.BALL_FETCH) + .moveset(Moves.SKILL_SWAP) + .enemyMoveset(Moves.SPLASH), + + await game.classicMode.startBattle([ Species.FEEBAS ]); + const enemy = game.scene.getEnemyPokemon(); + enemy?.trySetStatus(StatusEffect.POISON); + expect(enemy?.status?.effect).toBe(StatusEffect.POISON); + + game.move.select(Moves.SKILL_SWAP); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemy?.status).toBeNull(); + }); +}); diff --git a/test/abilities/insomnia.test.ts b/test/abilities/insomnia.test.ts new file mode 100644 index 00000000000..91fdc3fc668 --- /dev/null +++ b/test/abilities/insomnia.test.ts @@ -0,0 +1,51 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { StatusEffect } from "#enums/status-effect"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Insomnia", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should remove sleep when gained", async () => { + game.override.ability(Abilities.INSOMNIA) + .enemyAbility(Abilities.BALL_FETCH) + .moveset(Moves.SKILL_SWAP) + .enemyMoveset(Moves.SPLASH), + + await game.classicMode.startBattle([ Species.FEEBAS ]); + const enemy = game.scene.getEnemyPokemon(); + enemy?.trySetStatus(StatusEffect.SLEEP); + expect(enemy?.status?.effect).toBe(StatusEffect.SLEEP); + + game.move.select(Moves.SKILL_SWAP); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemy?.status).toBeNull(); + }); +}); diff --git a/test/abilities/limber.test.ts b/test/abilities/limber.test.ts new file mode 100644 index 00000000000..2b167cc155f --- /dev/null +++ b/test/abilities/limber.test.ts @@ -0,0 +1,51 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { StatusEffect } from "#enums/status-effect"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Limber", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should remove paralysis when gained", async () => { + game.override.ability(Abilities.LIMBER) + .enemyAbility(Abilities.BALL_FETCH) + .moveset(Moves.SKILL_SWAP) + .enemyMoveset(Moves.SPLASH), + + await game.classicMode.startBattle([ Species.FEEBAS ]); + const enemy = game.scene.getEnemyPokemon(); + enemy?.trySetStatus(StatusEffect.PARALYSIS); + expect(enemy?.status?.effect).toBe(StatusEffect.PARALYSIS); + + game.move.select(Moves.SKILL_SWAP); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemy?.status).toBeNull(); + }); +}); diff --git a/test/abilities/magma_armor.test.ts b/test/abilities/magma_armor.test.ts new file mode 100644 index 00000000000..b1d62f948d2 --- /dev/null +++ b/test/abilities/magma_armor.test.ts @@ -0,0 +1,51 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { StatusEffect } from "#enums/status-effect"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Magma Armor", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should remove freeze when gained", async () => { + game.override.ability(Abilities.MAGMA_ARMOR) + .enemyAbility(Abilities.BALL_FETCH) + .moveset(Moves.SKILL_SWAP) + .enemyMoveset(Moves.SPLASH), + + await game.classicMode.startBattle([ Species.FEEBAS ]); + const enemy = game.scene.getEnemyPokemon(); + enemy?.trySetStatus(StatusEffect.FREEZE); + expect(enemy?.status?.effect).toBe(StatusEffect.FREEZE); + + game.move.select(Moves.SKILL_SWAP); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemy?.status).toBeNull(); + }); +}); diff --git a/test/abilities/oblivious.test.ts b/test/abilities/oblivious.test.ts new file mode 100644 index 00000000000..d5089ef6a72 --- /dev/null +++ b/test/abilities/oblivious.test.ts @@ -0,0 +1,69 @@ +import { Abilities } from "#enums/abilities"; +import { BattlerTagType } from "#enums/battler-tag-type"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Abilities - Oblivious", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should remove taunt when gained", async () => { + game.override.ability(Abilities.OBLIVIOUS) + .enemyAbility(Abilities.BALL_FETCH) + .moveset(Moves.SKILL_SWAP) + .enemyMoveset(Moves.SPLASH), + + await game.classicMode.startBattle([ Species.FEEBAS ]); + const enemy = game.scene.getEnemyPokemon(); + enemy?.addTag(BattlerTagType.TAUNT); + expect(enemy?.getTag(BattlerTagType.TAUNT)).toBeTruthy(); + + game.move.select(Moves.SKILL_SWAP); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemy?.getTag(BattlerTagType.TAUNT)).toBeFalsy(); + }); + + it("should remove infatuation when gained", async () => { + game.override.ability(Abilities.OBLIVIOUS) + .enemyAbility(Abilities.BALL_FETCH) + .moveset(Moves.SKILL_SWAP) + .enemyMoveset(Moves.SPLASH), + + await game.classicMode.startBattle([ Species.FEEBAS ]); + const enemy = game.scene.getEnemyPokemon(); + vi.spyOn(enemy!, "isOppositeGender").mockReturnValue(true); + enemy?.addTag(BattlerTagType.INFATUATED, 5, Moves.JUDGMENT, game.scene.getPlayerPokemon()?.id); // sourceID needs to be defined + expect(enemy?.getTag(BattlerTagType.INFATUATED)).toBeTruthy(); + + game.move.select(Moves.SKILL_SWAP); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemy?.getTag(BattlerTagType.INFATUATED)).toBeFalsy(); + }); +}); diff --git a/test/abilities/own_tempo.test.ts b/test/abilities/own_tempo.test.ts new file mode 100644 index 00000000000..936b4311b20 --- /dev/null +++ b/test/abilities/own_tempo.test.ts @@ -0,0 +1,51 @@ +import { Abilities } from "#enums/abilities"; +import { BattlerTagType } from "#enums/battler-tag-type"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Own Tempo", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should remove confusion when gained", async () => { + game.override.ability(Abilities.OWN_TEMPO) + .enemyAbility(Abilities.BALL_FETCH) + .moveset(Moves.SKILL_SWAP) + .enemyMoveset(Moves.SPLASH), + + await game.classicMode.startBattle([ Species.FEEBAS ]); + const enemy = game.scene.getEnemyPokemon(); + enemy?.addTag(BattlerTagType.CONFUSED); + expect(enemy?.getTag(BattlerTagType.CONFUSED)).toBeTruthy(); + + game.move.select(Moves.SKILL_SWAP); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemy?.getTag(BattlerTagType.CONFUSED)).toBeFalsy(); + }); +}); diff --git a/test/abilities/thermal_exchange.test.ts b/test/abilities/thermal_exchange.test.ts new file mode 100644 index 00000000000..124c1dba286 --- /dev/null +++ b/test/abilities/thermal_exchange.test.ts @@ -0,0 +1,51 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { StatusEffect } from "#enums/status-effect"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Thermal Exchange", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should remove burn when gained", async () => { + game.override.ability(Abilities.THERMAL_EXCHANGE) + .enemyAbility(Abilities.BALL_FETCH) + .moveset(Moves.SKILL_SWAP) + .enemyMoveset(Moves.SPLASH), + + await game.classicMode.startBattle([ Species.FEEBAS ]); + const enemy = game.scene.getEnemyPokemon(); + enemy?.trySetStatus(StatusEffect.BURN); + expect(enemy?.status?.effect).toBe(StatusEffect.BURN); + + game.move.select(Moves.SKILL_SWAP); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemy?.status).toBeNull(); + }); +}); diff --git a/test/abilities/vital_spirit.test.ts b/test/abilities/vital_spirit.test.ts new file mode 100644 index 00000000000..3a53c3f520e --- /dev/null +++ b/test/abilities/vital_spirit.test.ts @@ -0,0 +1,51 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { StatusEffect } from "#enums/status-effect"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Vital Spirit", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should remove sleep when gained", async () => { + game.override.ability(Abilities.INSOMNIA) + .enemyAbility(Abilities.BALL_FETCH) + .moveset(Moves.SKILL_SWAP) + .enemyMoveset(Moves.SPLASH), + + await game.classicMode.startBattle([ Species.FEEBAS ]); + const enemy = game.scene.getEnemyPokemon(); + enemy?.trySetStatus(StatusEffect.SLEEP); + expect(enemy?.status?.effect).toBe(StatusEffect.SLEEP); + + game.move.select(Moves.SKILL_SWAP); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemy?.status).toBeNull(); + }); +}); diff --git a/test/abilities/water_bubble.test.ts b/test/abilities/water_bubble.test.ts new file mode 100644 index 00000000000..0b85a5814da --- /dev/null +++ b/test/abilities/water_bubble.test.ts @@ -0,0 +1,51 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { StatusEffect } from "#enums/status-effect"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Water Bubble", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should remove burn when gained", async () => { + game.override.ability(Abilities.THERMAL_EXCHANGE) + .enemyAbility(Abilities.BALL_FETCH) + .moveset(Moves.SKILL_SWAP) + .enemyMoveset(Moves.SPLASH), + + await game.classicMode.startBattle([ Species.FEEBAS ]); + const enemy = game.scene.getEnemyPokemon(); + enemy?.trySetStatus(StatusEffect.BURN); + expect(enemy?.status?.effect).toBe(StatusEffect.BURN); + + game.move.select(Moves.SKILL_SWAP); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemy?.status).toBeNull(); + }); +}); diff --git a/test/abilities/water_veil.test.ts b/test/abilities/water_veil.test.ts new file mode 100644 index 00000000000..38c9a05600b --- /dev/null +++ b/test/abilities/water_veil.test.ts @@ -0,0 +1,51 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { StatusEffect } from "#enums/status-effect"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Water Veil", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should remove burn when gained", async () => { + game.override.ability(Abilities.THERMAL_EXCHANGE) + .enemyAbility(Abilities.BALL_FETCH) + .moveset(Moves.SKILL_SWAP) + .enemyMoveset(Moves.SPLASH), + + await game.classicMode.startBattle([ Species.FEEBAS ]); + const enemy = game.scene.getEnemyPokemon(); + enemy?.trySetStatus(StatusEffect.BURN); + expect(enemy?.status?.effect).toBe(StatusEffect.BURN); + + game.move.select(Moves.SKILL_SWAP); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemy?.status).toBeNull(); + }); +}); From 787feceb14f0cd635ca833e94a877b6fe379e50a Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Wed, 9 Apr 2025 10:43:05 -0500 Subject: [PATCH 015/262] [Refactor] Refactor variant sprite code part 1 (#5592) * Move exp to its own masterlist, simplify initVariantData * Update test/sprites/pokemonSprite.test.ts * Extract loadPokemonVariantAssets out of BattleScene * move variant.ts and update pokemon.loadAssets * Add fuzzy matching for applying variant recolors * Move glsl shaders to their own files * Remove extra variants from shader masterlist Their exp sprites have since been removed. Co-authored-by: Unicorn_Power <189861924+Unicornpowerstar@users.noreply.github.com> * Make exp sprite keys a set instead of an array * Remove outdated exp sprite jsons Co-authored-by: Unicorn_Power <189861924+Unicornpowerstar@users.noreply.github.com> --------- Co-authored-by: Unicorn_Power <189861924+Unicornpowerstar@users.noreply.github.com> --- .../pokemon/variant/_exp_masterlist.json | 656 +++++++++++++++++ .../images/pokemon/variant/_masterlist.json | 664 ------------------ public/images/pokemon/variant/exp/698.json | 48 -- public/images/pokemon/variant/exp/703.json | 32 - public/images/pokemon/variant/exp/708.json | 28 - public/images/pokemon/variant/exp/714.json | 32 - .../images/pokemon/variant/exp/back/698.json | 38 - .../images/pokemon/variant/exp/back/703.json | 28 - .../images/pokemon/variant/exp/back/708.json | 40 -- .../images/pokemon/variant/exp/back/714.json | 24 - scripts/find_sprite_variant_mismatches.py | 4 + src/battle-scene.ts | 137 +--- .../utils/encounter-phase-utils.ts | 2 +- src/data/pokemon-species.ts | 31 +- src/data/trainers/trainer-config.ts | 7 +- src/data/variant.ts | 31 - src/field/anims.ts | 2 +- src/field/mystery-encounter-intro.ts | 7 +- src/field/pokemon.ts | 188 ++--- src/overrides.ts | 2 +- src/pipelines/field-sprite.ts | 208 +----- src/pipelines/glsl/fieldSpriteFragShader.frag | 168 +++++ src/pipelines/glsl/invert.frag | 10 + src/pipelines/glsl/spriteFragShader.frag | 279 ++++++++ src/pipelines/glsl/spriteShader.vert | 32 + src/pipelines/invert.ts | 14 +- src/pipelines/sprite.ts | 312 +------- src/sprites/pokemon-asset-loader.ts | 11 + src/sprites/pokemon-sprite.ts | 79 +++ src/sprites/sprite-keys.ts | 1 + src/sprites/sprite-utils.ts | 28 + src/sprites/variant.ts | 145 ++++ src/system/game-data.ts | 2 +- src/system/pokemon-data.ts | 2 +- src/ui/battle-info.ts | 2 +- src/ui/hatched-pokemon-container.ts | 2 +- src/ui/party-ui-handler.ts | 2 +- src/ui/pokedex-mon-container.ts | 2 +- src/ui/pokedex-page-ui-handler.ts | 4 +- src/ui/pokedex-ui-handler.ts | 4 +- src/ui/pokemon-info-container.ts | 2 +- src/ui/run-info-ui-handler.ts | 2 +- src/ui/starter-select-ui-handler.ts | 4 +- src/ui/summary-ui-handler.ts | 4 +- src/utils.ts | 22 + test/sprites/pokemonSprite.test.ts | 13 +- test/testUtils/helpers/overridesHelper.ts | 2 +- 47 files changed, 1599 insertions(+), 1758 deletions(-) create mode 100644 public/images/pokemon/variant/_exp_masterlist.json delete mode 100644 public/images/pokemon/variant/exp/698.json delete mode 100644 public/images/pokemon/variant/exp/703.json delete mode 100644 public/images/pokemon/variant/exp/708.json delete mode 100644 public/images/pokemon/variant/exp/714.json delete mode 100644 public/images/pokemon/variant/exp/back/698.json delete mode 100644 public/images/pokemon/variant/exp/back/703.json delete mode 100644 public/images/pokemon/variant/exp/back/708.json delete mode 100644 public/images/pokemon/variant/exp/back/714.json delete mode 100644 src/data/variant.ts create mode 100644 src/pipelines/glsl/fieldSpriteFragShader.frag create mode 100644 src/pipelines/glsl/invert.frag create mode 100644 src/pipelines/glsl/spriteFragShader.frag create mode 100644 src/pipelines/glsl/spriteShader.vert create mode 100644 src/sprites/pokemon-asset-loader.ts create mode 100644 src/sprites/pokemon-sprite.ts create mode 100644 src/sprites/sprite-keys.ts create mode 100644 src/sprites/sprite-utils.ts create mode 100644 src/sprites/variant.ts diff --git a/public/images/pokemon/variant/_exp_masterlist.json b/public/images/pokemon/variant/_exp_masterlist.json new file mode 100644 index 00000000000..0ef5f209439 --- /dev/null +++ b/public/images/pokemon/variant/_exp_masterlist.json @@ -0,0 +1,656 @@ +{ + "3-mega": [0, 2, 2], + "6-mega-x": [0, 2, 2], + "6-mega-y": [0, 2, 2], + "80-mega": [0, 1, 1], + "94-mega": [2, 2, 2], + "127-mega": [0, 1, 1], + "130-mega": [0, 1, 1], + "142-mega": [0, 1, 1], + "150-mega-x": [0, 1, 1], + "150-mega-y": [0, 1, 1], + "181-mega": [0, 1, 2], + "212-mega": [1, 1, 2], + "229-mega": [0, 1, 1], + "248-mega": [0, 1, 1], + "257-mega": [0, 1, 1], + "282-mega": [0, 2, 2], + "302-mega": [0, 1, 1], + "303-mega": [0, 1, 1], + "306-mega": [1, 1, 1], + "308-mega": [0, 1, 1], + "310-mega": [0, 1, 1], + "334-mega": [0, 2, 1], + "354-mega": [0, 1, 1], + "359-mega": [0, 1, 1], + "362-mega": [0, 1, 1], + "373-mega": [0, 1, 1], + "376-mega": [0, 1, 1], + "380-mega": [0, 1, 1], + "381-mega": [0, 1, 1], + "382-primal": [0, 1, 1], + "383-primal": [0, 1, 1], + "384-mega": [0, 2, 1], + "428-mega": [0, 1, 1], + "445-mega": [1, 1, 1], + "448-mega": [1, 1, 1], + "475-mega": [0, 2, 2], + "531-mega": [0, 1, 1], + "653": [0, 1, 1], + "654": [0, 1, 1], + "655": [0, 1, 1], + "656": [0, 1, 1], + "657": [0, 1, 1], + "658": [0, 1, 1], + "658-ash": [0, 1, 1], + "664": [0, 1, 1], + "665": [0, 1, 1], + "666-archipelago": [0, 1, 1], + "666-continental": [0, 1, 1], + "666-elegant": [0, 1, 1], + "666-fancy": [0, 1, 1], + "666-garden": [0, 1, 1], + "666-high-plains": [0, 1, 1], + "666-icy-snow": [0, 1, 1], + "666-jungle": [0, 1, 1], + "666-marine": [0, 1, 1], + "666-meadow": [0, 1, 1], + "666-modern": [0, 1, 1], + "666-monsoon": [0, 1, 1], + "666-ocean": [0, 1, 1], + "666-poke-ball": [0, 1, 1], + "666-polar": [0, 1, 1], + "666-river": [0, 1, 1], + "666-sandstorm": [0, 1, 1], + "666-savanna": [0, 1, 1], + "666-sun": [0, 1, 1], + "666-tundra": [0, 1, 1], + "669-red": [0, 2, 2], + "669-blue": [0, 1, 1], + "669-white": [0, 1, 1], + "669-yellow": [0, 1, 1], + "669-orange": [0, 2, 2], + "670-white": [0, 1, 1], + "670-blue": [0, 1, 1], + "670-orange": [0, 1, 1], + "670-red": [0, 1, 1], + "670-yellow": [0, 1, 1], + "671-red": [0, 1, 2], + "671-blue": [0, 1, 2], + "671-yellow": [0, 1, 1], + "671-white": [0, 1, 2], + "671-orange": [0, 1, 2], + "672": [0, 1, 1], + "673": [0, 1, 1], + "676": [0, 1, 1], + "677": [0, 1, 1], + "678-female": [0, 1, 1], + "678": [0, 1, 1], + "682": [0, 1, 1], + "683": [0, 1, 1], + "684": [0, 1, 1], + "685": [0, 1, 1], + "688": [0, 1, 1], + "689": [0, 1, 1], + "690": [0, 1, 1], + "691": [0, 1, 1], + "696": [0, 1, 1], + "697": [0, 1, 1], + "699": [0, 1, 1], + "700": [0, 1, 1], + "702": [0, 1, 1], + "704": [0, 1, 1], + "705": [0, 1, 1], + "706": [0, 1, 1], + "709": [0, 1, 1], + "710": [0, 1, 1], + "711": [1, 1, 1], + "712": [0, 1, 1], + "713": [0, 1, 1], + "715": [0, 1, 1], + "716-active": [0, 1, 1], + "716-neutral": [0, 1, 1], + "717": [0, 2, 2], + "720-unbound": [1, 1, 1], + "720": [1, 1, 1], + "728": [0, 1, 1], + "729": [0, 1, 1], + "730": [0, 1, 1], + "734": [0, 1, 1], + "735": [0, 1, 1], + "742": [0, 2, 2], + "743": [0, 2, 2], + "747": [0, 2, 2], + "748": [0, 1, 1], + "751": [0, 1, 1], + "752": [0, 1, 1], + "753": [0, 1, 1], + "754": [0, 2, 2], + "755": [0, 1, 1], + "756": [0, 1, 1], + "761": [0, 1, 1], + "762": [0, 1, 1], + "763": [0, 1, 1], + "767": [0, 1, 1], + "768": [0, 1, 1], + "770": [0, 0, 0], + "771": [0, 2, 2], + "772": [0, 1, 1], + "773-fighting": [0, 1, 1], + "773-psychic": [0, 1, 1], + "773-poison": [0, 1, 1], + "773-ground": [0, 1, 1], + "773-ghost": [0, 1, 1], + "773-steel": [0, 1, 1], + "773-rock": [0, 1, 1], + "773-grass": [0, 1, 1], + "773-dragon": [0, 1, 1], + "773-bug": [0, 1, 1], + "773-ice": [0, 1, 1], + "773-dark": [0, 1, 1], + "773": [0, 1, 1], + "773-fairy": [0, 1, 1], + "773-water": [0, 1, 1], + "773-electric": [0, 1, 1], + "773-flying": [0, 1, 1], + "773-fire": [0, 1, 1], + "776": [0, 1, 1], + "777": [0, 1, 1], + "778-busted": [0, 1, 1], + "778-disguised": [0, 1, 1], + "779": [0, 1, 1], + "789": [1, 1, 1], + "790": [0, 1, 1], + "791": [2, 1, 1], + "792": [0, 1, 1], + "793": [0, 2, 2], + "797": [0, 1, 1], + "798": [0, 1, 1], + "800-dawn-wings": [0, 1, 1], + "800-dusk-mane": [0, 1, 1], + "800-ultra": [0, 1, 1], + "800": [0, 1, 1], + "802": [1, 1, 1], + "803": [0, 1, 1], + "804": [0, 1, 1], + "807": [0, 1, 1], + "808": [0, 1, 1], + "809": [0, 1, 1], + "816": [0, 1, 1], + "817": [0, 1, 1], + "818": [1, 1, 1], + "821": [0, 2, 2], + "822": [0, 1, 1], + "823": [0, 1, 1], + "829": [0, 1, 1], + "830": [0, 1, 1], + "835": [0, 1, 1], + "836": [0, 2, 2], + "850": [0, 1, 1], + "851": [0, 1, 1], + "854": [0, 1, 1], + "855": [0, 1, 1], + "856": [0, 1, 1], + "857": [0, 2, 2], + "858": [0, 1, 1], + "859": [0, 1, 1], + "860": [0, 1, 1], + "861": [0, 1, 1], + "862": [0, 1, 1], + "863": [0, 1, 1], + "864": [0, 1, 1], + "867": [0, 1, 1], + "872": [1, 1, 1], + "873": [1, 1, 1], + "876-female": [0, 1, 1], + "876": [0, 1, 1], + "877-hangry": [1, 1, 1], + "877": [1, 1, 1], + "880": [0, 1, 1], + "881": [0, 1, 1], + "882": [0, 2, 1], + "883": [0, 1, 1], + "884": [0, 1, 1], + "885": [1, 1, 1], + "886": [1, 1, 1], + "887": [1, 1, 1], + "888": [0, 1, 1], + "888-crowned": [0, 1, 1], + "889": [0, 1, 1], + "889-crowned": [0, 1, 1], + "890": [0, 2, 1], + "890-eternamax": [0, 1, 1], + "891": [1, 1, 1], + "892-rapid-strike": [1, 1, 1], + "892": [1, 1, 1], + "894": [0, 1, 1], + "895": [0, 1, 1], + "896": [1, 1, 1], + "897": [1, 1, 1], + "898": [1, 1, 1], + "898-ice": [1, 1, 1], + "898-shadow": [1, 1, 1], + "900": [0, 1, 1], + "901": [0, 1, 1], + "903": [0, 1, 1], + "909": [0, 1, 1], + "910": [0, 2, 2], + "911": [0, 2, 2], + "912": [0, 1, 2], + "913": [0, 1, 2], + "914": [0, 2, 1], + "919": [1, 1, 1], + "920": [1, 1, 1], + "924": [1, 1, 1], + "925-four": [1, 2, 2], + "925-three": [1, 2, 2], + "932": [0, 2, 2], + "933": [0, 2, 2], + "934": [0, 1, 1], + "935": [1, 1, 2], + "936": [2, 2, 2], + "937": [2, 2, 2], + "940": [0, 1, 1], + "941": [0, 1, 1], + "944": [0, 1, 1], + "945": [0, 1, 1], + "948": [0, 1, 1], + "949": [0, 1, 1], + "951": [0, 1, 1], + "952": [0, 1, 1], + "953": [0, 1, 1], + "954": [0, 1, 1], + "957": [2, 2, 2], + "958": [2, 2, 2], + "959": [2, 2, 2], + "962": [1, 1, 1], + "967": [0, 1, 1], + "968": [0, 1, 1], + "969": [0, 1, 1], + "970": [0, 1, 1], + "973": [1, 1, 1], + "974": [0, 1, 1], + "975": [0, 1, 1], + "978-curly": [0, 2, 2], + "978-droopy": [0, 2, 2], + "978-stretchy": [0, 2, 2], + "979": [2, 2, 2], + "981": [0, 1, 1], + "982": [0, 1, 1], + "982-three-segment": [0, 1, 1], + "987": [1, 1, 1], + "988": [0, 1, 2], + "993": [0, 1, 1], + "994": [0, 1, 2], + "995": [0, 1, 1], + "996": [0, 1, 1], + "997": [0, 2, 2], + "998": [0, 2, 2], + "999": [2, 1, 1], + "1000": [1, 1, 1], + "1001": [0, 1, 1], + "1003": [0, 1, 1], + "1004": [0, 1, 1], + "1006": [0, 2, 1], + "1007-apex-build": [0, 2, 2], + "1008-ultimate-mode": [1, 1, 1], + "2026": [0, 1, 1], + "2027": [0, 1, 1], + "2028": [0, 1, 1], + "2052": [0, 1, 1], + "2053": [0, 1, 0], + "2103": [0, 1, 1], + "4052": [0, 1, 1], + "4077": [0, 1, 1], + "4078": [0, 1, 1], + "4079": [0, 1, 1], + "4080": [2, 1, 1], + "4144": [0, 1, 1], + "4145": [0, 1, 1], + "4146": [0, 1, 1], + "4199": [2, 1, 1], + "4222": [0, 1, 1], + "4263": [0, 1, 1], + "4264": [0, 1, 1], + "4562": [0, 1, 1], + "6100": [0, 1, 1], + "6101": [0, 1, 1], + "6215": [0, 1, 1], + "6503": [0, 1, 1], + "6549": [0, 1, 1], + "6570": [0, 1, 1], + "6571": [0, 1, 1], + "6705": [0, 1, 1], + "6706": [0, 1, 1], + "6713": [0, 1, 1], + "female": { + "6215": [0, 1, 1] + }, + "back": { + "3-mega": [0, 2, 2], + "6-mega-x": [0, 2, 2], + "6-mega-y": [0, 1, 2], + "80-mega": [0, 1, 1], + "94-mega": [1, 1, 1], + "127-mega": [0, 1, 1], + "130-mega": [0, 1, 1], + "142-mega": [0, 1, 1], + "150-mega-x": [0, 1, 1], + "150-mega-y": [0, 1, 1], + "181-mega": [0, 1, 2], + "212-mega": [1, 2, 2], + "229-mega": [0, 1, 1], + "248-mega": [0, 1, 1], + "257-mega": [0, 1, 1], + "282-mega": [0, 1, 1], + "302-mega": [0, 1, 1], + "303-mega": [0, 1, 1], + "306-mega": [1, 1, 1], + "308-mega": [0, 1, 1], + "310-mega": [0, 1, 1], + "334-mega": [0, 1, 1], + "354-mega": [0, 1, 1], + "359-mega": [0, 1, 1], + "362-mega": [0, 1, 1], + "373-mega": [0, 1, 1], + "376-mega": [0, 1, 1], + "380-mega": [0, 1, 1], + "381-mega": [0, 1, 1], + "382-primal": [0, 1, 1], + "383-primal": [0, 1, 1], + "384-mega": [0, 1, 1], + "428-mega": [0, 1, 1], + "445-mega": [1, 1, 1], + "448-mega": [1, 1, 1], + "475-mega": [0, 2, 2], + "531-mega": [0, 1, 1], + "653": [0, 1, 1], + "654": [0, 1, 1], + "655": [0, 1, 1], + "656": [0, 1, 1], + "657": [0, 1, 1], + "658": [0, 1, 1], + "658-ash": [0, 1, 1], + "664": [0, 1, 1], + "665": [0, 1, 1], + "666-archipelago": [0, 1, 1], + "666-continental": [0, 1, 1], + "666-elegant": [0, 1, 1], + "666-fancy": [0, 1, 1], + "666-garden": [0, 1, 1], + "666-high-plains": [0, 1, 1], + "666-icy-snow": [0, 1, 1], + "666-jungle": [0, 1, 1], + "666-marine": [0, 1, 1], + "666-meadow": [0, 1, 1], + "666-modern": [0, 1, 1], + "666-monsoon": [0, 1, 1], + "666-ocean": [0, 1, 1], + "666-poke-ball": [0, 1, 1], + "666-polar": [0, 1, 1], + "666-river": [0, 1, 1], + "666-sandstorm": [0, 1, 1], + "666-savanna": [0, 1, 1], + "666-sun": [0, 1, 1], + "666-tundra": [0, 1, 1], + "669-red": [0, 2, 2], + "669-blue": [0, 2, 2], + "669-white": [0, 2, 2], + "669-yellow": [0, 2, 2], + "669-orange": [0, 2, 2], + "670-white": [0, 1, 1], + "670-blue": [0, 2, 2], + "670-orange": [0, 1, 1], + "670-red": [0, 1, 1], + "670-yellow": [0, 1, 1], + "671-red": [0, 1, 1], + "671-blue": [0, 1, 1], + "671-yellow": [0, 1, 1], + "671-white": [0, 1, 1], + "671-orange": [0, 1, 1], + "672": [0, 1, 1], + "673": [0, 1, 1], + "676": [0, 1, 1], + "677": [0, 1, 1], + "678-female": [0, 1, 1], + "678": [0, 1, 1], + "682": [0, 1, 1], + "683": [0, 1, 1], + "684": [0, 1, 1], + "685": [0, 1, 1], + "688": [0, 1, 1], + "689": [0, 1, 1], + "690": [0, 1, 1], + "691": [0, 1, 1], + "696": [0, 1, 1], + "697": [0, 1, 1], + "699": [0, 2, 2], + "700": [0, 1, 1], + "702": [0, 1, 1], + "704": [0, 1, 1], + "705": [0, 1, 1], + "706": [0, 1, 1], + "709": [0, 1, 1], + "710": [0, 1, 1], + "711": [1, 1, 1], + "712": [0, 1, 1], + "713": [0, 1, 1], + "715": [0, 1, 1], + "716-active": [0, 1, 1], + "716-neutral": [0, 1, 1], + "717": [0, 1, 1], + "720-unbound": [1, 1, 1], + "720": [1, 1, 1], + "728": [0, 1, 1], + "729": [0, 1, 1], + "730": [0, 1, 1], + "734": [0, 1, 1], + "735": [0, 1, 1], + "742": [0, 2, 2], + "743": [0, 2, 2], + "747": [0, 2, 2], + "748": [0, 1, 1], + "751": [0, 1, 1], + "752": [0, 1, 1], + "753": [0, 1, 1], + "754": [0, 2, 2], + "755": [0, 1, 1], + "756": [0, 1, 1], + "761": [0, 1, 1], + "762": [0, 1, 1], + "763": [0, 1, 1], + "767": [0, 1, 1], + "768": [0, 1, 1], + "771": [0, 1, 1], + "772": [0, 1, 1], + "773-fighting": [0, 1, 1], + "773-psychic": [0, 1, 1], + "773-poison": [0, 1, 1], + "773-ground": [0, 1, 1], + "773-ghost": [0, 1, 1], + "773-steel": [0, 1, 1], + "773-rock": [0, 1, 1], + "773-grass": [0, 1, 1], + "773-dragon": [0, 1, 1], + "773-bug": [0, 1, 1], + "773-ice": [0, 1, 1], + "773-dark": [0, 1, 1], + "773": [0, 1, 1], + "773-fairy": [0, 1, 1], + "773-water": [0, 1, 1], + "773-electric": [0, 1, 1], + "773-flying": [0, 1, 1], + "773-fire": [0, 1, 1], + "776": [0, 2, 2], + "777": [0, 1, 1], + "778-busted": [0, 1, 1], + "778-disguised": [0, 1, 1], + "779": [0, 1, 1], + "789": [1, 1, 1], + "790": [0, 1, 1], + "791": [1, 1, 1], + "792": [0, 1, 1], + "793": [0, 1, 1], + "797": [0, 1, 1], + "798": [0, 1, 1], + "800-dawn-wings": [0, 1, 1], + "800-dusk-mane": [0, 1, 1], + "800-ultra": [0, 1, 1], + "800": [0, 1, 1], + "802": [1, 1, 1], + "803": [0, 1, 1], + "804": [0, 1, 1], + "807": [0, 1, 1], + "808": [0, 1, 1], + "809": [0, 1, 1], + "816": [0, 1, 1], + "817": [0, 1, 1], + "818": [0, 1, 1], + "821": [0, 1, 1], + "822": [0, 1, 1], + "823": [0, 1, 1], + "829": [0, 1, 1], + "830": [0, 1, 1], + "835": [0, 1, 1], + "836": [0, 1, 1], + "850": [0, 1, 1], + "851": [0, 1, 1], + "854": [0, 1, 1], + "855": [0, 1, 1], + "856": [0, 1, 1], + "857": [0, 2, 2], + "858": [0, 1, 1], + "859": [0, 1, 1], + "860": [0, 1, 1], + "861": [0, 1, 1], + "862": [0, 1, 1], + "863": [0, 1, 1], + "864": [0, 1, 1], + "867": [0, 1, 1], + "872": [1, 1, 1], + "873": [1, 1, 1], + "876-female": [0, 1, 1], + "876": [0, 1, 1], + "877-hangry": [1, 1, 1], + "877": [1, 1, 1], + "880": [0, 1, 1], + "881": [0, 1, 1], + "882": [0, 1, 1], + "883": [0, 1, 1], + "884": [0, 1, 1], + "885": [1, 1, 1], + "886": [1, 1, 1], + "887": [1, 1, 1], + "888": [0, 1, 1], + "888-crowned": [0, 1, 1], + "889": [0, 1, 1], + "889-crowned": [0, 1, 1], + "890": [0, 1, 1], + "891": [1, 1, 1], + "892-rapid-strike": [1, 1, 1], + "892": [1, 1, 1], + "894": [0, 1, 1], + "895": [0, 1, 1], + "896": [1, 1, 1], + "897": [1, 1, 1], + "898": [1, 1, 1], + "898-ice": [1, 1, 1], + "898-shadow": [1, 1, 1], + "900": [0, 1, 1], + "901": [0, 1, 1], + "903": [0, 1, 1], + "909": [0, 1, 1], + "910": [0, 2, 2], + "911": [0, 1, 1], + "912": [0, 1, 1], + "913": [0, 1, 1], + "914": [0, 2, 2], + "919": [1, 1, 1], + "920": [1, 1, 1], + "924": [1, 1, 1], + "925-four": [1, 2, 2], + "925-three": [1, 2, 2], + "932": [0, 1, 1], + "933": [0, 1, 1], + "934": [0, 1, 1], + "935": [2, 2, 2], + "936": [2, 2, 2], + "937": [2, 2, 2], + "940": [0, 1, 1], + "941": [0, 1, 1], + "944": [0, 1, 1], + "945": [0, 1, 1], + "948": [0, 1, 1], + "949": [0, 1, 1], + "951": [0, 1, 1], + "952": [0, 2, 1], + "953": [0, 1, 1], + "954": [0, 1, 1], + "957": [1, 1, 1], + "958": [1, 1, 1], + "959": [1, 1, 1], + "962": [1, 1, 1], + "967": [0, 1, 1], + "968": [0, 2, 2], + "969": [0, 1, 1], + "970": [0, 1, 1], + "973": [1, 1, 1], + "974": [0, 1, 1], + "975": [0, 1, 1], + "978-curly": [0, 2, 2], + "978-droopy": [0, 2, 2], + "978-stretchy": [0, 1, 1], + "979": [1, 1, 1], + "981": [0, 1, 1], + "982": [0, 1, 1], + "982-three-segment": [0, 1, 1], + "987": [1, 1, 1], + "988": [0, 1, 1], + "993": [0, 1, 1], + "994": [0, 1, 1], + "995": [0, 1, 1], + "996": [0, 1, 1], + "997": [0, 1, 1], + "998": [0, 1, 1], + "999": [1, 1, 1], + "1000": [1, 1, 1], + "1001": [0, 1, 1], + "1003": [0, 1, 1], + "1004": [0, 1, 1], + "1006": [0, 2, 2], + "1007-apex-build": [0, 2, 2], + "1008-ultimate-mode": [1, 1, 1], + "2026": [0, 1, 1], + "2027": [0, 1, 1], + "2028": [0, 1, 1], + "2052": [0, 1, 1], + "2053": [0, 1, 1], + "2103": [0, 1, 1], + "4052": [0, 1, 1], + "4077": [0, 1, 1], + "4078": [0, 1, 1], + "4079": [0, 1, 1], + "4080": [2, 2, 2], + "4144": [0, 1, 1], + "4145": [0, 1, 1], + "4146": [0, 1, 1], + "4199": [2, 1, 1], + "4222": [0, 1, 1], + "4263": [0, 1, 1], + "4264": [0, 1, 1], + "4562": [0, 1, 1], + "6100": [0, 1, 1], + "6101": [0, 1, 1], + "6215": [0, 1, 1], + "6503": [0, 1, 1], + "6549": [0, 1, 1], + "6570": [0, 1, 1], + "6571": [0, 1, 1], + "6705": [0, 1, 1], + "6706": [0, 1, 1], + "6713": [0, 1, 1], + "female": { + "6215": [0, 1, 1] + } + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/_masterlist.json b/public/images/pokemon/variant/_masterlist.json index 175b56139a6..ac683d9544e 100644 --- a/public/images/pokemon/variant/_masterlist.json +++ b/public/images/pokemon/variant/_masterlist.json @@ -1813,669 +1813,5 @@ "593": [1, 1, 1], "6215": [0, 1, 1] } - }, - "exp": { - "3-mega": [0, 2, 2], - "6-mega-x": [0, 2, 2], - "6-mega-y": [0, 2, 2], - "80-mega": [0, 1, 1], - "94-mega": [2, 2, 2], - "127-mega": [0, 1, 1], - "130-mega": [0, 1, 1], - "142-mega": [0, 1, 1], - "150-mega-x": [0, 1, 1], - "150-mega-y": [0, 1, 1], - "181-mega": [0, 1, 2], - "212-mega": [1, 1, 2], - "229-mega": [0, 1, 1], - "248-mega": [0, 1, 1], - "257-mega": [0, 1, 1], - "282-mega": [0, 2, 2], - "302-mega": [0, 1, 1], - "303-mega": [0, 1, 1], - "306-mega": [1, 1, 1], - "308-mega": [0, 1, 1], - "310-mega": [0, 1, 1], - "334-mega": [0, 2, 1], - "354-mega": [0, 1, 1], - "359-mega": [0, 1, 1], - "362-mega": [0, 1, 1], - "373-mega": [0, 1, 1], - "376-mega": [0, 1, 1], - "380-mega": [0, 1, 1], - "381-mega": [0, 1, 1], - "382-primal": [0, 1, 1], - "383-primal": [0, 1, 1], - "384-mega": [0, 2, 1], - "428-mega": [0, 1, 1], - "445-mega": [1, 1, 1], - "448-mega": [1, 1, 1], - "475-mega": [0, 2, 2], - "531-mega": [0, 1, 1], - "653": [0, 1, 1], - "654": [0, 1, 1], - "655": [0, 1, 1], - "656": [0, 1, 1], - "657": [0, 1, 1], - "658": [0, 1, 1], - "658-ash": [0, 1, 1], - "664": [0, 1, 1], - "665": [0, 1, 1], - "666-archipelago": [0, 1, 1], - "666-continental": [0, 1, 1], - "666-elegant": [0, 1, 1], - "666-fancy": [0, 1, 1], - "666-garden": [0, 1, 1], - "666-high-plains": [0, 1, 1], - "666-icy-snow": [0, 1, 1], - "666-jungle": [0, 1, 1], - "666-marine": [0, 1, 1], - "666-meadow": [0, 1, 1], - "666-modern": [0, 1, 1], - "666-monsoon": [0, 1, 1], - "666-ocean": [0, 1, 1], - "666-poke-ball": [0, 1, 1], - "666-polar": [0, 1, 1], - "666-river": [0, 1, 1], - "666-sandstorm": [0, 1, 1], - "666-savanna": [0, 1, 1], - "666-sun": [0, 1, 1], - "666-tundra": [0, 1, 1], - "669-red": [0, 2, 2], - "669-blue": [0, 1, 1], - "669-white": [0, 1, 1], - "669-yellow": [0, 1, 1], - "669-orange": [0, 2, 2], - "670-white": [0, 1, 1], - "670-blue": [0, 1, 1], - "670-orange": [0, 1, 1], - "670-red": [0, 1, 1], - "670-yellow": [0, 1, 1], - "671-red": [0, 1, 2], - "671-blue": [0, 1, 2], - "671-yellow": [0, 1, 1], - "671-white": [0, 1, 2], - "671-orange": [0, 1, 2], - "672": [0, 1, 1], - "673": [0, 1, 1], - "676": [0, 1, 1], - "677": [0, 1, 1], - "678-female": [0, 1, 1], - "678": [0, 1, 1], - "682": [0, 1, 1], - "683": [0, 1, 1], - "684": [0, 1, 1], - "685": [0, 1, 1], - "688": [0, 1, 1], - "689": [0, 1, 1], - "690": [0, 1, 1], - "691": [0, 1, 1], - "696": [0, 1, 1], - "697": [0, 1, 1], - "698": [0, 1, 1], - "699": [0, 1, 1], - "700": [0, 1, 1], - "702": [0, 1, 1], - "703": [0, 1, 1], - "704": [0, 1, 1], - "705": [0, 1, 1], - "706": [0, 1, 1], - "708": [0, 1, 1], - "709": [0, 1, 1], - "710": [0, 1, 1], - "711": [1, 1, 1], - "712": [0, 1, 1], - "713": [0, 1, 1], - "714": [0, 1, 1], - "715": [0, 1, 1], - "716-active": [0, 1, 1], - "716-neutral": [0, 1, 1], - "717": [0, 2, 2], - "720-unbound": [1, 1, 1], - "720": [1, 1, 1], - "728": [0, 1, 1], - "729": [0, 1, 1], - "730": [0, 1, 1], - "734": [0, 1, 1], - "735": [0, 1, 1], - "742": [0, 2, 2], - "743": [0, 2, 2], - "747": [0, 2, 2], - "748": [0, 1, 1], - "751": [0, 1, 1], - "752": [0, 1, 1], - "753": [0, 1, 1], - "754": [0, 2, 2], - "755": [0, 1, 1], - "756": [0, 1, 1], - "761": [0, 1, 1], - "762": [0, 1, 1], - "763": [0, 1, 1], - "767": [0, 1, 1], - "768": [0, 1, 1], - "770": [0, 0, 0], - "771": [0, 2, 2], - "772": [0, 1, 1], - "773-fighting": [0, 1, 1], - "773-psychic": [0, 1, 1], - "773-poison": [0, 1, 1], - "773-ground": [0, 1, 1], - "773-ghost": [0, 1, 1], - "773-steel": [0, 1, 1], - "773-rock": [0, 1, 1], - "773-grass": [0, 1, 1], - "773-dragon": [0, 1, 1], - "773-bug": [0, 1, 1], - "773-ice": [0, 1, 1], - "773-dark": [0, 1, 1], - "773": [0, 1, 1], - "773-fairy": [0, 1, 1], - "773-water": [0, 1, 1], - "773-electric": [0, 1, 1], - "773-flying": [0, 1, 1], - "773-fire": [0, 1, 1], - "776": [0, 1, 1], - "777": [0, 1, 1], - "778-busted": [0, 1, 1], - "778-disguised": [0, 1, 1], - "779": [0, 1, 1], - "789": [1, 1, 1], - "790": [0, 1, 1], - "791": [2, 1, 1], - "792": [0, 1, 1], - "793": [0, 2, 2], - "797": [0, 1, 1], - "798": [0, 1, 1], - "800-dawn-wings": [0, 1, 1], - "800-dusk-mane": [0, 1, 1], - "800-ultra": [0, 1, 1], - "800": [0, 1, 1], - "802": [1, 1, 1], - "803": [0, 1, 1], - "804": [0, 1, 1], - "807": [0, 1, 1], - "808": [0, 1, 1], - "809": [0, 1, 1], - "816": [0, 1, 1], - "817": [0, 1, 1], - "818": [1, 1, 1], - "821": [0, 2, 2], - "822": [0, 1, 1], - "823": [0, 1, 1], - "829": [0, 1, 1], - "830": [0, 1, 1], - "835": [0, 1, 1], - "836": [0, 2, 2], - "850": [0, 1, 1], - "851": [0, 1, 1], - "854": [0, 1, 1], - "855": [0, 1, 1], - "856": [0, 1, 1], - "857": [0, 2, 2], - "858": [0, 1, 1], - "859": [0, 1, 1], - "860": [0, 1, 1], - "861": [0, 1, 1], - "862": [0, 1, 1], - "863": [0, 1, 1], - "864": [0, 1, 1], - "867": [0, 1, 1], - "872": [1, 1, 1], - "873": [1, 1, 1], - "876-female": [0, 1, 1], - "876": [0, 1, 1], - "877-hangry": [1, 1, 1], - "877": [1, 1, 1], - "880": [0, 1, 1], - "881": [0, 1, 1], - "882": [0, 2, 1], - "883": [0, 1, 1], - "884": [0, 1, 1], - "885": [1, 1, 1], - "886": [1, 1, 1], - "887": [1, 1, 1], - "888": [0, 1, 1], - "888-crowned": [0, 1, 1], - "889": [0, 1, 1], - "889-crowned": [0, 1, 1], - "890": [0, 2, 1], - "890-eternamax": [0, 1, 1], - "891": [1, 1, 1], - "892-rapid-strike": [1, 1, 1], - "892": [1, 1, 1], - "894": [0, 1, 1], - "895": [0, 1, 1], - "896": [1, 1, 1], - "897": [1, 1, 1], - "898": [1, 1, 1], - "898-ice": [1, 1, 1], - "898-shadow": [1, 1, 1], - "900": [0, 1, 1], - "901": [0, 1, 1], - "903": [0, 1, 1], - "909": [0, 1, 1], - "910": [0, 2, 2], - "911": [0, 2, 2], - "912": [0, 1, 2], - "913": [0, 1, 2], - "914": [0, 2, 1], - "919": [1, 1, 1], - "920": [1, 1, 1], - "924": [1, 1, 1], - "925-four": [1, 2, 2], - "925-three": [1, 2, 2], - "932": [0, 2, 2], - "933": [0, 2, 2], - "934": [0, 1, 1], - "935": [1, 1, 2], - "936": [2, 2, 2], - "937": [2, 2, 2], - "940": [0, 1, 1], - "941": [0, 1, 1], - "944": [0, 1, 1], - "945": [0, 1, 1], - "948": [0, 1, 1], - "949": [0, 1, 1], - "951": [0, 1, 1], - "952": [0, 1, 1], - "953": [0, 1, 1], - "954": [0, 1, 1], - "957": [2, 2, 2], - "958": [2, 2, 2], - "959": [2, 2, 2], - "962": [1, 1, 1], - "967": [0, 1, 1], - "968": [0, 1, 1], - "969": [0, 1, 1], - "970": [0, 1, 1], - "973": [1, 1, 1], - "974": [0, 1, 1], - "975": [0, 1, 1], - "978-curly": [0, 2, 2], - "978-droopy": [0, 2, 2], - "978-stretchy": [0, 2, 2], - "979": [2, 2, 2], - "981": [0, 1, 1], - "982": [0, 1, 1], - "982-three-segment": [0, 1, 1], - "987": [1, 1, 1], - "988": [0, 1, 2], - "993": [0, 1, 1], - "994": [0, 1, 2], - "995": [0, 1, 1], - "996": [0, 1, 1], - "997": [0, 2, 2], - "998": [0, 2, 2], - "999": [2, 1, 1], - "1000": [1, 1, 1], - "1001": [0, 1, 1], - "1003": [0, 1, 1], - "1004": [0, 1, 1], - "1006": [0, 2, 1], - "1007-apex-build": [0, 2, 2], - "1008-ultimate-mode": [1, 1, 1], - "2026": [0, 1, 1], - "2027": [0, 1, 1], - "2028": [0, 1, 1], - "2052": [0, 1, 1], - "2053": [0, 1, 0], - "2103": [0, 1, 1], - "4052": [0, 1, 1], - "4077": [0, 1, 1], - "4078": [0, 1, 1], - "4079": [0, 1, 1], - "4080": [2, 1, 1], - "4144": [0, 1, 1], - "4145": [0, 1, 1], - "4146": [0, 1, 1], - "4199": [2, 1, 1], - "4222": [0, 1, 1], - "4263": [0, 1, 1], - "4264": [0, 1, 1], - "4562": [0, 1, 1], - "6100": [0, 1, 1], - "6101": [0, 1, 1], - "6215": [0, 1, 1], - "6503": [0, 1, 1], - "6549": [0, 1, 1], - "6570": [0, 1, 1], - "6571": [0, 1, 1], - "6705": [0, 1, 1], - "6706": [0, 1, 1], - "6713": [0, 1, 1], - "female": { - "6215": [0, 1, 1] - }, - "back": { - "3-mega": [0, 2, 2], - "6-mega-x": [0, 2, 2], - "6-mega-y": [0, 1, 2], - "80-mega": [0, 1, 1], - "94-mega": [1, 1, 1], - "127-mega": [0, 1, 1], - "130-mega": [0, 1, 1], - "142-mega": [0, 1, 1], - "150-mega-x": [0, 1, 1], - "150-mega-y": [0, 1, 1], - "181-mega": [0, 1, 2], - "212-mega": [1, 2, 2], - "229-mega": [0, 1, 1], - "248-mega": [0, 1, 1], - "257-mega": [0, 1, 1], - "282-mega": [0, 1, 1], - "302-mega": [0, 1, 1], - "303-mega": [0, 1, 1], - "306-mega": [1, 1, 1], - "308-mega": [0, 1, 1], - "310-mega": [0, 1, 1], - "334-mega": [0, 1, 1], - "354-mega": [0, 1, 1], - "359-mega": [0, 1, 1], - "362-mega": [0, 1, 1], - "373-mega": [0, 1, 1], - "376-mega": [0, 1, 1], - "380-mega": [0, 1, 1], - "381-mega": [0, 1, 1], - "382-primal": [0, 1, 1], - "383-primal": [0, 1, 1], - "384-mega": [0, 1, 1], - "428-mega": [0, 1, 1], - "445-mega": [1, 1, 1], - "448-mega": [1, 1, 1], - "475-mega": [0, 2, 2], - "531-mega": [0, 1, 1], - "653": [0, 1, 1], - "654": [0, 1, 1], - "655": [0, 1, 1], - "656": [0, 1, 1], - "657": [0, 1, 1], - "658": [0, 1, 1], - "658-ash": [0, 1, 1], - "664": [0, 1, 1], - "665": [0, 1, 1], - "666-archipelago": [0, 1, 1], - "666-continental": [0, 1, 1], - "666-elegant": [0, 1, 1], - "666-fancy": [0, 1, 1], - "666-garden": [0, 1, 1], - "666-high-plains": [0, 1, 1], - "666-icy-snow": [0, 1, 1], - "666-jungle": [0, 1, 1], - "666-marine": [0, 1, 1], - "666-meadow": [0, 1, 1], - "666-modern": [0, 1, 1], - "666-monsoon": [0, 1, 1], - "666-ocean": [0, 1, 1], - "666-poke-ball": [0, 1, 1], - "666-polar": [0, 1, 1], - "666-river": [0, 1, 1], - "666-sandstorm": [0, 1, 1], - "666-savanna": [0, 1, 1], - "666-sun": [0, 1, 1], - "666-tundra": [0, 1, 1], - "669-red": [0, 2, 2], - "669-blue": [0, 2, 2], - "669-white": [0, 2, 2], - "669-yellow": [0, 2, 2], - "669-orange": [0, 2, 2], - "670-white": [0, 1, 1], - "670-blue": [0, 2, 2], - "670-orange": [0, 1, 1], - "670-red": [0, 1, 1], - "670-yellow": [0, 1, 1], - "671-red": [0, 1, 1], - "671-blue": [0, 1, 1], - "671-yellow": [0, 1, 1], - "671-white": [0, 1, 1], - "671-orange": [0, 1, 1], - "672": [0, 1, 1], - "673": [0, 1, 1], - "676": [0, 1, 1], - "677": [0, 1, 1], - "678-female": [0, 1, 1], - "678": [0, 1, 1], - "682": [0, 1, 1], - "683": [0, 1, 1], - "684": [0, 1, 1], - "685": [0, 1, 1], - "688": [0, 1, 1], - "689": [0, 1, 1], - "690": [0, 1, 1], - "691": [0, 1, 1], - "696": [0, 1, 1], - "697": [0, 1, 1], - "698": [0, 1, 1], - "699": [0, 2, 2], - "700": [0, 1, 1], - "702": [0, 1, 1], - "703": [0, 1, 1], - "704": [0, 1, 1], - "705": [0, 1, 1], - "706": [0, 1, 1], - "708": [0, 1, 1], - "709": [0, 1, 1], - "710": [0, 1, 1], - "711": [1, 1, 1], - "712": [0, 1, 1], - "713": [0, 1, 1], - "714": [0, 1, 1], - "715": [0, 1, 1], - "716-active": [0, 1, 1], - "716-neutral": [0, 1, 1], - "717": [0, 1, 1], - "720-unbound": [1, 1, 1], - "720": [1, 1, 1], - "728": [0, 1, 1], - "729": [0, 1, 1], - "730": [0, 1, 1], - "734": [0, 1, 1], - "735": [0, 1, 1], - "742": [0, 2, 2], - "743": [0, 2, 2], - "747": [0, 2, 2], - "748": [0, 1, 1], - "751": [0, 1, 1], - "752": [0, 1, 1], - "753": [0, 1, 1], - "754": [0, 2, 2], - "755": [0, 1, 1], - "756": [0, 1, 1], - "761": [0, 1, 1], - "762": [0, 1, 1], - "763": [0, 1, 1], - "767": [0, 1, 1], - "768": [0, 1, 1], - "771": [0, 1, 1], - "772": [0, 1, 1], - "773-fighting": [0, 1, 1], - "773-psychic": [0, 1, 1], - "773-poison": [0, 1, 1], - "773-ground": [0, 1, 1], - "773-ghost": [0, 1, 1], - "773-steel": [0, 1, 1], - "773-rock": [0, 1, 1], - "773-grass": [0, 1, 1], - "773-dragon": [0, 1, 1], - "773-bug": [0, 1, 1], - "773-ice": [0, 1, 1], - "773-dark": [0, 1, 1], - "773": [0, 1, 1], - "773-fairy": [0, 1, 1], - "773-water": [0, 1, 1], - "773-electric": [0, 1, 1], - "773-flying": [0, 1, 1], - "773-fire": [0, 1, 1], - "776": [0, 2, 2], - "777": [0, 1, 1], - "778-busted": [0, 1, 1], - "778-disguised": [0, 1, 1], - "779": [0, 1, 1], - "789": [1, 1, 1], - "790": [0, 1, 1], - "791": [1, 1, 1], - "792": [0, 1, 1], - "793": [0, 1, 1], - "797": [0, 1, 1], - "798": [0, 1, 1], - "800-dawn-wings": [0, 1, 1], - "800-dusk-mane": [0, 1, 1], - "800-ultra": [0, 1, 1], - "800": [0, 1, 1], - "802": [1, 1, 1], - "803": [0, 1, 1], - "804": [0, 1, 1], - "807": [0, 1, 1], - "808": [0, 1, 1], - "809": [0, 1, 1], - "816": [0, 1, 1], - "817": [0, 1, 1], - "818": [0, 1, 1], - "821": [0, 1, 1], - "822": [0, 1, 1], - "823": [0, 1, 1], - "829": [0, 1, 1], - "830": [0, 1, 1], - "835": [0, 1, 1], - "836": [0, 1, 1], - "850": [0, 1, 1], - "851": [0, 1, 1], - "854": [0, 1, 1], - "855": [0, 1, 1], - "856": [0, 1, 1], - "857": [0, 2, 2], - "858": [0, 1, 1], - "859": [0, 1, 1], - "860": [0, 1, 1], - "861": [0, 1, 1], - "862": [0, 1, 1], - "863": [0, 1, 1], - "864": [0, 1, 1], - "867": [0, 1, 1], - "872": [1, 1, 1], - "873": [1, 1, 1], - "876-female": [0, 1, 1], - "876": [0, 1, 1], - "877-hangry": [1, 1, 1], - "877": [1, 1, 1], - "880": [0, 1, 1], - "881": [0, 1, 1], - "882": [0, 1, 1], - "883": [0, 1, 1], - "884": [0, 1, 1], - "885": [1, 1, 1], - "886": [1, 1, 1], - "887": [1, 1, 1], - "888": [0, 1, 1], - "888-crowned": [0, 1, 1], - "889": [0, 1, 1], - "889-crowned": [0, 1, 1], - "890": [0, 1, 1], - "891": [1, 1, 1], - "892-rapid-strike": [1, 1, 1], - "892": [1, 1, 1], - "894": [0, 1, 1], - "895": [0, 1, 1], - "896": [1, 1, 1], - "897": [1, 1, 1], - "898": [1, 1, 1], - "898-ice": [1, 1, 1], - "898-shadow": [1, 1, 1], - "900": [0, 1, 1], - "901": [0, 1, 1], - "903": [0, 1, 1], - "909": [0, 1, 1], - "910": [0, 2, 2], - "911": [0, 1, 1], - "912": [0, 1, 1], - "913": [0, 1, 1], - "914": [0, 2, 2], - "919": [1, 1, 1], - "920": [1, 1, 1], - "924": [1, 1, 1], - "925-four": [1, 2, 2], - "925-three": [1, 2, 2], - "932": [0, 1, 1], - "933": [0, 1, 1], - "934": [0, 1, 1], - "935": [2, 2, 2], - "936": [2, 2, 2], - "937": [2, 2, 2], - "940": [0, 1, 1], - "941": [0, 1, 1], - "944": [0, 1, 1], - "945": [0, 1, 1], - "948": [0, 1, 1], - "949": [0, 1, 1], - "951": [0, 1, 1], - "952": [0, 2, 1], - "953": [0, 1, 1], - "954": [0, 1, 1], - "957": [1, 1, 1], - "958": [1, 1, 1], - "959": [1, 1, 1], - "962": [1, 1, 1], - "967": [0, 1, 1], - "968": [0, 2, 2], - "969": [0, 1, 1], - "970": [0, 1, 1], - "973": [1, 1, 1], - "974": [0, 1, 1], - "975": [0, 1, 1], - "978-curly": [0, 2, 2], - "978-droopy": [0, 2, 2], - "978-stretchy": [0, 1, 1], - "979": [1, 1, 1], - "981": [0, 1, 1], - "982": [0, 1, 1], - "982-three-segment": [0, 1, 1], - "987": [1, 1, 1], - "988": [0, 1, 1], - "993": [0, 1, 1], - "994": [0, 1, 1], - "995": [0, 1, 1], - "996": [0, 1, 1], - "997": [0, 1, 1], - "998": [0, 1, 1], - "999": [1, 1, 1], - "1000": [1, 1, 1], - "1001": [0, 1, 1], - "1003": [0, 1, 1], - "1004": [0, 1, 1], - "1006": [0, 2, 2], - "1007-apex-build": [0, 2, 2], - "1008-ultimate-mode": [1, 1, 1], - "2026": [0, 1, 1], - "2027": [0, 1, 1], - "2028": [0, 1, 1], - "2052": [0, 1, 1], - "2053": [0, 1, 1], - "2103": [0, 1, 1], - "4052": [0, 1, 1], - "4077": [0, 1, 1], - "4078": [0, 1, 1], - "4079": [0, 1, 1], - "4080": [2, 2, 2], - "4144": [0, 1, 1], - "4145": [0, 1, 1], - "4146": [0, 1, 1], - "4199": [2, 1, 1], - "4222": [0, 1, 1], - "4263": [0, 1, 1], - "4264": [0, 1, 1], - "4562": [0, 1, 1], - "6100": [0, 1, 1], - "6101": [0, 1, 1], - "6215": [0, 1, 1], - "6503": [0, 1, 1], - "6549": [0, 1, 1], - "6570": [0, 1, 1], - "6571": [0, 1, 1], - "6705": [0, 1, 1], - "6706": [0, 1, 1], - "6713": [0, 1, 1], - "female": { - "6215": [0, 1, 1] - } - } } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/698.json b/public/images/pokemon/variant/exp/698.json deleted file mode 100644 index daf9b8c6f84..00000000000 --- a/public/images/pokemon/variant/exp/698.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "1": { - "cbaa84": "44827c", - "b3747e": "4b7465", - "eeffbf": "cdffb5", - "dcffb2": "8eeab9", - "ffbfca": "43bf8d", - "b7ffb2": "72d8ce", - "fff2b2": "9bffa9", - "85b4cc": "cf755d", - "a6e1ff": "efab87", - "101010": "101010", - "cacaca": "cacaca", - "537180": "b04f4b", - "2eaeec": "4dc796", - "1f75a0": "29988e", - "fdfdfd": "fdfdfd", - "d197a1": "d197a1", - "ffdce6": "ffdce6", - "217aa6": "7f99e1", - "30b2f2": "b5dcff", - "f9f9f9": "e6e3b4", - "c0c0c0": "d7cca0" - }, - "2": { - "cbaa84": "cc78db", - "b3747e": "c452a6", - "eeffbf": "ed9ff2", - "dcffb2": "d7bbf4", - "ffbfca": "faccff", - "b7ffb2": "dceeff", - "fff2b2": "eb88b9", - "85b4cc": "654a8a", - "a6e1ff": "936daa", - "101010": "101010", - "cacaca": "cacaca", - "537180": "392d65", - "2eaeec": "ad4e6e", - "1f75a0": "8d2656", - "fdfdfd": "fdfdfd", - "d197a1": "d197a1", - "ffdce6": "ffdce6", - "217aa6": "efaa51", - "30b2f2": "ffd169", - "f9f9f9": "373453", - "c0c0c0": "282747" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/703.json b/public/images/pokemon/variant/exp/703.json deleted file mode 100644 index c024feb1b30..00000000000 --- a/public/images/pokemon/variant/exp/703.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "1": { - "535763": "292638", - "306090": "c35b2a", - "c3c7d3": "68638e", - "88aacc": "e67c37", - "fefefe": "fefefe", - "a3a7b3": "4d496b", - "737783": "37344e", - "101010": "101010", - "bbddff": "ffa633", - "1fbfdf": "ff9b44", - "5f6060": "e6ac60", - "fcfefe": "ffeed6", - "bfbbbb": "ffd3a1" - }, - "2": { - "535763": "976ba9", - "306090": "a03c69", - "c3c7d3": "faecff", - "88aacc": "e25493", - "fefefe": "ffe2ee", - "a3a7b3": "e4cdf9", - "737783": "cca1db", - "101010": "101010", - "bbddff": "f591bd", - "1fbfdf": "de5f8e", - "5f6060": "5a3d84", - "fcfefe": "a473bf", - "bfbbbb": "8359a7" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/708.json b/public/images/pokemon/variant/exp/708.json deleted file mode 100644 index b32bbb79cd9..00000000000 --- a/public/images/pokemon/variant/exp/708.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "1": { - "101010": "101010", - "2b2a3a": "722023", - "603d2b": "36384f", - "215738": "4d362e", - "48484a": "a14743", - "c18760": "7c808c", - "3fa76c": "907f76", - "915e45": "575a6a", - "0b0c0b": "0b0c0b", - "da585b": "5996d2", - "ff8c8f": "87d1ff" - }, - "2": { - "101010": "101010", - "2b2a3a": "6f5f80", - "603d2b": "31161d", - "215738": "a94079", - "48484a": "9c92a4", - "c18760": "7e5658", - "3fa76c": "da7ea8", - "915e45": "56323a", - "0b0c0b": "0b0c0b", - "da585b": "e18933", - "ff8c8f": "ffc875" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/714.json b/public/images/pokemon/variant/exp/714.json deleted file mode 100644 index 018366c5381..00000000000 --- a/public/images/pokemon/variant/exp/714.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "1": { - "6a3f73": "731338", - "bd70cc": "a42c54", - "101010": "101010", - "bfacbf": "7047ba", - "8e5499": "8e1d4b", - "f2daf2": "8d7be3", - "404040": "202558", - "665c66": "2f386b", - "ccb43d": "ff8a58", - "f8f8f8": "8d7be3", - "595959": "2f386b", - "ffe14c": "ffc182", - "000000": "101010" - }, - "2": { - "6a3f73": "5f151c", - "bd70cc": "c24430", - "101010": "101010", - "bfacbf": "f9e8dd", - "8e5499": "882c27", - "f2daf2": "f8f8f8", - "404040": "5b1922", - "665c66": "7c2928", - "ccb43d": "33d8d0", - "f8f8f8": "f8f8f8", - "595959": "7c2928", - "ffe14c": "49ffcd", - "000000": "101010" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/698.json b/public/images/pokemon/variant/exp/back/698.json deleted file mode 100644 index af193c3bc0c..00000000000 --- a/public/images/pokemon/variant/exp/back/698.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "1": { - "b3747e": "4b7465", - "ffbfca": "43bf8d", - "fff2b2": "9bffa9", - "537180": "b04f4b", - "a6e1ff": "efab87", - "101010": "101010", - "85b4cc": "cf755d", - "217aa6": "7f99e1", - "30b2f2": "b5dcff", - "fdfdfd": "fdfdfd", - "c0c0c0": "d7cca0", - "cacaca": "cacaca", - "cbaa84": "44827c", - "dcffb2": "8eeab9", - "eeffbf": "cdffb5", - "b7ffb2": "72d8ce" - }, - "2": { - "b3747e": "c452a6", - "ffbfca": "faccff", - "fff2b2": "eb88b9", - "537180": "392d65", - "a6e1ff": "936daa", - "101010": "101010", - "85b4cc": "654a8a", - "217aa6": "efaa51", - "30b2f2": "ffd169", - "fdfdfd": "fdfdfd", - "c0c0c0": "282747", - "cacaca": "cacaca", - "cbaa84": "cc78db", - "dcffb2": "d7bbf4", - "eeffbf": "ed9ff2", - "b7ffb2": "dceeff" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/703.json b/public/images/pokemon/variant/exp/back/703.json deleted file mode 100644 index 376abd466d2..00000000000 --- a/public/images/pokemon/variant/exp/back/703.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "1": { - "306090": "c35b2a", - "88aacc": "e67c37", - "fefefe": "fefefe", - "535763": "292638", - "a3a7b3": "4d496b", - "737783": "37344e", - "bbddff": "ffa633", - "101010": "101010", - "5f6060": "e6ac60", - "bfbbbb": "ffd3a1", - "fcfefe": "ffeed6" - }, - "2": { - "306090": "a03c69", - "88aacc": "e25493", - "fefefe": "ffe2ee", - "535763": "976ba9", - "a3a7b3": "e4cdf9", - "737783": "cca1db", - "bbddff": "f591bd", - "101010": "101010", - "5f6060": "5a3d84", - "bfbbbb": "8359a7", - "fcfefe": "a473bf" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/708.json b/public/images/pokemon/variant/exp/back/708.json deleted file mode 100644 index 7d41d6d24b0..00000000000 --- a/public/images/pokemon/variant/exp/back/708.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "1": { - "1a1a1c": "1a1a1c", - "686665": "646085", - "103222": "802c26", - "221b17": "221b17", - "090606": "090606", - "4ab38e": "a14743", - "38956f": "a14743", - "ab9074": "7c808c", - "4e4e4e": "494e5b", - "917860": "7c808c", - "424244": "2b303c", - "78604c": "575a6a", - "6b5442": "40435a", - "5f4939": "36384f", - "4f2a09": "292929", - "6c4513": "36384f", - "353638": "353638" - }, - "2": { - "1a1a1c": "1a1a1c", - "686665": "ccc3cf", - "103222": "a94079", - "221b17": "221b17", - "090606": "090606", - "4ab38e": "da7ea8", - "38956f": "da7ea8", - "ab9074": "7e5658", - "4e4e4e": "9c92a4", - "917860": "7e5658", - "424244": "6f5f80", - "78604c": "56323a", - "6b5442": "47232b", - "5f4939": "31161d", - "4f2a09": "250e14", - "6c4513": "31161d", - "353638": "57496b" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/714.json b/public/images/pokemon/variant/exp/back/714.json deleted file mode 100644 index 22933e71338..00000000000 --- a/public/images/pokemon/variant/exp/back/714.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "1": { - "101010": "101010", - "6a3f73": "500a25", - "bd70cc": "a42c54", - "8e5499": "8e1d4b", - "404040": "202558", - "595959": "2f386b", - "bfacbf": "8d7be3", - "665c66": "2f386b", - "f2daf2": "8d7be3" - }, - "2": { - "101010": "101010", - "6a3f73": "5f151c", - "bd70cc": "c24430", - "8e5499": "882c27", - "404040": "5b1922", - "595959": "7c2928", - "bfacbf": "f9e8dd", - "665c66": "7c2928", - "f2daf2": "f9e8dd" - } -} \ No newline at end of file diff --git a/scripts/find_sprite_variant_mismatches.py b/scripts/find_sprite_variant_mismatches.py index 483695fdb66..b26058c2de3 100644 --- a/scripts/find_sprite_variant_mismatches.py +++ b/scripts/find_sprite_variant_mismatches.py @@ -22,6 +22,9 @@ from typing import Literal as L MASTERLIST_PATH = os.path.join( os.path.dirname(os.path.dirname(__file__)), "public", "images", "pokemon", "variant", "_masterlist.json" ) +EXP_MASTERLIST_PATH = os.path.join( + os.path.dirname(os.path.dirname(__file__)), "public", "images", "pokemon", "variant", "_exp_masterlist.json" +) DEFAULT_OUTPUT_PATH = "sprite-mismatches.csv" @@ -93,6 +96,7 @@ if __name__ == "__main__": help=f"The path to a file to save the output file. If not specified, will write to {DEFAULT_OUTPUT_PATH}.", ) p.add_argument("--masterlist", default=MASTERLIST_PATH, help=f"The path to the masterlist file to validate. Defaults to {MASTERLIST_PATH}.") + p.add_argument("--exp-masterlist", default=EXP_MASTERLIST_PATH, help=f"The path to the exp masterlist file to validate against. Defaults to {EXP_MASTERLIST_PATH}.") args = p.parse_args() mismatches = make_mismatch_sprite_list(args.masterlist) write_mismatch_csv(args.output, mismatches) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index f676ba63306..acc8dafdd35 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -106,8 +106,8 @@ import PokemonInfoContainer from "#app/ui/pokemon-info-container"; import { biomeDepths, getBiomeName } from "#app/data/balance/biomes"; import { SceneBase } from "#app/scene-base"; import CandyBar from "#app/ui/candy-bar"; -import type { Variant, VariantSet } from "#app/data/variant"; -import { variantColorCache, variantData } from "#app/data/variant"; +import type { Variant } from "#app/sprites/variant"; +import { variantData, clearVariantData } from "#app/sprites/variant"; import type { Localizable } from "#app/interfaces/locales"; import Overrides from "#app/overrides"; import { InputsController } from "#app/inputs-controller"; @@ -170,6 +170,8 @@ import { StatusEffect } from "#enums/status-effect"; import { initGlobalScene } from "#app/global-scene"; import { ShowAbilityPhase } from "#app/phases/show-ability-phase"; import { HideAbilityPhase } from "#app/phases/hide-ability-phase"; +import { expSpriteKeys } from "./sprites/sprite-keys"; +import { hasExpSprite } from "./sprites/sprite-utils"; import { timedEventManager } from "./global-event-manager"; export const bypassLogin = import.meta.env.VITE_BYPASS_LOGIN === "1"; @@ -182,8 +184,6 @@ const OPP_IVS_OVERRIDE_VALIDATED: number[] = ( export const startingWave = Overrides.STARTING_WAVE_OVERRIDE || 1; -const expSpriteKeys: string[] = []; - export let starterColors: StarterColors; interface StarterColors { [key: string]: [string, string]; @@ -409,7 +409,7 @@ export default class BattleScene extends SceneBase { } const variant = atlasPath.includes("variant/") || /_[0-3]$/.test(atlasPath); if (experimental) { - experimental = this.hasExpSprite(key); + experimental = hasExpSprite(key); } if (variant) { atlasPath = atlasPath.replace("variant/", ""); @@ -421,35 +421,6 @@ export default class BattleScene extends SceneBase { ); } - /** - * Load the variant assets for the given sprite and stores them in {@linkcode variantColorCache} - */ - public async loadPokemonVariantAssets(spriteKey: string, fileRoot: string, variant?: Variant): Promise { - const useExpSprite = this.experimentalSprites && this.hasExpSprite(spriteKey); - if (useExpSprite) { - fileRoot = `exp/${fileRoot}`; - } - let variantConfig = variantData; - fileRoot.split("/").map(p => (variantConfig ? (variantConfig = variantConfig[p]) : null)); - const variantSet = variantConfig as VariantSet; - - return new Promise(resolve => { - if (variantSet && variant !== undefined && variantSet[variant] === 1) { - if (variantColorCache.hasOwnProperty(spriteKey)) { - return resolve(); - } - this.cachedFetch(`./images/pokemon/variant/${fileRoot}.json`) - .then(res => res.json()) - .then(c => { - variantColorCache[spriteKey] = c; - resolve(); - }); - } else { - resolve(); - } - }); - } - async preload() { if (DEBUG_RNG) { const originalRealInRange = Phaser.Math.RND.realInRange; @@ -783,53 +754,36 @@ export default class BattleScene extends SceneBase { } async initExpSprites(): Promise { - if (expSpriteKeys.length) { + if (expSpriteKeys.size > 0) { return; } this.cachedFetch("./exp-sprites.json") .then(res => res.json()) .then(keys => { if (Array.isArray(keys)) { - expSpriteKeys.push(...keys); + for (const key of keys) { + expSpriteKeys.add(key); + } } Promise.resolve(); }); } + /** + * Initialize the variant data. + * If experimental sprites are enabled, their entries are replaced via this method. + */ async initVariantData(): Promise { - for (const key of Object.keys(variantData)) { - delete variantData[key]; + clearVariantData(); + const otherVariantData = await this.cachedFetch("./images/pokemon/variant/_masterlist.json").then(r => r.json()); + for (const k of Object.keys(otherVariantData)) { + variantData[k] = otherVariantData[k]; } - await this.cachedFetch("./images/pokemon/variant/_masterlist.json") - .then(res => res.json()) - .then(v => { - for (const k of Object.keys(v)) { - variantData[k] = v[k]; - } - if (this.experimentalSprites) { - const expVariantData = variantData["exp"]; - const traverseVariantData = (keys: string[]) => { - let variantTree = variantData; - let expTree = expVariantData; - keys.map((k: string, i: number) => { - if (i < keys.length - 1) { - variantTree = variantTree[k]; - expTree = expTree[k]; - } else if (variantTree.hasOwnProperty(k) && expTree.hasOwnProperty(k)) { - if (["back", "female"].includes(k)) { - traverseVariantData(keys.concat(k)); - } else { - variantTree[k] = expTree[k]; - } - } - }); - }; - for (const ek of Object.keys(expVariantData)) { - traverseVariantData([ek]); - } - } - Promise.resolve(); - }); + if (!this.experimentalSprites) { + return; + } + const expVariantData = await this.cachedFetch("./images/pokemon/variant/_exp_masterlist.json").then(r => r.json()); + Utils.deepMergeObjects(variantData, expVariantData); } cachedFetch(url: string, init?: RequestInit): Promise { @@ -843,48 +797,15 @@ export default class BattleScene extends SceneBase { return fetch(url, init); } - initStarterColors(): Promise { - return new Promise(resolve => { - if (starterColors) { - return resolve(); - } - - this.cachedFetch("./starter-colors.json") - .then(res => res.json()) - .then(sc => { - starterColors = {}; - for (const key of Object.keys(sc)) { - starterColors[key] = sc[key]; - } - - resolve(); - }); - }); - } - - hasExpSprite(key: string): boolean { - const keyMatch = /^pkmn__?(back__)?(shiny__)?(female__)?(\d+)(\-.*?)?(?:_[1-3])?$/g.exec(key); - if (!keyMatch) { - return false; + async initStarterColors(): Promise { + if (starterColors) { + return; } - - let k = keyMatch[4]!; - if (keyMatch[2]) { - k += "s"; + const sc = await this.cachedFetch("./starter-colors.json").then(res => res.json()); + starterColors = {}; + for (const key of Object.keys(sc)) { + starterColors[key] = sc[key]; } - if (keyMatch[1]) { - k += "b"; - } - if (keyMatch[3]) { - k += "f"; - } - if (keyMatch[5]) { - k += keyMatch[5]; - } - if (!expSpriteKeys.includes(k)) { - return false; - } - return true; } public getPlayerParty(): PlayerPokemon[] { diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index 76d07bf01ba..f3a06242a13 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -58,7 +58,7 @@ import { BattleEndPhase } from "#app/phases/battle-end-phase"; import { GameOverPhase } from "#app/phases/game-over-phase"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import { PartyExpPhase } from "#app/phases/party-exp-phase"; -import type { Variant } from "#app/data/variant"; +import type { Variant } from "#app/sprites/variant"; import { StatusEffect } from "#enums/status-effect"; import { globalScene } from "#app/global-scene"; import { getPokemonSpecies } from "#app/data/pokemon-species"; diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 929d632eb0b..a8942a39880 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -26,11 +26,12 @@ import { pokemonSpeciesLevelMoves, } from "#app/data/balance/pokemon-level-moves"; import type { Stat } from "#enums/stat"; -import type { Variant, VariantSet } from "#app/data/variant"; -import { variantData } from "#app/data/variant"; +import type { Variant, VariantSet } from "#app/sprites/variant"; +import { variantData } from "#app/sprites/variant"; import { speciesStarterCosts, POKERUS_STARTER_COUNT } from "#app/data/balance/starters"; import { SpeciesFormKey } from "#enums/species-form-key"; import { starterPassiveAbilities } from "#app/data/balance/passives"; +import { loadPokemonVariantAssets } from "#app/sprites/pokemon-sprite"; export enum Region { NORMAL, @@ -387,6 +388,7 @@ export abstract class PokemonSpeciesForm { return `${/_[1-3]$/.test(spriteId) ? "variant/" : ""}${spriteId}`; } + /** Compute the sprite ID of the pokemon form. */ getSpriteId(female: boolean, formIndex?: number, shiny?: boolean, variant = 0, back?: boolean): string { if (formIndex === undefined || this instanceof PokemonForm) { formIndex = this.formIndex; @@ -394,7 +396,9 @@ export abstract class PokemonSpeciesForm { const formSpriteKey = this.getFormSpriteKey(formIndex); const showGenderDiffs = - this.genderDiffs && female && ![SpeciesFormKey.MEGA, SpeciesFormKey.GIGANTAMAX].find(k => formSpriteKey === k); + this.genderDiffs && + female && + ![SpeciesFormKey.MEGA, SpeciesFormKey.GIGANTAMAX].includes(formSpriteKey as SpeciesFormKey); const baseSpriteKey = `${showGenderDiffs ? "female__" : ""}${this.speciesId}${formSpriteKey ? `-${formSpriteKey}` : ""}`; @@ -585,18 +589,19 @@ export abstract class PokemonSpeciesForm { return true; } - loadAssets( + async loadAssets( female: boolean, formIndex?: number, - shiny?: boolean, + shiny = false, variant?: Variant, - startLoad?: boolean, - back?: boolean, + startLoad = false, + back = false, ): Promise { - return new Promise(resolve => { - const spriteKey = this.getSpriteKey(female, formIndex, shiny, variant, back); - globalScene.loadPokemonAtlas(spriteKey, this.getSpriteAtlasPath(female, formIndex, shiny, variant, back)); - globalScene.load.audio(`${this.getCryKey(formIndex)}`, `audio/${this.getCryKey(formIndex)}.m4a`); + const spriteKey = this.getSpriteKey(female, formIndex, shiny, variant, back); + globalScene.loadPokemonAtlas(spriteKey, this.getSpriteAtlasPath(female, formIndex, shiny, variant, back)); + globalScene.load.audio(this.getCryKey(formIndex), `audio/${this.getCryKey(formIndex)}.m4a`); + + return new Promise(resolve => { globalScene.load.once(Phaser.Loader.Events.COMPLETE, () => { const originalWarn = console.warn; // Ignore warnings for missing frames, because there will be a lot @@ -621,7 +626,9 @@ export abstract class PokemonSpeciesForm { const spritePath = this.getSpriteAtlasPath(female, formIndex, shiny, variant, back) .replace("variant/", "") .replace(/_[1-3]$/, ""); - globalScene.loadPokemonVariantAssets(spriteKey, spritePath, variant).then(() => resolve()); + if (!Utils.isNullOrUndefined(variant)) { + loadPokemonVariantAssets(spriteKey, spritePath, variant).then(() => resolve()); + } }); if (startLoad) { if (!globalScene.load.isLoading()) { diff --git a/src/data/trainers/trainer-config.ts b/src/data/trainers/trainer-config.ts index a5ba19290fe..5fab70971ec 100644 --- a/src/data/trainers/trainer-config.ts +++ b/src/data/trainers/trainer-config.ts @@ -2236,12 +2236,7 @@ export const trainerConfigs: TrainerConfigs = { Species.PHANTUMP, Species.PUMPKABOO, ], - [TrainerPoolTier.RARE]: [ - Species.SNEASEL, - Species.LITWICK, - Species.PAWNIARD, - Species.NOIBAT, - ], + [TrainerPoolTier.RARE]: [Species.SNEASEL, Species.LITWICK, Species.PAWNIARD, Species.NOIBAT], [TrainerPoolTier.SUPER_RARE]: [Species.SLIGGOO, Species.HISUI_SLIGGOO, Species.HISUI_AVALUGG], }), [TrainerType.BRYONY]: new TrainerConfig(++t) diff --git a/src/data/variant.ts b/src/data/variant.ts deleted file mode 100644 index 13c11b0bb40..00000000000 --- a/src/data/variant.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { VariantTier } from "#app/enums/variant-tier"; - -export type Variant = 0 | 1 | 2; - -export type VariantSet = [Variant, Variant, Variant]; - -export const variantData: any = {}; - -export const variantColorCache = {}; - -export function getVariantTint(variant: Variant): number { - switch (variant) { - case 0: - return 0xf8c020; - case 1: - return 0x20f8f0; - case 2: - return 0xe81048; - } -} - -export function getVariantIcon(variant: Variant): number { - switch (variant) { - case 0: - return VariantTier.STANDARD; - case 1: - return VariantTier.RARE; - case 2: - return VariantTier.EPIC; - } -} diff --git a/src/field/anims.ts b/src/field/anims.ts index cd6209dddff..eb895c2d8f9 100644 --- a/src/field/anims.ts +++ b/src/field/anims.ts @@ -1,6 +1,6 @@ import { globalScene } from "#app/global-scene"; import { PokeballType } from "#enums/pokeball"; -import type { Variant } from "#app/data/variant"; +import type { Variant } from "#app/sprites/variant"; import { getFrameMs, randGauss } from "#app/utils"; export function addPokeballOpenParticles(x: number, y: number, pokeballType: PokeballType): void { diff --git a/src/field/mystery-encounter-intro.ts b/src/field/mystery-encounter-intro.ts index 649a969d415..e1fb0c37074 100644 --- a/src/field/mystery-encounter-intro.ts +++ b/src/field/mystery-encounter-intro.ts @@ -4,9 +4,10 @@ import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounte import type { Species } from "#enums/species"; import { isNullOrUndefined } from "#app/utils"; import { getSpriteKeysFromSpecies } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; -import type { Variant } from "#app/data/variant"; +import type { Variant } from "#app/sprites/variant"; import { doShinySparkleAnim } from "#app/field/anims"; import PlayAnimationConfig = Phaser.Types.Animations.PlayAnimationConfig; +import { loadPokemonVariantAssets } from "#app/sprites/pokemon-sprite"; type KnownFileRoot = | "arenas" @@ -233,8 +234,8 @@ export default class MysteryEncounterIntroVisuals extends Phaser.GameObjects.Con this.spriteConfigs.forEach(config => { if (config.isPokemon) { globalScene.loadPokemonAtlas(config.spriteKey, config.fileRoot); - if (config.isShiny) { - shinyPromises.push(globalScene.loadPokemonVariantAssets(config.spriteKey, config.fileRoot, config.variant)); + if (config.isShiny && !isNullOrUndefined(config.variant)) { + shinyPromises.push(loadPokemonVariantAssets(config.spriteKey, config.fileRoot, config.variant)); } } else if (config.isItem) { globalScene.loadAtlas("items", ""); diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 7d856696188..72da3f1ed6f 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -2,9 +2,9 @@ import Phaser from "phaser"; import type { AnySound } from "#app/battle-scene"; import type BattleScene from "#app/battle-scene"; import { globalScene } from "#app/global-scene"; -import type { Variant, VariantSet } from "#app/data/variant"; -import { variantColorCache } from "#app/data/variant"; -import { variantData } from "#app/data/variant"; +import type { Variant, VariantSet } from "#app/sprites/variant"; +import { populateVariantColors, variantColorCache } from "#app/sprites/variant"; +import { variantData } from "#app/sprites/variant"; import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo, @@ -263,7 +263,9 @@ import { Nature } from "#enums/nature"; import { StatusEffect } from "#enums/status-effect"; import { doShinySparkleAnim } from "#app/field/anims"; import { MoveFlags } from "#enums/MoveFlags"; +import { hasExpSprite } from "#app/sprites/sprite-utils"; import { timedEventManager } from "#app/global-event-manager"; +import { loadMoveAnimations } from "#app/sprites/pokemon-asset-loader"; import { ResetStatusPhase } from "#app/phases/reset-status-phase"; export enum LearnMoveSituation { @@ -696,115 +698,79 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { abstract getBattlerIndex(): BattlerIndex; - loadAssets(ignoreOverride = true): Promise { - return new Promise(resolve => { - const moveIds = this.getMoveset().map(m => m.getMove().id); - Promise.allSettled(moveIds.map(m => initMoveAnim(m))).then(() => { - loadMoveAnimAssets(moveIds); - this.getSpeciesForm().loadAssets( - this.getGender() === Gender.FEMALE, - this.formIndex, - this.shiny, - this.variant, - ); - if (this.isPlayer() || this.getFusionSpeciesForm()) { - globalScene.loadPokemonAtlas( - this.getBattleSpriteKey(true, ignoreOverride), - this.getBattleSpriteAtlasPath(true, ignoreOverride), - ); - } - if (this.getFusionSpeciesForm()) { - this.getFusionSpeciesForm().loadAssets( - this.getFusionGender() === Gender.FEMALE, - this.fusionFormIndex, - this.fusionShiny, - this.fusionVariant, - ); - globalScene.loadPokemonAtlas( - this.getFusionBattleSpriteKey(true, ignoreOverride), - this.getFusionBattleSpriteAtlasPath(true, ignoreOverride), - ); - } - globalScene.load.once(Phaser.Loader.Events.COMPLETE, () => { - if (this.isPlayer()) { - const originalWarn = console.warn; - // Ignore warnings for missing frames, because there will be a lot - console.warn = () => {}; - const battleFrameNames = globalScene.anims.generateFrameNames( - this.getBattleSpriteKey(), - { zeroPad: 4, suffix: ".png", start: 1, end: 400 }, - ); - console.warn = originalWarn; - if (!globalScene.anims.exists(this.getBattleSpriteKey())) { - globalScene.anims.create({ - key: this.getBattleSpriteKey(), - frames: battleFrameNames, - frameRate: 10, - repeat: -1, - }); - } - } - this.playAnim(); - const updateFusionPaletteAndResolve = () => { - this.updateFusionPalette(); - if (this.summonData?.speciesForm) { - this.updateFusionPalette(true); - } - resolve(); - }; - if (this.shiny) { - const populateVariantColors = ( - isBackSprite = false, - ): Promise => { - return new Promise(async resolve => { - const battleSpritePath = this.getBattleSpriteAtlasPath( - isBackSprite, - ignoreOverride, - ) - .replace("variant/", "") - .replace(/_[1-3]$/, ""); - let config = variantData; - const useExpSprite = - globalScene.experimentalSprites && - globalScene.hasExpSprite( - this.getBattleSpriteKey(isBackSprite, ignoreOverride), - ); - battleSpritePath - .split("/") - .map(p => (config ? (config = config[p]) : null)); - const variantSet: VariantSet = config as VariantSet; - if (variantSet && variantSet[this.variant] === 1) { - const cacheKey = this.getBattleSpriteKey(isBackSprite); - if (!variantColorCache.hasOwnProperty(cacheKey)) { - await this.populateVariantColorCache( - cacheKey, - useExpSprite, - battleSpritePath, - ); - } - } - resolve(); - }); - }; - if (this.isPlayer()) { - Promise.all([ - populateVariantColors(false), - populateVariantColors(true), - ]).then(() => updateFusionPaletteAndResolve()); - } else { - populateVariantColors(false).then(() => - updateFusionPaletteAndResolve(), - ); - } - } else { - updateFusionPaletteAndResolve(); - } - }); - if (!globalScene.load.isLoading()) { - globalScene.load.start(); - } + async loadAssets(ignoreOverride = true): Promise { + /** Promises that are loading assets and can be run concurrently. */ + const loadPromises: Promise[] = []; + // Assets for moves + loadPromises.push(loadMoveAnimations(this.getMoveset().map(m => m.getMove().id))); + + // Load the assets for the species form + loadPromises.push( + this.getSpeciesForm().loadAssets(this.getGender() === Gender.FEMALE, this.formIndex, this.shiny, this.variant), + ); + + if (this.isPlayer() || this.getFusionSpeciesForm()) { + globalScene.loadPokemonAtlas( + this.getBattleSpriteKey(true, ignoreOverride), + this.getBattleSpriteAtlasPath(true, ignoreOverride), + ); + } + if (this.getFusionSpeciesForm()) { + loadPromises.push(this.getFusionSpeciesForm().loadAssets( + this.getFusionGender() === Gender.FEMALE, + this.fusionFormIndex, + this.fusionShiny, + this.fusionVariant, + )); + globalScene.loadPokemonAtlas( + this.getFusionBattleSpriteKey(true, ignoreOverride), + this.getFusionBattleSpriteAtlasPath(true, ignoreOverride), + ); + } + + if (this.shiny) { + loadPromises.push(populateVariantColors(this, false, ignoreOverride)) + if (this.isPlayer()) { + loadPromises.push(populateVariantColors(this, true, ignoreOverride)); + } + } + + await Promise.allSettled(loadPromises); + + // Wait for the assets we queued to load to finish loading, then... + if (!globalScene.load.isLoading()) { + globalScene.load.start(); + } + // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises#creating_a_promise_around_an_old_callback_api + await new Promise(resolve => globalScene.load.once(Phaser.Loader.Events.COMPLETE, resolve)); + + // With the sprites loaded, generate the animation frame information + if (this.isPlayer()) { + const originalWarn = console.warn; + // Ignore warnings for missing frames, because there will be a lot + console.warn = () => {}; + const battleFrameNames = globalScene.anims.generateFrameNames(this.getBattleSpriteKey(), { + zeroPad: 4, + suffix: ".png", + start: 1, + end: 400, }); - }); + console.warn = originalWarn; + globalScene.anims.create({ + key: this.getBattleSpriteKey(), + frames: battleFrameNames, + frameRate: 10, + repeat: -1, + }); + } + // With everything loaded, now begin playing the animation. + this.playAnim(); + + // update the fusion palette + this.updateFusionPalette(); + if (this.summonData?.speciesForm) { + this.updateFusionPalette(true); + } } /** diff --git a/src/overrides.ts b/src/overrides.ts index 3a9a54e740b..21c72cd7b98 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -2,7 +2,7 @@ import { type PokeballCounts } from "#app/battle-scene"; import { EvolutionItem } from "#app/data/balance/pokemon-evolutions"; import { Gender } from "#app/data/gender"; import { FormChangeItem } from "#app/data/pokemon-forms"; -import { Variant } from "#app/data/variant"; +import { Variant } from "#app/sprites/variant"; import { type ModifierOverride } from "#app/modifier/modifier-type"; import { Unlockables } from "#app/system/unlockables"; import { Abilities } from "#enums/abilities"; diff --git a/src/pipelines/field-sprite.ts b/src/pipelines/field-sprite.ts index 547281d7dee..612c9fae052 100644 --- a/src/pipelines/field-sprite.ts +++ b/src/pipelines/field-sprite.ts @@ -1,210 +1,8 @@ import { globalScene } from "#app/global-scene"; import { TerrainType, getTerrainColor } from "../data/terrain"; import * as Utils from "../utils"; - -const spriteFragShader = ` -#ifdef GL_FRAGMENT_PRECISION_HIGH -precision highp float; -#else -precision mediump float; -#endif - -uniform sampler2D uMainSampler[%count%]; - -varying vec2 outTexCoord; -varying float outTexId; -varying float outTintEffect; -varying vec4 outTint; - -uniform float time; -uniform int ignoreTimeTint; -uniform int isOutside; -uniform vec3 dayTint; -uniform vec3 duskTint; -uniform vec3 nightTint; -uniform vec3 terrainColor; -uniform float terrainColorRatio; - -float blendOverlay(float base, float blend) { - return base<0.5?(2.0*base*blend):(1.0-2.0*(1.0-base)*(1.0-blend)); -} - -vec3 blendOverlay(vec3 base, vec3 blend) { - return vec3(blendOverlay(base.r,blend.r),blendOverlay(base.g,blend.g),blendOverlay(base.b,blend.b)); -} - -vec3 blendHardLight(vec3 base, vec3 blend) { - return blendOverlay(blend, base); -} - -float hue2rgb(float f1, float f2, float hue) { - if (hue < 0.0) - hue += 1.0; - else if (hue > 1.0) - hue -= 1.0; - float res; - if ((6.0 * hue) < 1.0) - res = f1 + (f2 - f1) * 6.0 * hue; - else if ((2.0 * hue) < 1.0) - res = f2; - else if ((3.0 * hue) < 2.0) - res = f1 + (f2 - f1) * ((2.0 / 3.0) - hue) * 6.0; - else - res = f1; - return res; -} - -vec3 rgb2hsl(vec3 color) { - vec3 hsl; - - float fmin = min(min(color.r, color.g), color.b); - float fmax = max(max(color.r, color.g), color.b); - float delta = fmax - fmin; - - hsl.z = (fmax + fmin) / 2.0; - - if (delta == 0.0) { - hsl.x = 0.0; - hsl.y = 0.0; - } else { - if (hsl.z < 0.5) - hsl.y = delta / (fmax + fmin); - else - hsl.y = delta / (2.0 - fmax - fmin); - - float deltaR = (((fmax - color.r) / 6.0) + (delta / 2.0)) / delta; - float deltaG = (((fmax - color.g) / 6.0) + (delta / 2.0)) / delta; - float deltaB = (((fmax - color.b) / 6.0) + (delta / 2.0)) / delta; - - if (color.r == fmax ) - hsl.x = deltaB - deltaG; - else if (color.g == fmax) - hsl.x = (1.0 / 3.0) + deltaR - deltaB; - else if (color.b == fmax) - hsl.x = (2.0 / 3.0) + deltaG - deltaR; - - if (hsl.x < 0.0) - hsl.x += 1.0; - else if (hsl.x > 1.0) - hsl.x -= 1.0; - } - - return hsl; -} - -vec3 hsl2rgb(vec3 hsl) { - vec3 rgb; - - if (hsl.y == 0.0) - rgb = vec3(hsl.z); - else { - float f2; - - if (hsl.z < 0.5) - f2 = hsl.z * (1.0 + hsl.y); - else - f2 = (hsl.z + hsl.y) - (hsl.y * hsl.z); - - float f1 = 2.0 * hsl.z - f2; - - rgb.r = hue2rgb(f1, f2, hsl.x + (1.0/3.0)); - rgb.g = hue2rgb(f1, f2, hsl.x); - rgb.b = hue2rgb(f1, f2, hsl.x - (1.0/3.0)); - } - - return rgb; -} - -vec3 blendHue(vec3 base, vec3 blend) { - vec3 baseHSL = rgb2hsl(base); - return hsl2rgb(vec3(rgb2hsl(blend).r, baseHSL.g, baseHSL.b)); -} - -void main() { - vec4 texture; - - %forloop% - - vec4 texel = vec4(outTint.bgr * outTint.a, outTint.a); - - // Multiply texture tint - vec4 color = texture * texel; - - if (outTintEffect == 1.0) { - // Solid color + texture alpha - color.rgb = mix(texture.rgb, outTint.bgr * outTint.a, texture.a); - } else if (outTintEffect == 2.0) { - // Solid color, no texture - color = texel; - } - - /* Apply day/night tint */ - if (color.a > 0.0 && ignoreTimeTint == 0) { - vec3 dayNightTint; - - if (time < 0.25) { - dayNightTint = dayTint; - } else if (isOutside == 0 && time < 0.5) { - dayNightTint = mix(dayTint, nightTint, (time - 0.25) / 0.25); - } else if (time < 0.375) { - dayNightTint = mix(dayTint, duskTint, (time - 0.25) / 0.125); - } else if (time < 0.5) { - dayNightTint = mix(duskTint, nightTint, (time - 0.375) / 0.125); - } else if (time < 0.75) { - dayNightTint = nightTint; - } else if (isOutside == 0) { - dayNightTint = mix(nightTint, dayTint, (time - 0.75) / 0.25); - } else if (time < 0.875) { - dayNightTint = mix(nightTint, duskTint, (time - 0.75) / 0.125); - } else { - dayNightTint = mix(duskTint, dayTint, (time - 0.875) / 0.125); - } - - color = vec4(blendHardLight(color.rgb, dayNightTint), color.a); - } - - if (terrainColorRatio > 0.0 && (1.0 - terrainColorRatio) < outTexCoord.y) { - if (color.a > 0.0 && (terrainColor.r > 0.0 || terrainColor.g > 0.0 || terrainColor.b > 0.0)) { - color.rgb = mix(color.rgb, blendHue(color.rgb, terrainColor), 1.0); - } - } - - gl_FragColor = color; -} -`; - -const spriteVertShader = ` -precision mediump float; - -uniform mat4 uProjectionMatrix; -uniform int uRoundPixels; -uniform vec2 uResolution; - -attribute vec2 inPosition; -attribute vec2 inTexCoord; -attribute float inTexId; -attribute float inTintEffect; -attribute vec4 inTint; - -varying vec2 outTexCoord; -varying float outTexId; -varying vec2 outPosition; -varying float outTintEffect; -varying vec4 outTint; - -void main() { - gl_Position = uProjectionMatrix * vec4(inPosition, 1.0, 1.0); - if (uRoundPixels == 1) - { - gl_Position.xy = floor(((gl_Position.xy + 1.0) * 0.5 * uResolution) + 0.5) / uResolution * 2.0 - 1.0; - } - outTexCoord = inTexCoord; - outTexId = inTexId; - outPosition = inPosition; - outTint = inTint; - outTintEffect = inTintEffect; -} -`; +import fieldSpriteFragShader from "./glsl/fieldSpriteFragShader.frag?raw"; +import spriteVertShader from "./glsl/spriteShader.vert?raw"; export default class FieldSpritePipeline extends Phaser.Renderer.WebGL.Pipelines.MultiPipeline { constructor(game: Phaser.Game, config?: Phaser.Types.Renderer.WebGL.WebGLPipelineConfig) { @@ -212,7 +10,7 @@ export default class FieldSpritePipeline extends Phaser.Renderer.WebGL.Pipelines config || { game: game, name: "field-sprite", - fragShader: spriteFragShader, + fragShader: fieldSpriteFragShader, vertShader: spriteVertShader, }, ); diff --git a/src/pipelines/glsl/fieldSpriteFragShader.frag b/src/pipelines/glsl/fieldSpriteFragShader.frag new file mode 100644 index 00000000000..e79dea86fe9 --- /dev/null +++ b/src/pipelines/glsl/fieldSpriteFragShader.frag @@ -0,0 +1,168 @@ +#ifdef GL_FRAGMENT_PRECISION_HIGH +precision highp float; +#else +precision mediump float; +#endif + +uniform sampler2D uMainSampler[%count%]; + +varying vec2 outTexCoord; +varying float outTexId; +varying float outTintEffect; +varying vec4 outTint; + +uniform float time; +uniform int ignoreTimeTint; +uniform int isOutside; +uniform vec3 dayTint; +uniform vec3 duskTint; +uniform vec3 nightTint; +uniform vec3 terrainColor; +uniform float terrainColorRatio; + +float blendOverlay(float base, float blend) { + return base<0.5?(2.0*base*blend):(1.0-2.0*(1.0-base)*(1.0-blend)); +} + +vec3 blendOverlay(vec3 base, vec3 blend) { + return vec3(blendOverlay(base.r,blend.r),blendOverlay(base.g,blend.g),blendOverlay(base.b,blend.b)); +} + +vec3 blendHardLight(vec3 base, vec3 blend) { + return blendOverlay(blend, base); +} + +float hue2rgb(float f1, float f2, float hue) { + if (hue < 0.0) + hue += 1.0; + else if (hue > 1.0) + hue -= 1.0; + float res; + if ((6.0 * hue) < 1.0) + res = f1 + (f2 - f1) * 6.0 * hue; + else if ((2.0 * hue) < 1.0) + res = f2; + else if ((3.0 * hue) < 2.0) + res = f1 + (f2 - f1) * ((2.0 / 3.0) - hue) * 6.0; + else + res = f1; + return res; +} + +vec3 rgb2hsl(vec3 color) { + vec3 hsl; + + float fmin = min(min(color.r, color.g), color.b); + float fmax = max(max(color.r, color.g), color.b); + float delta = fmax - fmin; + + hsl.z = (fmax + fmin) / 2.0; + + if (delta == 0.0) { + hsl.x = 0.0; + hsl.y = 0.0; + } else { + if (hsl.z < 0.5) + hsl.y = delta / (fmax + fmin); + else + hsl.y = delta / (2.0 - fmax - fmin); + + float deltaR = (((fmax - color.r) / 6.0) + (delta / 2.0)) / delta; + float deltaG = (((fmax - color.g) / 6.0) + (delta / 2.0)) / delta; + float deltaB = (((fmax - color.b) / 6.0) + (delta / 2.0)) / delta; + + if (color.r == fmax ) + hsl.x = deltaB - deltaG; + else if (color.g == fmax) + hsl.x = (1.0 / 3.0) + deltaR - deltaB; + else if (color.b == fmax) + hsl.x = (2.0 / 3.0) + deltaG - deltaR; + + if (hsl.x < 0.0) + hsl.x += 1.0; + else if (hsl.x > 1.0) + hsl.x -= 1.0; + } + + return hsl; +} + +vec3 hsl2rgb(vec3 hsl) { + vec3 rgb; + + if (hsl.y == 0.0) + rgb = vec3(hsl.z); + else { + float f2; + + if (hsl.z < 0.5) + f2 = hsl.z * (1.0 + hsl.y); + else + f2 = (hsl.z + hsl.y) - (hsl.y * hsl.z); + + float f1 = 2.0 * hsl.z - f2; + + rgb.r = hue2rgb(f1, f2, hsl.x + (1.0/3.0)); + rgb.g = hue2rgb(f1, f2, hsl.x); + rgb.b = hue2rgb(f1, f2, hsl.x - (1.0/3.0)); + } + + return rgb; +} + +vec3 blendHue(vec3 base, vec3 blend) { + vec3 baseHSL = rgb2hsl(base); + return hsl2rgb(vec3(rgb2hsl(blend).r, baseHSL.g, baseHSL.b)); +} + +void main() { + vec4 texture; + + %forloop% + + vec4 texel = vec4(outTint.bgr * outTint.a, outTint.a); + + // Multiply texture tint + vec4 color = texture * texel; + + if (outTintEffect == 1.0) { + // Solid color + texture alpha + color.rgb = mix(texture.rgb, outTint.bgr * outTint.a, texture.a); + } else if (outTintEffect == 2.0) { + // Solid color, no texture + color = texel; + } + + /* Apply day/night tint */ + if (color.a > 0.0 && ignoreTimeTint == 0) { + vec3 dayNightTint; + + if (time < 0.25) { + dayNightTint = dayTint; + } else if (isOutside == 0 && time < 0.5) { + dayNightTint = mix(dayTint, nightTint, (time - 0.25) / 0.25); + } else if (time < 0.375) { + dayNightTint = mix(dayTint, duskTint, (time - 0.25) / 0.125); + } else if (time < 0.5) { + dayNightTint = mix(duskTint, nightTint, (time - 0.375) / 0.125); + } else if (time < 0.75) { + dayNightTint = nightTint; + } else if (isOutside == 0) { + dayNightTint = mix(nightTint, dayTint, (time - 0.75) / 0.25); + } else if (time < 0.875) { + dayNightTint = mix(nightTint, duskTint, (time - 0.75) / 0.125); + } else { + dayNightTint = mix(duskTint, dayTint, (time - 0.875) / 0.125); + } + + color = vec4(blendHardLight(color.rgb, dayNightTint), color.a); + } + + if (terrainColorRatio > 0.0 && (1.0 - terrainColorRatio) < outTexCoord.y) { + if (color.a > 0.0 && (terrainColor.r > 0.0 || terrainColor.g > 0.0 || terrainColor.b > 0.0)) { + color.rgb = mix(color.rgb, blendHue(color.rgb, terrainColor), 1.0); + } + } + + gl_FragColor = color; +} \ No newline at end of file diff --git a/src/pipelines/glsl/invert.frag b/src/pipelines/glsl/invert.frag new file mode 100644 index 00000000000..24d9ee83a55 --- /dev/null +++ b/src/pipelines/glsl/invert.frag @@ -0,0 +1,10 @@ +precision mediump float; + +uniform sampler2D uMainSampler; + +varying vec2 outTexCoord; + +void main() +{ + gl_FragColor = 1.0 - texture2D(uMainSampler, outTexCoord); +} \ No newline at end of file diff --git a/src/pipelines/glsl/spriteFragShader.frag b/src/pipelines/glsl/spriteFragShader.frag new file mode 100644 index 00000000000..3765e595b70 --- /dev/null +++ b/src/pipelines/glsl/spriteFragShader.frag @@ -0,0 +1,279 @@ +#ifdef GL_FRAGMENT_PRECISION_HIGH +precision highp float; +#else +precision mediump float; +#endif + +uniform sampler2D uMainSampler[%count%]; + +varying vec2 outTexCoord; +varying float outTexId; +varying vec2 outPosition; +varying float outTintEffect; +varying vec4 outTint; + +uniform float time; +uniform int ignoreTimeTint; +uniform int isOutside; +uniform vec3 dayTint; +uniform vec3 duskTint; +uniform vec3 nightTint; +uniform float teraTime; +uniform vec3 teraColor; +uniform int hasShadow; +uniform int yCenter; +uniform float fieldScale; +uniform float vCutoff; +uniform vec2 relPosition; +uniform vec2 texFrameUv; +uniform vec2 size; +uniform vec2 texSize; +uniform float yOffset; +uniform float yShadowOffset; +uniform vec4 tone; +uniform ivec4 baseVariantColors[32]; +uniform vec4 variantColors[32]; +uniform ivec4 spriteColors[32]; +uniform ivec4 fusionSpriteColors[32]; + +const vec3 lumaF = vec3(.299, .587, .114); + +float blendOverlay(float base, float blend) { + return base<0.5?(2.0*base*blend):(1.0-2.0*(1.0-base)*(1.0-blend)); +} + +vec3 blendOverlay(vec3 base, vec3 blend) { + return vec3(blendOverlay(base.r,blend.r),blendOverlay(base.g,blend.g),blendOverlay(base.b,blend.b)); +} + +vec3 blendHardLight(vec3 base, vec3 blend) { + return blendOverlay(blend, base); +} + +float hue2rgb(float f1, float f2, float hue) { + if (hue < 0.0) + hue += 1.0; + else if (hue > 1.0) + hue -= 1.0; + float res; + if ((6.0 * hue) < 1.0) + res = f1 + (f2 - f1) * 6.0 * hue; + else if ((2.0 * hue) < 1.0) + res = f2; + else if ((3.0 * hue) < 2.0) + res = f1 + (f2 - f1) * ((2.0 / 3.0) - hue) * 6.0; + else + res = f1; + return res; +} + +vec3 rgb2hsl(vec3 color) { + vec3 hsl; + + float fmin = min(min(color.r, color.g), color.b); + float fmax = max(max(color.r, color.g), color.b); + float delta = fmax - fmin; + + hsl.z = (fmax + fmin) / 2.0; + + if (delta == 0.0) { + hsl.x = 0.0; + hsl.y = 0.0; + } else { + if (hsl.z < 0.5) + hsl.y = delta / (fmax + fmin); + else + hsl.y = delta / (2.0 - fmax - fmin); + + float deltaR = (((fmax - color.r) / 6.0) + (delta / 2.0)) / delta; + float deltaG = (((fmax - color.g) / 6.0) + (delta / 2.0)) / delta; + float deltaB = (((fmax - color.b) / 6.0) + (delta / 2.0)) / delta; + + if (color.r == fmax ) + hsl.x = deltaB - deltaG; + else if (color.g == fmax) + hsl.x = (1.0 / 3.0) + deltaR - deltaB; + else if (color.b == fmax) + hsl.x = (2.0 / 3.0) + deltaG - deltaR; + + if (hsl.x < 0.0) + hsl.x += 1.0; + else if (hsl.x > 1.0) + hsl.x -= 1.0; + } + + return hsl; +} + +vec3 hsl2rgb(vec3 hsl) { + vec3 rgb; + + if (hsl.y == 0.0) + rgb = vec3(hsl.z); + else { + float f2; + + if (hsl.z < 0.5) + f2 = hsl.z * (1.0 + hsl.y); + else + f2 = (hsl.z + hsl.y) - (hsl.y * hsl.z); + + float f1 = 2.0 * hsl.z - f2; + + rgb.r = hue2rgb(f1, f2, hsl.x + (1.0/3.0)); + rgb.g = hue2rgb(f1, f2, hsl.x); + rgb.b= hue2rgb(f1, f2, hsl.x - (1.0/3.0)); + } + + return rgb; +} + +vec3 blendHue(vec3 base, vec3 blend) { + vec3 baseHSL = rgb2hsl(base); + return hsl2rgb(vec3(rgb2hsl(blend).r, baseHSL.g, baseHSL.b)); +} + +vec3 rgb2hsv(vec3 c) { + vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g)); + vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r)); + + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); +} + +vec3 hsv2rgb(vec3 c) { + vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); +} + +void main() { + vec4 texture = texture2D(uMainSampler[0], outTexCoord); + + ivec4 colorInt = ivec4(texture*255.0); + + for (int i = 0; i < 32; i++) { + if (baseVariantColors[i][3] == 0) + break; + // abs value is broken in this version of gles with highp + ivec3 diffs = ivec3( + (colorInt.r > baseVariantColors[i].r) ? colorInt.r - baseVariantColors[i].r : baseVariantColors[i].r - colorInt.r, + (colorInt.g > baseVariantColors[i].g) ? colorInt.g - baseVariantColors[i].g : baseVariantColors[i].g - colorInt.g, + (colorInt.b > baseVariantColors[i].b) ? colorInt.b - baseVariantColors[i].b : baseVariantColors[i].b - colorInt.b + ); + // Set color threshold to be within 3 points for each channel + bvec3 threshold = lessThan(diffs, ivec3(3)); + + if (texture.a > 0.0 && all(threshold)) { + texture.rgb = variantColors[i].rgb; + break; + } + } + + for (int i = 0; i < 32; i++) { + if (spriteColors[i][3] == 0) + break; + if (texture.a > 0.0 && colorInt.r == spriteColors[i].r && colorInt.g == spriteColors[i].g && colorInt.b == spriteColors[i].b) { + vec3 fusionColor = vec3(float(fusionSpriteColors[i].r) / 255.0, float(fusionSpriteColors[i].g) / 255.0, float(fusionSpriteColors[i].b) / 255.0); + vec3 bg = vec3(spriteColors[i].rgb) / 255.0; + float gray = (bg.r + bg.g + bg.b) / 3.0; + bg = vec3(gray, gray, gray); + vec3 fg = fusionColor; + texture.rgb = mix(1.0 - 2.0 * (1.0 - bg) * (1.0 - fg), 2.0 * bg * fg, step(bg, vec3(0.5))); + break; + } + } + + vec4 texel = vec4(outTint.bgr * outTint.a, outTint.a); + + // Multiply texture tint + vec4 color = texture * texel; + + if (color.a > 0.0 && teraColor.r > 0.0 && teraColor.g > 0.0 && teraColor.b > 0.0) { + vec2 relUv = vec2((outTexCoord.x - texFrameUv.x) / (size.x / texSize.x), (outTexCoord.y - texFrameUv.y) / (size.y / texSize.y)); + vec2 teraTexCoord = vec2(relUv.x * (size.x / 200.0), relUv.y * (size.y / 120.0)); + vec4 teraCol = texture2D(uMainSampler[1], teraTexCoord); + float floorValue = 86.0 / 255.0; + vec3 teraPatternHsv = rgb2hsv(teraCol.rgb); + teraCol.rgb = hsv2rgb(vec3((teraPatternHsv.b - floorValue) * 4.0 + teraTexCoord.x * fieldScale / 2.0 + teraTexCoord.y * fieldScale / 2.0 + teraTime * 255.0, teraPatternHsv.b, teraPatternHsv.b)); + + color.rgb = mix(color.rgb, blendHue(color.rgb, teraColor), 0.625); + teraCol.rgb = mix(teraCol.rgb, teraColor, 0.5); + color.rgb = blendOverlay(color.rgb, teraCol.rgb); + + if (any(lessThan(teraCol.rgb, vec3(1.0)))) { + vec3 teraColHsv = rgb2hsv(teraColor); + color.rgb = mix(color.rgb, teraColor, (1.0 - teraColHsv.g) / 2.0); + } + } + + if (outTintEffect == 1.0) { + // Solid color + texture alpha + color.rgb = mix(texture.rgb, outTint.bgr * outTint.a, texture.a); + } else if (outTintEffect == 2.0) { + // Solid color, no texture + color = texel; + } + + /* Apply gray */ + float luma = dot(color.rgb, lumaF); + color.rgb = mix(color.rgb, vec3(luma), tone.w); + + /* Apply tone */ + color.rgb += tone.rgb * (color.a / 255.0); + + /* Apply day/night tint */ + if (color.a > 0.0 && ignoreTimeTint == 0) { + vec3 dayNightTint; + + if (time < 0.25) { + dayNightTint = dayTint; + } else if (isOutside == 0 && time < 0.5) { + dayNightTint = mix(dayTint, nightTint, (time - 0.25) / 0.25); + } else if (time < 0.375) { + dayNightTint = mix(dayTint, duskTint, (time - 0.25) / 0.125); + } else if (time < 0.5) { + dayNightTint = mix(duskTint, nightTint, (time - 0.375) / 0.125); + } else if (time < 0.75) { + dayNightTint = nightTint; + } else if (isOutside == 0) { + dayNightTint = mix(nightTint, dayTint, (time - 0.75) / 0.25); + } else if (time < 0.875) { + dayNightTint = mix(nightTint, duskTint, (time - 0.75) / 0.125); + } else { + dayNightTint = mix(duskTint, dayTint, (time - 0.875) / 0.125); + } + + color.rgb = blendHardLight(color.rgb, dayNightTint); + } + + if (hasShadow == 1) { + float width = size.x - (yOffset / 2.0); + + float spriteX = ((floor(outPosition.x / fieldScale) - relPosition.x) / width) + 0.5; + float spriteY = ((floor(outPosition.y / fieldScale) - relPosition.y - yShadowOffset) / size.y); + + if (yCenter == 1) { + spriteY += 0.5; + } else { + spriteY += 1.0; + } + + bool yOverflow = outTexCoord.y >= vCutoff; + + if ((spriteY >= 0.9 && (color.a == 0.0 || yOverflow))) { + float shadowSpriteY = (spriteY - 0.9) * (1.0 / 0.15); + if (distance(vec2(spriteX, shadowSpriteY), vec2(0.5, 0.5)) < 0.5) { + color = vec4(vec3(0.0, 0.0, 0.0), 0.5); + } else if (yOverflow) { + discard; + } + } else if (yOverflow) { + discard; + } + } + + gl_FragColor = color; +} \ No newline at end of file diff --git a/src/pipelines/glsl/spriteShader.vert b/src/pipelines/glsl/spriteShader.vert new file mode 100644 index 00000000000..33743384b47 --- /dev/null +++ b/src/pipelines/glsl/spriteShader.vert @@ -0,0 +1,32 @@ +precision mediump float; + +uniform mat4 uProjectionMatrix; +uniform int uRoundPixels; +uniform vec2 uResolution; + +attribute vec2 inPosition; +attribute vec2 inTexCoord; +attribute float inTexId; +attribute float inTintEffect; +attribute vec4 inTint; + +varying vec2 outTexCoord; +varying vec2 outtexFrameUv; +varying float outTexId; +varying vec2 outPosition; +varying float outTintEffect; +varying vec4 outTint; + +void main() +{ + gl_Position = uProjectionMatrix * vec4(inPosition, 1.0, 1.0); + if (uRoundPixels == 1) + { + gl_Position.xy = floor(((gl_Position.xy + 1.0) * 0.5 * uResolution) + 0.5) / uResolution * 2.0 - 1.0; + } + outTexCoord = inTexCoord; + outTexId = inTexId; + outPosition = inPosition; + outTint = inTint; + outTintEffect = inTintEffect; +} \ No newline at end of file diff --git a/src/pipelines/invert.ts b/src/pipelines/invert.ts index a945d0c95aa..0ebc3ad865f 100644 --- a/src/pipelines/invert.ts +++ b/src/pipelines/invert.ts @@ -1,17 +1,5 @@ import type { Game } from "phaser"; - -const fragShader = ` -precision mediump float; - -uniform sampler2D uMainSampler; - -varying vec2 outTexCoord; - -void main() -{ - gl_FragColor = 1.0 - texture2D(uMainSampler, outTexCoord); -} -`; +import fragShader from "./glsl/invert.frag?raw"; export default class InvertPostFX extends Phaser.Renderer.WebGL.Pipelines.PostFXPipeline { constructor(game: Game) { diff --git a/src/pipelines/sprite.ts b/src/pipelines/sprite.ts index 439e35f711f..acbaac50476 100644 --- a/src/pipelines/sprite.ts +++ b/src/pipelines/sprite.ts @@ -1,318 +1,12 @@ -import { variantColorCache } from "#app/data/variant"; +import { variantColorCache } from "#app/sprites/variant"; import MysteryEncounterIntroVisuals from "#app/field/mystery-encounter-intro"; import Pokemon from "#app/field/pokemon"; import Trainer from "#app/field/trainer"; import { globalScene } from "#app/global-scene"; import * as Utils from "#app/utils"; import FieldSpritePipeline from "./field-sprite"; - -const spriteFragShader = ` -#ifdef GL_FRAGMENT_PRECISION_HIGH -precision highp float; -#else -precision mediump float; -#endif - -uniform sampler2D uMainSampler[%count%]; - -varying vec2 outTexCoord; -varying float outTexId; -varying vec2 outPosition; -varying float outTintEffect; -varying vec4 outTint; - -uniform float time; -uniform int ignoreTimeTint; -uniform int isOutside; -uniform vec3 dayTint; -uniform vec3 duskTint; -uniform vec3 nightTint; -uniform float teraTime; -uniform vec3 teraColor; -uniform int hasShadow; -uniform int yCenter; -uniform float fieldScale; -uniform float vCutoff; -uniform vec2 relPosition; -uniform vec2 texFrameUv; -uniform vec2 size; -uniform vec2 texSize; -uniform float yOffset; -uniform float yShadowOffset; -uniform vec4 tone; -uniform ivec4 baseVariantColors[32]; -uniform vec4 variantColors[32]; -uniform ivec4 spriteColors[32]; -uniform ivec4 fusionSpriteColors[32]; - -const vec3 lumaF = vec3(.299, .587, .114); - -float blendOverlay(float base, float blend) { - return base<0.5?(2.0*base*blend):(1.0-2.0*(1.0-base)*(1.0-blend)); -} - -vec3 blendOverlay(vec3 base, vec3 blend) { - return vec3(blendOverlay(base.r,blend.r),blendOverlay(base.g,blend.g),blendOverlay(base.b,blend.b)); -} - -vec3 blendHardLight(vec3 base, vec3 blend) { - return blendOverlay(blend, base); -} - -float hue2rgb(float f1, float f2, float hue) { - if (hue < 0.0) - hue += 1.0; - else if (hue > 1.0) - hue -= 1.0; - float res; - if ((6.0 * hue) < 1.0) - res = f1 + (f2 - f1) * 6.0 * hue; - else if ((2.0 * hue) < 1.0) - res = f2; - else if ((3.0 * hue) < 2.0) - res = f1 + (f2 - f1) * ((2.0 / 3.0) - hue) * 6.0; - else - res = f1; - return res; -} - -vec3 rgb2hsl(vec3 color) { - vec3 hsl; - - float fmin = min(min(color.r, color.g), color.b); - float fmax = max(max(color.r, color.g), color.b); - float delta = fmax - fmin; - - hsl.z = (fmax + fmin) / 2.0; - - if (delta == 0.0) { - hsl.x = 0.0; - hsl.y = 0.0; - } else { - if (hsl.z < 0.5) - hsl.y = delta / (fmax + fmin); - else - hsl.y = delta / (2.0 - fmax - fmin); - - float deltaR = (((fmax - color.r) / 6.0) + (delta / 2.0)) / delta; - float deltaG = (((fmax - color.g) / 6.0) + (delta / 2.0)) / delta; - float deltaB = (((fmax - color.b) / 6.0) + (delta / 2.0)) / delta; - - if (color.r == fmax ) - hsl.x = deltaB - deltaG; - else if (color.g == fmax) - hsl.x = (1.0 / 3.0) + deltaR - deltaB; - else if (color.b == fmax) - hsl.x = (2.0 / 3.0) + deltaG - deltaR; - - if (hsl.x < 0.0) - hsl.x += 1.0; - else if (hsl.x > 1.0) - hsl.x -= 1.0; - } - - return hsl; -} - -vec3 hsl2rgb(vec3 hsl) { - vec3 rgb; - - if (hsl.y == 0.0) - rgb = vec3(hsl.z); - else { - float f2; - - if (hsl.z < 0.5) - f2 = hsl.z * (1.0 + hsl.y); - else - f2 = (hsl.z + hsl.y) - (hsl.y * hsl.z); - - float f1 = 2.0 * hsl.z - f2; - - rgb.r = hue2rgb(f1, f2, hsl.x + (1.0/3.0)); - rgb.g = hue2rgb(f1, f2, hsl.x); - rgb.b= hue2rgb(f1, f2, hsl.x - (1.0/3.0)); - } - - return rgb; -} - -vec3 blendHue(vec3 base, vec3 blend) { - vec3 baseHSL = rgb2hsl(base); - return hsl2rgb(vec3(rgb2hsl(blend).r, baseHSL.g, baseHSL.b)); -} - -vec3 rgb2hsv(vec3 c) { - vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); - vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g)); - vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r)); - - float d = q.x - min(q.w, q.y); - float e = 1.0e-10; - return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); -} - -vec3 hsv2rgb(vec3 c) { - vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); - vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); - return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); -} - -void main() { - vec4 texture = texture2D(uMainSampler[0], outTexCoord); - - ivec4 colorInt = ivec4(int(texture.r * 255.0), int(texture.g * 255.0), int(texture.b * 255.0), int(texture.a * 255.0)); - - for (int i = 0; i < 32; i++) { - if (baseVariantColors[i][3] == 0) - break; - if (texture.a > 0.0 && colorInt.r == baseVariantColors[i].r && colorInt.g == baseVariantColors[i].g && colorInt.b == baseVariantColors[i].b) { - texture.rgb = variantColors[i].rgb; - break; - } - } - - for (int i = 0; i < 32; i++) { - if (spriteColors[i][3] == 0) - break; - if (texture.a > 0.0 && colorInt.r == spriteColors[i].r && colorInt.g == spriteColors[i].g && colorInt.b == spriteColors[i].b) { - vec3 fusionColor = vec3(float(fusionSpriteColors[i].r) / 255.0, float(fusionSpriteColors[i].g) / 255.0, float(fusionSpriteColors[i].b) / 255.0); - vec3 bg = vec3(float(spriteColors[i].r) / 255.0, float(spriteColors[i].g) / 255.0, float(spriteColors[i].b) / 255.0); - float gray = (bg.r + bg.g + bg.b) / 3.0; - bg = vec3(gray, gray, gray); - vec3 fg = fusionColor; - texture.rgb = mix(1.0 - 2.0 * (1.0 - bg) * (1.0 - fg), 2.0 * bg * fg, step(bg, vec3(0.5))); - break; - } - } - - vec4 texel = vec4(outTint.bgr * outTint.a, outTint.a); - - // Multiply texture tint - vec4 color = texture * texel; - - if (color.a > 0.0 && teraColor.r > 0.0 && teraColor.g > 0.0 && teraColor.b > 0.0) { - vec2 relUv = vec2((outTexCoord.x - texFrameUv.x) / (size.x / texSize.x), (outTexCoord.y - texFrameUv.y) / (size.y / texSize.y)); - vec2 teraTexCoord = vec2(relUv.x * (size.x / 200.0), relUv.y * (size.y / 120.0)); - vec4 teraCol = texture2D(uMainSampler[1], teraTexCoord); - float floorValue = 86.0 / 255.0; - vec3 teraPatternHsv = rgb2hsv(teraCol.rgb); - teraCol.rgb = hsv2rgb(vec3((teraPatternHsv.b - floorValue) * 4.0 + teraTexCoord.x * fieldScale / 2.0 + teraTexCoord.y * fieldScale / 2.0 + teraTime * 255.0, teraPatternHsv.b, teraPatternHsv.b)); - - color.rgb = mix(color.rgb, blendHue(color.rgb, teraColor), 0.625); - teraCol.rgb = mix(teraCol.rgb, teraColor, 0.5); - color.rgb = blendOverlay(color.rgb, teraCol.rgb); - - if (teraColor.r < 1.0 || teraColor.g < 1.0 || teraColor.b < 1.0) { - vec3 teraColHsv = rgb2hsv(teraColor); - color.rgb = mix(color.rgb, teraColor, (1.0 - teraColHsv.g) / 2.0); - } - } - - if (outTintEffect == 1.0) { - // Solid color + texture alpha - color.rgb = mix(texture.rgb, outTint.bgr * outTint.a, texture.a); - } else if (outTintEffect == 2.0) { - // Solid color, no texture - color = texel; - } - - /* Apply gray */ - float luma = dot(color.rgb, lumaF); - color.rgb = mix(color.rgb, vec3(luma), tone.w); - - /* Apply tone */ - color.rgb += tone.rgb * (color.a / 255.0); - - /* Apply day/night tint */ - if (color.a > 0.0 && ignoreTimeTint == 0) { - vec3 dayNightTint; - - if (time < 0.25) { - dayNightTint = dayTint; - } else if (isOutside == 0 && time < 0.5) { - dayNightTint = mix(dayTint, nightTint, (time - 0.25) / 0.25); - } else if (time < 0.375) { - dayNightTint = mix(dayTint, duskTint, (time - 0.25) / 0.125); - } else if (time < 0.5) { - dayNightTint = mix(duskTint, nightTint, (time - 0.375) / 0.125); - } else if (time < 0.75) { - dayNightTint = nightTint; - } else if (isOutside == 0) { - dayNightTint = mix(nightTint, dayTint, (time - 0.75) / 0.25); - } else if (time < 0.875) { - dayNightTint = mix(nightTint, duskTint, (time - 0.75) / 0.125); - } else { - dayNightTint = mix(duskTint, dayTint, (time - 0.875) / 0.125); - } - - color.rgb = blendHardLight(color.rgb, dayNightTint); - } - - if (hasShadow == 1) { - float width = size.x - (yOffset / 2.0); - - float spriteX = ((floor(outPosition.x / fieldScale) - relPosition.x) / width) + 0.5; - float spriteY = ((floor(outPosition.y / fieldScale) - relPosition.y - yShadowOffset) / size.y); - - if (yCenter == 1) { - spriteY += 0.5; - } else { - spriteY += 1.0; - } - - bool yOverflow = outTexCoord.y >= vCutoff; - - if ((spriteY >= 0.9 && (color.a == 0.0 || yOverflow))) { - float shadowSpriteY = (spriteY - 0.9) * (1.0 / 0.15); - if (distance(vec2(spriteX, shadowSpriteY), vec2(0.5, 0.5)) < 0.5) { - color = vec4(vec3(0.0, 0.0, 0.0), 0.5); - } else if (yOverflow) { - discard; - } - } else if (yOverflow) { - discard; - } - } - - gl_FragColor = color; -} -`; - -const spriteVertShader = ` -precision mediump float; - -uniform mat4 uProjectionMatrix; -uniform int uRoundPixels; -uniform vec2 uResolution; - -attribute vec2 inPosition; -attribute vec2 inTexCoord; -attribute float inTexId; -attribute float inTintEffect; -attribute vec4 inTint; - -varying vec2 outTexCoord; -varying vec2 outtexFrameUv; -varying float outTexId; -varying vec2 outPosition; -varying float outTintEffect; -varying vec4 outTint; - -void main() -{ - gl_Position = uProjectionMatrix * vec4(inPosition, 1.0, 1.0); - if (uRoundPixels == 1) - { - gl_Position.xy = floor(((gl_Position.xy + 1.0) * 0.5 * uResolution) + 0.5) / uResolution * 2.0 - 1.0; - } - outTexCoord = inTexCoord; - outTexId = inTexId; - outPosition = inPosition; - outTint = inTint; - outTintEffect = inTintEffect; -} -`; +import spriteFragShader from "./glsl/spriteFragShader.frag?raw"; +import spriteVertShader from "./glsl/spriteShader.vert?raw"; export default class SpritePipeline extends FieldSpritePipeline { private _tone: number[]; diff --git a/src/sprites/pokemon-asset-loader.ts b/src/sprites/pokemon-asset-loader.ts new file mode 100644 index 00000000000..4ce88f4f1fb --- /dev/null +++ b/src/sprites/pokemon-asset-loader.ts @@ -0,0 +1,11 @@ +import type { Moves } from "#enums/moves"; +import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims"; + +/** + * Asynchronously load the animations and assets for the provided moves. + * @param moveIds - An array of move IDs to load assets for. + */ +export async function loadMoveAnimations(moveIds: Moves[]): Promise { + await Promise.allSettled(moveIds.map(m => initMoveAnim(m))); + await loadMoveAnimAssets(moveIds); +} diff --git a/src/sprites/pokemon-sprite.ts b/src/sprites/pokemon-sprite.ts new file mode 100644 index 00000000000..66432f5a4ea --- /dev/null +++ b/src/sprites/pokemon-sprite.ts @@ -0,0 +1,79 @@ +import { globalScene } from "#app/global-scene"; +import { variantColorCache, variantData } from "#app/sprites/variant"; +import { Gender } from "#app/data/gender"; +import { hasExpSprite } from "./sprite-utils"; +import type { Variant, VariantSet } from "#app/sprites/variant"; +import type Pokemon from "#app/field/pokemon"; +import type BattleScene from "#app/battle-scene"; + +// Regex patterns + +/** Regex matching double underscores */ +const DUNDER_REGEX = /\_{2}/g; + +/** + * Calculate the sprite ID from a pokemon form. + */ +export function getSpriteId(pokemon: Pokemon, ignoreOverride?: boolean): string { + return pokemon + .getSpeciesForm(ignoreOverride) + .getSpriteId( + pokemon.getGender(ignoreOverride) === Gender.FEMALE, + pokemon.formIndex, + pokemon.shiny, + pokemon.variant, + ); +} + +export function getBattleSpriteId(pokemon: Pokemon, back?: boolean, ignoreOverride = false): string { + if (back === undefined) { + back = pokemon.isPlayer(); + } + return pokemon + .getSpeciesForm(ignoreOverride) + .getSpriteId( + pokemon.getGender(ignoreOverride) === Gender.FEMALE, + pokemon.formIndex, + pokemon.shiny, + pokemon.variant, + back, + ); +} + +/** Compute the path to the sprite atlas by converting double underscores to path components (/) + */ +export function getSpriteAtlasPath(pokemon: Pokemon, ignoreOverride = false): string { + const spriteId = getSpriteId(pokemon, ignoreOverride).replace(DUNDER_REGEX, "/"); + return `${/_[1-3]$/.test(spriteId) ? "variant/" : ""}${spriteId}`; +} + +/** + * Load the variant assets for the given sprite and store it in {@linkcode variantColorCache}. + * @param spriteKey - The key of the sprite to load + * @param fileRoot - The root path of the sprite file + * @param variant - The variant to load + * @param scene - The scene to load the assets in (defaults to the global scene) + */ +export async function loadPokemonVariantAssets( + spriteKey: string, + fileRoot: string, + variant: Variant, + scene: BattleScene = globalScene, +): Promise { + if (variantColorCache.hasOwnProperty(spriteKey)) { + return; + } + const useExpSprite = scene.experimentalSprites && hasExpSprite(spriteKey); + if (useExpSprite) { + fileRoot = `exp/${fileRoot}`; + } + let variantConfig = variantData; + fileRoot.split("/").map(p => (variantConfig ? (variantConfig = variantConfig[p]) : null)); + const variantSet = variantConfig as VariantSet; + if (!variantConfig || variantSet[variant] !== 1) { + return; + } + variantColorCache[spriteKey] = await scene + .cachedFetch(`./images/pokemon/variant/${fileRoot}.json`) + .then(res => res.json()); +} diff --git a/src/sprites/sprite-keys.ts b/src/sprites/sprite-keys.ts new file mode 100644 index 00000000000..f023df089f6 --- /dev/null +++ b/src/sprites/sprite-keys.ts @@ -0,0 +1 @@ +export const expSpriteKeys: Set = new Set(); diff --git a/src/sprites/sprite-utils.ts b/src/sprites/sprite-utils.ts new file mode 100644 index 00000000000..8a352de3d55 --- /dev/null +++ b/src/sprites/sprite-utils.ts @@ -0,0 +1,28 @@ +import { expSpriteKeys } from "#app/sprites/sprite-keys"; + +const expKeyRegex = /^pkmn__?(back__)?(shiny__)?(female__)?(\d+)(\-.*?)?(?:_[1-3])?$/; + +export function hasExpSprite(key: string): boolean { + const keyMatch = expKeyRegex.exec(key); + if (!keyMatch) { + return false; + } + + let k = keyMatch[4]!; + if (keyMatch[2]) { + k += "s"; + } + if (keyMatch[1]) { + k += "b"; + } + if (keyMatch[3]) { + k += "f"; + } + if (keyMatch[5]) { + k += keyMatch[5]; + } + if (!expSpriteKeys.has(k)) { + return false; + } + return true; +} diff --git a/src/sprites/variant.ts b/src/sprites/variant.ts new file mode 100644 index 00000000000..7552f63b778 --- /dev/null +++ b/src/sprites/variant.ts @@ -0,0 +1,145 @@ +import { VariantTier } from "#app/enums/variant-tier"; +import { hasExpSprite } from "#app/sprites/sprite-utils"; +import { globalScene } from "#app/global-scene"; +import type Pokemon from "#app/field/pokemon"; +import { isNullOrUndefined } from "#app/utils"; + +export type Variant = 0 | 1 | 2; + +export type VariantSet = [Variant, Variant, Variant]; + +export const variantData: any = {}; + +/** Caches variant colors that have been generated */ +export const variantColorCache = {}; + +export function getVariantTint(variant: Variant): number { + switch (variant) { + case 0: + return 0xf8c020; + case 1: + return 0x20f8f0; + case 2: + return 0xe81048; + } +} + +export function getVariantIcon(variant: Variant): number { + switch (variant) { + case 0: + return VariantTier.STANDARD; + case 1: + return VariantTier.RARE; + case 2: + return VariantTier.EPIC; + } +} + +/** Delete all of the keys in variantData */ +export function clearVariantData(): void { + for (const key in variantData) { + delete variantData[key]; + } +} + +/** Update the variant data to use experiment sprite files for variants that have experimental sprites. */ +export async function mergeExperimentalData(mainData: any, expData: any): Promise { + if (!expData) { + return; + } + + for (const key of Object.keys(expData)) { + if (typeof expData[key] === "object" && !Array.isArray(expData[key])) { + // If the value is an object, recursively merge. + if (!mainData[key]) { + mainData[key] = {}; + } + mergeExperimentalData(mainData[key], expData[key]); + } else { + // Otherwise, replace the value + mainData[key] = expData[key]; + } + } +} + +/** + * Populate the variant color cache with the variant colors for this pokemon. + * The global scene must be initialized before this function is called. + */ +export async function populateVariantColors( + pokemon: Pokemon, + isBackSprite = false, + ignoreOverride = true, +): Promise { + const battleSpritePath = pokemon + .getBattleSpriteAtlasPath(isBackSprite, ignoreOverride) + .replace("variant/", "") + .replace(/_[1-3]$/, ""); + let config = variantData; + const useExpSprite = + globalScene.experimentalSprites && hasExpSprite(pokemon.getBattleSpriteKey(isBackSprite, ignoreOverride)); + battleSpritePath.split("/").map(p => (config ? (config = config[p]) : null)); + const variantSet: VariantSet = config as VariantSet; + if (!variantSet || variantSet[pokemon.variant] !== 1) { + return; + } + const cacheKey = pokemon.getBattleSpriteKey(isBackSprite); + if (!variantColorCache.hasOwnProperty(cacheKey)) { + await populateVariantColorCache(cacheKey, useExpSprite, battleSpritePath); + } +} + +/** + * Gracefully handle errors loading a variant sprite. Log if it fails and attempt to fall back on + * non-experimental sprites before giving up. + * + * @param cacheKey - The cache key for the variant color sprite + * @param attemptedSpritePath - The sprite path that failed to load + * @param useExpSprite - Was the attempted sprite experimental + * @param battleSpritePath - The filename of the sprite + * @param optionalParams - Any additional params to log + */ +async function fallbackVariantColor( + cacheKey: string, + attemptedSpritePath: string, + useExpSprite: boolean, + battleSpritePath: string, + ...optionalParams: any[] +): Promise { + console.warn(`Could not load ${attemptedSpritePath}!`, ...optionalParams); + if (useExpSprite) { + await populateVariantColorCache(cacheKey, false, battleSpritePath); + } +} + +/** + * Fetch a variant color sprite from the key and store it in the variant color cache. + * + * @param cacheKey - The cache key for the variant color sprite + * @param useExpSprite - Should the experimental sprite be used + * @param battleSpritePath - The filename of the sprite + */ +export async function populateVariantColorCache( + cacheKey: string, + useExpSprite: boolean, + battleSpritePath: string, +): Promise { + const spritePath = `./images/pokemon/variant/${useExpSprite ? "exp/" : ""}${battleSpritePath}.json`; + return globalScene + .cachedFetch(spritePath) + .then(res => { + // Prevent the JSON from processing if it failed to load + if (!res.ok) { + return fallbackVariantColor(cacheKey, res.url, useExpSprite, battleSpritePath, res.status, res.statusText); + } + return res.json(); + }) + .catch(error => { + return fallbackVariantColor(cacheKey, spritePath, useExpSprite, battleSpritePath, error); + }) + .then(c => { + if (!isNullOrUndefined(c)) { + variantColorCache[cacheKey] = c; + } + }); +} diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 391ceec503d..061a6d3a194 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -32,7 +32,7 @@ import { Tutorial } from "#app/tutorial"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { allMoves } from "#app/data/moves/move"; import { TrainerVariant } from "#app/field/trainer"; -import type { Variant } from "#app/data/variant"; +import type { Variant } from "#app/sprites/variant"; import { setSettingGamepad, SettingGamepad, settingGamepadDefaults } from "#app/system/settings/settings-gamepad"; import type { SettingKeyboard } from "#app/system/settings/settings-keyboard"; import { setSettingKeyboard } from "#app/system/settings/settings-keyboard"; diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index 957d43797a1..7cdcb0c72c3 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -7,7 +7,7 @@ import { getPokemonSpecies, getPokemonSpeciesForm } from "../data/pokemon-specie import { Status } from "../data/status-effect"; import Pokemon, { EnemyPokemon, PokemonMove, PokemonSummonData } from "../field/pokemon"; import { TrainerSlot } from "#enums/trainer-slot"; -import type { Variant } from "#app/data/variant"; +import type { Variant } from "#app/sprites/variant"; import { loadBattlerTag } from "../data/battler-tags"; import type { Biome } from "#enums/biome"; import { Moves } from "#enums/moves"; diff --git a/src/ui/battle-info.ts b/src/ui/battle-info.ts index 355ab9167a1..ab006269d4e 100644 --- a/src/ui/battle-info.ts +++ b/src/ui/battle-info.ts @@ -7,7 +7,7 @@ import { StatusEffect } from "#enums/status-effect"; import { globalScene } from "#app/global-scene"; import { getTypeRgb } from "#app/data/type"; import { PokemonType } from "#enums/pokemon-type"; -import { getVariantTint } from "#app/data/variant"; +import { getVariantTint } from "#app/sprites/variant"; import { Stat } from "#enums/stat"; import BattleFlyout from "./battle-flyout"; import { WindowVariant, addWindow } from "./ui-theme"; diff --git a/src/ui/hatched-pokemon-container.ts b/src/ui/hatched-pokemon-container.ts index 0b283c2e063..9d1c13e19d5 100644 --- a/src/ui/hatched-pokemon-container.ts +++ b/src/ui/hatched-pokemon-container.ts @@ -1,6 +1,6 @@ import type { EggHatchData } from "#app/data/egg-hatch-data"; import { Gender } from "#app/data/gender"; -import { getVariantTint } from "#app/data/variant"; +import { getVariantTint } from "#app/sprites/variant"; import { DexAttr } from "#app/system/game-data"; import { globalScene } from "#app/global-scene"; import type PokemonSpecies from "#app/data/pokemon-species"; diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index caddd64cd28..ebaccc515c1 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -18,7 +18,7 @@ import PokemonIconAnimHandler, { PokemonIconAnimMode } from "#app/ui/pokemon-ico import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { addWindow } from "#app/ui/ui-theme"; import { SpeciesFormChangeItemTrigger, FormChangeItem } from "#app/data/pokemon-forms"; -import { getVariantTint } from "#app/data/variant"; +import { getVariantTint } from "#app/sprites/variant"; import { Button } from "#enums/buttons"; import { applyChallenges, ChallengeType } from "#app/data/challenge"; import MoveInfoOverlay from "#app/ui/move-info-overlay"; diff --git a/src/ui/pokedex-mon-container.ts b/src/ui/pokedex-mon-container.ts index e61da86e95e..410effda40d 100644 --- a/src/ui/pokedex-mon-container.ts +++ b/src/ui/pokedex-mon-container.ts @@ -1,4 +1,4 @@ -import type { Variant } from "#app/data/variant"; +import type { Variant } from "#app/sprites/variant"; import { globalScene } from "#app/global-scene"; import { isNullOrUndefined } from "#app/utils"; import type PokemonSpecies from "../data/pokemon-species"; diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index 062b4c3797c..eede346f052 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -1,7 +1,7 @@ import type { SpeciesFormEvolution } from "#app/data/balance/pokemon-evolutions"; import { pokemonEvolutions, pokemonPrevolutions, pokemonStarters } from "#app/data/balance/pokemon-evolutions"; -import type { Variant } from "#app/data/variant"; -import { getVariantTint, getVariantIcon } from "#app/data/variant"; +import type { Variant } from "#app/sprites/variant"; +import { getVariantTint, getVariantIcon } from "#app/sprites/variant"; import { argbFromRgba } from "@material/material-color-utilities"; import i18next from "i18next"; import { starterColors } from "#app/battle-scene"; diff --git a/src/ui/pokedex-ui-handler.ts b/src/ui/pokedex-ui-handler.ts index 230b1bcb42b..59b06d476a2 100644 --- a/src/ui/pokedex-ui-handler.ts +++ b/src/ui/pokedex-ui-handler.ts @@ -1,5 +1,5 @@ -import type { Variant } from "#app/data/variant"; -import { getVariantTint, getVariantIcon } from "#app/data/variant"; +import type { Variant } from "#app/sprites/variant"; +import { getVariantTint, getVariantIcon } from "#app/sprites/variant"; import { argbFromRgba } from "@material/material-color-utilities"; import i18next from "i18next"; import { starterColors } from "#app/battle-scene"; diff --git a/src/ui/pokemon-info-container.ts b/src/ui/pokemon-info-container.ts index 56201f38748..1c880f6aec9 100644 --- a/src/ui/pokemon-info-container.ts +++ b/src/ui/pokemon-info-container.ts @@ -1,4 +1,4 @@ -import { getVariantTint } from "#app/data/variant"; +import { getVariantTint } from "#app/sprites/variant"; import type BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; import { globalScene } from "#app/global-scene"; import { Gender, getGenderColor, getGenderSymbol } from "../data/gender"; diff --git a/src/ui/run-info-ui-handler.ts b/src/ui/run-info-ui-handler.ts index 364cb8e4003..8719950381a 100644 --- a/src/ui/run-info-ui-handler.ts +++ b/src/ui/run-info-ui-handler.ts @@ -18,7 +18,7 @@ import { getTypeRgb } from "#app/data/type"; import { PokemonType } from "#enums/pokemon-type"; import { TypeColor, TypeShadow } from "#app/enums/color"; import { getNatureStatMultiplier, getNatureName } from "../data/nature"; -import { getVariantTint } from "#app/data/variant"; +import { getVariantTint } from "#app/sprites/variant"; import * as Modifier from "../modifier/modifier"; import type { Species } from "#enums/species"; import { PlayerGender } from "#enums/player-gender"; diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 1e84b367791..3876f2585db 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -1,8 +1,8 @@ import type { CandyUpgradeNotificationChangedEvent } from "#app/events/battle-scene"; import { BattleSceneEventType } from "#app/events/battle-scene"; import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; -import type { Variant } from "#app/data/variant"; -import { getVariantTint, getVariantIcon } from "#app/data/variant"; +import type { Variant } from "#app/sprites/variant"; +import { getVariantTint, getVariantIcon } from "#app/sprites/variant"; import { argbFromRgba } from "@material/material-color-utilities"; import i18next from "i18next"; import type BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index 9b209ded57a..aa3d014bd95 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -19,8 +19,8 @@ import { StatusEffect } from "#enums/status-effect"; import { getBiomeName } from "#app/data/balance/biomes"; import { getNatureName, getNatureStatMultiplier } from "#app/data/nature"; import { loggedInUser } from "#app/account"; -import type { Variant } from "#app/data/variant"; -import { getVariantTint } from "#app/data/variant"; +import type { Variant } from "#app/sprites/variant"; +import { getVariantTint } from "#app/sprites/variant"; import { Button } from "#enums/buttons"; import type { Ability } from "#app/data/ability"; import i18next from "i18next"; diff --git a/src/utils.ts b/src/utils.ts index 4092b68b405..2f05e2724ff 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -613,3 +613,25 @@ export function animationFileName(move: Moves): string { export function camelCaseToKebabCase(str: string): string { return str.replace(/[A-Z]+(?![a-z])|[A-Z]/g, (s, o) => (o ? "-" : "") + s.toLowerCase()); } + +/** + * Merges the two objects, such that for each property in `b` that matches a property in `a`, + * the value in `a` is replaced by the value in `b`. This is done recursively if the property is a non-array object + * + * If the property does not exist in `a` or its `typeof` evaluates differently, the property is skipped. + * If the value of the property is an array, the array is replaced. If it is any other object, the object is merged recursively. + */ +// biome-ignore lint/complexity/noBannedTypes: This function is designed to merge json objects +export function deepMergeObjects(a: Object, b: Object) { + for (const key in b) { + // !(key in a) is redundant here, yet makes it clear that we're explicitly interested in properties that exist in `a` + if (!(key in a) || typeof a[key] !== typeof b[key]) { + continue; + } + if (typeof b[key] === "object" && !Array.isArray(b[key])) { + deepMergeObjects(a[key], b[key]); + } else { + a[key] = b[key]; + } + } +} diff --git a/test/sprites/pokemonSprite.test.ts b/test/sprites/pokemonSprite.test.ts index 5bd08a58cda..a008b75b42e 100644 --- a/test/sprites/pokemonSprite.test.ts +++ b/test/sprites/pokemonSprite.test.ts @@ -3,8 +3,10 @@ import fs from "fs"; import path from "path"; import { beforeAll, describe, expect, it } from "vitest"; import _masterlist from "../../public/images/pokemon/variant/_masterlist.json"; +import _exp_masterlist from "../../public/images/pokemon/variant/_exp_masterlist.json"; type PokemonVariantMasterlist = typeof _masterlist; +type PokemonExpVariantMasterlist = typeof _exp_masterlist; const deepCopy = (data: any) => { return JSON.parse(JSON.stringify(data)); @@ -12,7 +14,7 @@ const deepCopy = (data: any) => { describe("check if every variant's sprite are correctly set", () => { let masterlist: PokemonVariantMasterlist; - let expVariant: PokemonVariantMasterlist["exp"]; + let expVariant: PokemonExpVariantMasterlist; let femaleVariant: PokemonVariantMasterlist["female"]; let backVariant: PokemonVariantMasterlist["back"]; let rootDir: string; @@ -20,13 +22,12 @@ describe("check if every variant's sprite are correctly set", () => { beforeAll(() => { rootDir = `${getAppRootDir()}${path.sep}public${path.sep}images${path.sep}pokemon${path.sep}variant${path.sep}`; masterlist = deepCopy(_masterlist); - expVariant = masterlist.exp; + expVariant = deepCopy(_exp_masterlist); femaleVariant = masterlist.female; backVariant = masterlist.back; - //@ts-ignore - delete masterlist.exp; //TODO: resolve ts-ignore - //@ts-ignore - delete masterlist.female; //TODO: resolve ts-ignore + + // @ts-ignore + delete masterlist.female; // TODO: resolve ts-ignore //@ts-ignore delete masterlist.back; //TODO: resolve ts-ignore }); diff --git a/test/testUtils/helpers/overridesHelper.ts b/test/testUtils/helpers/overridesHelper.ts index 9bb0369a31a..0ed1511255b 100644 --- a/test/testUtils/helpers/overridesHelper.ts +++ b/test/testUtils/helpers/overridesHelper.ts @@ -1,4 +1,4 @@ -import type { Variant } from "#app/data/variant"; +import type { Variant } from "#app/sprites/variant"; import { Weather } from "#app/data/weather"; import { Abilities } from "#app/enums/abilities"; import type { ModifierOverride } from "#app/modifier/modifier-type"; From 1a7442511c4011118172824a97bc627712887327 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Thu, 10 Apr 2025 23:22:42 -0700 Subject: [PATCH 016/262] [Bug] Fix Biome selection RNG (#5645) --- src/phases/select-biome-phase.ts | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/src/phases/select-biome-phase.ts b/src/phases/select-biome-phase.ts index 2d67cb87405..de705728c50 100644 --- a/src/phases/select-biome-phase.ts +++ b/src/phases/select-biome-phase.ts @@ -33,23 +33,19 @@ export class SelectBiomePhase extends BattlePhase { } else if (globalScene.gameMode.hasRandomBiomes) { setNextBiome(this.generateNextBiome()); } else if (Array.isArray(biomeLinks[currentBiome])) { - let biomes: Biome[] = []; - globalScene.executeWithSeedOffset(() => { - biomes = (biomeLinks[currentBiome] as (Biome | [Biome, number])[]) - .filter(b => !Array.isArray(b) || !randSeedInt(b[1])) - .map(b => (!Array.isArray(b) ? b : b[0])); - }, globalScene.currentBattle.waveIndex); + const biomes: Biome[] = (biomeLinks[currentBiome] as (Biome | [Biome, number])[]) + .filter(b => !Array.isArray(b) || !randSeedInt(b[1])) + .map(b => (!Array.isArray(b) ? b : b[0])); + if (biomes.length > 1 && globalScene.findModifier(m => m instanceof MapModifier)) { - let biomeChoices: Biome[] = []; - globalScene.executeWithSeedOffset(() => { - biomeChoices = ( - !Array.isArray(biomeLinks[currentBiome]) - ? [biomeLinks[currentBiome] as Biome] - : (biomeLinks[currentBiome] as (Biome | [Biome, number])[]) - ) - .filter(b => !Array.isArray(b) || !randSeedInt(b[1])) - .map(b => (Array.isArray(b) ? b[0] : b)); - }, globalScene.currentBattle.waveIndex); + const biomeChoices: Biome[] = ( + !Array.isArray(biomeLinks[currentBiome]) + ? [biomeLinks[currentBiome] as Biome] + : (biomeLinks[currentBiome] as (Biome | [Biome, number])[]) + ) + .filter(b => !Array.isArray(b) || !randSeedInt(b[1])) + .map(b => (Array.isArray(b) ? b[0] : b)); + const biomeSelectItems = biomeChoices.map(b => { const ret: OptionSelectItem = { label: getBiomeName(b), From 81f424dc71f25b58b6b460691a5c8ee0471ad8b0 Mon Sep 17 00:00:00 2001 From: Blitzy <118096277+Blitz425@users.noreply.github.com> Date: Fri, 11 Apr 2025 15:33:25 -0500 Subject: [PATCH 017/262] [Balance] Fix and Adjust TM Compatibility Curse Skill Swap Aqua Tail Zen Headbutt Hidden Power Tera Blast --- src/data/balance/tms.ts | 56 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/src/data/balance/tms.ts b/src/data/balance/tms.ts index 788ffd4f273..62199fd6968 100644 --- a/src/data/balance/tms.ts +++ b/src/data/balance/tms.ts @@ -19126,6 +19126,8 @@ export const tmSpecies: TmSpecies = { Species.KROOKODILE, Species.SCRAGGY, Species.SCRAFTY, + Species.YAMASK, + Species.COFAGRIGUS, Species.SAWSBUCK, Species.LITWICK, Species.LAMPENT, @@ -19163,6 +19165,7 @@ export const tmSpecies: TmSpecies = { Species.SINISTEA, Species.POLTEAGEIST, Species.PERRSERKER, + Species.RUNERIGUS, Species.PINCURCHIN, Species.STONJOURNER, Species.CUFANT, @@ -19228,6 +19231,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_SLOWBRO, Species.GALAR_WEEZING, Species.GALAR_SLOWKING, + Species.GALAR_YAMASK, Species.HISUI_ELECTRODE, Species.HISUI_TYPHLOSION, Species.HISUI_QWILFISH, @@ -30922,6 +30926,7 @@ export const tmSpecies: TmSpecies = { Species.MURKROW, Species.SLOWKING, Species.MISDREAVUS, + Species.UNOWN, Species.GIRAFARIG, Species.PINECO, Species.FORRETRESS, @@ -40134,6 +40139,8 @@ export const tmSpecies: TmSpecies = { Species.MEOWSTIC, Species.SPRITZEE, Species.AROMATISSE, + Species.INKAY, + Species.MALAMAR, Species.SYLVEON, Species.CARBINK, Species.PHANTUMP, @@ -49173,6 +49180,7 @@ export const tmSpecies: TmSpecies = { Species.KANGASKHAN, Species.GOLDEEN, Species.SEAKING, + Species.GYARADOS, Species.LAPRAS, Species.VAPOREON, Species.KABUTOPS, @@ -52587,6 +52595,7 @@ export const tmSpecies: TmSpecies = { Species.SNORLAX, Species.MEWTWO, Species.MEW, + Species.MEGANIUM, Species.CYNDAQUIL, Species.QUILAVA, Species.TYPHLOSION, @@ -66205,7 +66214,11 @@ export const tmSpecies: TmSpecies = { Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, + Species.CATERPIE, + Species.METAPOD, Species.BUTTERFREE, + Species.WEEDLE, + Species.KAKUNA, Species.BEEDRILL, Species.PIDGEY, Species.PIDGEOTTO, @@ -66451,7 +66464,10 @@ export const tmSpecies: TmSpecies = { Species.MIGHTYENA, Species.ZIGZAGOON, Species.LINOONE, + Species.WURMPLE, + Species.SILCOON, Species.BEAUTIFLY, + Species.CASCOON, Species.DUSTOX, Species.LOTAD, Species.LOMBRE, @@ -66987,6 +67003,8 @@ export const tmSpecies: TmSpecies = { Species.STAKATAKA, Species.BLACEPHALON, Species.ZERAORA, + Species.MELTAN, + Species.MELMETAL, Species.ALOLA_RATTATA, Species.ALOLA_RATICATE, Species.ALOLA_RAICHU, @@ -67020,8 +67038,19 @@ export const tmSpecies: TmSpecies = { Species.ROOKIDEE, Species.CORVISQUIRE, Species.CORVIKNIGHT, + Species.BLIPBUG, + Species.DOTTLER, + Species.ORBEETLE, + Species.NICKIT, + Species.THIEVUL, + Species.GOSSIFLEUR, + Species.ELDEGOSS, + Species.WOOLOO, + Species.DUBWOOL, Species.CHEWTLE, Species.DREDNAW, + Species.YAMPER, + Species.BOLTUND, Species.ROLYCOLY, Species.CARKOL, Species.COALOSSAL, @@ -67035,6 +67064,10 @@ export const tmSpecies: TmSpecies = { Species.BARRASKEWDA, Species.TOXEL, Species.TOXTRICITY, + Species.SIZZLIPEDE, + Species.CENTISKORCH, + Species.CLOBBOPUS, + Species.GRAPPLOCT, Species.SINISTEA, Species.POLTEAGEIST, Species.HATENNA, @@ -67043,7 +67076,14 @@ export const tmSpecies: TmSpecies = { Species.IMPIDIMP, Species.MORGREM, Species.GRIMMSNARL, + Species.OBSTAGOON, Species.PERRSERKER, + Species.CURSOLA, + Species.SIRFETCHD, + Species.MR_RIME, + Species.RUNERIGUS, + Species.MILCERY, + Species.ALCREMIE, Species.FALINKS, Species.PINCURCHIN, Species.SNOM, @@ -67054,6 +67094,11 @@ export const tmSpecies: TmSpecies = { Species.MORPEKO, Species.CUFANT, Species.COPPERAJAH, + Species.DRACOZOLT, + Species.ARCTOZOLT, + Species.DRACOVISH, + Species.ARCTOVISH, + Species.DURALUDON, Species.DREEPY, Species.DRAKLOAK, Species.DRAGAPULT, @@ -67195,13 +67240,24 @@ export const tmSpecies: TmSpecies = { Species.IRON_CROWN, Species.PECHARUNT, Species.GALAR_MEOWTH, + Species.GALAR_PONYTA, + Species.GALAR_RAPIDASH, Species.GALAR_SLOWPOKE, Species.GALAR_SLOWBRO, + Species.GALAR_FARFETCHD, Species.GALAR_WEEZING, + Species.GALAR_MR_MIME, Species.GALAR_ARTICUNO, Species.GALAR_ZAPDOS, Species.GALAR_MOLTRES, Species.GALAR_SLOWKING, + Species.GALAR_CORSOLA, + Species.GALAR_ZIGZAGOON, + Species.GALAR_LINOONE, + Species.GALAR_DARUMAKA, + Species.GALAR_DARMANITAN, + Species.GALAR_YAMASK, + Species.GALAR_STUNFISK, Species.HISUI_GROWLITHE, Species.HISUI_ARCANINE, Species.HISUI_VOLTORB, From 6f56dce7712c609dc78f7ff11650eb6a34f8f661 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Fri, 11 Apr 2025 22:31:56 -0700 Subject: [PATCH 018/262] [Biome] Add and apply `lint/style/noNamespaceImport` (#5650) * Add `lint/style/noNamespaceImport` Biome rule * Apply Biome rule, add exception for `*.test.ts` files --- biome.jsonc | 6 +- src/account.ts | 6 +- src/battle-scene.ts | 107 ++-- src/battle.ts | 34 +- src/data/ability.ts | 483 +++++++++--------- src/data/balance/biomes.ts | 10 +- src/data/balance/egg-moves.ts | 6 +- src/data/balance/pokemon-evolutions.ts | 6 +- src/data/battler-tags.ts | 4 +- src/data/berry.ts | 18 +- src/data/challenge.ts | 132 +++-- src/data/daily-run.ts | 14 +- src/data/egg.ts | 31 +- src/data/moves/move.ts | 316 ++++++------ .../mysterious-challengers-encounter.ts | 8 +- .../mystery-encounters/mystery-encounter.ts | 8 +- .../utils/encounter-phase-utils.ts | 23 +- src/data/nature.ts | 4 +- src/data/pokemon-species.ts | 20 +- src/data/trainer-names.ts | 4 +- src/data/trainers/trainer-config.ts | 36 +- src/data/weather.ts | 4 +- src/field/arena.ts | 23 +- src/field/damage-number-handler.ts | 30 +- src/field/pokemon-sprite-sparkle-handler.ts | 8 +- src/field/pokemon.ts | 236 +++++---- src/field/trainer.ts | 18 +- src/game-mode.ts | 8 +- src/inputs-controller.ts | 5 +- src/loading-scene.ts | 12 +- src/phases/move-effect-phase.ts | 58 +-- src/phases/revival-blessing-phase.ts | 6 +- src/phases/select-starter-phase.ts | 6 +- src/pipelines/field-sprite.ts | 4 +- src/pipelines/sprite.ts | 6 +- src/system/achv.ts | 8 +- src/system/game-data.ts | 25 +- src/system/game-speed.ts | 8 +- .../version_migration/version_converter.ts | 3 + src/ui/abstact-option-select-ui-handler.ts | 8 +- src/ui/arena-flyout.ts | 8 +- src/ui/base-stats-overlay.ts | 4 +- src/ui/battle-flyout.ts | 4 +- src/ui/battle-info.ts | 6 +- src/ui/bgm-bar.ts | 4 +- src/ui/candy-bar.ts | 6 +- src/ui/challenges-select-ui-handler.ts | 4 +- src/ui/char-sprite.ts | 4 +- src/ui/daily-run-scoreboard.ts | 8 +- src/ui/egg-gacha-ui-handler.ts | 14 +- src/ui/fight-ui-handler.ts | 12 +- src/ui/form-modal-ui-handler.ts | 4 +- src/ui/game-stats-ui-handler.ts | 8 +- src/ui/login-form-ui-handler.ts | 6 +- src/ui/menu-ui-handler.ts | 20 +- src/ui/message-ui-handler.ts | 6 +- src/ui/modifier-select-ui-handler.ts | 7 +- src/ui/move-info-overlay.ts | 14 +- src/ui/mystery-encounter-ui-handler.ts | 21 +- src/ui/party-ui-handler.ts | 10 +- src/ui/pokedex-info-overlay.ts | 10 +- src/ui/pokedex-page-ui-handler.ts | 6 +- src/ui/pokemon-hatch-info-container.ts | 8 +- src/ui/pokemon-icon-anim-handler.ts | 4 +- src/ui/pokemon-info-container.ts | 14 +- src/ui/run-history-ui-handler.ts | 8 +- src/ui/run-info-ui-handler.ts | 19 +- src/ui/save-slot-select-ui-handler.ts | 13 +- src/ui/saving-icon-handler.ts | 8 +- src/ui/starter-select-ui-handler.ts | 13 +- src/ui/summary-ui-handler.ts | 57 ++- src/ui/target-select-ui-handler.ts | 12 +- src/ui/time-of-day-widget.ts | 10 +- src/ui/title-ui-handler.ts | 12 +- src/ui/ui.ts | 4 +- src/ui/unavailable-modal-ui-handler.ts | 4 +- test/escape-calculations.test.ts | 10 +- test/items/exp_booster.test.ts | 4 +- test/items/leek.test.ts | 6 +- test/items/light_ball.test.ts | 18 +- test/items/metal_powder.test.ts | 10 +- test/items/quick_powder.test.ts | 10 +- test/items/thick_club.test.ts | 18 +- test/moves/multi_target.test.ts | 10 +- .../mystery-encounter/encounter-test-utils.ts | 1 + test/testUtils/gameWrapper.ts | 4 +- 86 files changed, 1112 insertions(+), 1103 deletions(-) diff --git a/biome.jsonc b/biome.jsonc index c5e1d713d86..da80d8ee127 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -65,7 +65,8 @@ "useDefaultParameterLast": "off", // TODO: Fix spots in the codebase where this flag would be triggered, and then enable "useSingleVarDeclarator": "off", "useNodejsImportProtocol": "off", - "useTemplate": "off" // string concatenation is faster: https://stackoverflow.com/questions/29055518/are-es6-template-literals-faster-than-string-concatenation + "useTemplate": "off", // string concatenation is faster: https://stackoverflow.com/questions/29055518/are-es6-template-literals-faster-than-string-concatenation + "noNamespaceImport": "error" }, "suspicious": { "noDoubleEquals": "error", @@ -99,6 +100,9 @@ "rules": { "performance": { "noDelete": "off" + }, + "style": { + "noNamespaceImport": "off" } } } diff --git a/src/account.ts b/src/account.ts index 96ce32714bb..7baa7d10a1a 100644 --- a/src/account.ts +++ b/src/account.ts @@ -1,11 +1,11 @@ import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; import type { UserInfo } from "#app/@types/UserInfo"; -import { bypassLogin } from "./battle-scene"; -import * as Utils from "./utils"; +import { bypassLogin } from "#app/battle-scene"; +import { randomString } from "#app/utils"; export let loggedInUser: UserInfo | null = null; // This is a random string that is used to identify the client session - unique per session (tab or window) so that the game will only save on the one that the server is expecting -export const clientSessionId = Utils.randomString(32); +export const clientSessionId = randomString(32); export function initLoggedInUser(): void { loggedInUser = { diff --git a/src/battle-scene.ts b/src/battle-scene.ts index acc8dafdd35..8ae2be5af43 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -5,9 +5,20 @@ import { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; import type { PokemonSpeciesFilter } from "#app/data/pokemon-species"; import type PokemonSpecies from "#app/data/pokemon-species"; import { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species"; -import type { Constructor } from "#app/utils"; -import { isNullOrUndefined, randSeedInt } from "#app/utils"; -import * as Utils from "#app/utils"; +import { + fixedInt, + deepMergeObjects, + getIvsFromId, + randSeedInt, + getEnumValues, + randomString, + NumberHolder, + shiftCharCodes, + formatMoney, + isNullOrUndefined, + BooleanHolder, + type Constructor, +} from "#app/utils"; import type { Modifier, ModifierPredicate, TurnHeldItemTransferModifier } from "./modifier/modifier"; import { ConsumableModifier, @@ -733,7 +744,7 @@ export default class BattleScene extends SceneBase { } this.playTimeTimer = this.time.addEvent({ - delay: Utils.fixedInt(1000), + delay: fixedInt(1000), repeat: -1, callback: () => { if (this.gameData) { @@ -783,7 +794,7 @@ export default class BattleScene extends SceneBase { return; } const expVariantData = await this.cachedFetch("./images/pokemon/variant/_exp_masterlist.json").then(r => r.json()); - Utils.deepMergeObjects(variantData, expVariantData); + deepMergeObjects(variantData, expVariantData); } cachedFetch(url: string, init?: RequestInit): Promise { @@ -988,7 +999,7 @@ export default class BattleScene extends SceneBase { } if (boss && !dataSource) { - const secondaryIvs = Utils.getIvsFromId(Utils.randSeedInt(4294967296)); + const secondaryIvs = getIvsFromId(randSeedInt(4294967296)); for (let s = 0; s < pokemon.ivs.length; s++) { pokemon.ivs[s] = Math.round( @@ -1147,7 +1158,7 @@ export default class BattleScene extends SceneBase { * Generates a random number using the current battle's seed * * This calls {@linkcode Battle.randSeedInt}({@linkcode range}, {@linkcode min}) in `src/battle.ts` - * which calls {@linkcode Utils.randSeedInt randSeedInt}({@linkcode range}, {@linkcode min}) in `src/utils.ts` + * which calls {@linkcode randSeedInt randSeedInt}({@linkcode range}, {@linkcode min}) in `src/utils.ts` * * @param range How large of a range of random numbers to choose from. If {@linkcode range} <= 1, returns {@linkcode min} * @param min The minimum integer to pick, default `0` @@ -1172,7 +1183,7 @@ export default class BattleScene extends SceneBase { this.lockModifierTiers = false; this.pokeballCounts = Object.fromEntries( - Utils.getEnumValues(PokeballType) + getEnumValues(PokeballType) .filter(p => p <= PokeballType.MASTER_BALL) .map(t => [t, 0]), ); @@ -1204,7 +1215,7 @@ export default class BattleScene extends SceneBase { // Reset RNG after end of game or save & quit. // This needs to happen after clearing this.currentBattle or the seed will be affected by the last wave played - this.setSeed(Overrides.SEED_OVERRIDE || Utils.randomString(24)); + this.setSeed(Overrides.SEED_OVERRIDE || randomString(24)); console.log("Seed:", this.seed); this.resetSeed(); @@ -1245,7 +1256,7 @@ export default class BattleScene extends SceneBase { ...allSpecies, ...allMoves, ...allAbilities, - ...Utils.getEnumValues(ModifierPoolType) + ...getEnumValues(ModifierPoolType) .map(mpt => getModifierPoolForType(mpt)) .flatMap(mp => Object.values(mp) @@ -1285,7 +1296,7 @@ export default class BattleScene extends SceneBase { } getDoubleBattleChance(newWaveIndex: number, playerField: PlayerPokemon[]) { - const doubleChance = new Utils.NumberHolder(newWaveIndex % 10 === 0 ? 32 : 8); + const doubleChance = new NumberHolder(newWaveIndex % 10 === 0 ? 32 : 8); this.applyModifiers(DoubleBattleChanceBoosterModifier, true, doubleChance); for (const p of playerField) { applyAbAttrs(DoubleBattleChanceAbAttr, p, null, false, doubleChance); @@ -1342,7 +1353,7 @@ export default class BattleScene extends SceneBase { if (trainerConfigs[trainerType].doubleOnly) { doubleTrainer = true; } else if (trainerConfigs[trainerType].hasDouble) { - doubleTrainer = !Utils.randSeedInt(this.getDoubleBattleChance(newWaveIndex, playerField)); + doubleTrainer = !randSeedInt(this.getDoubleBattleChance(newWaveIndex, playerField)); // Add a check that special trainers can't be double except for tate and liza - they should use the normal double chance if ( trainerConfigs[trainerType].trainerTypeDouble && @@ -1353,7 +1364,7 @@ export default class BattleScene extends SceneBase { } const variant = doubleTrainer ? TrainerVariant.DOUBLE - : Utils.randSeedInt(2) + : randSeedInt(2) ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT; newTrainer = trainerData !== undefined ? trainerData.toTrainer() : new Trainer(trainerType, variant); @@ -1371,7 +1382,7 @@ export default class BattleScene extends SceneBase { if (double === undefined && newWaveIndex > 1) { if (newBattleType === BattleType.WILD && !this.gameMode.isWaveFinal(newWaveIndex)) { - newDouble = !Utils.randSeedInt(this.getDoubleBattleChance(newWaveIndex, playerField)); + newDouble = !randSeedInt(this.getDoubleBattleChance(newWaveIndex, playerField)); } else if (newBattleType === BattleType.TRAINER) { newDouble = newTrainer?.variant === TrainerVariant.DOUBLE; } @@ -1559,7 +1570,7 @@ export default class BattleScene extends SceneBase { scale: scale, x: (defaultWidth - scaledWidth) / 2, y: defaultHeight - scaledHeight, - duration: !instant ? Utils.fixedInt(Math.abs(this.field.scale - scale) * 200) : 0, + duration: !instant ? fixedInt(Math.abs(this.field.scale - scale) * 200) : 0, ease: "Sine.easeInOut", onComplete: () => resolve(), }); @@ -1656,12 +1667,12 @@ export default class BattleScene extends SceneBase { case Species.SQUAWKABILLY: case Species.TATSUGIRI: case Species.PALDEA_TAUROS: - return Utils.randSeedInt(species.forms.length); + return randSeedInt(species.forms.length); case Species.PIKACHU: if (this.currentBattle?.battleType === BattleType.TRAINER && this.currentBattle?.waveIndex < 30) { return 0; // Ban Cosplay and Partner Pika from Trainers before wave 30 } - return Utils.randSeedInt(8); + return randSeedInt(8); case Species.EEVEE: if ( this.currentBattle?.battleType === BattleType.TRAINER && @@ -1670,22 +1681,22 @@ export default class BattleScene extends SceneBase { ) { return 0; // No Partner Eevee for Wave 12 Preschoolers } - return Utils.randSeedInt(2); + return randSeedInt(2); case Species.FROAKIE: case Species.FROGADIER: case Species.GRENINJA: if (this.currentBattle?.battleType === BattleType.TRAINER && !isEggPhase) { return 0; // Don't give trainers Battle Bond Greninja, Froakie or Frogadier } - return Utils.randSeedInt(2); + return randSeedInt(2); case Species.URSHIFU: - return Utils.randSeedInt(2); + return randSeedInt(2); case Species.ZYGARDE: - return Utils.randSeedInt(4); + return randSeedInt(4); case Species.MINIOR: - return Utils.randSeedInt(7); + return randSeedInt(7); case Species.ALCREMIE: - return Utils.randSeedInt(9); + return randSeedInt(9); case Species.MEOWSTIC: case Species.INDEEDEE: case Species.BASCULEGION: @@ -1716,7 +1727,7 @@ export default class BattleScene extends SceneBase { if (this.gameMode.hasMysteryEncounters && !isEggPhase) { return 1; // Wandering form } - return Utils.randSeedInt(species.forms.length); + return randSeedInt(species.forms.length); } if (ignoreArena) { @@ -1725,7 +1736,7 @@ export default class BattleScene extends SceneBase { case Species.WORMADAM: case Species.ROTOM: case Species.LYCANROC: - return Utils.randSeedInt(species.forms.length); + return randSeedInt(species.forms.length); } return 0; } @@ -1737,7 +1748,7 @@ export default class BattleScene extends SceneBase { let ret = false; this.executeWithSeedOffset( () => { - ret = !Utils.randSeedInt(2); + ret = !randSeedInt(2); }, 0, this.seed.toString(), @@ -1749,7 +1760,7 @@ export default class BattleScene extends SceneBase { let ret = 0; this.executeWithSeedOffset( () => { - ret = Utils.randSeedInt(8) * 5; + ret = randSeedInt(8) * 5; }, 0, this.seed.toString(), @@ -1778,7 +1789,7 @@ export default class BattleScene extends SceneBase { isBoss = waveIndex % 10 === 0 || (this.gameMode.hasRandomBosses && - Utils.randSeedInt(100) < Math.min(Math.max(Math.ceil((waveIndex - 250) / 50), 0) * 2, 30)); + randSeedInt(100) < Math.min(Math.max(Math.ceil((waveIndex - 250) / 50), 0) * 2, 30)); }, waveIndex << 2); } if (!isBoss) { @@ -1805,7 +1816,7 @@ export default class BattleScene extends SceneBase { const infectedIndexes: number[] = []; const spread = (index: number, spreadTo: number) => { const partyMember = party[index + spreadTo]; - if (!partyMember.pokerus && !Utils.randSeedInt(10)) { + if (!partyMember.pokerus && !randSeedInt(10)) { partyMember.pokerus = true; infectedIndexes.push(index + spreadTo); } @@ -1831,7 +1842,7 @@ export default class BattleScene extends SceneBase { resetSeed(waveIndex?: number): void { const wave = waveIndex || this.currentBattle?.waveIndex || 0; - this.waveSeed = Utils.shiftCharCodes(this.seed, wave); + this.waveSeed = shiftCharCodes(this.seed, wave); Phaser.Math.RND.sow([this.waveSeed]); console.log("Wave Seed:", this.waveSeed, wave); this.rngCounter = 0; @@ -1850,7 +1861,7 @@ export default class BattleScene extends SceneBase { const tempRngOffset = this.rngOffset; const tempRngSeedOverride = this.rngSeedOverride; const state = Phaser.Math.RND.state(); - Phaser.Math.RND.sow([Utils.shiftCharCodes(seedOverride || this.seed, offset)]); + Phaser.Math.RND.sow([shiftCharCodes(seedOverride || this.seed, offset)]); this.rngCounter = 0; this.rngOffset = offset; this.rngSeedOverride = seedOverride || ""; @@ -1995,7 +2006,7 @@ export default class BattleScene extends SceneBase { if (this.money === undefined) { return; } - const formattedMoney = Utils.formatMoney(this.moneyFormat, this.money); + const formattedMoney = formatMoney(this.moneyFormat, this.money); this.moneyText.setText(i18next.t("battleScene:moneyOwned", { formattedMoney })); this.fieldUI.moveAbove(this.moneyText, this.luckText); if (forceVisible) { @@ -2152,12 +2163,12 @@ export default class BattleScene extends SceneBase { ), ] : allSpecies.filter(s => s.isCatchable()); - return filteredSpecies[Utils.randSeedInt(filteredSpecies.length)]; + return filteredSpecies[randSeedInt(filteredSpecies.length)]; } generateRandomBiome(waveIndex: number): Biome { const relWave = waveIndex % 250; - const biomes = Utils.getEnumValues(Biome).filter(b => b !== Biome.TOWN && b !== Biome.END); + const biomes = getEnumValues(Biome).filter(b => b !== Biome.TOWN && b !== Biome.END); const maxDepth = biomeDepths[Biome.END][0] - 2; const depthWeights = new Array(maxDepth + 1) .fill(null) @@ -2169,7 +2180,7 @@ export default class BattleScene extends SceneBase { biomeThresholds.push(totalWeight); } - const randInt = Utils.randSeedInt(totalWeight); + const randInt = randSeedInt(totalWeight); for (let i = 0; i < biomes.length; i++) { if (randInt < biomeThresholds[i]) { @@ -2177,7 +2188,7 @@ export default class BattleScene extends SceneBase { } } - return biomes[Utils.randSeedInt(biomes.length)]; + return biomes[randSeedInt(biomes.length)]; } isBgmPlaying(): boolean { @@ -2362,7 +2373,7 @@ export default class BattleScene extends SceneBase { this.bgmResumeTimer.destroy(); } if (resumeBgm) { - this.bgmResumeTimer = this.time.delayedCall(pauseDuration || Utils.fixedInt(sound.totalDuration * 1000), () => { + this.bgmResumeTimer = this.time.delayedCall(pauseDuration || fixedInt(sound.totalDuration * 1000), () => { this.resumeBgm(); this.bgmResumeTimer = null; }); @@ -2955,7 +2966,7 @@ export default class BattleScene extends SceneBase { const args: unknown[] = []; if (modifier instanceof PokemonHpRestoreModifier) { if (!(modifier as PokemonHpRestoreModifier).fainted) { - const hpRestoreMultiplier = new Utils.NumberHolder(1); + const hpRestoreMultiplier = new NumberHolder(1); this.applyModifiers(HealingBoosterModifier, true, hpRestoreMultiplier); args.push(hpRestoreMultiplier.value); } else { @@ -2963,7 +2974,7 @@ export default class BattleScene extends SceneBase { } } else if (modifier instanceof FusePokemonModifier) { args.push(this.getPokemonById(modifier.fusePokemonId) as PlayerPokemon); - } else if (modifier instanceof RememberMoveModifier && !Utils.isNullOrUndefined(cost)) { + } else if (modifier instanceof RememberMoveModifier && !isNullOrUndefined(cost)) { args.push(cost); } @@ -3032,7 +3043,7 @@ export default class BattleScene extends SceneBase { itemLost = true, ): boolean { const source = itemModifier.pokemonId ? itemModifier.getPokemon() : null; - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); if (source && source.isPlayer() !== target.isPlayer()) { applyAbAttrs(BlockItemTheftAbAttr, source, cancelled); @@ -3101,7 +3112,7 @@ export default class BattleScene extends SceneBase { canTransferHeldItemModifier(itemModifier: PokemonHeldItemModifier, target: Pokemon, transferQuantity = 1): boolean { const mod = itemModifier.clone() as PokemonHeldItemModifier; const source = mod.pokemonId ? mod.getPokemon() : null; - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); if (source && source.isPlayer() !== target.isPlayer()) { applyAbAttrs(BlockItemTheftAbAttr, source, cancelled); @@ -3195,7 +3206,7 @@ export default class BattleScene extends SceneBase { } let count = 0; for (let c = 0; c < chances; c++) { - if (!Utils.randSeedInt(this.gameMode.getEnemyModifierChance(isBoss))) { + if (!randSeedInt(this.gameMode.getEnemyModifierChance(isBoss))) { count++; } } @@ -3371,7 +3382,7 @@ export default class BattleScene extends SceneBase { if (mods.length < 1) { return mods; } - const rand = Utils.randSeedInt(mods.length); + const rand = randSeedInt(mods.length); return [mods[rand], ...shuffleModifiers(mods.filter((_, i) => i !== rand))]; }; modifiers = shuffleModifiers(modifiers); @@ -3597,7 +3608,7 @@ export default class BattleScene extends SceneBase { */ initFinalBossPhaseTwo(pokemon: Pokemon): void { if (pokemon instanceof EnemyPokemon && pokemon.isBoss() && !pokemon.formIndex && pokemon.bossSegmentIndex < 1) { - this.fadeOutBgm(Utils.fixedInt(2000), false); + this.fadeOutBgm(fixedInt(2000), false); this.ui.showDialogue( battleSpecDialogue[BattleSpec.FINAL_BOSS].firstStageWin, pokemon.species.name, @@ -3700,7 +3711,7 @@ export default class BattleScene extends SceneBase { if (Overrides.XP_MULTIPLIER_OVERRIDE !== null) { expMultiplier = Overrides.XP_MULTIPLIER_OVERRIDE; } - const pokemonExp = new Utils.NumberHolder(expValue * expMultiplier); + const pokemonExp = new NumberHolder(expValue * expMultiplier); this.applyModifiers(PokemonExpBoosterModifier, true, partyMember, pokemonExp); partyMemberExp.push(Math.floor(pokemonExp.value)); } @@ -3849,7 +3860,7 @@ export default class BattleScene extends SceneBase { while (i < this.mysteryEncounterSaveData.queuedEncounters.length && !!encounter) { const candidate = this.mysteryEncounterSaveData.queuedEncounters[i]; const forcedChance = candidate.spawnPercent; - if (Utils.randSeedInt(100) < forcedChance) { + if (randSeedInt(100) < forcedChance) { encounter = allMysteryEncounters[candidate.type]; } @@ -3882,7 +3893,7 @@ export default class BattleScene extends SceneBase { } const totalWeight = tierWeights.reduce((a, b) => a + b); - const tierValue = Utils.randSeedInt(totalWeight); + const tierValue = randSeedInt(totalWeight); const commonThreshold = totalWeight - tierWeights[0]; const greatThreshold = totalWeight - tierWeights[0] - tierWeights[1]; const ultraThreshold = totalWeight - tierWeights[0] - tierWeights[1] - tierWeights[2]; @@ -3974,7 +3985,7 @@ export default class BattleScene extends SceneBase { console.log("No Mystery Encounters found, falling back to Mysterious Challengers."); return allMysteryEncounters[MysteryEncounterType.MYSTERIOUS_CHALLENGERS]; } - encounter = availableEncounters[Utils.randSeedInt(availableEncounters.length)]; + encounter = availableEncounters[randSeedInt(availableEncounters.length)]; // New encounter object to not dirty flags encounter = new MysteryEncounter(encounter); encounter.populateDialogueTokensFromRequirements(); diff --git a/src/battle.ts b/src/battle.ts index 367c52568dc..fb5af223b8f 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -1,6 +1,14 @@ import { globalScene } from "#app/global-scene"; import type { Command } from "./ui/command-ui-handler"; -import * as Utils from "./utils"; +import { + randomString, + getEnumValues, + NumberHolder, + randSeedInt, + shiftCharCodes, + randSeedItem, + randInt, +} from "#app/utils"; import Trainer, { TrainerVariant } from "./field/trainer"; import type { GameMode } from "./game-mode"; import { MoneyMultiplierModifier, PokemonHeldItemModifier } from "./modifier/modifier"; @@ -99,7 +107,7 @@ export default class Battle { public postBattleLoot: PokemonHeldItemModifier[] = []; public escapeAttempts = 0; public lastMove: Moves; - public battleSeed: string = Utils.randomString(16, true); + public battleSeed: string = randomString(16, true); private battleSeedState: string | null = null; public moneyScattered = 0; /** Primarily for double battles, keeps track of last enemy and player pokemon that triggered its ability or used a move */ @@ -181,8 +189,8 @@ export default class Battle { incrementTurn(): void { this.turn++; - this.turnCommands = Object.fromEntries(Utils.getEnumValues(BattlerIndex).map(bt => [bt, null])); - this.preTurnCommands = Object.fromEntries(Utils.getEnumValues(BattlerIndex).map(bt => [bt, null])); + this.turnCommands = Object.fromEntries(getEnumValues(BattlerIndex).map(bt => [bt, null])); + this.preTurnCommands = Object.fromEntries(getEnumValues(BattlerIndex).map(bt => [bt, null])); this.battleSeedState = null; } @@ -211,7 +219,7 @@ export default class Battle { } pickUpScatteredMoney(): void { - const moneyAmount = new Utils.NumberHolder(globalScene.currentBattle.moneyScattered); + const moneyAmount = new NumberHolder(globalScene.currentBattle.moneyScattered); globalScene.applyModifiers(MoneyMultiplierModifier, true, moneyAmount); if (globalScene.arena.getTag(ArenaTagType.HAPPY_HOUR)) { @@ -448,7 +456,7 @@ export default class Battle { } /** - * Generates a random number using the current battle's seed. Calls {@linkcode Utils.randSeedInt} + * Generates a random number using the current battle's seed. Calls {@linkcode randSeedInt} * @param range How large of a range of random numbers to choose from. If {@linkcode range} <= 1, returns {@linkcode min} * @param min The minimum integer to pick, default `0` * @returns A random integer between {@linkcode min} and ({@linkcode min} + {@linkcode range} - 1) @@ -463,12 +471,12 @@ export default class Battle { if (this.battleSeedState) { Phaser.Math.RND.state(this.battleSeedState); } else { - Phaser.Math.RND.sow([Utils.shiftCharCodes(this.battleSeed, this.turn << 6)]); + Phaser.Math.RND.sow([shiftCharCodes(this.battleSeed, this.turn << 6)]); console.log("Battle Seed:", this.battleSeed); } globalScene.rngCounter = this.rngCounter++; globalScene.rngSeedOverride = this.battleSeed; - const ret = Utils.randSeedInt(range, min); + const ret = randSeedInt(range, min); this.battleSeedState = Phaser.Math.RND.state(); Phaser.Math.RND.state(state); globalScene.rngCounter = tempRngCounter; @@ -554,19 +562,19 @@ export function getRandomTrainerFunc( seedOffset = 0, ): GetTrainerFunc { return () => { - const rand = Utils.randSeedInt(trainerPool.length); + const rand = randSeedInt(trainerPool.length); const trainerTypes: TrainerType[] = []; globalScene.executeWithSeedOffset(() => { for (const trainerPoolEntry of trainerPool) { - const trainerType = Array.isArray(trainerPoolEntry) ? Utils.randSeedItem(trainerPoolEntry) : trainerPoolEntry; + const trainerType = Array.isArray(trainerPoolEntry) ? randSeedItem(trainerPoolEntry) : trainerPoolEntry; trainerTypes.push(trainerType); } }, seedOffset); let trainerGender = TrainerVariant.DEFAULT; if (randomGender) { - trainerGender = Utils.randInt(2) === 0 ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT; + trainerGender = randInt(2) === 0 ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT; } /* 1/3 chance for evil team grunts to be double battles */ @@ -585,7 +593,7 @@ export function getRandomTrainerFunc( const isEvilTeamGrunt = evilTeamGrunts.includes(trainerTypes[rand]); if (trainerConfigs[trainerTypes[rand]].hasDouble && isEvilTeamGrunt) { - return new Trainer(trainerTypes[rand], Utils.randInt(3) === 0 ? TrainerVariant.DOUBLE : trainerGender); + return new Trainer(trainerTypes[rand], randInt(3) === 0 ? TrainerVariant.DOUBLE : trainerGender); } return new Trainer(trainerTypes[rand], trainerGender); @@ -608,7 +616,7 @@ export const classicFixedBattles: FixedBattleConfigs = { [ClassicFixedBossWaves.TOWN_YOUNGSTER]: new FixedBattleConfig() .setBattleType(BattleType.TRAINER) .setGetTrainerFunc( - () => new Trainer(TrainerType.YOUNGSTER, Utils.randSeedInt(2) ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT), + () => new Trainer(TrainerType.YOUNGSTER, randSeedInt(2) ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT), ), [ClassicFixedBossWaves.RIVAL_1]: new FixedBattleConfig() .setBattleType(BattleType.TRAINER) diff --git a/src/data/ability.ts b/src/data/ability.ts index f8c9b4cb8fe..b07f13c18e9 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -2,8 +2,7 @@ import type { EnemyPokemon, PokemonMove } from "../field/pokemon"; import type Pokemon from "../field/pokemon"; import { HitResult, MoveResult, PlayerPokemon } from "../field/pokemon"; import { PokemonType } from "#enums/pokemon-type"; -import type { Constructor } from "#app/utils"; -import * as Utils from "../utils"; +import { BooleanHolder, NumberHolder, toDmgValue, isNullOrUndefined, randSeedItem, randSeedInt, type Constructor } from "#app/utils"; import { getPokemonNameWithAffix } from "../messages"; import type { Weather } from "#app/data/weather"; import type { BattlerTag } from "./battler-tags"; @@ -196,7 +195,7 @@ export abstract class AbAttr { * @param args - Extra args passed to the function. Handled by child classes. * @see {@linkcode canApply} */ - apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder | null, args: any[]): void {} + apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder | null, args: any[]): void {} getTriggerMessage(_pokemon: Pokemon, _abilityName: string, ..._args: any[]): string | null { return null; @@ -230,7 +229,7 @@ export class BlockRecoilDamageAttr extends AbAttr { super(false); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } @@ -251,10 +250,10 @@ export class DoubleBattleChanceAbAttr extends AbAttr { /** * Increases the chance of a double battle occurring - * @param args [0] {@linkcode Utils.NumberHolder} for double battle chance + * @param args [0] {@linkcode NumberHolder} for double battle chance */ - override apply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _cancelled: Utils.BooleanHolder, args: any[]): void { - const doubleBattleChance = args[0] as Utils.NumberHolder; + override apply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _cancelled: BooleanHolder, args: any[]): void { + const doubleBattleChance = args[0] as NumberHolder; // This is divided because the chance is generated as a number from 0 to doubleBattleChance.value using Utils.randSeedInt // A double battle will initiate if the generated number is 0 doubleBattleChance.value = doubleBattleChance.value / 4; @@ -299,7 +298,7 @@ export class PostTeraFormChangeStatChangeAbAttr extends AbAttr { this.stages = stages; } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder | null, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder | null, args: any[]): void { const statStageChangePhases: StatStageChangePhase[] = []; if (!simulated) { @@ -331,7 +330,7 @@ export class ClearWeatherAbAttr extends AbAttr { return globalScene.arena.canSetWeather(WeatherType.NONE); } - public override apply(pokemon: Pokemon, passive: boolean, simulated:boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + public override apply(pokemon: Pokemon, passive: boolean, simulated:boolean, cancelled: BooleanHolder, args: any[]): void { if (!simulated) { globalScene.arena.trySetWeather(WeatherType.NONE, pokemon); } @@ -357,7 +356,7 @@ export class ClearTerrainAbAttr extends AbAttr { return globalScene.arena.canSetTerrain(TerrainType.NONE); } - public override apply(pokemon: Pokemon, passive: boolean, simulated:boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + public override apply(pokemon: Pokemon, passive: boolean, simulated:boolean, cancelled: BooleanHolder, args: any[]): void { if (!simulated) { globalScene.arena.trySetTerrain(TerrainType.NONE, true, pokemon); } @@ -373,7 +372,7 @@ export class PreDefendAbAttr extends AbAttr { simulated: boolean, attacker: Pokemon, move: Move | null, - cancelled: Utils.BooleanHolder | null, + cancelled: BooleanHolder | null, args: any[]): boolean { return true; } @@ -384,19 +383,19 @@ export class PreDefendAbAttr extends AbAttr { simulated: boolean, attacker: Pokemon, move: Move | null, - cancelled: Utils.BooleanHolder | null, + cancelled: BooleanHolder | null, args: any[], ): void {} } export class PreDefendFullHpEndureAbAttr extends PreDefendAbAttr { - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move | null, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move | null, cancelled: BooleanHolder | null, args: any[]): boolean { return pokemon.isFullHp() && pokemon.getMaxHp() > 1 //Checks if pokemon has wonder_guard (which forces 1hp) - && (args[0] as Utils.NumberHolder).value >= pokemon.hp; //Damage >= hp + && (args[0] as NumberHolder).value >= pokemon.hp; //Damage >= hp } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { if (!simulated) { pokemon.addTag(BattlerTagType.STURDY, 1); } @@ -404,7 +403,7 @@ export class PreDefendFullHpEndureAbAttr extends PreDefendAbAttr { } export class BlockItemTheftAbAttr extends AbAttr { - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } @@ -422,11 +421,11 @@ export class StabBoostAbAttr extends AbAttr { } override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - return (args[0] as Utils.NumberHolder).value > 1; + return (args[0] as NumberHolder).value > 1; } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[0] as Utils.NumberHolder).value += 0.5; + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + (args[0] as NumberHolder).value += 0.5; } } @@ -441,12 +440,12 @@ export class ReceivedMoveDamageMultiplierAbAttr extends PreDefendAbAttr { this.damageMultiplier = damageMultiplier; } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { return this.condition(pokemon, attacker, move); } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[0] as Utils.NumberHolder).value = Utils.toDmgValue((args[0] as Utils.NumberHolder).value * this.damageMultiplier); + override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { + (args[0] as NumberHolder).value = toDmgValue((args[0] as NumberHolder).value * this.damageMultiplier); } } @@ -465,11 +464,11 @@ export class AlliedFieldDamageReductionAbAttr extends PreDefendAbAttr { /** * Handles the damage reduction * @param args - * - `[0]` {@linkcode Utils.NumberHolder} - The damage being dealt + * - `[0]` {@linkcode NumberHolder} - The damage being dealt */ - override applyPreDefend(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _attacker: Pokemon, _move: Move, _cancelled: Utils.BooleanHolder, args: any[]): void { - const damage = args[0] as Utils.NumberHolder; - damage.value = Utils.toDmgValue(damage.value * this.damageMultiplier); + override applyPreDefend(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _attacker: Pokemon, _move: Move, _cancelled: BooleanHolder, args: any[]): void { + const damage = args[0] as NumberHolder; + damage.value = toDmgValue(damage.value * this.damageMultiplier); } } @@ -496,7 +495,7 @@ export class TypeImmunityAbAttr extends PreDefendAbAttr { this.condition = condition ?? null; } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { return ![ MoveTarget.BOTH_SIDES, MoveTarget.ENEMY_SIDE, MoveTarget.USER_SIDE ].includes(move.moveTarget) && attacker !== pokemon && attacker.getMoveType(move) === this.immuneType; } @@ -506,12 +505,12 @@ export class TypeImmunityAbAttr extends PreDefendAbAttr { * @param passive - Whether the ability is passive. * @param attacker {@linkcode Pokemon} The attacking Pokemon. * @param move {@linkcode Move} The attacking move. - * @param cancelled {@linkcode Utils.BooleanHolder} - A holder for a boolean value indicating if the move was cancelled. - * @param args [0] {@linkcode Utils.NumberHolder} gets set to 0 if move is immuned by an ability. + * @param cancelled {@linkcode BooleanHolder} - A holder for a boolean value indicating if the move was cancelled. + * @param args [0] {@linkcode NumberHolder} gets set to 0 if move is immuned by an ability. * @param args [1] - Whether the move is simulated. */ - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[0] as Utils.NumberHolder).value = 0; + override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { + (args[0] as NumberHolder).value = 0; } getImmuneType(): PokemonType | null { @@ -528,7 +527,7 @@ export class AttackTypeImmunityAbAttr extends TypeImmunityAbAttr { super(immuneType, condition); } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { return move.category !== MoveCategory.STATUS && !move.hasAttr(NeutralDamageAgainstFlyingTypeMultiplierAttr) && super.canApplyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); } @@ -538,7 +537,7 @@ export class AttackTypeImmunityAbAttr extends TypeImmunityAbAttr { * Type immunity abilities that do not give additional benefits (HP recovery, stat boosts, etc) are not immune to status moves of the type * Example: Levitate */ - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { // this is a hacky way to fix the Levitate/Thousand Arrows interaction, but it works for now... super.applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); } @@ -549,16 +548,16 @@ export class TypeImmunityHealAbAttr extends TypeImmunityAbAttr { super(immuneType); } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { return super.canApplyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { super.applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); if (!pokemon.isFullHp() && !simulated) { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; globalScene.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), - Utils.toDmgValue(pokemon.getMaxHp() / 4), i18next.t("abilityTriggers:typeImmunityHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }), true)); + toDmgValue(pokemon.getMaxHp() / 4), i18next.t("abilityTriggers:typeImmunityHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }), true)); cancelled.value = true; // Suppresses "No Effect" message } } @@ -575,11 +574,11 @@ class TypeImmunityStatStageChangeAbAttr extends TypeImmunityAbAttr { this.stages = stages; } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { return super.canApplyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { super.applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); cancelled.value = true; // Suppresses "No Effect" message if (!simulated) { @@ -599,11 +598,11 @@ class TypeImmunityAddBattlerTagAbAttr extends TypeImmunityAbAttr { this.turnCount = turnCount; } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { return super.canApplyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { super.applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); cancelled.value = true; // Suppresses "No Effect" message if (!simulated) { @@ -617,16 +616,16 @@ export class NonSuperEffectiveImmunityAbAttr extends TypeImmunityAbAttr { super(null, condition); } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { const modifierValue = args.length > 0 - ? (args[0] as Utils.NumberHolder).value + ? (args[0] as NumberHolder).value : pokemon.getAttackTypeEffectiveness(attacker.getMoveType(move), attacker, undefined, undefined, move); return move instanceof AttackMove && modifierValue < 2; } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; // Suppresses "No Effect" message - (args[0] as Utils.NumberHolder).value = 0; + (args[0] as NumberHolder).value = 0; } getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { @@ -644,9 +643,9 @@ export class NonSuperEffectiveImmunityAbAttr extends TypeImmunityAbAttr { */ export class FullHpResistTypeAbAttr extends PreDefendAbAttr { - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move | null, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move | null, cancelled: BooleanHolder | null, args: any[]): boolean { const typeMultiplier = args[0]; - return (typeMultiplier && typeMultiplier instanceof Utils.NumberHolder) && !(move && move.hasAttr(FixedDamageAttr)) && pokemon.isFullHp() && typeMultiplier.value > 0.5; + return (typeMultiplier && typeMultiplier instanceof NumberHolder) && !(move && move.hasAttr(FixedDamageAttr)) && pokemon.isFullHp() && typeMultiplier.value > 0.5; } /** @@ -665,7 +664,7 @@ export class FullHpResistTypeAbAttr extends PreDefendAbAttr { simulated: boolean, attacker: Pokemon, move: Move | null, - cancelled: Utils.BooleanHolder | null, + cancelled: BooleanHolder | null, args: any[]): void { const typeMultiplier = args[0]; typeMultiplier.value = 0.5; @@ -704,11 +703,11 @@ export class PostDefendAbAttr extends AbAttr { export class FieldPriorityMoveImmunityAbAttr extends PreDefendAbAttr { - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { return !(move.moveTarget === MoveTarget.USER || move.moveTarget === MoveTarget.NEAR_ALLY) && move.getPriority(attacker) > 0 && !move.isMultiTarget(); } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } } @@ -743,11 +742,11 @@ export class MoveImmunityAbAttr extends PreDefendAbAttr { this.immuneCondition = immuneCondition; } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { return this.immuneCondition(pokemon, attacker, move); } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } @@ -768,13 +767,13 @@ export class WonderSkinAbAttr extends PreDefendAbAttr { super(false); } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { - const moveAccuracy = args[0] as Utils.NumberHolder; + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { + const moveAccuracy = args[0] as NumberHolder; return move.category === MoveCategory.STATUS && moveAccuracy.value >= 50; } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): void { - const moveAccuracy = args[0] as Utils.NumberHolder; + override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { + const moveAccuracy = args[0] as NumberHolder; moveAccuracy.value = 50; } } @@ -789,11 +788,11 @@ export class MoveImmunityStatStageChangeAbAttr extends MoveImmunityAbAttr { this.stages = stages; } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { return !simulated && super.canApplyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { super.applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ this.stat ], this.stages)); } @@ -855,7 +854,7 @@ export class PostDefendStatStageChangeAbAttr extends PostDefendAbAttr { if (this.allOthers) { const ally = pokemon.getAlly(); - const otherPokemon = !Utils.isNullOrUndefined(ally) ? pokemon.getOpponents().concat([ ally ]) : pokemon.getOpponents(); + const otherPokemon = !isNullOrUndefined(ally) ? pokemon.getOpponents().concat([ ally ]) : pokemon.getOpponents(); for (const other of otherPokemon) { globalScene.unshiftPhase(new StatStageChangePhase((other).getBattlerIndex(), false, [ this.stat ], this.stages)); } @@ -1090,8 +1089,8 @@ export class PostDefendContactDamageAbAttr extends PostDefendAbAttr { } override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { - attacker.damageAndUpdate(Utils.toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)), { result: HitResult.INDIRECT }); - attacker.turnData.damageTaken += Utils.toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)); + attacker.damageAndUpdate(toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)), { result: HitResult.INDIRECT }); + attacker.turnData.damageTaken += toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)); } override getTriggerMessage(pokemon: Pokemon, abilityName: string, ..._args: any[]): string { @@ -1291,16 +1290,16 @@ export class MoveEffectChanceMultiplierAbAttr extends AbAttr { override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { const exceptMoves = [ Moves.ORDER_UP, Moves.ELECTRO_SHOT ]; - return !((args[0] as Utils.NumberHolder).value <= 0 || exceptMoves.includes((args[1] as Move).id)); + return !((args[0] as NumberHolder).value <= 0 || exceptMoves.includes((args[1] as Move).id)); } /** - * @param args [0]: {@linkcode Utils.NumberHolder} Move additional effect chance. Has to be higher than or equal to 0. + * @param args [0]: {@linkcode NumberHolder} Move additional effect chance. Has to be higher than or equal to 0. * [1]: {@linkcode Moves } Move used by the ability user. */ - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[0] as Utils.NumberHolder).value *= this.chanceMultiplier; - (args[0] as Utils.NumberHolder).value = Math.min((args[0] as Utils.NumberHolder).value, 100); + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + (args[0] as NumberHolder).value *= this.chanceMultiplier; + (args[0] as NumberHolder).value = Math.min((args[0] as NumberHolder).value, 100); } } @@ -1314,15 +1313,15 @@ export class IgnoreMoveEffectsAbAttr extends PreDefendAbAttr { super(showAbility); } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move | null, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { - return (args[0] as Utils.NumberHolder).value > 0; + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move | null, cancelled: BooleanHolder | null, args: any[]): boolean { + return (args[0] as NumberHolder).value > 0; } /** - * @param args [0]: {@linkcode Utils.NumberHolder} Move additional effect chance. + * @param args [0]: {@linkcode NumberHolder} Move additional effect chance. */ - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[0] as Utils.NumberHolder).value = 0; + override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { + (args[0] as NumberHolder).value = 0; } } @@ -1337,7 +1336,7 @@ export class FieldPreventExplosiveMovesAbAttr extends AbAttr { pokemon: Pokemon, passive: boolean, simulated: boolean, - cancelled: Utils.BooleanHolder, + cancelled: BooleanHolder, args: any[], ): void { cancelled.value = true; @@ -1349,7 +1348,7 @@ export class FieldPreventExplosiveMovesAbAttr extends AbAttr { * If this ability cannot stack, a BooleanHolder can be used to prevent this from stacking. * @see {@link applyFieldStatMultiplierAbAttrs} * @see {@link applyFieldStat} - * @see {@link Utils.BooleanHolder} + * @see {@link BooleanHolder} */ export class FieldMultiplyStatAbAttr extends AbAttr { private stat: Stat; @@ -1364,7 +1363,7 @@ export class FieldMultiplyStatAbAttr extends AbAttr { this.canStack = canStack; } - canApplyFieldStat(pokemon: Pokemon, passive: boolean, simulated: boolean, stat: Stat, statValue: Utils.NumberHolder, checkedPokemon: Pokemon, hasApplied: Utils.BooleanHolder, args: any[]): boolean { + canApplyFieldStat(pokemon: Pokemon, passive: boolean, simulated: boolean, stat: Stat, statValue: NumberHolder, checkedPokemon: Pokemon, hasApplied: BooleanHolder, args: any[]): boolean { return this.canStack || !hasApplied.value && this.stat === stat && checkedPokemon.getAbilityAttrs(FieldMultiplyStatAbAttr).every(attr => (attr as FieldMultiplyStatAbAttr).stat !== stat); } @@ -1374,12 +1373,12 @@ export class FieldMultiplyStatAbAttr extends AbAttr { * @param pokemon {@linkcode Pokemon} the Pokemon using this ability * @param passive {@linkcode boolean} unused * @param stat {@linkcode Stat} the type of the checked stat - * @param statValue {@linkcode Utils.NumberHolder} the value of the checked stat + * @param statValue {@linkcode NumberHolder} the value of the checked stat * @param checkedPokemon {@linkcode Pokemon} the Pokemon this ability is targeting - * @param hasApplied {@linkcode Utils.BooleanHolder} whether or not another multiplier has been applied to this stat + * @param hasApplied {@linkcode BooleanHolder} whether or not another multiplier has been applied to this stat * @param args {any[]} unused */ - applyFieldStat(pokemon: Pokemon, passive: boolean, simulated: boolean, stat: Stat, statValue: Utils.NumberHolder, checkedPokemon: Pokemon, hasApplied: Utils.BooleanHolder, args: any[]): void { + applyFieldStat(pokemon: Pokemon, passive: boolean, simulated: boolean, stat: Stat, statValue: NumberHolder, checkedPokemon: Pokemon, hasApplied: BooleanHolder, args: any[]): void { statValue.value *= this.multiplier; hasApplied.value = true; } @@ -1401,10 +1400,10 @@ export class MoveTypeChangeAbAttr extends PreAttackAbAttr { // TODO: Decouple this into two attributes (type change / power boost) override applyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, args: any[]): void { - if (args[0] && args[0] instanceof Utils.NumberHolder) { + if (args[0] && args[0] instanceof NumberHolder) { args[0].value = this.newType; } - if (args[1] && args[1] instanceof Utils.NumberHolder) { + if (args[1] && args[1] instanceof NumberHolder) { args[1].value *= this.powerMultiplier; } } @@ -1482,12 +1481,12 @@ export class AddSecondStrikeAbAttr extends PreAttackAbAttr { * @param defender n/a * @param move the {@linkcode Move} used by the ability source * @param args Additional arguments: - * - `[0]` the number of strikes this move currently has ({@linkcode Utils.NumberHolder}) - * - `[1]` the damage multiplier for the current strike ({@linkcode Utils.NumberHolder}) + * - `[0]` the number of strikes this move currently has ({@linkcode NumberHolder}) + * - `[1]` the damage multiplier for the current strike ({@linkcode NumberHolder}) */ override applyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, args: any[]): void { - const hitCount = args[0] as Utils.NumberHolder; - const multiplier = args[1] as Utils.NumberHolder; + const hitCount = args[0] as NumberHolder; + const multiplier = args[1] as NumberHolder; if (hitCount?.value) { hitCount.value += 1; } @@ -1527,8 +1526,8 @@ export class DamageBoostAbAttr extends PreAttackAbAttr { * @param args Utils.NumberHolder as damage */ override applyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, args: any[]): void { - const power = args[0] as Utils.NumberHolder; - power.value = Utils.toDmgValue(power.value * this.damageMultiplier); + const power = args[0] as NumberHolder; + power.value = toDmgValue(power.value * this.damageMultiplier); } } @@ -1547,7 +1546,7 @@ export class MovePowerBoostAbAttr extends VariableMovePowerAbAttr { } override applyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, args: any[]): void { - (args[0] as Utils.NumberHolder).value *= this.powerMultiplier; + (args[0] as NumberHolder).value *= this.powerMultiplier; } } @@ -1590,7 +1589,7 @@ export class VariableMovePowerBoostAbAttr extends VariableMovePowerAbAttr { override applyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, args: any[]): void { const multiplier = this.mult(pokemon, defender, move); - (args[0] as Utils.NumberHolder).value *= multiplier; + (args[0] as NumberHolder).value *= multiplier; } } @@ -1619,7 +1618,7 @@ export class FieldMovePowerBoostAbAttr extends AbAttr { applyPreAttack(pokemon: Pokemon | null, passive: boolean | null, simulated: boolean, defender: Pokemon | null, move: Move, args: any[]): void { if (this.condition(pokemon, defender, move)) { - (args[0] as Utils.NumberHolder).value *= this.powerMultiplier; + (args[0] as NumberHolder).value *= this.powerMultiplier; } } } @@ -1682,7 +1681,7 @@ export class StatMultiplierAbAttr extends AbAttr { _passive: boolean, simulated: boolean, stat: BattleStat, - statValue: Utils.NumberHolder, + statValue: NumberHolder, args: any[]): boolean { const move = (args[0] as Move); return stat === this.stat && (!this.condition || this.condition(pokemon, null, move)); @@ -1693,7 +1692,7 @@ export class StatMultiplierAbAttr extends AbAttr { _passive: boolean, simulated: boolean, stat: BattleStat, - statValue: Utils.NumberHolder, + statValue: NumberHolder, args: any[]): void { statValue.value *= this.multiplier; } @@ -1766,13 +1765,13 @@ export class AllyStatMultiplierAbAttr extends AbAttr { * @param passive - unused * @param _simulated - Whether the ability is being simulated (unused) * @param _stat - The type of the checked {@linkcode Stat} (unused) - * @param statValue - {@linkcode Utils.NumberHolder} containing the value of the checked stat + * @param statValue - {@linkcode NumberHolder} containing the value of the checked stat * @param _checkedPokemon - The {@linkcode Pokemon} this ability is targeting (unused) * @param _ignoreAbility - Whether the ability should be ignored if possible * @param _args - unused * @returns `true` if this changed the checked stat, `false` otherwise. */ - applyAllyStat(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _stat: BattleStat, statValue: Utils.NumberHolder, _checkedPokemon: Pokemon, _ignoreAbility: boolean, _args: any[]) { + applyAllyStat(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _stat: BattleStat, statValue: NumberHolder, _checkedPokemon: Pokemon, _ignoreAbility: boolean, _args: any[]) { statValue.value *= this.multiplier; } @@ -1782,13 +1781,13 @@ export class AllyStatMultiplierAbAttr extends AbAttr { * @param passive - unused * @param simulated - Whether the ability is being simulated (unused) * @param stat - The type of the checked {@linkcode Stat} - * @param statValue - {@linkcode Utils.NumberHolder} containing the value of the checked stat + * @param statValue - {@linkcode NumberHolder} containing the value of the checked stat * @param checkedPokemon - The {@linkcode Pokemon} this ability is targeting (unused) * @param ignoreAbility - Whether the ability should be ignored if possible * @param args - unused * @returns `true` if this can apply to the checked stat, `false` otherwise. */ - canApplyAllyStat(pokemon: Pokemon, _passive: boolean, simulated: boolean, stat: BattleStat, statValue: Utils.NumberHolder, checkedPokemon: Pokemon, ignoreAbility: boolean, args: any[]): boolean { + canApplyAllyStat(pokemon: Pokemon, _passive: boolean, simulated: boolean, stat: BattleStat, statValue: NumberHolder, checkedPokemon: Pokemon, ignoreAbility: boolean, args: any[]): boolean { return stat === this.stat && !(ignoreAbility && this.ignorable); } } @@ -2220,8 +2219,8 @@ export class IgnoreOpponentStatStagesAbAttr extends AbAttr { * @param _cancelled n/a * @param args A BooleanHolder that represents whether or not to ignore a stat's stat changes */ - override apply(_pokemon: Pokemon, _passive: boolean, simulated: boolean, _cancelled: Utils.BooleanHolder, args: any[]): void { - (args[1] as Utils.BooleanHolder).value = true; + override apply(_pokemon: Pokemon, _passive: boolean, simulated: boolean, _cancelled: BooleanHolder, args: any[]): void { + (args[1] as BooleanHolder).value = true; } } @@ -2230,7 +2229,7 @@ export class IntimidateImmunityAbAttr extends AbAttr { super(false); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } @@ -2254,7 +2253,7 @@ export class PostIntimidateStatStageChangeAbAttr extends AbAttr { this.overwrites = !!overwrites; } - override apply(pokemon: Pokemon, passive: boolean, simulated:boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated:boolean, cancelled: BooleanHolder, args: any[]): void { if (!simulated) { globalScene.pushPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), false, this.stats, this.stages)); } @@ -2461,7 +2460,7 @@ export class PostSummonStatStageChangeAbAttr extends PostSummonAbAttr { globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, this.stats, this.stages)); } else { for (const opponent of pokemon.getOpponents()) { - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); if (this.intimidate) { applyAbAttrs(IntimidateImmunityAbAttr, opponent, cancelled, simulated); applyAbAttrs(PostIntimidateStatStageChangeAbAttr, opponent, cancelled, simulated); @@ -2495,9 +2494,9 @@ export class PostSummonAllyHealAbAttr extends PostSummonAbAttr { override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { const target = pokemon.getAlly(); - if (!simulated && !Utils.isNullOrUndefined(target)) { + if (!simulated && !isNullOrUndefined(target)) { globalScene.unshiftPhase(new PokemonHealPhase(target.getBattlerIndex(), - Utils.toDmgValue(pokemon.getMaxHp() / this.healRatio), i18next.t("abilityTriggers:postSummonAllyHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(target), pokemonName: pokemon.name }), true, !this.showAnim)); + toDmgValue(pokemon.getMaxHp() / this.healRatio), i18next.t("abilityTriggers:postSummonAllyHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(target), pokemonName: pokemon.name }), true, !this.showAnim)); } } } @@ -2521,7 +2520,7 @@ export class PostSummonClearAllyStatStagesAbAttr extends PostSummonAbAttr { override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { const target = pokemon.getAlly(); - if (!simulated && !Utils.isNullOrUndefined(target)) { + if (!simulated && !isNullOrUndefined(target)) { for (const s of BATTLE_STATS) { target.setStatStage(s, 0); } @@ -2639,12 +2638,12 @@ export class PostSummonHealStatusAbAttr extends PostSummonRemoveEffectAbAttr { public override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { const status = pokemon.status?.effect; - return !Utils.isNullOrUndefined(status) && (this.immuneEffects.length < 1 || this.immuneEffects.includes(status)) + return !isNullOrUndefined(status) && (this.immuneEffects.length < 1 || this.immuneEffects.includes(status)) } public override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { const status = pokemon.status?.effect; - if (!Utils.isNullOrUndefined(status)) { + if (!isNullOrUndefined(status)) { this.statusHealed = status; pokemon.resetStatus(false); pokemon.updateInfo(); @@ -2692,7 +2691,7 @@ export class PostSummonCopyAbilityAbAttr extends PostSummonAbAttr { let target: Pokemon; if (targets.length > 1) { - globalScene.executeWithSeedOffset(() => target = Utils.randSeedItem(targets), globalScene.currentBattle.waveIndex); + globalScene.executeWithSeedOffset(() => target = randSeedItem(targets), globalScene.currentBattle.waveIndex); } else { target = targets[0]; } @@ -2779,7 +2778,7 @@ export class PostSummonCopyAllyStatsAbAttr extends PostSummonAbAttr { } const ally = pokemon.getAlly(); - if (Utils.isNullOrUndefined(ally) || ally.getStatStages().every(s => s === 0)) { + if (isNullOrUndefined(ally) || ally.getStatStages().every(s => s === 0)) { return false; } @@ -2788,7 +2787,7 @@ export class PostSummonCopyAllyStatsAbAttr extends PostSummonAbAttr { override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { const ally = pokemon.getAlly(); - if (!simulated && !Utils.isNullOrUndefined(ally)) { + if (!simulated && !isNullOrUndefined(ally)) { for (const s of BATTLE_STATS) { pokemon.setStatStage(s, ally.getStatStage(s)); } @@ -2825,7 +2824,7 @@ export class PostSummonTransformAbAttr extends PostSummonAbAttr { target = targets[0]; return; } - target = Utils.randSeedItem(targets); + target = randSeedItem(targets); }, globalScene.currentBattle.waveIndex); } else { target = targets[0]; @@ -2934,7 +2933,7 @@ export class CommanderAbAttr extends AbAttr { // TODO: Should this work with X + Dondozo fusions? const ally = pokemon.getAlly(); - return globalScene.currentBattle?.double && !Utils.isNullOrUndefined(ally) && ally.species.speciesId === Species.DONDOZO + return globalScene.currentBattle?.double && !isNullOrUndefined(ally) && ally.species.speciesId === Species.DONDOZO && !(ally.isFainted() || ally.getTag(BattlerTagType.COMMANDED)); } @@ -2970,7 +2969,7 @@ export class PreSwitchOutResetStatusAbAttr extends PreSwitchOutAbAttr { } override canApplyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - return !Utils.isNullOrUndefined(pokemon.status); + return !isNullOrUndefined(pokemon.status); } override applyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { @@ -3052,7 +3051,7 @@ export class PreSwitchOutHealAbAttr extends PreSwitchOutAbAttr { override applyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { if (!simulated) { - const healAmount = Utils.toDmgValue(pokemon.getMaxHp() * 0.33); + const healAmount = toDmgValue(pokemon.getMaxHp() * 0.33); pokemon.heal(healAmount); pokemon.updateInfo(); } @@ -3166,7 +3165,7 @@ export class PreStatStageChangeAbAttr extends AbAttr { passive: boolean, simulated: boolean, stat: BattleStat, - cancelled: Utils.BooleanHolder, + cancelled: BooleanHolder, args: any[]): boolean { return true; } @@ -3176,7 +3175,7 @@ export class PreStatStageChangeAbAttr extends AbAttr { passive: boolean, simulated: boolean, stat: BattleStat, - cancelled: Utils.BooleanHolder, + cancelled: BooleanHolder, args: any[], ): void {} } @@ -3195,10 +3194,10 @@ export class ReflectStatStageChangeAbAttr extends PreStatStageChangeAbAttr { * @param _passive N/A * @param simulated `true` if the ability is being simulated by the AI * @param stat the {@linkcode BattleStat} being affected - * @param cancelled The {@linkcode Utils.BooleanHolder} that will be set to true due to reflection + * @param cancelled The {@linkcode BooleanHolder} that will be set to true due to reflection * @param args */ - override applyPreStatStageChange(_pokemon: Pokemon, _passive: boolean, simulated: boolean, stat: BattleStat, cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreStatStageChange(_pokemon: Pokemon, _passive: boolean, simulated: boolean, stat: BattleStat, cancelled: BooleanHolder, args: any[]): void { const attacker: Pokemon = args[0]; const stages = args[1]; this.reflectedStat = stat; @@ -3230,8 +3229,8 @@ export class ProtectStatAbAttr extends PreStatStageChangeAbAttr { this.protectedStat = protectedStat; } - override canApplyPreStatStageChange(pokemon: Pokemon | null, passive: boolean, simulated: boolean, stat: BattleStat, cancelled: Utils.BooleanHolder, args: any[]): boolean { - return Utils.isNullOrUndefined(this.protectedStat) || stat === this.protectedStat; + override canApplyPreStatStageChange(pokemon: Pokemon | null, passive: boolean, simulated: boolean, stat: BattleStat, cancelled: BooleanHolder, args: any[]): boolean { + return isNullOrUndefined(this.protectedStat) || stat === this.protectedStat; } /** @@ -3240,10 +3239,10 @@ export class ProtectStatAbAttr extends PreStatStageChangeAbAttr { * @param _passive * @param simulated * @param stat the {@linkcode BattleStat} being affected - * @param cancelled The {@linkcode Utils.BooleanHolder} that will be set to true if the stat is protected + * @param cancelled The {@linkcode BooleanHolder} that will be set to true if the stat is protected * @param _args */ - override applyPreStatStageChange(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, stat: BattleStat, cancelled: Utils.BooleanHolder, _args: any[]): void { + override applyPreStatStageChange(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, stat: BattleStat, cancelled: BooleanHolder, _args: any[]): void { cancelled.value = true; } @@ -3302,7 +3301,7 @@ export class PreSetStatusAbAttr extends AbAttr { passive: boolean, simulated: boolean, effect: StatusEffect | undefined, - cancelled: Utils.BooleanHolder, + cancelled: BooleanHolder, args: any[]): boolean { return true; } @@ -3312,7 +3311,7 @@ export class PreSetStatusAbAttr extends AbAttr { passive: boolean, simulated: boolean, effect: StatusEffect | undefined, - cancelled: Utils.BooleanHolder, + cancelled: BooleanHolder, args: any[], ): void {} } @@ -3332,7 +3331,7 @@ export class PreSetStatusEffectImmunityAbAttr extends PreSetStatusAbAttr { this.immuneEffects = immuneEffects; } - override canApplyPreSetStatus(pokemon: Pokemon, passive: boolean, simulated: boolean, effect: StatusEffect, cancelled: Utils.BooleanHolder, args: any[]): boolean { + override canApplyPreSetStatus(pokemon: Pokemon, passive: boolean, simulated: boolean, effect: StatusEffect, cancelled: BooleanHolder, args: any[]): boolean { return effect !== StatusEffect.FAINT && this.immuneEffects.length < 1 || this.immuneEffects.includes(effect); } @@ -3345,7 +3344,7 @@ export class PreSetStatusEffectImmunityAbAttr extends PreSetStatusAbAttr { * @param cancelled - A holder for a boolean value indicating if the status application was cancelled. * @param args - n/a */ - override applyPreSetStatus(pokemon: Pokemon, passive: boolean, simulated: boolean, effect: StatusEffect, cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreSetStatus(pokemon: Pokemon, passive: boolean, simulated: boolean, effect: StatusEffect, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } @@ -3400,7 +3399,7 @@ export class ConditionalUserFieldStatusEffectImmunityAbAttr extends UserFieldSta * @param args `Args[0]` is the target of the status effect, `Args[1]` is the source. * @returns Whether the ability can be applied to cancel the status effect. */ - override canApplyPreSetStatus(pokemon: Pokemon, passive: boolean, simulated: boolean, effect: StatusEffect, cancelled: Utils.BooleanHolder, args: [Pokemon, Pokemon | null, ...any]): boolean { + override canApplyPreSetStatus(pokemon: Pokemon, passive: boolean, simulated: boolean, effect: StatusEffect, cancelled: BooleanHolder, args: [Pokemon, Pokemon | null, ...any]): boolean { return (!cancelled.value && effect !== StatusEffect.FAINT && this.immuneEffects.length < 1 || this.immuneEffects.includes(effect)) && this.condition(args[0], args[1]); } @@ -3438,12 +3437,12 @@ export class ConditionalUserFieldProtectStatAbAttr extends PreStatStageChangeAbA * @param args Args[0] is the target pokemon of the stat change. * @returns */ - override canApplyPreStatStageChange(pokemon: Pokemon, passive: boolean, simulated: boolean, stat: BattleStat, cancelled: Utils.BooleanHolder, args: [Pokemon, ...any]): boolean { + override canApplyPreStatStageChange(pokemon: Pokemon, passive: boolean, simulated: boolean, stat: BattleStat, cancelled: BooleanHolder, args: [Pokemon, ...any]): boolean { const target = args[0]; if (!target) { return false; } - return !cancelled.value && (Utils.isNullOrUndefined(this.protectedStat) || stat === this.protectedStat) && this.condition(target); + return !cancelled.value && (isNullOrUndefined(this.protectedStat) || stat === this.protectedStat) && this.condition(target); } /** @@ -3455,7 +3454,7 @@ export class ConditionalUserFieldProtectStatAbAttr extends PreStatStageChangeAbA * @param cancelled Will be set to true if the stat change is prevented * @param _args unused */ - override applyPreStatStageChange(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _stat: BattleStat, cancelled: Utils.BooleanHolder, _args: any[]): void { + override applyPreStatStageChange(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _stat: BattleStat, cancelled: BooleanHolder, _args: any[]): void { cancelled.value = true; } } @@ -3467,7 +3466,7 @@ export class PreApplyBattlerTagAbAttr extends AbAttr { passive: boolean, simulated: boolean, tag: BattlerTag, - cancelled: Utils.BooleanHolder, + cancelled: BooleanHolder, args: any[], ): boolean { return true; @@ -3478,7 +3477,7 @@ export class PreApplyBattlerTagAbAttr extends AbAttr { passive: boolean, simulated: boolean, tag: BattlerTag, - cancelled: Utils.BooleanHolder, + cancelled: BooleanHolder, args: any[], ): void {} } @@ -3496,13 +3495,13 @@ export class PreApplyBattlerTagImmunityAbAttr extends PreApplyBattlerTagAbAttr { this.immuneTagTypes = Array.isArray(immuneTagTypes) ? immuneTagTypes : [ immuneTagTypes ]; } - override canApplyPreApplyBattlerTag(pokemon: Pokemon, passive: boolean, simulated: boolean, tag: BattlerTag, cancelled: Utils.BooleanHolder, args: any[]): boolean { + override canApplyPreApplyBattlerTag(pokemon: Pokemon, passive: boolean, simulated: boolean, tag: BattlerTag, cancelled: BooleanHolder, args: any[]): boolean { this.battlerTag = tag; return !cancelled.value && this.immuneTagTypes.includes(tag.tagType); } - override applyPreApplyBattlerTag(pokemon: Pokemon, passive: boolean, simulated: boolean, tag: BattlerTag, cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreApplyBattlerTag(pokemon: Pokemon, passive: boolean, simulated: boolean, tag: BattlerTag, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } @@ -3540,7 +3539,7 @@ export class ConditionalUserFieldBattlerTagImmunityAbAttr extends UserFieldBattl * @param args Args[0] is the target that the tag is attempting to be applied to * @returns Whether the ability can be used to cancel the battler tag */ - override canApplyPreApplyBattlerTag(pokemon: Pokemon, passive: boolean, simulated: boolean, tag: BattlerTag, cancelled: Utils.BooleanHolder, args: [Pokemon, ...any]): boolean { + override canApplyPreApplyBattlerTag(pokemon: Pokemon, passive: boolean, simulated: boolean, tag: BattlerTag, cancelled: BooleanHolder, args: [Pokemon, ...any]): boolean { return super.canApplyPreApplyBattlerTag(pokemon, passive, simulated, tag, cancelled, args) && this.condition(args[0]); } @@ -3556,8 +3555,8 @@ export class BlockCritAbAttr extends AbAttr { super(false); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[0] as Utils.BooleanHolder).value = true; + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + (args[0] as BooleanHolder).value = true; } } @@ -3575,8 +3574,8 @@ export class BonusCritAbAttr extends AbAttr { * @param cancelled Unused * @param args Args[0] is a number holder containing the crit stage. */ - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: [Utils.NumberHolder, ...any]): void { - (args[0] as Utils.NumberHolder).value += 1; + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: [NumberHolder, ...any]): void { + (args[0] as NumberHolder).value += 1; } } @@ -3590,12 +3589,12 @@ export class MultCritAbAttr extends AbAttr { } override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - const critMult = args[0] as Utils.NumberHolder; + const critMult = args[0] as NumberHolder; return critMult.value > 1; } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - const critMult = args[0] as Utils.NumberHolder; + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + const critMult = args[0] as NumberHolder; critMult.value *= this.multAmount; } } @@ -3622,12 +3621,12 @@ export class ConditionalCritAbAttr extends AbAttr { /** * @param pokemon {@linkcode Pokemon} user. - * @param args [0] {@linkcode Utils.BooleanHolder} If true critical hit is guaranteed. + * @param args [0] {@linkcode BooleanHolder} If true critical hit is guaranteed. * [1] {@linkcode Pokemon} Target. * [2] {@linkcode Move} used by ability user. */ - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[0] as Utils.BooleanHolder).value = true; + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + (args[0] as BooleanHolder).value = true; } } @@ -3636,7 +3635,7 @@ export class BlockNonDirectDamageAbAttr extends AbAttr { super(false); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } } @@ -3666,16 +3665,16 @@ export class BlockStatusDamageAbAttr extends AbAttr { /** * @param {Pokemon} pokemon The pokemon with the ability * @param {boolean} passive N/A - * @param {Utils.BooleanHolder} cancelled Whether to cancel the status damage + * @param {BooleanHolder} cancelled Whether to cancel the status damage * @param {any[]} args N/A */ - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } } export class BlockOneHitKOAbAttr extends AbAttr { - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } } @@ -3704,8 +3703,8 @@ export class ChangeMovePriorityAbAttr extends AbAttr { return this.moveFunc(pokemon, args[0] as Move); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[1] as Utils.NumberHolder).value += this.changeAmount; + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + (args[1] as NumberHolder).value += this.changeAmount; } } @@ -3717,7 +3716,7 @@ export class PreWeatherEffectAbAttr extends AbAttr { passive: Boolean, simulated: boolean, weather: Weather | null, - cancelled: Utils.BooleanHolder, + cancelled: BooleanHolder, args: any[]): boolean { return true; } @@ -3727,7 +3726,7 @@ export class PreWeatherEffectAbAttr extends AbAttr { passive: boolean, simulated: boolean, weather: Weather | null, - cancelled: Utils.BooleanHolder, + cancelled: BooleanHolder, args: any[], ): void {} } @@ -3743,11 +3742,11 @@ export class BlockWeatherDamageAttr extends PreWeatherDamageAbAttr { this.weatherTypes = weatherTypes; } - override canApplyPreWeatherEffect(pokemon: Pokemon, passive: Boolean, simulated: boolean, weather: Weather, cancelled: Utils.BooleanHolder, args: any[]): boolean { + override canApplyPreWeatherEffect(pokemon: Pokemon, passive: Boolean, simulated: boolean, weather: Weather, cancelled: BooleanHolder, args: any[]): boolean { return !this.weatherTypes.length || this.weatherTypes.indexOf(weather?.weatherType) > -1; } - override applyPreWeatherEffect(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: Weather, cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreWeatherEffect(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: Weather, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } } @@ -3761,11 +3760,11 @@ export class SuppressWeatherEffectAbAttr extends PreWeatherEffectAbAttr { this.affectsImmutable = !!affectsImmutable; } - override canApplyPreWeatherEffect(pokemon: Pokemon, passive: Boolean, simulated: boolean, weather: Weather, cancelled: Utils.BooleanHolder, args: any[]): boolean { + override canApplyPreWeatherEffect(pokemon: Pokemon, passive: Boolean, simulated: boolean, weather: Weather, cancelled: BooleanHolder, args: any[]): boolean { return this.affectsImmutable || weather.isImmutable(); } - override applyPreWeatherEffect(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: Weather, cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreWeatherEffect(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: Weather, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } } @@ -4042,7 +4041,7 @@ export class PostWeatherLapseHealAbAttr extends PostWeatherLapseAbAttr { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; if (!simulated) { globalScene.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), - Utils.toDmgValue(pokemon.getMaxHp() / (16 / this.healFactor)), i18next.t("abilityTriggers:postWeatherLapseHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }), true)); + toDmgValue(pokemon.getMaxHp() / (16 / this.healFactor)), i18next.t("abilityTriggers:postWeatherLapseHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }), true)); } } } @@ -4064,7 +4063,7 @@ export class PostWeatherLapseDamageAbAttr extends PostWeatherLapseAbAttr { if (!simulated) { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; globalScene.queueMessage(i18next.t("abilityTriggers:postWeatherLapseDamage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName })); - pokemon.damageAndUpdate(Utils.toDmgValue(pokemon.getMaxHp() / (16 / this.damageFactor)), { result: HitResult.INDIRECT }); + pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / (16 / this.damageFactor)), { result: HitResult.INDIRECT }); } } } @@ -4132,7 +4131,7 @@ export class PostTurnStatusHealAbAttr extends PostTurnAbAttr { } override canApplyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - return !Utils.isNullOrUndefined(pokemon.status) && this.effects.includes(pokemon.status.effect) && !pokemon.isFullHp(); + return !isNullOrUndefined(pokemon.status) && this.effects.includes(pokemon.status.effect) && !pokemon.isFullHp(); } /** @@ -4144,7 +4143,7 @@ export class PostTurnStatusHealAbAttr extends PostTurnAbAttr { if (!simulated) { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; globalScene.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), - Utils.toDmgValue(pokemon.getMaxHp() / 8), i18next.t("abilityTriggers:poisonHeal", { pokemonName: getPokemonNameWithAffix(pokemon), abilityName }), true)); + toDmgValue(pokemon.getMaxHp() / 8), i18next.t("abilityTriggers:poisonHeal", { pokemonName: getPokemonNameWithAffix(pokemon), abilityName }), true)); } } } @@ -4168,7 +4167,7 @@ export class PostTurnResetStatusAbAttr extends PostTurnAbAttr { } else { this.target = pokemon; } - return !Utils.isNullOrUndefined(this.target?.status); + return !isNullOrUndefined(this.target?.status); } override applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { @@ -4224,7 +4223,7 @@ export class PostTurnLootAbAttr extends PostTurnAbAttr { return true; } - const randomIdx = Utils.randSeedInt(berriesEaten.length); + const randomIdx = randSeedInt(berriesEaten.length); const chosenBerryType = berriesEaten[randomIdx]; const chosenBerry = new BerryModifierType(chosenBerryType); berriesEaten.splice(randomIdx); // Remove berry from memory @@ -4312,7 +4311,7 @@ export class PostTurnHealAbAttr extends PostTurnAbAttr { if (!simulated) { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; globalScene.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), - Utils.toDmgValue(pokemon.getMaxHp() / 16), i18next.t("abilityTriggers:postTurnHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }), true)); + toDmgValue(pokemon.getMaxHp() / 16), i18next.t("abilityTriggers:postTurnHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }), true)); } } } @@ -4356,7 +4355,7 @@ export class PostTurnHurtIfSleepingAbAttr extends PostTurnAbAttr { for (const opp of pokemon.getOpponents()) { if ((opp.status?.effect === StatusEffect.SLEEP || opp.hasAbility(Abilities.COMATOSE)) && !opp.hasAbilityWithAttr(BlockNonDirectDamageAbAttr) && !opp.switchOutStatus) { if (!simulated) { - opp.damageAndUpdate(Utils.toDmgValue(opp.getMaxHp() / 8), { result: HitResult.INDIRECT }); + opp.damageAndUpdate(toDmgValue(opp.getMaxHp() / 8), { result: HitResult.INDIRECT }); globalScene.queueMessage(i18next.t("abilityTriggers:badDreams", { pokemonName: getPokemonNameWithAffix(opp) })); } } @@ -4375,7 +4374,7 @@ export class FetchBallAbAttr extends PostTurnAbAttr { } override canApplyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - return !simulated && !Utils.isNullOrUndefined(globalScene.currentBattle.lastUsedPokeball) && !!pokemon.isPlayer; + return !simulated && !isNullOrUndefined(globalScene.currentBattle.lastUsedPokeball) && !!pokemon.isPlayer; } /** @@ -4407,7 +4406,7 @@ export class PostBiomeChangeWeatherChangeAbAttr extends PostBiomeChangeAbAttr { return ((globalScene.arena.weather?.isImmutable() ?? false) && globalScene.arena.canSetWeather(this.weatherType)); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { if (!simulated) { globalScene.arena.trySetWeather(this.weatherType, pokemon); } @@ -4427,7 +4426,7 @@ export class PostBiomeChangeTerrainChangeAbAttr extends PostBiomeChangeAbAttr { return globalScene.arena.canSetTerrain(this.terrainType); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { if (!simulated) { globalScene.arena.trySetTerrain(this.terrainType, false, pokemon); } @@ -4562,8 +4561,8 @@ export class StatStageChangeMultiplierAbAttr extends AbAttr { this.multiplier = multiplier; } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[0] as Utils.NumberHolder).value *= this.multiplier; + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + (args[0] as NumberHolder).value *= this.multiplier; } } @@ -4572,7 +4571,7 @@ export class StatStageChangeCopyAbAttr extends AbAttr { pokemon: Pokemon, passive: boolean, simulated: boolean, - cancelled: Utils.BooleanHolder, + cancelled: BooleanHolder, args: any[], ): void { if (!simulated) { @@ -4586,7 +4585,7 @@ export class BypassBurnDamageReductionAbAttr extends AbAttr { super(false); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } } @@ -4605,21 +4604,21 @@ export class ReduceBurnDamageAbAttr extends AbAttr { * @param pokemon N/A * @param passive N/A * @param cancelled N/A - * @param args `[0]` {@linkcode Utils.NumberHolder} The damage value being modified + * @param args `[0]` {@linkcode NumberHolder} The damage value being modified */ - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[0] as Utils.NumberHolder).value = Utils.toDmgValue((args[0] as Utils.NumberHolder).value * this.multiplier); + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + (args[0] as NumberHolder).value = toDmgValue((args[0] as NumberHolder).value * this.multiplier); } } export class DoubleBerryEffectAbAttr extends AbAttr { - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[0] as Utils.NumberHolder).value *= 2; + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + (args[0] as NumberHolder).value *= 2; } } export class PreventBerryUseAbAttr extends AbAttr { - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } } @@ -4640,13 +4639,13 @@ export class HealFromBerryUseAbAttr extends AbAttr { this.healPercent = Math.max(Math.min(healPercent, 1), 0); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, ...args: [Utils.BooleanHolder, any[]]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, ...args: [BooleanHolder, any[]]): void { const { name: abilityName } = passive ? pokemon.getPassiveAbility() : pokemon.getAbility(); if (!simulated) { globalScene.unshiftPhase( new PokemonHealPhase( pokemon.getBattlerIndex(), - Utils.toDmgValue(pokemon.getMaxHp() * this.healPercent), + toDmgValue(pokemon.getMaxHp() * this.healPercent), i18next.t("abilityTriggers:healFromBerryUse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }), true ) @@ -4656,8 +4655,8 @@ export class HealFromBerryUseAbAttr extends AbAttr { } export class RunSuccessAbAttr extends AbAttr { - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[0] as Utils.NumberHolder).value = 256; + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + (args[0] as NumberHolder).value = 256; } } @@ -4681,7 +4680,7 @@ export class CheckTrappedAbAttr extends AbAttr { pokemon: Pokemon, passive: boolean, simulated: boolean, - trapped: Utils.BooleanHolder, + trapped: BooleanHolder, otherPokemon: Pokemon, args: any[]): boolean { return true; @@ -4691,7 +4690,7 @@ export class CheckTrappedAbAttr extends AbAttr { pokemon: Pokemon, passive: boolean, simulated: boolean, - trapped: Utils.BooleanHolder, + trapped: BooleanHolder, otherPokemon: Pokemon, args: any[], ): void {} @@ -4704,7 +4703,7 @@ export class CheckTrappedAbAttr extends AbAttr { * @see {@linkcode applyCheckTrapped} */ export class ArenaTrapAbAttr extends CheckTrappedAbAttr { - override canApplyCheckTrapped(pokemon: Pokemon, passive: boolean, simulated: boolean, trapped: Utils.BooleanHolder, otherPokemon: Pokemon, args: any[]): boolean { + override canApplyCheckTrapped(pokemon: Pokemon, passive: boolean, simulated: boolean, trapped: BooleanHolder, otherPokemon: Pokemon, args: any[]): boolean { return this.arenaTrapCondition(pokemon, otherPokemon) && !(otherPokemon.getTypes(true).includes(PokemonType.GHOST) || (otherPokemon.getTypes(true).includes(PokemonType.STELLAR) && otherPokemon.getTypes().includes(PokemonType.GHOST))) && !otherPokemon.hasAbility(Abilities.RUN_AWAY); @@ -4718,11 +4717,11 @@ export class ArenaTrapAbAttr extends CheckTrappedAbAttr { * If the user has Arena Trap and the enemy is not grounded, it is not trapped. * @param pokemon The {@link Pokemon} with this {@link AbAttr} * @param passive N/A - * @param trapped {@link Utils.BooleanHolder} indicating whether the other Pokemon is trapped or not + * @param trapped {@link BooleanHolder} indicating whether the other Pokemon is trapped or not * @param otherPokemon The {@link Pokemon} that is affected by an Arena Trap ability * @param args N/A */ - override applyCheckTrapped(pokemon: Pokemon, passive: boolean, simulated: boolean, trapped: Utils.BooleanHolder, otherPokemon: Pokemon, args: any[]): void { + override applyCheckTrapped(pokemon: Pokemon, passive: boolean, simulated: boolean, trapped: BooleanHolder, otherPokemon: Pokemon, args: any[]): void { trapped.value = true; } @@ -4736,8 +4735,8 @@ export class MaxMultiHitAbAttr extends AbAttr { super(false); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[0] as Utils.NumberHolder).value = 0; + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + (args[0] as NumberHolder).value = 0; } } @@ -4759,7 +4758,7 @@ export class PostBattleLootAbAttr extends PostBattleAbAttr { override canApplyPostBattle(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { const postBattleLoot = globalScene.currentBattle.postBattleLoot; if (!simulated && postBattleLoot.length && args[0]) { - this.randItem = Utils.randSeedItem(postBattleLoot); + this.randItem = randSeedItem(postBattleLoot); return globalScene.canTransferHeldItemModifier(this.randItem, pokemon, 1); } return false; @@ -4771,7 +4770,7 @@ export class PostBattleLootAbAttr extends PostBattleAbAttr { override applyPostBattle(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { const postBattleLoot = globalScene.currentBattle.postBattleLoot; if (!this.randItem) { - this.randItem = Utils.randSeedItem(postBattleLoot); + this.randItem = randSeedItem(postBattleLoot); } if (globalScene.tryTransferHeldItemModifier(this.randItem, pokemon, true, 1, true, undefined, false)) { @@ -4828,7 +4827,7 @@ export class PostFaintContactDamageAbAttr extends PostFaintAbAttr { override canApplyPostFaint(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker?: Pokemon, move?: Move, hitResult?: HitResult, ...args: any[]): boolean { const diedToDirectDamage = move !== undefined && attacker !== undefined && move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}); - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); globalScene.getField(true).map(p => applyAbAttrs(FieldPreventExplosiveMovesAbAttr, p, cancelled, simulated)); if (!diedToDirectDamage || cancelled.value || attacker!.hasAbilityWithAttr(BlockNonDirectDamageAbAttr)) { return false; @@ -4839,8 +4838,8 @@ export class PostFaintContactDamageAbAttr extends PostFaintAbAttr { override applyPostFaint(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker?: Pokemon, move?: Move, hitResult?: HitResult, ...args: any[]): void { if (!simulated) { - attacker!.damageAndUpdate(Utils.toDmgValue(attacker!.getMaxHp() * (1 / this.damageRatio)), { result: HitResult.INDIRECT }); - attacker!.turnData.damageTaken += Utils.toDmgValue(attacker!.getMaxHp() * (1 / this.damageRatio)); + attacker!.damageAndUpdate(toDmgValue(attacker!.getMaxHp() * (1 / this.damageRatio)), { result: HitResult.INDIRECT }); + attacker!.turnData.damageTaken += toDmgValue(attacker!.getMaxHp() * (1 / this.damageRatio)); } } @@ -4886,13 +4885,13 @@ export class RedirectMoveAbAttr extends AbAttr { if (!this.canRedirect(args[0] as Moves, args[2] as Pokemon)) { return false; } - const target = args[1] as Utils.NumberHolder; + const target = args[1] as NumberHolder; const newTarget = pokemon.getBattlerIndex(); return target.value !== newTarget; } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - const target = args[1] as Utils.NumberHolder; + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + const target = args[1] as NumberHolder; const newTarget = pokemon.getBattlerIndex(); target.value = newTarget; } @@ -4933,7 +4932,7 @@ export class ReduceStatusEffectDurationAbAttr extends AbAttr { } override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - return args[1] instanceof Utils.NumberHolder && args[0] === this.statusEffect; + return args[1] instanceof NumberHolder && args[0] === this.statusEffect; } /** @@ -4942,7 +4941,7 @@ export class ReduceStatusEffectDurationAbAttr extends AbAttr { * - `[0]` - The {@linkcode StatusEffect} of the Pokemon * - `[1]` - The number of turns remaining until the status is healed */ - override apply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _cancelled: BooleanHolder, args: any[]): void { args[1].value -= 1; } } @@ -4966,7 +4965,7 @@ export class FlinchStatStageChangeAbAttr extends FlinchEffectAbAttr { this.stages = stages; } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { if (!simulated) { globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, this.stats, this.stages)); } @@ -4976,7 +4975,7 @@ export class FlinchStatStageChangeAbAttr extends FlinchEffectAbAttr { export class IncreasePpAbAttr extends AbAttr { } export class ForceSwitchOutImmunityAbAttr extends AbAttr { - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } } @@ -4991,7 +4990,7 @@ export class ReduceBerryUseThresholdAbAttr extends AbAttr { return args[0].value < hpRatio; } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { args[0].value *= 2; } } @@ -5009,8 +5008,8 @@ export class WeightMultiplierAbAttr extends AbAttr { this.multiplier = multiplier; } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[0] as Utils.NumberHolder).value *= this.multiplier; + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + (args[0] as NumberHolder).value *= this.multiplier; } } @@ -5019,7 +5018,7 @@ export class SyncEncounterNatureAbAttr extends AbAttr { super(false); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { (args[0] as Pokemon).setNature(pokemon.getNature()); } } @@ -5037,7 +5036,7 @@ export class MoveAbilityBypassAbAttr extends AbAttr { return this.moveIgnoreFunc(pokemon, (args[0] as Move)); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } } @@ -5057,7 +5056,7 @@ export class InfiltratorAbAttr extends AbAttr { } override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - return args[0] instanceof Utils.BooleanHolder; + return args[0] instanceof BooleanHolder; } /** @@ -5066,7 +5065,7 @@ export class InfiltratorAbAttr extends AbAttr { * @param passive n/a * @param simulated n/a * @param cancelled n/a - * @param args `[0]` a {@linkcode Utils.BooleanHolder | BooleanHolder} containing the flag + * @param args `[0]` a {@linkcode BooleanHolder | BooleanHolder} containing the flag */ override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: null, args: any[]): void { const bypassed = args[0]; @@ -5107,7 +5106,7 @@ export class IgnoreTypeImmunityAbAttr extends AbAttr { return this.defenderType === (args[1] as PokemonType) && this.allowedMoveTypes.includes(args[0] as PokemonType); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } } @@ -5130,7 +5129,7 @@ export class IgnoreTypeStatusEffectImmunityAbAttr extends AbAttr { return this.statusEffect.includes(args[0] as StatusEffect) && this.defenderType.includes(args[1] as PokemonType); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } } @@ -5223,7 +5222,7 @@ export class FormBlockDamageAbAttr extends ReceivedMoveDamageMultiplierAbAttr { this.triggerMessageFunc = triggerMessageFunc; } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { return this.condition(pokemon, attacker, move) && !move.hitsSubstitute(attacker, pokemon); } @@ -5238,9 +5237,9 @@ export class FormBlockDamageAbAttr extends ReceivedMoveDamageMultiplierAbAttr { * @param _cancelled n/a * @param args Additional arguments. */ - override applyPreDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _cancelled: BooleanHolder, args: any[]): void { if (!simulated) { - (args[0] as Utils.NumberHolder).value = this.multiplier; + (args[0] as NumberHolder).value = this.multiplier; pokemon.removeTag(this.tagType); if (this.recoilDamageFunc) { pokemon.damageAndUpdate(this.recoilDamageFunc(pokemon), { result: HitResult.INDIRECT, ignoreSegments: true, ignoreFaintPhase: true }); @@ -5277,7 +5276,7 @@ export class BypassSpeedChanceAbAttr extends AbAttr { } override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - const bypassSpeed = args[0] as Utils.BooleanHolder; + const bypassSpeed = args[0] as BooleanHolder; const turnCommand = globalScene.currentBattle.turnCommands[pokemon.getBattlerIndex()]; const isCommandFight = turnCommand?.command === Command.FIGHT; const move = turnCommand?.move?.move ? allMoves[turnCommand.move.move] : null; @@ -5289,11 +5288,11 @@ export class BypassSpeedChanceAbAttr extends AbAttr { * bypass move order in their priority bracket when pokemon choose damaging move * @param {Pokemon} pokemon {@linkcode Pokemon} the Pokemon applying this ability * @param {boolean} passive N/A - * @param {Utils.BooleanHolder} cancelled N/A - * @param {any[]} args [0] {@linkcode Utils.BooleanHolder} set to true when the ability activated + * @param {BooleanHolder} cancelled N/A + * @param {any[]} args [0] {@linkcode BooleanHolder} set to true when the ability activated */ - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - const bypassSpeed = args[0] as Utils.BooleanHolder; + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + const bypassSpeed = args[0] as BooleanHolder; bypassSpeed.value = true; } @@ -5328,9 +5327,9 @@ export class PreventBypassSpeedChanceAbAttr extends AbAttr { * @argument {boolean} bypassSpeed - determines if a Pokemon is able to bypass speed at the moment * @argument {boolean} canCheckHeldItems - determines if a Pokemon has access to Quick Claw's effects or not */ - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - const bypassSpeed = args[0] as Utils.BooleanHolder; - const canCheckHeldItems = args[1] as Utils.BooleanHolder; + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + const bypassSpeed = args[0] as BooleanHolder; + const canCheckHeldItems = args[1] as BooleanHolder; bypassSpeed.value = false; canCheckHeldItems.value = false; } @@ -5349,7 +5348,7 @@ export class TerrainEventTypeChangeAbAttr extends PostSummonAbAttr { return !pokemon.isTerastallized; } - override apply(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _cancelled: Utils.BooleanHolder, _args: any[]): void { + override apply(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _cancelled: BooleanHolder, _args: any[]): void { const currentTerrain = globalScene.arena.getTerrainType(); const typeChange: PokemonType[] = this.determineTypeChange(pokemon, currentTerrain); if (typeChange.length !== 0) { @@ -5400,7 +5399,7 @@ export class TerrainEventTypeChangeAbAttr extends PostSummonAbAttr { * Checks if the Pokemon should change types if summoned into an active terrain */ override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { - this.apply(pokemon, passive, simulated, new Utils.BooleanHolder(false), []); + this.apply(pokemon, passive, simulated, new BooleanHolder(false), []); } override getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]) { @@ -5527,7 +5526,7 @@ class ForceSwitchOutHelper { if (switchOutTarget.hp > 0) { switchOutTarget.leaveField(false); globalScene.queueMessage(i18next.t("moveTriggers:fled", { pokemonName: getPokemonNameWithAffix(switchOutTarget) }), null, true, 500); - if (globalScene.currentBattle.double && !Utils.isNullOrUndefined(allyPokemon)) { + if (globalScene.currentBattle.double && !isNullOrUndefined(allyPokemon)) { globalScene.redirectPokemonMoves(switchOutTarget, allyPokemon); } } @@ -5556,7 +5555,7 @@ class ForceSwitchOutHelper { const player = switchOutTarget instanceof PlayerPokemon; if (player) { - const blockedByAbility = new Utils.BooleanHolder(false); + const blockedByAbility = new BooleanHolder(false); applyAbAttrs(ForceSwitchOutImmunityAbAttr, opponent, blockedByAbility); return !blockedByAbility.value; } @@ -5584,7 +5583,7 @@ class ForceSwitchOutHelper { * @returns The failure message, or `null` if no failure. */ public getFailedText(target: Pokemon): string | null { - const blockedByAbility = new Utils.BooleanHolder(false); + const blockedByAbility = new BooleanHolder(false); applyAbAttrs(ForceSwitchOutImmunityAbAttr, target, blockedByAbility); return blockedByAbility.value ? i18next.t("moveTriggers:cannotBeSwitchedOut", { pokemonName: getPokemonNameWithAffix(target) }) : null; } @@ -5603,7 +5602,7 @@ class ForceSwitchOutHelper { function calculateShellBellRecovery(pokemon: Pokemon): number { const shellBellModifier = pokemon.getHeldItems().find(m => m instanceof HitHealModifier); if (shellBellModifier) { - return Utils.toDmgValue(pokemon.turnData.totalDamageDealt / 8) * shellBellModifier.stackCount; + return toDmgValue(pokemon.turnData.totalDamageDealt / 8) * shellBellModifier.stackCount; } return 0; } @@ -5743,7 +5742,7 @@ function applyAbAttrsInternal( export function applyAbAttrs( attrType: Constructor, pokemon: Pokemon, - cancelled: Utils.BooleanHolder | null, + cancelled: BooleanHolder | null, simulated = false, ...args: any[] ): void { @@ -5778,7 +5777,7 @@ export function applyPreDefendAbAttrs( pokemon: Pokemon, attacker: Pokemon, move: Move | null, - cancelled: Utils.BooleanHolder | null, + cancelled: BooleanHolder | null, simulated = false, ...args: any[] ): void { @@ -5833,7 +5832,7 @@ export function applyStatMultiplierAbAttrs( attrType: Constructor, pokemon: Pokemon, stat: BattleStat, - statValue: Utils.NumberHolder, + statValue: NumberHolder, simulated = false, ...args: any[] ): void { @@ -5851,13 +5850,13 @@ export function applyStatMultiplierAbAttrs( * @param attrType - {@linkcode AllyStatMultiplierAbAttr} should always be AllyStatMultiplierAbAttr for the time being * @param pokemon - The {@linkcode Pokemon} with the ability * @param stat - The type of the checked {@linkcode Stat} - * @param statValue - {@linkcode Utils.NumberHolder} containing the value of the checked stat + * @param statValue - {@linkcode NumberHolder} containing the value of the checked stat * @param checkedPokemon - The {@linkcode Pokemon} with the checked stat * @param ignoreAbility - Whether or not the ability should be ignored by the pokemon or its move. * @param args - unused */ export function applyAllyStatMultiplierAbAttrs(attrType: Constructor, - pokemon: Pokemon, stat: BattleStat, statValue: Utils.NumberHolder, simulated: boolean = false, checkedPokemon: Pokemon, ignoreAbility: boolean, ...args: any[] + pokemon: Pokemon, stat: BattleStat, statValue: NumberHolder, simulated: boolean = false, checkedPokemon: Pokemon, ignoreAbility: boolean, ...args: any[] ): void { return applyAbAttrsInternal( attrType, @@ -5910,18 +5909,18 @@ export function applyPostDamageAbAttrs( * @param attrType {@linkcode FieldMultiplyStatAbAttr} should always be FieldMultiplyBattleStatAbAttr for the time being * @param pokemon {@linkcode Pokemon} the Pokemon applying this ability * @param stat {@linkcode Stat} the type of the checked stat - * @param statValue {@linkcode Utils.NumberHolder} the value of the checked stat + * @param statValue {@linkcode NumberHolder} the value of the checked stat * @param checkedPokemon {@linkcode Pokemon} the Pokemon with the checked stat - * @param hasApplied {@linkcode Utils.BooleanHolder} whether or not a FieldMultiplyBattleStatAbAttr has already affected this stat + * @param hasApplied {@linkcode BooleanHolder} whether or not a FieldMultiplyBattleStatAbAttr has already affected this stat * @param args unused */ export function applyFieldStatMultiplierAbAttrs( attrType: Constructor, pokemon: Pokemon, stat: Stat, - statValue: Utils.NumberHolder, + statValue: NumberHolder, checkedPokemon: Pokemon, - hasApplied: Utils.BooleanHolder, + hasApplied: BooleanHolder, simulated = false, ...args: any[] ): void { @@ -6055,7 +6054,7 @@ export function applyPreStatStageChangeAbAttrs, pokemon: Pokemon | null, stat: BattleStat, - cancelled: Utils.BooleanHolder, + cancelled: BooleanHolder, simulated = false, ...args: any[] ): void { @@ -6091,7 +6090,7 @@ export function applyPreSetStatusAbAttrs( attrType: Constructor, pokemon: Pokemon, effect: StatusEffect | undefined, - cancelled: Utils.BooleanHolder, + cancelled: BooleanHolder, simulated = false, ...args: any[] ): void { @@ -6109,7 +6108,7 @@ export function applyPreApplyBattlerTagAbAttrs( attrType: Constructor, pokemon: Pokemon, tag: BattlerTag, - cancelled: Utils.BooleanHolder, + cancelled: BooleanHolder, simulated = false, ...args: any[] ): void { @@ -6127,7 +6126,7 @@ export function applyPreWeatherEffectAbAttrs( attrType: Constructor, pokemon: Pokemon, weather: Weather | null, - cancelled: Utils.BooleanHolder, + cancelled: BooleanHolder, simulated = false, ...args: any[] ): void { @@ -6211,7 +6210,7 @@ export function applyPostTerrainChangeAbAttrs( export function applyCheckTrappedAbAttrs( attrType: Constructor, pokemon: Pokemon, - trapped: Utils.BooleanHolder, + trapped: BooleanHolder, otherPokemon: Pokemon, messages: string[], simulated = false, @@ -6539,7 +6538,7 @@ export function initAbilities() { .bypassFaint() .ignorable(), new Ability(Abilities.SHED_SKIN, 3) - .conditionalAttr(pokemon => !Utils.randSeedInt(3), PostTurnResetStatusAbAttr), + .conditionalAttr(pokemon => !randSeedInt(3), PostTurnResetStatusAbAttr), new Ability(Abilities.GUTS, 3) .attr(BypassBurnDamageReductionAbAttr) .conditionalAttr(pokemon => !!pokemon.status || pokemon.hasAbility(Abilities.COMATOSE), StatMultiplierAbAttr, Stat.ATK, 1.5), @@ -6661,7 +6660,7 @@ export function initAbilities() { .attr(ChangeMovePriorityAbAttr, (pokemon, move: Move) => true, -0.2), new Ability(Abilities.TECHNICIAN, 4) .attr(MovePowerBoostAbAttr, (user, target, move) => { - const power = new Utils.NumberHolder(move.power); + const power = new NumberHolder(move.power); applyMoveAttrs(VariablePowerAttr, user, target, move, power); return power.value <= 60; }, 1.5), @@ -6755,7 +6754,7 @@ export function initAbilities() { .attr(PostDefendMoveDisableAbAttr, 30) .bypassFaint(), new Ability(Abilities.HEALER, 5) - .conditionalAttr(pokemon => !Utils.isNullOrUndefined(pokemon.getAlly()) && Utils.randSeedInt(10) < 3, PostTurnResetStatusAbAttr, true), + .conditionalAttr(pokemon => !isNullOrUndefined(pokemon.getAlly()) && randSeedInt(10) < 3, PostTurnResetStatusAbAttr, true), new Ability(Abilities.FRIEND_GUARD, 5) .attr(AlliedFieldDamageReductionAbAttr, 0.75) .ignorable(), @@ -6809,7 +6808,7 @@ export function initAbilities() { new Ability(Abilities.ANALYTIC, 5) .attr(MovePowerBoostAbAttr, (user, target, move) => { const movePhase = globalScene.findPhase((phase) => phase instanceof MovePhase && phase.pokemon.id !== user?.id); - return Utils.isNullOrUndefined(movePhase); + return isNullOrUndefined(movePhase); }, 1.3), new Ability(Abilities.ILLUSION, 5) .uncopiable() @@ -7032,7 +7031,7 @@ export function initAbilities() { .attr(FormBlockDamageAbAttr, (target, user, move) => !!target.getTag(BattlerTagType.DISGUISE) && target.getMoveEffectiveness(user, move) > 0, 0, BattlerTagType.DISGUISE, (pokemon, abilityName) => i18next.t("abilityTriggers:disguiseAvoidedDamage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName: abilityName }), - (pokemon) => Utils.toDmgValue(pokemon.getMaxHp() / 8)) + (pokemon) => toDmgValue(pokemon.getMaxHp() / 8)) .attr(PostBattleInitFormChangeAbAttr, () => 0) .uncopiable() .unreplaceable() diff --git a/src/data/balance/biomes.ts b/src/data/balance/biomes.ts index 3dff1722af6..c722291c66d 100644 --- a/src/data/balance/biomes.ts +++ b/src/data/balance/biomes.ts @@ -1,5 +1,5 @@ import { PokemonType } from "#enums/pokemon-type"; -import * as Utils from "#app/utils"; +import { randSeedInt, getEnumValues } from "#app/utils"; import type { SpeciesFormEvolution } from "#app/data/balance/pokemon-evolutions"; import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import i18next from "i18next"; @@ -7710,7 +7710,7 @@ export function initBiomes() { if (biome === Biome.END) { const biomeList = Object.keys(Biome).filter(key => !Number.isNaN(Number(key))); biomeList.pop(); // Removes Biome.END from the list - const randIndex = Utils.randSeedInt(biomeList.length, 1); // Will never be Biome.TOWN + const randIndex = randSeedInt(biomeList.length, 1); // Will never be Biome.TOWN biome = Biome[biomeList[randIndex]]; } const linkedBiomes: (Biome | [ Biome, number ])[] = Array.isArray(biomeLinks[biome]) @@ -7733,15 +7733,15 @@ export function initBiomes() { traverseBiome(Biome.TOWN, 0); biomeDepths[Biome.END] = [ Object.values(biomeDepths).map(d => d[0]).reduce((max: number, value: number) => Math.max(max, value), 0) + 1, 1 ]; - for (const biome of Utils.getEnumValues(Biome)) { + for (const biome of getEnumValues(Biome)) { biomePokemonPools[biome] = {}; biomeTrainerPools[biome] = {}; - for (const tier of Utils.getEnumValues(BiomePoolTier)) { + for (const tier of getEnumValues(BiomePoolTier)) { biomePokemonPools[biome][tier] = {}; biomeTrainerPools[biome][tier] = []; - for (const tod of Utils.getEnumValues(TimeOfDay)) { + for (const tod of getEnumValues(TimeOfDay)) { biomePokemonPools[biome][tier][tod] = []; } } diff --git a/src/data/balance/egg-moves.ts b/src/data/balance/egg-moves.ts index 19038ad824c..74f6a2c1afb 100644 --- a/src/data/balance/egg-moves.ts +++ b/src/data/balance/egg-moves.ts @@ -1,5 +1,5 @@ import { allMoves } from "#app/data/moves/move"; -import * as Utils from "#app/utils"; +import { getEnumKeys, getEnumValues } from "#app/utils"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; @@ -587,8 +587,8 @@ export const speciesEggMoves = { function parseEggMoves(content: string): void { let output = ""; - const speciesNames = Utils.getEnumKeys(Species); - const speciesValues = Utils.getEnumValues(Species); + const speciesNames = getEnumKeys(Species); + const speciesValues = getEnumValues(Species); const lines = content.split(/\n/g); for (const line of lines) { diff --git a/src/data/balance/pokemon-evolutions.ts b/src/data/balance/pokemon-evolutions.ts index e49bd049cd6..17f71f3c3c9 100644 --- a/src/data/balance/pokemon-evolutions.ts +++ b/src/data/balance/pokemon-evolutions.ts @@ -3,7 +3,7 @@ import { Gender } from "#app/data/gender"; import { PokeballType } from "#enums/pokeball"; import type Pokemon from "#app/field/pokemon"; import { PokemonType } from "#enums/pokemon-type"; -import * as Utils from "#app/utils"; +import { randSeedInt } from "#app/utils"; import { WeatherType } from "#enums/weather-type"; import { Nature } from "#enums/nature"; import { Biome } from "#enums/biome"; @@ -333,7 +333,7 @@ class DunsparceEvolutionCondition extends SpeciesEvolutionCondition { super(p => { let ret = false; if (p.moveset.filter(m => m.moveId === Moves.HYPER_DRILL).length > 0) { - globalScene.executeWithSeedOffset(() => ret = !Utils.randSeedInt(4), p.id); + globalScene.executeWithSeedOffset(() => ret = !randSeedInt(4), p.id); } return ret; }); @@ -346,7 +346,7 @@ class TandemausEvolutionCondition extends SpeciesEvolutionCondition { constructor() { super(p => { let ret = false; - globalScene.executeWithSeedOffset(() => ret = !Utils.randSeedInt(4), p.id); + globalScene.executeWithSeedOffset(() => ret = !randSeedInt(4), p.id); return ret; }); } diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 546dbb4a3db..76e91485460 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -42,7 +42,7 @@ import { Species } from "#enums/species"; import { EFFECTIVE_STATS, getStatKey, Stat, type BattleStat, type EffectiveStat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; import { WeatherType } from "#enums/weather-type"; -import * as Utils from "../utils"; +import { isNullOrUndefined } from "#app/utils"; export enum BattlerTagLapseType { FAINT, @@ -302,7 +302,7 @@ export class DisabledTag extends MoveRestrictionBattlerTag { super.onAdd(pokemon); const move = pokemon.getLastXMoves(-1).find(m => !m.virtual); - if (Utils.isNullOrUndefined(move) || move.move === Moves.STRUGGLE || move.move === Moves.NONE) { + if (isNullOrUndefined(move) || move.move === Moves.STRUGGLE || move.move === Moves.NONE) { return; } diff --git a/src/data/berry.ts b/src/data/berry.ts index 13820b1277b..8a58d337aa4 100644 --- a/src/data/berry.ts +++ b/src/data/berry.ts @@ -2,7 +2,7 @@ import { getPokemonNameWithAffix } from "../messages"; import type Pokemon from "../field/pokemon"; import { HitResult } from "../field/pokemon"; import { getStatusEffectHealText } from "./status-effect"; -import * as Utils from "../utils"; +import { NumberHolder, toDmgValue, randSeedInt } from "#app/utils"; import { DoubleBerryEffectAbAttr, PostItemLostAbAttr, @@ -43,7 +43,7 @@ export function getBerryPredicate(berryType: BerryType): BerryPredicate { case BerryType.APICOT: case BerryType.SALAC: return (pokemon: Pokemon) => { - const threshold = new Utils.NumberHolder(0.25); + const threshold = new NumberHolder(0.25); // Offset BerryType such that LIECHI -> Stat.ATK = 1, GANLON -> Stat.DEF = 2, so on and so forth const stat: BattleStat = berryType - BerryType.ENIGMA; applyAbAttrs(ReduceBerryUseThresholdAbAttr, pokemon, null, false, threshold); @@ -51,19 +51,19 @@ export function getBerryPredicate(berryType: BerryType): BerryPredicate { }; case BerryType.LANSAT: return (pokemon: Pokemon) => { - const threshold = new Utils.NumberHolder(0.25); + const threshold = new NumberHolder(0.25); applyAbAttrs(ReduceBerryUseThresholdAbAttr, pokemon, null, false, threshold); return pokemon.getHpRatio() < 0.25 && !pokemon.getTag(BattlerTagType.CRIT_BOOST); }; case BerryType.STARF: return (pokemon: Pokemon) => { - const threshold = new Utils.NumberHolder(0.25); + const threshold = new NumberHolder(0.25); applyAbAttrs(ReduceBerryUseThresholdAbAttr, pokemon, null, false, threshold); return pokemon.getHpRatio() < 0.25; }; case BerryType.LEPPA: return (pokemon: Pokemon) => { - const threshold = new Utils.NumberHolder(0.25); + const threshold = new NumberHolder(0.25); applyAbAttrs(ReduceBerryUseThresholdAbAttr, pokemon, null, false, threshold); return !!pokemon.getMoveset().find(m => !m.getPpRatio()); }; @@ -80,7 +80,7 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { if (pokemon.battleData) { pokemon.battleData.berriesEaten.push(berryType); } - const hpHealed = new Utils.NumberHolder(Utils.toDmgValue(pokemon.getMaxHp() / 4)); + const hpHealed = new NumberHolder(toDmgValue(pokemon.getMaxHp() / 4)); applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, false, hpHealed); globalScene.unshiftPhase( new PokemonHealPhase( @@ -118,7 +118,7 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { } // Offset BerryType such that LIECHI -> Stat.ATK = 1, GANLON -> Stat.DEF = 2, so on and so forth const stat: BattleStat = berryType - BerryType.ENIGMA; - const statStages = new Utils.NumberHolder(1); + const statStages = new NumberHolder(1); applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, false, statStages); globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [stat], statStages.value)); applyPostItemLostAbAttrs(PostItemLostAbAttr, berryOwner ?? pokemon, false); @@ -136,8 +136,8 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { if (pokemon.battleData) { pokemon.battleData.berriesEaten.push(berryType); } - const randStat = Utils.randSeedInt(Stat.SPD, Stat.ATK); - const stages = new Utils.NumberHolder(2); + const randStat = randSeedInt(Stat.SPD, Stat.ATK); + const stages = new NumberHolder(2); applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, false, stages); globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [randStat], stages.value)); applyPostItemLostAbAttrs(PostItemLostAbAttr, berryOwner ?? pokemon, false); diff --git a/src/data/challenge.ts b/src/data/challenge.ts index 868fc7d2e60..51616c3f00f 100644 --- a/src/data/challenge.ts +++ b/src/data/challenge.ts @@ -1,4 +1,4 @@ -import * as Utils from "#app/utils"; +import { BooleanHolder, type NumberHolder, randSeedItem, deepCopy } from "#app/utils"; import i18next from "i18next"; import type { DexAttrProps, GameData } from "#app/system/game-data"; import { defaultStarterSpecies } from "#app/system/game-data"; @@ -283,30 +283,30 @@ export abstract class Challenge { /** * An apply function for STARTER_CHOICE challenges. Derived classes should alter this. * @param _pokemon {@link PokemonSpecies} The pokemon to check the validity of. - * @param _valid {@link Utils.BooleanHolder} A BooleanHolder, the value gets set to false if the pokemon isn't allowed. + * @param _valid {@link BooleanHolder} A BooleanHolder, the value gets set to false if the pokemon isn't allowed. * @param _dexAttr {@link DexAttrProps} The dex attributes of the pokemon. * @returns {@link boolean} Whether this function did anything. */ - applyStarterChoice(_pokemon: PokemonSpecies, _valid: Utils.BooleanHolder, _dexAttr: DexAttrProps): boolean { + applyStarterChoice(_pokemon: PokemonSpecies, _valid: BooleanHolder, _dexAttr: DexAttrProps): boolean { return false; } /** * An apply function for STARTER_POINTS challenges. Derived classes should alter this. - * @param _points {@link Utils.NumberHolder} The amount of points you have available. + * @param _points {@link NumberHolder} The amount of points you have available. * @returns {@link boolean} Whether this function did anything. */ - applyStarterPoints(_points: Utils.NumberHolder): boolean { + applyStarterPoints(_points: NumberHolder): boolean { return false; } /** * An apply function for STARTER_COST challenges. Derived classes should alter this. * @param _species {@link Species} The pokemon to change the cost of. - * @param _cost {@link Utils.NumberHolder} The cost of the starter. + * @param _cost {@link NumberHolder} The cost of the starter. * @returns {@link boolean} Whether this function did anything. */ - applyStarterCost(_species: Species, _cost: Utils.NumberHolder): boolean { + applyStarterCost(_species: Species, _cost: NumberHolder): boolean { return false; } @@ -322,10 +322,10 @@ export abstract class Challenge { /** * An apply function for POKEMON_IN_BATTLE challenges. Derived classes should alter this. * @param _pokemon {@link Pokemon} The pokemon to check the validity of. - * @param _valid {@link Utils.BooleanHolder} A BooleanHolder, the value gets set to false if the pokemon isn't allowed. + * @param _valid {@link BooleanHolder} A BooleanHolder, the value gets set to false if the pokemon isn't allowed. * @returns {@link boolean} Whether this function did anything. */ - applyPokemonInBattle(_pokemon: Pokemon, _valid: Utils.BooleanHolder): boolean { + applyPokemonInBattle(_pokemon: Pokemon, _valid: BooleanHolder): boolean { return false; } @@ -341,42 +341,42 @@ export abstract class Challenge { /** * An apply function for TYPE_EFFECTIVENESS challenges. Derived classes should alter this. - * @param _effectiveness {@linkcode Utils.NumberHolder} The current effectiveness of the move. + * @param _effectiveness {@linkcode NumberHolder} The current effectiveness of the move. * @returns Whether this function did anything. */ - applyTypeEffectiveness(_effectiveness: Utils.NumberHolder): boolean { + applyTypeEffectiveness(_effectiveness: NumberHolder): boolean { return false; } /** * An apply function for AI_LEVEL challenges. Derived classes should alter this. - * @param _level {@link Utils.NumberHolder} The generated level. + * @param _level {@link NumberHolder} The generated level. * @param _levelCap {@link Number} The current level cap. * @param _isTrainer {@link Boolean} Whether this is a trainer pokemon. * @param _isBoss {@link Boolean} Whether this is a non-trainer boss pokemon. * @returns {@link boolean} Whether this function did anything. */ - applyLevelChange(_level: Utils.NumberHolder, _levelCap: number, _isTrainer: boolean, _isBoss: boolean): boolean { + applyLevelChange(_level: NumberHolder, _levelCap: number, _isTrainer: boolean, _isBoss: boolean): boolean { return false; } /** * An apply function for AI_MOVE_SLOTS challenges. Derived classes should alter this. * @param pokemon {@link Pokemon} The pokemon that is being considered. - * @param moveSlots {@link Utils.NumberHolder} The amount of move slots. + * @param moveSlots {@link NumberHolder} The amount of move slots. * @returns {@link boolean} Whether this function did anything. */ - applyMoveSlot(_pokemon: Pokemon, _moveSlots: Utils.NumberHolder): boolean { + applyMoveSlot(_pokemon: Pokemon, _moveSlots: NumberHolder): boolean { return false; } /** * An apply function for PASSIVE_ACCESS challenges. Derived classes should alter this. * @param pokemon {@link Pokemon} The pokemon to change. - * @param hasPassive {@link Utils.BooleanHolder} Whether it should have its passive. + * @param hasPassive {@link BooleanHolder} Whether it should have its passive. * @returns {@link boolean} Whether this function did anything. */ - applyPassiveAccess(_pokemon: Pokemon, _hasPassive: Utils.BooleanHolder): boolean { + applyPassiveAccess(_pokemon: Pokemon, _hasPassive: BooleanHolder): boolean { return false; } @@ -393,15 +393,10 @@ export abstract class Challenge { * @param _pokemon {@link Pokemon} What pokemon would learn the move. * @param _moveSource {@link MoveSourceType} What source the pokemon would get the move from. * @param _move {@link Moves} The move in question. - * @param _level {@link Utils.NumberHolder} The level threshold for access. + * @param _level {@link NumberHolder} The level threshold for access. * @returns {@link boolean} Whether this function did anything. */ - applyMoveAccessLevel( - _pokemon: Pokemon, - _moveSource: MoveSourceType, - _move: Moves, - _level: Utils.NumberHolder, - ): boolean { + applyMoveAccessLevel(_pokemon: Pokemon, _moveSource: MoveSourceType, _move: Moves, _level: NumberHolder): boolean { return false; } @@ -410,10 +405,10 @@ export abstract class Challenge { * @param _pokemon {@link Pokemon} What pokemon would learn the move. * @param _moveSource {@link MoveSourceType} What source the pokemon would get the move from. * @param _move {@link Moves} The move in question. - * @param _weight {@link Utils.NumberHolder} The base weight of the move + * @param _weight {@link NumberHolder} The base weight of the move * @returns {@link boolean} Whether this function did anything. */ - applyMoveWeight(_pokemon: Pokemon, _moveSource: MoveSourceType, _move: Moves, _level: Utils.NumberHolder): boolean { + applyMoveWeight(_pokemon: Pokemon, _moveSource: MoveSourceType, _move: Moves, _level: NumberHolder): boolean { return false; } @@ -438,7 +433,7 @@ export class SingleGenerationChallenge extends Challenge { super(Challenges.SINGLE_GENERATION, 9); } - applyStarterChoice(pokemon: PokemonSpecies, valid: Utils.BooleanHolder): boolean { + applyStarterChoice(pokemon: PokemonSpecies, valid: BooleanHolder): boolean { if (pokemon.generation !== this.value) { valid.value = false; return true; @@ -446,7 +441,7 @@ export class SingleGenerationChallenge extends Challenge { return false; } - applyPokemonInBattle(pokemon: Pokemon, valid: Utils.BooleanHolder): boolean { + applyPokemonInBattle(pokemon: Pokemon, valid: BooleanHolder): boolean { const baseGeneration = getPokemonSpecies(pokemon.species.speciesId).generation; const fusionGeneration = pokemon.isFusion() ? getPokemonSpecies(pokemon.fusionSpecies!.speciesId).generation : 0; if ( @@ -575,7 +570,7 @@ export class SingleGenerationChallenge extends Challenge { TrainerType.AARON, TrainerType.SHAUNTAL, TrainerType.MALVA, - Utils.randSeedItem([TrainerType.HALA, TrainerType.MOLAYNE]), + randSeedItem([TrainerType.HALA, TrainerType.MOLAYNE]), TrainerType.MARNIE_ELITE, TrainerType.RIKA, ]; @@ -602,7 +597,7 @@ export class SingleGenerationChallenge extends Challenge { TrainerType.GRIMSLEY, TrainerType.WIKSTROM, TrainerType.ACEROLA, - Utils.randSeedItem([TrainerType.BEA_ELITE, TrainerType.ALLISTER_ELITE]), + randSeedItem([TrainerType.BEA_ELITE, TrainerType.ALLISTER_ELITE]), TrainerType.LARRY_ELITE, ]; break; @@ -622,14 +617,14 @@ export class SingleGenerationChallenge extends Challenge { case ClassicFixedBossWaves.CHAMPION: trainerTypes = [ TrainerType.BLUE, - Utils.randSeedItem([TrainerType.RED, TrainerType.LANCE_CHAMPION]), - Utils.randSeedItem([TrainerType.STEVEN, TrainerType.WALLACE]), + randSeedItem([TrainerType.RED, TrainerType.LANCE_CHAMPION]), + randSeedItem([TrainerType.STEVEN, TrainerType.WALLACE]), TrainerType.CYNTHIA, - Utils.randSeedItem([TrainerType.ALDER, TrainerType.IRIS]), + randSeedItem([TrainerType.ALDER, TrainerType.IRIS]), TrainerType.DIANTHA, - Utils.randSeedItem([TrainerType.KUKUI, TrainerType.HAU]), - Utils.randSeedItem([TrainerType.LEON, TrainerType.MUSTARD]), - Utils.randSeedItem([TrainerType.GEETA, TrainerType.NEMONA]), + randSeedItem([TrainerType.KUKUI, TrainerType.HAU]), + randSeedItem([TrainerType.LEON, TrainerType.MUSTARD]), + randSeedItem([TrainerType.GEETA, TrainerType.NEMONA]), ]; break; } @@ -718,7 +713,7 @@ export class SingleTypeChallenge extends Challenge { super(Challenges.SINGLE_TYPE, 18); } - override applyStarterChoice(pokemon: PokemonSpecies, valid: Utils.BooleanHolder, dexAttr: DexAttrProps): boolean { + override applyStarterChoice(pokemon: PokemonSpecies, valid: BooleanHolder, dexAttr: DexAttrProps): boolean { const speciesForm = getPokemonSpeciesForm(pokemon.speciesId, dexAttr.formIndex); const types = [speciesForm.type1, speciesForm.type2]; if (!types.includes(this.value - 1)) { @@ -728,7 +723,7 @@ export class SingleTypeChallenge extends Challenge { return false; } - applyPokemonInBattle(pokemon: Pokemon, valid: Utils.BooleanHolder): boolean { + applyPokemonInBattle(pokemon: Pokemon, valid: BooleanHolder): boolean { if ( pokemon.isPlayer() && !pokemon.isOfType(this.value - 1, false, false, true) && @@ -798,7 +793,7 @@ export class FreshStartChallenge extends Challenge { super(Challenges.FRESH_START, 1); } - applyStarterChoice(pokemon: PokemonSpecies, valid: Utils.BooleanHolder): boolean { + applyStarterChoice(pokemon: PokemonSpecies, valid: BooleanHolder): boolean { if (!defaultStarterSpecies.includes(pokemon.speciesId)) { valid.value = false; return true; @@ -806,7 +801,7 @@ export class FreshStartChallenge extends Challenge { return false; } - applyStarterCost(species: Species, cost: Utils.NumberHolder): boolean { + applyStarterCost(species: Species, cost: NumberHolder): boolean { if (defaultStarterSpecies.includes(species)) { cost.value = speciesStarterCosts[species]; return true; @@ -864,7 +859,7 @@ export class InverseBattleChallenge extends Challenge { return 0; } - applyTypeEffectiveness(effectiveness: Utils.NumberHolder): boolean { + applyTypeEffectiveness(effectiveness: NumberHolder): boolean { if (effectiveness.value < 1) { effectiveness.value = 2; return true; @@ -887,7 +882,7 @@ export class FlipStatChallenge extends Challenge { } override applyFlipStat(_pokemon: Pokemon, baseStats: number[]) { - const origStats = Utils.deepCopy(baseStats); + const origStats = deepCopy(baseStats); baseStats[0] = origStats[5]; baseStats[1] = origStats[4]; baseStats[2] = origStats[3]; @@ -923,7 +918,7 @@ export class LowerStarterMaxCostChallenge extends Challenge { return (DEFAULT_PARTY_MAX_COST - overrideValue).toString(); } - applyStarterChoice(pokemon: PokemonSpecies, valid: Utils.BooleanHolder): boolean { + applyStarterChoice(pokemon: PokemonSpecies, valid: BooleanHolder): boolean { if (speciesStarterCosts[pokemon.speciesId] > DEFAULT_PARTY_MAX_COST - this.value) { valid.value = false; return true; @@ -957,7 +952,7 @@ export class LowerStarterPointsChallenge extends Challenge { return (DEFAULT_PARTY_MAX_COST - overrideValue).toString(); } - applyStarterPoints(points: Utils.NumberHolder): boolean { + applyStarterPoints(points: NumberHolder): boolean { points.value -= this.value; return true; } @@ -974,34 +969,34 @@ export class LowerStarterPointsChallenge extends Challenge { * Apply all challenges that modify starter choice. * @param challengeType {@link ChallengeType} ChallengeType.STARTER_CHOICE * @param pokemon {@link PokemonSpecies} The pokemon to check the validity of. - * @param valid {@link Utils.BooleanHolder} A BooleanHolder, the value gets set to false if the pokemon isn't allowed. + * @param valid {@link BooleanHolder} A BooleanHolder, the value gets set to false if the pokemon isn't allowed. * @param dexAttr {@link DexAttrProps} The dex attributes of the pokemon. * @returns True if any challenge was successfully applied. */ export function applyChallenges( challengeType: ChallengeType.STARTER_CHOICE, pokemon: PokemonSpecies, - valid: Utils.BooleanHolder, + valid: BooleanHolder, dexAttr: DexAttrProps, ): boolean; /** * Apply all challenges that modify available total starter points. * @param challengeType {@link ChallengeType} ChallengeType.STARTER_POINTS - * @param points {@link Utils.NumberHolder} The amount of points you have available. + * @param points {@link NumberHolder} The amount of points you have available. * @returns True if any challenge was successfully applied. */ -export function applyChallenges(challengeType: ChallengeType.STARTER_POINTS, points: Utils.NumberHolder): boolean; +export function applyChallenges(challengeType: ChallengeType.STARTER_POINTS, points: NumberHolder): boolean; /** * Apply all challenges that modify the cost of a starter. * @param challengeType {@link ChallengeType} ChallengeType.STARTER_COST * @param species {@link Species} The pokemon to change the cost of. - * @param points {@link Utils.NumberHolder} The cost of the pokemon. + * @param points {@link NumberHolder} The cost of the pokemon. * @returns True if any challenge was successfully applied. */ export function applyChallenges( challengeType: ChallengeType.STARTER_COST, species: Species, - cost: Utils.NumberHolder, + cost: NumberHolder, ): boolean; /** * Apply all challenges that modify a starter after selection. @@ -1014,13 +1009,13 @@ export function applyChallenges(challengeType: ChallengeType.STARTER_MODIFY, pok * Apply all challenges that what pokemon you can have in battle. * @param challengeType {@link ChallengeType} ChallengeType.POKEMON_IN_BATTLE * @param pokemon {@link Pokemon} The pokemon to check the validity of. - * @param valid {@link Utils.BooleanHolder} A BooleanHolder, the value gets set to false if the pokemon isn't allowed. + * @param valid {@link BooleanHolder} A BooleanHolder, the value gets set to false if the pokemon isn't allowed. * @returns True if any challenge was successfully applied. */ export function applyChallenges( challengeType: ChallengeType.POKEMON_IN_BATTLE, pokemon: Pokemon, - valid: Utils.BooleanHolder, + valid: BooleanHolder, ): boolean; /** * Apply all challenges that modify what fixed battles there are. @@ -1037,17 +1032,14 @@ export function applyChallenges( /** * Apply all challenges that modify type effectiveness. * @param challengeType {@linkcode ChallengeType} ChallengeType.TYPE_EFFECTIVENESS - * @param effectiveness {@linkcode Utils.NumberHolder} The current effectiveness of the move. + * @param effectiveness {@linkcode NumberHolder} The current effectiveness of the move. * @returns True if any challenge was successfully applied. */ -export function applyChallenges( - challengeType: ChallengeType.TYPE_EFFECTIVENESS, - effectiveness: Utils.NumberHolder, -): boolean; +export function applyChallenges(challengeType: ChallengeType.TYPE_EFFECTIVENESS, effectiveness: NumberHolder): boolean; /** * Apply all challenges that modify what level AI are. * @param challengeType {@link ChallengeType} ChallengeType.AI_LEVEL - * @param level {@link Utils.NumberHolder} The generated level of the pokemon. + * @param level {@link NumberHolder} The generated level of the pokemon. * @param levelCap {@link Number} The maximum level cap for the current wave. * @param isTrainer {@link Boolean} Whether this is a trainer pokemon. * @param isBoss {@link Boolean} Whether this is a non-trainer boss pokemon. @@ -1055,7 +1047,7 @@ export function applyChallenges( */ export function applyChallenges( challengeType: ChallengeType.AI_LEVEL, - level: Utils.NumberHolder, + level: NumberHolder, levelCap: number, isTrainer: boolean, isBoss: boolean, @@ -1064,25 +1056,25 @@ export function applyChallenges( * Apply all challenges that modify how many move slots the AI has. * @param challengeType {@link ChallengeType} ChallengeType.AI_MOVE_SLOTS * @param pokemon {@link Pokemon} The pokemon being considered. - * @param moveSlots {@link Utils.NumberHolder} The amount of move slots. + * @param moveSlots {@link NumberHolder} The amount of move slots. * @returns True if any challenge was successfully applied. */ export function applyChallenges( challengeType: ChallengeType.AI_MOVE_SLOTS, pokemon: Pokemon, - moveSlots: Utils.NumberHolder, + moveSlots: NumberHolder, ): boolean; /** * Apply all challenges that modify whether a pokemon has its passive. * @param challengeType {@link ChallengeType} ChallengeType.PASSIVE_ACCESS * @param pokemon {@link Pokemon} The pokemon to modify. - * @param hasPassive {@link Utils.BooleanHolder} Whether it has its passive. + * @param hasPassive {@link BooleanHolder} Whether it has its passive. * @returns True if any challenge was successfully applied. */ export function applyChallenges( challengeType: ChallengeType.PASSIVE_ACCESS, pokemon: Pokemon, - hasPassive: Utils.BooleanHolder, + hasPassive: BooleanHolder, ): boolean; /** * Apply all challenges that modify the game modes settings. @@ -1096,7 +1088,7 @@ export function applyChallenges(challengeType: ChallengeType.GAME_MODE_MODIFY): * @param pokemon {@link Pokemon} What pokemon would learn the move. * @param moveSource {@link MoveSourceType} What source the pokemon would get the move from. * @param move {@link Moves} The move in question. - * @param level {@link Utils.NumberHolder} The level threshold for access. + * @param level {@link NumberHolder} The level threshold for access. * @returns True if any challenge was successfully applied. */ export function applyChallenges( @@ -1104,7 +1096,7 @@ export function applyChallenges( pokemon: Pokemon, moveSource: MoveSourceType, move: Moves, - level: Utils.NumberHolder, + level: NumberHolder, ): boolean; /** * Apply all challenges that modify what weight a pokemon gives to move generation @@ -1112,7 +1104,7 @@ export function applyChallenges( * @param pokemon {@link Pokemon} What pokemon would learn the move. * @param moveSource {@link MoveSourceType} What source the pokemon would get the move from. * @param move {@link Moves} The move in question. - * @param weight {@link Utils.NumberHolder} The weight of the move. + * @param weight {@link NumberHolder} The weight of the move. * @returns True if any challenge was successfully applied. */ export function applyChallenges( @@ -1120,7 +1112,7 @@ export function applyChallenges( pokemon: Pokemon, moveSource: MoveSourceType, move: Moves, - weight: Utils.NumberHolder, + weight: NumberHolder, ): boolean; export function applyChallenges(challengeType: ChallengeType.FLIP_STAT, pokemon: Pokemon, baseStats: number[]): boolean; @@ -1225,7 +1217,7 @@ export function initChallenges() { */ export function checkStarterValidForChallenge(species: PokemonSpecies, props: DexAttrProps, soft: boolean) { if (!soft) { - const isValidForChallenge = new Utils.BooleanHolder(true); + const isValidForChallenge = new BooleanHolder(true); applyChallenges(ChallengeType.STARTER_CHOICE, species, isValidForChallenge, props); return isValidForChallenge.value; } @@ -1263,7 +1255,7 @@ export function checkStarterValidForChallenge(species: PokemonSpecies, props: De * @returns `true` if the species is considered valid. */ function checkSpeciesValidForChallenge(species: PokemonSpecies, props: DexAttrProps, soft: boolean) { - const isValidForChallenge = new Utils.BooleanHolder(true); + const isValidForChallenge = new BooleanHolder(true); applyChallenges(ChallengeType.STARTER_CHOICE, species, isValidForChallenge, props); if (!soft || !pokemonFormChanges.hasOwnProperty(species.speciesId)) { return isValidForChallenge.value; @@ -1282,7 +1274,7 @@ function checkSpeciesValidForChallenge(species: PokemonSpecies, props: DexAttrPr return species.forms.some((f2, formIndex) => { if (f1.formKey === f2.formKey) { const formProps = { ...props, formIndex }; - const isFormValidForChallenge = new Utils.BooleanHolder(true); + const isFormValidForChallenge = new BooleanHolder(true); applyChallenges(ChallengeType.STARTER_CHOICE, species, isFormValidForChallenge, formProps); return isFormValidForChallenge.value; } diff --git a/src/data/daily-run.ts b/src/data/daily-run.ts index 22fb7db10ae..3438510d613 100644 --- a/src/data/daily-run.ts +++ b/src/data/daily-run.ts @@ -3,7 +3,7 @@ import type { Species } from "#enums/species"; import { globalScene } from "#app/global-scene"; import { PlayerPokemon } from "#app/field/pokemon"; import type { Starter } from "#app/ui/starter-select-ui-handler"; -import * as Utils from "#app/utils"; +import { randSeedGauss, randSeedInt, randSeedItem, getEnumValues } from "#app/utils"; import type { PokemonSpeciesForm } from "#app/data/pokemon-species"; import PokemonSpecies, { getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; import { speciesStarterCosts } from "#app/data/balance/starters"; @@ -43,8 +43,8 @@ export function getDailyRunStarters(seed: string): Starter[] { } const starterCosts: number[] = []; - starterCosts.push(Math.min(Math.round(3.5 + Math.abs(Utils.randSeedGauss(1))), 8)); - starterCosts.push(Utils.randSeedInt(9 - starterCosts[0], 1)); + starterCosts.push(Math.min(Math.round(3.5 + Math.abs(randSeedGauss(1))), 8)); + starterCosts.push(randSeedInt(9 - starterCosts[0], 1)); starterCosts.push(10 - (starterCosts[0] + starterCosts[1])); for (let c = 0; c < starterCosts.length; c++) { @@ -52,7 +52,7 @@ export function getDailyRunStarters(seed: string): Starter[] { const costSpecies = Object.keys(speciesStarterCosts) .map(s => Number.parseInt(s) as Species) .filter(s => speciesStarterCosts[s] === cost); - const randPkmSpecies = getPokemonSpecies(Utils.randSeedItem(costSpecies)); + const randPkmSpecies = getPokemonSpecies(randSeedItem(costSpecies)); const starterSpecies = getPokemonSpecies( randPkmSpecies.getTrainerSpeciesForLevel(startingLevel, true, PartyMemberStrength.STRONGER), ); @@ -143,7 +143,7 @@ const dailyBiomeWeights: BiomeWeights = { }; export function getDailyStartingBiome(): Biome { - const biomes = Utils.getEnumValues(Biome).filter(b => b !== Biome.TOWN && b !== Biome.END); + const biomes = getEnumValues(Biome).filter(b => b !== Biome.TOWN && b !== Biome.END); let totalWeight = 0; const biomeThresholds: number[] = []; @@ -155,7 +155,7 @@ export function getDailyStartingBiome(): Biome { biomeThresholds.push(totalWeight); } - const randInt = Utils.randSeedInt(totalWeight); + const randInt = randSeedInt(totalWeight); for (let i = 0; i < biomes.length; i++) { if (randInt < biomeThresholds[i]) { @@ -164,5 +164,5 @@ export function getDailyStartingBiome(): Biome { } // Fallback in case something went wrong - return biomes[Utils.randSeedInt(biomes.length)]; + return biomes[randSeedInt(biomes.length)]; } diff --git a/src/data/egg.ts b/src/data/egg.ts index 0dabf8f1119..13ab0bec479 100644 --- a/src/data/egg.ts +++ b/src/data/egg.ts @@ -4,7 +4,7 @@ import type PokemonSpecies from "#app/data/pokemon-species"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { speciesStarterCosts } from "#app/data/balance/starters"; import { VariantTier } from "#enums/variant-tier"; -import * as Utils from "#app/utils"; +import { randInt, randomString, randSeedInt, getIvsFromId } from "#app/utils"; import Overrides from "#app/overrides"; import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; import type { PlayerPokemon } from "#app/field/pokemon"; @@ -171,7 +171,7 @@ export class Egg { this.checkForPityTierOverrides(); } - this._id = eggOptions?.id ?? Utils.randInt(EGG_SEED, EGG_SEED * this._tier); + this._id = eggOptions?.id ?? randInt(EGG_SEED, EGG_SEED * this._tier); this._sourceType = eggOptions?.sourceType ?? undefined; this._hatchWaves = eggOptions?.hatchWaves ?? this.getEggTierDefaultHatchWaves(); @@ -203,7 +203,7 @@ export class Egg { } }; - const seedOverride = Utils.randomString(24); + const seedOverride = randomString(24); globalScene.executeWithSeedOffset( () => { generateEggProperties(eggOptions); @@ -248,18 +248,15 @@ export class Egg { let pokemonSpecies = getPokemonSpecies(this._species); // Special condition to have Phione eggs also have a chance of generating Manaphy if (this._species === Species.PHIONE && this._sourceType === EggSourceType.SAME_SPECIES_EGG) { - pokemonSpecies = getPokemonSpecies( - Utils.randSeedInt(MANAPHY_EGG_MANAPHY_RATE) ? Species.PHIONE : Species.MANAPHY, - ); + pokemonSpecies = getPokemonSpecies(randSeedInt(MANAPHY_EGG_MANAPHY_RATE) ? Species.PHIONE : Species.MANAPHY); } // Sets the hidden ability if a hidden ability exists and // the override is set or the egg hits the chance let abilityIndex: number | undefined = undefined; const sameSpeciesEggHACheck = - this._sourceType === EggSourceType.SAME_SPECIES_EGG && !Utils.randSeedInt(SAME_SPECIES_EGG_HA_RATE); - const gachaEggHACheck = - !(this._sourceType === EggSourceType.SAME_SPECIES_EGG) && !Utils.randSeedInt(GACHA_EGG_HA_RATE); + this._sourceType === EggSourceType.SAME_SPECIES_EGG && !randSeedInt(SAME_SPECIES_EGG_HA_RATE); + const gachaEggHACheck = !(this._sourceType === EggSourceType.SAME_SPECIES_EGG) && !randSeedInt(GACHA_EGG_HA_RATE); if (pokemonSpecies.abilityHidden && (this._overrideHiddenAbility || sameSpeciesEggHACheck || gachaEggHACheck)) { abilityIndex = 2; } @@ -269,7 +266,7 @@ export class Egg { ret.shiny = this._isShiny; ret.variant = this._variantTier; - const secondaryIvs = Utils.getIvsFromId(Utils.randSeedInt(4294967295)); + const secondaryIvs = getIvsFromId(randSeedInt(4294967295)); for (let s = 0; s < ret.ivs.length; s++) { ret.ivs[s] = Math.max(ret.ivs[s], secondaryIvs[s]); @@ -370,7 +367,7 @@ export class Egg { } const tierMultiplier = this.isManaphyEgg() ? 2 : Math.pow(2, 3 - this.tier); - return Utils.randSeedInt(baseChance * tierMultiplier) ? Utils.randSeedInt(3) : 3; + return randSeedInt(baseChance * tierMultiplier) ? randSeedInt(3) : 3; } private getEggTierDefaultHatchWaves(eggTier?: EggTier): number { @@ -392,7 +389,7 @@ export class Egg { private rollEggTier(): EggTier { const tierValueOffset = this._sourceType === EggSourceType.GACHA_LEGENDARY ? GACHA_LEGENDARY_UP_THRESHOLD_OFFSET : 0; - const tierValue = Utils.randInt(256); + const tierValue = randInt(256); return tierValue >= GACHA_DEFAULT_COMMON_EGG_THRESHOLD + tierValueOffset ? EggTier.COMMON : tierValue >= GACHA_DEFAULT_RARE_EGG_THRESHOLD + tierValueOffset @@ -417,11 +414,11 @@ export class Egg { * when Utils.randSeedInt(8) = 1, and by making the generatePlayerPokemon() species * check pass when Utils.randSeedInt(8) = 0, we can tell them apart during tests. */ - const rand = Utils.randSeedInt(MANAPHY_EGG_MANAPHY_RATE) !== 1; + const rand = randSeedInt(MANAPHY_EGG_MANAPHY_RATE) !== 1; return rand ? Species.PHIONE : Species.MANAPHY; } if (this.tier === EggTier.LEGENDARY && this._sourceType === EggSourceType.GACHA_LEGENDARY) { - if (!Utils.randSeedInt(2)) { + if (!randSeedInt(2)) { return getLegendaryGachaSpeciesForTimestamp(this.timestamp); } } @@ -501,7 +498,7 @@ export class Egg { let species: Species; - const rand = Utils.randSeedInt(totalWeight); + const rand = randSeedInt(totalWeight); for (let s = 0; s < speciesWeights.length; s++) { if (rand < speciesWeights[s]) { species = speciesPool[s]; @@ -539,7 +536,7 @@ export class Egg { break; } - return !Utils.randSeedInt(shinyChance); + return !randSeedInt(shinyChance); } // Uses the same logic as pokemon.generateVariant(). I would like to only have this logic in one @@ -550,7 +547,7 @@ export class Egg { return VariantTier.STANDARD; } - const rand = Utils.randSeedInt(10); + const rand = randSeedInt(10); if (rand >= SHINY_VARIANT_CHANCE) { return VariantTier.STANDARD; // 6/10 } diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 1af4be4fdf0..a0f68dcd5cb 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -29,9 +29,7 @@ import { } from "../status-effect"; import { getTypeDamageMultiplier } from "../type"; import { PokemonType } from "#enums/pokemon-type"; -import type { Constructor } from "#app/utils"; -import { NumberHolder } from "#app/utils"; -import * as Utils from "../../utils"; +import { BooleanHolder, NumberHolder, isNullOrUndefined, toDmgValue, randSeedItem, randSeedInt, getEnumValues, toReadableString, type Constructor } from "#app/utils"; import { WeatherType } from "#enums/weather-type"; import type { ArenaTrapTag } from "../arena-tag"; import { ArenaTagSide, WeakenMoveTypeTag } from "../arena-tag"; @@ -352,7 +350,7 @@ export default class Move implements Localizable { return false; } - const bypassed = new Utils.BooleanHolder(false); + const bypassed = new BooleanHolder(false); // TODO: Allow this to be simulated applyAbAttrs(InfiltratorAbAttr, user, null, false, bypassed); @@ -651,7 +649,7 @@ export default class Move implements Localizable { break; case MoveFlags.IGNORE_ABILITIES: if (user.hasAbilityWithAttr(MoveAbilityBypassAbAttr)) { - const abilityEffectsIgnored = new Utils.BooleanHolder(false); + const abilityEffectsIgnored = new BooleanHolder(false); applyAbAttrs(MoveAbilityBypassAbAttr, user, abilityEffectsIgnored, false, this); if (abilityEffectsIgnored.value) { return true; @@ -755,7 +753,7 @@ export default class Move implements Localizable { * @returns The calculated accuracy of the move. */ calculateBattleAccuracy(user: Pokemon, target: Pokemon, simulated: boolean = false) { - const moveAccuracy = new Utils.NumberHolder(this.accuracy); + const moveAccuracy = new NumberHolder(this.accuracy); applyMoveAttrs(VariableAccuracyAttr, user, target, this, moveAccuracy); applyPreDefendAbAttrs(WonderSkinAbAttr, target, user, this, { value: false }, simulated, moveAccuracy); @@ -797,8 +795,8 @@ export default class Move implements Localizable { return -1; } - const power = new Utils.NumberHolder(this.power); - const typeChangeMovePowerMultiplier = new Utils.NumberHolder(1); + const power = new NumberHolder(this.power); + const typeChangeMovePowerMultiplier = new NumberHolder(1); applyPreAttackAbAttrs(MoveTypeChangeAbAttr, source, target, this, true, null, typeChangeMovePowerMultiplier); @@ -809,7 +807,7 @@ export default class Move implements Localizable { applyPreAttackAbAttrs(VariableMovePowerAbAttr, source, target, this, simulated, power); const ally = source.getAlly(); - if (!Utils.isNullOrUndefined(ally)) { + if (!isNullOrUndefined(ally)) { applyPreAttackAbAttrs(AllyMoveCategoryPowerBoostAbAttr, ally, target, this, simulated, power); } @@ -850,7 +848,7 @@ export default class Move implements Localizable { } getPriority(user: Pokemon, simulated: boolean = true) { - const priority = new Utils.NumberHolder(this.priority); + const priority = new NumberHolder(this.priority); applyMoveAttrs(IncrementMovePriorityAttr, user, null, this, priority); applyAbAttrs(ChangeMovePriorityAbAttr, user, null, simulated, this, priority); @@ -932,7 +930,7 @@ export default class Move implements Localizable { // ...and cannot enhance Pollen Puff when targeting an ally. const ally = user.getAlly(); - const exceptPollenPuffAlly: boolean = this.id === Moves.POLLEN_PUFF && !Utils.isNullOrUndefined(ally) && targets.includes(ally.getBattlerIndex()) + const exceptPollenPuffAlly: boolean = this.id === Moves.POLLEN_PUFF && !isNullOrUndefined(ally) && targets.includes(ally.getBattlerIndex()) return (!restrictSpread || !isMultiTarget) && !this.isChargingMove() @@ -971,7 +969,7 @@ export class AttackMove extends Move { const effectiveness = target.getAttackTypeEffectiveness(this.type, user, undefined, undefined, this); attackScore = Math.pow(effectiveness - 1, 2) * (effectiveness < 1 ? -2 : 2); const [ thisStat, offStat ]: EffectiveStat[] = this.category === MoveCategory.PHYSICAL ? [ Stat.ATK, Stat.SPATK ] : [ Stat.SPATK, Stat.ATK ]; - const statHolder = new Utils.NumberHolder(user.getEffectiveStat(thisStat, target)); + const statHolder = new NumberHolder(user.getEffectiveStat(thisStat, target)); const offStatValue = user.getEffectiveStat(offStat, target); applyMoveAttrs(VariableAtkAttr, user, target, move, statHolder); const statRatio = offStatValue / statHolder.value; @@ -981,7 +979,7 @@ export class AttackMove extends Move { attackScore *= 1.5; } - const power = new Utils.NumberHolder(this.calculateEffectivePower()); + const power = new NumberHolder(this.calculateEffectivePower()); applyMoveAttrs(VariablePowerAttr, user, target, move, power); attackScore += Math.floor(power.value / 5); @@ -1252,7 +1250,7 @@ export class MoveEffectAttr extends MoveAttr { * @returns Move effect chance value. */ getMoveChance(user: Pokemon, target: Pokemon, move: Move, selfEffect?: Boolean, showAbility?: Boolean): number { - const moveChance = new Utils.NumberHolder(this.effectChanceOverride ?? move.chance); + const moveChance = new NumberHolder(this.effectChanceOverride ?? move.chance); applyAbAttrs(MoveEffectChanceMultiplierAbAttr, user, null, !showAbility, moveChance, move); @@ -1415,7 +1413,7 @@ export class RespectAttackTypeImmunityAttr extends MoveAttr { } export class IgnoreOpponentStatStagesAttr extends MoveAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.BooleanHolder).value = true; + (args[0] as BooleanHolder).value = true; return true; } @@ -1423,7 +1421,7 @@ export class IgnoreOpponentStatStagesAttr extends MoveAttr { export class HighCritAttr extends MoveAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.NumberHolder).value++; + (args[0] as NumberHolder).value++; return true; } @@ -1435,7 +1433,7 @@ export class HighCritAttr extends MoveAttr { export class CritOnlyAttr extends MoveAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.BooleanHolder).value = true; + (args[0] as BooleanHolder).value = true; return true; } @@ -1455,7 +1453,7 @@ export class FixedDamageAttr extends MoveAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.NumberHolder).value = this.getDamage(user, target, move); + (args[0] as NumberHolder).value = this.getDamage(user, target, move); return true; } @@ -1471,7 +1469,7 @@ export class UserHpDamageAttr extends FixedDamageAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.NumberHolder).value = user.hp; + (args[0] as NumberHolder).value = user.hp; return true; } @@ -1492,7 +1490,7 @@ export class TargetHalfHpDamageAttr extends FixedDamageAttr { const lensCount = user.getHeldItems().find(i => i instanceof PokemonMultiHitModifier)?.getStackCount() ?? 0; if (lensCount <= 0) { // no multi lenses; we can just halve the target's hp and call it a day - (args[0] as Utils.NumberHolder).value = Utils.toDmgValue(target.hp / 2); + (args[0] as NumberHolder).value = toDmgValue(target.hp / 2); return true; } @@ -1503,11 +1501,11 @@ export class TargetHalfHpDamageAttr extends FixedDamageAttr { this.initialHp = target.hp; default: // multi lens added hit; use initialHp tracker to ensure correct damage - (args[0] as Utils.NumberHolder).value = Utils.toDmgValue(this.initialHp / 2); + (args[0] as NumberHolder).value = toDmgValue(this.initialHp / 2); return true; case lensCount + 1: // parental bond added hit; calc damage as normal - (args[0] as Utils.NumberHolder).value = Utils.toDmgValue(target.hp / 2); + (args[0] as NumberHolder).value = toDmgValue(target.hp / 2); return true; } } @@ -1523,7 +1521,7 @@ export class MatchHpAttr extends FixedDamageAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.NumberHolder).value = target.hp - user.hp; + (args[0] as NumberHolder).value = target.hp - user.hp; return true; } @@ -1553,7 +1551,7 @@ export class CounterDamageAttr extends FixedDamageAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const damage = user.turnData.attacksReceived.filter(ar => this.moveFilter(allMoves[ar.move])).reduce((total: number, ar: AttackMoveResult) => total + ar.damage, 0); - (args[0] as Utils.NumberHolder).value = Utils.toDmgValue(damage * this.multiplier); + (args[0] as NumberHolder).value = toDmgValue(damage * this.multiplier); return true; } @@ -1579,13 +1577,13 @@ export class RandomLevelDamageAttr extends FixedDamageAttr { } getDamage(user: Pokemon, target: Pokemon, move: Move): number { - return Utils.toDmgValue(user.level * (user.randSeedIntRange(50, 150) * 0.01)); + return toDmgValue(user.level * (user.randSeedIntRange(50, 150) * 0.01)); } } export class ModifiedDamageAttr extends MoveAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const initialDamage = args[0] as Utils.NumberHolder; + const initialDamage = args[0] as NumberHolder; initialDamage.value = this.getModifiedDamage(user, target, move, initialDamage.value); return true; @@ -1638,7 +1636,7 @@ export class RecoilAttr extends MoveEffectAttr { return false; } - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); if (!this.unblockable) { applyAbAttrs(BlockRecoilDamageAttr, user, cancelled); applyAbAttrs(BlockNonDirectDamageAbAttr, user, cancelled); @@ -1655,7 +1653,7 @@ export class RecoilAttr extends MoveEffectAttr { const damageValue = (!this.useHp ? user.turnData.totalDamageDealt : user.getMaxHp()) * this.damageRatio; const minValue = user.turnData.totalDamageDealt ? 1 : 0; - const recoilDamage = Utils.toDmgValue(damageValue, minValue); + const recoilDamage = toDmgValue(damageValue, minValue); if (!recoilDamage) { return false; } @@ -1772,11 +1770,11 @@ export class HalfSacrificialAttr extends MoveEffectAttr { return false; } - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); // Check to see if the Pokemon has an ability that blocks non-direct damage applyAbAttrs(BlockNonDirectDamageAbAttr, user, cancelled); if (!cancelled.value) { - user.damageAndUpdate(Utils.toDmgValue(user.getMaxHp() / 2), { result: HitResult.INDIRECT, ignoreSegments: true }); + user.damageAndUpdate(toDmgValue(user.getMaxHp() / 2), { result: HitResult.INDIRECT, ignoreSegments: true }); globalScene.queueMessage(i18next.t("moveTriggers:cutHpPowerUpMove", { pokemonName: getPokemonNameWithAffix(user) })); // Queue recoil message } return true; @@ -1882,7 +1880,7 @@ export class HealAttr extends MoveEffectAttr { */ addHealPhase(target: Pokemon, healRatio: number) { globalScene.unshiftPhase(new PokemonHealPhase(target.getBattlerIndex(), - Utils.toDmgValue(target.getMaxHp() * healRatio), i18next.t("moveTriggers:healHp", { pokemonName: getPokemonNameWithAffix(target) }), true, !this.showAnim)); + toDmgValue(target.getMaxHp() * healRatio), i18next.t("moveTriggers:healHp", { pokemonName: getPokemonNameWithAffix(target) }), true, !this.showAnim)); } getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { @@ -1965,9 +1963,9 @@ export class FlameBurstAttr extends MoveEffectAttr { */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const targetAlly = target.getAlly(); - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); - if (!Utils.isNullOrUndefined(targetAlly)) { + if (!isNullOrUndefined(targetAlly)) { applyAbAttrs(BlockNonDirectDamageAbAttr, targetAlly, cancelled); } @@ -1980,7 +1978,7 @@ export class FlameBurstAttr extends MoveEffectAttr { } getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { - return !Utils.isNullOrUndefined(target.getAlly()) ? -5 : 0; + return !isNullOrUndefined(target.getAlly()) ? -5 : 0; } } @@ -2048,11 +2046,11 @@ export class IgnoreWeatherTypeDebuffAttr extends MoveAttr { * @param user {@linkcode Pokemon} that used the move * @param target N/A * @param move {@linkcode Move} with this attribute - * @param args [0] {@linkcode Utils.NumberHolder} for arenaAttackTypeMultiplier + * @param args [0] {@linkcode NumberHolder} for arenaAttackTypeMultiplier * @returns true if the function succeeds */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const weatherModifier = args[0] as Utils.NumberHolder; + const weatherModifier = args[0] as NumberHolder; //If the type-based attack power modifier due to weather (e.g. Water moves in Sun) is below 1, set it to 1 if (globalScene.arena.weather?.weatherType === this.weather) { weatherModifier.value = Math.max(weatherModifier.value, 1); @@ -2203,7 +2201,7 @@ export class HitHealAttr extends MoveEffectAttr { message = i18next.t("battle:drainMessage", { pokemonName: getPokemonNameWithAffix(target) }); } else { // Default healing formula used by draining moves like Absorb, Draining Kiss, Bitter Blade, etc. - healAmount = Utils.toDmgValue(user.turnData.singleHitDamageDealt * this.healRatio); + healAmount = toDmgValue(user.turnData.singleHitDamageDealt * this.healRatio); message = i18next.t("battle:regainHealth", { pokemonName: getPokemonNameWithAffix(user) }); } if (reverseDrain) { @@ -2261,7 +2259,7 @@ export class IncrementMovePriorityAttr extends MoveAttr { * @param user {@linkcode Pokemon} using this move * @param target {@linkcode Pokemon} target of this move * @param move {@linkcode Move} being used - * @param args [0] {@linkcode Utils.NumberHolder} for move priority. + * @param args [0] {@linkcode NumberHolder} for move priority. * @returns true if function succeeds */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { @@ -2269,7 +2267,7 @@ export class IncrementMovePriorityAttr extends MoveAttr { return false; } - (args[0] as Utils.NumberHolder).value += this.increaseAmount; + (args[0] as NumberHolder).value += this.increaseAmount; return true; } } @@ -2307,15 +2305,15 @@ export class MultiHitAttr extends MoveAttr { * @param user {@linkcode Pokemon} that used the attack * @param target {@linkcode Pokemon} targeted by the attack * @param move {@linkcode Move} being used - * @param args [0] {@linkcode Utils.NumberHolder} storing the hit count of the attack + * @param args [0] {@linkcode NumberHolder} storing the hit count of the attack * @returns True */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const hitType = new Utils.NumberHolder(this.intrinsicMultiHitType); + const hitType = new NumberHolder(this.intrinsicMultiHitType); applyMoveAttrs(ChangeMultiHitTypeAttr, user, target, move, hitType); this.multiHitType = hitType.value; - (args[0] as Utils.NumberHolder).value = this.getHitCount(user, target); + (args[0] as NumberHolder).value = this.getHitCount(user, target); return true; } @@ -2336,7 +2334,7 @@ export class MultiHitAttr extends MoveAttr { case MultiHitType._2_TO_5: { const rand = user.randSeedInt(20); - const hitValue = new Utils.NumberHolder(rand); + const hitValue = new NumberHolder(rand); applyAbAttrs(MaxMultiHitAbAttr, user, null, false, hitValue); if (hitValue.value >= 13) { return 2; @@ -2414,7 +2412,7 @@ export class ChangeMultiHitTypeAttr extends MoveAttr { export class WaterShurikenMultiHitTypeAttr extends ChangeMultiHitTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (user.species.speciesId === Species.GRENINJA && user.hasAbility(Abilities.BATTLE_BOND) && user.formIndex === 2) { - (args[0] as Utils.NumberHolder).value = MultiHitType._3; + (args[0] as NumberHolder).value = MultiHitType._3; return true; } return false; @@ -2480,7 +2478,7 @@ export class MultiStatusEffectAttr extends StatusEffectAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - this.effect = Utils.randSeedItem(this.effects); + this.effect = randSeedItem(this.effects); const result = super.apply(user, target, move, args); return result; } @@ -2612,7 +2610,7 @@ export class RemoveHeldItemAttr extends MoveEffectAttr { return false; } - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); applyAbAttrs(BlockItemTheftAbAttr, target, cancelled); // Check for abilities that block item theft if (cancelled.value === true) { @@ -2686,7 +2684,7 @@ export class EatBerryAttr extends MoveEffectAttr { return false; } this.chosenBerry = heldBerries[user.randSeedInt(heldBerries.length)]; - const preserve = new Utils.BooleanHolder(false); + const preserve = new BooleanHolder(false); globalScene.applyModifiers(PreserveBerryModifier, target.isPlayer(), target, preserve); // check for berry pouch preservation if (!preserve.value) { this.reduceBerryModifier(target); @@ -2709,7 +2707,7 @@ export class EatBerryAttr extends MoveEffectAttr { eatBerry(consumer: Pokemon, berryOwner?: Pokemon) { getBerryEffectFunc(this.chosenBerry!.berryType)(consumer, berryOwner); // consumer eats the berry - applyAbAttrs(HealFromBerryUseAbAttr, consumer, new Utils.BooleanHolder(false)); + applyAbAttrs(HealFromBerryUseAbAttr, consumer, new BooleanHolder(false)); } } @@ -2733,7 +2731,7 @@ export class StealEatBerryAttr extends EatBerryAttr { if (move.hitsSubstitute(user, target)) { return false; } - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); applyAbAttrs(BlockItemTheftAbAttr, target, cancelled); // check for abilities that block item theft if (cancelled.value === true) { return false; @@ -2846,11 +2844,11 @@ export class BypassBurnDamageReductionAttr extends MoveAttr { * @param user N/A * @param target N/A * @param move {@linkcode Move} with this attribute - * @param args [0] {@linkcode Utils.BooleanHolder} for burnDamageReductionCancelled + * @param args [0] {@linkcode BooleanHolder} for burnDamageReductionCancelled * @returns true if the function succeeds */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.BooleanHolder).value = true; + (args[0] as BooleanHolder).value = true; return true; } @@ -2931,14 +2929,14 @@ export class OneHitKOAttr extends MoveAttr { return false; } - (args[0] as Utils.BooleanHolder).value = true; + (args[0] as BooleanHolder).value = true; return true; } getCondition(): MoveConditionFunc { return (user, target, move) => { - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); applyAbAttrs(BlockOneHitKOAbAttr, target, cancelled); return !cancelled.value && user.level >= target.level; }; @@ -2965,12 +2963,12 @@ export class InstantChargeAttr extends MoveAttr { * @param target n/a * @param move the {@linkcode Move} associated with this attribute * @param args - * - `[0]` a {@linkcode Utils.BooleanHolder | BooleanHolder} for the "instant charge" flag + * - `[0]` a {@linkcode BooleanHolder | BooleanHolder} for the "instant charge" flag * @returns `true` if the instant charge condition is met; `false` otherwise. */ override apply(user: Pokemon, target: Pokemon | null, move: Move, args: any[]): boolean { const instantCharge = args[0]; - if (!(instantCharge instanceof Utils.BooleanHolder)) { + if (!(instantCharge instanceof BooleanHolder)) { return false; } @@ -2992,7 +2990,7 @@ export class WeatherInstantChargeAttr extends InstantChargeAttr { super((user, move) => { const currentWeather = globalScene.arena.weather; - if (Utils.isNullOrUndefined(currentWeather?.weatherType)) { + if (isNullOrUndefined(currentWeather?.weatherType)) { return false; } else { return !currentWeather?.isEffectSuppressed() @@ -3035,7 +3033,7 @@ export class DelayedAttackAttr extends OverrideMoveEffectAttr { return true; } - const overridden = args[0] as Utils.BooleanHolder; + const overridden = args[0] as BooleanHolder; const virtual = args[1] as boolean; if (!virtual) { @@ -3069,7 +3067,7 @@ export class AwaitCombinedPledgeAttr extends OverrideMoveEffectAttr { * @param target n/a * @param move the {@linkcode Move} being used * @param args - * - [0] a {@linkcode Utils.BooleanHolder} indicating whether the move's base + * - [0] a {@linkcode BooleanHolder} indicating whether the move's base * effects should be overridden this turn. * @returns `true` if base move effects were overridden; `false` otherwise */ @@ -3080,7 +3078,7 @@ export class AwaitCombinedPledgeAttr extends OverrideMoveEffectAttr { return false; } - const overridden = args[0] as Utils.BooleanHolder; + const overridden = args[0] as BooleanHolder; const allyMovePhase = globalScene.findPhase((phase) => phase instanceof MovePhase && phase.pokemon.isPlayer() === user.isPlayer()); if (allyMovePhase) { @@ -3451,7 +3449,7 @@ export class CutHpStatStageBoostAttr extends StatStageChangeAttr { this.messageCallback = messageCallback; } override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - user.damageAndUpdate(Utils.toDmgValue(user.getMaxHp() / this.cutRatio), { result: HitResult.INDIRECT }); + user.damageAndUpdate(toDmgValue(user.getMaxHp() / this.cutRatio), { result: HitResult.INDIRECT }); user.updateInfo(); const ret = super.apply(user, target, move, args); if (this.messageCallback) { @@ -3663,7 +3661,7 @@ export class LessPPMorePowerAttr extends VariablePowerAttr { * @param user {@linkcode Pokemon} using this move * @param target {@linkcode Pokemon} target of this move * @param move {@linkcode Move} being used - * @param args [0] {@linkcode Utils.NumberHolder} of power + * @param args [0] {@linkcode NumberHolder} of power * @returns true if the function succeeds */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { @@ -3676,7 +3674,7 @@ export class LessPPMorePowerAttr extends VariablePowerAttr { ppRemains = 0; } - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; switch (ppRemains) { case 0: @@ -3709,7 +3707,7 @@ export class MovePowerMultiplierAttr extends VariablePowerAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; power.value *= this.powerMultiplierFunc(user, target, move); return true; @@ -3749,7 +3747,7 @@ export class BeatUpAttr extends VariablePowerAttr { * @returns true if the function succeeds */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; const party = user.isPlayer() ? globalScene.getPlayerParty() : globalScene.getEnemyParty(); const allyCount = party.filter(pokemon => { @@ -3764,7 +3762,7 @@ export class BeatUpAttr extends VariablePowerAttr { const doublePowerChanceMessageFunc = (user: Pokemon, target: Pokemon, move: Move) => { let message: string = ""; globalScene.executeWithSeedOffset(() => { - const rand = Utils.randSeedInt(100); + const rand = randSeedInt(100); if (rand < move.chance) { message = i18next.t("moveTriggers:goingAllOutForAttack", { pokemonName: getPokemonNameWithAffix(user) }); } @@ -3775,9 +3773,9 @@ const doublePowerChanceMessageFunc = (user: Pokemon, target: Pokemon, move: Move export class DoublePowerChanceAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { let rand: number; - globalScene.executeWithSeedOffset(() => rand = Utils.randSeedInt(100), globalScene.currentBattle.turn << 6, globalScene.waveSeed); + globalScene.executeWithSeedOffset(() => rand = randSeedInt(100), globalScene.currentBattle.turn << 6, globalScene.waveSeed); if (rand! < move.chance) { - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; power.value *= 2; return true; } @@ -3831,7 +3829,7 @@ export class ConsecutiveUseMultiBasePowerAttr extends ConsecutiveUsePowerMultipl export class WeightPowerAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; const targetWeight = target.getWeight(); const weightThresholds = [ 10, 25, 50, 100, 200 ]; @@ -3865,7 +3863,7 @@ export class ElectroBallPowerAttr extends VariablePowerAttr { * @returns true if the function succeeds */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; const statRatio = target.getEffectiveStat(Stat.SPD) / user.getEffectiveStat(Stat.SPD); const statThresholds = [ 0.25, 1 / 3, 0.5, 1, -1 ]; @@ -3900,7 +3898,7 @@ export class GyroBallPowerAttr extends VariablePowerAttr { * @returns true if the function succeeds */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; const userSpeed = user.getEffectiveStat(Stat.SPD); if (userSpeed < 1) { // Gen 6+ always have 1 base power @@ -3915,7 +3913,7 @@ export class GyroBallPowerAttr extends VariablePowerAttr { export class LowHpPowerAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; const hpRatio = user.getHpRatio(); switch (true) { @@ -3945,7 +3943,7 @@ export class LowHpPowerAttr extends VariablePowerAttr { export class CompareWeightPowerAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; const userWeight = user.getWeight(); const targetWeight = target.getWeight(); @@ -3979,7 +3977,7 @@ export class CompareWeightPowerAttr extends VariablePowerAttr { export class HpPowerAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.NumberHolder).value = Utils.toDmgValue(150 * user.getHpRatio()); + (args[0] as NumberHolder).value = toDmgValue(150 * user.getHpRatio()); return true; } @@ -4007,7 +4005,7 @@ export class OpponentHighHpPowerAttr extends VariablePowerAttr { * @returns true */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.NumberHolder).value = Utils.toDmgValue(this.maxBasePower * target.getHpRatio()); + (args[0] as NumberHolder).value = toDmgValue(this.maxBasePower * target.getHpRatio()); return true; } @@ -4017,7 +4015,7 @@ export class FirstAttackDoublePowerAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { console.log(target.getLastXMoves(1), globalScene.currentBattle.turn); if (!target.getLastXMoves(1).find(m => m.turn === globalScene.currentBattle.turn)) { - (args[0] as Utils.NumberHolder).value *= 2; + (args[0] as NumberHolder).value *= 2; return true; } @@ -4029,7 +4027,7 @@ export class FirstAttackDoublePowerAttr extends VariablePowerAttr { export class TurnDamagedDoublePowerAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (user.turnData.attacksReceived.find(r => r.damage && r.sourceId === target.id)) { - (args[0] as Utils.NumberHolder).value *= 2; + (args[0] as NumberHolder).value *= 2; return true; } @@ -4042,7 +4040,7 @@ const magnitudeMessageFunc = (user: Pokemon, target: Pokemon, move: Move) => { globalScene.executeWithSeedOffset(() => { const magnitudeThresholds = [ 5, 15, 35, 65, 75, 95 ]; - const rand = Utils.randSeedInt(100); + const rand = randSeedInt(100); let m = 0; for (; m < magnitudeThresholds.length; m++) { @@ -4058,14 +4056,14 @@ const magnitudeMessageFunc = (user: Pokemon, target: Pokemon, move: Move) => { export class MagnitudePowerAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; const magnitudeThresholds = [ 5, 15, 35, 65, 75, 95 ]; const magnitudePowers = [ 10, 30, 50, 70, 90, 100, 110, 150 ]; let rand: number; - globalScene.executeWithSeedOffset(() => rand = Utils.randSeedInt(100), globalScene.currentBattle.turn << 6, globalScene.waveSeed); + globalScene.executeWithSeedOffset(() => rand = randSeedInt(100), globalScene.currentBattle.turn << 6, globalScene.waveSeed); let m = 0; for (; m < magnitudeThresholds.length; m++) { @@ -4083,7 +4081,7 @@ export class MagnitudePowerAttr extends VariablePowerAttr { export class AntiSunlightPowerDecreaseAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (!globalScene.arena.weather?.isEffectSuppressed()) { - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; const weatherType = globalScene.arena.weather?.weatherType || WeatherType.NONE; switch (weatherType) { case WeatherType.RAIN: @@ -4110,7 +4108,7 @@ export class FriendshipPowerAttr extends VariablePowerAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; const friendshipPower = Math.floor(Math.min(user instanceof PlayerPokemon ? user.friendship : user.species.baseFriendship, 255) / 2.5); power.value = Math.max(!this.invert ? friendshipPower : 102 - friendshipPower, 1); @@ -4126,7 +4124,7 @@ export class FriendshipPowerAttr extends VariablePowerAttr { export class RageFistPowerAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const { hitCount, prevHitCount } = user.battleData; - const basePower: Utils.NumberHolder = args[0]; + const basePower: NumberHolder = args[0]; this.updateHitReceivedCount(user, hitCount, prevHitCount); @@ -4171,7 +4169,7 @@ export class PositiveStatStagePowerAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const positiveStatStages: number = countPositiveStatStages(user); - (args[0] as Utils.NumberHolder).value += positiveStatStages * 20; + (args[0] as NumberHolder).value += positiveStatStages * 20; return true; } } @@ -4194,7 +4192,7 @@ export class PunishmentPowerAttr extends VariablePowerAttr { */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const positiveStatStages: number = countPositiveStatStages(target); - (args[0] as Utils.NumberHolder).value = Math.min( + (args[0] as NumberHolder).value = Math.min( this.PUNISHMENT_MAX_BASE_POWER, this.PUNISHMENT_MIN_BASE_POWER + positiveStatStages * 20 ); @@ -4210,18 +4208,18 @@ export class PresentPowerAttr extends VariablePowerAttr { */ const firstHit = (user.turnData.hitCount === user.turnData.hitsLeft); - const powerSeed = Utils.randSeedInt(firstHit ? 100 : 80); + const powerSeed = randSeedInt(firstHit ? 100 : 80); if (powerSeed <= 40) { - (args[0] as Utils.NumberHolder).value = 40; + (args[0] as NumberHolder).value = 40; } else if (40 < powerSeed && powerSeed <= 70) { - (args[0] as Utils.NumberHolder).value = 80; + (args[0] as NumberHolder).value = 80; } else if (70 < powerSeed && powerSeed <= 80) { - (args[0] as Utils.NumberHolder).value = 120; + (args[0] as NumberHolder).value = 120; } else if (80 < powerSeed && powerSeed <= 100) { // If this move is multi-hit, disable all other hits user.stopMultiHit(); globalScene.unshiftPhase(new PokemonHealPhase(target.getBattlerIndex(), - Utils.toDmgValue(target.getMaxHp() / 4), i18next.t("moveTriggers:regainedHealth", { pokemonName: getPokemonNameWithAffix(target) }), true)); + toDmgValue(target.getMaxHp() / 4), i18next.t("moveTriggers:regainedHealth", { pokemonName: getPokemonNameWithAffix(target) }), true)); } return true; @@ -4231,7 +4229,7 @@ export class PresentPowerAttr extends VariablePowerAttr { export class WaterShurikenPowerAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (user.species.speciesId === Species.GRENINJA && user.hasAbility(Abilities.BATTLE_BOND) && user.formIndex === 2) { - (args[0] as Utils.NumberHolder).value = 20; + (args[0] as NumberHolder).value = 20; return true; } return false; @@ -4253,7 +4251,7 @@ export class SpitUpPowerAttr extends VariablePowerAttr { const stockpilingTag = user.getTag(StockpilingTag); if (stockpilingTag && stockpilingTag.stockpiledCount > 0) { - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; power.value = this.multiplier * stockpilingTag.stockpiledCount; return true; } @@ -4321,12 +4319,12 @@ export class MultiHitPowerIncrementAttr extends VariablePowerAttr { * @param user {@linkcode Pokemon} that used the move * @param target {@linkcode Pokemon} that the move was used on * @param move {@linkcode Move} with this attribute - * @param args [0] {@linkcode Utils.NumberHolder} for final calculated power of move + * @param args [0] {@linkcode NumberHolder} for final calculated power of move * @returns true if attribute application succeeds */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const hitsTotal = user.turnData.hitCount - Math.max(user.turnData.hitsLeft, 0); - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; power.value = move.power * (1 + hitsTotal % this.maxHits); @@ -4358,11 +4356,11 @@ export class LastMoveDoublePowerAttr extends VariablePowerAttr { * @param user {@linkcode Pokemon} that used the move * @param target N/A * @param move N/A - * @param args [0] {@linkcode Utils.NumberHolder} that holds the resulting power of the move + * @param args [0] {@linkcode NumberHolder} that holds the resulting power of the move * @returns true if attribute application succeeds, false otherwise */ apply(user: Pokemon, _target: Pokemon, _move: Move, args: any[]): boolean { - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; const enemy = user.getOpponent(0); const pokemonActed: Pokemon[] = []; @@ -4374,10 +4372,10 @@ export class LastMoveDoublePowerAttr extends VariablePowerAttr { const userAlly = user.getAlly(); const enemyAlly = enemy?.getAlly(); - if (!Utils.isNullOrUndefined(userAlly) && userAlly.turnData.acted) { + if (!isNullOrUndefined(userAlly) && userAlly.turnData.acted) { pokemonActed.push(userAlly); } - if (!Utils.isNullOrUndefined(enemyAlly) && enemyAlly.turnData.acted) { + if (!isNullOrUndefined(enemyAlly) && enemyAlly.turnData.acted) { pokemonActed.push(enemyAlly); } } @@ -4407,7 +4405,7 @@ export class LastMoveDoublePowerAttr extends VariablePowerAttr { export class CombinedPledgePowerAttr extends VariablePowerAttr { override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const power = args[0]; - if (!(power instanceof Utils.NumberHolder)) { + if (!(power instanceof NumberHolder)) { return false; } const combinedPledgeMove = user.turnData.combiningPledge; @@ -4426,7 +4424,7 @@ export class CombinedPledgePowerAttr extends VariablePowerAttr { export class CombinedPledgeStabBoostAttr extends MoveAttr { override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const stabMultiplier = args[0]; - if (!(stabMultiplier instanceof Utils.NumberHolder)) { + if (!(stabMultiplier instanceof NumberHolder)) { return false; } const combinedPledgeMove = user.turnData.combiningPledge; @@ -4447,7 +4445,7 @@ export class CombinedPledgeStabBoostAttr extends MoveAttr { export class RoundPowerAttr extends VariablePowerAttr { override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const power = args[0]; - if (!(power instanceof Utils.NumberHolder)) { + if (!(power instanceof NumberHolder)) { return false; } @@ -4572,7 +4570,7 @@ export class TargetAtkUserAtkAttr extends VariableAtkAttr { super(); } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.NumberHolder).value = target.getEffectiveStat(Stat.ATK, target); + (args[0] as NumberHolder).value = target.getEffectiveStat(Stat.ATK, target); return true; } } @@ -4583,7 +4581,7 @@ export class DefAtkAttr extends VariableAtkAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.NumberHolder).value = user.getEffectiveStat(Stat.DEF, target); + (args[0] as NumberHolder).value = user.getEffectiveStat(Stat.DEF, target); return true; } } @@ -4605,7 +4603,7 @@ export class DefDefAttr extends VariableDefAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.NumberHolder).value = target.getEffectiveStat(Stat.DEF, user); + (args[0] as NumberHolder).value = target.getEffectiveStat(Stat.DEF, user); return true; } } @@ -4623,7 +4621,7 @@ export class VariableAccuracyAttr extends MoveAttr { export class ThunderAccuracyAttr extends VariableAccuracyAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (!globalScene.arena.weather?.isEffectSuppressed()) { - const accuracy = args[0] as Utils.NumberHolder; + const accuracy = args[0] as NumberHolder; const weatherType = globalScene.arena.weather?.weatherType || WeatherType.NONE; switch (weatherType) { case WeatherType.SUNNY: @@ -4649,7 +4647,7 @@ export class ThunderAccuracyAttr extends VariableAccuracyAttr { export class StormAccuracyAttr extends VariableAccuracyAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (!globalScene.arena.weather?.isEffectSuppressed()) { - const accuracy = args[0] as Utils.NumberHolder; + const accuracy = args[0] as NumberHolder; const weatherType = globalScene.arena.weather?.weatherType || WeatherType.NONE; switch (weatherType) { case WeatherType.RAIN: @@ -4680,7 +4678,7 @@ export class AlwaysHitMinimizeAttr extends VariableAccuracyAttr { */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (target.getTag(BattlerTagType.MINIMIZED)) { - const accuracy = args[0] as Utils.NumberHolder; + const accuracy = args[0] as NumberHolder; accuracy.value = -1; return true; @@ -4693,7 +4691,7 @@ export class AlwaysHitMinimizeAttr extends VariableAccuracyAttr { export class ToxicAccuracyAttr extends VariableAccuracyAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (user.isOfType(PokemonType.POISON)) { - const accuracy = args[0] as Utils.NumberHolder; + const accuracy = args[0] as NumberHolder; accuracy.value = -1; return true; } @@ -4705,7 +4703,7 @@ export class ToxicAccuracyAttr extends VariableAccuracyAttr { export class BlizzardAccuracyAttr extends VariableAccuracyAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (!globalScene.arena.weather?.isEffectSuppressed()) { - const accuracy = args[0] as Utils.NumberHolder; + const accuracy = args[0] as NumberHolder; const weatherType = globalScene.arena.weather?.weatherType || WeatherType.NONE; if (weatherType === WeatherType.HAIL || weatherType === WeatherType.SNOW) { accuracy.value = -1; @@ -4725,7 +4723,7 @@ export class VariableMoveCategoryAttr extends MoveAttr { export class PhotonGeyserCategoryAttr extends VariableMoveCategoryAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const category = (args[0] as Utils.NumberHolder); + const category = (args[0] as NumberHolder); if (user.getEffectiveStat(Stat.ATK, target, move) > user.getEffectiveStat(Stat.SPATK, target, move)) { category.value = MoveCategory.PHYSICAL; @@ -4745,7 +4743,7 @@ export class PhotonGeyserCategoryAttr extends VariableMoveCategoryAttr { */ export class TeraMoveCategoryAttr extends VariableMoveCategoryAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const category = (args[0] as Utils.NumberHolder); + const category = (args[0] as NumberHolder); if (user.isTerastallized && user.getEffectiveStat(Stat.ATK, target, move, true, true, false, false, true) > user.getEffectiveStat(Stat.SPATK, target, move, true, true, false, false, true)) { @@ -4769,12 +4767,12 @@ export class TeraBlastPowerAttr extends VariablePowerAttr { * @param target n/a * @param move {@linkcode Move} the Move with this attribute (i.e. Tera Blast) * @param args - * - [0] {@linkcode Utils.NumberHolder} the applied move's power, factoring in + * - [0] {@linkcode NumberHolder} the applied move's power, factoring in * previously applied power modifiers. * @returns */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; if (user.isTerastallized && user.getTeraType() === PokemonType.STELLAR) { power.value = 100; return true; @@ -4794,11 +4792,11 @@ export class StatusCategoryOnAllyAttr extends VariableMoveCategoryAttr { * @param user {@linkcode Pokemon} using the move * @param target {@linkcode Pokemon} target of the move * @param move {@linkcode Move} with this attribute - * @param args [0] {@linkcode Utils.NumberHolder} The category of the move + * @param args [0] {@linkcode NumberHolder} The category of the move * @returns true if the function succeeds */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const category = (args[0] as Utils.NumberHolder); + const category = (args[0] as NumberHolder); if (user.getAlly() === target) { category.value = MoveCategory.STATUS; @@ -4811,7 +4809,7 @@ export class StatusCategoryOnAllyAttr extends VariableMoveCategoryAttr { export class ShellSideArmCategoryAttr extends VariableMoveCategoryAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const category = (args[0] as Utils.NumberHolder); + const category = (args[0] as NumberHolder); const predictedPhysDmg = target.getBaseDamage(user, move, MoveCategory.PHYSICAL, true, true, true, true); const predictedSpecDmg = target.getBaseDamage(user, move, MoveCategory.SPECIAL, true, true, true, true); @@ -4836,7 +4834,7 @@ export class VariableMoveTypeAttr extends MoveAttr { export class FormChangeItemTypeAttr extends VariableMoveTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveType = args[0]; - if (!(moveType instanceof Utils.NumberHolder)) { + if (!(moveType instanceof NumberHolder)) { return false; } @@ -4854,7 +4852,7 @@ export class FormChangeItemTypeAttr extends VariableMoveTypeAttr { export class TechnoBlastTypeAttr extends VariableMoveTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveType = args[0]; - if (!(moveType instanceof Utils.NumberHolder)) { + if (!(moveType instanceof NumberHolder)) { return false; } @@ -4888,7 +4886,7 @@ export class TechnoBlastTypeAttr extends VariableMoveTypeAttr { export class AuraWheelTypeAttr extends VariableMoveTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveType = args[0]; - if (!(moveType instanceof Utils.NumberHolder)) { + if (!(moveType instanceof NumberHolder)) { return false; } @@ -4913,7 +4911,7 @@ export class AuraWheelTypeAttr extends VariableMoveTypeAttr { export class RagingBullTypeAttr extends VariableMoveTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveType = args[0]; - if (!(moveType instanceof Utils.NumberHolder)) { + if (!(moveType instanceof NumberHolder)) { return false; } @@ -4941,7 +4939,7 @@ export class RagingBullTypeAttr extends VariableMoveTypeAttr { export class IvyCudgelTypeAttr extends VariableMoveTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveType = args[0]; - if (!(moveType instanceof Utils.NumberHolder)) { + if (!(moveType instanceof NumberHolder)) { return false; } @@ -4976,7 +4974,7 @@ export class IvyCudgelTypeAttr extends VariableMoveTypeAttr { export class WeatherBallTypeAttr extends VariableMoveTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveType = args[0]; - if (!(moveType instanceof Utils.NumberHolder)) { + if (!(moveType instanceof NumberHolder)) { return false; } @@ -5018,12 +5016,12 @@ export class TerrainPulseTypeAttr extends VariableMoveTypeAttr { * @param user {@linkcode Pokemon} using this move * @param target N/A * @param move N/A - * @param args [0] {@linkcode Utils.NumberHolder} The move's type to be modified + * @param args [0] {@linkcode NumberHolder} The move's type to be modified * @returns true if the function succeeds */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveType = args[0]; - if (!(moveType instanceof Utils.NumberHolder)) { + if (!(moveType instanceof NumberHolder)) { return false; } @@ -5059,7 +5057,7 @@ export class TerrainPulseTypeAttr extends VariableMoveTypeAttr { export class HiddenPowerTypeAttr extends VariableMoveTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveType = args[0]; - if (!(moveType instanceof Utils.NumberHolder)) { + if (!(moveType instanceof NumberHolder)) { return false; } @@ -5094,7 +5092,7 @@ export class TeraBlastTypeAttr extends VariableMoveTypeAttr { */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveType = args[0]; - if (!(moveType instanceof Utils.NumberHolder)) { + if (!(moveType instanceof NumberHolder)) { return false; } @@ -5117,12 +5115,12 @@ export class TeraStarstormTypeAttr extends VariableMoveTypeAttr { * @param user the {@linkcode Pokemon} using the move * @param target n/a * @param move n/a - * @param args[0] {@linkcode Utils.NumberHolder} the move type + * @param args[0] {@linkcode NumberHolder} the move type * @returns `true` if the move type is changed to {@linkcode PokemonType.STELLAR}, `false` otherwise */ override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (user.isTerastallized && user.hasSpecies(Species.TERAPAGOS)) { - const moveType = args[0] as Utils.NumberHolder; + const moveType = args[0] as NumberHolder; moveType.value = PokemonType.STELLAR; return true; @@ -5134,7 +5132,7 @@ export class TeraStarstormTypeAttr extends VariableMoveTypeAttr { export class MatchUserTypeAttr extends VariableMoveTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveType = args[0]; - if (!(moveType instanceof Utils.NumberHolder)) { + if (!(moveType instanceof NumberHolder)) { return false; } const userTypes = user.getTypes(true); @@ -5160,7 +5158,7 @@ export class MatchUserTypeAttr extends VariableMoveTypeAttr { export class CombinedPledgeTypeAttr extends VariableMoveTypeAttr { override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveType = args[0]; - if (!(moveType instanceof Utils.NumberHolder)) { + if (!(moveType instanceof NumberHolder)) { return false; } @@ -5203,7 +5201,7 @@ export class VariableMoveTypeMultiplierAttr extends MoveAttr { export class NeutralDamageAgainstFlyingTypeMultiplierAttr extends VariableMoveTypeMultiplierAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (!target.getTag(BattlerTagType.IGNORE_FLYING)) { - const multiplier = args[0] as Utils.NumberHolder; + const multiplier = args[0] as NumberHolder; //When a flying type is hit, the first hit is always 1x multiplier. if (target.isOfType(PokemonType.FLYING)) { multiplier.value = 1; @@ -5221,11 +5219,11 @@ export class IceNoEffectTypeAttr extends VariableMoveTypeMultiplierAttr { * @param user n/a * @param target The {@linkcode Pokemon} targeted by the move * @param move n/a - * @param args `[0]` a {@linkcode Utils.NumberHolder | NumberHolder} containing a type effectiveness multiplier + * @param args `[0]` a {@linkcode NumberHolder | NumberHolder} containing a type effectiveness multiplier * @returns `true` if this Ice-type immunity applies; `false` otherwise */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const multiplier = args[0] as Utils.NumberHolder; + const multiplier = args[0] as NumberHolder; if (target.isOfType(PokemonType.ICE)) { multiplier.value = 0; return true; @@ -5236,7 +5234,7 @@ export class IceNoEffectTypeAttr extends VariableMoveTypeMultiplierAttr { export class FlyingTypeMultiplierAttr extends VariableMoveTypeMultiplierAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const multiplier = args[0] as Utils.NumberHolder; + const multiplier = args[0] as NumberHolder; multiplier.value *= target.getAttackTypeEffectiveness(PokemonType.FLYING, user); return true; } @@ -5265,7 +5263,7 @@ export class VariableMoveTypeChartAttr extends MoveAttr { */ export class FreezeDryAttr extends VariableMoveTypeChartAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const multiplier = args[0] as Utils.NumberHolder; + const multiplier = args[0] as NumberHolder; const defType = args[1] as PokemonType; if (defType === PokemonType.WATER) { @@ -5279,7 +5277,7 @@ export class FreezeDryAttr extends VariableMoveTypeChartAttr { export class OneHitKOAccuracyAttr extends VariableAccuracyAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const accuracy = args[0] as Utils.NumberHolder; + const accuracy = args[0] as NumberHolder; if (user.level < target.level) { accuracy.value = 0; } else { @@ -5301,7 +5299,7 @@ export class SheerColdAccuracyAttr extends OneHitKOAccuracyAttr { * @returns Returns true if move is successful, false if misses. */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const accuracy = args[0] as Utils.NumberHolder; + const accuracy = args[0] as NumberHolder; if (user.level < target.level) { accuracy.value = 0; } else { @@ -5343,15 +5341,15 @@ export class NoEffectAttr extends MoveAttr { } const crashDamageFunc = (user: Pokemon, move: Move) => { - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); applyAbAttrs(BlockNonDirectDamageAbAttr, user, cancelled); if (cancelled.value) { return false; } - user.damageAndUpdate(Utils.toDmgValue(user.getMaxHp() / 2), { result: HitResult.INDIRECT }); + user.damageAndUpdate(toDmgValue(user.getMaxHp() / 2), { result: HitResult.INDIRECT }); globalScene.queueMessage(i18next.t("moveTriggers:keptGoingAndCrashed", { pokemonName: getPokemonNameWithAffix(user) })); - user.turnData.damageTaken += Utils.toDmgValue(user.getMaxHp() / 2); + user.turnData.damageTaken += toDmgValue(user.getMaxHp() / 2); return true; }; @@ -6177,10 +6175,10 @@ export class RevivalBlessingAttr extends MoveEffectAttr { const pokemon = faintedPokemon[user.randSeedInt(faintedPokemon.length)]; const slotIndex = globalScene.getEnemyParty().findIndex((p) => pokemon.id === p.id); pokemon.resetStatus(); - pokemon.heal(Math.min(Utils.toDmgValue(0.5 * pokemon.getMaxHp()), pokemon.getMaxHp())); + pokemon.heal(Math.min(toDmgValue(0.5 * pokemon.getMaxHp()), pokemon.getMaxHp())); globalScene.queueMessage(i18next.t("moveTriggers:revivalBlessing", { pokemonName: getPokemonNameWithAffix(pokemon) }), 0, true); const allyPokemon = user.getAlly(); - if (globalScene.currentBattle.double && globalScene.getEnemyParty().length > 1 && !Utils.isNullOrUndefined(allyPokemon)) { + if (globalScene.currentBattle.double && globalScene.getEnemyParty().length > 1 && !isNullOrUndefined(allyPokemon)) { // Handle cases where revived pokemon needs to get switched in on same turn if (allyPokemon.isFainted() || allyPokemon === pokemon) { // Enemy switch phase should be removed and replaced with the revived pkmn switching in @@ -6366,7 +6364,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { globalScene.queueMessage(i18next.t("moveTriggers:fled", { pokemonName: getPokemonNameWithAffix(switchOutTarget) }), null, true, 500); // in double battles redirect potential moves off fled pokemon - if (globalScene.currentBattle.double && !Utils.isNullOrUndefined(allyPokemon)) { + if (globalScene.currentBattle.double && !isNullOrUndefined(allyPokemon)) { globalScene.redirectPokemonMoves(switchOutTarget, allyPokemon); } } @@ -6389,7 +6387,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { } getFailedText(_user: Pokemon, target: Pokemon, _move: Move): string | undefined { - const blockedByAbility = new Utils.BooleanHolder(false); + const blockedByAbility = new BooleanHolder(false); applyAbAttrs(ForceSwitchOutImmunityAbAttr, target, blockedByAbility); if (blockedByAbility.value) { return i18next.t("moveTriggers:cannotBeSwitchedOut", { pokemonName: getPokemonNameWithAffix(target) }); @@ -6417,7 +6415,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { return false; } - const blockedByAbility = new Utils.BooleanHolder(false); + const blockedByAbility = new BooleanHolder(false); applyAbAttrs(ForceSwitchOutImmunityAbAttr, target, blockedByAbility); return !blockedByAbility.value; } @@ -6776,7 +6774,7 @@ export class RandomMoveAttr extends CallMoveAttr { * @param args Unused */ override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const moveIds = Utils.getEnumValues(Moves).map(m => !this.invalidMoves.has(m) && !allMoves[m].name.endsWith(" (N)") ? m : Moves.NONE); + const moveIds = getEnumValues(Moves).map(m => !this.invalidMoves.has(m) && !allMoves[m].name.endsWith(" (N)") ? m : Moves.NONE); let moveId: Moves = Moves.NONE; do { moveId = this.getMoveOverride() ?? moveIds[user.randSeedInt(moveIds.length)]; @@ -7047,7 +7045,7 @@ export class RepeatMoveAttr extends MoveEffectAttr { const firstTarget = globalScene.getField()[moveTargets[0]]; if (globalScene.currentBattle.double && moveTargets.length === 1 && firstTarget.isFainted() && firstTarget !== target.getAlly()) { const ally = firstTarget.getAlly(); - if (!Utils.isNullOrUndefined(ally) && ally.isActive()) { // ally exists, is not dead and can sponge the blast + if (!isNullOrUndefined(ally) && ally.isActive()) { // ally exists, is not dead and can sponge the blast moveTargets = [ ally.getBattlerIndex() ]; } } @@ -7423,7 +7421,7 @@ export class AbilityCopyAttr extends MoveEffectAttr { user.setTempAbility(target.getAbility()); const ally = user.getAlly(); - if (this.copyToPartner && globalScene.currentBattle?.double && !Utils.isNullOrUndefined(ally) && ally.hp) { // TODO is this the best way to check that the ally is active? + if (this.copyToPartner && globalScene.currentBattle?.double && !isNullOrUndefined(ally) && ally.hp) { // TODO is this the best way to check that the ally is active? globalScene.queueMessage(i18next.t("moveTriggers:copiedTargetAbility", { pokemonName: getPokemonNameWithAffix(ally), targetName: getPokemonNameWithAffix(target), abilityName: allAbilities[target.getAbility().id].name })); ally.setTempAbility(target.getAbility()); } @@ -7839,7 +7837,7 @@ export class VariableTargetAttr extends MoveAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const targetVal = args[0] as Utils.NumberHolder; + const targetVal = args[0] as NumberHolder; targetVal.value = this.targetChangeFunc(user, target, move); return true; } @@ -7930,7 +7928,7 @@ const failOnBossCondition: MoveConditionFunc = (user, target, move) => !target.i const failIfSingleBattle: MoveConditionFunc = (user, target, move) => globalScene.currentBattle.double; const failIfDampCondition: MoveConditionFunc = (user, target, move) => { - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); globalScene.getField(true).map(p=>applyAbAttrs(FieldPreventExplosiveMovesAbAttr, p, cancelled)); // Queue a message if an ability prevented usage of the move if (cancelled.value) { @@ -8065,7 +8063,7 @@ export class UpperHandCondition extends MoveCondition { export class hitsSameTypeAttr extends VariableMoveTypeMultiplierAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const multiplier = args[0] as Utils.NumberHolder; + const multiplier = args[0] as NumberHolder; if (!user.getTypes().some(type => target.getTypes().includes(type))) { multiplier.value = 0; return true; @@ -8116,7 +8114,7 @@ export class ResistLastMoveTypeAttr extends MoveEffectAttr { } const type = validTypes[user.randSeedInt(validTypes.length)]; user.summonData.types = [ type ]; - globalScene.queueMessage(i18next.t("battle:transformedIntoType", { pokemonName: getPokemonNameWithAffix(user), type: Utils.toReadableString(PokemonType[type]) })); + globalScene.queueMessage(i18next.t("battle:transformedIntoType", { pokemonName: getPokemonNameWithAffix(user), type: toReadableString(PokemonType[type]) })); user.updateInfo(); return true; @@ -8190,7 +8188,7 @@ export type MoveTargetSet = { }; export function getMoveTargets(user: Pokemon, move: Moves, replaceTarget?: MoveTarget): MoveTargetSet { - const variableTarget = new Utils.NumberHolder(0); + const variableTarget = new NumberHolder(0); user.getOpponents().forEach(p => applyMoveAttrs(VariableTargetAttr, user, p, allMoves[move], variableTarget)); let moveTarget: MoveTarget | undefined; @@ -8218,7 +8216,7 @@ export function getMoveTargets(user: Pokemon, move: Moves, replaceTarget?: MoveT case MoveTarget.OTHER: case MoveTarget.ALL_NEAR_OTHERS: case MoveTarget.ALL_OTHERS: - set = !Utils.isNullOrUndefined(ally) ? (opponents.concat([ ally ])) : opponents; + set = !isNullOrUndefined(ally) ? (opponents.concat([ ally ])) : opponents; multiple = moveTarget === MoveTarget.ALL_NEAR_OTHERS || moveTarget === MoveTarget.ALL_OTHERS; break; case MoveTarget.NEAR_ENEMY: @@ -8235,21 +8233,21 @@ export function getMoveTargets(user: Pokemon, move: Moves, replaceTarget?: MoveT return { targets: [ -1 as BattlerIndex ], multiple: false }; case MoveTarget.NEAR_ALLY: case MoveTarget.ALLY: - set = !Utils.isNullOrUndefined(ally) ? [ ally ] : []; + set = !isNullOrUndefined(ally) ? [ ally ] : []; break; case MoveTarget.USER_OR_NEAR_ALLY: case MoveTarget.USER_AND_ALLIES: case MoveTarget.USER_SIDE: - set = !Utils.isNullOrUndefined(ally) ? [ user, ally ] : [ user ]; + set = !isNullOrUndefined(ally) ? [ user, ally ] : [ user ]; multiple = moveTarget !== MoveTarget.USER_OR_NEAR_ALLY; break; case MoveTarget.ALL: case MoveTarget.BOTH_SIDES: - set = (!Utils.isNullOrUndefined(ally) ? [ user, ally ] : [ user ]).concat(opponents); + set = (!isNullOrUndefined(ally) ? [ user, ally ] : [ user ]).concat(opponents); multiple = true; break; case MoveTarget.CURSE: - const extraTargets = !Utils.isNullOrUndefined(ally) ? [ ally ] : []; + const extraTargets = !isNullOrUndefined(ally) ? [ ally ] : []; set = user.getTypes(true).includes(PokemonType.GHOST) ? (opponents.concat(extraTargets)) : [ user ]; break; } @@ -8408,7 +8406,7 @@ export function initMoves() { .attr(AddBattlerTagAttr, BattlerTagType.DISABLED, false, true) .condition((user, target, move) => { const lastRealMove = target.getLastXMoves(-1).find(m => !m.virtual); - return !Utils.isNullOrUndefined(lastRealMove) && lastRealMove.move !== Moves.NONE && lastRealMove.move !== Moves.STRUGGLE; + return !isNullOrUndefined(lastRealMove) && lastRealMove.move !== Moves.NONE && lastRealMove.move !== Moves.STRUGGLE; }) .ignoresSubstitute() .reflectable(), @@ -9716,7 +9714,7 @@ export function initMoves() { .condition(failOnGravityCondition) .condition((_user, target, _move) => ![ Species.DIGLETT, Species.DUGTRIO, Species.ALOLA_DIGLETT, Species.ALOLA_DUGTRIO, Species.SANDYGAST, Species.PALOSSAND, Species.WIGLETT, Species.WUGTRIO ].includes(target.species.speciesId)) .condition((_user, target, _move) => !(target.species.speciesId === Species.GENGAR && target.getFormKey() === "mega")) - .condition((_user, target, _move) => Utils.isNullOrUndefined(target.getTag(BattlerTagType.INGRAIN)) && Utils.isNullOrUndefined(target.getTag(BattlerTagType.IGNORE_FLYING))) + .condition((_user, target, _move) => isNullOrUndefined(target.getTag(BattlerTagType.INGRAIN)) && isNullOrUndefined(target.getTag(BattlerTagType.IGNORE_FLYING))) .attr(AddBattlerTagAttr, BattlerTagType.TELEKINESIS, false, true, 3) .attr(AddBattlerTagAttr, BattlerTagType.FLOATING, false, true, 3) .reflectable(), diff --git a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts index 11924f93df4..5f88ca083c0 100644 --- a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts @@ -12,7 +12,7 @@ import { modifierTypes } from "#app/modifier/modifier-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { PartyMemberStrength } from "#enums/party-member-strength"; import { globalScene } from "#app/global-scene"; -import * as Utils from "#app/utils"; +import { randSeedInt } from "#app/utils"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; @@ -46,7 +46,7 @@ export const MysteriousChallengersEncounter: MysteryEncounter = MysteryEncounter const normalConfig = trainerConfigs[normalTrainerType].clone(); let female = false; if (normalConfig.hasGenders) { - female = !!Utils.randSeedInt(2); + female = !!randSeedInt(2); } const normalSpriteKey = normalConfig.getSpriteKey(female, normalConfig.doubleOnly); encounter.enemyPartyConfigs.push({ @@ -76,7 +76,7 @@ export const MysteriousChallengersEncounter: MysteryEncounter = MysteryEncounter hardConfig.setPartyTemplates(hardTemplate); female = false; if (hardConfig.hasGenders) { - female = !!Utils.randSeedInt(2); + female = !!randSeedInt(2); } const hardSpriteKey = hardConfig.getSpriteKey(female, hardConfig.doubleOnly); encounter.enemyPartyConfigs.push({ @@ -96,7 +96,7 @@ export const MysteriousChallengersEncounter: MysteryEncounter = MysteryEncounter brutalConfig.partyTemplateFunc = null; // Overrides gym leader party template func female = false; if (brutalConfig.hasGenders) { - female = !!Utils.randSeedInt(2); + female = !!randSeedInt(2); } const brutalSpriteKey = brutalConfig.getSpriteKey(female, brutalConfig.doubleOnly); encounter.enemyPartyConfigs.push({ diff --git a/src/data/mystery-encounters/mystery-encounter.ts b/src/data/mystery-encounters/mystery-encounter.ts index 53e976cda8a..ff098d4d7dd 100644 --- a/src/data/mystery-encounters/mystery-encounter.ts +++ b/src/data/mystery-encounters/mystery-encounter.ts @@ -5,7 +5,7 @@ import { capitalizeFirstLetter, isNullOrUndefined } from "#app/utils"; import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; import type { MysteryEncounterSpriteConfig } from "#app/field/mystery-encounter-intro"; import MysteryEncounterIntroVisuals from "#app/field/mystery-encounter-intro"; -import * as Utils from "#app/utils"; +import { randSeedInt } from "#app/utils"; import type { StatusEffect } from "#enums/status-effect"; import type { OptionTextDisplay } from "./mystery-encounter-dialogue"; import type MysteryEncounterDialogue from "./mystery-encounter-dialogue"; @@ -378,13 +378,13 @@ export default class MysteryEncounter implements IMysteryEncounter { } if (truePrimaryPool.length > 0) { // Always choose from the non-overlapping pokemon first - this.primaryPokemon = truePrimaryPool[Utils.randSeedInt(truePrimaryPool.length, 0)]; + this.primaryPokemon = truePrimaryPool[randSeedInt(truePrimaryPool.length, 0)]; return true; } // If there are multiple overlapping pokemon, we're okay - just choose one and take it out of the primary pokemon pool if (overlap.length > 1 || this.secondaryPokemon.length - overlap.length >= 1) { // is this working? - this.primaryPokemon = overlap[Utils.randSeedInt(overlap.length, 0)]; + this.primaryPokemon = overlap[randSeedInt(overlap.length, 0)]; this.secondaryPokemon = this.secondaryPokemon.filter(supp => supp !== this.primaryPokemon); return true; } @@ -394,7 +394,7 @@ export default class MysteryEncounter implements IMysteryEncounter { return false; } // this means we CAN have the same pokemon be a primary and secondary pokemon, so just choose any qualifying one randomly. - this.primaryPokemon = qualified[Utils.randSeedInt(qualified.length, 0)]; + this.primaryPokemon = qualified[randSeedInt(qualified.length, 0)]; return true; } diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index f3a06242a13..a9f6b787878 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -30,8 +30,7 @@ import type { OptionSelectConfig, OptionSelectItem } from "#app/ui/abstact-optio import type { PartyOption, PokemonSelectFilter } from "#app/ui/party-ui-handler"; import { PartyUiMode } from "#app/ui/party-ui-handler"; import { Mode } from "#app/ui/ui"; -import * as Utils from "#app/utils"; -import { isNullOrUndefined, randSeedInt, randSeedItem } from "#app/utils"; +import { isNullOrUndefined, randSeedInt, randomString, randSeedItem } from "#app/utils"; import type { BattlerTagType } from "#enums/battler-tag-type"; import { Biome } from "#enums/biome"; import type { TrainerType } from "#enums/trainer-type"; @@ -168,7 +167,7 @@ export async function initBattleWithEnemyConfig(partyConfig: EnemyPartyConfig): const doubleTrainer = trainerConfig.doubleOnly || (trainerConfig.hasDouble && !!partyConfig.doubleBattle); doubleBattle = doubleTrainer; - const trainerFemale = isNullOrUndefined(partyConfig.female) ? !!Utils.randSeedInt(2) : partyConfig.female; + const trainerFemale = isNullOrUndefined(partyConfig.female) ? !!randSeedInt(2) : partyConfig.female; const newTrainer = new Trainer( trainerConfig.trainerType, doubleTrainer ? TrainerVariant.DOUBLE : trainerFemale ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT, @@ -286,7 +285,7 @@ export async function initBattleWithEnemyConfig(partyConfig: EnemyPartyConfig): // Generate new id, reset status and HP in case using data source if (config.dataSource) { - enemyPokemon.id = Utils.randSeedInt(4294967296); + enemyPokemon.id = randSeedInt(4294967296); } // Set form @@ -1115,7 +1114,7 @@ export function calculateMEAggregateStats(baseSpawnWeight: number) { const validMEfloorsByBiome = new Map(biomes.map(b => [b, 0])); let currentBiome = Biome.TOWN; let currentArena = globalScene.newArena(currentBiome); - globalScene.setSeed(Utils.randomString(24)); + globalScene.setSeed(randomString(24)); globalScene.resetSeed(); for (let i = 10; i < 180; i++) { // Boss @@ -1130,16 +1129,16 @@ export function calculateMEAggregateStats(baseSpawnWeight: number) { globalScene.executeWithSeedOffset(() => { biomes = (biomeLinks[currentBiome] as (Biome | [Biome, number])[]) .filter(b => { - return !Array.isArray(b) || !Utils.randSeedInt(b[1]); + return !Array.isArray(b) || !randSeedInt(b[1]); }) .map(b => (!Array.isArray(b) ? b : b[0])); }, i * 100); if (biomes! && biomes.length > 0) { const specialBiomes = biomes.filter(b => alwaysPickTheseBiomes.includes(b)); if (specialBiomes.length > 0) { - currentBiome = specialBiomes[Utils.randSeedInt(specialBiomes.length)]; + currentBiome = specialBiomes[randSeedInt(specialBiomes.length)]; } else { - currentBiome = biomes[Utils.randSeedInt(biomes.length)]; + currentBiome = biomes[randSeedInt(biomes.length)]; } } } else if (biomeLinks.hasOwnProperty(currentBiome)) { @@ -1167,7 +1166,7 @@ export function calculateMEAggregateStats(baseSpawnWeight: number) { // Otherwise, roll encounter - const roll = Utils.randSeedInt(256); + const roll = randSeedInt(256); validMEfloorsByBiome.set(Biome[currentBiome], (validMEfloorsByBiome.get(Biome[currentBiome]) ?? 0) + 1); // If total number of encounters is lower than expected for the run, slightly favor a new encounter @@ -1192,7 +1191,7 @@ export function calculateMEAggregateStats(baseSpawnWeight: number) { tierWeights[1] = tierWeights[1] - 4 * numEncounters[1]; const totalWeight = tierWeights.reduce((a, b) => a + b); - const tierValue = Utils.randSeedInt(totalWeight); + const tierValue = randSeedInt(totalWeight); const commonThreshold = totalWeight - tierWeights[0]; // 64 - 32 = 32 const uncommonThreshold = totalWeight - tierWeights[0] - tierWeights[1]; // 64 - 32 - 16 = 16 const rareThreshold = totalWeight - tierWeights[0] - tierWeights[1] - tierWeights[2]; // 64 - 32 - 16 - 10 = 6 @@ -1281,7 +1280,7 @@ export function calculateRareSpawnAggregateStats(luckValue: number) { const calculateNumRareEncounters = (): any[] => { const bossEncountersByRarity = [0, 0, 0, 0]; - globalScene.setSeed(Utils.randomString(24)); + globalScene.setSeed(randomString(24)); globalScene.resetSeed(); // There are 12 wild boss floors for (let i = 0; i < 12; i++) { @@ -1291,7 +1290,7 @@ export function calculateRareSpawnAggregateStats(luckValue: number) { if (!Number.isNaN(luckValue)) { luckModifier = luckValue * 0.5; } - const tierValue = Utils.randSeedInt(64 - luckModifier); + const tierValue = randSeedInt(64 - luckModifier); const tier = tierValue >= 20 ? BiomePoolTier.BOSS diff --git a/src/data/nature.ts b/src/data/nature.ts index e23d92c14b0..2ab4723c10d 100644 --- a/src/data/nature.ts +++ b/src/data/nature.ts @@ -1,4 +1,4 @@ -import * as Utils from "../utils"; +import { toReadableString } from "#app/utils"; import { TextStyle, getBBCodeFrag } from "../ui/text"; import { Nature } from "#enums/nature"; import { UiTheme } from "#enums/ui-theme"; @@ -12,7 +12,7 @@ export function getNatureName( ignoreBBCode = false, uiTheme: UiTheme = UiTheme.DEFAULT, ): string { - let ret = Utils.toReadableString(Nature[nature]); + let ret = toReadableString(Nature[nature]); //Translating nature if (i18next.exists(`nature:${ret}`)) { ret = i18next.t(`nature:${ret}` as any); diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index a8942a39880..a27c00121dc 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -8,7 +8,7 @@ import type { AnySound } from "#app/battle-scene"; import { globalScene } from "#app/global-scene"; import type { GameMode } from "#app/game-mode"; import { DexAttr, type StarterMoveset } from "#app/system/game-data"; -import * as Utils from "#app/utils"; +import { isNullOrUndefined, capitalizeString, randSeedInt, randSeedGauss, randSeedItem } from "#app/utils"; import { uncatchableSpecies } from "#app/data/balance/biomes"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { GrowthRate } from "#app/data/exp"; @@ -290,7 +290,7 @@ export abstract class PokemonSpeciesForm { * @returns The id of the ability */ getPassiveAbility(formIndex?: number): Abilities { - if (Utils.isNullOrUndefined(formIndex)) { + if (isNullOrUndefined(formIndex)) { formIndex = this.formIndex; } let starterSpeciesId = this.speciesId; @@ -626,7 +626,7 @@ export abstract class PokemonSpeciesForm { const spritePath = this.getSpriteAtlasPath(female, formIndex, shiny, variant, back) .replace("variant/", "") .replace(/_[1-3]$/, ""); - if (!Utils.isNullOrUndefined(variant)) { + if (!isNullOrUndefined(variant)) { loadPokemonVariantAssets(spriteKey, spritePath, variant).then(() => resolve()); } }); @@ -852,8 +852,8 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali */ getFormNameToDisplay(formIndex = 0, append = false): string { const formKey = this.forms?.[formIndex!]?.formKey; - const formText = Utils.capitalizeString(formKey, "-", false, false) || ""; - const speciesName = Utils.capitalizeString(Species[this.speciesId], "_", true, false); + const formText = capitalizeString(formKey, "-", false, false) || ""; + const speciesName = capitalizeString(Species[this.speciesId], "_", true, false); let ret = ""; const region = this.getRegion(); @@ -884,7 +884,7 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali if (i18next.exists(i18key)) { ret = i18next.t(i18key); } else { - const rootSpeciesName = Utils.capitalizeString(Species[this.getRootSpeciesId()], "_", true, false); + const rootSpeciesName = capitalizeString(Species[this.getRootSpeciesId()], "_", true, false); const i18RootKey = `pokemonForm:${rootSpeciesName}${formText}`; ret = i18next.exists(i18RootKey) ? i18next.t(i18RootKey) : formText; } @@ -1079,7 +1079,7 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali return this.speciesId; } - const randValue = evolutionPool.size === 1 ? 0 : Utils.randSeedInt(totalWeight); + const randValue = evolutionPool.size === 1 ? 0 : randSeedInt(totalWeight); for (const weight of evolutionPool.keys()) { if (randValue < weight) { @@ -1164,7 +1164,7 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali Math.min( Math.max( evolution?.level! + - Math.round(Utils.randSeedGauss(0.5, 1 + levelDiff * 0.2) * Math.max(evolution?.wildDelay!, 0.5) * 5) - + Math.round(randSeedGauss(0.5, 1 + levelDiff * 0.2) * Math.max(evolution?.wildDelay!, 0.5) * 5) - 1, 2, evolution?.level!, @@ -1182,7 +1182,7 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali Math.min( Math.max( lastPrevolutionLevel + - Math.round(Utils.randSeedGauss(0.5, 1 + levelDiff * 0.2) * Math.max(evolution?.wildDelay!, 0.5) * 5), + Math.round(randSeedGauss(0.5, 1 + levelDiff * 0.2) * Math.max(evolution?.wildDelay!, 0.5) * 5), lastPrevolutionLevel + 1, evolution?.level!, ), @@ -1367,7 +1367,7 @@ export function getPokerusStarters(): PokemonSpecies[] { globalScene.executeWithSeedOffset( () => { while (pokerusStarters.length < POKERUS_STARTER_COUNT) { - const randomSpeciesId = Number.parseInt(Utils.randSeedItem(Object.keys(speciesStarterCosts)), 10); + const randomSpeciesId = Number.parseInt(randSeedItem(Object.keys(speciesStarterCosts)), 10); const species = getPokemonSpecies(randomSpeciesId); if (!pokerusStarters.includes(species)) { pokerusStarters.push(species); diff --git a/src/data/trainer-names.ts b/src/data/trainer-names.ts index 26cea19070f..195e5041d28 100644 --- a/src/data/trainer-names.ts +++ b/src/data/trainer-names.ts @@ -1,12 +1,12 @@ import { TrainerType } from "#enums/trainer-type"; -import * as Utils from "../utils"; +import { toReadableString } from "#app/utils"; class TrainerNameConfig { public urls: string[]; public femaleUrls: string[] | null; constructor(type: TrainerType, ...urls: string[]) { - this.urls = urls.length ? urls : [Utils.toReadableString(TrainerType[type]).replace(/ /g, "_")]; + this.urls = urls.length ? urls : [toReadableString(TrainerType[type]).replace(/ /g, "_")]; } hasGenderVariant(...femaleUrls: string[]): TrainerNameConfig { diff --git a/src/data/trainers/trainer-config.ts b/src/data/trainers/trainer-config.ts index 5fab70971ec..0ab7119dab9 100644 --- a/src/data/trainers/trainer-config.ts +++ b/src/data/trainers/trainer-config.ts @@ -1,7 +1,7 @@ import { globalScene } from "#app/global-scene"; import { modifierTypes } from "#app/modifier/modifier-type"; import { PokemonMove } from "#app/field/pokemon"; -import * as Utils from "#app/utils"; +import { toReadableString, isNullOrUndefined, randSeedItem, randSeedInt } from "#app/utils"; import { pokemonEvolutions, pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { tmSpecies } from "#app/data/balance/tms"; @@ -139,7 +139,7 @@ export class TrainerConfig { constructor(trainerType: TrainerType, allowLegendaries?: boolean) { this.trainerType = trainerType; this.trainerAI = new TrainerAI(); - this.name = Utils.toReadableString(TrainerType[this.getDerivedType()]); + this.name = toReadableString(TrainerType[this.getDerivedType()]); this.battleBgm = "battle_trainer"; this.mixedBattleBgm = "battle_trainer"; this.victoryBgm = "victory_trainer"; @@ -482,10 +482,10 @@ export class TrainerConfig { .fill(null) .map((_, i) => i) .filter(i => shedinjaCanTera || party[i].species.speciesId !== Species.SHEDINJA); // Shedinja can only Tera on Bug specialty type (or no specialty type) - const setPartySlot = !Utils.isNullOrUndefined(slot) ? Phaser.Math.Wrap(slot, 0, party.length) : -1; // If we have a tera slot defined, wrap it to party size. + const setPartySlot = !isNullOrUndefined(slot) ? Phaser.Math.Wrap(slot, 0, party.length) : -1; // If we have a tera slot defined, wrap it to party size. for (let t = 0; t < Math.min(count(), party.length); t++) { const randomIndex = - partyMemberIndexes.indexOf(setPartySlot) > -1 ? setPartySlot : Utils.randSeedItem(partyMemberIndexes); + partyMemberIndexes.indexOf(setPartySlot) > -1 ? setPartySlot : randSeedItem(partyMemberIndexes); partyMemberIndexes.splice(partyMemberIndexes.indexOf(randomIndex), 1); if (this.hasSpecialtyType()) { party[randomIndex].teraType = this.specialtyType; @@ -555,7 +555,7 @@ export class TrainerConfig { initI18n(); } - if (!Utils.isNullOrUndefined(specialtyType)) { + if (!isNullOrUndefined(specialtyType)) { this.setSpecialtyType(specialtyType); } @@ -636,7 +636,7 @@ export class TrainerConfig { } this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); }); - if (!Utils.isNullOrUndefined(specialtyType)) { + if (!isNullOrUndefined(specialtyType)) { this.setSpeciesFilter(p => p.isOfType(specialtyType)); this.setSpecialtyType(specialtyType); } @@ -749,7 +749,7 @@ export class TrainerConfig { }); // Set species filter and specialty type if provided, otherwise filter by base total. - if (!Utils.isNullOrUndefined(specialtyType)) { + if (!isNullOrUndefined(specialtyType)) { this.setSpeciesFilter(p => p.isOfType(specialtyType) && p.baseTotal >= ELITE_FOUR_MINIMUM_BST); this.setSpecialtyType(specialtyType); } else { @@ -927,7 +927,7 @@ export class TrainerConfig { * @returns true if specialtyType is defined and not Type.UNKNOWN */ hasSpecialtyType(): boolean { - return !Utils.isNullOrUndefined(this.specialtyType) && this.specialtyType !== PokemonType.UNKNOWN; + return !isNullOrUndefined(this.specialtyType) && this.specialtyType !== PokemonType.UNKNOWN; } /** @@ -1006,7 +1006,7 @@ export function getRandomPartyMemberFunc( postProcess?: (enemyPokemon: EnemyPokemon) => void, ) { return (level: number, strength: PartyMemberStrength) => { - let species = Utils.randSeedItem(speciesPool); + let species = randSeedItem(speciesPool); if (!ignoreEvolution) { species = getPokemonSpecies(species).getTrainerSpeciesForLevel( level, @@ -3549,7 +3549,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc( 5, getRandomPartyMemberFunc([Species.URSHIFU], TrainerSlot.TRAINER, true, p => { - p.formIndex = Utils.randSeedInt(2, 2); // Random G-Max Urshifu + p.formIndex = randSeedInt(2, 2); // Random G-Max Urshifu p.generateAndPopulateMoveset(); p.generateName(); p.gender = Gender.MALE; @@ -3659,10 +3659,10 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc( 4, getRandomPartyMemberFunc([Species.OGERPON], TrainerSlot.TRAINER, true, p => { - p.formIndex = Utils.randSeedInt(4); // Random Ogerpon Tera Mask + p.formIndex = randSeedInt(4); // Random Ogerpon Tera Mask p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; - if (!p.moveset.some(move => !Utils.isNullOrUndefined(move) && move.moveId === Moves.IVY_CUDGEL)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.IVY_CUDGEL)) { // Check if Ivy Cudgel is in the moveset, if not, replace the first move with Ivy Cudgel. p.moveset[0] = new PokemonMove(Moves.IVY_CUDGEL); } @@ -4713,10 +4713,10 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc( 2, getRandomPartyMemberFunc([Species.SILVALLY], TrainerSlot.TRAINER, true, p => { - p.formIndex = Utils.randSeedInt(18); // Random Silvally Form + p.formIndex = randSeedInt(18); // Random Silvally Form p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ROGUE_BALL; - if (!p.moveset.some(move => !Utils.isNullOrUndefined(move) && move.moveId === Moves.MULTI_ATTACK)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.MULTI_ATTACK)) { // Check if Multi Attack is in the moveset, if not, replace the first move with Multi Attack. p.moveset[0] = new PokemonMove(Moves.MULTI_ATTACK); } @@ -4833,8 +4833,8 @@ export const trainerConfigs: TrainerConfigs = { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; - p.formIndex = Utils.randSeedInt(4, 1); // Shock, Burn, Chill, or Douse Drive - if (!p.moveset.some(move => !Utils.isNullOrUndefined(move) && move.moveId === Moves.TECHNO_BLAST)) { + p.formIndex = randSeedInt(4, 1); // Shock, Burn, Chill, or Douse Drive + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TECHNO_BLAST)) { // Check if Techno Blast is in the moveset, if not, replace the first move with Techno Blast. p.moveset[2] = new PokemonMove(Moves.TECHNO_BLAST); } @@ -5006,7 +5006,7 @@ export const trainerConfigs: TrainerConfigs = { 1, getRandomPartyMemberFunc([Species.ROTOM], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - p.formIndex = Utils.randSeedInt(5, 1); // Heat, Wash, Frost, Fan, or Mow + p.formIndex = randSeedInt(5, 1); // Heat, Wash, Frost, Fan, or Mow }), ) .setPartyMemberFunc( @@ -5019,7 +5019,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc( 3, getRandomPartyMemberFunc([Species.REVAVROOM], TrainerSlot.TRAINER, true, p => { - p.formIndex = Utils.randSeedInt(5, 1); // Random Starmobile form + p.formIndex = randSeedInt(5, 1); // Random Starmobile form p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ROGUE_BALL; }), diff --git a/src/data/weather.ts b/src/data/weather.ts index 34978232377..a8dd0a66492 100644 --- a/src/data/weather.ts +++ b/src/data/weather.ts @@ -5,7 +5,7 @@ import type Pokemon from "../field/pokemon"; import { PokemonType } from "#enums/pokemon-type"; import type Move from "./moves/move"; import { AttackMove } from "./moves/move"; -import * as Utils from "../utils"; +import { randSeedInt } from "#app/utils"; import { SuppressWeatherEffectAbAttr } from "./ability"; import { TerrainType, getTerrainName } from "./terrain"; import i18next from "i18next"; @@ -416,7 +416,7 @@ export function getRandomWeatherType(arena: Arena): WeatherType { totalWeight += w.weight; } - const rand = Utils.randSeedInt(totalWeight); + const rand = randSeedInt(totalWeight); let w = 0; for (const weather of weatherPool) { w += weather.weight; diff --git a/src/field/arena.ts b/src/field/arena.ts index cf48647e45e..adc3123ce81 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -1,8 +1,7 @@ import { globalScene } from "#app/global-scene"; import type { BiomeTierTrainerPools, PokemonPools } from "#app/data/balance/biomes"; import { biomePokemonPools, BiomePoolTier, biomeTrainerPools } from "#app/data/balance/biomes"; -import type { Constructor } from "#app/utils"; -import * as Utils from "#app/utils"; +import { randSeedInt, NumberHolder, isNullOrUndefined, type Constructor } from "#app/utils"; import type PokemonSpecies from "#app/data/pokemon-species"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { @@ -124,7 +123,7 @@ export class Arena { if (typeof luckValue !== "undefined") { luckModifier = luckValue * (isBossSpecies ? 0.5 : 2); } - const tierValue = Utils.randSeedInt(randVal - luckModifier); + const tierValue = randSeedInt(randVal - luckModifier); let tier = !isBossSpecies ? tierValue >= 156 ? BiomePoolTier.COMMON @@ -153,7 +152,7 @@ export class Arena { if (!tierPool.length) { ret = globalScene.randomSpecies(waveIndex, level); } else { - const entry = tierPool[Utils.randSeedInt(tierPool.length)]; + const entry = tierPool[randSeedInt(tierPool.length)]; let species: Species; if (typeof entry === "number") { species = entry as Species; @@ -164,7 +163,7 @@ export class Arena { if (level >= levelThreshold) { const speciesIds = entry[levelThreshold]; if (speciesIds.length > 1) { - species = speciesIds[Utils.randSeedInt(speciesIds.length)]; + species = speciesIds[randSeedInt(speciesIds.length)]; } else { species = speciesIds[0]; } @@ -211,7 +210,7 @@ export class Arena { !!this.trainerPool[BiomePoolTier.BOSS].length && (globalScene.gameMode.isTrainerBoss(waveIndex, this.biomeType, globalScene.offsetGym) || isBoss); console.log(isBoss, this.trainerPool); - const tierValue = Utils.randSeedInt(!isTrainerBoss ? 512 : 64); + const tierValue = randSeedInt(!isTrainerBoss ? 512 : 64); let tier = !isTrainerBoss ? tierValue >= 156 ? BiomePoolTier.COMMON @@ -235,7 +234,7 @@ export class Arena { tier--; } const tierPool = this.trainerPool[tier] || []; - return !tierPool.length ? TrainerType.BREEDER : tierPool[Utils.randSeedInt(tierPool.length)]; + return !tierPool.length ? TrainerType.BREEDER : tierPool[randSeedInt(tierPool.length)]; } getSpeciesFormIndex(species: PokemonSpecies): number { @@ -336,9 +335,9 @@ export class Arena { return false; } - const weatherDuration = new Utils.NumberHolder(0); + const weatherDuration = new NumberHolder(0); - if (!Utils.isNullOrUndefined(user)) { + if (!isNullOrUndefined(user)) { weatherDuration.value = 5; globalScene.applyModifier(FieldEffectModifier, user.isPlayer(), user, weatherDuration); } @@ -417,9 +416,9 @@ export class Arena { const oldTerrainType = this.terrain?.terrainType || TerrainType.NONE; - const terrainDuration = new Utils.NumberHolder(0); + const terrainDuration = new NumberHolder(0); - if (!Utils.isNullOrUndefined(user)) { + if (!isNullOrUndefined(user)) { terrainDuration.value = 5; globalScene.applyModifier(FieldEffectModifier, user.isPlayer(), user, terrainDuration); } @@ -1013,7 +1012,7 @@ export class ArenaBase extends Phaser.GameObjects.Container { if (!this.player) { globalScene.executeWithSeedOffset( () => { - this.propValue = propValue === undefined ? (hasProps ? Utils.randSeedInt(8) : 0) : propValue; + this.propValue = propValue === undefined ? (hasProps ? randSeedInt(8) : 0) : propValue; this.props.forEach((prop, p) => { const propKey = `${biomeKey}_b${hasProps ? `_${p + 1}` : ""}`; prop.setTexture(propKey); diff --git a/src/field/damage-number-handler.ts b/src/field/damage-number-handler.ts index 9e0010a0c10..a527b148fff 100644 --- a/src/field/damage-number-handler.ts +++ b/src/field/damage-number-handler.ts @@ -2,7 +2,7 @@ import { TextStyle, addTextObject } from "../ui/text"; import type { DamageResult } from "./pokemon"; import type Pokemon from "./pokemon"; import { HitResult } from "./pokemon"; -import * as Utils from "../utils"; +import { formatStat, fixedInt } from "#app/utils"; import type { BattlerIndex } from "../battle"; import { globalScene } from "#app/global-scene"; @@ -30,7 +30,7 @@ export default class DamageNumberHandler { const damageNumber = addTextObject( target.x, -(globalScene.game.canvas.height / 6) + target.y - target.getSprite().height / 2, - Utils.formatStat(amount, true), + formatStat(amount, true), TextStyle.SUMMARY, ); damageNumber.setName("text-damage-number"); @@ -86,14 +86,14 @@ export default class DamageNumberHandler { if (globalScene.damageNumbersMode === 1) { globalScene.tweens.add({ targets: damageNumber, - duration: Utils.fixedInt(750), + duration: fixedInt(750), alpha: 1, y: "-=32", }); globalScene.tweens.add({ delay: 375, targets: damageNumber, - duration: Utils.fixedInt(625), + duration: fixedInt(625), alpha: 0, ease: "Sine.easeIn", onComplete: () => { @@ -110,7 +110,7 @@ export default class DamageNumberHandler { targets: damageNumber, tweens: [ { - duration: Utils.fixedInt(250), + duration: fixedInt(250), alpha: 1, scaleX: 0.75 * baseScale, scaleY: 1.25 * baseScale, @@ -118,7 +118,7 @@ export default class DamageNumberHandler { ease: "Cubic.easeOut", }, { - duration: Utils.fixedInt(175), + duration: fixedInt(175), alpha: 1, scaleX: 0.875 * baseScale, scaleY: 1.125 * baseScale, @@ -126,59 +126,59 @@ export default class DamageNumberHandler { ease: "Cubic.easeIn", }, { - duration: Utils.fixedInt(100), + duration: fixedInt(100), scaleX: 1.25 * baseScale, scaleY: 0.75 * baseScale, ease: "Cubic.easeOut", }, { - duration: Utils.fixedInt(175), + duration: fixedInt(175), scaleX: 0.875 * baseScale, scaleY: 1.125 * baseScale, y: "-=8", ease: "Cubic.easeOut", }, { - duration: Utils.fixedInt(50), + duration: fixedInt(50), scaleX: 0.925 * baseScale, scaleY: 1.075 * baseScale, y: "+=8", ease: "Cubic.easeIn", }, { - duration: Utils.fixedInt(100), + duration: fixedInt(100), scaleX: 1.125 * baseScale, scaleY: 0.875 * baseScale, ease: "Cubic.easeOut", }, { - duration: Utils.fixedInt(175), + duration: fixedInt(175), scaleX: 0.925 * baseScale, scaleY: 1.075 * baseScale, y: "-=4", ease: "Cubic.easeOut", }, { - duration: Utils.fixedInt(50), + duration: fixedInt(50), scaleX: 0.975 * baseScale, scaleY: 1.025 * baseScale, y: "+=4", ease: "Cubic.easeIn", }, { - duration: Utils.fixedInt(100), + duration: fixedInt(100), scaleX: 1.075 * baseScale, scaleY: 0.925 * baseScale, ease: "Cubic.easeOut", }, { - duration: Utils.fixedInt(25), + duration: fixedInt(25), scaleX: baseScale, scaleY: baseScale, ease: "Cubic.easeOut", }, { - delay: Utils.fixedInt(500), + delay: fixedInt(500), alpha: 0, onComplete: () => { this.damageNumbers diff --git a/src/field/pokemon-sprite-sparkle-handler.ts b/src/field/pokemon-sprite-sparkle-handler.ts index 0d5dcca7989..d2f69500258 100644 --- a/src/field/pokemon-sprite-sparkle-handler.ts +++ b/src/field/pokemon-sprite-sparkle-handler.ts @@ -1,6 +1,6 @@ import { globalScene } from "#app/global-scene"; import Pokemon from "./pokemon"; -import * as Utils from "../utils"; +import { fixedInt, randInt } from "#app/utils"; export default class PokemonSpriteSparkleHandler { private sprites: Set; @@ -9,7 +9,7 @@ export default class PokemonSpriteSparkleHandler { this.sprites = new Set(); globalScene.tweens.addCounter({ - duration: Utils.fixedInt(200), + duration: fixedInt(200), from: 0, to: 1, yoyo: true, @@ -36,7 +36,7 @@ export default class PokemonSpriteSparkleHandler { const parent = (pokemon || s).parentContainer; const texture = s.texture; const [width, height] = [texture.source[0].width, texture.source[0].height]; - const [pixelX, pixelY] = [Utils.randInt(width), Utils.randInt(height)]; + const [pixelX, pixelY] = [randInt(width), randInt(height)]; const ratioX = s.width / width; const ratioY = s.height / height; const pixel = texture.manager.getPixel(pixelX, pixelY, texture.key, "__BASE"); @@ -51,7 +51,7 @@ export default class PokemonSpriteSparkleHandler { sparkle.setName("sprite-tera-sparkle"); sparkle.play("tera_sparkle"); parent.add(sparkle); - s.scene.time.delayedCall(Utils.fixedInt(Math.floor((1000 / 12) * 13)), () => sparkle.destroy()); + s.scene.time.delayedCall(fixedInt(Math.floor((1000 / 12) * 13)), () => sparkle.destroy()); } } } diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 72da3f1ed6f..8fc75ca657d 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -2,7 +2,7 @@ import Phaser from "phaser"; import type { AnySound } from "#app/battle-scene"; import type BattleScene from "#app/battle-scene"; import { globalScene } from "#app/global-scene"; -import type { Variant, VariantSet } from "#app/sprites/variant"; +import type { Variant } from "#app/sprites/variant"; import { populateVariantColors, variantColorCache } from "#app/sprites/variant"; import { variantData } from "#app/sprites/variant"; import BattleInfo, { @@ -55,9 +55,7 @@ import { getStarterValueFriendshipCap, speciesStarterCosts, } from "#app/data/balance/starters"; -import type { Constructor } from "#app/utils"; -import { isNullOrUndefined, randSeedInt, type nil } from "#app/utils"; -import * as Utils from "#app/utils"; +import { NumberHolder, randSeedInt, getIvsFromId, BooleanHolder, randSeedItem, isNullOrUndefined, getEnumValues, toDmgValue, fixedInt, rgbaToInt, rgbHexToRgba, rgbToHsv, deltaRgb, isBetween, type nil, type Constructor } from "#app/utils"; import type { TypeDamageMultiplier } from "#app/data/type"; import { getTypeDamageMultiplier, getTypeRgb } from "#app/data/type"; import { PokemonType } from "#enums/pokemon-type"; @@ -96,7 +94,6 @@ import { } from "#app/modifier/modifier"; import { PokeballType } from "#enums/pokeball"; import { Gender } from "#app/data/gender"; -import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims"; import { Status, getRandomStatus } from "#app/data/status-effect"; import type { SpeciesFormEvolution, @@ -176,10 +173,7 @@ import { MoveTypeChangeAbAttr, FullHpResistTypeAbAttr, applyCheckTrappedAbAttrs, - CheckTrappedAbAttr, - PostSetStatusAbAttr, - applyPostSetStatusAbAttrs, - InfiltratorAbAttr, + CheckTrappedAbAttr, InfiltratorAbAttr, AlliedFieldDamageReductionAbAttr, PostDamageAbAttr, applyPostDamageAbAttrs, @@ -193,7 +187,7 @@ import { PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr, applyAllyStatMultiplierAbAttrs, AllyStatMultiplierAbAttr, - MoveAbilityBypassAbAttr, + MoveAbilityBypassAbAttr } from "#app/data/ability"; import type PokemonData from "#app/system/pokemon-data"; import { BattlerIndex } from "#app/battle"; @@ -220,8 +214,7 @@ import { SpeciesFormChangeActiveTrigger, SpeciesFormChangeLapseTeraTrigger, SpeciesFormChangeMoveLearnedTrigger, - SpeciesFormChangePostMoveTrigger, - SpeciesFormChangeStatusEffectTrigger, + SpeciesFormChangePostMoveTrigger } from "#app/data/pokemon-forms"; import { TerrainType } from "#app/data/terrain"; import type { TrainerSlot } from "#enums/trainer-slot"; @@ -263,7 +256,6 @@ import { Nature } from "#enums/nature"; import { StatusEffect } from "#enums/status-effect"; import { doShinySparkleAnim } from "#app/field/anims"; import { MoveFlags } from "#enums/MoveFlags"; -import { hasExpSprite } from "#app/sprites/sprite-utils"; import { timedEventManager } from "#app/global-event-manager"; import { loadMoveAnimations } from "#app/sprites/pokemon-asset-loader"; import { ResetStatusPhase } from "#app/phases/reset-status-phase"; @@ -369,7 +361,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { throw `Cannot create a player Pokemon for species '${species.getName(formIndex)}'`; } - const hiddenAbilityChance = new Utils.NumberHolder( + const hiddenAbilityChance = new NumberHolder( BASE_HIDDEN_ABILITY_CHANCE, ); if (!this.hasTrainer()) { @@ -390,8 +382,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.abilityIndex = abilityIndex; // Use the provided ability index if it is defined } else { // If abilityIndex is not provided, determine it based on species and hidden ability - const hasHiddenAbility = !Utils.randSeedInt(hiddenAbilityChance.value); - const randAbilityIndex = Utils.randSeedInt(2); + const hasHiddenAbility = !randSeedInt(hiddenAbilityChance.value); + const randAbilityIndex = randSeedInt(2); if (species.abilityHidden && hasHiddenAbility) { // If the species has a hidden ability and the hidden ability is present this.abilityIndex = 2; @@ -467,8 +459,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.isTerastallized = dataSource.isTerastallized; this.stellarTypesBoosted = dataSource.stellarTypesBoosted ?? []; } else { - this.id = Utils.randSeedInt(4294967296); - this.ivs = ivs || Utils.getIvsFromId(this.id); + this.id = randSeedInt(4294967296); + this.ivs = ivs || getIvsFromId(this.id); if (this.gender === undefined) { this.generateGender(); @@ -511,7 +503,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.pokerus = false; if (level > 1) { - const fused = new Utils.BooleanHolder( + const fused = new BooleanHolder( globalScene.gameMode.isSplicedOnly, ); if (!fused.value && !this.isPlayer() && !this.hasTrainer()) { @@ -528,7 +520,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { (this.fusionShiny ? this.fusionVariant + 1 : 0); this.fusionLuck = this.luck; - this.teraType = Utils.randSeedItem(this.getTypes(false, false, true)); + this.teraType = randSeedItem(this.getTypes(false, false, true)); this.isTerastallized = false; this.stellarTypesBoosted = []; } @@ -636,7 +628,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @returns {boolean} `true` if pokemon is allowed in battle */ public isAllowedInChallenge(): boolean { - const challengeAllowed = new Utils.BooleanHolder(true); + const challengeAllowed = new BooleanHolder(true); applyChallenges( ChallengeType.POKEMON_IN_BATTLE, this, @@ -1315,7 +1307,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @returns the final critical-hit stage value */ getCritStage(source: Pokemon, move: Move): number { - const critStage = new Utils.NumberHolder(0); + const critStage = new NumberHolder(0); applyMoveAttrs(HighCritAttr, source, this, move, critStage); globalScene.applyModifiers( CritBoosterModifier, @@ -1370,7 +1362,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { simulated = true, ignoreHeldItems = false, ): number { - const statValue = new Utils.NumberHolder(this.getStat(stat, false)); + const statValue = new NumberHolder(this.getStat(stat, false)); if (!ignoreHeldItems) { globalScene.applyModifiers( StatBoosterModifier, @@ -1382,7 +1374,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } // The Ruin abilities here are never ignored, but they reveal themselves on summon anyway - const fieldApplied = new Utils.BooleanHolder(false); + const fieldApplied = new BooleanHolder(false); for (const pokemon of globalScene.getField(true)) { applyFieldStatMultiplierAbAttrs( FieldMultiplyStatAbAttr, @@ -1408,7 +1400,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } const ally = this.getAlly(); - if (!Utils.isNullOrUndefined(ally)) { + if (!isNullOrUndefined(ally)) { applyAllyStatMultiplierAbAttrs(AllyStatMultiplierAbAttr, ally, stat, statValue, simulated, this, move?.hasFlag(MoveFlags.IGNORE_ABILITIES) || ignoreAllyAbility); } @@ -1495,7 +1487,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const baseStats = this.calculateBaseStats(); // Using base stats, calculate and store stats one by one for (const s of PERMANENT_STATS) { - const statHolder = new Utils.NumberHolder( + const statHolder = new NumberHolder( Math.floor((2 * baseStats[s] + this.ivs[s]) * this.level * 0.01), ); if (s === Stat.HP) { @@ -1520,7 +1512,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } else { statHolder.value += 5; - const natureStatMultiplier = new Utils.NumberHolder( + const natureStatMultiplier = new NumberHolder( getNatureStatMultiplier(this.getNature(), s), ); globalScene.applyModifier( @@ -1622,9 +1614,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { generateNature(naturePool?: Nature[]): void { if (naturePool === undefined) { - naturePool = Utils.getEnumValues(Nature); + naturePool = getEnumValues(Nature); } - const nature = naturePool[Utils.randSeedInt(naturePool.length)]; + const nature = naturePool[randSeedInt(naturePool.length)]; this.setNature(nature); } @@ -1708,7 +1700,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @returns `true` if the pokemon is the species or is fused with it, `false` otherwise */ hasSpecies(species: Species, formKey?: string): boolean { - if (Utils.isNullOrUndefined(formKey)) { + if (isNullOrUndefined(formKey)) { return ( this.species.speciesId === species || this.fusionSpecies?.speciesId === species @@ -1870,7 +1862,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if ( secondType === PokemonType.UNKNOWN && - Utils.isNullOrUndefined(fusionType2) + isNullOrUndefined(fusionType2) ) { // If second pokemon was monotype and shared its primary type secondType = @@ -2240,11 +2232,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { public getWeight(): number { const autotomizedTag = this.getTag(AutotomizedTag); let weightRemoved = 0; - if (!Utils.isNullOrUndefined(autotomizedTag)) { + if (!isNullOrUndefined(autotomizedTag)) { weightRemoved = 100 * autotomizedTag!.autotomizeCount; } const minWeight = 0.1; - const weight = new Utils.NumberHolder(this.species.weight - weightRemoved); + const weight = new NumberHolder(this.species.weight - weightRemoved); // This will trigger the ability overlay so only call this function when necessary applyAbAttrs(WeightMultiplierAbAttr, this, null, false, weight); @@ -2315,7 +2307,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return false; } - const trappedByAbility = new Utils.BooleanHolder(false); + const trappedByAbility = new BooleanHolder(false); /** * Contains opposing Pokemon (Enemy/Player Pokemon) depending on perspective * Afterwards, it filters out Pokemon that have been switched out of the field so trapped abilities/moves do not trigger @@ -2354,7 +2346,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @returns The {@linkcode PokemonType} of the move after attributes are applied */ public getMoveType(move: Move, simulated = true): PokemonType { - const moveTypeHolder = new Utils.NumberHolder(move.type); + const moveTypeHolder = new NumberHolder(move.type); applyMoveAttrs(VariableMoveTypeAttr, this, null, move, moveTypeHolder); applyPreAttackAbAttrs( @@ -2385,7 +2377,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param move {@linkcode Move} The move being used by the attacking Pokémon. * @param ignoreAbility Whether to ignore abilities that might affect type effectiveness or immunity (defaults to `false`). * @param simulated Whether to apply abilities via simulated calls (defaults to `true`) - * @param cancelled {@linkcode Utils.BooleanHolder} Stores whether the move was cancelled by a non-type-based immunity. + * @param cancelled {@linkcode BooleanHolder} Stores whether the move was cancelled by a non-type-based immunity. * Currently only used by {@linkcode Pokemon.apply} to determine whether a "No effect" message should be shown. * @returns The type damage multiplier, indicating the effectiveness of the move */ @@ -2394,9 +2386,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { move: Move, ignoreAbility = false, simulated = true, - cancelled?: Utils.BooleanHolder, + cancelled?: BooleanHolder, ): TypeDamageMultiplier { - if (!Utils.isNullOrUndefined(this.turnData?.moveEffectiveness)) { + if (!isNullOrUndefined(this.turnData?.moveEffectiveness)) { return this.turnData?.moveEffectiveness; } @@ -2405,7 +2397,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } const moveType = source.getMoveType(move); - const typeMultiplier = new Utils.NumberHolder( + const typeMultiplier = new NumberHolder( move.category !== MoveCategory.STATUS || move.hasAttr(RespectAttackTypeImmunityAttr) ? this.getAttackTypeEffectiveness( @@ -2435,7 +2427,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { typeMultiplier.value *= 2; } - const cancelledHolder = cancelled ?? new Utils.BooleanHolder(false); + const cancelledHolder = cancelled ?? new BooleanHolder(false); if (!ignoreAbility) { applyPreDefendAbAttrs( TypeImmunityAbAttr, @@ -2549,7 +2541,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { let multiplier = types .map(defType => { - const multiplier = new Utils.NumberHolder( + const multiplier = new NumberHolder( getTypeDamageMultiplier(moveType, defType), ); applyChallenges( @@ -2567,7 +2559,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ); } if (source) { - const ignoreImmunity = new Utils.BooleanHolder(false); + const ignoreImmunity = new BooleanHolder(false); if ( source.isActive(true) && source.hasAbilityWithAttr(IgnoreTypeImmunityAbAttr) @@ -2600,7 +2592,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { }) .reduce((acc, cur) => acc * cur, 1) as TypeDamageMultiplier; - const typeMultiplierAgainstFlying = new Utils.NumberHolder( + const typeMultiplierAgainstFlying = new NumberHolder( getTypeDamageMultiplier(moveType, PokemonType.FLYING), ); applyChallenges( @@ -2943,7 +2935,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const E = globalScene.gameData.trainerId ^ globalScene.gameData.secretId; const F = rand1 ^ rand2; - const shinyThreshold = new Utils.NumberHolder(BASE_SHINY_CHANCE); + const shinyThreshold = new NumberHolder(BASE_SHINY_CHANCE); if (thresholdOverride === undefined) { if (timedEventManager.isEventActive()) { const tchance = timedEventManager.getClassicTrainerShinyChance(); @@ -2986,7 +2978,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { thresholdOverride?: number, applyModifiersToOverride?: boolean, ): boolean { - const shinyThreshold = new Utils.NumberHolder(BASE_SHINY_CHANCE); + const shinyThreshold = new NumberHolder(BASE_SHINY_CHANCE); if (thresholdOverride === undefined || applyModifiersToOverride) { if (thresholdOverride !== undefined && applyModifiersToOverride) { shinyThreshold.value = thresholdOverride; @@ -3041,10 +3033,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ) { return 0; } - const rand = new Utils.NumberHolder(0); + const rand = new NumberHolder(0); globalScene.executeWithSeedOffset( () => { - rand.value = Utils.randSeedInt(10); + rand.value = randSeedInt(10); }, this.id, globalScene.waveSeed, @@ -3074,7 +3066,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (!this.species.abilityHidden) { return false; } - const haThreshold = new Utils.NumberHolder(BASE_HIDDEN_ABILITY_CHANCE); + const haThreshold = new NumberHolder(BASE_HIDDEN_ABILITY_CHANCE); if (thresholdOverride === undefined || applyModifiersToOverride) { if (thresholdOverride !== undefined && applyModifiersToOverride) { haThreshold.value = thresholdOverride; @@ -3098,7 +3090,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } public generateFusionSpecies(forStarter?: boolean): void { - const hiddenAbilityChance = new Utils.NumberHolder( + const hiddenAbilityChance = new NumberHolder( BASE_HIDDEN_ABILITY_CHANCE, ); if (!this.hasTrainer()) { @@ -3109,8 +3101,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ); } - const hasHiddenAbility = !Utils.randSeedInt(hiddenAbilityChance.value); - const randAbilityIndex = Utils.randSeedInt(2); + const hasHiddenAbility = !randSeedInt(hiddenAbilityChance.value); + const randAbilityIndex = randSeedInt(2); const filter = !forStarter ? this.species.getCompatibleFusionSpeciesFilter() @@ -3427,7 +3419,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (stabMovePool.length) { const totalWeight = stabMovePool.reduce((v, m) => v + m[1], 0); - let rand = Utils.randSeedInt(totalWeight); + let rand = randSeedInt(totalWeight); let index = 0; while (rand > stabMovePool[index][1]) { rand -= stabMovePool[index++][1]; @@ -3441,7 +3433,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ); if (attackMovePool.length) { const totalWeight = attackMovePool.reduce((v, m) => v + m[1], 0); - let rand = Utils.randSeedInt(totalWeight); + let rand = randSeedInt(totalWeight); let index = 0; while (rand > attackMovePool[index][1]) { rand -= attackMovePool[index++][1]; @@ -3493,7 +3485,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { movePool = baseWeights.filter(m => !this.moveset.some(mo => m[0] === mo.moveId)); } const totalWeight = movePool.reduce((v, m) => v + m[1], 0); - let rand = Utils.randSeedInt(totalWeight); + let rand = randSeedInt(totalWeight); let index = 0; while (rand > movePool[index][1]) { rand -= movePool[index++][1]; @@ -3717,8 +3709,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { simulated = true, ignoreHeldItems = false, ): number { - const statStage = new Utils.NumberHolder(this.getStatStage(stat)); - const ignoreStatStage = new Utils.BooleanHolder(false); + const statStage = new NumberHolder(this.getStatStage(stat)); + const ignoreStatStage = new BooleanHolder(false); if (opponent) { if (isCritical) { @@ -3755,7 +3747,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } if (!ignoreStatStage.value) { - const statStageMultiplier = new Utils.NumberHolder( + const statStageMultiplier = new NumberHolder( Math.max(2, 2 + statStage.value) / Math.max(2, 2 - statStage.value), ); if (!ignoreHeldItems) { @@ -3787,13 +3779,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return 1; } - const userAccStage = new Utils.NumberHolder(this.getStatStage(Stat.ACC)); - const targetEvaStage = new Utils.NumberHolder( + const userAccStage = new NumberHolder(this.getStatStage(Stat.ACC)); + const targetEvaStage = new NumberHolder( target.getStatStage(Stat.EVA), ); - const ignoreAccStatStage = new Utils.BooleanHolder(false); - const ignoreEvaStatStage = new Utils.BooleanHolder(false); + const ignoreAccStatStage = new BooleanHolder(false); + const ignoreEvaStatStage = new BooleanHolder(false); applyAbAttrs( IgnoreOpponentStatStagesAbAttr, @@ -3835,7 +3827,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { targetEvaStage.value = Math.min(0, targetEvaStage.value); } - const accuracyMultiplier = new Utils.NumberHolder(1); + const accuracyMultiplier = new NumberHolder(1); if (userAccStage.value !== targetEvaStage.value) { accuracyMultiplier.value = userAccStage.value > targetEvaStage.value @@ -3852,7 +3844,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { sourceMove, ); - const evasionMultiplier = new Utils.NumberHolder(1); + const evasionMultiplier = new NumberHolder(1); applyStatMultiplierAbAttrs( StatMultiplierAbAttr, target, @@ -3907,7 +3899,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * The attacker's offensive stat for the given move's category. * Critical hits cause negative stat stages to be ignored. */ - const sourceAtk = new Utils.NumberHolder( + const sourceAtk = new NumberHolder( source.getEffectiveStat( isPhysical ? Stat.ATK : Stat.SPATK, this, @@ -3925,7 +3917,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * This Pokemon's defensive stat for the given move's category. * Critical hits cause positive stat stages to be ignored. */ - const targetDef = new Utils.NumberHolder( + const targetDef = new NumberHolder( this.getEffectiveStat( isPhysical ? Stat.DEF : Stat.SPDEF, source, @@ -3986,12 +3978,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { isCritical = false, simulated = true, ): DamageCalculationResult { - const damage = new Utils.NumberHolder(0); + const damage = new NumberHolder(0); const defendingSide = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; - const variableCategory = new Utils.NumberHolder(move.category); + const variableCategory = new NumberHolder(move.category); applyMoveAttrs( VariableMoveCategoryAttr, source, @@ -4005,7 +3997,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const moveType = source.getMoveType(move); /** If `value` is `true`, cancels the move and suppresses "No Effect" messages */ - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); /** * The effectiveness of the move being used. Along with type matchups, this @@ -4025,7 +4017,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const isPhysical = moveCategory === MoveCategory.PHYSICAL; /** Combined damage multiplier from field effects such as weather, terrain, etc. */ - const arenaAttackTypeMultiplier = new Utils.NumberHolder( + const arenaAttackTypeMultiplier = new NumberHolder( globalScene.arena.getAttackTypeMultiplier(moveType, source.isGrounded()), ); applyMoveAttrs( @@ -4048,10 +4040,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } // If the attack deals fixed damage, return a result with that much damage - const fixedDamage = new Utils.NumberHolder(0); + const fixedDamage = new NumberHolder(0); applyMoveAttrs(FixedDamageAttr, source, this, move, fixedDamage); if (fixedDamage.value) { - const multiLensMultiplier = new Utils.NumberHolder(1); + const multiLensMultiplier = new NumberHolder(1); globalScene.applyModifiers( PokemonMultiHitModifier, source.isPlayer(), @@ -4060,7 +4052,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { null, multiLensMultiplier, ); - fixedDamage.value = Utils.toDmgValue( + fixedDamage.value = toDmgValue( fixedDamage.value * multiLensMultiplier.value, ); @@ -4072,7 +4064,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } // If the attack is a one-hit KO move, return a result with damage equal to this Pokemon's HP - const isOneHitKo = new Utils.BooleanHolder(false); + const isOneHitKo = new BooleanHolder(false); applyMoveAttrs(OneHitKOAttr, source, this, move, isOneHitKo); if (isOneHitKo.value) { return { @@ -4104,7 +4096,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const targetMultiplier = numTargets > 1 ? 0.75 : 1; /** Multiplier for moves enhanced by Multi-Lens and/or Parental Bond */ - const multiStrikeEnhancementMultiplier = new Utils.NumberHolder(1); + const multiStrikeEnhancementMultiplier = new NumberHolder(1); globalScene.applyModifiers( PokemonMultiHitModifier, source.isPlayer(), @@ -4126,13 +4118,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } /** Doubles damage if this Pokemon's last move was Glaive Rush */ - const glaiveRushMultiplier = new Utils.NumberHolder(1); + const glaiveRushMultiplier = new NumberHolder(1); if (this.getTag(BattlerTagType.RECEIVE_DOUBLE_DAMAGE)) { glaiveRushMultiplier.value = 2; } /** The damage multiplier when the given move critically hits */ - const criticalMultiplier = new Utils.NumberHolder(isCritical ? 1.5 : 1); + const criticalMultiplier = new NumberHolder(isCritical ? 1.5 : 1); applyAbAttrs(MultCritAbAttr, source, null, simulated, criticalMultiplier); /** @@ -4147,7 +4139,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const sourceTeraType = source.getTeraType(); const matchesSourceType = sourceTypes.includes(moveType); /** A damage multiplier for when the attack is of the attacker's type and/or Tera type. */ - const stabMultiplier = new Utils.NumberHolder(1); + const stabMultiplier = new NumberHolder(1); if (matchesSourceType && moveType !== PokemonType.STELLAR) { stabMultiplier.value += 0.5; } @@ -4188,14 +4180,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { stabMultiplier.value = Math.min(stabMultiplier.value, 2.25); /** Halves damage if the attacker is using a physical attack while burned */ - const burnMultiplier = new Utils.NumberHolder(1); + const burnMultiplier = new NumberHolder(1); if ( isPhysical && source.status && source.status.effect === StatusEffect.BURN ) { if (!move.hasAttr(BypassBurnDamageReductionAttr)) { - const burnDamageReductionCancelled = new Utils.BooleanHolder(false); + const burnDamageReductionCancelled = new BooleanHolder(false); if (!ignoreSourceAbility) { applyAbAttrs( BypassBurnDamageReductionAbAttr, @@ -4211,7 +4203,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } /** Reduces damage if this Pokemon has a relevant screen (e.g. Light Screen for special attacks) */ - const screenMultiplier = new Utils.NumberHolder(1); + const screenMultiplier = new NumberHolder(1); // Critical hits should bypass screens if (!isCritical) { @@ -4231,7 +4223,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * AND * The move doubles damage when used against that tag */ - const hitsTagMultiplier = new Utils.NumberHolder(1); + const hitsTagMultiplier = new NumberHolder(1); move .getAttrs(HitsTagAttr) .filter(hta => hta.doubleDamage) @@ -4249,7 +4241,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ? 0.5 : 1; - damage.value = Utils.toDmgValue( + damage.value = toDmgValue( baseDamage * targetMultiplier * multiStrikeEnhancementMultiplier.value * @@ -4358,10 +4350,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const defendingSide = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; - const moveCategory = new Utils.NumberHolder(move.category); + const moveCategory = new NumberHolder(move.category); applyMoveAttrs(VariableMoveCategoryAttr, source, this, move, moveCategory); if (moveCategory.value === MoveCategory.STATUS) { - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); const typeMultiplier = this.getMoveEffectiveness( source, move, @@ -4381,7 +4373,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } /** Determines whether the attack critically hits */ let isCritical: boolean; - const critOnly = new Utils.BooleanHolder(false); + const critOnly = new BooleanHolder(false); const critAlways = source.getTag(BattlerTagType.ALWAYS_CRIT); applyMoveAttrs(CritOnlyAttr, source, this, move, critOnly); applyAbAttrs( @@ -4404,7 +4396,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } const noCritTag = globalScene.arena.getTagOnSide(NoCritTag, defendingSide); - const blockCrit = new Utils.BooleanHolder(false); + const blockCrit = new BooleanHolder(false); applyAbAttrs(BlockCritAbAttr, this, null, false, blockCrit); if (noCritTag || blockCrit.value || Overrides.NEVER_CRIT_OVERRIDE) { isCritical = false; @@ -4486,7 +4478,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (damage > 0) { if (source.isPlayer()) { - globalScene.validateAchvs(DamageAchv, new Utils.NumberHolder(damage)); + globalScene.validateAchvs(DamageAchv, new NumberHolder(damage)); if (damage > globalScene.gameData.gameStats.highestDamage) { globalScene.gameData.gameStats.highestDamage = damage; } @@ -4510,7 +4502,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { DamageMoneyRewardModifier, true, source, - new Utils.NumberHolder(damage), + new NumberHolder(damage), ); } } @@ -4575,7 +4567,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (this.isFainted()) { return 0; } - const surviveDamage = new Utils.BooleanHolder(false); + const surviveDamage = new BooleanHolder(false); if (!preventEndure && this.hp - damage <= 0) { if (this.hp >= 1 && this.getTag(BattlerTagType.ENDURING)) { @@ -4710,7 +4702,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const stubTag = new BattlerTag(tagType, 0, 0); - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); applyPreApplyBattlerTagAbAttrs( BattlerTagImmunityAbAttr, this, @@ -4748,7 +4740,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const newTag = getBattlerTag(tagType, turnCount, sourceMove!, sourceId!); // TODO: are the bangs correct? - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); applyPreApplyBattlerTagAbAttrs( BattlerTagImmunityAbAttr, this, @@ -5081,12 +5073,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { let fusionCry = this.getFusionSpeciesForm().cry(soundConfig, true); duration = Math.min(duration, fusionCry.totalDuration * 1000); fusionCry.destroy(); - scene.time.delayedCall(Utils.fixedInt(Math.ceil(duration * 0.4)), () => { + scene.time.delayedCall(fixedInt(Math.ceil(duration * 0.4)), () => { try { SoundFade.fadeOut( scene, cry, - Utils.fixedInt(Math.ceil(duration * 0.2)), + fixedInt(Math.ceil(duration * 0.2)), ); fusionCry = this.getFusionSpeciesForm().cry( Object.assign( @@ -5097,7 +5089,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { SoundFade.fadeIn( scene, fusionCry, - Utils.fixedInt(Math.ceil(duration * 0.2)), + fixedInt(Math.ceil(duration * 0.2)), scene.masterVolume * scene.fieldVolume, 0, ); @@ -5137,7 +5129,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { let faintCryTimer: Phaser.Time.TimerEvent | null = globalScene.time.addEvent({ - delay: Utils.fixedInt(delay), + delay: fixedInt(delay), repeat: -1, callback: () => { frameThreshold = sprite.anims.msPerFrame / rate; @@ -5163,7 +5155,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { }); // Failsafe - globalScene.time.delayedCall(Utils.fixedInt(3000), () => { + globalScene.time.delayedCall(fixedInt(3000), () => { if (!faintCryTimer || !globalScene) { return; } @@ -5222,7 +5214,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { let faintCryTimer: Phaser.Time.TimerEvent | null = globalScene.time.addEvent({ - delay: Utils.fixedInt(delay), + delay: fixedInt(delay), repeat: -1, callback: () => { ++i; @@ -5239,7 +5231,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { SoundFade.fadeOut( globalScene, cry, - Utils.fixedInt(Math.ceil((duration / rate) * 0.2)), + fixedInt(Math.ceil((duration / rate) * 0.2)), ); fusionCry = globalScene.playSound( fusionCryKey, @@ -5251,7 +5243,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { SoundFade.fadeIn( globalScene, fusionCry, - Utils.fixedInt(Math.ceil((duration / rate) * 0.2)), + fixedInt(Math.ceil((duration / rate) * 0.2)), globalScene.masterVolume * globalScene.fieldVolume, 0, ); @@ -5277,7 +5269,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { }); // Failsafe - globalScene.time.delayedCall(Utils.fixedInt(3000), () => { + globalScene.time.delayedCall(fixedInt(3000), () => { if (!faintCryTimer || !globalScene) { return; } @@ -5352,7 +5344,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } // Check if the source Pokemon has an ability that cancels the Poison/Toxic immunity - const cancelImmunity = new Utils.BooleanHolder(false); + const cancelImmunity = new BooleanHolder(false); if (sourcePokemon) { applyAbAttrs( IgnoreTypeStatusEffectImmunityAbAttr, @@ -5408,7 +5400,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { break; } - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); applyPreSetStatusAbAttrs( StatusEffectImmunityAbAttr, this, @@ -5479,10 +5471,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return true; } - let sleepTurnsRemaining: Utils.NumberHolder; + let sleepTurnsRemaining: NumberHolder; if (effect === StatusEffect.SLEEP) { - sleepTurnsRemaining = new Utils.NumberHolder(this.randSeedIntRange(2, 4)); + sleepTurnsRemaining = new NumberHolder(this.randSeedIntRange(2, 4)); this.setFrameRate(4); @@ -5533,7 +5525,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; if (globalScene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, defendingSide)) { - const bypassed = new Utils.BooleanHolder(false); + const bypassed = new BooleanHolder(false); if (attacker) { applyAbAttrs(InfiltratorAbAttr, attacker, null, false, bypassed); } @@ -5829,9 +5821,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (this.shiny && variantColors && variantColors[this.variant]) { Object.keys(variantColors[this.variant]).forEach(k => { variantColorSet.set( - Utils.rgbaToInt(Array.from(Object.values(Utils.rgbHexToRgba(k)))), + rgbaToInt(Array.from(Object.values(rgbHexToRgba(k)))), Array.from( - Object.values(Utils.rgbHexToRgba(variantColors[this.variant][k])), + Object.values(rgbHexToRgba(variantColors[this.variant][k])), ), ); }); @@ -5842,7 +5834,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const pixel = pixelData[f].slice(i, i + 4); let [r, g, b, a] = pixel; if (variantColors) { - const color = Utils.rgbaToInt([r, g, b, a]); + const color = rgbaToInt([r, g, b, a]); if (variantColorSet.has(color)) { const mappedPixel = variantColorSet.get(color); if (mappedPixel) { @@ -5891,10 +5883,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ) { for (const k of Object.keys(variantColors[this.fusionVariant])) { variantColorSet.set( - Utils.rgbaToInt(Array.from(Object.values(Utils.rgbHexToRgba(k)))), + rgbaToInt(Array.from(Object.values(rgbHexToRgba(k)))), Array.from( Object.values( - Utils.rgbHexToRgba(variantColors[this.fusionVariant][k]), + rgbHexToRgba(variantColors[this.fusionVariant][k]), ), ), ); @@ -5914,7 +5906,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { pixelData[2 + f][i + 3], ]; if (variantColors) { - const color = Utils.rgbaToInt([r, g, b, a]); + const color = rgbaToInt([r, g, b, a]); if (variantColorSet.has(color)) { const mappedPixel = variantColorSet.get(color); if (mappedPixel) { @@ -5972,7 +5964,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { hsvColors = Array.from(rgbaColors.keys()).reduce( (map: Map, k: number) => { const rgb = rgbaColors.get(k)!.slice(0, 3); - map.set(k, Utils.rgbToHsv(rgb[0], rgb[1], rgb[2])); + map.set(k, rgbToHsv(rgb[0], rgb[1], rgb[2])); return map; }, new Map(), @@ -6052,7 +6044,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { spriteColors.forEach((sc: number[], i: number) => { paletteDeltas.push([]); for (let p = 0; p < palette.length; p++) { - paletteDeltas[i].push(Utils.deltaRgb(sc, palette[p])); + paletteDeltas[i].push(deltaRgb(sc, palette[p])); } }); @@ -6097,8 +6089,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * * This calls either {@linkcode BattleScene.randBattleSeedInt}({@linkcode range}, {@linkcode min}) in `src/battle-scene.ts` * which calls {@linkcode Battle.randSeedInt}({@linkcode range}, {@linkcode min}) in `src/battle.ts` - * which calls {@linkcode Utils.randSeedInt randSeedInt}({@linkcode range}, {@linkcode min}) in `src/utils.ts`, - * or it directly calls {@linkcode Utils.randSeedInt randSeedInt}({@linkcode range}, {@linkcode min}) in `src/utils.ts` if there is no current battle + * which calls {@linkcode randSeedInt randSeedInt}({@linkcode range}, {@linkcode min}) in `src/utils.ts`, + * or it directly calls {@linkcode randSeedInt randSeedInt}({@linkcode range}, {@linkcode min}) in `src/utils.ts` if there is no current battle * * @param range How large of a range of random numbers to choose from. If {@linkcode range} <= 1, returns {@linkcode min} * @param min The minimum integer to pick, default `0` @@ -6107,7 +6099,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { randSeedInt(range: number, min = 0): number { return globalScene.currentBattle ? globalScene.randBattleSeedInt(range, min) - : Utils.randSeedInt(range, min); + : randSeedInt(range, min); } /** @@ -6403,7 +6395,7 @@ export class PlayerPokemon extends Pokemon { ? globalScene.gameData.starterData[fusionStarterSpeciesId] : null, ].filter(d => !!d); - const amount = new Utils.NumberHolder(friendship); + const amount = new NumberHolder(friendship); globalScene.applyModifier( PokemonFriendshipBoosterModifier, true, @@ -6418,7 +6410,7 @@ export class PlayerPokemon extends Pokemon { ? 1.5 // Divide candy gain for fusions by 1.5 during events : 2 // 2 for fusions outside events : 1; // 1 for non-fused mons - const starterAmount = new Utils.NumberHolder( + const starterAmount = new NumberHolder( Math.floor( (amount.value * candyFriendshipMultiplier) / fusionReduction, ), @@ -7381,7 +7373,7 @@ export class EnemyPokemon extends Pokemon { //console.log('damage', damage, 'segment', segmentsBypassed + 1, 'segment size', segmentSize, 'damage needed', Math.round(segmentSize * Math.pow(2, segmentsBypassed + 1))); } - damage = Utils.toDmgValue( + damage = toDmgValue( this.hp - hpThreshold + segmentSize * segmentsBypassed, ); clearedBossSegmentIndex = s - segmentsBypassed; @@ -7459,7 +7451,7 @@ export class EnemyPokemon extends Pokemon { } // Pick a random stat from the leftover stats to increase its stages - const randInt = Utils.randSeedInt(totalWeight); + const randInt = randSeedInt(totalWeight); for (const i in statThresholds) { if (randInt < statThresholds[i]) { boostedStat = leftoverStats[i]; @@ -7530,7 +7522,7 @@ export class EnemyPokemon extends Pokemon { this, ); - if (Utils.isBetween(slotIndex, 0, PLAYER_PARTY_MAX_SIZE - 1)) { + if (isBetween(slotIndex, 0, PLAYER_PARTY_MAX_SIZE - 1)) { party.splice(slotIndex, 0, newPokemon); } else { party.push(newPokemon); @@ -7772,7 +7764,7 @@ export class PokemonMove { getMovePp(): number { return ( this.maxPpOverride || - this.getMove().pp + this.ppUp * Utils.toDmgValue(this.getMove().pp / 5) + this.getMove().pp + this.ppUp * toDmgValue(this.getMove().pp / 5) ); } diff --git a/src/field/trainer.ts b/src/field/trainer.ts index ccd8c83e684..30cf43b54a1 100644 --- a/src/field/trainer.ts +++ b/src/field/trainer.ts @@ -11,7 +11,7 @@ import { TrainerSlot } from "#enums/trainer-slot"; import { TrainerPoolTier } from "#enums/trainer-pool-tier"; import { TeraAIMode } from "#enums/tera-ai-mode"; import type { EnemyPokemon } from "#app/field/pokemon"; -import * as Utils from "#app/utils"; +import { randSeedWeightedItem, randSeedItem, randSeedInt } from "#app/utils"; import type { PersistentModifier } from "#app/modifier/modifier"; import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; import { getIsInitialized, initI18n } from "#app/plugins/i18n"; @@ -58,7 +58,7 @@ export default class Trainer extends Phaser.GameObjects.Container { this.partyTemplateIndex = Math.min( partyTemplateIndex !== undefined ? partyTemplateIndex - : Utils.randSeedWeightedItem(this.config.partyTemplates.map((_, i) => i)), + : randSeedWeightedItem(this.config.partyTemplates.map((_, i) => i)), this.config.partyTemplates.length - 1, ); const classKey = `trainersCommon:${TrainerType[trainerType]}`; @@ -71,9 +71,7 @@ export default class Trainer extends Phaser.GameObjects.Container { ? ".FEMALE" : ".MALE" : ""; - const trainerKey = Utils.randSeedItem( - Object.keys(i18next.t(`${classKey}${genderKey}`, { returnObjects: true })), - ); + const trainerKey = randSeedItem(Object.keys(i18next.t(`${classKey}${genderKey}`, { returnObjects: true }))); this.nameKey = `${classKey}${genderKey}.${trainerKey}`; } this.name = i18next.t(this.nameKey); @@ -87,7 +85,7 @@ export default class Trainer extends Phaser.GameObjects.Container { } } else { const partnerGenderKey = i18next.exists(`${classKey}.FEMALE`) ? ".FEMALE" : ""; - const partnerTrainerKey = Utils.randSeedItem( + const partnerTrainerKey = randSeedItem( Object.keys( i18next.t(`${classKey}${partnerGenderKey}`, { returnObjects: true, @@ -420,7 +418,7 @@ export default class Trainer extends Phaser.GameObjects.Container { // If useNewSpeciesPool is true, we need to generate a new species from the new species pool, otherwise we generate a random species let species = useNewSpeciesPool - ? getPokemonSpecies(newSpeciesPool[Math.floor(Utils.randSeedInt(newSpeciesPool.length))]) + ? getPokemonSpecies(newSpeciesPool[Math.floor(randSeedInt(newSpeciesPool.length))]) : template.isSameSpecies(index) && index > offset ? getPokemonSpecies( battle.enemyParty[offset].species.getTrainerSpeciesForLevel( @@ -461,7 +459,7 @@ export default class Trainer extends Phaser.GameObjects.Container { let baseSpecies: PokemonSpecies; if (this.config.speciesPools) { - const tierValue = Utils.randSeedInt(512); + const tierValue = randSeedInt(512); let tier = tierValue >= 156 ? TrainerPoolTier.COMMON @@ -480,7 +478,7 @@ export default class Trainer extends Phaser.GameObjects.Container { tier--; } const tierPool = this.config.speciesPools[tier]; - baseSpecies = getPokemonSpecies(Utils.randSeedItem(tierPool)); + baseSpecies = getPokemonSpecies(randSeedItem(tierPool)); } else { baseSpecies = globalScene.randomSpecies(battle.waveIndex, level, false, this.config.speciesFilter); } @@ -619,7 +617,7 @@ export default class Trainer extends Phaser.GameObjects.Container { if (maxScorePartyMemberIndexes.length > 1) { let rand: number; globalScene.executeWithSeedOffset( - () => (rand = Utils.randSeedInt(maxScorePartyMemberIndexes.length)), + () => (rand = randSeedInt(maxScorePartyMemberIndexes.length)), globalScene.currentBattle.turn << 2, ); return maxScorePartyMemberIndexes[rand!]; diff --git a/src/game-mode.ts b/src/game-mode.ts index c340768ef77..4779fda50e8 100644 --- a/src/game-mode.ts +++ b/src/game-mode.ts @@ -7,7 +7,7 @@ import type PokemonSpecies from "./data/pokemon-species"; import { allSpecies } from "./data/pokemon-species"; import type { Arena } from "./field/arena"; import Overrides from "#app/overrides"; -import * as Utils from "./utils"; +import { randSeedInt, randSeedItem } from "#app/utils"; import { Biome } from "#enums/biome"; import { Species } from "#enums/species"; import { Challenges } from "./enums/challenges"; @@ -186,7 +186,7 @@ export class GameMode implements GameModeConfig { if (w < waveIndex) { globalScene.executeWithSeedOffset(() => { const waveTrainerChance = arena.getTrainerChance(); - if (!Utils.randSeedInt(waveTrainerChance)) { + if (!randSeedInt(waveTrainerChance)) { allowTrainerBattle = false; } }, w); @@ -196,7 +196,7 @@ export class GameMode implements GameModeConfig { } } } - return Boolean(allowTrainerBattle && trainerChance && !Utils.randSeedInt(trainerChance)); + return Boolean(allowTrainerBattle && trainerChance && !randSeedInt(trainerChance)); } return false; } @@ -222,7 +222,7 @@ export class GameMode implements GameModeConfig { s.speciesId !== Species.ETERNATUS && s.speciesId !== Species.ARCEUS, ); - return Utils.randSeedItem(allFinalBossSpecies); + return randSeedItem(allFinalBossSpecies); } return null; diff --git a/src/inputs-controller.ts b/src/inputs-controller.ts index fb4555084ee..f92ce3957ab 100644 --- a/src/inputs-controller.ts +++ b/src/inputs-controller.ts @@ -1,6 +1,5 @@ import Phaser from "phaser"; -import * as Utils from "./utils"; -import { deepCopy } from "./utils"; +import { deepCopy, getEnumValues } from "#app/utils"; import pad_generic from "./configs/inputs/pad_generic"; import pad_unlicensedSNES from "./configs/inputs/pad_unlicensedSNES"; import pad_xbox360 from "./configs/inputs/pad_xbox360"; @@ -102,7 +101,7 @@ export class InputsController { [Device.KEYBOARD]: "default", }; - for (const b of Utils.getEnumValues(Button)) { + for (const b of getEnumValues(Button)) { this.interactions[b] = { pressTime: false, isPressed: false, diff --git a/src/loading-scene.ts b/src/loading-scene.ts index f99831c53bc..b45cf64ff56 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -4,7 +4,7 @@ import CacheBustedLoaderPlugin from "#app/plugins/cache-busted-loader-plugin"; import { SceneBase } from "#app/scene-base"; import { WindowVariant, getWindowVariantSuffix } from "#app/ui/ui-theme"; import { isMobile } from "#app/touch-controls"; -import * as Utils from "#app/utils"; +import { localPing, getEnumValues, hasAllLocalizedSprites, getEnumKeys } from "#app/utils"; import { initPokemonPrevolutions, initPokemonStarters } from "#app/data/balance/pokemon-evolutions"; import { initBiomes } from "#app/data/balance/biomes"; import { initEggMoves } from "#app/data/balance/egg-moves"; @@ -34,7 +34,7 @@ export class LoadingScene extends SceneBase { } preload() { - Utils.localPing(); + localPing(); this.load["manifest"] = this.game["manifest"]; this.loadImage("loading_bg", "arenas"); @@ -49,7 +49,7 @@ export class LoadingScene extends SceneBase { this.loadImage("friendship_overlay", "ui"); this.loadImage("cursor", "ui"); this.loadImage("cursor_reverse", "ui"); - for (const wv of Utils.getEnumValues(WindowVariant)) { + for (const wv of getEnumValues(WindowVariant)) { for (let w = 1; w <= 5; w++) { this.loadImage(`window_${w}${getWindowVariantSuffix(wv)}`, "ui/windows"); } @@ -177,7 +177,7 @@ export class LoadingScene extends SceneBase { this.loadImage("default_bg", "arenas"); // Load arena images - Utils.getEnumValues(Biome).map(bt => { + getEnumValues(Biome).map(bt => { const btKey = Biome[bt].toLowerCase(); const isBaseAnimated = btKey === "end"; const baseAKey = `${btKey}_a`; @@ -239,7 +239,7 @@ export class LoadingScene extends SceneBase { // Get current lang and load the types atlas for it. English will only load types while all other languages will load types and types_ const lang = i18next.resolvedLanguage; if (lang !== "en") { - if (Utils.hasAllLocalizedSprites(lang)) { + if (hasAllLocalizedSprites(lang)) { this.loadAtlas(`statuses_${lang}`, ""); this.loadAtlas(`types_${lang}`, ""); } else { @@ -268,7 +268,7 @@ export class LoadingScene extends SceneBase { this.loadAtlas("egg_icons", "egg"); this.loadAtlas("egg_shard", "egg"); this.loadAtlas("egg_lightrays", "egg"); - for (const gt of Utils.getEnumKeys(GachaType)) { + for (const gt of getEnumKeys(GachaType)) { const key = gt.toLowerCase(); this.loadImage(`gacha_${key}`, "egg"); this.loadAtlas(`gacha_underlay_${key}`, "egg"); diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index 6c46f7ff8c0..acc7ac0f63a 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -297,16 +297,16 @@ export class MoveEffectPhase extends PokemonPhase { ); } - /** Is the target protected by Protect, etc. or a relevant conditional protection effect? */ - const isProtected = - ![MoveTarget.ENEMY_SIDE, MoveTarget.BOTH_SIDES].includes(this.move.getMove().moveTarget) && - (bypassIgnoreProtect.value || - !this.move.getMove().doesFlagEffectApply({ flag: MoveFlags.IGNORE_PROTECT, user, target })) && - (hasConditionalProtectApplied.value || - (!target.findTags(t => t instanceof DamageProtectedTag).length && - target.findTags(t => t instanceof ProtectedTag).find(t => target.lapseTag(t.tagType))) || - (this.move.getMove().category !== MoveCategory.STATUS && - target.findTags(t => t instanceof DamageProtectedTag).find(t => target.lapseTag(t.tagType)))); + /** Is the target protected by Protect, etc. or a relevant conditional protection effect? */ + const isProtected = + ![MoveTarget.ENEMY_SIDE, MoveTarget.BOTH_SIDES].includes(this.move.getMove().moveTarget) && + (bypassIgnoreProtect.value || + !this.move.getMove().doesFlagEffectApply({ flag: MoveFlags.IGNORE_PROTECT, user, target })) && + (hasConditionalProtectApplied.value || + (!target.findTags(t => t instanceof DamageProtectedTag).length && + target.findTags(t => t instanceof ProtectedTag).find(t => target.lapseTag(t.tagType))) || + (this.move.getMove().category !== MoveCategory.STATUS && + target.findTags(t => t instanceof DamageProtectedTag).find(t => target.lapseTag(t.tagType)))); /** Is the target hidden by the effects of its Commander ability? */ const isCommanding = @@ -316,11 +316,11 @@ export class MoveEffectPhase extends PokemonPhase { /** Is the target reflecting status moves from the magic coat move? */ const isReflecting = !!target.getTag(BattlerTagType.MAGIC_COAT); - /** Is the target's magic bounce ability not ignored and able to reflect this move? */ - const canMagicBounce = - !isReflecting && - !move.doesFlagEffectApply({ flag: MoveFlags.IGNORE_ABILITIES, user, target }) && - target.hasAbilityWithAttr(ReflectStatusMoveAbAttr); + /** Is the target's magic bounce ability not ignored and able to reflect this move? */ + const canMagicBounce = + !isReflecting && + !move.doesFlagEffectApply({ flag: MoveFlags.IGNORE_ABILITIES, user, target }) && + target.hasAbilityWithAttr(ReflectStatusMoveAbAttr); const semiInvulnerableTag = target.getTag(SemiInvulnerableTag); @@ -333,21 +333,19 @@ export class MoveEffectPhase extends PokemonPhase { (isReflecting || canMagicBounce) && !semiInvulnerableTag; - // If the move will bounce, then queue the bounce and move on to the next target - if (!target.switchOutStatus && willBounce) { - const newTargets = move.isMultiTarget() - ? getMoveTargets(target, move.id).targets - : [user.getBattlerIndex()]; - if (!isReflecting) { - // TODO: Ability displays should be handled by the ability - queuedPhases.push( - new ShowAbilityPhase( - target.getBattlerIndex(), - target.getPassiveAbility().hasAttr(ReflectStatusMoveAbAttr), - ), - ); - queuedPhases.push(new HideAbilityPhase()); - } + // If the move will bounce, then queue the bounce and move on to the next target + if (!target.switchOutStatus && willBounce) { + const newTargets = move.isMultiTarget() ? getMoveTargets(target, move.id).targets : [user.getBattlerIndex()]; + if (!isReflecting) { + // TODO: Ability displays should be handled by the ability + queuedPhases.push( + new ShowAbilityPhase( + target.getBattlerIndex(), + target.getPassiveAbility().hasAttr(ReflectStatusMoveAbAttr), + ), + ); + queuedPhases.push(new HideAbilityPhase()); + } queuedPhases.push(new MovePhase(target, newTargets, new PokemonMove(move.id, 0, 0, true), true, true, true)); continue; diff --git a/src/phases/revival-blessing-phase.ts b/src/phases/revival-blessing-phase.ts index e650d714abc..f6fe4d9a3ee 100644 --- a/src/phases/revival-blessing-phase.ts +++ b/src/phases/revival-blessing-phase.ts @@ -4,7 +4,7 @@ import type { PartyOption } from "#app/ui/party-ui-handler"; import PartyUiHandler, { PartyUiMode } from "#app/ui/party-ui-handler"; import { Mode } from "#app/ui/ui"; import i18next from "i18next"; -import * as Utils from "#app/utils"; +import { toDmgValue, isNullOrUndefined } from "#app/utils"; import { BattlePhase } from "#app/phases/battle-phase"; import { SwitchSummonPhase } from "#app/phases/switch-summon-phase"; import { ToggleDoublePositionPhase } from "#app/phases/toggle-double-position-phase"; @@ -33,7 +33,7 @@ export class RevivalBlessingPhase extends BattlePhase { pokemon.resetTurnData(); pokemon.resetStatus(); - pokemon.heal(Math.min(Utils.toDmgValue(0.5 * pokemon.getMaxHp()), pokemon.getMaxHp())); + pokemon.heal(Math.min(toDmgValue(0.5 * pokemon.getMaxHp()), pokemon.getMaxHp())); globalScene.queueMessage( i18next.t("moveTriggers:revivalBlessing", { pokemonName: pokemon.name, @@ -46,7 +46,7 @@ export class RevivalBlessingPhase extends BattlePhase { if ( globalScene.currentBattle.double && globalScene.getPlayerParty().length > 1 && - !Utils.isNullOrUndefined(allyPokemon) + !isNullOrUndefined(allyPokemon) ) { if (slotIndex <= 1) { // Revived ally pokemon diff --git a/src/phases/select-starter-phase.ts b/src/phases/select-starter-phase.ts index c6ded6be7af..35511531609 100644 --- a/src/phases/select-starter-phase.ts +++ b/src/phases/select-starter-phase.ts @@ -12,7 +12,7 @@ import type { Starter } from "#app/ui/starter-select-ui-handler"; import { Mode } from "#app/ui/ui"; import type { Species } from "#enums/species"; import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; -import * as Utils from "../utils"; +import { isNullOrUndefined } from "#app/utils"; export class SelectStarterPhase extends Phase { start() { @@ -49,7 +49,7 @@ export class SelectStarterPhase extends Phase { let starterFormIndex = Math.min(starterProps.formIndex, Math.max(starter.species.forms.length - 1, 0)); if ( starter.species.speciesId in Overrides.STARTER_FORM_OVERRIDES && - !Utils.isNullOrUndefined(Overrides.STARTER_FORM_OVERRIDES[starter.species.speciesId]) && + !isNullOrUndefined(Overrides.STARTER_FORM_OVERRIDES[starter.species.speciesId]) && starter.species.forms[Overrides.STARTER_FORM_OVERRIDES[starter.species.speciesId]!] ) { starterFormIndex = Overrides.STARTER_FORM_OVERRIDES[starter.species.speciesId]!; @@ -87,7 +87,7 @@ export class SelectStarterPhase extends Phase { starterPokemon.nickname = starter.nickname; } - if (!Utils.isNullOrUndefined(starter.teraType)) { + if (!isNullOrUndefined(starter.teraType)) { starterPokemon.teraType = starter.teraType; } else { starterPokemon.teraType = starterPokemon.species.type1; diff --git a/src/pipelines/field-sprite.ts b/src/pipelines/field-sprite.ts index 612c9fae052..a55b6a9adb6 100644 --- a/src/pipelines/field-sprite.ts +++ b/src/pipelines/field-sprite.ts @@ -1,6 +1,6 @@ import { globalScene } from "#app/global-scene"; import { TerrainType, getTerrainColor } from "../data/terrain"; -import * as Utils from "../utils"; +import { getCurrentTime } from "#app/utils"; import fieldSpriteFragShader from "./glsl/fieldSpriteFragShader.frag?raw"; import spriteVertShader from "./glsl/spriteShader.vert?raw"; @@ -34,7 +34,7 @@ export default class FieldSpritePipeline extends Phaser.Renderer.WebGL.Pipelines const time = globalScene.currentBattle?.waveIndex ? ((globalScene.currentBattle.waveIndex + globalScene.waveCycleOffset) % 40) / 40 // ((new Date().getSeconds() * 1000 + new Date().getMilliseconds()) % 10000) / 10000 - : Utils.getCurrentTime(); + : getCurrentTime(); this.set1f("time", time); this.set1i("ignoreTimeTint", ignoreTimeTint ? 1 : 0); this.set1i("isOutside", globalScene.arena.isOutside() ? 1 : 0); diff --git a/src/pipelines/sprite.ts b/src/pipelines/sprite.ts index acbaac50476..d97cae1662b 100644 --- a/src/pipelines/sprite.ts +++ b/src/pipelines/sprite.ts @@ -3,7 +3,7 @@ import MysteryEncounterIntroVisuals from "#app/field/mystery-encounter-intro"; import Pokemon from "#app/field/pokemon"; import Trainer from "#app/field/trainer"; import { globalScene } from "#app/global-scene"; -import * as Utils from "#app/utils"; +import { rgbHexToRgba } from "#app/utils"; import FieldSpritePipeline from "./field-sprite"; import spriteFragShader from "./glsl/spriteFragShader.frag?raw"; import spriteVertShader from "./glsl/spriteShader.vert?raw"; @@ -144,8 +144,8 @@ export default class SpritePipeline extends FieldSpritePipeline { const baseColors = Object.keys(variantColors[variant]); for (let c = 0; c < 32; c++) { if (c < baseColors.length) { - const baseColor = Array.from(Object.values(Utils.rgbHexToRgba(baseColors[c]))); - const variantColor = Array.from(Object.values(Utils.rgbHexToRgba(variantColors[variant][baseColors[c]]))); + const baseColor = Array.from(Object.values(rgbHexToRgba(baseColors[c]))); + const variantColor = Array.from(Object.values(rgbHexToRgba(variantColors[variant][baseColors[c]]))); flatBaseColors.splice(flatBaseColors.length, 0, ...baseColor); flatVariantColors.splice(flatVariantColors.length, 0, ...variantColor.map(c => c / 255.0)); } else { diff --git a/src/system/achv.ts b/src/system/achv.ts index bd8595b2f94..62e69e6fbfe 100644 --- a/src/system/achv.ts +++ b/src/system/achv.ts @@ -2,7 +2,7 @@ import type { Modifier } from "typescript"; import { TurnHeldItemTransferModifier } from "../modifier/modifier"; import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import i18next from "i18next"; -import * as Utils from "../utils"; +import { NumberHolder } from "#app/utils"; import { PlayerGender } from "#enums/player-gender"; import type { Challenge } from "#app/data/challenge"; import { @@ -138,7 +138,7 @@ export class DamageAchv extends Achv { "", iconImage, score, - (args: any[]) => (args[0] instanceof Utils.NumberHolder ? args[0].value : args[0]) >= this.damageAmount, + (args: any[]) => (args[0] instanceof NumberHolder ? args[0].value : args[0]) >= this.damageAmount, ); this.damageAmount = damageAmount; } @@ -154,7 +154,7 @@ export class HealAchv extends Achv { "", iconImage, score, - (args: any[]) => (args[0] instanceof Utils.NumberHolder ? args[0].value : args[0]) >= this.healAmount, + (args: any[]) => (args[0] instanceof NumberHolder ? args[0].value : args[0]) >= this.healAmount, ); this.healAmount = healAmount; } @@ -170,7 +170,7 @@ export class LevelAchv extends Achv { "", iconImage, score, - (args: any[]) => (args[0] instanceof Utils.NumberHolder ? args[0].value : args[0]) >= this.level, + (args: any[]) => (args[0] instanceof NumberHolder ? args[0].value : args[0]) >= this.level, ); this.level = level; } diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 061a6d3a194..63955b02de8 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -8,7 +8,7 @@ import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; import type PokemonSpecies from "#app/data/pokemon-species"; import { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species"; import { speciesStarterCosts } from "#app/data/balance/starters"; -import * as Utils from "#app/utils"; +import { randInt, getEnumKeys, isLocal, executeIf, fixedInt, randSeedItem, NumberHolder } from "#app/utils"; import Overrides from "#app/overrides"; import PokemonData from "#app/system/pokemon-data"; import PersistentModifierData from "#app/system/modifier-data"; @@ -37,6 +37,7 @@ import { setSettingGamepad, SettingGamepad, settingGamepadDefaults } from "#app/ import type { SettingKeyboard } from "#app/system/settings/settings-keyboard"; import { setSettingKeyboard } from "#app/system/settings/settings-keyboard"; import { TagAddedEvent, TerrainChangedEvent, WeatherChangedEvent } from "#app/events/arena"; +// biome-ignore lint/style/noNamespaceImport: Something weird is going on here and I don't want to touch it import * as Modifier from "#app/modifier/modifier"; import { StatusEffect } from "#enums/status-effect"; import ChallengeData from "#app/system/challenge-data"; @@ -360,8 +361,8 @@ export class GameData { this.loadSettings(); this.loadGamepadSettings(); this.loadMappingConfigs(); - this.trainerId = Utils.randInt(65536); - this.secretId = Utils.randInt(65536); + this.trainerId = randInt(65536); + this.secretId = randInt(65536); this.starterData = {}; this.gameStats = new GameStats(); this.runHistory = {}; @@ -589,7 +590,7 @@ export class GameData { } if (systemData.voucherCounts) { - Utils.getEnumKeys(VoucherType).forEach(key => { + getEnumKeys(VoucherType).forEach(key => { const index = VoucherType[key]; this.voucherCounts[index] = systemData.voucherCounts[index] || 0; }); @@ -617,7 +618,7 @@ export class GameData { * At the moment, only retrievable from locale cache */ async getRunHistoryData(): Promise { - if (!Utils.isLocal) { + if (!isLocal) { /** * Networking Code DO NOT DELETE! * Note: Might have to be migrated to `pokerogue-api.ts` @@ -1035,6 +1036,7 @@ export class GameData { } getSession(slotId: number): Promise { + // biome-ignore lint/suspicious/noAsyncPromiseExecutor: return new Promise(async (resolve, reject) => { if (slotId < 0) { return resolve(null); @@ -1075,6 +1077,7 @@ export class GameData { } loadSession(slotId: number, sessionData?: SessionSaveData): Promise { + // biome-ignore lint/suspicious/noAsyncPromiseExecutor: return new Promise(async (resolve, reject) => { try { const initSessionFromData = async (sessionData: SessionSaveData) => { @@ -1406,7 +1409,7 @@ export class GameData { saveAll(skipVerification = false, sync = false, useCachedSession = false, useCachedSystem = false): Promise { return new Promise(resolve => { - Utils.executeIf(!skipVerification, updateUserInfo).then(success => { + executeIf(!skipVerification, updateUserInfo).then(success => { if (success !== null && !success) { return resolve(false); } @@ -1586,7 +1589,7 @@ export class GameData { } const displayError = (error: string) => - globalScene.ui.showText(error, null, () => globalScene.ui.showText("", 0), Utils.fixedInt(1500)); + globalScene.ui.showText(error, null, () => globalScene.ui.showText("", 0), fixedInt(1500)); dataName = dataName!; // tell TS compiler that dataName is defined! if (!valid) { @@ -1594,7 +1597,7 @@ export class GameData { `Your ${dataName} data could not be loaded. It may be corrupted.`, null, () => globalScene.ui.showText("", 0), - Utils.fixedInt(1500), + fixedInt(1500), ); } @@ -1687,7 +1690,7 @@ export class GameData { () => { const neutralNatures = [Nature.HARDY, Nature.DOCILE, Nature.SERIOUS, Nature.BASHFUL, Nature.QUIRKY]; for (let s = 0; s < defaultStarterSpecies.length; s++) { - defaultStarterNatures.push(Utils.randSeedItem(neutralNatures)); + defaultStarterNatures.push(randSeedItem(neutralNatures)); } }, 0, @@ -2188,7 +2191,7 @@ export class GameData { value = decrementValue(value); } - const cost = new Utils.NumberHolder(value); + const cost = new NumberHolder(value); applyChallenges(ChallengeType.STARTER_COST, speciesId, cost); return cost.value; @@ -2216,7 +2219,7 @@ export class GameData { entry.hatchedCount = 0; } if (!entry.hasOwnProperty("natureAttr") || (entry.caughtAttr && !entry.natureAttr)) { - entry.natureAttr = this.defaultDexData?.[k].natureAttr || 1 << Utils.randInt(25, 1); + entry.natureAttr = this.defaultDexData?.[k].natureAttr || 1 << randInt(25, 1); } } } diff --git a/src/system/game-speed.ts b/src/system/game-speed.ts index d9c48664f80..3df47fafc6c 100644 --- a/src/system/game-speed.ts +++ b/src/system/game-speed.ts @@ -3,7 +3,7 @@ import type FadeIn from "phaser3-rex-plugins/plugins/audio/fade/FadeIn"; import type FadeOut from "phaser3-rex-plugins/plugins/audio/fade/FadeOut"; import type BattleScene from "#app/battle-scene"; import { globalScene } from "#app/global-scene"; -import * as Utils from "../utils"; +import { FixedInt } from "#app/utils"; type FadeInType = typeof FadeIn; type FadeOutType = typeof FadeOut; @@ -11,9 +11,9 @@ type FadeOutType = typeof FadeOut; export function initGameSpeed() { const thisArg = this as BattleScene; - const transformValue = (value: number | Utils.FixedInt): number => { - if (value instanceof Utils.FixedInt) { - return (value as Utils.FixedInt).value; + const transformValue = (value: number | FixedInt): number => { + if (value instanceof FixedInt) { + return (value as FixedInt).value; } return thisArg.gameSpeed === 1 ? value : Math.ceil((value /= thisArg.gameSpeed)); }; diff --git a/src/system/version_migration/version_converter.ts b/src/system/version_migration/version_converter.ts index 4b712609819..1fdb9e93f88 100644 --- a/src/system/version_migration/version_converter.ts +++ b/src/system/version_migration/version_converter.ts @@ -48,12 +48,15 @@ export const settingsMigrators: Readonly = [settingsMigr // import * as vA_B_C from "./versions/vA_B_C"; // --- v1.0.4 (and below) PATCHES --- // +// biome-ignore lint/style/noNamespaceImport: Convenience (TODO: make this a file-wide ignore when Biome supports those) import * as v1_0_4 from "./versions/v1_0_4"; // --- v1.7.0 PATCHES --- // +// biome-ignore lint/style/noNamespaceImport: Convenience import * as v1_7_0 from "./versions/v1_7_0"; // --- v1.8.3 PATCHES --- // +// biome-ignore lint/style/noNamespaceImport: Convenience import * as v1_8_3 from "./versions/v1_8_3"; /** Current game version */ diff --git a/src/ui/abstact-option-select-ui-handler.ts b/src/ui/abstact-option-select-ui-handler.ts index f605f73e171..b360065f61d 100644 --- a/src/ui/abstact-option-select-ui-handler.ts +++ b/src/ui/abstact-option-select-ui-handler.ts @@ -3,7 +3,7 @@ import { TextStyle, addBBCodeTextObject, getTextColor, getTextStyleOptions } fro import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import { addWindow } from "./ui-theme"; -import * as Utils from "../utils"; +import { rgbHexToRgba, fixedInt } from "#app/utils"; import { argbFromRgba } from "@material/material-color-utilities"; import { Button } from "#enums/buttons"; import BBCodeText from "phaser3-rex-plugins/plugins/gameobjects/tagtext/bbcodetext/BBCodeText"; @@ -178,8 +178,8 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { itemOverlayIcon.setPositionRelative(this.optionSelectText, 36 * this.scale, 7 + i * (114 * this.scale - 3)); if (option.itemArgs) { - itemIcon.setTint(argbFromRgba(Utils.rgbHexToRgba(option.itemArgs[0]))); - itemOverlayIcon.setTint(argbFromRgba(Utils.rgbHexToRgba(option.itemArgs[1]))); + itemIcon.setTint(argbFromRgba(rgbHexToRgba(option.itemArgs[0]))); + itemOverlayIcon.setTint(argbFromRgba(rgbHexToRgba(option.itemArgs[1]))); } } } @@ -207,7 +207,7 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { this.blockInput = true; this.optionSelectTextContainer.setAlpha(0.5); this.cursorObj?.setAlpha(0.8); - globalScene.time.delayedCall(Utils.fixedInt(this.config.delay), () => this.unblockInput()); + globalScene.time.delayedCall(fixedInt(this.config.delay), () => this.unblockInput()); } if (this.config?.supportHover) { diff --git a/src/ui/arena-flyout.ts b/src/ui/arena-flyout.ts index 36a44eb5aa0..1eb18a32f98 100644 --- a/src/ui/arena-flyout.ts +++ b/src/ui/arena-flyout.ts @@ -16,7 +16,7 @@ import type { TurnEndEvent } from "../events/battle-scene"; import { BattleSceneEventType } from "../events/battle-scene"; import { ArenaTagType } from "#enums/arena-tag-type"; import TimeOfDayWidget from "./time-of-day-widget"; -import * as Utils from "../utils"; +import { toCamelCaseString, formatText, fixedInt } from "#app/utils"; import type { ParseKeys } from "i18next"; import i18next from "i18next"; @@ -47,10 +47,10 @@ export function getFieldEffectText(arenaTagType: string): string { if (!arenaTagType || arenaTagType === ArenaTagType.NONE) { return arenaTagType; } - const effectName = Utils.toCamelCaseString(arenaTagType); + const effectName = toCamelCaseString(arenaTagType); const i18nKey = `arenaFlyout:${effectName}` as ParseKeys; const resultName = i18next.t(i18nKey); - return !resultName || resultName === i18nKey ? Utils.formatText(arenaTagType) : resultName; + return !resultName || resultName === i18nKey ? formatText(arenaTagType) : resultName; } export class ArenaFlyout extends Phaser.GameObjects.Container { @@ -411,7 +411,7 @@ export class ArenaFlyout extends Phaser.GameObjects.Container { globalScene.tweens.add({ targets: this.flyoutParent, x: visible ? this.anchorX : this.anchorX - this.translationX, - duration: Utils.fixedInt(125), + duration: fixedInt(125), ease: "Sine.easeInOut", alpha: visible ? 1 : 0, onComplete: () => (this.timeOfDayWidget.parentVisible = visible), diff --git a/src/ui/base-stats-overlay.ts b/src/ui/base-stats-overlay.ts index 5a6c67cae7b..d0b0aff3a9d 100644 --- a/src/ui/base-stats-overlay.ts +++ b/src/ui/base-stats-overlay.ts @@ -1,7 +1,7 @@ import type { InfoToggle } from "../battle-scene"; import { TextStyle, addTextObject } from "./text"; import { addWindow } from "./ui-theme"; -import * as Utils from "../utils"; +import { fixedInt } from "#app/utils"; import i18next from "i18next"; import { globalScene } from "#app/global-scene"; @@ -93,7 +93,7 @@ export class BaseStatsOverlay extends Phaser.GameObjects.Container implements In } globalScene.tweens.add({ targets: this.statsLabels, - duration: Utils.fixedInt(125), + duration: fixedInt(125), ease: "Sine.easeInOut", alpha: visible ? 1 : 0, }); diff --git a/src/ui/battle-flyout.ts b/src/ui/battle-flyout.ts index 206546ad9cb..854f4cc4dd9 100644 --- a/src/ui/battle-flyout.ts +++ b/src/ui/battle-flyout.ts @@ -1,6 +1,6 @@ import type { default as Pokemon } from "../field/pokemon"; import { addTextObject, TextStyle } from "./text"; -import * as Utils from "../utils"; +import { fixedInt } from "#app/utils"; import { globalScene } from "#app/global-scene"; import type Move from "#app/data/moves/move"; import type { BerryUsedEvent, MoveUsedEvent } from "../events/battle-scene"; @@ -201,7 +201,7 @@ export default class BattleFlyout extends Phaser.GameObjects.Container { globalScene.tweens.add({ targets: this.flyoutParent, x: visible ? this.anchorX : this.anchorX - this.translationX, - duration: Utils.fixedInt(125), + duration: fixedInt(125), ease: "Sine.easeInOut", alpha: visible ? 1 : 0, }); diff --git a/src/ui/battle-info.ts b/src/ui/battle-info.ts index ab006269d4e..2b205329ab8 100644 --- a/src/ui/battle-info.ts +++ b/src/ui/battle-info.ts @@ -1,6 +1,6 @@ import type { EnemyPokemon, default as Pokemon } from "../field/pokemon"; import { getLevelTotalExp, getLevelRelExp } from "../data/exp"; -import * as Utils from "../utils"; +import { getLocalizedSpriteKey, fixedInt } from "#app/utils"; import { addTextObject, TextStyle } from "./text"; import { getGenderSymbol, getGenderColor, Gender } from "../data/gender"; import { StatusEffect } from "#enums/status-effect"; @@ -163,7 +163,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.splicedIcon.setInteractive(new Phaser.Geom.Rectangle(0, 0, 12, 15), Phaser.Geom.Rectangle.Contains); this.add(this.splicedIcon); - this.statusIndicator = globalScene.add.sprite(0, 0, Utils.getLocalizedSpriteKey("statuses")); + this.statusIndicator = globalScene.add.sprite(0, 0, getLocalizedSpriteKey("statuses")); this.statusIndicator.setName("icon_status"); this.statusIndicator.setVisible(false); this.statusIndicator.setOrigin(0, 0); @@ -536,7 +536,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { toggleStats(visible: boolean): void { globalScene.tweens.add({ targets: this.statsContainer, - duration: Utils.fixedInt(125), + duration: fixedInt(125), ease: "Sine.easeInOut", alpha: visible ? 1 : 0, }); diff --git a/src/ui/bgm-bar.ts b/src/ui/bgm-bar.ts index 45ed766c7fa..d944453ba2c 100644 --- a/src/ui/bgm-bar.ts +++ b/src/ui/bgm-bar.ts @@ -1,6 +1,6 @@ import { addTextObject, TextStyle } from "./text"; import i18next from "i18next"; -import * as Utils from "#app/utils"; +import { formatText } from "#app/utils"; import { globalScene } from "#app/global-scene"; const hiddenX = -150; @@ -100,7 +100,7 @@ export default class BgmBar extends Phaser.GameObjects.Container { getRealBgmName(bgmName: string): string { return i18next.t([`bgmName:${bgmName}`, "bgmName:missing_entries"], { - name: Utils.formatText(bgmName), + name: formatText(bgmName), }); } } diff --git a/src/ui/candy-bar.ts b/src/ui/candy-bar.ts index ba85ed7fef3..0cf3e0c91e9 100644 --- a/src/ui/candy-bar.ts +++ b/src/ui/candy-bar.ts @@ -2,7 +2,7 @@ import { starterColors } from "#app/battle-scene"; import { globalScene } from "#app/global-scene"; import { TextStyle, addTextObject } from "./text"; import { argbFromRgba } from "@material/material-color-utilities"; -import * as Utils from "../utils"; +import { rgbHexToRgba } from "#app/utils"; import type { Species } from "#enums/species"; export default class CandyBar extends Phaser.GameObjects.Container { @@ -60,8 +60,8 @@ export default class CandyBar extends Phaser.GameObjects.Container { const colorScheme = starterColors[starterSpeciesId]; - this.candyIcon.setTint(argbFromRgba(Utils.rgbHexToRgba(colorScheme[0]))); - this.candyOverlayIcon.setTint(argbFromRgba(Utils.rgbHexToRgba(colorScheme[1]))); + this.candyIcon.setTint(argbFromRgba(rgbHexToRgba(colorScheme[0]))); + this.candyOverlayIcon.setTint(argbFromRgba(rgbHexToRgba(colorScheme[1]))); this.countText.setText( `${globalScene.gameData.starterData[starterSpeciesId].candyCount + count} (+${count.toString()})`, diff --git a/src/ui/challenges-select-ui-handler.ts b/src/ui/challenges-select-ui-handler.ts index 61989cd594e..caffede2487 100644 --- a/src/ui/challenges-select-ui-handler.ts +++ b/src/ui/challenges-select-ui-handler.ts @@ -5,7 +5,7 @@ import { addWindow } from "./ui-theme"; import { Button } from "#enums/buttons"; import i18next from "i18next"; import type { Challenge } from "#app/data/challenge"; -import * as Utils from "../utils"; +import { getLocalizedSpriteKey } from "#app/utils"; import { Challenges } from "#app/enums/challenges"; import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; import { Color, ShadowColor } from "#app/enums/color"; @@ -193,7 +193,7 @@ export default class GameChallengesUiHandler extends UiHandler { }; } - this.monoTypeValue = globalScene.add.sprite(8, 98, Utils.getLocalizedSpriteKey("types")); + this.monoTypeValue = globalScene.add.sprite(8, 98, getLocalizedSpriteKey("types")); this.monoTypeValue.setName("challenge-value-monotype-sprite"); this.monoTypeValue.setScale(0.86); this.monoTypeValue.setVisible(false); diff --git a/src/ui/char-sprite.ts b/src/ui/char-sprite.ts index 74c021a65b8..f717927c107 100644 --- a/src/ui/char-sprite.ts +++ b/src/ui/char-sprite.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import * as Utils from "../utils"; +import { MissingTextureKey } from "#app/utils"; export default class CharSprite extends Phaser.GameObjects.Container { private sprite: Phaser.GameObjects.Sprite; @@ -57,7 +57,7 @@ export default class CharSprite extends Phaser.GameObjects.Container { }, }); - this.setVisible(globalScene.textures.get(key).key !== Utils.MissingTextureKey); + this.setVisible(globalScene.textures.get(key).key !== MissingTextureKey); this.shown = true; this.key = key; diff --git a/src/ui/daily-run-scoreboard.ts b/src/ui/daily-run-scoreboard.ts index 53c737898e7..896f2171676 100644 --- a/src/ui/daily-run-scoreboard.ts +++ b/src/ui/daily-run-scoreboard.ts @@ -1,6 +1,6 @@ import i18next from "i18next"; import { globalScene } from "#app/global-scene"; -import * as Utils from "../utils"; +import { getEnumKeys, executeIf } from "#app/utils"; import { TextStyle, addTextObject } from "./text"; import { WindowVariant, addWindow } from "./ui-theme"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; @@ -89,7 +89,7 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container { this.prevCategoryButton.setInteractive(new Phaser.Geom.Rectangle(0, 0, 6, 10), Phaser.Geom.Rectangle.Contains); this.prevCategoryButton.on("pointerup", () => { - this.update(this.category ? this.category - 1 : Utils.getEnumKeys(ScoreboardCategory).length - 1); + this.update(this.category ? this.category - 1 : getEnumKeys(ScoreboardCategory).length - 1); }); this.nextCategoryButton = globalScene.add.sprite(window.displayWidth - 4, 4, "cursor"); @@ -98,7 +98,7 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container { this.nextCategoryButton.setInteractive(new Phaser.Geom.Rectangle(0, 0, 6, 10), Phaser.Geom.Rectangle.Contains); this.nextCategoryButton.on("pointerup", () => { - this.update(this.category < Utils.getEnumKeys(ScoreboardCategory).length - 1 ? this.category + 1 : 0); + this.update(this.category < getEnumKeys(ScoreboardCategory).length - 1 ? this.category + 1 : 0); }); this.prevPageButton = globalScene.add.sprite( @@ -226,7 +226,7 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container { this.page = page = 1; } - Utils.executeIf(category !== this.category || this.pageCount === undefined, () => + executeIf(category !== this.category || this.pageCount === undefined, () => pokerogueApi.daily.getRankingsPageCount({ category }).then(count => (this.pageCount = count)), ) .then(() => { diff --git a/src/ui/egg-gacha-ui-handler.ts b/src/ui/egg-gacha-ui-handler.ts index cb6a474f01d..956a308448b 100644 --- a/src/ui/egg-gacha-ui-handler.ts +++ b/src/ui/egg-gacha-ui-handler.ts @@ -1,7 +1,7 @@ import { Mode } from "./ui"; import { TextStyle, addTextObject, getEggTierTextTint, getTextStyleOptions } from "./text"; import MessageUiHandler from "./message-ui-handler"; -import * as Utils from "../utils"; +import { getEnumValues, getEnumKeys, fixedInt, randSeedShuffle } from "#app/utils"; import type { IEggOptions } from "../data/egg"; import { Egg, getLegendaryGachaSpeciesForTimestamp } from "../data/egg"; import { VoucherType, getVoucherTypeIcon } from "../system/voucher"; @@ -83,7 +83,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { }); } - Utils.getEnumValues(GachaType).forEach((gachaType, g) => { + getEnumValues(GachaType).forEach((gachaType, g) => { const gachaTypeKey = GachaType[gachaType].toString().toLowerCase(); const gachaContainer = globalScene.add.container(180 * g, 18); @@ -272,7 +272,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { this.eggGachaContainer.add(this.eggGachaOptionsContainer); - new Array(Utils.getEnumKeys(VoucherType).length).fill(null).map((_, i) => { + new Array(getEnumKeys(VoucherType).length).fill(null).map((_, i) => { const container = globalScene.add.container(globalScene.game.canvas.width / 6 - 56 * i, 0); const bg = addWindow(0, 0, 56, 22); @@ -355,7 +355,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { if (this.transitioning && this.transitionCancelled) { delay = Math.ceil(delay / 5); } - return Utils.fixedInt(delay); + return fixedInt(delay); } pull(pullCount = 0, count = 0, eggs?: Egg[]): void { @@ -476,7 +476,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { eggs.push(egg); } // Shuffle the eggs in case the guaranteed one got added as last egg - eggs = Utils.randSeedShuffle(eggs); + eggs = randSeedShuffle(eggs); (globalScene.currentBattle ? globalScene.gameData.saveAll(true, true, true) @@ -643,7 +643,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { } showError(text: string): void { - this.showText(text, undefined, () => this.showText(this.defaultText), Utils.fixedInt(1500)); + this.showText(text, undefined, () => this.showText(this.defaultText), fixedInt(1500)); } setTransitioning(transitioning: boolean): void { @@ -783,7 +783,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { } break; case Button.RIGHT: - if (this.gachaCursor < Utils.getEnumKeys(GachaType).length - 1) { + if (this.gachaCursor < getEnumKeys(GachaType).length - 1) { success = this.setGachaCursor(this.gachaCursor + 1); } break; diff --git a/src/ui/fight-ui-handler.ts b/src/ui/fight-ui-handler.ts index 9f76e85f228..3775dbc2228 100644 --- a/src/ui/fight-ui-handler.ts +++ b/src/ui/fight-ui-handler.ts @@ -6,7 +6,7 @@ import { PokemonType } from "#enums/pokemon-type"; import { Command } from "./command-ui-handler"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; -import * as Utils from "../utils"; +import { getLocalizedSpriteKey, fixedInt, padInt } from "#app/utils"; import { MoveCategory } from "#enums/MoveCategory"; import i18next from "i18next"; import { Button } from "#enums/buttons"; @@ -54,7 +54,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { this.typeIcon = globalScene.add.sprite( globalScene.scaledCanvas.width - 57, -36, - Utils.getLocalizedSpriteKey("types"), + getLocalizedSpriteKey("types"), "unknown", ); this.typeIcon.setVisible(false); @@ -199,7 +199,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { } globalScene.tweens.add({ targets: [this.movesContainer, this.cursorObj], - duration: Utils.fixedInt(125), + duration: fixedInt(125), ease: "Sine.easeInOut", alpha: visible ? 0 : 1, }); @@ -245,7 +245,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { if (hasMove) { const pokemonMove = moveset[cursor]; const moveType = pokemon.getMoveType(pokemonMove.getMove()); - const textureKey = Utils.getLocalizedSpriteKey("types"); + const textureKey = getLocalizedSpriteKey("types"); this.typeIcon.setTexture(textureKey, PokemonType[moveType].toLowerCase()).setScale(0.8); const moveCategory = pokemonMove.getMove().category; @@ -255,8 +255,8 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { const maxPP = pokemonMove.getMovePp(); const pp = maxPP - pokemonMove.ppUsed; - const ppLeftStr = Utils.padInt(pp, 2, " "); - const ppMaxStr = Utils.padInt(maxPP, 2, " "); + const ppLeftStr = padInt(pp, 2, " "); + const ppMaxStr = padInt(maxPP, 2, " "); this.ppText.setText(`${ppLeftStr}/${ppMaxStr}`); this.powerText.setText(`${power >= 0 ? power : "---"}`); this.accuracyText.setText(`${accuracy >= 0 ? accuracy : "---"}`); diff --git a/src/ui/form-modal-ui-handler.ts b/src/ui/form-modal-ui-handler.ts index 8784145acd6..e27b2e9ed89 100644 --- a/src/ui/form-modal-ui-handler.ts +++ b/src/ui/form-modal-ui-handler.ts @@ -4,7 +4,7 @@ import type { Mode } from "./ui"; import { TextStyle, addTextInputObject, addTextObject } from "./text"; import { WindowVariant, addWindow } from "./ui-theme"; import type InputText from "phaser3-rex-plugins/plugins/inputtext"; -import * as Utils from "../utils"; +import { fixedInt } from "#app/utils"; import { Button } from "#enums/buttons"; import { globalScene } from "#app/global-scene"; @@ -135,7 +135,7 @@ export abstract class FormModalUiHandler extends ModalUiHandler { this.tween = globalScene.tweens.add({ targets: this.modalContainer, - duration: Utils.fixedInt(1000), + duration: fixedInt(1000), ease: "Sine.easeInOut", y: "-=24", alpha: 1, diff --git a/src/ui/game-stats-ui-handler.ts b/src/ui/game-stats-ui-handler.ts index 7d3decf0c4c..2e2112dfda4 100644 --- a/src/ui/game-stats-ui-handler.ts +++ b/src/ui/game-stats-ui-handler.ts @@ -3,7 +3,7 @@ import { TextStyle, addTextObject } from "#app/ui/text"; import type { Mode } from "#app/ui/ui"; import UiHandler from "#app/ui/ui-handler"; import { addWindow } from "#app/ui/ui-theme"; -import * as Utils from "#app/utils"; +import { getPlayTimeString, formatFancyLargeNumber, toReadableString } from "#app/utils"; import type { GameData } from "#app/system/game-data"; import { DexAttr } from "#app/system/game-data"; import { speciesStarterCosts } from "#app/data/balance/starters"; @@ -25,7 +25,7 @@ interface DisplayStats { const displayStats: DisplayStats = { playTime: { label_key: "playTime", - sourceFunc: gameData => Utils.getPlayTimeString(gameData.gameStats.playTime), + sourceFunc: gameData => getPlayTimeString(gameData.gameStats.playTime), }, battles: { label_key: "totalBattles", @@ -91,7 +91,7 @@ const displayStats: DisplayStats = { }, highestMoney: { label_key: "highestMoney", - sourceFunc: gameData => Utils.formatFancyLargeNumber(gameData.gameStats.highestMoney), + sourceFunc: gameData => formatFancyLargeNumber(gameData.gameStats.highestMoney), }, highestDamage: { label_key: "highestDamage", @@ -435,7 +435,7 @@ export function initStatsKeys() { } if (!(displayStats[key] as DisplayStat).label_key) { const splittableKey = key.replace(/([a-z]{2,})([A-Z]{1}(?:[^A-Z]|$))/g, "$1_$2"); - (displayStats[key] as DisplayStat).label_key = Utils.toReadableString( + (displayStats[key] as DisplayStat).label_key = toReadableString( `${splittableKey[0].toUpperCase()}${splittableKey.slice(1)}`, ); } diff --git a/src/ui/login-form-ui-handler.ts b/src/ui/login-form-ui-handler.ts index 1087ffa3fd1..5c009357443 100644 --- a/src/ui/login-form-ui-handler.ts +++ b/src/ui/login-form-ui-handler.ts @@ -1,7 +1,7 @@ import type { InputFieldConfig } from "./form-modal-ui-handler"; import { FormModalUiHandler } from "./form-modal-ui-handler"; import type { ModalConfig } from "./modal-ui-handler"; -import * as Utils from "../utils"; +import { fixedInt } from "#app/utils"; import { Mode } from "./ui"; import i18next from "i18next"; import { addTextObject, TextStyle } from "./text"; @@ -283,7 +283,7 @@ export default class LoginFormUiHandler extends FormModalUiHandler { this.externalPartyContainer.setAlpha(0); globalScene.tweens.add({ targets: this.externalPartyContainer, - duration: Utils.fixedInt(1000), + duration: fixedInt(1000), ease: "Sine.easeInOut", y: "-=24", alpha: 1, @@ -292,7 +292,7 @@ export default class LoginFormUiHandler extends FormModalUiHandler { this.infoContainer.setAlpha(0); globalScene.tweens.add({ targets: this.infoContainer, - duration: Utils.fixedInt(1000), + duration: fixedInt(1000), ease: "Sine.easeInOut", y: "-=24", alpha: 1, diff --git a/src/ui/menu-ui-handler.ts b/src/ui/menu-ui-handler.ts index b83ae24c9e0..241ddbb91a8 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -2,7 +2,7 @@ import { bypassLogin } from "#app/battle-scene"; import { globalScene } from "#app/global-scene"; import { TextStyle, addTextObject, getTextStyleOptions } from "./text"; import { Mode } from "./ui"; -import * as Utils from "../utils"; +import { getEnumKeys, isLocal, isBeta, fixedInt, getCookie, sessionIdKey } from "#app/utils"; import { addWindow, WindowVariant } from "./ui-theme"; import MessageUiHandler from "./message-ui-handler"; import type { OptionSelectConfig, OptionSelectItem } from "./abstact-option-select-ui-handler"; @@ -75,7 +75,7 @@ export default class MenuUiHandler extends MessageUiHandler { { condition: bypassLogin, options: [MenuOptions.LOG_OUT] }, ]; - this.menuOptions = Utils.getEnumKeys(MenuOptions) + this.menuOptions = getEnumKeys(MenuOptions) .map(m => Number.parseInt(MenuOptions[m]) as MenuOptions) .filter(m => { return !this.excludedMenus().some(exclusion => exclusion.condition && exclusion.options.includes(m)); @@ -130,7 +130,7 @@ export default class MenuUiHandler extends MessageUiHandler { { condition: bypassLogin, options: [MenuOptions.LOG_OUT] }, ]; - this.menuOptions = Utils.getEnumKeys(MenuOptions) + this.menuOptions = getEnumKeys(MenuOptions) .map(m => Number.parseInt(MenuOptions[m]) as MenuOptions) .filter(m => { return !this.excludedMenus().some(exclusion => exclusion.condition && exclusion.options.includes(m)); @@ -238,7 +238,7 @@ export default class MenuUiHandler extends MessageUiHandler { }); }; - if (Utils.isLocal || Utils.isBeta) { + if (isLocal || isBeta) { manageDataOptions.push({ label: i18next.t("menuUiHandler:importSession"), handler: () => { @@ -292,7 +292,7 @@ export default class MenuUiHandler extends MessageUiHandler { }, keepOpen: true, }); - if (Utils.isLocal || Utils.isBeta) { + if (isLocal || isBeta) { manageDataOptions.push({ label: i18next.t("menuUiHandler:importData"), handler: () => { @@ -328,7 +328,7 @@ export default class MenuUiHandler extends MessageUiHandler { keepOpen: true, }, ); - if (Utils.isLocal || Utils.isBeta) { + if (isLocal || isBeta) { // this should make sure we don't have this option in live manageDataOptions.push({ label: "Test Dialogue", @@ -510,7 +510,7 @@ export default class MenuUiHandler extends MessageUiHandler { this.render(); super.show(args); - this.menuOptions = Utils.getEnumKeys(MenuOptions) + this.menuOptions = getEnumKeys(MenuOptions) .map(m => Number.parseInt(MenuOptions[m]) as MenuOptions) .filter(m => { return !this.excludedMenus().some(exclusion => exclusion.condition && exclusion.options.includes(m)); @@ -574,7 +574,7 @@ export default class MenuUiHandler extends MessageUiHandler { ui.setOverlayMode(Mode.EGG_LIST); success = true; } else { - ui.showText(i18next.t("menuUiHandler:noEggs"), null, () => ui.showText(""), Utils.fixedInt(1500)); + ui.showText(i18next.t("menuUiHandler:noEggs"), null, () => ui.showText(""), fixedInt(1500)); error = true; } break; @@ -607,7 +607,7 @@ export default class MenuUiHandler extends MessageUiHandler { : i18next.t("menuUiHandler:unlinkDiscord"), handler: () => { if (loggedInUser?.discordId === "") { - const token = Utils.getCookie(Utils.sessionIdKey); + const token = getCookie(sessionIdKey); const redirectUri = encodeURIComponent(`${import.meta.env.VITE_SERVER_URL}/auth/discord/callback`); const discordId = import.meta.env.VITE_DISCORD_CLIENT_ID; const discordUrl = `https://discord.com/api/oauth2/authorize?client_id=${discordId}&redirect_uri=${redirectUri}&response_type=code&scope=identify&state=${token}&prompt=none`; @@ -627,7 +627,7 @@ export default class MenuUiHandler extends MessageUiHandler { : i18next.t("menuUiHandler:unlinkGoogle"), handler: () => { if (loggedInUser?.googleId === "") { - const token = Utils.getCookie(Utils.sessionIdKey); + const token = getCookie(sessionIdKey); const redirectUri = encodeURIComponent(`${import.meta.env.VITE_SERVER_URL}/auth/google/callback`); const googleId = import.meta.env.VITE_GOOGLE_CLIENT_ID; const googleUrl = `https://accounts.google.com/o/oauth2/auth?client_id=${googleId}&response_type=code&redirect_uri=${redirectUri}&scope=openid&state=${token}`; diff --git a/src/ui/message-ui-handler.ts b/src/ui/message-ui-handler.ts index e927793e0ab..b57b236531c 100644 --- a/src/ui/message-ui-handler.ts +++ b/src/ui/message-ui-handler.ts @@ -1,6 +1,6 @@ import AwaitableUiHandler from "./awaitable-ui-handler"; import type { Mode } from "./ui"; -import * as Utils from "../utils"; +import { getFrameMs } from "#app/utils"; import { globalScene } from "#app/global-scene"; export default abstract class MessageUiHandler extends AwaitableUiHandler { @@ -183,7 +183,7 @@ export default abstract class MessageUiHandler extends AwaitableUiHandler { if (charDelay) { this.textTimer!.paused = true; // TODO: is the bang correct? globalScene.tweens.addCounter({ - duration: Utils.getFrameMs(charDelay), + duration: getFrameMs(charDelay), onComplete: () => { this.textTimer!.paused = false; // TODO: is the bang correct? advance(); @@ -193,7 +193,7 @@ export default abstract class MessageUiHandler extends AwaitableUiHandler { this.textTimer!.paused = true; globalScene.time.delayedCall(150, () => { globalScene.ui.fadeOut(750).then(() => { - const delay = Utils.getFrameMs(charFade); + const delay = getFrameMs(charFade); globalScene.time.delayedCall(delay, () => { globalScene.ui.fadeIn(500).then(() => { this.textTimer!.paused = false; diff --git a/src/ui/modifier-select-ui-handler.ts b/src/ui/modifier-select-ui-handler.ts index e5d8f858782..26351d4dbf1 100644 --- a/src/ui/modifier-select-ui-handler.ts +++ b/src/ui/modifier-select-ui-handler.ts @@ -10,11 +10,10 @@ import { handleTutorial, Tutorial } from "../tutorial"; import { Button } from "#enums/buttons"; import MoveInfoOverlay from "./move-info-overlay"; import { allMoves } from "../data/moves/move"; -import * as Utils from "./../utils"; +import { formatMoney, NumberHolder } from "#app/utils"; import Overrides from "#app/overrides"; import i18next from "i18next"; import { ShopCursorTarget } from "#app/enums/shop-cursor-target"; -import { NumberHolder } from "./../utils"; import Phaser from "phaser"; import type { PokeballType } from "#enums/pokeball"; @@ -645,7 +644,7 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { this.rerollCostText.setVisible(true); const canReroll = globalScene.money >= this.rerollCost; - const formattedMoney = Utils.formatMoney(globalScene.moneyFormat, this.rerollCost); + const formattedMoney = formatMoney(globalScene.moneyFormat, this.rerollCost); this.rerollCostText.setText(i18next.t("modifierSelectUiHandler:rerollCost", { formattedMoney })); this.rerollCostText.setColor(this.getTextColor(canReroll ? TextStyle.MONEY : TextStyle.PARTY_RED)); @@ -933,7 +932,7 @@ class ModifierOption extends Phaser.GameObjects.Container { const cost = Overrides.WAIVE_ROLL_FEE_OVERRIDE ? 0 : this.modifierTypeOption.cost; const textStyle = cost <= globalScene.money ? TextStyle.MONEY : TextStyle.PARTY_RED; - const formattedMoney = Utils.formatMoney(globalScene.moneyFormat, cost); + const formattedMoney = formatMoney(globalScene.moneyFormat, cost); this.itemCostText.setText(i18next.t("modifierSelectUiHandler:itemCost", { formattedMoney })); this.itemCostText.setColor(getTextColor(textStyle, false, globalScene.uiTheme)); diff --git a/src/ui/move-info-overlay.ts b/src/ui/move-info-overlay.ts index 6fc99beb0ae..bd9fdf00c72 100644 --- a/src/ui/move-info-overlay.ts +++ b/src/ui/move-info-overlay.ts @@ -2,7 +2,7 @@ import type { InfoToggle } from "#app/battle-scene"; import { globalScene } from "#app/global-scene"; import { TextStyle, addTextObject } from "./text"; import { addWindow } from "./ui-theme"; -import * as Utils from "../utils"; +import { getLocalizedSpriteKey, fixedInt } from "#app/utils"; import type Move from "../data/moves/move"; import { MoveCategory } from "#enums/MoveCategory"; import { PokemonType } from "#enums/pokemon-type"; @@ -120,7 +120,7 @@ export default class MoveInfoOverlay extends Phaser.GameObjects.Container implem valuesBg.setOrigin(0, 0); this.val.add(valuesBg); - this.typ = globalScene.add.sprite(25, EFF_HEIGHT - 35, Utils.getLocalizedSpriteKey("types"), "unknown"); + this.typ = globalScene.add.sprite(25, EFF_HEIGHT - 35, getLocalizedSpriteKey("types"), "unknown"); this.typ.setScale(0.8); this.val.add(this.typ); @@ -175,7 +175,7 @@ export default class MoveInfoOverlay extends Phaser.GameObjects.Container implem this.pow.setText(move.power >= 0 ? move.power.toString() : "---"); this.acc.setText(move.accuracy >= 0 ? move.accuracy.toString() : "---"); this.pp.setText(move.pp >= 0 ? move.pp.toString() : "---"); - this.typ.setTexture(Utils.getLocalizedSpriteKey("types"), PokemonType[move.type].toLowerCase()); + this.typ.setTexture(getLocalizedSpriteKey("types"), PokemonType[move.type].toLowerCase()); this.cat.setFrame(MoveCategory[move.category].toLowerCase()); this.desc.setText(move?.effect || ""); @@ -193,10 +193,10 @@ export default class MoveInfoOverlay extends Phaser.GameObjects.Container implem // generate scrolling effects this.descScroll = globalScene.tweens.add({ targets: this.desc, - delay: Utils.fixedInt(2000), + delay: fixedInt(2000), loop: -1, - hold: Utils.fixedInt(2000), - duration: Utils.fixedInt((moveDescriptionLineCount - 3) * 2000), + hold: fixedInt(2000), + duration: fixedInt((moveDescriptionLineCount - 3) * 2000), y: `-=${14.83 * (72 / 96) * (moveDescriptionLineCount - 3)}`, }); } @@ -219,7 +219,7 @@ export default class MoveInfoOverlay extends Phaser.GameObjects.Container implem } globalScene.tweens.add({ targets: this.desc, - duration: Utils.fixedInt(125), + duration: fixedInt(125), ease: "Sine.easeInOut", alpha: visible ? 1 : 0, }); diff --git a/src/ui/mystery-encounter-ui-handler.ts b/src/ui/mystery-encounter-ui-handler.ts index 87d2e2ba28c..2bf05302c55 100644 --- a/src/ui/mystery-encounter-ui-handler.ts +++ b/src/ui/mystery-encounter-ui-handler.ts @@ -6,8 +6,7 @@ import { addWindow, WindowVariant } from "./ui-theme"; import type { MysteryEncounterPhase } from "../phases/mystery-encounter-phases"; import { PartyUiMode } from "./party-ui-handler"; import type MysteryEncounterOption from "#app/data/mystery-encounters/mystery-encounter-option"; -import * as Utils from "../utils"; -import { isNullOrUndefined } from "../utils"; +import { fixedInt, isNullOrUndefined } from "#app/utils"; import { getPokeballAtlasKey } from "../data/pokeball"; import type { OptionSelectSettings } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { getEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; @@ -456,10 +455,10 @@ export default class MysteryEncounterUiHandler extends UiHandler { if (optionTextWidth > nonScrollWidth) { this.optionScrollTweens[i] = globalScene.tweens.add({ targets: optionText, - delay: Utils.fixedInt(2000), + delay: fixedInt(2000), loop: -1, - hold: Utils.fixedInt(2000), - duration: Utils.fixedInt(((optionTextWidth - nonScrollWidth) / 15) * 2000), + hold: fixedInt(2000), + duration: fixedInt(((optionTextWidth - nonScrollWidth) / 15) * 2000), x: `-=${optionTextWidth - nonScrollWidth}`, }); } @@ -527,10 +526,10 @@ export default class MysteryEncounterUiHandler extends UiHandler { if (descriptionLineCount > 6) { this.descriptionScrollTween = globalScene.tweens.add({ targets: descriptionTextObject, - delay: Utils.fixedInt(2000), + delay: fixedInt(2000), loop: -1, - hold: Utils.fixedInt(2000), - duration: Utils.fixedInt((descriptionLineCount - 6) * 2000), + hold: fixedInt(2000), + duration: fixedInt((descriptionLineCount - 6) * 2000), y: `-=${10 * (descriptionLineCount - 6)}`, }); } @@ -637,10 +636,10 @@ export default class MysteryEncounterUiHandler extends UiHandler { if (tooltipLineCount > 3) { this.tooltipScrollTween = globalScene.tweens.add({ targets: tooltipTextObject, - delay: Utils.fixedInt(1200), + delay: fixedInt(1200), loop: -1, - hold: Utils.fixedInt(1200), - duration: Utils.fixedInt((tooltipLineCount - 3) * 1200), + hold: fixedInt(1200), + duration: fixedInt((tooltipLineCount - 3) * 1200), y: `-=${11.2 * (tooltipLineCount - 3)}`, }); } diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index ebaccc515c1..61a98d79fbb 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -5,7 +5,7 @@ import { addBBCodeTextObject, addTextObject, getTextColor, TextStyle } from "#ap import { Command } from "#app/ui/command-ui-handler"; import MessageUiHandler from "#app/ui/message-ui-handler"; import { Mode } from "#app/ui/ui"; -import * as Utils from "#app/utils"; +import { BooleanHolder, toReadableString, randInt, getLocalizedSpriteKey } from "#app/utils"; import { PokemonFormChangeItemModifier, PokemonHeldItemModifier, @@ -215,7 +215,7 @@ export default class PartyUiHandler extends MessageUiHandler { * @returns */ private FilterChallengeLegal = (pokemon: PlayerPokemon) => { - const challengeAllowed = new Utils.BooleanHolder(true); + const challengeAllowed = new BooleanHolder(true); applyChallenges(ChallengeType.POKEMON_IN_BATTLE, pokemon, challengeAllowed); if (!challengeAllowed.value) { return i18next.t("partyUiHandler:cantBeUsed", { @@ -1201,7 +1201,7 @@ export default class PartyUiHandler extends MessageUiHandler { if (this.localizedOptions.includes(option)) { optionName = i18next.t(`partyUiHandler:${PartyOption[option]}`); } else { - optionName = Utils.toReadableString(PartyOption[option]); + optionName = toReadableString(PartyOption[option]); } } break; @@ -1309,7 +1309,7 @@ export default class PartyUiHandler extends MessageUiHandler { } getReleaseMessage(pokemonName: string): string { - const rand = Utils.randInt(128); + const rand = randInt(128); if (rand < 20) { return i18next.t("partyUiHandler:goodbye", { pokemonName: pokemonName }); } @@ -1566,7 +1566,7 @@ class PartySlot extends Phaser.GameObjects.Container { } if (this.pokemon.status) { - const statusIndicator = globalScene.add.sprite(0, 0, Utils.getLocalizedSpriteKey("statuses")); + const statusIndicator = globalScene.add.sprite(0, 0, getLocalizedSpriteKey("statuses")); statusIndicator.setFrame(StatusEffect[this.pokemon.status?.effect].toLowerCase()); statusIndicator.setOrigin(0, 0); statusIndicator.setPositionRelative(slotLevelLabel, this.slotIndex >= battlerCount ? 43 : 55, 0); diff --git a/src/ui/pokedex-info-overlay.ts b/src/ui/pokedex-info-overlay.ts index 7dfa3745cb7..43e9bbc1a65 100644 --- a/src/ui/pokedex-info-overlay.ts +++ b/src/ui/pokedex-info-overlay.ts @@ -1,7 +1,7 @@ import type { InfoToggle } from "../battle-scene"; import { TextStyle, addTextObject } from "./text"; import { addWindow } from "./ui-theme"; -import * as Utils from "../utils"; +import { fixedInt } from "#app/utils"; import i18next from "i18next"; import { globalScene } from "#app/global-scene"; @@ -128,10 +128,10 @@ export default class PokedexInfoOverlay extends Phaser.GameObjects.Container imp // generate scrolling effects this.descScroll = globalScene.tweens.add({ targets: this.desc, - delay: Utils.fixedInt(2000), + delay: fixedInt(2000), loop: -1, - hold: Utils.fixedInt(2000), - duration: Utils.fixedInt((lineCount - 3) * 2000), + hold: fixedInt(2000), + duration: fixedInt((lineCount - 3) * 2000), y: `-=${14.83 * (72 / 96) * (lineCount - 3)}`, }); } @@ -154,7 +154,7 @@ export default class PokedexInfoOverlay extends Phaser.GameObjects.Container imp } globalScene.tweens.add({ targets: this.desc, - duration: Utils.fixedInt(125), + duration: fixedInt(125), ease: "Sine.easeInOut", alpha: visible ? 1 : 0, }); diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index eede346f052..407ebfcd843 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -54,7 +54,7 @@ import { toReadableString, } from "#app/utils"; import type { Nature } from "#enums/nature"; -import * as Utils from "../utils"; +import { getEnumKeys } from "#app/utils"; import { speciesTmMoves } from "#app/data/balance/tms"; import type { BiomeTierTod } from "#app/data/balance/biomes"; import { BiomePoolTier, catchableSpecies } from "#app/data/balance/biomes"; @@ -592,7 +592,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.menuContainer.setVisible(false); - this.menuOptions = Utils.getEnumKeys(MenuOptions).map(m => Number.parseInt(MenuOptions[m]) as MenuOptions); + this.menuOptions = getEnumKeys(MenuOptions).map(m => Number.parseInt(MenuOptions[m]) as MenuOptions); this.optionSelectText = addBBCodeTextObject( 0, @@ -696,7 +696,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.starterAttributes = this.initStarterPrefs(); - this.menuOptions = Utils.getEnumKeys(MenuOptions).map(m => Number.parseInt(MenuOptions[m]) as MenuOptions); + this.menuOptions = getEnumKeys(MenuOptions).map(m => Number.parseInt(MenuOptions[m]) as MenuOptions); this.menuContainer.setVisible(true); diff --git a/src/ui/pokemon-hatch-info-container.ts b/src/ui/pokemon-hatch-info-container.ts index 99940b92351..692f0f1d374 100644 --- a/src/ui/pokemon-hatch-info-container.ts +++ b/src/ui/pokemon-hatch-info-container.ts @@ -1,7 +1,7 @@ import PokemonInfoContainer from "#app/ui/pokemon-info-container"; import { Gender } from "#app/data/gender"; import { PokemonType } from "#enums/pokemon-type"; -import * as Utils from "#app/utils"; +import { rgbHexToRgba, padInt } from "#app/utils"; import { TextStyle, addTextObject } from "#app/ui/text"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { allMoves } from "#app/data/moves/move"; @@ -154,14 +154,14 @@ export default class PokemonHatchInfoContainer extends PokemonInfoContainer { super.show(pokemon, false, 1, hatchInfo.getDex(), hatchInfo.getStarterEntry(), true); const colorScheme = starterColors[species.speciesId]; - this.pokemonCandyIcon.setTint(argbFromRgba(Utils.rgbHexToRgba(colorScheme[0]))); + this.pokemonCandyIcon.setTint(argbFromRgba(rgbHexToRgba(colorScheme[0]))); this.pokemonCandyIcon.setVisible(true); - this.pokemonCandyOverlayIcon.setTint(argbFromRgba(Utils.rgbHexToRgba(colorScheme[1]))); + this.pokemonCandyOverlayIcon.setTint(argbFromRgba(rgbHexToRgba(colorScheme[1]))); this.pokemonCandyOverlayIcon.setVisible(true); this.pokemonCandyCountText.setText(`x${globalScene.gameData.starterData[species.speciesId].candyCount}`); this.pokemonCandyCountText.setVisible(true); - this.pokemonNumberText.setText(Utils.padInt(species.speciesId, 4)); + this.pokemonNumberText.setText(padInt(species.speciesId, 4)); this.pokemonNameText.setText(species.name); const hasEggMoves = species && speciesEggMoves.hasOwnProperty(species.speciesId); diff --git a/src/ui/pokemon-icon-anim-handler.ts b/src/ui/pokemon-icon-anim-handler.ts index c84ee2a0f9a..b6944c0fd84 100644 --- a/src/ui/pokemon-icon-anim-handler.ts +++ b/src/ui/pokemon-icon-anim-handler.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import * as Utils from "../utils"; +import { fixedInt } from "#app/utils"; export enum PokemonIconAnimMode { NONE, @@ -27,7 +27,7 @@ export default class PokemonIconAnimHandler { } }; globalScene.tweens.addCounter({ - duration: Utils.fixedInt(200), + duration: fixedInt(200), from: 0, to: 1, yoyo: true, diff --git a/src/ui/pokemon-info-container.ts b/src/ui/pokemon-info-container.ts index 1c880f6aec9..0ccece46ab9 100644 --- a/src/ui/pokemon-info-container.ts +++ b/src/ui/pokemon-info-container.ts @@ -8,7 +8,7 @@ import type Pokemon from "../field/pokemon"; import i18next from "i18next"; import type { DexEntry, StarterDataEntry } from "../system/game-data"; import { DexAttr } from "../system/game-data"; -import * as Utils from "../utils"; +import { fixedInt } from "#app/utils"; import ConfirmUiHandler from "./confirm-ui-handler"; import { StatsContainer } from "./stats-container"; import { TextStyle, addBBCodeTextObject, addTextObject, getTextColor } from "./text"; @@ -393,7 +393,7 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { if (!eggInfo) { globalScene.tweens.add({ targets: this, - duration: Utils.fixedInt(Math.floor(750 / speedMultiplier)), + duration: fixedInt(Math.floor(750 / speedMultiplier)), ease: "Cubic.easeInOut", x: this.initialX - this.infoWindowWidth, onComplete: () => { @@ -403,9 +403,9 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { if (showMoves) { globalScene.tweens.add({ - delay: Utils.fixedInt(Math.floor(325 / speedMultiplier)), + delay: fixedInt(Math.floor(325 / speedMultiplier)), targets: this.pokemonMovesContainer, - duration: Utils.fixedInt(Math.floor(325 / speedMultiplier)), + duration: fixedInt(Math.floor(325 / speedMultiplier)), ease: "Cubic.easeInOut", x: this.movesContainerInitialX - 57, onComplete: () => resolve(), @@ -463,7 +463,7 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { return new Promise(resolve => { globalScene.tweens.add({ targets: this, - duration: Utils.fixedInt(Math.floor(150 / speedMultiplier)), + duration: fixedInt(Math.floor(150 / speedMultiplier)), ease: "Cubic.easeInOut", x: xPosition, onComplete: () => { @@ -482,14 +482,14 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { globalScene.tweens.add({ targets: this.pokemonMovesContainer, - duration: Utils.fixedInt(Math.floor(750 / speedMultiplier)), + duration: fixedInt(Math.floor(750 / speedMultiplier)), ease: "Cubic.easeInOut", x: this.movesContainerInitialX, }); globalScene.tweens.add({ targets: this, - duration: Utils.fixedInt(Math.floor(750 / speedMultiplier)), + duration: fixedInt(Math.floor(750 / speedMultiplier)), ease: "Cubic.easeInOut", x: this.initialX, onComplete: () => { diff --git a/src/ui/run-history-ui-handler.ts b/src/ui/run-history-ui-handler.ts index 85ea1e93e8d..ffc9d378d18 100644 --- a/src/ui/run-history-ui-handler.ts +++ b/src/ui/run-history-ui-handler.ts @@ -3,7 +3,7 @@ import { GameModes } from "../game-mode"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; import { addWindow } from "./ui-theme"; -import * as Utils from "../utils"; +import { fixedInt, formatLargeNumber } from "#app/utils"; import type PokemonData from "../system/pokemon-data"; import MessageUiHandler from "./message-ui-handler"; import i18next from "i18next"; @@ -218,7 +218,7 @@ export default class RunHistoryUiHandler extends MessageUiHandler { globalScene.tweens.add({ targets: this.runsContainer, y: this.runContainerInitialY - 56 * scrollCursor, - duration: Utils.fixedInt(325), + duration: fixedInt(325), ease: "Sine.easeInOut", }); } @@ -314,7 +314,7 @@ class RunEntryContainer extends Phaser.GameObjects.Container { const enemyLevel = addTextObject( 32, 20, - `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatLargeNumber(enemy.level, 1000)}`, + `${i18next.t("saveSlotSelectUiHandler:lv")}${formatLargeNumber(enemy.level, 1000)}`, TextStyle.PARTY, { fontSize: "54px", color: "#f8f8f8" }, ); @@ -408,7 +408,7 @@ class RunEntryContainer extends Phaser.GameObjects.Container { const text = addTextObject( 32, 20, - `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatLargeNumber(pokemon.level, 1000)}`, + `${i18next.t("saveSlotSelectUiHandler:lv")}${formatLargeNumber(pokemon.level, 1000)}`, TextStyle.PARTY, { fontSize: "54px", color: "#f8f8f8" }, ); diff --git a/src/ui/run-info-ui-handler.ts b/src/ui/run-info-ui-handler.ts index 8719950381a..47de6a1a64d 100644 --- a/src/ui/run-info-ui-handler.ts +++ b/src/ui/run-info-ui-handler.ts @@ -5,7 +5,7 @@ import { TextStyle, addTextObject, addBBCodeTextObject, getTextColor } from "./t import { Mode } from "./ui"; import { addWindow } from "./ui-theme"; import { getPokeballAtlasKey } from "#app/data/pokeball"; -import * as Utils from "../utils"; +import { formatLargeNumber, getPlayTimeString, formatMoney, formatFancyLargeNumber } from "#app/utils"; import type PokemonData from "../system/pokemon-data"; import i18next from "i18next"; import { Button } from "../enums/buttons"; @@ -19,7 +19,8 @@ import { PokemonType } from "#enums/pokemon-type"; import { TypeColor, TypeShadow } from "#app/enums/color"; import { getNatureStatMultiplier, getNatureName } from "../data/nature"; import { getVariantTint } from "#app/sprites/variant"; -import * as Modifier from "../modifier/modifier"; +// biome-ignore lint/style/noNamespaceImport: See `src/system/game-data.ts` +import * as Modifier from "#app/modifier/modifier"; import type { Species } from "#enums/species"; import { PlayerGender } from "#enums/player-gender"; import { SettingKeyboard } from "#app/system/settings/settings-keyboard"; @@ -411,7 +412,7 @@ export default class RunInfoUiHandler extends UiHandler { const enemyLevel = addTextObject( 36, 26, - `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatLargeNumber(enemy.level, 1000)}`, + `${i18next.t("saveSlotSelectUiHandler:lv")}${formatLargeNumber(enemy.level, 1000)}`, enemyLevelStyle, { fontSize: "44px", color: "#f8f8f8" }, ); @@ -441,7 +442,7 @@ export default class RunInfoUiHandler extends UiHandler { const enemyLevel = addTextObject( 36, 26, - `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatLargeNumber(enemy.level, 1000)}`, + `${i18next.t("saveSlotSelectUiHandler:lv")}${formatLargeNumber(enemy.level, 1000)}`, bossStatus ? TextStyle.PARTY_RED : TextStyle.PARTY, { fontSize: "44px", color: "#f8f8f8" }, ); @@ -527,7 +528,7 @@ export default class RunInfoUiHandler extends UiHandler { const enemyLevel = addTextObject( 43 * (e % 3), 27 * (pokemonRowHeight + 1), - `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatLargeNumber(enemy.level, 1000)}`, + `${i18next.t("saveSlotSelectUiHandler:lv")}${formatLargeNumber(enemy.level, 1000)}`, isBoss ? TextStyle.PARTY_RED : TextStyle.PARTY, { fontSize: "54px" }, ); @@ -606,9 +607,9 @@ export default class RunInfoUiHandler extends UiHandler { fontSize: "50px", lineSpacing: lineSpacing, }); - const runTime = Utils.getPlayTimeString(this.runInfo.playTime); + const runTime = getPlayTimeString(this.runInfo.playTime); runInfoText.appendText(`${i18next.t("runHistory:runLength")}: ${runTime}`, false); - const runMoney = Utils.formatMoney(globalScene.moneyFormat, this.runInfo.money); + const runMoney = formatMoney(globalScene.moneyFormat, this.runInfo.money); const moneyTextColor = getTextColor(TextStyle.MONEY_WINDOW, false, globalScene.uiTheme); runInfoText.appendText( `[color=${moneyTextColor}]${i18next.t("battleScene:moneyOwned", { formattedMoney: runMoney })}[/color]`, @@ -770,7 +771,7 @@ export default class RunInfoUiHandler extends UiHandler { lineSpacing: lineSpacing, }); pokeInfoText.appendText( - `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatFancyLargeNumber(pokemon.level, 1)} - ${pNatureName}`, + `${i18next.t("saveSlotSelectUiHandler:lv")}${formatFancyLargeNumber(pokemon.level, 1)} - ${pNatureName}`, ); pokeInfoText.appendText(pAbilityInfo); pokeInfoText.appendText(pPassiveInfo); @@ -780,7 +781,7 @@ export default class RunInfoUiHandler extends UiHandler { // Colored Arrows (Red/Blue) are placed by stats that are boosted from natures const pokeStatTextContainer = globalScene.add.container(-35, 6); const pStats: string[] = []; - pokemon.stats.forEach(element => pStats.push(Utils.formatFancyLargeNumber(element, 1))); + pokemon.stats.forEach(element => pStats.push(formatFancyLargeNumber(element, 1))); for (let i = 0; i < pStats.length; i++) { const isMult = getNatureStatMultiplier(pNature, i); pStats[i] = isMult < 1 ? pStats[i] + "[color=#40c8f8]↓[/color]" : pStats[i]; diff --git a/src/ui/save-slot-select-ui-handler.ts b/src/ui/save-slot-select-ui-handler.ts index a1e9e5219b4..0c16e41bbef 100644 --- a/src/ui/save-slot-select-ui-handler.ts +++ b/src/ui/save-slot-select-ui-handler.ts @@ -2,10 +2,11 @@ import i18next from "i18next"; import { globalScene } from "#app/global-scene"; import { Button } from "#enums/buttons"; import { GameMode } from "../game-mode"; -import * as Modifier from "../modifier/modifier"; +// biome-ignore lint/style/noNamespaceImport: See `src/system/game-data.ts` +import * as Modifier from "#app/modifier/modifier"; import type { SessionSaveData } from "../system/game-data"; import type PokemonData from "../system/pokemon-data"; -import * as Utils from "../utils"; +import { isNullOrUndefined, fixedInt, getPlayTimeString, formatLargeNumber } from "#app/utils"; import MessageUiHandler from "./message-ui-handler"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; @@ -296,7 +297,7 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { } this.setArrowVisibility(hasData); } - if (!Utils.isNullOrUndefined(prevSlotIndex)) { + if (!isNullOrUndefined(prevSlotIndex)) { this.revertSessionSlot(prevSlotIndex); } @@ -339,7 +340,7 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { globalScene.tweens.add({ targets: this.sessionSlotsContainer, y: this.sessionSlotsContainerInitialY - 56 * scrollCursor, - duration: Utils.fixedInt(325), + duration: fixedInt(325), ease: "Sine.easeInOut", }); } @@ -407,7 +408,7 @@ class SessionSlot extends Phaser.GameObjects.Container { const timestampLabel = addTextObject(8, 19, new Date(data.timestamp).toLocaleString(), TextStyle.WINDOW); this.add(timestampLabel); - const playTimeLabel = addTextObject(8, 33, Utils.getPlayTimeString(data.playTime), TextStyle.WINDOW); + const playTimeLabel = addTextObject(8, 33, getPlayTimeString(data.playTime), TextStyle.WINDOW); this.add(playTimeLabel); const pokemonIconsContainer = globalScene.add.container(144, 4); @@ -421,7 +422,7 @@ class SessionSlot extends Phaser.GameObjects.Container { const text = addTextObject( 32, 20, - `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatLargeNumber(pokemon.level, 1000)}`, + `${i18next.t("saveSlotSelectUiHandler:lv")}${formatLargeNumber(pokemon.level, 1000)}`, TextStyle.PARTY, { fontSize: "54px", color: "#f8f8f8" }, ); diff --git a/src/ui/saving-icon-handler.ts b/src/ui/saving-icon-handler.ts index 4404ea423b1..3db84f128a1 100644 --- a/src/ui/saving-icon-handler.ts +++ b/src/ui/saving-icon-handler.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import * as Utils from "../utils"; +import { fixedInt } from "#app/utils"; export default class SavingIconHandler extends Phaser.GameObjects.Container { private icon: Phaser.GameObjects.Sprite; @@ -36,10 +36,10 @@ export default class SavingIconHandler extends Phaser.GameObjects.Container { globalScene.tweens.add({ targets: this, alpha: 1, - duration: Utils.fixedInt(250), + duration: fixedInt(250), ease: "Sine.easeInOut", onComplete: () => { - globalScene.time.delayedCall(Utils.fixedInt(500), () => { + globalScene.time.delayedCall(fixedInt(500), () => { this.animActive = false; if (!this.shown) { this.hide(); @@ -64,7 +64,7 @@ export default class SavingIconHandler extends Phaser.GameObjects.Container { globalScene.tweens.add({ targets: this, alpha: 0, - duration: Utils.fixedInt(250), + duration: fixedInt(250), ease: "Sine.easeInOut", onComplete: () => { this.animActive = false; diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 3876f2585db..3e2940f45b9 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -43,7 +43,7 @@ import { Egg } from "#app/data/egg"; import Overrides from "#app/overrides"; import { SettingKeyboard } from "#app/system/settings/settings-keyboard"; import { Passive as PassiveAttr } from "#enums/passive"; -import * as Challenge from "#app/data/challenge"; +import { applyChallenges, ChallengeType } from "#app/data/challenge"; import MoveInfoOverlay from "#app/ui/move-info-overlay"; import { getEggTierForSpecies } from "#app/data/egg"; import { Device } from "#enums/devices"; @@ -78,7 +78,6 @@ import { import type { Nature } from "#enums/nature"; import { PLAYER_PARTY_MAX_SIZE } from "#app/constants"; import { achvs } from "#app/system/achv"; -import * as Utils from "../utils"; import type { GameObjects } from "phaser"; import { checkStarterValidForChallenge } from "#app/data/challenge"; @@ -2518,7 +2517,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { case Button.CYCLE_TERA: if (this.canCycleTera) { const speciesForm = getPokemonSpeciesForm(this.lastSpecies.speciesId, starterAttributes.form ?? 0); - if (speciesForm.type1 === this.teraCursor && !Utils.isNullOrUndefined(speciesForm.type2)) { + if (speciesForm.type1 === this.teraCursor && !isNullOrUndefined(speciesForm.type2)) { starterAttributes.tera = speciesForm.type2!; this.setSpeciesDetails(this.lastSpecies, { teraType: speciesForm.type2!, @@ -2960,7 +2959,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { valueLimit.value = 10; } - Challenge.applyChallenges(Challenge.ChallengeType.STARTER_POINTS, valueLimit); + applyChallenges(ChallengeType.STARTER_POINTS, valueLimit); return valueLimit.value; } @@ -3748,7 +3747,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { ); // TODO: is this bang correct? this.abilityCursor = abilityIndex !== undefined ? abilityIndex : (abilityIndex = oldAbilityIndex); this.natureCursor = natureIndex !== undefined ? natureIndex : (natureIndex = oldNatureIndex); - this.teraCursor = !Utils.isNullOrUndefined(teraType) ? teraType : (teraType = species.type1); + this.teraCursor = !isNullOrUndefined(teraType) ? teraType : (teraType = species.type1); const [isInParty, partyIndex]: [boolean, number] = this.isInParty(species); // we use this to firstly check if the pokemon is in the party, and if so, to get the party index in order to update the icon image if (isInParty) { this.updatePartyIcon(species, partyIndex); @@ -3886,7 +3885,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.canCycleTera = !this.statsMode && globalScene.gameData.achvUnlocks.hasOwnProperty(achvs.TERASTALLIZE.id) && - !Utils.isNullOrUndefined(getPokemonSpeciesForm(species.speciesId, formIndex ?? 0).type2); + !isNullOrUndefined(getPokemonSpeciesForm(species.speciesId, formIndex ?? 0).type2); } if (dexEntry.caughtAttr && species.malePercent !== null) { @@ -4483,7 +4482,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.canCycleTera = !this.statsMode && globalScene.gameData.achvUnlocks.hasOwnProperty(achvs.TERASTALLIZE.id) && - !Utils.isNullOrUndefined(getPokemonSpeciesForm(this.lastSpecies.speciesId, formIndex ?? 0).type2); + !isNullOrUndefined(getPokemonSpeciesForm(this.lastSpecies.speciesId, formIndex ?? 0).type2); this.updateInstructions(); } } diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index aa3d014bd95..1e0924aa2c5 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -2,7 +2,16 @@ import { starterColors } from "#app/battle-scene"; import { globalScene } from "#app/global-scene"; import { Mode } from "#app/ui/ui"; import UiHandler from "#app/ui/ui-handler"; -import * as Utils from "#app/utils"; +import { + getLocalizedSpriteKey, + rgbHexToRgba, + padInt, + getEnumValues, + fixedInt, + isNullOrUndefined, + toReadableString, + formatStat, +} from "#app/utils"; import type { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; import { getStarterValueFriendshipCap, speciesStarterCosts } from "#app/data/balance/starters"; import { argbFromRgba } from "@material/material-color-utilities"; @@ -255,7 +264,7 @@ export default class SummaryUiHandler extends UiHandler { this.statusContainer.add(statusLabel); - this.status = globalScene.add.sprite(91, 4, Utils.getLocalizedSpriteKey("statuses")); + this.status = globalScene.add.sprite(91, 4, getLocalizedSpriteKey("statuses")); this.status.setOrigin(0.5, 0); this.statusContainer.add(this.status); @@ -330,10 +339,10 @@ export default class SummaryUiHandler extends UiHandler { this.shinyOverlay.setVisible(this.pokemon.isShiny()); const colorScheme = starterColors[this.pokemon.species.getRootSpeciesId()]; - this.candyIcon.setTint(argbFromRgba(Utils.rgbHexToRgba(colorScheme[0]))); - this.candyOverlay.setTint(argbFromRgba(Utils.rgbHexToRgba(colorScheme[1]))); + this.candyIcon.setTint(argbFromRgba(rgbHexToRgba(colorScheme[0]))); + this.candyOverlay.setTint(argbFromRgba(rgbHexToRgba(colorScheme[1]))); - this.numberText.setText(Utils.padInt(this.pokemon.species.speciesId, 4)); + this.numberText.setText(padInt(this.pokemon.species.speciesId, 4)); this.numberText.setColor(this.getTextColor(!this.pokemon.isShiny() ? TextStyle.SUMMARY : TextStyle.SUMMARY_GOLD)); this.numberText.setShadowColor( this.getTextColor(!this.pokemon.isShiny() ? TextStyle.SUMMARY : TextStyle.SUMMARY_GOLD, true), @@ -600,7 +609,7 @@ export default class SummaryUiHandler extends UiHandler { } success = true; } else { - const pages = Utils.getEnumValues(Page); + const pages = getEnumValues(Page); switch (button) { case Button.UP: case Button.DOWN: { @@ -675,10 +684,10 @@ export default class SummaryUiHandler extends UiHandler { if (moveDescriptionLineCount > 3) { this.descriptionScrollTween = globalScene.tweens.add({ targets: this.moveDescriptionText, - delay: Utils.fixedInt(2000), + delay: fixedInt(2000), loop: -1, - hold: Utils.fixedInt(2000), - duration: Utils.fixedInt((moveDescriptionLineCount - 3) * 2000), + hold: fixedInt(2000), + duration: fixedInt((moveDescriptionLineCount - 3) * 2000), y: `-=${14.83 * (moveDescriptionLineCount - 3)}`, }); } @@ -697,10 +706,10 @@ export default class SummaryUiHandler extends UiHandler { this.moveCursorObj.setVisible(true); this.moveCursorBlinkTimer = globalScene.time.addEvent({ loop: true, - delay: Utils.fixedInt(600), + delay: fixedInt(600), callback: () => { this.moveCursorObj?.setVisible(false); - globalScene.time.delayedCall(Utils.fixedInt(100), () => { + globalScene.time.delayedCall(fixedInt(100), () => { if (!this.moveCursorObj) { return; } @@ -818,7 +827,7 @@ export default class SummaryUiHandler extends UiHandler { const getTypeIcon = (index: number, type: PokemonType, tera = false) => { const xCoord = typeLabel.width * typeLabel.scale + 9 + 34 * index; const typeIcon = !tera - ? globalScene.add.sprite(xCoord, 42, Utils.getLocalizedSpriteKey("types"), PokemonType[type].toLowerCase()) + ? globalScene.add.sprite(xCoord, 42, getLocalizedSpriteKey("types"), PokemonType[type].toLowerCase()) : globalScene.add.sprite(xCoord, 42, "type_tera"); if (tera) { typeIcon.setScale(0.5); @@ -853,7 +862,7 @@ export default class SummaryUiHandler extends UiHandler { if ( globalScene.gameData.achvUnlocks.hasOwnProperty(achvs.TERASTALLIZE.id) && - !Utils.isNullOrUndefined(this.pokemon) + !isNullOrUndefined(this.pokemon) ) { const teraIcon = globalScene.add.sprite(123, 26, "button_tera"); teraIcon.setName("terrastallize-icon"); @@ -925,10 +934,10 @@ export default class SummaryUiHandler extends UiHandler { abilityInfo.descriptionText.setY(69); this.descriptionScrollTween = globalScene.tweens.add({ targets: abilityInfo.descriptionText, - delay: Utils.fixedInt(2000), + delay: fixedInt(2000), loop: -1, - hold: Utils.fixedInt(2000), - duration: Utils.fixedInt((abilityDescriptionLineCount - 2) * 2000), + hold: fixedInt(2000), + duration: fixedInt((abilityDescriptionLineCount - 2) * 2000), y: `-=${14.83 * (abilityDescriptionLineCount - 2)}`, }); } @@ -939,8 +948,8 @@ export default class SummaryUiHandler extends UiHandler { this.passiveContainer?.descriptionText?.setVisible(false); const closeFragment = getBBCodeFrag("", TextStyle.WINDOW_ALT); - const rawNature = Utils.toReadableString(Nature[this.pokemon?.getNature()!]); // TODO: is this bang correct? - const nature = `${getBBCodeFrag(Utils.toReadableString(getNatureName(this.pokemon?.getNature()!)), TextStyle.SUMMARY_RED)}${closeFragment}`; // TODO: is this bang correct? + const rawNature = toReadableString(Nature[this.pokemon?.getNature()!]); // TODO: is this bang correct? + const nature = `${getBBCodeFrag(toReadableString(getNatureName(this.pokemon?.getNature()!)), TextStyle.SUMMARY_RED)}${closeFragment}`; // TODO: is this bang correct? const memoString = i18next.t("pokemonSummary:memoString", { metFragment: i18next.t( @@ -999,8 +1008,8 @@ export default class SummaryUiHandler extends UiHandler { const statValueText = stat !== Stat.HP - ? Utils.formatStat(this.pokemon?.getStat(stat)!) // TODO: is this bang correct? - : `${Utils.formatStat(this.pokemon?.hp!, true)}/${Utils.formatStat(this.pokemon?.getMaxHp()!, true)}`; // TODO: are those bangs correct? + ? formatStat(this.pokemon?.getStat(stat)!) // TODO: is this bang correct? + : `${formatStat(this.pokemon?.hp!, true)}/${formatStat(this.pokemon?.getMaxHp()!, true)}`; // TODO: are those bangs correct? const ivText = `${this.pokemon?.ivs[stat]}/31`; const statValue = addTextObject(93 + 88 * colIndex, 16 * rowIndex, statValueText, TextStyle.WINDOW_ALT); @@ -1106,7 +1115,7 @@ export default class SummaryUiHandler extends UiHandler { this.extraMoveRowContainer.setVisible(true); if (this.newMove && this.pokemon) { - const spriteKey = Utils.getLocalizedSpriteKey("types"); + const spriteKey = getLocalizedSpriteKey("types"); const moveType = this.pokemon.getMoveType(this.newMove); const newMoveTypeIcon = globalScene.add.sprite(0, 0, spriteKey, PokemonType[moveType].toLowerCase()); newMoveTypeIcon.setOrigin(0, 1); @@ -1116,7 +1125,7 @@ export default class SummaryUiHandler extends UiHandler { ppOverlay.setOrigin(0, 1); this.extraMoveRowContainer.add(ppOverlay); - const pp = Utils.padInt(this.newMove?.pp!, 2, " "); // TODO: is this bang correct? + const pp = padInt(this.newMove?.pp!, 2, " "); // TODO: is this bang correct? const ppText = addTextObject(173, 1, `${pp}/${pp}`, TextStyle.WINDOW); ppText.setOrigin(0, 1); this.extraMoveRowContainer.add(ppText); @@ -1132,7 +1141,7 @@ export default class SummaryUiHandler extends UiHandler { this.moveRowsContainer.add(moveRowContainer); if (move && this.pokemon) { - const spriteKey = Utils.getLocalizedSpriteKey("types"); + const spriteKey = getLocalizedSpriteKey("types"); const moveType = this.pokemon.getMoveType(move.getMove()); const typeIcon = globalScene.add.sprite(0, 0, spriteKey, PokemonType[moveType].toLowerCase()); typeIcon.setOrigin(0, 1); @@ -1153,7 +1162,7 @@ export default class SummaryUiHandler extends UiHandler { if (move) { const maxPP = move.getMovePp(); const pp = maxPP - move.ppUsed; - ppText.setText(`${Utils.padInt(pp, 2, " ")}/${Utils.padInt(maxPP, 2, " ")}`); + ppText.setText(`${padInt(pp, 2, " ")}/${padInt(maxPP, 2, " ")}`); } moveRowContainer.add(ppText); diff --git a/src/ui/target-select-ui-handler.ts b/src/ui/target-select-ui-handler.ts index d2f72ef4a4c..a9f88b337f3 100644 --- a/src/ui/target-select-ui-handler.ts +++ b/src/ui/target-select-ui-handler.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "../battle"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; -import * as Utils from "../utils"; +import { isNullOrUndefined, fixedInt } from "#app/utils"; import { getMoveTargets } from "../data/moves/move"; import { Button } from "#enums/buttons"; import type { Moves } from "#enums/moves"; @@ -70,7 +70,7 @@ export default class TargetSelectUiHandler extends UiHandler { * @param user the Pokemon using the move */ resetCursor(cursorN: number, user: Pokemon): void { - if (!Utils.isNullOrUndefined(cursorN)) { + if (!isNullOrUndefined(cursorN)) { if ([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2].includes(cursorN) || user.battleSummonData.waveTurnCount === 1) { // Reset cursor on the first turn of a fight or if an ally was targeted last turn cursorN = -1; @@ -89,11 +89,11 @@ export default class TargetSelectUiHandler extends UiHandler { this.targetSelectCallback(button === Button.ACTION ? targetIndexes : []); success = true; if (this.fieldIndex === BattlerIndex.PLAYER) { - if (Utils.isNullOrUndefined(this.cursor0) || this.cursor0 !== this.cursor) { + if (isNullOrUndefined(this.cursor0) || this.cursor0 !== this.cursor) { this.cursor0 = this.cursor; } } else if (this.fieldIndex === BattlerIndex.PLAYER_2) { - if (Utils.isNullOrUndefined(this.cursor1) || this.cursor1 !== this.cursor) { + if (isNullOrUndefined(this.cursor1) || this.cursor1 !== this.cursor) { this.cursor1 = this.cursor; } } @@ -152,7 +152,7 @@ export default class TargetSelectUiHandler extends UiHandler { key: { start: 1, to: 0.25 }, loop: -1, loopDelay: 150, - duration: Utils.fixedInt(450), + duration: fixedInt(450), ease: "Sine.easeInOut", yoyo: true, onUpdate: t => { @@ -178,7 +178,7 @@ export default class TargetSelectUiHandler extends UiHandler { targets: [info], y: { start: info.getBaseY(), to: info.getBaseY() + 1 }, loop: -1, - duration: Utils.fixedInt(250), + duration: fixedInt(250), ease: "Linear", yoyo: true, }), diff --git a/src/ui/time-of-day-widget.ts b/src/ui/time-of-day-widget.ts index bda1f750cb1..5e42e6215f8 100644 --- a/src/ui/time-of-day-widget.ts +++ b/src/ui/time-of-day-widget.ts @@ -1,4 +1,4 @@ -import * as Utils from "../utils"; +import { fixedInt } from "#app/utils"; import { globalScene } from "#app/global-scene"; import { BattleSceneEventType } from "../events/battle-scene"; import { EaseType } from "#enums/ease-type"; @@ -75,14 +75,14 @@ export default class TimeOfDayWidget extends Phaser.GameObjects.Container { const rotate = { targets: [this.timeOfDayIconMgs[0], this.timeOfDayIconMgs[1]], angle: "+=90", - duration: Utils.fixedInt(1500), + duration: fixedInt(1500), ease: "Back.easeOut", paused: !this.parentVisible, }; const fade = { targets: [this.timeOfDayIconBgs[1], this.timeOfDayIconMgs[1], this.timeOfDayIconFgs[1]], alpha: 0, - duration: Utils.fixedInt(500), + duration: fixedInt(500), ease: "Linear", paused: !this.parentVisible, }; @@ -98,14 +98,14 @@ export default class TimeOfDayWidget extends Phaser.GameObjects.Container { const bounce = { targets: [this.timeOfDayIconMgs[0], this.timeOfDayIconMgs[1]], angle: "+=90", - duration: Utils.fixedInt(2000), + duration: fixedInt(2000), ease: "Bounce.easeOut", paused: !this.parentVisible, }; const fade = { targets: [this.timeOfDayIconBgs[1], this.timeOfDayIconMgs[1], this.timeOfDayIconFgs[1]], alpha: 0, - duration: Utils.fixedInt(800), + duration: fixedInt(800), ease: "Linear", paused: !this.parentVisible, }; diff --git a/src/ui/title-ui-handler.ts b/src/ui/title-ui-handler.ts index d87d4e5ca79..405e3cc4a27 100644 --- a/src/ui/title-ui-handler.ts +++ b/src/ui/title-ui-handler.ts @@ -1,6 +1,6 @@ import OptionSelectUiHandler from "./settings/option-select-ui-handler"; import { Mode } from "./ui"; -import * as Utils from "../utils"; +import { fixedInt, randInt, randItem } from "#app/utils"; import { TextStyle, addTextObject } from "./text"; import { getSplashMessages } from "../data/splash-messages"; import i18next from "i18next"; @@ -72,7 +72,7 @@ export default class TitleUiHandler extends OptionSelectUiHandler { globalScene.tweens.add({ targets: this.splashMessageText, - duration: Utils.fixedInt(350), + duration: fixedInt(350), scale: originalSplashMessageScale * 1.25, loop: -1, yoyo: true, @@ -104,7 +104,7 @@ export default class TitleUiHandler extends OptionSelectUiHandler { /** Used solely to display a random Pokémon name in a splash message. */ randomPokemon(): void { - const rand = Utils.randInt(1025, 1); + const rand = randInt(1025, 1); const pokemon = getPokemonSpecies(rand as Species); if ( this.splashMessage === "splashMessages:underratedPokemon" || @@ -132,7 +132,7 @@ export default class TitleUiHandler extends OptionSelectUiHandler { // Moving player count to top of the menu this.playerCountLabel.setY(globalScene.game.canvas.height / 6 - 13 - this.getWindowHeight()); - this.splashMessage = Utils.randItem(getSplashMessages()); + this.splashMessage = randItem(getSplashMessages()); this.splashMessageText.setText( i18next.t(this.splashMessage, { count: TitleUiHandler.BATTLES_WON_FALLBACK, @@ -159,7 +159,7 @@ export default class TitleUiHandler extends OptionSelectUiHandler { globalScene.tweens.add({ targets: [this.titleContainer, ui.getMessageHandler().bg], - duration: Utils.fixedInt(325), + duration: fixedInt(325), alpha: (target: any) => (target === this.titleContainer ? 1 : 0), ease: "Sine.easeInOut", }); @@ -180,7 +180,7 @@ export default class TitleUiHandler extends OptionSelectUiHandler { globalScene.tweens.add({ targets: [this.titleContainer, ui.getMessageHandler().bg], - duration: Utils.fixedInt(325), + duration: fixedInt(325), alpha: (target: any) => (target === this.titleContainer ? 0 : 1), ease: "Sine.easeInOut", }); diff --git a/src/ui/ui.ts b/src/ui/ui.ts index 6605e5ef730..c7981cd5fba 100644 --- a/src/ui/ui.ts +++ b/src/ui/ui.ts @@ -28,7 +28,7 @@ import { addWindow } from "./ui-theme"; import LoginFormUiHandler from "./login-form-ui-handler"; import RegistrationFormUiHandler from "./registration-form-ui-handler"; import LoadingModalUiHandler from "./loading-modal-ui-handler"; -import * as Utils from "../utils"; +import { executeIf } from "#app/utils"; import GameStatsUiHandler from "./game-stats-ui-handler"; import AwaitableUiHandler from "./awaitable-ui-handler"; import SaveSlotSelectUiHandler from "./save-slot-select-ui-handler"; @@ -674,7 +674,7 @@ export default class UI extends Phaser.GameObjects.Container { if (!this?.modeChain?.length) { return resolve(); } - this.revertMode().then(success => Utils.executeIf(success, this.revertModes).then(() => resolve())); + this.revertMode().then(success => executeIf(success, this.revertModes).then(() => resolve())); }); } diff --git a/src/ui/unavailable-modal-ui-handler.ts b/src/ui/unavailable-modal-ui-handler.ts index 3007f7247f1..01ed850f6d0 100644 --- a/src/ui/unavailable-modal-ui-handler.ts +++ b/src/ui/unavailable-modal-ui-handler.ts @@ -3,7 +3,7 @@ import { ModalUiHandler } from "./modal-ui-handler"; import { addTextObject, TextStyle } from "./text"; import type { Mode } from "./ui"; import { updateUserInfo } from "#app/account"; -import * as Utils from "#app/utils"; +import { removeCookie, sessionIdKey } from "#app/utils"; import i18next from "i18next"; import { globalScene } from "#app/global-scene"; @@ -65,7 +65,7 @@ export default class UnavailableModalUiHandler extends ModalUiHandler { globalScene.playSound("se/pb_bounce_1"); this.reconnectCallback(); } else if (response[1] === 401) { - Utils.removeCookie(Utils.sessionIdKey); + removeCookie(sessionIdKey); globalScene.reset(true, true); } else { this.reconnectDuration = Math.min(this.reconnectDuration * 2, this.maxTime); // Set a max delay so it isn't infinite diff --git a/test/escape-calculations.test.ts b/test/escape-calculations.test.ts index 0cbf11dd230..b4504c7359c 100644 --- a/test/escape-calculations.test.ts +++ b/test/escape-calculations.test.ts @@ -1,7 +1,7 @@ import { AttemptRunPhase } from "#app/phases/attempt-run-phase"; import type { CommandPhase } from "#app/phases/command-phase"; import { Command } from "#app/ui/command-ui-handler"; -import * as Utils from "#app/utils"; +import { NumberHolder } from "#app/utils"; import { Abilities } from "#enums/abilities"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; @@ -45,7 +45,7 @@ describe("Escape chance calculations", () => { await game.phaseInterceptor.to(AttemptRunPhase, false); const phase = game.scene.getCurrentPhase() as AttemptRunPhase; - const escapePercentage = new Utils.NumberHolder(0); + const escapePercentage = new NumberHolder(0); // this sets up an object for multiple attempts. The pokemonSpeedRatio is your speed divided by the enemy speed, the escapeAttempts are the number of escape attempts and the expectedEscapeChance is the chance it should be escaping const escapeChances: { @@ -118,7 +118,7 @@ describe("Escape chance calculations", () => { await game.phaseInterceptor.to(AttemptRunPhase, false); const phase = game.scene.getCurrentPhase() as AttemptRunPhase; - const escapePercentage = new Utils.NumberHolder(0); + const escapePercentage = new NumberHolder(0); // this sets up an object for multiple attempts. The pokemonSpeedRatio is your speed divided by the enemy speed, the escapeAttempts are the number of escape attempts and the expectedEscapeChance is the chance it should be escaping const escapeChances: { @@ -197,7 +197,7 @@ describe("Escape chance calculations", () => { await game.phaseInterceptor.to(AttemptRunPhase, false); const phase = game.scene.getCurrentPhase() as AttemptRunPhase; - const escapePercentage = new Utils.NumberHolder(0); + const escapePercentage = new NumberHolder(0); // this sets up an object for multiple attempts. The pokemonSpeedRatio is your speed divided by the enemy speed, the escapeAttempts are the number of escape attempts and the expectedEscapeChance is the chance it should be escaping const escapeChances: { @@ -284,7 +284,7 @@ describe("Escape chance calculations", () => { await game.phaseInterceptor.to(AttemptRunPhase, false); const phase = game.scene.getCurrentPhase() as AttemptRunPhase; - const escapePercentage = new Utils.NumberHolder(0); + const escapePercentage = new NumberHolder(0); // this sets up an object for multiple attempts. The pokemonSpeedRatio is your speed divided by the enemy speed, the escapeAttempts are the number of escape attempts and the expectedEscapeChance is the chance it should be escaping const escapeChances: { diff --git a/test/items/exp_booster.test.ts b/test/items/exp_booster.test.ts index e4491b22637..2b1308f1afb 100644 --- a/test/items/exp_booster.test.ts +++ b/test/items/exp_booster.test.ts @@ -1,6 +1,6 @@ import { Abilities } from "#app/enums/abilities"; import { PokemonExpBoosterModifier } from "#app/modifier/modifier"; -import * as Utils from "#app/utils"; +import { NumberHolder } from "#app/utils"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -33,7 +33,7 @@ describe("EXP Modifier Items", () => { const partyMember = game.scene.getPlayerPokemon()!; partyMember.exp = 100; - const expHolder = new Utils.NumberHolder(partyMember.exp); + const expHolder = new NumberHolder(partyMember.exp); game.scene.applyModifiers(PokemonExpBoosterModifier, true, partyMember, expHolder); expect(expHolder.value).toBe(440); }, 20000); diff --git a/test/items/leek.test.ts b/test/items/leek.test.ts index ec4d075fe19..afb31a5f9fa 100644 --- a/test/items/leek.test.ts +++ b/test/items/leek.test.ts @@ -1,5 +1,5 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import * as Utils from "#app/utils"; +import { randInt } from "#app/utils"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; @@ -78,7 +78,7 @@ describe("Items - Leek", () => { // Randomly choose from the Farfetch'd line const species = [Species.FARFETCHD, Species.GALAR_FARFETCHD, Species.SIRFETCHD]; - await game.startBattle([species[Utils.randInt(species.length)], Species.PIKACHU]); + await game.startBattle([species[randInt(species.length)], Species.PIKACHU]); const [partyMember, ally] = game.scene.getPlayerParty(); @@ -106,7 +106,7 @@ describe("Items - Leek", () => { // Randomly choose from the Farfetch'd line const species = [Species.FARFETCHD, Species.GALAR_FARFETCHD, Species.SIRFETCHD]; - await game.startBattle([Species.PIKACHU, species[Utils.randInt(species.length)]]); + await game.startBattle([Species.PIKACHU, species[randInt(species.length)]]); const [partyMember, ally] = game.scene.getPlayerParty(); diff --git a/test/items/light_ball.test.ts b/test/items/light_ball.test.ts index e4959002904..1f5227142eb 100644 --- a/test/items/light_ball.test.ts +++ b/test/items/light_ball.test.ts @@ -2,7 +2,7 @@ import { Stat } from "#enums/stat"; import { SpeciesStatBoosterModifier } from "#app/modifier/modifier"; import { modifierTypes } from "#app/modifier/modifier-type"; import i18next from "#app/plugins/i18n"; -import * as Utils from "#app/utils"; +import { NumberHolder } from "#app/utils"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; @@ -90,9 +90,9 @@ describe("Items - Light Ball", () => { const spAtkStat = partyMember.getStat(Stat.SPATK); // Making sure modifier is not applied without holding item - const atkValue = new Utils.NumberHolder(atkStat); + const atkValue = new NumberHolder(atkStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, atkValue); - const spAtkValue = new Utils.NumberHolder(spAtkStat); + const spAtkValue = new NumberHolder(spAtkStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPDEF, spAtkValue); expect(atkValue.value / atkStat).toBe(1); @@ -129,9 +129,9 @@ describe("Items - Light Ball", () => { const spAtkStat = partyMember.getStat(Stat.SPATK); // Making sure modifier is not applied without holding item - const atkValue = new Utils.NumberHolder(atkStat); + const atkValue = new NumberHolder(atkStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, atkValue); - const spAtkValue = new Utils.NumberHolder(spAtkStat); + const spAtkValue = new NumberHolder(spAtkStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPDEF, spAtkValue); expect(atkValue.value / atkStat).toBe(1); @@ -168,9 +168,9 @@ describe("Items - Light Ball", () => { const spAtkStat = partyMember.getStat(Stat.SPATK); // Making sure modifier is not applied without holding item - const atkValue = new Utils.NumberHolder(atkStat); + const atkValue = new NumberHolder(atkStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, atkValue); - const spAtkValue = new Utils.NumberHolder(spAtkStat); + const spAtkValue = new NumberHolder(spAtkStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPDEF, spAtkValue); expect(atkValue.value / atkStat).toBe(1); @@ -197,9 +197,9 @@ describe("Items - Light Ball", () => { const spAtkStat = partyMember.getStat(Stat.SPATK); // Making sure modifier is not applied without holding item - const atkValue = new Utils.NumberHolder(atkStat); + const atkValue = new NumberHolder(atkStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, atkValue); - const spAtkValue = new Utils.NumberHolder(spAtkStat); + const spAtkValue = new NumberHolder(spAtkStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPDEF, spAtkValue); expect(atkValue.value / atkStat).toBe(1); diff --git a/test/items/metal_powder.test.ts b/test/items/metal_powder.test.ts index 460a95d0f06..ed96d3c498b 100644 --- a/test/items/metal_powder.test.ts +++ b/test/items/metal_powder.test.ts @@ -2,7 +2,7 @@ import { Stat } from "#enums/stat"; import { SpeciesStatBoosterModifier } from "#app/modifier/modifier"; import { modifierTypes } from "#app/modifier/modifier-type"; import i18next from "#app/plugins/i18n"; -import * as Utils from "#app/utils"; +import { NumberHolder } from "#app/utils"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; @@ -89,7 +89,7 @@ describe("Items - Metal Powder", () => { const defStat = partyMember.getStat(Stat.DEF); // Making sure modifier is not applied without holding item - const defValue = new Utils.NumberHolder(defStat); + const defValue = new NumberHolder(defStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); expect(defValue.value / defStat).toBe(1); @@ -122,7 +122,7 @@ describe("Items - Metal Powder", () => { const defStat = partyMember.getStat(Stat.DEF); // Making sure modifier is not applied without holding item - const defValue = new Utils.NumberHolder(defStat); + const defValue = new NumberHolder(defStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); expect(defValue.value / defStat).toBe(1); @@ -155,7 +155,7 @@ describe("Items - Metal Powder", () => { const defStat = partyMember.getStat(Stat.DEF); // Making sure modifier is not applied without holding item - const defValue = new Utils.NumberHolder(defStat); + const defValue = new NumberHolder(defStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); expect(defValue.value / defStat).toBe(1); @@ -178,7 +178,7 @@ describe("Items - Metal Powder", () => { const defStat = partyMember.getStat(Stat.DEF); // Making sure modifier is not applied without holding item - const defValue = new Utils.NumberHolder(defStat); + const defValue = new NumberHolder(defStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); expect(defValue.value / defStat).toBe(1); diff --git a/test/items/quick_powder.test.ts b/test/items/quick_powder.test.ts index 26faf5a0f4f..7115cad8cd1 100644 --- a/test/items/quick_powder.test.ts +++ b/test/items/quick_powder.test.ts @@ -2,7 +2,7 @@ import { Stat } from "#enums/stat"; import { SpeciesStatBoosterModifier } from "#app/modifier/modifier"; import { modifierTypes } from "#app/modifier/modifier-type"; import i18next from "#app/plugins/i18n"; -import * as Utils from "#app/utils"; +import { NumberHolder } from "#app/utils"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; @@ -89,7 +89,7 @@ describe("Items - Quick Powder", () => { const spdStat = partyMember.getStat(Stat.SPD); // Making sure modifier is not applied without holding item - const spdValue = new Utils.NumberHolder(spdStat); + const spdValue = new NumberHolder(spdStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); expect(spdValue.value / spdStat).toBe(1); @@ -122,7 +122,7 @@ describe("Items - Quick Powder", () => { const spdStat = partyMember.getStat(Stat.SPD); // Making sure modifier is not applied without holding item - const spdValue = new Utils.NumberHolder(spdStat); + const spdValue = new NumberHolder(spdStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); expect(spdValue.value / spdStat).toBe(1); @@ -155,7 +155,7 @@ describe("Items - Quick Powder", () => { const spdStat = partyMember.getStat(Stat.SPD); // Making sure modifier is not applied without holding item - const spdValue = new Utils.NumberHolder(spdStat); + const spdValue = new NumberHolder(spdStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); expect(spdValue.value / spdStat).toBe(1); @@ -178,7 +178,7 @@ describe("Items - Quick Powder", () => { const spdStat = partyMember.getStat(Stat.SPD); // Making sure modifier is not applied without holding item - const spdValue = new Utils.NumberHolder(spdStat); + const spdValue = new NumberHolder(spdStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); expect(spdValue.value / spdStat).toBe(1); diff --git a/test/items/thick_club.test.ts b/test/items/thick_club.test.ts index 9edbbcdc7d9..69ca316d455 100644 --- a/test/items/thick_club.test.ts +++ b/test/items/thick_club.test.ts @@ -2,7 +2,7 @@ import { Stat } from "#enums/stat"; import { SpeciesStatBoosterModifier } from "#app/modifier/modifier"; import { modifierTypes } from "#app/modifier/modifier-type"; import i18next from "#app/plugins/i18n"; -import * as Utils from "#app/utils"; +import { NumberHolder, randInt } from "#app/utils"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; @@ -89,7 +89,7 @@ describe("Items - Thick Club", () => { const atkStat = partyMember.getStat(Stat.ATK); // Making sure modifier is not applied without holding item - const atkValue = new Utils.NumberHolder(atkStat); + const atkValue = new NumberHolder(atkStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(1); @@ -112,7 +112,7 @@ describe("Items - Thick Club", () => { const atkStat = partyMember.getStat(Stat.ATK); // Making sure modifier is not applied without holding item - const atkValue = new Utils.NumberHolder(atkStat); + const atkValue = new NumberHolder(atkStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(1); @@ -135,7 +135,7 @@ describe("Items - Thick Club", () => { const atkStat = partyMember.getStat(Stat.ATK); // Making sure modifier is not applied without holding item - const atkValue = new Utils.NumberHolder(atkStat); + const atkValue = new NumberHolder(atkStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(1); @@ -153,7 +153,7 @@ describe("Items - Thick Club", () => { it("THICK_CLUB held by fused CUBONE line (base)", async () => { // Randomly choose from the Cubone line const species = [Species.CUBONE, Species.MAROWAK, Species.ALOLA_MAROWAK]; - const randSpecies = Utils.randInt(species.length); + const randSpecies = randInt(species.length); await game.classicMode.startBattle([species[randSpecies], Species.PIKACHU]); @@ -172,7 +172,7 @@ describe("Items - Thick Club", () => { const atkStat = partyMember.getStat(Stat.ATK); // Making sure modifier is not applied without holding item - const atkValue = new Utils.NumberHolder(atkStat); + const atkValue = new NumberHolder(atkStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(1); @@ -190,7 +190,7 @@ describe("Items - Thick Club", () => { it("THICK_CLUB held by fused CUBONE line (part)", async () => { // Randomly choose from the Cubone line const species = [Species.CUBONE, Species.MAROWAK, Species.ALOLA_MAROWAK]; - const randSpecies = Utils.randInt(species.length); + const randSpecies = randInt(species.length); await game.classicMode.startBattle([Species.PIKACHU, species[randSpecies]]); @@ -209,7 +209,7 @@ describe("Items - Thick Club", () => { const atkStat = partyMember.getStat(Stat.ATK); // Making sure modifier is not applied without holding item - const atkValue = new Utils.NumberHolder(atkStat); + const atkValue = new NumberHolder(atkStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(1); @@ -232,7 +232,7 @@ describe("Items - Thick Club", () => { const atkStat = partyMember.getStat(Stat.ATK); // Making sure modifier is not applied without holding item - const atkValue = new Utils.NumberHolder(atkStat); + const atkValue = new NumberHolder(atkStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(1); diff --git a/test/moves/multi_target.test.ts b/test/moves/multi_target.test.ts index 2b17929a5df..5d33c7860cb 100644 --- a/test/moves/multi_target.test.ts +++ b/test/moves/multi_target.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { Abilities } from "#app/enums/abilities"; import { Species } from "#app/enums/species"; -import * as Utils from "#app/utils"; +import { toDmgValue } from "#app/utils"; import { Moves } from "#enums/moves"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -71,8 +71,8 @@ describe("Multi-target damage reduction", () => { // Single target moves don't get reduced expect(tackle1).toBe(tackle2); // Moves that target all enemies get reduced if there's more than one enemy - expect(gleam1).toBeLessThanOrEqual(Utils.toDmgValue(gleam2 * 0.75) + 1); - expect(gleam1).toBeGreaterThanOrEqual(Utils.toDmgValue(gleam2 * 0.75) - 1); + expect(gleam1).toBeLessThanOrEqual(toDmgValue(gleam2 * 0.75) + 1); + expect(gleam1).toBeGreaterThanOrEqual(toDmgValue(gleam2 * 0.75) - 1); }); it("should reduce earthquake when more than one pokemon other than user is not fainted", async () => { @@ -122,7 +122,7 @@ describe("Multi-target damage reduction", () => { const damageEnemy1Turn3 = enemy1.getMaxHp() - enemy1.hp; // Turn 3: 1 target, should be no damage reduction - expect(damageEnemy1Turn1).toBeLessThanOrEqual(Utils.toDmgValue(damageEnemy1Turn3 * 0.75) + 1); - expect(damageEnemy1Turn1).toBeGreaterThanOrEqual(Utils.toDmgValue(damageEnemy1Turn3 * 0.75) - 1); + expect(damageEnemy1Turn1).toBeLessThanOrEqual(toDmgValue(damageEnemy1Turn3 * 0.75) + 1); + expect(damageEnemy1Turn1).toBeGreaterThanOrEqual(toDmgValue(damageEnemy1Turn3 * 0.75) - 1); }); }); diff --git a/test/mystery-encounter/encounter-test-utils.ts b/test/mystery-encounter/encounter-test-utils.ts index 8c54e0dd606..93629778e0a 100644 --- a/test/mystery-encounter/encounter-test-utils.ts +++ b/test/mystery-encounter/encounter-test-utils.ts @@ -1,3 +1,4 @@ +// biome-ignore lint/style/noNamespaceImport: Necessary for mocks import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { Status } from "#app/data/status-effect"; import { CommandPhase } from "#app/phases/command-phase"; diff --git a/test/testUtils/gameWrapper.ts b/test/testUtils/gameWrapper.ts index 388861e01c4..02865701ed0 100644 --- a/test/testUtils/gameWrapper.ts +++ b/test/testUtils/gameWrapper.ts @@ -2,7 +2,7 @@ import BattleScene, * as battleScene from "#app/battle-scene"; import { MoveAnim } from "#app/data/battle-anims"; import Pokemon from "#app/field/pokemon"; -import * as Utils from "#app/utils"; +import { setCookie, sessionIdKey } from "#app/utils"; import { blobToString } from "#test/testUtils/gameManagerUtils"; import { MockClock } from "#test/testUtils/mocks/mockClock"; import { MockFetch } from "#test/testUtils/mocks/mockFetch"; @@ -29,7 +29,7 @@ window.URL.createObjectURL = (blob: Blob) => { }; navigator.getGamepads = () => []; global.fetch = vi.fn(MockFetch); -Utils.setCookie(Utils.sessionIdKey, "fake_token"); +setCookie(sessionIdKey, "fake_token"); window.matchMedia = () => ({ matches: false, From f9ff4abfb0396da1ed74882343e22081c5924599 Mon Sep 17 00:00:00 2001 From: Jimmybald1 <122436263+Jimmybald1@users.noreply.github.com> Date: Sat, 12 Apr 2025 16:56:04 +0200 Subject: [PATCH 019/262] [Bug] Fixed biome map options counting rng twice (#5648) Fixed biome map options counting rng twice Co-authored-by: Jimmybald1 <147992650+IBBCalc@users.noreply.github.com> Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> --- src/phases/select-biome-phase.ts | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/phases/select-biome-phase.ts b/src/phases/select-biome-phase.ts index de705728c50..b27e2d0e7cc 100644 --- a/src/phases/select-biome-phase.ts +++ b/src/phases/select-biome-phase.ts @@ -38,15 +38,7 @@ export class SelectBiomePhase extends BattlePhase { .map(b => (!Array.isArray(b) ? b : b[0])); if (biomes.length > 1 && globalScene.findModifier(m => m instanceof MapModifier)) { - const biomeChoices: Biome[] = ( - !Array.isArray(biomeLinks[currentBiome]) - ? [biomeLinks[currentBiome] as Biome] - : (biomeLinks[currentBiome] as (Biome | [Biome, number])[]) - ) - .filter(b => !Array.isArray(b) || !randSeedInt(b[1])) - .map(b => (Array.isArray(b) ? b[0] : b)); - - const biomeSelectItems = biomeChoices.map(b => { + const biomeSelectItems = biomes.map(b => { const ret: OptionSelectItem = { label: getBiomeName(b), handler: () => { From 15e535a1a0e4328e0c6998f6008b656387fc2dfa Mon Sep 17 00:00:00 2001 From: Lylian BALL <131535108+PyGaVS@users.noreply.github.com> Date: Sun, 13 Apr 2025 03:22:04 +0200 Subject: [PATCH 020/262] [Ability] Implement Illusion (#3273) * implement illusion ability with unit test and localizations * try removing whitespace change on unnecessary files * nit corrections * nit update src/field/pokemon.ts Co-authored-by: Adrian T. <68144167+torranx@users.noreply.github.com> * nit update src/phases.ts Co-authored-by: Amani H. <109637146+xsn34kzx@users.noreply.github.com> * illusion test correction * unexpected error correction * refactor property pokemon.illusion to pokemon.battleData.illusion * nit * nit * update unit test up-to-date * add docs * merge up to date * bugfix * bugfix * merge up to date * refactor field illusion out of battleData * fix nit * fix nit * Zoroark change illusion after lastPokemon update * Zoroark change illusion after lastPokemon update * refactor bug fix * bugfix * bug fix on tests * Update src/field/pokemon.ts Co-authored-by: innerthunder <168692175+innerthunder@users.noreply.github.com> * use GetFailedText * remove useless import * add condition 'no illusion' into transform move * wild Zoroark creates an illusion according to the current biome * wild Zoroark creates an illusion according to the current biome * delete console.log() * add doc * Update src/field/pokemon.ts Co-authored-by: innerthunder <168692175+innerthunder@users.noreply.github.com> * fix tests * update locales submodule * update Illusion interface * bug fix * bug fix * bugfix * rename some params for future implementations * Zoroark keep illusion between battles * Zoroark keep illusion between battles * delete draft * merge up-to-date * bugfix * merge * merge * implement canApplyPresummon method * Update test/abilities/illusion.test.ts Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> * Update src/data/ability.ts Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> * Update src/data/ability.ts Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> * Update test/abilities/illusion.test.ts Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> * Update test/abilities/illusion.test.ts Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> * nit * review corrections * nit * type hints affected by enemy illusion * type hints affected by enemy illusionin fight-ui-handler * nit * rename some parameters back in useIllusion * Update src/field/pokemon.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/field/pokemon.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * refactor battleData.illusion as summonData.illusion and delete oncePerBattleClause * add comments * illusion will break before evolution * Update src/field/pokemon.ts Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> * Update src/data/ability.ts Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> * Update src/data/ability.ts Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> * Update src/data/ability.ts Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> * Update src/data/ability.ts Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> * bug fix * g * get submodule back * get submodule back * bug fix to save illusion status * add pokemon.getPokeball() * Update src/field/pokemon.ts Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> * Update src/field/pokemon.ts Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> * Update src/field/pokemon.ts Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> * Update src/data/ability.ts Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> * Update src/field/pokemon.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/field/pokemon.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/field/pokemon.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/field/pokemon.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --------- Co-authored-by: Adrian T. <68144167+torranx@users.noreply.github.com> Co-authored-by: Amani H. <109637146+xsn34kzx@users.noreply.github.com> Co-authored-by: innerthunder <168692175+innerthunder@users.noreply.github.com> Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/battle-scene.ts | 2 +- src/data/ability.ts | 135 +++++++- src/data/moves/move.ts | 10 +- src/field/pokemon.ts | 495 ++++++++++++++++++++++-------- src/messages.ts | 17 +- src/phases/encounter-phase.ts | 7 +- src/phases/level-up-phase.ts | 1 + src/phases/summon-phase.ts | 14 +- src/phases/switch-summon-phase.ts | 11 +- src/system/game-data.ts | 4 +- src/system/pokemon-data.ts | 18 +- src/ui/battle-info.ts | 28 +- src/ui/fight-ui-handler.ts | 5 +- src/ui/party-ui-handler.ts | 38 +-- src/ui/rename-form-ui-handler.ts | 2 +- src/ui/summary-ui-handler.ts | 24 +- test/abilities/illusion.test.ts | 144 +++++++++ 17 files changed, 757 insertions(+), 198 deletions(-) create mode 100644 test/abilities/illusion.test.ts diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 8ae2be5af43..dd983f2b397 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1072,7 +1072,7 @@ export default class BattleScene extends SceneBase { container.add(icon); - if (pokemon.isFusion()) { + if (pokemon.isFusion(true)) { const fusionIcon = this.add.sprite(0, 0, pokemon.getFusionIconAtlasKey(ignoreOverride)); fusionIcon.setName("sprite-fusion-icon"); fusionIcon.setOrigin(0.5, 0); diff --git a/src/data/ability.ts b/src/data/ability.ts index b07f13c18e9..3e32a624f9f 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -2370,6 +2370,18 @@ export class PostSummonMessageAbAttr extends PostSummonAbAttr { } } +/** + * Removes illusions when a Pokemon is summoned. + */ +export class PostSummonRemoveIllusionAbAttr extends PostSummonAbAttr { + applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + for (const pokemon of globalScene.getField(true)) { + pokemon.breakIllusion(); + } + return true; + } +} + export class PostSummonUnnamedMessageAbAttr extends PostSummonAbAttr { //Attr doesn't force pokemon name on the message private message: string; @@ -2812,7 +2824,7 @@ export class PostSummonTransformAbAttr extends PostSummonAbAttr { } private getTarget(targets: Pokemon[]): Pokemon { - let target: Pokemon; + let target: Pokemon = targets[0]; if (targets.length > 1) { globalScene.executeWithSeedOffset(() => { // in a double battle, if one of the opposing pokemon is fused the other one will be chosen @@ -2829,6 +2841,7 @@ export class PostSummonTransformAbAttr extends PostSummonAbAttr { } else { target = targets[0]; } + target = target!; return target; @@ -2836,6 +2849,12 @@ export class PostSummonTransformAbAttr extends PostSummonAbAttr { override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { const targets = pokemon.getOpponents(); + const target = this.getTarget(targets); + + if (!!target.summonData?.illusion) { + return false; + } + if (simulated || !targets.length) { return simulated; } @@ -4741,8 +4760,8 @@ export class MaxMultiHitAbAttr extends AbAttr { } export class PostBattleAbAttr extends AbAttr { - constructor() { - super(true); + constructor(showAbility: boolean = true) { + super(showAbility); } canApplyPostBattle(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { @@ -5259,6 +5278,92 @@ export class FormBlockDamageAbAttr extends ReceivedMoveDamageMultiplierAbAttr { } } +/** + * Base class for defining {@linkcode Ability} attributes before summon + * (should use {@linkcode PostSummonAbAttr} for most ability) + * @see {@linkcode applyPreSummon()} + */ +export class PreSummonAbAttr extends AbAttr { + applyPreSummon(pokemon: Pokemon, passive: boolean, args: any[]): void {} + + canApplyPreSummon(pokemon: Pokemon, passive: boolean, args: any[]): boolean { + return true; + } +} + +export class IllusionPreSummonAbAttr extends PreSummonAbAttr { + /** + * Apply a new illusion when summoning Zoroark if the illusion is available + * + * @param pokemon - The Pokémon with the Illusion ability. + * @param passive - N/A + * @param args - N/A + * @returns Whether the illusion was applied. + */ + override applyPreSummon(pokemon: Pokemon, passive: boolean, args: any[]): void { + const party: Pokemon[] = (pokemon.isPlayer() ? globalScene.getPlayerParty() : globalScene.getEnemyParty()).filter(p => p.isAllowedInBattle()); + const lastPokemon: Pokemon = party.filter(p => p !==pokemon).at(-1) || pokemon; + pokemon.setIllusion(lastPokemon); + } + + override canApplyPreSummon(pokemon: Pokemon, passive: boolean, args: any[]): boolean { + pokemon.initSummondata() + if(pokemon.hasTrainer()){ + const party: Pokemon[] = (pokemon.isPlayer() ? globalScene.getPlayerParty() : globalScene.getEnemyParty()).filter(p => p.isAllowedInBattle()); + const lastPokemon: Pokemon = party.filter(p => p !==pokemon).at(-1) || pokemon; + const speciesId = lastPokemon.species.speciesId; + + // If the last conscious Pokémon in the party is a Terastallized Ogerpon or Terapagos, Illusion will not activate. + // Illusion will also not activate if the Pokémon with Illusion is Terastallized and the last Pokémon in the party is Ogerpon or Terapagos. + if ( + lastPokemon === pokemon || + ((speciesId === Species.OGERPON || speciesId === Species.TERAPAGOS) && (lastPokemon.isTerastallized || pokemon.isTerastallized)) + ) { + return false; + } + } + return !pokemon.summonData.illusionBroken; + } +} + +export class IllusionBreakAbAttr extends PostDefendAbAttr { + /** + * Destroy the illusion upon taking damage + * + * @param pokemon - The Pokémon with the Illusion ability. + * @param passive - unused + * @param attacker - The attacking Pokémon. + * @param move - The move being used. + * @param hitResult - The type of hitResult the pokemon got + * @param args - unused + * @returns - Whether the illusion was destroyed. + */ + override applyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): void { + pokemon.breakIllusion(); + pokemon.summonData.illusionBroken = true; + } + + override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { + const breakIllusion: HitResult[] = [ HitResult.EFFECTIVE, HitResult.SUPER_EFFECTIVE, HitResult.NOT_VERY_EFFECTIVE, HitResult.ONE_HIT_KO ]; + return breakIllusion.includes(hitResult) && !!pokemon.summonData?.illusion + } +} + +export class IllusionPostBattleAbAttr extends PostBattleAbAttr { + /** + * Break the illusion once the battle ends + * + * @param pokemon - The Pokémon with the Illusion ability. + * @param passive - Unused + * @param args - Unused + * @returns - Whether the illusion was applied. + */ + override applyPostBattle(pokemon: Pokemon, passive: boolean, simulated:boolean, args: any[]): void { + pokemon.breakIllusion() + } +} + + /** * If a Pokémon with this Ability selects a damaging move, it has a 30% chance of going first in its priority bracket. If the Ability activates, this is announced at the start of the turn (after move selection). * @@ -6017,6 +6122,20 @@ export function applyPostSummonAbAttrs( ); } +export function applyPreSummonAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyPreSummon(pokemon, passive, args), + (attr, passive) => attr.canApplyPreSummon(pokemon, passive, args), + args + ); +} + export function applyPreSwitchOutAbAttrs( attrType: Constructor, pokemon: Pokemon, @@ -6811,8 +6930,14 @@ export function initAbilities() { return isNullOrUndefined(movePhase); }, 1.3), new Ability(Abilities.ILLUSION, 5) + //The pokemon generate an illusion if it's available + .attr(IllusionPreSummonAbAttr, false) + //The pokemon loses his illusion when he is damaged by a move + .attr(IllusionBreakAbAttr, true) + //Illusion is available again after a battle + .conditionalAttr((pokemon) => pokemon.isAllowedInBattle(), IllusionPostBattleAbAttr, false) .uncopiable() - .unimplemented(), + .bypassFaint(), new Ability(Abilities.IMPOSTER, 5) .attr(PostSummonTransformAbAttr) .uncopiable(), @@ -7223,6 +7348,8 @@ export function initAbilities() { .attr(PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr) .uncopiable() .attr(NoTransformAbilityAbAttr) + .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonNeutralizingGas", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) + .attr(PostSummonRemoveIllusionAbAttr) .bypassFaint(), new Ability(Abilities.PASTEL_VEIL, 8) .attr(PostSummonUserFieldRemoveStatusEffectAbAttr, StatusEffect.POISON, StatusEffect.TOXIC) diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index a0f68dcd5cb..962a13bb840 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -7389,11 +7389,13 @@ export class AbilityChangeAttr extends MoveEffectAttr { const moveTarget = this.selfTarget ? user : target; - globalScene.queueMessage(i18next.t("moveTriggers:acquiredAbility", { pokemonName: getPokemonNameWithAffix((this.selfTarget ? user : target)), abilityName: allAbilities[this.ability].name })); - + globalScene.triggerPokemonFormChange(moveTarget, SpeciesFormChangeRevertWeatherFormTrigger); + if (moveTarget.breakIllusion()) { + globalScene.queueMessage(i18next.t("abilityTriggers:illusionBreak", { pokemonName: getPokemonNameWithAffix(moveTarget) })); + } + globalScene.queueMessage(i18next.t("moveTriggers:acquiredAbility", { pokemonName: getPokemonNameWithAffix(moveTarget), abilityName: allAbilities[this.ability].name })); moveTarget.setTempAbility(allAbilities[this.ability]); globalScene.triggerPokemonFormChange(moveTarget, SpeciesFormChangeRevertWeatherFormTrigger); - return true; } @@ -8673,6 +8675,8 @@ export function initMoves() { .makesContact(false), new StatusMove(Moves.TRANSFORM, PokemonType.NORMAL, -1, 10, -1, 0, 1) .attr(TransformAttr) + .condition((user, target, move) => !target.getTag(BattlerTagType.SUBSTITUTE)) + .condition((user, target, move) => !target.summonData?.illusion && !user.summonData?.illusion) // transforming from or into fusion pokemon causes various problems (such as crashes) .condition((user, target, move) => !target.getTag(BattlerTagType.SUBSTITUTE) && !user.fusionSpecies && !target.fusionSpecies) .ignoresProtect(), diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 8fc75ca657d..b59b7ba01fe 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -536,21 +536,33 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } - getNameToRender() { + /** + * @param {boolean} useIllusion - Whether we want the fake name or the real name of the Pokemon (for Illusion ability). + */ + getNameToRender(useIllusion: boolean = true) { + const name: string = (!useIllusion && !!this.summonData?.illusion) ? this.summonData?.illusion.basePokemon!.name : this.name; + const nickname: string = (!useIllusion && !!this.summonData?.illusion) ? this.summonData?.illusion.basePokemon!.nickname : this.nickname; try { - if (this.nickname) { - return decodeURIComponent(escape(atob(this.nickname))); + if (nickname) { + return decodeURIComponent(escape(atob(nickname))); } - return this.name; + return name; } catch (err) { - console.error(`Failed to decode nickname for ${this.name}`, err); - return this.name; + console.error(`Failed to decode nickname for ${name}`, err); + return name; + } + } + + getPokeball(useIllusion = false){ + if(useIllusion){ + return this.summonData?.illusion?.pokeball ?? this.pokeball + } else { + return this.pokeball } } init(): void { this.fieldPosition = FieldPosition.CENTER; - this.initBattleInfo(); globalScene.fieldUI.addAt(this.battleInfo, 0); @@ -584,7 +596,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.addAt(sprite, 0); this.addAt(tintSprite, 1); - if (this.isShiny() && !this.shinySparkle) { + if (this.isShiny(true) && !this.shinySparkle) { this.initShinySparkle(); } } @@ -682,6 +694,92 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } + /** + * Generate an illusion of the last pokemon in the party, as other wild pokemon in the area. + */ + setIllusion(pokemon: Pokemon): boolean { + if(!!this.summonData?.illusion){ + this.breakIllusion(); + } + if (this.hasTrainer()) { + const speciesId = pokemon.species.speciesId; + + this.summonData.illusion = { + basePokemon: { + name: this.name, + nickname: this.nickname, + shiny: this.shiny, + variant: this.variant, + fusionShiny: this.fusionShiny, + fusionVariant: this.fusionVariant + }, + species: speciesId, + formIndex: pokemon.formIndex, + gender: pokemon.gender, + pokeball: pokemon.pokeball, + fusionFormIndex: pokemon.fusionFormIndex, + fusionSpecies: pokemon.fusionSpecies || undefined, + fusionGender: pokemon.fusionGender + }; + + this.name = pokemon.name; + this.nickname = pokemon.nickname; + this.shiny = pokemon.shiny; + this.variant = pokemon.variant; + this.fusionVariant = pokemon.fusionVariant; + this.fusionShiny = pokemon.fusionShiny; + if (this.shiny) { + this.initShinySparkle(); + } + this.loadAssets(false, true).then(() => this.playAnim()); + this.updateInfo(); + } else { + const randomIllusion: PokemonSpecies = globalScene.arena.randomSpecies(globalScene.currentBattle.waveIndex, this.level); + + this.summonData.illusion = { + basePokemon: { + name: this.name, + nickname: this.nickname, + shiny: this.shiny, + variant: this.variant, + fusionShiny: this.fusionShiny, + fusionVariant: this.fusionVariant + }, + species: randomIllusion.speciesId, + formIndex: randomIllusion.formIndex, + gender: this.gender, + pokeball: this.pokeball + }; + + this.name = randomIllusion.name; + this.loadAssets(false, true).then(() => this.playAnim()); + } + return true; + } + + breakIllusion(): boolean { + if (!this.summonData?.illusion) { + return false; + } else { + this.name = this.summonData?.illusion.basePokemon.name; + this.nickname = this.summonData?.illusion.basePokemon.nickname; + this.shiny = this.summonData?.illusion.basePokemon.shiny; + this.variant = this.summonData?.illusion.basePokemon.variant; + this.fusionVariant = this.summonData?.illusion.basePokemon.fusionVariant; + this.fusionShiny = this.summonData?.illusion.basePokemon.fusionShiny; + this.summonData.illusion = null; + } + if (this.isOnField()) { + globalScene.playSound("PRSFX- Transform"); + } + if (this.shiny) { + this.initShinySparkle(); + } + this.loadAssets(false).then(() => this.playAnim()); + this.updateInfo(true); + return true; + } + abstract isPlayer(): boolean; abstract hasTrainer(): boolean; @@ -690,29 +788,41 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { abstract getBattlerIndex(): BattlerIndex; - async loadAssets(ignoreOverride = true): Promise { + /** +   * @param useIllusion - Whether we want the illusion or not. +   */ + async loadAssets(ignoreOverride = true, useIllusion: boolean = false): Promise { /** Promises that are loading assets and can be run concurrently. */ const loadPromises: Promise[] = []; // Assets for moves loadPromises.push(loadMoveAnimations(this.getMoveset().map(m => m.getMove().id))); // Load the assets for the species form + const formIndex = !!this.summonData?.illusion && useIllusion ? this.summonData?.illusion.formIndex : this.formIndex; loadPromises.push( - this.getSpeciesForm().loadAssets(this.getGender() === Gender.FEMALE, this.formIndex, this.shiny, this.variant), + this.getSpeciesForm(false, useIllusion).loadAssets( + this.getGender(useIllusion) === Gender.FEMALE, + formIndex, + this.isShiny(useIllusion), + this.getVariant(useIllusion) + ), ); - if (this.isPlayer() || this.getFusionSpeciesForm()) { + if (this.isPlayer() || this.getFusionSpeciesForm(false, useIllusion)) { globalScene.loadPokemonAtlas( this.getBattleSpriteKey(true, ignoreOverride), this.getBattleSpriteAtlasPath(true, ignoreOverride), ); } if (this.getFusionSpeciesForm()) { - loadPromises.push(this.getFusionSpeciesForm().loadAssets( - this.getFusionGender() === Gender.FEMALE, - this.fusionFormIndex, - this.fusionShiny, - this.fusionVariant, + const fusionFormIndex = !!this.summonData?.illusion && useIllusion ? this.summonData?.illusion.fusionFormIndex : this.fusionFormIndex; + const fusionShiny = !!this.summonData?.illusion && !useIllusion ? this.summonData?.illusion.basePokemon!.fusionShiny : this.fusionShiny; + const fusionVariant = !!this.summonData?.illusion && !useIllusion ? this.summonData?.illusion.basePokemon!.fusionVariant : this.fusionVariant; + loadPromises.push(this.getFusionSpeciesForm(false, useIllusion).loadAssets( + this.getFusionGender(false, useIllusion) === Gender.FEMALE, + fusionFormIndex, + fusionShiny, + fusionVariant )); globalScene.loadPokemonAtlas( this.getFusionBattleSpriteKey(true, ignoreOverride), @@ -720,7 +830,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ); } - if (this.shiny) { + if (this.isShiny(true)) { loadPromises.push(populateVariantColors(this, false, ignoreOverride)) if (this.isPlayer()) { loadPromises.push(populateVariantColors(this, true, ignoreOverride)); @@ -870,11 +980,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } getSpriteId(ignoreOverride?: boolean): string { - return this.getSpeciesForm(ignoreOverride).getSpriteId( - this.getGender(ignoreOverride) === Gender.FEMALE, - this.formIndex, - this.shiny, - this.variant, + const formIndex: integer = !!this.summonData?.illusion ? this.summonData?.illusion.formIndex! : this.formIndex; + return this.getSpeciesForm(ignoreOverride, true).getSpriteId( + this.getGender(ignoreOverride, true) === Gender.FEMALE, + formIndex, + this.shiny, + this.variant ); } @@ -882,21 +993,24 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (back === undefined) { back = this.isPlayer(); } - return this.getSpeciesForm(ignoreOverride).getSpriteId( - this.getGender(ignoreOverride) === Gender.FEMALE, - this.formIndex, - this.shiny, - this.variant, - back, + + const formIndex: integer = !!this.summonData?.illusion ? this.summonData?.illusion.formIndex! : this.formIndex; + + return this.getSpeciesForm(ignoreOverride, true).getSpriteId( + this.getGender(ignoreOverride, true) === Gender.FEMALE, + formIndex, + this.shiny, + this.variant, + back ); } getSpriteKey(ignoreOverride?: boolean): string { - return this.getSpeciesForm(ignoreOverride).getSpriteKey( + return this.getSpeciesForm(ignoreOverride, false).getSpriteKey( this.getGender(ignoreOverride) === Gender.FEMALE, this.formIndex, - this.shiny, - this.variant, + this.summonData?.illusion?.basePokemon.shiny ?? this.shiny, + this.summonData?.illusion?.basePokemon.variant ?? this.variant ); } @@ -905,11 +1019,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } getFusionSpriteId(ignoreOverride?: boolean): string { - return this.getFusionSpeciesForm(ignoreOverride).getSpriteId( - this.getFusionGender(ignoreOverride) === Gender.FEMALE, - this.fusionFormIndex, - this.fusionShiny, - this.fusionVariant, + const fusionFormIndex: integer = !!this.summonData?.illusion ? this.summonData?.illusion.fusionFormIndex! : this.fusionFormIndex; + return this.getFusionSpeciesForm(ignoreOverride, true).getSpriteId( + this.getFusionGender(ignoreOverride, true) === Gender.FEMALE, + fusionFormIndex, + this.fusionShiny, + this.fusionVariant ); } @@ -917,12 +1032,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (back === undefined) { back = this.isPlayer(); } - return this.getFusionSpeciesForm(ignoreOverride).getSpriteId( - this.getFusionGender(ignoreOverride) === Gender.FEMALE, - this.fusionFormIndex, - this.fusionShiny, - this.fusionVariant, - back, + + const fusionFormIndex: integer = !!this.summonData?.illusion ? this.summonData?.illusion.fusionFormIndex! : this.fusionFormIndex; + + return this.getFusionSpeciesForm(ignoreOverride, true).getSpriteId( + this.getFusionGender(ignoreOverride, true) === Gender.FEMALE, + fusionFormIndex, + this.fusionShiny, + this.fusionVariant, + back ); } @@ -941,62 +1059,77 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } getIconAtlasKey(ignoreOverride?: boolean): string { - return this.getSpeciesForm(ignoreOverride).getIconAtlasKey( - this.formIndex, - this.shiny, - this.variant, + const formIndex: integer = !!this.summonData?.illusion ? this.summonData?.illusion.formIndex : this.formIndex; + return this.getSpeciesForm(ignoreOverride, true).getIconAtlasKey( + formIndex, + this.shiny, + this.variant ); } getFusionIconAtlasKey(ignoreOverride?: boolean): string { - return this.getFusionSpeciesForm(ignoreOverride).getIconAtlasKey( - this.fusionFormIndex, - this.fusionShiny, - this.fusionVariant, + return this.getFusionSpeciesForm(ignoreOverride, true).getIconAtlasKey( + this.fusionFormIndex, + this.fusionShiny, + this.fusionVariant ); } getIconId(ignoreOverride?: boolean): string { - return this.getSpeciesForm(ignoreOverride).getIconId( - this.getGender(ignoreOverride) === Gender.FEMALE, - this.formIndex, - this.shiny, - this.variant, + const formIndex: integer = !!this.summonData?.illusion ? this.summonData?.illusion.formIndex : this.formIndex; + return this.getSpeciesForm(ignoreOverride, true).getIconId( + this.getGender(ignoreOverride, true) === Gender.FEMALE, + formIndex, + this.shiny, + this.variant ); } getFusionIconId(ignoreOverride?: boolean): string { - return this.getFusionSpeciesForm(ignoreOverride).getIconId( - this.getFusionGender(ignoreOverride) === Gender.FEMALE, - this.fusionFormIndex, - this.fusionShiny, - this.fusionVariant, + const fusionFormIndex: integer = !!this.summonData?.illusion ? this.summonData?.illusion.fusionFormIndex! : this.fusionFormIndex; + return this.getFusionSpeciesForm(ignoreOverride, true).getIconId( + this.getFusionGender(ignoreOverride, true) === Gender.FEMALE, + fusionFormIndex, + this.fusionShiny, + this.fusionVariant ); } - getSpeciesForm(ignoreOverride?: boolean): PokemonSpeciesForm { + /** + * @param {boolean} useIllusion - Whether we want the speciesForm of the illusion or not. + */ + getSpeciesForm(ignoreOverride?: boolean, useIllusion: boolean = false): PokemonSpeciesForm { + const species: PokemonSpecies = useIllusion && !!this.summonData?.illusion ? getPokemonSpecies(this.summonData?.illusion.species) : this.species; + + const formIndex: integer = useIllusion && !!this.summonData?.illusion ? this.summonData?.illusion.formIndex : this.formIndex; + if (!ignoreOverride && this.summonData?.speciesForm) { return this.summonData.speciesForm; } - if (this.species.forms && this.species.forms.length > 0) { - return this.species.forms[this.formIndex]; + if (species.forms && species.forms.length > 0) { + return species.forms[formIndex]; } - return this.species; + return species; } - getFusionSpeciesForm(ignoreOverride?: boolean): PokemonSpeciesForm { + /** + * @param {boolean} useIllusion - Whether we want the fusionSpeciesForm of the illusion or not. + */ + getFusionSpeciesForm(ignoreOverride?: boolean, useIllusion: boolean = false): PokemonSpeciesForm { + const fusionSpecies: PokemonSpecies = useIllusion && !!this.summonData?.illusion ? this.summonData?.illusion.fusionSpecies! : this.fusionSpecies!; + const fusionFormIndex: integer = useIllusion && !!this.summonData?.illusion ? this.summonData?.illusion.fusionFormIndex! : this.fusionFormIndex; + if (!ignoreOverride && this.summonData?.speciesForm) { return this.summonData.fusionSpeciesForm; } if ( - !this.fusionSpecies?.forms?.length || - this.fusionFormIndex >= this.fusionSpecies?.forms.length + !fusionSpecies?.forms?.length || + fusionFormIndex >= fusionSpecies?.forms.length ) { - //@ts-ignore - return this.fusionSpecies; // TODO: I don't even know how to fix this... A complete cluster of classes involved + null + return fusionSpecies; } - return this.fusionSpecies?.forms[this.fusionFormIndex]; + return fusionSpecies?.forms[fusionFormIndex]; } getSprite(): Phaser.GameObjects.Sprite { @@ -1652,36 +1785,98 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } - getGender(ignoreOverride?: boolean): Gender { - if (!ignoreOverride && this.summonData?.gender !== undefined) { + /** + * @param {boolean} useIllusion - Whether we want the fake or real gender (illusion ability). + */ + getGender(ignoreOverride?: boolean, useIllusion: boolean = false): Gender { + if (useIllusion && !!this.summonData?.illusion) { + return this.summonData?.illusion.gender!; + } else if (!ignoreOverride && this.summonData?.gender !== undefined) { return this.summonData.gender; } return this.gender; } - getFusionGender(ignoreOverride?: boolean): Gender { - if (!ignoreOverride && this.summonData?.fusionGender !== undefined) { + /** + * @param {boolean} useIllusion - Whether we want the fake or real gender (illusion ability). + */ + getFusionGender(ignoreOverride?: boolean, useIllusion: boolean = false): Gender { + if (useIllusion && !!this.summonData?.illusion) { + return this.summonData?.illusion.fusionGender!; + } else if (!ignoreOverride && this.summonData?.fusionGender !== undefined) { return this.summonData.fusionGender; } return this.fusionGender; } - isShiny(): boolean { - return this.shiny || (this.isFusion() && this.fusionShiny); + /** + * @param {boolean} useIllusion - Whether we want the fake or real shininess (illusion ability). + */ + isShiny(useIllusion: boolean = false): boolean { + if (!useIllusion && !!this.summonData?.illusion) { + return this.summonData?.illusion.basePokemon?.shiny || (!!this.summonData?.illusion.fusionSpecies && this.summonData?.illusion.basePokemon?.fusionShiny) || false; + } else { + return this.shiny || (this.isFusion(useIllusion) && this.fusionShiny); + } } - getVariant(): Variant { - return !this.isFusion() - ? this.variant - : (Math.max(this.variant, this.fusionVariant) as Variant); + /** + * + * @param useIllusion - Whether we want the fake or real shininess (illusion ability). + * @returns `true` if the {@linkcode Pokemon} is shiny and the fusion is shiny as well, `false` otherwise + */ + isDoubleShiny(useIllusion: boolean = false): boolean { + if (!useIllusion && !!this.summonData?.illusion) { + return this.isFusion(false) && this.summonData?.illusion.basePokemon.shiny && this.summonData?.illusion.basePokemon.fusionShiny; + } else { + return this.isFusion(useIllusion) && this.shiny && this.fusionShiny; + } + } + + /** + * @param {boolean} useIllusion - Whether we want the fake or real variant (illusion ability). + */ + getVariant(useIllusion: boolean = false): Variant { + if (!useIllusion && !!this.summonData?.illusion) { + return !this.isFusion(false) + ? this.summonData?.illusion.basePokemon!.variant + : Math.max(this.variant, this.fusionVariant) as Variant; + } else { + return !this.isFusion(true) + ? this.variant + : Math.max(this.variant, this.fusionVariant) as Variant; + } + } + + getBaseVariant(doubleShiny: boolean): Variant { + if (doubleShiny) { + return !!this.summonData?.illusion + ? this.summonData?.illusion.basePokemon!.variant + : this.variant; + } else { + return this.getVariant(); + } } getLuck(): number { return this.luck + (this.isFusion() ? this.fusionLuck : 0); } - isFusion(): boolean { - return !!this.fusionSpecies; + isFusion(useIllusion: boolean = false): boolean { + if (useIllusion && !!this.summonData?.illusion) { + return !!this.summonData?.illusion.fusionSpecies; + } else { + return !!this.fusionSpecies; + } + } + + /** + * @param {boolean} useIllusion - Whether we want the fake name or the real name of the Pokemon (for Illusion ability). + */ + getName(useIllusion: boolean = false): string { + return (!useIllusion && !!this.summonData?.illusion && this.summonData?.illusion.basePokemon) + ? this.summonData?.illusion.basePokemon.name + : this.name; } /** @@ -1796,12 +1991,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param includeTeraType - `true` to include tera-formed type; Default: `false` * @param forDefend - `true` if the pokemon is defending from an attack; Default: `false` * @param ignoreOverride - If `true`, ignore ability changing effects; Default: `false` + * @param useIllusion - `true` to return the types of the illusion instead of the actual types; "AUTO" will depend on forDefend param; Default: "AUTO" * @returns array of {@linkcode PokemonType} */ public getTypes( - includeTeraType = false, - forDefend = false, - ignoreOverride = false, + includeTeraType = false, + forDefend: boolean = false, + ignoreOverride?: boolean, + useIllusion: boolean | "AUTO" = "AUTO" ): PokemonType[] { const types: PokemonType[] = []; @@ -1815,17 +2012,19 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } } - if (!types.length || !includeTeraType) { + + const doIllusion: boolean = (useIllusion === "AUTO") ? !forDefend : useIllusion; if ( - !ignoreOverride && - this.summonData?.types && - this.summonData.types.length > 0 + !ignoreOverride && + this.summonData?.types && + this.summonData.types.length > 0 && + (!this.summonData?.illusion || !doIllusion) ) { this.summonData.types.forEach(t => types.push(t)); } else { - const speciesForm = this.getSpeciesForm(ignoreOverride); - const fusionSpeciesForm = this.getFusionSpeciesForm(ignoreOverride); + const speciesForm = this.getSpeciesForm(ignoreOverride, doIllusion); + const fusionSpeciesForm = this.getFusionSpeciesForm(ignoreOverride, doIllusion); const customTypes = this.customPokemonData.types?.length > 0; // First type, checking for "permanently changed" types from ME @@ -2378,6 +2577,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param ignoreAbility Whether to ignore abilities that might affect type effectiveness or immunity (defaults to `false`). * @param simulated Whether to apply abilities via simulated calls (defaults to `true`) * @param cancelled {@linkcode BooleanHolder} Stores whether the move was cancelled by a non-type-based immunity. + * @param useIllusion - Whether we want the attack move effectiveness on the illusion or not * Currently only used by {@linkcode Pokemon.apply} to determine whether a "No effect" message should be shown. * @returns The type damage multiplier, indicating the effectiveness of the move */ @@ -2387,6 +2587,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ignoreAbility = false, simulated = true, cancelled?: BooleanHolder, + useIllusion: boolean = false ): TypeDamageMultiplier { if (!isNullOrUndefined(this.turnData?.moveEffectiveness)) { return this.turnData?.moveEffectiveness; @@ -2398,17 +2599,17 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const moveType = source.getMoveType(move); const typeMultiplier = new NumberHolder( - move.category !== MoveCategory.STATUS || - move.hasAttr(RespectAttackTypeImmunityAttr) - ? this.getAttackTypeEffectiveness( - moveType, - source, - false, - simulated, - move, - ) - : 1, - ); + move.category !== MoveCategory.STATUS || + move.hasAttr(RespectAttackTypeImmunityAttr) + ? this.getAttackTypeEffectiveness( + moveType, + source, + false, + simulated, + move, + useIllusion + ) + : 1); applyMoveAttrs( VariableMoveTypeMultiplierAttr, @@ -2512,19 +2713,21 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param ignoreStrongWinds whether or not this ignores strong winds (anticipation, forewarn, stealth rocks) * @param simulated tag to only apply the strong winds effect message when the move is used * @param move (optional) the move whose type effectiveness is to be checked. Used for applying {@linkcode VariableMoveTypeChartAttr} + * @param useIllusion - Whether we want the attack type effectiveness on the illusion or not * @returns a multiplier for the type effectiveness */ getAttackTypeEffectiveness( - moveType: PokemonType, - source?: Pokemon, - ignoreStrongWinds = false, - simulated = true, - move?: Move, + moveType: PokemonType, + source?: Pokemon, + ignoreStrongWinds: boolean = false, + simulated: boolean = true, + move?: Move, + useIllusion: boolean = false ): TypeDamageMultiplier { if (moveType === PokemonType.STELLAR) { return this.isTerastallized ? 2 : 1; } - const types = this.getTypes(true, true); + const types = this.getTypes(true, true, undefined, useIllusion); const arena = globalScene.arena; // Handle flying v ground type immunity without removing flying type so effective types are still effective @@ -2623,7 +2826,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { */ getMatchupScore(opponent: Pokemon): number { const types = this.getTypes(true); - const enemyTypes = opponent.getTypes(true, true); + + const enemyTypes = opponent.getTypes(true, true, false, true); /** Is this Pokemon faster than the opponent? */ const outspeed = (this.isActive(true) @@ -2634,9 +2838,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * Based on how effective this Pokemon's types are offensively against the opponent's types. * This score is increased by 25 percent if this Pokemon is faster than the opponent. */ - let atkScore = - opponent.getAttackTypeEffectiveness(types[0], this) * - (outspeed ? 1.25 : 1); + let atkScore = opponent.getAttackTypeEffectiveness(types[0], this, false, true, undefined, true) * (outspeed ? 1.25 : 1); /** * Based on how effectively this Pokemon defends against the opponent's types. * This score cannot be higher than 4. @@ -2648,12 +2850,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { atkScore *= opponent.getAttackTypeEffectiveness(types[1], this); } if (enemyTypes.length > 1) { - defScore *= - 1 / - Math.max( - this.getAttackTypeEffectiveness(enemyTypes[1], opponent), - 0.25, - ); + defScore *= (1 / Math.max(this.getAttackTypeEffectiveness(enemyTypes[1], opponent, false, false, undefined, true), 0.25)); } /** * Based on this Pokemon's HP ratio compared to that of the opponent. @@ -5538,7 +5735,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.summonDataPrimer = summonDataPrimer; } + // For PreSummonAbAttr to get access to summonData + initSummondata(): void { + this.summonData = this.summonData ?? this.summonDataPrimer ?? new PokemonSummonData() + } + resetSummonData(): void { + const illusion: IllusionData | null = this.summonData?.illusion; if (this.summonData?.speciesForm) { this.summonData.speciesForm = null; this.updateFusionPalette(); @@ -5574,6 +5777,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } this.summonDataPrimer = null; } + this.summonData.illusion = illusion this.updateInfo(); } @@ -7146,15 +7350,11 @@ export class EnemyPokemon extends Pokemon { ) { targetScore = -20; } else if (move instanceof AttackMove) { - /** - * Attack moves are given extra multipliers to their base benefit score based on - * the move's type effectiveness against the target and whether the move is a STAB move. - */ - const effectiveness = target.getMoveEffectiveness( - this, - move, - !target.battleData?.abilityRevealed, - ); + /** + * Attack moves are given extra multipliers to their base benefit score based on + * the move's type effectiveness against the target and whether the move is a STAB move. + */ + const effectiveness = target.getMoveEffectiveness(this, move, !target.battleData?.abilityRevealed, undefined, undefined, true); if (target.isPlayer() !== this.isPlayer()) { targetScore *= effectiveness; if (this.isOfType(move.type)) { @@ -7543,6 +7743,42 @@ export class EnemyPokemon extends Pokemon { } } +/** + * Illusion property + */ +interface IllusionData { + basePokemon: { + /** The actual name of the Pokemon */ + name: string; + /** The actual nickname of the Pokemon */ + nickname: string; + /** Whether the base pokemon is shiny or not */ + shiny: boolean; + /** The shiny variant of the base pokemon */ + variant: Variant; + /** Whether the fusion species of the base pokemon is shiny or not */ + fusionShiny: boolean; + /** The variant of the fusion species of the base pokemon */ + fusionVariant: Variant; + }; + /** The species of the illusion */ + species: Species; + /** The formIndex of the illusion */ + formIndex: number; + /** The gender of the illusion */ + gender: Gender; + /** The pokeball of the illusion */ + pokeball: PokeballType; + /** The fusion species of the illusion if it's a fusion */ + fusionSpecies?: PokemonSpecies; + /** The fusionFormIndex of the illusion */ + fusionFormIndex?: number; + /** The fusionGender of the illusion if it's a fusion */ + fusionGender?: Gender; + /** The level of the illusion (not used currently) */ + level?: number +} + export interface TurnMove { move: Moves; targets: BattlerIndex[]; @@ -7576,9 +7812,12 @@ export class PokemonSummonData { public fusionGender: Gender; public stats: number[] = [0, 0, 0, 0, 0, 0]; public moveset: PokemonMove[]; + public illusionBroken: boolean = false; + // If not initialized this value will not be populated from save data. public types: PokemonType[] = []; public addedType: PokemonType | null = null; + public illusion: IllusionData | null = null; } export class PokemonBattleData { @@ -7589,7 +7828,7 @@ export class PokemonBattleData { public endured = false; public berriesEaten: BerryType[] = []; public abilitiesApplied: Abilities[] = []; - public abilityRevealed = false; + public abilityRevealed: boolean = false; } export class PokemonBattleSummonData { diff --git a/src/messages.ts b/src/messages.ts index e35b48f7226..c29151a98b3 100644 --- a/src/messages.ts +++ b/src/messages.ts @@ -6,9 +6,10 @@ import i18next from "i18next"; /** * Retrieves the Pokemon's name, potentially with an affix indicating its role (wild or foe) in the current battle context, translated * @param pokemon {@linkcode Pokemon} name and battle context will be retrieved from this instance + * @param {boolean} useIllusion - Whether we want the name of the illusion or not. Default value : true * @returns {string} ex: "Wild Gengar", "Ectoplasma sauvage" */ -export function getPokemonNameWithAffix(pokemon: Pokemon | undefined): string { +export function getPokemonNameWithAffix(pokemon: Pokemon | undefined, useIllusion = true): string { if (!pokemon) { return "Missigno"; } @@ -18,19 +19,17 @@ export function getPokemonNameWithAffix(pokemon: Pokemon | undefined): string { return !pokemon.isPlayer() ? pokemon.hasTrainer() ? i18next.t("battle:foePokemonWithAffix", { - pokemonName: pokemon.getNameToRender(), + pokemonName: pokemon.getNameToRender(useIllusion), }) : i18next.t("battle:wildPokemonWithAffix", { - pokemonName: pokemon.getNameToRender(), + pokemonName: pokemon.getNameToRender(useIllusion), }) - : pokemon.getNameToRender(); + : pokemon.getNameToRender(useIllusion); case BattleSpec.FINAL_BOSS: return !pokemon.isPlayer() - ? i18next.t("battle:foePokemonWithAffix", { - pokemonName: pokemon.getNameToRender(), - }) - : pokemon.getNameToRender(); + ? i18next.t("battle:foePokemonWithAffix", { pokemonName: pokemon.getNameToRender(useIllusion) }) + : pokemon.getNameToRender(useIllusion); default: - return pokemon.getNameToRender(); + return pokemon.getNameToRender(useIllusion); } } diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index 9e5edf3e1d9..15f3d102e41 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -1,7 +1,7 @@ import { BattlerIndex, BattleType } from "#app/battle"; import { globalScene } from "#app/global-scene"; import { PLAYER_PARTY_MAX_SIZE } from "#app/constants"; -import { applyAbAttrs, SyncEncounterNatureAbAttr } from "#app/data/ability"; +import { applyAbAttrs, SyncEncounterNatureAbAttr, applyPreSummonAbAttrs, PreSummonAbAttr } from "#app/data/ability"; import { initEncounterAnims, loadEncounterAnimAssets } from "#app/data/battle-anims"; import { getCharVariantFromDialogue } from "#app/data/dialogue"; import { getEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; @@ -259,6 +259,9 @@ export class EncounterPhase extends BattlePhase { } if (e < (battle.double ? 2 : 1)) { if (battle.battleType === BattleType.WILD) { + for (const pokemon of globalScene.getField()) { + applyPreSummonAbAttrs(PreSummonAbAttr, pokemon, []); + } globalScene.field.add(enemyPokemon); battle.seenEnemyPartyMemberIds.add(enemyPokemon.id); const playerPokemon = globalScene.getPlayerPokemon(); @@ -545,7 +548,7 @@ export class EncounterPhase extends BattlePhase { const enemyField = globalScene.getEnemyField(); enemyField.forEach((enemyPokemon, e) => { - if (enemyPokemon.isShiny()) { + if (enemyPokemon.isShiny(true)) { globalScene.unshiftPhase(new ShinySparklePhase(BattlerIndex.ENEMY + e)); } /** This sets Eternatus' held item to be untransferrable, preventing it from being stolen */ diff --git a/src/phases/level-up-phase.ts b/src/phases/level-up-phase.ts index 31c7fabf451..c6ca17d583e 100644 --- a/src/phases/level-up-phase.ts +++ b/src/phases/level-up-phase.ts @@ -71,6 +71,7 @@ export class LevelUpPhase extends PlayerPartyMemberPokemonPhase { if (!this.pokemon.pauseEvolutions) { const evolution = this.pokemon.getEvolution(); if (evolution) { + this.pokemon.breakIllusion() globalScene.unshiftPhase(new EvolutionPhase(this.pokemon, evolution, this.lastLevel)); } } diff --git a/src/phases/summon-phase.ts b/src/phases/summon-phase.ts index 621c8c8c2a9..7379d509e55 100644 --- a/src/phases/summon-phase.ts +++ b/src/phases/summon-phase.ts @@ -13,6 +13,7 @@ import { PostSummonPhase } from "./post-summon-phase"; import { GameOverPhase } from "./game-over-phase"; import { ShinySparklePhase } from "./shiny-sparkle-phase"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; +import { applyPreSummonAbAttrs, PreSummonAbAttr } from "#app/data/ability"; import { globalScene } from "#app/global-scene"; export class SummonPhase extends PartyMemberPokemonPhase { @@ -27,6 +28,7 @@ export class SummonPhase extends PartyMemberPokemonPhase { start() { super.start(); + applyPreSummonAbAttrs(PreSummonAbAttr, this.getPokemon()); this.preSummon(); } @@ -126,7 +128,7 @@ export class SummonPhase extends PartyMemberPokemonPhase { this.player ? 36 : 248, this.player ? 80 : 44, "pb", - getPokeballAtlasKey(pokemon.pokeball), + getPokeballAtlasKey(pokemon.getPokeball(true)), ); pokeball.setVisible(false); pokeball.setOrigin(0.5, 0.625); @@ -175,7 +177,11 @@ export class SummonPhase extends PartyMemberPokemonPhase { } globalScene.currentBattle.seenEnemyPartyMemberIds.add(pokemon.id); } - addPokeballOpenParticles(pokemon.x, pokemon.y - 16, pokemon.pokeball); + addPokeballOpenParticles( + pokemon.x, + pokemon.y - 16, + pokemon.getPokeball(true), + ); globalScene.updateModifiers(this.player); globalScene.updateFieldScale(); pokemon.showInfo(); @@ -183,7 +189,7 @@ export class SummonPhase extends PartyMemberPokemonPhase { pokemon.setVisible(true); pokemon.getSprite().setVisible(true); pokemon.setScale(0.5); - pokemon.tint(getPokeballTintColor(pokemon.pokeball)); + pokemon.tint(getPokeballTintColor(pokemon.getPokeball(true))); pokemon.untint(250, "Sine.easeIn"); globalScene.updateFieldScale(); globalScene.tweens.add({ @@ -270,7 +276,7 @@ export class SummonPhase extends PartyMemberPokemonPhase { onEnd(): void { const pokemon = this.getPokemon(); - if (pokemon.isShiny()) { + if (pokemon.isShiny(true)) { globalScene.unshiftPhase(new ShinySparklePhase(pokemon.getBattlerIndex())); } diff --git a/src/phases/switch-summon-phase.ts b/src/phases/switch-summon-phase.ts index e0903ada275..d63cdb90f25 100644 --- a/src/phases/switch-summon-phase.ts +++ b/src/phases/switch-summon-phase.ts @@ -1,5 +1,11 @@ import { globalScene } from "#app/global-scene"; -import { applyPreSwitchOutAbAttrs, PostDamageForceSwitchAbAttr, PreSwitchOutAbAttr } from "#app/data/ability"; +import { + applyPreSummonAbAttrs, + applyPreSwitchOutAbAttrs, + PostDamageForceSwitchAbAttr, + PreSummonAbAttr, + PreSwitchOutAbAttr, +} from "#app/data/ability"; import { allMoves, ForceSwitchOutAttr } from "#app/data/moves/move"; import { getPokeballTintColor } from "#app/data/pokeball"; import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms"; @@ -99,7 +105,7 @@ export class SwitchSummonPhase extends SummonPhase { ); globalScene.playSound("se/pb_rel"); pokemon.hideInfo(); - pokemon.tint(getPokeballTintColor(pokemon.pokeball), 1, 250, "Sine.easeIn"); + pokemon.tint(getPokeballTintColor(pokemon.getPokeball(true)), 1, 250, "Sine.easeIn"); globalScene.tweens.add({ targets: pokemon, duration: 250, @@ -116,6 +122,7 @@ export class SwitchSummonPhase extends SummonPhase { const party = this.player ? this.getParty() : globalScene.getEnemyParty(); const switchedInPokemon = party[this.slotIndex]; this.lastPokemon = this.getPokemon(); + applyPreSummonAbAttrs(PreSummonAbAttr, switchedInPokemon); applyPreSwitchOutAbAttrs(PreSwitchOutAbAttr, this.lastPokemon); if (this.switchType === SwitchType.BATON_PASS && switchedInPokemon) { (this.player ? globalScene.getEnemyField() : globalScene.getPlayerField()).forEach(enemyPokemon => diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 63955b02de8..53146301666 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -1426,12 +1426,11 @@ export class GameData { ), ) // TODO: is this bang correct? : this.getSessionSaveData(); - const maxIntAttrValue = 0x80000000; const systemData = useCachedSystem ? this.parseSystemData(decrypt(localStorage.getItem(`data_${loggedInUser?.username}`)!, bypassLogin)) : this.getSystemSaveData(); // TODO: is this bang correct? - + const request = { system: systemData, session: sessionData, @@ -1448,7 +1447,6 @@ export class GameData { bypassLogin, ), ); - localStorage.setItem( `sessionData${globalScene.sessionSlotId ? globalScene.sessionSlotId : ""}_${loggedInUser?.username}`, encrypt(JSON.stringify(sessionData), bypassLogin), diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index 7cdcb0c72c3..97ce494a43a 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -79,12 +79,14 @@ export default class PokemonData { this.id = source.id; this.player = sourcePokemon ? sourcePokemon.isPlayer() : source.player; this.species = sourcePokemon ? sourcePokemon.species.speciesId : source.species; - this.nickname = sourcePokemon ? sourcePokemon.nickname : source.nickname; + this.nickname = sourcePokemon + ? (!!sourcePokemon.summonData?.illusion ? sourcePokemon.summonData.illusion.basePokemon.nickname : sourcePokemon.nickname) + : source.nickname; this.formIndex = Math.max(Math.min(source.formIndex, getPokemonSpecies(this.species).forms.length - 1), 0); this.abilityIndex = source.abilityIndex; this.passive = source.passive; - this.shiny = source.shiny; - this.variant = source.variant; + this.shiny = sourcePokemon ? sourcePokemon.isShiny() : source.shiny; + this.variant = sourcePokemon ? sourcePokemon.getVariant() : source.variant; this.pokeball = source.pokeball; this.level = source.level; this.exp = source.exp; @@ -117,8 +119,12 @@ export default class PokemonData { this.fusionSpecies = sourcePokemon ? sourcePokemon.fusionSpecies?.speciesId : source.fusionSpecies; this.fusionFormIndex = source.fusionFormIndex; this.fusionAbilityIndex = source.fusionAbilityIndex; - this.fusionShiny = source.fusionShiny; - this.fusionVariant = source.fusionVariant; + this.fusionShiny = sourcePokemon + ? (!!sourcePokemon.summonData?.illusion ? sourcePokemon.summonData.illusion.basePokemon.fusionShiny : sourcePokemon.fusionShiny) + : source.fusionShiny; + this.fusionVariant = sourcePokemon + ? (!!sourcePokemon.summonData?.illusion ? sourcePokemon.summonData.illusion.basePokemon.fusionVariant : sourcePokemon.fusionVariant) + : source.fusionVariant; this.fusionGender = source.fusionGender; this.fusionLuck = source.fusionLuck !== undefined ? source.fusionLuck : source.fusionShiny ? source.fusionVariant + 1 : 0; @@ -174,6 +180,7 @@ export default class PokemonData { this.summonData.types = source.summonData.types; this.summonData.speciesForm = source.summonData.speciesForm; this.summonDataSpeciesFormIndex = source.summonDataSpeciesFormIndex; + this.summonData.illusionBroken = source.summonData.illusionBroken; if (source.summonData.tags) { this.summonData.tags = source.summonData.tags?.map(t => loadBattlerTag(t)); @@ -219,6 +226,7 @@ export default class PokemonData { if (this.summonData) { // when loading from saved session, recover summonData.speciesFrom and form index species object // used to stay transformed on reload session + if (this.summonData.speciesForm) { this.summonData.speciesForm = getPokemonSpeciesForm( this.summonData.speciesForm.speciesId, diff --git a/src/ui/battle-info.ts b/src/ui/battle-info.ts index 2b205329ab8..06c5f7fb3f1 100644 --- a/src/ui/battle-info.ts +++ b/src/ui/battle-info.ts @@ -356,7 +356,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { }); this.teraIcon.on("pointerout", () => globalScene.ui.hideTooltip()); - const isFusion = pokemon.isFusion(); + const isFusion = pokemon.isFusion(true); this.splicedIcon.setPositionRelative( this.nameText, @@ -375,7 +375,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { } const doubleShiny = isFusion && pokemon.shiny && pokemon.fusionShiny; - const baseVariant = !doubleShiny ? pokemon.getVariant() : pokemon.variant; + const baseVariant = !doubleShiny ? pokemon.getVariant(true) : pokemon.variant; this.shinyIcon.setPositionRelative( this.nameText, @@ -617,6 +617,11 @@ export default class BattleInfo extends Phaser.GameObjects.Container { return resolve(); } + const gender: Gender = !!pokemon.summonData?.illusion ? pokemon.summonData?.illusion.gender : pokemon.gender; + + this.genderText.setText(getGenderSymbol(gender)); + this.genderText.setColor(getGenderColor(gender)); + const nameUpdated = this.lastName !== pokemon.getNameToRender(); if (nameUpdated) { @@ -638,8 +643,10 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.lastTeraType = teraType; } + const isFusion = pokemon.isFusion(true); + if (nameUpdated || teraTypeUpdated) { - this.splicedIcon.setVisible(!!pokemon.fusionSpecies); + this.splicedIcon.setVisible(isFusion); this.teraIcon.setPositionRelative( this.nameText, @@ -764,7 +771,17 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.lastStats = statsStr; } - this.shinyIcon.setVisible(pokemon.isShiny()); + this.shinyIcon.setVisible(pokemon.isShiny(true)); + + const doubleShiny = isFusion && pokemon.shiny && pokemon.fusionShiny; + const baseVariant = !doubleShiny ? pokemon.getVariant(true) : pokemon.variant; + this.shinyIcon.setTint(getVariantTint(baseVariant)); + + this.fusionShinyIcon.setVisible(doubleShiny); + if (isFusion) { + this.fusionShinyIcon.setTint(getVariantTint(pokemon.fusionVariant)); + } + this.fusionShinyIcon.setPosition(this.shinyIcon.x, this.shinyIcon.y); resolve(); }); @@ -777,10 +794,11 @@ export default class BattleInfo extends Phaser.GameObjects.Container { const nameSizeTest = addTextObject(0, 0, displayName, TextStyle.BATTLE_INFO); nameTextWidth = nameSizeTest.displayWidth; + const gender: Gender = !!pokemon.summonData?.illusion ? pokemon.summonData?.illusion.gender : pokemon.gender; while ( nameTextWidth > (this.player || !this.boss ? 60 : 98) - - ((pokemon.gender !== Gender.GENDERLESS ? 6 : 0) + + ((gender !== Gender.GENDERLESS ? 6 : 0) + (pokemon.fusionSpecies ? 8 : 0) + (pokemon.isShiny() ? 8 : 0) + (Math.min(pokemon.level.toString().length, 3) - 3) * 8) diff --git a/src/ui/fight-ui-handler.ts b/src/ui/fight-ui-handler.ts index 3775dbc2228..27985629e3d 100644 --- a/src/ui/fight-ui-handler.ts +++ b/src/ui/fight-ui-handler.ts @@ -306,6 +306,9 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { pokemon, pokemonMove.getMove(), !opponent.battleData?.abilityRevealed, + undefined, + undefined, + true ); if (effectiveness === undefined) { return undefined; @@ -350,7 +353,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { const moveColors = opponents .map(opponent => - opponent.getMoveEffectiveness(pokemon, pokemonMove.getMove(), !opponent.battleData.abilityRevealed), + opponent.getMoveEffectiveness(pokemon, pokemonMove.getMove(), !opponent.battleData.abilityRevealed, undefined, undefined, true), ) .sort((a, b) => b - a) .map(effectiveness => getTypeDamageMultiplierColor(effectiveness ?? 0, "offense")); diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 61a98d79fbb..ba90108c274 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -193,18 +193,14 @@ export default class PartyUiHandler extends MessageUiHandler { public static FilterNonFainted = (pokemon: PlayerPokemon) => { if (pokemon.isFainted()) { - return i18next.t("partyUiHandler:noEnergy", { - pokemonName: getPokemonNameWithAffix(pokemon), - }); + return i18next.t("partyUiHandler:noEnergy", { pokemonName: getPokemonNameWithAffix(pokemon, false) }); } return null; }; public static FilterFainted = (pokemon: PlayerPokemon) => { if (!pokemon.isFainted()) { - return i18next.t("partyUiHandler:hasEnergy", { - pokemonName: getPokemonNameWithAffix(pokemon), - }); + return i18next.t("partyUiHandler:hasEnergy", { pokemonName: getPokemonNameWithAffix(pokemon, false) }); } return null; }; @@ -218,9 +214,7 @@ export default class PartyUiHandler extends MessageUiHandler { const challengeAllowed = new BooleanHolder(true); applyChallenges(ChallengeType.POKEMON_IN_BATTLE, pokemon, challengeAllowed); if (!challengeAllowed.value) { - return i18next.t("partyUiHandler:cantBeUsed", { - pokemonName: getPokemonNameWithAffix(pokemon), - }); + return i18next.t("partyUiHandler:cantBeUsed", { pokemonName: getPokemonNameWithAffix(pokemon, false) }); } return null; }; @@ -232,9 +226,7 @@ export default class PartyUiHandler extends MessageUiHandler { m => m instanceof PokemonHeldItemModifier && m.pokemonId === pokemon.id && m.matchType(modifier), ) as PokemonHeldItemModifier; if (matchingModifier && matchingModifier.stackCount === matchingModifier.getMaxStackCount()) { - return i18next.t("partyUiHandler:tooManyItems", { - pokemonName: getPokemonNameWithAffix(pokemon), - }); + return i18next.t("partyUiHandler:tooManyItems", { pokemonName: getPokemonNameWithAffix(pokemon, false) }); } return null; }; @@ -583,7 +575,7 @@ export default class PartyUiHandler extends MessageUiHandler { this.showText( i18next.t( pokemon.pauseEvolutions ? "partyUiHandler:pausedEvolutions" : "partyUiHandler:unpausedEvolutions", - { pokemonName: getPokemonNameWithAffix(pokemon) }, + { pokemonName: getPokemonNameWithAffix(pokemon, false) }, ), undefined, () => this.showText("", 0), @@ -596,14 +588,14 @@ export default class PartyUiHandler extends MessageUiHandler { this.showText( i18next.t("partyUiHandler:unspliceConfirmation", { fusionName: pokemon.fusionSpecies?.name, - pokemonName: pokemon.name, + pokemonName: pokemon.getName(), }), null, () => { ui.setModeWithoutClear( Mode.CONFIRM, () => { - const fusionName = pokemon.name; + const fusionName = pokemon.getName(); pokemon.unfuse().then(() => { this.clearPartySlots(); this.populatePartySlots(); @@ -611,7 +603,7 @@ export default class PartyUiHandler extends MessageUiHandler { this.showText( i18next.t("partyUiHandler:wasReverted", { fusionName: fusionName, - pokemonName: pokemon.name, + pokemonName: pokemon.getName(false), }), undefined, () => { @@ -637,7 +629,7 @@ export default class PartyUiHandler extends MessageUiHandler { this.blockInput = true; this.showText( i18next.t("partyUiHandler:releaseConfirmation", { - pokemonName: getPokemonNameWithAffix(pokemon), + pokemonName: getPokemonNameWithAffix(pokemon, false), }), null, () => { @@ -1285,7 +1277,7 @@ export default class PartyUiHandler extends MessageUiHandler { doRelease(slotIndex: number): void { this.showText( - this.getReleaseMessage(getPokemonNameWithAffix(globalScene.getPlayerParty()[slotIndex])), + this.getReleaseMessage(getPokemonNameWithAffix(globalScene.getPlayerParty()[slotIndex], false)), null, () => { this.clearPartySlots(); @@ -1495,7 +1487,7 @@ class PartySlot extends Phaser.GameObjects.Container { const slotInfoContainer = globalScene.add.container(0, 0); this.add(slotInfoContainer); - let displayName = this.pokemon.getNameToRender(); + let displayName = this.pokemon.getNameToRender(false); let nameTextWidth: number; const nameSizeTest = addTextObject(0, 0, displayName, TextStyle.PARTY); @@ -1575,12 +1567,12 @@ class PartySlot extends Phaser.GameObjects.Container { } if (this.pokemon.isShiny()) { - const doubleShiny = this.pokemon.isFusion() && this.pokemon.shiny && this.pokemon.fusionShiny; + const doubleShiny = this.pokemon.isDoubleShiny(false); const shinyStar = globalScene.add.image(0, 0, `shiny_star_small${doubleShiny ? "_1" : ""}`); shinyStar.setOrigin(0, 0); shinyStar.setPositionRelative(this.slotName, -9, 3); - shinyStar.setTint(getVariantTint(!doubleShiny ? this.pokemon.getVariant() : this.pokemon.variant)); + shinyStar.setTint(getVariantTint(this.pokemon.getBaseVariant(doubleShiny))); slotInfoContainer.add(shinyStar); @@ -1588,7 +1580,9 @@ class PartySlot extends Phaser.GameObjects.Container { const fusionShinyStar = globalScene.add.image(0, 0, "shiny_star_small_2"); fusionShinyStar.setOrigin(0, 0); fusionShinyStar.setPosition(shinyStar.x, shinyStar.y); - fusionShinyStar.setTint(getVariantTint(this.pokemon.fusionVariant)); + fusionShinyStar.setTint( + getVariantTint(this.pokemon.summonData?.illusion?.basePokemon.fusionVariant ?? this.pokemon.fusionVariant), + ); slotInfoContainer.add(fusionShinyStar); } diff --git a/src/ui/rename-form-ui-handler.ts b/src/ui/rename-form-ui-handler.ts index 91c0025d283..7083f83865b 100644 --- a/src/ui/rename-form-ui-handler.ts +++ b/src/ui/rename-form-ui-handler.ts @@ -38,7 +38,7 @@ export default class RenameFormUiHandler extends FormModalUiHandler { if (super.show(args)) { const config = args[0] as ModalConfig; if (args[1] && typeof (args[1] as PlayerPokemon).getNameToRender === "function") { - this.inputs[0].text = (args[1] as PlayerPokemon).getNameToRender(); + this.inputs[0].text = (args[1] as PlayerPokemon).getNameToRender(false); } else { this.inputs[0].text = args[1]; } diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index 1e0924aa2c5..04bcf71d7ae 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -357,8 +357,14 @@ export default class SummaryUiHandler extends UiHandler { this.pokemonSprite.setPipelineData("isTerastallized", this.pokemon.isTerastallized); this.pokemonSprite.setPipelineData("ignoreTimeTint", true); this.pokemonSprite.setPipelineData("spriteKey", this.pokemon.getSpriteKey()); - this.pokemonSprite.setPipelineData("shiny", this.pokemon.shiny); - this.pokemonSprite.setPipelineData("variant", this.pokemon.variant); + this.pokemonSprite.setPipelineData( + "shiny", + this.pokemon.summonData?.illusion?.basePokemon.shiny ?? this.pokemon.shiny, + ); + this.pokemonSprite.setPipelineData( + "variant", + this.pokemon.summonData?.illusion?.basePokemon.variant ?? this.pokemon.variant, + ); ["spriteColors", "fusionSpriteColors"].map(k => { delete this.pokemonSprite.pipelineData[`${k}Base`]; if (this.pokemon?.summonData?.speciesForm) { @@ -368,7 +374,7 @@ export default class SummaryUiHandler extends UiHandler { }); this.pokemon.cry(); - this.nameText.setText(this.pokemon.getNameToRender()); + this.nameText.setText(this.pokemon.getNameToRender(false)); const isFusion = this.pokemon.isFusion(); @@ -426,8 +432,8 @@ export default class SummaryUiHandler extends UiHandler { this.friendshipShadow.setCrop(0, 0, 16, 16 - 16 * ((this.pokemon?.friendship || 0) / 255)); - const doubleShiny = isFusion && this.pokemon.shiny && this.pokemon.fusionShiny; - const baseVariant = !doubleShiny ? this.pokemon.getVariant() : this.pokemon.variant; + const doubleShiny = this.pokemon.isDoubleShiny(false); + const baseVariant = this.pokemon.getBaseVariant(doubleShiny); this.shinyIcon.setPositionRelative( this.nameText, @@ -435,7 +441,7 @@ export default class SummaryUiHandler extends UiHandler { 3, ); this.shinyIcon.setTexture(`shiny_star${doubleShiny ? "_1" : ""}`); - this.shinyIcon.setVisible(this.pokemon.isShiny()); + this.shinyIcon.setVisible(this.pokemon.isShiny(false)); this.shinyIcon.setTint(getVariantTint(baseVariant)); if (this.shinyIcon.visible) { const shinyDescriptor = @@ -455,7 +461,9 @@ export default class SummaryUiHandler extends UiHandler { this.fusionShinyIcon.setPosition(this.shinyIcon.x, this.shinyIcon.y); this.fusionShinyIcon.setVisible(doubleShiny); if (isFusion) { - this.fusionShinyIcon.setTint(getVariantTint(this.pokemon.fusionVariant)); + this.fusionShinyIcon.setTint( + getVariantTint(this.pokemon.summonData?.illusion?.basePokemon.fusionVariant ?? this.pokemon.fusionVariant), + ); } this.pokeball.setFrame(getPokeballAtlasKey(this.pokemon.pokeball)); @@ -838,7 +846,7 @@ export default class SummaryUiHandler extends UiHandler { return typeIcon; }; - const types = this.pokemon?.getTypes(false, false, true)!; // TODO: is this bang correct? + const types = this.pokemon?.getTypes(false, false, true, false)!; // TODO: is this bang correct? profileContainer.add(getTypeIcon(0, types[0])); if (types.length > 1) { profileContainer.add(getTypeIcon(1, types[1])); diff --git a/test/abilities/illusion.test.ts b/test/abilities/illusion.test.ts new file mode 100644 index 00000000000..aa77aa701b2 --- /dev/null +++ b/test/abilities/illusion.test.ts @@ -0,0 +1,144 @@ +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import Phaser from "phaser"; +import GameManager from "#test/testUtils/gameManager"; +import { Species } from "#enums/species"; +import { TurnEndPhase } from "#app/phases/turn-end-phase"; +import { Moves } from "#enums/moves"; +import { Abilities } from "#enums/abilities"; +import { PokeballType } from "#app/enums/pokeball"; +import { Gender } from "#app/data/gender"; + +describe("Abilities - Illusion", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override.battleType("single"); + game.override.enemySpecies(Species.ZORUA); + game.override.enemyAbility(Abilities.ILLUSION); + game.override.enemyMoveset(Moves.TACKLE); + game.override.enemyHeldItems([{ name: "WIDE_LENS", count: 3 }]); + + game.override.moveset([Moves.WORRY_SEED, Moves.SOAK, Moves.TACKLE]); + game.override.startingHeldItems([{ name: "WIDE_LENS", count: 3 }]); + }); + + it("creates illusion at the start", async () => { + await game.classicMode.startBattle([Species.ZOROARK, Species.AXEW]); + const zoroark = game.scene.getPlayerPokemon()!; + const zorua = game.scene.getEnemyPokemon()!; + + expect(!!zoroark.summonData?.illusion).equals(true); + expect(!!zorua.summonData?.illusion).equals(true); + }); + + it("break after receiving damaging move", async () => { + await game.classicMode.startBattle([Species.AXEW]); + game.move.select(Moves.TACKLE); + + await game.phaseInterceptor.to(TurnEndPhase); + + const zorua = game.scene.getEnemyPokemon()!; + + expect(!!zorua.summonData?.illusion).equals(false); + expect(zorua.name).equals("Zorua"); + }); + + it("break after getting ability changed", async () => { + await game.classicMode.startBattle([Species.AXEW]); + game.move.select(Moves.WORRY_SEED); + + await game.phaseInterceptor.to(TurnEndPhase); + + const zorua = game.scene.getEnemyPokemon()!; + + expect(!!zorua.summonData?.illusion).equals(false); + }); + + it("break if the ability is suppressed", async () => { + game.override.enemyAbility(Abilities.NEUTRALIZING_GAS); + await game.classicMode.startBattle([Species.KOFFING]); + + const zorua = game.scene.getEnemyPokemon()!; + + expect(!!zorua.summonData?.illusion).equals(false); + }); + + it("causes enemy AI to consider the illusion's type instead of the actual type when considering move effectiveness", async () => { + game.override.enemyMoveset([Moves.FLAMETHROWER, Moves.PSYCHIC, Moves.TACKLE]); + await game.classicMode.startBattle([Species.ZOROARK, Species.AXEW]); + + const enemy = game.scene.getEnemyPokemon()!; + const zoroark = game.scene.getPlayerPokemon()!; + + const flameThrower = enemy.getMoveset()[0]!.getMove(); + const psychic = enemy.getMoveset()[1]!.getMove(); + const flameThrowerEffectiveness = zoroark.getAttackTypeEffectiveness( + flameThrower.type, + enemy, + undefined, + undefined, + flameThrower, + true, + ); + const psychicEffectiveness = zoroark.getAttackTypeEffectiveness( + psychic.type, + enemy, + undefined, + undefined, + psychic, + true, + ); + expect(psychicEffectiveness).above(flameThrowerEffectiveness); + }); + + it("does not break from indirect damage", async () => { + game.override.enemySpecies(Species.GIGALITH); + game.override.enemyAbility(Abilities.SAND_STREAM); + game.override.enemyMoveset(Moves.WILL_O_WISP); + game.override.moveset([Moves.FLARE_BLITZ]); + + await game.classicMode.startBattle([Species.ZOROARK, Species.AZUMARILL]); + + game.move.select(Moves.FLARE_BLITZ); + + await game.phaseInterceptor.to(TurnEndPhase); + + const zoroark = game.scene.getPlayerPokemon()!; + + expect(!!zoroark.summonData?.illusion).equals(true); + }); + + it("copies the the name, nickname, gender, shininess, and pokeball from the illusion source", async () => { + game.override.enemyMoveset(Moves.SPLASH); + await game.classicMode.startBattle([Species.ABRA, Species.ZOROARK, Species.AXEW]); + const axew = game.scene.getPlayerParty().at(2)!; + axew.shiny = true; + axew.nickname = btoa(unescape(encodeURIComponent("axew nickname"))); + axew.gender = Gender.FEMALE; + axew.pokeball = PokeballType.GREAT_BALL; + + game.doSwitchPokemon(1); + + await game.phaseInterceptor.to(TurnEndPhase); + + const zoroark = game.scene.getPlayerPokemon()!; + + expect(zoroark.name).equals("Axew"); + expect(zoroark.getNameToRender()).equals("axew nickname"); + expect(zoroark.getGender(false, true)).equals(Gender.FEMALE); + expect(zoroark.isShiny(true)).equals(true); + expect(zoroark.getPokeball(true)).equals(PokeballType.GREAT_BALL); + }); +}); From c82e01eed377cacc5d3ffd2ef9caa27270e8a2dc Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Mon, 14 Apr 2025 10:31:26 -0500 Subject: [PATCH 021/262] [Refactor] Move many interfaces and enums to their own file (#5646) * Move LearnMoveSituation to its own file * Remove unused selfStatLowerMoves array * Move all-moves to its own file * Move TurnMove interface to its own file * move AiType to its own file * Move PokemonMove to its own file * Move DamageCalculationResult interface to its own file * Move fieldPosition to its own file * Move hit-result to its own file * Move DamageResult to its own file * Move SpeciesWildEvolutionDelay to its own file * move EvolutionItem to its own file --- src/@types/damage-result.ts | 10 + src/battle-scene.ts | 2 +- src/battle.ts | 3 +- src/data/ability.ts | 9 +- src/data/arena-tag.ts | 5 +- src/data/balance/egg-moves.ts | 2 +- src/data/balance/pokemon-evolutions.ts | 60 +---- src/data/battle-anims.ts | 3 +- src/data/battler-tags.ts | 5 +- src/data/berry.ts | 2 +- src/data/challenge.ts | 2 +- src/data/moves/all-moves.ts | 3 + src/data/moves/move.ts | 21 +- src/data/moves/pokemon-move.ts | 93 ++++++++ .../encounters/absolute-avarice-encounter.ts | 3 +- .../encounters/bug-type-superfan-encounter.ts | 4 +- .../encounters/clowning-around-encounter.ts | 2 +- .../encounters/dancing-lessons-encounter.ts | 3 +- .../encounters/field-trip-encounter.ts | 3 +- .../encounters/fiery-fallout-encounter.ts | 2 +- .../encounters/fun-and-games-encounter.ts | 2 +- .../global-trade-system-encounter.ts | 3 +- .../encounters/lost-at-sea-encounter.ts | 2 +- .../slumbering-snorlax-encounter.ts | 3 +- .../encounters/the-strong-stuff-encounter.ts | 2 +- .../encounters/trash-to-treasure-encounter.ts | 2 +- .../encounters/uncommon-breed-encounter.ts | 2 +- .../encounters/weird-dream-encounter.ts | 2 +- .../mystery-encounter-requirements.ts | 3 +- .../mystery-encounters/mystery-encounter.ts | 3 +- .../can-learn-move-requirement.ts | 2 +- .../utils/encounter-phase-utils.ts | 7 +- src/data/pokemon-forms.ts | 2 +- src/data/pokemon-species.ts | 7 +- src/data/trainers/trainer-config.ts | 2 +- src/enums/ai-type.ts | 5 + src/enums/evolution-item.ts | 48 ++++ src/enums/field-position.ts | 5 + src/enums/hit-result.ts | 15 ++ src/enums/learn-move-context.ts | 8 + src/enums/species-wild-evolution-delay.ts | 8 + src/field/damage-number-handler.ts | 4 +- src/field/pokemon.ts | 206 ++---------------- src/interfaces/attack-move-result.ts | 12 + src/interfaces/damage-calculation-result.ts | 11 + src/interfaces/turn-move.ts | 12 + src/modifier/modifier-type.ts | 9 +- src/modifier/modifier.ts | 2 +- src/overrides.ts | 2 +- src/phases/command-phase.ts | 5 +- src/phases/damage-anim-phase.ts | 3 +- src/phases/encounter-phase.ts | 2 +- src/phases/evolution-phase.ts | 10 +- src/phases/faint-phase.ts | 7 +- src/phases/learn-move-phase.ts | 2 +- src/phases/move-charge-phase.ts | 2 +- src/phases/move-effect-phase.ts | 5 +- src/phases/move-header-phase.ts | 2 +- src/phases/move-phase.ts | 4 +- src/phases/pokemon-heal-phase.ts | 2 +- src/phases/pokemon-transform-phase.ts | 2 +- src/phases/select-target-phase.ts | 2 +- src/phases/summon-phase.ts | 2 +- src/phases/switch-summon-phase.ts | 3 +- src/phases/toggle-double-position-phase.ts | 2 +- src/phases/turn-start-phase.ts | 5 +- src/phases/weather-effect-phase.ts | 2 +- src/system/game-data.ts | 2 +- src/system/pokemon-data.ts | 3 +- src/ui/fight-ui-handler.ts | 2 +- src/ui/modifier-select-ui-handler.ts | 2 +- src/ui/party-ui-handler.ts | 6 +- src/ui/pokedex-page-ui-handler.ts | 2 +- src/ui/pokedex-scan-ui-handler.ts | 2 +- src/ui/pokedex-ui-handler.ts | 2 +- src/ui/pokemon-hatch-info-container.ts | 2 +- src/ui/starter-select-ui-handler.ts | 2 +- src/ui/summary-ui-handler.ts | 3 +- test/abilities/aura_break.test.ts | 2 +- test/abilities/battery.test.ts | 2 +- test/abilities/battle_bond.test.ts | 3 +- test/abilities/flower_veil.test.ts | 2 +- test/abilities/friend_guard.test.ts | 2 +- test/abilities/galvanize.test.ts | 4 +- test/abilities/hustle.test.ts | 2 +- test/abilities/infiltrator.test.ts | 2 +- test/abilities/libero.test.ts | 2 +- test/abilities/magic_bounce.test.ts | 2 +- test/abilities/power_spot.test.ts | 2 +- test/abilities/protean.test.ts | 2 +- test/abilities/sap_sipper.test.ts | 3 +- test/abilities/serene_grace.test.ts | 2 +- test/abilities/sheer_force.test.ts | 3 +- test/abilities/steely_spirit.test.ts | 2 +- test/abilities/supreme_overlord.test.ts | 2 +- test/abilities/tera_shell.test.ts | 2 +- test/abilities/unburden.test.ts | 3 +- test/abilities/wimp_out.test.ts | 9 +- test/abilities/wonder_skin.test.ts | 2 +- test/arena/arena_gravity.test.ts | 2 +- test/arena/grassy_terrain.test.ts | 2 +- test/arena/weather_fog.test.ts | 2 +- test/arena/weather_strong_winds.test.ts | 2 +- test/battle/damage_calculation.test.ts | 2 +- test/battlerTags/substitute.test.ts | 6 +- test/enemy_command.test.ts | 4 +- test/evolution.test.ts | 7 +- test/imports.test.ts | 2 +- test/items/reviver_seed.test.ts | 2 +- test/moves/astonish.test.ts | 2 +- test/moves/aurora_veil.test.ts | 3 +- test/moves/burning_jealousy.test.ts | 2 +- test/moves/ceaseless_edge.test.ts | 2 +- test/moves/copycat.test.ts | 3 +- test/moves/destiny_bond.test.ts | 2 +- test/moves/diamond_storm.test.ts | 2 +- test/moves/dig.test.ts | 2 +- test/moves/dragon_tail.test.ts | 2 +- test/moves/dynamax_cannon.test.ts | 2 +- test/moves/effectiveness.test.ts | 2 +- test/moves/fell_stinger.test.ts | 2 +- test/moves/fly.test.ts | 2 +- test/moves/freezy_frost.test.ts | 2 +- test/moves/fusion_flare_bolt.test.ts | 2 +- test/moves/glaive_rush.test.ts | 2 +- test/moves/hard_press.test.ts | 2 +- test/moves/hyper_beam.test.ts | 2 +- test/moves/lash_out.test.ts | 2 +- test/moves/last_respects.test.ts | 2 +- test/moves/light_screen.test.ts | 3 +- test/moves/magic_coat.test.ts | 2 +- test/moves/metronome.test.ts | 3 +- test/moves/moongeist_beam.test.ts | 3 +- test/moves/pledge_moves.test.ts | 3 +- test/moves/powder.test.ts | 3 +- test/moves/protect.test.ts | 2 +- test/moves/rage_fist.test.ts | 2 +- test/moves/reflect.test.ts | 3 +- test/moves/retaliate.test.ts | 2 +- test/moves/rollout.test.ts | 2 +- test/moves/round.test.ts | 2 +- test/moves/scale_shot.test.ts | 2 +- test/moves/secret_power.test.ts | 2 +- test/moves/shell_side_arm.test.ts | 3 +- test/moves/shell_trap.test.ts | 2 +- test/moves/sketch.test.ts | 6 +- test/moves/solar_beam.test.ts | 2 +- test/moves/sparkly_swirl.test.ts | 2 +- test/moves/spectral_thief.test.ts | 2 +- test/moves/spit_up.test.ts | 4 +- test/moves/steamroller.test.ts | 4 +- test/moves/stockpile.test.ts | 2 +- test/moves/substitute.test.ts | 3 +- test/moves/swallow.test.ts | 2 +- test/moves/telekinesis.test.ts | 2 +- test/moves/tera_blast.test.ts | 5 +- test/moves/toxic.test.ts | 2 +- test/moves/triple_arrows.test.ts | 3 +- ...an-offer-you-cant-refuse-encounter.test.ts | 3 +- .../bug-type-superfan-encounter.test.ts | 2 +- .../clowning-around-encounter.test.ts | 2 +- .../dancing-lessons-encounter.test.ts | 2 +- .../fight-or-flight-encounter.test.ts | 2 +- .../encounters/part-timer-encounter.test.ts | 2 +- .../the-strong-stuff-encounter.test.ts | 2 +- .../trash-to-treasure-encounter.test.ts | 2 +- .../uncommon-breed-encounter.test.ts | 2 +- test/testUtils/helpers/moveHelper.ts | 2 +- 168 files changed, 490 insertions(+), 455 deletions(-) create mode 100644 src/@types/damage-result.ts create mode 100644 src/data/moves/all-moves.ts create mode 100644 src/data/moves/pokemon-move.ts create mode 100644 src/enums/ai-type.ts create mode 100644 src/enums/evolution-item.ts create mode 100644 src/enums/field-position.ts create mode 100644 src/enums/hit-result.ts create mode 100644 src/enums/learn-move-context.ts create mode 100644 src/enums/species-wild-evolution-delay.ts create mode 100644 src/interfaces/attack-move-result.ts create mode 100644 src/interfaces/damage-calculation-result.ts create mode 100644 src/interfaces/turn-move.ts diff --git a/src/@types/damage-result.ts b/src/@types/damage-result.ts new file mode 100644 index 00000000000..7086d843cf4 --- /dev/null +++ b/src/@types/damage-result.ts @@ -0,0 +1,10 @@ +import type { HitResult } from "#enums/hit-result"; + +export type DamageResult = + | HitResult.EFFECTIVE + | HitResult.SUPER_EFFECTIVE + | HitResult.NOT_VERY_EFFECTIVE + | HitResult.ONE_HIT_KO + | HitResult.CONFUSION + | HitResult.INDIRECT_KO + | HitResult.INDIRECT; diff --git a/src/battle-scene.ts b/src/battle-scene.ts index dd983f2b397..12dbfca68e8 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -51,7 +51,7 @@ import { initGameSpeed } from "#app/system/game-speed"; import { Arena, ArenaBase } from "#app/field/arena"; import { GameData } from "#app/system/game-data"; import { addTextObject, getTextColor, TextStyle } from "#app/ui/text"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "./data/moves/all-moves"; import { MusicPreference } from "#app/system/settings/settings"; import { getDefaultModifierTypeForTier, diff --git a/src/battle.ts b/src/battle.ts index fb5af223b8f..1122db2679a 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -15,7 +15,8 @@ import { MoneyMultiplierModifier, PokemonHeldItemModifier } from "./modifier/mod import type { PokeballType } from "#enums/pokeball"; import { trainerConfigs } from "#app/data/trainers/trainer-config"; import { SpeciesFormKey } from "#enums/species-form-key"; -import type { EnemyPokemon, PlayerPokemon, TurnMove } from "#app/field/pokemon"; +import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; +import type { TurnMove } from "./interfaces/turn-move"; import type Pokemon from "#app/field/pokemon"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattleSpec } from "#enums/battle-spec"; diff --git a/src/data/ability.ts b/src/data/ability.ts index 3e32a624f9f..02cc12dd0f4 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -1,6 +1,8 @@ -import type { EnemyPokemon, PokemonMove } from "../field/pokemon"; +import type { EnemyPokemon } from "../field/pokemon"; +import type { PokemonMove } from "./moves/pokemon-move"; import type Pokemon from "../field/pokemon"; -import { HitResult, MoveResult, PlayerPokemon } from "../field/pokemon"; +import { MoveResult, PlayerPokemon } from "../field/pokemon"; +import { HitResult } from "#enums/hit-result"; import { PokemonType } from "#enums/pokemon-type"; import { BooleanHolder, NumberHolder, toDmgValue, isNullOrUndefined, randSeedItem, randSeedInt, type Constructor } from "#app/utils"; import { getPokemonNameWithAffix } from "../messages"; @@ -10,7 +12,8 @@ import { BattlerTagLapseType, GroundedTag } from "./battler-tags"; import { getNonVolatileStatusEffects, getStatusEffectDescriptor, getStatusEffectHealText } from "#app/data/status-effect"; import { Gender } from "./gender"; import type Move from "./moves/move"; -import { AttackMove, FlinchAttr, OneHitKOAttr, HitHealAttr, allMoves, StatusMove, SelfStatusMove, VariablePowerAttr, applyMoveAttrs, VariableMoveTypeAttr, RandomMovesetMoveAttr, RandomMoveAttr, NaturePowerAttr, CopyMoveAttr, NeutralDamageAgainstFlyingTypeMultiplierAttr, FixedDamageAttr } from "./moves/move"; +import { AttackMove, FlinchAttr, OneHitKOAttr, HitHealAttr, StatusMove, SelfStatusMove, VariablePowerAttr, applyMoveAttrs, VariableMoveTypeAttr, RandomMovesetMoveAttr, RandomMoveAttr, NaturePowerAttr, CopyMoveAttr, NeutralDamageAgainstFlyingTypeMultiplierAttr, FixedDamageAttr } from "./moves/move"; +import { allMoves } from "./moves/all-moves"; import { MoveFlags } from "#enums/MoveFlags"; import { MoveTarget } from "#enums/MoveTarget"; import { MoveCategory } from "#enums/MoveCategory"; diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index 871f622f70a..c6a1515685f 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -2,12 +2,13 @@ import { globalScene } from "#app/global-scene"; import type { Arena } from "#app/field/arena"; import { PokemonType } from "#enums/pokemon-type"; import { BooleanHolder, NumberHolder, toDmgValue } from "#app/utils"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "./moves/all-moves"; import { MoveTarget } from "#enums/MoveTarget"; import { MoveCategory } from "#enums/MoveCategory"; import { getPokemonNameWithAffix } from "#app/messages"; import type Pokemon from "#app/field/pokemon"; -import { HitResult, PokemonMove } from "#app/field/pokemon"; +import { HitResult } from "#enums/hit-result"; +import { PokemonMove } from "./moves/pokemon-move"; import { StatusEffect } from "#enums/status-effect"; import type { BattlerIndex } from "#app/battle"; import { diff --git a/src/data/balance/egg-moves.ts b/src/data/balance/egg-moves.ts index 74f6a2c1afb..98f3347764c 100644 --- a/src/data/balance/egg-moves.ts +++ b/src/data/balance/egg-moves.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { getEnumKeys, getEnumValues } from "#app/utils"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/src/data/balance/pokemon-evolutions.ts b/src/data/balance/pokemon-evolutions.ts index 17f71f3c3c9..70b616be8e5 100644 --- a/src/data/balance/pokemon-evolutions.ts +++ b/src/data/balance/pokemon-evolutions.ts @@ -14,66 +14,10 @@ import { DamageMoneyRewardModifier, ExtraModifierModifier, MoneyMultiplierModifi import { SpeciesFormKey } from "#enums/species-form-key"; import { speciesStarterCosts } from "./starters"; import i18next from "i18next"; +import { SpeciesWildEvolutionDelay } from "#enums/species-wild-evolution-delay"; +import { EvolutionItem } from "#enums/evolution-item"; -export enum SpeciesWildEvolutionDelay { - NONE, - SHORT, - MEDIUM, - LONG, - VERY_LONG, - NEVER -} - -export enum EvolutionItem { - NONE, - - LINKING_CORD, - SUN_STONE, - MOON_STONE, - LEAF_STONE, - FIRE_STONE, - WATER_STONE, - THUNDER_STONE, - ICE_STONE, - DUSK_STONE, - DAWN_STONE, - SHINY_STONE, - CRACKED_POT, - SWEET_APPLE, - TART_APPLE, - STRAWBERRY_SWEET, - UNREMARKABLE_TEACUP, - UPGRADE, - DUBIOUS_DISC, - DRAGON_SCALE, - PRISM_SCALE, - RAZOR_CLAW, - RAZOR_FANG, - REAPER_CLOTH, - ELECTIRIZER, - MAGMARIZER, - PROTECTOR, - SACHET, - WHIPPED_DREAM, - SYRUPY_APPLE, - CHIPPED_POT, - GALARICA_CUFF, - GALARICA_WREATH, - AUSPICIOUS_ARMOR, - MALICIOUS_ARMOR, - MASTERPIECE_TEACUP, - SUN_FLUTE, - MOON_FLUTE, - - BLACK_AUGURITE = 51, - PEAT_BLOCK, - METAL_ALLOY, - SCROLL_OF_DARKNESS, - SCROLL_OF_WATERS, - LEADERS_CREST -} - /** * Pokemon Evolution tuple type consisting of: * @property 0 {@linkcode Species} The species of the Pokemon. diff --git a/src/data/battle-anims.ts b/src/data/battle-anims.ts index 511c80bee72..396cf71d984 100644 --- a/src/data/battle-anims.ts +++ b/src/data/battle-anims.ts @@ -1,5 +1,6 @@ import { globalScene } from "#app/global-scene"; -import { AttackMove, BeakBlastHeaderAttr, DelayedAttackAttr, SelfStatusMove, allMoves } from "./moves/move"; +import { AttackMove, BeakBlastHeaderAttr, DelayedAttackAttr, SelfStatusMove } from "./moves/move"; +import { allMoves } from "./moves/all-moves"; import { MoveFlags } from "#enums/MoveFlags"; import type Pokemon from "../field/pokemon"; import { type nil, getFrameMs, getEnumKeys, getEnumValues, animationFileName } from "../utils"; diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 76e91485460..c3dcfc49ef6 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -11,12 +11,12 @@ import { import { ChargeAnim, CommonAnim, CommonBattleAnim, MoveChargeAnim } from "#app/data/battle-anims"; import type Move from "#app/data/moves/move"; import { - allMoves, applyMoveAttrs, ConsecutiveUseDoublePowerAttr, HealOnAllyAttr, StatusCategoryOnAllyAttr, } from "#app/data/moves/move"; +import { allMoves } from "./moves/all-moves"; import { MoveFlags } from "#enums/MoveFlags"; import { MoveCategory } from "#enums/MoveCategory"; import { SpeciesFormChangeAbilityTrigger } from "#app/data/pokemon-forms"; @@ -24,7 +24,8 @@ import { getStatusEffectHealText } from "#app/data/status-effect"; import { TerrainType } from "#app/data/terrain"; import { PokemonType } from "#enums/pokemon-type"; import type Pokemon from "#app/field/pokemon"; -import { HitResult, MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#app/field/pokemon"; +import { HitResult } from "#enums/hit-result"; import { getPokemonNameWithAffix } from "#app/messages"; import { CommonAnimPhase } from "#app/phases/common-anim-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; diff --git a/src/data/berry.ts b/src/data/berry.ts index 8a58d337aa4..aaa0dda6e7f 100644 --- a/src/data/berry.ts +++ b/src/data/berry.ts @@ -1,6 +1,6 @@ import { getPokemonNameWithAffix } from "../messages"; import type Pokemon from "../field/pokemon"; -import { HitResult } from "../field/pokemon"; +import { HitResult } from "#enums/hit-result"; import { getStatusEffectHealText } from "./status-effect"; import { NumberHolder, toDmgValue, randSeedInt } from "#app/utils"; import { diff --git a/src/data/challenge.ts b/src/data/challenge.ts index 51616c3f00f..9a3c329a70b 100644 --- a/src/data/challenge.ts +++ b/src/data/challenge.ts @@ -6,7 +6,7 @@ import type PokemonSpecies from "#app/data/pokemon-species"; import { getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; import { speciesStarterCosts } from "#app/data/balance/starters"; import type Pokemon from "#app/field/pokemon"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "./moves/pokemon-move"; import type { FixedBattleConfig } from "#app/battle"; import { ClassicFixedBossWaves, BattleType, getRandomTrainerFunc } from "#app/battle"; import Trainer, { TrainerVariant } from "#app/field/trainer"; diff --git a/src/data/moves/all-moves.ts b/src/data/moves/all-moves.ts new file mode 100644 index 00000000000..c7b6d11a08d --- /dev/null +++ b/src/data/moves/all-moves.ts @@ -0,0 +1,3 @@ +import type Move from "./move"; + +export const allMoves: Move[] = []; diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 962a13bb840..591894f5f1e 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -12,16 +12,17 @@ import { TypeBoostTag, } from "../battler-tags"; import { getPokemonNameWithAffix } from "../../messages"; -import type { AttackMoveResult, TurnMove } from "../../field/pokemon"; +import type { AttackMoveResult } from "#app/interfaces/attack-move-result"; +import type { TurnMove } from "#app/interfaces/turn-move"; import type Pokemon from "../../field/pokemon"; import { EnemyPokemon, - FieldPosition, - HitResult, MoveResult, PlayerPokemon, - PokemonMove, } from "../../field/pokemon"; +import { HitResult } from "#enums/hit-result"; +import { FieldPosition } from "#enums/field-position"; +import { PokemonMove } from "./pokemon-move"; import { getNonVolatileStatusEffects, getStatusEffectHealText, @@ -121,6 +122,7 @@ import { MoveFlags } from "#enums/MoveFlags"; import { MoveEffectTrigger } from "#enums/MoveEffectTrigger"; import { MultiHitType } from "#enums/MultiHitType"; import { invalidAssistMoves, invalidCopycatMoves, invalidMetronomeMoves, invalidMirrorMoveMoves, invalidSleepTalkMoves } from "./invalid-moves"; +import { allMoves } from "./all-moves"; type MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => boolean; type UserMoveConditionFunc = (user: Pokemon, move: Move) => boolean; @@ -8257,11 +8259,7 @@ export function getMoveTargets(user: Pokemon, move: Moves, replaceTarget?: MoveT return { targets: set.filter(p => p?.isActive(true)).map(p => p.getBattlerIndex()).filter(t => t !== undefined), multiple }; } -export const allMoves: Move[] = [ - new SelfStatusMove(Moves.NONE, PokemonType.NORMAL, MoveCategory.STATUS, -1, -1, 0, 1), -]; - -export const selfStatLowerMoves: Moves[] = []; +allMoves.push(new SelfStatusMove(Moves.NONE, PokemonType.NORMAL, MoveCategory.STATUS, -1, -1, 0, 1)); export function initMoves() { allMoves.push( @@ -11250,9 +11248,4 @@ export function initMoves() { new AttackMove(Moves.MALIGNANT_CHAIN, PokemonType.POISON, MoveCategory.SPECIAL, 100, 100, 5, 50, 0, 9) .attr(StatusEffectAttr, StatusEffect.TOXIC) ); - allMoves.map(m => { - if (m.getAttrs(StatStageChangeAttr).some(a => a.selfTarget && a.stages < 0)) { - selfStatLowerMoves.push(m.id); - } - }); } diff --git a/src/data/moves/pokemon-move.ts b/src/data/moves/pokemon-move.ts new file mode 100644 index 00000000000..49ccaba698b --- /dev/null +++ b/src/data/moves/pokemon-move.ts @@ -0,0 +1,93 @@ +import * as Utils from "#app/utils"; +import { allMoves } from "./all-moves"; +import type { Moves } from "#enums/moves"; +import type Pokemon from "#app/field/pokemon"; +import type Move from "./move"; + +/** + * Wrapper class for the {@linkcode Move} class for Pokemon to interact with. + * These are the moves assigned to a {@linkcode Pokemon} object. + * It links to {@linkcode Move} class via the move ID. + * Compared to {@linkcode Move}, this class also tracks if a move has received. + * PP Ups, amount of PP used, and things like that. + * @see {@linkcode isUsable} - checks if move is restricted, out of PP, or not implemented. + * @see {@linkcode getMove} - returns {@linkcode Move} object by looking it up via ID. + * @see {@linkcode usePp} - removes a point of PP from the move. + * @see {@linkcode getMovePp} - returns amount of PP a move currently has. + * @see {@linkcode getPpRatio} - returns the current PP amount / max PP amount. + * @see {@linkcode getName} - returns name of {@linkcode Move}. + **/ +export class PokemonMove { + public moveId: Moves; + public ppUsed: number; + public ppUp: number; + public virtual: boolean; + + /** + * If defined and nonzero, overrides the maximum PP of the move (e.g., due to move being copied by Transform). + * This also nullifies all effects of `ppUp`. + */ + public maxPpOverride?: number; + + constructor(moveId: Moves, ppUsed = 0, ppUp = 0, virtual = false, maxPpOverride?: number) { + this.moveId = moveId; + this.ppUsed = ppUsed; + this.ppUp = ppUp; + this.virtual = virtual; + this.maxPpOverride = maxPpOverride; + } + + /** + * Checks whether the move can be selected or performed by a Pokemon, without consideration for the move's targets. + * The move is unusable if it is out of PP, restricted by an effect, or unimplemented. + * + * @param pokemon - {@linkcode Pokemon} that would be using this move + * @param ignorePp - If `true`, skips the PP check + * @param ignoreRestrictionTags - If `true`, skips the check for move restriction tags (see {@link MoveRestrictionBattlerTag}) + * @returns `true` if the move can be selected and used by the Pokemon, otherwise `false`. + */ + isUsable(pokemon: Pokemon, ignorePp = false, ignoreRestrictionTags = false): boolean { + if (this.moveId && !ignoreRestrictionTags && pokemon.isMoveRestricted(this.moveId, pokemon)) { + return false; + } + + if (this.getMove().name.endsWith(" (N)")) { + return false; + } + + return ignorePp || this.ppUsed < this.getMovePp() || this.getMove().pp === -1; + } + + getMove(): Move { + return allMoves[this.moveId]; + } + + /** + * Sets {@link ppUsed} for this move and ensures the value does not exceed {@link getMovePp} + * @param {number} count Amount of PP to use + */ + usePp(count = 1) { + this.ppUsed = Math.min(this.ppUsed + count, this.getMovePp()); + } + + getMovePp(): number { + return this.maxPpOverride || this.getMove().pp + this.ppUp * Utils.toDmgValue(this.getMove().pp / 5); + } + + getPpRatio(): number { + return 1 - this.ppUsed / this.getMovePp(); + } + + getName(): string { + return this.getMove().name; + } + + /** + * Copies an existing move or creates a valid PokemonMove object from json representing one + * @param source - The data for the move to copy + * @return A valid pokemonmove object + */ + static loadMove(source: PokemonMove | any): PokemonMove { + return new PokemonMove(source.moveId, source.ppUsed, source.ppUp, source.virtual, source.maxPpOverride); + } +} diff --git a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts index 85f40a41e51..b781f14fad1 100644 --- a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts +++ b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts @@ -7,7 +7,8 @@ import { transitionMysteryEncounterIntroVisuals, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import type Pokemon from "#app/field/pokemon"; -import { EnemyPokemon, PokemonMove } from "#app/field/pokemon"; +import { EnemyPokemon } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import type { BerryModifierType, PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; import { modifierTypes } from "#app/modifier/modifier-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; diff --git a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts index 1e4c9a3b957..c6971c42364 100644 --- a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts +++ b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts @@ -24,7 +24,7 @@ import { TrainerType } from "#enums/trainer-type"; import { Species } from "#enums/species"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { getEncounterText, showEncounterDialogue } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { LearnMovePhase } from "#app/phases/learn-move-phase"; import { Moves } from "#enums/moves"; @@ -50,7 +50,7 @@ import { } from "#app/modifier/modifier"; import i18next from "i18next"; import MoveInfoOverlay from "#app/ui/move-info-overlay"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; import { getSpriteKeysFromSpecies } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; diff --git a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts index eca99fc0c13..15fad6dacbf 100644 --- a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts +++ b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts @@ -37,7 +37,7 @@ import { Mode } from "#app/ui/ui"; import i18next from "i18next"; import type { OptionSelectConfig } from "#app/ui/abstact-option-select-ui-handler"; import type { PlayerPokemon } from "#app/field/pokemon"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { Ability } from "#app/data/ability"; import { BerryModifier } from "#app/modifier/modifier"; import { BerryType } from "#enums/berry-type"; diff --git a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts index 75527e1f8c1..90ea6a69c0d 100644 --- a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts +++ b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts @@ -23,7 +23,8 @@ import { getPokemonSpecies } from "#app/data/pokemon-species"; import { TrainerSlot } from "#enums/trainer-slot"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { EnemyPokemon, PokemonMove } from "#app/field/pokemon"; +import { EnemyPokemon } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; import { modifierTypes } from "#app/modifier/modifier-type"; import { LearnMovePhase } from "#app/phases/learn-move-phase"; diff --git a/src/data/mystery-encounters/encounters/field-trip-encounter.ts b/src/data/mystery-encounters/encounters/field-trip-encounter.ts index a1964aa5ab4..4e330fab3d9 100644 --- a/src/data/mystery-encounters/encounters/field-trip-encounter.ts +++ b/src/data/mystery-encounters/encounters/field-trip-encounter.ts @@ -7,7 +7,8 @@ import { setEncounterExp, setEncounterRewards, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import type { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import type { PokemonMove } from "#app/data/moves/pokemon-move"; import { modifierTypes } from "#app/modifier/modifier-type"; import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; diff --git a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts index 6118fe3d0de..d868184a7fa 100644 --- a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts +++ b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts @@ -26,7 +26,7 @@ import { Gender } from "#app/data/gender"; import { PokemonType } from "#enums/pokemon-type"; import { BattlerIndex } from "#app/battle"; import type Pokemon from "#app/field/pokemon"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { Moves } from "#enums/moves"; import { EncounterBattleAnim } from "#app/data/battle-anims"; import { WeatherType } from "#enums/weather-type"; diff --git a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts index 282c6c149ff..a9fc24c70b7 100644 --- a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts +++ b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts @@ -13,7 +13,7 @@ import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/myst import { TrainerSlot } from "#enums/trainer-slot"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { FieldPosition } from "#app/field/pokemon"; +import { FieldPosition } from "#enums/field-position"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { MoneyRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import { queueEncounterMessage, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; diff --git a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts index f80620647b0..fce496e5e17 100644 --- a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts +++ b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts @@ -26,7 +26,8 @@ import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode import { NumberHolder, isNullOrUndefined, randInt, randSeedInt, randSeedShuffle, randSeedItem } from "#app/utils"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { EnemyPokemon, PokemonMove } from "#app/field/pokemon"; +import { EnemyPokemon } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import type { PokemonHeldItemModifier } from "#app/modifier/modifier"; import { HiddenAbilityRateBoosterModifier, diff --git a/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts b/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts index 97fd5783ebb..030678b77b1 100644 --- a/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts +++ b/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts @@ -11,7 +11,7 @@ import { applyDamageToPokemon } from "#app/data/mystery-encounters/utils/encount import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; const OPTION_1_REQUIRED_MOVE = Moves.SURF; const OPTION_2_REQUIRED_MOVE = Moves.FLY; diff --git a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts index bfa1204a8ba..97a17af43d0 100644 --- a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts +++ b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts @@ -21,7 +21,8 @@ import { import { queueEncounterMessage } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { Moves } from "#enums/moves"; import { BattlerIndex } from "#app/battle"; -import { AiType, PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { AiType } from "#enums/ai-type"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; diff --git a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts index c994c6e993f..af0363f37e3 100644 --- a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts @@ -17,7 +17,7 @@ import { getPokemonSpecies } from "#app/data/pokemon-species"; import { Species } from "#enums/species"; import { Nature } from "#enums/nature"; import type Pokemon from "#app/field/pokemon"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { queueEncounterMessage, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { modifyPlayerPokemonBST } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import { Moves } from "#enums/moves"; diff --git a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts index e60fe0ddc18..2203ac041f8 100644 --- a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts +++ b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts @@ -25,7 +25,7 @@ import { ModifierTier } from "#app/modifier/modifier-tier"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { Moves } from "#enums/moves"; import { BattlerIndex } from "#app/battle"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; import { randSeedInt } from "#app/utils"; diff --git a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts index ed1866c7a1b..4e3c238aeba 100644 --- a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts +++ b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts @@ -10,7 +10,7 @@ import { import { CHARMING_MOVES } from "#app/data/mystery-encounters/requirements/requirement-groups"; import type Pokemon from "#app/field/pokemon"; import type { EnemyPokemon } from "#app/field/pokemon"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { globalScene } from "#app/global-scene"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; diff --git a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts index 22ec52e976c..be0c0bdff54 100644 --- a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts +++ b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts @@ -16,7 +16,7 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { NumberHolder, isNullOrUndefined, randSeedInt, randSeedShuffle } from "#app/utils"; import type PokemonSpecies from "#app/data/pokemon-species"; import { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species"; diff --git a/src/data/mystery-encounters/mystery-encounter-requirements.ts b/src/data/mystery-encounters/mystery-encounter-requirements.ts index f9aedf2c1a7..0c146fe485d 100644 --- a/src/data/mystery-encounters/mystery-encounter-requirements.ts +++ b/src/data/mystery-encounters/mystery-encounter-requirements.ts @@ -1,6 +1,7 @@ import { globalScene } from "#app/global-scene"; import { allAbilities } from "#app/data/ability"; -import { EvolutionItem, pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; +import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; +import { EvolutionItem } from "#enums/evolution-item"; import { Nature } from "#enums/nature"; import { FormChangeItem, pokemonFormChanges, SpeciesFormChangeItemTrigger } from "#app/data/pokemon-forms"; import { StatusEffect } from "#enums/status-effect"; diff --git a/src/data/mystery-encounters/mystery-encounter.ts b/src/data/mystery-encounters/mystery-encounter.ts index ff098d4d7dd..8010983f9f3 100644 --- a/src/data/mystery-encounters/mystery-encounter.ts +++ b/src/data/mystery-encounters/mystery-encounter.ts @@ -1,5 +1,6 @@ import type { EnemyPartyConfig } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import type { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import type { PokemonMove } from "../moves/pokemon-move"; import type Pokemon from "#app/field/pokemon"; import { capitalizeFirstLetter, isNullOrUndefined } from "#app/utils"; import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; diff --git a/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts b/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts index a7ffe3e26ca..598b0ffae70 100644 --- a/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts +++ b/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts @@ -1,6 +1,6 @@ import type { Moves } from "#app/enums/moves"; import type { PlayerPokemon } from "#app/field/pokemon"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { isNullOrUndefined } from "#app/utils"; import { EncounterPokemonRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import { globalScene } from "#app/global-scene"; diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index a9f6b787878..6ab650d5f9b 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -7,9 +7,12 @@ import { WEIGHT_INCREMENT_ON_SPAWN_MISS, } from "#app/data/mystery-encounters/mystery-encounters"; import { showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; -import type { AiType, PlayerPokemon } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import type { AiType } from "#enums/ai-type"; import type Pokemon from "#app/field/pokemon"; -import { EnemyPokemon, FieldPosition, PokemonMove, PokemonSummonData } from "#app/field/pokemon"; +import { EnemyPokemon, PokemonSummonData } from "#app/field/pokemon"; +import { FieldPosition } from "#enums/field-position"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import type { CustomModifierSettings, ModifierType } from "#app/modifier/modifier-type"; import { getPartyLuckValue, diff --git a/src/data/pokemon-forms.ts b/src/data/pokemon-forms.ts index 63e166c7fc4..6f36bfde74f 100644 --- a/src/data/pokemon-forms.ts +++ b/src/data/pokemon-forms.ts @@ -1,7 +1,7 @@ import { PokemonFormChangeItemModifier } from "../modifier/modifier"; import type Pokemon from "../field/pokemon"; import { StatusEffect } from "#enums/status-effect"; -import { allMoves } from "./moves/move"; +import { allMoves } from "./moves/all-moves"; import { MoveCategory } from "#enums/MoveCategory"; import type { Constructor, nil } from "#app/utils"; import { Abilities } from "#enums/abilities"; diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index a27c00121dc..ced828fbc6b 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -13,11 +13,8 @@ import { uncatchableSpecies } from "#app/data/balance/biomes"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { GrowthRate } from "#app/data/exp"; import type { EvolutionLevel } from "#app/data/balance/pokemon-evolutions"; -import { - SpeciesWildEvolutionDelay, - pokemonEvolutions, - pokemonPrevolutions, -} from "#app/data/balance/pokemon-evolutions"; +import { pokemonEvolutions, pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; +import { SpeciesWildEvolutionDelay } from "#enums/species-wild-evolution-delay"; import { PokemonType } from "#enums/pokemon-type"; import type { LevelMoves } from "#app/data/balance/pokemon-level-moves"; import { diff --git a/src/data/trainers/trainer-config.ts b/src/data/trainers/trainer-config.ts index 0ab7119dab9..c87f72bd912 100644 --- a/src/data/trainers/trainer-config.ts +++ b/src/data/trainers/trainer-config.ts @@ -1,6 +1,6 @@ import { globalScene } from "#app/global-scene"; import { modifierTypes } from "#app/modifier/modifier-type"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { toReadableString, isNullOrUndefined, randSeedItem, randSeedInt } from "#app/utils"; import { pokemonEvolutions, pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; import { getPokemonSpecies } from "#app/data/pokemon-species"; diff --git a/src/enums/ai-type.ts b/src/enums/ai-type.ts new file mode 100644 index 00000000000..13931172a4a --- /dev/null +++ b/src/enums/ai-type.ts @@ -0,0 +1,5 @@ +export enum AiType { + RANDOM, + SMART_RANDOM, + SMART +} diff --git a/src/enums/evolution-item.ts b/src/enums/evolution-item.ts new file mode 100644 index 00000000000..3b5e493b378 --- /dev/null +++ b/src/enums/evolution-item.ts @@ -0,0 +1,48 @@ +export enum EvolutionItem { + NONE, + + LINKING_CORD, + SUN_STONE, + MOON_STONE, + LEAF_STONE, + FIRE_STONE, + WATER_STONE, + THUNDER_STONE, + ICE_STONE, + DUSK_STONE, + DAWN_STONE, + SHINY_STONE, + CRACKED_POT, + SWEET_APPLE, + TART_APPLE, + STRAWBERRY_SWEET, + UNREMARKABLE_TEACUP, + UPGRADE, + DUBIOUS_DISC, + DRAGON_SCALE, + PRISM_SCALE, + RAZOR_CLAW, + RAZOR_FANG, + REAPER_CLOTH, + ELECTIRIZER, + MAGMARIZER, + PROTECTOR, + SACHET, + WHIPPED_DREAM, + SYRUPY_APPLE, + CHIPPED_POT, + GALARICA_CUFF, + GALARICA_WREATH, + AUSPICIOUS_ARMOR, + MALICIOUS_ARMOR, + MASTERPIECE_TEACUP, + SUN_FLUTE, + MOON_FLUTE, + + BLACK_AUGURITE = 51, + PEAT_BLOCK, + METAL_ALLOY, + SCROLL_OF_DARKNESS, + SCROLL_OF_WATERS, + LEADERS_CREST +} diff --git a/src/enums/field-position.ts b/src/enums/field-position.ts new file mode 100644 index 00000000000..5b7f9c6c570 --- /dev/null +++ b/src/enums/field-position.ts @@ -0,0 +1,5 @@ +export enum FieldPosition { + CENTER, + LEFT, + RIGHT +} diff --git a/src/enums/hit-result.ts b/src/enums/hit-result.ts new file mode 100644 index 00000000000..3e62587dd6c --- /dev/null +++ b/src/enums/hit-result.ts @@ -0,0 +1,15 @@ +export enum HitResult { + EFFECTIVE = 1, + SUPER_EFFECTIVE, + NOT_VERY_EFFECTIVE, + ONE_HIT_KO, + NO_EFFECT, + STATUS, + HEAL, + FAIL, + MISS, + INDIRECT, + IMMUNE, + CONFUSION, + INDIRECT_KO +} diff --git a/src/enums/learn-move-context.ts b/src/enums/learn-move-context.ts new file mode 100644 index 00000000000..26001cbcce8 --- /dev/null +++ b/src/enums/learn-move-context.ts @@ -0,0 +1,8 @@ +export enum LearnMoveContext { + MISC, + LEVEL_UP, + RELEARN, + EVOLUTION, + EVOLUTION_FUSED, // If fusionSpecies has Evolved + EVOLUTION_FUSED_BASE, // If fusion's base species has Evolved +} diff --git a/src/enums/species-wild-evolution-delay.ts b/src/enums/species-wild-evolution-delay.ts new file mode 100644 index 00000000000..7555dc0e8f6 --- /dev/null +++ b/src/enums/species-wild-evolution-delay.ts @@ -0,0 +1,8 @@ +export enum SpeciesWildEvolutionDelay { + NONE, + SHORT, + MEDIUM, + LONG, + VERY_LONG, + NEVER +} diff --git a/src/field/damage-number-handler.ts b/src/field/damage-number-handler.ts index a527b148fff..3bb001bf005 100644 --- a/src/field/damage-number-handler.ts +++ b/src/field/damage-number-handler.ts @@ -1,7 +1,7 @@ import { TextStyle, addTextObject } from "../ui/text"; -import type { DamageResult } from "./pokemon"; +import type { DamageResult } from "#app/@types/damage-result"; import type Pokemon from "./pokemon"; -import { HitResult } from "./pokemon"; +import { HitResult } from "#enums/hit-result"; import { formatStat, fixedInt } from "#app/utils"; import type { BattlerIndex } from "../battle"; import { globalScene } from "#app/global-scene"; diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index b59b7ba01fe..162a5118f65 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -17,7 +17,6 @@ import { applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, - allMoves, TypelessAttr, CritOnlyAttr, getMoveTargets, @@ -42,6 +41,7 @@ import { VariableMoveTypeChartAttr, HpSplitAttr, } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { MoveTarget } from "#enums/MoveTarget"; import { MoveCategory } from "#enums/MoveCategory"; import type { PokemonSpeciesForm } from "#app/data/pokemon-species"; @@ -214,7 +214,7 @@ import { SpeciesFormChangeActiveTrigger, SpeciesFormChangeLapseTeraTrigger, SpeciesFormChangeMoveLearnedTrigger, - SpeciesFormChangePostMoveTrigger + SpeciesFormChangePostMoveTrigger, } from "#app/data/pokemon-forms"; import { TerrainType } from "#app/data/terrain"; import type { TrainerSlot } from "#enums/trainer-slot"; @@ -259,21 +259,15 @@ import { MoveFlags } from "#enums/MoveFlags"; import { timedEventManager } from "#app/global-event-manager"; import { loadMoveAnimations } from "#app/sprites/pokemon-asset-loader"; import { ResetStatusPhase } from "#app/phases/reset-status-phase"; - -export enum LearnMoveSituation { - MISC, - LEVEL_UP, - RELEARN, - EVOLUTION, - EVOLUTION_FUSED, // If fusionSpecies has Evolved - EVOLUTION_FUSED_BASE, // If fusion's base species has Evolved -} - -export enum FieldPosition { - CENTER, - LEFT, - RIGHT, -} +import { LearnMoveContext } from "#enums/learn-move-context"; +import { TurnMove } from "#app/interfaces/turn-move"; +import { AiType } from "#enums/ai-type"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { DamageCalculationResult } from "#app/interfaces/damage-calculation-result"; +import { FieldPosition } from "#enums/field-position"; +import { AttackMoveResult } from "#app/interfaces/attack-move-result"; +import { HitResult } from "#enums/hit-result"; +import { DamageResult } from "#app/@types/damage-result"; export default abstract class Pokemon extends Phaser.GameObjects.Container { public id: number; @@ -2925,7 +2919,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { includeEvolutionMoves = false, simulateEvolutionChain = false, includeRelearnerMoves = false, - learnSituation: LearnMoveSituation = LearnMoveSituation.MISC, + learnSituation: LearnMoveContext = LearnMoveContext.MISC, ): LevelMoves { const ret: LevelMoves = []; let levelMoves: LevelMoves = []; @@ -2933,7 +2927,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { startingLevel = this.level; } if ( - learnSituation === LearnMoveSituation.EVOLUTION_FUSED && + learnSituation === LearnMoveContext.EVOLUTION_FUSED && this.fusionSpecies ) { // For fusion evolutions, get ONLY the moves of the component mon that evolved @@ -2985,7 +2979,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } if ( this.fusionSpecies && - learnSituation !== LearnMoveSituation.EVOLUTION_FUSED_BASE + learnSituation !== LearnMoveContext.EVOLUTION_FUSED_BASE ) { // For fusion evolutions, get ONLY the moves of the component mon that evolved if (simulateEvolutionChain) { @@ -7779,24 +7773,6 @@ interface IllusionData { level?: number } -export interface TurnMove { - move: Moves; - targets: BattlerIndex[]; - result?: MoveResult; - virtual?: boolean; - turn?: number; - ignorePP?: boolean; -} - -export interface AttackMoveResult { - move: Moves; - result: DamageResult; - damage: number; - critical: boolean; - sourceId: number; - sourceBattlerIndex: BattlerIndex; -} - export class PokemonSummonData { /** [Atk, Def, SpAtk, SpDef, Spd, Acc, Eva] */ public statStages: number[] = [0, 0, 0, 0, 0, 0, 0]; @@ -7869,12 +7845,6 @@ export class PokemonTurnData { public extraTurns = 0; } -export enum AiType { - RANDOM, - SMART_RANDOM, - SMART, -} - export enum MoveResult { PENDING, SUCCESS, @@ -7882,151 +7852,3 @@ export enum MoveResult { MISS, OTHER, } - -export enum HitResult { - EFFECTIVE = 1, - SUPER_EFFECTIVE, - NOT_VERY_EFFECTIVE, - ONE_HIT_KO, - NO_EFFECT, - STATUS, - HEAL, - FAIL, - MISS, - INDIRECT, - IMMUNE, - CONFUSION, - INDIRECT_KO, -} - -export type DamageResult = - | HitResult.EFFECTIVE - | HitResult.SUPER_EFFECTIVE - | HitResult.NOT_VERY_EFFECTIVE - | HitResult.ONE_HIT_KO - | HitResult.CONFUSION - | HitResult.INDIRECT_KO - | HitResult.INDIRECT; - -/** Interface containing the results of a damage calculation for a given move */ -export interface DamageCalculationResult { - /** `true` if the move was cancelled (thus suppressing "No Effect" messages) */ - cancelled: boolean; - /** The effectiveness of the move */ - result: HitResult; - /** The damage dealt by the move */ - damage: number; -} - -/** - * Wrapper class for the {@linkcode Move} class for Pokemon to interact with. - * These are the moves assigned to a {@linkcode Pokemon} object. - * It links to {@linkcode Move} class via the move ID. - * Compared to {@linkcode Move}, this class also tracks if a move has received. - * PP Ups, amount of PP used, and things like that. - * @see {@linkcode isUsable} - checks if move is restricted, out of PP, or not implemented. - * @see {@linkcode getMove} - returns {@linkcode Move} object by looking it up via ID. - * @see {@linkcode usePp} - removes a point of PP from the move. - * @see {@linkcode getMovePp} - returns amount of PP a move currently has. - * @see {@linkcode getPpRatio} - returns the current PP amount / max PP amount. - * @see {@linkcode getName} - returns name of {@linkcode Move}. - **/ -export class PokemonMove { - public moveId: Moves; - public ppUsed: number; - public ppUp: number; - public virtual: boolean; - - /** - * If defined and nonzero, overrides the maximum PP of the move (e.g., due to move being copied by Transform). - * This also nullifies all effects of `ppUp`. - */ - public maxPpOverride?: number; - - constructor( - moveId: Moves, - ppUsed = 0, - ppUp = 0, - virtual = false, - maxPpOverride?: number, - ) { - this.moveId = moveId; - this.ppUsed = ppUsed; - this.ppUp = ppUp; - this.virtual = virtual; - this.maxPpOverride = maxPpOverride; - } - - /** - * Checks whether the move can be selected or performed by a Pokemon, without consideration for the move's targets. - * The move is unusable if it is out of PP, restricted by an effect, or unimplemented. - * - * @param {Pokemon} pokemon {@linkcode Pokemon} that would be using this move - * @param {boolean} ignorePp If `true`, skips the PP check - * @param {boolean} ignoreRestrictionTags If `true`, skips the check for move restriction tags (see {@link MoveRestrictionBattlerTag}) - * @returns `true` if the move can be selected and used by the Pokemon, otherwise `false`. - */ - isUsable( - pokemon: Pokemon, - ignorePp = false, - ignoreRestrictionTags = false, - ): boolean { - if ( - this.moveId && - !ignoreRestrictionTags && - pokemon.isMoveRestricted(this.moveId, pokemon) - ) { - return false; - } - - if (this.getMove().name.endsWith(" (N)")) { - return false; - } - - return ( - ignorePp || this.ppUsed < this.getMovePp() || this.getMove().pp === -1 - ); - } - - getMove(): Move { - return allMoves[this.moveId]; - } - - /** - * Sets {@link ppUsed} for this move and ensures the value does not exceed {@link getMovePp} - * @param {number} count Amount of PP to use - */ - usePp(count = 1) { - this.ppUsed = Math.min(this.ppUsed + count, this.getMovePp()); - } - - getMovePp(): number { - return ( - this.maxPpOverride || - this.getMove().pp + this.ppUp * toDmgValue(this.getMove().pp / 5) - ); - } - - getPpRatio(): number { - return 1 - this.ppUsed / this.getMovePp(); - } - - getName(): string { - return this.getMove().name; - } - - /** - * Copies an existing move or creates a valid PokemonMove object from json representing one - * @param {PokemonMove | any} source The data for the move to copy - * @return {PokemonMove} A valid pokemonmove object - */ - static loadMove(source: PokemonMove | any): PokemonMove { - return new PokemonMove( - source.moveId, - source.ppUsed, - source.ppUp, - source.virtual, - source.maxPpOverride, - ); - } -} diff --git a/src/interfaces/attack-move-result.ts b/src/interfaces/attack-move-result.ts new file mode 100644 index 00000000000..f91d31a69ee --- /dev/null +++ b/src/interfaces/attack-move-result.ts @@ -0,0 +1,12 @@ +import type { BattlerIndex } from "#app/battle"; +import type { DamageResult } from "#app/@types/damage-result"; +import type { Moves } from "#enums/moves"; + +export interface AttackMoveResult { + move: Moves; + result: DamageResult; + damage: number; + critical: boolean; + sourceId: number; + sourceBattlerIndex: BattlerIndex; +} diff --git a/src/interfaces/damage-calculation-result.ts b/src/interfaces/damage-calculation-result.ts new file mode 100644 index 00000000000..1220ff7b57d --- /dev/null +++ b/src/interfaces/damage-calculation-result.ts @@ -0,0 +1,11 @@ +import type { HitResult } from "#enums/hit-result"; + +/** Interface containing the results of a damage calculation for a given move */ +export interface DamageCalculationResult { + /** `true` if the move was cancelled (thus suppressing "No Effect" messages) */ + cancelled: boolean; + /** The effectiveness of the move */ + result: HitResult; + /** The damage dealt by the move */ + damage: number; +} diff --git a/src/interfaces/turn-move.ts b/src/interfaces/turn-move.ts new file mode 100644 index 00000000000..639d309256e --- /dev/null +++ b/src/interfaces/turn-move.ts @@ -0,0 +1,12 @@ +import type { BattlerIndex } from "#app/battle"; +import type { MoveResult } from "#app/field/pokemon"; +import type { Moves } from "#enums/moves"; + +export interface TurnMove { + move: Moves; + targets: BattlerIndex[]; + result?: MoveResult; + virtual?: boolean; + turn?: number; + ignorePP?: boolean; +} diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 8feb60c7778..852593d922c 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -1,8 +1,10 @@ import { globalScene } from "#app/global-scene"; -import { EvolutionItem, pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; +import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; +import { EvolutionItem } from "#enums/evolution-item"; import { tmPoolTiers, tmSpecies } from "#app/data/balance/tms"; import { getBerryEffectDescription, getBerryName } from "#app/data/berry"; -import { allMoves, AttackMove } from "#app/data/moves/move"; +import { AttackMove } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { getNatureName, getNatureStatMultiplier } from "#app/data/nature"; import { getPokeballCatchMultiplier, getPokeballName, MAX_PER_TYPE_POKEBALLS } from "#app/data/pokeball"; import { @@ -13,7 +15,8 @@ import { } from "#app/data/pokemon-forms"; import { getStatusEffectDescriptor } from "#app/data/status-effect"; import { PokemonType } from "#enums/pokemon-type"; -import type { EnemyPokemon, PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; +import type { PokemonMove } from "#app/data/moves/pokemon-move"; import type Pokemon from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 80f14ba22ce..7860d0f9296 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -1,7 +1,7 @@ import { FusionSpeciesFormEvolution, pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { getBerryEffectFunc, getBerryPredicate } from "#app/data/berry"; import { getLevelTotalExp } from "#app/data/exp"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { MAX_PER_TYPE_POKEBALLS } from "#app/data/pokeball"; import { type FormChangeItem, SpeciesFormChangeItemTrigger } from "#app/data/pokemon-forms"; import { getStatusEffectHealText } from "#app/data/status-effect"; diff --git a/src/overrides.ts b/src/overrides.ts index 21c72cd7b98..49efb5eed33 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -1,5 +1,5 @@ import { type PokeballCounts } from "#app/battle-scene"; -import { EvolutionItem } from "#app/data/balance/pokemon-evolutions"; +import { EvolutionItem } from "#enums/evolution-item"; import { Gender } from "#app/data/gender"; import { FormChangeItem } from "#app/data/pokemon-forms"; import { Variant } from "#app/sprites/variant"; diff --git a/src/phases/command-phase.ts b/src/phases/command-phase.ts index 8691ac453ca..c65f121d20e 100644 --- a/src/phases/command-phase.ts +++ b/src/phases/command-phase.ts @@ -11,8 +11,9 @@ import { BattlerTagType } from "#app/enums/battler-tag-type"; import { Biome } from "#app/enums/biome"; import { Moves } from "#app/enums/moves"; import { PokeballType } from "#enums/pokeball"; -import type { PlayerPokemon, TurnMove } from "#app/field/pokemon"; -import { FieldPosition } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import type { TurnMove } from "#app/interfaces/turn-move"; +import { FieldPosition } from "#enums/field-position"; import { getPokemonNameWithAffix } from "#app/messages"; import { Command } from "#app/ui/command-ui-handler"; import { Mode } from "#app/ui/ui"; diff --git a/src/phases/damage-anim-phase.ts b/src/phases/damage-anim-phase.ts index 696a2e55b6f..91b21376515 100644 --- a/src/phases/damage-anim-phase.ts +++ b/src/phases/damage-anim-phase.ts @@ -1,7 +1,8 @@ import { globalScene } from "#app/global-scene"; import type { BattlerIndex } from "#app/battle"; import { BattleSpec } from "#enums/battle-spec"; -import { type DamageResult, HitResult } from "#app/field/pokemon"; +import type { DamageResult } from "#app/@types/damage-result"; +import { HitResult } from "#enums/hit-result"; import { fixedInt } from "#app/utils"; import { PokemonPhase } from "#app/phases/pokemon-phase"; diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index 15f3d102e41..9e28de32c4a 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -11,7 +11,7 @@ import { TrainerSlot } from "#enums/trainer-slot"; import { getRandomWeatherType } from "#app/data/weather"; import { EncounterPhaseEvent } from "#app/events/battle-scene"; import type Pokemon from "#app/field/pokemon"; -import { FieldPosition } from "#app/field/pokemon"; +import { FieldPosition } from "#enums/field-position"; import { getPokemonNameWithAffix } from "#app/messages"; import { BoostBugSpawnModifier, IvScannerModifier, TurnHeldItemTransferModifier } from "#app/modifier/modifier"; import { ModifierPoolType, regenerateModifierPoolThresholds } from "#app/modifier/modifier-type"; diff --git a/src/phases/evolution-phase.ts b/src/phases/evolution-phase.ts index 203c7542eff..076b7dec80d 100644 --- a/src/phases/evolution-phase.ts +++ b/src/phases/evolution-phase.ts @@ -10,7 +10,7 @@ import { Mode } from "#app/ui/ui"; import { cos, sin } from "#app/field/anims"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { LearnMoveSituation } from "#app/field/pokemon"; +import { LearnMoveContext } from "#enums/learn-move-context"; import { getTypeRgb } from "#app/data/type"; import i18next from "i18next"; import { getPokemonNameWithAffix } from "#app/messages"; @@ -343,11 +343,11 @@ export class EvolutionPhase extends Phase { this.evolutionHandler.canCancel = false; this.pokemon.evolve(this.evolution, this.pokemon.species).then(() => { - const learnSituation: LearnMoveSituation = this.fusionSpeciesEvolved - ? LearnMoveSituation.EVOLUTION_FUSED + const learnSituation: LearnMoveContext = this.fusionSpeciesEvolved + ? LearnMoveContext.EVOLUTION_FUSED : this.pokemon.fusionSpecies - ? LearnMoveSituation.EVOLUTION_FUSED_BASE - : LearnMoveSituation.EVOLUTION; + ? LearnMoveContext.EVOLUTION_FUSED_BASE + : LearnMoveContext.EVOLUTION; const levelMoves = this.pokemon .getLevelMoves(this.lastLevel + 1, true, false, false, learnSituation) .filter(lm => lm[0] === EVOLVE_MOVE); diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index 7e1ae4ec07b..4c418679047 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -12,13 +12,16 @@ import { import type { DestinyBondTag, GrudgeTag } from "#app/data/battler-tags"; import { BattlerTagLapseType } from "#app/data/battler-tags"; import { battleSpecDialogue } from "#app/data/dialogue"; -import { allMoves, PostVictoryStatStageChangeAttr } from "#app/data/moves/move"; +import { PostVictoryStatStageChangeAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms"; import { BattleSpec } from "#app/enums/battle-spec"; import { StatusEffect } from "#app/enums/status-effect"; import type { EnemyPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { HitResult, PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import { PlayerPokemon } from "#app/field/pokemon"; +import { HitResult } from "#enums/hit-result"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { getPokemonNameWithAffix } from "#app/messages"; import { PokemonInstantReviveModifier } from "#app/modifier/modifier"; import { SwitchType } from "#enums/switch-type"; diff --git a/src/phases/learn-move-phase.ts b/src/phases/learn-move-phase.ts index 4107a9cf087..a939298f620 100644 --- a/src/phases/learn-move-phase.ts +++ b/src/phases/learn-move-phase.ts @@ -1,7 +1,7 @@ import { globalScene } from "#app/global-scene"; import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims"; import type Move from "#app/data/moves/move"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { SpeciesFormChangeMoveLearnedTrigger } from "#app/data/pokemon-forms"; import { Moves } from "#enums/moves"; import { getPokemonNameWithAffix } from "#app/messages"; diff --git a/src/phases/move-charge-phase.ts b/src/phases/move-charge-phase.ts index 26ad85bbe03..ccaf6d054b9 100644 --- a/src/phases/move-charge-phase.ts +++ b/src/phases/move-charge-phase.ts @@ -2,7 +2,7 @@ import { globalScene } from "#app/global-scene"; import type { BattlerIndex } from "#app/battle"; import { MoveChargeAnim } from "#app/data/battle-anims"; import { applyMoveChargeAttrs, MoveEffectAttr, InstantChargeAttr } from "#app/data/moves/move"; -import type { PokemonMove } from "#app/field/pokemon"; +import type { PokemonMove } from "#app/data/moves/pokemon-move"; import type Pokemon from "#app/field/pokemon"; import { MoveResult } from "#app/field/pokemon"; import { BooleanHolder } from "#app/utils"; diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index acc7ac0f63a..c13c411be68 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -49,9 +49,10 @@ import { MoveTarget } from "#enums/MoveTarget"; import { MoveCategory } from "#enums/MoveCategory"; import { SpeciesFormChangePostMoveTrigger } from "#app/data/pokemon-forms"; import { PokemonType } from "#enums/pokemon-type"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import type Pokemon from "#app/field/pokemon"; -import { HitResult, MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#app/field/pokemon"; +import { HitResult } from "#enums/hit-result"; import { getPokemonNameWithAffix } from "#app/messages"; import { ContactHeldItemTransferChanceModifier, diff --git a/src/phases/move-header-phase.ts b/src/phases/move-header-phase.ts index c320df462d1..c255b45190b 100644 --- a/src/phases/move-header-phase.ts +++ b/src/phases/move-header-phase.ts @@ -1,5 +1,5 @@ import { applyMoveAttrs, MoveHeaderAttr } from "#app/data/moves/move"; -import type { PokemonMove } from "#app/field/pokemon"; +import type { PokemonMove } from "#app/data/moves/pokemon-move"; import type Pokemon from "#app/field/pokemon"; import { BattlePhase } from "./battle-phase"; diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index 478229dcae8..032ac6d06ab 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -16,7 +16,6 @@ import { CommonAnim } from "#app/data/battle-anims"; import { BattlerTagLapseType, CenterOfAttentionTag } from "#app/data/battler-tags"; import { AddArenaTrapTagAttr, - allMoves, applyMoveAttrs, BypassRedirectAttr, BypassSleepAttr, @@ -27,13 +26,14 @@ import { PreMoveMessageAttr, PreUseInterruptAttr, } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { MoveFlags } from "#enums/MoveFlags"; import { SpeciesFormChangePreMoveTrigger } from "#app/data/pokemon-forms"; import { getStatusEffectActivationText, getStatusEffectHealText } from "#app/data/status-effect"; import { PokemonType } from "#enums/pokemon-type"; import { getTerrainBlockMessage, getWeatherBlockMessage } from "#app/data/weather"; import { MoveUsedEvent } from "#app/events/battle-scene"; -import type { PokemonMove } from "#app/field/pokemon"; +import type { PokemonMove } from "#app/data/moves/pokemon-move"; import type Pokemon from "#app/field/pokemon"; import { MoveResult } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; diff --git a/src/phases/pokemon-heal-phase.ts b/src/phases/pokemon-heal-phase.ts index 651c625b23a..84dc8a5e116 100644 --- a/src/phases/pokemon-heal-phase.ts +++ b/src/phases/pokemon-heal-phase.ts @@ -3,7 +3,7 @@ import type { BattlerIndex } from "#app/battle"; import { CommonAnim } from "#app/data/battle-anims"; import { getStatusEffectHealText } from "#app/data/status-effect"; import { StatusEffect } from "#app/enums/status-effect"; -import { HitResult } from "#app/field/pokemon"; +import { HitResult } from "#enums/hit-result"; import { getPokemonNameWithAffix } from "#app/messages"; import { HealingBoosterModifier } from "#app/modifier/modifier"; import { HealAchv } from "#app/system/achv"; diff --git a/src/phases/pokemon-transform-phase.ts b/src/phases/pokemon-transform-phase.ts index b33689321b5..fb9a28a5a26 100644 --- a/src/phases/pokemon-transform-phase.ts +++ b/src/phases/pokemon-transform-phase.ts @@ -2,7 +2,7 @@ import type { BattlerIndex } from "#app/battle"; import { BattlerTagType } from "#enums/battler-tag-type"; import { Moves } from "#enums/moves"; import { EFFECTIVE_STATS, BATTLE_STATS } from "#enums/stat"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { globalScene } from "#app/global-scene"; import { PokemonPhase } from "./pokemon-phase"; import { getPokemonNameWithAffix } from "#app/messages"; diff --git a/src/phases/select-target-phase.ts b/src/phases/select-target-phase.ts index 035eaff41fa..edd56ba60ed 100644 --- a/src/phases/select-target-phase.ts +++ b/src/phases/select-target-phase.ts @@ -5,7 +5,7 @@ import { Mode } from "#app/ui/ui"; import { CommandPhase } from "./command-phase"; import { PokemonPhase } from "./pokemon-phase"; import i18next from "#app/plugins/i18n"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; export class SelectTargetPhase extends PokemonPhase { // biome-ignore lint/complexity/noUselessConstructor: This makes `fieldIndex` required diff --git a/src/phases/summon-phase.ts b/src/phases/summon-phase.ts index 7379d509e55..e053b18e4d7 100644 --- a/src/phases/summon-phase.ts +++ b/src/phases/summon-phase.ts @@ -5,7 +5,7 @@ import { TrainerSlot } from "#enums/trainer-slot"; import { PlayerGender } from "#app/enums/player-gender"; import { addPokeballOpenParticles } from "#app/field/anims"; import type Pokemon from "#app/field/pokemon"; -import { FieldPosition } from "#app/field/pokemon"; +import { FieldPosition } from "#enums/field-position"; import { getPokemonNameWithAffix } from "#app/messages"; import i18next from "i18next"; import { PartyMemberPokemonPhase } from "./party-member-pokemon-phase"; diff --git a/src/phases/switch-summon-phase.ts b/src/phases/switch-summon-phase.ts index d63cdb90f25..f39a3e62bb6 100644 --- a/src/phases/switch-summon-phase.ts +++ b/src/phases/switch-summon-phase.ts @@ -6,7 +6,8 @@ import { PreSummonAbAttr, PreSwitchOutAbAttr, } from "#app/data/ability"; -import { allMoves, ForceSwitchOutAttr } from "#app/data/moves/move"; +import { ForceSwitchOutAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { getPokeballTintColor } from "#app/data/pokeball"; import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms"; import { TrainerSlot } from "#enums/trainer-slot"; diff --git a/src/phases/toggle-double-position-phase.ts b/src/phases/toggle-double-position-phase.ts index 37f47d5cf95..c4766f888aa 100644 --- a/src/phases/toggle-double-position-phase.ts +++ b/src/phases/toggle-double-position-phase.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import { FieldPosition } from "#app/field/pokemon"; +import { FieldPosition } from "#enums/field-position"; import { BattlePhase } from "./battle-phase"; export class ToggleDoublePositionPhase extends BattlePhase { diff --git a/src/phases/turn-start-phase.ts b/src/phases/turn-start-phase.ts index d5b4160fe1b..5941e0af163 100644 --- a/src/phases/turn-start-phase.ts +++ b/src/phases/turn-start-phase.ts @@ -1,9 +1,10 @@ import { applyAbAttrs, BypassSpeedChanceAbAttr, PreventBypassSpeedChanceAbAttr } from "#app/data/ability"; -import { allMoves, MoveHeaderAttr } from "#app/data/moves/move"; +import { MoveHeaderAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Abilities } from "#app/enums/abilities"; import { Stat } from "#app/enums/stat"; import type Pokemon from "#app/field/pokemon"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { BypassSpeedChanceModifier } from "#app/modifier/modifier"; import { Command } from "#app/ui/command-ui-handler"; import { randSeedShuffle, BooleanHolder } from "#app/utils"; diff --git a/src/phases/weather-effect-phase.ts b/src/phases/weather-effect-phase.ts index 5284c9fba85..256894457fc 100644 --- a/src/phases/weather-effect-phase.ts +++ b/src/phases/weather-effect-phase.ts @@ -14,7 +14,7 @@ import { getWeatherDamageMessage, getWeatherLapseMessage } from "#app/data/weath import { BattlerTagType } from "#app/enums/battler-tag-type"; import { WeatherType } from "#app/enums/weather-type"; import type Pokemon from "#app/field/pokemon"; -import { HitResult } from "#app/field/pokemon"; +import { HitResult } from "#enums/hit-result"; import { BooleanHolder, toDmgValue } from "#app/utils"; import { CommonAnimPhase } from "./common-anim-phase"; diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 53146301666..e87c735f459 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -30,7 +30,7 @@ import { Nature } from "#enums/nature"; import { GameStats } from "#app/system/game-stats"; import { Tutorial } from "#app/tutorial"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { TrainerVariant } from "#app/field/trainer"; import type { Variant } from "#app/sprites/variant"; import { setSettingGamepad, SettingGamepad, settingGamepadDefaults } from "#app/system/settings/settings-gamepad"; diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index 97ce494a43a..7579fc3b78d 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -5,7 +5,8 @@ import type { Nature } from "#enums/nature"; import type { PokeballType } from "#enums/pokeball"; import { getPokemonSpecies, getPokemonSpeciesForm } from "../data/pokemon-species"; import { Status } from "../data/status-effect"; -import Pokemon, { EnemyPokemon, PokemonMove, PokemonSummonData } from "../field/pokemon"; +import Pokemon, { EnemyPokemon, PokemonSummonData } from "../field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { TrainerSlot } from "#enums/trainer-slot"; import type { Variant } from "#app/sprites/variant"; import { loadBattlerTag } from "../data/battler-tags"; diff --git a/src/ui/fight-ui-handler.ts b/src/ui/fight-ui-handler.ts index 27985629e3d..63c0703fa18 100644 --- a/src/ui/fight-ui-handler.ts +++ b/src/ui/fight-ui-handler.ts @@ -10,7 +10,7 @@ import { getLocalizedSpriteKey, fixedInt, padInt } from "#app/utils"; import { MoveCategory } from "#enums/MoveCategory"; import i18next from "i18next"; import { Button } from "#enums/buttons"; -import type { PokemonMove } from "#app/field/pokemon"; +import type { PokemonMove } from "#app/data/moves/pokemon-move"; import type Pokemon from "#app/field/pokemon"; import type { CommandPhase } from "#app/phases/command-phase"; import MoveInfoOverlay from "./move-info-overlay"; diff --git a/src/ui/modifier-select-ui-handler.ts b/src/ui/modifier-select-ui-handler.ts index 26351d4dbf1..f0ff351bb8a 100644 --- a/src/ui/modifier-select-ui-handler.ts +++ b/src/ui/modifier-select-ui-handler.ts @@ -9,7 +9,7 @@ import { LockModifierTiersModifier, PokemonHeldItemModifier, HealShopCostModifie import { handleTutorial, Tutorial } from "../tutorial"; import { Button } from "#enums/buttons"; import MoveInfoOverlay from "./move-info-overlay"; -import { allMoves } from "../data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { formatMoney, NumberHolder } from "#app/utils"; import Overrides from "#app/overrides"; import i18next from "i18next"; diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index ba90108c274..a42e0caadae 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -1,4 +1,5 @@ -import type { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import type { PokemonMove } from "#app/data/moves/pokemon-move"; import type Pokemon from "#app/field/pokemon"; import { MoveResult } from "#app/field/pokemon"; import { addBBCodeTextObject, addTextObject, getTextColor, TextStyle } from "#app/ui/text"; @@ -11,7 +12,8 @@ import { PokemonHeldItemModifier, SwitchEffectTransferModifier, } from "#app/modifier/modifier"; -import { allMoves, ForceSwitchOutAttr } from "#app/data/moves/move"; +import { ForceSwitchOutAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Gender, getGenderColor, getGenderSymbol } from "#app/data/gender"; import { StatusEffect } from "#enums/status-effect"; import PokemonIconAnimHandler, { PokemonIconAnimMode } from "#app/ui/pokemon-icon-anim-handler"; diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index 407ebfcd843..1011fc89ae0 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -9,7 +9,7 @@ import { allAbilities } from "#app/data/ability"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { GrowthRate, getGrowthRateColor } from "#app/data/exp"; import { Gender, getGenderColor, getGenderSymbol } from "#app/data/gender"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { getNatureName } from "#app/data/nature"; import type { SpeciesFormChange } from "#app/data/pokemon-forms"; import { pokemonFormChanges } from "#app/data/pokemon-forms"; diff --git a/src/ui/pokedex-scan-ui-handler.ts b/src/ui/pokedex-scan-ui-handler.ts index b34246b97d1..54c32fb34a1 100644 --- a/src/ui/pokedex-scan-ui-handler.ts +++ b/src/ui/pokedex-scan-ui-handler.ts @@ -7,7 +7,7 @@ import { isNullOrUndefined } from "#app/utils"; import { Mode } from "./ui"; import { FilterTextRow } from "./filter-text"; import { allAbilities } from "#app/data/ability"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { allSpecies } from "#app/data/pokemon-species"; import i18next from "i18next"; diff --git a/src/ui/pokedex-ui-handler.ts b/src/ui/pokedex-ui-handler.ts index 59b06d476a2..22ce5b833af 100644 --- a/src/ui/pokedex-ui-handler.ts +++ b/src/ui/pokedex-ui-handler.ts @@ -38,7 +38,7 @@ import type { OptionSelectConfig } from "./abstact-option-select-ui-handler"; import { FilterText, FilterTextRow } from "./filter-text"; import { allAbilities } from "#app/data/ability"; import { starterPassiveAbilities } from "#app/data/balance/passives"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { speciesTmMoves } from "#app/data/balance/tms"; import { pokemonPrevolutions, pokemonStarters } from "#app/data/balance/pokemon-evolutions"; import { Biome } from "#enums/biome"; diff --git a/src/ui/pokemon-hatch-info-container.ts b/src/ui/pokemon-hatch-info-container.ts index 692f0f1d374..77f9f5090a0 100644 --- a/src/ui/pokemon-hatch-info-container.ts +++ b/src/ui/pokemon-hatch-info-container.ts @@ -4,7 +4,7 @@ import { PokemonType } from "#enums/pokemon-type"; import { rgbHexToRgba, padInt } from "#app/utils"; import { TextStyle, addTextObject } from "#app/ui/text"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Species } from "#enums/species"; import { getEggTierForSpecies } from "#app/data/egg"; import { starterColors } from "#app/battle-scene"; diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 3e2940f45b9..680f752096b 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -13,7 +13,7 @@ import { allAbilities } from "#app/data/ability"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { GrowthRate, getGrowthRateColor } from "#app/data/exp"; import { Gender, getGenderColor, getGenderSymbol } from "#app/data/gender"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { getNatureName } from "#app/data/nature"; import { pokemonFormChanges } from "#app/data/pokemon-forms"; import type { LevelMoves } from "#app/data/balance/pokemon-level-moves"; diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index 04bcf71d7ae..d82082f0872 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -12,7 +12,8 @@ import { toReadableString, formatStat, } from "#app/utils"; -import type { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import type { PokemonMove } from "#app/data/moves/pokemon-move"; import { getStarterValueFriendshipCap, speciesStarterCosts } from "#app/data/balance/starters"; import { argbFromRgba } from "@material/material-color-utilities"; import { getTypeRgb } from "#app/data/type"; diff --git a/test/abilities/aura_break.test.ts b/test/abilities/aura_break.test.ts index 86b6c69ec8b..30841fdbe0c 100644 --- a/test/abilities/aura_break.test.ts +++ b/test/abilities/aura_break.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/abilities/battery.test.ts b/test/abilities/battery.test.ts index cc7570c3d31..78db19e67ff 100644 --- a/test/abilities/battery.test.ts +++ b/test/abilities/battery.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Abilities } from "#app/enums/abilities"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; diff --git a/test/abilities/battle_bond.test.ts b/test/abilities/battle_bond.test.ts index 6305d7dedc5..e615b5746c0 100644 --- a/test/abilities/battle_bond.test.ts +++ b/test/abilities/battle_bond.test.ts @@ -1,4 +1,5 @@ -import { allMoves, MultiHitAttr } from "#app/data/moves/move"; +import { MultiHitAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { MultiHitType } from "#enums/MultiHitType"; import { Status } from "#app/data/status-effect"; import { Abilities } from "#enums/abilities"; diff --git a/test/abilities/flower_veil.test.ts b/test/abilities/flower_veil.test.ts index c26a952acff..d91c92e8c9f 100644 --- a/test/abilities/flower_veil.test.ts +++ b/test/abilities/flower_veil.test.ts @@ -7,7 +7,7 @@ import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { BattlerTagType } from "#enums/battler-tag-type"; import { allAbilities } from "#app/data/ability"; diff --git a/test/abilities/friend_guard.test.ts b/test/abilities/friend_guard.test.ts index 30175fe37e0..cee82ca2c69 100644 --- a/test/abilities/friend_guard.test.ts +++ b/test/abilities/friend_guard.test.ts @@ -6,7 +6,7 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { BattlerIndex } from "#app/battle"; import { allAbilities } from "#app/data/ability"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { MoveCategory } from "#enums/MoveCategory"; describe("Moves - Friend Guard", () => { diff --git a/test/abilities/galvanize.test.ts b/test/abilities/galvanize.test.ts index c1e02c6c8d8..4efb6bb068f 100644 --- a/test/abilities/galvanize.test.ts +++ b/test/abilities/galvanize.test.ts @@ -1,10 +1,10 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { PokemonType } from "#enums/pokemon-type"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; -import { HitResult } from "#app/field/pokemon"; +import { HitResult } from "#enums/hit-result"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/test/abilities/hustle.test.ts b/test/abilities/hustle.test.ts index 40197cf9e97..fbfa23e90d6 100644 --- a/test/abilities/hustle.test.ts +++ b/test/abilities/hustle.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Abilities } from "#app/enums/abilities"; import { Stat } from "#app/enums/stat"; import { Moves } from "#enums/moves"; diff --git a/test/abilities/infiltrator.test.ts b/test/abilities/infiltrator.test.ts index 6278439651c..e9ecf366a37 100644 --- a/test/abilities/infiltrator.test.ts +++ b/test/abilities/infiltrator.test.ts @@ -1,5 +1,5 @@ import { ArenaTagSide } from "#app/data/arena-tag"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; import { Stat } from "#enums/stat"; diff --git a/test/abilities/libero.test.ts b/test/abilities/libero.test.ts index 22abf1c248f..96a6b3c5d93 100644 --- a/test/abilities/libero.test.ts +++ b/test/abilities/libero.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { PokemonType } from "#enums/pokemon-type"; import { Weather } from "#app/data/weather"; import type { PlayerPokemon } from "#app/field/pokemon"; diff --git a/test/abilities/magic_bounce.test.ts b/test/abilities/magic_bounce.test.ts index f9a076776aa..c785827c910 100644 --- a/test/abilities/magic_bounce.test.ts +++ b/test/abilities/magic_bounce.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { allAbilities } from "#app/data/ability"; import { ArenaTagSide } from "#app/data/arena-tag"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { Stat } from "#app/enums/stat"; diff --git a/test/abilities/power_spot.test.ts b/test/abilities/power_spot.test.ts index e29b5ecf775..68ace696d4a 100644 --- a/test/abilities/power_spot.test.ts +++ b/test/abilities/power_spot.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Abilities } from "#app/enums/abilities"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; diff --git a/test/abilities/protean.test.ts b/test/abilities/protean.test.ts index 574033bb13f..ca5e67139e1 100644 --- a/test/abilities/protean.test.ts +++ b/test/abilities/protean.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { PokemonType } from "#enums/pokemon-type"; import { Weather } from "#app/data/weather"; import type { PlayerPokemon } from "#app/field/pokemon"; diff --git a/test/abilities/sap_sipper.test.ts b/test/abilities/sap_sipper.test.ts index f4f02844cbc..b27f97099b9 100644 --- a/test/abilities/sap_sipper.test.ts +++ b/test/abilities/sap_sipper.test.ts @@ -9,7 +9,8 @@ import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { allMoves, RandomMoveAttr } from "#app/data/moves/move"; +import { RandomMoveAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; // See also: TypeImmunityAbAttr describe("Abilities - Sap Sipper", () => { diff --git a/test/abilities/serene_grace.test.ts b/test/abilities/serene_grace.test.ts index 65ca96acbbc..30073f30b24 100644 --- a/test/abilities/serene_grace.test.ts +++ b/test/abilities/serene_grace.test.ts @@ -4,7 +4,7 @@ import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { FlinchAttr } from "#app/data/moves/move"; diff --git a/test/abilities/sheer_force.test.ts b/test/abilities/sheer_force.test.ts index 4a1c20cde5c..74c7b30a846 100644 --- a/test/abilities/sheer_force.test.ts +++ b/test/abilities/sheer_force.test.ts @@ -7,7 +7,8 @@ import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { allMoves, FlinchAttr } from "#app/data/moves/move"; +import { FlinchAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; describe("Abilities - Sheer Force", () => { let phaserGame: Phaser.Game; diff --git a/test/abilities/steely_spirit.test.ts b/test/abilities/steely_spirit.test.ts index b180ff8919e..6e8331ea51a 100644 --- a/test/abilities/steely_spirit.test.ts +++ b/test/abilities/steely_spirit.test.ts @@ -1,5 +1,5 @@ import { allAbilities } from "#app/data/ability"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/abilities/supreme_overlord.test.ts b/test/abilities/supreme_overlord.test.ts index a71bf0a9354..69ff4f393b6 100644 --- a/test/abilities/supreme_overlord.test.ts +++ b/test/abilities/supreme_overlord.test.ts @@ -7,7 +7,7 @@ import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; describe("Abilities - Supreme Overlord", () => { let phaserGame: Phaser.Game; diff --git a/test/abilities/tera_shell.test.ts b/test/abilities/tera_shell.test.ts index a99ecfd4ce1..bd88c21f52d 100644 --- a/test/abilities/tera_shell.test.ts +++ b/test/abilities/tera_shell.test.ts @@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; -import { HitResult } from "#app/field/pokemon"; +import { HitResult } from "#enums/hit-result"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/test/abilities/unburden.test.ts b/test/abilities/unburden.test.ts index 8f18604011c..7012c4cf065 100644 --- a/test/abilities/unburden.test.ts +++ b/test/abilities/unburden.test.ts @@ -1,6 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { PostItemLostAbAttr } from "#app/data/ability"; -import { allMoves, StealHeldItemChanceAttr } from "#app/data/moves/move"; +import { StealHeldItemChanceAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import type Pokemon from "#app/field/pokemon"; import type { ContactHeldItemTransferChanceModifier } from "#app/modifier/modifier"; import { Abilities } from "#enums/abilities"; diff --git a/test/abilities/wimp_out.test.ts b/test/abilities/wimp_out.test.ts index 294025a10e7..c81fa2071c5 100644 --- a/test/abilities/wimp_out.test.ts +++ b/test/abilities/wimp_out.test.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; import { ArenaTagSide } from "#app/data/arena-tag"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import GameManager from "#test/testUtils/gameManager"; import { toDmgValue } from "#app/utils"; import { Abilities } from "#enums/abilities"; @@ -534,12 +534,12 @@ describe("Abilities - Wimp Out", () => { .enemyAbility(Abilities.WIMP_OUT) .startingLevel(50) .enemyLevel(1) - .enemyMoveset([ Moves.SPLASH, Moves.ENDURE ]) + .enemyMoveset([Moves.SPLASH, Moves.ENDURE]) .battleType("double") - .moveset([ Moves.DRAGON_ENERGY, Moves.SPLASH ]) + .moveset([Moves.DRAGON_ENERGY, Moves.SPLASH]) .startingWave(wave); - await game.classicMode.startBattle([ Species.REGIDRAGO, Species.MAGIKARP ]); + await game.classicMode.startBattle([Species.REGIDRAGO, Species.MAGIKARP]); // turn 1 game.move.select(Moves.DRAGON_ENERGY, 0); @@ -549,6 +549,5 @@ describe("Abilities - Wimp Out", () => { await game.phaseInterceptor.to("SelectModifierPhase"); expect(game.scene.currentBattle.waveIndex).toBe(wave + 1); - }); }); diff --git a/test/abilities/wonder_skin.test.ts b/test/abilities/wonder_skin.test.ts index 18d5be36aef..fe24cdad5ec 100644 --- a/test/abilities/wonder_skin.test.ts +++ b/test/abilities/wonder_skin.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/test/arena/arena_gravity.test.ts b/test/arena/arena_gravity.test.ts index a5ce84667f0..7e72d14460a 100644 --- a/test/arena/arena_gravity.test.ts +++ b/test/arena/arena_gravity.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Abilities } from "#enums/abilities"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; diff --git a/test/arena/grassy_terrain.test.ts b/test/arena/grassy_terrain.test.ts index d92fb24be5a..9ee9d2ef434 100644 --- a/test/arena/grassy_terrain.test.ts +++ b/test/arena/grassy_terrain.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/arena/weather_fog.test.ts b/test/arena/weather_fog.test.ts index 784c4886648..b240bfa7386 100644 --- a/test/arena/weather_fog.test.ts +++ b/test/arena/weather_fog.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Abilities } from "#app/enums/abilities"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Moves } from "#enums/moves"; diff --git a/test/arena/weather_strong_winds.test.ts b/test/arena/weather_strong_winds.test.ts index 3a9235d9eb9..50d25947612 100644 --- a/test/arena/weather_strong_winds.test.ts +++ b/test/arena/weather_strong_winds.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { StatusEffect } from "#app/enums/status-effect"; import { TurnStartPhase } from "#app/phases/turn-start-phase"; import { Abilities } from "#enums/abilities"; diff --git a/test/battle/damage_calculation.test.ts b/test/battle/damage_calculation.test.ts index dab1fc81caa..11bb8246ca1 100644 --- a/test/battle/damage_calculation.test.ts +++ b/test/battle/damage_calculation.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import type { EnemyPersistentModifier } from "#app/modifier/modifier"; import { modifierTypes } from "#app/modifier/modifier-type"; import { Abilities } from "#enums/abilities"; diff --git a/test/battlerTags/substitute.test.ts b/test/battlerTags/substitute.test.ts index fca3dc5ef7e..f2ee741bca2 100644 --- a/test/battlerTags/substitute.test.ts +++ b/test/battlerTags/substitute.test.ts @@ -1,5 +1,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import type { PokemonTurnData, TurnMove, PokemonMove } from "#app/field/pokemon"; +import type { PokemonTurnData } from "#app/field/pokemon"; +import type { PokemonMove } from "#app/data/moves/pokemon-move"; +import type { TurnMove } from "#app/interfaces/turn-move"; import type Pokemon from "#app/field/pokemon"; import { MoveResult } from "#app/field/pokemon"; import type BattleScene from "#app/battle-scene"; @@ -7,7 +9,7 @@ import { BattlerTagLapseType, BindTag, SubstituteTag } from "#app/data/battler-t import { Moves } from "#app/enums/moves"; import { PokemonAnimType } from "#app/enums/pokemon-anim-type"; import * as messages from "#app/messages"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import type { MoveEffectPhase } from "#app/phases/move-effect-phase"; import GameManager from "#test/testUtils/gameManager"; diff --git a/test/enemy_command.test.ts b/test/enemy_command.test.ts index 6d5cc2698a3..cfa141cf89e 100644 --- a/test/enemy_command.test.ts +++ b/test/enemy_command.test.ts @@ -1,11 +1,11 @@ import type BattleScene from "#app/battle-scene"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { MoveCategory } from "#enums/MoveCategory"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import type { EnemyPokemon } from "#app/field/pokemon"; -import { AiType } from "#app/field/pokemon"; +import { AiType } from "#enums/ai-type"; import { randSeedInt } from "#app/utils"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; diff --git a/test/evolution.test.ts b/test/evolution.test.ts index dd6795bf161..62a06f868e8 100644 --- a/test/evolution.test.ts +++ b/test/evolution.test.ts @@ -1,8 +1,5 @@ -import { - pokemonEvolutions, - SpeciesFormEvolution, - SpeciesWildEvolutionDelay, -} from "#app/data/balance/pokemon-evolutions"; +import { pokemonEvolutions, SpeciesFormEvolution } from "#app/data/balance/pokemon-evolutions"; +import { SpeciesWildEvolutionDelay } from "#enums/species-wild-evolution-delay"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; diff --git a/test/imports.test.ts b/test/imports.test.ts index 128308dbd14..ada7eff0109 100644 --- a/test/imports.test.ts +++ b/test/imports.test.ts @@ -4,7 +4,7 @@ import { describe, expect, it } from "vitest"; async function importModule() { try { initStatsKeys(); - const { PokemonMove } = await import("#app/field/pokemon"); + const { PokemonMove } = await import("#app/data/moves/pokemon-move"); const { Species } = await import("#enums/species"); return { PokemonMove, diff --git a/test/items/reviver_seed.test.ts b/test/items/reviver_seed.test.ts index c06f354a94a..e1e7e0d554e 100644 --- a/test/items/reviver_seed.test.ts +++ b/test/items/reviver_seed.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import type { PokemonInstantReviveModifier } from "#app/modifier/modifier"; import { Abilities } from "#enums/abilities"; diff --git a/test/moves/astonish.test.ts b/test/moves/astonish.test.ts index 53922060ae6..69a312d4517 100644 --- a/test/moves/astonish.test.ts +++ b/test/moves/astonish.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { BerryPhase } from "#app/phases/berry-phase"; import { CommandPhase } from "#app/phases/command-phase"; diff --git a/test/moves/aurora_veil.test.ts b/test/moves/aurora_veil.test.ts index 31f6497bae5..06637d0764e 100644 --- a/test/moves/aurora_veil.test.ts +++ b/test/moves/aurora_veil.test.ts @@ -1,7 +1,8 @@ import type BattleScene from "#app/battle-scene"; import { ArenaTagSide } from "#app/data/arena-tag"; import type Move from "#app/data/moves/move"; -import { allMoves, CritOnlyAttr } from "#app/data/moves/move"; +import { CritOnlyAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import type Pokemon from "#app/field/pokemon"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; diff --git a/test/moves/burning_jealousy.test.ts b/test/moves/burning_jealousy.test.ts index 60387df4226..c618b46e842 100644 --- a/test/moves/burning_jealousy.test.ts +++ b/test/moves/burning_jealousy.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Abilities } from "#app/enums/abilities"; import { StatusEffect } from "#app/enums/status-effect"; import { Moves } from "#enums/moves"; diff --git a/test/moves/ceaseless_edge.test.ts b/test/moves/ceaseless_edge.test.ts index d54f1bd9f21..227645df360 100644 --- a/test/moves/ceaseless_edge.test.ts +++ b/test/moves/ceaseless_edge.test.ts @@ -1,5 +1,5 @@ import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Abilities } from "#app/enums/abilities"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; diff --git a/test/moves/copycat.test.ts b/test/moves/copycat.test.ts index 0d9b0951f89..615206275d4 100644 --- a/test/moves/copycat.test.ts +++ b/test/moves/copycat.test.ts @@ -1,5 +1,6 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves, RandomMoveAttr } from "#app/data/moves/move"; +import { RandomMoveAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Stat } from "#app/enums/stat"; import { MoveResult } from "#app/field/pokemon"; import { Abilities } from "#enums/abilities"; diff --git a/test/moves/destiny_bond.test.ts b/test/moves/destiny_bond.test.ts index c39d40427ad..9873d678b8c 100644 --- a/test/moves/destiny_bond.test.ts +++ b/test/moves/destiny_bond.test.ts @@ -1,6 +1,6 @@ import type { ArenaTrapTag } from "#app/data/arena-tag"; import { ArenaTagSide } from "#app/data/arena-tag"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Abilities } from "#enums/abilities"; import { ArenaTagType } from "#enums/arena-tag-type"; import { Moves } from "#enums/moves"; diff --git a/test/moves/diamond_storm.test.ts b/test/moves/diamond_storm.test.ts index 2363122f0d7..73a1aee3fd2 100644 --- a/test/moves/diamond_storm.test.ts +++ b/test/moves/diamond_storm.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/moves/dig.test.ts b/test/moves/dig.test.ts index 81339111656..14e7efee19b 100644 --- a/test/moves/dig.test.ts +++ b/test/moves/dig.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Abilities } from "#enums/abilities"; import { BattlerTagType } from "#enums/battler-tag-type"; import { Moves } from "#enums/moves"; diff --git a/test/moves/dragon_tail.test.ts b/test/moves/dragon_tail.test.ts index 37e8aa2fe1b..a571312473d 100644 --- a/test/moves/dragon_tail.test.ts +++ b/test/moves/dragon_tail.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Status } from "#app/data/status-effect"; import { Challenges } from "#enums/challenges"; import { StatusEffect } from "#enums/status-effect"; diff --git a/test/moves/dynamax_cannon.test.ts b/test/moves/dynamax_cannon.test.ts index 9cf3106b9c1..b2590449e4e 100644 --- a/test/moves/dynamax_cannon.test.ts +++ b/test/moves/dynamax_cannon.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Moves } from "#enums/moves"; diff --git a/test/moves/effectiveness.test.ts b/test/moves/effectiveness.test.ts index fb03f1c10a0..efcbc9c3293 100644 --- a/test/moves/effectiveness.test.ts +++ b/test/moves/effectiveness.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { TrainerSlot } from "#enums/trainer-slot"; import { PokemonType } from "#enums/pokemon-type"; diff --git a/test/moves/fell_stinger.test.ts b/test/moves/fell_stinger.test.ts index 2ffa44c5a3a..766fedf68dc 100644 --- a/test/moves/fell_stinger.test.ts +++ b/test/moves/fell_stinger.test.ts @@ -7,7 +7,7 @@ import { Moves } from "#enums/moves"; import { Stat } from "#enums/stat"; import { StatusEffect } from "#app/enums/status-effect"; import { WeatherType } from "#app/enums/weather-type"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; describe("Moves - Fell Stinger", () => { let phaserGame: Phaser.Game; diff --git a/test/moves/fly.test.ts b/test/moves/fly.test.ts index 0bd7d22b2a7..37fa42b608d 100644 --- a/test/moves/fly.test.ts +++ b/test/moves/fly.test.ts @@ -8,7 +8,7 @@ import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; describe("Moves - Fly", () => { let phaserGame: Phaser.Game; diff --git a/test/moves/freezy_frost.test.ts b/test/moves/freezy_frost.test.ts index c1ac4054e70..d764600bc78 100644 --- a/test/moves/freezy_frost.test.ts +++ b/test/moves/freezy_frost.test.ts @@ -5,7 +5,7 @@ import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { CommandPhase } from "#app/phases/command-phase"; describe("Moves - Freezy Frost", () => { diff --git a/test/moves/fusion_flare_bolt.test.ts b/test/moves/fusion_flare_bolt.test.ts index c340aeea63f..32df10b4c7c 100644 --- a/test/moves/fusion_flare_bolt.test.ts +++ b/test/moves/fusion_flare_bolt.test.ts @@ -1,6 +1,6 @@ import { Stat } from "#enums/stat"; import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import type Move from "#app/data/moves/move"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; diff --git a/test/moves/glaive_rush.test.ts b/test/moves/glaive_rush.test.ts index d3531b172e2..28d6328c095 100644 --- a/test/moves/glaive_rush.test.ts +++ b/test/moves/glaive_rush.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; diff --git a/test/moves/hard_press.test.ts b/test/moves/hard_press.test.ts index 8891f0bf0e2..425993fb1a9 100644 --- a/test/moves/hard_press.test.ts +++ b/test/moves/hard_press.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/test/moves/hyper_beam.test.ts b/test/moves/hyper_beam.test.ts index 5cd54e9b46a..b1a244f2ea4 100644 --- a/test/moves/hyper_beam.test.ts +++ b/test/moves/hyper_beam.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Abilities } from "#app/enums/abilities"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { Moves } from "#app/enums/moves"; diff --git a/test/moves/lash_out.test.ts b/test/moves/lash_out.test.ts index 8395633f5c0..16632ec0065 100644 --- a/test/moves/lash_out.test.ts +++ b/test/moves/lash_out.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/moves/last_respects.test.ts b/test/moves/last_respects.test.ts index ccab8a43415..891b287dece 100644 --- a/test/moves/last_respects.test.ts +++ b/test/moves/last_respects.test.ts @@ -3,7 +3,7 @@ import { BattlerIndex } from "#app/battle"; import { Species } from "#enums/species"; import { Abilities } from "#enums/abilities"; import GameManager from "#test/testUtils/gameManager"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import type Move from "#app/data/moves/move"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import Phaser from "phaser"; diff --git a/test/moves/light_screen.test.ts b/test/moves/light_screen.test.ts index 9cc6944ed3e..b77bb1c790b 100644 --- a/test/moves/light_screen.test.ts +++ b/test/moves/light_screen.test.ts @@ -1,7 +1,8 @@ import type BattleScene from "#app/battle-scene"; import { ArenaTagSide } from "#app/data/arena-tag"; import type Move from "#app/data/moves/move"; -import { allMoves, CritOnlyAttr } from "#app/data/moves/move"; +import { CritOnlyAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Abilities } from "#app/enums/abilities"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import type Pokemon from "#app/field/pokemon"; diff --git a/test/moves/magic_coat.test.ts b/test/moves/magic_coat.test.ts index 2cc8dea8938..e96125a23ac 100644 --- a/test/moves/magic_coat.test.ts +++ b/test/moves/magic_coat.test.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; import { ArenaTagSide } from "#app/data/arena-tag"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { Stat } from "#app/enums/stat"; diff --git a/test/moves/metronome.test.ts b/test/moves/metronome.test.ts index 80f32a3a6fb..bf045f5e9f9 100644 --- a/test/moves/metronome.test.ts +++ b/test/moves/metronome.test.ts @@ -1,5 +1,6 @@ import { RechargingTag, SemiInvulnerableTag } from "#app/data/battler-tags"; -import { allMoves, RandomMoveAttr } from "#app/data/moves/move"; +import { RandomMoveAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Abilities } from "#app/enums/abilities"; import { Stat } from "#app/enums/stat"; import { CommandPhase } from "#app/phases/command-phase"; diff --git a/test/moves/moongeist_beam.test.ts b/test/moves/moongeist_beam.test.ts index 117fe513e17..94197683ea4 100644 --- a/test/moves/moongeist_beam.test.ts +++ b/test/moves/moongeist_beam.test.ts @@ -1,4 +1,5 @@ -import { allMoves, RandomMoveAttr } from "#app/data/moves/move"; +import { RandomMoveAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/moves/pledge_moves.test.ts b/test/moves/pledge_moves.test.ts index c866d15357c..d3b8e60ac62 100644 --- a/test/moves/pledge_moves.test.ts +++ b/test/moves/pledge_moves.test.ts @@ -1,7 +1,8 @@ import { BattlerIndex } from "#app/battle"; import { allAbilities } from "#app/data/ability"; import { ArenaTagSide } from "#app/data/arena-tag"; -import { allMoves, FlinchAttr } from "#app/data/moves/move"; +import { FlinchAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { PokemonType } from "#enums/pokemon-type"; import { ArenaTagType } from "#enums/arena-tag-type"; import { Stat } from "#enums/stat"; diff --git a/test/moves/powder.test.ts b/test/moves/powder.test.ts index 522b0b74ca7..510564e0f53 100644 --- a/test/moves/powder.test.ts +++ b/test/moves/powder.test.ts @@ -5,7 +5,8 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { BerryPhase } from "#app/phases/berry-phase"; -import { MoveResult, PokemonMove } from "#app/field/pokemon"; +import { MoveResult } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { PokemonType } from "#enums/pokemon-type"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { StatusEffect } from "#enums/status-effect"; diff --git a/test/moves/protect.test.ts b/test/moves/protect.test.ts index d50c490f7d3..65de079982f 100644 --- a/test/moves/protect.test.ts +++ b/test/moves/protect.test.ts @@ -5,7 +5,7 @@ import { Species } from "#enums/species"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Stat } from "#enums/stat"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; import { BattlerIndex } from "#app/battle"; import { MoveResult } from "#app/field/pokemon"; diff --git a/test/moves/rage_fist.test.ts b/test/moves/rage_fist.test.ts index f44901c5aba..73d83f4929c 100644 --- a/test/moves/rage_fist.test.ts +++ b/test/moves/rage_fist.test.ts @@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import type Move from "#app/data/moves/move"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; diff --git a/test/moves/reflect.test.ts b/test/moves/reflect.test.ts index ac879a7cc2b..272e5c2972c 100644 --- a/test/moves/reflect.test.ts +++ b/test/moves/reflect.test.ts @@ -1,7 +1,8 @@ import type BattleScene from "#app/battle-scene"; import { ArenaTagSide } from "#app/data/arena-tag"; import type Move from "#app/data/moves/move"; -import { allMoves, CritOnlyAttr } from "#app/data/moves/move"; +import { CritOnlyAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Abilities } from "#app/enums/abilities"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import type Pokemon from "#app/field/pokemon"; diff --git a/test/moves/retaliate.test.ts b/test/moves/retaliate.test.ts index e916c9ffeaa..57d29b4fdfc 100644 --- a/test/moves/retaliate.test.ts +++ b/test/moves/retaliate.test.ts @@ -3,7 +3,7 @@ import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { Moves } from "#enums/moves"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import type Move from "#app/data/moves/move"; describe("Moves - Retaliate", () => { diff --git a/test/moves/rollout.test.ts b/test/moves/rollout.test.ts index 89270c2dfc7..456f029cda1 100644 --- a/test/moves/rollout.test.ts +++ b/test/moves/rollout.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { CommandPhase } from "#app/phases/command-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/test/moves/round.test.ts b/test/moves/round.test.ts index 82f080a25ea..ec9f3f69a5e 100644 --- a/test/moves/round.test.ts +++ b/test/moves/round.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import type { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/test/moves/scale_shot.test.ts b/test/moves/scale_shot.test.ts index 2be632adb54..ee759b8404a 100644 --- a/test/moves/scale_shot.test.ts +++ b/test/moves/scale_shot.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; diff --git a/test/moves/secret_power.test.ts b/test/moves/secret_power.test.ts index 37f1664251b..40802dcc51f 100644 --- a/test/moves/secret_power.test.ts +++ b/test/moves/secret_power.test.ts @@ -2,7 +2,7 @@ import { Abilities } from "#enums/abilities"; import { Biome } from "#enums/biome"; import { Moves } from "#enums/moves"; import { Stat } from "#enums/stat"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; diff --git a/test/moves/shell_side_arm.test.ts b/test/moves/shell_side_arm.test.ts index a5b065b76cb..232182ffef0 100644 --- a/test/moves/shell_side_arm.test.ts +++ b/test/moves/shell_side_arm.test.ts @@ -1,5 +1,6 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves, ShellSideArmCategoryAttr } from "#app/data/moves/move"; +import { ShellSideArmCategoryAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import type Move from "#app/data/moves/move"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/test/moves/shell_trap.test.ts b/test/moves/shell_trap.test.ts index 2df94cdb828..d3ba67843ac 100644 --- a/test/moves/shell_trap.test.ts +++ b/test/moves/shell_trap.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { MoveResult } from "#app/field/pokemon"; diff --git a/test/moves/sketch.test.ts b/test/moves/sketch.test.ts index dfbf2eca713..94f37757a6a 100644 --- a/test/moves/sketch.test.ts +++ b/test/moves/sketch.test.ts @@ -1,13 +1,15 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import { MoveResult, PokemonMove } from "#app/field/pokemon"; +import { MoveResult } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { StatusEffect } from "#app/enums/status-effect"; import { BattlerIndex } from "#app/battle"; -import { allMoves, RandomMoveAttr } from "#app/data/moves/move"; +import { RandomMoveAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; describe("Moves - Sketch", () => { let phaserGame: Phaser.Game; diff --git a/test/moves/solar_beam.test.ts b/test/moves/solar_beam.test.ts index dffd4f210e5..b8a28065b64 100644 --- a/test/moves/solar_beam.test.ts +++ b/test/moves/solar_beam.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { BattlerTagType } from "#enums/battler-tag-type"; import { WeatherType } from "#enums/weather-type"; import { MoveResult } from "#app/field/pokemon"; diff --git a/test/moves/sparkly_swirl.test.ts b/test/moves/sparkly_swirl.test.ts index 6cd357c7e0e..1908772598a 100644 --- a/test/moves/sparkly_swirl.test.ts +++ b/test/moves/sparkly_swirl.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { StatusEffect } from "#app/enums/status-effect"; import { CommandPhase } from "#app/phases/command-phase"; import { Abilities } from "#enums/abilities"; diff --git a/test/moves/spectral_thief.test.ts b/test/moves/spectral_thief.test.ts index 2e52b118a74..271cb03073a 100644 --- a/test/moves/spectral_thief.test.ts +++ b/test/moves/spectral_thief.test.ts @@ -1,7 +1,7 @@ import { Abilities } from "#enums/abilities"; import { BattlerIndex } from "#app/battle"; import { Stat } from "#enums/stat"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; diff --git a/test/moves/spit_up.test.ts b/test/moves/spit_up.test.ts index d71647bda52..7ef6e5e5b14 100644 --- a/test/moves/spit_up.test.ts +++ b/test/moves/spit_up.test.ts @@ -1,8 +1,8 @@ import { Stat } from "#enums/stat"; import { StockpilingTag } from "#app/data/battler-tags"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { BattlerTagType } from "#app/enums/battler-tag-type"; -import type { TurnMove } from "#app/field/pokemon"; +import type { TurnMove } from "#app/interfaces/turn-move"; import { MoveResult } from "#app/field/pokemon"; import GameManager from "#test/testUtils/gameManager"; import { Abilities } from "#enums/abilities"; diff --git a/test/moves/steamroller.test.ts b/test/moves/steamroller.test.ts index ba96928e01d..a0e4c29cce5 100644 --- a/test/moves/steamroller.test.ts +++ b/test/moves/steamroller.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { BattlerTagType } from "#app/enums/battler-tag-type"; -import type { DamageCalculationResult } from "#app/field/pokemon"; +import type { DamageCalculationResult } from "#app/interfaces/damage-calculation-result"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/moves/stockpile.test.ts b/test/moves/stockpile.test.ts index 033f24d5229..f6e6a0087f6 100644 --- a/test/moves/stockpile.test.ts +++ b/test/moves/stockpile.test.ts @@ -1,6 +1,6 @@ import { Stat } from "#enums/stat"; import { StockpilingTag } from "#app/data/battler-tags"; -import type { TurnMove } from "#app/field/pokemon"; +import type { TurnMove } from "#app/interfaces/turn-move"; import { MoveResult } from "#app/field/pokemon"; import { CommandPhase } from "#app/phases/command-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; diff --git a/test/moves/substitute.test.ts b/test/moves/substitute.test.ts index 23f7f4af4b9..68b90bf7cf8 100644 --- a/test/moves/substitute.test.ts +++ b/test/moves/substitute.test.ts @@ -1,7 +1,8 @@ import { BattlerIndex } from "#app/battle"; import { ArenaTagSide } from "#app/data/arena-tag"; import { SubstituteTag, TrappedTag } from "#app/data/battler-tags"; -import { allMoves, StealHeldItemChanceAttr } from "#app/data/moves/move"; +import { StealHeldItemChanceAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { MoveResult } from "#app/field/pokemon"; import type { CommandPhase } from "#app/phases/command-phase"; import GameManager from "#test/testUtils/gameManager"; diff --git a/test/moves/swallow.test.ts b/test/moves/swallow.test.ts index baa03801079..86af584a174 100644 --- a/test/moves/swallow.test.ts +++ b/test/moves/swallow.test.ts @@ -1,7 +1,7 @@ import { Stat } from "#enums/stat"; import { StockpilingTag } from "#app/data/battler-tags"; import { BattlerTagType } from "#app/enums/battler-tag-type"; -import type { TurnMove } from "#app/field/pokemon"; +import type { TurnMove } from "#app/interfaces/turn-move"; import { MoveResult } from "#app/field/pokemon"; import { MovePhase } from "#app/phases/move-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; diff --git a/test/moves/telekinesis.test.ts b/test/moves/telekinesis.test.ts index 1355cb975f3..7537ba0168a 100644 --- a/test/moves/telekinesis.test.ts +++ b/test/moves/telekinesis.test.ts @@ -1,5 +1,5 @@ import { BattlerTagType } from "#enums/battler-tag-type"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/moves/tera_blast.test.ts b/test/moves/tera_blast.test.ts index c1a2b999fa0..9d17ea6a3cc 100644 --- a/test/moves/tera_blast.test.ts +++ b/test/moves/tera_blast.test.ts @@ -1,10 +1,11 @@ import { BattlerIndex } from "#app/battle"; import { Stat } from "#enums/stat"; -import { allMoves, TeraMoveCategoryAttr } from "#app/data/moves/move"; +import { TeraMoveCategoryAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import type Move from "#app/data/moves/move"; import { PokemonType } from "#enums/pokemon-type"; import { Abilities } from "#app/enums/abilities"; -import { HitResult } from "#app/field/pokemon"; +import { HitResult } from "#enums/hit-result"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; diff --git a/test/moves/toxic.test.ts b/test/moves/toxic.test.ts index f2b1f82fe02..ab536364f6a 100644 --- a/test/moves/toxic.test.ts +++ b/test/moves/toxic.test.ts @@ -5,7 +5,7 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { StatusEffect } from "#enums/status-effect"; import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; describe("Moves - Toxic", () => { let phaserGame: Phaser.Game; diff --git a/test/moves/triple_arrows.test.ts b/test/moves/triple_arrows.test.ts index eb434b25815..d1d14f7d3e6 100644 --- a/test/moves/triple_arrows.test.ts +++ b/test/moves/triple_arrows.test.ts @@ -1,4 +1,5 @@ -import { allMoves, FlinchAttr, StatStageChangeAttr } from "#app/data/moves/move"; +import { FlinchAttr, StatStageChangeAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/moves/all-moves"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import type Move from "#app/data/moves/move"; diff --git a/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts b/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts index 3c7bda8febd..728129007e7 100644 --- a/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts +++ b/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts @@ -8,7 +8,8 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vite import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { runMysteryEncounterToEnd } from "#test/mystery-encounter/encounter-test-utils"; import type BattleScene from "#app/battle-scene"; -import { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import { PlayerPokemon } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { AnOfferYouCantRefuseEncounter } from "#app/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; diff --git a/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts b/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts index 9befe77e688..c1e6a635f31 100644 --- a/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts +++ b/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts @@ -11,7 +11,7 @@ import { } from "#test/mystery-encounter/encounter-test-utils"; import { Moves } from "#enums/moves"; import type BattleScene from "#app/battle-scene"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { Mode } from "#app/ui/ui"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; diff --git a/test/mystery-encounter/encounters/clowning-around-encounter.test.ts b/test/mystery-encounter/encounters/clowning-around-encounter.test.ts index 4bbe76e5c72..7b3d87463bf 100644 --- a/test/mystery-encounter/encounters/clowning-around-encounter.test.ts +++ b/test/mystery-encounter/encounters/clowning-around-encounter.test.ts @@ -15,7 +15,7 @@ import { import { Moves } from "#enums/moves"; import type BattleScene from "#app/battle-scene"; import type Pokemon from "#app/field/pokemon"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { Mode } from "#app/ui/ui"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; diff --git a/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts b/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts index 77cd65e51b9..5ea836d8aa6 100644 --- a/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts +++ b/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts @@ -17,7 +17,7 @@ import { Moves } from "#enums/moves"; import { DancingLessonsEncounter } from "#app/data/mystery-encounters/encounters/dancing-lessons-encounter"; import { Mode } from "#app/ui/ui"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import { CommandPhase } from "#app/phases/command-phase"; import { MovePhase } from "#app/phases/move-phase"; diff --git a/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts b/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts index d233e72932a..82d80bc3970 100644 --- a/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts +++ b/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts @@ -11,7 +11,7 @@ import { } from "#test/mystery-encounter/encounter-test-utils"; import { Moves } from "#enums/moves"; import type BattleScene from "#app/battle-scene"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { Mode } from "#app/ui/ui"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; diff --git a/test/mystery-encounter/encounters/part-timer-encounter.test.ts b/test/mystery-encounter/encounters/part-timer-encounter.test.ts index 639a2e140ff..308aa9839e9 100644 --- a/test/mystery-encounter/encounters/part-timer-encounter.test.ts +++ b/test/mystery-encounter/encounters/part-timer-encounter.test.ts @@ -14,7 +14,7 @@ import { CIVILIZATION_ENCOUNTER_BIOMES } from "#app/data/mystery-encounters/myst import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { PartTimerEncounter } from "#app/data/mystery-encounters/encounters/part-timer-encounter"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { Moves } from "#enums/moves"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; diff --git a/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts b/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts index a9e6a339d36..0d0298901d0 100644 --- a/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts @@ -17,7 +17,7 @@ import { TheStrongStuffEncounter } from "#app/data/mystery-encounters/encounters import { Nature } from "#enums/nature"; import { BerryType } from "#enums/berry-type"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { Mode } from "#app/ui/ui"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { BerryModifier, PokemonBaseStatTotalModifier } from "#app/modifier/modifier"; diff --git a/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts b/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts index df7bbb9f424..44c8e7a8915 100644 --- a/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts +++ b/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts @@ -12,7 +12,7 @@ import { getPokemonSpecies } from "#app/data/pokemon-species"; import { Biome } from "#app/enums/biome"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { Species } from "#app/enums/species"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { HealShopCostModifier, HitHealModifier, TurnHealModifier } from "#app/modifier/modifier"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { modifierTypes, type PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; diff --git a/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts b/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts index 452dfcf3784..e4928406a18 100644 --- a/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts +++ b/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts @@ -10,7 +10,7 @@ import { } from "#test/mystery-encounter/encounter-test-utils"; import { Moves } from "#enums/moves"; import type BattleScene from "#app/battle-scene"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; diff --git a/test/testUtils/helpers/moveHelper.ts b/test/testUtils/helpers/moveHelper.ts index 543f46b2026..333f95f2014 100644 --- a/test/testUtils/helpers/moveHelper.ts +++ b/test/testUtils/helpers/moveHelper.ts @@ -1,7 +1,7 @@ import type { BattlerIndex } from "#app/battle"; import { Button } from "#app/enums/buttons"; import type Pokemon from "#app/field/pokemon"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import Overrides from "#app/overrides"; import type { CommandPhase } from "#app/phases/command-phase"; import { LearnMovePhase } from "#app/phases/learn-move-phase"; From b41eee3c7f64be3b2c83ea30fb33210e87f73766 Mon Sep 17 00:00:00 2001 From: damocleas Date: Mon, 14 Apr 2025 12:28:36 -0400 Subject: [PATCH 022/262] Revert "[Refactor] Move many interfaces and enums to their own file" (#5661) Revert "[Refactor] Move many interfaces and enums to their own file (#5646)" This reverts commit c82e01eed377cacc5d3ffd2ef9caa27270e8a2dc. --- src/@types/damage-result.ts | 10 - src/battle-scene.ts | 2 +- src/battle.ts | 3 +- src/data/ability.ts | 9 +- src/data/arena-tag.ts | 5 +- src/data/balance/egg-moves.ts | 2 +- src/data/balance/pokemon-evolutions.ts | 60 ++++- src/data/battle-anims.ts | 3 +- src/data/battler-tags.ts | 5 +- src/data/berry.ts | 2 +- src/data/challenge.ts | 2 +- src/data/moves/all-moves.ts | 3 - src/data/moves/move.ts | 21 +- src/data/moves/pokemon-move.ts | 93 -------- .../encounters/absolute-avarice-encounter.ts | 3 +- .../encounters/bug-type-superfan-encounter.ts | 4 +- .../encounters/clowning-around-encounter.ts | 2 +- .../encounters/dancing-lessons-encounter.ts | 3 +- .../encounters/field-trip-encounter.ts | 3 +- .../encounters/fiery-fallout-encounter.ts | 2 +- .../encounters/fun-and-games-encounter.ts | 2 +- .../global-trade-system-encounter.ts | 3 +- .../encounters/lost-at-sea-encounter.ts | 2 +- .../slumbering-snorlax-encounter.ts | 3 +- .../encounters/the-strong-stuff-encounter.ts | 2 +- .../encounters/trash-to-treasure-encounter.ts | 2 +- .../encounters/uncommon-breed-encounter.ts | 2 +- .../encounters/weird-dream-encounter.ts | 2 +- .../mystery-encounter-requirements.ts | 3 +- .../mystery-encounters/mystery-encounter.ts | 3 +- .../can-learn-move-requirement.ts | 2 +- .../utils/encounter-phase-utils.ts | 7 +- src/data/pokemon-forms.ts | 2 +- src/data/pokemon-species.ts | 7 +- src/data/trainers/trainer-config.ts | 2 +- src/enums/ai-type.ts | 5 - src/enums/evolution-item.ts | 48 ---- src/enums/field-position.ts | 5 - src/enums/hit-result.ts | 15 -- src/enums/learn-move-context.ts | 8 - src/enums/species-wild-evolution-delay.ts | 8 - src/field/damage-number-handler.ts | 4 +- src/field/pokemon.ts | 206 ++++++++++++++++-- src/interfaces/attack-move-result.ts | 12 - src/interfaces/damage-calculation-result.ts | 11 - src/interfaces/turn-move.ts | 12 - src/modifier/modifier-type.ts | 9 +- src/modifier/modifier.ts | 2 +- src/overrides.ts | 2 +- src/phases/command-phase.ts | 5 +- src/phases/damage-anim-phase.ts | 3 +- src/phases/encounter-phase.ts | 2 +- src/phases/evolution-phase.ts | 10 +- src/phases/faint-phase.ts | 7 +- src/phases/learn-move-phase.ts | 2 +- src/phases/move-charge-phase.ts | 2 +- src/phases/move-effect-phase.ts | 5 +- src/phases/move-header-phase.ts | 2 +- src/phases/move-phase.ts | 4 +- src/phases/pokemon-heal-phase.ts | 2 +- src/phases/pokemon-transform-phase.ts | 2 +- src/phases/select-target-phase.ts | 2 +- src/phases/summon-phase.ts | 2 +- src/phases/switch-summon-phase.ts | 3 +- src/phases/toggle-double-position-phase.ts | 2 +- src/phases/turn-start-phase.ts | 5 +- src/phases/weather-effect-phase.ts | 2 +- src/system/game-data.ts | 2 +- src/system/pokemon-data.ts | 3 +- src/ui/fight-ui-handler.ts | 2 +- src/ui/modifier-select-ui-handler.ts | 2 +- src/ui/party-ui-handler.ts | 6 +- src/ui/pokedex-page-ui-handler.ts | 2 +- src/ui/pokedex-scan-ui-handler.ts | 2 +- src/ui/pokedex-ui-handler.ts | 2 +- src/ui/pokemon-hatch-info-container.ts | 2 +- src/ui/starter-select-ui-handler.ts | 2 +- src/ui/summary-ui-handler.ts | 3 +- test/abilities/aura_break.test.ts | 2 +- test/abilities/battery.test.ts | 2 +- test/abilities/battle_bond.test.ts | 3 +- test/abilities/flower_veil.test.ts | 2 +- test/abilities/friend_guard.test.ts | 2 +- test/abilities/galvanize.test.ts | 4 +- test/abilities/hustle.test.ts | 2 +- test/abilities/infiltrator.test.ts | 2 +- test/abilities/libero.test.ts | 2 +- test/abilities/magic_bounce.test.ts | 2 +- test/abilities/power_spot.test.ts | 2 +- test/abilities/protean.test.ts | 2 +- test/abilities/sap_sipper.test.ts | 3 +- test/abilities/serene_grace.test.ts | 2 +- test/abilities/sheer_force.test.ts | 3 +- test/abilities/steely_spirit.test.ts | 2 +- test/abilities/supreme_overlord.test.ts | 2 +- test/abilities/tera_shell.test.ts | 2 +- test/abilities/unburden.test.ts | 3 +- test/abilities/wimp_out.test.ts | 9 +- test/abilities/wonder_skin.test.ts | 2 +- test/arena/arena_gravity.test.ts | 2 +- test/arena/grassy_terrain.test.ts | 2 +- test/arena/weather_fog.test.ts | 2 +- test/arena/weather_strong_winds.test.ts | 2 +- test/battle/damage_calculation.test.ts | 2 +- test/battlerTags/substitute.test.ts | 6 +- test/enemy_command.test.ts | 4 +- test/evolution.test.ts | 7 +- test/imports.test.ts | 2 +- test/items/reviver_seed.test.ts | 2 +- test/moves/astonish.test.ts | 2 +- test/moves/aurora_veil.test.ts | 3 +- test/moves/burning_jealousy.test.ts | 2 +- test/moves/ceaseless_edge.test.ts | 2 +- test/moves/copycat.test.ts | 3 +- test/moves/destiny_bond.test.ts | 2 +- test/moves/diamond_storm.test.ts | 2 +- test/moves/dig.test.ts | 2 +- test/moves/dragon_tail.test.ts | 2 +- test/moves/dynamax_cannon.test.ts | 2 +- test/moves/effectiveness.test.ts | 2 +- test/moves/fell_stinger.test.ts | 2 +- test/moves/fly.test.ts | 2 +- test/moves/freezy_frost.test.ts | 2 +- test/moves/fusion_flare_bolt.test.ts | 2 +- test/moves/glaive_rush.test.ts | 2 +- test/moves/hard_press.test.ts | 2 +- test/moves/hyper_beam.test.ts | 2 +- test/moves/lash_out.test.ts | 2 +- test/moves/last_respects.test.ts | 2 +- test/moves/light_screen.test.ts | 3 +- test/moves/magic_coat.test.ts | 2 +- test/moves/metronome.test.ts | 3 +- test/moves/moongeist_beam.test.ts | 3 +- test/moves/pledge_moves.test.ts | 3 +- test/moves/powder.test.ts | 3 +- test/moves/protect.test.ts | 2 +- test/moves/rage_fist.test.ts | 2 +- test/moves/reflect.test.ts | 3 +- test/moves/retaliate.test.ts | 2 +- test/moves/rollout.test.ts | 2 +- test/moves/round.test.ts | 2 +- test/moves/scale_shot.test.ts | 2 +- test/moves/secret_power.test.ts | 2 +- test/moves/shell_side_arm.test.ts | 3 +- test/moves/shell_trap.test.ts | 2 +- test/moves/sketch.test.ts | 6 +- test/moves/solar_beam.test.ts | 2 +- test/moves/sparkly_swirl.test.ts | 2 +- test/moves/spectral_thief.test.ts | 2 +- test/moves/spit_up.test.ts | 4 +- test/moves/steamroller.test.ts | 4 +- test/moves/stockpile.test.ts | 2 +- test/moves/substitute.test.ts | 3 +- test/moves/swallow.test.ts | 2 +- test/moves/telekinesis.test.ts | 2 +- test/moves/tera_blast.test.ts | 5 +- test/moves/toxic.test.ts | 2 +- test/moves/triple_arrows.test.ts | 3 +- ...an-offer-you-cant-refuse-encounter.test.ts | 3 +- .../bug-type-superfan-encounter.test.ts | 2 +- .../clowning-around-encounter.test.ts | 2 +- .../dancing-lessons-encounter.test.ts | 2 +- .../fight-or-flight-encounter.test.ts | 2 +- .../encounters/part-timer-encounter.test.ts | 2 +- .../the-strong-stuff-encounter.test.ts | 2 +- .../trash-to-treasure-encounter.test.ts | 2 +- .../uncommon-breed-encounter.test.ts | 2 +- test/testUtils/helpers/moveHelper.ts | 2 +- 168 files changed, 455 insertions(+), 490 deletions(-) delete mode 100644 src/@types/damage-result.ts delete mode 100644 src/data/moves/all-moves.ts delete mode 100644 src/data/moves/pokemon-move.ts delete mode 100644 src/enums/ai-type.ts delete mode 100644 src/enums/evolution-item.ts delete mode 100644 src/enums/field-position.ts delete mode 100644 src/enums/hit-result.ts delete mode 100644 src/enums/learn-move-context.ts delete mode 100644 src/enums/species-wild-evolution-delay.ts delete mode 100644 src/interfaces/attack-move-result.ts delete mode 100644 src/interfaces/damage-calculation-result.ts delete mode 100644 src/interfaces/turn-move.ts diff --git a/src/@types/damage-result.ts b/src/@types/damage-result.ts deleted file mode 100644 index 7086d843cf4..00000000000 --- a/src/@types/damage-result.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { HitResult } from "#enums/hit-result"; - -export type DamageResult = - | HitResult.EFFECTIVE - | HitResult.SUPER_EFFECTIVE - | HitResult.NOT_VERY_EFFECTIVE - | HitResult.ONE_HIT_KO - | HitResult.CONFUSION - | HitResult.INDIRECT_KO - | HitResult.INDIRECT; diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 12dbfca68e8..dd983f2b397 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -51,7 +51,7 @@ import { initGameSpeed } from "#app/system/game-speed"; import { Arena, ArenaBase } from "#app/field/arena"; import { GameData } from "#app/system/game-data"; import { addTextObject, getTextColor, TextStyle } from "#app/ui/text"; -import { allMoves } from "./data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { MusicPreference } from "#app/system/settings/settings"; import { getDefaultModifierTypeForTier, diff --git a/src/battle.ts b/src/battle.ts index 1122db2679a..fb5af223b8f 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -15,8 +15,7 @@ import { MoneyMultiplierModifier, PokemonHeldItemModifier } from "./modifier/mod import type { PokeballType } from "#enums/pokeball"; import { trainerConfigs } from "#app/data/trainers/trainer-config"; import { SpeciesFormKey } from "#enums/species-form-key"; -import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; -import type { TurnMove } from "./interfaces/turn-move"; +import type { EnemyPokemon, PlayerPokemon, TurnMove } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattleSpec } from "#enums/battle-spec"; diff --git a/src/data/ability.ts b/src/data/ability.ts index 02cc12dd0f4..3e32a624f9f 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -1,8 +1,6 @@ -import type { EnemyPokemon } from "../field/pokemon"; -import type { PokemonMove } from "./moves/pokemon-move"; +import type { EnemyPokemon, PokemonMove } from "../field/pokemon"; import type Pokemon from "../field/pokemon"; -import { MoveResult, PlayerPokemon } from "../field/pokemon"; -import { HitResult } from "#enums/hit-result"; +import { HitResult, MoveResult, PlayerPokemon } from "../field/pokemon"; import { PokemonType } from "#enums/pokemon-type"; import { BooleanHolder, NumberHolder, toDmgValue, isNullOrUndefined, randSeedItem, randSeedInt, type Constructor } from "#app/utils"; import { getPokemonNameWithAffix } from "../messages"; @@ -12,8 +10,7 @@ import { BattlerTagLapseType, GroundedTag } from "./battler-tags"; import { getNonVolatileStatusEffects, getStatusEffectDescriptor, getStatusEffectHealText } from "#app/data/status-effect"; import { Gender } from "./gender"; import type Move from "./moves/move"; -import { AttackMove, FlinchAttr, OneHitKOAttr, HitHealAttr, StatusMove, SelfStatusMove, VariablePowerAttr, applyMoveAttrs, VariableMoveTypeAttr, RandomMovesetMoveAttr, RandomMoveAttr, NaturePowerAttr, CopyMoveAttr, NeutralDamageAgainstFlyingTypeMultiplierAttr, FixedDamageAttr } from "./moves/move"; -import { allMoves } from "./moves/all-moves"; +import { AttackMove, FlinchAttr, OneHitKOAttr, HitHealAttr, allMoves, StatusMove, SelfStatusMove, VariablePowerAttr, applyMoveAttrs, VariableMoveTypeAttr, RandomMovesetMoveAttr, RandomMoveAttr, NaturePowerAttr, CopyMoveAttr, NeutralDamageAgainstFlyingTypeMultiplierAttr, FixedDamageAttr } from "./moves/move"; import { MoveFlags } from "#enums/MoveFlags"; import { MoveTarget } from "#enums/MoveTarget"; import { MoveCategory } from "#enums/MoveCategory"; diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index c6a1515685f..871f622f70a 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -2,13 +2,12 @@ import { globalScene } from "#app/global-scene"; import type { Arena } from "#app/field/arena"; import { PokemonType } from "#enums/pokemon-type"; import { BooleanHolder, NumberHolder, toDmgValue } from "#app/utils"; -import { allMoves } from "./moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { MoveTarget } from "#enums/MoveTarget"; import { MoveCategory } from "#enums/MoveCategory"; import { getPokemonNameWithAffix } from "#app/messages"; import type Pokemon from "#app/field/pokemon"; -import { HitResult } from "#enums/hit-result"; -import { PokemonMove } from "./moves/pokemon-move"; +import { HitResult, PokemonMove } from "#app/field/pokemon"; import { StatusEffect } from "#enums/status-effect"; import type { BattlerIndex } from "#app/battle"; import { diff --git a/src/data/balance/egg-moves.ts b/src/data/balance/egg-moves.ts index 98f3347764c..74f6a2c1afb 100644 --- a/src/data/balance/egg-moves.ts +++ b/src/data/balance/egg-moves.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { getEnumKeys, getEnumValues } from "#app/utils"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/src/data/balance/pokemon-evolutions.ts b/src/data/balance/pokemon-evolutions.ts index 70b616be8e5..17f71f3c3c9 100644 --- a/src/data/balance/pokemon-evolutions.ts +++ b/src/data/balance/pokemon-evolutions.ts @@ -14,10 +14,66 @@ import { DamageMoneyRewardModifier, ExtraModifierModifier, MoneyMultiplierModifi import { SpeciesFormKey } from "#enums/species-form-key"; import { speciesStarterCosts } from "./starters"; import i18next from "i18next"; -import { SpeciesWildEvolutionDelay } from "#enums/species-wild-evolution-delay"; -import { EvolutionItem } from "#enums/evolution-item"; +export enum SpeciesWildEvolutionDelay { + NONE, + SHORT, + MEDIUM, + LONG, + VERY_LONG, + NEVER +} + +export enum EvolutionItem { + NONE, + + LINKING_CORD, + SUN_STONE, + MOON_STONE, + LEAF_STONE, + FIRE_STONE, + WATER_STONE, + THUNDER_STONE, + ICE_STONE, + DUSK_STONE, + DAWN_STONE, + SHINY_STONE, + CRACKED_POT, + SWEET_APPLE, + TART_APPLE, + STRAWBERRY_SWEET, + UNREMARKABLE_TEACUP, + UPGRADE, + DUBIOUS_DISC, + DRAGON_SCALE, + PRISM_SCALE, + RAZOR_CLAW, + RAZOR_FANG, + REAPER_CLOTH, + ELECTIRIZER, + MAGMARIZER, + PROTECTOR, + SACHET, + WHIPPED_DREAM, + SYRUPY_APPLE, + CHIPPED_POT, + GALARICA_CUFF, + GALARICA_WREATH, + AUSPICIOUS_ARMOR, + MALICIOUS_ARMOR, + MASTERPIECE_TEACUP, + SUN_FLUTE, + MOON_FLUTE, + + BLACK_AUGURITE = 51, + PEAT_BLOCK, + METAL_ALLOY, + SCROLL_OF_DARKNESS, + SCROLL_OF_WATERS, + LEADERS_CREST +} + /** * Pokemon Evolution tuple type consisting of: * @property 0 {@linkcode Species} The species of the Pokemon. diff --git a/src/data/battle-anims.ts b/src/data/battle-anims.ts index 396cf71d984..511c80bee72 100644 --- a/src/data/battle-anims.ts +++ b/src/data/battle-anims.ts @@ -1,6 +1,5 @@ import { globalScene } from "#app/global-scene"; -import { AttackMove, BeakBlastHeaderAttr, DelayedAttackAttr, SelfStatusMove } from "./moves/move"; -import { allMoves } from "./moves/all-moves"; +import { AttackMove, BeakBlastHeaderAttr, DelayedAttackAttr, SelfStatusMove, allMoves } from "./moves/move"; import { MoveFlags } from "#enums/MoveFlags"; import type Pokemon from "../field/pokemon"; import { type nil, getFrameMs, getEnumKeys, getEnumValues, animationFileName } from "../utils"; diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index c3dcfc49ef6..76e91485460 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -11,12 +11,12 @@ import { import { ChargeAnim, CommonAnim, CommonBattleAnim, MoveChargeAnim } from "#app/data/battle-anims"; import type Move from "#app/data/moves/move"; import { + allMoves, applyMoveAttrs, ConsecutiveUseDoublePowerAttr, HealOnAllyAttr, StatusCategoryOnAllyAttr, } from "#app/data/moves/move"; -import { allMoves } from "./moves/all-moves"; import { MoveFlags } from "#enums/MoveFlags"; import { MoveCategory } from "#enums/MoveCategory"; import { SpeciesFormChangeAbilityTrigger } from "#app/data/pokemon-forms"; @@ -24,8 +24,7 @@ import { getStatusEffectHealText } from "#app/data/status-effect"; import { TerrainType } from "#app/data/terrain"; import { PokemonType } from "#enums/pokemon-type"; import type Pokemon from "#app/field/pokemon"; -import { MoveResult } from "#app/field/pokemon"; -import { HitResult } from "#enums/hit-result"; +import { HitResult, MoveResult } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { CommonAnimPhase } from "#app/phases/common-anim-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; diff --git a/src/data/berry.ts b/src/data/berry.ts index aaa0dda6e7f..8a58d337aa4 100644 --- a/src/data/berry.ts +++ b/src/data/berry.ts @@ -1,6 +1,6 @@ import { getPokemonNameWithAffix } from "../messages"; import type Pokemon from "../field/pokemon"; -import { HitResult } from "#enums/hit-result"; +import { HitResult } from "../field/pokemon"; import { getStatusEffectHealText } from "./status-effect"; import { NumberHolder, toDmgValue, randSeedInt } from "#app/utils"; import { diff --git a/src/data/challenge.ts b/src/data/challenge.ts index 9a3c329a70b..51616c3f00f 100644 --- a/src/data/challenge.ts +++ b/src/data/challenge.ts @@ -6,7 +6,7 @@ import type PokemonSpecies from "#app/data/pokemon-species"; import { getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; import { speciesStarterCosts } from "#app/data/balance/starters"; import type Pokemon from "#app/field/pokemon"; -import { PokemonMove } from "./moves/pokemon-move"; +import { PokemonMove } from "#app/field/pokemon"; import type { FixedBattleConfig } from "#app/battle"; import { ClassicFixedBossWaves, BattleType, getRandomTrainerFunc } from "#app/battle"; import Trainer, { TrainerVariant } from "#app/field/trainer"; diff --git a/src/data/moves/all-moves.ts b/src/data/moves/all-moves.ts deleted file mode 100644 index c7b6d11a08d..00000000000 --- a/src/data/moves/all-moves.ts +++ /dev/null @@ -1,3 +0,0 @@ -import type Move from "./move"; - -export const allMoves: Move[] = []; diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 591894f5f1e..962a13bb840 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -12,17 +12,16 @@ import { TypeBoostTag, } from "../battler-tags"; import { getPokemonNameWithAffix } from "../../messages"; -import type { AttackMoveResult } from "#app/interfaces/attack-move-result"; -import type { TurnMove } from "#app/interfaces/turn-move"; +import type { AttackMoveResult, TurnMove } from "../../field/pokemon"; import type Pokemon from "../../field/pokemon"; import { EnemyPokemon, + FieldPosition, + HitResult, MoveResult, PlayerPokemon, + PokemonMove, } from "../../field/pokemon"; -import { HitResult } from "#enums/hit-result"; -import { FieldPosition } from "#enums/field-position"; -import { PokemonMove } from "./pokemon-move"; import { getNonVolatileStatusEffects, getStatusEffectHealText, @@ -122,7 +121,6 @@ import { MoveFlags } from "#enums/MoveFlags"; import { MoveEffectTrigger } from "#enums/MoveEffectTrigger"; import { MultiHitType } from "#enums/MultiHitType"; import { invalidAssistMoves, invalidCopycatMoves, invalidMetronomeMoves, invalidMirrorMoveMoves, invalidSleepTalkMoves } from "./invalid-moves"; -import { allMoves } from "./all-moves"; type MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => boolean; type UserMoveConditionFunc = (user: Pokemon, move: Move) => boolean; @@ -8259,7 +8257,11 @@ export function getMoveTargets(user: Pokemon, move: Moves, replaceTarget?: MoveT return { targets: set.filter(p => p?.isActive(true)).map(p => p.getBattlerIndex()).filter(t => t !== undefined), multiple }; } -allMoves.push(new SelfStatusMove(Moves.NONE, PokemonType.NORMAL, MoveCategory.STATUS, -1, -1, 0, 1)); +export const allMoves: Move[] = [ + new SelfStatusMove(Moves.NONE, PokemonType.NORMAL, MoveCategory.STATUS, -1, -1, 0, 1), +]; + +export const selfStatLowerMoves: Moves[] = []; export function initMoves() { allMoves.push( @@ -11248,4 +11250,9 @@ export function initMoves() { new AttackMove(Moves.MALIGNANT_CHAIN, PokemonType.POISON, MoveCategory.SPECIAL, 100, 100, 5, 50, 0, 9) .attr(StatusEffectAttr, StatusEffect.TOXIC) ); + allMoves.map(m => { + if (m.getAttrs(StatStageChangeAttr).some(a => a.selfTarget && a.stages < 0)) { + selfStatLowerMoves.push(m.id); + } + }); } diff --git a/src/data/moves/pokemon-move.ts b/src/data/moves/pokemon-move.ts deleted file mode 100644 index 49ccaba698b..00000000000 --- a/src/data/moves/pokemon-move.ts +++ /dev/null @@ -1,93 +0,0 @@ -import * as Utils from "#app/utils"; -import { allMoves } from "./all-moves"; -import type { Moves } from "#enums/moves"; -import type Pokemon from "#app/field/pokemon"; -import type Move from "./move"; - -/** - * Wrapper class for the {@linkcode Move} class for Pokemon to interact with. - * These are the moves assigned to a {@linkcode Pokemon} object. - * It links to {@linkcode Move} class via the move ID. - * Compared to {@linkcode Move}, this class also tracks if a move has received. - * PP Ups, amount of PP used, and things like that. - * @see {@linkcode isUsable} - checks if move is restricted, out of PP, or not implemented. - * @see {@linkcode getMove} - returns {@linkcode Move} object by looking it up via ID. - * @see {@linkcode usePp} - removes a point of PP from the move. - * @see {@linkcode getMovePp} - returns amount of PP a move currently has. - * @see {@linkcode getPpRatio} - returns the current PP amount / max PP amount. - * @see {@linkcode getName} - returns name of {@linkcode Move}. - **/ -export class PokemonMove { - public moveId: Moves; - public ppUsed: number; - public ppUp: number; - public virtual: boolean; - - /** - * If defined and nonzero, overrides the maximum PP of the move (e.g., due to move being copied by Transform). - * This also nullifies all effects of `ppUp`. - */ - public maxPpOverride?: number; - - constructor(moveId: Moves, ppUsed = 0, ppUp = 0, virtual = false, maxPpOverride?: number) { - this.moveId = moveId; - this.ppUsed = ppUsed; - this.ppUp = ppUp; - this.virtual = virtual; - this.maxPpOverride = maxPpOverride; - } - - /** - * Checks whether the move can be selected or performed by a Pokemon, without consideration for the move's targets. - * The move is unusable if it is out of PP, restricted by an effect, or unimplemented. - * - * @param pokemon - {@linkcode Pokemon} that would be using this move - * @param ignorePp - If `true`, skips the PP check - * @param ignoreRestrictionTags - If `true`, skips the check for move restriction tags (see {@link MoveRestrictionBattlerTag}) - * @returns `true` if the move can be selected and used by the Pokemon, otherwise `false`. - */ - isUsable(pokemon: Pokemon, ignorePp = false, ignoreRestrictionTags = false): boolean { - if (this.moveId && !ignoreRestrictionTags && pokemon.isMoveRestricted(this.moveId, pokemon)) { - return false; - } - - if (this.getMove().name.endsWith(" (N)")) { - return false; - } - - return ignorePp || this.ppUsed < this.getMovePp() || this.getMove().pp === -1; - } - - getMove(): Move { - return allMoves[this.moveId]; - } - - /** - * Sets {@link ppUsed} for this move and ensures the value does not exceed {@link getMovePp} - * @param {number} count Amount of PP to use - */ - usePp(count = 1) { - this.ppUsed = Math.min(this.ppUsed + count, this.getMovePp()); - } - - getMovePp(): number { - return this.maxPpOverride || this.getMove().pp + this.ppUp * Utils.toDmgValue(this.getMove().pp / 5); - } - - getPpRatio(): number { - return 1 - this.ppUsed / this.getMovePp(); - } - - getName(): string { - return this.getMove().name; - } - - /** - * Copies an existing move or creates a valid PokemonMove object from json representing one - * @param source - The data for the move to copy - * @return A valid pokemonmove object - */ - static loadMove(source: PokemonMove | any): PokemonMove { - return new PokemonMove(source.moveId, source.ppUsed, source.ppUp, source.virtual, source.maxPpOverride); - } -} diff --git a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts index b781f14fad1..85f40a41e51 100644 --- a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts +++ b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts @@ -7,8 +7,7 @@ import { transitionMysteryEncounterIntroVisuals, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import type Pokemon from "#app/field/pokemon"; -import { EnemyPokemon } from "#app/field/pokemon"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { EnemyPokemon, PokemonMove } from "#app/field/pokemon"; import type { BerryModifierType, PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; import { modifierTypes } from "#app/modifier/modifier-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; diff --git a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts index c6971c42364..1e4c9a3b957 100644 --- a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts +++ b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts @@ -24,7 +24,7 @@ import { TrainerType } from "#enums/trainer-type"; import { Species } from "#enums/species"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { PokemonMove } from "#app/field/pokemon"; import { getEncounterText, showEncounterDialogue } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { LearnMovePhase } from "#app/phases/learn-move-phase"; import { Moves } from "#enums/moves"; @@ -50,7 +50,7 @@ import { } from "#app/modifier/modifier"; import i18next from "i18next"; import MoveInfoOverlay from "#app/ui/move-info-overlay"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; import { getSpriteKeysFromSpecies } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; diff --git a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts index 15fad6dacbf..eca99fc0c13 100644 --- a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts +++ b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts @@ -37,7 +37,7 @@ import { Mode } from "#app/ui/ui"; import i18next from "i18next"; import type { OptionSelectConfig } from "#app/ui/abstact-option-select-ui-handler"; import type { PlayerPokemon } from "#app/field/pokemon"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { PokemonMove } from "#app/field/pokemon"; import { Ability } from "#app/data/ability"; import { BerryModifier } from "#app/modifier/modifier"; import { BerryType } from "#enums/berry-type"; diff --git a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts index 90ea6a69c0d..75527e1f8c1 100644 --- a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts +++ b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts @@ -23,8 +23,7 @@ import { getPokemonSpecies } from "#app/data/pokemon-species"; import { TrainerSlot } from "#enums/trainer-slot"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { EnemyPokemon } from "#app/field/pokemon"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { EnemyPokemon, PokemonMove } from "#app/field/pokemon"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; import { modifierTypes } from "#app/modifier/modifier-type"; import { LearnMovePhase } from "#app/phases/learn-move-phase"; diff --git a/src/data/mystery-encounters/encounters/field-trip-encounter.ts b/src/data/mystery-encounters/encounters/field-trip-encounter.ts index 4e330fab3d9..a1964aa5ab4 100644 --- a/src/data/mystery-encounters/encounters/field-trip-encounter.ts +++ b/src/data/mystery-encounters/encounters/field-trip-encounter.ts @@ -7,8 +7,7 @@ import { setEncounterExp, setEncounterRewards, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import type { PlayerPokemon } from "#app/field/pokemon"; -import type { PokemonMove } from "#app/data/moves/pokemon-move"; +import type { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; import { modifierTypes } from "#app/modifier/modifier-type"; import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; diff --git a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts index d868184a7fa..6118fe3d0de 100644 --- a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts +++ b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts @@ -26,7 +26,7 @@ import { Gender } from "#app/data/gender"; import { PokemonType } from "#enums/pokemon-type"; import { BattlerIndex } from "#app/battle"; import type Pokemon from "#app/field/pokemon"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { PokemonMove } from "#app/field/pokemon"; import { Moves } from "#enums/moves"; import { EncounterBattleAnim } from "#app/data/battle-anims"; import { WeatherType } from "#enums/weather-type"; diff --git a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts index a9fc24c70b7..282c6c149ff 100644 --- a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts +++ b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts @@ -13,7 +13,7 @@ import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/myst import { TrainerSlot } from "#enums/trainer-slot"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { FieldPosition } from "#enums/field-position"; +import { FieldPosition } from "#app/field/pokemon"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { MoneyRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import { queueEncounterMessage, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; diff --git a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts index fce496e5e17..f80620647b0 100644 --- a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts +++ b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts @@ -26,8 +26,7 @@ import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode import { NumberHolder, isNullOrUndefined, randInt, randSeedInt, randSeedShuffle, randSeedItem } from "#app/utils"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { EnemyPokemon } from "#app/field/pokemon"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { EnemyPokemon, PokemonMove } from "#app/field/pokemon"; import type { PokemonHeldItemModifier } from "#app/modifier/modifier"; import { HiddenAbilityRateBoosterModifier, diff --git a/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts b/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts index 030678b77b1..97fd5783ebb 100644 --- a/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts +++ b/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts @@ -11,7 +11,7 @@ import { applyDamageToPokemon } from "#app/data/mystery-encounters/utils/encount import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { PokemonMove } from "#app/field/pokemon"; const OPTION_1_REQUIRED_MOVE = Moves.SURF; const OPTION_2_REQUIRED_MOVE = Moves.FLY; diff --git a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts index 97a17af43d0..bfa1204a8ba 100644 --- a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts +++ b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts @@ -21,8 +21,7 @@ import { import { queueEncounterMessage } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { Moves } from "#enums/moves"; import { BattlerIndex } from "#app/battle"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; -import { AiType } from "#enums/ai-type"; +import { AiType, PokemonMove } from "#app/field/pokemon"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; diff --git a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts index af0363f37e3..c994c6e993f 100644 --- a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts @@ -17,7 +17,7 @@ import { getPokemonSpecies } from "#app/data/pokemon-species"; import { Species } from "#enums/species"; import { Nature } from "#enums/nature"; import type Pokemon from "#app/field/pokemon"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { PokemonMove } from "#app/field/pokemon"; import { queueEncounterMessage, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { modifyPlayerPokemonBST } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import { Moves } from "#enums/moves"; diff --git a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts index 2203ac041f8..e60fe0ddc18 100644 --- a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts +++ b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts @@ -25,7 +25,7 @@ import { ModifierTier } from "#app/modifier/modifier-tier"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { Moves } from "#enums/moves"; import { BattlerIndex } from "#app/battle"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { PokemonMove } from "#app/field/pokemon"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; import { randSeedInt } from "#app/utils"; diff --git a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts index 4e3c238aeba..ed1866c7a1b 100644 --- a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts +++ b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts @@ -10,7 +10,7 @@ import { import { CHARMING_MOVES } from "#app/data/mystery-encounters/requirements/requirement-groups"; import type Pokemon from "#app/field/pokemon"; import type { EnemyPokemon } from "#app/field/pokemon"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { PokemonMove } from "#app/field/pokemon"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { globalScene } from "#app/global-scene"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; diff --git a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts index be0c0bdff54..22ec52e976c 100644 --- a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts +++ b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts @@ -16,7 +16,7 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { PokemonMove } from "#app/field/pokemon"; import { NumberHolder, isNullOrUndefined, randSeedInt, randSeedShuffle } from "#app/utils"; import type PokemonSpecies from "#app/data/pokemon-species"; import { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species"; diff --git a/src/data/mystery-encounters/mystery-encounter-requirements.ts b/src/data/mystery-encounters/mystery-encounter-requirements.ts index 0c146fe485d..f9aedf2c1a7 100644 --- a/src/data/mystery-encounters/mystery-encounter-requirements.ts +++ b/src/data/mystery-encounters/mystery-encounter-requirements.ts @@ -1,7 +1,6 @@ import { globalScene } from "#app/global-scene"; import { allAbilities } from "#app/data/ability"; -import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; -import { EvolutionItem } from "#enums/evolution-item"; +import { EvolutionItem, pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { Nature } from "#enums/nature"; import { FormChangeItem, pokemonFormChanges, SpeciesFormChangeItemTrigger } from "#app/data/pokemon-forms"; import { StatusEffect } from "#enums/status-effect"; diff --git a/src/data/mystery-encounters/mystery-encounter.ts b/src/data/mystery-encounters/mystery-encounter.ts index 8010983f9f3..ff098d4d7dd 100644 --- a/src/data/mystery-encounters/mystery-encounter.ts +++ b/src/data/mystery-encounters/mystery-encounter.ts @@ -1,6 +1,5 @@ import type { EnemyPartyConfig } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import type { PlayerPokemon } from "#app/field/pokemon"; -import type { PokemonMove } from "../moves/pokemon-move"; +import type { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { capitalizeFirstLetter, isNullOrUndefined } from "#app/utils"; import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; diff --git a/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts b/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts index 598b0ffae70..a7ffe3e26ca 100644 --- a/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts +++ b/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts @@ -1,6 +1,6 @@ import type { Moves } from "#app/enums/moves"; import type { PlayerPokemon } from "#app/field/pokemon"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { PokemonMove } from "#app/field/pokemon"; import { isNullOrUndefined } from "#app/utils"; import { EncounterPokemonRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import { globalScene } from "#app/global-scene"; diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index 6ab650d5f9b..a9f6b787878 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -7,12 +7,9 @@ import { WEIGHT_INCREMENT_ON_SPAWN_MISS, } from "#app/data/mystery-encounters/mystery-encounters"; import { showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; -import type { PlayerPokemon } from "#app/field/pokemon"; -import type { AiType } from "#enums/ai-type"; +import type { AiType, PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { EnemyPokemon, PokemonSummonData } from "#app/field/pokemon"; -import { FieldPosition } from "#enums/field-position"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { EnemyPokemon, FieldPosition, PokemonMove, PokemonSummonData } from "#app/field/pokemon"; import type { CustomModifierSettings, ModifierType } from "#app/modifier/modifier-type"; import { getPartyLuckValue, diff --git a/src/data/pokemon-forms.ts b/src/data/pokemon-forms.ts index 6f36bfde74f..63e166c7fc4 100644 --- a/src/data/pokemon-forms.ts +++ b/src/data/pokemon-forms.ts @@ -1,7 +1,7 @@ import { PokemonFormChangeItemModifier } from "../modifier/modifier"; import type Pokemon from "../field/pokemon"; import { StatusEffect } from "#enums/status-effect"; -import { allMoves } from "./moves/all-moves"; +import { allMoves } from "./moves/move"; import { MoveCategory } from "#enums/MoveCategory"; import type { Constructor, nil } from "#app/utils"; import { Abilities } from "#enums/abilities"; diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index ced828fbc6b..a27c00121dc 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -13,8 +13,11 @@ import { uncatchableSpecies } from "#app/data/balance/biomes"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { GrowthRate } from "#app/data/exp"; import type { EvolutionLevel } from "#app/data/balance/pokemon-evolutions"; -import { pokemonEvolutions, pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; -import { SpeciesWildEvolutionDelay } from "#enums/species-wild-evolution-delay"; +import { + SpeciesWildEvolutionDelay, + pokemonEvolutions, + pokemonPrevolutions, +} from "#app/data/balance/pokemon-evolutions"; import { PokemonType } from "#enums/pokemon-type"; import type { LevelMoves } from "#app/data/balance/pokemon-level-moves"; import { diff --git a/src/data/trainers/trainer-config.ts b/src/data/trainers/trainer-config.ts index c87f72bd912..0ab7119dab9 100644 --- a/src/data/trainers/trainer-config.ts +++ b/src/data/trainers/trainer-config.ts @@ -1,6 +1,6 @@ import { globalScene } from "#app/global-scene"; import { modifierTypes } from "#app/modifier/modifier-type"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { PokemonMove } from "#app/field/pokemon"; import { toReadableString, isNullOrUndefined, randSeedItem, randSeedInt } from "#app/utils"; import { pokemonEvolutions, pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; import { getPokemonSpecies } from "#app/data/pokemon-species"; diff --git a/src/enums/ai-type.ts b/src/enums/ai-type.ts deleted file mode 100644 index 13931172a4a..00000000000 --- a/src/enums/ai-type.ts +++ /dev/null @@ -1,5 +0,0 @@ -export enum AiType { - RANDOM, - SMART_RANDOM, - SMART -} diff --git a/src/enums/evolution-item.ts b/src/enums/evolution-item.ts deleted file mode 100644 index 3b5e493b378..00000000000 --- a/src/enums/evolution-item.ts +++ /dev/null @@ -1,48 +0,0 @@ -export enum EvolutionItem { - NONE, - - LINKING_CORD, - SUN_STONE, - MOON_STONE, - LEAF_STONE, - FIRE_STONE, - WATER_STONE, - THUNDER_STONE, - ICE_STONE, - DUSK_STONE, - DAWN_STONE, - SHINY_STONE, - CRACKED_POT, - SWEET_APPLE, - TART_APPLE, - STRAWBERRY_SWEET, - UNREMARKABLE_TEACUP, - UPGRADE, - DUBIOUS_DISC, - DRAGON_SCALE, - PRISM_SCALE, - RAZOR_CLAW, - RAZOR_FANG, - REAPER_CLOTH, - ELECTIRIZER, - MAGMARIZER, - PROTECTOR, - SACHET, - WHIPPED_DREAM, - SYRUPY_APPLE, - CHIPPED_POT, - GALARICA_CUFF, - GALARICA_WREATH, - AUSPICIOUS_ARMOR, - MALICIOUS_ARMOR, - MASTERPIECE_TEACUP, - SUN_FLUTE, - MOON_FLUTE, - - BLACK_AUGURITE = 51, - PEAT_BLOCK, - METAL_ALLOY, - SCROLL_OF_DARKNESS, - SCROLL_OF_WATERS, - LEADERS_CREST -} diff --git a/src/enums/field-position.ts b/src/enums/field-position.ts deleted file mode 100644 index 5b7f9c6c570..00000000000 --- a/src/enums/field-position.ts +++ /dev/null @@ -1,5 +0,0 @@ -export enum FieldPosition { - CENTER, - LEFT, - RIGHT -} diff --git a/src/enums/hit-result.ts b/src/enums/hit-result.ts deleted file mode 100644 index 3e62587dd6c..00000000000 --- a/src/enums/hit-result.ts +++ /dev/null @@ -1,15 +0,0 @@ -export enum HitResult { - EFFECTIVE = 1, - SUPER_EFFECTIVE, - NOT_VERY_EFFECTIVE, - ONE_HIT_KO, - NO_EFFECT, - STATUS, - HEAL, - FAIL, - MISS, - INDIRECT, - IMMUNE, - CONFUSION, - INDIRECT_KO -} diff --git a/src/enums/learn-move-context.ts b/src/enums/learn-move-context.ts deleted file mode 100644 index 26001cbcce8..00000000000 --- a/src/enums/learn-move-context.ts +++ /dev/null @@ -1,8 +0,0 @@ -export enum LearnMoveContext { - MISC, - LEVEL_UP, - RELEARN, - EVOLUTION, - EVOLUTION_FUSED, // If fusionSpecies has Evolved - EVOLUTION_FUSED_BASE, // If fusion's base species has Evolved -} diff --git a/src/enums/species-wild-evolution-delay.ts b/src/enums/species-wild-evolution-delay.ts deleted file mode 100644 index 7555dc0e8f6..00000000000 --- a/src/enums/species-wild-evolution-delay.ts +++ /dev/null @@ -1,8 +0,0 @@ -export enum SpeciesWildEvolutionDelay { - NONE, - SHORT, - MEDIUM, - LONG, - VERY_LONG, - NEVER -} diff --git a/src/field/damage-number-handler.ts b/src/field/damage-number-handler.ts index 3bb001bf005..a527b148fff 100644 --- a/src/field/damage-number-handler.ts +++ b/src/field/damage-number-handler.ts @@ -1,7 +1,7 @@ import { TextStyle, addTextObject } from "../ui/text"; -import type { DamageResult } from "#app/@types/damage-result"; +import type { DamageResult } from "./pokemon"; import type Pokemon from "./pokemon"; -import { HitResult } from "#enums/hit-result"; +import { HitResult } from "./pokemon"; import { formatStat, fixedInt } from "#app/utils"; import type { BattlerIndex } from "../battle"; import { globalScene } from "#app/global-scene"; diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 162a5118f65..b59b7ba01fe 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -17,6 +17,7 @@ import { applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, + allMoves, TypelessAttr, CritOnlyAttr, getMoveTargets, @@ -41,7 +42,6 @@ import { VariableMoveTypeChartAttr, HpSplitAttr, } from "#app/data/moves/move"; -import { allMoves } from "#app/data/moves/all-moves"; import { MoveTarget } from "#enums/MoveTarget"; import { MoveCategory } from "#enums/MoveCategory"; import type { PokemonSpeciesForm } from "#app/data/pokemon-species"; @@ -214,7 +214,7 @@ import { SpeciesFormChangeActiveTrigger, SpeciesFormChangeLapseTeraTrigger, SpeciesFormChangeMoveLearnedTrigger, - SpeciesFormChangePostMoveTrigger, + SpeciesFormChangePostMoveTrigger } from "#app/data/pokemon-forms"; import { TerrainType } from "#app/data/terrain"; import type { TrainerSlot } from "#enums/trainer-slot"; @@ -259,15 +259,21 @@ import { MoveFlags } from "#enums/MoveFlags"; import { timedEventManager } from "#app/global-event-manager"; import { loadMoveAnimations } from "#app/sprites/pokemon-asset-loader"; import { ResetStatusPhase } from "#app/phases/reset-status-phase"; -import { LearnMoveContext } from "#enums/learn-move-context"; -import { TurnMove } from "#app/interfaces/turn-move"; -import { AiType } from "#enums/ai-type"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; -import { DamageCalculationResult } from "#app/interfaces/damage-calculation-result"; -import { FieldPosition } from "#enums/field-position"; -import { AttackMoveResult } from "#app/interfaces/attack-move-result"; -import { HitResult } from "#enums/hit-result"; -import { DamageResult } from "#app/@types/damage-result"; + +export enum LearnMoveSituation { + MISC, + LEVEL_UP, + RELEARN, + EVOLUTION, + EVOLUTION_FUSED, // If fusionSpecies has Evolved + EVOLUTION_FUSED_BASE, // If fusion's base species has Evolved +} + +export enum FieldPosition { + CENTER, + LEFT, + RIGHT, +} export default abstract class Pokemon extends Phaser.GameObjects.Container { public id: number; @@ -2919,7 +2925,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { includeEvolutionMoves = false, simulateEvolutionChain = false, includeRelearnerMoves = false, - learnSituation: LearnMoveContext = LearnMoveContext.MISC, + learnSituation: LearnMoveSituation = LearnMoveSituation.MISC, ): LevelMoves { const ret: LevelMoves = []; let levelMoves: LevelMoves = []; @@ -2927,7 +2933,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { startingLevel = this.level; } if ( - learnSituation === LearnMoveContext.EVOLUTION_FUSED && + learnSituation === LearnMoveSituation.EVOLUTION_FUSED && this.fusionSpecies ) { // For fusion evolutions, get ONLY the moves of the component mon that evolved @@ -2979,7 +2985,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } if ( this.fusionSpecies && - learnSituation !== LearnMoveContext.EVOLUTION_FUSED_BASE + learnSituation !== LearnMoveSituation.EVOLUTION_FUSED_BASE ) { // For fusion evolutions, get ONLY the moves of the component mon that evolved if (simulateEvolutionChain) { @@ -7773,6 +7779,24 @@ interface IllusionData { level?: number } +export interface TurnMove { + move: Moves; + targets: BattlerIndex[]; + result?: MoveResult; + virtual?: boolean; + turn?: number; + ignorePP?: boolean; +} + +export interface AttackMoveResult { + move: Moves; + result: DamageResult; + damage: number; + critical: boolean; + sourceId: number; + sourceBattlerIndex: BattlerIndex; +} + export class PokemonSummonData { /** [Atk, Def, SpAtk, SpDef, Spd, Acc, Eva] */ public statStages: number[] = [0, 0, 0, 0, 0, 0, 0]; @@ -7845,6 +7869,12 @@ export class PokemonTurnData { public extraTurns = 0; } +export enum AiType { + RANDOM, + SMART_RANDOM, + SMART, +} + export enum MoveResult { PENDING, SUCCESS, @@ -7852,3 +7882,151 @@ export enum MoveResult { MISS, OTHER, } + +export enum HitResult { + EFFECTIVE = 1, + SUPER_EFFECTIVE, + NOT_VERY_EFFECTIVE, + ONE_HIT_KO, + NO_EFFECT, + STATUS, + HEAL, + FAIL, + MISS, + INDIRECT, + IMMUNE, + CONFUSION, + INDIRECT_KO, +} + +export type DamageResult = + | HitResult.EFFECTIVE + | HitResult.SUPER_EFFECTIVE + | HitResult.NOT_VERY_EFFECTIVE + | HitResult.ONE_HIT_KO + | HitResult.CONFUSION + | HitResult.INDIRECT_KO + | HitResult.INDIRECT; + +/** Interface containing the results of a damage calculation for a given move */ +export interface DamageCalculationResult { + /** `true` if the move was cancelled (thus suppressing "No Effect" messages) */ + cancelled: boolean; + /** The effectiveness of the move */ + result: HitResult; + /** The damage dealt by the move */ + damage: number; +} + +/** + * Wrapper class for the {@linkcode Move} class for Pokemon to interact with. + * These are the moves assigned to a {@linkcode Pokemon} object. + * It links to {@linkcode Move} class via the move ID. + * Compared to {@linkcode Move}, this class also tracks if a move has received. + * PP Ups, amount of PP used, and things like that. + * @see {@linkcode isUsable} - checks if move is restricted, out of PP, or not implemented. + * @see {@linkcode getMove} - returns {@linkcode Move} object by looking it up via ID. + * @see {@linkcode usePp} - removes a point of PP from the move. + * @see {@linkcode getMovePp} - returns amount of PP a move currently has. + * @see {@linkcode getPpRatio} - returns the current PP amount / max PP amount. + * @see {@linkcode getName} - returns name of {@linkcode Move}. + **/ +export class PokemonMove { + public moveId: Moves; + public ppUsed: number; + public ppUp: number; + public virtual: boolean; + + /** + * If defined and nonzero, overrides the maximum PP of the move (e.g., due to move being copied by Transform). + * This also nullifies all effects of `ppUp`. + */ + public maxPpOverride?: number; + + constructor( + moveId: Moves, + ppUsed = 0, + ppUp = 0, + virtual = false, + maxPpOverride?: number, + ) { + this.moveId = moveId; + this.ppUsed = ppUsed; + this.ppUp = ppUp; + this.virtual = virtual; + this.maxPpOverride = maxPpOverride; + } + + /** + * Checks whether the move can be selected or performed by a Pokemon, without consideration for the move's targets. + * The move is unusable if it is out of PP, restricted by an effect, or unimplemented. + * + * @param {Pokemon} pokemon {@linkcode Pokemon} that would be using this move + * @param {boolean} ignorePp If `true`, skips the PP check + * @param {boolean} ignoreRestrictionTags If `true`, skips the check for move restriction tags (see {@link MoveRestrictionBattlerTag}) + * @returns `true` if the move can be selected and used by the Pokemon, otherwise `false`. + */ + isUsable( + pokemon: Pokemon, + ignorePp = false, + ignoreRestrictionTags = false, + ): boolean { + if ( + this.moveId && + !ignoreRestrictionTags && + pokemon.isMoveRestricted(this.moveId, pokemon) + ) { + return false; + } + + if (this.getMove().name.endsWith(" (N)")) { + return false; + } + + return ( + ignorePp || this.ppUsed < this.getMovePp() || this.getMove().pp === -1 + ); + } + + getMove(): Move { + return allMoves[this.moveId]; + } + + /** + * Sets {@link ppUsed} for this move and ensures the value does not exceed {@link getMovePp} + * @param {number} count Amount of PP to use + */ + usePp(count = 1) { + this.ppUsed = Math.min(this.ppUsed + count, this.getMovePp()); + } + + getMovePp(): number { + return ( + this.maxPpOverride || + this.getMove().pp + this.ppUp * toDmgValue(this.getMove().pp / 5) + ); + } + + getPpRatio(): number { + return 1 - this.ppUsed / this.getMovePp(); + } + + getName(): string { + return this.getMove().name; + } + + /** + * Copies an existing move or creates a valid PokemonMove object from json representing one + * @param {PokemonMove | any} source The data for the move to copy + * @return {PokemonMove} A valid pokemonmove object + */ + static loadMove(source: PokemonMove | any): PokemonMove { + return new PokemonMove( + source.moveId, + source.ppUsed, + source.ppUp, + source.virtual, + source.maxPpOverride, + ); + } +} diff --git a/src/interfaces/attack-move-result.ts b/src/interfaces/attack-move-result.ts deleted file mode 100644 index f91d31a69ee..00000000000 --- a/src/interfaces/attack-move-result.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BattlerIndex } from "#app/battle"; -import type { DamageResult } from "#app/@types/damage-result"; -import type { Moves } from "#enums/moves"; - -export interface AttackMoveResult { - move: Moves; - result: DamageResult; - damage: number; - critical: boolean; - sourceId: number; - sourceBattlerIndex: BattlerIndex; -} diff --git a/src/interfaces/damage-calculation-result.ts b/src/interfaces/damage-calculation-result.ts deleted file mode 100644 index 1220ff7b57d..00000000000 --- a/src/interfaces/damage-calculation-result.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { HitResult } from "#enums/hit-result"; - -/** Interface containing the results of a damage calculation for a given move */ -export interface DamageCalculationResult { - /** `true` if the move was cancelled (thus suppressing "No Effect" messages) */ - cancelled: boolean; - /** The effectiveness of the move */ - result: HitResult; - /** The damage dealt by the move */ - damage: number; -} diff --git a/src/interfaces/turn-move.ts b/src/interfaces/turn-move.ts deleted file mode 100644 index 639d309256e..00000000000 --- a/src/interfaces/turn-move.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BattlerIndex } from "#app/battle"; -import type { MoveResult } from "#app/field/pokemon"; -import type { Moves } from "#enums/moves"; - -export interface TurnMove { - move: Moves; - targets: BattlerIndex[]; - result?: MoveResult; - virtual?: boolean; - turn?: number; - ignorePP?: boolean; -} diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 852593d922c..8feb60c7778 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -1,10 +1,8 @@ import { globalScene } from "#app/global-scene"; -import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; -import { EvolutionItem } from "#enums/evolution-item"; +import { EvolutionItem, pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { tmPoolTiers, tmSpecies } from "#app/data/balance/tms"; import { getBerryEffectDescription, getBerryName } from "#app/data/berry"; -import { AttackMove } from "#app/data/moves/move"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves, AttackMove } from "#app/data/moves/move"; import { getNatureName, getNatureStatMultiplier } from "#app/data/nature"; import { getPokeballCatchMultiplier, getPokeballName, MAX_PER_TYPE_POKEBALLS } from "#app/data/pokeball"; import { @@ -15,8 +13,7 @@ import { } from "#app/data/pokemon-forms"; import { getStatusEffectDescriptor } from "#app/data/status-effect"; import { PokemonType } from "#enums/pokemon-type"; -import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; -import type { PokemonMove } from "#app/data/moves/pokemon-move"; +import type { EnemyPokemon, PlayerPokemon, PokemonMove } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 7860d0f9296..80f14ba22ce 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -1,7 +1,7 @@ import { FusionSpeciesFormEvolution, pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { getBerryEffectFunc, getBerryPredicate } from "#app/data/berry"; import { getLevelTotalExp } from "#app/data/exp"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { MAX_PER_TYPE_POKEBALLS } from "#app/data/pokeball"; import { type FormChangeItem, SpeciesFormChangeItemTrigger } from "#app/data/pokemon-forms"; import { getStatusEffectHealText } from "#app/data/status-effect"; diff --git a/src/overrides.ts b/src/overrides.ts index 49efb5eed33..21c72cd7b98 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -1,5 +1,5 @@ import { type PokeballCounts } from "#app/battle-scene"; -import { EvolutionItem } from "#enums/evolution-item"; +import { EvolutionItem } from "#app/data/balance/pokemon-evolutions"; import { Gender } from "#app/data/gender"; import { FormChangeItem } from "#app/data/pokemon-forms"; import { Variant } from "#app/sprites/variant"; diff --git a/src/phases/command-phase.ts b/src/phases/command-phase.ts index c65f121d20e..8691ac453ca 100644 --- a/src/phases/command-phase.ts +++ b/src/phases/command-phase.ts @@ -11,9 +11,8 @@ import { BattlerTagType } from "#app/enums/battler-tag-type"; import { Biome } from "#app/enums/biome"; import { Moves } from "#app/enums/moves"; import { PokeballType } from "#enums/pokeball"; -import type { PlayerPokemon } from "#app/field/pokemon"; -import type { TurnMove } from "#app/interfaces/turn-move"; -import { FieldPosition } from "#enums/field-position"; +import type { PlayerPokemon, TurnMove } from "#app/field/pokemon"; +import { FieldPosition } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { Command } from "#app/ui/command-ui-handler"; import { Mode } from "#app/ui/ui"; diff --git a/src/phases/damage-anim-phase.ts b/src/phases/damage-anim-phase.ts index 91b21376515..696a2e55b6f 100644 --- a/src/phases/damage-anim-phase.ts +++ b/src/phases/damage-anim-phase.ts @@ -1,8 +1,7 @@ import { globalScene } from "#app/global-scene"; import type { BattlerIndex } from "#app/battle"; import { BattleSpec } from "#enums/battle-spec"; -import type { DamageResult } from "#app/@types/damage-result"; -import { HitResult } from "#enums/hit-result"; +import { type DamageResult, HitResult } from "#app/field/pokemon"; import { fixedInt } from "#app/utils"; import { PokemonPhase } from "#app/phases/pokemon-phase"; diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index 9e28de32c4a..15f3d102e41 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -11,7 +11,7 @@ import { TrainerSlot } from "#enums/trainer-slot"; import { getRandomWeatherType } from "#app/data/weather"; import { EncounterPhaseEvent } from "#app/events/battle-scene"; import type Pokemon from "#app/field/pokemon"; -import { FieldPosition } from "#enums/field-position"; +import { FieldPosition } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { BoostBugSpawnModifier, IvScannerModifier, TurnHeldItemTransferModifier } from "#app/modifier/modifier"; import { ModifierPoolType, regenerateModifierPoolThresholds } from "#app/modifier/modifier-type"; diff --git a/src/phases/evolution-phase.ts b/src/phases/evolution-phase.ts index 076b7dec80d..203c7542eff 100644 --- a/src/phases/evolution-phase.ts +++ b/src/phases/evolution-phase.ts @@ -10,7 +10,7 @@ import { Mode } from "#app/ui/ui"; import { cos, sin } from "#app/field/anims"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { LearnMoveContext } from "#enums/learn-move-context"; +import { LearnMoveSituation } from "#app/field/pokemon"; import { getTypeRgb } from "#app/data/type"; import i18next from "i18next"; import { getPokemonNameWithAffix } from "#app/messages"; @@ -343,11 +343,11 @@ export class EvolutionPhase extends Phase { this.evolutionHandler.canCancel = false; this.pokemon.evolve(this.evolution, this.pokemon.species).then(() => { - const learnSituation: LearnMoveContext = this.fusionSpeciesEvolved - ? LearnMoveContext.EVOLUTION_FUSED + const learnSituation: LearnMoveSituation = this.fusionSpeciesEvolved + ? LearnMoveSituation.EVOLUTION_FUSED : this.pokemon.fusionSpecies - ? LearnMoveContext.EVOLUTION_FUSED_BASE - : LearnMoveContext.EVOLUTION; + ? LearnMoveSituation.EVOLUTION_FUSED_BASE + : LearnMoveSituation.EVOLUTION; const levelMoves = this.pokemon .getLevelMoves(this.lastLevel + 1, true, false, false, learnSituation) .filter(lm => lm[0] === EVOLVE_MOVE); diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index 4c418679047..7e1ae4ec07b 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -12,16 +12,13 @@ import { import type { DestinyBondTag, GrudgeTag } from "#app/data/battler-tags"; import { BattlerTagLapseType } from "#app/data/battler-tags"; import { battleSpecDialogue } from "#app/data/dialogue"; -import { PostVictoryStatStageChangeAttr } from "#app/data/moves/move"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves, PostVictoryStatStageChangeAttr } from "#app/data/moves/move"; import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms"; import { BattleSpec } from "#app/enums/battle-spec"; import { StatusEffect } from "#app/enums/status-effect"; import type { EnemyPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { PlayerPokemon } from "#app/field/pokemon"; -import { HitResult } from "#enums/hit-result"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { HitResult, PlayerPokemon, PokemonMove } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { PokemonInstantReviveModifier } from "#app/modifier/modifier"; import { SwitchType } from "#enums/switch-type"; diff --git a/src/phases/learn-move-phase.ts b/src/phases/learn-move-phase.ts index a939298f620..4107a9cf087 100644 --- a/src/phases/learn-move-phase.ts +++ b/src/phases/learn-move-phase.ts @@ -1,7 +1,7 @@ import { globalScene } from "#app/global-scene"; import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims"; import type Move from "#app/data/moves/move"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { SpeciesFormChangeMoveLearnedTrigger } from "#app/data/pokemon-forms"; import { Moves } from "#enums/moves"; import { getPokemonNameWithAffix } from "#app/messages"; diff --git a/src/phases/move-charge-phase.ts b/src/phases/move-charge-phase.ts index ccaf6d054b9..26ad85bbe03 100644 --- a/src/phases/move-charge-phase.ts +++ b/src/phases/move-charge-phase.ts @@ -2,7 +2,7 @@ import { globalScene } from "#app/global-scene"; import type { BattlerIndex } from "#app/battle"; import { MoveChargeAnim } from "#app/data/battle-anims"; import { applyMoveChargeAttrs, MoveEffectAttr, InstantChargeAttr } from "#app/data/moves/move"; -import type { PokemonMove } from "#app/data/moves/pokemon-move"; +import type { PokemonMove } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { MoveResult } from "#app/field/pokemon"; import { BooleanHolder } from "#app/utils"; diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index c13c411be68..acc7ac0f63a 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -49,10 +49,9 @@ import { MoveTarget } from "#enums/MoveTarget"; import { MoveCategory } from "#enums/MoveCategory"; import { SpeciesFormChangePostMoveTrigger } from "#app/data/pokemon-forms"; import { PokemonType } from "#enums/pokemon-type"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { PokemonMove } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { MoveResult } from "#app/field/pokemon"; -import { HitResult } from "#enums/hit-result"; +import { HitResult, MoveResult } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { ContactHeldItemTransferChanceModifier, diff --git a/src/phases/move-header-phase.ts b/src/phases/move-header-phase.ts index c255b45190b..c320df462d1 100644 --- a/src/phases/move-header-phase.ts +++ b/src/phases/move-header-phase.ts @@ -1,5 +1,5 @@ import { applyMoveAttrs, MoveHeaderAttr } from "#app/data/moves/move"; -import type { PokemonMove } from "#app/data/moves/pokemon-move"; +import type { PokemonMove } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { BattlePhase } from "./battle-phase"; diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index 032ac6d06ab..478229dcae8 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -16,6 +16,7 @@ import { CommonAnim } from "#app/data/battle-anims"; import { BattlerTagLapseType, CenterOfAttentionTag } from "#app/data/battler-tags"; import { AddArenaTrapTagAttr, + allMoves, applyMoveAttrs, BypassRedirectAttr, BypassSleepAttr, @@ -26,14 +27,13 @@ import { PreMoveMessageAttr, PreUseInterruptAttr, } from "#app/data/moves/move"; -import { allMoves } from "#app/data/moves/all-moves"; import { MoveFlags } from "#enums/MoveFlags"; import { SpeciesFormChangePreMoveTrigger } from "#app/data/pokemon-forms"; import { getStatusEffectActivationText, getStatusEffectHealText } from "#app/data/status-effect"; import { PokemonType } from "#enums/pokemon-type"; import { getTerrainBlockMessage, getWeatherBlockMessage } from "#app/data/weather"; import { MoveUsedEvent } from "#app/events/battle-scene"; -import type { PokemonMove } from "#app/data/moves/pokemon-move"; +import type { PokemonMove } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { MoveResult } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; diff --git a/src/phases/pokemon-heal-phase.ts b/src/phases/pokemon-heal-phase.ts index 84dc8a5e116..651c625b23a 100644 --- a/src/phases/pokemon-heal-phase.ts +++ b/src/phases/pokemon-heal-phase.ts @@ -3,7 +3,7 @@ import type { BattlerIndex } from "#app/battle"; import { CommonAnim } from "#app/data/battle-anims"; import { getStatusEffectHealText } from "#app/data/status-effect"; import { StatusEffect } from "#app/enums/status-effect"; -import { HitResult } from "#enums/hit-result"; +import { HitResult } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { HealingBoosterModifier } from "#app/modifier/modifier"; import { HealAchv } from "#app/system/achv"; diff --git a/src/phases/pokemon-transform-phase.ts b/src/phases/pokemon-transform-phase.ts index fb9a28a5a26..b33689321b5 100644 --- a/src/phases/pokemon-transform-phase.ts +++ b/src/phases/pokemon-transform-phase.ts @@ -2,7 +2,7 @@ import type { BattlerIndex } from "#app/battle"; import { BattlerTagType } from "#enums/battler-tag-type"; import { Moves } from "#enums/moves"; import { EFFECTIVE_STATS, BATTLE_STATS } from "#enums/stat"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { PokemonMove } from "#app/field/pokemon"; import { globalScene } from "#app/global-scene"; import { PokemonPhase } from "./pokemon-phase"; import { getPokemonNameWithAffix } from "#app/messages"; diff --git a/src/phases/select-target-phase.ts b/src/phases/select-target-phase.ts index edd56ba60ed..035eaff41fa 100644 --- a/src/phases/select-target-phase.ts +++ b/src/phases/select-target-phase.ts @@ -5,7 +5,7 @@ import { Mode } from "#app/ui/ui"; import { CommandPhase } from "./command-phase"; import { PokemonPhase } from "./pokemon-phase"; import i18next from "#app/plugins/i18n"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; export class SelectTargetPhase extends PokemonPhase { // biome-ignore lint/complexity/noUselessConstructor: This makes `fieldIndex` required diff --git a/src/phases/summon-phase.ts b/src/phases/summon-phase.ts index e053b18e4d7..7379d509e55 100644 --- a/src/phases/summon-phase.ts +++ b/src/phases/summon-phase.ts @@ -5,7 +5,7 @@ import { TrainerSlot } from "#enums/trainer-slot"; import { PlayerGender } from "#app/enums/player-gender"; import { addPokeballOpenParticles } from "#app/field/anims"; import type Pokemon from "#app/field/pokemon"; -import { FieldPosition } from "#enums/field-position"; +import { FieldPosition } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import i18next from "i18next"; import { PartyMemberPokemonPhase } from "./party-member-pokemon-phase"; diff --git a/src/phases/switch-summon-phase.ts b/src/phases/switch-summon-phase.ts index f39a3e62bb6..d63cdb90f25 100644 --- a/src/phases/switch-summon-phase.ts +++ b/src/phases/switch-summon-phase.ts @@ -6,8 +6,7 @@ import { PreSummonAbAttr, PreSwitchOutAbAttr, } from "#app/data/ability"; -import { ForceSwitchOutAttr } from "#app/data/moves/move"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves, ForceSwitchOutAttr } from "#app/data/moves/move"; import { getPokeballTintColor } from "#app/data/pokeball"; import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms"; import { TrainerSlot } from "#enums/trainer-slot"; diff --git a/src/phases/toggle-double-position-phase.ts b/src/phases/toggle-double-position-phase.ts index c4766f888aa..37f47d5cf95 100644 --- a/src/phases/toggle-double-position-phase.ts +++ b/src/phases/toggle-double-position-phase.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import { FieldPosition } from "#enums/field-position"; +import { FieldPosition } from "#app/field/pokemon"; import { BattlePhase } from "./battle-phase"; export class ToggleDoublePositionPhase extends BattlePhase { diff --git a/src/phases/turn-start-phase.ts b/src/phases/turn-start-phase.ts index 5941e0af163..d5b4160fe1b 100644 --- a/src/phases/turn-start-phase.ts +++ b/src/phases/turn-start-phase.ts @@ -1,10 +1,9 @@ import { applyAbAttrs, BypassSpeedChanceAbAttr, PreventBypassSpeedChanceAbAttr } from "#app/data/ability"; -import { MoveHeaderAttr } from "#app/data/moves/move"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves, MoveHeaderAttr } from "#app/data/moves/move"; import { Abilities } from "#app/enums/abilities"; import { Stat } from "#app/enums/stat"; import type Pokemon from "#app/field/pokemon"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { PokemonMove } from "#app/field/pokemon"; import { BypassSpeedChanceModifier } from "#app/modifier/modifier"; import { Command } from "#app/ui/command-ui-handler"; import { randSeedShuffle, BooleanHolder } from "#app/utils"; diff --git a/src/phases/weather-effect-phase.ts b/src/phases/weather-effect-phase.ts index 256894457fc..5284c9fba85 100644 --- a/src/phases/weather-effect-phase.ts +++ b/src/phases/weather-effect-phase.ts @@ -14,7 +14,7 @@ import { getWeatherDamageMessage, getWeatherLapseMessage } from "#app/data/weath import { BattlerTagType } from "#app/enums/battler-tag-type"; import { WeatherType } from "#app/enums/weather-type"; import type Pokemon from "#app/field/pokemon"; -import { HitResult } from "#enums/hit-result"; +import { HitResult } from "#app/field/pokemon"; import { BooleanHolder, toDmgValue } from "#app/utils"; import { CommonAnimPhase } from "./common-anim-phase"; diff --git a/src/system/game-data.ts b/src/system/game-data.ts index e87c735f459..53146301666 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -30,7 +30,7 @@ import { Nature } from "#enums/nature"; import { GameStats } from "#app/system/game-stats"; import { Tutorial } from "#app/tutorial"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { TrainerVariant } from "#app/field/trainer"; import type { Variant } from "#app/sprites/variant"; import { setSettingGamepad, SettingGamepad, settingGamepadDefaults } from "#app/system/settings/settings-gamepad"; diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index 7579fc3b78d..97ce494a43a 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -5,8 +5,7 @@ import type { Nature } from "#enums/nature"; import type { PokeballType } from "#enums/pokeball"; import { getPokemonSpecies, getPokemonSpeciesForm } from "../data/pokemon-species"; import { Status } from "../data/status-effect"; -import Pokemon, { EnemyPokemon, PokemonSummonData } from "../field/pokemon"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import Pokemon, { EnemyPokemon, PokemonMove, PokemonSummonData } from "../field/pokemon"; import { TrainerSlot } from "#enums/trainer-slot"; import type { Variant } from "#app/sprites/variant"; import { loadBattlerTag } from "../data/battler-tags"; diff --git a/src/ui/fight-ui-handler.ts b/src/ui/fight-ui-handler.ts index 63c0703fa18..27985629e3d 100644 --- a/src/ui/fight-ui-handler.ts +++ b/src/ui/fight-ui-handler.ts @@ -10,7 +10,7 @@ import { getLocalizedSpriteKey, fixedInt, padInt } from "#app/utils"; import { MoveCategory } from "#enums/MoveCategory"; import i18next from "i18next"; import { Button } from "#enums/buttons"; -import type { PokemonMove } from "#app/data/moves/pokemon-move"; +import type { PokemonMove } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import type { CommandPhase } from "#app/phases/command-phase"; import MoveInfoOverlay from "./move-info-overlay"; diff --git a/src/ui/modifier-select-ui-handler.ts b/src/ui/modifier-select-ui-handler.ts index f0ff351bb8a..26351d4dbf1 100644 --- a/src/ui/modifier-select-ui-handler.ts +++ b/src/ui/modifier-select-ui-handler.ts @@ -9,7 +9,7 @@ import { LockModifierTiersModifier, PokemonHeldItemModifier, HealShopCostModifie import { handleTutorial, Tutorial } from "../tutorial"; import { Button } from "#enums/buttons"; import MoveInfoOverlay from "./move-info-overlay"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "../data/moves/move"; import { formatMoney, NumberHolder } from "#app/utils"; import Overrides from "#app/overrides"; import i18next from "i18next"; diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index a42e0caadae..ba90108c274 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -1,5 +1,4 @@ -import type { PlayerPokemon } from "#app/field/pokemon"; -import type { PokemonMove } from "#app/data/moves/pokemon-move"; +import type { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { MoveResult } from "#app/field/pokemon"; import { addBBCodeTextObject, addTextObject, getTextColor, TextStyle } from "#app/ui/text"; @@ -12,8 +11,7 @@ import { PokemonHeldItemModifier, SwitchEffectTransferModifier, } from "#app/modifier/modifier"; -import { ForceSwitchOutAttr } from "#app/data/moves/move"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves, ForceSwitchOutAttr } from "#app/data/moves/move"; import { Gender, getGenderColor, getGenderSymbol } from "#app/data/gender"; import { StatusEffect } from "#enums/status-effect"; import PokemonIconAnimHandler, { PokemonIconAnimMode } from "#app/ui/pokemon-icon-anim-handler"; diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index 1011fc89ae0..407ebfcd843 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -9,7 +9,7 @@ import { allAbilities } from "#app/data/ability"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { GrowthRate, getGrowthRateColor } from "#app/data/exp"; import { Gender, getGenderColor, getGenderSymbol } from "#app/data/gender"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { getNatureName } from "#app/data/nature"; import type { SpeciesFormChange } from "#app/data/pokemon-forms"; import { pokemonFormChanges } from "#app/data/pokemon-forms"; diff --git a/src/ui/pokedex-scan-ui-handler.ts b/src/ui/pokedex-scan-ui-handler.ts index 54c32fb34a1..b34246b97d1 100644 --- a/src/ui/pokedex-scan-ui-handler.ts +++ b/src/ui/pokedex-scan-ui-handler.ts @@ -7,7 +7,7 @@ import { isNullOrUndefined } from "#app/utils"; import { Mode } from "./ui"; import { FilterTextRow } from "./filter-text"; import { allAbilities } from "#app/data/ability"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { allSpecies } from "#app/data/pokemon-species"; import i18next from "i18next"; diff --git a/src/ui/pokedex-ui-handler.ts b/src/ui/pokedex-ui-handler.ts index 22ce5b833af..59b06d476a2 100644 --- a/src/ui/pokedex-ui-handler.ts +++ b/src/ui/pokedex-ui-handler.ts @@ -38,7 +38,7 @@ import type { OptionSelectConfig } from "./abstact-option-select-ui-handler"; import { FilterText, FilterTextRow } from "./filter-text"; import { allAbilities } from "#app/data/ability"; import { starterPassiveAbilities } from "#app/data/balance/passives"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { speciesTmMoves } from "#app/data/balance/tms"; import { pokemonPrevolutions, pokemonStarters } from "#app/data/balance/pokemon-evolutions"; import { Biome } from "#enums/biome"; diff --git a/src/ui/pokemon-hatch-info-container.ts b/src/ui/pokemon-hatch-info-container.ts index 77f9f5090a0..692f0f1d374 100644 --- a/src/ui/pokemon-hatch-info-container.ts +++ b/src/ui/pokemon-hatch-info-container.ts @@ -4,7 +4,7 @@ import { PokemonType } from "#enums/pokemon-type"; import { rgbHexToRgba, padInt } from "#app/utils"; import { TextStyle, addTextObject } from "#app/ui/text"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { Species } from "#enums/species"; import { getEggTierForSpecies } from "#app/data/egg"; import { starterColors } from "#app/battle-scene"; diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 680f752096b..3e2940f45b9 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -13,7 +13,7 @@ import { allAbilities } from "#app/data/ability"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { GrowthRate, getGrowthRateColor } from "#app/data/exp"; import { Gender, getGenderColor, getGenderSymbol } from "#app/data/gender"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { getNatureName } from "#app/data/nature"; import { pokemonFormChanges } from "#app/data/pokemon-forms"; import type { LevelMoves } from "#app/data/balance/pokemon-level-moves"; diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index d82082f0872..04bcf71d7ae 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -12,8 +12,7 @@ import { toReadableString, formatStat, } from "#app/utils"; -import type { PlayerPokemon } from "#app/field/pokemon"; -import type { PokemonMove } from "#app/data/moves/pokemon-move"; +import type { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; import { getStarterValueFriendshipCap, speciesStarterCosts } from "#app/data/balance/starters"; import { argbFromRgba } from "@material/material-color-utilities"; import { getTypeRgb } from "#app/data/type"; diff --git a/test/abilities/aura_break.test.ts b/test/abilities/aura_break.test.ts index 30841fdbe0c..86b6c69ec8b 100644 --- a/test/abilities/aura_break.test.ts +++ b/test/abilities/aura_break.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/abilities/battery.test.ts b/test/abilities/battery.test.ts index 78db19e67ff..cc7570c3d31 100644 --- a/test/abilities/battery.test.ts +++ b/test/abilities/battery.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { Abilities } from "#app/enums/abilities"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; diff --git a/test/abilities/battle_bond.test.ts b/test/abilities/battle_bond.test.ts index e615b5746c0..6305d7dedc5 100644 --- a/test/abilities/battle_bond.test.ts +++ b/test/abilities/battle_bond.test.ts @@ -1,5 +1,4 @@ -import { MultiHitAttr } from "#app/data/moves/move"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves, MultiHitAttr } from "#app/data/moves/move"; import { MultiHitType } from "#enums/MultiHitType"; import { Status } from "#app/data/status-effect"; import { Abilities } from "#enums/abilities"; diff --git a/test/abilities/flower_veil.test.ts b/test/abilities/flower_veil.test.ts index d91c92e8c9f..c26a952acff 100644 --- a/test/abilities/flower_veil.test.ts +++ b/test/abilities/flower_veil.test.ts @@ -7,7 +7,7 @@ import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { BattlerTagType } from "#enums/battler-tag-type"; import { allAbilities } from "#app/data/ability"; diff --git a/test/abilities/friend_guard.test.ts b/test/abilities/friend_guard.test.ts index cee82ca2c69..30175fe37e0 100644 --- a/test/abilities/friend_guard.test.ts +++ b/test/abilities/friend_guard.test.ts @@ -6,7 +6,7 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { BattlerIndex } from "#app/battle"; import { allAbilities } from "#app/data/ability"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { MoveCategory } from "#enums/MoveCategory"; describe("Moves - Friend Guard", () => { diff --git a/test/abilities/galvanize.test.ts b/test/abilities/galvanize.test.ts index 4efb6bb068f..c1e02c6c8d8 100644 --- a/test/abilities/galvanize.test.ts +++ b/test/abilities/galvanize.test.ts @@ -1,10 +1,10 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { PokemonType } from "#enums/pokemon-type"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; -import { HitResult } from "#enums/hit-result"; +import { HitResult } from "#app/field/pokemon"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/test/abilities/hustle.test.ts b/test/abilities/hustle.test.ts index fbfa23e90d6..40197cf9e97 100644 --- a/test/abilities/hustle.test.ts +++ b/test/abilities/hustle.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { Abilities } from "#app/enums/abilities"; import { Stat } from "#app/enums/stat"; import { Moves } from "#enums/moves"; diff --git a/test/abilities/infiltrator.test.ts b/test/abilities/infiltrator.test.ts index e9ecf366a37..6278439651c 100644 --- a/test/abilities/infiltrator.test.ts +++ b/test/abilities/infiltrator.test.ts @@ -1,5 +1,5 @@ import { ArenaTagSide } from "#app/data/arena-tag"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; import { Stat } from "#enums/stat"; diff --git a/test/abilities/libero.test.ts b/test/abilities/libero.test.ts index 96a6b3c5d93..22abf1c248f 100644 --- a/test/abilities/libero.test.ts +++ b/test/abilities/libero.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { PokemonType } from "#enums/pokemon-type"; import { Weather } from "#app/data/weather"; import type { PlayerPokemon } from "#app/field/pokemon"; diff --git a/test/abilities/magic_bounce.test.ts b/test/abilities/magic_bounce.test.ts index c785827c910..f9a076776aa 100644 --- a/test/abilities/magic_bounce.test.ts +++ b/test/abilities/magic_bounce.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { allAbilities } from "#app/data/ability"; import { ArenaTagSide } from "#app/data/arena-tag"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { Stat } from "#app/enums/stat"; diff --git a/test/abilities/power_spot.test.ts b/test/abilities/power_spot.test.ts index 68ace696d4a..e29b5ecf775 100644 --- a/test/abilities/power_spot.test.ts +++ b/test/abilities/power_spot.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { Abilities } from "#app/enums/abilities"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; diff --git a/test/abilities/protean.test.ts b/test/abilities/protean.test.ts index ca5e67139e1..574033bb13f 100644 --- a/test/abilities/protean.test.ts +++ b/test/abilities/protean.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { PokemonType } from "#enums/pokemon-type"; import { Weather } from "#app/data/weather"; import type { PlayerPokemon } from "#app/field/pokemon"; diff --git a/test/abilities/sap_sipper.test.ts b/test/abilities/sap_sipper.test.ts index b27f97099b9..f4f02844cbc 100644 --- a/test/abilities/sap_sipper.test.ts +++ b/test/abilities/sap_sipper.test.ts @@ -9,8 +9,7 @@ import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { RandomMoveAttr } from "#app/data/moves/move"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves, RandomMoveAttr } from "#app/data/moves/move"; // See also: TypeImmunityAbAttr describe("Abilities - Sap Sipper", () => { diff --git a/test/abilities/serene_grace.test.ts b/test/abilities/serene_grace.test.ts index 30073f30b24..65ca96acbbc 100644 --- a/test/abilities/serene_grace.test.ts +++ b/test/abilities/serene_grace.test.ts @@ -4,7 +4,7 @@ import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { FlinchAttr } from "#app/data/moves/move"; diff --git a/test/abilities/sheer_force.test.ts b/test/abilities/sheer_force.test.ts index 74c7b30a846..4a1c20cde5c 100644 --- a/test/abilities/sheer_force.test.ts +++ b/test/abilities/sheer_force.test.ts @@ -7,8 +7,7 @@ import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { FlinchAttr } from "#app/data/moves/move"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves, FlinchAttr } from "#app/data/moves/move"; describe("Abilities - Sheer Force", () => { let phaserGame: Phaser.Game; diff --git a/test/abilities/steely_spirit.test.ts b/test/abilities/steely_spirit.test.ts index 6e8331ea51a..b180ff8919e 100644 --- a/test/abilities/steely_spirit.test.ts +++ b/test/abilities/steely_spirit.test.ts @@ -1,5 +1,5 @@ import { allAbilities } from "#app/data/ability"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/abilities/supreme_overlord.test.ts b/test/abilities/supreme_overlord.test.ts index 69ff4f393b6..a71bf0a9354 100644 --- a/test/abilities/supreme_overlord.test.ts +++ b/test/abilities/supreme_overlord.test.ts @@ -7,7 +7,7 @@ import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; describe("Abilities - Supreme Overlord", () => { let phaserGame: Phaser.Game; diff --git a/test/abilities/tera_shell.test.ts b/test/abilities/tera_shell.test.ts index bd88c21f52d..a99ecfd4ce1 100644 --- a/test/abilities/tera_shell.test.ts +++ b/test/abilities/tera_shell.test.ts @@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; -import { HitResult } from "#enums/hit-result"; +import { HitResult } from "#app/field/pokemon"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/test/abilities/unburden.test.ts b/test/abilities/unburden.test.ts index 7012c4cf065..8f18604011c 100644 --- a/test/abilities/unburden.test.ts +++ b/test/abilities/unburden.test.ts @@ -1,7 +1,6 @@ import { BattlerIndex } from "#app/battle"; import { PostItemLostAbAttr } from "#app/data/ability"; -import { StealHeldItemChanceAttr } from "#app/data/moves/move"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves, StealHeldItemChanceAttr } from "#app/data/moves/move"; import type Pokemon from "#app/field/pokemon"; import type { ContactHeldItemTransferChanceModifier } from "#app/modifier/modifier"; import { Abilities } from "#enums/abilities"; diff --git a/test/abilities/wimp_out.test.ts b/test/abilities/wimp_out.test.ts index c81fa2071c5..294025a10e7 100644 --- a/test/abilities/wimp_out.test.ts +++ b/test/abilities/wimp_out.test.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; import { ArenaTagSide } from "#app/data/arena-tag"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import GameManager from "#test/testUtils/gameManager"; import { toDmgValue } from "#app/utils"; import { Abilities } from "#enums/abilities"; @@ -534,12 +534,12 @@ describe("Abilities - Wimp Out", () => { .enemyAbility(Abilities.WIMP_OUT) .startingLevel(50) .enemyLevel(1) - .enemyMoveset([Moves.SPLASH, Moves.ENDURE]) + .enemyMoveset([ Moves.SPLASH, Moves.ENDURE ]) .battleType("double") - .moveset([Moves.DRAGON_ENERGY, Moves.SPLASH]) + .moveset([ Moves.DRAGON_ENERGY, Moves.SPLASH ]) .startingWave(wave); - await game.classicMode.startBattle([Species.REGIDRAGO, Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.REGIDRAGO, Species.MAGIKARP ]); // turn 1 game.move.select(Moves.DRAGON_ENERGY, 0); @@ -549,5 +549,6 @@ describe("Abilities - Wimp Out", () => { await game.phaseInterceptor.to("SelectModifierPhase"); expect(game.scene.currentBattle.waveIndex).toBe(wave + 1); + }); }); diff --git a/test/abilities/wonder_skin.test.ts b/test/abilities/wonder_skin.test.ts index fe24cdad5ec..18d5be36aef 100644 --- a/test/abilities/wonder_skin.test.ts +++ b/test/abilities/wonder_skin.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/test/arena/arena_gravity.test.ts b/test/arena/arena_gravity.test.ts index 7e72d14460a..a5ce84667f0 100644 --- a/test/arena/arena_gravity.test.ts +++ b/test/arena/arena_gravity.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { Abilities } from "#enums/abilities"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; diff --git a/test/arena/grassy_terrain.test.ts b/test/arena/grassy_terrain.test.ts index 9ee9d2ef434..d92fb24be5a 100644 --- a/test/arena/grassy_terrain.test.ts +++ b/test/arena/grassy_terrain.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/arena/weather_fog.test.ts b/test/arena/weather_fog.test.ts index b240bfa7386..784c4886648 100644 --- a/test/arena/weather_fog.test.ts +++ b/test/arena/weather_fog.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { Abilities } from "#app/enums/abilities"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Moves } from "#enums/moves"; diff --git a/test/arena/weather_strong_winds.test.ts b/test/arena/weather_strong_winds.test.ts index 50d25947612..3a9235d9eb9 100644 --- a/test/arena/weather_strong_winds.test.ts +++ b/test/arena/weather_strong_winds.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { StatusEffect } from "#app/enums/status-effect"; import { TurnStartPhase } from "#app/phases/turn-start-phase"; import { Abilities } from "#enums/abilities"; diff --git a/test/battle/damage_calculation.test.ts b/test/battle/damage_calculation.test.ts index 11bb8246ca1..dab1fc81caa 100644 --- a/test/battle/damage_calculation.test.ts +++ b/test/battle/damage_calculation.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import type { EnemyPersistentModifier } from "#app/modifier/modifier"; import { modifierTypes } from "#app/modifier/modifier-type"; import { Abilities } from "#enums/abilities"; diff --git a/test/battlerTags/substitute.test.ts b/test/battlerTags/substitute.test.ts index f2ee741bca2..fca3dc5ef7e 100644 --- a/test/battlerTags/substitute.test.ts +++ b/test/battlerTags/substitute.test.ts @@ -1,7 +1,5 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import type { PokemonTurnData } from "#app/field/pokemon"; -import type { PokemonMove } from "#app/data/moves/pokemon-move"; -import type { TurnMove } from "#app/interfaces/turn-move"; +import type { PokemonTurnData, TurnMove, PokemonMove } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { MoveResult } from "#app/field/pokemon"; import type BattleScene from "#app/battle-scene"; @@ -9,7 +7,7 @@ import { BattlerTagLapseType, BindTag, SubstituteTag } from "#app/data/battler-t import { Moves } from "#app/enums/moves"; import { PokemonAnimType } from "#app/enums/pokemon-anim-type"; import * as messages from "#app/messages"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import type { MoveEffectPhase } from "#app/phases/move-effect-phase"; import GameManager from "#test/testUtils/gameManager"; diff --git a/test/enemy_command.test.ts b/test/enemy_command.test.ts index cfa141cf89e..6d5cc2698a3 100644 --- a/test/enemy_command.test.ts +++ b/test/enemy_command.test.ts @@ -1,11 +1,11 @@ import type BattleScene from "#app/battle-scene"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { MoveCategory } from "#enums/MoveCategory"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import type { EnemyPokemon } from "#app/field/pokemon"; -import { AiType } from "#enums/ai-type"; +import { AiType } from "#app/field/pokemon"; import { randSeedInt } from "#app/utils"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; diff --git a/test/evolution.test.ts b/test/evolution.test.ts index 62a06f868e8..dd6795bf161 100644 --- a/test/evolution.test.ts +++ b/test/evolution.test.ts @@ -1,5 +1,8 @@ -import { pokemonEvolutions, SpeciesFormEvolution } from "#app/data/balance/pokemon-evolutions"; -import { SpeciesWildEvolutionDelay } from "#enums/species-wild-evolution-delay"; +import { + pokemonEvolutions, + SpeciesFormEvolution, + SpeciesWildEvolutionDelay, +} from "#app/data/balance/pokemon-evolutions"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; diff --git a/test/imports.test.ts b/test/imports.test.ts index ada7eff0109..128308dbd14 100644 --- a/test/imports.test.ts +++ b/test/imports.test.ts @@ -4,7 +4,7 @@ import { describe, expect, it } from "vitest"; async function importModule() { try { initStatsKeys(); - const { PokemonMove } = await import("#app/data/moves/pokemon-move"); + const { PokemonMove } = await import("#app/field/pokemon"); const { Species } = await import("#enums/species"); return { PokemonMove, diff --git a/test/items/reviver_seed.test.ts b/test/items/reviver_seed.test.ts index e1e7e0d554e..c06f354a94a 100644 --- a/test/items/reviver_seed.test.ts +++ b/test/items/reviver_seed.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import type { PokemonInstantReviveModifier } from "#app/modifier/modifier"; import { Abilities } from "#enums/abilities"; diff --git a/test/moves/astonish.test.ts b/test/moves/astonish.test.ts index 69a312d4517..53922060ae6 100644 --- a/test/moves/astonish.test.ts +++ b/test/moves/astonish.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { BerryPhase } from "#app/phases/berry-phase"; import { CommandPhase } from "#app/phases/command-phase"; diff --git a/test/moves/aurora_veil.test.ts b/test/moves/aurora_veil.test.ts index 06637d0764e..31f6497bae5 100644 --- a/test/moves/aurora_veil.test.ts +++ b/test/moves/aurora_veil.test.ts @@ -1,8 +1,7 @@ import type BattleScene from "#app/battle-scene"; import { ArenaTagSide } from "#app/data/arena-tag"; import type Move from "#app/data/moves/move"; -import { CritOnlyAttr } from "#app/data/moves/move"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves, CritOnlyAttr } from "#app/data/moves/move"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import type Pokemon from "#app/field/pokemon"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; diff --git a/test/moves/burning_jealousy.test.ts b/test/moves/burning_jealousy.test.ts index c618b46e842..60387df4226 100644 --- a/test/moves/burning_jealousy.test.ts +++ b/test/moves/burning_jealousy.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { Abilities } from "#app/enums/abilities"; import { StatusEffect } from "#app/enums/status-effect"; import { Moves } from "#enums/moves"; diff --git a/test/moves/ceaseless_edge.test.ts b/test/moves/ceaseless_edge.test.ts index 227645df360..d54f1bd9f21 100644 --- a/test/moves/ceaseless_edge.test.ts +++ b/test/moves/ceaseless_edge.test.ts @@ -1,5 +1,5 @@ import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { Abilities } from "#app/enums/abilities"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; diff --git a/test/moves/copycat.test.ts b/test/moves/copycat.test.ts index 615206275d4..0d9b0951f89 100644 --- a/test/moves/copycat.test.ts +++ b/test/moves/copycat.test.ts @@ -1,6 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { RandomMoveAttr } from "#app/data/moves/move"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves, RandomMoveAttr } from "#app/data/moves/move"; import { Stat } from "#app/enums/stat"; import { MoveResult } from "#app/field/pokemon"; import { Abilities } from "#enums/abilities"; diff --git a/test/moves/destiny_bond.test.ts b/test/moves/destiny_bond.test.ts index 9873d678b8c..c39d40427ad 100644 --- a/test/moves/destiny_bond.test.ts +++ b/test/moves/destiny_bond.test.ts @@ -1,6 +1,6 @@ import type { ArenaTrapTag } from "#app/data/arena-tag"; import { ArenaTagSide } from "#app/data/arena-tag"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { Abilities } from "#enums/abilities"; import { ArenaTagType } from "#enums/arena-tag-type"; import { Moves } from "#enums/moves"; diff --git a/test/moves/diamond_storm.test.ts b/test/moves/diamond_storm.test.ts index 73a1aee3fd2..2363122f0d7 100644 --- a/test/moves/diamond_storm.test.ts +++ b/test/moves/diamond_storm.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/moves/dig.test.ts b/test/moves/dig.test.ts index 14e7efee19b..81339111656 100644 --- a/test/moves/dig.test.ts +++ b/test/moves/dig.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { Abilities } from "#enums/abilities"; import { BattlerTagType } from "#enums/battler-tag-type"; import { Moves } from "#enums/moves"; diff --git a/test/moves/dragon_tail.test.ts b/test/moves/dragon_tail.test.ts index a571312473d..37e8aa2fe1b 100644 --- a/test/moves/dragon_tail.test.ts +++ b/test/moves/dragon_tail.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { Status } from "#app/data/status-effect"; import { Challenges } from "#enums/challenges"; import { StatusEffect } from "#enums/status-effect"; diff --git a/test/moves/dynamax_cannon.test.ts b/test/moves/dynamax_cannon.test.ts index b2590449e4e..9cf3106b9c1 100644 --- a/test/moves/dynamax_cannon.test.ts +++ b/test/moves/dynamax_cannon.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Moves } from "#enums/moves"; diff --git a/test/moves/effectiveness.test.ts b/test/moves/effectiveness.test.ts index efcbc9c3293..fb03f1c10a0 100644 --- a/test/moves/effectiveness.test.ts +++ b/test/moves/effectiveness.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { TrainerSlot } from "#enums/trainer-slot"; import { PokemonType } from "#enums/pokemon-type"; diff --git a/test/moves/fell_stinger.test.ts b/test/moves/fell_stinger.test.ts index 766fedf68dc..2ffa44c5a3a 100644 --- a/test/moves/fell_stinger.test.ts +++ b/test/moves/fell_stinger.test.ts @@ -7,7 +7,7 @@ import { Moves } from "#enums/moves"; import { Stat } from "#enums/stat"; import { StatusEffect } from "#app/enums/status-effect"; import { WeatherType } from "#app/enums/weather-type"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; describe("Moves - Fell Stinger", () => { let phaserGame: Phaser.Game; diff --git a/test/moves/fly.test.ts b/test/moves/fly.test.ts index 37fa42b608d..0bd7d22b2a7 100644 --- a/test/moves/fly.test.ts +++ b/test/moves/fly.test.ts @@ -8,7 +8,7 @@ import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; describe("Moves - Fly", () => { let phaserGame: Phaser.Game; diff --git a/test/moves/freezy_frost.test.ts b/test/moves/freezy_frost.test.ts index d764600bc78..c1ac4054e70 100644 --- a/test/moves/freezy_frost.test.ts +++ b/test/moves/freezy_frost.test.ts @@ -5,7 +5,7 @@ import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { CommandPhase } from "#app/phases/command-phase"; describe("Moves - Freezy Frost", () => { diff --git a/test/moves/fusion_flare_bolt.test.ts b/test/moves/fusion_flare_bolt.test.ts index 32df10b4c7c..c340aeea63f 100644 --- a/test/moves/fusion_flare_bolt.test.ts +++ b/test/moves/fusion_flare_bolt.test.ts @@ -1,6 +1,6 @@ import { Stat } from "#enums/stat"; import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import type Move from "#app/data/moves/move"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; diff --git a/test/moves/glaive_rush.test.ts b/test/moves/glaive_rush.test.ts index 28d6328c095..d3531b172e2 100644 --- a/test/moves/glaive_rush.test.ts +++ b/test/moves/glaive_rush.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; diff --git a/test/moves/hard_press.test.ts b/test/moves/hard_press.test.ts index 425993fb1a9..8891f0bf0e2 100644 --- a/test/moves/hard_press.test.ts +++ b/test/moves/hard_press.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/test/moves/hyper_beam.test.ts b/test/moves/hyper_beam.test.ts index b1a244f2ea4..5cd54e9b46a 100644 --- a/test/moves/hyper_beam.test.ts +++ b/test/moves/hyper_beam.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { Abilities } from "#app/enums/abilities"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { Moves } from "#app/enums/moves"; diff --git a/test/moves/lash_out.test.ts b/test/moves/lash_out.test.ts index 16632ec0065..8395633f5c0 100644 --- a/test/moves/lash_out.test.ts +++ b/test/moves/lash_out.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/moves/last_respects.test.ts b/test/moves/last_respects.test.ts index 891b287dece..ccab8a43415 100644 --- a/test/moves/last_respects.test.ts +++ b/test/moves/last_respects.test.ts @@ -3,7 +3,7 @@ import { BattlerIndex } from "#app/battle"; import { Species } from "#enums/species"; import { Abilities } from "#enums/abilities"; import GameManager from "#test/testUtils/gameManager"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import type Move from "#app/data/moves/move"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import Phaser from "phaser"; diff --git a/test/moves/light_screen.test.ts b/test/moves/light_screen.test.ts index b77bb1c790b..9cc6944ed3e 100644 --- a/test/moves/light_screen.test.ts +++ b/test/moves/light_screen.test.ts @@ -1,8 +1,7 @@ import type BattleScene from "#app/battle-scene"; import { ArenaTagSide } from "#app/data/arena-tag"; import type Move from "#app/data/moves/move"; -import { CritOnlyAttr } from "#app/data/moves/move"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves, CritOnlyAttr } from "#app/data/moves/move"; import { Abilities } from "#app/enums/abilities"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import type Pokemon from "#app/field/pokemon"; diff --git a/test/moves/magic_coat.test.ts b/test/moves/magic_coat.test.ts index e96125a23ac..2cc8dea8938 100644 --- a/test/moves/magic_coat.test.ts +++ b/test/moves/magic_coat.test.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; import { ArenaTagSide } from "#app/data/arena-tag"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { Stat } from "#app/enums/stat"; diff --git a/test/moves/metronome.test.ts b/test/moves/metronome.test.ts index bf045f5e9f9..80f32a3a6fb 100644 --- a/test/moves/metronome.test.ts +++ b/test/moves/metronome.test.ts @@ -1,6 +1,5 @@ import { RechargingTag, SemiInvulnerableTag } from "#app/data/battler-tags"; -import { RandomMoveAttr } from "#app/data/moves/move"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves, RandomMoveAttr } from "#app/data/moves/move"; import { Abilities } from "#app/enums/abilities"; import { Stat } from "#app/enums/stat"; import { CommandPhase } from "#app/phases/command-phase"; diff --git a/test/moves/moongeist_beam.test.ts b/test/moves/moongeist_beam.test.ts index 94197683ea4..117fe513e17 100644 --- a/test/moves/moongeist_beam.test.ts +++ b/test/moves/moongeist_beam.test.ts @@ -1,5 +1,4 @@ -import { RandomMoveAttr } from "#app/data/moves/move"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves, RandomMoveAttr } from "#app/data/moves/move"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/moves/pledge_moves.test.ts b/test/moves/pledge_moves.test.ts index d3b8e60ac62..c866d15357c 100644 --- a/test/moves/pledge_moves.test.ts +++ b/test/moves/pledge_moves.test.ts @@ -1,8 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { allAbilities } from "#app/data/ability"; import { ArenaTagSide } from "#app/data/arena-tag"; -import { FlinchAttr } from "#app/data/moves/move"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves, FlinchAttr } from "#app/data/moves/move"; import { PokemonType } from "#enums/pokemon-type"; import { ArenaTagType } from "#enums/arena-tag-type"; import { Stat } from "#enums/stat"; diff --git a/test/moves/powder.test.ts b/test/moves/powder.test.ts index 510564e0f53..522b0b74ca7 100644 --- a/test/moves/powder.test.ts +++ b/test/moves/powder.test.ts @@ -5,8 +5,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { BerryPhase } from "#app/phases/berry-phase"; -import { MoveResult } from "#app/field/pokemon"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { MoveResult, PokemonMove } from "#app/field/pokemon"; import { PokemonType } from "#enums/pokemon-type"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { StatusEffect } from "#enums/status-effect"; diff --git a/test/moves/protect.test.ts b/test/moves/protect.test.ts index 65de079982f..d50c490f7d3 100644 --- a/test/moves/protect.test.ts +++ b/test/moves/protect.test.ts @@ -5,7 +5,7 @@ import { Species } from "#enums/species"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Stat } from "#enums/stat"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; import { BattlerIndex } from "#app/battle"; import { MoveResult } from "#app/field/pokemon"; diff --git a/test/moves/rage_fist.test.ts b/test/moves/rage_fist.test.ts index 73d83f4929c..f44901c5aba 100644 --- a/test/moves/rage_fist.test.ts +++ b/test/moves/rage_fist.test.ts @@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import type Move from "#app/data/moves/move"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; diff --git a/test/moves/reflect.test.ts b/test/moves/reflect.test.ts index 272e5c2972c..ac879a7cc2b 100644 --- a/test/moves/reflect.test.ts +++ b/test/moves/reflect.test.ts @@ -1,8 +1,7 @@ import type BattleScene from "#app/battle-scene"; import { ArenaTagSide } from "#app/data/arena-tag"; import type Move from "#app/data/moves/move"; -import { CritOnlyAttr } from "#app/data/moves/move"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves, CritOnlyAttr } from "#app/data/moves/move"; import { Abilities } from "#app/enums/abilities"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import type Pokemon from "#app/field/pokemon"; diff --git a/test/moves/retaliate.test.ts b/test/moves/retaliate.test.ts index 57d29b4fdfc..e916c9ffeaa 100644 --- a/test/moves/retaliate.test.ts +++ b/test/moves/retaliate.test.ts @@ -3,7 +3,7 @@ import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { Moves } from "#enums/moves"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import type Move from "#app/data/moves/move"; describe("Moves - Retaliate", () => { diff --git a/test/moves/rollout.test.ts b/test/moves/rollout.test.ts index 456f029cda1..89270c2dfc7 100644 --- a/test/moves/rollout.test.ts +++ b/test/moves/rollout.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { CommandPhase } from "#app/phases/command-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/test/moves/round.test.ts b/test/moves/round.test.ts index ec9f3f69a5e..82f080a25ea 100644 --- a/test/moves/round.test.ts +++ b/test/moves/round.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import type { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/test/moves/scale_shot.test.ts b/test/moves/scale_shot.test.ts index ee759b8404a..2be632adb54 100644 --- a/test/moves/scale_shot.test.ts +++ b/test/moves/scale_shot.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; diff --git a/test/moves/secret_power.test.ts b/test/moves/secret_power.test.ts index 40802dcc51f..37f1664251b 100644 --- a/test/moves/secret_power.test.ts +++ b/test/moves/secret_power.test.ts @@ -2,7 +2,7 @@ import { Abilities } from "#enums/abilities"; import { Biome } from "#enums/biome"; import { Moves } from "#enums/moves"; import { Stat } from "#enums/stat"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; diff --git a/test/moves/shell_side_arm.test.ts b/test/moves/shell_side_arm.test.ts index 232182ffef0..a5b065b76cb 100644 --- a/test/moves/shell_side_arm.test.ts +++ b/test/moves/shell_side_arm.test.ts @@ -1,6 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { ShellSideArmCategoryAttr } from "#app/data/moves/move"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves, ShellSideArmCategoryAttr } from "#app/data/moves/move"; import type Move from "#app/data/moves/move"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/test/moves/shell_trap.test.ts b/test/moves/shell_trap.test.ts index d3ba67843ac..2df94cdb828 100644 --- a/test/moves/shell_trap.test.ts +++ b/test/moves/shell_trap.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { MoveResult } from "#app/field/pokemon"; diff --git a/test/moves/sketch.test.ts b/test/moves/sketch.test.ts index 94f37757a6a..dfbf2eca713 100644 --- a/test/moves/sketch.test.ts +++ b/test/moves/sketch.test.ts @@ -1,15 +1,13 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import { MoveResult } from "#app/field/pokemon"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { MoveResult, PokemonMove } from "#app/field/pokemon"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { StatusEffect } from "#app/enums/status-effect"; import { BattlerIndex } from "#app/battle"; -import { RandomMoveAttr } from "#app/data/moves/move"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves, RandomMoveAttr } from "#app/data/moves/move"; describe("Moves - Sketch", () => { let phaserGame: Phaser.Game; diff --git a/test/moves/solar_beam.test.ts b/test/moves/solar_beam.test.ts index b8a28065b64..dffd4f210e5 100644 --- a/test/moves/solar_beam.test.ts +++ b/test/moves/solar_beam.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { BattlerTagType } from "#enums/battler-tag-type"; import { WeatherType } from "#enums/weather-type"; import { MoveResult } from "#app/field/pokemon"; diff --git a/test/moves/sparkly_swirl.test.ts b/test/moves/sparkly_swirl.test.ts index 1908772598a..6cd357c7e0e 100644 --- a/test/moves/sparkly_swirl.test.ts +++ b/test/moves/sparkly_swirl.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { StatusEffect } from "#app/enums/status-effect"; import { CommandPhase } from "#app/phases/command-phase"; import { Abilities } from "#enums/abilities"; diff --git a/test/moves/spectral_thief.test.ts b/test/moves/spectral_thief.test.ts index 271cb03073a..2e52b118a74 100644 --- a/test/moves/spectral_thief.test.ts +++ b/test/moves/spectral_thief.test.ts @@ -1,7 +1,7 @@ import { Abilities } from "#enums/abilities"; import { BattlerIndex } from "#app/battle"; import { Stat } from "#enums/stat"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; diff --git a/test/moves/spit_up.test.ts b/test/moves/spit_up.test.ts index 7ef6e5e5b14..d71647bda52 100644 --- a/test/moves/spit_up.test.ts +++ b/test/moves/spit_up.test.ts @@ -1,8 +1,8 @@ import { Stat } from "#enums/stat"; import { StockpilingTag } from "#app/data/battler-tags"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { BattlerTagType } from "#app/enums/battler-tag-type"; -import type { TurnMove } from "#app/interfaces/turn-move"; +import type { TurnMove } from "#app/field/pokemon"; import { MoveResult } from "#app/field/pokemon"; import GameManager from "#test/testUtils/gameManager"; import { Abilities } from "#enums/abilities"; diff --git a/test/moves/steamroller.test.ts b/test/moves/steamroller.test.ts index a0e4c29cce5..ba96928e01d 100644 --- a/test/moves/steamroller.test.ts +++ b/test/moves/steamroller.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { BattlerTagType } from "#app/enums/battler-tag-type"; -import type { DamageCalculationResult } from "#app/interfaces/damage-calculation-result"; +import type { DamageCalculationResult } from "#app/field/pokemon"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/moves/stockpile.test.ts b/test/moves/stockpile.test.ts index f6e6a0087f6..033f24d5229 100644 --- a/test/moves/stockpile.test.ts +++ b/test/moves/stockpile.test.ts @@ -1,6 +1,6 @@ import { Stat } from "#enums/stat"; import { StockpilingTag } from "#app/data/battler-tags"; -import type { TurnMove } from "#app/interfaces/turn-move"; +import type { TurnMove } from "#app/field/pokemon"; import { MoveResult } from "#app/field/pokemon"; import { CommandPhase } from "#app/phases/command-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; diff --git a/test/moves/substitute.test.ts b/test/moves/substitute.test.ts index 68b90bf7cf8..23f7f4af4b9 100644 --- a/test/moves/substitute.test.ts +++ b/test/moves/substitute.test.ts @@ -1,8 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { ArenaTagSide } from "#app/data/arena-tag"; import { SubstituteTag, TrappedTag } from "#app/data/battler-tags"; -import { StealHeldItemChanceAttr } from "#app/data/moves/move"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves, StealHeldItemChanceAttr } from "#app/data/moves/move"; import { MoveResult } from "#app/field/pokemon"; import type { CommandPhase } from "#app/phases/command-phase"; import GameManager from "#test/testUtils/gameManager"; diff --git a/test/moves/swallow.test.ts b/test/moves/swallow.test.ts index 86af584a174..baa03801079 100644 --- a/test/moves/swallow.test.ts +++ b/test/moves/swallow.test.ts @@ -1,7 +1,7 @@ import { Stat } from "#enums/stat"; import { StockpilingTag } from "#app/data/battler-tags"; import { BattlerTagType } from "#app/enums/battler-tag-type"; -import type { TurnMove } from "#app/interfaces/turn-move"; +import type { TurnMove } from "#app/field/pokemon"; import { MoveResult } from "#app/field/pokemon"; import { MovePhase } from "#app/phases/move-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; diff --git a/test/moves/telekinesis.test.ts b/test/moves/telekinesis.test.ts index 7537ba0168a..1355cb975f3 100644 --- a/test/moves/telekinesis.test.ts +++ b/test/moves/telekinesis.test.ts @@ -1,5 +1,5 @@ import { BattlerTagType } from "#enums/battler-tag-type"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/moves/tera_blast.test.ts b/test/moves/tera_blast.test.ts index 9d17ea6a3cc..c1a2b999fa0 100644 --- a/test/moves/tera_blast.test.ts +++ b/test/moves/tera_blast.test.ts @@ -1,11 +1,10 @@ import { BattlerIndex } from "#app/battle"; import { Stat } from "#enums/stat"; -import { TeraMoveCategoryAttr } from "#app/data/moves/move"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves, TeraMoveCategoryAttr } from "#app/data/moves/move"; import type Move from "#app/data/moves/move"; import { PokemonType } from "#enums/pokemon-type"; import { Abilities } from "#app/enums/abilities"; -import { HitResult } from "#enums/hit-result"; +import { HitResult } from "#app/field/pokemon"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; diff --git a/test/moves/toxic.test.ts b/test/moves/toxic.test.ts index ab536364f6a..f2b1f82fe02 100644 --- a/test/moves/toxic.test.ts +++ b/test/moves/toxic.test.ts @@ -5,7 +5,7 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { StatusEffect } from "#enums/status-effect"; import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves } from "#app/data/moves/move"; describe("Moves - Toxic", () => { let phaserGame: Phaser.Game; diff --git a/test/moves/triple_arrows.test.ts b/test/moves/triple_arrows.test.ts index d1d14f7d3e6..eb434b25815 100644 --- a/test/moves/triple_arrows.test.ts +++ b/test/moves/triple_arrows.test.ts @@ -1,5 +1,4 @@ -import { FlinchAttr, StatStageChangeAttr } from "#app/data/moves/move"; -import { allMoves } from "#app/data/moves/all-moves"; +import { allMoves, FlinchAttr, StatStageChangeAttr } from "#app/data/moves/move"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import type Move from "#app/data/moves/move"; diff --git a/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts b/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts index 728129007e7..3c7bda8febd 100644 --- a/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts +++ b/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts @@ -8,8 +8,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vite import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { runMysteryEncounterToEnd } from "#test/mystery-encounter/encounter-test-utils"; import type BattleScene from "#app/battle-scene"; -import { PlayerPokemon } from "#app/field/pokemon"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; import { AnOfferYouCantRefuseEncounter } from "#app/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; diff --git a/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts b/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts index c1e6a635f31..9befe77e688 100644 --- a/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts +++ b/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts @@ -11,7 +11,7 @@ import { } from "#test/mystery-encounter/encounter-test-utils"; import { Moves } from "#enums/moves"; import type BattleScene from "#app/battle-scene"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { PokemonMove } from "#app/field/pokemon"; import { Mode } from "#app/ui/ui"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; diff --git a/test/mystery-encounter/encounters/clowning-around-encounter.test.ts b/test/mystery-encounter/encounters/clowning-around-encounter.test.ts index 7b3d87463bf..4bbe76e5c72 100644 --- a/test/mystery-encounter/encounters/clowning-around-encounter.test.ts +++ b/test/mystery-encounter/encounters/clowning-around-encounter.test.ts @@ -15,7 +15,7 @@ import { import { Moves } from "#enums/moves"; import type BattleScene from "#app/battle-scene"; import type Pokemon from "#app/field/pokemon"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { PokemonMove } from "#app/field/pokemon"; import { Mode } from "#app/ui/ui"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; diff --git a/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts b/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts index 5ea836d8aa6..77cd65e51b9 100644 --- a/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts +++ b/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts @@ -17,7 +17,7 @@ import { Moves } from "#enums/moves"; import { DancingLessonsEncounter } from "#app/data/mystery-encounters/encounters/dancing-lessons-encounter"; import { Mode } from "#app/ui/ui"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { PokemonMove } from "#app/field/pokemon"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import { CommandPhase } from "#app/phases/command-phase"; import { MovePhase } from "#app/phases/move-phase"; diff --git a/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts b/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts index 82d80bc3970..d233e72932a 100644 --- a/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts +++ b/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts @@ -11,7 +11,7 @@ import { } from "#test/mystery-encounter/encounter-test-utils"; import { Moves } from "#enums/moves"; import type BattleScene from "#app/battle-scene"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { PokemonMove } from "#app/field/pokemon"; import { Mode } from "#app/ui/ui"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; diff --git a/test/mystery-encounter/encounters/part-timer-encounter.test.ts b/test/mystery-encounter/encounters/part-timer-encounter.test.ts index 308aa9839e9..639a2e140ff 100644 --- a/test/mystery-encounter/encounters/part-timer-encounter.test.ts +++ b/test/mystery-encounter/encounters/part-timer-encounter.test.ts @@ -14,7 +14,7 @@ import { CIVILIZATION_ENCOUNTER_BIOMES } from "#app/data/mystery-encounters/myst import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { PartTimerEncounter } from "#app/data/mystery-encounters/encounters/part-timer-encounter"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { PokemonMove } from "#app/field/pokemon"; import { Moves } from "#enums/moves"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; diff --git a/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts b/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts index 0d0298901d0..a9e6a339d36 100644 --- a/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts @@ -17,7 +17,7 @@ import { TheStrongStuffEncounter } from "#app/data/mystery-encounters/encounters import { Nature } from "#enums/nature"; import { BerryType } from "#enums/berry-type"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { PokemonMove } from "#app/field/pokemon"; import { Mode } from "#app/ui/ui"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { BerryModifier, PokemonBaseStatTotalModifier } from "#app/modifier/modifier"; diff --git a/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts b/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts index 44c8e7a8915..df7bbb9f424 100644 --- a/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts +++ b/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts @@ -12,7 +12,7 @@ import { getPokemonSpecies } from "#app/data/pokemon-species"; import { Biome } from "#app/enums/biome"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { Species } from "#app/enums/species"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { PokemonMove } from "#app/field/pokemon"; import { HealShopCostModifier, HitHealModifier, TurnHealModifier } from "#app/modifier/modifier"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { modifierTypes, type PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; diff --git a/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts b/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts index e4928406a18..452dfcf3784 100644 --- a/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts +++ b/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts @@ -10,7 +10,7 @@ import { } from "#test/mystery-encounter/encounter-test-utils"; import { Moves } from "#enums/moves"; import type BattleScene from "#app/battle-scene"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { PokemonMove } from "#app/field/pokemon"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; diff --git a/test/testUtils/helpers/moveHelper.ts b/test/testUtils/helpers/moveHelper.ts index 333f95f2014..543f46b2026 100644 --- a/test/testUtils/helpers/moveHelper.ts +++ b/test/testUtils/helpers/moveHelper.ts @@ -1,7 +1,7 @@ import type { BattlerIndex } from "#app/battle"; import { Button } from "#app/enums/buttons"; import type Pokemon from "#app/field/pokemon"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { PokemonMove } from "#app/field/pokemon"; import Overrides from "#app/overrides"; import type { CommandPhase } from "#app/phases/command-phase"; import { LearnMovePhase } from "#app/phases/learn-move-phase"; From 8216a379bf37efaed799261ac757df485af0914f Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Mon, 14 Apr 2025 12:37:26 -0500 Subject: [PATCH 023/262] [Dev][GitHub] Update to node 22 (#5586) * Update node and workflows to use version 22.14 * Update @types/node package * Update engines field in package.json * Hardcode node version in github pages workflow * Update to checkout@v4 in github pages workflow --- .github/workflows/deploy-beta.yml | 2 +- .github/workflows/deploy.yml | 2 +- .github/workflows/github-pages.yml | 10 +++++----- .github/workflows/quality.yml | 1 + .github/workflows/test-shard-template.yml | 5 +++-- .nvmrc | 2 +- README.md | 2 +- package-lock.json | 17 +++++++++-------- package.json | 4 ++-- 9 files changed, 24 insertions(+), 21 deletions(-) diff --git a/.github/workflows/deploy-beta.yml b/.github/workflows/deploy-beta.yml index d8d8126193d..8b0e33a18c4 100644 --- a/.github/workflows/deploy-beta.yml +++ b/.github/workflows/deploy-beta.yml @@ -15,7 +15,7 @@ jobs: submodules: 'recursive' - uses: actions/setup-node@v4 with: - node-version: "20" + node-version-file: '.nvmrc' - name: Install dependencies run: npm ci - name: Build diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index e40b18eb69b..00190e477d5 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -18,7 +18,7 @@ jobs: submodules: 'recursive' - uses: actions/setup-node@v4 with: - node-version: "20" + node-version-file: '.nvmrc' - name: Install dependencies run: npm ci - name: Build diff --git a/.github/workflows/github-pages.yml b/.github/workflows/github-pages.yml index 58067ac81ac..b7d5fb95c1e 100644 --- a/.github/workflows/github-pages.yml +++ b/.github/workflows/github-pages.yml @@ -24,7 +24,7 @@ jobs: steps: - name: Checkout repository for Typedoc - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: submodules: 'recursive' path: pokerogue_docs @@ -34,14 +34,14 @@ jobs: sudo apt update sudo apt install -y git openssh-client - - name: Setup Node 20.13.1 - uses: actions/setup-node@v1 + - name: Setup Node 22.14.1 + uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 22 - name: Checkout repository for Github Pages if: github.event_name == 'push' - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: path: pokerogue_gh ref: gh-pages diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml index 7e33a77a73a..d9592662998 100644 --- a/.github/workflows/quality.yml +++ b/.github/workflows/quality.yml @@ -29,6 +29,7 @@ jobs: uses: actions/setup-node@v4 # Use the setup-node action version 4 with: node-version-file: '.nvmrc' + cache: 'npm' - name: Install Node.js dependencies # Step to install Node.js dependencies run: npm ci # Use 'npm ci' to install dependencies diff --git a/.github/workflows/test-shard-template.yml b/.github/workflows/test-shard-template.yml index 9fc41d1b965..cee452f3a59 100644 --- a/.github/workflows/test-shard-template.yml +++ b/.github/workflows/test-shard-template.yml @@ -19,13 +19,14 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out Git repository - uses: actions/checkout@v4 + uses: actions/checkout@v4.2.2 with: submodules: 'recursive' - name: Set up Node.js uses: actions/setup-node@v4 with: - node-version: 20 + node-version-file: '.nvmrc' + cache: 'npm' - name: Install Node.js dependencies run: npm ci - name: Run tests diff --git a/.nvmrc b/.nvmrc index 9bcccb9439d..517f38666b4 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v20.13.1 +v22.14.0 diff --git a/README.md b/README.md index 5bb3ecfd26f..56392808b3c 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ If you have the motivation and experience with Typescript/Javascript (or are wil #### Prerequisites -- node: 20.13.1 +- node: 22.14.0 - npm: [how to install](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) #### Running Locally diff --git a/package-lock.json b/package-lock.json index 6b880370f0b..622eac908de 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,7 +27,7 @@ "@hpcc-js/wasm": "^2.22.4", "@stylistic/eslint-plugin-ts": "^4.1.0", "@types/jsdom": "^21.1.7", - "@types/node": "^20.12.13", + "@types/node": "^22.13.14", "@typescript-eslint/eslint-plugin": "^8.28.0", "@typescript-eslint/parser": "^8.28.0", "@vitest/coverage-istanbul": "^3.0.9", @@ -2582,12 +2582,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "20.14.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.11.tgz", - "integrity": "sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==", + "version": "22.13.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.14.tgz", + "integrity": "sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==", "dev": true, + "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.20.0" } }, "node_modules/@types/statuses": { @@ -7312,9 +7313,9 @@ "dev": true }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", "dev": true, "license": "MIT" }, diff --git a/package.json b/package.json index c84e926fc35..ffe4c06bea0 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "@hpcc-js/wasm": "^2.22.4", "@stylistic/eslint-plugin-ts": "^4.1.0", "@types/jsdom": "^21.1.7", - "@types/node": "^20.12.13", + "@types/node": "^22.13.14", "@typescript-eslint/eslint-plugin": "^8.28.0", "@typescript-eslint/parser": "^8.28.0", "@vitest/coverage-istanbul": "^3.0.9", @@ -67,6 +67,6 @@ "phaser3-rex-plugins": "^1.80.14" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" } } From 3ec8f236f92b022e370eedcc6b695c057c6d7ac2 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Mon, 14 Apr 2025 20:13:05 -0400 Subject: [PATCH 024/262] [Refactor] Change how rival event rewards are generated (#5638) * Change how rival event rewards are generated * Simplify to switch case Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/data/trainers/trainer-config.ts | 13 ------------- src/phases/trainer-victory-phase.ts | 6 ------ src/phases/victory-phase.ts | 21 +++++++++++++++------ 3 files changed, 15 insertions(+), 25 deletions(-) diff --git a/src/data/trainers/trainer-config.ts b/src/data/trainers/trainer-config.ts index 0ab7119dab9..4efe294f7d0 100644 --- a/src/data/trainers/trainer-config.ts +++ b/src/data/trainers/trainer-config.ts @@ -116,7 +116,6 @@ export class TrainerConfig { public modifierRewardFuncs: ModifierTypeFunc[] = []; public partyTemplates: TrainerPartyTemplate[]; public partyTemplateFunc: PartyTemplateFunc; - public eventRewardFuncs: ModifierTypeFunc[] = []; public partyMemberFuncs: PartyMemberFuncs = {}; public speciesPools: TrainerTierPools; public speciesFilter: PokemonSpeciesFilter; @@ -517,16 +516,6 @@ export class TrainerConfig { // return ret; // } - /** - * Sets eventRewardFuncs to the active event rewards for the specified wave - * @param wave Associated with {@linkcode getFixedBattleEventRewards} - * @returns this - */ - setEventModifierRewardFuncs(wave: number): TrainerConfig { - this.eventRewardFuncs = timedEventManager.getFixedBattleEventRewards(wave).map(r => modifierTypes[r]); - return this; - } - setModifierRewardFuncs(...modifierTypeFuncs: (() => ModifierTypeFunc)[]): TrainerConfig { this.modifierRewardFuncs = modifierTypeFuncs.map(func => () => { const modifierTypeFunc = func(); @@ -3692,7 +3681,6 @@ export const trainerConfigs: TrainerConfigs = { () => modifierTypes.SUPER_EXP_CHARM, () => modifierTypes.EXP_SHARE, ) - .setEventModifierRewardFuncs(8) .setPartyMemberFunc( 0, getRandomPartyMemberFunc( @@ -3760,7 +3748,6 @@ export const trainerConfigs: TrainerConfigs = { .setMixedBattleBgm("battle_rival") .setPartyTemplates(trainerPartyTemplates.RIVAL_2) .setModifierRewardFuncs(() => modifierTypes.EXP_SHARE) - .setEventModifierRewardFuncs(25) .setPartyMemberFunc( 0, getRandomPartyMemberFunc( diff --git a/src/phases/trainer-victory-phase.ts b/src/phases/trainer-victory-phase.ts index 637ddea8b56..f17071f118e 100644 --- a/src/phases/trainer-victory-phase.ts +++ b/src/phases/trainer-victory-phase.ts @@ -26,12 +26,6 @@ export class TrainerVictoryPhase extends BattlePhase { globalScene.unshiftPhase(new ModifierRewardPhase(modifierRewardFunc)); } - if (timedEventManager.isEventActive()) { - for (const rewardFunc of globalScene.currentBattle.trainer?.config.eventRewardFuncs!) { - globalScene.unshiftPhase(new ModifierRewardPhase(rewardFunc)); - } - } - const trainerType = globalScene.currentBattle.trainer?.config.trainerType!; // TODO: is this bang correct? // Validate Voucher for boss trainers if (vouchers.hasOwnProperty(TrainerType[trainerType])) { diff --git a/src/phases/victory-phase.ts b/src/phases/victory-phase.ts index 78bf72195e8..9f4412fe270 100644 --- a/src/phases/victory-phase.ts +++ b/src/phases/victory-phase.ts @@ -13,6 +13,7 @@ import { SelectModifierPhase } from "./select-modifier-phase"; import { TrainerVictoryPhase } from "./trainer-victory-phase"; import { handleMysteryEncounterVictory } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { globalScene } from "#app/global-scene"; +import { timedEventManager } from "#app/global-event-manager"; export class VictoryPhase extends PokemonPhase { /** If true, indicates that the phase is intended for EXP purposes only, and not to continue a battle to next phase */ @@ -53,12 +54,20 @@ export class VictoryPhase extends PokemonPhase { } if (globalScene.gameMode.isEndless || !globalScene.gameMode.isWaveFinal(globalScene.currentBattle.waveIndex)) { globalScene.pushPhase(new EggLapsePhase()); - if ( - globalScene.gameMode.isClassic && - globalScene.currentBattle.waveIndex === ClassicFixedBossWaves.EVIL_BOSS_2 - ) { - // Should get Lock Capsule on 165 before shop phase so it can be used in the rewards shop - globalScene.pushPhase(new ModifierRewardPhase(modifierTypes.LOCK_CAPSULE)); + if (globalScene.gameMode.isClassic) { + switch (globalScene.currentBattle.waveIndex) { + case ClassicFixedBossWaves.RIVAL_1: + case ClassicFixedBossWaves.RIVAL_2: + // Get event modifiers for this wave + timedEventManager + .getFixedBattleEventRewards(globalScene.currentBattle.waveIndex) + .map(r => globalScene.pushPhase(new ModifierRewardPhase(modifierTypes[r]))); + break; + case ClassicFixedBossWaves.EVIL_BOSS_2: + // Should get Lock Capsule on 165 before shop phase so it can be used in the rewards shop + globalScene.pushPhase(new ModifierRewardPhase(modifierTypes.LOCK_CAPSULE)); + break; + } } if (globalScene.currentBattle.waveIndex % 10) { globalScene.pushPhase(new SelectModifierPhase(undefined, undefined, this.getFixedBattleCustomModifiers())); From 4740b593a02dfdc0b45e5515d56bf30a0d7cf4f8 Mon Sep 17 00:00:00 2001 From: Madmadness65 <59298170+Madmadness65@users.noreply.github.com> Date: Tue, 15 Apr 2025 00:27:14 -0500 Subject: [PATCH 025/262] =?UTF-8?q?[Balance]=20Fix=20Depot=20Agent=20train?= =?UTF-8?q?er=20type=20lacking=20Pok=C3=A9mon=20(#5623)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix Depot Agent trainer type lacking Pokémon Also removes a stray duplicate Barboach from the Fisherman. --- src/data/trainers/trainer-config.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/data/trainers/trainer-config.ts b/src/data/trainers/trainer-config.ts index 4efe294f7d0..d9922ecc097 100644 --- a/src/data/trainers/trainer-config.ts +++ b/src/data/trainers/trainer-config.ts @@ -1318,7 +1318,16 @@ export const trainerConfigs: TrainerConfigs = { [TrainerPoolTier.RARE]: [Species.BELLOSSOM, Species.HITMONTOP, Species.MIME_JR, Species.ORICORIO], [TrainerPoolTier.SUPER_RARE]: [Species.QUAXLY, Species.JANGMO_O], }), - [TrainerType.DEPOT_AGENT]: new TrainerConfig(++t).setMoneyMultiplier(1.45).setEncounterBgm(TrainerType.CLERK), + [TrainerType.DEPOT_AGENT]: new TrainerConfig(++t) + .setMoneyMultiplier(1.45) + .setEncounterBgm(TrainerType.CLERK) + .setPartyTemplates( + trainerPartyTemplates.TWO_AVG, + trainerPartyTemplates.THREE_WEAK, + trainerPartyTemplates.THREE_AVG, + trainerPartyTemplates.FOUR_WEAK, + ) + .setSpeciesFilter(s => s.isOfType(PokemonType.GROUND)), [TrainerType.DOCTOR]: new TrainerConfig(++t) .setHasGenders("Nurse", "lass") .setHasDouble("Medical Team") @@ -1369,7 +1378,6 @@ export const trainerConfigs: TrainerConfigs = { Species.CHINCHOU, Species.CORSOLA, Species.WAILMER, - Species.BARBOACH, Species.CLAMPERL, Species.LUVDISC, Species.MANTYKE, From ff44cbfa97b834bfbb9172ceef5abce1d9cec13d Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Tue, 15 Apr 2025 09:08:35 -0500 Subject: [PATCH 026/262] [Refactor] Refactor ability file part 1 (#5589) * Move ability.ts to subfolder * Extract types out of ability.ts * Update imports in ability.ts and friends * Cleanup imports in ability.ts * Re-add imports lost during sort * Update imports forgotten during rebase * Re-import proper type from enums * Update biome.jsonc Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Add commit to force tests to rerun --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- biome.jsonc | 2 +- src/@types/ability-types.ts | 11 + src/battle-scene.ts | 4 +- src/data/abilities/ab-attrs/ab-attr.ts | 54 ++++ src/data/abilities/ability-class.ts | 137 +++++++++ src/data/{ => abilities}/ability.ts | 266 ++++-------------- src/data/arena-tag.ts | 2 +- src/data/battler-tags.ts | 4 +- src/data/berry.ts | 2 +- src/data/data-lists.ts | 3 + src/data/moves/move.ts | 4 +- .../encounters/clowning-around-encounter.ts | 2 +- .../encounters/fiery-fallout-encounter.ts | 2 +- .../the-winstrate-challenge-encounter.ts | 2 +- .../encounters/training-session-encounter.ts | 4 +- .../mystery-encounter-requirements.ts | 2 +- src/data/weather.ts | 2 +- src/field/arena.ts | 2 +- src/field/pokemon.ts | 7 +- src/loading-scene.ts | 2 +- src/modifier/modifier.ts | 2 +- src/phases/attempt-run-phase.ts | 7 +- src/phases/battle-end-phase.ts | 2 +- src/phases/berry-phase.ts | 2 +- src/phases/encounter-phase.ts | 2 +- src/phases/faint-phase.ts | 2 +- src/phases/move-effect-phase.ts | 2 +- src/phases/move-end-phase.ts | 2 +- src/phases/move-phase.ts | 2 +- src/phases/new-biome-encounter-phase.ts | 2 +- src/phases/obtain-status-effect-phase.ts | 2 +- src/phases/post-summon-phase.ts | 2 +- src/phases/post-turn-status-effect-phase.ts | 2 +- src/phases/quiet-form-change-phase.ts | 2 +- src/phases/stat-stage-change-phase.ts | 2 +- src/phases/summon-phase.ts | 2 +- src/phases/switch-summon-phase.ts | 2 +- src/phases/turn-end-phase.ts | 2 +- src/phases/turn-start-phase.ts | 2 +- src/phases/weather-effect-phase.ts | 2 +- src/ui/pokedex-page-ui-handler.ts | 2 +- src/ui/pokedex-scan-ui-handler.ts | 2 +- src/ui/pokedex-ui-handler.ts | 2 +- src/ui/starter-select-ui-handler.ts | 4 +- src/ui/summary-ui-handler.ts | 2 +- test/abilities/arena_trap.test.ts | 2 +- test/abilities/flower_gift.test.ts | 2 +- test/abilities/flower_veil.test.ts | 2 +- test/abilities/forecast.test.ts | 2 +- test/abilities/friend_guard.test.ts | 2 +- test/abilities/good_as_gold.test.ts | 2 +- test/abilities/magic_bounce.test.ts | 2 +- test/abilities/neutralizing_gas.test.ts | 2 +- test/abilities/quick_draw.test.ts | 3 +- test/abilities/sand_veil.test.ts | 3 +- test/abilities/shield_dust.test.ts | 2 +- test/abilities/steely_spirit.test.ts | 2 +- test/abilities/unburden.test.ts | 2 +- test/battle/ability_swap.test.ts | 2 +- test/moves/flame_burst.test.ts | 2 +- test/moves/pledge_moves.test.ts | 2 +- test/moves/safeguard.test.ts | 3 +- test/moves/secret_power.test.ts | 3 +- test/testUtils/testFileInitialization.ts | 2 +- 64 files changed, 337 insertions(+), 276 deletions(-) create mode 100644 src/@types/ability-types.ts create mode 100644 src/data/abilities/ab-attrs/ab-attr.ts create mode 100644 src/data/abilities/ability-class.ts rename src/data/{ => abilities}/ability.ts (97%) create mode 100644 src/data/data-lists.ts diff --git a/biome.jsonc b/biome.jsonc index da80d8ee127..9d0e6a9b5ff 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -31,7 +31,7 @@ "src/overrides.ts", // TODO: these files are too big and complex, ignore them until their respective refactors "src/data/moves/move.ts", - "src/data/ability.ts", + "src/data/abilities/ability.ts", "src/field/pokemon.ts", // this file is just too big: diff --git a/src/@types/ability-types.ts b/src/@types/ability-types.ts new file mode 100644 index 00000000000..5d21aaaa844 --- /dev/null +++ b/src/@types/ability-types.ts @@ -0,0 +1,11 @@ +import type { AbAttr } from "#app/data/abilities/ab-attrs/ab-attr"; +import type Move from "#app/data/moves/move"; +import type Pokemon from "#app/field/pokemon"; +import type { BattleStat } from "#enums/stat"; + +export type AbAttrApplyFunc = (attr: TAttr, passive: boolean) => void; +export type AbAttrSuccessFunc = (attr: TAttr, passive: boolean) => boolean; +export type AbAttrCondition = (pokemon: Pokemon) => boolean; +export type PokemonAttackCondition = (user: Pokemon | null, target: Pokemon | null, move: Move) => boolean; +export type PokemonDefendCondition = (target: Pokemon, user: Pokemon, move: Move) => boolean; +export type PokemonStatStageChangeCondition = (target: Pokemon, statsChanged: BattleStat[], stages: number) => boolean; diff --git a/src/battle-scene.ts b/src/battle-scene.ts index dd983f2b397..90f53d6a95e 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -67,7 +67,6 @@ import { } from "#app/modifier/modifier-type"; import AbilityBar from "#app/ui/ability-bar"; import { - allAbilities, applyAbAttrs, applyPostBattleInitAbAttrs, applyPostItemLostAbAttrs, @@ -75,7 +74,8 @@ import { DoubleBattleChanceAbAttr, PostBattleInitAbAttr, PostItemLostAbAttr, -} from "#app/data/ability"; +} from "#app/data/abilities/ability"; +import { allAbilities } from "./data/data-lists"; import type { FixedBattleConfig } from "#app/battle"; import Battle, { BattleType } from "#app/battle"; import type { GameMode } from "#app/game-mode"; diff --git a/src/data/abilities/ab-attrs/ab-attr.ts b/src/data/abilities/ab-attrs/ab-attr.ts new file mode 100644 index 00000000000..c8ead691b25 --- /dev/null +++ b/src/data/abilities/ab-attrs/ab-attr.ts @@ -0,0 +1,54 @@ +import type { AbAttrCondition } from "#app/@types/ability-types"; +import type Pokemon from "#app/field/pokemon"; +import type * as Utils from "#app/utils"; + +export abstract class AbAttr { + public showAbility: boolean; + private extraCondition: AbAttrCondition; + + constructor(showAbility = true) { + this.showAbility = showAbility; + } + + /** + * Applies ability effects without checking conditions + * @param _pokemon - The pokemon to apply this ability to + * @param _passive - Whether or not the ability is a passive + * @param _simulated - Whether the call is simulated + * @param _args - Extra args passed to the function. Handled by child classes. + * @see {@linkcode canApply} + */ + apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _cancelled: Utils.BooleanHolder | null, + _args: any[], + ): void {} + + getTriggerMessage(_pokemon: Pokemon, _abilityName: string, ..._args: any[]): string | null { + return null; + } + + getCondition(): AbAttrCondition | null { + return this.extraCondition || null; + } + + addCondition(condition: AbAttrCondition): AbAttr { + this.extraCondition = condition; + return this; + } + + /** + * Returns a boolean describing whether the ability can be applied under current conditions + * @param _pokemon - The pokemon to apply this ability to + * @param _passive - Whether or not the ability is a passive + * @param _simulated - Whether the call is simulated + * @param _args - Extra args passed to the function. Handled by child classes. + * @returns `true` if the ability can be applied, `false` otherwise + * @see {@linkcode apply} + */ + canApply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { + return true; + } +} diff --git a/src/data/abilities/ability-class.ts b/src/data/abilities/ability-class.ts new file mode 100644 index 00000000000..b4cda2482d4 --- /dev/null +++ b/src/data/abilities/ability-class.ts @@ -0,0 +1,137 @@ +import { Abilities } from "#enums/abilities"; +import type { AbAttrCondition } from "#app/@types/ability-types"; +import type { AbAttr } from "#app/data/abilities/ab-attrs/ab-attr"; +import i18next from "i18next"; +import type { Localizable } from "#app/interfaces/locales"; +import type { Constructor } from "#app/utils"; + +export class Ability implements Localizable { + public id: Abilities; + + private nameAppend: string; + public name: string; + public description: string; + public generation: number; + public isBypassFaint: boolean; + public isIgnorable: boolean; + public isSuppressable = true; + public isCopiable = true; + public isReplaceable = true; + public attrs: AbAttr[]; + public conditions: AbAttrCondition[]; + + constructor(id: Abilities, generation: number) { + this.id = id; + + this.nameAppend = ""; + this.generation = generation; + this.attrs = []; + this.conditions = []; + + this.isSuppressable = true; + this.isCopiable = true; + this.isReplaceable = true; + + this.localize(); + } + + public get isSwappable(): boolean { + return this.isCopiable && this.isReplaceable; + } + localize(): void { + const i18nKey = Abilities[this.id] + .split("_") + .filter(f => f) + .map((f, i) => (i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase())) + .join("") as string; + + this.name = this.id ? `${i18next.t(`ability:${i18nKey}.name`) as string}${this.nameAppend}` : ""; + this.description = this.id ? (i18next.t(`ability:${i18nKey}.description`) as string) : ""; + } + + /** + * Get all ability attributes that match `attrType` + * @param attrType any attribute that extends {@linkcode AbAttr} + * @returns Array of attributes that match `attrType`, Empty Array if none match. + */ + getAttrs(attrType: Constructor): T[] { + return this.attrs.filter((a): a is T => a instanceof attrType); + } + + /** + * Check if an ability has an attribute that matches `attrType` + * @param attrType any attribute that extends {@linkcode AbAttr} + * @returns true if the ability has attribute `attrType` + */ + hasAttr(attrType: Constructor): boolean { + return this.attrs.some(attr => attr instanceof attrType); + } + + attr>(AttrType: T, ...args: ConstructorParameters): Ability { + const attr = new AttrType(...args); + this.attrs.push(attr); + + return this; + } + + conditionalAttr>( + condition: AbAttrCondition, + AttrType: T, + ...args: ConstructorParameters + ): Ability { + const attr = new AttrType(...args); + attr.addCondition(condition); + this.attrs.push(attr); + + return this; + } + + bypassFaint(): Ability { + this.isBypassFaint = true; + return this; + } + + ignorable(): Ability { + this.isIgnorable = true; + return this; + } + + unsuppressable(): Ability { + this.isSuppressable = false; + return this; + } + + uncopiable(): Ability { + this.isCopiable = false; + return this; + } + + unreplaceable(): Ability { + this.isReplaceable = false; + return this; + } + + condition(condition: AbAttrCondition): Ability { + this.conditions.push(condition); + + return this; + } + + partial(): this { + this.nameAppend += " (P)"; + return this; + } + + unimplemented(): this { + this.nameAppend += " (N)"; + return this; + } + + /** + * Internal flag used for developers to document edge cases. When using this, please be sure to document the edge case. + * @returns the ability + */ + edgeCase(): this { + return this; + } +} diff --git a/src/data/ability.ts b/src/data/abilities/ability.ts similarity index 97% rename from src/data/ability.ts rename to src/data/abilities/ability.ts index 3e32a624f9f..17a8eddf47f 100644 --- a/src/data/ability.ts +++ b/src/data/abilities/ability.ts @@ -1,228 +1,75 @@ -import type { EnemyPokemon, PokemonMove } from "../field/pokemon"; -import type Pokemon from "../field/pokemon"; -import { HitResult, MoveResult, PlayerPokemon } from "../field/pokemon"; -import { PokemonType } from "#enums/pokemon-type"; +import { HitResult, MoveResult, PlayerPokemon } from "#app/field/pokemon"; import { BooleanHolder, NumberHolder, toDmgValue, isNullOrUndefined, randSeedItem, randSeedInt, type Constructor } from "#app/utils"; -import { getPokemonNameWithAffix } from "../messages"; -import type { Weather } from "#app/data/weather"; -import type { BattlerTag } from "./battler-tags"; -import { BattlerTagLapseType, GroundedTag } from "./battler-tags"; +import { getPokemonNameWithAffix } from "#app/messages"; +import { BattlerTagLapseType, GroundedTag } from "#app/data/battler-tags"; import { getNonVolatileStatusEffects, getStatusEffectDescriptor, getStatusEffectHealText } from "#app/data/status-effect"; -import { Gender } from "./gender"; -import type Move from "./moves/move"; -import { AttackMove, FlinchAttr, OneHitKOAttr, HitHealAttr, allMoves, StatusMove, SelfStatusMove, VariablePowerAttr, applyMoveAttrs, VariableMoveTypeAttr, RandomMovesetMoveAttr, RandomMoveAttr, NaturePowerAttr, CopyMoveAttr, NeutralDamageAgainstFlyingTypeMultiplierAttr, FixedDamageAttr } from "./moves/move"; -import { MoveFlags } from "#enums/MoveFlags"; -import { MoveTarget } from "#enums/MoveTarget"; -import { MoveCategory } from "#enums/MoveCategory"; -import type { ArenaTrapTag, SuppressAbilitiesTag } from "./arena-tag"; -import { ArenaTagSide } from "./arena-tag"; -import { BerryModifier, HitHealModifier, PokemonHeldItemModifier } from "../modifier/modifier"; -import { TerrainType } from "./terrain"; -import { SpeciesFormChangeAbilityTrigger, SpeciesFormChangeRevertWeatherFormTrigger, SpeciesFormChangeWeatherTrigger } from "./pokemon-forms"; +import { Gender } from "#app/data/gender"; +import { + AttackMove, + FlinchAttr, + OneHitKOAttr, + HitHealAttr, + allMoves, + StatusMove, + SelfStatusMove, + VariablePowerAttr, + applyMoveAttrs, + VariableMoveTypeAttr, + RandomMovesetMoveAttr, + RandomMoveAttr, + NaturePowerAttr, + CopyMoveAttr, + NeutralDamageAgainstFlyingTypeMultiplierAttr, + FixedDamageAttr, +} from "#app/data/moves/move"; +import { ArenaTagSide } from "#app/data/arena-tag"; +import { BerryModifier, HitHealModifier, PokemonHeldItemModifier } from "#app/modifier/modifier"; +import { TerrainType } from "#app/data/terrain"; +import { SpeciesFormChangeAbilityTrigger, SpeciesFormChangeRevertWeatherFormTrigger, SpeciesFormChangeWeatherTrigger } from "#app/data/pokemon-forms"; import i18next from "i18next"; -import type { Localizable } from "#app/interfaces/locales"; -import { Command } from "../ui/command-ui-handler"; +import { Command } from "#app/ui/command-ui-handler"; import { BerryModifierType } from "#app/modifier/modifier-type"; -import { getPokeballName } from "./pokeball"; -import type { BattlerIndex } from "#app/battle"; +import { getPokeballName } from "#app/data/pokeball"; import { BattleType } from "#app/battle"; -import { Abilities } from "#enums/abilities"; -import { ArenaTagType } from "#enums/arena-tag-type"; -import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; -import { Stat, type BattleStat, type EffectiveStat, BATTLE_STATS, EFFECTIVE_STATS, getStatKey } from "#app/enums/stat"; import { MovePhase } from "#app/phases/move-phase"; import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { globalScene } from "#app/global-scene"; -import { SwitchType } from "#app/enums/switch-type"; import { SwitchPhase } from "#app/phases/switch-phase"; import { SwitchSummonPhase } from "#app/phases/switch-summon-phase"; import { BattleEndPhase } from "#app/phases/battle-end-phase"; import { NewBattlePhase } from "#app/phases/new-battle-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; +import { PokemonTransformPhase } from "#app/phases/pokemon-transform-phase"; +import { allAbilities } from "#app/data/data-lists"; +import { AbAttr } from "#app/data/abilities/ab-attrs/ab-attr"; +import { Ability } from "#app/data/abilities/ability-class"; + +// Enum imports +import { Stat, type BattleStat , BATTLE_STATS, EFFECTIVE_STATS, getStatKey, type EffectiveStat } from "#enums/stat"; +import { PokemonType } from "#enums/pokemon-type"; import { PokemonAnimType } from "#enums/pokemon-anim-type"; import { StatusEffect } from "#enums/status-effect"; import { WeatherType } from "#enums/weather-type"; -import { PokemonTransformPhase } from "#app/phases/pokemon-transform-phase"; +import { Abilities } from "#enums/abilities"; +import { ArenaTagType } from "#enums/arena-tag-type"; +import { BattlerTagType } from "#enums/battler-tag-type"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { SwitchType } from "#enums/switch-type"; +import { MoveFlags } from "#enums/MoveFlags"; +import { MoveTarget } from "#enums/MoveTarget"; +import { MoveCategory } from "#enums/MoveCategory"; -export class Ability implements Localizable { - public id: Abilities; - - private nameAppend: string; - public name: string; - public description: string; - public generation: number; - public isBypassFaint: boolean; - public isIgnorable: boolean; - public isSuppressable = true; - public isCopiable = true; - public isReplaceable = true; - public attrs: AbAttr[]; - public conditions: AbAttrCondition[]; - - constructor(id: Abilities, generation: number) { - this.id = id; - - this.nameAppend = ""; - this.generation = generation; - this.attrs = []; - this.conditions = []; - - this.isSuppressable = true; - this.isCopiable = true; - this.isReplaceable = true; - - this.localize(); - } - - public get isSwappable(): boolean { - return this.isCopiable && this.isReplaceable; - } - localize(): void { - const i18nKey = Abilities[this.id].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join("") as string; - - this.name = this.id ? `${i18next.t(`ability:${i18nKey}.name`) as string}${this.nameAppend}` : ""; - this.description = this.id ? i18next.t(`ability:${i18nKey}.description`) as string : ""; - } - - /** - * Get all ability attributes that match `attrType` - * @param attrType any attribute that extends {@linkcode AbAttr} - * @returns Array of attributes that match `attrType`, Empty Array if none match. - */ - getAttrs(attrType: Constructor ): T[] { - return this.attrs.filter((a): a is T => a instanceof attrType); - } - - /** - * Check if an ability has an attribute that matches `attrType` - * @param attrType any attribute that extends {@linkcode AbAttr} - * @returns true if the ability has attribute `attrType` - */ - hasAttr(attrType: Constructor): boolean { - return this.attrs.some((attr) => attr instanceof attrType); - } - - attr>(AttrType: T, ...args: ConstructorParameters): Ability { - const attr = new AttrType(...args); - this.attrs.push(attr); - - return this; - } - - conditionalAttr>(condition: AbAttrCondition, AttrType: T, ...args: ConstructorParameters): Ability { - const attr = new AttrType(...args); - attr.addCondition(condition); - this.attrs.push(attr); - - return this; - } - - bypassFaint(): Ability { - this.isBypassFaint = true; - return this; - } - - ignorable(): Ability { - this.isIgnorable = true; - return this; - } - - unsuppressable(): Ability { - this.isSuppressable = false; - return this; - } - - uncopiable(): Ability { - this.isCopiable = false; - return this; - } - - unreplaceable(): Ability { - this.isReplaceable = false; - return this; - } - - condition(condition: AbAttrCondition): Ability { - this.conditions.push(condition); - - return this; - } - - partial(): this { - this.nameAppend += " (P)"; - return this; - } - - unimplemented(): this { - this.nameAppend += " (N)"; - return this; - } - - /** - * Internal flag used for developers to document edge cases. When using this, please be sure to document the edge case. - * @returns the ability - */ - edgeCase(): this { - return this; - } -} - -type AbAttrApplyFunc = (attr: TAttr, passive: boolean) => void; -type AbAttrSuccessFunc = (attr: TAttr, passive: boolean) => boolean; -type AbAttrCondition = (pokemon: Pokemon) => boolean; - -// TODO: Can this be improved? -type PokemonAttackCondition = (user: Pokemon | null, target: Pokemon | null, move: Move) => boolean; -type PokemonDefendCondition = (target: Pokemon, user: Pokemon, move: Move) => boolean; -type PokemonStatStageChangeCondition = (target: Pokemon, statsChanged: BattleStat[], stages: number) => boolean; - -export abstract class AbAttr { - public showAbility: boolean; - private extraCondition: AbAttrCondition; - - constructor(showAbility = true) { - this.showAbility = showAbility; - } - - /** - * Applies ability effects without checking conditions - * @param pokemon - The pokemon to apply this ability to - * @param passive - Whether or not the ability is a passive - * @param simulated - Whether the call is simulated - * @param args - Extra args passed to the function. Handled by child classes. - * @see {@linkcode canApply} - */ - apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder | null, args: any[]): void {} - - getTriggerMessage(_pokemon: Pokemon, _abilityName: string, ..._args: any[]): string | null { - return null; - } - - getCondition(): AbAttrCondition | null { - return this.extraCondition || null; - } - - addCondition(condition: AbAttrCondition): AbAttr { - this.extraCondition = condition; - return this; - } - - /** - * Returns a boolean describing whether the ability can be applied under current conditions - * @param pokemon - The pokemon to apply this ability to - * @param passive - Whether or not the ability is a passive - * @param simulated - Whether the call is simulated - * @param args - Extra args passed to the function. Handled by child classes. - * @returns `true` if the ability can be applied, `false` otherwise - * @see {@linkcode apply} - */ - canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - return true; - } -} +// Type imports +import type { EnemyPokemon, PokemonMove } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; +import type { Weather } from "#app/data/weather"; +import type { BattlerTag } from "#app/data/battler-tags"; +import type { AbAttrCondition, PokemonDefendCondition, PokemonStatStageChangeCondition, PokemonAttackCondition, AbAttrApplyFunc, AbAttrSuccessFunc } from "#app/@types/ability-types"; +import type { BattlerIndex } from "#app/battle"; +import type Move from "#app/data/moves/move"; +import type { ArenaTrapTag, SuppressAbilitiesTag } from "#app/data/arena-tag"; export class BlockRecoilDamageAttr extends AbAttr { constructor() { @@ -233,7 +80,7 @@ export class BlockRecoilDamageAttr extends AbAttr { cancelled.value = true; } - getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]) { + getTriggerMessage(pokemon: Pokemon, abilityName: string, ..._args: any[]) { return i18next.t("abilityTriggers:blockRecoilDamage", { pokemonName: getPokemonNameWithAffix(pokemon), abilityName: abilityName }); } } @@ -6453,10 +6300,9 @@ function getPokemonWithWeatherBasedForms() { ); } -export const allAbilities = [ new Ability(Abilities.NONE, 3) ]; - export function initAbilities() { allAbilities.push( + new Ability(Abilities.NONE, 3), new Ability(Abilities.STENCH, 3) .attr(PostAttackApplyBattlerTagAbAttr, false, (user, target, move) => !move.hasAttr(FlinchAttr) && !move.hitsSubstitute(user, target) ? 10 : 0, BattlerTagType.FLINCHED), new Ability(Abilities.DRIZZLE, 3) diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index 871f622f70a..1fe1eca4bba 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -18,7 +18,7 @@ import { applyAbAttrs, applyOnGainAbAttrs, applyOnLoseAbAttrs, -} from "#app/data/ability"; +} from "#app/data/abilities/ability"; import { Stat } from "#enums/stat"; import { CommonAnim, CommonBattleAnim } from "#app/data/battle-anims"; import i18next from "i18next"; diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 76e91485460..401fd9903d1 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -1,13 +1,13 @@ import { globalScene } from "#app/global-scene"; import { - allAbilities, applyAbAttrs, BlockNonDirectDamageAbAttr, FlinchEffectAbAttr, ProtectStatAbAttr, ConditionalUserFieldProtectStatAbAttr, ReverseDrainAbAttr, -} from "#app/data/ability"; +} from "#app/data/abilities/ability"; +import { allAbilities } from "./data-lists"; import { ChargeAnim, CommonAnim, CommonBattleAnim, MoveChargeAnim } from "#app/data/battle-anims"; import type Move from "#app/data/moves/move"; import { diff --git a/src/data/berry.ts b/src/data/berry.ts index 8a58d337aa4..e118b45711c 100644 --- a/src/data/berry.ts +++ b/src/data/berry.ts @@ -9,7 +9,7 @@ import { ReduceBerryUseThresholdAbAttr, applyAbAttrs, applyPostItemLostAbAttrs, -} from "./ability"; +} from "./abilities/ability"; import i18next from "i18next"; import { BattlerTagType } from "#enums/battler-tag-type"; import { BerryType } from "#enums/berry-type"; diff --git a/src/data/data-lists.ts b/src/data/data-lists.ts new file mode 100644 index 00000000000..d3c31abc851 --- /dev/null +++ b/src/data/data-lists.ts @@ -0,0 +1,3 @@ +import type { Ability } from "./abilities/ability-class"; + +export const allAbilities: Ability[] = []; diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 962a13bb840..b68dd0d3e1d 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -34,7 +34,6 @@ import { WeatherType } from "#enums/weather-type"; import type { ArenaTrapTag } from "../arena-tag"; import { ArenaTagSide, WeakenMoveTypeTag } from "../arena-tag"; import { - allAbilities, AllyMoveCategoryPowerBoostAbAttr, applyAbAttrs, applyPostAttackAbAttrs, @@ -65,7 +64,8 @@ import { UserFieldMoveTypePowerBoostAbAttr, VariableMovePowerAbAttr, WonderSkinAbAttr, -} from "../ability"; +} from "../abilities/ability"; +import { allAbilities } from "../data-lists"; import { AttackTypeBoosterModifier, BerryModifier, diff --git a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts index eca99fc0c13..5edc2e6bbc5 100644 --- a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts +++ b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts @@ -38,7 +38,7 @@ import i18next from "i18next"; import type { OptionSelectConfig } from "#app/ui/abstact-option-select-ui-handler"; import type { PlayerPokemon } from "#app/field/pokemon"; import { PokemonMove } from "#app/field/pokemon"; -import { Ability } from "#app/data/ability"; +import { Ability } from "#app/data/abilities/ability-class"; import { BerryModifier } from "#app/modifier/modifier"; import { BerryType } from "#enums/berry-type"; import { BattlerIndex } from "#app/battle"; diff --git a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts index 6118fe3d0de..f0b7a05a21c 100644 --- a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts +++ b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts @@ -46,7 +46,7 @@ import { Abilities } from "#enums/abilities"; import { BattlerTagType } from "#enums/battler-tag-type"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { Stat } from "#enums/stat"; -import { Ability } from "#app/data/ability"; +import { Ability } from "#app/data/abilities/ability-class"; import { FIRE_RESISTANT_ABILITIES } from "#app/data/mystery-encounters/requirements/requirement-groups"; /** the i18n namespace for the encounter */ diff --git a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts index aca04ad50ed..41bf87351f4 100644 --- a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts @@ -24,7 +24,7 @@ import { PokemonType } from "#enums/pokemon-type"; import { BerryType } from "#enums/berry-type"; import { Stat } from "#enums/stat"; import { SpeciesFormChangeAbilityTrigger } from "#app/data/pokemon-forms"; -import { applyPostBattleInitAbAttrs, PostBattleInitAbAttr } from "#app/data/ability"; +import { applyPostBattleInitAbAttrs, PostBattleInitAbAttr } from "#app/data/abilities/ability"; import { showEncounterDialogue, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; import { PartyHealPhase } from "#app/phases/party-heal-phase"; diff --git a/src/data/mystery-encounters/encounters/training-session-encounter.ts b/src/data/mystery-encounters/encounters/training-session-encounter.ts index cc56f3efa42..e8711be172d 100644 --- a/src/data/mystery-encounters/encounters/training-session-encounter.ts +++ b/src/data/mystery-encounters/encounters/training-session-encounter.ts @@ -1,5 +1,5 @@ -import type { Ability } from "#app/data/ability"; -import { allAbilities } from "#app/data/ability"; +import type { Ability } from "#app/data/abilities/ability-class"; +import { allAbilities } from "#app/data/data-lists"; import type { EnemyPartyConfig } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { initBattleWithEnemyConfig, diff --git a/src/data/mystery-encounters/mystery-encounter-requirements.ts b/src/data/mystery-encounters/mystery-encounter-requirements.ts index f9aedf2c1a7..948e3e96ef0 100644 --- a/src/data/mystery-encounters/mystery-encounter-requirements.ts +++ b/src/data/mystery-encounters/mystery-encounter-requirements.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import { allAbilities } from "#app/data/ability"; +import { allAbilities } from "../data-lists"; import { EvolutionItem, pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { Nature } from "#enums/nature"; import { FormChangeItem, pokemonFormChanges, SpeciesFormChangeItemTrigger } from "#app/data/pokemon-forms"; diff --git a/src/data/weather.ts b/src/data/weather.ts index a8dd0a66492..31b460bbddb 100644 --- a/src/data/weather.ts +++ b/src/data/weather.ts @@ -6,7 +6,7 @@ import { PokemonType } from "#enums/pokemon-type"; import type Move from "./moves/move"; import { AttackMove } from "./moves/move"; import { randSeedInt } from "#app/utils"; -import { SuppressWeatherEffectAbAttr } from "./ability"; +import { SuppressWeatherEffectAbAttr } from "./abilities/ability"; import { TerrainType, getTerrainName } from "./terrain"; import i18next from "i18next"; import { globalScene } from "#app/global-scene"; diff --git a/src/field/arena.ts b/src/field/arena.ts index adc3123ce81..1bc465c7dbb 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -26,7 +26,7 @@ import { PostTerrainChangeAbAttr, PostWeatherChangeAbAttr, TerrainEventTypeChangeAbAttr, -} from "#app/data/ability"; +} from "#app/data/abilities/ability"; import type Pokemon from "#app/field/pokemon"; import Overrides from "#app/overrides"; import { TagAddedEvent, TagRemovedEvent, TerrainChangedEvent, WeatherChangedEvent } from "#app/events/arena"; diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index b59b7ba01fe..22ede4260c3 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -136,7 +136,8 @@ import { WeakenMoveScreenTag, } from "#app/data/arena-tag"; import type { SuppressAbilitiesTag } from "#app/data/arena-tag"; -import type { Ability, AbAttr } from "#app/data/ability"; +import type { Ability } from "#app/data/abilities/ability-class"; +import type { AbAttr } from "#app/data/abilities/ab-attrs/ab-attr"; import { StatMultiplierAbAttr, BlockCritAbAttr, @@ -151,7 +152,6 @@ import { StatusEffectImmunityAbAttr, TypeImmunityAbAttr, WeightMultiplierAbAttr, - allAbilities, applyAbAttrs, applyStatMultiplierAbAttrs, applyPreApplyBattlerTagAbAttrs, @@ -188,7 +188,8 @@ import { applyAllyStatMultiplierAbAttrs, AllyStatMultiplierAbAttr, MoveAbilityBypassAbAttr -} from "#app/data/ability"; +} from "#app/data/abilities/ability"; +import { allAbilities } from "#app/data/data-lists"; import type PokemonData from "#app/system/pokemon-data"; import { BattlerIndex } from "#app/battle"; import { Mode } from "#app/ui/ui"; diff --git a/src/loading-scene.ts b/src/loading-scene.ts index b45cf64ff56..4ec2fdf1bb2 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -11,7 +11,7 @@ import { initEggMoves } from "#app/data/balance/egg-moves"; import { initPokemonForms } from "#app/data/pokemon-forms"; import { initSpecies } from "#app/data/pokemon-species"; import { initMoves } from "#app/data/moves/move"; -import { initAbilities } from "#app/data/ability"; +import { initAbilities } from "#app/data/abilities/ability"; import { initAchievements } from "#app/system/achv"; import { initTrainerTypeDialogue } from "#app/data/dialogue"; import { initChallenges } from "#app/data/challenge"; diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 80f14ba22ce..851fa33cedc 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -47,7 +47,7 @@ import { } from "./modifier-type"; import { Color, ShadowColor } from "#enums/color"; import { FRIENDSHIP_GAIN_FROM_RARE_CANDY } from "#app/data/balance/starters"; -import { applyAbAttrs, CommanderAbAttr } from "#app/data/ability"; +import { applyAbAttrs, CommanderAbAttr } from "#app/data/abilities/ability"; import { globalScene } from "#app/global-scene"; export type ModifierPredicate = (modifier: Modifier) => boolean; diff --git a/src/phases/attempt-run-phase.ts b/src/phases/attempt-run-phase.ts index e5691f5fb8e..5c51e5c589d 100644 --- a/src/phases/attempt-run-phase.ts +++ b/src/phases/attempt-run-phase.ts @@ -1,4 +1,9 @@ -import { applyAbAttrs, applyPreLeaveFieldAbAttrs, PreLeaveFieldAbAttr, RunSuccessAbAttr } from "#app/data/ability"; +import { + applyAbAttrs, + applyPreLeaveFieldAbAttrs, + PreLeaveFieldAbAttr, + RunSuccessAbAttr, +} from "#app/data/abilities/ability"; import { Stat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; import type { PlayerPokemon, EnemyPokemon } from "#app/field/pokemon"; diff --git a/src/phases/battle-end-phase.ts b/src/phases/battle-end-phase.ts index 0d831c65b52..275a9017dfa 100644 --- a/src/phases/battle-end-phase.ts +++ b/src/phases/battle-end-phase.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import { applyPostBattleAbAttrs, PostBattleAbAttr } from "#app/data/ability"; +import { applyPostBattleAbAttrs, PostBattleAbAttr } from "#app/data/abilities/ability"; import { LapsingPersistentModifier, LapsingPokemonHeldItemModifier } from "#app/modifier/modifier"; import { BattlePhase } from "./battle-phase"; import { GameOverPhase } from "./game-over-phase"; diff --git a/src/phases/berry-phase.ts b/src/phases/berry-phase.ts index e5614739903..ae593f66f34 100644 --- a/src/phases/berry-phase.ts +++ b/src/phases/berry-phase.ts @@ -1,4 +1,4 @@ -import { applyAbAttrs, PreventBerryUseAbAttr, HealFromBerryUseAbAttr } from "#app/data/ability"; +import { applyAbAttrs, PreventBerryUseAbAttr, HealFromBerryUseAbAttr } from "#app/data/abilities/ability"; import { CommonAnim } from "#app/data/battle-anims"; import { BerryUsedEvent } from "#app/events/battle-scene"; import { getPokemonNameWithAffix } from "#app/messages"; diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index 15f3d102e41..67236c1c041 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -1,7 +1,7 @@ import { BattlerIndex, BattleType } from "#app/battle"; import { globalScene } from "#app/global-scene"; import { PLAYER_PARTY_MAX_SIZE } from "#app/constants"; -import { applyAbAttrs, SyncEncounterNatureAbAttr, applyPreSummonAbAttrs, PreSummonAbAttr } from "#app/data/ability"; +import { applyAbAttrs, SyncEncounterNatureAbAttr, applyPreSummonAbAttrs, PreSummonAbAttr } from "#app/data/abilities/ability"; import { initEncounterAnims, loadEncounterAnimAssets } from "#app/data/battle-anims"; import { getCharVariantFromDialogue } from "#app/data/dialogue"; import { getEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index 7e1ae4ec07b..01a556115a6 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -8,7 +8,7 @@ import { PostFaintAbAttr, PostKnockOutAbAttr, PostVictoryAbAttr, -} from "#app/data/ability"; +} from "#app/data/abilities/ability"; import type { DestinyBondTag, GrudgeTag } from "#app/data/battler-tags"; import { BattlerTagLapseType } from "#app/data/battler-tags"; import { battleSpecDialogue } from "#app/data/dialogue"; diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index acc7ac0f63a..af9f685eebe 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -14,7 +14,7 @@ import { PostDefendAbAttr, ReflectStatusMoveAbAttr, TypeImmunityAbAttr, -} from "#app/data/ability"; +} from "#app/data/abilities/ability"; import { ArenaTagSide, ConditionalProtectTag } from "#app/data/arena-tag"; import { MoveAnim } from "#app/data/battle-anims"; import { diff --git a/src/phases/move-end-phase.ts b/src/phases/move-end-phase.ts index 176abee5e98..037596dca59 100644 --- a/src/phases/move-end-phase.ts +++ b/src/phases/move-end-phase.ts @@ -2,7 +2,7 @@ import { globalScene } from "#app/global-scene"; import { BattlerTagLapseType } from "#app/data/battler-tags"; import { PokemonPhase } from "./pokemon-phase"; import type { BattlerIndex } from "#app/battle"; -import { applyPostSummonAbAttrs, PostSummonRemoveEffectAbAttr } from "#app/data/ability"; +import { applyPostSummonAbAttrs, PostSummonRemoveEffectAbAttr } from "#app/data/abilities/ability"; import type Pokemon from "#app/field/pokemon"; export class MoveEndPhase extends PokemonPhase { diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index 478229dcae8..dc394b8a134 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -10,7 +10,7 @@ import { PostMoveUsedAbAttr, RedirectMoveAbAttr, ReduceStatusEffectDurationAbAttr, -} from "#app/data/ability"; +} from "#app/data/abilities/ability"; import type { DelayedAttackTag } from "#app/data/arena-tag"; import { CommonAnim } from "#app/data/battle-anims"; import { BattlerTagLapseType, CenterOfAttentionTag } from "#app/data/battler-tags"; diff --git a/src/phases/new-biome-encounter-phase.ts b/src/phases/new-biome-encounter-phase.ts index 3449a562c4a..6a7afcb8da8 100644 --- a/src/phases/new-biome-encounter-phase.ts +++ b/src/phases/new-biome-encounter-phase.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import { applyAbAttrs, PostBiomeChangeAbAttr } from "#app/data/ability"; +import { applyAbAttrs, PostBiomeChangeAbAttr } from "#app/data/abilities/ability"; import { getRandomWeatherType } from "#app/data/weather"; import { NextEncounterPhase } from "./next-encounter-phase"; diff --git a/src/phases/obtain-status-effect-phase.ts b/src/phases/obtain-status-effect-phase.ts index cba9399b996..10ae195b02f 100644 --- a/src/phases/obtain-status-effect-phase.ts +++ b/src/phases/obtain-status-effect-phase.ts @@ -7,7 +7,7 @@ import type Pokemon from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { PokemonPhase } from "./pokemon-phase"; import { SpeciesFormChangeStatusEffectTrigger } from "#app/data/pokemon-forms"; -import { applyPostSetStatusAbAttrs, PostSetStatusAbAttr } from "#app/data/ability"; +import { applyPostSetStatusAbAttrs, PostSetStatusAbAttr } from "#app/data/abilities/ability"; import { isNullOrUndefined } from "#app/utils"; export class ObtainStatusEffectPhase extends PokemonPhase { diff --git a/src/phases/post-summon-phase.ts b/src/phases/post-summon-phase.ts index 45b0a0f65ce..446d45bb2fa 100644 --- a/src/phases/post-summon-phase.ts +++ b/src/phases/post-summon-phase.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import { applyAbAttrs, applyPostSummonAbAttrs, CommanderAbAttr, PostSummonAbAttr } from "#app/data/ability"; +import { applyAbAttrs, applyPostSummonAbAttrs, CommanderAbAttr, PostSummonAbAttr } from "#app/data/abilities/ability"; import { ArenaTrapTag } from "#app/data/arena-tag"; import { StatusEffect } from "#app/enums/status-effect"; import { PokemonPhase } from "./pokemon-phase"; diff --git a/src/phases/post-turn-status-effect-phase.ts b/src/phases/post-turn-status-effect-phase.ts index 619ef22d01e..af9a9ac1c29 100644 --- a/src/phases/post-turn-status-effect-phase.ts +++ b/src/phases/post-turn-status-effect-phase.ts @@ -7,7 +7,7 @@ import { BlockStatusDamageAbAttr, PostDamageAbAttr, ReduceBurnDamageAbAttr, -} from "#app/data/ability"; +} from "#app/data/abilities/ability"; import { CommonBattleAnim, CommonAnim } from "#app/data/battle-anims"; import { getStatusEffectActivationText } from "#app/data/status-effect"; import { BattleSpec } from "#app/enums/battle-spec"; diff --git a/src/phases/quiet-form-change-phase.ts b/src/phases/quiet-form-change-phase.ts index 1512609abf9..f476919a628 100644 --- a/src/phases/quiet-form-change-phase.ts +++ b/src/phases/quiet-form-change-phase.ts @@ -16,7 +16,7 @@ import { ClearTerrainAbAttr, ClearWeatherAbAttr, PostTeraFormChangeStatChangeAbAttr, -} from "#app/data/ability"; +} from "#app/data/abilities/ability"; export class QuietFormChangePhase extends BattlePhase { protected pokemon: Pokemon; diff --git a/src/phases/stat-stage-change-phase.ts b/src/phases/stat-stage-change-phase.ts index 4c82661a3bb..f52e4fb06a0 100644 --- a/src/phases/stat-stage-change-phase.ts +++ b/src/phases/stat-stage-change-phase.ts @@ -10,7 +10,7 @@ import { ReflectStatStageChangeAbAttr, StatStageChangeCopyAbAttr, StatStageChangeMultiplierAbAttr, -} from "#app/data/ability"; +} from "#app/data/abilities/ability"; import { ArenaTagSide, MistTag } from "#app/data/arena-tag"; import type { ArenaTag } from "#app/data/arena-tag"; import type Pokemon from "#app/field/pokemon"; diff --git a/src/phases/summon-phase.ts b/src/phases/summon-phase.ts index 7379d509e55..60d45f19c0c 100644 --- a/src/phases/summon-phase.ts +++ b/src/phases/summon-phase.ts @@ -13,7 +13,7 @@ import { PostSummonPhase } from "./post-summon-phase"; import { GameOverPhase } from "./game-over-phase"; import { ShinySparklePhase } from "./shiny-sparkle-phase"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; -import { applyPreSummonAbAttrs, PreSummonAbAttr } from "#app/data/ability"; +import { applyPreSummonAbAttrs, PreSummonAbAttr } from "#app/data/abilities/ability"; import { globalScene } from "#app/global-scene"; export class SummonPhase extends PartyMemberPokemonPhase { diff --git a/src/phases/switch-summon-phase.ts b/src/phases/switch-summon-phase.ts index d63cdb90f25..f8728f3f9b9 100644 --- a/src/phases/switch-summon-phase.ts +++ b/src/phases/switch-summon-phase.ts @@ -5,7 +5,7 @@ import { PostDamageForceSwitchAbAttr, PreSummonAbAttr, PreSwitchOutAbAttr, -} from "#app/data/ability"; +} from "#app/data/abilities/ability"; import { allMoves, ForceSwitchOutAttr } from "#app/data/moves/move"; import { getPokeballTintColor } from "#app/data/pokeball"; import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms"; diff --git a/src/phases/turn-end-phase.ts b/src/phases/turn-end-phase.ts index 9b84ea05e58..fe16a4a864e 100644 --- a/src/phases/turn-end-phase.ts +++ b/src/phases/turn-end-phase.ts @@ -1,4 +1,4 @@ -import { applyPostTurnAbAttrs, PostTurnAbAttr } from "#app/data/ability"; +import { applyPostTurnAbAttrs, PostTurnAbAttr } from "#app/data/abilities/ability"; import { BattlerTagLapseType } from "#app/data/battler-tags"; import { TerrainType } from "#app/data/terrain"; import { WeatherType } from "#app/enums/weather-type"; diff --git a/src/phases/turn-start-phase.ts b/src/phases/turn-start-phase.ts index d5b4160fe1b..ba6ace2d188 100644 --- a/src/phases/turn-start-phase.ts +++ b/src/phases/turn-start-phase.ts @@ -1,4 +1,4 @@ -import { applyAbAttrs, BypassSpeedChanceAbAttr, PreventBypassSpeedChanceAbAttr } from "#app/data/ability"; +import { applyAbAttrs, BypassSpeedChanceAbAttr, PreventBypassSpeedChanceAbAttr } from "#app/data/abilities/ability"; import { allMoves, MoveHeaderAttr } from "#app/data/moves/move"; import { Abilities } from "#app/enums/abilities"; import { Stat } from "#app/enums/stat"; diff --git a/src/phases/weather-effect-phase.ts b/src/phases/weather-effect-phase.ts index 5284c9fba85..b83eab43b65 100644 --- a/src/phases/weather-effect-phase.ts +++ b/src/phases/weather-effect-phase.ts @@ -7,7 +7,7 @@ import { BlockNonDirectDamageAbAttr, applyPostWeatherLapseAbAttrs, PostWeatherLapseAbAttr, -} from "#app/data/ability"; +} from "#app/data/abilities/ability"; import { CommonAnim } from "#app/data/battle-anims"; import type { Weather } from "#app/data/weather"; import { getWeatherDamageMessage, getWeatherLapseMessage } from "#app/data/weather"; diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index 407ebfcd843..3f8959c6219 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -5,7 +5,7 @@ import { getVariantTint, getVariantIcon } from "#app/sprites/variant"; import { argbFromRgba } from "@material/material-color-utilities"; import i18next from "i18next"; import { starterColors } from "#app/battle-scene"; -import { allAbilities } from "#app/data/ability"; +import { allAbilities } from "#app/data/data-lists"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { GrowthRate, getGrowthRateColor } from "#app/data/exp"; import { Gender, getGenderColor, getGenderSymbol } from "#app/data/gender"; diff --git a/src/ui/pokedex-scan-ui-handler.ts b/src/ui/pokedex-scan-ui-handler.ts index b34246b97d1..171040f6f12 100644 --- a/src/ui/pokedex-scan-ui-handler.ts +++ b/src/ui/pokedex-scan-ui-handler.ts @@ -6,7 +6,7 @@ import type { OptionSelectItem } from "./abstact-option-select-ui-handler"; import { isNullOrUndefined } from "#app/utils"; import { Mode } from "./ui"; import { FilterTextRow } from "./filter-text"; -import { allAbilities } from "#app/data/ability"; +import { allAbilities } from "#app/data/data-lists"; import { allMoves } from "#app/data/moves/move"; import { allSpecies } from "#app/data/pokemon-species"; import i18next from "i18next"; diff --git a/src/ui/pokedex-ui-handler.ts b/src/ui/pokedex-ui-handler.ts index 59b06d476a2..5fd3ca3e379 100644 --- a/src/ui/pokedex-ui-handler.ts +++ b/src/ui/pokedex-ui-handler.ts @@ -36,7 +36,7 @@ import type { Nature } from "#enums/nature"; import { addWindow } from "./ui-theme"; import type { OptionSelectConfig } from "./abstact-option-select-ui-handler"; import { FilterText, FilterTextRow } from "./filter-text"; -import { allAbilities } from "#app/data/ability"; +import { allAbilities } from "#app/data/data-lists"; import { starterPassiveAbilities } from "#app/data/balance/passives"; import { allMoves } from "#app/data/moves/move"; import { speciesTmMoves } from "#app/data/balance/tms"; diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 3e2940f45b9..9b0009d666e 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -8,8 +8,8 @@ import i18next from "i18next"; import type BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; import { starterColors } from "#app/battle-scene"; import { globalScene } from "#app/global-scene"; -import type { Ability } from "#app/data/ability"; -import { allAbilities } from "#app/data/ability"; +import type { Ability } from "#app/data/abilities/ability-class"; +import { allAbilities } from "#app/data/data-lists"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { GrowthRate, getGrowthRateColor } from "#app/data/exp"; import { Gender, getGenderColor, getGenderSymbol } from "#app/data/gender"; diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index 04bcf71d7ae..5ff4a02793d 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -31,7 +31,7 @@ import { loggedInUser } from "#app/account"; import type { Variant } from "#app/sprites/variant"; import { getVariantTint } from "#app/sprites/variant"; import { Button } from "#enums/buttons"; -import type { Ability } from "#app/data/ability"; +import type { Ability } from "#app/data/abilities/ability-class"; import i18next from "i18next"; import { modifierSortFunc } from "#app/modifier/modifier"; import { PlayerGender } from "#enums/player-gender"; diff --git a/test/abilities/arena_trap.test.ts b/test/abilities/arena_trap.test.ts index e0d093a91aa..3a5bad9c34b 100644 --- a/test/abilities/arena_trap.test.ts +++ b/test/abilities/arena_trap.test.ts @@ -1,4 +1,4 @@ -import { allAbilities } from "#app/data/ability"; +import { allAbilities } from "#app/data/data-lists"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/abilities/flower_gift.test.ts b/test/abilities/flower_gift.test.ts index 5da796539e5..8c7b32e7e33 100644 --- a/test/abilities/flower_gift.test.ts +++ b/test/abilities/flower_gift.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allAbilities } from "#app/data/ability"; +import { allAbilities } from "#app/data/data-lists"; import { Abilities } from "#app/enums/abilities"; import { Stat } from "#app/enums/stat"; import { WeatherType } from "#app/enums/weather-type"; diff --git a/test/abilities/flower_veil.test.ts b/test/abilities/flower_veil.test.ts index c26a952acff..68242be3886 100644 --- a/test/abilities/flower_veil.test.ts +++ b/test/abilities/flower_veil.test.ts @@ -9,7 +9,7 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { allMoves } from "#app/data/moves/move"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { allAbilities } from "#app/data/ability"; +import { allAbilities } from "#app/data/data-lists"; describe("Abilities - Flower Veil", () => { let phaserGame: Phaser.Game; diff --git a/test/abilities/forecast.test.ts b/test/abilities/forecast.test.ts index a25af32537d..675b9a8b59c 100644 --- a/test/abilities/forecast.test.ts +++ b/test/abilities/forecast.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allAbilities } from "#app/data/ability"; +import { allAbilities } from "#app/data/data-lists"; import { Abilities } from "#app/enums/abilities"; import { WeatherType } from "#app/enums/weather-type"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; diff --git a/test/abilities/friend_guard.test.ts b/test/abilities/friend_guard.test.ts index 30175fe37e0..474c89adaf1 100644 --- a/test/abilities/friend_guard.test.ts +++ b/test/abilities/friend_guard.test.ts @@ -5,7 +5,7 @@ import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { BattlerIndex } from "#app/battle"; -import { allAbilities } from "#app/data/ability"; +import { allAbilities } from "#app/data/data-lists"; import { allMoves } from "#app/data/moves/move"; import { MoveCategory } from "#enums/MoveCategory"; diff --git a/test/abilities/good_as_gold.test.ts b/test/abilities/good_as_gold.test.ts index 7cc543c4a0d..4c4741a331f 100644 --- a/test/abilities/good_as_gold.test.ts +++ b/test/abilities/good_as_gold.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allAbilities } from "#app/data/ability"; +import { allAbilities } from "#app/data/data-lists"; import { ArenaTagSide } from "#app/data/arena-tag"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import { BattlerTagType } from "#app/enums/battler-tag-type"; diff --git a/test/abilities/magic_bounce.test.ts b/test/abilities/magic_bounce.test.ts index f9a076776aa..7886ac5fd5c 100644 --- a/test/abilities/magic_bounce.test.ts +++ b/test/abilities/magic_bounce.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allAbilities } from "#app/data/ability"; +import { allAbilities } from "#app/data/data-lists"; import { ArenaTagSide } from "#app/data/arena-tag"; import { allMoves } from "#app/data/moves/move"; import { ArenaTagType } from "#app/enums/arena-tag-type"; diff --git a/test/abilities/neutralizing_gas.test.ts b/test/abilities/neutralizing_gas.test.ts index a10a246d855..56a663db403 100644 --- a/test/abilities/neutralizing_gas.test.ts +++ b/test/abilities/neutralizing_gas.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import type { CommandPhase } from "#app/phases/command-phase"; import { Command } from "#app/ui/command-ui-handler"; -import { PostSummonWeatherChangeAbAttr } from "#app/data/ability"; +import { PostSummonWeatherChangeAbAttr } from "#app/data/abilities/ability"; import { Abilities } from "#enums/abilities"; import { ArenaTagType } from "#enums/arena-tag-type"; import { Moves } from "#enums/moves"; diff --git a/test/abilities/quick_draw.test.ts b/test/abilities/quick_draw.test.ts index 9969dc2aa75..1277fd5d3cb 100644 --- a/test/abilities/quick_draw.test.ts +++ b/test/abilities/quick_draw.test.ts @@ -1,4 +1,5 @@ -import { allAbilities, BypassSpeedChanceAbAttr } from "#app/data/ability"; +import { BypassSpeedChanceAbAttr } from "#app/data/abilities/ability"; +import { allAbilities } from "#app/data/data-lists"; import { FaintPhase } from "#app/phases/faint-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/test/abilities/sand_veil.test.ts b/test/abilities/sand_veil.test.ts index 5e0a3f567dd..c7b12a11c0e 100644 --- a/test/abilities/sand_veil.test.ts +++ b/test/abilities/sand_veil.test.ts @@ -1,4 +1,5 @@ -import { StatMultiplierAbAttr, allAbilities } from "#app/data/ability"; +import { StatMultiplierAbAttr } from "#app/data/abilities/ability"; +import { allAbilities } from "#app/data/data-lists"; import { CommandPhase } from "#app/phases/command-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; diff --git a/test/abilities/shield_dust.test.ts b/test/abilities/shield_dust.test.ts index 8e02b5a7713..257ebe885df 100644 --- a/test/abilities/shield_dust.test.ts +++ b/test/abilities/shield_dust.test.ts @@ -4,7 +4,7 @@ import { applyPreDefendAbAttrs, IgnoreMoveEffectsAbAttr, MoveEffectChanceMultiplierAbAttr, -} from "#app/data/ability"; +} from "#app/data/abilities/ability"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { NumberHolder } from "#app/utils"; import { Abilities } from "#enums/abilities"; diff --git a/test/abilities/steely_spirit.test.ts b/test/abilities/steely_spirit.test.ts index b180ff8919e..eb5e7aac601 100644 --- a/test/abilities/steely_spirit.test.ts +++ b/test/abilities/steely_spirit.test.ts @@ -1,4 +1,4 @@ -import { allAbilities } from "#app/data/ability"; +import { allAbilities } from "#app/data/data-lists"; import { allMoves } from "#app/data/moves/move"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/test/abilities/unburden.test.ts b/test/abilities/unburden.test.ts index 8f18604011c..769e078faf8 100644 --- a/test/abilities/unburden.test.ts +++ b/test/abilities/unburden.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { PostItemLostAbAttr } from "#app/data/ability"; +import { PostItemLostAbAttr } from "#app/data/abilities/ability"; import { allMoves, StealHeldItemChanceAttr } from "#app/data/moves/move"; import type Pokemon from "#app/field/pokemon"; import type { ContactHeldItemTransferChanceModifier } from "#app/modifier/modifier"; diff --git a/test/battle/ability_swap.test.ts b/test/battle/ability_swap.test.ts index 72991dba6b0..215321f26c2 100644 --- a/test/battle/ability_swap.test.ts +++ b/test/battle/ability_swap.test.ts @@ -1,4 +1,4 @@ -import { allAbilities } from "#app/data/ability"; +import { allAbilities } from "#app/data/data-lists"; import { Stat } from "#app/enums/stat"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/test/moves/flame_burst.test.ts b/test/moves/flame_burst.test.ts index b6a425e7bb5..a39c27d37b3 100644 --- a/test/moves/flame_burst.test.ts +++ b/test/moves/flame_burst.test.ts @@ -1,4 +1,4 @@ -import { allAbilities } from "#app/data/ability"; +import { allAbilities } from "#app/data/data-lists"; import { Abilities } from "#app/enums/abilities"; import type Pokemon from "#app/field/pokemon"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; diff --git a/test/moves/pledge_moves.test.ts b/test/moves/pledge_moves.test.ts index c866d15357c..ee9e0b8b154 100644 --- a/test/moves/pledge_moves.test.ts +++ b/test/moves/pledge_moves.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allAbilities } from "#app/data/ability"; +import { allAbilities } from "#app/data/data-lists"; import { ArenaTagSide } from "#app/data/arena-tag"; import { allMoves, FlinchAttr } from "#app/data/moves/move"; import { PokemonType } from "#enums/pokemon-type"; diff --git a/test/moves/safeguard.test.ts b/test/moves/safeguard.test.ts index 2235b59e1af..675c74f28d0 100644 --- a/test/moves/safeguard.test.ts +++ b/test/moves/safeguard.test.ts @@ -1,5 +1,6 @@ import { BattlerIndex } from "#app/battle"; -import { allAbilities, PostDefendContactApplyStatusEffectAbAttr } from "#app/data/ability"; +import { PostDefendContactApplyStatusEffectAbAttr } from "#app/data/abilities/ability"; +import { allAbilities } from "#app/data/data-lists"; import { Abilities } from "#app/enums/abilities"; import { StatusEffect } from "#app/enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; diff --git a/test/moves/secret_power.test.ts b/test/moves/secret_power.test.ts index 37f1664251b..d769b112b70 100644 --- a/test/moves/secret_power.test.ts +++ b/test/moves/secret_power.test.ts @@ -11,7 +11,8 @@ import { StatusEffect } from "#enums/status-effect"; import { BattlerIndex } from "#app/battle"; import { ArenaTagType } from "#enums/arena-tag-type"; import { ArenaTagSide } from "#app/data/arena-tag"; -import { allAbilities, MoveEffectChanceMultiplierAbAttr } from "#app/data/ability"; +import { MoveEffectChanceMultiplierAbAttr } from "#app/data/abilities/ability"; +import { allAbilities } from "#app/data/data-lists"; describe("Moves - Secret Power", () => { let phaserGame: Phaser.Game; diff --git a/test/testUtils/testFileInitialization.ts b/test/testUtils/testFileInitialization.ts index 2b41f3aa29a..cb2cd57044d 100644 --- a/test/testUtils/testFileInitialization.ts +++ b/test/testUtils/testFileInitialization.ts @@ -1,6 +1,6 @@ import { SESSION_ID_COOKIE_NAME } from "#app/constants"; import { initLoggedInUser } from "#app/account"; -import { initAbilities } from "#app/data/ability"; +import { initAbilities } from "#app/data/abilities/ability"; import { initBiomes } from "#app/data/balance/biomes"; import { initEggMoves } from "#app/data/balance/egg-moves"; import { initPokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; From 18c4dddcf06d51ce9119c1189aef1846ce6c06ee Mon Sep 17 00:00:00 2001 From: Stephen Kelman <64545785+stephenrzkelman@users.noreply.github.com> Date: Tue, 15 Apr 2025 07:19:19 -0700 Subject: [PATCH 027/262] [Bug] Fixing Tera Starstorm for first turn of terastallization (#5658) * Updating tera starstorm targeting condition so that it is a spread move on the turn that terastallization happens * added new unit tests to verify behavior of tera starstorm under non-tera conditions as well as on terastallization turns --- src/data/moves/move.ts | 2 +- test/moves/tera_starstorm.test.ts | 34 ++++++++++++++++++++++++++++ test/testUtils/helpers/moveHelper.ts | 27 ++++++++++++++++++++++ 3 files changed, 62 insertions(+), 1 deletion(-) diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index b68dd0d3e1d..9546a6a40e5 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -11205,7 +11205,7 @@ export function initMoves() { new AttackMove(Moves.TERA_STARSTORM, PokemonType.NORMAL, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 9) .attr(TeraMoveCategoryAttr) .attr(TeraStarstormTypeAttr) - .attr(VariableTargetAttr, (user, target, move) => user.hasSpecies(Species.TERAPAGOS) && user.isTerastallized ? MoveTarget.ALL_NEAR_ENEMIES : MoveTarget.NEAR_OTHER) + .attr(VariableTargetAttr, (user, target, move) => user.hasSpecies(Species.TERAPAGOS) && (user.isTerastallized || globalScene.currentBattle.preTurnCommands[user.getFieldIndex()]?.command === Command.TERA) ? MoveTarget.ALL_NEAR_ENEMIES : MoveTarget.NEAR_OTHER) .partial(), /** Does not ignore abilities that affect stats, relevant in determining the move's category {@see TeraMoveCategoryAttr} */ new AttackMove(Moves.FICKLE_BEAM, PokemonType.DRAGON, MoveCategory.SPECIAL, 80, 100, 5, 30, 0, 9) .attr(PreMoveMessageAttr, doublePowerChanceMessageFunc) diff --git a/test/moves/tera_starstorm.test.ts b/test/moves/tera_starstorm.test.ts index 19fe58f4057..9f97b2a51aa 100644 --- a/test/moves/tera_starstorm.test.ts +++ b/test/moves/tera_starstorm.test.ts @@ -69,6 +69,40 @@ describe("Moves - Tera Starstorm", () => { expect(enemyField.every(pokemon => pokemon.isFullHp())).toBe(false); }); + it("targets both opponents in a double battle when used by Terapagos immediately after terastallizing", async () => { + await game.classicMode.startBattle([Species.TERAPAGOS]); + + const terapagos = game.scene.getPlayerParty()[0]; + terapagos.isTerastallized = false; + + game.move.selectWithTera(Moves.TERA_STARSTORM, 0); + + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); + + const enemyField = game.scene.getEnemyField(); + + // Terapagos in Stellar Form should hit both targets + await game.phaseInterceptor.to("MoveEndPhase"); + expect(enemyField.some(pokemon => pokemon.isFullHp())).toBe(false); + }); + + it("targets only one opponent in a double battle when used by Terapagos without terastallizing", async () => { + await game.classicMode.startBattle([Species.TERAPAGOS]); + + const terapagos = game.scene.getPlayerParty()[0]; + terapagos.isTerastallized = false; + + game.move.select(Moves.TERA_STARSTORM, 0, BattlerIndex.ENEMY); + + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); + + const enemyField = game.scene.getEnemyField(); + + // Terapagos in Stellar Form should hit both targets + await game.phaseInterceptor.to("MoveEndPhase"); + expect(enemyField.some(pokemon => pokemon.isFullHp())).toBe(true); + }); + it("applies the effects when Terapagos in Stellar Form is fused with another Pokemon", async () => { await game.classicMode.startBattle([Species.TERAPAGOS, Species.CHARMANDER, Species.MAGIKARP]); diff --git a/test/testUtils/helpers/moveHelper.ts b/test/testUtils/helpers/moveHelper.ts index 543f46b2026..a54028ebca0 100644 --- a/test/testUtils/helpers/moveHelper.ts +++ b/test/testUtils/helpers/moveHelper.ts @@ -65,6 +65,33 @@ export class MoveHelper extends GameManagerHelper { } } + /** + * Select the move to be used by the given Pokemon(-index), **which will also terastallize on this turn**. + * Triggers during the next {@linkcode CommandPhase} + * @param move - the move to use + * @param pkmIndex - the pokemon index. Relevant for double-battles only (defaults to 0) + * @param targetIndex - The {@linkcode BattlerIndex} of the Pokemon to target for single-target moves, or `null` if a manual call to `selectTarget()` is required + */ + public selectWithTera(move: Moves, pkmIndex: 0 | 1 = 0, targetIndex?: BattlerIndex | null) { + const movePosition = getMovePosition(this.game.scene, pkmIndex, move); + this.game.scene.getPlayerParty()[pkmIndex].isTerastallized = false; + + this.game.onNextPrompt("CommandPhase", Mode.COMMAND, () => { + this.game.scene.ui.setMode( + Mode.FIGHT, + (this.game.scene.getCurrentPhase() as CommandPhase).getFieldIndex(), + Command.TERA, + ); + }); + this.game.onNextPrompt("CommandPhase", Mode.FIGHT, () => { + (this.game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.TERA, movePosition, false); + }); + + if (targetIndex !== null) { + this.game.selectTarget(movePosition, targetIndex); + } + } + /** * Forces the Paralysis or Freeze status to activate on the next move by temporarily mocking {@linkcode Overrides.STATUS_ACTIVATION_OVERRIDE}, * advancing to the next `MovePhase`, and then resetting the override to `null` From efad0d1324368ca31cb0c799f97dc475bf375330 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Tue, 15 Apr 2025 20:55:29 -0700 Subject: [PATCH 028/262] [GitHub] Use `.nvmrc` for pages workflow (#5666) --- .github/workflows/github-pages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/github-pages.yml b/.github/workflows/github-pages.yml index b7d5fb95c1e..ce7c17e2db9 100644 --- a/.github/workflows/github-pages.yml +++ b/.github/workflows/github-pages.yml @@ -37,7 +37,7 @@ jobs: - name: Setup Node 22.14.1 uses: actions/setup-node@v4 with: - node-version: 22 + node-version-file: "pokerogue_docs/.nvmrc" - name: Checkout repository for Github Pages if: github.event_name == 'push' From ae588ebff907f17e38d2850ddc5bd07d8bce656a Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Wed, 16 Apr 2025 16:05:40 -0500 Subject: [PATCH 029/262] [Bug][Move] Struggle no longer gets STAB (#5643) * Struggle no longer gets STAB * Apply kev's suggestions from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/field/pokemon.ts | 133 ++++++++++++++++++++---------------- test/moves/struggle.test.ts | 65 ++++++++++++++++++ 2 files changed, 139 insertions(+), 59 deletions(-) create mode 100644 test/moves/struggle.test.ts diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 22ede4260c3..cdd48f7d940 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -4151,6 +4151,62 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return baseDamage; } + + /** Determine the STAB multiplier for a move used against this pokemon. + * + * @param source - The attacking {@linkcode Pokemon} + * @param move - The {@linkcode Move} used in the attack + * @param ignoreSourceAbility - If `true`, ignores the attacking Pokemon's ability effects + * @param simulated - If `true`, suppresses changes to game state during the calculation + * + * @returns The STAB multiplier for the move used against this Pokemon + */ + calculateStabMultiplier(source: Pokemon, move: Move, ignoreSourceAbility: boolean, simulated: boolean): number { + // If the move has the Typeless attribute, it doesn't get STAB (e.g. struggle) + if (move.hasAttr(TypelessAttr)) { + return 1; + } + const sourceTypes = source.getTypes(); + const sourceTeraType = source.getTeraType(); + const moveType = source.getMoveType(move); + const matchesSourceType = sourceTypes.includes(source.getMoveType(move)); + const stabMultiplier = new NumberHolder(1); + if (matchesSourceType && moveType !== PokemonType.STELLAR) { + stabMultiplier.value += 0.5; + } + + applyMoveAttrs( + CombinedPledgeStabBoostAttr, + source, + this, + move, + stabMultiplier, + ); + + if (!ignoreSourceAbility) { + applyAbAttrs(StabBoostAbAttr, source, null, simulated, stabMultiplier); + } + + if ( + source.isTerastallized && + sourceTeraType === moveType && + moveType !== PokemonType.STELLAR + ) { + stabMultiplier.value += 0.5; + } + + if ( + source.isTerastallized && + source.getTeraType() === PokemonType.STELLAR && + (!source.stellarTypesBoosted.includes(moveType) || + source.hasSpecies(Species.TERAPAGOS)) + ) { + stabMultiplier.value += matchesSourceType ? 0.5 : 0.2; + } + + return Math.min(stabMultiplier.value, 2.25); + } + /** * Calculates the damage of an attack made by another Pokemon against this Pokemon * @param source {@linkcode Pokemon} the attacking Pokemon @@ -4333,70 +4389,29 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ? 1 : this.randSeedIntRange(85, 100) / 100; - const sourceTypes = source.getTypes(); - const sourceTeraType = source.getTeraType(); - const matchesSourceType = sourceTypes.includes(moveType); + /** A damage multiplier for when the attack is of the attacker's type and/or Tera type. */ - const stabMultiplier = new NumberHolder(1); - if (matchesSourceType && moveType !== PokemonType.STELLAR) { - stabMultiplier.value += 0.5; - } - - if (!ignoreSourceAbility) { - applyAbAttrs(StabBoostAbAttr, source, null, simulated, stabMultiplier); - } - - applyMoveAttrs( - CombinedPledgeStabBoostAttr, - source, - this, - move, - stabMultiplier, - ); - - if ( - source.isTerastallized && - sourceTeraType === moveType && - moveType !== PokemonType.STELLAR - ) { - stabMultiplier.value += 0.5; - } - - if ( - source.isTerastallized && - source.getTeraType() === PokemonType.STELLAR && - (!source.stellarTypesBoosted.includes(moveType) || - source.hasSpecies(Species.TERAPAGOS)) - ) { - if (matchesSourceType) { - stabMultiplier.value += 0.5; - } else { - stabMultiplier.value += 0.2; - } - } - - stabMultiplier.value = Math.min(stabMultiplier.value, 2.25); + const stabMultiplier = this.calculateStabMultiplier(source, move, ignoreSourceAbility, simulated); /** Halves damage if the attacker is using a physical attack while burned */ - const burnMultiplier = new NumberHolder(1); + let burnMultiplier = 1; if ( isPhysical && source.status && - source.status.effect === StatusEffect.BURN + source.status.effect === StatusEffect.BURN && + !move.hasAttr(BypassBurnDamageReductionAttr) ) { - if (!move.hasAttr(BypassBurnDamageReductionAttr)) { - const burnDamageReductionCancelled = new BooleanHolder(false); - if (!ignoreSourceAbility) { - applyAbAttrs( - BypassBurnDamageReductionAbAttr, - source, - burnDamageReductionCancelled, - simulated, - ); - } - if (!burnDamageReductionCancelled.value) { - burnMultiplier.value = 0.5; - } + const burnDamageReductionCancelled = new BooleanHolder(false); + if (!ignoreSourceAbility) { + applyAbAttrs( + BypassBurnDamageReductionAbAttr, + source, + burnDamageReductionCancelled, + simulated, + ); + } + if (!burnDamageReductionCancelled.value) { + burnMultiplier = 0.5; } } @@ -4447,9 +4462,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { glaiveRushMultiplier.value * criticalMultiplier.value * randomMultiplier * - stabMultiplier.value * + stabMultiplier * typeMultiplier * - burnMultiplier.value * + burnMultiplier * screenMultiplier.value * hitsTagMultiplier.value * mistyTerrainMultiplier, diff --git a/test/moves/struggle.test.ts b/test/moves/struggle.test.ts new file mode 100644 index 00000000000..6b566df9d54 --- /dev/null +++ b/test/moves/struggle.test.ts @@ -0,0 +1,65 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Moves - Struggle", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([Moves.SPLASH]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should not have its power boosted by adaptability or stab", async () => { + game.override.moveset([Moves.STRUGGLE]).ability(Abilities.ADAPTABILITY); + await game.classicMode.startBattle([Species.RATTATA]); + + const enemy = game.scene.getEnemyPokemon()!; + game.move.select(Moves.STRUGGLE); + + const stabSpy = vi.spyOn(enemy, "calculateStabMultiplier"); + + await game.phaseInterceptor.to("BerryPhase"); + + expect(stabSpy).toHaveReturnedWith(1); + + stabSpy.mockRestore(); + }); + + it("should ignore type effectiveness", async () => { + game.override.moveset([Moves.STRUGGLE]); + await game.classicMode.startBattle([Species.GASTLY]); + + const enemy = game.scene.getEnemyPokemon()!; + game.move.select(Moves.STRUGGLE); + + const moveEffectivenessSpy = vi.spyOn(enemy, "getMoveEffectiveness"); + + await game.phaseInterceptor.to("BerryPhase"); + + expect(moveEffectivenessSpy).toHaveReturnedWith(1); + + moveEffectivenessSpy.mockRestore(); + }); +}); From 8d311e65cf5dc65d807827a874f140c0f7b33ce4 Mon Sep 17 00:00:00 2001 From: damocleas Date: Wed, 16 Apr 2025 22:31:53 -0400 Subject: [PATCH 030/262] [Bug] [Ability] Fixed wrong Sheer Force interactions and multiplier from ~1.33 -> 1.3 (#5515) * sheer force #, sheer force and burning jealousy test fix, and move chance fixes * removed order up sheer force interaction mention and test - updated comments * remove electro shot from changes --- src/data/abilities/ability.ts | 4 ++-- src/data/moves/move.ts | 24 ++++++++++++------------ test/abilities/sheer_force.test.ts | 2 +- test/moves/burning_jealousy.test.ts | 2 +- test/moves/order_up.test.ts | 19 ------------------- 5 files changed, 16 insertions(+), 35 deletions(-) diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 17a8eddf47f..43a6cd5901b 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -6702,8 +6702,8 @@ export function initAbilities() { .attr(PostDefendStealHeldItemAbAttr, (target, user, move) => move.hasFlag(MoveFlags.MAKES_CONTACT)) .condition(getSheerForceHitDisableAbCondition()), new Ability(Abilities.SHEER_FORCE, 5) - .attr(MovePowerBoostAbAttr, (user, target, move) => move.chance >= 1, 5461 / 4096) - .attr(MoveEffectChanceMultiplierAbAttr, 0), // Should disable life orb, eject button, red card, kee/maranga berry if they get implemented + .attr(MovePowerBoostAbAttr, (user, target, move) => move.chance >= 1, 1.3) + .attr(MoveEffectChanceMultiplierAbAttr, 0), // This attribute does not seem to function - Should disable life orb, eject button, red card, kee/maranga berry if they get implemented new Ability(Abilities.CONTRARY, 5) .attr(StatStageChangeMultiplierAbAttr, -1) .ignorable(), diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 9546a6a40e5..c2dd0ec31ca 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -3466,8 +3466,7 @@ export class CutHpStatStageBoostAttr extends StatStageChangeAttr { /** * Attribute implementing the stat boosting effect of {@link https://bulbapedia.bulbagarden.net/wiki/Order_Up_(move) | Order Up}. * If the user has a Pokemon with {@link https://bulbapedia.bulbagarden.net/wiki/Commander_(Ability) | Commander} in their mouth, - * one of the user's stats are increased by 1 stage, depending on the "commanding" Pokemon's form. This effect does not respect - * effect chance, but Order Up itself may be boosted by Sheer Force. + * one of the user's stats are increased by 1 stage, depending on the "commanding" Pokemon's form. */ export class OrderUpStatBoostAttr extends MoveEffectAttr { constructor() { @@ -9726,7 +9725,7 @@ export function initMoves() { .ignoresProtect() .target(MoveTarget.BOTH_SIDES) .unimplemented(), - new AttackMove(Moves.SMACK_DOWN, PokemonType.ROCK, MoveCategory.PHYSICAL, 50, 100, 15, 100, 0, 5) + new AttackMove(Moves.SMACK_DOWN, PokemonType.ROCK, MoveCategory.PHYSICAL, 50, 100, 15, -1, 0, 5) .attr(FallDownAttr) .attr(AddBattlerTagAttr, BattlerTagType.INTERRUPTED) .attr(RemoveBattlerTagAttr, [ BattlerTagType.FLYING, BattlerTagType.FLOATING, BattlerTagType.TELEKINESIS ]) @@ -9893,7 +9892,7 @@ export function initMoves() { .attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1) .makesContact(false) .target(MoveTarget.ALL_NEAR_OTHERS), - new AttackMove(Moves.FROST_BREATH, PokemonType.ICE, MoveCategory.SPECIAL, 60, 90, 10, 100, 0, 5) + new AttackMove(Moves.FROST_BREATH, PokemonType.ICE, MoveCategory.SPECIAL, 60, 90, 10, -1, 0, 5) .attr(CritOnlyAttr), new AttackMove(Moves.DRAGON_TAIL, PokemonType.DRAGON, MoveCategory.PHYSICAL, 60, 90, 10, -1, -6, 5) .attr(ForceSwitchOutAttr, false, SwitchType.FORCE_SWITCH) @@ -10535,7 +10534,7 @@ export function initMoves() { .attr(AddArenaTagAttr, ArenaTagType.LIGHT_SCREEN, 5, false, true), new AttackMove(Moves.BADDY_BAD, PokemonType.DARK, MoveCategory.SPECIAL, 80, 95, 15, -1, 0, 7) .attr(AddArenaTagAttr, ArenaTagType.REFLECT, 5, false, true), - new AttackMove(Moves.SAPPY_SEED, PokemonType.GRASS, MoveCategory.PHYSICAL, 100, 90, 10, 100, 0, 7) + new AttackMove(Moves.SAPPY_SEED, PokemonType.GRASS, MoveCategory.PHYSICAL, 100, 90, 10, -1, 0, 7) .attr(LeechSeedAttr) .makesContact(false), new AttackMove(Moves.FREEZY_FROST, PokemonType.ICE, MoveCategory.SPECIAL, 100, 90, 10, -1, 0, 7) @@ -10863,7 +10862,7 @@ export function initMoves() { .attr(StatStageChangeAttr, [ Stat.SPD ], 1, true), new AttackMove(Moves.BITTER_MALICE, PokemonType.GHOST, MoveCategory.SPECIAL, 75, 100, 10, 100, 0, 8) .attr(StatStageChangeAttr, [ Stat.ATK ], -1), - new SelfStatusMove(Moves.SHELTER, PokemonType.STEEL, -1, 10, 100, 0, 8) + new SelfStatusMove(Moves.SHELTER, PokemonType.STEEL, -1, 10, -1, 0, 8) .attr(StatStageChangeAttr, [ Stat.DEF ], 2, true), new AttackMove(Moves.TRIPLE_ARROWS, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 90, 100, 10, 30, 0, 8) .makesContact(false) @@ -11018,7 +11017,7 @@ export function initMoves() { .makesContact(false), new AttackMove(Moves.LUMINA_CRASH, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 9) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -2), - new AttackMove(Moves.ORDER_UP, PokemonType.DRAGON, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 9) + new AttackMove(Moves.ORDER_UP, PokemonType.DRAGON, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 9) .attr(OrderUpStatBoostAttr) .makesContact(false), new AttackMove(Moves.JET_PUNCH, PokemonType.WATER, MoveCategory.PHYSICAL, 60, 100, 15, -1, 1, 9) @@ -11072,7 +11071,7 @@ export function initMoves() { .attr(CutHpStatStageBoostAttr, [ Stat.ATK, Stat.SPATK, Stat.SPD ], 2, 2), new AttackMove(Moves.KOWTOW_CLEAVE, PokemonType.DARK, MoveCategory.PHYSICAL, 85, -1, 10, -1, 0, 9) .slicingMove(), - new AttackMove(Moves.FLOWER_TRICK, PokemonType.GRASS, MoveCategory.PHYSICAL, 70, -1, 10, 100, 0, 9) + new AttackMove(Moves.FLOWER_TRICK, PokemonType.GRASS, MoveCategory.PHYSICAL, 70, -1, 10, -1, 0, 9) .attr(CritOnlyAttr) .makesContact(false), new AttackMove(Moves.TORCH_SONG, PokemonType.FIRE, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 9) @@ -11191,7 +11190,7 @@ export function initMoves() { .attr(StatusEffectAttr, StatusEffect.BURN) .target(MoveTarget.ALL_NEAR_ENEMIES) .triageMove(), - new AttackMove(Moves.SYRUP_BOMB, PokemonType.GRASS, MoveCategory.SPECIAL, 60, 85, 10, -1, 0, 9) + new AttackMove(Moves.SYRUP_BOMB, PokemonType.GRASS, MoveCategory.SPECIAL, 60, 85, 10, 100, 0, 9) .attr(AddBattlerTagAttr, BattlerTagType.SYRUP_BOMB, false, false, 3) .ballBombMove(), new AttackMove(Moves.IVY_CUDGEL, PokemonType.GRASS, MoveCategory.PHYSICAL, 100, 100, 10, -1, 0, 9) @@ -11209,7 +11208,8 @@ export function initMoves() { .partial(), /** Does not ignore abilities that affect stats, relevant in determining the move's category {@see TeraMoveCategoryAttr} */ new AttackMove(Moves.FICKLE_BEAM, PokemonType.DRAGON, MoveCategory.SPECIAL, 80, 100, 5, 30, 0, 9) .attr(PreMoveMessageAttr, doublePowerChanceMessageFunc) - .attr(DoublePowerChanceAttr), + .attr(DoublePowerChanceAttr) + .edgeCase(), // Should not interact with Sheer Force new SelfStatusMove(Moves.BURNING_BULWARK, PokemonType.FIRE, -1, 10, -1, 4, 9) .attr(ProtectAttr, BattlerTagType.BURNING_BULWARK) .condition(failIfLastCondition), @@ -11232,7 +11232,7 @@ export function initMoves() { new StatusMove(Moves.DRAGON_CHEER, PokemonType.DRAGON, -1, 15, -1, 0, 9) .attr(AddBattlerTagAttr, BattlerTagType.DRAGON_CHEER, false, true) .target(MoveTarget.NEAR_ALLY), - new AttackMove(Moves.ALLURING_VOICE, PokemonType.FAIRY, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 9) + new AttackMove(Moves.ALLURING_VOICE, PokemonType.FAIRY, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 9) .attr(AddBattlerTagIfBoostedAttr, BattlerTagType.CONFUSED) .soundBased(), new AttackMove(Moves.TEMPER_FLARE, PokemonType.FIRE, MoveCategory.PHYSICAL, 75, 100, 10, -1, 0, 9) @@ -11241,7 +11241,7 @@ export function initMoves() { .attr(MissEffectAttr, crashDamageFunc) .attr(NoEffectAttr, crashDamageFunc) .recklessMove(), - new AttackMove(Moves.PSYCHIC_NOISE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 75, 100, 10, -1, 0, 9) + new AttackMove(Moves.PSYCHIC_NOISE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 75, 100, 10, 100, 0, 9) .soundBased() .attr(AddBattlerTagAttr, BattlerTagType.HEAL_BLOCK, false, false, 2), new AttackMove(Moves.UPPER_HAND, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 65, 100, 15, 100, 3, 9) diff --git a/test/abilities/sheer_force.test.ts b/test/abilities/sheer_force.test.ts index 4a1c20cde5c..fae089958a5 100644 --- a/test/abilities/sheer_force.test.ts +++ b/test/abilities/sheer_force.test.ts @@ -34,7 +34,7 @@ describe("Abilities - Sheer Force", () => { .disableCrits(); }); - const SHEER_FORCE_MULT = 5461 / 4096; + const SHEER_FORCE_MULT = 1.3; it("Sheer Force should boost the power of the move but disable secondary effects", async () => { game.override.moveset([Moves.AIR_SLASH]); diff --git a/test/moves/burning_jealousy.test.ts b/test/moves/burning_jealousy.test.ts index 60387df4226..04966b24206 100644 --- a/test/moves/burning_jealousy.test.ts +++ b/test/moves/burning_jealousy.test.ts @@ -89,7 +89,7 @@ describe("Moves - Burning Jealousy", () => { await game.phaseInterceptor.to("BerryPhase"); expect(allMoves[Moves.BURNING_JEALOUSY].calculateBattlePower).toHaveReturnedWith( - (allMoves[Moves.BURNING_JEALOUSY].power * 5461) / 4096, + allMoves[Moves.BURNING_JEALOUSY].power * 1.3, ); }); }); diff --git a/test/moves/order_up.test.ts b/test/moves/order_up.test.ts index 516f7f625a3..f25114c12de 100644 --- a/test/moves/order_up.test.ts +++ b/test/moves/order_up.test.ts @@ -65,23 +65,4 @@ describe("Moves - Order Up", () => { affectedStats.forEach(st => expect(dondozo.getStatStage(st)).toBe(st === stat ? 3 : 2)); }, ); - - it("should be boosted by Sheer Force while still applying a stat boost", async () => { - game.override.passiveAbility(Abilities.SHEER_FORCE).starterForms({ [Species.TATSUGIRI]: 0 }); - - await game.classicMode.startBattle([Species.TATSUGIRI, Species.DONDOZO]); - - const [tatsugiri, dondozo] = game.scene.getPlayerField(); - - expect(game.scene.triggerPokemonBattleAnim).toHaveBeenLastCalledWith(tatsugiri, PokemonAnimType.COMMANDER_APPLY); - expect(dondozo.getTag(BattlerTagType.COMMANDED)).toBeDefined(); - - game.move.select(Moves.ORDER_UP, 1, BattlerIndex.ENEMY); - expect(game.scene.currentBattle.turnCommands[0]?.skip).toBeTruthy(); - - await game.phaseInterceptor.to("BerryPhase", false); - - expect(dondozo.battleData.abilitiesApplied.includes(Abilities.SHEER_FORCE)).toBeTruthy(); - expect(dondozo.getStatStage(Stat.ATK)).toBe(3); - }); }); From b2bab46e1cd7b12363c9220835dcfc9b5f839b98 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Wed, 16 Apr 2025 23:47:49 -0500 Subject: [PATCH 031/262] [Bug][Ability] Fix healer queueing its message when its ally is fainted (#5642) * Add check against faint status effect * Add tests for healer * Remove redundant portions of the tests * Fix broken test --- src/data/abilities/ability.ts | 4 +- test/abilities/healer.test.ts | 97 +++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 test/abilities/healer.test.ts diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 43a6cd5901b..ab07d406868 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -4033,7 +4033,9 @@ export class PostTurnResetStatusAbAttr extends PostTurnAbAttr { } else { this.target = pokemon; } - return !isNullOrUndefined(this.target?.status); + + const effect = this.target?.status?.effect; + return !!effect && effect !== StatusEffect.FAINT; } override applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { diff --git a/test/abilities/healer.test.ts b/test/abilities/healer.test.ts new file mode 100644 index 00000000000..35aa74209b4 --- /dev/null +++ b/test/abilities/healer.test.ts @@ -0,0 +1,97 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { StatusEffect } from "#enums/status-effect"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi, type MockInstance } from "vitest"; +import { isNullOrUndefined } from "#app/utils"; +import { PostTurnResetStatusAbAttr } from "#app/data/abilities/ability"; +import { allAbilities } from "#app/data/data-lists"; +import type Pokemon from "#app/field/pokemon"; + +describe("Abilities - Healer", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + let healerAttrSpy: MockInstance; + let healerAttr: PostTurnResetStatusAbAttr; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + healerAttrSpy.mockRestore(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([Moves.SPLASH]) + .ability(Abilities.BALL_FETCH) + .battleType("double") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + + healerAttr = allAbilities[Abilities.HEALER].getAttrs(PostTurnResetStatusAbAttr)[0]; + healerAttrSpy = vi + .spyOn(healerAttr, "getCondition") + .mockReturnValue((pokemon: Pokemon) => !isNullOrUndefined(pokemon.getAlly())); + }); + + it("should not queue a message phase for healing if the ally has fainted", async () => { + game.override.moveset([Moves.SPLASH, Moves.LUNAR_DANCE]); + await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); + const user = game.scene.getPlayerPokemon()!; + // Only want one magikarp to have the ability. + vi.spyOn(user, "getAbility").mockReturnValue(allAbilities[Abilities.HEALER]); + game.move.select(Moves.SPLASH); + // faint the ally + game.move.select(Moves.LUNAR_DANCE, 1); + const abSpy = vi.spyOn(healerAttr, "canApplyPostTurn"); + await game.phaseInterceptor.to("TurnEndPhase"); + + // It's not enough to just test that the ally still has its status. + // We need to ensure that the ability failed to meet its condition + expect(abSpy).toHaveReturnedWith(false); + + // Explicitly restore the mock to ensure pollution doesn't happen + abSpy.mockRestore(); + }); + + it("should heal the status of an ally if the ally has a status", async () => { + await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); + const [user, ally] = game.scene.getPlayerField(); + // Only want one magikarp to have the ability. + vi.spyOn(user, "getAbility").mockReturnValue(allAbilities[Abilities.HEALER]); + expect(ally.trySetStatus(StatusEffect.BURN)).toBe(true); + game.move.select(Moves.SPLASH); + game.move.select(Moves.SPLASH, 1); + + await game.phaseInterceptor.to("TurnEndPhase"); + await game.toNextTurn(); + + expect(ally.status?.effect, "status effect was not healed").toBeFalsy(); + }); + + // TODO: Healer is currently checked before the + it.todo("should heal a burn before its end of turn damage", async () => { + await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); + const [user, ally] = game.scene.getPlayerField(); + // Only want one magikarp to have the ability. + vi.spyOn(user, "getAbility").mockReturnValue(allAbilities[Abilities.HEALER]); + expect(ally.trySetStatus(StatusEffect.BURN)).toBe(true); + game.move.select(Moves.SPLASH); + game.move.select(Moves.SPLASH, 1); + await game.phaseInterceptor.to("TurnEndPhase"); + await game.toNextTurn(); + + expect(ally.status?.effect, "status effect was not healed").toBeFalsy(); + expect(ally.hp).toBe(ally.getMaxHp()); + }); +}); From 45a2f426024e8221f4756f524f6bda93b5cc6a5f Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Thu, 17 Apr 2025 10:44:50 -0500 Subject: [PATCH 032/262] [Bug] Prevent game from hanging when loading in a new battle (#5676) --- src/field/pokemon.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index cdd48f7d940..ce36a40697b 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -840,12 +840,17 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { await Promise.allSettled(loadPromises); - // Wait for the assets we queued to load to finish loading, then... + // This must be initiated before we queue loading, otherwise the load could have finished before + // we reach the line of code that adds the listener, causing a deadlock. + const waitOnLoadPromise = new Promise(resolve => globalScene.load.once(Phaser.Loader.Events.COMPLETE, resolve)); + if (!globalScene.load.isLoading()) { globalScene.load.start(); } + + // Wait for the assets we queued to load to finish loading, then... // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises#creating_a_promise_around_an_old_callback_api - await new Promise(resolve => globalScene.load.once(Phaser.Loader.Events.COMPLETE, resolve)); + await waitOnLoadPromise; // With the sprites loaded, generate the animation frame information if (this.isPlayer()) { From eef8367caf028e84213924fa0673a9e58927991f Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Thu, 17 Apr 2025 11:57:30 -0500 Subject: [PATCH 033/262] [Bug] Fix experimental sprites not loading in starter select (#5664) [Bug][Sprite] Fix experimental variant sprites not being loaded in starter select screen --- src/data/pokemon-species.ts | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index a27c00121dc..75ea07edd40 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -27,11 +27,12 @@ import { } from "#app/data/balance/pokemon-level-moves"; import type { Stat } from "#enums/stat"; import type { Variant, VariantSet } from "#app/sprites/variant"; -import { variantData } from "#app/sprites/variant"; +import { populateVariantColorCache, variantData } from "#app/sprites/variant"; import { speciesStarterCosts, POKERUS_STARTER_COUNT } from "#app/data/balance/starters"; import { SpeciesFormKey } from "#enums/species-form-key"; import { starterPassiveAbilities } from "#app/data/balance/passives"; import { loadPokemonVariantAssets } from "#app/sprites/pokemon-sprite"; +import { hasExpSprite } from "#app/sprites/sprite-utils"; export enum Region { NORMAL, @@ -388,8 +389,7 @@ export abstract class PokemonSpeciesForm { return `${/_[1-3]$/.test(spriteId) ? "variant/" : ""}${spriteId}`; } - /** Compute the sprite ID of the pokemon form. */ - getSpriteId(female: boolean, formIndex?: number, shiny?: boolean, variant = 0, back?: boolean): string { + getBaseSpriteKey(female: boolean, formIndex?: number): string { if (formIndex === undefined || this instanceof PokemonForm) { formIndex = this.formIndex; } @@ -400,7 +400,12 @@ export abstract class PokemonSpeciesForm { female && ![SpeciesFormKey.MEGA, SpeciesFormKey.GIGANTAMAX].includes(formSpriteKey as SpeciesFormKey); - const baseSpriteKey = `${showGenderDiffs ? "female__" : ""}${this.speciesId}${formSpriteKey ? `-${formSpriteKey}` : ""}`; + return `${showGenderDiffs ? "female__" : ""}${this.speciesId}${formSpriteKey ? `-${formSpriteKey}` : ""}`; + } + + /** Compute the sprite ID of the pokemon form. */ + getSpriteId(female: boolean, formIndex?: number, shiny?: boolean, variant = 0, back?: boolean): string { + const baseSpriteKey = this.getBaseSpriteKey(female, formIndex); let config = variantData; `${back ? "back__" : ""}${baseSpriteKey}`.split("__").map(p => (config ? (config = config[p]) : null)); @@ -597,10 +602,19 @@ export abstract class PokemonSpeciesForm { startLoad = false, back = false, ): Promise { + // We need to populate the color cache for this species' variant const spriteKey = this.getSpriteKey(female, formIndex, shiny, variant, back); globalScene.loadPokemonAtlas(spriteKey, this.getSpriteAtlasPath(female, formIndex, shiny, variant, back)); globalScene.load.audio(this.getCryKey(formIndex), `audio/${this.getCryKey(formIndex)}.m4a`); + const baseSpriteKey = this.getBaseSpriteKey(female, formIndex); + + // Force the variant color cache to be loaded for the form + await populateVariantColorCache( + "pkmn__" + baseSpriteKey, + globalScene.experimentalSprites && hasExpSprite(spriteKey), + baseSpriteKey, + ); return new Promise(resolve => { globalScene.load.once(Phaser.Loader.Events.COMPLETE, () => { const originalWarn = console.warn; From 3a46aae687142201aa3c42264c13b4865c5d561f Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Thu, 17 Apr 2025 15:25:38 -0500 Subject: [PATCH 034/262] [Bug] Fix beak blast: not applying if user faints and not respecting long reach (#5639) * Add test for beak blast applying after user faints * Rewrite tags for contact protected and check moveFlags.doesFlagEffectApply * Add test to beak blast ensuring a long reach user does not get burned * Re-add DamageProtectedTag to relevant inheritance chains * Move resetSummonData to faintPhase instead of pokemon.apply * Remove passing of grudge and destiny bond tags to faint phase --- src/data/abilities/ability.ts | 6 +- src/data/battler-tags.ts | 169 +++++++++++++++++--------------- src/field/pokemon.ts | 8 +- src/phases/faint-phase.ts | 31 ++---- src/phases/move-effect-phase.ts | 10 +- test/moves/beak_blast.test.ts | 31 +++++- 6 files changed, 136 insertions(+), 119 deletions(-) diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index ab07d406868..6cbb579d4e0 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -6701,7 +6701,7 @@ export function initAbilities() { new Ability(Abilities.BAD_DREAMS, 4) .attr(PostTurnHurtIfSleepingAbAttr), new Ability(Abilities.PICKPOCKET, 5) - .attr(PostDefendStealHeldItemAbAttr, (target, user, move) => move.hasFlag(MoveFlags.MAKES_CONTACT)) + .attr(PostDefendStealHeldItemAbAttr, (target, user, move) => move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user, target})) .condition(getSheerForceHitDisableAbCondition()), new Ability(Abilities.SHEER_FORCE, 5) .attr(MovePowerBoostAbAttr, (user, target, move) => move.chance >= 1, 1.3) @@ -7051,7 +7051,7 @@ export function initAbilities() { new Ability(Abilities.BATTERY, 7) .attr(AllyMoveCategoryPowerBoostAbAttr, [ MoveCategory.SPECIAL ], 1.3), new Ability(Abilities.FLUFFY, 7) - .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => move.hasFlag(MoveFlags.MAKES_CONTACT), 0.5) + .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user, target}), 0.5) .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => user.getMoveType(move) === PokemonType.FIRE, 2) .ignorable(), new Ability(Abilities.DAZZLING, 7) @@ -7060,7 +7060,7 @@ export function initAbilities() { new Ability(Abilities.SOUL_HEART, 7) .attr(PostKnockOutStatStageChangeAbAttr, Stat.SPATK, 1), new Ability(Abilities.TANGLING_HAIR, 7) - .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => move.hasFlag(MoveFlags.MAKES_CONTACT), Stat.SPD, -1, false), + .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user, target}), Stat.SPD, -1, false), new Ability(Abilities.RECEIVER, 7) .attr(CopyFaintedAllyAbilityAbAttr) .uncopiable(), diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 401fd9903d1..9b72f3083fd 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -52,6 +52,7 @@ export enum BattlerTagLapseType { MOVE_EFFECT, TURN_END, HIT, + /** Tag lapses AFTER_HIT, applying its effects even if the user faints */ AFTER_HIT, CUSTOM, } @@ -498,7 +499,13 @@ export class BeakBlastChargingTag extends BattlerTag { lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { if (lapseType === BattlerTagLapseType.AFTER_HIT) { const phaseData = getMoveEffectPhaseData(pokemon); - if (phaseData?.move.hasFlag(MoveFlags.MAKES_CONTACT)) { + if ( + phaseData?.move.doesFlagEffectApply({ + flag: MoveFlags.MAKES_CONTACT, + user: phaseData.attacker, + target: pokemon, + }) + ) { phaseData.attacker.trySetStatus(StatusEffect.BURN, true, pokemon); } return true; @@ -1611,19 +1618,50 @@ export class ProtectedTag extends BattlerTag { } } -/** Base class for `BattlerTag`s that block damaging moves but not status moves */ -export class DamageProtectedTag extends ProtectedTag {} +/** Class for `BattlerTag`s that apply some effect when hit by a contact move */ +export class ContactProtectedTag extends ProtectedTag { + /** + * Function to call when a contact move hits the pokemon with this tag. + * @param _attacker - The pokemon using the contact move + * @param _user - The pokemon that is being attacked and has the tag + * @param _move - The move used by the attacker + */ + onContact(_attacker: Pokemon, _user: Pokemon) {} + + /** + * Lapse the tag and apply `onContact` if the move makes contact and + * `lapseType` is custom, respecting the move's flags and the pokemon's + * abilities, and whether the lapseType is custom. + * + * @param pokemon - The pokemon with the tag + * @param lapseType - The type of lapse to apply. If this is not {@linkcode BattlerTagLapseType.CUSTOM CUSTOM}, no effect will be applied. + * @returns Whether the tag continues to exist after the lapse. + */ + lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { + const ret = super.lapse(pokemon, lapseType); + + const moveData = getMoveEffectPhaseData(pokemon); + if ( + lapseType === BattlerTagLapseType.CUSTOM && + moveData && + moveData.move.doesFlagEffectApply({ flag: MoveFlags.MAKES_CONTACT, user: moveData.attacker, target: pokemon }) + ) { + this.onContact(moveData.attacker, pokemon); + } + + return ret; + } +} /** * `BattlerTag` class for moves that block damaging moves damage the enemy if the enemy's move makes contact * Used by {@linkcode Moves.SPIKY_SHIELD} */ -export class ContactDamageProtectedTag extends ProtectedTag { +export class ContactDamageProtectedTag extends ContactProtectedTag { private damageRatio: number; constructor(sourceMove: Moves, damageRatio: number) { super(sourceMove, BattlerTagType.SPIKY_SHIELD); - this.damageRatio = damageRatio; } @@ -1636,22 +1674,46 @@ export class ContactDamageProtectedTag extends ProtectedTag { this.damageRatio = source.damageRatio; } - lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { - const ret = super.lapse(pokemon, lapseType); - - if (lapseType === BattlerTagLapseType.CUSTOM) { - const effectPhase = globalScene.getCurrentPhase(); - if (effectPhase instanceof MoveEffectPhase && effectPhase.move.getMove().hasFlag(MoveFlags.MAKES_CONTACT)) { - const attacker = effectPhase.getPokemon(); - if (!attacker.hasAbilityWithAttr(BlockNonDirectDamageAbAttr)) { - attacker.damageAndUpdate(toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)), { - result: HitResult.INDIRECT, - }); - } - } + /** + * Damage the attacker by `this.damageRatio` of the target's max HP + * @param attacker - The pokemon using the contact move + * @param user - The pokemon that is being attacked and has the tag + */ + override onContact(attacker: Pokemon, user: Pokemon): void { + const cancelled = new BooleanHolder(false); + applyAbAttrs(BlockNonDirectDamageAbAttr, user, cancelled); + if (!cancelled.value) { + attacker.damageAndUpdate(toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)), { + result: HitResult.INDIRECT, + }); } + } +} - return ret; +/** Base class for `BattlerTag`s that block damaging moves but not status moves */ +export class DamageProtectedTag extends ContactProtectedTag {} + +export class ContactSetStatusProtectedTag extends DamageProtectedTag { + /** + * @param sourceMove The move that caused the tag to be applied + * @param tagType The type of the tag + * @param statusEffect The status effect to apply to the attacker + */ + constructor( + sourceMove: Moves, + tagType: BattlerTagType, + private statusEffect: StatusEffect, + ) { + super(sourceMove, tagType); + } + + /** + * Set the status effect on the attacker + * @param attacker - The pokemon using the contact move + * @param user - The pokemon that is being attacked and has the tag + */ + override onContact(attacker: Pokemon, user: Pokemon): void { + attacker.trySetStatus(this.statusEffect, true, user); } } @@ -1674,68 +1736,19 @@ export class ContactStatStageChangeProtectedTag extends DamageProtectedTag { * When given a battler tag or json representing one, load the data for it. * @param {BattlerTag | any} source A battler tag */ - loadTag(source: BattlerTag | any): void { + override loadTag(source: BattlerTag | any): void { super.loadTag(source); this.stat = source.stat; this.levels = source.levels; } - lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { - const ret = super.lapse(pokemon, lapseType); - - if (lapseType === BattlerTagLapseType.CUSTOM) { - const effectPhase = globalScene.getCurrentPhase(); - if (effectPhase instanceof MoveEffectPhase && effectPhase.move.getMove().hasFlag(MoveFlags.MAKES_CONTACT)) { - const attacker = effectPhase.getPokemon(); - globalScene.unshiftPhase(new StatStageChangePhase(attacker.getBattlerIndex(), false, [this.stat], this.levels)); - } - } - - return ret; - } -} - -export class ContactPoisonProtectedTag extends ProtectedTag { - constructor(sourceMove: Moves) { - super(sourceMove, BattlerTagType.BANEFUL_BUNKER); - } - - lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { - const ret = super.lapse(pokemon, lapseType); - - if (lapseType === BattlerTagLapseType.CUSTOM) { - const effectPhase = globalScene.getCurrentPhase(); - if (effectPhase instanceof MoveEffectPhase && effectPhase.move.getMove().hasFlag(MoveFlags.MAKES_CONTACT)) { - const attacker = effectPhase.getPokemon(); - attacker.trySetStatus(StatusEffect.POISON, true, pokemon); - } - } - - return ret; - } -} - -/** - * `BattlerTag` class for moves that block damaging moves and burn the enemy if the enemy's move makes contact - * Used by {@linkcode Moves.BURNING_BULWARK} - */ -export class ContactBurnProtectedTag extends DamageProtectedTag { - constructor(sourceMove: Moves) { - super(sourceMove, BattlerTagType.BURNING_BULWARK); - } - - lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { - const ret = super.lapse(pokemon, lapseType); - - if (lapseType === BattlerTagLapseType.CUSTOM) { - const effectPhase = globalScene.getCurrentPhase(); - if (effectPhase instanceof MoveEffectPhase && effectPhase.move.getMove().hasFlag(MoveFlags.MAKES_CONTACT)) { - const attacker = effectPhase.getPokemon(); - attacker.trySetStatus(StatusEffect.BURN, true); - } - } - - return ret; + /** + * Initiate the stat stage change on the attacker + * @param attacker - The pokemon using the contact move + * @param user - The pokemon that is being attacked and has the tag + */ + override onContact(attacker: Pokemon, _user: Pokemon): void { + globalScene.unshiftPhase(new StatStageChangePhase(attacker.getBattlerIndex(), false, [this.stat], this.levels)); } } @@ -3518,9 +3531,9 @@ export function getBattlerTag( case BattlerTagType.SILK_TRAP: return new ContactStatStageChangeProtectedTag(sourceMove, tagType, Stat.SPD, -1); case BattlerTagType.BANEFUL_BUNKER: - return new ContactPoisonProtectedTag(sourceMove); + return new ContactSetStatusProtectedTag(sourceMove, tagType, StatusEffect.POISON); case BattlerTagType.BURNING_BULWARK: - return new ContactBurnProtectedTag(sourceMove); + return new ContactSetStatusProtectedTag(sourceMove, tagType, StatusEffect.BURN); case BattlerTagType.ENDURING: return new EnduringTag(tagType, BattlerTagLapseType.TURN_END, sourceMove); case BattlerTagType.ENDURE_TOKEN: diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index ce36a40697b..5ae7d227b3c 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -128,6 +128,7 @@ import { TarShotTag, AutotomizedTag, PowerTrickTag, + type GrudgeTag, } from "../data/battler-tags"; import { WeatherType } from "#enums/weather-type"; import { @@ -4754,15 +4755,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { new FaintPhase( this.getBattlerIndex(), false, - destinyTag, - grudgeTag, source, ), ); this.destroySubstitute(); this.lapseTag(BattlerTagType.COMMANDED); - this.resetSummonData(); } return result; @@ -4824,7 +4822,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ); this.destroySubstitute(); this.lapseTag(BattlerTagType.COMMANDED); - this.resetSummonData(); } return damage; } @@ -4992,6 +4989,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return false; } + /**@overload */ + getTag(tagType: BattlerTagType.GRUDGE): GrudgeTag | nil; + /** @overload */ getTag(tagType: BattlerTagType): BattlerTag | nil; diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index 01a556115a6..d1856c9331c 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -9,7 +9,6 @@ import { PostKnockOutAbAttr, PostVictoryAbAttr, } from "#app/data/abilities/ability"; -import type { DestinyBondTag, GrudgeTag } from "#app/data/battler-tags"; import { BattlerTagLapseType } from "#app/data/battler-tags"; import { battleSpecDialogue } from "#app/data/dialogue"; import { allMoves, PostVictoryStatStageChangeAttr } from "#app/data/moves/move"; @@ -32,6 +31,7 @@ import { ToggleDoublePositionPhase } from "./toggle-double-position-phase"; import { VictoryPhase } from "./victory-phase"; import { isNullOrUndefined } from "#app/utils"; import { FRIENDSHIP_LOSS_FROM_FAINT } from "#app/data/balance/starters"; +import { BattlerTagType } from "#enums/battler-tag-type"; export class FaintPhase extends PokemonPhase { /** @@ -39,33 +39,15 @@ export class FaintPhase extends PokemonPhase { */ private preventEndure: boolean; - /** - * Destiny Bond tag belonging to the currently fainting Pokemon, if applicable - */ - private destinyTag?: DestinyBondTag | null; - - /** - * Grudge tag belonging to the currently fainting Pokemon, if applicable - */ - private grudgeTag?: GrudgeTag | null; - /** * The source Pokemon that dealt fatal damage */ private source?: Pokemon; - constructor( - battlerIndex: BattlerIndex, - preventEndure = false, - destinyTag?: DestinyBondTag | null, - grudgeTag?: GrudgeTag | null, - source?: Pokemon, - ) { + constructor(battlerIndex: BattlerIndex, preventEndure = false, source?: Pokemon) { super(battlerIndex); this.preventEndure = preventEndure; - this.destinyTag = destinyTag; - this.grudgeTag = grudgeTag; this.source = source; } @@ -74,13 +56,12 @@ export class FaintPhase extends PokemonPhase { const faintPokemon = this.getPokemon(); - if (!isNullOrUndefined(this.destinyTag) && !isNullOrUndefined(this.source)) { - this.destinyTag.lapse(this.source, BattlerTagLapseType.CUSTOM); + if (this.source) { + faintPokemon.getTag(BattlerTagType.DESTINY_BOND)?.lapse(this.source, BattlerTagLapseType.CUSTOM); + faintPokemon.getTag(BattlerTagType.GRUDGE)?.lapse(faintPokemon, BattlerTagLapseType.CUSTOM, this.source); } - if (!isNullOrUndefined(this.grudgeTag) && !isNullOrUndefined(this.source)) { - this.grudgeTag.lapse(faintPokemon, BattlerTagLapseType.CUSTOM, this.source); - } + faintPokemon.resetSummonData(); if (!this.preventEndure) { const instantReviveModifier = globalScene.applyModifier( diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index af9f685eebe..3a4e5f32ede 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -627,18 +627,20 @@ export class MoveEffectPhase extends PokemonPhase { * @param hitResult - The {@linkcode HitResult} of the attempted move * @returns a `Promise` intended to be passed into a `then()` call. */ - protected applyOnGetHitAbEffects(user: Pokemon, target: Pokemon, hitResult: HitResult): void { + protected applyOnGetHitAbEffects(user: Pokemon, target: Pokemon, hitResult: HitResult) { + const hitsSubstitute = this.move.getMove().hitsSubstitute(user, target); if (!target.isFainted() || target.canApplyAbility()) { applyPostDefendAbAttrs(PostDefendAbAttr, target, user, this.move.getMove(), hitResult); - if (!this.move.getMove().hitsSubstitute(user, target)) { + if (!hitsSubstitute) { if (!user.isPlayer() && this.move.getMove() instanceof AttackMove) { globalScene.applyShuffledModifiers(EnemyAttackStatusEffectChanceModifier, false, target); } - - target.lapseTags(BattlerTagLapseType.AFTER_HIT); } } + if (!hitsSubstitute) { + target.lapseTags(BattlerTagLapseType.AFTER_HIT); + } } /** diff --git a/test/moves/beak_blast.test.ts b/test/moves/beak_blast.test.ts index 9f8b1e3d5c3..252b28448fd 100644 --- a/test/moves/beak_blast.test.ts +++ b/test/moves/beak_blast.test.ts @@ -38,7 +38,7 @@ describe("Moves - Beak Blast", () => { }); it("should add a charge effect that burns attackers on contact", async () => { - await game.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -55,7 +55,7 @@ describe("Moves - Beak Blast", () => { it("should still charge and burn opponents if the user is sleeping", async () => { game.override.statusEffect(StatusEffect.SLEEP); - await game.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -72,7 +72,7 @@ describe("Moves - Beak Blast", () => { it("should not burn attackers that don't make contact", async () => { game.override.enemyMoveset([Moves.WATER_GUN]); - await game.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -89,7 +89,7 @@ describe("Moves - Beak Blast", () => { it("should only hit twice with Multi-Lens", async () => { game.override.startingHeldItems([{ name: "MULTI_LENS", count: 1 }]); - await game.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -102,7 +102,7 @@ describe("Moves - Beak Blast", () => { it("should be blocked by Protect", async () => { game.override.enemyMoveset([Moves.PROTECT]); - await game.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -116,4 +116,25 @@ describe("Moves - Beak Blast", () => { expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); expect(leadPokemon.getTag(BattlerTagType.BEAK_BLAST_CHARGING)).toBeUndefined(); }); + + it("should still burn the enemy if the user is knocked out", async () => { + game.override.ability(Abilities.BALL_FETCH); + await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); + const enemyPokemon = game.scene.getEnemyPokemon()!; + const user = game.scene.getPlayerPokemon()!; + user.hp = 1; + game.move.select(Moves.BEAK_BLAST); + await game.phaseInterceptor.to("BerryPhase", false); + expect(enemyPokemon.status?.effect).toBe(StatusEffect.BURN); + }); + + it("should not burn a long reach enemy that hits the user with a contact move", async () => { + game.override.enemyAbility(Abilities.LONG_REACH); + game.override.enemyMoveset([Moves.FALSE_SWIPE]).enemyLevel(100); + await game.classicMode.startBattle([Species.MAGIKARP]); + game.move.select(Moves.BEAK_BLAST); + await game.phaseInterceptor.to("BerryPhase", false); + const enemyPokemon = game.scene.getEnemyPokemon()!; + expect(enemyPokemon.status?.effect).not.toBe(StatusEffect.BURN); + }); }); From b8b101119c66cfc67f16c842dbec11e1cc5ae3d4 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Thu, 17 Apr 2025 15:31:57 -0500 Subject: [PATCH 035/262] [Bug][Sprite] Use floats for variant shader recolor comparison (#5668) * Use float values for comparison * Remove unused colorInt --- src/pipelines/glsl/spriteFragShader.frag | 36 ++++++++---------------- src/pipelines/glsl/spriteShader.vert | 1 - src/pipelines/sprite.ts | 8 +++--- src/utils.ts | 5 +++- 4 files changed, 20 insertions(+), 30 deletions(-) diff --git a/src/pipelines/glsl/spriteFragShader.frag b/src/pipelines/glsl/spriteFragShader.frag index 3765e595b70..03f8c8c27bc 100644 --- a/src/pipelines/glsl/spriteFragShader.frag +++ b/src/pipelines/glsl/spriteFragShader.frag @@ -31,9 +31,9 @@ uniform vec2 texSize; uniform float yOffset; uniform float yShadowOffset; uniform vec4 tone; -uniform ivec4 baseVariantColors[32]; +uniform vec4 baseVariantColors[32]; uniform vec4 variantColors[32]; -uniform ivec4 spriteColors[32]; +uniform vec4 spriteColors[32]; uniform ivec4 fusionSpriteColors[32]; const vec3 lumaF = vec3(.299, .587, .114); @@ -69,7 +69,6 @@ float hue2rgb(float f1, float f2, float hue) { vec3 rgb2hsl(vec3 color) { vec3 hsl; - float fmin = min(min(color.r, color.g), color.b); float fmax = max(max(color.r, color.g), color.b); float delta = fmax - fmin; @@ -152,34 +151,23 @@ vec3 hsv2rgb(vec3 c) { void main() { vec4 texture = texture2D(uMainSampler[0], outTexCoord); - ivec4 colorInt = ivec4(texture*255.0); - for (int i = 0; i < 32; i++) { - if (baseVariantColors[i][3] == 0) + if (baseVariantColors[i].a == 0.0) break; - // abs value is broken in this version of gles with highp - ivec3 diffs = ivec3( - (colorInt.r > baseVariantColors[i].r) ? colorInt.r - baseVariantColors[i].r : baseVariantColors[i].r - colorInt.r, - (colorInt.g > baseVariantColors[i].g) ? colorInt.g - baseVariantColors[i].g : baseVariantColors[i].g - colorInt.g, - (colorInt.b > baseVariantColors[i].b) ? colorInt.b - baseVariantColors[i].b : baseVariantColors[i].b - colorInt.b - ); - // Set color threshold to be within 3 points for each channel - bvec3 threshold = lessThan(diffs, ivec3(3)); - - if (texture.a > 0.0 && all(threshold)) { + if (texture.a > 0.0 && all(lessThan(abs(texture.rgb - baseVariantColors[i].rgb), vec3(1.0/255.0)))) { texture.rgb = variantColors[i].rgb; break; } } for (int i = 0; i < 32; i++) { - if (spriteColors[i][3] == 0) + if (spriteColors[i][3] == 0.0) break; - if (texture.a > 0.0 && colorInt.r == spriteColors[i].r && colorInt.g == spriteColors[i].g && colorInt.b == spriteColors[i].b) { - vec3 fusionColor = vec3(float(fusionSpriteColors[i].r) / 255.0, float(fusionSpriteColors[i].g) / 255.0, float(fusionSpriteColors[i].b) / 255.0); - vec3 bg = vec3(spriteColors[i].rgb) / 255.0; + if (texture.a > 0.0 && all(lessThan(abs(texture.rgb - spriteColors[i].rgb), vec3(1.0/255.0)))) { + vec3 fusionColor = vec3(fusionSpriteColors[i].rgb) / 255.0; + vec3 bg = spriteColors[i].rgb; float gray = (bg.r + bg.g + bg.b) / 3.0; - bg = vec3(gray, gray, gray); + bg = vec3(gray); vec3 fg = fusionColor; texture.rgb = mix(1.0 - 2.0 * (1.0 - bg) * (1.0 - fg), 2.0 * bg * fg, step(bg, vec3(0.5))); break; @@ -192,7 +180,7 @@ void main() { vec4 color = texture * texel; if (color.a > 0.0 && teraColor.r > 0.0 && teraColor.g > 0.0 && teraColor.b > 0.0) { - vec2 relUv = vec2((outTexCoord.x - texFrameUv.x) / (size.x / texSize.x), (outTexCoord.y - texFrameUv.y) / (size.y / texSize.y)); + vec2 relUv = (outTexCoord.xy - texFrameUv.xy) / (size.xy / texSize.xy); vec2 teraTexCoord = vec2(relUv.x * (size.x / 200.0), relUv.y * (size.y / 120.0)); vec4 teraCol = texture2D(uMainSampler[1], teraTexCoord); float floorValue = 86.0 / 255.0; @@ -265,8 +253,8 @@ void main() { if ((spriteY >= 0.9 && (color.a == 0.0 || yOverflow))) { float shadowSpriteY = (spriteY - 0.9) * (1.0 / 0.15); - if (distance(vec2(spriteX, shadowSpriteY), vec2(0.5, 0.5)) < 0.5) { - color = vec4(vec3(0.0, 0.0, 0.0), 0.5); + if (distance(vec2(spriteX, shadowSpriteY), vec2(0.5)) < 0.5) { + color = vec4(vec3(0.0), 0.5); } else if (yOverflow) { discard; } diff --git a/src/pipelines/glsl/spriteShader.vert b/src/pipelines/glsl/spriteShader.vert index 33743384b47..84e73834f49 100644 --- a/src/pipelines/glsl/spriteShader.vert +++ b/src/pipelines/glsl/spriteShader.vert @@ -11,7 +11,6 @@ attribute float inTintEffect; attribute vec4 inTint; varying vec2 outTexCoord; -varying vec2 outtexFrameUv; varying float outTexId; varying vec2 outPosition; varying float outTintEffect; diff --git a/src/pipelines/sprite.ts b/src/pipelines/sprite.ts index d97cae1662b..0aa9409617a 100644 --- a/src/pipelines/sprite.ts +++ b/src/pipelines/sprite.ts @@ -101,7 +101,7 @@ export default class SpritePipeline extends FieldSpritePipeline { flatSpriteColors.splice( flatSpriteColors.length, 0, - ...(c < spriteColors.length ? spriteColors[c] : emptyColors), + ...(c < spriteColors.length ? spriteColors[c].map(x => x / 255.0) : emptyColors), ); flatFusionSpriteColors.splice( flatFusionSpriteColors.length, @@ -110,7 +110,7 @@ export default class SpritePipeline extends FieldSpritePipeline { ); } - this.set4iv("spriteColors", flatSpriteColors.flat()); + this.set4fv("spriteColors", flatSpriteColors.flat()); this.set4iv("fusionSpriteColors", flatFusionSpriteColors.flat()); } } @@ -146,7 +146,7 @@ export default class SpritePipeline extends FieldSpritePipeline { if (c < baseColors.length) { const baseColor = Array.from(Object.values(rgbHexToRgba(baseColors[c]))); const variantColor = Array.from(Object.values(rgbHexToRgba(variantColors[variant][baseColors[c]]))); - flatBaseColors.splice(flatBaseColors.length, 0, ...baseColor); + flatBaseColors.splice(flatBaseColors.length, 0, ...baseColor.map(c => c / 255.0)); flatVariantColors.splice(flatVariantColors.length, 0, ...variantColor.map(c => c / 255.0)); } else { flatBaseColors.splice(flatBaseColors.length, 0, ...emptyColors); @@ -160,7 +160,7 @@ export default class SpritePipeline extends FieldSpritePipeline { } } - this.set4iv("baseVariantColors", flatBaseColors.flat()); + this.set4fv("baseVariantColors", flatBaseColors.flat()); this.set4fv("variantColors", flatVariantColors.flat()); } diff --git a/src/utils.ts b/src/utils.ts index 2f05e2724ff..ce9966c0d7f 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -405,8 +405,11 @@ export function deltaRgb(rgb1: number[], rgb2: number[]): number { return Math.ceil(Math.sqrt(2 * drp2 + 4 * dgp2 + 3 * dbp2 + (t * (drp2 - dbp2)) / 256)); } +// Extract out the rgb values from a hex string +const hexRegex = /^([\da-f]{2})([\da-f]{2})([\da-f]{2})$/i; + export function rgbHexToRgba(hex: string) { - const color = hex.match(/^([\da-f]{2})([\da-f]{2})([\da-f]{2})$/i) ?? ["000000", "00", "00", "00"]; + const color = hex.match(hexRegex) ?? ["000000", "00", "00", "00"]; return { r: Number.parseInt(color[1], 16), g: Number.parseInt(color[2], 16), From 82cd492117cf9a5c92d7b65322fcf34deac98a5a Mon Sep 17 00:00:00 2001 From: Lylian BALL <131535108+PyGaVS@users.noreply.github.com> Date: Fri, 18 Apr 2025 11:33:28 +0200 Subject: [PATCH 036/262] [Bug] Pokemon with illusion imitate the cry of the illusion (#5675) --- src/field/pokemon.ts | 9 ++++----- test/abilities/illusion.test.ts | 3 ++- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 5ae7d227b3c..27c4edea297 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1107,7 +1107,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { */ getSpeciesForm(ignoreOverride?: boolean, useIllusion: boolean = false): PokemonSpeciesForm { const species: PokemonSpecies = useIllusion && !!this.summonData?.illusion ? getPokemonSpecies(this.summonData?.illusion.species) : this.species; - const formIndex: integer = useIllusion && !!this.summonData?.illusion ? this.summonData?.illusion.formIndex : this.formIndex; if (!ignoreOverride && this.summonData?.speciesForm) { @@ -5282,13 +5281,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { sceneOverride?: BattleScene, ): AnySound { const scene = sceneOverride ?? globalScene; // TODO: is `sceneOverride` needed? - const cry = this.getSpeciesForm().cry(soundConfig); + const cry = this.getSpeciesForm(undefined, true).cry(soundConfig); let duration = cry.totalDuration * 1000; if ( this.fusionSpecies && - this.getSpeciesForm() !== this.getFusionSpeciesForm() + this.getSpeciesForm(undefined, true) !== this.getFusionSpeciesForm(undefined, true) ) { - let fusionCry = this.getFusionSpeciesForm().cry(soundConfig, true); + let fusionCry = this.getFusionSpeciesForm(undefined, true).cry(soundConfig, true); duration = Math.min(duration, fusionCry.totalDuration * 1000); fusionCry.destroy(); scene.time.delayedCall(fixedInt(Math.ceil(duration * 0.4)), () => { @@ -5298,7 +5297,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { cry, fixedInt(Math.ceil(duration * 0.2)), ); - fusionCry = this.getFusionSpeciesForm().cry( + fusionCry = this.getFusionSpeciesForm(undefined, true).cry( Object.assign( { seek: Math.max(fusionCry.totalDuration * 0.4, 0) }, soundConfig, diff --git a/test/abilities/illusion.test.ts b/test/abilities/illusion.test.ts index aa77aa701b2..bdb235f458b 100644 --- a/test/abilities/illusion.test.ts +++ b/test/abilities/illusion.test.ts @@ -7,6 +7,7 @@ import { Moves } from "#enums/moves"; import { Abilities } from "#enums/abilities"; import { PokeballType } from "#app/enums/pokeball"; import { Gender } from "#app/data/gender"; +import { BerryPhase } from "#app/phases/berry-phase"; describe("Abilities - Illusion", () => { let phaserGame: Phaser.Game; @@ -66,7 +67,7 @@ describe("Abilities - Illusion", () => { expect(!!zorua.summonData?.illusion).equals(false); }); - it("break if the ability is suppressed", async () => { + it("break with neutralizing gas", async () => { game.override.enemyAbility(Abilities.NEUTRALIZING_GAS); await game.classicMode.startBattle([Species.KOFFING]); From 54ce58411b18781acd32c41b7631c66c14000bfc Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Fri, 18 Apr 2025 04:35:46 -0500 Subject: [PATCH 037/262] [Bug] Fix forced switch bugs in enemy partner trainer battles (#5644) * Add isPartner method to trainer class * Ensure force switches cannot pull pokemon from the wrong trainer * Add override for battle type * Fixup tests and broken assumptions * Make move fail override semi-invuln check Bandaid fix because move effect phase does not allow for the move to fail if all of its conditions fail * Restore overrides * Apply kev's suggestions from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Fix illusion test battle type invocation * Update struggle and healer tests to use battleStyle --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/battle-scene.ts | 33 ++-- src/battle.ts | 8 +- src/data/abilities/ability.ts | 8 +- src/data/challenge.ts | 3 +- src/data/moves/move.ts | 45 +++--- .../utils/encounter-phase-utils.ts | 3 +- src/enums/battle-type.ts | 6 + src/field/trainer.ts | 7 + src/overrides.ts | 28 +++- src/phases/command-phase.ts | 2 +- src/phases/encounter-phase.ts | 3 +- src/phases/faint-phase.ts | 2 +- src/phases/game-over-phase.ts | 2 +- src/phases/summon-phase.ts | 2 +- src/phases/title-phase.ts | 2 +- src/phases/victory-phase.ts | 3 +- src/system/game-data.ts | 2 +- src/system/pokemon-data.ts | 2 +- src/ui/fight-ui-handler.ts | 2 +- src/ui/run-history-ui-handler.ts | 2 +- src/ui/run-info-ui-handler.ts | 2 +- test/abilities/ability_duplication.test.ts | 2 +- test/abilities/ability_timing.test.ts | 2 +- test/abilities/analytic.test.ts | 4 +- test/abilities/arena_trap.test.ts | 4 +- test/abilities/aroma_veil.test.ts | 2 +- test/abilities/aura_break.test.ts | 2 +- test/abilities/battery.test.ts | 2 +- test/abilities/battle_bond.test.ts | 2 +- test/abilities/beast_boost.test.ts | 2 +- test/abilities/commander.test.ts | 2 +- test/abilities/competitive.test.ts | 2 +- test/abilities/contrary.test.ts | 2 +- test/abilities/corrosion.test.ts | 2 +- test/abilities/costar.test.ts | 2 +- test/abilities/dancer.test.ts | 2 +- test/abilities/defiant.test.ts | 2 +- test/abilities/desolate-land.test.ts | 8 +- test/abilities/disguise.test.ts | 2 +- test/abilities/dry_skin.test.ts | 2 +- test/abilities/early_bird.test.ts | 2 +- test/abilities/flash_fire.test.ts | 2 +- test/abilities/flower_gift.test.ts | 4 +- test/abilities/flower_veil.test.ts | 14 +- test/abilities/forecast.test.ts | 2 +- test/abilities/friend_guard.test.ts | 2 +- test/abilities/galvanize.test.ts | 2 +- test/abilities/good_as_gold.test.ts | 12 +- test/abilities/gorilla_tactics.test.ts | 2 +- test/abilities/gulp_missile.test.ts | 2 +- test/abilities/healer.test.ts | 2 +- test/abilities/heatproof.test.ts | 2 +- test/abilities/honey_gather.test.ts | 2 +- test/abilities/hustle.test.ts | 2 +- test/abilities/hyper_cutter.test.ts | 2 +- test/abilities/ice_face.test.ts | 2 +- test/abilities/illuminate.test.ts | 2 +- test/abilities/illusion.test.ts | 2 +- test/abilities/immunity.test.ts | 12 +- test/abilities/imposter.test.ts | 2 +- test/abilities/infiltrator.test.ts | 2 +- test/abilities/insomnia.test.ts | 12 +- test/abilities/intimidate.test.ts | 4 +- test/abilities/intrepid_sword.test.ts | 2 +- test/abilities/libero.test.ts | 2 +- test/abilities/lightningrod.test.ts | 2 +- test/abilities/limber.test.ts | 12 +- test/abilities/magic_bounce.test.ts | 12 +- test/abilities/magma_armor.test.ts | 12 +- test/abilities/mimicry.test.ts | 2 +- test/abilities/mirror_armor.test.ts | 10 +- test/abilities/mold_breaker.test.ts | 13 +- test/abilities/moody.test.ts | 2 +- test/abilities/moxie.test.ts | 4 +- test/abilities/mummy.test.ts | 2 +- test/abilities/mycelium_might.test.ts | 2 +- test/abilities/neutralizing_gas.test.ts | 8 +- test/abilities/no_guard.test.ts | 2 +- test/abilities/oblivious.test.ts | 20 +-- test/abilities/own_tempo.test.ts | 12 +- test/abilities/parental_bond.test.ts | 4 +- test/abilities/pastel_veil.test.ts | 2 +- test/abilities/perish_body.test.ts | 2 +- test/abilities/power_construct.test.ts | 2 +- test/abilities/power_spot.test.ts | 2 +- test/abilities/protean.test.ts | 2 +- test/abilities/protosynthesis.test.ts | 2 +- test/abilities/quick_draw.test.ts | 2 +- test/abilities/sand_spit.test.ts | 2 +- test/abilities/sand_veil.test.ts | 2 +- test/abilities/sap_sipper.test.ts | 2 +- test/abilities/schooling.test.ts | 2 +- test/abilities/screen_cleaner.test.ts | 2 +- test/abilities/seed_sower.test.ts | 2 +- test/abilities/serene_grace.test.ts | 2 +- test/abilities/sheer_force.test.ts | 2 +- test/abilities/shield_dust.test.ts | 2 +- test/abilities/shields_down.test.ts | 2 +- test/abilities/simple.test.ts | 2 +- test/abilities/speed_boost.test.ts | 2 +- test/abilities/stakeout.test.ts | 2 +- test/abilities/stall.test.ts | 2 +- test/abilities/steely_spirit.test.ts | 2 +- test/abilities/storm_drain.test.ts | 2 +- test/abilities/sturdy.test.ts | 2 +- test/abilities/super_luck.test.ts | 2 +- test/abilities/supreme_overlord.test.ts | 2 +- test/abilities/sweet_veil.test.ts | 2 +- test/abilities/synchronize.test.ts | 2 +- test/abilities/tera_shell.test.ts | 2 +- test/abilities/thermal_exchange.test.ts | 12 +- test/abilities/trace.test.ts | 2 +- test/abilities/unburden.test.ts | 6 +- test/abilities/unseen_fist.test.ts | 2 +- test/abilities/victory_star.test.ts | 2 +- test/abilities/vital_spirit.test.ts | 12 +- test/abilities/volt_absorb.test.ts | 2 +- test/abilities/wandering_spirit.test.ts | 2 +- test/abilities/water_bubble.test.ts | 12 +- test/abilities/water_veil.test.ts | 12 +- test/abilities/wimp_out.test.ts | 15 +- test/abilities/wind_power.test.ts | 2 +- test/abilities/wind_rider.test.ts | 2 +- test/abilities/wonder_skin.test.ts | 2 +- test/abilities/zen_mode.test.ts | 2 +- test/abilities/zero_to_hero.test.ts | 2 +- test/arena/arena_gravity.test.ts | 2 +- test/arena/grassy_terrain.test.ts | 2 +- test/arena/weather_fog.test.ts | 2 +- test/arena/weather_hail.test.ts | 2 +- test/arena/weather_sandstorm.test.ts | 4 +- test/arena/weather_strong_winds.test.ts | 2 +- test/battle/ability_swap.test.ts | 2 +- test/battle/battle-order.test.ts | 8 +- test/battle/battle.test.ts | 20 +-- test/battle/damage_calculation.test.ts | 2 +- test/battle/double_battle.test.ts | 2 +- test/battle/inverse_battle.test.ts | 2 +- test/battle/special_battle.test.ts | 18 +-- test/boss-pokemon.test.ts | 8 +- test/daily_mode.test.ts | 2 +- test/data/status_effect.test.ts | 4 +- test/escape-calculations.test.ts | 6 +- test/evolution.test.ts | 2 +- test/items/dire_hit.test.ts | 2 +- test/items/eviolite.test.ts | 2 +- test/items/exp_booster.test.ts | 2 +- test/items/grip_claw.test.ts | 4 +- test/items/leek.test.ts | 2 +- test/items/leftovers.test.ts | 2 +- test/items/light_ball.test.ts | 2 +- test/items/lock_capsule.test.ts | 2 +- test/items/metal_powder.test.ts | 2 +- test/items/multi_lens.test.ts | 6 +- test/items/mystical_rock.test.ts | 2 +- test/items/quick_powder.test.ts | 2 +- test/items/reviver_seed.test.ts | 2 +- test/items/scope_lens.test.ts | 2 +- test/items/temp_stat_stage_booster.test.ts | 2 +- test/items/thick_club.test.ts | 2 +- test/items/toxic_orb.test.ts | 2 +- test/moves/after_you.test.ts | 2 +- test/moves/alluring_voice.test.ts | 2 +- test/moves/aromatherapy.test.ts | 2 +- test/moves/assist.test.ts | 2 +- test/moves/astonish.test.ts | 2 +- test/moves/aurora_veil.test.ts | 6 +- test/moves/autotomize.test.ts | 2 +- test/moves/baddy_bad.test.ts | 2 +- test/moves/baneful_bunker.test.ts | 2 +- test/moves/baton_pass.test.ts | 2 +- test/moves/beak_blast.test.ts | 2 +- test/moves/beat_up.test.ts | 2 +- test/moves/burning_jealousy.test.ts | 4 +- test/moves/camouflage.test.ts | 2 +- test/moves/ceaseless_edge.test.ts | 2 +- test/moves/chilly_reception.test.ts | 6 +- test/moves/chloroblast.test.ts | 2 +- test/moves/copycat.test.ts | 2 +- test/moves/crafty_shield.test.ts | 2 +- test/moves/defog.test.ts | 2 +- test/moves/destiny_bond.test.ts | 6 +- test/moves/diamond_storm.test.ts | 4 +- test/moves/dig.test.ts | 2 +- test/moves/disable.test.ts | 2 +- test/moves/dive.test.ts | 2 +- test/moves/doodle.test.ts | 6 +- test/moves/double_team.test.ts | 2 +- test/moves/dragon_cheer.test.ts | 2 +- test/moves/dragon_rage.test.ts | 2 +- test/moves/dragon_tail.test.ts | 6 +- test/moves/dynamax_cannon.test.ts | 2 +- test/moves/electrify.test.ts | 2 +- test/moves/electro_shot.test.ts | 2 +- test/moves/encore.test.ts | 2 +- test/moves/endure.test.ts | 2 +- test/moves/entrainment.test.ts | 2 +- test/moves/fairy_lock.test.ts | 2 +- test/moves/fake_out.test.ts | 2 +- test/moves/false_swipe.test.ts | 2 +- test/moves/fell_stinger.test.ts | 8 +- test/moves/fissure.test.ts | 2 +- test/moves/flame_burst.test.ts | 2 +- test/moves/flower_shield.test.ts | 4 +- test/moves/fly.test.ts | 2 +- test/moves/focus_punch.test.ts | 2 +- test/moves/follow_me.test.ts | 2 +- test/moves/forests_curse.test.ts | 2 +- test/moves/freeze_dry.test.ts | 2 +- test/moves/freezy_frost.test.ts | 4 +- test/moves/fusion_bolt.test.ts | 2 +- test/moves/fusion_flare.test.ts | 2 +- test/moves/fusion_flare_bolt.test.ts | 2 +- test/moves/future_sight.test.ts | 2 +- test/moves/gastro_acid.test.ts | 4 +- test/moves/geomancy.test.ts | 2 +- test/moves/gigaton_hammer.test.ts | 2 +- test/moves/glaive_rush.test.ts | 2 +- test/moves/growth.test.ts | 2 +- test/moves/grudge.test.ts | 2 +- test/moves/guard_split.test.ts | 2 +- test/moves/guard_swap.test.ts | 2 +- test/moves/hard_press.test.ts | 2 +- test/moves/haze.test.ts | 2 +- test/moves/heal_bell.test.ts | 2 +- test/moves/heart_swap.test.ts | 2 +- test/moves/hyper_beam.test.ts | 2 +- test/moves/imprison.test.ts | 2 +- test/moves/instruct.test.ts | 22 +-- test/moves/jaw_lock.test.ts | 4 +- test/moves/lash_out.test.ts | 2 +- test/moves/last_respects.test.ts | 2 +- test/moves/light_screen.test.ts | 4 +- test/moves/lucky_chant.test.ts | 4 +- test/moves/lunar_blessing.test.ts | 2 +- test/moves/lunar_dance.test.ts | 2 +- test/moves/magic_coat.test.ts | 12 +- test/moves/magnet_rise.test.ts | 2 +- test/moves/make_it_rain.test.ts | 4 +- test/moves/mat_block.test.ts | 2 +- test/moves/metal_burst.test.ts | 2 +- test/moves/metronome.test.ts | 4 +- test/moves/mirror_move.test.ts | 4 +- test/moves/mist.test.ts | 2 +- test/moves/moongeist_beam.test.ts | 2 +- test/moves/multi_target.test.ts | 2 +- test/moves/nightmare.test.ts | 2 +- test/moves/obstruct.test.ts | 2 +- test/moves/octolock.test.ts | 2 +- test/moves/order_up.test.ts | 2 +- test/moves/parting_shot.test.ts | 2 +- test/moves/plasma_fists.test.ts | 6 +- test/moves/pledge_moves.test.ts | 4 +- test/moves/pollen_puff.test.ts | 4 +- test/moves/powder.test.ts | 10 +- test/moves/power_shift.test.ts | 2 +- test/moves/power_split.test.ts | 2 +- test/moves/power_swap.test.ts | 2 +- test/moves/power_trick.test.ts | 2 +- test/moves/protect.test.ts | 2 +- test/moves/psycho_shift.test.ts | 2 +- test/moves/purify.test.ts | 2 +- test/moves/quash.test.ts | 2 +- test/moves/quick_guard.test.ts | 4 +- test/moves/rage_fist.test.ts | 2 +- test/moves/rage_powder.test.ts | 2 +- test/moves/reflect.test.ts | 4 +- test/moves/reflect_type.test.ts | 2 +- test/moves/relic_song.test.ts | 2 +- test/moves/retaliate.test.ts | 2 +- test/moves/revival_blessing.test.ts | 6 +- test/moves/role_play.test.ts | 2 +- test/moves/rollout.test.ts | 2 +- test/moves/roost.test.ts | 2 +- test/moves/round.test.ts | 2 +- test/moves/safeguard.test.ts | 4 +- test/moves/scale_shot.test.ts | 2 +- test/moves/secret_power.test.ts | 4 +- test/moves/shed_tail.test.ts | 2 +- test/moves/shell_side_arm.test.ts | 2 +- test/moves/shell_trap.test.ts | 4 +- test/moves/simple_beam.test.ts | 2 +- test/moves/sketch.test.ts | 2 +- test/moves/skill_swap.test.ts | 2 +- test/moves/sleep_talk.test.ts | 2 +- test/moves/solar_beam.test.ts | 2 +- test/moves/sparkly_swirl.test.ts | 4 +- test/moves/speed_swap.test.ts | 2 +- test/moves/spikes.test.ts | 4 +- test/moves/spit_up.test.ts | 2 +- test/moves/spotlight.test.ts | 2 +- test/moves/steamroller.test.ts | 2 +- test/moves/stockpile.test.ts | 2 +- test/moves/struggle.test.ts | 2 +- test/moves/substitute.test.ts | 2 +- test/moves/swallow.test.ts | 2 +- test/moves/syrup_bomb.test.ts | 2 +- test/moves/tackle.test.ts | 2 +- test/moves/tail_whip.test.ts | 2 +- test/moves/tailwind.test.ts | 6 +- test/moves/tar_shot.test.ts | 2 +- test/moves/taunt.test.ts | 2 +- test/moves/telekinesis.test.ts | 2 +- test/moves/tera_blast.test.ts | 2 +- test/moves/tera_starstorm.test.ts | 4 +- test/moves/thousand_arrows.test.ts | 2 +- test/moves/throat_chop.test.ts | 2 +- test/moves/thunder_wave.test.ts | 2 +- test/moves/tidy_up.test.ts | 2 +- test/moves/torment.test.ts | 2 +- test/moves/toxic.test.ts | 2 +- test/moves/toxic_spikes.test.ts | 2 +- test/moves/transform.test.ts | 2 +- test/moves/trick_or_treat.test.ts | 2 +- test/moves/triple_arrows.test.ts | 2 +- test/moves/u_turn.test.ts | 2 +- test/moves/upper_hand.test.ts | 2 +- test/moves/whirlwind.test.ts | 66 +++++++- test/moves/wide_guard.test.ts | 2 +- test/moves/will_o_wisp.test.ts | 2 +- test/phases/form-change-phase.test.ts | 2 +- test/phases/frenzy-move-reset.test.ts | 2 +- test/phases/game-over-phase.test.ts | 2 +- test/reload.test.ts | 12 +- test/system/game_data.test.ts | 2 +- test/testUtils/gameManagerUtils.ts | 3 +- test/testUtils/helpers/overridesHelper.ts | 147 +++++++++++------- test/ui/battle_info.test.ts | 2 +- test/ui/transfer-item.test.ts | 2 +- test/ui/type-hints.test.ts | 4 +- 330 files changed, 757 insertions(+), 628 deletions(-) create mode 100644 src/enums/battle-type.ts diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 90f53d6a95e..0fe4c7f7e4f 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -77,7 +77,8 @@ import { } from "#app/data/abilities/ability"; import { allAbilities } from "./data/data-lists"; import type { FixedBattleConfig } from "#app/battle"; -import Battle, { BattleType } from "#app/battle"; +import Battle from "#app/battle"; +import { BattleType } from "#enums/battle-type"; import type { GameMode } from "#app/game-mode"; import { GameModes, getGameMode } from "#app/game-mode"; import FieldSpritePipeline from "#app/pipelines/field-sprite"; @@ -1338,22 +1339,27 @@ export default class BattleScene extends SceneBase { } else { if ( !this.gameMode.hasTrainers || + Overrides.BATTLE_TYPE_OVERRIDE === BattleType.WILD || (Overrides.DISABLE_STANDARD_TRAINERS_OVERRIDE && isNullOrUndefined(trainerData)) ) { newBattleType = BattleType.WILD; - } else if (battleType === undefined) { - newBattleType = this.gameMode.isWaveTrainer(newWaveIndex, this.arena) ? BattleType.TRAINER : BattleType.WILD; } else { - newBattleType = battleType; + newBattleType = + Overrides.BATTLE_TYPE_OVERRIDE ?? + battleType ?? + (this.gameMode.isWaveTrainer(newWaveIndex, this.arena) ? BattleType.TRAINER : BattleType.WILD); } if (newBattleType === BattleType.TRAINER) { - const trainerType = this.arena.randomTrainerType(newWaveIndex); + const trainerType = + Overrides.RANDOM_TRAINER_OVERRIDE?.trainerType ?? this.arena.randomTrainerType(newWaveIndex); let doubleTrainer = false; if (trainerConfigs[trainerType].doubleOnly) { doubleTrainer = true; } else if (trainerConfigs[trainerType].hasDouble) { - doubleTrainer = !randSeedInt(this.getDoubleBattleChance(newWaveIndex, playerField)); + doubleTrainer = + Overrides.RANDOM_TRAINER_OVERRIDE?.alwaysDouble || + !randSeedInt(this.getDoubleBattleChance(newWaveIndex, playerField)); // Add a check that special trainers can't be double except for tate and liza - they should use the normal double chance if ( trainerConfigs[trainerType].trainerTypeDouble && @@ -1373,7 +1379,10 @@ export default class BattleScene extends SceneBase { // Check for mystery encounter // Can only occur in place of a standard (non-boss) wild battle, waves 10-180 - if (this.isWaveMysteryEncounter(newBattleType, newWaveIndex) || newBattleType === BattleType.MYSTERY_ENCOUNTER) { + if ( + !Overrides.BATTLE_TYPE_OVERRIDE && + (this.isWaveMysteryEncounter(newBattleType, newWaveIndex) || newBattleType === BattleType.MYSTERY_ENCOUNTER) + ) { newBattleType = BattleType.MYSTERY_ENCOUNTER; // Reset to base spawn weight this.mysteryEncounterSaveData.encounterSpawnChance = BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT; @@ -1383,9 +1392,9 @@ export default class BattleScene extends SceneBase { if (double === undefined && newWaveIndex > 1) { if (newBattleType === BattleType.WILD && !this.gameMode.isWaveFinal(newWaveIndex)) { newDouble = !randSeedInt(this.getDoubleBattleChance(newWaveIndex, playerField)); - } else if (newBattleType === BattleType.TRAINER) { - newDouble = newTrainer?.variant === TrainerVariant.DOUBLE; } + } else if (double === undefined && newBattleType === BattleType.TRAINER) { + newDouble = newTrainer?.variant === TrainerVariant.DOUBLE; } else if (!battleConfig) { newDouble = !!double; } @@ -1395,10 +1404,10 @@ export default class BattleScene extends SceneBase { newDouble = false; } - if (!isNullOrUndefined(Overrides.BATTLE_TYPE_OVERRIDE)) { + if (!isNullOrUndefined(Overrides.BATTLE_STYLE_OVERRIDE)) { let doubleOverrideForWave: "single" | "double" | null = null; - switch (Overrides.BATTLE_TYPE_OVERRIDE) { + switch (Overrides.BATTLE_STYLE_OVERRIDE) { case "double": doubleOverrideForWave = "double"; break; @@ -1418,7 +1427,7 @@ export default class BattleScene extends SceneBase { } /** * Override battles into single only if not fighting with trainers. - * @see {@link https://github.com/pagefaultgames/pokerogue/issues/1948 | GitHub Issue #1948} + * @see {@link https://github.com/pagefaultgames/pokerogue/issues/1948 GitHub Issue #1948} */ if (newBattleType !== BattleType.TRAINER && doubleOverrideForWave === "single") { newDouble = false; diff --git a/src/battle.ts b/src/battle.ts index fb5af223b8f..3e2f293065a 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -30,6 +30,7 @@ import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; import type { CustomModifierSettings } from "#app/modifier/modifier-type"; import { ModifierTier } from "#app/modifier/modifier-tier"; import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; +import { BattleType } from "#enums/battle-type"; export enum ClassicFixedBossWaves { TOWN_YOUNGSTER = 5, @@ -54,13 +55,6 @@ export enum ClassicFixedBossWaves { RIVAL_6 = 195, } -export enum BattleType { - WILD, - TRAINER, - CLEAR, - MYSTERY_ENCOUNTER, -} - export enum BattlerIndex { ATTACKER = -1, PLAYER, diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 6cbb579d4e0..a3bd9b728f5 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -30,7 +30,7 @@ import i18next from "i18next"; import { Command } from "#app/ui/command-ui-handler"; import { BerryModifierType } from "#app/modifier/modifier-type"; import { getPokeballName } from "#app/data/pokeball"; -import { BattleType } from "#app/battle"; +import { BattleType } from "#enums/battle-type"; import { MovePhase } from "#app/phases/move-phase"; import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; @@ -44,6 +44,7 @@ import { PokemonTransformPhase } from "#app/phases/pokemon-transform-phase"; import { allAbilities } from "#app/data/data-lists"; import { AbAttr } from "#app/data/abilities/ab-attrs/ab-attr"; import { Ability } from "#app/data/abilities/ability-class"; +import { TrainerVariant } from "#app/field/trainer"; // Enum imports import { Stat, type BattleStat , BATTLE_STATS, EFFECTIVE_STATS, getStatKey, type EffectiveStat } from "#enums/stat"; @@ -61,6 +62,7 @@ import { MoveFlags } from "#enums/MoveFlags"; import { MoveTarget } from "#enums/MoveTarget"; import { MoveCategory } from "#enums/MoveCategory"; + // Type imports import type { EnemyPokemon, PokemonMove } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; @@ -5526,8 +5528,8 @@ class ForceSwitchOutHelper { const party = player ? globalScene.getPlayerParty() : globalScene.getEnemyParty(); return (!player && globalScene.currentBattle.battleType === BattleType.WILD) - || party.filter(p => p.isAllowedInBattle() - && (player || (p as EnemyPokemon).trainerSlot === (switchOutTarget as EnemyPokemon).trainerSlot)).length > globalScene.currentBattle.getBattlerCount(); + || party.filter(p => p.isAllowedInBattle() && !p.isOnField() + && (player || (p as EnemyPokemon).trainerSlot === (switchOutTarget as EnemyPokemon).trainerSlot)).length > 0; } /** diff --git a/src/data/challenge.ts b/src/data/challenge.ts index 51616c3f00f..cc5783ad1fb 100644 --- a/src/data/challenge.ts +++ b/src/data/challenge.ts @@ -8,7 +8,8 @@ import { speciesStarterCosts } from "#app/data/balance/starters"; import type Pokemon from "#app/field/pokemon"; import { PokemonMove } from "#app/field/pokemon"; import type { FixedBattleConfig } from "#app/battle"; -import { ClassicFixedBossWaves, BattleType, getRandomTrainerFunc } from "#app/battle"; +import { ClassicFixedBossWaves, getRandomTrainerFunc } from "#app/battle"; +import { BattleType } from "#enums/battle-type"; import Trainer, { TrainerVariant } from "#app/field/trainer"; import { PokemonType } from "#enums/pokemon-type"; import { Challenges } from "#enums/challenges"; diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index c2dd0ec31ca..6e5e09839c1 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -75,7 +75,7 @@ import { PreserveBerryModifier, } from "../../modifier/modifier"; import type { BattlerIndex } from "../../battle"; -import { BattleType } from "../../battle"; +import { BattleType } from "#enums/battle-type"; import { TerrainType } from "../terrain"; import { ModifierPoolType } from "#app/modifier/modifier-type"; import { Command } from "../../ui/command-ui-handler"; @@ -121,6 +121,7 @@ import { MoveFlags } from "#enums/MoveFlags"; import { MoveEffectTrigger } from "#enums/MoveEffectTrigger"; import { MultiHitType } from "#enums/MultiHitType"; import { invalidAssistMoves, invalidCopycatMoves, invalidMetronomeMoves, invalidMirrorMoveMoves, invalidSleepTalkMoves } from "./invalid-moves"; +import { TrainerVariant } from "#app/field/trainer"; type MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => boolean; type UserMoveConditionFunc = (user: Pokemon, move: Move) => boolean; @@ -6295,9 +6296,10 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { return false; } else if (globalScene.currentBattle.battleType !== BattleType.WILD) { // Switch out logic for enemy trainers // Find indices of off-field Pokemon that are eligible to be switched into + const isPartnerTrainer = globalScene.currentBattle.trainer?.isPartner(); const eligibleNewIndices: number[] = []; globalScene.getEnemyParty().forEach((pokemon, index) => { - if (pokemon.isAllowedInBattle() && !pokemon.isOnField()) { + if (pokemon.isAllowedInBattle() && !pokemon.isOnField() && (!isPartnerTrainer || pokemon.trainerSlot === (switchOutTarget as EnemyPokemon).trainerSlot)) { eligibleNewIndices.push(index); } }); @@ -6347,15 +6349,6 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { } } - if (globalScene.currentBattle.waveIndex % 10 === 0) { - return false; - } - - // Don't allow wild mons to flee with U-turn et al. - if (this.selfSwitch && !user.isPlayer() && move.category !== MoveCategory.STATUS) { - return false; - } - const allyPokemon = switchOutTarget.getAlly(); if (switchOutTarget.hp > 0) { @@ -6368,13 +6361,12 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { } } - if (!allyPokemon?.isActive(true)) { - globalScene.clearEnemyHeldItemModifiers(); + // clear out enemy held item modifiers of the switch out target + globalScene.clearEnemyHeldItemModifiers(switchOutTarget); - if (switchOutTarget.hp) { + if (!allyPokemon?.isActive(true) && switchOutTarget.hp) { globalScene.pushPhase(new BattleEndPhase(false)); globalScene.pushPhase(new NewBattlePhase()); - } } } @@ -6393,6 +6385,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { } } + getSwitchOutCondition(): MoveConditionFunc { return (user, target, move) => { const switchOutTarget = (this.selfSwitch ? user : target); @@ -6416,23 +6409,23 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { const blockedByAbility = new BooleanHolder(false); applyAbAttrs(ForceSwitchOutImmunityAbAttr, target, blockedByAbility); - return !blockedByAbility.value; + if (blockedByAbility.value) { + return false; + } } + if (!player && globalScene.currentBattle.battleType === BattleType.WILD) { - if (this.isBatonPass()) { - return false; - } - // Don't allow wild opponents to flee on the boss stage since it can ruin a run early on - if (globalScene.currentBattle.waveIndex % 10 === 0) { - return false; - } + // wild pokemon cannot switch out with baton pass. + return !this.isBatonPass() + && globalScene.currentBattle.waveIndex % 10 !== 0 + // Don't allow wild mons to flee with U-turn et al. + && !(this.selfSwitch && MoveCategory.STATUS !== move.category); } const party = player ? globalScene.getPlayerParty() : globalScene.getEnemyParty(); - return (!player && !globalScene.currentBattle.battleType) - || party.filter(p => p.isAllowedInBattle() - && (player || (p as EnemyPokemon).trainerSlot === (switchOutTarget as EnemyPokemon).trainerSlot)).length > globalScene.currentBattle.getBattlerCount(); + return party.filter(p => p.isAllowedInBattle() && !p.isOnField() + && (player || (p as EnemyPokemon).trainerSlot === (switchOutTarget as EnemyPokemon).trainerSlot)).length > 0; }; } diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index a9f6b787878..69b0d81520a 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -1,5 +1,6 @@ import type Battle from "#app/battle"; -import { BattlerIndex, BattleType } from "#app/battle"; +import { BattlerIndex } from "#app/battle"; +import { BattleType } from "#enums/battle-type"; import { biomeLinks, BiomePoolTier } from "#app/data/balance/biomes"; import type MysteryEncounterOption from "#app/data/mystery-encounters/mystery-encounter-option"; import { diff --git a/src/enums/battle-type.ts b/src/enums/battle-type.ts new file mode 100644 index 00000000000..81cf89ef488 --- /dev/null +++ b/src/enums/battle-type.ts @@ -0,0 +1,6 @@ +export enum BattleType { + WILD, + TRAINER, + CLEAR, + MYSTERY_ENCOUNTER +} diff --git a/src/field/trainer.ts b/src/field/trainer.ts index 30cf43b54a1..1679e6f12e0 100644 --- a/src/field/trainer.ts +++ b/src/field/trainer.ts @@ -223,6 +223,13 @@ export default class Trainer extends Phaser.GameObjects.Container { return this.config.doubleOnly || this.variant === TrainerVariant.DOUBLE; } + /** + * Return whether the trainer is a duo, like Tate & Liza + */ + isPartner(): boolean { + return this.variant === TrainerVariant.DOUBLE; + } + getMixedBattleBgm(): string { return this.config.mixedBattleBgm; } diff --git a/src/overrides.ts b/src/overrides.ts index 21c72cd7b98..d36cfbfac98 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -15,11 +15,13 @@ import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { PokeballType } from "#enums/pokeball"; import { PokemonType } from "#enums/pokemon-type"; import { Species } from "#enums/species"; -import { Stat } from "#enums/stat"; +import { BATTLE_STATS, Stat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; import { TimeOfDay } from "#enums/time-of-day"; import { VariantTier } from "#enums/variant-tier"; import { WeatherType } from "#enums/weather-type"; +import { TrainerType } from "#enums/trainer-type"; +import { BattleType } from "#enums/battle-type"; /** * This comment block exists to prevent IDEs from automatically removing unused imports @@ -41,7 +43,7 @@ import { WeatherType } from "#enums/weather-type"; * } * ``` */ -const overrides = {} satisfies Partial>; +const overrides = {} satisfies Partial>; /** * If you need to add Overrides values for local testing do that inside {@linkcode overrides} @@ -69,7 +71,7 @@ class DefaultOverrides { * * If `"odd-doubles"`, follow the `"double"` rule on odd wave numbers, and follow the `"single"` rule on even wave numbers. */ - readonly BATTLE_TYPE_OVERRIDE: BattleStyle | null = null; + readonly BATTLE_STYLE_OVERRIDE: BattleStyle | null = null; readonly STARTING_WAVE_OVERRIDE: number = 0; readonly STARTING_BIOME_OVERRIDE: Biome = Biome.TOWN; readonly ARENA_TINT_OVERRIDE: TimeOfDay | null = null; @@ -259,6 +261,16 @@ class DefaultOverrides { * If `true`, disable all non-scripted opponent trainer encounters. */ readonly DISABLE_STANDARD_TRAINERS_OVERRIDE: boolean = false; + + /** + * Set all non-scripted waves to use the selected battle type. + * + * Ignored if set to {@linkcode BattleType.TRAINER} and `DISABLE_STANDARD_TRAINERS_OVERRIDE` is `true`. + */ + readonly BATTLE_TYPE_OVERRIDE: Exclude | null = null; + + /** Force all random trainer types to be the provided type. */ + readonly RANDOM_TRAINER_OVERRIDE: RandomTrainerOverride | null = null; } export const defaultOverrides = new DefaultOverrides(); @@ -269,3 +281,13 @@ export default { } satisfies InstanceType; export type BattleStyle = "double" | "single" | "even-doubles" | "odd-doubles"; + +export type RandomTrainerOverride = { + /** The Type of trainer to force */ + trainerType: Exclude, + /* If the selected trainer type has a double version, it will always use its double version. */ + alwaysDouble?: boolean +} + +/** The type of the {@linkcode DefaultOverrides} class */ +export type OverridesType = typeof DefaultOverrides; \ No newline at end of file diff --git a/src/phases/command-phase.ts b/src/phases/command-phase.ts index 8691ac453ca..30343f92aa3 100644 --- a/src/phases/command-phase.ts +++ b/src/phases/command-phase.ts @@ -1,6 +1,6 @@ import { globalScene } from "#app/global-scene"; import type { TurnCommand } from "#app/battle"; -import { BattleType } from "#app/battle"; +import { BattleType } from "#enums/battle-type"; import type { EncoreTag } from "#app/data/battler-tags"; import { TrappedTag } from "#app/data/battler-tags"; import type { MoveTargetSet } from "#app/data/moves/move"; diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index 67236c1c041..c196608f91e 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -1,4 +1,5 @@ -import { BattlerIndex, BattleType } from "#app/battle"; +import { BattlerIndex } from "#app/battle"; +import { BattleType } from "#enums/battle-type"; import { globalScene } from "#app/global-scene"; import { PLAYER_PARTY_MAX_SIZE } from "#app/constants"; import { applyAbAttrs, SyncEncounterNatureAbAttr, applyPreSummonAbAttrs, PreSummonAbAttr } from "#app/data/abilities/ability"; diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index d1856c9331c..2719206a6cc 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -1,5 +1,5 @@ import type { BattlerIndex } from "#app/battle"; -import { BattleType } from "#app/battle"; +import { BattleType } from "#enums/battle-type"; import { globalScene } from "#app/global-scene"; import { applyPostFaintAbAttrs, diff --git a/src/phases/game-over-phase.ts b/src/phases/game-over-phase.ts index 1ccdc9c7106..9e79eafe88b 100644 --- a/src/phases/game-over-phase.ts +++ b/src/phases/game-over-phase.ts @@ -1,5 +1,5 @@ import { clientSessionId } from "#app/account"; -import { BattleType } from "#app/battle"; +import { BattleType } from "#enums/battle-type"; import { globalScene } from "#app/global-scene"; import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { getCharVariantFromDialogue } from "#app/data/dialogue"; diff --git a/src/phases/summon-phase.ts b/src/phases/summon-phase.ts index 60d45f19c0c..ee27fc28247 100644 --- a/src/phases/summon-phase.ts +++ b/src/phases/summon-phase.ts @@ -1,4 +1,4 @@ -import { BattleType } from "#app/battle"; +import { BattleType } from "#enums/battle-type"; import { getPokeballAtlasKey, getPokeballTintColor } from "#app/data/pokeball"; import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms"; import { TrainerSlot } from "#enums/trainer-slot"; diff --git a/src/phases/title-phase.ts b/src/phases/title-phase.ts index 108366d4774..bc1b157e98e 100644 --- a/src/phases/title-phase.ts +++ b/src/phases/title-phase.ts @@ -1,5 +1,5 @@ import { loggedInUser } from "#app/account"; -import { BattleType } from "#app/battle"; +import { BattleType } from "#enums/battle-type"; import { fetchDailyRunSeed, getDailyRunStarters } from "#app/data/daily-run"; import { Gender } from "#app/data/gender"; import { getBiomeKey } from "#app/field/arena"; diff --git a/src/phases/victory-phase.ts b/src/phases/victory-phase.ts index 9f4412fe270..17b29f654e2 100644 --- a/src/phases/victory-phase.ts +++ b/src/phases/victory-phase.ts @@ -1,5 +1,6 @@ import type { BattlerIndex } from "#app/battle"; -import { BattleType, ClassicFixedBossWaves } from "#app/battle"; +import { ClassicFixedBossWaves } from "#app/battle"; +import { BattleType } from "#enums/battle-type"; import type { CustomModifierSettings } from "#app/modifier/modifier-type"; import { modifierTypes } from "#app/modifier/modifier-type"; import { BattleEndPhase } from "./battle-end-phase"; diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 53146301666..698299845a3 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -15,7 +15,7 @@ import PersistentModifierData from "#app/system/modifier-data"; import ArenaData from "#app/system/arena-data"; import { Unlockables } from "#app/system/unlockables"; import { GameModes, getGameMode } from "#app/game-mode"; -import { BattleType } from "#app/battle"; +import { BattleType } from "#enums/battle-type"; import TrainerData from "#app/system/trainer-data"; import { trainerConfigs } from "#app/data/trainers/trainer-config"; import { resetSettings, setSetting, SettingKeys } from "#app/system/settings/settings"; diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index 97ce494a43a..00baad8cf12 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -1,4 +1,4 @@ -import { BattleType } from "../battle"; +import { BattleType } from "#enums/battle-type"; import { globalScene } from "#app/global-scene"; import type { Gender } from "../data/gender"; import type { Nature } from "#enums/nature"; diff --git a/src/ui/fight-ui-handler.ts b/src/ui/fight-ui-handler.ts index 27985629e3d..285a1dd36cc 100644 --- a/src/ui/fight-ui-handler.ts +++ b/src/ui/fight-ui-handler.ts @@ -14,7 +14,7 @@ import type { PokemonMove } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import type { CommandPhase } from "#app/phases/command-phase"; import MoveInfoOverlay from "./move-info-overlay"; -import { BattleType } from "#app/battle"; +import { BattleType } from "#enums/battle-type"; export default class FightUiHandler extends UiHandler implements InfoToggle { public static readonly MOVES_CONTAINER_NAME = "moves"; diff --git a/src/ui/run-history-ui-handler.ts b/src/ui/run-history-ui-handler.ts index ffc9d378d18..16aad7b8634 100644 --- a/src/ui/run-history-ui-handler.ts +++ b/src/ui/run-history-ui-handler.ts @@ -8,7 +8,7 @@ import type PokemonData from "../system/pokemon-data"; import MessageUiHandler from "./message-ui-handler"; import i18next from "i18next"; import { Button } from "../enums/buttons"; -import { BattleType } from "../battle"; +import { BattleType } from "#enums/battle-type"; import type { RunEntry } from "../system/game-data"; import { PlayerGender } from "#enums/player-gender"; import { TrainerVariant } from "../field/trainer"; diff --git a/src/ui/run-info-ui-handler.ts b/src/ui/run-info-ui-handler.ts index 47de6a1a64d..60667035147 100644 --- a/src/ui/run-info-ui-handler.ts +++ b/src/ui/run-info-ui-handler.ts @@ -9,7 +9,7 @@ import { formatLargeNumber, getPlayTimeString, formatMoney, formatFancyLargeNumb import type PokemonData from "../system/pokemon-data"; import i18next from "i18next"; import { Button } from "../enums/buttons"; -import { BattleType } from "../battle"; +import { BattleType } from "#enums/battle-type"; import { TrainerVariant } from "../field/trainer"; import { Challenges } from "#enums/challenges"; import { getLuckString, getLuckTextTint } from "../modifier/modifier-type"; diff --git a/test/abilities/ability_duplication.test.ts b/test/abilities/ability_duplication.test.ts index 08b74f682f2..de429045bb8 100644 --- a/test/abilities/ability_duplication.test.ts +++ b/test/abilities/ability_duplication.test.ts @@ -24,7 +24,7 @@ describe("Ability Duplication", () => { game = new GameManager(phaserGame); game.override .moveset([Moves.SPLASH]) - .battleType("single") + .battleStyle("single") .ability(Abilities.HUGE_POWER) .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH); diff --git a/test/abilities/ability_timing.test.ts b/test/abilities/ability_timing.test.ts index d59c4f7c38d..9df4fe0d1c9 100644 --- a/test/abilities/ability_timing.test.ts +++ b/test/abilities/ability_timing.test.ts @@ -27,7 +27,7 @@ describe("Ability Timing", () => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.INTIMIDATE) .ability(Abilities.BALL_FETCH); diff --git a/test/abilities/analytic.test.ts b/test/abilities/analytic.test.ts index e488b467ce0..1aadf2c0746 100644 --- a/test/abilities/analytic.test.ts +++ b/test/abilities/analytic.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Analytic", () => { game.override .moveset([Moves.SPLASH, Moves.TACKLE]) .ability(Abilities.ANALYTIC) - .battleType("single") + .battleStyle("single") .disableCrits() .startingLevel(200) .enemyLevel(200) @@ -53,7 +53,7 @@ describe("Abilities - Analytic", () => { }); it("should increase damage only if the user moves last in doubles", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); await game.classicMode.startBattle([Species.GENGAR, Species.SHUCKLE]); const [enemy] = game.scene.getEnemyField(); diff --git a/test/abilities/arena_trap.test.ts b/test/abilities/arena_trap.test.ts index 3a5bad9c34b..f37b8a2859f 100644 --- a/test/abilities/arena_trap.test.ts +++ b/test/abilities/arena_trap.test.ts @@ -32,7 +32,7 @@ describe("Abilities - Arena Trap", () => { // TODO: Enable test when Issue #935 is addressed it.todo("should not allow grounded Pokémon to flee", async () => { - game.override.battleType("single"); + game.override.battleStyle("single"); await game.classicMode.startBattle(); @@ -61,7 +61,7 @@ describe("Abilities - Arena Trap", () => { */ it("should lift if pokemon with this ability leaves the field", async () => { game.override - .battleType("double") + .battleStyle("double") .enemyMoveset(Moves.SPLASH) .moveset([Moves.ROAR, Moves.SPLASH]) .ability(Abilities.BALL_FETCH); diff --git a/test/abilities/aroma_veil.test.ts b/test/abilities/aroma_veil.test.ts index af8a0233a60..38683bcb1e3 100644 --- a/test/abilities/aroma_veil.test.ts +++ b/test/abilities/aroma_veil.test.ts @@ -25,7 +25,7 @@ describe("Moves - Aroma Veil", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("double") + .battleStyle("double") .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset([Moves.HEAL_BLOCK, Moves.IMPRISON, Moves.SPLASH]) .enemySpecies(Species.SHUCKLE) diff --git a/test/abilities/aura_break.test.ts b/test/abilities/aura_break.test.ts index 86b6c69ec8b..523a2773c99 100644 --- a/test/abilities/aura_break.test.ts +++ b/test/abilities/aura_break.test.ts @@ -24,7 +24,7 @@ describe("Abilities - Aura Break", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.moveset([Moves.MOONBLAST, Moves.DARK_PULSE, Moves.MOONBLAST, Moves.DARK_PULSE]); game.override.enemyMoveset(Moves.SPLASH); game.override.enemyAbility(Abilities.AURA_BREAK); diff --git a/test/abilities/battery.test.ts b/test/abilities/battery.test.ts index cc7570c3d31..6a1f77f4b27 100644 --- a/test/abilities/battery.test.ts +++ b/test/abilities/battery.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Battery", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.enemySpecies(Species.SHUCKLE); game.override.enemyAbility(Abilities.BALL_FETCH); game.override.moveset([Moves.TACKLE, Moves.BREAKING_SWIPE, Moves.SPLASH, Moves.DAZZLING_GLEAM]); diff --git a/test/abilities/battle_bond.test.ts b/test/abilities/battle_bond.test.ts index 6305d7dedc5..d599b3212f9 100644 --- a/test/abilities/battle_bond.test.ts +++ b/test/abilities/battle_bond.test.ts @@ -28,7 +28,7 @@ describe("Abilities - BATTLE BOND", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .startingWave(4) // Leads to arena reset on Wave 5 trainer battle .ability(Abilities.BATTLE_BOND) .starterForms({ [Species.GRENINJA]: ashForm }) diff --git a/test/abilities/beast_boost.test.ts b/test/abilities/beast_boost.test.ts index b307a9eeeba..a6b6ec0aacf 100644 --- a/test/abilities/beast_boost.test.ts +++ b/test/abilities/beast_boost.test.ts @@ -24,7 +24,7 @@ describe("Abilities - Beast Boost", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.BULBASAUR) .enemyAbility(Abilities.BEAST_BOOST) .ability(Abilities.BEAST_BOOST) diff --git a/test/abilities/commander.test.ts b/test/abilities/commander.test.ts index 9d16d474dd4..0e6cb1b9208 100644 --- a/test/abilities/commander.test.ts +++ b/test/abilities/commander.test.ts @@ -34,7 +34,7 @@ describe("Abilities - Commander", () => { .enemyLevel(100) .moveset([Moves.LIQUIDATION, Moves.MEMENTO, Moves.SPLASH, Moves.FLIP_TURN]) .ability(Abilities.COMMANDER) - .battleType("double") + .battleStyle("double") .disableCrits() .enemySpecies(Species.SNORLAX) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/abilities/competitive.test.ts b/test/abilities/competitive.test.ts index cad35be18f7..1e0b5fcf40e 100644 --- a/test/abilities/competitive.test.ts +++ b/test/abilities/competitive.test.ts @@ -25,7 +25,7 @@ describe("Abilities - Competitive", () => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.BEEDRILL) .enemyMoveset(Moves.TICKLE) .startingLevel(1) diff --git a/test/abilities/contrary.test.ts b/test/abilities/contrary.test.ts index 19041eb2801..929d620c232 100644 --- a/test/abilities/contrary.test.ts +++ b/test/abilities/contrary.test.ts @@ -23,7 +23,7 @@ describe("Abilities - Contrary", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.BULBASAUR) .enemyAbility(Abilities.CONTRARY) .ability(Abilities.INTIMIDATE) diff --git a/test/abilities/corrosion.test.ts b/test/abilities/corrosion.test.ts index b7f316fbe2d..c72aef9f0a3 100644 --- a/test/abilities/corrosion.test.ts +++ b/test/abilities/corrosion.test.ts @@ -23,7 +23,7 @@ describe("Abilities - Corrosion", () => { game = new GameManager(phaserGame); game.override .moveset([Moves.SPLASH]) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.GRIMER) .enemyAbility(Abilities.CORROSION) diff --git a/test/abilities/costar.test.ts b/test/abilities/costar.test.ts index c6a44bffe54..7b1e362689d 100644 --- a/test/abilities/costar.test.ts +++ b/test/abilities/costar.test.ts @@ -24,7 +24,7 @@ describe("Abilities - COSTAR", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.ability(Abilities.COSTAR); game.override.moveset([Moves.SPLASH, Moves.NASTY_PLOT]); game.override.enemyMoveset(Moves.SPLASH); diff --git a/test/abilities/dancer.test.ts b/test/abilities/dancer.test.ts index c296329473d..cdd1e3221e9 100644 --- a/test/abilities/dancer.test.ts +++ b/test/abilities/dancer.test.ts @@ -23,7 +23,7 @@ describe("Abilities - Dancer", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("double"); + game.override.battleStyle("double"); }); // Reference Link: https://bulbapedia.bulbagarden.net/wiki/Dancer_(Ability) diff --git a/test/abilities/defiant.test.ts b/test/abilities/defiant.test.ts index a73002d999c..d06aef4d785 100644 --- a/test/abilities/defiant.test.ts +++ b/test/abilities/defiant.test.ts @@ -25,7 +25,7 @@ describe("Abilities - Defiant", () => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.BEEDRILL) .enemyMoveset(Moves.TICKLE) .startingLevel(1) diff --git a/test/abilities/desolate-land.test.ts b/test/abilities/desolate-land.test.ts index bb0b152418d..d6f01f7aa5e 100644 --- a/test/abilities/desolate-land.test.ts +++ b/test/abilities/desolate-land.test.ts @@ -38,7 +38,7 @@ describe("Abilities - Desolate Land", () => { * is forcefully moved out of the field from moves such as Roar {@linkcode Moves.ROAR} */ it("should lift only when all pokemon with this ability leave the field", async () => { - game.override.battleType("double").enemyMoveset([Moves.SPLASH, Moves.ROAR]); + game.override.battleStyle("double").enemyMoveset([Moves.SPLASH, Moves.ROAR]); await game.classicMode.startBattle([Species.MAGCARGO, Species.MAGCARGO, Species.MAGIKARP, Species.MAGIKARP]); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN); @@ -76,7 +76,7 @@ describe("Abilities - Desolate Land", () => { it("should lift when enemy faints", async () => { game.override - .battleType("single") + .battleStyle("single") .moveset([Moves.SHEER_COLD]) .ability(Abilities.NO_GUARD) .startingLevel(100) @@ -96,7 +96,7 @@ describe("Abilities - Desolate Land", () => { }); it("should lift when pokemon returns upon switching from double to single battle", async () => { - game.override.battleType("even-doubles").enemyMoveset([Moves.SPLASH, Moves.MEMENTO]).startingWave(12); + game.override.battleStyle("even-doubles").enemyMoveset([Moves.SPLASH, Moves.MEMENTO]).startingWave(12); await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGCARGO]); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN); @@ -117,7 +117,7 @@ describe("Abilities - Desolate Land", () => { it("should lift when enemy is captured", async () => { game.override - .battleType("single") + .battleStyle("single") .enemyMoveset([Moves.SPLASH]) .enemySpecies(Species.MAGCARGO) .enemyHasPassiveAbility(true); diff --git a/test/abilities/disguise.test.ts b/test/abilities/disguise.test.ts index a971f5c2733..fd8289312db 100644 --- a/test/abilities/disguise.test.ts +++ b/test/abilities/disguise.test.ts @@ -27,7 +27,7 @@ describe("Abilities - Disguise", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.MIMIKYU) .enemyMoveset(Moves.SPLASH) .starterSpecies(Species.REGIELEKI) diff --git a/test/abilities/dry_skin.test.ts b/test/abilities/dry_skin.test.ts index 9d8a29c431a..398d09393ab 100644 --- a/test/abilities/dry_skin.test.ts +++ b/test/abilities/dry_skin.test.ts @@ -22,7 +22,7 @@ describe("Abilities - Dry Skin", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .disableCrits() .enemyAbility(Abilities.DRY_SKIN) .enemyMoveset(Moves.SPLASH) diff --git a/test/abilities/early_bird.test.ts b/test/abilities/early_bird.test.ts index cc486672c95..0f298ba479d 100644 --- a/test/abilities/early_bird.test.ts +++ b/test/abilities/early_bird.test.ts @@ -27,7 +27,7 @@ describe("Abilities - Early Bird", () => { game.override .moveset([Moves.REST, Moves.BELLY_DRUM, Moves.SPLASH]) .ability(Abilities.EARLY_BIRD) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/abilities/flash_fire.test.ts b/test/abilities/flash_fire.test.ts index 3cec9cd9cb7..8d94d21adf8 100644 --- a/test/abilities/flash_fire.test.ts +++ b/test/abilities/flash_fire.test.ts @@ -27,7 +27,7 @@ describe("Abilities - Flash Fire", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .ability(Abilities.FLASH_FIRE) .enemyAbility(Abilities.BALL_FETCH) .startingLevel(20) diff --git a/test/abilities/flower_gift.test.ts b/test/abilities/flower_gift.test.ts index 8c7b32e7e33..f2b32dc4c80 100644 --- a/test/abilities/flower_gift.test.ts +++ b/test/abilities/flower_gift.test.ts @@ -47,7 +47,7 @@ describe("Abilities - Flower Gift", () => { allyAbility = Abilities.BALL_FETCH, enemyAbility = Abilities.BALL_FETCH, ): Promise<[number, number]> => { - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.moveset([Moves.SPLASH, Moves.SUNNY_DAY, move, Moves.HEAL_PULSE]); game.override.enemyMoveset([Moves.SPLASH, Moves.HEAL_PULSE]); const target_index = allyAttacker ? BattlerIndex.ENEMY : BattlerIndex.PLAYER_2; @@ -110,7 +110,7 @@ describe("Abilities - Flower Gift", () => { }); it("increases the ATK and SPDEF stat stages of the Pokémon with this Ability and its allies by 1.5× during Harsh Sunlight", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); await game.classicMode.startBattle([Species.CHERRIM, Species.MAGIKARP]); const [cherrim, magikarp] = game.scene.getPlayerField(); diff --git a/test/abilities/flower_veil.test.ts b/test/abilities/flower_veil.test.ts index 68242be3886..1fd7dbb3ed7 100644 --- a/test/abilities/flower_veil.test.ts +++ b/test/abilities/flower_veil.test.ts @@ -31,7 +31,7 @@ describe("Abilities - Flower Veil", () => { .moveset([Moves.SPLASH]) .enemySpecies(Species.BULBASAUR) .ability(Abilities.FLOWER_VEIL) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) @@ -63,7 +63,7 @@ describe("Abilities - Flower Veil", () => { }); it("should prevent drowsiness from yawn for a grass user and its grass allies", async () => { - game.override.enemyMoveset([Moves.YAWN]).moveset([Moves.SPLASH]).battleType("double"); + game.override.enemyMoveset([Moves.YAWN]).moveset([Moves.SPLASH]).battleStyle("double"); await game.classicMode.startBattle([Species.BULBASAUR, Species.BULBASAUR]); // Clear the ability of the ally to isolate the test @@ -81,7 +81,7 @@ describe("Abilities - Flower Veil", () => { }); it("should prevent status conditions from moves like Thunder Wave for a grass user and its grass allies", async () => { - game.override.enemyMoveset([Moves.THUNDER_WAVE]).moveset([Moves.SPLASH]).battleType("double"); + game.override.enemyMoveset([Moves.THUNDER_WAVE]).moveset([Moves.SPLASH]).battleStyle("double"); vi.spyOn(allMoves[Moves.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100); await game.classicMode.startBattle([Species.BULBASAUR]); @@ -93,7 +93,7 @@ describe("Abilities - Flower Veil", () => { }); it("should not prevent status conditions for a non-grass user and its non-grass allies", async () => { - game.override.enemyMoveset([Moves.THUNDER_WAVE]).moveset([Moves.SPLASH]).battleType("double"); + game.override.enemyMoveset([Moves.THUNDER_WAVE]).moveset([Moves.SPLASH]).battleStyle("double"); await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); const [user, ally] = game.scene.getPlayerField(); vi.spyOn(allMoves[Moves.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100); @@ -113,7 +113,7 @@ describe("Abilities - Flower Veil", () => { *******************************************/ it("should prevent the status drops from enemies for the a grass user and its grass allies", async () => { - game.override.enemyMoveset([Moves.GROWL]).moveset([Moves.SPLASH]).battleType("double"); + game.override.enemyMoveset([Moves.GROWL]).moveset([Moves.SPLASH]).battleStyle("double"); await game.classicMode.startBattle([Species.BULBASAUR, Species.BULBASAUR]); const [user, ally] = game.scene.getPlayerField(); // Clear the ally ability to isolate the test @@ -126,7 +126,7 @@ describe("Abilities - Flower Veil", () => { }); it("should not prevent status drops for a non-grass user and its non-grass allies", async () => { - game.override.enemyMoveset([Moves.GROWL]).moveset([Moves.SPLASH]).battleType("double"); + game.override.enemyMoveset([Moves.GROWL]).moveset([Moves.SPLASH]).battleStyle("double"); await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); const [user, ally] = game.scene.getPlayerField(); // Clear the ally ability to isolate the test @@ -139,7 +139,7 @@ describe("Abilities - Flower Veil", () => { }); it("should not prevent self-inflicted stat drops from moves like Close Combat for a user or its allies", async () => { - game.override.moveset([Moves.CLOSE_COMBAT]).battleType("double"); + game.override.moveset([Moves.CLOSE_COMBAT]).battleStyle("double"); await game.classicMode.startBattle([Species.BULBASAUR, Species.BULBASAUR]); const [user, ally] = game.scene.getPlayerField(); // Clear the ally ability to isolate the test diff --git a/test/abilities/forecast.test.ts b/test/abilities/forecast.test.ts index 675b9a8b59c..03b5d993a54 100644 --- a/test/abilities/forecast.test.ts +++ b/test/abilities/forecast.test.ts @@ -75,7 +75,7 @@ describe("Abilities - Forecast", () => { async () => { game.override .moveset([Moves.RAIN_DANCE, Moves.SUNNY_DAY, Moves.SNOWSCAPE, Moves.SPLASH]) - .battleType("double") + .battleStyle("double") .starterForms({ [Species.KYOGRE]: 1, [Species.GROUDON]: 1, diff --git a/test/abilities/friend_guard.test.ts b/test/abilities/friend_guard.test.ts index 474c89adaf1..302343c167b 100644 --- a/test/abilities/friend_guard.test.ts +++ b/test/abilities/friend_guard.test.ts @@ -26,7 +26,7 @@ describe("Moves - Friend Guard", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("double") + .battleStyle("double") .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset([Moves.TACKLE, Moves.SPLASH, Moves.DRAGON_RAGE]) .enemySpecies(Species.SHUCKLE) diff --git a/test/abilities/galvanize.test.ts b/test/abilities/galvanize.test.ts index c1e02c6c8d8..438ec498aa1 100644 --- a/test/abilities/galvanize.test.ts +++ b/test/abilities/galvanize.test.ts @@ -27,7 +27,7 @@ describe("Abilities - Galvanize", () => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .startingLevel(100) .ability(Abilities.GALVANIZE) .moveset([Moves.TACKLE, Moves.REVELATION_DANCE, Moves.FURY_SWIPES]) diff --git a/test/abilities/good_as_gold.test.ts b/test/abilities/good_as_gold.test.ts index 4c4741a331f..944c1d1bca1 100644 --- a/test/abilities/good_as_gold.test.ts +++ b/test/abilities/good_as_gold.test.ts @@ -32,7 +32,7 @@ describe("Abilities - Good As Gold", () => { game.override .moveset([Moves.SPLASH]) .ability(Abilities.GOOD_AS_GOLD) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) @@ -63,7 +63,7 @@ describe("Abilities - Good As Gold", () => { }); it("should not block any status moves that target the field, one side, or all pokemon", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.enemyMoveset([Moves.STEALTH_ROCK, Moves.HAZE]); game.override.moveset([Moves.SWORDS_DANCE, Moves.SAFEGUARD]); await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); @@ -85,7 +85,7 @@ describe("Abilities - Good As Gold", () => { }); it("should not block field targeted effects in singles", async () => { - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.enemyMoveset([Moves.SPIKES]); await game.classicMode.startBattle([Species.MAGIKARP]); @@ -96,7 +96,7 @@ describe("Abilities - Good As Gold", () => { }); it("should block the ally's helping hand", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.moveset([Moves.HELPING_HAND, Moves.TACKLE]); await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); @@ -108,7 +108,7 @@ describe("Abilities - Good As Gold", () => { }); it("should block the ally's heal bell, but only if the good as gold user is on the field", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.moveset([Moves.HEAL_BELL, Moves.SPLASH]); game.override.statusEffect(StatusEffect.BURN); await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS, Species.ABRA]); @@ -130,7 +130,7 @@ describe("Abilities - Good As Gold", () => { }); it("should not block field targeted effects like rain dance", async () => { - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.enemyMoveset([Moves.RAIN_DANCE]); game.override.weather(WeatherType.NONE); await game.classicMode.startBattle([Species.MAGIKARP]); diff --git a/test/abilities/gorilla_tactics.test.ts b/test/abilities/gorilla_tactics.test.ts index 48dab262b82..edaf1669809 100644 --- a/test/abilities/gorilla_tactics.test.ts +++ b/test/abilities/gorilla_tactics.test.ts @@ -23,7 +23,7 @@ describe("Abilities - Gorilla Tactics", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset([Moves.SPLASH, Moves.DISABLE]) .enemySpecies(Species.MAGIKARP) diff --git a/test/abilities/gulp_missile.test.ts b/test/abilities/gulp_missile.test.ts index 8ebd583d3ab..4db2ae4190d 100644 --- a/test/abilities/gulp_missile.test.ts +++ b/test/abilities/gulp_missile.test.ts @@ -42,7 +42,7 @@ describe("Abilities - Gulp Missile", () => { game = new GameManager(phaserGame); game.override .disableCrits() - .battleType("single") + .battleStyle("single") .moveset([Moves.SURF, Moves.DIVE, Moves.SPLASH, Moves.SUBSTITUTE]) .enemySpecies(Species.SNORLAX) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/abilities/healer.test.ts b/test/abilities/healer.test.ts index 35aa74209b4..d06c4680e36 100644 --- a/test/abilities/healer.test.ts +++ b/test/abilities/healer.test.ts @@ -32,7 +32,7 @@ describe("Abilities - Healer", () => { game.override .moveset([Moves.SPLASH]) .ability(Abilities.BALL_FETCH) - .battleType("double") + .battleStyle("double") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/abilities/heatproof.test.ts b/test/abilities/heatproof.test.ts index fa065d1ed03..f2fabf953d6 100644 --- a/test/abilities/heatproof.test.ts +++ b/test/abilities/heatproof.test.ts @@ -25,7 +25,7 @@ describe("Abilities - Heatproof", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.CHARMANDER) .enemyAbility(Abilities.HEATPROOF) diff --git a/test/abilities/honey_gather.test.ts b/test/abilities/honey_gather.test.ts index bea5c25c878..a74a40c9c1e 100644 --- a/test/abilities/honey_gather.test.ts +++ b/test/abilities/honey_gather.test.ts @@ -28,7 +28,7 @@ describe("Abilities - Honey Gather", () => { .startingLevel(100) .ability(Abilities.HONEY_GATHER) .passiveAbility(Abilities.RUN_AWAY) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/abilities/hustle.test.ts b/test/abilities/hustle.test.ts index 40197cf9e97..bf2889eab63 100644 --- a/test/abilities/hustle.test.ts +++ b/test/abilities/hustle.test.ts @@ -27,7 +27,7 @@ describe("Abilities - Hustle", () => { .ability(Abilities.HUSTLE) .moveset([Moves.TACKLE, Moves.GIGA_DRAIN, Moves.FISSURE]) .disableCrits() - .battleType("single") + .battleStyle("single") .enemyMoveset(Moves.SPLASH) .enemySpecies(Species.SHUCKLE) .enemyAbility(Abilities.BALL_FETCH); diff --git a/test/abilities/hyper_cutter.test.ts b/test/abilities/hyper_cutter.test.ts index fe5623e4e0f..99a9db28025 100644 --- a/test/abilities/hyper_cutter.test.ts +++ b/test/abilities/hyper_cutter.test.ts @@ -23,7 +23,7 @@ describe("Abilities - Hyper Cutter", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .moveset([Moves.SAND_ATTACK, Moves.NOBLE_ROAR, Moves.DEFOG, Moves.OCTOLOCK]) .ability(Abilities.BALL_FETCH) .enemySpecies(Species.SHUCKLE) diff --git a/test/abilities/ice_face.test.ts b/test/abilities/ice_face.test.ts index e85794928d6..38269c29af1 100644 --- a/test/abilities/ice_face.test.ts +++ b/test/abilities/ice_face.test.ts @@ -30,7 +30,7 @@ describe("Abilities - Ice Face", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.enemySpecies(Species.EISCUE); game.override.enemyAbility(Abilities.ICE_FACE); game.override.moveset([Moves.TACKLE, Moves.ICE_BEAM, Moves.TOXIC_THREAD, Moves.HAIL]); diff --git a/test/abilities/illuminate.test.ts b/test/abilities/illuminate.test.ts index 6518fec989b..ba26ed3b7af 100644 --- a/test/abilities/illuminate.test.ts +++ b/test/abilities/illuminate.test.ts @@ -29,7 +29,7 @@ describe("Abilities - Illuminate", () => { }); it("should prevent ACC stat stage from being lowered", async () => { - game.override.battleType("single"); + game.override.battleStyle("single"); await game.classicMode.startBattle(); diff --git a/test/abilities/illusion.test.ts b/test/abilities/illusion.test.ts index bdb235f458b..382d7d74a08 100644 --- a/test/abilities/illusion.test.ts +++ b/test/abilities/illusion.test.ts @@ -25,7 +25,7 @@ describe("Abilities - Illusion", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.enemySpecies(Species.ZORUA); game.override.enemyAbility(Abilities.ILLUSION); game.override.enemyMoveset(Moves.TACKLE); diff --git a/test/abilities/immunity.test.ts b/test/abilities/immunity.test.ts index 51e9598720b..dd9026cac50 100644 --- a/test/abilities/immunity.test.ts +++ b/test/abilities/immunity.test.ts @@ -23,9 +23,9 @@ describe("Abilities - Immunity", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([ Moves.SPLASH ]) + .moveset([Moves.SPLASH]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) @@ -33,12 +33,12 @@ describe("Abilities - Immunity", () => { }); it("should remove poison when gained", async () => { - game.override.ability(Abilities.IMMUNITY) + game.override + .ability(Abilities.IMMUNITY) .enemyAbility(Abilities.BALL_FETCH) .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH), - - await game.classicMode.startBattle([ Species.FEEBAS ]); + .enemyMoveset(Moves.SPLASH); + await game.classicMode.startBattle([Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.trySetStatus(StatusEffect.POISON); expect(enemy?.status?.effect).toBe(StatusEffect.POISON); diff --git a/test/abilities/imposter.test.ts b/test/abilities/imposter.test.ts index 2c7302d04b7..b5e902f442f 100644 --- a/test/abilities/imposter.test.ts +++ b/test/abilities/imposter.test.ts @@ -25,7 +25,7 @@ describe("Abilities - Imposter", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.MEW) .enemyLevel(200) .enemyAbility(Abilities.BEAST_BOOST) diff --git a/test/abilities/infiltrator.test.ts b/test/abilities/infiltrator.test.ts index 6278439651c..10353f35391 100644 --- a/test/abilities/infiltrator.test.ts +++ b/test/abilities/infiltrator.test.ts @@ -30,7 +30,7 @@ describe("Abilities - Infiltrator", () => { game.override .moveset([Moves.TACKLE, Moves.WATER_GUN, Moves.SPORE, Moves.BABY_DOLL_EYES]) .ability(Abilities.INFILTRATOR) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.SNORLAX) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/abilities/insomnia.test.ts b/test/abilities/insomnia.test.ts index 91fdc3fc668..49765a641b0 100644 --- a/test/abilities/insomnia.test.ts +++ b/test/abilities/insomnia.test.ts @@ -23,9 +23,9 @@ describe("Abilities - Insomnia", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([ Moves.SPLASH ]) + .moveset([Moves.SPLASH]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) @@ -33,12 +33,12 @@ describe("Abilities - Insomnia", () => { }); it("should remove sleep when gained", async () => { - game.override.ability(Abilities.INSOMNIA) + game.override + .ability(Abilities.INSOMNIA) .enemyAbility(Abilities.BALL_FETCH) .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH), - - await game.classicMode.startBattle([ Species.FEEBAS ]); + .enemyMoveset(Moves.SPLASH); + await game.classicMode.startBattle([Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.trySetStatus(StatusEffect.SLEEP); expect(enemy?.status?.effect).toBe(StatusEffect.SLEEP); diff --git a/test/abilities/intimidate.test.ts b/test/abilities/intimidate.test.ts index 53286d354c8..2888c575b0d 100644 --- a/test/abilities/intimidate.test.ts +++ b/test/abilities/intimidate.test.ts @@ -25,7 +25,7 @@ describe("Abilities - Intimidate", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.RATTATA) .enemyAbility(Abilities.INTIMIDATE) .enemyPassiveAbility(Abilities.HYDRATION) @@ -65,7 +65,7 @@ describe("Abilities - Intimidate", () => { }, 20000); it("should lower ATK stat stage by 1 for every enemy Pokemon in a double battle on entry", async () => { - game.override.battleType("double").startingWave(3); + game.override.battleStyle("double").startingWave(3); await game.classicMode.runToSummon([Species.MIGHTYENA, Species.POOCHYENA]); game.onNextPrompt( "CheckSwitchPhase", diff --git a/test/abilities/intrepid_sword.test.ts b/test/abilities/intrepid_sword.test.ts index 28d0cd02c7f..b30ae4a9bd0 100644 --- a/test/abilities/intrepid_sword.test.ts +++ b/test/abilities/intrepid_sword.test.ts @@ -22,7 +22,7 @@ describe("Abilities - Intrepid Sword", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.enemySpecies(Species.ZACIAN); game.override.enemyAbility(Abilities.INTREPID_SWORD); game.override.ability(Abilities.INTREPID_SWORD); diff --git a/test/abilities/libero.test.ts b/test/abilities/libero.test.ts index 22abf1c248f..2e3668813c5 100644 --- a/test/abilities/libero.test.ts +++ b/test/abilities/libero.test.ts @@ -29,7 +29,7 @@ describe("Abilities - Libero", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.ability(Abilities.LIBERO); game.override.startingLevel(100); game.override.enemySpecies(Species.RATTATA); diff --git a/test/abilities/lightningrod.test.ts b/test/abilities/lightningrod.test.ts index 986899353ff..21a03baf12b 100644 --- a/test/abilities/lightningrod.test.ts +++ b/test/abilities/lightningrod.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Lightningrod", () => { game.override .moveset([Moves.SPLASH, Moves.SHOCK_WAVE]) .ability(Abilities.BALL_FETCH) - .battleType("double") + .battleStyle("double") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/abilities/limber.test.ts b/test/abilities/limber.test.ts index 2b167cc155f..4cdaa86f44c 100644 --- a/test/abilities/limber.test.ts +++ b/test/abilities/limber.test.ts @@ -23,9 +23,9 @@ describe("Abilities - Limber", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([ Moves.SPLASH ]) + .moveset([Moves.SPLASH]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) @@ -33,12 +33,12 @@ describe("Abilities - Limber", () => { }); it("should remove paralysis when gained", async () => { - game.override.ability(Abilities.LIMBER) + game.override + .ability(Abilities.LIMBER) .enemyAbility(Abilities.BALL_FETCH) .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH), - - await game.classicMode.startBattle([ Species.FEEBAS ]); + .enemyMoveset(Moves.SPLASH); + await game.classicMode.startBattle([Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.trySetStatus(StatusEffect.PARALYSIS); expect(enemy?.status?.effect).toBe(StatusEffect.PARALYSIS); diff --git a/test/abilities/magic_bounce.test.ts b/test/abilities/magic_bounce.test.ts index 7886ac5fd5c..11131640a0f 100644 --- a/test/abilities/magic_bounce.test.ts +++ b/test/abilities/magic_bounce.test.ts @@ -30,7 +30,7 @@ describe("Abilities - Magic Bounce", () => { game = new GameManager(phaserGame); game.override .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .moveset([Moves.GROWL, Moves.SPLASH]) .disableCrits() .enemySpecies(Species.MAGIKARP) @@ -60,7 +60,7 @@ describe("Abilities - Magic Bounce", () => { }); it("should individually bounce back multi-target moves", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.moveset([Moves.GROWL, Moves.SPLASH]); await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); @@ -114,7 +114,7 @@ describe("Abilities - Magic Bounce", () => { }); it("should bounce back a spread status move against both pokemon", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.moveset([Moves.GROWL, Moves.SPLASH]); game.override.enemyMoveset([Moves.SPLASH]); await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); @@ -127,7 +127,7 @@ describe("Abilities - Magic Bounce", () => { }); it("should only bounce spikes back once in doubles when both targets have magic bounce", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); await game.classicMode.startBattle([Species.MAGIKARP]); game.override.moveset([Moves.SPIKES]); @@ -227,7 +227,7 @@ describe("Abilities - Magic Bounce", () => { // TODO: stomping tantrum should consider moves that were bounced. it.todo("should cause stomping tantrum to double in power when the last move was bounced", async () => { - game.override.battleType("single"); + game.override.battleStyle("single"); await game.classicMode.startBattle([Species.MAGIKARP]); game.override.moveset([Moves.STOMPING_TANTRUM, Moves.CHARM]); @@ -309,7 +309,7 @@ describe("Abilities - Magic Bounce", () => { }); it("should always apply the leftmost available target's magic bounce when bouncing moves like sticky webs in doubles", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.moveset([Moves.STICKY_WEB, Moves.SPLASH, Moves.TRICK_ROOM]); await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); diff --git a/test/abilities/magma_armor.test.ts b/test/abilities/magma_armor.test.ts index b1d62f948d2..c5af522ca6f 100644 --- a/test/abilities/magma_armor.test.ts +++ b/test/abilities/magma_armor.test.ts @@ -23,9 +23,9 @@ describe("Abilities - Magma Armor", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([ Moves.SPLASH ]) + .moveset([Moves.SPLASH]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) @@ -33,12 +33,12 @@ describe("Abilities - Magma Armor", () => { }); it("should remove freeze when gained", async () => { - game.override.ability(Abilities.MAGMA_ARMOR) + game.override + .ability(Abilities.MAGMA_ARMOR) .enemyAbility(Abilities.BALL_FETCH) .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH), - - await game.classicMode.startBattle([ Species.FEEBAS ]); + .enemyMoveset(Moves.SPLASH); + await game.classicMode.startBattle([Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.trySetStatus(StatusEffect.FREEZE); expect(enemy?.status?.effect).toBe(StatusEffect.FREEZE); diff --git a/test/abilities/mimicry.test.ts b/test/abilities/mimicry.test.ts index df6f7905c83..598f5790aa8 100644 --- a/test/abilities/mimicry.test.ts +++ b/test/abilities/mimicry.test.ts @@ -25,7 +25,7 @@ describe("Abilities - Mimicry", () => { game.override .moveset([Moves.SPLASH]) .ability(Abilities.MIMICRY) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyMoveset(Moves.SPLASH); diff --git a/test/abilities/mirror_armor.test.ts b/test/abilities/mirror_armor.test.ts index 6b0c3f10c84..bd61f39ba75 100644 --- a/test/abilities/mirror_armor.test.ts +++ b/test/abilities/mirror_armor.test.ts @@ -27,7 +27,7 @@ describe("Ability - Mirror Armor", () => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.RATTATA) .enemyMoveset([Moves.SPLASH, Moves.STICKY_WEB, Moves.TICKLE, Moves.OCTOLOCK]) .enemyAbility(Abilities.BALL_FETCH) @@ -71,7 +71,7 @@ describe("Ability - Mirror Armor", () => { }); it("Player side + double battle Intimidate - opponents each lose -2 atk", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.ability(Abilities.MIRROR_ARMOR); game.override.enemyAbility(Abilities.INTIMIDATE); await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER]); @@ -93,7 +93,7 @@ describe("Ability - Mirror Armor", () => { }); it("Enemy side + double battle Intimidate - players each lose -2 atk", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.enemyAbility(Abilities.MIRROR_ARMOR); game.override.ability(Abilities.INTIMIDATE); await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER]); @@ -134,7 +134,7 @@ describe("Ability - Mirror Armor", () => { }); it("Player side + double battle Intimidate + Tickle - opponents each lose -3 atk, -1 def", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.ability(Abilities.MIRROR_ARMOR); game.override.enemyAbility(Abilities.INTIMIDATE); await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER]); @@ -288,7 +288,7 @@ describe("Ability - Mirror Armor", () => { }); it("Double battle + sticky web applied player side - player switches out and enemy 1 should lose -1 speed", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.ability(Abilities.MIRROR_ARMOR); await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); diff --git a/test/abilities/mold_breaker.test.ts b/test/abilities/mold_breaker.test.ts index 8f050a68d76..ba33909364f 100644 --- a/test/abilities/mold_breaker.test.ts +++ b/test/abilities/mold_breaker.test.ts @@ -24,9 +24,9 @@ describe("Abilities - Mold Breaker", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([ Moves.SPLASH ]) + .moveset([Moves.SPLASH]) .ability(Abilities.MOLD_BREAKER) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) @@ -34,17 +34,18 @@ describe("Abilities - Mold Breaker", () => { }); it("should turn off the ignore abilities arena variable after the user's move", async () => { - game.override.enemyMoveset(Moves.SPLASH) + game.override + .enemyMoveset(Moves.SPLASH) .ability(Abilities.MOLD_BREAKER) - .moveset([ Moves.ERUPTION ]) + .moveset([Moves.ERUPTION]) .startingLevel(100) .enemyLevel(2); - await game.classicMode.startBattle([ Species.MAGIKARP ]); + await game.classicMode.startBattle([Species.MAGIKARP]); const enemy = game.scene.getEnemyPokemon()!; expect(enemy.isFainted()).toBe(false); game.move.select(Moves.SPLASH); - await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase", true); expect(globalScene.arena.ignoreAbilities).toBe(false); }); diff --git a/test/abilities/moody.test.ts b/test/abilities/moody.test.ts index da24899a4b0..9b658820391 100644 --- a/test/abilities/moody.test.ts +++ b/test/abilities/moody.test.ts @@ -24,7 +24,7 @@ describe("Abilities - Moody", () => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.RATTATA) .enemyAbility(Abilities.BALL_FETCH) .ability(Abilities.MOODY) diff --git a/test/abilities/moxie.test.ts b/test/abilities/moxie.test.ts index ec93aebd2c0..bccdeda2b93 100644 --- a/test/abilities/moxie.test.ts +++ b/test/abilities/moxie.test.ts @@ -27,7 +27,7 @@ describe("Abilities - Moxie", () => { beforeEach(() => { game = new GameManager(phaserGame); const moveToUse = Moves.AERIAL_ACE; - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.enemySpecies(Species.RATTATA); game.override.enemyAbility(Abilities.MOXIE); game.override.ability(Abilities.MOXIE); @@ -54,7 +54,7 @@ describe("Abilities - Moxie", () => { it.todo( "should raise ATK stat stage by 1 when defeating an ally Pokemon", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); const moveToUse = Moves.AERIAL_ACE; await game.startBattle([Species.MIGHTYENA, Species.MIGHTYENA]); diff --git a/test/abilities/mummy.test.ts b/test/abilities/mummy.test.ts index 0971353c14d..c53b0b33598 100644 --- a/test/abilities/mummy.test.ts +++ b/test/abilities/mummy.test.ts @@ -24,7 +24,7 @@ describe("Abilities - Mummy", () => { game.override .moveset([Moves.SPLASH]) .ability(Abilities.MUMMY) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/abilities/mycelium_might.test.ts b/test/abilities/mycelium_might.test.ts index 8c7796ec736..4a5700045fa 100644 --- a/test/abilities/mycelium_might.test.ts +++ b/test/abilities/mycelium_might.test.ts @@ -24,7 +24,7 @@ describe("Abilities - Mycelium Might", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.disableCrits(); game.override.enemySpecies(Species.SHUCKLE); game.override.enemyAbility(Abilities.CLEAR_BODY); diff --git a/test/abilities/neutralizing_gas.test.ts b/test/abilities/neutralizing_gas.test.ts index 56a663db403..32c61b72e4d 100644 --- a/test/abilities/neutralizing_gas.test.ts +++ b/test/abilities/neutralizing_gas.test.ts @@ -31,7 +31,7 @@ describe("Abilities - Neutralizing Gas", () => { game.override .moveset([Moves.SPLASH]) .ability(Abilities.NEUTRALIZING_GAS) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) @@ -105,7 +105,7 @@ describe("Abilities - Neutralizing Gas", () => { }); it("should only deactivate when all setters are off the field", async () => { - game.override.enemyMoveset([Moves.ENTRAINMENT, Moves.SPLASH]).battleType("double"); + game.override.enemyMoveset([Moves.ENTRAINMENT, Moves.SPLASH]).battleStyle("double"); await game.classicMode.startBattle([Species.ACCELGOR, Species.ACCELGOR]); game.move.select(Moves.SPLASH, 0); @@ -148,7 +148,7 @@ describe("Abilities - Neutralizing Gas", () => { }); it("should deactivate upon catching a wild pokemon", async () => { - game.override.battleType("single").enemyAbility(Abilities.NEUTRALIZING_GAS).ability(Abilities.BALL_FETCH); + game.override.battleStyle("single").enemyAbility(Abilities.NEUTRALIZING_GAS).ability(Abilities.BALL_FETCH); await game.classicMode.startBattle([Species.MAGIKARP]); expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeDefined(); @@ -174,7 +174,7 @@ describe("Abilities - Neutralizing Gas", () => { }); it("should not activate abilities of pokemon no longer on the field", async () => { - game.override.battleType("single").ability(Abilities.NEUTRALIZING_GAS).enemyAbility(Abilities.DELTA_STREAM); + game.override.battleStyle("single").ability(Abilities.NEUTRALIZING_GAS).enemyAbility(Abilities.DELTA_STREAM); await game.classicMode.startBattle([Species.MAGIKARP]); const enemy = game.scene.getEnemyPokemon()!; diff --git a/test/abilities/no_guard.test.ts b/test/abilities/no_guard.test.ts index 41b8fbd27b9..b34007bc700 100644 --- a/test/abilities/no_guard.test.ts +++ b/test/abilities/no_guard.test.ts @@ -33,7 +33,7 @@ describe("Abilities - No Guard", () => { }); it("should make moves always hit regardless of move accuracy", async () => { - game.override.battleType("single"); + game.override.battleStyle("single"); await game.classicMode.startBattle([Species.REGIELEKI]); diff --git a/test/abilities/oblivious.test.ts b/test/abilities/oblivious.test.ts index d5089ef6a72..a86899ec9c6 100644 --- a/test/abilities/oblivious.test.ts +++ b/test/abilities/oblivious.test.ts @@ -23,9 +23,9 @@ describe("Abilities - Oblivious", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([ Moves.SPLASH ]) + .moveset([Moves.SPLASH]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) @@ -33,12 +33,12 @@ describe("Abilities - Oblivious", () => { }); it("should remove taunt when gained", async () => { - game.override.ability(Abilities.OBLIVIOUS) + game.override + .ability(Abilities.OBLIVIOUS) .enemyAbility(Abilities.BALL_FETCH) .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH), - - await game.classicMode.startBattle([ Species.FEEBAS ]); + .enemyMoveset(Moves.SPLASH); + await game.classicMode.startBattle([Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.addTag(BattlerTagType.TAUNT); expect(enemy?.getTag(BattlerTagType.TAUNT)).toBeTruthy(); @@ -50,12 +50,12 @@ describe("Abilities - Oblivious", () => { }); it("should remove infatuation when gained", async () => { - game.override.ability(Abilities.OBLIVIOUS) + game.override + .ability(Abilities.OBLIVIOUS) .enemyAbility(Abilities.BALL_FETCH) .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH), - - await game.classicMode.startBattle([ Species.FEEBAS ]); + .enemyMoveset(Moves.SPLASH); + await game.classicMode.startBattle([Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); vi.spyOn(enemy!, "isOppositeGender").mockReturnValue(true); enemy?.addTag(BattlerTagType.INFATUATED, 5, Moves.JUDGMENT, game.scene.getPlayerPokemon()?.id); // sourceID needs to be defined diff --git a/test/abilities/own_tempo.test.ts b/test/abilities/own_tempo.test.ts index 936b4311b20..b2f2c2f3030 100644 --- a/test/abilities/own_tempo.test.ts +++ b/test/abilities/own_tempo.test.ts @@ -23,9 +23,9 @@ describe("Abilities - Own Tempo", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([ Moves.SPLASH ]) + .moveset([Moves.SPLASH]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) @@ -33,12 +33,12 @@ describe("Abilities - Own Tempo", () => { }); it("should remove confusion when gained", async () => { - game.override.ability(Abilities.OWN_TEMPO) + game.override + .ability(Abilities.OWN_TEMPO) .enemyAbility(Abilities.BALL_FETCH) .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH), - - await game.classicMode.startBattle([ Species.FEEBAS ]); + .enemyMoveset(Moves.SPLASH); + await game.classicMode.startBattle([Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.addTag(BattlerTagType.CONFUSED); expect(enemy?.getTag(BattlerTagType.CONFUSED)).toBeTruthy(); diff --git a/test/abilities/parental_bond.test.ts b/test/abilities/parental_bond.test.ts index 2aa24e78d6e..d81486e7316 100644 --- a/test/abilities/parental_bond.test.ts +++ b/test/abilities/parental_bond.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Parental Bond", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.disableCrits(); game.override.ability(Abilities.PARENTAL_BOND); game.override.enemySpecies(Species.SNORLAX); @@ -167,7 +167,7 @@ describe("Abilities - Parental Bond", () => { }); it("should not apply to multi-target moves", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.moveset([Moves.EARTHQUAKE]); game.override.passiveAbility(Abilities.LEVITATE); diff --git a/test/abilities/pastel_veil.test.ts b/test/abilities/pastel_veil.test.ts index 65e391b7c22..4ae9763c4a6 100644 --- a/test/abilities/pastel_veil.test.ts +++ b/test/abilities/pastel_veil.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Pastel Veil", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("double") + .battleStyle("double") .moveset([Moves.TOXIC_THREAD, Moves.SPLASH]) .enemyAbility(Abilities.BALL_FETCH) .enemySpecies(Species.SUNKERN) diff --git a/test/abilities/perish_body.test.ts b/test/abilities/perish_body.test.ts index 424d35e2542..27e76cb52ad 100644 --- a/test/abilities/perish_body.test.ts +++ b/test/abilities/perish_body.test.ts @@ -21,7 +21,7 @@ describe("Abilities - Perish Song", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.disableCrits(); game.override.enemySpecies(Species.MAGIKARP); diff --git a/test/abilities/power_construct.test.ts b/test/abilities/power_construct.test.ts index c253f2ae4df..0ff90a2c0df 100644 --- a/test/abilities/power_construct.test.ts +++ b/test/abilities/power_construct.test.ts @@ -25,7 +25,7 @@ describe("Abilities - POWER CONSTRUCT", () => { beforeEach(() => { game = new GameManager(phaserGame); const moveToUse = Moves.SPLASH; - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.ability(Abilities.POWER_CONSTRUCT); game.override.moveset([moveToUse]); game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); diff --git a/test/abilities/power_spot.test.ts b/test/abilities/power_spot.test.ts index e29b5ecf775..3e4f79d7445 100644 --- a/test/abilities/power_spot.test.ts +++ b/test/abilities/power_spot.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Power Spot", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.moveset([Moves.TACKLE, Moves.BREAKING_SWIPE, Moves.SPLASH, Moves.DAZZLING_GLEAM]); game.override.enemyMoveset(Moves.SPLASH); game.override.enemySpecies(Species.SHUCKLE); diff --git a/test/abilities/protean.test.ts b/test/abilities/protean.test.ts index 574033bb13f..efa6f33fe00 100644 --- a/test/abilities/protean.test.ts +++ b/test/abilities/protean.test.ts @@ -29,7 +29,7 @@ describe("Abilities - Protean", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.ability(Abilities.PROTEAN); game.override.startingLevel(100); game.override.enemySpecies(Species.RATTATA); diff --git a/test/abilities/protosynthesis.test.ts b/test/abilities/protosynthesis.test.ts index 882474b7cef..e312ebd572c 100644 --- a/test/abilities/protosynthesis.test.ts +++ b/test/abilities/protosynthesis.test.ts @@ -27,7 +27,7 @@ describe("Abilities - Protosynthesis", () => { game.override .moveset([Moves.SPLASH, Moves.TACKLE]) .ability(Abilities.PROTOSYNTHESIS) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/abilities/quick_draw.test.ts b/test/abilities/quick_draw.test.ts index 1277fd5d3cb..0d3171e947e 100644 --- a/test/abilities/quick_draw.test.ts +++ b/test/abilities/quick_draw.test.ts @@ -24,7 +24,7 @@ describe("Abilities - Quick Draw", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.starterSpecies(Species.MAGIKARP); game.override.ability(Abilities.QUICK_DRAW); diff --git a/test/abilities/sand_spit.test.ts b/test/abilities/sand_spit.test.ts index 6896c286eed..2b655f92466 100644 --- a/test/abilities/sand_spit.test.ts +++ b/test/abilities/sand_spit.test.ts @@ -22,7 +22,7 @@ describe("Abilities - Sand Spit", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.disableCrits(); game.override.enemySpecies(Species.MAGIKARP); diff --git a/test/abilities/sand_veil.test.ts b/test/abilities/sand_veil.test.ts index c7b12a11c0e..b82c79c681b 100644 --- a/test/abilities/sand_veil.test.ts +++ b/test/abilities/sand_veil.test.ts @@ -34,7 +34,7 @@ describe("Abilities - Sand Veil", () => { game.override.enemyMoveset([Moves.TWISTER, Moves.TWISTER, Moves.TWISTER, Moves.TWISTER]); game.override.startingLevel(100); game.override.enemyLevel(100); - game.override.weather(WeatherType.SANDSTORM).battleType("double"); + game.override.weather(WeatherType.SANDSTORM).battleStyle("double"); }); test("ability should increase the evasiveness of the source", async () => { diff --git a/test/abilities/sap_sipper.test.ts b/test/abilities/sap_sipper.test.ts index f4f02844cbc..2157177b84c 100644 --- a/test/abilities/sap_sipper.test.ts +++ b/test/abilities/sap_sipper.test.ts @@ -29,7 +29,7 @@ describe("Abilities - Sap Sipper", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .disableCrits() .ability(Abilities.SAP_SIPPER) .enemySpecies(Species.RATTATA) diff --git a/test/abilities/schooling.test.ts b/test/abilities/schooling.test.ts index 35244b08e4c..803b4d2062a 100644 --- a/test/abilities/schooling.test.ts +++ b/test/abilities/schooling.test.ts @@ -25,7 +25,7 @@ describe("Abilities - SCHOOLING", () => { beforeEach(() => { game = new GameManager(phaserGame); const moveToUse = Moves.SPLASH; - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.ability(Abilities.SCHOOLING); game.override.moveset([moveToUse]); game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); diff --git a/test/abilities/screen_cleaner.test.ts b/test/abilities/screen_cleaner.test.ts index d8be1d64697..840291f6420 100644 --- a/test/abilities/screen_cleaner.test.ts +++ b/test/abilities/screen_cleaner.test.ts @@ -24,7 +24,7 @@ describe("Abilities - Screen Cleaner", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.ability(Abilities.SCREEN_CLEANER); game.override.enemySpecies(Species.SHUCKLE); }); diff --git a/test/abilities/seed_sower.test.ts b/test/abilities/seed_sower.test.ts index d78007f7500..d8edbe59857 100644 --- a/test/abilities/seed_sower.test.ts +++ b/test/abilities/seed_sower.test.ts @@ -22,7 +22,7 @@ describe("Abilities - Seed Sower", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.disableCrits(); game.override.enemySpecies(Species.MAGIKARP); diff --git a/test/abilities/serene_grace.test.ts b/test/abilities/serene_grace.test.ts index 65ca96acbbc..2547971a4b8 100644 --- a/test/abilities/serene_grace.test.ts +++ b/test/abilities/serene_grace.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Serene Grace", () => { game = new GameManager(phaserGame); game.override .disableCrits() - .battleType("single") + .battleStyle("single") .ability(Abilities.SERENE_GRACE) .moveset([Moves.AIR_SLASH]) .enemySpecies(Species.ALOLA_GEODUDE) diff --git a/test/abilities/sheer_force.test.ts b/test/abilities/sheer_force.test.ts index fae089958a5..ce3232a1869 100644 --- a/test/abilities/sheer_force.test.ts +++ b/test/abilities/sheer_force.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Sheer Force", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .ability(Abilities.SHEER_FORCE) .enemySpecies(Species.ONIX) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/abilities/shield_dust.test.ts b/test/abilities/shield_dust.test.ts index 257ebe885df..4f6783eb66a 100644 --- a/test/abilities/shield_dust.test.ts +++ b/test/abilities/shield_dust.test.ts @@ -31,7 +31,7 @@ describe("Abilities - Shield Dust", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.enemySpecies(Species.ONIX); game.override.enemyAbility(Abilities.SHIELD_DUST); game.override.startingLevel(100); diff --git a/test/abilities/shields_down.test.ts b/test/abilities/shields_down.test.ts index 4bdf22869cb..2f9d2fb1f97 100644 --- a/test/abilities/shields_down.test.ts +++ b/test/abilities/shields_down.test.ts @@ -26,7 +26,7 @@ describe("Abilities - SHIELDS DOWN", () => { beforeEach(() => { game = new GameManager(phaserGame); const moveToUse = Moves.SPLASH; - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.ability(Abilities.SHIELDS_DOWN); game.override.moveset([moveToUse]); game.override.enemyMoveset([Moves.TACKLE]); diff --git a/test/abilities/simple.test.ts b/test/abilities/simple.test.ts index b6c5fd116c0..1f084b1bf4c 100644 --- a/test/abilities/simple.test.ts +++ b/test/abilities/simple.test.ts @@ -23,7 +23,7 @@ describe("Abilities - Simple", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.BULBASAUR) .enemyAbility(Abilities.SIMPLE) .ability(Abilities.INTIMIDATE) diff --git a/test/abilities/speed_boost.test.ts b/test/abilities/speed_boost.test.ts index fa20e74108f..45ee54ffb07 100644 --- a/test/abilities/speed_boost.test.ts +++ b/test/abilities/speed_boost.test.ts @@ -27,7 +27,7 @@ describe("Abilities - Speed Boost", () => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.SHUCKLE) .enemyAbility(Abilities.BALL_FETCH) .enemyLevel(100) diff --git a/test/abilities/stakeout.test.ts b/test/abilities/stakeout.test.ts index b464b3f1dfc..b3a7bdbf287 100644 --- a/test/abilities/stakeout.test.ts +++ b/test/abilities/stakeout.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Stakeout", () => { game.override .moveset([Moves.SPLASH, Moves.SURF]) .ability(Abilities.STAKEOUT) - .battleType("single") + .battleStyle("single") .disableCrits() .startingLevel(100) .enemyLevel(100) diff --git a/test/abilities/stall.test.ts b/test/abilities/stall.test.ts index 5b67e5f4b7a..68b3fdedcd8 100644 --- a/test/abilities/stall.test.ts +++ b/test/abilities/stall.test.ts @@ -22,7 +22,7 @@ describe("Abilities - Stall", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.disableCrits(); game.override.enemySpecies(Species.REGIELEKI); game.override.enemyAbility(Abilities.STALL); diff --git a/test/abilities/steely_spirit.test.ts b/test/abilities/steely_spirit.test.ts index eb5e7aac601..be759724c3a 100644 --- a/test/abilities/steely_spirit.test.ts +++ b/test/abilities/steely_spirit.test.ts @@ -28,7 +28,7 @@ describe("Abilities - Steely Spirit", () => { beforeEach(() => { ironHeadPower = allMoves[moveToCheck].power; game = new GameManager(phaserGame); - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.enemySpecies(Species.SHUCKLE); game.override.enemyAbility(Abilities.BALL_FETCH); game.override.moveset([Moves.IRON_HEAD, Moves.SPLASH]); diff --git a/test/abilities/storm_drain.test.ts b/test/abilities/storm_drain.test.ts index 58ff477fa43..0cbad796ad8 100644 --- a/test/abilities/storm_drain.test.ts +++ b/test/abilities/storm_drain.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Storm Drain", () => { game.override .moveset([Moves.SPLASH, Moves.WATER_GUN]) .ability(Abilities.BALL_FETCH) - .battleType("double") + .battleStyle("double") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/abilities/sturdy.test.ts b/test/abilities/sturdy.test.ts index 7b7254cff15..bda8c6d1e35 100644 --- a/test/abilities/sturdy.test.ts +++ b/test/abilities/sturdy.test.ts @@ -24,7 +24,7 @@ describe("Abilities - Sturdy", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.starterSpecies(Species.LUCARIO); game.override.startingLevel(100); diff --git a/test/abilities/super_luck.test.ts b/test/abilities/super_luck.test.ts index bc9524de801..9e0b6485734 100644 --- a/test/abilities/super_luck.test.ts +++ b/test/abilities/super_luck.test.ts @@ -24,7 +24,7 @@ describe("Abilities - Super Luck", () => { game.override .moveset([Moves.TACKLE]) .ability(Abilities.SUPER_LUCK) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/abilities/supreme_overlord.test.ts b/test/abilities/supreme_overlord.test.ts index a71bf0a9354..8af0a0ac37c 100644 --- a/test/abilities/supreme_overlord.test.ts +++ b/test/abilities/supreme_overlord.test.ts @@ -31,7 +31,7 @@ describe("Abilities - Supreme Overlord", () => { basePower = move.power; game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.MAGIKARP) .enemyLevel(100) .startingLevel(1) diff --git a/test/abilities/sweet_veil.test.ts b/test/abilities/sweet_veil.test.ts index 650ee53a474..e609aa6e7d2 100644 --- a/test/abilities/sweet_veil.test.ts +++ b/test/abilities/sweet_veil.test.ts @@ -25,7 +25,7 @@ describe("Abilities - Sweet Veil", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.moveset([Moves.SPLASH, Moves.REST, Moves.YAWN]); game.override.enemySpecies(Species.MAGIKARP); game.override.enemyAbility(Abilities.BALL_FETCH); diff --git a/test/abilities/synchronize.test.ts b/test/abilities/synchronize.test.ts index 95ebf96f2fd..783201d7a5b 100644 --- a/test/abilities/synchronize.test.ts +++ b/test/abilities/synchronize.test.ts @@ -24,7 +24,7 @@ describe("Abilities - Synchronize", () => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .startingLevel(100) .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.SYNCHRONIZE) diff --git a/test/abilities/tera_shell.test.ts b/test/abilities/tera_shell.test.ts index a99ecfd4ce1..c387da30166 100644 --- a/test/abilities/tera_shell.test.ts +++ b/test/abilities/tera_shell.test.ts @@ -24,7 +24,7 @@ describe("Abilities - Tera Shell", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .ability(Abilities.TERA_SHELL) .moveset([Moves.SPLASH]) .enemySpecies(Species.SNORLAX) diff --git a/test/abilities/thermal_exchange.test.ts b/test/abilities/thermal_exchange.test.ts index 124c1dba286..c33b296d5ae 100644 --- a/test/abilities/thermal_exchange.test.ts +++ b/test/abilities/thermal_exchange.test.ts @@ -23,9 +23,9 @@ describe("Abilities - Thermal Exchange", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([ Moves.SPLASH ]) + .moveset([Moves.SPLASH]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) @@ -33,12 +33,12 @@ describe("Abilities - Thermal Exchange", () => { }); it("should remove burn when gained", async () => { - game.override.ability(Abilities.THERMAL_EXCHANGE) + game.override + .ability(Abilities.THERMAL_EXCHANGE) .enemyAbility(Abilities.BALL_FETCH) .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH), - - await game.classicMode.startBattle([ Species.FEEBAS ]); + .enemyMoveset(Moves.SPLASH); + await game.classicMode.startBattle([Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.trySetStatus(StatusEffect.BURN); expect(enemy?.status?.effect).toBe(StatusEffect.BURN); diff --git a/test/abilities/trace.test.ts b/test/abilities/trace.test.ts index 5d569208d33..7ec8d62ab51 100644 --- a/test/abilities/trace.test.ts +++ b/test/abilities/trace.test.ts @@ -25,7 +25,7 @@ describe("Abilities - Trace", () => { game.override .moveset([Moves.SPLASH]) .ability(Abilities.TRACE) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/abilities/unburden.test.ts b/test/abilities/unburden.test.ts index 769e078faf8..2af889d1da4 100644 --- a/test/abilities/unburden.test.ts +++ b/test/abilities/unburden.test.ts @@ -41,7 +41,7 @@ describe("Abilities - Unburden", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .startingLevel(1) .ability(Abilities.UNBURDEN) .moveset([Moves.SPLASH, Moves.KNOCK_OFF, Moves.PLUCK, Moves.FALSE_SWIPE]) @@ -231,7 +231,7 @@ describe("Abilities - Unburden", () => { }); it("should deactivate temporarily when a neutralizing gas user is on the field", async () => { - game.override.battleType("double").ability(Abilities.NONE); // Disable ability override so that we can properly set abilities below + game.override.battleStyle("double").ability(Abilities.NONE); // Disable ability override so that we can properly set abilities below await game.classicMode.startBattle([Species.TREECKO, Species.MEOWTH, Species.WEEZING]); const [treecko, _meowth, weezing] = game.scene.getPlayerParty(); @@ -359,7 +359,7 @@ describe("Abilities - Unburden", () => { // test for `.bypassFaint()` - doubles it("shouldn't persist when revived by revival blessing if activated while fainting", async () => { game.override - .battleType("double") + .battleStyle("double") .enemyMoveset([Moves.SPLASH, Moves.THIEF]) .moveset([Moves.SPLASH, Moves.REVIVAL_BLESSING]) .startingHeldItems([{ name: "WIDE_LENS" }]); diff --git a/test/abilities/unseen_fist.test.ts b/test/abilities/unseen_fist.test.ts index 459bb00628c..6c14e82fc39 100644 --- a/test/abilities/unseen_fist.test.ts +++ b/test/abilities/unseen_fist.test.ts @@ -24,7 +24,7 @@ describe("Abilities - Unseen Fist", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.starterSpecies(Species.URSHIFU); game.override.enemySpecies(Species.SNORLAX); game.override.enemyMoveset([Moves.PROTECT, Moves.PROTECT, Moves.PROTECT, Moves.PROTECT]); diff --git a/test/abilities/victory_star.test.ts b/test/abilities/victory_star.test.ts index 92db522871a..f3c0b5ad6b7 100644 --- a/test/abilities/victory_star.test.ts +++ b/test/abilities/victory_star.test.ts @@ -25,7 +25,7 @@ describe("Abilities - Victory Star", () => { game = new GameManager(phaserGame); game.override .moveset([Moves.TACKLE, Moves.SPLASH]) - .battleType("double") + .battleStyle("double") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/abilities/vital_spirit.test.ts b/test/abilities/vital_spirit.test.ts index 3a53c3f520e..bb274310cc0 100644 --- a/test/abilities/vital_spirit.test.ts +++ b/test/abilities/vital_spirit.test.ts @@ -23,9 +23,9 @@ describe("Abilities - Vital Spirit", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([ Moves.SPLASH ]) + .moveset([Moves.SPLASH]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) @@ -33,12 +33,12 @@ describe("Abilities - Vital Spirit", () => { }); it("should remove sleep when gained", async () => { - game.override.ability(Abilities.INSOMNIA) + game.override + .ability(Abilities.INSOMNIA) .enemyAbility(Abilities.BALL_FETCH) .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH), - - await game.classicMode.startBattle([ Species.FEEBAS ]); + .enemyMoveset(Moves.SPLASH); + await game.classicMode.startBattle([Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.trySetStatus(StatusEffect.SLEEP); expect(enemy?.status?.effect).toBe(StatusEffect.SLEEP); diff --git a/test/abilities/volt_absorb.test.ts b/test/abilities/volt_absorb.test.ts index 10735f31987..920c822eb90 100644 --- a/test/abilities/volt_absorb.test.ts +++ b/test/abilities/volt_absorb.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Volt Absorb", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.disableCrits(); }); diff --git a/test/abilities/wandering_spirit.test.ts b/test/abilities/wandering_spirit.test.ts index 375faa41972..639241aecc8 100644 --- a/test/abilities/wandering_spirit.test.ts +++ b/test/abilities/wandering_spirit.test.ts @@ -25,7 +25,7 @@ describe("Abilities - Wandering Spirit", () => { game.override .moveset([Moves.SPLASH]) .ability(Abilities.WANDERING_SPIRIT) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/abilities/water_bubble.test.ts b/test/abilities/water_bubble.test.ts index 0b85a5814da..c1e2acbd468 100644 --- a/test/abilities/water_bubble.test.ts +++ b/test/abilities/water_bubble.test.ts @@ -23,9 +23,9 @@ describe("Abilities - Water Bubble", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([ Moves.SPLASH ]) + .moveset([Moves.SPLASH]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) @@ -33,12 +33,12 @@ describe("Abilities - Water Bubble", () => { }); it("should remove burn when gained", async () => { - game.override.ability(Abilities.THERMAL_EXCHANGE) + game.override + .ability(Abilities.THERMAL_EXCHANGE) .enemyAbility(Abilities.BALL_FETCH) .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH), - - await game.classicMode.startBattle([ Species.FEEBAS ]); + .enemyMoveset(Moves.SPLASH); + await game.classicMode.startBattle([Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.trySetStatus(StatusEffect.BURN); expect(enemy?.status?.effect).toBe(StatusEffect.BURN); diff --git a/test/abilities/water_veil.test.ts b/test/abilities/water_veil.test.ts index 38c9a05600b..8e187ad8e58 100644 --- a/test/abilities/water_veil.test.ts +++ b/test/abilities/water_veil.test.ts @@ -23,9 +23,9 @@ describe("Abilities - Water Veil", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([ Moves.SPLASH ]) + .moveset([Moves.SPLASH]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) @@ -33,12 +33,12 @@ describe("Abilities - Water Veil", () => { }); it("should remove burn when gained", async () => { - game.override.ability(Abilities.THERMAL_EXCHANGE) + game.override + .ability(Abilities.THERMAL_EXCHANGE) .enemyAbility(Abilities.BALL_FETCH) .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH), - - await game.classicMode.startBattle([ Species.FEEBAS ]); + .enemyMoveset(Moves.SPLASH); + await game.classicMode.startBattle([Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.trySetStatus(StatusEffect.BURN); expect(enemy?.status?.effect).toBe(StatusEffect.BURN); diff --git a/test/abilities/wimp_out.test.ts b/test/abilities/wimp_out.test.ts index 294025a10e7..c46675376c1 100644 --- a/test/abilities/wimp_out.test.ts +++ b/test/abilities/wimp_out.test.ts @@ -31,7 +31,7 @@ describe("Abilities - Wimp Out", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .ability(Abilities.WIMP_OUT) .enemySpecies(Species.NINJASK) .enemyPassiveAbility(Abilities.NO_GUARD) @@ -342,7 +342,7 @@ describe("Abilities - Wimp Out", () => { }); it("Wimp Out activating should not cancel a double battle", async () => { - game.override.battleType("double").enemyAbility(Abilities.WIMP_OUT).enemyMoveset([Moves.SPLASH]).enemyLevel(1); + game.override.battleStyle("double").enemyAbility(Abilities.WIMP_OUT).enemyMoveset([Moves.SPLASH]).enemyLevel(1); await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); const enemyLeadPokemon = game.scene.getEnemyParty()[0]; const enemySecPokemon = game.scene.getEnemyParty()[1]; @@ -508,7 +508,7 @@ describe("Abilities - Wimp Out", () => { .moveset([Moves.MATCHA_GOTCHA, Moves.FALSE_SWIPE]) .startingLevel(50) .enemyLevel(1) - .battleType("double") + .battleStyle("double") .startingWave(wave); await game.classicMode.startBattle([Species.RAICHU, Species.PIKACHU]); const [wimpod0, wimpod1] = game.scene.getEnemyField(); @@ -534,12 +534,12 @@ describe("Abilities - Wimp Out", () => { .enemyAbility(Abilities.WIMP_OUT) .startingLevel(50) .enemyLevel(1) - .enemyMoveset([ Moves.SPLASH, Moves.ENDURE ]) - .battleType("double") - .moveset([ Moves.DRAGON_ENERGY, Moves.SPLASH ]) + .enemyMoveset([Moves.SPLASH, Moves.ENDURE]) + .battleStyle("double") + .moveset([Moves.DRAGON_ENERGY, Moves.SPLASH]) .startingWave(wave); - await game.classicMode.startBattle([ Species.REGIDRAGO, Species.MAGIKARP ]); + await game.classicMode.startBattle([Species.REGIDRAGO, Species.MAGIKARP]); // turn 1 game.move.select(Moves.DRAGON_ENERGY, 0); @@ -549,6 +549,5 @@ describe("Abilities - Wimp Out", () => { await game.phaseInterceptor.to("SelectModifierPhase"); expect(game.scene.currentBattle.waveIndex).toBe(wave + 1); - }); }); diff --git a/test/abilities/wind_power.test.ts b/test/abilities/wind_power.test.ts index b28ac3362eb..66c72d454ab 100644 --- a/test/abilities/wind_power.test.ts +++ b/test/abilities/wind_power.test.ts @@ -23,7 +23,7 @@ describe("Abilities - Wind Power", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.enemySpecies(Species.SHIFTRY); game.override.enemyAbility(Abilities.WIND_POWER); game.override.moveset([Moves.TAILWIND, Moves.SPLASH, Moves.PETAL_BLIZZARD, Moves.SANDSTORM]); diff --git a/test/abilities/wind_rider.test.ts b/test/abilities/wind_rider.test.ts index 8fdae1b24ec..f8301aa03fc 100644 --- a/test/abilities/wind_rider.test.ts +++ b/test/abilities/wind_rider.test.ts @@ -23,7 +23,7 @@ describe("Abilities - Wind Rider", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.SHIFTRY) .enemyAbility(Abilities.WIND_RIDER) .moveset([Moves.TAILWIND, Moves.SPLASH, Moves.PETAL_BLIZZARD, Moves.SANDSTORM]) diff --git a/test/abilities/wonder_skin.test.ts b/test/abilities/wonder_skin.test.ts index 18d5be36aef..d039ba1e6a7 100644 --- a/test/abilities/wonder_skin.test.ts +++ b/test/abilities/wonder_skin.test.ts @@ -23,7 +23,7 @@ describe("Abilities - Wonder Skin", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.moveset([Moves.TACKLE, Moves.CHARM]); game.override.ability(Abilities.BALL_FETCH); game.override.enemySpecies(Species.SHUCKLE); diff --git a/test/abilities/zen_mode.test.ts b/test/abilities/zen_mode.test.ts index d552d8c88ca..1eb27a8f6c7 100644 --- a/test/abilities/zen_mode.test.ts +++ b/test/abilities/zen_mode.test.ts @@ -26,7 +26,7 @@ describe("Abilities - ZEN MODE", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/abilities/zero_to_hero.test.ts b/test/abilities/zero_to_hero.test.ts index 4565aa3e8b2..2cdc516dc6b 100644 --- a/test/abilities/zero_to_hero.test.ts +++ b/test/abilities/zero_to_hero.test.ts @@ -27,7 +27,7 @@ describe("Abilities - ZERO TO HERO", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .moveset(Moves.SPLASH) .enemyMoveset(Moves.SPLASH) .enemyAbility(Abilities.BALL_FETCH); diff --git a/test/arena/arena_gravity.test.ts b/test/arena/arena_gravity.test.ts index a5ce84667f0..0ce5ac0ea4c 100644 --- a/test/arena/arena_gravity.test.ts +++ b/test/arena/arena_gravity.test.ts @@ -26,7 +26,7 @@ describe("Arena - Gravity", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .moveset([Moves.TACKLE, Moves.GRAVITY, Moves.FISSURE]) .ability(Abilities.UNNERVE) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/arena/grassy_terrain.test.ts b/test/arena/grassy_terrain.test.ts index d92fb24be5a..f8ca07bd65e 100644 --- a/test/arena/grassy_terrain.test.ts +++ b/test/arena/grassy_terrain.test.ts @@ -22,7 +22,7 @@ describe("Arena - Grassy Terrain", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .disableCrits() .enemyLevel(1) .enemySpecies(Species.SHUCKLE) diff --git a/test/arena/weather_fog.test.ts b/test/arena/weather_fog.test.ts index 784c4886648..b1edf75704b 100644 --- a/test/arena/weather_fog.test.ts +++ b/test/arena/weather_fog.test.ts @@ -24,7 +24,7 @@ describe("Weather - Fog", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.weather(WeatherType.FOG).battleType("single"); + game.override.weather(WeatherType.FOG).battleStyle("single"); game.override.moveset([Moves.TACKLE]); game.override.ability(Abilities.BALL_FETCH); game.override.enemyAbility(Abilities.BALL_FETCH); diff --git a/test/arena/weather_hail.test.ts b/test/arena/weather_hail.test.ts index 7af2edf26f2..2fa4f71d8ca 100644 --- a/test/arena/weather_hail.test.ts +++ b/test/arena/weather_hail.test.ts @@ -24,7 +24,7 @@ describe("Weather - Hail", () => { game = new GameManager(phaserGame); game.override .weather(WeatherType.HAIL) - .battleType("single") + .battleStyle("single") .moveset(Moves.SPLASH) .enemyMoveset(Moves.SPLASH) .enemySpecies(Species.MAGIKARP); diff --git a/test/arena/weather_sandstorm.test.ts b/test/arena/weather_sandstorm.test.ts index d43983c4c01..e7620f6cf30 100644 --- a/test/arena/weather_sandstorm.test.ts +++ b/test/arena/weather_sandstorm.test.ts @@ -25,7 +25,7 @@ describe("Weather - Sandstorm", () => { game = new GameManager(phaserGame); game.override .weather(WeatherType.SANDSTORM) - .battleType("single") + .battleStyle("single") .moveset(Moves.SPLASH) .enemyMoveset(Moves.SPLASH) .enemySpecies(Species.MAGIKARP); @@ -60,7 +60,7 @@ describe("Weather - Sandstorm", () => { it("does not inflict damage to Rock, Ground and Steel type Pokemon", async () => { game.override - .battleType("double") + .battleStyle("double") .enemySpecies(Species.SANDSHREW) .ability(Abilities.BALL_FETCH) .enemyAbility(Abilities.BALL_FETCH); diff --git a/test/arena/weather_strong_winds.test.ts b/test/arena/weather_strong_winds.test.ts index 3a9235d9eb9..9fcdb18c872 100644 --- a/test/arena/weather_strong_winds.test.ts +++ b/test/arena/weather_strong_winds.test.ts @@ -24,7 +24,7 @@ describe("Weather - Strong Winds", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.startingLevel(10); game.override.enemySpecies(Species.TAILLOW); game.override.enemyAbility(Abilities.DELTA_STREAM); diff --git a/test/battle/ability_swap.test.ts b/test/battle/ability_swap.test.ts index 215321f26c2..c9f91df3a48 100644 --- a/test/battle/ability_swap.test.ts +++ b/test/battle/ability_swap.test.ts @@ -26,7 +26,7 @@ describe("Test Ability Swapping", () => { game.override .moveset([Moves.SPLASH]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/battle/battle-order.test.ts b/test/battle/battle-order.test.ts index 012f1ecd4bd..43fa1e59c14 100644 --- a/test/battle/battle-order.test.ts +++ b/test/battle/battle-order.test.ts @@ -24,7 +24,7 @@ describe("Battle order", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.enemySpecies(Species.MEWTWO); game.override.enemyAbility(Abilities.INSOMNIA); game.override.ability(Abilities.INSOMNIA); @@ -70,7 +70,7 @@ describe("Battle order", () => { }, 20000); it("double - both opponents faster than player 50/50 vs 150/150", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); await game.startBattle([Species.BULBASAUR, Species.BLASTOISE]); const playerPokemon = game.scene.getPlayerField(); @@ -94,7 +94,7 @@ describe("Battle order", () => { }, 20000); it("double - speed tie except 1 - 100/100 vs 100/150", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); await game.startBattle([Species.BULBASAUR, Species.BLASTOISE]); const playerPokemon = game.scene.getPlayerField(); @@ -118,7 +118,7 @@ describe("Battle order", () => { }, 20000); it("double - speed tie 100/150 vs 100/150", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); await game.startBattle([Species.BULBASAUR, Species.BLASTOISE]); const playerPokemon = game.scene.getPlayerField(); diff --git a/test/battle/battle.test.ts b/test/battle/battle.test.ts index 36d197d1289..51304c7d5dd 100644 --- a/test/battle/battle.test.ts +++ b/test/battle/battle.test.ts @@ -94,7 +94,7 @@ describe("Test Battle Phase", () => { game.override.starterSpecies(Species.MEWTWO); game.override.enemySpecies(Species.RATTATA); game.override.startingLevel(2000); - game.override.startingWave(3).battleType("single"); + game.override.startingWave(3).battleStyle("single"); game.override.moveset([Moves.TACKLE]); game.override.enemyAbility(Abilities.HYDRATION); game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); @@ -111,7 +111,7 @@ describe("Test Battle Phase", () => { game.override.moveset([Moves.TACKLE]); game.override.enemyAbility(Abilities.HYDRATION); game.override.enemyMoveset([Moves.TAIL_WHIP, Moves.TAIL_WHIP, Moves.TAIL_WHIP, Moves.TAIL_WHIP]); - game.override.battleType("single"); + game.override.battleStyle("single"); await game.startBattle(); game.move.select(Moves.TACKLE); await game.phaseInterceptor.runFrom(EnemyCommandPhase).to(TurnInitPhase, false); @@ -203,7 +203,7 @@ describe("Test Battle Phase", () => { }, 20000); it("2vs1", async () => { - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.enemySpecies(Species.MIGHTYENA); game.override.enemyAbility(Abilities.HYDRATION); game.override.ability(Abilities.HYDRATION); @@ -213,7 +213,7 @@ describe("Test Battle Phase", () => { }, 20000); it("1vs1", async () => { - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.enemySpecies(Species.MIGHTYENA); game.override.enemyAbility(Abilities.HYDRATION); game.override.ability(Abilities.HYDRATION); @@ -223,7 +223,7 @@ describe("Test Battle Phase", () => { }, 20000); it("2vs2", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.enemySpecies(Species.MIGHTYENA); game.override.enemyAbility(Abilities.HYDRATION); game.override.ability(Abilities.HYDRATION); @@ -234,7 +234,7 @@ describe("Test Battle Phase", () => { }, 20000); it("4vs2", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.enemySpecies(Species.MIGHTYENA); game.override.enemyAbility(Abilities.HYDRATION); game.override.ability(Abilities.HYDRATION); @@ -246,7 +246,7 @@ describe("Test Battle Phase", () => { it("kill opponent pokemon", async () => { const moveToUse = Moves.SPLASH; - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.starterSpecies(Species.MEWTWO); game.override.enemySpecies(Species.RATTATA); game.override.enemyAbility(Abilities.HYDRATION); @@ -266,7 +266,7 @@ describe("Test Battle Phase", () => { it("to next turn", async () => { const moveToUse = Moves.SPLASH; - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.starterSpecies(Species.MEWTWO); game.override.enemySpecies(Species.RATTATA); game.override.enemyAbility(Abilities.HYDRATION); @@ -285,7 +285,7 @@ describe("Test Battle Phase", () => { it("does not set new weather if staying in same biome", async () => { const moveToUse = Moves.SPLASH; game.override - .battleType("single") + .battleStyle("single") .starterSpecies(Species.MEWTWO) .enemySpecies(Species.RATTATA) .enemyAbility(Abilities.HYDRATION) @@ -309,7 +309,7 @@ describe("Test Battle Phase", () => { it("does not force switch if active pokemon faints at same time as enemy mon and is revived in post-battle", async () => { const moveToUse = Moves.TAKE_DOWN; game.override - .battleType("single") + .battleStyle("single") .starterSpecies(Species.SAWK) .enemySpecies(Species.RATTATA) .startingWave(1) diff --git a/test/battle/damage_calculation.test.ts b/test/battle/damage_calculation.test.ts index dab1fc81caa..e8b3b65bd29 100644 --- a/test/battle/damage_calculation.test.ts +++ b/test/battle/damage_calculation.test.ts @@ -26,7 +26,7 @@ describe("Battle Mechanics - Damage Calculation", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.SNORLAX) .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH) diff --git a/test/battle/double_battle.test.ts b/test/battle/double_battle.test.ts index 21d27573d22..a30d55aac3d 100644 --- a/test/battle/double_battle.test.ts +++ b/test/battle/double_battle.test.ts @@ -33,7 +33,7 @@ describe("Double Battles", () => { // double-battle player's pokemon both fainted in same round, then revive one, and next double battle summons two player's pokemon successfully. // (There were bugs that either only summon one when can summon two, player stuck in switchPhase etc) it("3v2 edge case: player summons 2 pokemon on the next battle after being fainted and revived", async () => { - game.override.battleType("double").enemyMoveset(Moves.SPLASH).moveset(Moves.SPLASH); + game.override.battleStyle("double").enemyMoveset(Moves.SPLASH).moveset(Moves.SPLASH); await game.startBattle([Species.BULBASAUR, Species.CHARIZARD, Species.SQUIRTLE]); game.move.select(Moves.SPLASH); diff --git a/test/battle/inverse_battle.test.ts b/test/battle/inverse_battle.test.ts index 83109c35740..f8afa3518a9 100644 --- a/test/battle/inverse_battle.test.ts +++ b/test/battle/inverse_battle.test.ts @@ -30,7 +30,7 @@ describe("Inverse Battle", () => { game.challengeMode.addChallenge(Challenges.INVERSE_BATTLE, 1, 1); game.override - .battleType("single") + .battleStyle("single") .starterSpecies(Species.FEEBAS) .ability(Abilities.BALL_FETCH) .enemySpecies(Species.MAGIKARP) diff --git a/test/battle/special_battle.test.ts b/test/battle/special_battle.test.ts index cf7f3733484..46dd8eaa010 100644 --- a/test/battle/special_battle.test.ts +++ b/test/battle/special_battle.test.ts @@ -32,63 +32,63 @@ describe("Test Battle Phase", () => { }); it("startBattle 2vs1 boss", async () => { - game.override.battleType("single").startingWave(10); + game.override.battleStyle("single").startingWave(10); await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(Mode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs2 boss", async () => { - game.override.battleType("double").startingWave(10); + game.override.battleStyle("double").startingWave(10); await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(Mode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs2 trainer", async () => { - game.override.battleType("double").startingWave(5); + game.override.battleStyle("double").startingWave(5); await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(Mode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs1 trainer", async () => { - game.override.battleType("single").startingWave(5); + game.override.battleStyle("single").startingWave(5); await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(Mode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs1 rival", async () => { - game.override.battleType("single").startingWave(8); + game.override.battleStyle("single").startingWave(8); await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(Mode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs2 rival", async () => { - game.override.battleType("double").startingWave(8); + game.override.battleStyle("double").startingWave(8); await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(Mode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 1vs1 trainer", async () => { - game.override.battleType("single").startingWave(5); + game.override.battleStyle("single").startingWave(5); await game.startBattle([Species.BLASTOISE]); expect(game.scene.ui?.getMode()).toBe(Mode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs2 trainer", async () => { - game.override.battleType("double").startingWave(5); + game.override.battleStyle("double").startingWave(5); await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(Mode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 4vs2 trainer", async () => { - game.override.battleType("double").startingWave(5); + game.override.battleStyle("double").startingWave(5); await game.startBattle([Species.BLASTOISE, Species.CHARIZARD, Species.DARKRAI, Species.GABITE]); expect(game.scene.ui?.getMode()).toBe(Mode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); diff --git a/test/boss-pokemon.test.ts b/test/boss-pokemon.test.ts index 6b150de2d2b..9df69da09b7 100644 --- a/test/boss-pokemon.test.ts +++ b/test/boss-pokemon.test.ts @@ -26,7 +26,7 @@ describe("Boss Pokemon / Shields", () => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .disableTrainerWaves() .disableCrits() .enemySpecies(Species.RATTATA) @@ -63,7 +63,7 @@ describe("Boss Pokemon / Shields", () => { }); it("should reduce the number of shields if we are in a double battle", async () => { - game.override.battleType("double").startingWave(150); // Floor 150 > 2 shields / 3 health segments + game.override.battleStyle("double").startingWave(150); // Floor 150 > 2 shields / 3 health segments await game.classicMode.startBattle([Species.MEWTWO]); @@ -105,7 +105,7 @@ describe("Boss Pokemon / Shields", () => { }); it("breaking multiple shields at once requires extra damage", async () => { - game.override.battleType("double").enemyHealthSegments(5); + game.override.battleStyle("double").enemyHealthSegments(5); await game.classicMode.startBattle([Species.MEWTWO]); @@ -140,7 +140,7 @@ describe("Boss Pokemon / Shields", () => { it("the number of stat stage boosts is consistent when several shields are broken at once", async () => { const shieldsToBreak = 4; - game.override.battleType("double").enemyHealthSegments(shieldsToBreak + 1); + game.override.battleStyle("double").enemyHealthSegments(shieldsToBreak + 1); await game.classicMode.startBattle([Species.MEWTWO]); diff --git a/test/daily_mode.test.ts b/test/daily_mode.test.ts index c530fca61a6..6b95543fb3b 100644 --- a/test/daily_mode.test.ts +++ b/test/daily_mode.test.ts @@ -57,7 +57,7 @@ describe("Shop modifications", async () => { game.override .startingWave(9) .startingBiome(Biome.ICE_CAVE) - .battleType("single") + .battleStyle("single") .startingLevel(100) // Avoid levelling up .disableTrainerWaves() .moveset([Moves.SPLASH]) diff --git a/test/data/status_effect.test.ts b/test/data/status_effect.test.ts index 0fd2daa308b..111136bf0a2 100644 --- a/test/data/status_effect.test.ts +++ b/test/data/status_effect.test.ts @@ -358,7 +358,7 @@ describe("Status Effects", () => { game.override .moveset([Moves.SPLASH]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) @@ -414,7 +414,7 @@ describe("Status Effects", () => { game.override .moveset([Moves.SPLASH]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/escape-calculations.test.ts b/test/escape-calculations.test.ts index b4504c7359c..d591bdec9fc 100644 --- a/test/escape-calculations.test.ts +++ b/test/escape-calculations.test.ts @@ -25,7 +25,7 @@ describe("Escape chance calculations", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.BULBASAUR) .enemyAbility(Abilities.INSOMNIA) .ability(Abilities.INSOMNIA); @@ -97,7 +97,7 @@ describe("Escape chance calculations", () => { }, 20000); it("double non-boss opponent", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); await game.classicMode.startBattle([Species.BULBASAUR, Species.ABOMASNOW]); const playerPokemon = game.scene.getPlayerField(); @@ -262,7 +262,7 @@ describe("Escape chance calculations", () => { }, 20000); it("double boss opponent", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.startingWave(10); await game.classicMode.startBattle([Species.BULBASAUR, Species.ABOMASNOW]); diff --git a/test/evolution.test.ts b/test/evolution.test.ts index dd6795bf161..68d02402eac 100644 --- a/test/evolution.test.ts +++ b/test/evolution.test.ts @@ -28,7 +28,7 @@ describe("Evolution", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.enemySpecies(Species.MAGIKARP); game.override.enemyAbility(Abilities.BALL_FETCH); diff --git a/test/items/dire_hit.test.ts b/test/items/dire_hit.test.ts index 038d88ddc73..f6197e097c2 100644 --- a/test/items/dire_hit.test.ts +++ b/test/items/dire_hit.test.ts @@ -36,7 +36,7 @@ describe("Items - Dire Hit", () => { .enemyMoveset(Moves.SPLASH) .moveset([Moves.POUND]) .startingHeldItems([{ name: "DIRE_HIT" }]) - .battleType("single") + .battleStyle("single") .disableCrits(); }, 20000); diff --git a/test/items/eviolite.test.ts b/test/items/eviolite.test.ts index 2b82e2145e9..43fd6a795bb 100644 --- a/test/items/eviolite.test.ts +++ b/test/items/eviolite.test.ts @@ -22,7 +22,7 @@ describe("Items - Eviolite", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single").startingHeldItems([{ name: "EVIOLITE" }]); + game.override.battleStyle("single").startingHeldItems([{ name: "EVIOLITE" }]); }); it("should provide 50% boost to DEF and SPDEF for unevolved, unfused pokemon", async () => { diff --git a/test/items/exp_booster.test.ts b/test/items/exp_booster.test.ts index 2b1308f1afb..3fe31e5c202 100644 --- a/test/items/exp_booster.test.ts +++ b/test/items/exp_booster.test.ts @@ -24,7 +24,7 @@ describe("EXP Modifier Items", () => { game.override.enemyAbility(Abilities.BALL_FETCH); game.override.ability(Abilities.BALL_FETCH); - game.override.battleType("single"); + game.override.battleStyle("single"); }); it("EXP booster items stack multiplicatively", async () => { diff --git a/test/items/grip_claw.test.ts b/test/items/grip_claw.test.ts index aa7c23ca43d..2396a7ca072 100644 --- a/test/items/grip_claw.test.ts +++ b/test/items/grip_claw.test.ts @@ -27,7 +27,7 @@ describe("Items - Grip Claw", () => { game = new GameManager(phaserGame); game.override - .battleType("double") + .battleStyle("double") .moveset([Moves.TACKLE, Moves.SPLASH, Moves.ATTRACT]) .startingHeldItems([{ name: "GRIP_CLAW", count: 1 }]) .enemySpecies(Species.SNORLAX) @@ -101,7 +101,7 @@ describe("Items - Grip Claw", () => { it("should not allow Pollen Puff to steal items when healing ally", async () => { game.override - .battleType("double") + .battleStyle("double") .moveset([Moves.POLLEN_PUFF, Moves.ENDURE]) .startingHeldItems([ { name: "GRIP_CLAW", count: 1 }, diff --git a/test/items/leek.test.ts b/test/items/leek.test.ts index afb31a5f9fa..5f9be882bc1 100644 --- a/test/items/leek.test.ts +++ b/test/items/leek.test.ts @@ -29,7 +29,7 @@ describe("Items - Leek", () => { .startingHeldItems([{ name: "LEEK" }]) .moveset([Moves.TACKLE]) .disableCrits() - .battleType("single"); + .battleStyle("single"); }); it("should raise CRIT stage by 2 when held by FARFETCHD", async () => { diff --git a/test/items/leftovers.test.ts b/test/items/leftovers.test.ts index ad22e9c3cae..19739703f19 100644 --- a/test/items/leftovers.test.ts +++ b/test/items/leftovers.test.ts @@ -23,7 +23,7 @@ describe("Items - Leftovers", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.startingLevel(2000); game.override.ability(Abilities.UNNERVE); game.override.moveset([Moves.SPLASH]); diff --git a/test/items/light_ball.test.ts b/test/items/light_ball.test.ts index 1f5227142eb..e85fb1b602b 100644 --- a/test/items/light_ball.test.ts +++ b/test/items/light_ball.test.ts @@ -25,7 +25,7 @@ describe("Items - Light Ball", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); }); it("LIGHT_BALL activates in battle correctly", async () => { diff --git a/test/items/lock_capsule.test.ts b/test/items/lock_capsule.test.ts index 4e4182b3038..9cc6046307e 100644 --- a/test/items/lock_capsule.test.ts +++ b/test/items/lock_capsule.test.ts @@ -25,7 +25,7 @@ describe("Items - Lock Capsule", () => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .startingLevel(200) .moveset([Moves.SURF]) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/items/metal_powder.test.ts b/test/items/metal_powder.test.ts index ed96d3c498b..37686710848 100644 --- a/test/items/metal_powder.test.ts +++ b/test/items/metal_powder.test.ts @@ -25,7 +25,7 @@ describe("Items - Metal Powder", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); }); it("METAL_POWDER activates in battle correctly", async () => { diff --git a/test/items/multi_lens.test.ts b/test/items/multi_lens.test.ts index 176e8213f55..ff6154b8283 100644 --- a/test/items/multi_lens.test.ts +++ b/test/items/multi_lens.test.ts @@ -27,7 +27,7 @@ describe("Items - Multi Lens", () => { .moveset([Moves.TACKLE, Moves.TRAILBLAZE, Moves.TACHYON_CUTTER, Moves.FUTURE_SIGHT]) .ability(Abilities.BALL_FETCH) .startingHeldItems([{ name: "MULTI_LENS" }]) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.SNORLAX) .enemyAbility(Abilities.BALL_FETCH) @@ -99,7 +99,7 @@ describe("Items - Multi Lens", () => { }); it("should enhance multi-target moves", async () => { - game.override.battleType("double").moveset([Moves.SWIFT, Moves.SPLASH]); + game.override.battleStyle("double").moveset([Moves.SWIFT, Moves.SPLASH]); await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); @@ -213,7 +213,7 @@ describe("Items - Multi Lens", () => { }); it("should not allow Pollen Puff to heal ally more than once", async () => { - game.override.battleType("double").moveset([Moves.POLLEN_PUFF, Moves.ENDURE]); + game.override.battleStyle("double").moveset([Moves.POLLEN_PUFF, Moves.ENDURE]); await game.classicMode.startBattle([Species.BULBASAUR, Species.OMANYTE]); const [, rightPokemon] = game.scene.getPlayerField(); diff --git a/test/items/mystical_rock.test.ts b/test/items/mystical_rock.test.ts index 0558bc21fe1..59119ce8611 100644 --- a/test/items/mystical_rock.test.ts +++ b/test/items/mystical_rock.test.ts @@ -29,7 +29,7 @@ describe("Items - Mystical Rock", () => { .enemyAbility(Abilities.BALL_FETCH) .moveset([Moves.SUNNY_DAY, Moves.GRASSY_TERRAIN]) .startingHeldItems([{ name: "MYSTICAL_ROCK", count: 2 }]) - .battleType("single"); + .battleStyle("single"); }); it("should increase weather duration by +2 turns per stack", async () => { diff --git a/test/items/quick_powder.test.ts b/test/items/quick_powder.test.ts index 7115cad8cd1..6937d6093f3 100644 --- a/test/items/quick_powder.test.ts +++ b/test/items/quick_powder.test.ts @@ -25,7 +25,7 @@ describe("Items - Quick Powder", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); }); it("QUICK_POWDER activates in battle correctly", async () => { diff --git a/test/items/reviver_seed.test.ts b/test/items/reviver_seed.test.ts index c06f354a94a..c109794d3d2 100644 --- a/test/items/reviver_seed.test.ts +++ b/test/items/reviver_seed.test.ts @@ -28,7 +28,7 @@ describe("Items - Reviver Seed", () => { game.override .moveset([Moves.SPLASH, Moves.TACKLE, Moves.ENDURE]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/items/scope_lens.test.ts b/test/items/scope_lens.test.ts index abd5cd7e75c..4d2fd63f87b 100644 --- a/test/items/scope_lens.test.ts +++ b/test/items/scope_lens.test.ts @@ -27,7 +27,7 @@ describe("Items - Scope Lens", () => { .enemyMoveset(Moves.SPLASH) .moveset([Moves.POUND]) .startingHeldItems([{ name: "SCOPE_LENS" }]) - .battleType("single") + .battleStyle("single") .disableCrits(); }, 20000); diff --git a/test/items/temp_stat_stage_booster.test.ts b/test/items/temp_stat_stage_booster.test.ts index 6417f898e3e..ccbabf01ccb 100644 --- a/test/items/temp_stat_stage_booster.test.ts +++ b/test/items/temp_stat_stage_booster.test.ts @@ -30,7 +30,7 @@ describe("Items - Temporary Stat Stage Boosters", () => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.SHUCKLE) .enemyMoveset(Moves.SPLASH) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/items/thick_club.test.ts b/test/items/thick_club.test.ts index 69ca316d455..9e9cd2e2ec8 100644 --- a/test/items/thick_club.test.ts +++ b/test/items/thick_club.test.ts @@ -25,7 +25,7 @@ describe("Items - Thick Club", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); }); it("THICK_CLUB activates in battle correctly", async () => { diff --git a/test/items/toxic_orb.test.ts b/test/items/toxic_orb.test.ts index 57e6b651b66..d02679e17c1 100644 --- a/test/items/toxic_orb.test.ts +++ b/test/items/toxic_orb.test.ts @@ -24,7 +24,7 @@ describe("Items - Toxic orb", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.MAGIKARP) .ability(Abilities.BALL_FETCH) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/after_you.test.ts b/test/moves/after_you.test.ts index fde19b87b5d..3fa7c9ceb0a 100644 --- a/test/moves/after_you.test.ts +++ b/test/moves/after_you.test.ts @@ -25,7 +25,7 @@ describe("Moves - After You", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("double") + .battleStyle("double") .enemyLevel(5) .enemySpecies(Species.PIKACHU) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/alluring_voice.test.ts b/test/moves/alluring_voice.test.ts index 777078e4786..240e008f311 100644 --- a/test/moves/alluring_voice.test.ts +++ b/test/moves/alluring_voice.test.ts @@ -25,7 +25,7 @@ describe("Moves - Alluring Voice", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.ICE_SCALES) diff --git a/test/moves/aromatherapy.test.ts b/test/moves/aromatherapy.test.ts index fe7a008249f..c361f4e8bbd 100644 --- a/test/moves/aromatherapy.test.ts +++ b/test/moves/aromatherapy.test.ts @@ -26,7 +26,7 @@ describe("Moves - Aromatherapy", () => { game.override .moveset([Moves.AROMATHERAPY, Moves.SPLASH]) .statusEffect(StatusEffect.BURN) - .battleType("double") + .battleStyle("double") .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH); }); diff --git a/test/moves/assist.test.ts b/test/moves/assist.test.ts index 68322a7f193..d0385399811 100644 --- a/test/moves/assist.test.ts +++ b/test/moves/assist.test.ts @@ -29,7 +29,7 @@ describe("Moves - Assist", () => { // because the normal moveset override doesn't allow for accurate testing of moveset changes game.override .ability(Abilities.BALL_FETCH) - .battleType("double") + .battleStyle("double") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyLevel(100) diff --git a/test/moves/astonish.test.ts b/test/moves/astonish.test.ts index 53922060ae6..1713df1de15 100644 --- a/test/moves/astonish.test.ts +++ b/test/moves/astonish.test.ts @@ -27,7 +27,7 @@ describe("Moves - Astonish", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.moveset([Moves.ASTONISH, Moves.SPLASH]); game.override.enemySpecies(Species.BLASTOISE); game.override.enemyAbility(Abilities.INSOMNIA); diff --git a/test/moves/aurora_veil.test.ts b/test/moves/aurora_veil.test.ts index 31f6497bae5..ef53b69b4e4 100644 --- a/test/moves/aurora_veil.test.ts +++ b/test/moves/aurora_veil.test.ts @@ -35,7 +35,7 @@ describe("Moves - Aurora Veil", () => { beforeEach(() => { game = new GameManager(phaserGame); globalScene = game.scene; - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.ability(Abilities.NONE); game.override.moveset([Moves.ABSORB, Moves.ROCK_SLIDE, Moves.TACKLE]); game.override.enemyLevel(100); @@ -62,7 +62,7 @@ describe("Moves - Aurora Veil", () => { }); it("reduces damage of physical attacks by a third in a double battle", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); const moveToUse = Moves.ROCK_SLIDE; await game.classicMode.startBattle([Species.SHUCKLE, Species.SHUCKLE]); @@ -98,7 +98,7 @@ describe("Moves - Aurora Veil", () => { }); it("reduces damage of special attacks by a third in a double battle", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); const moveToUse = Moves.DAZZLING_GLEAM; await game.classicMode.startBattle([Species.SHUCKLE, Species.SHUCKLE]); diff --git a/test/moves/autotomize.test.ts b/test/moves/autotomize.test.ts index 62ef185dea8..08e55f242bc 100644 --- a/test/moves/autotomize.test.ts +++ b/test/moves/autotomize.test.ts @@ -24,7 +24,7 @@ describe("Moves - Autotomize", () => { game = new GameManager(phaserGame); game.override .moveset([Moves.AUTOTOMIZE, Moves.KINGS_SHIELD, Moves.FALSE_SWIPE]) - .battleType("single") + .battleStyle("single") .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH); }); diff --git a/test/moves/baddy_bad.test.ts b/test/moves/baddy_bad.test.ts index cba13c7ac68..ed6c9239eea 100644 --- a/test/moves/baddy_bad.test.ts +++ b/test/moves/baddy_bad.test.ts @@ -22,7 +22,7 @@ describe("Moves - Baddy Bad", () => { game = new GameManager(phaserGame); game.override .moveset([Moves.SPLASH]) - .battleType("single") + .battleStyle("single") .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH) diff --git a/test/moves/baneful_bunker.test.ts b/test/moves/baneful_bunker.test.ts index 4624d77dc42..4d0d7237c00 100644 --- a/test/moves/baneful_bunker.test.ts +++ b/test/moves/baneful_bunker.test.ts @@ -24,7 +24,7 @@ describe("Moves - Baneful Bunker", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.moveset(Moves.SLASH); diff --git a/test/moves/baton_pass.test.ts b/test/moves/baton_pass.test.ts index 9db6ec7c518..143ed285023 100644 --- a/test/moves/baton_pass.test.ts +++ b/test/moves/baton_pass.test.ts @@ -25,7 +25,7 @@ describe("Moves - Baton Pass", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) .moveset([Moves.BATON_PASS, Moves.NASTY_PLOT, Moves.SPLASH]) diff --git a/test/moves/beak_blast.test.ts b/test/moves/beak_blast.test.ts index 252b28448fd..45841cecd52 100644 --- a/test/moves/beak_blast.test.ts +++ b/test/moves/beak_blast.test.ts @@ -27,7 +27,7 @@ describe("Moves - Beak Blast", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .ability(Abilities.UNNERVE) .moveset([Moves.BEAK_BLAST]) .enemySpecies(Species.SNORLAX) diff --git a/test/moves/beat_up.test.ts b/test/moves/beat_up.test.ts index 7e67f2ea363..ad6cad40d32 100644 --- a/test/moves/beat_up.test.ts +++ b/test/moves/beat_up.test.ts @@ -23,7 +23,7 @@ describe("Moves - Beat Up", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.enemySpecies(Species.SNORLAX); game.override.enemyLevel(100); diff --git a/test/moves/burning_jealousy.test.ts b/test/moves/burning_jealousy.test.ts index 04966b24206..ea02bf5f4f5 100644 --- a/test/moves/burning_jealousy.test.ts +++ b/test/moves/burning_jealousy.test.ts @@ -25,7 +25,7 @@ describe("Moves - Burning Jealousy", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.ICE_SCALES) @@ -50,7 +50,7 @@ describe("Moves - Burning Jealousy", () => { }); it("should still burn the opponent if their stat stages were both raised and lowered in the same turn", async () => { - game.override.starterSpecies(0).battleType("double"); + game.override.starterSpecies(0).battleStyle("double"); await game.classicMode.startBattle([Species.FEEBAS, Species.ABRA]); const enemy = game.scene.getEnemyPokemon()!; diff --git a/test/moves/camouflage.test.ts b/test/moves/camouflage.test.ts index 0bbab6a629a..38cdef80fc1 100644 --- a/test/moves/camouflage.test.ts +++ b/test/moves/camouflage.test.ts @@ -27,7 +27,7 @@ describe("Moves - Camouflage", () => { game.override .moveset([Moves.CAMOUFLAGE]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.REGIELEKI) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/ceaseless_edge.test.ts b/test/moves/ceaseless_edge.test.ts index d54f1bd9f21..72e552bef6f 100644 --- a/test/moves/ceaseless_edge.test.ts +++ b/test/moves/ceaseless_edge.test.ts @@ -26,7 +26,7 @@ describe("Moves - Ceaseless Edge", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.enemySpecies(Species.RATTATA); game.override.enemyAbility(Abilities.RUN_AWAY); game.override.enemyPassiveAbility(Abilities.RUN_AWAY); diff --git a/test/moves/chilly_reception.test.ts b/test/moves/chilly_reception.test.ts index 39342a921b6..56da5dd400c 100644 --- a/test/moves/chilly_reception.test.ts +++ b/test/moves/chilly_reception.test.ts @@ -24,7 +24,7 @@ describe("Moves - Chilly Reception", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .moveset([Moves.CHILLY_RECEPTION, Moves.SNOWSCAPE]) .enemyMoveset(Array(4).fill(Moves.SPLASH)) .enemyAbility(Abilities.BALL_FETCH) @@ -70,7 +70,7 @@ describe("Moves - Chilly Reception", () => { // enemy uses another move and weather doesn't change it("check case - enemy not selecting chilly reception doesn't change weather ", async () => { game.override - .battleType("single") + .battleStyle("single") .enemyMoveset([Moves.CHILLY_RECEPTION, Moves.TACKLE]) .moveset(Array(4).fill(Moves.SPLASH)); @@ -85,7 +85,7 @@ describe("Moves - Chilly Reception", () => { it("enemy trainer - expected behavior ", async () => { game.override - .battleType("single") + .battleStyle("single") .startingWave(8) .enemyMoveset(Array(4).fill(Moves.CHILLY_RECEPTION)) .enemySpecies(Species.MAGIKARP) diff --git a/test/moves/chloroblast.test.ts b/test/moves/chloroblast.test.ts index f08eca100c4..175227bbd5e 100644 --- a/test/moves/chloroblast.test.ts +++ b/test/moves/chloroblast.test.ts @@ -24,7 +24,7 @@ describe("Moves - Chloroblast", () => { game.override .moveset([Moves.CHLOROBLAST]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/copycat.test.ts b/test/moves/copycat.test.ts index 0d9b0951f89..2e6e8098835 100644 --- a/test/moves/copycat.test.ts +++ b/test/moves/copycat.test.ts @@ -31,7 +31,7 @@ describe("Moves - Copycat", () => { game.override .moveset([Moves.COPYCAT, Moves.SPIKY_SHIELD, Moves.SWORDS_DANCE, Moves.SPLASH]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .starterSpecies(Species.FEEBAS) .enemySpecies(Species.MAGIKARP) diff --git a/test/moves/crafty_shield.test.ts b/test/moves/crafty_shield.test.ts index 3a2df6a3446..c61e6d3848a 100644 --- a/test/moves/crafty_shield.test.ts +++ b/test/moves/crafty_shield.test.ts @@ -26,7 +26,7 @@ describe("Moves - Crafty Shield", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.moveset([Moves.CRAFTY_SHIELD, Moves.SPLASH, Moves.SWORDS_DANCE]); diff --git a/test/moves/defog.test.ts b/test/moves/defog.test.ts index 64904e964c4..58631150b6f 100644 --- a/test/moves/defog.test.ts +++ b/test/moves/defog.test.ts @@ -25,7 +25,7 @@ describe("Moves - Defog", () => { game.override .moveset([Moves.MIST, Moves.SAFEGUARD, Moves.SPLASH]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.SHUCKLE) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/destiny_bond.test.ts b/test/moves/destiny_bond.test.ts index c39d40427ad..6e6446f464f 100644 --- a/test/moves/destiny_bond.test.ts +++ b/test/moves/destiny_bond.test.ts @@ -33,7 +33,7 @@ describe("Moves - Destiny Bond", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .ability(Abilities.UNNERVE) // Pre-emptively prevent flakiness from opponent berries .enemySpecies(Species.RATTATA) .enemyAbility(Abilities.RUN_AWAY) @@ -157,7 +157,7 @@ describe("Moves - Destiny Bond", () => { }); it("should not KO an ally", async () => { - game.override.moveset([Moves.DESTINY_BOND, Moves.CRUNCH]).battleType("double"); + game.override.moveset([Moves.DESTINY_BOND, Moves.CRUNCH]).battleStyle("double"); await game.classicMode.startBattle([Species.SHEDINJA, Species.BULBASAUR, Species.SQUIRTLE]); const enemyPokemon0 = game.scene.getEnemyField()[0]; @@ -201,7 +201,7 @@ describe("Moves - Destiny Bond", () => { }); it("should not cause a crash if the user is KO'd by Pledge moves", async () => { - game.override.moveset([Moves.GRASS_PLEDGE, Moves.WATER_PLEDGE]).battleType("double"); + game.override.moveset([Moves.GRASS_PLEDGE, Moves.WATER_PLEDGE]).battleStyle("double"); await game.classicMode.startBattle(defaultParty); const enemyPokemon0 = game.scene.getEnemyField()[0]; diff --git a/test/moves/diamond_storm.test.ts b/test/moves/diamond_storm.test.ts index 2363122f0d7..9ba62bbc52d 100644 --- a/test/moves/diamond_storm.test.ts +++ b/test/moves/diamond_storm.test.ts @@ -25,14 +25,14 @@ describe("Moves - Diamond Storm", () => { game = new GameManager(phaserGame); game.override .moveset([Moves.DIAMOND_STORM]) - .battleType("single") + .battleStyle("single") .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH); }); it("should only increase defense once even if hitting 2 pokemon", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); const diamondStorm = allMoves[Moves.DIAMOND_STORM]; vi.spyOn(diamondStorm, "chance", "get").mockReturnValue(100); vi.spyOn(diamondStorm, "accuracy", "get").mockReturnValue(100); diff --git a/test/moves/dig.test.ts b/test/moves/dig.test.ts index 81339111656..a53456ec083 100644 --- a/test/moves/dig.test.ts +++ b/test/moves/dig.test.ts @@ -27,7 +27,7 @@ describe("Moves - Dig", () => { game = new GameManager(phaserGame); game.override .moveset(Moves.DIG) - .battleType("single") + .battleStyle("single") .startingLevel(100) .enemySpecies(Species.SNORLAX) .enemyLevel(100) diff --git a/test/moves/disable.test.ts b/test/moves/disable.test.ts index fdfb748df9d..d21716145a4 100644 --- a/test/moves/disable.test.ts +++ b/test/moves/disable.test.ts @@ -23,7 +23,7 @@ describe("Moves - Disable", () => { beforeEach(async () => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .ability(Abilities.BALL_FETCH) .enemyAbility(Abilities.BALL_FETCH) .moveset([Moves.DISABLE, Moves.SPLASH]) diff --git a/test/moves/dive.test.ts b/test/moves/dive.test.ts index d7b53701a25..f33dc69b55f 100644 --- a/test/moves/dive.test.ts +++ b/test/moves/dive.test.ts @@ -27,7 +27,7 @@ describe("Moves - Dive", () => { game = new GameManager(phaserGame); game.override .moveset(Moves.DIVE) - .battleType("single") + .battleStyle("single") .startingLevel(100) .enemySpecies(Species.SNORLAX) .enemyLevel(100) diff --git a/test/moves/doodle.test.ts b/test/moves/doodle.test.ts index 822e415c918..25dc0ddaede 100644 --- a/test/moves/doodle.test.ts +++ b/test/moves/doodle.test.ts @@ -26,7 +26,7 @@ describe("Moves - Doodle", () => { game.override .moveset([Moves.SPLASH, Moves.DOODLE]) .ability(Abilities.ADAPTABILITY) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) @@ -43,7 +43,7 @@ describe("Moves - Doodle", () => { }); it("should copy the opponent's ability to itself and its ally in doubles", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); game.move.select(Moves.DOODLE, 0, BattlerIndex.ENEMY); @@ -55,7 +55,7 @@ describe("Moves - Doodle", () => { }); it("should activate post-summon abilities", async () => { - game.override.battleType("double").enemyAbility(Abilities.INTIMIDATE); + game.override.battleStyle("double").enemyAbility(Abilities.INTIMIDATE); await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); diff --git a/test/moves/double_team.test.ts b/test/moves/double_team.test.ts index f6791573132..8eac6be11f4 100644 --- a/test/moves/double_team.test.ts +++ b/test/moves/double_team.test.ts @@ -23,7 +23,7 @@ describe("Moves - Double Team", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.moveset([Moves.DOUBLE_TEAM]); game.override.disableCrits(); game.override.ability(Abilities.BALL_FETCH); diff --git a/test/moves/dragon_cheer.test.ts b/test/moves/dragon_cheer.test.ts index 30d5af3a51b..dcf7f13eb65 100644 --- a/test/moves/dragon_cheer.test.ts +++ b/test/moves/dragon_cheer.test.ts @@ -23,7 +23,7 @@ describe("Moves - Dragon Cheer", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("double") + .battleStyle("double") .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH) .enemyLevel(20) diff --git a/test/moves/dragon_rage.test.ts b/test/moves/dragon_rage.test.ts index 99d66421463..188c1511f37 100644 --- a/test/moves/dragon_rage.test.ts +++ b/test/moves/dragon_rage.test.ts @@ -31,7 +31,7 @@ describe("Moves - Dragon Rage", () => { beforeEach(async () => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.starterSpecies(Species.SNORLAX); game.override.moveset([Moves.DRAGON_RAGE]); diff --git a/test/moves/dragon_tail.test.ts b/test/moves/dragon_tail.test.ts index 37e8aa2fe1b..31e5560d4e0 100644 --- a/test/moves/dragon_tail.test.ts +++ b/test/moves/dragon_tail.test.ts @@ -28,7 +28,7 @@ describe("Moves - Dragon Tail", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .moveset([Moves.DRAGON_TAIL, Moves.SPLASH, Moves.FLAMETHROWER]) .enemySpecies(Species.WAILORD) .enemyMoveset(Moves.SPLASH) @@ -73,7 +73,7 @@ describe("Moves - Dragon Tail", () => { }); it("should proceed without crashing in a double battle", async () => { - game.override.battleType("double").enemyMoveset(Moves.SPLASH).enemyAbility(Abilities.ROUGH_SKIN); + game.override.battleStyle("double").enemyMoveset(Moves.SPLASH).enemyAbility(Abilities.ROUGH_SKIN); await game.classicMode.startBattle([Species.DRATINI, Species.DRATINI, Species.WAILORD, Species.WAILORD]); const leadPokemon = game.scene.getPlayerParty()[0]!; @@ -102,7 +102,7 @@ describe("Moves - Dragon Tail", () => { }); it("should redirect targets upon opponent flee", async () => { - game.override.battleType("double").enemyMoveset(Moves.SPLASH).enemyAbility(Abilities.ROUGH_SKIN); + game.override.battleStyle("double").enemyMoveset(Moves.SPLASH).enemyAbility(Abilities.ROUGH_SKIN); await game.classicMode.startBattle([Species.DRATINI, Species.DRATINI, Species.WAILORD, Species.WAILORD]); const leadPokemon = game.scene.getPlayerParty()[0]!; diff --git a/test/moves/dynamax_cannon.test.ts b/test/moves/dynamax_cannon.test.ts index 9cf3106b9c1..94f07ae500f 100644 --- a/test/moves/dynamax_cannon.test.ts +++ b/test/moves/dynamax_cannon.test.ts @@ -34,7 +34,7 @@ describe("Moves - Dynamax Cannon", () => { // Note that, for Waves 1-10, the level cap is 10 game.override.startingWave(1); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.disableCrits(); game.override.enemySpecies(Species.MAGIKARP); diff --git a/test/moves/electrify.test.ts b/test/moves/electrify.test.ts index 69e7504b406..25529e0b552 100644 --- a/test/moves/electrify.test.ts +++ b/test/moves/electrify.test.ts @@ -25,7 +25,7 @@ describe("Moves - Electrify", () => { game = new GameManager(phaserGame); game.override .moveset(Moves.ELECTRIFY) - .battleType("single") + .battleStyle("single") .startingLevel(100) .enemySpecies(Species.SNORLAX) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/electro_shot.test.ts b/test/moves/electro_shot.test.ts index 05ab9c24a7c..0122bf04281 100644 --- a/test/moves/electro_shot.test.ts +++ b/test/moves/electro_shot.test.ts @@ -27,7 +27,7 @@ describe("Moves - Electro Shot", () => { game = new GameManager(phaserGame); game.override .moveset(Moves.ELECTRO_SHOT) - .battleType("single") + .battleStyle("single") .startingLevel(100) .enemySpecies(Species.SNORLAX) .enemyLevel(100) diff --git a/test/moves/encore.test.ts b/test/moves/encore.test.ts index 43b9eb6a77f..519e7860c04 100644 --- a/test/moves/encore.test.ts +++ b/test/moves/encore.test.ts @@ -27,7 +27,7 @@ describe("Moves - Encore", () => { game.override .moveset([Moves.SPLASH, Moves.ENCORE]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/endure.test.ts b/test/moves/endure.test.ts index 8fbb2272ece..190a689f46e 100644 --- a/test/moves/endure.test.ts +++ b/test/moves/endure.test.ts @@ -25,7 +25,7 @@ describe("Moves - Endure", () => { .moveset([Moves.THUNDER, Moves.BULLET_SEED, Moves.TOXIC, Moves.SHEER_COLD]) .ability(Abilities.SKILL_LINK) .startingLevel(100) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.NO_GUARD) diff --git a/test/moves/entrainment.test.ts b/test/moves/entrainment.test.ts index b2a0baf3e27..31a8ffcab85 100644 --- a/test/moves/entrainment.test.ts +++ b/test/moves/entrainment.test.ts @@ -25,7 +25,7 @@ describe("Moves - Entrainment", () => { game.override .moveset([Moves.SPLASH, Moves.ENTRAINMENT]) .ability(Abilities.ADAPTABILITY) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/fairy_lock.test.ts b/test/moves/fairy_lock.test.ts index a47143add4f..e967221bcae 100644 --- a/test/moves/fairy_lock.test.ts +++ b/test/moves/fairy_lock.test.ts @@ -26,7 +26,7 @@ describe("Moves - Fairy Lock", () => { game.override .moveset([Moves.FAIRY_LOCK, Moves.SPLASH]) .ability(Abilities.BALL_FETCH) - .battleType("double") + .battleStyle("double") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/fake_out.test.ts b/test/moves/fake_out.test.ts index 929c760ee5b..cbce16270e0 100644 --- a/test/moves/fake_out.test.ts +++ b/test/moves/fake_out.test.ts @@ -21,7 +21,7 @@ describe("Moves - Fake Out", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.CORVIKNIGHT) .moveset([Moves.FAKE_OUT, Moves.SPLASH]) .enemyMoveset(Moves.SPLASH) diff --git a/test/moves/false_swipe.test.ts b/test/moves/false_swipe.test.ts index 4fb5b81ef67..d6743477cae 100644 --- a/test/moves/false_swipe.test.ts +++ b/test/moves/false_swipe.test.ts @@ -26,7 +26,7 @@ describe("Moves - False Swipe", () => { .moveset([Moves.FALSE_SWIPE]) .ability(Abilities.BALL_FETCH) .startingLevel(1000) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/fell_stinger.test.ts b/test/moves/fell_stinger.test.ts index 2ffa44c5a3a..11731d8a06f 100644 --- a/test/moves/fell_stinger.test.ts +++ b/test/moves/fell_stinger.test.ts @@ -27,7 +27,7 @@ describe("Moves - Fell Stinger", () => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .moveset([Moves.FELL_STINGER, Moves.SALT_CURE, Moves.BIND, Moves.LEECH_SEED]) .startingLevel(50) .disableCrits() @@ -99,7 +99,7 @@ describe("Moves - Fell Stinger", () => { }); it("should not grant stat boost if enemy is KO'd by Salt Cure", async () => { - game.override.battleType("double").startingLevel(5); + game.override.battleStyle("double").startingLevel(5); const saltCure = allMoves[Moves.SALT_CURE]; const fellStinger = allMoves[Moves.FELL_STINGER]; vi.spyOn(saltCure, "accuracy", "get").mockReturnValue(100); @@ -124,7 +124,7 @@ describe("Moves - Fell Stinger", () => { }); it("should not grant stat boost if enemy dies to Bind or a similar effect", async () => { - game.override.battleType("double").startingLevel(5); + game.override.battleStyle("double").startingLevel(5); vi.spyOn(allMoves[Moves.BIND], "accuracy", "get").mockReturnValue(100); vi.spyOn(allMoves[Moves.FELL_STINGER], "power", "get").mockReturnValue(50000); @@ -147,7 +147,7 @@ describe("Moves - Fell Stinger", () => { }); it("should not grant stat boost if enemy dies to Leech Seed", async () => { - game.override.battleType("double").startingLevel(5); + game.override.battleStyle("double").startingLevel(5); vi.spyOn(allMoves[Moves.LEECH_SEED], "accuracy", "get").mockReturnValue(100); vi.spyOn(allMoves[Moves.FELL_STINGER], "power", "get").mockReturnValue(50000); diff --git a/test/moves/fissure.test.ts b/test/moves/fissure.test.ts index 63de58eb2e7..be6be079cf0 100644 --- a/test/moves/fissure.test.ts +++ b/test/moves/fissure.test.ts @@ -28,7 +28,7 @@ describe("Moves - Fissure", () => { beforeEach(async () => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.disableCrits(); game.override.starterSpecies(Species.SNORLAX); diff --git a/test/moves/flame_burst.test.ts b/test/moves/flame_burst.test.ts index a39c27d37b3..fb92537a238 100644 --- a/test/moves/flame_burst.test.ts +++ b/test/moves/flame_burst.test.ts @@ -35,7 +35,7 @@ describe("Moves - Flame Burst", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.moveset([Moves.FLAME_BURST, Moves.SPLASH]); game.override.disableCrits(); game.override.ability(Abilities.UNNERVE); diff --git a/test/moves/flower_shield.test.ts b/test/moves/flower_shield.test.ts index b66847651c1..4840c6f018f 100644 --- a/test/moves/flower_shield.test.ts +++ b/test/moves/flower_shield.test.ts @@ -28,7 +28,7 @@ describe("Moves - Flower Shield", () => { game = new GameManager(phaserGame); game.override.ability(Abilities.NONE); game.override.enemyAbility(Abilities.NONE); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.moveset([Moves.FLOWER_SHIELD, Moves.SPLASH]); game.override.enemyMoveset(Moves.SPLASH); }); @@ -51,7 +51,7 @@ describe("Moves - Flower Shield", () => { }); it("raises DEF stat stage by 1 for all Grass-type Pokemon on the field by one stage - double battle", async () => { - game.override.enemySpecies(Species.MAGIKARP).startingBiome(Biome.GRASS).battleType("double"); + game.override.enemySpecies(Species.MAGIKARP).startingBiome(Biome.GRASS).battleStyle("double"); await game.startBattle([Species.CHERRIM, Species.MAGIKARP]); const field = game.scene.getField(true); diff --git a/test/moves/fly.test.ts b/test/moves/fly.test.ts index 0bd7d22b2a7..f200e976704 100644 --- a/test/moves/fly.test.ts +++ b/test/moves/fly.test.ts @@ -28,7 +28,7 @@ describe("Moves - Fly", () => { game = new GameManager(phaserGame); game.override .moveset(Moves.FLY) - .battleType("single") + .battleStyle("single") .startingLevel(100) .enemySpecies(Species.SNORLAX) .enemyLevel(100) diff --git a/test/moves/focus_punch.test.ts b/test/moves/focus_punch.test.ts index 2dc5f20f2bf..e05eb008af7 100644 --- a/test/moves/focus_punch.test.ts +++ b/test/moves/focus_punch.test.ts @@ -28,7 +28,7 @@ describe("Moves - Focus Punch", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .ability(Abilities.UNNERVE) .moveset([Moves.FOCUS_PUNCH]) .enemySpecies(Species.GROUDON) diff --git a/test/moves/follow_me.test.ts b/test/moves/follow_me.test.ts index eeb11b36f24..68c4f111bb1 100644 --- a/test/moves/follow_me.test.ts +++ b/test/moves/follow_me.test.ts @@ -24,7 +24,7 @@ describe("Moves - Follow Me", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.starterSpecies(Species.AMOONGUSS); game.override.ability(Abilities.BALL_FETCH); game.override.enemySpecies(Species.SNORLAX); diff --git a/test/moves/forests_curse.test.ts b/test/moves/forests_curse.test.ts index 8850b92662d..f363fdbd19d 100644 --- a/test/moves/forests_curse.test.ts +++ b/test/moves/forests_curse.test.ts @@ -25,7 +25,7 @@ describe("Moves - Forest's Curse", () => { game.override .moveset([Moves.FORESTS_CURSE, Moves.TRICK_OR_TREAT]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/freeze_dry.test.ts b/test/moves/freeze_dry.test.ts index 8cab56ddfd2..62168afb960 100644 --- a/test/moves/freeze_dry.test.ts +++ b/test/moves/freeze_dry.test.ts @@ -24,7 +24,7 @@ describe("Moves - Freeze-Dry", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH) diff --git a/test/moves/freezy_frost.test.ts b/test/moves/freezy_frost.test.ts index c1ac4054e70..4eb3114a5ba 100644 --- a/test/moves/freezy_frost.test.ts +++ b/test/moves/freezy_frost.test.ts @@ -24,7 +24,7 @@ describe("Moves - Freezy Frost", () => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.RATTATA) .enemyLevel(100) .enemyMoveset([Moves.HOWL, Moves.HOWL, Moves.HOWL, Moves.HOWL]) @@ -71,7 +71,7 @@ describe("Moves - Freezy Frost", () => { }); it("should clear all stat changes in double battle", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); await game.classicMode.startBattle([Species.SHUCKLE, Species.RATTATA]); const [leftPlayer, rightPlayer] = game.scene.getPlayerField(); const [leftOpp, rightOpp] = game.scene.getEnemyField(); diff --git a/test/moves/fusion_bolt.test.ts b/test/moves/fusion_bolt.test.ts index fc47a0f04be..33498a857a9 100644 --- a/test/moves/fusion_bolt.test.ts +++ b/test/moves/fusion_bolt.test.ts @@ -30,7 +30,7 @@ describe("Moves - Fusion Bolt", () => { game.override.enemyAbility(Abilities.ROUGH_SKIN); game.override.enemyMoveset([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.startingWave(97); game.override.disableCrits(); }); diff --git a/test/moves/fusion_flare.test.ts b/test/moves/fusion_flare.test.ts index 17653cf58bc..61bb126a75a 100644 --- a/test/moves/fusion_flare.test.ts +++ b/test/moves/fusion_flare.test.ts @@ -30,7 +30,7 @@ describe("Moves - Fusion Flare", () => { game.override.enemySpecies(Species.RATTATA); game.override.enemyMoveset([Moves.REST, Moves.REST, Moves.REST, Moves.REST]); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.startingWave(97); game.override.disableCrits(); }); diff --git a/test/moves/fusion_flare_bolt.test.ts b/test/moves/fusion_flare_bolt.test.ts index c340aeea63f..697ac57e739 100644 --- a/test/moves/fusion_flare_bolt.test.ts +++ b/test/moves/fusion_flare_bolt.test.ts @@ -39,7 +39,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { game.override.enemySpecies(Species.RESHIRAM); game.override.enemyMoveset([Moves.REST, Moves.REST, Moves.REST, Moves.REST]); - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.startingWave(97); game.override.disableCrits(); diff --git a/test/moves/future_sight.test.ts b/test/moves/future_sight.test.ts index 40a940447e4..48be2451195 100644 --- a/test/moves/future_sight.test.ts +++ b/test/moves/future_sight.test.ts @@ -24,7 +24,7 @@ describe("Moves - Future Sight", () => { game.override .startingLevel(50) .moveset([Moves.FUTURE_SIGHT, Moves.SPLASH]) - .battleType("single") + .battleStyle("single") .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.STURDY) .enemyMoveset(Moves.SPLASH); diff --git a/test/moves/gastro_acid.test.ts b/test/moves/gastro_acid.test.ts index c9f2428845e..8247d29c0a0 100644 --- a/test/moves/gastro_acid.test.ts +++ b/test/moves/gastro_acid.test.ts @@ -22,7 +22,7 @@ describe("Moves - Gastro Acid", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.startingLevel(1); game.override.enemyLevel(100); game.override.ability(Abilities.NONE); @@ -61,7 +61,7 @@ describe("Moves - Gastro Acid", () => { }); it("fails if used on an enemy with an already-suppressed ability", async () => { - game.override.battleType("single"); + game.override.battleStyle("single"); await game.startBattle(); diff --git a/test/moves/geomancy.test.ts b/test/moves/geomancy.test.ts index 34281c96c60..51659f01b12 100644 --- a/test/moves/geomancy.test.ts +++ b/test/moves/geomancy.test.ts @@ -26,7 +26,7 @@ describe("Moves - Geomancy", () => { game = new GameManager(phaserGame); game.override .moveset(Moves.GEOMANCY) - .battleType("single") + .battleStyle("single") .startingLevel(100) .enemySpecies(Species.SNORLAX) .enemyLevel(100) diff --git a/test/moves/gigaton_hammer.test.ts b/test/moves/gigaton_hammer.test.ts index a6f7438a0a2..6275e5d2dcb 100644 --- a/test/moves/gigaton_hammer.test.ts +++ b/test/moves/gigaton_hammer.test.ts @@ -22,7 +22,7 @@ describe("Moves - Gigaton Hammer", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.MAGIKARP) .starterSpecies(Species.FEEBAS) .moveset([Moves.GIGATON_HAMMER]) diff --git a/test/moves/glaive_rush.test.ts b/test/moves/glaive_rush.test.ts index d3531b172e2..3c2bcea7884 100644 --- a/test/moves/glaive_rush.test.ts +++ b/test/moves/glaive_rush.test.ts @@ -23,7 +23,7 @@ describe("Moves - Glaive Rush", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/growth.test.ts b/test/moves/growth.test.ts index 926593a4f72..37cd84638ba 100644 --- a/test/moves/growth.test.ts +++ b/test/moves/growth.test.ts @@ -24,7 +24,7 @@ describe("Moves - Growth", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.enemyAbility(Abilities.MOXIE); game.override.ability(Abilities.INSOMNIA); game.override.moveset([Moves.GROWTH]); diff --git a/test/moves/grudge.test.ts b/test/moves/grudge.test.ts index 161fa38edd2..ecde5351d6d 100644 --- a/test/moves/grudge.test.ts +++ b/test/moves/grudge.test.ts @@ -25,7 +25,7 @@ describe("Moves - Grudge", () => { game.override .moveset([Moves.EMBER, Moves.SPLASH]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.SHEDINJA) .enemyAbility(Abilities.WONDER_GUARD) diff --git a/test/moves/guard_split.test.ts b/test/moves/guard_split.test.ts index 5db07e4e82c..d182e94b203 100644 --- a/test/moves/guard_split.test.ts +++ b/test/moves/guard_split.test.ts @@ -24,7 +24,7 @@ describe("Moves - Guard Split", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemyAbility(Abilities.NONE) .enemySpecies(Species.MEW) .enemyLevel(200) diff --git a/test/moves/guard_swap.test.ts b/test/moves/guard_swap.test.ts index be824672f32..2076f92ccb1 100644 --- a/test/moves/guard_swap.test.ts +++ b/test/moves/guard_swap.test.ts @@ -24,7 +24,7 @@ describe("Moves - Guard Swap", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH) .enemySpecies(Species.INDEEDEE) diff --git a/test/moves/hard_press.test.ts b/test/moves/hard_press.test.ts index 8891f0bf0e2..8fe768cb8e4 100644 --- a/test/moves/hard_press.test.ts +++ b/test/moves/hard_press.test.ts @@ -27,7 +27,7 @@ describe("Moves - Hard Press", () => { beforeEach(() => { moveToCheck = allMoves[Moves.HARD_PRESS]; game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.ability(Abilities.BALL_FETCH); game.override.enemySpecies(Species.MUNCHLAX); game.override.enemyAbility(Abilities.BALL_FETCH); diff --git a/test/moves/haze.test.ts b/test/moves/haze.test.ts index d890678b466..4ddb6d1c7c5 100644 --- a/test/moves/haze.test.ts +++ b/test/moves/haze.test.ts @@ -23,7 +23,7 @@ describe("Moves - Haze", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.enemySpecies(Species.RATTATA); game.override.enemyLevel(100); diff --git a/test/moves/heal_bell.test.ts b/test/moves/heal_bell.test.ts index 4c0148bfd04..8ffb602c24f 100644 --- a/test/moves/heal_bell.test.ts +++ b/test/moves/heal_bell.test.ts @@ -26,7 +26,7 @@ describe("Moves - Heal Bell", () => { game.override .moveset([Moves.HEAL_BELL, Moves.SPLASH]) .statusEffect(StatusEffect.BURN) - .battleType("double") + .battleStyle("double") .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH); }); diff --git a/test/moves/heart_swap.test.ts b/test/moves/heart_swap.test.ts index a3d892cd518..009db731951 100644 --- a/test/moves/heart_swap.test.ts +++ b/test/moves/heart_swap.test.ts @@ -24,7 +24,7 @@ describe("Moves - Heart Swap", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH) .enemySpecies(Species.INDEEDEE) diff --git a/test/moves/hyper_beam.test.ts b/test/moves/hyper_beam.test.ts index 5cd54e9b46a..5b370f49e4c 100644 --- a/test/moves/hyper_beam.test.ts +++ b/test/moves/hyper_beam.test.ts @@ -26,7 +26,7 @@ describe("Moves - Hyper Beam", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.ability(Abilities.BALL_FETCH); game.override.enemySpecies(Species.SNORLAX); game.override.enemyAbility(Abilities.BALL_FETCH); diff --git a/test/moves/imprison.test.ts b/test/moves/imprison.test.ts index 89ef9981040..cefbaa52cad 100644 --- a/test/moves/imprison.test.ts +++ b/test/moves/imprison.test.ts @@ -23,7 +23,7 @@ describe("Moves - Imprison", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset([Moves.IMPRISON, Moves.SPLASH, Moves.GROWL]) .enemySpecies(Species.SHUCKLE) diff --git a/test/moves/instruct.test.ts b/test/moves/instruct.test.ts index 079c8803ddc..c5650d7bbd5 100644 --- a/test/moves/instruct.test.ts +++ b/test/moves/instruct.test.ts @@ -32,7 +32,7 @@ describe("Moves - Instruct", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.SHUCKLE) .enemyAbility(Abilities.NO_GUARD) .enemyLevel(100) @@ -89,7 +89,7 @@ describe("Moves - Instruct", () => { }); it("should repeat ally's attack on enemy", async () => { - game.override.battleType("double").enemyMoveset(Moves.SPLASH); + game.override.battleStyle("double").enemyMoveset(Moves.SPLASH); await game.classicMode.startBattle([Species.AMOONGUSS, Species.SHUCKLE]); const [amoonguss, shuckle] = game.scene.getPlayerField(); @@ -122,7 +122,7 @@ describe("Moves - Instruct", () => { }); it("should add moves to move queue for copycat", async () => { - game.override.battleType("double").moveset(Moves.INSTRUCT).enemyLevel(5); + game.override.battleStyle("double").moveset(Moves.INSTRUCT).enemyLevel(5); await game.classicMode.startBattle([Species.AMOONGUSS]); const [enemy1, enemy2] = game.scene.getEnemyField()!; @@ -179,7 +179,7 @@ describe("Moves - Instruct", () => { }); it("should redirect attacking moves if enemy faints", async () => { - game.override.battleType("double").enemyMoveset(Moves.SPLASH).enemySpecies(Species.MAGIKARP).enemyLevel(1); + game.override.battleStyle("double").enemyMoveset(Moves.SPLASH).enemySpecies(Species.MAGIKARP).enemyLevel(1); await game.classicMode.startBattle([Species.HISUI_ELECTRODE, Species.KOMMO_O]); const [electrode, kommo_o] = game.scene.getPlayerField()!; @@ -201,7 +201,7 @@ describe("Moves - Instruct", () => { expect(karp2.isFainted()).toBe(true); }); it("should allow for dancer copying of instructed dance move", async () => { - game.override.battleType("double").enemyMoveset([Moves.INSTRUCT, Moves.SPLASH]).enemyLevel(1000); + game.override.battleStyle("double").enemyMoveset([Moves.INSTRUCT, Moves.SPLASH]).enemyLevel(1000); await game.classicMode.startBattle([Species.ORICORIO, Species.VOLCARONA]); const [oricorio, volcarona] = game.scene.getPlayerField(); @@ -256,7 +256,7 @@ describe("Moves - Instruct", () => { }); it("should attempt to call enemy's disabled move, but move use itself should fail", async () => { - game.override.moveset([Moves.INSTRUCT, Moves.DISABLE]).battleType("double"); + game.override.moveset([Moves.INSTRUCT, Moves.DISABLE]).battleStyle("double"); await game.classicMode.startBattle([Species.AMOONGUSS, Species.DROWZEE]); const [enemy1, enemy2] = game.scene.getEnemyField(); @@ -372,7 +372,7 @@ describe("Moves - Instruct", () => { it("should respect moves' original priority for psychic terrain", async () => { game.override - .battleType("double") + .battleStyle("double") .moveset([Moves.QUICK_ATTACK, Moves.SPLASH, Moves.INSTRUCT]) .enemyMoveset([Moves.SPLASH, Moves.PSYCHIC_TERRAIN]); await game.classicMode.startBattle([Species.BANETTE, Species.KLEFKI]); @@ -395,7 +395,7 @@ describe("Moves - Instruct", () => { }); it("should still work w/ prankster in psychic terrain", async () => { - game.override.battleType("double").enemyMoveset([Moves.SPLASH, Moves.PSYCHIC_TERRAIN]); + game.override.battleStyle("double").enemyMoveset([Moves.SPLASH, Moves.PSYCHIC_TERRAIN]); await game.classicMode.startBattle([Species.BANETTE, Species.KLEFKI]); const [banette, klefki] = game.scene.getPlayerField()!; @@ -419,7 +419,7 @@ describe("Moves - Instruct", () => { it("should cause spread moves to correctly hit targets in doubles after singles", async () => { game.override - .battleType("even-doubles") + .battleStyle("even-doubles") .moveset([Moves.BREAKING_SWIPE, Moves.INSTRUCT, Moves.SPLASH]) .enemyMoveset(Moves.SONIC_BOOM) .enemySpecies(Species.AXEW) @@ -446,7 +446,7 @@ describe("Moves - Instruct", () => { it("should cause AoE moves to correctly hit everyone in doubles after singles", async () => { game.override - .battleType("even-doubles") + .battleStyle("even-doubles") .moveset([Moves.BRUTAL_SWING, Moves.INSTRUCT, Moves.SPLASH]) .enemySpecies(Species.AXEW) .enemyMoveset(Moves.SONIC_BOOM) @@ -504,7 +504,7 @@ describe("Moves - Instruct", () => { it("should cause multi-hit moves to hit the appropriate number of times in doubles", async () => { game.override - .battleType("double") + .battleStyle("double") .enemyAbility(Abilities.SKILL_LINK) .moveset([Moves.SPLASH, Moves.INSTRUCT]) .enemyMoveset([Moves.BULLET_SEED, Moves.SPLASH]) diff --git a/test/moves/jaw_lock.test.ts b/test/moves/jaw_lock.test.ts index fc71397e624..71896dc3b62 100644 --- a/test/moves/jaw_lock.test.ts +++ b/test/moves/jaw_lock.test.ts @@ -29,7 +29,7 @@ describe("Moves - Jaw Lock", () => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.SNORLAX) .enemyAbility(Abilities.INSOMNIA) .enemyMoveset(Moves.SPLASH) @@ -107,7 +107,7 @@ describe("Moves - Jaw Lock", () => { }); it("should not trap other targets after the first target is trapped", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); await game.startBattle([Species.CHARMANDER, Species.BULBASAUR]); diff --git a/test/moves/lash_out.test.ts b/test/moves/lash_out.test.ts index 8395633f5c0..c80a8ce348a 100644 --- a/test/moves/lash_out.test.ts +++ b/test/moves/lash_out.test.ts @@ -24,7 +24,7 @@ describe("Moves - Lash Out", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.FUR_COAT) diff --git a/test/moves/last_respects.test.ts b/test/moves/last_respects.test.ts index ccab8a43415..a69ecb2e989 100644 --- a/test/moves/last_respects.test.ts +++ b/test/moves/last_respects.test.ts @@ -31,7 +31,7 @@ describe("Moves - Last Respects", () => { move = allMoves[Moves.LAST_RESPECTS]; basePower = move.power; game.override - .battleType("single") + .battleStyle("single") .disableCrits() .moveset([Moves.LAST_RESPECTS, Moves.EXPLOSION, Moves.LUNAR_DANCE]) .ability(Abilities.BALL_FETCH) diff --git a/test/moves/light_screen.test.ts b/test/moves/light_screen.test.ts index 9cc6944ed3e..12aeb29577a 100644 --- a/test/moves/light_screen.test.ts +++ b/test/moves/light_screen.test.ts @@ -34,7 +34,7 @@ describe("Moves - Light Screen", () => { beforeEach(() => { game = new GameManager(phaserGame); globalScene = game.scene; - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.ability(Abilities.NONE); game.override.moveset([Moves.ABSORB, Moves.DAZZLING_GLEAM, Moves.TACKLE]); game.override.enemyLevel(100); @@ -61,7 +61,7 @@ describe("Moves - Light Screen", () => { }); it("reduces damage of special attacks by a third in a double battle", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); const moveToUse = Moves.DAZZLING_GLEAM; await game.classicMode.startBattle([Species.SHUCKLE, Species.SHUCKLE]); diff --git a/test/moves/lucky_chant.test.ts b/test/moves/lucky_chant.test.ts index 21802574e79..e2a28a7bbe3 100644 --- a/test/moves/lucky_chant.test.ts +++ b/test/moves/lucky_chant.test.ts @@ -25,7 +25,7 @@ describe("Moves - Lucky Chant", () => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .moveset([Moves.LUCKY_CHANT, Moves.SPLASH, Moves.FOLLOW_ME]) .enemySpecies(Species.SNORLAX) .enemyAbility(Abilities.INSOMNIA) @@ -54,7 +54,7 @@ describe("Moves - Lucky Chant", () => { }); it("should prevent critical hits against the user's ally", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); diff --git a/test/moves/lunar_blessing.test.ts b/test/moves/lunar_blessing.test.ts index d97e6c978eb..ee35107fccd 100644 --- a/test/moves/lunar_blessing.test.ts +++ b/test/moves/lunar_blessing.test.ts @@ -22,7 +22,7 @@ describe("Moves - Lunar Blessing", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.enemySpecies(Species.SHUCKLE); game.override.enemyMoveset(Moves.SPLASH); diff --git a/test/moves/lunar_dance.test.ts b/test/moves/lunar_dance.test.ts index d3dceba087c..30abe765291 100644 --- a/test/moves/lunar_dance.test.ts +++ b/test/moves/lunar_dance.test.ts @@ -25,7 +25,7 @@ describe("Moves - Lunar Dance", () => { game = new GameManager(phaserGame); game.override .statusEffect(StatusEffect.BURN) - .battleType("double") + .battleStyle("double") .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH); }); diff --git a/test/moves/magic_coat.test.ts b/test/moves/magic_coat.test.ts index 2cc8dea8938..23deef97318 100644 --- a/test/moves/magic_coat.test.ts +++ b/test/moves/magic_coat.test.ts @@ -30,7 +30,7 @@ describe("Moves - Magic Coat", () => { game = new GameManager(phaserGame); game.override .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) @@ -82,7 +82,7 @@ describe("Moves - Magic Coat", () => { }); it("should individually bounce back multi-target moves when used by both targets in doubles", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.moveset([Moves.GROWL, Moves.SPLASH]); await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); @@ -95,7 +95,7 @@ describe("Moves - Magic Coat", () => { }); it("should bounce back a spread status move against both pokemon", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.moveset([Moves.GROWL, Moves.SPLASH]); game.override.enemyMoveset([Moves.SPLASH, Moves.MAGIC_COAT]); await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); @@ -121,7 +121,7 @@ describe("Moves - Magic Coat", () => { }); it("should not bounce back a move that was just bounced", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.ability(Abilities.MAGIC_BOUNCE); game.override.moveset([Moves.GROWL, Moves.MAGIC_COAT]); game.override.enemyMoveset([Moves.SPLASH, Moves.MAGIC_COAT]); @@ -159,7 +159,7 @@ describe("Moves - Magic Coat", () => { }); it("should only bounce spikes back once when both targets use magic coat in doubles", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); await game.classicMode.startBattle([Species.MAGIKARP]); game.override.moveset([Moves.SPIKES]); @@ -206,7 +206,7 @@ describe("Moves - Magic Coat", () => { // TODO: stomping tantrum should consider moves that were bounced. it.todo("should cause stomping tantrum to double in power when the last move was bounced", async () => { - game.override.battleType("single"); + game.override.battleStyle("single"); await game.classicMode.startBattle([Species.MAGIKARP]); game.override.moveset([Moves.STOMPING_TANTRUM, Moves.CHARM]); diff --git a/test/moves/magnet_rise.test.ts b/test/moves/magnet_rise.test.ts index 725bbb99276..62ad0c88091 100644 --- a/test/moves/magnet_rise.test.ts +++ b/test/moves/magnet_rise.test.ts @@ -23,7 +23,7 @@ describe("Moves - Magnet Rise", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.starterSpecies(Species.MAGNEZONE); game.override.enemySpecies(Species.RATTATA); game.override.enemyMoveset([Moves.DRILL_RUN, Moves.DRILL_RUN, Moves.DRILL_RUN, Moves.DRILL_RUN]); diff --git a/test/moves/make_it_rain.test.ts b/test/moves/make_it_rain.test.ts index 38460d99e63..4d94537bcec 100644 --- a/test/moves/make_it_rain.test.ts +++ b/test/moves/make_it_rain.test.ts @@ -24,7 +24,7 @@ describe("Moves - Make It Rain", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.moveset([Moves.MAKE_IT_RAIN, Moves.SPLASH]); game.override.enemySpecies(Species.SNORLAX); game.override.enemyAbility(Abilities.INSOMNIA); @@ -48,7 +48,7 @@ describe("Moves - Make It Rain", () => { it("should apply effects even if the target faints", async () => { game.override.enemyLevel(1); // ensures the enemy will faint - game.override.battleType("single"); + game.override.battleStyle("single"); await game.startBattle([Species.CHARIZARD]); diff --git a/test/moves/mat_block.test.ts b/test/moves/mat_block.test.ts index ddfa29a53da..9ed0f497af9 100644 --- a/test/moves/mat_block.test.ts +++ b/test/moves/mat_block.test.ts @@ -26,7 +26,7 @@ describe("Moves - Mat Block", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.moveset([Moves.MAT_BLOCK, Moves.SPLASH]); diff --git a/test/moves/metal_burst.test.ts b/test/moves/metal_burst.test.ts index 2cbc999436f..7fa5434dc58 100644 --- a/test/moves/metal_burst.test.ts +++ b/test/moves/metal_burst.test.ts @@ -27,7 +27,7 @@ describe("Moves - Metal Burst", () => { .moveset([Moves.METAL_BURST, Moves.FISSURE, Moves.PRECIPICE_BLADES]) .ability(Abilities.PURE_POWER) .startingLevel(10) - .battleType("double") + .battleStyle("double") .disableCrits() .enemySpecies(Species.PICHU) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/metronome.test.ts b/test/moves/metronome.test.ts index 80f32a3a6fb..bf177fb1a93 100644 --- a/test/moves/metronome.test.ts +++ b/test/moves/metronome.test.ts @@ -30,7 +30,7 @@ describe("Moves - Metronome", () => { game = new GameManager(phaserGame); game.override .moveset([Moves.METRONOME, Moves.SPLASH]) - .battleType("single") + .battleStyle("single") .startingLevel(100) .starterSpecies(Species.REGIELEKI) .enemyLevel(100) @@ -79,7 +79,7 @@ describe("Moves - Metronome", () => { }); it("should only target ally for Aromatic Mist", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); await game.classicMode.startBattle([Species.REGIELEKI, Species.RATTATA]); const [leftPlayer, rightPlayer] = game.scene.getPlayerField(); const [leftOpp, rightOpp] = game.scene.getEnemyField(); diff --git a/test/moves/mirror_move.test.ts b/test/moves/mirror_move.test.ts index 9178410adb2..438c594d839 100644 --- a/test/moves/mirror_move.test.ts +++ b/test/moves/mirror_move.test.ts @@ -27,7 +27,7 @@ describe("Moves - Mirror Move", () => { game.override .moveset([Moves.MIRROR_MOVE, Moves.SPLASH]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) @@ -35,7 +35,7 @@ describe("Moves - Mirror Move", () => { }); it("should use the last move that the target used on the user", async () => { - game.override.battleType("double").enemyMoveset([Moves.TACKLE, Moves.GROWL]); + game.override.battleStyle("double").enemyMoveset([Moves.TACKLE, Moves.GROWL]); await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); game.move.select(Moves.MIRROR_MOVE, 0, BattlerIndex.ENEMY); // target's last move is Tackle, enemy should receive damage from Mirror Move copying Tackle diff --git a/test/moves/mist.test.ts b/test/moves/mist.test.ts index 2deb6f9b90d..70cdf5b55a0 100644 --- a/test/moves/mist.test.ts +++ b/test/moves/mist.test.ts @@ -25,7 +25,7 @@ describe("Moves - Mist", () => { game.override .moveset([Moves.MIST, Moves.SPLASH]) .ability(Abilities.BALL_FETCH) - .battleType("double") + .battleStyle("double") .disableCrits() .enemySpecies(Species.SNORLAX) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/moongeist_beam.test.ts b/test/moves/moongeist_beam.test.ts index 117fe513e17..82a2567377b 100644 --- a/test/moves/moongeist_beam.test.ts +++ b/test/moves/moongeist_beam.test.ts @@ -26,7 +26,7 @@ describe("Moves - Moongeist Beam", () => { .moveset([Moves.MOONGEIST_BEAM, Moves.METRONOME]) .ability(Abilities.BALL_FETCH) .startingLevel(200) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.STURDY) diff --git a/test/moves/multi_target.test.ts b/test/moves/multi_target.test.ts index 5d33c7860cb..fccf650416c 100644 --- a/test/moves/multi_target.test.ts +++ b/test/moves/multi_target.test.ts @@ -25,7 +25,7 @@ describe("Multi-target damage reduction", () => { game = new GameManager(phaserGame); game.override .disableCrits() - .battleType("double") + .battleStyle("double") .enemyLevel(100) .startingLevel(100) .enemySpecies(Species.POLIWAG) diff --git a/test/moves/nightmare.test.ts b/test/moves/nightmare.test.ts index e1cef0084ee..044856ae33d 100644 --- a/test/moves/nightmare.test.ts +++ b/test/moves/nightmare.test.ts @@ -24,7 +24,7 @@ describe("Moves - Nightmare", () => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.RATTATA) .enemyMoveset(Moves.SPLASH) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/obstruct.test.ts b/test/moves/obstruct.test.ts index d8e3a949f08..f35a5964bcb 100644 --- a/test/moves/obstruct.test.ts +++ b/test/moves/obstruct.test.ts @@ -22,7 +22,7 @@ describe("Moves - Obstruct", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.MAGIKARP) .enemyMoveset(Moves.TACKLE) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/octolock.test.ts b/test/moves/octolock.test.ts index c9c5fd42f7e..fb57d0bfad5 100644 --- a/test/moves/octolock.test.ts +++ b/test/moves/octolock.test.ts @@ -25,7 +25,7 @@ describe("Moves - Octolock", () => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.MAGIKARP) .enemyMoveset(Moves.SPLASH) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/order_up.test.ts b/test/moves/order_up.test.ts index f25114c12de..701d0489c25 100644 --- a/test/moves/order_up.test.ts +++ b/test/moves/order_up.test.ts @@ -29,7 +29,7 @@ describe("Moves - Order Up", () => { game.override .moveset(Moves.ORDER_UP) .ability(Abilities.COMMANDER) - .battleType("double") + .battleStyle("double") .disableCrits() .enemySpecies(Species.SNORLAX) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/parting_shot.test.ts b/test/moves/parting_shot.test.ts index 699d960f882..a65c1a5b3a5 100644 --- a/test/moves/parting_shot.test.ts +++ b/test/moves/parting_shot.test.ts @@ -26,7 +26,7 @@ describe("Moves - Parting Shot", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.moveset([Moves.PARTING_SHOT, Moves.SPLASH]); game.override.enemyMoveset(Moves.SPLASH); game.override.startingLevel(5); diff --git a/test/moves/plasma_fists.test.ts b/test/moves/plasma_fists.test.ts index fe19ab4a460..b6a5ceaed68 100644 --- a/test/moves/plasma_fists.test.ts +++ b/test/moves/plasma_fists.test.ts @@ -25,7 +25,7 @@ describe("Moves - Plasma Fists", () => { game = new GameManager(phaserGame); game.override .moveset([Moves.PLASMA_FISTS, Moves.TACKLE]) - .battleType("double") + .battleStyle("double") .startingLevel(100) .enemySpecies(Species.DUSCLOPS) .enemyAbility(Abilities.BALL_FETCH) @@ -56,7 +56,7 @@ describe("Moves - Plasma Fists", () => { }); it("should not affect Normal-type attacks boosted by Pixilate", async () => { - game.override.battleType("single").enemyAbility(Abilities.PIXILATE); + game.override.battleStyle("single").enemyAbility(Abilities.PIXILATE); await game.classicMode.startBattle([Species.ONIX]); @@ -74,7 +74,7 @@ describe("Moves - Plasma Fists", () => { }); it("should affect moves that become Normal type due to Normalize", async () => { - game.override.battleType("single").enemyAbility(Abilities.NORMALIZE).enemyMoveset(Moves.WATER_GUN); + game.override.battleStyle("single").enemyAbility(Abilities.NORMALIZE).enemyMoveset(Moves.WATER_GUN); await game.classicMode.startBattle([Species.DUSCLOPS]); diff --git a/test/moves/pledge_moves.test.ts b/test/moves/pledge_moves.test.ts index ee9e0b8b154..b3d13a27b83 100644 --- a/test/moves/pledge_moves.test.ts +++ b/test/moves/pledge_moves.test.ts @@ -30,7 +30,7 @@ describe("Moves - Pledge Moves", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("double") + .battleStyle("double") .startingLevel(100) .moveset([Moves.FIRE_PLEDGE, Moves.GRASS_PLEDGE, Moves.WATER_PLEDGE, Moves.SPLASH]) .enemySpecies(Species.SNORLAX) @@ -86,7 +86,7 @@ describe("Moves - Pledge Moves", () => { }); it("Fire Pledge - should not combine with an enemy's Pledge move", async () => { - game.override.battleType("single").enemyMoveset(Moves.GRASS_PLEDGE); + game.override.battleStyle("single").enemyMoveset(Moves.GRASS_PLEDGE); await game.classicMode.startBattle([Species.CHARIZARD]); diff --git a/test/moves/pollen_puff.test.ts b/test/moves/pollen_puff.test.ts index 3af3ea1f41d..31d5950b47d 100644 --- a/test/moves/pollen_puff.test.ts +++ b/test/moves/pollen_puff.test.ts @@ -25,7 +25,7 @@ describe("Moves - Pollen Puff", () => { game.override .moveset([Moves.POLLEN_PUFF]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) @@ -33,7 +33,7 @@ describe("Moves - Pollen Puff", () => { }); it("should not heal more than once when the user has a source of multi-hit", async () => { - game.override.battleType("double").moveset([Moves.POLLEN_PUFF, Moves.ENDURE]).ability(Abilities.PARENTAL_BOND); + game.override.battleStyle("double").moveset([Moves.POLLEN_PUFF, Moves.ENDURE]).ability(Abilities.PARENTAL_BOND); await game.classicMode.startBattle([Species.BULBASAUR, Species.OMANYTE]); const [_, rightPokemon] = game.scene.getPlayerField(); diff --git a/test/moves/powder.test.ts b/test/moves/powder.test.ts index 522b0b74ca7..6f7a6add054 100644 --- a/test/moves/powder.test.ts +++ b/test/moves/powder.test.ts @@ -27,7 +27,7 @@ describe("Moves - Powder", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override .enemySpecies(Species.SNORLAX) @@ -150,7 +150,7 @@ describe("Moves - Powder", () => { }); it("should cancel Fire-type moves generated by the target's Dancer ability", async () => { - game.override.battleType("double").enemySpecies(Species.BLASTOISE).enemyAbility(Abilities.DANCER); + game.override.battleStyle("double").enemySpecies(Species.BLASTOISE).enemyAbility(Abilities.DANCER); await game.classicMode.startBattle([Species.CHARIZARD, Species.CHARIZARD]); @@ -227,7 +227,7 @@ describe("Moves - Powder", () => { }); it("should cancel Grass Pledge if used after ally's Fire Pledge", async () => { - game.override.enemyMoveset([Moves.FIRE_PLEDGE, Moves.GRASS_PLEDGE]).battleType("double"); + game.override.enemyMoveset([Moves.FIRE_PLEDGE, Moves.GRASS_PLEDGE]).battleStyle("double"); await game.classicMode.startBattle([Species.CHARIZARD, Species.CHARIZARD]); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -244,7 +244,7 @@ describe("Moves - Powder", () => { }); it("should cancel Fire Pledge if used before ally's Water Pledge", async () => { - game.override.enemyMoveset([Moves.FIRE_PLEDGE, Moves.WATER_PLEDGE]).battleType("double"); + game.override.enemyMoveset([Moves.FIRE_PLEDGE, Moves.WATER_PLEDGE]).battleStyle("double"); await game.classicMode.startBattle([Species.CHARIZARD, Species.CHARIZARD]); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -261,7 +261,7 @@ describe("Moves - Powder", () => { }); it("should NOT cancel Fire Pledge if used after ally's Water Pledge", async () => { - game.override.enemyMoveset([Moves.FIRE_PLEDGE, Moves.WATER_PLEDGE]).battleType("double"); + game.override.enemyMoveset([Moves.FIRE_PLEDGE, Moves.WATER_PLEDGE]).battleStyle("double"); await game.classicMode.startBattle([Species.CHARIZARD, Species.CHARIZARD]); const enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/test/moves/power_shift.test.ts b/test/moves/power_shift.test.ts index fbc6d732d30..0fee044f5ad 100644 --- a/test/moves/power_shift.test.ts +++ b/test/moves/power_shift.test.ts @@ -23,7 +23,7 @@ describe("Moves - Power Shift", () => { game = new GameManager(phaserGame); game.override .moveset([Moves.POWER_SHIFT, Moves.BULK_UP]) - .battleType("single") + .battleStyle("single") .ability(Abilities.BALL_FETCH) .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH); diff --git a/test/moves/power_split.test.ts b/test/moves/power_split.test.ts index 9150a707ad5..f15275fce9e 100644 --- a/test/moves/power_split.test.ts +++ b/test/moves/power_split.test.ts @@ -24,7 +24,7 @@ describe("Moves - Power Split", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemyAbility(Abilities.NONE) .enemySpecies(Species.MEW) .enemyLevel(200) diff --git a/test/moves/power_swap.test.ts b/test/moves/power_swap.test.ts index d6f5e782e66..5f6aa022a51 100644 --- a/test/moves/power_swap.test.ts +++ b/test/moves/power_swap.test.ts @@ -24,7 +24,7 @@ describe("Moves - Power Swap", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH) .enemySpecies(Species.INDEEDEE) diff --git a/test/moves/power_trick.test.ts b/test/moves/power_trick.test.ts index 0cd849bbcc5..181eeca81bc 100644 --- a/test/moves/power_trick.test.ts +++ b/test/moves/power_trick.test.ts @@ -25,7 +25,7 @@ describe("Moves - Power Trick", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH) .enemySpecies(Species.MEW) diff --git a/test/moves/protect.test.ts b/test/moves/protect.test.ts index d50c490f7d3..183430f8654 100644 --- a/test/moves/protect.test.ts +++ b/test/moves/protect.test.ts @@ -27,7 +27,7 @@ describe("Moves - Protect", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.moveset([Moves.PROTECT]); game.override.enemySpecies(Species.SNORLAX); diff --git a/test/moves/psycho_shift.test.ts b/test/moves/psycho_shift.test.ts index 0a82189d201..678742906c7 100644 --- a/test/moves/psycho_shift.test.ts +++ b/test/moves/psycho_shift.test.ts @@ -26,7 +26,7 @@ describe("Moves - Psycho Shift", () => { .moveset([Moves.PSYCHO_SHIFT]) .ability(Abilities.BALL_FETCH) .statusEffect(StatusEffect.POISON) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyLevel(20) diff --git a/test/moves/purify.test.ts b/test/moves/purify.test.ts index 30d9df8ff67..191539d8cec 100644 --- a/test/moves/purify.test.ts +++ b/test/moves/purify.test.ts @@ -25,7 +25,7 @@ describe("Moves - Purify", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.starterSpecies(Species.PYUKUMUKU); game.override.startingLevel(10); diff --git a/test/moves/quash.test.ts b/test/moves/quash.test.ts index f85dbd89517..5bf8271320b 100644 --- a/test/moves/quash.test.ts +++ b/test/moves/quash.test.ts @@ -25,7 +25,7 @@ describe("Moves - Quash", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("double") + .battleStyle("double") .enemyLevel(1) .enemySpecies(Species.SLOWPOKE) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/quick_guard.test.ts b/test/moves/quick_guard.test.ts index 22d4a5078ac..d9970ce64fa 100644 --- a/test/moves/quick_guard.test.ts +++ b/test/moves/quick_guard.test.ts @@ -25,7 +25,7 @@ describe("Moves - Quick Guard", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.moveset([Moves.QUICK_GUARD, Moves.SPLASH, Moves.FOLLOW_ME]); @@ -84,7 +84,7 @@ describe("Moves - Quick Guard", () => { }); test("should fail if the user is the last to move in the turn", async () => { - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.enemyMoveset([Moves.QUICK_GUARD]); await game.classicMode.startBattle([Species.CHARIZARD]); diff --git a/test/moves/rage_fist.test.ts b/test/moves/rage_fist.test.ts index f44901c5aba..687d805da78 100644 --- a/test/moves/rage_fist.test.ts +++ b/test/moves/rage_fist.test.ts @@ -27,7 +27,7 @@ describe("Moves - Rage Fist", () => { move = allMoves[Moves.RAGE_FIST]; game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .moveset([Moves.RAGE_FIST, Moves.SPLASH, Moves.SUBSTITUTE]) .startingLevel(100) .enemyLevel(1) diff --git a/test/moves/rage_powder.test.ts b/test/moves/rage_powder.test.ts index ab05ae2e0bc..284b558f842 100644 --- a/test/moves/rage_powder.test.ts +++ b/test/moves/rage_powder.test.ts @@ -22,7 +22,7 @@ describe("Moves - Rage Powder", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.enemySpecies(Species.SNORLAX); game.override.startingLevel(100); game.override.enemyLevel(100); diff --git a/test/moves/reflect.test.ts b/test/moves/reflect.test.ts index ac879a7cc2b..473b46bf097 100644 --- a/test/moves/reflect.test.ts +++ b/test/moves/reflect.test.ts @@ -34,7 +34,7 @@ describe("Moves - Reflect", () => { beforeEach(() => { game = new GameManager(phaserGame); globalScene = game.scene; - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.ability(Abilities.NONE); game.override.moveset([Moves.ABSORB, Moves.ROCK_SLIDE, Moves.TACKLE]); game.override.enemyLevel(100); @@ -60,7 +60,7 @@ describe("Moves - Reflect", () => { }); it("reduces damage of physical attacks by a third in a double battle", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); const moveToUse = Moves.ROCK_SLIDE; await game.classicMode.startBattle([Species.SHUCKLE, Species.SHUCKLE]); diff --git a/test/moves/reflect_type.test.ts b/test/moves/reflect_type.test.ts index 78371d35475..efd58bfeadf 100644 --- a/test/moves/reflect_type.test.ts +++ b/test/moves/reflect_type.test.ts @@ -22,7 +22,7 @@ describe("Moves - Reflect Type", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.ability(Abilities.BALL_FETCH).battleType("single").disableCrits().enemyAbility(Abilities.BALL_FETCH); + game.override.ability(Abilities.BALL_FETCH).battleStyle("single").disableCrits().enemyAbility(Abilities.BALL_FETCH); }); it("will make the user Normal/Grass if targetting a typeless Pokemon affected by Forest's Curse", async () => { diff --git a/test/moves/relic_song.test.ts b/test/moves/relic_song.test.ts index d8f1373b4c0..86195e81a24 100644 --- a/test/moves/relic_song.test.ts +++ b/test/moves/relic_song.test.ts @@ -24,7 +24,7 @@ describe("Moves - Relic Song", () => { game = new GameManager(phaserGame); game.override .moveset([Moves.RELIC_SONG, Moves.SPLASH]) - .battleType("single") + .battleStyle("single") .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH) .enemySpecies(Species.MAGIKARP) diff --git a/test/moves/retaliate.test.ts b/test/moves/retaliate.test.ts index e916c9ffeaa..9ad7cd7853b 100644 --- a/test/moves/retaliate.test.ts +++ b/test/moves/retaliate.test.ts @@ -26,7 +26,7 @@ describe("Moves - Retaliate", () => { retaliate = allMoves[Moves.RETALIATE]; game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.SNORLAX) .enemyMoveset([Moves.RETALIATE, Moves.RETALIATE, Moves.RETALIATE, Moves.RETALIATE]) .enemyLevel(100) diff --git a/test/moves/revival_blessing.test.ts b/test/moves/revival_blessing.test.ts index 87be20f60ad..860ce5524d4 100644 --- a/test/moves/revival_blessing.test.ts +++ b/test/moves/revival_blessing.test.ts @@ -27,7 +27,7 @@ describe("Moves - Revival Blessing", () => { game.override .moveset([Moves.SPLASH, Moves.REVIVAL_BLESSING, Moves.MEMENTO]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) @@ -88,7 +88,7 @@ describe("Moves - Revival Blessing", () => { it("should revive a player pokemon and immediately send it back out if used in the same turn it fainted in doubles", async () => { game.override - .battleType("double") + .battleStyle("double") .enemyMoveset([Moves.SPLASH, Moves.FISSURE]) .enemyAbility(Abilities.NO_GUARD) .enemyLevel(100); @@ -116,7 +116,7 @@ describe("Moves - Revival Blessing", () => { }); it("should not summon multiple pokemon to the same slot when reviving the enemy ally in doubles", async () => { - game.override.battleType("double").enemyMoveset([Moves.REVIVAL_BLESSING]).moveset([Moves.SPLASH]).startingWave(25); // 2nd rival battle - must have 3+ pokemon + game.override.battleStyle("double").enemyMoveset([Moves.REVIVAL_BLESSING]).moveset([Moves.SPLASH]).startingWave(25); // 2nd rival battle - must have 3+ pokemon await game.classicMode.startBattle([Species.ARCEUS, Species.GIRATINA]); const enemyFainting = game.scene.getEnemyField()[0]; diff --git a/test/moves/role_play.test.ts b/test/moves/role_play.test.ts index 2a899b6e987..d4893212003 100644 --- a/test/moves/role_play.test.ts +++ b/test/moves/role_play.test.ts @@ -25,7 +25,7 @@ describe("Moves - Role Play", () => { game.override .moveset([Moves.SPLASH, Moves.ROLE_PLAY]) .ability(Abilities.ADAPTABILITY) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/rollout.test.ts b/test/moves/rollout.test.ts index 89270c2dfc7..b477fd8274f 100644 --- a/test/moves/rollout.test.ts +++ b/test/moves/rollout.test.ts @@ -24,7 +24,7 @@ describe("Moves - Rollout", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.disableCrits(); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.starterSpecies(Species.RATTATA); game.override.ability(Abilities.BALL_FETCH); game.override.enemySpecies(Species.BIDOOF); diff --git a/test/moves/roost.test.ts b/test/moves/roost.test.ts index a52b81085c8..e55c76ca220 100644 --- a/test/moves/roost.test.ts +++ b/test/moves/roost.test.ts @@ -25,7 +25,7 @@ describe("Moves - Roost", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.enemySpecies(Species.RELICANTH); game.override.startingLevel(100); game.override.enemyLevel(100); diff --git a/test/moves/round.test.ts b/test/moves/round.test.ts index 82f080a25ea..a58efb730f8 100644 --- a/test/moves/round.test.ts +++ b/test/moves/round.test.ts @@ -27,7 +27,7 @@ describe("Moves - Round", () => { game.override .moveset([Moves.SPLASH, Moves.ROUND]) .ability(Abilities.BALL_FETCH) - .battleType("double") + .battleStyle("double") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/safeguard.test.ts b/test/moves/safeguard.test.ts index 675c74f28d0..7804b63f5c5 100644 --- a/test/moves/safeguard.test.ts +++ b/test/moves/safeguard.test.ts @@ -26,7 +26,7 @@ describe("Moves - Safeguard", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.DRATINI) .enemyMoveset([Moves.SAFEGUARD]) .enemyAbility(Abilities.BALL_FETCH) @@ -71,7 +71,7 @@ describe("Moves - Safeguard", () => { }); it("protects ally from status", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); await game.classicMode.startBattle(); diff --git a/test/moves/scale_shot.test.ts b/test/moves/scale_shot.test.ts index 2be632adb54..4731ccf9574 100644 --- a/test/moves/scale_shot.test.ts +++ b/test/moves/scale_shot.test.ts @@ -30,7 +30,7 @@ describe("Moves - Scale Shot", () => { game = new GameManager(phaserGame); game.override .moveset([Moves.SCALE_SHOT]) - .battleType("single") + .battleStyle("single") .disableCrits() .ability(Abilities.NO_GUARD) .passiveAbility(Abilities.SKILL_LINK) diff --git a/test/moves/secret_power.test.ts b/test/moves/secret_power.test.ts index d769b112b70..cbc0cded28b 100644 --- a/test/moves/secret_power.test.ts +++ b/test/moves/secret_power.test.ts @@ -33,7 +33,7 @@ describe("Moves - Secret Power", () => { game.override .moveset([Moves.SECRET_POWER]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyLevel(60) @@ -65,7 +65,7 @@ describe("Moves - Secret Power", () => { .moveset([Moves.FIRE_PLEDGE, Moves.WATER_PLEDGE, Moves.SECRET_POWER, Moves.SPLASH]) .ability(Abilities.SERENE_GRACE) .enemyMoveset([Moves.SPLASH]) - .battleType("double"); + .battleStyle("double"); await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); const sereneGraceAttr = allAbilities[Abilities.SERENE_GRACE].getAttrs(MoveEffectChanceMultiplierAbAttr)[0]; diff --git a/test/moves/shed_tail.test.ts b/test/moves/shed_tail.test.ts index 6744c4e9ed8..845399f6c27 100644 --- a/test/moves/shed_tail.test.ts +++ b/test/moves/shed_tail.test.ts @@ -25,7 +25,7 @@ describe("Moves - Shed Tail", () => { game = new GameManager(phaserGame); game.override .moveset([Moves.SHED_TAIL]) - .battleType("single") + .battleStyle("single") .enemySpecies(Species.SNORLAX) .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH); diff --git a/test/moves/shell_side_arm.test.ts b/test/moves/shell_side_arm.test.ts index a5b065b76cb..e43bf6db037 100644 --- a/test/moves/shell_side_arm.test.ts +++ b/test/moves/shell_side_arm.test.ts @@ -30,7 +30,7 @@ describe("Moves - Shell Side Arm", () => { game = new GameManager(phaserGame); game.override .moveset([Moves.SHELL_SIDE_ARM, Moves.SPLASH]) - .battleType("single") + .battleStyle("single") .startingLevel(100) .enemyLevel(100) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/shell_trap.test.ts b/test/moves/shell_trap.test.ts index 2df94cdb828..f6501c2cd9e 100644 --- a/test/moves/shell_trap.test.ts +++ b/test/moves/shell_trap.test.ts @@ -27,7 +27,7 @@ describe("Moves - Shell Trap", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("double") + .battleStyle("double") .moveset([Moves.SHELL_TRAP, Moves.SPLASH, Moves.BULLDOZE]) .enemySpecies(Species.SNORLAX) .enemyMoveset([Moves.RAZOR_LEAF]) @@ -128,7 +128,7 @@ describe("Moves - Shell Trap", () => { }); it("should not activate from a subsequent physical attack", async () => { - game.override.battleType("single"); + game.override.battleStyle("single"); vi.spyOn(allMoves[Moves.RAZOR_LEAF], "priority", "get").mockReturnValue(-4); await game.startBattle([Species.CHARIZARD]); diff --git a/test/moves/simple_beam.test.ts b/test/moves/simple_beam.test.ts index ce86f42671e..225fda28083 100644 --- a/test/moves/simple_beam.test.ts +++ b/test/moves/simple_beam.test.ts @@ -24,7 +24,7 @@ describe("Moves - Simple Beam", () => { game.override .moveset([Moves.SPLASH, Moves.SIMPLE_BEAM]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/sketch.test.ts b/test/moves/sketch.test.ts index dfbf2eca713..c9755189a71 100644 --- a/test/moves/sketch.test.ts +++ b/test/moves/sketch.test.ts @@ -27,7 +27,7 @@ describe("Moves - Sketch", () => { game = new GameManager(phaserGame); game.override .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.SHUCKLE) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/skill_swap.test.ts b/test/moves/skill_swap.test.ts index f807a85eaf6..562e4bb56ed 100644 --- a/test/moves/skill_swap.test.ts +++ b/test/moves/skill_swap.test.ts @@ -25,7 +25,7 @@ describe("Moves - Skill Swap", () => { game.override .moveset([Moves.SPLASH, Moves.SKILL_SWAP]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/sleep_talk.test.ts b/test/moves/sleep_talk.test.ts index d31eff34a7a..cbe3b6d7d3a 100644 --- a/test/moves/sleep_talk.test.ts +++ b/test/moves/sleep_talk.test.ts @@ -28,7 +28,7 @@ describe("Moves - Sleep Talk", () => { .moveset([Moves.SPLASH, Moves.SLEEP_TALK]) .statusEffect(StatusEffect.SLEEP) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/solar_beam.test.ts b/test/moves/solar_beam.test.ts index dffd4f210e5..49605a70c66 100644 --- a/test/moves/solar_beam.test.ts +++ b/test/moves/solar_beam.test.ts @@ -27,7 +27,7 @@ describe("Moves - Solar Beam", () => { game = new GameManager(phaserGame); game.override .moveset(Moves.SOLAR_BEAM) - .battleType("single") + .battleStyle("single") .startingLevel(100) .enemySpecies(Species.SNORLAX) .enemyLevel(100) diff --git a/test/moves/sparkly_swirl.test.ts b/test/moves/sparkly_swirl.test.ts index 6cd357c7e0e..b9df302933c 100644 --- a/test/moves/sparkly_swirl.test.ts +++ b/test/moves/sparkly_swirl.test.ts @@ -34,7 +34,7 @@ describe("Moves - Sparkly Swirl", () => { }); it("should cure status effect of the user, its ally, and all party pokemon", async () => { - game.override.battleType("double").statusEffect(StatusEffect.BURN); + game.override.battleStyle("double").statusEffect(StatusEffect.BURN); await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA, Species.RATTATA]); const [leftPlayer, rightPlayer, partyPokemon] = game.scene.getPlayerParty(); const leftOpp = game.scene.getEnemyPokemon()!; @@ -58,7 +58,7 @@ describe("Moves - Sparkly Swirl", () => { }); it("should not cure status effect of the target/target's allies", async () => { - game.override.battleType("double").enemyStatusEffect(StatusEffect.BURN); + game.override.battleStyle("double").enemyStatusEffect(StatusEffect.BURN); await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA]); const [leftOpp, rightOpp] = game.scene.getEnemyField(); diff --git a/test/moves/speed_swap.test.ts b/test/moves/speed_swap.test.ts index a1385ce5386..2b010885e34 100644 --- a/test/moves/speed_swap.test.ts +++ b/test/moves/speed_swap.test.ts @@ -24,7 +24,7 @@ describe("Moves - Speed Swap", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemyAbility(Abilities.NONE) .enemyMoveset(Moves.SPLASH) .enemySpecies(Species.MEW) diff --git a/test/moves/spikes.test.ts b/test/moves/spikes.test.ts index 76af15777bb..3dfa398d7d6 100644 --- a/test/moves/spikes.test.ts +++ b/test/moves/spikes.test.ts @@ -23,7 +23,7 @@ describe("Moves - Spikes", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) .ability(Abilities.BALL_FETCH) @@ -81,7 +81,7 @@ describe("Moves - Spikes", () => { it("should work when all targets fainted", async () => { game.override.enemySpecies(Species.DIGLETT); - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.startingLevel(50); await game.classicMode.startBattle([Species.RAYQUAZA, Species.ROWLET]); diff --git a/test/moves/spit_up.test.ts b/test/moves/spit_up.test.ts index d71647bda52..c034117bc64 100644 --- a/test/moves/spit_up.test.ts +++ b/test/moves/spit_up.test.ts @@ -32,7 +32,7 @@ describe("Moves - Spit Up", () => { spitUp = allMoves[Moves.SPIT_UP]; game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.enemySpecies(Species.RATTATA); game.override.enemyMoveset(Moves.SPLASH); diff --git a/test/moves/spotlight.test.ts b/test/moves/spotlight.test.ts index 91705dbb2fa..2c4f652e408 100644 --- a/test/moves/spotlight.test.ts +++ b/test/moves/spotlight.test.ts @@ -22,7 +22,7 @@ describe("Moves - Spotlight", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.starterSpecies(Species.AMOONGUSS); game.override.enemySpecies(Species.SNORLAX); game.override.startingLevel(100); diff --git a/test/moves/steamroller.test.ts b/test/moves/steamroller.test.ts index ba96928e01d..b32b4551c81 100644 --- a/test/moves/steamroller.test.ts +++ b/test/moves/steamroller.test.ts @@ -25,7 +25,7 @@ describe("Moves - Steamroller", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.moveset([Moves.STEAMROLLER]).battleType("single").enemyAbility(Abilities.BALL_FETCH); + game.override.moveset([Moves.STEAMROLLER]).battleStyle("single").enemyAbility(Abilities.BALL_FETCH); }); it("should always hit a minimzed target with double damage", async () => { diff --git a/test/moves/stockpile.test.ts b/test/moves/stockpile.test.ts index 033f24d5229..4b8f51c32b2 100644 --- a/test/moves/stockpile.test.ts +++ b/test/moves/stockpile.test.ts @@ -27,7 +27,7 @@ describe("Moves - Stockpile", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.enemySpecies(Species.RATTATA); game.override.enemyMoveset(Moves.SPLASH); diff --git a/test/moves/struggle.test.ts b/test/moves/struggle.test.ts index 6b566df9d54..61c6cd23e10 100644 --- a/test/moves/struggle.test.ts +++ b/test/moves/struggle.test.ts @@ -24,7 +24,7 @@ describe("Moves - Struggle", () => { game.override .moveset([Moves.SPLASH]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/substitute.test.ts b/test/moves/substitute.test.ts index 23f7f4af4b9..2e82078418b 100644 --- a/test/moves/substitute.test.ts +++ b/test/moves/substitute.test.ts @@ -36,7 +36,7 @@ describe("Moves - Substitute", () => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .moveset([Moves.SUBSTITUTE, Moves.SWORDS_DANCE, Moves.TACKLE, Moves.SPLASH]) .enemySpecies(Species.SNORLAX) .enemyAbility(Abilities.INSOMNIA) diff --git a/test/moves/swallow.test.ts b/test/moves/swallow.test.ts index baa03801079..d548522068b 100644 --- a/test/moves/swallow.test.ts +++ b/test/moves/swallow.test.ts @@ -27,7 +27,7 @@ describe("Moves - Swallow", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.enemySpecies(Species.RATTATA); game.override.enemyMoveset(Moves.SPLASH); diff --git a/test/moves/syrup_bomb.test.ts b/test/moves/syrup_bomb.test.ts index 1e193793d82..8e9134497d0 100644 --- a/test/moves/syrup_bomb.test.ts +++ b/test/moves/syrup_bomb.test.ts @@ -25,7 +25,7 @@ describe("Moves - SYRUP BOMB", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.SNORLAX) .enemyAbility(Abilities.BALL_FETCH) .ability(Abilities.BALL_FETCH) diff --git a/test/moves/tackle.test.ts b/test/moves/tackle.test.ts index 44fc698ec62..162836cd181 100644 --- a/test/moves/tackle.test.ts +++ b/test/moves/tackle.test.ts @@ -24,7 +24,7 @@ describe("Moves - Tackle", () => { beforeEach(() => { game = new GameManager(phaserGame); const moveToUse = Moves.TACKLE; - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.enemySpecies(Species.MAGIKARP); game.override.startingLevel(1); game.override.startingWave(97); diff --git a/test/moves/tail_whip.test.ts b/test/moves/tail_whip.test.ts index 41c39ab22ca..2d3ade2691d 100644 --- a/test/moves/tail_whip.test.ts +++ b/test/moves/tail_whip.test.ts @@ -25,7 +25,7 @@ describe("Moves - Tail whip", () => { beforeEach(() => { game = new GameManager(phaserGame); const moveToUse = Moves.TAIL_WHIP; - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.enemySpecies(Species.RATTATA); game.override.enemyAbility(Abilities.INSOMNIA); game.override.ability(Abilities.INSOMNIA); diff --git a/test/moves/tailwind.test.ts b/test/moves/tailwind.test.ts index 591b94408ce..40bae67b514 100644 --- a/test/moves/tailwind.test.ts +++ b/test/moves/tailwind.test.ts @@ -25,7 +25,7 @@ describe("Moves - Tailwind", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("double") + .battleStyle("double") .moveset([Moves.TAILWIND, Moves.SPLASH]) .enemyMoveset(Moves.SPLASH) .enemyAbility(Abilities.BALL_FETCH) @@ -54,7 +54,7 @@ describe("Moves - Tailwind", () => { }); it("lasts for 4 turns", async () => { - game.override.battleType("single"); + game.override.battleStyle("single"); await game.classicMode.startBattle([Species.MAGIKARP]); @@ -77,7 +77,7 @@ describe("Moves - Tailwind", () => { }); it("does not affect the opposing side", async () => { - game.override.battleType("single"); + game.override.battleStyle("single"); await game.classicMode.startBattle([Species.MAGIKARP]); diff --git a/test/moves/tar_shot.test.ts b/test/moves/tar_shot.test.ts index ac3ba534446..68f19e3ab51 100644 --- a/test/moves/tar_shot.test.ts +++ b/test/moves/tar_shot.test.ts @@ -24,7 +24,7 @@ describe("Moves - Tar Shot", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH) .enemySpecies(Species.TANGELA) diff --git a/test/moves/taunt.test.ts b/test/moves/taunt.test.ts index adc1434c7dd..e0bb13c61fb 100644 --- a/test/moves/taunt.test.ts +++ b/test/moves/taunt.test.ts @@ -23,7 +23,7 @@ describe("Moves - Taunt", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset([Moves.TAUNT, Moves.SPLASH]) .enemySpecies(Species.SHUCKLE) diff --git a/test/moves/telekinesis.test.ts b/test/moves/telekinesis.test.ts index 1355cb975f3..d11cc0861f0 100644 --- a/test/moves/telekinesis.test.ts +++ b/test/moves/telekinesis.test.ts @@ -27,7 +27,7 @@ describe("Moves - Telekinesis", () => { game = new GameManager(phaserGame); game.override .moveset([Moves.TELEKINESIS, Moves.TACKLE, Moves.MUD_SHOT, Moves.SMACK_DOWN]) - .battleType("single") + .battleStyle("single") .enemySpecies(Species.SNORLAX) .enemyLevel(60) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/tera_blast.test.ts b/test/moves/tera_blast.test.ts index c1a2b999fa0..5dc3a914a2e 100644 --- a/test/moves/tera_blast.test.ts +++ b/test/moves/tera_blast.test.ts @@ -34,7 +34,7 @@ describe("Moves - Tera Blast", () => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .disableCrits() .starterSpecies(Species.FEEBAS) .moveset([Moves.TERA_BLAST]) diff --git a/test/moves/tera_starstorm.test.ts b/test/moves/tera_starstorm.test.ts index 9f97b2a51aa..5ae0c575599 100644 --- a/test/moves/tera_starstorm.test.ts +++ b/test/moves/tera_starstorm.test.ts @@ -25,7 +25,7 @@ describe("Moves - Tera Starstorm", () => { game = new GameManager(phaserGame); game.override .moveset([Moves.TERA_STARSTORM, Moves.SPLASH]) - .battleType("double") + .battleStyle("double") .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH) .enemyLevel(30) @@ -33,7 +33,7 @@ describe("Moves - Tera Starstorm", () => { }); it("changes type to Stellar when used by Terapagos in its Stellar Form", async () => { - game.override.battleType("single"); + game.override.battleStyle("single"); await game.classicMode.startBattle([Species.TERAPAGOS]); const terapagos = game.scene.getPlayerPokemon()!; diff --git a/test/moves/thousand_arrows.test.ts b/test/moves/thousand_arrows.test.ts index 109fc2c6936..7259fda8560 100644 --- a/test/moves/thousand_arrows.test.ts +++ b/test/moves/thousand_arrows.test.ts @@ -24,7 +24,7 @@ describe("Moves - Thousand Arrows", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.enemySpecies(Species.TOGETIC); game.override.startingLevel(100); game.override.enemyLevel(100); diff --git a/test/moves/throat_chop.test.ts b/test/moves/throat_chop.test.ts index 755e60fe425..aaae9c0f5bb 100644 --- a/test/moves/throat_chop.test.ts +++ b/test/moves/throat_chop.test.ts @@ -24,7 +24,7 @@ describe("Moves - Throat Chop", () => { game = new GameManager(phaserGame); game.override .moveset(Array(4).fill(Moves.GROWL)) - .battleType("single") + .battleStyle("single") .ability(Abilities.BALL_FETCH) .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Array(4).fill(Moves.THROAT_CHOP)) diff --git a/test/moves/thunder_wave.test.ts b/test/moves/thunder_wave.test.ts index 9f907e38b62..abfb5828d3b 100644 --- a/test/moves/thunder_wave.test.ts +++ b/test/moves/thunder_wave.test.ts @@ -24,7 +24,7 @@ describe("Moves - Thunder Wave", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .starterSpecies(Species.PIKACHU) .moveset([Moves.THUNDER_WAVE]) .enemyMoveset(Moves.SPLASH); diff --git a/test/moves/tidy_up.test.ts b/test/moves/tidy_up.test.ts index 9d98feb13f5..ba7a1e07959 100644 --- a/test/moves/tidy_up.test.ts +++ b/test/moves/tidy_up.test.ts @@ -26,7 +26,7 @@ describe("Moves - Tidy Up", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.enemySpecies(Species.MAGIKARP); game.override.enemyAbility(Abilities.BALL_FETCH); game.override.enemyMoveset(Moves.SPLASH); diff --git a/test/moves/torment.test.ts b/test/moves/torment.test.ts index 75143053321..d06837d2806 100644 --- a/test/moves/torment.test.ts +++ b/test/moves/torment.test.ts @@ -24,7 +24,7 @@ describe("Moves - Torment", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset([Moves.TORMENT, Moves.SPLASH]) .enemySpecies(Species.SHUCKLE) diff --git a/test/moves/toxic.test.ts b/test/moves/toxic.test.ts index f2b1f82fe02..f908d27ec7e 100644 --- a/test/moves/toxic.test.ts +++ b/test/moves/toxic.test.ts @@ -23,7 +23,7 @@ describe("Moves - Toxic", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single").moveset(Moves.TOXIC).enemySpecies(Species.MAGIKARP).enemyMoveset(Moves.SPLASH); + game.override.battleStyle("single").moveset(Moves.TOXIC).enemySpecies(Species.MAGIKARP).enemyMoveset(Moves.SPLASH); }); it("should be guaranteed to hit if user is Poison-type", async () => { diff --git a/test/moves/toxic_spikes.test.ts b/test/moves/toxic_spikes.test.ts index d457ec5cb56..624db27bb92 100644 --- a/test/moves/toxic_spikes.test.ts +++ b/test/moves/toxic_spikes.test.ts @@ -28,7 +28,7 @@ describe("Moves - Toxic Spikes", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .startingWave(5) .enemySpecies(Species.RATTATA) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/transform.test.ts b/test/moves/transform.test.ts index d37decf28f4..5bcb7c7ed4c 100644 --- a/test/moves/transform.test.ts +++ b/test/moves/transform.test.ts @@ -26,7 +26,7 @@ describe("Moves - Transform", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.MEW) .enemyLevel(200) .enemyAbility(Abilities.BEAST_BOOST) diff --git a/test/moves/trick_or_treat.test.ts b/test/moves/trick_or_treat.test.ts index 108028f3008..3b32e09f72d 100644 --- a/test/moves/trick_or_treat.test.ts +++ b/test/moves/trick_or_treat.test.ts @@ -25,7 +25,7 @@ describe("Moves - Trick Or Treat", () => { game.override .moveset([Moves.FORESTS_CURSE, Moves.TRICK_OR_TREAT]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/triple_arrows.test.ts b/test/moves/triple_arrows.test.ts index eb434b25815..58ce8a9c528 100644 --- a/test/moves/triple_arrows.test.ts +++ b/test/moves/triple_arrows.test.ts @@ -32,7 +32,7 @@ describe("Moves - Triple Arrows", () => { game.override .ability(Abilities.BALL_FETCH) .moveset([Moves.TRIPLE_ARROWS]) - .battleType("single") + .battleStyle("single") .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.STURDY) .enemyMoveset(Moves.SPLASH); diff --git a/test/moves/u_turn.test.ts b/test/moves/u_turn.test.ts index f1d212f3f47..68bb7fe05c1 100644 --- a/test/moves/u_turn.test.ts +++ b/test/moves/u_turn.test.ts @@ -23,7 +23,7 @@ describe("Moves - U-turn", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .enemySpecies(Species.GENGAR) .startingLevel(90) .startingWave(97) diff --git a/test/moves/upper_hand.test.ts b/test/moves/upper_hand.test.ts index ecfd9f0735c..66359a94ccb 100644 --- a/test/moves/upper_hand.test.ts +++ b/test/moves/upper_hand.test.ts @@ -26,7 +26,7 @@ describe("Moves - Upper Hand", () => { game.override .moveset(Moves.UPPER_HAND) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/moves/whirlwind.test.ts b/test/moves/whirlwind.test.ts index d6124b6c766..b0ca1783f2f 100644 --- a/test/moves/whirlwind.test.ts +++ b/test/moves/whirlwind.test.ts @@ -10,6 +10,9 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { Status } from "#app/data/status-effect"; import { StatusEffect } from "#enums/status-effect"; +import { BattlerIndex } from "#app/battle"; +import { BattleType } from "#enums/battle-type"; +import { TrainerType } from "#enums/trainer-type"; describe("Moves - Whirlwind", () => { let phaserGame: Phaser.Game; @@ -28,8 +31,8 @@ describe("Moves - Whirlwind", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") - .moveset(Moves.SPLASH) + .battleStyle("single") + .moveset([Moves.SPLASH]) .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset([Moves.SPLASH, Moves.WHIRLWIND]) .enemySpecies(Species.PIDGEY); @@ -41,7 +44,8 @@ describe("Moves - Whirlwind", () => { { move: Moves.SKY_DROP, name: "Sky Drop" }, ])("should not hit a flying target: $name (=$move)", async ({ move }) => { game.override.moveset([move]); - await game.classicMode.startBattle([Species.STARAPTOR]); + // Must have a pokemon in the back so that the move misses instead of fails. + await game.classicMode.startBattle([Species.STARAPTOR, Species.MAGIKARP]); const staraptor = game.scene.getPlayerPokemon()!; @@ -156,4 +160,60 @@ describe("Moves - Whirlwind", () => { expect(lapras.isOnField()).toBe(true); expect(eevee.isOnField()).toBe(false); }); + + it("should not pull in the other trainer's pokemon in a partner trainer battle", async () => { + game.override + .battleType(BattleType.TRAINER) + .randomTrainer({ + trainerType: TrainerType.BREEDER, + alwaysDouble: true, + }) + .enemyMoveset([Moves.SPLASH, Moves.LUNAR_DANCE]) + .moveset([Moves.WHIRLWIND, Moves.SPLASH]); + await game.classicMode.startBattle([Species.MAGIKARP, Species.TOTODILE]); + + // expect the enemy to have at least 4 pokemon, necessary for this check to even work + expect(game.scene.getEnemyParty().length, "enemy must have exactly 4 pokemon").toBe(4); + + const user = game.scene.getPlayerPokemon()!; + + console.log(user.getMoveset(false)); + + game.move.select(Moves.SPLASH); + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.MEMENTO); + await game.forceEnemyMove(Moves.SPLASH); + await game.toNextTurn(); + + // Get the enemy pokemon id so we can check if is the same after switch. + const enemy_id = game.scene.getEnemyPokemon()!.id; + + // Hit the enemy that fainted with whirlwind. + game.move.select(Moves.WHIRLWIND, 0, BattlerIndex.ENEMY); + game.move.select(Moves.SPLASH, 1); + + await game.forceEnemyMove(Moves.SPLASH); + await game.forceEnemyMove(Moves.SPLASH); + + await game.toNextTurn(); + + // Expect the enemy pokemon to not have switched out. + expect(game.scene.getEnemyPokemon()!.id).toBe(enemy_id); + }); + + it("should force a wild pokemon to flee", async () => { + game.override + .battleType(BattleType.WILD) + .moveset([Moves.WHIRLWIND, Moves.SPLASH]) + .enemyMoveset(Moves.SPLASH) + .ability(Abilities.BALL_FETCH); + await game.classicMode.startBattle([Species.MAGIKARP]); + + const user = game.scene.getPlayerPokemon()!; + + game.move.select(Moves.WHIRLWIND); + await game.phaseInterceptor.to("BerryPhase"); + + expect(user.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); + }); }); diff --git a/test/moves/wide_guard.test.ts b/test/moves/wide_guard.test.ts index c466f104f67..85ebad806d7 100644 --- a/test/moves/wide_guard.test.ts +++ b/test/moves/wide_guard.test.ts @@ -25,7 +25,7 @@ describe("Moves - Wide Guard", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("double"); + game.override.battleStyle("double"); game.override.moveset([Moves.WIDE_GUARD, Moves.SPLASH, Moves.SURF]); diff --git a/test/moves/will_o_wisp.test.ts b/test/moves/will_o_wisp.test.ts index 0d19fec954c..b4e4975896b 100644 --- a/test/moves/will_o_wisp.test.ts +++ b/test/moves/will_o_wisp.test.ts @@ -26,7 +26,7 @@ describe("Moves - Will-O-Wisp", () => { game.override .moveset([Moves.WILL_O_WISP, Moves.SPLASH]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/phases/form-change-phase.test.ts b/test/phases/form-change-phase.test.ts index deac21ed0dd..974c64d9e5a 100644 --- a/test/phases/form-change-phase.test.ts +++ b/test/phases/form-change-phase.test.ts @@ -27,7 +27,7 @@ describe("Form Change Phase", () => { game.override .moveset([Moves.SPLASH]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) diff --git a/test/phases/frenzy-move-reset.test.ts b/test/phases/frenzy-move-reset.test.ts index 2f628f8a8c4..6d3ec767722 100644 --- a/test/phases/frenzy-move-reset.test.ts +++ b/test/phases/frenzy-move-reset.test.ts @@ -25,7 +25,7 @@ describe("Frenzy Move Reset", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleType("single") + .battleStyle("single") .disableCrits() .starterSpecies(Species.MAGIKARP) .moveset(Moves.THRASH) diff --git a/test/phases/game-over-phase.test.ts b/test/phases/game-over-phase.test.ts index 438efc85167..40473a022cb 100644 --- a/test/phases/game-over-phase.test.ts +++ b/test/phases/game-over-phase.test.ts @@ -27,7 +27,7 @@ describe("Game Over Phase", () => { game.override .moveset([Moves.MEMENTO, Moves.ICE_BEAM, Moves.SPLASH]) .ability(Abilities.BALL_FETCH) - .battleType("single") + .battleStyle("single") .disableCrits() .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH) diff --git a/test/reload.test.ts b/test/reload.test.ts index f54885eccfb..c69c0f9f484 100644 --- a/test/reload.test.ts +++ b/test/reload.test.ts @@ -48,7 +48,7 @@ describe("Reload", () => { it("should not have RNG inconsistencies after a biome switch", async () => { game.override .startingWave(10) - .battleType("single") + .battleStyle("single") .startingLevel(100) // Avoid levelling up .disableTrainerWaves() .moveset([Moves.SPLASH]) @@ -81,7 +81,7 @@ describe("Reload", () => { game.override .startingWave(10) .startingBiome(Biome.ICE_CAVE) // Will lead to Snowy Forest with randomly generated weather - .battleType("single") + .battleStyle("single") .startingLevel(100) // Avoid levelling up .disableTrainerWaves() .moveset([Moves.SPLASH]) @@ -116,7 +116,7 @@ describe("Reload", () => { }, 20000); it("should not have RNG inconsistencies at a Daily run double battle", async () => { - game.override.battleType("double"); + game.override.battleStyle("double"); await game.dailyMode.startBattle(); const preReloadRngState = Phaser.Math.RND.state(); @@ -129,7 +129,7 @@ describe("Reload", () => { }, 20000); it("should not have RNG inconsistencies at a Daily run Gym Leader fight", async () => { - game.override.battleType("single").startingWave(40); + game.override.battleStyle("single").startingWave(40); await game.dailyMode.startBattle(); const preReloadRngState = Phaser.Math.RND.state(); @@ -142,7 +142,7 @@ describe("Reload", () => { }, 20000); it("should not have RNG inconsistencies at a Daily run regular trainer fight", async () => { - game.override.battleType("single").startingWave(45); + game.override.battleStyle("single").startingWave(45); await game.dailyMode.startBattle(); const preReloadRngState = Phaser.Math.RND.state(); @@ -155,7 +155,7 @@ describe("Reload", () => { }, 20000); it("should not have RNG inconsistencies at a Daily run wave 50 Boss fight", async () => { - game.override.battleType("single").startingWave(50); + game.override.battleStyle("single").startingWave(50); await game.runToFinalBossEncounter([Species.BULBASAUR], GameModes.DAILY); const preReloadRngState = Phaser.Math.RND.state(); diff --git a/test/system/game_data.test.ts b/test/system/game_data.test.ts index 93e615711c4..94e82949fe6 100644 --- a/test/system/game_data.test.ts +++ b/test/system/game_data.test.ts @@ -22,7 +22,7 @@ describe("System - Game Data", () => { game = new GameManager(phaserGame); game.override .moveset([Moves.SPLASH]) - .battleType("single") + .battleStyle("single") .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH); }); diff --git a/test/testUtils/gameManagerUtils.ts b/test/testUtils/gameManagerUtils.ts index 11636bd66b4..9e9c8f15f96 100644 --- a/test/testUtils/gameManagerUtils.ts +++ b/test/testUtils/gameManagerUtils.ts @@ -1,4 +1,5 @@ -import Battle, { BattleType } from "#app/battle"; +import Battle from "#app/battle"; +import { BattleType } from "#enums/battle-type"; import type BattleScene from "#app/battle-scene"; import { getDailyRunStarters } from "#app/data/daily-run"; import { Gender } from "#app/data/gender"; diff --git a/test/testUtils/helpers/overridesHelper.ts b/test/testUtils/helpers/overridesHelper.ts index 0ed1511255b..d570a1a4195 100644 --- a/test/testUtils/helpers/overridesHelper.ts +++ b/test/testUtils/helpers/overridesHelper.ts @@ -15,6 +15,8 @@ import type { WeatherType } from "#enums/weather-type"; import { expect, vi } from "vitest"; import { GameManagerHelper } from "./gameManagerHelper"; import { shiftCharCodes } from "#app/utils"; +import type { RandomTrainerOverride } from "#app/overrides"; +import type { BattleType } from "#enums/battle-type"; /** * Helper to handle overrides in tests @@ -28,7 +30,7 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the starting biome * @warning Any event listeners that are attached to [NewArenaEvent](events\battle-scene.ts) may need to be handled down the line - * @param biome the biome to set + * @param biome - The biome to set */ public startingBiome(biome: Biome): this { this.game.scene.newArena(biome); @@ -37,8 +39,8 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Override the starting wave (index) - * @param wave the wave (index) to set. Classic: `1`-`200` + * Override the starting wave index + * @param wave - The wave to set. Classic: `1`-`200` * @returns `this` */ public startingWave(wave: number): this { @@ -48,8 +50,8 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Override the player (pokemon) starting level - * @param level the (pokemon) level to set + * Override the player pokemon's starting level + * @param level - The level to set * @returns `this` */ public startingLevel(level: Species | number): this { @@ -60,7 +62,7 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the XP Multiplier - * @param value the XP multiplier to set + * @param value - The XP multiplier to set * @returns `this` */ public xpMultiplier(value: number): this { @@ -71,7 +73,7 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the wave level cap - * @param cap the level cap value to set; 0 uses normal level caps and negative values + * @param cap - The level cap value to set; 0 uses normal level caps and negative values * disable it completely * @returns `this` */ @@ -90,8 +92,8 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Override the player (pokemon) starting held items - * @param items the items to hold + * Override the player pokemon's starting held items + * @param items - The items to hold * @returns `this` */ public startingHeldItems(items: ModifierOverride[]): this { @@ -101,8 +103,8 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Override the player (pokemon) {@linkcode Species | species} - * @param species the (pokemon) {@linkcode Species | species} to set + * Override the player pokemon's {@linkcode Species | species} + * @param species - The {@linkcode Species | species} to set * @returns `this` */ public starterSpecies(species: Species | number): this { @@ -112,7 +114,7 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Override the player (pokemon) to be a random fusion + * Override the player pokemon to be a random fusion * @returns `this` */ public enableStarterFusion(): this { @@ -122,8 +124,8 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Override the player (pokemon) fusion species - * @param species the fusion species to set + * Override the player pokemon's fusion species + * @param species - The fusion species to set * @returns `this` */ public starterFusionSpecies(species: Species | number): this { @@ -133,8 +135,8 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Override the player (pokemons) forms - * @param forms the (pokemon) forms to set + * Override the player pokemon's forms + * @param forms - The forms to set * @returns `this` */ public starterForms(forms: Partial>): this { @@ -148,7 +150,7 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the player's starting modifiers - * @param modifiers the modifiers to set + * @param modifiers - The modifiers to set * @returns `this` */ public startingModifier(modifiers: ModifierOverride[]): this { @@ -158,8 +160,8 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Override the player (pokemon) {@linkcode Abilities | ability}. - * @param ability the (pokemon) {@linkcode Abilities | ability} to set + * Override the player pokemon's {@linkcode Abilities | ability}. + * @param ability - The {@linkcode Abilities | ability} to set * @returns `this` */ public ability(ability: Abilities): this { @@ -169,8 +171,8 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Override the player (pokemon) **passive** {@linkcode Abilities | ability} - * @param passiveAbility the (pokemon) **passive** {@linkcode Abilities | ability} to set + * Override the player pokemon's **passive** {@linkcode Abilities | ability} + * @param passiveAbility - The **passive** {@linkcode Abilities | ability} to set * @returns `this` */ public passiveAbility(passiveAbility: Abilities): this { @@ -180,8 +182,8 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Forces the status of the player (pokemon) **passive** {@linkcode Abilities | ability} - * @param hasPassiveAbility forces the passive to be active if `true`, inactive if `false` + * Forces the status of the player pokemon **passive** {@linkcode Abilities | ability} + * @param hasPassiveAbility - Forces the passive to be active if `true`, inactive if `false` * @returns `this` */ public hasPassiveAbility(hasPassiveAbility: boolean | null): this { @@ -194,8 +196,8 @@ export class OverridesHelper extends GameManagerHelper { return this; } /** - * Override the player (pokemon) {@linkcode Moves | moves}set - * @param moveset the {@linkcode Moves | moves}set to set + * Override the player pokemon's {@linkcode Moves | moves}set + * @param moveset - The {@linkcode Moves | moves}set to set * @returns `this` */ public moveset(moveset: Moves | Moves[]): this { @@ -209,8 +211,8 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Override the player (pokemon) {@linkcode StatusEffect | status-effect} - * @param statusEffect the {@linkcode StatusEffect | status-effect} to set + * Override the player pokemon's {@linkcode StatusEffect | status-effect} + * @param statusEffect - The {@linkcode StatusEffect | status-effect} to set * @returns */ public statusEffect(statusEffect: StatusEffect): this { @@ -229,6 +231,19 @@ export class OverridesHelper extends GameManagerHelper { return this; } + /** + * Override the trainer chosen when a random trainer is selected. + * + * Does not force the battle to be a trainer battle. + * @see {@linkcode setBattleType} + * @returns `this` + */ + public randomTrainer(trainer: RandomTrainerOverride | null): this { + vi.spyOn(Overrides, "RANDOM_TRAINER_OVERRIDE", "get").mockReturnValue(trainer); + this.log("Partner battle is forced!"); + return this; + } + /** * Override each wave to not have critical hits * @returns `this` @@ -240,8 +255,8 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Override the {@linkcode WeatherType | weather (type)} - * @param type {@linkcode WeatherType | weather type} to set + * Override the {@linkcode WeatherType | weather type} + * @param type - The {@linkcode WeatherType | weather type} to set * @returns `this` */ public weather(type: WeatherType): this { @@ -252,7 +267,7 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the seed - * @param seed the seed to set + * @param seed - The seed to set * @returns `this` */ public seed(seed: string): this { @@ -264,20 +279,36 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Override the battle type (e.g., single or double). - * @see {@linkcode Overrides.BATTLE_TYPE_OVERRIDE} - * @param battleType battle type to set + * Override the battle style (e.g., single or double). + * @see {@linkcode Overrides.BATTLE_STYLE_OVERRIDE} + * @param battleStyle - The battle style to set * @returns `this` */ - public battleType(battleType: BattleStyle | null): this { - vi.spyOn(Overrides, "BATTLE_TYPE_OVERRIDE", "get").mockReturnValue(battleType); - this.log(battleType === null ? "Battle type override disabled!" : `Battle type set to ${battleType}!`); + public battleStyle(battleStyle: BattleStyle | null): this { + vi.spyOn(Overrides, "BATTLE_STYLE_OVERRIDE", "get").mockReturnValue(battleStyle); + this.log(battleStyle === null ? "Battle type override disabled!" : `Battle type set to ${battleStyle}!`); return this; } /** - * Override the enemy (pokemon) {@linkcode Species | species} - * @param species the (pokemon) {@linkcode Species | species} to set + * Override the battle type (e.g., WILD, or Trainer) for non-scripted battles. + * @see {@linkcode Overrides.BATTLE_TYPE_OVERRIDE} + * @param battleType - The battle type to set + * @returns `this` + */ + public battleType(battleType: Exclude): this { + vi.spyOn(Overrides, "BATTLE_TYPE_OVERRIDE", "get").mockReturnValue(battleType); + this.log( + battleType === null + ? "Battle type override disabled!" + : `Battle type set to ${battleType[battleType]} (=${battleType})!`, + ); + return this; + } + + /** + * Override the {@linkcode Species | species} of enemy pokemon + * @param species - The {@linkcode Species | species} to set * @returns `this` */ public enemySpecies(species: Species | number): this { @@ -287,7 +318,7 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Override the enemy (pokemon) to be a random fusion + * Override the enemy pokemon to be a random fusion * @returns `this` */ public enableEnemyFusion(): this { @@ -297,8 +328,8 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Override the enemy (pokemon) fusion species - * @param species the fusion species to set + * Override the enemy pokemon fusion species + * @param species - The fusion species to set * @returns `this` */ public enemyFusionSpecies(species: Species | number): this { @@ -308,8 +339,8 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Override the enemy (pokemon) {@linkcode Abilities | ability} - * @param ability the (pokemon) {@linkcode Abilities | ability} to set + * Override the {@linkcode Abilities | ability} of enemy pokemon + * @param ability - The {@linkcode Abilities | ability} to set * @returns `this` */ public enemyAbility(ability: Abilities): this { @@ -319,8 +350,8 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Override the enemy (pokemon) **passive** {@linkcode Abilities | ability} - * @param passiveAbility the (pokemon) **passive** {@linkcode Abilities | ability} to set + * Override the **passive** {@linkcode Abilities | ability} of enemy pokemon + * @param passiveAbility - The **passive** {@linkcode Abilities | ability} to set * @returns `this` */ public enemyPassiveAbility(passiveAbility: Abilities): this { @@ -330,8 +361,8 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Forces the status of the enemy (pokemon) **passive** {@linkcode Abilities | ability} - * @param hasPassiveAbility forces the passive to be active if `true`, inactive if `false` + * Forces the status of the enemy pokemon **passive** {@linkcode Abilities | ability} + * @param hasPassiveAbility - Forces the passive to be active if `true`, inactive if `false` * @returns `this` */ public enemyHasPassiveAbility(hasPassiveAbility: boolean | null): this { @@ -345,8 +376,8 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Override the enemy (pokemon) {@linkcode Moves | moves}set - * @param moveset the {@linkcode Moves | moves}set to set + * Override the {@linkcode Moves | move}set of enemy pokemon + * @param moveset - The {@linkcode Moves | move}set to set * @returns `this` */ public enemyMoveset(moveset: Moves | Moves[]): this { @@ -360,8 +391,8 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Override the enemy (pokemon) level - * @param level the level to set + * Override the level of enemy pokemon + * @param level - The level to set * @returns `this` */ public enemyLevel(level: number): this { @@ -371,8 +402,8 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Override the enemy (pokemon) {@linkcode StatusEffect | status-effect} - * @param statusEffect the {@linkcode StatusEffect | status-effect} to set + * Override the enemy {@linkcode StatusEffect | status-effect} for enemy pokemon + * @param statusEffect - The {@linkcode StatusEffect | status-effect} to set * @returns */ public enemyStatusEffect(statusEffect: StatusEffect): this { @@ -394,7 +425,7 @@ export class OverridesHelper extends GameManagerHelper { /** * Gives the player access to an Unlockable. - * @param unlockable The Unlockable(s) to enable. + * @param unlockable - The Unlockable(s) to enable. * @returns `this` */ public enableUnlockable(unlockable: Unlockables[]): this { @@ -405,7 +436,7 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the items rolled at the end of a battle - * @param items the items to be rolled + * @param items - The items to be rolled * @returns `this` */ public itemRewards(items: ModifierOverride[]): this { @@ -463,8 +494,8 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Override the enemy (Pokemon) to have the given amount of health segments - * @param healthSegments the number of segments to give + * Override the enemy Pokemon to have the given amount of health segments + * @param healthSegments - The number of segments to give * - `0` (default): the health segments will be handled like in the game based on wave, level and species * - `1`: the Pokemon will not be a boss * - `2`+: the Pokemon will be a boss with the given number of health segments @@ -493,7 +524,7 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the encounter chance for a mystery encounter. - * @param percentage the encounter chance in % + * @param percentage - The encounter chance in % * @returns `this` */ public mysteryEncounterChance(percentage: number): this { diff --git a/test/ui/battle_info.test.ts b/test/ui/battle_info.test.ts index 4c6274d5efb..c4548adc49c 100644 --- a/test/ui/battle_info.test.ts +++ b/test/ui/battle_info.test.ts @@ -32,7 +32,7 @@ describe("UI - Battle Info", () => { game = new GameManager(phaserGame); game.override .moveset([Moves.GUILLOTINE, Moves.SPLASH]) - .battleType("single") + .battleStyle("single") .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH) .enemySpecies(Species.CATERPIE); diff --git a/test/ui/transfer-item.test.ts b/test/ui/transfer-item.test.ts index 476f0744436..cbbdc1d50ee 100644 --- a/test/ui/transfer-item.test.ts +++ b/test/ui/transfer-item.test.ts @@ -26,7 +26,7 @@ describe("UI - Transfer Items", () => { beforeEach(async () => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override.battleStyle("single"); game.override.startingLevel(100); game.override.startingWave(1); game.override.startingHeldItems([ diff --git a/test/ui/type-hints.test.ts b/test/ui/type-hints.test.ts index fa7532fb674..fcb71186448 100644 --- a/test/ui/type-hints.test.ts +++ b/test/ui/type-hints.test.ts @@ -27,12 +27,12 @@ describe("UI - Type Hints", () => { beforeEach(async () => { game = new GameManager(phaserGame); game.settings.typeHints(true); //activate type hints - game.override.battleType("single").startingLevel(100).startingWave(1).enemyMoveset(Moves.SPLASH); + game.override.battleStyle("single").startingLevel(100).startingWave(1).enemyMoveset(Moves.SPLASH); }); it("check immunity color", async () => { game.override - .battleType("single") + .battleStyle("single") .startingLevel(100) .startingWave(1) .enemySpecies(Species.FLORGES) From a6e87c84382765a1922e675b2301eeb9b825e4a9 Mon Sep 17 00:00:00 2001 From: damocleas Date: Fri, 18 Apr 2025 22:25:05 -0400 Subject: [PATCH 038/262] [Bug] [Move] Supercell Slam now hits Minimized targets for double damage and can't miss (#5680) Added AlwaysHitMinimizeAttr and HitsTagForDoubleDamageAttr to Supercell Slam for Minimize --- src/data/moves/move.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 6e5e09839c1..7a2834c0322 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -11231,6 +11231,8 @@ export function initMoves() { new AttackMove(Moves.TEMPER_FLARE, PokemonType.FIRE, MoveCategory.PHYSICAL, 75, 100, 10, -1, 0, 9) .attr(MovePowerMultiplierAttr, (user, target, move) => user.getLastXMoves(2)[1]?.result === MoveResult.MISS || user.getLastXMoves(2)[1]?.result === MoveResult.FAIL ? 2 : 1), new AttackMove(Moves.SUPERCELL_SLAM, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 100, 95, 15, -1, 0, 9) + .attr(AlwaysHitMinimizeAttr) + .attr(HitsTagForDoubleDamageAttr, BattlerTagType.MINIMIZED) .attr(MissEffectAttr, crashDamageFunc) .attr(NoEffectAttr, crashDamageFunc) .recklessMove(), From 5854b21da0a191b19413325c1b3ff048e4582323 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Sat, 19 Apr 2025 06:57:03 -0500 Subject: [PATCH 039/262] [Refactor] Remove circular imports part 1 (#5663) * Extract Mode enum out of UI and into its own file Reduces circular imports from 909 to 773 * Move around utility files Reduces cyclical dependencies from 773 to 765 * Remove starterColors and bypassLogin from battle-scene Reduces cyclical dependencies from 765 to 623 * Fix test runner error * Update import for bypassLogin in test * Update mocks for utils in tests * Fix broken tests * Update selectWithTera override * Update path for utils in ab-attr.ts * Update path for utils in ability-class.ts * Fix utils import path in healer.test.ts --- src/account.ts | 4 +- src/battle-scene.ts | 17 +- src/battle.ts | 2 +- src/data/abilities/ab-attrs/ab-attr.ts | 4 +- src/data/abilities/ability-class.ts | 2 +- src/data/abilities/ability.ts | 2 +- src/data/arena-tag.ts | 2 +- src/data/balance/biomes.ts | 2 +- src/data/balance/egg-moves.ts | 2 +- src/data/balance/pokemon-evolutions.ts | 6 +- src/data/battle-anims.ts | 4 +- src/data/battler-tags.ts | 4 +- src/data/berry.ts | 2 +- src/data/challenge.ts | 2 +- src/data/custom-pokemon-data.ts | 2 +- src/data/daily-run.ts | 2 +- src/data/egg.ts | 2 +- src/data/moves/move.ts | 2 +- .../encounters/a-trainers-test-encounter.ts | 2 +- .../encounters/absolute-avarice-encounter.ts | 2 +- .../encounters/berries-abound-encounter.ts | 2 +- .../encounters/bug-type-superfan-encounter.ts | 2 +- .../encounters/clowning-around-encounter.ts | 12 +- .../encounters/dark-deal-encounter.ts | 2 +- .../encounters/delibirdy-encounter.ts | 2 +- .../department-store-sale-encounter.ts | 2 +- .../encounters/fiery-fallout-encounter.ts | 2 +- .../encounters/fight-or-flight-encounter.ts | 2 +- .../global-trade-system-encounter.ts | 9 +- .../mysterious-challengers-encounter.ts | 2 +- .../encounters/mysterious-chest-encounter.ts | 2 +- .../encounters/safari-zone-encounter.ts | 2 +- .../shady-vitamin-dealer-encounter.ts | 2 +- .../teleporting-hijinks-encounter.ts | 2 +- .../the-expert-pokemon-breeder-encounter.ts | 2 +- .../the-pokemon-salesman-encounter.ts | 2 +- .../encounters/training-session-encounter.ts | 2 +- .../encounters/trash-to-treasure-encounter.ts | 2 +- .../encounters/uncommon-breed-encounter.ts | 2 +- .../encounters/weird-dream-encounter.ts | 2 +- .../mystery-encounter-option.ts | 2 +- .../mystery-encounter-requirements.ts | 2 +- .../mystery-encounter-save-data.ts | 2 +- .../mystery-encounters/mystery-encounter.ts | 4 +- .../can-learn-move-requirement.ts | 2 +- .../utils/encounter-dialogue-utils.ts | 2 +- .../utils/encounter-phase-utils.ts | 18 +- .../utils/encounter-pokemon-utils.ts | 20 +-- .../encounter-transformation-sequence.ts | 2 +- src/data/nature.ts | 2 +- src/data/pokeball.ts | 2 +- src/data/pokemon-forms.ts | 2 +- src/data/pokemon-species.ts | 2 +- src/data/status-effect.ts | 2 +- src/data/trainer-names.ts | 2 +- src/data/trainers/TrainerPartyTemplate.ts | 2 +- src/data/trainers/trainer-config.ts | 2 +- src/data/weather.ts | 2 +- src/enums/ui-mode.ts | 47 +++++ src/field/anims.ts | 2 +- src/field/arena.ts | 2 +- src/field/damage-number-handler.ts | 2 +- src/field/mystery-encounter-intro.ts | 2 +- src/field/pokemon-sprite-sparkle-handler.ts | 2 +- src/field/pokemon.ts | 8 +- src/field/trainer.ts | 2 +- src/game-mode.ts | 2 +- src/global-vars/bypass-login.ts | 1 + src/global-vars/starter-colors.ts | 4 + src/inputs-controller.ts | 12 +- src/loading-scene.ts | 2 +- src/modifier/modifier-type.ts | 2 +- src/modifier/modifier.ts | 2 +- src/phases/attempt-capture-phase.ts | 31 ++-- src/phases/attempt-run-phase.ts | 2 +- src/phases/berry-phase.ts | 2 +- src/phases/check-switch-phase.ts | 8 +- src/phases/command-phase.ts | 70 ++++---- src/phases/damage-anim-phase.ts | 2 +- src/phases/egg-hatch-phase.ts | 6 +- src/phases/egg-lapse-phase.ts | 4 +- src/phases/egg-summary-phase.ts | 6 +- src/phases/encounter-phase.ts | 6 +- src/phases/end-evolution-phase.ts | 4 +- src/phases/evolution-phase.ts | 8 +- src/phases/exp-phase.ts | 2 +- src/phases/faint-phase.ts | 2 +- src/phases/form-change-phase.ts | 8 +- src/phases/game-over-modifier-reward-phase.ts | 4 +- src/phases/game-over-phase.ts | 6 +- src/phases/learn-move-phase.ts | 14 +- src/phases/level-cap-phase.ts | 4 +- src/phases/level-up-phase.ts | 4 +- src/phases/login-phase.ts | 17 +- src/phases/money-reward-phase.ts | 2 +- src/phases/move-charge-phase.ts | 2 +- src/phases/move-effect-phase.ts | 4 +- src/phases/move-phase.ts | 2 +- src/phases/mystery-encounter-phases.ts | 12 +- src/phases/obtain-status-effect-phase.ts | 2 +- src/phases/party-heal-phase.ts | 2 +- src/phases/pokemon-anim-phase.ts | 2 +- src/phases/pokemon-heal-phase.ts | 2 +- src/phases/post-turn-status-effect-phase.ts | 2 +- src/phases/reload-session-phase.ts | 6 +- src/phases/revival-blessing-phase.ts | 8 +- src/phases/ribbon-modifier-reward-phase.ts | 4 +- src/phases/scan-ivs-phase.ts | 8 +- src/phases/select-biome-phase.ts | 8 +- src/phases/select-challenge-phase.ts | 4 +- src/phases/select-gender-phase.ts | 6 +- src/phases/select-modifier-phase.ts | 38 ++-- src/phases/select-starter-phase.ts | 8 +- src/phases/select-target-phase.ts | 6 +- src/phases/show-party-exp-bar-phase.ts | 2 +- src/phases/stat-stage-change-phase.ts | 2 +- src/phases/switch-phase.ts | 6 +- src/phases/title-phase.ts | 20 +-- src/phases/trainer-victory-phase.ts | 2 +- src/phases/turn-start-phase.ts | 2 +- src/phases/unavailable-phase.ts | 4 +- src/phases/unlock-phase.ts | 4 +- src/phases/weather-effect-phase.ts | 2 +- src/pipelines/field-sprite.ts | 2 +- src/pipelines/sprite.ts | 2 +- src/plugins/api/api-base.ts | 2 +- src/plugins/api/pokerogue-account-api.ts | 2 +- src/plugins/i18n.ts | 2 +- src/sprites/variant.ts | 2 +- src/starter-colors.ts | 4 + src/starting-wave.ts | 3 + src/system/achv.ts | 2 +- src/system/game-data.ts | 10 +- src/system/game-speed.ts | 2 +- src/system/settings/settings-gamepad.ts | 8 +- src/system/settings/settings-keyboard.ts | 4 +- src/system/settings/settings.ts | 6 +- .../version_migration/versions/v1_0_4.ts | 2 +- .../version_migration/versions/v1_7_0.ts | 2 +- src/timed-event-manager.ts | 4 +- src/tutorial.ts | 6 +- src/ui-inputs.ts | 24 +-- src/ui/abstact-option-select-ui-handler.ts | 12 +- src/ui/achvs-ui-handler.ts | 4 +- src/ui/admin-ui-handler.ts | 20 +-- src/ui/arena-flyout.ts | 2 +- src/ui/autocomplete-ui-handler.ts | 4 +- src/ui/awaitable-ui-handler.ts | 4 +- src/ui/ball-ui-handler.ts | 10 +- src/ui/base-stats-overlay.ts | 2 +- src/ui/battle-flyout.ts | 2 +- src/ui/battle-info.ts | 6 +- src/ui/battle-message-ui-handler.ts | 4 +- src/ui/bgm-bar.ts | 2 +- src/ui/candy-bar.ts | 4 +- src/ui/challenges-select-ui-handler.ts | 6 +- src/ui/char-sprite.ts | 2 +- src/ui/command-ui-handler.ts | 12 +- src/ui/confirm-ui-handler.ts | 4 +- src/ui/daily-run-scoreboard.ts | 2 +- src/ui/egg-gacha-ui-handler.ts | 6 +- src/ui/egg-hatch-scene-handler.ts | 4 +- src/ui/egg-list-ui-handler.ts | 4 +- src/ui/egg-summary-ui-handler.ts | 4 +- src/ui/evolution-scene-handler.ts | 4 +- src/ui/fight-ui-handler.ts | 19 +- src/ui/filter-text.ts | 4 +- src/ui/form-modal-ui-handler.ts | 6 +- src/ui/game-stats-ui-handler.ts | 6 +- src/ui/loading-modal-ui-handler.ts | 4 +- src/ui/login-form-ui-handler.ts | 16 +- src/ui/menu-ui-handler.ts | 46 ++--- src/ui/message-ui-handler.ts | 6 +- src/ui/modal-ui-handler.ts | 4 +- src/ui/modifier-select-ui-handler.ts | 6 +- src/ui/move-info-overlay.ts | 2 +- src/ui/mystery-encounter-ui-handler.ts | 10 +- src/ui/party-ui-handler.ts | 32 ++-- src/ui/pokedex-info-overlay.ts | 2 +- src/ui/pokedex-mon-container.ts | 2 +- src/ui/pokedex-page-ui-handler.ts | 84 ++++----- src/ui/pokedex-scan-ui-handler.ts | 12 +- src/ui/pokedex-ui-handler.ts | 18 +- src/ui/pokemon-hatch-info-container.ts | 4 +- src/ui/pokemon-icon-anim-handler.ts | 2 +- src/ui/pokemon-info-container.ts | 2 +- src/ui/registration-form-ui-handler.ts | 6 +- src/ui/run-history-ui-handler.ts | 8 +- src/ui/run-info-ui-handler.ts | 6 +- src/ui/save-slot-select-ui-handler.ts | 12 +- src/ui/saving-icon-handler.ts | 2 +- src/ui/session-reload-modal-ui-handler.ts | 4 +- .../settings/abstract-binding-ui-handler.ts | 4 +- .../abstract-control-settings-ui-handler.ts | 4 +- .../settings/abstract-settings-ui-handler.ts | 6 +- src/ui/settings/gamepad-binding-ui-handler.ts | 4 +- .../settings/keyboard-binding-ui-handler.ts | 4 +- src/ui/settings/navigationMenu.ts | 18 +- src/ui/settings/option-select-ui-handler.ts | 4 +- src/ui/settings/settings-audio-ui-handler.ts | 4 +- .../settings/settings-display-ui-handler.ts | 4 +- .../settings/settings-gamepad-ui-handler.ts | 6 +- .../settings/settings-keyboard-ui-handler.ts | 10 +- src/ui/settings/settings-ui-handler.ts | 4 +- src/ui/starter-select-ui-handler.ts | 78 ++++----- src/ui/summary-ui-handler.ts | 14 +- src/ui/target-select-ui-handler.ts | 6 +- src/ui/test-dialogue-ui-handler.ts | 12 +- src/ui/time-of-day-widget.ts | 2 +- src/ui/title-ui-handler.ts | 6 +- src/ui/ui-handler.ts | 4 +- src/ui/ui.ts | 163 +++++++----------- src/ui/unavailable-modal-ui-handler.ts | 7 +- src/{utils.ts => utils/common.ts} | 37 ---- src/utils/cookies.ts | 36 ++++ src/utils/utility-vars.ts | 1 + test/abilities/ability_timing.test.ts | 6 +- test/abilities/analytic.test.ts | 2 +- test/abilities/disguise.test.ts | 2 +- test/abilities/healer.test.ts | 2 +- test/abilities/heatproof.test.ts | 2 +- test/abilities/intimidate.test.ts | 10 +- test/abilities/parental_bond.test.ts | 2 +- test/abilities/shield_dust.test.ts | 2 +- test/abilities/stakeout.test.ts | 2 +- test/abilities/wimp_out.test.ts | 2 +- test/account.test.ts | 10 +- test/achievements/achievement.test.ts | 2 +- test/battle/battle.test.ts | 38 ++-- test/battle/special_battle.test.ts | 20 +-- test/boss-pokemon.test.ts | 2 +- test/daily_mode.test.ts | 6 +- test/eggs/egg.test.ts | 2 +- test/enemy_command.test.ts | 2 +- test/escape-calculations.test.ts | 2 +- test/evolution.test.ts | 2 +- test/game-mode.test.ts | 2 +- test/items/dire_hit.test.ts | 4 +- .../double_battle_chance_booster.test.ts | 4 +- test/items/eviolite.test.ts | 2 +- test/items/exp_booster.test.ts | 2 +- test/items/leek.test.ts | 2 +- test/items/light_ball.test.ts | 2 +- test/items/lock_capsule.test.ts | 4 +- test/items/metal_powder.test.ts | 2 +- test/items/quick_powder.test.ts | 2 +- test/items/temp_stat_stage_booster.test.ts | 4 +- test/items/thick_club.test.ts | 2 +- test/moves/aurora_veil.test.ts | 2 +- test/moves/belly_drum.test.ts | 2 +- test/moves/fillet_away.test.ts | 2 +- test/moves/light_screen.test.ts | 2 +- test/moves/multi_target.test.ts | 2 +- test/moves/pledge_moves.test.ts | 2 +- test/moves/reflect.test.ts | 2 +- test/moves/revival_blessing.test.ts | 2 +- test/moves/substitute.test.ts | 4 +- .../mystery-encounter/encounter-test-utils.ts | 30 ++-- .../a-trainers-test-encounter.test.ts | 6 +- .../berries-abound-encounter.test.ts | 6 +- .../bug-type-superfan-encounter.test.ts | 14 +- .../clowning-around-encounter.test.ts | 8 +- .../dancing-lessons-encounter.test.ts | 4 +- .../department-store-sale-encounter.test.ts | 10 +- .../encounters/field-trip-encounter.test.ts | 14 +- .../fight-or-flight-encounter.test.ts | 6 +- .../fun-and-games-encounter.test.ts | 20 +-- .../global-trade-system-encounter.test.ts | 6 +- .../mysterious-challengers-encounter.test.ts | 8 +- .../teleporting-hijinks-encounter.test.ts | 4 +- .../the-strong-stuff-encounter.test.ts | 4 +- .../the-winstrate-challenge-encounter.test.ts | 8 +- .../trash-to-treasure-encounter.test.ts | 6 +- .../encounters/weird-dream-encounter.test.ts | 6 +- test/phases/learn-move-phase.test.ts | 12 +- test/phases/mystery-encounter-phase.test.ts | 10 +- test/phases/phases.test.ts | 8 +- test/phases/select-modifier-phase.test.ts | 24 +-- .../plugins/api/pokerogue-account-api.test.ts | 17 +- test/reload.test.ts | 4 +- test/settingMenu/rebinding_setting.test.ts | 2 +- test/system/game_data.test.ts | 6 +- test/testUtils/gameManager.ts | 46 ++--- test/testUtils/gameWrapper.ts | 9 +- test/testUtils/helpers/challengeModeHelper.ts | 12 +- test/testUtils/helpers/classicModeHelper.ts | 12 +- test/testUtils/helpers/dailyModeHelper.ts | 14 +- test/testUtils/helpers/moveHelper.ts | 20 +-- test/testUtils/helpers/overridesHelper.ts | 2 +- test/testUtils/helpers/reloadHelper.ts | 10 +- test/testUtils/phaseInterceptor.ts | 13 +- test/testUtils/testFileInitialization.ts | 4 +- test/ui/starter-select.test.ts | 110 ++++++------ test/ui/transfer-item.test.ts | 10 +- test/ui/type-hints.test.ts | 10 +- {src => test}/utils.test.ts | 2 +- 296 files changed, 1186 insertions(+), 1147 deletions(-) create mode 100644 src/enums/ui-mode.ts create mode 100644 src/global-vars/bypass-login.ts create mode 100644 src/global-vars/starter-colors.ts create mode 100644 src/starter-colors.ts create mode 100644 src/starting-wave.ts rename src/{utils.ts => utils/common.ts} (92%) create mode 100644 src/utils/cookies.ts create mode 100644 src/utils/utility-vars.ts rename {src => test}/utils.test.ts (95%) diff --git a/src/account.ts b/src/account.ts index 7baa7d10a1a..3416fa6ed5e 100644 --- a/src/account.ts +++ b/src/account.ts @@ -1,7 +1,7 @@ import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; import type { UserInfo } from "#app/@types/UserInfo"; -import { bypassLogin } from "#app/battle-scene"; -import { randomString } from "#app/utils"; +import { bypassLogin } from "./global-vars/bypass-login"; +import { randomString } from "#app/utils/common"; export let loggedInUser: UserInfo | null = null; // This is a random string that is used to identify the client session - unique per session (tab or window) so that the game will only save on the one that the server is expecting diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 0fe4c7f7e4f..ecaffc5ed07 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -18,7 +18,7 @@ import { isNullOrUndefined, BooleanHolder, type Constructor, -} from "#app/utils"; +} from "#app/utils/common"; import type { Modifier, ModifierPredicate, TurnHeldItemTransferModifier } from "./modifier/modifier"; import { ConsumableModifier, @@ -185,8 +185,8 @@ import { HideAbilityPhase } from "#app/phases/hide-ability-phase"; import { expSpriteKeys } from "./sprites/sprite-keys"; import { hasExpSprite } from "./sprites/sprite-utils"; import { timedEventManager } from "./global-event-manager"; - -export const bypassLogin = import.meta.env.VITE_BYPASS_LOGIN === "1"; +import { starterColors } from "./global-vars/starter-colors"; +import { startingWave } from "./starting-wave"; const DEBUG_RNG = false; @@ -194,13 +194,6 @@ const OPP_IVS_OVERRIDE_VALIDATED: number[] = ( Array.isArray(Overrides.OPP_IVS_OVERRIDE) ? Overrides.OPP_IVS_OVERRIDE : new Array(6).fill(Overrides.OPP_IVS_OVERRIDE) ).map(iv => (Number.isNaN(iv) || iv === null || iv > 31 ? -1 : iv)); -export const startingWave = Overrides.STARTING_WAVE_OVERRIDE || 1; - -export let starterColors: StarterColors; -interface StarterColors { - [key: string]: [string, string]; -} - export interface PokeballCounts { [pb: string]: number; } @@ -810,11 +803,11 @@ export default class BattleScene extends SceneBase { } async initStarterColors(): Promise { - if (starterColors) { + if (Object.keys(starterColors).length > 0) { + // already initialized return; } const sc = await this.cachedFetch("./starter-colors.json").then(res => res.json()); - starterColors = {}; for (const key of Object.keys(sc)) { starterColors[key] = sc[key]; } diff --git a/src/battle.ts b/src/battle.ts index 3e2f293065a..6630d53bd67 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -8,7 +8,7 @@ import { shiftCharCodes, randSeedItem, randInt, -} from "#app/utils"; +} from "#app/utils/common"; import Trainer, { TrainerVariant } from "./field/trainer"; import type { GameMode } from "./game-mode"; import { MoneyMultiplierModifier, PokemonHeldItemModifier } from "./modifier/modifier"; diff --git a/src/data/abilities/ab-attrs/ab-attr.ts b/src/data/abilities/ab-attrs/ab-attr.ts index c8ead691b25..a653c3f372d 100644 --- a/src/data/abilities/ab-attrs/ab-attr.ts +++ b/src/data/abilities/ab-attrs/ab-attr.ts @@ -1,6 +1,6 @@ import type { AbAttrCondition } from "#app/@types/ability-types"; import type Pokemon from "#app/field/pokemon"; -import type * as Utils from "#app/utils"; +import type { BooleanHolder } from "#app/utils/common"; export abstract class AbAttr { public showAbility: boolean; @@ -22,7 +22,7 @@ export abstract class AbAttr { _pokemon: Pokemon, _passive: boolean, _simulated: boolean, - _cancelled: Utils.BooleanHolder | null, + _cancelled: BooleanHolder | null, _args: any[], ): void {} diff --git a/src/data/abilities/ability-class.ts b/src/data/abilities/ability-class.ts index b4cda2482d4..387c5fb328b 100644 --- a/src/data/abilities/ability-class.ts +++ b/src/data/abilities/ability-class.ts @@ -3,7 +3,7 @@ import type { AbAttrCondition } from "#app/@types/ability-types"; import type { AbAttr } from "#app/data/abilities/ab-attrs/ab-attr"; import i18next from "i18next"; import type { Localizable } from "#app/interfaces/locales"; -import type { Constructor } from "#app/utils"; +import type { Constructor } from "#app/utils/common"; export class Ability implements Localizable { public id: Abilities; diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index a3bd9b728f5..55a1a4eb902 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -1,5 +1,5 @@ import { HitResult, MoveResult, PlayerPokemon } from "#app/field/pokemon"; -import { BooleanHolder, NumberHolder, toDmgValue, isNullOrUndefined, randSeedItem, randSeedInt, type Constructor } from "#app/utils"; +import { BooleanHolder, NumberHolder, toDmgValue, isNullOrUndefined, randSeedItem, randSeedInt, type Constructor } from "#app/utils/common"; import { getPokemonNameWithAffix } from "#app/messages"; import { BattlerTagLapseType, GroundedTag } from "#app/data/battler-tags"; import { getNonVolatileStatusEffects, getStatusEffectDescriptor, getStatusEffectHealText } from "#app/data/status-effect"; diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index 1fe1eca4bba..2ef98723cea 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -1,7 +1,7 @@ import { globalScene } from "#app/global-scene"; import type { Arena } from "#app/field/arena"; import { PokemonType } from "#enums/pokemon-type"; -import { BooleanHolder, NumberHolder, toDmgValue } from "#app/utils"; +import { BooleanHolder, NumberHolder, toDmgValue } from "#app/utils/common"; import { allMoves } from "#app/data/moves/move"; import { MoveTarget } from "#enums/MoveTarget"; import { MoveCategory } from "#enums/MoveCategory"; diff --git a/src/data/balance/biomes.ts b/src/data/balance/biomes.ts index c722291c66d..968164c7902 100644 --- a/src/data/balance/biomes.ts +++ b/src/data/balance/biomes.ts @@ -1,5 +1,5 @@ import { PokemonType } from "#enums/pokemon-type"; -import { randSeedInt, getEnumValues } from "#app/utils"; +import { randSeedInt, getEnumValues } from "#app/utils/common"; import type { SpeciesFormEvolution } from "#app/data/balance/pokemon-evolutions"; import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import i18next from "i18next"; diff --git a/src/data/balance/egg-moves.ts b/src/data/balance/egg-moves.ts index 74f6a2c1afb..b0e8d5160fa 100644 --- a/src/data/balance/egg-moves.ts +++ b/src/data/balance/egg-moves.ts @@ -1,5 +1,5 @@ import { allMoves } from "#app/data/moves/move"; -import { getEnumKeys, getEnumValues } from "#app/utils"; +import { getEnumKeys, getEnumValues } from "#app/utils/common"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/src/data/balance/pokemon-evolutions.ts b/src/data/balance/pokemon-evolutions.ts index 17f71f3c3c9..64409c3c989 100644 --- a/src/data/balance/pokemon-evolutions.ts +++ b/src/data/balance/pokemon-evolutions.ts @@ -3,7 +3,7 @@ import { Gender } from "#app/data/gender"; import { PokeballType } from "#enums/pokeball"; import type Pokemon from "#app/field/pokemon"; import { PokemonType } from "#enums/pokemon-type"; -import { randSeedInt } from "#app/utils"; +import { randSeedInt } from "#app/utils/common"; import { WeatherType } from "#enums/weather-type"; import { Nature } from "#enums/nature"; import { Biome } from "#enums/biome"; @@ -14,6 +14,7 @@ import { DamageMoneyRewardModifier, ExtraModifierModifier, MoneyMultiplierModifi import { SpeciesFormKey } from "#enums/species-form-key"; import { speciesStarterCosts } from "./starters"; import i18next from "i18next"; +import { initI18n } from "#app/plugins/i18n"; export enum SpeciesWildEvolutionDelay { @@ -95,6 +96,9 @@ export class SpeciesFormEvolution { public description = ""; constructor(speciesId: Species, preFormKey: string | null, evoFormKey: string | null, level: number, item: EvolutionItem | null, condition: SpeciesEvolutionCondition | null, wildDelay?: SpeciesWildEvolutionDelay) { + if (!i18next.isInitialized) { + initI18n(); + } this.speciesId = speciesId; this.preFormKey = preFormKey; this.evoFormKey = evoFormKey; diff --git a/src/data/battle-anims.ts b/src/data/battle-anims.ts index 511c80bee72..0999e9db6ff 100644 --- a/src/data/battle-anims.ts +++ b/src/data/battle-anims.ts @@ -2,11 +2,11 @@ import { globalScene } from "#app/global-scene"; import { AttackMove, BeakBlastHeaderAttr, DelayedAttackAttr, SelfStatusMove, allMoves } from "./moves/move"; import { MoveFlags } from "#enums/MoveFlags"; import type Pokemon from "../field/pokemon"; -import { type nil, getFrameMs, getEnumKeys, getEnumValues, animationFileName } from "../utils"; +import { type nil, getFrameMs, getEnumKeys, getEnumValues, animationFileName } from "../utils/common"; import type { BattlerIndex } from "../battle"; import { Moves } from "#enums/moves"; import { SubstituteTag } from "./battler-tags"; -import { isNullOrUndefined } from "../utils"; +import { isNullOrUndefined } from "../utils/common"; import Phaser from "phaser"; import { EncounterAnim } from "#enums/encounter-anims"; diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 9b72f3083fd..3b2421897c9 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -33,7 +33,7 @@ import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; import type { StatStageChangeCallback } from "#app/phases/stat-stage-change-phase"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import i18next from "#app/plugins/i18n"; -import { BooleanHolder, getFrameMs, NumberHolder, toDmgValue } from "#app/utils"; +import { BooleanHolder, getFrameMs, NumberHolder, toDmgValue } from "#app/utils/common"; import { Abilities } from "#enums/abilities"; import { BattlerTagType } from "#enums/battler-tag-type"; import { Moves } from "#enums/moves"; @@ -42,7 +42,7 @@ import { Species } from "#enums/species"; import { EFFECTIVE_STATS, getStatKey, Stat, type BattleStat, type EffectiveStat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; import { WeatherType } from "#enums/weather-type"; -import { isNullOrUndefined } from "#app/utils"; +import { isNullOrUndefined } from "#app/utils/common"; export enum BattlerTagLapseType { FAINT, diff --git a/src/data/berry.ts b/src/data/berry.ts index e118b45711c..22950c0beca 100644 --- a/src/data/berry.ts +++ b/src/data/berry.ts @@ -2,7 +2,7 @@ import { getPokemonNameWithAffix } from "../messages"; import type Pokemon from "../field/pokemon"; import { HitResult } from "../field/pokemon"; import { getStatusEffectHealText } from "./status-effect"; -import { NumberHolder, toDmgValue, randSeedInt } from "#app/utils"; +import { NumberHolder, toDmgValue, randSeedInt } from "#app/utils/common"; import { DoubleBerryEffectAbAttr, PostItemLostAbAttr, diff --git a/src/data/challenge.ts b/src/data/challenge.ts index cc5783ad1fb..f786152ca3d 100644 --- a/src/data/challenge.ts +++ b/src/data/challenge.ts @@ -1,4 +1,4 @@ -import { BooleanHolder, type NumberHolder, randSeedItem, deepCopy } from "#app/utils"; +import { BooleanHolder, type NumberHolder, randSeedItem, deepCopy } from "#app/utils/common"; import i18next from "i18next"; import type { DexAttrProps, GameData } from "#app/system/game-data"; import { defaultStarterSpecies } from "#app/system/game-data"; diff --git a/src/data/custom-pokemon-data.ts b/src/data/custom-pokemon-data.ts index d95d9f77b83..704835e9dbc 100644 --- a/src/data/custom-pokemon-data.ts +++ b/src/data/custom-pokemon-data.ts @@ -1,6 +1,6 @@ import type { Abilities } from "#enums/abilities"; import type { PokemonType } from "#enums/pokemon-type"; -import { isNullOrUndefined } from "#app/utils"; +import { isNullOrUndefined } from "#app/utils/common"; import type { Nature } from "#enums/nature"; /** diff --git a/src/data/daily-run.ts b/src/data/daily-run.ts index 3438510d613..8a1632ce160 100644 --- a/src/data/daily-run.ts +++ b/src/data/daily-run.ts @@ -3,7 +3,7 @@ import type { Species } from "#enums/species"; import { globalScene } from "#app/global-scene"; import { PlayerPokemon } from "#app/field/pokemon"; import type { Starter } from "#app/ui/starter-select-ui-handler"; -import { randSeedGauss, randSeedInt, randSeedItem, getEnumValues } from "#app/utils"; +import { randSeedGauss, randSeedInt, randSeedItem, getEnumValues } from "#app/utils/common"; import type { PokemonSpeciesForm } from "#app/data/pokemon-species"; import PokemonSpecies, { getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; import { speciesStarterCosts } from "#app/data/balance/starters"; diff --git a/src/data/egg.ts b/src/data/egg.ts index 13ab0bec479..55a253e843f 100644 --- a/src/data/egg.ts +++ b/src/data/egg.ts @@ -4,7 +4,7 @@ import type PokemonSpecies from "#app/data/pokemon-species"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { speciesStarterCosts } from "#app/data/balance/starters"; import { VariantTier } from "#enums/variant-tier"; -import { randInt, randomString, randSeedInt, getIvsFromId } from "#app/utils"; +import { randInt, randomString, randSeedInt, getIvsFromId } from "#app/utils/common"; import Overrides from "#app/overrides"; import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; import type { PlayerPokemon } from "#app/field/pokemon"; diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 7a2834c0322..513ab3f6a74 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -29,7 +29,7 @@ import { } from "../status-effect"; import { getTypeDamageMultiplier } from "../type"; import { PokemonType } from "#enums/pokemon-type"; -import { BooleanHolder, NumberHolder, isNullOrUndefined, toDmgValue, randSeedItem, randSeedInt, getEnumValues, toReadableString, type Constructor } from "#app/utils"; +import { BooleanHolder, NumberHolder, isNullOrUndefined, toDmgValue, randSeedItem, randSeedInt, getEnumValues, toReadableString, type Constructor } from "#app/utils/common"; import { WeatherType } from "#enums/weather-type"; import type { ArenaTrapTag } from "../arena-tag"; import { ArenaTagSide, WeakenMoveTypeTag } from "../arena-tag"; diff --git a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts index a49157f8e88..d8af7b6aac8 100644 --- a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts +++ b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts @@ -14,7 +14,7 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { TrainerType } from "#enums/trainer-type"; import { Species } from "#enums/species"; import { getSpriteKeysFromSpecies } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; -import { randSeedInt } from "#app/utils"; +import { randSeedInt } from "#app/utils/common"; import i18next from "i18next"; import type { IEggOptions } from "#app/data/egg"; import { EggSourceType } from "#enums/egg-source-types"; diff --git a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts index 85f40a41e51..0a270aebf37 100644 --- a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts +++ b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts @@ -24,7 +24,7 @@ import { BerryModifier, PokemonInstantReviveModifier } from "#app/modifier/modif import { getPokemonSpecies } from "#app/data/pokemon-species"; import { Moves } from "#enums/moves"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { randInt } from "#app/utils"; +import { randInt } from "#app/utils/common"; import { BattlerIndex } from "#app/battle"; import { applyModifierTypeToPlayerPokemon, diff --git a/src/data/mystery-encounters/encounters/berries-abound-encounter.ts b/src/data/mystery-encounters/encounters/berries-abound-encounter.ts index 94e27e32773..bf49dfdea91 100644 --- a/src/data/mystery-encounters/encounters/berries-abound-encounter.ts +++ b/src/data/mystery-encounters/encounters/berries-abound-encounter.ts @@ -13,7 +13,7 @@ import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import type { BerryModifierType, ModifierTypeOption } from "#app/modifier/modifier-type"; import { ModifierPoolType, modifierTypes, regenerateModifierPoolThresholds } from "#app/modifier/modifier-type"; -import { randSeedInt } from "#app/utils"; +import { randSeedInt } from "#app/utils/common"; import { BattlerTagType } from "#enums/battler-tag-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { globalScene } from "#app/global-scene"; diff --git a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts index 1e4c9a3b957..8dfd1a270bd 100644 --- a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts +++ b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts @@ -16,7 +16,7 @@ import { TrainerSlot } from "#enums/trainer-slot"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { PartyMemberStrength } from "#enums/party-member-strength"; import { globalScene } from "#app/global-scene"; -import { isNullOrUndefined, randSeedInt, randSeedShuffle } from "#app/utils"; +import { isNullOrUndefined, randSeedInt, randSeedShuffle } from "#app/utils/common"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; diff --git a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts index 5edc2e6bbc5..07688db4583 100644 --- a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts +++ b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts @@ -31,9 +31,9 @@ import { import { PokemonType } from "#enums/pokemon-type"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; -import { randSeedInt, randSeedShuffle } from "#app/utils"; +import { randSeedInt, randSeedShuffle } from "#app/utils/common"; import { showEncounterDialogue, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; import type { OptionSelectConfig } from "#app/ui/abstact-option-select-ui-handler"; import type { PlayerPokemon } from "#app/field/pokemon"; @@ -437,7 +437,7 @@ async function handleSwapAbility() { await showEncounterDialogue(`${namespace}:option.1.apply_ability_dialogue`, `${namespace}:speaker`); await showEncounterText(`${namespace}:option.1.apply_ability_message`); - globalScene.ui.setMode(Mode.MESSAGE).then(() => { + globalScene.ui.setMode(UiMode.MESSAGE).then(() => { displayYesNoOptions(resolve); }); }); @@ -467,7 +467,7 @@ function displayYesNoOptions(resolve) { maxOptions: 7, yOffset: 0, }; - globalScene.ui.setModeWithoutClear(Mode.OPTION_SELECT, config, null, true); + globalScene.ui.setModeWithoutClear(UiMode.OPTION_SELECT, config, null, true); } function onYesAbilitySwap(resolve) { @@ -477,11 +477,11 @@ function onYesAbilitySwap(resolve) { applyAbilityOverrideToPokemon(pokemon, encounter.misc.ability); encounter.setDialogueToken("chosenPokemon", pokemon.getNameToRender()); - globalScene.ui.setMode(Mode.MESSAGE).then(() => resolve(true)); + globalScene.ui.setMode(UiMode.MESSAGE).then(() => resolve(true)); }; const onPokemonNotSelected = () => { - globalScene.ui.setMode(Mode.MESSAGE).then(() => { + globalScene.ui.setMode(UiMode.MESSAGE).then(() => { displayYesNoOptions(resolve); }); }; diff --git a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts index 6c4c8f26deb..85ebf175f43 100644 --- a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts +++ b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts @@ -1,5 +1,5 @@ import type { PokemonType } from "#enums/pokemon-type"; -import { isNullOrUndefined, randSeedInt } from "#app/utils"; +import { isNullOrUndefined, randSeedInt } from "#app/utils/common"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { Species } from "#enums/species"; import { globalScene } from "#app/global-scene"; diff --git a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts index 364484cb511..e57955c324a 100644 --- a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts +++ b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts @@ -32,7 +32,7 @@ import { modifierTypes } from "#app/modifier/modifier-type"; import { ModifierRewardPhase } from "#app/phases/modifier-reward-phase"; import i18next from "#app/plugins/i18n"; import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; -import { randSeedItem } from "#app/utils"; +import { randSeedItem } from "#app/utils/common"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; diff --git a/src/data/mystery-encounters/encounters/department-store-sale-encounter.ts b/src/data/mystery-encounters/encounters/department-store-sale-encounter.ts index 9b8e2e24d12..6a26cf19d7f 100644 --- a/src/data/mystery-encounters/encounters/department-store-sale-encounter.ts +++ b/src/data/mystery-encounters/encounters/department-store-sale-encounter.ts @@ -4,7 +4,7 @@ import { } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import type { ModifierTypeFunc } from "#app/modifier/modifier-type"; import { modifierTypes } from "#app/modifier/modifier-type"; -import { randSeedInt } from "#app/utils"; +import { randSeedInt } from "#app/utils/common"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { Species } from "#enums/species"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; diff --git a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts index f0b7a05a21c..f0fb6398334 100644 --- a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts +++ b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts @@ -30,7 +30,7 @@ import { PokemonMove } from "#app/field/pokemon"; import { Moves } from "#enums/moves"; import { EncounterBattleAnim } from "#app/data/battle-anims"; import { WeatherType } from "#enums/weather-type"; -import { isNullOrUndefined, randSeedInt } from "#app/utils"; +import { isNullOrUndefined, randSeedInt } from "#app/utils/common"; import { StatusEffect } from "#enums/status-effect"; import { queueEncounterMessage } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { diff --git a/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts b/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts index 595d13cf727..d9b4140c6ee 100644 --- a/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts +++ b/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts @@ -31,7 +31,7 @@ import { import PokemonData from "#app/system/pokemon-data"; import { BattlerTagType } from "#enums/battler-tag-type"; import { queueEncounterMessage } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; -import { randSeedInt } from "#app/utils"; +import { randSeedInt } from "#app/utils/common"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; diff --git a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts index f80620647b0..63db5c7c5d6 100644 --- a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts +++ b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts @@ -23,7 +23,14 @@ import { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species"; import { getTypeRgb } from "#app/data/type"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; -import { NumberHolder, isNullOrUndefined, randInt, randSeedInt, randSeedShuffle, randSeedItem } from "#app/utils"; +import { + NumberHolder, + isNullOrUndefined, + randInt, + randSeedInt, + randSeedShuffle, + randSeedItem, +} from "#app/utils/common"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { EnemyPokemon, PokemonMove } from "#app/field/pokemon"; diff --git a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts index 5f88ca083c0..b10f2f3dba2 100644 --- a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts @@ -12,7 +12,7 @@ import { modifierTypes } from "#app/modifier/modifier-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { PartyMemberStrength } from "#enums/party-member-strength"; import { globalScene } from "#app/global-scene"; -import { randSeedInt } from "#app/utils"; +import { randSeedInt } from "#app/utils/common"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; diff --git a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts index c295e36749a..8877bf36ce8 100644 --- a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts @@ -18,7 +18,7 @@ import { getPokemonSpecies } from "#app/data/pokemon-species"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { GameOverPhase } from "#app/phases/game-over-phase"; -import { randSeedInt } from "#app/utils"; +import { randSeedInt } from "#app/utils/common"; import { Moves } from "#enums/moves"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; diff --git a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts index 8c45fde3079..602a8d397db 100644 --- a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts +++ b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts @@ -15,7 +15,7 @@ import { HiddenAbilityRateBoosterModifier, IvScannerModifier } from "#app/modifi import type { EnemyPokemon } from "#app/field/pokemon"; import { PokeballType } from "#enums/pokeball"; import { PlayerGender } from "#enums/player-gender"; -import { NumberHolder, randSeedInt } from "#app/utils"; +import { NumberHolder, randSeedInt } from "#app/utils/common"; import type PokemonSpecies from "#app/data/pokemon-species"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { MoneyRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; diff --git a/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts b/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts index b9476d49fec..79f4b53a73e 100644 --- a/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts +++ b/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts @@ -8,7 +8,7 @@ import { import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { modifierTypes } from "#app/modifier/modifier-type"; -import { randSeedInt } from "#app/utils"; +import { randSeedInt } from "#app/utils/common"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { Species } from "#enums/species"; import { globalScene } from "#app/global-scene"; diff --git a/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts b/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts index 806a89a7131..ef3532b080e 100644 --- a/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts +++ b/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts @@ -7,7 +7,7 @@ import { transitionMysteryEncounterIntroVisuals, updatePlayerMoney, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { randSeedInt } from "#app/utils"; +import { randSeedInt } from "#app/utils/common"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { globalScene } from "#app/global-scene"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; diff --git a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts index c189e341089..ab2f19cfb77 100644 --- a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts @@ -7,7 +7,7 @@ import { import { trainerConfigs } from "#app/data/trainers/trainer-config"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { globalScene } from "#app/global-scene"; -import { randSeedShuffle } from "#app/utils"; +import { randSeedShuffle } from "#app/utils/common"; import type MysteryEncounter from "../mystery-encounter"; import { MysteryEncounterBuilder } from "../mystery-encounter"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; diff --git a/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts b/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts index fb55c55a1a3..4e8e1c2524e 100644 --- a/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts @@ -3,7 +3,7 @@ import { transitionMysteryEncounterIntroVisuals, updatePlayerMoney, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { isNullOrUndefined, randSeedInt } from "#app/utils"; +import { isNullOrUndefined, randSeedInt } from "#app/utils/common"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { globalScene } from "#app/global-scene"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; diff --git a/src/data/mystery-encounters/encounters/training-session-encounter.ts b/src/data/mystery-encounters/encounters/training-session-encounter.ts index e8711be172d..11d00f1dd8c 100644 --- a/src/data/mystery-encounters/encounters/training-session-encounter.ts +++ b/src/data/mystery-encounters/encounters/training-session-encounter.ts @@ -15,7 +15,7 @@ import type { PokemonHeldItemModifier } from "#app/modifier/modifier"; import { AbilityAttr } from "#app/system/game-data"; import PokemonData from "#app/system/pokemon-data"; import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; -import { isNullOrUndefined, randSeedShuffle } from "#app/utils"; +import { isNullOrUndefined, randSeedShuffle } from "#app/utils/common"; import { BattlerTagType } from "#enums/battler-tag-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { globalScene } from "#app/global-scene"; diff --git a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts index e60fe0ddc18..1ff96f21edc 100644 --- a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts +++ b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts @@ -27,7 +27,7 @@ import { Moves } from "#enums/moves"; import { BattlerIndex } from "#app/battle"; import { PokemonMove } from "#app/field/pokemon"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; -import { randSeedInt } from "#app/utils"; +import { randSeedInt } from "#app/utils/common"; /** the i18n namespace for this encounter */ const namespace = "mysteryEncounters/trashToTreasure"; diff --git a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts index ed1866c7a1b..66c7f7afc56 100644 --- a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts +++ b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts @@ -27,7 +27,7 @@ import { getSpriteKeysFromPokemon, } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import PokemonData from "#app/system/pokemon-data"; -import { isNullOrUndefined, randSeedInt } from "#app/utils"; +import { isNullOrUndefined, randSeedInt } from "#app/utils/common"; import type { Moves } from "#enums/moves"; import { BattlerIndex } from "#app/battle"; import { SelfStatusMove } from "#app/data/moves/move"; diff --git a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts index 22ec52e976c..cd9ffefb516 100644 --- a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts +++ b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts @@ -17,7 +17,7 @@ import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { PokemonMove } from "#app/field/pokemon"; -import { NumberHolder, isNullOrUndefined, randSeedInt, randSeedShuffle } from "#app/utils"; +import { NumberHolder, isNullOrUndefined, randSeedInt, randSeedShuffle } from "#app/utils/common"; import type PokemonSpecies from "#app/data/pokemon-species"; import { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species"; import type { PokemonHeldItemModifier } from "#app/modifier/modifier"; diff --git a/src/data/mystery-encounters/mystery-encounter-option.ts b/src/data/mystery-encounters/mystery-encounter-option.ts index f360658c2dc..57dd50fa972 100644 --- a/src/data/mystery-encounters/mystery-encounter-option.ts +++ b/src/data/mystery-encounters/mystery-encounter-option.ts @@ -12,7 +12,7 @@ import { } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import type { CanLearnMoveRequirementOptions } from "./requirements/can-learn-move-requirement"; import { CanLearnMoveRequirement } from "./requirements/can-learn-move-requirement"; -import { isNullOrUndefined, randSeedInt } from "#app/utils"; +import { isNullOrUndefined, randSeedInt } from "#app/utils/common"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; // biome-ignore lint/suspicious/noConfusingVoidType: void unions in callbacks are OK diff --git a/src/data/mystery-encounters/mystery-encounter-requirements.ts b/src/data/mystery-encounters/mystery-encounter-requirements.ts index 948e3e96ef0..49fd632932c 100644 --- a/src/data/mystery-encounters/mystery-encounter-requirements.ts +++ b/src/data/mystery-encounters/mystery-encounter-requirements.ts @@ -9,7 +9,7 @@ import { WeatherType } from "#enums/weather-type"; import type { PlayerPokemon } from "#app/field/pokemon"; import { AttackTypeBoosterModifier } from "#app/modifier/modifier"; import type { AttackTypeBoosterModifierType } from "#app/modifier/modifier-type"; -import { isNullOrUndefined } from "#app/utils"; +import { isNullOrUndefined } from "#app/utils/common"; import type { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; diff --git a/src/data/mystery-encounters/mystery-encounter-save-data.ts b/src/data/mystery-encounters/mystery-encounter-save-data.ts index 7c8110628f0..dd633390e46 100644 --- a/src/data/mystery-encounters/mystery-encounter-save-data.ts +++ b/src/data/mystery-encounters/mystery-encounter-save-data.ts @@ -1,6 +1,6 @@ import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT } from "#app/data/mystery-encounters/mystery-encounters"; -import { isNullOrUndefined } from "#app/utils"; +import { isNullOrUndefined } from "#app/utils/common"; import type { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; export class SeenEncounterData { diff --git a/src/data/mystery-encounters/mystery-encounter.ts b/src/data/mystery-encounters/mystery-encounter.ts index ff098d4d7dd..e305252ed0f 100644 --- a/src/data/mystery-encounters/mystery-encounter.ts +++ b/src/data/mystery-encounters/mystery-encounter.ts @@ -1,11 +1,11 @@ import type { EnemyPartyConfig } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import type { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { capitalizeFirstLetter, isNullOrUndefined } from "#app/utils"; +import { capitalizeFirstLetter, isNullOrUndefined } from "#app/utils/common"; import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; import type { MysteryEncounterSpriteConfig } from "#app/field/mystery-encounter-intro"; import MysteryEncounterIntroVisuals from "#app/field/mystery-encounter-intro"; -import { randSeedInt } from "#app/utils"; +import { randSeedInt } from "#app/utils/common"; import type { StatusEffect } from "#enums/status-effect"; import type { OptionTextDisplay } from "./mystery-encounter-dialogue"; import type MysteryEncounterDialogue from "./mystery-encounter-dialogue"; diff --git a/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts b/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts index a7ffe3e26ca..37194aef78e 100644 --- a/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts +++ b/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts @@ -1,7 +1,7 @@ import type { Moves } from "#app/enums/moves"; import type { PlayerPokemon } from "#app/field/pokemon"; import { PokemonMove } from "#app/field/pokemon"; -import { isNullOrUndefined } from "#app/utils"; +import { isNullOrUndefined } from "#app/utils/common"; import { EncounterPokemonRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import { globalScene } from "#app/global-scene"; diff --git a/src/data/mystery-encounters/utils/encounter-dialogue-utils.ts b/src/data/mystery-encounters/utils/encounter-dialogue-utils.ts index 94790145687..296d94093d9 100644 --- a/src/data/mystery-encounters/utils/encounter-dialogue-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-dialogue-utils.ts @@ -2,7 +2,7 @@ import { globalScene } from "#app/global-scene"; import type { TextStyle } from "#app/ui/text"; import { getTextWithColors } from "#app/ui/text"; import { UiTheme } from "#enums/ui-theme"; -import { isNullOrUndefined } from "#app/utils"; +import { isNullOrUndefined } from "#app/utils/common"; import i18next from "i18next"; /** diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index 69b0d81520a..d77b70caa31 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -30,8 +30,8 @@ import type PokemonData from "#app/system/pokemon-data"; import type { OptionSelectConfig, OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import type { PartyOption, PokemonSelectFilter } from "#app/ui/party-ui-handler"; import { PartyUiMode } from "#app/ui/party-ui-handler"; -import { Mode } from "#app/ui/ui"; -import { isNullOrUndefined, randSeedInt, randomString, randSeedItem } from "#app/utils"; +import { UiMode } from "#enums/ui-mode"; +import { isNullOrUndefined, randSeedInt, randomString, randSeedItem } from "#app/utils/common"; import type { BattlerTagType } from "#enums/battler-tag-type"; import { Biome } from "#enums/biome"; import type { TrainerType } from "#enums/trainer-type"; @@ -563,7 +563,7 @@ export function selectPokemonForOption( // Open party screen to choose pokemon globalScene.ui.setMode( - Mode.PARTY, + UiMode.PARTY, PartyUiMode.SELECT, -1, (slotIndex: number, _option: PartyOption) => { @@ -581,7 +581,7 @@ export function selectPokemonForOption( } // There is a second option to choose after selecting the Pokemon - globalScene.ui.setMode(Mode.MESSAGE).then(() => { + globalScene.ui.setMode(UiMode.MESSAGE).then(() => { const displayOptions = () => { // Always appends a cancel option to bottom of options const fullOptions = secondaryOptions @@ -623,7 +623,7 @@ export function selectPokemonForOption( if (fullOptions[0].onHover) { fullOptions[0].onHover(); } - globalScene.ui.setModeWithoutClear(Mode.OPTION_SELECT, config, null, true); + globalScene.ui.setModeWithoutClear(UiMode.OPTION_SELECT, config, null, true); }; const textPromptKey = @@ -673,20 +673,20 @@ export function selectOptionThenPokemon( const modeToSetOnExit = globalScene.ui.getMode(); const displayOptions = (config: OptionSelectConfig) => { - globalScene.ui.setMode(Mode.MESSAGE).then(() => { + globalScene.ui.setMode(UiMode.MESSAGE).then(() => { if (!optionSelectPromptKey) { // Do hover over the starting selection option if (fullOptions[0].onHover) { fullOptions[0].onHover(); } - globalScene.ui.setMode(Mode.OPTION_SELECT, config); + globalScene.ui.setMode(UiMode.OPTION_SELECT, config); } else { showEncounterText(optionSelectPromptKey).then(() => { // Do hover over the starting selection option if (fullOptions[0].onHover) { fullOptions[0].onHover(); } - globalScene.ui.setMode(Mode.OPTION_SELECT, config); + globalScene.ui.setMode(UiMode.OPTION_SELECT, config); }); } }); @@ -695,7 +695,7 @@ export function selectOptionThenPokemon( const selectPokemonAfterOption = (selectedOptionIndex: number) => { // Open party screen to choose a Pokemon globalScene.ui.setMode( - Mode.PARTY, + UiMode.PARTY, PartyUiMode.SELECT, -1, (slotIndex: number, _option: PartyOption) => { diff --git a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts index a4787e819b8..ed94a46ac18 100644 --- a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts @@ -1,6 +1,6 @@ import { globalScene } from "#app/global-scene"; import i18next from "i18next"; -import { isNullOrUndefined, randSeedInt } from "#app/utils"; +import { isNullOrUndefined, randSeedInt } from "#app/utils/common"; import { PokemonHeldItemModifier } from "#app/modifier/modifier"; import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; @@ -14,7 +14,7 @@ import { PlayerGender } from "#enums/player-gender"; import { addPokeballCaptureStars, addPokeballOpenParticles } from "#app/field/anims"; import { getStatusEffectCatchRateMultiplier } from "#app/data/status-effect"; import { achvs } from "#app/system/achv"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import type { PartyOption } from "#app/ui/party-ui-handler"; import { PartyUiMode } from "#app/ui/party-ui-handler"; import { Species } from "#enums/species"; @@ -714,7 +714,7 @@ export async function catchPokemon( () => { globalScene.pokemonInfoContainer.makeRoomForConfirmUi(1, true); globalScene.ui.setMode( - Mode.CONFIRM, + UiMode.CONFIRM, () => { const newPokemon = globalScene.addPlayerPokemon( pokemon.species, @@ -729,12 +729,12 @@ export async function catchPokemon( pokemon, ); globalScene.ui.setMode( - Mode.SUMMARY, + UiMode.SUMMARY, newPokemon, 0, SummaryUiMode.DEFAULT, () => { - globalScene.ui.setMode(Mode.MESSAGE).then(() => { + globalScene.ui.setMode(UiMode.MESSAGE).then(() => { promptRelease(); }); }, @@ -749,13 +749,13 @@ export async function catchPokemon( female: pokemon.gender === Gender.FEMALE, }; globalScene.ui.setOverlayMode( - Mode.POKEDEX_PAGE, + UiMode.POKEDEX_PAGE, pokemon.species, pokemon.formIndex, attributes, null, () => { - globalScene.ui.setMode(Mode.MESSAGE).then(() => { + globalScene.ui.setMode(UiMode.MESSAGE).then(() => { promptRelease(); }); }, @@ -763,11 +763,11 @@ export async function catchPokemon( }, () => { globalScene.ui.setMode( - Mode.PARTY, + UiMode.PARTY, PartyUiMode.RELEASE, 0, (slotIndex: number, _option: PartyOption) => { - globalScene.ui.setMode(Mode.MESSAGE).then(() => { + globalScene.ui.setMode(UiMode.MESSAGE).then(() => { if (slotIndex < 6) { addToParty(slotIndex); } else { @@ -778,7 +778,7 @@ export async function catchPokemon( ); }, () => { - globalScene.ui.setMode(Mode.MESSAGE).then(() => { + globalScene.ui.setMode(UiMode.MESSAGE).then(() => { removePokemon(); end(); }); diff --git a/src/data/mystery-encounters/utils/encounter-transformation-sequence.ts b/src/data/mystery-encounters/utils/encounter-transformation-sequence.ts index 15085bb2bf8..578c2efefdb 100644 --- a/src/data/mystery-encounters/utils/encounter-transformation-sequence.ts +++ b/src/data/mystery-encounters/utils/encounter-transformation-sequence.ts @@ -1,5 +1,5 @@ import type { PlayerPokemon } from "#app/field/pokemon"; -import { getFrameMs } from "#app/utils"; +import { getFrameMs } from "#app/utils/common"; import { cos, sin } from "#app/field/anims"; import { getTypeRgb } from "#app/data/type"; import { globalScene } from "#app/global-scene"; diff --git a/src/data/nature.ts b/src/data/nature.ts index 2ab4723c10d..83b3ee7538d 100644 --- a/src/data/nature.ts +++ b/src/data/nature.ts @@ -1,4 +1,4 @@ -import { toReadableString } from "#app/utils"; +import { toReadableString } from "#app/utils/common"; import { TextStyle, getBBCodeFrag } from "../ui/text"; import { Nature } from "#enums/nature"; import { UiTheme } from "#enums/ui-theme"; diff --git a/src/data/pokeball.ts b/src/data/pokeball.ts index b0744237755..7a44ebdda7c 100644 --- a/src/data/pokeball.ts +++ b/src/data/pokeball.ts @@ -1,6 +1,6 @@ import { globalScene } from "#app/global-scene"; import { CriticalCatchChanceBoosterModifier } from "#app/modifier/modifier"; -import { NumberHolder } from "#app/utils"; +import { NumberHolder } from "#app/utils/common"; import { PokeballType } from "#enums/pokeball"; import i18next from "i18next"; diff --git a/src/data/pokemon-forms.ts b/src/data/pokemon-forms.ts index 63e166c7fc4..f76462d2725 100644 --- a/src/data/pokemon-forms.ts +++ b/src/data/pokemon-forms.ts @@ -3,7 +3,7 @@ import type Pokemon from "../field/pokemon"; import { StatusEffect } from "#enums/status-effect"; import { allMoves } from "./moves/move"; import { MoveCategory } from "#enums/MoveCategory"; -import type { Constructor, nil } from "#app/utils"; +import type { Constructor, nil } from "#app/utils/common"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 75ea07edd40..95ff28e61e0 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -8,7 +8,7 @@ import type { AnySound } from "#app/battle-scene"; import { globalScene } from "#app/global-scene"; import type { GameMode } from "#app/game-mode"; import { DexAttr, type StarterMoveset } from "#app/system/game-data"; -import { isNullOrUndefined, capitalizeString, randSeedInt, randSeedGauss, randSeedItem } from "#app/utils"; +import { isNullOrUndefined, capitalizeString, randSeedInt, randSeedGauss, randSeedItem } from "#app/utils/common"; import { uncatchableSpecies } from "#app/data/balance/biomes"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { GrowthRate } from "#app/data/exp"; diff --git a/src/data/status-effect.ts b/src/data/status-effect.ts index fe4fa380d46..a90304c9f7d 100644 --- a/src/data/status-effect.ts +++ b/src/data/status-effect.ts @@ -1,4 +1,4 @@ -import { randIntRange } from "#app/utils"; +import { randIntRange } from "#app/utils/common"; import { StatusEffect } from "#enums/status-effect"; import type { ParseKeys } from "i18next"; import i18next from "i18next"; diff --git a/src/data/trainer-names.ts b/src/data/trainer-names.ts index 195e5041d28..8714dad0fc9 100644 --- a/src/data/trainer-names.ts +++ b/src/data/trainer-names.ts @@ -1,5 +1,5 @@ import { TrainerType } from "#enums/trainer-type"; -import { toReadableString } from "#app/utils"; +import { toReadableString } from "#app/utils/common"; class TrainerNameConfig { public urls: string[]; diff --git a/src/data/trainers/TrainerPartyTemplate.ts b/src/data/trainers/TrainerPartyTemplate.ts index adbaacc6b55..5d02ffdc6af 100644 --- a/src/data/trainers/TrainerPartyTemplate.ts +++ b/src/data/trainers/TrainerPartyTemplate.ts @@ -1,4 +1,4 @@ -import { startingWave } from "#app/battle-scene"; +import { startingWave } from "#app/starting-wave"; import { globalScene } from "#app/global-scene"; import { PartyMemberStrength } from "#enums/party-member-strength"; diff --git a/src/data/trainers/trainer-config.ts b/src/data/trainers/trainer-config.ts index d9922ecc097..fec1d4757e7 100644 --- a/src/data/trainers/trainer-config.ts +++ b/src/data/trainers/trainer-config.ts @@ -1,7 +1,7 @@ import { globalScene } from "#app/global-scene"; import { modifierTypes } from "#app/modifier/modifier-type"; import { PokemonMove } from "#app/field/pokemon"; -import { toReadableString, isNullOrUndefined, randSeedItem, randSeedInt } from "#app/utils"; +import { toReadableString, isNullOrUndefined, randSeedItem, randSeedInt } from "#app/utils/common"; import { pokemonEvolutions, pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { tmSpecies } from "#app/data/balance/tms"; diff --git a/src/data/weather.ts b/src/data/weather.ts index 31b460bbddb..81559304661 100644 --- a/src/data/weather.ts +++ b/src/data/weather.ts @@ -5,7 +5,7 @@ import type Pokemon from "../field/pokemon"; import { PokemonType } from "#enums/pokemon-type"; import type Move from "./moves/move"; import { AttackMove } from "./moves/move"; -import { randSeedInt } from "#app/utils"; +import { randSeedInt } from "#app/utils/common"; import { SuppressWeatherEffectAbAttr } from "./abilities/ability"; import { TerrainType, getTerrainName } from "./terrain"; import i18next from "i18next"; diff --git a/src/enums/ui-mode.ts b/src/enums/ui-mode.ts new file mode 100644 index 00000000000..dcf6bd2a238 --- /dev/null +++ b/src/enums/ui-mode.ts @@ -0,0 +1,47 @@ +export enum UiMode { + MESSAGE, + TITLE, + COMMAND, + FIGHT, + BALL, + TARGET_SELECT, + MODIFIER_SELECT, + SAVE_SLOT, + PARTY, + SUMMARY, + STARTER_SELECT, + EVOLUTION_SCENE, + EGG_HATCH_SCENE, + EGG_HATCH_SUMMARY, + CONFIRM, + OPTION_SELECT, + MENU, + MENU_OPTION_SELECT, + SETTINGS, + SETTINGS_DISPLAY, + SETTINGS_AUDIO, + SETTINGS_GAMEPAD, + GAMEPAD_BINDING, + SETTINGS_KEYBOARD, + KEYBOARD_BINDING, + ACHIEVEMENTS, + GAME_STATS, + EGG_LIST, + EGG_GACHA, + POKEDEX, + POKEDEX_SCAN, + POKEDEX_PAGE, + LOGIN_FORM, + REGISTRATION_FORM, + LOADING, + SESSION_RELOAD, + UNAVAILABLE, + CHALLENGE_SELECT, + RENAME_POKEMON, + RUN_HISTORY, + RUN_INFO, + TEST_DIALOGUE, + AUTO_COMPLETE, + ADMIN, + MYSTERY_ENCOUNTER +} diff --git a/src/field/anims.ts b/src/field/anims.ts index eb895c2d8f9..2fd23e4262b 100644 --- a/src/field/anims.ts +++ b/src/field/anims.ts @@ -1,7 +1,7 @@ import { globalScene } from "#app/global-scene"; import { PokeballType } from "#enums/pokeball"; import type { Variant } from "#app/sprites/variant"; -import { getFrameMs, randGauss } from "#app/utils"; +import { getFrameMs, randGauss } from "#app/utils/common"; export function addPokeballOpenParticles(x: number, y: number, pokeballType: PokeballType): void { switch (pokeballType) { diff --git a/src/field/arena.ts b/src/field/arena.ts index 1bc465c7dbb..f083180490b 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -1,7 +1,7 @@ import { globalScene } from "#app/global-scene"; import type { BiomeTierTrainerPools, PokemonPools } from "#app/data/balance/biomes"; import { biomePokemonPools, BiomePoolTier, biomeTrainerPools } from "#app/data/balance/biomes"; -import { randSeedInt, NumberHolder, isNullOrUndefined, type Constructor } from "#app/utils"; +import { randSeedInt, NumberHolder, isNullOrUndefined, type Constructor } from "#app/utils/common"; import type PokemonSpecies from "#app/data/pokemon-species"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { diff --git a/src/field/damage-number-handler.ts b/src/field/damage-number-handler.ts index a527b148fff..bfb85018dd6 100644 --- a/src/field/damage-number-handler.ts +++ b/src/field/damage-number-handler.ts @@ -2,7 +2,7 @@ import { TextStyle, addTextObject } from "../ui/text"; import type { DamageResult } from "./pokemon"; import type Pokemon from "./pokemon"; import { HitResult } from "./pokemon"; -import { formatStat, fixedInt } from "#app/utils"; +import { formatStat, fixedInt } from "#app/utils/common"; import type { BattlerIndex } from "../battle"; import { globalScene } from "#app/global-scene"; diff --git a/src/field/mystery-encounter-intro.ts b/src/field/mystery-encounter-intro.ts index e1fb0c37074..b6212b6b031 100644 --- a/src/field/mystery-encounter-intro.ts +++ b/src/field/mystery-encounter-intro.ts @@ -2,7 +2,7 @@ import type { GameObjects } from "phaser"; import { globalScene } from "#app/global-scene"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import type { Species } from "#enums/species"; -import { isNullOrUndefined } from "#app/utils"; +import { isNullOrUndefined } from "#app/utils/common"; import { getSpriteKeysFromSpecies } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import type { Variant } from "#app/sprites/variant"; import { doShinySparkleAnim } from "#app/field/anims"; diff --git a/src/field/pokemon-sprite-sparkle-handler.ts b/src/field/pokemon-sprite-sparkle-handler.ts index d2f69500258..cceb0bd7717 100644 --- a/src/field/pokemon-sprite-sparkle-handler.ts +++ b/src/field/pokemon-sprite-sparkle-handler.ts @@ -1,6 +1,6 @@ import { globalScene } from "#app/global-scene"; import Pokemon from "./pokemon"; -import { fixedInt, randInt } from "#app/utils"; +import { fixedInt, randInt } from "#app/utils/common"; export default class PokemonSpriteSparkleHandler { private sprites: Set; diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 27c4edea297..0242820dcde 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -55,7 +55,7 @@ import { getStarterValueFriendshipCap, speciesStarterCosts, } from "#app/data/balance/starters"; -import { NumberHolder, randSeedInt, getIvsFromId, BooleanHolder, randSeedItem, isNullOrUndefined, getEnumValues, toDmgValue, fixedInt, rgbaToInt, rgbHexToRgba, rgbToHsv, deltaRgb, isBetween, type nil, type Constructor } from "#app/utils"; +import { NumberHolder, randSeedInt, getIvsFromId, BooleanHolder, randSeedItem, isNullOrUndefined, getEnumValues, toDmgValue, fixedInt, rgbaToInt, rgbHexToRgba, rgbToHsv, deltaRgb, isBetween, type nil, type Constructor } from "#app/utils/common"; import type { TypeDamageMultiplier } from "#app/data/type"; import { getTypeDamageMultiplier, getTypeRgb } from "#app/data/type"; import { PokemonType } from "#enums/pokemon-type"; @@ -193,7 +193,7 @@ import { import { allAbilities } from "#app/data/data-lists"; import type PokemonData from "#app/system/pokemon-data"; import { BattlerIndex } from "#app/battle"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import type { PartyOption } from "#app/ui/party-ui-handler"; import PartyUiHandler, { PartyUiMode } from "#app/ui/party-ui-handler"; import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; @@ -6581,7 +6581,7 @@ export class PlayerPokemon extends Pokemon { this.leaveField(switchType === SwitchType.SWITCH); globalScene.ui.setMode( - Mode.PARTY, + UiMode.PARTY, PartyUiMode.FAINT_SWITCH, this.getFieldIndex(), (slotIndex: number, option: PartyOption) => { @@ -6599,7 +6599,7 @@ export class PlayerPokemon extends Pokemon { MoveEndPhase, ); } - globalScene.ui.setMode(Mode.MESSAGE).then(resolve); + globalScene.ui.setMode(UiMode.MESSAGE).then(resolve); }, PartyUiHandler.FilterNonFainted, ); diff --git a/src/field/trainer.ts b/src/field/trainer.ts index 1679e6f12e0..6b0a54b2103 100644 --- a/src/field/trainer.ts +++ b/src/field/trainer.ts @@ -11,7 +11,7 @@ import { TrainerSlot } from "#enums/trainer-slot"; import { TrainerPoolTier } from "#enums/trainer-pool-tier"; import { TeraAIMode } from "#enums/tera-ai-mode"; import type { EnemyPokemon } from "#app/field/pokemon"; -import { randSeedWeightedItem, randSeedItem, randSeedInt } from "#app/utils"; +import { randSeedWeightedItem, randSeedItem, randSeedInt } from "#app/utils/common"; import type { PersistentModifier } from "#app/modifier/modifier"; import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; import { getIsInitialized, initI18n } from "#app/plugins/i18n"; diff --git a/src/game-mode.ts b/src/game-mode.ts index 4779fda50e8..dfe6b8cf123 100644 --- a/src/game-mode.ts +++ b/src/game-mode.ts @@ -7,7 +7,7 @@ import type PokemonSpecies from "./data/pokemon-species"; import { allSpecies } from "./data/pokemon-species"; import type { Arena } from "./field/arena"; import Overrides from "#app/overrides"; -import { randSeedInt, randSeedItem } from "#app/utils"; +import { randSeedInt, randSeedItem } from "#app/utils/common"; import { Biome } from "#enums/biome"; import { Species } from "#enums/species"; import { Challenges } from "./enums/challenges"; diff --git a/src/global-vars/bypass-login.ts b/src/global-vars/bypass-login.ts new file mode 100644 index 00000000000..3595a076101 --- /dev/null +++ b/src/global-vars/bypass-login.ts @@ -0,0 +1 @@ +export const bypassLogin = import.meta.env.VITE_BYPASS_LOGIN === "1"; diff --git a/src/global-vars/starter-colors.ts b/src/global-vars/starter-colors.ts new file mode 100644 index 00000000000..6abe028be99 --- /dev/null +++ b/src/global-vars/starter-colors.ts @@ -0,0 +1,4 @@ +export const starterColors: StarterColors = {}; +interface StarterColors { + [key: string]: [string, string]; +} diff --git a/src/inputs-controller.ts b/src/inputs-controller.ts index f92ce3957ab..7fde0f2aca8 100644 --- a/src/inputs-controller.ts +++ b/src/inputs-controller.ts @@ -1,11 +1,11 @@ import Phaser from "phaser"; -import { deepCopy, getEnumValues } from "#app/utils"; +import { deepCopy, getEnumValues } from "#app/utils/common"; import pad_generic from "./configs/inputs/pad_generic"; import pad_unlicensedSNES from "./configs/inputs/pad_unlicensedSNES"; import pad_xbox360 from "./configs/inputs/pad_xbox360"; import pad_dualshock from "./configs/inputs/pad_dualshock"; import pad_procon from "./configs/inputs/pad_procon"; -import { Mode } from "./ui/ui"; +import { UiMode } from "#enums/ui-mode"; import type SettingsGamepadUiHandler from "./ui/settings/settings-gamepad-ui-handler"; import type SettingsKeyboardUiHandler from "./ui/settings/settings-keyboard-ui-handler"; import cfg_keyboard_qwerty from "./configs/inputs/cfg_keyboard_qwerty"; @@ -235,7 +235,7 @@ export class InputsController { if (gamepadName) { this.selectedDevice[Device.GAMEPAD] = gamepadName.toLowerCase(); } - const handler = globalScene.ui?.handlers[Mode.SETTINGS_GAMEPAD] as SettingsGamepadUiHandler; + const handler = globalScene.ui?.handlers[UiMode.SETTINGS_GAMEPAD] as SettingsGamepadUiHandler; handler?.updateChosenGamepadDisplay(); } @@ -248,7 +248,7 @@ export class InputsController { if (layoutKeyboard) { this.selectedDevice[Device.KEYBOARD] = layoutKeyboard.toLowerCase(); } - const handler = globalScene.ui?.handlers[Mode.SETTINGS_KEYBOARD] as SettingsKeyboardUiHandler; + const handler = globalScene.ui?.handlers[UiMode.SETTINGS_KEYBOARD] as SettingsKeyboardUiHandler; handler?.updateChosenKeyboardDisplay(); } @@ -296,7 +296,7 @@ export class InputsController { globalScene.gameData?.saveMappingConfigs(gamepadID, this.configs[gamepadID]); } this.lastSource = "gamepad"; - const handler = globalScene.ui?.handlers[Mode.SETTINGS_GAMEPAD] as SettingsGamepadUiHandler; + const handler = globalScene.ui?.handlers[UiMode.SETTINGS_GAMEPAD] as SettingsGamepadUiHandler; handler?.updateChosenGamepadDisplay(); } @@ -406,7 +406,7 @@ export class InputsController { this.lastSource = "gamepad"; if ( !this.selectedDevice[Device.GAMEPAD] || - (globalScene.ui.getMode() !== Mode.GAMEPAD_BINDING && + (globalScene.ui.getMode() !== UiMode.GAMEPAD_BINDING && this.selectedDevice[Device.GAMEPAD] !== pad.id.toLowerCase()) ) { this.setChosenGamepad(pad.id); diff --git a/src/loading-scene.ts b/src/loading-scene.ts index 4ec2fdf1bb2..914e6e961e2 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -4,7 +4,7 @@ import CacheBustedLoaderPlugin from "#app/plugins/cache-busted-loader-plugin"; import { SceneBase } from "#app/scene-base"; import { WindowVariant, getWindowVariantSuffix } from "#app/ui/ui-theme"; import { isMobile } from "#app/touch-controls"; -import { localPing, getEnumValues, hasAllLocalizedSprites, getEnumKeys } from "#app/utils"; +import { localPing, getEnumValues, hasAllLocalizedSprites, getEnumKeys } from "#app/utils/common"; import { initPokemonPrevolutions, initPokemonStarters } from "#app/data/balance/pokemon-evolutions"; import { initBiomes } from "#app/data/balance/biomes"; import { initEggMoves } from "#app/data/balance/egg-moves"; diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 8feb60c7778..219a6b6344b 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -114,7 +114,7 @@ import { NumberHolder, padInt, randSeedInt, -} from "#app/utils"; +} from "#app/utils/common"; import { Abilities } from "#enums/abilities"; import { BattlerTagType } from "#enums/battler-tag-type"; import { BerryType } from "#enums/berry-type"; diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 851fa33cedc..3eaf4e3c510 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -15,7 +15,7 @@ import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; import type { VoucherType } from "#app/system/voucher"; import { Command } from "#app/ui/command-ui-handler"; import { addTextObject, TextStyle } from "#app/ui/text"; -import { BooleanHolder, hslToHex, isNullOrUndefined, NumberHolder, toDmgValue } from "#app/utils"; +import { BooleanHolder, hslToHex, isNullOrUndefined, NumberHolder, toDmgValue } from "#app/utils/common"; import { BattlerTagType } from "#enums/battler-tag-type"; import { BerryType } from "#enums/berry-type"; import type { Moves } from "#enums/moves"; diff --git a/src/phases/attempt-capture-phase.ts b/src/phases/attempt-capture-phase.ts index 78021da4066..795aa7010e1 100644 --- a/src/phases/attempt-capture-phase.ts +++ b/src/phases/attempt-capture-phase.ts @@ -19,7 +19,7 @@ import { achvs } from "#app/system/achv"; import type { PartyOption } from "#app/ui/party-ui-handler"; import { PartyUiMode } from "#app/ui/party-ui-handler"; import { SummaryUiMode } from "#app/ui/summary-ui-handler"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import type { PokeballType } from "#enums/pokeball"; import { StatusEffect } from "#enums/status-effect"; import i18next from "i18next"; @@ -295,7 +295,7 @@ export class AttemptCapturePhase extends PokemonPhase { () => { globalScene.pokemonInfoContainer.makeRoomForConfirmUi(1, true); globalScene.ui.setMode( - Mode.CONFIRM, + UiMode.CONFIRM, () => { const newPokemon = globalScene.addPlayerPokemon( pokemon.species, @@ -310,12 +310,12 @@ export class AttemptCapturePhase extends PokemonPhase { pokemon, ); globalScene.ui.setMode( - Mode.SUMMARY, + UiMode.SUMMARY, newPokemon, 0, SummaryUiMode.DEFAULT, () => { - globalScene.ui.setMode(Mode.MESSAGE).then(() => { + globalScene.ui.setMode(UiMode.MESSAGE).then(() => { promptRelease(); }); }, @@ -329,19 +329,26 @@ export class AttemptCapturePhase extends PokemonPhase { form: pokemon.formIndex, female: pokemon.gender === Gender.FEMALE, }; - globalScene.ui.setOverlayMode(Mode.POKEDEX_PAGE, pokemon.species, attributes, null, null, () => { - globalScene.ui.setMode(Mode.MESSAGE).then(() => { - promptRelease(); - }); - }); + globalScene.ui.setOverlayMode( + UiMode.POKEDEX_PAGE, + pokemon.species, + attributes, + null, + null, + () => { + globalScene.ui.setMode(UiMode.MESSAGE).then(() => { + promptRelease(); + }); + }, + ); }, () => { globalScene.ui.setMode( - Mode.PARTY, + UiMode.PARTY, PartyUiMode.RELEASE, this.fieldIndex, (slotIndex: number, _option: PartyOption) => { - globalScene.ui.setMode(Mode.MESSAGE).then(() => { + globalScene.ui.setMode(UiMode.MESSAGE).then(() => { if (slotIndex < 6) { addToParty(slotIndex); } else { @@ -352,7 +359,7 @@ export class AttemptCapturePhase extends PokemonPhase { ); }, () => { - globalScene.ui.setMode(Mode.MESSAGE).then(() => { + globalScene.ui.setMode(UiMode.MESSAGE).then(() => { removePokemon(); end(); }); diff --git a/src/phases/attempt-run-phase.ts b/src/phases/attempt-run-phase.ts index 5c51e5c589d..eed5c3c522e 100644 --- a/src/phases/attempt-run-phase.ts +++ b/src/phases/attempt-run-phase.ts @@ -9,7 +9,7 @@ import { StatusEffect } from "#enums/status-effect"; import type { PlayerPokemon, EnemyPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import i18next from "i18next"; -import { NumberHolder } from "#app/utils"; +import { NumberHolder } from "#app/utils/common"; import { BattleEndPhase } from "./battle-end-phase"; import { NewBattlePhase } from "./new-battle-phase"; import { PokemonPhase } from "./pokemon-phase"; diff --git a/src/phases/berry-phase.ts b/src/phases/berry-phase.ts index ae593f66f34..b20b1736d4f 100644 --- a/src/phases/berry-phase.ts +++ b/src/phases/berry-phase.ts @@ -4,7 +4,7 @@ import { BerryUsedEvent } from "#app/events/battle-scene"; import { getPokemonNameWithAffix } from "#app/messages"; import { BerryModifier } from "#app/modifier/modifier"; import i18next from "i18next"; -import { BooleanHolder } from "#app/utils"; +import { BooleanHolder } from "#app/utils/common"; import { FieldPhase } from "./field-phase"; import { CommonAnimPhase } from "./common-anim-phase"; import { globalScene } from "#app/global-scene"; diff --git a/src/phases/check-switch-phase.ts b/src/phases/check-switch-phase.ts index ba4837fd7cc..9d73411fd37 100644 --- a/src/phases/check-switch-phase.ts +++ b/src/phases/check-switch-phase.ts @@ -2,7 +2,7 @@ import { globalScene } from "#app/global-scene"; import { BattleStyle } from "#app/enums/battle-style"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { getPokemonNameWithAffix } from "#app/messages"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; import { BattlePhase } from "./battle-phase"; import { SummonMissingPhase } from "./summon-missing-phase"; @@ -64,14 +64,14 @@ export class CheckSwitchPhase extends BattlePhase { null, () => { globalScene.ui.setMode( - Mode.CONFIRM, + UiMode.CONFIRM, () => { - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.MESSAGE); globalScene.unshiftPhase(new SwitchPhase(SwitchType.INITIAL_SWITCH, this.fieldIndex, false, true)); this.end(); }, () => { - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.MESSAGE); this.end(); }, ); diff --git a/src/phases/command-phase.ts b/src/phases/command-phase.ts index 30343f92aa3..c3e558e1d86 100644 --- a/src/phases/command-phase.ts +++ b/src/phases/command-phase.ts @@ -15,12 +15,12 @@ import type { PlayerPokemon, TurnMove } from "#app/field/pokemon"; import { FieldPosition } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { Command } from "#app/ui/command-ui-handler"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; import { FieldPhase } from "./field-phase"; import { SelectTargetPhase } from "./select-target-phase"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; -import { isNullOrUndefined } from "#app/utils"; +import { isNullOrUndefined } from "#app/utils/common"; import { ArenaTagSide } from "#app/data/arena-tag"; import { ArenaTagType } from "#app/enums/arena-tag-type"; @@ -38,7 +38,7 @@ export class CommandPhase extends FieldPhase { globalScene.updateGameInfo(); - const commandUiHandler = globalScene.ui.handlers[Mode.COMMAND]; + const commandUiHandler = globalScene.ui.handlers[UiMode.COMMAND]; // If one of these conditions is true, we always reset the cursor to Command.FIGHT const cursorResetEvent = @@ -127,7 +127,7 @@ export class CommandPhase extends FieldPhase { ) { this.handleCommand(Command.FIGHT, moveIndex, queuedMove.ignorePP, queuedMove); } else { - globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(UiMode.COMMAND, this.fieldIndex); } } } else { @@ -136,9 +136,9 @@ export class CommandPhase extends FieldPhase { globalScene.currentBattle.mysteryEncounter?.skipToFightInput ) { globalScene.ui.clearText(); - globalScene.ui.setMode(Mode.FIGHT, this.fieldIndex); + globalScene.ui.setMode(UiMode.FIGHT, this.fieldIndex); } else { - globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(UiMode.COMMAND, this.fieldIndex); } } } @@ -209,7 +209,7 @@ export class CommandPhase extends FieldPhase { success = true; } else if (cursor < playerPokemon.getMoveset().length) { const move = playerPokemon.getMoveset()[cursor]; - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.MESSAGE); // Decides between a Disabled, Not Implemented, or No PP translation message const errorMessage = playerPokemon.isMoveRestricted(move.moveId, playerPokemon) @@ -226,7 +226,7 @@ export class CommandPhase extends FieldPhase { null, () => { globalScene.ui.clearText(); - globalScene.ui.setMode(Mode.FIGHT, this.fieldIndex); + globalScene.ui.setMode(UiMode.FIGHT, this.fieldIndex); }, null, true, @@ -244,27 +244,27 @@ export class CommandPhase extends FieldPhase { globalScene.arena.biomeType === Biome.END && (!globalScene.gameMode.isClassic || globalScene.gameMode.isFreshStartChallenge() || notInDex) ) { - globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(UiMode.MESSAGE); globalScene.ui.showText( i18next.t("battle:noPokeballForce"), null, () => { globalScene.ui.showText("", 0); - globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(UiMode.COMMAND, this.fieldIndex); }, null, true, ); } else if (globalScene.currentBattle.battleType === BattleType.TRAINER) { - globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(UiMode.MESSAGE); globalScene.ui.showText( i18next.t("battle:noPokeballTrainer"), null, () => { globalScene.ui.showText("", 0); - globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(UiMode.COMMAND, this.fieldIndex); }, null, true, @@ -273,14 +273,14 @@ export class CommandPhase extends FieldPhase { globalScene.currentBattle.isBattleMysteryEncounter() && !globalScene.currentBattle.mysteryEncounter!.catchAllowed ) { - globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(UiMode.MESSAGE); globalScene.ui.showText( i18next.t("battle:noPokeballMysteryEncounter"), null, () => { globalScene.ui.showText("", 0); - globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(UiMode.COMMAND, this.fieldIndex); }, null, true, @@ -291,14 +291,14 @@ export class CommandPhase extends FieldPhase { .filter(p => p.isActive(true)) .map(p => p.getBattlerIndex()); if (targets.length > 1) { - globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(UiMode.MESSAGE); globalScene.ui.showText( i18next.t("battle:noPokeballMulti"), null, () => { globalScene.ui.showText("", 0); - globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(UiMode.COMMAND, this.fieldIndex); }, null, true, @@ -311,14 +311,14 @@ export class CommandPhase extends FieldPhase { !targetPokemon?.hasAbility(Abilities.WONDER_GUARD, false, true) && cursor < PokeballType.MASTER_BALL ) { - globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(UiMode.MESSAGE); globalScene.ui.showText( i18next.t("battle:noPokeballStrong"), null, () => { globalScene.ui.showText("", 0); - globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(UiMode.COMMAND, this.fieldIndex); }, null, true, @@ -347,14 +347,14 @@ export class CommandPhase extends FieldPhase { (arena.biomeType === Biome.END || (!isNullOrUndefined(mysteryEncounterFleeAllowed) && !mysteryEncounterFleeAllowed)) ) { - globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(UiMode.MESSAGE); globalScene.ui.showText( i18next.t("battle:noEscapeForce"), null, () => { globalScene.ui.showText("", 0); - globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(UiMode.COMMAND, this.fieldIndex); }, null, true, @@ -364,14 +364,14 @@ export class CommandPhase extends FieldPhase { (currentBattle.battleType === BattleType.TRAINER || currentBattle.mysteryEncounter?.encounterMode === MysteryEncounterMode.TRAINER_BATTLE) ) { - globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(UiMode.MESSAGE); globalScene.ui.showText( i18next.t("battle:noEscapeTrainer"), null, () => { globalScene.ui.showText("", 0); - globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(UiMode.COMMAND, this.fieldIndex); }, null, true, @@ -389,7 +389,7 @@ export class CommandPhase extends FieldPhase { } } else if (trappedAbMessages.length > 0) { if (!isSwitch) { - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.MESSAGE); } globalScene.ui.showText( trappedAbMessages[0], @@ -397,7 +397,7 @@ export class CommandPhase extends FieldPhase { () => { globalScene.ui.showText("", 0); if (!isSwitch) { - globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(UiMode.COMMAND, this.fieldIndex); } }, null, @@ -412,8 +412,8 @@ export class CommandPhase extends FieldPhase { break; } if (!isSwitch) { - globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(UiMode.MESSAGE); } const showNoEscapeText = (tag: any) => { globalScene.ui.showText( @@ -429,7 +429,7 @@ export class CommandPhase extends FieldPhase { () => { globalScene.ui.showText("", 0); if (!isSwitch) { - globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); + globalScene.ui.setMode(UiMode.COMMAND, this.fieldIndex); } }, null, @@ -471,6 +471,6 @@ export class CommandPhase extends FieldPhase { } end() { - globalScene.ui.setMode(Mode.MESSAGE).then(() => super.end()); + globalScene.ui.setMode(UiMode.MESSAGE).then(() => super.end()); } } diff --git a/src/phases/damage-anim-phase.ts b/src/phases/damage-anim-phase.ts index 696a2e55b6f..b9581573f2e 100644 --- a/src/phases/damage-anim-phase.ts +++ b/src/phases/damage-anim-phase.ts @@ -2,7 +2,7 @@ import { globalScene } from "#app/global-scene"; import type { BattlerIndex } from "#app/battle"; import { BattleSpec } from "#enums/battle-spec"; import { type DamageResult, HitResult } from "#app/field/pokemon"; -import { fixedInt } from "#app/utils"; +import { fixedInt } from "#app/utils/common"; import { PokemonPhase } from "#app/phases/pokemon-phase"; export class DamageAnimPhase extends PokemonPhase { diff --git a/src/phases/egg-hatch-phase.ts b/src/phases/egg-hatch-phase.ts index 07eeeb0f8ae..69bcf741383 100644 --- a/src/phases/egg-hatch-phase.ts +++ b/src/phases/egg-hatch-phase.ts @@ -8,10 +8,10 @@ import { achvs } from "#app/system/achv"; import EggCounterContainer from "#app/ui/egg-counter-container"; import type EggHatchSceneHandler from "#app/ui/egg-hatch-scene-handler"; import PokemonInfoContainer from "#app/ui/pokemon-info-container"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; -import { fixedInt, getFrameMs, randInt } from "#app/utils"; +import { fixedInt, getFrameMs, randInt } from "#app/utils/common"; import type { EggLapsePhase } from "./egg-lapse-phase"; import type { EggHatchData } from "#app/data/egg-hatch-data"; import { doShinySparkleAnim } from "#app/field/anims"; @@ -76,7 +76,7 @@ export class EggHatchPhase extends Phase { start() { super.start(); - globalScene.ui.setModeForceTransition(Mode.EGG_HATCH_SCENE).then(() => { + globalScene.ui.setModeForceTransition(UiMode.EGG_HATCH_SCENE).then(() => { if (!this.egg) { return this.end(); } diff --git a/src/phases/egg-lapse-phase.ts b/src/phases/egg-lapse-phase.ts index 397eb970fec..4632e264c1d 100644 --- a/src/phases/egg-lapse-phase.ts +++ b/src/phases/egg-lapse-phase.ts @@ -5,7 +5,7 @@ import { Phase } from "#app/phase"; import i18next from "i18next"; import Overrides from "#app/overrides"; import { EggHatchPhase } from "./egg-hatch-phase"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { achvs } from "#app/system/achv"; import type { PlayerPokemon } from "#app/field/pokemon"; import { EggSummaryPhase } from "./egg-summary-phase"; @@ -41,7 +41,7 @@ export class EggLapsePhase extends Phase { 0, ); globalScene.ui.setModeWithoutClear( - Mode.CONFIRM, + UiMode.CONFIRM, () => { this.hatchEggsSkipped(eggsToHatch); this.showSummary(); diff --git a/src/phases/egg-summary-phase.ts b/src/phases/egg-summary-phase.ts index 9d9259d1e67..d16cafa7611 100644 --- a/src/phases/egg-summary-phase.ts +++ b/src/phases/egg-summary-phase.ts @@ -1,6 +1,6 @@ import { globalScene } from "#app/global-scene"; import { Phase } from "#app/phase"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import type { EggHatchData } from "#app/data/egg-hatch-data"; /** @@ -22,7 +22,7 @@ export class EggSummaryPhase extends Phase { // updates next pokemon once the current update has been completed const updateNextPokemon = (i: number) => { if (i >= this.eggHatchData.length) { - globalScene.ui.setModeForceTransition(Mode.EGG_HATCH_SUMMARY, this.eggHatchData).then(() => { + globalScene.ui.setModeForceTransition(UiMode.EGG_HATCH_SUMMARY, this.eggHatchData).then(() => { globalScene.fadeOutBgm(undefined, false); }); } else { @@ -39,7 +39,7 @@ export class EggSummaryPhase extends Phase { end() { globalScene.time.delayedCall(250, () => globalScene.setModifiersVisible(true)); - globalScene.ui.setModeForceTransition(Mode.MESSAGE).then(() => { + globalScene.ui.setModeForceTransition(UiMode.MESSAGE).then(() => { super.end(); }); } diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index c196608f91e..6fd11c416a2 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -29,8 +29,8 @@ import { SummonPhase } from "#app/phases/summon-phase"; import { ToggleDoublePositionPhase } from "#app/phases/toggle-double-position-phase"; import { achvs } from "#app/system/achv"; import { handleTutorial, Tutorial } from "#app/tutorial"; -import { Mode } from "#app/ui/ui"; -import { randSeedInt, randSeedItem } from "#app/utils"; +import { UiMode } from "#enums/ui-mode"; +import { randSeedInt, randSeedItem } from "#app/utils/common"; import { BattleSpec } from "#enums/battle-spec"; import { Biome } from "#enums/biome"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; @@ -298,7 +298,7 @@ export class EncounterPhase extends BattlePhase { globalScene.currentBattle.trainer!.genAI(globalScene.getEnemyParty()); } - globalScene.ui.setMode(Mode.MESSAGE).then(() => { + globalScene.ui.setMode(UiMode.MESSAGE).then(() => { if (!this.loaded) { this.trySetWeatherIfNewBiome(); // Set weather before session gets saved // Game syncs to server on waves X1 and X6 (As of 1.2.0) diff --git a/src/phases/end-evolution-phase.ts b/src/phases/end-evolution-phase.ts index e0bdc7e0d68..579920dde90 100644 --- a/src/phases/end-evolution-phase.ts +++ b/src/phases/end-evolution-phase.ts @@ -1,11 +1,11 @@ import { globalScene } from "#app/global-scene"; import { Phase } from "#app/phase"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; export class EndEvolutionPhase extends Phase { start() { super.start(); - globalScene.ui.setModeForceTransition(Mode.MESSAGE).then(() => this.end()); + globalScene.ui.setModeForceTransition(UiMode.MESSAGE).then(() => this.end()); } } diff --git a/src/phases/evolution-phase.ts b/src/phases/evolution-phase.ts index 203c7542eff..7b013555f40 100644 --- a/src/phases/evolution-phase.ts +++ b/src/phases/evolution-phase.ts @@ -5,8 +5,8 @@ import { globalScene } from "#app/global-scene"; import type { SpeciesFormEvolution } from "#app/data/balance/pokemon-evolutions"; import { FusionSpeciesFormEvolution } from "#app/data/balance/pokemon-evolutions"; import type EvolutionSceneHandler from "#app/ui/evolution-scene-handler"; -import { fixedInt, getFrameMs, randInt } from "#app/utils"; -import { Mode } from "#app/ui/ui"; +import { fixedInt, getFrameMs, randInt } from "#app/utils/common"; +import { UiMode } from "#enums/ui-mode"; import { cos, sin } from "#app/field/anims"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; @@ -53,7 +53,7 @@ export class EvolutionPhase extends Phase { } setMode(): Promise { - return globalScene.ui.setModeForceTransition(Mode.EVOLUTION_SCENE); + return globalScene.ui.setModeForceTransition(UiMode.EVOLUTION_SCENE); } start() { @@ -280,7 +280,7 @@ export class EvolutionPhase extends Phase { this.end(); }; globalScene.ui.setOverlayMode( - Mode.CONFIRM, + UiMode.CONFIRM, () => { globalScene.ui.revertMode(); this.pokemon.pauseEvolutions = true; diff --git a/src/phases/exp-phase.ts b/src/phases/exp-phase.ts index b7d62c92bcf..8841a90d5b1 100644 --- a/src/phases/exp-phase.ts +++ b/src/phases/exp-phase.ts @@ -2,7 +2,7 @@ import { globalScene } from "#app/global-scene"; import { getPokemonNameWithAffix } from "#app/messages"; import { ExpBoosterModifier } from "#app/modifier/modifier"; import i18next from "i18next"; -import { NumberHolder } from "#app/utils"; +import { NumberHolder } from "#app/utils/common"; import { PlayerPartyMemberPokemonPhase } from "./player-party-member-pokemon-phase"; import { LevelUpPhase } from "./level-up-phase"; diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index 2719206a6cc..5a25cf6330d 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -29,7 +29,7 @@ import { SwitchPhase } from "./switch-phase"; import { SwitchSummonPhase } from "./switch-summon-phase"; import { ToggleDoublePositionPhase } from "./toggle-double-position-phase"; import { VictoryPhase } from "./victory-phase"; -import { isNullOrUndefined } from "#app/utils"; +import { isNullOrUndefined } from "#app/utils/common"; import { FRIENDSHIP_LOSS_FROM_FAINT } from "#app/data/balance/starters"; import { BattlerTagType } from "#enums/battler-tag-type"; diff --git a/src/phases/form-change-phase.ts b/src/phases/form-change-phase.ts index bf94284b117..ac7edadf244 100644 --- a/src/phases/form-change-phase.ts +++ b/src/phases/form-change-phase.ts @@ -1,10 +1,10 @@ import { globalScene } from "#app/global-scene"; -import { fixedInt } from "#app/utils"; +import { fixedInt } from "#app/utils/common"; import { achvs } from "../system/achv"; import type { SpeciesFormChange } from "../data/pokemon-forms"; import { getSpeciesFormChangeMessage } from "../data/pokemon-forms"; import type { PlayerPokemon } from "../field/pokemon"; -import { Mode } from "../ui/ui"; +import { UiMode } from "#enums/ui-mode"; import type PartyUiHandler from "../ui/party-ui-handler"; import { getPokemonNameWithAffix } from "../messages"; import { EndEvolutionPhase } from "./end-evolution-phase"; @@ -31,7 +31,7 @@ export class FormChangePhase extends EvolutionPhase { if (!this.modal) { return super.setMode(); } - return globalScene.ui.setOverlayMode(Mode.EVOLUTION_SCENE); + return globalScene.ui.setOverlayMode(UiMode.EVOLUTION_SCENE); } doEvolution(): void { @@ -181,7 +181,7 @@ export class FormChangePhase extends EvolutionPhase { this.pokemon.findAndRemoveTags(t => t.tagType === BattlerTagType.AUTOTOMIZED); if (this.modal) { globalScene.ui.revertMode().then(() => { - if (globalScene.ui.getMode() === Mode.PARTY) { + if (globalScene.ui.getMode() === UiMode.PARTY) { const partyUiHandler = globalScene.ui.getHandler() as PartyUiHandler; partyUiHandler.clearPartySlots(); partyUiHandler.populatePartySlots(); diff --git a/src/phases/game-over-modifier-reward-phase.ts b/src/phases/game-over-modifier-reward-phase.ts index d0a39a4031a..ab6f6554c99 100644 --- a/src/phases/game-over-modifier-reward-phase.ts +++ b/src/phases/game-over-modifier-reward-phase.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; import { ModifierRewardPhase } from "./modifier-reward-phase"; @@ -10,7 +10,7 @@ export class GameOverModifierRewardPhase extends ModifierRewardPhase { globalScene.addModifier(newModifier); // Sound loaded into game as is globalScene.playSound("level_up_fanfare"); - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.MESSAGE); globalScene.ui.fadeIn(250).then(() => { globalScene.ui.showText( i18next.t("battle:rewardGain", { diff --git a/src/phases/game-over-phase.ts b/src/phases/game-over-phase.ts index 9e79eafe88b..304d876a99e 100644 --- a/src/phases/game-over-phase.ts +++ b/src/phases/game-over-phase.ts @@ -19,8 +19,8 @@ import { SummonPhase } from "#app/phases/summon-phase"; import { UnlockPhase } from "#app/phases/unlock-phase"; import { achvs, ChallengeAchv } from "#app/system/achv"; import { Unlockables } from "#app/system/unlockables"; -import { Mode } from "#app/ui/ui"; -import { isLocal, isLocalServerConnected } from "#app/utils"; +import { UiMode } from "#enums/ui-mode"; +import { isLocal, isLocalServerConnected } from "#app/utils/common"; import { PlayerGender } from "#enums/player-gender"; import { TrainerType } from "#enums/trainer-type"; import i18next from "i18next"; @@ -78,7 +78,7 @@ export class GameOverPhase extends BattlePhase { } else { globalScene.ui.showText(i18next.t("battle:retryBattle"), null, () => { globalScene.ui.setMode( - Mode.CONFIRM, + UiMode.CONFIRM, () => { globalScene.ui.fadeOut(1250).then(() => { globalScene.reset(); diff --git a/src/phases/learn-move-phase.ts b/src/phases/learn-move-phase.ts index 4107a9cf087..515ce492b92 100644 --- a/src/phases/learn-move-phase.ts +++ b/src/phases/learn-move-phase.ts @@ -8,7 +8,7 @@ import { getPokemonNameWithAffix } from "#app/messages"; import Overrides from "#app/overrides"; import EvolutionSceneHandler from "#app/ui/evolution-scene-handler"; import { SummaryUiMode } from "#app/ui/summary-ui-handler"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; import { PlayerPartyMemberPokemonPhase } from "#app/phases/player-party-member-pokemon-phase"; import type Pokemon from "#app/field/pokemon"; @@ -25,7 +25,7 @@ export enum LearnMoveType { export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { private moveId: Moves; - private messageMode: Mode; + private messageMode: UiMode; private learnMoveType: LearnMoveType; private cost: number; @@ -55,7 +55,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { } this.messageMode = - globalScene.ui.getHandler() instanceof EvolutionSceneHandler ? Mode.EVOLUTION_SCENE : Mode.MESSAGE; + globalScene.ui.getHandler() instanceof EvolutionSceneHandler ? UiMode.EVOLUTION_SCENE : UiMode.MESSAGE; globalScene.ui.setMode(this.messageMode); // If the Pokemon has less than 4 moves, the new move is added to the largest empty moveset index // If it has 4 moves, the phase then checks if the player wants to replace the move itself. @@ -90,7 +90,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { await globalScene.ui.showTextPromise(preQText); await globalScene.ui.showTextPromise(shouldReplaceQ, undefined, false); await globalScene.ui.setModeWithoutClear( - Mode.CONFIRM, + UiMode.CONFIRM, () => this.forgetMoveProcess(move, pokemon), // Yes () => { // No @@ -115,7 +115,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { globalScene.ui.setMode(this.messageMode); await globalScene.ui.showTextPromise(i18next.t("battle:learnMoveForgetQuestion"), undefined, true); await globalScene.ui.setModeWithoutClear( - Mode.SUMMARY, + UiMode.SUMMARY, pokemon, SummaryUiMode.LEARN_MOVE, move, @@ -153,7 +153,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { false, ); globalScene.ui.setModeWithoutClear( - Mode.CONFIRM, + UiMode.CONFIRM, () => { globalScene.ui.setMode(this.messageMode); globalScene.ui @@ -228,7 +228,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeMoveLearnedTrigger, true); this.end(); }, - this.messageMode === Mode.EVOLUTION_SCENE ? 1000 : undefined, + this.messageMode === UiMode.EVOLUTION_SCENE ? 1000 : undefined, true, ); } diff --git a/src/phases/level-cap-phase.ts b/src/phases/level-cap-phase.ts index 567ac922124..6f3fa6fdb39 100644 --- a/src/phases/level-cap-phase.ts +++ b/src/phases/level-cap-phase.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; import { FieldPhase } from "./field-phase"; @@ -7,7 +7,7 @@ export class LevelCapPhase extends FieldPhase { start(): void { super.start(); - globalScene.ui.setMode(Mode.MESSAGE).then(() => { + globalScene.ui.setMode(UiMode.MESSAGE).then(() => { // Sound loaded into game as is globalScene.playSound("level_up_fanfare"); globalScene.ui.showText( diff --git a/src/phases/level-up-phase.ts b/src/phases/level-up-phase.ts index c6ca17d583e..8c4f4f58095 100644 --- a/src/phases/level-up-phase.ts +++ b/src/phases/level-up-phase.ts @@ -6,7 +6,7 @@ import { EvolutionPhase } from "#app/phases/evolution-phase"; import { LearnMovePhase } from "#app/phases/learn-move-phase"; import { PlayerPartyMemberPokemonPhase } from "#app/phases/player-party-member-pokemon-phase"; import { LevelAchv } from "#app/system/achv"; -import { NumberHolder } from "#app/utils"; +import { NumberHolder } from "#app/utils/common"; import i18next from "i18next"; export class LevelUpPhase extends PlayerPartyMemberPokemonPhase { @@ -71,7 +71,7 @@ export class LevelUpPhase extends PlayerPartyMemberPokemonPhase { if (!this.pokemon.pauseEvolutions) { const evolution = this.pokemon.getEvolution(); if (evolution) { - this.pokemon.breakIllusion() + this.pokemon.breakIllusion(); globalScene.unshiftPhase(new EvolutionPhase(this.pokemon, evolution, this.lastLevel)); } } diff --git a/src/phases/login-phase.ts b/src/phases/login-phase.ts index 846482ff726..673b94b1148 100644 --- a/src/phases/login-phase.ts +++ b/src/phases/login-phase.ts @@ -1,11 +1,12 @@ import { updateUserInfo } from "#app/account"; -import { bypassLogin } from "#app/battle-scene"; +import { bypassLogin } from "#app/global-vars/bypass-login"; import { globalScene } from "#app/global-scene"; import { Phase } from "#app/phase"; import { handleTutorial, Tutorial } from "#app/tutorial"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import i18next, { t } from "i18next"; -import { getCookie, sessionIdKey, executeIf, removeCookie } from "#app/utils"; +import { sessionIdKey, executeIf } from "#app/utils/common"; +import { getCookie, removeCookie } from "#app/utils/cookies"; import { SelectGenderPhase } from "./select-gender-phase"; import { UnavailablePhase } from "./unavailable-phase"; @@ -23,7 +24,7 @@ export class LoginPhase extends Phase { const hasSession = !!getCookie(sessionIdKey); - globalScene.ui.setMode(Mode.LOADING, { buttonActions: [] }); + globalScene.ui.setMode(UiMode.LOADING, { buttonActions: [] }); executeIf(bypassLogin || hasSession, updateUserInfo).then(response => { const success = response ? response[0] : false; const statusCode = response ? response[1] : null; @@ -46,7 +47,7 @@ export class LoginPhase extends Phase { }); }; - globalScene.ui.setMode(Mode.LOGIN_FORM, { + globalScene.ui.setMode(UiMode.LOGIN_FORM, { buttonActions: [ () => { globalScene.ui.playSelect(); @@ -54,7 +55,7 @@ export class LoginPhase extends Phase { }, () => { globalScene.playSound("menu_open"); - globalScene.ui.setMode(Mode.REGISTRATION_FORM, { + globalScene.ui.setMode(UiMode.REGISTRATION_FORM, { buttonActions: [ () => { globalScene.ui.playSelect(); @@ -101,7 +102,7 @@ export class LoginPhase extends Phase { if (success || bypassLogin) { this.end(); } else { - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.MESSAGE); globalScene.ui.showText(t("menu:failedToLoadSaveData")); } }); @@ -109,7 +110,7 @@ export class LoginPhase extends Phase { } end(): void { - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.MESSAGE); if (!globalScene.gameData.gender) { globalScene.unshiftPhase(new SelectGenderPhase()); diff --git a/src/phases/money-reward-phase.ts b/src/phases/money-reward-phase.ts index ae8dc90616d..708bb3a2fa8 100644 --- a/src/phases/money-reward-phase.ts +++ b/src/phases/money-reward-phase.ts @@ -2,7 +2,7 @@ import { globalScene } from "#app/global-scene"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import { MoneyMultiplierModifier } from "#app/modifier/modifier"; import i18next from "i18next"; -import { NumberHolder } from "#app/utils"; +import { NumberHolder } from "#app/utils/common"; import { BattlePhase } from "./battle-phase"; export class MoneyRewardPhase extends BattlePhase { diff --git a/src/phases/move-charge-phase.ts b/src/phases/move-charge-phase.ts index 26ad85bbe03..ea43f1ddb88 100644 --- a/src/phases/move-charge-phase.ts +++ b/src/phases/move-charge-phase.ts @@ -5,7 +5,7 @@ import { applyMoveChargeAttrs, MoveEffectAttr, InstantChargeAttr } from "#app/da import type { PokemonMove } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { MoveResult } from "#app/field/pokemon"; -import { BooleanHolder } from "#app/utils"; +import { BooleanHolder } from "#app/utils/common"; import { MovePhase } from "#app/phases/move-phase"; import { PokemonPhase } from "#app/phases/pokemon-phase"; import { BattlerTagType } from "#enums/battler-tag-type"; diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index 3a4e5f32ede..c29e3fe5cda 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -61,8 +61,8 @@ import { PokemonMultiHitModifier, } from "#app/modifier/modifier"; import { PokemonPhase } from "#app/phases/pokemon-phase"; -import { BooleanHolder, isNullOrUndefined, NumberHolder } from "#app/utils"; -import type { nil } from "#app/utils"; +import { BooleanHolder, isNullOrUndefined, NumberHolder } from "#app/utils/common"; +import type { nil } from "#app/utils/common"; import { BattlerTagType } from "#enums/battler-tag-type"; import type { Moves } from "#enums/moves"; import i18next from "i18next"; diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index dc394b8a134..f42a2aefa34 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -43,7 +43,7 @@ import { CommonAnimPhase } from "#app/phases/common-anim-phase"; import { MoveChargePhase } from "#app/phases/move-charge-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; -import { NumberHolder } from "#app/utils"; +import { NumberHolder } from "#app/utils/common"; import { Abilities } from "#enums/abilities"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; diff --git a/src/phases/mystery-encounter-phases.ts b/src/phases/mystery-encounter-phases.ts index f42290ff872..100be47e4e9 100644 --- a/src/phases/mystery-encounter-phases.ts +++ b/src/phases/mystery-encounter-phases.ts @@ -25,8 +25,8 @@ import { transitionMysteryEncounterIntroVisuals } from "../data/mystery-encounte import { TrainerSlot } from "#enums/trainer-slot"; import { IvScannerModifier } from "../modifier/modifier"; import { Phase } from "../phase"; -import { Mode } from "../ui/ui"; -import { isNullOrUndefined, randSeedItem } from "#app/utils"; +import { UiMode } from "#enums/ui-mode"; +import { isNullOrUndefined, randSeedItem } from "#app/utils/common"; /** * Will handle (in order): @@ -72,7 +72,7 @@ export class MysteryEncounterPhase extends Phase { } // Initiates encounter dialogue window and option select - globalScene.ui.setMode(Mode.MYSTERY_ENCOUNTER, this.optionSelectSettings); + globalScene.ui.setMode(UiMode.MYSTERY_ENCOUNTER, this.optionSelectSettings); } /** @@ -130,7 +130,7 @@ export class MysteryEncounterPhase extends Phase { const optionSelectDialogue = globalScene.currentBattle?.mysteryEncounter?.selectedOption?.dialogue; if (optionSelectDialogue?.selected && optionSelectDialogue.selected.length > 0) { // Handle intermediate dialogue (between player selection event and the onOptionSelect logic) - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.MESSAGE); const selectedDialogue = optionSelectDialogue.selected; let i = 0; const showNextDialogue = () => { @@ -167,7 +167,7 @@ export class MysteryEncounterPhase extends Phase { * Ends phase */ end() { - globalScene.ui.setMode(Mode.MESSAGE).then(() => super.end()); + globalScene.ui.setMode(UiMode.MESSAGE).then(() => super.end()); } } @@ -629,7 +629,7 @@ export class PostMysteryEncounterPhase extends Phase { } i++; - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.MESSAGE); if (title) { globalScene.ui.showDialogue( text ?? "", diff --git a/src/phases/obtain-status-effect-phase.ts b/src/phases/obtain-status-effect-phase.ts index 10ae195b02f..47cae2dcbf6 100644 --- a/src/phases/obtain-status-effect-phase.ts +++ b/src/phases/obtain-status-effect-phase.ts @@ -8,7 +8,7 @@ import { getPokemonNameWithAffix } from "#app/messages"; import { PokemonPhase } from "./pokemon-phase"; import { SpeciesFormChangeStatusEffectTrigger } from "#app/data/pokemon-forms"; import { applyPostSetStatusAbAttrs, PostSetStatusAbAttr } from "#app/data/abilities/ability"; -import { isNullOrUndefined } from "#app/utils"; +import { isNullOrUndefined } from "#app/utils/common"; export class ObtainStatusEffectPhase extends PokemonPhase { private statusEffect?: StatusEffect; diff --git a/src/phases/party-heal-phase.ts b/src/phases/party-heal-phase.ts index 137af9f3a2d..a208ccfff92 100644 --- a/src/phases/party-heal-phase.ts +++ b/src/phases/party-heal-phase.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import { fixedInt } from "#app/utils"; +import { fixedInt } from "#app/utils/common"; import { BattlePhase } from "./battle-phase"; export class PartyHealPhase extends BattlePhase { diff --git a/src/phases/pokemon-anim-phase.ts b/src/phases/pokemon-anim-phase.ts index f0693a52aaa..1889b238f05 100644 --- a/src/phases/pokemon-anim-phase.ts +++ b/src/phases/pokemon-anim-phase.ts @@ -2,7 +2,7 @@ import { globalScene } from "#app/global-scene"; import { SubstituteTag } from "#app/data/battler-tags"; import type Pokemon from "#app/field/pokemon"; import { BattlePhase } from "#app/phases/battle-phase"; -import { isNullOrUndefined } from "#app/utils"; +import { isNullOrUndefined } from "#app/utils/common"; import { PokemonAnimType } from "#enums/pokemon-anim-type"; import { Species } from "#enums/species"; diff --git a/src/phases/pokemon-heal-phase.ts b/src/phases/pokemon-heal-phase.ts index 651c625b23a..7cb013251f6 100644 --- a/src/phases/pokemon-heal-phase.ts +++ b/src/phases/pokemon-heal-phase.ts @@ -8,7 +8,7 @@ import { getPokemonNameWithAffix } from "#app/messages"; import { HealingBoosterModifier } from "#app/modifier/modifier"; import { HealAchv } from "#app/system/achv"; import i18next from "i18next"; -import { NumberHolder } from "#app/utils"; +import { NumberHolder } from "#app/utils/common"; import { CommonAnimPhase } from "./common-anim-phase"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import type { HealBlockTag } from "#app/data/battler-tags"; diff --git a/src/phases/post-turn-status-effect-phase.ts b/src/phases/post-turn-status-effect-phase.ts index af9a9ac1c29..9b530d48196 100644 --- a/src/phases/post-turn-status-effect-phase.ts +++ b/src/phases/post-turn-status-effect-phase.ts @@ -13,7 +13,7 @@ import { getStatusEffectActivationText } from "#app/data/status-effect"; import { BattleSpec } from "#app/enums/battle-spec"; import { StatusEffect } from "#app/enums/status-effect"; import { getPokemonNameWithAffix } from "#app/messages"; -import { BooleanHolder, NumberHolder } from "#app/utils"; +import { BooleanHolder, NumberHolder } from "#app/utils/common"; import { PokemonPhase } from "./pokemon-phase"; export class PostTurnStatusEffectPhase extends PokemonPhase { diff --git a/src/phases/reload-session-phase.ts b/src/phases/reload-session-phase.ts index a7ac0002b03..8cd5f67b43a 100644 --- a/src/phases/reload-session-phase.ts +++ b/src/phases/reload-session-phase.ts @@ -1,7 +1,7 @@ import { globalScene } from "#app/global-scene"; import { Phase } from "#app/phase"; -import { Mode } from "#app/ui/ui"; -import { fixedInt } from "#app/utils"; +import { UiMode } from "#enums/ui-mode"; +import { fixedInt } from "#app/utils/common"; export class ReloadSessionPhase extends Phase { private systemDataStr?: string; @@ -13,7 +13,7 @@ export class ReloadSessionPhase extends Phase { } start(): void { - globalScene.ui.setMode(Mode.SESSION_RELOAD); + globalScene.ui.setMode(UiMode.SESSION_RELOAD); let delayElapsed = false; let loaded = false; diff --git a/src/phases/revival-blessing-phase.ts b/src/phases/revival-blessing-phase.ts index f6fe4d9a3ee..2de1c616f69 100644 --- a/src/phases/revival-blessing-phase.ts +++ b/src/phases/revival-blessing-phase.ts @@ -2,9 +2,9 @@ import { SwitchType } from "#enums/switch-type"; import { globalScene } from "#app/global-scene"; import type { PartyOption } from "#app/ui/party-ui-handler"; import PartyUiHandler, { PartyUiMode } from "#app/ui/party-ui-handler"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; -import { toDmgValue, isNullOrUndefined } from "#app/utils"; +import { toDmgValue, isNullOrUndefined } from "#app/utils/common"; import { BattlePhase } from "#app/phases/battle-phase"; import { SwitchSummonPhase } from "#app/phases/switch-summon-phase"; import { ToggleDoublePositionPhase } from "#app/phases/toggle-double-position-phase"; @@ -21,7 +21,7 @@ export class RevivalBlessingPhase extends BattlePhase { public override start(): void { globalScene.ui.setMode( - Mode.PARTY, + UiMode.PARTY, PartyUiMode.REVIVAL_BLESSING, this.user.getFieldIndex(), (slotIndex: integer, _option: PartyOption) => { @@ -63,7 +63,7 @@ export class RevivalBlessingPhase extends BattlePhase { } } } - globalScene.ui.setMode(Mode.MESSAGE).then(() => this.end()); + globalScene.ui.setMode(UiMode.MESSAGE).then(() => this.end()); }, PartyUiHandler.FilterFainted, ); diff --git a/src/phases/ribbon-modifier-reward-phase.ts b/src/phases/ribbon-modifier-reward-phase.ts index 0ee38250ce1..21114ab3de9 100644 --- a/src/phases/ribbon-modifier-reward-phase.ts +++ b/src/phases/ribbon-modifier-reward-phase.ts @@ -1,7 +1,7 @@ import { globalScene } from "#app/global-scene"; import type PokemonSpecies from "#app/data/pokemon-species"; import type { ModifierTypeFunc } from "#app/modifier/modifier-type"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; import { ModifierRewardPhase } from "./modifier-reward-phase"; @@ -19,7 +19,7 @@ export class RibbonModifierRewardPhase extends ModifierRewardPhase { const newModifier = this.modifierType.newModifier(); globalScene.addModifier(newModifier); globalScene.playSound("level_up_fanfare"); - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.MESSAGE); globalScene.ui.showText( i18next.t("battle:beatModeFirstTime", { speciesName: this.species.name, diff --git a/src/phases/scan-ivs-phase.ts b/src/phases/scan-ivs-phase.ts index aaeeb7f84f8..d79a32bd47e 100644 --- a/src/phases/scan-ivs-phase.ts +++ b/src/phases/scan-ivs-phase.ts @@ -3,7 +3,7 @@ import type { BattlerIndex } from "#app/battle"; import { PERMANENT_STATS, Stat } from "#app/enums/stat"; import { getPokemonNameWithAffix } from "#app/messages"; import { getTextColor, TextStyle } from "#app/ui/text"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; import { PokemonPhase } from "./pokemon-phase"; @@ -51,9 +51,9 @@ export class ScanIvsPhase extends PokemonPhase { null, () => { globalScene.ui.setMode( - Mode.CONFIRM, + UiMode.CONFIRM, () => { - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.MESSAGE); globalScene.ui.clearText(); globalScene.ui .getMessageHandler() @@ -61,7 +61,7 @@ export class ScanIvsPhase extends PokemonPhase { .then(() => this.end()); }, () => { - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.MESSAGE); globalScene.ui.clearText(); this.end(); }, diff --git a/src/phases/select-biome-phase.ts b/src/phases/select-biome-phase.ts index b27e2d0e7cc..0ea2841a2d3 100644 --- a/src/phases/select-biome-phase.ts +++ b/src/phases/select-biome-phase.ts @@ -3,9 +3,9 @@ import { biomeLinks, getBiomeName } from "#app/data/balance/biomes"; import { Biome } from "#app/enums/biome"; import { MoneyInterestModifier, MapModifier } from "#app/modifier/modifier"; import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { BattlePhase } from "./battle-phase"; -import { randSeedInt } from "#app/utils"; +import { randSeedInt } from "#app/utils/common"; import { PartyHealPhase } from "./party-heal-phase"; import { SwitchBiomePhase } from "./switch-biome-phase"; @@ -42,14 +42,14 @@ export class SelectBiomePhase extends BattlePhase { const ret: OptionSelectItem = { label: getBiomeName(b), handler: () => { - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.MESSAGE); setNextBiome(b); return true; }, }; return ret; }); - globalScene.ui.setMode(Mode.OPTION_SELECT, { + globalScene.ui.setMode(UiMode.OPTION_SELECT, { options: biomeSelectItems, delay: 1000, }); diff --git a/src/phases/select-challenge-phase.ts b/src/phases/select-challenge-phase.ts index 5e6f20f93ee..76ac8a60c4f 100644 --- a/src/phases/select-challenge-phase.ts +++ b/src/phases/select-challenge-phase.ts @@ -1,6 +1,6 @@ import { globalScene } from "#app/global-scene"; import { Phase } from "#app/phase"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; export class SelectChallengePhase extends Phase { start() { @@ -8,6 +8,6 @@ export class SelectChallengePhase extends Phase { globalScene.playBgm("menu"); - globalScene.ui.setMode(Mode.CHALLENGE_SELECT); + globalScene.ui.setMode(UiMode.CHALLENGE_SELECT); } } diff --git a/src/phases/select-gender-phase.ts b/src/phases/select-gender-phase.ts index 4da60b38aa1..a1171c1a5db 100644 --- a/src/phases/select-gender-phase.ts +++ b/src/phases/select-gender-phase.ts @@ -2,7 +2,7 @@ import { globalScene } from "#app/global-scene"; import { PlayerGender } from "#app/enums/player-gender"; import { Phase } from "#app/phase"; import { SettingKeys } from "#app/system/settings/settings"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; export class SelectGenderPhase extends Phase { @@ -10,7 +10,7 @@ export class SelectGenderPhase extends Phase { super.start(); globalScene.ui.showText(i18next.t("menu:boyOrGirl"), null, () => { - globalScene.ui.setMode(Mode.OPTION_SELECT, { + globalScene.ui.setMode(UiMode.OPTION_SELECT, { options: [ { label: i18next.t("settings:boy"), @@ -36,7 +36,7 @@ export class SelectGenderPhase extends Phase { } end(): void { - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.MESSAGE); super.end(); } } diff --git a/src/phases/select-modifier-phase.ts b/src/phases/select-modifier-phase.ts index 27ab7e374a2..5f11441333b 100644 --- a/src/phases/select-modifier-phase.ts +++ b/src/phases/select-modifier-phase.ts @@ -24,12 +24,12 @@ import { import type ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { SHOP_OPTIONS_ROW_LIMIT } from "#app/ui/modifier-select-ui-handler"; import PartyUiHandler, { PartyUiMode, PartyOption } from "#app/ui/party-ui-handler"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; import { BattlePhase } from "./battle-phase"; import Overrides from "#app/overrides"; import type { CustomModifierSettings } from "#app/modifier/modifier-type"; -import { isNullOrUndefined, NumberHolder } from "#app/utils"; +import { isNullOrUndefined, NumberHolder } from "#app/utils/common"; export class SelectModifierPhase extends BattlePhase { private rerollCount: number; @@ -92,15 +92,15 @@ export class SelectModifierPhase extends BattlePhase { if (rowCursor < 0 || cursor < 0) { globalScene.ui.showText(i18next.t("battle:skipItemQuestion"), null, () => { globalScene.ui.setOverlayMode( - Mode.CONFIRM, + UiMode.CONFIRM, () => { globalScene.ui.revertMode(); - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.MESSAGE); super.end(); }, () => globalScene.ui.setMode( - Mode.MODIFIER_SELECT, + UiMode.MODIFIER_SELECT, this.isPlayer(), this.typeOptions, modifierSelectCallback, @@ -129,7 +129,7 @@ export class SelectModifierPhase extends BattlePhase { ), ); globalScene.ui.clearText(); - globalScene.ui.setMode(Mode.MESSAGE).then(() => super.end()); + globalScene.ui.setMode(UiMode.MESSAGE).then(() => super.end()); if (!Overrides.WAIVE_ROLL_FEE_OVERRIDE) { globalScene.money -= rerollCost; globalScene.updateMoneyText(); @@ -139,7 +139,7 @@ export class SelectModifierPhase extends BattlePhase { break; case 1: globalScene.ui.setModeWithoutClear( - Mode.PARTY, + UiMode.PARTY, PartyUiMode.MODIFIER_TRANSFER, -1, (fromSlotIndex: number, itemIndex: number, itemQuantity: number, toSlotIndex: number) => { @@ -168,7 +168,7 @@ export class SelectModifierPhase extends BattlePhase { ); } else { globalScene.ui.setMode( - Mode.MODIFIER_SELECT, + UiMode.MODIFIER_SELECT, this.isPlayer(), this.typeOptions, modifierSelectCallback, @@ -180,9 +180,9 @@ export class SelectModifierPhase extends BattlePhase { ); break; case 2: - globalScene.ui.setModeWithoutClear(Mode.PARTY, PartyUiMode.CHECK, -1, () => { + globalScene.ui.setModeWithoutClear(UiMode.PARTY, PartyUiMode.CHECK, -1, () => { globalScene.ui.setMode( - Mode.MODIFIER_SELECT, + UiMode.MODIFIER_SELECT, this.isPlayer(), this.typeOptions, modifierSelectCallback, @@ -207,7 +207,7 @@ export class SelectModifierPhase extends BattlePhase { case 1: if (this.typeOptions.length === 0) { globalScene.ui.clearText(); - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.MESSAGE); super.end(); return true; } @@ -263,7 +263,7 @@ export class SelectModifierPhase extends BattlePhase { } } else { globalScene.ui.clearText(); - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.MESSAGE); super.end(); } }; @@ -272,7 +272,7 @@ export class SelectModifierPhase extends BattlePhase { //TODO: is the bang correct? if (modifierType instanceof FusePokemonModifierType) { globalScene.ui.setModeWithoutClear( - Mode.PARTY, + UiMode.PARTY, PartyUiMode.SPLICE, -1, (fromSlotIndex: number, spliceSlotIndex: number) => { @@ -282,13 +282,13 @@ export class SelectModifierPhase extends BattlePhase { spliceSlotIndex < 6 && fromSlotIndex !== spliceSlotIndex ) { - globalScene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer()).then(() => { + globalScene.ui.setMode(UiMode.MODIFIER_SELECT, this.isPlayer()).then(() => { const modifier = modifierType.newModifier(party[fromSlotIndex], party[spliceSlotIndex])!; //TODO: is the bang correct? applyModifier(modifier, true); }); } else { globalScene.ui.setMode( - Mode.MODIFIER_SELECT, + UiMode.MODIFIER_SELECT, this.isPlayer(), this.typeOptions, modifierSelectCallback, @@ -314,12 +314,12 @@ export class SelectModifierPhase extends BattlePhase { : PartyUiMode.MODIFIER; const tmMoveId = isTmModifier ? (modifierType as TmModifierType).moveId : undefined; globalScene.ui.setModeWithoutClear( - Mode.PARTY, + UiMode.PARTY, partyUiMode, -1, (slotIndex: number, option: PartyOption) => { if (slotIndex < 6) { - globalScene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer()).then(() => { + globalScene.ui.setMode(UiMode.MODIFIER_SELECT, this.isPlayer()).then(() => { const modifier = !isMoveModifier ? !isRememberMoveModifier ? modifierType.newModifier(party[slotIndex]) @@ -329,7 +329,7 @@ export class SelectModifierPhase extends BattlePhase { }); } else { globalScene.ui.setMode( - Mode.MODIFIER_SELECT, + UiMode.MODIFIER_SELECT, this.isPlayer(), this.typeOptions, modifierSelectCallback, @@ -352,7 +352,7 @@ export class SelectModifierPhase extends BattlePhase { return !cost!; // TODO: is the bang correct? }; globalScene.ui.setMode( - Mode.MODIFIER_SELECT, + UiMode.MODIFIER_SELECT, this.isPlayer(), this.typeOptions, modifierSelectCallback, diff --git a/src/phases/select-starter-phase.ts b/src/phases/select-starter-phase.ts index 35511531609..0a76df31a2c 100644 --- a/src/phases/select-starter-phase.ts +++ b/src/phases/select-starter-phase.ts @@ -9,10 +9,10 @@ import { Phase } from "#app/phase"; import { TitlePhase } from "#app/phases/title-phase"; import { SaveSlotUiMode } from "#app/ui/save-slot-select-ui-handler"; import type { Starter } from "#app/ui/starter-select-ui-handler"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import type { Species } from "#enums/species"; import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; -import { isNullOrUndefined } from "#app/utils"; +import { isNullOrUndefined } from "#app/utils/common"; export class SelectStarterPhase extends Phase { start() { @@ -20,9 +20,9 @@ export class SelectStarterPhase extends Phase { globalScene.playBgm("menu"); - globalScene.ui.setMode(Mode.STARTER_SELECT, (starters: Starter[]) => { + globalScene.ui.setMode(UiMode.STARTER_SELECT, (starters: Starter[]) => { globalScene.ui.clearText(); - globalScene.ui.setMode(Mode.SAVE_SLOT, SaveSlotUiMode.SAVE, (slotId: number) => { + globalScene.ui.setMode(UiMode.SAVE_SLOT, SaveSlotUiMode.SAVE, (slotId: number) => { if (slotId === -1) { globalScene.clearPhaseQueue(); globalScene.pushPhase(new TitlePhase()); diff --git a/src/phases/select-target-phase.ts b/src/phases/select-target-phase.ts index 035eaff41fa..c969b9ca421 100644 --- a/src/phases/select-target-phase.ts +++ b/src/phases/select-target-phase.ts @@ -1,7 +1,7 @@ import { globalScene } from "#app/global-scene"; import type { BattlerIndex } from "#app/battle"; import { Command } from "#app/ui/command-ui-handler"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { CommandPhase } from "./command-phase"; import { PokemonPhase } from "./pokemon-phase"; import i18next from "#app/plugins/i18n"; @@ -18,8 +18,8 @@ export class SelectTargetPhase extends PokemonPhase { const turnCommand = globalScene.currentBattle.turnCommands[this.fieldIndex]; const move = turnCommand?.move?.move; - globalScene.ui.setMode(Mode.TARGET_SELECT, this.fieldIndex, move, (targets: BattlerIndex[]) => { - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.TARGET_SELECT, this.fieldIndex, move, (targets: BattlerIndex[]) => { + globalScene.ui.setMode(UiMode.MESSAGE); const fieldSide = globalScene.getField(); const user = fieldSide[this.fieldIndex]; const moveObject = allMoves[move!]; diff --git a/src/phases/show-party-exp-bar-phase.ts b/src/phases/show-party-exp-bar-phase.ts index 139f4efcc49..89bec6d8fdd 100644 --- a/src/phases/show-party-exp-bar-phase.ts +++ b/src/phases/show-party-exp-bar-phase.ts @@ -2,7 +2,7 @@ import { globalScene } from "#app/global-scene"; import { ExpGainsSpeed } from "#app/enums/exp-gains-speed"; import { ExpNotification } from "#app/enums/exp-notification"; import { ExpBoosterModifier } from "#app/modifier/modifier"; -import { NumberHolder } from "#app/utils"; +import { NumberHolder } from "#app/utils/common"; import { HidePartyExpBarPhase } from "./hide-party-exp-bar-phase"; import { LevelUpPhase } from "./level-up-phase"; import { PlayerPartyMemberPokemonPhase } from "./player-party-member-pokemon-phase"; diff --git a/src/phases/stat-stage-change-phase.ts b/src/phases/stat-stage-change-phase.ts index f52e4fb06a0..9d64a81bbb4 100644 --- a/src/phases/stat-stage-change-phase.ts +++ b/src/phases/stat-stage-change-phase.ts @@ -17,7 +17,7 @@ import type Pokemon from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { ResetNegativeStatStageModifier } from "#app/modifier/modifier"; import { handleTutorial, Tutorial } from "#app/tutorial"; -import { NumberHolder, BooleanHolder, isNullOrUndefined } from "#app/utils"; +import { NumberHolder, BooleanHolder, isNullOrUndefined } from "#app/utils/common"; import i18next from "i18next"; import { PokemonPhase } from "./pokemon-phase"; import { Stat, type BattleStat, getStatKey, getStatStageChangeDescriptionKey } from "#enums/stat"; diff --git a/src/phases/switch-phase.ts b/src/phases/switch-phase.ts index 8562309ede5..c056b186021 100644 --- a/src/phases/switch-phase.ts +++ b/src/phases/switch-phase.ts @@ -1,6 +1,6 @@ import { globalScene } from "#app/global-scene"; import PartyUiHandler, { PartyOption, PartyUiMode } from "#app/ui/party-ui-handler"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { SwitchType } from "#enums/switch-type"; import { BattlePhase } from "./battle-phase"; import { PostSummonPhase } from "./post-summon-phase"; @@ -69,7 +69,7 @@ export class SwitchPhase extends BattlePhase { : 0; globalScene.ui.setMode( - Mode.PARTY, + UiMode.PARTY, this.isModal ? PartyUiMode.FAINT_SWITCH : PartyUiMode.POST_BATTLE_SWITCH, fieldIndex, (slotIndex: number, option: PartyOption) => { @@ -80,7 +80,7 @@ export class SwitchPhase extends BattlePhase { const switchType = option === PartyOption.PASS_BATON ? SwitchType.BATON_PASS : this.switchType; globalScene.unshiftPhase(new SwitchSummonPhase(switchType, fieldIndex, slotIndex, this.doReturn)); } - globalScene.ui.setMode(Mode.MESSAGE).then(() => super.end()); + globalScene.ui.setMode(UiMode.MESSAGE).then(() => super.end()); }, PartyUiHandler.FilterNonFainted, ); diff --git a/src/phases/title-phase.ts b/src/phases/title-phase.ts index bc1b157e98e..56057c23372 100644 --- a/src/phases/title-phase.ts +++ b/src/phases/title-phase.ts @@ -17,8 +17,8 @@ import { Unlockables } from "#app/system/unlockables"; import { vouchers } from "#app/system/voucher"; import type { OptionSelectConfig, OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import { SaveSlotUiMode } from "#app/ui/save-slot-select-ui-handler"; -import { Mode } from "#app/ui/ui"; -import { isLocal, isLocalServerConnected, isNullOrUndefined } from "#app/utils"; +import { UiMode } from "#enums/ui-mode"; +import { isLocal, isLocalServerConnected, isNullOrUndefined } from "#app/utils/common"; import i18next from "i18next"; import { CheckSwitchPhase } from "./check-switch-phase"; import { EncounterPhase } from "./encounter-phase"; @@ -75,7 +75,7 @@ export class TitlePhase extends Phase { handler: () => { const setModeAndEnd = (gameMode: GameModes) => { this.gameMode = gameMode; - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.MESSAGE); globalScene.ui.clearText(); this.end(); }; @@ -130,7 +130,7 @@ export class TitlePhase extends Phase { }, }); globalScene.ui.showText(i18next.t("menu:selectGameMode"), null, () => - globalScene.ui.setOverlayMode(Mode.OPTION_SELECT, { + globalScene.ui.setOverlayMode(UiMode.OPTION_SELECT, { options: options, }), ); @@ -140,7 +140,7 @@ export class TitlePhase extends Phase { { label: i18next.t("menu:loadGame"), handler: () => { - globalScene.ui.setOverlayMode(Mode.SAVE_SLOT, SaveSlotUiMode.LOAD, (slotId: number) => { + globalScene.ui.setOverlayMode(UiMode.SAVE_SLOT, SaveSlotUiMode.LOAD, (slotId: number) => { if (slotId === -1) { return this.showOptions(); } @@ -152,7 +152,7 @@ export class TitlePhase extends Phase { { label: i18next.t("menu:runHistory"), handler: () => { - globalScene.ui.setOverlayMode(Mode.RUN_HISTORY); + globalScene.ui.setOverlayMode(UiMode.RUN_HISTORY); return true; }, keepOpen: true, @@ -160,7 +160,7 @@ export class TitlePhase extends Phase { { label: i18next.t("menu:settings"), handler: () => { - globalScene.ui.setOverlayMode(Mode.SETTINGS); + globalScene.ui.setOverlayMode(UiMode.SETTINGS); return true; }, keepOpen: true, @@ -171,12 +171,12 @@ export class TitlePhase extends Phase { noCancel: true, yOffset: 47, }; - globalScene.ui.setMode(Mode.TITLE, config); + globalScene.ui.setMode(UiMode.TITLE, config); } loadSaveSlot(slotId: number): void { globalScene.sessionSlotId = slotId > -1 || !loggedInUser ? slotId : loggedInUser.lastSessionSlot; - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.MESSAGE); globalScene.ui.resetModeChain(); globalScene.gameData .loadSession(slotId, slotId === -1 ? this.lastSessionData : undefined) @@ -196,7 +196,7 @@ export class TitlePhase extends Phase { initDailyRun(): void { globalScene.ui.clearText(); - globalScene.ui.setMode(Mode.SAVE_SLOT, SaveSlotUiMode.SAVE, (slotId: number) => { + globalScene.ui.setMode(UiMode.SAVE_SLOT, SaveSlotUiMode.SAVE, (slotId: number) => { globalScene.clearPhaseQueue(); if (slotId === -1) { globalScene.pushPhase(new TitlePhase()); diff --git a/src/phases/trainer-victory-phase.ts b/src/phases/trainer-victory-phase.ts index f17071f118e..f7005b1300d 100644 --- a/src/phases/trainer-victory-phase.ts +++ b/src/phases/trainer-victory-phase.ts @@ -3,7 +3,7 @@ import { TrainerType } from "#app/enums/trainer-type"; import { modifierTypes } from "#app/modifier/modifier-type"; import { vouchers } from "#app/system/voucher"; import i18next from "i18next"; -import { randSeedItem } from "#app/utils"; +import { randSeedItem } from "#app/utils/common"; import { BattlePhase } from "./battle-phase"; import { ModifierRewardPhase } from "./modifier-reward-phase"; import { MoneyRewardPhase } from "./money-reward-phase"; diff --git a/src/phases/turn-start-phase.ts b/src/phases/turn-start-phase.ts index ba6ace2d188..622b9cdcbd1 100644 --- a/src/phases/turn-start-phase.ts +++ b/src/phases/turn-start-phase.ts @@ -6,7 +6,7 @@ import type Pokemon from "#app/field/pokemon"; import { PokemonMove } from "#app/field/pokemon"; import { BypassSpeedChanceModifier } from "#app/modifier/modifier"; import { Command } from "#app/ui/command-ui-handler"; -import { randSeedShuffle, BooleanHolder } from "#app/utils"; +import { randSeedShuffle, BooleanHolder } from "#app/utils/common"; import { AttemptCapturePhase } from "./attempt-capture-phase"; import { AttemptRunPhase } from "./attempt-run-phase"; import { BerryPhase } from "./berry-phase"; diff --git a/src/phases/unavailable-phase.ts b/src/phases/unavailable-phase.ts index 33042739971..e5f1d899191 100644 --- a/src/phases/unavailable-phase.ts +++ b/src/phases/unavailable-phase.ts @@ -1,11 +1,11 @@ import { globalScene } from "#app/global-scene"; import { Phase } from "#app/phase"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { LoginPhase } from "./login-phase"; export class UnavailablePhase extends Phase { start(): void { - globalScene.ui.setMode(Mode.UNAVAILABLE, () => { + globalScene.ui.setMode(UiMode.UNAVAILABLE, () => { globalScene.unshiftPhase(new LoginPhase(true)); this.end(); }); diff --git a/src/phases/unlock-phase.ts b/src/phases/unlock-phase.ts index b420a4b3a61..7a69fc207bb 100644 --- a/src/phases/unlock-phase.ts +++ b/src/phases/unlock-phase.ts @@ -2,7 +2,7 @@ import { globalScene } from "#app/global-scene"; import { Phase } from "#app/phase"; import type { Unlockables } from "#app/system/unlockables"; import { getUnlockableName } from "#app/system/unlockables"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; export class UnlockPhase extends Phase { @@ -19,7 +19,7 @@ export class UnlockPhase extends Phase { globalScene.gameData.unlocks[this.unlockable] = true; // Sound loaded into game as is globalScene.playSound("level_up_fanfare"); - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.MESSAGE); globalScene.ui.showText( i18next.t("battle:unlockedSomething", { unlockedThing: getUnlockableName(this.unlockable), diff --git a/src/phases/weather-effect-phase.ts b/src/phases/weather-effect-phase.ts index b83eab43b65..d89c78e96c7 100644 --- a/src/phases/weather-effect-phase.ts +++ b/src/phases/weather-effect-phase.ts @@ -15,7 +15,7 @@ import { BattlerTagType } from "#app/enums/battler-tag-type"; import { WeatherType } from "#app/enums/weather-type"; import type Pokemon from "#app/field/pokemon"; import { HitResult } from "#app/field/pokemon"; -import { BooleanHolder, toDmgValue } from "#app/utils"; +import { BooleanHolder, toDmgValue } from "#app/utils/common"; import { CommonAnimPhase } from "./common-anim-phase"; export class WeatherEffectPhase extends CommonAnimPhase { diff --git a/src/pipelines/field-sprite.ts b/src/pipelines/field-sprite.ts index a55b6a9adb6..a6e248c9998 100644 --- a/src/pipelines/field-sprite.ts +++ b/src/pipelines/field-sprite.ts @@ -1,6 +1,6 @@ import { globalScene } from "#app/global-scene"; import { TerrainType, getTerrainColor } from "../data/terrain"; -import { getCurrentTime } from "#app/utils"; +import { getCurrentTime } from "#app/utils/common"; import fieldSpriteFragShader from "./glsl/fieldSpriteFragShader.frag?raw"; import spriteVertShader from "./glsl/spriteShader.vert?raw"; diff --git a/src/pipelines/sprite.ts b/src/pipelines/sprite.ts index 0aa9409617a..307c2cee4cc 100644 --- a/src/pipelines/sprite.ts +++ b/src/pipelines/sprite.ts @@ -3,7 +3,7 @@ import MysteryEncounterIntroVisuals from "#app/field/mystery-encounter-intro"; import Pokemon from "#app/field/pokemon"; import Trainer from "#app/field/trainer"; import { globalScene } from "#app/global-scene"; -import { rgbHexToRgba } from "#app/utils"; +import { rgbHexToRgba } from "#app/utils/common"; import FieldSpritePipeline from "./field-sprite"; import spriteFragShader from "./glsl/spriteFragShader.frag?raw"; import spriteVertShader from "./glsl/spriteShader.vert?raw"; diff --git a/src/plugins/api/api-base.ts b/src/plugins/api/api-base.ts index 6a0eca56eaa..f55ffe2d3fd 100644 --- a/src/plugins/api/api-base.ts +++ b/src/plugins/api/api-base.ts @@ -1,5 +1,5 @@ import { SESSION_ID_COOKIE_NAME } from "#app/constants"; -import { getCookie } from "#app/utils"; +import { getCookie } from "#app/utils/cookies"; type DataType = "json" | "form-urlencoded"; diff --git a/src/plugins/api/pokerogue-account-api.ts b/src/plugins/api/pokerogue-account-api.ts index bab74799677..9cd82c24430 100644 --- a/src/plugins/api/pokerogue-account-api.ts +++ b/src/plugins/api/pokerogue-account-api.ts @@ -6,7 +6,7 @@ import type { } from "#app/@types/PokerogueAccountApi"; import { SESSION_ID_COOKIE_NAME } from "#app/constants"; import { ApiBase } from "#app/plugins/api/api-base"; -import { removeCookie, setCookie } from "#app/utils"; +import { removeCookie, setCookie } from "#app/utils/cookies"; /** * A wrapper for PokéRogue account API requests. diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts index 5e145d08e28..ff9e54fcf50 100644 --- a/src/plugins/i18n.ts +++ b/src/plugins/i18n.ts @@ -1,4 +1,4 @@ -import { camelCaseToKebabCase } from "#app/utils"; +import { camelCaseToKebabCase } from "#app/utils/common"; import i18next from "i18next"; import LanguageDetector from "i18next-browser-languagedetector"; import HttpBackend from "i18next-http-backend"; diff --git a/src/sprites/variant.ts b/src/sprites/variant.ts index 7552f63b778..985068015c6 100644 --- a/src/sprites/variant.ts +++ b/src/sprites/variant.ts @@ -2,7 +2,7 @@ import { VariantTier } from "#app/enums/variant-tier"; import { hasExpSprite } from "#app/sprites/sprite-utils"; import { globalScene } from "#app/global-scene"; import type Pokemon from "#app/field/pokemon"; -import { isNullOrUndefined } from "#app/utils"; +import { isNullOrUndefined } from "#app/utils/common"; export type Variant = 0 | 1 | 2; diff --git a/src/starter-colors.ts b/src/starter-colors.ts new file mode 100644 index 00000000000..6abe028be99 --- /dev/null +++ b/src/starter-colors.ts @@ -0,0 +1,4 @@ +export const starterColors: StarterColors = {}; +interface StarterColors { + [key: string]: [string, string]; +} diff --git a/src/starting-wave.ts b/src/starting-wave.ts new file mode 100644 index 00000000000..3d36dabe652 --- /dev/null +++ b/src/starting-wave.ts @@ -0,0 +1,3 @@ +import Overrides from "./overrides"; + +export const startingWave = Overrides.STARTING_WAVE_OVERRIDE || 1; diff --git a/src/system/achv.ts b/src/system/achv.ts index 62e69e6fbfe..90816ff65c3 100644 --- a/src/system/achv.ts +++ b/src/system/achv.ts @@ -2,7 +2,7 @@ import type { Modifier } from "typescript"; import { TurnHeldItemTransferModifier } from "../modifier/modifier"; import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import i18next from "i18next"; -import { NumberHolder } from "#app/utils"; +import { NumberHolder } from "#app/utils/common"; import { PlayerGender } from "#enums/player-gender"; import type { Challenge } from "#app/data/challenge"; import { diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 698299845a3..8b7987556ee 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -1,6 +1,6 @@ import i18next from "i18next"; import type { PokeballCounts } from "#app/battle-scene"; -import { bypassLogin } from "#app/battle-scene"; +import { bypassLogin } from "#app/global-vars/bypass-login"; import { globalScene } from "#app/global-scene"; import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; @@ -8,7 +8,7 @@ import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; import type PokemonSpecies from "#app/data/pokemon-species"; import { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species"; import { speciesStarterCosts } from "#app/data/balance/starters"; -import { randInt, getEnumKeys, isLocal, executeIf, fixedInt, randSeedItem, NumberHolder } from "#app/utils"; +import { randInt, getEnumKeys, isLocal, executeIf, fixedInt, randSeedItem, NumberHolder } from "#app/utils/common"; import Overrides from "#app/overrides"; import PokemonData from "#app/system/pokemon-data"; import PersistentModifierData from "#app/system/modifier-data"; @@ -24,7 +24,7 @@ import EggData from "#app/system/egg-data"; import type { Egg } from "#app/data/egg"; import { vouchers, VoucherType } from "#app/system/voucher"; import { AES, enc } from "crypto-js"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { clientSessionId, loggedInUser, updateUserInfo } from "#app/account"; import { Nature } from "#enums/nature"; import { GameStats } from "#app/system/game-stats"; @@ -1430,7 +1430,7 @@ export class GameData { const systemData = useCachedSystem ? this.parseSystemData(decrypt(localStorage.getItem(`data_${loggedInUser?.username}`)!, bypassLogin)) : this.getSystemSaveData(); // TODO: is this bang correct? - + const request = { system: systemData, session: sessionData, @@ -1604,7 +1604,7 @@ export class GameData { null, () => { globalScene.ui.setOverlayMode( - Mode.CONFIRM, + UiMode.CONFIRM, () => { localStorage.setItem(dataKey, encrypt(dataStr, bypassLogin)); diff --git a/src/system/game-speed.ts b/src/system/game-speed.ts index 3df47fafc6c..712870dfaf1 100644 --- a/src/system/game-speed.ts +++ b/src/system/game-speed.ts @@ -3,7 +3,7 @@ import type FadeIn from "phaser3-rex-plugins/plugins/audio/fade/FadeIn"; import type FadeOut from "phaser3-rex-plugins/plugins/audio/fade/FadeOut"; import type BattleScene from "#app/battle-scene"; import { globalScene } from "#app/global-scene"; -import { FixedInt } from "#app/utils"; +import { FixedInt } from "#app/utils/common"; type FadeInType = typeof FadeIn; type FadeOutType = typeof FadeOut; diff --git a/src/system/settings/settings-gamepad.ts b/src/system/settings/settings-gamepad.ts index f4a6bd465af..12add905096 100644 --- a/src/system/settings/settings-gamepad.ts +++ b/src/system/settings/settings-gamepad.ts @@ -1,6 +1,6 @@ import type SettingsGamepadUiHandler from "../../ui/settings/settings-gamepad-ui-handler"; -import { Mode } from "../../ui/ui"; -import { truncateString } from "../../utils"; +import { UiMode } from "#enums/ui-mode"; +import { truncateString } from "../../utils/common"; import { Button } from "#enums/buttons"; import { SettingKeyboard } from "#app/system/settings/settings-keyboard"; import { globalScene } from "#app/global-scene"; @@ -107,7 +107,7 @@ export function setSettingGamepad(setting: SettingGamepad, value: number): boole (globalScene.ui.getHandler() as SettingsGamepadUiHandler).updateBindings(); return success; }; - globalScene.ui.setOverlayMode(Mode.GAMEPAD_BINDING, { + globalScene.ui.setOverlayMode(UiMode.GAMEPAD_BINDING, { target: setting, cancelHandler: cancelHandler, }); @@ -133,7 +133,7 @@ export function setSettingGamepad(setting: SettingGamepad, value: number): boole cancelHandler(); return true; }; - globalScene.ui.setOverlayMode(Mode.OPTION_SELECT, { + globalScene.ui.setOverlayMode(UiMode.OPTION_SELECT, { options: [ ...gp.map((g: string) => ({ label: truncateString(g, 30), // Truncate the gamepad name for display diff --git a/src/system/settings/settings-keyboard.ts b/src/system/settings/settings-keyboard.ts index ffe8811e5d9..ec5c9ad6b0e 100644 --- a/src/system/settings/settings-keyboard.ts +++ b/src/system/settings/settings-keyboard.ts @@ -1,5 +1,5 @@ import { Button } from "#enums/buttons"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import type SettingsKeyboardUiHandler from "#app/ui/settings/settings-keyboard-ui-handler"; import i18next from "i18next"; import { globalScene } from "#app/global-scene"; @@ -174,7 +174,7 @@ export function setSettingKeyboard(setting: SettingKeyboard, value: number): boo (globalScene.ui.getHandler() as SettingsKeyboardUiHandler).updateBindings(); return success; }; - globalScene.ui.setOverlayMode(Mode.KEYBOARD_BINDING, { + globalScene.ui.setOverlayMode(UiMode.KEYBOARD_BINDING, { target: setting, cancelHandler: cancelHandler, }); diff --git a/src/system/settings/settings.ts b/src/system/settings/settings.ts index 377216291e2..31faf2b6283 100644 --- a/src/system/settings/settings.ts +++ b/src/system/settings/settings.ts @@ -1,4 +1,4 @@ -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; import { globalScene } from "#app/global-scene"; import { hasTouchscreen } from "#app/touch-controls"; @@ -9,7 +9,7 @@ import { EaseType } from "#enums/ease-type"; import { MoneyFormat } from "#enums/money-format"; import { PlayerGender } from "#enums/player-gender"; import { ShopCursorTarget } from "#enums/shop-cursor-target"; -import { isLocal } from "#app/utils"; +import { isLocal } from "#app/utils/common"; const VOLUME_OPTIONS: SettingOption[] = new Array(11).fill(null).map((_, i) => i @@ -906,7 +906,7 @@ export function setSetting(setting: string, value: number): boolean { return false; } }; - globalScene.ui.setOverlayMode(Mode.OPTION_SELECT, { + globalScene.ui.setOverlayMode(UiMode.OPTION_SELECT, { options: [ { label: "English", diff --git a/src/system/version_migration/versions/v1_0_4.ts b/src/system/version_migration/versions/v1_0_4.ts index 2139352b783..9e30ccdc2a7 100644 --- a/src/system/version_migration/versions/v1_0_4.ts +++ b/src/system/version_migration/versions/v1_0_4.ts @@ -3,7 +3,7 @@ import type { SystemSaveData, SessionSaveData } from "#app/system/game-data"; import { AbilityAttr, defaultStarterSpecies, DexAttr } from "#app/system/game-data"; import { allSpecies } from "#app/data/pokemon-species"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; -import { isNullOrUndefined } from "#app/utils"; +import { isNullOrUndefined } from "#app/utils/common"; import type { SystemSaveMigrator } from "#app/@types/SystemSaveMigrator"; import type { SettingsSaveMigrator } from "#app/@types/SettingsSaveMigrator"; import type { SessionSaveMigrator } from "#app/@types/SessionSaveMigrator"; diff --git a/src/system/version_migration/versions/v1_7_0.ts b/src/system/version_migration/versions/v1_7_0.ts index a1213ccf64c..dc7c0f48640 100644 --- a/src/system/version_migration/versions/v1_7_0.ts +++ b/src/system/version_migration/versions/v1_7_0.ts @@ -3,7 +3,7 @@ import type { SystemSaveMigrator } from "#app/@types/SystemSaveMigrator"; import { getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; import { globalScene } from "#app/global-scene"; import { DexAttr, type SessionSaveData, type SystemSaveData } from "#app/system/game-data"; -import { isNullOrUndefined } from "#app/utils"; +import { isNullOrUndefined } from "#app/utils/common"; /** * If a starter is caught, but the only forms registered as caught are not starterSelectable, diff --git a/src/timed-event-manager.ts b/src/timed-event-manager.ts index 7bbd157948b..8f5a9c75428 100644 --- a/src/timed-event-manager.ts +++ b/src/timed-event-manager.ts @@ -1,7 +1,7 @@ import { globalScene } from "#app/global-scene"; import { TextStyle, addTextObject } from "#app/ui/text"; -import type { nil } from "#app/utils"; -import { isNullOrUndefined } from "#app/utils"; +import type { nil } from "#app/utils/common"; +import { isNullOrUndefined } from "#app/utils/common"; import i18next from "i18next"; import { Species } from "#enums/species"; import type { WeatherPoolEntry } from "#app/data/weather"; diff --git a/src/tutorial.ts b/src/tutorial.ts index 82912f73979..d9ae3a03290 100644 --- a/src/tutorial.ts +++ b/src/tutorial.ts @@ -1,7 +1,7 @@ import { globalScene } from "#app/global-scene"; import AwaitableUiHandler from "./ui/awaitable-ui-handler"; import type UiHandler from "./ui/ui-handler"; -import { Mode } from "./ui/ui"; +import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; import Overrides from "#app/overrides"; @@ -92,13 +92,13 @@ const tutorialHandlers = { }, [Tutorial.Select_Item]: () => { return new Promise(resolve => { - globalScene.ui.setModeWithoutClear(Mode.MESSAGE).then(() => { + globalScene.ui.setModeWithoutClear(UiMode.MESSAGE).then(() => { globalScene.ui.showText( i18next.t("tutorial:selectItem"), null, () => globalScene.ui.showText("", null, () => - globalScene.ui.setModeWithoutClear(Mode.MODIFIER_SELECT).then(() => resolve()), + globalScene.ui.setModeWithoutClear(UiMode.MODIFIER_SELECT).then(() => resolve()), ), null, true, diff --git a/src/ui-inputs.ts b/src/ui-inputs.ts index c9898f9b71e..bf4f51e5af7 100644 --- a/src/ui-inputs.ts +++ b/src/ui-inputs.ts @@ -1,5 +1,5 @@ import type Phaser from "phaser"; -import { Mode } from "./ui/ui"; +import { UiMode } from "#enums/ui-mode"; import type { InputsController } from "./inputs-controller"; import type MessageUiHandler from "./ui/message-ui-handler"; import StarterSelectUiHandler from "./ui/starter-select-ui-handler"; @@ -176,22 +176,22 @@ export class UiInputs { return; } switch (globalScene.ui?.getMode()) { - case Mode.MESSAGE: + case UiMode.MESSAGE: const messageHandler = globalScene.ui.getHandler(); if (!messageHandler.pendingPrompt || messageHandler.isTextAnimationInProgress()) { return; } - case Mode.TITLE: - case Mode.COMMAND: - case Mode.MODIFIER_SELECT: - case Mode.MYSTERY_ENCOUNTER: - globalScene.ui.setOverlayMode(Mode.MENU); + case UiMode.TITLE: + case UiMode.COMMAND: + case UiMode.MODIFIER_SELECT: + case UiMode.MYSTERY_ENCOUNTER: + globalScene.ui.setOverlayMode(UiMode.MENU); break; - case Mode.STARTER_SELECT: - case Mode.POKEDEX_PAGE: + case UiMode.STARTER_SELECT: + case UiMode.POKEDEX_PAGE: this.buttonTouch(); break; - case Mode.MENU: + case UiMode.MENU: globalScene.ui.revertMode(); globalScene.playSound("ui/select"); break; @@ -227,7 +227,7 @@ export class UiInputs { SettingKeys.Game_Speed, Setting[settingGameSpeed].options.findIndex(item => item.label === `${globalScene.gameSpeed}x`) + 1, ); - if (globalScene.ui?.getMode() === Mode.SETTINGS) { + if (globalScene.ui?.getMode() === UiMode.SETTINGS) { (globalScene.ui.getHandler() as SettingsUiHandler).show([]); } } else if (!up && globalScene.gameSpeed > 1) { @@ -238,7 +238,7 @@ export class UiInputs { 0, ), ); - if (globalScene.ui?.getMode() === Mode.SETTINGS) { + if (globalScene.ui?.getMode() === UiMode.SETTINGS) { (globalScene.ui.getHandler() as SettingsUiHandler).show([]); } } diff --git a/src/ui/abstact-option-select-ui-handler.ts b/src/ui/abstact-option-select-ui-handler.ts index b360065f61d..07609648a4e 100644 --- a/src/ui/abstact-option-select-ui-handler.ts +++ b/src/ui/abstact-option-select-ui-handler.ts @@ -1,9 +1,9 @@ import { globalScene } from "#app/global-scene"; import { TextStyle, addBBCodeTextObject, getTextColor, getTextStyleOptions } from "./text"; -import { Mode } from "./ui"; +import { UiMode } from "#enums/ui-mode"; import UiHandler from "./ui-handler"; import { addWindow } from "./ui-theme"; -import { rgbHexToRgba, fixedInt } from "#app/utils"; +import { rgbHexToRgba, fixedInt } from "#app/utils/common"; import { argbFromRgba } from "@material/material-color-utilities"; import { Button } from "#enums/buttons"; import BBCodeText from "phaser3-rex-plugins/plugins/gameobjects/tagtext/bbcodetext/BBCodeText"; @@ -56,7 +56,7 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { protected defaultTextStyle: TextStyle = TextStyle.WINDOW; protected textContent: string; - constructor(mode: Mode | null) { + constructor(mode: UiMode | null) { super(mode); } @@ -70,7 +70,7 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { const ui = this.getUi(); this.optionSelectContainer = globalScene.add.container(globalScene.game.canvas.width / 6 - 1, -48); - this.optionSelectContainer.setName(`option-select-${this.mode ? Mode[this.mode] : "UNKNOWN"}`); + this.optionSelectContainer.setName(`option-select-${this.mode ? UiMode[this.mode] : "UNKNOWN"}`); this.optionSelectContainer.setVisible(false); ui.add(this.optionSelectContainer); @@ -120,7 +120,7 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { // Setting the initial text to establish the width of the select object. We consider all options, even ones that are not displayed, // Except in the case of autocomplete, where we don't want to set up a text element with potentially hundreds of lines. - const optionsForWidth = globalScene.ui.getMode() === Mode.AUTO_COMPLETE ? optionsWithScroll : options; + const optionsForWidth = globalScene.ui.getMode() === UiMode.AUTO_COMPLETE ? optionsWithScroll : options; this.optionSelectText = addBBCodeTextObject( 0, 0, @@ -250,7 +250,7 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { } else { ui.playError(); } - } else if (button === Button.SUBMIT && ui.getMode() === Mode.AUTO_COMPLETE) { + } else if (button === Button.SUBMIT && ui.getMode() === UiMode.AUTO_COMPLETE) { // this is here to differentiate between a Button.SUBMIT vs Button.ACTION within the autocomplete handler // this is here because Button.ACTION is picked up as z on the keyboard, meaning if you're typing and hit z, it'll select the option you've chosen success = true; diff --git a/src/ui/achvs-ui-handler.ts b/src/ui/achvs-ui-handler.ts index 8b5a4dbd395..d0c8b716c7a 100644 --- a/src/ui/achvs-ui-handler.ts +++ b/src/ui/achvs-ui-handler.ts @@ -6,7 +6,7 @@ import type { Voucher } from "#app/system/voucher"; import { getVoucherTypeIcon, getVoucherTypeName, vouchers } from "#app/system/voucher"; import MessageUiHandler from "#app/ui/message-ui-handler"; import { addTextObject, TextStyle } from "#app/ui/text"; -import type { Mode } from "#app/ui/ui"; +import type { UiMode } from "#enums/ui-mode"; import { addWindow } from "#app/ui/ui-theme"; import { ScrollBar } from "#app/ui/scroll-bar"; import { PlayerGender } from "#enums/player-gender"; @@ -59,7 +59,7 @@ export default class AchvsUiHandler extends MessageUiHandler { private cursorObj: Phaser.GameObjects.NineSlice | null; private currentPage: Page; - constructor(mode: Mode | null = null) { + constructor(mode: UiMode | null = null) { super(mode); this.achvsTotal = Object.keys(achvs).length; diff --git a/src/ui/admin-ui-handler.ts b/src/ui/admin-ui-handler.ts index 34b6e59145f..67ae3118863 100644 --- a/src/ui/admin-ui-handler.ts +++ b/src/ui/admin-ui-handler.ts @@ -1,11 +1,11 @@ import { Button } from "#app/enums/buttons"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; -import { formatText } from "#app/utils"; +import { formatText } from "#app/utils/common"; import type { InputFieldConfig } from "./form-modal-ui-handler"; import { FormModalUiHandler } from "./form-modal-ui-handler"; import type { ModalConfig } from "./modal-ui-handler"; import { TextStyle } from "./text"; -import { Mode } from "./ui"; +import { UiMode } from "#enums/ui-mode"; import { globalScene } from "#app/global-scene"; type AdminUiHandlerService = "discord" | "google"; @@ -30,7 +30,7 @@ export default class AdminUiHandler extends FormModalUiHandler { return `Username and ${service} successfully ${mode.toLowerCase()}ed`; }; - constructor(mode: Mode | null = null) { + constructor(mode: UiMode | null = null) { super(mode); } @@ -143,10 +143,10 @@ export default class AdminUiHandler extends FormModalUiHandler { const adminSearchResult: AdminSearchInfo = this.convertInputsToAdmin(); // this converts the input texts into a single object for use later const validFields = this.areFieldsValid(this.adminMode); if (validFields.error) { - globalScene.ui.setMode(Mode.LOADING, { buttonActions: [] }); // this is here to force a loading screen to allow the admin tool to reopen again if there's an error + globalScene.ui.setMode(UiMode.LOADING, { buttonActions: [] }); // this is here to force a loading screen to allow the admin tool to reopen again if there's an error return this.showMessage(validFields.errorMessage ?? "", adminSearchResult, true); } - globalScene.ui.setMode(Mode.LOADING, { buttonActions: [] }); + globalScene.ui.setMode(UiMode.LOADING, { buttonActions: [] }); if (this.adminMode === AdminMode.LINK) { this.adminLinkUnlink(adminSearchResult, "discord", "Link") // calls server to link discord .then(response => { @@ -174,7 +174,7 @@ export default class AdminUiHandler extends FormModalUiHandler { showMessage(message: string, adminResult: AdminSearchInfo, isError: boolean) { globalScene.ui.setMode( - Mode.ADMIN, + UiMode.ADMIN, Object.assign(this.config, { errorMessage: message?.trim() }), this.adminMode, adminResult, @@ -221,18 +221,18 @@ export default class AdminUiHandler extends FormModalUiHandler { const mode = adminResult[aR] === "" ? "Link" : "Unlink"; // this figures out if we're linking or unlinking a service const validFields = this.areFieldsValid(this.adminMode, service); if (validFields.error) { - globalScene.ui.setMode(Mode.LOADING, { buttonActions: [] }); // this is here to force a loading screen to allow the admin tool to reopen again if there's an error + globalScene.ui.setMode(UiMode.LOADING, { buttonActions: [] }); // this is here to force a loading screen to allow the admin tool to reopen again if there's an error return this.showMessage(validFields.errorMessage ?? "", adminResult, true); } this.adminLinkUnlink(this.convertInputsToAdmin(), service as AdminUiHandlerService, mode).then( response => { // attempts to link/unlink depending on the service if (response.error) { - globalScene.ui.setMode(Mode.LOADING, { buttonActions: [] }); + globalScene.ui.setMode(UiMode.LOADING, { buttonActions: [] }); return this.showMessage(response.errorType, adminResult, true); // fail } // success, reload panel with new results - globalScene.ui.setMode(Mode.LOADING, { buttonActions: [] }); + globalScene.ui.setMode(UiMode.LOADING, { buttonActions: [] }); this.adminSearch(adminResult).then(response => { if (response.error) { return this.showMessage(response.errorType, adminResult, true); @@ -385,7 +385,7 @@ export default class AdminUiHandler extends FormModalUiHandler { private updateAdminPanelInfo(adminSearchResult: AdminSearchInfo, mode?: AdminMode) { mode = mode ?? AdminMode.ADMIN; globalScene.ui.setMode( - Mode.ADMIN, + UiMode.ADMIN, { buttonActions: [ // we double revert here and below to go back 2 layers of menus diff --git a/src/ui/arena-flyout.ts b/src/ui/arena-flyout.ts index 1eb18a32f98..ab3bd13b47a 100644 --- a/src/ui/arena-flyout.ts +++ b/src/ui/arena-flyout.ts @@ -16,7 +16,7 @@ import type { TurnEndEvent } from "../events/battle-scene"; import { BattleSceneEventType } from "../events/battle-scene"; import { ArenaTagType } from "#enums/arena-tag-type"; import TimeOfDayWidget from "./time-of-day-widget"; -import { toCamelCaseString, formatText, fixedInt } from "#app/utils"; +import { toCamelCaseString, formatText, fixedInt } from "#app/utils/common"; import type { ParseKeys } from "i18next"; import i18next from "i18next"; diff --git a/src/ui/autocomplete-ui-handler.ts b/src/ui/autocomplete-ui-handler.ts index a170ae43f23..ba1802c8582 100644 --- a/src/ui/autocomplete-ui-handler.ts +++ b/src/ui/autocomplete-ui-handler.ts @@ -1,10 +1,10 @@ import { Button } from "#enums/buttons"; import AbstractOptionSelectUiHandler from "./abstact-option-select-ui-handler"; -import { Mode } from "./ui"; +import { UiMode } from "#enums/ui-mode"; export default class AutoCompleteUiHandler extends AbstractOptionSelectUiHandler { modalContainer: Phaser.GameObjects.Container; - constructor(mode: Mode = Mode.OPTION_SELECT) { + constructor(mode: UiMode = UiMode.OPTION_SELECT) { super(mode); } diff --git a/src/ui/awaitable-ui-handler.ts b/src/ui/awaitable-ui-handler.ts index 890e2884fd5..3c577fd4411 100644 --- a/src/ui/awaitable-ui-handler.ts +++ b/src/ui/awaitable-ui-handler.ts @@ -1,4 +1,4 @@ -import type { Mode } from "./ui"; +import type { UiMode } from "#enums/ui-mode"; import UiHandler from "./ui-handler"; import { Button } from "#enums/buttons"; import { globalScene } from "#app/global-scene"; @@ -9,7 +9,7 @@ export default abstract class AwaitableUiHandler extends UiHandler { public tutorialActive = false; public tutorialOverlay: Phaser.GameObjects.Rectangle; - constructor(mode: Mode | null = null) { + constructor(mode: UiMode | null = null) { super(mode); } diff --git a/src/ui/ball-ui-handler.ts b/src/ui/ball-ui-handler.ts index cfa44832824..abb106a6553 100644 --- a/src/ui/ball-ui-handler.ts +++ b/src/ui/ball-ui-handler.ts @@ -1,7 +1,7 @@ import { getPokeballName } from "../data/pokeball"; import { addTextObject, getTextStyleOptions, TextStyle } from "./text"; import { Command } from "./command-ui-handler"; -import { Mode } from "./ui"; +import { UiMode } from "#enums/ui-mode"; import UiHandler from "./ui-handler"; import { addWindow } from "./ui-theme"; import { Button } from "#enums/buttons"; @@ -18,7 +18,7 @@ export default class BallUiHandler extends UiHandler { private scale = 0.1666666667; constructor() { - super(Mode.BALL); + super(UiMode.BALL); } setup() { @@ -82,15 +82,15 @@ export default class BallUiHandler extends UiHandler { if (button === Button.ACTION && this.cursor < pokeballTypeCount) { if (globalScene.pokeballCounts[this.cursor]) { if (commandPhase.handleCommand(Command.BALL, this.cursor)) { - globalScene.ui.setMode(Mode.COMMAND, commandPhase.getFieldIndex()); - globalScene.ui.setMode(Mode.MESSAGE); + globalScene.ui.setMode(UiMode.COMMAND, commandPhase.getFieldIndex()); + globalScene.ui.setMode(UiMode.MESSAGE); success = true; } } else { ui.playError(); } } else { - ui.setMode(Mode.COMMAND, commandPhase.getFieldIndex()); + ui.setMode(UiMode.COMMAND, commandPhase.getFieldIndex()); success = true; } } else { diff --git a/src/ui/base-stats-overlay.ts b/src/ui/base-stats-overlay.ts index d0b0aff3a9d..0541ae766e5 100644 --- a/src/ui/base-stats-overlay.ts +++ b/src/ui/base-stats-overlay.ts @@ -1,7 +1,7 @@ import type { InfoToggle } from "../battle-scene"; import { TextStyle, addTextObject } from "./text"; import { addWindow } from "./ui-theme"; -import { fixedInt } from "#app/utils"; +import { fixedInt } from "#app/utils/common"; import i18next from "i18next"; import { globalScene } from "#app/global-scene"; diff --git a/src/ui/battle-flyout.ts b/src/ui/battle-flyout.ts index 854f4cc4dd9..e590bebcf5a 100644 --- a/src/ui/battle-flyout.ts +++ b/src/ui/battle-flyout.ts @@ -1,6 +1,6 @@ import type { default as Pokemon } from "../field/pokemon"; import { addTextObject, TextStyle } from "./text"; -import { fixedInt } from "#app/utils"; +import { fixedInt } from "#app/utils/common"; import { globalScene } from "#app/global-scene"; import type Move from "#app/data/moves/move"; import type { BerryUsedEvent, MoveUsedEvent } from "../events/battle-scene"; diff --git a/src/ui/battle-info.ts b/src/ui/battle-info.ts index 06c5f7fb3f1..4f9e59c8c89 100644 --- a/src/ui/battle-info.ts +++ b/src/ui/battle-info.ts @@ -1,6 +1,6 @@ import type { EnemyPokemon, default as Pokemon } from "../field/pokemon"; import { getLevelTotalExp, getLevelRelExp } from "../data/exp"; -import { getLocalizedSpriteKey, fixedInt } from "#app/utils"; +import { getLocalizedSpriteKey, fixedInt } from "#app/utils/common"; import { addTextObject, TextStyle } from "./text"; import { getGenderSymbol, getGenderColor, Gender } from "../data/gender"; import { StatusEffect } from "#enums/status-effect"; @@ -617,7 +617,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { return resolve(); } - const gender: Gender = !!pokemon.summonData?.illusion ? pokemon.summonData?.illusion.gender : pokemon.gender; + const gender: Gender = pokemon.summonData?.illusion ? pokemon.summonData?.illusion.gender : pokemon.gender; this.genderText.setText(getGenderSymbol(gender)); this.genderText.setColor(getGenderColor(gender)); @@ -794,7 +794,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { const nameSizeTest = addTextObject(0, 0, displayName, TextStyle.BATTLE_INFO); nameTextWidth = nameSizeTest.displayWidth; - const gender: Gender = !!pokemon.summonData?.illusion ? pokemon.summonData?.illusion.gender : pokemon.gender; + const gender: Gender = pokemon.summonData?.illusion ? pokemon.summonData?.illusion.gender : pokemon.gender; while ( nameTextWidth > (this.player || !this.boss ? 60 : 98) - diff --git a/src/ui/battle-message-ui-handler.ts b/src/ui/battle-message-ui-handler.ts index ccb9378c688..d1102bbe53e 100644 --- a/src/ui/battle-message-ui-handler.ts +++ b/src/ui/battle-message-ui-handler.ts @@ -1,6 +1,6 @@ import { globalScene } from "#app/global-scene"; import { addBBCodeTextObject, addTextObject, getTextColor, TextStyle } from "./text"; -import { Mode } from "./ui"; +import { UiMode } from "#enums/ui-mode"; import MessageUiHandler from "./message-ui-handler"; import { addWindow } from "./ui-theme"; import type BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; @@ -23,7 +23,7 @@ export default class BattleMessageUiHandler extends MessageUiHandler { public readonly wordWrapWidth: number = 1780; constructor() { - super(Mode.MESSAGE); + super(UiMode.MESSAGE); } setup(): void { diff --git a/src/ui/bgm-bar.ts b/src/ui/bgm-bar.ts index d944453ba2c..e331d82f6d9 100644 --- a/src/ui/bgm-bar.ts +++ b/src/ui/bgm-bar.ts @@ -1,6 +1,6 @@ import { addTextObject, TextStyle } from "./text"; import i18next from "i18next"; -import { formatText } from "#app/utils"; +import { formatText } from "#app/utils/common"; import { globalScene } from "#app/global-scene"; const hiddenX = -150; diff --git a/src/ui/candy-bar.ts b/src/ui/candy-bar.ts index 0cf3e0c91e9..f7a01b83093 100644 --- a/src/ui/candy-bar.ts +++ b/src/ui/candy-bar.ts @@ -1,8 +1,8 @@ -import { starterColors } from "#app/battle-scene"; +import { starterColors } from "#app/global-vars/starter-colors"; import { globalScene } from "#app/global-scene"; import { TextStyle, addTextObject } from "./text"; import { argbFromRgba } from "@material/material-color-utilities"; -import { rgbHexToRgba } from "#app/utils"; +import { rgbHexToRgba } from "#app/utils/common"; import type { Species } from "#enums/species"; export default class CandyBar extends Phaser.GameObjects.Container { diff --git a/src/ui/challenges-select-ui-handler.ts b/src/ui/challenges-select-ui-handler.ts index caffede2487..d1df16a457b 100644 --- a/src/ui/challenges-select-ui-handler.ts +++ b/src/ui/challenges-select-ui-handler.ts @@ -1,11 +1,11 @@ import { TextStyle, addTextObject } from "./text"; -import type { Mode } from "./ui"; +import type { UiMode } from "#enums/ui-mode"; import UiHandler from "./ui-handler"; import { addWindow } from "./ui-theme"; import { Button } from "#enums/buttons"; import i18next from "i18next"; import type { Challenge } from "#app/data/challenge"; -import { getLocalizedSpriteKey } from "#app/utils"; +import { getLocalizedSpriteKey } from "#app/utils/common"; import { Challenges } from "#app/enums/challenges"; import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; import { Color, ShadowColor } from "#app/enums/color"; @@ -50,7 +50,7 @@ export default class GameChallengesUiHandler extends UiHandler { private readonly leftArrowGap: number = 90; // distance from the label to the left arrow private readonly arrowSpacing: number = 3; // distance between the arrows and the value area - constructor(mode: Mode | null = null) { + constructor(mode: UiMode | null = null) { super(mode); } diff --git a/src/ui/char-sprite.ts b/src/ui/char-sprite.ts index f717927c107..a8451f4bb9c 100644 --- a/src/ui/char-sprite.ts +++ b/src/ui/char-sprite.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import { MissingTextureKey } from "#app/utils"; +import { MissingTextureKey } from "#app/utils/common"; export default class CharSprite extends Phaser.GameObjects.Container { private sprite: Phaser.GameObjects.Sprite; diff --git a/src/ui/command-ui-handler.ts b/src/ui/command-ui-handler.ts index 55937bb8b00..57c5b5a82a2 100644 --- a/src/ui/command-ui-handler.ts +++ b/src/ui/command-ui-handler.ts @@ -1,6 +1,6 @@ import { addTextObject, TextStyle } from "./text"; import PartyUiHandler, { PartyUiMode } from "./party-ui-handler"; -import { Mode } from "./ui"; +import { UiMode } from "#enums/ui-mode"; import UiHandler from "./ui-handler"; import i18next from "i18next"; import { Button } from "#enums/buttons"; @@ -30,7 +30,7 @@ export default class CommandUiHandler extends UiHandler { protected cursor2 = 0; constructor() { - super(Mode.COMMAND); + super(UiMode.COMMAND); } setup() { @@ -124,18 +124,18 @@ export default class CommandUiHandler extends UiHandler { switch (cursor) { // Fight case Command.FIGHT: - ui.setMode(Mode.FIGHT, (globalScene.getCurrentPhase() as CommandPhase).getFieldIndex()); + ui.setMode(UiMode.FIGHT, (globalScene.getCurrentPhase() as CommandPhase).getFieldIndex()); success = true; break; // Ball case Command.BALL: - ui.setModeWithoutClear(Mode.BALL); + ui.setModeWithoutClear(UiMode.BALL); success = true; break; // Pokemon case Command.POKEMON: ui.setMode( - Mode.PARTY, + UiMode.PARTY, PartyUiMode.SWITCH, (globalScene.getCurrentPhase() as CommandPhase).getPokemon().getFieldIndex(), null, @@ -149,7 +149,7 @@ export default class CommandUiHandler extends UiHandler { success = true; break; case Command.TERA: - ui.setMode(Mode.FIGHT, (globalScene.getCurrentPhase() as CommandPhase).getFieldIndex(), Command.TERA); + ui.setMode(UiMode.FIGHT, (globalScene.getCurrentPhase() as CommandPhase).getFieldIndex(), Command.TERA); success = true; break; } diff --git a/src/ui/confirm-ui-handler.ts b/src/ui/confirm-ui-handler.ts index eb7018051b7..7b5ca3d7e63 100644 --- a/src/ui/confirm-ui-handler.ts +++ b/src/ui/confirm-ui-handler.ts @@ -1,6 +1,6 @@ import type { OptionSelectConfig } from "./abstact-option-select-ui-handler"; import AbstractOptionSelectUiHandler from "./abstact-option-select-ui-handler"; -import { Mode } from "./ui"; +import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; import { Button } from "#enums/buttons"; import { globalScene } from "#app/global-scene"; @@ -12,7 +12,7 @@ export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler { private switchCheckCursor: number; constructor() { - super(Mode.CONFIRM); + super(UiMode.CONFIRM); } getWindowWidth(): number { diff --git a/src/ui/daily-run-scoreboard.ts b/src/ui/daily-run-scoreboard.ts index 896f2171676..076a782908b 100644 --- a/src/ui/daily-run-scoreboard.ts +++ b/src/ui/daily-run-scoreboard.ts @@ -1,6 +1,6 @@ import i18next from "i18next"; import { globalScene } from "#app/global-scene"; -import { getEnumKeys, executeIf } from "#app/utils"; +import { getEnumKeys, executeIf } from "#app/utils/common"; import { TextStyle, addTextObject } from "./text"; import { WindowVariant, addWindow } from "./ui-theme"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; diff --git a/src/ui/egg-gacha-ui-handler.ts b/src/ui/egg-gacha-ui-handler.ts index 956a308448b..5377cf3d283 100644 --- a/src/ui/egg-gacha-ui-handler.ts +++ b/src/ui/egg-gacha-ui-handler.ts @@ -1,7 +1,7 @@ -import { Mode } from "./ui"; +import { UiMode } from "#enums/ui-mode"; import { TextStyle, addTextObject, getEggTierTextTint, getTextStyleOptions } from "./text"; import MessageUiHandler from "./message-ui-handler"; -import { getEnumValues, getEnumKeys, fixedInt, randSeedShuffle } from "#app/utils"; +import { getEnumValues, getEnumKeys, fixedInt, randSeedShuffle } from "#app/utils/common"; import type { IEggOptions } from "../data/egg"; import { Egg, getLegendaryGachaSpeciesForTimestamp } from "../data/egg"; import { VoucherType, getVoucherTypeIcon } from "../system/voucher"; @@ -41,7 +41,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { private scale = 0.1666666667; constructor() { - super(Mode.EGG_GACHA); + super(UiMode.EGG_GACHA); this.gachaContainers = []; this.gachaKnobs = []; diff --git a/src/ui/egg-hatch-scene-handler.ts b/src/ui/egg-hatch-scene-handler.ts index 6ede68b7ae6..76e2c54f4b6 100644 --- a/src/ui/egg-hatch-scene-handler.ts +++ b/src/ui/egg-hatch-scene-handler.ts @@ -1,4 +1,4 @@ -import { Mode } from "./ui"; +import { UiMode } from "#enums/ui-mode"; import UiHandler from "./ui-handler"; import { Button } from "#enums/buttons"; import { EggHatchPhase } from "#app/phases/egg-hatch-phase"; @@ -16,7 +16,7 @@ export default class EggHatchSceneHandler extends UiHandler { public readonly eventTarget: EventTarget = new EventTarget(); constructor() { - super(Mode.EGG_HATCH_SCENE); + super(UiMode.EGG_HATCH_SCENE); } setup() { diff --git a/src/ui/egg-list-ui-handler.ts b/src/ui/egg-list-ui-handler.ts index cf3326bec13..9f41feea8ab 100644 --- a/src/ui/egg-list-ui-handler.ts +++ b/src/ui/egg-list-ui-handler.ts @@ -1,4 +1,4 @@ -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import PokemonIconAnimHandler, { PokemonIconAnimMode } from "#app/ui/pokemon-icon-anim-handler"; import { TextStyle, addTextObject } from "#app/ui/text"; import MessageUiHandler from "#app/ui/message-ui-handler"; @@ -29,7 +29,7 @@ export default class EggListUiHandler extends MessageUiHandler { private iconAnimHandler: PokemonIconAnimHandler; constructor() { - super(Mode.EGG_LIST); + super(UiMode.EGG_LIST); } setup() { diff --git a/src/ui/egg-summary-ui-handler.ts b/src/ui/egg-summary-ui-handler.ts index f335f83d8bf..ddc536fe1ad 100644 --- a/src/ui/egg-summary-ui-handler.ts +++ b/src/ui/egg-summary-ui-handler.ts @@ -1,4 +1,4 @@ -import { Mode } from "./ui"; +import { UiMode } from "#enums/ui-mode"; import PokemonIconAnimHandler, { PokemonIconAnimMode } from "./pokemon-icon-anim-handler"; import MessageUiHandler from "./message-ui-handler"; import { getEggTierForSpecies } from "../data/egg"; @@ -54,7 +54,7 @@ export default class EggSummaryUiHandler extends MessageUiHandler { public readonly eventTarget: EventTarget = new EventTarget(); constructor() { - super(Mode.EGG_HATCH_SUMMARY); + super(UiMode.EGG_HATCH_SUMMARY); } setup() { diff --git a/src/ui/evolution-scene-handler.ts b/src/ui/evolution-scene-handler.ts index 91f3360a3d4..cea91ce4e2c 100644 --- a/src/ui/evolution-scene-handler.ts +++ b/src/ui/evolution-scene-handler.ts @@ -1,6 +1,6 @@ import MessageUiHandler from "./message-ui-handler"; import { TextStyle, addTextObject } from "./text"; -import { Mode } from "./ui"; +import { UiMode } from "#enums/ui-mode"; import { Button } from "#enums/buttons"; import { globalScene } from "#app/global-scene"; @@ -12,7 +12,7 @@ export default class EvolutionSceneHandler extends MessageUiHandler { public cancelled: boolean; constructor() { - super(Mode.EVOLUTION_SCENE); + super(UiMode.EVOLUTION_SCENE); } setup() { diff --git a/src/ui/fight-ui-handler.ts b/src/ui/fight-ui-handler.ts index 285a1dd36cc..e0a73d62934 100644 --- a/src/ui/fight-ui-handler.ts +++ b/src/ui/fight-ui-handler.ts @@ -4,9 +4,9 @@ import { addTextObject, TextStyle } from "./text"; import { getTypeDamageMultiplierColor } from "#app/data/type"; import { PokemonType } from "#enums/pokemon-type"; import { Command } from "./command-ui-handler"; -import { Mode } from "./ui"; +import { UiMode } from "#enums/ui-mode"; import UiHandler from "./ui-handler"; -import { getLocalizedSpriteKey, fixedInt, padInt } from "#app/utils"; +import { getLocalizedSpriteKey, fixedInt, padInt } from "#app/utils/common"; import { MoveCategory } from "#enums/MoveCategory"; import i18next from "i18next"; import { Button } from "#enums/buttons"; @@ -37,7 +37,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { protected cursor2 = 0; constructor() { - super(Mode.FIGHT); + super(UiMode.FIGHT); } setup() { @@ -156,7 +156,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { // Cannot back out of fight menu if skipToFightInput is enabled const { battleType, mysteryEncounter } = globalScene.currentBattle; if (battleType !== BattleType.MYSTERY_ENCOUNTER || !mysteryEncounter?.skipToFightInput) { - ui.setMode(Mode.COMMAND, this.fieldIndex); + ui.setMode(UiMode.COMMAND, this.fieldIndex); success = true; } } @@ -308,7 +308,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { !opponent.battleData?.abilityRevealed, undefined, undefined, - true + true, ); if (effectiveness === undefined) { return undefined; @@ -353,7 +353,14 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { const moveColors = opponents .map(opponent => - opponent.getMoveEffectiveness(pokemon, pokemonMove.getMove(), !opponent.battleData.abilityRevealed, undefined, undefined, true), + opponent.getMoveEffectiveness( + pokemon, + pokemonMove.getMove(), + !opponent.battleData.abilityRevealed, + undefined, + undefined, + true, + ), ) .sort((a, b) => b - a) .map(effectiveness => getTypeDamageMultiplierColor(effectiveness ?? 0, "offense")); diff --git a/src/ui/filter-text.ts b/src/ui/filter-text.ts index a6b01ba39e6..8b13b76db31 100644 --- a/src/ui/filter-text.ts +++ b/src/ui/filter-text.ts @@ -5,7 +5,7 @@ import { addWindow, WindowVariant } from "./ui-theme"; import i18next from "i18next"; import type AwaitableUiHandler from "./awaitable-ui-handler"; import type UI from "./ui"; -import { Mode } from "./ui"; +import { UiMode } from "#enums/ui-mode"; import { globalScene } from "#app/global-scene"; export enum FilterTextRow { @@ -154,7 +154,7 @@ export class FilterText extends Phaser.GameObjects.Container { this.onChange; }, ]; - ui.setOverlayMode(Mode.POKEDEX_SCAN, buttonAction, prefilledText, index); + ui.setOverlayMode(UiMode.POKEDEX_SCAN, buttonAction, prefilledText, index); } setCursor(cursor: number): void { diff --git a/src/ui/form-modal-ui-handler.ts b/src/ui/form-modal-ui-handler.ts index e27b2e9ed89..e8e67d591d5 100644 --- a/src/ui/form-modal-ui-handler.ts +++ b/src/ui/form-modal-ui-handler.ts @@ -1,10 +1,10 @@ import type { ModalConfig } from "./modal-ui-handler"; import { ModalUiHandler } from "./modal-ui-handler"; -import type { Mode } from "./ui"; +import type { UiMode } from "#enums/ui-mode"; import { TextStyle, addTextInputObject, addTextObject } from "./text"; import { WindowVariant, addWindow } from "./ui-theme"; import type InputText from "phaser3-rex-plugins/plugins/inputtext"; -import { fixedInt } from "#app/utils"; +import { fixedInt } from "#app/utils/common"; import { Button } from "#enums/buttons"; import { globalScene } from "#app/global-scene"; @@ -21,7 +21,7 @@ export abstract class FormModalUiHandler extends ModalUiHandler { protected tween: Phaser.Tweens.Tween; protected formLabels: Phaser.GameObjects.Text[]; - constructor(mode: Mode | null = null) { + constructor(mode: UiMode | null = null) { super(mode); this.editing = false; diff --git a/src/ui/game-stats-ui-handler.ts b/src/ui/game-stats-ui-handler.ts index 2e2112dfda4..dc184a34866 100644 --- a/src/ui/game-stats-ui-handler.ts +++ b/src/ui/game-stats-ui-handler.ts @@ -1,9 +1,9 @@ import Phaser from "phaser"; import { TextStyle, addTextObject } from "#app/ui/text"; -import type { Mode } from "#app/ui/ui"; +import type { UiMode } from "#enums/ui-mode"; import UiHandler from "#app/ui/ui-handler"; import { addWindow } from "#app/ui/ui-theme"; -import { getPlayTimeString, formatFancyLargeNumber, toReadableString } from "#app/utils"; +import { getPlayTimeString, formatFancyLargeNumber, toReadableString } from "#app/utils/common"; import type { GameData } from "#app/system/game-data"; import { DexAttr } from "#app/system/game-data"; import { speciesStarterCosts } from "#app/data/balance/starters"; @@ -223,7 +223,7 @@ export default class GameStatsUiHandler extends UiHandler { private arrowUp: Phaser.GameObjects.Sprite; private arrowDown: Phaser.GameObjects.Sprite; - constructor(mode: Mode | null = null) { + constructor(mode: UiMode | null = null) { super(mode); this.statLabels = []; diff --git a/src/ui/loading-modal-ui-handler.ts b/src/ui/loading-modal-ui-handler.ts index 9626276245d..13dffe5614c 100644 --- a/src/ui/loading-modal-ui-handler.ts +++ b/src/ui/loading-modal-ui-handler.ts @@ -1,10 +1,10 @@ import i18next from "i18next"; import { ModalUiHandler } from "./modal-ui-handler"; import { addTextObject, TextStyle } from "./text"; -import type { Mode } from "./ui"; +import type { UiMode } from "#enums/ui-mode"; export default class LoadingModalUiHandler extends ModalUiHandler { - constructor(mode: Mode | null = null) { + constructor(mode: UiMode | null = null) { super(mode); } diff --git a/src/ui/login-form-ui-handler.ts b/src/ui/login-form-ui-handler.ts index 5c009357443..2dfab9c0c40 100644 --- a/src/ui/login-form-ui-handler.ts +++ b/src/ui/login-form-ui-handler.ts @@ -1,8 +1,8 @@ import type { InputFieldConfig } from "./form-modal-ui-handler"; import { FormModalUiHandler } from "./form-modal-ui-handler"; import type { ModalConfig } from "./modal-ui-handler"; -import { fixedInt } from "#app/utils"; -import { Mode } from "./ui"; +import { fixedInt } from "#app/utils/common"; +import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; import { addTextObject, TextStyle } from "./text"; import { addWindow } from "./ui-theme"; @@ -34,7 +34,7 @@ export default class LoginFormUiHandler extends FormModalUiHandler { private infoContainer: Phaser.GameObjects.Container; private externalPartyBg: Phaser.GameObjects.NineSlice; private externalPartyTitle: Phaser.GameObjects.Text; - constructor(mode: Mode | null = null) { + constructor(mode: UiMode | null = null) { super(mode); } @@ -146,9 +146,9 @@ export default class LoginFormUiHandler extends FormModalUiHandler { // Prevent overlapping overrides on action modification this.submitAction = originalLoginAction; this.sanitizeInputs(); - globalScene.ui.setMode(Mode.LOADING, { buttonActions: [] }); + globalScene.ui.setMode(UiMode.LOADING, { buttonActions: [] }); const onFail = error => { - globalScene.ui.setMode(Mode.LOGIN_FORM, Object.assign(config, { errorMessage: error?.trim() })); + globalScene.ui.setMode(UiMode.LOGIN_FORM, Object.assign(config, { errorMessage: error?.trim() })); globalScene.ui.playError(); }; if (!this.inputs[0].text) { @@ -215,8 +215,8 @@ export default class LoginFormUiHandler extends FormModalUiHandler { }); const onFail = error => { - globalScene.ui.setMode(Mode.LOADING, { buttonActions: [] }); - globalScene.ui.setModeForceTransition(Mode.LOGIN_FORM, Object.assign(config, { errorMessage: error?.trim() })); + globalScene.ui.setMode(UiMode.LOADING, { buttonActions: [] }); + globalScene.ui.setModeForceTransition(UiMode.LOGIN_FORM, Object.assign(config, { errorMessage: error?.trim() })); globalScene.ui.playError(); }; @@ -236,7 +236,7 @@ export default class LoginFormUiHandler extends FormModalUiHandler { }, }); } - globalScene.ui.setOverlayMode(Mode.OPTION_SELECT, { + globalScene.ui.setOverlayMode(UiMode.OPTION_SELECT, { options: options, delay: 1000, }); diff --git a/src/ui/menu-ui-handler.ts b/src/ui/menu-ui-handler.ts index 241ddbb91a8..7f0cd4d6a78 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -1,8 +1,10 @@ -import { bypassLogin } from "#app/battle-scene"; +import { bypassLogin } from "#app/global-vars/bypass-login"; import { globalScene } from "#app/global-scene"; import { TextStyle, addTextObject, getTextStyleOptions } from "./text"; -import { Mode } from "./ui"; -import { getEnumKeys, isLocal, isBeta, fixedInt, getCookie, sessionIdKey } from "#app/utils"; +import { UiMode } from "#enums/ui-mode"; +import { getEnumKeys, isLocal, fixedInt, sessionIdKey } from "#app/utils/common"; +import { isBeta } from "#app/utils/utility-vars"; +import { getCookie } from "#app/utils/cookies"; import { addWindow, WindowVariant } from "./ui-theme"; import MessageUiHandler from "./message-ui-handler"; import type { OptionSelectConfig, OptionSelectItem } from "./abstact-option-select-ui-handler"; @@ -64,12 +66,12 @@ export default class MenuUiHandler extends MessageUiHandler { public bgmBar: BgmBar; - constructor(mode: Mode | null = null) { + constructor(mode: UiMode | null = null) { super(mode); this.excludedMenus = () => [ { - condition: [Mode.COMMAND, Mode.TITLE].includes(mode ?? Mode.TITLE), + condition: [UiMode.COMMAND, UiMode.TITLE].includes(mode ?? UiMode.TITLE), options: [MenuOptions.EGG_GACHA, MenuOptions.EGG_LIST], }, { condition: bypassLogin, options: [MenuOptions.LOG_OUT] }, @@ -234,7 +236,7 @@ export default class MenuUiHandler extends MessageUiHandler { ]), xOffset: 98, }; - ui.setOverlayMode(Mode.MENU_OPTION_SELECT, config); + ui.setOverlayMode(UiMode.MENU_OPTION_SELECT, config); }); }; @@ -377,7 +379,7 @@ export default class MenuUiHandler extends MessageUiHandler { ui.revertMode(); }, ]; - ui.setMode(Mode.TEST_DIALOGUE, buttonAction, prefilledText); + ui.setMode(UiMode.TEST_DIALOGUE, buttonAction, prefilledText); return true; }, keepOpen: true, @@ -456,7 +458,7 @@ export default class MenuUiHandler extends MessageUiHandler { handler: () => { ui.playSelect(); ui.setOverlayMode( - Mode.ADMIN, + UiMode.ADMIN, { buttonActions: [ // we double revert here and below to go back 2 layers of menus @@ -483,7 +485,7 @@ export default class MenuUiHandler extends MessageUiHandler { return true; }, }); - globalScene.ui.setOverlayMode(Mode.OPTION_SELECT, { + globalScene.ui.setOverlayMode(UiMode.OPTION_SELECT, { options: options, delay: 0, }); @@ -557,21 +559,21 @@ export default class MenuUiHandler extends MessageUiHandler { this.showText("", 0); switch (adjustedCursor) { case MenuOptions.GAME_SETTINGS: - ui.setOverlayMode(Mode.SETTINGS); + ui.setOverlayMode(UiMode.SETTINGS); success = true; break; case MenuOptions.ACHIEVEMENTS: - ui.setOverlayMode(Mode.ACHIEVEMENTS); + ui.setOverlayMode(UiMode.ACHIEVEMENTS); success = true; break; case MenuOptions.STATS: - ui.setOverlayMode(Mode.GAME_STATS); + ui.setOverlayMode(UiMode.GAME_STATS); success = true; break; case MenuOptions.EGG_LIST: if (globalScene.gameData.eggs.length) { ui.revertMode(); - ui.setOverlayMode(Mode.EGG_LIST); + ui.setOverlayMode(UiMode.EGG_LIST); success = true; } else { ui.showText(i18next.t("menuUiHandler:noEggs"), null, () => ui.showText(""), fixedInt(1500)); @@ -580,12 +582,12 @@ export default class MenuUiHandler extends MessageUiHandler { break; case MenuOptions.EGG_GACHA: ui.revertMode(); - ui.setOverlayMode(Mode.EGG_GACHA); + ui.setOverlayMode(UiMode.EGG_GACHA); success = true; break; case MenuOptions.POKEDEX: ui.revertMode(); - ui.setOverlayMode(Mode.POKEDEX); + ui.setOverlayMode(UiMode.POKEDEX); success = true; break; case MenuOptions.MANAGE_DATA: @@ -642,18 +644,18 @@ export default class MenuUiHandler extends MessageUiHandler { }, ); } - ui.setOverlayMode(Mode.MENU_OPTION_SELECT, this.manageDataConfig); + ui.setOverlayMode(UiMode.MENU_OPTION_SELECT, this.manageDataConfig); success = true; break; case MenuOptions.COMMUNITY: - ui.setOverlayMode(Mode.MENU_OPTION_SELECT, this.communityConfig); + ui.setOverlayMode(UiMode.MENU_OPTION_SELECT, this.communityConfig); success = true; break; case MenuOptions.SAVE_AND_QUIT: if (globalScene.currentBattle) { success = true; const doSaveQuit = () => { - ui.setMode(Mode.LOADING, { + ui.setMode(UiMode.LOADING, { buttonActions: [], fadeOut: () => globalScene.gameData.saveAll(true, true, true, true).then(() => { @@ -668,7 +670,7 @@ export default class MenuUiHandler extends MessageUiHandler { return; } ui.setOverlayMode( - Mode.CONFIRM, + UiMode.CONFIRM, doSaveQuit, () => { ui.revertMode(); @@ -688,7 +690,7 @@ export default class MenuUiHandler extends MessageUiHandler { case MenuOptions.LOG_OUT: success = true; const doLogout = () => { - ui.setMode(Mode.LOADING, { + ui.setMode(UiMode.LOADING, { buttonActions: [], fadeOut: () => pokerogueApi.account.logout().then(() => { @@ -703,7 +705,7 @@ export default class MenuUiHandler extends MessageUiHandler { return; } ui.setOverlayMode( - Mode.CONFIRM, + UiMode.CONFIRM, doLogout, () => { ui.revertMode(); @@ -722,7 +724,7 @@ export default class MenuUiHandler extends MessageUiHandler { success = true; ui.revertMode().then(result => { if (!result) { - ui.setMode(Mode.MESSAGE); + ui.setMode(UiMode.MESSAGE); } }); } else { diff --git a/src/ui/message-ui-handler.ts b/src/ui/message-ui-handler.ts index b57b236531c..efa53b63808 100644 --- a/src/ui/message-ui-handler.ts +++ b/src/ui/message-ui-handler.ts @@ -1,6 +1,6 @@ import AwaitableUiHandler from "./awaitable-ui-handler"; -import type { Mode } from "./ui"; -import { getFrameMs } from "#app/utils"; +import type { UiMode } from "#enums/ui-mode"; +import { getFrameMs } from "#app/utils/common"; import { globalScene } from "#app/global-scene"; export default abstract class MessageUiHandler extends AwaitableUiHandler { @@ -11,7 +11,7 @@ export default abstract class MessageUiHandler extends AwaitableUiHandler { public message: Phaser.GameObjects.Text; public prompt: Phaser.GameObjects.Sprite; - constructor(mode: Mode | null = null) { + constructor(mode: UiMode | null = null) { super(mode); this.pendingPrompt = false; diff --git a/src/ui/modal-ui-handler.ts b/src/ui/modal-ui-handler.ts index b7dbbeb202d..a3b94296d3f 100644 --- a/src/ui/modal-ui-handler.ts +++ b/src/ui/modal-ui-handler.ts @@ -1,5 +1,5 @@ import { TextStyle, addTextObject } from "./text"; -import type { Mode } from "./ui"; +import type { UiMode } from "#enums/ui-mode"; import UiHandler from "./ui-handler"; import { WindowVariant, addWindow } from "./ui-theme"; import type { Button } from "#enums/buttons"; @@ -17,7 +17,7 @@ export abstract class ModalUiHandler extends UiHandler { protected buttonBgs: Phaser.GameObjects.NineSlice[]; protected buttonLabels: Phaser.GameObjects.Text[]; - constructor(mode: Mode | null = null) { + constructor(mode: UiMode | null = null) { super(mode); this.buttonContainers = []; diff --git a/src/ui/modifier-select-ui-handler.ts b/src/ui/modifier-select-ui-handler.ts index 26351d4dbf1..9ba54491175 100644 --- a/src/ui/modifier-select-ui-handler.ts +++ b/src/ui/modifier-select-ui-handler.ts @@ -4,13 +4,13 @@ import { getPlayerShopModifierTypeOptionsForWave, TmModifierType } from "../modi import { getPokeballAtlasKey } from "#app/data/pokeball"; import { addTextObject, getTextStyleOptions, getModifierTierTextTint, getTextColor, TextStyle } from "./text"; import AwaitableUiHandler from "./awaitable-ui-handler"; -import { Mode } from "./ui"; +import { UiMode } from "#enums/ui-mode"; import { LockModifierTiersModifier, PokemonHeldItemModifier, HealShopCostModifier } from "../modifier/modifier"; import { handleTutorial, Tutorial } from "../tutorial"; import { Button } from "#enums/buttons"; import MoveInfoOverlay from "./move-info-overlay"; import { allMoves } from "../data/moves/move"; -import { formatMoney, NumberHolder } from "#app/utils"; +import { formatMoney, NumberHolder } from "#app/utils/common"; import Overrides from "#app/overrides"; import i18next from "i18next"; import { ShopCursorTarget } from "#app/enums/shop-cursor-target"; @@ -50,7 +50,7 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { private cursorObj: Phaser.GameObjects.Image | null; constructor() { - super(Mode.CONFIRM); + super(UiMode.CONFIRM); this.options = []; this.shopOptionsRows = []; diff --git a/src/ui/move-info-overlay.ts b/src/ui/move-info-overlay.ts index bd9fdf00c72..2b230d609fd 100644 --- a/src/ui/move-info-overlay.ts +++ b/src/ui/move-info-overlay.ts @@ -2,7 +2,7 @@ import type { InfoToggle } from "#app/battle-scene"; import { globalScene } from "#app/global-scene"; import { TextStyle, addTextObject } from "./text"; import { addWindow } from "./ui-theme"; -import { getLocalizedSpriteKey, fixedInt } from "#app/utils"; +import { getLocalizedSpriteKey, fixedInt } from "#app/utils/common"; import type Move from "../data/moves/move"; import { MoveCategory } from "#enums/MoveCategory"; import { PokemonType } from "#enums/pokemon-type"; diff --git a/src/ui/mystery-encounter-ui-handler.ts b/src/ui/mystery-encounter-ui-handler.ts index 2bf05302c55..0866ed8788e 100644 --- a/src/ui/mystery-encounter-ui-handler.ts +++ b/src/ui/mystery-encounter-ui-handler.ts @@ -1,12 +1,12 @@ import { addBBCodeTextObject, getBBCodeFrag, TextStyle } from "./text"; -import { Mode } from "./ui"; +import { UiMode } from "#enums/ui-mode"; import UiHandler from "./ui-handler"; import { Button } from "#enums/buttons"; import { addWindow, WindowVariant } from "./ui-theme"; import type { MysteryEncounterPhase } from "../phases/mystery-encounter-phases"; import { PartyUiMode } from "./party-ui-handler"; import type MysteryEncounterOption from "#app/data/mystery-encounters/mystery-encounter-option"; -import { fixedInt, isNullOrUndefined } from "#app/utils"; +import { fixedInt, isNullOrUndefined } from "#app/utils/common"; import { getPokeballAtlasKey } from "../data/pokeball"; import type { OptionSelectSettings } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { getEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; @@ -47,7 +47,7 @@ export default class MysteryEncounterUiHandler extends UiHandler { protected blockInput = true; constructor() { - super(Mode.MYSTERY_ENCOUNTER); + super(UiMode.MYSTERY_ENCOUNTER); } override setup() { @@ -141,8 +141,8 @@ export default class MysteryEncounterUiHandler extends UiHandler { ...this.overrideSettings, slideInDescription: false, }; - globalScene.ui.setMode(Mode.PARTY, PartyUiMode.CHECK, -1, () => { - globalScene.ui.setMode(Mode.MYSTERY_ENCOUNTER, overrideSettings); + globalScene.ui.setMode(UiMode.PARTY, PartyUiMode.CHECK, -1, () => { + globalScene.ui.setMode(UiMode.MYSTERY_ENCOUNTER, overrideSettings); setTimeout(() => { this.setCursor(this.viewPartyIndex); this.unblockInput(); diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index ba90108c274..7c3689e757c 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -4,8 +4,8 @@ import { MoveResult } from "#app/field/pokemon"; import { addBBCodeTextObject, addTextObject, getTextColor, TextStyle } from "#app/ui/text"; import { Command } from "#app/ui/command-ui-handler"; import MessageUiHandler from "#app/ui/message-ui-handler"; -import { Mode } from "#app/ui/ui"; -import { BooleanHolder, toReadableString, randInt, getLocalizedSpriteKey } from "#app/utils"; +import { UiMode } from "#enums/ui-mode"; +import { BooleanHolder, toReadableString, randInt, getLocalizedSpriteKey } from "#app/utils/common"; import { PokemonFormChangeItemModifier, PokemonHeldItemModifier, @@ -252,7 +252,7 @@ export default class PartyUiHandler extends MessageUiHandler { ]; constructor() { - super(Mode.PARTY); + super(UiMode.PARTY); } setup() { @@ -556,7 +556,7 @@ export default class PartyUiHandler extends MessageUiHandler { this.showText(filterResult as string, undefined, () => this.showText("", 0), undefined, true); } else if (option === PartyOption.SUMMARY) { ui.playSelect(); - ui.setModeWithoutClear(Mode.SUMMARY, pokemon).then(() => this.clearOptions()); + ui.setModeWithoutClear(UiMode.SUMMARY, pokemon).then(() => this.clearOptions()); return true; } else if (option === PartyOption.POKEDEX) { ui.playSelect(); @@ -566,7 +566,7 @@ export default class PartyUiHandler extends MessageUiHandler { form: pokemon.formIndex, female: pokemon.gender === Gender.FEMALE, }; - ui.setOverlayMode(Mode.POKEDEX_PAGE, pokemon.species, attributes).then(() => this.clearOptions()); + ui.setOverlayMode(UiMode.POKEDEX_PAGE, pokemon.species, attributes).then(() => this.clearOptions()); return true; } else if (option === PartyOption.UNPAUSE_EVOLUTION) { this.clearOptions(); @@ -593,13 +593,13 @@ export default class PartyUiHandler extends MessageUiHandler { null, () => { ui.setModeWithoutClear( - Mode.CONFIRM, + UiMode.CONFIRM, () => { const fusionName = pokemon.getName(); pokemon.unfuse().then(() => { this.clearPartySlots(); this.populatePartySlots(); - ui.setMode(Mode.PARTY); + ui.setMode(UiMode.PARTY); this.showText( i18next.t("partyUiHandler:wasReverted", { fusionName: fusionName, @@ -607,7 +607,7 @@ export default class PartyUiHandler extends MessageUiHandler { }), undefined, () => { - ui.setMode(Mode.PARTY); + ui.setMode(UiMode.PARTY); this.showText("", 0); }, null, @@ -616,7 +616,7 @@ export default class PartyUiHandler extends MessageUiHandler { }); }, () => { - ui.setMode(Mode.PARTY); + ui.setMode(UiMode.PARTY); this.showText("", 0); }, ); @@ -635,13 +635,13 @@ export default class PartyUiHandler extends MessageUiHandler { () => { this.blockInput = false; ui.setModeWithoutClear( - Mode.CONFIRM, + UiMode.CONFIRM, () => { - ui.setMode(Mode.PARTY); + ui.setMode(UiMode.PARTY); this.doRelease(this.cursor); }, () => { - ui.setMode(Mode.PARTY); + ui.setMode(UiMode.PARTY); this.showText("", 0); }, ); @@ -655,7 +655,7 @@ export default class PartyUiHandler extends MessageUiHandler { this.clearOptions(); ui.playSelect(); ui.setModeWithoutClear( - Mode.RENAME_POKEMON, + UiMode.RENAME_POKEMON, { buttonActions: [ (nickname: string) => { @@ -664,10 +664,10 @@ export default class PartyUiHandler extends MessageUiHandler { pokemon.updateInfo(); this.clearPartySlots(); this.populatePartySlots(); - ui.setMode(Mode.PARTY); + ui.setMode(UiMode.PARTY); }, () => { - ui.setMode(Mode.PARTY); + ui.setMode(UiMode.PARTY); }, ], }, @@ -788,7 +788,7 @@ export default class PartyUiHandler extends MessageUiHandler { selectCallback(6, PartyOption.CANCEL); ui.playSelect(); } else { - ui.setMode(Mode.COMMAND, this.fieldIndex); + ui.setMode(UiMode.COMMAND, this.fieldIndex); ui.playSelect(); } } diff --git a/src/ui/pokedex-info-overlay.ts b/src/ui/pokedex-info-overlay.ts index 43e9bbc1a65..2e889f6d2a9 100644 --- a/src/ui/pokedex-info-overlay.ts +++ b/src/ui/pokedex-info-overlay.ts @@ -1,7 +1,7 @@ import type { InfoToggle } from "../battle-scene"; import { TextStyle, addTextObject } from "./text"; import { addWindow } from "./ui-theme"; -import { fixedInt } from "#app/utils"; +import { fixedInt } from "#app/utils/common"; import i18next from "i18next"; import { globalScene } from "#app/global-scene"; diff --git a/src/ui/pokedex-mon-container.ts b/src/ui/pokedex-mon-container.ts index 410effda40d..da79320850d 100644 --- a/src/ui/pokedex-mon-container.ts +++ b/src/ui/pokedex-mon-container.ts @@ -1,6 +1,6 @@ import type { Variant } from "#app/sprites/variant"; import { globalScene } from "#app/global-scene"; -import { isNullOrUndefined } from "#app/utils"; +import { isNullOrUndefined } from "#app/utils/common"; import type PokemonSpecies from "../data/pokemon-species"; import { addTextObject, TextStyle } from "./text"; diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index 3f8959c6219..d0b85544494 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -4,7 +4,7 @@ import type { Variant } from "#app/sprites/variant"; import { getVariantTint, getVariantIcon } from "#app/sprites/variant"; import { argbFromRgba } from "@material/material-color-utilities"; import i18next from "i18next"; -import { starterColors } from "#app/battle-scene"; +import { starterColors } from "#app/global-vars/starter-colors"; import { allAbilities } from "#app/data/data-lists"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { GrowthRate, getGrowthRateColor } from "#app/data/exp"; @@ -26,7 +26,7 @@ import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler" import MessageUiHandler from "#app/ui/message-ui-handler"; import { StatsContainer } from "#app/ui/stats-container"; import { TextStyle, addBBCodeTextObject, addTextObject, getTextColor, getTextStyleOptions } from "#app/ui/text"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { addWindow } from "#app/ui/ui-theme"; import { Egg } from "#app/data/egg"; import Overrides from "#app/overrides"; @@ -52,9 +52,9 @@ import { padInt, rgbHexToRgba, toReadableString, -} from "#app/utils"; +} from "#app/utils/common"; import type { Nature } from "#enums/nature"; -import { getEnumKeys } from "#app/utils"; +import { getEnumKeys } from "#app/utils/common"; import { speciesTmMoves } from "#app/data/balance/tms"; import type { BiomeTierTod } from "#app/data/balance/biomes"; import { BiomePoolTier, catchableSpecies } from "#app/data/balance/biomes"; @@ -265,7 +265,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { private exitCallback; constructor() { - super(Mode.POKEDEX_PAGE); + super(UiMode.POKEDEX_PAGE); } setup() { @@ -1140,12 +1140,12 @@ export default class PokedexPageUiHandler extends MessageUiHandler { success = true; } else if (this.previousSpecies.length > 0) { this.blockInput = true; - ui.setModeWithoutClear(Mode.OPTION_SELECT).then(() => { + ui.setModeWithoutClear(UiMode.OPTION_SELECT).then(() => { const species = this.previousSpecies.pop(); const starterAttributes = this.previousStarterAttributes.pop(); this.moveInfoOverlay.clear(); this.clearText(); - ui.setModeForceTransition(Mode.POKEDEX_PAGE, species, starterAttributes); + ui.setModeForceTransition(UiMode.POKEDEX_PAGE, species, starterAttributes); success = true; }); this.blockInput = false; @@ -1173,7 +1173,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { } else { this.blockInput = true; - ui.setMode(Mode.POKEDEX_PAGE, "refresh").then(() => { + ui.setMode(UiMode.POKEDEX_PAGE, "refresh").then(() => { ui.showText(i18next.t("pokedexUiHandler:showBaseStats"), null, () => { this.baseStatsOverlay.show(this.baseStats, this.baseTotal); @@ -1193,11 +1193,11 @@ export default class PokedexPageUiHandler extends MessageUiHandler { } else { this.blockInput = true; - ui.setMode(Mode.POKEDEX_PAGE, "refresh").then(() => { + ui.setMode(UiMode.POKEDEX_PAGE, "refresh").then(() => { ui.showText(i18next.t("pokedexUiHandler:showLevelMoves"), null, () => { this.moveInfoOverlay.show(allMoves[this.levelMoves[0][1]]); - ui.setModeWithoutClear(Mode.OPTION_SELECT, { + ui.setModeWithoutClear(UiMode.OPTION_SELECT, { options: this.levelMoves .map(m => { const levelNumber = m[0] > 0 ? String(m[0]) : ""; @@ -1226,7 +1226,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { handler: () => { this.moveInfoOverlay.clear(); this.clearText(); - ui.setMode(Mode.POKEDEX_PAGE, "refresh"); + ui.setMode(UiMode.POKEDEX_PAGE, "refresh"); return true; }, onHover: () => { @@ -1251,7 +1251,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { } else { this.blockInput = true; - ui.setMode(Mode.POKEDEX_PAGE, "refresh").then(() => { + ui.setMode(UiMode.POKEDEX_PAGE, "refresh").then(() => { if (this.eggMoves.length === 0) { ui.showText(i18next.t("pokedexUiHandler:noEggMoves")); this.blockInput = false; @@ -1261,7 +1261,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { ui.showText(i18next.t("pokedexUiHandler:showEggMoves"), null, () => { this.moveInfoOverlay.show(allMoves[this.eggMoves[0]]); - ui.setModeWithoutClear(Mode.OPTION_SELECT, { + ui.setModeWithoutClear(UiMode.OPTION_SELECT, { options: [ { label: i18next.t("pokedexUiHandler:common"), @@ -1294,7 +1294,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { handler: () => { this.moveInfoOverlay.clear(); this.clearText(); - ui.setMode(Mode.POKEDEX_PAGE, "refresh"); + ui.setMode(UiMode.POKEDEX_PAGE, "refresh"); return true; }, onHover: () => this.moveInfoOverlay.clear(), @@ -1321,11 +1321,11 @@ export default class PokedexPageUiHandler extends MessageUiHandler { } else { this.blockInput = true; - ui.setMode(Mode.POKEDEX_PAGE, "refresh").then(() => { + ui.setMode(UiMode.POKEDEX_PAGE, "refresh").then(() => { ui.showText(i18next.t("pokedexUiHandler:showTmMoves"), null, () => { this.moveInfoOverlay.show(allMoves[this.tmMoves[0]]); - ui.setModeWithoutClear(Mode.OPTION_SELECT, { + ui.setModeWithoutClear(UiMode.OPTION_SELECT, { options: this.tmMoves .map(m => { const option: OptionSelectItem = { @@ -1344,7 +1344,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { handler: () => { this.moveInfoOverlay.clear(); this.clearText(); - ui.setMode(Mode.POKEDEX_PAGE, "refresh"); + ui.setMode(UiMode.POKEDEX_PAGE, "refresh"); return true; }, onHover: () => { @@ -1369,7 +1369,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { } else { this.blockInput = true; - ui.setMode(Mode.POKEDEX_PAGE, "refresh").then(() => { + ui.setMode(UiMode.POKEDEX_PAGE, "refresh").then(() => { ui.showText(i18next.t("pokedexUiHandler:showAbilities"), null, () => { this.infoOverlay.show(allAbilities[this.ability1].description); @@ -1431,13 +1431,13 @@ export default class PokedexPageUiHandler extends MessageUiHandler { handler: () => { this.infoOverlay.clear(); this.clearText(); - ui.setMode(Mode.POKEDEX_PAGE, "refresh"); + ui.setMode(UiMode.POKEDEX_PAGE, "refresh"); return true; }, onHover: () => this.infoOverlay.clear(), }); - ui.setModeWithoutClear(Mode.OPTION_SELECT, { + ui.setModeWithoutClear(UiMode.OPTION_SELECT, { options: options, supportHover: true, maxOptions: 8, @@ -1457,7 +1457,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { } else { this.blockInput = true; - ui.setMode(Mode.POKEDEX_PAGE, "refresh").then(() => { + ui.setMode(UiMode.POKEDEX_PAGE, "refresh").then(() => { if ((!this.biomes || this.biomes?.length === 0) && (!this.preBiomes || this.preBiomes?.length === 0)) { ui.showText(i18next.t("pokedexUiHandler:noBiomes")); ui.playError(); @@ -1510,13 +1510,13 @@ export default class PokedexPageUiHandler extends MessageUiHandler { handler: () => { this.moveInfoOverlay.clear(); this.clearText(); - ui.setMode(Mode.POKEDEX_PAGE, "refresh"); + ui.setMode(UiMode.POKEDEX_PAGE, "refresh"); return true; }, onHover: () => this.moveInfoOverlay.clear(), }); - ui.setModeWithoutClear(Mode.OPTION_SELECT, { + ui.setModeWithoutClear(UiMode.OPTION_SELECT, { options: options, supportHover: true, maxOptions: 8, @@ -1536,7 +1536,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { } else { this.blockInput = true; - ui.setMode(Mode.POKEDEX_PAGE, "refresh").then(() => { + ui.setMode(UiMode.POKEDEX_PAGE, "refresh").then(() => { const options: any[] = []; if ( @@ -1589,7 +1589,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.savedStarterAttributes.form = newFormIndex; this.moveInfoOverlay.clear(); this.clearText(); - ui.setMode(Mode.POKEDEX_PAGE, newSpecies, this.savedStarterAttributes); + ui.setMode(UiMode.POKEDEX_PAGE, newSpecies, this.savedStarterAttributes); return true; }, onHover: () => this.showText(conditionText), @@ -1631,7 +1631,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.savedStarterAttributes.form = newFormIndex; this.moveInfoOverlay.clear(); this.clearText(); - ui.setMode(Mode.POKEDEX_PAGE, evoSpecies, this.savedStarterAttributes); + ui.setMode(UiMode.POKEDEX_PAGE, evoSpecies, this.savedStarterAttributes); return true; }, onHover: () => this.showText(conditionText), @@ -1676,7 +1676,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.moveInfoOverlay.clear(); this.clearText(); ui.setMode( - Mode.POKEDEX_PAGE, + UiMode.POKEDEX_PAGE, newSpecies, this.savedStarterAttributes, this.filteredIndices, @@ -1694,13 +1694,13 @@ export default class PokedexPageUiHandler extends MessageUiHandler { handler: () => { this.moveInfoOverlay.clear(); this.clearText(); - ui.setMode(Mode.POKEDEX_PAGE, "refresh"); + ui.setMode(UiMode.POKEDEX_PAGE, "refresh"); return true; }, onHover: () => this.moveInfoOverlay.clear(), }); - ui.setModeWithoutClear(Mode.OPTION_SELECT, { + ui.setModeWithoutClear(UiMode.OPTION_SELECT, { options: options, supportHover: true, maxOptions: 8, @@ -1719,7 +1719,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { error = true; } else { this.toggleStatsMode(); - ui.setMode(Mode.POKEDEX_PAGE, "refresh"); + ui.setMode(UiMode.POKEDEX_PAGE, "refresh"); success = true; } break; @@ -1729,10 +1729,10 @@ export default class PokedexPageUiHandler extends MessageUiHandler { error = true; } else { this.blockInput = true; - ui.setMode(Mode.POKEDEX_PAGE, "refresh").then(() => { + ui.setMode(UiMode.POKEDEX_PAGE, "refresh").then(() => { ui.showText(i18next.t("pokedexUiHandler:showNature"), null, () => { const natures = globalScene.gameData.getNaturesForAttr(this.speciesStarterDexEntry?.natureAttr); - ui.setModeWithoutClear(Mode.OPTION_SELECT, { + ui.setModeWithoutClear(UiMode.OPTION_SELECT, { options: natures .map((n: Nature, _i: number) => { const option: OptionSelectItem = { @@ -1747,7 +1747,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { label: i18next.t("menu:cancel"), handler: () => { this.clearText(); - ui.setMode(Mode.POKEDEX_PAGE, "refresh"); + ui.setMode(UiMode.POKEDEX_PAGE, "refresh"); this.blockInput = false; return true; }, @@ -1897,7 +1897,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { }); this.setSpeciesDetails(this.species); globalScene.playSound("se/buy"); - ui.setMode(Mode.POKEDEX_PAGE, "refresh"); + ui.setMode(UiMode.POKEDEX_PAGE, "refresh"); return true; } @@ -1927,7 +1927,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { return globalScene.reset(true); } }); - ui.setMode(Mode.POKEDEX_PAGE, "refresh"); + ui.setMode(UiMode.POKEDEX_PAGE, "refresh"); globalScene.playSound("se/buy"); return true; @@ -1976,7 +1976,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { return globalScene.reset(true); } }); - ui.setMode(Mode.POKEDEX_PAGE, "refresh"); + ui.setMode(UiMode.POKEDEX_PAGE, "refresh"); globalScene.playSound("se/buy"); return true; @@ -1990,11 +1990,11 @@ export default class PokedexPageUiHandler extends MessageUiHandler { options.push({ label: i18next.t("menu:cancel"), handler: () => { - ui.setMode(Mode.POKEDEX_PAGE, "refresh"); + ui.setMode(UiMode.POKEDEX_PAGE, "refresh"); return true; }, }); - ui.setModeWithoutClear(Mode.OPTION_SELECT, { + ui.setModeWithoutClear(UiMode.OPTION_SELECT, { options: options, yOffset: 47, }); @@ -2032,7 +2032,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { return true; } this.blockInput = true; - ui.setModeWithoutClear(Mode.OPTION_SELECT).then(() => { + ui.setModeWithoutClear(UiMode.OPTION_SELECT).then(() => { // Always go back to first selection after scrolling around if (this.previousSpecies.length === 0) { this.previousSpecies.push(this.species); @@ -2057,7 +2057,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.moveInfoOverlay.clear(); this.clearText(); ui.setModeForceTransition( - Mode.POKEDEX_PAGE, + UiMode.POKEDEX_PAGE, newSpecies, this.savedStarterAttributes, this.filteredIndices, @@ -2071,7 +2071,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.blockInput = false; return true; } - ui.setModeWithoutClear(Mode.OPTION_SELECT).then(() => { + ui.setModeWithoutClear(UiMode.OPTION_SELECT).then(() => { // Always go back to first selection after scrolling around if (this.previousSpecies.length === 0) { this.previousSpecies.push(this.species); @@ -2096,7 +2096,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.moveInfoOverlay.clear(); this.clearText(); ui.setModeForceTransition( - Mode.POKEDEX_PAGE, + UiMode.POKEDEX_PAGE, newSpecies, this.savedStarterAttributes, this.filteredIndices, diff --git a/src/ui/pokedex-scan-ui-handler.ts b/src/ui/pokedex-scan-ui-handler.ts index 171040f6f12..45092d461a3 100644 --- a/src/ui/pokedex-scan-ui-handler.ts +++ b/src/ui/pokedex-scan-ui-handler.ts @@ -3,8 +3,8 @@ import { FormModalUiHandler } from "./form-modal-ui-handler"; import type { ModalConfig } from "./modal-ui-handler"; import type { PlayerPokemon } from "#app/field/pokemon"; import type { OptionSelectItem } from "./abstact-option-select-ui-handler"; -import { isNullOrUndefined } from "#app/utils"; -import { Mode } from "./ui"; +import { isNullOrUndefined } from "#app/utils/common"; +import { UiMode } from "#enums/ui-mode"; import { FilterTextRow } from "./filter-text"; import { allAbilities } from "#app/data/data-lists"; import { allMoves } from "#app/data/moves/move"; @@ -115,7 +115,7 @@ export default class PokedexScanUiHandler extends FormModalUiHandler { input.on("keydown", (inputObject, evt: KeyboardEvent) => { if ( ["escape", "space"].some(v => v === evt.key.toLowerCase() || v === evt.code.toLowerCase()) && - ui.getMode() === Mode.AUTO_COMPLETE + ui.getMode() === UiMode.AUTO_COMPLETE ) { // Delete autocomplete list and recovery focus. inputObject.on("blur", () => inputObject.node.focus(), { once: true }); @@ -125,7 +125,7 @@ export default class PokedexScanUiHandler extends FormModalUiHandler { input.on("textchange", (inputObject, evt: InputEvent) => { // Delete autocomplete. - if (ui.getMode() === Mode.AUTO_COMPLETE) { + if (ui.getMode() === UiMode.AUTO_COMPLETE) { ui.revertMode(); } @@ -154,7 +154,7 @@ export default class PokedexScanUiHandler extends FormModalUiHandler { maxOptions: 5, modalContainer: this.modalContainer, }; - ui.setOverlayMode(Mode.AUTO_COMPLETE, modalOpts); + ui.setOverlayMode(UiMode.AUTO_COMPLETE, modalOpts); } }); @@ -168,7 +168,7 @@ export default class PokedexScanUiHandler extends FormModalUiHandler { this.inputs[0].text = args[1]; } this.submitAction = _ => { - if (ui.getMode() === Mode.POKEDEX_SCAN) { + if (ui.getMode() === UiMode.POKEDEX_SCAN) { this.sanitizeInputs(); const outputName = this.reducedKeys.includes(this.inputs[0].text) ? this.inputs[0].text : ""; const sanitizedName = btoa(unescape(encodeURIComponent(outputName))); diff --git a/src/ui/pokedex-ui-handler.ts b/src/ui/pokedex-ui-handler.ts index 5fd3ca3e379..e9726031bf5 100644 --- a/src/ui/pokedex-ui-handler.ts +++ b/src/ui/pokedex-ui-handler.ts @@ -2,7 +2,7 @@ import type { Variant } from "#app/sprites/variant"; import { getVariantTint, getVariantIcon } from "#app/sprites/variant"; import { argbFromRgba } from "@material/material-color-utilities"; import i18next from "i18next"; -import { starterColors } from "#app/battle-scene"; +import { starterColors } from "#app/global-vars/starter-colors"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { pokemonFormLevelMoves, pokemonSpeciesLevelMoves } from "#app/data/balance/pokemon-level-moves"; import type { PokemonForm } from "#app/data/pokemon-species"; @@ -16,7 +16,7 @@ import { AbilityAttr, DexAttr, loadStarterPreferences } from "#app/system/game-d import MessageUiHandler from "#app/ui/message-ui-handler"; import PokemonIconAnimHandler, { PokemonIconAnimMode } from "#app/ui/pokemon-icon-anim-handler"; import { TextStyle, addTextObject } from "#app/ui/text"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { SettingKeyboard } from "#app/system/settings/settings-keyboard"; import { Passive as PassiveAttr } from "#enums/passive"; import type { Species } from "#enums/species"; @@ -31,7 +31,7 @@ import { getValueReductionCandyCounts, getSameSpeciesEggCandyCounts, } from "#app/data/balance/starters"; -import { BooleanHolder, fixedInt, getLocalizedSpriteKey, padInt, randIntRange, rgbHexToRgba } from "#app/utils"; +import { BooleanHolder, fixedInt, getLocalizedSpriteKey, padInt, randIntRange, rgbHexToRgba } from "#app/utils/common"; import type { Nature } from "#enums/nature"; import { addWindow } from "./ui-theme"; import type { OptionSelectConfig } from "./abstact-option-select-ui-handler"; @@ -231,7 +231,7 @@ export default class PokedexUiHandler extends MessageUiHandler { private filteredIndices: Species[]; constructor() { - super(Mode.POKEDEX); + super(UiMode.POKEDEX); } setup() { @@ -1133,7 +1133,7 @@ export default class PokedexUiHandler extends MessageUiHandler { } else if (this.showingTray) { if (button === Button.ACTION) { const formIndex = this.trayForms[this.trayCursor].formIndex; - ui.setOverlayMode(Mode.POKEDEX_PAGE, this.lastSpecies, { form: formIndex }, this.filteredIndices); + ui.setOverlayMode(UiMode.POKEDEX_PAGE, this.lastSpecies, { form: formIndex }, this.filteredIndices); success = true; } else { const numberOfForms = this.trayContainers.length; @@ -1182,7 +1182,7 @@ export default class PokedexUiHandler extends MessageUiHandler { } } else { if (button === Button.ACTION) { - ui.setOverlayMode(Mode.POKEDEX_PAGE, this.lastSpecies, null, this.filteredIndices); + ui.setOverlayMode(UiMode.POKEDEX_PAGE, this.lastSpecies, null, this.filteredIndices); success = true; } else { switch (button) { @@ -2268,15 +2268,15 @@ export default class PokedexUiHandler extends MessageUiHandler { const ui = this.getUi(); const cancel = () => { - ui.setMode(Mode.POKEDEX, "refresh"); + ui.setMode(UiMode.POKEDEX, "refresh"); this.clearText(); this.blockInput = false; }; ui.showText(i18next.t("pokedexUiHandler:confirmExit"), null, () => { ui.setModeWithoutClear( - Mode.CONFIRM, + UiMode.CONFIRM, () => { - ui.setMode(Mode.POKEDEX, "refresh"); + ui.setMode(UiMode.POKEDEX, "refresh"); this.clearText(); this.clear(); ui.revertMode(); diff --git a/src/ui/pokemon-hatch-info-container.ts b/src/ui/pokemon-hatch-info-container.ts index 692f0f1d374..f3095cb48bf 100644 --- a/src/ui/pokemon-hatch-info-container.ts +++ b/src/ui/pokemon-hatch-info-container.ts @@ -1,13 +1,13 @@ import PokemonInfoContainer from "#app/ui/pokemon-info-container"; import { Gender } from "#app/data/gender"; import { PokemonType } from "#enums/pokemon-type"; -import { rgbHexToRgba, padInt } from "#app/utils"; +import { rgbHexToRgba, padInt } from "#app/utils/common"; import { TextStyle, addTextObject } from "#app/ui/text"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { allMoves } from "#app/data/moves/move"; import { Species } from "#enums/species"; import { getEggTierForSpecies } from "#app/data/egg"; -import { starterColors } from "#app/battle-scene"; +import { starterColors } from "#app/global-vars/starter-colors"; import { globalScene } from "#app/global-scene"; import { argbFromRgba } from "@material/material-color-utilities"; import type { EggHatchData } from "#app/data/egg-hatch-data"; diff --git a/src/ui/pokemon-icon-anim-handler.ts b/src/ui/pokemon-icon-anim-handler.ts index b6944c0fd84..253ccbe3623 100644 --- a/src/ui/pokemon-icon-anim-handler.ts +++ b/src/ui/pokemon-icon-anim-handler.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import { fixedInt } from "#app/utils"; +import { fixedInt } from "#app/utils/common"; export enum PokemonIconAnimMode { NONE, diff --git a/src/ui/pokemon-info-container.ts b/src/ui/pokemon-info-container.ts index 0ccece46ab9..18b5d2384ef 100644 --- a/src/ui/pokemon-info-container.ts +++ b/src/ui/pokemon-info-container.ts @@ -8,7 +8,7 @@ import type Pokemon from "../field/pokemon"; import i18next from "i18next"; import type { DexEntry, StarterDataEntry } from "../system/game-data"; import { DexAttr } from "../system/game-data"; -import { fixedInt } from "#app/utils"; +import { fixedInt } from "#app/utils/common"; import ConfirmUiHandler from "./confirm-ui-handler"; import { StatsContainer } from "./stats-container"; import { TextStyle, addBBCodeTextObject, addTextObject, getTextColor } from "./text"; diff --git a/src/ui/registration-form-ui-handler.ts b/src/ui/registration-form-ui-handler.ts index 74669bc1f44..bb10efc5869 100644 --- a/src/ui/registration-form-ui-handler.ts +++ b/src/ui/registration-form-ui-handler.ts @@ -1,7 +1,7 @@ import type { InputFieldConfig } from "./form-modal-ui-handler"; import { FormModalUiHandler } from "./form-modal-ui-handler"; import type { ModalConfig } from "./modal-ui-handler"; -import { Mode } from "./ui"; +import { UiMode } from "#enums/ui-mode"; import { TextStyle, addTextObject } from "./text"; import i18next from "i18next"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; @@ -101,9 +101,9 @@ export default class RegistrationFormUiHandler extends FormModalUiHandler { // Prevent overlapping overrides on action modification this.submitAction = originalRegistrationAction; this.sanitizeInputs(); - globalScene.ui.setMode(Mode.LOADING, { buttonActions: [] }); + globalScene.ui.setMode(UiMode.LOADING, { buttonActions: [] }); const onFail = error => { - globalScene.ui.setMode(Mode.REGISTRATION_FORM, Object.assign(config, { errorMessage: error?.trim() })); + globalScene.ui.setMode(UiMode.REGISTRATION_FORM, Object.assign(config, { errorMessage: error?.trim() })); globalScene.ui.playError(); const errorMessageFontSize = languageSettings[i18next.resolvedLanguage!]?.errorMessageFontSize; if (errorMessageFontSize) { diff --git a/src/ui/run-history-ui-handler.ts b/src/ui/run-history-ui-handler.ts index 16aad7b8634..92c5a2fde07 100644 --- a/src/ui/run-history-ui-handler.ts +++ b/src/ui/run-history-ui-handler.ts @@ -1,9 +1,9 @@ import { globalScene } from "#app/global-scene"; import { GameModes } from "../game-mode"; import { TextStyle, addTextObject } from "./text"; -import { Mode } from "./ui"; +import { UiMode } from "#enums/ui-mode"; import { addWindow } from "./ui-theme"; -import { fixedInt, formatLargeNumber } from "#app/utils"; +import { fixedInt, formatLargeNumber } from "#app/utils/common"; import type PokemonData from "../system/pokemon-data"; import MessageUiHandler from "./message-ui-handler"; import i18next from "i18next"; @@ -40,7 +40,7 @@ export default class RunHistoryUiHandler extends MessageUiHandler { private runContainerInitialY: number; constructor() { - super(Mode.RUN_HISTORY); + super(UiMode.RUN_HISTORY); } override setup() { @@ -110,7 +110,7 @@ export default class RunHistoryUiHandler extends MessageUiHandler { if (button === Button.ACTION) { const cursor = this.cursor + this.scrollCursor; if (this.runs[cursor]) { - globalScene.ui.setOverlayMode(Mode.RUN_INFO, this.runs[cursor].entryData, RunDisplayMode.RUN_HISTORY, true); + globalScene.ui.setOverlayMode(UiMode.RUN_INFO, this.runs[cursor].entryData, RunDisplayMode.RUN_HISTORY, true); } else { return false; } diff --git a/src/ui/run-info-ui-handler.ts b/src/ui/run-info-ui-handler.ts index 60667035147..8487533f465 100644 --- a/src/ui/run-info-ui-handler.ts +++ b/src/ui/run-info-ui-handler.ts @@ -2,10 +2,10 @@ import { GameModes } from "../game-mode"; import UiHandler from "./ui-handler"; import type { SessionSaveData } from "../system/game-data"; import { TextStyle, addTextObject, addBBCodeTextObject, getTextColor } from "./text"; -import { Mode } from "./ui"; +import { UiMode } from "#enums/ui-mode"; import { addWindow } from "./ui-theme"; import { getPokeballAtlasKey } from "#app/data/pokeball"; -import { formatLargeNumber, getPlayTimeString, formatMoney, formatFancyLargeNumber } from "#app/utils"; +import { formatLargeNumber, getPlayTimeString, formatMoney, formatFancyLargeNumber } from "#app/utils/common"; import type PokemonData from "../system/pokemon-data"; import i18next from "i18next"; import { Button } from "../enums/buttons"; @@ -69,7 +69,7 @@ export default class RunInfoUiHandler extends UiHandler { private modifiersModule: any; constructor() { - super(Mode.RUN_INFO); + super(UiMode.RUN_INFO); } override async setup() { diff --git a/src/ui/save-slot-select-ui-handler.ts b/src/ui/save-slot-select-ui-handler.ts index 0c16e41bbef..7b4d46203c9 100644 --- a/src/ui/save-slot-select-ui-handler.ts +++ b/src/ui/save-slot-select-ui-handler.ts @@ -6,10 +6,10 @@ import { GameMode } from "../game-mode"; import * as Modifier from "#app/modifier/modifier"; import type { SessionSaveData } from "../system/game-data"; import type PokemonData from "../system/pokemon-data"; -import { isNullOrUndefined, fixedInt, getPlayTimeString, formatLargeNumber } from "#app/utils"; +import { isNullOrUndefined, fixedInt, getPlayTimeString, formatLargeNumber } from "#app/utils/common"; import MessageUiHandler from "./message-ui-handler"; import { TextStyle, addTextObject } from "./text"; -import { Mode } from "./ui"; +import { UiMode } from "#enums/ui-mode"; import { addWindow } from "./ui-theme"; import { RunDisplayMode } from "#app/ui/run-info-ui-handler"; @@ -40,7 +40,7 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { private sessionSlotsContainerInitialY: number; constructor() { - super(Mode.SAVE_SLOT); + super(UiMode.SAVE_SLOT); } setup() { @@ -122,13 +122,13 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { this.saveSlotSelectCallback = null; ui.revertMode(); ui.showText("", 0); - ui.setMode(Mode.MESSAGE); + ui.setMode(UiMode.MESSAGE); originalCallback?.(cursor); }; if (this.sessionSlots[cursor].hasData) { ui.showText(i18next.t("saveSlotSelectUiHandler:overwriteData"), null, () => { ui.setOverlayMode( - Mode.CONFIRM, + UiMode.CONFIRM, () => { globalScene.gameData.deleteSession(cursor).then(response => { if (response === false) { @@ -198,7 +198,7 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { case Button.RIGHT: if (this.sessionSlots[cursorPosition].hasData && this.sessionSlots[cursorPosition].saveData) { globalScene.ui.setOverlayMode( - Mode.RUN_INFO, + UiMode.RUN_INFO, this.sessionSlots[cursorPosition].saveData, RunDisplayMode.SESSION_PREVIEW, ); diff --git a/src/ui/saving-icon-handler.ts b/src/ui/saving-icon-handler.ts index 3db84f128a1..3b7db549a4a 100644 --- a/src/ui/saving-icon-handler.ts +++ b/src/ui/saving-icon-handler.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import { fixedInt } from "#app/utils"; +import { fixedInt } from "#app/utils/common"; export default class SavingIconHandler extends Phaser.GameObjects.Container { private icon: Phaser.GameObjects.Sprite; diff --git a/src/ui/session-reload-modal-ui-handler.ts b/src/ui/session-reload-modal-ui-handler.ts index d3b88da9e63..f866783afe8 100644 --- a/src/ui/session-reload-modal-ui-handler.ts +++ b/src/ui/session-reload-modal-ui-handler.ts @@ -1,10 +1,10 @@ import type { ModalConfig } from "./modal-ui-handler"; import { ModalUiHandler } from "./modal-ui-handler"; import { addTextObject, TextStyle } from "./text"; -import type { Mode } from "./ui"; +import type { UiMode } from "#enums/ui-mode"; export default class SessionReloadModalUiHandler extends ModalUiHandler { - constructor(mode: Mode | null = null) { + constructor(mode: UiMode | null = null) { super(mode); } diff --git a/src/ui/settings/abstract-binding-ui-handler.ts b/src/ui/settings/abstract-binding-ui-handler.ts index 62f78da89f5..a4707418b7c 100644 --- a/src/ui/settings/abstract-binding-ui-handler.ts +++ b/src/ui/settings/abstract-binding-ui-handler.ts @@ -1,5 +1,5 @@ import UiHandler from "../ui-handler"; -import type { Mode } from "../ui"; +import type { UiMode } from "#enums/ui-mode"; import { addWindow } from "../ui-theme"; import { addTextObject, TextStyle } from "../text"; import { Button } from "#enums/buttons"; @@ -51,7 +51,7 @@ export default abstract class AbstractBindingUiHandler extends UiHandler { * * @param mode - The UI mode. */ - constructor(mode: Mode | null = null) { + constructor(mode: UiMode | null = null) { super(mode); } diff --git a/src/ui/settings/abstract-control-settings-ui-handler.ts b/src/ui/settings/abstract-control-settings-ui-handler.ts index 2c634e2c5bf..495a0f68540 100644 --- a/src/ui/settings/abstract-control-settings-ui-handler.ts +++ b/src/ui/settings/abstract-control-settings-ui-handler.ts @@ -1,5 +1,5 @@ import UiHandler from "#app/ui/ui-handler"; -import type { Mode } from "#app/ui/ui"; +import type { UiMode } from "#enums/ui-mode"; import type { InterfaceConfig } from "#app/inputs-controller"; import { addWindow } from "#app/ui/ui-theme"; import { addTextObject, TextStyle } from "#app/ui/text"; @@ -74,7 +74,7 @@ export default abstract class AbstractControlSettingsUiHandler extends UiHandler * * @param mode - The UI mode. */ - constructor(mode: Mode | null = null) { + constructor(mode: UiMode | null = null) { super(mode); this.rowsToDisplay = 8; } diff --git a/src/ui/settings/abstract-settings-ui-handler.ts b/src/ui/settings/abstract-settings-ui-handler.ts index 0c14b91251e..27ca95c25ac 100644 --- a/src/ui/settings/abstract-settings-ui-handler.ts +++ b/src/ui/settings/abstract-settings-ui-handler.ts @@ -1,5 +1,5 @@ import { TextStyle, addTextObject } from "#app/ui/text"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import MessageUiHandler from "#app/ui/message-ui-handler"; import { addWindow } from "#app/ui/ui-theme"; import { ScrollBar } from "#app/ui/scroll-bar"; @@ -42,7 +42,7 @@ export default class AbstractSettingsUiHandler extends MessageUiHandler { protected settings: Array; protected localStorageKey: string; - constructor(type: SettingType, mode: Mode | null = null) { + constructor(type: SettingType, mode: UiMode | null = null) { super(mode); this.settings = Setting.filter(s => s.type === type && !s?.isHidden?.()); this.reloadRequired = false; @@ -425,7 +425,7 @@ export default class AbstractSettingsUiHandler extends MessageUiHandler { const confirmationMessage = setting.options[cursor].confirmationMessage ?? i18next.t("settings:defaultConfirmMessage"); globalScene.ui.showText(confirmationMessage, null, () => { - globalScene.ui.setOverlayMode(Mode.CONFIRM, confirmUpdateSetting, cancelUpdateSetting, null, null, 1, 750); + globalScene.ui.setOverlayMode(UiMode.CONFIRM, confirmUpdateSetting, cancelUpdateSetting, null, null, 1, 750); }); } else { saveSetting(); diff --git a/src/ui/settings/gamepad-binding-ui-handler.ts b/src/ui/settings/gamepad-binding-ui-handler.ts index 62bc2db7825..0f226ddcafa 100644 --- a/src/ui/settings/gamepad-binding-ui-handler.ts +++ b/src/ui/settings/gamepad-binding-ui-handler.ts @@ -1,12 +1,12 @@ import AbstractBindingUiHandler from "./abstract-binding-ui-handler"; -import type { Mode } from "../ui"; +import type { UiMode } from "#enums/ui-mode"; import { Device } from "#enums/devices"; import { getIconWithSettingName, getKeyWithKeycode } from "#app/configs/inputs/configHandler"; import { addTextObject, TextStyle } from "#app/ui/text"; import { globalScene } from "#app/global-scene"; export default class GamepadBindingUiHandler extends AbstractBindingUiHandler { - constructor(mode: Mode | null = null) { + constructor(mode: UiMode | null = null) { super(mode); globalScene.input.gamepad?.on("down", this.gamepadButtonDown, this); } diff --git a/src/ui/settings/keyboard-binding-ui-handler.ts b/src/ui/settings/keyboard-binding-ui-handler.ts index 8735faeaaab..c05a31ca91e 100644 --- a/src/ui/settings/keyboard-binding-ui-handler.ts +++ b/src/ui/settings/keyboard-binding-ui-handler.ts @@ -1,12 +1,12 @@ import AbstractBindingUiHandler from "./abstract-binding-ui-handler"; -import type { Mode } from "../ui"; +import type { UiMode } from "#enums/ui-mode"; import { getKeyWithKeycode } from "#app/configs/inputs/configHandler"; import { Device } from "#enums/devices"; import { addTextObject, TextStyle } from "#app/ui/text"; import { globalScene } from "#app/global-scene"; export default class KeyboardBindingUiHandler extends AbstractBindingUiHandler { - constructor(mode: Mode | null = null) { + constructor(mode: UiMode | null = null) { super(mode); // Listen to gamepad button down events to initiate binding. globalScene.input.keyboard?.on("keydown", this.onKeyDown, this); diff --git a/src/ui/settings/navigationMenu.ts b/src/ui/settings/navigationMenu.ts index 1d2d71e1e20..ad3d4ccf0b5 100644 --- a/src/ui/settings/navigationMenu.ts +++ b/src/ui/settings/navigationMenu.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import type { InputsIcons } from "#app/ui/settings/abstract-control-settings-ui-handler"; import { addTextObject, setTextStyle, TextStyle } from "#app/ui/text"; import { addWindow } from "#app/ui/ui-theme"; @@ -14,8 +14,8 @@ const RIGHT = "RIGHT"; */ export class NavigationManager { private static instance: NavigationManager; - public modes: Mode[]; - public selectedMode: Mode = Mode.SETTINGS; + public modes: UiMode[]; + public selectedMode: UiMode = UiMode.SETTINGS; public navigationMenus: NavigationMenu[] = new Array(); public labels: string[]; @@ -27,11 +27,11 @@ export class NavigationManager { */ constructor() { this.modes = [ - Mode.SETTINGS, - Mode.SETTINGS_DISPLAY, - Mode.SETTINGS_AUDIO, - Mode.SETTINGS_GAMEPAD, - Mode.SETTINGS_KEYBOARD, + UiMode.SETTINGS, + UiMode.SETTINGS_DISPLAY, + UiMode.SETTINGS_AUDIO, + UiMode.SETTINGS_GAMEPAD, + UiMode.SETTINGS_KEYBOARD, ]; this.labels = [ i18next.t("settings:general"), @@ -43,7 +43,7 @@ export class NavigationManager { } public reset() { - this.selectedMode = Mode.SETTINGS; + this.selectedMode = UiMode.SETTINGS; this.updateNavigationMenus(); } diff --git a/src/ui/settings/option-select-ui-handler.ts b/src/ui/settings/option-select-ui-handler.ts index b3d1735dc19..af9760814ac 100644 --- a/src/ui/settings/option-select-ui-handler.ts +++ b/src/ui/settings/option-select-ui-handler.ts @@ -1,8 +1,8 @@ import AbstractOptionSelectUiHandler from "../abstact-option-select-ui-handler"; -import { Mode } from "../ui"; +import { UiMode } from "#enums/ui-mode"; export default class OptionSelectUiHandler extends AbstractOptionSelectUiHandler { - constructor(mode: Mode = Mode.OPTION_SELECT) { + constructor(mode: UiMode = UiMode.OPTION_SELECT) { super(mode); } diff --git a/src/ui/settings/settings-audio-ui-handler.ts b/src/ui/settings/settings-audio-ui-handler.ts index f8cb4da4ba2..019d66d7428 100644 --- a/src/ui/settings/settings-audio-ui-handler.ts +++ b/src/ui/settings/settings-audio-ui-handler.ts @@ -1,4 +1,4 @@ -import type { Mode } from "../ui"; +import type { UiMode } from "#enums/ui-mode"; import AbstractSettingsUiHandler from "./abstract-settings-ui-handler"; import { SettingType } from "#app/system/settings/settings"; ("#app/inputs-controller"); @@ -9,7 +9,7 @@ export default class SettingsAudioUiHandler extends AbstractSettingsUiHandler { * * @param mode - The UI mode, optional. */ - constructor(mode: Mode | null = null) { + constructor(mode: UiMode | null = null) { super(SettingType.AUDIO, mode); this.title = "Audio"; this.localStorageKey = "settings"; diff --git a/src/ui/settings/settings-display-ui-handler.ts b/src/ui/settings/settings-display-ui-handler.ts index 985aa9adca2..4878bae72cb 100644 --- a/src/ui/settings/settings-display-ui-handler.ts +++ b/src/ui/settings/settings-display-ui-handler.ts @@ -1,4 +1,4 @@ -import type { Mode } from "../ui"; +import type { UiMode } from "#enums/ui-mode"; import AbstractSettingsUiHandler from "./abstract-settings-ui-handler"; import { SettingKeys, SettingType } from "#app/system/settings/settings"; ("#app/inputs-controller"); @@ -9,7 +9,7 @@ export default class SettingsDisplayUiHandler extends AbstractSettingsUiHandler * * @param mode - The UI mode, optional. */ - constructor(mode: Mode | null = null) { + constructor(mode: UiMode | null = null) { super(SettingType.DISPLAY, mode); this.title = "Display"; diff --git a/src/ui/settings/settings-gamepad-ui-handler.ts b/src/ui/settings/settings-gamepad-ui-handler.ts index 0b3a7241ff2..7d269deab14 100644 --- a/src/ui/settings/settings-gamepad-ui-handler.ts +++ b/src/ui/settings/settings-gamepad-ui-handler.ts @@ -1,5 +1,5 @@ import { addTextObject, TextStyle } from "../text"; -import type { Mode } from "../ui"; +import type { UiMode } from "#enums/ui-mode"; import { setSettingGamepad, SettingGamepad, @@ -13,7 +13,7 @@ import pad_unlicensedSNES from "#app/configs/inputs/pad_unlicensedSNES"; import type { InterfaceConfig } from "#app/inputs-controller"; import AbstractControlSettingsUiHandler from "#app/ui/settings/abstract-control-settings-ui-handler"; import { Device } from "#enums/devices"; -import { truncateString } from "#app/utils"; +import { truncateString } from "#app/utils/common"; import i18next from "i18next"; import { globalScene } from "#app/global-scene"; @@ -29,7 +29,7 @@ export default class SettingsGamepadUiHandler extends AbstractControlSettingsUiH * * @param mode - The UI mode, optional. */ - constructor(mode: Mode | null = null) { + constructor(mode: UiMode | null = null) { super(mode); this.titleSelected = "Gamepad"; this.setting = SettingGamepad; diff --git a/src/ui/settings/settings-keyboard-ui-handler.ts b/src/ui/settings/settings-keyboard-ui-handler.ts index a7837c8961e..c334ee8f1fc 100644 --- a/src/ui/settings/settings-keyboard-ui-handler.ts +++ b/src/ui/settings/settings-keyboard-ui-handler.ts @@ -1,4 +1,4 @@ -import { Mode } from "../ui"; +import { UiMode } from "#enums/ui-mode"; import cfg_keyboard_qwerty from "#app/configs/inputs/cfg_keyboard_qwerty"; import { setSettingKeyboard, @@ -7,7 +7,7 @@ import { settingKeyboardDefaults, settingKeyboardOptions, } from "#app/system/settings/settings-keyboard"; -import { reverseValueToKeySetting, truncateString } from "#app/utils"; +import { reverseValueToKeySetting, truncateString } from "#app/utils/common"; import AbstractControlSettingsUiHandler from "#app/ui/settings/abstract-control-settings-ui-handler"; import type { InterfaceConfig } from "#app/inputs-controller"; import { addTextObject, TextStyle } from "#app/ui/text"; @@ -28,7 +28,7 @@ export default class SettingsKeyboardUiHandler extends AbstractControlSettingsUi * * @param mode - The UI mode, optional. */ - constructor(mode: Mode | null = null) { + constructor(mode: UiMode | null = null) { super(mode); this.titleSelected = "Keyboard"; this.setting = SettingKeyboard; @@ -84,7 +84,7 @@ export default class SettingsKeyboardUiHandler extends AbstractControlSettingsUi * Handle the home key press event. */ onHomeDown(): void { - if (![Mode.SETTINGS_KEYBOARD, Mode.SETTINGS_GAMEPAD].includes(globalScene.ui.getMode())) { + if (![UiMode.SETTINGS_KEYBOARD, UiMode.SETTINGS_GAMEPAD].includes(globalScene.ui.getMode())) { return; } globalScene.gameData.resetMappingToFactory(); @@ -95,7 +95,7 @@ export default class SettingsKeyboardUiHandler extends AbstractControlSettingsUi * Handle the delete key press event. */ onDeleteDown(): void { - if (globalScene.ui.getMode() !== Mode.SETTINGS_KEYBOARD) { + if (globalScene.ui.getMode() !== UiMode.SETTINGS_KEYBOARD) { return; } const cursor = this.cursor + this.scrollCursor; // Calculate the absolute cursor position. diff --git a/src/ui/settings/settings-ui-handler.ts b/src/ui/settings/settings-ui-handler.ts index 22ea76d798b..8d61044ff91 100644 --- a/src/ui/settings/settings-ui-handler.ts +++ b/src/ui/settings/settings-ui-handler.ts @@ -1,5 +1,5 @@ import { SettingType } from "../../system/settings/settings"; -import type { Mode } from "../ui"; +import type { UiMode } from "#enums/ui-mode"; import AbstractSettingsUiHandler from "./abstract-settings-ui-handler"; export default class SettingsUiHandler extends AbstractSettingsUiHandler { @@ -8,7 +8,7 @@ export default class SettingsUiHandler extends AbstractSettingsUiHandler { * * @param mode - The UI mode, optional. */ - constructor(mode: Mode | null = null) { + constructor(mode: UiMode | null = null) { super(SettingType.GENERAL, mode); this.title = "General"; this.localStorageKey = "settings"; diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 9b0009d666e..1902c691715 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -6,7 +6,7 @@ import { getVariantTint, getVariantIcon } from "#app/sprites/variant"; import { argbFromRgba } from "@material/material-color-utilities"; import i18next from "i18next"; import type BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; -import { starterColors } from "#app/battle-scene"; +import { starterColors } from "#app/global-vars/starter-colors"; import { globalScene } from "#app/global-scene"; import type { Ability } from "#app/data/abilities/ability-class"; import { allAbilities } from "#app/data/data-lists"; @@ -37,7 +37,7 @@ import MessageUiHandler from "#app/ui/message-ui-handler"; import PokemonIconAnimHandler, { PokemonIconAnimMode } from "#app/ui/pokemon-icon-anim-handler"; import { StatsContainer } from "#app/ui/stats-container"; import { TextStyle, addBBCodeTextObject, addTextObject } from "#app/ui/text"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { addWindow } from "#app/ui/ui-theme"; import { Egg } from "#app/data/egg"; import Overrides from "#app/overrides"; @@ -74,7 +74,7 @@ import { randIntRange, rgbHexToRgba, toReadableString, -} from "#app/utils"; +} from "#app/utils/common"; import type { Nature } from "#enums/nature"; import { PLAYER_PARTY_MAX_SIZE } from "#app/constants"; import { achvs } from "#app/system/achv"; @@ -375,7 +375,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { protected blockInput = false; constructor() { - super(Mode.STARTER_SELECT); + super(UiMode.STARTER_SELECT); } setup() { @@ -1888,7 +1888,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { { label: i18next.t("starterSelectUiHandler:addToParty"), handler: () => { - ui.setMode(Mode.STARTER_SELECT); + ui.setMode(UiMode.STARTER_SELECT); const isOverValueLimit = this.tryUpdateValue( globalScene.gameData.getSpeciesStarterValue(this.lastSpecies.speciesId), true, @@ -1921,7 +1921,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { label: i18next.t("starterSelectUiHandler:removeFromParty"), handler: () => { this.popStarter(removeIndex); - ui.setMode(Mode.STARTER_SELECT); + ui.setMode(UiMode.STARTER_SELECT); return true; }, }, @@ -1934,7 +1934,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { label: i18next.t("starterSelectUiHandler:toggleIVs"), handler: () => { this.toggleStatsMode(); - ui.setMode(Mode.STARTER_SELECT); + ui.setMode(UiMode.STARTER_SELECT); return true; }, }, @@ -1944,18 +1944,18 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const showSwapOptions = (moveset: StarterMoveset) => { this.blockInput = true; - ui.setMode(Mode.STARTER_SELECT).then(() => { + ui.setMode(UiMode.STARTER_SELECT).then(() => { ui.showText(i18next.t("starterSelectUiHandler:selectMoveSwapOut"), null, () => { this.moveInfoOverlay.show(allMoves[moveset[0]]); - ui.setModeWithoutClear(Mode.OPTION_SELECT, { + ui.setModeWithoutClear(UiMode.OPTION_SELECT, { options: moveset .map((m: Moves, i: number) => { const option: OptionSelectItem = { label: allMoves[m].name, handler: () => { this.blockInput = true; - ui.setMode(Mode.STARTER_SELECT).then(() => { + ui.setMode(UiMode.STARTER_SELECT).then(() => { ui.showText( `${i18next.t("starterSelectUiHandler:selectMoveSwapWith")} ${allMoves[m].name}.`, null, @@ -1963,7 +1963,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const possibleMoves = this.speciesStarterMoves.filter((sm: Moves) => sm !== m); this.moveInfoOverlay.show(allMoves[possibleMoves[0]]); - ui.setModeWithoutClear(Mode.OPTION_SELECT, { + ui.setModeWithoutClear(UiMode.OPTION_SELECT, { options: possibleMoves .map(sm => { // make an option for each available starter move @@ -2011,7 +2011,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { handler: () => { this.moveInfoOverlay.clear(); this.clearText(); - ui.setMode(Mode.STARTER_SELECT); + ui.setMode(UiMode.STARTER_SELECT); return true; }, onHover: () => { @@ -2039,10 +2039,10 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const showNatureOptions = () => { this.blockInput = true; - ui.setMode(Mode.STARTER_SELECT).then(() => { + ui.setMode(UiMode.STARTER_SELECT).then(() => { ui.showText(i18next.t("starterSelectUiHandler:selectNature"), null, () => { const natures = globalScene.gameData.getNaturesForAttr(this.speciesStarterDexEntry?.natureAttr); - ui.setModeWithoutClear(Mode.OPTION_SELECT, { + ui.setModeWithoutClear(UiMode.OPTION_SELECT, { options: natures .map((n: Nature, _i: number) => { const option: OptionSelectItem = { @@ -2054,7 +2054,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } starterAttributes.nature = n; this.clearText(); - ui.setMode(Mode.STARTER_SELECT); + ui.setMode(UiMode.STARTER_SELECT); // set nature for starter this.setSpeciesDetails(this.lastSpecies, { natureIndex: n, @@ -2069,7 +2069,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { label: i18next.t("menu:cancel"), handler: () => { this.clearText(); - ui.setMode(Mode.STARTER_SELECT); + ui.setMode(UiMode.STARTER_SELECT); this.blockInput = false; return true; }, @@ -2097,7 +2097,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { label: i18next.t("starterSelectUiHandler:enablePassive"), handler: () => { starterData.passiveAttr |= PassiveAttr.ENABLED; - ui.setMode(Mode.STARTER_SELECT); + ui.setMode(UiMode.STARTER_SELECT); this.setSpeciesDetails(this.lastSpecies); return true; }, @@ -2107,7 +2107,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { label: i18next.t("starterSelectUiHandler:disablePassive"), handler: () => { starterData.passiveAttr ^= PassiveAttr.ENABLED; - ui.setMode(Mode.STARTER_SELECT); + ui.setMode(UiMode.STARTER_SELECT); this.setSpeciesDetails(this.lastSpecies); return true; }, @@ -2125,7 +2125,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { if (starterContainer) { starterContainer.favoriteIcon.setVisible(starterAttributes.favorite); } - ui.setMode(Mode.STARTER_SELECT); + ui.setMode(UiMode.STARTER_SELECT); return true; }, }); @@ -2138,7 +2138,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { if (starterContainer) { starterContainer.favoriteIcon.setVisible(starterAttributes.favorite); } - ui.setMode(Mode.STARTER_SELECT); + ui.setMode(UiMode.STARTER_SELECT); return true; }, }); @@ -2150,7 +2150,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { let nickname = starterAttributes.nickname ? String(starterAttributes.nickname) : ""; nickname = decodeURIComponent(escape(atob(nickname))); ui.setModeWithoutClear( - Mode.RENAME_POKEMON, + UiMode.RENAME_POKEMON, { buttonActions: [ (sanitizedName: string) => { @@ -2162,10 +2162,10 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } else { this.pokemonNameText.setText(this.lastSpecies.name); } - ui.setMode(Mode.STARTER_SELECT); + ui.setMode(UiMode.STARTER_SELECT); }, () => { - ui.setMode(Mode.STARTER_SELECT); + ui.setMode(UiMode.STARTER_SELECT); }, ], }, @@ -2197,7 +2197,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { return globalScene.reset(true); } }); - ui.setMode(Mode.STARTER_SELECT); + ui.setMode(UiMode.STARTER_SELECT); this.setSpeciesDetails(this.lastSpecies); globalScene.playSound("se/buy"); @@ -2238,7 +2238,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } }); this.tryUpdateValue(0); - ui.setMode(Mode.STARTER_SELECT); + ui.setMode(UiMode.STARTER_SELECT); globalScene.playSound("se/buy"); // update the value label and icon/animation for available upgrade @@ -2290,7 +2290,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { return globalScene.reset(true); } }); - ui.setMode(Mode.STARTER_SELECT); + ui.setMode(UiMode.STARTER_SELECT); globalScene.playSound("se/buy"); // update the icon/animation for available upgrade @@ -2308,11 +2308,11 @@ export default class StarterSelectUiHandler extends MessageUiHandler { options.push({ label: i18next.t("menu:cancel"), handler: () => { - ui.setMode(Mode.STARTER_SELECT); + ui.setMode(UiMode.STARTER_SELECT); return true; }, }); - ui.setModeWithoutClear(Mode.OPTION_SELECT, { + ui.setModeWithoutClear(UiMode.OPTION_SELECT, { options: options, yOffset: 47, }); @@ -2320,14 +2320,14 @@ export default class StarterSelectUiHandler extends MessageUiHandler { options.push({ label: i18next.t("menuUiHandler:POKEDEX"), handler: () => { - ui.setMode(Mode.STARTER_SELECT).then(() => { + ui.setMode(UiMode.STARTER_SELECT).then(() => { const attributes = { shiny: starterAttributes.shiny, variant: starterAttributes.variant, form: starterAttributes.form, female: starterAttributes.female, }; - ui.setOverlayMode(Mode.POKEDEX_PAGE, this.lastSpecies, attributes); + ui.setOverlayMode(UiMode.POKEDEX_PAGE, this.lastSpecies, attributes); }); return true; }, @@ -2336,7 +2336,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { options.push({ label: i18next.t("starterSelectUiHandler:useCandies"), handler: () => { - ui.setMode(Mode.STARTER_SELECT).then(() => showUseCandies()); + ui.setMode(UiMode.STARTER_SELECT).then(() => showUseCandies()); return true; }, }); @@ -2344,11 +2344,11 @@ export default class StarterSelectUiHandler extends MessageUiHandler { options.push({ label: i18next.t("menu:cancel"), handler: () => { - ui.setMode(Mode.STARTER_SELECT); + ui.setMode(UiMode.STARTER_SELECT); return true; }, }); - ui.setModeWithoutClear(Mode.OPTION_SELECT, { + ui.setModeWithoutClear(UiMode.OPTION_SELECT, { options: options, yOffset: 47, }); @@ -4281,15 +4281,15 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const ui = this.getUi(); const cancel = () => { - ui.setMode(Mode.STARTER_SELECT); + ui.setMode(UiMode.STARTER_SELECT); this.clearText(); this.blockInput = false; }; ui.showText(i18next.t("starterSelectUiHandler:confirmExit"), null, () => { ui.setModeWithoutClear( - Mode.CONFIRM, + UiMode.CONFIRM, () => { - ui.setMode(Mode.STARTER_SELECT); + ui.setMode(UiMode.STARTER_SELECT); globalScene.clearPhaseQueue(); if (globalScene.gameMode.isChallenge) { globalScene.pushPhase(new SelectChallengePhase()); @@ -4318,7 +4318,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const ui = this.getUi(); const cancel = () => { - ui.setMode(Mode.STARTER_SELECT); + ui.setMode(UiMode.STARTER_SELECT); if (!manualTrigger) { this.popStarter(this.starterSpecies.length - 1); } @@ -4330,11 +4330,11 @@ export default class StarterSelectUiHandler extends MessageUiHandler { if (canStart) { ui.showText(i18next.t("starterSelectUiHandler:confirmStartTeam"), null, () => { ui.setModeWithoutClear( - Mode.CONFIRM, + UiMode.CONFIRM, () => { const startRun = () => { globalScene.money = globalScene.gameMode.getStartingMoney(); - ui.setMode(Mode.STARTER_SELECT); + ui.setMode(UiMode.STARTER_SELECT); const thisObj = this; const originalStarterSelectCallback = this.starterSelectCallback; this.starterSelectCallback = null; diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index 5ff4a02793d..877c342651f 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -1,6 +1,6 @@ -import { starterColors } from "#app/battle-scene"; +import { starterColors } from "#app/global-vars/starter-colors"; import { globalScene } from "#app/global-scene"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import UiHandler from "#app/ui/ui-handler"; import { getLocalizedSpriteKey, @@ -11,7 +11,7 @@ import { isNullOrUndefined, toReadableString, formatStat, -} from "#app/utils"; +} from "#app/utils/common"; import type { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; import { getStarterValueFriendshipCap, speciesStarterCosts } from "#app/data/balance/starters"; import { argbFromRgba } from "@material/material-color-utilities"; @@ -128,7 +128,7 @@ export default class SummaryUiHandler extends UiHandler { private selectCallback: Function | null; constructor() { - super(Mode.SUMMARY); + super(UiMode.SUMMARY); } setup() { @@ -510,7 +510,7 @@ export default class SummaryUiHandler extends UiHandler { } const ui = this.getUi(); - const fromPartyMode = ui.handlers[Mode.PARTY].active; + const fromPartyMode = ui.handlers[UiMode.PARTY].active; let success = false; let error = false; @@ -610,9 +610,9 @@ export default class SummaryUiHandler extends UiHandler { } if (!fromPartyMode) { - ui.setMode(Mode.MESSAGE); + ui.setMode(UiMode.MESSAGE); } else { - ui.setMode(Mode.PARTY); + ui.setMode(UiMode.PARTY); } } success = true; diff --git a/src/ui/target-select-ui-handler.ts b/src/ui/target-select-ui-handler.ts index a9f88b337f3..0db2020c25a 100644 --- a/src/ui/target-select-ui-handler.ts +++ b/src/ui/target-select-ui-handler.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "../battle"; -import { Mode } from "./ui"; +import { UiMode } from "#enums/ui-mode"; import UiHandler from "./ui-handler"; -import { isNullOrUndefined, fixedInt } from "#app/utils"; +import { isNullOrUndefined, fixedInt } from "#app/utils/common"; import { getMoveTargets } from "../data/moves/move"; import { Button } from "#enums/buttons"; import type { Moves } from "#enums/moves"; @@ -27,7 +27,7 @@ export default class TargetSelectUiHandler extends UiHandler { private targetBattleInfoMoveTween: Phaser.Tweens.Tween[] = []; constructor() { - super(Mode.TARGET_SELECT); + super(UiMode.TARGET_SELECT); this.cursor = -1; } diff --git a/src/ui/test-dialogue-ui-handler.ts b/src/ui/test-dialogue-ui-handler.ts index 9fbfc01a317..9ecf1641e7b 100644 --- a/src/ui/test-dialogue-ui-handler.ts +++ b/src/ui/test-dialogue-ui-handler.ts @@ -4,8 +4,8 @@ import type { ModalConfig } from "./modal-ui-handler"; import i18next from "i18next"; import type { PlayerPokemon } from "#app/field/pokemon"; import type { OptionSelectItem } from "./abstact-option-select-ui-handler"; -import { isNullOrUndefined } from "#app/utils"; -import { Mode } from "./ui"; +import { isNullOrUndefined } from "#app/utils/common"; +import { UiMode } from "#enums/ui-mode"; export default class TestDialogueUiHandler extends FormModalUiHandler { keys: string[]; @@ -88,7 +88,7 @@ export default class TestDialogueUiHandler extends FormModalUiHandler { input.on("keydown", (inputObject, evt: KeyboardEvent) => { if ( ["escape", "space"].some(v => v === evt.key.toLowerCase() || v === evt.code.toLowerCase()) && - ui.getMode() === Mode.AUTO_COMPLETE + ui.getMode() === UiMode.AUTO_COMPLETE ) { // Delete autocomplete list and recovery focus. inputObject.on("blur", () => inputObject.node.focus(), { once: true }); @@ -98,7 +98,7 @@ export default class TestDialogueUiHandler extends FormModalUiHandler { input.on("textchange", (inputObject, evt: InputEvent) => { // Delete autocomplete. - if (ui.getMode() === Mode.AUTO_COMPLETE) { + if (ui.getMode() === UiMode.AUTO_COMPLETE) { ui.revertMode(); } @@ -133,7 +133,7 @@ export default class TestDialogueUiHandler extends FormModalUiHandler { maxOptions: 5, modalContainer: this.modalContainer, }; - ui.setOverlayMode(Mode.AUTO_COMPLETE, modalOpts); + ui.setOverlayMode(UiMode.AUTO_COMPLETE, modalOpts); } }); @@ -147,7 +147,7 @@ export default class TestDialogueUiHandler extends FormModalUiHandler { this.inputs[0].text = args[1]; } this.submitAction = _ => { - if (ui.getMode() === Mode.TEST_DIALOGUE) { + if (ui.getMode() === UiMode.TEST_DIALOGUE) { this.sanitizeInputs(); const sanitizedName = btoa(unescape(encodeURIComponent(this.inputs[0].text))); config.buttonActions[0](sanitizedName); diff --git a/src/ui/time-of-day-widget.ts b/src/ui/time-of-day-widget.ts index 5e42e6215f8..5f5116a2da0 100644 --- a/src/ui/time-of-day-widget.ts +++ b/src/ui/time-of-day-widget.ts @@ -1,4 +1,4 @@ -import { fixedInt } from "#app/utils"; +import { fixedInt } from "#app/utils/common"; import { globalScene } from "#app/global-scene"; import { BattleSceneEventType } from "../events/battle-scene"; import { EaseType } from "#enums/ease-type"; diff --git a/src/ui/title-ui-handler.ts b/src/ui/title-ui-handler.ts index 405e3cc4a27..bed4d568481 100644 --- a/src/ui/title-ui-handler.ts +++ b/src/ui/title-ui-handler.ts @@ -1,6 +1,6 @@ import OptionSelectUiHandler from "./settings/option-select-ui-handler"; -import { Mode } from "./ui"; -import { fixedInt, randInt, randItem } from "#app/utils"; +import { UiMode } from "#enums/ui-mode"; +import { fixedInt, randInt, randItem } from "#app/utils/common"; import { TextStyle, addTextObject } from "./text"; import { getSplashMessages } from "../data/splash-messages"; import i18next from "i18next"; @@ -26,7 +26,7 @@ export default class TitleUiHandler extends OptionSelectUiHandler { private titleStatsTimer: NodeJS.Timeout | null; - constructor(mode: Mode = Mode.TITLE) { + constructor(mode: UiMode = UiMode.TITLE) { super(mode); } diff --git a/src/ui/ui-handler.ts b/src/ui/ui-handler.ts index 433f85d0f92..d3784c1225c 100644 --- a/src/ui/ui-handler.ts +++ b/src/ui/ui-handler.ts @@ -1,7 +1,7 @@ import { globalScene } from "#app/global-scene"; import type { TextStyle } from "./text"; import { getTextColor } from "./text"; -import type { Mode } from "./ui"; +import type { UiMode } from "#enums/ui-mode"; import type { Button } from "#enums/buttons"; /** @@ -15,7 +15,7 @@ export default abstract class UiHandler { /** * @param mode The mode of the UI element. These should be unique. */ - constructor(mode: Mode | null = null) { + constructor(mode: UiMode | null = null) { this.mode = mode; } diff --git a/src/ui/ui.ts b/src/ui/ui.ts index c7981cd5fba..ad496df6382 100644 --- a/src/ui/ui.ts +++ b/src/ui/ui.ts @@ -28,7 +28,7 @@ import { addWindow } from "./ui-theme"; import LoginFormUiHandler from "./login-form-ui-handler"; import RegistrationFormUiHandler from "./registration-form-ui-handler"; import LoadingModalUiHandler from "./loading-modal-ui-handler"; -import { executeIf } from "#app/utils"; +import { executeIf } from "#app/utils/common"; import GameStatsUiHandler from "./game-stats-ui-handler"; import AwaitableUiHandler from "./awaitable-ui-handler"; import SaveSlotSelectUiHandler from "./save-slot-select-ui-handler"; @@ -57,102 +57,55 @@ import MysteryEncounterUiHandler from "./mystery-encounter-ui-handler"; import PokedexScanUiHandler from "./pokedex-scan-ui-handler"; import PokedexPageUiHandler from "./pokedex-page-ui-handler"; import { NavigationManager } from "./settings/navigationMenu"; - -export enum Mode { - MESSAGE, - TITLE, - COMMAND, - FIGHT, - BALL, - TARGET_SELECT, - MODIFIER_SELECT, - SAVE_SLOT, - PARTY, - SUMMARY, - STARTER_SELECT, - EVOLUTION_SCENE, - EGG_HATCH_SCENE, - EGG_HATCH_SUMMARY, - CONFIRM, - OPTION_SELECT, - MENU, - MENU_OPTION_SELECT, - SETTINGS, - SETTINGS_DISPLAY, - SETTINGS_AUDIO, - SETTINGS_GAMEPAD, - GAMEPAD_BINDING, - SETTINGS_KEYBOARD, - KEYBOARD_BINDING, - ACHIEVEMENTS, - GAME_STATS, - EGG_LIST, - EGG_GACHA, - POKEDEX, - POKEDEX_SCAN, - POKEDEX_PAGE, - LOGIN_FORM, - REGISTRATION_FORM, - LOADING, - SESSION_RELOAD, - UNAVAILABLE, - CHALLENGE_SELECT, - RENAME_POKEMON, - RUN_HISTORY, - RUN_INFO, - TEST_DIALOGUE, - AUTO_COMPLETE, - ADMIN, - MYSTERY_ENCOUNTER, -} +import { UiMode } from "#enums/ui-mode"; const transitionModes = [ - Mode.SAVE_SLOT, - Mode.PARTY, - Mode.SUMMARY, - Mode.STARTER_SELECT, - Mode.EVOLUTION_SCENE, - Mode.EGG_HATCH_SCENE, - Mode.EGG_LIST, - Mode.EGG_GACHA, - Mode.POKEDEX, - Mode.POKEDEX_PAGE, - Mode.CHALLENGE_SELECT, - Mode.RUN_HISTORY, + UiMode.SAVE_SLOT, + UiMode.PARTY, + UiMode.SUMMARY, + UiMode.STARTER_SELECT, + UiMode.EVOLUTION_SCENE, + UiMode.EGG_HATCH_SCENE, + UiMode.EGG_LIST, + UiMode.EGG_GACHA, + UiMode.POKEDEX, + UiMode.POKEDEX_PAGE, + UiMode.CHALLENGE_SELECT, + UiMode.RUN_HISTORY, ]; const noTransitionModes = [ - Mode.TITLE, - Mode.CONFIRM, - Mode.OPTION_SELECT, - Mode.MENU, - Mode.MENU_OPTION_SELECT, - Mode.GAMEPAD_BINDING, - Mode.KEYBOARD_BINDING, - Mode.SETTINGS, - Mode.SETTINGS_AUDIO, - Mode.SETTINGS_DISPLAY, - Mode.SETTINGS_GAMEPAD, - Mode.SETTINGS_KEYBOARD, - Mode.ACHIEVEMENTS, - Mode.GAME_STATS, - Mode.POKEDEX_SCAN, - Mode.LOGIN_FORM, - Mode.REGISTRATION_FORM, - Mode.LOADING, - Mode.SESSION_RELOAD, - Mode.UNAVAILABLE, - Mode.RENAME_POKEMON, - Mode.TEST_DIALOGUE, - Mode.AUTO_COMPLETE, - Mode.ADMIN, - Mode.MYSTERY_ENCOUNTER, - Mode.RUN_INFO, + UiMode.TITLE, + UiMode.CONFIRM, + UiMode.OPTION_SELECT, + UiMode.MENU, + UiMode.MENU_OPTION_SELECT, + UiMode.GAMEPAD_BINDING, + UiMode.KEYBOARD_BINDING, + UiMode.SETTINGS, + UiMode.SETTINGS_AUDIO, + UiMode.SETTINGS_DISPLAY, + UiMode.SETTINGS_GAMEPAD, + UiMode.SETTINGS_KEYBOARD, + UiMode.ACHIEVEMENTS, + UiMode.GAME_STATS, + UiMode.POKEDEX_SCAN, + UiMode.LOGIN_FORM, + UiMode.REGISTRATION_FORM, + UiMode.LOADING, + UiMode.SESSION_RELOAD, + UiMode.UNAVAILABLE, + UiMode.RENAME_POKEMON, + UiMode.TEST_DIALOGUE, + UiMode.AUTO_COMPLETE, + UiMode.ADMIN, + UiMode.MYSTERY_ENCOUNTER, + UiMode.RUN_INFO, ]; export default class UI extends Phaser.GameObjects.Container { - private mode: Mode; - private modeChain: Mode[]; + private mode: UiMode; + private modeChain: UiMode[]; public handlers: UiHandler[]; private overlay: Phaser.GameObjects.Rectangle; public achvBar: AchvBar; @@ -169,7 +122,7 @@ export default class UI extends Phaser.GameObjects.Container { constructor() { super(globalScene, 0, globalScene.game.canvas.height / 6); - this.mode = Mode.MESSAGE; + this.mode = UiMode.MESSAGE; this.modeChain = []; this.handlers = [ new BattleMessageUiHandler(), @@ -189,7 +142,7 @@ export default class UI extends Phaser.GameObjects.Container { new ConfirmUiHandler(), new OptionSelectUiHandler(), new MenuUiHandler(), - new OptionSelectUiHandler(Mode.MENU_OPTION_SELECT), + new OptionSelectUiHandler(UiMode.MENU_OPTION_SELECT), // settings new SettingsUiHandler(), new SettingsDisplayUiHandler(), @@ -203,7 +156,7 @@ export default class UI extends Phaser.GameObjects.Container { new EggListUiHandler(), new EggGachaUiHandler(), new PokedexUiHandler(), - new PokedexScanUiHandler(Mode.TEST_DIALOGUE), + new PokedexScanUiHandler(UiMode.TEST_DIALOGUE), new PokedexPageUiHandler(), new LoginFormUiHandler(), new RegistrationFormUiHandler(), @@ -214,7 +167,7 @@ export default class UI extends Phaser.GameObjects.Container { new RenameFormUiHandler(), new RunHistoryUiHandler(), new RunInfoUiHandler(), - new TestDialogueUiHandler(Mode.TEST_DIALOGUE), + new TestDialogueUiHandler(UiMode.TEST_DIALOGUE), new AutoCompleteUiHandler(), new AdminUiHandler(), new MysteryEncounterUiHandler(), @@ -222,7 +175,7 @@ export default class UI extends Phaser.GameObjects.Container { } setup(): void { - this.setName(`ui-${Mode[this.mode]}`); + this.setName(`ui-${UiMode[this.mode]}`); for (const handler of this.handlers) { handler.setup(); } @@ -279,7 +232,7 @@ export default class UI extends Phaser.GameObjects.Container { } getMessageHandler(): BattleMessageUiHandler { - return this.handlers[Mode.MESSAGE] as BattleMessageUiHandler; + return this.handlers[UiMode.MESSAGE] as BattleMessageUiHandler; } processInfoButton(pressed: boolean) { @@ -287,7 +240,7 @@ export default class UI extends Phaser.GameObjects.Container { return false; } - if ([Mode.CONFIRM, Mode.COMMAND, Mode.FIGHT, Mode.MESSAGE, Mode.TARGET_SELECT].includes(this.mode)) { + if ([UiMode.CONFIRM, UiMode.COMMAND, UiMode.FIGHT, UiMode.MESSAGE, UiMode.TARGET_SELECT].includes(this.mode)) { globalScene?.processInfoButton(pressed); return true; } @@ -564,7 +517,7 @@ export default class UI extends Phaser.GameObjects.Container { } private setModeInternal( - mode: Mode, + mode: UiMode, clear: boolean, forceTransition: boolean, chainMode: boolean, @@ -587,7 +540,7 @@ export default class UI extends Phaser.GameObjects.Container { this.mode = mode; const touchControls = document?.getElementById("touchControls"); if (touchControls) { - touchControls.dataset.uiMode = Mode[mode]; + touchControls.dataset.uiMode = UiMode[mode]; } this.getHandler().show(args); } @@ -612,23 +565,23 @@ export default class UI extends Phaser.GameObjects.Container { }); } - getMode(): Mode { + getMode(): UiMode { return this.mode; } - setMode(mode: Mode, ...args: any[]): Promise { + setMode(mode: UiMode, ...args: any[]): Promise { return this.setModeInternal(mode, true, false, false, args); } - setModeForceTransition(mode: Mode, ...args: any[]): Promise { + setModeForceTransition(mode: UiMode, ...args: any[]): Promise { return this.setModeInternal(mode, true, true, false, args); } - setModeWithoutClear(mode: Mode, ...args: any[]): Promise { + setModeWithoutClear(mode: UiMode, ...args: any[]): Promise { return this.setModeInternal(mode, false, false, false, args); } - setOverlayMode(mode: Mode, ...args: any[]): Promise { + setOverlayMode(mode: UiMode, ...args: any[]): Promise { return this.setModeInternal(mode, false, false, true, args); } @@ -651,7 +604,7 @@ export default class UI extends Phaser.GameObjects.Container { globalScene.updateGameInfo(); const touchControls = document.getElementById("touchControls"); if (touchControls) { - touchControls.dataset.uiMode = Mode[this.mode]; + touchControls.dataset.uiMode = UiMode[this.mode]; } resolve(true); }; @@ -678,7 +631,7 @@ export default class UI extends Phaser.GameObjects.Container { }); } - public getModeChain(): Mode[] { + public getModeChain(): UiMode[] { return this.modeChain; } diff --git a/src/ui/unavailable-modal-ui-handler.ts b/src/ui/unavailable-modal-ui-handler.ts index 01ed850f6d0..5bed55ec24a 100644 --- a/src/ui/unavailable-modal-ui-handler.ts +++ b/src/ui/unavailable-modal-ui-handler.ts @@ -1,9 +1,10 @@ import type { ModalConfig } from "./modal-ui-handler"; import { ModalUiHandler } from "./modal-ui-handler"; import { addTextObject, TextStyle } from "./text"; -import type { Mode } from "./ui"; +import type { UiMode } from "#enums/ui-mode"; import { updateUserInfo } from "#app/account"; -import { removeCookie, sessionIdKey } from "#app/utils"; +import { sessionIdKey } from "#app/utils/common"; +import { removeCookie } from "#app/utils/cookies"; import i18next from "i18next"; import { globalScene } from "#app/global-scene"; @@ -17,7 +18,7 @@ export default class UnavailableModalUiHandler extends ModalUiHandler { private readonly randVarianceTime = 1000 * 10; - constructor(mode: Mode | null = null) { + constructor(mode: UiMode | null = null) { super(mode); this.reconnectDuration = this.minTime; } diff --git a/src/utils.ts b/src/utils/common.ts similarity index 92% rename from src/utils.ts rename to src/utils/common.ts index ce9966c0d7f..4acfabce080 100644 --- a/src/utils.ts +++ b/src/utils/common.ts @@ -276,43 +276,6 @@ export const apiUrl = localServerUrl ?? "https://api.pokerogue.net"; // used to disable api calls when isLocal is true and a server is not found export let isLocalServerConnected = true; -export const isBeta = import.meta.env.MODE === "beta"; // this checks to see if the env mode is development. Technically this gives the same value for beta AND for dev envs - -export function setCookie(cName: string, cValue: string): void { - const expiration = new Date(); - expiration.setTime(new Date().getTime() + 3600000 * 24 * 30 * 3 /*7*/); - document.cookie = `${cName}=${cValue};Secure;SameSite=Strict;Domain=${window.location.hostname};Path=/;Expires=${expiration.toUTCString()}`; -} - -export function removeCookie(cName: string): void { - if (isBeta) { - document.cookie = `${cName}=;Secure;SameSite=Strict;Domain=pokerogue.net;Path=/;Max-Age=-1`; // we need to remove the cookie from the main domain as well - } - - document.cookie = `${cName}=;Secure;SameSite=Strict;Domain=${window.location.hostname};Path=/;Max-Age=-1`; - document.cookie = `${cName}=;Secure;SameSite=Strict;Path=/;Max-Age=-1`; // legacy cookie without domain, for older cookies to prevent a login loop -} - -export function getCookie(cName: string): string { - // check if there are multiple cookies with the same name and delete them - if (document.cookie.split(";").filter(c => c.includes(cName)).length > 1) { - removeCookie(cName); - return ""; - } - const name = `${cName}=`; - const ca = document.cookie.split(";"); - for (let i = 0; i < ca.length; i++) { - let c = ca[i]; - while (c.charAt(0) === " ") { - c = c.substring(1); - } - if (c.indexOf(name) === 0) { - return c.substring(name.length, c.length); - } - } - return ""; -} - /** * When locally running the game, "pings" the local server * with a GET request to verify if a server is running, diff --git a/src/utils/cookies.ts b/src/utils/cookies.ts new file mode 100644 index 00000000000..5ed793c0451 --- /dev/null +++ b/src/utils/cookies.ts @@ -0,0 +1,36 @@ +import { isBeta } from "./utility-vars"; + +export function setCookie(cName: string, cValue: string): void { + const expiration = new Date(); + expiration.setTime(new Date().getTime() + 3600000 * 24 * 30 * 3 /*7*/); + document.cookie = `${cName}=${cValue};Secure;SameSite=Strict;Domain=${window.location.hostname};Path=/;Expires=${expiration.toUTCString()}`; +} + +export function removeCookie(cName: string): void { + if (isBeta) { + document.cookie = `${cName}=;Secure;SameSite=Strict;Domain=pokerogue.net;Path=/;Max-Age=-1`; // we need to remove the cookie from the main domain as well + } + + document.cookie = `${cName}=;Secure;SameSite=Strict;Domain=${window.location.hostname};Path=/;Max-Age=-1`; + document.cookie = `${cName}=;Secure;SameSite=Strict;Path=/;Max-Age=-1`; // legacy cookie without domain, for older cookies to prevent a login loop +} + +export function getCookie(cName: string): string { + // check if there are multiple cookies with the same name and delete them + if (document.cookie.split(";").filter(c => c.includes(cName)).length > 1) { + removeCookie(cName); + return ""; + } + const name = `${cName}=`; + const ca = document.cookie.split(";"); + for (let i = 0; i < ca.length; i++) { + let c = ca[i]; + while (c.charAt(0) === " ") { + c = c.substring(1); + } + if (c.indexOf(name) === 0) { + return c.substring(name.length, c.length); + } + } + return ""; +} diff --git a/src/utils/utility-vars.ts b/src/utils/utility-vars.ts new file mode 100644 index 00000000000..081f70164c8 --- /dev/null +++ b/src/utils/utility-vars.ts @@ -0,0 +1 @@ +export const isBeta = import.meta.env.MODE === "beta"; // this checks to see if the env mode is development. Technically this gives the same value for beta AND for dev envs diff --git a/test/abilities/ability_timing.test.ts b/test/abilities/ability_timing.test.ts index 9df4fe0d1c9..6128a3e6196 100644 --- a/test/abilities/ability_timing.test.ts +++ b/test/abilities/ability_timing.test.ts @@ -2,7 +2,7 @@ import { BattleStyle } from "#app/enums/battle-style"; import { CommandPhase } from "#app/phases/command-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; import i18next from "#app/plugins/i18n"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { Abilities } from "#enums/abilities"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; @@ -40,9 +40,9 @@ describe("Ability Timing", () => { game.onNextPrompt( "CheckSwitchPhase", - Mode.CONFIRM, + UiMode.CONFIRM, () => { - game.setMode(Mode.MESSAGE); + game.setMode(UiMode.MESSAGE); game.endPhase(); }, () => game.isCurrentPhase(CommandPhase) || game.isCurrentPhase(TurnInitPhase), diff --git a/test/abilities/analytic.test.ts b/test/abilities/analytic.test.ts index 1aadf2c0746..108c712da00 100644 --- a/test/abilities/analytic.test.ts +++ b/test/abilities/analytic.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { isBetween, toDmgValue } from "#app/utils"; +import { isBetween, toDmgValue } from "#app/utils/common"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/abilities/disguise.test.ts b/test/abilities/disguise.test.ts index fd8289312db..aeaf8ea2363 100644 --- a/test/abilities/disguise.test.ts +++ b/test/abilities/disguise.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { toDmgValue } from "#app/utils"; +import { toDmgValue } from "#app/utils/common"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/abilities/healer.test.ts b/test/abilities/healer.test.ts index d06c4680e36..d292ad0f625 100644 --- a/test/abilities/healer.test.ts +++ b/test/abilities/healer.test.ts @@ -5,7 +5,7 @@ import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi, type MockInstance } from "vitest"; -import { isNullOrUndefined } from "#app/utils"; +import { isNullOrUndefined } from "#app/utils/common"; import { PostTurnResetStatusAbAttr } from "#app/data/abilities/ability"; import { allAbilities } from "#app/data/data-lists"; import type Pokemon from "#app/field/pokemon"; diff --git a/test/abilities/heatproof.test.ts b/test/abilities/heatproof.test.ts index f2fabf953d6..016237bb02f 100644 --- a/test/abilities/heatproof.test.ts +++ b/test/abilities/heatproof.test.ts @@ -1,7 +1,7 @@ import { Species } from "#app/enums/species"; import { StatusEffect } from "#app/enums/status-effect"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { toDmgValue } from "#app/utils"; +import { toDmgValue } from "#app/utils/common"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import GameManager from "#test/testUtils/gameManager"; diff --git a/test/abilities/intimidate.test.ts b/test/abilities/intimidate.test.ts index 2888c575b0d..8db39270dcf 100644 --- a/test/abilities/intimidate.test.ts +++ b/test/abilities/intimidate.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { Stat } from "#enums/stat"; import { getMovePosition } from "#test/testUtils/gameManagerUtils"; import { Abilities } from "#enums/abilities"; @@ -38,9 +38,9 @@ describe("Abilities - Intimidate", () => { await game.classicMode.runToSummon([Species.MIGHTYENA, Species.POOCHYENA]); game.onNextPrompt( "CheckSwitchPhase", - Mode.CONFIRM, + UiMode.CONFIRM, () => { - game.setMode(Mode.MESSAGE); + game.setMode(UiMode.MESSAGE); game.endPhase(); }, () => game.isCurrentPhase("CommandPhase") || game.isCurrentPhase("TurnInitPhase"), @@ -69,9 +69,9 @@ describe("Abilities - Intimidate", () => { await game.classicMode.runToSummon([Species.MIGHTYENA, Species.POOCHYENA]); game.onNextPrompt( "CheckSwitchPhase", - Mode.CONFIRM, + UiMode.CONFIRM, () => { - game.setMode(Mode.MESSAGE); + game.setMode(UiMode.MESSAGE); game.endPhase(); }, () => game.isCurrentPhase("CommandPhase") || game.isCurrentPhase("TurnInitPhase"), diff --git a/test/abilities/parental_bond.test.ts b/test/abilities/parental_bond.test.ts index d81486e7316..a75fea82830 100644 --- a/test/abilities/parental_bond.test.ts +++ b/test/abilities/parental_bond.test.ts @@ -1,6 +1,6 @@ import { PokemonType } from "#enums/pokemon-type"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { toDmgValue } from "#app/utils"; +import { toDmgValue } from "#app/utils/common"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/abilities/shield_dust.test.ts b/test/abilities/shield_dust.test.ts index 4f6783eb66a..0b96640a29f 100644 --- a/test/abilities/shield_dust.test.ts +++ b/test/abilities/shield_dust.test.ts @@ -6,7 +6,7 @@ import { MoveEffectChanceMultiplierAbAttr, } from "#app/data/abilities/ability"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; -import { NumberHolder } from "#app/utils"; +import { NumberHolder } from "#app/utils/common"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/abilities/stakeout.test.ts b/test/abilities/stakeout.test.ts index b3a7bdbf287..8a2231bba0b 100644 --- a/test/abilities/stakeout.test.ts +++ b/test/abilities/stakeout.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { isBetween } from "#app/utils"; +import { isBetween } from "#app/utils/common"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/abilities/wimp_out.test.ts b/test/abilities/wimp_out.test.ts index c46675376c1..463ec7587dc 100644 --- a/test/abilities/wimp_out.test.ts +++ b/test/abilities/wimp_out.test.ts @@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle"; import { ArenaTagSide } from "#app/data/arena-tag"; import { allMoves } from "#app/data/moves/move"; import GameManager from "#test/testUtils/gameManager"; -import { toDmgValue } from "#app/utils"; +import { toDmgValue } from "#app/utils/common"; import { Abilities } from "#enums/abilities"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; diff --git a/test/account.test.ts b/test/account.test.ts index 3f6b9f3f80b..77368b0b64c 100644 --- a/test/account.test.ts +++ b/test/account.test.ts @@ -1,4 +1,4 @@ -import * as battleScene from "#app/battle-scene"; +import * as bypassLogin from "#app/global-vars/bypass-login"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; import { describe, expect, it, vi } from "vitest"; import { initLoggedInUser, loggedInUser, updateUserInfo } from "#app/account"; @@ -15,7 +15,7 @@ describe("account", () => { describe("updateUserInfo", () => { it("should set loggedInUser! to Guest if bypassLogin is true", async () => { - vi.spyOn(battleScene, "bypassLogin", "get").mockReturnValue(true); + vi.spyOn(bypassLogin, "bypassLogin", "get").mockReturnValue(true); const [success, status] = await updateUserInfo(); @@ -26,7 +26,7 @@ describe("account", () => { }); it("should fetch user info from the API if bypassLogin is false", async () => { - vi.spyOn(battleScene, "bypassLogin", "get").mockReturnValue(false); + vi.spyOn(bypassLogin, "bypassLogin", "get").mockReturnValue(false); vi.spyOn(pokerogueApi.account, "getInfo").mockResolvedValue([ { username: "test", @@ -47,7 +47,7 @@ describe("account", () => { }); it("should handle resolved API errors", async () => { - vi.spyOn(battleScene, "bypassLogin", "get").mockReturnValue(false); + vi.spyOn(bypassLogin, "bypassLogin", "get").mockReturnValue(false); vi.spyOn(pokerogueApi.account, "getInfo").mockResolvedValue([null, 401]); const [success, status] = await updateUserInfo(); @@ -57,7 +57,7 @@ describe("account", () => { }); it("should handle 500 API errors", async () => { - vi.spyOn(battleScene, "bypassLogin", "get").mockReturnValue(false); + vi.spyOn(bypassLogin, "bypassLogin", "get").mockReturnValue(false); vi.spyOn(pokerogueApi.account, "getInfo").mockResolvedValue([null, 500]); const [success, status] = await updateUserInfo(); diff --git a/test/achievements/achievement.test.ts b/test/achievements/achievement.test.ts index 5c53e38e208..0b49c4d23ab 100644 --- a/test/achievements/achievement.test.ts +++ b/test/achievements/achievement.test.ts @@ -10,7 +10,7 @@ import { RibbonAchv, achvs, } from "#app/system/achv"; -import { NumberHolder } from "#app/utils"; +import { NumberHolder } from "#app/utils/common"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/test/battle/battle.test.ts b/test/battle/battle.test.ts index 51304c7d5dd..e980984580e 100644 --- a/test/battle/battle.test.ts +++ b/test/battle/battle.test.ts @@ -18,7 +18,7 @@ import { TurnInitPhase } from "#app/phases/turn-init-phase"; import { VictoryPhase } from "#app/phases/victory-phase"; import GameManager from "#test/testUtils/gameManager"; import { generateStarter } from "#test/testUtils/gameManagerUtils"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { PlayerGender } from "#enums/player-gender"; @@ -49,7 +49,7 @@ describe("Test Battle Phase", () => { it("test phase interceptor with prompt", async () => { await game.phaseInterceptor.run(LoginPhase); - game.onNextPrompt("SelectGenderPhase", Mode.OPTION_SELECT, () => { + game.onNextPrompt("SelectGenderPhase", UiMode.OPTION_SELECT, () => { game.scene.gameData.gender = PlayerGender.MALE; game.endPhase(); }); @@ -57,36 +57,36 @@ describe("Test Battle Phase", () => { await game.phaseInterceptor.run(SelectGenderPhase); await game.phaseInterceptor.run(TitlePhase); - await game.waitMode(Mode.TITLE); + await game.waitMode(UiMode.TITLE); - expect(game.scene.ui?.getMode()).toBe(Mode.TITLE); + expect(game.scene.ui?.getMode()).toBe(UiMode.TITLE); expect(game.scene.gameData.gender).toBe(PlayerGender.MALE); }, 20000); it("test phase interceptor with prompt with preparation for a future prompt", async () => { await game.phaseInterceptor.run(LoginPhase); - game.onNextPrompt("SelectGenderPhase", Mode.OPTION_SELECT, () => { + game.onNextPrompt("SelectGenderPhase", UiMode.OPTION_SELECT, () => { game.scene.gameData.gender = PlayerGender.MALE; game.endPhase(); }); - game.onNextPrompt("CheckSwitchPhase", Mode.CONFIRM, () => { - game.setMode(Mode.MESSAGE); + game.onNextPrompt("CheckSwitchPhase", UiMode.CONFIRM, () => { + game.setMode(UiMode.MESSAGE); game.endPhase(); }); await game.phaseInterceptor.run(SelectGenderPhase); await game.phaseInterceptor.run(TitlePhase); - await game.waitMode(Mode.TITLE); + await game.waitMode(UiMode.TITLE); - expect(game.scene.ui?.getMode()).toBe(Mode.TITLE); + expect(game.scene.ui?.getMode()).toBe(UiMode.TITLE); expect(game.scene.gameData.gender).toBe(PlayerGender.MALE); }, 20000); it("newGame one-liner", async () => { await game.startBattle(); - expect(game.scene.ui?.getMode()).toBe(Mode.COMMAND); + expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); @@ -156,7 +156,7 @@ describe("Test Battle Phase", () => { await game.phaseInterceptor.run(LoginPhase); game.onNextPrompt( "SelectGenderPhase", - Mode.OPTION_SELECT, + UiMode.OPTION_SELECT, () => { game.scene.gameData.gender = PlayerGender.MALE; game.endPhase(); @@ -171,7 +171,7 @@ describe("Test Battle Phase", () => { await game.phaseInterceptor.run(LoginPhase); game.onNextPrompt( "SelectGenderPhase", - Mode.OPTION_SELECT, + UiMode.OPTION_SELECT, () => { game.scene.gameData.gender = PlayerGender.MALE; game.endPhase(); @@ -185,14 +185,14 @@ describe("Test Battle Phase", () => { await game.phaseInterceptor.run(LoginPhase); game.onNextPrompt( "SelectGenderPhase", - Mode.OPTION_SELECT, + UiMode.OPTION_SELECT, () => { game.scene.gameData.gender = PlayerGender.MALE; game.endPhase(); }, () => game.isCurrentPhase(TitlePhase), ); - game.onNextPrompt("TitlePhase", Mode.TITLE, () => { + game.onNextPrompt("TitlePhase", UiMode.TITLE, () => { game.scene.gameMode = getGameMode(GameModes.CLASSIC); const starters = generateStarter(game.scene); const selectStarterPhase = new SelectStarterPhase(); @@ -208,7 +208,7 @@ describe("Test Battle Phase", () => { game.override.enemyAbility(Abilities.HYDRATION); game.override.ability(Abilities.HYDRATION); await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); - expect(game.scene.ui?.getMode()).toBe(Mode.COMMAND); + expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); @@ -218,7 +218,7 @@ describe("Test Battle Phase", () => { game.override.enemyAbility(Abilities.HYDRATION); game.override.ability(Abilities.HYDRATION); await game.startBattle([Species.BLASTOISE]); - expect(game.scene.ui?.getMode()).toBe(Mode.COMMAND); + expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); @@ -229,7 +229,7 @@ describe("Test Battle Phase", () => { game.override.ability(Abilities.HYDRATION); game.override.startingWave(3); await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); - expect(game.scene.ui?.getMode()).toBe(Mode.COMMAND); + expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); @@ -240,7 +240,7 @@ describe("Test Battle Phase", () => { game.override.ability(Abilities.HYDRATION); game.override.startingWave(3); await game.startBattle([Species.BLASTOISE, Species.CHARIZARD, Species.DARKRAI, Species.GABITE]); - expect(game.scene.ui?.getMode()).toBe(Mode.COMMAND); + expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); @@ -328,7 +328,7 @@ describe("Test Battle Phase", () => { game.onNextPrompt( "SwitchPhase", - Mode.PARTY, + UiMode.PARTY, () => { expect.fail("Switch was forced"); }, diff --git a/test/battle/special_battle.test.ts b/test/battle/special_battle.test.ts index 46dd8eaa010..163f23e488d 100644 --- a/test/battle/special_battle.test.ts +++ b/test/battle/special_battle.test.ts @@ -1,5 +1,5 @@ import { CommandPhase } from "#app/phases/command-phase"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; @@ -34,63 +34,63 @@ describe("Test Battle Phase", () => { it("startBattle 2vs1 boss", async () => { game.override.battleStyle("single").startingWave(10); await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); - expect(game.scene.ui?.getMode()).toBe(Mode.COMMAND); + expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs2 boss", async () => { game.override.battleStyle("double").startingWave(10); await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); - expect(game.scene.ui?.getMode()).toBe(Mode.COMMAND); + expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs2 trainer", async () => { game.override.battleStyle("double").startingWave(5); await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); - expect(game.scene.ui?.getMode()).toBe(Mode.COMMAND); + expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs1 trainer", async () => { game.override.battleStyle("single").startingWave(5); await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); - expect(game.scene.ui?.getMode()).toBe(Mode.COMMAND); + expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs1 rival", async () => { game.override.battleStyle("single").startingWave(8); await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); - expect(game.scene.ui?.getMode()).toBe(Mode.COMMAND); + expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs2 rival", async () => { game.override.battleStyle("double").startingWave(8); await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); - expect(game.scene.ui?.getMode()).toBe(Mode.COMMAND); + expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 1vs1 trainer", async () => { game.override.battleStyle("single").startingWave(5); await game.startBattle([Species.BLASTOISE]); - expect(game.scene.ui?.getMode()).toBe(Mode.COMMAND); + expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs2 trainer", async () => { game.override.battleStyle("double").startingWave(5); await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); - expect(game.scene.ui?.getMode()).toBe(Mode.COMMAND); + expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 4vs2 trainer", async () => { game.override.battleStyle("double").startingWave(5); await game.startBattle([Species.BLASTOISE, Species.CHARIZARD, Species.DARKRAI, Species.GABITE]); - expect(game.scene.ui?.getMode()).toBe(Mode.COMMAND); + expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); }); diff --git a/test/boss-pokemon.test.ts b/test/boss-pokemon.test.ts index 9df69da09b7..ef95ae9bcc2 100644 --- a/test/boss-pokemon.test.ts +++ b/test/boss-pokemon.test.ts @@ -6,7 +6,7 @@ import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; import { EFFECTIVE_STATS } from "#app/enums/stat"; import type { EnemyPokemon } from "#app/field/pokemon"; -import { toDmgValue } from "#app/utils"; +import { toDmgValue } from "#app/utils/common"; describe("Boss Pokemon / Shields", () => { let phaserGame: Phaser.Game; diff --git a/test/daily_mode.test.ts b/test/daily_mode.test.ts index 6b95543fb3b..a7f5784087a 100644 --- a/test/daily_mode.test.ts +++ b/test/daily_mode.test.ts @@ -4,7 +4,7 @@ import { MapModifier } from "#app/modifier/modifier"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { Species } from "#enums/species"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import GameManager from "#test/testUtils/gameManager"; @@ -76,7 +76,7 @@ describe("Shop modifications", async () => { game.move.select(Moves.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to("BattleEndPhase"); - game.onNextPrompt("SelectModifierPhase", Mode.MODIFIER_SELECT, () => { + game.onNextPrompt("SelectModifierPhase", UiMode.MODIFIER_SELECT, () => { expect(game.scene.ui.getHandler()).toBeInstanceOf(ModifierSelectUiHandler); game.modifiers.testCheck("EVIOLITE", false).testCheck("MINI_BLACK_HOLE", false); }); @@ -87,7 +87,7 @@ describe("Shop modifications", async () => { game.move.select(Moves.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to("BattleEndPhase"); - game.onNextPrompt("SelectModifierPhase", Mode.MODIFIER_SELECT, () => { + game.onNextPrompt("SelectModifierPhase", UiMode.MODIFIER_SELECT, () => { expect(game.scene.ui.getHandler()).toBeInstanceOf(ModifierSelectUiHandler); game.modifiers.testCheck("EVIOLITE", true).testCheck("MINI_BLACK_HOLE", true); }); diff --git a/test/eggs/egg.test.ts b/test/eggs/egg.test.ts index 8875300780b..0110aa5fdaf 100644 --- a/test/eggs/egg.test.ts +++ b/test/eggs/egg.test.ts @@ -5,7 +5,7 @@ import { EggSourceType } from "#app/enums/egg-source-types"; import { EggTier } from "#app/enums/egg-type"; import { VariantTier } from "#app/enums/variant-tier"; import EggData from "#app/system/egg-data"; -import * as Utils from "#app/utils"; +import * as Utils from "#app/utils/common"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; diff --git a/test/enemy_command.test.ts b/test/enemy_command.test.ts index 6d5cc2698a3..ae1f2918798 100644 --- a/test/enemy_command.test.ts +++ b/test/enemy_command.test.ts @@ -6,7 +6,7 @@ import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import type { EnemyPokemon } from "#app/field/pokemon"; import { AiType } from "#app/field/pokemon"; -import { randSeedInt } from "#app/utils"; +import { randSeedInt } from "#app/utils/common"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/test/escape-calculations.test.ts b/test/escape-calculations.test.ts index d591bdec9fc..56333432cee 100644 --- a/test/escape-calculations.test.ts +++ b/test/escape-calculations.test.ts @@ -1,7 +1,7 @@ import { AttemptRunPhase } from "#app/phases/attempt-run-phase"; import type { CommandPhase } from "#app/phases/command-phase"; import { Command } from "#app/ui/command-ui-handler"; -import { NumberHolder } from "#app/utils"; +import { NumberHolder } from "#app/utils/common"; import { Abilities } from "#enums/abilities"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; diff --git a/test/evolution.test.ts b/test/evolution.test.ts index 68d02402eac..4f91cd99382 100644 --- a/test/evolution.test.ts +++ b/test/evolution.test.ts @@ -6,7 +6,7 @@ import { import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; -import * as Utils from "#app/utils"; +import * as Utils from "#app/utils/common"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/test/game-mode.test.ts b/test/game-mode.test.ts index a2da7d1690a..0483d18e492 100644 --- a/test/game-mode.test.ts +++ b/test/game-mode.test.ts @@ -1,7 +1,7 @@ import type { GameMode } from "#app/game-mode"; import { GameModes, getGameMode } from "#app/game-mode"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import * as Utils from "#app/utils"; +import * as Utils from "#app/utils/common"; import GameManager from "#test/testUtils/gameManager"; describe("game-mode", () => { diff --git a/test/items/dire_hit.test.ts b/test/items/dire_hit.test.ts index f6197e097c2..b409b2ac7cb 100644 --- a/test/items/dire_hit.test.ts +++ b/test/items/dire_hit.test.ts @@ -6,7 +6,7 @@ import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { BattleEndPhase } from "#app/phases/battle-end-phase"; import { TempCritBoosterModifier } from "#app/modifier/modifier"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import type ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { Button } from "#app/enums/buttons"; import { CommandPhase } from "#app/phases/command-phase"; @@ -71,7 +71,7 @@ describe("Items - Dire Hit", () => { // Forced DIRE_HIT to spawn in the first slot with override game.onNextPrompt( "SelectModifierPhase", - Mode.MODIFIER_SELECT, + UiMode.MODIFIER_SELECT, () => { const handler = game.scene.ui.getHandler() as ModifierSelectUiHandler; // Traverse to first modifier slot diff --git a/test/items/double_battle_chance_booster.test.ts b/test/items/double_battle_chance_booster.test.ts index b4818e7e7ba..68a29ef823e 100644 --- a/test/items/double_battle_chance_booster.test.ts +++ b/test/items/double_battle_chance_booster.test.ts @@ -5,7 +5,7 @@ import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import { ShopCursorTarget } from "#app/enums/shop-cursor-target"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import type ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { Button } from "#app/enums/buttons"; @@ -69,7 +69,7 @@ describe("Items - Double Battle Chance Boosters", () => { // Forced LURE to spawn in the first slot with override game.onNextPrompt( "SelectModifierPhase", - Mode.MODIFIER_SELECT, + UiMode.MODIFIER_SELECT, () => { const handler = game.scene.ui.getHandler() as ModifierSelectUiHandler; // Traverse to first modifier slot diff --git a/test/items/eviolite.test.ts b/test/items/eviolite.test.ts index 43fd6a795bb..fafc0f4a10c 100644 --- a/test/items/eviolite.test.ts +++ b/test/items/eviolite.test.ts @@ -1,5 +1,5 @@ import { StatBoosterModifier } from "#app/modifier/modifier"; -import { NumberHolder, randItem } from "#app/utils"; +import { NumberHolder, randItem } from "#app/utils/common"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; diff --git a/test/items/exp_booster.test.ts b/test/items/exp_booster.test.ts index 3fe31e5c202..ec7528c3b23 100644 --- a/test/items/exp_booster.test.ts +++ b/test/items/exp_booster.test.ts @@ -1,6 +1,6 @@ import { Abilities } from "#app/enums/abilities"; import { PokemonExpBoosterModifier } from "#app/modifier/modifier"; -import { NumberHolder } from "#app/utils"; +import { NumberHolder } from "#app/utils/common"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/test/items/leek.test.ts b/test/items/leek.test.ts index 5f9be882bc1..7589b89bc15 100644 --- a/test/items/leek.test.ts +++ b/test/items/leek.test.ts @@ -1,5 +1,5 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { randInt } from "#app/utils"; +import { randInt } from "#app/utils/common"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; diff --git a/test/items/light_ball.test.ts b/test/items/light_ball.test.ts index e85fb1b602b..91195d0b1e5 100644 --- a/test/items/light_ball.test.ts +++ b/test/items/light_ball.test.ts @@ -2,7 +2,7 @@ import { Stat } from "#enums/stat"; import { SpeciesStatBoosterModifier } from "#app/modifier/modifier"; import { modifierTypes } from "#app/modifier/modifier-type"; import i18next from "#app/plugins/i18n"; -import { NumberHolder } from "#app/utils"; +import { NumberHolder } from "#app/utils/common"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; diff --git a/test/items/lock_capsule.test.ts b/test/items/lock_capsule.test.ts index 9cc6046307e..19829578d87 100644 --- a/test/items/lock_capsule.test.ts +++ b/test/items/lock_capsule.test.ts @@ -2,7 +2,7 @@ import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -41,7 +41,7 @@ describe("Items - Lock Capsule", () => { }), ); - game.onNextPrompt("SelectModifierPhase", Mode.MODIFIER_SELECT, () => { + game.onNextPrompt("SelectModifierPhase", UiMode.MODIFIER_SELECT, () => { const selectModifierPhase = game.scene.getCurrentPhase() as SelectModifierPhase; const rerollCost = selectModifierPhase.getRerollCost(true); expect(rerollCost).toBe(150); diff --git a/test/items/metal_powder.test.ts b/test/items/metal_powder.test.ts index 37686710848..6be7655ec70 100644 --- a/test/items/metal_powder.test.ts +++ b/test/items/metal_powder.test.ts @@ -2,7 +2,7 @@ import { Stat } from "#enums/stat"; import { SpeciesStatBoosterModifier } from "#app/modifier/modifier"; import { modifierTypes } from "#app/modifier/modifier-type"; import i18next from "#app/plugins/i18n"; -import { NumberHolder } from "#app/utils"; +import { NumberHolder } from "#app/utils/common"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; diff --git a/test/items/quick_powder.test.ts b/test/items/quick_powder.test.ts index 6937d6093f3..d77f981f04d 100644 --- a/test/items/quick_powder.test.ts +++ b/test/items/quick_powder.test.ts @@ -2,7 +2,7 @@ import { Stat } from "#enums/stat"; import { SpeciesStatBoosterModifier } from "#app/modifier/modifier"; import { modifierTypes } from "#app/modifier/modifier-type"; import i18next from "#app/plugins/i18n"; -import { NumberHolder } from "#app/utils"; +import { NumberHolder } from "#app/utils/common"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; diff --git a/test/items/temp_stat_stage_booster.test.ts b/test/items/temp_stat_stage_booster.test.ts index ccbabf01ccb..a3cfc3256bb 100644 --- a/test/items/temp_stat_stage_booster.test.ts +++ b/test/items/temp_stat_stage_booster.test.ts @@ -7,7 +7,7 @@ import { Moves } from "#app/enums/moves"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Abilities } from "#app/enums/abilities"; import { TempStatStageBoosterModifier } from "#app/modifier/modifier"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { Button } from "#app/enums/buttons"; import type ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { ShopCursorTarget } from "#app/enums/shop-cursor-target"; @@ -137,7 +137,7 @@ describe("Items - Temporary Stat Stage Boosters", () => { // Forced X_ATTACK to spawn in the first slot with override game.onNextPrompt( "SelectModifierPhase", - Mode.MODIFIER_SELECT, + UiMode.MODIFIER_SELECT, () => { const handler = game.scene.ui.getHandler() as ModifierSelectUiHandler; // Traverse to first modifier slot diff --git a/test/items/thick_club.test.ts b/test/items/thick_club.test.ts index 9e9cd2e2ec8..2a63a60a0e6 100644 --- a/test/items/thick_club.test.ts +++ b/test/items/thick_club.test.ts @@ -2,7 +2,7 @@ import { Stat } from "#enums/stat"; import { SpeciesStatBoosterModifier } from "#app/modifier/modifier"; import { modifierTypes } from "#app/modifier/modifier-type"; import i18next from "#app/plugins/i18n"; -import { NumberHolder, randInt } from "#app/utils"; +import { NumberHolder, randInt } from "#app/utils/common"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; diff --git a/test/moves/aurora_veil.test.ts b/test/moves/aurora_veil.test.ts index ef53b69b4e4..e9ab66d4203 100644 --- a/test/moves/aurora_veil.test.ts +++ b/test/moves/aurora_veil.test.ts @@ -5,7 +5,7 @@ import { allMoves, CritOnlyAttr } from "#app/data/moves/move"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import type Pokemon from "#app/field/pokemon"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { NumberHolder } from "#app/utils"; +import { NumberHolder } from "#app/utils/common"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/moves/belly_drum.test.ts b/test/moves/belly_drum.test.ts index f01a50f8a79..8ee1026bf20 100644 --- a/test/moves/belly_drum.test.ts +++ b/test/moves/belly_drum.test.ts @@ -1,5 +1,5 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { toDmgValue } from "#app/utils"; +import { toDmgValue } from "#app/utils/common"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; diff --git a/test/moves/fillet_away.test.ts b/test/moves/fillet_away.test.ts index cc462b3746a..477cdf76fc7 100644 --- a/test/moves/fillet_away.test.ts +++ b/test/moves/fillet_away.test.ts @@ -1,5 +1,5 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { toDmgValue } from "#app/utils"; +import { toDmgValue } from "#app/utils/common"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; diff --git a/test/moves/light_screen.test.ts b/test/moves/light_screen.test.ts index 12aeb29577a..cea26f29542 100644 --- a/test/moves/light_screen.test.ts +++ b/test/moves/light_screen.test.ts @@ -6,7 +6,7 @@ import { Abilities } from "#app/enums/abilities"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import type Pokemon from "#app/field/pokemon"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { NumberHolder } from "#app/utils"; +import { NumberHolder } from "#app/utils/common"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; diff --git a/test/moves/multi_target.test.ts b/test/moves/multi_target.test.ts index fccf650416c..ad47d540a14 100644 --- a/test/moves/multi_target.test.ts +++ b/test/moves/multi_target.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { Abilities } from "#app/enums/abilities"; import { Species } from "#app/enums/species"; -import { toDmgValue } from "#app/utils"; +import { toDmgValue } from "#app/utils/common"; import { Moves } from "#enums/moves"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; diff --git a/test/moves/pledge_moves.test.ts b/test/moves/pledge_moves.test.ts index b3d13a27b83..2bfd408e5fb 100644 --- a/test/moves/pledge_moves.test.ts +++ b/test/moves/pledge_moves.test.ts @@ -5,7 +5,7 @@ import { allMoves, FlinchAttr } from "#app/data/moves/move"; import { PokemonType } from "#enums/pokemon-type"; import { ArenaTagType } from "#enums/arena-tag-type"; import { Stat } from "#enums/stat"; -import { toDmgValue } from "#app/utils"; +import { toDmgValue } from "#app/utils/common"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/moves/reflect.test.ts b/test/moves/reflect.test.ts index 473b46bf097..b8338cea8cf 100644 --- a/test/moves/reflect.test.ts +++ b/test/moves/reflect.test.ts @@ -6,7 +6,7 @@ import { Abilities } from "#app/enums/abilities"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import type Pokemon from "#app/field/pokemon"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { NumberHolder } from "#app/utils"; +import { NumberHolder } from "#app/utils/common"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; diff --git a/test/moves/revival_blessing.test.ts b/test/moves/revival_blessing.test.ts index 860ce5524d4..b36cd43eb83 100644 --- a/test/moves/revival_blessing.test.ts +++ b/test/moves/revival_blessing.test.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; import { MoveResult } from "#app/field/pokemon"; -import { toDmgValue } from "#app/utils"; +import { toDmgValue } from "#app/utils/common"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/moves/substitute.test.ts b/test/moves/substitute.test.ts index 2e82078418b..7f4a2e69f9e 100644 --- a/test/moves/substitute.test.ts +++ b/test/moves/substitute.test.ts @@ -6,7 +6,7 @@ import { MoveResult } from "#app/field/pokemon"; import type { CommandPhase } from "#app/phases/command-phase"; import GameManager from "#test/testUtils/gameManager"; import { Command } from "#app/ui/command-ui-handler"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { Abilities } from "#enums/abilities"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; @@ -398,7 +398,7 @@ describe("Moves - Substitute", () => { leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, leadPokemon.id); // Simulate a Baton switch for the player this turn - game.onNextPrompt("CommandPhase", Mode.COMMAND, () => { + game.onNextPrompt("CommandPhase", UiMode.COMMAND, () => { (game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.POKEMON, 1, true); }); diff --git a/test/mystery-encounter/encounter-test-utils.ts b/test/mystery-encounter/encounter-test-utils.ts index 93629778e0a..977f40bc90e 100644 --- a/test/mystery-encounter/encounter-test-utils.ts +++ b/test/mystery-encounter/encounter-test-utils.ts @@ -14,8 +14,8 @@ import type MessageUiHandler from "#app/ui/message-ui-handler"; import type MysteryEncounterUiHandler from "#app/ui/mystery-encounter-ui-handler"; import type PartyUiHandler from "#app/ui/party-ui-handler"; import type OptionSelectUiHandler from "#app/ui/settings/option-select-ui-handler"; -import { Mode } from "#app/ui/ui"; -import { isNullOrUndefined } from "#app/utils"; +import { UiMode } from "#enums/ui-mode"; +import { isNullOrUndefined } from "#app/utils/common"; import { Button } from "#enums/buttons"; import { StatusEffect } from "#enums/status-effect"; import type GameManager from "#test/testUtils/gameManager"; @@ -40,7 +40,7 @@ export async function runMysteryEncounterToEnd( // run the selected options phase game.onNextPrompt( "MysteryEncounterOptionSelectedPhase", - Mode.MESSAGE, + UiMode.MESSAGE, () => { const uiHandler = game.scene.ui.getHandler(); uiHandler.processInput(Button.ACTION); @@ -51,9 +51,9 @@ export async function runMysteryEncounterToEnd( if (isBattle) { game.onNextPrompt( "CheckSwitchPhase", - Mode.CONFIRM, + UiMode.CONFIRM, () => { - game.setMode(Mode.MESSAGE); + game.setMode(UiMode.MESSAGE); game.endPhase(); }, () => game.isCurrentPhase(CommandPhase), @@ -61,16 +61,16 @@ export async function runMysteryEncounterToEnd( game.onNextPrompt( "CheckSwitchPhase", - Mode.MESSAGE, + UiMode.MESSAGE, () => { - game.setMode(Mode.MESSAGE); + game.setMode(UiMode.MESSAGE); game.endPhase(); }, () => game.isCurrentPhase(CommandPhase), ); // If a battle is started, fast forward to end of the battle - game.onNextPrompt("CommandPhase", Mode.COMMAND, () => { + game.onNextPrompt("CommandPhase", UiMode.COMMAND, () => { game.scene.clearPhaseQueue(); game.scene.clearPhaseQueueSplice(); game.scene.unshiftPhase(new VictoryPhase(0)); @@ -78,13 +78,13 @@ export async function runMysteryEncounterToEnd( }); // Handle end of battle trainer messages - game.onNextPrompt("TrainerVictoryPhase", Mode.MESSAGE, () => { + game.onNextPrompt("TrainerVictoryPhase", UiMode.MESSAGE, () => { const uiHandler = game.scene.ui.getHandler(); uiHandler.processInput(Button.ACTION); }); // Handle egg hatch dialogue - game.onNextPrompt("EggLapsePhase", Mode.MESSAGE, () => { + game.onNextPrompt("EggLapsePhase", UiMode.MESSAGE, () => { const uiHandler = game.scene.ui.getHandler(); uiHandler.processInput(Button.ACTION); }); @@ -103,7 +103,7 @@ export async function runSelectMysteryEncounterOption( // Handle any eventual queued messages (e.g. weather phase, etc.) game.onNextPrompt( "MessagePhase", - Mode.MESSAGE, + UiMode.MESSAGE, () => { const uiHandler = game.scene.ui.getHandler(); uiHandler.processInput(Button.ACTION); @@ -118,7 +118,7 @@ export async function runSelectMysteryEncounterOption( // dispose of intro messages game.onNextPrompt( "MysteryEncounterPhase", - Mode.MESSAGE, + UiMode.MESSAGE, () => { const uiHandler = game.scene.ui.getHandler(); uiHandler.processInput(Button.ACTION); @@ -157,7 +157,7 @@ export async function runSelectMysteryEncounterOption( async function handleSecondaryOptionSelect(game: GameManager, pokemonNo: number, optionNo?: number) { // Handle secondary option selections - const partyUiHandler = game.scene.ui.handlers[Mode.PARTY] as PartyUiHandler; + const partyUiHandler = game.scene.ui.handlers[UiMode.PARTY] as PartyUiHandler; vi.spyOn(partyUiHandler, "show"); const encounterUiHandler = game.scene.ui.getHandler(); @@ -177,7 +177,7 @@ async function handleSecondaryOptionSelect(game: GameManager, pokemonNo: number, // If there is a second choice to make after selecting a Pokemon if (!isNullOrUndefined(optionNo)) { // Wait for Summary menu to close and second options to spawn - const secondOptionUiHandler = game.scene.ui.handlers[Mode.OPTION_SELECT] as OptionSelectUiHandler; + const secondOptionUiHandler = game.scene.ui.handlers[UiMode.OPTION_SELECT] as OptionSelectUiHandler; vi.spyOn(secondOptionUiHandler, "show"); await vi.waitFor(() => expect(secondOptionUiHandler.show).toHaveBeenCalled()); @@ -206,6 +206,6 @@ export async function skipBattleRunMysteryEncounterRewardsPhase(game: GameManage }); game.scene.pushPhase(new VictoryPhase(0)); game.phaseInterceptor.superEndPhase(); - game.setMode(Mode.MESSAGE); + game.setMode(UiMode.MESSAGE); await game.phaseInterceptor.to(MysteryEncounterRewardsPhase, runRewardsPhase); } diff --git a/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts b/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts index 43d582c5b70..a4c043ad13f 100644 --- a/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts +++ b/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts @@ -117,10 +117,8 @@ describe("A Trainer's Test - Mystery Encounter", () => { i18next.t("trainerNames:marley"), i18next.t("trainerNames:mira"), i18next.t("trainerNames:riley"), - ] - .map(name => name.toLowerCase()) - .includes(scene.currentBattle.trainer!.config.name), - ).toBeTruthy(); + ].map(name => name.toLowerCase()), + ).toContain(scene.currentBattle.trainer!.config.name.toLowerCase()); expect(enemyField[0]).toBeDefined(); }); diff --git a/test/mystery-encounter/encounters/berries-abound-encounter.test.ts b/test/mystery-encounter/encounters/berries-abound-encounter.test.ts index e19726f49fd..3f85b0b89d9 100644 --- a/test/mystery-encounter/encounters/berries-abound-encounter.test.ts +++ b/test/mystery-encounter/encounters/berries-abound-encounter.test.ts @@ -9,7 +9,7 @@ import { skipBattleRunMysteryEncounterRewardsPhase, } from "#test/mystery-encounter/encounter-test-utils"; import type BattleScene from "#app/battle-scene"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { BerryModifier } from "#app/modifier/modifier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; @@ -153,7 +153,7 @@ describe("Berries Abound - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; @@ -238,7 +238,7 @@ describe("Berries Abound - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; diff --git a/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts b/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts index 9befe77e688..fc208ed7180 100644 --- a/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts +++ b/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts @@ -12,7 +12,7 @@ import { import { Moves } from "#enums/moves"; import type BattleScene from "#app/battle-scene"; import { PokemonMove } from "#app/field/pokemon"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; @@ -364,7 +364,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterRewardsPhase.name); game.phaseInterceptor["prompts"] = []; // Clear out prompt handlers - game.onNextPrompt("MysteryEncounterRewardsPhase", Mode.OPTION_SELECT, () => { + game.onNextPrompt("MysteryEncounterRewardsPhase", UiMode.OPTION_SELECT, () => { game.phaseInterceptor.superEndPhase(); }); await game.phaseInterceptor.run(MysteryEncounterRewardsPhase); @@ -416,7 +416,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; @@ -432,7 +432,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; @@ -454,7 +454,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; @@ -478,7 +478,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; @@ -554,7 +554,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; diff --git a/test/mystery-encounter/encounters/clowning-around-encounter.test.ts b/test/mystery-encounter/encounters/clowning-around-encounter.test.ts index 4bbe76e5c72..afc4a83e9bf 100644 --- a/test/mystery-encounter/encounters/clowning-around-encounter.test.ts +++ b/test/mystery-encounter/encounters/clowning-around-encounter.test.ts @@ -16,7 +16,7 @@ import { Moves } from "#enums/moves"; import type BattleScene from "#app/battle-scene"; import type Pokemon from "#app/field/pokemon"; import { PokemonMove } from "#app/field/pokemon"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; @@ -206,14 +206,14 @@ describe("Clowning Around - Mystery Encounter", () => { await game.phaseInterceptor.run(SelectModifierPhase); const abilityToTrain = scene.currentBattle.mysteryEncounter?.misc.ability; - game.onNextPrompt("PostMysteryEncounterPhase", Mode.MESSAGE, () => { + game.onNextPrompt("PostMysteryEncounterPhase", UiMode.MESSAGE, () => { game.scene.ui.getHandler().processInput(Button.ACTION); }); // Run to ability train option selection - const optionSelectUiHandler = game.scene.ui.handlers[Mode.OPTION_SELECT] as OptionSelectUiHandler; + const optionSelectUiHandler = game.scene.ui.handlers[UiMode.OPTION_SELECT] as OptionSelectUiHandler; vi.spyOn(optionSelectUiHandler, "show"); - const partyUiHandler = game.scene.ui.handlers[Mode.PARTY] as PartyUiHandler; + const partyUiHandler = game.scene.ui.handlers[UiMode.PARTY] as PartyUiHandler; vi.spyOn(partyUiHandler, "show"); game.endPhase(); await game.phaseInterceptor.to(PostMysteryEncounterPhase); diff --git a/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts b/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts index 77cd65e51b9..873bed2f213 100644 --- a/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts +++ b/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts @@ -15,7 +15,7 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; import { Moves } from "#enums/moves"; import { DancingLessonsEncounter } from "#app/data/mystery-encounters/encounters/dancing-lessons-encounter"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { PokemonMove } from "#app/field/pokemon"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; @@ -132,7 +132,7 @@ describe("Dancing Lessons - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; diff --git a/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts b/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts index d4b0de30535..2488d12dad1 100644 --- a/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts +++ b/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts @@ -7,7 +7,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vite import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { runMysteryEncounterToEnd } from "#test/mystery-encounter/encounter-test-utils"; import type BattleScene from "#app/battle-scene"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { DepartmentStoreSaleEncounter } from "#app/data/mystery-encounters/encounters/department-store-sale-encounter"; import { CIVILIZATION_ENCOUNTER_BIOMES } from "#app/data/mystery-encounters/mystery-encounters"; @@ -98,7 +98,7 @@ describe("Department Store Sale - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; @@ -135,7 +135,7 @@ describe("Department Store Sale - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; @@ -175,7 +175,7 @@ describe("Department Store Sale - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; @@ -215,7 +215,7 @@ describe("Department Store Sale - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; diff --git a/test/mystery-encounter/encounters/field-trip-encounter.test.ts b/test/mystery-encounter/encounters/field-trip-encounter.test.ts index 8bd35d6013f..75a6fe77492 100644 --- a/test/mystery-encounter/encounters/field-trip-encounter.test.ts +++ b/test/mystery-encounter/encounters/field-trip-encounter.test.ts @@ -12,7 +12,7 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encount import { FieldTripEncounter } from "#app/data/mystery-encounters/encounters/field-trip-encounter"; import { Moves } from "#enums/moves"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import i18next from "i18next"; @@ -88,7 +88,7 @@ describe("Field Trip - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1, optionNo: 2 }); await game.phaseInterceptor.to(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; @@ -100,7 +100,7 @@ describe("Field Trip - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1, optionNo: 1 }); await game.phaseInterceptor.to(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; @@ -149,7 +149,7 @@ describe("Field Trip - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 2, { pokemonNo: 1, optionNo: 1 }); await game.phaseInterceptor.to(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; @@ -161,7 +161,7 @@ describe("Field Trip - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 2, { pokemonNo: 1, optionNo: 2 }); await game.phaseInterceptor.to(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; @@ -210,7 +210,7 @@ describe("Field Trip - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1 }); await game.phaseInterceptor.to(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; @@ -223,7 +223,7 @@ describe("Field Trip - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 3 }); await game.phaseInterceptor.to(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; diff --git a/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts b/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts index d233e72932a..d47266268ee 100644 --- a/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts +++ b/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts @@ -12,7 +12,7 @@ import { import { Moves } from "#enums/moves"; import type BattleScene from "#app/battle-scene"; import { PokemonMove } from "#app/field/pokemon"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; @@ -126,7 +126,7 @@ describe("Fight or Flight - Mystery Encounter", () => { await game.phaseInterceptor.to(SelectModifierPhase, false); expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, @@ -186,7 +186,7 @@ describe("Fight or Flight - Mystery Encounter", () => { await game.phaseInterceptor.to(SelectModifierPhase, false); expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, diff --git a/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts b/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts index 4bb44c4d19e..f8375c1aa78 100644 --- a/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts +++ b/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts @@ -10,7 +10,7 @@ import { runSelectMysteryEncounterOption, } from "#test/mystery-encounter/encounter-test-utils"; import type BattleScene from "#app/battle-scene"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; @@ -147,7 +147,7 @@ describe("Fun And Games! - Mystery Encounter", () => { expect(scene.getEnemyPokemon()?.ivs).toEqual([0, 0, 0, 0, 0, 0]); expect(scene.getEnemyPokemon()?.nature).toBe(Nature.MILD); - game.onNextPrompt("MessagePhase", Mode.MESSAGE, () => { + game.onNextPrompt("MessagePhase", UiMode.MESSAGE, () => { game.endPhase(); }); @@ -173,7 +173,7 @@ describe("Fun And Games! - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1 }, true); expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); - game.onNextPrompt("MessagePhase", Mode.MESSAGE, () => { + game.onNextPrompt("MessagePhase", UiMode.MESSAGE, () => { game.endPhase(); }); @@ -186,7 +186,7 @@ describe("Fun And Games! - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; @@ -200,7 +200,7 @@ describe("Fun And Games! - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1 }, true); expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); - game.onNextPrompt("MessagePhase", Mode.MESSAGE, () => { + game.onNextPrompt("MessagePhase", UiMode.MESSAGE, () => { game.endPhase(); }); @@ -215,7 +215,7 @@ describe("Fun And Games! - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; @@ -230,7 +230,7 @@ describe("Fun And Games! - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1 }, true); expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); - game.onNextPrompt("MessagePhase", Mode.MESSAGE, () => { + game.onNextPrompt("MessagePhase", UiMode.MESSAGE, () => { game.endPhase(); }); @@ -245,7 +245,7 @@ describe("Fun And Games! - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; @@ -260,7 +260,7 @@ describe("Fun And Games! - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1 }, true); expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); - game.onNextPrompt("MessagePhase", Mode.MESSAGE, () => { + game.onNextPrompt("MessagePhase", UiMode.MESSAGE, () => { game.endPhase(); }); @@ -275,7 +275,7 @@ describe("Fun And Games! - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; diff --git a/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts b/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts index f68561c2286..576e99c4e18 100644 --- a/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts +++ b/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts @@ -15,10 +15,10 @@ import { modifierTypes } from "#app/modifier/modifier-type"; import { GlobalTradeSystemEncounter } from "#app/data/mystery-encounters/encounters/global-trade-system-encounter"; import { CIVILIZATION_ENCOUNTER_BIOMES } from "#app/data/mystery-encounters/mystery-encounters"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { ModifierTier } from "#app/modifier/modifier-tier"; -import * as Utils from "#app/utils"; +import * as Utils from "#app/utils/common"; const namespace = "mysteryEncounters/globalTradeSystem"; const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; @@ -231,7 +231,7 @@ describe("Global Trade System - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; diff --git a/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts b/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts index f620cbd6c36..2c61d03b29d 100644 --- a/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts +++ b/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts @@ -10,7 +10,7 @@ import { skipBattleRunMysteryEncounterRewardsPhase, } from "#test/mystery-encounter/encounter-test-utils"; import type BattleScene from "#app/battle-scene"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; @@ -166,7 +166,7 @@ describe("Mysterious Challengers - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; @@ -210,7 +210,7 @@ describe("Mysterious Challengers - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; @@ -267,7 +267,7 @@ describe("Mysterious Challengers - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; diff --git a/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts b/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts index 85c823038e8..4ff94c5a9bd 100644 --- a/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts +++ b/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts @@ -10,7 +10,7 @@ import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import GameManager from "#test/testUtils/gameManager"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { @@ -301,7 +301,7 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; diff --git a/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts b/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts index a9e6a339d36..e3440aee9e0 100644 --- a/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts @@ -18,7 +18,7 @@ import { Nature } from "#enums/nature"; import { BerryType } from "#enums/berry-type"; import { BattlerTagType } from "#enums/battler-tag-type"; import { PokemonMove } from "#app/field/pokemon"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { BerryModifier, PokemonBaseStatTotalModifier } from "#app/modifier/modifier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; @@ -236,7 +236,7 @@ describe("The Strong Stuff - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; diff --git a/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts b/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts index 94c8141aa1e..4cb712ce779 100644 --- a/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts @@ -7,7 +7,7 @@ import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { runMysteryEncounterToEnd } from "#test/mystery-encounter/encounter-test-utils"; import type BattleScene from "#app/battle-scene"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; @@ -299,7 +299,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; @@ -341,7 +341,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; @@ -359,7 +359,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { async function skipBattleToNextBattle(game: GameManager, isFinalBattle = false) { game.scene.clearPhaseQueue(); game.scene.clearPhaseQueueSplice(); - const commandUiHandler = game.scene.ui.handlers[Mode.COMMAND]; + const commandUiHandler = game.scene.ui.handlers[UiMode.COMMAND]; commandUiHandler.clear(); game.scene.getEnemyParty().forEach(p => { p.hp = 0; diff --git a/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts b/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts index df7bbb9f424..2f910a9250f 100644 --- a/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts +++ b/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts @@ -20,8 +20,8 @@ import { CommandPhase } from "#app/phases/command-phase"; import { MovePhase } from "#app/phases/move-phase"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; -import { Mode } from "#app/ui/ui"; -import * as Utils from "#app/utils"; +import { UiMode } from "#enums/ui-mode"; +import * as Utils from "#app/utils/common"; import { Moves } from "#enums/moves"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; @@ -246,7 +246,7 @@ describe("Trash to Treasure - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; diff --git a/test/mystery-encounter/encounters/weird-dream-encounter.test.ts b/test/mystery-encounter/encounters/weird-dream-encounter.test.ts index fbb88e346a8..f51ab45e4d4 100644 --- a/test/mystery-encounter/encounters/weird-dream-encounter.test.ts +++ b/test/mystery-encounter/encounters/weird-dream-encounter.test.ts @@ -10,7 +10,7 @@ import { skipBattleRunMysteryEncounterRewardsPhase, } from "#test/mystery-encounter/encounter-test-utils"; import type BattleScene from "#app/battle-scene"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; @@ -144,7 +144,7 @@ describe("Weird Dream - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; @@ -200,7 +200,7 @@ describe("Weird Dream - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; diff --git a/test/phases/learn-move-phase.test.ts b/test/phases/learn-move-phase.test.ts index 55b9d8b79d4..019b833d386 100644 --- a/test/phases/learn-move-phase.test.ts +++ b/test/phases/learn-move-phase.test.ts @@ -4,7 +4,7 @@ import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { Moves } from "#enums/moves"; import { LearnMovePhase } from "#app/phases/learn-move-phase"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { Button } from "#app/enums/buttons"; describe("Learn Move Phase", () => { @@ -52,10 +52,10 @@ describe("Learn Move Phase", () => { await game.doKillOpponents(); // queue up inputs to confirm dialog boxes - game.onNextPrompt("LearnMovePhase", Mode.CONFIRM, () => { + game.onNextPrompt("LearnMovePhase", UiMode.CONFIRM, () => { game.scene.ui.processInput(Button.ACTION); }); - game.onNextPrompt("LearnMovePhase", Mode.SUMMARY, () => { + game.onNextPrompt("LearnMovePhase", UiMode.SUMMARY, () => { for (let x = 0; x < moveSlotNum; x++) { game.scene.ui.processInput(Button.DOWN); } @@ -84,16 +84,16 @@ describe("Learn Move Phase", () => { await game.doKillOpponents(); // queue up inputs to confirm dialog boxes - game.onNextPrompt("LearnMovePhase", Mode.CONFIRM, () => { + game.onNextPrompt("LearnMovePhase", UiMode.CONFIRM, () => { game.scene.ui.processInput(Button.ACTION); }); - game.onNextPrompt("LearnMovePhase", Mode.SUMMARY, () => { + game.onNextPrompt("LearnMovePhase", UiMode.SUMMARY, () => { for (let x = 0; x < 4; x++) { game.scene.ui.processInput(Button.DOWN); // moves down 4 times to the 5th move slot } game.scene.ui.processInput(Button.ACTION); }); - game.onNextPrompt("LearnMovePhase", Mode.CONFIRM, () => { + game.onNextPrompt("LearnMovePhase", UiMode.CONFIRM, () => { game.scene.ui.processInput(Button.ACTION); }); await game.phaseInterceptor.to(LearnMovePhase); diff --git a/test/phases/mystery-encounter-phase.test.ts b/test/phases/mystery-encounter-phase.test.ts index f903932d2cb..34078b65039 100644 --- a/test/phases/mystery-encounter-phase.test.ts +++ b/test/phases/mystery-encounter-phase.test.ts @@ -3,7 +3,7 @@ import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { Species } from "#enums/species"; import { MysteryEncounterOptionSelectedPhase, MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { Button } from "#enums/buttons"; import type MysteryEncounterUiHandler from "#app/ui/mystery-encounter-ui-handler"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; @@ -50,7 +50,7 @@ describe("Mystery Encounter Phases", () => { Species.VOLCARONA, ]); - game.onNextPrompt("MysteryEncounterPhase", Mode.MYSTERY_ENCOUNTER, () => { + game.onNextPrompt("MysteryEncounterPhase", UiMode.MYSTERY_ENCOUNTER, () => { // End phase early for test game.phaseInterceptor.superEndPhase(); }); @@ -61,7 +61,7 @@ describe("Mystery Encounter Phases", () => { MysteryEncounterType.MYSTERIOUS_CHALLENGERS, ); expect(game.scene.mysteryEncounterSaveData.encounteredEvents[0].tier).toEqual(MysteryEncounterTier.GREAT); - expect(game.scene.ui.getMode()).toBe(Mode.MYSTERY_ENCOUNTER); + expect(game.scene.ui.getMode()).toBe(UiMode.MYSTERY_ENCOUNTER); }); it("Selects an option for MysteryEncounterPhase", async () => { @@ -73,7 +73,7 @@ describe("Mystery Encounter Phases", () => { Species.VOLCARONA, ]); - game.onNextPrompt("MysteryEncounterPhase", Mode.MESSAGE, () => { + game.onNextPrompt("MysteryEncounterPhase", UiMode.MESSAGE, () => { const handler = game.scene.ui.getHandler() as MessageUiHandler; handler.processInput(Button.ACTION); }); @@ -89,7 +89,7 @@ describe("Mystery Encounter Phases", () => { await vi.waitFor(() => expect(game.scene.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterOptionSelectedPhase.name), ); - expect(ui.getMode()).toBe(Mode.MESSAGE); + expect(ui.getMode()).toBe(UiMode.MESSAGE); expect(ui.showDialogue).toHaveBeenCalledTimes(1); expect(ui.showText).toHaveBeenCalledTimes(2); expect(ui.showDialogue).toHaveBeenCalledWith( diff --git a/test/phases/phases.test.ts b/test/phases/phases.test.ts index 96225c9151c..2483cfb317f 100644 --- a/test/phases/phases.test.ts +++ b/test/phases/phases.test.ts @@ -2,7 +2,7 @@ import type BattleScene from "#app/battle-scene"; import { LoginPhase } from "#app/phases/login-phase"; import { TitlePhase } from "#app/phases/title-phase"; import { UnavailablePhase } from "#app/phases/unavailable-phase"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -32,7 +32,7 @@ describe("Phases", () => { const loginPhase = new LoginPhase(); scene.unshiftPhase(loginPhase); await game.phaseInterceptor.to(LoginPhase); - expect(scene.ui.getMode()).to.equal(Mode.MESSAGE); + expect(scene.ui.getMode()).to.equal(UiMode.MESSAGE); }); }); @@ -41,7 +41,7 @@ describe("Phases", () => { const titlePhase = new TitlePhase(); scene.unshiftPhase(titlePhase); await game.phaseInterceptor.to(TitlePhase); - expect(scene.ui.getMode()).to.equal(Mode.TITLE); + expect(scene.ui.getMode()).to.equal(UiMode.TITLE); }); }); @@ -50,7 +50,7 @@ describe("Phases", () => { const unavailablePhase = new UnavailablePhase(); scene.unshiftPhase(unavailablePhase); await game.phaseInterceptor.to(UnavailablePhase); - expect(scene.ui.getMode()).to.equal(Mode.UNAVAILABLE); + expect(scene.ui.getMode()).to.equal(UiMode.UNAVAILABLE); }, 20000); }); }); diff --git a/test/phases/select-modifier-phase.test.ts b/test/phases/select-modifier-phase.test.ts index d352acea77a..85f8b472c4a 100644 --- a/test/phases/select-modifier-phase.test.ts +++ b/test/phases/select-modifier-phase.test.ts @@ -6,8 +6,8 @@ import type { CustomModifierSettings } from "#app/modifier/modifier-type"; import { ModifierTypeOption, modifierTypes } from "#app/modifier/modifier-type"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; -import { Mode } from "#app/ui/ui"; -import { shiftCharCodes } from "#app/utils"; +import { UiMode } from "#enums/ui-mode"; +import { shiftCharCodes } from "#app/utils/common"; import { Abilities } from "#enums/abilities"; import { Button } from "#enums/buttons"; import { Moves } from "#enums/moves"; @@ -51,7 +51,7 @@ describe("SelectModifierPhase", () => { scene.unshiftPhase(selectModifierPhase); await game.phaseInterceptor.to(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); }); it("should generate random modifiers", async () => { @@ -59,7 +59,7 @@ describe("SelectModifierPhase", () => { game.move.select(Moves.FISSURE); await game.phaseInterceptor.to("SelectModifierPhase"); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; @@ -97,7 +97,7 @@ describe("SelectModifierPhase", () => { // TODO: nagivate the ui to reroll somehow //const smphase = scene.getCurrentPhase() as SelectModifierPhase; - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; @@ -106,7 +106,7 @@ describe("SelectModifierPhase", () => { modifierSelectHandler.processInput(Button.ACTION); expect(scene.money).toBe(1000000 - 250); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); expect(modifierSelectHandler.options.length).toEqual(3); }); @@ -125,7 +125,7 @@ describe("SelectModifierPhase", () => { game.move.select(Moves.FISSURE); await game.phaseInterceptor.to("SelectModifierPhase"); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; @@ -134,7 +134,7 @@ describe("SelectModifierPhase", () => { // TODO: nagivate ui to reroll with lock capsule enabled - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); expect(modifierSelectHandler.options.length).toEqual(3); // Reroll with lock can still upgrade expect( @@ -168,7 +168,7 @@ describe("SelectModifierPhase", () => { game.move.select(Moves.SPLASH); await game.phaseInterceptor.to("SelectModifierPhase"); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; @@ -205,7 +205,7 @@ describe("SelectModifierPhase", () => { game.move.select(Moves.SPLASH); await game.phaseInterceptor.to("SelectModifierPhase"); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; @@ -244,7 +244,7 @@ describe("SelectModifierPhase", () => { game.move.select(Moves.SPLASH); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; @@ -268,7 +268,7 @@ describe("SelectModifierPhase", () => { game.move.select(Moves.SPLASH); await game.phaseInterceptor.run(SelectModifierPhase); - expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, ) as ModifierSelectUiHandler; diff --git a/test/plugins/api/pokerogue-account-api.test.ts b/test/plugins/api/pokerogue-account-api.test.ts index e7e1b2d52b0..3c37451960a 100644 --- a/test/plugins/api/pokerogue-account-api.test.ts +++ b/test/plugins/api/pokerogue-account-api.test.ts @@ -2,7 +2,8 @@ import type { AccountInfoResponse } from "#app/@types/PokerogueAccountApi"; import { SESSION_ID_COOKIE_NAME } from "#app/constants"; import { PokerogueAccountApi } from "#app/plugins/api/pokerogue-account-api"; import { getApiBaseUrl } from "#test/testUtils/testUtils"; -import * as Utils from "#app/utils"; +import * as CookieUtils from "#app/utils/cookies"; +import * as cookies from "#app/utils/cookies"; import { http, HttpResponse } from "msw"; import { beforeAll, afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { initServerForApiTests } from "#test/testUtils/testFileInitialization"; @@ -98,13 +99,13 @@ describe("Pokerogue Account API", () => { const loginParams = { username: "test", password: "test" }; it("should return null and set the cookie on SUCCESS", async () => { - vi.spyOn(Utils, "setCookie"); + vi.spyOn(CookieUtils, "setCookie"); server.use(http.post(`${apiBase}/account/login`, () => HttpResponse.json({ token: "abctest" }))); const error = await accountApi.login(loginParams); expect(error).toBeNull(); - expect(Utils.setCookie).toHaveBeenCalledWith(SESSION_ID_COOKIE_NAME, "abctest"); + expect(cookies.setCookie).toHaveBeenCalledWith(SESSION_ID_COOKIE_NAME, "abctest"); }); it("should return error message and report a warning on FAILURE", async () => { @@ -130,16 +131,16 @@ describe("Pokerogue Account API", () => { describe("Logout", () => { beforeEach(() => { - vi.spyOn(Utils, "removeCookie"); + vi.spyOn(CookieUtils, "removeCookie"); }); it("should remove cookie on success", async () => { - vi.spyOn(Utils, "setCookie"); + vi.spyOn(CookieUtils, "setCookie"); server.use(http.get(`${apiBase}/account/logout`, () => new HttpResponse("", { status: 200 }))); await accountApi.logout(); - expect(Utils.removeCookie).toHaveBeenCalledWith(SESSION_ID_COOKIE_NAME); + expect(cookies.removeCookie).toHaveBeenCalledWith(SESSION_ID_COOKIE_NAME); }); it("should report a warning on and remove cookie on FAILURE", async () => { @@ -147,7 +148,7 @@ describe("Pokerogue Account API", () => { await accountApi.logout(); - expect(Utils.removeCookie).toHaveBeenCalledWith(SESSION_ID_COOKIE_NAME); + expect(cookies.removeCookie).toHaveBeenCalledWith(SESSION_ID_COOKIE_NAME); expect(console.warn).toHaveBeenCalledWith("Log out failed!", expect.any(Error)); }); @@ -156,7 +157,7 @@ describe("Pokerogue Account API", () => { await accountApi.logout(); - expect(Utils.removeCookie).toHaveBeenCalledWith(SESSION_ID_COOKIE_NAME); + expect(cookies.removeCookie).toHaveBeenCalledWith(SESSION_ID_COOKIE_NAME); expect(console.warn).toHaveBeenCalledWith("Log out failed!", expect.any(Error)); }); }); diff --git a/test/reload.test.ts b/test/reload.test.ts index c69c0f9f484..93823e06cce 100644 --- a/test/reload.test.ts +++ b/test/reload.test.ts @@ -1,7 +1,7 @@ import { GameModes } from "#app/game-mode"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; import type OptionSelectUiHandler from "#app/ui/settings/option-select-ui-handler"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { Biome } from "#enums/biome"; import { Button } from "#enums/buttons"; import { Moves } from "#enums/moves"; @@ -58,7 +58,7 @@ describe("Reload", () => { // Transition from Wave 10 to Wave 11 in order to trigger biome switch game.move.select(Moves.SPLASH); await game.doKillOpponents(); - game.onNextPrompt("SelectBiomePhase", Mode.OPTION_SELECT, () => { + game.onNextPrompt("SelectBiomePhase", UiMode.OPTION_SELECT, () => { (game.scene.time as MockClock).overrideDelay = null; const optionSelectUiHandler = game.scene.ui.getHandler() as OptionSelectUiHandler; game.scene.time.delayedCall(1010, () => optionSelectUiHandler.processInput(Button.ACTION)); diff --git a/test/settingMenu/rebinding_setting.test.ts b/test/settingMenu/rebinding_setting.test.ts index 28b5d73d7cc..45c647248c4 100644 --- a/test/settingMenu/rebinding_setting.test.ts +++ b/test/settingMenu/rebinding_setting.test.ts @@ -2,7 +2,7 @@ import cfg_keyboard_qwerty from "#app/configs/inputs/cfg_keyboard_qwerty"; import { getKeyWithKeycode, getKeyWithSettingName } from "#app/configs/inputs/configHandler"; import type { InterfaceConfig } from "#app/inputs-controller"; import { SettingKeyboard } from "#app/system/settings/settings-keyboard"; -import { deepCopy } from "#app/utils"; +import { deepCopy } from "#app/utils/common"; import { Button } from "#enums/buttons"; import { Device } from "#enums/devices"; import { InGameManip } from "#test/settingMenu/helpers/inGameManip"; diff --git a/test/system/game_data.test.ts b/test/system/game_data.test.ts index 94e82949fe6..900fb672320 100644 --- a/test/system/game_data.test.ts +++ b/test/system/game_data.test.ts @@ -1,4 +1,4 @@ -import * as BattleScene from "#app/battle-scene"; +import * as bypassLoginModule from "#app/global-vars/bypass-login"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; import type { SessionSaveData } from "#app/system/game-data"; import { Abilities } from "#enums/abilities"; @@ -33,13 +33,13 @@ describe("System - Game Data", () => { describe("tryClearSession", () => { beforeEach(() => { - vi.spyOn(BattleScene, "bypassLogin", "get").mockReturnValue(false); + vi.spyOn(bypassLoginModule, "bypassLogin", "get").mockReturnValue(false); vi.spyOn(game.scene.gameData, "getSessionSaveData").mockReturnValue({} as SessionSaveData); vi.spyOn(account, "updateUserInfo").mockImplementation(async () => [true, 1]); }); it("should return [true, true] if bypassLogin is true", async () => { - vi.spyOn(BattleScene, "bypassLogin", "get").mockReturnValue(true); + vi.spyOn(bypassLoginModule, "bypassLogin", "get").mockReturnValue(true); const result = await game.scene.gameData.tryClearSession(0); diff --git a/test/testUtils/gameManager.ts b/test/testUtils/gameManager.ts index 390e71af126..874d8f786b8 100644 --- a/test/testUtils/gameManager.ts +++ b/test/testUtils/gameManager.ts @@ -30,8 +30,8 @@ import type CommandUiHandler from "#app/ui/command-ui-handler"; import type ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import type PartyUiHandler from "#app/ui/party-ui-handler"; import type TargetSelectUiHandler from "#app/ui/target-select-ui-handler"; -import { Mode } from "#app/ui/ui"; -import { isNullOrUndefined } from "#app/utils"; +import { UiMode } from "#enums/ui-mode"; +import { isNullOrUndefined } from "#app/utils/common"; import { BattleStyle } from "#enums/battle-style"; import { Button } from "#enums/buttons"; import { ExpGainsSpeed } from "#enums/exp-gains-speed"; @@ -102,7 +102,7 @@ export default class GameManager { if (!firstTimeScene) { this.scene.reset(false, true); - (this.scene.ui.handlers[Mode.STARTER_SELECT] as StarterSelectUiHandler).clearStarterPreferences(); + (this.scene.ui.handlers[UiMode.STARTER_SELECT] as StarterSelectUiHandler).clearStarterPreferences(); this.scene.clearAllPhases(); // Must be run after phase interceptor has been initialized. @@ -135,7 +135,7 @@ export default class GameManager { * Sets the game mode. * @param mode - The mode to set. */ - setMode(mode: Mode) { + setMode(mode: UiMode) { this.scene.ui?.setMode(mode); } @@ -144,7 +144,7 @@ export default class GameManager { * @param mode - The mode to wait for. * @returns A promise that resolves when the mode is set. */ - waitMode(mode: Mode): Promise { + waitMode(mode: UiMode): Promise { return new Promise(async resolve => { await waitUntil(() => this.scene.ui?.getMode() === mode); return resolve(); @@ -168,7 +168,7 @@ export default class GameManager { */ onNextPrompt( phaseTarget: string, - mode: Mode, + mode: UiMode, callback: () => void, expireFn?: () => void, awaitingActionInput = false, @@ -208,7 +208,7 @@ export default class GameManager { console.log("===to final boss encounter==="); await this.runToTitle(); - this.onNextPrompt("TitlePhase", Mode.TITLE, () => { + this.onNextPrompt("TitlePhase", UiMode.TITLE, () => { this.scene.gameMode = getGameMode(mode); const starters = generateStarter(this.scene, species); const selectStarterPhase = new SelectStarterPhase(); @@ -243,7 +243,7 @@ export default class GameManager { this.onNextPrompt( "TitlePhase", - Mode.TITLE, + UiMode.TITLE, () => { this.scene.gameMode = getGameMode(GameModes.CLASSIC); const starters = generateStarter(this.scene, species); @@ -256,7 +256,7 @@ export default class GameManager { this.onNextPrompt( "EncounterPhase", - Mode.MESSAGE, + UiMode.MESSAGE, () => { const handler = this.scene.ui.getHandler() as BattleMessageUiHandler; handler.processInput(Button.ACTION); @@ -284,9 +284,9 @@ export default class GameManager { if (this.scene.battleStyle === BattleStyle.SWITCH) { this.onNextPrompt( "CheckSwitchPhase", - Mode.CONFIRM, + UiMode.CONFIRM, () => { - this.setMode(Mode.MESSAGE); + this.setMode(UiMode.MESSAGE); this.endPhase(); }, () => this.isCurrentPhase(CommandPhase) || this.isCurrentPhase(TurnInitPhase), @@ -294,9 +294,9 @@ export default class GameManager { this.onNextPrompt( "CheckSwitchPhase", - Mode.CONFIRM, + UiMode.CONFIRM, () => { - this.setMode(Mode.MESSAGE); + this.setMode(UiMode.MESSAGE); this.endPhase(); }, () => this.isCurrentPhase(CommandPhase) || this.isCurrentPhase(TurnInitPhase), @@ -316,7 +316,7 @@ export default class GameManager { selectTarget(movePosition: number, targetIndex?: BattlerIndex) { this.onNextPrompt( "SelectTargetPhase", - Mode.TARGET_SELECT, + UiMode.TARGET_SELECT, () => { const handler = this.scene.ui.getHandler() as TargetSelectUiHandler; const move = (this.scene.getCurrentPhase() as SelectTargetPhase) @@ -351,7 +351,7 @@ export default class GameManager { doSelectModifier() { this.onNextPrompt( "SelectModifierPhase", - Mode.MODIFIER_SELECT, + UiMode.MODIFIER_SELECT, () => { const handler = this.scene.ui.getHandler() as ModifierSelectUiHandler; handler.processInput(Button.CANCEL); @@ -365,7 +365,7 @@ export default class GameManager { this.onNextPrompt( "SelectModifierPhase", - Mode.CONFIRM, + UiMode.CONFIRM, () => { const handler = this.scene.ui.getHandler() as ModifierSelectUiHandler; handler.processInput(Button.ACTION); @@ -427,9 +427,9 @@ export default class GameManager { this.onNextPrompt( "CheckSwitchPhase", - Mode.CONFIRM, + UiMode.CONFIRM, () => { - this.setMode(Mode.MESSAGE); + this.setMode(UiMode.MESSAGE); this.endPhase(); }, () => this.isCurrentPhase(TurnInitPhase), @@ -461,7 +461,7 @@ export default class GameManager { * @param mode - The target mode. * @returns True if the current mode matches the target mode, otherwise false. */ - isCurrentMode(mode: Mode) { + isCurrentMode(mode: UiMode) { return this.scene.ui?.getMode() === mode; } @@ -516,7 +516,7 @@ export default class GameManager { * @param pokemonIndex the index of the pokemon in your party to switch to */ doSwitchPokemon(pokemonIndex: number) { - this.onNextPrompt("CommandPhase", Mode.COMMAND, () => { + this.onNextPrompt("CommandPhase", UiMode.COMMAND, () => { (this.scene.ui.getHandler() as CommandUiHandler).setCursor(2); (this.scene.ui.getHandler() as CommandUiHandler).processInput(Button.ACTION); }); @@ -545,7 +545,7 @@ export default class GameManager { * non-command switch actions happen in SwitchPhase. */ doSelectPartyPokemon(slot: number, inPhase = "SwitchPhase") { - this.onNextPrompt(inPhase, Mode.PARTY, () => { + this.onNextPrompt(inPhase, UiMode.PARTY, () => { const partyHandler = this.scene.ui.getHandler() as PartyUiHandler; partyHandler.setCursor(slot); @@ -560,12 +560,12 @@ export default class GameManager { * @param ballIndex the index of the pokeball to throw */ public doThrowPokeball(ballIndex: number) { - this.onNextPrompt("CommandPhase", Mode.COMMAND, () => { + this.onNextPrompt("CommandPhase", UiMode.COMMAND, () => { (this.scene.ui.getHandler() as CommandUiHandler).setCursor(1); (this.scene.ui.getHandler() as CommandUiHandler).processInput(Button.ACTION); }); - this.onNextPrompt("CommandPhase", Mode.BALL, () => { + this.onNextPrompt("CommandPhase", UiMode.BALL, () => { const ballHandler = this.scene.ui.getHandler() as BallUiHandler; ballHandler.setCursor(ballIndex); ballHandler.processInput(Button.ACTION); // select ball and throw diff --git a/test/testUtils/gameWrapper.ts b/test/testUtils/gameWrapper.ts index 02865701ed0..050e9f13257 100644 --- a/test/testUtils/gameWrapper.ts +++ b/test/testUtils/gameWrapper.ts @@ -1,8 +1,9 @@ // @ts-nocheck - TODO: remove this -import BattleScene, * as battleScene from "#app/battle-scene"; +import BattleScene from "#app/battle-scene"; import { MoveAnim } from "#app/data/battle-anims"; import Pokemon from "#app/field/pokemon"; -import { setCookie, sessionIdKey } from "#app/utils"; +import { sessionIdKey } from "#app/utils/common"; +import { setCookie } from "#app/utils/cookies"; import { blobToString } from "#test/testUtils/gameManagerUtils"; import { MockClock } from "#test/testUtils/mocks/mockClock"; import { MockFetch } from "#test/testUtils/mocks/mockFetch"; @@ -20,6 +21,8 @@ import KeyboardPlugin = Phaser.Input.Keyboard.KeyboardPlugin; import GamepadPlugin = Phaser.Input.Gamepad.GamepadPlugin; import EventEmitter = Phaser.Events.EventEmitter; import UpdateList = Phaser.GameObjects.UpdateList; +// biome-ignore lint/style/noNamespaceImport: Necessary in order to mock the var +import * as bypassLoginModule from "#app/global-vars/bypass-login"; window.URL.createObjectURL = (blob: Blob) => { blobToString(blob).then((data: string) => { @@ -43,7 +46,7 @@ export default class GameWrapper { Phaser.Math.RND.sow(["test"]); // vi.spyOn(Utils, "apiFetch", "get").mockReturnValue(fetch); if (bypassLogin) { - vi.spyOn(battleScene, "bypassLogin", "get").mockReturnValue(true); + vi.spyOn(bypassLoginModule, "bypassLogin", "get").mockReturnValue(true); } this.game = phaserGame; MoveAnim.prototype.getAnim = () => ({ diff --git a/test/testUtils/helpers/challengeModeHelper.ts b/test/testUtils/helpers/challengeModeHelper.ts index 0b7826eda7e..3a4f2adcd09 100644 --- a/test/testUtils/helpers/challengeModeHelper.ts +++ b/test/testUtils/helpers/challengeModeHelper.ts @@ -3,7 +3,7 @@ import type { Species } from "#app/enums/species"; import overrides from "#app/overrides"; import { EncounterPhase } from "#app/phases/encounter-phase"; import { SelectStarterPhase } from "#app/phases/select-starter-phase"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { generateStarter } from "../gameManagerUtils"; import { GameManagerHelper } from "./gameManagerHelper"; import type { Challenge } from "#app/data/challenge"; @@ -41,7 +41,7 @@ export class ChallengeModeHelper extends GameManagerHelper { this.game.override.shiny(false).enemyShiny(false); } - this.game.onNextPrompt("TitlePhase", Mode.TITLE, () => { + this.game.onNextPrompt("TitlePhase", UiMode.TITLE, () => { this.game.scene.gameMode.challenges = this.challenges; const starters = generateStarter(this.game.scene, species); const selectStarterPhase = new SelectStarterPhase(); @@ -66,9 +66,9 @@ export class ChallengeModeHelper extends GameManagerHelper { if (this.game.scene.battleStyle === BattleStyle.SWITCH) { this.game.onNextPrompt( "CheckSwitchPhase", - Mode.CONFIRM, + UiMode.CONFIRM, () => { - this.game.setMode(Mode.MESSAGE); + this.game.setMode(UiMode.MESSAGE); this.game.endPhase(); }, () => this.game.isCurrentPhase(CommandPhase) || this.game.isCurrentPhase(TurnInitPhase), @@ -76,9 +76,9 @@ export class ChallengeModeHelper extends GameManagerHelper { this.game.onNextPrompt( "CheckSwitchPhase", - Mode.CONFIRM, + UiMode.CONFIRM, () => { - this.game.setMode(Mode.MESSAGE); + this.game.setMode(UiMode.MESSAGE); this.game.endPhase(); }, () => this.game.isCurrentPhase(CommandPhase) || this.game.isCurrentPhase(TurnInitPhase), diff --git a/test/testUtils/helpers/classicModeHelper.ts b/test/testUtils/helpers/classicModeHelper.ts index 5b6a38f5747..8e1ac95c733 100644 --- a/test/testUtils/helpers/classicModeHelper.ts +++ b/test/testUtils/helpers/classicModeHelper.ts @@ -6,7 +6,7 @@ import { CommandPhase } from "#app/phases/command-phase"; import { EncounterPhase } from "#app/phases/encounter-phase"; import { SelectStarterPhase } from "#app/phases/select-starter-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { generateStarter } from "../gameManagerUtils"; import { GameManagerHelper } from "./gameManagerHelper"; @@ -26,7 +26,7 @@ export class ClassicModeHelper extends GameManagerHelper { this.game.override.shiny(false).enemyShiny(false); } - this.game.onNextPrompt("TitlePhase", Mode.TITLE, () => { + this.game.onNextPrompt("TitlePhase", UiMode.TITLE, () => { this.game.scene.gameMode = getGameMode(GameModes.CLASSIC); const starters = generateStarter(this.game.scene, species); const selectStarterPhase = new SelectStarterPhase(); @@ -51,9 +51,9 @@ export class ClassicModeHelper extends GameManagerHelper { if (this.game.scene.battleStyle === BattleStyle.SWITCH) { this.game.onNextPrompt( "CheckSwitchPhase", - Mode.CONFIRM, + UiMode.CONFIRM, () => { - this.game.setMode(Mode.MESSAGE); + this.game.setMode(UiMode.MESSAGE); this.game.endPhase(); }, () => this.game.isCurrentPhase(CommandPhase) || this.game.isCurrentPhase(TurnInitPhase), @@ -61,9 +61,9 @@ export class ClassicModeHelper extends GameManagerHelper { this.game.onNextPrompt( "CheckSwitchPhase", - Mode.CONFIRM, + UiMode.CONFIRM, () => { - this.game.setMode(Mode.MESSAGE); + this.game.setMode(UiMode.MESSAGE); this.game.endPhase(); }, () => this.game.isCurrentPhase(CommandPhase) || this.game.isCurrentPhase(TurnInitPhase), diff --git a/test/testUtils/helpers/dailyModeHelper.ts b/test/testUtils/helpers/dailyModeHelper.ts index 0f5bc84df68..8ee03ce5f89 100644 --- a/test/testUtils/helpers/dailyModeHelper.ts +++ b/test/testUtils/helpers/dailyModeHelper.ts @@ -6,7 +6,7 @@ import { EncounterPhase } from "#app/phases/encounter-phase"; import { TitlePhase } from "#app/phases/title-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; import type SaveSlotSelectUiHandler from "#app/ui/save-slot-select-ui-handler"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { GameManagerHelper } from "./gameManagerHelper"; /** @@ -24,12 +24,12 @@ export class DailyModeHelper extends GameManagerHelper { this.game.override.shiny(false).enemyShiny(false); } - this.game.onNextPrompt("TitlePhase", Mode.TITLE, () => { + this.game.onNextPrompt("TitlePhase", UiMode.TITLE, () => { const titlePhase = new TitlePhase(); titlePhase.initDailyRun(); }); - this.game.onNextPrompt("TitlePhase", Mode.SAVE_SLOT, () => { + this.game.onNextPrompt("TitlePhase", UiMode.SAVE_SLOT, () => { const uihandler = this.game.scene.ui.getHandler(); uihandler.processInput(Button.ACTION); // select first slot. that's fine }); @@ -51,9 +51,9 @@ export class DailyModeHelper extends GameManagerHelper { if (this.game.scene.battleStyle === BattleStyle.SWITCH) { this.game.onNextPrompt( "CheckSwitchPhase", - Mode.CONFIRM, + UiMode.CONFIRM, () => { - this.game.setMode(Mode.MESSAGE); + this.game.setMode(UiMode.MESSAGE); this.game.endPhase(); }, () => this.game.isCurrentPhase(CommandPhase) || this.game.isCurrentPhase(TurnInitPhase), @@ -61,9 +61,9 @@ export class DailyModeHelper extends GameManagerHelper { this.game.onNextPrompt( "CheckSwitchPhase", - Mode.CONFIRM, + UiMode.CONFIRM, () => { - this.game.setMode(Mode.MESSAGE); + this.game.setMode(UiMode.MESSAGE); this.game.endPhase(); }, () => this.game.isCurrentPhase(CommandPhase) || this.game.isCurrentPhase(TurnInitPhase), diff --git a/test/testUtils/helpers/moveHelper.ts b/test/testUtils/helpers/moveHelper.ts index a54028ebca0..edade109966 100644 --- a/test/testUtils/helpers/moveHelper.ts +++ b/test/testUtils/helpers/moveHelper.ts @@ -7,7 +7,7 @@ import type { CommandPhase } from "#app/phases/command-phase"; import { LearnMovePhase } from "#app/phases/learn-move-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Command } from "#app/ui/command-ui-handler"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { Moves } from "#enums/moves"; import { getMovePosition } from "#test/testUtils/gameManagerUtils"; import { GameManagerHelper } from "#test/testUtils/helpers/gameManagerHelper"; @@ -53,10 +53,10 @@ export class MoveHelper extends GameManagerHelper { public select(move: Moves, pkmIndex: 0 | 1 = 0, targetIndex?: BattlerIndex | null) { const movePosition = getMovePosition(this.game.scene, pkmIndex, move); - this.game.onNextPrompt("CommandPhase", Mode.COMMAND, () => { - this.game.scene.ui.setMode(Mode.FIGHT, (this.game.scene.getCurrentPhase() as CommandPhase).getFieldIndex()); + this.game.onNextPrompt("CommandPhase", UiMode.COMMAND, () => { + this.game.scene.ui.setMode(UiMode.FIGHT, (this.game.scene.getCurrentPhase() as CommandPhase).getFieldIndex()); }); - this.game.onNextPrompt("CommandPhase", Mode.FIGHT, () => { + this.game.onNextPrompt("CommandPhase", UiMode.FIGHT, () => { (this.game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, movePosition, false); }); @@ -76,14 +76,14 @@ export class MoveHelper extends GameManagerHelper { const movePosition = getMovePosition(this.game.scene, pkmIndex, move); this.game.scene.getPlayerParty()[pkmIndex].isTerastallized = false; - this.game.onNextPrompt("CommandPhase", Mode.COMMAND, () => { + this.game.onNextPrompt("CommandPhase", UiMode.COMMAND, () => { this.game.scene.ui.setMode( - Mode.FIGHT, + UiMode.FIGHT, (this.game.scene.getCurrentPhase() as CommandPhase).getFieldIndex(), Command.TERA, ); }); - this.game.onNextPrompt("CommandPhase", Mode.FIGHT, () => { + this.game.onNextPrompt("CommandPhase", UiMode.FIGHT, () => { (this.game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.TERA, movePosition, false); }); @@ -135,16 +135,16 @@ export class MoveHelper extends GameManagerHelper { // if slots are full, queue up inputs to replace existing moves if (this.game.scene.getPlayerParty()[partyIndex].moveset.filter(m => m).length === 4) { - this.game.onNextPrompt("LearnMovePhase", Mode.CONFIRM, () => { + this.game.onNextPrompt("LearnMovePhase", UiMode.CONFIRM, () => { this.game.scene.ui.processInput(Button.ACTION); // "Should a move be forgotten and replaced with XXX?" }); - this.game.onNextPrompt("LearnMovePhase", Mode.SUMMARY, () => { + this.game.onNextPrompt("LearnMovePhase", UiMode.SUMMARY, () => { for (let x = 0; x < (moveSlotIndex ?? 0); x++) { this.game.scene.ui.processInput(Button.DOWN); // Scrolling in summary pane to move position } this.game.scene.ui.processInput(Button.ACTION); if (moveSlotIndex === 4) { - this.game.onNextPrompt("LearnMovePhase", Mode.CONFIRM, () => { + this.game.onNextPrompt("LearnMovePhase", UiMode.CONFIRM, () => { this.game.scene.ui.processInput(Button.ACTION); // "Give up on learning XXX?" }); } diff --git a/test/testUtils/helpers/overridesHelper.ts b/test/testUtils/helpers/overridesHelper.ts index d570a1a4195..6aa382ef59a 100644 --- a/test/testUtils/helpers/overridesHelper.ts +++ b/test/testUtils/helpers/overridesHelper.ts @@ -14,7 +14,7 @@ import { StatusEffect } from "#enums/status-effect"; import type { WeatherType } from "#enums/weather-type"; import { expect, vi } from "vitest"; import { GameManagerHelper } from "./gameManagerHelper"; -import { shiftCharCodes } from "#app/utils"; +import { shiftCharCodes } from "#app/utils/common"; import type { RandomTrainerOverride } from "#app/overrides"; import type { BattleType } from "#enums/battle-type"; diff --git a/test/testUtils/helpers/reloadHelper.ts b/test/testUtils/helpers/reloadHelper.ts index 842cd88b95c..4867a146aaf 100644 --- a/test/testUtils/helpers/reloadHelper.ts +++ b/test/testUtils/helpers/reloadHelper.ts @@ -1,6 +1,6 @@ import { GameManagerHelper } from "./gameManagerHelper"; import { TitlePhase } from "#app/phases/title-phase"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { vi } from "vitest"; import { BattleStyle } from "#app/enums/battle-style"; import { CommandPhase } from "#app/phases/command-phase"; @@ -53,9 +53,9 @@ export class ReloadHelper extends GameManagerHelper { if (this.game.scene.battleStyle === BattleStyle.SWITCH) { this.game.onNextPrompt( "CheckSwitchPhase", - Mode.CONFIRM, + UiMode.CONFIRM, () => { - this.game.setMode(Mode.MESSAGE); + this.game.setMode(UiMode.MESSAGE); this.game.endPhase(); }, () => this.game.isCurrentPhase(CommandPhase) || this.game.isCurrentPhase(TurnInitPhase), @@ -63,9 +63,9 @@ export class ReloadHelper extends GameManagerHelper { this.game.onNextPrompt( "CheckSwitchPhase", - Mode.CONFIRM, + UiMode.CONFIRM, () => { - this.game.setMode(Mode.MESSAGE); + this.game.setMode(UiMode.MESSAGE); this.game.endPhase(); }, () => this.game.isCurrentPhase(CommandPhase) || this.game.isCurrentPhase(TurnInitPhase), diff --git a/test/testUtils/phaseInterceptor.ts b/test/testUtils/phaseInterceptor.ts index 742a6bc8441..3d56c513c00 100644 --- a/test/testUtils/phaseInterceptor.ts +++ b/test/testUtils/phaseInterceptor.ts @@ -43,7 +43,8 @@ import { TurnStartPhase } from "#app/phases/turn-start-phase"; import { UnavailablePhase } from "#app/phases/unavailable-phase"; import { VictoryPhase } from "#app/phases/victory-phase"; import { PartyHealPhase } from "#app/phases/party-heal-phase"; -import UI, { Mode } from "#app/ui/ui"; +import UI from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { SelectBiomePhase } from "#app/phases/select-biome-phase"; import { MysteryEncounterBattlePhase, @@ -64,7 +65,7 @@ import { RevivalBlessingPhase } from "#app/phases/revival-blessing-phase"; export interface PromptHandler { phaseTarget?: string; - mode?: Mode; + mode?: UiMode; callback?: () => void; expireFn?: () => void; awaitingActionInput?: boolean; @@ -487,13 +488,13 @@ export default class PhaseInterceptor { /** * m2m to set mode. - * @param mode - The {@linkcode Mode} to set. + * @param mode - The {@linkcode UiMode} to set. * @param args - Additional arguments to pass to the original method. */ - setMode(mode: Mode, ...args: unknown[]): Promise { + setMode(mode: UiMode, ...args: unknown[]): Promise { const currentPhase = this.scene.getCurrentPhase(); const instance = this.scene.ui; - console.log("setMode", `${Mode[mode]} (=${mode})`, args); + console.log("setMode", `${UiMode[mode]} (=${mode})`, args); const ret = this.originalSetMode.apply(instance, [mode, ...args]); if (!this.phases[currentPhase.constructor.name]) { throw new Error( @@ -546,7 +547,7 @@ export default class PhaseInterceptor { */ addToNextPrompt( phaseTarget: string, - mode: Mode, + mode: UiMode, callback: () => void, expireFn?: () => void, awaitingActionInput = false, diff --git a/test/testUtils/testFileInitialization.ts b/test/testUtils/testFileInitialization.ts index cb2cd57044d..414e34e024b 100644 --- a/test/testUtils/testFileInitialization.ts +++ b/test/testUtils/testFileInitialization.ts @@ -11,7 +11,7 @@ import { initSpecies } from "#app/data/pokemon-species"; import { initAchievements } from "#app/system/achv"; import { initVouchers } from "#app/system/voucher"; import { initStatsKeys } from "#app/ui/game-stats-ui-handler"; -import { setCookie } from "#app/utils"; +import { setCookie } from "#app/utils/cookies"; import { blobToString } from "#test/testUtils/gameManagerUtils"; import { MockConsoleLog } from "#test/testUtils/mocks/mockConsoleLog"; import { mockContext } from "#test/testUtils/mocks/mockContextCanvas"; @@ -21,6 +21,7 @@ import Phaser from "phaser"; import InputText from "phaser3-rex-plugins/plugins/inputtext"; import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; import { manageListeners } from "./listenersManager"; +import { initI18n } from "#app/plugins/i18n"; let wasInitialized = false; /** @@ -87,6 +88,7 @@ export function initTestFile() { // initSpecies(); if (!wasInitialized) { wasInitialized = true; + initI18n(); initVouchers(); initAchievements(); initStatsKeys(); diff --git a/test/ui/starter-select.test.ts b/test/ui/starter-select.test.ts index 1d523c3bbd5..b402e02e2d7 100644 --- a/test/ui/starter-select.test.ts +++ b/test/ui/starter-select.test.ts @@ -9,7 +9,7 @@ import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler" import type SaveSlotSelectUiHandler from "#app/ui/save-slot-select-ui-handler"; import type OptionSelectUiHandler from "#app/ui/settings/option-select-ui-handler"; import type StarterSelectUiHandler from "#app/ui/starter-select-ui-handler"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import { Abilities } from "#enums/abilities"; import { Button } from "#enums/buttons"; import { Species } from "#enums/species"; @@ -44,12 +44,12 @@ describe("UI - Starter select", () => { }).length; expect(caughtCount).toBe(Object.keys(allSpecies).length); await game.runToTitle(); - game.onNextPrompt("TitlePhase", Mode.TITLE, () => { + game.onNextPrompt("TitlePhase", UiMode.TITLE, () => { const currentPhase = game.scene.getCurrentPhase() as TitlePhase; currentPhase.gameMode = GameModes.CLASSIC; currentPhase.end(); }); - game.onNextPrompt("SelectStarterPhase", Mode.STARTER_SELECT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.STARTER_SELECT, () => { const handler = game.scene.ui.getHandler() as StarterSelectUiHandler; handler.processInput(Button.RIGHT); handler.processInput(Button.LEFT); @@ -60,7 +60,7 @@ describe("UI - Starter select", () => { let options: OptionSelectItem[] = []; let optionSelectUiHandler: OptionSelectUiHandler | undefined; await new Promise(resolve => { - game.onNextPrompt("SelectStarterPhase", Mode.OPTION_SELECT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.OPTION_SELECT, () => { optionSelectUiHandler = game.scene.ui.getHandler() as OptionSelectUiHandler; options = optionSelectUiHandler.getOptionsWithScroll(); resolve(); @@ -74,15 +74,15 @@ describe("UI - Starter select", () => { optionSelectUiHandler?.processInput(Button.ACTION); await new Promise(resolve => { - game.onNextPrompt("SelectStarterPhase", Mode.STARTER_SELECT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.STARTER_SELECT, () => { const handler = game.scene.ui.getHandler() as StarterSelectUiHandler; handler.processInput(Button.SUBMIT); }); - game.onNextPrompt("SelectStarterPhase", Mode.CONFIRM, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.CONFIRM, () => { const handler = game.scene.ui.getHandler() as StarterSelectUiHandler; handler.processInput(Button.ACTION); }); - game.onNextPrompt("SelectStarterPhase", Mode.SAVE_SLOT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.SAVE_SLOT, () => { const saveSlotSelectUiHandler = game.scene.ui.getHandler() as SaveSlotSelectUiHandler; saveSlotSelectUiHandler.processInput(Button.ACTION); resolve(); @@ -104,12 +104,12 @@ describe("UI - Starter select", () => { }).length; expect(caughtCount).toBe(Object.keys(allSpecies).length); await game.runToTitle(); - game.onNextPrompt("TitlePhase", Mode.TITLE, () => { + game.onNextPrompt("TitlePhase", UiMode.TITLE, () => { const currentPhase = game.scene.getCurrentPhase() as TitlePhase; currentPhase.gameMode = GameModes.CLASSIC; currentPhase.end(); }); - game.onNextPrompt("SelectStarterPhase", Mode.STARTER_SELECT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.STARTER_SELECT, () => { const handler = game.scene.ui.getHandler() as StarterSelectUiHandler; handler.processInput(Button.RIGHT); handler.processInput(Button.LEFT); @@ -121,7 +121,7 @@ describe("UI - Starter select", () => { let options: OptionSelectItem[] = []; let optionSelectUiHandler: OptionSelectUiHandler | undefined; await new Promise(resolve => { - game.onNextPrompt("SelectStarterPhase", Mode.OPTION_SELECT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.OPTION_SELECT, () => { optionSelectUiHandler = game.scene.ui.getHandler() as OptionSelectUiHandler; options = optionSelectUiHandler.getOptionsWithScroll(); resolve(); @@ -135,15 +135,15 @@ describe("UI - Starter select", () => { optionSelectUiHandler?.processInput(Button.ACTION); await new Promise(resolve => { - game.onNextPrompt("SelectStarterPhase", Mode.STARTER_SELECT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.STARTER_SELECT, () => { const handler = game.scene.ui.getHandler() as StarterSelectUiHandler; handler.processInput(Button.SUBMIT); }); - game.onNextPrompt("SelectStarterPhase", Mode.CONFIRM, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.CONFIRM, () => { const handler = game.scene.ui.getHandler() as StarterSelectUiHandler; handler.processInput(Button.ACTION); }); - game.onNextPrompt("SelectStarterPhase", Mode.SAVE_SLOT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.SAVE_SLOT, () => { const saveSlotSelectUiHandler = game.scene.ui.getHandler() as SaveSlotSelectUiHandler; saveSlotSelectUiHandler.processInput(Button.ACTION); resolve(); @@ -166,12 +166,12 @@ describe("UI - Starter select", () => { }).length; expect(caughtCount).toBe(Object.keys(allSpecies).length); await game.runToTitle(); - game.onNextPrompt("TitlePhase", Mode.TITLE, () => { + game.onNextPrompt("TitlePhase", UiMode.TITLE, () => { const currentPhase = game.scene.getCurrentPhase() as TitlePhase; currentPhase.gameMode = GameModes.CLASSIC; currentPhase.end(); }); - game.onNextPrompt("SelectStarterPhase", Mode.STARTER_SELECT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.STARTER_SELECT, () => { const handler = game.scene.ui.getHandler() as StarterSelectUiHandler; handler.processInput(Button.RIGHT); handler.processInput(Button.LEFT); @@ -185,7 +185,7 @@ describe("UI - Starter select", () => { let options: OptionSelectItem[] = []; let optionSelectUiHandler: OptionSelectUiHandler | undefined; await new Promise(resolve => { - game.onNextPrompt("SelectStarterPhase", Mode.OPTION_SELECT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.OPTION_SELECT, () => { optionSelectUiHandler = game.scene.ui.getHandler() as OptionSelectUiHandler; options = optionSelectUiHandler.getOptionsWithScroll(); resolve(); @@ -199,15 +199,15 @@ describe("UI - Starter select", () => { optionSelectUiHandler?.processInput(Button.ACTION); await new Promise(resolve => { - game.onNextPrompt("SelectStarterPhase", Mode.STARTER_SELECT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.STARTER_SELECT, () => { const handler = game.scene.ui.getHandler() as StarterSelectUiHandler; handler.processInput(Button.SUBMIT); }); - game.onNextPrompt("SelectStarterPhase", Mode.CONFIRM, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.CONFIRM, () => { const handler = game.scene.ui.getHandler() as StarterSelectUiHandler; handler.processInput(Button.ACTION); }); - game.onNextPrompt("SelectStarterPhase", Mode.SAVE_SLOT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.SAVE_SLOT, () => { const saveSlotSelectUiHandler = game.scene.ui.getHandler() as SaveSlotSelectUiHandler; saveSlotSelectUiHandler.processInput(Button.ACTION); resolve(); @@ -231,12 +231,12 @@ describe("UI - Starter select", () => { }).length; expect(caughtCount).toBe(Object.keys(allSpecies).length); await game.runToTitle(); - game.onNextPrompt("TitlePhase", Mode.TITLE, () => { + game.onNextPrompt("TitlePhase", UiMode.TITLE, () => { const currentPhase = game.scene.getCurrentPhase() as TitlePhase; currentPhase.gameMode = GameModes.CLASSIC; currentPhase.end(); }); - game.onNextPrompt("SelectStarterPhase", Mode.STARTER_SELECT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.STARTER_SELECT, () => { const handler = game.scene.ui.getHandler() as StarterSelectUiHandler; handler.processInput(Button.RIGHT); handler.processInput(Button.LEFT); @@ -248,7 +248,7 @@ describe("UI - Starter select", () => { let options: OptionSelectItem[] = []; let optionSelectUiHandler: OptionSelectUiHandler | undefined; await new Promise(resolve => { - game.onNextPrompt("SelectStarterPhase", Mode.OPTION_SELECT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.OPTION_SELECT, () => { optionSelectUiHandler = game.scene.ui.getHandler() as OptionSelectUiHandler; options = optionSelectUiHandler.getOptionsWithScroll(); resolve(); @@ -262,15 +262,15 @@ describe("UI - Starter select", () => { optionSelectUiHandler?.processInput(Button.ACTION); await new Promise(resolve => { - game.onNextPrompt("SelectStarterPhase", Mode.STARTER_SELECT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.STARTER_SELECT, () => { const handler = game.scene.ui.getHandler() as StarterSelectUiHandler; handler.processInput(Button.SUBMIT); }); - game.onNextPrompt("SelectStarterPhase", Mode.CONFIRM, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.CONFIRM, () => { const handler = game.scene.ui.getHandler() as StarterSelectUiHandler; handler.processInput(Button.ACTION); }); - game.onNextPrompt("SelectStarterPhase", Mode.SAVE_SLOT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.SAVE_SLOT, () => { const saveSlotSelectUiHandler = game.scene.ui.getHandler() as SaveSlotSelectUiHandler; saveSlotSelectUiHandler.processInput(Button.ACTION); resolve(); @@ -292,12 +292,12 @@ describe("UI - Starter select", () => { }).length; expect(caughtCount).toBe(Object.keys(allSpecies).length); await game.runToTitle(); - game.onNextPrompt("TitlePhase", Mode.TITLE, () => { + game.onNextPrompt("TitlePhase", UiMode.TITLE, () => { const currentPhase = game.scene.getCurrentPhase() as TitlePhase; currentPhase.gameMode = GameModes.CLASSIC; currentPhase.end(); }); - game.onNextPrompt("SelectStarterPhase", Mode.STARTER_SELECT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.STARTER_SELECT, () => { const handler = game.scene.ui.getHandler() as StarterSelectUiHandler; handler.processInput(Button.RIGHT); handler.processInput(Button.LEFT); @@ -309,7 +309,7 @@ describe("UI - Starter select", () => { let options: OptionSelectItem[] = []; let optionSelectUiHandler: OptionSelectUiHandler | undefined; await new Promise(resolve => { - game.onNextPrompt("SelectStarterPhase", Mode.OPTION_SELECT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.OPTION_SELECT, () => { optionSelectUiHandler = game.scene.ui.getHandler() as OptionSelectUiHandler; options = optionSelectUiHandler.getOptionsWithScroll(); resolve(); @@ -323,15 +323,15 @@ describe("UI - Starter select", () => { optionSelectUiHandler?.processInput(Button.ACTION); await new Promise(resolve => { - game.onNextPrompt("SelectStarterPhase", Mode.STARTER_SELECT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.STARTER_SELECT, () => { const handler = game.scene.ui.getHandler() as StarterSelectUiHandler; handler.processInput(Button.SUBMIT); }); - game.onNextPrompt("SelectStarterPhase", Mode.CONFIRM, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.CONFIRM, () => { const handler = game.scene.ui.getHandler() as StarterSelectUiHandler; handler.processInput(Button.ACTION); }); - game.onNextPrompt("SelectStarterPhase", Mode.SAVE_SLOT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.SAVE_SLOT, () => { const saveSlotSelectUiHandler = game.scene.ui.getHandler() as SaveSlotSelectUiHandler; saveSlotSelectUiHandler.processInput(Button.ACTION); resolve(); @@ -352,12 +352,12 @@ describe("UI - Starter select", () => { }).length; expect(caughtCount).toBe(Object.keys(allSpecies).length); await game.runToTitle(); - game.onNextPrompt("TitlePhase", Mode.TITLE, () => { + game.onNextPrompt("TitlePhase", UiMode.TITLE, () => { const currentPhase = game.scene.getCurrentPhase() as TitlePhase; currentPhase.gameMode = GameModes.CLASSIC; currentPhase.end(); }); - game.onNextPrompt("SelectStarterPhase", Mode.STARTER_SELECT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.STARTER_SELECT, () => { const handler = game.scene.ui.getHandler() as StarterSelectUiHandler; handler.processInput(Button.RIGHT); handler.processInput(Button.LEFT); @@ -371,7 +371,7 @@ describe("UI - Starter select", () => { let options: OptionSelectItem[] = []; let optionSelectUiHandler: OptionSelectUiHandler | undefined; await new Promise(resolve => { - game.onNextPrompt("SelectStarterPhase", Mode.OPTION_SELECT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.OPTION_SELECT, () => { optionSelectUiHandler = game.scene.ui.getHandler() as OptionSelectUiHandler; options = optionSelectUiHandler.getOptionsWithScroll(); resolve(); @@ -385,15 +385,15 @@ describe("UI - Starter select", () => { optionSelectUiHandler?.processInput(Button.ACTION); await new Promise(resolve => { - game.onNextPrompt("SelectStarterPhase", Mode.STARTER_SELECT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.STARTER_SELECT, () => { const handler = game.scene.ui.getHandler() as StarterSelectUiHandler; handler.processInput(Button.SUBMIT); }); - game.onNextPrompt("SelectStarterPhase", Mode.CONFIRM, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.CONFIRM, () => { const handler = game.scene.ui.getHandler() as StarterSelectUiHandler; handler.processInput(Button.ACTION); }); - game.onNextPrompt("SelectStarterPhase", Mode.SAVE_SLOT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.SAVE_SLOT, () => { const saveSlotSelectUiHandler = game.scene.ui.getHandler() as SaveSlotSelectUiHandler; saveSlotSelectUiHandler.processInput(Button.ACTION); resolve(); @@ -414,12 +414,12 @@ describe("UI - Starter select", () => { }).length; expect(caughtCount).toBe(Object.keys(allSpecies).length); await game.runToTitle(); - game.onNextPrompt("TitlePhase", Mode.TITLE, () => { + game.onNextPrompt("TitlePhase", UiMode.TITLE, () => { const currentPhase = game.scene.getCurrentPhase() as TitlePhase; currentPhase.gameMode = GameModes.CLASSIC; currentPhase.end(); }); - game.onNextPrompt("SelectStarterPhase", Mode.STARTER_SELECT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.STARTER_SELECT, () => { const handler = game.scene.ui.getHandler() as StarterSelectUiHandler; handler.processInput(Button.RIGHT); handler.processInput(Button.LEFT); @@ -432,7 +432,7 @@ describe("UI - Starter select", () => { let options: OptionSelectItem[] = []; let optionSelectUiHandler: OptionSelectUiHandler | undefined; await new Promise(resolve => { - game.onNextPrompt("SelectStarterPhase", Mode.OPTION_SELECT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.OPTION_SELECT, () => { optionSelectUiHandler = game.scene.ui.getHandler() as OptionSelectUiHandler; options = optionSelectUiHandler.getOptionsWithScroll(); resolve(); @@ -446,15 +446,15 @@ describe("UI - Starter select", () => { optionSelectUiHandler?.processInput(Button.ACTION); await new Promise(resolve => { - game.onNextPrompt("SelectStarterPhase", Mode.STARTER_SELECT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.STARTER_SELECT, () => { const handler = game.scene.ui.getHandler() as StarterSelectUiHandler; handler.processInput(Button.SUBMIT); }); - game.onNextPrompt("SelectStarterPhase", Mode.CONFIRM, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.CONFIRM, () => { const handler = game.scene.ui.getHandler() as StarterSelectUiHandler; handler.processInput(Button.ACTION); }); - game.onNextPrompt("SelectStarterPhase", Mode.SAVE_SLOT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.SAVE_SLOT, () => { const saveSlotSelectUiHandler = game.scene.ui.getHandler() as SaveSlotSelectUiHandler; saveSlotSelectUiHandler.processInput(Button.ACTION); resolve(); @@ -475,12 +475,12 @@ describe("UI - Starter select", () => { }).length; expect(caughtCount).toBe(Object.keys(allSpecies).length); await game.runToTitle(); - game.onNextPrompt("TitlePhase", Mode.TITLE, () => { + game.onNextPrompt("TitlePhase", UiMode.TITLE, () => { const currentPhase = game.scene.getCurrentPhase() as TitlePhase; currentPhase.gameMode = GameModes.CLASSIC; currentPhase.end(); }); - game.onNextPrompt("SelectStarterPhase", Mode.STARTER_SELECT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.STARTER_SELECT, () => { const handler = game.scene.ui.getHandler() as StarterSelectUiHandler; handler.processInput(Button.RIGHT); handler.processInput(Button.RIGHT); @@ -492,7 +492,7 @@ describe("UI - Starter select", () => { let options: OptionSelectItem[] = []; let optionSelectUiHandler: OptionSelectUiHandler | undefined; await new Promise(resolve => { - game.onNextPrompt("SelectStarterPhase", Mode.OPTION_SELECT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.OPTION_SELECT, () => { optionSelectUiHandler = game.scene.ui.getHandler() as OptionSelectUiHandler; options = optionSelectUiHandler.getOptionsWithScroll(); resolve(); @@ -507,7 +507,7 @@ describe("UI - Starter select", () => { let starterSelectUiHandler: StarterSelectUiHandler; await new Promise(resolve => { - game.onNextPrompt("SelectStarterPhase", Mode.STARTER_SELECT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.STARTER_SELECT, () => { starterSelectUiHandler = game.scene.ui.getHandler() as StarterSelectUiHandler; starterSelectUiHandler.processInput(Button.SUBMIT); resolve(); @@ -519,11 +519,11 @@ describe("UI - Starter select", () => { // expect(starterSelectUiHandler.cursorObj.x).toBe(132 + 4 * 18); // expect(starterSelectUiHandler.cursorObj.y).toBe(10); - game.onNextPrompt("SelectStarterPhase", Mode.CONFIRM, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.CONFIRM, () => { const handler = game.scene.ui.getHandler() as StarterSelectUiHandler; handler.processInput(Button.ACTION); }); - game.onNextPrompt("SelectStarterPhase", Mode.SAVE_SLOT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.SAVE_SLOT, () => { const saveSlotSelectUiHandler = game.scene.ui.getHandler() as SaveSlotSelectUiHandler; saveSlotSelectUiHandler.processInput(Button.ACTION); }); @@ -539,12 +539,12 @@ describe("UI - Starter select", () => { }).length; expect(caughtCount).toBe(Object.keys(allSpecies).length); await game.runToTitle(); - game.onNextPrompt("TitlePhase", Mode.TITLE, () => { + game.onNextPrompt("TitlePhase", UiMode.TITLE, () => { const currentPhase = game.scene.getCurrentPhase() as TitlePhase; currentPhase.gameMode = GameModes.CLASSIC; currentPhase.end(); }); - game.onNextPrompt("SelectStarterPhase", Mode.STARTER_SELECT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.STARTER_SELECT, () => { const handler = game.scene.ui.getHandler() as StarterSelectUiHandler; handler.processInput(Button.RIGHT); handler.processInput(Button.RIGHT); @@ -557,7 +557,7 @@ describe("UI - Starter select", () => { let options: OptionSelectItem[] = []; let optionSelectUiHandler: OptionSelectUiHandler | undefined; await new Promise(resolve => { - game.onNextPrompt("SelectStarterPhase", Mode.OPTION_SELECT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.OPTION_SELECT, () => { optionSelectUiHandler = game.scene.ui.getHandler() as OptionSelectUiHandler; options = optionSelectUiHandler.getOptionsWithScroll(); resolve(); @@ -572,7 +572,7 @@ describe("UI - Starter select", () => { let starterSelectUiHandler: StarterSelectUiHandler | undefined; await new Promise(resolve => { - game.onNextPrompt("SelectStarterPhase", Mode.STARTER_SELECT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.STARTER_SELECT, () => { starterSelectUiHandler = game.scene.ui.getHandler() as StarterSelectUiHandler; starterSelectUiHandler.processInput(Button.SUBMIT); resolve(); @@ -585,11 +585,11 @@ describe("UI - Starter select", () => { expect(starterSelectUiHandler?.cursorObj.x).toBe(53); expect(starterSelectUiHandler?.cursorObj.y).toBe(31); - game.onNextPrompt("SelectStarterPhase", Mode.CONFIRM, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.CONFIRM, () => { const handler = game.scene.ui.getHandler() as StarterSelectUiHandler; handler.processInput(Button.ACTION); }); - game.onNextPrompt("SelectStarterPhase", Mode.SAVE_SLOT, () => { + game.onNextPrompt("SelectStarterPhase", UiMode.SAVE_SLOT, () => { const saveSlotSelectUiHandler = game.scene.ui.getHandler() as SaveSlotSelectUiHandler; saveSlotSelectUiHandler.processInput(Button.ACTION); }); diff --git a/test/ui/transfer-item.test.ts b/test/ui/transfer-item.test.ts index cbbdc1d50ee..f0ea8f84005 100644 --- a/test/ui/transfer-item.test.ts +++ b/test/ui/transfer-item.test.ts @@ -4,7 +4,7 @@ import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import PartyUiHandler, { PartyUiMode } from "#app/ui/party-ui-handler"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import type BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; @@ -42,21 +42,21 @@ describe("UI - Transfer Items", () => { game.move.select(Moves.DRAGON_CLAW); - game.onNextPrompt("SelectModifierPhase", Mode.MODIFIER_SELECT, () => { + game.onNextPrompt("SelectModifierPhase", UiMode.MODIFIER_SELECT, () => { expect(game.scene.ui.getHandler()).toBeInstanceOf(ModifierSelectUiHandler); const handler = game.scene.ui.getHandler() as ModifierSelectUiHandler; handler.setCursor(1); handler.processInput(Button.ACTION); - void game.scene.ui.setModeWithoutClear(Mode.PARTY, PartyUiMode.MODIFIER_TRANSFER); + void game.scene.ui.setModeWithoutClear(UiMode.PARTY, PartyUiMode.MODIFIER_TRANSFER); }); await game.phaseInterceptor.to("BattleEndPhase"); }); it("check red tint for held item limit in transfer menu", async () => { - game.onNextPrompt("SelectModifierPhase", Mode.PARTY, () => { + game.onNextPrompt("SelectModifierPhase", UiMode.PARTY, () => { expect(game.scene.ui.getHandler()).toBeInstanceOf(PartyUiHandler); const handler = game.scene.ui.getHandler() as PartyUiHandler; @@ -79,7 +79,7 @@ describe("UI - Transfer Items", () => { }, 20000); it("check transfer option for pokemon to transfer to", async () => { - game.onNextPrompt("SelectModifierPhase", Mode.PARTY, () => { + game.onNextPrompt("SelectModifierPhase", UiMode.PARTY, () => { expect(game.scene.ui.getHandler()).toBeInstanceOf(PartyUiHandler); const handler = game.scene.ui.getHandler() as PartyUiHandler; diff --git a/test/ui/type-hints.test.ts b/test/ui/type-hints.test.ts index fcb71186448..08d9806ec7f 100644 --- a/test/ui/type-hints.test.ts +++ b/test/ui/type-hints.test.ts @@ -3,7 +3,7 @@ import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { CommandPhase } from "#app/phases/command-phase"; import FightUiHandler from "#app/ui/fight-ui-handler"; -import { Mode } from "#app/ui/ui"; +import { UiMode } from "#enums/ui-mode"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -42,14 +42,14 @@ describe("UI - Type Hints", () => { await game.startBattle([Species.RAYQUAZA]); - game.onNextPrompt("CommandPhase", Mode.COMMAND, () => { + game.onNextPrompt("CommandPhase", UiMode.COMMAND, () => { const { ui } = game.scene; const handler = ui.getHandler(); handler.processInput(Button.ACTION); // select "Fight" game.phaseInterceptor.unlock(); }); - game.onNextPrompt("CommandPhase", Mode.FIGHT, () => { + game.onNextPrompt("CommandPhase", UiMode.FIGHT, () => { const { ui } = game.scene; const movesContainer = ui.getByName(FightUiHandler.MOVES_CONTAINER_NAME); const dragonClawText = movesContainer @@ -67,14 +67,14 @@ describe("UI - Type Hints", () => { await game.startBattle([Species.RAYQUAZA]); - game.onNextPrompt("CommandPhase", Mode.COMMAND, () => { + game.onNextPrompt("CommandPhase", UiMode.COMMAND, () => { const { ui } = game.scene; const handler = ui.getHandler(); handler.processInput(Button.ACTION); // select "Fight" game.phaseInterceptor.unlock(); }); - game.onNextPrompt("CommandPhase", Mode.FIGHT, () => { + game.onNextPrompt("CommandPhase", UiMode.FIGHT, () => { const { ui } = game.scene; const movesContainer = ui.getByName(FightUiHandler.MOVES_CONTAINER_NAME); const growlText = movesContainer diff --git a/src/utils.test.ts b/test/utils.test.ts similarity index 95% rename from src/utils.test.ts rename to test/utils.test.ts index cc3f2bb1a04..33f7906738c 100644 --- a/src/utils.test.ts +++ b/test/utils.test.ts @@ -1,5 +1,5 @@ import { expect, describe, it, beforeAll } from "vitest"; -import { randomString, padInt } from "./utils"; +import { randomString, padInt } from "#app/utils/common"; import Phaser from "phaser"; From 65294f408e1c8b26e13fa7ff01d6f42039ed0cfa Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Sat, 19 Apr 2025 10:04:19 -0500 Subject: [PATCH 040/262] [Bug][UI/UX] Fix type hint after enemy disappears (#5677) * Fix type hint after enemy disappears * Add automated test for type hint bugfix * Make onField default to true * Replace reference to Mode with UiMode and battleType with BattleStyle --- src/data/moves/move.ts | 4 ++-- src/data/terrain.ts | 2 +- src/field/pokemon.ts | 9 +++++++-- src/phases/move-phase.ts | 2 +- test/ui/type-hints.test.ts | 41 ++++++++++++++++++++++++++++++++++++-- 5 files changed, 50 insertions(+), 8 deletions(-) diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 513ab3f6a74..26654fee18f 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -8183,7 +8183,7 @@ export type MoveTargetSet = { export function getMoveTargets(user: Pokemon, move: Moves, replaceTarget?: MoveTarget): MoveTargetSet { const variableTarget = new NumberHolder(0); - user.getOpponents().forEach(p => applyMoveAttrs(VariableTargetAttr, user, p, allMoves[move], variableTarget)); + user.getOpponents(false).forEach(p => applyMoveAttrs(VariableTargetAttr, user, p, allMoves[move], variableTarget)); let moveTarget: MoveTarget | undefined; if (allMoves[move].hasAttr(VariableTargetAttr)) { @@ -8195,7 +8195,7 @@ export function getMoveTargets(user: Pokemon, move: Moves, replaceTarget?: MoveT } else if (move === undefined) { moveTarget = MoveTarget.NEAR_ENEMY; } - const opponents = user.getOpponents(); + const opponents = user.getOpponents(false); let set: Pokemon[] = []; let multiple = false; diff --git a/src/data/terrain.ts b/src/data/terrain.ts index 894fb8a7955..5b6063cee68 100644 --- a/src/data/terrain.ts +++ b/src/data/terrain.ts @@ -59,7 +59,7 @@ export class Terrain { // Cancels move if the move has positive priority and targets a Pokemon grounded on the Psychic Terrain return ( move.getPriority(user) > 0 && - user.getOpponents().some(o => targets.includes(o.getBattlerIndex()) && o.isGrounded()) + user.getOpponents(true).some(o => targets.includes(o.getBattlerIndex()) && o.isGrounded()) ); } } diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 0242820dcde..f2e5fd4c2b6 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -3852,12 +3852,17 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return null; } - getOpponents(): Pokemon[] { + /** + * Returns the pokemon that oppose this one and are active + * + * @param onField - whether to also check if the pokemon is currently on the field (defaults to true) + */ + getOpponents(onField = true): Pokemon[] { return ( (this.isPlayer() ? globalScene.getEnemyField() : globalScene.getPlayerField()) as Pokemon[] - ).filter(p => p.isActive()); + ).filter(p => p.isActive(onField)); } getOpponentDescriptor(): string { diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index f42a2aefa34..7d2848a5d70 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -654,7 +654,7 @@ export class MovePhase extends BattlePhase { }), 500, ); - applyMoveAttrs(PreMoveMessageAttr, this.pokemon, this.pokemon.getOpponents()[0], this.move.getMove()); + applyMoveAttrs(PreMoveMessageAttr, this.pokemon, this.pokemon.getOpponents(false)[0], this.move.getMove()); } public showFailedText(failedText: string = i18next.t("battle:attackFailed")): void { diff --git a/test/ui/type-hints.test.ts b/test/ui/type-hints.test.ts index 08d9806ec7f..2051af76754 100644 --- a/test/ui/type-hints.test.ts +++ b/test/ui/type-hints.test.ts @@ -40,7 +40,7 @@ describe("UI - Type Hints", () => { .moveset([Moves.DRAGON_CLAW]); game.settings.typeHints(true); //activate type hints - await game.startBattle([Species.RAYQUAZA]); + await game.classicMode.startBattle([Species.RAYQUAZA]); game.onNextPrompt("CommandPhase", UiMode.COMMAND, () => { const { ui } = game.scene; @@ -65,7 +65,7 @@ describe("UI - Type Hints", () => { it("check status move color", async () => { game.override.enemySpecies(Species.FLORGES).moveset([Moves.GROWL]); - await game.startBattle([Species.RAYQUAZA]); + await game.classicMode.startBattle([Species.RAYQUAZA]); game.onNextPrompt("CommandPhase", UiMode.COMMAND, () => { const { ui } = game.scene; @@ -86,4 +86,41 @@ describe("UI - Type Hints", () => { }); await game.phaseInterceptor.to(CommandPhase); }); + + it("should show the proper hint for a move in doubles after one of the enemy pokemon flees", async () => { + game.override + .enemySpecies(Species.ABRA) + .moveset([Moves.SPLASH, Moves.SHADOW_BALL, Moves.SOAK]) + .enemyMoveset([Moves.SPLASH, Moves.TELEPORT]) + .battleStyle("double"); + + await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); + game.move.select(Moves.SPLASH); + // Use soak to change type of remaining abra to water + game.move.select(Moves.SOAK, 1); + + await game.forceEnemyMove(Moves.SPLASH); + await game.forceEnemyMove(Moves.TELEPORT); + await game.toNextTurn(); + + game.onNextPrompt("CommandPhase", UiMode.COMMAND, () => { + const { ui } = game.scene; + const handler = ui.getHandler(); + handler.processInput(Button.ACTION); // select "Fight" + game.phaseInterceptor.unlock(); + }); + + game.onNextPrompt("CommandPhase", UiMode.FIGHT, () => { + const { ui } = game.scene; + const movesContainer = ui.getByName(FightUiHandler.MOVES_CONTAINER_NAME); + const shadowBallText = movesContainer + .getAll() + .find(text => text.text === i18next.t("move:shadowBall.name"))! as unknown as MockText; + expect.soft(shadowBallText).toBeDefined(); + + expect.soft(shadowBallText.color).toBe(undefined); + ui.getHandler().processInput(Button.ACTION); + }); + await game.phaseInterceptor.to(CommandPhase); + }); }); From bda286cebb7285400925c5eefa3b3f4811549cda Mon Sep 17 00:00:00 2001 From: Chris <75648912+ChrisLolz@users.noreply.github.com> Date: Sat, 19 Apr 2025 17:00:12 -0400 Subject: [PATCH 041/262] [Bug] Fix Login Screen Buttons can be Pressed While Animating (#5170) * destroy containers when processing external containers * make form buttons uninteractible until tweens finished instead * fix holding enter spam * fix conflicts --- src/ui/form-modal-ui-handler.ts | 2 +- src/ui/login-form-ui-handler.ts | 132 +++++++++++++------------ src/ui/modal-ui-handler.ts | 6 +- src/ui/registration-form-ui-handler.ts | 86 ++++++++-------- 4 files changed, 120 insertions(+), 106 deletions(-) diff --git a/src/ui/form-modal-ui-handler.ts b/src/ui/form-modal-ui-handler.ts index e8e67d591d5..8c30b4e0bc4 100644 --- a/src/ui/form-modal-ui-handler.ts +++ b/src/ui/form-modal-ui-handler.ts @@ -124,7 +124,7 @@ export abstract class FormModalUiHandler extends ModalUiHandler { if (this.buttonBgs.length) { this.buttonBgs[0].off("pointerdown"); this.buttonBgs[0].on("pointerdown", () => { - if (this.submitAction) { + if (this.submitAction && globalScene.tweens.getTweensOf(this.modalContainer).length === 0) { this.submitAction(); } }); diff --git a/src/ui/login-form-ui-handler.ts b/src/ui/login-form-ui-handler.ts index 2dfab9c0c40..714a9b39771 100644 --- a/src/ui/login-form-ui-handler.ts +++ b/src/ui/login-form-ui-handler.ts @@ -40,25 +40,9 @@ export default class LoginFormUiHandler extends FormModalUiHandler { setup(): void { super.setup(); + this.buildExternalPartyContainer(); - - this.infoContainer = globalScene.add.container(0, 0); - - this.usernameInfoImage = this.buildInteractableImage("settings_icon", "username-info-icon", { - x: 20, - scale: 0.5, - }); - - this.saveDownloadImage = this.buildInteractableImage("saving_icon", "save-download-icon", { - x: 0, - scale: 0.75, - }); - - this.infoContainer.add(this.usernameInfoImage); - this.infoContainer.add(this.saveDownloadImage); - this.getUi().add(this.infoContainer); - this.infoContainer.setVisible(false); - this.infoContainer.disableInteractive(); + this.buildInfoContainer(); } private buildExternalPartyContainer() { @@ -84,6 +68,26 @@ export default class LoginFormUiHandler extends FormModalUiHandler { this.externalPartyContainer.setVisible(false); } + private buildInfoContainer() { + this.infoContainer = globalScene.add.container(0, 0); + + this.usernameInfoImage = this.buildInteractableImage("settings_icon", "username-info-icon", { + x: 20, + scale: 0.5, + }); + + this.saveDownloadImage = this.buildInteractableImage("saving_icon", "save-download-icon", { + x: 0, + scale: 0.75, + }); + + this.infoContainer.add(this.usernameInfoImage); + this.infoContainer.add(this.saveDownloadImage); + this.getUi().add(this.infoContainer); + this.infoContainer.setVisible(false); + this.infoContainer.disableInteractive(); + } + override getModalTitle(_config?: ModalConfig): string { let key = "menu:login"; if (import.meta.env.VITE_SERVER_URL === "https://apibeta.pokerogue.net") { @@ -143,27 +147,29 @@ export default class LoginFormUiHandler extends FormModalUiHandler { this.processExternalProvider(config); const originalLoginAction = this.submitAction; this.submitAction = _ => { - // Prevent overlapping overrides on action modification - this.submitAction = originalLoginAction; - this.sanitizeInputs(); + if (globalScene.tweens.getTweensOf(this.modalContainer).length === 0) { + // Prevent overlapping overrides on action modification + this.submitAction = originalLoginAction; + this.sanitizeInputs(); globalScene.ui.setMode(UiMode.LOADING, { buttonActions: [] }); - const onFail = error => { + const onFail = error => { globalScene.ui.setMode(UiMode.LOGIN_FORM, Object.assign(config, { errorMessage: error?.trim() })); - globalScene.ui.playError(); - }; - if (!this.inputs[0].text) { - return onFail(i18next.t("menu:emptyUsername")); - } - - const [usernameInput, passwordInput] = this.inputs; - - pokerogueApi.account.login({ username: usernameInput.text, password: passwordInput.text }).then(error => { - if (!error && originalLoginAction) { - originalLoginAction(); - } else { - onFail(error); + globalScene.ui.playError(); + }; + if (!this.inputs[0].text) { + return onFail(i18next.t("menu:emptyUsername")); } - }); + + const [usernameInput, passwordInput] = this.inputs; + + pokerogueApi.account.login({ username: usernameInput.text, password: passwordInput.text }).then(error => { + if (!error && originalLoginAction) { + originalLoginAction(); + } else { + onFail(error); + } + }); + } }; return true; @@ -221,34 +227,36 @@ export default class LoginFormUiHandler extends FormModalUiHandler { }; this.usernameInfoImage.on("pointerdown", () => { - const localStorageKeys = Object.keys(localStorage); // this gets the keys for localStorage - const keyToFind = "data_"; - const dataKeys = localStorageKeys.filter(ls => ls.indexOf(keyToFind) >= 0); - if (dataKeys.length > 0 && dataKeys.length <= 2) { - const options: OptionSelectItem[] = []; - for (let i = 0; i < dataKeys.length; i++) { - options.push({ - label: dataKeys[i].replace(keyToFind, ""), - handler: () => { - globalScene.ui.revertMode(); - this.infoContainer.disableInteractive(); - return true; - }, - }); - } + if (globalScene.tweens.getTweensOf(this.infoContainer).length === 0) { + const localStorageKeys = Object.keys(localStorage); // this gets the keys for localStorage + const keyToFind = "data_"; + const dataKeys = localStorageKeys.filter(ls => ls.indexOf(keyToFind) >= 0); + if (dataKeys.length > 0 && dataKeys.length <= 2) { + const options: OptionSelectItem[] = []; + for (let i = 0; i < dataKeys.length; i++) { + options.push({ + label: dataKeys[i].replace(keyToFind, ""), + handler: () => { + globalScene.ui.revertMode(); + this.infoContainer.disableInteractive(); + return true; + }, + }); + } globalScene.ui.setOverlayMode(UiMode.OPTION_SELECT, { - options: options, - delay: 1000, - }); - this.infoContainer.setInteractive( - new Phaser.Geom.Rectangle(0, 0, globalScene.game.canvas.width, globalScene.game.canvas.height), - Phaser.Geom.Rectangle.Contains, - ); - } else { - if (dataKeys.length > 2) { - return onFail(this.ERR_TOO_MANY_SAVES); + options: options, + delay: 1000, + }); + this.infoContainer.setInteractive( + new Phaser.Geom.Rectangle(0, 0, globalScene.game.canvas.width, globalScene.game.canvas.height), + Phaser.Geom.Rectangle.Contains, + ); + } else { + if (dataKeys.length > 2) { + return onFail(this.ERR_TOO_MANY_SAVES); + } + return onFail(this.ERR_NO_SAVES); } - return onFail(this.ERR_NO_SAVES); } }); diff --git a/src/ui/modal-ui-handler.ts b/src/ui/modal-ui-handler.ts index a3b94296d3f..56c1c2c3fcf 100644 --- a/src/ui/modal-ui-handler.ts +++ b/src/ui/modal-ui-handler.ts @@ -134,7 +134,11 @@ export abstract class ModalUiHandler extends UiHandler { for (let a = 0; a < this.buttonBgs.length; a++) { if (a < this.buttonBgs.length) { - this.buttonBgs[a].on("pointerdown", _ => config.buttonActions[a]()); + this.buttonBgs[a].on("pointerdown", _ => { + if (globalScene.tweens.getTweensOf(this.modalContainer).length === 0) { + config.buttonActions[a](); + } + }); } } diff --git a/src/ui/registration-form-ui-handler.ts b/src/ui/registration-form-ui-handler.ts index bb10efc5869..3d4613c21d6 100644 --- a/src/ui/registration-form-ui-handler.ts +++ b/src/ui/registration-form-ui-handler.ts @@ -98,51 +98,53 @@ export default class RegistrationFormUiHandler extends FormModalUiHandler { const originalRegistrationAction = this.submitAction; this.submitAction = _ => { - // Prevent overlapping overrides on action modification - this.submitAction = originalRegistrationAction; - this.sanitizeInputs(); + if (globalScene.tweens.getTweensOf(this.modalContainer).length === 0) { + // Prevent overlapping overrides on action modification + this.submitAction = originalRegistrationAction; + this.sanitizeInputs(); globalScene.ui.setMode(UiMode.LOADING, { buttonActions: [] }); - const onFail = error => { + const onFail = error => { globalScene.ui.setMode(UiMode.REGISTRATION_FORM, Object.assign(config, { errorMessage: error?.trim() })); - globalScene.ui.playError(); - const errorMessageFontSize = languageSettings[i18next.resolvedLanguage!]?.errorMessageFontSize; - if (errorMessageFontSize) { - this.errorMessage.setFontSize(errorMessageFontSize); - } - }; - if (!this.inputs[0].text) { - return onFail(i18next.t("menu:emptyUsername")); - } - if (!this.inputs[1].text) { - return onFail(this.getReadableErrorMessage("invalid password")); - } - if (this.inputs[1].text !== this.inputs[2].text) { - return onFail(i18next.t("menu:passwordNotMatchingConfirmPassword")); - } - const [usernameInput, passwordInput] = this.inputs; - pokerogueApi.account - .register({ - username: usernameInput.text, - password: passwordInput.text, - }) - .then(registerError => { - if (!registerError) { - pokerogueApi.account - .login({ - username: usernameInput.text, - password: passwordInput.text, - }) - .then(loginError => { - if (!loginError) { - originalRegistrationAction?.(); - } else { - onFail(loginError); - } - }); - } else { - onFail(registerError); + globalScene.ui.playError(); + const errorMessageFontSize = languageSettings[i18next.resolvedLanguage!]?.errorMessageFontSize; + if (errorMessageFontSize) { + this.errorMessage.setFontSize(errorMessageFontSize); } - }); + }; + if (!this.inputs[0].text) { + return onFail(i18next.t("menu:emptyUsername")); + } + if (!this.inputs[1].text) { + return onFail(this.getReadableErrorMessage("invalid password")); + } + if (this.inputs[1].text !== this.inputs[2].text) { + return onFail(i18next.t("menu:passwordNotMatchingConfirmPassword")); + } + const [usernameInput, passwordInput] = this.inputs; + pokerogueApi.account + .register({ + username: usernameInput.text, + password: passwordInput.text, + }) + .then(registerError => { + if (!registerError) { + pokerogueApi.account + .login({ + username: usernameInput.text, + password: passwordInput.text, + }) + .then(loginError => { + if (!loginError) { + originalRegistrationAction?.(); + } else { + onFail(loginError); + } + }); + } else { + onFail(registerError); + } + }); + } }; return true; From 8515cadd7735c0046a9185dec936f208f07c2281 Mon Sep 17 00:00:00 2001 From: Blitzy <118096277+Blitz425@users.noreply.github.com> Date: Sun, 20 Apr 2025 00:20:07 -0500 Subject: [PATCH 042/262] [Balance] Update Gym Leader Teams and Teras (#5670) * Update Gym Leader Teams * Set Tera slots for Gym Leaders * Change Giovanni's Specialty Type to Ground --- Co-authored-by: damocleas --- src/data/balance/signature-species.ts | 134 +++++++++++++------------- src/data/trainers/trainer-config.ts | 132 ++++++++++++------------- 2 files changed, 133 insertions(+), 133 deletions(-) diff --git a/src/data/balance/signature-species.ts b/src/data/balance/signature-species.ts index a1b73af40cd..e2fecaa12ff 100644 --- a/src/data/balance/signature-species.ts +++ b/src/data/balance/signature-species.ts @@ -11,87 +11,87 @@ export type SignatureSpecies = { */ export const signatureSpecies: SignatureSpecies = { // Gym Leaders- Kanto - BROCK: [Species.GEODUDE, Species.ONIX], - MISTY: [Species.STARYU, Species.PSYDUCK], - LT_SURGE: [Species.VOLTORB, Species.PIKACHU, Species.ELECTABUZZ], + BROCK: [Species.ONIX, Species.GEODUDE, [Species.OMANYTE, Species.KABUTO], Species.AERODACTYL], + MISTY: [Species.STARYU, Species.PSYDUCK, Species.WOOPER, Species.LAPRAS], + LT_SURGE: [Species.PICHU, Species.VOLTORB, Species.ELEKID, Species.JOLTEON], ERIKA: [Species.ODDISH, Species.BELLSPROUT, Species.TANGELA, Species.HOPPIP], - JANINE: [Species.VENONAT, Species.SPINARAK, Species.ZUBAT], - SABRINA: [Species.ABRA, Species.MR_MIME, Species.ESPEON], - BLAINE: [Species.GROWLITHE, Species.PONYTA, Species.MAGMAR], - GIOVANNI: [Species.SANDILE, Species.MURKROW, Species.NIDORAN_M, Species.NIDORAN_F], + JANINE: [Species.VENONAT, Species.SPINARAK, Species.ZUBAT, Species.KOFFING], + SABRINA: [Species.ABRA, Species.MR_MIME, Species.SMOOCHUM, Species.ESPEON], + BLAINE: [Species.GROWLITHE, Species.PONYTA, Species.MAGBY, Species.VULPIX], + GIOVANNI: [Species.RHYHORN, Species.MEOWTH, [Species.NIDORAN_F, Species.NIDORAN_M], Species.DIGLETT], // Tera Ground Meowth // Gym Leaders- Johto - FALKNER: [Species.PIDGEY, Species.HOOTHOOT, Species.DODUO], - BUGSY: [Species.SCYTHER, Species.HERACROSS, Species.SHUCKLE, Species.PINSIR], - WHITNEY: [Species.JIGGLYPUFF, Species.MILTANK, Species.AIPOM, Species.GIRAFARIG], - MORTY: [Species.GASTLY, Species.MISDREAVUS, Species.SABLEYE], - CHUCK: [Species.POLIWRATH, Species.MANKEY], - JASMINE: [Species.MAGNEMITE, Species.STEELIX], - PRYCE: [Species.SEEL, Species.SWINUB], - CLAIR: [Species.DRATINI, Species.HORSEA, Species.GYARADOS], + FALKNER: [Species.PIDGEY, Species.HOOTHOOT, Species.NATU, Species.MURKROW], + BUGSY: [Species.SCYTHER, Species.SHUCKLE, Species.YANMA, [Species.PINSIR, Species.HERACROSS]], + WHITNEY: [Species.MILTANK, Species.AIPOM, Species.IGGLYBUFF, [Species.GIRAFARIG, Species.STANTLER]], + MORTY: [Species.GASTLY, Species.MISDREAVUS, Species.DUSKULL, Species.SABLEYE], + CHUCK: [Species.POLIWRATH, Species.MANKEY, Species.TYROGUE, Species.MACHOP], + JASMINE: [Species.STEELIX, Species.MAGNEMITE, Species.PINECO, Species.SKARMORY], + PRYCE: [Species.SWINUB, Species.SEEL, Species.SHELLDER, Species.SNEASEL], + CLAIR: [Species.HORSEA, Species.DRATINI, Species.MAGIKARP, Species.DRUDDIGON], // Tera Dragon Magikarp // Gym Leaders- Hoenn - ROXANNE: [Species.GEODUDE, Species.NOSEPASS], - BRAWLY: [Species.MACHOP, Species.MAKUHITA], - WATTSON: [Species.MAGNEMITE, Species.VOLTORB, Species.ELECTRIKE], - FLANNERY: [Species.SLUGMA, Species.TORKOAL, Species.NUMEL], - NORMAN: [Species.SLAKOTH, Species.SPINDA, Species.ZIGZAGOON, Species.KECLEON], + ROXANNE: [Species.NOSEPASS, Species.GEODUDE, [Species.LILEEP, Species.ANORITH], Species.ARON], + BRAWLY: [Species.MAKUHITA, Species.MACHOP, Species.MEDITITE, Species.SHROOMISH], + WATTSON: [Species.ELECTRIKE, Species.VOLTORB, Species.MAGNEMITE, [Species.PLUSLE, Species.MINUN]], + FLANNERY: [Species.TORKOAL, Species.SLUGMA, Species.NUMEL, Species.HOUNDOUR], + NORMAN: [Species.SLAKOTH, Species.KECLEON, Species.WHISMUR, Species.ZANGOOSE], WINONA: [Species.SWABLU, Species.WINGULL, Species.TROPIUS, Species.SKARMORY], - TATE: [Species.SOLROCK, Species.NATU, Species.CHIMECHO, Species.GALLADE], - LIZA: [Species.LUNATONE, Species.SPOINK, Species.BALTOY, Species.GARDEVOIR], - JUAN: [Species.HORSEA, Species.BARBOACH, Species.SPHEAL, Species.RELICANTH], + TATE: [Species.SOLROCK, Species.NATU, Species.CHINGLING, Species.GALLADE], + LIZA: [Species.LUNATONE, Species.BALTOY, Species.SPOINK, Species.GARDEVOIR], + JUAN: [Species.HORSEA, Species.SPHEAL, Species.BARBOACH, Species.CORPHISH], // Gym Leaders- Sinnoh - ROARK: [Species.CRANIDOS, Species.LARVITAR, Species.GEODUDE], - GARDENIA: [Species.ROSELIA, Species.TANGELA, Species.TURTWIG], - MAYLENE: [Species.LUCARIO, Species.MEDITITE, Species.CHIMCHAR], + ROARK: [Species.CRANIDOS, Species.GEODUDE, Species.NOSEPASS, Species.LARVITAR], + GARDENIA: [Species.BUDEW, Species.CHERUBI, Species.TURTWIG, Species.LEAFEON], + MAYLENE: [Species.RIOLU, Species.MEDITITE, Species.CHIMCHAR, Species.CROAGUNK], CRASHER_WAKE: [Species.BUIZEL, Species.WOOPER, Species.PIPLUP, Species.MAGIKARP], - FANTINA: [Species.MISDREAVUS, Species.DRIFLOON, Species.SPIRITOMB], - BYRON: [Species.SHIELDON, Species.BRONZOR, Species.AGGRON], - CANDICE: [Species.SNEASEL, Species.SNOVER, Species.SNORUNT], - VOLKNER: [Species.SHINX, Species.CHINCHOU, Species.ROTOM], + FANTINA: [Species.MISDREAVUS, Species.DRIFLOON, Species.DUSKULL, Species.SPIRITOMB], + BYRON: [Species.SHIELDON, Species.BRONZOR, Species.ARON, Species.SKARMORY], + CANDICE: [Species.FROSLASS, Species.SNOVER, Species.SNEASEL, Species.GLACEON], + VOLKNER: [Species.ELEKID, Species.SHINX, Species.CHINCHOU, Species.ROTOM], // Gym Leaders- Unova - CILAN: [Species.PANSAGE, Species.FOONGUS, Species.PETILIL], - CHILI: [Species.PANSEAR, Species.DARUMAKA, Species.NUMEL], - CRESS: [Species.PANPOUR, Species.TYMPOLE, Species.SLOWPOKE], - CHEREN: [Species.LILLIPUP, Species.MINCCINO, Species.PIDOVE], - LENORA: [Species.PATRAT, Species.DEERLING, Species.AUDINO], - ROXIE: [Species.VENIPEDE, Species.TRUBBISH, Species.SKORUPI], - BURGH: [Species.SEWADDLE, Species.SHELMET, Species.KARRABLAST], - ELESA: [Species.EMOLGA, Species.BLITZLE, Species.JOLTIK], - CLAY: [Species.DRILBUR, Species.SANDILE, Species.GOLETT], - SKYLA: [Species.DUCKLETT, Species.WOOBAT, Species.RUFFLET], - BRYCEN: [Species.CRYOGONAL, Species.VANILLITE, Species.CUBCHOO], - DRAYDEN: [Species.DRUDDIGON, Species.AXEW, Species.DEINO], - MARLON: [Species.WAILMER, Species.FRILLISH, Species.TIRTOUGA], + CILAN: [Species.PANSAGE, Species.SNIVY, Species.MARACTUS, Species.FERROSEED], + CHILI: [Species.PANSEAR, Species.TEPIG, Species.HEATMOR, Species.DARUMAKA], + CRESS: [Species.PANPOUR, Species.OSHAWOTT, Species.BASCULIN, Species.TYMPOLE], + CHEREN: [Species.LILLIPUP, Species.MINCCINO, Species.PIDOVE, Species.BOUFFALANT], + LENORA: [Species.PATRAT, Species.DEERLING, Species.AUDINO, Species.BRAVIARY], + ROXIE: [Species.VENIPEDE, Species.KOFFING, Species.TRUBBISH, Species.TOXEL], + BURGH: [Species.SEWADDLE, Species.DWEBBLE, [Species.KARRABLAST, Species.SHELMET], Species.DURANT], + ELESA: [Species.BLITZLE, Species.EMOLGA, Species.JOLTIK, Species.TYNAMO], + CLAY: [Species.DRILBUR, Species.SANDILE, Species.TYMPOLE, Species.GOLETT], + SKYLA: [Species.DUCKLETT, Species.WOOBAT, [Species.RUFFLET, Species.VULLABY], Species.ARCHEN], + BRYCEN: [Species.CRYOGONAL, Species.VANILLITE, Species.CUBCHOO, Species.GALAR_DARUMAKA], + DRAYDEN: [Species.AXEW, Species.DRUDDIGON, Species.TRAPINCH, Species.DEINO], + MARLON: [Species.FRILLISH, Species.TIRTOUGA, Species.WAILMER, Species.MANTYKE], // Gym Leaders- Kalos - VIOLA: [Species.SURSKIT, Species.SCATTERBUG], - GRANT: [Species.AMAURA, Species.TYRUNT], - KORRINA: [Species.HAWLUCHA, Species.LUCARIO, Species.MIENFOO], - RAMOS: [Species.SKIDDO, Species.HOPPIP, Species.BELLSPROUT], - CLEMONT: [Species.HELIOPTILE, Species.MAGNEMITE, Species.EMOLGA], - VALERIE: [Species.SYLVEON, Species.MAWILE, Species.MR_MIME], - OLYMPIA: [Species.ESPURR, Species.SIGILYPH, Species.SLOWKING], - WULFRIC: [Species.BERGMITE, Species.SNOVER, Species.CRYOGONAL], + VIOLA: [Species.SCATTERBUG, Species.SURSKIT, Species.CUTIEFLY, Species.BLIPBUG], + GRANT: [Species.TYRUNT, Species.AMAURA, Species.BINACLE, Species.DWEBBLE], + KORRINA: [Species.RIOLU, Species.MIENFOO, Species.HAWLUCHA, Species.PANCHAM], + RAMOS: [Species.SKIDDO, Species.HOPPIP, Species.BELLSPROUT, [Species.PHANTUMP, Species.PUMPKABOO]], + CLEMONT: [Species.HELIOPTILE, Species.MAGNEMITE, Species.DEDENNE, Species.ROTOM], + VALERIE: [Species.SYLVEON, Species.MAWILE, Species.MR_MIME, [Species.SPRITZEE, Species.SWIRLIX]], + OLYMPIA: [Species.ESPURR, Species.SIGILYPH, Species.INKAY, Species.SLOWKING], + WULFRIC: [Species.BERGMITE, Species.SNOVER, Species.CRYOGONAL, Species.SWINUB], // Gym Leaders- Galar - MILO: [Species.GOSSIFLEUR, Species.APPLIN, Species.BOUNSWEET], - NESSA: [Species.CHEWTLE, Species.ARROKUDA, Species.WIMPOD], - KABU: [Species.SIZZLIPEDE, Species.VULPIX, Species.TORKOAL], - BEA: [Species.GALAR_FARFETCHD, Species.MACHOP, Species.CLOBBOPUS], - ALLISTER: [Species.GALAR_YAMASK, Species.GALAR_CORSOLA, Species.GASTLY], - OPAL: [Species.MILCERY, Species.TOGETIC, Species.GALAR_WEEZING], - BEDE: [Species.HATENNA, Species.GALAR_PONYTA, Species.GARDEVOIR], - GORDIE: [Species.ROLYCOLY, Species.STONJOURNER, Species.BINACLE], - MELONY: [Species.SNOM, Species.GALAR_DARUMAKA, Species.GALAR_MR_MIME], - PIERS: [Species.GALAR_ZIGZAGOON, Species.SCRAGGY, Species.INKAY], - MARNIE: [Species.IMPIDIMP, Species.PURRLOIN, Species.MORPEKO], - RAIHAN: [Species.DURALUDON, Species.TURTONATOR, Species.GOOMY], + MILO: [Species.GOSSIFLEUR, Species.SEEDOT, Species.APPLIN, Species.LOTAD], + NESSA: [Species.CHEWTLE, Species.WIMPOD, Species.ARROKUDA, Species.MAREANIE], + KABU: [Species.SIZZLIPEDE, Species.VULPIX, Species.GROWLITHE, Species.TORKOAL], + BEA: [Species.MACHOP, Species.GALAR_FARFETCHD, Species.CLOBBOPUS, Species.FALINKS], + ALLISTER: [Species.GASTLY, Species.GALAR_YAMASK, Species.GALAR_CORSOLA, Species.SINISTEA], + OPAL: [Species.MILCERY, Species.GALAR_WEEZING, Species.TOGEPI, Species.MAWILE], + BEDE: [Species.HATENNA, Species.GALAR_PONYTA, Species.GARDEVOIR, Species.SYLVEON], + GORDIE: [Species.ROLYCOLY, [Species.SHUCKLE, Species.BINACLE], Species.STONJOURNER, Species.LARVITAR], + MELONY: [Species.LAPRAS, Species.SNOM, Species.EISCUE, [Species.GALAR_MR_MIME, Species.GALAR_DARUMAKA]], + PIERS: [Species.GALAR_ZIGZAGOON, Species.SCRAGGY, Species.TOXEL, Species.INKAY], // Tera Dark Toxel + MARNIE: [Species.IMPIDIMP, Species.MORPEKO, Species.PURRLOIN, Species.CROAGUNK], // Tera Dark Croagunk + RAIHAN: [Species.DURALUDON, Species.TRAPINCH, Species.GOOMY, Species.TURTONATOR], // Gym Leaders- Paldea; First slot is Tera - KATY: [Species.TEDDIURSA, Species.NYMBLE, Species.TAROUNTULA], // Tera Bug Teddiursa - BRASSIUS: [Species.SUDOWOODO, Species.BRAMBLIN, Species.SMOLIV], // Tera Grass Sudowoodo - IONO: [Species.MISDREAVUS, Species.TADBULB, Species.WATTREL], // Tera Ghost Misdreavus + KATY: [Species.TEDDIURSA, Species.NYMBLE, Species.TAROUNTULA, Species.RELLOR], // Tera Bug Teddiursa + BRASSIUS: [Species.BONSLY, Species.SMOLIV, Species.BRAMBLIN, Species.SUNKERN], // Tera Grass Bonsly + IONO: [Species.MISDREAVUS, Species.TADBULB, Species.WATTREL, Species.MAGNEMITE], // Tera Ghost Misdreavus KOFU: [Species.CRABRAWLER, Species.VELUZA, Species.WIGLETT, Species.WINGULL], // Tera Water Crabrawler LARRY: [Species.STARLY, Species.DUNSPARCE, Species.LECHONK, Species.KOMALA], // Tera Normal Starly RYME: [Species.TOXEL, Species.GREAVARD, Species.SHUPPET, Species.MIMIKYU], // Tera Ghost Toxel TULIP: [Species.FLABEBE, Species.FLITTLE, Species.RALTS, Species.GIRAFARIG], // Tera Psychic Flabebe - GRUSHA: [Species.SWABLU, Species.CETODDLE, Species.CUBCHOO, Species.ALOLA_VULPIX], // Tera Ice Swablu + GRUSHA: [Species.SWABLU, Species.CETODDLE, Species.SNOM, Species.CUBCHOO], // Tera Ice Swablu // Elite Four- Kanto LORELEI: [ diff --git a/src/data/trainers/trainer-config.ts b/src/data/trainers/trainer-config.ts index fec1d4757e7..a2e62e6761b 100644 --- a/src/data/trainers/trainer-config.ts +++ b/src/data/trainers/trainer-config.ts @@ -2579,252 +2579,252 @@ export const trainerConfigs: TrainerConfigs = { ), [TrainerType.BROCK]: new TrainerConfig((t = TrainerType.BROCK)) - .initForGymLeader(signatureSpecies["BROCK"], true, PokemonType.ROCK) + .initForGymLeader(signatureSpecies["BROCK"], true, PokemonType.ROCK, false, -1) .setBattleBgm("battle_kanto_gym") .setMixedBattleBgm("battle_kanto_gym"), [TrainerType.MISTY]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["MISTY"], false, PokemonType.WATER) + .initForGymLeader(signatureSpecies["MISTY"], false, PokemonType.WATER, false, -1) .setBattleBgm("battle_kanto_gym") .setMixedBattleBgm("battle_kanto_gym"), [TrainerType.LT_SURGE]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["LT_SURGE"], true, PokemonType.ELECTRIC) + .initForGymLeader(signatureSpecies["LT_SURGE"], true, PokemonType.ELECTRIC, false, -1) .setBattleBgm("battle_kanto_gym") .setMixedBattleBgm("battle_kanto_gym"), [TrainerType.ERIKA]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["ERIKA"], false, PokemonType.GRASS) + .initForGymLeader(signatureSpecies["ERIKA"], false, PokemonType.GRASS, false, -1) .setBattleBgm("battle_kanto_gym") .setMixedBattleBgm("battle_kanto_gym"), [TrainerType.JANINE]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["JANINE"], false, PokemonType.POISON) + .initForGymLeader(signatureSpecies["JANINE"], false, PokemonType.POISON, false, -1) .setBattleBgm("battle_kanto_gym") .setMixedBattleBgm("battle_kanto_gym"), [TrainerType.SABRINA]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["SABRINA"], false, PokemonType.PSYCHIC) + .initForGymLeader(signatureSpecies["SABRINA"], false, PokemonType.PSYCHIC, false, -1) .setBattleBgm("battle_kanto_gym") .setMixedBattleBgm("battle_kanto_gym"), [TrainerType.BLAINE]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["BLAINE"], true, PokemonType.FIRE) + .initForGymLeader(signatureSpecies["BLAINE"], true, PokemonType.FIRE, false, -1) .setBattleBgm("battle_kanto_gym") .setMixedBattleBgm("battle_kanto_gym"), [TrainerType.GIOVANNI]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["GIOVANNI"], true, PokemonType.DARK) + .initForGymLeader(signatureSpecies["GIOVANNI"], true, PokemonType.GROUND, false, -2) .setBattleBgm("battle_kanto_gym") .setMixedBattleBgm("battle_kanto_gym"), [TrainerType.FALKNER]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["FALKNER"], true, PokemonType.FLYING) + .initForGymLeader(signatureSpecies["FALKNER"], true, PokemonType.FLYING, false, -1) .setBattleBgm("battle_johto_gym") .setMixedBattleBgm("battle_johto_gym"), [TrainerType.BUGSY]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["BUGSY"], true, PokemonType.BUG) + .initForGymLeader(signatureSpecies["BUGSY"], true, PokemonType.BUG, false, -1) .setBattleBgm("battle_johto_gym") .setMixedBattleBgm("battle_johto_gym"), [TrainerType.WHITNEY]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["WHITNEY"], false, PokemonType.NORMAL) + .initForGymLeader(signatureSpecies["WHITNEY"], false, PokemonType.NORMAL, false, -1) .setBattleBgm("battle_johto_gym") .setMixedBattleBgm("battle_johto_gym"), [TrainerType.MORTY]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["MORTY"], true, PokemonType.GHOST) + .initForGymLeader(signatureSpecies["MORTY"], true, PokemonType.GHOST, false, -1) .setBattleBgm("battle_johto_gym") .setMixedBattleBgm("battle_johto_gym"), [TrainerType.CHUCK]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["CHUCK"], true, PokemonType.FIGHTING) + .initForGymLeader(signatureSpecies["CHUCK"], true, PokemonType.FIGHTING, false, -1) .setBattleBgm("battle_johto_gym") .setMixedBattleBgm("battle_johto_gym"), [TrainerType.JASMINE]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["JASMINE"], false, PokemonType.STEEL) + .initForGymLeader(signatureSpecies["JASMINE"], false, PokemonType.STEEL, false, -1) .setBattleBgm("battle_johto_gym") .setMixedBattleBgm("battle_johto_gym"), [TrainerType.PRYCE]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["PRYCE"], true, PokemonType.ICE) + .initForGymLeader(signatureSpecies["PRYCE"], true, PokemonType.ICE, false, -1) .setBattleBgm("battle_johto_gym") .setMixedBattleBgm("battle_johto_gym"), [TrainerType.CLAIR]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["CLAIR"], false, PokemonType.DRAGON) + .initForGymLeader(signatureSpecies["CLAIR"], false, PokemonType.DRAGON, false, -3) .setBattleBgm("battle_johto_gym") .setMixedBattleBgm("battle_johto_gym"), [TrainerType.ROXANNE]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["ROXANNE"], false, PokemonType.ROCK) + .initForGymLeader(signatureSpecies["ROXANNE"], false, PokemonType.ROCK, false, -1) .setBattleBgm("battle_hoenn_gym") .setMixedBattleBgm("battle_hoenn_gym"), [TrainerType.BRAWLY]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["BRAWLY"], true, PokemonType.FIGHTING) + .initForGymLeader(signatureSpecies["BRAWLY"], true, PokemonType.FIGHTING, false, -1) .setBattleBgm("battle_hoenn_gym") .setMixedBattleBgm("battle_hoenn_gym"), [TrainerType.WATTSON]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["WATTSON"], true, PokemonType.ELECTRIC) + .initForGymLeader(signatureSpecies["WATTSON"], true, PokemonType.ELECTRIC, false, -1) .setBattleBgm("battle_hoenn_gym") .setMixedBattleBgm("battle_hoenn_gym"), [TrainerType.FLANNERY]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["FLANNERY"], false, PokemonType.FIRE) + .initForGymLeader(signatureSpecies["FLANNERY"], false, PokemonType.FIRE, false, -1) .setBattleBgm("battle_hoenn_gym") .setMixedBattleBgm("battle_hoenn_gym"), [TrainerType.NORMAN]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["NORMAN"], true, PokemonType.NORMAL) + .initForGymLeader(signatureSpecies["NORMAN"], true, PokemonType.NORMAL, false, -1) .setBattleBgm("battle_hoenn_gym") .setMixedBattleBgm("battle_hoenn_gym"), [TrainerType.WINONA]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["WINONA"], false, PokemonType.FLYING) + .initForGymLeader(signatureSpecies["WINONA"], false, PokemonType.FLYING, false, -1) .setBattleBgm("battle_hoenn_gym") .setMixedBattleBgm("battle_hoenn_gym"), [TrainerType.TATE]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["TATE"], true, PokemonType.PSYCHIC) + .initForGymLeader(signatureSpecies["TATE"], true, PokemonType.PSYCHIC, false, -1) .setBattleBgm("battle_hoenn_gym") .setMixedBattleBgm("battle_hoenn_gym") .setHasDouble("tate_liza_double") .setDoubleTrainerType(TrainerType.LIZA) .setDoubleTitle("gym_leader_double"), [TrainerType.LIZA]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["LIZA"], false, PokemonType.PSYCHIC) + .initForGymLeader(signatureSpecies["LIZA"], false, PokemonType.PSYCHIC, false, -1) .setBattleBgm("battle_hoenn_gym") .setMixedBattleBgm("battle_hoenn_gym") .setHasDouble("liza_tate_double") .setDoubleTrainerType(TrainerType.TATE) .setDoubleTitle("gym_leader_double"), [TrainerType.JUAN]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["JUAN"], true, PokemonType.WATER) + .initForGymLeader(signatureSpecies["JUAN"], true, PokemonType.WATER, false, -1) .setBattleBgm("battle_hoenn_gym") .setMixedBattleBgm("battle_hoenn_gym"), [TrainerType.ROARK]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["ROARK"], true, PokemonType.ROCK) + .initForGymLeader(signatureSpecies["ROARK"], true, PokemonType.ROCK, false, -1) .setBattleBgm("battle_sinnoh_gym") .setMixedBattleBgm("battle_sinnoh_gym"), [TrainerType.GARDENIA]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["GARDENIA"], false, PokemonType.GRASS) + .initForGymLeader(signatureSpecies["GARDENIA"], false, PokemonType.GRASS, false, -1) .setBattleBgm("battle_sinnoh_gym") .setMixedBattleBgm("battle_sinnoh_gym"), [TrainerType.MAYLENE]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["MAYLENE"], false, PokemonType.FIGHTING) + .initForGymLeader(signatureSpecies["MAYLENE"], false, PokemonType.FIGHTING, false, -1) .setBattleBgm("battle_sinnoh_gym") .setMixedBattleBgm("battle_sinnoh_gym"), [TrainerType.CRASHER_WAKE]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["CRASHER_WAKE"], true, PokemonType.WATER) + .initForGymLeader(signatureSpecies["CRASHER_WAKE"], true, PokemonType.WATER, false, -1) .setBattleBgm("battle_sinnoh_gym") .setMixedBattleBgm("battle_sinnoh_gym"), [TrainerType.FANTINA]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["FANTINA"], false, PokemonType.GHOST) + .initForGymLeader(signatureSpecies["FANTINA"], false, PokemonType.GHOST, false, -1) .setBattleBgm("battle_sinnoh_gym") .setMixedBattleBgm("battle_sinnoh_gym"), [TrainerType.BYRON]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["BYRON"], true, PokemonType.STEEL) + .initForGymLeader(signatureSpecies["BYRON"], true, PokemonType.STEEL, false, -1) .setBattleBgm("battle_sinnoh_gym") .setMixedBattleBgm("battle_sinnoh_gym"), [TrainerType.CANDICE]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["CANDICE"], false, PokemonType.ICE) + .initForGymLeader(signatureSpecies["CANDICE"], false, PokemonType.ICE, false, -1) .setBattleBgm("battle_sinnoh_gym") .setMixedBattleBgm("battle_sinnoh_gym"), [TrainerType.VOLKNER]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["VOLKNER"], true, PokemonType.ELECTRIC) + .initForGymLeader(signatureSpecies["VOLKNER"], true, PokemonType.ELECTRIC, false, -1) .setBattleBgm("battle_sinnoh_gym") .setMixedBattleBgm("battle_sinnoh_gym"), [TrainerType.CILAN]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["CILAN"], true, PokemonType.GRASS) + .initForGymLeader(signatureSpecies["CILAN"], true, PokemonType.GRASS, false, -1) .setMixedBattleBgm("battle_unova_gym"), [TrainerType.CHILI]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["CHILI"], true, PokemonType.FIRE) + .initForGymLeader(signatureSpecies["CHILI"], true, PokemonType.FIRE, false, -1) .setMixedBattleBgm("battle_unova_gym"), [TrainerType.CRESS]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["CRESS"], true, PokemonType.WATER) + .initForGymLeader(signatureSpecies["CRESS"], true, PokemonType.WATER, false, -1) .setMixedBattleBgm("battle_unova_gym"), [TrainerType.CHEREN]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["CHEREN"], true, PokemonType.NORMAL) + .initForGymLeader(signatureSpecies["CHEREN"], true, PokemonType.NORMAL, false, -1) .setMixedBattleBgm("battle_unova_gym"), [TrainerType.LENORA]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["LENORA"], false, PokemonType.NORMAL) + .initForGymLeader(signatureSpecies["LENORA"], false, PokemonType.NORMAL, false, -1) .setMixedBattleBgm("battle_unova_gym"), [TrainerType.ROXIE]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["ROXIE"], false, PokemonType.POISON) + .initForGymLeader(signatureSpecies["ROXIE"], false, PokemonType.POISON, false, -1) .setMixedBattleBgm("battle_unova_gym"), [TrainerType.BURGH]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["BURGH"], true, PokemonType.BUG) + .initForGymLeader(signatureSpecies["BURGH"], true, PokemonType.BUG, false, -1) .setMixedBattleBgm("battle_unova_gym"), [TrainerType.ELESA]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["ELESA"], false, PokemonType.ELECTRIC) + .initForGymLeader(signatureSpecies["ELESA"], false, PokemonType.ELECTRIC, false, -1) .setMixedBattleBgm("battle_unova_gym"), [TrainerType.CLAY]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["CLAY"], true, PokemonType.GROUND) + .initForGymLeader(signatureSpecies["CLAY"], true, PokemonType.GROUND, false, -1) .setMixedBattleBgm("battle_unova_gym"), [TrainerType.SKYLA]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["SKYLA"], false, PokemonType.FLYING) + .initForGymLeader(signatureSpecies["SKYLA"], false, PokemonType.FLYING, false, -1) .setMixedBattleBgm("battle_unova_gym"), [TrainerType.BRYCEN]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["BRYCEN"], true, PokemonType.ICE) + .initForGymLeader(signatureSpecies["BRYCEN"], true, PokemonType.ICE, false, -1) .setMixedBattleBgm("battle_unova_gym"), [TrainerType.DRAYDEN]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["DRAYDEN"], true, PokemonType.DRAGON) + .initForGymLeader(signatureSpecies["DRAYDEN"], true, PokemonType.DRAGON, false, -1) .setMixedBattleBgm("battle_unova_gym"), [TrainerType.MARLON]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["MARLON"], true, PokemonType.WATER) + .initForGymLeader(signatureSpecies["MARLON"], true, PokemonType.WATER, false, -1) .setMixedBattleBgm("battle_unova_gym"), [TrainerType.VIOLA]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["VIOLA"], false, PokemonType.BUG) + .initForGymLeader(signatureSpecies["VIOLA"], false, PokemonType.BUG, false, -1) .setMixedBattleBgm("battle_kalos_gym"), [TrainerType.GRANT]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["GRANT"], true, PokemonType.ROCK) + .initForGymLeader(signatureSpecies["GRANT"], true, PokemonType.ROCK, false, -1) .setMixedBattleBgm("battle_kalos_gym"), [TrainerType.KORRINA]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["KORRINA"], false, PokemonType.FIGHTING) + .initForGymLeader(signatureSpecies["KORRINA"], false, PokemonType.FIGHTING, false, -1) .setMixedBattleBgm("battle_kalos_gym"), [TrainerType.RAMOS]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["RAMOS"], true, PokemonType.GRASS) + .initForGymLeader(signatureSpecies["RAMOS"], true, PokemonType.GRASS, false, -1) .setMixedBattleBgm("battle_kalos_gym"), [TrainerType.CLEMONT]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["CLEMONT"], true, PokemonType.ELECTRIC) + .initForGymLeader(signatureSpecies["CLEMONT"], true, PokemonType.ELECTRIC, false, -1) .setMixedBattleBgm("battle_kalos_gym"), [TrainerType.VALERIE]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["VALERIE"], false, PokemonType.FAIRY) + .initForGymLeader(signatureSpecies["VALERIE"], false, PokemonType.FAIRY, false, -1) .setMixedBattleBgm("battle_kalos_gym"), [TrainerType.OLYMPIA]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["OLYMPIA"], false, PokemonType.PSYCHIC) + .initForGymLeader(signatureSpecies["OLYMPIA"], false, PokemonType.PSYCHIC, false, -1) .setMixedBattleBgm("battle_kalos_gym"), [TrainerType.WULFRIC]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["WULFRIC"], true, PokemonType.ICE) + .initForGymLeader(signatureSpecies["WULFRIC"], true, PokemonType.ICE, false, -1) .setMixedBattleBgm("battle_kalos_gym"), [TrainerType.MILO]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["MILO"], true, PokemonType.GRASS) + .initForGymLeader(signatureSpecies["MILO"], true, PokemonType.GRASS, false, -1) .setMixedBattleBgm("battle_galar_gym"), [TrainerType.NESSA]: new TrainerConfig(++t) .setName("Nessa") - .initForGymLeader(signatureSpecies["NESSA"], false, PokemonType.WATER) + .initForGymLeader(signatureSpecies["NESSA"], false, PokemonType.WATER, false, -1) .setMixedBattleBgm("battle_galar_gym"), [TrainerType.KABU]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["KABU"], true, PokemonType.FIRE) + .initForGymLeader(signatureSpecies["KABU"], true, PokemonType.FIRE, false, -1) .setMixedBattleBgm("battle_galar_gym"), [TrainerType.BEA]: new TrainerConfig(++t) .setName("Bea") - .initForGymLeader(signatureSpecies["BEA"], false, PokemonType.FIGHTING) + .initForGymLeader(signatureSpecies["BEA"], false, PokemonType.FIGHTING, false, -1) .setMixedBattleBgm("battle_galar_gym"), [TrainerType.ALLISTER]: new TrainerConfig(++t) .setName("Allister") - .initForGymLeader(signatureSpecies["ALLISTER"], true, PokemonType.GHOST) + .initForGymLeader(signatureSpecies["ALLISTER"], true, PokemonType.GHOST, false, -1) .setMixedBattleBgm("battle_galar_gym"), [TrainerType.OPAL]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["OPAL"], false, PokemonType.FAIRY) + .initForGymLeader(signatureSpecies["OPAL"], false, PokemonType.FAIRY, false, -1) .setMixedBattleBgm("battle_galar_gym"), [TrainerType.BEDE]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["BEDE"], true, PokemonType.FAIRY) + .initForGymLeader(signatureSpecies["BEDE"], true, PokemonType.FAIRY, false, -1) .setMixedBattleBgm("battle_galar_gym"), [TrainerType.GORDIE]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["GORDIE"], true, PokemonType.ROCK) + .initForGymLeader(signatureSpecies["GORDIE"], true, PokemonType.ROCK, false, -1) .setMixedBattleBgm("battle_galar_gym"), [TrainerType.MELONY]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["MELONY"], false, PokemonType.ICE) + .initForGymLeader(signatureSpecies["MELONY"], false, PokemonType.ICE, false, -1) .setMixedBattleBgm("battle_galar_gym"), [TrainerType.PIERS]: new TrainerConfig(++t) - .initForGymLeader(signatureSpecies["PIERS"], true, PokemonType.DARK) + .initForGymLeader(signatureSpecies["PIERS"], true, PokemonType.DARK, false, -3) .setHasDouble("piers_marnie_double") .setDoubleTrainerType(TrainerType.MARNIE) .setDoubleTitle("gym_leader_double") .setMixedBattleBgm("battle_galar_gym"), [TrainerType.MARNIE]: new TrainerConfig(++t) .setName("Marnie") - .initForGymLeader(signatureSpecies["MARNIE"], false, PokemonType.DARK) + .initForGymLeader(signatureSpecies["MARNIE"], false, PokemonType.DARK, false, -4) .setHasDouble("marnie_piers_double") .setDoubleTrainerType(TrainerType.PIERS) .setDoubleTitle("gym_leader_double") .setMixedBattleBgm("battle_galar_gym"), [TrainerType.RAIHAN]: new TrainerConfig(++t) .setName("Raihan") - .initForGymLeader(signatureSpecies["RAIHAN"], true, PokemonType.DRAGON) + .initForGymLeader(signatureSpecies["RAIHAN"], true, PokemonType.DRAGON, false, -1) .setMixedBattleBgm("battle_galar_gym"), [TrainerType.KATY]: new TrainerConfig(++t) .initForGymLeader(signatureSpecies["KATY"], false, PokemonType.BUG, true, -1) From 2cf0b51299ef78f1313410441d1ffd6458552813 Mon Sep 17 00:00:00 2001 From: Dean <69436131+emdeann@users.noreply.github.com> Date: Sun, 20 Apr 2025 11:14:19 -0700 Subject: [PATCH 043/262] [Bug] Properly handle suppression with Illusion (#5671) * Remove extra attributes on neutralizing gas * Add IllusionBreakAbAttr to applyOnLose * Add test case --- src/data/abilities/ability.ts | 45 ++++++++++++++++++--------------- test/abilities/illusion.test.ts | 14 ++++++++++ 2 files changed, 39 insertions(+), 20 deletions(-) diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 55a1a4eb902..27c3cb69073 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -2219,18 +2219,6 @@ export class PostSummonMessageAbAttr extends PostSummonAbAttr { } } -/** - * Removes illusions when a Pokemon is summoned. - */ -export class PostSummonRemoveIllusionAbAttr extends PostSummonAbAttr { - applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - for (const pokemon of globalScene.getField(true)) { - pokemon.breakIllusion(); - } - return true; - } -} - export class PostSummonUnnamedMessageAbAttr extends PostSummonAbAttr { //Attr doesn't force pokemon name on the message private message: string; @@ -5177,7 +5165,14 @@ export class IllusionPreSummonAbAttr extends PreSummonAbAttr { } } -export class IllusionBreakAbAttr extends PostDefendAbAttr { +export class IllusionBreakAbAttr extends AbAttr { + override apply(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _cancelled: BooleanHolder | null, _args: any[]): void { + pokemon.breakIllusion(); + pokemon.summonData.illusionBroken = true; + } +} + +export class PostDefendIllusionBreakAbAttr extends PostDefendAbAttr { /** * Destroy the illusion upon taking damage * @@ -6269,7 +6264,7 @@ export function applyOnGainAbAttrs( } /** - * Clears primal weather/neutralizing gas during the turn if {@linkcode pokemon}'s ability corresponds to one + * Applies ability attributes which activate when the ability is lost or suppressed (i.e. primal weather) */ export function applyOnLoseAbAttrs(pokemon: Pokemon, passive = false, simulated = false, ...args: any[]): void { applySingleAbAttrs( @@ -6281,6 +6276,17 @@ export function applyOnLoseAbAttrs(pokemon: Pokemon, passive = false, simulated args, true, simulated); + + applySingleAbAttrs( + pokemon, + passive, + IllusionBreakAbAttr, + (attr, passive) => attr.apply(pokemon, passive, simulated, null, args), + (attr, passive) => attr.canApply(pokemon, passive, simulated, args), + args, + true, + simulated + ) } /** @@ -6780,11 +6786,12 @@ export function initAbilities() { return isNullOrUndefined(movePhase); }, 1.3), new Ability(Abilities.ILLUSION, 5) - //The pokemon generate an illusion if it's available + // The Pokemon generate an illusion if it's available .attr(IllusionPreSummonAbAttr, false) - //The pokemon loses his illusion when he is damaged by a move - .attr(IllusionBreakAbAttr, true) - //Illusion is available again after a battle + .attr(IllusionBreakAbAttr) + // The Pokemon loses its illusion when damaged by a move + .attr(PostDefendIllusionBreakAbAttr, true) + // Illusion is available again after a battle .conditionalAttr((pokemon) => pokemon.isAllowedInBattle(), IllusionPostBattleAbAttr, false) .uncopiable() .bypassFaint(), @@ -7198,8 +7205,6 @@ export function initAbilities() { .attr(PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr) .uncopiable() .attr(NoTransformAbilityAbAttr) - .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonNeutralizingGas", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) - .attr(PostSummonRemoveIllusionAbAttr) .bypassFaint(), new Ability(Abilities.PASTEL_VEIL, 8) .attr(PostSummonUserFieldRemoveStatusEffectAbAttr, StatusEffect.POISON, StatusEffect.TOXIC) diff --git a/test/abilities/illusion.test.ts b/test/abilities/illusion.test.ts index 382d7d74a08..b7c116a1b67 100644 --- a/test/abilities/illusion.test.ts +++ b/test/abilities/illusion.test.ts @@ -142,4 +142,18 @@ describe("Abilities - Illusion", () => { expect(zoroark.isShiny(true)).equals(true); expect(zoroark.getPokeball(true)).equals(PokeballType.GREAT_BALL); }); + + it("breaks when suppressed", async () => { + game.override.moveset(Moves.GASTRO_ACID); + await game.classicMode.startBattle([Species.MAGIKARP]); + const zorua = game.scene.getEnemyPokemon()!; + + expect(!!zorua.summonData?.illusion).toBe(true); + + game.move.select(Moves.GASTRO_ACID); + await game.phaseInterceptor.to(BerryPhase); + + expect(zorua.isFullHp()).toBe(true); + expect(!!zorua.summonData?.illusion).toBe(false); + }); }); From d0be6a9274862456ca806e0869833a45d9fe21b6 Mon Sep 17 00:00:00 2001 From: zaccie Date: Mon, 21 Apr 2025 06:33:17 +1200 Subject: [PATCH 044/262] [Bug] Fix order of operations when displaying enemy Boss level (#5685) * order of operations in creating boss battleInfo fixed a bug where because of an order of operations error in this file it ignored the position update of the boss life value set in battle-info.ts (around line 562) --- src/field/pokemon.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index f2e5fd4c2b6..6356f723a79 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -7162,8 +7162,8 @@ export class EnemyPokemon extends Pokemon { initBattleInfo(): void { if (!this.battleInfo) { this.battleInfo = new EnemyBattleInfo(); - this.battleInfo.updateBossSegments(this); this.battleInfo.initInfo(this); + this.battleInfo.updateBossSegments(this); } else { this.battleInfo.updateBossSegments(this); } From b89b945b11ce8891b28f595cc7ab70266e08cb37 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Sun, 20 Apr 2025 11:51:06 -0700 Subject: [PATCH 045/262] [Dev] Fix imports in `overrides.ts` and `illusion.test.ts` (#5686) --- src/overrides.ts | 8 ++++---- test/abilities/illusion.test.ts | 26 ++++++++++++-------------- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/src/overrides.ts b/src/overrides.ts index d36cfbfac98..7e6a46f2f85 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -2,10 +2,11 @@ import { type PokeballCounts } from "#app/battle-scene"; import { EvolutionItem } from "#app/data/balance/pokemon-evolutions"; import { Gender } from "#app/data/gender"; import { FormChangeItem } from "#app/data/pokemon-forms"; -import { Variant } from "#app/sprites/variant"; import { type ModifierOverride } from "#app/modifier/modifier-type"; +import { Variant } from "#app/sprites/variant"; import { Unlockables } from "#app/system/unlockables"; import { Abilities } from "#enums/abilities"; +import { BattleType } from "#enums/battle-type"; import { BerryType } from "#enums/berry-type"; import { Biome } from "#enums/biome"; import { EggTier } from "#enums/egg-type"; @@ -15,13 +16,12 @@ import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { PokeballType } from "#enums/pokeball"; import { PokemonType } from "#enums/pokemon-type"; import { Species } from "#enums/species"; -import { BATTLE_STATS, Stat } from "#enums/stat"; +import { Stat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; import { TimeOfDay } from "#enums/time-of-day"; +import { TrainerType } from "#enums/trainer-type"; import { VariantTier } from "#enums/variant-tier"; import { WeatherType } from "#enums/weather-type"; -import { TrainerType } from "#enums/trainer-type"; -import { BattleType } from "#enums/battle-type"; /** * This comment block exists to prevent IDEs from automatically removing unused imports diff --git a/test/abilities/illusion.test.ts b/test/abilities/illusion.test.ts index b7c116a1b67..c743a59ef00 100644 --- a/test/abilities/illusion.test.ts +++ b/test/abilities/illusion.test.ts @@ -1,13 +1,11 @@ -import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; -import Phaser from "phaser"; -import GameManager from "#test/testUtils/gameManager"; -import { Species } from "#enums/species"; -import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; -import { Abilities } from "#enums/abilities"; -import { PokeballType } from "#app/enums/pokeball"; import { Gender } from "#app/data/gender"; -import { BerryPhase } from "#app/phases/berry-phase"; +import { PokeballType } from "#app/enums/pokeball"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; describe("Abilities - Illusion", () => { let phaserGame: Phaser.Game; @@ -48,7 +46,7 @@ describe("Abilities - Illusion", () => { await game.classicMode.startBattle([Species.AXEW]); game.move.select(Moves.TACKLE); - await game.phaseInterceptor.to(TurnEndPhase); + await game.phaseInterceptor.to("TurnEndPhase"); const zorua = game.scene.getEnemyPokemon()!; @@ -60,7 +58,7 @@ describe("Abilities - Illusion", () => { await game.classicMode.startBattle([Species.AXEW]); game.move.select(Moves.WORRY_SEED); - await game.phaseInterceptor.to(TurnEndPhase); + await game.phaseInterceptor.to("TurnEndPhase"); const zorua = game.scene.getEnemyPokemon()!; @@ -114,7 +112,7 @@ describe("Abilities - Illusion", () => { game.move.select(Moves.FLARE_BLITZ); - await game.phaseInterceptor.to(TurnEndPhase); + await game.phaseInterceptor.to("TurnEndPhase"); const zoroark = game.scene.getPlayerPokemon()!; @@ -132,7 +130,7 @@ describe("Abilities - Illusion", () => { game.doSwitchPokemon(1); - await game.phaseInterceptor.to(TurnEndPhase); + await game.phaseInterceptor.to("TurnEndPhase"); const zoroark = game.scene.getPlayerPokemon()!; @@ -151,7 +149,7 @@ describe("Abilities - Illusion", () => { expect(!!zorua.summonData?.illusion).toBe(true); game.move.select(Moves.GASTRO_ACID); - await game.phaseInterceptor.to(BerryPhase); + await game.phaseInterceptor.to("BerryPhase"); expect(zorua.isFullHp()).toBe(true); expect(!!zorua.summonData?.illusion).toBe(false); From 0da56cda9fef735490aeaca691a2fed60f97acf6 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Mon, 21 Apr 2025 13:46:32 -0500 Subject: [PATCH 046/262] [Bug][Sprite] Fix variant loading console spam (#5690) --- src/data/pokemon-species.ts | 42 ++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 95ff28e61e0..34efefd2849 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -27,7 +27,7 @@ import { } from "#app/data/balance/pokemon-level-moves"; import type { Stat } from "#enums/stat"; import type { Variant, VariantSet } from "#app/sprites/variant"; -import { populateVariantColorCache, variantData } from "#app/sprites/variant"; +import { populateVariantColorCache, variantColorCache, variantData } from "#app/sprites/variant"; import { speciesStarterCosts, POKERUS_STARTER_COUNT } from "#app/data/balance/starters"; import { SpeciesFormKey } from "#enums/species-form-key"; import { starterPassiveAbilities } from "#app/data/balance/passives"; @@ -594,6 +594,34 @@ export abstract class PokemonSpeciesForm { return true; } + /** + * Load the variant colors for the species into the variant color cache + * + * @param spriteKey - The sprite key to use + * @param female - Whether to get + * + */ + async loadVariantColors(spriteKey: string, female: boolean, variant: Variant, formIndex?: number): Promise { + const baseSpriteKey = this.getBaseSpriteKey(female, formIndex); + + if (variantColorCache.hasOwnProperty(baseSpriteKey)) { + // Variant colors have already been loaded + return; + } + + const variantInfo = variantData[this.getVariantDataIndex(formIndex)]; + // Do nothing if there is no variant information or the variant does not have color replacements + if (!variantInfo || variantInfo[variant] !== 1) { + return; + } + + await populateVariantColorCache( + "pkmn__" + baseSpriteKey, + globalScene.experimentalSprites && hasExpSprite(spriteKey), + baseSpriteKey, + ); + } + async loadAssets( female: boolean, formIndex?: number, @@ -606,15 +634,9 @@ export abstract class PokemonSpeciesForm { const spriteKey = this.getSpriteKey(female, formIndex, shiny, variant, back); globalScene.loadPokemonAtlas(spriteKey, this.getSpriteAtlasPath(female, formIndex, shiny, variant, back)); globalScene.load.audio(this.getCryKey(formIndex), `audio/${this.getCryKey(formIndex)}.m4a`); - - const baseSpriteKey = this.getBaseSpriteKey(female, formIndex); - - // Force the variant color cache to be loaded for the form - await populateVariantColorCache( - "pkmn__" + baseSpriteKey, - globalScene.experimentalSprites && hasExpSprite(spriteKey), - baseSpriteKey, - ); + if (!isNullOrUndefined(variant)) { + await this.loadVariantColors(spriteKey, female, variant, formIndex); + } return new Promise(resolve => { globalScene.load.once(Phaser.Loader.Events.COMPLETE, () => { const originalWarn = console.warn; From be6a117b1e0716e5f3b0cd7c495ebe01bd0a4350 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Mon, 21 Apr 2025 14:52:08 -0500 Subject: [PATCH 047/262] [Bug][Sprite] Fix variants not using recolors for back sprite (#5691) Fix variants not showing back recolors with exp --- src/data/pokemon-species.ts | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 34efefd2849..2fff2b562c0 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -404,7 +404,7 @@ export abstract class PokemonSpeciesForm { } /** Compute the sprite ID of the pokemon form. */ - getSpriteId(female: boolean, formIndex?: number, shiny?: boolean, variant = 0, back?: boolean): string { + getSpriteId(female: boolean, formIndex?: number, shiny?: boolean, variant = 0, back = false): string { const baseSpriteKey = this.getBaseSpriteKey(female, formIndex); let config = variantData; @@ -598,11 +598,21 @@ export abstract class PokemonSpeciesForm { * Load the variant colors for the species into the variant color cache * * @param spriteKey - The sprite key to use - * @param female - Whether to get + * @param female - Whether to load female instead of male + * @param back - Whether the back sprite is being loaded * */ - async loadVariantColors(spriteKey: string, female: boolean, variant: Variant, formIndex?: number): Promise { - const baseSpriteKey = this.getBaseSpriteKey(female, formIndex); + async loadVariantColors( + spriteKey: string, + female: boolean, + variant: Variant, + back = false, + formIndex?: number, + ): Promise { + let baseSpriteKey = this.getBaseSpriteKey(female, formIndex); + if (back) { + baseSpriteKey = "back__" + baseSpriteKey; + } if (variantColorCache.hasOwnProperty(baseSpriteKey)) { // Variant colors have already been loaded @@ -618,7 +628,7 @@ export abstract class PokemonSpeciesForm { await populateVariantColorCache( "pkmn__" + baseSpriteKey, globalScene.experimentalSprites && hasExpSprite(spriteKey), - baseSpriteKey, + baseSpriteKey.replace("__", "/"), ); } @@ -635,7 +645,7 @@ export abstract class PokemonSpeciesForm { globalScene.loadPokemonAtlas(spriteKey, this.getSpriteAtlasPath(female, formIndex, shiny, variant, back)); globalScene.load.audio(this.getCryKey(formIndex), `audio/${this.getCryKey(formIndex)}.m4a`); if (!isNullOrUndefined(variant)) { - await this.loadVariantColors(spriteKey, female, variant, formIndex); + await this.loadVariantColors(spriteKey, female, variant, back, formIndex); } return new Promise(resolve => { globalScene.load.once(Phaser.Loader.Events.COMPLETE, () => { From aadb57ab75ab5af4355c50f7e5132bebd016a1e6 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Tue, 22 Apr 2025 20:03:49 -0400 Subject: [PATCH 048/262] [Balance] [Mystery] Salesman ME offers mons from event encounter pool (#5674) * Initial event commit * Salesman odds * Clean up imports * globalScene shiny rate getter, fix reroll, remove placeholder event * Rerolling shiny also tries rerolling for better variant * Shiny reroll affects 'trainer' mons too --------- Co-authored-by: damocleas Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> --- .../the-pokemon-salesman-encounter.ts | 49 ++++++++++++++++--- .../utils/encounter-phase-utils.ts | 4 +- src/field/pokemon.ts | 32 ++++++------ 3 files changed, 61 insertions(+), 24 deletions(-) diff --git a/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts b/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts index 4e8e1c2524e..cfff59b45f5 100644 --- a/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts @@ -3,7 +3,7 @@ import { transitionMysteryEncounterIntroVisuals, updatePlayerMoney, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { isNullOrUndefined, randSeedInt } from "#app/utils/common"; +import { isNullOrUndefined, NumberHolder, randSeedInt, randSeedItem } from "#app/utils/common"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { globalScene } from "#app/global-scene"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; @@ -28,7 +28,8 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; import { Abilities } from "#enums/abilities"; -import { NON_LEGEND_PARADOX_POKEMON } from "#app/data/balance/special-species-groups"; +import { NON_LEGEND_PARADOX_POKEMON, NON_LEGEND_ULTRA_BEASTS } from "#app/data/balance/special-species-groups"; +import { timedEventManager } from "#app/global-event-manager"; /** the i18n namespace for this encounter */ const namespace = "mysteryEncounters/thePokemonSalesman"; @@ -38,6 +39,9 @@ const MAX_POKEMON_PRICE_MULTIPLIER = 4; /** Odds of shiny magikarp will be 1/value */ const SHINY_MAGIKARP_WEIGHT = 100; +/** Odds of event sale will be value/100 */ +const EVENT_THRESHOLD = 50; + /** * Pokemon Salesman encounter. * @see {@link https://github.com/pagefaultgames/pokerogue/issues/3799 | GitHub Issue #3799} @@ -82,15 +86,46 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter = MysteryEncounterBui tries++; } + const r = randSeedInt(SHINY_MAGIKARP_WEIGHT); + + const validEventEncounters = timedEventManager + .getEventEncounters() + .filter( + s => + !getPokemonSpecies(s.species).legendary && + !getPokemonSpecies(s.species).subLegendary && + !getPokemonSpecies(s.species).mythical && + !NON_LEGEND_PARADOX_POKEMON.includes(s.species) && + !NON_LEGEND_ULTRA_BEASTS.includes(s.species), + ); + let pokemon: PlayerPokemon; + /** + * Mon is determined as follows: + * If you roll the 1% for Shiny Magikarp, you get Magikarp with a random variant + * If an event with more than 1 valid event encounter species is active, you have 20% chance to get one of those + * If the rolled species has no HA, and there are valid event encounters, you will get one of those + * If the rolled species has no HA and there are no valid event encounters, you will get Shiny Magikarp + * Mons rolled from the event encounter pool get 2 extra shiny rolls + */ if ( - randSeedInt(SHINY_MAGIKARP_WEIGHT) === 0 || - isNullOrUndefined(species.abilityHidden) || - species.abilityHidden === Abilities.NONE + r === 0 || + ((isNullOrUndefined(species.abilityHidden) || species.abilityHidden === Abilities.NONE) && + (validEventEncounters.length === 0)) ) { - // If no HA mon found or you roll 1%, give shiny Magikarp with random variant + // If you roll 1%, give shiny Magikarp with random variant species = getPokemonSpecies(Species.MAGIKARP); - pokemon = new PlayerPokemon(species, 5, 2, species.formIndex, undefined, true); + pokemon = new PlayerPokemon(species, 5, 2, undefined, undefined, true); + } else if ( + (validEventEncounters.length > 0 && (r <= EVENT_THRESHOLD || + (isNullOrUndefined(species.abilityHidden) || species.abilityHidden === Abilities.NONE))) + ) { + // If you roll 20%, give event encounter with 2 extra shiny rolls and its HA, if it has one + const enc = randSeedItem(validEventEncounters); + species = getPokemonSpecies(enc.species); + pokemon = new PlayerPokemon(species, 5, species.abilityHidden === Abilities.NONE ? undefined : 2, enc.formIndex); + pokemon.trySetShinySeed(); + pokemon.trySetShinySeed(); } else { pokemon = new PlayerPokemon(species, 5, 2, species.formIndex); } diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index d77b70caa31..65051b937f8 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -1075,8 +1075,8 @@ export function getRandomEncounterSpecies(level: number, isBoss = false, rerollH ret.formIndex = formIndex; } - //Reroll shiny for event encounters - if (isEventEncounter && !ret.shiny) { + //Reroll shiny or variant for event encounters + if (isEventEncounter) { ret.trySetShinySeed(); } //Reroll hidden ability diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 6356f723a79..86d74ea5555 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -3170,7 +3170,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** * Function that tries to set a Pokemon shiny based on seed. * For manual use only, usually to roll a Pokemon's shiny chance a second time. - * If it rolls shiny, also sets a random variant and give the Pokemon the associated luck. + * If it rolls shiny, or if it's already shiny, also sets a random variant and give the Pokemon the associated luck. * * The base shiny odds are {@linkcode BASE_SHINY_CHANCE} / `65536` * @param thresholdOverride number that is divided by `2^16` (`65536`) to get the shiny chance, overrides {@linkcode shinyThreshold} if set (bypassing shiny rate modifiers such as Shiny Charm) @@ -3181,29 +3181,31 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { thresholdOverride?: number, applyModifiersToOverride?: boolean, ): boolean { - const shinyThreshold = new NumberHolder(BASE_SHINY_CHANCE); - if (thresholdOverride === undefined || applyModifiersToOverride) { - if (thresholdOverride !== undefined && applyModifiersToOverride) { - shinyThreshold.value = thresholdOverride; - } - if (timedEventManager.isEventActive()) { - shinyThreshold.value *= timedEventManager.getShinyMultiplier(); - } - if (!this.hasTrainer()) { + if (!this.shiny) { + const shinyThreshold = new NumberHolder(BASE_SHINY_CHANCE); + if (thresholdOverride === undefined || applyModifiersToOverride) { + if (thresholdOverride !== undefined && applyModifiersToOverride) { + shinyThreshold.value = thresholdOverride; + } + if (timedEventManager.isEventActive()) { + shinyThreshold.value *= timedEventManager.getShinyMultiplier(); + } globalScene.applyModifiers( ShinyRateBoosterModifier, true, shinyThreshold, ); } - } else { - shinyThreshold.value = thresholdOverride; + else { + shinyThreshold.value = thresholdOverride; + } + + this.shiny = randSeedInt(65536) < shinyThreshold.value; } - this.shiny = randSeedInt(65536) < shinyThreshold.value; - if (this.shiny) { - this.variant = this.generateShinyVariant(); + this.variant = this.variant ?? 0; + this.variant = Math.max(this.generateShinyVariant(), this.variant) as Variant; // Don't set a variant lower than the current one this.luck = this.variant + 1 + (this.fusionShiny ? this.fusionVariant + 1 : 0); this.initShinySparkle(); From 110fd2f0a1888787f7b267f71b233ed1d1a63675 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Tue, 22 Apr 2025 19:10:27 -0500 Subject: [PATCH 049/262] [Refactor][Move] Refactor move effect phase (#5678) * Add enum for hit check result Co-authored-by: innerthunder * Refactor parameter list for pokemon#getBaseDamage and pokemon#getAttackDamage * Rewrite move phase Co-authored-by: innerthunder * Update tests to reflect move effect phase changes Co-authored-by: innerthunder * Fix pluck / bug bite Co-authored-by: innerthunder * Fix reviver seed ohko, remove leftover dead code Co-authored-by: innerthunder * Cleanup jsdoc comments * Remove hitsSubstitute check from postDefend abilities * Fix improper i18nkey in moveEffectPhase#applyToTargets * Cleanup comments * Fix type issue with substitute test * Move MYSTERY_ENCOUNTER_WAVES to constants.ts * Update linkcode in damageparams to use proper tsdoc syntax --------- Co-authored-by: innerthunder --- src/constants.ts | 5 + src/data/abilities/ability.ts | 44 +- src/data/arena-tag.ts | 10 +- src/data/battler-tags.ts | 6 +- src/data/moves/move-utils.ts | 20 + src/data/moves/move.ts | 172 +-- .../encounters/a-trainers-test-encounter.ts | 2 +- .../encounters/absolute-avarice-encounter.ts | 2 +- .../an-offer-you-cant-refuse-encounter.ts | 2 +- .../encounters/berries-abound-encounter.ts | 2 +- .../encounters/bug-type-superfan-encounter.ts | 2 +- .../encounters/clowning-around-encounter.ts | 2 +- .../encounters/dancing-lessons-encounter.ts | 2 +- .../encounters/dark-deal-encounter.ts | 2 +- .../encounters/delibirdy-encounter.ts | 2 +- .../department-store-sale-encounter.ts | 2 +- .../encounters/field-trip-encounter.ts | 2 +- .../encounters/fiery-fallout-encounter.ts | 2 +- .../encounters/fight-or-flight-encounter.ts | 2 +- .../encounters/fun-and-games-encounter.ts | 2 +- .../global-trade-system-encounter.ts | 2 +- .../encounters/lost-at-sea-encounter.ts | 2 +- .../mysterious-challengers-encounter.ts | 2 +- .../encounters/mysterious-chest-encounter.ts | 2 +- .../encounters/part-timer-encounter.ts | 2 +- .../encounters/safari-zone-encounter.ts | 2 +- .../shady-vitamin-dealer-encounter.ts | 2 +- .../slumbering-snorlax-encounter.ts | 2 +- .../teleporting-hijinks-encounter.ts | 2 +- .../the-expert-pokemon-breeder-encounter.ts | 2 +- .../the-pokemon-salesman-encounter.ts | 2 +- .../encounters/the-strong-stuff-encounter.ts | 2 +- .../the-winstrate-challenge-encounter.ts | 2 +- .../encounters/training-session-encounter.ts | 2 +- .../encounters/trash-to-treasure-encounter.ts | 2 +- .../encounters/uncommon-breed-encounter.ts | 2 +- src/enums/MoveEffectTrigger.ts | 1 - src/enums/hit-check-result.ts | 23 + src/field/pokemon.ts | 399 ++---- src/game-mode.ts | 5 +- src/phases/faint-phase.ts | 10 +- src/phases/move-effect-phase.ts | 1166 +++++++++-------- src/phases/move-phase.ts | 5 +- test/abilities/friend_guard.test.ts | 11 +- test/abilities/galvanize.test.ts | 27 +- test/abilities/infiltrator.test.ts | 4 +- test/abilities/no_guard.test.ts | 4 +- test/abilities/shield_dust.test.ts | 2 +- test/abilities/super_luck.test.ts | 1 - test/abilities/tera_shell.test.ts | 14 +- test/battle/damage_calculation.test.ts | 8 +- test/battlerTags/substitute.test.ts | 8 +- test/items/dire_hit.test.ts | 3 +- test/items/leek.test.ts | 1 - test/items/scope_lens.test.ts | 3 +- test/moves/dig.test.ts | 10 +- test/moves/dynamax_cannon.test.ts | 16 +- test/moves/fusion_flare_bolt.test.ts | 36 +- test/moves/spectral_thief.test.ts | 4 +- test/moves/tera_blast.test.ts | 27 +- test/testUtils/helpers/moveHelper.ts | 20 +- 61 files changed, 1057 insertions(+), 1068 deletions(-) create mode 100644 src/data/moves/move-utils.ts create mode 100644 src/enums/hit-check-result.ts diff --git a/src/constants.ts b/src/constants.ts index 927575c0a28..dc901e4a766 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -9,3 +9,8 @@ export const SESSION_ID_COOKIE_NAME: string = "pokerogue_sessionId"; /** Max value for an integer attribute in {@linkcode SystemSaveData} */ export const MAX_INT_ATTR_VALUE = 0x80000000; + +/** The min and max waves for mystery encounters to spawn in classic mode */ +export const CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES: [number, number] = [10, 180] as const; +/** The min and max waves for mystery encounters to spawn in challenge mode */ +export const CHALLENGE_MODE_MYSTERY_ENCOUNTER_WAVES: [number, number] = [10, 180] as const; diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 27c3cb69073..53d024ac655 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -653,8 +653,8 @@ export class MoveImmunityStatStageChangeAbAttr extends MoveImmunityAbAttr { */ export class ReverseDrainAbAttr extends PostDefendAbAttr { - override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - return move.hasAttr(HitHealAttr) && !move.hitsSubstitute(attacker, pokemon); + override canApplyPostDefend(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _attacker: Pokemon, move: Move, _hitResult: HitResult | null, args: any[]): boolean { + return move.hasAttr(HitHealAttr); } /** @@ -693,7 +693,7 @@ export class PostDefendStatStageChangeAbAttr extends PostDefendAbAttr { } override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - return this.condition(pokemon, attacker, move) && !move.hitsSubstitute(attacker, pokemon); + return this.condition(pokemon, attacker, move); } override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { @@ -734,7 +734,7 @@ export class PostDefendHpGatedStatStageChangeAbAttr extends PostDefendAbAttr { const hpGateFlat: number = Math.ceil(pokemon.getMaxHp() * this.hpGate); const lastAttackReceived = pokemon.turnData.attacksReceived[pokemon.turnData.attacksReceived.length - 1]; const damageReceived = lastAttackReceived?.damage || 0; - return this.condition(pokemon, attacker, move) && (pokemon.hp <= hpGateFlat && (pokemon.hp + damageReceived) > hpGateFlat) && !move.hitsSubstitute(attacker, pokemon); + return this.condition(pokemon, attacker, move) && (pokemon.hp <= hpGateFlat && (pokemon.hp + damageReceived) > hpGateFlat); } override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { @@ -757,7 +757,7 @@ export class PostDefendApplyArenaTrapTagAbAttr extends PostDefendAbAttr { override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { const tag = globalScene.arena.getTag(this.tagType) as ArenaTrapTag; - return (this.condition(pokemon, attacker, move) && !move.hitsSubstitute(attacker, pokemon)) + return (this.condition(pokemon, attacker, move)) && (!globalScene.arena.getTag(this.tagType) || tag.layers < tag.maxLayers); } @@ -779,7 +779,7 @@ export class PostDefendApplyBattlerTagAbAttr extends PostDefendAbAttr { } override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - return this.condition(pokemon, attacker, move) && !move.hitsSubstitute(attacker, pokemon); + return this.condition(pokemon, attacker, move); } override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { @@ -796,7 +796,7 @@ export class PostDefendTypeChangeAbAttr extends PostDefendAbAttr { override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { this.type = attacker.getMoveType(move); const pokemonTypes = pokemon.getTypes(true); - return hitResult < HitResult.NO_EFFECT && !move.hitsSubstitute(attacker, pokemon) && (simulated || pokemonTypes.length !== 1 || pokemonTypes[0] !== this.type); + return hitResult < HitResult.NO_EFFECT && (simulated || pokemonTypes.length !== 1 || pokemonTypes[0] !== this.type); } override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, _args: any[]): void { @@ -823,7 +823,7 @@ export class PostDefendTerrainChangeAbAttr extends PostDefendAbAttr { } override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { - return hitResult < HitResult.NO_EFFECT && !move.hitsSubstitute(attacker, pokemon) && globalScene.arena.canSetTerrain(this.terrainType); + return hitResult < HitResult.NO_EFFECT && globalScene.arena.canSetTerrain(this.terrainType); } override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, _args: any[]): void { @@ -847,7 +847,7 @@ export class PostDefendContactApplyStatusEffectAbAttr extends PostDefendAbAttr { override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { const effect = this.effects.length === 1 ? this.effects[0] : this.effects[pokemon.randSeedInt(this.effects.length)]; return move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) && !attacker.status - && (this.chance === -1 || pokemon.randSeedInt(100) < this.chance) && !move.hitsSubstitute(attacker, pokemon) + && (this.chance === -1 || pokemon.randSeedInt(100) < this.chance) && attacker.canSetStatus(effect, true, false, pokemon); } @@ -887,7 +887,7 @@ export class PostDefendContactApplyTagChanceAbAttr extends PostDefendAbAttr { override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { return move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) && pokemon.randSeedInt(100) < this.chance - && !move.hitsSubstitute(attacker, pokemon) && attacker.canAddTag(this.tagType); + && attacker.canAddTag(this.tagType); } override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { @@ -908,10 +908,6 @@ export class PostDefendCritStatStageChangeAbAttr extends PostDefendAbAttr { this.stages = stages; } - override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - return !move.hitsSubstitute(attacker, pokemon); - } - override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { if (!simulated) { globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ this.stat ], this.stages)); @@ -934,7 +930,7 @@ export class PostDefendContactDamageAbAttr extends PostDefendAbAttr { override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { return !simulated && move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) - && !attacker.hasAbilityWithAttr(BlockNonDirectDamageAbAttr) && !move.hitsSubstitute(attacker, pokemon); + && !attacker.hasAbilityWithAttr(BlockNonDirectDamageAbAttr); } override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { @@ -993,7 +989,7 @@ export class PostDefendWeatherChangeAbAttr extends PostDefendAbAttr { } override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - return (!(this.condition && !this.condition(pokemon, attacker, move) || move.hitsSubstitute(attacker, pokemon)) + return (!(this.condition && !this.condition(pokemon, attacker, move)) && !globalScene.arena.weather?.isImmutable() && globalScene.arena.canSetWeather(this.weatherType)); } @@ -1011,7 +1007,7 @@ export class PostDefendAbilitySwapAbAttr extends PostDefendAbAttr { override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { return move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) - && attacker.getAbility().isSwappable && !move.hitsSubstitute(attacker, pokemon); + && attacker.getAbility().isSwappable; } override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, args: any[]): void { @@ -1037,10 +1033,10 @@ export class PostDefendAbilityGiveAbAttr extends PostDefendAbAttr { override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { return move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) && attacker.getAbility().isSuppressable - && !attacker.getAbility().hasAttr(PostDefendAbilityGiveAbAttr) && !move.hitsSubstitute(attacker, pokemon); + && !attacker.getAbility().hasAttr(PostDefendAbilityGiveAbAttr); } - override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { + override applyPostDefend(_pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { if (!simulated) { attacker.setTempAbility(allAbilities[this.ability]); } @@ -1066,7 +1062,7 @@ export class PostDefendMoveDisableAbAttr extends PostDefendAbAttr { } override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - return attacker.getTag(BattlerTagType.DISABLED) === null && !move.hitsSubstitute(attacker, pokemon) + return attacker.getTag(BattlerTagType.DISABLED) === null && move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) && (this.chance === -1 || pokemon.randSeedInt(100) < this.chance); } @@ -1770,7 +1766,6 @@ export class PostAttackApplyStatusEffectAbAttr extends PostAttackAbAttr { override canApplyPostAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { if ( super.canApplyPostAttack(pokemon, passive, simulated, attacker, move, hitResult, args) - && !(pokemon !== attacker && move.hitsSubstitute(attacker, pokemon)) && (simulated || !attacker.hasAbilityWithAttr(IgnoreMoveEffectsAbAttr) && pokemon !== attacker && (!this.contactRequired || move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon})) && pokemon.randSeedInt(100) < this.chance && !pokemon.status) ) { @@ -1837,8 +1832,7 @@ export class PostDefendStealHeldItemAbAttr extends PostDefendAbAttr { if ( !simulated && hitResult < HitResult.NO_EFFECT && - (!this.condition || this.condition(pokemon, attacker, move)) && - !move.hitsSubstitute(attacker, pokemon) + (!this.condition || this.condition(pokemon, attacker, move)) ) { const heldItems = this.getTargetHeldItems(attacker).filter((i) => i.isTransferable); if (heldItems.length) { @@ -5063,6 +5057,8 @@ export class PostSummonStatStageChangeOnArenaAbAttr extends PostSummonStatStageC /** * Takes no damage from the first hit of a damaging move. * This is used in the Disguise and Ice Face abilities. + * + * Does not apply to a user's substitute * @extends ReceivedMoveDamageMultiplierAbAttr */ export class FormBlockDamageAbAttr extends ReceivedMoveDamageMultiplierAbAttr { @@ -7410,4 +7406,4 @@ export function initAbilities() { .unreplaceable() // TODO is this true? .attr(ConfusionOnStatusEffectAbAttr, StatusEffect.POISON, StatusEffect.TOXIC) ); -} +} \ No newline at end of file diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index 2ef98723cea..ff9e4068292 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -7,7 +7,7 @@ import { MoveTarget } from "#enums/MoveTarget"; import { MoveCategory } from "#enums/MoveCategory"; import { getPokemonNameWithAffix } from "#app/messages"; import type Pokemon from "#app/field/pokemon"; -import { HitResult, PokemonMove } from "#app/field/pokemon"; +import { HitResult } from "#app/field/pokemon"; import { StatusEffect } from "#enums/status-effect"; import type { BattlerIndex } from "#app/battle"; import { @@ -335,7 +335,7 @@ export class ConditionalProtectTag extends ArenaTag { * @param arena the {@linkcode Arena} containing this tag * @param simulated `true` if the tag is applied quietly; `false` otherwise. * @param isProtected a {@linkcode BooleanHolder} used to flag if the move is protected against - * @param attacker the attacking {@linkcode Pokemon} + * @param _attacker the attacking {@linkcode Pokemon} * @param defender the defending {@linkcode Pokemon} * @param moveId the {@linkcode Moves | identifier} for the move being used * @param ignoresProtectBypass a {@linkcode BooleanHolder} used to flag if a protection effect supercedes effects that ignore protection @@ -345,7 +345,7 @@ export class ConditionalProtectTag extends ArenaTag { arena: Arena, simulated: boolean, isProtected: BooleanHolder, - attacker: Pokemon, + _attacker: Pokemon, defender: Pokemon, moveId: Moves, ignoresProtectBypass: BooleanHolder, @@ -354,8 +354,6 @@ export class ConditionalProtectTag extends ArenaTag { if (!isProtected.value) { isProtected.value = true; if (!simulated) { - attacker.stopMultiHit(defender); - new CommonBattleAnim(CommonAnim.PROTECT, defender).play(); globalScene.queueMessage( i18next.t("arenaTag:conditionalProtectApply", { @@ -899,7 +897,7 @@ export class DelayedAttackTag extends ArenaTag { if (!ret) { globalScene.unshiftPhase( - new MoveEffectPhase(this.sourceId!, [this.targetIndex], new PokemonMove(this.sourceMove!, 0, 0, true)), + new MoveEffectPhase(this.sourceId!, [this.targetIndex], allMoves[this.sourceMove!], false, true), ); // TODO: are those bangs correct? } diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 3b2421897c9..ee41f0435b9 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -2637,7 +2637,7 @@ export class GulpMissileTag extends BattlerTag { return false; } - if (moveEffectPhase.move.getMove().hitsSubstitute(attacker, pokemon)) { + if (moveEffectPhase.move.hitsSubstitute(attacker, pokemon)) { return true; } @@ -2993,7 +2993,7 @@ export class SubstituteTag extends BattlerTag { if (!attacker) { return; } - const move = moveEffectPhase.move.getMove(); + const move = moveEffectPhase.move; const firstHit = attacker.turnData.hitCount === attacker.turnData.hitsLeft; if (firstHit && move.hitsSubstitute(attacker, pokemon)) { @@ -3681,7 +3681,7 @@ function getMoveEffectPhaseData(_pokemon: Pokemon): { phase: MoveEffectPhase; at return { phase: phase, attacker: phase.getPokemon(), - move: phase.move.getMove(), + move: phase.move, }; } return null; diff --git a/src/data/moves/move-utils.ts b/src/data/moves/move-utils.ts new file mode 100644 index 00000000000..3323d6f4a0c --- /dev/null +++ b/src/data/moves/move-utils.ts @@ -0,0 +1,20 @@ +import { MoveTarget } from "#enums/MoveTarget"; +import type Move from "./move"; + +/** + * Return whether the move targets the field + * + * Examples include + * - Hazard moves like spikes + * - Weather moves like rain dance + * - User side moves like reflect and safeguard + */ +export function isFieldTargeted(move: Move): boolean { + switch (move.moveTarget) { + case MoveTarget.BOTH_SIDES: + case MoveTarget.USER_SIDE: + case MoveTarget.ENEMY_SIDE: + return true; + } + return false; +} diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 26654fee18f..35d98f6f781 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -60,6 +60,7 @@ import { MoveTypeChangeAbAttr, PostDamageForceSwitchAbAttr, PostItemLostAbAttr, + ReflectStatusMoveAbAttr, ReverseDrainAbAttr, UserFieldMoveTypePowerBoostAbAttr, VariableMovePowerAbAttr, @@ -665,6 +666,17 @@ export default class Move implements Localizable { return true; } break; + case MoveFlags.REFLECTABLE: + // If the target is not semi-invulnerable and either has magic coat active or an unignored magic bounce ability + if ( + target?.getTag(SemiInvulnerableTag) || + !(target?.getTag(BattlerTagType.MAGIC_COAT) || + (!this.doesFlagEffectApply({ flag: MoveFlags.IGNORE_ABILITIES, user, target }) && + target?.hasAbilityWithAttr(ReflectStatusMoveAbAttr))) + ) { + return false; + } + break; } return !!(this.flags & flag); @@ -1716,7 +1728,7 @@ export class SacrificialAttr extends MoveEffectAttr { **/ export class SacrificialAttrOnHit extends MoveEffectAttr { constructor() { - super(true, { trigger: MoveEffectTrigger.HIT }); + super(true); } /** @@ -1955,6 +1967,14 @@ export class PartyStatusCureAttr extends MoveEffectAttr { * @extends MoveEffectAttr */ export class FlameBurstAttr extends MoveEffectAttr { + constructor() { + /** + * This is self-targeted to bypass immunity to target-facing secondary + * effects when the target has an active Substitute doll. + * TODO: Find a more intuitive way to implement Substitute bypassing. + */ + super(true); + } /** * @param user - n/a * @param target - The target Pokémon. @@ -2177,7 +2197,7 @@ export class HitHealAttr extends MoveEffectAttr { private healStat: EffectiveStat | null; constructor(healRatio?: number | null, healStat?: EffectiveStat) { - super(true, { trigger: MoveEffectTrigger.HIT }); + super(true); this.healRatio = healRatio ?? 0.5; this.healStat = healStat ?? null; @@ -2426,7 +2446,7 @@ export class StatusEffectAttr extends MoveEffectAttr { public overrideStatus: boolean = false; constructor(effect: StatusEffect, selfTarget?: boolean, turnsRemaining?: number, overrideStatus: boolean = false) { - super(selfTarget, { trigger: MoveEffectTrigger.HIT }); + super(selfTarget); this.effect = effect; this.turnsRemaining = turnsRemaining; @@ -2434,10 +2454,6 @@ export class StatusEffectAttr extends MoveEffectAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - if (!this.selfTarget && move.hitsSubstitute(user, target)) { - return false; - } - const moveChance = this.getMoveChance(user, target, move, this.selfTarget, true); const statusCheck = moveChance < 0 || moveChance === 100 || user.randSeedInt(100) < moveChance; if (statusCheck) { @@ -2495,7 +2511,7 @@ export class MultiStatusEffectAttr extends StatusEffectAttr { export class PsychoShiftEffectAttr extends MoveEffectAttr { constructor() { - super(false, { trigger: MoveEffectTrigger.HIT }); + super(false); } /** @@ -2534,15 +2550,11 @@ export class StealHeldItemChanceAttr extends MoveEffectAttr { private chance: number; constructor(chance: number) { - super(false, { trigger: MoveEffectTrigger.HIT }); + super(false); this.chance = chance; } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - if (move.hitsSubstitute(user, target)) { - return false; - } - const rand = Phaser.Math.RND.realInRange(0, 1); if (rand >= this.chance) { return false; @@ -2590,7 +2602,7 @@ export class RemoveHeldItemAttr extends MoveEffectAttr { private berriesOnly: boolean; constructor(berriesOnly: boolean) { - super(false, { trigger: MoveEffectTrigger.HIT }); + super(false); this.berriesOnly = berriesOnly; } @@ -2600,17 +2612,13 @@ export class RemoveHeldItemAttr extends MoveEffectAttr { * @param target Target {@linkcode Pokemon} that the moves applies to * @param move {@linkcode Move} that is used * @param args N/A - * @returns {boolean} True if an item was removed + * @returns True if an item was removed */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (!this.berriesOnly && target.isPlayer()) { // "Wild Pokemon cannot knock off Player Pokemon's held items" (See Bulbapedia) return false; } - if (move.hitsSubstitute(user, target)) { - return false; - } - const cancelled = new BooleanHolder(false); applyAbAttrs(BlockItemTheftAbAttr, target, cancelled); // Check for abilities that block item theft @@ -2664,8 +2672,8 @@ export class RemoveHeldItemAttr extends MoveEffectAttr { */ export class EatBerryAttr extends MoveEffectAttr { protected chosenBerry: BerryModifier | undefined; - constructor() { - super(true, { trigger: MoveEffectTrigger.HIT }); + constructor(selfTarget: boolean) { + super(selfTarget); } /** * Causes the target to eat a berry. @@ -2680,17 +2688,20 @@ export class EatBerryAttr extends MoveEffectAttr { return false; } - const heldBerries = this.getTargetHeldBerries(target); + const pokemon = this.selfTarget ? user : target; + + const heldBerries = this.getTargetHeldBerries(pokemon); if (heldBerries.length <= 0) { return false; } this.chosenBerry = heldBerries[user.randSeedInt(heldBerries.length)]; const preserve = new BooleanHolder(false); - globalScene.applyModifiers(PreserveBerryModifier, target.isPlayer(), target, preserve); // check for berry pouch preservation + // check for berry pouch preservation + globalScene.applyModifiers(PreserveBerryModifier, pokemon.isPlayer(), pokemon, preserve); if (!preserve.value) { - this.reduceBerryModifier(target); + this.reduceBerryModifier(pokemon); } - this.eatBerry(target); + this.eatBerry(pokemon); return true; } @@ -2718,20 +2729,17 @@ export class EatBerryAttr extends MoveEffectAttr { */ export class StealEatBerryAttr extends EatBerryAttr { constructor() { - super(); + super(false); } /** * User steals a random berry from the target and then eats it. - * @param {Pokemon} user Pokemon that used the move and will eat the stolen berry - * @param {Pokemon} target Pokemon that will have its berry stolen - * @param {Move} move Move being used - * @param {any[]} args Unused - * @returns {boolean} true if the function succeeds + * @param user - Pokemon that used the move and will eat the stolen berry + * @param target - Pokemon that will have its berry stolen + * @param move - Move being used + * @param args Unused + * @returns true if the function succeeds */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - if (move.hitsSubstitute(user, target)) { - return false; - } const cancelled = new BooleanHolder(false); applyAbAttrs(BlockItemTheftAbAttr, target, cancelled); // check for abilities that block item theft if (cancelled.value === true) { @@ -2782,10 +2790,6 @@ export class HealStatusEffectAttr extends MoveEffectAttr { return false; } - if (!this.selfTarget && move.hitsSubstitute(user, target)) { - return false; - } - // Special edge case for shield dust blocking Sparkling Aria curing burn const moveTargets = getMoveTargets(user, move.id); if (target.hasAbilityWithAttr(IgnoreMoveEffectsAbAttr) && move.id === Moves.SPARKLING_ARIA && moveTargets.targets.length === 1) { @@ -3162,15 +3166,7 @@ export class StatStageChangeAttr extends MoveEffectAttr { private get showMessage () { return this.options?.showMessage ?? true; } - - /** - * Indicates when the stat change should trigger - * @default MoveEffectTrigger.HIT - */ - public override get trigger () { - return this.options?.trigger ?? MoveEffectTrigger.HIT; - } - + /** * Attempts to change stats of the user or target (depending on value of selfTarget) if conditions are met * @param user {@linkcode Pokemon} the user of the move @@ -3184,10 +3180,6 @@ export class StatStageChangeAttr extends MoveEffectAttr { return false; } - if (!this.selfTarget && move.hitsSubstitute(user, target)) { - return false; - } - const moveChance = this.getMoveChance(user, target, move, this.selfTarget, true); if (moveChance < 0 || moveChance === 100 || user.randSeedInt(100) < moveChance) { const stages = this.getLevels(user); @@ -3471,7 +3463,7 @@ export class CutHpStatStageBoostAttr extends StatStageChangeAttr { */ export class OrderUpStatBoostAttr extends MoveEffectAttr { constructor() { - super(true, { trigger: MoveEffectTrigger.HIT }); + super(true); } override apply(user: Pokemon, target: Pokemon, move: Move, args?: any[]): boolean { @@ -3548,17 +3540,15 @@ export class ResetStatsAttr extends MoveEffectAttr { this.targetAllPokemon = targetAllPokemon; } - override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + override apply(_user: Pokemon, target: Pokemon, _move: Move, _args: any[]): boolean { if (this.targetAllPokemon) { // Target all pokemon on the field when Freezy Frost or Haze are used const activePokemon = globalScene.getField(true); activePokemon.forEach((p) => this.resetStats(p)); globalScene.queueMessage(i18next.t("moveTriggers:statEliminated")); } else { // Affects only the single target when Clear Smog is used - if (!move.hitsSubstitute(user, target)) { - this.resetStats(target); - globalScene.queueMessage(i18next.t("moveTriggers:resetStats", { pokemonName: getPokemonNameWithAffix(target) })); - } + this.resetStats(target); + globalScene.queueMessage(i18next.t("moveTriggers:resetStats", { pokemonName: getPokemonNameWithAffix(target) })); } return true; } @@ -4217,7 +4207,8 @@ export class PresentPowerAttr extends VariablePowerAttr { (args[0] as NumberHolder).value = 120; } else if (80 < powerSeed && powerSeed <= 100) { // If this move is multi-hit, disable all other hits - user.stopMultiHit(); + user.turnData.hitCount = 1; + user.turnData.hitsLeft = 1; globalScene.unshiftPhase(new PokemonHealPhase(target.getBattlerIndex(), toDmgValue(target.getMaxHp() / 4), i18next.t("moveTriggers:regainedHealth", { pokemonName: getPokemonNameWithAffix(target) }), true)); } @@ -4811,8 +4802,8 @@ export class ShellSideArmCategoryAttr extends VariableMoveCategoryAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const category = (args[0] as NumberHolder); - const predictedPhysDmg = target.getBaseDamage(user, move, MoveCategory.PHYSICAL, true, true, true, true); - const predictedSpecDmg = target.getBaseDamage(user, move, MoveCategory.SPECIAL, true, true, true, true); + const predictedPhysDmg = target.getBaseDamage({source: user, move, moveCategory: MoveCategory.PHYSICAL, ignoreAbility: true, ignoreSourceAbility: true, ignoreAllyAbility: true, ignoreSourceAllyAbility: true, simulated: true}); + const predictedSpecDmg = target.getBaseDamage({source: user, move, moveCategory: MoveCategory.SPECIAL, ignoreAbility: true, ignoreSourceAbility: true, ignoreAllyAbility: true, ignoreSourceAllyAbility: true, simulated: true}); if (predictedPhysDmg > predictedSpecDmg) { category.value = MoveCategory.PHYSICAL; @@ -5371,7 +5362,7 @@ export class BypassRedirectAttr extends MoveAttr { export class FrenzyAttr extends MoveEffectAttr { constructor() { - super(true, { trigger: MoveEffectTrigger.HIT, lastHitOnly: true }); + super(true, { lastHitOnly: true }); } canApply(user: Pokemon, target: Pokemon, move: Move, args: any[]) { @@ -5443,22 +5434,20 @@ export class AddBattlerTagAttr extends MoveEffectAttr { protected cancelOnFail: boolean; private failOnOverlap: boolean; - constructor(tagType: BattlerTagType, selfTarget: boolean = false, failOnOverlap: boolean = false, turnCountMin: number = 0, turnCountMax?: number, lastHitOnly: boolean = false, cancelOnFail: boolean = false) { + constructor(tagType: BattlerTagType, selfTarget: boolean = false, failOnOverlap: boolean = false, turnCountMin: number = 0, turnCountMax?: number, lastHitOnly: boolean = false) { super(selfTarget, { lastHitOnly: lastHitOnly }); this.tagType = tagType; this.turnCountMin = turnCountMin; this.turnCountMax = turnCountMax !== undefined ? turnCountMax : turnCountMin; this.failOnOverlap = !!failOnOverlap; - this.cancelOnFail = cancelOnFail; } canApply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - if (!super.canApply(user, target, move, args) || (this.cancelOnFail === true && user.getLastXMoves(1)[0]?.result === MoveResult.FAIL)) { + if (!super.canApply(user, target, move, args)) { return false; - } else { - return true; } + return true; } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { @@ -5549,19 +5538,6 @@ export class LeechSeedAttr extends AddBattlerTagAttr { constructor() { super(BattlerTagType.SEEDED); } - - /** - * Adds a Seeding effect to the target if the target does not have an active Substitute. - * @param user the {@linkcode Pokemon} using the move - * @param target the {@linkcode Pokemon} targeted by the move - * @param move the {@linkcode Move} invoking this effect - * @param args n/a - * @returns `true` if the effect successfully applies; `false` otherwise - */ - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - return !move.hitsSubstitute(user, target) - && super.apply(user, target, move, args); - } } /** @@ -5737,13 +5713,6 @@ export class FlinchAttr extends AddBattlerTagAttr { constructor() { super(BattlerTagType.FLINCHED, false); } - - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - if (!move.hitsSubstitute(user, target)) { - return super.apply(user, target, move, args); - } - return false; - } } export class ConfuseAttr extends AddBattlerTagAttr { @@ -5759,16 +5728,13 @@ export class ConfuseAttr extends AddBattlerTagAttr { return false; } - if (!move.hitsSubstitute(user, target)) { - return super.apply(user, target, move, args); - } - return false; + return super.apply(user, target, move, args); } } export class RechargeAttr extends AddBattlerTagAttr { constructor() { - super(BattlerTagType.RECHARGING, true, false, 1, 1, true, true); + super(BattlerTagType.RECHARGING, true, false, 1, 1, true); } } @@ -6151,7 +6117,7 @@ export class AddPledgeEffectAttr extends AddArenaTagAttr { * @see {@linkcode apply} */ export class RevivalBlessingAttr extends MoveEffectAttr { - constructor(user?: boolean) { + constructor() { super(true); } @@ -6392,10 +6358,6 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { const player = switchOutTarget instanceof PlayerPokemon; if (!this.selfSwitch) { - if (move.hitsSubstitute(user, target)) { - return false; - } - // Dondozo with an allied Tatsugiri in its mouth cannot be forced out const commandedTag = switchOutTarget.getTag(BattlerTagType.COMMANDED); if (commandedTag?.getSourcePokemon()?.isActive(true)) { @@ -6650,7 +6612,7 @@ export class ChangeTypeAttr extends MoveEffectAttr { private type: PokemonType; constructor(type: PokemonType) { - super(false, { trigger: MoveEffectTrigger.HIT }); + super(false); this.type = type; } @@ -6673,7 +6635,7 @@ export class AddTypeAttr extends MoveEffectAttr { private type: PokemonType; constructor(type: PokemonType) { - super(false, { trigger: MoveEffectTrigger.HIT }); + super(false); this.type = type; } @@ -7369,7 +7331,7 @@ export class AbilityChangeAttr extends MoveEffectAttr { public ability: Abilities; constructor(ability: Abilities, selfTarget?: boolean) { - super(selfTarget, { trigger: MoveEffectTrigger.HIT }); + super(selfTarget); this.ability = ability; } @@ -7400,7 +7362,7 @@ export class AbilityCopyAttr extends MoveEffectAttr { public copyToPartner: boolean; constructor(copyToPartner: boolean = false) { - super(false, { trigger: MoveEffectTrigger.HIT }); + super(false); this.copyToPartner = copyToPartner; } @@ -7441,7 +7403,7 @@ export class AbilityGiveAttr extends MoveEffectAttr { public copyToPartner: boolean; constructor() { - super(false, { trigger: MoveEffectTrigger.HIT }); + super(false); } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { @@ -7720,7 +7682,7 @@ export class DiscourageFrequentUseAttr extends MoveAttr { export class MoneyAttr extends MoveEffectAttr { constructor() { - super(true, { trigger: MoveEffectTrigger.HIT, firstHitOnly: true }); + super(true, {firstHitOnly: true }); } apply(user: Pokemon, target: Pokemon, move: Move): boolean { @@ -7787,7 +7749,7 @@ export class StatusIfBoostedAttr extends MoveEffectAttr { public effect: StatusEffect; constructor(effect: StatusEffect) { - super(true, { trigger: MoveEffectTrigger.HIT }); + super(true); this.effect = effect; } @@ -10566,7 +10528,7 @@ export function initMoves() { .attr(JawLockAttr) .bitingMove(), new SelfStatusMove(Moves.STUFF_CHEEKS, PokemonType.NORMAL, -1, 10, -1, 0, 8) - .attr(EatBerryAttr) + .attr(EatBerryAttr, true) .attr(StatStageChangeAttr, [ Stat.DEF ], 2, true) .condition((user) => { const userBerries = globalScene.findModifiers(m => m instanceof BerryModifier, user.isPlayer()); @@ -10590,7 +10552,7 @@ export function initMoves() { .makesContact(false) .partial(), // smart targetting is unimplemented new StatusMove(Moves.TEATIME, PokemonType.NORMAL, -1, 10, -1, 0, 8) - .attr(EatBerryAttr) + .attr(EatBerryAttr, false) .target(MoveTarget.ALL), new StatusMove(Moves.OCTOLOCK, PokemonType.FIGHTING, 100, 15, -1, 0, 8) .condition(failIfGhostTypeCondition) diff --git a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts index d8af7b6aac8..48b36369190 100644 --- a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts +++ b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts @@ -22,7 +22,7 @@ import { EggTier } from "#enums/egg-type"; import { PartyHealPhase } from "#app/phases/party-heal-phase"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { modifierTypes } from "#app/modifier/modifier-type"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; /** the i18n namespace for the encounter */ const namespace = "mysteryEncounters/aTrainersTest"; diff --git a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts index 0a270aebf37..e0486c83e77 100644 --- a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts +++ b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts @@ -37,7 +37,7 @@ import type HeldModifierConfig from "#app/interfaces/held-modifier-config"; import type { BerryType } from "#enums/berry-type"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { Stat } from "#enums/stat"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import i18next from "i18next"; /** the i18n namespace for this encounter */ diff --git a/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts b/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts index b66052cfd16..b403c5f291c 100644 --- a/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts +++ b/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts @@ -23,7 +23,7 @@ import { speciesStarterCosts } from "#app/data/balance/starters"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { ModifierRewardPhase } from "#app/phases/modifier-reward-phase"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import i18next from "i18next"; /** the i18n namespace for this encounter */ diff --git a/src/data/mystery-encounters/encounters/berries-abound-encounter.ts b/src/data/mystery-encounters/encounters/berries-abound-encounter.ts index bf49dfdea91..7f54e51565e 100644 --- a/src/data/mystery-encounters/encounters/berries-abound-encounter.ts +++ b/src/data/mystery-encounters/encounters/berries-abound-encounter.ts @@ -36,7 +36,7 @@ import i18next from "#app/plugins/i18n"; import { BerryType } from "#enums/berry-type"; import { PERMANENT_STATS, Stat } from "#enums/stat"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; /** the i18n namespace for the encounter */ const namespace = "mysteryEncounters/berriesAbound"; diff --git a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts index 8dfd1a270bd..001faf3a67f 100644 --- a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts +++ b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts @@ -52,7 +52,7 @@ import i18next from "i18next"; import MoveInfoOverlay from "#app/ui/move-info-overlay"; import { allMoves } from "#app/data/moves/move"; import { ModifierTier } from "#app/modifier/modifier-tier"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { getSpriteKeysFromSpecies } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; /** the i18n namespace for the encounter */ diff --git a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts index 07688db4583..24c076f750e 100644 --- a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts +++ b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts @@ -46,7 +46,7 @@ import { Moves } from "#enums/moves"; import { EncounterBattleAnim } from "#app/data/battle-anims"; import { MoveCategory } from "#enums/MoveCategory"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { EncounterAnim } from "#enums/encounter-anims"; import { Challenges } from "#enums/challenges"; diff --git a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts index 75527e1f8c1..bdd4bfaacaa 100644 --- a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts +++ b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts @@ -24,7 +24,7 @@ import { TrainerSlot } from "#enums/trainer-slot"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { EnemyPokemon, PokemonMove } from "#app/field/pokemon"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { modifierTypes } from "#app/modifier/modifier-type"; import { LearnMovePhase } from "#app/phases/learn-move-phase"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; diff --git a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts index 85ebf175f43..e746b13c6a5 100644 --- a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts +++ b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts @@ -19,7 +19,7 @@ import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode import { ModifierRewardPhase } from "#app/phases/modifier-reward-phase"; import type { PokemonHeldItemModifier } from "#app/modifier/modifier"; import { PokemonFormChangeItemModifier } from "#app/modifier/modifier"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { Challenges } from "#enums/challenges"; /** i18n namespace for encounter */ diff --git a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts index e57955c324a..7040bb47d19 100644 --- a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts +++ b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts @@ -18,7 +18,7 @@ import { applyModifierTypeToPlayerPokemon } from "#app/data/mystery-encounters/u import { getPokemonSpecies } from "#app/data/pokemon-species"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import type { PokemonHeldItemModifier, PokemonInstantReviveModifier } from "#app/modifier/modifier"; import { BerryModifier, diff --git a/src/data/mystery-encounters/encounters/department-store-sale-encounter.ts b/src/data/mystery-encounters/encounters/department-store-sale-encounter.ts index 6a26cf19d7f..39341bef2d5 100644 --- a/src/data/mystery-encounters/encounters/department-store-sale-encounter.ts +++ b/src/data/mystery-encounters/encounters/department-store-sale-encounter.ts @@ -10,7 +10,7 @@ import { Species } from "#enums/species"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; /** i18n namespace for encounter */ const namespace = "mysteryEncounters/departmentStoreSale"; diff --git a/src/data/mystery-encounters/encounters/field-trip-encounter.ts b/src/data/mystery-encounters/encounters/field-trip-encounter.ts index a1964aa5ab4..2cd6123838b 100644 --- a/src/data/mystery-encounters/encounters/field-trip-encounter.ts +++ b/src/data/mystery-encounters/encounters/field-trip-encounter.ts @@ -18,7 +18,7 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { Stat } from "#enums/stat"; import i18next from "i18next"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; /** i18n namespace for the encounter */ const namespace = "mysteryEncounters/fieldTrip"; diff --git a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts index f0fb6398334..0364b98abe2 100644 --- a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts +++ b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts @@ -41,7 +41,7 @@ import { import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { EncounterAnim } from "#enums/encounter-anims"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { Abilities } from "#enums/abilities"; import { BattlerTagType } from "#enums/battler-tag-type"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; diff --git a/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts b/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts index d9b4140c6ee..ecc2e17a06f 100644 --- a/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts +++ b/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts @@ -33,7 +33,7 @@ import { BattlerTagType } from "#enums/battler-tag-type"; import { queueEncounterMessage } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { randSeedInt } from "#app/utils/common"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; /** the i18n namespace for the encounter */ const namespace = "mysteryEncounters/fightOrFlight"; diff --git a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts index 282c6c149ff..2d0828b8c0c 100644 --- a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts +++ b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts @@ -30,7 +30,7 @@ import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms"; import { PostSummonPhase } from "#app/phases/post-summon-phase"; import { modifierTypes } from "#app/modifier/modifier-type"; import { Nature } from "#enums/nature"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { isPokemonValidForEncounterOptionSelection } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; /** the i18n namespace for the encounter */ diff --git a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts index 63db5c7c5d6..b0721ddfee9 100644 --- a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts +++ b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts @@ -48,7 +48,7 @@ import { Gender, getGenderSymbol } from "#app/data/gender"; import { getNatureName } from "#app/data/nature"; import { getPokeballAtlasKey, getPokeballTintColor } from "#app/data/pokeball"; import { getEncounterText, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { addPokemonDataToDexAndValidateAchievements } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import type { PokeballType } from "#enums/pokeball"; import { doShinySparkleAnim } from "#app/field/anims"; diff --git a/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts b/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts index 97fd5783ebb..6d8a1fc8c6b 100644 --- a/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts +++ b/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts @@ -10,7 +10,7 @@ import { leaveEncounterWithoutBattle, setEncounterExp } from "../utils/encounter import { applyDamageToPokemon } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { PokemonMove } from "#app/field/pokemon"; const OPTION_1_REQUIRED_MOVE = Moves.SURF; diff --git a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts index b10f2f3dba2..6907e18cfdc 100644 --- a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts @@ -16,7 +16,7 @@ import { randSeedInt } from "#app/utils/common"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; /** the i18n namespace for the encounter */ const namespace = "mysteryEncounters/mysteriousChallengers"; diff --git a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts index 8877bf36ce8..e9976ba04aa 100644 --- a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts @@ -15,7 +15,7 @@ import { koPlayerPokemon, } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import { getPokemonSpecies } from "#app/data/pokemon-species"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { GameOverPhase } from "#app/phases/game-over-phase"; import { randSeedInt } from "#app/utils/common"; diff --git a/src/data/mystery-encounters/encounters/part-timer-encounter.ts b/src/data/mystery-encounters/encounters/part-timer-encounter.ts index 61b48353997..1074eaf8c81 100644 --- a/src/data/mystery-encounters/encounters/part-timer-encounter.ts +++ b/src/data/mystery-encounters/encounters/part-timer-encounter.ts @@ -20,7 +20,7 @@ import { showEncounterDialogue, showEncounterText } from "#app/data/mystery-enco import i18next from "i18next"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { isPokemonValidForEncounterOptionSelection } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; /** the i18n namespace for the encounter */ diff --git a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts index 602a8d397db..7a12c86edff 100644 --- a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts +++ b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts @@ -31,7 +31,7 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { ScanIvsPhase } from "#app/phases/scan-ivs-phase"; import { SummonPhase } from "#app/phases/summon-phase"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { NON_LEGEND_PARADOX_POKEMON } from "#app/data/balance/special-species-groups"; /** the i18n namespace for the encounter */ diff --git a/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts b/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts index 79f4b53a73e..daf4d860cdf 100644 --- a/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts +++ b/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts @@ -26,7 +26,7 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import type { Nature } from "#enums/nature"; import { getNatureName } from "#app/data/nature"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import i18next from "i18next"; /** the i18n namespace for this encounter */ diff --git a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts index bfa1204a8ba..41c20f35ba1 100644 --- a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts +++ b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts @@ -26,7 +26,7 @@ import { getPokemonSpecies } from "#app/data/pokemon-species"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { PartyHealPhase } from "#app/phases/party-heal-phase"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { BerryType } from "#enums/berry-type"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; diff --git a/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts b/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts index ef3532b080e..28c7fe4644f 100644 --- a/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts +++ b/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts @@ -29,7 +29,7 @@ import { BattlerTagType } from "#enums/battler-tag-type"; import { getPokemonNameWithAffix } from "#app/messages"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { Stat } from "#enums/stat"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { getEncounterPokemonLevelForWave, STANDARD_ENCOUNTER_BOOSTED_LEVEL_MODIFIER, diff --git a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts index ab2f19cfb77..076171b3e5e 100644 --- a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts @@ -11,7 +11,7 @@ import { randSeedShuffle } from "#app/utils/common"; import type MysteryEncounter from "../mystery-encounter"; import { MysteryEncounterBuilder } from "../mystery-encounter"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { Biome } from "#enums/biome"; import { TrainerType } from "#enums/trainer-type"; import i18next from "i18next"; diff --git a/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts b/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts index cfff59b45f5..bfba553af5d 100644 --- a/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts @@ -26,7 +26,7 @@ import { showEncounterDialogue } from "#app/data/mystery-encounters/utils/encoun import PokemonData from "#app/system/pokemon-data"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { Abilities } from "#enums/abilities"; import { NON_LEGEND_PARADOX_POKEMON, NON_LEGEND_ULTRA_BEASTS } from "#app/data/balance/special-species-groups"; import { timedEventManager } from "#app/global-event-manager"; diff --git a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts index c994c6e993f..294f1a78b34 100644 --- a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts @@ -28,7 +28,7 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import { Stat } from "#enums/stat"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; /** the i18n namespace for the encounter */ const namespace = "mysteryEncounters/theStrongStuff"; diff --git a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts index 41bf87351f4..bc7c570abca 100644 --- a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts @@ -32,7 +32,7 @@ import { ShowTrainerPhase } from "#app/phases/show-trainer-phase"; import { ReturnPhase } from "#app/phases/return-phase"; import i18next from "i18next"; import { ModifierTier } from "#app/modifier/modifier-tier"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { BattlerTagType } from "#enums/battler-tag-type"; /** the i18n namespace for the encounter */ diff --git a/src/data/mystery-encounters/encounters/training-session-encounter.ts b/src/data/mystery-encounters/encounters/training-session-encounter.ts index 11d00f1dd8c..597a6b009b3 100644 --- a/src/data/mystery-encounters/encounters/training-session-encounter.ts +++ b/src/data/mystery-encounters/encounters/training-session-encounter.ts @@ -28,7 +28,7 @@ import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode import type HeldModifierConfig from "#app/interfaces/held-modifier-config"; import i18next from "i18next"; import { getStatKey } from "#enums/stat"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { isPokemonValidForEncounterOptionSelection } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import type { Nature } from "#enums/nature"; diff --git a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts index 1ff96f21edc..1e1db14705a 100644 --- a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts +++ b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts @@ -26,7 +26,7 @@ import { getPokemonSpecies } from "#app/data/pokemon-species"; import { Moves } from "#enums/moves"; import { BattlerIndex } from "#app/battle"; import { PokemonMove } from "#app/field/pokemon"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { randSeedInt } from "#app/utils/common"; /** the i18n namespace for this encounter */ diff --git a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts index 66c7f7afc56..f4eec5b0923 100644 --- a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts +++ b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts @@ -37,7 +37,7 @@ import { queueEncounterMessage } from "#app/data/mystery-encounters/utils/encoun import { BerryModifier } from "#app/modifier/modifier"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { Stat } from "#enums/stat"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; /** the i18n namespace for the encounter */ const namespace = "mysteryEncounters/uncommonBreed"; diff --git a/src/enums/MoveEffectTrigger.ts b/src/enums/MoveEffectTrigger.ts index 1e7753d94fa..d22953c3690 100644 --- a/src/enums/MoveEffectTrigger.ts +++ b/src/enums/MoveEffectTrigger.ts @@ -1,7 +1,6 @@ export enum MoveEffectTrigger { PRE_APPLY, POST_APPLY, - HIT, /** Triggers one time after all target effects have applied */ POST_TARGET } diff --git a/src/enums/hit-check-result.ts b/src/enums/hit-check-result.ts new file mode 100644 index 00000000000..cf8a2b17194 --- /dev/null +++ b/src/enums/hit-check-result.ts @@ -0,0 +1,23 @@ +/** The result of a hit check calculation */ +export const HitCheckResult = { + /** Hit checks haven't been evaluated yet in this pass */ + PENDING: 0, + /** The move hits the target successfully */ + HIT: 1, + /** The move has no effect on the target */ + NO_EFFECT: 2, + /** The move has no effect on the target, but doesn't proc the default "no effect" message */ + NO_EFFECT_NO_MESSAGE: 3, + /** The target protected itself against the move */ + PROTECTED: 4, + /** The move missed the target */ + MISS: 5, + /** The move is reflected by magic coat or magic bounce */ + REFLECTED: 6, + /** The target is no longer on the field */ + TARGET_NOT_ON_FIELD: 7, + /** The move failed unexpectedly */ + ERROR: 8, +} as const; + +export type HitCheckResult = typeof HitCheckResult[keyof typeof HitCheckResult]; diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 86d74ea5555..d565a590792 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -277,6 +277,36 @@ export enum FieldPosition { RIGHT, } +/** Base typeclass for damage parameter methods, used for DRY */ +type damageParams = { + /** The attacking {@linkcode Pokemon} */ + source: Pokemon; + /** The move used in the attack */ + move: Move; + /** The move's {@linkcode MoveCategory} after variable-category effects are applied */ + moveCategory: MoveCategory; + /** If `true`, ignores this Pokemon's defensive ability effects */ + ignoreAbility?: boolean; + /** If `true`, ignores the attacking Pokemon's ability effects */ + ignoreSourceAbility?: boolean; + /** If `true`, ignores the ally Pokemon's ability effects */ + ignoreAllyAbility?: boolean; + /** If `true`, ignores the ability effects of the attacking pokemon's ally */ + ignoreSourceAllyAbility?: boolean; + /** If `true`, calculates damage for a critical hit */ + isCritical?: boolean; + /** If `true`, suppresses changes to game state during the calculation */ + simulated?: boolean; + /** If defined, used in place of calculated effectiveness values */ + effectiveness?: number; +} + +/** Type for the parameters of {@linkcode Pokemon#getBaseDamage | getBaseDamage} */ +type getBaseDamageParams = Omit + +/** Type for the parameters of {@linkcode Pokemon#getAttackDamage | getAttackDamage} */ +type getAttackDamageParams = Omit; + export default abstract class Pokemon extends Phaser.GameObjects.Container { public id: number; public name: string; @@ -1441,25 +1471,16 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * Calculate the critical-hit stage of a move used against this pokemon by * the given source * - * @param source the {@linkcode Pokemon} who using the move - * @param move the {@linkcode Move} being used - * @returns the final critical-hit stage value + * @param source - The {@linkcode Pokemon} who using the move + * @param move - The {@linkcode Move} being used + * @returns The final critical-hit stage value */ getCritStage(source: Pokemon, move: Move): number { const critStage = new NumberHolder(0); applyMoveAttrs(HighCritAttr, source, this, move, critStage); - globalScene.applyModifiers( - CritBoosterModifier, - source.isPlayer(), - source, - critStage, - ); - globalScene.applyModifiers( - TempCritBoosterModifier, - source.isPlayer(), - critStage, - ); - applyAbAttrs(BonusCritAbAttr, source, null, false, critStage) + globalScene.applyModifiers(CritBoosterModifier, source.isPlayer(), source, critStage); + globalScene.applyModifiers(TempCritBoosterModifier, source.isPlayer(), critStage); + applyAbAttrs(BonusCritAbAttr, source, null, false, critStage); const critBoostTag = source.getTag(CritBoostTag); if (critBoostTag) { if (critBoostTag instanceof DragonCheerTag) { @@ -1475,6 +1496,19 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return critStage.value; } + /** + * Calculates the category of a move when used by this pokemon after + * category-changing move effects are applied. + * @param target - The {@linkcode Pokemon} using the move + * @param move - The {@linkcode Move} being used + * @returns The given move's final category + */ + getMoveCategory(target: Pokemon, move: Move): MoveCategory { + const moveCategory = new NumberHolder(move.category); + applyMoveAttrs(VariableMoveCategoryAttr, this, target, move, moveCategory); + return moveCategory.value; + } + /** * Calculates and retrieves the final value of a stat considering any held * items, move effects, opponent abilities, and whether there was a critical @@ -2584,7 +2618,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param simulated Whether to apply abilities via simulated calls (defaults to `true`) * @param cancelled {@linkcode BooleanHolder} Stores whether the move was cancelled by a non-type-based immunity. * @param useIllusion - Whether we want the attack move effectiveness on the illusion or not - * Currently only used by {@linkcode Pokemon.apply} to determine whether a "No effect" message should be shown. * @returns The type damage multiplier, indicating the effectiveness of the move */ getMoveEffectiveness( @@ -4075,27 +4108,28 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** * Calculates the base damage of the given move against this Pokemon when attacked by the given source. * Used during damage calculation and for Shell Side Arm's forecasting effect. - * @param source the attacking {@linkcode Pokemon}. - * @param move the {@linkcode Move} used in the attack. - * @param moveCategory the move's {@linkcode MoveCategory} after variable-category effects are applied. - * @param ignoreAbility if `true`, ignores this Pokemon's defensive ability effects (defaults to `false`). - * @param ignoreSourceAbility if `true`, ignore's the attacking Pokemon's ability effects (defaults to `false`). - * @param ignoreAllyAbility if `true`, ignores the ally Pokemon's ability effects (defaults to `false`). - * @param ignoreSourceAllyAbility if `true`, ignores the attacking Pokemon's ally's ability effects (defaults to `false`). - * @param isCritical if `true`, calculates effective stats as if the hit were critical (defaults to `false`). - * @param simulated if `true`, suppresses changes to game state during calculation (defaults to `true`). + * @param source - The attacking {@linkcode Pokemon}. + * @param move - The {@linkcode Move} used in the attack. + * @param moveCategory - The move's {@linkcode MoveCategory} after variable-category effects are applied. + * @param ignoreAbility - If `true`, ignores this Pokemon's defensive ability effects (defaults to `false`). + * @param ignoreSourceAbility - If `true`, ignore's the attacking Pokemon's ability effects (defaults to `false`). + * @param ignoreAllyAbility - If `true`, ignores the ally Pokemon's ability effects (defaults to `false`). + * @param ignoreSourceAllyAbility - If `true`, ignores the attacking Pokemon's ally's ability effects (defaults to `false`). + * @param isCritical - if `true`, calculates effective stats as if the hit were critical (defaults to `false`). + * @param simulated - if `true`, suppresses changes to game state during calculation (defaults to `true`). * @returns The move's base damage against this Pokemon when used by the source Pokemon. */ getBaseDamage( - source: Pokemon, - move: Move, - moveCategory: MoveCategory, + { + source, + move, + moveCategory, ignoreAbility = false, ignoreSourceAbility = false, ignoreAllyAbility = false, ignoreSourceAllyAbility = false, isCritical = false, - simulated = true, + simulated = true}: getBaseDamageParams ): number { const isPhysical = moveCategory === MoveCategory.PHYSICAL; @@ -4222,27 +4256,27 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** * Calculates the damage of an attack made by another Pokemon against this Pokemon * @param source {@linkcode Pokemon} the attacking Pokemon - * @param move {@linkcode Pokemon} the move used in the attack + * @param move The {@linkcode Move} used in the attack * @param ignoreAbility If `true`, ignores this Pokemon's defensive ability effects * @param ignoreSourceAbility If `true`, ignores the attacking Pokemon's ability effects * @param ignoreAllyAbility If `true`, ignores the ally Pokemon's ability effects * @param ignoreSourceAllyAbility If `true`, ignores the ability effects of the attacking pokemon's ally * @param isCritical If `true`, calculates damage for a critical hit. * @param simulated If `true`, suppresses changes to game state during the calculation. - * @returns a {@linkcode DamageCalculationResult} object with three fields: - * - `cancelled`: `true` if the move was cancelled by another effect. - * - `result`: {@linkcode HitResult} indicates the attack's type effectiveness. - * - `damage`: `number` the attack's final damage output. + * @param effectiveness If defined, used in place of calculated effectiveness values + * @returns The {@linkcode DamageCalculationResult} */ getAttackDamage( - source: Pokemon, - move: Move, - ignoreAbility = false, - ignoreSourceAbility = false, - ignoreAllyAbility = false, - ignoreSourceAllyAbility = false, - isCritical = false, - simulated = true, + { + source, + move, + ignoreAbility = false, + ignoreSourceAbility = false, + ignoreAllyAbility = false, + ignoreSourceAllyAbility = false, + isCritical = false, + simulated = true, + effectiveness}: getAttackDamageParams, ): DamageCalculationResult { const damage = new NumberHolder(0); const defendingSide = this.isPlayer() @@ -4272,7 +4306,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * * Note that the source's abilities are not ignored here */ - const typeMultiplier = this.getMoveEffectiveness( + const typeMultiplier = effectiveness ?? this.getMoveEffectiveness( source, move, ignoreAbility, @@ -4344,7 +4378,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * The attack's base damage, as determined by the source's level, move power * and Attack stat as well as this Pokemon's Defense stat */ - const baseDamage = this.getBaseDamage( + const baseDamage = this.getBaseDamage({ source, move, moveCategory, @@ -4354,7 +4388,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ignoreSourceAllyAbility, isCritical, simulated, - ); + }); /** 25% damage debuff on moves hitting more than one non-fainted target (regardless of immunities) */ const { targets, multiple } = getMoveTargets(source, move.id); @@ -4565,211 +4599,36 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { }; } - /** - * Applies the results of a move to this pokemon - * @param source The {@linkcode Pokemon} using the move - * @param move The {@linkcode Move} being used - * @returns The {@linkcode HitResult} of the attack - */ - apply(source: Pokemon, move: Move): HitResult { - const defendingSide = this.isPlayer() - ? ArenaTagSide.PLAYER - : ArenaTagSide.ENEMY; - const moveCategory = new NumberHolder(move.category); - applyMoveAttrs(VariableMoveCategoryAttr, source, this, move, moveCategory); - if (moveCategory.value === MoveCategory.STATUS) { - const cancelled = new BooleanHolder(false); - const typeMultiplier = this.getMoveEffectiveness( - source, - move, - false, - false, - cancelled, - ); - - if (!cancelled.value && typeMultiplier === 0) { - globalScene.queueMessage( - i18next.t("battle:hitResultNoEffect", { - pokemonName: getPokemonNameWithAffix(this), - }), - ); - } - return typeMultiplier === 0 ? HitResult.NO_EFFECT : HitResult.STATUS; + /** Calculate whether the given move critically hits this pokemon + * @param source - The {@linkcode Pokemon} using the move + * @param move - The {@linkcode Move} being used + * @param simulated - If `true`, suppresses changes to game state during calculation (defaults to `true`) + * @returns whether the move critically hits the pokemon + */ + getCriticalHitResult(source: Pokemon, move: Move, simulated: boolean = true): boolean { + const defendingSide = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + const noCritTag = globalScene.arena.getTagOnSide(NoCritTag, defendingSide); + if (noCritTag || Overrides.NEVER_CRIT_OVERRIDE || move.hasAttr(FixedDamageAttr)) { + return false; } - /** Determines whether the attack critically hits */ - let isCritical: boolean; - const critOnly = new BooleanHolder(false); - const critAlways = source.getTag(BattlerTagType.ALWAYS_CRIT); - applyMoveAttrs(CritOnlyAttr, source, this, move, critOnly); - applyAbAttrs( - ConditionalCritAbAttr, - source, - null, - false, - critOnly, - this, - move, - ); - if (critOnly.value || critAlways) { - isCritical = true; - } else { + const isCritical = new BooleanHolder(false); + + if (source.getTag(BattlerTagType.ALWAYS_CRIT)) { + isCritical.value = true; + } + applyMoveAttrs(CritOnlyAttr, source, this, move, isCritical); + applyAbAttrs(ConditionalCritAbAttr, source, null, simulated, isCritical, this, move); + if (!isCritical.value) { const critChance = [24, 8, 2, 1][ Math.max(0, Math.min(this.getCritStage(source, move), 3)) ]; - isCritical = - critChance === 1 || !globalScene.randBattleSeedInt(critChance); + isCritical.value = critChance === 1 || !globalScene.randBattleSeedInt(critChance); } - const noCritTag = globalScene.arena.getTagOnSide(NoCritTag, defendingSide); - const blockCrit = new BooleanHolder(false); - applyAbAttrs(BlockCritAbAttr, this, null, false, blockCrit); - if (noCritTag || blockCrit.value || Overrides.NEVER_CRIT_OVERRIDE) { - isCritical = false; - } + applyAbAttrs(BlockCritAbAttr, this, null, simulated, isCritical); - /** - * Applies stat changes from {@linkcode move} and gives it to {@linkcode source} - * before damage calculation - */ - applyMoveAttrs(StatChangeBeforeDmgCalcAttr, source, this, move); - - const { - cancelled, - result, - damage: dmg, - } = this.getAttackDamage(source, move, false, false, false, false, isCritical, false); - - const typeBoost = source.findTag( - t => - t instanceof TypeBoostTag && t.boostedType === source.getMoveType(move), - ) as TypeBoostTag; - if (typeBoost?.oneUse) { - source.removeTag(typeBoost.tagType); - } - - if ( - cancelled || - result === HitResult.IMMUNE || - result === HitResult.NO_EFFECT - ) { - source.stopMultiHit(this); - - if (!cancelled) { - if (result === HitResult.IMMUNE) { - globalScene.queueMessage( - i18next.t("battle:hitResultImmune", { - pokemonName: getPokemonNameWithAffix(this), - }), - ); - } else { - globalScene.queueMessage( - i18next.t("battle:hitResultNoEffect", { - pokemonName: getPokemonNameWithAffix(this), - }), - ); - } - } - return result; - } - - // In case of fatal damage, this tag would have gotten cleared before we could lapse it. - const destinyTag = this.getTag(BattlerTagType.DESTINY_BOND); - const grudgeTag = this.getTag(BattlerTagType.GRUDGE); - - if (dmg) { - this.lapseTags(BattlerTagLapseType.HIT); - - const substitute = this.getTag(SubstituteTag); - const isBlockedBySubstitute = - !!substitute && move.hitsSubstitute(source, this); - if (isBlockedBySubstitute) { - substitute.hp -= dmg; - } - if (!this.isPlayer() && dmg >= this.hp) { - globalScene.applyModifiers(EnemyEndureChanceModifier, false, this); - } - - /** - * We explicitly require to ignore the faint phase here, as we want to show the messages - * about the critical hit and the super effective/not very effective messages before the faint phase. - */ - const damage = this.damageAndUpdate(isBlockedBySubstitute ? 0 : dmg, - { - result: result as DamageResult, - isCritical, - ignoreFaintPhase: true, - source - }); - - if (damage > 0) { - if (source.isPlayer()) { - globalScene.validateAchvs(DamageAchv, new NumberHolder(damage)); - if (damage > globalScene.gameData.gameStats.highestDamage) { - globalScene.gameData.gameStats.highestDamage = damage; - } - } - source.turnData.totalDamageDealt += damage; - source.turnData.singleHitDamageDealt = damage; - this.turnData.damageTaken += damage; - this.battleData.hitCount++; - - const attackResult = { - move: move.id, - result: result as DamageResult, - damage: damage, - critical: isCritical, - sourceId: source.id, - sourceBattlerIndex: source.getBattlerIndex(), - }; - this.turnData.attacksReceived.unshift(attackResult); - if (source.isPlayer() && !this.isPlayer()) { - globalScene.applyModifiers( - DamageMoneyRewardModifier, - true, - source, - new NumberHolder(damage), - ); - } - } - } - - if (isCritical) { - globalScene.queueMessage(i18next.t("battle:hitResultCriticalHit")); - } - - // want to include is.Fainted() in case multi hit move ends early, still want to render message - if (source.turnData.hitsLeft === 1 || this.isFainted()) { - switch (result) { - case HitResult.SUPER_EFFECTIVE: - globalScene.queueMessage(i18next.t("battle:hitResultSuperEffective")); - break; - case HitResult.NOT_VERY_EFFECTIVE: - globalScene.queueMessage( - i18next.t("battle:hitResultNotVeryEffective"), - ); - break; - case HitResult.ONE_HIT_KO: - globalScene.queueMessage(i18next.t("battle:hitResultOneHitKO")); - break; - } - } - - if (this.isFainted()) { - // set splice index here, so future scene queues happen before FaintedPhase - globalScene.setPhaseQueueSplice(); - globalScene.unshiftPhase( - new FaintPhase( - this.getBattlerIndex(), - false, - source, - ), - ); - - this.destroySubstitute(); - this.lapseTag(BattlerTagType.COMMANDED); - } - - return result; + return isCritical.value; + } /** @@ -4833,7 +4692,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } /** - * Called by apply(), given the damage, adds a new DamagePhase and actually updates HP values, etc. + * Given the damage, adds a new DamagePhase and update HP values, etc. + * * Checks for 'Indirect' HitResults to account for Endure/Reviver Seed applying correctly * @param damage integer - passed to damage() * @param result an enum if it's super effective, not very, etc. @@ -5136,8 +4996,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** * Gets whether the given move is currently disabled for this Pokemon. * - * @param {Moves} moveId {@linkcode Moves} ID of the move to check - * @returns {boolean} `true` if the move is disabled for this Pokemon, otherwise `false` + * @param moveId - The {@linkcode Moves} ID of the move to check + * @returns `true` if the move is disabled for this Pokemon, otherwise `false` * * @see {@linkcode MoveRestrictionBattlerTag} */ @@ -5148,9 +5008,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** * Gets whether the given move is currently disabled for the user based on the player's target selection * - * @param {Moves} moveId {@linkcode Moves} ID of the move to check - * @param {Pokemon} user {@linkcode Pokemon} the move user - * @param {Pokemon} target {@linkcode Pokemon} the target of the move + * @param moveId - The {@linkcode Moves} ID of the move to check + * @param user - The move user + * @param target - The target of the move * * @returns {boolean} `true` if the move is disabled for this Pokemon due to the player's target selection * @@ -5180,10 +5040,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** * Gets the {@link MoveRestrictionBattlerTag} that is restricting a move, if it exists. * - * @param {Moves} moveId {@linkcode Moves} ID of the move to check - * @param {Pokemon} user {@linkcode Pokemon} the move user, optional and used when the target is a factor in the move's restricted status - * @param {Pokemon} target {@linkcode Pokemon} the target of the move, optional and used when the target is a factor in the move's restricted status - * @returns {MoveRestrictionBattlerTag | null} the first tag on this Pokemon that restricts the move, or `null` if the move is not restricted. + * @param moveId - {@linkcode Moves} ID of the move to check + * @param user - {@linkcode Pokemon} the move user, optional and used when the target is a factor in the move's restricted status + * @param target - {@linkcode Pokemon} the target of the move, optional and used when the target is a factor in the move's restricted status + * @returns The first tag on this Pokemon that restricts the move, or `null` if the move is not restricted. */ getRestrictingTag( moveId: Moves, @@ -5245,20 +5105,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return this.summonData.moveQueue; } - /** - * If this Pokemon is using a multi-hit move, cancels all subsequent strikes - * @param {Pokemon} target If specified, this only cancels subsequent strikes against the given target - */ - stopMultiHit(target?: Pokemon): void { - const effectPhase = globalScene.getCurrentPhase(); - if ( - effectPhase instanceof MoveEffectPhase && - effectPhase.getUserPokemon() === this - ) { - effectPhase.stopMultiHit(target); - } - } - changeForm(formChange: SpeciesFormChange): Promise { return new Promise(resolve => { this.formIndex = Math.max( @@ -5676,7 +5522,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * cancel the attack's subsequent hits. */ if (effect === StatusEffect.SLEEP || effect === StatusEffect.FREEZE) { - this.stopMultiHit(); + const currentPhase = globalScene.getCurrentPhase(); + if (currentPhase instanceof MoveEffectPhase && currentPhase.getUserPokemon() === this) { + this.turnData.hitCount = 1; + this.turnData.hitsLeft = 1; + } } if (asPhase) { @@ -7311,14 +7161,15 @@ export class EnemyPokemon extends Pokemon { ].includes(move.id); return ( doesNotFail && - p.getAttackDamage( - this, + p.getAttackDamage({ + source: this, move, - !p.battleData.abilityRevealed, - false, - !p.getAlly()?.battleData.abilityRevealed, - false, + ignoreAbility: !p.battleData.abilityRevealed, + ignoreSourceAbility: false, + ignoreAllyAbility: !p.getAlly()?.battleData.abilityRevealed, + ignoreSourceAllyAbility: false, isCritical, + } ).damage >= p.hp ); }) diff --git a/src/game-mode.ts b/src/game-mode.ts index dfe6b8cf123..ec7171b0024 100644 --- a/src/game-mode.ts +++ b/src/game-mode.ts @@ -13,6 +13,7 @@ import { Species } from "#enums/species"; import { Challenges } from "./enums/challenges"; import { globalScene } from "#app/global-scene"; import { getDailyStartingBiome } from "./data/daily-run"; +import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES, CHALLENGE_MODE_MYSTERY_ENCOUNTER_WAVES } from "./constants"; export enum GameModes { CLASSIC, @@ -36,10 +37,6 @@ interface GameModeConfig { hasMysteryEncounters?: boolean; } -// Describes min and max waves for MEs in specific game modes -export const CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES: [number, number] = [10, 180]; -export const CHALLENGE_MODE_MYSTERY_ENCOUNTER_WAVES: [number, number] = [10, 180]; - export class GameMode implements GameModeConfig { public modeId: GameModes; public isClassic: boolean; diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index 5a25cf6330d..4c99a609b11 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -35,19 +35,19 @@ import { BattlerTagType } from "#enums/battler-tag-type"; export class FaintPhase extends PokemonPhase { /** - * Whether or not enduring (for this phase's purposes, Reviver Seed) should be prevented + * Whether or not instant revive should be prevented */ - private preventEndure: boolean; + private preventInstantRevive: boolean; /** * The source Pokemon that dealt fatal damage */ private source?: Pokemon; - constructor(battlerIndex: BattlerIndex, preventEndure = false, source?: Pokemon) { + constructor(battlerIndex: BattlerIndex, preventInstantRevive = false, source?: Pokemon) { super(battlerIndex); - this.preventEndure = preventEndure; + this.preventInstantRevive = preventInstantRevive; this.source = source; } @@ -63,7 +63,7 @@ export class FaintPhase extends PokemonPhase { faintPokemon.resetSummonData(); - if (!this.preventEndure) { + if (!this.preventInstantRevive) { const instantReviveModifier = globalScene.applyModifier( PokemonInstantReviveModifier, this.player, diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index c29e3fe5cda..01085834ba5 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -13,7 +13,6 @@ import { PostDamageAbAttr, PostDefendAbAttr, ReflectStatusMoveAbAttr, - TypeImmunityAbAttr, } from "#app/data/abilities/ability"; import { ArenaTagSide, ConditionalProtectTag } from "#app/data/arena-tag"; import { MoveAnim } from "#app/data/battle-anims"; @@ -23,10 +22,10 @@ import { ProtectedTag, SemiInvulnerableTag, SubstituteTag, + TypeBoostTag, } from "#app/data/battler-tags"; import type { MoveAttr } from "#app/data/moves/move"; import { - AddArenaTrapTagAttr, applyFilteredMoveAttrs, applyMoveAttrs, AttackMove, @@ -40,8 +39,8 @@ import { NoEffectAttr, OneHitKOAttr, OverrideMoveEffectAttr, + StatChangeBeforeDmgCalcAttr, ToxicAccuracyAttr, - VariableTargetAttr, } from "#app/data/moves/move"; import { MoveEffectTrigger } from "#enums/MoveEffectTrigger"; import { MoveFlags } from "#enums/MoveFlags"; @@ -49,13 +48,15 @@ import { MoveTarget } from "#enums/MoveTarget"; import { MoveCategory } from "#enums/MoveCategory"; import { SpeciesFormChangePostMoveTrigger } from "#app/data/pokemon-forms"; import { PokemonType } from "#enums/pokemon-type"; -import { PokemonMove } from "#app/field/pokemon"; +import { DamageResult, PokemonMove, type TurnMove } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { HitResult, MoveResult } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { ContactHeldItemTransferChanceModifier, + DamageMoneyRewardModifier, EnemyAttackStatusEffectChanceModifier, + EnemyEndureChanceModifier, FlinchChanceModifier, HitHealModifier, PokemonMultiHitModifier, @@ -64,36 +65,182 @@ import { PokemonPhase } from "#app/phases/pokemon-phase"; import { BooleanHolder, isNullOrUndefined, NumberHolder } from "#app/utils/common"; import type { nil } from "#app/utils/common"; import { BattlerTagType } from "#enums/battler-tag-type"; -import type { Moves } from "#enums/moves"; +import { Moves } from "#enums/moves"; import i18next from "i18next"; import type { Phase } from "#app/phase"; import { ShowAbilityPhase } from "./show-ability-phase"; import { MovePhase } from "./move-phase"; import { MoveEndPhase } from "./move-end-phase"; import { HideAbilityPhase } from "#app/phases/hide-ability-phase"; +import { TypeDamageMultiplier } from "#app/data/type"; +import { HitCheckResult } from "#enums/hit-check-result"; +import type Move from "#app/data/moves/move"; +import { isFieldTargeted } from "#app/data/moves/move-utils"; +import { FaintPhase } from "./faint-phase"; +import { DamageAchv } from "#app/system/achv"; + +type HitCheckEntry = [HitCheckResult, TypeDamageMultiplier]; export class MoveEffectPhase extends PokemonPhase { - public move: PokemonMove; + public move: Move; + private virtual = false; protected targets: BattlerIndex[]; protected reflected = false; + /** The result of the hit check against each target */ + private hitChecks: HitCheckEntry[]; + + /** The move history entry for the move */ + private moveHistoryEntry: TurnMove; + + /** Is this the first strike of a move? */ + private firstHit: boolean; + /** Is this the last strike of a move? */ + private lastHit: boolean; + + /** Phases queued during moves */ + private queuedPhases: Phase[] = []; + /** * @param reflected Indicates that the move was reflected by the user due to magic coat or magic bounce + * @param virtual Indicates that the move is a virtual move (i.e. called by metronome) */ - constructor(battlerIndex: BattlerIndex, targets: BattlerIndex[], move: PokemonMove, reflected = false) { + constructor(battlerIndex: BattlerIndex, targets: BattlerIndex[], move: Move, reflected = false, virtual = false) { super(battlerIndex); this.move = move; + this.virtual = virtual; + this.reflected = reflected; /** * In double battles, if the right Pokemon selects a spread move and the left Pokemon dies * with no party members available to switch in, then the right Pokemon takes the index * of the left Pokemon and gets hit unless this is checked. */ - if (targets.includes(battlerIndex) && this.move.getMove().moveTarget === MoveTarget.ALL_NEAR_OTHERS) { + if (targets.includes(battlerIndex) && this.move.moveTarget === MoveTarget.ALL_NEAR_OTHERS) { const i = targets.indexOf(battlerIndex); targets.splice(i, i + 1); } this.targets = targets; + + this.hitChecks = Array(this.targets.length).fill([HitCheckResult.PENDING, 0]); + } + + /** + * Compute targets and the results of hit checks of the invoked move against all targets, + * organized by battler index. + * + * **This is *not* a pure function**; it has the following side effects + * - `this.hitChecks` - The results of the hit checks against each target + * - `this.moveHistoryEntry` - Sets success or failure based on the hit check results + * - user.turnData.hitCount and user.turnData.hitsLeft - Both set to 1 if the + * move was unsuccessful against all targets + * + * @returns The targets of the invoked move + * @see {@linkcode hitCheck} + */ + private conductHitChecks(user: Pokemon, fieldMove: boolean): Pokemon[] { + /** All Pokemon targeted by this phase's invoked move */ + /** Whether any hit check ended in a success */ + let anySuccess = false; + /** Whether the attack missed all of its targets */ + let allMiss = true; + + let targets = this.getTargets(); + + // For field targeted moves, we only look for the first target that may magic bounce + + for (const [i, target] of targets.entries()) { + const hitCheck = this.hitCheck(target); + // If the move bounced and was a field targeted move, + // then immediately stop processing other targets + if (fieldMove && hitCheck[0] === HitCheckResult.REFLECTED) { + targets = [target]; + this.hitChecks = [hitCheck]; + break; + } + if (hitCheck[0] === HitCheckResult.HIT) { + anySuccess = true; + } else { + allMiss ||= hitCheck[0] === HitCheckResult.MISS; + } + this.hitChecks[i] = hitCheck; + } + + if (anySuccess) { + this.moveHistoryEntry.result = MoveResult.SUCCESS; + } else { + user.turnData.hitCount = 1; + user.turnData.hitsLeft = 1; + this.moveHistoryEntry.result = allMiss ? MoveResult.MISS : MoveResult.FAIL; + } + + return targets; + } + + /** + * Queue the phaes that should occur when the target reflects the move back to the user + * @param user - The {@linkcode Pokemon} using this phase's invoked move + * @param target - The {@linkcode Pokemon} that is reflecting the move + * + */ + private queueReflectedMove(user: Pokemon, target: Pokemon): void { + const newTargets = this.move.isMultiTarget() + ? getMoveTargets(target, this.move.id).targets + : [user.getBattlerIndex()]; + // TODO: ability displays should be handled by the ability + if (!target.getTag(BattlerTagType.MAGIC_COAT)) { + this.queuedPhases.push( + new ShowAbilityPhase(target.getBattlerIndex(), target.getPassiveAbility().hasAttr(ReflectStatusMoveAbAttr)), + ); + this.queuedPhases.push(new HideAbilityPhase()); + } + + this.queuedPhases.push( + new MovePhase(target, newTargets, new PokemonMove(this.move.id, 0, 0, true), true, true, true), + ); + } + + /** + * Apply the move to each of the resolved targets. + * @param targets - The resolved set of targets of the move + * @throws Error if there was an unexpected hit check result + */ + private applyToTargets(user: Pokemon, targets: Pokemon[]): void { + for (const [i, target] of targets.entries()) { + const [hitCheckResult, effectiveness] = this.hitChecks[i]; + switch (hitCheckResult) { + case HitCheckResult.HIT: + this.applyMoveEffects(target, effectiveness); + if (isFieldTargeted(this.move)) { + // Stop processing other targets if the move is a field move + return; + } + break; + case HitCheckResult.NO_EFFECT: + globalScene.queueMessage( + i18next.t(this.move.id === Moves.SHEER_COLD ? "battle:hitResultImmune" : "battle:hitResultNoEffect", { + pokemonName: getPokemonNameWithAffix(target), + }), + ); + case HitCheckResult.NO_EFFECT_NO_MESSAGE: + case HitCheckResult.PROTECTED: + case HitCheckResult.TARGET_NOT_ON_FIELD: + applyMoveAttrs(NoEffectAttr, user, target, this.move); + break; + case HitCheckResult.MISS: + globalScene.queueMessage( + i18next.t("battle:attackMissed", { pokemonNameWithAffix: getPokemonNameWithAffix(target) }), + ); + applyMoveAttrs(MissEffectAttr, user, target, this.move); + break; + case HitCheckResult.REFLECTED: + this.queueReflectedMove(user, target); + break; + case HitCheckResult.PENDING: + case HitCheckResult.ERROR: + throw new Error("Unexpected hit check result"); + } + } } public override start(): void { @@ -101,11 +248,10 @@ export class MoveEffectPhase extends PokemonPhase { /** The Pokemon using this phase's invoked move */ const user = this.getUserPokemon(); - /** All Pokemon targeted by this phase's invoked move */ - const targets = this.getTargets(); if (!user) { - return super.end(); + super.end(); + return; } /** If an enemy used this move, set this as last enemy that used move or ability */ @@ -115,23 +261,24 @@ export class MoveEffectPhase extends PokemonPhase { globalScene.currentBattle.lastPlayerInvolved = this.fieldIndex; } - const isDelayedAttack = this.move.getMove().hasAttr(DelayedAttackAttr); + const isDelayedAttack = this.move.hasAttr(DelayedAttackAttr); /** If the user was somehow removed from the field and it's not a delayed attack, end this phase */ if (!user.isOnField()) { if (!isDelayedAttack) { - return super.end(); - } else { - if (!user.scene) { - /** - * This happens if the Pokemon that used the delayed attack gets caught and released - * on the turn the attack would have triggered. Having access to the global scene - * in the future may solve this entirely, so for now we just cancel the hit - */ - return super.end(); - } - if (isNullOrUndefined(user.turnData)) { - user.resetTurnData(); - } + super.end(); + return; + } + if (!user.scene) { + /* + * This happens if the Pokemon that used the delayed attack gets caught and released + * on the turn the attack would have triggered. Having access to the global scene + * in the future may solve this entirely, so for now we just cancel the hit + */ + super.end(); + return; + } + if (isNullOrUndefined(user.turnData)) { + user.resetTurnData(); } } @@ -140,17 +287,17 @@ export class MoveEffectPhase extends PokemonPhase { * e.g. Charging moves (Fly, etc.) on their first turn of use. */ const overridden = new BooleanHolder(false); - /** The {@linkcode Move} object from {@linkcode allMoves} invoked by this phase */ - const move = this.move.getMove(); + const move = this.move; // Assume single target for override - applyMoveAttrs(OverrideMoveEffectAttr, user, this.getFirstTarget() ?? null, move, overridden, this.move.virtual); + applyMoveAttrs(OverrideMoveEffectAttr, user, this.getFirstTarget() ?? null, move, overridden, this.virtual); // If other effects were overriden, stop this phase before they can be applied if (overridden.value) { return this.end(); } + // Lapse `MOVE_EFFECT` effects (i.e. semi-invulnerability) when applicable user.lapseTags(BattlerTagLapseType.MOVE_EFFECT); // If the user is acting again (such as due to Instruct), reset hitsLeft/hitCount so that @@ -179,339 +326,75 @@ export class MoveEffectPhase extends PokemonPhase { user.turnData.hitsLeft = hitCount.value; } - /** + /* * Log to be entered into the user's move history once the move result is resolved. - * Note that `result` (a {@linkcode MoveResult}) logs whether the move was successfully + * Note that `result` logs whether the move was successfully * used in the sense of "Does it have an effect on the user?". */ - const moveHistoryEntry = { - move: this.move.moveId, + this.moveHistoryEntry = { + move: this.move.id, targets: this.targets, result: MoveResult.PENDING, - virtual: this.move.virtual, + virtual: this.virtual, }; - /** - * Stores results of hit checks of the invoked move against all targets, organized by battler index. - * @see {@linkcode hitCheck} - */ - const targetHitChecks = Object.fromEntries(targets.map(p => [p.getBattlerIndex(), this.hitCheck(p)])); - const hasActiveTargets = targets.some(t => t.isActive(true)); + const fieldMove = isFieldTargeted(move); - /** Check if the target is immune via ability to the attacking move, and NOT in semi invulnerable state */ - const isImmune = - targets[0]?.hasAbilityWithAttr(TypeImmunityAbAttr) && - targets[0]?.getAbility()?.getAttrs(TypeImmunityAbAttr)?.[0]?.getImmuneType() === user.getMoveType(move) && - !targets[0]?.getTag(SemiInvulnerableTag); + const targets = this.conductHitChecks(user, fieldMove); - const mayBounce = - move.hasFlag(MoveFlags.REFLECTABLE) && - !this.reflected && - targets.some(t => t.hasAbilityWithAttr(ReflectStatusMoveAbAttr) || !!t.getTag(BattlerTagType.MAGIC_COAT)); + this.firstHit = user.turnData.hitCount === user.turnData.hitsLeft; + this.lastHit = user.turnData.hitsLeft === 1 || !targets.some(t => t.isActive(true)); - /** - * If no targets are left for the move to hit and it is not a hazard move (FAIL), or the invoked move is non-reflectable, single-target - * (and not random target) and failed the hit check against its target (MISS), log the move - * as FAILed or MISSed (depending on the conditions above) and end this phase. - */ + // Play the animation if the move was successful against any of its targets or it has a POST_TARGET effect (like self destruct) if ( - (!hasActiveTargets && !move.hasAttr(AddArenaTrapTagAttr)) || - (!mayBounce && - !move.hasAttr(VariableTargetAttr) && - !move.isMultiTarget() && - !targetHitChecks[this.targets[0]] && - !targets[0].getTag(ProtectedTag) && - !isImmune) + this.moveHistoryEntry.result === MoveResult.SUCCESS || + move.getAttrs(MoveEffectAttr).some(attr => attr.trigger === MoveEffectTrigger.POST_TARGET) ) { - this.stopMultiHit(); - if (hasActiveTargets) { - globalScene.queueMessage( - i18next.t("battle:attackMissed", { - pokemonNameWithAffix: this.getFirstTarget() ? getPokemonNameWithAffix(this.getFirstTarget()!) : "", - }), - ); - moveHistoryEntry.result = MoveResult.MISS; - applyMoveAttrs(MissEffectAttr, user, null, this.move.getMove()); - } else { - globalScene.queueMessage(i18next.t("battle:attackFailed")); - moveHistoryEntry.result = MoveResult.FAIL; - } - user.pushMoveHistory(moveHistoryEntry); - return this.end(); + const firstTarget = this.getFirstTarget(); + new MoveAnim( + move.id as Moves, + user, + firstTarget?.getBattlerIndex() ?? BattlerIndex.ATTACKER, + // Field moves and some moves used in mystery encounters should be played even on an empty field + fieldMove || (globalScene.currentBattle?.mysteryEncounter?.hasBattleAnimationsWithoutTargets ?? false), + ).play(move.hitsSubstitute(user, firstTarget), () => this.postAnimCallback(user, targets)); + + return; + } + this.postAnimCallback(user, targets); + } + + /** + * Callback to be called after the move animation is played + */ + private postAnimCallback(user: Pokemon, targets: Pokemon[]) { + // Add to the move history entry + if (this.firstHit) { + user.pushMoveHistory(this.moveHistoryEntry); } - const playOnEmptyField = - (globalScene.currentBattle?.mysteryEncounter?.hasBattleAnimationsWithoutTargets ?? false) || - (!hasActiveTargets && move.hasAttr(AddArenaTrapTagAttr)); - // Move animation only needs one target. The attacker is used as a fallback. - new MoveAnim( - move.id as Moves, - user, - this.getFirstTarget()?.getBattlerIndex() ?? BattlerIndex.ATTACKER, - playOnEmptyField, - ).play(move.hitsSubstitute(user, this.getFirstTarget()!), () => { - /** Has the move successfully hit a target (for damage) yet? */ - let hasHit = false; - - // Prevent ENEMY_SIDE targeted moves from occurring twice in double battles - // and check which target will magic bounce. - // In the event that the move is a hazard move, there may be no target and the move should still succeed. - // In this case, the user is used as the "target" to prevent a crash. - // This should not affect normal execution of the move otherwise. - const trueTargets: Pokemon[] = - !hasActiveTargets && move.hasAttr(AddArenaTrapTagAttr) - ? [user] - : move.moveTarget !== MoveTarget.ENEMY_SIDE - ? targets - : (() => { - const magicCoatTargets = targets.filter( - t => t.getTag(BattlerTagType.MAGIC_COAT) || t.hasAbilityWithAttr(ReflectStatusMoveAbAttr), - ); - - // only magic coat effect cares about order - if (!mayBounce || magicCoatTargets.length === 0) { - return [targets[0]]; - } - return [magicCoatTargets[0]]; - })(); - - const queuedPhases: Phase[] = []; - for (const target of trueTargets) { - /** The {@linkcode ArenaTagSide} to which the target belongs */ - const targetSide = target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; - /** Has the invoked move been cancelled by conditional protection (e.g Quick Guard)? */ - const hasConditionalProtectApplied = new BooleanHolder(false); - /** Does the applied conditional protection bypass Protect-ignoring effects? */ - const bypassIgnoreProtect = new BooleanHolder(false); - /** If the move is not targeting a Pokemon on the user's side, try to apply conditional protection effects */ - if (!this.move.getMove().isAllyTarget()) { - globalScene.arena.applyTagsForSide( - ConditionalProtectTag, - targetSide, - false, - hasConditionalProtectApplied, - user, - target, - move.id, - bypassIgnoreProtect, - ); - } - - /** Is the target protected by Protect, etc. or a relevant conditional protection effect? */ - const isProtected = - ![MoveTarget.ENEMY_SIDE, MoveTarget.BOTH_SIDES].includes(this.move.getMove().moveTarget) && - (bypassIgnoreProtect.value || - !this.move.getMove().doesFlagEffectApply({ flag: MoveFlags.IGNORE_PROTECT, user, target })) && - (hasConditionalProtectApplied.value || - (!target.findTags(t => t instanceof DamageProtectedTag).length && - target.findTags(t => t instanceof ProtectedTag).find(t => target.lapseTag(t.tagType))) || - (this.move.getMove().category !== MoveCategory.STATUS && - target.findTags(t => t instanceof DamageProtectedTag).find(t => target.lapseTag(t.tagType)))); - - /** Is the target hidden by the effects of its Commander ability? */ - const isCommanding = - globalScene.currentBattle.double && - target.getAlly()?.getTag(BattlerTagType.COMMANDED)?.getSourcePokemon() === target; - - /** Is the target reflecting status moves from the magic coat move? */ - const isReflecting = !!target.getTag(BattlerTagType.MAGIC_COAT); - - /** Is the target's magic bounce ability not ignored and able to reflect this move? */ - const canMagicBounce = - !isReflecting && - !move.doesFlagEffectApply({ flag: MoveFlags.IGNORE_ABILITIES, user, target }) && - target.hasAbilityWithAttr(ReflectStatusMoveAbAttr); - - const semiInvulnerableTag = target.getTag(SemiInvulnerableTag); - - /** Is the target reflecting the effect, not protected, and not in an semi-invulnerable state?*/ - const willBounce = - !isProtected && - !this.reflected && - !isCommanding && - move.hasFlag(MoveFlags.REFLECTABLE) && - (isReflecting || canMagicBounce) && - !semiInvulnerableTag; - - // If the move will bounce, then queue the bounce and move on to the next target - if (!target.switchOutStatus && willBounce) { - const newTargets = move.isMultiTarget() ? getMoveTargets(target, move.id).targets : [user.getBattlerIndex()]; - if (!isReflecting) { - // TODO: Ability displays should be handled by the ability - queuedPhases.push( - new ShowAbilityPhase( - target.getBattlerIndex(), - target.getPassiveAbility().hasAttr(ReflectStatusMoveAbAttr), - ), - ); - queuedPhases.push(new HideAbilityPhase()); - } - - queuedPhases.push(new MovePhase(target, newTargets, new PokemonMove(move.id, 0, 0, true), true, true, true)); - continue; - } - - /** Is the pokemon immune due to an ablility, and also not in a semi invulnerable state? */ - const isImmune = - target.hasAbilityWithAttr(TypeImmunityAbAttr) && - target.getAbility()?.getAttrs(TypeImmunityAbAttr)?.[0]?.getImmuneType() === user.getMoveType(move) && - !semiInvulnerableTag; - - /** - * If the move missed a target, stop all future hits against that target - * and move on to the next target (if there is one). - */ - if ( - target.switchOutStatus || - isCommanding || - (!isImmune && - !isProtected && - !targetHitChecks[target.getBattlerIndex()] && - !move.hasAttr(AddArenaTrapTagAttr)) - ) { - this.stopMultiHit(target); - if (!target.switchOutStatus) { - globalScene.queueMessage( - i18next.t("battle:attackMissed", { - pokemonNameWithAffix: getPokemonNameWithAffix(target), - }), - ); - } - if (moveHistoryEntry.result === MoveResult.PENDING) { - moveHistoryEntry.result = MoveResult.MISS; - } - user.pushMoveHistory(moveHistoryEntry); - applyMoveAttrs(MissEffectAttr, user, null, move); - continue; - } - - /** Does this phase represent the invoked move's first strike? */ - const firstHit = user.turnData.hitsLeft === user.turnData.hitCount; - - // Only log the move's result on the first strike - if (firstHit) { - user.pushMoveHistory(moveHistoryEntry); - } - - /** - * Since all fail/miss checks have applied, the move is considered successfully applied. - * It's worth noting that if the move has no effect or is protected against, this assignment - * is overwritten and the move is logged as a FAIL. - */ - moveHistoryEntry.result = MoveResult.SUCCESS; - - /** - * Stores the result of applying the invoked move to the target. - * If the target is protected, the result is always `NO_EFFECT`. - * Otherwise, the hit result is based on type effectiveness, immunities, - * and other factors that may negate the attack or status application. - * - * Internally, the call to {@linkcode Pokemon.apply} is where damage is calculated - * (for attack moves) and the target's HP is updated. However, this isn't - * made visible to the user until the resulting {@linkcode DamagePhase} - * is invoked. - */ - const hitResult = !isProtected ? target.apply(user, move) : HitResult.NO_EFFECT; - - /** Does {@linkcode hitResult} indicate that damage was dealt to the target? */ - const dealsDamage = [ - HitResult.EFFECTIVE, - HitResult.SUPER_EFFECTIVE, - HitResult.NOT_VERY_EFFECTIVE, - HitResult.ONE_HIT_KO, - ].includes(hitResult); - - /** Is this target the first one hit by the move on its current strike? */ - const firstTarget = dealsDamage && !hasHit; - if (firstTarget) { - hasHit = true; - } - - /** - * If the move has no effect on the target (i.e. the target is protected or immune), - * change the logged move result to FAIL. - */ - if (hitResult === HitResult.NO_EFFECT) { - moveHistoryEntry.result = MoveResult.FAIL; - } - - /** Does this phase represent the invoked move's last strike? */ - const lastHit = user.turnData.hitsLeft === 1 || !this.getFirstTarget()?.isActive(); - - /** - * If the user can change forms by using the invoked move, - * it only changes forms after the move's last hit - * (see Relic Song's interaction with Parental Bond when used by Meloetta). - */ - if (lastHit) { - globalScene.triggerPokemonFormChange(user, SpeciesFormChangePostMoveTrigger); - /** - * Multi-Lens, Multi Hit move and Parental Bond check for PostDamageAbAttr - * other damage source are calculated in damageAndUpdate in pokemon.ts - */ - if (user.turnData.hitCount > 1) { - applyPostDamageAbAttrs(PostDamageAbAttr, target, 0, target.hasPassive(), false, [], user); - } - } - - applyFilteredMoveAttrs( - (attr: MoveAttr) => - attr instanceof MoveEffectAttr && - attr.trigger === MoveEffectTrigger.PRE_APPLY && - (!attr.firstHitOnly || firstHit) && - (!attr.lastHitOnly || lastHit) && - hitResult !== HitResult.NO_EFFECT, - user, - target, - move, - ); - - if (hitResult !== HitResult.FAIL) { - this.applySelfTargetEffects(user, target, firstHit, lastHit); - - if (hitResult !== HitResult.NO_EFFECT) { - this.applyPostApplyEffects(user, target, firstHit, lastHit); - this.applyHeldItemFlinchCheck(user, target, dealsDamage); - this.applySuccessfulAttackEffects(user, target, firstHit, lastHit, !!isProtected, hitResult, firstTarget); - } else { - applyMoveAttrs(NoEffectAttr, user, null, move); - } - } - } - - // Apply queued phases - if (queuedPhases.length) { - globalScene.appendToPhase(queuedPhases, MoveEndPhase); - } - // Apply the move's POST_TARGET effects on the move's last hit, after all targeted effects have resolved - if (user.turnData.hitsLeft === 1 || !this.getFirstTarget()?.isActive()) { - applyFilteredMoveAttrs( - (attr: MoveAttr) => attr instanceof MoveEffectAttr && attr.trigger === MoveEffectTrigger.POST_TARGET, - user, - null, - move, - ); - } - - /** - * Remove the target's substitute (if it exists and has expired) - * after all targeted effects have applied. - * This prevents blocked effects from applying until after this hit resolves. - */ - targets.forEach(target => { - const substitute = target.getTag(SubstituteTag); - if (substitute && substitute.hp <= 0) { - target.lapseTag(BattlerTagType.SUBSTITUTE); - } - }); - - const moveType = user.getMoveType(move, true); - if (move.category !== MoveCategory.STATUS && !user.stellarTypesBoosted.includes(moveType)) { - user.stellarTypesBoosted.push(moveType); - } - + try { + this.applyToTargets(user, targets); + } catch (e) { + console.warn(e.message || "Unexpected error in move effect phase"); this.end(); - }); + return; + } + + if (this.queuedPhases.length) { + globalScene.appendToPhase(this.queuedPhases, MoveEndPhase); + } + const moveType = user.getMoveType(this.move, true); + if (this.move.category !== MoveCategory.STATUS && !user.stellarTypesBoosted.includes(moveType)) { + user.stellarTypesBoosted.push(moveType); + } + + if (this.lastHit) { + this.triggerMoveEffects(MoveEffectTrigger.POST_TARGET, user, null); + } + + this.updateSubstitutes(); + this.end(); } public override end(): void { @@ -535,7 +418,6 @@ export class MoveEffectPhase extends PokemonPhase { globalScene.queueMessage(i18next.t("battle:attackHitsCount", { count: hitsTotal })); } globalScene.applyModifiers(HitHealModifier, this.player, user); - // Clear all cached move effectiveness values among targets this.getTargets().forEach(target => (target.turnData.moveEffectiveness = null)); } } @@ -543,82 +425,6 @@ export class MoveEffectPhase extends PokemonPhase { super.end(); } - /** - * Apply self-targeted effects that trigger `POST_APPLY` - * - * @param user - The {@linkcode Pokemon} using this phase's invoked move - * @param target - {@linkcode Pokemon} the current target of this phase's invoked move - * @param firstHit - `true` if this is the first hit in a multi-hit attack - * @param lastHit - `true` if this is the last hit in a multi-hit attack - * @returns a function intended to be passed into a `then()` call. - */ - protected applySelfTargetEffects(user: Pokemon, target: Pokemon, firstHit: boolean, lastHit: boolean): void { - applyFilteredMoveAttrs( - (attr: MoveAttr) => - attr instanceof MoveEffectAttr && - attr.trigger === MoveEffectTrigger.POST_APPLY && - attr.selfTarget && - (!attr.firstHitOnly || firstHit) && - (!attr.lastHitOnly || lastHit), - user, - target, - this.move.getMove(), - ); - } - - /** - * Applies non-self-targeted effects that trigger `POST_APPLY` - * (i.e. Smelling Salts curing Paralysis, and the forced switch from U-Turn, Dragon Tail, etc) - * @param user - The {@linkcode Pokemon} using this phase's invoked move - * @param target - {@linkcode Pokemon} the current target of this phase's invoked move - * @param firstHit - `true` if this is the first hit in a multi-hit attack - * @param lastHit - `true` if this is the last hit in a multi-hit attack - * @returns a function intended to be passed into a `then()` call. - */ - protected applyPostApplyEffects(user: Pokemon, target: Pokemon, firstHit: boolean, lastHit: boolean): void { - applyFilteredMoveAttrs( - (attr: MoveAttr) => - attr instanceof MoveEffectAttr && - attr.trigger === MoveEffectTrigger.POST_APPLY && - !attr.selfTarget && - (!attr.firstHitOnly || firstHit) && - (!attr.lastHitOnly || lastHit), - user, - target, - this.move.getMove(), - ); - } - - /** - * Applies effects that trigger on HIT - * (i.e. Final Gambit, Power-Up Punch, Drain Punch) - * @param user - The {@linkcode Pokemon} using this phase's invoked move - * @param target - {@linkcode Pokemon} the current target of this phase's invoked move - * @param firstHit - `true` if this is the first hit in a multi-hit attack - * @param lastHit - `true` if this is the last hit in a multi-hit attack - * @param firstTarget - `true` if {@linkcode target} is the first target hit by this strike of {@linkcode move} - * @returns a function intended to be passed into a `then()` call. - */ - protected applyOnHitEffects( - user: Pokemon, - target: Pokemon, - firstHit: boolean, - lastHit: boolean, - firstTarget: boolean, - ): void { - applyFilteredMoveAttrs( - (attr: MoveAttr) => - attr instanceof MoveEffectAttr && - attr.trigger === MoveEffectTrigger.HIT && - (!attr.firstHitOnly || firstHit) && - (!attr.lastHitOnly || lastHit) && - (!attr.firstTargetOnly || firstTarget), - user, - target, - this.move.getMove(), - ); - } - /** * Applies reactive effects that occur when a Pokémon is hit. * (i.e. Effect Spore, Disguise, Liquid Ooze, Beak Blast) @@ -627,51 +433,9 @@ export class MoveEffectPhase extends PokemonPhase { * @param hitResult - The {@linkcode HitResult} of the attempted move * @returns a `Promise` intended to be passed into a `then()` call. */ - protected applyOnGetHitAbEffects(user: Pokemon, target: Pokemon, hitResult: HitResult) { - const hitsSubstitute = this.move.getMove().hitsSubstitute(user, target); - if (!target.isFainted() || target.canApplyAbility()) { - applyPostDefendAbAttrs(PostDefendAbAttr, target, user, this.move.getMove(), hitResult); - - if (!hitsSubstitute) { - if (!user.isPlayer() && this.move.getMove() instanceof AttackMove) { - globalScene.applyShuffledModifiers(EnemyAttackStatusEffectChanceModifier, false, target); - } - } - } - if (!hitsSubstitute) { - target.lapseTags(BattlerTagLapseType.AFTER_HIT); - } - } - - /** - * Applies all effects and attributes that require a move to connect with a target, - * namely reactive effects like Weak Armor, on-hit effects like that of Power-Up Punch, and item stealing effects - * @param user - The {@linkcode Pokemon} using this phase's invoked move - * @param target - {@linkcode Pokemon} the current target of this phase's invoked move - * @param firstHit - `true` if this is the first hit in a multi-hit attack - * @param lastHit - `true` if this is the last hit in a multi-hit attack - * @param isProtected - `true` if the target is protected by effects such as Protect - * @param hitResult - The {@linkcode HitResult} of the attempted move - * @param firstTarget - `true` if {@linkcode target} is the first target hit by this strike of {@linkcode move} - * @returns a function intended to be passed into a `then()` call. - */ - protected applySuccessfulAttackEffects( - user: Pokemon, - target: Pokemon, - firstHit: boolean, - lastHit: boolean, - isProtected: boolean, - hitResult: HitResult, - firstTarget: boolean, - ): void { - if (!isProtected) { - this.applyOnHitEffects(user, target, firstHit, lastHit, firstTarget); - this.applyOnGetHitAbEffects(user, target, hitResult); - applyPostAttackAbAttrs(PostAttackAbAttr, user, target, this.move.getMove(), hitResult); - if (this.move.getMove() instanceof AttackMove && hitResult !== HitResult.STATUS) { - globalScene.applyModifiers(ContactHeldItemTransferChanceModifier, this.player, user, target); - } - } + protected applyOnGetHitAbEffects(user: Pokemon, target: Pokemon, hitResult: HitResult): void { + applyPostDefendAbAttrs(PostDefendAbAttr, target, user, this.move, hitResult); + target.lapseTags(BattlerTagLapseType.AFTER_HIT); } /** @@ -682,80 +446,162 @@ export class MoveEffectPhase extends PokemonPhase { * @returns a function intended to be passed into a `then()` call. */ protected applyHeldItemFlinchCheck(user: Pokemon, target: Pokemon, dealsDamage: boolean): void { - if (this.move.getMove().hasAttr(FlinchAttr)) { + if (this.move.hasAttr(FlinchAttr)) { return; } - if ( - dealsDamage && - !target.hasAbilityWithAttr(IgnoreMoveEffectsAbAttr) && - !this.move.getMove().hitsSubstitute(user, target) - ) { + if (dealsDamage && !target.hasAbilityWithAttr(IgnoreMoveEffectsAbAttr) && !this.move.hitsSubstitute(user, target)) { const flinched = new BooleanHolder(false); globalScene.applyModifiers(FlinchChanceModifier, user.isPlayer(), user, flinched); if (flinched.value) { - target.addTag(BattlerTagType.FLINCHED, undefined, this.move.moveId, user.id); + target.addTag(BattlerTagType.FLINCHED, undefined, this.move.id, user.id); } } } - /** - * Resolves whether this phase's invoked move hits the given target - * @param target - The {@linkcode Pokemon} targeted by the invoked move - * @returns `true` if the move hits the target + /** Return whether the target is protected by protect or a relevant conditional protection + * @param user - The {@linkcode Pokemon} using this phase's invoked move + * @param target - {@linkcode Pokemon} the target to check for protection + * @param move - The {@linkcode Move} being used */ - public hitCheck(target: Pokemon): boolean { - // Moves targeting the user and entry hazards can't miss - if ([MoveTarget.USER, MoveTarget.ENEMY_SIDE].includes(this.move.getMove().moveTarget)) { - return true; + private protectedCheck(user: Pokemon, target: Pokemon) { + /** The {@linkcode ArenaTagSide} to which the target belongs */ + const targetSide = target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + /** Has the invoked move been cancelled by conditional protection (e.g Quick Guard)? */ + const hasConditionalProtectApplied = new BooleanHolder(false); + /** Does the applied conditional protection bypass Protect-ignoring effects? */ + const bypassIgnoreProtect = new BooleanHolder(false); + /** If the move is not targeting a Pokemon on the user's side, try to apply conditional protection effects */ + if (!this.move.isAllyTarget()) { + globalScene.arena.applyTagsForSide( + ConditionalProtectTag, + targetSide, + false, + hasConditionalProtectApplied, + user, + target, + this.move.id, + bypassIgnoreProtect, + ); } + return ( + ![MoveTarget.ENEMY_SIDE, MoveTarget.BOTH_SIDES].includes(this.move.moveTarget) && + (bypassIgnoreProtect.value || !this.move.doesFlagEffectApply({ flag: MoveFlags.IGNORE_PROTECT, user, target })) && + (hasConditionalProtectApplied.value || + (!target.findTags(t => t instanceof DamageProtectedTag).length && + target.findTags(t => t instanceof ProtectedTag).find(t => target.lapseTag(t.tagType))) || + (this.move.category !== MoveCategory.STATUS && + target.findTags(t => t instanceof DamageProtectedTag).find(t => target.lapseTag(t.tagType)))) + ); + } + + /** + * Conduct the hit check and type effectiveness for this move against the target + * + * Checks occur in the following order: + * 1. if the move is self-target + * 2. if the target is on the field + * 3. if the target is hidden by the effects of its commander ability + * 4. if the target is in an applicable semi-invulnerable state + * 5. if the target has an applicable protection effect + * 6. if the move is reflected by magic coat or magic bounce + * 7. type effectiveness calculation, including immunities from abilities and typing + * 9. if accuracy is checked, whether the roll passes the accuracy check + * @param target - The {@linkcode Pokemon} targeted by the invoked move + * @returns a {@linkcode HitCheckEntry} containing the attack's {@linkcode HitCheckResult} + * and {@linkcode TypeDamageMultiplier | effectiveness} against the target. + */ + public hitCheck(target: Pokemon): HitCheckEntry { const user = this.getUserPokemon(); + const move = this.move; if (!user) { - return false; + return [HitCheckResult.ERROR, 0]; } - // Hit check only calculated on first hit for multi-hit moves unless flag is set to check all hits. - // However, if an ability with the MaxMultiHitAbAttr, namely Skill Link, is present, act as a normal - // multi-hit move and proceed with all hits + // Moves targeting the user bypass all checks + if (move.moveTarget === MoveTarget.USER) { + return [HitCheckResult.HIT, 1]; + } + + const fieldTargeted = isFieldTargeted(move); + + if (!target.isActive(true) && !fieldTargeted) { + return [HitCheckResult.TARGET_NOT_ON_FIELD, 0]; + } + + // Commander causes moves used against the target to miss + if ( + !fieldTargeted && + globalScene.currentBattle.double && + target.getAlly()?.getTag(BattlerTagType.COMMANDED)?.getSourcePokemon() === target + ) { + return [HitCheckResult.MISS, 0]; + } + + /** Whether both accuracy and invulnerability checks can be skipped */ + const bypassAccAndInvuln = fieldTargeted || this.checkBypassAccAndInvuln(target); + const semiInvulnerableTag = target.getTag(SemiInvulnerableTag); + + if (semiInvulnerableTag && !bypassAccAndInvuln && !this.checkBypassSemiInvuln(semiInvulnerableTag)) { + return [HitCheckResult.MISS, 0]; + } + + if (!fieldTargeted && this.protectedCheck(user, target)) { + return [HitCheckResult.PROTECTED, 0]; + } + + if (!this.reflected && move.doesFlagEffectApply({ flag: MoveFlags.REFLECTABLE, user, target })) { + return [HitCheckResult.REFLECTED, 0]; + } + + // After the magic bounce check, field targeted moves are always successful + if (fieldTargeted) { + return [HitCheckResult.HIT, 1]; + } + + const cancelNoEffectMessage = new BooleanHolder(false); + + /** + * The effectiveness of the move against the given target. + * Accounts for type and move immunities from defensive typing, abilities, and other effects. + */ + const effectiveness = target.getMoveEffectiveness(user, move, false, false, cancelNoEffectMessage); + if (effectiveness === 0) { + return [ + cancelNoEffectMessage.value ? HitCheckResult.NO_EFFECT_NO_MESSAGE : HitCheckResult.NO_EFFECT, + effectiveness, + ]; + } + + const moveAccuracy = move.calculateBattleAccuracy(user, target); + + // Strikes after the first in a multi-strike move are guaranteed to hit, + // unless the move is flagged to check all hits and the user does not have Skill Link. if (user.turnData.hitsLeft < user.turnData.hitCount) { - if (!this.move.getMove().hasFlag(MoveFlags.CHECK_ALL_HITS) || user.hasAbilityWithAttr(MaxMultiHitAbAttr)) { - return true; + if (!move.hasFlag(MoveFlags.CHECK_ALL_HITS) || user.hasAbilityWithAttr(MaxMultiHitAbAttr)) { + return [HitCheckResult.HIT, effectiveness]; } } - if (this.checkBypassAccAndInvuln(target)) { - return true; + const bypassAccuracy = + bypassAccAndInvuln || + target.getTag(BattlerTagType.ALWAYS_GET_HIT) || + (target.getTag(BattlerTagType.TELEKINESIS) && !this.move.hasAttr(OneHitKOAttr)); + + if (moveAccuracy === -1 || bypassAccuracy) { + return [HitCheckResult.HIT, effectiveness]; } - if (target.getTag(BattlerTagType.ALWAYS_GET_HIT)) { - return true; - } - - const semiInvulnerableTag = target.getTag(SemiInvulnerableTag); - if ( - target.getTag(BattlerTagType.TELEKINESIS) && - !semiInvulnerableTag && - !this.move.getMove().hasAttr(OneHitKOAttr) - ) { - return true; - } - - if (semiInvulnerableTag && !this.checkBypassSemiInvuln(semiInvulnerableTag)) { - return false; - } - - const moveAccuracy = this.move.getMove().calculateBattleAccuracy(user, target); - - if (moveAccuracy === -1) { - return true; - } - - const accuracyMultiplier = user.getAccuracyMultiplier(target, this.move.getMove()); + const accuracyMultiplier = user.getAccuracyMultiplier(target, this.move); const rand = user.randSeedInt(100); - return rand < moveAccuracy * accuracyMultiplier; + if (rand < moveAccuracy * accuracyMultiplier) { + return [HitCheckResult.HIT, effectiveness]; + } + + return [HitCheckResult.MISS, 0]; } /** @@ -767,6 +613,7 @@ export class MoveEffectPhase extends PokemonPhase { * - An ability like {@linkcode Abilities.NO_GUARD | No Guard} * - A poison type using {@linkcode Moves.TOXIC | Toxic} * - A move like {@linkcode Moves.LOCK_ON | Lock-On} or {@linkcode Moves.MIND_READER | Mind Reader}. + * - A field-targeted move like spikes * * Does *not* check against effects {@linkcode Moves.GLAIVE_RUSH | Glaive Rush} status (which * should not bypass semi-invulnerability), or interactions like Earthquake hitting against Dig, @@ -782,7 +629,7 @@ export class MoveEffectPhase extends PokemonPhase { if (user.hasAbilityWithAttr(AlwaysHitAbAttr) || target.hasAbilityWithAttr(AlwaysHitAbAttr)) { return true; } - if (this.move.getMove().hasAttr(ToxicAccuracyAttr) && user.isOfType(PokemonType.POISON)) { + if (this.move.hasAttr(ToxicAccuracyAttr) && user.isOfType(PokemonType.POISON)) { return true; } // TODO: Fix lock on / mind reader check. @@ -792,18 +639,21 @@ export class MoveEffectPhase extends PokemonPhase { ) { return true; } + if (isFieldTargeted(this.move)) { + return true; + } } /** * Check whether the move is able to ignore the given `semiInvulnerableTag` - * @param semiInvulnerableTag - The semiInvulnerbale tag to check against + * @param semiInvulnerableTag - The semiInvulnerable tag to check against * @returns `true` if the move can ignore the semi-invulnerable state */ public checkBypassSemiInvuln(semiInvulnerableTag: SemiInvulnerableTag | nil): boolean { if (!semiInvulnerableTag) { return false; } - const move = this.move.getMove(); + const move = this.move; return move.getAttrs(HitsTagAttr).some(hta => hta.tagType === semiInvulnerableTag.tagType); } @@ -862,6 +712,282 @@ export class MoveEffectPhase extends PokemonPhase { /** @returns A new `MoveEffectPhase` with the same properties as this phase */ protected getNewHitPhase(): MoveEffectPhase { - return new MoveEffectPhase(this.battlerIndex, this.targets, this.move); + return new MoveEffectPhase(this.battlerIndex, this.targets, this.move, this.reflected, this.virtual); + } + + /** Removes all substitutes that were broken by this phase's invoked move */ + protected updateSubstitutes(): void { + const targets = this.getTargets(); + for (const target of targets) { + const substitute = target.getTag(SubstituteTag); + if (substitute && substitute.hp <= 0) { + target.lapseTag(BattlerTagType.SUBSTITUTE); + } + } + } + + /** + * Triggers move effects of the given move effect trigger. + * @param triggerType The {@linkcode MoveEffectTrigger} being applied + * @param user The {@linkcode Pokemon} using the move + * @param target The {@linkcode Pokemon} targeted by the move + * @param firstTarget Whether the target is the first to be hit by the current strike + * @param selfTarget If defined, limits the effects triggered to either self-targeted + * effects (if set to `true`) or targeted effects (if set to `false`). + * @returns a `Promise` applying the relevant move effects. + */ + protected triggerMoveEffects( + triggerType: MoveEffectTrigger, + user: Pokemon, + target: Pokemon | null, + firstTarget?: boolean | null, + selfTarget?: boolean, + ): void { + return applyFilteredMoveAttrs( + (attr: MoveAttr) => + attr instanceof MoveEffectAttr && + attr.trigger === triggerType && + (isNullOrUndefined(selfTarget) || attr.selfTarget === selfTarget) && + (!attr.firstHitOnly || this.firstHit) && + (!attr.lastHitOnly || this.lastHit) && + (!attr.firstTargetOnly || (firstTarget ?? true)), + user, + target, + this.move, + ); + } + + /** + * Applies all move effects that trigger in the event of a successful hit: + * + * - {@linkcode MoveEffectTrigger.PRE_APPLY | PRE_APPLY} effects` + * - Applying damage to the target + * - {@linkcode MoveEffectTrigger.POST_APPLY | POST_APPLY} effects + * - Invoking {@linkcode applyOnTargetEffects} if the move does not hit a substitute + * - Triggering form changes and emergency exit / wimp out if this is the last hit + * + * @param target the {@linkcode Pokemon} hit by this phase's move. + * @param effectiveness the effectiveness of the move (as previously evaluated in {@linkcode hitCheck}) + */ + protected applyMoveEffects(target: Pokemon, effectiveness: TypeDamageMultiplier): void { + const user = this.getUserPokemon(); + + /** The first target hit by the move */ + const firstTarget = target === this.getTargets().find((_, i) => this.hitChecks[i][1] > 0); + + if (isNullOrUndefined(user)) { + return; + } + + this.triggerMoveEffects(MoveEffectTrigger.PRE_APPLY, user, target); + + const hitResult = this.applyMove(user, target, effectiveness); + + this.triggerMoveEffects(MoveEffectTrigger.POST_APPLY, user, target, firstTarget, true); + if (!this.move.hitsSubstitute(user, target)) { + this.applyOnTargetEffects(user, target, hitResult, firstTarget); + } + if (this.lastHit) { + globalScene.triggerPokemonFormChange(user, SpeciesFormChangePostMoveTrigger); + + // Multi-hit check for Wimp Out/Emergency Exit + if (user.turnData.hitCount > 1) { + applyPostDamageAbAttrs(PostDamageAbAttr, target, 0, target.hasPassive(), false, [], user); + } + } + } + + /** + * Sub-method of for {@linkcode applyMoveEffects} that applies damage to the target. + * + * @param user - The {@linkcode Pokemon} using this phase's invoked move + * @param target - The {@linkcode Pokemon} targeted by the move + * @param effectiveness - The effectiveness of the move against the target + */ + protected applyMoveDamage(user: Pokemon, target: Pokemon, effectiveness: TypeDamageMultiplier): HitResult { + const isCritical = target.getCriticalHitResult(user, this.move, false); + + /* + * Apply stat changes from {@linkcode move} and gives it to {@linkcode source} + * before damage calculation + */ + applyMoveAttrs(StatChangeBeforeDmgCalcAttr, user, target, this.move); + + const { result: result, damage: dmg } = target.getAttackDamage({ + source: user, + move: this.move, + ignoreAbility: false, + ignoreSourceAbility: false, + ignoreAllyAbility: false, + ignoreSourceAllyAbility: false, + simulated: false, + effectiveness, + isCritical, + }); + + const typeBoost = user.findTag( + t => t instanceof TypeBoostTag && t.boostedType === user.getMoveType(this.move), + ) as TypeBoostTag; + if (typeBoost?.oneUse) { + user.removeTag(typeBoost.tagType); + } + + const isOneHitKo = result === HitResult.ONE_HIT_KO; + + if (!dmg) { + return result; + } + + target.lapseTags(BattlerTagLapseType.HIT); + + const substitute = target.getTag(SubstituteTag); + const isBlockedBySubstitute = substitute && this.move.hitsSubstitute(user, target); + if (isBlockedBySubstitute) { + substitute.hp -= dmg; + } else if (!target.isPlayer() && dmg >= target.hp) { + globalScene.applyModifiers(EnemyEndureChanceModifier, false, target); + } + + const damage = isBlockedBySubstitute + ? 0 + : target.damageAndUpdate(dmg, { + result: result as DamageResult, + ignoreFaintPhase: true, + ignoreSegments: isOneHitKo, + isCritical, + source: user, + }); + + if (isCritical) { + globalScene.queueMessage(i18next.t("battle:criticalHit")); + } + + if (damage <= 0) { + return result; + } + + if (user.isPlayer()) { + globalScene.validateAchvs(DamageAchv, new NumberHolder(damage)); + + if (damage > globalScene.gameData.gameStats.highestDamage) { + globalScene.gameData.gameStats.highestDamage = damage; + } + } + + user.turnData.totalDamageDealt += damage; + user.turnData.singleHitDamageDealt = damage; + target.battleData.hitCount++; + target.turnData.damageTaken += damage; + + target.turnData.attacksReceived.unshift({ + move: this.move.id, + result: result as DamageResult, + damage: damage, + critical: isCritical, + sourceId: user.id, + sourceBattlerIndex: user.getBattlerIndex(), + }); + + if (user.isPlayer() && !target.isPlayer()) { + globalScene.applyModifiers(DamageMoneyRewardModifier, true, user, new NumberHolder(damage)); + } + + return result; + } + + /** + * Sub-method of {@linkcode applyMove} that handles the event of a target fainting. + * @param user - The {@linkcode Pokemon} using this phase's invoked move + * @param target - The {@linkcode Pokemon} that fainted + */ + protected onFaintTarget(user: Pokemon, target: Pokemon): void { + // set splice index here, so future scene queues happen before FaintedPhase + globalScene.setPhaseQueueSplice(); + + globalScene.unshiftPhase(new FaintPhase(target.getBattlerIndex(), false, user)); + + target.destroySubstitute(); + target.lapseTag(BattlerTagType.COMMANDED); + } + + /** + * Sub-method of {@linkcode applyMove} that queues the hit-result message + * on the final strike of the move against a target + * @param result - The {@linkcode HitResult} of the move + */ + protected queueHitResultMessage(result: HitResult) { + let msg: string | undefined; + switch (result) { + case HitResult.SUPER_EFFECTIVE: + msg = i18next.t("battle:hitResultSuperEffective"); + break; + case HitResult.NOT_VERY_EFFECTIVE: + msg = i18next.t("battle:hitResultNotVeryEffective"); + break; + case HitResult.ONE_HIT_KO: + msg = i18next.t("battle:hitResultOneHitKO"); + break; + } + if (msg) { + globalScene.queueMessage(msg); + } + } + + /** Apply the result of this phase's move to the given target + * @param user - The {@linkcode Pokemon} using this phase's invoked move + * @param target - The {@linkcode Pokemon} struck by the move + * @param effectiveness - The effectiveness of the move against the target + */ + protected applyMove(user: Pokemon, target: Pokemon, effectiveness: TypeDamageMultiplier): HitResult { + const moveCategory = user.getMoveCategory(target, this.move); + + if (moveCategory === MoveCategory.STATUS) { + return HitResult.STATUS; + } + + const result = this.applyMoveDamage(user, target, effectiveness); + + if (user.turnData.hitsLeft === 1 && target.isFainted()) { + this.queueHitResultMessage(result); + } + + if (target.isFainted()) { + this.onFaintTarget(user, target); + } + + return result; + } + + /** + * Applies all effects aimed at the move's target. + * To be used when the target is successfully and directly hit by the move. + * @param user - The {@linkcode Pokemon} using the move + * @param target - The {@linkcode Pokemon} targeted by the move + * @param hitResult - The {@linkcode HitResult} obtained from applying the move + * @param firstTarget - `true` if the target is the first Pokemon hit by the attack + */ + protected applyOnTargetEffects(user: Pokemon, target: Pokemon, hitResult: HitResult, firstTarget: boolean): void { + /** Does {@linkcode hitResult} indicate that damage was dealt to the target? */ + const dealsDamage = [ + HitResult.EFFECTIVE, + HitResult.SUPER_EFFECTIVE, + HitResult.NOT_VERY_EFFECTIVE, + HitResult.ONE_HIT_KO, + ].includes(hitResult); + + this.triggerMoveEffects(MoveEffectTrigger.POST_APPLY, user, target, firstTarget, false); + this.applyHeldItemFlinchCheck(user, target, dealsDamage); + this.applyOnGetHitAbEffects(user, target, hitResult); + applyPostAttackAbAttrs(PostAttackAbAttr, user, target, this.move, hitResult); + + // We assume only enemy Pokemon are able to have the EnemyAttackStatusEffectChanceModifier from tokens + if (!user.isPlayer() && this.move instanceof AttackMove) { + globalScene.applyShuffledModifiers(EnemyAttackStatusEffectChanceModifier, false, target); + } + + // Apply Grip Claw's chance to steal an item from the target + if (this.move instanceof AttackMove) { + globalScene.applyModifiers(ContactHeldItemTransferChanceModifier, this.player, user, target); + } } } diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index 7d2848a5d70..b24d7b61ebb 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -404,9 +404,10 @@ export class MovePhase extends BattlePhase { * if the move fails. */ if (success) { - applyPreAttackAbAttrs(PokemonTypeChangeAbAttr, this.pokemon, null, this.move.getMove()); + const move = this.move.getMove(); + applyPreAttackAbAttrs(PokemonTypeChangeAbAttr, this.pokemon, null, move); globalScene.unshiftPhase( - new MoveEffectPhase(this.pokemon.getBattlerIndex(), this.targets, this.move, this.reflected), + new MoveEffectPhase(this.pokemon.getBattlerIndex(), this.targets, move, this.reflected, this.move.virtual), ); } else { if ([Moves.ROAR, Moves.WHIRLWIND, Moves.TRICK_OR_TREAT, Moves.FORESTS_CURSE].includes(this.move.moveId)) { diff --git a/test/abilities/friend_guard.test.ts b/test/abilities/friend_guard.test.ts index 302343c167b..43a378c47a2 100644 --- a/test/abilities/friend_guard.test.ts +++ b/test/abilities/friend_guard.test.ts @@ -50,7 +50,11 @@ describe("Moves - Friend Guard", () => { // Get the last return value from `getAttackDamage` const turn1Damage = spy.mock.results[spy.mock.results.length - 1].value.damage; // Making sure the test is controlled; turn 1 damage is equal to base damage (after rounding) - expect(turn1Damage).toBe(Math.floor(player1.getBaseDamage(enemy1, allMoves[Moves.TACKLE], MoveCategory.PHYSICAL))); + expect(turn1Damage).toBe( + Math.floor( + player1.getBaseDamage({ source: enemy1, move: allMoves[Moves.TACKLE], moveCategory: MoveCategory.PHYSICAL }), + ), + ); vi.spyOn(player2, "getAbility").mockReturnValue(allAbilities[Abilities.FRIEND_GUARD]); @@ -64,7 +68,10 @@ describe("Moves - Friend Guard", () => { const turn2Damage = spy.mock.results[spy.mock.results.length - 1].value.damage; // With the ally's Friend Guard, damage should have been reduced from base damage by 25% expect(turn2Damage).toBe( - Math.floor(player1.getBaseDamage(enemy1, allMoves[Moves.TACKLE], MoveCategory.PHYSICAL) * 0.75), + Math.floor( + player1.getBaseDamage({ source: enemy1, move: allMoves[Moves.TACKLE], moveCategory: MoveCategory.PHYSICAL }) * + 0.75, + ), ); }); diff --git a/test/abilities/galvanize.test.ts b/test/abilities/galvanize.test.ts index 438ec498aa1..5db8b642197 100644 --- a/test/abilities/galvanize.test.ts +++ b/test/abilities/galvanize.test.ts @@ -4,7 +4,6 @@ import { PokemonType } from "#enums/pokemon-type"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; -import { HitResult } from "#app/field/pokemon"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -38,13 +37,13 @@ describe("Abilities - Galvanize", () => { }); it("should change Normal-type attacks to Electric type and boost their power", async () => { - await game.startBattle(); + await game.classicMode.startBattle(); const playerPokemon = game.scene.getPlayerPokemon()!; vi.spyOn(playerPokemon, "getMoveType"); const enemyPokemon = game.scene.getEnemyPokemon()!; - vi.spyOn(enemyPokemon, "apply"); + const spy = vi.spyOn(enemyPokemon, "getMoveEffectiveness"); const move = allMoves[Moves.TACKLE]; vi.spyOn(move, "calculateBattlePower"); @@ -54,21 +53,23 @@ describe("Abilities - Galvanize", () => { await game.phaseInterceptor.to("BerryPhase", false); expect(playerPokemon.getMoveType).toHaveLastReturnedWith(PokemonType.ELECTRIC); - expect(enemyPokemon.apply).toHaveReturnedWith(HitResult.EFFECTIVE); + expect(spy).toHaveReturnedWith(1); expect(move.calculateBattlePower).toHaveReturnedWith(48); expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); + + spy.mockRestore(); }); it("should cause Normal-type attacks to activate Volt Absorb", async () => { game.override.enemyAbility(Abilities.VOLT_ABSORB); - await game.startBattle(); + await game.classicMode.startBattle(); const playerPokemon = game.scene.getPlayerPokemon()!; vi.spyOn(playerPokemon, "getMoveType"); const enemyPokemon = game.scene.getEnemyPokemon()!; - vi.spyOn(enemyPokemon, "apply"); + const spy = vi.spyOn(enemyPokemon, "getMoveEffectiveness"); enemyPokemon.hp = Math.floor(enemyPokemon.getMaxHp() * 0.8); @@ -77,37 +78,37 @@ describe("Abilities - Galvanize", () => { await game.phaseInterceptor.to("BerryPhase", false); expect(playerPokemon.getMoveType).toHaveLastReturnedWith(PokemonType.ELECTRIC); - expect(enemyPokemon.apply).toHaveReturnedWith(HitResult.NO_EFFECT); + expect(spy).toHaveReturnedWith(0); expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); }); it("should not change the type of variable-type moves", async () => { game.override.enemySpecies(Species.MIGHTYENA); - await game.startBattle([Species.ESPEON]); + await game.classicMode.startBattle([Species.ESPEON]); const playerPokemon = game.scene.getPlayerPokemon()!; vi.spyOn(playerPokemon, "getMoveType"); const enemyPokemon = game.scene.getEnemyPokemon()!; - vi.spyOn(enemyPokemon, "apply"); + const spy = vi.spyOn(enemyPokemon, "getMoveEffectiveness"); game.move.select(Moves.REVELATION_DANCE); await game.phaseInterceptor.to("BerryPhase", false); expect(playerPokemon.getMoveType).not.toHaveLastReturnedWith(PokemonType.ELECTRIC); - expect(enemyPokemon.apply).toHaveReturnedWith(HitResult.NO_EFFECT); + expect(spy).toHaveReturnedWith(0); expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); }); it("should affect all hits of a Normal-type multi-hit move", async () => { - await game.startBattle(); + await game.classicMode.startBattle(); const playerPokemon = game.scene.getPlayerPokemon()!; vi.spyOn(playerPokemon, "getMoveType"); const enemyPokemon = game.scene.getEnemyPokemon()!; - vi.spyOn(enemyPokemon, "apply"); + const spy = vi.spyOn(enemyPokemon, "getMoveEffectiveness"); game.move.select(Moves.FURY_SWIPES); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); @@ -125,6 +126,6 @@ describe("Abilities - Galvanize", () => { expect(enemyPokemon.hp).toBeLessThan(enemyStartingHp); } - expect(enemyPokemon.apply).not.toHaveReturnedWith(HitResult.NO_EFFECT); + expect(spy).not.toHaveReturnedWith(0); }); }); diff --git a/test/abilities/infiltrator.test.ts b/test/abilities/infiltrator.test.ts index 10353f35391..48671e54020 100644 --- a/test/abilities/infiltrator.test.ts +++ b/test/abilities/infiltrator.test.ts @@ -61,11 +61,11 @@ describe("Abilities - Infiltrator", () => { const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - const preScreenDmg = enemy.getAttackDamage(player, allMoves[move]).damage; + const preScreenDmg = enemy.getAttackDamage({ source: player, move: allMoves[move] }).damage; game.scene.arena.addTag(tagType, 1, Moves.NONE, enemy.id, ArenaTagSide.ENEMY, true); - const postScreenDmg = enemy.getAttackDamage(player, allMoves[move]).damage; + const postScreenDmg = enemy.getAttackDamage({ source: player, move: allMoves[move] }).damage; expect(postScreenDmg).toBe(preScreenDmg); expect(player.battleData.abilitiesApplied[0]).toBe(Abilities.INFILTRATOR); diff --git a/test/abilities/no_guard.test.ts b/test/abilities/no_guard.test.ts index b34007bc700..a09e16388ee 100644 --- a/test/abilities/no_guard.test.ts +++ b/test/abilities/no_guard.test.ts @@ -4,6 +4,7 @@ import { MoveEndPhase } from "#app/phases/move-end-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; +import { HitCheckResult } from "#enums/hit-check-result"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; @@ -28,6 +29,7 @@ describe("Abilities - No Guard", () => { .moveset(Moves.ZAP_CANNON) .ability(Abilities.NO_GUARD) .enemyLevel(200) + .enemySpecies(Species.SNORLAX) .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH); }); @@ -48,7 +50,7 @@ describe("Abilities - No Guard", () => { await game.phaseInterceptor.to(MoveEndPhase); - expect(moveEffectPhase.hitCheck).toHaveReturnedWith(true); + expect(moveEffectPhase.hitCheck).toHaveReturnedWith([HitCheckResult.HIT, 1]); }); it("should guarantee double battle with any one LURE", async () => { diff --git a/test/abilities/shield_dust.test.ts b/test/abilities/shield_dust.test.ts index 0b96640a29f..4ab58e8c2a6 100644 --- a/test/abilities/shield_dust.test.ts +++ b/test/abilities/shield_dust.test.ts @@ -52,7 +52,7 @@ describe("Abilities - Shield Dust", () => { // Shield Dust negates secondary effect const phase = game.scene.getCurrentPhase() as MoveEffectPhase; - const move = phase.move.getMove(); + const move = phase.move; expect(move.id).toBe(Moves.AIR_SLASH); const chance = new NumberHolder(move.chance); diff --git a/test/abilities/super_luck.test.ts b/test/abilities/super_luck.test.ts index 9e0b6485734..fbcbd02bdd2 100644 --- a/test/abilities/super_luck.test.ts +++ b/test/abilities/super_luck.test.ts @@ -25,7 +25,6 @@ describe("Abilities - Super Luck", () => { .moveset([Moves.TACKLE]) .ability(Abilities.SUPER_LUCK) .battleStyle("single") - .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH); diff --git a/test/abilities/tera_shell.test.ts b/test/abilities/tera_shell.test.ts index c387da30166..fdbcb14947d 100644 --- a/test/abilities/tera_shell.test.ts +++ b/test/abilities/tera_shell.test.ts @@ -2,7 +2,6 @@ import { BattlerIndex } from "#app/battle"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; -import { HitResult } from "#app/field/pokemon"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -87,13 +86,15 @@ describe("Abilities - Tera Shell", () => { await game.classicMode.startBattle([Species.CHARIZARD]); const playerPokemon = game.scene.getPlayerPokemon()!; - vi.spyOn(playerPokemon, "apply"); + const spy = vi.spyOn(playerPokemon, "getMoveEffectiveness"); game.move.select(Moves.SPLASH); await game.phaseInterceptor.to("BerryPhase", false); - expect(playerPokemon.apply).toHaveLastReturnedWith(HitResult.EFFECTIVE); + expect(spy).toHaveLastReturnedWith(1); expect(playerPokemon.hp).toBe(playerPokemon.getMaxHp() - 40); + + spy.mockRestore(); }); it("should change the effectiveness of all strikes of a multi-strike move", async () => { @@ -102,7 +103,7 @@ describe("Abilities - Tera Shell", () => { await game.classicMode.startBattle([Species.SNORLAX]); const playerPokemon = game.scene.getPlayerPokemon()!; - vi.spyOn(playerPokemon, "apply"); + const spy = vi.spyOn(playerPokemon, "getMoveEffectiveness"); game.move.select(Moves.SPLASH); @@ -110,8 +111,9 @@ describe("Abilities - Tera Shell", () => { await game.move.forceHit(); for (let i = 0; i < 2; i++) { await game.phaseInterceptor.to("MoveEffectPhase"); - expect(playerPokemon.apply).toHaveLastReturnedWith(HitResult.NOT_VERY_EFFECTIVE); + expect(spy).toHaveLastReturnedWith(0.5); } - expect(playerPokemon.apply).toHaveReturnedTimes(2); + expect(spy).toHaveReturnedTimes(2); + spy.mockRestore(); }); }); diff --git a/test/battle/damage_calculation.test.ts b/test/battle/damage_calculation.test.ts index e8b3b65bd29..26772cbc4f0 100644 --- a/test/battle/damage_calculation.test.ts +++ b/test/battle/damage_calculation.test.ts @@ -47,7 +47,9 @@ describe("Battle Mechanics - Damage Calculation", () => { // expected base damage = [(2*level/5 + 2) * power * playerATK / enemyDEF / 50] + 2 // = 31.8666... - expect(enemyPokemon.getAttackDamage(playerPokemon, allMoves[Moves.TACKLE]).damage).toBeCloseTo(31); + expect(enemyPokemon.getAttackDamage({ source: playerPokemon, move: allMoves[Moves.TACKLE] }).damage).toBeCloseTo( + 31, + ); }); it("Attacks deal 1 damage at minimum", async () => { @@ -91,7 +93,7 @@ describe("Battle Mechanics - Damage Calculation", () => { const magikarp = game.scene.getPlayerPokemon()!; const dragonite = game.scene.getEnemyPokemon()!; - expect(dragonite.getAttackDamage(magikarp, allMoves[Moves.DRAGON_RAGE]).damage).toBe(40); + expect(dragonite.getAttackDamage({ source: magikarp, move: allMoves[Moves.DRAGON_RAGE] }).damage).toBe(40); }); it("One-hit KO moves ignore damage multipliers", async () => { @@ -102,7 +104,7 @@ describe("Battle Mechanics - Damage Calculation", () => { const magikarp = game.scene.getPlayerPokemon()!; const aggron = game.scene.getEnemyPokemon()!; - expect(aggron.getAttackDamage(magikarp, allMoves[Moves.FISSURE]).damage).toBe(aggron.hp); + expect(aggron.getAttackDamage({ source: magikarp, move: allMoves[Moves.FISSURE] }).damage).toBe(aggron.hp); }); it("When the user fails to use Jump Kick with Wonder Guard ability, the damage should be 1.", async () => { diff --git a/test/battlerTags/substitute.test.ts b/test/battlerTags/substitute.test.ts index fca3dc5ef7e..d2df5511c0a 100644 --- a/test/battlerTags/substitute.test.ts +++ b/test/battlerTags/substitute.test.ts @@ -1,5 +1,5 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import type { PokemonTurnData, TurnMove, PokemonMove } from "#app/field/pokemon"; +import type { PokemonTurnData, TurnMove } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { MoveResult } from "#app/field/pokemon"; import type BattleScene from "#app/battle-scene"; @@ -186,12 +186,8 @@ describe("BattlerTag - SubstituteTag", () => { vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockReturnValue(true); vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); - const pokemonMove = { - getMove: vi.fn().mockReturnValue(allMoves[Moves.TACKLE]) as PokemonMove["getMove"], - } as PokemonMove; - const moveEffectPhase = { - move: pokemonMove, + move: allMoves[Moves.TACKLE], getUserPokemon: vi.fn().mockReturnValue(undefined) as MoveEffectPhase["getUserPokemon"], } as MoveEffectPhase; diff --git a/test/items/dire_hit.test.ts b/test/items/dire_hit.test.ts index b409b2ac7cb..6e20bc723e5 100644 --- a/test/items/dire_hit.test.ts +++ b/test/items/dire_hit.test.ts @@ -36,8 +36,7 @@ describe("Items - Dire Hit", () => { .enemyMoveset(Moves.SPLASH) .moveset([Moves.POUND]) .startingHeldItems([{ name: "DIRE_HIT" }]) - .battleStyle("single") - .disableCrits(); + .battleStyle("single"); }, 20000); it("should raise CRIT stage by 1", async () => { diff --git a/test/items/leek.test.ts b/test/items/leek.test.ts index 7589b89bc15..9bde2c86339 100644 --- a/test/items/leek.test.ts +++ b/test/items/leek.test.ts @@ -28,7 +28,6 @@ describe("Items - Leek", () => { .enemyMoveset([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]) .startingHeldItems([{ name: "LEEK" }]) .moveset([Moves.TACKLE]) - .disableCrits() .battleStyle("single"); }); diff --git a/test/items/scope_lens.test.ts b/test/items/scope_lens.test.ts index 4d2fd63f87b..f67966ea3c9 100644 --- a/test/items/scope_lens.test.ts +++ b/test/items/scope_lens.test.ts @@ -27,8 +27,7 @@ describe("Items - Scope Lens", () => { .enemyMoveset(Moves.SPLASH) .moveset([Moves.POUND]) .startingHeldItems([{ name: "SCOPE_LENS" }]) - .battleStyle("single") - .disableCrits(); + .battleStyle("single"); }, 20000); it("should raise CRIT stage by 1", async () => { diff --git a/test/moves/dig.test.ts b/test/moves/dig.test.ts index a53456ec083..80d51a5c2d5 100644 --- a/test/moves/dig.test.ts +++ b/test/moves/dig.test.ts @@ -97,14 +97,20 @@ describe("Moves - Dig", () => { const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - const preDigEarthquakeDmg = playerPokemon.getAttackDamage(enemyPokemon, allMoves[Moves.EARTHQUAKE]).damage; + const preDigEarthquakeDmg = playerPokemon.getAttackDamage({ + source: enemyPokemon, + move: allMoves[Moves.EARTHQUAKE], + }).damage; game.move.select(Moves.DIG); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); - const postDigEarthquakeDmg = playerPokemon.getAttackDamage(enemyPokemon, allMoves[Moves.EARTHQUAKE]).damage; + const postDigEarthquakeDmg = playerPokemon.getAttackDamage({ + source: enemyPokemon, + move: allMoves[Moves.EARTHQUAKE], + }).damage; // these hopefully get avoid rounding errors :shrug: expect(postDigEarthquakeDmg).toBeGreaterThanOrEqual(2 * preDigEarthquakeDmg); expect(postDigEarthquakeDmg).toBeLessThan(2 * (preDigEarthquakeDmg + 1)); diff --git a/test/moves/dynamax_cannon.test.ts b/test/moves/dynamax_cannon.test.ts index 94f07ae500f..84def8a821f 100644 --- a/test/moves/dynamax_cannon.test.ts +++ b/test/moves/dynamax_cannon.test.ts @@ -50,7 +50,7 @@ describe("Moves - Dynamax Cannon", () => { game.move.select(dynamaxCannon.id); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(dynamaxCannon.id); + expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(dynamaxCannon.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(dynamaxCannon.calculateBattlePower).toHaveLastReturnedWith(100); }, 20000); @@ -62,7 +62,7 @@ describe("Moves - Dynamax Cannon", () => { game.move.select(dynamaxCannon.id); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(dynamaxCannon.id); + expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(dynamaxCannon.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(dynamaxCannon.calculateBattlePower).toHaveLastReturnedWith(100); }, 20000); @@ -75,7 +75,7 @@ describe("Moves - Dynamax Cannon", () => { await game.phaseInterceptor.to(MoveEffectPhase, false); const phase = game.scene.getCurrentPhase() as MoveEffectPhase; - expect(phase.move.moveId).toBe(dynamaxCannon.id); + expect(phase.move.id).toBe(dynamaxCannon.id); // Force level cap to be 100 vi.spyOn(game.scene, "getMaxExpLevel").mockReturnValue(100); await game.phaseInterceptor.to(DamageAnimPhase, false); @@ -90,7 +90,7 @@ describe("Moves - Dynamax Cannon", () => { await game.phaseInterceptor.to(MoveEffectPhase, false); const phase = game.scene.getCurrentPhase() as MoveEffectPhase; - expect(phase.move.moveId).toBe(dynamaxCannon.id); + expect(phase.move.id).toBe(dynamaxCannon.id); // Force level cap to be 100 vi.spyOn(game.scene, "getMaxExpLevel").mockReturnValue(100); await game.phaseInterceptor.to(DamageAnimPhase, false); @@ -105,7 +105,7 @@ describe("Moves - Dynamax Cannon", () => { await game.phaseInterceptor.to(MoveEffectPhase, false); const phase = game.scene.getCurrentPhase() as MoveEffectPhase; - expect(phase.move.moveId).toBe(dynamaxCannon.id); + expect(phase.move.id).toBe(dynamaxCannon.id); // Force level cap to be 100 vi.spyOn(game.scene, "getMaxExpLevel").mockReturnValue(100); await game.phaseInterceptor.to(DamageAnimPhase, false); @@ -120,7 +120,7 @@ describe("Moves - Dynamax Cannon", () => { await game.phaseInterceptor.to(MoveEffectPhase, false); const phase = game.scene.getCurrentPhase() as MoveEffectPhase; - expect(phase.move.moveId).toBe(dynamaxCannon.id); + expect(phase.move.id).toBe(dynamaxCannon.id); // Force level cap to be 100 vi.spyOn(game.scene, "getMaxExpLevel").mockReturnValue(100); await game.phaseInterceptor.to(DamageAnimPhase, false); @@ -135,7 +135,7 @@ describe("Moves - Dynamax Cannon", () => { await game.phaseInterceptor.to(MoveEffectPhase, false); const phase = game.scene.getCurrentPhase() as MoveEffectPhase; - expect(phase.move.moveId).toBe(dynamaxCannon.id); + expect(phase.move.id).toBe(dynamaxCannon.id); // Force level cap to be 100 vi.spyOn(game.scene, "getMaxExpLevel").mockReturnValue(100); await game.phaseInterceptor.to(DamageAnimPhase, false); @@ -150,7 +150,7 @@ describe("Moves - Dynamax Cannon", () => { await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(dynamaxCannon.id); + expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(dynamaxCannon.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(dynamaxCannon.calculateBattlePower).toHaveLastReturnedWith(200); }, 20000); diff --git a/test/moves/fusion_flare_bolt.test.ts b/test/moves/fusion_flare_bolt.test.ts index 697ac57e739..ce6bb62d1d0 100644 --- a/test/moves/fusion_flare_bolt.test.ts +++ b/test/moves/fusion_flare_bolt.test.ts @@ -57,12 +57,12 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionFlare.id); + expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionFlare.calculateBattlePower).toHaveLastReturnedWith(100); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionBolt.id); + expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionBolt.calculateBattlePower).toHaveLastReturnedWith(200); }, 20000); @@ -77,12 +77,12 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionBolt.id); + expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionBolt.calculateBattlePower).toHaveLastReturnedWith(100); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionFlare.id); + expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionFlare.calculateBattlePower).toHaveLastReturnedWith(200); }, 20000); @@ -97,7 +97,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionFlare.id); + expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionFlare.calculateBattlePower).toHaveLastReturnedWith(100); @@ -107,7 +107,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { await game.phaseInterceptor.runFrom(MovePhase).to(MoveEndPhase); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionBolt.id); + expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionBolt.calculateBattlePower).toHaveLastReturnedWith(200); }, 20000); @@ -123,7 +123,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionFlare.id); + expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionFlare.calculateBattlePower).toHaveLastReturnedWith(100); @@ -132,7 +132,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { await game.phaseInterceptor.runFrom(MovePhase).to(MoveEndPhase); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionBolt.id); + expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionBolt.calculateBattlePower).toHaveLastReturnedWith(100); }, 20000); @@ -147,12 +147,12 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionBolt.id); + expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionBolt.calculateBattlePower).toHaveLastReturnedWith(100); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionFlare.id); + expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionFlare.calculateBattlePower).toHaveLastReturnedWith(200); }, 20000); @@ -191,22 +191,22 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionBolt.id); + expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionBolt.calculateBattlePower).toHaveLastReturnedWith(100); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionFlare.id); + expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionFlare.calculateBattlePower).toHaveLastReturnedWith(200); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionBolt.id); + expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionBolt.calculateBattlePower).toHaveLastReturnedWith(200); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionFlare.id); + expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionFlare.calculateBattlePower).toHaveLastReturnedWith(200); }, 20000); @@ -245,22 +245,22 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionBolt.id); + expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionBolt.calculateBattlePower).toHaveLastReturnedWith(100); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionFlare.id); + expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionFlare.calculateBattlePower).toHaveLastReturnedWith(200); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionBolt.id); + expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionBolt.calculateBattlePower).toHaveLastReturnedWith(200); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionFlare.id); + expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionFlare.calculateBattlePower).toHaveLastReturnedWith(200); }, 20000); diff --git a/test/moves/spectral_thief.test.ts b/test/moves/spectral_thief.test.ts index 2e52b118a74..2654ab1ad8d 100644 --- a/test/moves/spectral_thief.test.ts +++ b/test/moves/spectral_thief.test.ts @@ -71,7 +71,7 @@ describe("Moves - Spectral Thief", () => { const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; const moveToCheck = allMoves[Moves.SPECTRAL_THIEF]; - const dmgBefore = enemy.getAttackDamage(player, moveToCheck, false, false, false, false).damage; + const dmgBefore = enemy.getAttackDamage({ source: player, move: moveToCheck }).damage; enemy.setStatStage(Stat.ATK, 6); @@ -80,7 +80,7 @@ describe("Moves - Spectral Thief", () => { game.move.select(Moves.SPECTRAL_THIEF); await game.phaseInterceptor.to(TurnEndPhase); - expect(dmgBefore).toBeLessThan(enemy.getAttackDamage(player, moveToCheck, false, false, false, false).damage); + expect(dmgBefore).toBeLessThan(enemy.getAttackDamage({ source: player, move: moveToCheck }).damage); }); it("should steal stat stages as a negative value with Contrary.", async () => { diff --git a/test/moves/tera_blast.test.ts b/test/moves/tera_blast.test.ts index 5dc3a914a2e..8817f12b8cf 100644 --- a/test/moves/tera_blast.test.ts +++ b/test/moves/tera_blast.test.ts @@ -4,7 +4,6 @@ import { allMoves, TeraMoveCategoryAttr } from "#app/data/moves/move"; import type Move from "#app/data/moves/move"; import { PokemonType } from "#enums/pokemon-type"; import { Abilities } from "#app/enums/abilities"; -import { HitResult } from "#app/field/pokemon"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; @@ -49,9 +48,9 @@ describe("Moves - Tera Blast", () => { it("changes type to match user's tera type", async () => { game.override.enemySpecies(Species.FURRET); - await game.startBattle(); + await game.classicMode.startBattle(); const enemyPokemon = game.scene.getEnemyPokemon()!; - vi.spyOn(enemyPokemon, "apply"); + const spy = vi.spyOn(enemyPokemon, "getMoveEffectiveness"); const playerPokemon = game.scene.getPlayerPokemon()!; playerPokemon.teraType = PokemonType.FIGHTING; @@ -61,11 +60,11 @@ describe("Moves - Tera Blast", () => { await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); - expect(enemyPokemon.apply).toHaveReturnedWith(HitResult.SUPER_EFFECTIVE); + expect(spy).toHaveReturnedWith(2); }, 20000); it("increases power if user is Stellar tera type", async () => { - await game.startBattle(); + await game.classicMode.startBattle(); const playerPokemon = game.scene.getPlayerPokemon()!; playerPokemon.teraType = PokemonType.STELLAR; @@ -79,25 +78,25 @@ describe("Moves - Tera Blast", () => { }, 20000); it("is super effective against terastallized targets if user is Stellar tera type", async () => { - await game.startBattle(); + await game.classicMode.startBattle(); const playerPokemon = game.scene.getPlayerPokemon()!; playerPokemon.teraType = PokemonType.STELLAR; playerPokemon.isTerastallized = true; const enemyPokemon = game.scene.getEnemyPokemon()!; - vi.spyOn(enemyPokemon, "apply"); + const spy = vi.spyOn(enemyPokemon, "getMoveEffectiveness"); enemyPokemon.isTerastallized = true; game.move.select(Moves.TERA_BLAST); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); - expect(enemyPokemon.apply).toHaveReturnedWith(HitResult.SUPER_EFFECTIVE); + expect(spy).toHaveReturnedWith(2); }); it("uses the higher ATK for damage calculation", async () => { - await game.startBattle(); + await game.classicMode.startBattle(); const playerPokemon = game.scene.getPlayerPokemon()!; playerPokemon.stats[Stat.ATK] = 100; @@ -112,7 +111,7 @@ describe("Moves - Tera Blast", () => { }); it("uses the higher SPATK for damage calculation", async () => { - await game.startBattle(); + await game.classicMode.startBattle(); const playerPokemon = game.scene.getPlayerPokemon()!; playerPokemon.stats[Stat.ATK] = 1; @@ -127,7 +126,7 @@ describe("Moves - Tera Blast", () => { it("should stay as a special move if ATK turns lower than SPATK mid-turn", async () => { game.override.enemyMoveset([Moves.CHARM]); - await game.startBattle(); + await game.classicMode.startBattle(); const playerPokemon = game.scene.getPlayerPokemon()!; playerPokemon.stats[Stat.ATK] = 51; @@ -145,7 +144,7 @@ describe("Moves - Tera Blast", () => { game.override .startingHeldItems([{ name: "SPECIES_STAT_BOOSTER", type: "THICK_CLUB" }]) .starterSpecies(Species.CUBONE); - await game.startBattle(); + await game.classicMode.startBattle(); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -163,7 +162,7 @@ describe("Moves - Tera Blast", () => { it("does not change its move category from stat changes due to abilities", async () => { game.override.ability(Abilities.HUGE_POWER); - await game.startBattle(); + await game.classicMode.startBattle(); const playerPokemon = game.scene.getPlayerPokemon()!; playerPokemon.stats[Stat.ATK] = 50; @@ -178,7 +177,7 @@ describe("Moves - Tera Blast", () => { }); it("causes stat drops if user is Stellar tera type", async () => { - await game.startBattle(); + await game.classicMode.startBattle(); const playerPokemon = game.scene.getPlayerPokemon()!; playerPokemon.teraType = PokemonType.STELLAR; diff --git a/test/testUtils/helpers/moveHelper.ts b/test/testUtils/helpers/moveHelper.ts index edade109966..0f3d75c6268 100644 --- a/test/testUtils/helpers/moveHelper.ts +++ b/test/testUtils/helpers/moveHelper.ts @@ -18,29 +18,29 @@ import { vi } from "vitest"; */ export class MoveHelper extends GameManagerHelper { /** - * Intercepts {@linkcode MoveEffectPhase} and mocks the - * {@linkcode MoveEffectPhase.hitCheck | hitCheck}'s return value to `true`. - * Used to force a move to hit. + * Intercepts {@linkcode MoveEffectPhase} and mocks the phase's move's + * accuracy to -1, guaranteeing a hit. */ public async forceHit(): Promise { await this.game.phaseInterceptor.to(MoveEffectPhase, false); - vi.spyOn(this.game.scene.getCurrentPhase() as MoveEffectPhase, "hitCheck").mockReturnValue(true); + const moveEffectPhase = this.game.scene.getCurrentPhase() as MoveEffectPhase; + vi.spyOn(moveEffectPhase.move, "calculateBattleAccuracy").mockReturnValue(-1); } /** - * Intercepts {@linkcode MoveEffectPhase} and mocks the - * {@linkcode MoveEffectPhase.hitCheck | hitCheck}'s return value to `false`. - * Used to force a move to miss. + * Intercepts {@linkcode MoveEffectPhase} and mocks the phase's move's accuracy + * to 0, guaranteeing a miss. * @param firstTargetOnly - Whether the move should force miss on the first target only, in the case of multi-target moves. */ public async forceMiss(firstTargetOnly = false): Promise { await this.game.phaseInterceptor.to(MoveEffectPhase, false); - const hitCheck = vi.spyOn(this.game.scene.getCurrentPhase() as MoveEffectPhase, "hitCheck"); + const moveEffectPhase = this.game.scene.getCurrentPhase() as MoveEffectPhase; + const accuracy = vi.spyOn(moveEffectPhase.move, "calculateBattleAccuracy"); if (firstTargetOnly) { - hitCheck.mockReturnValueOnce(false); + accuracy.mockReturnValueOnce(0); } else { - hitCheck.mockReturnValue(false); + accuracy.mockReturnValue(0); } } From b848777880b8c05dc0f2849bf25e97f60135c04e Mon Sep 17 00:00:00 2001 From: Jimmybald1 <122436263+Jimmybald1@users.noreply.github.com> Date: Wed, 23 Apr 2025 19:54:43 +0200 Subject: [PATCH 050/262] [Bug][Misc] Moved `SelectBiomePhase` in front of `NewBattlePhase` (#5694) * Moved SelectBiomePhase in front of NewBattlePhase * disguise test now has to go to QuietFormChangePhase --------- Co-authored-by: Jimmybald1 <147992650+IBBCalc@users.noreply.github.com> --- src/battle-scene.ts | 19 +++++++++++-------- src/data/abilities/ability.ts | 6 ++++++ src/data/moves/move.ts | 6 ++++++ src/phases/attempt-run-phase.ts | 6 ++++++ src/phases/mystery-encounter-phases.ts | 5 +++++ src/phases/select-biome-phase.ts | 19 ++++++++++--------- src/phases/switch-biome-phase.ts | 4 ++++ src/phases/victory-phase.ts | 6 ++++++ test/abilities/disguise.test.ts | 2 +- 9 files changed, 55 insertions(+), 18 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index ecaffc5ed07..2ff5d718ede 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -151,7 +151,6 @@ import { NextEncounterPhase } from "#app/phases/next-encounter-phase"; import { PokemonAnimPhase } from "#app/phases/pokemon-anim-phase"; import { QuietFormChangePhase } from "#app/phases/quiet-form-change-phase"; import { ReturnPhase } from "#app/phases/return-phase"; -import { SelectBiomePhase } from "#app/phases/select-biome-phase"; import { ShowTrainerPhase } from "#app/phases/show-trainer-phase"; import { SummonPhase } from "#app/phases/summon-phase"; import { SwitchPhase } from "#app/phases/switch-phase"; @@ -1298,6 +1297,16 @@ export default class BattleScene extends SceneBase { return Math.max(doubleChance.value, 1); } + isNewBiome(currentBattle = this.currentBattle) { + const isWaveIndexMultipleOfTen = !(currentBattle.waveIndex % 10); + const isEndlessOrDaily = this.gameMode.hasShortBiomes || this.gameMode.isDaily; + const isEndlessFifthWave = this.gameMode.hasShortBiomes && currentBattle.waveIndex % 5 === 0; + const isWaveIndexMultipleOfFiftyMinusOne = currentBattle.waveIndex % 50 === 49; + const isNewBiome = + isWaveIndexMultipleOfTen || isEndlessFifthWave || (isEndlessOrDaily && isWaveIndexMultipleOfFiftyMinusOne); + return isNewBiome; + } + // TODO: ...this never actually returns `null`, right? newBattle( waveIndex?: number, @@ -1461,12 +1470,7 @@ export default class BattleScene extends SceneBase { } if (!waveIndex && lastBattle) { - const isWaveIndexMultipleOfTen = !(lastBattle.waveIndex % 10); - const isEndlessOrDaily = this.gameMode.hasShortBiomes || this.gameMode.isDaily; - const isEndlessFifthWave = this.gameMode.hasShortBiomes && lastBattle.waveIndex % 5 === 0; - const isWaveIndexMultipleOfFiftyMinusOne = lastBattle.waveIndex % 50 === 49; - const isNewBiome = - isWaveIndexMultipleOfTen || isEndlessFifthWave || (isEndlessOrDaily && isWaveIndexMultipleOfFiftyMinusOne); + const isNewBiome = this.isNewBiome(lastBattle); const resetArenaState = isNewBiome || [BattleType.TRAINER, BattleType.MYSTERY_ENCOUNTER].includes(this.currentBattle.battleType) || @@ -1515,7 +1519,6 @@ export default class BattleScene extends SceneBase { if (!this.gameMode.hasRandomBiomes && !isNewBiome) { this.pushPhase(new NextEncounterPhase()); } else { - this.pushPhase(new SelectBiomePhase()); this.pushPhase(new NewBiomeEncounterPhase()); const newMaxExpLevel = this.getMaxExpLevel(); diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 53d024ac655..d8b648ebe82 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -72,6 +72,7 @@ import type { AbAttrCondition, PokemonDefendCondition, PokemonStatStageChangeCon import type { BattlerIndex } from "#app/battle"; import type Move from "#app/data/moves/move"; import type { ArenaTrapTag, SuppressAbilitiesTag } from "#app/data/arena-tag"; +import { SelectBiomePhase } from "#app/phases/select-biome-phase"; export class BlockRecoilDamageAttr extends AbAttr { constructor() { @@ -5483,6 +5484,11 @@ class ForceSwitchOutHelper { if (switchOutTarget.hp) { globalScene.pushPhase(new BattleEndPhase(false)); + + if (globalScene.gameMode.hasRandomBiomes || globalScene.isNewBiome()) { + globalScene.pushPhase(new SelectBiomePhase()); + } + globalScene.pushPhase(new NewBattlePhase()); } } diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 35d98f6f781..5d57bb6dc49 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -123,6 +123,7 @@ import { MoveEffectTrigger } from "#enums/MoveEffectTrigger"; import { MultiHitType } from "#enums/MultiHitType"; import { invalidAssistMoves, invalidCopycatMoves, invalidMetronomeMoves, invalidMirrorMoveMoves, invalidSleepTalkMoves } from "./invalid-moves"; import { TrainerVariant } from "#app/field/trainer"; +import { SelectBiomePhase } from "#app/phases/select-biome-phase"; type MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => boolean; type UserMoveConditionFunc = (user: Pokemon, move: Move) => boolean; @@ -6332,6 +6333,11 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { if (!allyPokemon?.isActive(true) && switchOutTarget.hp) { globalScene.pushPhase(new BattleEndPhase(false)); + + if (globalScene.gameMode.hasRandomBiomes || globalScene.isNewBiome()) { + globalScene.pushPhase(new SelectBiomePhase()); + } + globalScene.pushPhase(new NewBattlePhase()); } } diff --git a/src/phases/attempt-run-phase.ts b/src/phases/attempt-run-phase.ts index eed5c3c522e..274d3c40576 100644 --- a/src/phases/attempt-run-phase.ts +++ b/src/phases/attempt-run-phase.ts @@ -14,6 +14,7 @@ import { BattleEndPhase } from "./battle-end-phase"; import { NewBattlePhase } from "./new-battle-phase"; import { PokemonPhase } from "./pokemon-phase"; import { globalScene } from "#app/global-scene"; +import { SelectBiomePhase } from "./select-biome-phase"; export class AttemptRunPhase extends PokemonPhase { /** For testing purposes: this is to force the pokemon to fail and escape */ @@ -59,6 +60,11 @@ export class AttemptRunPhase extends PokemonPhase { }); globalScene.pushPhase(new BattleEndPhase(false)); + + if (globalScene.gameMode.hasRandomBiomes || globalScene.isNewBiome()) { + globalScene.pushPhase(new SelectBiomePhase()); + } + globalScene.pushPhase(new NewBattlePhase()); } else { playerPokemon.turnData.failedRunAway = true; diff --git a/src/phases/mystery-encounter-phases.ts b/src/phases/mystery-encounter-phases.ts index 100be47e4e9..011dd26db92 100644 --- a/src/phases/mystery-encounter-phases.ts +++ b/src/phases/mystery-encounter-phases.ts @@ -27,6 +27,7 @@ import { IvScannerModifier } from "../modifier/modifier"; import { Phase } from "../phase"; import { UiMode } from "#enums/ui-mode"; import { isNullOrUndefined, randSeedItem } from "#app/utils/common"; +import { SelectBiomePhase } from "./select-biome-phase"; /** * Will handle (in order): @@ -612,6 +613,10 @@ export class PostMysteryEncounterPhase extends Phase { */ continueEncounter() { const endPhase = () => { + if (globalScene.gameMode.hasRandomBiomes || globalScene.isNewBiome()) { + globalScene.pushPhase(new SelectBiomePhase()); + } + globalScene.pushPhase(new NewBattlePhase()); this.end(); }; diff --git a/src/phases/select-biome-phase.ts b/src/phases/select-biome-phase.ts index 0ea2841a2d3..4811c4e6b8f 100644 --- a/src/phases/select-biome-phase.ts +++ b/src/phases/select-biome-phase.ts @@ -14,9 +14,10 @@ export class SelectBiomePhase extends BattlePhase { super.start(); const currentBiome = globalScene.arena.biomeType; + const nextWaveIndex = globalScene.currentBattle.waveIndex + 1; const setNextBiome = (nextBiome: Biome) => { - if (globalScene.currentBattle.waveIndex % 10 === 1) { + if (nextWaveIndex % 10 === 1) { globalScene.applyModifiers(MoneyInterestModifier, true); globalScene.unshiftPhase(new PartyHealPhase(false)); } @@ -25,13 +26,13 @@ export class SelectBiomePhase extends BattlePhase { }; if ( - (globalScene.gameMode.isClassic && globalScene.gameMode.isWaveFinal(globalScene.currentBattle.waveIndex + 9)) || - (globalScene.gameMode.isDaily && globalScene.gameMode.isWaveFinal(globalScene.currentBattle.waveIndex)) || - (globalScene.gameMode.hasShortBiomes && !(globalScene.currentBattle.waveIndex % 50)) + (globalScene.gameMode.isClassic && globalScene.gameMode.isWaveFinal(nextWaveIndex + 9)) || + (globalScene.gameMode.isDaily && globalScene.gameMode.isWaveFinal(nextWaveIndex)) || + (globalScene.gameMode.hasShortBiomes && !(nextWaveIndex % 50)) ) { setNextBiome(Biome.END); } else if (globalScene.gameMode.hasRandomBiomes) { - setNextBiome(this.generateNextBiome()); + setNextBiome(this.generateNextBiome(nextWaveIndex)); } else if (Array.isArray(biomeLinks[currentBiome])) { const biomes: Biome[] = (biomeLinks[currentBiome] as (Biome | [Biome, number])[]) .filter(b => !Array.isArray(b) || !randSeedInt(b[1])) @@ -59,14 +60,14 @@ export class SelectBiomePhase extends BattlePhase { } else if (biomeLinks.hasOwnProperty(currentBiome)) { setNextBiome(biomeLinks[currentBiome] as Biome); } else { - setNextBiome(this.generateNextBiome()); + setNextBiome(this.generateNextBiome(nextWaveIndex)); } } - generateNextBiome(): Biome { - if (!(globalScene.currentBattle.waveIndex % 50)) { + generateNextBiome(waveIndex: number): Biome { + if (!(waveIndex % 50)) { return Biome.END; } - return globalScene.generateRandomBiome(globalScene.currentBattle.waveIndex); + return globalScene.generateRandomBiome(waveIndex); } } diff --git a/src/phases/switch-biome-phase.ts b/src/phases/switch-biome-phase.ts index 2dd2a642f43..f708830318e 100644 --- a/src/phases/switch-biome-phase.ts +++ b/src/phases/switch-biome-phase.ts @@ -19,6 +19,10 @@ export class SwitchBiomePhase extends BattlePhase { return this.end(); } + // Before switching biomes, make sure to set the last encounter for other phases that need it too. + globalScene.lastEnemyTrainer = globalScene.currentBattle?.trainer ?? null; + globalScene.lastMysteryEncounter = globalScene.currentBattle?.mysteryEncounter; + globalScene.tweens.add({ targets: [globalScene.arenaEnemy, globalScene.lastEnemyTrainer], x: "+=300", diff --git a/src/phases/victory-phase.ts b/src/phases/victory-phase.ts index 17b29f654e2..6e1837a4749 100644 --- a/src/phases/victory-phase.ts +++ b/src/phases/victory-phase.ts @@ -15,6 +15,7 @@ import { TrainerVictoryPhase } from "./trainer-victory-phase"; import { handleMysteryEncounterVictory } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { globalScene } from "#app/global-scene"; import { timedEventManager } from "#app/global-event-manager"; +import { SelectBiomePhase } from "./select-biome-phase"; export class VictoryPhase extends PokemonPhase { /** If true, indicates that the phase is intended for EXP purposes only, and not to continue a battle to next phase */ @@ -111,6 +112,11 @@ export class VictoryPhase extends PokemonPhase { globalScene.pushPhase(new AddEnemyBuffModifierPhase()); } } + + if (globalScene.gameMode.hasRandomBiomes || globalScene.isNewBiome()) { + globalScene.pushPhase(new SelectBiomePhase()); + } + globalScene.pushPhase(new NewBattlePhase()); } else { globalScene.currentBattle.battleType = BattleType.CLEAR; diff --git a/test/abilities/disguise.test.ts b/test/abilities/disguise.test.ts index aeaf8ea2363..0e62b8ad448 100644 --- a/test/abilities/disguise.test.ts +++ b/test/abilities/disguise.test.ts @@ -186,7 +186,7 @@ describe("Abilities - Disguise", () => { await game.toNextTurn(); game.move.select(Moves.SPLASH); await game.doKillOpponents(); - await game.phaseInterceptor.to("PartyHealPhase"); + await game.phaseInterceptor.to("QuietFormChangePhase"); expect(mimikyu1.formIndex).toBe(disguisedForm); }); From 389ad6ceb627ed11579e36009a4164ca7f037e52 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Wed, 23 Apr 2025 13:10:01 -0500 Subject: [PATCH 051/262] [Tests][UI/UX] Add automated tests for the pokedex (#5637) * Remove unneeded fields from src/ui/filter-text.ts * Add setOverlayMode to phaseInterceptor * initialize pokemon starters before running tests * Add getWrappedText to mockText * Add initial pokedex test * Add test for wrapping cursor in pokedex view * Make pokedex use getPassiveAbility instead of checking passive map Allows for tests to mock passives * Add test for filtering double ability combinations * Add test for filtering by types * Mark failing test as TODO * Apply suggestions from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: Madmadness65 <59298170+Madmadness65@users.noreply.github.com> * Use ts-expect-error instead of ts-ignore in comments Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Add save for pokedex tests * Add test for filtering by cost reduction * Add test for filtering by shiny * Add tests for filtering by cost reductions * Fix typo in test name * Update test/ui/pokedex.test.ts Co-authored-by: Wlowscha <54003515+Wlowscha@users.noreply.github.com> * Update Mode import in pokedex test * Replace reference to Mode with UiMode --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: Madmadness65 <59298170+Madmadness65@users.noreply.github.com> Co-authored-by: Wlowscha <54003515+Wlowscha@users.noreply.github.com> --- src/ui/filter-text.ts | 15 +- src/ui/pokedex-ui-handler.ts | 20 +- test/testUtils/gameWrapper.ts | 6 + .../mocks/mocksContainer/mockText.ts | 9 + test/testUtils/phaseInterceptor.ts | 15 + test/testUtils/saves/data_pokedex_tests.prsv | 1 + test/testUtils/testFileInitialization.ts | 5 +- test/ui/pokedex.test.ts | 492 ++++++++++++++++++ 8 files changed, 545 insertions(+), 18 deletions(-) create mode 100644 test/testUtils/saves/data_pokedex_tests.prsv create mode 100644 test/ui/pokedex.test.ts diff --git a/src/ui/filter-text.ts b/src/ui/filter-text.ts index 8b13b76db31..7e27a806478 100644 --- a/src/ui/filter-text.ts +++ b/src/ui/filter-text.ts @@ -20,7 +20,6 @@ export class FilterText extends Phaser.GameObjects.Container { private window: Phaser.GameObjects.NineSlice; private labels: Phaser.GameObjects.Text[] = []; private selections: Phaser.GameObjects.Text[] = []; - private selectionStrings: string[] = []; private rows: FilterTextRow[] = []; public cursorObj: Phaser.GameObjects.Image; public numFilters = 0; @@ -112,8 +111,6 @@ export class FilterText extends Phaser.GameObjects.Container { this.selections.push(filterTypesSelection); this.add(filterTypesSelection); - this.selectionStrings.push(""); - this.calcFilterPositions(); this.numFilters++; @@ -122,7 +119,6 @@ export class FilterText extends Phaser.GameObjects.Container { resetSelection(index: number): void { this.selections[index].setText(this.defaultText); - this.selectionStrings[index] = ""; this.onChange(); } @@ -204,6 +200,17 @@ export class FilterText extends Phaser.GameObjects.Container { return this.selections[row].getWrappedText()[0]; } + /** + * Forcibly set the selection text for a specific filter row and then call the `onChange` function + * + * @param row - The filter row to set the text for + * @param value - The text to set for the filter row + */ + setValue(row: FilterTextRow, value: string) { + this.selections[row].setText(value); + this.onChange(); + } + /** * Find the nearest filter to the provided container on the y-axis * @param container the StarterContainer to compare position against diff --git a/src/ui/pokedex-ui-handler.ts b/src/ui/pokedex-ui-handler.ts index e9726031bf5..b1d0945de07 100644 --- a/src/ui/pokedex-ui-handler.ts +++ b/src/ui/pokedex-ui-handler.ts @@ -37,10 +37,9 @@ import { addWindow } from "./ui-theme"; import type { OptionSelectConfig } from "./abstact-option-select-ui-handler"; import { FilterText, FilterTextRow } from "./filter-text"; import { allAbilities } from "#app/data/data-lists"; -import { starterPassiveAbilities } from "#app/data/balance/passives"; import { allMoves } from "#app/data/moves/move"; import { speciesTmMoves } from "#app/data/balance/tms"; -import { pokemonPrevolutions, pokemonStarters } from "#app/data/balance/pokemon-evolutions"; +import { pokemonStarters } from "#app/data/balance/pokemon-evolutions"; import { Biome } from "#enums/biome"; import { globalScene } from "#app/global-scene"; @@ -174,7 +173,6 @@ export default class PokedexUiHandler extends MessageUiHandler { private scrollCursor: number; private oldCursor = -1; - private allSpecies: PokemonSpecies[] = []; private lastSpecies: PokemonSpecies; private speciesLoaded: Map = new Map(); private pokerusSpecies: PokemonSpecies[] = []; @@ -493,12 +491,11 @@ export default class PokedexUiHandler extends MessageUiHandler { for (const species of allSpecies) { this.speciesLoaded.set(species.speciesId, false); - this.allSpecies.push(species); } // Here code to declare 81 containers for (let i = 0; i < 81; i++) { - const pokemonContainer = new PokedexMonContainer(this.allSpecies[i]).setVisible(false); + const pokemonContainer = new PokedexMonContainer(allSpecies[i]).setVisible(false); const pos = calcStarterPosition(i); pokemonContainer.setPosition(pos.x, pos.y); this.iconAnimHandler.addOrUpdate(pokemonContainer.icon, PokemonIconAnimMode.NONE); @@ -1342,7 +1339,7 @@ export default class PokedexUiHandler extends MessageUiHandler { this.filteredPokemonData = []; - this.allSpecies.forEach(species => { + allSpecies.forEach(species => { const starterId = this.getStarterSpeciesId(species.speciesId); const currentDexAttr = this.getCurrentDexProps(species.speciesId); @@ -1412,12 +1409,11 @@ export default class PokedexUiHandler extends MessageUiHandler { // Ability filter const abilities = [species.ability1, species.ability2, species.abilityHidden].map(a => allAbilities[a].name); - const passiveId = starterPassiveAbilities.hasOwnProperty(species.speciesId) - ? species.speciesId - : starterPassiveAbilities.hasOwnProperty(starterId) - ? starterId - : pokemonPrevolutions[starterId]; - const passives = starterPassiveAbilities[passiveId]; + // get the passive ability for the species + const passives = [species.getPassiveAbility()]; + for (const form of species.forms) { + passives.push(form.getPassiveAbility()); + } const selectedAbility1 = this.filterText.getValue(FilterTextRow.ABILITY_1); const fitsFormAbility1 = species.forms.some(form => diff --git a/test/testUtils/gameWrapper.ts b/test/testUtils/gameWrapper.ts index 050e9f13257..9264b68d421 100644 --- a/test/testUtils/gameWrapper.ts +++ b/test/testUtils/gameWrapper.ts @@ -21,6 +21,8 @@ import KeyboardPlugin = Phaser.Input.Keyboard.KeyboardPlugin; import GamepadPlugin = Phaser.Input.Gamepad.GamepadPlugin; import EventEmitter = Phaser.Events.EventEmitter; import UpdateList = Phaser.GameObjects.UpdateList; +import { PokedexMonContainer } from "#app/ui/pokedex-mon-container"; +import MockContainer from "./mocks/mocksContainer/mockContainer"; // biome-ignore lint/style/noNamespaceImport: Necessary in order to mock the var import * as bypassLoginModule from "#app/global-vars/bypass-login"; @@ -61,6 +63,10 @@ export default class GameWrapper { } }; BattleScene.prototype.addPokemonIcon = () => new Phaser.GameObjects.Container(this.scene); + + // Pokedex container is not actually mocking container, but the sprites they contain are mocked. + // We need to mock the remove function to not throw an error when removing a sprite. + PokedexMonContainer.prototype.remove = MockContainer.prototype.remove; } setScene(scene: BattleScene) { diff --git a/test/testUtils/mocks/mocksContainer/mockText.ts b/test/testUtils/mocks/mocksContainer/mockText.ts index 552f8ff3ff8..1f3f0ad792f 100644 --- a/test/testUtils/mocks/mocksContainer/mockText.ts +++ b/test/testUtils/mocks/mocksContainer/mockText.ts @@ -308,5 +308,14 @@ export default class MockText implements MockGameObject { return this.list; } + /** + * Runs the word wrap algorithm on the text, then returns an array of the lines + */ + getWrappedText() { + // Returns the wrapped text. + // return this.phaserText.getWrappedText(); + return this.runWordWrap(this.text).split("\n"); + } + on(_event: string | symbol, _fn: Function, _context?: any) {} } diff --git a/test/testUtils/phaseInterceptor.ts b/test/testUtils/phaseInterceptor.ts index 3d56c513c00..b1d76ecd4a6 100644 --- a/test/testUtils/phaseInterceptor.ts +++ b/test/testUtils/phaseInterceptor.ts @@ -205,6 +205,7 @@ export default class PhaseInterceptor { private phaseFrom; private inProgress; private originalSetMode; + private originalSetOverlayMode; private originalSuperEnd; /** @@ -442,6 +443,7 @@ export default class PhaseInterceptor { */ initPhases() { this.originalSetMode = UI.prototype.setMode; + this.originalSetOverlayMode = UI.prototype.setOverlayMode; this.originalSuperEnd = Phase.prototype.end; UI.prototype.setMode = (mode, ...args) => this.setMode.call(this, mode, ...args); Phase.prototype.end = () => this.superEndPhase.call(this); @@ -508,6 +510,18 @@ export default class PhaseInterceptor { return ret; } + /** + * mock to set overlay mode + * @param mode - The {@linkcode Mode} to set. + * @param args - Additional arguments to pass to the original method. + */ + setOverlayMode(mode: UiMode, ...args: unknown[]): Promise { + const instance = this.scene.ui; + console.log("setOverlayMode", `${UiMode[mode]} (=${mode})`, args); + const ret = this.originalSetOverlayMode.apply(instance, [mode, ...args]); + return ret; + } + /** * Method to start the prompt handler. */ @@ -572,6 +586,7 @@ export default class PhaseInterceptor { phase.prototype.start = this.phases[phase.name].start; } UI.prototype.setMode = this.originalSetMode; + UI.prototype.setOverlayMode = this.originalSetOverlayMode; Phase.prototype.end = this.originalSuperEnd; clearInterval(this.promptInterval); clearInterval(this.interval); diff --git a/test/testUtils/saves/data_pokedex_tests.prsv b/test/testUtils/saves/data_pokedex_tests.prsv new file mode 100644 index 00000000000..c55241760c4 --- /dev/null +++ b/test/testUtils/saves/data_pokedex_tests.prsv @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/test/testUtils/testFileInitialization.ts b/test/testUtils/testFileInitialization.ts index 414e34e024b..15635289e6f 100644 --- a/test/testUtils/testFileInitialization.ts +++ b/test/testUtils/testFileInitialization.ts @@ -3,7 +3,7 @@ import { initLoggedInUser } from "#app/account"; import { initAbilities } from "#app/data/abilities/ability"; import { initBiomes } from "#app/data/balance/biomes"; import { initEggMoves } from "#app/data/balance/egg-moves"; -import { initPokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; +import { initPokemonPrevolutions, initPokemonStarters } from "#app/data/balance/pokemon-evolutions"; import { initMoves } from "#app/data/moves/move"; import { initMysteryEncounters } from "#app/data/mystery-encounters/mystery-encounters"; import { initPokemonForms } from "#app/data/pokemon-forms"; @@ -85,7 +85,6 @@ export function initTestFile() { HTMLCanvasElement.prototype.getContext = () => mockContext; // Initialize all of these things if and only if they have not been initialized yet - // initSpecies(); if (!wasInitialized) { wasInitialized = true; initI18n(); @@ -101,6 +100,8 @@ export function initTestFile() { initAbilities(); initLoggedInUser(); initMysteryEncounters(); + // init the pokemon starters for the pokedex + initPokemonStarters(); } manageListeners(); diff --git a/test/ui/pokedex.test.ts b/test/ui/pokedex.test.ts new file mode 100644 index 00000000000..41fb5e47f8c --- /dev/null +++ b/test/ui/pokedex.test.ts @@ -0,0 +1,492 @@ +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, type MockInstance, vi } from "vitest"; +import PokedexUiHandler from "#app/ui/pokedex-ui-handler"; +import { FilterTextRow } from "#app/ui/filter-text"; +import { allAbilities } from "#app/data/data-lists"; +import { Abilities } from "#enums/abilities"; +import { Species } from "#enums/species"; +import { allSpecies, getPokemonSpecies, type PokemonForm } from "#app/data/pokemon-species"; +import { Button } from "#enums/buttons"; +import { DropDownColumn } from "#app/ui/filter-bar"; +import type PokemonSpecies from "#app/data/pokemon-species"; +import { PokemonType } from "#enums/pokemon-type"; +import { UiMode } from "#enums/ui-mode"; + +/* +Information for the `data_pokedex_tests.psrv`: + +Caterpie - Shiny 0 +Rattata - Shiny 1 +Ekans - Shiny 2 + +Chikorita has enough candies to unlock passive +Cyndaquil has first cost reduction unlocked, enough candies to buy the second +Totodile has first cost reduction unlocked, not enough candies to buy the second +Treecko has both cost reduction unlocked +Torchic has enough candies to do anything +Mudkip has passive unlocked +Turtwig has enough candies to purchase an egg +*/ + +/** + * Return all permutations of elements from an array + */ +function permutations(array: T[], length: number): T[][] { + if (length === 0) { + return [[]]; + } + return array.flatMap((item, index) => + permutations([...array.slice(0, index), ...array.slice(index + 1)], length - 1).map(perm => [item, ...perm]), + ); +} + +describe("UI - Pokedex", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + const mocks: MockInstance[] = []; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + while (mocks.length > 0) { + mocks.pop()?.mockRestore(); + } + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + }); + + /** + * Run the game to open the pokedex UI. + * @returns The handler for the pokedex UI. + */ + async function runToOpenPokedex(): Promise { + // Open the pokedex UI. + await game.runToTitle(); + + await game.phaseInterceptor.setOverlayMode(UiMode.POKEDEX); + + // Get the handler for the current UI. + const handler = game.scene.ui.getHandler(); + expect(handler).toBeInstanceOf(PokedexUiHandler); + + return handler as PokedexUiHandler; + } + + /** + * Compute a set of pokemon that have a specific ability in allAbilities + * @param ability - The ability to filter for + */ + function getSpeciesWithAbility(ability: Abilities): Set { + const speciesSet = new Set(); + for (const pkmn of allSpecies) { + if ( + [pkmn.ability1, pkmn.ability2, pkmn.getPassiveAbility(), pkmn.abilityHidden].includes(ability) || + pkmn.forms.some(form => + [form.ability1, form.ability2, form.abilityHidden, form.getPassiveAbility()].includes(ability), + ) + ) { + speciesSet.add(pkmn.speciesId); + } + } + return speciesSet; + } + + /** + * Compute a set of pokemon that have one of the specified type(s) + * + * Includes all forms of the pokemon + * @param types - The types to filter for + */ + function getSpeciesWithType(...types: PokemonType[]): Set { + const speciesSet = new Set(); + const tySet = new Set(types); + + // get the pokemon and its forms + outer: for (const pkmn of allSpecies) { + // @ts-expect-error We know that type2 might be null. + if (tySet.has(pkmn.type1) || tySet.has(pkmn.type2)) { + speciesSet.add(pkmn.speciesId); + continue; + } + for (const form of pkmn.forms) { + // @ts-expect-error We know that type2 might be null. + if (tySet.has(form.type1) || tySet.has(form.type2)) { + speciesSet.add(pkmn.speciesId); + continue outer; + } + } + } + return speciesSet; + } + + /** + * Create mocks for the abilities of a species. + * This is used to set the abilities of a species to a specific value. + * All abilities are optional. Not providing one will set it to NONE. + * + * This will override the ability of the pokemon species only, unless set forms is true + * + * @param species - The species to set the abilities for + * @param ability - The ability to set for the first ability + * @param ability2 - The ability to set for the second ability + * @param hidden - The ability to set for the hidden ability + * @param passive - The ability to set for the passive ability + * @param setForms - Whether to also overwrite the abilities for each of the species' forms (defaults to `true`) + */ + function createAbilityMocks( + species: Species, + { + ability = Abilities.NONE, + ability2 = Abilities.NONE, + hidden = Abilities.NONE, + passive = Abilities.NONE, + setForms = true, + }: { + ability?: Abilities; + ability2?: Abilities; + hidden?: Abilities; + passive?: Abilities; + setForms?: boolean; + }, + ) { + const pokemon = getPokemonSpecies(species); + const checks: [PokemonSpecies | PokemonForm] = [pokemon]; + if (setForms) { + checks.push(...pokemon.forms); + } + for (const p of checks) { + mocks.push(vi.spyOn(p, "ability1", "get").mockReturnValue(ability)); + mocks.push(vi.spyOn(p, "ability2", "get").mockReturnValue(ability2)); + mocks.push(vi.spyOn(p, "abilityHidden", "get").mockReturnValue(hidden)); + mocks.push(vi.spyOn(p, "getPassiveAbility").mockReturnValue(passive)); + } + } + + /*************************** + * Tests for Filters * + ***************************/ + + it("should filter to show only the pokemon with an ability when filtering by ability", async () => { + // await game.importData("test/testUtils/saves/everything.prsv"); + const pokedexHandler = await runToOpenPokedex(); + + // Get name of overgrow + const overgrow = allAbilities[Abilities.OVERGROW].name; + + // @ts-expect-error `filterText` is private + pokedexHandler.filterText.setValue(FilterTextRow.ABILITY_1, overgrow); + + // filter all species to be the pokemon that have overgrow + const overgrowSpecies = getSpeciesWithAbility(Abilities.OVERGROW); + // @ts-expect-error - `filteredPokemonData` is private + const filteredSpecies = new Set(pokedexHandler.filteredPokemonData.map(pokemon => pokemon.species.speciesId)); + + expect(filteredSpecies).toEqual(overgrowSpecies); + }); + + it("should filter to show only pokemon with ability and passive when filtering by 2 abilities", async () => { + // Setup mocks for the ability and passive combinations + const whitelist: Species[] = []; + const blacklist: Species[] = []; + + const filter_ab1 = Abilities.OVERGROW; + const filter_ab2 = Abilities.ADAPTABILITY; + const ab1_instance = allAbilities[filter_ab1]; + const ab2_instance = allAbilities[filter_ab2]; + + // Create a species with passive set and each "ability" field + const baseObj = { + ability: Abilities.BALL_FETCH, + ability2: Abilities.NONE, + hidden: Abilities.BLAZE, + passive: Abilities.TORRENT, + }; + + // Mock pokemon to have the exhaustive combination of the two selected abilities + const attrs: (keyof typeof baseObj)[] = ["ability", "ability2", "hidden", "passive"]; + for (const [idx, value] of permutations(attrs, 2).entries()) { + createAbilityMocks(Species.BULBASAUR + idx, { + ...baseObj, + [value[0]]: filter_ab1, + [value[1]]: filter_ab2, + }); + if (value.includes("passive")) { + whitelist.push(Species.BULBASAUR + idx); + } else { + blacklist.push(Species.BULBASAUR + idx); + } + } + + const pokedexHandler = await runToOpenPokedex(); + + // @ts-expect-error `filterText` is private + pokedexHandler.filterText.setValue(FilterTextRow.ABILITY_1, ab1_instance.name); + // @ts-expect-error `filterText` is private + pokedexHandler.filterText.setValue(FilterTextRow.ABILITY_2, ab2_instance.name); + + let whiteListCount = 0; + // @ts-expect-error `filteredPokemonData` is private + for (const species of pokedexHandler.filteredPokemonData) { + expect(blacklist, "entry must have one of the abilities as a passive").not.toContain(species.species.speciesId); + + const rawAbility = [species.species.ability1, species.species.ability2, species.species.abilityHidden]; + const rawPassive = species.species.getPassiveAbility(); + + const c1 = rawPassive === ab1_instance.id && rawAbility.includes(ab2_instance.id); + const c2 = c1 || (rawPassive === ab2_instance.id && rawAbility.includes(ab1_instance.id)); + + expect(c2, "each filtered entry should have the ability and passive combination").toBe(true); + if (whitelist.includes(species.species.speciesId)) { + whiteListCount++; + } + } + + expect(whiteListCount).toBe(whitelist.length); + }); + + it("should filter to show only the pokemon with a type when filtering by a single type", async () => { + const pokedexHandler = await runToOpenPokedex(); + + // @ts-expect-error - `filterBar` is private + pokedexHandler.filterBar.getFilter(DropDownColumn.TYPES).toggleOptionState(PokemonType.NORMAL + 1); + + const expectedPokemon = getSpeciesWithType(PokemonType.NORMAL); + // @ts-expect-error - `filteredPokemonData` is private + const filteredPokemon = new Set(pokedexHandler.filteredPokemonData.map(pokemon => pokemon.species.speciesId)); + + expect(filteredPokemon).toEqual(expectedPokemon); + }); + + // Todo: Pokemon with a mega that adds a type do not show up in the filter, e.g. pinsir. + it.todo("should show only the pokemon with one of the types when filtering by multiple types", async () => { + const pokedexHandler = await runToOpenPokedex(); + + // @ts-expect-error - `filterBar` is private + pokedexHandler.filterBar.getFilter(DropDownColumn.TYPES).toggleOptionState(PokemonType.NORMAL + 1); + // @ts-expect-error - `filterBar` is private + pokedexHandler.filterBar.getFilter(DropDownColumn.TYPES).toggleOptionState(PokemonType.FLYING + 1); + + const expectedPokemon = getSpeciesWithType(PokemonType.NORMAL, PokemonType.FLYING); + // @ts-expect-error - `filteredPokemonData` is private + const filteredPokemon = new Set(pokedexHandler.filteredPokemonData.map(pokemon => pokemon.species.speciesId)); + + expect(filteredPokemon).toEqual(expectedPokemon); + }); + + it("filtering for unlockable cost reduction only shows species with sufficient candies", async () => { + // load the save file + await game.importData("./test/testUtils/saves/data_pokedex_tests.prsv"); + const pokedexHandler = await runToOpenPokedex(); + + // @ts-expect-error - `filterBar` is private + const filter = pokedexHandler.filterBar.getFilter(DropDownColumn.UNLOCKS); + + // Cycling 4 times to get to the "can unlock" for cost reduction + for (let i = 0; i < 4; i++) { + // index 1 is the cost reduction + filter.toggleOptionState(1); + } + + const expectedPokemon = new Set([ + Species.CHIKORITA, + Species.CYNDAQUIL, + Species.TORCHIC, + Species.TURTWIG, + Species.EKANS, + Species.MUDKIP, + ]); + expect( + // @ts-expect-error - `filteredPokemonData` is private + pokedexHandler.filteredPokemonData.every(pokemon => + expectedPokemon.has(pokedexHandler.getStarterSpeciesId(pokemon.species.speciesId)), + ), + ).toBe(true); + }); + + it("filtering by passive unlocked only shows species that have their passive", async () => { + await game.importData("./test/testUtils/saves/data_pokedex_tests.prsv"); + const pokedexHandler = await runToOpenPokedex(); + + // @ts-expect-error - `filterBar` is private + const filter = pokedexHandler.filterBar.getFilter(DropDownColumn.UNLOCKS); + + filter.toggleOptionState(0); // cycle to Passive: Yes + + expect( + // @ts-expect-error - `filteredPokemonData` is private + pokedexHandler.filteredPokemonData.every( + pokemon => pokedexHandler.getStarterSpeciesId(pokemon.species.speciesId) === Species.MUDKIP, + ), + ).toBe(true); + }); + + it("filtering for pokemon that can unlock passive shows only species with sufficient candies", async () => { + await game.importData("./test/testUtils/saves/data_pokedex_tests.prsv"); + const pokedexHandler = await runToOpenPokedex(); + + // @ts-expect-error - `filterBar` is private + const filter = pokedexHandler.filterBar.getFilter(DropDownColumn.UNLOCKS); + + // Cycling 4 times to get to the "can unlock" for passive + const expectedPokemon = new Set([ + Species.EKANS, + Species.CHIKORITA, + Species.CYNDAQUIL, + Species.TORCHIC, + Species.TURTWIG, + ]); + + // cycling twice to get to the "can unlock" for passive + filter.toggleOptionState(0); + filter.toggleOptionState(0); + + expect( + // @ts-expect-error - `filteredPokemonData` is private + pokedexHandler.filteredPokemonData.every(pokemon => + expectedPokemon.has(pokedexHandler.getStarterSpeciesId(pokemon.species.speciesId)), + ), + ).toBe(true); + }); + + it("filtering for pokemon that have any cost reduction shows only the species that have unlocked a cost reduction", async () => { + await game.importData("./test/testUtils/saves/data_pokedex_tests.prsv"); + const pokedexHandler = await runToOpenPokedex(); + + const expectedPokemon = new Set([Species.TREECKO, Species.CYNDAQUIL, Species.TOTODILE]); + + // @ts-expect-error - `filterBar` is private + const filter = pokedexHandler.filterBar.getFilter(DropDownColumn.UNLOCKS); + // Cycle 1 time for cost reduction + filter.toggleOptionState(1); + + expect( + // @ts-expect-error - `filteredPokemonData` is private + pokedexHandler.filteredPokemonData.every(pokemon => + expectedPokemon.has(pokedexHandler.getStarterSpeciesId(pokemon.species.speciesId)), + ), + ).toBe(true); + }); + + it("filtering for pokemon that have a single cost reduction shows only the species that have unlocked a single cost reduction", async () => { + await game.importData("./test/testUtils/saves/data_pokedex_tests.prsv"); + const pokedexHandler = await runToOpenPokedex(); + + const expectedPokemon = new Set([Species.CYNDAQUIL, Species.TOTODILE]); + + // @ts-expect-error - `filterBar` is private + const filter = pokedexHandler.filterBar.getFilter(DropDownColumn.UNLOCKS); + // Cycle 2 times for one cost reduction + filter.toggleOptionState(1); + filter.toggleOptionState(1); + + expect( + // @ts-expect-error - `filteredPokemonData` is private + pokedexHandler.filteredPokemonData.every(pokemon => + expectedPokemon.has(pokedexHandler.getStarterSpeciesId(pokemon.species.speciesId)), + ), + ).toBe(true); + }); + + it("filtering for pokemon that have two cost reductions sorts only shows the species that have unlocked both cost reductions", async () => { + await game.importData("./test/testUtils/saves/data_pokedex_tests.prsv"); + const pokedexHandler = await runToOpenPokedex(); + + // @ts-expect-error - `filterBar` is private + const filter = pokedexHandler.filterBar.getFilter(DropDownColumn.UNLOCKS); + // Cycle 3 time for two cost reductions + filter.toggleOptionState(1); + filter.toggleOptionState(1); + filter.toggleOptionState(1); + + expect( + // @ts-expect-error - `filteredPokemonData` is private + pokedexHandler.filteredPokemonData.every( + pokemon => pokedexHandler.getStarterSpeciesId(pokemon.species.speciesId) === Species.TREECKO, + ), + ).toBe(true); + }); + + it("filtering by shiny status shows the caught pokemon with the selected shiny tier", async () => { + await game.importData("./test/testUtils/saves/data_pokedex_tests.prsv"); + const pokedexHandler = await runToOpenPokedex(); + // @ts-expect-error - `filterBar` is private + const filter = pokedexHandler.filterBar.getFilter(DropDownColumn.CAUGHT); + filter.toggleOptionState(3); + + // @ts-expect-error - `filteredPokemonData` is private + let filteredPokemon = pokedexHandler.filteredPokemonData.map(pokemon => pokemon.species.speciesId); + + // Red shiny + expect(filteredPokemon.length).toBe(1); + expect(filteredPokemon[0], "tier 1 shiny").toBe(Species.CATERPIE); + + // tier 2 shiny + filter.toggleOptionState(3); + filter.toggleOptionState(2); + + // @ts-expect-error - `filteredPokemonData` is private + filteredPokemon = pokedexHandler.filteredPokemonData.map(pokemon => pokemon.species.speciesId); + expect(filteredPokemon.length).toBe(1); + expect(filteredPokemon[0], "tier 2 shiny").toBe(Species.RATTATA); + + filter.toggleOptionState(2); + filter.toggleOptionState(1); + // @ts-expect-error - `filteredPokemonData` is private + filteredPokemon = pokedexHandler.filteredPokemonData.map(pokemon => pokemon.species.speciesId); + expect(filteredPokemon.length).toBe(1); + expect(filteredPokemon[0], "tier 3 shiny").toBe(Species.EKANS); + + // filter by no shiny + filter.toggleOptionState(1); + filter.toggleOptionState(4); + + // @ts-expect-error - `filteredPokemonData` is private + filteredPokemon = pokedexHandler.filteredPokemonData.map(pokemon => pokemon.species.speciesId); + expect(filteredPokemon.length).toBe(27); + expect(filteredPokemon, "not shiny").not.toContain(Species.CATERPIE); + expect(filteredPokemon, "not shiny").not.toContain(Species.RATTATA); + expect(filteredPokemon, "not shiny").not.toContain(Species.EKANS); + }); + + /**************************** + * Tests for UI Input * + ****************************/ + + // TODO: fix cursor wrapping + it.todo( + "should wrap the cursor to the top when moving to an empty entry when there are more than 81 pokemon", + async () => { + const pokedexHandler = await runToOpenPokedex(); + + // Filter by gen 2 so we can pan a specific amount. + // @ts-expect-error `filterBar` is private + pokedexHandler.filterBar.getFilter(DropDownColumn.GEN).options[2].toggleOptionState(); + pokedexHandler.updateStarters(); + // @ts-expect-error - `filteredPokemonData` is private + expect(pokedexHandler.filteredPokemonData.length, "pokemon in gen2").toBe(100); + + // Let's try to pan to the right to see what the pokemon it points to is. + + // pan to the right once and down 11 times + pokedexHandler.processInput(Button.RIGHT); + // Nab the pokemon that is selected for comparison later. + + // @ts-expect-error - `lastSpecies` is private + const selectedPokemon = pokedexHandler.lastSpecies.speciesId; + for (let i = 0; i < 11; i++) { + pokedexHandler.processInput(Button.DOWN); + } + + // @ts-expect-error `lastSpecies` is private + expect(selectedPokemon).toEqual(pokedexHandler.lastSpecies.speciesId); + }, + ); +}); From b49c994d2d6eb09cbce708b29462c6e46848e695 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Wed, 23 Apr 2025 15:48:04 -0400 Subject: [PATCH 052/262] [Balance][Refactor] Move fixed boss waves enum to file, adjust GL templates (#5689) * Move fixed boss waves enum to file, adjust GL templates * Move post return to default case * Address comment --------- Co-authored-by: Wlowscha <54003515+Wlowscha@users.noreply.github.com> --- src/battle.ts | 24 +------- src/data/challenge.ts | 3 +- src/data/trainers/TrainerPartyTemplate.ts | 73 +++++++++++++++++------ src/enums/fixed-boss-waves.ts | 22 +++++++ src/phases/victory-phase.ts | 2 +- 5 files changed, 80 insertions(+), 44 deletions(-) create mode 100644 src/enums/fixed-boss-waves.ts diff --git a/src/battle.ts b/src/battle.ts index 6630d53bd67..07e520d6bc0 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -31,29 +31,7 @@ import type { CustomModifierSettings } from "#app/modifier/modifier-type"; import { ModifierTier } from "#app/modifier/modifier-tier"; import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { BattleType } from "#enums/battle-type"; - -export enum ClassicFixedBossWaves { - TOWN_YOUNGSTER = 5, - RIVAL_1 = 8, - RIVAL_2 = 25, - EVIL_GRUNT_1 = 35, - RIVAL_3 = 55, - EVIL_GRUNT_2 = 62, - EVIL_GRUNT_3 = 64, - EVIL_ADMIN_1 = 66, - RIVAL_4 = 95, - EVIL_GRUNT_4 = 112, - EVIL_ADMIN_2 = 114, - EVIL_BOSS_1 = 115, - RIVAL_5 = 145, - EVIL_BOSS_2 = 165, - ELITE_FOUR_1 = 182, - ELITE_FOUR_2 = 184, - ELITE_FOUR_3 = 186, - ELITE_FOUR_4 = 188, - CHAMPION = 190, - RIVAL_6 = 195, -} +import { ClassicFixedBossWaves } from "#enums/fixed-boss-waves"; export enum BattlerIndex { ATTACKER = -1, diff --git a/src/data/challenge.ts b/src/data/challenge.ts index f786152ca3d..7388f397c7e 100644 --- a/src/data/challenge.ts +++ b/src/data/challenge.ts @@ -8,7 +8,8 @@ import { speciesStarterCosts } from "#app/data/balance/starters"; import type Pokemon from "#app/field/pokemon"; import { PokemonMove } from "#app/field/pokemon"; import type { FixedBattleConfig } from "#app/battle"; -import { ClassicFixedBossWaves, getRandomTrainerFunc } from "#app/battle"; +import { getRandomTrainerFunc } from "#app/battle"; +import { ClassicFixedBossWaves } from "#enums/fixed-boss-waves"; import { BattleType } from "#enums/battle-type"; import Trainer, { TrainerVariant } from "#app/field/trainer"; import { PokemonType } from "#enums/pokemon-type"; diff --git a/src/data/trainers/TrainerPartyTemplate.ts b/src/data/trainers/TrainerPartyTemplate.ts index 5d02ffdc6af..e4c8ddf4c58 100644 --- a/src/data/trainers/TrainerPartyTemplate.ts +++ b/src/data/trainers/TrainerPartyTemplate.ts @@ -1,6 +1,8 @@ import { startingWave } from "#app/starting-wave"; import { globalScene } from "#app/global-scene"; import { PartyMemberStrength } from "#enums/party-member-strength"; +import { GameModes } from "#app/game-mode"; +import { ClassicFixedBossWaves } from "#enums/fixed-boss-waves"; export class TrainerPartyTemplate { public size: number; @@ -165,6 +167,11 @@ export const trainerPartyTemplates = { new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), ), GYM_LEADER_5: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(4, PartyMemberStrength.AVERAGE), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), + ), + GYM_LEADER_6: new TrainerPartyCompoundTemplate( new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(2, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), @@ -222,19 +229,18 @@ export const trainerPartyTemplates = { */ export function getEvilGruntPartyTemplate(): TrainerPartyTemplate { const waveIndex = globalScene.currentBattle?.waveIndex; - if (waveIndex < 40) { - return trainerPartyTemplates.TWO_AVG; + switch (waveIndex) { + case ClassicFixedBossWaves.EVIL_GRUNT_1: + return trainerPartyTemplates.TWO_AVG; + case ClassicFixedBossWaves.EVIL_GRUNT_2: + return trainerPartyTemplates.THREE_AVG; + case ClassicFixedBossWaves.EVIL_GRUNT_3: + return trainerPartyTemplates.TWO_AVG_ONE_STRONG; + case ClassicFixedBossWaves.EVIL_ADMIN_1: + return trainerPartyTemplates.GYM_LEADER_4; // 3avg 1 strong 1 stronger + default: + return trainerPartyTemplates.GYM_LEADER_6; // 3 avg 2 strong 1 stronger } - if (waveIndex < 63) { - return trainerPartyTemplates.THREE_AVG; - } - if (waveIndex < 65) { - return trainerPartyTemplates.TWO_AVG_ONE_STRONG; - } - if (waveIndex < 112) { - return trainerPartyTemplates.GYM_LEADER_4; // 3avg 1 strong 1 stronger - } - return trainerPartyTemplates.GYM_LEADER_5; // 3 avg 2 strong 1 stronger } export function getWavePartyTemplate(...templates: TrainerPartyTemplate[]) { @@ -245,11 +251,40 @@ export function getWavePartyTemplate(...templates: TrainerPartyTemplate[]) { } export function getGymLeaderPartyTemplate() { - return getWavePartyTemplate( - trainerPartyTemplates.GYM_LEADER_1, - trainerPartyTemplates.GYM_LEADER_2, - trainerPartyTemplates.GYM_LEADER_3, - trainerPartyTemplates.GYM_LEADER_4, - trainerPartyTemplates.GYM_LEADER_5, - ); + const { currentBattle, gameMode } = globalScene; + switch (gameMode.modeId) { + case GameModes.DAILY: + if (currentBattle?.waveIndex <= 20) { + return trainerPartyTemplates.GYM_LEADER_2 + } + return trainerPartyTemplates.GYM_LEADER_3; + case GameModes.CHALLENGE: // In the future, there may be a ChallengeType to call here. For now, use classic's. + case GameModes.CLASSIC: + if (currentBattle?.waveIndex <= 20) { + return trainerPartyTemplates.GYM_LEADER_1; // 1 avg 1 strong + } + else if (currentBattle?.waveIndex <= 30) { + return trainerPartyTemplates.GYM_LEADER_2; // 1 avg 1 strong 1 stronger + } + else if (currentBattle?.waveIndex <= 60) { // 50 and 60 + return trainerPartyTemplates.GYM_LEADER_3; // 2 avg 1 strong 1 stronger + } + else if (currentBattle?.waveIndex <= 80) { + return trainerPartyTemplates.GYM_LEADER_4; // 3 avg 1 strong 1 stronger + } + else if (currentBattle?.waveIndex <= 90) { + return trainerPartyTemplates.GYM_LEADER_5; // 4 avg 1 strong 1 stronger + } + // 110+ + return trainerPartyTemplates.GYM_LEADER_6; // 3 avg 2 strong 1 stronger + default: + return getWavePartyTemplate( + trainerPartyTemplates.GYM_LEADER_1, + trainerPartyTemplates.GYM_LEADER_2, + trainerPartyTemplates.GYM_LEADER_3, + trainerPartyTemplates.GYM_LEADER_4, + trainerPartyTemplates.GYM_LEADER_5, + trainerPartyTemplates.GYM_LEADER_6, + ); + } } diff --git a/src/enums/fixed-boss-waves.ts b/src/enums/fixed-boss-waves.ts new file mode 100644 index 00000000000..623d9035472 --- /dev/null +++ b/src/enums/fixed-boss-waves.ts @@ -0,0 +1,22 @@ +export enum ClassicFixedBossWaves { + TOWN_YOUNGSTER = 5, + RIVAL_1 = 8, + RIVAL_2 = 25, + EVIL_GRUNT_1 = 35, + RIVAL_3 = 55, + EVIL_GRUNT_2 = 62, + EVIL_GRUNT_3 = 64, + EVIL_ADMIN_1 = 66, + RIVAL_4 = 95, + EVIL_GRUNT_4 = 112, + EVIL_ADMIN_2 = 114, + EVIL_BOSS_1 = 115, + RIVAL_5 = 145, + EVIL_BOSS_2 = 165, + ELITE_FOUR_1 = 182, + ELITE_FOUR_2 = 184, + ELITE_FOUR_3 = 186, + ELITE_FOUR_4 = 188, + CHAMPION = 190, + RIVAL_6 = 195 +} diff --git a/src/phases/victory-phase.ts b/src/phases/victory-phase.ts index 6e1837a4749..1204877fec2 100644 --- a/src/phases/victory-phase.ts +++ b/src/phases/victory-phase.ts @@ -1,5 +1,5 @@ import type { BattlerIndex } from "#app/battle"; -import { ClassicFixedBossWaves } from "#app/battle"; +import { ClassicFixedBossWaves } from "#enums/fixed-boss-waves"; import { BattleType } from "#enums/battle-type"; import type { CustomModifierSettings } from "#app/modifier/modifier-type"; import { modifierTypes } from "#app/modifier/modifier-type"; From c7265543bdd7d5ee53af596d40ca05c36d48a931 Mon Sep 17 00:00:00 2001 From: Blitzy <118096277+Blitz425@users.noreply.github.com> Date: Wed, 23 Apr 2025 16:15:45 -0500 Subject: [PATCH 053/262] [Balance] Update Transistor to Gen IX version (#5700) Update ability.ts --- src/data/abilities/ability.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index d8b648ebe82..b018a87a08d 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -7227,7 +7227,7 @@ export function initAbilities() { new Ability(Abilities.CURIOUS_MEDICINE, 8) .attr(PostSummonClearAllyStatStagesAbAttr), new Ability(Abilities.TRANSISTOR, 8) - .attr(MoveTypePowerBoostAbAttr, PokemonType.ELECTRIC), + .attr(MoveTypePowerBoostAbAttr, PokemonType.ELECTRIC, 1.3), new Ability(Abilities.DRAGONS_MAW, 8) .attr(MoveTypePowerBoostAbAttr, PokemonType.DRAGON), new Ability(Abilities.CHILLING_NEIGH, 8) @@ -7412,4 +7412,4 @@ export function initAbilities() { .unreplaceable() // TODO is this true? .attr(ConfusionOnStatusEffectAbAttr, StatusEffect.POISON, StatusEffect.TOXIC) ); -} \ No newline at end of file +} From 5de567a3db84d791641c39ac0bbbfbb7a19320b6 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Wed, 23 Apr 2025 17:18:03 -0400 Subject: [PATCH 054/262] [Balance] Wave 90 gym leader has 5 mons (#5699) 5 mons on wave 90 --- src/data/trainers/TrainerPartyTemplate.ts | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/src/data/trainers/TrainerPartyTemplate.ts b/src/data/trainers/TrainerPartyTemplate.ts index e4c8ddf4c58..1952bcc179e 100644 --- a/src/data/trainers/TrainerPartyTemplate.ts +++ b/src/data/trainers/TrainerPartyTemplate.ts @@ -167,11 +167,6 @@ export const trainerPartyTemplates = { new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), ), GYM_LEADER_5: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(4, PartyMemberStrength.AVERAGE), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), - ), - GYM_LEADER_6: new TrainerPartyCompoundTemplate( new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(2, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), @@ -239,7 +234,7 @@ export function getEvilGruntPartyTemplate(): TrainerPartyTemplate { case ClassicFixedBossWaves.EVIL_ADMIN_1: return trainerPartyTemplates.GYM_LEADER_4; // 3avg 1 strong 1 stronger default: - return trainerPartyTemplates.GYM_LEADER_6; // 3 avg 2 strong 1 stronger + return trainerPartyTemplates.GYM_LEADER_5; // 3 avg 2 strong 1 stronger } } @@ -269,14 +264,11 @@ export function getGymLeaderPartyTemplate() { else if (currentBattle?.waveIndex <= 60) { // 50 and 60 return trainerPartyTemplates.GYM_LEADER_3; // 2 avg 1 strong 1 stronger } - else if (currentBattle?.waveIndex <= 80) { + else if (currentBattle?.waveIndex <= 90) { // 80 and 90 return trainerPartyTemplates.GYM_LEADER_4; // 3 avg 1 strong 1 stronger } - else if (currentBattle?.waveIndex <= 90) { - return trainerPartyTemplates.GYM_LEADER_5; // 4 avg 1 strong 1 stronger - } // 110+ - return trainerPartyTemplates.GYM_LEADER_6; // 3 avg 2 strong 1 stronger + return trainerPartyTemplates.GYM_LEADER_5; // 3 avg 2 strong 1 stronger default: return getWavePartyTemplate( trainerPartyTemplates.GYM_LEADER_1, @@ -284,7 +276,6 @@ export function getGymLeaderPartyTemplate() { trainerPartyTemplates.GYM_LEADER_3, trainerPartyTemplates.GYM_LEADER_4, trainerPartyTemplates.GYM_LEADER_5, - trainerPartyTemplates.GYM_LEADER_6, ); } } From 75400a39ed16e2f86e9c82b930827a3590cf6b39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?In=C3=AAs=20Sim=C3=B5es?= Date: Wed, 23 Apr 2025 22:29:44 +0100 Subject: [PATCH 055/262] [Bug] [UI/UX] Status moves now play a No Effect Message Against Immune Type Pokemon (#5533) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix #5085 Moves dont play a No Effect Message Against Immune Type When using non-volatile status move like: Will-O-Wisp, Thunder Wave, Toxic, or Poison Gas against a Pokémon whose type is immune to that Status condition, no "It doesn't affect" message plays. My proposed fixes: In move.ts: Removed a redudant if statement in StatusEffectAttr class In pokemon.ts: Renamed the "messageIsImmune" function to "queueImmuneMessage" --- src/data/moves/move.ts | 9 +-------- src/field/pokemon.ts | 45 ++++++++++++++++++++++++++++++++---------- 2 files changed, 36 insertions(+), 18 deletions(-) diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 5d57bb6dc49..903b2726676 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -2459,14 +2459,7 @@ export class StatusEffectAttr extends MoveEffectAttr { const statusCheck = moveChance < 0 || moveChance === 100 || user.randSeedInt(100) < moveChance; if (statusCheck) { const pokemon = this.selfTarget ? user : target; - if (pokemon.status && !this.overrideStatus) { - return false; - } - - if (user !== target && target.isSafeguarded(user)) { - if (move.category === MoveCategory.STATUS) { - globalScene.queueMessage(i18next.t("moveTriggers:safeguard", { targetName: getPokemonNameWithAffix(target) })); - } + if (user !== target && move.category === MoveCategory.STATUS && !target.canSetStatus(this.effect, false, false, user, true)) { return false; } if (((!pokemon.status || this.overrideStatus) || (pokemon.status.effect === this.effect && moveChance < 0)) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index d565a590792..2de8cc150c9 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -248,6 +248,7 @@ import { PLAYER_PARTY_MAX_SIZE } from "#app/constants"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import { SwitchType } from "#enums/switch-type"; import { SpeciesFormKey } from "#enums/species-form-key"; +import {getStatusEffectOverlapText } from "#app/data/status-effect"; import { BASE_HIDDEN_ABILITY_CHANCE, BASE_SHINY_CHANCE, @@ -5364,6 +5365,18 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ); } + queueImmuneMessage(quiet: boolean, effect?: StatusEffect): void { + if (!effect || quiet) { + return; + } + const message = effect && this.status?.effect === effect + ? getStatusEffectOverlapText(effect ?? StatusEffect.NONE, getPokemonNameWithAffix(this)) + : i18next.t("abilityTriggers:moveImmunity", { + pokemonNameWithAffix: getPokemonNameWithAffix(this), + }); + globalScene.queueMessage(message); + } + /** * Checks if a status effect can be applied to the Pokemon. * @@ -5382,6 +5395,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ): boolean { if (effect !== StatusEffect.FAINT) { if (overrideStatus ? this.status?.effect === effect : this.status) { + this.queueImmuneMessage(quiet, effect); return false; } if ( @@ -5389,18 +5403,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { !ignoreField && globalScene.arena.terrain?.terrainType === TerrainType.MISTY ) { + this.queueImmuneMessage(quiet, effect); return false; } } - if ( - sourcePokemon && - sourcePokemon !== this && - this.isSafeguarded(sourcePokemon) - ) { - return false; - } - const types = this.getTypes(true, true); switch (effect) { @@ -5429,17 +5436,19 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } - return true; + return true; }); if (this.isOfType(PokemonType.POISON) || this.isOfType(PokemonType.STEEL)) { if (poisonImmunity.includes(true)) { + this.queueImmuneMessage(quiet, effect); return false; } } break; case StatusEffect.PARALYSIS: if (this.isOfType(PokemonType.ELECTRIC)) { + this.queueImmuneMessage(quiet, effect); return false; } break; @@ -5448,6 +5457,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.isGrounded() && globalScene.arena.terrain?.terrainType === TerrainType.ELECTRIC ) { + this.queueImmuneMessage(quiet, effect); return false; } break; @@ -5460,11 +5470,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { globalScene.arena.weather.weatherType, )) ) { + this.queueImmuneMessage(quiet, effect); return false; } break; case StatusEffect.BURN: if (this.isOfType(PokemonType.FIRE)) { + this.queueImmuneMessage(quiet, effect); return false; } break; @@ -5499,6 +5511,19 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return false; } + if ( + sourcePokemon && + sourcePokemon !== this && + this.isSafeguarded(sourcePokemon) + ) { + if(!quiet){ + globalScene.queueMessage( + i18next.t("moveTriggers:safeguard", { targetName: getPokemonNameWithAffix(this) + })); + } + return false; + } + return true; } @@ -5510,7 +5535,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { sourceText: string | null = null, overrideStatus?: boolean ): boolean { - if (!this.canSetStatus(effect, asPhase, overrideStatus, sourcePokemon)) { + if (!this.canSetStatus(effect, false, overrideStatus, sourcePokemon)) { return false; } if (this.isFainted() && effect !== StatusEffect.FAINT) { From 6ea5b4fa9da940e31564097f849eee9eae2f5d64 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Wed, 23 Apr 2025 17:22:25 -0700 Subject: [PATCH 056/262] [Bug] Fix doubles trainers not initializing properly (#5702) * [Bug] Fix doubles trainers not initializing properly * Add missing override in Whirlwind test --- src/battle-scene.ts | 4 ++-- test/moves/whirlwind.test.ts | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 2ff5d718ede..8fe6c85263d 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1394,9 +1394,9 @@ export default class BattleScene extends SceneBase { if (double === undefined && newWaveIndex > 1) { if (newBattleType === BattleType.WILD && !this.gameMode.isWaveFinal(newWaveIndex)) { newDouble = !randSeedInt(this.getDoubleBattleChance(newWaveIndex, playerField)); + } else if (newBattleType === BattleType.TRAINER) { + newDouble = newTrainer?.variant === TrainerVariant.DOUBLE; } - } else if (double === undefined && newBattleType === BattleType.TRAINER) { - newDouble = newTrainer?.variant === TrainerVariant.DOUBLE; } else if (!battleConfig) { newDouble = !!double; } diff --git a/test/moves/whirlwind.test.ts b/test/moves/whirlwind.test.ts index b0ca1783f2f..6b5133ec7b1 100644 --- a/test/moves/whirlwind.test.ts +++ b/test/moves/whirlwind.test.ts @@ -163,6 +163,7 @@ describe("Moves - Whirlwind", () => { it("should not pull in the other trainer's pokemon in a partner trainer battle", async () => { game.override + .startingWave(2) .battleType(BattleType.TRAINER) .randomTrainer({ trainerType: TrainerType.BREEDER, From 793d89fa2491ee4c734983b2b91b445c35777350 Mon Sep 17 00:00:00 2001 From: damocleas Date: Thu, 24 Apr 2025 16:04:17 -0400 Subject: [PATCH 057/262] [i18n] Update locales submodule Update locales submodule --- public/locales | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/locales b/public/locales index e98f0eb9c20..18c1963ef30 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit e98f0eb9c2022bc78b53f0444424c636498e725a +Subproject commit 18c1963ef309612a5a7fef76f9879709a7202189 From 6dc2a7fddc523b73bdb1af6c38be2ded47f1f689 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Thu, 24 Apr 2025 15:30:00 -0500 Subject: [PATCH 058/262] [Dev] Update phaser to 3.88 and fix graphical bug (#5704) --- package-lock.json | 18 +++++++++--------- package.json | 4 ++-- src/main.ts | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 622eac908de..07fed79969e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,8 +18,8 @@ "i18next-korean-postposition-processor": "^1.0.0", "json-stable-stringify": "^1.2.0", "jszip": "^3.10.1", - "phaser": "^3.70.0", - "phaser3-rex-plugins": "^1.80.14" + "phaser": "^3.88.2", + "phaser3-rex-plugins": "^1.80.15" }, "devDependencies": { "@biomejs/biome": "1.9.4", @@ -48,7 +48,7 @@ "vitest-canvas-mock": "^0.3.3" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" } }, "node_modules/@ampproject/remapping": { @@ -6227,18 +6227,18 @@ } }, "node_modules/phaser": { - "version": "3.80.1", - "resolved": "https://registry.npmjs.org/phaser/-/phaser-3.80.1.tgz", - "integrity": "sha512-VQGAWoDOkEpAWYkI+PUADv5Ql+SM0xpLuAMBJHz9tBcOLqjJ2wd8bUhxJgOqclQlLTg97NmMd9MhS75w16x1Cw==", + "version": "3.88.2", + "resolved": "https://registry.npmjs.org/phaser/-/phaser-3.88.2.tgz", + "integrity": "sha512-UBgd2sAFuRJbF2xKaQ5jpMWB8oETncChLnymLGHcrnT53vaqiGrQWbUKUDBawKLm24sghjKo4Bf+/xfv8espZQ==", "license": "MIT", "dependencies": { "eventemitter3": "^5.0.1" } }, "node_modules/phaser3-rex-plugins": { - "version": "1.80.14", - "resolved": "https://registry.npmjs.org/phaser3-rex-plugins/-/phaser3-rex-plugins-1.80.14.tgz", - "integrity": "sha512-eHi3VgryO9umNu6D1yQU5IS6tH4TyC2Y6RgJ495nNp37X2fdYnmYpBfgFg+YaumvtaoOvCkUVyi/YqWNPf2X2A==", + "version": "1.80.15", + "resolved": "https://registry.npmjs.org/phaser3-rex-plugins/-/phaser3-rex-plugins-1.80.15.tgz", + "integrity": "sha512-Ur973N1W5st6XEYBcJko8eTcEbdDHMM+m7VqvT3j/EJeJwYyJ3bVb33JJDsFgefk3A2iAz2itP/UY7CzxJOJVA==", "license": "MIT", "dependencies": { "dagre": "^0.8.5", diff --git a/package.json b/package.json index ffe4c06bea0..4758e6c5182 100644 --- a/package.json +++ b/package.json @@ -63,8 +63,8 @@ "i18next-korean-postposition-processor": "^1.0.0", "json-stable-stringify": "^1.2.0", "jszip": "^3.10.1", - "phaser": "^3.70.0", - "phaser3-rex-plugins": "^1.80.14" + "phaser": "^3.88.2", + "phaser3-rex-plugins": "^1.80.15" }, "engines": { "node": ">=22.0.0" diff --git a/src/main.ts b/src/main.ts index 3d3965cad08..7db663d14c7 100644 --- a/src/main.ts +++ b/src/main.ts @@ -93,7 +93,7 @@ const startGame = async (manifest?: any) => { dom: { createContainer: true, }, - pixelArt: true, + antialias: false, pipeline: [InvertPostFX] as unknown as Phaser.Types.Core.PipelineConfig, scene: [LoadingScene, BattleScene], version: version, From 30e74eaaa8e6faa64e85023205849aae9a9b42dd Mon Sep 17 00:00:00 2001 From: zaccie Date: Sat, 26 Apr 2025 08:33:59 +1200 Subject: [PATCH 059/262] [Bug] Fix boss level location (#5688) --- src/ui/battle-info.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/battle-info.ts b/src/ui/battle-info.ts index 4f9e59c8c89..99a91a9330e 100644 --- a/src/ui/battle-info.ts +++ b/src/ui/battle-info.ts @@ -557,11 +557,11 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.ownedIcon, this.championRibbon, this.statusIndicator, - this.levelContainer, this.statValuesContainer, ].map(e => (e.x += 48 * (boss ? -1 : 1))); this.hpBar.x += 38 * (boss ? -1 : 1); this.hpBar.y += 2 * (this.boss ? -1 : 1); + this.levelContainer.x += 2 * (boss ? -1 : 1); this.hpBar.setTexture(`overlay_hp${boss ? "_boss" : ""}`); this.box.setTexture(this.getTextureName()); this.statsBox.setTexture(`${this.getTextureName()}_stats`); From 38d75897bb000343d9285f342507fb24cbbabac3 Mon Sep 17 00:00:00 2001 From: Xavion3 Date: Sat, 26 Apr 2025 11:28:52 +1000 Subject: [PATCH 060/262] [Balance] Remove Dynamax Cannon being a discouraged move for AI (#5708) Remove dynamax cannon from being discouraged on Eternatus Phase 2 --- src/data/moves/move.ts | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 903b2726676..bc047762fb6 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -7665,20 +7665,6 @@ export class AverageStatsAttr extends MoveEffectAttr { } } -export class DiscourageFrequentUseAttr extends MoveAttr { - getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { - const lastMoves = user.getLastXMoves(4); - console.log(lastMoves); - for (let m = 0; m < lastMoves.length; m++) { - if (lastMoves[m].move === move.id) { - return (4 - (m + 1)) * -10; - } - } - - return 0; - } -} - export class MoneyAttr extends MoveEffectAttr { constructor() { super(true, {firstHitOnly: true }); @@ -10517,8 +10503,7 @@ export function initMoves() { } else { return 1; } - }) - .attr(DiscourageFrequentUseAttr), + }), new AttackMove(Moves.SNIPE_SHOT, PokemonType.WATER, MoveCategory.SPECIAL, 80, 100, 15, -1, 0, 8) .attr(HighCritAttr) From 42f291eab3d35475a25c9b4eb32e019eef57e69f Mon Sep 17 00:00:00 2001 From: AndrewErting <55897803+AndrewErting@users.noreply.github.com> Date: Fri, 25 Apr 2025 18:34:57 -0700 Subject: [PATCH 061/262] [Bug] [UI/UX] Make `,` `.` `/` and `\` Bindable Keys (#5707) Added , . / and \ to the key atlas, json mapping, and cfg_keyboard_qwerty.ts --- public/images/inputs/keyboard.json | 30 +++++++++++++++++++- public/images/inputs/keyboard.png | Bin 1282 -> 1641 bytes src/configs/inputs/cfg_keyboard_qwerty.ts | 32 +++++++++++++++++----- 3 files changed, 54 insertions(+), 8 deletions(-) diff --git a/public/images/inputs/keyboard.json b/public/images/inputs/keyboard.json index c9b3c79fbfb..1e8e415b72f 100644 --- a/public/images/inputs/keyboard.json +++ b/public/images/inputs/keyboard.json @@ -516,8 +516,36 @@ "trimmed": true, "spriteSourceSize": { "x": 0, "y": 0, "w": 28, "h": 11 }, "sourceSize": { "w": 28, "h": 11 } + }, + "BACK_SLASH.png": { + "frame": { "x": 147, "y": 66, "w": 12, "h": 11 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 12, "h": 11 }, + "sourceSize": { "w": 12, "h": 11 } + }, + "FORWARD_SLASH.png": { + "frame": { "x": 144, "y": 55, "w": 12, "h": 11 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 12, "h": 11 }, + "sourceSize": { "w": 12, "h": 11 } + }, + "COMMA.png": { + "frame": { "x": 144, "y": 44, "w": 12, "h": 11 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 12, "h": 11 }, + "sourceSize": { "w": 12, "h": 11 } + }, + "PERIOD.png": { + "frame": { "x": 143, "y": 22, "w": 11, "h": 11 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 11, "h": 11 }, + "sourceSize": { "w": 11, "h": 11 } } - }, + }, "meta": { "app": "https://www.aseprite.org/", "version": "1.3.7-dev", diff --git a/public/images/inputs/keyboard.png b/public/images/inputs/keyboard.png index e4d849be0fb26b2ba1a8e790abee68e9bbedadbe..0c33e5790069e7caad424933bdbf831f3d673246 100644 GIT binary patch literal 1641 zcmV-v2A27WP)002!01^@s6Ar)_N000IsNkl<949&yl1|Iy5~c>70AdQK`D_fbdLne1hU?bpvg+sl7HXV2x%;fy~sHuUrE?Wdp4zkm8-ZCl5-Tr={` z$mP!Aj6WkbT!6Q#-JHLD|M7oA|L(nh|NAY^DBq(W+b1Sh=5Hj&{aAXhG4qAad(V!! z7D&#$*l+=Uc>ia2fR7d4Dw4fUK2GSCYcC&qQF@ac$%Xve$~($2x~Y178O2BEy_HWf zKdrgB#SRx>uj5PsK2Abw(7hG4l@nP3kzB~?-pY&QczkUX8z~ZWl^U&pk@@M3QC5Je z74Xq!`&@wDb&(bD{`I|F>?$-`0Y~G>u7JJx?5d6QJ^Iej>Niz@n-g;9FrU+U1$dv2 zecN^9ihR~Vav;fy~cHeG--+WnxP zA(uOcGrl`ET!5RyZ8>(gTL+&dmpg|uzB@KmfYqw08%0A_#XKv=Q^iumSs_LU!#Pl# z8uP3iPZdiMXN4FvhRdS3)-F4OsP;BrTZ395UIzKKwndcauonZ_!eZw}g5g>l(ah#B zgLy`KNqf{F8jnF}>^QS{F^VapXi$Y0dt5t2K_Uf+tbiHh7R73rc)f8dkl&~fGiZ!0 z!0fd{5TAVo>Q^iumSs?~ZL0l+Kjd@m%r;4SBvqB8I03A3+ zjd@m%r;4SBvqB7-f)qBYb|{8ZV3#xb&-T5t5416z#V%*`pY3~PpCO)OFj7Pn#-by1 z8-&e2Qk*db$f)6>sLko)=-X(%B$^OZwS{1)(a!y-FOmGc+@t+O2AiRRtlmbm%SV9$ zd-JzffZe@8Mis|ms3`yJ$qXZ^G~_~|niMo|7PXztM^=F73K+#U2!29P9h*Pu8^u)_ zWarG|@)?mQi7F1kM=ZAK54PK9lb@Sp8_WuGA( z$zqqY`p@>gvQM`Fv)JXV{irH$ev_Kdp6mn4|Gfly0nGpHb^M;w$Xa1*pJZt6-?n z9j>-_UvO7{BK>d8k7WhS;4cP4x$zM45X;sDci1Bjjhq=@(VtKOs!|7YCx1zD? zI3zxzzGD=2k@%VMD*7M#7JNmdRQ4YGZ~#P4rX~o26`X3oD+aG4Uy^ZRYiqJXU2x_F%akEiW z?}9K&HAEQ0^q+~(_Qyp^TB<*Ud^oQ!h3XV2%3Xj_X&`$+9Ox?Zpv=q@P@^bKG2V0m zI#E<>l1C^FJ?|{qfA%~zmpy~VSk>YTv`34RvM36f;E{3)QL05ySLVT#>i#ef%0&B* z7GM@NMo=9r&n&c5_J^XnLQ7?TD5@*8RQ89Wy23}*4o7u`j>`Tp)m)*YvR@9xIaO6| z)aO>Iu_$iFe6FUNOQATHBt+5ISygJIo&MP>wJ2Gdf#M+1(vd1MS3x;hZR8L{=lskl zK(;@<`Jqr8gI*XE7e!?*v^E1JUIlH^Bt)UAV(eLT6j716Rc-7Ubnf|dqD{5Ru25Xr z7m6$ULUD!S%DzxswL)=)jzsp)WQ)#$1j`jV(w&EPcH6zZzKk7&9!VZ%xq1Pzs41%A z$~@4K!HC(ok(+>dn5VJ;N7qiOiet_?8y)?nP^~d&Dr?VRtk%5j6-wkxHdTL_m??$a zY!rkPRK`A|LSs?lS!^Q;K_+GtyB3NQpNDpK+sB(QYX@PuLPxsu(4Ns&ZTAYx6*|(L nhxUxNYP(lhuJBN`BeC2+T!Qh!VedA{00000NkvXXu0mjfDQqXi literal 1282 zcmV+d1^xPoP)Px#7*I@9MF0Q*4htw67ceI!J|iGPGB8FzJ7v<|<$92jQ2+n{2y{|TQvm<}|NsC0 z|JBM=G5`Psgh@m}RA_4wZ(|CNP>|1;=s10KEPT1 zbW-WL2M>99*K|5^IldqDK4SgsdY%aJpAv0>%n#+U>izUA(&3bneUz0=S^K`Sr`})* z@@;X5FS$fHus<}JNSp;%BhRTDxh#8IyOH`!5x2EH9wEGrc3Ua9tt4)Xx57DCMB2(q zgoVQQ*0v{gk8ewd#CHV;cn5AU-&=5wDl5I*AE|Aa-{3KgJxgtw+?;?3t&!y3keddm!JV2|l3}>ZBUZ)e-sDADd|L`T zk~c~tCXG$&WdWpmS^DW1N$R$;L`VmY*2)bgds`|E6+s-2SUq7`6fA%V)UNedp(b`J zVo5~;ij+{xI{d|jkH>^T%}PeO6t*Vs!^dO7pk^hbTnbxRZuj??FsNC{D3`+4XPvrq-@oObxpPh{3s@m07X$?1Sz)~4CfI&w=9 z@fvQO3^>y#6w(n=bCY1x-rsv!S(TN!MI$KGWW!Iu{S=}aI>U~CTap90gQ6y2T)L7X z3PVA}akwlokysAYxWy6=G=23bL8{m%53y}Ib7CfEpGGQz{UEME#NbOi)ZXbOgRIP6{9ay= z<%|%rwO`sapc@80(i%0CwgU_)5K97OqK6oU2o`=dH zcWL57FGRC@2eZvMkGEU>#>9Y;do+EenZqUV^ebkaQj9A7KMv>OW!(q(1owc#wbx zb(>HJklai|P}=L07n9(_ImIR6)Xf=MKT zQZ(Hle8Mv?CLn01gq=MA(TPp4mponM2y%?WC$a@_0uBP8qI1HsayDfh8Fr#Un}1WH zffK@N4rmA;IiUbd1eAPeAgtQUJ3BJ~TFd!^&mH>@K6ln*@R=}IX*~g-`{vQG!15*^ z{67HX>(UnRp>Y$BL$O?!g$Z}+R+gD?#I)0Ma)!^s@K-{ZOjgZ8ERBA&EQCgmfg@O@ zRZ%y5f_GY$0ZSd8ya|V58(5Nh0jb}XmkVNP^k;D3Qk1Qxnk?WmYU0r-ma={vAotDv sb)oePeCABBo`KJt3DzgV=XLPsA7BZsSvU_`Q~&?~07*qoM6N<$f_(8;_W%F@ diff --git a/src/configs/inputs/cfg_keyboard_qwerty.ts b/src/configs/inputs/cfg_keyboard_qwerty.ts index 2ad04ab418d..4f0353971e0 100644 --- a/src/configs/inputs/cfg_keyboard_qwerty.ts +++ b/src/configs/inputs/cfg_keyboard_qwerty.ts @@ -31,6 +31,7 @@ const cfg_keyboard_qwerty = { KEY_X: Phaser.Input.Keyboard.KeyCodes.X, KEY_Y: Phaser.Input.Keyboard.KeyCodes.Y, KEY_Z: Phaser.Input.Keyboard.KeyCodes.Z, + KEY_0: Phaser.Input.Keyboard.KeyCodes.ZERO, KEY_1: Phaser.Input.Keyboard.KeyCodes.ONE, KEY_2: Phaser.Input.Keyboard.KeyCodes.TWO, @@ -41,11 +42,7 @@ const cfg_keyboard_qwerty = { KEY_7: Phaser.Input.Keyboard.KeyCodes.SEVEN, KEY_8: Phaser.Input.Keyboard.KeyCodes.EIGHT, KEY_9: Phaser.Input.Keyboard.KeyCodes.NINE, - KEY_CTRL: Phaser.Input.Keyboard.KeyCodes.CTRL, - KEY_DEL: Phaser.Input.Keyboard.KeyCodes.DELETE, - KEY_END: Phaser.Input.Keyboard.KeyCodes.END, - KEY_ENTER: Phaser.Input.Keyboard.KeyCodes.ENTER, - KEY_ESC: Phaser.Input.Keyboard.KeyCodes.ESC, + KEY_F1: Phaser.Input.Keyboard.KeyCodes.F1, KEY_F2: Phaser.Input.Keyboard.KeyCodes.F2, KEY_F3: Phaser.Input.Keyboard.KeyCodes.F3, @@ -58,24 +55,41 @@ const cfg_keyboard_qwerty = { KEY_F10: Phaser.Input.Keyboard.KeyCodes.F10, KEY_F11: Phaser.Input.Keyboard.KeyCodes.F11, KEY_F12: Phaser.Input.Keyboard.KeyCodes.F12, - KEY_HOME: Phaser.Input.Keyboard.KeyCodes.HOME, - KEY_INSERT: Phaser.Input.Keyboard.KeyCodes.INSERT, + KEY_PAGE_DOWN: Phaser.Input.Keyboard.KeyCodes.PAGE_DOWN, KEY_PAGE_UP: Phaser.Input.Keyboard.KeyCodes.PAGE_UP, + + KEY_CTRL: Phaser.Input.Keyboard.KeyCodes.CTRL, + KEY_DEL: Phaser.Input.Keyboard.KeyCodes.DELETE, + KEY_END: Phaser.Input.Keyboard.KeyCodes.END, + KEY_ENTER: Phaser.Input.Keyboard.KeyCodes.ENTER, + KEY_ESC: Phaser.Input.Keyboard.KeyCodes.ESC, + KEY_HOME: Phaser.Input.Keyboard.KeyCodes.HOME, + KEY_INSERT: Phaser.Input.Keyboard.KeyCodes.INSERT, + KEY_PLUS: Phaser.Input.Keyboard.KeyCodes.NUMPAD_ADD, // Assuming numpad plus KEY_MINUS: Phaser.Input.Keyboard.KeyCodes.NUMPAD_SUBTRACT, // Assuming numpad minus KEY_QUOTATION: Phaser.Input.Keyboard.KeyCodes.QUOTES, KEY_SHIFT: Phaser.Input.Keyboard.KeyCodes.SHIFT, + KEY_SPACE: Phaser.Input.Keyboard.KeyCodes.SPACE, KEY_TAB: Phaser.Input.Keyboard.KeyCodes.TAB, KEY_TILDE: Phaser.Input.Keyboard.KeyCodes.BACKTICK, + KEY_ARROW_UP: Phaser.Input.Keyboard.KeyCodes.UP, KEY_ARROW_DOWN: Phaser.Input.Keyboard.KeyCodes.DOWN, KEY_ARROW_LEFT: Phaser.Input.Keyboard.KeyCodes.LEFT, KEY_ARROW_RIGHT: Phaser.Input.Keyboard.KeyCodes.RIGHT, + KEY_LEFT_BRACKET: Phaser.Input.Keyboard.KeyCodes.OPEN_BRACKET, KEY_RIGHT_BRACKET: Phaser.Input.Keyboard.KeyCodes.CLOSED_BRACKET, + KEY_SEMICOLON: Phaser.Input.Keyboard.KeyCodes.SEMICOLON, + KEY_COMMA: Phaser.Input.Keyboard.KeyCodes.COMMA, + KEY_PERIOD: Phaser.Input.Keyboard.KeyCodes.PERIOD, + KEY_BACK_SLASH: Phaser.Input.Keyboard.KeyCodes.BACK_SLASH, + KEY_FORWARD_SLASH: Phaser.Input.Keyboard.KeyCodes.FORWARD_SLASH, + KEY_BACKSPACE: Phaser.Input.Keyboard.KeyCodes.BACKSPACE, KEY_ALT: Phaser.Input.Keyboard.KeyCodes.ALT, }, @@ -160,6 +174,10 @@ const cfg_keyboard_qwerty = { KEY_RIGHT_BRACKET: "RIGHT_BRACKET.png", KEY_SEMICOLON: "SEMICOLON.png", + KEY_COMMA: "COMMA.png", + KEY_PERIOD: "PERIOD.png", + KEY_BACK_SLASH: "BACK_SLASH.png", + KEY_FORWARD_SLASH: "FORWARD_SLASH.png", KEY_BACKSPACE: "BACK.png", KEY_ALT: "ALT.png", From a288de700d083ab1c3ac17df9a2f8776c14a1234 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Sat, 26 Apr 2025 00:14:08 -0500 Subject: [PATCH 062/262] [Docs][Dev] Update linting docs (#5709) --- docs/linting.md | 44 +++++++++++++++++++------------------------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/docs/linting.md b/docs/linting.md index 39b30b7a1c0..ff512740a80 100644 --- a/docs/linting.md +++ b/docs/linting.md @@ -1,40 +1,34 @@ -# ESLint +# Biome + ## Key Features 1. **Automation**: - - A pre-commit hook has been added to automatically run ESLint on the added or modified files, ensuring code quality before commits. + - A pre-commit hook has been added to automatically run Biome on the added or modified files, ensuring code quality before commits. 2. **Manual Usage**: - - If you prefer not to use the pre-commit hook, you can manually run ESLint to automatically fix issues using the command: + - If you prefer not to use the pre-commit hook, you can manually run biome to automatically fix issues using the command: + ```sh - npx eslint --fix . or npm run eslint + npx @biomejs/biome --write ``` + - Running this command will lint all files in the repository. 3. **GitHub Action**: - - A GitHub Action has been added to automatically run ESLint on every push and pull request, ensuring code quality in the CI/CD pipeline. + - A GitHub Action has been added to automatically run Biome on every push and pull request, ensuring code quality in the CI/CD pipeline. -## Summary of ESLint Rules +If you are getting linting errors from biome and want to see which files they are coming from, you can find that out by running biome in a way that is configured to only show the errors for that specific rule: ``npx @biomejs/biome lint --only=category/ruleName`` -1. **General Rules**: - - **Equality**: Use `===` and `!==` instead of `==` and `!=` (`eqeqeq`). - - **Indentation**: Enforce 2-space indentation (`indent`). - - **Quotes**: Use doublequotes for strings (`quotes`). - - **Variable Declarations**: - - Disallow `var`; use `let` or `const` (`no-var`). - - Prefer `const` for variables that are never reassigned (`prefer-const`). - - **Unused Variables**: Allow unused function parameters but enforce error for other unused variables (`@typescript-eslint/no-unused-vars`). - - **End of Line**: Ensure at least one newline at the end of files (`eol-last`). - - **Curly Braces**: Enforce the use of curly braces for all control statements (`curly`). - - **Brace Style**: Use one true brace style (`1tbs`) for TypeScript-specific syntax (`@typescript-eslint/brace-style`). +## Summary of Biome Rules -2. **TypeScript-Specific Rules**: - - **Semicolons**: - - Enforce semicolons for TypeScript-specific syntax (`@typescript-eslint/semi`). - - Disallow unnecessary semicolons (`@typescript-eslint/no-extra-semi`). +We use the [recommended ruleset](https://biomejs.dev/linter/rules/) for Biome, with some customizations to better suit our project's needs. -## Benefits +For a complete list of rules and their configurations, refer to the `biome.jsonc` file in the project root. -- **Consistency**: Ensures consistent coding style across the project. -- **Code Quality**: Helps catch potential errors and improve overall code quality. -- **Readability**: Makes the codebase easier to read and maintain. \ No newline at end of file +Some things to consider: + +- We have disabled rules that prioritize style over performance, such as `useTemplate` +- Some rules are currently marked as warnings (`warn`) to allow for gradual refactoring without blocking development. Do not write new code that triggers these warnings. +- The linter is configured to ignore specific files and folders, such as large or complex files that are pending refactors, to improve performance and focus on actionable areas. + +Formatting is also handled by Biome. You should not have to worry about manually formatting your code. From 0a48726e70469ecf091aaa0be29a705e42601f17 Mon Sep 17 00:00:00 2001 From: Wlowscha <54003515+Wlowscha@users.noreply.github.com> Date: Sat, 26 Apr 2025 07:24:11 +0200 Subject: [PATCH 063/262] =?UTF-8?q?[UI/UX]=20Move=20Pok=C3=A9mon=20sprite?= =?UTF-8?q?=20below=20name=20and=20other=20text=20in=20dex=20pages=20(#569?= =?UTF-8?q?8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Moved sprite below name --- src/ui/pokedex-page-ui-handler.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index d0b85544494..4888e14b24f 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -292,6 +292,13 @@ export default class PokedexPageUiHandler extends MessageUiHandler { starterSelectBg.setOrigin(0, 0); this.starterSelectContainer.add(starterSelectBg); + this.pokemonSprite = globalScene.add.sprite(53, 63, "pkmn__sub"); + this.pokemonSprite.setPipeline(globalScene.spritePipeline, { + tone: [0.0, 0.0, 0.0, 0.0], + ignoreTimeTint: true, + }); + this.starterSelectContainer.add(this.pokemonSprite); + this.shinyOverlay = globalScene.add.image(6, 6, "summary_overlay_shiny"); this.shinyOverlay.setOrigin(0, 0); this.shinyOverlay.setVisible(false); @@ -343,13 +350,6 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.starterSelectContainer.add(starterBoxContainer); - this.pokemonSprite = globalScene.add.sprite(53, 63, "pkmn__sub"); - this.pokemonSprite.setPipeline(globalScene.spritePipeline, { - tone: [0.0, 0.0, 0.0, 0.0], - ignoreTimeTint: true, - }); - this.starterSelectContainer.add(this.pokemonSprite); - this.type1Icon = globalScene.add.sprite(8, 98, getLocalizedSpriteKey("types")); this.type1Icon.setScale(0.5); this.type1Icon.setOrigin(0, 0); From a036f865f05822576652d624dd6f0ea7cc12b4a9 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Sat, 26 Apr 2025 01:17:42 -0500 Subject: [PATCH 064/262] [Bug] Fix improper critical hit key in move effect phase (#5713) --- src/phases/move-effect-phase.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index 01085834ba5..4b4e62db71b 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -859,7 +859,7 @@ export class MoveEffectPhase extends PokemonPhase { }); if (isCritical) { - globalScene.queueMessage(i18next.t("battle:criticalHit")); + globalScene.queueMessage(i18next.t("battle:hitResultCriticalHit")); } if (damage <= 0) { From 423bab1057945e10f1871a3fa9d6907ecbb8e0b7 Mon Sep 17 00:00:00 2001 From: Wlowscha <54003515+Wlowscha@users.noreply.github.com> Date: Sat, 26 Apr 2025 19:17:54 +0200 Subject: [PATCH 065/262] =?UTF-8?q?[UI/UX]=20Move=20Pok=C3=A9mon=20sprite?= =?UTF-8?q?=20below=20name=20and=20other=20text=20in=20starter=20select=20?= =?UTF-8?q?(#5714)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Moving the sprite down --- src/ui/starter-select-ui-handler.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 1902c691715..7c345f1735e 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -596,6 +596,13 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.iconAnimHandler = new PokemonIconAnimHandler(); this.iconAnimHandler.setup(); + this.pokemonSprite = globalScene.add.sprite(53, 63, "pkmn__sub"); + this.pokemonSprite.setPipeline(globalScene.spritePipeline, { + tone: [0.0, 0.0, 0.0, 0.0], + ignoreTimeTint: true, + }); + this.starterSelectContainer.add(this.pokemonSprite); + this.pokemonNumberText = addTextObject(17, 1, "0000", TextStyle.SUMMARY); this.pokemonNumberText.setOrigin(0, 0); this.starterSelectContainer.add(this.pokemonNumberText); @@ -825,13 +832,6 @@ export default class StarterSelectUiHandler extends MessageUiHandler { return icon; }); - this.pokemonSprite = globalScene.add.sprite(53, 63, "pkmn__sub"); - this.pokemonSprite.setPipeline(globalScene.spritePipeline, { - tone: [0.0, 0.0, 0.0, 0.0], - ignoreTimeTint: true, - }); - this.starterSelectContainer.add(this.pokemonSprite); - this.type1Icon = globalScene.add.sprite(8, 98, getLocalizedSpriteKey("types")); this.type1Icon.setScale(0.5); this.type1Icon.setOrigin(0, 0); From ab7d010a17f46bab0a0c9d72ce4d29fdaf8752ef Mon Sep 17 00:00:00 2001 From: Dean <69436131+emdeann@users.noreply.github.com> Date: Sat, 26 Apr 2025 13:32:49 -0700 Subject: [PATCH 066/262] [Bug] Fix message for `StatusEffectImmunityAbAttr` (#5701) Use class var for getTriggerMessage --- src/data/abilities/ability.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index b018a87a08d..9a6094f4649 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -3172,6 +3172,7 @@ export class PreSetStatusAbAttr extends AbAttr { */ export class PreSetStatusEffectImmunityAbAttr extends PreSetStatusAbAttr { protected immuneEffects: StatusEffect[]; + private lastEffect: StatusEffect; /** * @param immuneEffects - The status effects to which the Pokémon is immune. @@ -3197,6 +3198,7 @@ export class PreSetStatusEffectImmunityAbAttr extends PreSetStatusAbAttr { */ override applyPreSetStatus(pokemon: Pokemon, passive: boolean, simulated: boolean, effect: StatusEffect, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; + this.lastEffect = effect; } getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { @@ -3204,7 +3206,7 @@ export class PreSetStatusEffectImmunityAbAttr extends PreSetStatusAbAttr { i18next.t("abilityTriggers:statusEffectImmunityWithName", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName, - statusEffectName: getStatusEffectDescriptor(args[0] as StatusEffect) + statusEffectName: getStatusEffectDescriptor(this.lastEffect) }) : i18next.t("abilityTriggers:statusEffectImmunity", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), From 6460d46a5d01bf48df82af5c4f5e8fa29d60b57d Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Sat, 26 Apr 2025 15:01:46 -0700 Subject: [PATCH 067/262] [Bug] API / Save data hotfix (#5716) * Loading data now checks statusCode not error string * Bump version to 1.8.5 --------- Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> --- package.json | 2 +- src/plugins/api/pokerogue-system-savedata-api.ts | 9 ++++++--- src/system/game-data.ts | 16 ++++++++++------ 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 4758e6c5182..341bca80c2e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.8.4", + "version": "1.8.5", "type": "module", "scripts": { "start": "vite", diff --git a/src/plugins/api/pokerogue-system-savedata-api.ts b/src/plugins/api/pokerogue-system-savedata-api.ts index 659584776c4..d6fbb39ae0a 100644 --- a/src/plugins/api/pokerogue-system-savedata-api.ts +++ b/src/plugins/api/pokerogue-system-savedata-api.ts @@ -15,14 +15,17 @@ export class PokerogueSystemSavedataApi extends ApiBase { /** * Get a system savedata. * @param params The {@linkcode GetSystemSavedataRequest} to send - * @returns The system savedata as `string` or `null` on error + * @returns The system savedata as `string` or either the status code or `null` on error */ - public async get(params: GetSystemSavedataRequest) { + public async get(params: GetSystemSavedataRequest): Promise { try { const urlSearchParams = this.toUrlSearchParams(params); const response = await this.doGet(`/savedata/system/get?${urlSearchParams}`); const rawSavedata = await response.text(); - + if (!response.ok) { + console.warn("Could not get system savedata!", response.status, rawSavedata); + return response.status; + } return rawSavedata; } catch (err) { console.warn("Could not get system savedata!", err); diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 8b7987556ee..8573c774054 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -462,8 +462,13 @@ export class GameData { if (!bypassLogin) { pokerogueApi.savedata.system.get({ clientSessionId }).then(saveDataOrErr => { - if (!saveDataOrErr || saveDataOrErr.length === 0 || saveDataOrErr[0] !== "{") { - if (saveDataOrErr?.startsWith("sql: no rows in result set")) { + if ( + typeof saveDataOrErr === "number" || + !saveDataOrErr || + saveDataOrErr.length === 0 || + saveDataOrErr[0] !== "{" + ) { + if (saveDataOrErr === 404) { globalScene.queueMessage( "Save data could not be found. If this is a new account, you can safely ignore this message.", null, @@ -471,7 +476,7 @@ export class GameData { ); return resolve(true); } - if (saveDataOrErr?.includes("Too many connections")) { + if (typeof saveDataOrErr === "string" && saveDataOrErr?.includes("Too many connections")) { globalScene.queueMessage( "Too many people are trying to connect and the server is overloaded. Please try again later.", null, @@ -479,7 +484,6 @@ export class GameData { ); return resolve(false); } - console.error(saveDataOrErr); return resolve(false); } @@ -1500,7 +1504,7 @@ export class GameData { link.remove(); }; if (!bypassLogin && dataType < GameDataType.SETTINGS) { - let promise: Promise = Promise.resolve(null); + let promise: Promise = Promise.resolve(null); if (dataType === GameDataType.SYSTEM) { promise = pokerogueApi.savedata.system.get({ clientSessionId }); @@ -1512,7 +1516,7 @@ export class GameData { } promise.then(response => { - if (!response?.length || response[0] !== "{") { + if (typeof response === "number" || !response?.length || response[0] !== "{") { console.error(response); resolve(false); return; From c6e7dd660e1482c7901396b584b121bb666a2966 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Sat, 26 Apr 2025 18:04:40 -0500 Subject: [PATCH 068/262] [Bug] Hotfix 1.8.5 (#5715) * Loading data now checks statusCode not error string * Bump version to 1.8.5 --- package.json | 2 +- src/plugins/api/pokerogue-system-savedata-api.ts | 9 ++++++--- src/system/game-data.ts | 16 ++++++++++------ 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 6b1c73db158..9a74fdcbb53 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.8.4", + "version": "1.8.5", "type": "module", "scripts": { "start": "vite", diff --git a/src/plugins/api/pokerogue-system-savedata-api.ts b/src/plugins/api/pokerogue-system-savedata-api.ts index 659584776c4..d6fbb39ae0a 100644 --- a/src/plugins/api/pokerogue-system-savedata-api.ts +++ b/src/plugins/api/pokerogue-system-savedata-api.ts @@ -15,14 +15,17 @@ export class PokerogueSystemSavedataApi extends ApiBase { /** * Get a system savedata. * @param params The {@linkcode GetSystemSavedataRequest} to send - * @returns The system savedata as `string` or `null` on error + * @returns The system savedata as `string` or either the status code or `null` on error */ - public async get(params: GetSystemSavedataRequest) { + public async get(params: GetSystemSavedataRequest): Promise { try { const urlSearchParams = this.toUrlSearchParams(params); const response = await this.doGet(`/savedata/system/get?${urlSearchParams}`); const rawSavedata = await response.text(); - + if (!response.ok) { + console.warn("Could not get system savedata!", response.status, rawSavedata); + return response.status; + } return rawSavedata; } catch (err) { console.warn("Could not get system savedata!", err); diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 391ceec503d..998f56efbde 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -461,8 +461,13 @@ export class GameData { if (!bypassLogin) { pokerogueApi.savedata.system.get({ clientSessionId }).then(saveDataOrErr => { - if (!saveDataOrErr || saveDataOrErr.length === 0 || saveDataOrErr[0] !== "{") { - if (saveDataOrErr?.startsWith("sql: no rows in result set")) { + if ( + typeof saveDataOrErr === "number" || + !saveDataOrErr || + saveDataOrErr.length === 0 || + saveDataOrErr[0] !== "{" + ) { + if (saveDataOrErr === 404) { globalScene.queueMessage( "Save data could not be found. If this is a new account, you can safely ignore this message.", null, @@ -470,7 +475,7 @@ export class GameData { ); return resolve(true); } - if (saveDataOrErr?.includes("Too many connections")) { + if (typeof saveDataOrErr === "string" && saveDataOrErr?.includes("Too many connections")) { globalScene.queueMessage( "Too many people are trying to connect and the server is overloaded. Please try again later.", null, @@ -478,7 +483,6 @@ export class GameData { ); return resolve(false); } - console.error(saveDataOrErr); return resolve(false); } @@ -1499,7 +1503,7 @@ export class GameData { link.remove(); }; if (!bypassLogin && dataType < GameDataType.SETTINGS) { - let promise: Promise = Promise.resolve(null); + let promise: Promise = Promise.resolve(null); if (dataType === GameDataType.SYSTEM) { promise = pokerogueApi.savedata.system.get({ clientSessionId }); @@ -1511,7 +1515,7 @@ export class GameData { } promise.then(response => { - if (!response?.length || response[0] !== "{") { + if (typeof response === "number" || !response?.length || response[0] !== "{") { console.error(response); resolve(false); return; From 89a9d55d3c4cd540f8a80aca8e72c541f62ad23d Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Sat, 26 Apr 2025 23:22:56 -0700 Subject: [PATCH 069/262] [Dev] Add enemy pokemon level to encounter logging (#5718) --- .../mystery-encounters/utils/encounter-phase-utils.ts | 1 + src/phases/encounter-phase.ts | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index 65051b937f8..67904fc856c 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -424,6 +424,7 @@ export async function initBattleWithEnemyConfig(partyConfig: EnemyPartyConfig): console.log( `Pokemon: ${getPokemonNameWithAffix(enemyPokemon)}`, `| Species ID: ${enemyPokemon.species.speciesId}`, + `| Level: ${enemyPokemon.level}`, `| Nature: ${getNatureName(enemyPokemon.nature, true, true, true)}`, ); console.log(`Stats (IVs): ${stats}`); diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index 6fd11c416a2..20ed69119f9 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -2,7 +2,12 @@ import { BattlerIndex } from "#app/battle"; import { BattleType } from "#enums/battle-type"; import { globalScene } from "#app/global-scene"; import { PLAYER_PARTY_MAX_SIZE } from "#app/constants"; -import { applyAbAttrs, SyncEncounterNatureAbAttr, applyPreSummonAbAttrs, PreSummonAbAttr } from "#app/data/abilities/ability"; +import { + applyAbAttrs, + SyncEncounterNatureAbAttr, + applyPreSummonAbAttrs, + PreSummonAbAttr, +} from "#app/data/abilities/ability"; import { initEncounterAnims, loadEncounterAnimAssets } from "#app/data/battle-anims"; import { getCharVariantFromDialogue } from "#app/data/dialogue"; import { getEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; @@ -196,6 +201,7 @@ export class EncounterPhase extends BattlePhase { console.log( `Pokemon: ${getPokemonNameWithAffix(enemyPokemon)}`, `| Species ID: ${enemyPokemon.species.speciesId}`, + `| Level: ${enemyPokemon.level}`, `| Nature: ${getNatureName(enemyPokemon.nature, true, true, true)}`, ); console.log(`Stats (IVs): ${stats}`); From a7479c8eb68d64080f5e4dd3e4bed1bc9fd6fc92 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Sun, 27 Apr 2025 12:27:34 -0700 Subject: [PATCH 070/262] [Balance] Trainer pokemon now have minimum IVs of `wave/10` (#5719) --- src/field/pokemon.ts | 19 ++++++++++++------- test/field/pokemon.test.ts | 15 +++++++++++++++ 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 2de8cc150c9..f6810ad38e1 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -12,7 +12,6 @@ import BattleInfo, { import type Move from "#app/data/moves/move"; import { HighCritAttr, - StatChangeBeforeDmgCalcAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, @@ -70,10 +69,8 @@ import { EFFECTIVE_STATS, } from "#enums/stat"; import { - DamageMoneyRewardModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, - EnemyEndureChanceModifier, EnemyFusionChanceModifier, HiddenAbilityRateBoosterModifier, BaseStatModifier, @@ -119,7 +116,6 @@ import { TypeImmuneTag, getBattlerTag, SemiInvulnerableTag, - TypeBoostTag, MoveRestrictionBattlerTag, ExposedTag, DragonCheerTag, @@ -188,7 +184,7 @@ import { PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr, applyAllyStatMultiplierAbAttrs, AllyStatMultiplierAbAttr, - MoveAbilityBypassAbAttr + MoveAbilityBypassAbAttr, } from "#app/data/abilities/ability"; import { allAbilities } from "#app/data/data-lists"; import type PokemonData from "#app/system/pokemon-data"; @@ -202,7 +198,7 @@ import { EVOLVE_MOVE, RELEARN_MOVE, } from "#app/data/balance/pokemon-level-moves"; -import { DamageAchv, achvs } from "#app/system/achv"; +import { achvs } from "#app/system/achv"; import type { StarterDataEntry, StarterMoveset } from "#app/system/game-data"; import { DexAttr } from "#app/system/game-data"; import { @@ -248,7 +244,7 @@ import { PLAYER_PARTY_MAX_SIZE } from "#app/constants"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import { SwitchType } from "#enums/switch-type"; import { SpeciesFormKey } from "#enums/species-form-key"; -import {getStatusEffectOverlapText } from "#app/data/status-effect"; +import { getStatusEffectOverlapText } from "#app/data/status-effect"; import { BASE_HIDDEN_ABILITY_CHANCE, BASE_SHINY_CHANCE, @@ -7030,6 +7026,15 @@ export class EnemyPokemon extends Pokemon { } speciesId = prevolution; } + + if (this.hasTrainer() && globalScene.currentBattle) { + const { waveIndex } = globalScene.currentBattle; + const ivs: number[] = []; + while (ivs.length < 6) { + ivs.push(this.randSeedIntRange(Math.floor(waveIndex / 10), 31)); + } + this.ivs = ivs; + } } this.aiType = diff --git a/test/field/pokemon.test.ts b/test/field/pokemon.test.ts index 85128a31f7f..f763ab2c401 100644 --- a/test/field/pokemon.test.ts +++ b/test/field/pokemon.test.ts @@ -209,4 +209,19 @@ describe("Spec - Pokemon", () => { expect(types[1]).toBe(PokemonType.DARK); }); }); + + it.each([5, 25, 55, 95, 145, 195])( + "should set minimum IVs for enemy trainer pokemon based on wave (%i)", + async wave => { + game.override.startingWave(wave); + await game.classicMode.startBattle([Species.FEEBAS]); + const { waveIndex } = game.scene.currentBattle; + + for (const pokemon of game.scene.getEnemyParty()) { + for (const index in pokemon.ivs) { + expect(pokemon.ivs[index]).toBeGreaterThanOrEqual(Math.floor(waveIndex / 10)); + } + } + }, + ); }); From 69df76dd883eab5f2c5bbdfac2092d32005c89c2 Mon Sep 17 00:00:00 2001 From: Blitzy <118096277+Blitz425@users.noreply.github.com> Date: Mon, 28 Apr 2025 15:40:58 -0500 Subject: [PATCH 071/262] [Balance] Elite 4 tweaks (#5706) * Update trainer-config.ts * Update signature-species.ts * Update trainer-config.ts * Fix Notes --------- Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Co-authored-by: damocleas --- src/data/balance/signature-species.ts | 84 +- src/data/trainers/trainer-config.ts | 1083 ++++++++++++++++--------- 2 files changed, 734 insertions(+), 433 deletions(-) diff --git a/src/data/balance/signature-species.ts b/src/data/balance/signature-species.ts index e2fecaa12ff..fb8f33d4435 100644 --- a/src/data/balance/signature-species.ts +++ b/src/data/balance/signature-species.ts @@ -4,12 +4,19 @@ export type SignatureSpecies = { [key in string]: (Species | Species[])[]; }; -/* +/** * The signature species for each Gym Leader, Elite Four member, and Champion. * The key is the trainer type, and the value is an array of Species or Species arrays. * This is in a separate const so it can be accessed from other places and not just the trainerConfigs + * + * @remarks + * The `Proxy` object allows us to define a handler that will intercept + * the property access and return an empty array if the property does not exist in the object. + * + * This means that accessing `signatureSpecies` will not throw an error if the property does not exist, + * but instead default to an empty array. */ -export const signatureSpecies: SignatureSpecies = { +export const signatureSpecies: SignatureSpecies = new Proxy({ // Gym Leaders- Kanto BROCK: [Species.ONIX, Species.GEODUDE, [Species.OMANYTE, Species.KABUTO], Species.AERODACTYL], MISTY: [Species.STARYU, Species.PSYDUCK, Species.WOOPER, Species.LAPRAS], @@ -92,71 +99,8 @@ export const signatureSpecies: SignatureSpecies = { RYME: [Species.TOXEL, Species.GREAVARD, Species.SHUPPET, Species.MIMIKYU], // Tera Ghost Toxel TULIP: [Species.FLABEBE, Species.FLITTLE, Species.RALTS, Species.GIRAFARIG], // Tera Psychic Flabebe GRUSHA: [Species.SWABLU, Species.CETODDLE, Species.SNOM, Species.CUBCHOO], // Tera Ice Swablu - - // Elite Four- Kanto - LORELEI: [ - Species.JYNX, - [Species.SLOWBRO, Species.GALAR_SLOWBRO], - Species.LAPRAS, - [Species.CLOYSTER, Species.ALOLA_SANDSLASH], - ], - BRUNO: [Species.MACHAMP, Species.HITMONCHAN, Species.HITMONLEE, [Species.GOLEM, Species.ALOLA_GOLEM]], - AGATHA: [Species.GENGAR, [Species.ARBOK, Species.WEEZING], Species.CROBAT, Species.ALOLA_MAROWAK], - LANCE: [Species.DRAGONITE, Species.GYARADOS, Species.AERODACTYL, Species.ALOLA_EXEGGUTOR], - // Elite Four- Johto (Bruno included) - WILL: [Species.XATU, Species.JYNX, [Species.SLOWBRO, Species.SLOWKING], Species.EXEGGUTOR], - KOGA: [[Species.MUK, Species.WEEZING], [Species.VENOMOTH, Species.ARIADOS], Species.CROBAT, Species.TENTACRUEL], - KAREN: [Species.UMBREON, Species.HONCHKROW, Species.HOUNDOOM, Species.WEAVILE], - // Elite Four- Hoenn - SIDNEY: [ - [Species.SHIFTRY, Species.CACTURNE], - [Species.SHARPEDO, Species.CRAWDAUNT], - Species.ABSOL, - Species.MIGHTYENA, - ], - PHOEBE: [Species.SABLEYE, Species.DUSKNOIR, Species.BANETTE, [Species.DRIFBLIM, Species.MISMAGIUS]], - GLACIA: [Species.GLALIE, Species.WALREIN, Species.FROSLASS, Species.ABOMASNOW], - DRAKE: [Species.ALTARIA, Species.SALAMENCE, Species.FLYGON, Species.KINGDRA], - // Elite Four- Sinnoh - AARON: [[Species.SCIZOR, Species.KLEAVOR], Species.HERACROSS, [Species.VESPIQUEN, Species.YANMEGA], Species.DRAPION], - BERTHA: [Species.WHISCASH, Species.HIPPOWDON, Species.GLISCOR, Species.RHYPERIOR], - FLINT: [ - [Species.RAPIDASH, Species.FLAREON], - Species.MAGMORTAR, - [Species.STEELIX, Species.LOPUNNY], - Species.INFERNAPE, - ], // Tera Fire Steelix or Lopunny - LUCIAN: [Species.MR_MIME, Species.GALLADE, Species.BRONZONG, [Species.ALAKAZAM, Species.ESPEON]], - // Elite Four- Unova - SHAUNTAL: [Species.COFAGRIGUS, Species.CHANDELURE, Species.GOLURK, Species.JELLICENT], - MARSHAL: [Species.CONKELDURR, Species.MIENSHAO, Species.THROH, Species.SAWK], - GRIMSLEY: [Species.LIEPARD, Species.KINGAMBIT, Species.SCRAFTY, Species.KROOKODILE], - CAITLIN: [Species.MUSHARNA, Species.GOTHITELLE, Species.SIGILYPH, Species.REUNICLUS], - // Elite Four- Kalos - MALVA: [Species.PYROAR, Species.TORKOAL, Species.CHANDELURE, Species.TALONFLAME], - SIEBOLD: [Species.CLAWITZER, Species.GYARADOS, Species.BARBARACLE, Species.STARMIE], - WIKSTROM: [Species.KLEFKI, Species.PROBOPASS, Species.SCIZOR, Species.AEGISLASH], - DRASNA: [Species.DRAGALGE, Species.DRUDDIGON, Species.ALTARIA, Species.NOIVERN], - // Elite Four- Alola - HALA: [Species.HARIYAMA, Species.BEWEAR, Species.CRABOMINABLE, [Species.POLIWRATH, Species.ANNIHILAPE]], - MOLAYNE: [Species.KLEFKI, Species.MAGNEZONE, Species.METAGROSS, Species.ALOLA_DUGTRIO], - OLIVIA: [Species.RELICANTH, Species.CARBINK, Species.ALOLA_GOLEM, Species.LYCANROC], - ACEROLA: [[Species.BANETTE, Species.DRIFBLIM], Species.MIMIKYU, Species.DHELMISE, Species.PALOSSAND], - KAHILI: [[Species.BRAVIARY, Species.MANDIBUZZ], Species.HAWLUCHA, Species.ORICORIO, Species.TOUCANNON], - // Elite Four- Galar - MARNIE_ELITE: [Species.MORPEKO, Species.LIEPARD, [Species.TOXICROAK, Species.SCRAFTY], Species.GRIMMSNARL], - NESSA_ELITE: [Species.GOLISOPOD, [Species.QUAGSIRE, Species.PELIPPER], Species.TOXAPEX, Species.DREDNAW], - BEA_ELITE: [Species.HAWLUCHA, [Species.GRAPPLOCT, Species.SIRFETCHD], Species.FALINKS, Species.MACHAMP], - ALLISTER_ELITE: [Species.DUSKNOIR, [Species.POLTEAGEIST, Species.RUNERIGUS], Species.CURSOLA, Species.GENGAR], - RAIHAN_ELITE: [Species.GOODRA, [Species.TORKOAL, Species.TURTONATOR], Species.FLYGON, Species.ARCHALUDON], - // Elite Four- Paldea - RIKA: [Species.CLODSIRE, [Species.DUGTRIO, Species.DONPHAN], Species.CAMERUPT, Species.WHISCASH], // Tera Ground Clodsire - POPPY: [Species.TINKATON, Species.BRONZONG, Species.CORVIKNIGHT, Species.COPPERAJAH], // Tera Steel Tinkaton - LARRY_ELITE: [Species.FLAMIGO, Species.STARAPTOR, [Species.ALTARIA, Species.TROPIUS], Species.ORICORIO], // Tera Flying Flamigo; random Oricorio - HASSEL: [Species.BAXCALIBUR, [Species.FLAPPLE, Species.APPLETUN], Species.DRAGALGE, Species.NOIVERN], // Tera Dragon Baxcalibur - // Elite Four- BBL - CRISPIN: [Species.BLAZIKEN, Species.MAGMORTAR, [Species.CAMERUPT, Species.TALONFLAME], Species.ROTOM], // Tera Fire Blaziken; Heat Rotom - AMARYS: [Species.METAGROSS, Species.SCIZOR, Species.EMPOLEON, Species.SKARMORY], // Tera Steel Metagross - LACEY: [Species.EXCADRILL, Species.PRIMARINA, [Species.WHIMSICOTT, Species.ALCREMIE], Species.GRANBULL], // Tera Fairy Excadrill - DRAYTON: [Species.ARCHALUDON, Species.DRAGONITE, Species.HAXORUS, Species.SCEPTILE], // Tera Dragon Archaludon -}; +}, { + get(target, prop: string) { + return target[prop as keyof SignatureSpecies] ?? []; + } +}); diff --git a/src/data/trainers/trainer-config.ts b/src/data/trainers/trainer-config.ts index a2e62e6761b..50acf84efa6 100644 --- a/src/data/trainers/trainer-config.ts +++ b/src/data/trainers/trainer-config.ts @@ -707,11 +707,11 @@ export class TrainerConfig { /** * Initializes the trainer configuration for an Elite Four member. - * @param {Species | Species[]} signatureSpecies The signature species for the Elite Four member. - * @param isMale Whether the Elite Four Member is Male or Female (for localization of the title). - * @param specialtyType {PokemonType} The specialty type for the Elite Four member. - * @param teraSlot Optional, sets the party member in this slot to Terastallize. - * @returns {TrainerConfig} The updated TrainerConfig instance. + * @param signatureSpecies - The signature species for the Elite Four member. + * @param isMale - Whether the Elite Four Member is Male or Female (for localization of the title). + * @param specialtyType - The specialty type for the Elite Four member. + * @param teraSlot - Optional, sets the party member in this slot to Terastallize. + * @returns The updated TrainerConfig instance. **/ initForEliteFour( signatureSpecies: (Species | Species[])[], @@ -2853,146 +2853,688 @@ export const trainerConfigs: TrainerConfigs = { .setMixedBattleBgm("battle_paldea_gym"), [TrainerType.LORELEI]: new TrainerConfig((t = TrainerType.LORELEI)) - .initForEliteFour(signatureSpecies["LORELEI"], false, PokemonType.ICE) + .initForEliteFour(signatureSpecies["LORELEI"], false, PokemonType.ICE, 2) .setBattleBgm("battle_kanto_gym") - .setMixedBattleBgm("battle_kanto_gym"), + .setMixedBattleBgm("battle_kanto_gym") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.DEWGONG], TrainerSlot.TRAINER, true, p => { + p.abilityIndex = 0; // Thick Fat + p.generateAndPopulateMoveset(); + }), + ) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SLOWBRO, Species.GALAR_SLOWBRO], TrainerSlot.TRAINER, true, p => { // Tera Ice Slowbro/G-Slowbro + p.generateAndPopulateMoveset(); + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.ICE_BEAM)) { // Check if Ice Beam is in the moveset, if not, replace the third move with Ice Beam. + p.moveset[2] = new PokemonMove(Moves.ICE_BEAM); + } + }), + ) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.JYNX])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CLOYSTER, Species.ALOLA_SANDSLASH])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.LAPRAS], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.BRUNO]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["BRUNO"], true, PokemonType.FIGHTING) + .initForEliteFour(signatureSpecies["BRUNO"], true, PokemonType.FIGHTING, 2) .setBattleBgm("battle_kanto_gym") - .setMixedBattleBgm("battle_kanto_gym"), + .setMixedBattleBgm("battle_kanto_gym") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.HITMONLEE, Species.HITMONCHAN, Species.HITMONTOP])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.STEELIX], TrainerSlot.TRAINER, true, p => { // Tera Fighting Steelix + p.generateAndPopulateMoveset(); + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.BODY_PRESS)) { // Check if Body Press is in the moveset, if not, replace the third move with Body Press. + p.moveset[2] = new PokemonMove(Moves.BODY_PRESS); + } + }), + ) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.POLIWRATH])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ANNIHILAPE])) + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.MACHAMP], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.AGATHA]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["AGATHA"], false, PokemonType.GHOST) + .initForEliteFour(signatureSpecies["AGATHA"], false, PokemonType.GHOST, 2) .setBattleBgm("battle_kanto_gym") - .setMixedBattleBgm("battle_kanto_gym"), + .setMixedBattleBgm("battle_kanto_gym") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.MISMAGIUS])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.ARBOK, Species.WEEZING], TrainerSlot.TRAINER, true, p => { // Tera Ghost Arbok/Weezing + p.generateAndPopulateMoveset(); + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. + p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); + } + }), + ) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.ALOLA_MAROWAK])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CURSOLA])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.GENGAR], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.LANCE]: new TrainerConfig(++t) .setName("Lance") - .initForEliteFour(signatureSpecies["LANCE"], true, PokemonType.DRAGON) + .initForEliteFour(signatureSpecies["LANCE"], true, PokemonType.DRAGON, 2) .setBattleBgm("battle_kanto_gym") - .setMixedBattleBgm("battle_kanto_gym"), + .setMixedBattleBgm("battle_kanto_gym") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.KINGDRA])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.GYARADOS, Species.AERODACTYL], TrainerSlot.TRAINER, true, p => { // Tera Dragon Gyarados/Aerodactyl + p.generateAndPopulateMoveset(); + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. + p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); + } + }), + ) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.ALOLA_EXEGGUTOR])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SALAMENCE])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.DRAGONITE], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.WILL]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["WILL"], true, PokemonType.PSYCHIC) + .initForEliteFour(signatureSpecies["WILL"], true, PokemonType.PSYCHIC, 2) .setBattleBgm("battle_johto_gym") - .setMixedBattleBgm("battle_johto_gym"), + .setMixedBattleBgm("battle_johto_gym") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.JYNX])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SLOWKING, Species.GALAR_SLOWKING])) // Tera Psychic Slowking/G-Slowking + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.EXEGGUTOR])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.WYRDEER, Species.FARIGIRAF])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.XATU], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.KOGA]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["KOGA"], true, PokemonType.POISON) + .initForEliteFour(signatureSpecies["KOGA"], true, PokemonType.POISON, 2) .setBattleBgm("battle_johto_gym") - .setMixedBattleBgm("battle_johto_gym"), + .setMixedBattleBgm("battle_johto_gym") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.VENOMOTH], TrainerSlot.TRAINER, true, p => { + p.abilityIndex = 1; // Tinted Lens + p.generateAndPopulateMoveset(); + }), + ) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.MUK, Species.WEEZING])) // Tera Poison Muk/Weezing + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.TENTACRUEL])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SNEASLER, Species.OVERQWIL])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.CROBAT], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.KAREN]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["KAREN"], false, PokemonType.DARK) + .initForEliteFour(signatureSpecies["KAREN"], false, PokemonType.DARK, 2) .setBattleBgm("battle_johto_gym") - .setMixedBattleBgm("battle_johto_gym"), + .setMixedBattleBgm("battle_johto_gym") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.UMBREON])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.GENGAR], TrainerSlot.TRAINER, true, p => { // Tera Dark Gengar + p.generateAndPopulateMoveset(); + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.DARK_PULSE)) { // Check if Dark Pulse is in the moveset, if not, replace the third move with Dark Pulse. + p.moveset[2] = new PokemonMove(Moves.DARK_PULSE); + } + }), + ) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.HONCHKROW])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.WEAVILE])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.HOUNDOOM], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.SIDNEY]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["SIDNEY"], true, PokemonType.DARK) - .setMixedBattleBgm("battle_hoenn_elite"), + .initForEliteFour(signatureSpecies["SIDNEY"], true, PokemonType.DARK, 2) + .setMixedBattleBgm("battle_hoenn_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.MIGHTYENA], TrainerSlot.TRAINER, true, p => { + p.abilityIndex = 0; // Intimidate + p.generateAndPopulateMoveset(); + }), + ) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.OBSTAGOON])) // Tera Dark Obstagoon + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.SHIFTRY, Species.CACTURNE])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SHARPEDO, Species.CRAWDAUNT])) + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.ABSOL], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.PHOEBE]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["PHOEBE"], false, PokemonType.GHOST) - .setMixedBattleBgm("battle_hoenn_elite"), + .initForEliteFour(signatureSpecies["PHOEBE"], false, PokemonType.GHOST, 2) + .setMixedBattleBgm("battle_hoenn_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SABLEYE])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.BANETTE])) // Tera Ghost Banette + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.DRIFBLIM, Species.MISMAGIUS])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ORICORIO, Species.ALOLA_MAROWAK], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.formIndex = p.species.speciesId === Species.ORICORIO ? 3 : 0; // Oricorio-Sensu + }), + ) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.DUSKNOIR], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.GLACIA]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["GLACIA"], false, PokemonType.ICE) - .setMixedBattleBgm("battle_hoenn_elite"), + .initForEliteFour(signatureSpecies["GLACIA"], false, PokemonType.ICE, 2) + .setMixedBattleBgm("battle_hoenn_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ABOMASNOW], TrainerSlot.TRAINER, true, p => { + p.abilityIndex = 0; // Snow Warning + p.generateAndPopulateMoveset(); + }), + ) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.GLALIE])) // Tera Ice Glalie + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.FROSLASS])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ALOLA_NINETALES])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.WALREIN], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.DRAKE]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["DRAKE"], true, PokemonType.DRAGON) - .setMixedBattleBgm("battle_hoenn_elite"), + .initForEliteFour(signatureSpecies["DRAKE"], true, PokemonType.DRAGON, 2) + .setMixedBattleBgm("battle_hoenn_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ALTARIA])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.DHELMISE], TrainerSlot.TRAINER, true, p => { // Tera Dragon Dhelmise + p.generateAndPopulateMoveset(); + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. + p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); + } + }), + ) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.FLYGON])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.KINGDRA])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.SALAMENCE], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.AARON]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["AARON"], true, PokemonType.BUG) + .initForEliteFour(signatureSpecies["AARON"], true, PokemonType.BUG, 5) .setBattleBgm("battle_sinnoh_gym") - .setMixedBattleBgm("battle_sinnoh_gym"), + .setMixedBattleBgm("battle_sinnoh_gym") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.YANMEGA])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.HERACROSS])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.VESPIQUEN])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SCIZOR, Species.KLEAVOR])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.DRAPION], TrainerSlot.TRAINER, true, p => { // Tera Bug Drapion + p.setBoss(true, 2); + p.abilityIndex = 1; // Sniper + p.generateAndPopulateMoveset(); + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.X_SCISSOR)) { // Check if X-Scissor is in the moveset, if not, replace the third move with X-Scissor. + p.moveset[2] = new PokemonMove(Moves.X_SCISSOR); + } + }), + ), [TrainerType.BERTHA]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["BERTHA"], false, PokemonType.GROUND) + .initForEliteFour(signatureSpecies["BERTHA"], false, PokemonType.GROUND, 2) .setBattleBgm("battle_sinnoh_gym") - .setMixedBattleBgm("battle_sinnoh_gym"), + .setMixedBattleBgm("battle_sinnoh_gym") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.WHISCASH])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.HIPPOWDON], TrainerSlot.TRAINER, true, p => { // Tera Ground Hippowdon + p.abilityIndex = 0; // Sand Stream + p.generateAndPopulateMoveset(); + }), + ) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GLISCOR])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.MAMOSWINE, Species.URSALUNA])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.RHYPERIOR], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.abilityIndex = 1; // Solid Rock + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.FLINT]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["FLINT"], true, PokemonType.FIRE, 3) + .initForEliteFour(signatureSpecies["FLINT"], true, PokemonType.FIRE, 2) .setBattleBgm("battle_sinnoh_gym") - .setMixedBattleBgm("battle_sinnoh_gym"), + .setMixedBattleBgm("battle_sinnoh_gym") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.RAPIDASH])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.STEELIX, Species.LOPUNNY], TrainerSlot.TRAINER, true, p => { // Tera Fire Steelix/Lopunny + p.generateAndPopulateMoveset(); + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. + p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); + } + }), + ) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.INFERNAPE])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ARCANINE, Species.HISUI_ARCANINE])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.MAGMORTAR], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.LUCIAN]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["LUCIAN"], true, PokemonType.PSYCHIC) + .initForEliteFour(signatureSpecies["LUCIAN"], true, PokemonType.PSYCHIC, 2) .setBattleBgm("battle_sinnoh_gym") - .setMixedBattleBgm("battle_sinnoh_gym"), + .setMixedBattleBgm("battle_sinnoh_gym") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ESPEON, Species.ALAKAZAM])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.FARIGIRAF])) // Tera Psychic Farigiraf + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.BRONZONG])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.MR_RIME, Species.HISUI_BRAVIARY])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.GALLADE], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.abilityIndex = 1; // Sharpness + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.SHAUNTAL]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["SHAUNTAL"], false, PokemonType.GHOST) - .setMixedBattleBgm("battle_unova_elite"), + .initForEliteFour(signatureSpecies["SHAUNTAL"], false, PokemonType.GHOST, 2) + .setMixedBattleBgm("battle_unova_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.COFAGRIGUS])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.GOLURK])) // Tera Ghost Golurk + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.JELLICENT])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.MISMAGIUS, Species.FROSLASS ])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.CHANDELURE], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.MARSHAL]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["MARSHAL"], true, PokemonType.FIGHTING) - .setMixedBattleBgm("battle_unova_elite"), + .initForEliteFour(signatureSpecies["MARSHAL"], true, PokemonType.FIGHTING, 2) + .setMixedBattleBgm("battle_unova_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.THROH, Species.SAWK])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.MIENSHAO])) // Tera Fighting Mienshao + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.EMBOAR])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.BRELOOM, Species.TOXICROAK])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.CONKELDURR], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.GRIMSLEY]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["GRIMSLEY"], true, PokemonType.DARK) - .setMixedBattleBgm("battle_unova_elite"), + .initForEliteFour(signatureSpecies["GRIMSLEY"], true, PokemonType.DARK, 2) + .setMixedBattleBgm("battle_unova_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.LIEPARD])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.KROOKODILE])) // Tera Dark Krookodile + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.SCRAFTY])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ZOROARK, Species.HISUI_SAMUROTT])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.KINGAMBIT], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.CAITLIN]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["CAITLIN"], false, PokemonType.PSYCHIC) - .setMixedBattleBgm("battle_unova_elite"), + .initForEliteFour(signatureSpecies["CAITLIN"], false, PokemonType.PSYCHIC, 2) + .setMixedBattleBgm("battle_unova_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.MUSHARNA])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.REUNICLUS])) // Tera Psychic Reuniclus + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GALLADE], TrainerSlot.TRAINER, true, p => { + p.abilityIndex = 1; // Sharpness + p.generateAndPopulateMoveset(); + }), + ) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SIGILYPH, Species.HISUI_BRAVIARY])) + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.GOTHITELLE], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.MALVA]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["MALVA"], false, PokemonType.FIRE) - .setMixedBattleBgm("battle_kalos_elite"), + .initForEliteFour(signatureSpecies["MALVA"], false, PokemonType.FIRE, 2) + .setMixedBattleBgm("battle_kalos_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PYROAR], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.gender = Gender.FEMALE; + }), + ) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.HOUNDOOM])) // Tera Fire Houndoom + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.TORKOAL], TrainerSlot.TRAINER, true, p => { + p.abilityIndex = 1; // Drought + p.generateAndPopulateMoveset(); + }), + ) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CHANDELURE, Species.DELPHOX])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.TALONFLAME], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.SIEBOLD]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["SIEBOLD"], true, PokemonType.WATER) - .setMixedBattleBgm("battle_kalos_elite"), + .initForEliteFour(signatureSpecies["SIEBOLD"], true, PokemonType.WATER, 2) + .setMixedBattleBgm("battle_kalos_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.CLAWITZER])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.GYARADOS])) // Tera Water Gyarados + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.STARMIE])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.BLASTOISE, Species.DONDOZO])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.BARBARACLE], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.abilityIndex = 1; // Tough Claws + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.WIKSTROM]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["WIKSTROM"], true, PokemonType.STEEL) - .setMixedBattleBgm("battle_kalos_elite"), + .initForEliteFour(signatureSpecies["WIKSTROM"], true, PokemonType.STEEL, 2) + .setMixedBattleBgm("battle_kalos_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.KLEFKI])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.CERULEDGE], TrainerSlot.TRAINER, true, p => { // Tera Steel Ceruledge + p.generateAndPopulateMoveset(); + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.IRON_HEAD)) { // Check if Iron Head is in the moveset, if not, replace the third move with Iron Head. + p.moveset[2] = new PokemonMove(Moves.IRON_HEAD); + } + }), + ) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.SCIZOR])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CORVIKNIGHT])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.AEGISLASH], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.DRASNA]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["DRASNA"], false, PokemonType.DRAGON) - .setMixedBattleBgm("battle_kalos_elite"), + .initForEliteFour(signatureSpecies["DRASNA"], false, PokemonType.DRAGON, 2) + .setMixedBattleBgm("battle_kalos_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.DRAGALGE])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.GARCHOMP])) // Tera Dragon Garchomp + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.ALTARIA])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.DRUDDIGON])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.NOIVERN], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.HALA]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["HALA"], true, PokemonType.FIGHTING) - .setMixedBattleBgm("battle_alola_elite"), + .initForEliteFour(signatureSpecies["HALA"], true, PokemonType.FIGHTING, 2) + .setMixedBattleBgm("battle_alola_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.HARIYAMA])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.INCINEROAR], TrainerSlot.TRAINER, true, p => { // Tera Fighting Incineroar + p.generateAndPopulateMoveset(); + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.CROSS_CHOP)) { // Check if Cross Chop is in the moveset, if not, replace the third move with Cross Chop. + p.moveset[2] = new PokemonMove(Moves.CROSS_CHOP); + } + }), + ) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.BEWEAR])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.POLIWRATH, Species.ANNIHILAPE])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.CRABOMINABLE], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.MOLAYNE]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["MOLAYNE"], true, PokemonType.STEEL) - .setMixedBattleBgm("battle_alola_elite"), + .initForEliteFour(signatureSpecies["MOLAYNE"], true, PokemonType.STEEL, 2) + .setMixedBattleBgm("battle_alola_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.KLEFKI])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.ALOLA_SANDSLASH])) // Tera Steel A-Sandslash + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.MAGNEZONE])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.METAGROSS, Species.KINGAMBIT])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.ALOLA_DUGTRIO], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.OLIVIA]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["OLIVIA"], false, PokemonType.ROCK) - .setMixedBattleBgm("battle_alola_elite"), + .initForEliteFour(signatureSpecies["OLIVIA"], false, PokemonType.ROCK, 2) + .setMixedBattleBgm("battle_alola_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.GIGALITH], TrainerSlot.TRAINER, true, p => { + p.abilityIndex = 1; // Sand Stream + p.generateAndPopulateMoveset(); + }), + ) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.PROBOPASS])) // Tera Rock Probopass + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.ALOLA_GOLEM])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.RELICANTH, Species.CARBINK])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.LYCANROC], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.formIndex = 1; + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.ACEROLA]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["ACEROLA"], false, PokemonType.GHOST) - .setMixedBattleBgm("battle_alola_elite"), + .initForEliteFour(signatureSpecies["ACEROLA"], false, PokemonType.GHOST, 2) + .setMixedBattleBgm("battle_alola_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.DRIFBLIM])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.MIMIKYU])) // Tera Ghost Mimikyu + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.DHELMISE])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.FROSLASS])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.PALOSSAND], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.KAHILI]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["KAHILI"], false, PokemonType.FLYING) - .setMixedBattleBgm("battle_alola_elite"), + .initForEliteFour(signatureSpecies["KAHILI"], false, PokemonType.FLYING, 2) + .setMixedBattleBgm("battle_alola_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.HAWLUCHA])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.DECIDUEYE], TrainerSlot.TRAINER, true, p => { // Tera Flying Decidueye + p.generateAndPopulateMoveset(); + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.BRAVE_BIRD)) { // Check if Brave Bird is in the moveset, if not, replace the third move with Brave Bird. + p.moveset[2] = new PokemonMove(Moves.BRAVE_BIRD); + } + }), + ) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.BRAVIARY, Species.MANDIBUZZ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ORICORIO])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.TOUCANNON], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.MARNIE_ELITE]: new TrainerConfig(++t) .setName("Marnie") - .initForEliteFour(signatureSpecies["MARNIE_ELITE"], false, PokemonType.DARK) - .setMixedBattleBgm("battle_galar_elite"), + .initForEliteFour(signatureSpecies["MARNIE_ELITE"], false, PokemonType.DARK, 2) + .setMixedBattleBgm("battle_galar_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.LIEPARD])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.TOXICROAK], TrainerSlot.TRAINER, true, p => { // Tera Dark Toxicroak + p.generateAndPopulateMoveset(); + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.SUCKER_PUNCH)) { + // Check if Sucker Punch is in the moveset, if not, replace the third move with Sucker Punch. + p.moveset[2] = new PokemonMove(Moves.SUCKER_PUNCH); + } + }), + ) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.SCRAFTY, Species.PANGORO])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.MORPEKO])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.GRIMMSNARL], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.NESSA_ELITE]: new TrainerConfig(++t) .setName("Nessa") - .initForEliteFour(signatureSpecies["NESSA_ELITE"], false, PokemonType.WATER) - .setMixedBattleBgm("battle_galar_elite"), + .initForEliteFour(signatureSpecies["NESSA_ELITE"], false, PokemonType.WATER, 2) + .setMixedBattleBgm("battle_galar_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.GOLISOPOD])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.EISCUE], TrainerSlot.TRAINER, true, p => { // Tera Water Eiscue + p.generateAndPopulateMoveset(); + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.LIQUIDATION)) { // Check if Liquidation is in the moveset, if not, replace the third move with Liquidation. + p.moveset[2] = new PokemonMove(Moves.LIQUIDATION); + } + }), + ) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.PELIPPER], TrainerSlot.TRAINER, true, p => { + p.abilityIndex = 1; // Drizzle + p.generateAndPopulateMoveset(); + }), + ) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.TOXAPEX])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.DREDNAW], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.BEA_ELITE]: new TrainerConfig(++t) .setName("Bea") - .initForEliteFour(signatureSpecies["BEA_ELITE"], false, PokemonType.FIGHTING) - .setMixedBattleBgm("battle_galar_elite"), + .initForEliteFour(signatureSpecies["BEA_ELITE"], false, PokemonType.FIGHTING, 2) + .setMixedBattleBgm("battle_galar_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.HAWLUCHA])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SIRFETCHD])) // Tera Fighting Sirfetch'd + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GRAPPLOCT, Species.FALINKS])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.HITMONTOP])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.MACHAMP], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.ALLISTER_ELITE]: new TrainerConfig(++t) .setName("Allister") - .initForEliteFour(signatureSpecies["ALLISTER_ELITE"], true, PokemonType.GHOST) - .setMixedBattleBgm("battle_galar_elite"), + .initForEliteFour(signatureSpecies["ALLISTER_ELITE"], true, PokemonType.GHOST, 2) + .setMixedBattleBgm("battle_galar_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.DUSKNOIR])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.RUNERIGUS])) // Tera Ghost Runerigus + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.POLTEAGEIST, Species.SINISTCHA])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CURSOLA])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.GENGAR], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.RAIHAN_ELITE]: new TrainerConfig(++t) .setName("Raihan") - .initForEliteFour(signatureSpecies["RAIHAN_ELITE"], true, PokemonType.DRAGON) - .setMixedBattleBgm("battle_galar_elite"), + .initForEliteFour(signatureSpecies["RAIHAN_ELITE"], true, PokemonType.DRAGON, 2) + .setMixedBattleBgm("battle_galar_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.FLYGON])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.TORKOAL], TrainerSlot.TRAINER, true, p => { // Tera Dragon Torkoal + p.abilityIndex = 1; // Drought + p.generateAndPopulateMoveset(); + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. + p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); + } + }), + ) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GOODRA])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.TURTONATOR])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.ARCHALUDON], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.RIKA]: new TrainerConfig(++t) .initForEliteFour(signatureSpecies["RIKA"], false, PokemonType.GROUND, 5) - .setMixedBattleBgm("battle_paldea_elite"), + .setMixedBattleBgm("battle_paldea_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.DUGTRIO])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.DONPHAN])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.SWAMPERT, Species.TORTERRA])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CAMERUPT])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.CLODSIRE], TrainerSlot.TRAINER, true, p => { // Tera Ground Clodsire + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.POPPY]: new TrainerConfig(++t) .initForEliteFour(signatureSpecies["POPPY"], false, PokemonType.STEEL, 5) - .setMixedBattleBgm("battle_paldea_elite"), + .setMixedBattleBgm("battle_paldea_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.COPPERAJAH])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.MAGNEZONE])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.BRONZONG, Species.CORVIKNIGHT], TrainerSlot.TRAINER, true, p => { + p.abilityIndex = p.species.speciesId === Species.BRONZONG ? 0 : 1; // Levitate Bronzong, Unnerve Corviknight + p.generateAndPopulateMoveset(); + }), + ) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.STEELIX])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.TINKATON], TrainerSlot.TRAINER, true, p => { // Tera Steel Tinkaton + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.LARRY_ELITE]: new TrainerConfig(++t) .setName("Larry") .initForEliteFour(signatureSpecies["LARRY_ELITE"], true, PokemonType.FLYING, 5) - .setMixedBattleBgm("battle_paldea_elite"), + .setMixedBattleBgm("battle_paldea_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ALTARIA])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.BOMBIRDIER])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.TROPIUS])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.STARAPTOR])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.FLAMIGO], TrainerSlot.TRAINER, true, p => { // Tera Flying Flamigo + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.HASSEL]: new TrainerConfig(++t) .initForEliteFour(signatureSpecies["HASSEL"], true, PokemonType.DRAGON, 5) - .setMixedBattleBgm("battle_paldea_elite"), + .setMixedBattleBgm("battle_paldea_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.NOIVERN])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.DRAGALGE])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.FLAPPLE, Species.APPLETUN, Species.HYDRAPPLE])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.HAXORUS])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.BAXCALIBUR], TrainerSlot.TRAINER, true, p => { // Tera Dragon Baxcalibur + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.CRISPIN]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["CRISPIN"], true, PokemonType.FIRE, 5) - .setMixedBattleBgm("battle_bb_elite"), + .initForEliteFour(signatureSpecies["CRISPIN"], true, PokemonType.FIRE, 2) + .setMixedBattleBgm("battle_bb_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ROTOM], TrainerSlot.TRAINER, true, p => { + p.formIndex = 1; // Heat Rotom + p.generateAndPopulateMoveset(); + }), + ) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.EXEGGUTOR], TrainerSlot.TRAINER, true, p => { // Tera Fire Exeggutor + p.generateAndPopulateMoveset(); + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. + p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); + } + }), + ) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.TALONFLAME], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.SUNNY_DAY)) { // Check if Sunny Day is in the moveset, if not, replace the third move with Sunny Day. + p.moveset[2] = new PokemonMove(Moves.SUNNY_DAY); + } + }), + ) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.MAGMORTAR])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.BLAZIKEN], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.AMARYS]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["AMARYS"], false, PokemonType.STEEL, 5) - .setMixedBattleBgm("battle_bb_elite"), + .initForEliteFour(signatureSpecies["AMARYS"], false, PokemonType.STEEL, 2) + .setMixedBattleBgm("battle_bb_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SKARMORY])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.REUNICLUS], TrainerSlot.TRAINER, true, p => { // Tera Steel Reuniclus + p.generateAndPopulateMoveset(); + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.FLASH_CANNON)) { // Check if Flash Cannon is in the moveset, if not, replace the third move with Flash Cannon. + p.moveset[2] = new PokemonMove(Moves.FLASH_CANNON); + } + }), + ) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.EMPOLEON])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SCIZOR])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.METAGROSS], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.LACEY]: new TrainerConfig(++t) .initForEliteFour(signatureSpecies["LACEY"], false, PokemonType.FAIRY, 5) - .setMixedBattleBgm("battle_bb_elite"), + .setMixedBattleBgm("battle_bb_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.WHIMSICOTT])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.PRIMARINA])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GRANBULL])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ALCREMIE])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.EXCADRILL], TrainerSlot.TRAINER, true, p => { // Tera Fairy Excadrill + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. + p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); + } + }), + ), [TrainerType.DRAYTON]: new TrainerConfig(++t) - .initForEliteFour(signatureSpecies["DRAYTON"], true, PokemonType.DRAGON, 5) - .setMixedBattleBgm("battle_bb_elite"), + .initForEliteFour(signatureSpecies["DRAYTON"], true, PokemonType.DRAGON, 2) + .setMixedBattleBgm("battle_bb_elite") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.DRAGONITE])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SCEPTILE], TrainerSlot.TRAINER, true, p => { // Tera Dragon Sceptile + p.generateAndPopulateMoveset(); + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.DUAL_CHOP)) { // Check if Dual Chop is in the moveset, if not, replace the third move with Dual Chop. + p.moveset[2] = new PokemonMove(Moves.DUAL_CHOP); + } + }), + ) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.HAXORUS])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.KINGDRA, Species.DRACOVISH])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.ARCHALUDON], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + }), + ), [TrainerType.BLUE]: new TrainerConfig((t = TrainerType.BLUE)) .initForChampion(true) @@ -3003,29 +3545,18 @@ export const trainerConfigs: TrainerConfigs = { .setDoubleTitle("champion_double") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ALAKAZAM])) .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.MACHAMP])) - .setPartyMemberFunc( - 2, - getRandomPartyMemberFunc([Species.HO_OH], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.HO_OH], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.RHYPERIOR, Species.ELECTIVIRE, Species.MAGMORTAR])) - .setPartyMemberFunc( - 4, - getRandomPartyMemberFunc( - [Species.ARCANINE, Species.EXEGGUTOR, Species.GYARADOS], - TrainerSlot.TRAINER, - true, - p => { + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.RHYPERIOR, Species.ELECTIVIRE])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ARCANINE, Species.EXEGGUTOR, Species.GYARADOS], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.setBoss(true, 2); - }, - ), + }), ) - .setPartyMemberFunc( - 5, - getRandomPartyMemberFunc([Species.PIDGEOT], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.PIDGEOT], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Pidgeot p.generateAndPopulateMoveset(); p.generateName(); @@ -3040,9 +3571,7 @@ export const trainerConfigs: TrainerConfigs = { .setHasDouble("red_blue_double") .setDoubleTrainerType(TrainerType.BLUE) .setDoubleTitle("champion_double") - .setPartyMemberFunc( - 0, - getRandomPartyMemberFunc([Species.PIKACHU], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PIKACHU], TrainerSlot.TRAINER, true, p => { p.formIndex = 8; // G-Max Pikachu p.generateAndPopulateMoveset(); p.generateName(); @@ -3050,34 +3579,24 @@ export const trainerConfigs: TrainerConfigs = { }), ) .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.ESPEON, Species.UMBREON, Species.SYLVEON])) - .setPartyMemberFunc( - 2, - getRandomPartyMemberFunc([Species.LUGIA], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.LUGIA], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR])) - .setPartyMemberFunc( - 4, - getRandomPartyMemberFunc([Species.SNORLAX], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SNORLAX], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.setBoss(true, 2); }), ) - .setPartyMemberFunc( - 5, - getRandomPartyMemberFunc( - [Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE], - TrainerSlot.TRAINER, - true, - p => { + .setPartyMemberFunc(5, getRandomPartyMemberFunc( + [Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Venusaur, Mega Charizard X, or Mega Blastoise p.generateAndPopulateMoveset(); p.generateName(); p.gender = Gender.MALE; - }, - ), + }), ) .setInstantTera(3), // Tera Grass Meganium / Fire Typhlosion / Water Feraligatr [TrainerType.LANCE_CHAMPION]: new TrainerConfig(++t) @@ -3087,25 +3606,20 @@ export const trainerConfigs: TrainerConfigs = { .setMixedBattleBgm("battle_johto_champion") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.GYARADOS, Species.KINGDRA])) .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.AERODACTYL])) - .setPartyMemberFunc( - 2, - getRandomPartyMemberFunc([Species.SALAMENCE], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SALAMENCE], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Salamence p.generateAndPopulateMoveset(); p.generateName(); }), ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.CHARIZARD])) - .setPartyMemberFunc( - 4, - getRandomPartyMemberFunc([Species.TYRANITAR, Species.GARCHOMP, Species.KOMMO_O], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.TYRANITAR, Species.GARCHOMP, Species.KOMMO_O], TrainerSlot.TRAINER, true, p => { p.teraType = PokemonType.DRAGON; + p.generateAndPopulateMoveset(); p.abilityIndex = p.species.speciesId === Species.KOMMO_O ? 1 : 2; // Soundproof Kommo-o, Unnerve Tyranitar, Rough Skin Garchomp }), ) - .setPartyMemberFunc( - 5, - getRandomPartyMemberFunc([Species.DRAGONITE], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.DRAGONITE], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; p.setBoss(true, 2); @@ -3121,24 +3635,18 @@ export const trainerConfigs: TrainerConfigs = { .setDoubleTitle("champion_double") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SKARMORY])) .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.CRADILY, Species.ARMALDO])) - .setPartyMemberFunc( - 2, - getRandomPartyMemberFunc([Species.AGGRON], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.AGGRON], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.setBoss(true, 2); }), ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GOLURK, Species.RUNERIGUS])) - .setPartyMemberFunc( - 4, - getRandomPartyMemberFunc([Species.REGIROCK, Species.REGICE, Species.REGISTEEL], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.REGIROCK, Species.REGICE, Species.REGISTEEL], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), ) - .setPartyMemberFunc( - 5, - getRandomPartyMemberFunc([Species.METAGROSS], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.METAGROSS], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Metagross p.generateAndPopulateMoveset(); p.generateName(); @@ -3152,17 +3660,13 @@ export const trainerConfigs: TrainerConfigs = { .setHasDouble("wallace_steven_double") .setDoubleTrainerType(TrainerType.STEVEN) .setDoubleTitle("champion_double") - .setPartyMemberFunc( - 0, - getRandomPartyMemberFunc([Species.PELIPPER], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PELIPPER], TrainerSlot.TRAINER, true, p => { p.abilityIndex = 1; // Drizzle p.generateAndPopulateMoveset(); }), ) .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.LUDICOLO])) - .setPartyMemberFunc( - 2, - getRandomPartyMemberFunc([Species.LATIAS, Species.LATIOS], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.LATIAS, Species.LATIOS], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Latios or Mega Latias p.generateAndPopulateMoveset(); p.generateName(); @@ -3170,16 +3674,12 @@ export const trainerConfigs: TrainerConfigs = { }), ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.SWAMPERT, Species.GASTRODON, Species.SEISMITOAD])) - .setPartyMemberFunc( - 4, - getRandomPartyMemberFunc([Species.REGIELEKI, Species.REGIDRAGO], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.REGIELEKI, Species.REGIDRAGO], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), ) - .setPartyMemberFunc( - 5, - getRandomPartyMemberFunc([Species.MILOTIC], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.MILOTIC], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.FEMALE; p.setBoss(true, 2); @@ -3190,41 +3690,24 @@ export const trainerConfigs: TrainerConfigs = { .initForChampion(false) .setBattleBgm("battle_sinnoh_champion") .setMixedBattleBgm("battle_sinnoh_champion") - .setPartyMemberFunc( - 0, - getRandomPartyMemberFunc([Species.SPIRITOMB], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - }), - ) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SPIRITOMB])) .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.LUCARIO])) - .setPartyMemberFunc( - 2, - getRandomPartyMemberFunc([Species.GIRATINA], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.GIRATINA], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) - .setPartyMemberFunc( - 3, - getRandomPartyMemberFunc( - [Species.MILOTIC, Species.ROSERADE, Species.HISUI_ARCANINE], - TrainerSlot.TRAINER, - true, - p => { - p.teraType = p.species.type1; - }, - ), + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.MILOTIC, Species.ROSERADE, Species.HISUI_ARCANINE], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.teraType = p.species.type1; + }), ) - .setPartyMemberFunc( - 4, - getRandomPartyMemberFunc([Species.TOGEKISS], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.TOGEKISS], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.setBoss(true, 2); }), ) - .setPartyMemberFunc( - 5, - getRandomPartyMemberFunc([Species.GARCHOMP], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.GARCHOMP], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Garchomp p.generateAndPopulateMoveset(); p.generateName(); @@ -3240,46 +3723,28 @@ export const trainerConfigs: TrainerConfigs = { .setBattleBgm("battle_champion_alder") .setMixedBattleBgm("battle_champion_alder") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.BOUFFALANT, Species.BRAVIARY])) - .setPartyMemberFunc( - 1, - getRandomPartyMemberFunc( - [Species.HISUI_LILLIGANT, Species.HISUI_ZOROARK, Species.BASCULEGION], - TrainerSlot.TRAINER, - true, - p => { + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.HISUI_LILLIGANT, Species.HISUI_ZOROARK, Species.BASCULEGION], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ROGUE_BALL; - }, - ), + }), ) - .setPartyMemberFunc( - 2, - getRandomPartyMemberFunc([Species.ZEKROM], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.ZEKROM], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) - .setPartyMemberFunc( - 3, - getRandomPartyMemberFunc([Species.KELDEO], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.KELDEO], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), ) - .setPartyMemberFunc( - 4, - getRandomPartyMemberFunc( - [Species.CHANDELURE, Species.KROOKODILE, Species.REUNICLUS, Species.CONKELDURR], - TrainerSlot.TRAINER, - true, - p => { - p.teraType = p.species.speciesId === Species.KROOKODILE ? PokemonType.DARK : p.species.type1; - }, - ), + .setPartyMemberFunc(4, getRandomPartyMemberFunc( + [Species.CHANDELURE, Species.KROOKODILE, Species.REUNICLUS, Species.CONKELDURR], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.teraType = p.species.speciesId === Species.KROOKODILE ? PokemonType.DARK : p.species.type1; + }), ) - .setPartyMemberFunc( - 5, - getRandomPartyMemberFunc([Species.VOLCARONA], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.VOLCARONA], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; p.setBoss(true, 2); @@ -3295,35 +3760,23 @@ export const trainerConfigs: TrainerConfigs = { .setDoubleTitle("champion_double") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.DRUDDIGON])) .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.ARCHEOPS])) - .setPartyMemberFunc( - 2, - getRandomPartyMemberFunc([Species.RESHIRAM], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.RESHIRAM], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) - .setPartyMemberFunc( - 3, - getRandomPartyMemberFunc( - [Species.SALAMENCE, Species.HYDREIGON, Species.ARCHALUDON], - TrainerSlot.TRAINER, - true, - p => { - p.teraType = PokemonType.DRAGON; - }, - ), + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.SALAMENCE, Species.HYDREIGON, Species.ARCHALUDON], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.teraType = PokemonType.DRAGON; + }), ) - .setPartyMemberFunc( - 4, - getRandomPartyMemberFunc([Species.LAPRAS], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.LAPRAS], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // G-Max Lapras p.generateAndPopulateMoveset(); p.generateName(); }), ) - .setPartyMemberFunc( - 5, - getRandomPartyMemberFunc([Species.HAXORUS], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.HAXORUS], TrainerSlot.TRAINER, true, p => { p.abilityIndex = 1; // Mold Breaker p.generateAndPopulateMoveset(); p.gender = Gender.FEMALE; @@ -3334,38 +3787,28 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.DIANTHA]: new TrainerConfig(++t) .initForChampion(false) .setMixedBattleBgm("battle_kalos_champion") - .setPartyMemberFunc( - 0, - getRandomPartyMemberFunc([Species.HAWLUCHA], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.HAWLUCHA], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); }), ) .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.TREVENANT, Species.GOURGEIST])) - .setPartyMemberFunc( - 2, - getRandomPartyMemberFunc([Species.XERNEAS], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.XERNEAS], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) - .setPartyMemberFunc( - 3, - getRandomPartyMemberFunc([Species.TYRANTRUM, Species.AURORUS], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.TYRANTRUM, Species.AURORUS], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.abilityIndex = 2; // Rock Head Tyrantrum, Snow Warning Aurorus p.teraType = p.species.type2!; }), ) - .setPartyMemberFunc( - 4, - getRandomPartyMemberFunc([Species.GOODRA], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.GOODRA], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.setBoss(true, 2); }), ) - .setPartyMemberFunc( - 5, - getRandomPartyMemberFunc([Species.GARDEVOIR], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.GARDEVOIR], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Gardevoir p.generateAndPopulateMoveset(); p.generateName(); @@ -3376,45 +3819,29 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.KUKUI]: new TrainerConfig(++t) .initForChampion(true) .setMixedBattleBgm("battle_champion_kukui") - .setPartyMemberFunc( - 0, - getRandomPartyMemberFunc([Species.LYCANROC], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.LYCANROC], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.formIndex = 2; // Dusk Lycanroc }), ) .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.MAGNEZONE, Species.ALOLA_NINETALES])) - .setPartyMemberFunc( - 2, - getRandomPartyMemberFunc( - [Species.TORNADUS, Species.THUNDURUS, Species.LANDORUS], - TrainerSlot.TRAINER, - true, - p => { - p.formIndex = 1; // Therian Formes + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.TORNADUS, Species.THUNDURUS, Species.LANDORUS], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Therian Formes p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; - }, - ), + }), ) - .setPartyMemberFunc( - 3, - getRandomPartyMemberFunc([Species.TAPU_KOKO, Species.TAPU_FINI], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.TAPU_KOKO, Species.TAPU_FINI], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.setBoss(true, 2); p.pokeball = PokeballType.ULTRA_BALL; }), ) - .setPartyMemberFunc( - 4, - getRandomPartyMemberFunc([Species.SNORLAX], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SNORLAX], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.formIndex = 1; // G-Max Snorlax }), ) - .setPartyMemberFunc( - 5, - getRandomPartyMemberFunc([Species.INCINEROAR, Species.HISUI_DECIDUEYE], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.INCINEROAR, Species.HISUI_DECIDUEYE], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; p.teraType = p.species.type2!; @@ -3424,39 +3851,26 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.HAU]: new TrainerConfig(++t) .initForChampion(true) .setMixedBattleBgm("battle_alola_champion") - .setPartyMemberFunc( - 0, - getRandomPartyMemberFunc([Species.ALOLA_RAICHU], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - }), - ) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ALOLA_RAICHU])) .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.NOIVERN])) - .setPartyMemberFunc( - 2, - getRandomPartyMemberFunc([Species.SOLGALEO], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SOLGALEO], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) - .setPartyMemberFunc( - 3, - getRandomPartyMemberFunc([Species.TAPU_LELE, Species.TAPU_BULU], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.TAPU_LELE, Species.TAPU_BULU], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.teraType = p.species.type1; }), ) - .setPartyMemberFunc( - 4, - getRandomPartyMemberFunc([Species.ZYGARDE], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ZYGARDE], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Zygarde 10% forme, Aura Break p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ROGUE_BALL; }), ) - .setPartyMemberFunc( - 5, - getRandomPartyMemberFunc([Species.DECIDUEYE, Species.PRIMARINA], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.DECIDUEYE, Species.PRIMARINA], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.setBoss(true, 2); p.gender = p.species.speciesId === Species.PRIMARINA ? Gender.FEMALE : Gender.MALE; @@ -3466,36 +3880,20 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.LEON]: new TrainerConfig(++t) .initForChampion(true) .setMixedBattleBgm("battle_galar_champion") - .setPartyMemberFunc( - 0, - getRandomPartyMemberFunc([Species.AEGISLASH], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - }), - ) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.AEGISLASH])) .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.RHYPERIOR, Species.SEISMITOAD, Species.MR_RIME])) - .setPartyMemberFunc( - 2, - getRandomPartyMemberFunc([Species.ZACIAN], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.ZACIAN], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.DRAGAPULT])) - .setPartyMemberFunc( - 4, - getRandomPartyMemberFunc( - [Species.RILLABOOM, Species.CINDERACE, Species.INTELEON], - TrainerSlot.TRAINER, - true, - p => { + .setPartyMemberFunc(4,getRandomPartyMemberFunc([Species.RILLABOOM, Species.CINDERACE, Species.INTELEON], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.setBoss(true, 2); - }, - ), + }), ) - .setPartyMemberFunc( - 5, - getRandomPartyMemberFunc([Species.CHARIZARD], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.CHARIZARD], TrainerSlot.TRAINER, true, p => { p.formIndex = 3; // G-Max Charizard p.generateAndPopulateMoveset(); p.generateName(); @@ -3506,46 +3904,34 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.MUSTARD]: new TrainerConfig(++t) .initForChampion(true) .setMixedBattleBgm("battle_mustard") - .setPartyMemberFunc( - 0, - getRandomPartyMemberFunc([Species.CORVIKNIGHT], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.CORVIKNIGHT], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), ) - .setPartyMemberFunc( - 1, - getRandomPartyMemberFunc([Species.KOMMO_O], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.KOMMO_O], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), ) - .setPartyMemberFunc( - 2, - getRandomPartyMemberFunc([Species.GALAR_SLOWBRO, Species.GALAR_SLOWKING], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.GALAR_SLOWBRO, Species.GALAR_SLOWKING], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; - p.teraType = PokemonType.PSYCHIC; + p.teraType = p.species.type1; }), ) - .setPartyMemberFunc( - 3, - getRandomPartyMemberFunc([Species.GALAR_DARMANITAN], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GALAR_DARMANITAN], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), ) - .setPartyMemberFunc( - 4, - getRandomPartyMemberFunc([Species.BLASTOISE, Species.VENUSAUR], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.BLASTOISE, Species.VENUSAUR], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.setBoss(true, 2); p.pokeball = PokeballType.ULTRA_BALL; }), ) - .setPartyMemberFunc( - 5, - getRandomPartyMemberFunc([Species.URSHIFU], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.URSHIFU], TrainerSlot.TRAINER, true, p => { p.formIndex = randSeedInt(2, 2); // Random G-Max Urshifu p.generateAndPopulateMoveset(); p.generateName(); @@ -3553,32 +3939,30 @@ export const trainerConfigs: TrainerConfigs = { p.pokeball = PokeballType.ULTRA_BALL; }), ) - .setInstantTera(2), // Tera Psychic Galar-Slowbro / Galar-Slowking + .setInstantTera(2), // Tera Poison Galar-Slowbro / Galar-Slowking [TrainerType.GEETA]: new TrainerConfig(++t) .initForChampion(false) .setMixedBattleBgm("battle_champion_geeta") - .setPartyMemberFunc( - 0, - getRandomPartyMemberFunc([Species.GLIMMORA], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.GLIMMORA], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; p.setBoss(true, 2); }), ) .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.ESPATHRA, Species.VELUZA])) - .setPartyMemberFunc( - 2, - getRandomPartyMemberFunc([Species.MIRAIDON], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.MIRAIDON], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.BAXCALIBUR])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA])) - .setPartyMemberFunc( - 5, - getRandomPartyMemberFunc([Species.KINGAMBIT], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.KINGAMBIT], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { + // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. + p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); + } p.abilityIndex = 1; // Supreme Overlord p.teraType = PokemonType.FLYING; }), @@ -3587,75 +3971,50 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.NEMONA]: new TrainerConfig(++t) .initForChampion(false) .setMixedBattleBgm("battle_champion_nemona") - .setPartyMemberFunc( - 0, - getRandomPartyMemberFunc([Species.LYCANROC], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.LYCANROC], TrainerSlot.TRAINER, true, p => { p.formIndex = 0; // Midday form p.generateAndPopulateMoveset(); }), ) .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PAWMOT])) - .setPartyMemberFunc( - 2, - getRandomPartyMemberFunc([Species.KORAIDON], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.KORAIDON], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GHOLDENGO])) - .setPartyMemberFunc( - 4, - getRandomPartyMemberFunc([Species.ARMAROUGE, Species.CERULEDGE], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ARMAROUGE, Species.CERULEDGE], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); p.teraType = p.species.type2!; }), ) - .setPartyMemberFunc( - 5, - getRandomPartyMemberFunc( - [Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], - TrainerSlot.TRAINER, - true, - p => { + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; p.setBoss(true, 2); - }, - ), + }), ) .setInstantTera(4), // Tera Psychic Armarouge / Ghost Ceruledge [TrainerType.KIERAN]: new TrainerConfig(++t) .initForChampion(true) .setMixedBattleBgm("battle_champion_kieran") - .setPartyMemberFunc( - 0, - getRandomPartyMemberFunc([Species.POLIWRATH, Species.POLITOED], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - }), - ) - .setPartyMemberFunc( - 1, - getRandomPartyMemberFunc([Species.INCINEROAR, Species.GRIMMSNARL], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.POLIWRATH, Species.POLITOED])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.INCINEROAR, Species.GRIMMSNARL], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.abilityIndex = p.species.speciesId === Species.INCINEROAR ? 2 : 0; // Intimidate Incineroar, Prankster Grimmsnarl }), ) - .setPartyMemberFunc( - 2, - getRandomPartyMemberFunc([Species.TERAPAGOS], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.TERAPAGOS], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) - .setPartyMemberFunc( - 3, - getRandomPartyMemberFunc([Species.URSALUNA, Species.BLOODMOON_URSALUNA], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.URSALUNA, Species.BLOODMOON_URSALUNA], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), ) - .setPartyMemberFunc( - 4, - getRandomPartyMemberFunc([Species.OGERPON], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.OGERPON], TrainerSlot.TRAINER, true, p => { p.formIndex = randSeedInt(4); // Random Ogerpon Tera Mask p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; @@ -3665,9 +4024,7 @@ export const trainerConfigs: TrainerConfigs = { } }), ) - .setPartyMemberFunc( - 5, - getRandomPartyMemberFunc([Species.HYDRAPPLE], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.HYDRAPPLE], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; p.setBoss(true, 2); @@ -4830,7 +5187,7 @@ export const trainerConfigs: TrainerConfigs = { p.pokeball = PokeballType.ULTRA_BALL; p.formIndex = randSeedInt(4, 1); // Shock, Burn, Chill, or Douse Drive if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TECHNO_BLAST)) { - // Check if Techno Blast is in the moveset, if not, replace the first move with Techno Blast. + // Check if Techno Blast is in the moveset, if not, replace the third move with Techno Blast. p.moveset[2] = new PokemonMove(Moves.TECHNO_BLAST); } }), From 217fbe027a2abce73e4dd22ecab038ba31b9b868 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Mon, 28 Apr 2025 14:33:19 -0700 Subject: [PATCH 072/262] [Test] Replace Axew with Feebas in some Illusion tests (#5727) * [Test] Replace Axew with Feebas in some Illusion tests * Fix test command in `package.json` --- package.json | 2 +- test/abilities/illusion.test.ts | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 341bca80c2e..938d362f263 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "build": "vite build", "build:beta": "vite build --mode beta", "preview": "vite preview", - "test": "vitest run", + "test": "vitest run --no-isolate", "test:cov": "vitest run --coverage --no-isolate", "test:watch": "vitest watch --coverage --no-isolate", "test:silent": "vitest run --silent --no-isolate", diff --git a/test/abilities/illusion.test.ts b/test/abilities/illusion.test.ts index c743a59ef00..1d8ce58ab38 100644 --- a/test/abilities/illusion.test.ts +++ b/test/abilities/illusion.test.ts @@ -23,18 +23,18 @@ describe("Abilities - Illusion", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.enemySpecies(Species.ZORUA); - game.override.enemyAbility(Abilities.ILLUSION); - game.override.enemyMoveset(Moves.TACKLE); - game.override.enemyHeldItems([{ name: "WIDE_LENS", count: 3 }]); - - game.override.moveset([Moves.WORRY_SEED, Moves.SOAK, Moves.TACKLE]); - game.override.startingHeldItems([{ name: "WIDE_LENS", count: 3 }]); + game.override + .battleStyle("single") + .enemySpecies(Species.ZORUA) + .enemyAbility(Abilities.ILLUSION) + .enemyMoveset(Moves.TACKLE) + .enemyHeldItems([{ name: "WIDE_LENS", count: 3 }]) + .moveset([Moves.WORRY_SEED, Moves.SOAK, Moves.TACKLE]) + .startingHeldItems([{ name: "WIDE_LENS", count: 3 }]); }); it("creates illusion at the start", async () => { - await game.classicMode.startBattle([Species.ZOROARK, Species.AXEW]); + await game.classicMode.startBattle([Species.ZOROARK, Species.FEEBAS]); const zoroark = game.scene.getPlayerPokemon()!; const zorua = game.scene.getEnemyPokemon()!; @@ -43,7 +43,7 @@ describe("Abilities - Illusion", () => { }); it("break after receiving damaging move", async () => { - await game.classicMode.startBattle([Species.AXEW]); + await game.classicMode.startBattle([Species.FEEBAS]); game.move.select(Moves.TACKLE); await game.phaseInterceptor.to("TurnEndPhase"); @@ -55,7 +55,7 @@ describe("Abilities - Illusion", () => { }); it("break after getting ability changed", async () => { - await game.classicMode.startBattle([Species.AXEW]); + await game.classicMode.startBattle([Species.FEEBAS]); game.move.select(Moves.WORRY_SEED); await game.phaseInterceptor.to("TurnEndPhase"); @@ -76,7 +76,7 @@ describe("Abilities - Illusion", () => { it("causes enemy AI to consider the illusion's type instead of the actual type when considering move effectiveness", async () => { game.override.enemyMoveset([Moves.FLAMETHROWER, Moves.PSYCHIC, Moves.TACKLE]); - await game.classicMode.startBattle([Species.ZOROARK, Species.AXEW]); + await game.classicMode.startBattle([Species.ZOROARK, Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon()!; const zoroark = game.scene.getPlayerPokemon()!; From 34670fd9213cc950cea7d045e453a0d00e0bcbc5 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Mon, 28 Apr 2025 22:53:01 -0500 Subject: [PATCH 073/262] [Bug] Only moves will show the explicit status immunity effect (#5728) * Add quiet parameter to trySetStatus * Make quiet default to false --- src/data/moves/move.ts | 2 +- src/field/pokemon.ts | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index bc047762fb6..6f854a3bbd8 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -2463,7 +2463,7 @@ export class StatusEffectAttr extends MoveEffectAttr { return false; } if (((!pokemon.status || this.overrideStatus) || (pokemon.status.effect === this.effect && moveChance < 0)) - && pokemon.trySetStatus(this.effect, true, user, this.turnsRemaining, null, this.overrideStatus)) { + && pokemon.trySetStatus(this.effect, true, user, this.turnsRemaining, null, this.overrideStatus, false)) { applyPostAttackAbAttrs(ConfusionOnStatusEffectAbAttr, user, target, move, null, false, this.effect); return true; } diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index f6810ad38e1..492856b4b52 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -5529,9 +5529,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { sourcePokemon: Pokemon | null = null, turnsRemaining = 0, sourceText: string | null = null, - overrideStatus?: boolean + overrideStatus?: boolean, + quiet = true, ): boolean { - if (!this.canSetStatus(effect, false, overrideStatus, sourcePokemon)) { + if (!this.canSetStatus(effect, quiet, overrideStatus, sourcePokemon)) { return false; } if (this.isFainted() && effect !== StatusEffect.FAINT) { From 9a9759d31cd1cf376d52b9d7bd8ac02cb84c8897 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Tue, 29 Apr 2025 17:27:40 -0400 Subject: [PATCH 074/262] [Balance] Fix Basculin white stripe moveset (#5729) * Fix Basculin moveset and TMs --- src/data/balance/pokemon-level-moves.ts | 38 +++++++++++++++++++++++++ src/data/balance/tms.ts | 18 ++++++++++-- 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/src/data/balance/pokemon-level-moves.ts b/src/data/balance/pokemon-level-moves.ts index dcbc2fb0c0d..0b0ba1b5f71 100644 --- a/src/data/balance/pokemon-level-moves.ts +++ b/src/data/balance/pokemon-level-moves.ts @@ -19383,6 +19383,44 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { [ 100, Moves.SEED_FLARE ], ] }, + [Species.BASCULIN]: { + 1: [ + [ 1, Moves.TAIL_WHIP ], + [ 1, Moves.WATER_GUN ], + [ 4, Moves.TACKLE ], + [ 8, Moves.FLAIL ], + [ 12, Moves.AQUA_JET ], + [ 16, Moves.BITE ], + [ 20, Moves.SCARY_FACE ], + [ 24, Moves.HEADBUTT ], + [ 28, Moves.SOAK ], + [ 32, Moves.CRUNCH ], + [ 36, Moves.TAKE_DOWN ], + [ 40, Moves.FINAL_GAMBIT ], + [ 44, Moves.WAVE_CRASH ], + [ 48, Moves.THRASH ], + [ 52, Moves.DOUBLE_EDGE ], + [ 56, Moves.HEAD_SMASH ], + ], + 2: [ + [ 1, Moves.TAIL_WHIP ], + [ 1, Moves.WATER_GUN ], + [ 4, Moves.TACKLE ], + [ 8, Moves.FLAIL ], + [ 12, Moves.AQUA_JET ], + [ 16, Moves.BITE ], + [ 20, Moves.SCARY_FACE ], + [ 24, Moves.HEADBUTT ], + [ 28, Moves.SOAK ], + [ 32, Moves.CRUNCH ], + [ 36, Moves.TAKE_DOWN ], + [ 40, Moves.UPROAR ], + [ 44, Moves.WAVE_CRASH ], + [ 48, Moves.THRASH ], + [ 52, Moves.DOUBLE_EDGE ], + [ 56, Moves.HEAD_SMASH ], + ] + }, [Species.KYUREM]: { 1: [ [ 1, Moves.DRAGON_BREATH ], diff --git a/src/data/balance/tms.ts b/src/data/balance/tms.ts index 62199fd6968..69aef9b135d 100644 --- a/src/data/balance/tms.ts +++ b/src/data/balance/tms.ts @@ -5724,7 +5724,6 @@ export const tmSpecies: TmSpecies = { Species.SCOLIPEDE, Species.WHIMSICOTT, Species.LILLIGANT, - Species.BASCULIN, Species.KROOKODILE, Species.DARMANITAN, Species.CRUSTLE, @@ -6023,6 +6022,11 @@ export const tmSpecies: TmSpecies = { Species.HISUI_DECIDUEYE, Species.PALDEA_TAUROS, Species.BLOODMOON_URSALUNA, + [ + Species.BASCULIN, + "blue-striped", + "red-striped", + ] ], [Moves.LOW_KICK]: [ Species.SANDSHREW, @@ -19335,7 +19339,6 @@ export const tmSpecies: TmSpecies = { Species.CONKELDURR, Species.THROH, Species.SAWK, - Species.BASCULIN, Species.DARMANITAN, Species.SCRAFTY, Species.ESCAVALIER, @@ -19449,6 +19452,11 @@ export const tmSpecies: TmSpecies = { Species.HISUI_BRAVIARY, Species.HISUI_DECIDUEYE, Species.PALDEA_TAUROS, + [ + Species.BASCULIN, + "blue-striped", + "red-striped", + ], ], [Moves.SPITE]: [ Species.EKANS, @@ -51341,7 +51349,6 @@ export const tmSpecies: TmSpecies = { Species.SCOLIPEDE, Species.WHIMSICOTT, Species.LILLIGANT, - Species.BASCULIN, Species.KROOKODILE, Species.DARMANITAN, Species.CRUSTLE, @@ -51655,6 +51662,11 @@ export const tmSpecies: TmSpecies = { Species.HISUI_DECIDUEYE, Species.PALDEA_TAUROS, Species.BLOODMOON_URSALUNA, + [ + Species.BASCULIN, + "blue-striped", + "red-striped", + ], ], [Moves.NASTY_PLOT]: [ Species.PIKACHU, From 43d73b01b1023509e48c12142367234965fe0ba3 Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Tue, 29 Apr 2025 19:21:28 -0400 Subject: [PATCH 075/262] [Code] Added and enforced `no-fallthrough` + added eslint type checking (#5705) * Added and enforced `no-fallthrough` * Fixed errors * Fix package.json * Moved vule to biom * Fixed stuff * Added workspace files to .gitignore for anyone who wants to do this stuff * reverted accidental gitignore changes * Update biome.jsonc Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> * Update biome.jsonc Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> * Update pokemon-species.ts * Update biome.jsonc to apply reviews * Fixed package.json * Fix typo --------- Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- biome.jsonc | 20 +++++++++++++------- eslint.config.js | 14 +++++++------- public/locales | 2 +- src/data/moves/move.ts | 8 ++++---- src/data/pokemon-species.ts | 1 + src/data/weather.ts | 1 + src/system/settings/settings.ts | 1 + src/ui-inputs.ts | 4 +++- tsconfig.json | 2 +- 9 files changed, 32 insertions(+), 21 deletions(-) diff --git a/biome.jsonc b/biome.jsonc index 9d0e6a9b5ff..a433470cd90 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -38,6 +38,9 @@ "src/data/balance/tms.ts" ] }, + + // While it'd be nice to enable consistent sorting, enabling this causes issues due to circular import resolution order + // TODO: Remove if we ever get down to 0 circular imports "organizeImports": { "enabled": false }, "linter": { "ignore": [ @@ -55,13 +58,13 @@ }, "style": { "noVar": "error", - "useEnumInitializers": "off", + "useEnumInitializers": "off", // large enums like Moves/Species would make this cumbersome "useBlockStatements": "error", "useConst": "error", "useImportType": "error", - "noNonNullAssertion": "off", // TODO: Turn this on ASAP and fix all non-null assertions + "noNonNullAssertion": "off", // TODO: Turn this on ASAP and fix all non-null assertions in non-test files "noParameterAssign": "off", - "useExponentiationOperator": "off", + "useExponentiationOperator": "off", // Too typo-prone and easy to mixup with standard multiplication (* vs **) "useDefaultParameterLast": "off", // TODO: Fix spots in the codebase where this flag would be triggered, and then enable "useSingleVarDeclarator": "off", "useNodejsImportProtocol": "off", @@ -70,17 +73,20 @@ }, "suspicious": { "noDoubleEquals": "error", + // While this would be a nice rule to enable, the current structure of the codebase makes this infeasible + // due to being used for move/ability `args` params and save data-related code. + // This can likely be enabled for all non-utils files once these are eventually reworked, but until then we leave it off. "noExplicitAny": "off", "noAssignInExpressions": "off", "noPrototypeBuiltins": "off", - "noFallthroughSwitchClause": "off", - "noImplicitAnyLet": "info", // TODO: Refactor and make this an error - "noRedeclare": "off", // TODO: Refactor and make this an error + "noFallthroughSwitchClause": "error", // Prevents accidental automatic fallthroughs in switch cases (use disable comment if needed) + "noImplicitAnyLet": "warn", // TODO: Refactor and make this an error + "noRedeclare": "info", // TODO: Refactor and make this an error "noGlobalIsNan": "off", "noAsyncPromiseExecutor": "warn" // TODO: Refactor and make this an error }, "complexity": { - "noExcessiveCognitiveComplexity": "warn", + "noExcessiveCognitiveComplexity": "warn", // TODO: Refactor and make this an error "useLiteralKeys": "off", "noForEach": "off", // Foreach vs for of is not that simple. "noUselessSwitchCase": "off", // Explicit > Implicit diff --git a/eslint.config.js b/eslint.config.js index a97e3902411..aebcab7feae 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,9 +1,10 @@ -import tseslint from "@typescript-eslint/eslint-plugin"; +/** @ts-check */ +import tseslint from "typescript-eslint"; import stylisticTs from "@stylistic/eslint-plugin-ts"; import parser from "@typescript-eslint/parser"; import importX from "eslint-plugin-import-x"; -export default [ +export default tseslint.config( { name: "eslint-config", files: ["src/**/*.{ts,tsx,js,jsx}", "test/**/*.{ts,tsx,js,jsx}"], @@ -14,12 +15,11 @@ export default [ plugins: { "import-x": importX, "@stylistic/ts": stylisticTs, - "@typescript-eslint": tseslint, + "@typescript-eslint": tseslint.plugin, }, rules: { - "prefer-const": "error", // Enforces the use of `const` for variables that are never reassigned "no-undef": "off", // Disables the rule that disallows the use of undeclared variables (TypeScript handles this) - "no-extra-semi": ["error"], // Disallows unnecessary semicolons for TypeScript-specific syntax + "no-extra-semi": "error", // Disallows unnecessary semicolons for TypeScript-specific syntax "import-x/extensions": ["error", "never", { json: "always" }], // Enforces no extension for imports unless json }, }, @@ -33,11 +33,11 @@ export default [ }, }, plugins: { - "@typescript-eslint": tseslint, + "@typescript-eslint": tseslint.plugin, }, rules: { "@typescript-eslint/no-floating-promises": "error", // Require Promise-like statements to be handled appropriately. - https://typescript-eslint.io/rules/no-floating-promises/ "@typescript-eslint/no-misused-promises": "error", // Disallow Promises in places not designed to handle them. - https://typescript-eslint.io/rules/no-misused-promises/ }, }, -]; +); diff --git a/public/locales b/public/locales index 18c1963ef30..e98f0eb9c20 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit 18c1963ef309612a5a7fef76f9879709a7202189 +Subproject commit e98f0eb9c2022bc78b53f0444424c636498e725a diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 6f854a3bbd8..9b8703d6e85 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -652,7 +652,7 @@ export default class Move implements Localizable { break; case MoveFlags.IGNORE_ABILITIES: if (user.hasAbilityWithAttr(MoveAbilityBypassAbAttr)) { - const abilityEffectsIgnored = new BooleanHolder(false); + const abilityEffectsIgnored = new BooleanHolder(false); applyAbAttrs(MoveAbilityBypassAbAttr, user, abilityEffectsIgnored, false, this); if (abilityEffectsIgnored.value) { return true; @@ -3160,7 +3160,7 @@ export class StatStageChangeAttr extends MoveEffectAttr { private get showMessage () { return this.options?.showMessage ?? true; } - + /** * Attempts to change stats of the user or target (depending on value of selfTarget) if conditions are met * @param user {@linkcode Pokemon} the user of the move @@ -6326,11 +6326,11 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { if (!allyPokemon?.isActive(true) && switchOutTarget.hp) { globalScene.pushPhase(new BattleEndPhase(false)); - + if (globalScene.gameMode.hasRandomBiomes || globalScene.isNewBiome()) { globalScene.pushPhase(new SelectBiomePhase()); } - + globalScene.pushPhase(new NewBattlePhase()); } } diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 2fff2b562c0..5a9a6ee9b3d 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -488,6 +488,7 @@ export abstract class PokemonSpeciesForm { if (formSpriteKey.startsWith("behemoth")) { formSpriteKey = "crowned"; } + // biome-ignore lint/suspicious/no-fallthrough: Falls through default: ret += `-${formSpriteKey}`; break; diff --git a/src/data/weather.ts b/src/data/weather.ts index 81559304661..be9107798df 100644 --- a/src/data/weather.ts +++ b/src/data/weather.ts @@ -369,6 +369,7 @@ export function getRandomWeatherType(arena: Arena): WeatherType { if (hasSun) { weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 2 }); } + break; case Biome.VOLCANO: weatherPool = [ { diff --git a/src/system/settings/settings.ts b/src/system/settings/settings.ts index 31faf2b6283..8bbba267bd6 100644 --- a/src/system/settings/settings.ts +++ b/src/system/settings/settings.ts @@ -804,6 +804,7 @@ export function setSetting(setting: string, value: number): boolean { break; case SettingKeys.Candy_Upgrade_Display: globalScene.candyUpgradeDisplay = value; + break; case SettingKeys.Money_Format: switch (Setting[index].options[value].value) { case "Normal": diff --git a/src/ui-inputs.ts b/src/ui-inputs.ts index bf4f51e5af7..0c13cdb9512 100644 --- a/src/ui-inputs.ts +++ b/src/ui-inputs.ts @@ -176,11 +176,13 @@ export class UiInputs { return; } switch (globalScene.ui?.getMode()) { - case UiMode.MESSAGE: + case UiMode.MESSAGE: { const messageHandler = globalScene.ui.getHandler(); if (!messageHandler.pendingPrompt || messageHandler.isTextAnimationInProgress()) { return; } + // biome-ignore lint/suspicious/noFallthroughSwitchClause: falls through to show menu overlay + } case UiMode.TITLE: case UiMode.COMMAND: case UiMode.MODIFIER_SELECT: diff --git a/tsconfig.json b/tsconfig.json index 30e208745b9..6af3e9ce650 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,7 +7,7 @@ "esModuleInterop": true, "strictNullChecks": true, "sourceMap": false, - "strict": false, + "strict": false, // TODO: Enable this eventually "rootDir": ".", "baseUrl": "./src", "paths": { From 1e8fc076a7b63a9edad8e419888e3f2788f1f8da Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Tue, 29 Apr 2025 20:30:28 -0500 Subject: [PATCH 076/262] [Misc][Move] Add edge case to transform (#5732) --- src/data/moves/move.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 9b8703d6e85..f02c98fad1f 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -8618,7 +8618,9 @@ export function initMoves() { .condition((user, target, move) => !target.summonData?.illusion && !user.summonData?.illusion) // transforming from or into fusion pokemon causes various problems (such as crashes) .condition((user, target, move) => !target.getTag(BattlerTagType.SUBSTITUTE) && !user.fusionSpecies && !target.fusionSpecies) - .ignoresProtect(), + .ignoresProtect() + // Transforming should copy the target's rage fist hit count + .edgeCase(), new AttackMove(Moves.BUBBLE, PokemonType.WATER, MoveCategory.SPECIAL, 40, 100, 30, 10, 0, 1) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) .target(MoveTarget.ALL_NEAR_ENEMIES), From 84a2ce979f64dc5759b1269d686da95712d8d172 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Tue, 29 Apr 2025 21:48:06 -0500 Subject: [PATCH 077/262] [GitHub] Update pull request template to say `test:silent` (#5733) --- .github/pull_request_template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 032e1fee69c..a25a2f807f3 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -65,7 +65,7 @@ Do the reviewers need to do something special in order to test your changes? - [ ] The PR is self-contained and cannot be split into smaller PRs? - [ ] Have I provided a clear explanation of the changes? - [ ] Have I tested the changes manually? -- [ ] Are all unit tests still passing? (`npm run test`) +- [ ] Are all unit tests still passing? (`npm run test:silent`) - [ ] Have I created new automated tests (`npm run create-test`) or updated existing tests related to the PR's changes? - [ ] Have I provided screenshots/videos of the changes (if applicable)? - [ ] Have I made sure that any UI change works for both UI themes (default and legacy)? From ef9a867e67edc6c312e1aa89ab04711120b5c07b Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Wed, 30 Apr 2025 01:55:42 -0500 Subject: [PATCH 078/262] [Bug] Fix clear ignoring errors from server (#5722) * Fix clear ignoring errors from server * Update tests to expect a throw --- src/phases/game-over-phase.ts | 15 +++++++++++++-- src/plugins/api/pokerogue-session-savedata-api.ts | 9 ++++++--- .../api/pokerogue-session-savedata-api.test.ts | 4 +--- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/phases/game-over-phase.ts b/src/phases/game-over-phase.ts index 304d876a99e..3a3305fd45e 100644 --- a/src/phases/game-over-phase.ts +++ b/src/phases/game-over-phase.ts @@ -31,6 +31,7 @@ import ChallengeData from "#app/system/challenge-data"; import TrainerData from "#app/system/trainer-data"; import ArenaData from "#app/system/arena-data"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; +import { MessagePhase } from "./message-phase"; export class GameOverPhase extends BattlePhase { private isVictory: boolean; @@ -122,7 +123,7 @@ export class GameOverPhase extends BattlePhase { globalScene.disableMenu = true; globalScene.time.delayedCall(1000, () => { let firstClear = false; - if (this.isVictory && newClear) { + if (this.isVictory) { if (globalScene.gameMode.isClassic) { firstClear = globalScene.validateAchv(achvs.CLASSIC_VICTORY); globalScene.validateAchv(achvs.UNEVOLVED_CLASSIC_VICTORY); @@ -226,7 +227,17 @@ export class GameOverPhase extends BattlePhase { isVictory: this.isVictory, clientSessionId: clientSessionId, }) - .then(success => doGameOver(!!success)); + .then(success => doGameOver(!globalScene.gameMode.isDaily || !!success)) + .catch(_err => { + globalScene.clearPhaseQueue(); + globalScene.clearPhaseQueueSplice(); + globalScene.unshiftPhase(new MessagePhase(i18next.t("menu:serverCommunicationFailed"), 2500)); + // force the game to reload after 2 seconds. + setTimeout(() => { + window.location.reload(); + }, 2000); + this.end(); + }); } else if (this.isVictory) { globalScene.gameData.offlineNewClear().then(result => { doGameOver(result); diff --git a/src/plugins/api/pokerogue-session-savedata-api.ts b/src/plugins/api/pokerogue-session-savedata-api.ts index e703d55a242..aac8b9b93ad 100644 --- a/src/plugins/api/pokerogue-session-savedata-api.ts +++ b/src/plugins/api/pokerogue-session-savedata-api.ts @@ -20,17 +20,20 @@ export class PokerogueSessionSavedataApi extends ApiBase { * *This is **NOT** the same as {@linkcode clear | clear()}.* * @param params The {@linkcode NewClearSessionSavedataRequest} to send * @returns The raw savedata as `string`. + * @throws Error if the request fails */ public async newclear(params: NewClearSessionSavedataRequest) { try { const urlSearchParams = this.toUrlSearchParams(params); const response = await this.doGet(`/savedata/session/newclear?${urlSearchParams}`); const json = await response.json(); - - return Boolean(json); + if (response.ok) { + return Boolean(json); + } + throw new Error("Could not newclear session!"); } catch (err) { console.warn("Could not newclear session!", err); - return false; + throw new Error("Could not newclear session!"); } } diff --git a/test/plugins/api/pokerogue-session-savedata-api.test.ts b/test/plugins/api/pokerogue-session-savedata-api.test.ts index d4c235ac51a..4d4774f2283 100644 --- a/test/plugins/api/pokerogue-session-savedata-api.test.ts +++ b/test/plugins/api/pokerogue-session-savedata-api.test.ts @@ -57,9 +57,7 @@ describe("Pokerogue Session Savedata API", () => { it("should return false and report a warning on ERROR", async () => { server.use(http.get(`${apiBase}/savedata/session/newclear`, () => HttpResponse.error())); - const success = await sessionSavedataApi.newclear(params); - - expect(success).toBe(false); + await expect(sessionSavedataApi.newclear(params)).rejects.toThrow("Could not newclear session!"); expect(console.warn).toHaveBeenCalledWith("Could not newclear session!", expect.any(Error)); }); }); From 9187edcf6c8568a3f248a5aa51704df6a70a374a Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Wed, 30 Apr 2025 15:45:52 -0700 Subject: [PATCH 079/262] [i18n] Update locales (#5736) --- public/locales | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/locales b/public/locales index e98f0eb9c20..dcd8b430801 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit e98f0eb9c2022bc78b53f0444424c636498e725a +Subproject commit dcd8b430801b43b9e4f547d039c5fa0c85b8dd92 From fd5612e253783c9df3755be51564d7d9b788baef Mon Sep 17 00:00:00 2001 From: damocleas Date: Wed, 30 Apr 2025 18:48:06 -0400 Subject: [PATCH 080/262] [i18n] Update locales fix --- public/locales | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/locales b/public/locales index dcd8b430801..833dc40ec74 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit dcd8b430801b43b9e4f547d039c5fa0c85b8dd92 +Subproject commit 833dc40ec7409031fcea147ccbc45ec9c0ba0213 From cdcc338afd8ff74ceed7630d5e3fcf53429eb4e5 Mon Sep 17 00:00:00 2001 From: Wlowscha <54003515+Wlowscha@users.noreply.github.com> Date: Thu, 1 May 2025 04:17:21 +0200 Subject: [PATCH 081/262] =?UTF-8?q?[UI/UX]=20Caught=20battle=20forms=20are?= =?UTF-8?q?=20displayed=20correctly=20in=20Pok=C3=A9dex=20(#5697)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * isCaught function in Dex now returns the correct result * Removed log messages * Added tests to check caught status of battle forms * Update src/ui/pokedex-page-ui-handler.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/ui/pokedex-page-ui-handler.ts | 18 ++++-- .../saves/data_pokedex_tests_v2.prsv | 1 + test/ui/pokedex.test.ts | 55 +++++++++++++++++++ 3 files changed, 68 insertions(+), 6 deletions(-) create mode 100644 test/testUtils/saves/data_pokedex_tests_v2.prsv diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index 4888e14b24f..ddc16ab5a88 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -921,16 +921,22 @@ export default class PokedexPageUiHandler extends MessageUiHandler { return biomes; } + /** + * Return the caughtAttr of a given species, sanitized. + * + * @param otherSpecies The species to check; defaults to current species + * @returns caught DexAttr for the species + */ isCaught(otherSpecies?: PokemonSpecies): bigint { + const species = otherSpecies ? otherSpecies : this.species; + if (globalScene.dexForDevs) { - return 255n; + species.getFullUnlocksData(); } - const species = otherSpecies ? otherSpecies : this.species; const dexEntry = globalScene.gameData.dexData[species.speciesId]; - const starterDexEntry = globalScene.gameData.dexData[this.getStarterSpeciesId(species.speciesId)]; - return (dexEntry?.caughtAttr ?? 0n) & (starterDexEntry?.caughtAttr ?? 0n) & species.getFullUnlocksData(); + return (dexEntry?.caughtAttr ?? 0n) & species.getFullUnlocksData(); } /** @@ -939,7 +945,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { * * @param otherSpecies The species to check; defaults to current species * @param otherFormIndex The form index of the form to check; defaults to current form - * @returns StarterAttributes for the species + * @returns `true` if the form is caught */ isFormCaught(otherSpecies?: PokemonSpecies, otherFormIndex?: number | undefined): boolean { if (globalScene.dexForDevs) { @@ -954,6 +960,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { } const isFormCaught = (caughtAttr & globalScene.gameData.getFormAttr(formIndex ?? 0)) > 0n; + return isFormCaught; } @@ -1151,7 +1158,6 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.blockInput = false; } else { ui.revertMode().then(() => { - console.log("exitCallback", this.exitCallback); if (this.exitCallback instanceof Function) { const exitCallback = this.exitCallback; this.exitCallback = null; diff --git a/test/testUtils/saves/data_pokedex_tests_v2.prsv b/test/testUtils/saves/data_pokedex_tests_v2.prsv new file mode 100644 index 00000000000..fff658d94d5 --- /dev/null +++ b/test/testUtils/saves/data_pokedex_tests_v2.prsv @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/test/ui/pokedex.test.ts b/test/ui/pokedex.test.ts index 41fb5e47f8c..ff5ca116ba8 100644 --- a/test/ui/pokedex.test.ts +++ b/test/ui/pokedex.test.ts @@ -12,6 +12,8 @@ import { DropDownColumn } from "#app/ui/filter-bar"; import type PokemonSpecies from "#app/data/pokemon-species"; import { PokemonType } from "#enums/pokemon-type"; import { UiMode } from "#enums/ui-mode"; +import PokedexPageUiHandler from "#app/ui/pokedex-page-ui-handler"; +import type { StarterAttributes } from "#app/system/game-data"; /* Information for the `data_pokedex_tests.psrv`: @@ -80,6 +82,26 @@ describe("UI - Pokedex", () => { return handler as PokedexUiHandler; } + /** + * Run the game to open the pokedex UI. + * @returns The handler for the pokedex UI. + */ + async function runToPokedexPage( + species: PokemonSpecies, + starterAttributes: StarterAttributes = {}, + ): Promise { + // Open the pokedex UI. + await game.runToTitle(); + + await game.phaseInterceptor.setOverlayMode(UiMode.POKEDEX_PAGE, species, starterAttributes); + + // Get the handler for the current UI. + const handler = game.scene.ui.getHandler(); + expect(handler).toBeInstanceOf(PokedexPageUiHandler); + + return handler as PokedexPageUiHandler; + } + /** * Compute a set of pokemon that have a specific ability in allAbilities * @param ability - The ability to filter for @@ -489,4 +511,37 @@ describe("UI - Pokedex", () => { expect(selectedPokemon).toEqual(pokedexHandler.lastSpecies.speciesId); }, ); + + /**************************** + * Tests for Pokédex Pages * + ****************************/ + + it("should show caught battle form as caught", async () => { + await game.importData("./test/testUtils/saves/data_pokedex_tests_v2.prsv"); + const pageHandler = await runToPokedexPage(getPokemonSpecies(Species.VENUSAUR), { form: 1 }); + + // @ts-expect-error - `species` is private + expect(pageHandler.species.speciesId).toEqual(Species.VENUSAUR); + + // @ts-expect-error - `formIndex` is private + expect(pageHandler.formIndex).toEqual(1); + + expect(pageHandler.isFormCaught()).toEqual(true); + expect(pageHandler.isSeen()).toEqual(true); + }); + + //TODO: check tint of the sprite + it("should show uncaught battle form as seen", async () => { + await game.importData("./test/testUtils/saves/data_pokedex_tests_v2.prsv"); + const pageHandler = await runToPokedexPage(getPokemonSpecies(Species.VENUSAUR), { form: 2 }); + + // @ts-expect-error - `species` is private + expect(pageHandler.species.speciesId).toEqual(Species.VENUSAUR); + + // @ts-expect-error - `formIndex` is private + expect(pageHandler.formIndex).toEqual(2); + + expect(pageHandler.isFormCaught()).toEqual(false); + expect(pageHandler.isSeen()).toEqual(true); + }); }); From a81cac547bd511d0ae5c25f0895ca677137f9e93 Mon Sep 17 00:00:00 2001 From: Madmadness65 <59298170+Madmadness65@users.noreply.github.com> Date: Thu, 1 May 2025 13:15:36 -0500 Subject: [PATCH 082/262] [Sprite] Update Mystical Rock sprite with smaller variant (#5734) Update Mystical Rock sprite with smaller variant Co-authored-by: damocleas --- public/images/items.json | 16524 ++++++++++++------------ public/images/items.png | Bin 55816 -> 59346 bytes public/images/items/mystical_rock.png | Bin 915 -> 884 bytes 3 files changed, 8262 insertions(+), 8262 deletions(-) diff --git a/public/images/items.json b/public/images/items.json index 5848b02dd6a..4312f2a58c4 100644 --- a/public/images/items.json +++ b/public/images/items.json @@ -4,139 +4,13 @@ "image": "items.png", "format": "RGBA8888", "size": { - "w": 435, - "h": 435 + "w": 432, + "h": 432 }, "scale": 1, "frames": [ { - "filename": "relic_gold", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 11, - "w": 15, - "h": 11 - }, - "frame": { - "x": 0, - "y": 0, - "w": 15, - "h": 11 - } - }, - { - "filename": "ability_capsule", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 9, - "w": 24, - "h": 14 - }, - "frame": { - "x": 15, - "y": 0, - "w": 24, - "h": 14 - } - }, - { - "filename": "candy_overlay", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 12, - "w": 16, - "h": 15 - }, - "frame": { - "x": 39, - "y": 0, - "w": 16, - "h": 15 - } - }, - { - "filename": "eviolite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 15, - "h": 15 - }, - "frame": { - "x": 55, - "y": 0, - "w": 15, - "h": 15 - } - }, - { - "filename": "prism_scale", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 8, - "w": 15, - "h": 15 - }, - "frame": { - "x": 70, - "y": 0, - "w": 15, - "h": 15 - } - }, - { - "filename": "silver_powder", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 11, - "w": 24, - "h": 15 - }, - "frame": { - "x": 85, - "y": 0, - "w": 24, - "h": 15 - } - }, - { - "filename": "ultranecrozium_z", + "filename": "galarica_cuff", "rotated": false, "trimmed": true, "sourceSize": { @@ -145,7848 +19,15 @@ }, "spriteSourceSize": { "x": 1, - "y": 9, - "w": 30, - "h": 15 - }, - "frame": { - "x": 109, - "y": 0, - "w": 30, - "h": 15 - } - }, - { - "filename": "abomasite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 139, - "y": 0, - "w": 16, - "h": 16 - } - }, - { - "filename": "absolite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 155, - "y": 0, - "w": 16, - "h": 16 - } - }, - { - "filename": "aerodactylite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 171, - "y": 0, - "w": 16, - "h": 16 - } - }, - { - "filename": "aggronite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 187, - "y": 0, - "w": 16, - "h": 16 - } - }, - { - "filename": "alakazite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 203, - "y": 0, - "w": 16, - "h": 16 - } - }, - { - "filename": "altarianite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 219, - "y": 0, - "w": 16, - "h": 16 - } - }, - { - "filename": "ampharosite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 235, - "y": 0, - "w": 16, - "h": 16 - } - }, - { - "filename": "audinite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 251, - "y": 0, - "w": 16, - "h": 16 - } - }, - { - "filename": "banettite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 267, - "y": 0, - "w": 16, - "h": 16 - } - }, - { - "filename": "beedrillite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 283, - "y": 0, - "w": 16, - "h": 16 - } - }, - { - "filename": "blastoisinite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 299, - "y": 0, - "w": 16, - "h": 16 - } - }, - { - "filename": "blazikenite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 315, - "y": 0, - "w": 16, - "h": 16 - } - }, - { - "filename": "cameruptite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 331, - "y": 0, - "w": 16, - "h": 16 - } - }, - { - "filename": "charizardite_x", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 347, - "y": 0, - "w": 16, - "h": 16 - } - }, - { - "filename": "charizardite_y", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 363, - "y": 0, - "w": 16, - "h": 16 - } - }, - { - "filename": "diancite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 379, - "y": 0, - "w": 16, - "h": 16 - } - }, - { - "filename": "galladite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 395, - "y": 0, - "w": 16, - "h": 16 - } - }, - { - "filename": "garchompite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 411, - "y": 0, - "w": 16, - "h": 16 - } - }, - { - "filename": "revive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 12, - "h": 17 - }, - "frame": { - "x": 0, - "y": 11, - "w": 12, - "h": 17 - } - }, - { - "filename": "gardevoirite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 12, - "y": 14, - "w": 16, - "h": 16 - } - }, - { - "filename": "gengarite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 28, - "y": 15, - "w": 16, - "h": 16 - } - }, - { - "filename": "glalitite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 44, - "y": 15, - "w": 16, - "h": 16 - } - }, - { - "filename": "gyaradosite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 60, - "y": 15, - "w": 16, - "h": 16 - } - }, - { - "filename": "heracronite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 76, - "y": 15, - "w": 16, - "h": 16 - } - }, - { - "filename": "houndoominite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 92, - "y": 15, - "w": 16, - "h": 16 - } - }, - { - "filename": "kangaskhanite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 108, - "y": 15, - "w": 16, - "h": 16 - } - }, - { - "filename": "latiasite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 124, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "latiosite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 140, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "lopunnite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 156, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "lucarionite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 172, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "manectite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 188, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "mawilite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 204, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "medichamite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 220, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "mega_bracelet", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 16 - }, - "frame": { - "x": 236, - "y": 16, - "w": 20, - "h": 16 - } - }, - { - "filename": "metagrossite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 256, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "mewtwonite_x", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 272, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "mewtwonite_y", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 288, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "nugget", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 304, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "pidgeotite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 320, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "pinsirite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 336, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "rayquazite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 352, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "relic_band", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 9, - "w": 17, - "h": 16 - }, - "frame": { - "x": 368, - "y": 16, - "w": 17, - "h": 16 - } - }, - { - "filename": "sablenite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 385, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "salamencite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 401, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "sceptilite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 417, - "y": 16, - "w": 16, - "h": 16 - } - }, - { - "filename": "scizorite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 0, - "y": 30, - "w": 16, - "h": 16 - } - }, - { - "filename": "sharpedonite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 16, - "y": 31, - "w": 16, - "h": 16 - } - }, - { - "filename": "slowbronite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 32, - "y": 31, - "w": 16, - "h": 16 - } - }, - { - "filename": "soul_dew", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 48, - "y": 31, - "w": 16, - "h": 16 - } - }, - { - "filename": "steelixite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 64, - "y": 31, - "w": 16, - "h": 16 - } - }, - { - "filename": "strawberry_sweet", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 7, - "w": 16, - "h": 16 - }, - "frame": { - "x": 80, - "y": 31, - "w": 16, - "h": 16 - } - }, - { - "filename": "swampertite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 96, - "y": 31, - "w": 16, - "h": 16 - } - }, - { - "filename": "tyranitarite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 112, - "y": 32, - "w": 16, - "h": 16 - } - }, - { - "filename": "venusaurite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 128, - "y": 32, - "w": 16, - "h": 16 - } - }, - { - "filename": "black_glasses", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 144, - "y": 32, - "w": 23, - "h": 17 - } - }, - { - "filename": "burn_drive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 167, - "y": 32, - "w": 23, - "h": 17 - } - }, - { - "filename": "chill_drive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 190, - "y": 32, - "w": 23, - "h": 17 - } - }, - { - "filename": "douse_drive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 213, - "y": 32, - "w": 23, - "h": 17 - } - }, - { - "filename": "everstone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 17 - }, - "frame": { - "x": 236, - "y": 32, - "w": 20, - "h": 17 - } - }, - { - "filename": "shock_drive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 256, - "y": 32, - "w": 23, - "h": 17 - } - }, - { - "filename": "wise_glasses", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 279, - "y": 32, - "w": 23, - "h": 17 - } - }, - { - "filename": "baton", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 302, - "y": 32, - "w": 18, - "h": 18 - } - }, - { - "filename": "candy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 11, - "w": 18, - "h": 18 - }, - "frame": { - "x": 320, - "y": 32, - "w": 18, - "h": 18 - } - }, - { - "filename": "choice_specs", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 24, - "h": 18 - }, - "frame": { - "x": 338, - "y": 32, - "w": 24, - "h": 18 - } - }, - { - "filename": "dark_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 362, - "y": 32, - "w": 18, - "h": 18 - } - }, - { - "filename": "dragon_scale", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 24, - "h": 18 - }, - "frame": { - "x": 380, - "y": 32, - "w": 24, - "h": 18 - } - }, - { - "filename": "flame_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 404, - "y": 32, - "w": 18, - "h": 18 - } - }, - { - "filename": "mystery_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 18 - }, - "frame": { - "x": 0, - "y": 46, - "w": 16, - "h": 18 - } - }, - { - "filename": "light_ball", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 16, - "y": 47, - "w": 18, - "h": 18 - } - }, - { - "filename": "light_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 34, - "y": 47, - "w": 18, - "h": 18 - } - }, - { - "filename": "masterpiece_teacup", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 21, - "h": 18 - }, - "frame": { - "x": 52, - "y": 47, - "w": 21, - "h": 18 - } - }, - { - "filename": "old_gateau", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 21, - "h": 18 - }, - "frame": { - "x": 73, - "y": 47, - "w": 21, - "h": 18 - } - }, - { - "filename": "toxic_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 94, - "y": 47, - "w": 18, - "h": 18 - } - }, - { - "filename": "relic_crown", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 18 - }, - "frame": { - "x": 112, - "y": 48, - "w": 23, - "h": 18 - } - }, - { - "filename": "sharp_meteorite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 21, - "h": 18 - }, - "frame": { - "x": 135, - "y": 49, - "w": 21, - "h": 18 - } - }, - { - "filename": "unremarkable_teacup", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 21, - "h": 18 - }, - "frame": { - "x": 156, - "y": 49, - "w": 21, - "h": 18 - } - }, - { - "filename": "wl_ability_urge", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 177, - "y": 49, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_antidote", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 197, - "y": 49, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_awakening", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 217, - "y": 49, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_burn_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 237, - "y": 49, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_custom_spliced", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 257, - "y": 49, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_custom_thief", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 277, - "y": 49, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_elixir", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 297, - "y": 50, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_ether", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 317, - "y": 50, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_full_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 337, - "y": 50, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_full_restore", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 357, - "y": 50, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_guard_spec", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 377, - "y": 50, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_hyper_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 397, - "y": 50, - "w": 20, - "h": 18 - } - }, - { - "filename": "oval_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 19 - }, - "frame": { - "x": 417, - "y": 50, - "w": 18, - "h": 19 - } - }, - { - "filename": "wl_ice_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 0, - "y": 65, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_item_drop", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 20, - "y": 65, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_item_urge", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 40, - "y": 65, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_max_elixir", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 60, - "y": 65, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_max_ether", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 80, - "y": 65, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_max_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 100, - "y": 66, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_max_revive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 120, - "y": 67, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_paralyze_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 140, - "y": 67, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 160, - "y": 67, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_reset_urge", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 180, - "y": 67, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_revive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 200, - "y": 67, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_super_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 220, - "y": 67, - "w": 20, - "h": 18 - } - }, - { - "filename": "big_mushroom", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 19 - }, - "frame": { - "x": 240, - "y": 67, - "w": 19, - "h": 19 - } - }, - { - "filename": "black_sludge", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 22, - "h": 19 - }, - "frame": { - "x": 259, - "y": 67, - "w": 22, - "h": 19 - } - }, - { - "filename": "blunder_policy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 19 - }, - "frame": { - "x": 281, - "y": 68, - "w": 22, - "h": 19 - } - }, - { - "filename": "coupon", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 - }, - "frame": { - "x": 303, - "y": 68, - "w": 23, - "h": 19 - } - }, - { - "filename": "dubious_disc", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 22, - "h": 19 - }, - "frame": { - "x": 326, - "y": 68, - "w": 22, - "h": 19 - } - }, - { - "filename": "golden_mystic_ticket", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 - }, - "frame": { - "x": 348, - "y": 68, - "w": 23, - "h": 19 - } - }, - { - "filename": "lum_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 20, - "h": 19 - }, - "frame": { - "x": 371, - "y": 68, - "w": 20, - "h": 19 - } - }, - { - "filename": "metal_alloy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 21, - "h": 19 - }, - "frame": { - "x": 391, - "y": 68, - "w": 21, - "h": 19 - } - }, - { - "filename": "miracle_seed", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 19, - "h": 19 - }, - "frame": { - "x": 412, - "y": 69, - "w": 19, - "h": 19 - } - }, - { - "filename": "mystic_ticket", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 - }, - "frame": { - "x": 0, - "y": 83, - "w": 23, - "h": 19 - } - }, - { - "filename": "pair_of_tickets", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 - }, - "frame": { - "x": 23, - "y": 83, - "w": 23, - "h": 19 - } - }, - { - "filename": "power_herb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 20, - "h": 19 - }, - "frame": { - "x": 46, - "y": 83, - "w": 20, - "h": 19 - } - }, - { - "filename": "razor_claw", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 20, - "h": 19 - }, - "frame": { - "x": 66, - "y": 83, - "w": 20, - "h": 19 - } - }, - { - "filename": "upgrade", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 22, - "h": 19 - }, - "frame": { - "x": 86, - "y": 84, - "w": 22, - "h": 19 - } - }, - { - "filename": "white_herb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 20, - "h": 19 - }, - "frame": { - "x": 108, - "y": 85, - "w": 20, - "h": 19 - } - }, - { - "filename": "apicot_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 - }, - "frame": { - "x": 128, - "y": 85, - "w": 19, - "h": 20 - } - }, - { - "filename": "big_nugget", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 147, - "y": 85, - "w": 20, - "h": 20 - } - }, - { - "filename": "binding_band", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 23, - "h": 20 - }, - "frame": { - "x": 167, - "y": 85, - "w": 23, - "h": 20 - } - }, - { - "filename": "blue_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 190, - "y": 85, - "w": 20, - "h": 20 - } - }, - { - "filename": "candy_jar", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 - }, - "frame": { - "x": 210, - "y": 85, - "w": 19, - "h": 20 - } - }, - { - "filename": "chipped_pot", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 26, - "h": 20 - }, - "frame": { - "x": 229, - "y": 86, - "w": 26, - "h": 20 - } - }, - { - "filename": "cracked_pot", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 26, - "h": 20 - }, - "frame": { - "x": 255, - "y": 86, - "w": 26, - "h": 20 - } - }, - { - "filename": "deep_sea_scale", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 20 - }, - "frame": { - "x": 281, - "y": 87, - "w": 22, - "h": 20 - } - }, - { - "filename": "fairy_feather", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 22, - "h": 20 - }, - "frame": { - "x": 303, - "y": 87, - "w": 22, - "h": 20 - } - }, - { - "filename": "gb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 325, - "y": 87, - "w": 20, - "h": 20 - } - }, - { - "filename": "golden_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 17, - "h": 20 - }, - "frame": { - "x": 345, - "y": 87, - "w": 17, - "h": 20 - } - }, - { - "filename": "hard_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 - }, - "frame": { - "x": 362, - "y": 87, - "w": 19, - "h": 20 - } - }, - { - "filename": "icy_reins_of_unity", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 24, - "h": 20 - }, - "frame": { - "x": 381, - "y": 87, - "w": 24, - "h": 20 - } - }, - { - "filename": "legend_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 25, - "h": 20 - }, - "frame": { - "x": 405, - "y": 88, - "w": 25, - "h": 20 - } - }, - { - "filename": "lucky_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 17, - "h": 20 - }, - "frame": { - "x": 0, - "y": 102, - "w": 17, - "h": 20 - } - }, - { - "filename": "magnet", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 17, - "y": 102, - "w": 20, - "h": 20 - } - }, - { - "filename": "malicious_armor", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 20 - }, - "frame": { - "x": 37, - "y": 102, - "w": 22, - "h": 20 - } - }, - { - "filename": "mb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 59, - "y": 102, - "w": 20, - "h": 20 - } - }, - { - "filename": "metal_powder", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 24, - "h": 20 - }, - "frame": { - "x": 79, - "y": 103, - "w": 24, - "h": 20 - } - }, - { - "filename": "pb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 103, - "y": 104, - "w": 20, - "h": 20 - } - }, - { - "filename": "pb_gold", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 123, - "y": 105, - "w": 20, - "h": 20 - } - }, - { - "filename": "pb_silver", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 143, - "y": 105, - "w": 20, - "h": 20 - } - }, - { - "filename": "quick_powder", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 24, - "h": 20 - }, - "frame": { - "x": 163, - "y": 105, - "w": 24, - "h": 20 - } - }, - { - "filename": "razor_fang", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 18, - "h": 20 - }, - "frame": { - "x": 187, - "y": 105, - "w": 18, - "h": 20 - } - }, - { - "filename": "rb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 205, - "y": 105, - "w": 20, - "h": 20 - } - }, - { - "filename": "reviver_seed", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 8, - "w": 23, - "h": 20 - }, - "frame": { - "x": 225, - "y": 106, - "w": 23, - "h": 20 - } - }, - { - "filename": "rusted_shield", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 24, - "h": 20 - }, - "frame": { - "x": 248, - "y": 106, - "w": 24, - "h": 20 - } - }, - { - "filename": "sacred_ash", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 24, - "h": 20 - }, - "frame": { - "x": 272, - "y": 107, - "w": 24, - "h": 20 - } - }, - { - "filename": "shadow_reins_of_unity", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 24, - "h": 20 - }, - "frame": { - "x": 296, - "y": 107, - "w": 24, - "h": 20 - } - }, - { - "filename": "shell_bell", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 23, - "h": 20 - }, - "frame": { - "x": 320, - "y": 107, - "w": 23, - "h": 20 - } - }, - { - "filename": "smooth_meteorite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 343, - "y": 107, - "w": 20, - "h": 20 - } - }, - { - "filename": "soft_sand", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 24, - "h": 20 - }, - "frame": { - "x": 363, - "y": 107, - "w": 24, - "h": 20 - } - }, - { - "filename": "strange_ball", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 387, - "y": 108, - "w": 20, - "h": 20 - } - }, - { - "filename": "tera_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 20 - }, - "frame": { - "x": 407, - "y": 108, - "w": 22, - "h": 20 - } - }, - { - "filename": "ub", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 0, - "y": 122, - "w": 20, - "h": 20 - } - }, - { - "filename": "adamant_crystal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 23, - "h": 21 - }, - "frame": { - "x": 20, - "y": 122, - "w": 23, - "h": 21 - } - }, - { - "filename": "amulet_coin", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 23, - "h": 21 - }, - "frame": { - "x": 43, - "y": 122, - "w": 23, - "h": 21 - } - }, - { - "filename": "auspicious_armor", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 21 - }, - "frame": { - "x": 66, - "y": 123, - "w": 23, - "h": 21 - } - }, - { - "filename": "berry_juice", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 21 - }, - "frame": { - "x": 89, - "y": 124, - "w": 22, - "h": 21 - } - }, - { - "filename": "dawn_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 21 - }, - "frame": { - "x": 111, - "y": 125, - "w": 20, - "h": 21 - } - }, - { - "filename": "deep_sea_tooth", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 21 - }, - "frame": { - "x": 131, - "y": 125, - "w": 22, - "h": 21 - } - }, - { - "filename": "dusk_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 153, - "y": 125, - "w": 21, - "h": 21 - } - }, - { - "filename": "flying_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 20, - "h": 21 - }, - "frame": { - "x": 174, - "y": 125, - "w": 20, - "h": 21 - } - }, - { - "filename": "golden_net", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 21 - }, - "frame": { - "x": 194, - "y": 125, - "w": 24, - "h": 21 - } - }, - { - "filename": "liechi_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 21 - }, - "frame": { - "x": 218, - "y": 126, - "w": 22, - "h": 21 - } - }, - { - "filename": "mint_atk", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 28, - "h": 21 - }, - "frame": { - "x": 240, - "y": 126, - "w": 28, - "h": 21 - } - }, - { - "filename": "mint_def", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 28, - "h": 21 - }, - "frame": { - "x": 268, - "y": 127, - "w": 28, - "h": 21 - } - }, - { - "filename": "mint_neutral", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 28, - "h": 21 - }, - "frame": { - "x": 296, - "y": 127, - "w": 28, - "h": 21 - } - }, - { - "filename": "mint_spatk", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 28, - "h": 21 - }, - "frame": { - "x": 324, - "y": 127, - "w": 28, - "h": 21 - } - }, - { - "filename": "mint_spd", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 28, - "h": 21 - }, - "frame": { - "x": 352, - "y": 127, - "w": 28, - "h": 21 - } - }, - { - "filename": "mint_spdef", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 28, - "h": 21 - }, - "frame": { - "x": 380, - "y": 128, - "w": 28, - "h": 21 - } - }, - { - "filename": "moon_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 23, - "h": 21 - }, - "frame": { - "x": 408, - "y": 128, - "w": 23, - "h": 21 - } - }, - { - "filename": "quick_claw", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 21 - }, - "frame": { - "x": 0, - "y": 142, - "w": 19, - "h": 21 - } - }, - { - "filename": "n_lunarizer", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 23, - "h": 21 - }, - "frame": { - "x": 19, - "y": 143, - "w": 23, - "h": 21 - } - }, - { - "filename": "n_solarizer", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 23, - "h": 21 - }, - "frame": { - "x": 42, - "y": 143, - "w": 23, - "h": 21 - } - }, - { - "filename": "poison_barb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 65, - "y": 144, - "w": 21, - "h": 21 - } - }, - { - "filename": "shiny_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 86, - "y": 145, - "w": 21, - "h": 21 - } - }, - { - "filename": "spell_tag", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 19, - "h": 21 - }, - "frame": { - "x": 107, - "y": 146, - "w": 19, - "h": 21 - } - }, - { - "filename": "sweet_apple", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 21 - }, - "frame": { - "x": 126, - "y": 146, - "w": 22, - "h": 21 - } - }, - { - "filename": "syrupy_apple", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 21 - }, - "frame": { - "x": 148, - "y": 146, - "w": 22, - "h": 21 - } - }, - { - "filename": "tart_apple", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 21 - }, - "frame": { - "x": 170, - "y": 146, - "w": 22, - "h": 21 - } - }, - { - "filename": "wellspring_mask", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 21 - }, - "frame": { - "x": 192, - "y": 146, - "w": 23, - "h": 21 - } - }, - { - "filename": "zoom_lens", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 215, - "y": 147, - "w": 21, - "h": 21 - } - }, - { - "filename": "berry_pot", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 18, - "h": 22 - }, - "frame": { - "x": 236, - "y": 147, - "w": 18, - "h": 22 - } - }, - { - "filename": "bug_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 254, - "y": 148, - "w": 22, - "h": 22 - } - }, - { - "filename": "charcoal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 276, - "y": 148, - "w": 22, - "h": 22 - } - }, - { - "filename": "dark_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 298, - "y": 148, - "w": 22, - "h": 22 - } - }, - { - "filename": "dire_hit", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 320, - "y": 148, - "w": 22, - "h": 22 - } - }, - { - "filename": "dna_splicers", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 342, - "y": 148, - "w": 22, - "h": 22 - } - }, - { - "filename": "leftovers", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 15, - "h": 22 - }, - "frame": { - "x": 364, - "y": 148, - "w": 15, - "h": 22 - } - }, - { - "filename": "dragon_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 379, - "y": 149, - "w": 22, - "h": 22 - } - }, - { - "filename": "electirizer", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 401, - "y": 149, - "w": 22, - "h": 22 - } - }, - { - "filename": "lock_capsule", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 19, - "h": 22 - }, - "frame": { - "x": 0, - "y": 163, - "w": 19, - "h": 22 - } - }, - { - "filename": "electric_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 19, - "y": 164, - "w": 22, - "h": 22 - } - }, - { - "filename": "enigma_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 41, - "y": 164, - "w": 22, - "h": 22 - } - }, - { - "filename": "fairy_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 63, - "y": 165, - "w": 22, - "h": 22 - } - }, - { - "filename": "fighting_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 85, - "y": 166, - "w": 22, - "h": 22 - } - }, - { - "filename": "exp_balance", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 22 - }, - "frame": { - "x": 107, - "y": 167, - "w": 24, - "h": 22 - } - }, - { - "filename": "exp_share", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 22 - }, - "frame": { - "x": 131, - "y": 167, - "w": 24, - "h": 22 - } - }, - { - "filename": "fire_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 155, - "y": 167, - "w": 22, - "h": 22 - } - }, - { - "filename": "flying_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 177, - "y": 167, - "w": 22, - "h": 22 - } - }, - { - "filename": "full_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 15, - "h": 23 - }, - "frame": { - "x": 199, - "y": 167, - "w": 15, - "h": 23 - } - }, - { - "filename": "ganlon_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 214, - "y": 168, - "w": 22, - "h": 22 - } - }, - { - "filename": "metronome", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 17, - "h": 22 - }, - "frame": { - "x": 236, - "y": 169, - "w": 17, - "h": 22 - } - }, - { - "filename": "ghost_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 253, - "y": 170, - "w": 22, - "h": 22 - } - }, - { - "filename": "grass_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 275, - "y": 170, - "w": 22, - "h": 22 - } - }, - { - "filename": "ground_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 297, - "y": 170, - "w": 22, - "h": 22 - } - }, - { - "filename": "guard_spec", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 319, - "y": 170, - "w": 22, - "h": 22 - } - }, - { - "filename": "hard_meteorite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 20, - "h": 22 - }, - "frame": { - "x": 341, - "y": 170, - "w": 20, - "h": 22 - } - }, - { - "filename": "soothe_bell", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 22 - }, - "frame": { - "x": 361, - "y": 170, - "w": 17, - "h": 22 - } - }, - { - "filename": "healing_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 23, - "h": 22 - }, - "frame": { - "x": 378, - "y": 171, - "w": 23, - "h": 22 - } - }, - { - "filename": "ice_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 401, - "y": 171, - "w": 22, - "h": 22 - } - }, - { - "filename": "metal_coat", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 19, - "h": 22 - }, - "frame": { - "x": 0, - "y": 185, - "w": 19, - "h": 22 - } - }, - { - "filename": "ice_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 19, - "y": 186, - "w": 22, - "h": 22 - } - }, - { - "filename": "magmarizer", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 41, - "y": 186, - "w": 22, - "h": 22 - } - }, - { - "filename": "mini_black_hole", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 63, - "y": 187, - "w": 22, - "h": 22 - } - }, - { - "filename": "moon_flute", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 85, - "y": 188, - "w": 22, - "h": 22 - } - }, - { - "filename": "map", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 27, - "h": 22 - }, - "frame": { - "x": 107, - "y": 189, - "w": 27, - "h": 22 - } - }, - { - "filename": "normal_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 134, - "y": 189, - "w": 22, - "h": 22 - } - }, - { - "filename": "peat_block", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 22 - }, - "frame": { - "x": 156, - "y": 189, - "w": 24, - "h": 22 - } - }, - { - "filename": "hyper_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 - }, - "frame": { - "x": 180, - "y": 189, - "w": 17, - "h": 23 - } - }, - { - "filename": "poison_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 197, - "y": 190, - "w": 22, - "h": 22 - } - }, - { - "filename": "potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 - }, - "frame": { - "x": 219, - "y": 190, - "w": 17, - "h": 23 - } - }, - { - "filename": "protector", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 236, - "y": 192, - "w": 22, - "h": 22 - } - }, - { - "filename": "psychic_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 258, - "y": 192, - "w": 22, - "h": 22 - } - }, - { - "filename": "rock_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 280, - "y": 192, - "w": 22, - "h": 22 - } - }, - { - "filename": "rusted_sword", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 22 - }, - "frame": { - "x": 302, - "y": 192, - "w": 23, - "h": 22 - } - }, - { - "filename": "scroll_of_darkness", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 325, - "y": 192, - "w": 22, - "h": 22 - } - }, - { - "filename": "scroll_of_waters", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 347, - "y": 192, - "w": 22, - "h": 22 - } - }, - { - "filename": "shed_shell", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 369, - "y": 193, - "w": 22, - "h": 22 - } - }, - { - "filename": "sitrus_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 20, - "h": 22 - }, - "frame": { - "x": 391, - "y": 193, - "w": 20, - "h": 22 - } - }, - { - "filename": "starf_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 411, - "y": 193, - "w": 22, - "h": 22 - } - }, - { - "filename": "sachet", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 18, - "h": 23 - }, - "frame": { - "x": 0, - "y": 207, - "w": 18, - "h": 23 - } - }, - { - "filename": "steel_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 18, - "y": 208, - "w": 22, - "h": 22 - } - }, - { - "filename": "sun_flute", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 40, - "y": 208, - "w": 22, - "h": 22 - } - }, - { - "filename": "thick_club", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 62, - "y": 209, - "w": 22, - "h": 22 - } - }, - { - "filename": "thunder_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 84, - "y": 210, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_bug", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 106, - "y": 211, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_dark", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 128, - "y": 211, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_dragon", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 150, - "y": 211, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_electric", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 172, - "y": 212, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_fairy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 194, - "y": 212, - "w": 22, - "h": 22 - } - }, - { - "filename": "mystic_water", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 20, - "h": 23 - }, - "frame": { - "x": 216, - "y": 213, - "w": 20, - "h": 23 - } - }, - { - "filename": "tm_fighting", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 236, - "y": 214, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_fire", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 258, - "y": 214, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_flying", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 280, - "y": 214, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_ghost", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 302, - "y": 214, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_grass", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 324, - "y": 214, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_ground", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 346, - "y": 214, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_ice", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 368, - "y": 215, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_normal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 390, - "y": 215, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_poison", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 412, - "y": 215, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_psychic", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 0, - "y": 230, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_rock", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 22, - "y": 230, - "w": 22, - "h": 22 - } - }, - { - "filename": "super_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 - }, - "frame": { - "x": 44, - "y": 230, - "w": 17, - "h": 23 - } - }, - { - "filename": "tm_steel", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 61, - "y": 231, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_water", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 83, - "y": 232, - "w": 22, - "h": 22 - } - }, - { - "filename": "water_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 105, - "y": 233, - "w": 22, - "h": 22 - } - }, - { - "filename": "water_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 127, - "y": 233, - "w": 22, - "h": 22 - } - }, - { - "filename": "x_accuracy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 149, - "y": 233, - "w": 22, - "h": 22 - } - }, - { - "filename": "x_attack", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 171, - "y": 234, - "w": 22, - "h": 22 - } - }, - { - "filename": "x_defense", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 193, - "y": 234, - "w": 22, - "h": 22 - } - }, - { - "filename": "x_sp_atk", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 215, - "y": 236, - "w": 22, - "h": 22 - } - }, - { - "filename": "x_sp_def", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 237, - "y": 236, - "w": 22, - "h": 22 - } - }, - { - "filename": "x_speed", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 259, - "y": 236, - "w": 22, - "h": 22 - } - }, - { - "filename": "berry_pouch", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 281, - "y": 236, - "w": 23, - "h": 23 - } - }, - { - "filename": "black_belt", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 304, - "y": 236, - "w": 22, - "h": 23 - } - }, - { - "filename": "bug_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 326, - "y": 236, - "w": 22, - "h": 23 - } - }, - { - "filename": "calcium", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 348, - "y": 236, - "w": 16, - "h": 24 - } - }, - { - "filename": "clefairy_doll", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 364, - "y": 237, - "w": 24, - "h": 23 - } - }, - { - "filename": "coin_case", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 388, - "y": 237, - "w": 24, - "h": 23 - } - }, - { - "filename": "dark_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 412, - "y": 237, - "w": 22, - "h": 23 - } - }, - { - "filename": "dragon_fang", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 0, - "y": 252, - "w": 21, - "h": 23 - } - }, - { - "filename": "dragon_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 21, - "y": 252, - "w": 22, - "h": 23 - } - }, - { - "filename": "dynamax_band", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 23, - "h": 23 - }, - "frame": { - "x": 43, - "y": 253, - "w": 23, - "h": 23 - } - }, - { - "filename": "carbos", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 66, - "y": 253, - "w": 16, - "h": 24 - } - }, - { - "filename": "electric_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 82, - "y": 254, - "w": 22, - "h": 23 - } - }, - { - "filename": "expert_belt", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 23 - }, - "frame": { - "x": 104, - "y": 255, - "w": 24, - "h": 23 - } - }, - { - "filename": "fairy_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 128, - "y": 255, - "w": 22, - "h": 23 - } - }, - { - "filename": "lansat_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 21, - "h": 23 - }, - "frame": { - "x": 150, - "y": 255, - "w": 21, - "h": 23 - } - }, - { - "filename": "fighting_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 171, - "y": 256, - "w": 22, - "h": 23 - } - }, - { - "filename": "fire_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 23 - }, - "frame": { - "x": 193, - "y": 256, - "w": 22, - "h": 23 - } - }, - { - "filename": "fire_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 215, - "y": 258, - "w": 22, - "h": 23 - } - }, - { - "filename": "focus_sash", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 237, - "y": 258, - "w": 22, - "h": 23 - } - }, - { - "filename": "ghost_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 259, - "y": 258, - "w": 22, - "h": 23 - } - }, - { - "filename": "grass_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 281, - "y": 259, - "w": 22, - "h": 23 - } - }, - { - "filename": "griseous_core", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 303, - "y": 259, - "w": 23, - "h": 23 - } - }, - { - "filename": "ground_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 326, - "y": 259, - "w": 22, - "h": 23 - } - }, - { - "filename": "hearthflame_mask", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 23 - }, - "frame": { - "x": 348, - "y": 260, - "w": 24, - "h": 23 - } - }, - { - "filename": "ice_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 372, - "y": 260, - "w": 22, - "h": 23 - } - }, - { - "filename": "leaf_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 394, - "y": 260, - "w": 21, - "h": 23 - } - }, - { - "filename": "elixir", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 415, - "y": 260, - "w": 18, - "h": 24 - } - }, - { - "filename": "leek", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 0, - "y": 275, - "w": 23, - "h": 23 - } - }, - { - "filename": "ether", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 23, - "y": 275, - "w": 18, - "h": 24 - } - }, - { - "filename": "leppa_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 41, - "y": 276, - "w": 24, - "h": 23 - } - }, - { - "filename": "macho_brace", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 65, - "y": 277, - "w": 23, - "h": 23 - } - }, - { - "filename": "hp_up", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 88, - "y": 277, - "w": 16, - "h": 24 - } - }, - { - "filename": "never_melt_ice", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 23 - }, - "frame": { - "x": 104, - "y": 278, - "w": 22, - "h": 23 - } - }, - { - "filename": "normal_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 126, - "y": 278, - "w": 22, - "h": 23 - } - }, - { - "filename": "petaya_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 23 - }, - "frame": { - "x": 148, - "y": 278, - "w": 22, - "h": 23 - } - }, - { - "filename": "poison_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 170, - "y": 279, - "w": 22, - "h": 23 - } - }, - { - "filename": "psychic_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 192, - "y": 279, - "w": 22, - "h": 23 - } - }, - { - "filename": "rare_candy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 214, - "y": 281, - "w": 23, - "h": 23 - } - }, - { - "filename": "rarer_candy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 237, - "y": 281, - "w": 23, - "h": 23 - } - }, - { - "filename": "sharp_beak", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 260, - "y": 281, - "w": 21, - "h": 23 - } - }, - { - "filename": "reaper_cloth", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 23 - }, - "frame": { - "x": 281, - "y": 282, - "w": 22, - "h": 23 - } - }, - { - "filename": "rock_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 303, - "y": 282, - "w": 22, - "h": 23 - } - }, - { - "filename": "steel_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 325, - "y": 282, - "w": 22, - "h": 23 - } - }, - { - "filename": "scope_lens", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 347, - "y": 283, - "w": 24, - "h": 23 - } - }, - { - "filename": "stellar_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 371, - "y": 283, - "w": 22, - "h": 23 - } - }, - { - "filename": "water_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 393, - "y": 283, - "w": 22, - "h": 23 - } - }, - { - "filename": "full_restore", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 415, - "y": 284, - "w": 18, - "h": 24 - } - }, - { - "filename": "whipped_dream", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 21, - "h": 23 - }, - "frame": { - "x": 0, - "y": 298, - "w": 21, - "h": 23 - } - }, - { - "filename": "twisted_spoon", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 21, - "y": 299, - "w": 24, - "h": 23 - } - }, - { - "filename": "iron", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 45, - "y": 299, - "w": 16, - "h": 24 - } - }, - { - "filename": "wide_lens", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 61, - "y": 300, - "w": 22, - "h": 23 - } - }, - { - "filename": "big_root", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 23, - "h": 24 - }, - "frame": { - "x": 83, - "y": 301, - "w": 23, - "h": 24 - } - }, - { - "filename": "blank_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 106, - "y": 301, - "w": 24, - "h": 24 - } - }, - { - "filename": "catching_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 21, - "h": 24 - }, - "frame": { - "x": 130, - "y": 301, - "w": 21, - "h": 24 - } - }, - { - "filename": "lure", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 17, - "h": 24 - }, - "frame": { - "x": 151, - "y": 301, - "w": 17, - "h": 24 - } - }, - { - "filename": "choice_scarf", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 168, - "y": 302, - "w": 24, - "h": 24 - } - }, - { - "filename": "max_elixir", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 192, - "y": 302, - "w": 18, - "h": 24 - } - }, - { - "filename": "draco_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 210, - "y": 304, - "w": 24, - "h": 24 - } - }, - { - "filename": "dread_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 234, - "y": 304, - "w": 24, - "h": 24 - } - }, - { - "filename": "kings_rock", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 23, - "h": 24 - }, - "frame": { - "x": 258, - "y": 304, - "w": 23, - "h": 24 - } - }, - { - "filename": "earth_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 281, - "y": 305, - "w": 24, - "h": 24 - } - }, - { - "filename": "fist_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 305, - "y": 305, - "w": 24, - "h": 24 - } - }, - { - "filename": "max_ether", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 329, - "y": 305, - "w": 18, - "h": 24 - } - }, - { - "filename": "flame_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 347, - "y": 306, - "w": 24, - "h": 24 - } - }, - { - "filename": "focus_band", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 371, - "y": 306, - "w": 24, - "h": 24 - } - }, - { - "filename": "max_lure", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 17, - "h": 24 - }, - "frame": { - "x": 395, - "y": 306, - "w": 17, - "h": 24 - } - }, - { - "filename": "max_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 412, - "y": 308, - "w": 18, - "h": 24 - } - }, - { - "filename": "max_repel", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 0, - "y": 321, - "w": 16, - "h": 24 - } - }, - { - "filename": "golden_punch", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 16, - "y": 322, - "w": 24, - "h": 24 - } - }, - { - "filename": "gracidea", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 40, - "y": 323, - "w": 24, - "h": 24 - } - }, - { - "filename": "pp_max", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 64, - "y": 323, - "w": 16, - "h": 24 - } - }, - { - "filename": "grip_claw", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 80, - "y": 325, - "w": 24, - "h": 24 - } - }, - { - "filename": "icicle_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 104, - "y": 325, - "w": 24, - "h": 24 - } - }, - { - "filename": "insect_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 128, - "y": 325, - "w": 24, - "h": 24 - } - }, - { - "filename": "pp_up", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 152, - "y": 325, - "w": 16, - "h": 24 - } - }, - { - "filename": "iron_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 168, - "y": 326, - "w": 24, - "h": 24 - } - }, - { - "filename": "protein", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 192, - "y": 326, - "w": 16, - "h": 24 - } - }, - { - "filename": "lucky_punch", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 208, - "y": 328, - "w": 24, - "h": 24 - } - }, - { - "filename": "lucky_punch_great", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 232, - "y": 328, - "w": 24, - "h": 24 - } - }, - { - "filename": "lucky_punch_master", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 256, - "y": 328, - "w": 24, - "h": 24 - } - }, - { - "filename": "lucky_punch_ultra", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 280, - "y": 329, - "w": 24, - "h": 24 - } - }, - { - "filename": "lustrous_globe", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 304, - "y": 329, - "w": 24, - "h": 24 - } - }, - { - "filename": "repel", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 328, - "y": 329, - "w": 16, - "h": 24 - } - }, - { - "filename": "max_revive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, - "h": 24 - }, - "frame": { - "x": 344, - "y": 330, - "w": 22, - "h": 24 - } - }, - { - "filename": "meadow_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 366, - "y": 330, - "w": 24, - "h": 24 - } - }, - { - "filename": "oval_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 21, - "h": 24 - }, - "frame": { - "x": 390, - "y": 330, - "w": 21, - "h": 24 - } - }, - { - "filename": "mind_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 411, - "y": 332, - "w": 24, - "h": 24 - } - }, - { - "filename": "super_repel", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 0, - "y": 345, - "w": 16, - "h": 24 - } - }, - { - "filename": "muscle_band", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 16, - "y": 346, - "w": 24, - "h": 24 - } - }, - { - "filename": "pixie_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 40, - "y": 347, - "w": 24, - "h": 24 - } - }, - { - "filename": "unknown", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 64, - "y": 347, - "w": 16, - "h": 24 - } - }, - { - "filename": "red_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 20, - "h": 24 - }, - "frame": { - "x": 80, - "y": 349, - "w": 20, - "h": 24 - } - }, - { - "filename": "reveal_glass", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 23, - "h": 24 - }, - "frame": { - "x": 100, - "y": 349, - "w": 23, - "h": 24 - } - }, - { - "filename": "salac_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 123, - "y": 349, - "w": 24, - "h": 24 - } - }, - { - "filename": "shiny_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 21, - "h": 24 - }, - "frame": { - "x": 147, - "y": 349, - "w": 21, - "h": 24 - } - }, - { - "filename": "scanner", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 168, - "y": 350, - "w": 24, - "h": 24 - } - }, - { - "filename": "zinc", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 192, - "y": 350, - "w": 16, - "h": 24 - } - }, - { - "filename": "silk_scarf", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 208, - "y": 352, - "w": 24, - "h": 24 - } - }, - { - "filename": "sky_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 232, - "y": 352, - "w": 24, - "h": 24 - } - }, - { - "filename": "splash_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 256, - "y": 352, - "w": 24, - "h": 24 - } - }, - { - "filename": "spooky_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 280, - "y": 353, - "w": 24, - "h": 24 - } - }, - { - "filename": "stone_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 304, - "y": 353, - "w": 24, - "h": 24 - } - }, - { - "filename": "sun_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 328, - "y": 354, - "w": 24, - "h": 24 - } - }, - { - "filename": "super_lure", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 17, - "h": 24 - }, - "frame": { - "x": 352, - "y": 354, - "w": 17, - "h": 24 - } - }, - { - "filename": "toxic_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 369, - "y": 354, - "w": 24, - "h": 24 - } - }, - { - "filename": "zap_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 393, - "y": 356, - "w": 24, - "h": 24 - } - }, - { - "filename": "prison_bottle", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, "y": 1, - "w": 17, + "w": 29, "h": 30 }, - "frame": { - "x": 417, - "y": 356, - "w": 17, - "h": 30 - } - }, - { - "filename": "black_augurite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 22, - "h": 25 - }, "frame": { "x": 0, - "y": 370, - "w": 22, - "h": 25 - } - }, - { - "filename": "ability_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 23, - "h": 26 - }, - "frame": { - "x": 22, - "y": 371, - "w": 23, - "h": 26 - } - }, - { - "filename": "cornerstone_mask", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 24, - "h": 26 - }, - "frame": { - "x": 45, - "y": 371, - "w": 24, - "h": 26 - } - }, - { - "filename": "linking_cord", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 27, - "h": 26 - }, - "frame": { - "x": 69, - "y": 373, - "w": 27, - "h": 26 - } - }, - { - "filename": "mystical_rock", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 28, - "h": 26 - }, - "frame": { - "x": 96, - "y": 373, - "w": 28, - "h": 26 + "y": 0, + "w": 29, + "h": 30 } }, { @@ -8004,54 +45,12 @@ "h": 27 }, "frame": { - "x": 124, - "y": 373, + "x": 29, + "y": 0, "w": 32, "h": 27 } }, - { - "filename": "leaders_crest", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 29, - "h": 27 - }, - "frame": { - "x": 156, - "y": 374, - "w": 29, - "h": 27 - } - }, - { - "filename": "ribbon_gen1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 22, - "h": 28 - }, - "frame": { - "x": 185, - "y": 374, - "w": 22, - "h": 28 - } - }, { "filename": "max_mushrooms", "rotated": false, @@ -8067,33 +66,12 @@ "h": 28 }, "frame": { - "x": 207, - "y": 376, + "x": 0, + "y": 30, "w": 29, "h": 28 } }, - { - "filename": "ribbon_gen2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 28, - "h": 28 - }, - "frame": { - "x": 236, - "y": 376, - "w": 28, - "h": 28 - } - }, { "filename": "ribbon_gen4", "rotated": false, @@ -8109,14 +87,14 @@ "h": 28 }, "frame": { - "x": 264, - "y": 377, + "x": 29, + "y": 27, "w": 30, "h": 28 } }, { - "filename": "ribbon_gen5", + "filename": "leaders_crest", "rotated": false, "trimmed": true, "sourceSize": { @@ -8124,184 +102,37 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, + "x": 2, + "y": 3, + "w": 29, + "h": 27 + }, + "frame": { + "x": 61, + "y": 0, + "w": 29, + "h": 27 + } + }, + { + "filename": "ribbon_gen2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 2, "y": 2, - "w": 22, + "w": 28, "h": 28 }, - "frame": { - "x": 294, - "y": 377, - "w": 22, - "h": 28 - } - }, - { - "filename": "ribbon_gen6", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 22, - "h": 28 - }, - "frame": { - "x": 316, - "y": 378, - "w": 22, - "h": 28 - } - }, - { - "filename": "ribbon_gen8", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 22, - "h": 28 - }, - "frame": { - "x": 338, - "y": 378, - "w": 22, - "h": 28 - } - }, - { - "filename": "ribbon_gen3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 22, - "h": 29 - }, - "frame": { - "x": 360, - "y": 378, - "w": 22, - "h": 29 - } - }, - { - "filename": "ribbon_gen7", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 22, - "h": 29 - }, - "frame": { - "x": 382, - "y": 380, - "w": 22, - "h": 29 - } - }, - { - "filename": "ribbon_gen9", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 22, - "h": 29 - }, - "frame": { - "x": 404, - "y": 386, - "w": 22, - "h": 29 - } - }, - { - "filename": "inverse", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 22, - "h": 30 - }, "frame": { "x": 0, - "y": 395, - "w": 22, - "h": 30 - } - }, - { - "filename": "galarica_cuff", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 29, - "h": 30 - }, - "frame": { - "x": 22, - "y": 397, - "w": 29, - "h": 30 - } - }, - { - "filename": "exp_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 17, - "h": 31 - }, - "frame": { - "x": 51, - "y": 397, - "w": 17, - "h": 31 + "y": 58, + "w": 28, + "h": 28 } }, { @@ -8319,54 +150,12 @@ "h": 31 }, "frame": { - "x": 68, - "y": 399, + "x": 0, + "y": 86, "w": 22, "h": 31 } }, - { - "filename": "golden_exp_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 17, - "h": 31 - }, - "frame": { - "x": 90, - "y": 399, - "w": 17, - "h": 31 - } - }, - { - "filename": "super_exp_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 17, - "h": 31 - }, - "frame": { - "x": 107, - "y": 399, - "w": 17, - "h": 31 - } - }, { "filename": "great_ribbon", "rotated": false, @@ -8382,12 +171,33 @@ "h": 31 }, "frame": { - "x": 124, - "y": 400, + "x": 0, + "y": 117, "w": 22, "h": 31 } }, + { + "filename": "linking_cord", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 3, + "y": 3, + "w": 27, + "h": 26 + }, + "frame": { + "x": 59, + "y": 27, + "w": 27, + "h": 26 + } + }, { "filename": "master_ribbon", "rotated": false, @@ -8403,8 +213,8 @@ "h": 31 }, "frame": { - "x": 146, - "y": 401, + "x": 0, + "y": 148, "w": 22, "h": 31 } @@ -8424,8 +234,8 @@ "h": 31 }, "frame": { - "x": 168, - "y": 402, + "x": 0, + "y": 179, "w": 22, "h": 31 } @@ -8445,11 +255,8201 @@ "h": 31 }, "frame": { - "x": 190, - "y": 404, + "x": 0, + "y": 210, "w": 22, "h": 31 } + }, + { + "filename": "inverse", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 22, + "h": 30 + }, + "frame": { + "x": 0, + "y": 241, + "w": 22, + "h": 30 + } + }, + { + "filename": "ribbon_gen3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 22, + "h": 29 + }, + "frame": { + "x": 0, + "y": 271, + "w": 22, + "h": 29 + } + }, + { + "filename": "ribbon_gen7", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 22, + "h": 29 + }, + "frame": { + "x": 0, + "y": 300, + "w": 22, + "h": 29 + } + }, + { + "filename": "ribbon_gen9", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 22, + "h": 29 + }, + "frame": { + "x": 0, + "y": 329, + "w": 22, + "h": 29 + } + }, + { + "filename": "cornerstone_mask", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 3, + "w": 24, + "h": 26 + }, + "frame": { + "x": 90, + "y": 0, + "w": 24, + "h": 26 + } + }, + { + "filename": "ribbon_gen1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 2, + "w": 22, + "h": 28 + }, + "frame": { + "x": 0, + "y": 358, + "w": 22, + "h": 28 + } + }, + { + "filename": "ribbon_gen5", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 2, + "w": 22, + "h": 28 + }, + "frame": { + "x": 0, + "y": 386, + "w": 22, + "h": 28 + } + }, + { + "filename": "choice_specs", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 24, + "h": 18 + }, + "frame": { + "x": 0, + "y": 414, + "w": 24, + "h": 18 + } + }, + { + "filename": "ability_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 3, + "y": 3, + "w": 23, + "h": 26 + }, + "frame": { + "x": 114, + "y": 0, + "w": 23, + "h": 26 + } + }, + { + "filename": "map", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 3, + "y": 5, + "w": 27, + "h": 22 + }, + "frame": { + "x": 137, + "y": 0, + "w": 27, + "h": 22 + } + }, + { + "filename": "mint_atk", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 2, + "y": 5, + "w": 28, + "h": 21 + }, + "frame": { + "x": 164, + "y": 0, + "w": 28, + "h": 21 + } + }, + { + "filename": "mint_def", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 2, + "y": 5, + "w": 28, + "h": 21 + }, + "frame": { + "x": 192, + "y": 0, + "w": 28, + "h": 21 + } + }, + { + "filename": "mint_neutral", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 2, + "y": 5, + "w": 28, + "h": 21 + }, + "frame": { + "x": 220, + "y": 0, + "w": 28, + "h": 21 + } + }, + { + "filename": "mint_spatk", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 2, + "y": 5, + "w": 28, + "h": 21 + }, + "frame": { + "x": 248, + "y": 0, + "w": 28, + "h": 21 + } + }, + { + "filename": "mint_spd", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 2, + "y": 5, + "w": 28, + "h": 21 + }, + "frame": { + "x": 276, + "y": 0, + "w": 28, + "h": 21 + } + }, + { + "filename": "mint_spdef", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 2, + "y": 5, + "w": 28, + "h": 21 + }, + "frame": { + "x": 304, + "y": 0, + "w": 28, + "h": 21 + } + }, + { + "filename": "chipped_pot", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 3, + "y": 6, + "w": 26, + "h": 20 + }, + "frame": { + "x": 332, + "y": 0, + "w": 26, + "h": 20 + } + }, + { + "filename": "cracked_pot", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 3, + "y": 6, + "w": 26, + "h": 20 + }, + "frame": { + "x": 358, + "y": 0, + "w": 26, + "h": 20 + } + }, + { + "filename": "legend_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 3, + "y": 6, + "w": 25, + "h": 20 + }, + "frame": { + "x": 384, + "y": 0, + "w": 25, + "h": 20 + } + }, + { + "filename": "big_root", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 23, + "h": 24 + }, + "frame": { + "x": 409, + "y": 0, + "w": 23, + "h": 24 + } + }, + { + "filename": "exp_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 1, + "w": 17, + "h": 31 + }, + "frame": { + "x": 22, + "y": 86, + "w": 17, + "h": 31 + } + }, + { + "filename": "golden_exp_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 1, + "w": 17, + "h": 31 + }, + "frame": { + "x": 22, + "y": 117, + "w": 17, + "h": 31 + } + }, + { + "filename": "super_exp_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 1, + "w": 17, + "h": 31 + }, + "frame": { + "x": 22, + "y": 148, + "w": 17, + "h": 31 + } + }, + { + "filename": "prison_bottle", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 1, + "w": 17, + "h": 30 + }, + "frame": { + "x": 22, + "y": 179, + "w": 17, + "h": 30 + } + }, + { + "filename": "ribbon_gen6", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 2, + "w": 22, + "h": 28 + }, + "frame": { + "x": 22, + "y": 209, + "w": 22, + "h": 28 + } + }, + { + "filename": "ribbon_gen8", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 2, + "w": 22, + "h": 28 + }, + "frame": { + "x": 22, + "y": 237, + "w": 22, + "h": 28 + } + }, + { + "filename": "black_augurite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 3, + "w": 22, + "h": 25 + }, + "frame": { + "x": 22, + "y": 265, + "w": 22, + "h": 25 + } + }, + { + "filename": "blank_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 22, + "y": 290, + "w": 24, + "h": 24 + } + }, + { + "filename": "choice_scarf", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 22, + "y": 314, + "w": 24, + "h": 24 + } + }, + { + "filename": "draco_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 22, + "y": 338, + "w": 24, + "h": 24 + } + }, + { + "filename": "dread_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 22, + "y": 362, + "w": 24, + "h": 24 + } + }, + { + "filename": "earth_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 22, + "y": 386, + "w": 24, + "h": 24 + } + }, + { + "filename": "exp_balance", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 22 + }, + "frame": { + "x": 24, + "y": 410, + "w": 24, + "h": 22 + } + }, + { + "filename": "ultranecrozium_z", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 1, + "y": 9, + "w": 30, + "h": 15 + }, + "frame": { + "x": 29, + "y": 55, + "w": 30, + "h": 15 + } + }, + { + "filename": "mega_bracelet", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 16 + }, + "frame": { + "x": 28, + "y": 70, + "w": 20, + "h": 16 + } + }, + { + "filename": "mystical_rock", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 25, + "h": 23 + }, + "frame": { + "x": 59, + "y": 53, + "w": 25, + "h": 23 + } + }, + { + "filename": "calcium", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 39, + "y": 86, + "w": 16, + "h": 24 + } + }, + { + "filename": "carbos", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 39, + "y": 110, + "w": 16, + "h": 24 + } + }, + { + "filename": "catching_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 21, + "h": 24 + }, + "frame": { + "x": 39, + "y": 134, + "w": 21, + "h": 24 + } + }, + { + "filename": "fist_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 39, + "y": 158, + "w": 24, + "h": 24 + } + }, + { + "filename": "flame_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 39, + "y": 182, + "w": 24, + "h": 24 + } + }, + { + "filename": "focus_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 44, + "y": 206, + "w": 24, + "h": 24 + } + }, + { + "filename": "golden_punch", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 44, + "y": 230, + "w": 24, + "h": 24 + } + }, + { + "filename": "gracidea", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 44, + "y": 254, + "w": 24, + "h": 24 + } + }, + { + "filename": "grip_claw", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 55, + "y": 76, + "w": 24, + "h": 24 + } + }, + { + "filename": "icicle_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 55, + "y": 100, + "w": 24, + "h": 24 + } + }, + { + "filename": "insect_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 46, + "y": 278, + "w": 24, + "h": 24 + } + }, + { + "filename": "iron_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 46, + "y": 302, + "w": 24, + "h": 24 + } + }, + { + "filename": "lucky_punch", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 46, + "y": 326, + "w": 24, + "h": 24 + } + }, + { + "filename": "lucky_punch_great", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 46, + "y": 350, + "w": 24, + "h": 24 + } + }, + { + "filename": "lucky_punch_master", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 46, + "y": 374, + "w": 24, + "h": 24 + } + }, + { + "filename": "kings_rock", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 23, + "h": 24 + }, + "frame": { + "x": 48, + "y": 398, + "w": 23, + "h": 24 + } + }, + { + "filename": "lucky_punch_ultra", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 60, + "y": 124, + "w": 24, + "h": 24 + } + }, + { + "filename": "lustrous_globe", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 63, + "y": 148, + "w": 24, + "h": 24 + } + }, + { + "filename": "meadow_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 63, + "y": 172, + "w": 24, + "h": 24 + } + }, + { + "filename": "max_revive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 22, + "h": 24 + }, + "frame": { + "x": 68, + "y": 196, + "w": 22, + "h": 24 + } + }, + { + "filename": "mind_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 68, + "y": 220, + "w": 24, + "h": 24 + } + }, + { + "filename": "muscle_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 68, + "y": 244, + "w": 24, + "h": 24 + } + }, + { + "filename": "pixie_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 70, + "y": 268, + "w": 24, + "h": 24 + } + }, + { + "filename": "salac_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 70, + "y": 292, + "w": 24, + "h": 24 + } + }, + { + "filename": "scanner", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 70, + "y": 316, + "w": 24, + "h": 24 + } + }, + { + "filename": "silk_scarf", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 70, + "y": 340, + "w": 24, + "h": 24 + } + }, + { + "filename": "sky_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 70, + "y": 364, + "w": 24, + "h": 24 + } + }, + { + "filename": "reveal_glass", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 23, + "h": 24 + }, + "frame": { + "x": 71, + "y": 388, + "w": 23, + "h": 24 + } + }, + { + "filename": "icy_reins_of_unity", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 24, + "h": 20 + }, + "frame": { + "x": 71, + "y": 412, + "w": 24, + "h": 20 + } + }, + { + "filename": "elixir", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 79, + "y": 76, + "w": 18, + "h": 24 + } + }, + { + "filename": "ether", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 79, + "y": 100, + "w": 18, + "h": 24 + } + }, + { + "filename": "full_restore", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 84, + "y": 124, + "w": 18, + "h": 24 + } + }, + { + "filename": "hp_up", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 87, + "y": 148, + "w": 16, + "h": 24 + } + }, + { + "filename": "iron", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 87, + "y": 172, + "w": 16, + "h": 24 + } + }, + { + "filename": "lure", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 17, + "h": 24 + }, + "frame": { + "x": 90, + "y": 196, + "w": 17, + "h": 24 + } + }, + { + "filename": "max_elixir", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 92, + "y": 220, + "w": 18, + "h": 24 + } + }, + { + "filename": "max_ether", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 92, + "y": 244, + "w": 18, + "h": 24 + } + }, + { + "filename": "max_lure", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 17, + "h": 24 + }, + "frame": { + "x": 94, + "y": 268, + "w": 17, + "h": 24 + } + }, + { + "filename": "max_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 94, + "y": 292, + "w": 18, + "h": 24 + } + }, + { + "filename": "oval_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 21, + "h": 24 + }, + "frame": { + "x": 94, + "y": 316, + "w": 21, + "h": 24 + } + }, + { + "filename": "shiny_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 21, + "h": 24 + }, + "frame": { + "x": 94, + "y": 340, + "w": 21, + "h": 24 + } + }, + { + "filename": "splash_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 94, + "y": 364, + "w": 24, + "h": 24 + } + }, + { + "filename": "spooky_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 94, + "y": 388, + "w": 24, + "h": 24 + } + }, + { + "filename": "metal_powder", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 24, + "h": 20 + }, + "frame": { + "x": 95, + "y": 412, + "w": 24, + "h": 20 + } + }, + { + "filename": "berry_pouch", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 84, + "y": 53, + "w": 23, + "h": 23 + } + }, + { + "filename": "max_repel", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 97, + "y": 76, + "w": 16, + "h": 24 + } + }, + { + "filename": "pp_max", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 97, + "y": 100, + "w": 16, + "h": 24 + } + }, + { + "filename": "pp_up", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 102, + "y": 124, + "w": 16, + "h": 24 + } + }, + { + "filename": "protein", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 103, + "y": 148, + "w": 16, + "h": 24 + } + }, + { + "filename": "red_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 20, + "h": 24 + }, + "frame": { + "x": 103, + "y": 172, + "w": 20, + "h": 24 + } + }, + { + "filename": "repel", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 107, + "y": 196, + "w": 16, + "h": 24 + } + }, + { + "filename": "stone_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 110, + "y": 220, + "w": 24, + "h": 24 + } + }, + { + "filename": "sun_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 110, + "y": 244, + "w": 24, + "h": 24 + } + }, + { + "filename": "toxic_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 111, + "y": 268, + "w": 24, + "h": 24 + } + }, + { + "filename": "zap_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 112, + "y": 292, + "w": 24, + "h": 24 + } + }, + { + "filename": "black_belt", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 115, + "y": 316, + "w": 22, + "h": 23 + } + }, + { + "filename": "bug_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 115, + "y": 339, + "w": 22, + "h": 23 + } + }, + { + "filename": "clefairy_doll", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 23 + }, + "frame": { + "x": 118, + "y": 362, + "w": 24, + "h": 23 + } + }, + { + "filename": "coin_case", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 23 + }, + "frame": { + "x": 118, + "y": 385, + "w": 24, + "h": 23 + } + }, + { + "filename": "super_lure", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 17, + "h": 24 + }, + "frame": { + "x": 119, + "y": 408, + "w": 17, + "h": 24 + } + }, + { + "filename": "super_repel", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 136, + "y": 408, + "w": 16, + "h": 24 + } + }, + { + "filename": "ability_capsule", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 9, + "w": 24, + "h": 14 + }, + "frame": { + "x": 137, + "y": 22, + "w": 24, + "h": 14 + } + }, + { + "filename": "black_glasses", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 86, + "y": 36, + "w": 23, + "h": 17 + } + }, + { + "filename": "expert_belt", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 23 + }, + "frame": { + "x": 109, + "y": 26, + "w": 24, + "h": 23 + } + }, + { + "filename": "dragon_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 24, + "h": 18 + }, + "frame": { + "x": 133, + "y": 36, + "w": 24, + "h": 18 + } + }, + { + "filename": "exp_share", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 22 + }, + "frame": { + "x": 109, + "y": 49, + "w": 24, + "h": 22 + } + }, + { + "filename": "golden_net", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 21 + }, + "frame": { + "x": 133, + "y": 54, + "w": 24, + "h": 21 + } + }, + { + "filename": "mystic_water", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 20, + "h": 23 + }, + "frame": { + "x": 113, + "y": 71, + "w": 20, + "h": 23 + } + }, + { + "filename": "dark_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 113, + "y": 94, + "w": 22, + "h": 23 + } + }, + { + "filename": "coupon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 19 + }, + "frame": { + "x": 133, + "y": 75, + "w": 23, + "h": 19 + } + }, + { + "filename": "dragon_fang", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 21, + "h": 23 + }, + "frame": { + "x": 135, + "y": 94, + "w": 21, + "h": 23 + } + }, + { + "filename": "hearthflame_mask", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 23 + }, + "frame": { + "x": 118, + "y": 117, + "w": 24, + "h": 23 + } + }, + { + "filename": "dynamax_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 23, + "h": 23 + }, + "frame": { + "x": 119, + "y": 140, + "w": 23, + "h": 23 + } + }, + { + "filename": "unknown", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 142, + "y": 117, + "w": 16, + "h": 24 + } + }, + { + "filename": "berry_pot", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 18, + "h": 22 + }, + "frame": { + "x": 142, + "y": 141, + "w": 18, + "h": 22 + } + }, + { + "filename": "leppa_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 23 + }, + "frame": { + "x": 123, + "y": 163, + "w": 24, + "h": 23 + } + }, + { + "filename": "scope_lens", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 23 + }, + "frame": { + "x": 123, + "y": 186, + "w": 24, + "h": 23 + } + }, + { + "filename": "relic_gold", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 11, + "w": 15, + "h": 11 + }, + "frame": { + "x": 123, + "y": 209, + "w": 15, + "h": 11 + } + }, + { + "filename": "zinc", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 147, + "y": 163, + "w": 16, + "h": 24 + } + }, + { + "filename": "bug_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 147, + "y": 187, + "w": 22, + "h": 22 + } + }, + { + "filename": "peat_block", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 22 + }, + "frame": { + "x": 138, + "y": 209, + "w": 24, + "h": 22 + } + }, + { + "filename": "twisted_spoon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 23 + }, + "frame": { + "x": 134, + "y": 231, + "w": 24, + "h": 23 + } + }, + { + "filename": "griseous_core", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 135, + "y": 254, + "w": 23, + "h": 23 + } + }, + { + "filename": "silver_powder", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 11, + "w": 24, + "h": 15 + }, + "frame": { + "x": 135, + "y": 277, + "w": 24, + "h": 15 + } + }, + { + "filename": "leek", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 136, + "y": 292, + "w": 23, + "h": 23 + } + }, + { + "filename": "dragon_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 137, + "y": 315, + "w": 22, + "h": 23 + } + }, + { + "filename": "electric_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 137, + "y": 338, + "w": 22, + "h": 23 + } + }, + { + "filename": "fairy_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 142, + "y": 361, + "w": 22, + "h": 23 + } + }, + { + "filename": "fighting_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 142, + "y": 384, + "w": 22, + "h": 23 + } + }, + { + "filename": "fire_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 152, + "y": 407, + "w": 22, + "h": 23 + } + }, + { + "filename": "charcoal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 162, + "y": 209, + "w": 22, + "h": 22 + } + }, + { + "filename": "macho_brace", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 158, + "y": 231, + "w": 23, + "h": 23 + } + }, + { + "filename": "rare_candy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 158, + "y": 254, + "w": 23, + "h": 23 + } + }, + { + "filename": "fire_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 159, + "y": 277, + "w": 22, + "h": 23 + } + }, + { + "filename": "focus_sash", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 159, + "y": 300, + "w": 22, + "h": 23 + } + }, + { + "filename": "ghost_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 159, + "y": 323, + "w": 22, + "h": 23 + } + }, + { + "filename": "candy_overlay", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 12, + "w": 16, + "h": 15 + }, + "frame": { + "x": 159, + "y": 346, + "w": 16, + "h": 15 + } + }, + { + "filename": "full_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 15, + "h": 23 + }, + "frame": { + "x": 164, + "y": 361, + "w": 15, + "h": 23 + } + }, + { + "filename": "grass_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 164, + "y": 384, + "w": 22, + "h": 23 + } + }, + { + "filename": "ground_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 174, + "y": 407, + "w": 22, + "h": 23 + } + }, + { + "filename": "hyper_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 157, + "y": 36, + "w": 17, + "h": 23 + } + }, + { + "filename": "adamant_crystal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 23, + "h": 21 + }, + "frame": { + "x": 157, + "y": 59, + "w": 23, + "h": 21 + } + }, + { + "filename": "rarer_candy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 156, + "y": 80, + "w": 23, + "h": 23 + } + }, + { + "filename": "healing_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 23, + "h": 22 + }, + "frame": { + "x": 174, + "y": 21, + "w": 23, + "h": 22 + } + }, + { + "filename": "rusted_sword", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 22 + }, + "frame": { + "x": 197, + "y": 21, + "w": 23, + "h": 22 + } + }, + { + "filename": "amulet_coin", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 23, + "h": 21 + }, + "frame": { + "x": 220, + "y": 21, + "w": 23, + "h": 21 + } + }, + { + "filename": "auspicious_armor", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 21 + }, + "frame": { + "x": 243, + "y": 21, + "w": 23, + "h": 21 + } + }, + { + "filename": "moon_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 23, + "h": 21 + }, + "frame": { + "x": 266, + "y": 21, + "w": 23, + "h": 21 + } + }, + { + "filename": "n_lunarizer", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 23, + "h": 21 + }, + "frame": { + "x": 289, + "y": 21, + "w": 23, + "h": 21 + } + }, + { + "filename": "berry_juice", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 21 + }, + "frame": { + "x": 312, + "y": 21, + "w": 22, + "h": 21 + } + }, + { + "filename": "dark_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 334, + "y": 20, + "w": 22, + "h": 22 + } + }, + { + "filename": "dire_hit", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 356, + "y": 20, + "w": 22, + "h": 22 + } + }, + { + "filename": "dna_splicers", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 378, + "y": 20, + "w": 22, + "h": 22 + } + }, + { + "filename": "relic_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 9, + "w": 17, + "h": 16 + }, + "frame": { + "x": 174, + "y": 43, + "w": 17, + "h": 16 + } + }, + { + "filename": "quick_powder", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 24, + "h": 20 + }, + "frame": { + "x": 191, + "y": 43, + "w": 24, + "h": 20 + } + }, + { + "filename": "rusted_shield", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 24, + "h": 20 + }, + "frame": { + "x": 400, + "y": 24, + "w": 24, + "h": 20 + } + }, + { + "filename": "ice_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 158, + "y": 103, + "w": 22, + "h": 23 + } + }, + { + "filename": "eviolite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 15, + "h": 15 + }, + "frame": { + "x": 158, + "y": 126, + "w": 15, + "h": 15 + } + }, + { + "filename": "dragon_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 160, + "y": 141, + "w": 22, + "h": 22 + } + }, + { + "filename": "lansat_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 21, + "h": 23 + }, + "frame": { + "x": 163, + "y": 163, + "w": 21, + "h": 23 + } + }, + { + "filename": "leaf_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 21, + "h": 23 + }, + "frame": { + "x": 169, + "y": 186, + "w": 21, + "h": 23 + } + }, + { + "filename": "prism_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 8, + "w": 15, + "h": 15 + }, + "frame": { + "x": 173, + "y": 126, + "w": 15, + "h": 15 + } + }, + { + "filename": "electirizer", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 182, + "y": 141, + "w": 22, + "h": 22 + } + }, + { + "filename": "never_melt_ice", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 184, + "y": 163, + "w": 22, + "h": 23 + } + }, + { + "filename": "normal_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 190, + "y": 186, + "w": 22, + "h": 23 + } + }, + { + "filename": "electric_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 184, + "y": 209, + "w": 22, + "h": 22 + } + }, + { + "filename": "petaya_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 181, + "y": 231, + "w": 22, + "h": 23 + } + }, + { + "filename": "poison_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 181, + "y": 254, + "w": 22, + "h": 23 + } + }, + { + "filename": "psychic_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 181, + "y": 277, + "w": 22, + "h": 23 + } + }, + { + "filename": "reaper_cloth", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 181, + "y": 300, + "w": 22, + "h": 23 + } + }, + { + "filename": "rock_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 181, + "y": 323, + "w": 22, + "h": 23 + } + }, + { + "filename": "sacred_ash", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 24, + "h": 20 + }, + "frame": { + "x": 180, + "y": 63, + "w": 24, + "h": 20 + } + }, + { + "filename": "shadow_reins_of_unity", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 24, + "h": 20 + }, + "frame": { + "x": 179, + "y": 83, + "w": 24, + "h": 20 + } + }, + { + "filename": "steel_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 180, + "y": 103, + "w": 22, + "h": 23 + } + }, + { + "filename": "apicot_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 20 + }, + "frame": { + "x": 204, + "y": 63, + "w": 19, + "h": 20 + } + }, + { + "filename": "big_nugget", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 203, + "y": 83, + "w": 20, + "h": 20 + } + }, + { + "filename": "sharp_beak", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 21, + "h": 23 + }, + "frame": { + "x": 202, + "y": 103, + "w": 21, + "h": 23 + } + }, + { + "filename": "binding_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 23, + "h": 20 + }, + "frame": { + "x": 215, + "y": 43, + "w": 23, + "h": 20 + } + }, + { + "filename": "n_solarizer", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 23, + "h": 21 + }, + "frame": { + "x": 238, + "y": 42, + "w": 23, + "h": 21 + } + }, + { + "filename": "stellar_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 223, + "y": 63, + "w": 22, + "h": 23 + } + }, + { + "filename": "water_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 223, + "y": 86, + "w": 22, + "h": 23 + } + }, + { + "filename": "soft_sand", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 24, + "h": 20 + }, + "frame": { + "x": 261, + "y": 42, + "w": 24, + "h": 20 + } + }, + { + "filename": "reviver_seed", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 8, + "w": 23, + "h": 20 + }, + "frame": { + "x": 285, + "y": 42, + "w": 23, + "h": 20 + } + }, + { + "filename": "shell_bell", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 23, + "h": 20 + }, + "frame": { + "x": 308, + "y": 42, + "w": 23, + "h": 20 + } + }, + { + "filename": "wellspring_mask", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 21 + }, + "frame": { + "x": 331, + "y": 42, + "w": 23, + "h": 21 + } + }, + { + "filename": "deep_sea_tooth", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 21 + }, + "frame": { + "x": 354, + "y": 42, + "w": 22, + "h": 21 + } + }, + { + "filename": "enigma_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 376, + "y": 42, + "w": 22, + "h": 22 + } + }, + { + "filename": "deep_sea_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 20 + }, + "frame": { + "x": 398, + "y": 44, + "w": 22, + "h": 20 + } + }, + { + "filename": "black_sludge", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 19 + }, + "frame": { + "x": 223, + "y": 109, + "w": 22, + "h": 19 + } + }, + { + "filename": "potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 245, + "y": 63, + "w": 17, + "h": 23 + } + }, + { + "filename": "wide_lens", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 262, + "y": 62, + "w": 22, + "h": 23 + } + }, + { + "filename": "fairy_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 284, + "y": 62, + "w": 22, + "h": 22 + } + }, + { + "filename": "fighting_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 306, + "y": 62, + "w": 22, + "h": 22 + } + }, + { + "filename": "fire_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 328, + "y": 63, + "w": 22, + "h": 22 + } + }, + { + "filename": "flying_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 350, + "y": 63, + "w": 22, + "h": 22 + } + }, + { + "filename": "sachet", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 18, + "h": 23 + }, + "frame": { + "x": 245, + "y": 86, + "w": 18, + "h": 23 + } + }, + { + "filename": "whipped_dream", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 21, + "h": 23 + }, + "frame": { + "x": 263, + "y": 85, + "w": 21, + "h": 23 + } + }, + { + "filename": "ganlon_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 284, + "y": 84, + "w": 22, + "h": 22 + } + }, + { + "filename": "ghost_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 306, + "y": 84, + "w": 22, + "h": 22 + } + }, + { + "filename": "grass_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 328, + "y": 85, + "w": 22, + "h": 22 + } + }, + { + "filename": "ground_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 350, + "y": 85, + "w": 22, + "h": 22 + } + }, + { + "filename": "guard_spec", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 372, + "y": 64, + "w": 22, + "h": 22 + } + }, + { + "filename": "ice_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 394, + "y": 64, + "w": 22, + "h": 22 + } + }, + { + "filename": "ice_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 372, + "y": 86, + "w": 22, + "h": 22 + } + }, + { + "filename": "magmarizer", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 394, + "y": 86, + "w": 22, + "h": 22 + } + }, + { + "filename": "mystery_egg", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 18 + }, + "frame": { + "x": 416, + "y": 64, + "w": 16, + "h": 18 + } + }, + { + "filename": "abomasite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 416, + "y": 82, + "w": 16, + "h": 16 + } + }, + { + "filename": "absolite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 416, + "y": 98, + "w": 16, + "h": 16 + } + }, + { + "filename": "revive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 10, + "y": 8, + "w": 12, + "h": 17 + }, + "frame": { + "x": 420, + "y": 44, + "w": 12, + "h": 17 + } + }, + { + "filename": "big_mushroom", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 19 + }, + "frame": { + "x": 245, + "y": 109, + "w": 19, + "h": 19 + } + }, + { + "filename": "blue_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 264, + "y": 108, + "w": 20, + "h": 20 + } + }, + { + "filename": "mini_black_hole", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 284, + "y": 106, + "w": 22, + "h": 22 + } + }, + { + "filename": "moon_flute", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 306, + "y": 106, + "w": 22, + "h": 22 + } + }, + { + "filename": "liechi_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 21 + }, + "frame": { + "x": 328, + "y": 107, + "w": 22, + "h": 21 + } + }, + { + "filename": "normal_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 350, + "y": 107, + "w": 22, + "h": 22 + } + }, + { + "filename": "poison_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 372, + "y": 108, + "w": 22, + "h": 22 + } + }, + { + "filename": "protector", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 394, + "y": 108, + "w": 22, + "h": 22 + } + }, + { + "filename": "aerodactylite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 416, + "y": 114, + "w": 16, + "h": 16 + } + }, + { + "filename": "psychic_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 179, + "y": 346, + "w": 22, + "h": 22 + } + }, + { + "filename": "aggronite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 179, + "y": 368, + "w": 16, + "h": 16 + } + }, + { + "filename": "super_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 186, + "y": 384, + "w": 17, + "h": 23 + } + }, + { + "filename": "alakazite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 195, + "y": 368, + "w": 16, + "h": 16 + } + }, + { + "filename": "hard_meteorite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 20, + "h": 22 + }, + "frame": { + "x": 201, + "y": 346, + "w": 20, + "h": 22 + } + }, + { + "filename": "leftovers", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 15, + "h": 22 + }, + "frame": { + "x": 203, + "y": 384, + "w": 15, + "h": 22 + } + }, + { + "filename": "altarianite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 211, + "y": 368, + "w": 16, + "h": 16 + } + }, + { + "filename": "lock_capsule", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 19, + "h": 22 + }, + "frame": { + "x": 218, + "y": 384, + "w": 19, + "h": 22 + } + }, + { + "filename": "metal_coat", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 19, + "h": 22 + }, + "frame": { + "x": 196, + "y": 407, + "w": 19, + "h": 22 + } + }, + { + "filename": "rock_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 215, + "y": 406, + "w": 22, + "h": 22 + } + }, + { + "filename": "metronome", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 17, + "h": 22 + }, + "frame": { + "x": 206, + "y": 209, + "w": 17, + "h": 22 + } + }, + { + "filename": "scroll_of_darkness", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 203, + "y": 231, + "w": 22, + "h": 22 + } + }, + { + "filename": "scroll_of_waters", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 203, + "y": 253, + "w": 22, + "h": 22 + } + }, + { + "filename": "shed_shell", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 203, + "y": 275, + "w": 22, + "h": 22 + } + }, + { + "filename": "starf_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 203, + "y": 297, + "w": 22, + "h": 22 + } + }, + { + "filename": "steel_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 203, + "y": 319, + "w": 22, + "h": 22 + } + }, + { + "filename": "quick_claw", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 21 + }, + "frame": { + "x": 204, + "y": 126, + "w": 19, + "h": 21 + } + }, + { + "filename": "golden_mystic_ticket", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 19 + }, + "frame": { + "x": 223, + "y": 128, + "w": 23, + "h": 19 + } + }, + { + "filename": "mystic_ticket", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 19 + }, + "frame": { + "x": 246, + "y": 128, + "w": 23, + "h": 19 + } + }, + { + "filename": "pair_of_tickets", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 19 + }, + "frame": { + "x": 269, + "y": 128, + "w": 23, + "h": 19 + } + }, + { + "filename": "blunder_policy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 19 + }, + "frame": { + "x": 292, + "y": 128, + "w": 22, + "h": 19 + } + }, + { + "filename": "dubious_disc", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 19 + }, + "frame": { + "x": 314, + "y": 128, + "w": 22, + "h": 19 + } + }, + { + "filename": "ampharosite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 204, + "y": 147, + "w": 16, + "h": 16 + } + }, + { + "filename": "burn_drive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 220, + "y": 147, + "w": 23, + "h": 17 + } + }, + { + "filename": "chill_drive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 243, + "y": 147, + "w": 23, + "h": 17 + } + }, + { + "filename": "douse_drive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 266, + "y": 147, + "w": 23, + "h": 17 + } + }, + { + "filename": "relic_crown", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 18 + }, + "frame": { + "x": 289, + "y": 147, + "w": 23, + "h": 18 + } + }, + { + "filename": "fairy_feather", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 20 + }, + "frame": { + "x": 312, + "y": 147, + "w": 22, + "h": 20 + } + }, + { + "filename": "sun_flute", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 206, + "y": 164, + "w": 22, + "h": 22 + } + }, + { + "filename": "thick_club", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 228, + "y": 164, + "w": 22, + "h": 22 + } + }, + { + "filename": "thunder_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 212, + "y": 186, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_bug", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 250, + "y": 164, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_dark", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 234, + "y": 186, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_dragon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 223, + "y": 208, + "w": 22, + "h": 22 + } + }, + { + "filename": "sitrus_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 20, + "h": 22 + }, + "frame": { + "x": 225, + "y": 230, + "w": 20, + "h": 22 + } + }, + { + "filename": "tm_electric", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 225, + "y": 252, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_fairy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 225, + "y": 274, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_fighting", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 225, + "y": 296, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_fire", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 225, + "y": 318, + "w": 22, + "h": 22 + } + }, + { + "filename": "soothe_bell", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 22 + }, + "frame": { + "x": 272, + "y": 164, + "w": 17, + "h": 22 + } + }, + { + "filename": "tm_flying", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 256, + "y": 186, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_ghost", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 245, + "y": 208, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_grass", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 245, + "y": 230, + "w": 22, + "h": 22 + } + }, + { + "filename": "sweet_apple", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 21 + }, + "frame": { + "x": 289, + "y": 165, + "w": 22, + "h": 21 + } + }, + { + "filename": "tm_ground", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 278, + "y": 186, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_ice", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 267, + "y": 208, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_normal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 267, + "y": 230, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_poison", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 247, + "y": 252, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_psychic", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 247, + "y": 274, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_rock", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 247, + "y": 296, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_steel", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 247, + "y": 318, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_water", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 269, + "y": 252, + "w": 22, + "h": 22 + } + }, + { + "filename": "water_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 269, + "y": 274, + "w": 22, + "h": 22 + } + }, + { + "filename": "water_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 269, + "y": 296, + "w": 22, + "h": 22 + } + }, + { + "filename": "x_accuracy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 269, + "y": 318, + "w": 22, + "h": 22 + } + }, + { + "filename": "malicious_armor", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 20 + }, + "frame": { + "x": 311, + "y": 167, + "w": 22, + "h": 20 + } + }, + { + "filename": "x_attack", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 289, + "y": 208, + "w": 22, + "h": 22 + } + }, + { + "filename": "x_defense", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 289, + "y": 230, + "w": 22, + "h": 22 + } + }, + { + "filename": "syrupy_apple", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 21 + }, + "frame": { + "x": 300, + "y": 187, + "w": 22, + "h": 21 + } + }, + { + "filename": "x_sp_atk", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 291, + "y": 252, + "w": 22, + "h": 22 + } + }, + { + "filename": "x_sp_def", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 291, + "y": 274, + "w": 22, + "h": 22 + } + }, + { + "filename": "x_speed", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 291, + "y": 296, + "w": 22, + "h": 22 + } + }, + { + "filename": "tart_apple", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 21 + }, + "frame": { + "x": 291, + "y": 318, + "w": 22, + "h": 21 + } + }, + { + "filename": "dawn_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 21 + }, + "frame": { + "x": 322, + "y": 187, + "w": 20, + "h": 21 + } + }, + { + "filename": "dusk_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 311, + "y": 208, + "w": 21, + "h": 21 + } + }, + { + "filename": "poison_barb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 311, + "y": 229, + "w": 21, + "h": 21 + } + }, + { + "filename": "flying_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 20, + "h": 21 + }, + "frame": { + "x": 313, + "y": 250, + "w": 20, + "h": 21 + } + }, + { + "filename": "shiny_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 313, + "y": 271, + "w": 21, + "h": 21 + } + }, + { + "filename": "zoom_lens", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 313, + "y": 292, + "w": 21, + "h": 21 + } + }, + { + "filename": "tera_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 20 + }, + "frame": { + "x": 313, + "y": 313, + "w": 22, + "h": 20 + } + }, + { + "filename": "spell_tag", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 19, + "h": 21 + }, + "frame": { + "x": 332, + "y": 208, + "w": 19, + "h": 21 + } + }, + { + "filename": "candy_jar", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 20 + }, + "frame": { + "x": 332, + "y": 229, + "w": 19, + "h": 20 + } + }, + { + "filename": "gb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 333, + "y": 249, + "w": 20, + "h": 20 + } + }, + { + "filename": "hard_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 20 + }, + "frame": { + "x": 334, + "y": 269, + "w": 19, + "h": 20 + } + }, + { + "filename": "magnet", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 334, + "y": 289, + "w": 20, + "h": 20 + } + }, + { + "filename": "mb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 335, + "y": 309, + "w": 20, + "h": 20 + } + }, + { + "filename": "golden_egg", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 17, + "h": 20 + }, + "frame": { + "x": 333, + "y": 167, + "w": 17, + "h": 20 + } + }, + { + "filename": "lucky_egg", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 17, + "h": 20 + }, + "frame": { + "x": 334, + "y": 147, + "w": 17, + "h": 20 + } + }, + { + "filename": "masterpiece_teacup", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 21, + "h": 18 + }, + "frame": { + "x": 336, + "y": 129, + "w": 21, + "h": 18 + } + }, + { + "filename": "pb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 342, + "y": 187, + "w": 20, + "h": 20 + } + }, + { + "filename": "pb_gold", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 350, + "y": 167, + "w": 20, + "h": 20 + } + }, + { + "filename": "pb_silver", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 351, + "y": 147, + "w": 20, + "h": 20 + } + }, + { + "filename": "shock_drive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 357, + "y": 130, + "w": 23, + "h": 17 + } + }, + { + "filename": "wise_glasses", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 380, + "y": 130, + "w": 23, + "h": 17 + } + }, + { + "filename": "upgrade", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 19 + }, + "frame": { + "x": 371, + "y": 147, + "w": 22, + "h": 19 + } + }, + { + "filename": "metal_alloy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 21, + "h": 19 + }, + "frame": { + "x": 403, + "y": 130, + "w": 21, + "h": 19 + } + }, + { + "filename": "razor_fang", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 18, + "h": 20 + }, + "frame": { + "x": 351, + "y": 207, + "w": 18, + "h": 20 + } + }, + { + "filename": "rb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 351, + "y": 227, + "w": 20, + "h": 20 + } + }, + { + "filename": "smooth_meteorite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 353, + "y": 247, + "w": 20, + "h": 20 + } + }, + { + "filename": "strange_ball", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 353, + "y": 267, + "w": 20, + "h": 20 + } + }, + { + "filename": "ub", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 354, + "y": 287, + "w": 20, + "h": 20 + } + }, + { + "filename": "lum_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 20, + "h": 19 + }, + "frame": { + "x": 355, + "y": 307, + "w": 20, + "h": 19 + } + }, + { + "filename": "old_gateau", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 21, + "h": 18 + }, + "frame": { + "x": 393, + "y": 149, + "w": 21, + "h": 18 + } + }, + { + "filename": "oval_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 19 + }, + "frame": { + "x": 414, + "y": 149, + "w": 18, + "h": 19 + } + }, + { + "filename": "miracle_seed", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 19, + "h": 19 + }, + "frame": { + "x": 362, + "y": 187, + "w": 19, + "h": 19 + } + }, + { + "filename": "power_herb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 20, + "h": 19 + }, + "frame": { + "x": 369, + "y": 206, + "w": 20, + "h": 19 + } + }, + { + "filename": "razor_claw", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 20, + "h": 19 + }, + "frame": { + "x": 371, + "y": 225, + "w": 20, + "h": 19 + } + }, + { + "filename": "white_herb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 20, + "h": 19 + }, + "frame": { + "x": 373, + "y": 244, + "w": 20, + "h": 19 + } + }, + { + "filename": "sharp_meteorite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 21, + "h": 18 + }, + "frame": { + "x": 373, + "y": 263, + "w": 21, + "h": 18 + } + }, + { + "filename": "unremarkable_teacup", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 21, + "h": 18 + }, + "frame": { + "x": 374, + "y": 281, + "w": 21, + "h": 18 + } + }, + { + "filename": "wl_ability_urge", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 375, + "y": 299, + "w": 20, + "h": 18 + } + }, + { + "filename": "everstone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 17 + }, + "frame": { + "x": 375, + "y": 317, + "w": 20, + "h": 17 + } + }, + { + "filename": "wl_antidote", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 355, + "y": 326, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_awakening", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 335, + "y": 329, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_burn_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 375, + "y": 334, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_custom_spliced", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 355, + "y": 344, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_custom_thief", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 375, + "y": 352, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_elixir", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 313, + "y": 333, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_ether", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 333, + "y": 347, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_full_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 371, + "y": 166, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_full_restore", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 391, + "y": 167, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_guard_spec", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 411, + "y": 168, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_hyper_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 381, + "y": 185, + "w": 20, + "h": 18 + } + }, + { + "filename": "baton", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 18 + }, + "frame": { + "x": 389, + "y": 203, + "w": 18, + "h": 18 + } + }, + { + "filename": "candy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 11, + "w": 18, + "h": 18 + }, + "frame": { + "x": 391, + "y": 221, + "w": 18, + "h": 18 + } + }, + { + "filename": "dark_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 18 + }, + "frame": { + "x": 393, + "y": 239, + "w": 18, + "h": 18 + } + }, + { + "filename": "flame_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 18 + }, + "frame": { + "x": 394, + "y": 257, + "w": 18, + "h": 18 + } + }, + { + "filename": "wl_ice_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 412, + "y": 186, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_item_drop", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 412, + "y": 204, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_item_urge", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 412, + "y": 222, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_max_elixir", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 412, + "y": 240, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_max_ether", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 412, + "y": 258, + "w": 20, + "h": 18 + } + }, + { + "filename": "audinite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 395, + "y": 275, + "w": 16, + "h": 16 + } + }, + { + "filename": "light_ball", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 18 + }, + "frame": { + "x": 395, + "y": 291, + "w": 18, + "h": 18 + } + }, + { + "filename": "light_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 18 + }, + "frame": { + "x": 395, + "y": 309, + "w": 18, + "h": 18 + } + }, + { + "filename": "toxic_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 18 + }, + "frame": { + "x": 395, + "y": 327, + "w": 18, + "h": 18 + } + }, + { + "filename": "wl_max_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 395, + "y": 345, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_max_revive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 395, + "y": 363, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_paralyze_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 225, + "y": 340, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 245, + "y": 340, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_reset_urge", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 265, + "y": 340, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_revive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 227, + "y": 358, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_super_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 247, + "y": 358, + "w": 20, + "h": 18 + } + }, + { + "filename": "banettite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 267, + "y": 358, + "w": 16, + "h": 16 + } + }, + { + "filename": "beedrillite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 237, + "y": 376, + "w": 16, + "h": 16 + } + }, + { + "filename": "blastoisinite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 237, + "y": 392, + "w": 16, + "h": 16 + } + }, + { + "filename": "blazikenite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 237, + "y": 408, + "w": 16, + "h": 16 + } + }, + { + "filename": "cameruptite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 253, + "y": 376, + "w": 16, + "h": 16 + } + }, + { + "filename": "charizardite_x", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 253, + "y": 392, + "w": 16, + "h": 16 + } + }, + { + "filename": "charizardite_y", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 253, + "y": 408, + "w": 16, + "h": 16 + } + }, + { + "filename": "diancite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 269, + "y": 374, + "w": 16, + "h": 16 + } + }, + { + "filename": "galladite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 269, + "y": 390, + "w": 16, + "h": 16 + } + }, + { + "filename": "garchompite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 269, + "y": 406, + "w": 16, + "h": 16 + } + }, + { + "filename": "gardevoirite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 285, + "y": 340, + "w": 16, + "h": 16 + } + }, + { + "filename": "gengarite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 283, + "y": 358, + "w": 16, + "h": 16 + } + }, + { + "filename": "glalitite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 285, + "y": 374, + "w": 16, + "h": 16 + } + }, + { + "filename": "gyaradosite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 285, + "y": 390, + "w": 16, + "h": 16 + } + }, + { + "filename": "heracronite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 285, + "y": 406, + "w": 16, + "h": 16 + } + }, + { + "filename": "houndoominite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 353, + "y": 362, + "w": 16, + "h": 16 + } + }, + { + "filename": "kangaskhanite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 369, + "y": 370, + "w": 16, + "h": 16 + } + }, + { + "filename": "latiasite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 413, + "y": 276, + "w": 16, + "h": 16 + } + }, + { + "filename": "latiosite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 413, + "y": 292, + "w": 16, + "h": 16 + } + }, + { + "filename": "lopunnite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 413, + "y": 308, + "w": 16, + "h": 16 + } + }, + { + "filename": "lucarionite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 413, + "y": 324, + "w": 16, + "h": 16 + } + }, + { + "filename": "manectite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 415, + "y": 340, + "w": 16, + "h": 16 + } + }, + { + "filename": "mawilite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 415, + "y": 356, + "w": 16, + "h": 16 + } + }, + { + "filename": "medichamite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 415, + "y": 372, + "w": 16, + "h": 16 + } + }, + { + "filename": "metagrossite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 299, + "y": 356, + "w": 16, + "h": 16 + } + }, + { + "filename": "mewtwonite_x", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 301, + "y": 372, + "w": 16, + "h": 16 + } + }, + { + "filename": "mewtwonite_y", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 301, + "y": 388, + "w": 16, + "h": 16 + } + }, + { + "filename": "nugget", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 301, + "y": 404, + "w": 16, + "h": 16 + } + }, + { + "filename": "pidgeotite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 317, + "y": 351, + "w": 16, + "h": 16 + } + }, + { + "filename": "pinsirite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 317, + "y": 367, + "w": 16, + "h": 16 + } + }, + { + "filename": "rayquazite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 333, + "y": 365, + "w": 16, + "h": 16 + } + }, + { + "filename": "sablenite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 317, + "y": 383, + "w": 16, + "h": 16 + } + }, + { + "filename": "salamencite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 333, + "y": 381, + "w": 16, + "h": 16 + } + }, + { + "filename": "sceptilite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 317, + "y": 399, + "w": 16, + "h": 16 + } + }, + { + "filename": "scizorite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 333, + "y": 397, + "w": 16, + "h": 16 + } + }, + { + "filename": "sharpedonite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 349, + "y": 378, + "w": 16, + "h": 16 + } + }, + { + "filename": "slowbronite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 349, + "y": 394, + "w": 16, + "h": 16 + } + }, + { + "filename": "soul_dew", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 365, + "y": 386, + "w": 16, + "h": 16 + } + }, + { + "filename": "steelixite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 365, + "y": 402, + "w": 16, + "h": 16 + } + }, + { + "filename": "strawberry_sweet", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 7, + "w": 16, + "h": 16 + }, + "frame": { + "x": 349, + "y": 410, + "w": 16, + "h": 16 + } + }, + { + "filename": "swampertite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 333, + "y": 413, + "w": 16, + "h": 16 + } + }, + { + "filename": "tyranitarite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 317, + "y": 415, + "w": 16, + "h": 16 + } + }, + { + "filename": "venusaurite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 381, + "y": 386, + "w": 16, + "h": 16 + } } ] } @@ -8457,6 +8457,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:7b927dc715c6335dfca9e369b61374b2:fb24603dd37bbe0cbdf1d74fcbcbd223:110e074689c9edd2c54833ce2e4d9270$" + "smartupdate": "$TexturePacker:SmartUpdate:c228145ca625236e53edc95aac265d56:86524cdf0e3043482141d77259bc4d47:110e074689c9edd2c54833ce2e4d9270$" } } diff --git a/public/images/items.png b/public/images/items.png index 4433ce43a40296587c71ae16307f1411b4188244..eb9878a5bfcd0778d70fb422928e729b08f40815 100644 GIT binary patch literal 59346 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 z zBrfVDBxCUcasV5fO5B>OMZ2J`+ta^o%ZYX`hA7C$$W1rpx*pEQ8dfd)Z*4jXgFLFn z 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
    N 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 UHuyZ|N&o-=07*qoM6N<$f_MKR6951J diff --git a/public/images/items/mystical_rock.png b/public/images/items/mystical_rock.png index f87fe2a9dcb07703a59e9f1b66977f31bcc96790..81a397e4c2d6f5294fc0fe19f486b27d52a01dac 100644 GIT binary patch delta 587 zcmV-R0<`^;2lNJzL4TZ3OjJc8BrN~=ix3bH_|VYn&Pv3dH>!Ot=8>XVMM{s7!uWWg zXls?&V1R8?L%vXcUO8as`1nglaKxrTIxtm~*Tny~uy#LadgE8qaBxAKF>sx;!TYXC zO@?BJnW!^pFF{me40000qbW%=Jk?|~&0S6iYOIIRg00009a7bBm z000ic000ic0Tn1pfRi@?b`J7(0RZR&008oK0RZR&le+<0f2HO~xyn+bJ4r-A zR5(x7(%W)^Fc1dd5HS`OX)sU$L&O6Xgjy@_|8Cs~jKMO~%TE8BEVEz2av<$5`FDUk zE*|9wSd{kFY}QvMAeKF6l;CFUFQx%wFOI{=V&S?|V2*tNuxGC8dOrYZ>2j(2VEeA; z`LDw`-O>_He*?z>uq=BeJl}r?goj~-yQ7FPwi4oP4bZg=5Jwn>ieY!1^x^^1AdaJ0 z4*{FCjx>NiAk6}`?fOy*0ZC#4?5C*!Ew&q(?{+%@`}>#!;0Q8+!(pou$x$5lBT(>6 zCpahodE$9~d@sA_9A@Z*P!iyjRw&M+_kf`0IB2G%U6jqorK<9C*XaS?<1@To5vitW z%F6}M7=xA;*RZbZFIASM{^S*Z29y@JTY*dW)9Bygo&jKJQS^hEF#w*@7iLT_nZE~Z Z`whZ@o{|Lp0&f5S002ovPDHLkV1n@R4HW{uuDg9IxtmsKWLQK#Cqdb({OM>oH1~nv%&kWN==6I zw)|p;nW!{wg07Ulmxt~Y=z)|o!F_W=^_2}=gj{F46#WQvE$6d1H0 zVZ2!MlMxWZG>2u2r{yECVw51de|`W=ld%`evY76F04!Uf=ZM+%cYp{=*Xyolxc_pq zdF@08e~1vaV_BRVhG8gHZBBizrZOmStM#?`T2pia3m8 z&Wj?75+%|!D@&==2!x0crznzybG3&^%eO Date: Thu, 1 May 2025 14:20:03 -0500 Subject: [PATCH 083/262] [Bug][Ability] Fix shell armor not blocking crits (#5737) Fix shell armor not blocking crits --- src/data/abilities/ability.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 9a6094f4649..80b05b89d16 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -3408,8 +3408,12 @@ export class BlockCritAbAttr extends AbAttr { super(false); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { - (args[0] as BooleanHolder).value = true; + /** + * Apply the block crit ability by setting the value in the provided boolean holder to false + * @param args - [0] is a boolean holder representing whether the attack can crit + */ + override apply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _cancelled: BooleanHolder, args: [BooleanHolder, ...any]): void { + (args[0]).value = false; } } From d3a1b426284c139da0ba1d7e37b81f5cf1ae088d Mon Sep 17 00:00:00 2001 From: damocleas Date: Thu, 1 May 2025 18:59:45 -0400 Subject: [PATCH 084/262] [Balance] 1.9 Passive and Egg Move Changes (#5741) * Update passives.ts * Update egg-moves.ts --- src/data/balance/egg-moves.ts | 24 ++++++++++++------------ src/data/balance/passives.ts | 26 +++++++++++++------------- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/data/balance/egg-moves.ts b/src/data/balance/egg-moves.ts index b0e8d5160fa..47898e9e885 100644 --- a/src/data/balance/egg-moves.ts +++ b/src/data/balance/egg-moves.ts @@ -12,7 +12,7 @@ export const speciesEggMoves = { [Species.WEEDLE]: [ Moves.THOUSAND_ARROWS, Moves.NOXIOUS_TORQUE, Moves.ATTACK_ORDER, Moves.VICTORY_DANCE ], [Species.PIDGEY]: [ Moves.BLEAKWIND_STORM, Moves.SANDSEAR_STORM, Moves.CALM_MIND, Moves.BOOMBURST ], [Species.RATTATA]: [ Moves.HYPER_FANG, Moves.PSYCHIC_FANGS, Moves.FIRE_FANG, Moves.EXTREME_SPEED ], - [Species.SPEAROW]: [ Moves.FLOATY_FALL, Moves.HYPER_DRILL, Moves.TIDY_UP, Moves.TRIPLE_ARROWS ], + [Species.SPEAROW]: [ Moves.FLOATY_FALL, Moves.EXTREME_SPEED, Moves.KNOCK_OFF, Moves.TRIPLE_ARROWS ], [Species.EKANS]: [ Moves.NOXIOUS_TORQUE, Moves.DRAGON_DANCE, Moves.SLACK_OFF, Moves.SHED_TAIL ], [Species.SANDSHREW]: [ Moves.HIGH_HORSEPOWER, Moves.DIRE_CLAW, Moves.SHORE_UP, Moves.MIGHTY_CLEAVE ], [Species.NIDORAN_F]: [ Moves.CALM_MIND, Moves.MOONLIGHT, Moves.MALIGNANT_CHAIN, Moves.SANDSEAR_STORM ], @@ -53,7 +53,7 @@ export const speciesEggMoves = { [Species.RHYHORN]: [ Moves.SHORE_UP, Moves.ICE_HAMMER, Moves.ACCELEROCK, Moves.HEAD_SMASH ], [Species.TANGELA]: [ Moves.NATURES_MADNESS, Moves.SNAP_TRAP, Moves.PARTING_SHOT, Moves.SAPPY_SEED ], [Species.KANGASKHAN]: [ Moves.POWER_UP_PUNCH, Moves.TRAILBLAZE, Moves.COVET, Moves.SEISMIC_TOSS ], - [Species.HORSEA]: [ Moves.SNIPE_SHOT, Moves.FROST_BREATH, Moves.SLUDGE_BOMB, Moves.CLANGING_SCALES ], + [Species.HORSEA]: [ Moves.SNIPE_SHOT, Moves.TAKE_HEART, Moves.SHELL_SIDE_ARM, Moves.DRAGON_ENERGY ], [Species.GOLDEEN]: [ Moves.GLACIAL_LANCE, Moves.SUPERCELL_SLAM, Moves.DRAGON_DANCE, Moves.FISHIOUS_REND ], [Species.STARYU]: [ Moves.CALM_MIND, Moves.BOUNCY_BUBBLE, Moves.MOONBLAST, Moves.MYSTICAL_POWER ], [Species.SCYTHER]: [ Moves.MIGHTY_CLEAVE, Moves.GEAR_GRIND, Moves.STORM_THROW, Moves.BITTER_BLADE ], @@ -66,7 +66,7 @@ export const speciesEggMoves = { [Species.PORYGON]: [ Moves.THUNDERCLAP, Moves.AURA_SPHERE, Moves.FLAMETHROWER, Moves.TECHNO_BLAST ], [Species.OMANYTE]: [ Moves.FREEZE_DRY, Moves.GIGA_DRAIN, Moves.POWER_GEM, Moves.STEAM_ERUPTION ], [Species.KABUTO]: [ Moves.CEASELESS_EDGE, Moves.HIGH_HORSEPOWER, Moves.CRABHAMMER, Moves.MIGHTY_CLEAVE ], - [Species.AERODACTYL]: [ Moves.FLOATY_FALL, Moves.FLARE_BLITZ, Moves.SWORDS_DANCE, Moves.MIGHTY_CLEAVE ], + [Species.AERODACTYL]: [ Moves.FLOATY_FALL, Moves.CLOSE_COMBAT, Moves.STONE_AXE, Moves.SWORDS_DANCE ], [Species.ARTICUNO]: [ Moves.EARTH_POWER, Moves.CALM_MIND, Moves.AURORA_VEIL, Moves.AEROBLAST ], [Species.ZAPDOS]: [ Moves.BLEAKWIND_STORM, Moves.CALM_MIND, Moves.SANDSEAR_STORM, Moves.ELECTRO_SHOT ], [Species.MOLTRES]: [ Moves.EARTH_POWER, Moves.CALM_MIND, Moves.AEROBLAST, Moves.TORCH_SONG ], @@ -78,7 +78,7 @@ export const speciesEggMoves = { [Species.CYNDAQUIL]: [ Moves.NASTY_PLOT, Moves.EARTH_POWER, Moves.FIERY_DANCE, Moves.ELECTRO_DRIFT ], [Species.TOTODILE]: [ Moves.THUNDER_PUNCH, Moves.DRAGON_DANCE, Moves.PLAY_ROUGH, Moves.SURGING_STRIKES ], [Species.SENTRET]: [ Moves.TIDY_UP, Moves.FAKE_OUT, Moves.NUZZLE, Moves.EXTREME_SPEED ], - [Species.HOOTHOOT]: [ Moves.CALM_MIND, Moves.ESPER_WING, Moves.AEROBLAST, Moves.BOOMBURST ], + [Species.HOOTHOOT]: [ Moves.TAKE_HEART, Moves.ESPER_WING, Moves.AEROBLAST, Moves.BOOMBURST ], [Species.LEDYBA]: [ Moves.POLLEN_PUFF, Moves.MAT_BLOCK, Moves.PARTING_SHOT, Moves.SPORE ], [Species.SPINARAK]: [ Moves.PARTING_SHOT, Moves.ATTACK_ORDER, Moves.GASTRO_ACID, Moves.STRENGTH_SAP ], [Species.CHINCHOU]: [ Moves.THUNDERCLAP, Moves.BOUNCY_BUBBLE, Moves.THUNDER_CAGE, Moves.TAIL_GLOW ], @@ -166,7 +166,7 @@ export const speciesEggMoves = { [Species.SPOINK]: [ Moves.AURA_SPHERE, Moves.MILK_DRINK, Moves.EXPANDING_FORCE, Moves.TAIL_GLOW ], [Species.SPINDA]: [ Moves.SUPERPOWER, Moves.SLACK_OFF, Moves.FLEUR_CANNON, Moves.V_CREATE ], [Species.TRAPINCH]: [ Moves.FIRE_LASH, Moves.DRAGON_DARTS, Moves.THOUSAND_ARROWS, Moves.DRAGON_ENERGY ], - [Species.CACNEA]: [ Moves.EARTH_POWER, Moves.CEASELESS_EDGE, Moves.NIGHT_DAZE, Moves.SAPPY_SEED ], + [Species.CACNEA]: [ Moves.EARTH_POWER, Moves.CEASELESS_EDGE, Moves.NIGHT_DAZE, Moves.IVY_CUDGEL ], [Species.SWABLU]: [ Moves.ROOST, Moves.NASTY_PLOT, Moves.FLOATY_FALL, Moves.BOOMBURST ], [Species.ZANGOOSE]: [ Moves.FACADE, Moves.HIGH_HORSEPOWER, Moves.EXTREME_SPEED, Moves.TIDY_UP ], [Species.SEVIPER]: [ Moves.ICE_BEAM, Moves.BITTER_BLADE, Moves.SUCKER_PUNCH, Moves.NO_RETREAT ], @@ -222,7 +222,7 @@ export const speciesEggMoves = { [Species.DRIFLOON]: [ Moves.PSYCHO_SHIFT, Moves.MIND_BLOWN, Moves.CALM_MIND, Moves.OBLIVION_WING ], [Species.BUNEARY]: [ Moves.TRIPLE_AXEL, Moves.EXTREME_SPEED, Moves.THUNDEROUS_KICK, Moves.SWORDS_DANCE ], [Species.GLAMEOW]: [ Moves.PARTING_SHOT, Moves.HIGH_HORSEPOWER, Moves.SWORDS_DANCE, Moves.EXTREME_SPEED ], - [Species.CHINGLING]: [ Moves.BUZZY_BUZZ, Moves.EERIE_SPELL, Moves.TORCH_SONG, Moves.BOOMBURST ], + [Species.CHINGLING]: [ Moves.ALLURING_VOICE, Moves.EERIE_SPELL, Moves.TORCH_SONG, Moves.BOOMBURST ], [Species.STUNKY]: [ Moves.CEASELESS_EDGE, Moves.FIRE_LASH, Moves.RECOVER, Moves.DIRE_CLAW ], [Species.BRONZOR]: [ Moves.RECOVER, Moves.TACHYON_CUTTER, Moves.GLARE, Moves.LUMINA_CRASH ], [Species.BONSLY]: [ Moves.ACCELEROCK, Moves.SWORDS_DANCE, Moves.STRENGTH_SAP, Moves.SAPPY_SEED ], @@ -246,7 +246,7 @@ export const speciesEggMoves = { [Species.AZELF]: [ Moves.PSYSTRIKE, Moves.AURA_SPHERE, Moves.ICE_BEAM, Moves.TAIL_GLOW ], [Species.DIALGA]: [ Moves.CORE_ENFORCER, Moves.TAKE_HEART, Moves.RECOVER, Moves.MAKE_IT_RAIN ], [Species.PALKIA]: [ Moves.MALIGNANT_CHAIN, Moves.TAKE_HEART, Moves.RECOVER, Moves.ORIGIN_PULSE ], - [Species.HEATRAN]: [ Moves.MATCHA_GOTCHA, Moves.RECOVER, Moves.ERUPTION, Moves.TACHYON_CUTTER ], + [Species.HEATRAN]: [ Moves.ENERGY_BALL, Moves.RECOVER, Moves.ERUPTION, Moves.TACHYON_CUTTER ], [Species.REGIGIGAS]: [ Moves.SKILL_SWAP, Moves.RECOVER, Moves.EXTREME_SPEED, Moves.GIGATON_HAMMER ], [Species.GIRATINA]: [ Moves.DRAGON_DANCE, Moves.SPECTRAL_THIEF, Moves.RECOVER, Moves.COLLISION_COURSE ], [Species.CRESSELIA]: [ Moves.COSMIC_POWER, Moves.BODY_PRESS, Moves.SIZZLY_SLIDE, Moves.LUMINA_CRASH ], @@ -284,10 +284,10 @@ export const speciesEggMoves = { [Species.BASCULIN]: [ Moves.LAST_RESPECTS, Moves.CLOSE_COMBAT, Moves.SPLISHY_SPLASH, Moves.NO_RETREAT ], [Species.SANDILE]: [ Moves.DIRE_CLAW, Moves.SUCKER_PUNCH, Moves.FIRE_LASH, Moves.HEADLONG_RUSH ], [Species.DARUMAKA]: [ Moves.DRAIN_PUNCH, Moves.ZIPPY_ZAP, Moves.HEADLONG_RUSH, Moves.PYRO_BALL ], - [Species.MARACTUS]: [ Moves.EARTH_POWER, Moves.QUIVER_DANCE, Moves.FIERY_DANCE, Moves.SEED_FLARE ], + [Species.MARACTUS]: [ Moves.EARTH_POWER, Moves.SIZZLY_SLIDE, Moves.FIERY_DANCE, Moves.QUIVER_DANCE ], [Species.DWEBBLE]: [ Moves.CRABHAMMER, Moves.STONE_AXE, Moves.LEECH_LIFE, Moves.MIGHTY_CLEAVE ], [Species.SCRAGGY]: [ Moves.SUCKER_PUNCH, Moves.BULLET_PUNCH, Moves.NOXIOUS_TORQUE, Moves.VICTORY_DANCE ], - [Species.SIGILYPH]: [ Moves.MOONBLAST, Moves.CALM_MIND, Moves.ESPER_WING, Moves.OBLIVION_WING ], + [Species.SIGILYPH]: [ Moves.MOONBLAST, Moves.PSYCHO_SHIFT, Moves.ESPER_WING, Moves.OBLIVION_WING ], [Species.YAMASK]: [ Moves.STRENGTH_SAP, Moves.GLARE, Moves.AURA_SPHERE, Moves.ASTRAL_BARRAGE ], [Species.TIRTOUGA]: [ Moves.ICE_SPINNER, Moves.AQUA_STEP, Moves.SHORE_UP, Moves.MIGHTY_CLEAVE ], [Species.ARCHEN]: [ Moves.ROOST, Moves.EARTHQUAKE, Moves.FLOATY_FALL, Moves.MIGHTY_CLEAVE ], @@ -319,7 +319,7 @@ export const speciesEggMoves = { [Species.DRUDDIGON]: [ Moves.FIRE_LASH, Moves.MORNING_SUN, Moves.DRAGON_DARTS, Moves.CLANGOROUS_SOUL ], [Species.GOLETT]: [ Moves.SHIFT_GEAR, Moves.DRAIN_PUNCH, Moves.HEADLONG_RUSH, Moves.RAGE_FIST ], [Species.PAWNIARD]: [ Moves.SUCKER_PUNCH, Moves.CEASELESS_EDGE, Moves.BITTER_BLADE, Moves.LAST_RESPECTS ], - [Species.BOUFFALANT]: [ Moves.SLACK_OFF, Moves.HIGH_JUMP_KICK, Moves.HEAD_SMASH, Moves.FLARE_BLITZ ], + [Species.BOUFFALANT]: [ Moves.HORN_LEECH, Moves.HIGH_JUMP_KICK, Moves.HEAD_SMASH, Moves.FLARE_BLITZ ], [Species.RUFFLET]: [ Moves.FLOATY_FALL, Moves.AURA_SPHERE, Moves.NO_RETREAT, Moves.BOLT_BEAK ], [Species.VULLABY]: [ Moves.FOUL_PLAY, Moves.BODY_PRESS, Moves.ROOST, Moves.RUINATION ], [Species.HEATMOR]: [ Moves.EARTH_POWER, Moves.OVERHEAT, Moves.THUNDERBOLT, Moves.V_CREATE ], @@ -441,7 +441,7 @@ export const speciesEggMoves = { [Species.ALOLA_GEODUDE]: [ Moves.THOUSAND_WAVES, Moves.BULK_UP, Moves.STONE_AXE, Moves.EXTREME_SPEED ], [Species.ALOLA_GRIMER]: [ Moves.SUCKER_PUNCH, Moves.BARB_BARRAGE, Moves.RECOVER, Moves.SURGING_STRIKES ], - [Species.GROOKEY]: [ Moves.HIGH_HORSEPOWER, Moves.CLANGOROUS_SOUL, Moves.GRASSY_GLIDE, Moves.SAPPY_SEED ], + [Species.GROOKEY]: [ Moves.ROCK_SLIDE, Moves.PLAY_ROUGH, Moves.GRASSY_GLIDE, Moves.CLANGOROUS_SOUL ], [Species.SCORBUNNY]: [ Moves.EXTREME_SPEED, Moves.HIGH_JUMP_KICK, Moves.TRIPLE_AXEL, Moves.BOLT_STRIKE ], [Species.SOBBLE]: [ Moves.AEROBLAST, Moves.FROST_BREATH, Moves.ENERGY_BALL, Moves.NASTY_PLOT ], [Species.SKWOVET]: [ Moves.SUCKER_PUNCH, Moves.SLACK_OFF, Moves.COIL, Moves.POPULATION_BOMB ], @@ -457,7 +457,7 @@ export const speciesEggMoves = { [Species.SILICOBRA]: [ Moves.SHORE_UP, Moves.SHED_TAIL, Moves.MOUNTAIN_GALE, Moves.THOUSAND_ARROWS ], [Species.CRAMORANT]: [ Moves.APPLE_ACID, Moves.SURF, Moves.BOLT_BEAK, Moves.OBLIVION_WING ], [Species.ARROKUDA]: [ Moves.SUPERCELL_SLAM, Moves.TRIPLE_DIVE, Moves.ICE_SPINNER, Moves.SWORDS_DANCE ], - [Species.TOXEL]: [ Moves.NASTY_PLOT, Moves.BUG_BUZZ, Moves.SPARKLING_ARIA, Moves.TORCH_SONG ], + [Species.TOXEL]: [ Moves.BUZZY_BUZZ, Moves.BUG_BUZZ, Moves.SPARKLING_ARIA, Moves.TORCH_SONG ], [Species.SIZZLIPEDE]: [ Moves.BURNING_BULWARK, Moves.ZING_ZAP, Moves.FIRST_IMPRESSION, Moves.BITTER_BLADE ], [Species.CLOBBOPUS]: [ Moves.STORM_THROW, Moves.JET_PUNCH, Moves.MACH_PUNCH, Moves.SURGING_STRIKES ], [Species.SINISTEA]: [ Moves.SPLISHY_SPLASH, Moves.MATCHA_GOTCHA, Moves.DRAINING_KISS, Moves.MOONGEIST_BEAM ], diff --git a/src/data/balance/passives.ts b/src/data/balance/passives.ts index 624e242944b..73310cc2116 100644 --- a/src/data/balance/passives.ts +++ b/src/data/balance/passives.ts @@ -143,7 +143,7 @@ export const starterPassiveAbilities: StarterPassiveAbilities = { [Species.TAUROS]: { 0: Abilities.STAMINA }, [Species.MAGIKARP]: { 0: Abilities.MULTISCALE }, [Species.GYARADOS]: { 0: Abilities.MULTISCALE, 1: Abilities.MULTISCALE }, - [Species.LAPRAS]: { 0: Abilities.LIGHTNING_ROD, 1: Abilities.FILTER }, + [Species.LAPRAS]: { 0: Abilities.FILTER, 1: Abilities.FILTER }, [Species.DITTO]: { 0: Abilities.ADAPTABILITY }, [Species.EEVEE]: { 0: Abilities.PICKUP, 1: Abilities.PICKUP, 2: Abilities.FLUFFY }, [Species.VAPOREON]: { 0: Abilities.REGENERATOR }, @@ -161,7 +161,7 @@ export const starterPassiveAbilities: StarterPassiveAbilities = { [Species.OMASTAR]: { 0: Abilities.STURDY }, [Species.KABUTO]: { 0: Abilities.TOUGH_CLAWS }, [Species.KABUTOPS]: { 0: Abilities.TOUGH_CLAWS }, - [Species.AERODACTYL]: { 0: Abilities.INTIMIDATE, 1: Abilities.INTIMIDATE }, + [Species.AERODACTYL]: { 0: Abilities.INTIMIDATE, 1: Abilities.ROCKY_PAYLOAD }, [Species.ARTICUNO]: { 0: Abilities.SNOW_WARNING }, [Species.ZAPDOS]: { 0: Abilities.DRIZZLE }, [Species.MOLTRES]: { 0: Abilities.DROUGHT }, @@ -506,7 +506,7 @@ export const starterPassiveAbilities: StarterPassiveAbilities = { [Species.SNOVER]: { 0: Abilities.SLUSH_RUSH }, [Species.ABOMASNOW]: { 0: Abilities.SLUSH_RUSH, 1: Abilities.SEED_SOWER }, [Species.ROTOM]: { 0: Abilities.HADRON_ENGINE, 1: Abilities.HADRON_ENGINE, 2: Abilities.HADRON_ENGINE, 3: Abilities.HADRON_ENGINE, 4: Abilities.HADRON_ENGINE, 5: Abilities.HADRON_ENGINE }, - [Species.UXIE]: { 0: Abilities.UNNERVE }, + [Species.UXIE]: { 0: Abilities.ILLUSION }, [Species.MESPRIT]: { 0: Abilities.MOODY }, [Species.AZELF]: { 0: Abilities.NEUROFORCE }, [Species.DIALGA]: { 0: Abilities.BERSERK, 1: Abilities.BERSERK }, @@ -600,8 +600,8 @@ export const starterPassiveAbilities: StarterPassiveAbilities = { [Species.ARCHEOPS]: { 0: Abilities.MULTISCALE }, [Species.TRUBBISH]: { 0: Abilities.NEUTRALIZING_GAS }, [Species.GARBODOR]: { 0: Abilities.NEUTRALIZING_GAS, 1: Abilities.NEUTRALIZING_GAS }, - [Species.ZORUA]: { 0: Abilities.DARK_AURA }, - [Species.ZOROARK]: { 0: Abilities.DARK_AURA }, + [Species.ZORUA]: { 0: Abilities.ADAPTABILITY }, + [Species.ZOROARK]: { 0: Abilities.ADAPTABILITY }, [Species.MINCCINO]: { 0: Abilities.FUR_COAT }, [Species.CINCCINO]: { 0: Abilities.FUR_COAT }, [Species.GOTHITA]: { 0: Abilities.UNNERVE }, @@ -729,8 +729,8 @@ export const starterPassiveAbilities: StarterPassiveAbilities = { [Species.CLAWITZER]: { 0: Abilities.PROTEAN }, [Species.HELIOPTILE]: { 0: Abilities.PROTEAN }, [Species.HELIOLISK]: { 0: Abilities.PROTEAN }, - [Species.TYRUNT]: { 0: Abilities.RECKLESS }, - [Species.TYRANTRUM]: { 0: Abilities.RECKLESS }, + [Species.TYRUNT]: { 0: Abilities.SHEER_FORCE }, + [Species.TYRANTRUM]: { 0: Abilities.SHEER_FORCE }, [Species.AMAURA]: { 0: Abilities.ICE_SCALES }, [Species.AURORUS]: { 0: Abilities.ICE_SCALES }, [Species.HAWLUCHA]: { 0: Abilities.MOXIE }, @@ -744,8 +744,8 @@ export const starterPassiveAbilities: StarterPassiveAbilities = { [Species.KLEFKI]: { 0: Abilities.LEVITATE }, [Species.PHANTUMP]: { 0: Abilities.SHADOW_TAG }, [Species.TREVENANT]: { 0: Abilities.SHADOW_TAG }, - [Species.PUMPKABOO]: { 0: Abilities.WELL_BAKED_BODY, 1: Abilities.ADAPTABILITY, 2: Abilities.PRANKSTER, 3: Abilities.SEED_SOWER }, - [Species.GOURGEIST]: { 0: Abilities.WELL_BAKED_BODY, 1: Abilities.ADAPTABILITY, 2: Abilities.PRANKSTER, 3: Abilities.SEED_SOWER }, + [Species.PUMPKABOO]: { 0: Abilities.ILLUMINATE, 1: Abilities.ADAPTABILITY, 2: Abilities.WELL_BAKED_BODY, 3: Abilities.SEED_SOWER }, + [Species.GOURGEIST]: { 0: Abilities.ILLUMINATE, 1: Abilities.ADAPTABILITY, 2: Abilities.WELL_BAKED_BODY, 3: Abilities.SEED_SOWER }, [Species.BERGMITE]: { 0: Abilities.ICE_SCALES }, [Species.AVALUGG]: { 0: Abilities.ICE_SCALES }, [Species.HISUI_AVALUGG]: { 0: Abilities.ICE_SCALES }, @@ -781,7 +781,7 @@ export const starterPassiveAbilities: StarterPassiveAbilities = { [Species.CRABOMINABLE]: { 0: Abilities.WATER_BUBBLE }, [Species.ORICORIO]: { 0: Abilities.ADAPTABILITY, 1: Abilities.ADAPTABILITY, 2: Abilities.ADAPTABILITY, 3: Abilities.ADAPTABILITY }, [Species.CUTIEFLY]: { 0: Abilities.PICKUP }, - [Species.RIBOMBEE]: { 0: Abilities.TINTED_LENS }, + [Species.RIBOMBEE]: { 0: Abilities.PICKUP }, [Species.ROCKRUFF]: { 0: Abilities.PICKUP, 1: Abilities.PICKUP }, [Species.LYCANROC]: { 0: Abilities.STURDY, 1: Abilities.INTIMIDATE, 2: Abilities.STAKEOUT }, [Species.WISHIWASHI]: { 0: Abilities.REGENERATOR, 1: Abilities.REGENERATOR }, @@ -932,7 +932,7 @@ export const starterPassiveAbilities: StarterPassiveAbilities = { [Species.COPPERAJAH]: { 0: Abilities.EARTH_EATER, 1: Abilities.EARTH_EATER }, [Species.DRACOZOLT]: { 0: Abilities.NO_GUARD }, [Species.ARCTOZOLT]: { 0: Abilities.WATER_ABSORB }, - [Species.DRACOVISH]: { 0: Abilities.SWIFT_SWIM }, + [Species.DRACOVISH]: { 0: Abilities.THERMAL_EXCHANGE }, [Species.ARCTOVISH]: { 0: Abilities.STRONG_JAW }, [Species.DURALUDON]: { 0: Abilities.FILTER, 1: Abilities.UNAWARE }, [Species.ARCHALUDON]: { 0: Abilities.TRANSISTOR }, @@ -981,8 +981,8 @@ export const starterPassiveAbilities: StarterPassiveAbilities = { [Species.OVERQWIL]: { 0: Abilities.MERCILESS }, [Species.HISUI_SNEASEL]: { 0: Abilities.SCRAPPY }, [Species.SNEASLER]: { 0: Abilities.SCRAPPY }, - [Species.HISUI_ZORUA]: { 0: Abilities.ADAPTABILITY }, - [Species.HISUI_ZOROARK]: { 0: Abilities.ADAPTABILITY }, + [Species.HISUI_ZORUA]: { 0: Abilities.SHADOW_SHIELD }, + [Species.HISUI_ZOROARK]: { 0: Abilities.SHADOW_SHIELD }, [Species.SPRIGATITO]: { 0: Abilities.PICKUP }, [Species.FLORAGATO]: { 0: Abilities.MAGICIAN }, From bee06410dd4b286acc59f35862271008447cec48 Mon Sep 17 00:00:00 2001 From: Unicorn_Power <189861924+Unicornpowerstar@users.noreply.github.com> Date: Fri, 2 May 2025 02:12:57 +0200 Subject: [PATCH 085/262] [Sprite] Variant Spring Implementation (#5483) * 566 567 variant icons and palettes @ bytezor * Add Archen & Archeops to variant icon atlas * [554 - 555 + zen ] Variant Implementation * [626 ] Variant Implementation * Removal of The base-replacement Genies * [ 746 ]-[ 746-school ] Implementation * Variant Palette for 2037-2038 * Variant palette 32-33-34 Plus base fix for front and back 34. * 645 both forms variant palette Icons gets pushed at a later date. * 299 - 476 variant palette * 299 - 476 _masterlist somehow mangage to miss this * Removing 905 who wasnt working correctly * 422- 421 both forms variant palettes * 143+ form - 446 variant Palette * 417 Variant palette * 498-499-500 variant palette * 88-89 variant palette plus the variant json for 500 I missed * 572 - 573 variant palette. found another lose one that should be pushed lmao * 187-188-189 Variant palette * 871 variant palette * 780 Variant palette * 331 332 + female variant palette * 782-783-784 variant palette transfer to consistent sprite set. removal of exp. due to statics not lining up. * 2038 json adjustments on breaking * 204 205 variant palette * [Bug][UI/UX] Fix type hint after enemy disappears (#5677) * Fix type hint after enemy disappears * Add automated test for type hint bugfix * Make onField default to true * Replace reference to Mode with UiMode and battleType with BattleStyle * [Bug] Fix Login Screen Buttons can be Pressed While Animating (#5170) * destroy containers when processing external containers * make form buttons uninteractible until tweens finished instead * fix holding enter spam * fix conflicts * [Balance] Update Gym Leader Teams and Teras (#5670) * Update Gym Leader Teams * Set Tera slots for Gym Leaders * Change Giovanni's Specialty Type to Ground --- Co-authored-by: damocleas * [Bug] Properly handle suppression with Illusion (#5671) * Remove extra attributes on neutralizing gas * Add IllusionBreakAbAttr to applyOnLose * Add test case * [Bug] Fix order of operations when displaying enemy Boss level (#5685) * order of operations in creating boss battleInfo fixed a bug where because of an order of operations error in this file it ignored the position update of the boss life value set in battle-info.ts (around line 562) * [Dev] Fix imports in `overrides.ts` and `illusion.test.ts` (#5686) * applin familly variant palette * 522 523 variant palette * 403 404 405 variant palette * 511 512 515 516 variant palette masterlist have code for 513 514 but fixes was broken add will be added once fixed * 313 314 variant palettes plus disabaling Landorus and other 2. * 692 693 Variant palette. * 535 536 537 variant palette fixing up mess found in masterlist json and the masterlist inclusion of 692 693 * 207 female variants palette plus adjustments of gliscor color to have better contrats. * 325 326 variant palette * 345 346 variant palette * Adding all variant Icons to the correct folder under variant icons. * Removal of Variant files triggering errors for sprite test these arent going to be implemented at this time due to the other 3 not being ready. * File adjustment the animation adjsutment for 750 to make the neck look less like a block. fixing the line issue that appeared in 523 back sprite * fixing the variant break for 572 573 * 513 514 variant palette been fully fix and is not working * 396 397 398 variant palette * fixing back variant palette and fix for 554 * fixing the missing files for 692 and 693 * Updated masterlist * fix flagging issue * Update all Pokemon variant icon atlases Fixed incorrectly sized Bouffalant icons, re-exported gen 5 icon atlas as it had broken graphics in it * Last Gen 5 icons * Export gen 5 variant icon atlas * 643 644 646 + form variant palette --------- Co-authored-by: Madmadness65 Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Co-authored-by: Chris <75648912+ChrisLolz@users.noreply.github.com> Co-authored-by: Blitzy <118096277+Blitz425@users.noreply.github.com> Co-authored-by: damocleas Co-authored-by: Dean <69436131+emdeann@users.noreply.github.com> Co-authored-by: zaccie Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- public/exp-sprites.json | 24 - public/images/pokemon/1011.png | Bin 601 -> 653 bytes public/images/pokemon/1019.png | Bin 1107 -> 1149 bytes public/images/pokemon/143-gigantamax.png | Bin 1357 -> 1447 bytes public/images/pokemon/143.png | Bin 22274 -> 27509 bytes public/images/pokemon/189.png | Bin 5609 -> 15032 bytes public/images/pokemon/2038.png | Bin 1196 -> 1255 bytes public/images/pokemon/207.png | Bin 11139 -> 11765 bytes public/images/pokemon/313.png | Bin 3875 -> 16113 bytes public/images/pokemon/314.png | Bin 3017 -> 3141 bytes public/images/pokemon/332.png | Bin 6560 -> 6892 bytes public/images/pokemon/34.png | Bin 12634 -> 39759 bytes public/images/pokemon/396.png | Bin 3141 -> 3326 bytes public/images/pokemon/397.png | Bin 3786 -> 3936 bytes public/images/pokemon/398.png | Bin 9396 -> 9849 bytes public/images/pokemon/404.png | Bin 11341 -> 39516 bytes public/images/pokemon/417.png | Bin 6481 -> 7315 bytes public/images/pokemon/420.png | Bin 4320 -> 4503 bytes public/images/pokemon/421-overcast.png | Bin 2847 -> 3012 bytes public/images/pokemon/421-sunshine.png | Bin 4029 -> 4283 bytes public/images/pokemon/446.png | Bin 4369 -> 4614 bytes public/images/pokemon/472.png | Bin 13997 -> 14001 bytes public/images/pokemon/498.png | Bin 3503 -> 3718 bytes public/images/pokemon/499.png | Bin 6057 -> 6395 bytes public/images/pokemon/500.png | Bin 25568 -> 30150 bytes public/images/pokemon/511.png | Bin 6927 -> 7516 bytes public/images/pokemon/512.png | Bin 10457 -> 11241 bytes public/images/pokemon/513.png | Bin 5553 -> 5809 bytes public/images/pokemon/514.png | Bin 9227 -> 10574 bytes public/images/pokemon/515.png | Bin 3235 -> 3366 bytes public/images/pokemon/516.png | Bin 11095 -> 11814 bytes public/images/pokemon/522.png | Bin 5684 -> 17634 bytes public/images/pokemon/523.png | Bin 11191 -> 36843 bytes public/images/pokemon/535.png | Bin 1904 -> 2032 bytes public/images/pokemon/536.png | Bin 3208 -> 10771 bytes public/images/pokemon/537.png | Bin 15606 -> 49568 bytes public/images/pokemon/554.png | Bin 3995 -> 4298 bytes public/images/pokemon/555-zen.png | Bin 3494 -> 3662 bytes public/images/pokemon/555.png | Bin 12997 -> 15062 bytes public/images/pokemon/566.png | Bin 8816 -> 9129 bytes public/images/pokemon/572.png | Bin 7901 -> 22761 bytes public/images/pokemon/573.png | Bin 9783 -> 26950 bytes public/images/pokemon/626.png | Bin 10434 -> 29793 bytes public/images/pokemon/643.png | Bin 40477 -> 123461 bytes public/images/pokemon/644.png | Bin 34509 -> 112789 bytes public/images/pokemon/646-black.png | Bin 51803 -> 134532 bytes public/images/pokemon/646-white.png | Bin 79781 -> 214721 bytes public/images/pokemon/746-school.png | Bin 1400 -> 1467 bytes public/images/pokemon/746.png | Bin 405 -> 409 bytes public/images/pokemon/782.json | 1049 ++- public/images/pokemon/782.png | Bin 569 -> 3065 bytes public/images/pokemon/783.json | 1004 ++- public/images/pokemon/783.png | Bin 841 -> 29585 bytes public/images/pokemon/784.json | 851 ++- public/images/pokemon/784.png | Bin 1602 -> 50398 bytes public/images/pokemon/840.png | Bin 370 -> 393 bytes public/images/pokemon/841-gigantamax.png | Bin 1110 -> 1128 bytes public/images/pokemon/841.png | Bin 798 -> 854 bytes public/images/pokemon/842-gigantamax.png | Bin 1110 -> 1131 bytes public/images/pokemon/842.png | Bin 902 -> 936 bytes public/images/pokemon/871.png | Bin 464 -> 1026 bytes public/images/pokemon/back/1011.png | Bin 659 -> 617 bytes public/images/pokemon/back/1019.png | Bin 1022 -> 1088 bytes public/images/pokemon/back/143-gigantamax.png | Bin 1040 -> 1167 bytes public/images/pokemon/back/2038.png | Bin 882 -> 922 bytes public/images/pokemon/back/332.png | Bin 6115 -> 19460 bytes public/images/pokemon/back/34.png | Bin 10516 -> 12345 bytes public/images/pokemon/back/396.png | Bin 3058 -> 3308 bytes public/images/pokemon/back/397.png | Bin 3986 -> 4283 bytes public/images/pokemon/back/398.png | Bin 9131 -> 9730 bytes public/images/pokemon/back/403.png | Bin 3540 -> 9588 bytes public/images/pokemon/back/404.png | Bin 11157 -> 36081 bytes public/images/pokemon/back/405.png | Bin 8347 -> 25014 bytes public/images/pokemon/back/498.png | Bin 3314 -> 3529 bytes public/images/pokemon/back/500.png | Bin 22379 -> 27751 bytes public/images/pokemon/back/522.png | Bin 5850 -> 18639 bytes public/images/pokemon/back/523.png | Bin 10206 -> 35116 bytes public/images/pokemon/back/535.png | Bin 2188 -> 5310 bytes public/images/pokemon/back/536.png | Bin 3120 -> 8376 bytes public/images/pokemon/back/554.png | Bin 3295 -> 3765 bytes public/images/pokemon/back/555-zen.png | Bin 1926 -> 2178 bytes public/images/pokemon/back/555.png | Bin 10269 -> 11660 bytes public/images/pokemon/back/567.png | Bin 14219 -> 15323 bytes public/images/pokemon/back/572.png | Bin 6484 -> 7678 bytes public/images/pokemon/back/573.png | Bin 7895 -> 8779 bytes public/images/pokemon/back/626.png | Bin 8869 -> 10497 bytes public/images/pokemon/back/643.png | Bin 41502 -> 122695 bytes public/images/pokemon/back/644.png | Bin 34555 -> 43013 bytes public/images/pokemon/back/645-incarnate.png | Bin 14970 -> 18911 bytes public/images/pokemon/back/645-therian.png | Bin 24955 -> 34724 bytes public/images/pokemon/back/646-black.png | Bin 51301 -> 135804 bytes public/images/pokemon/back/646-white.png | Bin 63426 -> 66976 bytes public/images/pokemon/back/646.png | Bin 13257 -> 14944 bytes public/images/pokemon/back/746-school.png | Bin 1273 -> 1355 bytes public/images/pokemon/back/746.png | Bin 364 -> 402 bytes public/images/pokemon/back/782.json | 1049 ++- public/images/pokemon/back/782.png | Bin 501 -> 3018 bytes public/images/pokemon/back/783.json | 1004 ++- public/images/pokemon/back/783.png | Bin 734 -> 59134 bytes public/images/pokemon/back/784.json | 851 ++- public/images/pokemon/back/784.png | Bin 1373 -> 46060 bytes public/images/pokemon/back/840.png | Bin 364 -> 858 bytes public/images/pokemon/back/841-gigantamax.png | Bin 890 -> 955 bytes public/images/pokemon/back/841.png | Bin 639 -> 683 bytes public/images/pokemon/back/842-gigantamax.png | Bin 890 -> 955 bytes public/images/pokemon/back/842.png | Bin 863 -> 915 bytes public/images/pokemon/back/871.png | Bin 449 -> 1026 bytes public/images/pokemon/back/female/332.png | Bin 6115 -> 19460 bytes public/images/pokemon/back/female/396.png | Bin 3053 -> 3314 bytes public/images/pokemon/back/female/397.png | Bin 3982 -> 4267 bytes public/images/pokemon/back/female/398.png | Bin 9131 -> 9734 bytes public/images/pokemon/back/female/403.png | Bin 3557 -> 9525 bytes public/images/pokemon/back/female/404.png | Bin 11136 -> 36801 bytes public/images/pokemon/back/female/405.png | Bin 7879 -> 23649 bytes public/images/pokemon/back/shiny/782.json | 1049 ++- public/images/pokemon/back/shiny/782.png | Bin 503 -> 3331 bytes public/images/pokemon/back/shiny/783.json | 1004 ++- public/images/pokemon/back/shiny/783.png | Bin 731 -> 24629 bytes public/images/pokemon/back/shiny/784.json | 851 ++- public/images/pokemon/back/shiny/784.png | Bin 1373 -> 44603 bytes public/images/pokemon/exp/2038.png | Bin 13412 -> 13417 bytes public/images/pokemon/exp/692.png | Bin 2628 -> 2628 bytes public/images/pokemon/exp/780.png | Bin 58142 -> 25501 bytes public/images/pokemon/exp/782.json | 2351 ------- public/images/pokemon/exp/782.png | Bin 3279 -> 0 bytes public/images/pokemon/exp/783.json | 1154 ---- public/images/pokemon/exp/783.png | Bin 6600 -> 0 bytes public/images/pokemon/exp/784.json | 1826 ------ public/images/pokemon/exp/784.png | Bin 17198 -> 0 bytes public/images/pokemon/exp/840.png | Bin 3593 -> 3795 bytes public/images/pokemon/exp/841.png | Bin 3981 -> 4168 bytes public/images/pokemon/exp/842.png | Bin 4472 -> 4654 bytes public/images/pokemon/exp/871.png | Bin 1985 -> 4887 bytes public/images/pokemon/exp/back/2038.png | Bin 10458 -> 10411 bytes public/images/pokemon/exp/back/692.png | Bin 2046 -> 2043 bytes public/images/pokemon/exp/back/750.png | Bin 40472 -> 40614 bytes public/images/pokemon/exp/back/782.json | 2351 ------- public/images/pokemon/exp/back/782.png | Bin 2752 -> 0 bytes public/images/pokemon/exp/back/783.json | 230 - public/images/pokemon/exp/back/783.png | Bin 2833 -> 0 bytes public/images/pokemon/exp/back/784.json | 230 - public/images/pokemon/exp/back/784.png | Bin 5277 -> 0 bytes public/images/pokemon/exp/back/840.json | 1373 +++- public/images/pokemon/exp/back/840.png | Bin 1115 -> 3984 bytes public/images/pokemon/exp/back/841.png | Bin 2729 -> 2867 bytes public/images/pokemon/exp/back/842.png | Bin 3099 -> 3281 bytes public/images/pokemon/exp/back/871.png | Bin 2179 -> 5391 bytes public/images/pokemon/exp/back/shiny/692.png | Bin 2046 -> 2043 bytes public/images/pokemon/exp/back/shiny/782.json | 2351 ------- public/images/pokemon/exp/back/shiny/782.png | Bin 2749 -> 0 bytes public/images/pokemon/exp/back/shiny/783.json | 230 - public/images/pokemon/exp/back/shiny/783.png | Bin 2810 -> 0 bytes public/images/pokemon/exp/back/shiny/784.json | 230 - public/images/pokemon/exp/back/shiny/784.png | Bin 5262 -> 0 bytes public/images/pokemon/exp/back/shiny/840.json | 1373 +++- public/images/pokemon/exp/back/shiny/840.png | Bin 1096 -> 3984 bytes public/images/pokemon/exp/shiny/692.png | Bin 2628 -> 2628 bytes public/images/pokemon/exp/shiny/782.json | 2351 ------- public/images/pokemon/exp/shiny/782.png | Bin 3279 -> 0 bytes public/images/pokemon/exp/shiny/783.json | 2204 ------- public/images/pokemon/exp/shiny/783.png | Bin 4873 -> 0 bytes public/images/pokemon/exp/shiny/784.json | 1826 ------ public/images/pokemon/exp/shiny/784.png | Bin 17185 -> 0 bytes public/images/pokemon/female/207.png | Bin 11249 -> 11889 bytes public/images/pokemon/female/332.png | Bin 6578 -> 6911 bytes public/images/pokemon/female/396.png | Bin 3146 -> 3338 bytes public/images/pokemon/female/397.png | Bin 3753 -> 3955 bytes public/images/pokemon/female/398.png | Bin 9399 -> 9844 bytes public/images/pokemon/female/404.png | Bin 10647 -> 38706 bytes public/images/pokemon/female/417.png | Bin 6478 -> 7310 bytes public/images/pokemon/icons/7/746-school.png | Bin 380 -> 362 bytes public/images/pokemon/icons/7/746.png | Bin 257 -> 272 bytes .../icons/variant/1/143-gigantamax_2.png | Bin 0 -> 498 bytes .../icons/variant/1/143-gigantamax_3.png | Bin 0 -> 507 bytes .../images/pokemon/icons/variant/1/143_2.png | Bin 0 -> 738 bytes .../images/pokemon/icons/variant/1/143_3.png | Bin 0 -> 756 bytes .../images/pokemon/icons/variant/1/32_2.png | Bin 0 -> 563 bytes .../images/pokemon/icons/variant/1/32_3.png | Bin 0 -> 554 bytes .../images/pokemon/icons/variant/1/33_2.png | Bin 0 -> 576 bytes .../images/pokemon/icons/variant/1/33_3.png | Bin 0 -> 588 bytes .../images/pokemon/icons/variant/1/34_2.png | Bin 0 -> 899 bytes .../images/pokemon/icons/variant/1/34_3.png | Bin 0 -> 907 bytes .../images/pokemon/icons/variant/1/88_2.png | Bin 0 -> 603 bytes .../images/pokemon/icons/variant/1/88_3.png | Bin 0 -> 609 bytes .../images/pokemon/icons/variant/1/89_2.png | Bin 0 -> 753 bytes .../images/pokemon/icons/variant/1/89_3.png | Bin 0 -> 741 bytes .../images/pokemon/icons/variant/2/187_2.png | Bin 0 -> 600 bytes .../images/pokemon/icons/variant/2/187_3.png | Bin 0 -> 600 bytes .../images/pokemon/icons/variant/2/188_2.png | Bin 0 -> 585 bytes .../images/pokemon/icons/variant/2/188_3.png | Bin 0 -> 585 bytes .../images/pokemon/icons/variant/2/189_2.png | Bin 0 -> 619 bytes .../images/pokemon/icons/variant/2/189_3.png | Bin 0 -> 619 bytes .../images/pokemon/icons/variant/2/204_2.png | Bin 0 -> 589 bytes .../images/pokemon/icons/variant/2/204_3.png | Bin 0 -> 589 bytes .../images/pokemon/icons/variant/2/205_2.png | Bin 0 -> 619 bytes .../images/pokemon/icons/variant/2/205_3.png | Bin 0 -> 625 bytes .../images/pokemon/icons/variant/2/207_2.png | Bin 681 -> 745 bytes .../images/pokemon/icons/variant/2/207_3.png | Bin 684 -> 736 bytes .../images/pokemon/icons/variant/3/299_2.png | Bin 0 -> 566 bytes .../images/pokemon/icons/variant/3/299_3.png | Bin 0 -> 566 bytes .../images/pokemon/icons/variant/3/313_2.png | Bin 0 -> 688 bytes .../images/pokemon/icons/variant/3/313_3.png | Bin 0 -> 724 bytes .../images/pokemon/icons/variant/3/314_2.png | Bin 0 -> 679 bytes .../images/pokemon/icons/variant/3/314_3.png | Bin 0 -> 691 bytes .../images/pokemon/icons/variant/3/325_2.png | Bin 0 -> 479 bytes .../images/pokemon/icons/variant/3/325_3.png | Bin 0 -> 478 bytes .../images/pokemon/icons/variant/3/326_2.png | Bin 0 -> 630 bytes .../images/pokemon/icons/variant/3/326_3.png | Bin 0 -> 644 bytes .../images/pokemon/icons/variant/3/331_2.png | Bin 0 -> 601 bytes .../images/pokemon/icons/variant/3/331_3.png | Bin 0 -> 607 bytes .../images/pokemon/icons/variant/3/332_2.png | Bin 0 -> 613 bytes .../images/pokemon/icons/variant/3/332_3.png | Bin 0 -> 614 bytes .../images/pokemon/icons/variant/3/345_2.png | Bin 0 -> 610 bytes .../images/pokemon/icons/variant/3/345_3.png | Bin 0 -> 646 bytes .../images/pokemon/icons/variant/3/346_2.png | Bin 0 -> 869 bytes .../images/pokemon/icons/variant/3/346_3.png | Bin 0 -> 853 bytes .../images/pokemon/icons/variant/4/396_2.png | Bin 0 -> 579 bytes .../images/pokemon/icons/variant/4/396_3.png | Bin 0 -> 605 bytes .../images/pokemon/icons/variant/4/397_2.png | Bin 0 -> 613 bytes .../images/pokemon/icons/variant/4/397_3.png | Bin 0 -> 637 bytes .../images/pokemon/icons/variant/4/398_2.png | Bin 0 -> 765 bytes .../images/pokemon/icons/variant/4/398_3.png | Bin 0 -> 792 bytes .../images/pokemon/icons/variant/4/403_2.png | Bin 0 -> 636 bytes .../images/pokemon/icons/variant/4/403_3.png | Bin 0 -> 633 bytes .../images/pokemon/icons/variant/4/404_2.png | Bin 0 -> 732 bytes .../images/pokemon/icons/variant/4/404_3.png | Bin 0 -> 735 bytes .../images/pokemon/icons/variant/4/405_2.png | Bin 0 -> 744 bytes .../images/pokemon/icons/variant/4/405_3.png | Bin 0 -> 735 bytes .../images/pokemon/icons/variant/4/420_2.png | Bin 0 -> 506 bytes .../images/pokemon/icons/variant/4/420_3.png | Bin 0 -> 480 bytes .../icons/variant/4/421-overcast_2.png | Bin 0 -> 467 bytes .../icons/variant/4/421-overcast_3.png | Bin 0 -> 470 bytes .../icons/variant/4/421-sunshine_2.png | Bin 0 -> 651 bytes .../icons/variant/4/421-sunshine_3.png | Bin 0 -> 649 bytes .../images/pokemon/icons/variant/4/446_2.png | Bin 0 -> 497 bytes .../images/pokemon/icons/variant/4/446_3.png | Bin 0 -> 504 bytes .../images/pokemon/icons/variant/4/476_2.png | Bin 0 -> 641 bytes .../images/pokemon/icons/variant/4/476_3.png | Bin 0 -> 641 bytes .../images/pokemon/icons/variant/5/498_2.png | Bin 0 -> 568 bytes .../images/pokemon/icons/variant/5/498_3.png | Bin 0 -> 545 bytes .../images/pokemon/icons/variant/5/499_2.png | Bin 0 -> 743 bytes .../images/pokemon/icons/variant/5/499_3.png | Bin 0 -> 777 bytes .../images/pokemon/icons/variant/5/500_2.png | Bin 0 -> 943 bytes .../images/pokemon/icons/variant/5/500_3.png | Bin 0 -> 964 bytes .../images/pokemon/icons/variant/5/511_2.png | Bin 0 -> 633 bytes .../images/pokemon/icons/variant/5/511_3.png | Bin 0 -> 633 bytes .../images/pokemon/icons/variant/5/512_2.png | Bin 0 -> 732 bytes .../images/pokemon/icons/variant/5/512_3.png | Bin 0 -> 726 bytes .../images/pokemon/icons/variant/5/513_2.png | Bin 0 -> 663 bytes .../images/pokemon/icons/variant/5/513_3.png | Bin 0 -> 671 bytes .../images/pokemon/icons/variant/5/514_2.png | Bin 0 -> 848 bytes .../images/pokemon/icons/variant/5/514_3.png | Bin 0 -> 850 bytes .../images/pokemon/icons/variant/5/515_2.png | Bin 0 -> 711 bytes .../images/pokemon/icons/variant/5/515_3.png | Bin 0 -> 714 bytes .../images/pokemon/icons/variant/5/516_2.png | Bin 0 -> 789 bytes .../images/pokemon/icons/variant/5/516_3.png | Bin 0 -> 786 bytes .../images/pokemon/icons/variant/5/522_2.png | Bin 0 -> 552 bytes .../images/pokemon/icons/variant/5/522_3.png | Bin 0 -> 555 bytes .../images/pokemon/icons/variant/5/523_2.png | Bin 0 -> 738 bytes .../images/pokemon/icons/variant/5/523_3.png | Bin 0 -> 738 bytes .../images/pokemon/icons/variant/5/535_2.png | Bin 0 -> 432 bytes .../images/pokemon/icons/variant/5/535_3.png | Bin 0 -> 432 bytes .../images/pokemon/icons/variant/5/536_2.png | Bin 0 -> 612 bytes .../images/pokemon/icons/variant/5/536_3.png | Bin 0 -> 609 bytes .../images/pokemon/icons/variant/5/537_2.png | Bin 0 -> 759 bytes .../images/pokemon/icons/variant/5/537_3.png | Bin 0 -> 753 bytes .../images/pokemon/icons/variant/5/554_2.png | Bin 0 -> 484 bytes .../images/pokemon/icons/variant/5/554_3.png | Bin 0 -> 473 bytes .../pokemon/icons/variant/5/555-zen_2.png | Bin 0 -> 572 bytes .../pokemon/icons/variant/5/555-zen_3.png | Bin 0 -> 563 bytes .../images/pokemon/icons/variant/5/555_2.png | Bin 0 -> 743 bytes .../images/pokemon/icons/variant/5/555_3.png | Bin 0 -> 746 bytes .../images/pokemon/icons/variant/5/566_2.png | Bin 0 -> 281 bytes .../images/pokemon/icons/variant/5/566_3.png | Bin 0 -> 281 bytes .../images/pokemon/icons/variant/5/567_2.png | Bin 0 -> 361 bytes .../images/pokemon/icons/variant/5/567_3.png | Bin 0 -> 361 bytes .../images/pokemon/icons/variant/5/572_2.png | Bin 625 -> 647 bytes .../images/pokemon/icons/variant/5/572_3.png | Bin 580 -> 652 bytes .../images/pokemon/icons/variant/5/573_2.png | Bin 0 -> 764 bytes .../images/pokemon/icons/variant/5/573_3.png | Bin 0 -> 743 bytes .../images/pokemon/icons/variant/5/626_2.png | Bin 0 -> 654 bytes .../images/pokemon/icons/variant/5/626_3.png | Bin 0 -> 649 bytes .../icons/variant/5/641-incarnate_1.png | Bin 889 -> 0 bytes .../pokemon/icons/variant/5/641-therian_1.png | Bin 803 -> 0 bytes .../icons/variant/5/642-incarnate_1.png | Bin 855 -> 0 bytes .../pokemon/icons/variant/5/642-therian_1.png | Bin 848 -> 0 bytes .../images/pokemon/icons/variant/5/643_2.png | Bin 0 -> 914 bytes .../images/pokemon/icons/variant/5/643_3.png | Bin 0 -> 1040 bytes .../images/pokemon/icons/variant/5/644_2.png | Bin 0 -> 770 bytes .../images/pokemon/icons/variant/5/644_3.png | Bin 0 -> 393 bytes .../icons/variant/5/645-incarnate_1.png | Bin 905 -> 0 bytes .../pokemon/icons/variant/5/645-therian_1.png | Bin 874 -> 0 bytes .../pokemon/icons/variant/5/646-black_2.png | Bin 0 -> 1097 bytes .../pokemon/icons/variant/5/646-black_3.png | Bin 0 -> 476 bytes .../pokemon/icons/variant/5/646-white_2.png | Bin 0 -> 1170 bytes .../pokemon/icons/variant/5/646-white_3.png | Bin 0 -> 508 bytes .../images/pokemon/icons/variant/5/646_2.png | Bin 0 -> 1174 bytes .../images/pokemon/icons/variant/5/646_3.png | Bin 0 -> 468 bytes .../images/pokemon/icons/variant/6/692_2.png | Bin 0 -> 289 bytes .../images/pokemon/icons/variant/6/692_3.png | Bin 0 -> 289 bytes .../images/pokemon/icons/variant/6/693_2.png | Bin 0 -> 372 bytes .../images/pokemon/icons/variant/6/693_3.png | Bin 0 -> 374 bytes .../images/pokemon/icons/variant/7/2037_2.png | Bin 0 -> 618 bytes .../images/pokemon/icons/variant/7/2037_3.png | Bin 0 -> 624 bytes .../images/pokemon/icons/variant/7/2038_2.png | Bin 0 -> 798 bytes .../images/pokemon/icons/variant/7/2038_3.png | Bin 0 -> 798 bytes .../pokemon/icons/variant/7/746-school_1.png | Bin 0 -> 747 bytes .../pokemon/icons/variant/7/746-school_2.png | Bin 0 -> 747 bytes .../images/pokemon/icons/variant/7/746_1.png | Bin 0 -> 492 bytes .../images/pokemon/icons/variant/7/746_2.png | Bin 0 -> 489 bytes .../images/pokemon/icons/variant/7/780_2.png | Bin 0 -> 737 bytes .../images/pokemon/icons/variant/7/780_3.png | Bin 0 -> 720 bytes .../images/pokemon/icons/variant/7/782_2.png | Bin 0 -> 668 bytes .../images/pokemon/icons/variant/7/782_3.png | Bin 0 -> 651 bytes .../images/pokemon/icons/variant/7/783_2.png | Bin 0 -> 758 bytes .../images/pokemon/icons/variant/7/783_3.png | Bin 0 -> 742 bytes .../images/pokemon/icons/variant/7/784_2.png | Bin 0 -> 1013 bytes .../images/pokemon/icons/variant/7/784_3.png | Bin 0 -> 1016 bytes .../images/pokemon/icons/variant/8/871_1.png | Bin 0 -> 471 bytes .../images/pokemon/icons/variant/8/871_2.png | Bin 0 -> 474 bytes public/images/pokemon/shiny/782.json | 1049 ++- public/images/pokemon/shiny/782.png | Bin 544 -> 3069 bytes public/images/pokemon/shiny/783.json | 1004 ++- public/images/pokemon/shiny/783.png | Bin 853 -> 29367 bytes public/images/pokemon/shiny/784.json | 851 ++- public/images/pokemon/shiny/784.png | Bin 1602 -> 49537 bytes public/images/pokemon/variant/1011.json | 36 + public/images/pokemon/variant/1019.json | 46 + .../pokemon/variant/143-gigantamax.json | 50 + public/images/pokemon/variant/143.json | 38 + public/images/pokemon/variant/187.json | 28 + public/images/pokemon/variant/188.json | 30 + public/images/pokemon/variant/189.json | 38 + public/images/pokemon/variant/2037.json | 26 + public/images/pokemon/variant/2038.json | 36 + public/images/pokemon/variant/204.json | 20 + public/images/pokemon/variant/205.json | 26 + public/images/pokemon/variant/207.json | 34 +- public/images/pokemon/variant/299.json | 28 + public/images/pokemon/variant/313.json | 36 + public/images/pokemon/variant/314.json | 36 + public/images/pokemon/variant/32.json | 34 + public/images/pokemon/variant/325.json | 26 + public/images/pokemon/variant/326.json | 32 + public/images/pokemon/variant/33.json | 32 + public/images/pokemon/variant/331.json | 30 + public/images/pokemon/variant/332.json | 34 + public/images/pokemon/variant/34.json | 44 + public/images/pokemon/variant/345.json | 28 + public/images/pokemon/variant/346.json | 32 + public/images/pokemon/variant/396.json | 44 + public/images/pokemon/variant/397.json | 38 + public/images/pokemon/variant/398.json | 36 + public/images/pokemon/variant/403.json | 26 + public/images/pokemon/variant/404.json | 28 + public/images/pokemon/variant/405.json | 28 + public/images/pokemon/variant/417.json | 36 + public/images/pokemon/variant/420.json | 32 + .../images/pokemon/variant/421-overcast.json | 34 + .../images/pokemon/variant/421-sunshine.json | 40 + public/images/pokemon/variant/446.json | 38 + public/images/pokemon/variant/472.json | 51 +- public/images/pokemon/variant/476.json | 36 + public/images/pokemon/variant/498.json | 44 + public/images/pokemon/variant/499.json | 40 + public/images/pokemon/variant/500.json | 56 + public/images/pokemon/variant/511.json | 26 + public/images/pokemon/variant/512.json | 32 + public/images/pokemon/variant/513.json | 26 + public/images/pokemon/variant/514.json | 37 + public/images/pokemon/variant/515.json | 28 + public/images/pokemon/variant/516.json | 30 + public/images/pokemon/variant/522.json | 34 + public/images/pokemon/variant/523.json | 42 + public/images/pokemon/variant/535.json | 31 + public/images/pokemon/variant/536.json | 44 + public/images/pokemon/variant/537.json | 33 + public/images/pokemon/variant/554.json | 36 + public/images/pokemon/variant/555-zen.json | 32 + public/images/pokemon/variant/555.json | 36 + public/images/pokemon/variant/566.json | 32 + public/images/pokemon/variant/567.json | 37 + public/images/pokemon/variant/572.json | 40 +- public/images/pokemon/variant/573.json | 26 + public/images/pokemon/variant/626.json | 52 + public/images/pokemon/variant/643.json | 52 + public/images/pokemon/variant/643_2.png | Bin 0 -> 124698 bytes public/images/pokemon/variant/644.json | 48 + public/images/pokemon/variant/646-black.json | 59 + public/images/pokemon/variant/646-white.json | 52 + public/images/pokemon/variant/646.json | 38 + public/images/pokemon/variant/692.json | 26 + public/images/pokemon/variant/693.json | 30 + public/images/pokemon/variant/746-school.json | 40 + public/images/pokemon/variant/746.json | 40 + public/images/pokemon/variant/780.json | 40 + public/images/pokemon/variant/782.json | 34 + public/images/pokemon/variant/783.json | 32 + public/images/pokemon/variant/784.json | 50 + public/images/pokemon/variant/840.json | 34 + .../pokemon/variant/841-gigantamax.json | 52 + public/images/pokemon/variant/841.json | 38 + .../pokemon/variant/842-gigantamax.json | 52 + public/images/pokemon/variant/842.json | 40 + public/images/pokemon/variant/871.json | 32 + public/images/pokemon/variant/88.json | 28 + public/images/pokemon/variant/89.json | 30 + .../pokemon/variant/_exp_masterlist.json | 22 + .../images/pokemon/variant/_masterlist.json | 181 +- public/images/pokemon/variant/back/1011.json | 29 + public/images/pokemon/variant/back/1019.json | 44 + .../pokemon/variant/back/143-gigantamax.json | 62 + public/images/pokemon/variant/back/143.json | 32 + public/images/pokemon/variant/back/187.json | 28 + public/images/pokemon/variant/back/188.json | 30 + public/images/pokemon/variant/back/189.json | 32 + public/images/pokemon/variant/back/2037.json | 22 + public/images/pokemon/variant/back/2038.json | 36 + public/images/pokemon/variant/back/204.json | 16 + public/images/pokemon/variant/back/205.json | 22 + public/images/pokemon/variant/back/299.json | 28 + public/images/pokemon/variant/back/313.json | 28 + public/images/pokemon/variant/back/314.json | 30 + public/images/pokemon/variant/back/32.json | 34 + public/images/pokemon/variant/back/325.json | 24 + public/images/pokemon/variant/back/326.json | 30 + public/images/pokemon/variant/back/33.json | 32 + public/images/pokemon/variant/back/331.json | 30 + public/images/pokemon/variant/back/332.json | 28 + public/images/pokemon/variant/back/34.json | 32 + public/images/pokemon/variant/back/345.json | 28 + public/images/pokemon/variant/back/346.json | 30 + public/images/pokemon/variant/back/396.json | 36 + public/images/pokemon/variant/back/397.json | 36 + public/images/pokemon/variant/back/398.json | 35 + public/images/pokemon/variant/back/403.json | 22 + public/images/pokemon/variant/back/404.json | 24 + public/images/pokemon/variant/back/405.json | 30 + public/images/pokemon/variant/back/417.json | 36 + public/images/pokemon/variant/back/420.json | 32 + .../pokemon/variant/back/421-overcast.json | 34 + .../pokemon/variant/back/421-sunshine.json | 40 + public/images/pokemon/variant/back/446.json | 38 + public/images/pokemon/variant/back/476.json | 36 + public/images/pokemon/variant/back/498.json | 44 + public/images/pokemon/variant/back/499.json | 40 + public/images/pokemon/variant/back/500.json | 46 + public/images/pokemon/variant/back/511.json | 20 + public/images/pokemon/variant/back/512.json | 26 + public/images/pokemon/variant/back/513.json | 20 + public/images/pokemon/variant/back/514.json | 27 + public/images/pokemon/variant/back/515.json | 22 + public/images/pokemon/variant/back/516.json | 24 + public/images/pokemon/variant/back/522.json | 36 + public/images/pokemon/variant/back/523.json | 44 + public/images/pokemon/variant/back/535.json | 26 + public/images/pokemon/variant/back/536.json | 32 + public/images/pokemon/variant/back/537.json | 24 + public/images/pokemon/variant/back/554.json | 32 + .../images/pokemon/variant/back/555-zen.json | 24 + public/images/pokemon/variant/back/555.json | 30 + public/images/pokemon/variant/back/566.json | 32 + public/images/pokemon/variant/back/567.json | 37 + public/images/pokemon/variant/back/572.json | 26 +- public/images/pokemon/variant/back/573.json | 24 + public/images/pokemon/variant/back/626.json | 46 + public/images/pokemon/variant/back/643.json | 50 + public/images/pokemon/variant/back/644.json | 44 + .../pokemon/variant/back/646-black.json | 49 + .../pokemon/variant/back/646-white.json | 46 + public/images/pokemon/variant/back/646.json | 33 + public/images/pokemon/variant/back/692.json | 28 + public/images/pokemon/variant/back/693.json | 28 + .../pokemon/variant/back/746-school.json | 38 + public/images/pokemon/variant/back/746.json | 40 + public/images/pokemon/variant/back/780.json | 28 + public/images/pokemon/variant/back/782.json | 30 + public/images/pokemon/variant/back/783.json | 32 + public/images/pokemon/variant/back/784.json | 42 + public/images/pokemon/variant/back/840.json | 28 + .../pokemon/variant/back/841-gigantamax.json | 36 + public/images/pokemon/variant/back/841.json | 34 + .../pokemon/variant/back/842-gigantamax.json | 36 + public/images/pokemon/variant/back/842.json | 36 + public/images/pokemon/variant/back/871.json | 32 + public/images/pokemon/variant/back/88.json | 28 + public/images/pokemon/variant/back/89.json | 30 + .../pokemon/variant/back/female/207.json | 18 +- .../pokemon/variant/back/female/332.json | 28 + .../pokemon/variant/back/female/396.json | 36 + .../pokemon/variant/back/female/397.json | 36 + .../pokemon/variant/back/female/398.json | 36 + .../pokemon/variant/back/female/403.json | 22 + .../pokemon/variant/back/female/404.json | 24 + .../pokemon/variant/back/female/405.json | 30 + .../pokemon/variant/back/female/417.json | 36 + public/images/pokemon/variant/exp/2037.json | 26 + public/images/pokemon/variant/exp/2038.json | 36 + public/images/pokemon/variant/exp/692.json | 26 + public/images/pokemon/variant/exp/693.json | 30 + .../pokemon/variant/exp/746-school.json | 40 + public/images/pokemon/variant/exp/746.json | 40 + public/images/pokemon/variant/exp/780.json | 40 + public/images/pokemon/variant/exp/840.json | 34 + public/images/pokemon/variant/exp/841.json | 42 + public/images/pokemon/variant/exp/842.json | 43 + public/images/pokemon/variant/exp/871.json | 32 + .../images/pokemon/variant/exp/back/2037.json | 22 + .../images/pokemon/variant/exp/back/2038.json | 36 + .../images/pokemon/variant/exp/back/692.json | 28 + .../images/pokemon/variant/exp/back/693.json | 28 + .../pokemon/variant/exp/back/746-school.json | 38 + .../images/pokemon/variant/exp/back/746.json | 40 + .../images/pokemon/variant/exp/back/780.json | 28 + .../images/pokemon/variant/exp/back/840.json | 28 + .../images/pokemon/variant/exp/back/841.json | 34 + .../images/pokemon/variant/exp/back/842.json | 38 + .../images/pokemon/variant/exp/back/871.json | 32 + public/images/pokemon/variant/female/207.json | 40 +- public/images/pokemon/variant/female/332.json | 34 + public/images/pokemon/variant/female/396.json | 38 + public/images/pokemon/variant/female/397.json | 38 + public/images/pokemon/variant/female/398.json | 36 + public/images/pokemon/variant/female/403.json | 26 + public/images/pokemon/variant/female/404.json | 28 + public/images/pokemon/variant/female/405.json | 28 + public/images/pokemon/variant/female/417.json | 36 + public/images/pokemon_icons_1v.json | 5754 ++++++++++++++--- public/images/pokemon_icons_1v.png | Bin 58708 -> 61514 bytes public/images/pokemon_icons_2v.json | 1072 +-- public/images/pokemon_icons_2v.png | Bin 37450 -> 39393 bytes public/images/pokemon_icons_3v.json | 1054 ++- public/images/pokemon_icons_3v.png | Bin 44779 -> 47691 bytes public/images/pokemon_icons_4v.json | 1220 ++-- public/images/pokemon_icons_4v.png | Bin 42411 -> 46415 bytes public/images/pokemon_icons_5v.json | 1746 +++-- public/images/pokemon_icons_5v.png | Bin 41975 -> 51486 bytes public/images/pokemon_icons_6v.json | 370 +- public/images/pokemon_icons_6v.png | Bin 35860 -> 36617 bytes public/images/pokemon_icons_7v.json | 754 ++- public/images/pokemon_icons_7v.png | Bin 27054 -> 30580 bytes public/images/pokemon_icons_8v.json | 624 +- public/images/pokemon_icons_8v.png | Bin 46264 -> 46699 bytes public/images/pokemon_icons_9v.json | 2 +- public/images/pokemon_icons_9v.png | Bin 35130 -> 35071 bytes 545 files changed, 29803 insertions(+), 21471 deletions(-) delete mode 100644 public/images/pokemon/exp/782.json delete mode 100644 public/images/pokemon/exp/782.png delete mode 100644 public/images/pokemon/exp/783.json delete mode 100644 public/images/pokemon/exp/783.png delete mode 100644 public/images/pokemon/exp/784.json delete mode 100644 public/images/pokemon/exp/784.png delete mode 100644 public/images/pokemon/exp/back/782.json delete mode 100644 public/images/pokemon/exp/back/782.png delete mode 100644 public/images/pokemon/exp/back/783.json delete mode 100644 public/images/pokemon/exp/back/783.png delete mode 100644 public/images/pokemon/exp/back/784.json delete mode 100644 public/images/pokemon/exp/back/784.png delete mode 100644 public/images/pokemon/exp/back/shiny/782.json delete mode 100644 public/images/pokemon/exp/back/shiny/782.png delete mode 100644 public/images/pokemon/exp/back/shiny/783.json delete mode 100644 public/images/pokemon/exp/back/shiny/783.png delete mode 100644 public/images/pokemon/exp/back/shiny/784.json delete mode 100644 public/images/pokemon/exp/back/shiny/784.png delete mode 100644 public/images/pokemon/exp/shiny/782.json delete mode 100644 public/images/pokemon/exp/shiny/782.png delete mode 100644 public/images/pokemon/exp/shiny/783.json delete mode 100644 public/images/pokemon/exp/shiny/783.png delete mode 100644 public/images/pokemon/exp/shiny/784.json delete mode 100644 public/images/pokemon/exp/shiny/784.png create mode 100644 public/images/pokemon/icons/variant/1/143-gigantamax_2.png create mode 100644 public/images/pokemon/icons/variant/1/143-gigantamax_3.png create mode 100644 public/images/pokemon/icons/variant/1/143_2.png create mode 100644 public/images/pokemon/icons/variant/1/143_3.png create mode 100644 public/images/pokemon/icons/variant/1/32_2.png create mode 100644 public/images/pokemon/icons/variant/1/32_3.png create mode 100644 public/images/pokemon/icons/variant/1/33_2.png create mode 100644 public/images/pokemon/icons/variant/1/33_3.png create mode 100644 public/images/pokemon/icons/variant/1/34_2.png create mode 100644 public/images/pokemon/icons/variant/1/34_3.png create mode 100644 public/images/pokemon/icons/variant/1/88_2.png create mode 100644 public/images/pokemon/icons/variant/1/88_3.png create mode 100644 public/images/pokemon/icons/variant/1/89_2.png create mode 100644 public/images/pokemon/icons/variant/1/89_3.png create mode 100644 public/images/pokemon/icons/variant/2/187_2.png create mode 100644 public/images/pokemon/icons/variant/2/187_3.png create mode 100644 public/images/pokemon/icons/variant/2/188_2.png create mode 100644 public/images/pokemon/icons/variant/2/188_3.png create mode 100644 public/images/pokemon/icons/variant/2/189_2.png create mode 100644 public/images/pokemon/icons/variant/2/189_3.png create mode 100644 public/images/pokemon/icons/variant/2/204_2.png create mode 100644 public/images/pokemon/icons/variant/2/204_3.png create mode 100644 public/images/pokemon/icons/variant/2/205_2.png create mode 100644 public/images/pokemon/icons/variant/2/205_3.png create mode 100644 public/images/pokemon/icons/variant/3/299_2.png create mode 100644 public/images/pokemon/icons/variant/3/299_3.png create mode 100644 public/images/pokemon/icons/variant/3/313_2.png create mode 100644 public/images/pokemon/icons/variant/3/313_3.png create mode 100644 public/images/pokemon/icons/variant/3/314_2.png create mode 100644 public/images/pokemon/icons/variant/3/314_3.png create mode 100644 public/images/pokemon/icons/variant/3/325_2.png create mode 100644 public/images/pokemon/icons/variant/3/325_3.png create mode 100644 public/images/pokemon/icons/variant/3/326_2.png create mode 100644 public/images/pokemon/icons/variant/3/326_3.png create mode 100644 public/images/pokemon/icons/variant/3/331_2.png create mode 100644 public/images/pokemon/icons/variant/3/331_3.png create mode 100644 public/images/pokemon/icons/variant/3/332_2.png create mode 100644 public/images/pokemon/icons/variant/3/332_3.png create mode 100644 public/images/pokemon/icons/variant/3/345_2.png create mode 100644 public/images/pokemon/icons/variant/3/345_3.png create mode 100644 public/images/pokemon/icons/variant/3/346_2.png create mode 100644 public/images/pokemon/icons/variant/3/346_3.png create mode 100644 public/images/pokemon/icons/variant/4/396_2.png create mode 100644 public/images/pokemon/icons/variant/4/396_3.png create mode 100644 public/images/pokemon/icons/variant/4/397_2.png create mode 100644 public/images/pokemon/icons/variant/4/397_3.png create mode 100644 public/images/pokemon/icons/variant/4/398_2.png create mode 100644 public/images/pokemon/icons/variant/4/398_3.png create mode 100644 public/images/pokemon/icons/variant/4/403_2.png create mode 100644 public/images/pokemon/icons/variant/4/403_3.png create mode 100644 public/images/pokemon/icons/variant/4/404_2.png create mode 100644 public/images/pokemon/icons/variant/4/404_3.png create mode 100644 public/images/pokemon/icons/variant/4/405_2.png create mode 100644 public/images/pokemon/icons/variant/4/405_3.png create mode 100644 public/images/pokemon/icons/variant/4/420_2.png create mode 100644 public/images/pokemon/icons/variant/4/420_3.png create mode 100644 public/images/pokemon/icons/variant/4/421-overcast_2.png create mode 100644 public/images/pokemon/icons/variant/4/421-overcast_3.png create mode 100644 public/images/pokemon/icons/variant/4/421-sunshine_2.png create mode 100644 public/images/pokemon/icons/variant/4/421-sunshine_3.png create mode 100644 public/images/pokemon/icons/variant/4/446_2.png create mode 100644 public/images/pokemon/icons/variant/4/446_3.png create mode 100644 public/images/pokemon/icons/variant/4/476_2.png create mode 100644 public/images/pokemon/icons/variant/4/476_3.png create mode 100644 public/images/pokemon/icons/variant/5/498_2.png create mode 100644 public/images/pokemon/icons/variant/5/498_3.png create mode 100644 public/images/pokemon/icons/variant/5/499_2.png create mode 100644 public/images/pokemon/icons/variant/5/499_3.png create mode 100644 public/images/pokemon/icons/variant/5/500_2.png create mode 100644 public/images/pokemon/icons/variant/5/500_3.png create mode 100644 public/images/pokemon/icons/variant/5/511_2.png create mode 100644 public/images/pokemon/icons/variant/5/511_3.png create mode 100644 public/images/pokemon/icons/variant/5/512_2.png create mode 100644 public/images/pokemon/icons/variant/5/512_3.png create mode 100644 public/images/pokemon/icons/variant/5/513_2.png create mode 100644 public/images/pokemon/icons/variant/5/513_3.png create mode 100644 public/images/pokemon/icons/variant/5/514_2.png create mode 100644 public/images/pokemon/icons/variant/5/514_3.png create mode 100644 public/images/pokemon/icons/variant/5/515_2.png create mode 100644 public/images/pokemon/icons/variant/5/515_3.png create mode 100644 public/images/pokemon/icons/variant/5/516_2.png create mode 100644 public/images/pokemon/icons/variant/5/516_3.png create mode 100644 public/images/pokemon/icons/variant/5/522_2.png create mode 100644 public/images/pokemon/icons/variant/5/522_3.png create mode 100644 public/images/pokemon/icons/variant/5/523_2.png create mode 100644 public/images/pokemon/icons/variant/5/523_3.png create mode 100644 public/images/pokemon/icons/variant/5/535_2.png create mode 100644 public/images/pokemon/icons/variant/5/535_3.png create mode 100644 public/images/pokemon/icons/variant/5/536_2.png create mode 100644 public/images/pokemon/icons/variant/5/536_3.png create mode 100644 public/images/pokemon/icons/variant/5/537_2.png create mode 100644 public/images/pokemon/icons/variant/5/537_3.png create mode 100644 public/images/pokemon/icons/variant/5/554_2.png create mode 100644 public/images/pokemon/icons/variant/5/554_3.png create mode 100644 public/images/pokemon/icons/variant/5/555-zen_2.png create mode 100644 public/images/pokemon/icons/variant/5/555-zen_3.png create mode 100644 public/images/pokemon/icons/variant/5/555_2.png create mode 100644 public/images/pokemon/icons/variant/5/555_3.png create mode 100644 public/images/pokemon/icons/variant/5/566_2.png create mode 100644 public/images/pokemon/icons/variant/5/566_3.png create mode 100644 public/images/pokemon/icons/variant/5/567_2.png create mode 100644 public/images/pokemon/icons/variant/5/567_3.png create mode 100644 public/images/pokemon/icons/variant/5/573_2.png create mode 100644 public/images/pokemon/icons/variant/5/573_3.png create mode 100644 public/images/pokemon/icons/variant/5/626_2.png create mode 100644 public/images/pokemon/icons/variant/5/626_3.png delete mode 100644 public/images/pokemon/icons/variant/5/641-incarnate_1.png delete mode 100644 public/images/pokemon/icons/variant/5/641-therian_1.png delete mode 100644 public/images/pokemon/icons/variant/5/642-incarnate_1.png delete mode 100644 public/images/pokemon/icons/variant/5/642-therian_1.png create mode 100644 public/images/pokemon/icons/variant/5/643_2.png create mode 100644 public/images/pokemon/icons/variant/5/643_3.png create mode 100644 public/images/pokemon/icons/variant/5/644_2.png create mode 100644 public/images/pokemon/icons/variant/5/644_3.png delete mode 100644 public/images/pokemon/icons/variant/5/645-incarnate_1.png delete mode 100644 public/images/pokemon/icons/variant/5/645-therian_1.png create mode 100644 public/images/pokemon/icons/variant/5/646-black_2.png create mode 100644 public/images/pokemon/icons/variant/5/646-black_3.png create mode 100644 public/images/pokemon/icons/variant/5/646-white_2.png create mode 100644 public/images/pokemon/icons/variant/5/646-white_3.png create mode 100644 public/images/pokemon/icons/variant/5/646_2.png create mode 100644 public/images/pokemon/icons/variant/5/646_3.png create mode 100644 public/images/pokemon/icons/variant/6/692_2.png create mode 100644 public/images/pokemon/icons/variant/6/692_3.png create mode 100644 public/images/pokemon/icons/variant/6/693_2.png create mode 100644 public/images/pokemon/icons/variant/6/693_3.png create mode 100644 public/images/pokemon/icons/variant/7/2037_2.png create mode 100644 public/images/pokemon/icons/variant/7/2037_3.png create mode 100644 public/images/pokemon/icons/variant/7/2038_2.png create mode 100644 public/images/pokemon/icons/variant/7/2038_3.png create mode 100644 public/images/pokemon/icons/variant/7/746-school_1.png create mode 100644 public/images/pokemon/icons/variant/7/746-school_2.png create mode 100644 public/images/pokemon/icons/variant/7/746_1.png create mode 100644 public/images/pokemon/icons/variant/7/746_2.png create mode 100644 public/images/pokemon/icons/variant/7/780_2.png create mode 100644 public/images/pokemon/icons/variant/7/780_3.png create mode 100644 public/images/pokemon/icons/variant/7/782_2.png create mode 100644 public/images/pokemon/icons/variant/7/782_3.png create mode 100644 public/images/pokemon/icons/variant/7/783_2.png create mode 100644 public/images/pokemon/icons/variant/7/783_3.png create mode 100644 public/images/pokemon/icons/variant/7/784_2.png create mode 100644 public/images/pokemon/icons/variant/7/784_3.png create mode 100644 public/images/pokemon/icons/variant/8/871_1.png create mode 100644 public/images/pokemon/icons/variant/8/871_2.png create mode 100644 public/images/pokemon/variant/1011.json create mode 100644 public/images/pokemon/variant/1019.json create mode 100644 public/images/pokemon/variant/143-gigantamax.json create mode 100644 public/images/pokemon/variant/143.json create mode 100644 public/images/pokemon/variant/187.json create mode 100644 public/images/pokemon/variant/188.json create mode 100644 public/images/pokemon/variant/189.json create mode 100644 public/images/pokemon/variant/2037.json create mode 100644 public/images/pokemon/variant/2038.json create mode 100644 public/images/pokemon/variant/204.json create mode 100644 public/images/pokemon/variant/205.json create mode 100644 public/images/pokemon/variant/299.json create mode 100644 public/images/pokemon/variant/313.json create mode 100644 public/images/pokemon/variant/314.json create mode 100644 public/images/pokemon/variant/32.json create mode 100644 public/images/pokemon/variant/325.json create mode 100644 public/images/pokemon/variant/326.json create mode 100644 public/images/pokemon/variant/33.json create mode 100644 public/images/pokemon/variant/331.json create mode 100644 public/images/pokemon/variant/332.json create mode 100644 public/images/pokemon/variant/34.json create mode 100644 public/images/pokemon/variant/345.json create mode 100644 public/images/pokemon/variant/346.json create mode 100644 public/images/pokemon/variant/396.json create mode 100644 public/images/pokemon/variant/397.json create mode 100644 public/images/pokemon/variant/398.json create mode 100644 public/images/pokemon/variant/403.json create mode 100644 public/images/pokemon/variant/404.json create mode 100644 public/images/pokemon/variant/405.json create mode 100644 public/images/pokemon/variant/417.json create mode 100644 public/images/pokemon/variant/420.json create mode 100644 public/images/pokemon/variant/421-overcast.json create mode 100644 public/images/pokemon/variant/421-sunshine.json create mode 100644 public/images/pokemon/variant/446.json create mode 100644 public/images/pokemon/variant/476.json create mode 100644 public/images/pokemon/variant/498.json create mode 100644 public/images/pokemon/variant/499.json create mode 100644 public/images/pokemon/variant/500.json create mode 100644 public/images/pokemon/variant/511.json create mode 100644 public/images/pokemon/variant/512.json create mode 100644 public/images/pokemon/variant/513.json create mode 100644 public/images/pokemon/variant/514.json create mode 100644 public/images/pokemon/variant/515.json create mode 100644 public/images/pokemon/variant/516.json create mode 100644 public/images/pokemon/variant/522.json create mode 100644 public/images/pokemon/variant/523.json create mode 100644 public/images/pokemon/variant/535.json create mode 100644 public/images/pokemon/variant/536.json create mode 100644 public/images/pokemon/variant/537.json create mode 100644 public/images/pokemon/variant/554.json create mode 100644 public/images/pokemon/variant/555-zen.json create mode 100644 public/images/pokemon/variant/555.json create mode 100644 public/images/pokemon/variant/566.json create mode 100644 public/images/pokemon/variant/567.json create mode 100644 public/images/pokemon/variant/573.json create mode 100644 public/images/pokemon/variant/626.json create mode 100644 public/images/pokemon/variant/643.json create mode 100644 public/images/pokemon/variant/643_2.png create mode 100644 public/images/pokemon/variant/644.json create mode 100644 public/images/pokemon/variant/646-black.json create mode 100644 public/images/pokemon/variant/646-white.json create mode 100644 public/images/pokemon/variant/646.json create mode 100644 public/images/pokemon/variant/692.json create mode 100644 public/images/pokemon/variant/693.json create mode 100644 public/images/pokemon/variant/746-school.json create mode 100644 public/images/pokemon/variant/746.json create mode 100644 public/images/pokemon/variant/780.json create mode 100644 public/images/pokemon/variant/782.json create mode 100644 public/images/pokemon/variant/783.json create mode 100644 public/images/pokemon/variant/784.json create mode 100644 public/images/pokemon/variant/840.json create mode 100644 public/images/pokemon/variant/841-gigantamax.json create mode 100644 public/images/pokemon/variant/841.json create mode 100644 public/images/pokemon/variant/842-gigantamax.json create mode 100644 public/images/pokemon/variant/842.json create mode 100644 public/images/pokemon/variant/871.json create mode 100644 public/images/pokemon/variant/88.json create mode 100644 public/images/pokemon/variant/89.json create mode 100644 public/images/pokemon/variant/back/1011.json create mode 100644 public/images/pokemon/variant/back/1019.json create mode 100644 public/images/pokemon/variant/back/143-gigantamax.json create mode 100644 public/images/pokemon/variant/back/143.json create mode 100644 public/images/pokemon/variant/back/187.json create mode 100644 public/images/pokemon/variant/back/188.json create mode 100644 public/images/pokemon/variant/back/189.json create mode 100644 public/images/pokemon/variant/back/2037.json create mode 100644 public/images/pokemon/variant/back/2038.json create mode 100644 public/images/pokemon/variant/back/204.json create mode 100644 public/images/pokemon/variant/back/205.json create mode 100644 public/images/pokemon/variant/back/299.json create mode 100644 public/images/pokemon/variant/back/313.json create mode 100644 public/images/pokemon/variant/back/314.json create mode 100644 public/images/pokemon/variant/back/32.json create mode 100644 public/images/pokemon/variant/back/325.json create mode 100644 public/images/pokemon/variant/back/326.json create mode 100644 public/images/pokemon/variant/back/33.json create mode 100644 public/images/pokemon/variant/back/331.json create mode 100644 public/images/pokemon/variant/back/332.json create mode 100644 public/images/pokemon/variant/back/34.json create mode 100644 public/images/pokemon/variant/back/345.json create mode 100644 public/images/pokemon/variant/back/346.json create mode 100644 public/images/pokemon/variant/back/396.json create mode 100644 public/images/pokemon/variant/back/397.json create mode 100644 public/images/pokemon/variant/back/398.json create mode 100644 public/images/pokemon/variant/back/403.json create mode 100644 public/images/pokemon/variant/back/404.json create mode 100644 public/images/pokemon/variant/back/405.json create mode 100644 public/images/pokemon/variant/back/417.json create mode 100644 public/images/pokemon/variant/back/420.json create mode 100644 public/images/pokemon/variant/back/421-overcast.json create mode 100644 public/images/pokemon/variant/back/421-sunshine.json create mode 100644 public/images/pokemon/variant/back/446.json create mode 100644 public/images/pokemon/variant/back/476.json create mode 100644 public/images/pokemon/variant/back/498.json create mode 100644 public/images/pokemon/variant/back/499.json create mode 100644 public/images/pokemon/variant/back/500.json create mode 100644 public/images/pokemon/variant/back/511.json create mode 100644 public/images/pokemon/variant/back/512.json create mode 100644 public/images/pokemon/variant/back/513.json create mode 100644 public/images/pokemon/variant/back/514.json create mode 100644 public/images/pokemon/variant/back/515.json create mode 100644 public/images/pokemon/variant/back/516.json create mode 100644 public/images/pokemon/variant/back/522.json create mode 100644 public/images/pokemon/variant/back/523.json create mode 100644 public/images/pokemon/variant/back/535.json create mode 100644 public/images/pokemon/variant/back/536.json create mode 100644 public/images/pokemon/variant/back/537.json create mode 100644 public/images/pokemon/variant/back/554.json create mode 100644 public/images/pokemon/variant/back/555-zen.json create mode 100644 public/images/pokemon/variant/back/555.json create mode 100644 public/images/pokemon/variant/back/566.json create mode 100644 public/images/pokemon/variant/back/567.json create mode 100644 public/images/pokemon/variant/back/573.json create mode 100644 public/images/pokemon/variant/back/626.json create mode 100644 public/images/pokemon/variant/back/643.json create mode 100644 public/images/pokemon/variant/back/644.json create mode 100644 public/images/pokemon/variant/back/646-black.json create mode 100644 public/images/pokemon/variant/back/646-white.json create mode 100644 public/images/pokemon/variant/back/646.json create mode 100644 public/images/pokemon/variant/back/692.json create mode 100644 public/images/pokemon/variant/back/693.json create mode 100644 public/images/pokemon/variant/back/746-school.json create mode 100644 public/images/pokemon/variant/back/746.json create mode 100644 public/images/pokemon/variant/back/780.json create mode 100644 public/images/pokemon/variant/back/782.json create mode 100644 public/images/pokemon/variant/back/783.json create mode 100644 public/images/pokemon/variant/back/784.json create mode 100644 public/images/pokemon/variant/back/840.json create mode 100644 public/images/pokemon/variant/back/841-gigantamax.json create mode 100644 public/images/pokemon/variant/back/841.json create mode 100644 public/images/pokemon/variant/back/842-gigantamax.json create mode 100644 public/images/pokemon/variant/back/842.json create mode 100644 public/images/pokemon/variant/back/871.json create mode 100644 public/images/pokemon/variant/back/88.json create mode 100644 public/images/pokemon/variant/back/89.json create mode 100644 public/images/pokemon/variant/back/female/332.json create mode 100644 public/images/pokemon/variant/back/female/396.json create mode 100644 public/images/pokemon/variant/back/female/397.json create mode 100644 public/images/pokemon/variant/back/female/398.json create mode 100644 public/images/pokemon/variant/back/female/403.json create mode 100644 public/images/pokemon/variant/back/female/404.json create mode 100644 public/images/pokemon/variant/back/female/405.json create mode 100644 public/images/pokemon/variant/back/female/417.json create mode 100644 public/images/pokemon/variant/exp/2037.json create mode 100644 public/images/pokemon/variant/exp/2038.json create mode 100644 public/images/pokemon/variant/exp/692.json create mode 100644 public/images/pokemon/variant/exp/693.json create mode 100644 public/images/pokemon/variant/exp/746-school.json create mode 100644 public/images/pokemon/variant/exp/746.json create mode 100644 public/images/pokemon/variant/exp/780.json create mode 100644 public/images/pokemon/variant/exp/840.json create mode 100644 public/images/pokemon/variant/exp/841.json create mode 100644 public/images/pokemon/variant/exp/842.json create mode 100644 public/images/pokemon/variant/exp/871.json create mode 100644 public/images/pokemon/variant/exp/back/2037.json create mode 100644 public/images/pokemon/variant/exp/back/2038.json create mode 100644 public/images/pokemon/variant/exp/back/692.json create mode 100644 public/images/pokemon/variant/exp/back/693.json create mode 100644 public/images/pokemon/variant/exp/back/746-school.json create mode 100644 public/images/pokemon/variant/exp/back/746.json create mode 100644 public/images/pokemon/variant/exp/back/780.json create mode 100644 public/images/pokemon/variant/exp/back/840.json create mode 100644 public/images/pokemon/variant/exp/back/841.json create mode 100644 public/images/pokemon/variant/exp/back/842.json create mode 100644 public/images/pokemon/variant/exp/back/871.json create mode 100644 public/images/pokemon/variant/female/332.json create mode 100644 public/images/pokemon/variant/female/396.json create mode 100644 public/images/pokemon/variant/female/397.json create mode 100644 public/images/pokemon/variant/female/398.json create mode 100644 public/images/pokemon/variant/female/403.json create mode 100644 public/images/pokemon/variant/female/404.json create mode 100644 public/images/pokemon/variant/female/405.json create mode 100644 public/images/pokemon/variant/female/417.json diff --git a/public/exp-sprites.json b/public/exp-sprites.json index d6c8534e008..2595b5a7983 100644 --- a/public/exp-sprites.json +++ b/public/exp-sprites.json @@ -613,12 +613,6 @@ "780", "781", "781", - "782", - "782", - "783", - "783", - "784", - "784", "785", "785", "786", @@ -1733,12 +1727,6 @@ "780b", "781b", "781b", - "782b", - "782b", - "783b", - "783b", - "784b", - "784b", "785b", "785b", "786b", @@ -2853,12 +2841,6 @@ "780sb", "781sb", "781sb", - "782sb", - "782sb", - "783sb", - "783sb", - "784sb", - "784sb", "785sb", "785sb", "786sb", @@ -3978,12 +3960,6 @@ "780s", "781s", "781s", - "782s", - "782s", - "783s", - "783s", - "784s", - "784s", "785s", "785s", "786s", diff --git a/public/images/pokemon/1011.png b/public/images/pokemon/1011.png index 39ed4c0d519233fe80a1dea67dfedace3ecd65b4..035ea0aca44c649d77fd00c58467e7bd5f75c5c5 100644 GIT binary patch delta 597 zcmV-b0;>Jl1dRnQiBL{Q4GJ0x0000DNk~Le0000g0000%2m=5B0FW-m@Bjb+0drDE zLIAGL9O;oEMSl`>QchC<|NsC0|NsC0|NsC0|NsC0|6aj{J^%m#=Sf6CR7i={)M=B0 zAPfdz69Qg6|No!eya_0_*gCW8hs{h6;UR`YyRH$j)!2-9J8X~BcsqfflJp#!ZYR-n zO#UZ|1vp6O%W-s9!34}wDLb2?5N*R*vm0`~)8R8JrHn3}|gQa{qg#04&Pgr4={jvci zO2yTQWD=l2TJ7jzCHxC$XX;(j@cpj_A@kRP>)wqU@SC=kKRbapw;3o8Az}PY{ jOddMO4lFwCy#NtErspEb$7(S#00000NkvXXu0mjf4h$1h delta 544 zcmV+*0^j|O1=$24iBL{Q4GJ0x0000DNk~Le0000%0000%2m=5B0J$kScabhde*tt- zPE!Ct=GbNc00GfSL_t(|UhUM4Y63A3Md7_OlVsQ5_WfVBGq*!mr8FBCYJnb5FmOMj zqSJSkX=mk9UMdiHxj^7wsFyz>)CB&8eZXGfc-k#oPRD8Q9i9^oUJASe4~Bp@@30Da zFbI&KupT@s5O{?^!T}cu{IWnIe+2?h3THdN9ViR~N!Yuk5Eg+^!HmLz7J)H>?}7p? ze>n|iy!g=pS_H<4bD`jk10t$ciwh_J6l*or!F_8GTb6S4N2$d`Fk(oH%*w*tFoP!p zz#Ih32*kcI*(?Mx&tWjM46+@V=l38U+bZx5+~YxjZWVG1#Zv;lwkjIWf2k<|n`$Lc zYlq0KD3XDSXaLI+L@nh1H&^1G}~*wO(!g%HTn@T`#Vx`b+bj6f;1 z*5X~eg!trsE`VJNyGGU(c7QtoA{N8Xy;(;PQAFz=;)3s3tgZhqiM15e5#CaS755Q#_gWKrc?y$Qk{eh>`AC2 i4P0xG#{F2zhG!op@gm8FIUI)o0000Px#MNmvsMF0Q*7#J961_mu*Cq8B?gb@*(2newk7q=!U)IKeOW=j8hSv;FQYp6A~ znthz$U;oZt>CdzG_xHIS9o)aG#g&M3XF1uiiAewe02g#pPE!E?|NsC0|NsC0|NsC0 z|NsC0|NsC0|FDa5-v9su!%0LzR9J=0*z0zqAP@jxr$PfXU~F37|50}?fPgVY{j;1s z&E~@AFf(3wWy z=6MbdKTy74l;UoH4FmLHR;IXVWbmJqtW-E)hE&5SZW85rJ5$^?8REEB5yrPnpa#Lp zD4_3@Y&|phvI)jff2uY&^i%pnVX3$ZT9gZolN3z7chzDg$1;z?q6$$N!kmKHFaVT$ z`5AxZeT#9WJ^ymvFi}Y>Mu#J!ZXY%S60^w-GmtikJFuht`=U*%RFN|$rzjLL#aoa~ z>>Zt;V(MUASvQD{i)m80<1O_Ofmgl9yx5WWxS|y9dvVE4G*~VyZN;=jULF5vcRmnh zR;0KpH7^-)s1xc>3udk|ylJ`2uu~`c6vGW!IgtsP=Ow81TEy0P)~dGhUKbuZo!6iw$f=S4AT`!%-$pRO>tHVvbSy(m|%$7q(8#@R3WL zg83_$CL9QwuCMtR!Qpf>>?B5OOM@IOjMhncyCzwcIL6pG0H?>!F&LfyJD7O3BjxMM z=3z`?jM4s0*R&Da>oOO%jHcS)QPePF z`mUB?v#P{cVfw;Br&KW6+VSaE*3``mP%7Ww=!7DeZbsS{dreC;xGW8%V5#63gUIc6 z(^bI$3}`sQ7(&R&5YE=j^eTMkd`m+h4vyBO`xQ*`tr&E?U{+gl&N8d_b(FDoolT1p zhN=Ygya9jG^~?cmhGL4@0l48gaJ-Mh*!8pk;>@z(^bRFr?!AvL;8sk}|HnGfSqF{I zM;8$1mI<ezPzQf(qC%rU`i(3x78TQ()g3IQ_UbcM=&bHPJn~LX5oo1! P00000NkvXXu0mjfS_&$l literal 1107 zcmV-Z1g!gsP)cs0yGg0$}_0A zcn^2&s zD02$AAL!xjR*I4e5mOf>JG`oK*hD@PiL|uvorv=H9b8gCEb_mY^c>V~s7dD{Y4MTQ zPhV0*!bK8lFpB<-Xr=Htw}kRCiZSh?wZ{-arU1PeM|qcgkzgrxQ+f@yA~%pT=Ajsk zLuw)+!Ag!Lk#^ofJcx*rviPzZ^}cqsY`nf{K8Ok2hJ?vFPMKyeOFfE*aa0kvPv`Xn zstv?v#6=IBTb{Y)vZW(*CcdA{x(*WY zQjmtHijfn}byA4_kL4jQt@nB@zzEJHAWSV{B&EWpGjT2wQq1Z|>7LU|HA)>z`PMFqJs;Vdc5^C|vV;dJf6fwqG_<^_?R8&-q zoP18Q2v;9|u@rUDjbtV^gjfZMHpmf47cvd9M^thXLvYfB3{ebW1Ft{vBW%xN#<=o1XZ!D8F6Va*@flBSfs3?+Wy> zAf1Y>XA(S$L9)x+f>F^lpK=h+L>I--LFORmD1bhv#7_5!6XxL050f?vu}6%Ph08g_ z7`fj81>|I7x5(b@b_+$y5e)|H6peU7?j}P)#n5x24IzQMsUb_JL+Cpq<1K5lsOcvJ zC*%O}Nq>DHI`@R6*HM%_qg;IPOIk0#(Cuc*jFN~qek@oY>$JAsRbfK%>XDxq74gw= zorbqe+W*g)mMxdL_UklEOg@-ScQW2`AJ}t2_bT1GHFA)BSBUr`*IeZBh`8bh6_ipU zUl`m^on03V=(3S?n&zQKjxTvew|=vUW^eIk zvh|uSnCJ6EYR{j#)<<{NdPOw(R#k3Y+WKbq&PF>QG;s zYduuowq5I{X@BY}7rCDjTM_DpBOr0QSKf5SRYXml`Y89(W_4g4B6FInUB+b zP;I_c>@0@;H@~(`e?eej1(-bDZkr?aoTa_W-)?mKNq>QOzYRjGKs%nnx1U=Acz-

    )&yj0Y-$ z3CnWj+^&IE3^Fb$*> z!4hI0eSgX5kV1F?aHiiS{hFgI5BtOV3ioE$t*FBYn%-qxC1em)QWolcf*x zXlQuysa&uK$d>soT<6I3?#fKi*t(vjAy-nJ+T1 z6MsU;CR}(LjU3Ww@m||Vax@Jf?&y4tq$rf8lhyY-<1>Z+T#6|BA2k5ASZMh^jVUZQ z9Do$f=xYu`w2u@*EUwpH!I2b$8;%Ii0dPJ_<+>C?sV~TpzDpn^%F}#?NF$FrHm9h} zkT2w7E}5KT=cP?&X8}L7werOx>)-eC;fzuJy7U z<7tswK6s+6ee4O-02{>KcS9?9ZK*`EJ=kmrcCGJbZ6H5yF964J04wEZ0qOGT5PufS z&*mr#_{SJl$j^o_XoO)K`Bn1hvI)RQBOz9+i|2D>sq65bzgm^)@*dzqeLK!xE?JaZt^gEO z=w1=vd&l~~q=YR8@M>x6Jq1WdOgQ5kSJ7-0^OmkmkO zLVyvdJ$!u~3@|y}3Vi?;O_?!32`x>o4FIGxo=($6o^ovjV576Piu)Q3znBdHR;n3*D#$f- z=Z#me*FWzFgBAb^2W{oOFVVO0gB(5TKmJxuSb$gj#6}~)$Y$JHET0Lf*|s;LG}S($ vzw2AM{m3ux393> delta 1350 zcmV-M1-bgC3(X3U7=Hu<0000GwrUFi001yhOjJbx000J`UkC^Y5II3HS3faYdsKNV zVnHB@v@)QeprmtByW?BlR#xW4toG);{EMF+v>WLF0004WQchC4cTHtdjg9`vB`PQ)~eD&s+JdA}2N|!Jm>*AQ%BlxJR@mlg-5P4Zn#3C3^6?fvoVDuaF)$AKm1 z0bIlvF@L6{`UZCYY()R+p55|3B&6QCyczQlN_OlKr#tt})kAnFz{LZQi}**F0RO+H zE^&sz91bdBc*r~-Lyh+#;YEBDzr(Oa(a{G%fWt6gj9?$fFhQ7yF!17czf!6W1Bv$! z*{$yfes~{yqW=)WjNj{&9yr6VufqFqNN(tb0e?KneH;(fbFaSeO_g(6`tWza^#drHa06&6Nm*N57Qi@&p za)|3<_*cO&#jjK_#&ErEz};{P;0h&_x>W{)crbBSD=vm>go1#j=|KuCc~GZ>bwnR1 zp?_9AzE~HL1hj zuv^_0K0~cD*7l{Nbik4dD-2~`qu+EYs{h zfX}xl_tRU8!snCwj-3WQ@h9++prG`v@Fcp1GcM&vfFv~2drYI~jL##`6s_Q7OMh7m z(AwJZ@bvLO)9#jkQd4F4rKw||DR*~vch*jUwo^Wx0FD_%?FS4YrcPLbgLXeS)ij3G zvN~>wC>j7ww*2<2t*K*{Sc#%m>Y2(dcGqNWHWu8xiqe4bXd^+HgZ&18LJw$<;O%(O zeAVg}j6T30^6uvzu!let6?$J0oPPp{)Ik*cm&hf6N2ryErym&lSO5V~tML(CHK{|? z1lRzi=K!ve@syRDX0yftpPEE3Cg2!A4(@j?^#m-{grO;5AR+8^4kQ#sFbNd~K$HT= zfZf;E+maB7yBy+4KqHF!0Ths-|E--OX)vgu4*^}&5Mo+e83Hiq<`G;!)jyL~Zn+I| zL>3c(L_|FiBm3gb@K*!HtU)z#(o+OMUy-H~u;~9RAMzpp0_{@qldzMa%m4rY07*qo IM6N<$f-{?UApigX diff --git a/public/images/pokemon/143.png b/public/images/pokemon/143.png index 8050627a9a1ce6f1d2c4e78b4f1b27aff510d956..a09d0533fce0e19f77cc9c47f9f634a9019430f4 100644 GIT binary patch literal 27509 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

    !f+vo7pru@}krZF|8B#%2sHyeXu&lP`I3{l&X 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 diff --git a/public/images/pokemon/189.png b/public/images/pokemon/189.png index fb7f53ced67a7b0b8bda48d55538ee161a430044..632366956bbbc201a7fcd4bbad366eab2a1c9a81 100644 GIT binary patch literal 15032 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 D?W+!< diff --git a/public/images/pokemon/2038.png b/public/images/pokemon/2038.png index 71cedc8af136a791704dd3922dc63e21e3291b8d..7e8fd0ea1b22ec297b13ed800e3966bbf4906705 100644 GIT binary patch delta 1247 zcmV<51R(pY3Firr7=H)@0000?*Rsa|0004VQb$4nuFf3k0000jP)t-s0000G5D-yd zcK~{|IE9URikxP%*M_LTfx^YT%h#dd-muf^>i+)y{r&&{|Bqd0qW}N^4|GyaQvm<} z|NsC0|NsC0|NsC0<&B=E000C{NklTJW05(*Kbz%)!h%A@P8~KT3I=V0OMCbLZy_b|6SPv%M%M;Uzeg}VUJEEESNTj z{76$9h*@_t4(K$R6*Pd)w7St3A@*O%MskM*l{J82_IrXM_BgTbf`R*+gr}&Sml%#d zN}y6lW9AM%n17uE=z8`Mk2KhpSe(U$mH0~{9ri9XzOk?R{LFeGYmnaWgA|0q;6~$# z_RTP*G12ipSg{DeT!8um2G)0&+jbmchnZ4woF*9mfQHR0aGKx{oi}Ag@l>FV9F z-ft>2Xi--%$I(kyoXXbJyY=z?_b4F(^U-M>Vhr4|ihp>MDK`S-!8lP8>J7)i)lb<1 ztZ9{B1P0tmrG3iEdc8!v9SuZWeX5KmrNtI7VMVxv(yeVh0Z%AT9#ok8;krgz+$7a$ zgl$WKksD?~lTRT`*6jtN8bG>OE({YK7%U1&-5ptXYJ(*l2ZgW}-)8Pqg`}>&^+TnZo97vFSW_y6uq}b$j3OiG1^cI9c-vj zD_DbF%V{Bk8>KXWwGLLAOhAx`42`~nRods=uz#$qwB9e4)&Y*sHJV&9cfn|Tm{nD+ z_TWPc#tEdbP+^Lb=^rYb=paJPB3aPEU+t7b+L_^wF1!QW(TXK zuQton)5R0b4kNp2M;pCvk?yCi_z~NY*PN>+C*HrP=;SOgeYJ}hEG%yo9!P94Bs<{+J1|%wH4=}V#pf3_i4kgO- zf3@_i+c)*{WDy9)5??p;VZ+Up5eiqXez4;!@jg-iL;Jl&{{YLdb19rI2&4c2002ov JPDHLkV1m=sUFQG* delta 1188 zcmV;V1Y7&(39Jc_7=Hu<0001qCtt<@001gbOjJbx004T5oQ9~t{r&wA5D@DA{!w6e zu+!>hv)2H6wY|&Nq2b%Sq8VaRSLKprGJMa+fPc*Rr?XrqlML# z=GH^iLwZELWbzHN-=%M63^t^z?Ykj<`oG7_vmyUoHS#}-lEz2DD|Z*gsBb~zrD}^a ztIuleqVWC;))r!B^`v>>7wqD&p$kH!RtshoZIGsa5M`?K_LabTn7FLR*nfUgS1cA#h{!<>8D1K@Q#ir`0?gK>tHcj_coArk?zECZ~>I&a5FfSUneSr=NF zJOO$lUfh>6Ty_mxh#-YgCNnB?tM-o0;YKCXFi0Opa7Eyv<1V8cM_VFrHS0`}1J(C{Ys@kRK>f`+C zZ}m_5_(xA&Wi)`oF-8m36thI9O_kbYkDH#_c)3xQ71!Ei$1^+2SgF={_ z&oX|p5+%cyO8r@3{HkFe?I5xYyEeyaGdiuZoPRi)9r?s*Z`mm_wdp@5J9g(=hE*?` z#;Sjz6uOduX1#*hv`MTs7>4!NmW5%CfHyQE+gHO}JsI`*0EJ4Da^v1cW?dnjs%K^E z!NdW;oa|T{0kSSE#JFJF6LC2yD*#<7?&S{%tb7#Kk?LYX7a->5;GR^KiL-r&44cf< z(|_|`S1~Exo21qt^KSw z_Gc4bgS31-m}ciOvapNOjn#+eDq|UymQgWq`JgL8ea!KPYR~o?CZ%O-FPXWn+Z7Nc zcInEn30q5P&v=wUyz00efCzB9saCsvyMOVFvX65NhFzx^7mh0%BEDN^GD;28I{>j-E+aj@d5cKD!U9YJ7?>qUmuS#yn#7eIX=>(n?+p8FA#CBG z5XPj+zJ7o0-pIiKfL@9%1AwHQj3Qggfni< z;uyfuk+SMi4$h@)c^=pC=!)~=ttuO3l81A-KB*Cund>Ah_$t`}^zL zs;$|5rk|efp5E%J*^X3KmBT4tXctFdwy%+y=8uSR?Zm z4LE$vGC*^Ev-VNtK-;XX*Naa1PywIdiGoaYLISa?d3Zzz5-cTWpZU{B2BF8Ar zN6>ZaP{dPLTVpE0^f!CDN=b+ggsRr`ro~$%A5&z+pAr5cw{FNEX+LmHY*+~|X++9E z-+36(B7-i5F!jNjPyKF!H468~5I92+PUIo_qgXlSUs=$O3q|YthZvvuK%{PTv3(Y} zl3DTDoQd1^L%ck1Rr^$gl9mz3DUPdY#>Ha3URr}kBd$t7Sou!k9pMS29!U~1v`FOn z@JOE_5xSmb<3Su`k+GQaR9Z$Nj1)P2781^SI@rPF%PJ-vd@?-a&$uS)M_SQBEF zR6wj@_K=3qT>Z_;=^Py>ao)Mnx%PZizy9**ECR>uTJf1k8c}XMC&Uqb#@wy4$8T$& zya^V?E%N@0xy6X$3P#1!vP{geEb!3oDMU?nO+qQ(YKmB9db9yv?N85rTMR%9dO!ou z6v{fSZcZI4UoAbpdz`ZP1wxGRqaM}K>G+q;Iu73-8ba=I!$xHPdv_)n8t09|VZO83 z=a+XR#}$0jAx+>EUn*Ya+gBItmhi{ZNb21i)nPghxI2g+v%5nvot27;ihV31%2i@L zmoDPzqK?RM^D7m-KI+53esHHE2U%LW3>FR5yTaza5K$^D$2aUb?pJ{ z`dCr8GTESXzIXPwAWZtZvu;&yL@HJEXc;*Kkm>2{2QeCVkHk*uUrr{mXsX)J#$X8KGbHqBeAJ<;x4Q>qM5E*aZqaemqe>=vPKDY!94|;n>p2C zUJv}*TqfRkTEscDZ3Q_t0I0rCbX%m<%>c46o~Nki4?shK^d&AVKe{9S)~S!($lY5K z-aT}D)f6`r=5B`COKDa#qM%k)T*q~NH8(pp37`5Ym?fV|$!HF(c%L;YwBS=nI7vcT z#S^!WAcB5GKsj>;G-Ez2sAc$zB3QEzS~Q4c7q$CKUj2_FY%d}Y4Tnt4_+W*tpkEik zk)fg8Pxf~5c<2{i=(`*RxH5a>@|hA~t-VQ_EE7P@sx0UPdp4uIzc=+#%fL=*vg32C ze5NqN;xi>FCA^YnBGL^X9XKO74T6M4M5C3gKpnRik{2dn|?`8zQl|eRsn;ZEFW%F-e&1 zwtl%h9=I%jRgw8l^-b|@c~?d?--k76v+qM*-+Q{G|MztFa!y20M*02ao`>hu?TcuZ z>AIfdK|sJh{k&)_^ zTNbBEmol=+JQpMXwQhA0cOg7ywuJqiF^gCZqshU@zZ!|noxNE;)6oHe?OSq@IhJMsncH|;fdQ*F%LD0c0NWjR!L^hfj`Joy~T+ExluM`1XV{Kv6wn;Oxi4hY44-| z63H5;_53+b8f1rTWxq?a1}10DQ%Q^~+<1`lC0Bo;^@;laM$JaA4QMQ>6|j<1Omn;WWV9z3%6 zD{>>LT4lkmm)8z_F;zi1nE&32P2j_=hcjI5(9F1xIHDH}1JhO?qE*l#TYVj&p${7J zg(@zTkU97l%j-}efovei+LU~g;tr_QgvRsb_mD{IOsV^Tngv<=f$sVJYTpn)-hV6hq0Fj(B~Kxu+e(rY8>!`{Z&zypnQS6M{Ovfm!`cANg50( zM{ge;iDZQwF#MBgUP!e5*1BgdfBvQ^Ud?pK`W-!WodEL3SB*h|?zye_=@~4EebJ#($XjbTD#*+eC!X6rT~72;xlK zCR3?=4u||RROuG4W9io=C3I;(u${I>&1Xr_MUHouN6^YczOgz_@5!c@kbIAsqQDV3 z6-z?QvN5N)tJs(5F~nYDRQpk?xVM3Qz6W7Va)Izb64eDf)nOr^37V3#eL(kQT0)D- zV@4*&IMXEk`$JM+1lJS z>V>xxv6@VT6GEQa-Rd3}1lZA6|JLr{F$*>v)mInBcFFTx2bP&t9qzo8Q zik8fW{@ti(K*H(vM&FQa_RpDL=LSN@#QRj`Ex5+w(!aB(p|RAc~J&M}2`86_z(cKwtsi}JDB@>_jhC;}Pq(z=aFnhx)Go-X19 zu-~d>%f8w0#iM1($@3uOp0#C=Dl(H*8o-Z%+4@OrVrSMPL~?qW8!>&(q?~H#Eb1Y! ziBw0ll16poEp>!C4$K-Dl)!K4(j**+mvO+gwFZ%w_H5`H3wwMv)Cswut)yZCxXd)` z7q4;6FvH0_4sjdLnnh#!#kY_P?s2|JO)Y+BGj0P``iD5wPw7kvN0MwTLzeHS;ZEd% zV}SifL~I>WM$*uaeF+@e6~y=2LrQToO}1S)4Q0QtPb+y|) z8)LCHR)~s$$0To`Zi_!bw)dg-swj>Hqt6!F+}Plu&gU%GOy#oJl!OAKUc#0llQS@h z?aS5fGLiS9HADGM4a9@yynV!3I5_$64LOmr--S7u348cm1e7O zD{o2&vnnSxIB1*S$$NCImXRHJ?2+yvXh%$CUO^qDLq`KMM|r5p35k>&%nHgP1~wW6 zE10ife40RFuprGiK zZ=+W*)t9_RAAKuDe(VLQzp(paZHeoS3yT_`HD;}xDq?^_ShC~n{IRm5P%zFS(fO2i z+ZP*(N**EF>~K=e-)=`EOtDuqy+Pw&Do~uii1Vv=mTr1bFm*R21__ZC%h9`Kl}mOl z{iflC>7BdijaWL!EgggBMHT0(4_{j*0-*>zH zfzw}17JuYwQ$B`$FcL1hJ6&?pk-%AWje1}Z<(0x`g$~Mg z&DLTpTfW_~eZ{L^SWWn6VPufKyV24jmSF6%tiyH>;rCW+!Q4-F&454siJrT{K?LZe z{RkG=2TSWwS$M9e7S{#mX-UYR9|96N6)PNc6||6Ofqv9VG@&%)QrSL}#OBXL?e*>kO}3_qs*+g#WIH#R9v?a#!b{_hBf`ftY%!Y6*aO zX=WF-_P3X>4tXd^?^)6sHaN@m%@5wjnD5KQKym~iLORsYcy4T@LchAMLv+>XBS6QK zYLHrrQ0~7d()ISmoTWk<@eYca8pmjZ#l_ zXyxA2d7@mMN_fB`$7OuDi$O!^$lI#l|2dNI)URtK`IucD$248}`SCGt77WT0d33%f zD(r)s67nw7umXzQZe|-BA5RI+CA1Z^2C4J34RReLb>*4dK9;IXd_fLMD6zElxpj_qiOsrxcIO4Ba+ zl?N&Cna{0DQkc8j2UG=^t|79?$WczQ6Vdd>*h9))gOfwI^ z{vGk-fVmg=LGo8v4Jv1htHw0@Xo3L9M>#skrB>^^`cIykaXBnniGKp6MD(Bpjhij->OiVq zhIsu)H}Yl+NYE!fY=M!lgc)gu*0M$QD-R@aQSDYG)^&^4Xm}dE16X@mgsCz<-nBk+ z!0+2Y$rGO$=^WU%%P<2c!ItlJFUuBWLN`EK?>q79*Ko2tdv}CfD!Z%jBs%^=bc+C6 zd+5`N3c-Wv%4_Y3W1o<-PDJuMt8O@)v8lN_;IGnNsb;rD3?)o<5hpxKzb(p$X~twM z;!G@24uY*?l?yUu?PcW|Hm#u(G%;)?zr!}A7u@7Py{QZ)39suaz9ZT-Yq0~0sf(bT z{Mk8s&2Dl??MtVO@U#*UE~qCh7NLzS_=n1xl)$X>Gey@AFGLN>9;`0CpY(u#^t8K@ z5eY;JuV$U@=tASa8y$#m2oOM~BDL)|Mo2CeKk($cFOa{@15(esij%z!839ffHBJHd&zIJl-o)b#9m*4iGg3{ugG=FbeQ0%Z z2_N;ar@+UQKR?>Ah42LDbrV(b%b=;-Z9#9&A|D>_AB#Rn|BftzcJiK#`b<%VBZbhS zQ0s?^^lRbcZ3(C2IZ}|*c$R2rJ0{}O2%b95Ve^q3j(>2X&K}MTlkc$T#jE;a_fe+5 z?k)_imtNOa4BdE;5~eed2<89caMTip~|&h^}LNsO8> zskER;Xah%X1ODQvl1ZahQEayBr;eUUHOb+`fVYP9UXpNja!iXKv*f<|@jnSm^~%x0 z%mvqVY0sB0qKjB=Xs`+7NnSd2+7=tk*A!H3O#;f84``qgcjT>?6VR`Iu~ctpu34}F zH^t^wLX=Bis*_64CGuvn=++}DvVMsVluVCCc!ldp6Rl=hYhV|k^99iXMu2AfychYS z#FbNe(Fbo3iddwuH)^$Z<*yT5ReeQSX_!I8*TCb*EpvQrN8*71{FZ3KdEfUB@yAvN z*tVnCU?q9owB=MDiA0YnTk-te;g=|~x0c*!q|DJHlvG8yM{_QrD*^JiLP9EJ^eQb_ z5^up;6aaIFqscRQVVncm6t%ibh^ZGCYgX`=!X91JkH+;eKH0B4pg@XV-cNI_J6+}# zkKTgn&b>)nxLy=hGF$0kG>VPw*?wu`$k;u-4_ajW2=#8d)H;Zg zT#uscA7Q?p$NiavAu2U$**eHLH&2-u!z$XpvBPG9D0plYHy#CPR9a91zhNq0QUB@b zUpkvgwpC3bxKce}zouL$_~TXVLidgC2iF-kuZ2P$fH-J!Fk~g=-eCrR^U)^xHJ7@z z1(Xqun>n-{vQJ2#f5_$(c0j2(OcY75F73+zd+BuF!iU@#ok9_@8>q(l=^m5KgTJDPD`qj5wVH`wHwA8wxK5I3+3NKmbj zp_zhWIsuYjT}Xo3g?TZsMK=X=S~xTvL~JBEoy?E2cXv;>oliF*hz$UAU5p6A0R4h9 zm~?l?-H^ii8wm0-PLA5pY3YeK@z?KC|JjU8D*KH|fSSvRYZkWp-sN>&L$w@+f5R5|JK@}kg{H+! zbk*I|R7Hj1n(uA`8$c~Cl;c09pA5MGHY0MUS^O^k4f3zm1p+NcpM|L#U0za57Qfdf zww%CnCO_9qb?NNtv(72E_0E!$3v??9*sVX=7Jnb4zxE*N=MGecP1lcKvT zbkV&3C=rURLxKDQ?_^)q^}Dgl)pQH^HBNHYLT{52oxL*m@Wh z>8AIW%p1F}Iyi9z?7mMWW{v$=xUDHb8JtvvyA>AU1$zqxdyfCX(F0e{RcD&sSJkGH z(PuZyOj?TYYm4DG5duO!x7z1l|KjVp9dVo+Dqdy&BONPP)uc>K87=H2ohPMOBEb(J z2`fa5Pg2zz@@ui7auhouLUjlD_?q^Bd(ushO6&S;i|{M}gDA}sqN!&S#J}Q;6+b5a zR#hj3D?80H61UktEwax|hlX7yV>w zEl$@BZCY4;lOR@FC0rvy{qAsZ+DSDZ=yEy?b+!o;o z=!AKuSAwvD0~D!zi@9hxP=Qimx$Day(A^B!>LG!-(bC#oHzKN1Q=-X~i>Ds_gd89w zuEw$;e$L1I61L=g|Hvcuz76dly$JBe{MAp!j%?C*i8I1Im0&)6u4 zeX31rn{3XbxJ8vC^4RJLiyUe$zbwkIXa3}4T}34+hM4mA1DfIOF>%_q;xWf|ko$&c z4{A3rA}JGP;qmvvPp=2i#2}6Qox%E8s7{AzAnQtI%I;LSPYfC(lPn)LbocI4LEbRSJ?6Mqsg{f zI)b#Or-cUnw{LHxuA&eNDisbB>Wx<|4dtJGY#r#xAQb>7MbTfTzw466yJ9LgJG$>~w;y%(f!Dk-&YzMQfNbiXa`O2r!{!1qD<|4Xg8-H)eO^Fer*b z{ESCGffOD$IQH!(O1D)>n5N(Cc66W+lucD?Lh~QRRtpRy`raY5=3}y|w)D5Vh$!ki zjg^l;_0Df=L#H^Chvv10ZsV;wt;fX>a3E9`fDeo00k|M)6A~+M$``Xh8om%5W~cfrvy% zm+GfZ>WdPhCEiiERi@tnEc!V()Q8(0uput>L9y@RjIoK-Q|7Ux=7!?PG{oD|G$usE{v&WIa*@!m3!TTAz@7B$H2(j(0o`1D2Z zzE}nRTZS;a%L=3#G1Q!^(H+H^6l(%TlqaMo#Ye`Lg}oSz-l){y>z5o0+07AegRCx+ zfd1Zf;-ALrk*l0UA^;0@=HOxvzhm;=`XEU<`}P~x!4^ujA5r~SRaTFVAXxkIz?hT(gXT| zR!F_v95&O_te#gT-(Z%5)p_ccYeScU9F5#Mbc5IwIh4B5VFL}+(n{$59Z#q|lNbLs zsMULrGzoD!6;l>q7lU?4Q;Sp_cYksHXYEY;VA3&aG+2lxcQvl>3wC^{ts$taY*LWA zK#b#hjaZ!o7XRzP(iLG`G#xy>CsU?1i1=6AUq9sXr7r&Rke77BU=eqi<30D-&X{>? zh8{g7-M=%p4N`&n`H%o9(LzAPnBd!>P+ zD@7X;VPb()n7})TsC1Wa(-(xC%up5VNjQckOc`LyYs5g==Mcia?}_=BY(@?RCg@u) z9s|PYg-la1wQMbeNV*feO%S*(47&@5vYcs3AE!1sO?s19{{rcFF0y93kCbc{z6ARE&=dPx`hkLBy<0 zor$jRK+L%I0GX}2+u^VvU(YhVUw}`F!+;3J^qBfh#DeFdaQ9!JN;nfJZv-Bm&X<#= zs3T$^wqq$%B+29Zag2hV`6Q)A+y+Gsxllur0+0rDnxobgqvlmcoVvj&j!m$hJ;J)s0(uY@Dyckj-G z#OIWLASSAii;4&5Eg_b?5f|K7uE8&#kVy7q2Q!K~!dPLjk<&G%*Rv>6c+p$g7p{AR zJV7<@3SR#O5~8R>RiiEb8Q=@At#Ye zEtL%nOEb_r>I!{}`^Y!dgbj7hb?6hzU#wb04@H}+Z^pf+EVn>BMX>uc(rw=9`e#$n z*D1JP6^rzVxnP)%gNMavEeD&MHr37 zoUOW`hJ|Uv@%*e|Re7f?QelightXCcp7x)FJ{Wl-?uJzUTjGENx9TE``(n$bo5;IY z;CK_IG9&+7GCjvrE3=!A2Hooayp43}J$sYG9S3Xcwr%aZJz!N!n+oG-5bI{@@`iY3rBmnOM&L&{pgdL4k@HPN60$Cr9dZc z^1ZPhJBWZlxIADbHda%WZ}b+osEJ#e`nhuCQInO<(LUX!plxmmIlQ^A_L8@YoV5Qh zbajz$G;&RI1@$YnQ?^Kq?DWWE{nV2FTC#zoJ>jmjHBgA8#uu6^f{r{p^hmqD|E^_s z@RNq>C4r3tVx7;KNm{Utba%y6;+;&VaYx5D-`QA|f-FI*Ra!!IM7pg{4uswWoym6$ zErqv>Z$5M#4-PUjsbWVX;s_Z;t?yyB^*`2=H!C6iUc}y&_EScDra`JjeRepmWgF)l zNgjxcX|2Ny6-WveHCVrffp;}{F%K$~H zKqck z(~zGvwCh^KiCX%i{<*)><7k;X`+u^Cr2kK*0T9!s5QE_CtfaPy2YVI5xA|PRH1wFX z%J6M>j?j8F_IFX14K>8P+76uHoqKj>xP^&#S_`~tChTmNT5niBKnbsy7jI9b;3CK2;sID#=jiOM?rN#FbaJ=Vj3K)S3C@zd6qRxg0Dx9jieu=xWi#!qiV?1ypIP6X@Kh{1QjhAx;Ecq_xZ9 zfiaD9o?W+AR_`3Qa(}G+U66&XX!e5-lWmSuNeq1ZzVGeTq|mFV!jPSi)osXKXatjL zM)+~dYdWA9YfCfC834Oj1R8@hi)R4p5|yiFG$>)6ER|%uva2w^^4FX^BCcDD>MPqcD|C@}BllNNLn+Tt z6neMO>u+y?L5M71434*`$PM#SQ@{jKOGlxQ+Ffp1vuW73cT-$zlP766ZU=pa-&ys? zT0v4-n3%P`DX%rM0&c|CgW6C@>w1p|ZFuJ!@)@D&`$p`b;Z~f+-e0MVTwSYB3#6X6 zyV9E^BnZTQZ7YS4*1DU60mIQ1Fmro;=LiMkj$IWdPR1%pEbo89s69x#{oY8XQ!VPQ zCjMnVEr%Z!RXqoS%h0>tLet}|Ro>$;6RO_3BDPLEx~#_*--o&M`bY`YrP^r0YNTr5 zNvdDKlW&vte_1t>2ucISCUnlYiBf>3}rM1>)cmo-!B^eYaadCbFTMpA}KW z)L2a?CqJnK#bSETyrPtSu@UDI&HzBpFsW{>L+=*em5#0ho{;rF=|Oa-qxBy@LQ zfKsqha^=g08sidv=G4T!mv-oAZ)}EGbXD6Z)ej`{v2Ht~Ij&WY+V1LobXkb~$!w;? zc4!t#eY~gc97Olo%@i(z{=hZ*UjYak9d*lFP7xx~EzC)GH{9ftXcZc!Xv7~93%}d_ z(Hf3O#ZfH9Z`q)1DNEz$&43U(%1S8P()V}QhtH-qWSZ?Z{j1?IMFQtgxQq;=x`&Cy zs#)xLY(~5QT3}H4zP9JQ?4iA|Ej22;tAP{>@gAmKngrgX>?4(0OkaCWF&<5PV#qHX z0^D}zi1?;+nAa9m_k15M?gy7yqGh<{DfCc zV{(VUGv^x#QkUw5Vb_UHAI!dKp(0-|mypj^9Ud5eIiQQpPd&CXbbPpZOmJ~w5=lw> zI1})g-B%=%ZHXE8<64w!sQmKSeu4>>tNv*yrKL}W%*VcgN=$%0AsTd%?nP9j&@Ar-K4VSUliN1)o19 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

    s!qqC&z% z<;G5E%w?mZAshoy?*cAfEZio8LeBCe_sgN2CCN~cDNYUs2fO>aKtbXIiibidaPNBjsHh;d!3qN1&Vq$#AC=#o+GW^ar>>&c!2mSVoxK zLOd0cpZ-Xq`~Z~Gz&+=(jo{AN^*9Ib_q((3xE3(n2uCCV&{~Kn{jKIB<^ts&7EIj( z%cjOVH(q$V|Gh#3S?ybLt3gm472Jz1# z%#n)Izsywb!$g3i*RIPNksXzT>2lQIk}N7Ek8r|q4u|DL`e!QFugfb(ise`~#J2PG^PIrI zB5HWJA8=81y6);o5!2MbVB`qWKUKLi4|kJc*-V9HgLT_1oe>@d-OjPcnh{n`uW%nI z(*J5^SRtmVqT5eS|3u|ZJv0V0of}v-tyc#>#11ABXA$A#!SRgU5@ey3{+|6-+UUOL zMo`i}QMpqOlW|=vTY@v@r1k{GOA*eQny#06MrcMNYudlp_IHdBrhle#=O#wqPOxkd z?rdF5FPI`I-dThrC)i=MYLH}*)*Zx8Wj6C;`^o7SS8nK`B4ODgAp6MS0mVCuumzHC zsh6%UkdTav(uVzS|J`c9tW^USre9pSk%s|>HNdig=L6!|>ww~+2silTTB9})QS68P z`7S_FIEV)iw#Rb=ePA)S6^`%I=SbsLgaa|*n2_S#7{z`E3dkeuOq@->q;lgRE)Evm z#j<(iQb3AnSR-Q*2od%#Y=T9t0{)9bDE1%zS4K>vUs$=JiI(JKPI+#gYzM1e5g!mp z5eC>a9IZ6wkYWELp}%1^{o=||o;)}(ahK;7v4Y!{Ar=ADvM6;*76eDFcD>ZI>le2D zS_7h1&!k^mIhu!-Z5NS_TfrrcSV7+p5v9`plZWDYEj-EydpKisA1lfBR}r2_zqoQV z6Va_x!6lApI|u!)UJ*1E(Ksgy>I7%p0KfE2w?9O9I{g!sBW*3TUAXdywu2@f5JT~b z2!~ecTEXgh%NZ!NvR`%VU(+IQD*Y3cqb+eT+D>=KcIzO*8J--`$rF7#_mE*c z>7S?^&BcJWdvM8i8Cn}9IMK-iXSE{!((GULs_o^#Rp}R3j`Cf&KHBb#Y?q<6p-iwt zCT|^DEzSP$Hvp_~N%|)$M{^O{T;dUSWhy$DaFf1+~4C}vbPBGWCj zf!Cu2XB@z;M)vy@*OxMp{)x(QljySuG<4Utclv;aN&8`Kze6HV|3u{oTY)8Jz!d@Z z7Mzig;SbvXfy$j-h$q14pMc9E>@+Q82Sux$|%N|yeL{WH?e z&MGP!iRqY;wSRKDC{U%pWB*L$`cbU@;}C6EleHrxbl3(8sqG+Nwx2I0%*^GXC`{5e zS(}6xEu~+!pF3~_mXf)|4YD?gaM_c7(|*pt;ZN0Mv>mh__R95&;JsNffZ8t@@{4M)Gg@%=(?Pdsg^%{~j84q7D3x{hvd_ u{z@D8CHp^whW%f%|1)UV|0(+?rT+&R`Rl8IHt}@;0000K zdv8uY-*e9I{Qk%zkK}RZec$ivdgs31uh;dwLXldklwc+>0RaJ}x|)&>0RbTBzZWSn z{+l}wcGd8209PGV1%lE6<_!V@b^>)Jc|A00%SSMsSvAhh@7L=)zu_G+j~)v?VSfB( z_+Hcm-}e+Z+iHh?gI|Oou2oDx!>?C0$SoCzE`wilyZRf)jiI5xB8qX}O8@ zyB@X@VCJL*wWRmtEjC@UvCfNKl^BbJ{Jr_Mz`5JAp8SUI-&NB{g8t7L1W)d2J9@a_ z4{GzzwI>FPi?e+Y7vB}%U6!{fa*;1hU$%UJ-8Iqy&{T9X%SsgxPaF+=xDT~cpFPf1c=CuMh$eOlsnLq^%3wQ8ee_(0X=_hK1jkN@V zc9JvmyPo{u`Oa`uj2*p9sp?sQ3hTf?^OQ{U*`*zP;UU8t_>lTcYIDJhhM&z#R8aGR zOkO8UTX)nw@gH9fysj>z{TgTGE`J}N{>?K>Z<(4q7|%Bocx{Hk*0`b2+0AjWL-z@M z7Ui{A_e``NC9T8Kmlp+~=|^3aiI+peZebI5KNQtsZt$tqKV?Oe=0yX6kj~9J7=WwLZMZ4GfxFCk@6{^zoKn!Lo&yk5e(cX8p;><;>72}koxe%is& zjmkKMYUXSThJ7Xih1M%M|Y$#b3B4BtrH#|53GTM5?)u!QJU#lyB`K`C%tkJBta#(t~Zeh ziT|d`dINx;F8BRpw{P4Iowd13q(P*cEY62}fB$4PTtXn3-p6(!UD1QzKhNzt&Ngkg z>mc^;6f5_3wTPmiP$;!6)G!5lkHp{+lz~CJWm{U6_b!6ZPIG^`O2zYmi@m+oHcn3T z<|(%IOdx@P;h+0p^Op2S)wMx)y#ub-6A^c2NQz=mKnMZ-NRKK*!?<9J8HAk%@?(I! zh@g$({wZyt#td;%MDC% z*qXCDb0%)K^PBhq*4du+K@Q$J6a`YN@XFuIM#ET8JKC{?=p}#2~ZYqf-9z zEOTX-%uj=r9igUsb8!{2BgRM}bSH`LE_dA?X2Ed0*I>|BEda>C^Qxyn5FWt*mL;Lk zBd9(3GdJMA#!&WQaL)VRL-i(*C+V55y2S%J5B)Hc)u01Rwj4TIlRL7P@GRt+Q6fnq z*#Qf2dz^K9Kzl_mXi%aYi~48crfJ`~1o&4LBic8p^#B%$E9Y6r_&6W#I{M(lIufZ4y1KApVv9$~#{NfHeZcD+`vB+JD)M>a~x zwX91$MtftK%O8cii6Vy8bpyJZ!d~BbwqW4}hJJ7$ZNB=Q|2LlGItGQBF?i@2BiLLw zLD>F%ZQQ+^3aRF!2VkBGFUM9HpqBYwJ*DO%zb9=`#>*q07`jQ~6P!B!<5hv?gz%VW zQo5>i2&-cxXBB(Z>$>@gKfh1mpQQz19n}Zz@uBJan9W3+Y7vRNgUo-E?r=coZgY@`k*E(jcTxaAwf2H7KJwRdsYC zP6>x(h1GKf&?3u38BwBGdj0?8%;+nYQ{Vt77S^o3&lhYEy(eK3X$r{71Yk8%J* zS{b=e9nwEi{;vEvJ#G9r+TP=8PXHJ&?=#-Wr+=`&QBureLFSZG}~1r2=Ro~*4|>;(Z$y}cD1z)$!2hLZun_UduiKQt;_ zPb3&2y&GJZfS3<5-v2dG5G5nxt~ zIu%eIOdNvUP~jqq5>C@ira}M_(@!3gJmh8q*el9rZrXNLDexWYD{WDHtbAu`uvXuF ze>Dt-OJm7{=lyK^8Y-}dQImq2SgcNz?p;Zr1A8wF@e!Lbu{11D>mV zx=r`SP^>1pk0kv8`JQB*Z3(G-cs_iLlYwjHw4*EDG52__NW70v>EKEA>#=t70j}|o zd(q5*N~`OGZUqg2C$9XW-K28Hu=cz%+MnbA~m4PyK7gmJC|PM-C0s-BNz zdT4&Oy|iEgU6+M>U~fnAIyIvnUEcO;Tvx|!z2l?1%lkSWv_{;zdrLGLEk^^-v8`c7 z4I96nS-iaZ#>glOmruW5UmTCL=?~_C?b$N3>t1^lWdRJ9KwJBnUo~# z{C2_px8oS#~X$0qfL$MH&o*!^3Wp8ohV_`&gk2*xYN z<@o`-$D@zjmb!)k_KD$R{sg{)u?*bs+Lk-SfeLbM1cB}^ZP{(Em!v+ZTQjy1f=mP7 zck4~PiCm28jJ&7HW)H(3P7B9MROu0niR>g`mT14xVnr4_!2HXc?a@izwfX@+O&^H4 zRoT1Uo-1{3w7yGeY&Grgk5)tz47*1GL3$-4BM74#DH=mB7;?V7=UCT2z?xKSh!kv@ z2!LCJHcEWN1~S+|(=%jdWt!2k396n1Px$ztRSDsB=M{Q&dyfbk&rfep3WVsOeD5N^ z5V_jytFW4^FeEs?Y;Mkh9OV>#3OiH zuq-UbdXdRwgQ$b@j})F&h}A*&-~8I;Mnx>lHl9)eL42GJnjTp-w~c070h|0n^C;%# zb_&L;l7(yzEEe8b@vI5+!wU6_SEGrRCNVrg)A<)skbz5u6$5-?`W)zyJrI@innt8#Lcm493@lXPtUjd|96j@HvHW1eA(+ay2F!KMC2(F`)es z7tVFCh_qks3@?-{FI}T11{r>=8;Y&O&_C3j-Ae-zdD}cqqB^GEf@s!ZRHnw-!(m;n zq=KAb&OCL7OoF3D8D5d;XkjjrvEwZ}WNW+XcfKv|3GD&ha(WAa_nmA1Rw2zx_b5d( zfmx!;Gw71WWCf*=gPbpNCO+64!ZwPij!=xbr(9!HjwTgpNGe8B=|*DgOF> zl<{g}+B5U6pjIPe&I{wY$CA+Eu1fp<33~cvQ%k8)FT3Im#mIN1rfkOZrZ-g@qAARgUVWNUY|}o-Od#I!=XQZ1@e!yD5vs69gJ3^6B%;l zvj?^P>YqOKsxm@ONKyY#yQP0)z*XyZ5uL*DOnzZ?RneVqZEQyUC3{aNA?xEXQ0s^F zS=7&pk*w(#Q=I)UWwfSP2O^ziZ=4;F)Ms~KP!ePF6kvrG-oeSbJ=C5ZrV86~*RG#1L_p{QO8q&=}q-F5_ zcby7jK0T4F-~R-o#5R~>#VYH-G5V3rLm|T{kB_A!pRj|3pqFW})h(TFbDq~_&*_C$ z``{L&id1z%4vnKvuej_)RTw_yvs3j4Cb&F&mPAs^O2WZG-gP<3)2ld~mD`Z?8rMw8 zy)yd_T3@)FdoZx+>YACuHYfOewPeQ8h<*p7U>{Weqbt^gT`_TS3T^Jo z8s?=JQ%mJ%DF_IY1A*>roJP%*H%Z9xtM3lPYZe9Tql;}>bRkL(5E9W z{EBAk*sr(}Nfbm6ws;oaK^RoB4`&dtU9-@TfRnWntSEP3!$U)f$Nv4JTdJh90+W&j zS3iko_;Sg1i_QQMHLk^Av6uHh+?W$#U;6Z?n_Q4ZtquAecjjL1#2l@`F`It8l`)|I zMt>XL5ztQWVJ^Smr5B)G!N-^?gE6Wmb#J`HnwLF*6)1vxksTnv3!Nj&u zTc}TJKx?RyPfuK$OYQ@;@4Fkup|Nj>ZdC>}OP~Myv$K*W_>_8K`1}y>oyaw4#dV@&%bf&=#gWb>nn3V}B3&_vk~4Z`fr_(#7#Pb%uhHEioI;#~#l3jkM&B zRc|@y8iq`_+y3tL7H8{mePMm7yWx$dJZ}@SYYUgO#vJ8a0b9HXQXE_X!4&$WhNSg% zdd7^1iX>@s#(_ZDM8R*&NjO3X4DkOn@LjIs=kNmkC`5J^F7^I8Es7qnu- z@KIrfCXM-q-cVV|F+BfP0i*%WHByK1?^}FxhB?@{!O2lH4^40Z2f*8C+()35O|kdY z*{u}PHjn1!Y&YETckOEnXZ8p0-Q!Ja1_+0!~<;J z3^34>qzW?rkTB1qEc-qO!|3}V-PWcIpy%o8cg}i!14Hk+T)sEw?Mpwx!YzrNhoyGt zGRi1i!<+>!WR#OlE+sGYZ7?KfhBRt0FPvmz@PWGkYNC$m0XeH6rwHb<*mQ<4$N-%E z!Q#pAIwk9f4y-hTBq;+-;pZ_PBDd$^FUeEEtezq6_x5P&4`mx z5P#!)a&EwiD{?!2mjENFVu-1aN02^5R8C8%DdTMi}iLj zBZ@rb(SuV1jdxnChCf4h2i{5~iH$oL26O{NY-`=k-&hqq6lLRDk+8Zk=^AxCr1A_N zd6{G6p-h0BU3yARIxM7K!l_wuEjn_GSFi&=FV6ox6NwF;e?>XM-y47nK2G2;JDoDE zG9VQt?+~~Xk(a zLRmLRbMdC%GcA(e@*i^z4&Jn zHlMzKkacJ^o*DpXQ)&ya3=7uc3`4d(AHQYV;D-8BiMf6mhoh7to)wXd{R$_AKay_) zhZu9u=Irt1rv}OYR0q9ujdIK7ubvl;jN4&f`ek{-3xyySbhhRA+@4|M4X7Km)&iv?hz?s z;Wyi*$F%H6%gWQe%b7-xBnwLD#Bqz*g`_Wt*qbEplR!R$wo}uT9vWs1EskY?`Ty!u zGK3WbRM8jega1pD12qlfi(~q7N8Iq@KLwdAZJ=U-l3WRV5h=~sFl@&hPM@E8-~K7r9#*BW=;wrjy6tMf8jA{DZX#j-f?yx~;|<3`d>qBH z?b=ORO?X2&1}Y$dqk*-gzojLnk0;Y@bSo1zHNxK5MKf? zXtW|hVyOFaK4sqN$&ryx1iu0|;!BH?JAzt%?M-MSBbc<-i3Vz0L1Wo&04pC?A27zj zK8`*zdAk~Z^^4AsaUjsT)nLWtHvbEwTRfe2@uY2kU+bu_8x!G~ zxWd!2jus}V%EJDFL%7_-G&QUU{eIXgGD6f&w_33jD-f$kWes(z=#rz3~u`KI}n(Xtszebr1yWxh|&~g(9Q$t;}C-S zB0A39ue145NU-nh^3*QKz=e#G=PW6Hy%A#)>zp?D+xBf^{ulP1?om33IahAwQ!p6E z`{UjVMQ#wd_UkeiWi^F;BM~_mk<&s%AsJYiMAGP6SQ(SU4U7qd1Kv{FUa#=A6zC*# zW~P3#()(#&5Cew^B$BW~4FUIxAnJZuqDSn7G!G8_rcw2B`DjXEH-9a^QYAk|ADf3h zj_29)1XH8XN_)@(yfU;kMq@HLb2<;Wf@$Hj9>equ?Ys)OpRh2sUY1>Q zGG)2a1x5PT#OQ#l;)<(#l>xk=msFNZg;FV8T|#3T-3<^(QfJ_uZGM8b5$)Lyov#XC zIQ8zS!IWpq_=%*=p+Q=!IZcSS&ED0DUe4F^<{V`T^y9ojLf#);xrNvYk+1E|TMc^{ z6~4Gd9*y%{t{?Z{!tpwO@$&x|9rtmtycnF)e2#fi7eZYKZ>_%8 zOAX;a0>xA0i~j8wTTSTS>DTbrHzPIti%WiH~=3j~Ty+L_vvK#z(a3i1gNF|L-!6EG_@VRLI@z=S(yAu!cFtS(ja%Jp%rS*lqhdKzHc^t`h`NYAYyoO+XYX6td_1MNKffZ$?5Gf>KLQR@hSkKp% zYk#+JsgS>9Sy=dw;sG{MWJ2m%@yyWDh}z?3WOow(K_*;rz&>Kw<55an*6*U7wDzlFp4(#^(Fboz z#w&cT$RHQ-P~qsF)^NOJ-=M!WC9mkN%(T~ZZMNAw8tmJwn*%AI9goj#8E1IOo}QUB z?HKzN1TvxU- zK2`QY8SQ$Q{q)5OqXM_$>dFLqmEC(_-yy201R>wOM4w3bp!It`FB$HB3PP=DB%s1^xN&7T(`uxx^fMM((Y2P`1y@2lqdrDf8EBd z75tgd2^#`-H18~LSbu((KnVI6Z_7-}?6PYF7D`9Q5(GhwzrG5`Z_;u*bV`VPf4O!a zSd`2vjItw<>{&ILp&}}?RBpT4Ww*cSP#$cIaOu~7f+K39&3BhhiHHLNGwW^eBSGV$Iqt}%YpyTpTfY;{cD>jrm-eCwWct}9f4n;!O5^E|C701~AAKO1&@O#)I(7cT zh03~LCYMwYLKBmyWIjK+RcONpfM_+Y+w??6da2sFh?wvy>VwfCH5GKU-LTT^81w8s zQk5z&i66TANpXHUZ{(a5jmN22m7lBag$YKXPr}gC!2|4Jy!g0eK~b`2_?wWwbLq+C z0i|5ft0lIw-Sj_^b9`s>4T^*vp$ziK^7xQvW3~>$HvFC%7Gwe00cF@d zd~JW2WrMVcOo7!cuaH@{)%=`bNCqN-e>{&p&B+(C>Uc+4u@VQAPMVY1WUP#$KP3qE z`zt*YZww?R2fKS5VV^2f89lSJqV-NHKhbU^^$*BsEE;!eXz1qYj60C5>VjJ|pKXlK z!8)D%E*XC$7q<^R6F+9u@y0TUoXYcYou;5(jY0|7wt^oFEDd<%AW|+ZpI^{Q)i<>b zk^n6F2_bvuJCmO?s&Ch?&Uf&Xz)RYVO|i&ps2!Z6QTX-i0cSqA%?o3XZNCNkH0t`Lm9vl%y1_(D`$@8*R26?jmul;k>Jm#i;~fNpPCG(~hAgm$)$?R^uHdZa5$yn0B6Pj1e>& zoSSjW)txw9H0>rGTNyRHSYQ+YT+`(Di_S6GTmPQ8PPr%>0BjVrrVjkkisecX2s>oo4UDyiF<3h~or#yN)*-8uIdO-;*KC>$HUj z+O?A4PKhp*1xt+*BJo#g5%ldeQM!*tZl{!hVwfF0^Vx_5xO-u8C) z-M2fv>d)VC@dq|8l@0o>E2vUDqor|vwlP$4GP;^o`vH}nW%eG{ow=_;jWHoGEF;*a zfeI1ZmRRY(x1-IU@P46QstqG>tB_#dEBDo)*VUS7^=5q&)&%xW`mvGZlF{Vx!uT*P zqM@mJLcXJY3Fpe2o!6+HxZpG{w=2KUW23$6AhBz`upjTZRQuv)(A`hMYmWE&Kd)oD zy>T)_#&;wQ#8z7Gx4@A=0I(l4u5jJAd)qiK%XX$nK*AX4caeS2a|}KLQ>beLu>NF9 zd`*u^lT)j>oWx?Y$9%Zhm5R9#?%Tolcgz$X1-oS|aA{Rf)-Kl`nBvxkb}K5&vPl>f zk^fpuo2Q!oV*`!@r!^n`m7DM)T~mY2ZOedW!l~hyS>Q&H`w*t1C%TlXU4o|ahrw3D zmGJ{X2t^E;T4t_f-%!(26t z7?%N=xk2wj!YYi%>$;(PXmj!V<9A+U>YVd!OlEE=R+#gb1MlIk1$RBk*|I(}T(6e< zqP$%zNIu#OmhD~&E*r2aZA<(NCrDJ#t4!y@;dmwA*T1QOU&((1n}P}b}Y0JIGAmOoJpE>Fr~TPL&MuM~q?AHTY~diI+? zB>fOi6Br5+`2B|%==QieCJW5rZ&+`EP^G0XSYGY>JUFotV6`1vedO@jJ^T6o*4rPk z`vkG0!S}xlIlnE^jL^|?v8$jG29pNEE|2k6@Z2e}>p$+u2=pEXta8kzr zN{awQojf2VkKlmZRTJqAq)1xZN@uYrhhY6k84$hEAp*{uu$ za#AqV3rX-;)ca0FLR0N4EttSdSiw_e=e=SsA&C`*2SuFKlPZHbgs*Hm-tsY0^r<_( zfn4p+G5l>-3%i-Bbty?bT#tqZOr0_>9m8@z;Zj1mSqvLDPr=CS^#36oIuXd$;Y$e3 z5o;3)g9*z*fwJ;;ae0xSFI-9z8DNTcu>PWCf0dk}0YJLI&mUg%TWht_`lV(je!v%` z?T4Fwd!O<^Xw8TMaOzm5sTC29>xlE9mH7(C0Iq_@{R2kB^J`{VI}q+-sjlyiZA~k_ zKulmkFb1|D_?$cKaR%Nf=FqLR}PaQplF}JVf;|`S@UOJMKupqdByP1Ay2iE|{HiE>Ej6LBM2*S8_T)h#`H-z@}ZaHq_y1d9bP}loX~*18hJn$$@rq^YWYB9z090qu0htC zMLDx%!(HR<&Pq->xT5=2jBun3Bc(a+KD6SQZh!aF&)&LFRJ8lIr=QGRodHF8BSk zPlQ2QWD={>PD+uM{kvXH17z`jdCt}3h}*BTS5x(`Y2PGIGLfWu*xVH>XA9DlE`t`S zczC6V9WfPK=ouqoC0~jN3i;a4xQQxdHH?Y@K#f)rIuGOZv*DzpKqw64lw-WYt@_bF z;_IK3qOqzphk6eLCSs^;i3ip>mA(w^_k8)2Qmjlic=sUebMQwhEq@`aq~E9OOn;nd zc;}9_Sl2>#b+B+ac0BfgUZZmGk~2lDw=q;!u%{{Susw>!eqru*I#=N_k}((3^ovmJ zXC?iUCerFVZ-kNPuQ+W1G7Jj||0Dg2+HPR5r_5B)*dbO;?uI|{d=rfiK*+c7Pw$XZ z4p!RCEPHZ=t*Zyn&#JQoAp!5YP#WQ&hIz?WXvPtb9BkHU)>vwyW2?}-rZ67(#`(_Vab~x!g z-o$T5-JuvU%kAY%(s6tsP>F;R!lFYhKF+*;FdMI-s^_5wC|(IA`BYA-?N5_3d?xyh zv?BVGOdb@v?hBmGneR{k34spL@RkJLVgCZLNWW-!A&|l#naXHzaAs7U@Bg_i2Xw7R}PaY{Eb2T=L{qo3ith`VKHudbQo^NGM;WLm?C8PA$h<@#;`mj`GizaTtIXP87 z9-?@SqI63OD70$Ifv*omq;5-kfZ4Uo#{3(mmDTzTmyx~`=QD5nAhOU-vMRPy9S*AP|lQWWE*y3YR?eaoY z=&_gx$V~$+sUT~{jQ{aDzOILkEj9||NO20?ZR+A`HCZJzQiOCh$8Rgg^yEO_ zJ?gvf5a}?v`l2U@_#b(C3xRS5c$*Rs%#k8yx%#TFkx}u5C=|}I^?_}dxjmN2Uq3?e zAbx*KP1F)^Reu@~jtUiw|4`pAS}|&>>?|PHKn(G?DG_HY;mgY;>3z5%-}acQ>Tggm z^~L2*Fpb0*Gqv-xLi7d^spTmA3T51br%Sl=_XDf(bjhKNPtK%(rwr5g>|BxY+!A?4 zAUKoO5LXqd>wAk6-OmXg;6eH;z$q%`n0;erOhv=PfHSg5RzXCBm*PckRnvG(@@!MOZX0gY!nnJ=J5Aq8y3v6HpVJR)s(ES5ljaT2)VFsBhX?zL|Eh*AKU4(; zjl-yOy5;jpWeEx8iCRhP-X!MAlCX~*{F^AXsqGx;dao0WqGa255027t*)Dl(n&zb) zHD0HgmhFm1MwQlCh`<--+AvRp9OH!4u&?7$GOtP@3XBbXpVm4wH0lPvB@@uht}?B! zd~M9YRvhKiTO$za3=RVl>_RS@NeuG9T;7Aj2l>?dkyG zg6F(6RL&*o@~u*iAIal1DmOWT^7K%Xz)iM-)N(V-|J_?@#`YTiIbF+VY)`ZBun!Ni zpkG_S2xq`CzsoUpz?>Fw6z4);d6P74{=12g9Id#XWiQ+hh)}dP7hp}FbzN+&aK(Zl z=I3L}+^T#l)yv$}fS^(0w19TVkv3PAA{uL<6!DXuf1yEi-<)T*^tcYX9+B=^Zg64O z?ZekdifJE8pNUg2MEF*I&3ePd9p+tTn#(0ldQU@7ftZ?z)2H4=4sWy-}{ z`Zh6_HGA`YzcW?&-##*kqgOi%ppdWy8B^MH_E= za+q^)L#P`4i)b!N;crBzUe?-z4H3ENoJta8Y^?1>mKJ?sF(MiFa|7BLQCQiZW6m3? zQeeC%mQZZGg66|zCpn^8@V^dnjC^BqZ%FKPLi6~9c1vc)j9rL^S%+J2@l=tw9Rl^P zZ!sAX11QDLvhLa&nGEc}_h&HolM_5NA(lCFcI&xo6!4h<7@w)YGr$N4surLbIHOr<^%~b| zs7`usp}KZ+aq*2YiO@>C>fmz~R)JP@bcnP#YAd zp&c#|BS|E85yj6-LJhH(2aG#;%p#5iMY(?Cv%zE7of)TH!qwmeH{XL}!kl4a6(ry( zA_#UUj^XG|D~Wez)0TLZ2g*aw?Af~v`{7B62WG#>s_v219aZV<6N{DQt}N>cv0HOY z?5;sgjoM#N&k(oWS#1tpjpO*jN_bP2-N}`2HDc15JWQ5?ZM`O_zG`wq7YSwUIva>D z9n?l+&FL26ikFz7<};+Z)$<^o_bsxw79ln+Edkz!K=zN)ASV)5aTVQ4Tgg27Pj6F0 zHmUNMwQa0WME^lEM$ew4lDhAfLC&8#4$zgSPG#-~9PjP_ZapcP!y7;FpAmRN%~aVCNHmIB9m-k+{wE3`$mQQT z#l}pV1E8Hc6`q0^5N}}@rti0kE`s-!(RY^u{hPwgw>+pPFJx>W1@f&L16%`5U)fbQ zv{u$n>5s1)-+QyED@P2hb#-Z9K45wI^SZ|G14k065IQ)AN3B2oxqoj^c=2cKq#Efn zkLRD#ZL&EMNS`s;all*cKkaog^&=L80*VJ30=^xmuJh+f=lPsLtJ{EFX7NeEqsnFe zT_(%~#5_S`;ScMRjd_%f!=7I}uM*+djqvy{FGRhoc|LoSr^3j;oW+xiSe^x<*rR*Scu%sWzO`I zs1fQ^$--*OlhPUvB7KOYdrEtT1|l5?wIvHH+#@?n2xnQ7US_IaIRD~uI&%HO6-s zhkng->#q_(ZR>#eq=vYv4N$SIh^s$1iCapb~=BATo0vLCCjO>-N10du*_ z&#hG0B|P?uhs?2mH$;z$2vt`3SXmL=D8pp|5L^lH%3MrPk>9>5(m6_qWRNWcDcKLJ zMshsW=7OvB7xB;P)XWhELd#to_h;!f%1th_c(X*q)xQ67cog^7)PS}1ZqQo6lYhIS zmImgnkLR0m9<+7+o`x7#?Ql$tN>2~mZ~BwB&$%d!p)a~`Uclf*ZbY6-&&V16z()8F z^rT|^2QsWAF_6x%h>?F+M}rec!8#O^$x-*Ou?9~zo}cn97vwQ#r-dsZOGp}vGK3MYNAClz8BPa0IYRxCZ75^HO)>o^!;OH~6ah5%mtQT=5qWkTK z$@B6?fe(nlR+>CJ19Q6fNKV|Zw%=+MmJj^BH>BmOC;Wjvrf{zqHXq7EG8p!aZY!HU z*ONw<36vR7rC%g!Zocw^C>RE!$&>rDq-`k zVb>YOLPih%sV_vtaeHDK0l~XS0jy(rZX}9|YWOChsJ8SdfXYaX9?IOC%Xi4Kvhq2e zwULYqum-`Zp;cv}S}``lk=2eGpUf^^$}8~O%!q&W?-3X+s7_u~wF`U$Wrv!56#_R( z?~h(lCt~QUmi_{~n6~~e3&3^Z>f)qmHJdGJ%3Y7r*=FIqC&3(T!;z#T=DGQOVljU{a_UUnKsK#8D0@7gmHSa*^NpxfrV2Ipaxak_?J z*&Ai?EQV~k72!=4-ptQDQ;Q8-t~o&lTp+SZMlg7uJM8hk$IU^_QW+jE&_JG)OFJ#NA!_OV%Jf_>RNEz4gP-xbTsyyEO1{hPRAF;6e!B^vepp z+7T1RYXI|=Qo^gBvTU?8d!=u(nJ4}iTW{eN)%%A1QbPZw(jW}orF4Td!q7-}cT4(?-`{)II%lo(2kiaqcy>J3eO;g1$|%G5JN3EV ztKMeP$C31t!D$jRL}BKU0V!8}JX@MIU0_rjr+)Oka+H*(-s}QvYzO0OLJp&iNxVNq zfn%sO@2REeKuFj1bdFG zi5r=1B_AJgJRt~#wb!(@sa|aUHoBmeFH3pN!*RQqP&>Nza^m+^)iQxQwZ_5z>Lf zsR~#xxXBa87DwuGH@&R$gl7|4fas8<21y*A-`<8SRtpJ#6%O`j(2O<5e!Y#UKJZV{ zMceR0oGWdgWBbVzKP>!p>{RB=F>%^C8?oBC2CT5X_KpAqW%gqq8fI5ppMDqpE2QYJ z6(Mw*f!h^p#(*1~#0M!#O?AKdB|0ynHJz_kC}Se5d#E#*tYTz9qn^pF8)_cUCa2^! zxOSaj^C$FD;C*N7ejPWM&OsbeaFwb8@58d8cq<4c2!S(4+ zc4Uid;p|HW+|@j;8h$YdGQCe<`;}FoA%x^AMzSxUig;OgvCsJ$Cn2=9(8SRfn<&H0 z`DbC=hxSn|Qwy1v9Oe0Sw%nbgbC+H(Xbih4Iu!m0Pql{a4iPi2Tg0H+-1*n(Q-2HX zw#cKC7N>f{3wksGz}l}t)HLL=^?ep@7O&qQShOQJ>xa#+y~lyNvwW`{PJpQJ20CTUiMj zm`y{NkhyjuRO*v&ebh3d^)gxbM~VA`04n|d7!4An3(^Q7*P{c-Z7gcQT>V*PGHYYK zvLPHdIg$9$fY+o#)kSNAeecF)OALu~cQ2W)*Nf5HwUV?^lG_)Oh1us z2>eyp$+Nfj`S@}|QWbq+x883l1gbKhq9pwgS67q6FDz%58dy_{bL-P~FX`-%Wde*l zl6K1&{|;8*#0)n7Zxux^HvwUe{k0tAoIKe5(P`)IDTSvS5bVPARWICDAeP2eH=O4u z!2-U?5JXwGe`W#ZDgO5UT(q}M;-_-_Y_0J?K7XpNZ3ZG~rS~!6#H!Acs3{do*{gc^`IKA_xzL9w#$%IA$bcS<% zbG6>c?o69$jNxf}Lwspqhrn?r=0#x*Rlsi7_p1&MuJ04#xbHFJQN)gs=sM?sRk?n* zz~Bb9f}&LR89kyM_Wcg?i`Gix_cN#D9()5>gcyT$NfB=K^s!8(9 z=CZ0q2v|nhj8k&eW(1^!2wVON%v-2m3TZAUq{LL0tT7gCWncO$=7g_8H2neyTt=)) zufzsIssqhw!3nm|_@}Q}?5k7zpxB0-`K79?W91BEc)GRvYW9;@1f{d%BRQG!@VsU}P(+x9g7sgygE zv~)_zv+gr8rF9~!-L$iB5Oq(<=_#}qLeij_-FTPs$9qe>DaafiDkp~%~NXa0=HrZ1au0v1GM$Fu!_84M!u}NvQq#yjnh2AX_4uI0h zn0DLKEP9jcgIGyruO2^YrIRX=XWD%A|ZH3`v#+TetK7$fFO;`wX4Mh566r!+0(y{@#p!w_blJ| zhHjoA2!S_OACc3RjO#G$OtANF5z1sgqoSu*F4nn8xZHp)0SPP^??c)r*g<+|vp!SDN)vcRHLp6Fa#b_$){Kj8(^2{CntM{9Z&6nfjt@7=u}r4;mZiKw1!T zdv+~tNMmuBy|26HqY_7er(CXag7AAsi4hySzRTx&(T$mkI;&BYK;bZPmzfcH^TZmz$%EBv=v z-%Uchb9mL|v`){PzJV{yvJ#qMo12aE7!hyIT;>I<9(*Yh9$a$jd9=JUB#I_^mHX6N z1vZX>uxP-YwvC0!l}=4bmuT^W5HoRx5W8P!MoxnsYavC?cWPCM76v>!=A~=AdEttjZN3Wh{Z08HhIT5vqP%%T^ z0HZ=Akb-!?FjOIDPia7h_Vxx2BHVK@7$)C+_(?aaD)x;GHnn7lImX)+fltr(zpxq> z=m;C)jfuZ$y?j+jXxEV%2iWDQUX!c!k@8Yg#qGf?y$UsaKVGjl--wxBH^E^?0%tOx zb)qm=Rdb`2V@6}!U%z;*+KX639;o|Nf?l4-mmKUEzj6Aq{n;4dr3~{@l^8@;ZxIhq zqFA#Pd~WcLQ7#2Z-Z4{d+&bs0RmAzm=`*X~0YSv_&&+m#jvg7*5>@4IaH%qfv4vkq z!(&@fPTKE>eJMO|kyr-9_4mR(vR+(pR7qK7>{Qt^YRmsuXzes_jTH;laM1gIDKWhH zl#>5TsrivheA4zq!M+ryw%zbc*R#JYtv$m8)fh!;mVTx!iDc(c@0{-a2*f;AcRNV2)7-EZC=A#?`EUQ)Nqiu4l zL$6m$d(>d$&y~Ri{iSD1jPI9@j#szNT`*GB1dRv%@)^jwPFA?xEE-9CmV^c5`NNOL zAn-)U>Vww;Ld9K&{W%G+a7R%uVaxxJCsqg}HG$cAVycnE`Z>*U89saQO~1qfVsoC# z069za{BYu~`4Y?B`2L>RxZf>N)4u;}a>$yNJ%8bN2wgJr#sbc_3LlDdNdoa{^~=7I zQ86~tew6YZTXme6t!zViw>48U=pXwp$buOJ$bKmi^%jI5myhc9)3RH~zG8(Brx`ME z2Mh;j3vZ~*XNNfP2Y=gLl&X$b%iAd8btt^i;UE7kx!|jOZO6TlR?Q%Ummu3X+T5jL zbPz71D|0n>{s&`v<~zKuAeZ9fyC&hdLtU|AFHfKDHlnXcfEUw$W-k=jOma%hIh_nb z&Xs~}WZK4Pa;RE8QCOD!2@G|L?G(Paw0cJ}?cstsSdm7c?qb1Ma)~&g$$-_dm;+zO zVbehk9fCLz$3QlX4v_aDm7^WuPV$I=qy`F(J7A4B@3ZZEEdB&n0)lPUZ?0pO*jqa4 zC}V0D-=yPI#7)Jp#RJbYF#33igF}^YxFic}%agmG zKwQy5T>!w$eTcH+VeVzd$?9?PR+>S;Y~=3g5CZ`nU9Vd2hrA8#YvhaR_F>gf?Hql! z<}cKh-QY3A;$}&A@l-RH1T{#N`YQ9Jx>iM8nA*YdTAS082&h?;UhDUZ^>7%)K>Hrw z6dNR=pd8fm4kpT}vn46yXR_V7Sornt7OOK!Ro&(it|U(NwIq{H7daC3%#~GmzzNBE z%XCQO1r(a_cBiP3j_k#elNX4^*vh3guHz;`D|FQtA4Hj|8?s?Wm2555K0#;;ahpGj ztolPTm0gC#Tve+45sPqMh%)v>Rud^5D@ZHXa|wk(_End*4CelxPNX(RnfHD@RK*6C zpEjiyUZMO@O&TpWw4YDc_JutpDqOonr#8Vd*jEj|AC20!jCKcc%Hss!{EThnKx&&u zb|v9YZcGDbF76Bp-?0y`f_5$r$L)l;)+uB z)Tuvnk0#(i6PZIc2!6&F7ux0)Lwte>eoT2euY30!@yXs#CCdDDK$&dm>=j9Py1)s<9+4Hqrm8TMZXquW0 zIU;bIa4J%N#y#=~%cO9*jttCA87qqSNtq+V(z*(ou+S3>|8oFOEiIxA(TRYzhq--D z`~Fu|e#=I{DaLI`a&B9js^ps~zbS{4#moFU#npRJ{w>n%8=JDK2-UFR;Fq@C-o>DO z5o}6x7&h8&kRWR0l$tQO{v)2M`6mJ_6+ogSdn*1XiHAFE#X35_=2$qAL^j#S>mOB75yHzoW?mg=HMA1!;S4 zIpn@T;YU%~5uCEaaT;5$I5^Eg3Epkb{t0!gkT|i&@*YdrI18S9hQ*pAf9wA62)uT%P&^ zcS)PNpz1CwAaK6nFN5s&E@!de$}oOg#@Z7QAz=>MG0m>`_gjnHCJqT=t+6d)%kZ<_ zVgw-%4xx8KPq;Y!-~!t*C*5(IX0rIo`@&!yyr3bv4`Licr1(2jYyGo!$n-VXyU&%D z-&{}FS2&O#oyZg#9qw}_>+FqbiU~jba4w8*;)(xF%d*s5(A`?^xygwP)|);hyez1N zSz60IHmAxQ%{{07)A9@>Ke`O+rHVR*ir&+^oVFm)f`FuP=6^||D z2NPU=k8X;5@U0i&DNJV-PiMCMSYzPjXLCHM_!n?Hfelz?4aFoa()PfReZN$X!|vcZ zmdjJM4elDM7HRJ>#R(bSJ?@ZcO0=S1bwX=c=MrkXH;wvx*DA@W1^}-8oSt4~%mOU* zoV05zJy7@dUjVe4OTTu1||sYV9=5>A4->1l2WBOWM^EezY%{OZz^u zNf+J=m6Z?%0DpT~D4c=A;5J!^G)gdPjRGe+AOHt?X)5rxG=z4Q=eKC&Nn5E#MOg@t zvGi6sS)3rA)B4z~Sg2$AS`UE#(XD@dT}TLJoe|y|!mTqDLzSW#?fdDq%H67i5R|9U zx-~IYW;no&2eoo4m|#bvRi^b_iw-jZ_ei z^ZOZ|c_>T8iHV$fO#0cvvm?U+pmuqwj5E{Er_EA20Jh^XbW;ZlZr-1|gqw^G-(s zYYrrm6%NlW{AxYW0A-P*GhJq^G4_ZHot)Br1)bULq*roCR6g-1NQc7^>Da{#rLp6c zXZ z-J4^*$^{JBkWHj+i=%h2RVY6B1_TokB0WO$!R>DhmFpiA2}U4X4Yo3EF3pOn!whM( z_M5fc^xsq{UeCcdRP0byLu~|DxL%vZw{ZuI*@X3d#fPw`!0!_haFI`J5u;A=5)whe zhd1U5S2B2A;@qmjUan2b)u%P)3|s@ylwujy?~uKLah?sQ8u6?P?Ak*(xon2yrJ{Zx zg4;jK5f6Fx_4%w=(xO+Hn`Y97Jvli@ec&v)x>u39vnmYUrA&@l4L8L+@0%>3=Om~O zgO9Na;1d)6IT#M(Z-~;wAC@CB6};*51acU8gr$3lc$2dWgkuA;JZxXj$*74g@U5%J zjTFLiz-;NMGoPb7C-ohwBC)%gIaoKxF*dWYgkYWU^lIrfQPn)jiN|$95bo+&;hDz| zpX!W>_vm%Yfioo+p3{h}+-zunl7q>x1DY~)H5X0=y*n5Ci0>Vya@Xb7B&(}_?-FXjpk#rpn3si6q9hnFmY>`EA8 zAxkJ1Dyot{L8Wo(F>PcEV)=6>u@z~2lRcF~YBL3kZki4kf#IL+ll$pk912@O(G?jL zj}&yc$nV6q#HH8`KKZ%|y%GF{Xi|P?Q=4pbC!RF-%+jf@9fb<8EF~v=Sx7OtVEdc^ zIZHwUAh?yLl&hT_WD1qa;F5fsO^ROeUpX^EC|$-k$WemdH*s8_&xBS>2jxn1vQz|l zX$&*jJdnua+8E{XWIy|%?oxE9{!*0e^(XsC((oka;OK-LLOU7%?u2H(+H!(uqI1I5 zdzS|r3j1Ec!={H1@qk9}9=JxSMpoDl7?AWj*60#TROf?Uhf%Y1J65f8E8ysW!A|r< z3;P^Sk|YvSrwwuUqGmg)x!+t3cCMb*Xr25w?gOyx6q%>}v(s_-kN%)#N{DRgkBn1Z zvP?pK$QUJR<#P6v9huIZd9?|Fo2b=mj+RE2vJn{P>uuOdXJx94P?k(<$UUDCEIXiD zk%x_F2W@WEuD)XAM~L}UJl9+z`h&3P(NP6fDsb##-s$XT0<%NEHlYWlPS&~hlUaoNBVHuvLJUkRY@Td0?Sf-o=%bVi>Wf`6y`)ds zdnTwMV)n9mGV(F`xT-RdY#{~h;lN0=UDh;POwvhGQbT}j88%(F1kFB0kdAmy;gx|I zhtnsY(XlY{9@L*alxe?SA+$Rc`Bn&mvMl3qxTJ%v$KlYMvPMwaB-0PJeTH-i&^t^b z)P!0PmKnCZJuUnc*B?$?h#PZQx;w`c)f%f6?PlNGJ2Eo(f z-PNPtit#mXWKFPUrkB-yy6^VRdVNc$;mSVGe6mVVM3dtXe6|T57JznUhEYqvp7k5} zR%W8pZ(2CvsGBs-UF~oH*0NALj{gkfYa*txQI;%lk7Jc*&?6=Yr#chAZR#BLnG$B- zVmh4rg#fv(-<04<&A!=`drAmHxGY1KpKfCyS#>H-P{B<}0+qkaDq3%lb{ju*GybU+ zn+gSb1mj+O+^T74{e$Ny3gO<1cu+xkM={fbDdbhicgUeT&br~l|yS;yZj+Q+_I&zA^<~PBYbE$~FDB3=m9dMetUWGBh^d0y_q?ezQ+N3?#I> zcE%;Dc-ai;-TD-*sk9f`lqvvdRD-||8nTC?_ySZVrq zfDc?d^&y@>S4dZ8dhEAQQ9b`eKmXhUt)^8h8DiU4_*YII47cY{v zYIRLfL4Hgzx^UxFL#Bk*z}zIgLsfzuGCy%<4axhK7@h;K34@l$TnMO`?lrqPeRg0X zYyPeJUe~ghTlUpM+ux7Q=X&$(ND1S+7k4hfkoUV29>fOah33xh$i)SV%LbZPhg~Rf z0Fi~ZDokX35Qmk!d*8p!?vW}4c7Fam`WrQxVRm!Y_La(QKTAiYf_;V3yOJ)enrgdc zA4A&OinT%wHvhaSU6bRI8@15?=(W(n^e4l}O+~r~_tV!SQ!kcJKV1(+1euFuWFBhT zCKGowAB1{$QzAo@s3$=1aZo~wxdTsNt(uqo^Qi5Vf*=V+)($(m z#`|O24yrx}>^h!H81e3mcK{>a8IwXt=B$gI?XP|#X6_}g#}ycv;8gJb;Yn%=BK{atAvexc|@y84D=>nz+S>! zW{jJwK`Vixr*0%6WiQ1U3$UxB_ivALE7Ex?3voduDz+uEdp{L?(K}yXUI)^L$mS zm^JJI(}GA8y4Ze&#-|}djkZ25KMX);mRiuYsX@E{5RxoP-ng{xsd`sPEJZG1>)%TJ zXV*&}P=$Ebe)W?rwHi@*$hR#jG*KZ+ZuBLSYY2tkIa{ zC_^cTUHgO*=6_9W%A|L~x9B}Rc%FT_=}rdFz$80i<;wc2UMOdumf1|*^?wn_&24QZ zhtaRqE}ztor^=1pjJ+0mAEDr~S)xIAXJrovY(+roF`96Z;7NQAVo%PX-g;AsyWz|S zQ9X}!u)q==8L>R{kJ|DiX~I}$QM?cm_7)`p^f8b{snn1{-Y0G1*5q$*ZFnsTbSBELvO~k{ z&wx1e^?4UhdAhr{v~a>ZW;AEdvxf;;iNiRcxC4U}?(Ts|r(GUFf*>AuRf~wLot<*^ zD=|FOM#HAg%8roe^|uZW zo1gYoZxZr&EqwlG2>E4*k*BL1tS#8{O%w9}<~9)lebcK?<`=Q>y+P0EhzUuiPhh;k zLes`WQ4``Lu}dIrBM#OYfk{F-G|!Rwq7swGf+;6tLomCibKqHTAajP~eiJ@M0oQT}g63oXPwDALZ|` zK^=(%O6U-y{Gy}C4+r*tB9@C+ChI%?R)6?{B&e^_E;IJJ_o4tdbz$i2LR+$}|Bn~I zc%dSC<##83vhD_qV#NUG?HOM%;SExD zk||x|{d97iT^ueERA6FanVSQG{%CqdRm%C|KB@svGMe#UWb=OlAhKLV8luC&BH`up zaZ@-T0KnhU6YSNNczPP{_>zwo~;7ILU7T-U>N@$vPH-+lcQz=UsPJTUD zflaCxAt1@?iJS$btk0op<)JNMg@{!tLBy7X7eGOR$JtuwaCDabS0QLZB`^L^_W~M} zB$g>a!0V>|EYGpjiI}eGl|S~P;eUFc&)BNldGk?&$6GIpd2{YE+HNkY4|dR zLY4kzc?2EUTao$7xdMgqqr(SqbplDe{cC5LUxQ*kOLPhuDYp|p$q`d1`+Q-b)@;e_ zSsrqmsZYNrb8s@za*j0y*tB)<6JSUoH|Qa;WC)Z!J5wA|scADgoLc!o#=qFS&+BjX z?Y~GS2IX&z^X0e+AAr}aR6fOz=wBVF+}e)gR+PuVmSQRhhRMv^R1GLDls1gj|F*4~ zd6qcsN(e(a^Yx(4r0vZGV(wJvgXHuG?`mY892o70MAQqJy!i(Q# z9;8QpBh(qp!HFFxtN|j2jO`A2^I{KEGTM@L!u3Ejf|^jqKfgOSB_LOCGxmNo?}qg! zH2wQa&tUWCdWmz4Ulp-vM2AR|v#Vuxvr4t`!JD3?z!BnP=ctF#e2k~6MlyZaR z5ZGFWLVA{x4v_g%UeiiloYgywzCTCP?W$@ujr&Lz<$OF=-umM!^IW8L2#hPKFd`>z zU70WElTRr%>_Bu0`?R`eIAg}|yaQVJwJa|yQP#1Ut=b}g!CJB^-$ce=tAvNk)4?uK zTR~r=58xT#TTeZe1#136#J#Eq>pgy64gL1d?l-UVpWBZ`@k@Q99VU73ql59@oQ$U()_J_}@CAL&% z{!gWuUHwHvD&^`Ja!F+Pm&{+l6J?Z8|eve3{bu9|}>h<#f#X*nATZ-P8nW z)IM+XN&vA*LOTT*wweK)Hu~=E6>uOJabqvi+Htca>7is39eeq7uBWvT<4X|#F;hWN z4s}HMnUF~AC~p3q-JCJnd&SsMZIn4Ym++K!lV>QQYVlMbS|9W2DLLax(?A!NhnHN;KYom>PQ&i(d%vzA#V+#4iJWz;UF9mX6Nc(MX_($2H zO)13l2QTE5CN(gUea;ru_VV2bsY^6d?|AFqTBRUNq;~#;RD_DaDB}^+4=LuxH)1BT zhvJ$d?W0a!>EojrGig->_I_@XxYWMPPw5q8Ov@rCedoO=_TVwB;VG5x(C1bolbWTZ z{6<>C)F`&_#kWMu$+<_4RjSsXGgLK0F>0pF>s?WuIYo9o&)%`!BSRpVkg)D85Z>lW zM4|x4`fjrq)){B8CF%EQ$cV=u=cce&HthyQI%s%6qh)L%n~Mck7Qzi5MXR$NLZl?* zb%8Z8s z)GB8=4A^t-`82_K;tB>^Fa1*zDoqIE8<==Aw~|x`#XrfaSt8n2UImeJ?~4&J-OZ>n zO^wPOkv&}gK}O{y6&$I3exb5VY3N-@5>u#8Z!(mtux$eX*%UzJihiz_N7taBd6CD4%`j6QnTy&-B~NbAL{U^ z3f*_$1aukbCtBSk-%4g~G}}t^O@0zA`A_i*D~a_C^YVp z?n+Q1-@##Ph$Q&3#`#84x7fy^?dEl8&SdS>A^z0NOO%io`CeV0yW%LFhTV&)U!zoJ zPzyvcpNC|J*2e~));G$M!M;=sC^-|IVSN*D0NUSu-I7XunPM_d%FHBw)%eu;^h_J9EOR0cNpo+6N)B@RB$)AO^yI~fO!!Ns;` z0DQVM`^>LJHR<%Ub3a{R^8G;?!^R`IjWuu}&c;)4OyKQ8DUDAJMcXz12gEIH5&g0ma6@rqAHYA*7gzgX(U}e6HtkLFzv?s@{+l zE-PbNP~!PrNv@B0zrq($wm8U&oUgES>7yTj_Lysj3ZYOVxC@E9=DEx4M(AORzcr_3 z*sLe%5Yob3SyWr9jXL7$w|3P_U>A#u)2{K|PNzXid-~x&YuE%Z*%4 zGui>WXP-#!^<%p{z~_ms#Qv$S)6M>op&(KW5Od-?ld)h<4%QyDGtM$*Y!23kp{6={(g?0wIaBy4pD@JQ+3m#I?#(>#>$6dqrLb(I)#EWt+~8B6AY`ke`fw z>!(|Tm$TCX$~`gJP>m_=K-ov>w#ILtL5~{UT|l9=lWb){-!;i)p7>qLCylTvi4%m? z3s_gz(Kxm>*H{N>l_p%UQsc;U5jx% zUKTC9ljQOgI+p#JU#M17+3d*X2S@0QTuHbE=?sKyoonvx$&)yX$Y(lQG)-W-@j%ZU z1e#nGugr=;RS-2pr+J6V5(SP&x!?`VeOaf=oIeR&X47i};{R#Y%f##K4Hz16l6!LT zjY4L`jxAWG-*uGjd6mUfw0cj~S>l>WRG=0ZtZaTDFFHHZW;9zg67vd)7JpGoogQL3BpWruGJ3O^HXh zKaC%!7sQp!vd}TRw#`k>CTgn`dy+3S@tKJ&>`h1n(q?Da}6r`<=&y z=zU=Xd-WI9sxjFpKkSV7tk!k>V&v05e}^L{GdD*zT+Sq=Ji=Y~+Bs|KeUDt2<~)O@ zCNY4Hr?6N4Pl#783z736S{M3cyEi7PbkgtT3(=FY-Klf~EbxkE|D&V3hb^Ph63E-M z!Lgdj{I?uXR-bTTz-^sBY@m(?u+D#i7idb}FM~H>k)x(`uY;`7waQ)N>}R#`u!#Jz>sL@u)eIWPH6imcfvYsp?@n9L z@hUe+wNTq1^7-Aoc$c{ySIjE+C1A2Er8$W6m47BKy=o*x(F=w5l+WaaVw^1J#|N^s zuS3C;0%0Ru!nN-#TAm~Z_m+I6u2R}&maFA`zb=#U@|wjH6-q#YN3mgDtI~58_j-4a zUcyPaoIW^Oq#L26M#tiM(J)=~)Jeg8Q%354{5cPk#hs5D()n~?O`XOsehd*m0U%NM z%5#o$hbean_YU}rLbNGI0`g0R*@)wFeLFh(FFZB`P8+C2&f*1qkETSl<_0Nm1$}9M zAaqn;eNsP+y*eMc7}*jW36CwBZDC9_b>YM z^bNHhO_R32c9y-IJyP=UsTu!?;v+K0c(ujHqC)9%XAPp*?K}k5bI0^_bw`fnjDANj znX8A><^|Z9q8pqfz>#0Xh7oWO7QR-*j?^xbjIApvnm#sa3PS-V+{eO{wOmKa+J-w+ zHco@zE)=lnGZl0gUE|xSV^hZy%UKp#xO@|oM3(~!1~b*7mKmwR${J+gipdzyxN9uh zqe>&(c387LZKOGAQspTe0IUwNjeE*B8JjJsFxfX=RqSHJYN2t|hI2nElliui0ya6k zn-^SW-ionCenZeWnM$|*mv?5swC(#u{^J~rtp1XLj#}9-cab&r(JL-^JDpQ(u89I*eUIQGK9 zZD*b0vlBwKd3@&(b76uWRwmO-A`FTUzn|`>H5Pg}tMu5H|9<(3p&Q$-*%w39o4&;m z^#ULE(zH_8VEubo(R5%$GL0=!nGBTVb!d;QxPMBruwGsKEdRuyk0CZU z+ZhRtxA5gi;Lq`%ZQk{^%CpJ^Y^Yc$9-NBg(TXHNl2=(oav)q_dnrsIYT9S{a3#is`B4qMS)2eVd%29qV|20|Jk4ksrvM+OyHxD@>UC2^m&x`*HlATe9*HBmf43 z30-Wydpz-*BVG=X$y9W%Edkf4HTEl$ewpl@+@7%!MZNo=d72d&`KGUtyjmHZVUCSY z`cTeum4rIyON+-z*TM47kQ?oT1vL-|^mrd}!e_Lf-g-4|2!t=0>U;3YY2e`*XmHwd z4@#lGTwX|QG4g*)pkJi+d;HI1n5J13G0gtcN4o{C&O?4&Hjhd-0)m(<7WbSTdJf6o%(ota zRQ%f5oi&*7K14AInM7kxKDa*4Ed(Eh_5aBd56X|;1vZB`x9on$bbmZbqey>I{w;6$KZj&?aWv*9 z&^-#+Q*t-?n}_vME%;vK&GlX$%Go|VNAZPy{Dt{|RN=Q%b5RGbP3V^=)C?${;Iq3I z{%A@VHnrgFYZD0xwJ@q)_yLB7um9)HJ9Sdoy-_hRH`M1UEgwu}$;o}cCk+^;V ztgMGRX8L!``}ZhRTO}wi1!IHfiRIx6h3r3pi$t;0O2R7?wD5xNTBiM4q~Ur-p*z}r zOf{@&)hJQkS)9NB1%sWN)1?Y_d&OHNYlpCK&aemxCG_(!M3n%sZj=cn#@c&}&dV>Y zjP}r^nAxpSxv6}cA-}dnYx9P9fvd=D_A>LMZmGk_6!*Eg+8Jat%)r4jpvMVPR_v(c>`pK9VTU9JWnRtbW6OU# zeR&kUG<*_!EC+CosM3cI+b&?xlS-F&m8goU3o^0VqAyf+RYNFZ+-9%YJ9~2GA560D zgVS$r%9lO27H|LY=tp*iB05RUom#OkPc2j|M4%!OH~_x;OAM%V0r$aMcI(vN)m%M< zw4)76@4UaEO8!J>b1D#e@-mK$4leN8L9IM8-|KCI0>}K)dxV;B}%7|A_#KTfu^tmWudQ60n4)3FrFSMth#MDRYt+{2sJikn<3JlI2DOUjr`05X; zwvg{%J#aYua?+ija@p(ZpdFj%yAxcABhPDK(Tq3AYr?H;cOJHiNbfp7*Akd9M^}bS zVVSfguijdF6nflSKXOVo>M#V~R@jD%PP~!C0ork|^jUr)dGSIG`zPX6sx1JhgIisg z6cUxa+ps@*Vwv$e&~_owDR1}cnU+^bXqMAEbz2Rwb9=45nqWT(v_DP>5=r^o9HJBr z0C@4h%s`NwrxezvIfyYfZS!y<+pCDQfKIPHBDEfv7wKTG=%&GM9}x_X10gUZBkq~d z-z547)6fIvYiL~xvGI{4Mxi05 z&-l{h(<>n@tI7YFVCn~n+I_wiF$_JHvn_sna z6?jQ%a|oxi0+P54F1awuhP3c$g?9g^2?kS=ogGVgki#N!46zF0blo$w&!5U>(k8AVWR<}kW83SRFc zEB6_P3Ck4F%=Em_YWD)&9=dL*L+}_pT>I}vw~SHciSCck_pbAA*`^0AKN9RPw$Ycv zNT(Ef)Xk&O2Xtp25Bhh4B0UU$YZQon=>37hsJSb3s#y4MO(OvEd3FJOBREV3;!hwh zfg?=3Pc6mR$f-o}2ooZ(ZlyT(J?>+-@|$!yroL~IFJ#h}P+SEYY?O_uq4e4JYJxs# zZRL_>3c)_vQAG$cbbd*dith1@CExSSS!Tz%oi00n|wwT1kt3fCO|( zF84YepdT}4(Xz{Gh<_g0Eqqiz-F*|4?1po0upO$AAxQPj&Olgr9|+X=Rz;O7P4mFY zD@0q;_kb?quu)nFoVA@%KZI&}dAff-UGJDxPnP*Q{a7rZ<6oS1el?utz#QYm_4A{j zmP%!nxTz?}Um^`?8^!}Sk>DLd#I){Zc7(A|pyIrF~_?H#QtLYfKRQSTjV62c0#Z8$%S4#Z;f>7U=W|FFHe zm-lbOZA&ruJKoS8?8vNl7%AzkGhMQT#pLgc3Bv|TZoR<()__i#Yos4gDBjcs7%VhR z#KKt9%UbBbSS3PBCKDed^9<34V4*DCk;sXC#Q!Tf%Hw?MFs%Em3XUaa@m_A{0F3%q`i^OCJ2rTv(8fN$o9n!* zT5mBT-O%q5@*g*ZBo_?$<>#Fk>g@%^6M@_ZAs4{2l|$aYf{V}Ht%V$GK48g}__2m} z24p3Eq>v0ow-}S}bvsokPN?dbX>F#AQH1m}$j~nHX88)V7!wgT)LwrqNK?daaMi9MUhRPY4S?INJFh$LzN7-5@E6 z7qR-PJvRn#{P?hwmA`{Yjv(>#v4CU+-IOi%K<%P;<*VpXx#D+!=LFu)Td%I|EYo3b z5A-_TttoJ@`{=KBh?^IVp%@V_PN?cDCA|4US&rL;@A%O{7jz2GH}nS2Y$i^7?C|oh zLv}01ghnmn{9-U|7Joi=)*RKWFn?~>Cx-<756|}1_EDd@kvM^x`zudA0sx@guw+om zqh^3vF2um+ux+RL`^VdyA92lc#qDYh2Ckk&V(pWb2XTX4i^WmP10zo1?$(3yL)JVz z8*vDEidSVi`FNqFQ7k#HL4}>%BmIj!gM|UP;5*F6uRj}Frh)tP&}_{Z|DpO# z=AE&_gE~S+B&mmAunWKA{*z6pbt#q%u^9ViGpg;4zUz;TOhAR_`$cgNe_k`*8!U1a zMmd6F;SVMsLN1c!ijTdB`DqagF9q`~&9_5C4A1BaShq9{h zoYap|WD{%fOg2}(bE8L}r+>}zb*NJE6g>Y>>UA$K7C327lE{g~9E_fi4MOofqa7v= z%a4h}mfrvHYuoMK31?`&eEz4YZ!#+ap+eW8R)||H@TIVrt|zXRi~ozwb5#`J?xHg% z)1+W2F}rc|Cd2}_l#(TuhGWLi();d*S5oMSuuA~A>xC{6&Lc_J5v>DMgXiji{{>`yi7y|pY0bu5j*l)G9_Ha7JD-+xj_&me zy!STUX(Q6cCVN4w3Uxy3b&9A^XIn;ny#Er{RJirZ(>0fLVszvq(<_;upqXZk{3hPm ze)m*=v*^d;c6Jd!K(J=z=&1FR#TTceZKi7I436jicA09fXq0!m*Ulw8-Ce=a^~r?% z7Rh?ZZoqOn%t`?t{p5UzZK8dm6IeQ-^8ksN6=l3GP%5;!$6A}?;94&f8*PT+zj>$U zW=}p%W@n@@|1P@2(CT0X&wezeCeGz;w-w2KD=@{9^A5vSWTqYmafKU9cufj@IcXrD z$8#i+j((Z=2Mg=r#tV5F&8*8w59$%Cm+vsdQq4;12@GsH%BT~>RcY~Xy^W>8gpE48 z#{$r0z`3Av-G@8+v+lcA#Gl4)ME5yK%+Ue_{r=$C7h|=Q+#r-y4J06(xiGP=>58?P zdX8@^VdK;CMi?&c%M%}h;d|fB={~I4jBa)#QeV zO$w-Y0|E&vAUjb2nb8bqInM}s@m+JRK*%8#rrA%;-7A;=k>U-8VsJdob4BBnEd#ME zo+LGBSK4LgB0{S~HE;f8Xk$}fu8)bO{E~~0LUC>8A!Q2Y$pr-c`0@UMhy)h^NSMh# zaWbsFq#~%~!#9DakY4%8u1JP8HZ0+R+x=Uvhtqrg!Js<+txSf7rjI0dKqd*NiGli| zAh^opQ{kDalrc_4KnANU?XnDzMd*fP-u+wy5r!;{$BlM0Sfm6WHECC^>gL{h5BwZw z3J)mUU!j-0s!$|zd}hY)OMWo7bAI#MqyhtM{3B-Urp7Ui9)UUea+2GrfXb3nsWD12 z4oym_)e*jVsr=yGR0*K^EdnTz)r$zrtacfu{ovS|qgnMcP*COU*(b!$Ku1=i%ex$B zCOoNX*8Dg>fs*)G|6Ynua&c@us}9t5lSJFyP|s35x}*70YxGFQ%$FzgM)oPI*~b>I z6gv+~v2dCcN2ssw_$|UV?T(?*dy!{1l`hFR!2+mZS>26v?0T5qA3AhS?R%|2Szapj zcqyYeV9b(mca|wnUI!-<{voHUG@mvP;xwfr?YhB(<#FcKWyf)iS=W3Ow-m~sR3uSX z8vm)lrl1PM7d1(Xbp!waI^TTN<*j2f%1cYKffT@aBjFx<>=leXXks@V-ElgNH^lj% zbWLjsVG??Fqe~ANR<^MH17>Y3lu^$x=3%JU6qFFLFT_r;fmU}uXhF+H4LK75S<`85ke9S(FvmW5^Y2oj9wBYl4v7{I(qM2 z)Ik^$(Gp_x-h+3to^L(hdf)Ts`D3qr*1GpOdtc|ef7kaACB|b65fudmm>zM^Xm5pU zSGS~0xbEJ~2p;T8DU5V!QZ9#9?bd?o@>I>7qt?jJnGrGTP5~qF$?s`44gKX*I|tH* zIHD$$8Upy!lfF{Xk3FvOwkqqDRcijsYko&B!3QXm4i$@@pt)T#a13V09Ov zwfp_kQFf4uZLxrIRRi69=mA~=1x1tP#@V>-PUQL~`YdY1wLA^U79IjtPl%S?1OX(K zEC37}dqJHZI002X-9{^R4CmPO-!gbAU#lJx;x6*+!c}6>S#Zrddp%LG)KytOKqBwIG3I`}$)HX5fBVET4jqzSz6MZvsk6jT!F=5nmOv+m~Q! z=L)k~)XFKFXT1(0dE{9zRSFw_zI-zq82?~ebL|IiW;GdKz8f=}y*@H!uy?y7 z)8HHCUzKsTwLr7;S^r8c+L0iG0AbcEMNL7rx5f(nQqw_3BA}-27^H{0!#*b|>0!MJ zyccgsYZ=poen*uh3yd%wmM^%gDzS=m7f2$zhQycJN)@MLSb;E)m4gtnlE1HCB*=&8 z_PV0dKG!=sWj7!*(Wg+c_M?FBo89^BOJ29n6c(#5E_i#%f}Dh)sqL@lH1Eg=auj0F zQhN|o#HXbL%e%XWVJgyldB;A;Fi(0#sz#ezp0gY^LNzI{V^$@%0nGrH1b4K-(wBl$ z(yh5ti|3E(8k4inF%)#@GgxNOv6)VHlu2Dm>e)Ir+1@g+M@O+vH_0Gwk&hdoQFE~| zOc{m#q8nFo;h`d(ldaud>PEC`M>NW!^=l-h4} zYF-iQr1jO81QU(i*%hH>CZlO?;4C9RWI>hN#{TdHks6q3KlzA-445*_)-szxqNdFVv*KU#$$hlfs*5C`5-%! z-}UDGj``_;I@6iG7R!{E0}Zq4QJP8Rz#0e$cDY22gRS;(Ue#3`PT^cu+!#l@zV=SX!IYN%d`h?z)kwom$d%%$Z;^-SsvdSg~(lQe`*CQvQY zI%N$(9hedm;}InPhzubVo%os<77im>CRV|}3V$GP*Bu@8JFiQEP4SZ|bzUsm537T%S@>280p>C!J}k|Qm0fW=C8cPp6+7tp7MX` zj!k?0Ym>$GG8PBe{<4K5>D(4v!|Qfh!n(Mmx^kCP;bkJ%n;E|Mu+UPcmtXZ|OyYta zG_OpY&#hvX({^Pc{q)i9q5PE?PtBmLQa6i|hXBMUA_UGEy08%?(Hvg8<#E?sap|8o zwDK73u7Y2(Ssb-4i%XChZwi<;3R*uVpFdfbCmYTl`}LFo(;jj?CFRgdeJ14kf4aYM&ZIK{Eyy;A<6(Ttut9cix-i# zJ{00o@<5t`q*?#GEpQ(ufl$T=l+k&+Pgf06llH!+p{vs;cwhCQ;d$szPsNJSPOZ*t zu8b%#DeU*&M!Q;P9XI~#xtEJ4jEcB6?p+Pqx8}nZ(#HO&ul8!wq@d^=zf(4T$g2$VdGIuh?A+}4_37&;mX%@1GwccL ztXIV2vZ#;P7n1mhROnnodH^))I_GX?p*oErOHspfe{?tgi>x}#L8Sn6OsftL zf3GVXo|K8IJIGd$L(H1&SMlq8p;-_(i0&HPs*7o20dwv+jl^4*#T^t-UD*}Bk%{V^ z*VeMr?wl{@K@XEC0soU7v8C5;>194#TdV+0uPNmMx9)ioARbQz6CgUIL?iv<#ZH7P zuQ%)lBeN9Y+@WfBSehVsuAMZeKiq{I zIdNAqn8{F~NX{3VLP-I{+`K((d_oy}0P)RC=8dd+0m@2Su~4qsg#7!#*C?2~BljFx zC9G>jNs(as%_Q%2Gy3hn%*ia7iNULV&6$+55-y%o;~xKgRy-;uoz4Xur#SCfSjqlWsllKFaZV# z23r*z^I&}Rn09p%F0wsU{J5QHuiWzM#YFFX zJ2#8(!hJg-Hp7LA-#aZu$Q91fJcU438=1k=)DeGA$Unp?TJ(17uZ&PG8u@<|mF zmv@)|~XT=~2_-D}aZQuJMnHwk_TM z5f)yR6+elKgQO>ferX_ZaYk31qn~ztJ<%IWXA$KkX&~)>fbhd^b;c;S!G(Q*Nm zM@HH(ep*A$xA?_NGW@i0><+3M;D1a2@L1Z}&7Evb%V*BWcb^rbCnmO~w+1|*pkP&9 zrOQHovQ(x3dOo9J9>D8S(CuP^P?Br(ck@29Z)`4LPR=Ifx0@6EES!lwoVl^`RiLul zUfC&;fRR%aO-w%Q3d@fq*tPpidO6M4k39H01u`&hQb{T~=d ze^Gua{J>Q6+?U)CswL(QC*6d&S+GE9I5TuQVD&D(0YSS7mdxxvcs(WgZg<~)PEb}n zCd{^%fMMYR|Kb{tn2^Q#D1K8yH3l%Y3kBtzEHo}n%s=c%nQ!9}j9tVfwR?^ZS3PC` za|C?7{0Cts&9<@zD73K~-m^h3vb3Yn>(8>s;`?aX`eV>+oCdvTQWn}eD`QtTtCAtm zdJAXN*2(EM%q(Jp0$9AHeYA^#h&D2k#UMm6b_1MHcZow=ma>;|VW#~}ydbs+ao0lQ zG$z>dy}90beTU+LdIcDQC@>War=s!t}4Xg%}Uro>RpJ(1MK zC`u?D5IA|b?<#8H7)gGi_&};v{!9BpIrTyaqLV!^Tv=!zrKf5hQ1={-<#hYA}tEg$oPE`ps#>r@5PFJ zWs(rnZ~p%$GI4QjREQ@b#@;gNbj&6Ce(a7+o0sR^Or%Q?I zT)URJnh6x8C9t>7q9kSqeul?@2IoE%4PMG0>TZl=$Nt?|uwX{Lj!h4HEJKTX=Vx51y=;e3r$f~s&A8p$rNw%iAupnCh4A7e zE{QF&0sC;5hH2fW=n36XN?!#0i#>*p%9mKJ^MluR-iWYGf-z#6qdHM1;(O)qe8hbfahteU^e2Jj9I~yat>m0WsO>NDT5f%<3PjF=h zNS4-H#<;~0C_0m)RxAE!9^6KD(|z^ii=9wg<#K?65@LXCQ}M-YlHE}g@+6s zscI#|-B7k0!LpPGn#_IgxxZ8?60p2)u-o&ELkQuT@pcSp_d%cP7GR`eVq|v9-YVD~ zuJ!iYbTHOr*_nNVgO39z_-msYLzUlx}LY{lrTQ%D{$-aKFXKGPsL)P>k;?DJi1I;k1BM?1RU zR7+YYPE^>3*SSW-WytP#iCXya0nx-tB0%!PvUvwKI92FtnqmsmmKvd zD5Wvqjk)Gm(?mo6hh^F8!tgNf<1k74<(}@4bI%)Vz|%qK$BYLQ@MT3}Q`O72--RV| z)m>sRo1n6L_qjG(H<0Uxq6^0Khbc017nywfG*Y${5g#173KsKb1mBRLZ!1l5J6Kt8 zrE<0N#IgGAE7!0uDUE|YjehPpg6L(|)O12q5f9-kIOV`Q38C!$q!cwwmGSXCt=z*| zm-)R{yQq}#iX;1{?G7FHB*p5aNgmuytv`nHIFWCA2f8n+w9>N-TtYfDu9C5oCDsZL z1B0BEbnlbD84nm{FJc?+^1Ux`)X0udW`K-(eiSMxv?!hM;-@*3Xm7+=m!-PAz@R&md9LKJ-(h9BEbiOnW3e z^C7O?<2kK2X+iq0<=JdPxPYEjx`tV7U5M)kUZ7fHwN2^j#!h$0%u6LeA!w~zqgR6X>w5Mwol5NlK)s+RSbd+yW2qya&wVhc?-AT#MVHod zhe{6#$Ftri|KpPa^FV!i#AVN0qqb!l(qdtvK2h3Yc4;#32q?<8o%SiC-Gahca zg*w-a(u8Gx_a9&WZaJM&X^H=xaU}wfY`qy$=j( zLiO}!ePOYnUaRRtRRuTZ!=s^QS3SP!^WQQ^SH)*_1T;LrM}`7Ad!w{d zvfxn{F;=*+UX#i2p5-F>6Yg{PN#&g(F8{#CR8krg+~u|mh;-4fGr^IZ$Y3Mh-jvI; zC>mcpC>!0wDS)a*#zPs4k-VYciC-(7dnRHfnetK2_}^0?o>O1AOR^Q2#*$E`>#_1!8P z37cZx0?}|X!vU+ZL@i+d%vVvP(6+r8MdTv=4Q78bI#*=U0Sm(KrvaG{N9dt}XWeqt zfj~3*XeAu<*&x0rPHY-QWW6@=q&R+juDEYv68Bkod>vc+3pwW_>r}3=4Cw;@iasL$ z+sPm#NY*BNl65qdKI=+JRH|-WUj?Uu61!sjZu0xzJxR!4zvH@Yo=&AP`|@i3>MU90 zioWU|fVr=YE>07hm2Yr(dNsAQ^l}HTTwjN7t6py;s>~)_8F0svz-Xb`t%*%8bJO^__nPREwwNA~kD$IpUhFMsP-Q0!APeRBdl{$yf;6l+h~m`YUXxRE zd@;)jV$-bQa)KmRuU~|gaxas)!f}r<-S#$`diNqrA<6uk&tFrGF1oopaHr3@TPEA& sJ);h@0gMt$y(4}^Z1@^TB6ujC>(gd8d=!HO9`1Ug{`^ses#W;^01CBi^#A|> literal 11341 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 diff --git a/public/images/pokemon/417.png b/public/images/pokemon/417.png index 6d7100f66feeab24690d17693a23b88a7ea78f16..02cffd1c73fc2577610b7e2165531558cf174cbb 100644 GIT binary patch literal 7315 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 literal 6481 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 pJyZThee8^@zrud!jH~}m`w!ec*?00DGTPE!Ct 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 AlK=n! delta 2840 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 literal 4029 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 literal 4369 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 LNkvXXu0mjfArWS^ diff --git a/public/images/pokemon/472.png b/public/images/pokemon/472.png index cc13377bd53d348a464d21746196a7b98ebafea1..eefd055ffc3c751bb92a2c4775f731f7027f742e 100644 GIT binary patch delta 13918 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 delta 13911 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 S@^*C$Mn*zWyy}}_!2bb!sawVX diff --git a/public/images/pokemon/498.png b/public/images/pokemon/498.png index d45f8988cc0bc7535198f893e98f6c745fef4925..f019a1f38b3fa674beb0ed9fb7a8cd5baa9e8760 100644 GIT binary patch literal 3718 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 literal 3503 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 z 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 diff --git a/public/images/pokemon/500.png b/public/images/pokemon/500.png index 9d388d33640151813f6c76ce641723a020c5fc0a..ae842c38bcd3bc6c52f356a7caf4e2770f968a2a 100644 GIT binary patch literal 30150 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

    20#0lb3{_5J{qqKwU2|zP zJR~K>a2@r^klAUaoK$L01w!TY>p^`!g9xe*`@qT#7z zk&63n8isJR_SV?1y+puqf-l*%*)3)ShM1uG1<4if)LJXG+DQSiJACT$ow3o2k^1?f zUe6mZ5q*1;y99vPP`@I#@h#5I!O{?WN=M^1D`8Al48N%Xp!3N^mmgS6T>C(jUcsr* z?8Y(fAQ>QtE-GB)u=M*j>!Q;}2oWhy#p)#MD3Y*L6>;}}EfO^(SN|0r=(|BS;~0D3 z4RG&?v`de!SATK)_oREcx2nLO3@{@0a&w#MUMyI3RDoB=X(bFVT}T0C1fYJI z-}z+Rd=P&V9)-8EnPG2pkfNv8M!0l~919b`>ZAr)S$%Rv4`x}kK6T2G5`S2u9v-f7 z$nPAh>bb!Sa1Yl#xs_}sOA5L9(vYY@daU52hiD}PQOr1Dt;bO4#YN#`bJ8RvMNbw) z+QTm2wGyfU=0`vsz-L?1VA=2Not|5Amm}PitomH?7S*Ak)&#|!Rq#0w_pEE|t7Kfx@O4AVS} zwixG#4t|s;!Fj-B^tz^w!LvcSd<_dwD6t%e{e3kbr|N4k?KgctZ1pxmxY`b3Q8fu* zm7Kp{4Y~~i8 zbgz~&#LZ!K(jk8ne;$Klh0I0}-@h&! zSPAPB087))e8y1%xD(}K*-Ud%2nhz=?QTMvEPXc`+bTgkQv~(^cU00No3KRre)~TP z4&4}67B0u_if?TvwFpHK?BFI#LW?Vkb|9zc6PH}|K*vQO&%|PX@9o-|*eCm##vcFU zm~1?i9T5>{tmvRgB3YL*L#%NuR<65K1{aK};BbDBSc5^+YTGQJIdNI`=zjIC!^tDNSXZ9 zX%X8H&?&6BAY)YEJ@GZw8@w8S&(Kvar8iZYQEkf?&kk@7{yWz*hXKFIuG?0-_obTQ zkf3{~Vu=TE-T~zvVw^1W8kD9V6}Q*bkO6|iF<#j!hogO8MA{_j;I?pMc(Ha6!rgK- zl%S&@%!s*d8^GjZyw7t_#g5R(0HW8JTeF@~$gjDx%iL2DG#V)xQ*wiNO^bM72!BQ+ zmxvx}f_nNOzqZcK9*SO|k;bu8V~}4v?q|7f5)VDvhYGRK2nI`aeUG^L79L literal 6927 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 rl%QaW6SR28Q2Hqa^!jA{;TGf637%y}RO diff --git a/public/images/pokemon/512.png b/public/images/pokemon/512.png index 94ae881fdb214c10d4e7fc4f3bc34ea374597e95..58870d253cb53b4e7ae14afe63c2372349753881 100644 GIT binary patch literal 11241 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 Ym2V;1_WXqD-w8!MZ9}cE8V-^F4=wyRH~;_u diff --git a/public/images/pokemon/513.png b/public/images/pokemon/513.png index f8d6e6017de4837e89004656915998bc0c087097..99f2fccc23e3628d7da42791fc981d54c9102316 100644 GIT binary patch literal 5809 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 O^r*ko23IJ32>d_lwyV4V diff --git a/public/images/pokemon/515.png b/public/images/pokemon/515.png index 3dc40ff122dda92ffd895ed9fea97c30e06db9b7..e61875685447e1efb3462b799bcde85711886cc7 100644 GIT binary patch delta 3363 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 R!dd_T002ovPDHLkV1jK}REGcn diff --git a/public/images/pokemon/516.png b/public/images/pokemon/516.png index c13615fa119ff571b0f4751b9e65effee178ccfe..cd4d5d6439286eaca4772b40dc6df20cd2a7dfbb 100644 GIT binary patch literal 11814 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 c2t;6e?Z16(|H*VHa6Rz;>>$~5%<0cuB6=>Px# literal 11095 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 literal 11191 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 S*H|#&DF!KNDSno>iugYO@zP8H diff --git a/public/images/pokemon/535.png b/public/images/pokemon/535.png index afa9cfb10ee242ea8b145ab3bcc41cfeaf588c7b..b8a82d204c5116399750dc38d80fec1e24440a97 100644 GIT binary patch delta 2018 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 JRLfb0|1W3k-Lz5oCJwuM;e00001 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�$af> z^VWTVE*Qf2MKMbcdy;fHZ2E22s-Rk|ZCzm*BfV6E7?TmFM%0U^@vt&li2}Ai^7DV1 zEWVW_qZ=#KOv0~n)roei=+S~j@0l)Axs<3cB=E(X*_%P)GIkJ|=xZe^08GgD0v7%O z4seI{Ddr4=n>p=??FcIIn_xEBxNTE879`(HL9ttCKCzU!QH7uW{T1TpZl5t7u=yH_7pZiUE zU=OFtk1@doIIYfZqWQD9ppzuZ?+~b>FeoQiHS1APZjTriA;Urp%!q2nG(;j_gXlNZyDC~GCml1 zDVAu!64v<_gv8_#&uzg!*<1y=td5EbkaZfVfu*fWlZSA4R&q4$%a0VNZ?x9^T0P1c zTb2y6#fjs3jvlMTjStEyP zh`*V{uhYMU8QDn7!hJRbeu>~bF@`=l9cOYD#=5AlGzPNic77p*I+NXL9OD<*>w8;h zq&Z$4@~g)jS?h_rsKYfep%@rAbsL}YP1>YgeC_R-%V*d4_)xSjNz{8N?E;rsj0-h3R*{6xH1Ep7e}%X#(f9vDW4FO5YHJmzP=Vp5n1-s8wDJ3-zA%A5SrW%#fX=F z8$rLi_(CgtL`X|&OxyTu4&HY$AX%H@lFBtKyeBizKPbTB?qH%F#UL+7;?O{37sl(H zG706B@zvHR_>r-DaxUGTGXZhJaUag#&Fm3swYc+d1UQf*$4A_lN|)Yo<-E`H;PfED z2F6mfrgnIgKbu!nOcUz6vdHaZDipY;z{WDiQZLP>9KQlC8##+!ETPX9VC|&8|J?s6 z#1D=7!nIaj;e$nNTZ>km9@@=o97BN89OO<{Dmo8u!e=x#<1_YllA=l3O(+@VG)Kg& zSD2UFz-QU@QK5Y)k*K()#9!zpWZqV{wmri-@ewR*3+0;G%MVWx7-`5QWbtohL3c9 zwyk*CTm3IPDe&R(FDiV+LL)t*&H0>#(-~az7YXRp2aoTHiKE|ZcGA%LdcTw{uLvD^ z&rk~xqO8;HvVE1Vs*{Zp{8M#tpXzX|Qzh-)7Bgd3b`|g<>%^BanmX|Yr@?MK%05&v z5&V!+ka6q))Hao4gf9Nz;vv=mE76Hmff~@_=>IGPOZk$rTL?>K61b+bBk4}gRP~Wo z?~!8yjle{+U&FGqGR|f(%3sG_AC6MUnrH=pP%Kwz)gx|*YjQ_tn6z-T88vKplvPv^ zI1!=m3?~gBiya5WCb~gIBq;)0Gvro%AFC|VaG_Us=03|!f+yFLzgh&&xNCBDDi-LS z9u(xWRGQ>Zi74qMhLl>#k@`zrM0qLH8T?d}vDKr#^Ytp7YAhDXTlcc~V2V{o+miZ> zEFtt10@}ra2LP8hDjsH&V=ynrMA6DvRjY3F0Y8VI=~P(^?66$URK=t9O-}ix<rw*He5 zK3SM^8J{cB7r_^3>N@d_(!qkft0$`Sw%v`X$QqLjBrJro=FKRw-5uEuQgeP41>1bM1(m zuk(`-lNN@6N$Mr_s0M)Q-ri<1^4_GAuM8p4Z?~*_wx$bAfmw%|dp=*Z0)w^^d(|Af zwNHwW4fXEHk}U{s-J|7Dahp4AUr0fA_rI{|9^Lu}Bh_^3g3g7CHSV#D_h#L>$CM-3 z%*sw=ij&qZzB6OJ<%uv^l4Ato~CTPJ8VgYHEl85@#dYNle8Ubym=4 zA|xyLmQz{T=nkUB5(2&nu{m!BQzKG5BaN%q7*L5_E-Nc6HAfSj50ilT<=u$e26WSV zX5im}!*;C+QnRunu=FD-bbS2k&JAb{!M1Gac-r4$Wp(uAIZ1jE6fEi}@9D*MMJo4- z(r9*})kNBJ=mWtq5%T_!5c0@9j9TZD2?^p^Mw)`(-Vaz{KgMeh^va={u52HQi5)Q4 zR9Mn&P4c~nTXsQezt%I|ToCo$V=zNukXw7Iw@Ov2=9?$fn;d%4GVB(xumXQGjRRib z9^5jxk+6{$NS}KY;t3SKYJjshv7T%G`=D5rNNc7I0I65fyU>c;m>#c!d)4<#h!sy1Ej35_oow-yo zTcN<3x@lZBJ%c9Bl~ECHwdI=~5g@(jH#()<0U3MqPba1r9c+{@7vwZ#)=A3O&;2Kv zlAhpbbK%fcTWb|igPkfBoI(yi9;q?RpkP94H^@lQRF&E9Ekv*)KC7tIfE zo{-%U1d}K84#>&uYoq6upHA~%kvM-}J8}OJ9!rx+Q6@ zN%)n})9%RRZ8=OeRN?uY$|NqR>y3D1=p=tM#sZT?h_Ys!?&n6vjPiO(co7$s@}|R6 z&hHw+EX(IHr`Q{vJuS%lWMJR>AX#6 zR?4%>%z8*L@`H}AxnCWeQxSbgM%bf%E_6e;G2`e!P@wPlFPx1 zpEvM4k;SWr9t2!NBQnh)t&9|Vcup{dn}`GksJn4Jeg8M@KKnRzA?J8At*GMVq50?B z$SbHMbbC6F$Im1uXzR7f=lcH95mdMd-Jb0ctw5Jw^~uK=mz`9JeNM6e#$HyE@}pJ0 z<86(s8=jg0mktxv6(0o>NJ=2u@N|#dP?(>ey#dB3r{hS2=7io)mnwrhw;a_cWO!39 z(wea8emYZd1^vCU`lXf7q4Vu(^;oWmVq3RWZvhp@MmD)8;~Vy*WlQJ! z=XDw1=XlfIu`{`QwE?(wcp5DFb(8sce&}Zh+np;g!9sfsogq?L;x?wO1@Gy9VC3)z z^OuN~rrFrxZ>vr0UX*KRiBY6Cmyu3Uj!AT6;6c&nWD{Ap{{!J1lRi zWwU9$xiOto_ypZSamDzzcFzfTOc zkm~=d==AtVgIj7}wa@QEZ9UM;6HYF@u`L9?+};Kp!VGK1+b?a-*M2RzKdC(odcHG- zX-4-ozmcxZK)DHLA)4C@6s2p)^7<-|FvCN>D!aSQ^O9FeO3Z1r?eohAY;&5cl8Bnu zVdPI}IyCYdLTJ61a2x+<-`}CDo8R{(VfN;GtBi|+-!zL^uQTDhu3H}YCi*|cqgn6V zBVRL5u_>-b&_+U2^In8=!;H51UJYFt1=8FIZs?%gbvd2Q4za6Ls8!J4C9k|4{|}Xe zrSUk3oBlsV+`s?5y>}Sa|r7U_00lrX`g+7HC*h`T|?t@mRIC8cG=EqoG#8Gkx=N>=D4Gv)U-zSlF zJR1yt1#SPC?lJzPJApFXN+9BydiaV!AnJAXnKF)%xx1C~fNtl=5iXS~r2fW1K%d5` z(a(ZNa6ovcX{~10othk|V4xQLY;W=-RS-+g1bg-KWWTfimC6!stn1(=|KC9~-rw|H znv>8lAS8)XQu~+Eontug`j6d9zMIwhORO^Zn^~h#L2176*|XNZTUs;xQ0`V<+?Lxy zs)Y4qs0YhG$T32Rv)CiH@|X7dG1!W&)c6MyO5DYOEF`Se=VuyYuxzH>@0=@Xv_vN-X=hco(0W z3}KSoHUo19!2n~u)pB3aP#&jpnR;e7;yaVpn~wC?$q(X7(~-mPRD!(kr8cpC28RjO z77x{ZiAXSgG+x=@Wlc+ze1B*+T&2RYJJ_QYoEMhXk-KptyakFEMg0eL+US1Z>L&9< z$XDlpv~+|C=SX*0VK5CGmetO+S{WAT6m`n84Dm|(WY5Yn1euT-R+YG_wEqG^Fr}`DnLjZ{)jt~wC?cJU@@8N zV}ZZYN)`B;ANUnID7UTSYDTHq*>2oqdYEkyB$oI--OnOJT_R0tsNa7R6}fNU_16xn zzk4#j+hbUW{#po}O3b22G1tdk5t}JMdsl8Z;q>-3qK9yT*!rpnm^%x&!Glo4-t`6DmIEoD--u5RMw7aVjtooS z((!lK#B)mGtLS2CC(L6yDfJ$WZMKKxU$JTfs4Z$j4XTD#PLN@Ld?~A;UyS4M0LLbOw2*F|LvXG8t5mxf~fBx@v^@LZW~uVBa!O!H&y#o5B1|J`g( zNwg(D1x%Q>V=0$4Rr;jw>B@HnGV7RW2e6A3w`VaHKv?1RZkW z9qKaWiWp34vQIwYyLj~K^|KJ!6rjAogkTN`64XMH9+jFuk^RFIMa9#^+`nle|FK-7 z?h}Co8*AvicPXe(ahQ|45E;1+>x5gG`oQrwnuV=^7o2af5%TV0tfs)nG~4S7)&dS- z3oA?hJhvRb9{zmG3oFo|DF#;NK@4X*K3L&p3EUrXx#5YTP`BQ1o4%>1+0d`VymF9t z{!!9wd|0F##VR1XZ8n@%--E@=g^!wXky3u6r~3ep1^3YUQ=t1BA}qJe$oM%GaZash z4Mo2f;$?l0pG<)O=`G~p>(i3}smDK|plhy+eGlCdc~*?w`OVuobOHpv)ArWQ`QJX% z#Gza5oz{OP3Bw+!=WU=mXLzY|@F1+N-du?~08o0}YYC3B)Z{(HgrSSeduraA5Aw3b zovOP$boQOh*b(Yj4YO)C2+7dN-M{^9@9nu8<1B!AUX^WT(B180-#U))=aK*2_wIX_ zV{bGwQ+o|b^nR`KGLgbmPI5&2tiGxp;)zokE^2b+eSSM%ODH$~{1DS3jo4l7bUjum z$q27UC%$2a1fr4d33n^%At;9efgY3@+yN)^HBOuxSKNpVDNrY7WXTfN5hve4A;4a) z<*oxT7-f;VDw@sgCD}JS_~5_oeTPb*`GXb0iMAn!{wq4`_!ZHvoNvy+%45(>-m8NR zcpx^p*&^_ZLeIlg0J`T=yP(2}UNF+#D-jy}#K2uc`e-a}a<3E-xf^Yyh*P3sgVZ<} z1pknikl4&rkd8RJQohTB>S;ZzRrPI}O{9k+)iUgCctp_d8sSfJWI9`{jv>~+737-K zII7nL)W@ROzSmDX1saB+isTU!hcfgE6C=Ytz121-T6Ohm{;S(P%y8}o(__e>EaFgT zopC|n%elS4MvH`T*ei;Aw_uN5H|GpZ^LGtKEi#MLg&GM`aq*n`d?52o0!)`0Tqs}T z5@<*QPOCaHBXdQvhy(jh(uRWm;E~HXv)O2ugI(wl z@oCT6;jUR-(nAQLkirTs!|1+=DE%p4$P`bZ1r}f0H;Vv5r(5#-F zs;%sg`V*4Ra*P^xJ|4Huj=;ZNJQ2Ae!HrJeux9XbHV$RzLv%Kab6aFXA1c#b9@G3j z+Nm+i?o@fy=*zkTV$DCI784C$2d#*I=y=6+PG@%?|CYkc zjqi&8S`?o(P_#>~{DPlDGFghK;iQ3ubNLPIe&bJ_1(RM;H5$H4wQ3?npuG*Bg_c)Z zS_*WM0!>u@Fw2OklQn5s(=QR>OOJ_5BsYf7-7WKxV`WF>o%VlhZn^@whabA{qs@Pz^FrS%u$C>64Y*)81uz z$~GWfX7&|va(7nRAOuyUcWOAiVXJ<>sqF+dppQB9*^gi38(Rs2g|Tsbyz1M63aC5& z*w2Zzi0gEBN8XiYOLet|=^98uSW~unjS9Uaa>rWH_9rgqtO*MFtcN?b9ALkd=6B=T z>B#wZ-sg6oBD#ICpmQ*KQ=ceJ5>e26HiXr%9ksgF?)Zx|3~nM&lCz5{Y`zWl^%X@V z=at*gIT8}*t>?~DLT46&vO-SQSmxMKP$xOJeYhO!D^cndlW@3EPe=-wpn|#dFL}r} z#ftdKxdRCF&L2m;PTeP~XzNz!7xI^U&6!LFbNhq0sNf_e_B44~(r{jmYyhT|@ zN@G2*FmUzn>`wlqX@Eeb&z$4dEnI9&oz&rku1jZ(4Z6a*e;5 zebt8@bBm6izE_0p@@{_VLrweT26~q1h(riJLp=I-4Cr6$OYFuB7kZ0a@~=d~L_I@n z&i-}C)38@epVrrdk+2t>PrA%p@#FN1w(X=={{DOBlnROl4Sg)NB}Z-KF{i-KC_JHr z9M23M2||6OpnHAb*$;pxIdNmERpH02g4tP2%X;D8=e?|DH8=pow#xT#QwisGNF6~O zXhTV?&*^ZJQMx$>TE1!X>xtzo(U1$*YBMzF^1yIkkFUSRMdwBseQ1sS5O{rCle?*>`#lWm!7a;!*TmxOOba*?e!2jF>NvuYN&&eW;7 z`Dut;7l+*M0XP+Zd zA}Dun87)&=5=f$?IIa0%Ovt^5Z^$*0eAD{p)UZy3N%d5JTkoo51#YoqO%M52^d&pG z#*}4}*l&<}z1wek>%7KI->XBE0W$lIkqRaFQhR{;5~hDg2bFeDB)xZ@Xt%dS1Q-&! z6eFbvJ7g-6>G?XGB;RD=a1>#tl-Pxd%yc4-IiW{5+-)VcAI6(+0@WFUQWeoSRVA!> zJ~(hLM^r+x`k7&gXIML|eom8wKBSCxEJob~Tm?e(XgKf2!dwOVdamggZeKwpA-OZ1 zqQLTPyu!~hEA&hH6`GD(nNcE2AT#R8=KCFo@QsmQ;(jEq;I}}IfL`4ooJJO$Gfx=7 z&se`?P2oP%pT2*#;YS4aVtvlh^$~p75u#K|bb3tY;*B=D(pX)b6nq2NcHt}%KI5(y zuF;CuibD|}Y`LTWSVK||JHH~gG8}rgP)kryv zqmTf43rrOdKbD1IPF@dvSp}m{;OHEUUZNP%6D=Ph5k37^Q1L|H_{VO#u;op2 zQ5dp|dneF~!P-Ujn-$EJaDpy^Jc zw(5!bB%HbT$jX_;sG#RiXm#|Cq&eMuJX}pa@pntxUmfZ3!xJnKQDBPTF9A(2u~gBg zhgT!_+4-$HgYw6mYoFQ8fy;ltdEjQ9RllaiBiagGtmj@tbT9- zW>37rQQxkp3eyYEy=TF>EQ_M<&QvWt*$z)gZ*QOKR+8i>@>;p@lT8UHzSJ3<$l_Uu z?y_vm%MqzOoYuife|l5xpIwhx|B(SD)L2>xirRf$$&gzA?u-p^$B&igpi=>3nMm_k z_a$kTQ-g}+K~3bsPTO>CCP$M*dw!W?Qh;}={ADVo>FFZ%drQpFa$EC+sq|Rxme#Or z;g@au41YnY5G;gKLX6OsgbuvFeG-p7Ak$B1o6NiyKY1zLhpdl}<+u219VH8$w|i;! zpf;M>deOg389XiLo1HK$7sZ+Dyy2lYC1Wc1#f{mxy&Bkq+35LrkFU^fjOF2+3e(&L zDP%YSh@43D`zCt|^|bukgvL4^b|ePm+e3v;=ROIx4XS^cGI>g)iQb%HyJSO;{Ph9S zT}$d67>psLKHBQOTCJ}-$3)@c>E(BP;}+{I8I~lz)68BHaa65u@m#gf3|1NxLAWz{ zYwjbP;#m&HNDixXQ2gkcp}-NUWqBny7D4Q=z~m@7LnI@7!MjZ5;raOG2DN^)O3leE zx5BFOLBscLm&{dS`ogSd+l0 zw&UE)Z`Q}98C8z?5^!;hsdRLeIbkw!d$X{&mZ z7$}h@e`Qrm=%NJ6RINj{l#pV4xV59kMv552nP?&vHv+eD*pZ!GrcYf8r+2xGe##JS`E7+h(Xixk#^S8l)@zc$3aVO@L_rVGbsf|bR40B2YOT%}^RHcq0pngYr zThZ9)&$Sw51*92)oq`Q7hhi|40f(BHTYqWsoB!+1tj#a<7`(}q=-Mm&M`g=xv-?oa7;T%b5-u#8KvQ&ccAnEWG~|9=fph(hgL3J7Gk!M`T<*yX zyfn3exfKceGnj}SMY^>P*@d19uEdMx$r8<#e!_6+`xS3@VGI5U@nyW}UjWo?RJSbyRh*QOo_jjJ&J)goPbvW@eld2@0|c+>vd@ zyEX{%SV$9gfo=_`WW#PAO`MdCEs!LE@TVDY-c10x$dMRja_QfoHwK=a`nEp|Np=Nm zTQ1bFfCQIAT1ab)AYQjQyaN4qe@iFoR01yilfNVMxM#C|I0l9RIsy_LeG+ARpznqDL*T=eNP;#kD^xf9 zOVIk~-(Nc%C9TPmu%6`PouF)Ugt}jPJ8_*gD?@+m{CAo?gEaP|>HHBB0Tk{RFSrp`n&dq_Q-OTV(h?tr&OB>}K!5 zqow&5d4zE_qsRrojgj9!vjaAf&Vb+gV3eSM#-x-$1enL@cz@1$yevLpKQ066y+g#a zetKH-qq&(JJm>~xtdsT10@=t0``Y|VsQ%v1w{8bXL)tgq7R8+?`ci9oO*1FaS*oKV z)GyYkl2tFHo@hp>5>K4{-;jh@%Hr@!^d1kQCmT6mw@4-IOax=Nw0_ElwTJVg%!AJ4 z>#>ubChfIcL*mO|rT}$AZjf2*Kn8haziQ)RJRO)=Ceh0#s9D6NkXtWoXLxOkC~mXA zV4yxh`II$o0qP-)pJ{^A>RF6U40v5Vn^QD zDGnhK!I-X!y%msE;_9ejOs0Ns*B-FI#L0CIBBp)>J*h48`e?L|&|{on9~ z`>(-R^4Z~|^4*X2-qdl@VO>wm+*Kyv*L{3D5t|vE)Q27a0=OtzJ~w_XsaLKvG0Ks>bV%@ z5xy~&gmswV{xXwmm>H9x_ijm_-wXWt+f+$z#G!iU-ATCOUjQhm0AiUM>g6 z70lTG;Ee%G|7M2?I!ioU5~#5r5eh_YhOZ&g?kQ@RF`hlpJzX6w{)XgU)tTO;&;92^ z<1UUBOC^gXNgkWJOHf&aI&+Ufws5ULt2R zJCrtG9m7U}6C1t5F%;cY_GrpsWX3AsF99rB5<*6YT1@#^X~i$E!=@#oQjb3iZ`3%D z@mUnCD7WBs%BZ3B?n{I3fV04|x%?g&PgV=l2hU=okZAI5DX_~kh#n=hA4|{Z5c|izf5e+^oFIEa zp8O7Ls#_{@p&vbVE(grtTLqle-JIgkMUVctQl!0_1{KmL5>ldEMk<&&tS{3D_~MKd zzn@zErU*3!%g6&CMFaw%X1hjN>lwz=gQJ}3c`C%?tMCVdJA^VDqMwB&zT=`|SF-vw zTXRg*2;%ZM^#ch}JP%9o(ac)dv>LSN!*3zdC)(0h6nRsPTEYJ6qe*@cv@-pWPKwqu zCYmZhs4q|>taFHlYiS1wx-zU-`qPY^_@AARv3B%mD% zgy+Xbn16aP`aAxagL!E_##4@AF*1!@&E_w~NjH=X(1LpEx0FGRp+QO+HFTGnp!|#0 zsYsuuaF{c1yn^aG$}n&v7(UqVNLNz)V>I%(INH82wr-aKE3FDjdcfmqOMoHAdko|U zK{ndZu=7^+ar5TZpvwqW0!uK2LWjEj3LWt}j1Nnt;lI(u+WR`toeTP5K9-e~1dtiQ zSEGLg1l&jXxgB#yO=twns`epyDkRGwOQy-43m~6#axc(@%%+9{;ix9(?ua0PeUek5rzS;lS1F{KNHEl1@Yco@{IB5Sc{aNz(SddOr|6lcb1$o+h>i8 z1qHKwY-6jo*l2uqY-7=;y2g0&Y(~x#r16pk0G;PWV8*)hXI{|knt&E5gr#0 zvVaZ1RA_+QbGp{F4V*_YQFd4%bZ8hu4n0D7JKkkfb}Ec2-C=XeRzWh#8Ks$WKs8C~ z@sB#hn6xZQfe&bd@fjMLZzjEh!CJozQ@JhG-mz}qZ~*lD;_a1Vv!-25(GC{WC@Bdp zgc?PLIt6(%`1cE~m+!+9Y*Q=5F`&^KWyR+4u9hh2mBdcBP&VeNHD(gtdmMvASI)P} z_g(!2RwGXCAFsXa?`54PzLlgNxs)mHKVknA`FBYDIZy@JB@ST@ENP&QI=26?lQ&Mh z(;(C5-O9W9VbYx#7q<=Nl;>Rjcs{n_g7bZs0B;WC*PZ$?CG&XGKpV6t62jYeY3zA+ z%^|W9799)qRym<|cKtj-kPZ-Tv2HNvRGPS=+AeLEfMfykS?zq<677K_|G*8f@dlLnJ@96LM}Z_rbe` zFJ}nJb5mhYpls|(w%tRbJQ7MexL`>kWuP2U2XP=G&}Hrk5?FWw*o5EIT9p38ux-i46Hy-!G{!f2oHU?|2>)Ns!yR8-q|UWW!z)R1Q**Qls~pL^ z5tJaxVex3Y3Yy-t^h2h=(RCp$q=2^6nudH#IuFW9`Op!D*jEJOV$I)(_=s6|p{Qs| z9o9}VCQ7bwoExS#)PwZ+$wcs{NS;V82Kqi5g_Lt?ex;FsEY?vQq>s!QZS`X=_1h7^ z#%X)DM0ljV)saK}Y5Y2X{K@QHe9fVQXS!>5hI2L1J&oJVGa+gi9kHi1m>2o~+A2AwiCzHlr$B{Q3G-aKYQGFA-N`!%L zzjoeqMUD7jPl^@ldb=;96v@1ojpF>sU2kdikH8v}DT6`{q4Y6yh_Q>XD8B|^NV)NMvmr9NEx?duD7 zRw_PbS3xYDf%D_-^foPpImQhRc@m5#h~~`e3f)5Z6#anXP7r$~U$bw-m(IRSE=LOV zg_E;VR|-r(TToxa_;LvO=0UE^a|?!$76X%9-K_BNI@?X+Ai+2NoK&$ao`&+~Vsyx& zj@1@Vf5|33x%9^&JO}2jFe%%mZ{jNqZDv{YgZg zb~JN6R@jLRvPbA!*Fr1_F7Ti5v>Sk;6vEN`A%09H*=G&ZmG$ejvbGBHozc$Uw@q3E z9m5in)pLP6^(Nj@aB{5O>yw>oA-Sj;&hl1#f60Ut3S#yg* zSU%L5iGMn8y^-t3^g&I)HN2U@6T3yYsP!+u(}04uz0|mQ_yD2-%s@hw>=c-4WrC*P zj^v1&ck4p8I9yH(RE|?I0kC7v`n%HYQsGe60vuO;zeC6&8k|GkR-bK--yj+73&&^S@$<85>%7_AYqKNBTOr;)s<7z%^z!r8PM&+2snRvb}@1 z95b?b%nkHnB=c6xMpJI2bMnZ@fW6xk8$Zf6#}2^#;y(ll(B?(PrVW39-4LE@ zf!xF|F7>jAPR#Ufd~ydy^U3GKAMqKu%UifC@{W2Bl)!0}mHhA&O1JZ8(T&fzqc}>z zN~F+AxzCP!9&VeQ-##h13_lp7aP^@x9U6yliWg7K3PODr}&P(7TnOo8t{A3Xb~gZJGDtwkf|+JsA0cfnRYt3xCYZtP)gJP7y$v*Uu^a>RoqP;zxcrucHVRV!Z0qi&A|ar z;9pn{3U3kVLL$|CF&?z5>gqj}hksGgkP-xO({pl~t7_q*g-!;h>4JEVf5Lw7Ks~_t zfPOb^c;?3=|J^R=7=bT6^OTzMrdSth(vF4*lsN@81x5q9q_?u`x_jO$>FPh!|MO z`4PtsW;jT^cN3u`zXsuDVKtzc$CLl!>{-Bn|t|gNJK>e{BgxVZhSIJoc)Y zPke>u8S5*yLF!+(8a*x4BfxaZ3ngCih9EYwyW=dX`#w^K+WPFM3AA(h&I0AiF`MVL zW(_y_bT_#R8pkraI;Krs!k0mpq9YfNc=VdvNX$N453I4)uK4U{i5@IHE8bwx-xxpl z`yPx4T#2)iUT`*@cw3B48bWG#d?1g&yL?yd^qKcaHmMepWxgi|dLIe~3Uv)6-=uSH zT{vm_=&wAgz==SSck znxHZb#L#pfz!J<{z$7}%axHaxY{9HTs@i|V-J{qHw@cC6EMCl#MESSOwQ_$46;B+< z<5T7>5NEGWFO#DFOz%+tF76f-M7I$?ZH4m35lz2LChFfJCTyVV5O%S?gkouBEBBXt zC{2>6MaOoY7P^=42;6GKMW1Z!z*02DloxrSZ2FBfH-^FLPne^2BVF&fgwDw93iIIi zx^Hx<#e%p}q;(v+*q~~yj><6#B<9$Y;67B}aHP5^wS16-V#tFwsU99IKmg%b90CI3 zRZdb&BV+ViOuj-to|T9COiZkfcgV10q3nD-`dsH6N-cEm#JemCn+3I#LpM5rNs0uC ze5DbnCN5xpE~pzj_0725d$W%6N}c(?SJyJ*N`?@cGFY?QYBRu!hV(!QjEdD2 zOT}W5FlcK6H2&wnmJJDj5Mx>3vqyicmMzZ literal 15606 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 diff --git a/public/images/pokemon/554.png b/public/images/pokemon/554.png index d2483d4cec7b1b497d33421f374378628cd861be..b0c4bb10335f53c7b2b869fdbf874ebde182ac24 100644 GIT binary patch literal 4298 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 Bn(P1o diff --git a/public/images/pokemon/555-zen.png b/public/images/pokemon/555-zen.png index e94c779abce45d41efefe196dc67e9c5e30ecfa9..48cbf58a17a3b1b889ca5ab22381d4a8c479c094 100644 GIT binary patch delta 3629 zcmV+|4$|?a8_pb%Bp3m6Qb$4nuFf3k0000gP)t-s0000G5D<|sB!843pECde01k9g zPE!E?|NsC0|NsC0|NsC0S4!Iy000fRNkl*F zscp~1&<`$0-^!h&gyZbT zPCt+86LIQON?Z|N46|jex=uHkqptH@Y`dG{;hTulA8i(~shY&~6I;tahN5*jrQ*82 zT+>Y#b1QXmaDU0>QhX^+>^cuSuy#z>>8GQ(9kLWM(#RY(3+3kTuG|9-fQul^EK8gP7yJ2{-=v~C~lUmagMB2 z*QK_ux;}DF#h5H@J*?>PNJsfzFVEjBMFF$_K2dE zCS_~<+I4sX96Yhn0i5ioHoz?N=PlhzjJ()Dpb zbKQ4-_J0v^E)W)%sS>r^@aYwp>xf)8@6h#D95h@bciK*TZ`3#XIGbG;-&@m; zA6hJw&%RQ$XMbX}9`*q)0n(AF2F57S|Rmfe?8UnrMyFCMH z8@xQoKrCo)#(B~A_@&xaSD!N{4uJN4nD>0=uI7_`)49gfUN{E%lJCbAk6(%I58C^; zTvj6VMR;Vt-tUTWthmW{;`6;oO=-Iifqz2!uV5_orAT|;3tOSmkx#`q6E}%s0ZaV~ zb3N=huHlhNaR6-+e*`V~AHmp9?K@-?yI5x|5r_knULjrSO@a(@U4 z^Va&)sYCMKC=S6*o~S98dftK^z@EnAkYfkv2&6dA`oWs&1LIPF_e?T!DNdcofxH`a zD0GA{A(@IvT&hVgKm-t`&f{R-jXD%M(kPB2ObD2*DIqTP{AHXA9tZ7J>Hz6TpAugF zJR*!s0p2soh&{}>;Bg?%!DTWX>3{En4Ktxp{$iGLsjfsA#Te$8xS2QXPszJ$56ERk zRbiYxt)3Hs6P5Q6jAE@O%X{>PKpqSo1`-13YQ~w(axPWW6rhi&% z#(Qqjj>SXx9Tx#H>TYr$tX(&*JJdllK-}!KF>jXo#Q&8$N=<)HQmALZ-vHxGv6T7O#F zxSSJ>)DT9PwUng#giCGkx&b`=B5eePd^;k~fntE8;W&z8ei3GiQ-A0sH(1IU8p1)5 zI!BLS*Ieqx>1Dq;XfJu3X*z3bA;Qs0M7h+j`BA?)4DE4)j5LCiz6EHmDVK^X-eU?g z_Wqo=r;-s&a5e>9VJ>yTd(PwR_l7gIr_3NGI2yUaTVE?7(E}|;JZ#VT7*&E(J)c%6o3`_wg^~V0ae@AvGPYVO8}R=M z-5L*Q+@IeY{$tly`tx^O_5kf$Qsxz@Z-X%Vs?voOsm{zEUy9YdB_#;eNd3&)+YZGo zEY7wiWnZUyJkU3u^FVW2r;}vek`gzhIJaw~k-=5htRl6~oPTvo%D5rbXCo(bvY#Yj zNI6o%MwaZ#v?29=x8bOuWm=OSJP60FhJ>(@6}t+y4XFyOI=KRyPvSA|mBl=~CNxLNMXo@6Y_O9S~5=v21uaxkqZknf=SCl zi4sb#`*1u9!GCZanlU0mFyw0F2pU1?io{t?=tU(ImLV>sj?`X>(*+bK#Bmsx!X7a+ zg3uLOe(iCIFR#o`}T=}BtV3=zh2dWvhEh$1q@*(XMk`*bB>e;8GqN}DF zXZ>-OX*F}WN0FkDt)nYKMnZ&q2?|+4*>{0}{G zDEFv6uG*Kvy!%%cFd-7*IPQnyxE^O@NN7}x?eu6HQZ%9BduLZ$zL^JB0)})tj*H5c z6d@xnYC?i~LiIgFeg_5-65%tqZwnl^MkB}kI=B#mghETGG_x{0V6c8w3+`m*7>;v6 zK_iTexPQ!K1R+hRJKx=;R#it1`&Tn3;W!zMFf!r_n-GLJAs4!Hy7Sh)pARJB^qCWI zoKw&UCnK(NJ0iphfjOpE-DwHapuU+WU`P#(Ffx)dl7u87cSt*LGo_+?tY=QdagB{I zG{VV?A?E|*dlg{x$NSiqs z$0=w;Sby=GD5P`Ty>}29Ck!iRNAm;QH5{i9p-M);-h`KhG@%9q>wuKP9~cjSIF*?b zaa@a2K_i~&n2;vaX<)DT!lXOInG<)eFd5Ow711paSDW|};K8M!L?<{74c&^2Z1aos zT7O58)YfY*DA5fFJPLC`My5@uquh>#Iq4!w*>k0J<{&i`$OwoN(M6_XoN4Q| zZ;!$xt{4LetuyynlMyuXLl?M?t%&7UO3ev~86G&9Ib?D{MvzUQtDg*kPT05$t@thZ zZD1zCbS*PC0;pufugMkA1)^hJFXgOnpMUmJ??`HcGULqk0OmWd`0r$dCDe6>C zs6G^vb1>`7b-7GNWV|Toq(iv&KB?HQin-1@bKLx4A|vip=i>N#1qzH*PKhavGt*Kl z89CocoAq;tF1F6x-*PR9s&VH2J=YZ)XWq~H6N_BdDqh*oG7BHy&j)^)TAGIZ>VG7L zc69WuNCEEY0W5{PX_4zfKI0b_)gJ)oY(EQ-p0hR{X+uK0_=q&F1ws}`*j0>>%6}lzvk*cEiW3reTrjT%LKe89TuAs_3SmMpAHJYu zUkePLEg~cr-CrL^!U^C))cluLUB40~fT|-V;GRL75EszqN z$cV#)LS*9%E5RYnerO3ni;qidft27xN*pL{(UkoduyzP1B;_MFiGK{q9A-idITe~l z318Hd6)Vg6V2jt*0<}dlex7YpLdu0{9HoXA*8&m3St5s(ata~k67nGw1Lw3_3&e|L zn{IQdM38MWCA8`hUkgNwWXla8ymGcw+7eRwbp+&MKa9@^2R;@015yANkvXXu0mjf`y|`> delta 3459 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 diff --git a/public/images/pokemon/555.png b/public/images/pokemon/555.png index 0843ef0026bacd09f8d3099135863af668052489..0ec02846a6a32b52c9b873d906d5563919776c8b 100644 GIT binary patch literal 15062 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 literal 12997 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 anJXZVd#DGW6$)vLzK2Y4fD48 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 azX-s>0fr>XZ^_U9Mp2Seht$ZL1^pk^D_y4m diff --git a/public/images/pokemon/566.png b/public/images/pokemon/566.png index 67b5f09c0564f7b89167da2b06925eed0008183a..e54a868029804950f95c7dd6f8fcd77c8c0ca173 100644 GIT binary patch literal 9129 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 literal 8816 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�&j#aF5mv;KxB1?CQNw*RReAHs;d@4CL)Ajug2 zTz%=4b>OwrdMnA|Khl_Cg6m>A66VYVpFs$=x@6x#u?|>|m1CBVKXso6BxddIuFt)WI&VJrHjblX!cfzH{*PlY?L*`U}cs_&xhterkf?b=N1_#jgwsl`M- ztLhV%DByHym|B)5q~^8ass!&pDJMV2lC2vCej?C+Nk6ML8*keH5;CliL5!_NXoE!_x;kwy)Fsk{zO zLh*IFT;6+On^v71GNjCcBl0ny-#@!P?!m#mecT570|b&e zPzZ(ZIxyzGM$Q@%w#P1Q+&(YnBjV{I!0XS`E<}xe_E3k)z_^lf!$N6eO2-oZk6rG%3DGMOBloOZiV2;989ypj9*8#HRFME_?Dcj_b7*6qm> z+F?tl^VFI3nMdEm)}IT+#SqgL)$|oXcVb0$C-bTfb=2q z@Xk&Ug>;bdDXxHA`$yf3u&r&=;3hFqna3|Ue~G=^lOWk->Pw88_#yQ$7HR$4B4O&} zA`Yvnin*UcTuTMU+t}`q+tQlYjyiMnnn^Y&Y8lGa z?O4^%>igAfk1z645tA-$k{WDwpOd3Ya1oBb#d1=-oV(SP0{Jv#M}rdO1nMzTDEXj@ zcN!5+(AXYcxhQgusgw&&3e`%SITW}4)|qlB>O}~RVwadKZ;Cbd_d;_HM>1t-_aNb^h!b)w^nWHsRt4lH!DCB_u*Q zS0@w5StTJK<&BA|6WdGkh+8Tet8N&Od?w_@FPhj;O7%+TrBAd2KG0VFi_Jpi8JdVW zVYf@xFF}AL8Y}=)fGF zA{2r>Z#QW-!*6@qthV_V+@Js8{1E}8Y`2vrTRm_^^bPt7aL=Z5t&A?x8hd+t2;y9< zvO4&TbROg_=D|7i$9)F^tws6@&!YJ`?J9SY9pi4)Att(0g7j59x$#*8j~+3-8QpWq z+}Gk21`i!;Nh&{A4mHM|eTz;@N;X#+sCZ+#ms;CF*6)%#y7Ss5a(X_UP6zb}JHD_Z zQKK~^zPQI$@MWgW167yk@1&EbKIh!q{K_*rkA?@TKNNC(<2L_2id{_FA0OoWx_OO_ zOvuqQD##?hza*3k>kDNZlotR zKOO~)b180CU|(}*Wl!=^@U#@3jk!KLRPMG$ZAyq=+L87wRrOT>LATrAJN|~JCk{@8 z`dQTt|61mL_#tH7x<@9e5ch*T{6k0~-yIqlj1{|M6d6T+w7pLLSn4!N(~`G`Jy+{_ zyqQ0v;%%NZIq7{qAsPnK{2HBfm6=fBldwu!p3L}=XXa0a2uJ;vmHWBe=v4{V`FoFr z9mo61rgov>Kh0<_Lkf|M6?TqV;)PlT*Kc3Ja!k9ea>V(PDoo)sGi3ic(#h_So*(0l zhjj11s<2qzv-*fpo!wp9p*YJOyiEDyQ<$B=<(A)z|GeBk@LjrpC|UjFdF|j)1C8G_ zz-RX~G((y{qm*~@Vm-d+_8Kv0DYn>@bbGsVh&=gOa{9+Hj*6sKrWtkKbuHMq=Ww}r z+z|X<;$Yo#n?5*vuybgCa|G~*%-erIPkntV?r^}jGtzx^pOn_5@6nqL*PzY$PB;Qc z3)h6$QWLRkC)r|sK3zEcqKX1w%}zB@>wQp@*B%w97jLU%-Q-ufpG)!T(H%dzPHkNQ zQonpX-2&8%ZRV8>_w=JlTc0qoT^fBmy+}_Xnb^i&yYM@(@$y==JI>-1IGJPy?YSN* z@P7AcrjHat#vDhSf!U!&Br_q}ogP?F;>+Dpv@JV zzh3tD?D2%&lcV|5wzI6D8OCtnbO`n$LGw(?Ry5Os-LNR_A;H8-zJa%{yo~XaBfL!U z&+X*|`PqMU9eB8Vf{{9t1LyKdYHt2|FL*~MT- z@Bbko`489!gpyzt&iREakFY((4YW2iC0OkdeT@711NeXIFAj8?76WK9c`>SOhh!Pg z7JU~F---eV3+k_oa4r}m5)8^;U^{AS8Cg(_ZCG0WshS%M|UzykWO|_!MO_(0`EzQt16JVj2HbD_nI zTD^-%DeV##wL8n@)vjB zeq|BSl;6_y>&4z%ljhn-6Zf%O*QJrhN0m|jCI%6a8fzL}#z2xEzW$#ipLt;kUz4U- z7V$)=`}KwFDelAbQyX6hyjD_-4xA_as9%E7z&pn~Qm$cD-cUh`)jWF@5d_|O;-t2T z^=dLh^*`x$#Y5aF#dCoPJ!i{!!ivNip@=G0(TIN{Nvtu12?+>Pt)}5qsW*xu>beSY zmQP^)XZLI(qSLolqLS@s_4mtuvO_%o)qO9yQL}l)4!Rdxe)zhTBliHQ202Xp{Ahv2wRH3t@si{s2(mnm|yIeZ?uS7k=^sfpCD{?jh7M5Pm{QNZvR^{F#09er=chtHw(ob~$K z0}FlqlNZj(ak1r%$ce*Yt$C6Vvpl$0$WKy*I2ig0W6KoT1K`G%22&5Z!ZE8ex(8Vy zjMwZ|QFA)~;|Yzc9HjtEuwqn8I&4+2$2Cw`g3CHHR1Y>UsdR`0bC2|iP-$d)>kf(; z@Zxa`l2`Gn8^2@?VKUx@=6#l{S?qlhM~V0M_L}pc||3uI3 z-m~NV#DxmJD5#{+;%ejzA6pM_m2_i`7qBjRSTVA@TbDgK z(?cSCmF@GVwx38-%_z$!g?~mTWFY8C<&mF}C;;3Ft3ao&kQ$HECaS36_9(5*jX52G zSBveCGRue&1TRZH_I1azDw$Z4PCZ-cb@}j~NrZ#FU;M2eFB8afUa7ROO|Eam@mx40 z7K%pD$o&(yAjFd+dZQ~8VIZT$tCKsXRpw4wJn~C7*iz@0$EGGaE(~%p4;d1X+QQsr|ig$T?Y4UU`rVffV@u#-{ z)~OXs@3$&qc`-@tGp{qHFs($b48vnaa;Fv&s~e{*Z@M5IPtXpl52OrUBMaIvb zqs5KjnI})kHzd^)D7OIqvGz`T<8?k;-*=C0iUD8G`V-F~)p8(KG`%YedS0nV;1lg4?bxWrOWM2ICKG5U4LD)tOJ`i+O%n+~Py zbow0TwY=?i^{F_BnnFB=fQl)g^iyv=Gp`&m{nYDB+{MULc~58ZU3YIQKd1VVh|D0$ zNa*x$K>>3h_EqAyT6)Dg80IX|6k^?6W>|2`y)4Cd93a==SfQ+SdWA+oah>sDY;{$YRxU|y=G(_1e!@QcL*B-V@nJMn#S)T_{;d*E_Gd74d30s+VbgTla! z2P{jmyZCejo|mVSzD!ibBR&=LWy8x(->BSVkSB*J@H@QQ zIq!#Rp^xh_r(NF1+F7}~)Xe7{OP5f+FdHs&%Ts9Lk;_FTwt!3gQ3cY(iGh>Z#i2vj zpFWZcpb9iQLXC0I5a7V4gi5i5+?-}}pQbD=Jfp9QUWZ-kffJWVkA=fx73(2_`4W;o zIdaRRNBz|6()~uw&eTQD(9u1%YddllvV=5-CnT^2ztp6K3F0=pY=kJ@3>@=@Cvea? zA3+_v@GwN_>XWgd&rCK<9Qg-Q9id@PqkNj%YUcuTGmUy3LRi#X3&VgA>VMq$_l46d zmr-}1F|Vv6HHAz_(=8s>^K<8mQcx)OMZnNx=3mSw{nZ?~t%KMbsmOO6tO~_rG*$V0 z9Mb8hNv}3XI7s?%HY7ZpZgL-N?9psuZQ%C@+d?@L0=XZ0F_&yP&ubp|fK2Oi1L(Fa zFK9@{s{@3);7yBSbc5})c|`2q=;qKi(eAVMsA!>Mu5LW-2vD(0@m@gExzfPJYaa@; zxB;VL?04~DjinZLX6IC7HZcr7;uv{sgI4lf9c_naF$;6nB<$wNYsT8lO;>F_-bYXl z3bT9o3_YpNZDSrV9tIZ4^Ii!N@kK0G49CHK@2hn112hkt$E1C281Rr0(%mT!QdQmB zdZ}}ryJ|F%Spe|tCPoZHnoxUhB_*+^n5487eF&;mnD=U8#StuLAvD2Q99PX2JTDk2sq9-isNL z*Qe#psZ26DERy(4N#b!&7tfw5bvqjyK`FT@;cw!ZD1rsCTDtJRU;O*nskeb4LAnB9k_Q8nT>cumMxZK8m1$u8yFk^lOIT&o5nYkbcbYAT49^Y@7vf4Ab3*@*3lPdS7MODK6BPEx+1;jc^_B3_Uy5vE zNeQAl!31?O$*&*FNpzT?zt=CQ3Lz1$hp*4KE1MDEwTT78cTmN^DxTPU1q_yI9-2kq zd9YB9QYH>%G_ch|>{(+FoV_yGU2q5GFWTQgSqUgVoRg?MZnRmu!LlcvlU{o-O%X8$ zy4g&%vM{>HG3Q6b4qGZcaQy`&x3;AYAdr-U&;04tFq9@08^K^+da9?yjj@=wt|0|- zbb>o~04RT>Z*MVO)WejwSQoee*~ty6k{fy{#VgJy`Jb$J_|sLz>N=2HeLynb-=N4y zREF!p5iC?g23nH95yX!fl5JcHGgm>}55R)!ReX$Tp9@ph4VF^kB@4}eV8!dEp2 zGyAQqMOza1il0-zVam+8Za3A-nr zZp};m=+rj_*X>UsLvgkXwjLsGl^%dj;Oo}9kmIlSMFU0+Y zUY*jNQvnnn`Hzxb1bx{C>e&e*N^bjyGj#eX?tcM-Z5+Mx_~;NK|L=|+c>n*Y3}Thl z@16{PBlYxix>W&zfGVdqP`Wo*{$LIL0G#u@&(WKkR%J&^HE2|Va=o7x5-4>?`6YcC zR@H#NXndo;(gIY}fhzYQS&e-ApG8)v+5f}|5HUA8KB(~A+sAoq7_WBmuq8~8gM?Ru z*#L@Twt9N=+caqQ@w*qu1g@3K@lQm5oH=Baclv&5-{FI+|2ho?oUDGrRzUTfmQ)`| zp-WJB4B$T%wGI~YcJz1Ee_zMTZ%xDJ`})JpfgaKshbOOeg1r7$e1~sZX8Tc>9ZL6z zNP;4dAI<@9WMSB%+VsUKp}*V^^PC^vonPV5Y8O31ecIY-Oa1%0qvx69nQO3)Mrz_2 zz**vt!d3yBAZ{^!G3Y|DYY1L8rlra?>#W?ZD zX4hk}<_}SW|>wUGJ@y;e@Vo zxy?FNg<`mp5_q_C4gIg(1~gBgm;Ibq(G#Q}vb9pVm0(M&G5~B%fJE2ik|%NUqEZV| zlrRRor7eOuhPlS5$9X!DoaZ{RAv58aSD@U0|HQ*UJyr}3d-9G1>8ndR> zpTB<7 zzf3D04%_xPjJBOh*hf!I!QCGO8Q^{wurv7QJJ7OZ!=Ja!jle+ zG9(N^sB&y`ace62h{$azwQEHW!N_q-%hE19j6QAYrunhL* zVc>7P6seLGAjNPaq?VNpH>pE$&E4EIUODXTD%oFE^f*r{24=E(0*v9C7vt-UUAW+y zu>8JmCp((1GH&fBl#&pJ5Y-q8HH@tGF>*>_3YeQrI#hOu*5y{o%E+i-n|2dwFw3cl zo3J6ZkZMzmIhR|aQr4S-*IOksD6J+f+LUS;tM~j|@nq`MUFb~ZFHw8i_4X+17IQNM zr~}j*L%YCUxIT{6VJQC^*a^b{mNB21@EU&330z009LmR$p8;dm zh-<1VXa{La57qK)-2dZvz4z|j?5}{sOGUlBk{I>%xWZTAY-%>#1|5Kw5Y-b2+N-C# zFrwC2LyufKv{;gCi=UZ=@a9bgB=9*(YTZ=?oxh(dDkA#vxXHs0WO^1_Vl`B?EgJ-0 zt=PdlMLX@@d$n8T>2wQGD&{zKdt&u=FSLy6&ff+;X7$*+I!8{~i7*bk4&vV1{(3{3qlx`aH^6Pb0~ggK`pbv5h>H%6o97nC<3_x?613)wef+WJ8?a zx@XyM?-13_ay2b=W7yo_lPWZjddWZCK|#!c*zXnHQ|)R$|Qe8msRC0 zosZc?^4K6-xAsBx;zUp66*J_TAlc6&IOY&#ER*)!i@tE9D00>#L09n2t{CUG}( z|CSL!eBw&4yk$<$<`?F->B^;Ijvb^t`2-ZhS&D9b&$TiW*^|GwlL?IKZ>D-9-=Z%(SGQRg6Nx9m z>{)PRX5ZSH*xA77e%NeuLrbBM5Gx_Ku2ybFg4Dv?&P1Lwe|opzr}>a)Au+hx3()n^ z%_c@hY5ifPV~DB2jI(q1Bp_4yTB&HRqtu zP%9m9;v6()y0r7ze!aFAfIxD`Vhxyj&e=P(JGi0aP{X*U$coe#~U00CHOKD`;A zxt}gpNW_jMy~j&!0CQC78lY0pP;4kdQv6*TN)_f?DmT_fVdvqY=mnF}aX5bVkde(Y zCxF|aC`HTuBp*6nk^x9!%PU&6qMK{jE+=k3UWYe9b$8Gy819}kYpg?rBk#Dn?4)%U zGy>z@AN4L=U-ew2SS*=9Ki09s-TSZ_pR%0J<@tavUz)<43K({3ux!B=?0yUYB-%xr zkK!UVjlmw?6+((a{DFoMm4{t|Ah|)DcD?7I(@u8HQocetAcGI1lq7kJ2+$1BbN62j z7>XTpi#%LQ$^ZSh426)e8#&HYOdRZs-r|to`2O0dGm;wn0`9_*eA?-Kb*7#@=hXkw zSH;AX(7w3coY|E>b(V|Gkw)(3vh`MDo4lR~#*-d1(w~60GzCp0TEef6DR$2pZv!x{ zg;3`m%*{BrmAF*&g3w16=>OsfOJL2yXA^ucIbe|gn&7|mh^n}Mgj8dT$T)8LUXCXp zy;&Vu`QL-TVTMd5hYujbaV2`s&E_C)+zWD_gijz_0vQ;K-TBoDOr|#rU)bC+T3xJp zK<6@&lIVaXwC7wl?0ggps13nraXAd(@t*Q^v2oT;7x(dWti{LwlsXMBcmJF4uvK~V ziz16aKxsb?$l3+V68x96YIc`ZmwZlm`TPTKYYcQbWpBIW$Ly}V6oHZersyw#Sd0FK z|6AkmNk|Q+9~ms?*PuFBogy>Q`kQ0R-xX7Vv@sB$VbAw9O~wO_bq??vIcJO4GKe#@ z9eo|31=)!pZTy{k6FHMliYTLqa~Sg9X@@u>7a00}z>39RAbY4=6ySHrrnzy-$>`p` z#!c%hn~>GOC<(^%0&6yMGxBK3X}Y5b7HYvB`IrJp5NQ?>uv0w(Ob*r{k$XkPfO(-n z7;<6nj(CPk&(!iZqo|{Ux>V61W(TvXO*q3a2PDG_KDG=%+7VAU+0`*^CHx$d);XMH z822MmcLt2Z0!UdddOs91ZAitIQcQR1su-vE-ud!SUzdSV@m~}(KPLeO$kW!kxu>52 zaYI0LIrvQvP@p#?nH|~^GIB}gw#lo3Rg&Dv6~~$o3RT}>s;Gfu82VQ){n6o?&b9jL z-)c1^1?*AWg(LB@!fC{=DU~#RIY*Z?axcROM(l|(k0n&}AYn#B_gyG~)ilt@+gt=F z3IIlm@e#d1L8$eTE}&?d<1`X zNg}oc6|o~jcrbr*a*m_Fx{9FI`z8i6dD%Vl#zF$r!_BY%jbwqNW+QJn3oIaGnWHK`%(!zBhsKbj2iZap`9j=FW*Iz#(>fz_M5Tcg}@^ z8FL0ttVO?SL0#7PuS#$XeGLm0SjZq2Ft6qhkqhkzqxVf3T6e0)V-3~UWTV|EwZwN? z|D5+P{NunLqDhwaSg;0zMPYPb_cN7KbIrpW=qzL(YL*Lv&b)LBBc&(|1;`6b(vCp!+yIfmNPFt}p6WlXE{~ z4aCQ^5dN{$JP(dRY!~X(3Bw6sOk5#yi>nmz`WD0LYHMx=4L_a2MVVTNaAZ#NCeZx8 z?GI&brm?<37prH|Vq}XOB0TpG!s!&ACur9p09(#@m=jxqn=MvPx3lunQbq#ZF|Svw zX-D{H;{55OPWRn}gXx;~7mP3g;CEAfm^bD}NpTIaCqil;FncHRaBCt0TOU>K_Ewn^ zDRl_e;qXMWlqC(s7L0k3qSi!Mc9u>71)KvZQ5zw&=BE2YG6IF~H1L(F4%jDGU+&?L z(P8o=7DY#FyS@h!NmJ-#Mis}9@&wFIp@ z!^(C*&4%iK0_e$yj3@8w7EMG0OYa$Pz8GtV;w*~)&Ed#v^!c;wMoQTa!e`>>Oa@k} zRzOUkGOAhIrX(K5Q|bg~zP`Id&J+*f8U5}j4ztc>;>|HpHS7Ng&|ezHVjDaiX+9c) zw1monUUQgx>5t-e#c!+eos7$ zi#i9@OMeyS@r2dnzWS;rrJ=4BJi#j1OWRK;mX)^qm9>X*Uz3ZR-vee{I$ z+;+umZM91gzWS1;lNv_%KX?3(_lWxp`9!C?)Mx=_+C@E()IT2jlyEM^Q^x$#M_lYi zdc6*S??c}{6(sKpQrtNP0M<#}gluzDb?%-=ORq^6hOB={qE!=@+Vq+)c&(IgzS1c@ z9z6#To@rnR&qnp5U|iyJC;P&X!i3o`C^l}Z^4WMo?r%iA=@UUJCa1z`N`YS%mDh?_ z-N@@R&Ir6_G$)pvQzN+DNtu_0U3Ts)30(vv<8dU&?BVmfDUJ+kuy6O2LtJ$TYv(H^$$)^>l zG~jHk0QNeLj59>VLBxG1=Jb8MA=!p9zJ>ECkj^+EwwQE`23C4WO1+Nf_&_61olv&O z=b^^K%lX?lZH>%BlqOnb^!lvVj4po;ZZA-`zX046(d>&OoM8BxO=OB z2GR}KADc8JxB|6+j}cG3p0v05SK>g}Q&Iv6h$v8puT>KbQ|}A74*+gfAQ30}FB3RF zv-e)Ip1H zel`e2c8I(Re|fjJ*TOzHf1!R!a{rvKUuWrZX8fes5$z%T9Vbo#%0Kq`zAwhhVz zS4%G4_S33?XYn*Z#QI#`3*BN+OV;+U%$moA(C?33t;k!XuWR2vR;1A4TFC?^76@aX zh*-|f7x0UCprPlHPuYKE7gdyzn`A!vG0r&!SIcF~>Sxl;YoMPX5XxjF3$$>ILMPtS zpLKE^w5)rU{LdU=$SCPMXI%dOnnLRDegNRKC7^A@)tKE?ItMJA^n(^R9Z%8c%{_0& zHyVYedRXE2*J+4&btYf2NP0IJz80Dmt_$7vAi+z&O=;Xh*tlb=Efu2&F2Wcf zb0&f220x=+03GQ|CinCN6niGGVUL`a@u}uS+kP&^)-RCwi`owt$RCd`0m;AopesjN z`uHUvZ5+NC#q)T9&Wv!})w4tsh;9{0 z96x!SoRoCbg>H+3HX(vNM7Lk~mAe#R;2=vtK2Jt0wAI*>b^R;jqZlMBe2>Z&&3~TL z+P55ggKh?9xTX@t8`N=W{}h}w0i6n^dTQ-?EZ$F9-C{iXDEi?-A9-9|dMKG@n|LN^ z)Ht6rvrp%^0{vl@rbukcfIG$1l!^u59ZR3CW?MbEf9eLtGvu31K7Kj2tSNJmmI=U@ zt5i$iVaXW1!wT4sPxXaRU0X~l>0ZhiO^j_jPNAqW4voSS9`UG1jg`KMgef0dCpe#*rP&{T5d<`ZdwbXEH7!)7lky$$_029{CnDzKqq5%#2_3)P&}{n9;oAp|T; zw;|r*@Ins7$xEb?fo$7DEPcrmXKr(U}wB; z86#(k2O5yv>rIod807d(*^5;Vq*dlv*W!RwQcb`8tf&=U->9}Yp zO0c7ZO<@&#}g<4P>v9aZBxpSCEZE0>_*i@WrtYSZrsW#I^(a8~`nMk<5_$&=*$z?v9K z;=`5u5TMWXe4VEuV267QURa$^QBISv0$}!_`(!`7$8!iiBHsc?vduYDR3Dc0A=B6QuQbl`Fk>}L2#9kD^f+y&2#0>0A zSO`c@eF2(C9^N?rtM%D=_UklFB9BH4b2yH?mhV5_XJ!Tqr0zf69l@L9Ueme^Jb4@Y zU6&Wnc(IX3xxqc+s#mFB6ma$=+>5qdBz!9gm%udC4{b4|z*XsZdAZ+E)e@~(2rb2) zH;LkN{Ud3~dkw%03Ey>%PenG1xqVi2{{);>t9LntOQ+|qxNg-n-lLy*3P_nx9{=Pz zZw#cg2E>TcGcn$Y2@`}{GUV}aajEzzzN{V=#(P4K^e081ZpW6)7sbRlf{LaL)1g6g zPJdEuB6$`EMcu=Bo88r)g6U_MJwNr%Q{NJ?hxeb7iA`R6(yTmFR_oXOZsivYwB!I; zDdynsqzhJ5^Tgnw!(A)MiFd<_2FnZS)h%7=QtZyQ$+9(1V#FsF6N@e*)^n<^LA*Q6 z2*?%E*b=N$%vz9+x228uLgH#r_0G}j&clYPvPg){_;rCt&41G~EL(I0{ z+Epfh>HA6DAKTdM)dfw4hY9vWB@x+G5nq3Tw82s(5X7l*oO3hi=nNBZ4V=liKgy)T zJ9N0~wSwV_u7{fTLO4>9X&z|E5%F@p!xbL-eni=ZCv!M8hj$$xgQ^-RRV~V2pNxK1VIf!GWals4R?9^6VR-~!QeIr3)Xu|=n16x9FMm;b`{|y zYjq}FA-_I zKa7)QNf~={bDzY*N6+$d6+v$A3N>E8hlvA5)??~fngj;lrU?KsO2}GZAI>bycii>m zRfW$?$$HFXrBJS?-U+l~ z{22R0ZO(n92PT~Y+%S6&e4-a_ROvZZWp*2%*G zj;+~(%eYAF;9!=!n!uZf*~5LotF5<}x2ojaE+!5wXg?i)A~Uh=zWo8UEPp@KIEEh< zuVsgBt34s5|L*X`vnaCE+VA&BAoc)XL{flm>W&uAu;(*?Zm2sW#(nDto430Sx%N+H zzFEy~a+OLz+DYH z6`q&JPMYP&@v;Zwocg(9frYmn;2(qPYVN!KQvsAi3c1ryrL1<&D4SE^m_%6Y$7&N( z^-Q2B(&G#47#-7xBqR`W&;L$qff)j~;Zt^8>YT&uf+F#(SHPotwc;t)uo^nQV8#g< zSfgIZtdI5aVDg8A=9rl1vXYw$(0HRxpvV}mC(iI+*$09{j4q2Sv5Dyyg)x5N`^Zh7 zS87%GayW7es1~(Y?XF4-FR}{2qJX-CF%zSwI6`zbLHD!d6d;1!J!=ge&+M^`4MA?N z0hLFwa@c2`UM2#%g!~OZ#vu|){#60ZtH$+^xcYw) zb#dCj4)YwdoFUt!lRc}QxZlV!!M?940hkYMlDwR*@j_H)a-6(vM@yOg&Sb>}r zYHq$&LfOqep>l6x&M5N!lGLr0(V>q~a$!dY|2NDRHIpt5rT|w6$qGV69F~#6$G|{1 z$YHe7ElPjiNjLyE)vWq6vg-(|N!o}n2J7+_tZ$HWJ(h050U&7Fy!uO;?~1ygIiaq( z-oZqlKL4$Ia0pX7(ApC1_yxt0kWxGsw}hh`2$#~Ez7r_FfxH40$Cvu7Ajp9o=DpvK zWZzKiAs=z}0*m9vSkfu#o&PWbZ|TosLq-_y)j@L@kxovDay{ZAAnB8v`Fz#0<_H^8 zlLQ1TPu?3Lu*%(sDbT=#$E$yoge!Q$MFg_fv`STX3A+ zBBY)sa*ZrLHBluD>3BhxnoeXLJruMQo-RW{#(K<=$9ucMG5E0;A?h9_}2K`qm_)eVLk*GmrGpKp|J2l9+Mgx}yPE z4z>irESMONq*mL79SxRaY%{LM-pY3!n(cm;zp|WZ6Tx;&TZqft!~SNow|iuQK@Y>%R0EeIYaOndNH`6Mscl6i9o4Bj@PTY?|TCapDoeE;Y0 zo2jH^Ny?i4_w1*)jXaiwu33awf2nx&zawVYS$yFi%f_FwzNZ2y6*_J_NC&2*1rhHY z(&Hf#mQDU$-QYN=9ca6oaV7{OolE6^d+O2#A*jIs6-9yxU5XQf4Jx-i|0na%IM2o z4y{|a(&UNX($(RP*MJBrPjF3e5kwsX#V(9ej)yxsOXEzT}qEg)`96 z;k=jM-raP}cbr)MbYb=kB=onmc(1K@5_{Ig~^i9Fm???vXwPk_N^p^tl7pigh9qKqlmJMJtey)YsxNL zgpnm>`COm(`JVIn2fjbd{4!_e%cu>L84<%Smse5jj%}#`%NzoH=d+Z6z<3NzHMYQfDzLkbXOER>Q=RNa z8z?DFe6Y3g4s2UT<>n(Yb0n9Nf95xv8COM2e;2)S2z!{~j~dVa@)4R%H!0{rNhc?B za5OXLljdmlxo*f_)b=L~C#Ob>`L6a+3*kWrLp}QpR7)A&VW8z4$W!6kYWnWWL?IJe zm2?5qSK-}i$!zgp-+>gfEK zbd!a;6cDHxaE!*2_L5I@@|o?>KSK_3dUkDFdeRzU1N0LF3kf^4plOAq=p(CY|KH+2 z155hTu9^-AYk40pQhufdqg^wD38gTBWC|LBZld$$m)-6Wvqj2m4EW%p3)Lxxi~6S+ zLe{nMTl&mpCZg#wxtaQ1PS@@4ph4_Z5Pq-fCF!wVn?g!;*FAgE{&)_AON)2 ztZW1hq}ge`v{RIL=Uh*l@ZZ>C~DRFLysE zQCaPZH0io-zY8KVjYS-7dXN5mL3B<=(_PcksxpmrR-9KlL1yyl_)$?}e$|D|6?K`o zexc$Ud%~rEV1iOiAj+{Q@2>y z=ic->`QGF#mg26zcG1Coljh<+2%ET$-Jm0%%UbV`GpU_W9>}p(G}GlQpf#Q9v~=y} zzgE&e!!;4nGFwT@6&zf}fnKWBOc%EB+3xTst@FGSggCs$Wcy#GhsMD^0$%%Y$${g6 z`Po(xAPCugxN*UpB2OGOGV z9lAks-9)&_R%;;bI~AE;7~Z!%&NKR^VEGSZ0}xLvSm@J|OsdZ0x8r#191E#gws5w^ z!nCARwb6lMI_^9flV|$&rbDvH*2N*q4Y0X8hKJ6UPi-G+zG7?NO8j1WACLyLfbMmZ zX}nk;@mWwH52`R1+o*!2raeH9m|Gf}!-&65Nu5SO1t*l=ihmh|zZx|UQzQ7QhMR;F zDzA#vn6{Kkk`u%p?Z&R%;Tk=|DV=ow9Er?H3N>PHC8TB+cD~Ludp&_ZJC^D=6;yvK^G#*aV^xHMBPDp;`KSw((E}G0)&fFGk zG6?rR@qW7j1lqb$G z4Lxi9PaWzR3oT%}I`&|ag>CO0*M5Saglp~R*_0aLm4m~rsmB<@j80nEoI!$AnByA2 z%+!yT7b!MjwTTU{K_Dp)Dnxo!Zg=3U)hzbG#9#vkT!2VNz!E$fgnKzx9ttWQDU49- z!@ovDQ8_+afGa3)X#OpFH@PuwFEp~g>ngvWZ~nnuo?JH8Y3A;uN&ovjSithwAy$-#wGU3$_CZJRI4b1COK@BK^~?i`@CThK!d4hn zWEfznhb3>!2P`JuZFqHLoFYjZ2^vI-S&4yN0pI8Yn8Xq@35s2R*J70*Z1c#nkOEaL& zSi)!X*!bCv5lgNaPdCkqG(GDc<ycoQ z@;B;0qs5CafWDw_sU%-ENW^xwVb?Ql;uA!BMG`kHTa|}${`}m7-%byg_1fycO4tTk znc-8IN8x^Dl?&cY#{L@*qTjMLtLdmYSj=@)+sU%`&Ns;A#al-%o53{a2e??We+UIq z72B~7$M@D#FYC>KCDRI(y)GbH&>+pgr)9@#c)AOgt4CJa_rNPZqxc@=)lM#K24jqpN6mWp=K{%Nzft&i4^_=mETZ87AH#4Jv zM_vSua~E1uy>)~U5tAm1M5qD^Ec3Y*zs}UdQR-N#o~vQt#`EVPJC=ZeoQ_E(+^|c# z56ieT8b%YI-rY|XXq1aTKbl~j*KKJ-wM`&Rfb%Z42$7)kB4*Z=3hf?jVf3vt(VN!o zHvvB&fkV?($DLs~=GP4jU)8mQ2cO$r@+{Aw;3YRoMI<8M4Js(&VCPg>d^|qO(BtBQ4IXo+#&h#j`Mk zxX$^!^*^mvGd&$PJro063F_Th-H{bLgZ|6fPP?vDak7U2s~q9wE}FoVu8dVU5FhtRgqm+7v*mgx>r>0`IVzE)E=_s zY-jZhwf= zd(G!RFUw!nBwD;wOrlRdWi-t!K(R}nxq0rmZYKJ}2Zx;~j}xfmkUtLhmQV%lodYqr z8r9V3nSn?S7M!Sdh{f2~B0oEk#6?1?qg49x-{LNgxp!&fH(wo;zY7G7B_^Z42Zc!X zyW)F)lW5E(UVE$iA>M`kkq+Bjx~$T&j8Z50amS;Qr?UA4waYt5Z*gI)y;ZH5E5=0x-N3I|Ca1~V7eoe|^Gk0( z-&u(A5B?EqR`V}CGyrd}r0O^Bjnv_);!i9}gD$Q>$XmhO^-JEqGOVG$UQzp-ohP}g zqwuLLAJBDW>af-aB9TyYzKd+HN}Oa1O0MO;j1pc-z9uYvCUExP%cGb6zXB~EIl5*= z()XepH2EKJti1Cxo5lZYWn~=o?NK8N8be$&68>!V@I3{ejTMmK&x|%98cdJwv>1BdchakyV|I5*KcRz z@FmJ>yVgj4#Z0+_VoYo;Q1oNU4&B_=*r~VZMBG!U(Y~J%)oY=qx4Cq9NPRiVtHoJN zVc(b&vhnKdcwySyz12)IZdQ~~>+~G+h}L{ z3VXum^M2JLL?)8;a=YQ=5YRde)sk|>Dh8MRm#=l|L>INqtm|jW+5}DM%iNlRWpkk$ z=m&4DBS5cFY%tFJcWKW<JN+#|uKEdz|bUhdRrqrl<`CQ*X6NGmD zrK+^PV0Oiiu{{$#`6pJSP5(UD$pk2R@^p)&Svd>zm$`C0yl%|V72a)&USgX&E-h)P z%b|&tYcL2al@y#X57NN>{ehoO{UZ*?s&uR~E~$hUTdK;r(9~eKq#5;zaaTe#+a37V zyt}Qi1-@P~k+#b>p0&UjCjJkbyBAm;Pq2VGq`>ZF-#s%eALZwkF=t*7zWv;xWcxfVL=l})#QJ-xZ{y4ejYyjMEul|V z*VEM{9olEIF~1(koS@7vr_ST%=as`8SA^?W#>>ofVl6HSwkmvzxPF<_Ip+5nbz**6 zdN+ugGY+O-AiEmU1dA?wC|K#(vPsg@V|D|vMN;}gvv;LHfvBZQlT^eivp5x2Z?f=h zs*;6Pz#z6!;7?w6PuNpda%gt;)LE$o5Z3;lz)mepi6P5)qR#RJd+f}Kz}O<&T5jB> zM}1K^QxYdmXw+=Me_9KjXxh8v@{OqFge61a8ud_|oFj+@3Kc+6oKu9~n6(0uoK_Xj zB$2Y|XUDx!08MSB)_GU&GnF$Idbo`t%tR~kPuUm@t)O3rT36hGpkwz*2?L4=Q zp9vGvtwG@6I-O7sPM40Ap~h?PhYJgLZ3FJe#$ZU-rlqe>`aQ7M={Uksuy0$L|JrqAoDdZ&_?BSwj|zdk zyYoJ%P5b<tiNkuMR;>lv^%U%U>)b9!Xx~wJs&XHEw*z(1a${ERo^Xq{%k2UotkpN z-JZZ$L`M}X?BpiOIuu2fo%bT13ZtbtsIW0&5-lf1$&0uM&})QM#bxrw&3)A1*F1@8 z?OVn*8z^!)e}V5R)+b2~?kyJ- zv5x@S2L401G+^oPu~C0at^%TIY-qKkA2T53%BFp>EI4tN0HQbrxwBumlDAHR8|kK* ze-k+d=xpU!HWI50it5Wt+o3Lvlej%AW911?-a+QJcmRnJ013JQq*A{#g}z2{YxHtl z=CVN_Yna5v<;H_tOj$qpG2;RbQdeVUVuX!Gqo|t`3RYvg)OwUvnzE!ryV1 zG1m~n(z^T&Qe(@nroRZC@(0hx^lM`bqeXYm?3nssx+xKHhL9T&$%yi^pET zWsr~*Wral^+?C*)n2>sK@2=K#k%-lqF0)`NXVyEBZo`|62qVX?FcSbiv2AlzMJrF7 z>}@N#!et%FP3z%>TQZWp2t2y-;6wix6G& z=IL`vv8%?k2~!;Ik8^SW3ci?1bT~$OCZcEm!MA*}nkV3-dgzeaS)79iC_Y0(+#!hd z(MqO~qr`(*1KH-e5)N83=2{*FC5NWjn8(cuZww%k?8!cHf$>@9_j#1H$wljK>>p2{ zmd%izzs@S|r{5M^ryJhW+=qd78T9_yb8uR-Viw!PD@>Z|m_VeFEip0oKCjZ?trOGe zIca=3=7K!O?UDp`NB>K2MiByU9p=`?c&KCm0=LQafj{jhCZHO?4D(~NyJp8K;l z(|Tkz+SfeHH##+xSCtoYJ93kw?8e^X_;Mrhq5^i(pvcBJqlkD~FAEv6o4L1C4foWH zbV9tCb0z&sWmXn<6_n1VG1?d-mfy?$Bt-H_4@f=`(3pB*P#HFn^hq(7UWOm9zql>@ zGq_>p?ZZQRX+}Pj_;P5q+_aDqJ69j1DKf{$-_$W_mg!LRQbI>e`Qj)4&K#2^cW;C+ zBHiSkPtBa_AM%1ro!yow`vc`M@Il}2AG{U;2-dxLLi;0dN&5#8 zc53?MKO&yD?^XZ%!uM)HP3$W-0a--Q*6-v;v%I$;Ru;0@qzFg+P^hKCQUwje2EEng wC?@4r2wleGM^(JHB54@T{=Ym;E6*JGE=mSYFAtbl1J2 zT`rfdAl|l;?Yq8trS9G0N93|N{>YW2g?De|u7wUrWmz2ALU|=!Xy@HO+1YD#|9N@l z%CacS&dnyalfrjWx3-S)D!LEu`SP)QReYN-TgRho|l} z@%U1u0~E9IOhAIlr^n0Xzs4$D2Mx?T`nrwHW*l60w|l!S%0jE>r77QLE0Krpr1J4Y z_m11}<>eC9eY>*RstyZJ$HmXx%eE-pHIGkATRITQY%-HBSczpn)l&7rSoY&wmw#-G z1=0R?^nNZco8rsmr3*XO87pR!mxJr*nP=_n8(ayQF!R;w$*>>kdgbQbei6U;i}zE( zGuOrHa;dMkwcezg#ViOklaH5gUA@~u<>y{|bJ5}Cy@A%(P3%XyZqSc?|NblIy6VlP z+Y#>c_^Ewqw>2Vi{u)F!i$bz7yjQO+&Hmr3pI`f~lGVSU?U4&D{IB-SQ|=evc|S0e4beDvo&7KW z2x7Pry6(ME<7ymN{|o5)*J&^Lo2vQyul&C&{0LFkp?!fLSxPQ06?2V#e)kWPh|qZObN*#} z?T;bNpdVkSoold;{487KMY`?`_-PjvDq$%bq5%#4^u~)?{P@OqAfCTo{LFrD&8Y1H zKfTdTR~m2n73?2q5O=+`T08cGr5j=;etzQ`FFG*`_eJsRKUuRBE~Y?(w*pKC>ShO5 z>wdBLslm^syPjhntRzOF~b&H6hmt3Eu1T}Rb7_v+_i zT?DN|KYmakg0;ktnQf@mG%v8#&W;E6Ir(wUa@U~{bzB4YCl~L*E8d`;v53v$2L=4J z-YqW#Z%2=`xQZFxZ7utmx$9Ret_LGHuXT|$yzdNt&i`Vw@SE!gc>lD#27D&<$7>eX z_-;f~b?nErbl1rnYrLpiUJ2-(_tSHsb+QStu7{@U#Sht#+ZyN|-IeU{OmZ>yGamj$ zBB`L`P)$(i6y22ShIbSAiOXj0`VlLCl<45LppJum@kZDzFQuB!trR*1MnQqP_Kojr zW70C}`T_6iobC!D?*dSd!>nQTY=>))H5blR4|Q$R8YnyUL7BaF-QRUI&Yc544}o|lQM#_t(%yf-tYcB8QiX-= zM;lxVd`P^baqPs;%w0Ebd_VchM(!!%`Bxwg>biX@4YlCz=q9{x(svyek{`|cz+v5a z9O7kw=s&K%dT$oD%GKgk#P{$2?A&me$xmZgZ}B1L@w7|VnHCynU0OGepi!Bw=u#g~gKb>9#V-X;wU<>!RwlLg#c)cW?^o&O@VVk>PFI zNwv_x@t~K&Se@KeRGMxpSJS%&Jjgm#UU<;nRu`;8E2ujUqvl1*b?0VfygW9_KT^ey zR3s`D-&Tfy9<(0WPF7g={vS548;5b^MTU0k7UXfL8!lvZcNGU^QuV<1l}(Zt*1Nq@ zb>xTM>xXf`MJAU){V?p5vm2s1)O=g^GkOWu37cf=u5wA;vIf=Ykrx?_3<}4=KeFxC z#nYJI_c;0s`h%Nfdri_G+;@YKU2_Zy;WxJ+h(erkOjahjWV&DSyLUWwD( zuhKhtWG;fy^lFq=jaI{Mufk1IzN>2bdUtp1H~dtG5v2XLxOz3G#mac>3wK>Fghgyz zs>ym<7U_=pZOerX*K90h>~9lqyz9PDx$od6?W+K&ubCGGERyu@SMrD+|L!u@g*Y zOMH0^6IX#);FZN;zPmhwJpfvIvIV{znq{#H!~(A@4)e>4d$Q!mj^t;XFK3@|7>S7E zuD~k`!>rtsvzjLI#lmxU1-`tvJTWFlao2)KXtBU6w}vSqv4s}+X^}7czI1|#4ftVE z$XU)S%fm!q0BjY3<>IF<@#Wnc^21`qB9OBJuPnjmb8oEQldultgS#!hjDGl;2E~0O zz7%+6X_)85E3s$s^9o<~hRDx}{ji7)+UAv|VVVVa8#iZuw)rymz+++%6F>E9ys|V* zBYH6jo2#nHAl!H&ICWLOGNVX zDzAKfm=#c2g@$^^ety{C%YtbPcn~r2v&}2Z!(`ws4B^WUTYNe4GbbWxTfDM7Ot2gP zZ$VeC+d#8(ZTgf~x*_0| zg<*_ z?k)S#pu{BDOR|0u1%{7PNKh-}j!p%<($$4widW}mRgdj$_*Yg8t)}#oT>O7a4wBNL>vZ%)t1s~>&SI#Wz(`&=*o!Gxes~JL8dSbxr zGWgtFwK*V*!Yfld)%mqyRxYq_Xp%VzCO1@>!)JiKTfEY0!*&Ed=fjkZ*D4Ut6G}M= zK03`!&f&8(Jm;08Z;LpS`hei&vid#<5%+rf;nCl{@r0t925*7~9o#y#=3@vzxq9 zEwU;MGi~hH@RvK*Nw8{RiJO>M6?o;39i}2pjrawHO}@Mr+?|VMURfTdG*;=pQP3X! z3SZtA;dA*a4|A^+{NDlR)!o9ENi1LGVamO=CT@Q_UoK<5@-XF6!0kURUw(7h-F|&~ zzI<1pl|MCK{_IuEx2p#oK= zy3EgKFLCBIp=#pw_J}fRd8~DM63i!Rm*Z2ZjIy#f@nz|(0AA{tc@6XJo3AFtT1F@2o{WtjXC}tC_TGmYz5@V9-(g>MO8MOVGr)ptV zw#b)7yJ)`2vow#gzK;g66viZXvDwEbtA%KVst?41M4Bz|1`#~4RMp@YsUly-%^x1{a zG>jdMn|*|G<~JQ@;3ucV;>Um=A`~c&tuqvQ?SK9qM*t|GYg`j%Wea>c zfxWN`60-m|{$!nN-iG}VnEA`U!d+pQSLim9ANM}V%9i*tm0mH`Zat#>JMYI$+PD_| z2vYK9xjzg6k-06}!Ux+f$jair+vdv>YXyJw&ouV!n3KCXeOVkH))t8&Ou4_T465CchQHUgX_taDH}uJ1fDC zf^ZC&9ju{Y$||YQCRtgzsqp0$Kb}n6r3n16$fbe+Z5#NhsRz_M<3q0;QpUnKD@*%s zi!YN5etP447Q1KOjcvyqX-M**PW*sbCa>TYUUtY1+c+yr`)-Rb6Iq0LxyB8sky&ng z1>{U%U6f~Z9KxNTmI@!AYAlSivb68E_%f13;<@tyw}B3?o1g*iRb5bwMZ?3c0T=?aXFGS!BO1_)pAo z+X3_0HIg@{Azbd>J^P`)vLt?TzAVc$-XU#+c$t>qm=0i_6y_n^$m|`W)qKvYd|71V zxx5Vwn4C1%-x>*s->?R ze3>da_B#jLAS0HBV4Yw-<|36a$pC{AZCdT?yp>-T`50{jmDJ*|eG|3EmY5`z#eEem z=gXqbpvpF|Iy4*Of)jTj$o4|-GA5b#RkWNhr}1Vz=4iSK(IUb+tq5aJibk6X1)!iwF2uH(J>cELbwCf z(Po#v8s5$#2|^y+L)4z_ZD9Kp*3APhLkcB?%b=V#yAV>{D+L-#8DCaudt@63xfe<- zXBM^iE=xnN5W*!thInNRLEVI!S>?+Q{0J5WO%FAxIcJ)><>Q zvjKJp>q$bdz$CFuyEutW5OfBJ&XO<$Lde})ZFo(5(Ka|kYa>d0a0Zmcj~?^Tt3vZM z%doF!=<9q?+^Sg$-ALV2M~{%t#1*AKQea|Aya)Rp|BPeKMT~1Uc;$YWu&)Dq4I{yG z#FwX&)}5&OB=^!8@E#{bfX#7un{bi+#Jn;~Vtecbh2S;egN;O#Ckw5zwo5TOeuT(c zirfbEHs?5ddgfY4xf+=rvL;u}e7U{yZqxB9X&We5irA6+Hd>wdhS@VEq?`w0<#P~U z%$FNydF#a({S26xDX}mvAHU{7#m{73nT3@1ebWOwl+VFBLUz`$pDc?llvw;6kBN)? znTu)O>s)pk7Qe?{A2n!O2)T7#+s1qEfL;ft#PLJZN#)P>TW>D#hblb<$PtVCd%#C3KzY5 z4*Zm{+8E!Wz?X|WIq%5?-0`2UVKp5tL|<YA>Bg)XKX@M47kpje zc?@~3gy$>*Li-;5Y-2UUSrcSx1l0g#miaQz`kx~HAt3h@o+J1}+_B?+W>`%!Joh+f z#JM&?ndSU4i&aeSIXvfFE!?q&uaT@`HSjYF&b8nN^QZH_mtW?sXM(seh39O-9f>96 zSWWy?%bcN%^QUu}FLQq1yupFB%ho#uabXJ2fgd<`QvBptP5jVVx>oY1yZ3%q&K>yaTj(q|2w}^WRN*5DoULQEd+}rJ>;$SY%6v7y{K9@7 zg0CRRNyG$O<}gA@;A|bM!Al4Iw6n5C@~029$`W7R0o8ZS+eMsV=RqaJg>je&a}P;U zv|Gh$eEzDRbMFMI@hUg@GT9|RZqgc)#wb0)HWJu!ewpH=XuXQn0!TPBQ{y^0Z#n17 zY!`N=!G(w)yf45O=6pi(2vp@*%}6e!m$;{upV}?HOm^uj5xt=u``uU40rWGb5lR7P zIaV`5N{z%l!>(=dWwMK3iO{_x?Q@ctG-MG6 zJI(ww1&cXWqcgX)0?rwt)moU*I$svM;E#SRRs~V?VT7_2+XQo7tRl3k!n$&PnKxy6 za&*l3bYF;V;ugo8+fmT!Nr!di{PN73(%&Jh%s8Kbv(=M-HR2Sow$0RXzAWPea2sw) zp&MPEhZR3_dh&1EVA)38vwS|b?8?o!FkbDI^My&#rVmg4C9GDlpG~xCH;%v-yOqR+ zElARVn4k9T6d$TA2lxV317+k&Ip0{o>o#8&yH&6$k9k~JI3KVLqVKHB0lq3ZdsO0{ z!&C=NFY@JMbXGN0=3z$-ixb9`p8Wf;yBkMH%B4)LJ=alta=skdt)jE4rBW_EBR`!( z1ejwr4ba!6ObzSkd3rOyEOzOv>g~AjWaVQ?dn7;k*V~z-JrYd~&?@lUJijb<^Rue+ zxNvoLMgpCN&dbfPnu7dS1R6BPJq4}OKFIUS!gI@U;XRTni3mbvhSd%LK0?r-r{0Bq zwXTp~c0VpI+z>yV8x6~aq2yRijmhC$XDbj+(CRDs<+%_S=1ce~4oj_KwF4OHgw!EZ zqnmQ*H_tCqdrV!33-fj5r>7&cs2r;uhQ5id_8j*N=A7r3`TTI(=~7%+m?UtulR*}h zV>L`3##rSV_mnx$B1(Q4dw@+S#f62RVodVDTO`A3%{XNI=DLpP{O3HsY$PvSj0+2s z9G3MfW>FbdZW@!e8f zSeWGQbW*QjH5RhC=b_PpR#)=NhiiU$uJgEXM{(gCS1MJ&YPp~BSntQvsopVK-OMj9 z?o^#`N`Qmej;(LOY7#$Xw7SKY6|^AVl>YMfzu^GiTQ12jE7z@W%0bmX!2!N`ep%Vo zO(~nUOe^zw-p-ddH)THMoK}8%zPzz1Su0}4@^w33E`KLN2vQmHm4z~2mY2*cbon{w zLSq5)5nR6UgRm+wUB3Ur$5;MT>nO}9PZ{ff>zTz2HN%`g6#i7}4XNiFXgBQ{;6fj_ zjy{h4QBDg>qVokU5*OM!`Z)U&uy3!h z=Hp|*kAUcMTG)I5KC=2(L+=5KfLoLO3D~Yr6cXbqOl*Mj>gU4$0}k86?q0I0!;zP_vg@0wb1tm zT9GCEw?Wv~@bb%=M${1!5ENAtYD76d++8L^$Y!DM4?*gA&R_e{{(8u8Zmtn^G;Y>@ z^S0s#W^oTt1iIJKFz2w)81mEqoc*ltFMCYm)HFW>TIA=Oe`x29RwsWov<5%GVQTpk zu!3y8otaQqJ0nudcy~q4k11Y$zMwzDL2U8!-v)^i1Ui`-k)PgB`qUCgXYilZ^PFJMER^G4x|4^s1ZXEOrN$%8rJyFLCyP)acy|&z=N52 zf4L;Zj_cX4?z+66R?tojr;&}6hs^!3P3?@jxW>acCt>Rv+FxX>L@@dSV(AG zh)8FhWPZQb$YecT2BszqU4r}+#FkQe=ecWtm{*RpEp1Dbk5E)b2YHyE$4vI`4KZ0e z!(>>ZS3C0e#E&<0FWSt`FKOBy) zzz@#4mUr+2DHtNPZY{7#P=sQKaT*r=%!l5DryC1H-&GLghlnx;vB3{D@SeVDfl2k` zchqt0h4RgL+Edb}Z9o%{e>8&M{SuL(%c%nnBFY%VhEi%^<-cj+qiotF-)x8jlqO_9 z7X1h!6;yI%YRqKiJ6ya0A;|A$4q}5J;oZhM6P~Osd+#X8Ion4V21G%ml7=NeR+ucb zhZ#EgS!xDrWS-nxXxYK&)xB38bINCg4s!ESWLr6_h>xZzY&vzonRD-=RK4)!)-_N~ zUa56hx}KZ^O%Q1w%bW)0qpXP^4D!>!Y@7O-W!5&>mdT;6N@XmHn|IQ6njsZFs>39x zy!XS?vjf9kl%%=|ekUZ9?>tLD(AI_Y>2VZ38d_!3Exjuymp1U;xp3CiVwGbLK~q>Y7`Z9O}x^ut_MEG_M}&B$l}sKHAP1 zls%3nJw03S{M}%;XD!LOhh3V;ljim9kj66k2-R{ZD_lb5?G zi>g)7Jdin-8S&8&NX`ME3176^vkrepB?r(Rl%A$Ms@6L!jboX@M^7$b)&cohd(qOY z^Q5{I%U?ewYLvjAh6gCI%!rTb*pE=@^z`gXW?k{DRh?yJzbbxoWwodvMlRty?u`bk9DcHLXt;@n$Fs?+M@$~{ckW1+pLMizxU zVVdrBprVYsW2T>UL*H&fm~pI+qmo$W8txXRA6;~M_Ce`mGV23mtvNLg z^>dWvE2U2*mYJV!%uGKmzP@O)S?@K?dZ6D?v7h}d=~Fq~IA!|0N$5qZ@>%b%Np*c3 z`IppfSB{sfK4JPqjHZ@i{s*3Qo*JLn&L_NbrVnqN>x*_cs#>Ylq`IbA|6hA|Yy&U| z15wnB;A~)4VE^6H5d8w8G?-A_8vqKVy8vkWH@J?iJ<*LXQtyN0Dk>2_;Nc+vF$`eL`38Ui<*f&-e`;z00000NkvXX Hu0mjfOFqu{ diff --git a/public/images/pokemon/573.png b/public/images/pokemon/573.png index b827c23d78e1139a9bda5bf634b50b70e5aab648..a33172fe8d314756737181c9a45fee4296e4abd8 100644 GIT binary patch literal 26950 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

    1. |6%j?Eu_tmeGV^O8vyYFjr zic(3R-(etTdnWTGa3@eE$%HEYy%VGGc|v_cD4^HZPx<*+D>EZodc%0zDsBHHBq{Ui zGl<*16*$_eL{6HrR<=S^HYP5fVBwM<>%28$w6FPTNYZv0_XnK%pDjk@6_2G?vOs~} zk5d*FRzS@{ao;0cZN|ONN%22Ojm7SA6-KyxG5siy3`pr@#mjF_=`+#Bl34qZAnSD( z9qBE7ECjXL<46J~itYRQ_jMconv?$S4f1Y@JX@-coVWIqLGt+_M%T^-Rwguw|0?1hTD7(` zglXD|Rp+=X&n&rTwtw4uo+gIK;M56Ubu$%DP91Mbht)~DtG@m;QtU_NGb2Ja;{w5_ z0yiZc9S>;;P|=Zs$Ej zE&`3%zlB~LEOe^vK9qSvdBr=aEMeHCAV5+le0K~+?qc)BP9SKrVF7jxw= zDSK5D$07DDM+*E9H}D|e;7XDc=x8(75gsF_`pNjpm9zb9?Wnjhrw`ToCfy`P{joZok;fTB^y=9#MFrC?KDvU?Z-ADOwV<8J*S$6>ALrKj zit_3NuoqLuC72BaScaJO&|-9`M5)Cm(Aryl`2z=mk*XpA+hTh>38(XWFMjXjQZcBV7BA$?N`b7JNZn$ORAcZF#t>uq|~#j{#I?i2M=$YlhScBuJK+KPv#Yr+cV?c?H_ta+1uS&_IJ{K7Yzd|U`{>PTVcJQ^K$tnoY)H-D~_Y%-2gRd zIb*MDPDVkmpKYmJp*Hy&5jw&t?P)6qgpH87xYE?b{0}}k$7qV$eIMqaZ-`8~fDDq9 zLzzA|>z1!tb&9DQl!t&yl;AyYO_>1nsy(T4(^+EugRGIZRG9Hc5!hx3|5ID} zFWsj6dO&dBJbsKzE2Hf$lux7N1DOXtsthbltjPHwfTj$rs#9ewPzZM5qof2;2-gi=)Z^%Fbv@IR3Yyg!^? z2EZ%oTU^G=j%J3@Jbhi$HOlvNR#x*L71$O{qh8yFQobYKW0;KN5{=d+abTTH~43>PxWbVX15K_S+2?q;?ONWqw|bu>>% zBmwWtO)Vp|5P2YVXL!mfYfoA5yJc(r?t}|Cqy9UCGbMw}khd97UfU)Oh*Z*;vS+FW ze~nnf*$dIx=^0#mi+r{j zp_Y6H%O-pdk`m#fh8DnDXC&w3=>&>YqS{^H1hd+?PR8j<4@44mpoTz1CWsWd$aEppP5y%xX?Nd!M3 z4eE$j3uDirm{13XKGuRfs>z7@ix~Sbi=DQpOs-@TK1`{3tCgOr#7gUWF{HugrICse z*E8&4ftH!7)?Xoij}*g)hXT4LwYUj7DkyW#V%41@Tq>^5X>f@YCk#7^EX?mCNRm@@ z+U{$+-9ro<@}DG8>cCEy88>WB9aB)Wa?izMDf~{v%y+DH856Uw-YdaHjTcL8t+jUI z?sr$3D7ze;n8+9k+j}AC)>A%-q89YUgm7DMsL5fmX29+na3hrpbE^0o(EjUb6S2_P=@^j=mK$$+AK-goUsGD;PCXO6DseQvUIKOttni z*T69%gI%j!2Vt4nkP~WoAS=cYgT4FSmrSv-Br%#V4xi3!t^B{T>KWs2CeiiPIrqxi zuL*i)3Jw?$e?mQaOBiSD(wb%6XrF; zruiD@Er2}8pE}I_0LLL=1dPK1Ofl@H?sEon=-dn`hrEY zDrLDK>Q4k{btjS$LJ37$yG}l~#dirr5-+61_N{VU=xGxj0vxSrR|!xRC8`7kc!pK# zu|V?#2d?@xTjGBvSZF=@Vl*>lLdPr-)8EYd1Z+jHMG1c|j#oy>a?gjeJY|f$wi|C~ z=lQy5UjhJx9RKwKBy3`f*4_Sm)gx{$V>=hKc;Y6ks#qo^*z9^-?UX4Tm=hz1A-0`0 zPTjLNA-(_@TZo!QR94G5s9>9{kg(RfcRUclD)LrX^p=b+>enz|C}pQhN`&$-D-XBNVTg zSWSjlHdVm>Yla^BmNb`;IQAW@{anq0xOv{%3cwG4f+{nySwMiVW`h3+*l=n#@r}4G z<7={e&{k-GI_G)kKEw(eVEYQS%0>fIoOa4wMM3&K;gyou z;?o&s^FATlcYXbMT#lWB`#5{9#TL^HVhM~lf1N`w**Le%jzmbudxB`uv|i>|k=!LSih zO-wTRRf;n62Q-BYcA+KO(xrb?8AbmARWy=$NQ@ zrPsgqMU|>J(wN6aU++RheUU-sYcU%i=I6J4o9OtG2*iHI3fX+Dmlm-w$KdfCvcdJl zkpK>g*bB{&XP@rNiJ@u{8cKCWurx-}TL-Vw5*cRL)}pO=HHE;f0f&HB&Wv_=RIOC{ zSHv{9=es!`O8zSPAM;Xy%9b)_s1L33KPDprqO*uk49nT8jSV$iWDMMd_cb`pEqHUA z_9LCtY7tj}hfBICoxC2AJplW2AN(iQUL zZkJz)m^!o}Oh5E~y@c+o&ox38s#?m(k-_|;=|%Dx&&8&6sbui)xwZ;)oY=vhJ`1T| zhpEc|n74K2Nl}@=EUMFMso|&8U(Aoq@9llNj`fs%ftm;R zoawHI{qFDlZcv!oH;SId7k;)-?{fePDW}hLZgJ*0G@->z*gUHtGKw446@1cs#wqTU z>Lt7~!SMx5DyKugjIZj2X}Kcg;y8EKlX7dL4>n-<80o^>J!HdcZT%%Jt73nQKDDlK zUq1&u$ml?OdrvfGKMcLu{55`jtk8Y?=YJ_$^Sq%nj?FsKKKFRYbPk_-Nw}>UH$deh z)pRK0Nx72zuZ{<%|5aQJ)lX=h*&80*kWTI@arvPX4xAEMRK_dlu_zs!=r=K~^Ibp3 zPujM+FUkphAREs5FJLJx~1S^Hzzd3VQ6x+pM-XFhZ+ZkNh|E6B#;z z&2T|BORt?CDjM=K(lPY)Qg?fYiMf_Y^xv~%WIPjXuA z`Zj_#ZtnbniL~vJJ1i{s?M7@7f=B`4qu@nq(`p4d& zh>?5s3Lk8JjQxKy4+=Z2LZ5r}Dz^6hrwjixMezSK^%u{X=X(EFQQ+Wx6BR&5!%)3m J)hQAH_8KWP0tWH=~AWV)0S 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 literal 11157 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 Wdgvxo*MI+Y0HCF&uUeyQAMt<4$HcY( diff --git a/public/images/pokemon/back/498.png b/public/images/pokemon/back/498.png index 8ea4900e8f36e11330aa793ad29d347e862881dc..c14fb4561e7a2b4b85f8b4b498351430239f474e 100644 GIT binary patch literal 3529 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 D@I00G literal 3314 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 diff --git a/public/images/pokemon/back/500.png b/public/images/pokemon/back/500.png index de1b556bedef05cc7e605523645c8add9e94d464..082f0460ff2a5b8f1ef8fd65133194969b6f7994 100644 GIT binary patch literal 27751 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 literal 5850 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 diff --git a/public/images/pokemon/back/523.png b/public/images/pokemon/back/523.png index 6f25fd9cc7463eb9f698833094bbdceed8f1c7aa..023afbd10083a3fb070ffcce0e5be538997201ac 100644 GIT binary patch literal 35116 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 y02^V6flI-YL6oPfpUXO@geCxG${Di& literal 10206 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 RW`_UfYD(IQwenVB{~wf{>P!Ft diff --git a/public/images/pokemon/back/535.png b/public/images/pokemon/back/535.png index ac477600b72d859b7072319fa86049cd1b052575..2556d646aa69cfe83d9580cb7c21175b7136a080 100644 GIT binary patch literal 5310 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 Q00000NkvXXu0mjf0OnUMumAu6 literal 2188 zcmV;72y^#|P)o87V0#I%AANLPBF>V{5(tbCktIB%9g*0004WQchC&YZ z17vW`4(1QJyyZ`CxcaZGuGsg3m~mKgR0O|4nxsZRqNL_WVq950g}~gy;_9cz-xf>sbIr*_&c44sCEx3(U2=VXaVYy7!{SiEQgYMzx z?AvdmtN1*}y?#6n%jMkfQ$r2jJh-{m?_;XkcdGSaKj}tnR>c*Py(TY~8q>DD_tMm8 z0AH%*r&T)+Z9i%Kbgl2TybIfa<*Mw)aevr0jY9+YQrEs}M>XG1Zmz$p!?kMwmMcvg z^&-SOG{}9mo`|X&_s5|Q)CTaau5UE%Wr%wbJ$paBJjJC_#ozC? z=Vf_JX{%>%MYD3>>RR%+p+a1+_4IDSvelpg??v0!s!PjfR_F#!Sx~#dihQuIx%|OT z--%pn-+!-K<+$fsHXm!Tk*T$Y(YI+q++*Lph>6TjYmEQ|aW7AcOcM*4-Pq-|7*(^3g@p%&dDaqp->!&Vybu}YXzE&y}oNViDb3)giVz1Biv!rV=Uxo#Zj zTrEM@Yrnz!1s@r6B^^=Xo^nF1?u)B@(nz(;T>ZvK9%Yb2r;FvkWK0(51l<#p|{ z#3Iy^Gv@dhgM|RystvW)=URTEo_)o~7%T+n)LXn!P)yPw5j_*;=ok|V?^3@?deKsI zBJ~tL#$aK_y#zn-aoJPo7!x0J8E}0a)7}d86h6kxM*{%p`7$Asjxq7kGW1Nylj&Xg#X`H#r*wD1S-1;_Zr;~QYr;0epqz(=hGa3>zSC03ay zEKjvow?Bk$sNJ zze&L3B~S2dMWk+k-)>Y*f$fSqr&aPP@Mo-oCzuRqD$jK#(lt0+j@~&Ie|c)=(>awP>*nb zQhbM?YqLO_=oaF_C=Jx(8;@ve`)z|UqczbL9i@SK(XO5xZamZ)1JdM6hDX|pG)jYt zitiF9n3K*(+sAi10%9iF*N_&xX zA$}{8v6PNm!K1XYPql2Akd%%ST^^++Y!5?aAdO@#wva|?ai_OcWg=}UYm-@{wDQ~P zk!3B9(k^Bn%UT|#UCKU|wKPhjv8;(SHXfyw?FM7n%0e29Q?U-k6ZoJD8ELlhO)L1I z3k{^fNHF6(ZWMgbg%^$&ieHj72(X4c#DTZVPJV?>*jj7U^9${}Z@< zXT10LiLpp;11Ws=(CEEqJTVgKQS`MFVDzDM<$moe-_Kjk1Nk3Y~Ppq%LDbvK_ zC7u|D=A6jyCR=_L1;jTc8t*1s0$xL;8;LZ`vm_u1W=fT z^O6(!!`Y?0@{$wz!`Y?0M!M4XHgaZ3vU-rA)&k(I!O#)+&@E;LU3-`T&m{MRDe!RbE$ O000000001b5ch_0Itp) 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 diff --git a/public/images/pokemon/back/554.png b/public/images/pokemon/back/554.png index 4ed9c06f0ee1394858ee4aff982781a9bb5cf699..f6423a5e66ea701f3c3fa14db6a5ae2c37ed7b0b 100644 GIT binary patch literal 3765 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 diff --git a/public/images/pokemon/back/555-zen.png b/public/images/pokemon/back/555-zen.png index 48ef6beb7c48b476023da68588f710ca52948a2c..8fe0e672a3a0bbdf71704318310afc52b4c34534 100644 GIT binary patch delta 2157 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 literal 10269 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 j`92ZN`7Y1;O_3h-6gmNcOKup|Nq{sHLK@T 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 K;#H!CLH`G}8h@Ao diff --git a/public/images/pokemon/back/572.png b/public/images/pokemon/back/572.png index d7ddaf62136740d388f1917440afd884aaaa2cde..4d081564b50efc7e99ea76fe01050ec6ffa2383b 100644 GIT binary patch literal 7678 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 literal 6484 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 D65IAV literal 8869 zcmV;WB3j*vP)hK~#8N?VZny97mSNE3Dog%`IQ4I@Lvk=t?NVT$Ubsu(o~bnypRR z;KO!7?YTme4oWZ{Yy=ke$y&6v$u1gPR-++V4J`ODus2-{i?Er)AQG_`a7B*`UuiUv&O2jccob-Q8I{+=RekFi428ii*a> z2m7=M*qP5oRG(OgarQ>Nz%%R-dGXf6-K?^Y?L9rM*#&fmb zSlNs{xvkE-!Qz#RTSOk&073{8gIe9@o{z0QaneiGS8J6{5%9 z#O%?KJdB}(fu2UG6K0eP9i6#ej%)mr9DIS$aH(xq0 z7npJDp=9K_*d zjn`wi6=TVBZNELb>4C)Yy@}j>{m%z4g(}`@`6tk-jl)N$@FKDhx-oc+QfBoX}^1Gz7lRMU% z+A(S{(9gD!m^Z1YmC2^>3DKi_Aj`6!s7dRbLA|x9JQ>x$@#6AV?_XXn<+6oKo)x3j z^+B|@Ua?9lU2VR<$DNl8I(R0>Kus!C&c3I?wY)EXd*l7fO38D@bgdXUpkG}G=gCOP zYaG|5lY*Jlvt;Xx8(^-o*d`h>0w;npxVcrz4GL#e0qENl;b`L#AtaRFI5_2 zXylDs@?a=m8Rws8&_3ctP9I4#X`OS2r9CQd-pvL82T%GCOreQEc>t`^i`t8)a#^)7 zyqq;B;~y}>HEEr5r)L-0#FjkkW;#_GgYq!OJX{$LtX~N_Qhg+Uvi$mm*p;CVO!Y>o zB`-I1F_Sj)rcQbHbhg2LGVfY3ooh$3CeW{{N4TghZ?OFOtIJ=_uF5|LS{@ffUWt>| z@^GF4qqMxlA+Kmv*u>yyA58p{e&R-7uyuR34M6h&;V^ zf-!6Iu)@ijytnEX$BqueMOC(4fG?}3Pbw`hNpX8}j4U~-Bl6Ogye>pzy3H=Zy@%6+ zB`?!s@DvXIa|xz+C=W1F&N)cJ@>JqQd20|)0TZQzfhh7dc^R-}YF6(RqS#?ryn0gd zM4A(haXlq(E|Lu@oOsn41-3lBGBW|ySn&FFpSI-P&$@$7SRSbOcYi5-F<4>V35^tM z!cks5`e~kYm?dwNsvk(`ENLsQNC9~7@i)&lsBl;wfJmE1rbcUJRsoa0c_BDAN0)QP zL{Z3qusklypRoQPznKM6s4F}R$zz>7g%O~<_G9aRrhf|o0KKsgkjP>d#n|^iZBN1yx}TagSVxQ(QF&m+JRoG}00{6iUiF@17EQc`g#B&zO?8dI0eF zSttcvVT^DOmTP%=p~OMEc<^wk56B}O1|SMu%y&t?>>}r?JUNG6&S52=^?&n=b_%_b zNdYU&s?Q?wu3TKmsq=i4bz$vod-qt+@W=$7ymP82d`zd%@_LWdLE^oO_6%Rp6hy1S z{VIvcs~*a!Fa9tB0Q(gVcki_2vFb=yq$1VpFN>s+cTG-*@{U*Xt}HK14Co5inopLU z*yu}n{fj@SXgd{lT~)7t(#SIlyW~}%elIQ(GaaU`>yIgz7{;5JD|bImqVlRE*P4yo zD|e18d5ng#DlsRinQk?1e&9%fC5^lvz5P+=wdCQrez#tNJ^Y2yBB;D2*42`C_srobS+DuZjXB>&vmbg&P>k)f{Z zaXlRw;S}N$Z+`N@#<7VbL%_{RMl^-^xc&*5IX>tiC(458_LE8=yH#*EU=Iko|kI;=)SUM8k$ihLLSA7WMxY1!} z13rIEv zceso})Z;_-J7^Mc%fng-F?gFIAa*F(>$n$0p&ST;8TRw9uH6gjllx*$()-?5P6fZhXI4=9!3)Ge_o82_wU^+ z$-)`xb8_TcQ_J3QHB@3;8|4vrJRzuFsmlwo7|$&#)E#2DAHwrtyUGs|x6c7RAT&`b z&!Bo7kh@vEE$^Dpe6=JvchazMO&6{?JPgD3=DX^uu-H3qΜQgbZo!mX}$l=X8X% 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 diff --git a/public/images/pokemon/back/643.png b/public/images/pokemon/back/643.png index 30b32e7902d585673a6c231a95c605b6abbc95e1..597b4bcb1891b84f287d7f081935e2b9a5418d56 100644 GIT binary patch literal 122695 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
      3aU>c3+Y6dd=Z9RZg){!AqNJKE5<& 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
      |u}ie9%KQGzp(1+>l6`4r@)j01Qh^bx!`fT$% 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 literal 41502 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%0AkTXmMoLYW4!nb?7xj*6UG?>7Xc@8 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 Id8_FE0VDK5761SM literal 34555 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 Ss^`All9&s|!>JJ+l=(L}-+CJW literal 14970 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 Y!s@o8sZ{Bw9shmNQqxy$RJM)!f5SCa{Qv*} diff --git a/public/images/pokemon/back/645-therian.png b/public/images/pokemon/back/645-therian.png index 2e5e6e03e0547758bae6270d6005c0d19d9482ac..127a759f89af9fe0a5b41ca7c6498170f9722222 100644 GIT binary patch literal 34724 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 literal 24955 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 z%0AEO#$-Xwkolv?KYXM_%`Di~OOvX333ewWsdLB5uaD(XjIx*2ggnhoMx=}KR~cQc-m2y|fg^=< z7*etx3~@81k*hGCrEdQ4T(fD+K4*ERxiLAoxWi{Uer1b=nc3v=CY#m5O&8Hiu;o05Pd-iJ950Qr{{oNNk>|#s5ZFSP?ZRr#Rl? z)rgx#S-A2Gxy=YK*7&Eaw+`EFE2;Y`IpN2xt2w?;S~2E63`8dsWo&~RDq~1b3CPRw zHV!l_D{9eAYQEClsdB|J8Ev5rwi*C1TJe&7ZhJnrTasc~KHb^YrChgVOVo#vR)>JJ za*H2C+}}5TQ-8cmB8&07dD#@+fJ7XS@b0A@O94uAk}$2>D!S?rBcehe91`3+S1jys zJf3J23Wy%bC1fsgs^Cg2{FXXU-D7AdFVUwlDlHi=CQ1cr8St169ehdWO&O(tjelv6 z5Li99l@{{N#N#C^yc9t^)6`a4BXj>C#NLT!b}jkmep`0@H-?I&&j25SmU+;=)_v%(OjY380?&&A*h8uaLli{{6o%>wFV(@Q%Wb4zO%|wXvB~)6q zMybgT=y(ej!Z9i&D=jf*3_ox=`v-{qRC2S3=7#cQs@s{Ui@zIwsB&H%jTnLRK>x({ ze~9|Zs3^Pd?V*QG=@^DaTACppQo5wOyI}woWat`78W9jsK^mkRh8Af_0SW04B-Hoz z`K|wYKg^d|6X)!+_qF3(d*2)xkoW6fAP(5hPxY$ZA*xsp?XxfY#EsqO9IFbc7(%Oo zS$cILJIOSsd$Ob$pyRM#y_a9vX+-c)_2c;XY4uP$N)mR#P=Qbu-GyMXFZZ$@ml0}O z6&!-tTm?tg#i1jHA0P1`x$x*hnq~Kzr@8YZc$0=T;ZU-CXOFDlV+ThivYu`1h50h< zNXLzwrancHVvsle(4UWY6Ma)Jyxy5W3D}0;2DB+JogS{c3U)x8%LOpEmcQWZ=7J)CYe7?)-&MrF& zT%7V)*jW-|(^o}o{3$;nr&{P4?SMk;yeudF2+Wq((M)xmVS+ZM!YW@+@VL9zzhIj zNz;wY7eHCbTRfH+-Fn0v;6uFJ58f{0juwS0q@I=8S7KU7KW#Y@Hr_Arx38pNKmXWg z7$(Pya6Q9rxmKPd`2P+vXO9IS%E*b8BPP@Fvzyb zj;;PDIN8dA88S(Z@RN#OsYl5|_g*4uu#?3=-qV& z@>ojmaP;G>J;%Mj{`Am&?%oEBX`{;H&wo*=OIy{U?YoYLsh&Hk_H*Sxv!Bp-9y@LP zI;fqw-_FYM*uP8})p~9fTtEyUZ4s1*jS8sy=uy3_NOjp(5Z^aRh18h5N*#UdPcYT& zrdK1u5M-5IJeDZv?EM{80a@Yz*K%DOU(+_zSNJw}@)J)xrgslFFF5p$A{_{^!_+>l zs0P`dh1^J?&agw48k?sF3j8lL8Fm?ScZZhYYKm)zcB|a^SG3^mT_n%&b{a(Up+9pj zowmaLImydD6DXpk<+a)A>Xt1d>9KRzN3U;bdE<_0^bhE;pp+uU6(IpF3de82wFA0^ zWm8SE({lP=Fe8MJL8n*Mif54elPFS&S5@5|kzV{f#GQM~N&6Jkexj zlp;fzBBE7K^md^=Yqmip=%Fu4Pt%<9H>li1r251q?I8Tyt>H{rS(fsO5gFM>LSJMr z=wnv94lodal`EYb(=foJ*Rid-C|v@Z$rL60HlE8ROb>)}O001zjh^ou5W|a=xb;nZ zM+&A=#~sLZ^w-}1roaSTN6z^Z+4G}#%G~851YTC2y-($0?|3Y zpSvNe77&)7Tw;X{5%x_M=8r4pf*k*h`U|#NKl{#qhj7C+&=A=TR5!^@JpSo#)b3Uj zXgk#%w4=2{hZ4E{w@)^u>9(f_CWvS`DKahC^yZ{iW3riJ(iMHsnE4f<#}BfNZgNrY zO6?Cv?w;=%O=536i|9hAsnW=ME805FSDt)2`Gz-rV6Evqy!O46GJ1$!Q-nh$F@aq^ z{WrHY7R1nI<)9;yAdZGY?<^DTVwYv!xpYdWor}m1+02jVI9fjz9Mv}8X%#AQp>Tch5BzSovy}Y-N-8T|JzA**@4wDDo59lsNALgKZ;i7Sun44h*WP`fj z6-B!D%XPl(h$}p^Mm&G&Z@g zkhGS9Gi5`)tDwcpXbYQqj2x<8>|G(&Awj)aVszTJo%9jwap|FS z@j^NMV6`IG3f}_MEO%giC}D-yAVIH?xXOGxR#a;O73ldALm?-qI5lticG0;~1FGyn z)28uOy69Mk z$$NA!XB-sw@dQgp7x1uBqU_&Xx_;Xe<%RbY_!D)=q^xT6)p9*x7OHK+M*`M z)jgf31Hb z^?=dfRomyx>&DM%5*yi4LG6)k4+C=>;+mHVs4+-7hMD5x1PR|97EZOuSQgLxWB?ac z7O*_6!3{1?Af_9E#U<@i2)8YaQRH5fX>$7a|B{U9eqyFgXU7SKD&dC6ieSFf<;@y? z@`NL&Jck5PB6cXuWI86kK*5?IVT7$W&7bUC^MZTN;lkkHCH&>)5P)!9<;S|x1axi)3b8942mKwi=zCMAx@2_8AJ*t4@#As^MG zBe|f@jOC`ZlQ>T_h3S)L;=`)0?<2SMZs(*D3n`lSX%J3ZOW=wp@H3lX;4Y7@hr5+HBYn9W z3yf+VRUl571*yT;kOSXI%Ctup#Tp75;)sPzRUawh9;GAfd^Wyva3QTrxPTn2_?caA zCAeH{~@5Qfu z^QWI(fd&eH!9i+XKd`CK)2yKjd#E|D5+^1(4ix_w`@IT8 zM|dxU@D?kLhB5_qd&>@}_i7B+6a*Xu*e(%Kx;q32fb{>iuviJImRbu~zeh%tt4&3; zKnS#O()zosKqSz~?OPLj1kFwuH^mb3%zdc;!Q@v7E^D!WDsbMHzHDqf`YPv6`PrgH zETq&DWg^8?4s>Xnh2+IdclR`?xWeeI@*Ic8&(9byPOy%jb+;`4{1FU*-pAGbQN=ld zB__&0y-D&i$D#s2Ds-*5OV~#0gws9Hy+L1%VM9Fk_HFvX5((D)m==5Fi^9(b)=3<0 z8*7?LF9WSB?1Sz;zI>SV%6BVS0u$)&ASo-kj#O&IaJ0E`te8Bf`Dq9;j}GwI^T zRf|2>B;#9oE+0mn*}?FEp=tD&Ma6d&S0s=kUgG=MIB2_Cuo6`$FwcPuiR$ez)i)^&gaWX3AtTRZB8uD(kc`$uvg@`( z=3U3h3d#vKo@Ll0U1{d}xW$|u?q+)}9Fafo>Ih_?-NlzjRgPIV%m7KP!D!Ei?x8^@!+p?&A__j+q~wErCk{7O#HlVK)KaA zvUNducL1N2j#BAqu5f)2K2wE>`h1}=1AqrPe_m3kM)Gx(y^3YP@XsV1F^3P8<>2Ku z)Tgj+^JO7gJjY;|!in%9L+L@qoogwfpRxitC({NBYJDLtYX?OW!WVw2716W~%vnhz zJ!7y(4$7l`6m=sLo!Snd+CWm-Kig>|Sf`T>r`6h>_`P^nBSsC|W?nAlI(c8ebgV5`-??%~F zr&FenpEo#%;CBAGzxb-`)o9PeRAX!zB=OFtw+Wa9?V6<_G?A9^$n|l>X(&DIPi1eW zmmoO$@PP0Ie|Vz`wtvk-ttOPRTi&u*O;YdA7n6?`sq2TkgomP?Y2rfS9Xb{mO02HC zb}k%9r@o#$>TjDMg0%}kE+?ei33kF2A~ZIL_=*_1{)UBz zkiT+N?w+qwBsLU1@dOCh7iO7p#E~Bu#+gWL+PBBeuQ@@k+n`fbQr?O7vOcF$@V4W+ zTftCq=*k7tzelqJiMX|}l;-4?YoHYtXBvjIivKdRiOxU|M(55Nd|cr|!uVZdlD_K_ zCBINoYQKQiGm78!ux0_O&RB4`9T1y z_WReBk8jr7*)wIHE&Tp)T7O!UYDkbV($9J-9j%_t<}H4=VZAFqB`DhTu@{rD-}2Q5-Cik9_3^PaMdS zu@_Fa1W+_UieoOBINB?5rAvLiubZ|0~y&0^k{4vQ2m(pS{n-lYjAt z`u&9ej|%`NS2?*W!OPmQ)Nf4$(~-%U*{iw^)nDz8WxT5b@5`3a}aT|LE8iK6?;N4tE2q ztL}r{=Zqxj61uu>Z5_G*+}wN6T&nISvY-go5nrZWnu*E7YCmIq{ii1gQOfPr&Gk{N z_!{x4UT$@;b{WqsX;)}0%z_3VPO7$3b)D%@oZd>fYemZD|Aik}49vx7dS=nyeA4A5 zvnVIu6@C*t;_XHkoF)Pa)+uo<5mP83XMhZb73xeR=ZQ;e9aw#2%LBVMKEc)ZTFu9t zO~dM^&7kQtG#mPP(A@*PK1=(wcDTj56-1I~WZQOgMcb>Lji+=#6fI%$P z&fupKplBwA&vJIq5~p=?G7L$bt zGf@J9{^x&+(f3Cuw_h(gIs7q|NqO+n+= z($?nv^l!qEhZb`b*MZKTS3Z982wSecu#t^dRMT4HD@V18m|@w}Hnc#}rL3{~M>DzX zsa&5%W=mBUN?*&g2VpkbAANqq@Ffw#P9_V)uG#@^+JLIA9MA>E+sRqJQS1Tf!VQiJi zm|MCo`(67^HcbGDW3a?R$l4E|mnNe#EOAK|z{e`K&_yzQm5K{f6qeSKEg1}mwmXnE z$<+8>XG?3}e40%37k-k^) zuxbUCL{+~oh&<6v#{zXR=q%`Rgb-nKy@Vt}L%wQAVbM0mU4~_s!Fy>mqB}}SSFyvp zATNGL%`Y>T%22=TQ6T|5+=&yR7TPXl9%-otF2RY;di26OcZd55XRy8sr=>>@!sror zwOaQeaMR3;7opz}q0S!jqV}Yr_~ar{JRi>*4U@}#8Y6e!?*1_ zk3h=_W(6X{3OO8*yPDTY+eNWEZhn|o#%rL&y z8TFgx;7tq~Y2BxI@MybQllZY&2*Xf5|HFDm+2ua_Ir=W9gI_*oWWpvNJ|ME`)WXMC8iL(9a^<6c%wD%??37FCzi6FTb6QyAQ8(4S zeFg4Vc}Ctq#3l}-=w8SeB5Hh6^b}i#Bx1jhQ{O&A&oGu`wb)kxzG9s)q$@8C`5BO~xRbu1fflWzQi!Td2O~Iz7I(KtF z(w>OWdL|Vf;;Zj-!kr4i9D1331GGZXzmFcT$d=N9R)vmr`#eg#8Xtvu6b>KLf$--M zKCTu&Z_5wn=GA%hN9b$umui=MmhxQ#J3nG}d&0SyWHN^u@nFaYBAqvaK zRA{iNO=FBIk(Fm|Qsl^QoU-m>)YJSIvX!OObXDKad3igT7TC10HM#Ul2RgG&UP{oZRdpDM85&K~yNxV{tZD5-^;O~~6kg5F#))4g z(YNZ2FrubT2Hs@MQ`j_~vqy4a)nB2ZWdLgnhX?D6=jw;Z#$^sHx|U-tkiK8f4srgD z+OOPir|DnN0N&v2bT-@!3BY9=K2Qsg3btDYyzF4)tzDP(+cplSkqz?2@W5)buxeV4 z=k*$w%x!h$R6}D=(+3M@-^=MNlz=yAsGbXtcqo3enWZ`MCBc7f`!IgC_JUn)XQl+z zntZVE;+uqVVSuvfHL4PAwu5+oVbjZ8YPCMQHl~b|_GjmN{-`W7r0q$L1s(b#6=?xk-O~tZNF$ zp`jSnBIe=Dt)$D3*Ev-&`OaZ&zaZZ__mLR*-KYiitDrxxX>y${ci&_UJz(R(+8#;+ zzQxXU0z5IZ@r{sfztS*dPMs%(n1Dj}$7@wPD^CGC1IzZAqZdncdZs zx}sOLxF9ySyc5A~{AkMVuh5C25+UURO3h~}v4~7Wd6QVWsDRGbMCe;?x7Anzb+ioW zH2w3!l|#BN7ve;2KVmljv3ly4^Wy^$2$@Pdy-N( zFB3*LqnHB}wMBh*dh>T&-rHA7!{U=LU#jgi$~1wa$GN}{{f&Uo+p#FfGnp@WOxF4( zGDFqmv6$Pc$^10EUcPFZV1+PhGs34xdJ6@wE=q+6`Lz4v(0(l8POjt-`^#jbLPgMf7;()BhNANL;D{c~S`U!`E%>z0<=n3`;U$XaD0 z&T`vj{CYP_M6ga&!;xpBOa|HEmd@*8r_R>X<92!7dY|WCrtM7kk6Z#x5|D&b0@%@e z<*W{RC1TK8c#^}!Xu)htBh~-^hbAaml>Hm^oIJapz6GlQ(lXv--7yE7}s{Afh-CAuWXC7J#-t}MB$75Tg8 zEMNY6dGx!{>AB4?D>cP9P4uI|^{!hId|wcm8rY=r%kIiodMADo$}HOv^;yF*z<&b} zx%k^)QR%d7nFGL--`^YC;T#d4)39=#zly4+A$yrmfG`L-s*NWt0bCOXxp=c|Sbm;~ zaUIe@mnYBHCgPI|Q+qVVI50Vp{zzbD=}PNrjY(RQ5OFNWN;gErLH?Pd~znq!%(#n-r2Li#k3G%Nf>Lp4+F zHu%q58lb8?P`ez=hOgf8WKt`;5}RDEx^mu!cz*1l`}-db9F@^05*_sD+Jb!Z=I%%r z8ixlio0dQ!zw#s=av)yUXsCbni6rq8{*vf4z44kNlCP@DC{e>sFAtQnqvoO(Ezq$G zrt91R@R4wa&!GtW%f}0wnNJ})AJoc$JBJfX0(J-Ka}xW?`Z#}K9ciG3R_w(XF<{;=*SoY`2*kw>uVaPjWasin8dbluUJ&+z`w!LL&W;0z6T4qXn zpvtp*%re>;GM{H}U}E-6>7 zjd9Zlp6BL5Y;Dj_DI#Y^X|z*sr$wzeeWfPitgiU^rnON?FFBSk`60Ld7Ts`hoEB*Q z{Re%(|6N$o*z&$aWeDi?u)ie3b1Dz?ehFrh(&Z=P>l0Xu=%#^vI1D*q<`JJOvy*?4 zL6*aJZ%g9`pcQV^+Dqd+a?c1#%1w3$y;8B?YaB;v#Lr&UVBx>iY*vT6a>LMa@Yj?N zB4fq3+dQvj`h>~`9-5=WUn=d)>}QPsfC2uG+(kGgALW=!ou|wtO2|S_0A7@?(V%fLc_^HvH{=%!<~D$EO@_wJlJx_DSti0LVz$?k+}& ze5{307w|BT`VdojYH8RfWW?az+KFXfV$C1$i~EUnL*{Jj4do0UdL8THNG2@BVwdE3 zXEA)GOc&x23oiYB`X_t=j!f4j6u7(`J=Pid3-7Qn0GZ24wH$T=Yi1jhCN*u00lF+F z^C56n2VPSyWpw=^k`wCS(a1>*tlJqRc*iYrElH&m6#FGozeN(RIESO9G8%$ZH>Db} z%!ZV`AB$>(yOJR#+u#V4Qv0?hP=-kQysc0X+akcd{hlzWRb^9b z5$OOne%=9JBD#PQv8r*SM5WImd)(qLJ@m+-L4v(g$eIiZ8STM`ZgnHxXd`q7N-6>_ zt6QFHQ;0|SaWcx`V?I=xn3a&@AP1$~$jSXoKr6R>VFWEFfE^f{P*7eWbef4I0zcp& z{K6*EdO(5vq?Su%+Xg4sKc;wq8^Gl8bgcF>5Pyf=ts%*H{E8Xo*_;IL!_{J%^sUZ_ zzOuZykT~1?AWvY4;!|2AVZ&ycLd`9uigj`e?5Vhyct}&JG6*wA>gCZodgS%v%uof# zLq9{wM>8fA*!|~ixE+pFSugfPBqlt5z(9z`m<9d|IJ!P*{?`V&(`tQObLY6}NBMRP zj8mBctj9(G5I%|@X}^-IFaUyK>lQ0N`T_0Ho#H2%Re?2?PYf4>MiebeB7R*HYY=?h z-e_JvrhVct$%(n^n09qjCf4*vs&vK#RU`rq#5Frn2+_w^!YxS+ zn6X+`hkumj!OfJ28Kp$uXg*YQ)Sc6jJfqGHxX`1vn7O2mw3d_gNoF?^d`1`05%chS z);qJ!Gj50HwT?xx(xiHgoCK|T97@#KGnxWsY)}WiyY68g|MNUfR{sR3rUCZHX96)O z^^0Fpc-&8jo?nyxfuVBVZ8Ix(YbuZKR6e1Cc&`$Mw8IBi$*V1_v^+@jKM5O6C;}rx ze~K1*dSk7MC*4Agn;*W3!}xYqG1WeG*9lyV{8IUTonfK|7t*Rr4>lhki~u5~lJr_v z1#rpSc4gH;5~0P-u;TDdSJ3(6 z%EQ`7h|sl^p#Q7PGd$(3(%O!~>}hiUdnm)jplmaO-8uX?o9RbHCt|5k zse1Bx83Ui-G(G4e%sTw1>hWJa;!5sw<8mJWQNvyitQ$&zO$N9A`uxI+5 z$oW4!iz?YF z^(r!Mnm%3XVHmYXq6xuFUCm4wfQ*eYtM43qf8Pp*kA^s&$b7PJ@7WV2_iU#WPSU0{ zj=O&vOyaXu`gl~+pM52)6ou&7CCpWgaV4SoX!&TRBZRzaQZ7c@CEUcC=xBsQ1by52 zcQn)6qJrN7^v_W}a z%k0)1waMwGW%=`-MtFYW=g&HfOLmyiV>a%@aZz#n^-LC2BZr^JjZAT{;^lv$UN-G| zd--bj?-f36;SO!w{6{P7@10ieJ@3UVm{mZ~u8yT9S6>Jl&#_2i+iG^Z z&I=ovkt5*fJ3U_hWugqzoT&4Vn>_`Sj$c1gEd*bK)v15)85gN0GlFj7=4*9F@;Ecm z3=b-THE7?cgS@zs$RwB7Qaae!2!j|2azE&yVf5#^yTGZO^{lpRM7DdAONT9z1csaO zJpB9oB)za)h=cXQvNVI9{^{^1K<{^qb{Z!~fd;AkxU*djJCH&*L>dyUErwV5h5(YH z{oX-7IVGM=L@E(bj(}Fpk|$J_Enwe6+YD^GrQIG;uGTD%978x+-^${V_QC|>HT(gv z@TYRIHP62Tk2fA!vd5Y(!G#k5LEg1Q-j3S+H=aJ9ldij{Xh5xc`wWf>aY84H#%6Yx z)Js7F(|O51jXbJqO7v=aMOFKD_0V*wfG#OZk<9S1SJ_?gtnqwlF_iS%o>warRP!Cx zH`nyv9$gb1WcFBnIVpum?lf@n32<+rMipStdM@c!+G z=95hWyuZFGy5g%$S{#P8ONoYcTmv^9TF&e-T(hYXP1f{6s0l}u$eu4FaK#VzFptzU zAs%e(yq+bCXxI-Ofrx3z(-Dg36XuTTp~I!O-%LKHxlll#Q&dk6@{O*D&P8uT!1O7j zQPJ<5i{pruJq>S_IqqCT&nP#cj)-H5LCUBqz!?T6jGA65wC^a;SUC#Q&-?|fWuKI0 zb?>JW*1!9U$t%H)vpW`?jR_nluH-E}7K6xhAf5u|?RMb+1>IPe#dpH9MQ&!%;nN9h@uphKgtmH*);z&pb` z*W1PDvFF2?%Q(x4LGc7ia5gdf_QcO8EpaDlUa70PMcibxx*Wd);}*WIzKJul&Y&)@ zcD8dT4OfAs)!%MP9!kLh1*Af|N4~51)()@Bo8A+hR^^`|(ZdG9E24f{15w>Lul#`h z*(NPt)*!#0mz}K+F`UZa<3G3A7@*ES%GW2)NaewxUqI4<+rvU)m-u*b_w~(qP11fj zU_n8Nct!)oe&MS|kf_4Wp59!>VNL~JoNa0fdX+tVn(*g$^m}v&xTZfg#G(99DNO3@~v8^`7=_JG6L@(2{8U@Zj`6B;q|JZiPWyIX#G)rFOT|Kc3y7avf; z%wrMBeR0{qazRD@HproU-q_WZulw@BHYPLK(uKr;-Dde~2htPKAjnIPm!R#>`xT+wAio|Gazl`h5=v z4scJodL8;Z@%SL(kM_`u>)^kRKxI6XPlT3tcwxBX%v!2T?&HVR_@BgKUyiF+rM$f5 z-v$cM2Q*(nj_K!(w zpD;%{{7XMgJ{>j73_bnWv8$f_Xd>-EIV-s}p`gy*2PhRN<;wg1p=-=bZCy~Tp%Ky1 z-U)v3d(33L@(n;oWBGkJe0rS1e~rkJ+VE(k?KRg}opHc@4^%!X+0r}+cxtxfFLJHv zrr21=q|MlTu0G|c=8j4G=kB1{W^}J#AOm1@ilBk*q^!T9WgxYp%m%S{~fbQ+F+5pVQ6tJTGY3|hh=&#i7 zoBZRy>Tvfx2@Jb_AuXv7=Y3lKR5@Sfjsx^QR%4t}*eL;*7ZdXt$Fy6Q=_R2a*r^#lp&-+lD@CQJBj@EN}Y zhGrHg@0V}oJQ8`EUBkrvpHt>*&(}n?5mu=hBo33!fDGrtbO-dZK2`>HfR^&hJN7Z8 zlrjE3*Md{S_3~ZSO(9ZomF5AAWtY-A6x?qg5(#ewGduPE8T#o)_wf4zQo8c1PCk|YP(C}H1I#A{>cCdStKPBi zy7^PhvFZ1%(C7Nh0Z?#>3-Md`vuS#2+wIBGe6hUICb4zj@M(H2kynFI z<^V02%e~`}Ui*x4r<7?Xps~#QxS-Uv3o@@io8+J$!rTsCYzgD>5Kzw}?~aYGYk+?G zt)FyVhD>Cau*cF~)}auOth!l!_jWf8h0%OiV}Z~a%-95=g}6{iC8O8Qgp>;&`RUmoHj75+28T{k!KneSn`0po!$FvVgPD;(Hh3 zW&Cfm`~098Rd>EIznNASR^L*w9+L;vzJIRE{NwxHAd6Q=%G}zef6141SyS ztr-uiWy3*|%7=S@>o43`8B*GrcGTvH$=W*DQawR%&x(zgj?cWm0JooV6mq_QjNa7V z&D(S8ym$Q2kjftm(d|_ApXyS1(dc9sqU^aKlPZE&vJi$EZ^3pAD3`+A$d)B+F4y6b z4FwDz_*+QxOS7O!(|OW4%VH=sP_sc_%gdLSVEWtw6MA88s_gGCP~_P4$#87e6aiow z*WBoDegi7xaI&G!`%}Z!W<`(o#z)tJVOE@w-(X_Mt5&{2CC-c2UBF~Tt?!*qdgv7u z!`zGOn}3!Bgv%FDf8*yKg?N!ugwBB$A8r_q{a1nHBtV(Qw>K?Fi&VSvptmIJBik%v6L(eNG;%G*26Q9`g}n+^$_bE8>*vx*=KM=gdGa0qf~t`YTdrITA<-i~oF$t6@FKtK zCP{RpYp8*yBQ^$EaJ=0}ZzImPV=?!DM9lMs=1G33;@uKui)M9`QY(M_z8^pG%saqn zx>jyjw%C@vFi@K{I+I8o%YKnV*b1OD3*glHMFW}33<#CP6~9jB<$M2Gz_Z$ct%QjmT4M3RoYE5B>OnswIKRCRNV+X8600Sg>{C)v{9P;=WXwB zSrpNOeMRhjv?uq@4a^0mN?(A#MB+;3*c+i?&!|LRN2o36ytsWqNVECxzmEUnu+FG5 zPUlr3Bf0@QmNHLOC8Ph4fY#D&K@PssE5bpQKtny8O5@$Ry5NRK=hEsM1^L{@9n&g142%#$MR|eDS#2S9qq;!V-;gR8RQom{t zAr-f7u>uji2K|3r01PEXG^d(~8Jjd|qUkFs>xcHoPUHQn%eB+R0R^#%W54RSdy1h^kg$ArW+xE5;)qq;*KOBT83R z>~NwPTztT7vsD}rznQ8&<(f?7;hGmk{VmtJhcC+8z=&3PzmzuWP%lZbo;z;gu!Oc9 z6UT#bRzQ!>*jP?pe1aS#%p)|R=M?~l(kMpLBSr%g89Ef<=rK&)Bt>CdSICLI5NW01 z`=ZRqZ=bCg32$~7a9k%z6ZW*OB+)>D*dMKifvUN?VDn|E1?crF9~G7Z`m+ z(PV6?eD{viD(pxZv?ibjxMdd%`?Ti`FJk`&@0=ASbp}6t{ko|sh%Z|{oF3irR^e*x zjU7>fuo@wP8H>8XBWcpyVd!z*u8%g^j^~Qg1LaF6IlX{*4dyzl`+qR>D_6qmv{Oze zF=7;gS^rcHkiI<%_goGaX)2+zJA&p@^M5|%`3k>5V8`{CN{#daD5erT=lO^=LIed> zO8g8S%y)FC4oDE@9)ggfLy5ruky=4OM!+p0Im%$D;>5hoKrOL)$+Pa>AkL`>hE5`TRPyo6iOn(?-F7*P-yiP~~_WJEph} zx0-)wj$>a{;!E0X${5?E-F>3>0Vi z*iv!zgmISuH4C>{OPcN&HN^u|M8YXj=)i`$L;{akncZ2OJeRSODF0_Nz1hTYS>i?2 zgU2IY$5mO+g>eUI%i=pyBEbz_N#}k$2Jsqi{RC>vqhE?Try|(KZBZ?CIoWp>I7`o2 zF2Y|=5JKx*nq@cEyl9S&DyZozbdnb&I@%YejlXzcP^H3J>Ps1bglTZ@11CVaJPv~n zzBu~&+^zd9ZIm6+7o{Qq%IRNst_u7TwpGN2>Uc6KC;kBVX1jko(5BdWA2fryfB@l5 zTTq3c#W{@21g-W+-l|+`{JtgpcBUmIzHCJ3q2KNs%FdB~T2RBfohgm7%+k`}tgA9W zd@)R^Ne%m**moTOQ${$Xd8AmN6dM~2&pTd=|EDTElYg0wSVM}h*bm*j-dvS8}GROsQt9?`yM`ssFY2=EsPtk zsY3Q4#PHh|>~Yzz29^H=pA7pac#ov|BA2wf5r*7`^mcR9&ZV$7(lo|2agB53v6`*l6X;E>|Kxj<~3eCD~$p6|0bD@&QOE1M&j8kd$K_xVkKeR z=}Gz23mfL-X@H^@3r6+wKruL>odDrPq-nHi+!|WwiC+o>Li2(bqT=Eww76ux zXeRS&peaPD*!Lf6=d+vKjsQGz*b8>jCC_NpXY+aNd!Nh`dk|bgGf_AW??Rfi4?;Rr zDG(yK2NSF`&1gihPh68jcFXVmGrSr*!PJ0ZNgVV@xc}Opl4r*G}!1MOnaWS$SW=QWZ`5MZtr#nz4v{yauPF_dT=ZVB)E& zksJYnF9oZT6BM@0z`7ej;=~%y4gqd+Kpv=roj=7ro}oxfgemtd-$5T6$UQZsJ0-)JwL0h9RpbN#?#8jiD@#xr$ zWNk`-w^w-?gdE$kgO>XL;-$dk=h{$1Jn^i&eKLX_4vTz zFuCZbL*ZLt8{ukOvm`~)@dFrS{H3sl4WZo>;DwT_5oQ*IUkc=$qJ^fOT$bWnY~+!XWMJcN@^sYskP zFH0Du=#WEgk0RO$WFAi!*4QxM{fE^O+RRUnV_<~HD!{EVmzuJUUr=@Gu^zj|eVwRob%ajt|8 z0HEPe=m`>0R3b6>oCU{;sqO)L1EE6Ai|J?Bk(v5=y8M`liL#7x9o&ZZRm0q*39pB% zk|I<7iS1kxe4&76syZEz^u_csfLFsXGN(R174L);y_+Av1{ur0?nc}uW}Lt2P`Sbd zn0i5^D_`@L@vN}Bu5ahR)>*8o^?&2|AwdL@e^Y15g!MyEpp98X69I%1vQCafeJ@u_ zm5kMLhD;8Rg6hJYxE6SL^m=xT8ircj1U}#07pT!ox2db-@sP@Rmq}?_$$&_O6Ww1B zFjYF}REoJNG)PcR=i7CsE*;bw_YBSE7uPY6#dETDiZ3n^ilV+)V4HBjhb$^Mu1zTa znTdBx;?hRTl+zW3mFA_dOuW}MHq&9Vixr`U%!NS5)l;x!xWH4d8OJ>? zV`_dE3+KFI2R!oNE34tr0v7M9E~f<|Q|wsJ_quRmCsG4dl9HF#W%K#Om$x)c59UN| zTJAVcamj^DQ2=xNQo07~6uDxztR(l)K?)c7zaI3nxX~dSX1(#K5aBWM0-((?Qfi<< zk~Dx=w6KnKs~KoPo^j)%mm=TiRM5`5h=Yb^Sfi?dp2a%yXi3Gb!a(*W1#$GmHY=$r z(95E#ICvyx^mEsdxCGGGuINu@fAv3hmd`+|g^T?$p4(T@M)3?Q)C;3139bq%a_}g( zSzj6eg}tuZTU}bQ#r2w!<>QhyQP@_R#EA<9B=wl4KSH1><12*g<^QTY{pR9QH!~XglWG-70k& z$P}m2AnX(hTowYwFQvEoObxi)h>A#c)*Z#DhWPAMQ7&@XoEXtvI^|1FhFVw4Hk@yU z*HqE$?D#GAhKLA~wn_;>oJkBQasRjH^w}m56*w1O2YH!oCJ05Z?(wT(DfG*uG?y=T zRC?f2G-jC$?>XSRV}P;@sK+euLG_H~8{147P1hV1daUWzPWx}d8W^3kae!!DWE!lD8gN!`Y0CqUD)b>NZOYX zRf`+HZc^XPQp?Sqr3){Od-XI`uk6&MMc@!_bT(m3Pl< zCb_ecdd&joe&@^di}oXI=FG3I9Ytu$$Xe^2KMp=7b3!o3^-LwBRJd(_aDSx&_OcTc zjd>`Z2i?lLP1_wI<1J9VP|i!-(-Qq}HN1UkQ9~DBapST6VhZ1MO-Yu>^@t#a6V!S? z{SlAUGyEW6e^eGS?P9rjp*iHd7J~7w%m&)%ie*U>8x|C$5Y>ztDh4!EmhauviR|%q z1GJRNuLex_R$-E8hGriaZfSnGe4h02FfVz9*FO^7wZ5SuAcUk zfICTVAe5PxpcH)9uAARy1-lp`1VsQvEHKOSUsgc_5XJt?Xdj|ITKZiHB6|yCboZBK z3}cdb?W0y)rJWcax?;KstSLsHNz0}6tWkyS$cu5j-FuzDNdHlm4dtDSjYWx}Pp5}3 zW6Ahfem>vPVa|p9J@Sq>SXH7`PMhJu{NWA$7j|A*Ra9cgdS^Xt>L>$7CDcE8oAYQ_ zk4zYy%5cd!e@;eORpmdr&JhD?+Mnf0 zEA_+yCeY>0j3KM~)g9inrBJ0gj1h5{pL|r4YtU25@5ngBbl}NKMdSjKm00iK&A;J<*p2Wm343 z&RE{u7d4M|MWwYi&I3<*l#9Y%d?)j{X*+2PEnH~0MomUus8Q)LaJ#ActLEYRQ+MVr z&01psjupoVzgL2a=XuYEUpI`_%(m3vNG117tr}Z);e^VCrddcj3iJBKj+A?WS2Yvm z+Fq6ICC~`>c8fJVS&@+p5khMkrXPKUwMF2*-(% zf~tkl-(jHgd_wx731GCsd-vebByVy>vhwBWx{xSMk@dZBXsN&ZQI2OOJ{kiR_2;&} zRhXZuE&h2;g5>orjqK1H-uH*`mE;9dcp-(VKzIrG{+nqnr2RVWR!g^|{6g~DsqV^a zm)9m6GwYjiYh>XhNnSEO+GsVio#}jR-NS1=h!*n17(PVydTUHD$%9+ou7WIeGy9+Q zE+AH&ixEUn{ZpfM=P^z?rLz0N-HwIE8MpSBX+ZI|neVb%4tL)@e9cZ|FmJAU{$A{} z6OEZu8dY!F^rsoO#~MVRgaM3bkoCWp6oO2Nxfd8O9BX#|?I3+`ahD`+J8HIgj zidvb#vI%{hd99BnCq>luhnv0!g>e;zgy?wQ4ZLg&GmNNc1129-8f72N_$cS(Msj%^ z9`I_u%dcJjIk#~-(ApNn6|?%sL?tiMg}lk>K;0uS_2#R-)BF5{z2wC4QVIP3!ayxx zYDC9wijXG;gvTz8{Qap3)^n#Z2DsNByE$W*tlz5&rC=W}Ca<=AgHJa*IyORkjx{bK zqMAnge4UdA8g>e-b~fj9?Q6wH=7uJpX=n43?`g|BR%UYWF!Zn>_b^c3|D)+EprY)$ zwr8lJySq!In*nBMkPd02Q>9xvrI8S60cmMe8tDe=Ql#wahRzKRz_WfYT34_Qb@`e` z!8?v=D>G?5?2Tmk>2{DHq^hJXl>0)RFY%OB>Nzcrf#p!fEJd(vkte+Pnu`E?Pp^IH z`3|`=)JbR*w#$=3CLK6Sn-{Bj+hX<8vo%fwshwb?QoD3*2rHkATiHs^?x&E;#!(2% zyB*hh`Z`_AKb>P6+(+KsvaKom|SOY zS2v@?Br{pbDU@um@&I&_O-{U$qkNj{%TsLvOWCxB?Xgdv&JzN`eoTs6n>!NO_+zyLf6t_gJp$AymJ8@ zE(=C-f39Wu8WH~1qFfR_7_9Yw<{~&~ zOefX!q%PS)pPu6vFp^(ZiF2?w6mo{jnkUpJ?1T89X@;(^!z>A9(R2qo zlg2aN6io-hrq0F*(NQ)|OShP>UV^YMJ(?;YtG6pOW~4O0SoZkQTn0gBT}|7omwezp zEUhWhs&G5+C;JtT<9*Vx)eKQf>W1V^a5SysEdLoS{O?c*?eS7W6$bZLKl7j{&N(9+ zvy&H-b{=lV#94-J;vke5i;gT;{DdO%mq&Zgt$cth1r7v|6E7bJ`@9PbXtWE+61I!k zvgE^0oG~Ll168)X^X8H~pdqx- z!m4LmJ{d7a$bY!uKdENamZoVw;t8kJJc?JuVqa9j#5x zvJA=y0|`PeGR|uuWW2575r+0`l0p&m`-YFJAbCe#HE+hDfBrOl4f=0`O1|m>*{g=k ziYqBuCCo6_GI-@IH9YVg<{riGFQjq>+gjYp5NR1f<@`8!!p~$`>u@%2nGhGRPFhpy zUrx}}?}a|ng?5|pG#-$P3@+%}KxiP>AaL%`s;UX4UvQJ5Z@d}6!T;Ebe--c8kh*1y?*4x3DfUtil;Cn=Ws)gRnO891{ZV-nh&sRtNy)u{Mn`)ekh&-2 zGD8$eWs!bd$M@I1d({yUxQv0Sqnfs^UwLZI7kbJJl%TRf3^!#YZJkT zQq0I9jAt;b{T>k<;Me@F+&D71+8?Vhc!q)6$*+J0%EjTqV>gvQU^Pt3HEv21DH52~ z#;)ZVzs=(b3hq%!>q!sA@mWr1k|UPoY!;L37G9t_(yR?A%!na4Q@-%azh*#rZD8@5AOMXlB^#@CC)^siQm-*TTKSqyYbao?sC-{irjf${5nMSlU zmss595&By1-*S##!MH^G52JDu~5^B+e?QfS= zK+;#?!T@VOT#<3naF226jR^2U?_lxyh)TIg;PwXB?gjS(syz0pU=*s`gaf%kjYZW! zVS{+l%Q_d^w8qH1i%c^#%fmew@X-l~@hI8c7a2$03C@37`D`=RAIY z^8}l(_3_Ieo&iu>MZR0dIj#;7H|qX86lc+R-YgOzLkdW=GL=FB`NnLYu*54<2hK=W zO5^`($X(!3darp;D~{Yx-+gRAltvJ?O{-AJrKUj{I~nkAW8p7d6o+LKaAm|7(G z@%6UKwwQgw-yjQba%e(;tN+kG)uAslMd*J>N{5*BfcpMGO|{tQM zpfnC;c0IqEuPAxXD|2l}=aJR^QT%eVs_7;YBM z{ga_gw?`_ALk8Sk{{0LnP6i=5)NZ@QpldzBa~wSz0c7!IK>tm1sRf}p`jEurIxSOv zA0+5AKw%c?sKXkqS(K-pbZ*3c1w<~FaxmG zvg9F?B&K9!YtiORYgHO$F@VOY&-^sG5F9a56;&0f<0ShU03-$Q zdM+H>;y%YF2f$BO4w8j5|71D0z^^cE!46Q#p0JYwC$%x6f=S7EpvM36I-ZP+9tA)E zwH{6HWdN}H+}mgFsceNo|H&%<8-Rk4+*MKGWghf{L9bqYJI{xZ#ewM#c!0jBAVyW3Jf|toW^eFk zkvr6m=267_iSrGzyKKI;2B0wd>f5Q8T|cK0$3gZ^K zOaBP{-hyLrPz+RFrJCV5RD@`K%$ZI$G}3^u7dd)z2GRi}`If2k-2=@)NfkF#B9c^C z#9v?E7P?*cqZ#*&VF0x!Q{;**ZQ*>l_1yW8^K&lW4VL9z0?6sS5_OUOkq)2 zF9C9SpqVLjqk|QEQMjJ`lab)sk(G2Io2)eWe4;=<5a~|5b8BDA!^fDv7(dBeDJUU2fVY zD#!@AvvYU9sR_-RTD;E-D4_BxgL5@1(VkuQZpaL|^XQJw|DOf;swGS>O}D4{^ucB8 zyTCs3^l$i=|FAay5x$&;XUV>|D_MULoUee87!IiUkqO;s8;8nBNOa|3K6<82`Z$Bk z+E)T`+Nx~(xr)l?8FI%d!?__eGR?^1|3fG}Pfu({#A%dDr$;Qd_M+xh_jTU_6#(cF zfP8*aV(gsvT!Tj}?uRF6BwH@~q3o*^u4!N*G;vdkxRg18N4f>~Vec`ui0?_2Ez&A< zbi*tXqLI_WOevMVonDuerk*Ak#!ejO1Ed=gF{%@~AUQe0hXCBo zAOcy`drAsmE(NG_UpZft?rbt7l>@caD=sl?_8M4tDQf}OJFdZ?;qTUX$xH4xr#KtW3oUd)YIbF=QgKE zAoP1AtwNSl^waH@8D|bARfi>ssT%4K&pE(_IH9rsLrOH_Yqc=7$DNbT1K|z_R6AS5 z{zw4#0$M4+4N~7ZSedW4jFJNv_nKZ|4#i&gw3C|DSPk93w$UKH>v+230F6-3vEA7=!$SozAzpnntbc0M<@+l%XfW(jw>CJuI9_DEDr($9xO|A^iE_ zC4fP90N*flbT1Bk5%fjDY-dVd7hmgrW-}rpr8dSy(_5p~`%dIe z?!VfVKq4@fpkm&rnD|&u4EH@2YGO&Eos6@8=%S@-$36{a)fP<{E5NSz!i9b{QRPEkEZK z>@Y*a@tL#t>ZHR8MbeEvEAUK{S5$u4VQBC$gKr7vW+xJm4+kKK8Aat@rS0xPzwnyt2 z_!Lje|I>l>v+lQS`(RZWtUwzRMs!7)cXlQGAK!+b7lg+af7cy+PwhjACqONF^=5NV z+GIkNAZlryvt}qC=wH3b08_*I`oZ;B1rQ6u>V{?zEuR4xi9DZOy^jW$LRJx&7)R!% zE$FfP1bBad&@Y!;`5zsUWWyRwyM&V&R4}u+Jv!jrIR0n4f`Q!?CNL$hmb|k4@Y7<; z@rfW?G@$3~y03Dn_)%r#jR)s`>d$dL(S#6hkeE+<-gxsX9~!QgDeAZ1pQijGP2DfQ zQG5DhcTLf2A$h>5F?}$AZe;N;CaAKylrkQ1{TFH}vKijz_XC~HeHQa}lzqMf`Gi0R z_`_QiJyUzHiKy9O!F!Cs*=_!y&S>h8J{7Kx2iA+xwZ4a+zM{mGEl(aFPB1)gRPU#k zn`56Ie?IMd$G%C1Osy50_KIi6X)x}gcW@rtWc5EoMNfd)-m%x*az$v-l5MrL!r~*n zS})3rEmjKZlRZY21yHijM8C@LD!cd6stRKq>yfp_W03S%fCSMJR#-gm5he5;&9<&u z1GTPlkU)++`-fzdH>WSXR!baLuPYx7LG3M9?@h;iDC%hzS|Z*xEnfuV)-KoH%*0NrXf#r5@A9 zP@bwNan|{drRL!XyoD&4GS3^2SoACyT2}2b+OIKRVn%9^)zd*=$rcX++&m`l0bm(l z&n6$DZxJeugw9g)u9qSyTgB{0@hCjc&DNZqify{P!9u zVlTH9o(JajB&U)ZpndF}Zh%!d80i`$>E^x&(hp=P66etfroCUs2|%ouyrr0FFRG@^ z-yXPgIRw6gxsXpVnI5InY-3lv+#c1qDr%`Mz~#3wvblj zQk8;uec3kYhW9AH{MiD}E@+h@J4*o(Q2rAsKRg`qlSr5i00bA+)H;{4#t+8pLFaziU%=^59V^t^C z6br+Il8f>ddRV>;h34GTKMO0G~v7)|=$I~4OD zb!csku6!(N{n)Ga5F}1g+G~6hG1u>6y#;T-xuKV_8WD%I_AR*Xk4T^>f6Zpqm3*6X z%#EU|{i!GZ<6eU`v=~Tfn6@6ubn(8!67rBrmrWc%S%qpec(aiRzo*pFNIlr|aOGvN z(zXlhw!(7DrrlgEM)HI-66`JY!w`Qh%j5FSMHj=~UPu11Lx`i#V5Vf{kD_GS=|A`` z@Ih`D5Lqyn|3A)VS%X)mX(&Ngs29GUKSbpq*P_ZO1>v%d7Y|4}S~$^SY5CTYk>t1$ zdT4)YUjqQx$9rv$L^$wY4+#gzyZ)DzL1#8jyN^i{!R-vieQv2+a9l67DPW`-RTekd zI6m!=89>GT-f%A(Ozxs+Ut45rajjkatabx(2 z>8MDgpXA@=fDWk?jAnRDlE^I-ts6jyMC4sLM(f|ZHRi0*q9Znu8iQtS7? z@^s8~+%I{LvAnRjd?!`V>3<4&iarvcM^h6)0#`ZU%@XFrFRr^>sdA5P+^PEj0#v=% zlf=v|edFgGhSQ_a5?N0D%PoE1+)!>*W(C?`a{d& z3t4|zX&nKBWghI>j=hziDg9)!thawsiMkjbmOY}B4;IS zdD~b!#PcLFVZ!68K{ra?ZW?Yer*soQGEx{^X^2NwQqvtct}Z2AT@{InKvpO!hgZ2D zLKx8I*{{WM-F38F*#hcIw&4(I8EUAZ4(Z@_Z%;r9j^x;08FC2NC1yOs#Y3Xeo5SdF zS=tOjEfk5mH?~u)L5yNg0Cy)@5NC~u{M)O!lTbzMa~&R$%9Cb7Zg(idsWR z8;aoA48sIyBm;bKaZ(A90#it+a=u5<*Q`V@p(>C)8A2JM=Hkg5HA97IFH4~uPG{k~7q^hM-#`{$y9KD4K^ z)oEMapxFW-06&xy`w}#lnaG4%`hcyCG6pO|mMhP*Jr061ml-Ka4UdcNV?zSRVPwL#Qcr4#Cup<1}>;`}-;Pf+_4XVG*p|PhkB5zE3L1_V<+DM<; z-Ya3a3u*>^hbPG4pbmKr-9b%-qyTiqF&_{vZ|DKFV+2q9!cnk&Uc;2|!O|MEe)O5XOWh+W@64In8AnR^dC^M3i`l_(LTZ098a{H=vWm)CwULC&VGZ~*eAg6kyfqLeyd6HnqpENFq5!l(L+nk4X!?ky z^_cnW*l2h#27G7ePC*9I`eMW!$n2+EvT%C5Yjm0gWxIs2s%x|}D z&ex7mEgem%ms)@Pc;ji5pNw0F8_KIBf+{`(w2m(aM)3{8H54|u#MFQjO-oi78jrM}ZLleOM85=%$PMxs2C7SE+&W(r`K(waH2I@8s%IzGbc8Doy<4h^^lrnEs<@(OPhhWOfRq}&nUgwR zrI|}w59@9Fw#-(r)Ikw&Ne=SzxKJ5n9cK%~r$gHqUCWJu>lIj~ebUs54PkBB*vIks zyZFgnP# z@lsO7UE))N!XKHl)}ug%1E5ipK9^wv_uvbUIo`YF|6?2IbE;=>c7(aj@d zAWnlmZzY=Xx#zy1{S$XxV2k}E#*3%KGs0Zhl_ z?LIsM!YloU|G^ao37RSR@+#v8m=PEz`a~ITM@e!h{A~paU@UuvHj#6)DF7Gvabp&` z$>T#n>@1U7yH6@B13o^KUN;eXE)%Wx%DYM0rZX%*H5cUpJ{mqmftUiEAQ_Dwj_!kSWO--uK*${9Jtp(z47wN za>L;=DU0gRAQZIUy0Fa;X9|DaVio^lqQh~UQ^TuRmvsi(LP_H8~>m`BA@f0Gqpe&$v$$I3pj%?bQt7Y7bC zP}5Pb7_CPsH$dc?Bsm!)h+m0*^9#fA-@C8PN&BQ1fD?_;sfS>rQAD`Q$<4Dh!&b*Q z6*g(^Z6rMISWc=JB+=SAD@1&r4qES*g%>LO+kI4Iy#R1$0o{|ZIMsgMhSnpV-Ze*T z5Nb0-bt5)onpu-|F7Mw;rXe~nHExq=QP|>%WbjW5Uix&R)UK>#X$wQ)BoEpFt z*~v~SeY1K~HpS}0Rw@tO^ZxB~eY4CR>z|&ojrAb8m$;$-x7h8ym>iJ;($|S7R7=8Y zl#*jt)rb(`yZ0G|e_5lVJc=lyby?W}JEu$COS^}hmXJ)>)yW@$!S(pZb8*$Nqip$+ zI=f-R`F`q63wk><>N%>^L2n!Jt>|hRhIcmP=b}e%TC6(wc2Qq@2c+GnIHMFWw}m7a zn<(UU9mk=+{$ntqz+~Lns0ueRl!J;yG}6IjdppbSLThPUbxY*J^R*y*RuiDZ`0|!6 zpjo*;cU#NOT6(BQIRTKP`!a}8C6)Ja9e~_Fz0u3xex^xqeWioK{&jJur|>$+Em<-e z8VA>2pW~hiy2)zm1y-9KLAdR~vZ@sYkUI=0gaYJ$JNQswtP{7yvj3YZHMikgAcDTq z3kG^?r{}mVArZ0R;Pz(%4!+@cy3g418QmW*e!Tz1P2F2hmtpn5aqUVb9N!01@ihVN zsA0ypPiHuZDD1Nl8lH<>isS}_40Y5N)dkE(0m?x-B2l>y#*tXeOzF?S5r@QhE4OrE zKxxLWRJ7g`wg8avUw3d8H6h!qJCLf5_^m8D}t$Wvt zo&i-(3-3H*0I=hzgntp*D;Fp|id>OhzzAL6`!1N9AKq8q!`i-gES6t0lwE%TV|tr31+uvIfl>IjetPFcuWum_d~ck2^TyS=>T9|<9trJ)(&l+ z=IK!Fn_c}PpH3tnC0P!(X^y{f`5_)X_CD=@B!AAhjn-aUD+4B)vVlnQslizFN_meA z^y41wj2FjNBb`IlQ`(lWBr0N!SN-Ln0YFP)V_`R_ zacg9={BkKCqi`pFshCnpG?K4I8H?b9ox0XGlTH3Ok7S`6Hko3YNB;QFW5LI}<;U7e zZ>euTLoSc;M>Z|_+F`-mf983u+!d?^1TU--0Fjj|v18FS(pqHQB__M(F06KM!Xiz}4#>1n^kH^y+r zo9osh5v2L4OjA8GD%LcTB@s_W>!;-ke;z?EHLaA?ZzUcjCqI4?1$P$V@2}{p>FO2e z*yGH13vtj?k*ig4^7b}YUF_Tc(5BM9P6;|e+-G1jK7|6%@zFYJf#oNi}R(mfDqXTU{9yWZ2f2yI<@PPNtip)yqYToR|J z$=tUWwQg^ywWo0*rx}w#L9!0pDGtLRxi&4Mhl0dfFCILs_$u1)K(qeCQ0q_22XT6rw28am-nKPW}NJVedg<6Vw=WpOuBOhf&gA%&@ zd+m9{`%byDBm8WCm zIRG<}DHQOyCi25{s%2h*G6eld*|+iO%N7y6UwM?Wn=g48AlnWjACqd;VrJ<@a_Z z$rr@OybGvnumaakJx}p9lbQ?k5aBr!kA6ZBZ~$1saQu%u$A$l1wH$dGiO{%-OZ^?C z3&O%1uzw$AVPgNI6$_-7b|qwcKaFZY12P>1Fav zMc+DA-=`cb3uED&k5bgK#!284Bav7W1y%ZB*oIz`-e-XhI>Ave_j_gjr42>;La`xL z1c$!n$6Gb@SFu`!eW(?H7`^k0T%4B5b*^SnX6)VL=Olc1$3h0waPy2q9nNxaTuK!b zUO^0hH20o}_V2EKDLMv3{>w5Y9J^*I%i^R1pU3?xca%S6nnYLSi zb%kaSZq3URFxUY1lz^Ju@vl0d6`T08Fe>-=rXLwl`6X6op{qiiecUylUM4O4GL6*& zVOJ7~+4R1nv^r=po5A23iQJz!D$kVz&sL0(jj6FK0rJ?losrCst`Dz3fyAcMrM~+XH+qvN%h}-? z(@B!i$!@g#sx-cbXwVNwbXu0V%-<2EQjy+$HQ{-BG<-s8r$=q_@B@L4j~!T?){9*| zZGXoxH{Q(4*#nw+bKDYvu)His23Z$r^f-tJGq1KqIY8NsF#E~Hs0mMC z7FmO%XqslpG(_TP&qK`<3ru913Ni#+5P!aZ7%)>vRTBHI{>!=bcRf;%jFDLp$lI~G zH>t1b@7|mGmceo(s~dGtA@+gNi*+7_Zq^?(co_?j?I;ar-I(z->}s@ZM|ByTv5E)J z2K(cQy-;1Q=JhXLbBAu#Kc*p|{l&Y$cbVZWz2?>1dLX?{R#b!GwTis~Bg_4DF1N)u zcV_!Iey>GMjn9$h4&CuZO-HdT9nxynSK=kF*g);}j-Nj4>-Zm@3biuC&RA{W^!5He z__<8SXw6~mM;WQkK|IVlr8&#ZVET3iA#sbgk)+85|J6u(??2fQkg5B(=qjY3WszYe z7Jf+)sge(ZoFJL`Uy&{WiaTKfxO1U8`hAL@P&8hf6*1OE9Eqq|6zgDxo<>{V4vHL-PF24Q?UNb+@u zb)E0j@YBXC#~X54n!DMDONa6olB|8gE1o!ppI@KseGafwQ+~TT@)09mB+l4)2e>+m zoj+##ii71TwiGc1b0W;A+n@M#V~BcvFGaLF)cZ#M`eyVg!%5ST(t)iE@v+J39nwdq za_2E7UtaB-@sxXEuiKj$r;UN6%jME{ntc`0Yr*(*SQb>UAFc%4iA}mfZ!TL;8@(AD z!*wZr#w~({EKX#NiYsi&vyYS;`^VZyA}cdxcVy3BScVUPvSB{!p3@AqI+(m*)Fo+W@-wLAIm4nCx61Xq0Y1+ ztmT1Fa2@LDH=;RNEq52@CTi}RR{aqb6ABW45qNmwXe`ED{q@W^IgX;QBP&gmpLns& zm#hpu7h16*hPoGl@-JVFx>W1&v)LdhCc|P`n}kms>D4hy1eQtXfPBZXVyyjZnT=TosP@WUxei4Bdmtc4{MUJJY^D zWMZ(n_szS?Hv~&vuC%jH*rMqZcU1a@t{RRU|p4H)a5TxzE@?CSvlhDEKxrH zYG*jEXwz||M?@-lQD{!SIyNXRqb$#;a{j2K5mX#i=boEqmM(BE+(&GeRI4wWEyP(P zGrmL-9QD@0{{qs9qof!Ir z%-I4bQz`7@fQqaCKMSBh;>;9QHXg0eNn@}=4t%glC-Dh!!i7nsy+&K{!8~y z;0v6FUyg~YBc|tC;d~F-;U4^ItSH1j^(@_B;(NjszT7}nNm8}=u zj@&mSV;&_714jA}QPNrhn_Socm7G1H&^@etcz?Q?c~#(yYr6#j$Hr5{Z`zj9ppE1YqNn60ZcF#sqjH6>$1iBFcgP21o`qCFG2G zpJqyl#Jr;w?Xit`r0h4Gn@_E&kIO_w|VCa5(}^MMlqLe1s0 zwxTRn9cu>u3N`Ci{+y2+vn6LRHp}=}Bu#ZZ;!EnvG}0duit>-D(Bmbk+; zX6caUccWN)Q(nV~#BHf8F*HVc%lnN85ZyHZ!>;eUbQ)^6K~uJ6x*+cf0QM(6HPVQL zitJJTlv5Pa7Z)PJ;zP=L_SR@|kW_#t??Y!;*V#1t8g*sO5Zoi*0R3r}EtG;AanF#1 z$kl1>|26LQ*{@0Afs72TAGpOes8wk?o!UD8(+ZiiDZmT?=n+7KVsAq;h{{_ z$1yYJ5R@|iH86IH6R+ojt+35cc9JxHFD0%^kdk8<&YV+@rP;wjUg$jmXfk{{t=kz? ztTv_xh`SQe^wL#AMm>e}ZD^MhY|)AS<&!O{3U*}BNA5QDpHFX$cSMQ7K3tBtFOk^I zr-3;f_FX{a`|h+I<*^~nc>J(E7}1dZi2PDV7@ljprxx-wOek5RGe#LHY zoM)|SXb7Pnl4_?{v9O!Qnt*Q8vYrboVAo1udlf7E_b}ip9v6vI;%Vf!Fzfx0af zV?=DiS>n&C3fi=kuH)v{vE!##&j5Qplb0MiSF#PMT(kWzu`yG1F}`m)`rQ5(-XdS55-%%oYKk6ef z*|y7&kR@7vM=Yoe;TEB}chILT9zyd*-8)6hAmvQDYj|X;OYc=_&n|Pt(1`@Y2PMg$ zVfFR9)Sx7<9^sh$n=nzIhcfHTs8t&5nT`pGw`A%UD4;a@PVH|I5?tYIbmc+pAxfgA zUwh$#eS^YjI>9KmRK>Z7Tw_<~ya{><)r4Eke86Vafl`OO_UfFcWr}vZRV%skI64|x z)#Mn3lrSrGu29`!F8aHdDmtAA`o($zN`sOTH)>f4Q1Vy+>Pr!5MLAXKJ7!OP<+fH3 z`}@>B$eh~_5=M=*)MB*HuVJ?otK_Kf#p%zhX+@_XbxGJpKG-iDX|#y_+4ar|ya-gF z|4+$5>o$}~{*QZD@?IFx!x=x>WyetsAiMN?nK-l`yciPVt14m>NU@6zpI2aV!=m{; zk~jh|lrAXvAUh6glSD{oGVU~Nm=92O5^qvSttznJ<5Tc#7m2`+`})DKE;WyrQ?5BO zY295;w30gcb@xS|pS0HlNn>BA2V9H4=@6&6p!stRf;6I|2uQ zyqJCGf2T2Icg=JfH62)8KfPlZ9x5Cvl;537G|zPM7njXcT$nw<61LcNT-;|k#rpDT z2iF@HNQ9F)JJekFpVTWv~L}6_4w5j(>-7q#Da1v+8((w_{?TNOY zAEUh6#*@1Y6?TUu>;$8{^_x)S5R9H}_AVO-98h~OHRK=e`At!G`zy%0L96#!_%s}K zs1$p3b@ywZ131iN&DKb3T?EdW3h5^)rak+k;cgWHY}#Q7#Z5DIK^|3mv5lu)ff3Y@ zIn&f0@ZG(qK|V}JS9`W(LbT5W6571}0k`nvuO-zq5pg4#=?``Iqeep5vomn9l0y~? z>aWsXB)N;LAL1S;d-WxO1lX-E*f8R`usVh}8KhS3KNA@NUHDGs1)V&4`x+^xdkN;|CF}c-FA$du){2P)wIf(ZD(iN8T z)uypwW%U}Fla1d<<@e1ZeoT$a&V9I9<3iz|4r`Euf}n#tg}CF#iNLE4Ua-- zT?1M)AnD@Eu8IEPofOW04H&nr1Lp)ShobNEFYgo#AFEm8n3>urzOFT6G8zz$b4RhV zMa77KvN6CJUg)Qu%2v~Ko4u={+;``H7;nfG6fvR(HP z1V*2*K)LQKqvdPi4nZ%REWxQf(d$GqhoKx$)O~EtqA9rsD9dCJD_s%bSIV2%CV+GF zHgU$eUGfPuX4j8K{?F(M|K;nFzc#pln~dj1`wXJ|XXH$-3IDg%fG6NPfVh3v#kTN2 zb64$AvDy2@;d8U!EKv1x1OdQ0IHoP%vW%x(3bxptw9>;X9@BP3a?ZJbj2WZ6(%G$z?=rZ59*lFdeE0F87V ztCq#8mc8=@Ztbn&9RFzF1w)!5=sa7(9K$K?mmE<&P^4`IGwqlPdnn!nFJ9#S5(;Mh z&9{Hi;-OgWn-s0WsdM$UT2KDx&$#(jzql*C)FRCxUn5c6e#xxE&CiAIJuZ+;kSImxD&6$d!V!?9)o8u@L7U-$!v#IxTJ-2ZXi8O(ge~XOv^5qNHI4y zLPupHdi>uQL~1R3eyL(-Tm&;Ta?qrMm@!i9cR_ql%G1d)(LN;ap&Q(tVE^UT7RF)8 zwX%a^7;avu$Dj8egbV_TvrJZlh;C!u=31Foz4Uvf8s15gIgXuIcOX-Pb&lDa)#Ly# z7g&;nBa-{Vp~W6nVzs5;l1<{uT18P~1P{vE6BQ%81{Va|8)pYOKz9E5;{1E$`Y^qh zIw373ifWZ6H~Bl#AFVjV=UtJz!4$C-Q4c)9_bm;l7r9g@G!8MC+1AXF!QYlDv?aDH zp{N7Zzj39r5%d(xq?7Qu>zJF#>TDbnw=e$Q3OBKqzsw_y0g_AzH^rhmVLUS7X3p^> zlh^i90^*&)TcbeVT*U}fu5~@n!lHHbds&5ctRjkZ7^k z#;78A51lHEY0rQ|zOeLb1+t*$b)Y)aM{-_QacX#3Y-Y$%US|uL{eC^G$j4(Ohx=N$ zQBN3uE9H|c^#+YiTf8t{CguL!Y8P$Z$K_Gkeg9=EMyVR%UM9xSPAJlwAybv1_t3P}Rq`cISJTw)h z*>>EudHAmiK8YVL7TvB9G7ZikJ)i4|O2ak?Q$G}H8GrdtYGVbu@LQAp$>eD_G_!w% z#e4BGGZrmf0S8F0S!c>LsjM0`z9wLUlsCcpt%!)(xf_}g6ZH~qskCFcc3EuJ^1&rW zd-2_QM$PYR)+Ybikc8X~NpXODLKu^t_)~X~Kn!*!wJ>JCoVVs+iV&tBmL~P2JNEk! zuh|1JOa>)AGosI>X2~_!dfuUbz_c^cgjB5cti3AOsNf!O8|-JqnqqKb&PDi#&y#ck zG%j*8+8&gkF9iG%*m^ONZ}$1$Nh>IfHNMNNj4hC3%VmXYDL^<1ZcYEZTd?TCe))ZP zLk$8A-u!U<&xG3YH&??%t&28N@M}Q5uX@~_r$m2?Cd@Hwz!Jc_HdV+x+IE-)8Uj(6 z+VnwzR~7ZUI{BxJ0c0ZAKy0wd7GP$x$M%orbr&bn{hkSGjj1wo;YZ)bC0Nq}%In68 zMf+)1WR989ss$nW{KPgmV>*Z3SCG@nd6$Cy59)4B&m0FSAPHb3k6@EU5vBF^!b8N9 z@kx_|j9)KrI{$qN8(jqo>_d|zR@1afW|UPuiG3jZWGvsWm-Kzfj-YlkMoQs#kPjj; zJR3c5d{ZkNVJTyoQwXD6F%CQ_Oo)2>2VJ2x@xVptpzsEof%O_Kr_5N;+FG-O%nddY z{loD9XN{I2m>FXYU1coI8D^#kQN`KkNyP|GrBnPN*|BHw zfqKUpuSb+LXMrxC{$+tZ?S((=>!-hJpno7nGPzTp0X z(V(=HNsD$B?JbAb2Bv_iMlt>stA)MRj{~$uAPYZQC_>;|3laVgIzM^RtFb{%b-50j zxH~JPK0hcVi?M<1kW!5B3)cY5el3uDwlVNGZu@&-OwD#*O3)g*791@dG!Tm@HGrg& zdMA?>o=YXX_yfxpQ1)#rTSUirxbsFxZ)Us)K;*ftUSQg8SW{qh)W990_D z?%)OtXlxCS{s+WR0`Q3Jml<$Fd=reHDkkwJPg%i^5;UZT8;TEJ5<~Sz`reR%Ms+rO zpyfhYpfEN&R>tb8NgCYa>j(-%GZ#kcaqMXmLq&geI#KoJdWJZKEj% zA+#P?@=b2WiFe`zZGuLWVD!PX47UDDd@o{bE&FpAY$2**u48>6LlIT1)r#v8(82lSAPxD1i&y_@DUXY#x@4 z!kkw?7OaVM>pw#n7;F#z89ep`p|auE{RoA1!^eWX#z3-Y22rA*^&8}%Uc?YY@maKg zaZy^{^!?6^q4GmFD`@0~EfpLmOSrc!0@@C)!fz-P(a6KnH1$X@fIagn9>Y}ERMmHT z!0Y;!BHL%k*Djo3$tOo^dX&ObJOfEk)zT9YF)dreU0uvV1z0s2su7Ym#1P+h#0-(r z17$93!Oi&wY76&o4o6CV$?qjui3142tF!&TR3y8vD15j${);OUo=76XP({QRyt|Th z^Z|ltK?SI=*n_NoK}1!gFt%47#{{w%Fn?B^(Bus3i_GnJ!zF=Z?7|TVX>G|qSw=u& zD^WM(N48z>MVj6PMuMe>uGtkifV(VF^$F!xvULX}lVZ_4;&v~m-{J74Xl=H*aAq5JC{018QmjV>fpfE(W$DX*v$FGo6wvGjIS#zV_Qx+7Y6kSlRt@r zaxj_S;~dnJ-rrgRF--xmz z_(_i;cB$4%@(U#8|1tH|K~aZo*9$D{BDH|hu`~kG-Q6KbONSyMA-&Qq-5mmgC{lvb z-6*M)uz-Zp2vSnt&GS6(%s1nX!ymA_cU*CL5Vpdko%4APvaqe3R5oE1}f^JN^cQP(nu4r#rx))!y zAP;*)tVnS-z*5lG%lfeP(_dK_{!KlfM z5C>kx2{4_AYW{3YoJsexU#`U2H*)3=d`pT{?%X|z0fhRQKCN*(G&M1Qb`(GB5aWLQ z{*&aRR!Ck;3DyZgVIDPIb``edYyoLF6pyI}o^t_h>}keGQ8QZC5Tw+0t(a#^v&!Gb83 zjnjWdT9D@+iZfJ}net5zl8w`mi@7iNLz0-qj#y!L$A15+i^J3)F0+-bNuBV8m47#@ zmFd=zuGd)O$fSh4|E3~$Adc5#OwR+Ql;fj?*z^phyHP@#CNPrn=$OSFKF0EsTd+~X z2*Z&$O_LZ`g(PwxiIKhTWw_um!P^kGwEcTse1xJU@iPiDX*IUiLVzrBbbBi;TyxVCNhpSaIhH?XX3glU=m>#B6_d>ZU-ewmV_ zw9le6+HJ)7inP*tElf7`p>bGr+n(=Ct4GhB*PHe8?CIX~65s78?$@#p#301s&<|k; z(a&hYS%#Xv$r(c96&9cmes4!6*Ag11&~&iLy$$=s{EKP)iLO=k*UoHw(3JkJC=X-z zb8z2yS=0YExCmEa`?tTewKko6 z+-JR%PHb)9=s3{*k3W@6^qtRw$Gp-&jl)3S&WIhO)k!PiGdph?i9{|M#O?U(LY+$r6FY zIiA;sEQ}IAMNGK=mB4%4q@aC3wvWjjLf(r+z?Xmi_r;fi&-F(|$ed)56A#)_dbMt0P zdSI5>gG?ke8H)^;3n!hLGqo=>H`rKsm|Cn=j#(fyM`inD8;GAFt96^=bCi$)ZsHK3 z@K=3HiWT~!&-v9=VJC{DHopX3%~-K|LVBxUR4_(`Z%#C#Kod^k|N1s46}f+iQJx!& zBAjG(po@+#iU=lQexOBr_JyYu3&ov+z~Z459FFW!J#_k))kOF+MaBt%F`C33A`+V( z&t4geytA9)LL)YfG0IC4;q|9(Op^RgRuV?%9f9J)4wS=JAy!J(#=~?wehq6YF@LuOB(EXkE z)jWuYn7;{VaWP864xwfHb`-M~6zDVNv&VFfHI(vkc@5c>zYVZw>x$t`kjx%A>xoNetZ{S~c_T{t$UwhI@s03jsrgS`x37P0 zisN5-wB?B2M)o>28C;_}BC=cpE+Or?Ao}0;m8KzX_#j61QIugbjM#8McKs!q@QsY-& zz^;aKcLD>kWQxRn1AnAPiHP#Bd19q8G^~oD(=H$GIpLG(LLoNz!bfj%MkFuxTx^{4 zr)>3a4pPlusb5vpQU!pelGeYSZ939P`8FHwZ=A26`?haz1&oWm6g3XjPz{3z+sYxw z_aYoJ2YIJ=L%OMyW8{fx50V}X-jy->@b!Fe8bf;@Lr#pgMm451ecND$aaoA4jA5vW z0!G>8#GoBo^oLH62W+z9B!8$r>{!`BLGTXvqT_OU1$HK*FqZHah{)-PFBtgL)7Xt| z*cC|vx{Mxa#drBr5WL@1OJQVz3>I9&>tbN{S~SZ>P`r_EDT`*RHhcb$3!sz~H5X1& z`^N5O@AZ(l<~jY}9+ZQx*u~)EX^QD&+ht;L6${KL9|c81zGsS@uijd%2VKos|6Kbb zQyDE1_>#30P*}{&B!m0V_`J=Jlu4_wc;@%JIB?gLlp6k+9l-Wcy~@* zdQ=V7A4a;X$U{0$cHjJMgWcaMl5FNX|Ix#Krx{7A25!nP1=ypM`l6yz@hCnpMwLz?i?A`z~l^5r=-UeAkRgdoy3C8Lz;~ z^*qJey!98Wy9b%ixdqbGrV$?UzC41Rg5+)*f^J(aEYvdh8UDf0GA7f49EEQ+!BLCm z^(D6qy|Ut(rg1G^YPcOt7r~4idB}DBQ3x+d|N1@z3B?31Ia8tpRS{a?%sJ^!&F&Ep{CF)$R`sh*f{PRcR@f zf0fgBsZrBC8e`gCU3D>XaRft10VxRNnjhc1`u@}gKcnc+YcE)qJHqbcpmX@HBnf8))xE?$5D>tj@ z1OOAyRJ%w|KWUU%as6BWi6U<|4|;PUDn1+y)sy+A4fNyPrpLKc+`<>6(E1k-Twt{B zd^lVsn;<6U8w>G82LmjcH_i(({X86AGD?tp@5!E&sxhqpoq>iAp#K4w8awLLD(@xb zy{2(F#Hmzy7%w{a+>~;Cf`H<^d8P#!IgwSnVLzCZb|!{B^RC1d5F&&|lUNM+kNn;T zAT_AdqzJp~-xA4>M=rMau-hLm$NKjWD<_G{Zz0*EnR$epp8Dsl{d$j;*yOO`nS`_x zqvw)T*k&}WUR@!dR%&SgpK3-@zv9~$#b3oxVFrjQX^#sWUm1V^HBv^9GQP59FS5v5 zx~?hv3E>7QCmY2*gLP*&mw1xa5-rF?C4J9#$d4zrHw7VIFFt zh4E|3jbCmofcr|>$V~S&=E6(62)~p0X!ZX zDKTpXMm$CxE%R~IlRRps2b&J(taePTgj5k&+JbT!JPH{s@?Wh`8$g8{C?99!rZnq7TS@ zxdveoAvMC33-A%zf2l2|;xZex>1I&SLHMh?z6fLC>pkFrM>FqmisH_n`4n)WPEsj? zxc4N9~LapapbIlU4u;Ek;F8|5j;1s?+ebR0iSv%hl z)OtsMoWe~|`W5l;Hbj-HJ~kqghP`zJd#IU4#n>o`cR)YcZt3-XYW{h+iO{gSR@JXN ziJH_HWd`b&)2p2&#Tk{9Ov_rMI~=+U9NvGTAHh64+=c}6Wu|4>KjigeS^lFbxQOCR z^Tp1dxC6N*n}V0DV_aR$+%yFkBln1|Yq+q+gByt?Pxj zF;gosV*=UXf?3}Jt8hQ@Z>-?LJ3fl19{-jZ6VzzL{8U2dw=I}9utH<-= zgk-z}f_3r0wn8$>yhS?L$nr`A(h1nDE4@S2&D@uRwLGgqm)k*&`_Wqc6i-7Q86>42 z>J{}FLxuge7JT`9*PO@?R_Sk$HPr8BpV{WctmnHsmBVg+MQ<-{cgi<&Hp|nI?V-iYG zqn4uv4eDgAenX&}&e*m6KHt^aed2tg#$a-G%uD>2ZqDanWTETWYNs&{TT7=ObSA`s z1{y*lUc@10@qH@mv{91k8MaUXJ{LD#r~25r$WVvjVi-WYW^?x=kbryyfS&flYLT5S z-5ACYN8RxMl)XPhfK;^zx;V6>bFvVmEDFSKbXAn#|9+wP}_^d z<=Jbd6BL_v;5{~;JZ~D;nE;kJAIP96!5u^5#Fx9FE@sKKG#h5O<iK@~{f<8L&4d@Sfe0S~*&gGe%mF6{L11oh&dzLsv5ci>*0iWB$Is>hk-O zJN3tyi)kZi(oMz71fhqRIXV1l@-b@pN%2jvU2W>7uVdeZ(CsmkNu_* zcJYT*S&A@j2g{NM!fC_BWf-(+A;Belukep?#-BB-Qg#WaQOq(EAX4}@y?zI=+C8ms zzhfm%dNg<>>V~up-DrFsju>DD*^5gzc9Hj3_Sw2%+`CIZCMa(83uk4B_8e>wW$lGH z6@?dv0ZyE+8b8q}`vX9f(_P#bHpB{_IWI+R1*AgBUNbydcx@i6qR=0G;E3}(>I)SHYh2%xo~>zaW1rRM_|!_*cQ-VI(N=kI zDGSoC;C)oh)0X-@H?SZJ!hvojDNwpw#lz{sks3^{(J3|EcmW*g&RM)JQYhV}b^&}x z9$_a^y!2SXwl<->FzD-F54Iyb@NjTiWJ2HD015z!K$iu7mj}0fWD#G=VowqY^|mVc z9gP2o5yx*bL>)~n{R;wSVKu6zh!(2PEuxA)Gxy7QWR6R7@`k z7d*ISBOa`=0X%X^VL%RB|M&tS__NO#F_5Ksui9x^J$y zR2lWBw#PAhcKm&sTMQZ*+P@$+JlHvosj_Fgm$SHhlICp5Eg^sVdXl9wti# zWDgv{&%`yc>E$;{1?@TyX(8I#{&GUJZ#UX7kodcY@_Pdz z@=%xggXU6r&ec^wv}xIj*Xlv>e>4}p7qsYH^Nam%6&cUZ+j>h^ndDgHZ)*;TSpAcC z4WE9%qKhGcvbHz&l0tFI{-8l#s)3sZk5`p;H`^WR#1~;}!eNzl!|qYuYCWlC>`Af) zCATXw>nxhmV-gBX$CBonlqb<)Q2AIz0?OSDH`@a(>#%uzxsBp}8`@pNA1pzk)|D40 zg3$^@hk9kJPY|C2)_Ul`Gf>ecbj|`F>M5??g3!WiWIFl)I$^`x%mHk+0N!fR?6dBSi@WQ3bK$qGT+ujI=H-A#dB56U z^VtJ&$m{OyVuYX}x!ju0!6b(3-3WDUJYAZV5S{>SGaBo4!P{JzkO=UVl{Yu*Q@%Ut zKC3Y*?Fnpj=gn7Wu)ZRDS0!zYr->)?)kCkCW-0c^|L`4f{0=_0>%%c|hmN9FqeRso z1862-z+twg>cwtJjL%&B8@?PBdEbg4>vxY(p&DNjslmX7)f;PyF|yaLLwnasIL&S! zm2Pl?wb}XJ(a7{l`ZBkufr#9D_aEdsaou%!MdDhbz~uZX&D@0*qlkcmNmuf19CN)` z^ua{%AfUu}D4=Q~X%Zo;bXSZXaYDAxQEI)J)Lv*l<^-?zc2z>&@pBBA2h$kK(>+|j zgGYG;^ve&?gH`vD@N{%tK9Huw5~IF0u$>oGE!_D5#-=G20PGF}H?64pM!g}5u? z4dt}`NQmEaTP6p_gV*M^p$|>PcK1*Uh~Az7;(2V%e^sTp-c_f9nyJBGG!UguC`AAm z%q%&Vd;j<-KzO0v@<<{{vm>#yAPj7#hoGqygFs4#w6oN=ffM>#g~&@@hc*Wk(d_6j z<7s;h`Y_G+=&KQ9z~~5XF{;2YcMh~ zuoZGvyrQ%v@9y?Wqp1s!5X`Z!XEZG%EhUQz^57{!zq(L8k>0iL2PWZOO7dA+cRI$a z$UCrQ5%WSPbfA%L$%&413BP}5xA^Eh-2kUM!Y|?j6-(Y&_Ti71_2h782)y(8^)DYs z+XknbgP2tSyg7FRkgc4W4b!({S5}m;pwmYX z7mE>ykPA1D1s~cJ&G~d=Qhw|>Rhm>B=712!z@4`SRO6}wL zjrE11obim({^L6=15j+CXf$Klp+E`?$tlvp#_rxG%=cwaI*nW$BC~NW%2(79qt#SM zIa+QbX4tObCad-3QwaC2WscMNLY{8GT1?H1uTD1KM@lHeETp{iE2c^1dX77N_=&T5 z>XmBezxVR{7(cMhlu2+#-eWUD1M|Bp9<>k@CUKLwdpg3Pi}M52c>Lz!_g#0n?YFS_ zwa>A0giK?I>3;-4M{fSC-k4ouH{GJQ%GH^uM%U0bJL3DLPOP@o*ui%<1%bZ6B% z&p4;jQSQ?wol<@iF@bSKSN|>!9w=_5aqs%r=tkiBa^yzzqj=H~-LkqBf6-yV>o$?l z2;+KDAMszcEv?jr*NyiqFTvk!8cvJs5)@Z6h1L20_#4Nn+ZMv+;QVYr-IY=!zrkJM zZG&_?%8ej`xHy3q%p@oesR)l=o*O6RobeH*I{rfA%|Suixj- zPv%N^7KLNzmY2!4704>D`ik%8678&tiv&OaVMG-8<^u?UzG*v zyqvt@Qh$>#>iLraMqPG|jXLFqw%vs+XQv1C3vk}hYzgp>YYS6KSxEetO4};Vw@>D4 zLmlVp>NxfAPGfBr>CbP@Cm$?4NI`x{Xk4l~=K77~LFdAx&r!aIhl!BJbwW)zRfrTT zVO<7bXp6P(P0&;ZVf_Gc5E{$Z(=WdjgQ(j)4|eh{HAZ8Zok|H!|0ARL_IIbI!5^V z-5H%xPEHL><=*5RIbHR-?S;%boQPC;RoO?&s7?V7M*;?@s6B ztUBuOSFEcxZmFQC*#&e|m9#}kIBp2qnxcFI zVb-r7A04J4{iF{Y@C4ptk-hVC^(D%I7mv2__Zp0eKc_u_YOQrq63%p@xEV=_> zt634P+lHk9Z#?-FA5Q~O$?UTnh|OaOshOYdVVdptE20sD!yF%%+i=`>&7xc|Rii(M z<&tHh&W0(y4VG&l(!x>ah=rLWiEL1C8wEq#+s_ceb(aia;fO+r3zfy|g z451rQf|3quJElj`Kim8cc|P=h1+|So`#vzxal?kt^B_# zRj^Iu(?Fb1WaH$t$uH^J=#kj$^15NDuBh&U#7y9o6v?g-M&rA?>FV}JppF{dI%0Th z;R)OhPz4Dj;eH24>F+7?VG}wfrPW3qM8u)KZa@SB;f=Fi8S1#qklG~W4qBD)-MLC! z2E7_q4IK08?Dh4biu@AHDNp+9(rLE!JpcAgOU5(Fw@k%K$N+}g z@Q}J+yy|NZ8l8>Iv@gm}gg@6WC{1=3*AQPGSwCN_j%HS5fa@ZJ_QbiRn8gV36-WhT z-cngSrOvs3PX)p70ip7*6=1*7naqi8BEo#gvmsm4{rLB~IYpwOcdX4Bd*#OUdERR# z5r;9yP4Q|$aBGiqAf?ud+@ZYvQYe}IGu%lh%;5JnX@!|AyD9B;f%Lk#^FWtk_425^ z@iKm2R8?+#OYx=Z#9qlg9i4FNN{t@2g1~E`%b(;-d5s4Y*Z;C_UOfmpczpXU5B?ri zi;=D91YKSch6!qyq?zqT)^ba;zs~6d;GzrfTq&~nNAv8nJ3T`1NQN1V*xM@)j_-T% zhhI?&9@l+5%4ge8ubo(-5B`(=>D2a2-|w}(j%TDyIVoaMOZoU0opc&J)@BU~gkREg zr-cx?M@^M=anMrhyu&~HF@JLqE1=O==PduznJFFh>w0B)t(h)8{uF_~@G8UJ9^S}^MHSACP0qwb30fEv_UYo&rcZ&FMoTInN8%>FE^~?m zlssF7!4I9@1CHul#or|fA-=$O;D6Q;XQ$xKKltRvY*h!j)d_lS8x^FU2-cSI$0?V{ z*G>uc^ed!<+%46v23vJ7-33eoL@i2`e5SpuD0;fT=B6%w8`|C;9lmS*S0Lgvk{0jr z_3~$k@x3@<*H7M84n~P^DuhmgoT2zFXCKJ47t=Cm-mLZ;DE$n#Zp5XE4@0;=uh#m5)%yP5(?eHJ5uS|4g9k6*kd9dK$HdOU=YSGq&q zL9w#y8iZONBl(GRP)q@C5IOX#27H723$pbKxvJ<~ZPL^3O)tP+O9Reon56Y^v4_R2 zxw9{1vKH7n>W2AkmVXH)wb8$^(O)(Te`_$sovj_P$2nWbb~qx4DH!ig*L`wG16Dtn zwyVzR#yr8oG+ZSifbwS5@&@Y`n=_hU<4~UazP&|I>51Vvip%LE1#V7u`r{1ZdQf`s zk|n6F%Ls`f0VQ=z8qNmB#z8z=F>b`JdH}f9*X^2fa*| zpHuDZDr3o}9y~_db_fH3V@wyA5FNCiUL~x`*^pWf#GdQNRP@>Cio#o2cN&%iU{RE$j*UI9k?iqP$3%0nKa=~-htKznvZAAqTI(<9L6H^t%id7UWG$#&BU zOx_lIrv#NT%1*&(F03)Rfl!~xVcq|G;O`w+sE zBs+KD`0ykg2urRnNpG-a#i0*eQu03kgg+xwR!u3YFg9$GG9%4k*7_kzpor*BGk5~W zpilSs!7|0g{k*S@v--;}5Ln*ZT5Q*=!#d1aXw zm-Q_`szt`pX3sg+Q*M*y$P!S(Nag`CUXg7)Z2TLbt5i&0^^){-=Ss35-~=V)pZU2$oU|EJG^y|DSVU$s z%W0%CQ};J-yBf5LK<{j;w|JPFLbblPi#V%|a>Y+o_-jFg?;qTG6tvwV)8i8R;M>ii z=_fy^Ej@3IQc6ua-;zKR^lMQ73_DZL7eQSNC8PX%t_0jPZH^!~Rw+ zkSyK#ecsFlKPUg&d6p9o7SkRIpd|#(MF0`4sc-y#G7gaiUNMksJ`Yn^%J$RWZDKPW zP}!<5W?U);4cfPg;Iqe2`Mvd>Sd=f)4!E;&ya#v+|;zdMe!OjncS2_j?*2fll_U=E_5sDg2z4 ze*kL?`_X=w7RH|Oe_Q~U71Ul$4sax$&fL0f&?0%%tc zij*4M#Km>Ygq;Ayj5a~3ACw=#0J-dmRxZ(90qk>4i0@7l+s^6#*_@;b#j&IFsfkDvW8*M5LWgE%qiy7w)-41K=~sSY))LB9Px!JbKjicYpnINe z1uLaMsTEWvrG~(wujVGitK6Ul_(y3I^fuDqf8BDXZOw_Ebi*zT|?&<2Ayg# zsA=aEVaz4jeQy;JB=c{~aYSp8S!kv!w1nO*Jy7_TQaANCNA`34kF5KDK2*PCos=4^ zc{U~CHYQc*iGbdTWxFugkaM%X+^O^oQHo3Z{f+R9RFG$1t8xtjvG85t-)kzzR9{69 zNBkS1ukB8P2tHo=lIL9ogeMDZ~Ey}cU-4->#e2@?In@kN-og{ zmB4%eOy*CXpZ(V?XYxhePoEulWbJbuL}izS*#Z?Rj;|{xFBiRXPqW2)D@_%soD%BW zL{{HH+r?F5iz&e0u3=zDjx6c;?&l^eG!Bg|0u_EHY#wc%x8J}gQXa20^sMWzh8p( zznQ9Hk;Ruj>mtfEE9QYXL8wCghj*CEyb$!0f6?Pka-K=da*xztVC;BUieckwY6^A9 z=-xha%R-`aK}HC>wSPgiF-tj^q}qW1a@WG=hFm&!WJ!nTSEQ02^nt1aIUcc^syHA0 zVEZFcJa5YRBo>e-(#S+a#Q}9kJGxKRS+h7hpq-891}<}R9<<7a3r1TGG)^nF^esz)SHM$-n$zrEbl0Vs6Vw zFdC$(wPE9y+z|B!20s=zjzxVTQMUzehZzIjCzHsxb-~kJ;=yZPorY*6)8u=TyQmZEz|!`U3M{K)m`Y|aO<7ZCelo%K{#8Z78+ZGohFmSr}jLLV7<+H9XN%pueK3~ z9is=kcm9*Vb45C)2wRF;iA>2`RZWZb8ITST8mLxjEGSzja_MI6>;cfMvQ$Yi_Q?8u z`NY4g+hWmhFY5SCE%P_(mghst^xjxD`4NeYv=k>_1hOe=*R*h)#lgoa@ z?<;no`Q-VFasmr(4UQT_l;B&@t@RBRI+Pv67IH2zWM~g7>3M_~MdYlKPA`%N8ei4d zk@1NzI9_2~pZAsV%Y!g_;iZ>H>76*b#vZ&bhmIg7w<#NfhQwpq+2o#8&nAM(vSF&43;8q7tYoPI!Nbb<69_^$m}p^ z|FiKIq+&>$PI+Y#W1?VsF$gO(WH`UBS3Z2jjo_$(-#gO>OO|^u8-S=GG^Nnr0K$$*p4^z^@B zV!=5tU~n_fH9U`cak1+odg#VZz6Q$QmXedeobTHp3=<;7%)`^AkVLyA$ymTF4SBj& zW1qf%)BSW}`?1T^*ne}T?4c|Fyn3GJ2|Kj?p3?}~o$>-V zq$uSI=z%(Zz5Ebogsy4+_{es)a>#^YOp8$r#$f}7YQet92^1r6O}aI70**oA%>|C( z1IptemL(L`A=U+v zxB1Qfl&{x>IZcR`FM%FSh$jX_#)5DuFNSS7SV1&$cW};MD!4dYTM6^RXW5 z8*R?h$gwDo_5vDx_V=2&E1+hxCszYrFKp-!QeW$aZ$I+yUizH0C5|m)tr@$RZcwJK zF7F3|*<&6X-$AIQ+T3?^X{qaU{yYYe2dhJL#aed(bN9~AgMoKcRB0kWfsJLDQJn8Y zDOZw53gHed;}DC+)HA}Cqo$tFmY#)?lYWU0nW8x66k4tVu`muve+3VWcq|=4m$|O${`*t3f zL6nU|J(fpkl71h%!7xXry8Q^`scQGS>q{7@Dlu6YP<{lz&A9Lt_FPDl!%Evk_&tT?AEalw74sqzbx?-Q^I7GN8ynx`%N(hl)W4Vb_ecqPx79$g?+HE zjxQ_i8nGOaqIJ+QksOC=X#F1N=8L}jFw+*Z5T8)?{FSbWFxEob#p%~6V76?YI~*eO zVky8d`uoQ*i_U=4-GRiLt&0S=;@g2;xe*L*m>~FUpWsScks)kt=-Jwau#nVgHw7zE-Bt=MH~2}3|9R_P zmZ=@|d7CVB<;`OSFpfilVzzGe7`1oK3@Q448FyuxWQLHbIea>VLC=o^Zxvw}q`ad0 z_JUNyShv==9uVC`XF9^)Y_(_Oi9O^iRRS9;8g24f=7opRJ?iwN^pO|hc~0uTYeeH) zmxo4V>VlR&?Y4OzawNk(*`z(kVIKe(lGVa@W2p3JP)Ii(YF(V(woj~hfBk8CAvJ6A zE9Q#$&ie#b{(i3gK`=)+1t?2n>z;R95vJ+{V?1#p|1l=|)lo%fL|S5w9AwEQ>ui=L z($=-Yh@FOVO%zeLJhR4wfi)xtPX#f)ejkpTQMk<#X&XHm^&6YJytq7fUV)~~(-#*$ z6;3>qRDa6)YGy+O)6yI>+x^bq_TDI!J`+xGMgZ09|56^DQSE7JwN@{K2T<3Fx{U})A5e2yz( z@|mqL?Qg_~HNL=M}&*xLx}Z z@DTE#Caf)D0iJA_)|X+dI{0eNIt?LhK{~f5+~}Hj1X%A`{m<6Y?nWzq42&pLX9wf< z?X4)fF37_}hOeY;M#N@MCTOh|uOts0xy~ueA^ZXlF&?0_zNCaX_G*&Wt&#mak_niA zK2eC|YK@+@8qdw%uOJbmoO(#WC3dzt7H|hrGoQ=MK!00Re@qPc!-?HVdrhhWv(0c2 zBHQNnKpvq%ohdB0+$N%)jHQk+GvD;5(g2kpe&&9P|r?v;GfImK_$|)HE-gV@1q#ysOSaB-yPxJ`_SbGc`{ z9tw$6z9xQWN=&H$uCzm*_!CUo)o*+QRisXDhl~6pl7ZA`5;{O#Qor3xU-(z*+1yh$ zRA)*@B~>TD1Hf0Ptn!Q~WNEA5@*%71%V)tc35gEToDM#YLv3>EEaRFiAXt1!pS=E= z?J%lpTBgRpGgi-vLq&D2vZhz|KO?eY{LS+S{~~NNCEFN$CVuVDt~_)5e`1FL4|m|= z83^0vx6y@wZz`P2M1CW)2Y3a2E{y4Y&S-t+*KvsHO{iy1U)+QVQGZi6dD^D?`rlD$ zGC|qa3)$3r55|EdS;xb%^yDog`6RORN>vQJ2N%voF(%^TmAw2~vk50A^wMD*8{Hi9agPdfK?W6Ha zD~s$4^LLcSd%4UV6 z4+P1p|L6m*$))dVywM%k)<5dEILAv|GKSdk4A7)el_zBX?bwGkyIdHdse4Gdzps%0 zOOI+r6#RZCNGQUu_#%lFP8B{ogu&pn8cmi`6ZsC`BDUT!#?bU+Q-Sp3SrM*DbGS3G zy@MQ#ty*=Zd|-}`0mRDJ-zE3PFU||w9fY-M1;%dvDgm7qP>un17x)Kgc(2Vq5^BYf zrje%{2l&cS7dguNSkD~DTm8oa?cvpSV^{yZ0Ss?B-1;BiM4dWhXsYhd(5Q?^%M8xT zE~?&MF}I>5Bo8IxJ|2~$=XE(xjvC6|LEAb8Ph#}!X#v4^8-`aXw(NJ#mH(uc-udvR5F-XG4y3 ztvP08tXE_?_4v%-5ZKAwI<$FROqw1{0iVCS@4rjc4g~WkjDkN!2mD240UIuWi@TuPNQj4)NNsqDu|3DC*MlYvpl>$fDcRWgO3fV# z7&rILpS++su|N4|B!xodZCiHhc@`vE z^_-l*r0U26An{{+Q zu*rM)M-(39i+egADQCI)uZJ$y6LmV|g4V!8CmV=IWF`4wKaUsUyq-?_shxmd`)Ihh zIzLC}_1qXYZ?~uW=nt9-No!LkWj}-(o<%U8n5@LR+>?ZH0buv!l1<|wx!m`I#v-H? zFnrT}zel{)SCDF&m;)g>V!fr@AE|-J1pMgiXhT< ziMlbI%7xVwF$V6r*fq2x-De+qT4krzN~JH&F1P##yRiWmtj&=QW3GPfK}e%LAGYeo z&I@hjJWaF%Jy}XvDSQsx4GKpe0d-Yk%1w6?9^%=jdE?I-Xw@?6n!+<(r(cNSNoy+I zJ;65iIKdNQ1m0sTHZ_M4SinpHnKLl7&FMdSWThGle1+ejzlcn+RuwW#0u=N5Qfj$4^!9gOx?0tJWUNN6jPcU4>x*vAWxlzssHKy|7LS? zV~!K5^3!)sNk@kI5fSSL-#y1&9ygq2BbdmX&&Rr*{R)@Vl018QcCdIu4fc0u!%@x1ET!xHANs_aE2&9HA!mczS`nw^eFx0CSBmii zpv$?lfEQlPn9dwJtSwkxW6QK1FB-o?T#>dZh=)f_hV0SvvfS|svsZqnPFhJ{zw5?AQ&RlCyjmgkrYkm!EREj>yUJOfY0kg#;u#QS zqOsIFM_-jQS5)!t+j(m4~K=yZlo3k=o50UfekYN-rk4{JjK2t+&GMyhDpA z#*y60roB_)nYHy^PC7ZFeS}o^T5+HcF8+cP`UzxE%9=5I5^Ga;!^}f032%@KEa&Q& z8C+KxI8rnzZVShpYNZ0Kf;1O&>-SVreP{;N>LBim6SsK4FqWs^_dDmP~}k6|pk)?@P-ZpvwwDDx7~33GoRk+q2@y~oNaJ0i{LV3WZu z$e>}k_qR3jK}S{tMz8$zI4*oIe-3m3jW>9OUtcCz`=o9*mD91PA=M@g#YA0);g}%- zXk1A-NXmZh3U<5WU7^6E!zVbq#3|F4tG_!umd7B_Z6&$=2f{!(P7v>zJfw|Wc9HZl z-Tg*J>h0lJa6=7A?NSJnZ^(~(J6@Lv%gK6!r#1K!<`k~{VT7(8*XpN7)wl2!%HsTo zbUQDuf$2NMm~Y*E$@cCz_sb8>Y$uVi;iXdI7POrhd}5GqhsXmuOmtYk&s{bs3tVk8 zSdwmsrdRk5{!f5GcNH0l-b|5yEiJr9&~Wgno<}vd*UIl6SSmAT;qh%tg4PQW0>!GQ zXi;p|KR*98e8bSR5yHrNM^Rz@+Mb>$luEp{72`982HuFx#}Huq#`;W=pe0~={s9F39rj{Kx=~Ih39*l=Pf?K#=0}cM=ISdm!q6`S8)b zo-`KhFY{}RxX%)>iEp`K!p!Q1U9rgd%3IL^h#yTrNiUB#aFl&#yGFTg(5$QeVJ#j$ z;)d{3=5{ua9+MqF)4lnAhJ)i3Vsdbnj!fy*p{hw}W z1kt5E<;K;uUtV;E?yA%VpzfbKg(&-Kntx#D7JQu8+-%-IAsar*AgJx*>Or9r?(f0| zaY`wUd9`@&Vbd4WyAE^Zcw1+jsi?de#&Z}0PTlI^9gaCMV~Yj}E||---~+|6_Aif= zarCN>DpyT(-kIV(9@d9`I;7;RE~+CXju$O-8uP=JZ6Ld(EUDY0}|Zb-Q5Wm+(UriG7PT465JuU4Fr45yZ5fu%%7oWb@!=LvTN7w zuS>nv_}s{$cE0{rD86SXfWCp>8BwPS>CX)lL6@Vwr$kGh}<;ji6bP1sN zXk7fk#}tpRD@9m%69+O?xG{wb8kb6Kw*ch#XMcW=-GAtHQP*xk{~x#MITJnsdoKPJ zn@s{eIw0Y8xX~&^0xS9;MaUY^jIvT*?&%H(&S=`x(2Zff%x?Vhr}K1JuNph7aq`um zQCuSQMvsPv_%^VcdX8vM3?_3b8oSZ$)pANMtC=J>W!RCX zNb|)qaTuN|Q>GA3&-Q5*%ivlPuy6-cv1^@U(}Mq<>{2Y%l1{Hl6O1QY$O+Ea&}7Xp zu`Ig6R&oNy<=;j(#TA>U=@?k1kAHTh;3OSfkkT_a5nRG4dT{>BV^cKIIut9nP@PRh&OA6=w<%?8Vbf?kWb43P!%sr zu0sM~#D$tCy%}^qyOrRpC830UK~FcD+EKzSZB+-ThWhyAKJJ%OV){Mdx6xHV4pe15pr5Rqz7f(%bO8{3RY0get?6# zIw(r-wqOe?TrCm&6(xH@F@XkE^{v#{nRNK&Et{a8SZDc|C&FQ1^Kv&bLMqCr@r`7X zBiTWc&WU8}$$Us<;18uUD|lq4ttLuA*EM%2mC<$Ax%3Kb~YT*7qS+pGa6Caw}?kmjV)e zNUR=NxA4}oa)<_U)W}A6+{J*F^P_YB-&ci|nKB`HphD*`pc7;#N#hs90|#k2~aN+JjK4F+8XZ8aSf zI%C7>s*ca`lKwEXY6#-zQdVkFj0S$|F$^@-B*x~JF$}*o0&`CCNm(lU`eOL#K3{r7 z+Rwn1eF{*dDaKfIHH&A*2wvg4EN3tliT+T zA9oxwaGi?8=h6U^Vsu}6beDw|74VMZWNEe*$@KSDmq3JOihnPw@RVyZHqu`d^gwm_ z@2@1wYTzRU<9roqIv(y`U@Az}xYRQRi!?C(R}0y9Z`g>lm}r<_<7A0CIJ zgLyhELs)uz9f`I9qXA1K(zNsyN)T>JCfOdH(^k8L2Enf4em50@{g zE!|<-iUHrJJi!sDUmUX$myE!Ge2e&dO#u6A==i68;79zQ+(dzc+Xp|SKZ zcG`TkJzuk=>p1h9b~+G=D^4{gDE7`uK!*KuhfGr{cSWz_KlObxfeC}x_BvY0(g z%gy|$VLnW0ct#q%wd7F4AtTOt6X{nX(M;_LXp;DX!90nZLVmcMz5jT$75m5b$Y2EJ zStM5{xNj+IPriiY^IgeZQnlG_gGRxJhI)I?v;#Q4GM`kALbF#NmYaM zTKEAb<`}PEW4dYZ@4G6v&@Q1Jl(3yhl?a4>`NMfsNYz|*R}a=E>hfPVR^YhAmXeH= zRdTE-Q{%BfekPE=*LQy;*+Emnk*vyV9!s3CeM35_xYts1ncm;H4u=N@q#&W$kAL2_j&=fk0YbOTS zcD;*Cn*3c79J1EN;~xJEc|V@5dysc6L+U<8F=r4m4Jr{}lzxZB=+B@Fbe*%Ll9@6k zJ6cxlc~4-`zjZrU#&~&ra$EBg!^IYQ8vLbeIal+x6zF*K`+1B!t`ya!R92V zT}Obw;2>?LF!sH4HvIcNctzK#T<1xQB+`Y+aZMziJx`Eus4)^fy2Yp%Vk$FiN@hzb zlL%w;Yf<%Eb6Ng*3A(LrV!Uo&&iUeAp_8tO*qzD(1MoBydxI=3^iC|$nkzdrPn=4< z$NZ^+jK!^Kjl*Nm2xB3K%N4!dE4nxTkTJ-Pp-!OBLHp~Z=hrnJ(|)p%mGKJKxQnZ% z=%h&NP&i^#0sY$FP1VXBZYJ97dOEfTWeY!Zmpo?;3=>-m6yKpDlOjpjkT-p2Z?M3J z;4%M|=T@1DQOf2*4ikxr8<0W^-AOPauNB+Iio@&hICNh44pK2T3&volA(0oKRE5h=~co`kpXY9k#-d%dU0s zRm+E{Ww++ND_st?lq-oI z!i1YGwYeSkp_(HEiZO$({EJv~KgaDLrO0b+`Rb}jBnk<;v%{Mpn}_|uM<=;WpRw#; zfp{Ke=_9^H1uiDvONkU&Mx$7mt-z9t`A+OP_Z8{WY|#?|=w2loH{D-C>wrz&rV`xW z%1HX0+^x~eEH*B>ybyK`%3OD#$ zMV+`LRf`J7srdmqY$ExK8*?O&zsudlsta&&})t&!qm(d+=loD(>`pk$>f; z=#~y?a`qS;ex!CSHjZK+v>8T03D;W3LI=w@?6AzdT1b2%9Nli-iFTdKWR2@d+}`C+ z-V19l0K*7%P^aNum5&x$Z3m;l<%H1JpJ2RFneqjHda8SrG`l>StdETR?#;G@W6nwL zD*C9`QtbgUv9r(u?3hawe{+3#e&BM>$CKv2c?&AO29 zD4Gcq(Me<=xC=oU#gs3SR@&Jxj>9}>>&S!;m$(8%g4A#S&Vbnu$+B|=mALGiFkhyP zjg7fsY-5O+fzQz0Ucf{VrQ>TB6~fCVT0c)tH93~iXdDeTV7>Z2U#uPk4E?^WE=4AO zQE5`D)Qg(eV>$;&g{AEbWzy+$%6OAd#atS@`bDbPNoMl0zV z4S|zXu!4RhLIqq@QS{Y2%#NW+B$y|Li~v}3Dydf3Pwm)Bu>Jher(r~o1_t-ZUvl9< z55${k@z#bBo-GV@v>D7=)SYDr9GDxMk z%+*7^Qljnhzm*&0M_E7rdfebTgV$`v*wHvS@Ac$E!p7SBc_;tsrj_wgE(DP$lU({6 zq_Ftv_ftR7Q^WYU107Am(l=8ciXHv!)*K;o&vbM5Gly1cSw>+>_;+`j8lZlC#T{>y z0hx}m(+yN|(GqGrJjV*koY`sUdzyG6ize(l{~9xR{PINWq1$8NvSvzYl8lhy3wHX$ zui(Se5=nFkSZI@(r!+k(2@k3_dSP_-3#K(-cW*6m>C=!} zy;XAQE%DnZAyyiV=xWls1y8$V>eo!6BnMCl#_JLf7jR9&fDX#6iM_UeRf%eH=%0ka zxpkej#>dVn;eXh4gg^>SfM$ z?UR`8ps}W*RQiamg`^T?2T?Xi0G`A`)8{-bW12-uZtFh+qn9E!_ z4~HAbv)0CSqMwOiB$EHUs_4Y6ES=Uh% zZ1U&+!YT_Ch<_F4(?;oOrtdVsE7UU1qu4m6EJ7NCjyO}Mx?796ST6pvkTo-2aUI4 z=rkTd#>t_raebww%}^F6Cqxdhf>SxN0NKY@J8_A|vn5R1ZdMdoyOq_eZPcC$w$<<) zxmP;~S(BkVB!Uq80myxflXtSq~@%|R$f*8DQd zSU$A!ob#p*bP2c@QJW+7vDM^M`eNeQ00D%uFpsUofPIh3S1I)KP!lKBnRl-VtEO@? ziW~|L$@c~)Gj>rTJ7}g{a?DNvS#xrlVo=KQsa|u|K{igh&=CYUg)6PqX6?BWLP2oCqDWYS66Z2a3 z5YhWlv7>Wu&Hpj}@we%oSfjHFYvp5s_~wM{LwtyhJu(rJWnV(w2MIHWUrnYP=n}Jb zESyuU_1^_xn-bh!b#ORkiIz?@mm#BqKv5qE?w2EI<#`Mk$+Ua0Jw51Dj@dE}aiMqWn524s`en(=Fp^uZ1} zrQ|C3y#KLA#(yYdN{lj@^Se&=ByxnqduH9=6vMi4WxguB|9h)$Z1)9yT5z|iiXL4t zUP!;HO905+(Jj5n4Hn-geJku_?WG=+bAkA2Qbv+DpR4F9v$CJW5Fs6+KL*X1S=-v6 zcSfB%-F^B+e#sb~3F~O^CnXBHpU!?35w0?v9TyTf^6i0iF$JkVAn_nT!!JxkT>z*i zMz|FAmyM zi9lrcx~AhsbUAb8G)I`lI71(E_+BlLKUDqPHE9E>nGt8% z(5FTaB>YD$Z;tZi_d|rNzeYrDQ+GE1etYM6a zPJr+I>Z<{6BKFfzKpCN*8oA#JN8$Y^iPkWwgW7^KB?#=Cz3XwK(=rFRYK{VADP>N*fi~ZzVvR#z~dsfDo{*y+-R_~ z`;V9c+0UeW*uFRJd-C{Ezs;>oZ8&;FAgz|iJ+yFzu0bOKqP`tw*P}UW_mV$C`5f)o z-q;~h!sjl>NOO;gRV$^yTcItk(k1!L8 z%g^>{*|_i>Rrgj}mpu;KbC@mOZ$mteEI9f(+e7n)nYx>GknsehJ){q@aP0h+K;rj- z|1O7qTqAgi@ysn>$TY9}ECG*hA~l+OGaR)UeK1-`D-LJKu5#sx`HM}x-owW{%SdG@_Zo5PRSAVCz}pIGw7y+bP6JW0~a z4^iPCrP!Ol6ld7alf$o59cz`|`#_EP2*W(kN4E>JA{bnmSU>k&uqs{V{S}AZtYIET z!Hek&*MFFc4>u;4t20(4R<2oS?lyWCb;fRi{-fisS7%-)Mb#4ZB!Z<*dkSh}9I|Ng zVN>9%LLdR>@NPd#ks0RH8h-rq#6;~!G{5kLZp*V)7)DKeTjr6mgRC#Q|G^#%p*EMY zr=SOcD|@yi-}~wsz;DO%x|Fxl1mqw1(TB*vMxoEhQQ;#=2$}`*<#26gIO!~e9tOP# zGIph=PuFB#{M_{Mpl1kF?i#&vkrB7&07q>^g~83E)s0Sm+A9f8vK$`W9L z-OfJ%!FRJ(k7=DjonatszlBF1;6Qk$d#Y(Dv*z+o+vI~vMs=B|Mqe;mf9Gn`6GxhJ z>Z=&kr++&01P;xbx(Cw_HFf44+ODSWN53qHEdGqVlELxBQFaZ9DbX_dseIzQ{o#qWEuS*Hwt5P$cL88jg;Lqynktqzjn`fweGYh8^aJQp z|Ip-yL)qi|SeKOvtVs6e<@zyRd`E9&elBL|0nV{_?Q?Ob*IEvdDW(Vfh#&R19Wrla ziC%@@r2dRU56{&dOL2h2XLM$>@Ge-M!J^HYez9GKE#moXgew=3(Vr1O=G)Zso%Z$^ z`_yKf_gLL6`_<*~uCo{dT=ebKGZNCbHqCT0OC>_2fjqwIa1Ke^N0sqd3x($M$^j6Y zsx22(ljZvu(H z!@%pq65&x&EtfaL)wDsZwtvF&b}m6CdsVoe`;{QhSn_>pWemBxg zWW~xuY`bCszwu&Jng|@)9w_>E^~JMYyXh+!B#({u^4mgYc3-|WHJ_*=GyR?Rd?RA=d@YX0?>sYYNWl_VDFkbJ7^@i6_v-9d=`6uU#)I2_9PtBD|58dV_*&@w zuUcO)Z*>xgv|^Vxx&UJpibpZ?{VI#TUL4?ZlH0}O`Y#o!X#zZ3H+SK12m$2m<1`*DUo*Nk%@0g`_jNI6TJ8$bQQ{k z6>=_8$O-P^U)|NTatsG*jCM;{-?4ROs_SHMs(%ZQgUi5fzXQv-9JmI4+#{7$-eM|Y zD(s16lJuG)3R8(Zp3HM9i&ZSkK+j3ZjSC@#2)Q1}6O5H#EizXvHhnOHWGpJsmR>PK zB;2%pzicD(Q5%=dl54~+G1fCrO;`$)Q1hbG@g01%qCkw-+jvZBp)P$EbX3wpq&4rf zc+g|YisPNT#6l~ICY|OAkt$F7GnvUp6(WZGmTq6iPbXv3;o9W*j$0j2n0jXFb6J>% z2!%>9=0XgWRl>tRwp_M1Pc)o&G8_bPPB4e79Vm)XZhNES(#Nrh+tSd657TMd3)?h% zKR6>L?3YVbd^VlqW2f;csrI+yVE}lH9tQ=IrzT(H{PZtJC11q-pQkwnjk}2t^Pjd_ zuy*!{3UveN1@-R1Q->SD2=^LNt-nb<<1g@1y)T#luJ@%CiB|ZFe;n0VfSD0j_7U~t zSW}fB!d&=ls&|?NBc#B{EAVCORr3cM;o|aW@!GoQI++W1c6gJ%321*mmP?=WH(f`7 z>~Mi>hX98F=)~POCru8>cVm8ApVyvat> z0$ltZR?*iBw@Lff&*Q^};pp0=j}&^r(GqlQ(ukn{ywXRTvREf% z=pq*)6PJr@hRfspQ#R7m2hyeX`G{}qR9Zp zU}FdI-^)fcXpdGNMtBqT*}Y=_+cOraYub(d&S@-VEnL>1s9?&UyOGIeWS`(`<%n7E z3f|e??9(wt8e4mJQ@?Vj)B#h<7+Fse&n5r8WVji1GD+1%w72 zBY3a>>Xro87EqZN+)}+E>^PpTqJnVz6G9~i^l~I$C)FVaS9QppNW9$}F`VF`qyP@H z5*|HaTuTCERK6Z<(!Evy1#dhheb20G@uhmgVQ`DKpDP}Cahg^(%+#^Reh14V{damX8$zMf@j%gY6RyrQ$c=84gUS0e@9pfr#kThDYbOG( z{j;a6@3U(+@?C#OjG7$4XT*2KNBpbG*52%e5nxI96n%DPqMs=>IiRWlnZSE*mT>!z z4>p9P`=}o5jv1>$h?Jj?t%W|43id(K@l8;Zlk086pAZHm4O+RAfU|$0qIl>8%KZF{QYufQylxuF9hMfoAMwqKnadmy| zz2e{aql7=y(HC>ZtX((<7eiBT3=uXw^>F%XTC@F;v)j6&!#gP>dSQOek*d|`Ua_)^ zzeghrz2_g-s3leF&sckk|4fMY*ai}Gp&e`bJ%rg|-%ZIjenfFO0y#dB&7Lb*FJhh` zu6&oR3I%?p`ng%KrwUBG89wU~tZVEt%wwY(X2~>y+_Tvy7b*jyztVu6^05Z|K^Kw* z%Dit~u3t-`e)>`TUReiwoT154w6@bgrmeq_gN7hk-rm$+zU z*>$XoLXKsiakx)X41mXW+pih!eIt0Lcf%JnG&X)FYRIcYLvVVX~?rAB?CRd&5hwen-dG$!Nu2 zYG~j0#YGT}N++AxeTmm`E7-1kH_jSP(VGLl)wcW|?O##J{q6Zr=`m-FA&?qfV~t$M zbrHO>tJ245`uok%BIl4}3E!49va1%>a#qpH`-m2DAq#V)>ZHcfj@||*#+WvcjgN2& zQr`U23%|udv6e{#gNGBeE-WESUlVn^tFzP^jBuPZ1zmtp+p!r97ekHxa0&N{T(dZo zaqjeRj54p>-0nu=^?HYN@oT}n>_ESB$U z{M(#*YXWC02jWST!QC}<4EkD?G11_G4p7XJLO-)}C_4T1fItPbx$m_;@DJ{Q8^FKj zD}qS6_t_5pFPvr{HaC1_q!{sG3*ohVTHtau6q?iK+Dv`fW|O8vn}{ppuU?;7V@0#X zof24mk~!vpDooS) zT6NZ6v|R%E$``-oOrrfVu8-1Q;iWTw*ke-pX;gi$M94v35rVKYk^K>kF-Im z6Es54BJhC1ittOr%BWuBgYiY9Hg%fSWxI7Y_-aYQpkBwImAOw+5XcQTkrA38Fo0oc zy&2X8@8S20b;;+X^>^=#nSoNcn__Q!<^9gf2Zr;vy~$0D4}zp!0Nbv^93sEOobV^) zGU;WvLFPS|7E_a!exo|CEnLPHg@H^qLN9ZngqNhm?QZG);dv3*?Y)1$-;-d_vvj#Z zH1AzAx7b({QsfS2`Mj&~D4l8Lr~|0+vZ9eA<`Q2OyM5^Lck(PBizykk40XIcdB zg4O5TX>udF{IxLdeN`2d#6IhcND!)^ zX-j8*gZTyIZc$8y3deF!Gw@GZkdL1|Nu=kviR2C5`*VDg+O#CgK$lQaHYDiEO+l}A z{^f?tx05v!pXWfWmkO&X`fB+vRQOMa(ihT>Mp-EuuEM;{P^r(E+Cjr^0osXCoJ*GHtY zZ1nM75zBpDZ0GZjr?UPp31&lYc6<$}@Jf@q(#JnDW3*n$5w3dxPr8SImcfFTG|&wK z%+x;lT^W-JybSpU;5EDqFv0GiqeDo8ohC}V1gg=FwEVv4%-kh4`;uP#0*!I~WUEVX ze^yBRfJ}$d%tuLP*xW{IoU*wd%GEG@`sW<8+j2k%smq3&dXU$V$9wUhww;DOMjY8i zrv3if(I9UAU|9NdBuUL>Ia#^41walPlc{?+2^PteG)@lXID%F?q*a@%a2m$%`g$}(jYswS|%cb4h3 z^QZ8KrT2PxgxhUygHQvG#Uq^35SKVO;$qbp2l$6H2i_o3Ufz}-l{diFsVG53qb$IZ zRF-&A%e7#;_uYKQXLJ&L ziSrP8%53z+_x`(Z>lnnt_utHa>Bj#;WCaz4u=d+i`3@f`2EDQmUC>;h7`A(s0T2$MROl0{T1v~a{FTJ!srM`gz7)hA%(q>X3gVgs+3S#sr!Kg z9)F!wqTa%qucx;LKIgyMIWx!FLM7>M!CB?|3fNe7@qY{OA%$_Beco_A+*luv-lxKI z?E584ji_YL+E>{jB7{PN<}!|iG%ae`@UJTA_x?ad-__nVsOd0Nm1XZsJ>+MVaTR`L^F6J#!KI z9Gt}L9oRsbJ}h*5SJ%?)%&~akuBa^0;zT+AazSmLoY{=C@IJxQ^3X*2<2pz9%$y_r zcYIjsz1FIQMaC(IQdAEV6aIvwx-BAnE%-Ep?3|ngh7sS4>&D+v5|+9@WBD0q;;Y~d zk<;;&U_+qwTb7Ozk8}-s{>=U-c@5!7eyBL)OdGP9!B}OSStJpB?hI8>kP;!J(7K2W zolQArJHfSZo2wphP%|FFSHJVq$A(^6T?}N0g`nQ2CCOGTF0ieL z=`CCL_7*KLGDZ&PC;1&BNb&sWYQi@nLM=8oP~uAD?)lS3!8*%y`FqBGogV1cuk*Mp z{8EJFu9dl2#CAc*nb0iwhCQqk$_`tIuC#OPgJTSEk;r3@G}yFgnW((_a7fLI<9J36 zi_!z};Gz2?^)cUBDGWu@WFm1H+xNAUs{t1vio|eB9N&_fj!tUJnklt}G*7N%*4z8! ze2>JaOn5+RzK8R10g`h(3F+~cbl(2El$~pVyY~nDcfSbIRx^R_$Y#9c+QATa?je0B7MkptpDBNW^`X|LxvpMpraN?q344Hx z0TA%(uND&>O>BuC20Y%smL(oK+?E{$PsIlG)!e=Y@|?XCYVDDkP6-lnk39@a>nX?T z$I+(D*pG`2+9LD{z>`a;Zu;);C9DTnP zh5GV0IRSliM;rS|KDKv|40nE{wjFm0HQjlC6M+@0ffAi0<4`CPD`!Gd`(wo)cob(n z_dyw=kWaFFJl>9L|7`d4$>nj`i-_KqT=w8~;u?$CP(OA18h0sK5^$Koyi`xW)vUAZ z67RXKa^X%mCF3I!ns>Ie-f62FG`DkhjbN~p09&N&64i?2ia>X-X4RX^2Q!+{Z9VM< z!wNl`h{ch9M)?THj+$<vifqr{R_#H{0T@CRNhAU%Sus z#)4CuF~u0-(~vK4hq+JO<}JC8{0j$Jm17c)uWIQt$}dNW{^&Gts~_C65FTi)1`vJ| zCO#6`rJ-j&_k65e7}%hV6_Ggs%ZzS6za&V_hSd7`?1G)+k=8?7u6#-7P3LxHPZ~=O z3h!an+%^lI4mm3f@*x$4{=c%yH87^83e^{Xo`{MDg`J-~sn;&OoFE0QcfP*SKK-8` zda+Evj7FzZBf~74#(hMD5>}k-{><*yoOWuB_MP5<26xKct>hyqsO_`OK-}EhDoj%+ zhQiMZK}<8xVJh{Tp@M$>;TQ04Yjby|nBYfhE@herpd|=qobUwra~}AnWLN2@=e>j? znJ!Q$my`PH08(imr$#fj0xq&5j)G!23?3Sft}dUHFNbENku`dQmE6T8A(X@jG?rTH zN;rhgNxhmTprV27kw!o@-JP1w_Ft{hyuOIRFuiUnZp;{(8vXYqA;VQa3em(g04cMS zQX|x-pfY5hmP*bzCXTUhvDS`qQMG)vr_zc8IkfQKbtGn@wakR(Db2GB%9rh{%h z-C2Hcv8vjF+IZ(6t1Q7+|rbw}Rl zC8?A60Ji9TeOwa*dG0g|fI&iHlz4#j9*8CPIm|l=UTBR(gm~jVFRD5vtT_ytIT1$! zq^UgzXcm>m_ujNNMCU}Bf88$K{K~}y3ym*`S~T%RPs7Db5bFkE(4GnFmzWjR+)ivGU#ujY2O#4EY-%xk2SWz`iFhz*^?m zCd$V{(U4#%REe$^8b4n<*fG>(xEw(E$g(=n9FRXut44p1o);b(PsKa-P4A3V;5oAj z+lpo#mc%YXy6QVIvTO`(jQ-)<-4vV9PYfAj{Tr9nwHo-OLpL}n9A-|u-t+EbAGi8e zyHbjzRqpe^s&NV$eDJ$Sm_Ze73n8uA4ch2|KC$6t8&l=u%Df_+Cy~j9q-`IzyPjlC z;!225_y$7DA^dUk=f8&d=!-f9z2IJ(CM+$HDap z+XXyN_v{nXtI>-AR%{W}5=GVfbPf`NrQvvkf(UUPk%*9io^RnnuwD~5?taZ{gUkS| zG0={o!%buCi9PG~2C)e?^q^8N|Ll@f2uWUAhTDz^_*64&Z4Nc;^H4ua!tQ~;SKR`S zwiQ3x$?$JSy2b47wc>C#H)Cg|Y;Tezc0TZzSFo$mU$p-fgU=b!L2h1*fURHY=-5?G zzI_x7w(%r#o=^8>l68~Z-e0jI`G(I_zs85ODa@}YLzl*?4AU=x;~r#VvxtNFz1rAF z&Aq41Uj1ulL`Mg$8nr=p<-AOTE2Z`42fZvX_Y1HQSisWxD%yR*qHI{Oy&CfYm!#tL z8UIPxJdsKtd>{ch7%?!6@I(IL^g!lH)Rq$!xEEnJ)#;Wfq*Fs1aJ~N z(dV1L0=U29%D@g-7#;b&FY2TM9$`_JY%$t<&wme(8-M*AJ$$&iUaA*nx`s_7KZ6rr z6u`rfh@fvLk6>;jTKn_&DBqI+daK|R033Nwzg!K{`HcT3nFY)R)_bRT?uoJ{$$|ek zy*5g92yFNsy)$z}0t&@};H&Jhz1T0rktQ7auof(O<(2<<1)S~$5S3fb80GtpLBwFEZARz0O1s_$>Gw8vsZUoi!HLMx>N3j!yOG2P=xBtE^ zDVA*X(oDk845WhPuha;q(+mifgJY_ey;6xs-9SR?VL*@%0LnyXQ3?ni0+#r$XU!AV zD@g&?OWh5>j>sGz66ik!mUhdw-xS6xosl*>E=LD5tgH}GDIQ~a?T&PHw;L6p36&fu zKtp;7662IvrNj%Lbp#!pA#teYn#JR58J4@!~lb zjfdMkg$~bBp_7~ZbrHefW+=Avp$@I*IVXsb2-$qgSnMv)cq^_e|1)kgvlI=j-s@Iz zB>8-NJEj@{iuW_;{ZP@~33inpvezyKu!k(@);J7KwaVlq0r%3{Rg{|R>cuEOG{9Up zZkrDqA0eC-o&`-wb6x@=+z%_6M@=^^F$D|*dZRm4zHADfOd-845+HAN`F19~-fg^? zbv<2OgI;j3#BY#IU$I_S4*0##VmO&ivfxRC%?E;8bPUlw{Jt?b!RdNX8!S376RO^= z^-`$$`U7ENDyH&T=Fry9r5YDXPttB)!hR;53+&m4pOMx@>JI|VF3|3&guMjy*ae)7 zCZH{&?6Bzy?LwyI*Sq6Juj;K%k4{|57z>HW5-YdyBG)a-V z4icO-N;g+%)7yi#RKszcrU(~F_gv&o(k+*w_mji}Ul%JaeOixE;0$rE-ZsO<3-mQs zT~z$^@O|J}e(5d&)5+Dtp44qASE9;ju1&A=-{Y-DD%fECpe?+V5|FcoSR$yU@hld; zbgl2m4Z3r}*+pb4%Q5T{-rqj_!knBSij8lr9RGpT@7AkY_SkCosFhpYBQV6yh6z;)mWE2R5cTvZULMN7DOtxb#Z!J_ ztelvz=jSC<05LRn__XvSiXcAD;wQPUD9zPRMGAUU)!U{=N*S`UXTNV^gE z7&Yc<0nnX7#uR{0PwOK^lh;xF+HY_B5-%m7OOWTTokW8!r$o=^c~GEPviB() zH`yQItUXDb3My1cN<~B9G2~pY)g=hfy@wP8ZipLJQzs7|sq%6jswn<5*dNfJPDAC% zq4}H}rei5F8H$dKwTEklSNX4m7|L~CW`_w1Ki>eF>nXA(hsv}R6}F`t zVf8*wKL${+Z8qxb``Q$HL%sh01W)*A@GVSsY<9drR`Xg}y)QzE0l!@;h9&{rEf|6r zjd=iDBL7>cOJLh}H$Y2pGH`3LZgcF19p-lDvSqpuzj{X-bqrUbfHdL==hRaWfq6Ni z?)s>Oiz%tZ5RG|Xe98zcV$uBwQdbkw)#$r8S}i*@6Xh|*MT~QvD0q{Y>onhM`8p4hMbNROt=*JnS7bHEIom zTZ-QP6mF4valF-m&yYAFz3xdVM1@ z12ZF+wk=$MGQO@pd}Y62E2K^eWI?IJwI3i8jrCcy<;U7{>S)gS!xEG2aD%Qcz&XqH z2F!#MNs}vP-kis+_JhAymP)i_G zJ=X#Zab@`3t9005mMygVZ&2{;zvZ?Abst~RwUS|?@vYqB{!v(zXRsrX=$6A;2t=w} zi1hU~MD=%8T0CcDOj#_x%%V@@PO7QvQC`i#-S6>1kXOYYYVXd#BI%=(Iu?$iMu_yppq??hjk9z^zqP`k=+>2-kpL(~fLc2^Az8=_3u-01#cmF3{tFN4Lg@#5 zqwq!GN56e5R?}I;$053!A(gA&ZvkE5T6_2JnoAM0mW`nv3|oXjOg^nL#sc3C;1|?x zMb%r(xYQL7MLYN}Q(2GrmG7Y6ABCvA64laYcidl@@0?7O?e7CW$t3i$yeDKD2@_Tx z-L`1+YEr~cHsQ!%6wbl;XWx2K@Sm4Rci%yzF4-1=^1U)+O$PiR*Jo2geowq)NWS|~ zi>>6*$5BTC%A#dfk>L4#u^F7Dgj<5G1(%nj1uE5@I>nr*G@iS+n+v$!Cu`EvhC!}b z#xzH?HwsaMqzj!*I&?O53v`N7*oF0%4s*rpJW%q`=?dJ{c_IPZqk3Z!>Iaet!H!a1 zn-1CP5YyWBns^TQ4#bH|6S3({pRL zQh&hvh~5eGLr*nN&r74Zr6kUHw0?BXr|b)=|CD+&wvUQtfTxbMW2~W8B{e}ln2qy_+<6F_Xbn)K^8={2m z9Jg*MRQIcnMMm@R_z%dfFtb@fOp;+nyV9C<|I2}K+Zm>OGvvU#Fv+5rwn%Jwk}0vW zr}$Q=xKPT@yPAEOc%W=Gg_;I2u<%%3jIM<^R=m6;M@e?e>sT(p}Omt#o&b z($WG_l1g`XBi$g~ARW?(bO|2d01|@Ioo~VY-yL3c40Z1n-}-9JIk))wec!ZpsIx!n zD0->byW`_<*Di0SO76bsvl?=2%<98u+EixLn2ikz)csb^L>d~^!4a#-#9?&$ieY4aFToH`?rY``y z(zphhNG^(fr*ccKVDdLW z5=}&$HbfwZYbTKMC8o0NoeD+x^?lQzkF*)+30IOw&Xmsexeqy`Q6|=Jw_?Ei=RHkM zWOjYX8wnqiQpi!-+#8-)IL@jNolx_9(;x5&au?j7+6syc7?5HCW1IC-UZV^l@LbG` zj#3u2mFtyz*0Y9(hxgX<B#+6GO(>;~e+3vcUs#*%)N0m}xuj?h0f$ttQ zspB_gh@7^WBcNDHw3W&{2S6|cc-0O1^si=)DuSv({M+aDOh^Hki4&Ij@$M@P;uDq( zvFg`QGiqeB6)WNp3eClHMH{JwYml%<>@AsV!A(V zH*@U9R3S7He5Yp39%jL78X34AS3vdc4 zl8#z#n>mg)V3TN>fw{FF55e?}^wKWe-hohjd-t@|#2I=ye}C15CA>M7C89thksKw= z!?R02Y{ihMun@{i8f}pDEy$#4&-EcFVa&cEDh6B9b+SRy@hs0CoFl>OM?-=6`~@5 zu=b=2K>c&cAp4G(z|>=&Y7poW`K_nvxIaA6^>%Y9{@7&(UgD)(zF&rgBb5>cV~oe&b)elZTL3g? z8AB&(@?DqR3l7GF?D0Eqi|lhjn!A*>ElakJlEsu`^fg7h{O8>ytBdzBSH>NDj3ul( znZ&RTJN&hk<4%uAK9xyL+cauc8>{F1E7307#4Auv4fSZ*Es?s!XJ)Xfp56@M_J-@x z7S5dpQ3-`Kb3*(~YYThPUw{b}2q4q3n=jf5V=hy3VCWHy7NB#1vRl*3wK#BNwyY@{ zGGX_X6YTIYHsnA=mYi?jpZI%%#a0n7&`<)3;&u6l^-51v6(PLG;}|!Z!L%(MW4$ab(bU=CRDlGg+xpkn z&xvte=<&Fr1p-z~&X}M|d06K*&-so)v)bK}@>!i06#RM7p06R2zZ8DSm)FoVNIoyu zG1JxZ_i;7+mB!a_tIu}Ob@Rz_^EnnU0)!P2KJBD2)c2&vm<%uM8QHn30iKF@NC48n z35=06dXpbJJx*B`jf5A_AI3|5%c^D)YzyOP>--wk+TI1oB7cHEpe_f{k8*dnU*aEOp)S?9**K*Z#tu=#BRd7}isG24y(B4|{z0C_@q#jV!w#IVrvYKi| z83{vsmJt7O`Dn*W2UyS>LzLWXMsC@DQIy1HMG+Nuq5RNrM7m(S5DKZf8V<(L$S>z);9yy6AcN<;~6W2e= z?CVr-(+Kkf5=Kp+K1Az%Jk2R%Kg-%FCJUVLmzw~uEbq_WO2cTw_~2ou(iyPNXshkIU+@*LOiuW zR5a!hr!kf)n$s^y^v!Hc{(JsMXR|d3zelg? zXAS1{5@(j4?GOJ5HHPQir$d){eGulG%pbw5D&1T=TrlzwYzv7JNxkK+80v8$vhG)R!)euM&p%9ARFN_0q zZ1!Up?dl3YDu(rDKwJ7%8M{JGVsJG!)J-MbHJ+&KUtBOjQ7Q4PrJPLIj=tET5GLfIy&%M_y;vR++b%BMM znpaU=awj=?d)cn}dF*1-9yjm99+)ABw{fF5M2;Xf#OKM%_46OQ9HERT)%%VJ3jyjU z!*aocErEBbn(3$ms?&Qjt&0w(|4N+3Q+q1p?XMrz88x zUBXPB(`9x2l!gwskIsU!&N%^NvKtff z{55Rl;zSRj&FOt;vv}RLjhldIp5wLuW&WSb)atS9fxw6)Y=gj} z=!nvx`CHl1QD#!y=k{J#>uB(X)^lI|eX>yL9}2j3kH)IZ8gGI)GZRLJ;>iE~>K}P+ zuZ_+)LN}LizvA=XFW|`4dW81dxoTHsf=q~ApaM$V+L`TF&p_5GuZ9&m*!w0`)$kW# zunF;3b6q4sy9A9}1*PS#WRFlt_t-||#QGBlXL;y5)xTs@OKqZ)tL~5Q%>0;?jR4T) z4Ly)<>7cr>9!OlZ?NOgn8rNV41B78QQ2h9_*;q4CSeTH#Zk68j*Eg@rBdpCSXTJ;k z8Kce=qIT*!Lyue_j5A>=?^H(Uv~Q;#muj8L;2RI%t;!yiAZxqsx4t(X!3Yu-e!^`6 z84`IC9nCVgn*q6D?YMEBwof$!PP(bVSytBA{Eu>poPQaOxqvii8-ySIcE}UY4pu-r zUMq=V#YN;*%i4p8Pt@}$^r-yz=C}zU9!;-@!38VNGewC(k zf9^uksqdcn#l=cYas3U7dD}goN{m*XYTuUF|Cqs|VUtnHcHCdT+rkF66y={roPWM~9tBdJr6ECQq%@$Dg~G!ts-8 z=l;e_x`ZXd!lqKK%@py>;pzO=>xs{J3bb}s^X2eK*Kv{kS{I4VcS=&flo|bZ#x$1k zwq)GtF%r23qeB2s&80q>|DK91Gfc`5fg5_(IvKLXi;7^HB(T2!35f!dTlaBb^B8;! zr3a`(WEHOS06yB)lw$Y6&G5M${42(2-)qm6Zgr`5b)5~kD97-!IG03>q%zyD?>kfCn{aAK2+jFnc{qprrlCYIK^>k_ztzFj) zS#jz!$Qz?mrH7qPPgDlpH~ZCvQh_@v2!Y+!)|Kjj5^~<(hX?2wU&wshHS|tU5hxR; zpyZ@1W;4QCV%1V)rp911mTaT-Q*y{MOq;RCS>tNwJN)lA*6(Q{gUz-dgf%bDQaV?8 z1p9ASOY*!ksSpf#*Dl`)_eDy!$-fE;c0YV48K+%YTTnTVr*5SyJj{!@ORLtW@@qAOC!*;#B+*{ zwx&u;mWCRhBlopq-z{_)Ha%dWjJbQen`^VJ?8A;nzW#M1IrWt65US#b{LZE@O)vKW zl?f=bU#EpdeoW$rgus8}#P|iIn$$FOah;1dmQGQFgWnhiGUtdl-_gujM~4#!TG5o@ z@enzKwb=}yvh8d~)(ePxYosSp+FH1~t^|lvTAInEjp-Um{Mf;88~fxb|8Gmuru1}M zPy4kHdf999YuC}>f59gqGx)Y|-92}0^1J;dVFF=%>Cv{-&?qh+%Z=H27q!j|SsT|z z+9uzNB5(be0OA*5h%VHv4^-ZnGoI2h1^ctsp|YeX!Aoo|IQE7?fGYU#T#xwUwhl8q zbA*wGPy+tSKG(u+FGYpHp2@W-3FzZBT-p8UD|@v$^Mbo2)DID^?9=|K2*f=2+rs`| zxJ7Ig3?gTmN*|n(7t`a~gQb4GQrbf(OQ1|RTfC;687T70n9n`wR1b&oCl}?H`3y_H zbnyEBg`6TbARmhI;l>bp&V6IMFWPPNu0T%?>r?LZ5h{>PVDa!~($4C4`($kC79m^w z12)6CGyc=kfQji@qR76aWEEfAjxaXk4<$D?PNRf=ZpNP4*t1EoiYH#eE6e< z+R*RSsf`P!5>a4>JP`Q$G?en_u?B-qh(7L7l+1mLx}T&9d~IsxgiycIm1mnTbHcLa zEopvjy1*z7c~9T4vLGZ7KAb;^g|Wr)xATIFe!9HA%cX@#z{pXa+elpWmhVd%U5gOh zJ|&FklpWk=0AOVdaW%U_$N$r?7Rw)&803wKH>T`B3IKng5Lfpi+_-Q?iD7Y6D_0tb z^}Nsjrhsgp`puo~U4f<~)zcpSs(;!cv9v8=>(Zk{BpvQECpj(;^k}>Gazx2;qonZ; z#nk#sCf6o-O8)1VkM2)El&&pxKBqQ$xQJW^CF11R4;E2mgFUCj06`3rFeOwKFyX+Z zrXkG&n1|-2>*{4CfQmL&)Gn3TkBQ=p^|vgPYj?%R8MLy!cb_0z^;tRVud}cE$UlOu zP7d+$ry5;}5At!JEiyaiK(VCz{5UTzdY>^kKHe6lFr1XCpdt{*m#oZKd^<_%3{ocF|zirV_)N zVo|>tyvb@({UtqKW!R;lTkW%b9yM&xn&yB;qJ#ycwoo}pMSNeXG?^{6rm#r~r8a`p zc-Q{@EdX;o5%OGibYc^6c=QV7&iNeBIw(9f* zreC(@Fke%cy5T@_w)`Gh_cYkeDU7UKjECgvd*Aj{-+#oylE|i%OyyYQ7#ex}8{8ZU z@;axHF$EJ|*bvzdgb>{EWRBmF&d~q8HIu4GFh z^^2YDuSQWf72^Dea;8i|CQ32t^=;FKQKTbR%m9lDuI#a<$=#L%0kre;=^LHT$v2@f zkxW>zJNMWn==SAUMwAf0Zk9&*d?>bfHsW&}r_9xx?w6zAK9c5=Xxv)EiFa+F{L511 zZ0e>MY%nnb6tt6}f@(CSWo4+d{Ym>?* z(;Om7R@amW_{ACZCyn+ofl$S^cBDeL8o~xieEA&W3-RMubixsF)QkHo4y}ynArmhB zx=Sm73JcoBD#bkoc+bXzP?EpX1-=Q=5>|2U))J$5Ae=ZmyF&I@_Tqu^53xG(tCEQG z1>Ay~HdpV4@6sm=-8+fbXm+E|^j*81Bv~a9)39I1-LC z-Gzn!Goj2^Giy|gQh2BDZ3~thFgzd~i@vW(Gs`rGKw=CMKnQ#fjO$~q1}bSubh0@} zG9gTD$P7G!=d4vY8|_*a4r4!lcsNc&yvD~z3I6O&(iwlZo{MGKgk~Z}+}c0q_4kqO zV54HzjmXPI$Q;m%4z5c~9XpF{^oDHb&2scu@+GZ(u&^KmjE@hxV!NvnZX~nR$eqx^8dG@{7#NFNAgb9aP-X)A!Wo;hLybu zBA7vFIC{x;wi+P#uHJi{cf>d{^SJ=G82B_Z2XELYfjH!&T!juBskCyk)`1e-hL;P9-#;EySr#J~+GeE(!IQm%) zKlKYOE=DhxB9I*enk`QlzBs93YIe292@DgP0wY^F&?VQraRwEQS>Q^Q+m!pW9IqIV7oNoIa%C}36s!KHQ7Cf&i7s9!+4Guv1xxVx z7O{;m%1Y;e|5HvM1ah4;e}+nxir4LXMoinD~x=d z(cuU8J$k&BG*=)0z;V2JXMRt0kc73LT;|`rKQ_(RXA}C#Sgti4Fb|Iq&7^kr1)CJl zDR*j&byb~4hKe(4@I%=dn@Ow!Dc~_s%E@t7gn43`g@q@TK@owjiiIBgBeG%zQPEB& z8HI^FAAnIhI>SMkB^(@a-tmh7-7_`zhCCq1f8H$8hmh5VC8P`+*f5^zj3|bW!z0sm zV<51$i4jku$N27JnL9T|FS}++oLP2ztc|NfFlyj{EWzlgDvb&Dm5@QE>afsMin=KJ z=$q>4fJr;IRUS}GkdvFG6p}@9Y25DY8Kk(t7eljvFr@D3NJ<;R1>!l#>dspC^bLO@ zabnOPB|rNdoU6dO_*7@l(=z6Y4XYHo1mK4_;6h#1<#o${2|--$mLGPs3KbJZ->ez8 zTVEHNnWl!B$}m4@(yxkfVc?W$A@Y|`u9aDIm|dmIf>tl+l6>QRQktj()HYtRJm2h+ zti*N7=e#&77+WDe{*8)2SinAp7o8?w+KMQiO543Zt3ZWe*$J9_KRb2KI#bSYcKoS( zdb=R}?(F}hR?tp=_H>zPc5&k(|EG5agaS1{gM@65zT}FaF81|LLN@i(^}EF7^())Z!AU%sm=NX2M&DJF$QeVi?9FEg?w8(Dg;!Fv32 zmxi0D&=8k}2sJyf^!TBp58RTv8z%WXCmoUCL}wme)nPQgZY!kpBQ%YJEuhE+fEtGw zqZ_l<-P?d0y&SP|cV`p)0RI6XZ#!)(9AGk>*7Zjm6?1^9>Sf0k{+SMUD3J>NMFd>s zT_{j7!F6M+I7|-hvFYv*q5&w5?o*=V93VD^5MJ58=CuvY)jMw&YPh28IAoT8dm4Fn zM79w_f(;i|afO7@Az=DiY$GxVHPG)#%m!mz6O9s3;b05%u46_V=N1$B!%7d<#Y45;9c z(5v$1BL2ed#*@rBg!Uavw~TGzh*UaUsQZxWK%f8`?^2J%#eNF}3{CA>-Ceo)L>Vh~ zh_Jrpv%EIk!z@3Wg(flXj_4RxdYBlRmXNr^Gz1U;=vc421^<~(P72xDN#%sX_s6{F zw@Ner5SQWNwY!CuvZ#;TOol~H_$}^E#gVg6k?lAh5IcLX5-)lx{=Fhwm`Sd z9S0;;@_}*;q_QDo`MsR^&>&Ew{Kj+qhfV~aCr^hh>~)Kg@TOX`Lm<(eUD;VDZTsw> ztH{3U&pRgvV<5yJUD~jHd}1b*vx{p3N<%W%zv@tVK%_4 z`1Y2q0?O0@Mvr=U8GCXZ=+HXYAp#(}7reyDL0l>xD=a9utZzfn1_9FEj+~C3PBaNQ zO-Mwd)wA&WJd*tP?6Sl?Z|fe04)kj!Yh2$l<4;%#^mrA4^iwj=t9iX*W}h#lNah=giy4nT^00TcL;%cDvUDwLAESqLL`4) z9D}S4+(?6e@X)F#aeZQ3J{=(ciXfoDD# z{l5?|c<6-L=a7%lhd}Za$dJu{_|(FWhy4@+Z-}5L!LTl7t0|~RHL(R~`mhI9+Mzv6 z7W0-q@C{PG8`-~*E>Al>Cp5;RQJG=_5dS>q+cT=a;{^|M_H0s@YCi}Dyow=m$LX8> z}r9Rw?P%Ifr_;}D0IVRV{ zEee5{Dyd-9to4Fn{BJ?fcz8&lRAq{CBi|5!n28rvXAbED+e~eAlyI zZHYn3(Q52-++_>|DK$_EtUM2mgfb%Q@$!7ifDGay z*Z~hif!}|DCJ`6HR1HTWq#j~LSbLC9-PfxpX=0ctUHIcgZcA=Ud@T?%TC31{EA^Cc z&QfTJGYM!x{X2WfGNQ>#7Fz&hh}!2B6dT`q-@mtbf%O2vWW-*Bk>-5m#{vpUuTg;A zZX19^U{1_ts35LBw;WUgdj{v5$S58#es#^Rd|@$=1!T){{2?a+*P(;TKgnwWszXlK z{J)Jx+hMRY3E6^;=J7k+SDjTu958$tAhxUb@^h`oUs+{0%5EVL9Q}uH1blw)br!8_ zE^^KmMAX3;;TlWYcsL?3H{v&>Tq*9K6T{OB$QIMaAxQ>b!yD+4M`UlJJhu@I1R31Bk$E!(~stW_h09vfyZXVWYD0 z-mLb!fNDt5OC!KraH-{w{nfP6U;4&XJ{WLBqW&hw(W{$wR` zMbMgKQ8hPtWkGP2oCJ*cWHE;Sg>^m3nM;hZ@@(OcCCpcP=Xds}k^YG0y8RqLf{F@7 zeO8AtEs%~{hQ$eMWco3Mq@@?87O2V)l}$xN1=^`xM*%C&Pu2H7{astJvmacfJ7ROd z>IHky7C!DM`;-~27a-_~#bDj|!Z*1T zabQuMr-hfZex z9%nWE!~5kwdjBgQUy;8Wdew7b0Pf*CW16FY)IFOzjD&Btl@Z%(oZc_A{6W%+<7;|U z9)QpD>eEMRsu2kPkniu=t3O19AAJM8I3><|ZUSEgT}l`Oypin=`_M|m$Yh5)hKeLB z@&RkFvQ6f|GNX~?gsE#JGn6s}#{SdQH^YQ@ zM}Yd{Y_)RgNsaL1$&4X8OwR>WLsqIl9=4!$5D-IIrzM+oW+Oh4pSAKyN|6sGb~g!( zfN#!l+iB!eY2zR6;Y;GbC1z?D>O5yWAdQnKJ=zT>AKrQ^xb>=U7M%UC~u3t zE>bUr2-GoH(%iT=J?R13Hs=#e3hOooz1J8=ly2@Qv#p7#e-mVSnxfP@gt$Q`hpP8~ zqv93C4G#o2>+LYYNP45^m%so(Wwfn1CKTQe)Kxo~@IkTMyK)kSj^NK9qMmtSb+-t_ zaBTQ-I59ruYFgnw5E43ld@omR`TR)At&qt5a$V&x?jun7u7=xsMUd!l_5NXMtXjJR zjWh@eaSoo==?K((c8@pv!dH2u1>rcB0hEk_0}4^84b8ha*S>jgIe4|arI zkVK#p(f``mr+w?J%CxFsI~-!44NLmluo&v^PW{jW=+7ECpv%PGOxB<~5QsS1oA|nE zP^yT*lTZtQXJ-IsCLKy7lUMFj)Wgez^1l;@NA-2fuN@hb75I_#8FyPfFj#lc<=@!$ z#q~UmUBHr#ky!NV=g|Sz<32#PbFq2A30lTl_X;h-d|Ys)8|brwJA@&do?tjgPCRH6 z{g3>ah>|f;lXr>p42!^FPak|nG!pjbF#M%DF^V&OB|$9XzQek%q?nr@jD`1rONr5-`=YI~r z-Xj98;z+WY$Ukv|t51afi$FK1CXl8-2KifI2G~zTPd=vf3c-5hGdZ>Dz5~cNpL#(p z5~X&?Kwl;Cy3%uC3%GlJnu0@P*lkkD4=LK_N#ET$G1jiN5)m}uDWTW|(dyk?KFZE< z7xl5q-Hyat_XqivZ&%J`Gs~2PczaoO)YG|~vjZ>v<-$J@2eG)*$ z2oHqI@PddHOyK={&@yAXe(5khhY*wA8TsDrPy5D>08PB88xk6`iH8;n$kgNLX)`PW z9B9(Z=Yj(iyZafcR&^>1R_t=Yl}k``3d(LzxpL#LUnR41@TM>zuT_L^?bt2^$YA9+ z*xaI47zI&k<#Qidh~R#znRtaTM7L2JTO|%K=Iv6hMithsDBp>3e*POz&x?B1dEU8CcE4*p^Zl?8H9$K<-fpu!npe_7_mnqwJcH!b8Ao?Am!BiAKTnnn{FC4HZL~*dqT~5i`Uyeu0da>r zvjyxi7B)BIHakR|`fHYk!-DN?Qqt1W>+WjjgoPO715bsC2tU)-&&df0xF-s7{X9JX zXj=2>yp{dA^)r`~6wc!1Aubcu&vZlXiu~HEUsfw#pFayS49qNN3y0DjDQ+J9Mg1do z_BUf-!!$@Qq|}H#{&jWmw?;u#)#dFY;XDm(qtmN)Lq;4N^>_pEV;>~704T%p(9XuB z`V&j#>hL$E>^F=OWY06_8zSM1G7L zO`aS4T1xX!lgF?keUd+a68CF%N7=XENU@RdvtyFW{L{cMhrMzaut0&#%=SM<&FsRb zHeCX#SLPhgok}?nQ%!X#ad2>SJD%L{c9)NCCo6iBg&CM65wtZ(H7aC<5sZ^;e8*XpK*Jmw4Hd`{1cHrZ_tXulgz-_G;bC_zU zmCr^(u2^TB$oxd-EG;lIpYp$9F@;YFo(|VX%^09}|JCX#GKEF6GHOGLZ?Qx4uz%)? zm_0?Til0oDo7}(N$=OW&p0z+O!Vvk3k$_mOIS7Sr{G5HCSV1M`b0yhTrLHmn=BU%r zQ4u@MnqQ^DlyFtV)XX1C{V*Js6fM`6e5%?XS|c+HoWtns-3ClS(ti0npXgAt1)_{NW%evlbaD~h|$aY2yE>6G87M<_|&#Y1B zO{XdH*rv14GdByEDLkJT7LQ4NRh4!*(Wf{oFry_a>>buXh+>NtYHa4W#K6u)A5 z6~(Y9o@!TlHX_G4{mv(^FVHR?^nGeY*|ffow7S(&+d+A=J}L3re)*^2{5O5*zQLCy zA=J#YnuUa>{(hUQ4tCQ8ZQYE4dKPI^;)ivOZgh?-oZr=K*Yd7d+;xDEzSsNo!^rFE z`tGg5J+MD%ZxV!u6`#%b@&8Kg7S1x+1ecq&Z zGgc$oO~GD`C8m-0(FeybWd+dLuTIevwO*b5R#^`eO_!f;&dRJ$PR^ipy`d9`yJyYu zJze^9PnJ|28X6Y1ZNPI{M}uR{fCSMOxj;rcgo}G^0O|hwm;T3?;S_7y(a(hirHk!? z6*$PkD`;v{X5~06_sLnC0F~721abGD)4-Kt|UTt zhPJ?9e38(}_SH5-6j^TJu@{y|pst-aBmG|-{T}U`sW=N^;RQr>1PAN@0{@5a7-9_V zic=t!BiW?{2p1swTRwTUvr^(+AcSJEf;Sp$zD5jO$&= zfN;|v|JI4B>BF?um=YATC#H+<;|g2ap(`2W3a*+CMFvGwj)c)aBdde=<4UIY{{G98 zF-%S$?v$@5<=#JQ_x6&g{S&`9a+psy`{*lAH$N9}`{~7dcAfb31f9vw2n85e8`FF? z!aObl4yM;A!T14YAl;LZk#b;KG98EJRtX3#Ss$~1P-HrE=M3(tE?UX^dAmMgl7ru} zo^Eb`SwAR|;xj8IwKh{7@My0c&eJW7z6L$`Nn4QR@455XMdSB=d2~?}MLB{4V5G+5P%%WQJJCZo2s- z^yXq6E56joG?TlAt;k5ho7(*6EH$u9S|5Hqfr!VQ+O9YZOdC@F?-|n4dgn%4hSeYggPSPJ3imf z`mOhmS+my6+4sKgzRz{`Nzm6-!^fe)0RRB_8tTdh000`+zYh=%`HMyDb{O(YP+!|f z1^Eqd&jNJ*B_blCre)5;9jb&=hh{4heBLZ>oxJ+WXX*1voj``}jX z@1W(bRCSDPx5Fo|W4X522K#Sx^aJ`638A(qG0}%?Oi!ijYqoH<&<1qZ?f3;wg)>cN zOO2$1sfE>+XdCQL=mV6C9r(mBiT6yc9!Cl+aS3j49+;`3P(<7|Tl%KEdw}sPeX$;A2hwGAK4?~a8UGBI^wb11v%%@vRFYYXD2vuY#H4K<1Nu| zlp|9~5j4~bwoTZC9`uBC-fVu7y>sY8;PJ#dz zD>Zabh^Vh{94W~M*HhDxL1w1eeZnL-X6OW(!>#th?{I-Tc>+&x?NO^3@pAoK(SJ_Q zdIs@Zd1hSyO`eD9?aRnLJ3?gvms16dxK1l9!hr2$BuH}XPk4J5oa0?M!!O*$&*%u# zae5Q6zFR<3=+^AutIz(6ly~VKTlRq=RG4O?i1!6f+GvL(#Kcs6b{zegqwXE|tU0&V z0!X8tvy~1ut6OyBa$6*LXh&fG?q;_jq%!t_1d!VHqyOhgW7NUp2$*zop$GXzDzG;a zOK@ijCWzsnB=YvZ5Ri?K%Ys^Ly#@w947GwPqJ8|GG5LdyazMtu~G}jV6XruUU z=zJ7v+qmikg!7>&xYG+UO{39A>P&z151`xYNkHZv5;Z9ao?L5m*U{!K>Eus;g4Kt6Eo7eSlx&;Pr^mRJMz%@`WXY9AppTGWWG&9-eL zHDIh0>OBM#MBBrNc2E6kI%30P_kt85@g^>`)vRI`zE z%(#6TL4^TyTw5AGis(maS85x17!cUj=^X)qbO!N2-wt9@gY#u05)U=@kIr&Ech7an z7dgI3==ELsKmqR#nEcD8cU2@4^=;S+V~OMPHN+dZL}Sk!X8-O%Xw_$6c2Rn`_QR$U z<8F66Ff@`4*?jlilLP)Nf8!B$?uS_2N-7v?lzb+NNNVv5`DDeI5Kw$J6@s*%ls4IO z>YJES(EaV%CM?Q0!S}3~7{ODf8mS^ZuNmKeFHN%4Q6qviAsM0(2^?T_NmPy>i>SbN zNZIR0k7rgaAV;Gq`O(wT(P^9fr$vkrp|5hqyJA=iVtkYcArn~H&@$3KFjY)J*P@=B z223QQ_nmNi%|uwru$%sX5a?R>p)=rt$xVp4q-KZ4Z-z`J3jB4Vfw6j>zIa~AzgqYi zy?ZHgg6XB5Qth>qJlVJE-`!C^YSw1R)0ILFo<3yQhLzv$(NPumcuQb$v^`g}uOTLV z7r%b$<4h`VD-Q?PvMAD|Mlmzf$WIB^9xKod+f%d`Zg67B2ZQ?B=G#ZYqke6(bsLqp zpf^Lq&faGWR*Q5uvgxvT7~xT#!ZRhsG&X*CE2;q25}%LJhwD%2$xFjugB)v)%`3D| zzhb3gZ9SSUUu>y14B20HzU4f{s3o?UpT2$gz*`CW6Qo5|5=ckLnj9Evs95mbkrh1A z*Qu;cMc5%C1zOSi-0jZo*ikXuO~W+-AOLPf6#BtKC2Xlb*J;ZGELJb3Q0{PEl&t)! zIr#-pMMylTxby7d-P`aDOOCT(^KV1+M#RoHH6SSm;e1S_tsZmk*l3EK(TAEqCQdpc zLPhq<44^H&*l~ET3|;hA{+08PlHv0rgUt)`hJrA#-&q;#{DtJ!>}1LwSKRem>BYYv zkZ_O6(0|kIXW5plU`7```madx7epEQ?eiCs29g)>o%6Hyr5E3q2Jt>$ z?CT^~UFoftFE$jt7px^E1ZZT(Y3b+QPnQ{w!1+iT>0?roHj2;*uyWZ-ujw03-p9kF;>2@o%D#bp9}7H|IaE4OzCxe|^e7!|s?Ni9_v?b{ zby@ddZ{9UBKA-!@bIM1GBD<<8s+i(0&)eN?Jp0Eop$f~h74`un%w_-#u%|wF5clNRM=dI zcJkw=>o?a4B|f{__Y)-LE1wpjUc4c^S{)73;CR=AgM5aqeAk=jcCxI{OasXrA^aT# zJ+<}g@@g*eH!`?z_4x1LJjRJA;`R}a>mM2=;=^wfR3FWYluN18N)BtsNY_4k4)RLvzsbSj@l3iN*S{?My2+`@8CGW4$XvF&w zD`=G>@JIPKVcyJZck;v!Q)mOVnxlIHqfxo?0q^}$8JE*Y^xpKe`N?O(AGTVCj_mpa zPx3yUqwgT5)41l`)KrbaEfoJsHj-Sl^F{;<^5h=euV#K9K8P|ODN16&?pt9K%#R-m zXrDIUA$ayB*jpYQFprk3p16XBn7=z<+W2Z`?L>ezrJ|keM+(K2G*cVfqE?_059I1J znlA-ugRsXY&Ei_hB@)50=9d!KQq?zoBoFgtny6AUx#((91LnRWh>o0bj++Dd5wQSl zSITF@qJf|>w0M{h-(jf6sE;xbJd_R}8P_4u2P6g)i6z?RD_JWCbcn%G-(Y_x-E2^M zG4t5bwHAyGQKa)q)=(W}JqkL&IwIT>;#D}x!Q=g)@l`Gk2fJhSd`rT?hEGKVk(Xo1 zac()HaHh!B4|mPbC!VcsqrSMO+WVWI-QCxZYzhL*$rT zE?yg%$YytGq5#r;tr2PZA>HjJcU!gIkL(5H-%H$(Jp?MIxyxSmmrj>WBJP_3uCCdG zt7|_mtT)G{{g;tqK`-8Kvb~r5u{ROHvBsYCgqVPMUWRBQqA=0KW0*sQGznE6yGzL& zBX;#89y(Gn@xX?r*CVw%d)VYO5(vtCE3O}k)xTz@t^XQoD2=#J#5mNg;?kpcha)_Z zMui!TAn1zFe|HphenAg2*GdgJ>WS7ld#?vmbFL?N;{@tQKj?}qyuQTmq=aNK`fuL3leKzF03B-5$7>v)11|f&P!0jzS-j79T1$w+ z;V5}>i;sKH3x;~HGqX#hZ0>3Z=(4|s{8ax6j;o1b!Dbmpqg9ELHK(~mM0I9qSOs$R zx35UD(+tjT3U;&PgVmGlAuUXz&ub_t_HPoa;SYEwC~pgeHr@peQIV#FG0T;~sZlqi zUu3?REP<8)M2Q6x9Z<3|N;~)11M|?j*#^`UuO-2RY~3ChIjlSnl$}|6R!d}{-M|^N zco)FH6hGWnslE1t{6(cCFE%0STNE^$g{;+dLp`ZLU3#@O0({w&>_r*sR<}5UUZ-40 z4ZW;DNMZDxU#p%(Iut+q)2sIKH@aGzD{PhUcRd~u=vQJw_1@Q=w{eUsnIuc@ZRwuXadseh0dZjc(6+VU`!Y)IM!XPj=LsSR0U(b7mSnL|;Nu8ife=+~t!EP*Mbo`Aq5;n#MtY0E9hfODITZ)-=8A8?P zp>z6-&xSZh>KZ$rAY&pg%6AcL;E2)7&kbQ^gVcS78jbXWO2bE~G}G#K@T9M&q5Q*C zXg4_f0?3SiM$+nVpXOfouJ?ewi^%l@=K@MR*1=uvO*9rjbGX|YDh(%2TF>GSr88j$ zm)v?>H26w*vR=-lbzcAgYr5!)%M>*vhZxoAZ$3mn`F+-Coxd^FQmdQBEsp=Ou{4zQ zqNy*GnOIRd-nEpSTr}x0$)JLI309J}TW>7AV+#71%Xr*<=^HoTDFbu3<7Uk>mcICQ zm4obOA=r5of86S_dKY@?I1dgmDQ$7m;uvBj7=dQsa(+em7r{ikas4{q=t#x1Q^g)U z0xvLYe$qwxc84Cey?tdu-CE(cl0amJ{knqQ26c}Esp>5WDt>rpmX6g}?>AaVsl*{V zO*B;hf(l;{6=+&2|AnL5?n^MEvE}(Z&upOb#toE#8?DSAXE^hKA>??bT}ppmSDL0J zCGZh-pBX7`ibU08^sif8UT-&9aj{yL=Vf1f#i2aQZMNDykXDs$xiV=wDma4}KOKF0 zj34iBk4o+m)oX(YD~IE++fx;Jr#f4m&SuEtV_~@ z)%oDi(nzq^cKk>`<7B)LXeNx-7gQ60cRpQNF9`4M4}3fMG3vGJx%0KdC${+ zlGxW29h}+gIbXd+8u2CehUlMF1IYkvuF&eNltZ2F?ZyZnY@krx1ddcJldfGqhjzyIK1#Drfl(i0;mTnewN{T;mE5en*7UB+Il2UQ~wSx zZ?Vjyy$I2lpVvx)2ud?+$=Y@J@(Dwxk}{!i zgE_wf#AbG&0SgZnVOIAHZsOKtNARf9-|}$FKKT4%r3Op7tW(q1KWY#m%Y3$q5}%wO6WA48A)>RacQ^tah}wSQs>q z@S^q6xz8#8Y-*|{N}_9s2%dv8vPBBW1S%Fa=ntt``G3o=z)8GgLg4$h%)j0&dLYq-F#*!;S=F3t3~OMIIw)&Qh}6(sBPQKrN(r(x5%UeU$H^OlXJ zz;7!@1YZ}ycBJlk?#-PUQ9zP$p`Q+Jsmt&`-zGx-&4(>H1Z?lB;fO6Ah5*jXt!#!Y zY8^HZ;x00M0Z^-J{p~!q7#ouyIMTrS%XhT07HK8+-4QDSGMv$jXmGAi3JcB8e}nFz zxm3D-?nsT4|7N3et#6QzUA3~rmDUa3*`>)Pd576q z*+&=afbF0WdBs2ch(R)7p>@jj_>P1rguhDy@>FC8qyqpdf}sZ7$5I3mfsZ+RgBVz; zsF9*RoxEgj@SAktC?NT3YC2EVvRW^iEMC<9 zQYKz8Ls1YB5$X>qH$auxd~!>sV3)=Mk_KbPJ|>f0Vc?INWV43s?+7I*5u9MA#9yVy zZ>5Bx^jS;Qdp;hNU?J?ryfmoZust4;Jmcy|?>w=|RBzp_PjyfGmW+kt#8nlFa#<{| z;9S*FkZZ>EdeqJ+au6NLSFIBM_)74OmSjxmEpjmni5OS^mpCKe?`5qv9gb2`%Rc!G z3@o{ic5lwD{L9IM@bbs}3&mcQgG=JR!n@FYGB^JG<8TpV*3@;KIg``eNiVxAoQ>rr zG7IV4!eou;>4T(k)AZH`dd}->~~w$IyLsx;cHj*RMG$je&2O>cZ>-VwENi)KKd~0STs4^Qf2`u+HlB@ws|tzP)NbAf7GgmVn>LjS?p*f6bD^G zrx!^ppG)(vTE`ysxbI8KjI8w*&kXY1g#6h&*QCBO^L827GOzs-aW)^dXVe#KbIILo zRV1?*G`g=JD~y{OV#N=Yr^h!6Vul(3dX~me! zMOaoZEk{~{$a8ag+c_RyA^N7^Wr>(;c{ZS(FWd!c`Z*c#zKy2$1h;)7L8w7u?VId?Dp3R5&T4%=z1GG$NyH(!D|J(D-a$E4N!%4PHcc4}bbr z2U(F#S1teZ|F@W6e-LjXH;5qiM+r|nH1zHJFp{;ECt2s~+nNI#U-H`tNI6o15p{FI zi1orZZSNF;o6;@2ySuYvz2U(_Zkn9(|1{LghDA98COQq7ktDUN-$(~FcVXQl7ow@T zd^hv;>whxzsb#-@hq&d9Wq_@Z#KvQo>wA}c>g!LruF0`du|-739qd8d;fiW@PNA@x3`7k!55L11&hEoU!O&PbjRA>!JvFz&EGuP z1z8{;+%@hH2(Zz+KZcheCw1-QNnwTSP4=|C3Cq+1A7W#>n)kY0uX1$Xlc146y~OL);VJcZQ(M|-1Px6AlT4EGe-9dnmqdcZT98&4jj z@w#m_WMmdUj0QE|iYIF&l=49I-%LpsO6A~@4?(bR!ymJqJwcpUtmYe^K$y*D>gGXKQ?&V_L#%>+CM0(&@pkaDlMYs=#jfm^7343%2{PMS!L96U4VN5O_A zG5JZx9Mj?E6k4xm<5_~JGvfM&7j!Iv(~?l$K*b5#z*Ro~k}v@JXQP47CM>w#yip?Ivkw zl@+oqm2nStd^TzPksvoLtuk!s9jJldIcGO293+W7(C*qO<^^+x#1aBMj`QU&Ti2Dw zG8;;rmm+_)=&1cyb>GxZ3Gm%QD+OhFds=pAXdV8BI5XRhvIc_D8c1kf+)+FgJIC+O zw6m5j)Gx17o5E02g{o7q{@+^uXEd_MkO*K`SjKV(I*-LWbfWpS{gALKI7ZyCE;6OY z_iwbT5S?JHn^D`lW>mB}Efv0e)Bme4^|wh$bS?lTMRb<~lo0#CslwvH4^>pw6Cx7g zD@vgocQe(9?_jDQ+?xI!i~1HPtN+z>wfe^j6^d6Y>;)6@`>3AWMMXpoSvlwxj&UE$ zP@wiIOb9T~1y0^HA_(62g-c=}%QD7os=xR3KcDT+fo&Y={GFI>d5Y*yPuh+sEY(Q} zGtEB2MQ*j{A8{<1BL`ATPV-GV!8{>2CI)BR007idg>>;>a>XG_w6&$95RQnF)H1Os zqx-g`tI2zcru%z75yLlqoocMbuAx{RYbH`!tCTnN^X1z;5pW-R?%*6Zb&qqR>-`O5 z@9(pQE}#4Vf70U48y8Bx5xJw^DoX?gN@BEC^}^h~0caYa|RH87na@U{H?PD(p z&5N`s(a-n!J>nF9;`!K&5$ANx{b&$^a&BPiZ2bqkXam@9!{bnFy9CzhXZmHNVF|pipjwBn z=_vwr!xI=DRyI|xq;xnw>we6CjhndY*jZ*6Yfc+XEO(f{wN*PI_r;9Wo@AC;x4F&{-qjHzQ1tx|n3gEAO1lz1YHBQr_rOgW+PemHKF z0aM4U6TY{#tOYFNYtTS4&+n#HABT@B0O7{Bsm>2s&YwJcQL?|($a6;uVm-ubSIhf zC_vdlU;rqf*S`*@{w;|_eMN7i+M?p}3iaW{cdr!Mk=I2h7a%Z73DY4EohN}6!eVijsbYB@Jjrf1k2 zd?I|EaIMSNmAJ1AuXB2bqL8VCbcsc5g=FyWbOZj@f(nBqrEu>~?ADp2#6U+M9=CEH zHT3yt;!2-D?y8(K>i7dE<#8aVv&`F*C1!5Icg1wCb&wiKbuExHV6Y-~)TM?PLWS3w zqLY5VpNWdcyqnqI=kI*%_&2W3=fEJGyzfK3N6K4N+ra%^f!6$aBnGQ)QLK5lU0)Iy zc?&WcEUmy$jz+Pub~D%3#+XJn8RGTSO!rX)&4+lqhz<2W!{_KFkid9>HE2|e$#ZN% zz#&)bgaw6c+ZWkaxes^$3$ejUm>@H=^4-Xt%k(H^VJqezl^)GyI2d4Su(>b}F1>%A zHZ@hVWWogih#87={Y04$m%8U8WXFC5m3$PD`Be2{$XJc%i4&BjUm*%ZL(lzkXQSPR zEQ~*^g_eL?U?O7NoZvma?+oz&o0H!q5a}p0p)ef|AHKbi_&N_2@HkTG()%pqXdy@( z9WXHB)=(@sfc`>@g&owr$w){Q{2Yh&PC-X-Br7cb1N>W^R$rxwfCte5$pl$RaL$1+ zA;C?Qnj-T8&%}Dw7iU-x9@S7>R5q4Y6WjOuf74OVlwR{Jm~8S#9FZ!@yMB3+d&*CJ zl@e*WO%-(vaCt6`VHAc#TcsT`?I_@Dvksou$_LaO;m<+{a)V2=@KkZ1I%p?o$;H4~vTkuXbu^bhh+Icd64%jPm)-6-2fFC9G%QXw1nV1*x;e4qk%MOlX8 zMQBqG>$Emudc|PS4}6oC5XOyL$uLLu7Y&`K)Y6`Wx)VzxgA8Qf(Hr;!5m(N8XEul# zbcYTCpI{Bh$;}^yK9)yOcKOfHn{WQl+2sunBzd)zyQz*N1=q zeoOkQA6AJuUf6)J<63bli<)3L28U+61De(6Jb?6~wb)noG57nX(i-TPNB&33-iduZ zdd5O%Yakyk>rm6Iny~w6Y|xdSn5e|^+dFZl0xYB1T%gNop+hYXCS)6p&J9|&uoZo^ z@Qc92aUFwr13}q?xfu6ummQ|+r*T>$Ks8T!F7LIEUcEp&v2RCTl3q4sGZ!ZW&)F(f zvhRPGg!7gZ_r{l+7Ox&U@6)we;iNw9eDXHb_mRkR_;Zmf#R3EA87(XjMw#M97v)MJ z!Y^k+>xAtnz44k9+olpbDoZ1g)UI1s@xtdD+E{{^sI!VU zY-!7eEX*JXa*w1(9*Qz$Q9K|s0hS*fzSGXMcJ71xNMG?++5_XAi@M0`jX7R8fYDy~ z(mL8)OpfqHY&LMdX6BYLpk|FjHK*b9h0Y@Cj9XZLn_O1W(WaP;s2ye=RTWrzm;v{i zhR<=xT8TRv4d?0NwpOTvM4?_ZeBnwy3HgA{Q5Y0#pFttbQX}swscM?S{(6`-72GwPsz z8{UVN+l9=%d*z^^c@2?ndRdt)UxNJ)MLpLUaS4sf@dQ`LCv9z2wY48U-TPEU2oQNw z+_C63qS(6ED7i2?&xnkqxymOHZ@KUdNS&Z~NvV~|nY&@ySgFtuK%iTfj zQwVk%xogH`S&-3@7y5!vIU|}u?uQSRtH!mFkNQ&itk9hsI_(3t> zbpcuuvVU_1KU^5>tW0Uxu%|OyYAXK9+%K$K5_mbX*$4N1`?}5zk$O3EYj$mANvaqj zT>b}aG@NxI#t7HaVkDbUd|>rL%C=0_;3Al4%fnxpp9L=l-QDc zr}ajcF^GJ~$2<0~&L+saj;mn|z!-XV?8~Dg9lr4A(85u&yw+os6O}YGt{x9dm8fV7 znMF247*hyG|GN)Y=EkGqM!z(KFZ+vnKCYnP=V8^{0hKpoTr5)6qp4gKKK8wYMHv#4Ic{GULe2z9sOj#!qYBPzuVZ_LjW5`C&Jvo3N}K|&NBp#$Us`fZ2J zNol+}r|on@19OuXc;`zOs<|+>Xm%MF%todZ|ECDm{S~>J-1g@v!AJ_Yaa+-<8)7^xpT1!*YZ79Bo$5yk0TuyBTfH?Z6pl#){6Y zIfRBUav;UVpTL-uebrpB;Uvs?*Tb6lEsYdyw4K|)GW^6qoZ#YwF}sC>b>jnRKRA^e zPq@j@0EMNO1%akLXr(u?DY{T*ksOiOasFpfS{f(Fd8J{nd1_x|xqdtU9K0hDp@$^+ zT+V^lc0mq7e;e}R=8urq{N}l8-Qxf6l{fx#e690 zzmq?{gIdZn20s_c+qIwn-puT*A^y4?7cT0$zFm}{4-363IpmT z_X~UGeBvk=KDUo-#8`teL*B|SieE9l6(T0o*P0T=3@#(bSS&)HZ%-N3k3v3qA-41w zdU`G$t}zrYYHQX7uJsG9;@Y`LXdW)9N%0z*&zxvU1asC8R^#nE1$@7p(JrL0MTLiO zXH1&TpvnK@D0Q@+Jqfp0bFVr6^=^i2k&$_m#6(IDZN8oOJ#XO0m!ZYcvGJJS5pk%3 z*r~yQi~AuhsKQ!bq6b%a2}dvLo8rKa(y!~7kLQ*CeB~(slABr86`4t?6JX;*Z~NMV zyK9f;l{b?)oe@VOe4o+Km|9XV{dF%oX4-|?3Cz*p%-ZHQLvo~owUYS2X^~k#M)8iS zMpMIQ&F*wi_L4|(R~D`7`TTno?We4*=R z;K|L^`@*Pp#vln-cP>an+PHJgRy>e@@J^W%I}+vO&I5-NP*tBtap!RXwc#1sPaBFnC~uGusr)IkXp9iOeDJAg;T$D=-+L73lz`P- zJ|@`H7Z9O)?s9y!p?{zHF@1MY>Hebaoj&-vc7vn&n6M97cFUnS5YBy=9{S1nod#r? z^dolK`aJC)4eIb6ZE1Js69KWOo$bs+3xv0x2OqK0LB6iJ!7HOCZHr*`@uSjE{6TAZ zZ*qWvwI8`N39>=H;d}I<4)2%o*_reB$k>yAtnwos*x%y+Ba^Lrsza*SYNCaFVb}O^ z#Kyz9dbXo0(20c*(2e7>o&+S)i1LuW6{|MBy^wm_huf_*B7l?yDsY{>oC)NP#`?Qs zhxo4D7w3$neZ_x(i9HD4-O87{Je%pbLNIuf{}l{f4?Ma49uhXWitNnR=If-tgN(yl z=52}^LaQS>vrq8Pa0sQAFZy8Hw@F?x*H~dT*=aq-yAj|jexfqr*#X)C*U9X&$>?Hu zec`LChFdlhO3^n^TB;_}Gwt^4STE6)VrHokCDYX%!(&qXMxi2+)qE%9E%O1O!FpkgwY>=5@RQw$L zyP1O*=6)1!z_GoJ7B3Q866{zNtv786%W|^8v$2Vs zczUQA5_e4bL)t6eHhIz6xwX>xLsaV@#+cl$Ndt}FaKi)I_v1VZDG?WZ-l0V+wk`s_ z_L`jfQzeQ>JqYJIWFIQfe+eI0yjOKmd&TLsCom!!EXlB=TN4dxDaI;t{jm#g5RSq8 zu+CT}9ICaZUS`l`!Lf1&*gKBsj8*!}MGS=i9#!Hl%oJT! z|BAPtC;IFYe*p1ZTzDIBzseTLz~2d;pbVu|Y~~J2d-eKMJNJXr6}d^?;lx>5WYJs zSES-n=h{4YopTL=|F(Dd`rG0;WfGh>byC<)t}J2&{T6HSf(I6`mw#rc)Fh3HbUX4j zhq7xg6)T<*EpTZZi}6jVD0)EEX6^`Ozw4sDD0;ENr&KSV#|6y&98uMc>;;{sT6Yx) zW}K_MrNk2L5TnHhZ8@d(>!`Q~R62Y#GQ8ouFSBrehXAxt!!@eb2I{qrh~PHhJm*Xv zD(R0WrLJQ7um9pk0J8jy*u{pOVy0`1ih|kcW%VReso;K{uqP@&I=a} zu)8@CuevRWQd8G51wuiICsb(-xPZC)J|egb*kbAK*L|lr+@A0+hC1Q;rVt48i_zYe ztOe8-E32)4pv8LPtMO+}m>(fcqOximHfA6fQb=hy@Sp#$wY9*4CJ(VjMbYdKcO4ca zX3oNNS~0=xBzT23i8#@Jr_z(>;b16(a(hcmoK>=<%UQQ>uZM3aADke}B?=if7G(|M z{}!;+`Cu_NiaCa=wzCCPZ&Hp<%o&+tMq@g-#r_O7-7d?oZ+u=@ChAwWJLJJXLYuQE zAVC(2*%9E@w{+nSW9nqu9f`v6JHy-05|!due5bbZ%C?IF<|*T+jm~%^>|KO1HeZJH zi&u(^)qQ!{)IlpO5J5TMAqzGs6m{DUFRuzjGc5e!6h2+$=dL4*hNSBmG~2Hu;+lk4 zCr+{Oq>TZ!LNz9kk0Yi6uL9OSFX-SG^_r~ExbMl?tjMEl`TUgu`B!h|4vp^R7gKRl zFaIqS6Y533rU>#-w>f*Sx|EF8;!m>L#OYah*HfWI2K=U)N_jqIUZpM0yrbIg1+^)1 zz0jI=ubb5W+YtIfk0q34mZp8&`=U%&62FNvH+@ePt;;{7m7IfZOycl3yfWk5Hn!|R zM!KYIGian`PK0U!_Ulj#)G<=1il}ZRE^BgyDO_S!6JW^3(;~^Nk-`wFWK{~_!wn~< zCs}d0+jr_&5qIoaIl_Tejmj<@+R26&FZs6XP#yN-_BTjJw*Nl;d>V!I=LI}Y9iA7= z97FZ@hF07Mf6hwi@e;8t5A%Q;UnE4x4YR;(Ju2q^MP;mBn5#!E_Vi8+p%4>@)8Ts| z{42pYW%XZ@^|i;J`@g-o86|HJ^j(I!O@#IPLwFjws5c-&bOUIGTx!_rTcYte)1TR@ z#-b0&$Z~8BY4iE1-fUY(oAX=(0B0*}+Y%ui9#@8-Sh$zWBd1z!%WYinXXlh}hzv|V z-SRGS@Lzu~5w@G-6Im(Qoz0N<~&IDSu_qXidbIT_DCa4Isq@inLbC z>@~t0+Ev+YpXP2#g|4|BQ?_p`E{?horBfzG@mRCJuEIgvUS()FB2XqKMTd(E?RJ3} z%5!pO*@16_%o-y*rkZLZ-l`$5YF)QTM<+!5gofRc;MJ1lcY!{u+3xdestNskGqz#*lD()y>V%`xkZK~m!&A^K*Hgj)XI1qkVzQBcj&?FRv zvZr{t07@lxpyNNMcxH%ZuyJ|E(M}@w{ic>?NGv+)t2cet;w!#WQ^nG~r~4B~4(j|T zFYl+674zV59I5}*+Dd;4(B=Q&afI?urN@m=cu7i=FYq`%@_+GE-mk3W> zU{xdWgl2^E_pL8%TlHy6<2uzquhWS5c?eJg4B?&b=JI^k1twHaJ;>!Oy{4i5hJ!aqMEDWsAJiJhVs5<$@Im;EXc-(pQFW~p#w(W1^ zC32FqP21n^B5aWqRCz?UYRUKVa`qO75p`|2h%i)SH2p4e40-@Dc^l-}AK+0p*Rg}( zx=L1Dh`>q>0N}4q43DS8_sf#Q7Ph`cF4~MTRv8!w5>lLgZ{@mL>J>`giWg)kXgiAF z{q-*~ULl$ozDuID2#N0UZMv$r9@-x9W~WhpHl)%2UPy*AzqlbYTRWJT{XQbG-+li# z+vtmYXjjDU9%mCNzggtj*^$eU6W?$c@xYo`r*tyWiY8%y5KjtNp1q&K65MJ)Du(l_ z!|$@9xY(M~F$@`|yJ&KMnGhS$a;n4KI(D4ifD_Yx35u~{Og{3Gz}ghBu-?CO{y?z0 zix~2pKWT93{9W^9AmWJlq2?Tu<-3!Txtd%cDoy6n#W;Tab3{sEEszlGvSD}MfUl{^ z7DJVX`Ko6(QGoE(@~;!rWhh#Q#hE<%A2Z~>0!bNz!lAtm2Rt9+aK)P~93jtButhe| zX`SnyvLe8{1*HRZQ8g{aM=s(bqw0c7*tmzo3VWTiGzpl~B%)bdu5=g&f6H%U-^Gdb zHa~1oN{)>F?%?MeQOekFT_z~TLU6V+9irIm5W?u@+W{Z;_#{1?>(YNxTe${OfTd^F6~;Ws#t|)kpTM0T>4Rj14_S+1qb)sYCf2 z3<4*6!Rm(4Jh`ZaU!!{G)c*y{zJkh?n|UEVwy= zLR=##MgcWEvac1vL#u&w7*&8BIcvB3;BL;lXCY1&T1hZ<_)_kput*4PvFi_4NQue9 z;S?hwUxIkHsdP;1QuJ&yU4_n%=YXRj0+JYygOWi1HN#5k9PDB&WrtvMb4zxhUf|wX|jjzQxF5<*LEV zq(KL4f6;XZa$~M66>i_Pu&u)+4D% zAKFtoFbv5>#blYEZN#@qCtct;^^PTZc1GCOk`-gKs2{;rg^5t6qj_iP`h6^>E+Sc} z)pX^I%_?ZmE_O#rAVWtJE-Yz@-fdhXG5dXXph}Snrz|3KEr~rlULq!bNACbe`ldWoPL(a@LVzr2w@UwQ&l=Fxf z^G1eWT`*1vGjJNd)(ZjXsV6@2&Z_>VYdS?a8-SBc9W`e7eqX$^HJS5nW#yO_5_t$) z>*N`U>js|cV82?eLK?v++5s2l5+@YonPa{vxK@QZbDu19ux9VXHwOu#zZM<&LB4|QQPUDrva8uXmCHvM@33r?3XDAXUfUST?dgDc z4hB&dz}RX1HtP27l*ODmT}^ml<6iA?>Far-Hv@q^DE(DD7N)igv7%^)nVY}S7v5SO0%Bb6Pv0VFN-+t5 z{LKF4)TwG;z)SS-mj&Nr2*LWA588mCyp@tvd+QXJ=Qxd@qTC#7?9o5lP5k@sh@?52 zeDvD2TEtU~16*3<;etFdV;v>wf+^<`KJhlTPUNANdFLwR{QwY)d&B|)FnV`lyei?Syyt8FTQL7ky5v?W)=>f_ep~!!M*S;X!9gfFzPo;2yDl^i2 zVck~{9==l8o41#{EQXWqH7wy!5{uMZ#na&f7)Ww4r|{xp1ZfeIl+z{*OS}gyA5{AC zwL+!UJ=ba>0>OKCLzm)*f$tOD(qIO}uf$X!Mo|o8Ff2C37Z-V$&0OWaQ;~3?HHyzl zpneVEmKXxKa(gkH`|e@J%G^$QBuZjK*-7dMKWj+ouIF?3S6eZ7VCcil*J!6n(k~EC z<0~CuEHjpr{mx3}--N%W1&4@I!e>6NooXTnk^?mr#BhqMUDJ9tMcLk_XcNWlYvIZ% z?weBK*(+$A&jt4N{<7~z^0VR8?$Ys~m*3PO2}yvzE) zwX}HpY^k1k$1%~H{%4jJatr@+w?}MzW{^60Zls?`QPX;Bm@B)~kQ%ueAp+Wz=&GWP zrkR}n@{VP*8uNu1(HuafcvR?76OErJ9?MU$UFNZPa@CAwSGjF#M%#?V(~z}-5~+bN z@s&ILi23n;k-Tt0VB>f;DcJ?ex=}YnyWB1?t4s-5B^?-wVr>#6o-U`4o}j_ABn`_| zpODGk-C%(28o%T6z)bdiVE#zur5~^qIN$%$zysXh$W~ zq+9CZ`2)PN;qS3B8v$)JSWd+)W==xamKUqV$B2#|g~i+>brbMKxN_^Pr3U*72f<%B z>hapaD@VvDKD+Zv-bYrvcwIbP(l12%^79jI$9udMe|IW8 zSHmof3txD_L<3{Qpi8QO=O%Gr{qJ;7^17ieJ6B zoA{^6zo14TWi~|BgnIGcZ((5Bqe+qD`mS2bbMnZh>yOYLKiWRMsm#qdjnT zPLr>uVxEC955WN%uX6#iF5vQ@1AU6R)XSHK-3aN>~}kBqx7 zeMb_E9`=VBA-o+wu1|&_sdeJ59zp2O$ol0o;JNxb z%V3f%W*QMOGO|O>o1-a4nyK$p`>08_}{WhsqoH017tlvofiL8mK_`0v@txwZ(GLtZ$q%j zrRq-~l15N| zb+KY8(uPSmT!F?m>8&kj)oD?rFICWwqaRQ6H@cfe`{mQRzq#3Z@cZO19iz+A`kyC{M4W!$HRn1l9E@OC8vFVXgCQLv);H%qN!G9GX$vrO( zyay!$yxR>_50&^5Ig%LK0T8xQ)LzB6mjB8|;uDjwF~Z3vMSt5vlf`93TrB}|@M6I$ zDndV!JfV^EdtH8~%OG1^z;#l}}$NL**>HpH>1zipjMUGZEvQ zI=&?OtQCrzP#^vOFlpz7M1M3sF%f>4)Iz0IMpi9$J--fa`|B5qT_2JUUM&$O5Wc^pY*+FUz zE!jQ6b5d4V5oz{%m5HBq${wQD1iEFzkZ2s7R0#Ohn`MFOU$-}C0yy`DyouSVk-G2^ zC&-)5upiRBuYfDfph|1LHx!*(HR0TYkzL0Q4pE`i1I zn3NVQ;uB&act3MsNwX&o{lTP=k+VeA49Y-*i7gknx_P1M;$poVejD3lFg&8BJ(=vCU(HlE%q>m? zXXwx}03Rb>6r1uCZi992iShEwa?VlCsZ+u%+s`|EFLCiCWut0C9?an$w2v)S4g|eD z&9x<99ohn!iFn6#yhjSZ)8VjE#-r0c_aq@<;;n4`Hqy#K0QDV`S_WR)8S%aDf z6a_QBa#5E`s(;Mz&&wa*8K7*EJibxN7Q-aSrfHYZ2rU2&aLvI&rk9+i6V@{z$GWdz zn&20hqcRub4hNhqunGow@GBUykaG+%lluHruyRF~5b5C%$3wXmL|3EH~; zma8K%wn!09XGYm3nLCt}8|-_ETapuJxC>KN)H&9M@ap3T8x=ER($6PGq@c{&s4nuw z(bjaCwg`*C+H0Z=Wdp2Dl5UUYyHx%5)<#%woDi8OGiaAmwx-@znt1)t*xBY=ee!UwS9&G7Zsh;+Cl-vnzdVuN z#%VOOvZG4kZHTRg6k&1_Q;%8AAWOLh#c&n6aWib3P%bjb4VKw_#^z% zO;Y>Q4?7RvV_ZzsmHsa0$oT3wg`AC3T`|WWON8y^Ko5vJst1GTZL2Z~C=A%`-FzoM zbwjLljClpNrqCm*Th0G>|Hs5b-821U0VfDH6!`r$-1)>09`qH((V-Hmvo(x$g?vuw zCOLa4p}?nj+{EgP)$BXn-=z{6Z&;GvJt(GzM*Crg45zXpMvJEAGf! zUL%;RRv9|Y-rn${4{oz+i(E?Okbc4YR{h)H5Dnqq|7!Z{kfZXYmNh3oM^$Fbw!Zpi zk#cY}NN-`Slx9ZD4s5x%k&*Wv=<)^a|wc_h5)G7lqR!2?ee3GWvU zVmy%04U6sjw+ICgzJdgwWWA~JMLwr+3%UuZJFPklSV4I|&%;vn?E_Wa9{7R%elAA_ zBgE#OMNt#kjw{9)zW0ubg{iG#1$jf7PufUccw$NpA+|^J;o4=7 zU(GSsa=s!xs_=0T4f;)4#LN7YAd+I}7WZ_aNQk&ZKqp)936iUAHLFN+3E}NsJXV8_ zR3!Bis(K~H_0*EYg=0zl6$Z@XcKuqAljRVE#qvN}cLgZPc6@~2xS2_dBm8XJ1|Qz#~Sh5X`b-|z;@*YecdZ5-B3X9-2`R) zlHG}Y7xjKFCQwJF8vcci9mbzSGHs&N4-JsN__dhKWxoB;(>R#LbnJ!LZATF>_`Cdh z(SRn~*$@sKJ4+BUtAY!K*7YtVVm^iKHrI=8$yYUqDFfGjaIekAJajZ9`XSJ0U$;bJ^yx@8+rtTk%V-LAgF4`#Ehd`C zi00At*Jor>+}{|y2|W>5yGA$xU$JltFt*;2>I>#skMjyGklpi`f`mQ58ODC^o9`Uu zIz~L^D&fd4_n=G-`;vDMiFu+2A(m>jZ9+n_80>bf@XTnle?m+GwAS zoT&M>bVf5i{c@3Ks16lueQoOV@hAtqA>6In-cxz;cjS-i0E}!Na&lkbiO!R`nP9+% z5m8A11c?0*{~WyJ#!9|89jc6_2FKx7q#ZOG? zUt4&jT-p!}Y=iv;WKMb-=Lrn$Z)_`?hzaVADO}RIyTGT%vb}oXMAiho?p+wf*{WYn z5Fj-sMgji#0Jb3Pw|C+5JjwY|pF5}totkip;gtWmA?3iLoW7jEqTUuT;=@V*wKO~qGBuXGz&D^0R1z0) zHg{c%9$K)Th$>>%#vIP7pIjK4bYii2AB@X|XJAS^q&~cn#o&tSaPEoOo8_Qp>HJfH zLplIv$rua0|05F^1N#v5PcDY(D>>%^B}XtKte)S|zgCNW@~u;>#0IlcjDA14*h|u+g0OXRt)+jFj@YcZDu(V zt%fq`O&pwyeFF5RWq6CQ{lF+95oQno$Jq5uwA)|*FV?-U>@Tvh)nQ|nz>7tH-o>8O zh}y%wW{MKj@OYhlQNtuh0e_?&V_0su^L@v;@SaFkGymx0^-;Rx%LUaV56)zZ!mHnP z{wk3w@c#NI>xb85xdgFZTtfOlkNFYIFKIO3HyiXo?jqWT@mIP;Zm+dC^EglMj@l?j zmE_UYiPw@+m%o^iT1WWRKJd!#-_Wn)nIH@Lg7 z7=A+5(qTIsK;ngFp8SQ2<2&zxr#^QdkD0hc+e$7cSXl#gM;ZkMMc$AN)I$}P&%@8j zav(#^4INl$PME9Y=ZjU?v>lGa`;R^ak;f)aWKy`yOx=KTZJycZ^yBa zx}f+#2pO9P8E(6>mrT8Qi^Pa*Jvl9&4fRmt2#WFCR-tR+mCT6gpDaQ=t_TmZ{>Yfx z*o_!at;Dh&G_HnJMSin*BO0`sSzoq1Kp=8qNr~I$^t z{SwrFe-~;2Vc3@$Z$S0b7QrVB00ip_W}x;Wl}*x0gt@t*)Y-0BHD^vryswM?dq@%x zzKA&%5z{V%#8QlOn#6-=-@8Y4tYh0oSGW2-%Wfa**vy+j00pp+o2DmQ_*9;dCOy91q z&1j_`;V=Mba&B%!#!$8gllk=pSRI~fFmzy&Uu==p#WDmz zwDF~*Z>rGOZUo51Y1(tXD47p6$~M0>nx4x$50ndxXfsbh#W$8jr>DDjCjLycTm8dP zS{x>~#kJ#206vDT|7>MajYzblnEs0YSN5~)@FxX~gFWQy;HH9Tui6_(jClJ2v|myX zh$qULJvW&pYsc?s@pGU%xndH#2C~`&9vZUYlbVx!=ipgj4R?fnKh!wosQN6VkS=%? zqKdP3nAqj%xvDE4HS9CPn(}U-Yn$_4{p}hap+}s(F zE=p|NG>9q?&H(I;c@4kC9_wu+r-7xZ=Ljm0Q56r@cWT~$TqWdJ=lPrORqLzNXkCv16!-d| z4d~y9s)I1+rvMvq%}_7$u|&vIcECofkh$<=cFAe}cB3Xi{co>l$ zX9%(clb0yiW+j6W&Uzbo0VTZ;Pt^34D$SkO)n)#Xiy`EihgY4oPj!oBmeynPvr%AA zHmhLsZGzB{oX43Wr`vjYygLDb)mY?A$xu$_L@>>`hJU^DcV zKqH3NK#olJ#znLl`|>TB3d}lZ7P2mF96{i8)nY5xXTnoX94+5SL+U9m?^d~Q%F)Za zz55csoJs8f!wWaQL<95Rk`?-!lE*s5Us zg4#E+V1I06`JLyAt~w5~_eArgkLtt?)eE`JVJE_!RKH?c4*0@}2CJ&5+^)c{NJiH# zN7_X8mlydWq|l=0TcklTy63J(ga=@VQ9qD(auG`o^%Dpf8Kjr5jD*eF7T7g28xy*U z|AHI}n0c9hJK>cb7778iZUbKqz&}W7-@YHsbk?mWV6uA)Li3AYW@w+4!!HuYSWGxW zLYvu7wkum_xm28L>y$?yq?nUd|AslxcuG>EizTcu%z+mzWBaZZOX!Pr@sgbc=ibZf zBvVHpdNBE8!=pSravPL;tmZVeh!p3(}S6`dTU3tHlWx9?&T-?B9<`tpk@dB0Df}E2*Tj0+j4i?jDjWKZ9U~1 zcM!}QpmHaOpDOHiIl8PjU*R2v+a<1-S4nJUsZvi{Mhv;Id3B|>G6Ii7qZTbMft#L) zcp^h)V-NGf9PAX-M-F?GM&KMk(CQe3?P!p_F^hp+h*A6Xl>alTQ;wD9P#u73aDOV; z{GHf2j7;)NA|A}J4Lvd0@d}=H59VgMZB%PUp^WLFvK$EFm+#oaVk|FiHkMmS0!gt; zvMe(>cStvS)e{8V!tp~`!q4O3Zenkv_$-(lVtRLEyoH_3yRxeBx?xM1=&!|3VAOj%T`T`+OpQwLSL%2TUylsZEAE9fA zqW^@1>t}eBEuUUUSuLmCN}Bt;*J5Jlw16y4R4i=tazW$GcL%L8zN)uQ1p7dsv*YR| zjA^<0&=zdts==sdAXHKDtcAc>G#rWfH5WD8A9AB0;tD~r^BEFfu0N4Q@HyF~eJT%` ztA+>@T8=7cpqvYN@8hXVyu!0z70(rx$5!!T9e7Qrhn#Kvp+2+eH_=uuVUdXIUF`uU zs8jVYl;zgx;vzb@97AXcV#P*GtKBbuIBgy(^C^Msu(EpLXp_xKd99mQ7K9SThW>%noq` zYfy!(RAHU)woyctv%7r_z24VD}%RZbOL zunp^%Xk`&xpv4L`59yX^ywq3{gnQbMJo%*hZYexPw&dx#syT4D{85}x)fZNYyKx@| zN1@i&#_Ao%4|K0f!n){Qr@a4{YPnN0lC3K_A6s2BxZz_QKA`?e=urZ~D>ve>bgRz@%{EF{tV&^DG6UE4ylqJ@{WCm@SHIYgN(Flz1D%3jw za!6Uoxj(VXvJd}0C`IzveA}+km}TjW5>nI8Z@l#STZw$RwXwdiv!sU~$&^sDmes3% zHc)tqLBSQfAPeh4LN-~lzqGmUDO7Pnhj$8)kMA^?AjrI@gf84r@T>>V+TP(CVT+is zgU43CD+u`sLSR$>&(r~)KCK0bn8mN`5*AmDYSMH#l&#gap)NH0y9m=x{;_YsH zioQ$=H4`EM>`PjB6+Nn{1H(6GvfG4W7%DkJiCmeaM)MY`{*=4d0=R*UG2scmS)~g) za;dA^w_;#Q`95TXiIS~rQ%*RR%iAElx1Yr)EKhkDrmi_y8c#~y=b*-hyM!UD}!UOIm@g1(|5_`*$4@_42;)24`nJAs;yV`lb`tl)BzWCVnoI zoXwe3oro8P5ImyH;DtR*|V_q}+QFb2wMPEbp-Y~#zf^J!zxEZ7^--ebc)nhbx-HSnme+_Xm ziD3%0@rbzZBaXic#ja+RA>n@v4=|v0(=fWW7q0Zu{d05Q)9Kk#QR9{1+e6tRR1Cx0 zQvmb4(b7V?3h=@Yyy9>0rYB+on*5q=p-(PfOuBnP(zeO}kXm z#1Cu{55J;lfB#QB3lYahQVUZzSdMKo?CE!)mB*3rxeiL-pm)JD36E~x@TLFWV5Q$7 z3BBxw&vjAiD@E>_j|DHhJONkTh_~NshQ&+W&mbKnS-2{kQdqA;Ho5ax6t{qQ_f2<1 zhdX4K5K{rhR))L(C}=x+kX<=kqRkG`t|yD?CiON0H)41D=<*5rvMgzR$)4thejr{< zP&{D@q-j684`Z_5ha%MoVYVPYFl9?6ONN@sv7OO6y0kbg&fJgR_q~TOQ!;lsg-ED+ z2;FGX_O;NLn0*sy7F_=W|3h9Ke(rvojbhrQjeg#8OaJ_b|8S>Gs92zuy)2PablYJL z(H#c!AoZM3)ThLg{JDSj|F3^1ISDYr+PIVh`EC&^8&L$iHThXRG~LM|9XJRVe@R47 z^H|iao-Taefrj;kvkQ$T*`;2wKVbM@fWt2bD0N5-nw_PBHPcgn8$A1)xTYFzZ9&Pk@zCzS6C#wbxv#{an^W!P(Z6ou;d1h!VY zS_p+Pe0&@ZwKrt2JyFIB}DFe3iUfc+LbVBW^Jm)mJFq2?g7Q=RxMV+yio_CRgcD;M!lpK0Zu7`w~G? zajCUPM~4s{vt1~XlyVQbK!WpVYQGlgKo_UtOQNn#qn}nhg z&L!1%I6&^C<&KJw=sA#xh09-{v3i+T{KQ(gElp)2wbmC1M9c5L}rVPkyCxCajN@NSZnd$O9E>W0FvnT_FT$Z=@~*@q+8;v%6*y^eV@-v>V^|Aqsq z?~>fPdH2h1ix7KwVRDs}I0lU55fykL!V1m``OES4A@n3LsuF>F!kKQsPS{zPe*HD4 zV-5TGKU-95k~r1lP?_cly2hEBCazKvN2x_ZJiSkep%B_DJP}$)W#1y1qup-mE#tpG z_bSfM0j;S@PQs1G{kcr3I{P59Hq1e(yhYzihVe&Dd+rHFXx?UF@SRIQ@^`CG#0c3f? z{I5RXrt!lKO$UqVadeW-LgnQFnjn|wW~qBE$YC$z@6Tw=iEsI5UmIypKmVyww!!!D zPFotEPtJ@VR(m2$l!3%$#_y2x;0W=10&}8{$bZTf=0k+yQ3~h=FV{S8KyLGIR`$)q zh?QC>gu-6KLM+jWZA9>`m&P&dnF1&vm9!r^oG{7_tCOn#EUV?7^#BUN+!^m=KV_l{ z=l%c>X*$$nmS=-mL<}Sun-)bNngGAsxs)WUl++@CoL( zF?c9KL2-5jRbqmQG(Rxj3hR@Ak%_8;QjW82^=E zyKk%FAng~R+x64dtFpR$1DyP^n$nYomQ8{GQ5{|i`&gmH*2)0V>5*$r%q$GQ zV}|^qmjODDH;YFKQWf*ZBI}Lkf48S25cvGb(bviEPZb##A6_AZfVZIKI`BCb>Y=*)DhC<(rm6CK-`CM$sr8lhW(QW zt>3eKpN*B1(5Vzo03E z5jT+^G+Ze)uF_s%iv0MEbf_8GGF7pZ&X|XVt|-r_#LlOvNrdf@S%GU$fh^6D|C&`a zO9tQb18N>x962x9v|?_$;wJ0OH(bgS(x|> z@|3vtFlkJFd|!Se&akFPe9WzBm3-FZSaR=@84i%+QH%=^!h(58EJR2}#6uqKAr&gLQnShTRCp{4a_p;tE}xYAJl!m_aLMwa zYO27>*w>vCFh}m`&z3~-D0Fjh&)Bj?$$c46HX}{-^B*5-cXSa!m7|U1qv1$kA|k#l z&vXw)it;BW3@866C*m>9k|_x%#A_CMy$_8>{esrqpNFR8q!1~kQfM+J+D+-HF*lSX zP<(%p-wv>DDSUe(HSyWP#zVm!Y4^eYs14UZ>5Uo)?=PX&uRC&iAg)951RKrR4)iH0 zd9_3UFxhQjVWzz|-#}j0Z~#3N?I!ok&qI5n(8&!<*2VWBEBii0=0DTZyoPuJ0Iq$@uby&a4*Wed+|pXF@?!63GEW5qp1doPdn2rInXT|e#NeMJmit}B!HH+Vo{sM2PE5@ z%kQVY)4MB*LgUTGTiQww_a@B<7B22Yi?U&#rHHuiApy4zRvYZvGuL6!@rx2_y*3$b zMk6l=`7dSjhx1Z>#YfCv21X>Sfrx*K^DHM=Q*ay;{!T-SvF#nBCHWu1uK~Uu${#uC zcB_?-tvutiY_7Pmv>3l%Sy19nq99{1!Ezi4=8)~qWSTJCnp_iy(-VJ5$8w&QcI>GHd8^(XBwQ>>gs)=oGhU^}#~cFdSx#jr zW1R%`$Au?mPO{`jIAU{N0&_5W_(8OU((fv6-8d&DNn`Edo|10bql|S(Q18s)M-4q2 z{}dx9%gZ~_e;VOZGs*V=0^1ceu=V@G+?BmAw+Ch7<$QCw00%V|1g}go6yE@v9<=}T zw5OVn`4MyQnA5%j==Ok*w;Qk@1fkUTjff^E@(SU?n>7@whQM+dR1B$%?c!+dKfJ{Z z>?VZl3_F2;J}z!o$4*2Ep*EBgy0h<0u)lYAcCZlVo0Ep7)C(tV^ zWTa}nGz($&kQs5M+;zziVDFXxR%q~qF`z0Shv!-Xz4lW>@sg#AQ zVrTu*h+HvQ=nY&$d=!GK(Ji2`34uli+p{>58o#WimxA!NiGNpS2QNxN56#3nJ+aaf zxYU#N-M^)4qKWv_5w{)$wj%b_j9pQdjueZ>!dm)OO?kl<1(KV%CG z>5n9iauADu0zLbm^(SimvI^Yc+Q0K8ZOj?CQ4Q}pAHFU`T(e*qL2?lftNJKTu&rF$ zP5aK^`^MeZqdpagnEjDY-rw-rk&gq~;8?o(1@fQru}NwP1vhd@)@D79YLSU8`P6aa zvPx$WzPlz(_%vZZyvc@|v@%O4f8ROj1J@ep7mk5|lq{$1Q{-uGBY@oD!fJs%m3dFaUCo*}h>_WOG7?X%?IIxQv$G&9;3`FUsHS{ENKHysO zX+0~nCspaC^fZ|pn#8H-HC@g=>>O1_CNS2nehxGsvG-wvedK3;y&Q#RBa1A06Yv35 zk~2P&Zm~y@xzLjbjTXUNemtgs0pFQy!M9QRMj)-Urd? z-%j;~?ZBL!@WTuv`Q=wZIH)QQjJ~>g>+=z{8A^0PM6CZ24=k7+SM8`FqK1`Md!hJJ1LVp& zlspS$K=P(}y{Tdh5=BFD%ze2%T0$sUjVy+%LD$ zFZ@6^Ic9Y!?MD{dGn@VTY{MMq0<0yPxS$i#Jr2Z2LB5#82Hdu`zCVjwb~! ziF|SewTi^4i^T52Xn#GIJCha#Fv3jZ#%PyQP7!_i@dX#zu4P-Bz^RD+JHb*(D`3FGArs(TZtrUoc*`{8C&24xA)GzWNi3I7fB8TnHziI z-t=7l9?Dm5WL*_r3+n2+Dae_>++c|C=n|KdOrCj{`Zf z*#+|@@Kj7jFCc=Yl}|G&Q3PCQIg9OU-Bv+PQcahF%m%iLu3p5WZ>|H`BPgEw81pC9 zp!LY(rX07P@a9F0pOH=x{`Ne#!K2p4@|R4~tdccamVpQ80%Jn@aSsjlU~$JLGoDwBs2K<|?0V`NidU7pkofOh6dAVf%f zV2`{WCxtwb;In?YyZ8sqK>XJYsVSXUY3-jaJIhOVjBlM{-K5*!z)rURe!`h^!Krw5 z(zaD_wkd_i?+2z|ieD11IpEya5qRc02GCmBe%6xY$5 zGLSsxEJ9dun6@I-7%otn5cL`9fQPHi>e_s~dB%2On>NAJv^ZRD(mZ55B0+ufz1p^D@<$+(KsU$Or9~Lv+ zM{=h4Zsa%>&a78Eu=>i(+Hf~6%LtD^lWFa1AC<28Gv<9{PA(!c?Q77ZMV~B4r{$Y7 zkcXmJML#*$P}|UmU>MrNLWOZb46W)zpU7%;#zOKsemFY`-p-p*UC^~@ZvDUkcp(30 zaRfHG!<5pYZ264X37_Z{eQEQT4&fgMSDSPQcf|3^u_nFsv;;mckc-6hy@oD7dCUEX z_#hcDuN*Zn{-mcqYg2m0Fl}kiKs5opjZRPOb3_**BZ6&+HU4<(giOh(;8DZKuA`{J zn3i=Zq&FMZ6Mhpbq$Xqy)+y5b91b&Mu5F>=8kfewe5|>y{Y5~oF&^m+s?;LtJgw=9 z4S+baO#-C@`=m&+o79oYgt+`SQ=aB!iiV{>Fnd}<<5?d3qAMFa-_D060!oToR=Iha zO{RGg*a=Sl6-JE3hf7>y=NAvqa!n#`zxAN=bb2Aa2v>ij6m`O4L$7tfWlbRx_VXD2 z71)6jpA4}3r$^>l`)lt^tdX|kt0cTJT-BsIaT1`j?TuNI`4&#X;W;=d%pUQRc@N|KMmQIu<&kL!T@5;JR}Ud*w9o?sot) zanyfz+IY2QU}l49IqIjjl`yQgS`N7KhT5I#6^9Yn9ase)hG$&C>rq5pSd%DbXT1y$ zUNW$m>m97`F{31JA%AM`o`1Zm=gsh*D+XguhsrFkas&IA0Slji1V!Ur|f4hcmUwsOTZquBxL~(xyJkxV}t4%ZShvu_0nl(*!z+o z@5c_jSOT!&(?J}N=F@@DDwc>ACg4`Io9xtL3G{v4QINZ-AI<)vszCGn#T%7v?H_as zlO7yxJZsi>j#+-O>)JyS^S8{s)N{`Fms>waPGrL1oufBHI2Mv;{@5pYZTZ-`p>41? zq|V8P`>V(WvtI<7L;V45kh#J7Q`oF@P4>MTDPfrMMgWS8sb#8FmF1=QlGmVANKke_ z=l5*}jn5?AeWytE`@}god;MKRX0^sCJqF45P3iK2s~oqNMY6(dn=fTJdL4%yGY)kC zp-I%0pT^&{uCtRWfv_Uj{3ri|PSYla;0n4c0~~<8q@Kge?IkGgt1>reBLC?Z$v2VU zi4Z+9z&T18A6#^4uZd)(3Z+6=9-25#9eU@4+Brq6X|jT$;X>hCJ7$KZvw2PHye`u_ zF>%)L9Oygg3|;f0TK ze&5hf4)Vah51I+vguF>MosjW@{%eiUJNN6TmJu5)sLNP<6|l*Ei~QB)?H{w`qeN(D zf7oyJmj^@mB$GvaS0{1t{b;2EVJ)7Fl5mXxe9#as$<(L5=KB(~BZ0$iVyFnsEjr#W zZ9(0*!Q6=1y@~5GZ`ueThDH;Ngxd2yas|1$R|EPFX-VQ`aOE9+2_>m1uiv%ulFS;dGypbmNVz>o!Z3 zE3dEjnXj`5IK8PSy7HZ419^NzIhXM|AU^G3)0ucG`t8{Db6p(!cbBqQhf^-tzc=EB zz9TsP+MJ|f@wuf(FxueX>RRk30OJ<(8;!e(6D+X~maBZ0SJ=ZqbiUL#co%aJpZ@;W zIaSHcz?J75D##-U{$<2KRkb`;!)DX61rtOXO2W1&qNqxrrUhLcd;6;xA~0ZypE3dmExM=T;5Yh#nE$aS{q5e z1nl1#p_<`xM*yO?>P8)mnE}6>RYi?P4$OPo!gR&%j z?3z#iqI@*rw033s+T0@LXie%>k#8cGOGwe+s5_Gx{g$L~B6SNC^4kxwvj@MJc)&i^!uTAiahi)AQ#SO_{MHSD z7LBta@b@4;P|7s}r5y#W=*DSjN|6vnKoWa9x``o(lhq_&7zb>2o(3_j7P!xFSWYST zWIR@WIp|T=Cr&?JM<~k~bnb&P6}~tjEf=3YogELUy-|T-8Bjnmt!9%N&21N7o@iYQ zc5>Y*M4fBEH~%T)N?0qmkosz0y#Ba{a5=0bMV{Y_@greh5!n;oQEvG!b&!%9FI>^k z6Q!9f*)+G%Y$khy9jyMj!O(z$C=wQf6y2RI6r>%Q?f%8Y?LTu;IDY(3ETtZ&?ffAX zOVto88OEv9D!m-jGniNT|sroi#L5c z)t%c4iduXCADE&7_a1$C%l>zrqU=VD^u|hWEe}7G4C!O%d{%|u|4Nx7kGe}OHp7OE zKmPih;2P%DBr~FlB&~Dq+x4=#_6;=xC%htPawYgbGPyXWDl@D9N*{D=++JqVqtZ*p zBULYyr6unGC5!s3JZW8)zt@PV)390W4BVc*4X1HUEI=7L&7^MwpgJ~kFKCm+t_J}1 zqiQlFPTk)lm_5xO#cnIIt%C+oxr}cw+1mjK_(WEdU`yd{TlK!m7i5PcLe%Tly|q|P zf#vt*T)|E=h=IUA1mIEe}0a%cZc2hLRUm)%yXudWAL|B_uzK10;wh zu&MBO1vh!D(%W0n08k}VbE?+zK=#xS?mX=-H2uA>V58YiE7uT6d9Ued&@k)x6k~o& z8t`>aJKqCtVYuDJPSX3J2%{Wr}z7)&TRk zH=sEK;SFITM4bQg$kJ!fq%&{+ds!{^3zVKW&)NAroZY_@+JhIL=plEb89Wg<8JS&q7|pmTH%o9Cb&0tNnHOJmaO`kvV;wr zDnz2jk+#gY{tu-`%#GGQbb?9HPzxn1CLGkYS6k7adNPZKT9deY^vD=X_4W*Lw3w{= z@a9NrOFon;G;x`ru?Sy;b%@L_3SZ0guE*Xo5xf4=u=FpM&&4QVC|L~L59+;PL&jGm zIpF>I=sj0rRV+t+Cdv%S{JaTuROibi^k(C>WAz)sr}XDI&{9|+Yx-GS*JF+_vWUp!l@p4Wk~>q}xsM$%devSsU{>Npthj>8mRTIm6m;CLvVh&jXq0(@E(BAM()7=q~DAv1m`Z}Q{* zkEyTzi|UKI24^ zndudGT;VpH{dz}z@<`aMkJB-A{UOymnwETAIV0E4mTUbnUHcu?`QesI@~NDaqX~ed zZ}pwsxf}kE(wC^m&T5`NNSx#IUz7spm@qNF==)lXkdSjiAu6dNY8Xi8azOv zpar^Z28HiX>;{4qi}#72mk7O4e2%^rhIDa}QgIX7@SETe;eDdwAUM;VF>m57;UL(f z_HV=S>d%3WpNZ#_&W8FDNGSEoVTfKS!F-ycb^OBa`FUwCi~(bR;M*Hr$pw4ljXm zbXyzSZ3&V(z;tP2cZ$c5Un19(SZ=8m9=6ePMA4{IXUR^`$5O!hPNTKyYxDF#Q|Dyh z-0AaYZq-j}lcX2({$eOz{+LfY*6I*9bXt(c?Yp6RFI;~XnFr~|)Q}}aTeypLiS_jg zQ*Ts{N9uy~a`80- znzT3S0voI)L||Fy#0eZ3^xMcHi@=h zKg@eFO$~lS)>ggL`|%&*pCw89S1PYW43~C(J%%EmM(g;Z$Odgd-=;`Il8|rT0H+f7 zE|N9@+Cc0J_cQIx*G(Tr3Zx9Afl3dGhmd3an?whq^GnaIDCZze6K zTS%%iGV+Y!A(o^5qiOH_WDLa{&R9DZtfgAHBff1Luyk4+Iwl2^DHq`96Z%pV*l6Cu zL$s8k8hQ2ixz{-6#Vn2n)|65t`Pz# z5Xnnm21tAJCNms}-pIrPJwF>^7sCzYC;*eFnZ>)mwQfTN+&%6(a;ZZ4ITsQ;&nz3bGMVw6GQw$ed}XMVm${p z)l);9;c2n+8Y8?ss}5QvUvynb_S(2{nI%&@<qD3U>fH0`raTqau+jqhU`dJNUydd>Tiw}VL^$`Vr@o|%%<_s+}Hz0oAyzIVf` zT|7zhADX)Bh~80}d0cKo2@OSe$%&{ySet2DEU#MILgFTN ztiL`G?wY3yrO?~bL>mKs?=29XrEU`&q&)5*YH98$jo-E~neYYV>`e0hLu^O9SbtR2 zWP7!dfqjn3kDY_x?xSlb{#;(QW9@FTs4?NKviBU4;sE=Xjv$I1M6#X>Zw4 zI{3_B*TG%O6mnaMv+opla^4^%`Cz;_Q0ysXbXggmyD}6)LB&^j6xG-v>h}^*+g0_IBnWI$A8|TTyWTS1i;fZnT$re$urIke zBJB$rag3>*2xW0rv!DE$+|DjYm?ELV<2!kFAWLSt?h7%#HY4muH>BPY1P=tNyE$qC99xJ&z?#k4Q2 znA9zI4}V1CTDKO5i($%ul!{d{D?A%6x-n#Ca*!=B6KWv$u~mkk4W4C~NGguFmjo?O zUDDhf5hX}YCos%Zc1{HFm6`~@oeQeer62`DfuQ6lR~H&}Q1qZh8jLnH``ubSmZYVG zz?jnM{sNk(?Y@(0AO#jdiYNa@L4H+@HuqMnj7x@Enc&9Jlr(s`JzpduD11ge$FXzY zMp`oe`?Xyl6=Hd~m>>9S-EBm6xc4`_c8&>Nvkmpa`D^(aKQQnckp_}YmIJM?nR_Rq zqpGq|5(MyU{AP$*(jqv(>w6Zp6l%~9Z-O~Cx}}t6C{3??{FWiYpIlaO&(`!bQEA^r z_G+@9V34{T*+Q6QQD7K}!Z%MV_oS!%4LoZ`ugh>d<#G7=Udhr_?537rNsRhVMMmy1 z43NZz5p?`e9>-Ga7z_x&zXbWEnw9#IR`k0644?Fx2{e#P28>_uf`xeH+%mof=*aou zN5dP`>n@t0-TkkdR5o9GgwcPZTFSu9L=l`w;#g?qjaqZ`$N^OQ@cIBqGSH9jW$2Ws zL^MCCav$AQWRx5om+>0)I?$NfSxyDW!i(@0esK66yN-kfFyez%#j!cqE?WaR2#|oQ zN1yDB`uzn_Y*mCTTr+0&FGoo+^?N;K4JvBydB?Kp8Qs+)RxsbrBcVYf2Vp1X z$YkNu#*0*3my$kY4EAKTH1B}^eKDxT%r*SxQda^M5er$|bvO)~%4$=CFNv5soi0rF?FuSmcv58uw$ zN1HN1LP*q4;)AWpx&;XaYxdmq|m^;p|AxY1uV~Xi58(j?HdW$dS>ZxtVz@IRvn;upgKxzk7k~XH_?pe zPGaYVuN(cSs@;M^fwG|OrnQ?CpR&^vCjs?mp8S!y>zv)co6r({9U=H_Xi*Za_=D$i zC<0(ShKU*kdH9(a5~&}HIhmK!xZoBgm1^W>G00wI0Q(J@@p#vqace9IiWgl?|05DF zCc$+%VK=9e%2Y}xIY3}-d^G8*De`}JqA^H@_|$@Dgvog=@A8&tms3r75puCRFOo5H z#UI@01FQ|?oW1eAdSi@89n^9hT>d=1(CK(P>&?%VCEm*>0%~;cRAat=SvlG(ny18m zUc|4(j-ZCwlHTVWXOqxlPQ*b?W;5|a3ut~vxtP41V4fK1WK2xwqy*MID&3@b=JE15 zh8S~|@%4;|U|2D2EyC&&Cm(j})u1uhC){Uq&kT7=NFOu38?P5Us+#8%F2;e_(F$9F zf9IlA`x*_jfbV?p+amPi4_G0Sj}en-hHbw$wLs;-KF(n?<*}{?Cpi3Fkb1a9wl6W& zTH#kqa$b|)_@XRAFoaADT-^_L!a7KDE;SKYC|>X(JeTZT&_WE>#lc_f2MYiI`|$x8 zk@63;@OWLYk7v$O3zmXZz2Gx1=vopU77;=4`KW`uaSrDy(T^H0%eyLj)^a{t6gR+m z*tw6^h+-qRQ$u@SZY63i5u8Q&_QNE;W7|0Y-eo(@-~qQupoF*tx6_Wunw`>n2j@&b zo1$$eZVACw_{Qc4;5rWCO8>eO9HWjL_E8sm8Z`d#w)Z#|yJ#-*h2N;{#I#@%X zKo`G{8eT@I$ljlcQ9#F}JW%E%jQlu^x>_=wqBLU-eCC z5@RSF9fHo5A6^~$2V`*d^bx5PMtKr(qP#4-vZji+JDuaKoXErlZ@81Wln zQ1CeqAAL0xW3EoG2FrUZG&83&l!J|h4{+|Q>!-Phl1{!b4L2>}I8g1) zR@}6z-e`Qb!$chR@!Q9Do7=A)HC&MQ^c8VJ#JV>qq%oQ4VX~|#0oT|6qgeL0i;~tIlvo0nQW~<=gTy?s~$jB&`B<@ED#VK?qONTj1Lwr=lUfn71 z%V+gwVmM|_kcpY8wflIjacr?ju%_-d6KP|^K=AV-Au=gG;&_+@P6v1kz@)WUUI4opF&dt6Js;K$~>R{CeT3srWMmw(R9s` zDnp9XKzg17$MWV>u82quPSf8fyl4vU;R2G>QFNjcw&LV0*=GgmC0@mU}3!1lossn3AG!t|3 zYjseStpX!BWewEE_^4nwB}$#dGG(sEQN6U~ly}DX_yc*9=PY!JVx|xI0@a14aAXH* zAce|v#b@dj{c_jS@n0Qj>CcWoG$2fVVn88SyqJ|a&DHGbB<>%w%$#TX8%N+>gsyJb zQ^%FGZ?BnyJ*yEqw3H?6?ysjnK01HyMXDa>9zM=SQ7X?x0jeb2ibD{rYx9WE9x4A8UgP6aU|3MhwQQyjC5zf0|B)RaO z!niz`Q81KVBvN@pYKvb*)WQW|FK+z4O?B8Y`h);AS6q-5 z!iAWlb*j|nECCuXR-)Co(E%X{Uso^6=+y%D4t3i?z?Vr?3UG7z^j-7UOkg#_cvG@( zCdtPKcV&bK<9~i3ltP}bIx|HoMY!6Wx{*_=mlEkBegbTZ0u;YN3jdm=9#azM21gn%2U`z9yAPwb3hDa!& z!aGfxQpUoQ?=aHkQrDqa8XCk52q(J7=#iMej*D0t#bD6^@gC-#xhAQVicCJ<2h-{x z6Zul=>kA4Er}=@N#V^z?1z3`Y2!AePCDgte;U{=>9%y^)$p<+nx=CP-ciPRl^=y2w z7hzQw@zL5B%9hEixZ2_h{M}t@bd~@$W}&IVE|+F}_i>aF8#m%b<+|0nBxdo!I}_wj zbJbCh`9~TNsb-37DY5&1rnDEPkHXqMSl21j4l??*=Ks&b#?PCRMaOvQN4`Ve=#<*T zjdxnyxiyKgF)Frs?n(RZZA(>|-_b`Q`+tg~g=AfR6?QiJqNxR$nb*6IU+)gRjKsnn z*wu0dc1j6l=)Z4cB>ex?XK#?Lxb$|ipOntGijuy6qEe8a>A(A!YK%z3tB4F0%N z5w-kc?bX^-nM=mb<7guX-W%_hQZ1!!F5;f9wnx%pgdJN_pMlD`35DayT>n~c3bTD9 z53HwVb;!(fgG|l5z82(>7?2)8VKsceDQv&K`ZIonv0frB7Yw+1#4o6x3@zx$6oM(WsYt>&z5cp}~PZ%=MX z%vP}SO`AHHc9koCt;?63;^j{lx4+pH<|F&GHmeIT$MHtYqb+J54QwvN&FMY+$e1sT zF?c^8$T-`P&<}ohdKw@EEnd>`WN))lz6>MUNon%9ek$-2u#y>~9I*4kU-DJ=c*|r( z*l8Ia(DCR_&hyIbUMkqo_;WCqQ_KBeQ9<6g%)v)?do#HASet+VK_?DgC5M(CQVpkb zXKSaZKWk+|jna4P4cup)@r(pK>}V!*y18C%aHYHVHsH(ybNuSwfh`Xr`G0bF7CUj1 zMsv--`MW2y*!PwyD~K?f_}Sx@`gdK96{Y0S(Y5<^Dhwf!MLueZ;cKA=lSi*y)g2gJ zXpJ6G^|{W{EG&w;)%CMvNCT{Vy}UV}M5-kudW`qY8u;p$CB2W+^`7atG0)zB7(L$O z&=<=A{3`MZ&MdFVDNAazpOV$uBtBeIaol)>cR2Cw{j>BWkIsIbcklmxt(?{yct7@dYE7Eey&4GVVB*BP5h=9qs_3Zdqg3Ck^23Jn_80~lG$?< zTwD3&#eMctH=C!d97uAKbZUv75ig7yP=Z|)r6KujY<5>^d4C*K77i#%Xp93 z01x-Qho7F~6B*@sm&YeX-C>Sj8u5*~UKMEc5`V1f-|5idbDJJ9TdyDhVmDwJzVqj1 ztN|UZI#Gn9L)4flxTPhy7@!%mx&ET$G3&v94hfP4F&OUVfPh zv!1F*=|J^G@|M}oN6fDg)i0u3%~*B+kzT(dx&CN(cI7Kl;HyjF7^B#vdKzMP?QgS$ z+Z4Klen=Jb(jz`MupqZ^os-+WrN#`rj>aMo-t)s|tcI6F{gRvvO(`;Cv|fcof2muG z7Zf29{$I(OgW*wB1d1gkWKa2cg#D_b1(e1mpxQk71b7=Ew_0}4T>rQqj(r;DKE)60 zr&^+O{Mfo``MK$z-i2*k4;;{pa@;Lt`zzEaH!XZyuv|ejJX6!NOgFl}cNPcdm)vV_ z$ZDMyBRG{c|cdA5%~Q^9wXepEN`s0|hTNw^15Kd>#L!uyMr;^SUiuMV_vW{fzJ zxB3NO`E%#RidUA8wWUXo@UZFoDf=BQdG`mm9 z^zCoF*+jOYT5yli=}J8o*Jc73{HBXO)dFoG%DI6jU$*$4Zs?3iPK>QMw(66iO<2|b zSlBu-MxphbPFt1Vz$X5QI)T+cN^63BE2+2>F^)ey-%NlZRk@<1MAtpi8$H10u$0D! zNY+awNV);Jh^`&Dc0&GYF8~5~w5U2aFrcNA+1a2r=mC9Ed?M6M4BSEx-M%)2hSWuy zX7u3ZK{bqj8zvbcZXisshH??*qSABlYrn>5EWqV>UzXb^j;n$zsQ zYiSV^^ZbAsxr;E|Hf~c8XgQ`JWd4EsVb&mA;N%&a`8XDEBliAg;#+>uB60`AMH0DS z1Bbc)l;#z?wq9aviiSHv4CwINBV;vZUH=7B!M`IRbF@Z!na=lkmp4idx*Y6=0{*?X zw-ck^P_gW+H1IKNbOvZIt}N%wC}HC=f;;&pKAmU#zT%45MS8pe8;HDI%0Oh73-+{6_S-%{C1r~fO%sv z)ZE=KyT&Ek_vPfXhJP{rz|WLlXl~fei!sE}TgLE=3gIXymEY7(v1gV_FD_5+5Y}x0 zr&i(1i@^=@WH4%)VVy|-75`+dD1(CL$(#5*je6Gvbbr!Et#9KKJ}bIxb9Do$Jm_`y+F4y-J#(`7_F>lHBqW}fea-Dh0nPBy75i(fF?$l6vKk`?DJ)*l1)ayBi!Utgy!OA-YPI0EpXf z#@eD89LNq)XnmN7pBk9sIeM6RFOFVe+8523A^&`3uupwscl&X#E4x@k#wUr%Ah}^8 zA&KtI)jb+N7O;?YL=`Ryw1KE*mkj`3B}5q}BGM}w&KQRMnrO52ZMSO7SP=?Azh9%^ zBs|0#%k7s$U|UbgvVb~eF6MC>z@NgSgzSo)O8n-+l#Vyu2`kDyUi@c%`q^1_tb+K7o^@l?VI?XE=fg|3LXyUMe$>|~eJFOR%_t_EmAcnAzfK=}<> zy)ObCBuJvXb>C)5vwxYpqwc5~spGZ{Bh9MSY9IT|%LD}rE1z^5eUFi&VVK0} za9C`7ZA)J|l*^^|`|)m@aUe{Bpr7tc?Hc^} zsoujPs~?%WtRx7_uBw}sT8T*tFP+y$nxlgLg+i$!#c$;H614nx%m&m^s6%M-MJ z4Q|LA#c#2%3NQfu*<_6L^kw~@kKDa9(z-EYrT-EW#WI1$75KK!hLF1~Y>BX7L_Z5O zc)MjO3AMv8g97Sr64za`8MiBGn(I^S{tTPWd05~HB#X-W!B8bS3}@4OA*C7~Z%0PB zACGIx@nni_PU3+5yWF4fRc!S=NkzR#@sC??H1%fy?~QXFvJUiFD*J|YPOi}OXT}FC zg+1cM>oW(nRBT0^P}e5`D3TTrxvwUCPe75qStkKNfh+mMZ)mTEbXZ2n*pzzQ_2!>> zQYXm8%-r4Sb#cyz1d~}cy-1UoU4EJyS0FRW4%p6=Hc=($0U>KKY;-xHy z#!Ou+mQD5kl8~^?Rta&8`wd}KjB;WV@(Qd)T;k(_IDC4&P)(A7!qMF+#3Yd zSom%9#J-oXf4HxNXGb4(VoUlC*m)PwF`w4q6SDS5E(ph*CD8jfJ&;Oo!4P+m_e$B|T=8d9mI_&KekS%To zD|x&5onDs0$=Zs9zgbS|XSB&d-s?8}Xs;g3s2GHq$0qc^y9k0&>@X7BTSWn}@{$ z?OLsL#dJrL{+-;6J;9|r5N`*r_?>*m!IMJmilTd&L%-~9E`O#{;$aon0n@sI-E+Rn z8O3{=gnoQ&uvw@CSM-&T2JRt_KIls`7Ck6=8uwxG{euYjJj_rw78bWisqK)s9S7H% z*%=(hubB2_9wUu>S-)S_>D>{>k!d$7W%HU>{Ue^yiEZ@VDmdJI0$pnhng=eWqt%Po z_z63PI&DG3m8O}j&`5xADr~ ztFTo-0k_Mo;suO^XiV73>!xH0*H=6Wpy-qcMNXWC>whap0E?%#VjrCC1-1-wso~y< zB11lbqj>B|F>{^~F=f1x1kFHdbu#SFvnKb~>01#R341n1TxQ*Vn$N=m%3ND*yei(V`dj8!@ww_|$5rKeNl^4zu-x#Zx5(PJ(LMd+yEi5Bf`?VUkq#*B)VVa6yh{|+y2J6B;@C>PXW;+@DQmoXXhT7{unMaILB0sCMqdnlrkcasQ#BpI$zk-hh0ZRr<4x)m}-Bv0n zXNGpXjbwnIKfaQSGclBPm8^dat48>qk-d0O>RbhCBo+@=K)WybP1Z|o%?qRIq8+KMd$nT7?~tIQm^Vy5V{&w1_Rj})2fA@-TjPu$ zK7c0g7#U=i`bfRVR85Ltu$Hpam4(^f?<+Aoow@r4J%TSLaV^U3zzKM0csgwkpra^P zx1vmSN*br_c_+OTZzK2S%bU93tHrJJorj9U$<1nBTVYRTJ9yy-bQpZWV=>8+avQG9 zm&zRA^q12$l0vrZ&g8d+Pt>dob)Tpy!k>@!3FGC1Ew#QpqTu^{SZl$@QzStl2O)^I zph%yf$geW@)ir)ar9FTr7twwAm?lOQQhBF!z6y2_%S8;-tHZ^-qjDcfOX1mI z%0G)a(IVe06J=>fCX(aZn7>lHHIwo7Wi3MS-?axwbN;KsTP-2&txc0Aa1z$8Z3LxMr@_8$|yxR1AiB~y}tsEVG|Ch5?gczVfJ(ft;=WycWeET!kJYWx$|U-!Ln2o_x#ttI zJm*R2L7(3|K_z?1-4^$O0o*=6ZG}Zx$`;4j*lQL94iWq__gTOi#X>!?)UsM9k?gKh zonWndwNRx>92U)e9Jz;LY8knkPqVK`F#h^*A|^q<#r>4i>{ZlnBrE8&!|!MVoG5ub zsj*N#tTQP4>+-qL_>QK79jC{mp*|-G_tK^Xsj94ZTl=5?zPtpX>&LC2o=A~0;^fY5 zO{?AN?@+pxBj%kW+$xFK%VqM6EQUq6nE7OBF?Sfj6NUO!3c;5tih4|$^tj{%qGBUc z*IruK-Xxop{-f5DEy@D26o-Jz=&33d5@jUQ?|_G+0U8!ftqvUi%p^XDDN9U|SN4lfKhgnO z#r@Mvg0L)pI7%;&RItYnN4t{Fri_YTdgk}EixX{Dzd6*ejqgQf)4Y$o5z*Hhg)gj? zHPVdXgZG(5#$|FRq2g!(fe}E<$C3eG03uQJFGpWkReR~q7;CbCAHz`L+v|P?2TWZ| z%GV%F(VOhwxvBjP_0{&^Mt|$FIap$GwY?9$;1SCjm(z`MPH%G5*O!!9T>n(Mf$Lw3 zLYcnJrRo}~M$caa8gao0t2IXwFbeTI?>|=%M38zEH{RD=vL((Foh0oe)4c#o%#Uj6 ze<_dSqwfZY8U{kHsj`}wlmnkFVB&U^#2-bDn7(1)#)+GT92^-LY*-IJ9yR@gD-K!z zS@~o5Ap)TxXNCQkr{E;ZrIXnNd22kb4TRA2FylqgE)tJzM)J^4WAdW4D%3S zRGnMnjLPlEZB*ZeLM<5P@l#@sm!5SKq)7UIc*dO`*Ur5ucI#((_=^J<}+24`FMe8<}GRG`Ok#blF=9O~#xb~6L0jVA5^YjvEo$xWm z7-9dj)vpQv+q!V;sP!^p>z%f|=TUXq5oDd7;*g&pMsiZ1IpdT2?gu#l);7>)t4RwFIH)KTTBKQ{^Q*8UDrE66ULq-k8wb zvdLyIMc`E^J)profwfS8oeLN9s|{@#7k4)484_;@^GG7RE1zF4YX+^t*A^tVw_k>f zzO$zcRcItrVryKHr)lR}kO#f`{Uif^Af7#~>Pz)^@c2g^r&>u?YkEb~yX@pw7==tT ziNfTb$d>RRUV<%9zry_;UB~IiLP~~za)~%iI8kaT_`zav)XSY!fdw&d^!K+XgVH*1>TtK^N| zR)ara6u#&Bm|Eo|jWSt;xQ83JT_yDL5i&(_o~R&|hkBfYyIPiX6ov7wAScleULSrq zay!0hgMnXU6*YQ$MY)W2)VQA=4=le@yqPkAH)E1Tm2Sm-DaH@I%dV$Yt=22Xr|7h1 zYIyXjn{^K5=+Pv&a06eL*^jWV z7(E7NU$=6zHw+O!Jc)ota1g&~Wa4n(+B7r4&UTD;hnvH~ohgIh6}K9r$-onG$!{5Z z2-w_T1J4s1MS}mC!@VfG=o~kTLChqtF58KfxWj(f;C6Ng3)nB%w{7f3t`Azvr?{y$ zUw$FVQDb!Mnaa^p?O3SN*cjL5Br^7koBXhcs3gFd{y2I|1iIohZ?Uv&rCKSdU6+Oz zH0qxV&a;_64~6y^M5n_{516iCh;ctq{U|An@Cye9Lf6qTNM)c)Sn-w@?!&ES$KU>x zab(1x*P@GgJ1c4gu>RY8OTnU&hGc{Kc81dYt#?gvd8G(XjqQQgwK9|^8sK3CjW-h5lZ6r%^v3$#%!{T4!2)O9sxAB;QoHR^P*{jRj+m?u8 zdmJc|jDN;z?DXZ49t;zpoZ&x8n&>o+&CIS>d5fRtQ?pq$G2T7*uX))erVG z$mTBOTraN5{Jllqtw)O)0{8-rs-8cETv%TN>E3_E*$&-%vu-PONi%9)lK&X%FKZF%w`okr8;_%)v#P_F3W{{%9U;WfGms?8n(Y_vBxvxzN z33I1n^MGHp5Oa3azf{|Q_XU5~r_02}_SC4Y<|{liaAiMSANvI-IxD^6&k@Dm(h~Km zczd$!J8`Y|i%}kK`yZQhr+vEeV0AxNvA_cn0}JyQN@T$YgTUP$$_Jqe5?>~W35J!R zPrTu^pPoAG`r=)?g{LKdU0)VZX9GR3_&K)pcJegOF^FAClW4u|PEXLiKGC`tje_si<^dz)cD9#W?FlDNBzRyC4?gaaZXw~=V4*2>yC zqaXEn2016dpp*RG&^2~c!?$%8>(2{0d+W3SXKzgrVZF{7`tNk9A6nqq89Zaee~r>k zqOE4_?w2^d86hpL=p+Eci#FG+MR6Cp%hSx_zX3@3{w*%c#``bJaD(^k1z{Xw%3Jf{>gb#xmocUm zq4I|rUe61X_M=~MSxTaBB!;r0=%FAjODV7_r%w0Nx2Y0Z<67@x#jD2@b19hO3s})N ze+ILnLg(%7`MBagznr-Vp!AWsrsYpJjcm{ilb?D2c7p&&HZY*K_q-~d;sp2faj@~pF#Ulo?1h) z-u;wb@VK9uM9XcV(0l&g=FL=&4zS3O%djGqcZ6LFsXZJIvlQBeo2mq~;PRLBb`PLW zJ#HAFB*D8=vMvb2ole!jF=Ju^Y5qAecB$3-nKZOZO+@ILvM1Iw?e^T~(NYgf0iqY| zF=`L7*2##pobo#3CVZ`E1;A9`UAYx0$VST|UdYn`c7=Myt84V43j`R;Kh+c{o^H+tLq3k3$-Kh-?RijO>K!cw`XNSqqWRPKX+*ccy8^EAqLL|U^$@D`H@=*K z!TmxcK?yy%T$W$21iVsk(B@Z$ZvbA?ip{j6?A6{g6_bsRva^Q%e5g|!%cEop*R|-Y z)3w1rSd&&FpK);IHG4Ic69(v#X|@(miIv6N7B|v%Zr>0*MJ1f?(r+767V@6Ab>54e z-n5d%C;n>01w=ql5vE=ZD*Z^+sD$o&ZFbR0%>@S?CI;$MNrUq3PlTG#@Wz7{z21+9 zHptko(WLaWFEQ6k9}Uu zHq~+Wh7<|3;B)R65dfwXY}Hl2WS$^M>UuY0KK!?q^MQ&`*X`uN$sbQp+}^=Zm=_P& zt3h#oyb8bdq0|?u^QHf63}^9}$-4&fsTPe%?qYJHM#XS5Ufre%lGnVI9epgN{OtbR zrt_Tf)HR-HP~mY5w%2ay@vvj&~cUXy!+(j{J_WnQFjXPLHvXe=hgETlfg^ z2v~+asbcZmObm}&cUqL)S_#D4t8&R!x6eKMv8w-hqkA@OH!RQp`R!t)Wlz(ECB)jK zTH{|ac7b0ukA*@l$SHFvObmBIj@_43Un?m z`}K3}uO|@nGx%5d{e&;Z&_L{I^9a^|eLFugoLnO~a(QB{)Zy9HXu!#v4m`iAgOIgw zQvxM{qdc;hbc@e&yHuJ%RhMCY?(?CLoZ4@GYZ)|>UyK@jYAsBQtd^Mz;tE5iJ zx>O0TZ#Ap|9(iX&Vtf3=$#ZeH>g8Vg^6&lw}q;@ zr)UEv(D2VV*E3F8N{-11Bth)mBHb_XDbj2jtPyfzFAQ5`*_XKCwp^BRli|cY^&Iz) z#ly<~GDa6XtkE5~`8gAFKTOzS7>MVv+tQ=kb-FgBAPI>kug9TAVT%VkVDsrU_|ebt zC&Pe2dC%&=51*BqZGJoyGBzd!qF|d{-j(#0X%ZWmX}SP`1D=lO z(Zx3+Lq@_-53e`#-qa1g2Ds<54=P#Q{xg}1T2cC$xxm@KfE*-mv-TFp!IW(+nESnu zOJVsCA`*emGAi$t2}R(OY)pdjIFee=g*i3VftjPjB1Y$_=B$65_3n#UcD0H^_{uxC zSqR&`Y72Rp7R&t!$tXUzVPxY9d;Tx`Rf^$*izktRtxQ}{iEq6G$$KvXoo|J7a0gIN zzW2V%!u)V?)46{S3_AElXhWD0)xgs{5`jFiyGsIKcuernp+Z)1a^4etT|7cyMJhCJ zLgkP}37QADN29eHud=bW0dJUPwlw5ovGP7J#c5-CYs5RFZ4NX9P05ZKU6A2pF{J0y&f-=Xs^D1 zo0S(l;OhER_!v!7E6M&?X%msXB7RB-rGFV4B_OFo=_RS=BMK67-zRmw?ss7QJKAvP zA*4%H_#B@EIq1t-6tDALbJig3J}SZJ6i5|%eZFXr&L381FY>Z5C7H7V&^NV6M}g9F zaUcws&qH~5uqvqdY?FPl%Z!Hp%Acf7ICzhI* zVR7|a1(Zd^RywMFupH92W}bpXdNA-2?%AMhY~R%h>+)}QDFfU!K_+d4ak~b`dRBD! zt0B#WziKsSXn;WSFbCH1PCfpfv5X*5Wm$wntt{JW(&P9hq&mqvZ) zd(meuOAg6u39k0i#D1&%>(G#)o*EDVp56OjgFg((Zg~n2dq2OXrx}V*?Lmy^eBujL zB_;|1#F0XPA791)-CN$?zk_IKNzx-y_Wbf7I$S^;DHC8=wW-Xy+8aX|wZX%2P@>C$u-AWcJ>j$+b1WN|~ql!^&ARw|tRYz1%Jz?0r-_Uqj{`jV;n{oM3&=N=_3nJ@^0*mnh#gtC z!P-D%n;OKQC~@O7q>xo$@cm0&&I>3|zaH``&NX}TXI1WXh1+vmHt6+U(9%RU$EgTR z-L$^OV`1|4(x8^Mq;d*~4zhfj`6ah;dnrpBPNEFK!=BvPJ`*2($m$TNQiEsznfxu6 zuVde?vy!8#W zjz8R`a<5GE^88S3vi)j^V$;oHzQ%ye^#`3}{uFdtOgX{aerU2H-=@wJ7wvzC95@9^ zs~s{AB#nM&{}JF+5ICmWb>sZP%;g8gw_RGPXXtBsAou*urY#>ro-3M)8VK}?ZkP=6 zyDNXiVvPqXvP}xAb8ojMr!EcAce?I)zcK5|06171xa$A&l0&z@%aP zh2eaRr)RY&lR!)V-IMl)svYUCWjM2DF|2tU!o1vN^M^UV)0Z)+0b7;euwBY&*l>IG zX4~T?Ggeg2_vM7fC%ZsHji)5vpjT`hU+(rfHo(*Gx9BXaG(TAIRP&eCEfY zpS3qRjH(izXEvBUI1$9Q!wjsh8Y4bpg!^z6BiW zTXmw)hOO+={Lbe4%U+njV2zpjA?5GqcU(6VfywavMP>%ZF9K5p<$1Q8y%g|3fsOGO zQ@NUr=KnXrz?Pza?(JsDJBxC(;%@Fv*WtJzxTEah%Lq^tva#djaTVb=GVT||)7l+h z%%56#$n?QF4*%o8=IUQzl>=-{+b`HQ&JnKP%D3u@&3W-fPgftfn*3oCs5P6!{q1GW z`Kn_Zq$HSL&w26Bc$(Zr>xJ3{Zx4Mw1d`86U^yt4_Gx-5BcpKjV;<)T56*SZ(s#X7 zdf=>h>+?`hBQZkYKrw?f`{_fCU7uZ#hI(45FxNH&$CZ0jtU9}A9jFU3OMXGUKf`2w zqo(*wtBUsC)$6Z@W;FoEcXfi!`hL8A8q}3|X>+7|y)^sp_nT!h{w%(>OT6IvXw?!{+>x1U3f71Bzz8v+cd!-z|<5Tl=gvZrPT5YJqN&$8*^nf0IJ1X?&OxNqB>w`YI0 zjiIM?x#W&_AWMA&vX)0z?bkZ+=QHy!CU!ZCvVTiHwD{k4dYEbc1!U#l+q|7S44PN1 z+SeRjI^jc%!aG-xzHN0=&gwBGKfNffv_Txy(YU?q6tBz18^xTJpa`$MEv;^&zZ%#< z+`iY4ef=sh!<2*f=Raex?tX92w)awpfa}v diff --git a/public/images/pokemon/back/646-white.png b/public/images/pokemon/back/646-white.png index f5db6867e944be7ac1dfe7ab2c0b4709d05b79c3..1dc659ed6aceb6d729e8a1747426b6d6fdbb5bb6 100644 GIT binary patch literal 66976 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

      uLDKZr($iCl#Cv=cfwM9JQ;& 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 JPDHLkV1mzPh0Oo} literal 63426 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 S)#?fW_K^cAOI1o31^yrYu!pPw diff --git a/public/images/pokemon/back/646.png b/public/images/pokemon/back/646.png index 3a36013adec133bd5472b2eb0ca0c25f432e386b..6ca7f51f01d22ca2acee3941c0b0b45657ba476d 100644 GIT binary patch literal 14944 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 KKvmKogZ>XX+7|%; literal 13257 zcmXwg1z1~6ur}`Q6bKY2NU@^D2^tE)-Cc`oi@Up9u;9f?ad#=M#fn2qf#Uk-yZ8Qi zo;)Wx`_9a}GqZbkXOn2PkMg)!Z?F&$5O5V0WYrN65TXCQQIO$xbeOgb;TKLduqFt8 zC4j#~)TO1>9m3Mw-TmX-+0ycA%UY(p4qm5Q5T>W6H*a5G4-j5oUtLzZC*T5z9_k-8 z5F`&)tPv3SloVy9G<}SJ=g-D6=;dt4Bb{0hYyccN7{ZA;!#the3_v`WPGu6}Q z+s&Ei8FHRmv`i?~%A-EZnb=k|)k#$ZEz41J3L{47%ZIy*`Y*irP`ZW_@p~g)N>1z! z#KQ*S3KIEz4V>4R9?>g&ZSoSjtluo^ESwzJ6(q;tOp+}DCvu}_yXqaYz$C7I*hxV? z058exFsU^XHO`1UhJ+!Kk8NmR%hhN9?aM|fx3yWCH=g{p zk11(!zjTRK>8Q;OJJm06Q`)Ne1^MfFi?B}Jxi`N6m@d-tajR+ktng@xn~-WhKM^aB zRWLLhty-aBo3ErOg?@Sv#Fi0zMC)3o3sDnCBmSV)@O;(d#2`dv=0^ItPY+c1^6i^D z5shgJQPnrPnln{7@Ew?pZs?cnF!JmkW!@O63f@?weaH{!M5;+oT|4fWV?XnD5$ok? z{b37vg3k$@U#M28?X+yn16Wq7%EfNr!`l1!5TDD9OYVB{>jal^uMhQOL>Z){70SiY zNHjk>0dPaLWG&G|a9@!7swZ&qiVsZ8wPHmKKgXI1fCrh9Z~rDTn|ZmrN10 zdG6;*ef*d^beAkGr$h)1rZQWi@j4%mHFje-`0)mph!aLc2y4cp2eUh-iBSplp1shC zPZB0J2Gr5eLET;UF*Yo}?3y2@?cZB&K!FC0j*o9f1nSt=Y(@JuqIn5H{{$$hW!G&< zCQmO+`M}L(Q>BXvV3K_1W;NchTIPpqiSvd)d!wXyr$FaPGW$}{jVDR|xR(+d`uguv zy3U8sPG=(x>We0Ko^6yh;$!6ZtiqTQqAhDBK}vdsnjk3iFN@@4L+U|Rwgh4};=ugR z#0x2ZjFKJK1F_MY-$x_;dCzmkg{@6GLY^>1^v?y;>G~^O^@MPLrgnU5Oq?J%#VG^5 zPaZ?PPTasK$GcQ~pHa`SX;osOhKsen8hVgMExVr>P9|Na|Zbvhx8MeqA}J3Vy83IBktiEN!GJN`hc8dHUzE#afDqa!th$g-q$ zH<~$1VPqgx{sH?}?-5pYG+xC{U`eg{IdUgw;^rmcU#8_S&a_*_++JCba~*%pN%STl z|8m7Z+qBgDBd=~5x%02Sy$^G5i=(-HnF0Wh9_MpZ%xf`v=L?;kst1woA<=T~W?Ez0 zX&^*x+4396M{UJ&7U>U3;Q?~|2V+yk-zi3(xqVVwAw8cNQ)OsX8>%rSNXh1^lKU#j zByXKtxrzJOm`4#T&uOsK*ZB+E00&}FViNs<_#m#T#y}+dDaIF^M zyfc-n8Kb?9vc`744qB+fu{~M8Q~}GCkbx5>Z78{?%Yg}>)H=`|gG{vLet(Bse-Cqg zm2~bzYr3)9tE&4ZXYtFI%y;w!wr0%08>!y*uhwP_RDZvvBHy#K=%>hr{RsU#O3-Pv zf4=lRNoIzH*cytzU~zQ}x1Hm~BlvN#YC~l_B(uRj4@-~YI^D6FMKJX50dD{x&xFZ8 z*2QD(oH=7MnB`;^?QPow`*m7#6?$P(xbKvG%1p_l!dS*ofmiG>Qul=1Xs>3~ZCcB*31lo_C_qoUhFasliSN#I|$3~eo7SdBzlWWYds~XI0BkA>q z^^F}tLF}d4Ax|tUHw&EYH)S zAYkk8JkYs+q}U=MS&OpvZh?wSJzaPPcXG*ur2eRKpmPWqNcUW&RpM_5@F6`Op|W}# zi}z@yDJy}0@3KpAyed^2D7uk!_Juf5Zn-k+=V$$hM44M^hHCT8v;TCF3eOz)f5F!P zcyC%?ySY*H0dJ^SSH&NNrj+ngI|lYDEH-f%#EgL(*Y+|Zo+oCs8h3&9a5~I#WjQHe zpHzlL_tDXjQ)CHH+y1?!uuId!!?oEfYE91dhaU|4{DA2MfbrlK&C4@I?yLg&y;pxn z**yB(1@w;q$;;N;0BZfx0lge20hwc!x+BI&$BeF*Z!13pRvp8?=hZgGT8@Q|WM39( zbj813hFCUJZO(D+{87hZDWh3Ey?z$?5`OM_B<`Oxb%ei_RP{?`Z10VZ+vri7N0t%U zqh~ zt!)8JXH3fXbE*-^I&RngZ*%`3Oq=S?K zmJ&T}0nf^XPkq)~-0?hu$$dMTHE73PaI#?f*K+J1Gc}KIN<9M*fhfM+;J=v90^)-j zy8G{og6nit7pW@v?4bLx{tTj%uCVCjh$16fXpA7kK#K6WZ0qR`kg|>o(DdW7de3Bs zO{co6?-O^Cf%ylRzZ>n3#`JG7$!OJmLEUdZTMLMDm<;P{YvRA>$sl%JBTtms|I=ti zzb9$jNh=*pMn$=mss)~|H`S`;6IWH0wXv>tAzzl^d|aP^ zx*ZWG@Z_iHj*$(Nv`U<*%J)4M%I1Y;A5A4hJmTM5bWf$eyGYvrTGkla;RmQ{QyveO zX@S!&lOMq2`&u_?R_l8cubN#$lp|Rxil1M(r&#}#wCaMxZfWP@3(EMM%)b_qHz=hH zWqnCJhqDn09OeBJ{C8}=;+}3ie9=)Wo3+EI|Ho7;qW`2c*Zy5+~tN7wL!K3}|5Qn$Gmf~wGz<J;$DHl1dj-l&rlf19!!_sgB>(G2gaX_+Vwbvi_%|}eFQ35 z%(8;ZS`v&D;x}s%cKhzn#}4`aJ;n`Oi2YDyRJgXSH*=&S62GXyw|mXL=JO9N#JYM< zN^pr<)<*qx{ywVJ_EDRk);>r_WgLJe8vU+iKM%LUqzmv*O0U zr%>JMogW0dZ5jEo(bjAex}-LIjl-KS@%wAn3SR`mbgp%OJ_2I!wEa&ccm~=dH%-X| z!xMGHMQv6`nsdRTXAOKr73}JEE=$pKk|U_~mL;)TqbtTDViz-yFNH2|`V%9SGN

      zkNx22^(T($2o0u`&Am6}Y{F*f=P~=vTDeO1$g~S$c^f#>RQ>pVGSiXeRHlO20%Lau zf%>ccB81OjN8iiG*|oi^2ejlmP#eza1`ZGPT9wdORLZA#H=Rg@>YJ|e+)b-Hg|%6# zlPdGd&?&pyCaWu%oKBtHyajv&h7OFiZOAD51&OT=Gny5bJfT#MXLjjUh#zzZG9$;E z^#u0j^OyB9?CV#44xBi?=?!HHpte^OJrbDZ=rCytkTm|$Rg0(dAN){8BeL1wi1`=o z+0?Db^THM|@Z#JQ*8~8ZANIB}VZP#cru7-0KjDat-+Uu(`K?)RX+P79n>x!RZDkoa zAyC@nC$xJ`m?Y-(lB*t>ozz{Z<(0GXnn~3WsYm%G(ek664KjvE0OYV++n=(+{+63@ zqo*6v=&_&X_3c=IXzsRY{5DLz#gD>r)!x*)BhdXU<>oo?DR5&8@=fHnWsM3a?*onx z-@k8wm;0Y*xV)|VW{dL!Gu<@CRsSx(o*W{++v?5_Rq#8qT--u7e(^T|Xa`2^+gzJu zNTg&>iXB0!$L~>o@5frA6+Uf70$M72{U6key%>p$7>;vTZY$&^5dX5t)@j1{QZQX2 z0O{D9AC4d}#3;GZ)m~zidCRqpYz+fX_>SrLv~@_ zObP89G;$WdnG&6lTSj$cfFW$=Ou^c=|MU9b_QPBW?fdfrWuH&Q(j5%hQhcG0i9)lX z0Mx&1Vje~R-HQHY=E^55V;gV;IWNerv11+39~JV0Khnm6M- z>;V^t>kn!0$Q4w6#5evn4Cq=aZIleoV8VC|>)Y>Q6p86lP0$^)Pr_xFR(|BSts=HdZHtbPk%6#O$y7~FmZna2@d zSFZ0CwRznNKb6C=QsM!JOx3w*h4e-;`1f#RRctYf(v`7LV|>eRrNku-nl?yrox(xq zL45HTG`p{*F(cs$cD4OKF$-Y!k`Z4d@D$NrY9to3XGS8kuaIu|nLLTlMk`EcsHZ!@ zbp=!OM8Vevk_hA^Pr4!jzZ!ZY{~KlsWoL67)AuTpSE(}PT(4Av9dIffd^q6C+zr43 zCPjfarzBIuEkE6>u{*4W1JWy%fLA)MKL=zZex@r}1Nf+PY>u)<8MQpZU1r|mBxf`0$X_6A+p~4hn>0FTE$~LJ&HryXrDzE25qf4 z>%R;!FSUC4X_f;k)xOAFa8BHD=V zZaJn;>~WRX+}>-1cvWx0rvxlCTcXFQr5K)~Awzw3>k*E84N;oDs0^0Z=%%>X*$T$m zlfmV0gObpmEvjtQ#CC|$Ibu7s9R!;T`lV^VhYOa=|N3MCzIlAD5m$<~oc1{(+SnMB z=ztv+WX|k)lx#7UU0-Hike?9S*a$48)LiC>%$58mt;7O)lt;@<9}bb5kTA8e3(JF> z$4Cw_j4X@Bnk_#a8xyRSh`TE4E5SwVxfhZFRw4h%ED%J3!|RqWXs_kjgyp*?hY*hJ z1=iVYdHu1_Zbdql3%_S6G-jysAxHdwD{u*7X76LH)Bi%?N9p0Mfo|k4QgC|wb$nZV zo4B*4#iJ&x3z?H zhL>RJb6g6Mr}1zAQ$4SiT5*JsCD0?I5hv7welF{=GzpB^ewjO%U4QI6r@?auT8Gl4 z8zCFC&zC5)2oT!#kZKgq|4=MP+rkENbNxLJ*`9hLEOHpgW(Gab=oxYn;%9tk)x$JE zo4#UIPuGN*vC@voi%&0ZyFoAU_)>fe7!i!9ew30#7UI(@CI1c22XJP$7qg22)rVvm z`G~~|XJyI#&Rdg)9@N|m`BNwnJe)qHs_z99KqN_i7>J7L8>hS5z(IE`CY8wubR9cN#&9j1$-|3*6z!Io;b!nhfmV}IPAt;29vlzCHP6^ zm&StR2%qcd;TauLY+0S_&i8$fx^Ej#f%yl@R;4<16-mj5#@P}NlwLJKxHctV^RyaX zLAhXj-Y&s%NM=TKo7rzgS(_>n1}d>}d}JKYQu*YnQt3W5d*<6mx#^2I>sjNs#O|?t zY#>pwaep|V{Qm%#RJ6^X5_mf8v-2K*G>U9RlQ>Yc@DZ?6*hi=x9bo67iNltYaAvw#Xwu^9BvUg)H2O)6>q)%aVh(|o_A zdNy3chh#(C2d%sgMK_KiAC4MC>$okwrg@%I-DMWD0Yjl)ehcwfV&2lc^XZY}{css7 zu@l*F>7{^0#CAWJV=V1evAk4xqoe0pu;rTO8RJ%OC;*-?=!dot-}wyQcizB-Lie!o z&~MF$`>Nr;YW-jVB|)Q^SmAmm>0($WgvKX{1>e%3fqL7|M2R=bk2yVo9Gd4}#Pdp? z+xn-f1j&HD5@YYCX@ulO$MifJPZGmJBGO=1JsOWp8H~bZ;pgL1_TC(tb4ik%hZ}3} z8f1Gan$H!t7VUL7NLmWjKHI8I6fqn|F=483I3e<^)OZa`_dQCXE)W4(rXh1BWtc*X zWG@x&l`wWPAU1n(3aqRYi3yHZ{76Y2r(feWD9!YjTxoI^#*xR6K_`66TjyfhXWqh2 z7PF=rEvyfd{FGp>m_qDACj8yNb3{6rnoKL5bvsS7Xpg#qaV$C-Yj4|rkp>$z8>3#$ z^E4(6o3Vn~;@mnpGP_in`JAFRJ&}1Ig7| z-W(*OJCcZg;l0%NE?%D8wdq)nCSs<=bZ?seU0$qE;!?6ZabZse@iCo+CTP%vbmWZ?w%X#dVmq^(%2c?C% zj{COkXQ{iJfuDM0k>lL`Ar+!z_N^xg;p69h)WGU89Md<*akWOty3@L_4SRA9&4`{A zngJbcMYISmAVf4Je+bI1UgyQ(@dH3z>op*qin7D*mTFam)PjSPFZJgVb;np^mXs|6 z72A`86!&L?nng<~l8V`W{90U+3L`?XaGN|D-E!ayP=)?PHi z(IQ2A3KpZ#kha)bLU;nT66ozI`jjpVg(7~@{tni%pjl*jqy$W|&WWj0;JAI6_o{wB zvxvvtZ_gR9rd*PN2$SUYAO$A9ZTHhD)%~LjQ?7(%jgp$;h{Ga#y5lWc)_MKpHR;A= zo9JPZv!v0B#jnj9_NW_wu(;`;*1@;kL{r~ha|1)*T`5N*CA-u20GYSl7Jf6p4Lb8e zp&GuFf&?9~1YYjtxY)U`uBK6YvW(Ew~t&^gHE$ zJe8{w%AgRU9j$N6CP>)nJ0n;P++mv!Ns`*(gGzwCzB3W6O;=?JACQ5SFpAE$%6U9)BC!X4{|v@P zSZddz0q#7N2PkIW0B-OH%a+;s|BCWjbNWMJ^9tGzOT~IT_7tN%n*2xgnBJ?eMypnML*gh*>p+mkY=t@0n=mvmG#7uyp!=MS^K^|dfQD^g~ATkU3x;zSxH z(7hHHkB^K-1$M8H>1ufcES0hRk=qy*st4h+OSfCcD}$bBk-57BB@ei8oy7Tb#oV{o?BmVG*nEz(+r9gbTi^Lmm!zlF)lsv=^eyLCgClz&8m` zh{HF~kJz7XjFmvoh;qu1iV4{l?JdDx3?RWqr1Qj9l|(OmK8Yj?JA2lZb6fMR-C|D#VOW7^=FN*v z%67TOZ#%|ALJTowDFb*m)f4RK}r}4fnUn66vG^HF)Sf1Ym-34n+N4%(hpP^Vp6V(TvM@t zp|XtCK%|PL2W7>zF>M(sS3QFEvn$(<-!l1PdF_iPO7%qrlI55&%Af4MT*1N{Uz#+JI; zq-0(k;vUB_NO{M>5;Kttz@>9gH_NB1*^x3P@o_4|AXx@64DCxLDp6{pY8suqlgb+_ z7elX2c4_OoYN)BEj5k)7P1b@w>Uo z;_ON%Mn1J9nJi*h*^}MM&sIJNBl5S3=X%5J?dLIYi9|p+*!tb*RBXnBa$&*yq; z@Rle7`;zYg#}LD3zZ>siwiwRa+Uv}a-PGEM0NC$-hl=m;h3ePw#;}W7zZ-^KlA#RC zmadn^=?f?PkRK^!PGm9F@U@k8%Wp+CnVV0*SWc^FD{NOXfnrNmCn`Zi8}TbvgW5=w z5wpaP7d)-YCQ1qQG)$ry-`*qGz&G3mwc+^8nN9dRB(&}h&t-deI1JxZg(O$QE7qPF zKOKM)b9@M12qX7@kA=6a5b2mmr*TvV>F6we5!P56w)~aZfH2*8G+RX0J!<@AvKC?Y z1I#@jwh@^ijzW^&qYLt0pCgD5-%m3FUuzKQo=17Q!9<(IxZqQO>rCqB0EB3Ycy)>` zD#Sc^frCDvZ!acM?^8lfXAVYGicb!e%n{`|7F{x%lg4`wxE*+1gi<`q&@**!#Bhgt z3`w`KJB;;xwm|!Od?MT&^mDY_EEq}X6r5-tUa=E8wx8=!io}i^m)8A~WoPl#k_cLQ zZpVsN4`pCLOTw@v$;8Cip3DcJ%G%xSq@K5E(R61ke3`VoQCA6bUSf_)xva>>=xj%Z zgGZ6_JWJ$R6cN6BCwsvii}_5u)B1T5YYe4-4Fl4+c*R$@CYttNkBcCB@cw%Hk$m8& zS?V`AT>_KrjwiPLply=l4gM-1ofg++m&b_)S9ugAXN9FMWnoP2=YbCR)~t`e)ocx= zXuYsV5PZYO97eiPgG*qQVSixPgvg-H?zFp1%twW~T|*^?1t1fAvs3cE3DEtNMaxS{ zz>{`lold}H;UWXV2qq*hbBc&ZDp*VhpyIQizVmcA2&&g$3b^OdcsQ_F8j7Ey-U6Gs zxbPRTP&90oNtNJGX$>{SaKS4yx)=^S#5{xGI-EiY>ptOb&HuoK&h(u$ZevE&*m5<3 zYPKZRS@C|-lN!_|Lep^9;Tv!fiu1K$^b`j-^b2PU#iNg1*d@8tB6N8!^+plC0XZ6u zT@e0jo*w`8{UhAO%F=oE80fAsxM5rv`u!qpcfx~sCk?Sni-VF!#iXJsJ=^y70x0Kd zhz@t5qs5)=lk09kJMh^!Zo% zr;Me^&9XgelOVv*+=^liPn{snQJF6nMMH7l^LTp$Dx%FjYRs<$}Zca5F(%1C_rOH5%YxSO18~FcXr{C8)-W|>6)hD?wx=TKstqvo*Oxi zGb4jFv$EBC*}P{48YxBHaN478($c83 zr2+45)=%k+R8LH!7VLu)u{botet^$-o?aOw2olJK;xWY!><8!+bjG46NqtuIL`2Db zGWf*&_RR3%`>=msN6srAwWnuE1b zDSM;X;^e&Q8@9SlQ`9sZA8nie!rcU4R4V$D?x!XLogJOm_(+3}b{)#Uhg70=x|PWH z4G7R@V@SlvF%{=2T!OE@Cbq^CVX>&sP6lE#R?a1Dv}RB zi*k*Q4vX=ydw4m9gl*-!@680e>S=ii%oYMbcVyGE)n-Xr@~iiWd4MSdu?<~G`mYcP zYd;T+BQ}){N$BEzVh(^t)8R2d5=vVDKrL=~vyFX$9u0r)W;%rIQuzeQ{_U%hZ)4U~ zc1cp0D*AvZsb#J#N>%!bXFmQN` z<{^u$wF0nVxf_i^u&Co%6cVVoN5_-!?dlJhYX#P}Z73Cv6+|d|pj*k9j9D$|efmC0 z`RE{rnsIp6EjKUAP%lVHm34Yit(eFZC7DfYt+rdRwSMnu;CN5Z=N;jNCg~eZ{5OsHrL7X>K>?oM@oB zx4rVfx75E^@G}S&-x4M_TJ*rF$x7-e=`Dl0*M-WniZ{^T^BplYgKDN{NJE@=?%K&w?{EWOT2BTnVk>xB1WP(X`TyLEASMn`eRuSq+T5Ob&{P z{sh?}&FfMnl=6s7Ufqbjamv-SfauB6;Fi4{f@B94dcLE~=H+l}^y2&LWe5S&_45Z8 z$^6lu{ihA0k=fCyh8=|2bbms^xvs(v=HpyDMHYA5k%iuY2Wizk!1_tKqXl^pisEbeolaL-t(cfDyX_-wl|=<>)TCAZC`Xknvx4Z?P-SEaq6G4k z-r)g#XN1EcE)t>VZ}Baf#=(}-;U6I^aBVd1`w={U{_%5+JNeXm*>@lYG_ujEV7*u& ztl{DRZi%qGQPvvvM^%xvp8aU~5!mR9%02nkwOF1hb$wc&Iq$^5Cu)>^3{9?F3w2`D zZVzlJjjmVBB7Iwy4`}%rG{)u-t$B)J#IqdgUQ>p>w-!Gd@Wn?SWp;;VA_&YCyt{fl zdqYL=tubS3L7--_w0{VSogDrCZLl29Apzn@(@Y5&b1PXjn3Q*Wk+eECIe#=x(h@CB zfjIvjCbZqUrr)+~kabxk&*ZS0VqYJj6Y7NjTh>~Qfj4yXOY;mhcc_35x5 zSR5(vYle!?bz{|uHy!T)Q=f4f|HFq>3S?==6jY<*S^G*`lWf>fmDc0Y^w$hlQWg96 zmC9vM&nv9XH?jvR$jQQxxMOLCh!RxDO0l&IuKr(8VnkJSOK=M{XUZD~VV3$`r5d@# zA3ahJDzXRd!K0$m;o*03cxb0B5z76~i)qWe!!<*%eIG0aJ^zdM%F7C#FS?8t+D%K2>XgwS(Ha{8_y? zG!vHb46)d*H!MmqtlUV@#A;e(WCA4qp(IoA3#8 z>P|3-#pt3p@oJNbFPG9UamgM~G9VoN3-}29g(z9*KT`s)3o)}kHOHk79O`OFKEpi= z9&FTH9+>9M$@S@MV-Z`M)}NCtdX}wWr#Z!G5FyI$HJkmSSS9svx7YLs@2ZVlY;97X zt1iWkEfjMw2j^bJ*ooLQAwiazd9IPIl6CBlPcCxART(^#l#rV5tW)nROX*n&8rq4n zkN)xh$?TA~Zh1Ex^tS65GN^CC`D$CK_}LN#kX3@6jOjq}q*(XxK|&WH0)7s+Zt={u zX<)DZPT`uV=nD(IhFk9mO_`FX?)3BV?023eBfKS|__~Vsm9!o#yt85PHxrFNQs=ra zOXb(~l*^y%4l;5yX&lJui9Z)eW@udb%F!Ip{(B>4Z^J1A0RkP=2W;2VM`a5u?0SA< zY8%viqoO;4=)k>Wsd55?PsTSBQV}=GSH51w@?*fGS*{u;B@m%QkS;tWYjcpb&K3f&GpZn_ZgT&$=3YOL&= z|K)Cf%i%b%!WGh~HQklbz0Bs?!}M%$a@4O11ZHZ zM3mvJ_DJG~Aqnp7tZI7w=u*p-%S012x5%?-BGb=Mg>)R+BBNVlWe)G3_#Bi+LbtKz z_$C6VKB;w= zsA_pPce1$qy|!}Rfk{i~qX3~-JL^tZTQzIo2gd(OqLTCu8aB7203zHG+~HUlZ*uUA zTEc+`L|iRyg_K8(Il!(3k7zYlq@!NJiI$5CyVrGbQ~X5RqleXWP``Fb3c6JOu`v7( zu9CIi<4o<*7f5du6R!55jh=*_En5$8IO&HN5Dh|r+{C`G@zaNMC* zS6Pp6{*Irp-GrnUJZJw_3JTKDs2E9ErnQ2FiI&Ki^*ru7SfQ6Ww6y{F&1GzTOm zKI6>rQ&5A>Cn9t@DX6Q3M#U@AbD0#qz>feHUAlD;4~_r@4_K4HNy;Tz7y*+gJ~v0? znSA{Hl&m4IViE-b{yGTpa|qT)D=i*#Rv8jHLJ@>&m3#oZV%2_*#oERmD#rLVl>4)~ z#b8#4`eF%dup?S@cbtnQ+(+T!-ERIyOK-NWeCXRh6nRp=Q)-6snl~^05#gfbNqdXL z$lI6)OQ{m_6EeWH?Y%n)C_pVI(@emGDfCIt)#}4)H-?MbcYWh$KY&T};h( zoM1ZEbp8&AQK9+Z8?~}V#be5T4t{(08HlHisz=>1wv+XPPsY-_7|X$>&c%k1f1o)_YsE73EVZnWh8N6lC zq^eBYlPmpex2e_7_FwC+$wAJhbiRP%w90i8((vuC^Px>#i~j)U)VS*~n` zN%Oqr_0j1FOL%hBcg|)#aSp~DiVf$5tYC+rVT`y4!a>kjgwnDHM3Nv&aGEsFK`v18 zR8xvRhEs!QZo3+XHG2d}i@c&dI;FVaF^iCbL{OV6rkv%w!p#-blumjiVWUJ7m{Wvv zK@t!2=LGfS9p=>CxlVn5I`Et*f|H-(fMEW2|&4)@|dcMX=_GETUSG zgyo0?r}%QBXqzh;lKai88naPI4eLYcs>@?Tax@E~dRH$t=x~u{M6wkATC5ambydz= zyww&Xthn*J4e%k(`X#5Bmkx{TWX;M&ty!zVw6TbjOnZA{zfm%O0bN_Tf6WyQ&5JT) zjVM1sT|1V|VUo|PdO#1Nk~J~O3ng`M9*3wY(mSMu^>8aZwUB$+uXJ71GsXn@IkPZm ze_?Ev$;-Afs%P~H;H*03wa{`%QUE)@n^I?S*Z64pe%3vSpLv?`aLyQ#G}`RUY<`V| zo(5JrPy7nVce{*USm07M6X^#CV58;Gmk^VswL0)%TR+M!v%$Y7WVsOqWidMUfsvpD842iUhK&5y?tvS{O6d^o(FtruSiD7WzyX z*u-V(mk0gMZ0`4j)BT(7PonR)F_nd^Ps~E(=9Q^nj}d}04U()+=Nt&{8T3?SpKLz) z2sDpz#&F`PhW06;GfIDY(J$cCzl`F``sABK@FySRBejnJ{}!hbJp~Vnx8)P#vfVJl zv}wq;9l_6J*Hpvpe^1c!I0}OD^j_zvw@M^sJW~Josl9gbAz#`DDZ%GHWU8+BGHKIw iOyH+~p@*+NCQoxQ#so+BL-4=YASi-9%GODnhWtM%dS%xD diff --git a/public/images/pokemon/back/746-school.png b/public/images/pokemon/back/746-school.png index 55b8f33929bfb7295a861903c0df62316afc3889..1884123d82e0f400b4ed9a103429cc2862bb96d8 100644 GIT binary patch delta 1348 zcmV-K1-ttB3CjwQ7=H)@0002hMu!Rj0004VQb$4nuFf3k0000pP)t-s000010RajY zClWbS6G(&;O@tR_#zAV|d4!5|oc43v^>gL*a`5(?)BUE!_s`MO`}_MM$|%YJ000qm zQchC<|NsC0|NsC0|NsC0|NsC05EVe7000E3NklwlW!APj~ZD8;(!%>7^O zk^|?^))oIP&x|^belK4VLd9kIWO(mCdjIio&c9x-?-5|%{VV)_58(a2@6X+R5%Aof zkLMQwK|MH#F`Axla)84@FcA_y+lr$c5MXz1pROMaL;x0)=ueDO30S}d6XAYloH76{ z_}zv3sd;Dtn170?c_;z&*e!1Aq660fV4p~Ub#)%gGbDFg#ets-ScCKyepUwT&d&ze zEshld)cvLr5U`a1ze^_O>9+v)ML-~gWY0`O2jGJBZV~|65Uo_Tv?wMZ0IV$m@lmw# zVMpcJBVwz@W82unXIC05Pl&Zeh=q@?Ws-caPMM%YTz@1O8S3;Ec^RDR*X?#YovgK# zOPe4UGpe(U~FQ9yFV7_j{|}flKZ`dAe{qf(UwD^cIW}q>~0|i=Se6{yhHFI zL_f}5(tmGF#KaprO!Xr~iF)_twucB)0?Ve>aqIE#0IV^!1tw@7sNnp203}9& zpjt=^{XKwENE(2khF3;8cgxL@J$U!81}r5!Z3;OsqK|;bI{;%$N03sD z+fHmHG~|h^0U~vsV6k;rQ;KK(tpiwHpTq&$j(^cPv7Nq$QXO?veM&06b3ia_0m!NG z4PfC{>j0UXO2~6IIT=Dw04<`_A6c-XY}O+{et8ElXMmXI7%0nC+7%JK_FfZ8z#!3o zavI8owlxtdToljXPLTD-CTe}76j37FD+6HKp%IdSqEJki>SLy3(tzKy1lOSmNv1F3I?esMZxk_WM zVYtyiT(?=j%YhoC3cx2AM+8fuGP=H2Msw7!Y^gJ8CKNS`k$ifPaoRhZf@2i(+@xz+o>6)5jQ$0g&Zu*=tD# zUR^Op3IS642VBLd&NIG;a4N17_NU4xx1}v)=y#b2jR22YZBLaA%5k{;r z3x$D7{m23|`gh3f6sWag8(@YJ7tpGgfQC@$i!Q!3>eDHyjJP?QUi>IVIpQf+x_>?* z7@*4Q7NFl;k^!l1)RoUICxEop5wt)KZn()bIPVnL4Bbj@P`00006!orVboJE*MFs303juEOVZg z9EucKyL8A0D3E-YK9WaKRD8C)^&x;Wyr19yk&zLj_4Puctx7EK&$acxxUh?pY@-h)KR&+EPH}osQ}c|Pkke08kGC*VSwBM;HfBIeCiKsyqMO@ zaw|~p!+`!ElYjMY-4CP=VAU%U7T?xWF{xm}q9+(nPG$g9)f>#9PNd2fbw4n%V3EmQ zV6OqyR$x{Mu^pHybtQTL>>>%VP-?TlX<@+01dLKjZhrr90YKLeGZ=Aywy9r;u^!>p zxc_s*!n$;?U87R(SB!`#r2_+q>u;)3>aP!7fH@aqO@DB=U+?|l=JB_#NI?LBKy;+@ z`}+Ary?K22XVnNOI;MMUGz;of)eleqqLm}Wan4i0LICG<^YrvA6V5p=#F$^CTznm@ z0Jr_-o8gN{+!MjRSbF@-010a)l z*;q= zRpmOsxPW@8(~PMG?^Xkvb5~l7wK@h+h}EY`IpeLmV78s+;7%Rb@gQRSkigo(6lMoZ z!h$_8@1}UNdK% zNPn*k5E{(Gj}|&Wk?RjK6&7StmEq?d8vvls028*dg_?IBe3oT38iZ% zv@;3psMZympF?NKF{W9xB_0(yNkNEr=-IqEdU0Sw412L1|R~*6960|0xspXpu+k`chn9;00000NkvXXu0mjfa9%v> diff --git a/public/images/pokemon/back/746.png b/public/images/pokemon/back/746.png index 3b1b4438f1585ffeb223761a2e83e13e62d27198..cb424c9fbe1b4c306d8f7ce9a4ddc973367e3d9b 100644 GIT binary patch delta 333 zcmaFEG>LhF3Lj%}kh>GZx^prw85kH0CaUVy_s*Fco0faB$yyaCB2W_K7tHV<6&wiY zb_U9Q@pN$vvFLq!;qJ_K1bfL7ytji^>uoxT7E6@e8bk3T#mwblItVi@HgH! zx%Xc6zebRYi*)QXRTEdY?#aK!`9ww4WG@^_+&$4URMTeW_uD64c+{`A+0A!SyCu+~ z&tT)ekjmx$ihC}d_!F=~W%-m(tl{Z5yfhP?H$9uPo`d~&-|qaWJRkOYEKvTzv%7D~ zlL_Z1M~dqTCNAzWT(!IUQE+2x;`!j#SN(a+ z?#|SMi1*1*TIbbqCT@%Y;}6}@-jZh^6H;a>60k_WTv#6zQ-~ljW25?=S_8>496lB5 tYM7X+Wl~$Z&4lp;59AxS=$mi;AwM-t4a9!2)hPe~002ovPDHLkV1n70h^_zt diff --git a/public/images/pokemon/back/782.json b/public/images/pokemon/back/782.json index 64036da7750..564a0c4f13a 100644 --- a/public/images/pokemon/back/782.json +++ b/public/images/pokemon/back/782.json @@ -1,41 +1,1010 @@ -{ - "textures": [ - { - "image": "782.png", - "format": "RGBA8888", - "size": { - "w": 50, - "h": 50 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 46, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 50 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 50 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:03129fcf647a44654eebf65e3131032f:56b06453c435e6f8d3648a6836f20d5d:d07862436676aa228a148ee1f1d82a8f$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 50, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 50, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 99, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 99, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 148, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 148, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 195, "y": 164, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 195, "y": 164, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 146, "y": 164, "w": 46, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 26, "w": 46, "h": 48 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 146, "y": 164, "w": 46, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 26, "w": 46, "h": 48 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 1, "y": 166, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 1, "y": 166, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 50, "y": 164, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 50, "y": 164, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 98, "y": 164, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 98, "y": 164, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 50, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 50, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 99, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 99, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 148, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 148, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 195, "y": 164, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 195, "y": 164, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 146, "y": 164, "w": 46, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 26, "w": 46, "h": 48 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 146, "y": 164, "w": 46, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 26, "w": 46, "h": 48 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 1, "y": 166, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 1, "y": 166, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 50, "y": 164, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 50, "y": 164, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 98, "y": 164, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 98, "y": 164, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 50, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 50, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 99, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 99, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 148, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 148, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0039.png", + "frame": { "x": 195, "y": 164, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 195, "y": 164, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 146, "y": 164, "w": 46, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 26, "w": 46, "h": 48 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 146, "y": 164, "w": 46, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 26, "w": 46, "h": 48 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 1, "y": 166, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 1, "y": 166, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 50, "y": 164, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 50, "y": 164, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 98, "y": 164, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 98, "y": 164, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 50, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 50, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 99, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 99, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 148, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 148, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 195, "y": 164, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 195, "y": 164, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0057.png", + "frame": { "x": 146, "y": 164, "w": 46, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 26, "w": 46, "h": 48 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 146, "y": 164, "w": 46, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 26, "w": 46, "h": 48 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 1, "y": 166, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 1, "y": 166, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 50, "y": 164, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 50, "y": 164, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 98, "y": 164, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 98, "y": 164, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 50, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 50, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 99, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 99, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 148, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 148, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 195, "y": 164, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 195, "y": 164, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 146, "y": 164, "w": 46, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 26, "w": 46, "h": 48 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 146, "y": 164, "w": 46, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 26, "w": 46, "h": 48 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 1, "y": 166, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0076.png", + "frame": { "x": 1, "y": 166, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 50, "y": 164, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 50, "y": 164, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 98, "y": 164, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 98, "y": 164, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 50, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 50, "y": 111, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 201, "y": 1, "w": 47, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 23, "w": 47, "h": 51 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 201, "y": 55, "w": 47, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 23, "w": 47, "h": 51 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 1, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 51, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 101, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0088.png", + "frame": { "x": 101, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0089.png", + "frame": { "x": 1, "y": 56, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0090.png", + "frame": { "x": 50, "y": 56, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0091.png", + "frame": { "x": 99, "y": 56, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0092.png", + "frame": { "x": 148, "y": 56, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0093.png", + "frame": { "x": 151, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0094.png", + "frame": { "x": 151, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0095.png", + "frame": { "x": 101, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0096.png", + "frame": { "x": 101, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0097.png", + "frame": { "x": 197, "y": 109, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0098.png", + "frame": { "x": 197, "y": 109, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0099.png", + "frame": { "x": 148, "y": 56, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0100.png", + "frame": { "x": 148, "y": 56, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0101.png", + "frame": { "x": 151, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0102.png", + "frame": { "x": 151, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0103.png", + "frame": { "x": 151, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0104.png", + "frame": { "x": 101, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0105.png", + "frame": { "x": 101, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0106.png", + "frame": { "x": 197, "y": 109, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0107.png", + "frame": { "x": 197, "y": 109, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0108.png", + "frame": { "x": 99, "y": 56, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0109.png", + "frame": { "x": 1, "y": 111, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0110.png", + "frame": { "x": 201, "y": 55, "w": 47, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 23, "w": 47, "h": 51 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0111.png", + "frame": { "x": 201, "y": 1, "w": 47, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 23, "w": 47, "h": 51 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "782.png", + "format": "I8", + "size": { "w": 249, "h": 216 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/782.png b/public/images/pokemon/back/782.png index aa3e05416a2e25ce94340d6c685f1b810a03dc8a..eb222077d81e285033795165636289502ba067e1 100644 GIT binary patch literal 3018 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 M07*qoM6N<$f<676o&W#< literal 501 zcmV=BiM0000dP)t-s0000G z5D-vKOLAm&dv3JsNY39F^8zQ)Vj+uQLlHTd#2{r&wtE2=R70004WQchCy6H3c&NmILk=XOu~v={0I^Iu4kt@`H(wy2g;uX;j>S04+~hBEk@GebRQ``sDtqPw+#;(Vf)2q7sp5B`>K=)$5;?FuOF+>Cd(g@^!j<0de~v(H_D5fS1!HBCcL-xq(f5_0r{x1OHq znrQmDKcE<9sVEGC!scA1FW5eu={d5~48A6K#X rnKd(LWu06En~?-a|M~8QJP^ST({{Q*?~G8h00000NkvXXu0mjf5!coH diff --git a/public/images/pokemon/back/783.json b/public/images/pokemon/back/783.json index dbdf0832c04..d8f4119f161 100644 --- a/public/images/pokemon/back/783.json +++ b/public/images/pokemon/back/783.json @@ -1,41 +1,965 @@ -{ - "textures": [ - { - "image": "783.png", - "format": "RGBA8888", - "size": { - "w": 69, - "h": 69 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 66, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 66, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 66, - "h": 69 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:7d62b0df753b06fca02f434512c11d99:8e8a5ac9c7d2fc25a02a4d24d5c5b640:aab166e28c744865a0296041224dd01b$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 420, "y": 277, "w": 66, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 66, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 272, "y": 280, "w": 65, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 65, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 487, "y": 277, "w": 65, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 65, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 1, "y": 347, "w": 64, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 64, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 266, "y": 350, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 62, "h": 71 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 66, "y": 349, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 63, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 347, "y": 279, "w": 65, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 65, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 134, "y": 282, "w": 65, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 65, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 1, "y": 277, "w": 66, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 66, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 200, "y": 347, "w": 65, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 65, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 329, "y": 350, "w": 64, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 64, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 1, "y": 418, "w": 62, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 62, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 519, "y": 418, "w": 61, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 61, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 456, "y": 418, "w": 62, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 62, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 130, "y": 352, "w": 64, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 64, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 413, "y": 347, "w": 65, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 65, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 420, "y": 277, "w": 66, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 66, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 272, "y": 280, "w": 65, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 65, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 487, "y": 277, "w": 65, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 65, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 1, "y": 347, "w": 64, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 64, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 266, "y": 350, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 62, "h": 71 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 66, "y": 349, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 63, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 347, "y": 279, "w": 65, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 65, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 134, "y": 282, "w": 65, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 65, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 1, "y": 277, "w": 66, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 66, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 200, "y": 347, "w": 65, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 65, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 329, "y": 350, "w": 64, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 64, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 1, "y": 418, "w": 62, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 62, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 519, "y": 418, "w": 61, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 61, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 456, "y": 418, "w": 62, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 62, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 130, "y": 352, "w": 64, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 64, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 413, "y": 347, "w": 65, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 65, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 420, "y": 277, "w": 66, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 66, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 272, "y": 280, "w": 65, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 65, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 487, "y": 277, "w": 65, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 65, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 1, "y": 347, "w": 64, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 64, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 266, "y": 350, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 62, "h": 71 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 66, "y": 349, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 63, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 347, "y": 279, "w": 65, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 65, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 134, "y": 282, "w": 65, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 65, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 1, "y": 277, "w": 66, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 66, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 200, "y": 347, "w": 65, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 65, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 329, "y": 350, "w": 64, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 64, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 1, "y": 418, "w": 62, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 62, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 519, "y": 418, "w": 61, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 61, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 456, "y": 418, "w": 62, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 62, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 130, "y": 352, "w": 64, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 64, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 413, "y": 347, "w": 65, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 65, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 420, "y": 277, "w": 66, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 66, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 272, "y": 280, "w": 65, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 65, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 487, "y": 277, "w": 65, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 65, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 1, "y": 347, "w": 64, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 64, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 266, "y": 350, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 62, "h": 71 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 66, "y": 349, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 63, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 347, "y": 279, "w": 65, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 65, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 134, "y": 282, "w": 65, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 65, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 1, "y": 277, "w": 66, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 66, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 200, "y": 347, "w": 65, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 65, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 329, "y": 350, "w": 64, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 64, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 1, "y": 418, "w": 62, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 62, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 519, "y": 418, "w": 61, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 61, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 456, "y": 418, "w": 62, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 62, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 130, "y": 352, "w": 64, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 64, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 413, "y": 347, "w": 65, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 65, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 420, "y": 277, "w": 66, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 66, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 205, "y": 277, "w": 66, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 66, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 138, "y": 211, "w": 66, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 66, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 68, "y": 278, "w": 65, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 65, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 141, "y": 140, "w": 67, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 1, "w": 67, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 294, "y": 1, "w": 69, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 69, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 149, "y": 1, "w": 71, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 71, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 490, "y": 209, "w": 69, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 69, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 143, "y": 71, "w": 70, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 70, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 506, "y": 1, "w": 69, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 69, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 361, "y": 139, "w": 68, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 68, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 420, "y": 277, "w": 66, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 66, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 430, "y": 140, "w": 68, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 68, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 436, "y": 1, "w": 69, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 69, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 505, "y": 71, "w": 69, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 69, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 209, "y": 209, "w": 69, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 69, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 420, "y": 209, "w": 69, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 69, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 195, "y": 416, "w": 63, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 63, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 329, "y": 419, "w": 59, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 4, "w": 59, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 64, "y": 420, "w": 58, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 58, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 394, "y": 416, "w": 61, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 61, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 479, "y": 348, "w": 64, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 64, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 420, "y": 277, "w": 66, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 66, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 292, "y": 72, "w": 68, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 68, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 221, "y": 1, "w": 72, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 72, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 1, "y": 139, "w": 69, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 69, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 364, "y": 70, "w": 70, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 70, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 221, "y": 70, "w": 70, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 70, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 75, "y": 1, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 73, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 71, "y": 139, "w": 69, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 69, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 72, "y": 70, "w": 70, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 70, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 1, "y": 70, "w": 70, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 70, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 1, "y": 1, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 73, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 283, "y": 142, "w": 68, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 68, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 499, "y": 140, "w": 68, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 68, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 435, "y": 71, "w": 69, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 69, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 364, "y": 1, "w": 71, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 71, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 1, "y": 208, "w": 68, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 68, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 279, "y": 211, "w": 67, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 67, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 214, "y": 139, "w": 68, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 68, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 70, "y": 208, "w": 67, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 67, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 352, "y": 209, "w": 67, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 67, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "783.png", + "format": "I8", + "size": { "w": 581, "h": 489 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/783.png b/public/images/pokemon/back/783.png index 80b07db3466dfd26717a00b564e7b75c6b36ae1a..ff8c7ca052f093cbb8d58bd3a7a1fac14e733b7a 100644 GIT binary patch literal 59134 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�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 O_~>dIAwJ%+i})XF4G?Ak literal 734 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 IM6N<$f`9$`5C8xG literal 1373 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 Hu0mjf2)4Gc delta 867 zcmV-p1DyQ32l@t(B!4YXOjJbx000mW5G+V2Iix*8b~tw?D2+lXrZG9QtYXHBNYXh? z)kId>(2MECSo!(+(5M+Q00001bW%=J06^y0W&i*J`$-tYoAjlp^|)l3IS(sPg(z+#$y53(_hj)F-q8>0=BnSXdGrA8Y9G%!i2d@xMl zp_F&y!C--hiVH|Y5V4dK7%fOC$h6RZ5TtPgA-=pIkg1#ze@rmvkl@erlEXSA@zF7q zzno(mXuz^u8s>osa1qHcDhW6|;KvVu>4Po*p{s=&{ScSsmr0;!47J)}UzbDQ7x<;?B_SoSRL!LO zCmI^9pnuE40)k^kzhG(!j)e;V$iI9pxGs!jK}Q=^eEpuEetTPhIIfnaKzH|Y$)ESO zZU-I-F3@~!5ELx)eZfV|uBd!fDctJhVs7y-g07qLavnPgTNdy3of`t)#}1c*@D~Je zKa}wB`3*A(j_nb7d-;(o!PZ%QL3zG!1$z;)vwymSf>Dj1C09_3FSpI~31am!3%E=o zbwV!F_6dkyuibDMEtMddd-?8lXe_{<1cxGX>|@g-@cd-R*n@zxpf3Sm{fhz$QOvDF zojh#264;kB)#l2NCG{j#X@ zy%;|XyHakATz>(uc!H>uTFrQ^OcQ9H#8hggYqFB62sr1;`4Se zO8KL4ZSdOzF~32&)Pa~tIP=NxGCk#h+lWtB6AA_qZCg=CZW7k=&qm{IKo9%YU%a*G zy#+OxSl6|W;lYd}D}-=E?MfrouS-u+uvkJyK{OFB(Tng@=2YxwH>gBD+u9viWV9nQ zCK+6!h<{6yl0FYeh+U!~2#cKvE14lB(nqzeH~aMPS`4TmeQHZ2N01d`tQwM8%Roy? zh^ZL!0lyUp?S?2J#I@fu_%s?j3|2x?G!Z@uov$K|{0gm|{0!f|EJ`4Z=002ovPDHLkV1oRcD7ydv delta 614 zcmV-s0-61*1^)z)B!4GROjJbx000mW5II^dNP;z1t1@9DB#m}Unkz35PXxA+< z-)2?o zb%}-E?3-q0&D2@;GY3tbrW#RW>IiE6gPB*24v0K8gqUMV&VTZOc|@=a)mh>wf_RTb zs~ST78Y$kAA>WBuG7Y4h(Se*50IZQe=ONk{n{7QQOZl1}=+u~jV}|RcacJhkc8z2D zxTTsHJ~5B!Xetny=j{BwnBENhp*3~}FiV1%(W;r>m1RNBGck>t(>bS-nh2b8Xm$Ut zWaL`7Rji6be1B1{2yo4))bnbTOC2-1mz9x;-jRs+=P@Io27*2P*GH)!jZ9F}|BT#> zdh?^XEN~eSKlBwYSBICqWeM&K(?sr$c$)A5IcLPqk-s5ux|5!J@t6@DdG9NdhvB>@ zng#;i5O=y0K}qp6Za4>^rZQI5eUCbO+Nr*NyY$77tj3Fc>BpQ+v5sOhox3Z=Z5&V#|s`#)?Sp$X4maSlZBw`T6-_5iJta&zk@M01|XkPE!E?|NsC0 z|NsC0|NsC0|NsC0UcrVw0009ONklW18!aLxd#LDbV1WsbWm$R~4Ad~$vV@Cn0u5#1)LwKJXy|YO z8zQh+782+!@F|RGq5mN8;|K=v#|sRZ#WUiM3FZ(Z`18DmP>zv!>*&hQ@hY~C1}N~+ z&`qHdkWqL;uYV)}@c?@K0DyOFTc;!x66uV&IqV$U)+q_VU_!VT0V>p2043>VK#36k zMSuz+UJUaXBv4mqn6dT72?SF;(@mfZ9|FKp)r*f^%~At)eLuWb1Od{QzVt*O7S+f7 z1;K!V5eA6);{^i@K>(u#IPt~`&@fgosd@J^h;Ibb&wszcf~hw@5{#I|$$yGJFIZl$ zg>ycRk0~6-VI91K3mLIMr*IgDJ>G)v3X$*^&3(U*W5>^KC;+(mdr0w?`c{rR3gA1& zk+zS==dlwF0J{&)ebX4}9)tZaNQMY+6al`+j^vtP$oSV{xPV}2wXTJ^Y#_Bzr626FyqLt*E{3yqaO-j?Jiz4z z10bhF@CmF*Gr2nn6Adb@z~jOK7{?5B!Bi9Eg$rCrg*)#H%7u|2Ahc1!=jVKXZ?gdG zxT^8}fS?E>{_NVi9&k%gK+CdWpkSTb1%;YjRDbzOQfTVrXl}_b0@6!)l^nT zJ82L|H+Ez!Fh53M&+)TugX=F$FUZ@&@?7~*CW4JveS!FSPX((JkoaC8(=qA!UcXww zlP0j$%OH?(6223hcOwcIdpw*W8!d^zo2h)<4z&f?4?$LBwtf7h2sGat0yY!KAfP3n ztABr1z)VDQE31>6BPjv5oKXhm_Z6{}ToTwLt$_kGUYTjdN2T8!n-cg8CZkCpWw@dx zP#0)JDM89yO0&MNehSe(6O700000NkvXX Hu0mjf2)4Gc delta 867 zcmV-p1DyQ32l@t(B!4YXOjJbx000mW5G+V2Iix*8b~tw?D2+lXrZG9QtYXHBNYXh? z)kId>(2MECSo!(+(5M+Q00001bW%=J06^y0W&i*J`$-tYoAjlp^|)l3IS(sPg(z+#$y53(_hj)F-q8>0=BnSXdGrA8Y9G%!i2d@xMl zp_F&y!C--hiVH|Y5V4dK7%fOC$h6RZ5TtPgA-=pIkg1#ze@rmvkl@erlEXSA@zF7q zzno(mXuz^u8s>osa1qHcDhW6|;KvVu>4Po*p{s=&{ScSsmr0;!47J)}UzbDQ7x<;?B_SoSRL!LO zCmI^9pnuE40)k^kzhG(!j)e;V$iI9pxGs!jK}Q=^eEpuEetTPhIIfnaKzH|Y$)ESO zZU-I-F3@~!5ELx)eZfV|uBd!fDctJhVs7y-g07qLavnPgTNdy3of`t)#}1c*@D~Je zKa}wB`3*A(j_nb7d-;(o!PZ%QL3zG!1$z;)vwymSf>Dj1C09_3FSpI~31am!3%E=o zbwV!F_6dkyuibDMEtMddd-?8lXe_{<1cxGX>|@g-@cd-R*n@zxpf3Sm{fhz$QOvDF zojh#264;kB)HW=j{|DWtr+*RBn)rzx+C`6^-7Mg+jS5rA;U* zN|X_&X#bkB1l28zMup*qN0Ksk;T%_HLF$VeKxHN`M^#q<>s+-Me zswd3~Jh@v8x-3cY`bSC4b3MJvioLf@Qfk|j7)MCLqE1^y!8=VW3Z;1L0I9HW zsSi+RVaw6928&UYk}?HuB&EHZMUK(VrKJum)U^(B#0*dW%V3nVFaIpH&uPm) cV_nYq2kM$sxq3?C<^TWy07*qoM6N<$f=Ab(L;wH) delta 798 zcmV+(1L6FW2j2#eBmpXsGA@4sO}?A}0004WQchCwS`}z3}wL#CQ z-HOuZ)U@o>Q|ahok{(jgdM=e7swCS7k5<-_DdC6GMlDN{#oOG+UYg)dx( zN-<;l7WJtF&=$HyZQO=v4Iv0??wTW{xT#@Fj80)hgJXzl(^U|f+d0x`#2hYRsGvlk z1d(#0R0woIY9JzDJpv%+MEz}{f(X#>wFwYKO8&GCiPX_4=&UtULYJfj?b|kWKK2yC zE`@y(0}ZH?!YHo8O~QXl2epbt>0t3_yeLV+0!@&z&igKADkx=JB$OnM(@%MQTL;Chv!b)$%@&QnR1<)lfPJ<5OmwQj{hIX!oN+mZ&Z97EJ* zRX;~vYqAu@QPNHU@sZG`aI|6~iU%nLObrzsv7fy>mX_ELs^_%q z>{^ebF#gTyESw*Ov9#|qsmdC@qCx8zeR*5UV+(DqgPf{|mtPr-a^B0oO1kwoyrzyRt)1#?8>k3-k8Fn_O(m z_^%p7oy0&rs-Se8>N#PCUzg3g=GK1$d*JAix)KDiotwKXD4J9@s|c9?Z19z-R4O$) zGp_>^>j8FQ34dH{X*R|7b~83QnzUnF|MZ!2epoDq1@?6Au*O?A6*DQE2P{Fy-;bFa zeYe7}h&fD>z*jHdOiC2O!eNHO*B>L+akQAS1dY|{Y8Ws{0Gu^h76QAaZQE?AW0!Sm z<;LGNsxsy=J}+ho{NUk$S+i=bHIS0sE-Vu4(7~>1)qn9RD?ulw$Ialo0lWPY5IKZ~ zIIhV!F8q0FG6@(9k_ryeIXrLO-ck*NvGTNiX8qMb*RP(N52Z`{<|+$8;e=Ya0gM-^ zuBI>{xrHV#IfK=8UlfP+?vFpx_p5HQgLJM)b-4JlYK(iqsT{Y$WC@dx;J~fCK zyc}o!)s#e^PtDA*ZaBzF5d-F24VDS^=}TEXu`-7NUXbMszf)9Z0z}Vl1>HHmt*;ljMp^enLVw_Eu;@qY-rZAOTb43(YOp*MFfI=P z^dD}UGUxA4dUx9n@QR3M7tDnvBrZER^OrB{u&^#DJ&?edBY*P%VT~TX_RI8MpYZ}W z@$y3BxWup_IV3Ee0Vx|kW!SVT5eo&LRyf`PYf8rS9@l|ul$Gjg@#rf1{oB$cSXWiP zgntVQFWfWz8*H~vUGGIE6`ElKC)~@A3EXbslqfQ(P+u=eMO=3Mmh z&6l+8(XNgX$X!s{kOz^Rx1cZxC67<}l!U8iPBdmiMx{C-Md|^|90qwUl9!zYDVrBW ms+~pHRHd@c`>&M!107bNTrRMdIsgCw07*qoM6N<$f&c)4t=!H4 delta 435 zcmV;k0Zjga2*Cr87=Hu<0000Jb8Pbf001OVOjJbx000mW5H2S&Nj*+fNk?WI1|zLSid60jXPj3UiREsfqC{OoNih^zwq&5-;8*(W!|n|nJKL^&t#*^ zb-fsH`B)NM+Re6q=w31f2RR705~ z9-@XxJyIYr5`QZtF@$(9Yti$RBv4|NDW27#eGTZ@yR5bbhXE4@I^?N=S>d!0wGM1k z1n0}#9jmArvTe$X#1!h~bLQI)ZQpg|!H8e}@D|!&58X0j%=_|N_F$(uRw1JO?n{YN zb_Whb`szbTG)a;!!)GyE+{=Z$R()J$$n`f}oXVsp#w_K2r7>R=JMw?4wJsEXMCFaq daqz}J=NIGYTDt4ziI)HX002ovPDHLkV1ixv#AN^g diff --git a/public/images/pokemon/back/female/332.png b/public/images/pokemon/back/female/332.png index a6940fbaba6afde97a2b62e33b278898de560844..a432b1af4b25ae452c9cd11ff315671ed04c0ae8 100644 GIT binary patch literal 19460 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 delta 3047 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 N002ovPDHLkV1l<|Yo7oB literal 3982 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

      eocbSjHi+hL*EL{SEEJ$~kAh~pRr!)vsOLr|P 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 SN~djObb7apwac~8k^ceE70|o@ diff --git a/public/images/pokemon/back/female/404.png b/public/images/pokemon/back/female/404.png index d6fdef26c830f7dbc880b2646db504644e98e2cd..27602ee0439a7a85014d4317d2bffee2fac2d77c 100644 GIT binary patch literal 36801 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 BW?ldQ literal 11136 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 diff --git a/public/images/pokemon/back/female/405.png b/public/images/pokemon/back/female/405.png index 21d28b1fede72c830bead08b5b94af68449ac341..1aa669e1fbdd4a46dca0aa0a238713ba2d5c0505 100644 GIT binary patch literal 23649 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 diff --git a/public/images/pokemon/back/shiny/782.json b/public/images/pokemon/back/shiny/782.json index 326e8fa09de..ed58485e3bd 100644 --- a/public/images/pokemon/back/shiny/782.json +++ b/public/images/pokemon/back/shiny/782.json @@ -1,41 +1,1010 @@ -{ - "textures": [ - { - "image": "782.png", - "format": "RGBA8888", - "size": { - "w": 50, - "h": 50 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 46, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 50 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 50 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:ab84568c98e2c8417dfbab0b26bf5b7a:bf5226700592a08e6818638b6aca1b1a:d07862436676aa228a148ee1f1d82a8f$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 47, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 47, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 93, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 93, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 139, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 139, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 183, "y": 155, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 183, "y": 155, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 137, "y": 155, "w": 46, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 26, "w": 46, "h": 48 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 137, "y": 155, "w": 46, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 26, "w": 46, "h": 48 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 1, "y": 157, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 1, "y": 157, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 47, "y": 155, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 47, "y": 155, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 92, "y": 155, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 92, "y": 155, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 47, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 47, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 93, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 93, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 139, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 139, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 183, "y": 155, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 183, "y": 155, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 137, "y": 155, "w": 46, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 26, "w": 46, "h": 48 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 137, "y": 155, "w": 46, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 26, "w": 46, "h": 48 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 1, "y": 157, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 1, "y": 157, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 47, "y": 155, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 47, "y": 155, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 92, "y": 155, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 92, "y": 155, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 47, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 47, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 93, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 93, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 139, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 139, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0039.png", + "frame": { "x": 183, "y": 155, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 183, "y": 155, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 137, "y": 155, "w": 46, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 26, "w": 46, "h": 48 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 137, "y": 155, "w": 46, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 26, "w": 46, "h": 48 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 1, "y": 157, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 1, "y": 157, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 47, "y": 155, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 47, "y": 155, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 92, "y": 155, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 92, "y": 155, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 47, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 47, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 93, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 93, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 139, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 139, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 183, "y": 155, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 183, "y": 155, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0057.png", + "frame": { "x": 137, "y": 155, "w": 46, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 26, "w": 46, "h": 48 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 137, "y": 155, "w": 46, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 26, "w": 46, "h": 48 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 1, "y": 157, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 1, "y": 157, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 47, "y": 155, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 47, "y": 155, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 92, "y": 155, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 92, "y": 155, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 47, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 47, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 93, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 93, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 139, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 139, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 183, "y": 155, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 183, "y": 155, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 137, "y": 155, "w": 46, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 26, "w": 46, "h": 48 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 137, "y": 155, "w": 46, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 26, "w": 46, "h": 48 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 1, "y": 157, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0076.png", + "frame": { "x": 1, "y": 157, "w": 45, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 25, "w": 45, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 47, "y": 155, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 47, "y": 155, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 92, "y": 155, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 92, "y": 155, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 47, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 47, "y": 105, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 189, "y": 1, "w": 47, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 23, "w": 47, "h": 51 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 189, "y": 52, "w": 47, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 23, "w": 47, "h": 51 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 1, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 48, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 95, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0088.png", + "frame": { "x": 95, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0089.png", + "frame": { "x": 1, "y": 53, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0090.png", + "frame": { "x": 47, "y": 53, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0091.png", + "frame": { "x": 93, "y": 53, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0092.png", + "frame": { "x": 139, "y": 53, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0093.png", + "frame": { "x": 142, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0094.png", + "frame": { "x": 142, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0095.png", + "frame": { "x": 95, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0096.png", + "frame": { "x": 95, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0097.png", + "frame": { "x": 185, "y": 103, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0098.png", + "frame": { "x": 185, "y": 103, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0099.png", + "frame": { "x": 139, "y": 53, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0100.png", + "frame": { "x": 139, "y": 53, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0101.png", + "frame": { "x": 142, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0102.png", + "frame": { "x": 142, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0103.png", + "frame": { "x": 142, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0104.png", + "frame": { "x": 95, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0105.png", + "frame": { "x": 95, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0106.png", + "frame": { "x": 185, "y": 103, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0107.png", + "frame": { "x": 185, "y": 103, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0108.png", + "frame": { "x": 93, "y": 53, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0109.png", + "frame": { "x": 1, "y": 105, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0110.png", + "frame": { "x": 189, "y": 52, "w": 47, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 23, "w": 47, "h": 51 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0111.png", + "frame": { "x": 189, "y": 1, "w": 47, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 22, "y": 23, "w": 47, "h": 51 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "782.png", + "format": "I8", + "size": { "w": 237, "h": 207 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/shiny/782.png b/public/images/pokemon/back/shiny/782.png index a775abe8bf413433ce2d3ab02ae7b6a94d84ae4f..e5bed3d1642d66f9ebf1e120609c7f120fd7ec5b 100644 GIT binary patch literal 3331 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 diff --git a/public/images/pokemon/back/shiny/783.json b/public/images/pokemon/back/shiny/783.json index 253da2ab9a8..17ec3df99a0 100644 --- a/public/images/pokemon/back/shiny/783.json +++ b/public/images/pokemon/back/shiny/783.json @@ -1,41 +1,965 @@ -{ - "textures": [ - { - "image": "783.png", - "format": "RGBA8888", - "size": { - "w": 69, - "h": 69 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 66, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 66, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 66, - "h": 69 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:e5544237a4fd9ef3e516be84f3a24a8a:dd780189298088c8e8eb741377c46b07:aab166e28c744865a0296041224dd01b$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 414, "y": 273, "w": 66, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 66, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 268, "y": 276, "w": 65, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 65, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 480, "y": 273, "w": 65, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 65, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 1, "y": 342, "w": 64, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 64, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 262, "y": 345, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 62, "h": 71 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 65, "y": 344, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 63, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 342, "y": 275, "w": 65, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 65, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 132, "y": 278, "w": 65, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 65, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 1, "y": 273, "w": 66, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 66, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 197, "y": 342, "w": 65, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 65, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 324, "y": 345, "w": 64, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 64, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 1, "y": 412, "w": 62, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 62, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 511, "y": 412, "w": 61, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 61, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 449, "y": 412, "w": 62, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 62, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 128, "y": 347, "w": 64, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 64, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 407, "y": 342, "w": 65, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 65, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 414, "y": 273, "w": 66, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 66, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 268, "y": 276, "w": 65, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 65, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 480, "y": 273, "w": 65, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 65, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 1, "y": 342, "w": 64, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 64, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 262, "y": 345, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 62, "h": 71 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 65, "y": 344, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 63, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 342, "y": 275, "w": 65, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 65, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 132, "y": 278, "w": 65, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 65, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 1, "y": 273, "w": 66, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 66, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 197, "y": 342, "w": 65, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 65, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 324, "y": 345, "w": 64, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 64, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 1, "y": 412, "w": 62, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 62, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 511, "y": 412, "w": 61, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 61, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 449, "y": 412, "w": 62, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 62, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 128, "y": 347, "w": 64, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 64, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 407, "y": 342, "w": 65, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 65, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 414, "y": 273, "w": 66, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 66, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 268, "y": 276, "w": 65, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 65, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 480, "y": 273, "w": 65, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 65, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 1, "y": 342, "w": 64, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 64, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 262, "y": 345, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 62, "h": 71 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 65, "y": 344, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 63, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 342, "y": 275, "w": 65, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 65, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 132, "y": 278, "w": 65, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 65, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 1, "y": 273, "w": 66, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 66, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 197, "y": 342, "w": 65, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 65, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 324, "y": 345, "w": 64, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 64, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 1, "y": 412, "w": 62, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 62, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 511, "y": 412, "w": 61, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 61, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 449, "y": 412, "w": 62, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 62, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 128, "y": 347, "w": 64, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 64, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 407, "y": 342, "w": 65, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 65, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 414, "y": 273, "w": 66, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 66, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 268, "y": 276, "w": 65, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 65, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 480, "y": 273, "w": 65, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 65, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 1, "y": 342, "w": 64, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 64, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 262, "y": 345, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 62, "h": 71 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 65, "y": 344, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 63, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 342, "y": 275, "w": 65, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 65, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 132, "y": 278, "w": 65, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 65, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 1, "y": 273, "w": 66, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 66, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 197, "y": 342, "w": 65, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 65, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 324, "y": 345, "w": 64, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 64, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 1, "y": 412, "w": 62, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 62, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 511, "y": 412, "w": 61, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 61, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 449, "y": 412, "w": 62, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 62, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 128, "y": 347, "w": 64, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 64, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 407, "y": 342, "w": 65, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 65, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 414, "y": 273, "w": 66, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 66, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 202, "y": 273, "w": 66, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 66, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 136, "y": 208, "w": 66, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 66, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 67, "y": 274, "w": 65, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 65, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 139, "y": 138, "w": 67, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 1, "w": 67, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 290, "y": 1, "w": 69, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 69, "h": 70 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 147, "y": 1, "w": 71, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 71, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 483, "y": 206, "w": 69, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 69, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 141, "y": 70, "w": 70, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 70, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 499, "y": 1, "w": 69, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 69, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 356, "y": 137, "w": 68, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 68, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 414, "y": 273, "w": 66, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 66, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 424, "y": 138, "w": 68, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 68, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 430, "y": 1, "w": 69, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 69, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 498, "y": 70, "w": 69, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 69, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 206, "y": 206, "w": 69, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 69, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 414, "y": 206, "w": 69, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 69, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 192, "y": 410, "w": 63, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 63, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 324, "y": 413, "w": 59, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 4, "w": 59, "h": 67 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 63, "y": 414, "w": 58, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 58, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 388, "y": 410, "w": 61, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 61, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 472, "y": 343, "w": 64, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 64, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 414, "y": 273, "w": 66, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 66, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 288, "y": 71, "w": 68, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 68, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 218, "y": 1, "w": 72, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 72, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 1, "y": 137, "w": 69, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 69, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 359, "y": 69, "w": 70, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 70, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 218, "y": 69, "w": 70, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 70, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 74, "y": 1, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 73, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 70, "y": 137, "w": 69, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 69, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 71, "y": 69, "w": 70, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 70, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 1, "y": 69, "w": 70, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 70, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 1, "y": 1, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 73, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 279, "y": 140, "w": 68, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 68, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 492, "y": 138, "w": 68, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 68, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 429, "y": 70, "w": 69, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 69, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 359, "y": 1, "w": 71, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 71, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 1, "y": 205, "w": 68, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 68, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 275, "y": 208, "w": 67, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 67, "h": 68 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 211, "y": 137, "w": 68, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 68, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 69, "y": 205, "w": 67, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 67, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 347, "y": 206, "w": 67, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 67, "h": 69 }, + "sourceSize": { "w": 75, "h": 71 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "783.png", + "format": "I8", + "size": { "w": 573, "h": 483 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/shiny/783.png b/public/images/pokemon/back/shiny/783.png index 6ba2506ecc865bbf82ed98ad49a0f09837a03233..30d6c49f5e07b0b8bb2c0a4dab0c289eeeaa0320 100644 GIT binary patch literal 24629 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 literal 731 zcmV<10wn#3P)%UX00DGTPE!Ct z=GbNc00Li0L_t(|UX9j2Z`wc@2Jkx-dA1S4Wnl27%8ops4wZ~_s!gYU1k-`aY?ds& zEZI=Fl?CNUW~9=+Ls_d#*)sE8dgp%!A-v|DK>F!<-m|Qe$vb0BN#o3RjmY{XcX5-E zQf{v>n}#4Nv7qY>NvTxDf=H zaTIdF2}pnkWzhfLT3}0qn*P72(cFo7h8|2!76~keY7<6FWw5dgAmRbR%R=BOA$Zvc zz-}_*pDAfF-zHd$uXl#8Xh`4JW*npD;15+7YUttc3czE$Oqoz{jC}A9ujxD#0p7Jt z=Of3)yN1w79_|rht-cH)y_EvlI$5R4cyhBfU^;zcTnGW$U1^N9+fCmy-qF%Cd3yU< zs}2W%5$mo`E}QL1Or~No%6bp6F^~IAd=vv2C_~z}5BJ9G_kT}Jm>cSu9V}(`ri|)s zIB-H)cXPq$LuGTZ2#7k_v_i?_k)e=RDWrmKpPu77h##2@^a!DY7CDz0Mc zpycT#uFyo3sFQ=7>7bqoBIKjsfxc0}7+B~sSqBj+#DepvAmvJ#D(mfJZHOcEEDMts zRByfc{f8KIY~0GIAY}}SgeZwkOGBAAJ2r$m#jg6jaVx_-_3u>a3AE35CaR28I~&E^ z;@TN?Ah$n~Gt*|D((*?qPhPLz2-B~OSD4j#4AaDz-o!pPUZo4{7+}nxD!sXM)zPbr z@5Du*Ke%i@Z%gA}3Ub)ME-HR=+4+KjQrZv|x>(lCxwlmECW40>>vV8Z|a N002ovPDHLkV1h;2QHuZo diff --git a/public/images/pokemon/back/shiny/784.json b/public/images/pokemon/back/shiny/784.json index 552fb3c9595..87ddecc06fb 100644 --- a/public/images/pokemon/back/shiny/784.json +++ b/public/images/pokemon/back/shiny/784.json @@ -1,41 +1,812 @@ -{ - "textures": [ - { - "image": "784.png", - "format": "RGBA8888", - "size": { - "w": 92, - "h": 92 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 92, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 92, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 92, - "h": 81 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:3e83e25b8e7e32a8993a48c7e36af553:6ed75435976e4481fad74457807089c7:c2f7ca3ab1075b8c824730653d891244$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 183, "y": 233, "w": 90, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 90, "h": 81 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 1, "y": 160, "w": 94, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 94, "h": 81 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 530, "y": 81, "w": 98, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 98, "h": 81 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 530, "y": 1, "w": 103, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 103, "h": 80 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 324, "y": 1, "w": 106, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 106, "h": 80 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 1, "y": 1, "w": 110, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 110, "h": 79 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 214, "y": 1, "w": 110, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 110, "h": 78 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 633, "y": 1, "w": 106, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 106, "h": 77 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 198, "y": 156, "w": 102, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 102, "h": 77 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 300, "y": 159, "w": 97, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 5, "w": 97, "h": 80 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 95, "y": 166, "w": 88, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 2, "w": 88, "h": 83 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 358, "y": 241, "w": 83, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 4, "w": 83, "h": 81 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 681, "y": 318, "w": 81, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 6, "w": 81, "h": 79 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 87, "y": 249, "w": 82, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 82, "h": 80 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 441, "y": 242, "w": 84, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 5, "w": 84, "h": 80 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 273, "y": 239, "w": 85, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 85, "h": 81 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 183, "y": 233, "w": 90, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 90, "h": 81 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 1, "y": 160, "w": 94, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 94, "h": 81 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 530, "y": 81, "w": 98, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 98, "h": 81 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 530, "y": 1, "w": 103, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 103, "h": 80 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 324, "y": 1, "w": 106, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 106, "h": 80 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 1, "y": 1, "w": 110, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 110, "h": 79 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 214, "y": 1, "w": 110, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 110, "h": 78 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 633, "y": 1, "w": 106, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 106, "h": 77 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 198, "y": 156, "w": 102, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 102, "h": 77 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 300, "y": 159, "w": 97, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 5, "w": 97, "h": 80 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 95, "y": 166, "w": 88, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 2, "w": 88, "h": 83 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 358, "y": 241, "w": 83, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 4, "w": 83, "h": 81 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 681, "y": 318, "w": 81, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 6, "w": 81, "h": 79 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 87, "y": 249, "w": 82, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 82, "h": 80 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 441, "y": 242, "w": 84, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 5, "w": 84, "h": 80 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 273, "y": 239, "w": 85, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 85, "h": 81 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 183, "y": 233, "w": 90, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 90, "h": 81 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 1, "y": 160, "w": 94, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 94, "h": 81 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 530, "y": 81, "w": 98, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 98, "h": 81 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 530, "y": 1, "w": 103, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 103, "h": 80 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 324, "y": 1, "w": 106, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 106, "h": 80 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 1, "y": 1, "w": 110, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 110, "h": 79 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 214, "y": 1, "w": 110, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 110, "h": 78 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 633, "y": 1, "w": 106, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 106, "h": 77 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 198, "y": 156, "w": 102, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 102, "h": 77 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 300, "y": 159, "w": 97, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 5, "w": 97, "h": 80 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 95, "y": 166, "w": 88, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 2, "w": 88, "h": 83 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 358, "y": 241, "w": 83, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 4, "w": 83, "h": 81 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 681, "y": 318, "w": 81, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 6, "w": 81, "h": 79 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 87, "y": 249, "w": 82, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 82, "h": 80 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 441, "y": 242, "w": 84, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 5, "w": 84, "h": 80 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 273, "y": 239, "w": 85, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 85, "h": 81 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 183, "y": 233, "w": 90, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 90, "h": 81 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 1, "y": 160, "w": 94, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 94, "h": 81 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 530, "y": 81, "w": 98, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 98, "h": 81 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 530, "y": 1, "w": 103, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 103, "h": 80 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 324, "y": 1, "w": 106, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 106, "h": 80 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 1, "y": 1, "w": 110, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 110, "h": 79 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 214, "y": 1, "w": 110, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 110, "h": 78 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 633, "y": 1, "w": 106, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 106, "h": 77 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 198, "y": 156, "w": 102, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 102, "h": 77 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 300, "y": 159, "w": 97, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 5, "w": 97, "h": 80 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 95, "y": 166, "w": 88, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 2, "w": 88, "h": 83 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 358, "y": 241, "w": 83, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 4, "w": 83, "h": 81 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 681, "y": 318, "w": 81, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 6, "w": 81, "h": 79 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 87, "y": 249, "w": 82, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 5, "w": 82, "h": 80 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 441, "y": 242, "w": 84, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 5, "w": 84, "h": 80 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 273, "y": 239, "w": 85, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 85, "h": 81 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 397, "y": 160, "w": 93, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 93, "h": 81 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 101, "y": 85, "w": 97, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 97, "h": 81 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 1, "y": 80, "w": 100, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 100, "h": 80 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 633, "y": 78, "w": 102, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 102, "h": 79 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 214, "y": 79, "w": 104, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 8, "w": 104, "h": 77 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 420, "y": 84, "w": 104, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 9, "w": 104, "h": 76 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 318, "y": 81, "w": 102, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 102, "h": 78 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 628, "y": 157, "w": 96, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 96, "h": 81 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 430, "y": 1, "w": 100, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 100, "h": 83 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 111, "y": 1, "w": 103, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 103, "h": 84 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 490, "y": 162, "w": 92, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 5, "w": 92, "h": 80 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 327, "y": 322, "w": 75, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 33, "y": 0, "w": 75, "h": 85 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 476, "y": 400, "w": 72, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 12, "w": 72, "h": 74 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 153, "y": 394, "w": 72, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 5, "w": 72, "h": 80 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 681, "y": 397, "w": 72, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 36, "y": 10, "w": 72, "h": 75 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 80, "y": 329, "w": 73, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 35, "y": 5, "w": 73, "h": 80 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 402, "y": 322, "w": 74, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 34, "y": 3, "w": 74, "h": 82 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 251, "y": 320, "w": 76, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 31, "y": 1, "w": 76, "h": 84 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 604, "y": 318, "w": 77, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 29, "y": 1, "w": 77, "h": 84 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 525, "y": 318, "w": 79, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 3, "w": 79, "h": 82 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 1, "y": 320, "w": 79, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 24, "y": 4, "w": 79, "h": 81 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 169, "y": 314, "w": 82, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 5, "w": 82, "h": 80 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 1, "y": 241, "w": 86, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 6, "w": 86, "h": 79 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 672, "y": 238, "w": 87, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 5, "w": 87, "h": 80 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 582, "y": 238, "w": 90, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 5, "w": 90, "h": 80 }, + "sourceSize": { "w": 112, "h": 86 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "784.png", + "format": "I8", + "size": { "w": 763, "h": 475 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/shiny/784.png b/public/images/pokemon/back/shiny/784.png index c32690792ac76b79179b5d57f7c9e180a6339c85..51a3962a6ea0fee62e9e659e4b0dcf3bd7060db6 100644 GIT binary patch literal 44603 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�w18CkSzo+I1^Q z9vNh)0jg5cU@0p)WXqaDJ=8gY{tQX7^Lv+WMY0g1CVLM1Nk*h&5zWQCUNw?cT~V&(b7V!NlT+<;_o@CWiodxva7|2c=`{?mmNehir)X**$`&ER8DL~)+B=kt+iK`7R zx@UdjOYG@%Mj<=7U}MhJr(9?)3HuEFRZelzuW!H0bn8e~!lq$5id?Y-QGl?q@LG}c zbn{DNm^rMg5S?AWC<2j)m|1|V=48lS@IyyKsEwnBWL2!872e^o`=LZg&!OWXADnA& z#lrH8g#K{YQfxI8_6Tp+~rZ!ZK-v}@jlw_mGAi05Mn6wD7 zYsx|c(8ls0wj1*7(U5nP8n9ouw=Fb|%;=urs3E+jiFagn4NV;l^`}q?J>))Es*ax( z3)~=?9~L2-{&59sI{hJqJa@;kWz*)oX~Ew>L*F@(EKUJG9YX4AdDyp2#&dRs!-d$L z3vlX&?&kdz0f@=ITA8~+h`ro`J$_i0GGvZo`!AkYz~U_mUyiYv#1FI@NE{TBhT`*< zW)1aba9%Gx8BRAurqILOAU;7F{bS?EwuKfvP85=}=`jkKjqB)Mhh0@cSi%WtTa|Dp z*r$Vb^e|dlzMRYIO#7rj{3-q->}n=qGP_z?f`}f{U^jHvAxSP0edHVsEN1R8FQlyO zGwgHirJR5!B4Q`uQFczrYg67S*U)lJLu2bjZ1e8d4Mg#05oZJ)3EAlpoPG3VGHT1fsq1Jkj#V=W1jBRQTq$kY{ zy4Kf?qeTiit7Q6(Z?+pQWg)~78g2>aXoL(aj{=001?cANG*jY}7Bwcg@ON|fl|f(V zRgfSL6R^K_4?$B9OM{?t91l{quN0kKtcmnxSYhFmqacH0r!NU85s_Ju@MW={wx%67 za!-$iBQtO5BsS$dABCg~6_bVlrjN5-$?)>fvnAH$qT=WV))acg`s&wGbg^HhkfKPU zke3!n9myHMRL4oh7L+WfQH!R35V79{zmTh7zvMZh`^v{7>|^jw@?+o89s^xuC`$zV zxrcUL{VWuUv)W`-o2( z`UL!Fwn7dV`E&$ag`S)nlE zp*v?+3lwZEz|wQ3d;TSnsXp9t{v1-X#h0Pr+Q>MRb7Le5l2$V>| zGgIz8y`p8u&Pf!N&O0UOCk^E)$~0sft}+7((N4L09eRLQ8o5DX0@dy-Wr|24U4cSI z5p^`$z)~1a9RcA@ledIhOFOVvG3WesqcBxQqpC3$ZJ0WQhjMM;b83Lkg}b zVjsYup;w1?SjLAmUJ`1YN$@5$>l6Q2K|f%eNR>dYaI`68Vvs;(+z-MU-2lOlB|iAw za>6LFr~yOoO|xJ>li;C6G7{Z~5}?6##6ci|qBw*=A4{Ho&XzLI=Hes6013__ z3@*<=H4T_+G{F3*9l54#VGuRsa}CW0=;7lXpOOBu@ujOYF!bcsr$t;jE-J4w{^8G`KTn3f)b>x{CxtUmyOgpb!L&H-J`}r3Ikh2fH%E|s zf~K2!NHvN{PONi{K^jPnl+yr3;iN<`hDLNq4}pEK2vSgb(0h(5$~Cl#hDL@ft+YL-6{c$v>_M`@>{znlzUf}K1p&s?1!P|<#m-b3 ziN2#d^CO=+XzOTR#mwCxpvoXc8jul@Smu10)>9Z+{(#;|6eM?Frlj3Yt(sNkj9NgP#>78oJLxKJe zkWCL{gVr_W&`0d=0D7LVFW`R(^oK>e55)_QuS62)&k6fo*U=e6;x**aIdqs-0t65{ zB-!&RUBS`FRz<>d8t}n-XiX>Q)NoI)4>Z)C!y)ttIhga+l2>U^g9?W{)8P~LQyKRj z^p~+u+3zk{U5;hozF;EBj+R;Ou_X6(2;8GeddBEclX}}=?tB4g`Gi^>!v89=Cu&qwzZZunvi-Q^$;bKohQLr*fkCN*e< z(R>f%@{w_NmJIxvR&5Og>7j{L^=hx`5^Vn2MV{jdYF;3Ar z$G!?L>(#^%0t<*V;N?Z5XBw~%#p}5O{v7+OU_WT+s3O+TRqxcELN)ZvS0y%Ox;T!51KJ)pwm#C5?J9b=LVV|SgJSaln_2&GfLpeMidaM6z|E5=rn2U7vIV& z*pC9#XAXc~t~5+qBleYt;sm>pysQ^9cRkqA6&}MF8N{b)5@Vk6yQJg~rNC-Uk8CWQ!P;SiQKCELY>;vCH z)`Na>%VW>aWYCX^b!Du~bqw6ZrSb`h&Qkd~CGK)0D7xb-n5@%)(t2K(vm^=4prGG$ zPsAGUg+3BvCI_uK024|~a)z+qrI3+7UdaYai=qX9O|Fj+i`;yQbf%&BJ8N_xHP-=G zTt^ngBs$A-3W>XTs1GvtG7TuOa0dT+F-tn^-!)a_qlRu}`y-(T#;HMtLLMq1l+LI^ z(g&WO92FdY(()#;!aFE`A$$!-F`#>*{xiXN#J~@zE zU56S%qBEG-!S&4DOamTRR=q^Rhusq^=r-sNhaP-G)+jZoQpivV(LGV=;9~N08u3qf z8(TD>9`+wYFMh}e;%-4fza~F%9ive*Vn2=0T+D^=90wbr0lc8GR|mvihuqWd6mLZS zc<2d28Knko3YmZOrX36^i2wOB3EgFL043`?TIRk80}c6M+#cktS@N>dmA_r=tIYj^ zs_Zo2k}p(44Z5d0p+6paf?K{;3NcYgc2`%jw8JzddM8FjD-EvZa<_$na`%<&x`O=> zw+A_^RuQeIkNub!jtq1m0|j!07fAT;+*5lBBcW%s2slU~W&duxa!{J+*`}YFr}?}M zx-YoESuZ3nkChU`OGIQa1HDSZf99U*Gq@0XE{rfhA#dNo(DOKWnmc>7xvvX2xt6?K z$=t7Gpu@hf@#XKhr~2^U4n3n3(x)Aad$IpWJo(O^zwf>-sVF3dSH~KRG559axTnT= zU)J3qh4hpSe&S79lljO^HG9>6zuA3VQ_-bmexC-khyRLu>Wuh3-3?MmPM*H8^ugDd zUTr*FVlc)41zrZ=JY4@NK&Lh(dbL59miB_)G8& zUulE?SA^)k_A7Sq>kL$e#gqO21pL%)K*UEBGC&{Chp`6;*X`J^zve#h@orDIe^sRE z>HO$_8~y*vJb#~o(y;#){HA;3yPbSMA;T%4d7dYEvS&Ah@H&KnDS3G)V4djdyI0|W zXn;P)7jws@vAznuCzdqkJxw2$t@09maw~hU_U}`Bw*h?cITdbI%%*@}7APWibDP7tBhOhT{8HALqimdj(gMHtP(_fx|jysj&$W1Q_szcu(3ewkWXvkIL|BR2ibx-uyvVgDtm`r7vpYU`sF z-hbCPr{OTfftr`we0BMKGbqNLBK9%C`l9P6pF~7_R^`s#kny(S!1lunKEtp00)rje z;eBlH4EvzQ;ZoAOJ~3K~$1NM_1Kw6ju+V+LRGZ(7m}5Ja@B|y!?y&;$PHM zP7~53H8?8{)8l^Mk4s!4P8N6A_HvGVOt9?Dx;>vz=>qo2J@;YBKL0`3XQ#O$*AHE} z0RE%fUj_S#S=k&XfGJ2{J26B(PigxR3i?9!2{s`XxFvw! z9VriAkL#HH^lds7lJZJY*-_y3(;z`a$ZHZ%R0czTT7$C>n;@$}5k6X#S2HK<-^edU z_8}GYk)#H_%j-?IVeChN56o5cnZ=#(&f@K4eEjMU1_>4yj3Zg=$ziuB*grnVNYmM8 z*6p1jlVRVJaw&u?{1#w68(~&{JrxYg?dYcvnv6{Zr#pUn%3@X@pcN8uREEk{X3o@m zLG?(jqtynpJx+b39e9Sf*Fr+FBA#TT!&f*Xj??dLY)&k1OIbvJMd{Pil?nVNSIv=W znUg1!1T3v4?$1e?efytoc-YtPBt~~fVC3^&E8x8-o?IrsOlrxm?WX%vW()~ylv*46 zUSS{jIeffY#fLXuog76xkSe|U{_;D@U^K8FNzkAA6^MdWVFd|mU>EpBlu0-b8__Q0 z+4R+w2uED3m?MYjLFlV35AzeiK*v|gzP$ac1mQ|y-$Hoc zAMzvE=3p9*#y68KSeQ`vY1)0S;Br)hBsK3QpQwQhGJ}9vXxGW zvlOzh1|}h86lv0Lknt3KJvx+?-l)?1=BgYPO=;pt9m4do3{NPQebsiKC61FmCGG^4 zd@??jU#SGE?f6wea3b$&sVm^;15L3(pJ4n@Qp8s*(%XLGi|x+e%A*TjF4(&FjBJXO z1-u}HX2RxHstm*ue7_E(HNgYayf!c+g^GBT``> zB)Oq5eWA+3G?2IFeJ{=m=StNPVaX0zR~h=4V97CnmbcM6l=bt($3}ji$%qB}5UIYf z+0aM$YkcurV-#Ledl<=zlCHe)Qz$qJ{*Hh@5bAyno|FN7Wia>yn{(?LRbE$gPOW$1 zsv-)S?NzrggRl6og+RjgO(o7iQfG?Pz8t1)vmr*VxBFT$LDhi@g;E{CH|?I&!?Yj7 zCoCIbMQ{EC71eC@Iw+djKz$q-@t%vT4R<`M?k} z#N?4`LmUE2OBvXRv3W*+1N(tmgQC{c$!xFE{g`qG1D6x$mT!Vj#R=Mur2EO}UF+Ab z+|Ty=dcLN>xg4tso811q zMC0s?pmc?PibeI;(<{oC6ZG=~Lpv-w^fPWz7?dH5jqAXO{ucC)YW4@Sy#u&10jzt$|Qrhlo#o62;sK7(L z<$Z%--^cu_=W7b}WZp~ZNjoamxbWokC%<>@X5x->%MBrGpy1LYR=Sb|m`a4d2|s-x zHcQ}43=u)vFY;&>z;911DdTY{g*8`@m4K=K%VtY6zecX5#fKQE+PZevDQnHD6Fd9l zNPY2D%SU;4pLwD{&eGO_rvN#km=Ir-a~kWB21?*58XwJ3@~iefLU9W;a97)2 zN|4P63k}0OpHIB(A6Nh=f>sqO1s6jV6&`xim?}vVj!_Ivd3IzuFjQm#Q%e~>6{(ul zBfalOX1hBTugtc$`c@;S&&!+*)m9#pZ80u4xGM~!AGm#;jrKNEPU3C`9;TQvy=v7K zsH7(KAjR5_;-bj(9j+D+x84)AzD8N0RL(T6F9ioh*hpCh{^O^_sin;EhYFf z3xFmIK*DAz1D`vV0&u+sW^a%d>gSc8G_u_#mU1+5Q!|x$KE{50?4y_dpT&*dx%3^u zzGF9DKVOMgsjX6}o>tnR9NkM9sy;m5?`_*=X|mtyUrU`oN^CLty;w-%eV7M3bk_-Fsia18d($+dY3cWt3sRSzOsyZ{9vkUWy*@ za(tAhR!EB5PmU?#G&iF##5`BbYnC!k4f?SR+%#S|oc9P8AF+QGX|W}D8*JRON3X?iw0FF)}%%47h zr&3JBJ{>tXZAZdRQyqCJBB~_XtIq^#am$X|)IQuQD#gT20*@~npHNJ0oyuwHEIq;! z_fjm_9|J!_ABoQvupg4%SLgX{^AJ+lUsqj8qIA09$`eO~wR2u5V*!(90kyb-jLotE zlG)TF*loD?#ap*vn_V;Z_oa~`T3@^Se7;dtFkyAVNvys~_%m^zkB^r=Pl3lJ(uGg- z)Udw>tZ;f&r&9TL^%_qp$zF;TZ$=y87N8&TztLvvF4K-5u{!>+nBb@;@lrEheHG+Y z3)0#4lVyi`hy?_Qg~<;b_@Ipm#{ng<{SV$}EM2qX51_LiIS-BUvuzI8BacWg#`c!W zCK@w|yM6204zqdS@lqgpRRT{chp&xLdpJw)c?(pZCpH$<;Cw=+-dq4XY{>f2`6Kz+ zd+1@`2>vH(Yv!F$5mYOg9x1`o7fLLkrVN_=aM0qI75+Y7Pb^i}%yF_)fwnJ-s@%-V z!nY0foK?NUT-@C|09D`#k*6Javh1qbZ4Uj_c%Hc2W>aDi9>{WTqhw{CqwC-05IVRC z`wwov=sSN;F z5HZXGtk{3PdGmwmniK3_&nxqZN2cvf3zcc@TI2sloK<5UB5tb%js+gfuG+ook{VCq zdN~;(jdG#k15DlQ81v}x_l$T0aB_ViVSiuMn_CmS&Onny^9Xhp zV6RfKRk6RI;NC5QnHy3lwsP|kEK1P!|04ExN7Z*$?P;WZ)Czrb;IT2xR86KyINk!i zvXv6x6=t>sPVW-sKxCj*Y|8?ey)pK~VqiCb_tOUc;A(7h2~J8R6`%>2P1pIUy#${I z7-9hfMc`+OSsU$5K)(oPZZP`1#Xk29X6399`!l0G80m;QCi?t$N7caS_p#vfM(l^`Oh=UbbZB>BfrrnDmu$0S(_Qd)SYm3UEC9x0 z)|01=3H98z+rgF!Jx1(vf|jtaBK1Y^k4k$m@Qh#|WD7L#g4gTnRtlAG5TF~o`RMPL z7zV;lo}412^5A>_|1L%7OH#n!%&C>1ilW*WnJvx(29_Ad8D{~`7_=hv#ctWEZo60& z_{_O!rA{)mg#F##*;{QNV4tLI!~SUCF&(kVwm_+KtnyskN=Y)pIWE9cUGRVe^B=!X zOZb6{1^}~%_ZB{5aQtLU1@KEw&4ncAa#8KjY~Coq`%kuZg#}o53L%eK2D=?=>~n1; zJcsh;S{6AIjMPu^Rt9%fnFLF_KM7Rpp)%MDJSKukJD^WcTcBtJSGQ6?p`RX}A?VL3 zz4eIwg*R?EA=rf&E_Ph{1r|yvwuN0hE%kvVR?aL)SFVK2`PtNz4f|J=A#?8&Hn)ik zQ$%@xmRBC9vC=U|!$+w)q2w7@YDnwf>lC~dZCPJz#wnmiBYtKd>)4q2+hYqNK6^-(11Pk}dtGUGD^9$Rt+yaOs& ziRI+WWd%6GKXpFS)2MiK7M~nK>K-_D7RwqnYk?R?D?TzL*Q9_ zIq*2sGyT~n4Q{2pKHf@!9R1N{kk60jE0YIAZ*F^uti&hrip#DdLX-r8`A|uk6EZuw zSw|b6D1%ptfDVJW!_x>QtI8wF-PmuYgQ+sN@nk$61!pFSt}1ZUPr%=kHW$XJEH1Vu z^lG0F)YB$01HWtN)lz$fIn^YT-CctyYnC46m{!f=4GC5bgTYO;))N-D9Y>imp;j`MW$o4br6L`XE@aN$mb^F3c4gR!4tSU*fzIHRp z%D_nk4lIvRW%Ps*^B<;b8wJKAV^h)H7Ey*9pOVJ4amjdrIa0_ZSclkO$uBu^x{E2D z>`!6YGI7I}0*{E>doF>e`be)j0(iUB!tN`%SUy)=+5&yvzm@WUKa}MLp}rIgKVm<` zQDEr55c|!$aN$IJV5UkE@OAa7l9WW%27f$=Eocx=*i*(prRuc(r+OB~7H-+dL)L}& zWp*b*3B?AoV|Ws&a{GX1v`J+tIs0@5VGK~lw=K!|oJ1YJ#+T;A`bZ?1RqSKF#2#IC zfYe!f+5(*u_OYCN_fASG@J!$}Wb-l`MbcHG17W{?c_j-;SCVu}G3N<|sgT4)_$8f5 zGAqMe_d8pyvMRc@;B_IQTxeQ+g-Ow=4Prbo6+_2=6ZUxmYcmPPC{|H?R%huC=ZS9uKL}slu}@FH$Mqc@KWUlnjb-e2B0Z=OjnF?-lJaa?Rg&sG ziZbRr{P&d6(?#A+AS+naF`|3{`$aQ68079Ay)Hw9V{p;VKQ_o?#V#9qmYeb-3oOdJ zd_9{ksi_0ShpGY%!`0*&x8<*&&?`(Lx_y}=uW&h})a3c`9x0d@`!CC#HZ#K`8kxMG zy@Y+rrrY4J;h>?6G3;mbB9^EeZXuCX%}L4jh;pSBs175Mpg-e17cAC zKMr)5?7p}z@iF*I0*~95`HtvO-btOsMMX9T@lgFvZFo=8<93tUqfzIH?>a92hndKf z9@5$Efv~?FO9kpU=?kH6!v2GcsFZ=Oibv%2*Gk8& z=zdQF5C(}}FJV8fcoin;ROR3vpqxTa%0aZ@%{j^BO@`_uvR(~apz%EMeb~pFe({0#)sKP}`;qceY@J`_072cf0Iieh%BU#je;#g9< z>t29Af24M!p}#i*e_;y^BJEjZolFP&@6ATWd3^Q$ReUR0_IBxHcAgz?G+ z@TyWLf9Pz1-c(a#n8W#Jf1vrm8}Uu+TTA0HIVmOaiVu|};;BfcVj;;6{;o1EIzzT9 z?+@upZd8e0e+6oXDg9xW75?JsUBY{N&XK4Bzgco6FLM9B8!`i_CWB8Z-8A^=6+yBe zRB`>HsaRAX5?9>tgi6kG1UUh;ZGm?u)1|Vz6!KHh+u!xm8540`?`=s(0>_U7HClh zl^&uWvdIpO>Y0qnr=XQZ6wo`~Uk1O{QCc%)X$z|b=d=gV{^^s;6F7=n2Oj>(%rAE} z9D&i;uN|hh?tq$?P-Z;sFYePbzqC{;NmIH+l)NwtASaR!F4xLhON|D zHLC4!eC3sT{sPN5PDym+V=Bc&D1HhiIZ!hgn1LEP%_;?+IEz`fLJjA?cn?%n>N4y<@*U96!T-E~{jnh+hkjIE zs3euX!srKU5!J2??syu*{@JM5rcw=mqE_PTR;ZGhW`jw=3(rIiIgEGMEhE&fb zqeAd!tD3czzm0tv*rzq0GPeZ&n@?D0;^w!H)^H;UZ~qv;PEm0+o;UbaJuP?qahqms zrqHHEguCCO`FsQWS^}>|mUvX}`pDf6k z5B8YPo{Y^PI}lLk3j+SNcMKry10nZGh5ser{-4v{MZ11vSw(1*cm_5HP@&+1cCnJ= z!|7GyO{kACWkfe*@`fWGPSkQg*h*81f5jcp_3ZW^VvXjrCqpxUM|L2f<!cwEp)B(@^zE(QBZ)gfhw8?pd&%)`;P2UoPe zjQu!1FZ#sx_u24Up5YtN4}(F<;#x|TX>`gXr|tj8qq+quLgvE4<#gsasl5I@m6(~TUf1*4qU8FT4O7r-CXah|)6I#%Z)9CeD zdy-_!u^)FpUocJgW><*^B_i};Z{MvXjVVLCp=Ix2)Wg9V&pLjzAj7OwfdXRiK22xZ zt=yb64UKR2X93ZMX{hc0xCdI>0+nrpR6n|FjUvi(z3NJ52Sq)aj`M>ttjZYihJzlC zz~;V*`!oeZfdXKfzhQ=h{tTtkod$1#VpgU1fvB2%+5(NVpXx`(-G587AJXjhWL4D1 zgBX=zbVIdX+EME^u^DFd$55d7&SXaYnMEeD1&WpZtkc6*as0yYVn*V{6seZ7(t zd$cOU=7w~~-(_s$?b`*4?)YEuXK4%cxcv{0vby5-|6S0hTL|t%|1T6Zri{@n`pb;% zQu}IwqC5Eg{tOr*>k%d`QK!d9Zo~e1LyDVs`fWvhEx7!IvE9+`El_kvyWO8jo$3se z=9T~-{k$?_p||xL;6Dy>yQ01oTz<&uMGZ?KfAUCN@a^%mQ0r`|HAP#YwSeM8Q+fxi-5eo3w6Nsap-HvejPAD-_&ET{?cLvhuw(_eo(_B(R^7nbos z`yI9Z7Wi2w-vR%)ulsieH3j|Ek&N##;QtW%5qypOtMlTgcE_yrxSPP!I&>J;?+i*+_W z^{a*Q&kJhoLm?VWS)Gxmq# ziA~Po6Z1SG=i5oJPrcrYeSgV2`%~@V4E}`9A+nfvTrcRMPG)tb(!ji9q5RXU(?$zw zUhaW1h6$F0PuPFq1&_;u@Ak^T@5kcFL4j2{dld6zgB^NNi;uRuTkqHVyw#!W^-8Cf z+Jk3wP9x7OojR`Ob=3Rbz1^}@u)=6R-HyTCTWL>B0e@b5n2NOrzcM;aVk>ssENXb^ zT}-PxNb3CNLiqq^lv$g^EfWrYe?t6EeEluH)c(MEP~b*28s$uMcFM%u?b8rc$xIDS zE6sDlD(Ai1de^+OB>(=9e?8QT$WP$xKYEe+#cRv4-?diMV23nQ_ZS*`D?R(VJ489) zZj&307TfruqC6ADDwGI-TLSpcZhtazlNbP-#Ur`F)uXv}2*1}b?F7{{dT*Y}Spg#9 z8`z(PgBmhleD!>ML7AtEv;y{BUV8|1J^FpO`fhNM9uGAQDr)2(1ut2v58XT0e}l00 zb^gXe`A}Vhz37Y>bq^v5_0Lj>V!AI92~V^-w;V1>CSPL%KMC6Bf_FX>V4SuoU0Q)Gdu_OPbfLju2GGl*@si7vA$)-?Y5|CNdw zAQ!HO=G?Y--&4D!OaAUc`9NKRppFKMGC{got*p~)3my^seC@ptPsFIJpJS8czc&*W zbV{J7V)000f1k=e-M!%oDqWsn+5rEAk;E2Ce8#MA20w9!$st60(mUi|D_yMS=kUe_ zU3>6aY&$r0aB1}mQPX%uQ7md?cYqwULfy9}&ibzSx&omZdG`lSqhBomJ#C!yBoUxA zV-g4L=95G`RXFL9m{Wf3C4if}Db$KbIrc*+!FR;^ZQjU%l{R^O##XyQl~af|&yFlW zJF6-KzSN?3HX&5!UqN>J_X7Amzdbb89b2Wkn6?93>cN)w?%w z(KnoYoi7#2{ma|VrjDGd&kc6lXWg81j{R`$7`>YThk+yXfo5XJN)HOe;?YZrM_SGh zMa)v>37@Q-{0eTs5tZr$Rc|rV0}F`E+LsvcwWfkqR~z(&C^bXe^oUNz<#BuvAvJbPkrybZw|?Et^1N)k+1WGLOFfDUxdqdw!5e5dD_#YWinUa z%IF#TIBB~5lWwP{&JKNpcwH;@vD%r4{bnwI3ol*2#T6rl^ni5_6Fp)-`+&`?(t>XW<*0>fsd^it$XI-eOmZ zoLP_!>I*M^tYoELIj@OMG$2sVat3_zMoSsRYdrKSO~-} zq|Q-|w#@>KeGy6Pq#j;{lE{9@s0dT%_gO>^NRo4uMwe?AhvL!HDjosdvJx&F57(tp zEIjskNszz&zfVEs*|tPn8M4%Iz+1goo|emPj%!?S?o+QX@~>` z^3d21bpLM)`;*L>)2os$Jr|FZ0!7d#IkUe77hYP9P6W1hNKy3?1KbByo)AVq`=chc(ycs=$8ZMgKu~`Pkj=# zNSUh9`7u^CVhVkwpNb{_CBd&-dlqS<#Y&~4GDI2sNO{lejK~k*r`&&@OS+W!r+kdB z%9)0B=`&N2CJ^X8a; zO&;GJ@!|w5t343-F&en2m}+iwu4y=W-z4^XDr)d4nl;d@pqA#QdqLkZmq1^a-5w4r z?b(T{Yl6r(3v^Adt`@$fiY>M+5{Povtz+vardSu^)gT1Ds41 z>pD7MtNfu9R6)-at(4qi9#Bp@8;O{aw>s}_jJF8>0MYXqg!AXUg8s_2hxka_;r1Ga zr_=DPcsbB234zXWO~X@9H|r3U&4T`^dZ1aO#ga^_ z!WL%962bYPNGiE*hJ8*;PoJfUtJ)DX^RajIL=oLRNK+)OpfNW6xN}Dvz;B z`MN`)T$dsIK_iDAPxZIIv{}%=esrX3LQ_N75&A2i4VlAFUZr<81~(Jbh_H8*MVBf_ zr`pl(V{oa(WNH5=H?!N{^+A!Og#7|ng+fr}nd%aV!}{W(bW~y1^!^UG?Up<7&dvhS zGY9p({EN^@`&3PIo@*NTX8EdDWay{f*IMtVSmkt`{80$=g8o_xp%O8{J{2~~n*~*o zpuu*q?;Lqk!pr`L3iemhqA=I;7R^b4-l3d#FI}2M=#oXeu6*1#pDn03LLBM=5>wAX z6&t3{!PkaH+5T~7=Crdx(TT?{FyO0Axo3vx0QT#(2k~)>6DL_$^H5ELThLqV9K~5T zEXZS(qgYi!sBplEHX9t);3_qUSk%L@*L14BjeR8&ve!Dnd_JF!?(pX~hT!K*Wzi&U z$^A=D2o!vbV>!=d=Y^5g>**eOdF;@mUkQlEIy`l8f~n-ssdj{3CWk&`EWjfR0AKc2 zpR~*uwIPZyilG<;qd5EXS0K|fS6Zt5Cg%~cU#VqF?_Q~eQ?+{EM}3E*R>hdICgLn- zG2DSWWTofQsrqBZG?U5EV(W^0KHu9G5RbqkoRFB@PvMM2M-f%~PIeIElB`>ZT`+p|_flnRPbW2iw6Ht-f`W7^u?2{(BHI zmw5`4%Hi3XHAn^0bMh!Pjgn2tS4c0=>)apJonlHs-*Mw0CS!ECPvOm%>up?!U)A_PRA2vNufWEA|$12|Qx ztY3LrG15{Uw#WjC3j3s;vETl9EIq7JdkAHo($^w9!P0N+Sh~gYRW(8o`XmW*g{ZMU zWw6n%uufjYKCFU#-p4<{C~gkbPt`YyoDoh2S%)#60sdGD!C&xwl&(N}4gsZ_L?3EL zAhn}{0s|>$5r^4UmUHwg4@PM%Q6sR)M2ofQs<-lW27IxB-9JBMN?HC@sXgTI?7qt? zniQ88XL>}fvRVd_BeLD>95RDNSa6-Z1R)ARf_yo>l~S?7W&yuSkx$i|pucjO&=Jam zpdXkI8Gxg`ox;R-D95yvvgmTwroF!SE>vJi&H?*Cv7+*dl*b`ngJYD|d~}%SoJtg> zDlaSHWqYO~Tav}YK_jNhJY(qy_#w;VrxXid8bHN_Dh;^YU_c=u|9YnUE7l%rxh}!e zFp1}r`dxLuMVsQ@kzLzvIaam8DaEQ%OkwP}`~-_G!5xZvK5UGp!UnWo(Hmr87YSk? z_`i+G&oa-24gCX`LQ+;M_+s%W)sE(sYDWb@8@5k#3jA>BSMV%Pad??$+#rFXjcS7u z7C^-8ZqAdOQTMZwf6Z{nzlu&&;Mt!8^=qqX#CF;?sk9KPo?I#)o!fR)}T=I#gA7+AQqhe0{~KK;GFHEj9BoEVuE?x@L&j=XL;piYG{S z8hVVyBa$;=|Al)7MZe#hV>$f`gtZ7$nkUm83Z}*PQ+i~;`KDf3V;{AUSyKEGGCBqO z&xHLG_$i+Bb`0>7@O(<`hy?vY1r`Kt!afF7m^6h#4_)T_*eNjEsm}BnrpUo5^HyKD zigo~^r~E5mYA)6u#yZw19obZXYQ?6gZ=2r_`hK2cRpEJDrVevDhA|&b$Q3r>8XKdP zX&Xcmw%NChBOqgccMdz|1MasI_G4OVnZZ+Xha~8I$!9@hNvYSD1XYeBjM6$iK{rbd zq|>Qp)(v9zX&c7AZnfIOV8@}~=eed)wkhg+*sw(1fU)WnQxY9bRfxmUQvlFqqxQz= zwQ1uqmjL|@82WP{{QE%L`w0R20B7*qC7n4h*Alcv!V*+@qK+ukT!Sg4&)s5Tky-m! zg9Th}0}w6cU&|a0?3FvV_UvfAkk>R?4=D^_|ETWh>hh0q#;6aloS*y4%5STS8_?y# z#_+W1INEN3Ti99>>;uLCc>5LJ8!Y}zY=*EO@EUW7x}Xhy|AD21$e{xE@ydtVuB3UI z1qR$?0hgOyaHaffewS(wV?9&9A;Kx_&&7IP>e>o^7i=o2yXxwwFr_x}ONX1X%>vnL zt?X>q=3SpQB7dLbvY?#36KUfw;f&WiT!VCpo73l9p>{OC3+F9E#n#km9#j#e^Es%> zG;Q-NFzdO=0xmb(j7s^}R;@iq$K9S?tKXVUh1N0*-L_Mxs=7Kk6|D}i_(u`@$IXH< z?3aTio^Eu?^8LC>(2qr#0R1BNZ8>zccJw?68XmQ9p0#68<#YR=6+ecU^=Hi>I3l4? z$iEuchYmiSPU}>^x~5SDe>fM?Nq55oJ`M`%4z8{OeW^lJN`<=qM!p%Zhp+EIpE{^m z9iM0?O*_W^wBT8HasGjYUB*877*XI^&L=_7RW7TS1Gb=Qo+f^*%&hNtOm}ojlz!#; z7p^y8|B1DSGDuyRZ=>7UagdKD#r^J!efF>qP0b+evGZD}nors$uLPk~54D7hceeA5 z?V)`aN2h+|!8?~`8o18F8J;8P2cQ%8!`KM;qr$WEI~C+vn3i=jZWVKKVNE{ zFVV4}L_y3!W6_m3DAyipXU+(ogii|ZqKerSy3I-&p`2H?Dd}72@q^t^oU)h|%zCnU znfxe7XWTAJg^fUNsr**l7_HA6=d!>KN5=d{c9|v%c-uFgM2+eU1cfbCUcJ2qKYYJS2tGE zi#yOz+Ze6Sn^1=rys*26NTO)Y5T3hbK9%qSO!$k~FOlls$GS{i2I!+qH+(F{+md;S#BBiXN)pV@ab^J;85_`%HZ=q4Fkp zN7WueRms!!xTt)L)&l+Af_5)+p+(w9&?ku?)|Z&B@GP) zf*_EjD;;J;ASbJ>{NbT;9kw8ss=G1mFZ4RsclB;)5{3^HRHt7vh)VG8PWc|y9_p!H z@^A$CjiO`HHBwtHX*gBVn5L!sOe^;-=9K1qGFP-Ko=MTuwQHu_c#FffG1{Jb0sTqe zfm@!jAHlyC%1YwBBnYx2sMU_Rctl>Nc6E|WGISw`*w~h23&JUcNdB-aH5bi1Kqj}v z#E;oVWY$M_WuO66H%fe|3cP+Oqo02r*BK|{f*IHgCqPC(8TR?B+MK?J?eCZ0eMK}0LsoQ){c_% zsuhopb3{M{TUw;vAzU@35Fz=89tp9}a6APxptUqlzMunbzrC^u%)>stPd$I9q(=yE)Ar zXt3-+Tbp3k)6J*^QUSkUKVYkj{YOf!%Hl}1BbA)@C4J~mf-2o0k_T1cP|dp*OQCu` z1t(P)z6;q0epE`%QC0QE9@692&h0ms~r_3T@`hq3X9By zPkVdCRht`ds>2h&TroIlW=7%eo7k^V&|dmQr3VB2!QAa^iYKb)L*L0-les=*#^tWV z*HR6F%h}NuVhtkSflh^uK}i=@@#oK<=Pd3Sd_>7^b&B+`x4?_43!R*Bbr8p?b~FPg z7cE~68T2JyGgVbp0z~OlOh_7&%#uG9oZK-ueHZ)>jU*|fG}5nGZdoZhqDtRz>{jxn zqdQt#8Y%W|vevR3xzHO+B~JgImEY!UbEsL^7-#|ee`MN|k8>jME64vLiI-n8o_Vjn zIAZar<5nrl)fmn7rbv$r)X-e+`isR~>UAKkys@Qv4=cTve$mytl_=ckdnV3U?bf1^ zQpdDY(KV~WbR~2k!x0O>-J#kJ^jzC6xX=*#C+x!$vA<=x`U{^H`&$P8BPGxl=OrEX ze6`{}Fc&OIK9ykF1O#L@nz}6pCq=El@x*#{iZesMo_^I!5A|-J^Q_XPR{{G*jnt-0 zDN{15-0|-s4t90At0B5ckj;EtUv&pMZWr88f6LrHV;^bI6TvT>3MVAc@4eg6;JijO zn8Z+vA_=Azzs0V~9-LMqy||?T-fGrLzvg!ORp~Zp)UT&*k0wI>upk|W|IN?5A6wP1AabAx?4QTIs;5`1p6w8 zEGpfNEZCyDn5e1Xr2Lg~{I~`8L*j#e$C`dMDc-5um@Z+r$)qGDHEZP5_Y!+_dFjqhkA|>skr?D4X^LoGmZ2%?FwiGwA9z*Riv6Q04B@{MtRn zStbgs`d#KDGsC^4)sBbjEfbwq$PUx6#V;SjgBiBcgLDBgsaw-f=ZeNkcR!iBJ#{U* z{=6a2Z7uBWo&`ZCvq|R$SpDG&o zJgn8G9!Il+_%kjPo+4F~rdhViq^@DA>2+j+FprY0L!V!jg^rhxaMl{E zAob+-<(nCUQr+$I;~rb!FY&Syvwoa>;djBWu|M6GenspD4@i3vH-oeUF7+5-FewG2xq@?4yycP-ns`v zJ*tqRNpM;cvwo!LGysUJEla;L3R+6PK+-Qu>4C6+WVWA~RO~0_iyHffSEk7m3cV^h zm)|^Ne=V2a($@Cn5(If;EB4oE7fk;R<4GLL$;+HRn>1M4r~_?B5&OrWnmSC{+dHmL zwic_20>ddfS{D z7z>E@(R}u!%KJSn$3}DK)fR_<|5Z<*;pA5;K{fBOmy_#QJso0ot;<(0mVDT<^h^J! z9EO$XY}h~ksF>B6O)BeJk=dSE{cTstvl2vJep8NLJe=%tTu8%so_m{KxlaWZ3NCbM zbY2e){_-t*DT?%^%l}MWLf7rvC~%r2z9QLxh^uWd{Yt65CI1@f)?`wtAER0Ab|q%j zP)#UpoJtT}emm~wq{7i9@Pp)6sq#qJ4@_vdyT@b9d8O)6ErXUQqW`%On)n06&>LZD zgaUJqAobn)xSzI>^y>jrc!s$uxQpG|O{&sQ3;Qc{f_%9IaoT}?h=bGhw<}ciD80mk zp4VxVRUD61sz_JcXqyUe<^#A^CisqcQ}rYb!JYx;Fk+&$geO)7P5wN@2V z8g5@5tvr_B=DeaE%5Skken%dbcu*oj!{4`xL#jtDQP_j3bcuIbwBCC<+N~FJ`X=&6 z)2}aeYc{Fa&rq?XV^_NTHl50ETL!CHSB~zfK?n~zp5(NCeaLwQfpkPM5JjZRW}g?j z1$xU_zrOof`$GEl#cowUHnV~{waxm=k5;Dg+wtl#(3K-gRm#-*lWcr<(0LhzVU8lP z%iiQiyEWE#KW+D?U*GKZalcu`s$SYDQ`M8xr}+riF?;^aqZWmBuQ&#y$hW%PY328k z&m-NMeto&yo6RaKzuAg}@rYT(e(5TpU$tAs@t>f;_|G4WcfEa@eto~&8_i0U-wsv6 zs!xgqxcCWArx^!V5x#hf&D&M+bJ~1m@emnG5Erv)rTS1>6aT=cY z+PvQEYWu*;{69y5ztBEOzkc8Cb+a0->d~7RvU;}Xt@?F%BZl&f`(LO0k(c=oQ(%Ah z^(Fr-O}lp`*UW0Xs<-3yP|il|&ni{6kG_5h{C9ep{|*KAbh7`pDeMUR>fN{X#sR-G z_O~ZDT-AefiQKPKDEv=j*vErI2DbFie3P{Q3I)DQEvp^+*Nxrzfr^K`W1*?{n+?4% z3yQpd2C8}|U3tIa@t^6FefL^!WBX4~V7a>bt|LC)-)T$1knElH!7r2h z`olY)RrNgIVPkgup2RMf7EG_&xwtWb8iu`DlA*)jS!OtpG4rEo_w={UYvVlvLya}s zH%z4ZeYQ&vliX+Nh4y**4KIZv^at#_2SK9s4LQuav#0RYwRR>{G)yd@3|jh768%~E4dS76WH8RX@x=;Fb4}1+ z@%GQZzIq;-uNk}rU%pQ`&O? zn5Em2X#IuD<+lWVYVYms^mD|erlG%jJQr65KYJ!aB<;8Rq53=Q10aYgx=sV)XzieQ zs!>e$RIj)*tLEDQKlV2|J4+JX?!a7rW7@WZeJ757o9Fl2^?Zp)z|#$ye;e5MQJ`0s zq8jZ&+*zg+%5YnUwWfkAW>o`jtxT)wWipbded<~W$laVTgT4g(KKKVWYd;3Rwfsh+ z<%fI2;{U()u0_FZRo6!2aB7=4|Nprcy+B~Vb{-wOcWa+BZIcW^up})B403-(+x#8J zz0nEuM}vL)sDRGS3%1`7H}X7xqAB|6`lKAoBva)tEmW^&#KEHegw zlrS_T^qRUu4fYA{XCx<P+(8JpP8 za!99^xrG33UcRK4M8{v)`oNYX>@)P~l8yGHIGvX|ln-nH=={@Ay`< zVICD`w{P+%ZVWr*rgyux_bb_#h3=CcOK=h)ts(@qenl|gB&Qr}*rzHABk?x08d~+E z8AD{U>b`~h0}-6ffWK-H3n&9>+s$APB+>C#9&f^*kU&p!IXTIE>{KMRgP_5QPa|*u z^Gr8b>maD=BM<04U)?BgWdR;T@>?3Gh$N)vbLIB72=b$k!IA3bE|FevF%cb%`6&3< zAYmW<&Ys1ODxZicA6pUzrDlha=0~ST@je86{Pv;RA~!f-0c9L}wOE(v)JE0Z{?6OW z#`0tsUQI0#pk4Yf(8r4k5%YZM5}$v#JQs`okxM-6nfCO=*K-`}Mc&3L*of4R@hqR& zv?UHk!)t*4)Zv0Asq{kkR@hfl3S$y1iOO@`5{+4rst_n{jRr-6Qm(X}dBHw{-%-Ff zJ})+yl1MC|kXP-jXgj0sb`qU_PvBPZ|AX^y7>yLD4%t%v%WC_8aah^Ci z-Y@vZuoa;iB@Oj|DTchIZ*nly+7|Rbvr8L&gn|CFENpfSv|1=QfPr!c zz1&vV{Ln6K46PF&v83A)280dA#L9;g1BjKh(hq{3y~l+~1y{A7mQYj(6m4$Q#@LXg zreLr?MoYvy&oSzQTxr7re<&P(G$yW}458)rqEVJa`%V%qniKv&^o9TcAOJ~3K~!2K zeR^wG0edZk(mG>*9=sgq*)~rp@!X>EYrcc(1qHLi?Soj$pU^QilRGYmRU`7Ph#`*H zV;JgmnQL9eQc2oUFs*D$!ELFl4!nfW##8U zhsH6bek&wLx6jk#$NC7yY=?`)n&^(=_w5Da(nCC22*j043lUtL@tX4Lm1+_BMnf6h zh|tHeHInK3t4xJ!M$yYH6Gfz<20|&h?b)ThCE{ShFyqxYvf|UA`r={AdJ5xJ?#+zt zQ3x3rTn!49KzfPRJ=R0aC?UOu63l!3$%;^;Yzl10aGvC8K4q}wu95N-*2K&RU zNTRd42QQj-D`lIPY#8h_`Ws$ug?-?YwrRZSImohy1KI>#06EA+RkEEjBKtDM2lXP8 ztdvQOr00v9OoeTheG>b*Cs!Mb&$>;6JR*izdLfpr8jsU?$m%IvP`PPA#Vhs)ZH+g< zxJnsdi$LjIO?VYEZ|T9da59|jQttFjz@LW|3k9_%M3qLQ`p`6z=vXx`BT58|>t+!9 z619LVWIVAC)Q{>1U1U6tqTelG`=O|T>>wsHo`IlK)Kgzlw4IkUD&;Lcq}F@A-C38O zTbqPTJ)>eB>SUNN57gSY-YQ{wRX50E!u15A`HKBUQq_dQ|7<~p-oYS3Xcl&UtE~1A z(;%eCD!gA4D4i>0<*Cp|ziIo_4EWhyHc4GgA~$yRlv%Wss(CGm)~3e<{&w+vN1{e< zAN`RMsn+37w6t-H1K>u7$Hk>wG5;-AodPIYzWS2Ygd4A4kI1nw!&O+GA}3^h)yK$` zTTBJeU1FR@Cx?!6ScLl9&u-Ni4@+odn3PzmtL|VQ)=;o3C^lC2cFnZ-ge6dU;2$+6 zSyGfaJ-j0!7|Fx?O2ChUEYojHy+`r1bVy&o_a18!y{s~cxaH2ZvA-`-OW0?NZhfwR zK59PjD&MpYw7g(84??7P$5<^WC$RdsF|H_SB(98h#N?4Ooi+BYxArx&#|+U865hoo zh5Fc0Dh$$hcWLht3}{0f4w}AdAz7b;(*+b9YLL6fWd&uB;ib}oPk61CeiN`_5Lpu_ z9TICu7E+GQN1%@x&_DrSz7HxVFXpz{Gj&#&XawX*G-uJPBpU2eM2+t|w>MD}=nM8c z`+wHhhk$(=$dy(!H}kBzPmQ1#m&tn(nH!@_nyRqsmi#)CvEI7IRLCL+PR;xvZDBl; z+LnvmvO85>%^;5nsDp8eKwn{hq(CYnk2NR|7I=6EfxhJKRZ~*?RgDl{J||Ehq<2VW znK!nY_>r7mdWxum88r3D^sluko)i|lswB}vRyDs#3B?rYs?hJdzq~p879R2LnU%!& zz_4k&x{xy!oUbRYmK_^GuQmgVu){~iOzUy@}2~nbuo`HsPQJXmG)HbGRT7h8e2K3a%9m} zx9^+v6kb6gijE^Mq~G$qIB zVWl<8Cx}4(SrI4?GFdG{0&OIAYS4Xbee7%hI@iPr^jTrLXb`-vQqa+v`5o~^vSzFDEhz;Ia zR)lJ)1DScM5K~imx7;3sd_^p;Y#o?K^^_Y!0W)1dlxaQXW}%?akL8JV)K;ImL7)&( zv-C}Xiat6U-{kYKhqnRwD-MY(ot}z>{Y~tLEv?DhEE&gJt76BmJIWo|El!p3Ie zQ9LNObw43OALo)Tsi9s?t(7Bh;@r;a2}h;@@la2qg-K(jc%mvDf&WQs+Du#3IXc&K zf4S_${{8-ZE{ojN$oYn&&0yPeCZ?O_`}V_Sl`)$VGc&N;o<-0(HYh zS&2uDI-eyx#_3J9h%X&Q!|Gn%S5ufc1t-y!Hkkp;sb(;Q_%GX-@Q@{Sf5#HFoqQjm zkKi8}`oqL14B#(@Ks*YV|JU@+y;3D2t6LhBd`Oy@b6b}ub>P*fm#d+&*^Z}~eWrh` zSG4vSm+k!@g zCe#h`sO%bIQ$z08Q+AARNhiXf-1r=ll0a?y{ri(5KHqAb1^ni+(Jt)YZiT`F6%Hwh zu3>-9%29-U>IV6!te#8McTb{5+;3M;8Txk`2QmNz7)(P!`(Sf!^0clRk&|26=v&2E zOMR1Wp*E|b8)`af#~36(KKI9$26XA%%e+l$no>QbfWnUXGISy*P-sZm2lpBD{hkGU>Q#Vgvw*U%egX~; z4&>6ICef{`xh`pg#lF|GW_$vH$sV^8wY`oXcQ8@h6a3>S%xF|a=-V{<#xgl2P(?(B z4ZkmS(pZWZ4bhu&rZP?2E!{GMytNGSsOKCP1u9 z_gLFH!QMoT0aAaPP)`qp4xr0vkg$)>HJ5sBPmKx4DXrs(?DLrz`gR1Rv-VWa5TcSX zm1!%wK~ZK=nt;!w_SM;zeawPsby-hYL18EMWhHWhK*6q%L|l4-#CRp*5AXSXCK1S- zp&gcgC;p=Dm%KB43eRr4D#L6t9HUwipWqDksoX9?<~%!`NSZyCQy|v zW2H#Mhf2h6X|l6?lK6ACYF_7zvI1O^RSx~YC#Y;EYQT8L{*s#)Z_lVFnR!Au(Vuec zKcDxau?+^LNsgv75n|R@{}$Tm1!!N3O_mA@02OCB!g^}+zyFG)~(Mewz~Bc zX>8*g;i)l1g9z>Ndz4&SP8n!5N3$Py4X21tPOtEKMWb8FT7?HrBpOxomgjJ?mx01S z3jJC**_Eg<_Gds+PySypk3Xqv^FYvX3HzbF<%!!Ip7#R$d#2`YvK%=XgKGz?h`iz4P zM~zE!P+!(9DBE3zR>Uv7Ue?2%*}W<(79TW5?egFRUCIb6vU)60qnp;5_$*w>9pq2> zHwR7mGYkP)%kvJX{!$D9O>}>nCCjPp5UIGhZqJRgmf$CuZoyP^;*NESpBz1MPfER) zIKJI4M;S~JO`#B`WmQhm$h+~K+>)GOHN^F(wcn?a!5OpmM9(rOwmT%h5BCWD7WUP7 zZonTE#x`x`kV1WaX5t28EY}2&CTijvB&N-?{yB>!(2i-@J2%OR3Gj3Q`$&eK&qD8| znmt%`Xp&7tcC<=fW25~c)Z!*vIt6H48YJ+R^a+-(x71X#sJN{R@)ZFZljaOE&s;#@ zeqWOB#~4~Zb-WAv)}1cOpQaU;=7E_P^>#Pf_Lb;vV7qDt%=g<7KW}vCVgSEL^9Y!- z9C|9N=38Zoyqs(Hg6vGxgwo;k&$H6HnaZQgJ@J&Gai$$blX#NQ^b=s_RiLb^TiCy) ztPV1-R7PZ;<_=;hbGYBFvzDd7DW@v*C`5M=6L$cLLCR?Oxxa8ioETk#K zA{5pOD74Hnvn4gv8SY^C#K5EyD(g{VZxBQNq@9Xvw-NDIUN6&^ew%g7`c+fdR1PaS z^j7dM%DJ?Z;VJa*B&!h7Kl2I}{UxTiw7ie&V=nfWxFlAeR*nQ@ZMV~5Gbz~)kyS|p zHn7i3B_}G()?H3jfV$j`B3#1G$}F^HYv-1ao=Bx+j+` z#%ghneX8&YOQ3K)Y8Av}KE>ThiWj~#&5v^$@j2v&i0=X2-rU@u&u$b{PwiJ!xK=qt z>^~;d)-YSB~jxA$>{(5e(Xo^>lsjVc$o$}z+(*}_Ng#{5SN!~gGq^VyT@j0 zP>RTIb>F9C;hRi_%y5!D5WyWcd66|gV+Gl-NbfBY*3v)xrHaxrrtKnYpOAvFmW0p zm0I}FKBGyaY7T6e?Gn97)XY)_{cV4uHsumM6GNYX?p?HFdRDzQ05X_!!F*(rC{hn8 z%4QLHMMjCKz|eh0oR|toPrW>i?J5Ng9c8B1(kJc@cWOZwvgp!12t)qJU3BVE)V&hH zj?7|aXbHIP84?1yt~aIwILQgO8aJ{aVn=zduf;~EH)|#_V~4oJ!EBdaNWcg~1J$Wt z4R^%8*m$fQE>oc}v~pfPS+vjXZiiS$&@KNX*&7C*_7 zL9CmWNzO27M6R(>G(B-|RndJ`LyrBGyN2BHCdy$um8uSGkT8AfI_v0(X`Tg-v)0pi z#u60pbDT|96G}V6f}&xHOr3+sPy`X-PnAWYTbg%fyNP}kYmXt*QjW--6e6)xsp`PnRBHzLny4<6sxInZ#SW*ej;0x9 zyP9IaKT`&sD$*Q8Ds+Ml)~|18EWDnXf5Uc%xICzCuY2HMsvXYi{Uv3IkFYB0DL_SYSgn>4 zduqo1N}}c}k$+nx>ZNILp0Pj2Q;p(UF?)p8NKzpn20LN43u$j>h9mM+*%GP)XhX=L zQ&VRuyfQdVwf(gTFA8q;l$!swu8oNla}?<^&o< z7_vT~8j&H_Tmq(8K#i%$LT2sB3aK>G*FsUu zh+8&NENU9$%aVE5ROVz}nb(l1_(jzeS1lxFhD1e^B8cR4La0O=`?f)YPwW+K8KAMq z9RF6fyGkI9RRL<86rQ8TwenFG`?uX6%8HrRn&kSD{6iV?HvuxPVjGq%F9uON?(xnNP6`lscMsx)EmBcCA@qB5gb{F14T&3lXTUI_RPz0#QnYD_wV;f&bE|kiQrG!zDJ{|sSl;e$BA$pM-u`d z2ITt0#K{o$ghLQZl*gC~WIeKd!cOtunLtRHrNfY4lxWKlVVvfADN#ivY}1O^NQxm- ziXn+VB?8sFT4dd-rMngEPZacN@_W7?pd>z6g^C*Ig+qXP(OlEr=-_0{>}!b{{QUeV z-$VP1Diq)k6IPv|q_ZxPPzMJJ$az-Rt7zOz2ti_tOl62MFNKhuOhtQT(83EC+NUAe z;}%1HRmipq=o?mDte@;DBqmKD#Sl+-z08qL^jBhStK3pvjxxc%Gg+PMRWvG0#r)o3 zrc$`wso^QP;I_q(UzO+$vocy%LKY}&Wo(ce616shF7XYfAm6M@G#ce+BEno%LcTQl zh?BnoenX|8mO&qT>$KGGh`c}eci9dv&?^p9?Tp5Ha(=?8kh!p77?;ot=`0 zEUTOBuDHhDsEn!Pb-{6#qWFHMk_x!oCl~vau>`iqve^7F(XwBKSVa0Ok7R7Mw5~_j zW5{0UBi)_&%qOqwYJnr)Pt zJEotdP80hPkO9?|rFM>Enu)rmA#g7-7KsI)%Q?D`PZJG_P2-ivbX2$DWB_KzqBsGK0UO_6pNtI05(?O=fg$xBtt4|vh#&=}J zE7qJE^o|U-Sw~S+?eM6(x|Sk-n)^FB{>AP)VIukn9UT??-DXqqq*XXXqwtNQ`7LvQ zUrW>k<~))B=CvOvniS(7d)QA-i7I9#&SFJlN5>`sZAMg%GnEj32`9pNYJK7(LO!#3 zzt(}0SHyYEks!+_8*IWX5|kcQ)PYy9KkAi6M0fL$FKy8q@& zoChST=DgxC5@KU9Z{ZkH^{9LKlSce`RJN;r?;fyUUd9Cp`@v8<2cT68huq1<7R~#G zL#Z6DDq0^))Dq00c&&+j-wb*XgM03j68LuqWZ4MvK2w1N7OFa}`}E~pH{%sPmeF!f zy#opQi+(ePOv<0O{enb%Qxk<4@>lb(j{iYPZy)<5m0D@MT{Nf9tO)cA?yuL+0_IKV zYlj*7l?NDqAP;r*y%C!eOdoWSg4!M zZET~hxgSI565bs<5OTU}U#m{OCSjf{9$oB53msG8Q0j)0#eOWBSF1hKXWU<3|4i48 z`c78g$@tfPVKp)J6o>TaqaT#0%;|B8mzYYWPc^bV?y<+0B=U-J95dg_oI2axMMKj- zg8pJ9H-(Z-B>uETpv1#((_Ix#`TV1kTqcd@(VLpNW)an*c_n>R7QsKO$>W=e8uw}^ z_UZ9>sdTQeZzm@ANv4`-19C66r)vBNF5g^tgsH4KLI!^6lb~+1$nuIna;@h@C}qu!Z4NC_V1} zHhOx$hadS%bL9wwec`hiG3OkSPGJ$8x^Bx<5=knxcPs5_WY5IxX+f1cnL&gJH%htV0@<6#ZYD%-i(Hl;1oTm_*MPwnhsKi!R= z*xEqy8I28rPW0{@iCXE*6A!xYZqzuX;1n;~lL_x3ULi<$)b|V=_NYDnWPbZ+AKl$6hcs>$&13Rt z){*{BqNY6PXCtr4`r2_yc~sH#z7>$;(qj4AL8h|Rr-CFHd;A>u5Alkv<&)3F5c$xD z=PvEnSG15|+d2?KK)`=w z(f<{?+iGE##?_+vmlCx-k3_#BN1ReOAb*gl9PJa-%WZGT5nd5Y51Pv-FL+e4qAGvd z?(crO+iGDKld98;?<8u@?S7W?m>i>doq+s7rgE@P09yq4H95d5x;*oE3~BSH&Hlbq z>v@++eJ4@lhhM+(gwi3W6qCA2K>i?8Ip!!$x$U#qUwu==@IhX2D24O z?P%8RKic6XIi~T46E*oIhu#3UJinsAMu!hMrIge)u>TRJa=1_1o6|oe@AC?2r|nUX ze1UJ$fsf^fM>PIuq9*HK;Xhm*_||jTyPZ-@@9XGUa;+x9@8hw~)xe<6n8 z@5okYC)jT}%@?bkugfRhU&KCxf9xpp(HiJ$PU*W$rP(Jqgdtb#H?nV?BqVet`a|rh zc*LU9bc4BX)1fbR?vw7%C-9S&%|gbYr?;K-^!a#I)sH7 zZ^%jDX!yQ!@!iq?k~$xAe_ZXIbR%)U7vr|&LrmqpJ{V6)c&W$FvksvZ=K9F; z$CL!dcMbIQ5YbQWae7T&c7FhZeR@=UeMO5?b$=-iw$Y;i01ahHL_t)>?UBC+^2YZY zR~czSK1|N|k24OT3Z6uU(5Ku_h;Y)yLf`W-dMCjCYwnNtg6iXr-Yveox7ynIZ^gLN zi^aau1RH&$|G2;qdOF%Qxxfgqh=$Z=AC+&Ydg9ok$cdktU3RCZxA>=;IEfvkoB;lks}}w_I-Wk_k?`{{UmfX>Ix42i5T}4 z;j+HNfuyVnQNKJb^5wL2XWYkG9Y4^GRdm49KogF>A4xFwevG6IBKAkzCiA~%fd2D& zE$kEYMNdk^WIqpMKgQ{QBF245q*yS}{q=b7DY=g4Q_q2SN|Cc6RP3K_2nS}r!^{>P z05Oa{kYLB0m$`n(gvpS3vp`T7FNS?y3;e-+3Hsh*pS_s#YUdsz>6hK0myB`W5~&r; za&x)fd$|x0ls5W^eR-bXv_nXqaPUt1N=1ITzSc8EW=}YVpQGMNNk;)L(cZ5iXt0C0 zcnoBesy*mAofzYs#yGfgjQg4pO<;N)Y#^|NfeA96DsCw`pLPft`2**8C`5lB zQ4b`)qKT8-kB-4+nshQ{wq!_rC+bSOmN>?#onzU@!KGu|_e5N!B(vlxLnOsge?X0) zjle^SPl%s%2uTsHT5-W=6g+Ug7rcCgej)+%2-rMOityVC91!wXQr3zwj&4EFO71Nx zi;VBuG44w;2=bi?ouiY2564bQ57~dfi1#hIQx4(4hu4Fb8b3(>$8JBo=EUufWX*#8 ziE5z~FMeBrBQnqtR;nuIGWfhMuE_}Y6ZHRq821%nr=R?XmnR?)-c;7fIWm$)koy47 zHiV!@7~iAM#SITa( zoEzQ#$dsAK@PtDM(;5zP%@I)pFedCBU9y7zjt2n#^$x!yFinj+r)d^%)?bZuzx0)3 z+*c%ri?D=v!V&UD1r7e7fAARI&NqZL><9aOs4glX!Aw2jne2D3KnwY|8y}EhxITvP zkmaKfn64S)z9Q2KF8Wl~jjIJ<2#*W?W03n!__L=PLaJbN-j2`*(TjIxU{3S*I{7h~ zrY80k_<4+TT%V8+{GCpoS}K7P9^@gMU_T?tI*9I!Lr7U%6Z~MjJ}Q8ftQ z{Y?psv&}bCh>Hmu7dWpOyCJ z=&xsf`m!O=<2+j2j3I6aN!lOQ`+9c%CE2XhMB+Fw^e5o$P$wKh?A(&B{9C^d_%;`- zbjg~Q@9GC|om@hU>-l|-amLOc55Bqmj5GH;5=OA?DTB}ulHZ_8j}nDbVjnZ_0Pdyz zKEOSIALIcYU|`^e-@n+&&j_h-Fvf9+b5{&<-w>e*&G&f-6(>xRfr-KiN01yp1Y>SJ zQgFYcZ7jS)dr<5@+Qq{23hat;@j*N^aHpZ}Z}#)N0to%St0e4a4uq-)XB@ zwf+HyK3g+k9}C_A`)5>ULxkYsY=fbo|PUA+8bRvKS{J4zYhpZNDN3 zE)Cx=L&*8zpdRF$-a}GYRtNtxXOx70>D$v?LBX#Krwn3SV(h%~ZX?D`|Iz&>sJK8 zP-OcC(V#U=;0rI|tbtS10lcABX@B@*o;m9i@|$6QzAE-1k8wjZ?QV>FTr$XgM{Ir= z{=2E?Xbs^&OkXTrjTufB<1%G6#$D6U zzapSCVP57~AjyVsx)e>A68J+BkH=4_JH(T>_&ri2STjCm|2)|v2>YcM;~+x6jB)3k zxnGbtgisD4WB+0_As#3?MZ2XxXhWm?iwfU&hJKLy{kJ>)qO4;ab9*%Qe=Ej)ODZ%$ zN;`<0s|{g1P?Tz%Qs%_dnEg1;Grx(d1(gEm1^mC==@+Gpaj+=8o80hE#kg+?tcP&X zHId0(ZU`0pgYo`!-gtoiOeb}6+6T`&00RHI*e_xnFXEEk?w^ZsUy@=7Cjtl$p}XJ^ z65F*p$w~W&{n;5Uoe$V2130lZU8xd0=6AC?t$!rOeM_JmL-8NZq=%OpLYPc2b8;>x zavo=toTh+%dOqRg+H?fWoMrruVjRYSe*!@wm@TuwEuE6Au0ruxO_gf$)R#s z?VvaD3>)0r^_%zmy(hXKdq@lq?;esE7hn7rV%)bRZfQ5;sP1Fdy@1ymLW)zs(D$sy zL(YnzrLM+Nm7DHMKY=sJn|vD4ov`Y`5?iI-M+y-;lW))nGK;;d5CF!3Uaf- z{#7RKcSNzzuo04cQJO%+cjQuEeAHO5&z}At@`XHcF6B0}o7ORI^!~IvQGQ$CM|W*z zV|Y!P0K$BOjKBv>6psJj!9M)_-0`3luN59&@;lHY1}?Abmn2}HVyCT*T$Lt}vlr;o zglFJa?1KciU+(O?60rZ{;$?h@t77#EO#c~!q8ID+UuOo7_4tLgdv0}<%x%>81O5DBMwZ*PW)nD z-xi3_mjX{E#=%7rexlzG3=j0RRg9BqySANwM+h3JI^r4o*Q5yw{q<`M z{>d&=2k_J8=06ujzha+PuhVOl7)R4~>Y4i$iEf{;Kk`i-KNqD5u!erLhdVm{nEvvK z>U0q!UdVG^m70eG|1o!4R< zPuxjo?pGvYpQ6;$qz8#nX%qW_z~Rrw-|Xinn z-N8Ua#0mI0g}Em7_uDzC;{6b!s zxCcT1KkP?21eXiY1jrI}>mToVdJb}ho`(w@JyDS(6DKi_E1j3r_FJ+WE?1-p$v-9s zDesIEo!xg`EF80Q*^%`h_IuKV%Oz=o`p2KrzXO!mxw>pm98TN6r19sa1(&PRgntg? zEos|1#kl`B;h&er#Qg{Rcjdn!{7?Rqe_Z|#{3rf~{Dhjb00000NkvXX Hu0mjfy5D^9 literal 1373 zcmV-j1)}72XKppJo~nh6Ll2U1jZh>W*rb1I3UHfM*%S%s}u$@ z%(sZrg<@BnhxrVnL|NPpf7^pJr@do87&0@{$F;k95wpo%z5t(5CNZl z`JQv7w6ehAymF1BV8E}%@r83O?nl>%*AT~x#xHa3F5YI@MgKYRw~K1TKRo_&F)lSS z_jq?9zAW{?^Cxd7PHLDd!(H!Xnm-wj`4ya_dmQunEc|TlT9-Nc9Am!gEPa@9^p7x_ zvldp<5H)||ebgT$`~Z#uM`k&NDg!QgfSuL->9n43=sT1ZL?yg~9>Z~0i2d_fc~|mi zsd>~7oZJ?Puknu0I9Nh_xTxp@JUn@DA0A?X*E)UQr9HAnLySJ{ox2ZS8+p$A$arVA z7%+5EzkDsc(_ake^K5vBDUxf%83;XjnE+)`O%6)k2cVs0 z{)%aMVj(ib%&1D0G-tdE<~Z^)f22-&NS-lLDbHp2a{!Y+5l)&Ll2byS>l%6hZCr#` zHopgrs)L46`ocA@(Uf08UZ0=B8mgA$JjE5Q(Hv-4&FU|vVQ6hLARa_#X^xF1rsqr+ zycLE9jA%1&eu`3Mh$q>Z{4fkpAC16btGz7WF5_F_-yt0s*|yk8@j;``DkXeKKjcR? zheNAXE*OV>&3#1GjDP#+Tyb6mB1x-M-! zF0wx|z-aqIbV1NUwL{@$xB_-7tS_~~kwHcFD3vM`|J9}tRr4{*aVrdaB*R`9zEWl7 zl^tI^>*@ql6Z8Kys&MPo%05xLMg}qGcocLk$$@d<RjCz=iv~Ga8gBnI)*Qu#V zwVZrB9me8cIyGN${XN#TMel+?&2mMBqF&0$=eS6CMU|W6dCx956*6_# zm)sVjCplsyoZ`3tiG$=Gz(x6B{Fv$#4wFX(QzcGY2Y|Rdu$s7BPN9_wZI`w#xgB#8 z=kvgLHXbtODCGC;Ud;az&vyA7zAguSPESPf+p9{T0$VHRRQ(R| z-v{z(ok<Wr5j diff --git a/public/images/pokemon/exp/2038.png b/public/images/pokemon/exp/2038.png index c6fdb999df3040eb79e5f1263b6918c8660377ea..f6295093fcc8c62fe78a26792f42ac8bef0b056d 100644 GIT binary patch delta 7149 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 delta 2111 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 literal 58142 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 diff --git a/public/images/pokemon/exp/782.json b/public/images/pokemon/exp/782.json deleted file mode 100644 index ea51775cf3e..00000000000 --- a/public/images/pokemon/exp/782.json +++ /dev/null @@ -1,2351 +0,0 @@ -{ - "textures": [ - { - "image": "782.png", - "format": "RGBA8888", - "size": { - "w": 240, - "h": 240 - }, - "scale": 1, - "frames": [ - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 0, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 0, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 0, - "y": 104, - "w": 48, - "h": 52 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 0, - "y": 156, - "w": 48, - "h": 52 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 49, - "h": 50 - }, - "frame": { - "x": 48, - "y": 0, - "w": 49, - "h": 50 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 49, - "h": 50 - }, - "frame": { - "x": 48, - "y": 0, - "w": 49, - "h": 50 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 49, - "h": 50 - }, - "frame": { - "x": 48, - "y": 0, - "w": 49, - "h": 50 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 49, - "h": 50 - }, - "frame": { - "x": 48, - "y": 0, - "w": 49, - "h": 50 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 49, - "h": 50 - }, - "frame": { - "x": 48, - "y": 0, - "w": 49, - "h": 50 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 49, - "h": 50 - }, - "frame": { - "x": 48, - "y": 0, - "w": 49, - "h": 50 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 49, - "h": 50 - }, - "frame": { - "x": 48, - "y": 0, - "w": 49, - "h": 50 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 49, - "h": 50 - }, - "frame": { - "x": 48, - "y": 0, - "w": 49, - "h": 50 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 49, - "h": 50 - }, - "frame": { - "x": 48, - "y": 0, - "w": 49, - "h": 50 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 49, - "h": 50 - }, - "frame": { - "x": 48, - "y": 0, - "w": 49, - "h": 50 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 97, - "y": 0, - "w": 48, - "h": 52 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 50, - "w": 48, - "h": 52 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 145, - "y": 0, - "w": 48, - "h": 52 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 145, - "y": 0, - "w": 48, - "h": 52 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 47, - "h": 52 - }, - "frame": { - "x": 193, - "y": 0, - "w": 47, - "h": 52 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 47, - "h": 52 - }, - "frame": { - "x": 193, - "y": 0, - "w": 47, - "h": 52 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 47, - "h": 52 - }, - "frame": { - "x": 193, - "y": 0, - "w": 47, - "h": 52 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 47, - "h": 52 - }, - "frame": { - "x": 193, - "y": 0, - "w": 47, - "h": 52 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 47, - "h": 52 - }, - "frame": { - "x": 193, - "y": 0, - "w": 47, - "h": 52 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 47, - "h": 52 - }, - "frame": { - "x": 193, - "y": 0, - "w": 47, - "h": 52 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 102, - "w": 48, - "h": 52 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 102, - "w": 48, - "h": 52 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 102, - "w": 48, - "h": 52 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 154, - "w": 48, - "h": 52 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 154, - "w": 48, - "h": 52 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 154, - "w": 48, - "h": 52 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 154, - "w": 48, - "h": 52 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 154, - "w": 48, - "h": 52 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 96, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 96, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 96, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 96, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 144, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 192, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 192, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 192, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 192, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 192, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 192, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 192, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 192, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 192, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 192, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 192, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 192, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 192, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 192, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 192, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 192, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 192, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 192, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 192, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 192, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 192, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 192, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 96, - "y": 154, - "w": 47, - "h": 51 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 96, - "y": 154, - "w": 47, - "h": 51 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 96, - "y": 154, - "w": 47, - "h": 51 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 96, - "y": 154, - "w": 47, - "h": 51 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 96, - "y": 154, - "w": 47, - "h": 51 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 96, - "y": 154, - "w": 47, - "h": 51 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 96, - "y": 154, - "w": 47, - "h": 51 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 96, - "y": 154, - "w": 47, - "h": 51 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 96, - "y": 154, - "w": 47, - "h": 51 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 96, - "y": 154, - "w": 47, - "h": 51 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 48, - "h": 50 - }, - "frame": { - "x": 96, - "y": 104, - "w": 48, - "h": 50 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 48, - "h": 50 - }, - "frame": { - "x": 96, - "y": 104, - "w": 48, - "h": 50 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 48, - "h": 50 - }, - "frame": { - "x": 96, - "y": 104, - "w": 48, - "h": 50 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 48, - "h": 50 - }, - "frame": { - "x": 96, - "y": 104, - "w": 48, - "h": 50 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 48, - "h": 50 - }, - "frame": { - "x": 96, - "y": 104, - "w": 48, - "h": 50 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 48, - "h": 50 - }, - "frame": { - "x": 96, - "y": 104, - "w": 48, - "h": 50 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 48, - "h": 50 - }, - "frame": { - "x": 96, - "y": 104, - "w": 48, - "h": 50 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 48, - "h": 50 - }, - "frame": { - "x": 96, - "y": 104, - "w": 48, - "h": 50 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 48, - "h": 50 - }, - "frame": { - "x": 96, - "y": 104, - "w": 48, - "h": 50 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 48, - "h": 50 - }, - "frame": { - "x": 96, - "y": 104, - "w": 48, - "h": 50 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 144, - "y": 104, - "w": 48, - "h": 48 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 144, - "y": 104, - "w": 48, - "h": 48 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 144, - "y": 104, - "w": 48, - "h": 48 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 144, - "y": 104, - "w": 48, - "h": 48 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 144, - "y": 104, - "w": 48, - "h": 48 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 144, - "y": 104, - "w": 48, - "h": 48 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 144, - "y": 104, - "w": 48, - "h": 48 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 144, - "y": 104, - "w": 48, - "h": 48 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 144, - "y": 104, - "w": 48, - "h": 48 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 144, - "y": 104, - "w": 48, - "h": 48 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 144, - "y": 152, - "w": 48, - "h": 48 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 144, - "y": 152, - "w": 48, - "h": 48 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 144, - "y": 152, - "w": 48, - "h": 48 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 144, - "y": 152, - "w": 48, - "h": 48 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 144, - "y": 152, - "w": 48, - "h": 48 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 144, - "y": 152, - "w": 48, - "h": 48 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 144, - "y": 152, - "w": 48, - "h": 48 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 144, - "y": 152, - "w": 48, - "h": 48 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 144, - "y": 152, - "w": 48, - "h": 48 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 144, - "y": 152, - "w": 48, - "h": 48 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 192, - "y": 154, - "w": 48, - "h": 48 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 192, - "y": 154, - "w": 48, - "h": 48 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 192, - "y": 154, - "w": 48, - "h": 48 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 192, - "y": 154, - "w": 48, - "h": 48 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 192, - "y": 154, - "w": 48, - "h": 48 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 192, - "y": 154, - "w": 48, - "h": 48 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 192, - "y": 154, - "w": 48, - "h": 48 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 192, - "y": 154, - "w": 48, - "h": 48 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 192, - "y": 154, - "w": 48, - "h": 48 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 48, - "h": 48 - }, - "frame": { - "x": 192, - "y": 154, - "w": 48, - "h": 48 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:9772e042208152c03f4677b5a37d739c:828b3c5d233c21ed5ab3c368a1cf1988:d07862436676aa228a148ee1f1d82a8f$" - } -} diff --git a/public/images/pokemon/exp/782.png b/public/images/pokemon/exp/782.png deleted file mode 100644 index 9ca666d0a7476b65aa00b0f6d4ebabdd5b82c9e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3279 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 Cpe6eN diff --git a/public/images/pokemon/exp/783.json b/public/images/pokemon/exp/783.json deleted file mode 100644 index 71aeb29890a..00000000000 --- a/public/images/pokemon/exp/783.json +++ /dev/null @@ -1,1154 +0,0 @@ -{ - "textures": [ - { - "image": "783.png", - "format": "RGBA8888", - "size": { - "w": 335, - "h": 335 - }, - "scale": 1, - "frames": [ - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 74, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 67 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 74, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 67 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 74, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 67 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 74, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 67 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 71, - "h": 68 - }, - "frame": { - "x": 0, - "y": 67, - "w": 71, - "h": 68 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 71, - "h": 68 - }, - "frame": { - "x": 0, - "y": 67, - "w": 71, - "h": 68 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 71, - "h": 68 - }, - "frame": { - "x": 0, - "y": 67, - "w": 71, - "h": 68 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 71, - "h": 68 - }, - "frame": { - "x": 0, - "y": 135, - "w": 71, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 203, - "w": 67, - "h": 69 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 203, - "w": 67, - "h": 69 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - }, - "frame": { - "x": 0, - "y": 203, - "w": 67, - "h": 69 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 70, - "h": 66 - }, - "frame": { - "x": 74, - "y": 0, - "w": 70, - "h": 66 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 70, - "h": 66 - }, - "frame": { - "x": 144, - "y": 0, - "w": 70, - "h": 66 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 70, - "h": 66 - }, - "frame": { - "x": 214, - "y": 0, - "w": 70, - "h": 66 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 62, - "h": 69 - }, - "frame": { - "x": 67, - "y": 203, - "w": 62, - "h": 69 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 62, - "h": 69 - }, - "frame": { - "x": 67, - "y": 203, - "w": 62, - "h": 69 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 62, - "h": 69 - }, - "frame": { - "x": 67, - "y": 203, - "w": 62, - "h": 69 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 62, - "h": 69 - }, - "frame": { - "x": 67, - "y": 203, - "w": 62, - "h": 69 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 64, - "h": 69 - }, - "frame": { - "x": 71, - "y": 67, - "w": 64, - "h": 69 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 64, - "h": 69 - }, - "frame": { - "x": 71, - "y": 67, - "w": 64, - "h": 69 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 64, - "h": 69 - }, - "frame": { - "x": 71, - "y": 67, - "w": 64, - "h": 69 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 64, - "h": 69 - }, - "frame": { - "x": 71, - "y": 67, - "w": 64, - "h": 69 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 64, - "h": 67 - }, - "frame": { - "x": 71, - "y": 136, - "w": 64, - "h": 67 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 64, - "h": 67 - }, - "frame": { - "x": 71, - "y": 136, - "w": 64, - "h": 67 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 64, - "h": 67 - }, - "frame": { - "x": 71, - "y": 136, - "w": 64, - "h": 67 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 64, - "h": 67 - }, - "frame": { - "x": 71, - "y": 136, - "w": 64, - "h": 67 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 69 - }, - "frame": { - "x": 135, - "y": 66, - "w": 67, - "h": 69 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 70, - "h": 66 - }, - "frame": { - "x": 202, - "y": 66, - "w": 70, - "h": 66 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 69, - "h": 66 - }, - "frame": { - "x": 135, - "y": 135, - "w": 69, - "h": 66 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 69, - "h": 66 - }, - "frame": { - "x": 135, - "y": 135, - "w": 69, - "h": 66 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 69, - "h": 66 - }, - "frame": { - "x": 135, - "y": 135, - "w": 69, - "h": 66 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 69, - "h": 66 - }, - "frame": { - "x": 135, - "y": 135, - "w": 69, - "h": 66 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 69, - "h": 66 - }, - "frame": { - "x": 135, - "y": 135, - "w": 69, - "h": 66 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 69, - "h": 66 - }, - "frame": { - "x": 204, - "y": 132, - "w": 69, - "h": 66 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 62, - "h": 69 - }, - "frame": { - "x": 273, - "y": 66, - "w": 62, - "h": 69 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 62, - "h": 69 - }, - "frame": { - "x": 273, - "y": 66, - "w": 62, - "h": 69 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 62, - "h": 69 - }, - "frame": { - "x": 273, - "y": 66, - "w": 62, - "h": 69 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 62, - "h": 69 - }, - "frame": { - "x": 273, - "y": 66, - "w": 62, - "h": 69 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 62, - "h": 69 - }, - "frame": { - "x": 273, - "y": 135, - "w": 62, - "h": 69 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 62, - "h": 69 - }, - "frame": { - "x": 273, - "y": 135, - "w": 62, - "h": 69 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 62, - "h": 69 - }, - "frame": { - "x": 273, - "y": 135, - "w": 62, - "h": 69 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 62, - "h": 69 - }, - "frame": { - "x": 273, - "y": 135, - "w": 62, - "h": 69 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 69, - "h": 66 - }, - "frame": { - "x": 204, - "y": 198, - "w": 69, - "h": 66 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 69, - "h": 66 - }, - "frame": { - "x": 135, - "y": 201, - "w": 69, - "h": 66 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 69, - "h": 66 - }, - "frame": { - "x": 135, - "y": 201, - "w": 69, - "h": 66 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 61, - "h": 68 - }, - "frame": { - "x": 273, - "y": 204, - "w": 61, - "h": 68 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 61, - "h": 68 - }, - "frame": { - "x": 273, - "y": 204, - "w": 61, - "h": 68 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 61, - "h": 68 - }, - "frame": { - "x": 273, - "y": 204, - "w": 61, - "h": 68 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 61, - "h": 68 - }, - "frame": { - "x": 273, - "y": 204, - "w": 61, - "h": 68 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 70, - "h": 66 - }, - "frame": { - "x": 129, - "y": 267, - "w": 70, - "h": 66 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 64, - "h": 67 - }, - "frame": { - "x": 199, - "y": 267, - "w": 64, - "h": 67 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 64, - "h": 67 - }, - "frame": { - "x": 199, - "y": 267, - "w": 64, - "h": 67 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 64, - "h": 67 - }, - "frame": { - "x": 199, - "y": 267, - "w": 64, - "h": 67 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 74, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 64, - "h": 67 - }, - "frame": { - "x": 199, - "y": 267, - "w": 64, - "h": 67 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:f33a08a20212ca30a4c442095b0effc2:91a27eccd7f819b29aa8e5f9bc790c41:aab166e28c744865a0296041224dd01b$" - } -} diff --git a/public/images/pokemon/exp/783.png b/public/images/pokemon/exp/783.png deleted file mode 100644 index 58372a977c6b040d3ce97738943c795215c4fe03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6600 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 Xaul@6p27dULZGc~pjPtGCiMRR#)sVJ diff --git a/public/images/pokemon/exp/784.json b/public/images/pokemon/exp/784.json deleted file mode 100644 index 4200616ecef..00000000000 --- a/public/images/pokemon/exp/784.json +++ /dev/null @@ -1,1826 +0,0 @@ -{ - "textures": [ - { - "image": "784.png", - "format": "RGBA8888", - "size": { - "w": 461, - "h": 461 - }, - "scale": 1, - "frames": [ - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 96, - "h": 88 - }, - "frame": { - "x": 0, - "y": 0, - "w": 96, - "h": 88 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 96, - "h": 88 - }, - "frame": { - "x": 0, - "y": 0, - "w": 96, - "h": 88 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 96, - "h": 88 - }, - "frame": { - "x": 0, - "y": 0, - "w": 96, - "h": 88 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 96, - "h": 88 - }, - "frame": { - "x": 0, - "y": 0, - "w": 96, - "h": 88 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 96, - "h": 88 - }, - "frame": { - "x": 0, - "y": 88, - "w": 96, - "h": 88 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 96, - "h": 88 - }, - "frame": { - "x": 0, - "y": 88, - "w": 96, - "h": 88 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 96, - "h": 88 - }, - "frame": { - "x": 0, - "y": 88, - "w": 96, - "h": 88 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 96, - "h": 88 - }, - "frame": { - "x": 0, - "y": 88, - "w": 96, - "h": 88 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 96, - "h": 88 - }, - "frame": { - "x": 96, - "y": 0, - "w": 96, - "h": 88 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 96, - "h": 88 - }, - "frame": { - "x": 96, - "y": 0, - "w": 96, - "h": 88 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 96, - "h": 88 - }, - "frame": { - "x": 96, - "y": 0, - "w": 96, - "h": 88 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 96, - "h": 88 - }, - "frame": { - "x": 96, - "y": 0, - "w": 96, - "h": 88 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 96, - "h": 88 - }, - "frame": { - "x": 0, - "y": 176, - "w": 96, - "h": 88 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 96, - "h": 88 - }, - "frame": { - "x": 0, - "y": 176, - "w": 96, - "h": 88 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 96, - "h": 88 - }, - "frame": { - "x": 0, - "y": 176, - "w": 96, - "h": 88 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 96, - "h": 88 - }, - "frame": { - "x": 0, - "y": 176, - "w": 96, - "h": 88 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 96, - "h": 88 - }, - "frame": { - "x": 96, - "y": 88, - "w": 96, - "h": 88 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 96, - "h": 88 - }, - "frame": { - "x": 96, - "y": 88, - "w": 96, - "h": 88 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 96, - "h": 88 - }, - "frame": { - "x": 96, - "y": 88, - "w": 96, - "h": 88 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 96, - "h": 88 - }, - "frame": { - "x": 96, - "y": 88, - "w": 96, - "h": 88 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 94, - "h": 88 - }, - "frame": { - "x": 192, - "y": 0, - "w": 94, - "h": 88 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 94, - "h": 88 - }, - "frame": { - "x": 192, - "y": 0, - "w": 94, - "h": 88 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 94, - "h": 88 - }, - "frame": { - "x": 192, - "y": 0, - "w": 94, - "h": 88 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 94, - "h": 88 - }, - "frame": { - "x": 192, - "y": 0, - "w": 94, - "h": 88 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 94, - "h": 88 - }, - "frame": { - "x": 192, - "y": 0, - "w": 94, - "h": 88 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 94, - "h": 88 - }, - "frame": { - "x": 192, - "y": 0, - "w": 94, - "h": 88 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 94, - "h": 88 - }, - "frame": { - "x": 192, - "y": 0, - "w": 94, - "h": 88 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 94, - "h": 88 - }, - "frame": { - "x": 192, - "y": 0, - "w": 94, - "h": 88 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 94, - "h": 88 - }, - "frame": { - "x": 192, - "y": 0, - "w": 94, - "h": 88 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 94, - "h": 88 - }, - "frame": { - "x": 192, - "y": 0, - "w": 94, - "h": 88 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 92, - "h": 89 - }, - "frame": { - "x": 0, - "y": 264, - "w": 92, - "h": 89 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 92, - "h": 89 - }, - "frame": { - "x": 0, - "y": 264, - "w": 92, - "h": 89 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 92, - "h": 89 - }, - "frame": { - "x": 0, - "y": 264, - "w": 92, - "h": 89 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 92, - "h": 89 - }, - "frame": { - "x": 0, - "y": 264, - "w": 92, - "h": 89 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 92, - "h": 89 - }, - "frame": { - "x": 0, - "y": 264, - "w": 92, - "h": 89 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 92, - "h": 89 - }, - "frame": { - "x": 0, - "y": 264, - "w": 92, - "h": 89 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 92, - "h": 89 - }, - "frame": { - "x": 0, - "y": 264, - "w": 92, - "h": 89 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 92, - "h": 89 - }, - "frame": { - "x": 0, - "y": 264, - "w": 92, - "h": 89 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 92, - "h": 89 - }, - "frame": { - "x": 0, - "y": 353, - "w": 92, - "h": 89 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 92, - "h": 88 - }, - "frame": { - "x": 96, - "y": 176, - "w": 92, - "h": 88 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 92, - "h": 88 - }, - "frame": { - "x": 96, - "y": 176, - "w": 92, - "h": 88 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 92, - "h": 88 - }, - "frame": { - "x": 96, - "y": 176, - "w": 92, - "h": 88 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 92, - "h": 88 - }, - "frame": { - "x": 96, - "y": 176, - "w": 92, - "h": 88 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 92, - "h": 88 - }, - "frame": { - "x": 96, - "y": 176, - "w": 92, - "h": 88 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 92, - "h": 88 - }, - "frame": { - "x": 96, - "y": 176, - "w": 92, - "h": 88 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 92, - "h": 88 - }, - "frame": { - "x": 96, - "y": 176, - "w": 92, - "h": 88 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 92, - "h": 88 - }, - "frame": { - "x": 96, - "y": 176, - "w": 92, - "h": 88 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 92, - "h": 89 - }, - "frame": { - "x": 92, - "y": 264, - "w": 92, - "h": 89 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 90, - "h": 90 - }, - "frame": { - "x": 92, - "y": 353, - "w": 90, - "h": 90 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 90, - "h": 90 - }, - "frame": { - "x": 92, - "y": 353, - "w": 90, - "h": 90 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 90, - "h": 90 - }, - "frame": { - "x": 92, - "y": 353, - "w": 90, - "h": 90 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 90, - "h": 90 - }, - "frame": { - "x": 92, - "y": 353, - "w": 90, - "h": 90 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 90, - "h": 90 - }, - "frame": { - "x": 92, - "y": 353, - "w": 90, - "h": 90 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 90, - "h": 90 - }, - "frame": { - "x": 92, - "y": 353, - "w": 90, - "h": 90 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 90, - "h": 90 - }, - "frame": { - "x": 92, - "y": 353, - "w": 90, - "h": 90 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 90, - "h": 90 - }, - "frame": { - "x": 92, - "y": 353, - "w": 90, - "h": 90 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 89, - "h": 89 - }, - "frame": { - "x": 192, - "y": 88, - "w": 89, - "h": 89 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 89, - "h": 89 - }, - "frame": { - "x": 192, - "y": 88, - "w": 89, - "h": 89 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 89, - "h": 89 - }, - "frame": { - "x": 192, - "y": 88, - "w": 89, - "h": 89 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 89, - "h": 89 - }, - "frame": { - "x": 192, - "y": 88, - "w": 89, - "h": 89 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 89, - "h": 89 - }, - "frame": { - "x": 286, - "y": 0, - "w": 89, - "h": 89 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 89, - "h": 89 - }, - "frame": { - "x": 286, - "y": 0, - "w": 89, - "h": 89 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 89, - "h": 89 - }, - "frame": { - "x": 286, - "y": 0, - "w": 89, - "h": 89 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 89, - "h": 89 - }, - "frame": { - "x": 286, - "y": 0, - "w": 89, - "h": 89 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 86, - "h": 87 - }, - "frame": { - "x": 375, - "y": 0, - "w": 86, - "h": 87 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 86, - "h": 87 - }, - "frame": { - "x": 375, - "y": 87, - "w": 86, - "h": 87 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 89, - "h": 89 - }, - "frame": { - "x": 188, - "y": 177, - "w": 89, - "h": 89 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 89, - "h": 89 - }, - "frame": { - "x": 281, - "y": 89, - "w": 89, - "h": 89 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 88, - "h": 89 - }, - "frame": { - "x": 277, - "y": 178, - "w": 88, - "h": 89 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 88, - "h": 89 - }, - "frame": { - "x": 277, - "y": 178, - "w": 88, - "h": 89 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 88, - "h": 89 - }, - "frame": { - "x": 277, - "y": 178, - "w": 88, - "h": 89 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 88, - "h": 89 - }, - "frame": { - "x": 277, - "y": 178, - "w": 88, - "h": 89 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 88, - "h": 89 - }, - "frame": { - "x": 184, - "y": 266, - "w": 88, - "h": 89 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 88, - "h": 89 - }, - "frame": { - "x": 184, - "y": 266, - "w": 88, - "h": 89 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 88, - "h": 89 - }, - "frame": { - "x": 184, - "y": 266, - "w": 88, - "h": 89 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 88, - "h": 89 - }, - "frame": { - "x": 184, - "y": 266, - "w": 88, - "h": 89 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 88, - "h": 89 - }, - "frame": { - "x": 182, - "y": 355, - "w": 88, - "h": 89 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 88, - "h": 89 - }, - "frame": { - "x": 182, - "y": 355, - "w": 88, - "h": 89 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 88, - "h": 89 - }, - "frame": { - "x": 182, - "y": 355, - "w": 88, - "h": 89 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 88, - "h": 89 - }, - "frame": { - "x": 182, - "y": 355, - "w": 88, - "h": 89 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 87, - "h": 89 - }, - "frame": { - "x": 272, - "y": 267, - "w": 87, - "h": 89 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 87, - "h": 89 - }, - "frame": { - "x": 270, - "y": 356, - "w": 87, - "h": 89 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 87, - "h": 87 - }, - "frame": { - "x": 359, - "y": 267, - "w": 87, - "h": 87 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 87, - "h": 87 - }, - "frame": { - "x": 365, - "y": 178, - "w": 87, - "h": 87 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 87, - "h": 87 - }, - "frame": { - "x": 357, - "y": 356, - "w": 87, - "h": 87 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 87, - "h": 87 - }, - "frame": { - "x": 357, - "y": 356, - "w": 87, - "h": 87 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:fd28dfd35a375d4d0d568c72bbbe079f:b186d9a5868eaf1d0a3bd9bcddd90d79:c2f7ca3ab1075b8c824730653d891244$" - } -} diff --git a/public/images/pokemon/exp/784.png b/public/images/pokemon/exp/784.png deleted file mode 100644 index e3e384d4699aa4dcb06183cb509a82fd460e97a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17198 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 RE*{8X@O1TaS?83{1OPDyYIFbq diff --git a/public/images/pokemon/exp/840.png b/public/images/pokemon/exp/840.png index 3e76cd5fff8187b7bf69ed942f5830d7dc69c6e1..86b701fa0d7e17954f3392c833899ccc86c0451f 100644 GIT binary patch literal 3795 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 O002ovPDHLkU;%=iPT_O_ diff --git a/public/images/pokemon/exp/841.png b/public/images/pokemon/exp/841.png index 2bf0ad3b1384ce2390231daa842a958291aa392d..564ffaa0f275095d7c71d6808bc00575c0947378 100644 GIT binary patch literal 4168 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 diff --git a/public/images/pokemon/exp/842.png b/public/images/pokemon/exp/842.png index 85b9ae30fe0c20323941451a7b04f05e26784201..41c2ebcf7d402da2886398b644ac2782c5e01661 100644 GIT binary patch literal 4654 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 literal 4472 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 KMNUMnLSTZP5W^J! diff --git a/public/images/pokemon/exp/871.png b/public/images/pokemon/exp/871.png index d4ffceea07aaf9a76b5426761b3fac8e4668bf56..8f03d72f0b3e45a55d451b561e86e9fae0072571 100644 GIT binary patch literal 4887 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 R(nbIP002ovPDHLkV1j06pD_Rc diff --git a/public/images/pokemon/exp/back/2038.png b/public/images/pokemon/exp/back/2038.png index 9ad8025933af2f667060e2eb8ec220ef68c11b43..f4a022692a1116127f9b17af4fdafe3329043dfa 100644 GIT binary patch delta 10386 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 diff --git a/public/images/pokemon/exp/back/692.png b/public/images/pokemon/exp/back/692.png index e3eb957a624af8bbe497802dafaf1f8f70542d13..33059d53c053fe33cd8ac5e9cee85712160c6ac3 100644 GIT binary patch delta 1870 zcmV-U2eJ765Bm?0d4Fw5L_t(|oZVa7cB3#1L?H<#{r~@6UuD^rL6Upg-Q}fe!+7M8 zp)dp6_FrxA_zmb1b`1{i$HO`Zyv?+UaHZ^5`Jf$y%-BTzekHg?bgWh{U4@!dgZH}~ z=7+co)WnNb+a~?Cb0gF!_5vCTcUfq9s7>r`1r4v)!-)3Kbbm1GCtR2#uLYgK*lz>W zxU$onp%U-=ejJAcd&JE|jnKDY#)!^`CBSh!pU?9=?+XVwVs&UZoc{$< z+2_~g7!Y=QW_W40v}OtoRqMoR(Qw3%rRwwRYd%7RBHTf$TBO$i)rd8q{d~hu=LBWL zzC)UH+|y$~s(;rARfxr)U$4W3&406>mji%@h8=UW!bhoI15_gxgMQJf{f{&PJ3u-f zGSlufdW}%ISRDHCcr;a~!uhJx=(w*!uK}tMYebLmTsMP_<$4WJjaUpiOgf?4s$CBUJce;^sa_0pobg;N27ldlxfboZ+l{!gpd1XjYMEXf zbeD?7qr(x^p~K{$tGXNx@Z9gJ?(_l{x(mhPiNg|c&2IpitXo+HjU;~0d%f`F(nEz} zO^5-23eVq$;w3;s^10V5Ey?CMO3=?oAQrjw=+U2Cc3NzF(cQ8_;yb;<$Q9W@1!6%n z=MEjd#(%Z;U_1wC)QndI?(j;(HrFeS+x3A$^S8WM_4_G0Pb(c<&7~(K#X>Y`qYEOZ)qLXs zMZr?pN0?8<;L<3ofz`_|$aHP#&lM5+8KE<=(tqE=n2|WnInI?qvt|3bGdB!N<7RP1 zWcaX!qqB^V`g7}-WptTQYLOOQcdi;!Fss*d$K|`tp_A>2=rTUaG&wmp+}(LpK|PEP zI^G%DvT3NllXo-Pukfr^=jGyuNAwl?4`0TRWI26 zu)w=OTkrOR>#j1+Be6M@S)pCA`y;VYt`*vi@$7ZPC|9gn9IGtQ2J~q6i=l)z%GJaK z*QGDeMs#oY$7@fCWR*Bs?JqcKOmG!Ytbfo(c<;J9CrnlfaVfhEH_or?T*XYA;DhTf zOjhy<0Lz9xCb-Vdth5O|c=p0%1&T|Us@`k3fib~6ps>>xbZ7SqlNJ0LX@{6#9#Gh6 z6MD4!WyuQA!$@JcFVZIT*}Lw-WTl)ep0#Qw+;D6_u|SLH&UKe1D}ZZo&RaI7PhVEr z)TVsMG$yB{(FNG>BCsoa_}^isjbPSwmn18|07)8jnNaX(5p7bsjT&5X-G#}@lbo|E zamSl^MzKt^5$tHxkWJcP2Md#xCf$h4UAi$Eb1Yg+n``cr`h=_iHj~fkW7I%Gimk$@$x5AX+;aqmk6F~=cIqB|ofZOy1=EmXlC0GEUZop(-wU;L zw1^kvBYd)w=W7X8WN40dHh-Qpr09p!r5kJLaX4#8u@#xnMh;+JUu>CGNgd`psJ z9K>dawn+7BAn;hrWj6Bmi2ezCG=i1xqzAn4Bk|f~Pci2a>`{R|(;-OzX-^K$ofp!K zVD45QuE-^W`rb+QovQsKD}3R_6?_dNH(DWCJ}j#5q%9lY;n1g1HGid0OZJX*^%=bi zz4SI2YUPpP@AY#|p_Z&bp)uQ%88Wl2__9-`C2lkE-L;Y-6prDpQB-!-D_-S@+YHoq z*GWd8{Jrj7)l@H4oAbR?A=gMoprOe^+iIqls?FtAC>z)s$q3Z{laxJJJJn0oW^~T= zl2PcyY`eUYZS~T$nSXd+Po-oHl(EZ_RWYx+)l1Rl+MaT6EtL#8jv9!X~_c^0zK%Sqc@ACo63g-EjOeN!mZLZcg;KX1TNmiRnp|$GU>w8u&CulRVzNx#q3zP5$7YJ@8YmDFq>XMTW z2OobOFRG@VeLLxSn>p(n$Rpgo?v0m>dq|#`l`cc?w%+m2Gj3m{=-SL!-=7cl&Z{-w zOU67TA5nquGrk*eQ8W>3-*Lti@THncp&I4ZZl85BuuO7PcOmM51VAh8!>YY7B+RM zwP20oFW8n$Xa#u9@t+b~HVycDJ^LjS`iExx7j6G!(SQB+2TVhpl#SZT)&Kwi07*qo IM6N<$f@G1w=l}o! delta 1892 zcmV-q2b=i&5B?93d4F(8L_t(|oZVa7cH0pa zxbckR+<$ez<2Rs7*flu39}nvw@HW#X!j-aL<%M<-GGi0<`<37p(Xm>+bQNk+4c_l| zm>=RUP!lg!ZJYGl&W%u`*b8VV+-0HZp*FGI3L0LohY@{3(|=~xPq;8gUJE*dvEK%$ zab>4DLnYp}ZQpkZc8`aN8li8)j1ir;CBVKvpU>ks?h6Mv;&Gm+t(t?%#p=+o`|}q_ zWglOcV?a3Vnc=0~(wZqWRIL-MMZ+Fnma31hulWcOif|99YLQ+8R3p}aKIa>LdM_v& zwhhvx#r<8lBvq2a{btngB**8tUs#h_ob>hnh$fgK?2 zhs?Bjjb0;EE*6J=JRVKesc^pPG&-KE&})Dy#2V2fJlD(0Lv?QB-l%SuFKrHgnqep*o*=e!yMR&^ziSP6ZBUfYt6^I4R zoI7-Q8-Lf@gYg`oQ8Rub@cXGWxVc_w+^!E4n&0Kcs_#$Hd0J_6H6K060%})P{DH)b zUZ+NJ$T`$qhy?*$(Vj)q66xRKvLMuf#HU477Vk{21kF9&qDVb-E*7Fm8+{Ntt>zmC zC<>O!-otz%2A4)z4Xj@0f=r(+&uc}5en#j_tbg>kFlHoN-ff&>&aDP3TE|sZn%8i96C9kh%V!!Op}Xq!`)p+71YD% zpyQpPEr*8sJ9(YahFzy#DthhsE$Vt@T}&K)l$JR5TGMJNl(Exh)XRup31t>&3+iny zyMII@24XvHhgTcHu#gih(5{l#Y{U@5EzLQ=(EL`f5v+Q_u2<6zc&*rVWiOR&sd~Zg zhXvjR+IqJiTz8dm9*NDN%nI#_-5-gKa;?xh#9YJb5&V}h%IVt<7;!h6@? zVX~4h09ZEkF~N0qW~EK&!Lt`8D^Og*RP|QF4U7rq0fn8mpgX%?n5^L2NIS#?^MJxm zo6w`(FH2T{ZX<=^zDS$UNAJ1|la+F@c-E?!aKp0!#R4s&JJ(&7tN^aTId3_bK3`dB zQ=9UZX-rN@qYJR%MPOI<@V~=M8^NsWE=g8^0g^Q6GNItnBHE;M8#Vakx(kz)C%I-- z;*K}-jAEH+BiPfZA)BAb&4tx-m0H zI<%N}Od5ihTOufM^JJx;ZAZC%~eBQPBdvCcE2E5*^9_~NwzTE zC^9zj==CTi#ps+-J`G5Lcp+K8d6M>l{(+6bR(a8 zp_Yyo@q&DWPge4LEy0Qm&41C(#*>B={cyT;V+}nHXALRVf|bQs#vW4q674^I*n^61 zNpg&X*zC|2ss0)WJl1jk(F)1(wy3_7wru#ahr+nu9Xa-un%{QqOz-A@l%et z%|Ly3on!>c-|OC0P4!Z>Ip0eaa*bpJ8k#J$t!8?u+FWjhvVpCUj6lzSlClSDr+TT{ zjLx}UG76oTZI_>9TYtSYZ6@B=Qz=;kW$dzKRm`hy^-{FCwx`@%OC^II+FOLTH#ePL zo4Czz2z+-|GB|qZiKMfYJPXu)7%jNk_9lamVvAAb`ss-~WOJL!3wIqMt9Biv`*j+cykNS>IL zK11)0-to^fZof*=wVAQLoeSQ19*$V^y=2To^3HwYg{j!~!lH>_+lDiaNd@2L!TOHl z?7bPx6V`|1)3jU#3%(k_diJ4$JY$R&n4Lk)+*9P@@QbP@56Oo^37&ZN9G2M`)lvEu zSlB%=u~hY7*0TpEnXw~guED~lF0~e{ar_0xk_oKZ diff --git a/public/images/pokemon/exp/back/750.png b/public/images/pokemon/exp/back/750.png index 1c9391b5f7a03bcfebe94cabe52bf2fd498d7800..5ecd848832eb1f7a763a3e7adc0bca67a70ae3e0 100644 GIT binary patch delta 38836 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

      thxIFr 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 diff --git a/public/images/pokemon/exp/back/782.json b/public/images/pokemon/exp/back/782.json deleted file mode 100644 index aa9698c6554..00000000000 --- a/public/images/pokemon/exp/back/782.json +++ /dev/null @@ -1,2351 +0,0 @@ -{ - "textures": [ - { - "image": "782.png", - "format": "RGBA8888", - "size": { - "w": 239, - "h": 239 - }, - "scale": 1, - "frames": [ - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 0, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 0, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 0, - "w": 48, - "h": 52 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 0, - "y": 104, - "w": 48, - "h": 52 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 96, - "y": 0, - "w": 48, - "h": 52 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 0, - "y": 156, - "w": 48, - "h": 52 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 104, - "w": 48, - "h": 52 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 104, - "w": 48, - "h": 52 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 96, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 96, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 96, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 144, - "y": 0, - "w": 48, - "h": 52 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 144, - "y": 0, - "w": 48, - "h": 52 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 144, - "y": 0, - "w": 48, - "h": 52 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 144, - "y": 0, - "w": 48, - "h": 52 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 144, - "y": 0, - "w": 48, - "h": 52 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 0, - "w": 47, - "h": 51 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 0, - "w": 47, - "h": 51 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 0, - "w": 47, - "h": 51 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 0, - "w": 47, - "h": 51 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 0, - "w": 47, - "h": 51 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 0, - "w": 47, - "h": 51 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 0, - "w": 47, - "h": 51 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 0, - "w": 47, - "h": 51 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 0, - "w": 47, - "h": 51 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 0, - "w": 47, - "h": 51 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 156, - "w": 48, - "h": 52 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 156, - "w": 48, - "h": 52 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 156, - "w": 48, - "h": 52 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 156, - "w": 48, - "h": 52 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 96, - "y": 104, - "w": 48, - "h": 52 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 51, - "w": 47, - "h": 51 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 51, - "w": 47, - "h": 51 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 51, - "w": 47, - "h": 51 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 51, - "w": 47, - "h": 51 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 51, - "w": 47, - "h": 51 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 51, - "w": 47, - "h": 51 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 51, - "w": 47, - "h": 51 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 51, - "w": 47, - "h": 51 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 51, - "w": 47, - "h": 51 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 51, - "w": 47, - "h": 51 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 96, - "y": 156, - "w": 48, - "h": 51 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 96, - "y": 156, - "w": 48, - "h": 51 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 96, - "y": 156, - "w": 48, - "h": 51 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 96, - "y": 156, - "w": 48, - "h": 51 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 96, - "y": 156, - "w": 48, - "h": 51 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 96, - "y": 156, - "w": 48, - "h": 51 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 96, - "y": 156, - "w": 48, - "h": 51 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 96, - "y": 156, - "w": 48, - "h": 51 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 96, - "y": 156, - "w": 48, - "h": 51 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 96, - "y": 156, - "w": 48, - "h": 51 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 102, - "w": 47, - "h": 50 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 102, - "w": 47, - "h": 50 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 102, - "w": 47, - "h": 50 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 102, - "w": 47, - "h": 50 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 102, - "w": 47, - "h": 50 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 102, - "w": 47, - "h": 50 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 102, - "w": 47, - "h": 50 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 102, - "w": 47, - "h": 50 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 102, - "w": 47, - "h": 50 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 102, - "w": 47, - "h": 50 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 152, - "w": 47, - "h": 50 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 152, - "w": 47, - "h": 50 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 152, - "w": 47, - "h": 50 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 152, - "w": 47, - "h": 50 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 152, - "w": 47, - "h": 50 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 152, - "w": 47, - "h": 50 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 152, - "w": 47, - "h": 50 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 152, - "w": 47, - "h": 50 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 152, - "w": 47, - "h": 50 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 152, - "w": 47, - "h": 50 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 47, - "h": 49 - }, - "frame": { - "x": 144, - "y": 154, - "w": 47, - "h": 49 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 47, - "h": 49 - }, - "frame": { - "x": 144, - "y": 154, - "w": 47, - "h": 49 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 47, - "h": 49 - }, - "frame": { - "x": 144, - "y": 154, - "w": 47, - "h": 49 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 47, - "h": 49 - }, - "frame": { - "x": 144, - "y": 154, - "w": 47, - "h": 49 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 47, - "h": 49 - }, - "frame": { - "x": 144, - "y": 154, - "w": 47, - "h": 49 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 47, - "h": 49 - }, - "frame": { - "x": 144, - "y": 154, - "w": 47, - "h": 49 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 47, - "h": 49 - }, - "frame": { - "x": 144, - "y": 154, - "w": 47, - "h": 49 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 47, - "h": 49 - }, - "frame": { - "x": 144, - "y": 154, - "w": 47, - "h": 49 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 47, - "h": 49 - }, - "frame": { - "x": 144, - "y": 154, - "w": 47, - "h": 49 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 47, - "h": 49 - }, - "frame": { - "x": 144, - "y": 154, - "w": 47, - "h": 49 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:48f53f968d06c5de2d5b76e15505b755:5d901e7ac581518a4fe6730bcf366c83:d07862436676aa228a148ee1f1d82a8f$" - } -} diff --git a/public/images/pokemon/exp/back/782.png b/public/images/pokemon/exp/back/782.png deleted file mode 100644 index 402ac12f53a989a6ad1b7bab7deaaf1fb1c4d063..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2752 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 diff --git a/public/images/pokemon/exp/back/841.png b/public/images/pokemon/exp/back/841.png index 9e6ec5effb1c6f24894ab7887532e14e15feb095..ecf344211ef411b9c7d98685b780d9958b788b88 100644 GIT binary patch delta 2860 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 KMNUMnLSTY|_o-C? delta 2721 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 Rv7-P0002ovPDHLkV1j`W{%8OI delta 3001 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 DhO`h^ diff --git a/public/images/pokemon/exp/back/shiny/692.png b/public/images/pokemon/exp/back/shiny/692.png index c1bb353a7398b66bb89b7649c1fe4169c57c363a..baee2adcd4f3691ececabbaf818cd8b01541d627 100644 GIT binary patch delta 1905 zcmV-%2afpu5Bm?0KOeupzxeq0J)F!;!~cv(F~4F%|ASdgO-=u)jIj+b8Rn=hx*J5O#ZJcxkt^W(o~e z>%?l&aKw+L>htSsK0<^d+(D{Zq}Kq|h&7=7e8W%Y1ZBg%Lz;Bl(_=uYf7b|Ah{d2^ zufv7Sf3u&L1AvEy9don7N2y)|R3jFHe$lG^k2C^1Ksp{W)9y5SjZnE*9QyHiG*zd< z`Kr_CxUWL50jdydM33-XH-m?AER>z)dW}$pSR;B;wPWz*V8ET_dJRyGSPVK$I-%RD zT@MF5hH-DHUJP`c@mwqhf8BPu7VWy*jkvO)91OW?nO+=pmx{%s!x7b?!{nf=x*QJh z-0!OH^a2*T3&rAz!xC}LZvdIBTUiB-B!16(z3}AHLxo~Zhyj2K&)ump(9cI87P<83(Vtv)T5NpL-LgXBJH5il71=-qVnH+K4jsP6f3@~tJO^mhj8_Ei z@Jhor*DH(om{ zuWi3YUC*qGiNlZ5631R^S}lb#cG`@38SyKj%mQsez0GBpe`v%&Y^Uw;Y9kmHa)Jfg zRq~pR7-G1kIR_Y;-|97jRWI1}YT5y>6}ztNrLrwmFWCLCz`H~+K_SFBnbt1Qq4^l0~sp@cTd)x-qXr7zG%bZ_^^Yfp(}l{i`L zFF0vTa1~Ijf6zvF@47oDOjZhUDZ33f&adlS#Y~&vgX=C#R`Lk|%Z5HCxX#Y3v}b@GP1;}w z3zL;5-H6Oxx-lAaELu#PYwnc#gscEIlh6bpe;;VNF*8Rxw3v2G8iJQwA}HAA$x1)p zD8-m=q?~|BpjfnkHdhUKInktn*!_ZJK=Wa76OI^(~x44tkn5lr5kzQ3$=8#h!^A|e6o_~YYA3lXpVL^ zf1Wg?=!es#8*AusIBQ6;7OX7BGWL+-muUa#%^p;IOOj(8#Ab)KNcC$V@L0=bHuCm} z{t0_Df|c&12fXkj@!DihG3OENQGq?vAxQsePY%wV7t)Mi?p7bJ$R&gN-bwbIs{JD? zeBs3vd<`QvS|M3JEUNFMEgRqA(5F!~f2B}M_KtM*8NCX<^fno4<&oj<^>a?4maIUb zG24F;x@x6@ZDL-;OwCuNoOm07P8UH zN!wf>lP4*KNV4pGQz-gnS7zIVUcxpP>pR*7xVK2M(%c40&9ILE<^9O-to^fZeOM7+RRwrpAYrUt2N(C#ylh+QGxI?z8i2+G!bmy zamF#J;M+V}-^ql|177lyhveh09=jE=;MD-uv(M(ct7ka&$RK9!wz=Z)i>f9M$%jn| zo_O|t<^z^FGE%DbEwHeAVq&T4!K`Nwn`FitF>?(THg&1BV2$H1*p^Ia1$fQzpAuU( r4fuOK`y~_lhi3d2ZU1D^fBp6cOhcTMjoQlA00000NkvXXu0mjfrdiY$ delta 1927 zcmV;22YC4V5B?93KOap^O^iq}zhXoGgIPVC%uK`ozrVl#sf_se_`)M5@R42{e{e}e zK~#90-CNss;~)$~iE-lQ|NnQ*O$ZRSBzoH2^-I&n!-x^M@r>i#e|5m)H=s+{H8{K< z59=WCHq$1;m9k&ug?11!V-xlJmEac9v0A-!6>3rq-tTspAL1@h6E9Y6oAlexjZmZ5 z3uq|ZWufVzHnH6b8eXr55q(0_e`eNCxG+av3p#_b-v+30Wv4kqB|eU0+cpVyi-(CC zp>M;C5uLXsz_xuppMBr&3kTTaah|BHnuE&4>d>(H^A|{E?_ZZ=KsfD_;icWunkh6? ztrM$7!xmqbs`sz2`3Mn;a1W_!kzNB-Bi4XE=No={FDM(11Jb19nI{IMe|n8jg;)&w z_1b(m&UcReasW7?;l$jm@KUPR0M&@apkK7=^G6zi9U$$8%yf8-UL#a47KeU39!=G$ zaK7p^I-aZ0Yk(@m8qp&>*UjLe?1gf&T(1$T5NkwFs`d=NYz918uGaw7h{d48q!YTW z+V^n4J&b2d^qo<-9V z>EGhAAk=}xr$tp3?@X@*%{@J$NIi5e7NSWTeGoaV<{Jkn3YN;=!h9kImqu9)tX}7W zOrI^!Yej@UN9atffAqI7W+aYtj&o(uY}sesnHz?sakIE0GQ4nMca{-Se{TJUw2eOdNicmN@oW(`qS{vD0SM%ZOhIWfo`)>TNE&e?%h&VmobzR~x~wkP|G> zu9DYm#1O+R%{jo({8q0Kta`z&SJMu7t=M&CFO_Yndcp381>ObPdbb~3ca?D-iOr$R z3hj#BABl}}t;f~$aHe}y)}d)M82VX{()OWAF>v436XDrVXQA6$1~vXUI7RYP7*G-)7qzaUxJipX0@wlLi&IYA$tP0;tWWzHBikdVSv z_%vCm^NnYY!0mylZF)iaJqD34LuHL4Jp=wmBm=b9#Z@g?LU3kgNkoSa*Tu6?9dje{u&58)^Zs~ zzCEIU!XAxar8{{7UigxDZL+7B^9c5+z@F(46Clk7WH z`$tyz!WUQYYZ$rF3d!=esJ@f7Z2S&~e?E<>DTP|HcciP&=vC;Yx5-c|cgA_IpK}Ve zWCaS1*_O)usO^-{Gt z-%Ay8jbsEGnk=-fW_qdGTyBN3fvu5@K+k`YvIlFYda2rs&beMP3Z0m3m!D)?f4wwq zCf?UaDOm$$?6PE4%&TtoQnb0Yr`%ghC4(N?TZFeaH=SOGxXrK&e0Nqd*n8-Sq_dSg z3)$%9rERW{$&-{qBw6;pDHQ#(E3@rFFJYUD^&Ra3JX<7LX>J3hX4_58yk3$vSL+*a zVsMBgtIeg*TJ`PcdsZ(mXfv_CBdNQ32qYs$a03m`H5a$-vTk7Y612IozNxG0ZzXGt z;0EfGlM4qQe-kgNrk;H}>3N$u>l?@;+-Kd6myCNzo|u(BL+_5>@y|1Eze>@ynX$f| z3*LDij#%@(WXwbI&OPIWso3_yqKRO~fisRt1>feu`i|ply&23C)`#TNv|I%Xz8b)K z_Mw72V~iG|Ci>f9M$%jJ;o_O{gmf0EAQTi5G*gY|^RP|uivj-=cu_I=# z!NR64wHB;#`~}C739SIHIsQ{(%b@{(uV=qxLjTZ=|DxlcEc&lM{s4QWm$!nKCuaZv N002ovPDHLkV1l>p%m)Af diff --git a/public/images/pokemon/exp/back/shiny/782.json b/public/images/pokemon/exp/back/shiny/782.json deleted file mode 100644 index facd127868f..00000000000 --- a/public/images/pokemon/exp/back/shiny/782.json +++ /dev/null @@ -1,2351 +0,0 @@ -{ - "textures": [ - { - "image": "782.png", - "format": "RGBA8888", - "size": { - "w": 239, - "h": 239 - }, - "scale": 1, - "frames": [ - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 0, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 0, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 0, - "w": 48, - "h": 52 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 0, - "y": 104, - "w": 48, - "h": 52 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 96, - "y": 0, - "w": 48, - "h": 52 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 0, - "y": 156, - "w": 48, - "h": 52 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 104, - "w": 48, - "h": 52 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 104, - "w": 48, - "h": 52 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 96, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 96, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 96, - "y": 52, - "w": 48, - "h": 52 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 144, - "y": 0, - "w": 48, - "h": 52 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 144, - "y": 0, - "w": 48, - "h": 52 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 144, - "y": 0, - "w": 48, - "h": 52 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 144, - "y": 0, - "w": 48, - "h": 52 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 144, - "y": 0, - "w": 48, - "h": 52 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 0, - "w": 47, - "h": 51 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 0, - "w": 47, - "h": 51 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 0, - "w": 47, - "h": 51 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 0, - "w": 47, - "h": 51 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 0, - "w": 47, - "h": 51 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 0, - "w": 47, - "h": 51 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 0, - "w": 47, - "h": 51 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 0, - "w": 47, - "h": 51 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 0, - "w": 47, - "h": 51 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 0, - "w": 47, - "h": 51 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 156, - "w": 48, - "h": 52 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 156, - "w": 48, - "h": 52 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 156, - "w": 48, - "h": 52 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 48, - "y": 156, - "w": 48, - "h": 52 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 48, - "h": 52 - }, - "frame": { - "x": 96, - "y": 104, - "w": 48, - "h": 52 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 52, - "w": 48, - "h": 51 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 51, - "w": 47, - "h": 51 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 51, - "w": 47, - "h": 51 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 51, - "w": 47, - "h": 51 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 51, - "w": 47, - "h": 51 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 51, - "w": 47, - "h": 51 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 51, - "w": 47, - "h": 51 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 51, - "w": 47, - "h": 51 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 51, - "w": 47, - "h": 51 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 51, - "w": 47, - "h": 51 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 47, - "h": 51 - }, - "frame": { - "x": 192, - "y": 51, - "w": 47, - "h": 51 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 96, - "y": 156, - "w": 48, - "h": 51 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 96, - "y": 156, - "w": 48, - "h": 51 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 96, - "y": 156, - "w": 48, - "h": 51 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 96, - "y": 156, - "w": 48, - "h": 51 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 96, - "y": 156, - "w": 48, - "h": 51 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 96, - "y": 156, - "w": 48, - "h": 51 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 96, - "y": 156, - "w": 48, - "h": 51 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 96, - "y": 156, - "w": 48, - "h": 51 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 96, - "y": 156, - "w": 48, - "h": 51 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 96, - "y": 156, - "w": 48, - "h": 51 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 48, - "h": 51 - }, - "frame": { - "x": 144, - "y": 103, - "w": 48, - "h": 51 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 102, - "w": 47, - "h": 50 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 102, - "w": 47, - "h": 50 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 102, - "w": 47, - "h": 50 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 102, - "w": 47, - "h": 50 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 102, - "w": 47, - "h": 50 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 102, - "w": 47, - "h": 50 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 102, - "w": 47, - "h": 50 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 102, - "w": 47, - "h": 50 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 102, - "w": 47, - "h": 50 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 102, - "w": 47, - "h": 50 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 152, - "w": 47, - "h": 50 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 152, - "w": 47, - "h": 50 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 152, - "w": 47, - "h": 50 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 152, - "w": 47, - "h": 50 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 152, - "w": 47, - "h": 50 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 152, - "w": 47, - "h": 50 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 152, - "w": 47, - "h": 50 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 152, - "w": 47, - "h": 50 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 152, - "w": 47, - "h": 50 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 47, - "h": 50 - }, - "frame": { - "x": 192, - "y": 152, - "w": 47, - "h": 50 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 47, - "h": 49 - }, - "frame": { - "x": 144, - "y": 154, - "w": 47, - "h": 49 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 47, - "h": 49 - }, - "frame": { - "x": 144, - "y": 154, - "w": 47, - "h": 49 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 47, - "h": 49 - }, - "frame": { - "x": 144, - "y": 154, - "w": 47, - "h": 49 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 47, - "h": 49 - }, - "frame": { - "x": 144, - "y": 154, - "w": 47, - "h": 49 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 47, - "h": 49 - }, - "frame": { - "x": 144, - "y": 154, - "w": 47, - "h": 49 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 47, - "h": 49 - }, - "frame": { - "x": 144, - "y": 154, - "w": 47, - "h": 49 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 47, - "h": 49 - }, - "frame": { - "x": 144, - "y": 154, - "w": 47, - "h": 49 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 47, - "h": 49 - }, - "frame": { - "x": 144, - "y": 154, - "w": 47, - "h": 49 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 47, - "h": 49 - }, - "frame": { - "x": 144, - "y": 154, - "w": 47, - "h": 49 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 47, - "h": 49 - }, - "frame": { - "x": 144, - "y": 154, - "w": 47, - "h": 49 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:037c9a33b267f5b73f2e7c10c87bf653:509435f895db2af666d45fff3ec043dc:d07862436676aa228a148ee1f1d82a8f$" - } -} diff --git a/public/images/pokemon/exp/back/shiny/782.png b/public/images/pokemon/exp/back/shiny/782.png deleted file mode 100644 index 9ecbcf1f0352c5c6dd43a3b0e0f8133ac7cff451..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2749 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 M07*qoM6N<$f+U)2SO5S3 diff --git a/public/images/pokemon/exp/back/shiny/784.json b/public/images/pokemon/exp/back/shiny/784.json deleted file mode 100644 index 27f3d18b7d6..00000000000 --- a/public/images/pokemon/exp/back/shiny/784.json +++ /dev/null @@ -1,230 +0,0 @@ -{ - "textures": [ - { - "image": "784.png", - "format": "RGBA8888", - "size": { - "w": 240, - "h": 240 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 86, - "h": 81 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 86, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 86, - "h": 81 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 81 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 84, - "h": 81 - }, - "frame": { - "x": 86, - "y": 0, - "w": 84, - "h": 81 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 81 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 84, - "h": 81 - }, - "frame": { - "x": 86, - "y": 0, - "w": 84, - "h": 81 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 81 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 81 - }, - "frame": { - "x": 0, - "y": 81, - "w": 81, - "h": 81 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 81 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 81 - }, - "frame": { - "x": 0, - "y": 81, - "w": 81, - "h": 81 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 81 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 78, - "h": 81 - }, - "frame": { - "x": 81, - "y": 81, - "w": 78, - "h": 81 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 81 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 78, - "h": 81 - }, - "frame": { - "x": 81, - "y": 81, - "w": 78, - "h": 81 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 81 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 79, - "h": 79 - }, - "frame": { - "x": 159, - "y": 81, - "w": 79, - "h": 79 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 81 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 78, - "h": 80 - }, - "frame": { - "x": 159, - "y": 160, - "w": 78, - "h": 80 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 81 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 78, - "h": 80 - }, - "frame": { - "x": 159, - "y": 160, - "w": 78, - "h": 80 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:841ddb49f9601ed6f43373fcdfd97a55:abdfda19e619b7f57eb4c9c5d68cc9d9:c2f7ca3ab1075b8c824730653d891244$" - } -} diff --git a/public/images/pokemon/exp/back/shiny/784.png b/public/images/pokemon/exp/back/shiny/784.png deleted file mode 100644 index fdec2486c5694d367b197ec8db18eb2e49ba395d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5262 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 R=f8zChPtLYAGMsL{|{mm8TtSK diff --git a/public/images/pokemon/exp/back/shiny/840.json b/public/images/pokemon/exp/back/shiny/840.json index ccacb7508ff..eb5a925c565 100644 --- a/public/images/pokemon/exp/back/shiny/840.json +++ b/public/images/pokemon/exp/back/shiny/840.json @@ -1,230 +1,1145 @@ -{ - "textures": [ - { - "image": "840.png", - "format": "RGBA8888", - "size": { - "w": 95, - "h": 95 - }, - "scale": 1, - "frames": [ - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 42 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 32, - "h": 42 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 42 - }, - "frame": { - "x": 0, - "y": 42, - "w": 32, - "h": 42 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 32, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 32, - "h": 42 - }, - "frame": { - "x": 0, - "y": 42, - "w": 32, - "h": 42 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 32, - "h": 41 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 41 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 32, - "h": 41 - }, - "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 41 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 31, - "h": 42 - }, - "frame": { - "x": 64, - "y": 0, - "w": 31, - "h": 42 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 31, - "h": 42 - }, - "frame": { - "x": 32, - "y": 41, - "w": 31, - "h": 42 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 31, - "h": 41 - }, - "frame": { - "x": 63, - "y": 42, - "w": 31, - "h": 41 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 31, - "h": 41 - }, - "frame": { - "x": 63, - "y": 42, - "w": 31, - "h": 41 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:c19a2ef85c7903c2a4c922be93e361d7:7a1608b4463c8ee6cb033125d1c506b4:c6a93eb4343acba47be6c18cd2c93ef1$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 73, "y": 44, "w": 33, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 33, "h": 41 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0002.png", + "frame": { "x": 136, "y": 90, "w": 33, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 33, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0003.png", + "frame": { "x": 171, "y": 91, "w": 33, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 33, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0004.png", + "frame": { "x": 37, "y": 44, "w": 34, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 34, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0005.png", + "frame": { "x": 79, "y": 2, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0006.png", + "frame": { "x": 41, "y": 2, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0007.png", + "frame": { "x": 2, "y": 2, "w": 37, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 37, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0008.png", + "frame": { "x": 2, "y": 2, "w": 37, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 37, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0009.png", + "frame": { "x": 2, "y": 2, "w": 37, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 37, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0010.png", + "frame": { "x": 116, "y": 2, "w": 34, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 34, "h": 41 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0011.png", + "frame": { "x": 35, "y": 131, "w": 33, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 33, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0012.png", + "frame": { "x": 136, "y": 132, "w": 33, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 33, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0013.png", + "frame": { "x": 171, "y": 133, "w": 33, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 33, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0014.png", + "frame": { "x": 73, "y": 44, "w": 33, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 33, "h": 41 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0015.png", + "frame": { "x": 73, "y": 44, "w": 33, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 33, "h": 41 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0016.png", + "frame": { "x": 152, "y": 2, "w": 33, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 33, "h": 42 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0017.png", + "frame": { "x": 108, "y": 45, "w": 32, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 32, "h": 42 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0018.png", + "frame": { "x": 176, "y": 46, "w": 31, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 31, "h": 43 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0019.png", + "frame": { "x": 37, "y": 86, "w": 31, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 31, "h": 43 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0020.png", + "frame": { "x": 70, "y": 87, "w": 31, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 31, "h": 43 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0021.png", + "frame": { "x": 2, "y": 88, "w": 31, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 31, "h": 43 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0022.png", + "frame": { "x": 2, "y": 88, "w": 31, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 31, "h": 43 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0023.png", + "frame": { "x": 2, "y": 88, "w": 31, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 31, "h": 43 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0024.png", + "frame": { "x": 70, "y": 132, "w": 30, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 30, "h": 43 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0025.png", + "frame": { "x": 103, "y": 89, "w": 31, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 31, "h": 43 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0026.png", + "frame": { "x": 142, "y": 46, "w": 32, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 32, "h": 42 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0027.png", + "frame": { "x": 187, "y": 2, "w": 33, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 33, "h": 42 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0028.png", + "frame": { "x": 2, "y": 44, "w": 33, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 33, "h": 42 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0029.png", + "frame": { "x": 73, "y": 44, "w": 33, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 33, "h": 41 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0030.png", + "frame": { "x": 73, "y": 44, "w": 33, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 33, "h": 41 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0031.png", + "frame": { "x": 73, "y": 44, "w": 33, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 33, "h": 41 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0032.png", + "frame": { "x": 73, "y": 44, "w": 33, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 33, "h": 41 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0033.png", + "frame": { "x": 73, "y": 44, "w": 33, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 33, "h": 41 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0034.png", + "frame": { "x": 136, "y": 90, "w": 33, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 33, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0035.png", + "frame": { "x": 171, "y": 91, "w": 33, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 33, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0036.png", + "frame": { "x": 37, "y": 44, "w": 34, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 34, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0037.png", + "frame": { "x": 79, "y": 2, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0038.png", + "frame": { "x": 41, "y": 2, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0039.png", + "frame": { "x": 2, "y": 2, "w": 37, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 37, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0040.png", + "frame": { "x": 2, "y": 2, "w": 37, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 37, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0041.png", + "frame": { "x": 2, "y": 2, "w": 37, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 37, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0042.png", + "frame": { "x": 116, "y": 2, "w": 34, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 34, "h": 41 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0043.png", + "frame": { "x": 35, "y": 131, "w": 33, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 33, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0044.png", + "frame": { "x": 136, "y": 132, "w": 33, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 33, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0045.png", + "frame": { "x": 171, "y": 133, "w": 33, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 33, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0046.png", + "frame": { "x": 73, "y": 44, "w": 33, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 33, "h": 41 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0047.png", + "frame": { "x": 73, "y": 44, "w": 33, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 33, "h": 41 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0048.png", + "frame": { "x": 152, "y": 2, "w": 33, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 33, "h": 42 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0049.png", + "frame": { "x": 108, "y": 45, "w": 32, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 32, "h": 42 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0050.png", + "frame": { "x": 176, "y": 46, "w": 31, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 31, "h": 43 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0051.png", + "frame": { "x": 37, "y": 86, "w": 31, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 31, "h": 43 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0052.png", + "frame": { "x": 70, "y": 87, "w": 31, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 31, "h": 43 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0053.png", + "frame": { "x": 2, "y": 88, "w": 31, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 31, "h": 43 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0054.png", + "frame": { "x": 2, "y": 88, "w": 31, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 31, "h": 43 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0055.png", + "frame": { "x": 2, "y": 88, "w": 31, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 31, "h": 43 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0056.png", + "frame": { "x": 70, "y": 132, "w": 30, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 30, "h": 43 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0057.png", + "frame": { "x": 103, "y": 89, "w": 31, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 31, "h": 43 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0058.png", + "frame": { "x": 142, "y": 46, "w": 32, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 32, "h": 42 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0059.png", + "frame": { "x": 187, "y": 2, "w": 33, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 33, "h": 42 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0060.png", + "frame": { "x": 2, "y": 44, "w": 33, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 33, "h": 42 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0061.png", + "frame": { "x": 73, "y": 44, "w": 33, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 33, "h": 41 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0062.png", + "frame": { "x": 73, "y": 44, "w": 33, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 33, "h": 41 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0063.png", + "frame": { "x": 73, "y": 44, "w": 33, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 33, "h": 41 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0064.png", + "frame": { "x": 73, "y": 44, "w": 33, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 33, "h": 41 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0065.png", + "frame": { "x": 73, "y": 44, "w": 33, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 33, "h": 41 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0066.png", + "frame": { "x": 136, "y": 90, "w": 33, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 33, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0067.png", + "frame": { "x": 171, "y": 91, "w": 33, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 33, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0068.png", + "frame": { "x": 37, "y": 44, "w": 34, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 34, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0069.png", + "frame": { "x": 79, "y": 2, "w": 35, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 35, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0070.png", + "frame": { "x": 41, "y": 2, "w": 36, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 36, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0071.png", + "frame": { "x": 2, "y": 2, "w": 37, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 37, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0072.png", + "frame": { "x": 2, "y": 2, "w": 37, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 37, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0073.png", + "frame": { "x": 2, "y": 2, "w": 37, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 37, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0074.png", + "frame": { "x": 116, "y": 2, "w": 34, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 34, "h": 41 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0075.png", + "frame": { "x": 35, "y": 131, "w": 33, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 33, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0076.png", + "frame": { "x": 136, "y": 132, "w": 33, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 33, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0077.png", + "frame": { "x": 171, "y": 133, "w": 33, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 33, "h": 40 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0078.png", + "frame": { "x": 73, "y": 44, "w": 33, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 33, "h": 41 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0079.png", + "frame": { "x": 73, "y": 44, "w": 33, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 33, "h": 41 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0080.png", + "frame": { "x": 152, "y": 2, "w": 33, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 33, "h": 42 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0081.png", + "frame": { "x": 108, "y": 45, "w": 32, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 32, "h": 42 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0082.png", + "frame": { "x": 176, "y": 46, "w": 31, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 31, "h": 43 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0083.png", + "frame": { "x": 37, "y": 86, "w": 31, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 31, "h": 43 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0084.png", + "frame": { "x": 70, "y": 87, "w": 31, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 31, "h": 43 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0085.png", + "frame": { "x": 2, "y": 88, "w": 31, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 31, "h": 43 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0086.png", + "frame": { "x": 2, "y": 88, "w": 31, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 31, "h": 43 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0087.png", + "frame": { "x": 2, "y": 88, "w": 31, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 31, "h": 43 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0088.png", + "frame": { "x": 70, "y": 132, "w": 30, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 30, "h": 43 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0089.png", + "frame": { "x": 103, "y": 89, "w": 31, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 31, "h": 43 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0090.png", + "frame": { "x": 142, "y": 46, "w": 32, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 32, "h": 42 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0091.png", + "frame": { "x": 187, "y": 2, "w": 33, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 33, "h": 42 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0092.png", + "frame": { "x": 2, "y": 44, "w": 33, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 33, "h": 42 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0093.png", + "frame": { "x": 73, "y": 44, "w": 33, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 33, "h": 41 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0094.png", + "frame": { "x": 73, "y": 44, "w": 33, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 33, "h": 41 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0095.png", + "frame": { "x": 73, "y": 44, "w": 33, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 33, "h": 41 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0096.png", + "frame": { "x": 73, "y": 44, "w": 33, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 33, "h": 41 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0097.png", + "frame": { "x": 73, "y": 44, "w": 33, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 33, "h": 41 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0098.png", + "frame": { "x": 2, "y": 173, "w": 33, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 33, "h": 39 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0099.png", + "frame": { "x": 2, "y": 133, "w": 30, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 30, "h": 34 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0100.png", + "frame": { "x": 102, "y": 134, "w": 28, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 12, "w": 28, "h": 30 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0101.png", + "frame": { "x": 102, "y": 166, "w": 27, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 27, "h": 25 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0102.png", + "frame": { "x": 102, "y": 166, "w": 27, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 27, "h": 25 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0103.png", + "frame": { "x": 102, "y": 166, "w": 27, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 27, "h": 25 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0104.png", + "frame": { "x": 102, "y": 166, "w": 27, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 27, "h": 25 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0105.png", + "frame": { "x": 102, "y": 166, "w": 27, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 13, "w": 27, "h": 25 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0106.png", + "frame": { "x": 102, "y": 166, "w": 27, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 12, "w": 27, "h": 25 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0107.png", + "frame": { "x": 102, "y": 166, "w": 27, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 11, "w": 27, "h": 25 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0108.png", + "frame": { "x": 102, "y": 166, "w": 27, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 11, "w": 27, "h": 25 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0109.png", + "frame": { "x": 102, "y": 166, "w": 27, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 12, "w": 27, "h": 25 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0110.png", + "frame": { "x": 102, "y": 166, "w": 27, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 27, "h": 25 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0111.png", + "frame": { "x": 102, "y": 166, "w": 27, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 27, "h": 25 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0112.png", + "frame": { "x": 102, "y": 166, "w": 27, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 27, "h": 25 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0113.png", + "frame": { "x": 102, "y": 166, "w": 27, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 27, "h": 25 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0114.png", + "frame": { "x": 102, "y": 166, "w": 27, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 13, "w": 27, "h": 25 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0115.png", + "frame": { "x": 102, "y": 166, "w": 27, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 12, "w": 27, "h": 25 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0116.png", + "frame": { "x": 102, "y": 166, "w": 27, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 11, "w": 27, "h": 25 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0117.png", + "frame": { "x": 102, "y": 166, "w": 27, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 11, "w": 27, "h": 25 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0118.png", + "frame": { "x": 102, "y": 166, "w": 27, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 12, "w": 27, "h": 25 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0119.png", + "frame": { "x": 102, "y": 166, "w": 27, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 27, "h": 25 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0120.png", + "frame": { "x": 102, "y": 166, "w": 27, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 27, "h": 25 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0121.png", + "frame": { "x": 102, "y": 166, "w": 27, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 27, "h": 25 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0122.png", + "frame": { "x": 102, "y": 134, "w": 28, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 12, "w": 28, "h": 30 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0123.png", + "frame": { "x": 2, "y": 133, "w": 30, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 30, "h": 34 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0124.png", + "frame": { "x": 2, "y": 173, "w": 33, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 33, "h": 39 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0125.png", + "frame": { "x": 73, "y": 44, "w": 33, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 33, "h": 41 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + }, + { + "filename": "0126.png", + "frame": { "x": 73, "y": 44, "w": 33, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 33, "h": 41 }, + "sourceSize": { "w": 37, "h": 44 }, + "duration": 80 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "840.png", + "format": "I8", + "size": { "w": 222, "h": 214 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/840.png b/public/images/pokemon/exp/back/shiny/840.png index 9a800ab956c2e08bd421587e51eeab622f5b27a7..e37bd252d7b857d46a28907c91dd85ce53080a16 100644 GIT binary patch literal 3984 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 diff --git a/public/images/pokemon/exp/shiny/692.png b/public/images/pokemon/exp/shiny/692.png index 3d938d6e64adc03ea85ec85f23a1ad6cc3a0f4dd..d46c585bdfbd8ca44335034016b85ed75d0c4fa1 100644 GIT binary patch delta 2366 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 diff --git a/public/images/pokemon/exp/shiny/783.json b/public/images/pokemon/exp/shiny/783.json deleted file mode 100644 index 440e495598b..00000000000 --- a/public/images/pokemon/exp/shiny/783.json +++ /dev/null @@ -1,2204 +0,0 @@ -{ - "textures": [ - { - "image": "783.png", - "format": "RGBA8888", - "size": { - "w": 279, - "h": 279 - }, - "scale": 1, - "frames": [ - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 64, - "h": 71 - }, - "frame": { - "x": 0, - "y": 0, - "w": 64, - "h": 71 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 64, - "h": 71 - }, - "frame": { - "x": 0, - "y": 0, - "w": 64, - "h": 71 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 64, - "h": 71 - }, - "frame": { - "x": 0, - "y": 0, - "w": 64, - "h": 71 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 64, - "h": 71 - }, - "frame": { - "x": 64, - "y": 0, - "w": 64, - "h": 71 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 63, - "h": 71 - }, - "frame": { - "x": 128, - "y": 0, - "w": 63, - "h": 71 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 63, - "h": 71 - }, - "frame": { - "x": 128, - "y": 0, - "w": 63, - "h": 71 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 63, - "h": 71 - }, - "frame": { - "x": 191, - "y": 0, - "w": 63, - "h": 71 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 63, - "h": 71 - }, - "frame": { - "x": 191, - "y": 0, - "w": 63, - "h": 71 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 63, - "h": 71 - }, - "frame": { - "x": 0, - "y": 71, - "w": 63, - "h": 71 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 63, - "h": 71 - }, - "frame": { - "x": 0, - "y": 71, - "w": 63, - "h": 71 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 63, - "h": 71 - }, - "frame": { - "x": 0, - "y": 71, - "w": 63, - "h": 71 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 63, - "h": 71 - }, - "frame": { - "x": 0, - "y": 71, - "w": 63, - "h": 71 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 63, - "h": 71 - }, - "frame": { - "x": 63, - "y": 71, - "w": 63, - "h": 71 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 63, - "h": 71 - }, - "frame": { - "x": 63, - "y": 71, - "w": 63, - "h": 71 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 63, - "h": 71 - }, - "frame": { - "x": 63, - "y": 71, - "w": 63, - "h": 71 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 63, - "h": 71 - }, - "frame": { - "x": 126, - "y": 71, - "w": 63, - "h": 71 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 62, - "h": 71 - }, - "frame": { - "x": 189, - "y": 71, - "w": 62, - "h": 71 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 62, - "h": 71 - }, - "frame": { - "x": 189, - "y": 71, - "w": 62, - "h": 71 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 63, - "h": 70 - }, - "frame": { - "x": 0, - "y": 142, - "w": 63, - "h": 70 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 63, - "h": 70 - }, - "frame": { - "x": 0, - "y": 142, - "w": 63, - "h": 70 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 63, - "h": 70 - }, - "frame": { - "x": 0, - "y": 142, - "w": 63, - "h": 70 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 63, - "h": 70 - }, - "frame": { - "x": 0, - "y": 142, - "w": 63, - "h": 70 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 63, - "h": 70 - }, - "frame": { - "x": 0, - "y": 142, - "w": 63, - "h": 70 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 63, - "h": 70 - }, - "frame": { - "x": 0, - "y": 142, - "w": 63, - "h": 70 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 63, - "h": 70 - }, - "frame": { - "x": 0, - "y": 142, - "w": 63, - "h": 70 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 63, - "h": 70 - }, - "frame": { - "x": 0, - "y": 142, - "w": 63, - "h": 70 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 63, - "h": 70 - }, - "frame": { - "x": 0, - "y": 142, - "w": 63, - "h": 70 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 63, - "h": 70 - }, - "frame": { - "x": 0, - "y": 142, - "w": 63, - "h": 70 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 63, - "h": 70 - }, - "frame": { - "x": 0, - "y": 142, - "w": 63, - "h": 70 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 63, - "h": 70 - }, - "frame": { - "x": 0, - "y": 142, - "w": 63, - "h": 70 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 62, - "h": 71 - }, - "frame": { - "x": 63, - "y": 142, - "w": 62, - "h": 71 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 62, - "h": 71 - }, - "frame": { - "x": 63, - "y": 142, - "w": 62, - "h": 71 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 62, - "h": 71 - }, - "frame": { - "x": 63, - "y": 142, - "w": 62, - "h": 71 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 58, - "h": 67 - }, - "frame": { - "x": 0, - "y": 212, - "w": 58, - "h": 67 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 58, - "h": 67 - }, - "frame": { - "x": 0, - "y": 212, - "w": 58, - "h": 67 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 58, - "h": 67 - }, - "frame": { - "x": 0, - "y": 212, - "w": 58, - "h": 67 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 58, - "h": 67 - }, - "frame": { - "x": 0, - "y": 212, - "w": 58, - "h": 67 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 58, - "h": 67 - }, - "frame": { - "x": 0, - "y": 212, - "w": 58, - "h": 67 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 58, - "h": 67 - }, - "frame": { - "x": 0, - "y": 212, - "w": 58, - "h": 67 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 58, - "h": 67 - }, - "frame": { - "x": 0, - "y": 212, - "w": 58, - "h": 67 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 58, - "h": 67 - }, - "frame": { - "x": 0, - "y": 212, - "w": 58, - "h": 67 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 58, - "h": 67 - }, - "frame": { - "x": 0, - "y": 212, - "w": 58, - "h": 67 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 58, - "h": 67 - }, - "frame": { - "x": 0, - "y": 212, - "w": 58, - "h": 67 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 58, - "h": 67 - }, - "frame": { - "x": 0, - "y": 212, - "w": 58, - "h": 67 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 58, - "h": 67 - }, - "frame": { - "x": 0, - "y": 212, - "w": 58, - "h": 67 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 58, - "h": 67 - }, - "frame": { - "x": 0, - "y": 212, - "w": 58, - "h": 67 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 58, - "h": 67 - }, - "frame": { - "x": 0, - "y": 212, - "w": 58, - "h": 67 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 58, - "h": 67 - }, - "frame": { - "x": 0, - "y": 212, - "w": 58, - "h": 67 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 58, - "h": 67 - }, - "frame": { - "x": 0, - "y": 212, - "w": 58, - "h": 67 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 58, - "h": 67 - }, - "frame": { - "x": 0, - "y": 212, - "w": 58, - "h": 67 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 58, - "h": 67 - }, - "frame": { - "x": 0, - "y": 212, - "w": 58, - "h": 67 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 58, - "h": 67 - }, - "frame": { - "x": 0, - "y": 212, - "w": 58, - "h": 67 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 58, - "h": 67 - }, - "frame": { - "x": 0, - "y": 212, - "w": 58, - "h": 67 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 62, - "h": 69 - }, - "frame": { - "x": 125, - "y": 142, - "w": 62, - "h": 69 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 62, - "h": 69 - }, - "frame": { - "x": 125, - "y": 142, - "w": 62, - "h": 69 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 62, - "h": 69 - }, - "frame": { - "x": 125, - "y": 142, - "w": 62, - "h": 69 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 62, - "h": 69 - }, - "frame": { - "x": 125, - "y": 142, - "w": 62, - "h": 69 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 62, - "h": 69 - }, - "frame": { - "x": 125, - "y": 142, - "w": 62, - "h": 69 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 62, - "h": 69 - }, - "frame": { - "x": 125, - "y": 142, - "w": 62, - "h": 69 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 62, - "h": 69 - }, - "frame": { - "x": 125, - "y": 142, - "w": 62, - "h": 69 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 62, - "h": 69 - }, - "frame": { - "x": 125, - "y": 142, - "w": 62, - "h": 69 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 62, - "h": 69 - }, - "frame": { - "x": 125, - "y": 142, - "w": 62, - "h": 69 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 62, - "h": 69 - }, - "frame": { - "x": 125, - "y": 142, - "w": 62, - "h": 69 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 62, - "h": 69 - }, - "frame": { - "x": 125, - "y": 142, - "w": 62, - "h": 69 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 62, - "h": 69 - }, - "frame": { - "x": 125, - "y": 142, - "w": 62, - "h": 69 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 62, - "h": 69 - }, - "frame": { - "x": 125, - "y": 142, - "w": 62, - "h": 69 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 62, - "h": 69 - }, - "frame": { - "x": 125, - "y": 142, - "w": 62, - "h": 69 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 62, - "h": 69 - }, - "frame": { - "x": 125, - "y": 142, - "w": 62, - "h": 69 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 62, - "h": 69 - }, - "frame": { - "x": 125, - "y": 142, - "w": 62, - "h": 69 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 62, - "h": 69 - }, - "frame": { - "x": 125, - "y": 142, - "w": 62, - "h": 69 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 62, - "h": 69 - }, - "frame": { - "x": 125, - "y": 142, - "w": 62, - "h": 69 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 62, - "h": 69 - }, - "frame": { - "x": 125, - "y": 142, - "w": 62, - "h": 69 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 62, - "h": 69 - }, - "frame": { - "x": 125, - "y": 142, - "w": 62, - "h": 69 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 60, - "h": 71 - }, - "frame": { - "x": 187, - "y": 142, - "w": 60, - "h": 71 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 60, - "h": 71 - }, - "frame": { - "x": 187, - "y": 142, - "w": 60, - "h": 71 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 60, - "h": 71 - }, - "frame": { - "x": 187, - "y": 142, - "w": 60, - "h": 71 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 60, - "h": 71 - }, - "frame": { - "x": 187, - "y": 142, - "w": 60, - "h": 71 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 60, - "h": 68 - }, - "frame": { - "x": 125, - "y": 211, - "w": 60, - "h": 68 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 60, - "h": 68 - }, - "frame": { - "x": 125, - "y": 211, - "w": 60, - "h": 68 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 60, - "h": 68 - }, - "frame": { - "x": 125, - "y": 211, - "w": 60, - "h": 68 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 60, - "h": 68 - }, - "frame": { - "x": 125, - "y": 211, - "w": 60, - "h": 68 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 60, - "h": 68 - }, - "frame": { - "x": 125, - "y": 211, - "w": 60, - "h": 68 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 60, - "h": 68 - }, - "frame": { - "x": 125, - "y": 211, - "w": 60, - "h": 68 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 60, - "h": 68 - }, - "frame": { - "x": 125, - "y": 211, - "w": 60, - "h": 68 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 60, - "h": 68 - }, - "frame": { - "x": 125, - "y": 211, - "w": 60, - "h": 68 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 60, - "h": 68 - }, - "frame": { - "x": 125, - "y": 211, - "w": 60, - "h": 68 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 60, - "h": 68 - }, - "frame": { - "x": 125, - "y": 211, - "w": 60, - "h": 68 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 60, - "h": 68 - }, - "frame": { - "x": 125, - "y": 211, - "w": 60, - "h": 68 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 60, - "h": 68 - }, - "frame": { - "x": 125, - "y": 211, - "w": 60, - "h": 68 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 60, - "h": 68 - }, - "frame": { - "x": 125, - "y": 211, - "w": 60, - "h": 68 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 60, - "h": 68 - }, - "frame": { - "x": 125, - "y": 211, - "w": 60, - "h": 68 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 60, - "h": 68 - }, - "frame": { - "x": 125, - "y": 211, - "w": 60, - "h": 68 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 60, - "h": 68 - }, - "frame": { - "x": 125, - "y": 211, - "w": 60, - "h": 68 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 60, - "h": 68 - }, - "frame": { - "x": 125, - "y": 211, - "w": 60, - "h": 68 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 55, - "h": 65 - }, - "frame": { - "x": 58, - "y": 213, - "w": 55, - "h": 65 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 55, - "h": 65 - }, - "frame": { - "x": 58, - "y": 213, - "w": 55, - "h": 65 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 55, - "h": 65 - }, - "frame": { - "x": 58, - "y": 213, - "w": 55, - "h": 65 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 55, - "h": 65 - }, - "frame": { - "x": 58, - "y": 213, - "w": 55, - "h": 65 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 55, - "h": 65 - }, - "frame": { - "x": 58, - "y": 213, - "w": 55, - "h": 65 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 55, - "h": 65 - }, - "frame": { - "x": 58, - "y": 213, - "w": 55, - "h": 65 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 55, - "h": 65 - }, - "frame": { - "x": 58, - "y": 213, - "w": 55, - "h": 65 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 55, - "h": 65 - }, - "frame": { - "x": 58, - "y": 213, - "w": 55, - "h": 65 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 55, - "h": 65 - }, - "frame": { - "x": 58, - "y": 213, - "w": 55, - "h": 65 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 71 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 55, - "h": 65 - }, - "frame": { - "x": 58, - "y": 213, - "w": 55, - "h": 65 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:0398d2a32d121507cf95d3e4033a4847:6e131e2820d0625f17f5819dbe95feea:aab166e28c744865a0296041224dd01b$" - } -} diff --git a/public/images/pokemon/exp/shiny/783.png b/public/images/pokemon/exp/shiny/783.png deleted file mode 100644 index 92ea294de9f37925adc76e796ea5bca3b44ae220..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4873 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 b6$Xr}{k@JEsM)!LPP*`P^>bP0l+XkKysSV` diff --git a/public/images/pokemon/female/207.png b/public/images/pokemon/female/207.png index 071b72f9f07dbcd4848c8eac352fe52eb03bb26b..48662a1a516f49d2b1a1896a88b5b09243a66351 100644 GIT binary patch literal 11889 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 literal 11249 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 diff --git a/public/images/pokemon/female/332.png b/public/images/pokemon/female/332.png index 5a199f994eb6e272913cb72641f7f044a2066730..2100e4b9a1012151e01cb60bcde70be29508d783 100644 GIT binary patch literal 6911 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 literal 6578 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 By}1AY diff --git a/public/images/pokemon/female/396.png b/public/images/pokemon/female/396.png index 0adaac1fe426d8bb30ba774083032a4201994a63..ee7debc27a924fcd08b1d7521d1bd9964bfdd334 100644 GIT binary patch literal 3338 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 c7pB?^m@dH?_b diff --git a/public/images/pokemon/female/397.png b/public/images/pokemon/female/397.png index ecf63a0374809929f53f2232d3d4ccf3fb99d800..109a12dad7cfac0c808ad0dc62b913b0c4921916 100644 GIT binary patch literal 3955 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 W1KLE7etP`$g`upVAzv$N5&l2)f}T16 literal 9399 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 b@L;Xw7M}jtW@r9q5@2p@V^n$BJ@)?rzg=Kp diff --git a/public/images/pokemon/female/417.png b/public/images/pokemon/female/417.png index be3a2736e186e552af71a2afd403a3e69dad5fc4..5b12e3574773bd6ae09d485488fce0b9ea88892b 100644 GIT binary patch literal 7310 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 literal 6478 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 diff --git a/public/images/pokemon/icons/7/746-school.png b/public/images/pokemon/icons/7/746-school.png index 837c67d9f63b024b2618b9ec11b30c44bf8201e1..d421210c2cf05d107b3d9404dd6e016ce36033f3 100644 GIT binary patch delta 346 zcmeyv^onVMWIZzj14AbBn)g78u{g-xiDBJ2nU_G0R)9~4E09)DP%yIcGP8>?bxpSP z%5n^9_R3llHRW0H*=Jj}toi@{f5pBBuBl5OFB07ZRLxfsa{u=fOg@)D>%%%*|6dD5x%AguB+U*UhJE+RU$n>Bsvqi?cK*NP{|-CG!(Z6f@3VeZ2=pO?r>mdKI;Vst02IxnNB{r; delta 364 zcmV-y0h9jf0{jAy8Gi-<003UyT-^Ww0YgbdK~z}7?Uu0(gD?<98HF`c(o#|~0&Paf z3K=6MYh;bA;p7v2=jUV;gnSN#Px`_jz)$~tXE#la8a2vA+qU7bV9>h!1?8AU zl@-#q6Q-3=n9u?fgrK-z)D3Z*1yF(XYS&*%bP^)i7iF24lD4m1mru&FFyNseTB5+EEBPHwl~A_O*UBd)z6c8^Xv!LhDj^W81D-nvpi wP*>?ld1$(=XXD1{uXR5B>fHZpUUiM#*DB_Wi{fm1fzDv?boFyt=akR{0CrV%P5=M^ delta 240 zcmVvAHg!hys+>C2Wu^3#_wU6&+Dk|fDLDWy!iZq9sr4nifZ)b*w< zUY2rUg52EFOKqVj=6J8xAy&=<5snn&nyM~>7?I5-y`YFRDQUpAI7is{=7MYOK~SEr zCU_sTWgH(LLgDS%#vn>ThnXd%bR~7vo8-R)=N`m}?|04qi1m~Al&{?1xOgvp2Lo9l0 zuXt~2QQ%>{5IuFFYW<;q<-aC1*gq&`n|5otK1;})`%Tw&u6(JsC*(%pnse>4a}y0b z70-Ms?iFA;)%eGszn>LCPweq-mM;Ur>LCy d{NM0b{F`>$ed5aTya^0r22WQ%mvv4FO#tKK>q!6r literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/1/143-gigantamax_3.png b/public/images/pokemon/icons/variant/1/143-gigantamax_3.png new file mode 100644 index 0000000000000000000000000000000000000000..5a4fe34da7c1428fa47f9c4244d47466db79df8f GIT binary patch literal 507 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a{K~(LR=LU z6`3~7V5kakc6Pev73Ngh`}f1Cy=!YXO>nXd%bR~7P80*yG{Rl_o+PKubA7o^xI2rM$zNj7nJ5??dnvSS}wBM zyV5;-e z$hDo9S@_#4S!L3X?+f0qE1dUz{gUFPH)CVFQ(_v6{5DrlV>gqXVf^EB=mmQXo9pjS lz2g+$e&_CiB&bbm@&ZwU-$22WQ%mvv4FO#oRN?{feE literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/1/143_2.png b/public/images/pokemon/icons/variant/1/143_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a757c202eb65d0aa4d5430870935c8bb1273445f GIT binary patch literal 738 zcmV<80v-K{P)X00001b5ch_0Itp) z=>Px%oJmAMR9J=Wm%VG-Kp2M~$H99b5C|k(pj#o-f*MZ^q)WPl7Ow^sdkNGS3Z=MUuB5J*qEWZ~( zA%y$($u@dE>y@3o{{g^JrwV|kX>8V_JX&Ans8bCDT%H$3UOSEx5kj~P!IGW=Cn4IWYm)`TGYwpCx^`=Q( z0IG0rF29gUrDz-;``VbLG5|(@sLfKD%!!GS(>*vfE*A#7UsCVB^cEP>_Kp})X z3JjoS)yF=!+g{@$dCO)kN;}!bw(W`W2Y0-Z3`#nvIyp&!4$3^It^nr;ugA9EO2jDu zMVbJLP6O^j4F)+AfsX?yiANzm? z;Q`E2FkF}%2or|*SyJ=dDkQck(j1B(2~@P2UfDD;Hc4YAiQ_ntSEpZn5K@Eg6s;ze zN(HV~s8lMw6cV7Y?gavllIo0vELu&BoKEA@M~u_`-Z`gFgbb@dK-ER)eYq;tNg0dd zCXf1#uX00001b5ch_0Itp) z=>Px%u1Q2eR9J=WmoaGDKoo|5mqLoc5bB{|2wX7@;GCJ0wo%VU$*%l6K+y?J(?X0fKEHm5 zNb3}aRIu$sup~FY+mpb(JO3! zV*!eAnZyF}`8?*=4=vAhb+un0Cw0~0ta@>2iOWC%Nd#vniovd~A{vV$8jHgi)Om3( z5I}+(jyGCX0Ehsnm~4vgTo_YX$utK|}ww|33{^;!jrqPQ-x z?}M5##to@p3)g8h9s6zXAD~{V_<|b?a1xP&qLXgA7H~L^GRF9w2TvTIpIb_z)muQd zTtc;6vb6cx7@{0E2_3p!T?M|px1^>{qlvktq$8w(Bsz`e*ifDT0pW-kWCvQB<2UDK zybXg=eerpAVmMd8o^GJ0H_fF(tuhin1SEyqgI|9!<|fA&)HE&h`{ySM1ZmhEDcpuE z%XquD3R#xT-RdMS8N?OPPNFjeDTUiGqyiF|5;o6fkjRu^NCj6&ueugcbP?#kxhT;| zibbc*BaY$KJ-}lop`(VbRKVZMXuVc}Ar)}4b_D>~Je#q^rRcg}IKX2r76+yBQE`I< z{mUo80l>-H719lBe{$Y0oM%8g36pVPb);Pix1lHs6ve-5q5`?{GsgH=`4s>lz4ya} mn*@v$*f)uv522}UQhxvg9xv+*ForPz0000X00001b5ch_0Itp) z=>Px$?MXyIR9J=WmN9GFKoo#K)m=+5@f;pB9gL@#OvzA_Y{iR)%pOv_bO>Y&WHO|5 zDP-^>(2y-dAU`32;6TC1C1BhkrblK64;iu))ZubMmzu(zYft(>Al;p~Pw(#C6BHB_ z6cl(NBIz>bdFAtxh@=T1c;6r(faQehO$gEe%H- z6Dzt46I4nCVMKb-UZvBo06Ys}-5arzG`YRJhK&hfbnhHNuO!iu_mez0IC)FRxvvuyFb!5wSM@wD&-HYvrGUXS-uM{R&5(OY9tS z5lN4?-cYTT84agww$}i-iSDS@%72YFa)6hhR~B!!*SLx9GPy=;Kpc1B``1j$VB~!9 zt|a-$jdtp6Z+~PooLXXeIn(D_O`HXlQbD6N$eydUGC$u<`0?cf=TGmgCCx_?^r7yG z_dz}W{fTZj1}Y>;@+@GFNs@$6cM->3!oAOnPZEPk7J$RvBc}G6EYFuUv#dVn;9RBd zu=j|WI4?KtJy_#>#Qr-Xk{Xuvx9yDYKVQKj`2)@h@=x}eX#M~I002ovPDHLkV1hLW B|JMKj literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/1/32_3.png b/public/images/pokemon/icons/variant/1/32_3.png new file mode 100644 index 0000000000000000000000000000000000000000..9bba8f3d9b93c46a8779cde4b2a89ea5dea487ac GIT binary patch literal 554 zcmV+_0@eMAP)X00001b5ch_0Itp) z=>Px$$V<)T5E4L8Kp8JB*=Lb_(Xxvb-%~^@;(5o$ta%$wbq^jQ%bs3gtBti{XgA1s5G49 zoCF`w#B6#ZCy4=k{qz|s4clf?tiDJowKni)w;>0wn$HRjDh=w3G4ony_gx%UJ~XC! zOu5-+8BQS)y!-xxaULML|Bh112zmW&TjToASFlTd15Et*^?HGi%>V!Z07*qoM6N<$f*QH{;s5{u literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/1/33_2.png b/public/images/pokemon/icons/variant/1/33_2.png new file mode 100644 index 0000000000000000000000000000000000000000..151c209107727ec044268b558d82c655d8c07060 GIT binary patch literal 576 zcmV-G0>AxX00001b5ch_0Itp) z=>Px$`bk7VR9J=Wm$6I3Kop065m%wb&hiEwq#!hOvIy0s;O1Y@A)Ty*kC|w+m&Mm2Qa6AWjN0PRZOSA~~TaL@!<-WXkcS(Q^8#eq?h)Awu zo~ir8lym zH;T1x3IO1CroKLLBgbe9@=;-$CTiUj8fA&^cIV*f1?}sZ8ml{>R>*@#h1;1TncG$M z*XA3JOZzBP5@=t~RGBaK(JJj>G<0#*nQNt5drc6Ltmk%cm`?iSys&t_*az^nPMM45 z_;&?a^7$d-i(tOk2a5+84P6|jld9B_jI;(h&7+~K!wi6PSit%CDtYZ{KpH+um}s+x+(N}Jph2?+`_W#&?(k_ z7hm2OXq2T-&MU_CMtRrQM+jjMk<^g`BJN@UFilfkvuz8OWvjZkt(u)^@7!2|ELqR( z006E!a{%xOc)xh!$N>>j%q$aQIbNs1*WaIjh$OSF{}yfH{)cS%Nj?FVe+QHO)?yq0 O0000X00001b5ch_0Itp) z=>Px%21!IgR9J=Wm%mTjKoo$#R0*n($PkDELMTrH1{fHa7-$C6sVig0jQj=ZKY&zb z#*B>l59k7EHyApQfmkv^D6y<&z*2@Vm;s(;n?&;2{1}>VIi2ooe}3=Yoefi_O!-d{ z5&u1&^C`_mBH|aSwM3F4;%9l8RDwwn5x=s#AL*OQW)e&qMR+Njl)UK$n%+rcwr%I) zLfSg*7CN4kS4*)9jf-fb+ev+2V?o=ta}PIX6US9jqt@tl`11X0YC+=^$0<~62>9VN z#^ugWPI3BI#_5HWDGo=m=ve>^Zr#Y7tdUbv6$!w6X&F3={N@goF@nnZ$tj0x8_>Us z6j4%)Cdapm!L3Var5yD8mw#E@-lEa%aJaS+v`)K4p;}|)_Q(ydjZ$sACPc*dXV;l2 zFGb|SsJPQ^0Z;2xdAK=yTS1kq?CwV*=(Jm?c$|^jW2U?mv?h|qMG{W)$n6Dk&E|11 zM+-+$>4ncj)5m4os28`lxcl=9fW5tMFQPYcdx31xv$&sI4PGiKnTiCW)vGcpqQXVb z;@{v7fM)ZUdi@}Aij4*5OUvXpcOr6OG3|%v6g`WJ%ilTOqTalU;dvi?=I7B5>h*)5 zA0E4(TQ#oSOoA%u&#ph+V0aBgqZ0n&$sz|C&f;-mDyQpo(&_S{h={Me*MEyKS^q<( aye5xR{s-Pdp5)U20000=;u3 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/1/34_2.png b/public/images/pokemon/icons/variant/1/34_2.png new file mode 100644 index 0000000000000000000000000000000000000000..2d0477f7ff9ffe167685230f4803ba75b8f70ec8 GIT binary patch literal 899 zcmV-}1AP36P)X00001b5ch_0Itp) z=>Px&JxN4CR9J=WmN94(Q5eU6Q9&Hkh6V(c^A)?4(9(uXmO$#FgF_=K;$XL18#76< zOC!apCTlhwL{xfNU2Gwwi{+F`sA9#lh*Qh8I60j|crWjzNiM0aQ~%Sw@7?i!@Bh8; zdk054Qe8rbKnM~1?{$y$^0H%FbPIV<8|n(M(?YH0gb=~Mery}vI+k4WwUh_5Rz53%X8O{kI0=?)Q+v?a~dur6{ zHJ|8szY)7)531*d>45mat{T5zoKwXmgb1W-V0MP}n%@?(CqN0KyO^H(z)ESucrQM% zOMGBg6;~pWK!Tb+IF$OpD%-q3)!t=Hb!v48@~rtXDKNs@`>771Ph1V_OWxqYTBPYU5o23L%2& zx#w-+XOmkvwnh5qBl4>;Qj=Nbl1zE77-3;LAio;Ju`Tr5C{x@8VW*3HD`eja&Dx z15ha!jC1JxctE9GPz5AiG&V`=X1%WqTnG_J2WG0jxiEN7&7C{*nbc&K%%!IQ>PSdn zzq)Ol#dcs)p(zg2{P<~RsxN31)O9N50_o)5znpHNbnVMQFkOVYlYmhufKe9Pk+~k4hX&dpdRU< Z^%p`_&3vgVMi&48002ovPDHLkV1h!}v+Mu> literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/1/34_3.png b/public/images/pokemon/icons/variant/1/34_3.png new file mode 100644 index 0000000000000000000000000000000000000000..8e844c3860598bc86002e4282c5e90de3bf25572 GIT binary patch literal 907 zcmV;619bd}P)X00001b5ch_0Itp) z=>Px&MM*?KR9J=WmcMJ0K^%vlYTjBZiIBE5wv-&ipa$s>mqKd>E%*nN3dJrC&bl}{ zIXH-*uC9thiMwJ2YYUk&bO=fbydl)Iqc|YGD z7dX?IY7#=&LJ0e`&pp@6kBwlAZXu8Bg}MT4cTlr6A%s0Xx9~q)N?ki>1Y^ATv*&P8 zg6Lx%Zp1%{KHm?Zr<)&{ra2(MCJ<4u0&EGO!|Ezn+iHGyJ>Cx=1ML>|w>C|4KnP*K z3PgBvVH95}jVCgLmCXaFF+eqy;OXEco?p2R!0vh+(=^+j)k+;5JaQ%85F!butC~vi z`9b}e_g@rbzv}o_?$A|J2>^=TkeX}e-mUxd0DP}Q>Mpt?)9(C^4%Rk^+eR>ke`-vD z`0MMsixN(PNyug)HiEI50bsWS?WssCYMc6}#?)FlpTiTKY5DBqom7K!az7&&bAUF3 z?5Rvk7D+k>$RyMCdch}?C z!(j)ggskOm+#c~yI&xNr6krc(;BIwv(A|8Y_Qn$K-P9d5Z)NieMCR)F+yX^!2wy1; z99@^XTjhMNrHgGHlwpyZO9i6Ss+uRRjxe}Ysg3I(5)M%F1#26l4zK5(9`XA!c#Y-kstWg`-#^$p9CqYoHI<;~4LQIhko;cBtTnWojyd=# z9KcsfQ?Rz#U5``AtWora)Tdx=JK!d+j<6D)WpwDkv5$1v?PMpl%t2XUw=+j$xhCq( z6;NQ`vN@LKZve2E+;HUKhoSQpV2es-t7)_D>jD=-*!FN(ZT^smTKnkV zXC*qz(&1kKl@b!z%H|s!Yd0!m1IEUz_vPH!c8-kl0yC%IddRJU+&!hqmx_`iM@SkA8Y^zZt_ h0im})sAoEE{R288y`qU~BeMVi002ovPDHLkV1l*KsCWPX literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/1/88_2.png b/public/images/pokemon/icons/variant/1/88_2.png new file mode 100644 index 0000000000000000000000000000000000000000..164f98f7d8029647f6606dd90d39154d12e4cfe8 GIT binary patch literal 603 zcmV-h0;K(kP)X00001b5ch_0Itp) z=>Px%6-h)vR9J=WmcMV)Kp2LfL`=yLiCAJo7l=|d6OAg>wHT2Q$^iTYNNlMPUAkuS z$^t{PA+aE~3ZyCvBQma3$(d4!OyfVG9y)~4$B^6+rxEgx3=DoJ+h<>%yzlqj9TX~5 zs8FFo|CNLgQV1b8HQ%jGO{AdC4z>W;J4ONoK~TywZ?2D(gb?!VV2j%BHrMADv9Z15 zpSd7Yf4Cf95CkO!_b=svOcn7mjQi$0heF8H2RDEB%9#LQSS@{>Rf+$V5JLWV|11_^ z&#f{rXE(swCzk+xxl^NQ)iJDAW*5t8UcNrR&=Bk3d?%!Ra!I4n(9f4$%+lS7BMyR~ zq&oAI36ytYm`D2n_)f@MplQ|VB4ipTGZn5_)Lwr9x$LA;&#hud z9=;R80uG=%lBuH3-2Orc+39q!BTs_@`u@eYuQ9NGc}D{uR&FPT%;g}=WQ69y^|<7-w82~_UV_a06b~`24Fa@U|21B?)_QX{&h5|Qg!h< zDS+X)!f;$+V9s>?eSCG7+U_<$Y&}$UnMAoF_MMQ&pI!p!^-)DRFlSsj6Yjr$%CC2y zbqzwgM#)`+>!j+^jyxTA7P!oStB~E1L^-O|wCcLM?Z~4$ny=AmcavPF8MQO0L&K`8 p3MvcOMgUi}x|QWU3l`dh{s77n2K@1c{2c%Q002ovPDHLkV1n1e8aV&} literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/1/88_3.png b/public/images/pokemon/icons/variant/1/88_3.png new file mode 100644 index 0000000000000000000000000000000000000000..6e90ad56d2adf2c745784bf86cda266daa59fa2e GIT binary patch literal 609 zcmV-n0-pVeP)X00001b5ch_0Itp) z=>Px%8%ab#R9J=WmOX3RP#A?Dmw<;*C|*nl!8N4NfHPR04E_Voq$!&nG`O1rUNdO$ zkhNfq8cf|SOFc#X0R~UOLjo-{V1WjcB^W{mgFzY6d$F8Q^x>g{&LZ7=_3?1t_ed9V z<;s;SSFZm`LWocZ5$@`FgRl4J-#>q-@xl2C zx~@~KX%Vp1ETGhDQ|h(3ySM~i`Z8^BVgmxK7faE(Pr=i%#j4$e;i2)rrdPc5`ogZjV@lk{V%#uY+@*JpjY zlQBTVNvV$G;5H2cZwi3cY5-6l*ogv@I{re4P}gu%GCjAb86@V}*w1(_%$n{a_QrC8GxT>12n^68-h>Q2UVCu5azd6bUE zRif|UTN+sw9mnDR+poyjZ5r$!9|6(y1FA3MC{u|8Z^~!qi-G`DDMyyYY8J46e8kh$ zjp{*27L-g5YOMxOS2wTb?Z>imalKfkhJ%bLmO-fxY^0-`@G{+Q)1W@Ef#kcJOuHHR vXONqQ?GLzwN&~hNz-?{+%ChbSbL~RUL?#PNsh9zJ00000NkvXXu0mjfRB0DC literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/1/89_2.png b/public/images/pokemon/icons/variant/1/89_2.png new file mode 100644 index 0000000000000000000000000000000000000000..533ebe86c9ef6b5b9dbd88eff1d6b2184ca48ec8 GIT binary patch literal 753 zcmVX00001b5ch_0Itp) z=>Px%t4TybR9J=Wmp^aQKp2M~M=W)RNNpN1o5|vy_tAUr@6HGJ`p>2P zi%@9f&nrc#sdYkO~SRypEw!G3x-7pFU>#=}Y9fMr)86 zvQz{hK*g*xZaV<6a4@fIc=?y95J1;;wMJ{eqgO`Y|DM&QXLVP4cVRuKs?iz%&_CV> zVBB^h@M)DBFwUu}8Ps@QxLklTahy}b2AJ4G-#8O{2tdcsXd)udCMlDngb`j+Y8Dm5bvlAz|cLb!-1{n~tH;F*FW( z>xuKyDAP70U*5C2RLr^$_WR8{wrXnte$S~Iw;jf9$DbefOp=zGL|xj6Jq$n|=^K3g zJ_X=&RgV}#s;tBy+ljLDq3|)bNE3U=Noj}UZyzaF^}txwNoj|Ri;H4<&~;s{>3ET< zOza^Cy>$+H>w(GwSP!51<8oDJdNpHuH4Dt|7#czdZ`sk8$;G?7yNU7hy`R1zPH!(G zaS8Zi^oyFg8Hg=%bZQs(54Qt}Up$#{Zke20CJ^kqxOOO4b;?ye0yna+7v|1nl9SSo z5BKu*a{%7I{Q%5OaB5#h;3U9SZO!k+k$p|g+??;1`o_Xu%xseIzIJ*Wg@SoSB}kmo zZq%uIPzd3j&2HGc`#K3rZqhQIv>Ati(?F*FSlBz>51bYfre}5ir0Q4#sfxt(jiq@r zxftf#gPJ^P3Bz&qe3mL~iNm00vl~D0$iC+2t`Z$X3sg;o%X_oSH7V&@8UCn{Ra@oS jS@^wJgX00001b5ch_0Itp) z=>Px%pGibPR9J=Wm%nSDIyEg0Tf{wg{}EKm&zRZxIyK!Mx*i`r(tTEG6IRtf$j`{N8<^ zPQau7bLAf5p^Pz4{B7HI>UA;$6rrv!FMYAHt^-I1nh79d%v*MP$X7G~z`=`W`1|uu z;J&i1Cx(2I1t0+AD;hSF1ptJ?0o%;V<=>@D0BzgOm319YKfLx`xB4Sk{n1{}KGm(Q8bq1E4V zD1vPo2Cmxez@Jc6qBcVhxB4UGD;iwWfz==3$Gb8PPmchALyOu>7T8P{e16zHQQDb7 zv9zw~_#hiMQ>@o(0Ko4r*8xM23Z%WoWNh(=(q62Rf<5r?FfMEx>uFD5n#m60?&3qk?G-Y848Q7i31 z#+WxgspI(KJTy*6DvC!nV;NWlQu(lOd~xnO+YyY_AMr)SF#(B+i$y7si-B!>5EqCl zp&S?A&!o&sEQ5|u>U?2mI!EJX3W66iBf_QqvP(57>a$WlRH(T0K>*_Nn{174DbnYRZvj)u!iCP9k&q9iy!t)x7$D3u`~F*C13&(AeP z!Bo#s&+N~|nAmtPE0&tPG4mmKP99L)l>8FfxP1nSkPkj7$sy zKspMDGuv6f;#oj82qXY8NI#55vy=fC9uwFZSb!=FjEoH!7eGt}>0n&|F=+~r4FXI+ zbC|#?gDfq8ET}F+0|SukA&&ZMS5>2Yfz0EcE{-7<{%Nn{174DbnYRZviv#!&D;rZk=*I4CIS*EEJ3kunWx3{&3x1S+ZdkzfF%xJrWj zg8#z+!=^Jj=YgV}1s;*b3=DjSL74G){)!Z!phSslL`iUdT1k0gQ7S_~VrE{6o}X)o zf~lUNp4p#^$JYbZY)g&sO!M^AV&DLBSQ(@kSs56CEH5CIhO)uFVPpo2GXcd78JQRa zfOHfPXSTC|#j}8H5J&)GkbW4AW+?+OJSMO+umDvU7#SNdE`XQ{(!sg_V$u{K8w8ku z<}iU(23cAFSx{Yu2B1J-IK)wZ?W$^&FOYfM)5S5w!vF20K)xdi94>*3w|~c1r1#7g z&AKI*@cg*ac}Wkg=iYx0M*nqK`0TqIcSKe#`?a9(^H26SDeRxu5U@U@V8L@8t@~3q zZF%mw@H$tli_}JgVun!9KJld{JI=9ftvj4KL1JO3O~>9!zD~_cmRft9)tlF?;+^ts z-VTmKmrj%!?`A#9r!eIgv&GU`J9(78Bo3K^H^!1$ccdrIlFvK48F=%fWs+=Pb zvp=3~(mg>f{^;Ncj`GT>vK6Uq-?mHdWjX(u`Q0-W_q;tTR)f6f>FVdQ&MBb@032hm A^#A|> literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/2/188_2.png b/public/images/pokemon/icons/variant/2/188_2.png new file mode 100644 index 0000000000000000000000000000000000000000..cbb7b690ff0fcf1d451a0f38540cdd16de011ccf GIT binary patch literal 585 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`6$5-iTon`)7@RU0s%J4oH2<2$`2VC$P*BkSo59Dj4PVYz2C8}(*(m{} zxJ!ckg8#z-gO@+!C!jEAfk$L90|Vb-5N14{zaj-FC{f}XQ4*Y=R#Ki=l*$m0n3-3i z=jR%tV5(=RXZGjf@%2D8+fpMu(>y)37&w3&Rt70XRt82O%L|C5p=_{^7@5K1Oh9o% zMkWRUARPt7ne8lK@hl)41QLK4q#s73S<1l7z%YTGfd#0-z{uEuaRJ0skPg-b5R;|= z*&x6KG=~YSGRV>b$b#xJG%x_k9^$CKc2zaX7s%Y=>Eak-;s18hX`vPc9+tz0Cw%xX zzem_(s;kKL$8y{F`y8xURj2zUa{aos&-IzZ(w9jzhy?rcf;Jx7>*4h%)@HtU_wvU0HO`@_C7a&3FqAe;UjLkL(Mp{|VgFo@gq6n3EvR3Y iWHRUWN$a?-z4Z*0w=_RovU_Nn{1`6$5-iTon`);u(S;$dpcFDEKvv;r~hNprD}2tH0DD*9J|#3RLyzD&KY> z#a$BQ7yKU%7`*%$KLLd~3p^r=85sBugD~Uq{1qucL5ULAh?3y^w370~qEv=}#LT=B zJwMkF1yemkJ+nU-kFN)+*_ImNnda%K#lQjNurf$7vNA9NSzbUa4P}FU#K;U5X99{F zGBPm;0O=?o&TMA^i)R7ZAdmpWApI~J%~A$nm`q@2U;(NyFfuk^TmUf@q=R(<#H1-e zHV7~Q&0zwo46?KUvY@&Q4GciChdAo5T~&?p1v0mIx;Tbd_`jWWTBt>Vhvo3$2_OE; z?-BNx>MC;mvD`NPJ_l=7)hqFz#N~f#PGqyQ=rnfGY%U2rED`0o)yc2$Xt9$(kZs?r z4~`L^Ogb!_S1fptsvVTw8yK0>Z&?v2lD1=~!Z#(K!s)JG9gjpRn3+ykz0=GpjOUt= zf3weqppA$2dU!pGwVChTy}U7gjdN&f$)-0h45dwz*FWc5v{L6#*gw}JVWly13+mS; inasI;(mJkdZ#_fhEzJ*?>|UM+`Nh-K&t;ucLK6V~9jJ@| literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/2/189_2.png b/public/images/pokemon/icons/variant/2/189_2.png new file mode 100644 index 0000000000000000000000000000000000000000..ca5e127816a0fdfe4fc6f9f75374a796446c674e GIT binary patch literal 619 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`)dPG&Ton`)gew;a_%{Rv1!<@kH#g6JIFtF$O|$?1KczP=aq#U=FIxgs zJ8h4+Cy?ST3Gxg6j|3QOUnsQ!B{&N_B8wRq_zr_G*AN9$JwrXSKNpX$2ddeY8sVAd>8ZuQ0pzeUNHMZ9FalX#Kr9VqgMG%x z3>IesiW@RAF$e(ZC?L*kX90_60ofps0K_2uFdEHL24L7sU}s$Nv;eZ8x(p2rK(dE8>aSf@jq(LD&w08yhFJLDy&TEcY{0`3 zpw3(-{;vLB-(-%NI~?{~XR&(CSDUSMyZ>jg#+i!Vna5qcbf0q1b!#~lJb6xH`5PJL z>OSV(t5+Hw+`Lo$M&#a15k`%_#XBYKC9W(D`yY3}PS^V6gqW7xQqhR%qE%OKh_MGV zta@fHS=w-R<;;mQx8|}+#_!~|$*}p*Iz{zM&+_)-hn`PvaPu!0QB=P7Y=?QA!&dQ` zTGIXBjU7*I-*$lC?vIu8sdoicHp+YQ{jEN-?ED^9%^&?~{xgk?kW&X&ddyrko QC>`WWPgg&ebxsLQ04}Y$jQ{`u literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/2/189_3.png b/public/images/pokemon/icons/variant/2/189_3.png new file mode 100644 index 0000000000000000000000000000000000000000..dfee57baf86bc529ea2cbb9337f34f35e3daa4da GIT binary patch literal 619 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`)dPG&Ton`){$GjuzuY}2DCk4Jl12OF84O96c(eZh{}gfXl||~Mhz+km z=9wG422#8wL4LvikpP433#B%o1ZROqWHAE+-(e7DJf6QI1t=&{;u=vBoS#-wo>-L1 z5RjOeSEA?V8lqsTXQ*fP=i>48KsDP^BRtbQJ+&A(fE-o^DMnTXMj*=zh^3)yu+JEo z!QxCnaYIHX1_2-)1;m-{EMW00AR7b{fEc77Mx$BE01TT6>gCZIV?V3k3Z7C;tMm!W|HNcIp%{k5yAQNBRtIZqeI5DWjimm~R_4R}}r z)S1h~-__sio6IqDhr@pBELN}iYO}R&_x~)`I8)I(^SFzb?o;l$ZY`&RC(lVNeNOB>FvoH=pk)?8M}_?_G~88#nUr>K7ES>9g!(DTU+ZvN#Wipuw%?J$pX*eX6# zOS=ENvE!-j+Ya#C{jqXB^{$}GMtM)Zztu;Uo!`T%`J+G0f5!6c56AYm%paL_53&mx QrGtFw>FVdQ&MBb@0O~@#NdN!< literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/2/204_2.png b/public/images/pokemon/icons/variant/2/204_2.png new file mode 100644 index 0000000000000000000000000000000000000000..e36cf0af684dda63d126fa79ac4cc0d70d515b05 GIT binary patch literal 589 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 diff --git a/public/images/pokemon/icons/variant/2/207_3.png b/public/images/pokemon/icons/variant/2/207_3.png index 7a0018836dd21b6463ea84a34f291c367df318fd..1a5c00992ceafd377c37cf307cb4207a3f56123c 100644 GIT binary patch delta 712 zcmV;(0yq7v1>gmcB!2;OQb$4nuFf3k0007-NklL7*E&4`6S=3uZw(Ipg%OOZea>DDgVWGThaLy7^HHdiUM z83HLT6@+t$?|M1X`f|A-LO+n<<^4iF`TpLY3tV!^CH+STVSoN>hjS4^m`{y$vy-F{ zqT~DBaHSg&`%9%hUMlqB2Ec%-+|cX{{$K!rMy-xmS~d;C@X4BZslZxv&NK|e=an2N zBq)S1L;0*F2jC9|2<5Yuct81Tf`(!E$mC3bP(Ir>r)e5gbV!Zy{n^{r7_9Vmw-4Lu z?MuU+{zWJi*?+%4N)E5C(@e&=bMMBv^=r{NOT^iB``kq+Z<0 z#!CgI`c$j;^-v%nH&HgAI(@2iA2Ku(|T7Z3mS&u+t1_}UR}2&Hj6uK7Iy$h zA8ZgW6-Xa!a5vu)btdT?tDtnu*m-sJHULvoQyW1j!~%DV*o zI3D2I$S(k%d^oFZCS#0@Ubn`l3o8KVdP}e`$BbRnE-B>(=cn81q!hsW`ws!Q_4=i< zoNGa+B!6_4lTrXjpO1O-VggV<1A7+KG|f708nrr+Xas<2scNk?Xirbl_ZElpSsJxE z{$PMctP)gdz@+oF$c7||8Z)^EhD(yb+bwY`2OhLoiiImWdqLwGCrisc2|4Nds*`f^R%z7g0PKxx ugeyAwMIUs5X9>!-dYPUlc=6BezveesXF$N~Q-B!3BTNLh0L01FZT01FZU(%pXi0000RbVXQnQ*UN;cVTj607GSL zb9r+hQ*?D?X>TA@Z*OeDr{R1600K8jL_t(oh3(hBYZO5g!13=PfrD`9!4)oSGbs|U zNMR99f`@;AP0ACCq>v!~sIN_#U~43VfR%V4K^ws~ECiPnSAQrZhQKrn+bAc5Kp@3h z$Qx#VoXKT(y%c%X?d)><+4tVg%vPc(;wnew8kjS#fqA14pi(N*T2~72q#`#^DHZh} z-sA4)uOyL5sR&4omjaZVNytry0sjRr9H^9vx(zorw)QhXYh4itU@%!@r2(^WHnQ7r z>9pMO0R;(=gnxSB0D$#{S)PCT2Egvb34-hSfyuP}KXCEB9O)&ov+0Ec+D_eMFDvZq z*;!4VD-F25FdIAH^8=pld2GzJ>9pL;k`H@;+`#j)ckA_glu~G|0r>sm5r8Ru@?i=G z3UdBz5`cHXcQ)qQ0I4$f{D4l&rRN8+K9%uOfm2&60Ds(Ge8ro!84h+r`u!W3*9#7y z?bOY0!P_rTZlIL-!|Ib1@XiAVfSZrEO;!cBJngW5d}`W4dbhNf1Yl}wB@_6p`@>w@ zcIq^1Rdc*~7y^H%At-5@v7t6naLdz9>^eaK%=oJSyuJT&q>1~|n*|#QWa0z`uygQ> z?T=r8(SKH#T)_FW$yoDCNu}o`?CeRDUgE6H1AvWg)~akCh9mb~ZlECTV_7k}4HqvQ z#7e%Tk1oAoC~V80#O)uS(yUck(nsb2#sbXR=}5UH{>zT~JeW+x7g-%j2M*iBdf|ZG uiIedIA)P@fYtdhKh4tW-{p>6|{s53K#ME6BxD7-A0000Nn{174DbnYRZviPFe~*~hT-it7atX|g$@c)6ASA1R2f8i0hJV%OtAq{TqQw% z!T(`^Vbd9%^FUF~0*}aI1_r*vAk26?e?&q9iy!t)x7$D3u`~F*C13&(AeP z!Bo#s&*=9a=50VV+fpMu(>y)37&w3&Rt70XRt82O3uK`*lnwR`BQsc>2`FyJ$iyH3 zq@#d1vz-Mjo&{usKmrhh^uuU0OBsOSF@c?d1*pQn$k>2!0mM|04%P(_lcoUKAixAP zhY74Q$kGDHg6c9fFaXKEy!y@J)UBKtI1teo#482R?9<3wLB3`2Yl+pioVEAObgIGXxNY=C-Y44xznA`MiaAc zG;f?6kl?mGQNUbcK39(`8|T%c{+rU*SKP_g`)nAuxQgTe~DWM4fj!vNV literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/3/299_3.png b/public/images/pokemon/icons/variant/3/299_3.png new file mode 100644 index 0000000000000000000000000000000000000000..68d8a89331631c10dce687fb567bf191a01b4594 GIT binary patch literal 566 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{174DbnYRZviP|L^mJ=bx|t|E_N48Mo+4dhm>*rX#M}aX=-}&7WO>6jw=* zU+{kzVAym<=R8o9v%n*=n1O-sFbFdq&tH)O6qG1&jVKAuPb(=;EJ|evNX*PD(erZ+ zQ83jr)HC|Mhj|-N&9>AC&ooa@Ed~xChm}E!k(GfF$npYWX($`)8%AcZI1^CZkdcW& z07ypxab`OUSUd~J27v@12I+^kOkFcXkY-6eR=hp#i?64RY2xaPZ!4!3;(y14)Pr~;Be-gVe|Rm-JYmv!%#IB9BX_u$uA$#kO`F%2?1 z8>)(BPX1>s=sovNRAaC5(siMWWNLXLnhyBXi4}d3o0t}$d(f~UM^5IM;&Z1vpN%GF z-Duu8Hz2`nd!m53#C)zES2oV8Mg2FWudle1t@qh5ZgCy6{#yU(uh+^o>nHW9{3;OP Q;{iF|)78&qol`;+017vyasU7T literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/3/313_2.png b/public/images/pokemon/icons/variant/3/313_2.png new file mode 100644 index 0000000000000000000000000000000000000000..501bb3f859b1af48468651af9280ea5371b20670 GIT binary patch literal 688 zcmV;h0#E&kP)X00009a7bBm000XU z000XU0RWnu7ytkQVo5|nR9J=Wm%nQhVHn3h7XpD=0vRlsf4VH*Nu~K5v!V5^FCL zY1?6nRwUBaaMH%!%aC&tET(43ISH)h8sA@|R^4$IL)tk#XiAbT21Zcg2k5Bt^uUS8# zSwD%g-AEZ>F06*3Q%DG*cJF1`uO0x}TQ3(rQF#DIkCp(~uO4_g*#6xC;3(Pc>pnqj zM*{Rix?0_7Qh08&@p)+|T(NV^W?BHJE%Mv|g%GOTmfpC(C|s|Cu5=d;!1}3enWl-9 zGLY?99t3?D`{hEVugrKwV!r(VK%r3Z)|sY>ZQEmyoydTGP~Gx$71tiW>4SB>=R#VR z1#tcz9E3c4wm@dx(F4-fUB;)u{DWXQ7`c=9;mU1E=}CgE`dn``)t7&pX%YGE7#q-4 zv2)DoP8Yj(lPOkpXfX00009a7bBm000XU z000XU0RWnu7ytkQhDk(0R9J=Wmp@1wQ5?rVca%~I;-8_8eYZ4g(YD~wI33iX9i+I4 zr4neT3W7t2ibEHvAUJgBVlYcXy13YKQ&bQN2A3k4?nMVRG_7KfI{7+W@72^8a~G=_ z{6ZkS_q+G|m&}r%TVS|RJjNK`Es% z+&`@j;`;#P=N3+d2k4w}VboGl8!A$Y0nCI$$5sk}mbEEt>60dDTB=tc;1SlZ>Vv>WBPnhFglr8N3_hdAoKPuWdVcGDb|cA0*0BaIm;r6KSmaS-3HfO>xS832p--s&dFjAtvJcU>3DvJ`OU*ohRu z;}Sxs;FV`jW+=O9y=NvI9lZc@WMl-O?g%yv7(iZs_y}iW(09JK&cNvF3Y*qKn+6Nk zE(9>BM>FBjvNomHfAx$5e*Lu;+N$0i|62`K)6tTRS!g4*=-*@pM*Y;92?q*KBAt8my+{(5Km)JK$xg>HpO=J>YM%QL*G40!WJh0000X00009a7bBm000XU z000XU0RWnu7ytkQSxH1eR9J=WmoaM-VHn4MCxH;iNy|}?8|1x3Y)O|3ZSnz%o5L-! zW0n+3!6A+%9a`!)2pwDsE@=g`i=#s|8i$lt;&AVDiyRpu1VK0lz01YKn%pHuO8;=f zy~(}LFaP&>o_nHrp2z>JTk{6^n{EK(>IN{bt{0%9D8XeIh8Mn{^qL8vFCm0yw@ri) zGjF1aX>1Y(l~O9+ZRkq?blo2O0<+sD#=T~o?SVK&B5e=`mMc+P z4Z3a*RZC&H61!~zV7W4O8cYl*gz$37G^JwS{7SXJ(e4Urt19K>@mQV!NW zwb)uX8TnbKmY`BC3>>$rrJ{rZVid{y$Hvgw_TdHFhZg{piuqu@>-M6CiI#)8WSXPh z6%KYzgQMPBIN`-Z*u1}r?wkYQ=$YWzx8J@3{k}ME+=&6dm)`Ea^(KIHTy4n_tHgW7E~Xw2p8N0zf1mmgf9Uo3B0 zpLr_Pf0KiwAe;N^15G-tx+Z|Z!C@wi`YIjloYJW!xP0OS`R3@E;HaZcHB)oYawX7r zE1a8t<%XY`c@>8xrBv#_&woOA))e-hii3aBRYU7ciew(TUjORmp&vpA3`+s_Et3EM N002ovPDHLkV1g5FGQ$7> literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/3/314_3.png b/public/images/pokemon/icons/variant/3/314_3.png new file mode 100644 index 0000000000000000000000000000000000000000..716ffccd3f28ba64643663ecd4d75f22f688b9e2 GIT binary patch literal 691 zcmV;k0!;mhP)X00009a7bBm000XU z000XU0RWnu7ytkQWl2OqR9J=WmoaD)Q5eVn5y3Q>V##93ksMdZ-B2XGf*e zMk)QnLGHcqzTbWC`+xT?Kt%YTb?#pS{7q+oqB;W<)#(M4WNjq|j{93_NF0k~NB!nwVF5c=xRf0BD;AfCeVhg+mW81|V8$ zLXtJ&-D<8a&L};UbJ;$aX|VCOY2aq-0svs_@l)J;{t7@3&v=3iPy6J45GIlRwcm4U}_PHkMI(JYfKcH0u1XBV%)0)0o?u1^{fV z9n@pJ6X6X55Rs=VmQX2GBkI}~g;brownbgrB6>YVL`10?QApJ(r0SHa5xZgum0}5% zyvFkk=s<>4o!+#cFu*}@2KM0NKKtzehg97&BzL1;T$;euYX;lSZEFQz_Zt8XYA*Tc zJ^R1gR9@OnfcKlkab>jBM5{P+WZr>m6=$%qR)BKxG63L;e%sUQj~mbp8n0Ag?rZ|+ z_rJxZ2`oSCH*v=-FB|K4QT*ij-7E~~KyF(rtVuT(@`vWfe|!hPd2rw{$#JIX+7>g8 z+r>QY6*kE*O{NPhTS-@Kjti{m3*g>vGw|p6Pm(o4Ff6>bFEx0a{5Z6pD4-uYyX00009a7bBm000XT z000XT0n*)m`~Uy|8+1ijbW?9;ba!ELWdK8EY;$>YAX9X8WNB|8RBvx=!KdMT0004M zNklb8BJx54Zv5jCzRs@0y+ysIE2}#BNfOU$wZhyeU5(ESi z66T8p5)5IR=o0KK3W1v{>Ml(oh~8~0NuTPSxP0>7yC1dUI3~|w6~F>m01Mzh0tzA2 zVzb%I$`w!u5$|^TYW&h^8bKNXO5Dwf3&8PpXbia!;C}0tjji?k0RcYVKLPRs6hg#K zugoMIVeeh4`RMVS!1rh#TxlVV0Q(Q80JOUUH6QpM!0LeVNRc=h?&bw&_lGp>s+!Y5 zW&$S5`dh}*=#>CV^*I%{rZOeV8~7e~uiF3|?Yz_o?6pPNUahldrxLC`7NW} z9q{$MwtQfzJ}2-!hS8XYU1b=JnS`SsK%Fvc0n>e$?8P*8>A)oNub70R%;hz94$2K< z8fW|_Nr%qvHGUU6y|OxThS3;68)y7ISgOy}Shutbdr>>RvXRU!^vQ1uSNzqPh;J!W VD%31o$$S6+002ovPDHLkV1iD_%|-wK literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/3/325_3.png b/public/images/pokemon/icons/variant/3/325_3.png new file mode 100644 index 0000000000000000000000000000000000000000..dfd13bd75be152c497d2512120a02ef5c2990ae7 GIT binary patch literal 478 zcmV<40U`d0P)X00009a7bBm000XT z000XT0n*)m`~Uy|8+1ijbW?9;ba!ELWdK8EY;$>YAX9X8WNB|8RBvx=!KdMT0004L zNklTw}IrVk8U2QTy)4HN3k2BTrZK*m3SCS^7P7W**Yi$(0zfqCR#F_7`t<+XMWstscs zXZJP)X00009a7bBm000XT z000XT0n*)m`~Uy|8+1ijbW?9;ba!ELWdK8EY;$>YAX9X8WNB|8RBvx=!KdMT00063 zNklCkX|4g+e5xOQ8<76uK!UatK`vp=s;T@wxatFIU0Ky%;;(f4j$V{NDfj{_lO4(OPqp zl}Q0pz!WeAOaYStDy1|)5CoYU2dI?N`K1~F{r$#2g|u=o3>kJ)+!fhuz#333Zc!}c z`10+Hqxx3>?mT`m^ls<%dSXZ`z{+NcmhZ4!X#?=_Fd&nC1i-7#I{;R8PbTl6!2L-A z`Q-fu?x((WeD0$9DgkC$!owtS10@1Pd9ekb=}&7|8V(XjxdM@oLFhL>#)xi|!I zu*USllu58`sMkFmx%7Vp48w^8QXJc^?g8+;y-Le>m|mDdUv8L0500+@%%(<3b}T>% zgp^G_UV8XO%Ml}L`3`__PyidfO=>ePUbZ=sld(%2?ICe?xzaXgp|}^8z|G9f((9fY z$hagg4@_yp?yc;euv4C&4B%Wf&w0na1}TztaZ$>ul+t7C!8nir=N*^+ ze&gCbEJ;o}G*}O;(f(9Q=`iHr_{wS|8~a2Z9U^|+Fq0p*MooSCPx8O?6B|o?)Uvdf QH2?qr07*qoM6N<$f(F_bSpWb4 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/3/326_3.png b/public/images/pokemon/icons/variant/3/326_3.png new file mode 100644 index 0000000000000000000000000000000000000000..6c4025d0842f9d21d2cb9c49fae117a3cad78125 GIT binary patch literal 644 zcmV-~0(X00009a7bBm000XT z000XT0n*)m`~Uy|8+1ijbW?9;ba!ELWdK8EY;$>YAX9X8WNB|8RBvx=!KdMT0006H zNkl1uAp$;Ewl_j0&A=l#C-obSf8 z)|_R~0=vbO-hr&kY;t-bN!WoSq%z&p-k^4SuTs~G@3l)v$I;UWOtpDzGV8=Gyu zg97(A3FP&;uf$f~S@&mXz^j+~0Z1hi=Ka*`r({x3sP*hN1TGYyQcAat4w~oI>0hLh z305{<;JPk7w+ig-9I$h4skwmOWD4N)!3MdwgR^{|e6~bkzQe394s4lp+ax*=p#Ml& z9O@(&caFK}RdHa8_O7%^uxzMW-mJUyrviH6L;@*}Ex#`U@Tl)O`D}^yt~9s%f0{&Z zuT=odrs_#{AV3L(lubVVas0lPBSw_ZmH>={0(h^|!khGOa&f0FCj*z*-$UZ;zl;ylsNiqWZ#t5>t1bambTHs<^WzkyvxjR^#r6y-iwP; zR;83~SPuq)1eh7F(mSz!;vSYHhaDQM2UdT7Dy6g+a(k^}HIg-aqV^9Fe{PuOk6ZPo eKKdv5UpfL^CU?}y)S%M<0000Nn{1`)dPG&Ton`)sutewl+|(RKAb6_v)$b6S$+NWjEw94{{R2~@9F6|ckUig z?WvhU8-NsVNswPKP#g{zY+op~0VOyKJR*x382Ao@Fyrz36)8YLi4xa{lHmNblJdl& zREB`W%)AmkKi3ciQ$0gHvp*M)uLr8xmKx!i=IN=$zyaj2GDtD9GB5&JUO+4jWrKaj z$P5-|0*V_lGBF4M=_nx1Y-a(BX93wDkO0IW{V*EMQU+kyOkihV0je-CGB#jb05KJ$ zgLMJKq$xl)2rvQ7VFIfRva|rQpt=kV3_!AnIO?xmRgLlmGWU48IEGmGzrA!*sL6nb z^}>XEDl7i{|6Zkh=EhN_e!Cf$&TWyIrFWvt@ZSfMI_|C~mya7bZQUTVxBQFpqD@nR z+$$S*o)%JP&u(dR0A_zV7* z9=N@5`JBVy9Y&d_UY)W(G{=1QNn{1`wE}!XTon`)UM)Q~B`@%1<)%y*wNq=FmKW`voU%06WJ*nF@Bjb*dwP1# zox2BA9+cWB0;Kp#g8YJk;t0Utdf?6ppbTe$M`STj!C??)Jf6QI1t=&{;u=vBoS#-w zo>-L15RjOeSEA?V8lqsTXQ*fP=i>48KsDP^BRtbQJ+&A(fE-o^DMnTXMj*=zh^3)y zugCZIV?V3k3Z7C;tMm!W|HNcIp%{k5yAQNBRtK2I0N5DWjemu?C* z8St=P5ZJWv+yDCO(y7Pv#45iuipVV4()nqZRh5iALc``dD}Cp1FcyBQsq#(NX2AmABhitL_ib!s?<&;t zvA&nv_7z literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/3/332_2.png b/public/images/pokemon/icons/variant/3/332_2.png new file mode 100644 index 0000000000000000000000000000000000000000..ff9077cec0a01dd9dc27631e54e3b601ca5bd1bf GIT binary patch literal 613 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`6$5-iTon`)nx*778S5YQ_O2F??@_dK={{Vw@czT(!h}MrN=$6Hwfc zk%>V7NJjy2W;+X5JPXJMfdn81>4(v1mNEdtWCA+_3s8lDk+A{e0*I*~9jpr=CQSjd zL4XNp4ii{qkfjBX1=VF}U;vUm#8H3ks%n%kka@w=#WBRff9b?VzGej;7w&BJU;pLz zSikAHkfw86a;=Phx^_{`N|7^Xu4s48j@)`BiaA?w7;+X&>F?K$aB*7nMxk#3Qit(nd22$d+M4~Q~30bt!dkCa-AERGhb9IWb{wjYAks;@7xZM OKRsRjT-G@yGywoKuf2!> literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/3/332_3.png b/public/images/pokemon/icons/variant/3/332_3.png new file mode 100644 index 0000000000000000000000000000000000000000..c1c6cee79470ae9e32115868f0ec2256bfa9a6ff GIT binary patch literal 614 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`6$5-iTon`)HuM&qKREI6^<{k-CIx&q9iy!t)x7$D3u`~F*C13 z&(AeP!Bo#s&+N~|nAmtPE0&tPG4mmKP99L)l;-F*1Y2nSkPk zj7$syKspMDGuv6f;#oj82qXY8NI#55vy=fCCKK2hSb!=FjEoH!7eGt}>0n&|F=+~r z4FXI+bC|#?gDfq8ET}F+0|SukA&&ZMS5>2Yfy|4ZE{-7<{!1q{@--W9xGdD({OiB` zp53Qut8F%g7H)p}Ak4u9LjD!7!%{O;V%lJR_#|qA$)*3+!*Irb=6-s(yGU@wP zkpw=rBEOnqfv|VM4>^}IxJ*`gZ|pi@&cg})oj#~V%iW#OUVL0*@v+k9Wp`Iv9(t|WkhY{^=C(b%SZs|pJU)Dn#b}Euzh%-87uaq9&* OOg&xwT-G@yGywpXvA{_H literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/3/345_2.png b/public/images/pokemon/icons/variant/3/345_2.png new file mode 100644 index 0000000000000000000000000000000000000000..015696265f97eb3b4d28b897821764a4981365b9 GIT binary patch literal 610 zcmV-o0-gPdP)X0006hNklY5QZn>4@hC7f+QLcMEpdHh)qB&ECjK!vk*kE(MBtcR@ztz60oqd5y8SD2x-I= zieDgt;71TNjflU%n0GF3Sc9N@8?d>7yWO3en|^6UPCY!NtJ;a z;|J3Es{l8(aU}P*&k7T3Ytr#>b5BR!MrOx#YQ}BP52><@`OD}_L2i1NITc*6LpeB@pnRBjpH#35Mwe7D ze#=tDe~Wf-2}(y>IY0KMMR3y(ryn@H=c~kk+zH+2rYPM{<)a^9i1j`UTiTg*i7V5i z%;OBmL;xLLYS3kR_0<`Sd98bpFLI=UfSVhNm)u!NuZk+`s-P1f z;8@zcyh|+HQ3j-cCn5zGNaqp*@~LM=!FY<7dk1wLz1VUtwG$xW07j^ighHPyq%$Ca wP*Oqyj;9#U|Fy&fu^I||0j^pDHI$~V#sB~S07*qoM6N<$g1uxCS^xk5 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/3/345_3.png b/public/images/pokemon/icons/variant/3/345_3.png new file mode 100644 index 0000000000000000000000000000000000000000..41ba6766c21f7771686b38f814ead06708433b63 GIT binary patch literal 646 zcmV;10(t$3P)X0006_Nkl zlZ3P}1o1F7dTF$=QQ@u##Jqp*{>R=G>h2!cyoGzaGjDeGyMK1~iNq~dAXXq&AXcDm z3IsuLjbGgohKU+nlbIleLZJcnr@eQY?rr}^p^y1tb8OQ$*#tAzgn=&vx_gcS$mR18RT%dl30Cc+}gd_VN6oHDGyWRl1uElnDy~F7x4)P$|M;Hek{4 z4l#&zfkO@_1$h{d01bN&B~CRzQ5y;Z?nUC6+I;Zv(7sD=1!(TS_hX}yp52JnfKs&0 zF#=%Et#1nUtL;9tE-@CwLV)=(RaOiDwT(W+AeM)zHtsgtN2m1E?LW0--9ga%KWaRD|0l^@?l-#+WaUve3^=(e4ox<=@5U0K9}BWvbi8YM~WTl z%C(%U%I165u~Ui7#i$_Qp0-!MEEgS;3&MRGHeUt300GC+ZY_zV60OR<|En049DCIV z(!0cf%zr80gFMAUlOqb+JG|kopcf$F07fV!3m^3PLV5!d2&E<@;CPDh{$5K=Kpqy_ gK2XdN_w`WVKaAN2dXL#Ii~s-t07*qoM6N<$f-!V0V*mgE literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/3/346_2.png b/public/images/pokemon/icons/variant/3/346_2.png new file mode 100644 index 0000000000000000000000000000000000000000..71e233c31ccd52c3cb7727552c890b008005018a GIT binary patch literal 869 zcmV-r1DgDaP)X0009lNkl_&ZgyIlzbZ`_hNJ~LT2gSO#h>C+$ z9h6pDOo)Sxr6`$H$d+vJzL)!szwPDn-_;C49^C!+zyH1WfA_uj{yUMr^cnb18E_n@ zg{#-__r}=(z(%f2wp|yBtd?5I;}6h z`sS4+QwQbg%UKyedU6XH1V;OfN~PmVY;g>j>SDv>a`zgn}0qp1ch<& z+nV5_(2w&dqgCx-Q`8(-qW~ae{KRDiOBPLFT$e^odY)ozHZpcmz@Dbn1x9)I`K!oa zN`XRm=%H6@v)C6oMhJR-QPbahs)Ik}cOIKlf1QbN6Qy9P1NG z*sH`~(i&iU2M?&r7K9-2oS9!&kcC_KbUb_NIMm7}YjAa;7&+CEx)>XlCr2^t5P;2i z;IOD^u71?ii`V%m1IGzIl6D026jlr(y(X~1yXVxs@#w9NU=IM9?)GB4F|;&1##b^) z$u3tSvDo#P!3Ndx1MhuYLR@eFhO2gSpX!x87bFGs$fHNQ*R4H(iz8hDnn4MU3~~+3 z`Qn0spa#)Uc)`~nuF9XnG0EpPd^6jJP=E~1R5B>pOFj9m&GD(!REC(o!nFxCMIGX6 za$(G^MOWU>G$N%JKA|-TfM)H%foUZ;=pftc3%>lJ&;vfk5rep)48maP*-s3<02nT& zwYq%UUkiG`!M+;_We|bE#B}1Yj9x#W`v4eHIyKM~fUDL^vVML|rkdaV^pSaVH-zV9 zrnuzW=z_(~3Lws}FkyOWv%M^+#|V%V?Ql*yj9mf34~*b@O6H)OZYAXOZ~~9|slyyX zrgaiMrV23gRb6WkmUvSHLmI&rE^Yul!6EGs^B7_cvt|>+`_;zwX2qZx3~X}F z6q!1ld1xYl9LhcR>kmHs;xNthXS|>>GQgl9rjB3%6z3lsgbdoG)r|Mg0Wvs&VveQ( vK>U_P{dw&fKmx^Rg0)Gj>DzzaEdzf6iIAD>^be{;00000NkvXXu0mjfy(yO6 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/3/346_3.png b/public/images/pokemon/icons/variant/3/346_3.png new file mode 100644 index 0000000000000000000000000000000000000000..14514bb61836d4ab9092df25577081006dbee2a8 GIT binary patch literal 853 zcmV-b1FHOqP)X0009VNkl?E--f%oV~tn4O)OH*bFP-kaGqrXdXv z{HGp>L?Rxg-uUZlSpcxjy*;_9$q6r;&91A(j?0{?0E>C-cVv%=7*iB7s9)%3 zm@V<0cH_&>(`Kcm)tr4iV4mzhA99Akr2ln#zT_rC6N@yOiu9H25*!OACU2OHi$APx zY;4d7iu%OcyM`jsJhiK-opOgo$vM0x0T4-bU$wCEVh~K@e|{~Rx`&v>nvZrFyhm68 zlYIIxZ<;o>SWx;NoEpn}m-fu~fa&ZTE1IW_mlG!sVn89pL%?OGu3Njyb8{wkF=aY$ zp0@4u=#+(1e$uJU)Z$5JK)bsC02FT_g5-V2;b99obNP|2cem#b6W&w~{!C6(9cpJl zd2r#~9e9e0AQ{Ay8?qm5=t&KP9In=jPJqCLz;4~M3!1@mwgwDuD%^AmBVU zHn`a9DtLkrD$InEHevJpkP|xE!SL~pJ~~!!HAR9tuFz#ej1i3LVlHJ=;njFyTBx78 zZQq4_)8+eI5fE!Y@;#kR&zinxxf45nENVKsI_zS6>S!bJ{_@uesev8ly4;CQ|AXw5 zk39f@N>~7ScqaFy06x?2cj!9uU&&#h0c(y%Z81Jz-2`u{Xc4ukb^VZ^!TeKBQcGX+ z%hgUHE@z-{jK%5Waz6NdCI3UAQ|}Vipv^T0lyQO5=Fk90uId{ty-Ic60D}t$VO>sc faBk!MUp?>_y|T`bXD$Ec00000NkvXXu0mjfKvX00001b5ch_0Itp) z=>Px${YgYYR9J=Wl`(A7Ko~|}0#dAu1R(^ibVF)Ylqf^Gg5;qhDicE|cO)xo_bwmU1?ALwhK_3oxAw>D zRvrIt8ZiK^RRci#+3unv`hB(9j!c7bx6Q}( z%|u_NT0(2p5^Hf}8UW0P!==98p`4&*HUTJaZ^P%SrGC%Qqcy3SP3FTP&u*#9Tu`Pb z@vR;sb3eLo9KQz^NxF7GrCLhJ`JD^?`V=>;esrywO?<1z*6zVV_SODUy{eqD;Mw6G z<=}*Ja1sfRyX}N{9M=w%|617*49;e>CSN7Pe3n_s55b`XhWfznqAA;Q!825WC$M{T~LVB`Ap>Tb`lw?af2%!GxWoDZsxMj1!klE0&WLKL8!O*yc*p R7EAyD002ovPDHLkV1oUx4T=B& literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/4/396_3.png b/public/images/pokemon/icons/variant/4/396_3.png new file mode 100644 index 0000000000000000000000000000000000000000..6725912b1993979a847d6650d0de4a6dbdeb6d0a GIT binary patch literal 605 zcmV-j0;2tiP)X00001b5ch_0Itp) z=>Px%7fD1xR9J=WmN94(Q5=WAh~+paNwZ~8d_yh>njw-w7s1gbG&eXHaj3XB3uZFJ zsTKz(7Z)kw&>?|zFCv9H1XDQB5`$i8hi=Cmg(6othxpE%DagG$#NoavdHS~wCc)-rPJCRzxSU@k;BfVH%?E-LoxHnh(8_Egx%^CoU7cQS!_cbHz$-Y_R_;8OK zcQ<116I)QGCu#OZSRbB-->WyD0n;Qs$0c7ZMC4A6hOzok>4>d%C;Z$uYczW!%9X~P ztVC4~6pwg!YmMjk9|Q1Y{RLLL!(=?5Txozgn49l8E(<@t#+Cz!^#j@553g4u;~$q> zSnUqGTWeujp5un~e6gUE9w;Q}YX+}I0k^d80K6IYrUi3Avp0&&z1F?Q-srO4bQ=_w0JN%;MikQ`Y109@T%XWKhXB$r4~GW*){HG@aB9A7?v rW7|6g;{Q4Llf;6v%*rMe%Sel#SW?vIqo2K!00000NkvXXu0mjfH7yIi literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/4/397_2.png b/public/images/pokemon/icons/variant/4/397_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f6982eeece48ea77964b1df5f38711b08200adb8 GIT binary patch literal 613 zcmV-r0-F7aP)X00001b5ch_0Itp) z=>Px%A4x<(R9J=WmoaGDKoo}mgo1@KI+H`-L6qRdlp-%p3B*%EHxHR?x_Qmm?%hnb ztR|a18(L}_GB^;DB@v+nfoVMmLOs>cp)uCd>k!`cRNF*4U1bs|!!8zQLS~(e)*h{&2M>-S<<@NvZo3(A?0mEg z0O;lJ9oIQPXai=Q4CvrUIx|ZQsVgnOAP5%5jT>a047_r60&>_7C%}@#U1~rUCuXl) zMK8C4VLz0gGe7t$`?;;I_SrD?VZrazF>ZaFdf#nz0i^o{NPXhv^mF`l9RRSnGs4ef z8#|xA82vX%Eg}-)`jt@2f6X)@hI*86e@njr3iI#+`-y%h00000NkvXXu0mjf)=m_q literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/4/397_3.png b/public/images/pokemon/icons/variant/4/397_3.png new file mode 100644 index 0000000000000000000000000000000000000000..83c2755599a2180f69c7742dfc7bbc626fbb08b4 GIT binary patch literal 637 zcmV-@0)qXCP)X00001b5ch_0Itp) z=>Px%H%UZ6R9J=Wm%mFJVHn51DV7idIkHG-(L9x85e|uDa7fk3MI3Y!#6Lhf2s)$) z2@!<2bt;rnTngPPM6x(Iqy-)PF=R^)`l5@tgbRp>!*yt%^UfsX?!6akA>ZZRd-L9V zpM2lvectDQfd(4r|5ixVL_}n9TL__S-WMt+VYo;li-&O91shb#{weSWG?K`o-7@j= zzNy4XB@RASEUqb=OBo=$r&>y5u-!7@ysA*37;$b6me=^>XZwwlc94iHytu zTyF7`r}y}Fkch0KFYmCHTgLv+ZvcQ)z6hgH!R3#`o^aKjDHq(`^{J;kDdk}K{T`BI zud%zj>FS@~IZSaoL#qi^SWLdN2n)EO z>pH)60)2Yh zEwcm6Puv9tWN~7y*9w>{t)Sg9?d3c#etjI5FG|;jfr|yBQNiN(i>|-d^F;u`J^=z( zyqtd0_qPCmHzULNb#;SgIQl#)Y9T~O2oY+AqnMq^;PB=avoo3g5B>|Wn<_t=p1pnp XbFJssUjNqr00000NkvXXu0mjfRtP0= literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/4/398_2.png b/public/images/pokemon/icons/variant/4/398_2.png new file mode 100644 index 0000000000000000000000000000000000000000..bbe04248c7b742d5d34e07f9ad89736296458deb GIT binary patch literal 765 zcmVX00001b5ch_0Itp) z=>Px%w@E}nR9J=Wm(NQSVH}4aB~bLHQn9ds;AszD+FRjO>9A0ul}3nrm~5g6cO_zX>5#U2nhxXp_RhHI%s4`UA6VX*cjkTP zdB4Bjci~j0`p+eVu!RuzNzH#I>_7?CJ~`yv=ddlyYKe$TDHNa(!j@nst-vc5LfBI; zt^)A!+cxivF7>RQ+azi$wnhc#eJ`rG3;OL=o>zU9&2s>B zWHO`|o*#gal8~~MRy?Y92FhX?OJ|>bXXVN+0I}Pn08Qa!;-q%Us$W9h^#K=j@oj_SEC%jbHP<_&J64+a~z3MD%xyn$a zfD*E^umw0}Mu(I#VsYhOy-%OR@Am=&>ai$YS~VL7Ae$+jF9beJgx-rKkW2>Y+U{hV zD=ChvP)8%(ie6VrxaFEn&tO9Jhq2zV00EYU`&|%TrFP25cny0_40T}rx^N3~^$R1j zj^4hYj79oWF>T#UwYn_1O_OLFE1W=c>sJ^?5%$6fN v`iIV9T^Gk*1CYGd7b#q%I_dw%|E&H11GZ)U_Qx(Q00000NkvXXu0mjf82E2P literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/4/398_3.png b/public/images/pokemon/icons/variant/4/398_3.png new file mode 100644 index 0000000000000000000000000000000000000000..a1d47a95b1a2dfd1ee0d432aadecd657d9359953 GIT binary patch literal 792 zcmV+z1LypSP)X00001b5ch_0Itp) z=>Px%(n&-?R9J=WmrqC(Q5?rVM%yBRe-3Mwn2%ubv_gwwNb5~INRYIb*oDC8vIJcP zp<#odOIL3S3vNY-H-nTsv?U!x!8tC(tP3S>Fz!NZtB2{Z&TD4fbY>l?z%ML2`{uow z&-?y{{`p1+no!N1{ng)KXqwjK4c2cp1So_sOt90I>lq6n zjMbSw0KTm1JY2ja@0GXL@Y=<5UcuG&^C~Z00a|r!sGX8tlpiZx=y~$Uv2G^dI0von z4J66{XMABp!aXhoBv@X}@iG>*0W^2^v+obu zo>S6`I9&xCJ1A#5sTeCWj}9OMsFMn9u?Y!wcj8Ii@g==TAR3`CpRu{<8K70)R?=Kv z-edaXD|P~XbVTm3m3hn9)Mua?P60+OSS@hNLBFHI?0T8m_XkNW?*Wjwd5@nAvz1xm zYGl;b*BaWwd`3bBqLD+nc$8dKvH8Nq;uYRRzXM3H(C|}R|B_ymg|n{A$#xU6@_y6N z!tU5XP1Blul`OtWmdx}m29*?pN=n{ee0JlHW5dZfh53vG2Isqus}P$Hj3nO4Hq$xN z$=ZdxR=!HswhSF7*F~afT9Xjf0;sNmRY>*2@9MQWRje(idzv*w~%wI#iHClo5{rV~OKpQf%G zUA-elSMP{%`*q5*1M7)rXF6)#U1Dk7Gv_=31lacn8EgH@($0^+6V~H&+W(LLS^Wax W3|?;WpX2rb0000X00001b5ch_0Itp) z=>Px%G)Y83R9HvtmQN_dVHn4sIV>j!qa~^3Pbf7Ult>hpm6Ma3t&Ej&aS$Sf99*1e z4!cpxNjYexl#~NkQd&t`?BGN@pzmAHug7b6-woSg&t>oLxA%SC&+q&Ed0!V5xVZ|P zkBWe~MyRM@QNdgl(AWEXzBjx}BoapHWi%;QNQQ!+hG>i`YQ1#YA25Qn0+e5mv8f7} z+ZjJl-}!ix{2M@QGU;}c*Hc0>_b;^9S4~4lcSb4zOhR%*OjI;h5F4yil`7xK)GPIL zRjM%{O>>GNSw*b-3DO9V;bMy$6kLcXKq%SRDS>K&gve1K#%p)$ZFG?M@@7H(H?rul0HC_|g6vH=bF>ER_>-I@EOEZ}O| zI;cOg`MZFeECmNI?cf<$h&SJ@h#Vh&6zN*{GK@ zAVPUK&`al`ZnZg-lLkmsc{ZVCKUNC*%b(S{d4IhFv|ZQi05T-n2y&3&@ZP2{JXR0K9vdn+FM#r9gE3zopx$~q?VQVb z0pyCtFP{>8-_vg=wl`>*(^*xq?m%xpHh08KzWxMISJY%<(>Yd++SKW9&MSDpcM)@2 WF1DMhxBvhE07*qoM6N<$f&c)_!XA_W literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/4/403_3.png b/public/images/pokemon/icons/variant/4/403_3.png new file mode 100644 index 0000000000000000000000000000000000000000..0064c7d7d3f01ffa8f6e05b53df4411cb55295f1 GIT binary patch literal 633 zcmV-<0*3vGP)X00001b5ch_0Itp) z=>Px%Gf6~2R9HvtmODs7Q5eUMxr<`ZR2T$BO}!xKMMKaKHMg{c5z&+s5(Gg@LrWA< zLw#>Am;G71{Xt;Y~3&5Gh~#s9>2`8t`Mqm~YS%RTqr^Z1?r_c+HUD%@-p&L^sX z#d@f!U{%3l6;Q`}Jf3%ai^t5Ig&$R%qwj zoH3w3=9B8ZzTAC*BsHNjz&SLL0B~k1B;j-v$2cQE?%G_L4QRm6W+%k9{p6dnfa@G| z3GZZYX#pw7Nu7Lf_!n$h6=ToKR*aJC_l|Ci;ItJaKxFPu#??ce z-sq5M@1B;6Lpg4MM3xugTAD{I21&v3{&hJn@^ond)d%Vq#lkvGGuUB0Qt=ZZMr-_J%=-8oy%nb zq>RRsP6@j2skal;8#IsUg0fhhKrKHecf?$C{RyC|sLsN=eT)jV?xdycSMh)!5@KO4 TrLJil00000NkvXXu0mjfOa>hn literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/4/404_2.png b/public/images/pokemon/icons/variant/4/404_2.png new file mode 100644 index 0000000000000000000000000000000000000000..9bd7a6ed7bf242b26ec538a42ad083cf09c485cf GIT binary patch literal 732 zcmV<20wev2P)X00001b5ch_0Itp) z=>Px%mPtfGR9HvtmQ6^MQ51%cF{=ncC;~y4sfKXTLI;9&2DTA$qiB>M1JmRng1HF< zcW&BTSP#D^o9? zc&cZIQit4Cbb$cj1Vz%nFxHSa0HOi%?4T-_y6bXsQj=1>ZgR>G0MGC3@5%e&k%s!9 zy0HLD6U*}L^H+KIU`Y1H2Zc&fC8h;))($OG2Y~Q{)PMmt79d0W{MIAMJbfrTH~S4B z>~?O_tgLDlg{yZ`JuRJv!+l=`*`)FEhwhs3l~47Wb!7K%6%q~#>h^<;uz;}Y9Mf=A z&xQ*G$S`o1$VKFtHip&(XIDERb)!y~woG^<18NvL*8Pks>Gx1T47U!s>-f{K_H*A5 zH%RsG2OMJ8i=T?;A!Q-x%EocW%8xo+LM9O9K!gTl(Hy+m zG#ur8)~q-QmeQlX00001b5ch_0Itp) z=>Px%mq|oHR9HvtmQ6^MQ51%c&0c0u5`*xKM*uB_xq3<)(dNlz|9Q zAcE*bCbg)Ri3`I`MvgYtv}$3ExSxvm(mR~F-OulD7-lhNbHDk1&OG-$Klju~ zgp7W!+UML%C_t(Qhb~CmfAwZY#`0HXF7Z-qK)~G`UMYY9 z3I4lPp$fbfIVfB`lZAVb^sqfzd6-;z@=8Vn%p z;p2N|WmU5%T)mU(Y3Vc^?)xgpCXJV`^^Y50>tElR^~+|)tb~Jty8U1yEFi2p$21(( zv*7{(G7Q`$auIo^jiGhH+0{-+-Kg)R7EO2~18NvL*8Pks>Gx1T47U!s>-f{K_H*A5 z7fJQ+2OMJ8zb>CFgp`G#D;vihD?jRR5g8D}1MKzkifPiiS?f(fMP0>V2Z+#sESl-2 zM}}i6cf+hW37RtrbInGLYx`&`3m_*O0B~Yq*a@wVF}{D?bmK~;z*TI2Y$r8Ons*&@ z=2g2IP)X00001b5ch_0Itp) z=>Px%ph-kQR9Hvdmpw>aK@^2&!LW^$2`GZFnks^bDFPB3Q3yz|QEY@j{KJ67Rw<%I z3e%(#ER>`O1Z=|ESO|i420&Nt`Y zd*+!kRX$Qx&S(CAz)U9d4_V0P^A*`_NkIX(zA$Ne-z-)iAmN~1RR98rX~gd@6HiT3 z$1~ewr2>YPiC2mV^!n2en@Xu30FQod8{YGA1p@Ke&h=HZ)!XMRlURTV2oMa^o*Ys| z3E*lT+y@lK`N64q)KXtQKm=uKH6Z5_J}CVXlJB`xj8qVTvJW5F80`aX_OAv+ii4oT z?1zw45wSI7C?Ep7C=|?-###&Kf{-c#lpFA=O9D=On<acNKfMKVRSCeQmwB;V0+!Q1%YBnCC0m*d8hSA zyTNmu%lhSsgzR7>>S7rXJN?|%c&A62hx_d{ZPu9oTK;Wb&W_%?kJJ*1VA}iSB3=se z1zG|Y#?byKm0~?|0{|mP)LESvkm;rZK_?5ldw2iLDtNfGQuM_;DTug`NI}GOsYnG` zUpOWQdzvjmZsX9brPHy$yuAULUT&BWm(sC^^iFY55NWh%no|Ei(d(29D3wjBQbiSvYa4N&FN=b47mf4$ a4LA|%F4b8)vH$=807*qoM6N<$f&c&=Tuyxe literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/4/405_3.png b/public/images/pokemon/icons/variant/4/405_3.png new file mode 100644 index 0000000000000000000000000000000000000000..82f0270bd5bf51dacf807460a5f59ee99d19a035 GIT binary patch literal 735 zcmV<50wDc~P)X00001b5ch_0Itp) z=>Px%nMp)JR9Hvdmpw>aK@^2&wU?EMU?VGpM6@$00-9I}DMTTaHX;N?Yy=^tBDR`9 z2!yDJVqww-QYco6f`zg32N7Is(x|)G8|4g~<$9g>-n_TFvN(-9@8`}p=iYnfnKBhV zQWef;o<3kElet9}ve|4|Hd|Csz%8uon4y98$^#@E)T;~XSX_b&AaV4&N7Jwh=2gWK<&vPRg?g(=D~eH zVXPe-n)j_Or2|Azrd9)TF5!dHFCqD!OT|b95vZ!V&BhoWoVI^8AW|Fz9cDj-q>6~G zAwvNX;5uJx($AVKoC`v#2vBaor!EP&`tqVsI@(hs0im8R+^^qXEnr{on6qhgw{i|g z2x_vD075Oojo$Q|@6|s|{$iuh@v`%EO=^eGE)WTb7o_L8Y=nS-Lr3-;Pgp>{3w78y zF2JzU$g4@Tr4UjohieiLY35+XUIG6Ry z6A9VDNYuqLAaw3^5Ghe3cHEq_I&o57!xutLS?jyB?BAE6*xrmp7e1VpLg)y{0 zN~Ktj+yKA`5_MK524uRaK+ws;?!L}lS_MCiPZfOeK?))+BvKGDT`E#R))$V+#^Z91002ovPDHLkV1iC2O-}#- literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/4/420_2.png b/public/images/pokemon/icons/variant/4/420_2.png new file mode 100644 index 0000000000000000000000000000000000000000..194ae1213e3e2717894b8064bdcf2fe059b9dbfa GIT binary patch literal 506 zcmVX00001b5ch_0Itp) z=>Px$v`IukR9J=WmOpF4Kp4g!OTU3&#SXqg9UXF$4o;=$R_IWuL)~3;39i{3vc$pc zE{aRBo8aisv2(4(2r3c~`T+{pp*@>emFAM-k{<-_-n-mAdH>u62nh)Z2?_B-B#1?b zh>NymS&@CVqd-Lb)x*Wro$M9>eCD9=iV%8R*8u>HTpEQ|?^iy`olXzVQ4AGC#4XE;*k;=`W}9tKh2l8}ow+A?xUS&l z(cJVGW7{Rf&%G=a;#j4;DU704LMoMlVyJsV>E|qzdXb2DtWw@P?lp{ukiLs;vyJWi w`VV}6rN}SF80Ohbpxz4<@gI0>9U#zR_x&G1s{jB107*qoM6N<$f_|*zy#N3J literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/4/420_3.png b/public/images/pokemon/icons/variant/4/420_3.png new file mode 100644 index 0000000000000000000000000000000000000000..71116e402436c698488db179612520f47711be0f GIT binary patch literal 480 zcmV<60U!Q}P)X00001b5ch_0Itp) z=>Px$nn^@KR9J=WmN9F>Koo#KODm-grF5y=3l0Xy8!B|{=$?Xu|DuCGp>*kwaBy(9 zn@d4x=OSh(2BBms;-E;EbdWnD)zVy|Q$7e>?uF#zy?d8~oSdAToSZZivUrJzM0y+q zL1EXN4XFi1BpP%&=Ki+T0^p(1#=uMGg*rZf4HYq-j{3P?{OkYYe6mM6OXDJVUSP+q@z9{dE+hl4N*8gH%vVD`;My-_M!kq`{W0R WxWCNj7tP=R0000X00001b5ch_0Itp) z=>Px$jY&j7R9J=WmcMGkKmdoogyP^_GE|Y9LOT>{CLh3O5Q>9z6@)I4K7uq$LFg(K zq{U~bbak?WgW?oQU8Hjh4qgYFG*uyZ7wM7@GTdG6^5u7bI7mrJNl7^fLJ0Za4k1Da z89YJx>*Yx%A$gR9T=C8YU_M*G{ezrzTDrrAm^z(>5Ylm+wHT1IEv$NtYP+9^9B2vx z^cofN!!bs8fYBZNX`6IfM5kT_L$#w2LN>Dno==bIH7a3!kY2P7;Oy!K-}m?ap7t8t zWK#^(`w-C7^%21Ss!f_`NJdc`u!lAC9*KRa4XwgteqquaUDY z=CcJk+gcC&b8#4rMgYoFtSuNwM$5td@b%hL7CR`qSFDsI`39#erViQmkC^}f002ov JPDHLkV1mS*&XxcG literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/4/421-overcast_3.png b/public/images/pokemon/icons/variant/4/421-overcast_3.png new file mode 100644 index 0000000000000000000000000000000000000000..91fb8ef3d5fbbeb1c1f106fd176b86cbfea42ff4 GIT binary patch literal 470 zcmV;{0V)28P)X00001b5ch_0Itp) z=>Px$kV!;AR9J=WmMw3>Kpcl3mTdyVFeEk2KZs=l)sUd@OE64~k1&g!sj8X9F5wF> z0j9}3mM}ZR(qNWg0D&3eCYEc;OVV&xGSerixVzr<>F=)BgPfe4oSd^DBI>^#Vnjsg zOP4?TeU*jeWfpRe*LMKSmunEz(D!YJjk&PtEF#MDygxC(EthC)9D*>+L=G$k0sK~r zZPQ^^D>ADUciM)&Pjc!_D42E>5!J1>8Q;wDTdlZWrM1=~U_fMX00001b5ch_0Itp) z=>Px%MM*?KR9J=WmcMHgQ5?WODRM}LR!E1?p*-nQ=+fMjp`99c5t2cnhOW!4mVm@$ieBZm{!}rI# zg9#HRO!zktLMS1G8uxpr#vvnwP|udrr>>8Jv7it_72@-uYqo6%WJl$K$z~yh$_|nc z_s6vG#*qbMlrt6txO~Y1hS>s?ZQG=dEZ?4&?*Ak*p_WinC^!tul&OX>^!r7!1muDF-d!T!0j2N6pQP`bHF-u z49-{D$b!20OM5*?CEWOj2U{%PzUmX}G@6mcG)51&2Q|=6&!N`W0I19)xc==6m6?Q3 ztXOMOuh%1qX^f8>xSPw>feKVVFgL&6OqJzG7`C zxvl zeIF(kg~;b1{F+XUS1!})2c)EwvEN?elX!o(-uAu&u$r894`c6ej55t5O9~;>r+atQ lk2lXF{k8lN{#vpBnx83jeH002ovPDHLkV1gOMF)IK7 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/4/421-sunshine_3.png b/public/images/pokemon/icons/variant/4/421-sunshine_3.png new file mode 100644 index 0000000000000000000000000000000000000000..d615119bdf24bc6309f06fffe84a5d22d1813386 GIT binary patch literal 649 zcmV;40(Sk0P)X00001b5ch_0Itp) z=>Px%LrFwIR9J=WmoaD)Q5eU65m8bpC={jQ@UTNwqR68NS<X&7L)1Uzdi#1|;l3uUy9WeIA~<7Mm~D zD=4K>;h64A+upPSR7#~5Jr988*~3zIwzlbPZ3FPE_{soo~FJSoFNn0&c9Xu=)ObPrS6>VCLs<0CqAH<_3;Jo)iuemKfmOqnG5ext`e4`PL^FP1-fU6g$O#Jqfg@~iAc86M8(QG!Y!4d(62X*z&o+)Q8n`6Dc zZX9j3I{*eQ37D4km?_pP=J?#@^9Jb3%ne%Yj)AMHO#lkn{6O#K#12B&MS%GO(X+0W zRzP(2Mr&v2sq+&i2G>}&=_nmv; zo3c@&cd?cp8(LvF*Ks0HN~x4>i4#9vTH(*FFQ2{vaR2dLGmOI}9r>6!4iXM$X00001b5ch_0Itp) z=>Px$t4TybR9J=WmOV>CQ5eU6R-ZsFM1t}NF4+!*hN-=Xp60DpaUYq5g+N#1RoE zXun%QI1v#iKhFSgCpZAMZAXIey`k$sL>$vJ0eC%lCqK_nGjaqKO>IDc#KR`3m;vBD z^Ycs~kXlD9B2LZ70bnI2WM8+vwN%W2sU93?L{LPWi<_SJ?T2#}#8E2&x<&C;ZF&FB z9xvHxRu*h^k6Jl`Zmt3BG%F;NNlp%T*V?H_8SwaY&wGEXwit~@+}^*ewNsH&uX0;U zr(9$<9MijcUJ4dX$0@bD3wctQ8g09?1HnN|f zez2Nl0iV^~nD&(+wE>?xO-k+V!rITaqY9}E=x@@6`VqiFKKh&Yp8%Ss`EATCla-ig z<)PLr?v#t1Ul*_vla)5hCd_Z73~1YSWWQ8pHXPF_7gs{+6bNV*39vB6YDUh>y~eZ; n=-mwixm5b)2M+4e8cIhWM!Bsp=+09W00000NkvXXu0mjfa9Gpv literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/4/446_3.png b/public/images/pokemon/icons/variant/4/446_3.png new file mode 100644 index 0000000000000000000000000000000000000000..04c40204baf46f1d3ae0a65544d1ac79d1b01c19 GIT binary patch literal 504 zcmVX00001b5ch_0Itp) z=>Px$vPnciR9J=WmOn@WQ5?s=W{cb)PNjqVBq*GM8{48Ga=f8EYHBICNstB!Y7sg_ zCtHM;3!3u6K>~%Q5L^^nJRH*Pa0n-P4S90rpW(eDhwcN%9ru3k?)%>F-vc~6JUl%9 z2Smh(h^<=3T!@HeOI4OFRhipD*F--+L`;@t0Kn`09n@SAd7})sL<$Q8fc?`;Y{fPJ zU~*S;MOQ?wi%cdWmN&`(fI=#Xv+JA5m@QNkAMZpWVwnd6fslWx-Fe~=rfG8jhs(u8 z#ME4IO59O=8$)X}V=L-v?ih5saA=JXi^ZVq#h2Rgz%4MHF(%J}kRP2+2TyOUrFJ}U zCrQMrL3<2i(Cy($P2i>VG3D}f#y~I{M#QS2FCb7TNj48I5R8Tw+6=lq^efumCkX(U zrs?ZfG)N5{gKlp|nAFe_v1-Can|o!z&o1tq+(K&TGh@!02=JF1?ih3yX>I(@jz^o{ z#hVAA7?fpss?E)#kV>LnuXD$tP%r-4J;w9Nn{1`RRVlMTon`)Y&3+zyR*x;6d6Q%J?n8ko}_;C=+U`W5=qK@|Ns97DlDt^ zxDTXwN`m}?fg&)#AawuSIiNUafk$L90|Vb-5N14{zaj-FC{f}XQ4*Y=R#Ki=l*$m0 zn3-3i=jR%tV5(=RXY_jy^ERNGZK)BSX`Y^13>-iXD}xjxD+42tBNKxFkd6Z4%yt&AcovWi0trA2(hsB2EM)+O%LH}?7N80PBVz-`1rSp~I#?G# zOqv2@g8&oI944^JAWI7%3#!Y|zyKus^6EE>Q@3)efXo-3E{-7<{%0p26lyl$aEavb z`11e%cITwoEV;*%%WXI+H+wHy_;{g)`M#Iy9bWC)qR+db!{C$CI{r!P_7toPlnURJ zs>d4R)bpg0acRMdCm(pkCO*>$s%w_HXQ9<{|BGc(MhUW4qCY4&SiMN&Q!SlcleVFl z$9OZt>Z^vg82GJtm2WMGI@^}oHLb4W+NRQf_2C=lmvyfzwf(4Sbz+%R)DD(?f#v77 ptKAf4sw>*r@o4A8+|Pdf2gOftYlH;r)|!L-@9FC2vd$@?2>^~L#T5Vm literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/4/476_3.png b/public/images/pokemon/icons/variant/4/476_3.png new file mode 100644 index 0000000000000000000000000000000000000000..39cb2a72088f2b7d75c9e3b5eda9e579faf3c7dd GIT binary patch literal 641 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`RRVlMTon`)BsHwEf~S zmxTiO>_%)r2R7=#&*=dVZs3QCl?MwA5SrKXms!@LcsW?O26XPT#{76S*6!^$AV$jZP7WO)IxG?WeY6(ciP zoCzpy$jHPX0HmXUIJ2DvES?2qgFpfhgY?5_G)ozP;WB}pfd#0-z{uEuaRJ0skPg-b z5R;|=*&x6KG=~YSGRV>b$b#xJG%x_kzP$R);?%92Dj@TPr;B5Vh5y;f2ZfpqI9wt* zJih$@zuh@$HcRgDI1%FW)37Cv66VZQI>dWToLw&?S2=rH)?w2pt$x;+Ie1Es<@ zrRuT9IQ2ZKWL#RX;>iadv5C(#g6f)Oe9lDtVE178V43_#Y(hw*!%Rt!+j63;=?MwS z_ZhyMzWtnJ$`i?QqkM<;wD&t25+xMw+*xR~-2Y;klu?50mFN!&4puMH_*6@0*Q9MI z<}u#Pu==XuEe3uoUgcX0qRzIZc1^46xVEYEUw!z7`DNYfN^L)?TAf%X6}5w9Utsz9 q?P@oLnd*vmc0Ag7G551y|3UE++!`Uly0zvY|9iUnxvX}M{P)X00001b5ch_0Itp) z=>Px$@<~KNR9J=WmN7`&P#A!}90ef|1P2{Tu0Ms+auPBLS4a^K#Kk%~b!e9^2c5jp zNgT>K6v18SP36We<%S|U2wi##h0^6waWF&SD7XlD9puHFUbT5qyX2da$9ws|{O|u? z0wpCSB_$>Q1rgCAqHjCSy&{V}i4f3ADaVXurL*I4XB0PyMjoW6su%IVV zDqzHZtKBqvBBD3DYgEH2Y$UC>SSjTQXip*%H(-2n{F0pE?dpbY7z)*h$%rQrgLpvY z-r43pTZ<-xd16^N$ot3;*K@rhkyUn4o2h)o*8V%|#0pQe+(`!$nv^H(d z#ax0SqO0K)i>qA#o-OyOw}i^c!O*;iPoDs!l10e%Mn+Kmm_#1MJbpcQ?V7!|y0USu zBUc8MQqIr*G4t&(mHX7{U%6%w54itw*6NT3i!N45IlX2_10-(1eEY0XzI{0apf=;D z_lF;T;V(_tc-adY5;x$~kLfi#>Gi^!v#j=-9l&hQEVUV*qb<8Qg$`;s|2oWVz5w9k zMvt-Y$3y3znRlmx7iAMSz+al+XlwgMezR_zyZV7G$;%&asLn!oS_`NE0000X00001b5ch_0Itp) z=>Px$+et)0R9J=WmOV%uK@@<$5xWJ2WiN-_!@^idnn<`xk}FgaxMq)tt(Ys4h?Rv{ zClF$%RU)>gxJ!}Bm_kVxY+_oK(odfMz)%?@vP-@cuBJCKr+ zl9H10Ac#mHB0;b7^d(vBdx};`BYs!%i3D2_k-+y9zNgyeZG{sHnkpJOfXYRH)>;|4 znYSNtv*T^m?x~>GT2(F@`5ynfq?4TCSLM5H8dUd?n=uvfJw>%v=hSiAPnrWX zl^F=4l5z6H78H?S>)X$!x#>rP(`m5VJXB7vJ7=iTB80Oj}7 zze%^m0J%^H)2&#YppK-95KI83gtG| zzTCQ|TC4Ns*%PZK4GB&$G#d2$LJ5Gg>KOndV%oat75i-jjhr(i zENzy<@oaGtfThiHBgk=?FwzGnR(TRNYPkM8e4Z-;uvOmS`0A>u|Cu=3T!}Hg?!)WC jz1$J4xUUOrN?iT}OY6;RGK!*&00000NkvXXu0mjfnR)#r literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/499_2.png b/public/images/pokemon/icons/variant/5/499_2.png new file mode 100644 index 0000000000000000000000000000000000000000..992d5edb00a18e9a2e3d6dd0eb0172f43e3f0a63 GIT binary patch literal 743 zcmV?P)X00001b5ch_0Itp) z=>Px%p-DtRR9J=Wmp@1wQ5?rV${C>`A{0!WegSU~QR|QzLQ2umNlFH3bO;^Yq%E`* ziqK9KH=z!#APPby4HP;!6x0wBMX-njxxgJQ1_hxMCu8b$2zO1?s&^(sA>ZZh{kiu( z_ulXOdv{P%O*Pf@e@H}35iu)0Zha*N5fQUVLg(r#0bCKlv$_b_trWKa0ES`ISyzFI zZ!fq26cJO`b$mXbT?S~95XTKE1Tj6T!jYD+U*INkG(hRry?gV5NMw+Ki7*?p`xo{< zGHwoe?T1Cg+*%sr{*!M2958(2ps8Q(czZL){sh7`NY z8j1OM8JIunWhIuj>wFz;_=bacR0UnvapP*oE*{@G03eynkk<;dG;6dpYXBtX9EALsY2JG{?+U|=E)z|UVQ+1MI+tw1o?VfVGRzq^0b z=`^++o5Z6kghqx~iKWTLS9v`5w5-ocEX{+5eQeC`TE5G+q_nA6pN07)^f5x z>P64w_@4P;w^_gzoTaJG)?#~loABG!>H}^qjRAk-(UP9YvA4NS<4J(qfm3`PZDnox zVzQXj&m{WG6OPvc3Ttlpz4_Vp@PyUOyGSxP5fo9rQ*-sVv}c@7AQ zr%EZDrK?Qicm+ko^bH3uY-{i9vf-@64Mq2QR0WT!kk<<2wZgUFz@X00001b5ch_0Itp) z=>Px%!%0LzR9J=Wmp@1wQ5?rVsf7;NqDxWf(?CN(kRm!{vS`vG*2c!6HDf6_ln&Oq zbP+lf+*&LOX}TF58Z=f*^b}p1!4M=6s1YPDG+D$195OhR>!5c{jIFsCheE!~-Mzmb z-ur#u?;X@sQ%yDf9}+^SLI}0m<6f)AAVLV$-C!yys|IjY0MF_?;7U~y;MvuYQknvX zRo`6zt{d$jgiw>oBrPp1`Zs{P!9+Zj1tC;hK1ToxQp!s&qoDx`x9;)#6+E6k#)k*l zUt2u4ec({NG-TPGg%Il8{3>5wJOCh`%JS&>vl2L~)1|+sWd?tETmP;E)=&)YEX^=9 z6(XL>5;`~{==BwWS)DG{mpAmXCeg^Sy$f4DM>3hD5?32G$%)9g5L@vwK0FA(y%KclEkJEXMSkQ5{ax-GLDR6lIIgzITSqQW4nt z2x*xiEi(kYz7jZFK3A4u3vyAMZst-iy$7tG=k*me1+Wiy$jH z<;7__E1Y;}DukkJ@%_W=5+FFqDur;G66SxWM8hj6giwd=UFX(09Njvcc5uUqdu{m~ zwtS9+*+Syf$rr&vg(jJu{l?1238G4fgxNyj)k;f&g_`s)=Z~00000NkvXX Hu0mjfN4Q`U literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/500_2.png b/public/images/pokemon/icons/variant/5/500_2.png new file mode 100644 index 0000000000000000000000000000000000000000..e8b8e88c46ed94ad0e525046772074d931448cda GIT binary patch literal 943 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 T|1BN>0000X00001b5ch_0Itp) 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 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/513_3.png b/public/images/pokemon/icons/variant/5/513_3.png new file mode 100644 index 0000000000000000000000000000000000000000..6c4592a0f54459c5be4bc3e10244532534425e9a GIT binary patch literal 671 zcmV;Q0$}}#P)X00001b5ch_0Itp) z=>Px%SxH1eR9J=WmN94(VHC%IQE?C#7qLb0Ln$U0G#nL4C)*041_@*kY(Wrl(kw{? zap+JNhvb$U>(HTA90Vl|C6It3^e9wGp&=1LE(ls7Dq;{S*w3Ndd1*v?y-TP2Z{K~7 z_kQ1d@80);FJHcV`Ra*;5K;&s-TK+%1&m!L*y{3vC;s+%;l!S)qL$%!^r9DT0S^G} z*=p)#8hX`JKvyN+TFR|pMJMErP z8H`3cdaFwi>0&J+rnu)#}Y!w zT0xV^WKv2gWxG|E?N(h1A!Mael(m8;+pW5Mdhdp8x9W03OUMl^Vc9s1=Qx9gVFco- zJkvuVYF93^J~PYu%q)tcFfww9BX8HNALqd1y8wKC^QG&M+l}YAC+tC9-=6sA-lwG% z0@q@Mj7`v=S04}_9K$e-fH?`wbQ3m^yO|faUB%3(mA}>Sae)p{oqS-+r1u7v|sz0l>>=uXuj? zBh%yyIEu37`qr(5qzT zDkzG=MDUOWWojpb+B4Z75$3F{6*Ny?)jg3{Pkvu+^#|9>6_Zc2?sEVD002ovPDHLk FV1hx!Dzg9p literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/514_2.png b/public/images/pokemon/icons/variant/5/514_2.png new file mode 100644 index 0000000000000000000000000000000000000000..5e39da4c7f7b6d8d9fa478404aa2e54f99db2c3c GIT binary patch literal 848 zcmV-W1F!svP)X00001b5ch_0Itp) z=>Px&3Q0skR9J=Wmpw>ZQ5c3FZAq!%AY=%3ITs~Ca40cLFxYaz6f%fV9Ex-Z8A2Nh zQZm%89b7U9ZCVsUC+W}%Rw2*`K?-hZ=pckh!%L^go zoWnWK{oe2UPA+uSRaadBAcQc45JtQAy?NaYB-G$+(i~Wc8M?0bTz6lomNpVX7`m?a z2q6p$3^-hg(M~vk-d5lSXOq;kvt4#K1!#|$!x!gtV48AKv*smuqYu$Gz{?7tvR6V0 zO;Xt_)vP@on8t2<#{p$D24|E1MGQa*O#)CZYG~o;6Pw4;Dhf#?{IKfj=|SHe|D z(LXedmfo~JPLI;`;f=sI+-7z&1>C_A{K`H%y(&(R@*k8EnxtIRtZ^;9iQnr5Fo2p0 zxAM78TdEsDUDtaKS7Q9sPAJViB^HZN%_VBq*lm|^u0jgGvd{5I1eqeO*xiuD5)wdF zLjY_?``C{50Z`2)c%@!|x(X?dM-y zo(ck>OoY)i4SsAfzH|bZIV-jH{1X79XIU#f?7FJKHx20ZdRb6C7Mzp>9$z}aRYYP~mDZJu8r!R@WV31J&mjQF7Fj(Xmw6hATn-?cyTcbpkhrpn>jLV! z-lI%}jW6*>xTk_B6A3&sQ2b~X&D}o-e7|wWf>PBG*=(98?=jmspCqVfCdueomgA8KVCET^5&IXcnoC?i2QPz_xwLWrfbda( zje7_9m#ctTt*eXA*j>*MJ_-P4>&fTy7UZqpYsd$_>a3;#g%HNK<(HIqH6A2B)Xbd@ zOk4K(m3<4+OpUM={YJoA29%JO9U`rl7TRx|cK?xWSwaZoS7zBLzM1dHJ4##BsTZiO aTG3w}zJ!iyD#1Vi0000X00001b5ch_0Itp) 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 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/522_3.png b/public/images/pokemon/icons/variant/5/522_3.png new file mode 100644 index 0000000000000000000000000000000000000000..03476f89139666941956fdaff73b69e448ed58b8 GIT binary patch literal 555 zcmV+`0@VG9P)X00001b5ch_0Itp) z=>Px$<4Ht8R9HvtmM=&{Q543{QxwzFAZi$MQPE;>MGPWX3=0}J7mQYi!MvbWjfQPT zi$M^JK`b*^6pW9tqBH1A(}9!k!g*XC({ca2ZNg4@XS{LmkMBEwo*D9a*oajnwE@o_tCXIP5uS*0{D_j3oXD?T*P7K@ zfPh%@eE~R|Ptktrgr1kmG;^2y6;8K_lmP*U%kE1V0hYhm5vp;HXIMd#kz@qOHMriK zq)X=|SQ?9&lCYRn!@QI`US+T=1G0MZ3fnl$QayJSKmw3Q&t_qpj?+b2ogNJ!BL_tN zA=q93O%!(p;Cc2`yaSk=19EDxq1@qG3WfofZyI#FG8BjkFaRRtoUNDDZi>TLabhbjap*3900000NkvXXu0mjf006Lg?+*X~ literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/523_2.png b/public/images/pokemon/icons/variant/5/523_2.png new file mode 100644 index 0000000000000000000000000000000000000000..238e8d645942b30661c61d9d46c64c25b98db014 GIT binary patch literal 738 zcmV<80v-K{P)X00001b5ch_0Itp) z=>Px%n@L1LR9HvtmOV&ZK@^3rO~6#$8IK_QKhpcXcQVj(E$Y_yRS zK?`jx1aZMa6l{VRQ4nmD;1-fXB*kJOY*1pAXctJKa)zA8-Ql_O#`hLQoN9Jv-rR4_ zxp!vEqVTMDL9sf&C*Zw{sVaaAhzeNhDgfsX-&er9D)209zee(V#t zRFF=O}4a}{_ysefxU6S%niUwFV=AmrubxsnBG*CMIwmN|G zEv!g@2ujsfk8|=Wmyw#~rv?(RusZ#D(SXo;T`ZjQg~J}sYX)!#3Yezt8X0}DDd*Gu z(m9bWC|GTGYt=I|2Y5iE^6Q6Yq^-Tq`)YCmK0mE6!5DO9ByHe+{Qe{LPaX%5EFLON zIQ&L>gkA7aUL!9+K(PT%=Oqh>YHN83Xun8NUZY4k$Y8xgYe8|?a9nd0^upAK;K}Uh zTQYW|x$@Ep$iTXqF-9v367hfD9gKf0upevY{_dNlc9pvzy#Td>v=pE^-!QK8Q`?I< z9Fz(o9jL5*Q2zD;X00001b5ch_0Itp) z=>Px%nn^@KR9HvtmOV&ZK@^3r5@SfQEFoZu&9W&3Lz2Qm8x=8xbYhW|>LysGNoOHi zC<PBa0J2X&t#r~#I*WwX+HeE`BvlSm zGcJ52K<3>2$vzqBdt(&*T>2r~<)88~J1eQX-Lk*)B(R$Wr1SQoso(@;#eOOb7}36r ztO-ET0L#Xl)CGh>GDY_5NXEV&2C+V{PC%#tI1RR%Uy$dELjk1DNkWkZNeloP148R{v2e~84r@5C8Ngvvz&xAD%eTE1sqa6O z&7Oveg4K3UuDvpIfCn@xzq9#{|s zx@qi2bLFKIkQ?i2#u%-vNW`yk(g>XXrCUMZ+-opZEN|7XOZ zFs{e2CJV;(szg?h_FzK*zDuP9ef_Fv5XM7AmyPGyi*av2y&)9^WEceJZSZP9_MA6h zm}T~uu6)|*1EpiV0qqT;Qd}Dovp8&_By6lXU|bt(3V6}niu#>b4n|!x$+%O?ThT6Z UIIJE30000X00001b5ch_0Itp) z=>Px$YDq*vR9Hu2WEkXtage)@VbpCkzfkG7QOUz2FX< z8@vt7hRJEJ=p@^5Aalq{gCGYgyb^*tF28dZ!^Cnotd4vj_KvKy2Q!Q!2QJ>9#vo&s z&hX^aOt5*#4h4lIC=>_8f#CF|pz#0j$_fVC@D2tL4FfO-$2!gehj5r34};gSV`PUS zSs@5>;Hr`U21!#5lnerMFvx+W2C58-3d{rJK$s&t9n~4EG6KPlJT_xJm<^(@?`Ees z^vKR6$Uz1!?;O>^LW;(k4EN7oXDHu)6Rw2ZDvqK|f?m~OE2xRB4hg9vI}H*tm|F6K a-hluyah@Nca23k{0000X00001b5ch_0Itp) z=>Px$Xh}ptR9Hu2WEkXtage)@Vbp}moIVVML22HoK8WQQVI zAqaC|{ES5m+UjyB83g8FkOKos%ox;64KMM}mN^g*wCK6E_*oEog-+A-9U7D3hR9b=V4OVyic~!mgbb#Z{GfLr a0B@9^AKSnkt^fc407*qoM6N<$f&c)Ng{w#a literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/536_2.png b/public/images/pokemon/icons/variant/5/536_2.png new file mode 100644 index 0000000000000000000000000000000000000000..36a4a17dd2b4d133e9957df5764a0573ccfcaeea GIT binary patch literal 612 zcmV-q0-ODbP)X00001b5ch_0Itp) z=>Px%9!W$&R9Hvt)=MZvVH5}OBQnWC&B8*`9i_nn3zN)hBvWJ~3ZXMu{ z6X8CH0=1q{G{IJwZVbz6c?TqV6Z6=?f9JWw$e*U;Kpj`y=*RPpB#& zr8b^Y02U!u0^$qb?Hjn`&UHg_0}+R?(bF5~%ga!dSXhCCL&W~`9XQOXU`tDokhqTv zuZhXex}?aJU?^ayE=6GO$PjFdb!)CkZeZg_4!dc`Od?d3U$GSBi*RQH!_qY^HOU1; z2&RZg1m-s#g79b#0Ydus(ldMDSQxWNp&@q;kotWz`)&Pc<7G?Y&cVLj-({8S&}tBKyV*1At?>{X00001b5ch_0Itp) z=>Px%8c9S!R9Hvt)?Fw=VHgMSXXXMUNx5}aqI{$jZd{QhH}VlyBIQ;tR%S{eT9OOp z%9ThmWEU>B<%$%RVm>0}kPAebnUv3-H_z$Vro88zWfyy|PVYI}e*3@A^K3eZ@}-M% zAH;xaPbijPEJ3visC|8`2LC-lK@dI(A&R2rC!*>N5$9d1X1>#%3#hjpv1=`%ihz{b zk|h_ii!&u4UYswUfcflQGbA?uJ}$gB z^Omehid+eX1BUBT1d9G7SWk>oU6b6vu`E6N(9OvqFw}Ih6y=L>LdvsrPfbm70TF^J zA`*eiRaR(?fBFFotWNxZV+ow^-h$b6r|8HP0UOf|P@47vA5&`#cX)CMe&ZDb*EvTd zAmXsgX#^=5KdOLpWfo{|t7OReX*UQh2GE;^A;EVO(m*&PBMzj&?Cfz#=^+dkLgP9s zVCx}40^+{>h?NX+t_0;>OvfuPKmy_(rATAvad3e>>accjCCLS(Cc(xiaC<@~3<0mN z{OlffGA_cM?jOMM{CH%6ge+?Blj@IZ(6nI#hxe7Cx(D)EgN!!W!PC&sU=crJ!eJNV zvfl>)p}6v9d)aWNX00001b5ch_0Itp) z=>Px%uSrBfR9HvtmQP4jQ543HnDmDV+_W%=H!Y-a;if4Xs%79G+C>rxK_r+^K{2xm zgjOTEP!ORI1Vt2g(VuO!n5c16AchO)5#*xHKuRSc#dqU-ocEeH_sx3^%wo=F^t?Ow z{@!=KbMCZAgGWn)^GOphX@!~!HWjof;5g22tZ`kpE_O+@Dd1jaGE#E)WMu1|2TADv z0UisG05^A2l1?3yV(F_$>k*mT_t6MWXyoVimlCO4Ga%rmJI=}Sr?Q+pbin6;&F?== zE`8#l$p^vX*dP|*rEi@EKm!6Um?J%&^*x)E+>M@^)vO5+>g5++nR5%p4JkjK_7nsF zb3t%CV*s)iZ$<*7=Lm-bUR=2+*_k%!&#lSxe3z^pA2)!vJD$kc@GlRj{n3bI(tj0S zAIO>Vr<_*lEfgZDX$91s3g1DEnW;q?zI$D|zC1Js1CD_lp^bCRn-4H-V}ffqu7!&567KUx8~X&59%&b3qR|5O`b2sVk{ zhk#N1Sk;42$vHb{8bT`&RFN>6641rZKjidM-uGRu@gPOa4HP!SBQ*)fOQjj6OC6L^ z1L_ylkhW&A0%EhUUo6Onm6+FD`N1vIM3t;U&}uhKB*3t7LiL~&?_aFdaQHt62-xoP zXS}@oem;JQtHHsaILI`^#H?>Alp`EI*RS4@*B38%Yv^m+{Ty3Cjv@LIK7}$+gMsq% zj=sFIXp}8y@5_g`tKK@>FPzwbL2p*_DW?Ec#&-y31LI330t_oZ^HiD2a%9=cs`src pU=)>YFIjg$8-VS3!vp>SI^w4;!$P*q00000NkvXXu0mjf002~jTnqpJ literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/537_3.png b/public/images/pokemon/icons/variant/5/537_3.png new file mode 100644 index 0000000000000000000000000000000000000000..229dd83c8ce9fc5de570c5c525c75fff533c39a2 GIT binary patch literal 753 zcmVX00001b5ch_0Itp) z=>Px%t4TybR9HvtmOp4yQ542c4Z->sN~MSjNkJ4FyC@>)E_4#9ir}VLTttTs;vncC z4qe1WDs~e@tr8prcLfn#N-B!j1pG&^1pG&(ROLJRh4Zetxi9Y-$dI$-<-D7FfA_oJ zIX6Ah;nCCKe9{F>dqQ0Wy9$OB$mjFFFs58Cx5X~0CI#Hg^oYEAR*})mvvo*9{}1p) zfCQM>w@wCk49MK`suY%IW#qvJ6`at>k3ag9O5K(L0XKbiNapUol)|=whyzM5s+#*= z=+nFlp2P-;04FwQ6u<%k&dre?@1E9r<<9)Kmep(t5b7Q3U#07QeEUWA4`=HN0)ROe z9Pb!_Y{i?g0O>ixVS(L!3v&O|ad~`tQubaMlMNSdD&Wt_lXBqdjXF?qW>MB}TBF~O z?OChGzhzfWhDRU9QZoo>D;2(j8l}pD6mq@t{`^s07;p^a2#wsbv1<{)(vL+gEL-)> zT3IYWRIA3DS_IHHF~Kby$3jJTa{TpDdIjk@94CTC$1^JV*7b@WD~^z#F7%NTIjwlB zJS_sqkRQDY+Jdl)vJ%;D@D8910NEfMaXu$<&k2k>7F*A@LnIkgtiyDiXGrMm@|PwJW0q zv>UXLp<)RFVlv-97UaE0{P%vobo-qaQ6sAmwAl?43((h2s2-H!{fn`@g8_$d0Rh{e z`P0DhJiFT8auNg5pI8WS?(oLQJ}jKJm7ObO>RzorhQ1En_6P5KhgRD%>ae%{e% zE^Jq2i^ZzUFJ)CVMCcz*VnElMjeP2=jNcG01jbFK0`z&4c{Y10%a#>7Ry%K70pq9~ j+GN`SLja-o9S`^$Hr}o-vjfiI00000NkvXXu0mjf`IK5y literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/554_2.png b/public/images/pokemon/icons/variant/5/554_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8f5df20db653cc926eddf89a1104741dd22d8a01 GIT binary patch literal 484 zcmVX00001b5ch_0Itp) z=>Px$o=HSOR9J=WmAy&>K@>($MC+7-XqZ4sv9Sq)f}miL7cho22^NZt2wE5{w6G96 zEd*19{JcPlbO9xj#=>B^FvB8(FJQYCa^ofu!C7N9r`p}wojH87_YOE54u`|xaQr|l z>I6!u0Kga%lWV~k6M6nf6DXyE`@0(emRGjP zCX=s{$yZ0-AFH5JD(Kc%QA!1p*y83E0LL4*09>6P6KqqQD+PZAAdo1)b}C|j3ECD}Xauy@kw zk4d7tM{gujNdR7-FKw0qVDh&gd{$&BNTdcU_N-L^K#LNX)&TmV!__O>?0cGY zwr$n0tvkF_3;=X00001b5ch_0Itp) z=>Px$lSxEDR9J=Wm9a|#Q5e8~S2;Hpg78)e#Zi%zG8$am8X8@W#{K|_XlTqWTpAtR zTpR=um8elV!qF#!kry8hMEQkinzZF3x=ch0j5N|Xn?|lO>vdi?G zsgBD^)+(`-(rWw8+N9HBI2qnsdhHS`F@SJ3$86kWHg0-rDx;z67~yOV zfKRNZ|3cmd#v2D?|C!AYk@`}0d{U~5l!HP;#s zR|_(JR5JnOOSRn!DuSXx@}(M}f8A{?s0iK^YM|?ucIyZsT;1!<@SpqwiSe-B_w>NQ P00000NkvXXu0mjfD;(1g literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/555-zen_2.png b/public/images/pokemon/icons/variant/5/555-zen_2.png new file mode 100644 index 0000000000000000000000000000000000000000..ae18a833759854e33515a256b4d25053c7a76400 GIT binary patch literal 572 zcmV-C0>k}@P)X00001b5ch_0Itp) z=>Px$_DMuRR9J=WmOW_OKp2Lfh%TN=L8g=3+r0%(3Y2ceLp#+|Y%hUAAtB&3sF-AS zz~CuVLuI;U=?|D}Nx+^=H}7gZ1sg&pZ&ruq4o8-W@8qfIU3Ajv?w)(^zV8k)Wy+K( zQ>On~Tbt-a2oWWH55q8Z|IgAimSFokrNsIUM34^DxSz*K_^H0#Z8y2wZmRPA_*T{J@03<+E5;Bb6(4Zxr4F97U*p7Q4X zI{>WjpLp)PTxxIPQ)Szz8Qb5EUm6JL>EE_HR+756)8|@xIV*1%Q;ND3+anr{^ z-JHe9&NGy4ai+wLhbVR}zrxVa8!9@=a(W@ zf`R_U!N|e*Al-*s3jjA`psZdy{h<+<)JE=uaVX00001b5ch_0Itp) z=>Px$?MXyIR9J=WmcL6QK@`V7dmOB1k?INyIR-~9s?a&#u z0H{}*)GJLkGi#x9f8PBD;Ntd-i`z56EYw|z*Ja>!saKjRHhZp;E4@+MQ90l$D;i z7!nNh9}fTIxwWyntpKCGXkq~j$`2gJn=nxnJp&?c$UAaFNBaN(002ovPDHLkV1fb% B1_uBD literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/555_2.png b/public/images/pokemon/icons/variant/5/555_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f408122171a89b8bad9dc9037bee2a371dc6dbca GIT binary patch literal 743 zcmV?P)X00001b5ch_0Itp) z=>Px%p-DtRR9J=WmN7^hQ5eU6DMdsG*-{mU=b#X9X-Xj??Ql?(fE_#sA<)f2o1qq5 zq%9KKZh^X}#SWR=dKnCawt)kc(14gpJV*zRwy3xTA%n|x2=7cxf|sZ0(EK4>F7JK$ ze))gj`!3K?M;-l#5<)n)&CpUp2Mt*ph@XL(Lf$}U)HBI~Y4r*}9$)94?WS3db|0}3G=e{hxsvzt&f zvB_ls z(g_-X<^6TYvxBntdb>;j@|m~`lh4G-XX1=aE;BZ{Og^(%KH$nuDi7+pg@WsfrfKd~ z*L4?8YG`1WUwkdMhrM&YO#-W;)sY|1d8NVV@xfcmmHwC zt3F;jetPnS?;jo#2n|!VN|&Ye4k%T&N~9C;@?#aowryWTUv~fsMvNyfdKenmZEz2u zSS(`Owr~6`4(zz`Uh;a{ba8fF{BpS-4u_ip9_}TT|15YqB(`n)YG2LP0ao5rAAPlh zy4BG3D&<4cN~xJmV3^d*X50PNOiH%5k}P$>h*7pm1VY0^^mXO(!Zia*)%NUF;5xbv Z{R8{48|BXc_uBvf002ovPDHLkV1jQjQ)>VK literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/555_3.png b/public/images/pokemon/icons/variant/5/555_3.png new file mode 100644 index 0000000000000000000000000000000000000000..2994d3da2cfa5f6ef3817ef4bae85cd6401a84be GIT binary patch literal 746 zcmVX00001b5ch_0Itp) z=>Px%q)9|UR9J=Wma$74Q5?rVDWxSyX&Zz~E0`y=gFP~&5R5~HWR`XaW~&v4LY=x4 z3-Im$)!f2rDsp}I7A#}!!^5N4KV`F1v%qReF ze%=S56b`ezFm&O!sr+Wwwb+%j5JEf6U?j@`%uP+Y_KMx$@bHkisY%`!ANK_^Pz~B= zv#>kk&K(#dxz#rBhkVzdQ+xAE&2yNt3u7e97|AkfcLudPgOMz|evVGQ)B^!_mBC0N z1{+PxJ1bZgWV2=0W?7ay&*gF*a8AQ)uXWeazB1^oz2$`=H#?SPdEm0{-0=f?&Sc_D;30ZuXr)b)+bi;M?toKm#ddr~*2bZ;&ygynS|y z#f{+$@4#xc+JX^6@13>|=eGv01av?ETAMfA&7H9Vx?;oAr^8q7NCcO;g0G^^|W8#0KKJPjQn2r+YFZ}@P~hr_phZF cxPkhiUkJi0qoCE_&j0`b07*qoM6N<$f+P!C$N&HU literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/566_2.png b/public/images/pokemon/icons/variant/5/566_2.png new file mode 100644 index 0000000000000000000000000000000000000000..927757ac2400bc90d19d8f8a2da962f4a94faaa0 GIT binary patch literal 281 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4aufr6LR^8g zf`UR&P|!^0yiau-d{(&6d)uQD9TGODY46^>|NsBzQ8{=AsEE5H$S;@y$cKX3vf8Ua z;eJmS#}JF&x0enIH5+iST+m^3`uU&#-7%|e;vX(8wzf(>CLU1Iqwb%_^sGE^Q^JQ> z5do<}PnX9tPSnaDUw1B3DcNab|0~AQc>%4{MSq7(xze*V%_`esf|HcZQI~La#U-!u z9tG_^b@kqI<7ZC`{5)0KV`ASoUcY#w?C3s)ghLk_g0miOn{(lxN%^|p>HlV%^G#${ U?H6_k13Hbt)78&qol`;+03b(p00000 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/566_3.png b/public/images/pokemon/icons/variant/5/566_3.png new file mode 100644 index 0000000000000000000000000000000000000000..450fd247d8b8670452eee55c48e674df3c072589 GIT binary patch literal 281 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4aufr6LR^8g zf`UR&P>}7EiMiLd+8FjH)!uCA-h1Ze|Gj(n{{R2~NPb=%P!V@YkY6wZkPij5Wwlp< z!u_5ujv*GkZ!aAbYBu0txuC=7^z%ReyJJ?{#6MhGY;Bc%Ogx~ZN8LY<=~;Q;ri2f% zA_7u{o-U7PoT!yQzV2M6QnJ&={#T5p^8#9@i~bIoa;0Z!npL*N1Sct*qb}jgv7a#?PJ>_<5?d$HcyGyngXU+0lIp35PB=1ZO?mHs``Wlk#=H)Bnvj=bOl^ U+Ar)726P&Or>mdKI;Vst0Bh}csQ>@~ literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/567_2.png b/public/images/pokemon/icons/variant/5/567_2.png new file mode 100644 index 0000000000000000000000000000000000000000..1050d13123d7f3f8661a2080848725f0af59b3f6 GIT binary patch literal 361 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a?}HSLR^8g zf`UR&P*CZdh0``~KB8alv%-De+a8tZkncrn!sayX-Mjby|NqVtp5_3R@|Fbo1v3Eo zaG=ZLxE3gJ-P6S}#G?1@AyA@Kqn5UgPDOX0L-8OiWxVOeZhk}i#eA0VU4}QDVtgZT$ z^_t5O>Hiy+?ao~xxzTFX38QXBU%_DMjgFrje2+=I6jD!rH77K**?6_4`=kd)_UQD? z&+lQ)u`c9Y=&9jq=2oW0YQl2k&j~xzYb#%eD0IJ;7IA+6PI<=x& y{^Z&Yy9CEoN7mWh&oel0oS(3FTJRnHQs!TLY~`)$ZB{@pGI+ZBxvX}7EiMiLd2ATKR81^UC-fZaJTNS+K%+3FM_wN1w|G&NrhZ|5SZ%L3}FawYe z2f8edYk?BiJzX3_EPCHgJ}tzg$ip&Ig30CI|LVCL?DQPBf5}?)&EewhMnYp>aKA~P{lVRGHwQVsTOqZJdD^*?a%D8yZG$(7dutqYDA;()C%rfI;I~`N+Nxh! zueltN{=Z?_?%WlU8?9EIFzQzH6%3Z%==jOO_n5>>A@%fEb3#L#jaO^BPkL}q6dzo*J%ZZe?n$CM-ApoUk*!w(@m|LicNF5$E?0WoJ%$^E1-E`0&A_Q!A?F xPp<8-OK@CuWS!mpJcIMb`3ZZc1>eyxW&Xv-R^F=KW(D*jgQu&X%Q~loCIG6Qmev3O literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/572_2.png b/public/images/pokemon/icons/variant/5/572_2.png index b6230a17cbcbdec9dba80e8090b101f4b8dbf5cd..1da1f6b953a748d90aa386b4f4b787118886a68c 100644 GIT binary patch delta 623 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 Z`Um!>Q3DFdM1KGP002ovPDHLkV1j70TfG1P literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/626_2.png b/public/images/pokemon/icons/variant/5/626_2.png new file mode 100644 index 0000000000000000000000000000000000000000..21930c7606e72716fa791aaf89bf4bd3fe12c8ba GIT binary patch literal 654 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`jRSl_Ton`)%1iydJPZvC6@1eIbiJ$&Y<)d1HRf|~Y_Gp(Yr~O^^%ZMU zoEmiH7ke7-?WqRpdwE(S0!Rs#1o;L3M*|G1YiA|_B{>T`B8wRq_zr_G*AN9$JwrXSKNpX$2ddeY8sVAd>8ZuQ0pzeUNHMZ9 zFalX#Kr9VqgMG@#3>IesiW@RAF$e(ZC?L*kX90_60ofps0K_2uFdEHL24GlCU}s$Nv;eZ8x(p2rK(dE8>aSf@jq(LDA9}ht zhFJK&y~NGetRTR0p)oY@%BjEpwh(=b&C*5PQ#PLd z$K}3!1CR2i!{;3;d1w4l>6BD{tg&dreh1qNn{1`4FY^ZTon`)&bYcxQ!#K?)_byf^TC>_hn{}8J8k6>1xqfo- z%TrNTrU|`&bqJ{G_LUTSASF-|cG@7Lhz;K$t&cFgx zVPIrzz_*Y`3nrX!-@sFcfO)a4K)Cs(3rmkAK15MxImC!v3(;zHrzpzxR;GNxwxW zR$n_mp*qSsNrX?CY0oZ$#CgwmoEMsqoRehM$Zm`t6q0{W)y`9oCK>qf0^>bP0l+XkK+Dg;Z literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/641-incarnate_1.png b/public/images/pokemon/icons/variant/5/641-incarnate_1.png deleted file mode 100644 index ddd0ca15c0c226c0b788ac74bc8ff454761aa34c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 889 zcmV-<1BU#GP)X0009(Nkl6rzHM1PWPFJjSC#DamMU6?ice(!o%* zgn%^!tkrl4*q9Dkq6{4hfsQs5qYmOOC+QMNbwgXo5605FlisIycmEymsQ*ZmQvYu= za8XKq5r|Ui`@Zl06Oar>1d_!bEV(R!3`7L#c6e3BK;wJLC}N(hKj>Jvgh zDfJh37I=ThaRC69)rPKXp;%gF0u&`eZk(uZI}ZRTbqYKNfWxMNe0m?8YgIxq1}46gQtF%KHh?d@U(rwj00Vo> zfmuuhO(W?XjKb*$Jxr%lc%GMw!U2G;YcNe0AJk9$nYZ7b!7(>c>J)HsbQ#N$c8F6g z5(X!0ySlmp0KD&g4Z)daupmU}kv)vf#Ux3SiWS`MpX0~JpD{quQZ9}zQLoq0Y&NAy zUJqY|AZ72%1SkSb?0l?(lv1Br3riXWWtPJHkJ(KYI3Qt&Cw3l=xd~>%GB~E9pb&ER-{AG$U z<3Lew<31=rl{y9fQ;ZobtIhXu<^(b&?j(yl3;0~#0uZcdaTudpSfjrm+Vfb0<_RT06nsYIM&{vsmJ}%aa`1Ddpyr?0g8}> z5PmX=>J~1z*7e&ei4}@^V-j2{KoJrEST%w89F$4dwGd=5C0c*xxFwUg#YN%7Q?pnl z5irfL&IQOIEvwBFvg@d#ZCOsza{)3)AUyms7;(qQ3O5&^O!LA#>LK(C38n1?KY|Tc P00000NkvXXu0mjfK?0AP diff --git a/public/images/pokemon/icons/variant/5/641-therian_1.png b/public/images/pokemon/icons/variant/5/641-therian_1.png deleted file mode 100644 index 8f6f01fd0d7d9e818d918abbcc23282227415729..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 803 zcmV+;1Kj+HP)X0008&NklI*&^tWAL7`E4O0-S8*7x$9eBNS(fGIPDhWJjvfIt zQ}OMxPHh6w??=Jc>-9oglp-S5s(9}^0x?(bSJRNq0JqLILtEf97%=~J-EKDk72hE~ z0qq^TR*f@ybKw$So3cSf%r{`Z0Xyev=Qgf`NB4U;IT-+$tGacz ziKF{H^!pKp!%?f+*2b0setviU+kX0009XNkl2JCZP5Ci}uNn)){l7uh}M_FB-R(=-JjilT#790gdGr8%!0$9nNsbpcmbkBdM4 zY7QXJb2D8Og|S+irbjJ!(8X0~!m(acnYlN0*moI2Llp#X^WW3_}A4cFgHDYCgAOO1nRfW1z`Y zQwOiEh$j;(QHE-?1vOk-ItesDp64V%Pg>!!=;R={4(V$b(tD*=$aVqA(d7MG;D=y{F&v)RuJD#qN z7HSQr)n|e32c?we+V_3yhuZ73i=Wktb$#oOp|PlrMXlv>NuKBC=t6ZZb}W&4b#>`KqgmW1*LBIV%v={mu>;uJQkeog77m_hLH)7z hxP9-bF#q)@^c(if?xQnh-!T9H002ovPDHLkV1kD+oNfRB diff --git a/public/images/pokemon/icons/variant/5/642-therian_1.png b/public/images/pokemon/icons/variant/5/642-therian_1.png deleted file mode 100644 index bea360abb957ac8e1939f82c695b036bb554eafd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 848 zcmV-W1F!svP)X0009QNkliO-9ef~=yh+}C@_gU-c@ucmt9p}C%2P^t&&?4lrIaUn zY{)l*cA%81uv-8OvZakM`Iz{wFN;$Uq?q{fu9U6?1ECt`!O}; z#km(g7QjKAeDE0DNG7S+HfxpzK)G0qTvIL<$vX}JABTowtI!hQV|y z?fSt|FzDgZ=lVEAf#Ud5kW+|PH+&Hs4&gu8xKHTa2Jd2l?9o-SIfgKbHT+kta zcb{%K|8>sH?s!Z4m+Nakpu;XHr95%ASGcZ#Km-mT|Lvl=^S<12-9j!$wOaMJU|v3S z7RO5RPcp2Ve$LIcWMR-jrIfdt$@p8ay%*q!gGwn+W+^nsR#4j`BQ3{re$BF2vn=Wd z2SDd>CXV*vYTFVQvRU$uL& zWF)Ay)`@+kJjpG~Fxaox$pe2UCIDE-0F{nvNU|Y+x;&}FXFfK aG4v056I$OD4N}Pf0000X00001b5ch_0Itp) z=>Px&GD$>1R9J=Wm%nb>P!z^LP?eE@A(=AVn15NA(nKL0Ix|F3UnURHXXrarRR?C4 zm?lK3L@UMoF&>zLb1{q^;tu3ouCHxulcrOSWP$O$*T4In^Bo)DEy9B_<}t>+xN-0P z2aFnwG4J%e^?cU$Y}?L6jm@TAn06heKoUh{xSQ)XHo>I=WQ=)-wPxVEdOZnbnn(ml zH}4r89M+mRtTizi7-IKHl>-3Vwlg=^Z2-XOc`J5qYz@kA@0%Y10QP9?yQ!*X7})ce zK)tQf9bJbT0U2Z7u2u&C9~`Tc0h9ydNmW^uuu@nXBtBvl)JmH8zJ^<$0|2X(!5uCD z!W88WM<%oh0s=tK=s+uJ;0{O6=m<5O*;Fh}<9bFXFu#7JBbP70nN59gG*4E2 zQ)vWpFRNz_`v8E_-hnUzrF}9mR=Zc~Fqbcgd98~}06_cuH?fA?u6jlXdbQzOQ%!Lw zAnl4f97}iZt0k?ZVKOlA^UDW(`urr|a`}Qt9o45b?4z`I5KxRl-Ef#$Lfs?xv0be$ zQmvIVe7(xT{rwA9Kh808Trr0r0SM42FcmH}pbSb%s*WZo3fa~5Bi#od7g2DrfCMQ9 zN7S6G7#U*bxIUMMZ7>cFNbs^?+jfQy@980+TKz~DPIYEe+;;C^-dmyz(4n>@?(kSR zAc2B%(9>n<&f(0a(5npqtCRu|4Va82Ls`Q<^lAgvu#aMKM{GXso~Zz3NOCB(6@n!| zVEyD_l`Dr@QifAo&Vrk%!6*{HuqlqFCG!5B~)>g`pPQ6ef9Tq)st~`eLdo#2E83 z*?plRZQ#`a(}ddK$<5n9zS{rd$-n^pm!Y<@O}vVNfWIWRHOO21i}(v!`22;Z#(2a4 o000hUSV?A0O#mtY000O800000007cclK=n!07*qoM6N<$f_9FVvj6}9 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/643_3.png b/public/images/pokemon/icons/variant/5/643_3.png new file mode 100644 index 0000000000000000000000000000000000000000..5c124dbb8f6c26e451044b162f4dc2cb9af2b0b6 GIT binary patch literal 1040 zcmV+r1n>KaP)X00001b5ch_0Itp) z=>Px&%1J~)R9J=Wmp^D5R~*MbZadaO)R;n1(FuFdQLBVnlwwrJgHcY9ERjPyHiN3k z*rJ0(h7d2VGZag0mqUcmshHSwNQ(b;NJN%^>LsM7LBbM~8T8x1(m$wyy;4DPa1iwb1W2WqR9oPj=Ku*KPSGqV053O-W`Vh+$*6CPlj9>s zePibXbh_t+@q*pn*&`6tNu|BR3=jzFZE$kzSIIpcbh-yErv$XwuzscfcCJCEc2_sG*sC!=D-r1wsuxK_cws-cFyAslq z<0A!|FyhQ5&8}(D6%ZhoNs>x0Q8WwWGD+pelU-8{F8Ad!$&TmsNQ`E~V)v(2nt%R< zRr!OH<0JK))Aep}o`CW;6X98MnIyGJiOW~gKr2*I&Dm6lKu~9GeT%jAE#+3TVe#Ve zFKqts4SFQT!s2(l*uO{MgZD`o@wS)EWs;|<(p_)6JN$nCo!=f7$gcd%VdEtqPaA5$ zgWsPq9sP`KD#UK|Yev8P3OEa^&p(dOKhEF(yoYZ*%(Gv==R-Zp+q+p4^qTfN{0 z0(8R)q~x6*iSg*cDpzmZ;?aXuE?-I0Y*^GPB~?(+8PcLzpjyuN{oEQFa5B0~AgJ?X z*JL6*3$#KCU_E~dv~~^W_6Ja_l$Z$5Qmd4(UmXCQi}JYvoshEph+6_HfN-|+B#by` zMK>7O(14PQ0w)qkC!8}cn+=OIoy> z2L3v50|UzBS8v>+Rw)q(>Qu{l>{kbB^OuCL*XtwIa$aqf=he_57P&u6-402`i;II) z?1f4GPv#f$>NvlUALu{$Lgf633Qb+N<@|L3|2NBfh5wB%QvU*}bQ-We%1p-q0000< KMNUMnLSTaJKMN-S literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/644_2.png b/public/images/pokemon/icons/variant/5/644_2.png new file mode 100644 index 0000000000000000000000000000000000000000..13ba216e9cec2d48569e1fd338fa40e627278659 GIT binary patch literal 770 zcmV+d1O5DoP)X00001b5ch_0Itp) z=>Px%qDe$SR9J=Wn7?isK@i42q7>=!0BKfKE`8D!2p8Tq9khffT`D(7bQFk!4#~|) zegWhb9^p^~qCg^jB(g=ED(`S9$SiZi?(Lo&CocR+7JqK<_BY?o%q|9=xf;F;N~uDA zXN>WVe=5DMx;ProOP{BcehK(7I*6&+{#`ZecpUx;O^u1$8cE%qjNdw0#r&Bi{%CY(CxGV{GAkt0+hK(kX#%t z1m-G0z#ULjg#3Y{@f>-+1#omUO_~6J-Tq*~`9v<5(Rgm}Bl!ZWtYQ+~sFW%Q4gk`m zX~FV*i}fmVPO?~TFuT3SaL_w@_HKWuEVw8@f}@E5oK5C~GsZN!owm(mf}%iu_tgTV zLXj?T_d?>`AWfQfiPx*F^1f&XN#x-BU!U>q#~VCc<^Ya)HJ$VeS9OznyZzxTXG5wD z2ppq+_g3TKGA}uE1j!2ExU>Yv$JAL~phgwTiMaR@Yu&O1Bij?N+?aM01t^O{ZhI1p ze|C)nPR>yassar*RBFJ$X@?+DPjv0o@|9nw!uXT7_FAnz=zvq~mlV&iXW%1AsGaU3v zVDz3BOQ@2A4$8daL0nzmoD~2$P7tm3KebNSE2 zi+%%7Cf}AZ??Mv*000hUSV?A0O#mtY000O800000007cclK=n!07*qoM6N<$f<3}r A3jhEB literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/644_3.png b/public/images/pokemon/icons/variant/5/644_3.png new file mode 100644 index 0000000000000000000000000000000000000000..a071965f32d103dc8b8440d9a721fb51f6b704e2 GIT binary patch literal 393 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4$prX>xB_Vf z1%(#FqBBjRC!DQ5U)K43dByv=>;50Tcq(U#SyhlQPz6^>kY6yve;BCi6bS>G#q8o*?nSdr?(0~O1>0}uvtA8fuz6o&;u23L=J5~oPYeC+nHUA!lHH$n__;p& zcy)5a{{E=@uF2IoJolq!|8}fr*chp18aT(_`m;u;pPldFQ<;yu7U^<5p0Y%3?`IK7 zLDN&WEHlIPei#&dF%wu&IBnHD8}RTibht zWHu$-cS~KTE52h_9&6g|rDpcC%U_-nF4p2b7*lxG`mR{Uwq4KX-|n$EoBFX^Y-g5D jhw%xcPj`;}f5p10pS?TRVv8X#kQh8&{an^LB{Ts5W@4=j literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/645-incarnate_1.png b/public/images/pokemon/icons/variant/5/645-incarnate_1.png deleted file mode 100644 index 416fa9ca1db85e4c292b45c95a5bba5c4ba333d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 905 zcmV;419tq0P)X0009}NklBLWqXH z&2`%e}sIfx` z(eQ(nM#-%3~I6gW7P~Yi^1)#Y%9mfgGE!#7hOsMSvi~Z4?oKCTO@l{>lr4btWY(ZJO z^5z?`38ZdErZ_%2AwAuM%x4SaY2MWK{+0r^EXxQl6$q;zP)5)6XCXu*Ss7B13X`;5 z{+8QAKU85hx3oA+LWoAGR8srv`>!voY`#$a<8$kb&#eQryn!gS1sGN_Wb$3ve8I=h zZ$14V-oFgYqel-=)^=@iy;`Ghpr4tMd3G<}c`T6juH}}oEQ?~X$kNhMU;)Q*`1$FN z5prW=!*j!J0s0{UW=7@#6r>QM@#^VowV=#>+xuGz)Kpbueyk*~BcXJ)WwA^f5?;dT z3#TU*Se#vDuW+c^i^Zbqmt*99Y`5HnRuWw|gO?m1K{7EE=+jSU@@AAu;taS;;6;jo zL-P3da}YGzfiwcTt{X$(vH523l0N#WS8J+D_!pj>P5~(uEr9BeC#@LNA-tC~le`&K zR!LC3teL?5swB=-^^oZ*Opzfr)#OBZ_%>1~IDcIZ)4N70Q8^I0h@cX~r{wcCz~h`UCcxE`MJqU|j=BNcmgVX21yJAKU3#J-xX5 f)ho<{{)hen_O;|3K5QX+00000NkvXXu0mjf%k{7J diff --git a/public/images/pokemon/icons/variant/5/645-therian_1.png b/public/images/pokemon/icons/variant/5/645-therian_1.png deleted file mode 100644 index c03d4233e293ce34964da29187c82a6cd3a6a6d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 874 zcmV-w1C{)VP)X0009qNklIcbDAVyBg`zFGzC7FZVw8`}2Lz2p&<4F-yEQ z3?mZu8Bh9$;}m1eS{vKp*R^T`V6ehMM*B_%8*b=s+;MMqeg=v;0>+r-&a9sv1&~y$ zHu&fFpC2(0AH>kzIM&8?y2|gR&^-~PUfFYNVPYKsaB{vM*q72h*pG%M)v685&d*52 zN-e?|vouZP*SfAFlgV_&5ww`a+pBAsN*e$mW;WItg&AwXRNB5T8wluz^O6W{7)C_Q zxCpM8BN&Je^4~2?toxQ)YDjcl2LNoYYOcJ|)Bdl?ufD#-Aqh9sR$Vqsz(>1+~!UGAw>wJWYr%Hd%5u1-0Zt~+2viT2|qnFE3-X&M6Kz?xXxeL$d$({>C`5;+Hp_Jo5bgx(D zD$OF4n@PvX<>Y)HfNkWdR4Oo=p^cgr_9`VEr6{J-ETT}#A+MJCcK}jwQh>dDu+l8@ zBUCSs6wO-PRY-L5kpYzUK~g%KbSFM#fcyBDDT6f+EjFXN+$ zyliV}&#Kq!*4EOV754w$AU*gEd%^tk%>9?3KhHeSZfr!q&Hw-a07*qoM6N<$f_he< Ab^rhX diff --git a/public/images/pokemon/icons/variant/5/646-black_2.png b/public/images/pokemon/icons/variant/5/646-black_2.png new file mode 100644 index 0000000000000000000000000000000000000000..825a8bd36c02f47f267945ec1614088eed79cd2b GIT binary patch literal 1097 zcmV-P1h)H$P)X00001b5ch_0Itp) z=>Px&=}AOER9J=8SU+eRR~Y}Pv>q%l*d1(zAU{ckCKzcdB^V5X5DOBr1*Cv6v^be> zNn(0Kao`FeLj;+M5)Z-<2}*ZGi;06#j3(WpKqNnlz{!gR26@TwGAQ5cJKde`4m*W> z%iTTQd*AQ-eSc38T(B_41l@DaBNu)Cxr8w$8t=GhyyHRz`oDwlTK^j0z6js)8HzEhKN; zn-~f}NEe%}9*v}QP<0Ob+G69 zK7niRH*78?aNWAopmCYVAkpu32xTjQ^NOkVegm@$G27a4_Xxwz>p+FvmqCh?`omiz zg>Ov&BbO4m_I|@t;W#(|m`^SSioZYr0U(-M1pvJK@i#n+<{T~!8czfc2woJYF#l2ih~6&yWNJ)BQ2$`}NIjg1wgPS22w%^{tM`wkU>0TM{VShw}uZoP!5 zp((R7ory~$=z3-O8U}p}0Py0)9%|MJYSxKk^6_F12oQs6Ae*fo%vMj`3=+X%A##)T|TaVso}V z&24RB3GxI;?3k^duPaC~Fp5tqNm^k|g8T6PBYyh%GVmo1{g@+hjX`x%R_mK8obyO? zTLS_OV{sFx^J`E z6qlB6i_L0NY*w40KS|GJi8{_xYg7Af;mJQJKi-l9!{Ol}5{X2pe;m$DH8B!RtvaR_ z8o6kF(uDq1#VZ8De4u}`@)WVJ5LwK5R2ZqmjjCqEAX&f(7Dl25csbC_Bw{+!i%@e{WLM< zkTZvh9Dh2)hktRgJ^LO0T;6Q_&2)V4I6)i?j2#unYEH^qX>FHb>Yh^?Ql8I40jXDfz2mT2q|=p8UBx zrn#K?xGvP2PsUsO=A(Be8zfZ22tTXNoslpja`EmZYg5*@)UZBg{9wh) zv}=j^)1QwHWN&c~6MFsVWO3uv_0|VJKK{(+*3NCW_my|t{Qr{o7uj;(UA)o13>eA` Mp00i_>zopr0H!q3F8}}l literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/646-white_2.png b/public/images/pokemon/icons/variant/5/646-white_2.png new file mode 100644 index 0000000000000000000000000000000000000000..e38dc504b21012706c682d8ac6c08d239108c19f GIT binary patch literal 1170 zcmV;D1a13?P)X00001b5ch_0Itp) z=>Px(GD$>1R9J<*mrrQhRvgDa_O?T42%(pb4vd6d2Z}PtOhW7Bkc;Uc41y_?oU%eO zI0>bv?jLKL4z`iQ23^`fE?rNhU_!uT7hiI46KF7nScgP7NXco29zxhKv@G61doNFx z;@D2o-$i=TdwL&zfBz(C(=<)1x4Y&f7H(&s*C6jrr&;L4zcyR-h5h+gt3W?O3~2I>s3QsGuD$7Zq2uWvpfqWkBZ z1st?c2i3B2XZ@|`-mY!aYb4GL4w@*aXFZT$pY{r&_5TW zxiAP$4T(TN_f4sXF5ctilZODTE)__QrC41m&~>oIKzf=?cEYo+YVQy=bT;xiBDzj; zEXB5Ivu)b!TWh|;E?x{|xAwG5+gb~*gQ|-GKA*ft*TELA7w6=)J+lNL-K$ze*XcD9 zWU>=P4V|c=9|^Z-me?~(+HSgRjGd25_dXJH^ygl(z09J}7ne2pebT_xkB^jG5Mbo2>IJcC2MurWn zvI{pmb-T4P6J%=Z`|5{pd>{f&Kn#s%7#TKLDVj1hIxNj|UY4x&$tBhap!veO$DKje))$DTX>}2wDx{j-qDu()7c)0~_3fzfsQ`kT z-69!+AO_OYQdz)rzg=tjzgW0fl$?!x&Ibps8bVR4Tsrc3ty)`ub^F#bT^x3rX3ALQ zlB|jE1+WpM*>|4k2915V6E~mwXS&+xMb-;DtKWi-Ea*eE6Z;Q7fo($pL4RQY000hU kSV?A0O#mtY000O800000007cclK=n!07*qoM6N<$f^S+Wt^fc4 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/646-white_3.png b/public/images/pokemon/icons/variant/5/646-white_3.png new file mode 100644 index 0000000000000000000000000000000000000000..12bff95a01db22ea79090cf9869fae5b7493f84b GIT binary patch literal 508 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a?ApJLR^8g zf`URQKYz8Zs#un;yr_$|M&S%4r9(zW)7{ke<(X)$(aw72`D{zHt!sZo!IAH8IzD{( z8r!^y2dGo1B*-tA;XgWvJJ@Civ@6Wh#WBR9w|7eKq(cfkEq7fOEaiRhd;go<2QKTE zUoBat{A6~@=V1Nm>W80NJOA!;*=)^mi}U)Y_2NsfeG*fxxVu}p^hWlkV!lPiPh&qF z%nh%&W!$;u$*%mTDo{k=#bf15!m>z0;ykh-Y!wrl2 zU+}vJgfCj9>he5f=HjGnuMHX2%rrD|Qpt$=vFTuIK<$dnb4=Geyj#Q(7HLxAw- z&AF88D(?c>(lw5!2p)et#gkXB_4^l&qg=P;Rdgq{DDpcuTs*9Pa?_HDGwfC6mY+8) zYcb3!3OdsNKb()v=^ShO0pSgMZVA3pdG>gzRZrvoI| tfB^Zg>CW@diK`^vzFB`%{!7JY=D7<5()&4{$pgcm!PC{xWt~$(696ul>{I{% literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/646_2.png b/public/images/pokemon/icons/variant/5/646_2.png new file mode 100644 index 0000000000000000000000000000000000000000..064598bfd263c74f0d439f669f44074d39e3a6dc GIT binary patch literal 1174 zcmV;H1Zn$;P)X00001b5ch_0Itp) z=>Px(Hc3Q5R9J=WmrqC|R~*MbS&E<_p(qBjad|{Zc98`$R2tS)#867<$zC>K@lcRe zsf!2EBK=283+f&g0xF1yf{J)(@z7I=SdF_`D2c2HMs~xXF`(2gA}Dz1^bp=-5)&tJ z%l6RzV94an`}3La@6US!|J&=C?M*KzgfQg2uIrZT-+0|c${8cax%{D$$Cag^T;QU@ zOT|SJUDs_w2*XMVA%tOu>L2N4w6i^@Pq8^lR!|6Gy!**8v$M0fH6Jd2NVS!ss5jup z8}O5gCzu?YRw`PlSu&um>$Yce<9zn@kE*Q{R|z4EAAVjX*xF1o8dI>4^+Y z9fP$VFR6HfR6GH|!HYdgRq;5T;lqc01Y4UGq?MKJ;%~bAxHTVuf-KZmUiBS4L^d`7 zxEK1EU~4l|;dyrB+a;}g?Ig*EbZb7+u|)uaLyrlzHmh+{;dwk-lY%nNPB~6zI8U!x zmYQqTK_P^3QQ-x^UgrR^uJ>q7IbagbI6K8wRgKg6HUQ68W9s>NdJQO^#g>4@%7{7U z>N|Sq8|b<;R>IwEyrtUKmzJ^DIruXCEdY~a)7)&l#k0Bbf{<6nV15}f7h7G|ZF0iC zfi9-P^Gt>3RlMcf`qDD%OUo)WswcVuuvJwTg@Y>;lyCr<%q#X+X83jZBipOas`!bnV3RtRV27_!iOS6i@w~9TGcJN}4{*hi<-pQ~N-BR$7t%GLwNw~+wNc}8UW%)RKpP&diO9w#$!IJmyCIwH@?OT@ zRCpd%X0F^S3&x<_J5%ulzYR75uoKpl|r{W0(H@qh1tEKeV$(9$>L8$9t{#4dJLdck}tBqGNamMF|Y6Fxz_0%A%x-dd|=!O zbQ^a9-Nr&fHzJXU5eR*r(_UzY5keUEznC=4zvg*`5XM46H{Sd7dt)J?8&-e?>tNP( z80YCEE`Ny0v1z4j#YK|ybW-&*|4LI^*W7qcjgui!j#wof7V_cCSs;HN^HHpnB(dD; zt_ze8=kkZJRaNK2U@2w^_)l3nwus9gQeSiBe0shSGbfV#|8MgAckFKkk3UWxPW9;k o000hUSV?A0O#mtY000O800000007cclK=n!07*qoM6N<$f|~Rw^Z)<= literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/646_3.png b/public/images/pokemon/icons/variant/5/646_3.png new file mode 100644 index 0000000000000000000000000000000000000000..e258eb4ce91da1b50be80836af85e48629620abc GIT binary patch literal 468 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4ats1|LR^8g zf`US|uIdaWC9O5uSiRuLa z^$3&%`2{olM+FB0x}AY`n0dN5hFJ9OoqVw9umOk5-h|`{Z=U@Bzm41Xl4Rt}w5k=4 zyxq>f(R+~k^E&f`yJs7=T5_<|MQpjovw6`A@9Y=nxmU3LKi_pI@(JgmHLcrbbUG`= zsW^sTmYi`(MR>{P<|&DNOZf#1)n-amZ) z)9bs@39&^^9@A7jg!j!eDvI3@%A@5~_$Jh=zjJnOHs4zH<)T@K3gb5BK1}rq;a>cy zGSDyY?9MMdx|-gT#M*T-vI|2Nud86Gj*x4Ar?BnnYo`M@})4@$>Yv+lh-$$NZ^y zXDb(fgk??Xjy*LWEo^rf_SP{yns)wuLhfDlJMrhml?%CEq*O@A0YjI;)78&qol`;+ E0Gg)NYybcN literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/6/692_2.png b/public/images/pokemon/icons/variant/6/692_2.png new file mode 100644 index 0000000000000000000000000000000000000000..fa6cacc70ddf73ad7bae22dc7b6c3a8070bedbdc GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a-;)%LR^8g zf`US=gzkyx=-_?9D?gO2&oY0wCivH_`Wb?HM}X3tB|(0{4F93PoN4wIpx}H@7sn8b z-nW-F@*OtdU z93`_exz>7||LRu7y?RSS!Y(HBO+m)m8`4Y9Ue%Ic@oyHx*2_O1lpdOCQ}LDis%C!7 eZT|0Ps~Gd5n6noKBmVBqqcYYwmn`L96HV8;%P>uwSQlK=h{)ysBIl<!ph>`#C2~h|`*MxO3a>_}Y~YUCZnywj?_)_f}p!uZgqxyQ+^d-?t~$mvSw& zI7((`a;^0^|JALEd-axvgk4PLn}UqBH>8)Iy{aX@;@>QWt(Sj3C_OaOrs6C2Rn7dE e+x*|pRx##9F=sCf$aMxfmBG{1&t;ucLK6T!@OG2{ literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/6/693_2.png b/public/images/pokemon/icons/variant/6/693_2.png new file mode 100644 index 0000000000000000000000000000000000000000..9d8ea4f56cd820df63fbe132947d3534bb60ef7f GIT binary patch literal 372 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a?}HSLR^8g zf`WpLxOASLHHR{vw2gSq*#@UPy;?iP6IIHqGAuvsP5gDMzVTJKAW$i9NswPK!+#{8 z%i_2eDDlYC#WBR9_wA*Ne9a0xtO5BG8Q=cJf7OG~t5dKK4MmMLHJaXIJryDz)9FU{D6sgby}e(&S(a0F%Y{SYK;JTWy85}S Ib4q9e07q?{6951J literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/6/693_3.png b/public/images/pokemon/icons/variant/6/693_3.png new file mode 100644 index 0000000000000000000000000000000000000000..6f0169bb057b558531be26bdefec276054f0091f GIT binary patch literal 374 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a?}HSLR^8g zf`Wo(luY1>STp7Lq{#JOH#IJv^=o!h>b?y#Pi&d|;nnT`|301dn{*VYl(!_vFPPy! z63}IFTnm(V;_2cTV$u8dQefX<1s;|QeT}Sd?)~2*D}CuMn^frUSa;5@Pa6!Ml>I(d z&-`P;RPT`yN-u420Wbkzpqt0rGtjd?YkAJ6!EjQ6E^(^X@a%gkwQ7mTuF=UU~| zJc*I)v&`XYzx-^z`lB7&zUaJ}ztf>`PEZur@nZtpW$t#A3QxTH^2Ls=9y)1z%Z;PU zKJPTPx-)mu^re$iVhbiN-sfe+zwC*Sb)4ccP6wv867|0<{pKPcTR816-Mo17ub;-w zs{K4?o>+5~i%$9H{NcmBokspTVouXl-)b}0^H0;Son2u4QTe+RzfU literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/2037_2.png b/public/images/pokemon/icons/variant/7/2037_2.png new file mode 100644 index 0000000000000000000000000000000000000000..528793de5c5ae1b0b0f0cfda0fffdf5d9a10959b GIT binary patch literal 618 zcmV-w0+s!VP)X00001b5ch_0Itp) z=>Px%BS}O-R9Hvtma$3$K@f%~_yTDqh=Bt^BiN-7Vkb(3NbJ%J+6W3Fh<1vC2nsd| zmO?s10tUrGP_PI#f>96-W0Bq$5ar)6VcfgK-Ma)*WSWrM-Pv#dnVs1P^|(cPoR9i| zVI$O6u&-b%1>*7e50BMqwXUT~Ajg2ae|T@QPo+jkhm;4v#Gr?;2E@jhnPXbtPX7^? zAsI{_;JNxmE6YhW-xkygP*+Y89`2T@bhAnljK}Ny2Nc`fP=Ec@Zg-Ia0mfdd%4dBn z;qeVnU0r>W4Wu<-KD|iE`MKtvIwSzu+JTxv8Uu28Ss_*tFl(2ezEGH(8+cI%;)5XE zuw41vC?Bl>^}NzUnz?>!Nqy#`sAgurqUL-r5=fB6*zA}sw4r50P!)i{Y zc%^=&lBO5N7!VG*#7HpYQgo|GrP)yhAr+M&_EXU$53K?90`0mkIgUdorxm&_JbG?0 zmmdIPE$1L2(NRFZ8pt8t85&dq`2osMN*^Y0SZk~xoDZZf=x(pk5u~A00B$-vNfU{v zXAE70I|z3g(~e>c$T=wU4c`DKjR6r_0K+7p=XC#kumWUA_KBVhV-TqxLWsO%3kqos zC=cAKH_L~Edsa|OoTaQ$Vb%o=4d{1!bwJcXlcMYw?NERma;O9dln#Dc1-%pu`)d_xQq^800000NkvXXu0mjf E0Q0^7Gynhq literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/2037_3.png b/public/images/pokemon/icons/variant/7/2037_3.png new file mode 100644 index 0000000000000000000000000000000000000000..d79fd1c23690bfdeeb629c8727a09bb8b9b6efbf GIT binary patch literal 624 zcmV-$0+0QPP)X00001b5ch_0Itp) z=>Px%DM>^@R9HvtmcL6vQ546IYePX0O@SimZb1+P(b5tv4Ph-B4*3^In_IL5O)Zfv z77lGKEg=L=)z+XQ3QdhRv=-;SckI0Tu5#|X3J%^yP9w@)`0g*2awsG`#)2IL_k`@K&6mkKnibPAyN?l>d#L`D72mZS@AC9Uj)OAYwz<` zl#kYcL_&F`hxBa6vshbTaI}f3jr%2#R)8wJwG^Q9@0mAsEDs}xQ{OhWl+F8NPyKQw zr3E7fM2FO3I2h*A@q8Id51ve1(Ljg|DoXOu8c=W0?RFcI$s}}c4xxVf8meGwKgfrB zDF-nUBLy_|KniK;yydB90OXiO literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/2038_2.png b/public/images/pokemon/icons/variant/7/2038_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d8295be1baf0c885dea40b4ff7f9de109da3616b GIT binary patch literal 798 zcmV+(1L6FMP)X00001b5ch_0Itp) z=>Px%*GWV{R9Hvtm%U3|K@`QWP5uWZf!!dI&DvTl7FH>@3PQR-1Q7ySXrZ;mZlQ&N zfCvesOOtB9K_xvg{&AyL$Gru|a-ZQg9^32=N zGv|~4fJGzppbC~sr5gaY+wI)*r=XSvq|#p9#`=!FT3M_KuJN0e3U>nJsu4Qh7)tb+eLbPC>%(sqoC^Vf zUEI%qF9Kv%o<;+5;Kss|tZc05zss}D1;d5JHSrr|hgU0)y+{n~R*}gdHDh5KT|J7@~>Ul-06}1}{i7wC? z_CUa%3dSf&h_p~x7}bjUBEaw*4WPEsmhcSuj4HQgjpu$>i2@83k|=2Z-W*{Is+Ybq(3b>Y*a{)5heYm3#(!!(_OBA60kd~7MX#J4D^i117 z_8686kg8f0yI_*Mv^g5C6CZpOK<1{;I~IqknS@q%4ztt5cp!wxtsqt8(F&78r8GFL z&V?l@fBqsLu6Dx#qn|X00001b5ch_0Itp) z=>Px%)=5M`R9HvtmoID-K@`ScRb`QFLUXsAz>p?L#I;S6stO$D1V=T#f$vJOx z=bTUe12&D&A62m3ZvO({Xf&!lPwf}IGJvrl_&t1kTe8)?e*8|6I_U&lk+&FNUpQw~dlH}x3)R4NaQ~y+Jw4SfRc3cZq?4&y+HhY23)R_d zKKf9n1MY8)O%6DON<+T6AcL3Ra=^0YU~Q@(7aJFestCw;pL2x%x;)&Nmy1gWX@CSb zpnzlqW>zFI#GOn5cV7LNR1u5lwsItU&#;FSVE&fNF6oDbn1{zh`MLU79$kJSJ5N8w zJcAl&8fHRyIFf{ZTVQ1sot}fn`=H!ndr@xQ$!&(k5Fz1zP_PKl_H{C~8x{#Z<#VwT zaH4|ol@KB=6cz?@3s%x?X?3fb0JSaH61p^>JDFIsM!(-xk^rNHgq%Xf#&G%sG73e| zun5``ebd_u{ScpI(NqHBVf!L^RDm<#I20kd`-B~ZkQSz>Sdsw!i_vll0LT0=s7cSX zkEb5PY5`K!F%>P02`O_l=4bE*GVY6J4@r*OfTZP+kw zZG;|&Yt<>*s#qJ)h8VeJJ&t4EbUk#+zr99)-Xr~l1hU&#YG|oqW5B9JpB8AQMN$Pf ci}BxTRQfK&gX-h}0000X00001b5ch_0Itp) z=>Px%q)9|UR9Hvtmpw=vK@`WIg#!uL03UmKc4EYDahHX0|>Z={41IWr^i*@Rlus=K`JcB zp^i@xTQ@s_!={r0#3I9u9@^ReEd&G{41ltkx$mz6ayel@83wQnI=^^G1>P)r_w7>r z1fU#qaP8-S0U^P=@1sOcET6#v&Ai!fHGw3TF!_tEa-<&FrG?p#$m< zObNJ|=0?N)0Q?mR7#Z!Pa3`do>R#2&DwvwlEus6Ax$@n%tHgtIq@a8du$qY9aW)V9 zDK^Rw`m7j9d^dM0F_Jgr7!=1i~wmGhI zP#>FX00001b5ch_0Itp) z=>Px%qe(r>DCjv=C+l9Tde&q8mhz!h&>=iVk5ck%EYl zHw7<>3f@AB4pLztf(PrCL=ae#V6vzYZ6dn5;6=2ImEt?_d&~~A``+xng@yWE-rITa z&3xwj`!`!e1#U$J&PV?NbM?@_rC=}^{1c1CJl(V>lK~8_Tw8iU7wc}5mykIF0uEpc z&xdI&{*1m&*B2h(`SwpV-@765!Bjz3Kb`8HDahGs0th%OaZCy8bXwIt1#GKoCCh(? z-u?7By4ejJHk}h77HKL@QX+mR1OyxmfU@b_msdb8Ck!aV0G2_cnQb%w`PFzd=SVq5kKQ>?i#pa zmm&1$OqrTBAUum7HyOD;30hdhQWml~*tI*IS(la48BysXaX&dyEx-ZDtqtSoHf#)Qa^i6WWEI~|bX00001b5ch_0Itp) z=>Px$q)9|UR9Hu2WEkXtage)@Vbp z90zh32!O=yU3tc^pzjnzLXjC*%)9hFZKD|7f$JBZWZ0IG33e3Bksulb<}~dF)4j)k zf$6Q?hO~7cw$KAPuyHmw18b8p*nu!dfgGeFC%}-o@)bP9Xr7C)IS>?uYiF1$bq0}x_I_6*esBPKmZhq`o^*h`_^3rJ8s{hrwpr~ zvl5-wa5+ppvSq_9b5|-#;4y{`825i^#aIt|6 zL1Z7J*B&5#sN`=3Cp&41(;vtlvO^GGw7?uapixXtjwDA9O+t_yhfp;aQ_}&2%o+_r iLLo#*e$a;?0Bl;k9}>C!fdBvi07*qoM6N<$f&c)`_Q>7< literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/746_2.png b/public/images/pokemon/icons/variant/7/746_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8746a45310dff6fa78aeabb7f9eba9d407c64907 GIT binary patch literal 489 zcmVX00001b5ch_0Itp) z=>Px$p-DtRR9Hvtl|4(tKp4lLsp%AbR5*iy#OtqF*baG?yIk%rzxy&?8h&%=ElX?8(L!$n$OnHPWnLj>Vuz69YpiE9vmNR!v@ zioF1YfJI|wTGSfgZhHoel|Q6w?JxMmfY^v3MQyda0*nKITywJDx_)Mr02z{toX00001b5ch_0Itp) z=>Px%n@L1LR9J=WmOV&YQ5c4wmJ%F-(1Jh2*hKj%OTEws?WrQ*tE9IBKu<@fIHZbLq!+g@r(AJ4n3|X^i5N+TD{{!l9wxQc=bA?$J?o4y*@a(>4@ajMhMAQy(S@z z&du`t=>P!1V9;i>of_t>z165W#B!*pvA&uivT?DadQp>tN-1+YHEavjXlMYL^SScp z?kySt=9dojxSTCDm!MM0EPYvGeKm7xO`OHTZXI50PD+@?R_xanx;ZaRY9?5X`K3dx zNLPQ~DW`4zDH}1UsQBpP7yye~9&P_GTv$c&??jcgg>DwNJiLE93BbcADPmzaP{~LC z?Hep^c^I3X(Pu~{1NdBdibjBUchih7?;~f|MNlba8rSdB-qXQxA*m~|XardK`3ZnK z>(4YvAqZ%a=|o)bv69T?a?NQo(rDZKQxuJWcI55t#M|3R;PGc|I~p3Guydft=|r5! z&>pd{8=ot$LvAJ8FhRgpojz9{pDWMEk(ZGp@2NbqA{KV*{45#)9qJD+zBwl7C-U>_?$*5rMCWF8@dz34 z5E$NKH(m9r(rm-ijzprgB32n2&c#@h=3L^ceYgNca=6ZlIG3OfgkhV0=l zXG?VTSBN{ki)(r;NSgu9RKVJBCFFyXo2)H#+lav>zGkd_(WzZCU)U|Q@W1f~y%#sM Tq+&1{00000NkvXXu0mjfYe8DG literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/780_3.png b/public/images/pokemon/icons/variant/7/780_3.png new file mode 100644 index 0000000000000000000000000000000000000000..6d98c750e8ea074b93f6e534e25fdfa8f64a5d84 GIT binary patch literal 720 zcmV;>0x$iEP)X00001b5ch_0Itp) z=>Px%ib+I4R9J=WmOW@%Q5462ElMC1x>%wRAJ^jGpth9^zA=M~5Gt02lCgyl(oS7m z90MUsr#48JE+s?g5D+pXYeA>9Bo41MR55{A>JmDI1ngkW&C?k3{OaT%gm-=C-t&9+ zeB29TjWyO-Bh{TzEUJ`h$aAGq8OX=b0hLmXWNKNDx3|^@f*dMfJDg|`NY}trU36Uj z&2(T&kNXMz&~~s>Xt#Gi^8UkjJvJ8R_513^rX$F^g8<2|{hfp~nONk_>&F1ZVzCw* zV_}|7bKBK(h-FdP4J%(jDQD2-t(v<6Dy16HN6(lJOtHPSt}D@N#ChTV1VHxbJq;;MIBiB6Z8Eit*NAIJf!PRw*$Ck;&$Vr6&g8UwtjF0*j)RK{>Y*UDYEg&$ zrb6lq5Sm|Xf38)FtnSRPx-)Yv&+Mv)f;vCFMqG!wG+B2H=qLxJ8f(>}&aG@F$I99g z$;2XX)fc63?CnGfLjDsuIZYh(K>;iOxLWJgOOs?`Q5TQEcwBIBF@f*W&KLI6zF#M$ zBhL2=j&jh^Su6mtSd6bf{{S%g_o&4|I-PDn6As|Ce09wHxLQd#thkxBdabw=OV^1KcG50000X00001b5ch_0Itp) z=>Px%R!KxbR9J=Wmp@1wQ5?rVseu;cplC8g9bUPBb;(qfqqU1JrI7vuhcCc9E_EqFLf=s9pcWwn>LAzYotMO>ytuX%cr?{l!b za=`X-p5xVdC#*_W?hn%+k2Qr9LfF0If}=I*IR||e34obNa^v2lV^@tRrJXzgcW*v| zcA-=H5DOvfMA~v72l{&W_Tw|x-#>GF4oA$Ea60l`#U~5v09<~2i_w>_C=TBS z;Nk3>hVTj@Y&V?W-2;srRJ(Yd_DcI4tx3mLz9$Ro9FCan2UL&%z2ky@SHA6)_MLY% zUd|RUGf5W5QVgZ0wA!F{-&CN3#wl=?e}6uG#mpofxN^2Y)re~MXzgCC7F^j_Vr65A z$d_^roRXPI(p@?5+&KaRRFLt+WW%^Rw9DB7i({#aETJD_I6Jrj2Kssc`1$KM+sk=| zQd0n^-vO;q2Xfu28c}vDT@I)!2q|T#YD6zIw>F@LicA;E2#0pN? zgT^Vlm9B>G7Tqci?0R1N%@X|8KM<+b_P;qga_cW!*$(d@!G=5l0000X00001b5ch_0Itp) z=>Px%MM*?KR9J=Wmp^C|aTLctCx%X0q{~4`-%tnv2N6Q)a3Z87V7Gus771dC;uZoW ztBVNIsX~dJvIJ>|E>#4FHW@kyr9&YEGW?R|mTsLookRUyE{TcvClSGXm%I17cfa4~ z-h0142XoCe*F+gXoJGU|P)ZqI+uJs6-Sz7zBF@8aA8w6o*#U6vUv0C1^wr@2+ytFx z%Ttf!ooRM93;9klz^lXq0QPzp1NVLvre;G$P{Vn3n%y0N7>0`#id0+Qi4}@t{XzjM zrHu1z`Hy}@t3uJLj2-;r_OpTO)Bv@H)2Z##>@FoM55TA9yRqqe^ZxU|)sF(NgVzZ4 z);@c^3pcG=n~5~Z<(09JBH}zsJf+b)@Lhv}CJ8{v%9BsMbnQ5b!G&6(EFwaT`<>xe*GQyeo(UVF5FJDP8=0_kB+pli-_Z$!B@8JLILjD7zHxY zVL>TnY~D|ew0ptQ)l8HjqDSx=0btQI0l2bl>aBgYQtJTd=Rl|^PUW~2M{#4HxuAMN zD5Z=zDpKE}0rlxbODSb&$YGy*g^kcP7&*lnPTLFS8aMXY$YMRKe-_^o5hvF^baL%O l$M0G1uS-P!UAX^NKLI0X4S0i_Jx%}s002ovPDHLkV1jQJG64Vp literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/783_2.png b/public/images/pokemon/icons/variant/7/783_2.png new file mode 100644 index 0000000000000000000000000000000000000000..1e686e9501711f1d6d3ad8fe6f8e59f9abf6bf61 GIT binary patch literal 758 zcmVX00001b5ch_0Itp) z=>Px%ut`KgR9J=Wn6XP6Q5?rVX)1+4pe~|A!tZQ@CM^U48gwZLLM8`6DA+;i*gv65 z9h_R6Ds&XlDU*WWVh1ZqP^2zNC14)OpqmsyOM|=)@m()5CAqtVE`FE0%X@eE!{>)q+mj)&UQFBK78SX*v77Ju{Z|2rrmwsX7FqxN|> z62)_p#Nrl*OAEx}766A!3-*`+bvo&UcjNFQFK|k!z}R}uh67kEo)bz(5fME&ldPLB zB6=u%%fW1#q3|tkoc080G`G2LA1euq{%9|QGfB>}C-+=hnHsM zlcFE!**@kd7$W?S`Ncx1&h@SVHVfm|j~i&MdGY#HZ4Q5nc5O+Z3v0`+v)pxv8{w*% z6abl>Pc83tCQ`fdwFY~(kL~l{+uvHw|L|?@iR7wTTvL^sk61DYoQNHA&d})XG zI#<3|VnXStYdBAUPRRafFBj!Y03!Jkk$j0S)n83ZiF2+SdCp>`RDdixl#UX~m#8Ex zcAnQlcy#uY%XW*Rj;vTrzZW%b! z-kflz*P3<*wG#9`HsE^`+g6Ah;Tp$6=_nOynOwR1JOZxUS~Gb{lE%X00001b5ch_0Itp) z=>Px%ph-kQR9J=Wm@#YHKorOSZquPu^-^#Irtq8^L%{W544FEmNRX)n_bb$xP6a{f zkhw#hp^y-gPTidj9YS*CBZNRrz}R)-gEruFOa)#HuY-KDq`26UY{-y5m^({%=bzrw zd+*M`o$fSQM8rhI^H_T!&SV8uJgPYtOpB$IiTGF}MP7`EcyZH0I-sPc5y^s5%EYN@xo`l`-)^9kGC)LJE>wKuiHMU+ z28u^DB$o_?c~2v|7yvp|;kG#&AU%U}p@Mp2_lA|SJBF{FRtv@p`2KU>SgLleUyH0n_5W=5gpi3hm+`oS|g^0Il=E z#JS!;npUyiL1A~@{+D;3CXRpc^>66k2n{HuOw=2@0Dzo5yw>YN_PRs&0w;gOjTBQ# zg$s_zfL=(_Gmt&UifzsL{CZy)n@YT6=MLzFRB$=lNg?UH4sJJ5E>zrYSSe*hf&+m2 zQ32I%=IX~4t}g`iZ&d)m&(+T`i)#RY-;bW)`GaTfoS^HcQRp$0v--E; Y9}D44#U7k}SO5S307*qoM6N<$f;4enaR2}S literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/784_2.png b/public/images/pokemon/icons/variant/7/784_2.png new file mode 100644 index 0000000000000000000000000000000000000000..5f9217358397da75823f654864ceaf7ceb82d61a GIT binary patch literal 1013 zcmVX00001b5ch_0Itp) z=>Px&uSrBfR9J=Wn7?ZqXBfvnDjqz97lWGX;gLqmn5?c?6bUnZ^{gmMjAdedU{KV|G$-pz zkxE?GO%=flf(*IHyLd|^@*63o_suWQ0eJcLh{q4_n&*7I1@IB%K_rt>N>9y9BL+jC z^&qg*e&n99d=N0;0P^(~C+kbpvVwfQMRmpEs!!>6dpU!enKs~5Poa7$a!(?F+9Zdi zozVDUX@`5|ry&M6x?zQSZ*yx6=lBef76w=?E2w2ftlqI1)ZoB3u?7}*u}<5e@Xj&d zPS%&qnvJfa_~-vHvG$#Oy@kD;;jpyB`zI9u`ukP#^;XE_wX6s!?6e(<|N3*P=U+m* z#YWd>G0wyz1&Nf>+uqwW??07~Li5h?nPDVfZ&Aw%<`--eEJ4N96$`+yeX_npzTQF% zhLH@89K{;svr>cE%q;^>#d82ETsGg#^YSUb`5oy88w@0S@ZSQSH`jnK? zn|+WSRc*3FtrY-}vrs){SZuD^Ce^%t^}SjD?7PJ#YLKtDLg4g#d2tTl8aR;_>}75PezzkMf`btl41yDB5n{k}CutGN zjXF{5J*uZdOiql!Yv8WTk+Tq7mM<-#e(|)A0K;TbN!Bb}F_8wQnbnm+=R)lYuIr`> zy9cKGPV%93BS3wy7!3V^++{)6iCec#!Lj)Tn@-z7eM~X>yr@q6Q<6A}gZ`%rzwTUu zZT#bhcR4KWP?@^m#org9WIgdHjyhC-XXxi(G7h$0H=Qw2fS*$6x^9XF9$S7eynj+b j058S__St08e;fV-7_%^!+dqK}00000NkvXXu0mjfmI>{# literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/784_3.png b/public/images/pokemon/icons/variant/7/784_3.png new file mode 100644 index 0000000000000000000000000000000000000000..077a6253a19ed26a07867f21dccf9a6c13bd9f10 GIT binary patch literal 1016 zcmVX00001b5ch_0Itp) z=>Px&vPnciR9J=Wmp@1wQ5?s=DH%c_j!8HA^vz zo1KLALYGVTE+QB~s3Hd~Aw%6PMN>*R%RLIQF^gb8973-{c+b0dXYW$`XYe;A@7=xM z=f1x`?>*q!uFczs$RZ-^Uvsz`5m}EK73)!>@<$=VgSVPC7 zE32zWWs>O5ZlOE7%*G$7P_-r0xn%E zh-XgcD>zzE2M;mN9YfY2kB&o`n8ehBVF1AD!8Qz8bA&uvRvZqS^%fG(cLDT53Y@3K z>3jvzvf>$HUqwPhR%!Q>_+OoS;h3-O?+8T0%VMZIuV9VV?{VI+a|(md4$*Ukm3>+yBlcMTL6I4 z?kCrrA|mTy`mtZP!5TGp0Q5p+woRd8cr7nl&C=%$@%+NQyN*2MaP|+q%mN)2h{)Qi zf5GDT)AI$^^5XZ8VjemD7)v8FSUuRr-0(DFAP~W!+P9qbZ&Q~t)FS}I1ez^X*J3~2O=zRO)W%Vglku|oiS!3&(7`NZ_8ehBCX!5=_qP}#@2fYFMZZmFsC>B(qCf~vi;XG|$w#HvK mu3+P9*WzmZcNhDshWZJ)S3Hg``9moH0000Px$k4Z#9R9Hvtn6XL&K@f%~*yuZ0MvS1C6CcFJ&Q7cp!RN3Ljg_L6osEUyONgWp zOwh*=w2S;J|FK!lOIY14m}nKiTa_ff74m{~LXYry7gt|XY*TxNd&t-RDM3Vze+00000 NNkvXXu0mjf0040z(OUoj literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/8/871_2.png b/public/images/pokemon/icons/variant/8/871_2.png new file mode 100644 index 0000000000000000000000000000000000000000..bfefb010219cef18084f42ec879cf851b55310ef GIT binary patch literal 474 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

      Mt%cTwC&`S3r_%9OT-Vc=)ebHHmQrq@z>E)) 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 C2IkuU literal 1602 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

      OGhsclm$hi~8H+U^2rROB2`1Rr=TEV(UzNJ2v zXEqI=BN#zcpg6WX$#gErd|yeM3rPSLG3@O4)Q^u*Attx**9(wBVGdLkorqqvuZ|m$ z2LvBmd@nIUlP4tOdOuJaS>D(ym1D>}@~|-@|^^ z3lvAA`f3)6KB%6ZPnsKvRYsUWH9zILG>Rn!*!=1*!AJR~LhtUqDrE@g9=0@dw_E6jW} zdi+}5+gOh^KjksBwX`a4;WYUgs(h!*(UQi+yvj`4V;_>7bIDvI--WlL}P+voXswhfeLs2CMRs>xhTas&feRfLo9 z)7zSZ07i1v{5FLQo8FP;s^Ht>J}-%ZNh<*;kGLm(Gp5#!+HfzgmVmIXXl~2*Zn{y} z&S9!;C^I?mj~hr(>VOU`;JXibEDU|gz31jiG<<67&v-CiQT}>i4)t38@lUbhON;4t0k}fENiz6)t_nQEgOv zo@D)8LIVjGLM6K8Vv_EVOW0B+0;zwYAH6=9HfJgVi^zNGsDSn)zj+yH;A{lGCz+VH z%Be&I`F8A8yEMiK7y7Da33mvMXSnI-FoZ`d)Vm;cb_aEbux*yH4Kmr^QO2WS7??(xMG@CcLR~8SF`EQ6 zewbb03LC|7M}=5LJCE+gQneYM=gT%~Cd|7z)L^NJ>?v3b!@(%#PlYjFpC{n}eNf)xu*a!iG)chSo;5!>V+WKx89XvrgcJ0)Hb*@4OE5mxK}9pWqg=P*Q{0NRg6 z9`CmjiAQF|FGZeJS+xkeP185}kBx&IgrklgR5r;R{zx$k5Y7!IJ1$Aup`9D_2Y0|?|YkzfpP*V3>gS$iOkj~%EpkdgF$2b4bbZex* zVXY2HDRrudQ)UR&Q+Po8XM;w`?*ca)v<~~o-f+mWcH~d(d<_^h(KhjKnNN_Spuq3k zFg&KjV%*Za2!kElts_8b0jtV!B{959;-yRNeR=-Ux z_poKPL3_G8I;(pK8HkTT(btPYVsCeieqNa3ZF%+!Z)GT|yw*ZP5=nBVw^kQCsf%-? z^y9*>+TQ^?57Q$2@R~>(pWufINBw7uPm=XzByS;dYCD}lkS6i?8-aXBi3*eu%vuXO zyr`HLP0~jRfZWg|X+RCxf3pr(@ihP0Rr3I|`h^dl_? zXA0{Pw|xaBv?u=4Wk%KZK6t4nL_pow2gPS8(7(uIpkw5f zw4d#Y6{Jz0)I&2>;}n}WF`heQocT1?ge9IkZyzZ!U?YR!S3&fJkWwTGdN+gtv%deh zwEDg=PxIX}#WY@U_4AD%(Q=nRS#X46d9EYBF`UZQ(n4YyYTbQ&6E;iJS1( z^dEfIbs01_-HwLzl&%DTuXv`GQ&^GsaMmxXJ9^uGkjCb$rQn_C%DHl5Ja{gl=Sn&p z9LObpcao)Z(`ql-^J;tnF>kNls8Zp-%#ShmYt~UhBAA#8;$QS=?<>_Xcr_o8U4~~V z(m#;D%3kpTzd8R;J*TZfgPQ$oUI*mMl+bL#IV92WAA%g)ShoF*29$d7d&`73n>aWJ zXSe=`KS*otd-rwGJ|xR{&}c1M;@hu}s&Mf(k%Duy5TsYaFXD|BM|^9!iA)_8#EuBN zCrbPe@YZZ5#4Z>nn(A)5j}-#@-pA#hi={m+DUs*VxU3oShD!$heY{5cq7zHPcbZkg z=KCGUULtB~biVkF$cTs<*<15{K8m(6*t4;>=VkCF9D6iF>qeaxA*iu+;VKQ+>;8IR zV<;ZlltmSci3lsLKJY_MK0a3J(Wh^8Q|QU~NJqI#bw)y-{Ys2LyC~!gn7l(La>(0W z2AOW;J?N@>+Dd&oDx%Wo&(ezFfRODxFp38si(YW`g|vmWK^Vf=r6PX%1)+WI+I?t| z?0*FYwW6{R+0~)LjBWUAJu)7uPBembaAK9W3{v|qvAPsz=~d6Vj#5(hyP;zv(b1s= zoj+_1j(2MUbhE4f1TBdi`yjpqKme7~L5zKQUFr`4ZXgl2BF%D`ar$|^{Nf{up{tqr zM~Bb!+#rkPMvlB*;FGD4ow-H*GB5-Gz17HWu=)3$d2N}5lRN=-crb2~^e`FRa@3QLx)JDEv2=XDTHBl=t{9_dH)FA|^Xlzm}AVQq=t@R{w8W4b==auNC|3A?ZrKDosyA6LMXE=E z>*GS`W_xfY|5Ct-1{9P|5OpR;&DjK56wgOrCy@3q*`B($U-ncff@IQXRLpu?$7eW7 zgHecgECcE-SRYYhP%H|u{$_bbVk)aQ_)6*0dQRf#c%pfo5%GC>NP-V%J>!ij)ESc^ z39TNpd!Y{4^F4t6?)}MAVF*k_ll0}}R=e4{%k|9HcYoNrbWIev6s;v{{a^UUqmfUo zlugpf*h>&aPA@kZkw^NDBL<+Hg4{5ND~Z)Icq6kFU{K8Y7YUY%*L6DLjXKO`^4&S> z#)q2GQ8P8M2-YB8-FmSUYirvyc_C`WmKWTB#c)W~EAX(FP~7+Vps6RY^1|#xXy1X6}nmq9BnGt=RrMepQwO*tYuVT|FES@I+oC+!@H9dM%?;uetHTd$! zD~pM)o4~3w(R$>&KnZV}!2ms$6#EbRDynhTYB}#b`fs0C`}TYFJf>9=AX~h1NEc(O zzJjp?wLTpF*t8D7_ifeqLv(DBTwNaN%QKNw2HU7+sUF?ZAk~|`m;bJD$4$+1GHhmd zCI16Pl{uUN?H8(FzOjzg;8!6ry>tv6u=_)1Dd@PmIrVe>{RV(}YPO#QyZT()K&3Y_ zXeLfaaUZzA{YKSp+iwm3?dR-BfGh(Hx=Vx4VK#?55;7S};kt%KCj$4Nf8F9!u2 zH=^d|bj&5RL&+M09d1tc4^~X-VM0oZW=-M4ie8a% zjwgzR!E)0It_9-lI8RNY6dM9Y)>J5{h<#)sn||G_`Bri9i0A_i?UQ)MksP`CwAg*E zS47uS#YmqInhTVSyyXo%ZR&(BT%_$TIy)Rxkql`da>oD7X^qQ1x`X^qS=^I~_jm5< zc^(ZYR)4%=4VFKax8g8wg$^78{H&cguaeR~qraLF8E5jf>EAcxf0$DMZkfBlFeIKf zAhXk}-VMcrbyMkY`$2rE^+5!T>BEY}5@1h7r_0TG)3W2T*ta&iqm=)r>($R-f~(^v zFRAzpPdGwml7}{C-Rhv9*UL5h?T8t6*rbqIWxnNUwgg=Bl-syMfqIag@@{VIROYg@Cq(KQ_g1E z37{9|b+ed+n4{#W0}`F01QcJd}^WUKgB8pre}Z-ieUABrKy2z&eaZ(e^2AMbZvjvDKd zpRCC{EY-j35g{2E1yrn#f?V&|(pLR`$S-^D*%b#eq|MdsZ3={|qpac8vsB-4r(QGm zgtLK!CeDg~MxOku9p+E8G2o?7x*?o_ciBDXDbSUu^OT3=2a1>HT8&f)SL^RNjhOYv z`spF@QH0?^fS@ zA6&+5ZKK^)_J3Re$mr>4d`r`^nFjhTUf^ z(T_xUXpJM$$_^>>aX52#wexcieDo%tOH5=C;<89I#6l&1w88SP#U>553Bwo+Udb2) zHLlHna$Q|QUR0?Jxr2BKV`tj-@hG&)e@h(s*$c za1q)tiF)hR9|2{Q8%P)`W8%v9f0cdMh*N$yi;l;{Lc@|A;Uw|i50kB7@w>jX{sFzp z^7T?Tn$m!OA2?-1e`IvUrqbLb#X$X&<`RsKj->P@`F8^fR~n3YTN1$ASwnOJ^P!di z{L_9`4HAug3VC$_yyHw2yzG)A)D#dw11?-o7Tz@4utF{lzb@aALre$HYeu!2>E33R zD_)gzDE9mTu=s_WA^bf9F|u;exdrL_tHgrumE@3Ws~f#7?zGedA~UlT*vEM8a@@>M z;~I<#6nd$yuv!`Yxtb?cXW|Ly=Z23U>FxPbKjYE~m^~&PZ$m(U`70Iki8COzh39wo zwFJ3l(4GS8@SdE#gg4zfgWMurIgPyBCzU69rbpD{c0;4C@ze`33&lQ7uS6RiKHd0i zx83l6Ef79S<~gmm*g3Grg%55w1rdVv9i5%rnt$UCYQA}zRy9(y-sn`C?*+ujo(~wT zTphJ`k{v&ua?xg4tvX1B4)e$)f_YQCQq)K*JHw;LVLSgRba4-bbZpHp|8)2<0^D)7 z0>(Y?f1Hn?fAz`(h$n{Q&!=tEi&J~xDXcQL=-+tvuKM0K1xztijARZgUe!>RlT}lK zU_k|Cpeh=9PU#%BLuZni5(!4+S1qR=T zoU5))`rX$Ep7G1%=no|1DE3GO(te})o_LZ}_(G$SMw&uzhp=T@o677kO(fmVc}AXX zUoQd7if<6*tpIJIj|pDO_sp7l3o#h^{v?=E8CJ9%^#2=7c&2s!b^>qpZ$nQXK9RK! zYm@rkJNBsf{S%#pOKS#5{0Rb+`Lgp`_GoXChhg_s-Fr^gJ6$b;DOKCkOM zWHwWL!8iM$g+2^%-4ycW@<(ikj_fe3_Zb(NcLX6eh^DxvHsJ)kFA44AHSBkWTN|w7 zPgH6GEB$((GkA^j|GkEC0*;=H_OT`8`{ilGFq7D@il=2UIYfHkl~dx01&bz^I;rA* z-;1JvBE-Z!BYwxkk}L-I;X0q)K4<4H3TCm#L+|nP8V;x#sdmdhiF!`=og8N*F-+Cz4&#mcEal zZU?H8u_&-;c1KL=K9=1X+zX3O$%sEqZiA5}K@6xIKOFdK1{EaHq*6CE)bRTf#I`1HN<56d$rP3@?N zKOXAk9P_n-*r2^vtl%GDNccMIpm~|4RV0+*=3;cSsqbhx>Zo~qIbL~iQbbWSHv4Es z)iDCkTKj@V$1L=xV>5vTXobsbrWkH zd}R%zC^T6l)$>($w{>G7Q(i5U~EjT8#;bQA-=&F4LEn{*8RYr`(jTO;kC2_LLcUH4XWA?q7Z zu+w?~H;?4uuVXiOA3Rdxj`~8>Vft%VoXMM5!&54DCf4fR{L-EHN>Cv|5T)|SsTBXu zJF>vw>$?dETG_!JDHoTx)QsvYo$!RrWXGNED11M0obzuX126!q75Cv$?fi^!m~MH9 z-CCSUIU(lJjNgll&eMtx0dO0#P{A@{KE#q(k(Asl7_ zBwMJNaF0|5O_r#SZiX4}nFZK>!yEnrD-zjpPoBUE6HD5+xfX9Ye&Aa6OX6DFEWBrAuAx|gA_^Yhc}^T z!IpLPuH=VMkVjNzQWP1=Zqo6JLu8V;8VywIg_2H!zA#k%fw8b~u8UpG z6#xb+iGQ%%Xem1&-@ZRkWn*3E7UTTGND?Y%&6x5um83XYmDWZ^%BRXeTBmU~yR@ZP zdoDYWvvcj2eJvON$OA zK*F~_=@LnYe1!uNOOJK^wGbAQsY8X|l-Xdli=cwOjm6@%NwDb7uaukG2 zKH|-%esK%-Rv?FxIMn>&*D~tt``T~#V87c>eaFymGSGL_j9E}x(C-o{lBpoD9d^iX z^7QdgEOVtw`vL-;3&!TtR*iJaE0fb*D0>nzMQ-WpY`!YPgvGeUBS?GFuY?VI!7%Ik0W65?t75_&~BN2K$Ebs=#VmHQ{Cc8T9$&+sF zXUt-y{p`THA0;aduJTMx8UB!-H%W%kCOK7oM@XH77i=yx@NwHQ-Jwmv1c8YcU0T`~1*EVN_IT8Jgf zSc60MIh3-8fW*eXmz!iN^JpnJg`!V_E3d~1<+Y*a6o$hF8ms0DH|?eB3sR>)bsmZ? z7WBYk!ex{CL9P!+m9Vkl^foBTB_L;)Q-)HqJFHlFw~49L@D8s^{a5MW-!OT@qc&>J zSFTiBLc(m)N*kZS_RO^%$xg~n4Ld4f#~as%W>*tTyWBJPTd2UcJJifR zraV)qBY%yhym@Dfx-wiSeJUzsASCn4={Kv#`N5G-Tq~$QoS6^L>RRURXK1{AJx{kT z7r)7m%a#g{TVW_MVp>q1c$!Gx?H<8#bqEiG2!0Yu&5dMAl|2CL@5L+i*YA@3v&K0! z%5bU|f*R-NT=7z@{6agfaetsO{N8!MXL(~r+`bM*&CIsn_tJ$jl#5-M4-cy+sH&Ux znY3a*J~TK;JrzAv1RekF)Igvf;#|k|#t9ywV%*B4v_F|@LvCV2Ez)Ed`H843>#G~B&@-Y?2PLsmZ#^(w*;x15gDU6w9dpWtil z)`5M<#$6ivd*(>FmcbE&pC2iRNI-usa((HT_6U_bv|?uFSFLkWyr7^VU!+*L-=4u2 z=)g2|HYAl|Z{3nt6)6||jTy>Wiu)YlK!FfxP2x0(o!uk*R z;;_hC5txg!c}=2H(U_&*tXEWok;&gO`O;RPeE|Djh>*_w!NeD=D#ED&Z+ttZ&q@Ex zffhtZr?C1-qe_p_;@s%Bl}+{6DmGCV>0iJpS(0tS=HXSNB7b(_mJ+=)3k>T=$`g#= zjxo>6lHOip9&}2xr@k6FA3@Lt?^`b?VAN7C9!Y?_op!i=yl>Cn_X;WoxoF7fVWEh(doz5rhj8v z&R%L2t4rt+l?Goa2xz@JCVj7k^y?bjjYbxDttiHD`};%Ez&67aOvZzLl`Ih#4BUe(AXz1tLumjKL)64O8j9%fe>nLx2uOX?pEhC0^DlebXDHH3ONZ zZJ9X;Y$Qp4h;AA?I&U9)qE--1_TSjM<#!&GQK1gSZl8ZvMg_(#uh>7D<@w!nJFO6~dtECpJ5=k&y#zGskElStWE*+n3Z}z; zv+BsN0=EVTlTj*#T2%xn3!X$~XT{R)Xd&*Fpj zg?S|hca`LYtRa#c>UWdOix6BAN!PiQj0dDCIyTCZ;d*twK~<|?V3fI#BNW}5E6a;O z4;Q&DIX$c1XJ+j57{UwVqCB~=mMwaN6*+9-($f0+5~=*3CEYp85fEY8Y3_jxOV z)|Lckd?H^qdwyR$IvcLU41sV#q@YPdZ7O{ezBFn_5-pPKg7Q>21@7W7v%|mIzNP1} zs3J`=>iCEmcWo2W7y#Xi^`VW#V6=QF6_8^Mgwm|hma}7X#^sHwBD;S2L$_piQS(!( zVo&(*zN!81cNnD{E{<7rq#~2hj&>RK1ibMzjk#M9%@op?loa}<^U?@Wm(SHj+39TK zdZ@dLdGPGrAD-AnP<1RIgvzVV=2Wn!xeoA4om2OslDW7r)#JSoRT&FTGD`}kCSTl7 zg_h+J*iQ|3ruu%E=>9b|<8+)%p#8H4U-p`peLHpy{8Z8yK@sj(Oz?K zsO#;H&xu48h=qY{43d%2Y7!Y-3b=R_F;1er{3J-2y}TF_ecEY{LR{Ljl_QJ^M}>$+ zPYyo)A322Y*_8fz5Pf_V&d}_sV+uvS5l=eWM1S7Y>!B>)cRFgux zj%R52ATf_Q^@OpyFCaYaAolq-8xofpN^tJohTQjcjMsmqn~y&{o=_eCSx4LL4?b>F z+v<1sEJFHjS-qix{B$4x^~d{I8CWyF_9v5nb39p%N6?|n$zwqZj;{t4>LZW``H}%> zK0dWPcGiPIoSHn6-NMT#8;XWgPpY(CcgGaUw3^tkw*rvl1=o`odoA&f+o_pvY|j|W zmg`=qAw7|MZh=e*`7NYb!$~L1>{4y0WvWS#hN?m3VDo4ZoXmh?*O52@R+KOYfdH2} z+Nno)sZ{*eFNPO6lmOC3+Q&wh*wJ=|1MIpT(HXmcmu3ijI?#81;6iimB(za7BU#Bb zt7D%N+85B2>Q*B3ZcL;en9sV8-d}x*d8C1KSp4L^Tybmig|(VZ_k2Qc zA;o%l(LlkNqfT6nY9Y;#f}^}Lk7Aq2n&ocXjt(d%c%f6JtJ%m6%`mhvnE6yHp|vGC z@gP$SNIt?GZvuVimnXgJ@xC?Va3y2V!W%Xkmn()iJ7ltTTZA|svK?Be;!)8rvZw2~ z3(oNB?Di5|SdLV~^8MLc1-rA)p_Qf%=+7|t$Rys$uW;D=rji>1^{ zuf;V?td`iaGHtlX1uzU0!xA1|g3Sxo?bEj{6)yCy1%!QkQo8+!f71I)B_h{+t`1n7 zA4c2vC3mh0|MX)V$_Dmw9LkNvgzLl)znA$U5Br?REF0^zBY`}WqwNLZ)(^{~U^&G& z+m4t=qepAte8(5g;HJmUUCEB5FOr&JPRY&#Yb%RD`LK1l9^A`$S&N2hjN3 zJuF)+{%h41P5hFrb%G$bOpppaX*=<|Eu?uUGF2uBudEw`bV*tlmDZ!73I3LcRS=r2 zY;!0eyw!slTXerHIb$=B%{pid-XM{S2yr4*!OpTwr;p;Ch{Jx3XN~hBRAJ7VgiYy{ zepg~t)fu{w>?|LITtZg|rnKAL+O$p_KR`ht>6r0?L76{$`;RmP^1G6Jma${ z+ZQ2Yp7fFu2sH~#jM*Yz#^Ye~W9Sej_m1*>AY)!jzn~gD?uQvvrl3NwQ-UB5%l$jE zWD}Sr&`E4!)|h(ei3IhmPTNx)!cXKs_z|unR3&)50LrRaH*7iv+MX6{lH(g*T1u9D zb1$}--E-+ZyrDN(U$2_XSfnUeUWKPyLlRNb4y)my1b|XfMTRVD$wvQLyuM<6(tT`` z4F{zB;SlxyktV+#J}K6lD<3r&KO2Nnst_gl$fdZ|{}COev2Ep|y}r}^f+EnN$iX*2 zISUu~*fa}gpIY$$P)(h~4->b*Q9_UQog%D<x$Y~H)@mrK7#hq`&SB)G$8~SM=m)w=8 zZ#LdL1>-_y`Ux`npRK3%`VSTWj7f=~8vJ#tR?qA0&kej&T|N`wm%EJYX}}7MomoUY zPC>+Mzeny+g%Zk=Yn{1G4Q)2sZMu$bzoRsZcAgC+$?08&e=JMvIyD)`_tgdx>j>fT zt)^7k+i=F&XN>JkVGdi^3E$C#hJ|7hqPEAY`SV8-!-KK2c{%9tMP00|uCN`NcCGOT zUMmQQdS$OvF@?rP`to<}kIA}OlHc{R8J_UcOoZG}iWm(L%9GM_SQz@EI^v%nQe-6B3kB&*wCFYxRIqOm)kYjtEuvh)lb* zml;<#?>FYZWb=&cPgF`sbN189Fg%Ojw(Z=Y;KHDs#BBr#$MZt z`uLS}`(;Q5(8Ra;lER!xAaP}7bUL%^_$;W-?z0cpj8l>1F-E{@;2{T}dEbW);(niu|CPZ$}3U9JU2|zk@ zn!R4Q9|9~D!1n7^Ip>eoaoYzC%@7y0tNE;2;=< zc?g#jB4FbF(Pa7<^0gzR_ppUs0W7N!dU7p{a20#evi#Ork$_9-gHDT|9{RPOMAMZf z5zwEG_Mb;W^p^0i5Y@8r5IR7~+L7(G{2y5-rBMRi$q{9JTNa`gz{-y%i5DZfAPJ@? z(H{%pOI}C+oczmtk>TC9O@zs4Rfq1W+kwqAhdIG@5q!U?)0>9RA|FF=JQ*o)kY!Uj zX|=vb=4E36!vAJI&LvPpScV^&x%Q1LF(sPIqeZ$P^K60DbXF17zR3w@GD>X}45Db`6%pEbWGpikw9OJb?mUiPX+O4ku&&C@*W?o-QO`ZHV0DHX+&QNE0o0Ih z*YVb`FHM7jDa3NmE45fyz5$`)5bd4^r7C4`vC^jEd8g7NI;8RJa3N*68F@UxxRf{& zH6#>=#PWHG9{%qpHFt9z1~_qTDXQJk%kP2=$$S8BZAkyAjo$XBtSQ8*UIg(j(*v|# zKOTxik|y>l4VqQHBZS}xbgX(*@?JG#ZkO=<zamSKSLaA>)xN%bvR8w@*;;O^8T_4`-5Of@@@p(ZhGM&i8_O%vyYf2E z9Mg)|?28F(9adY@B9IViTl*pVoXyX0TBkn?lyuD@2lYIPqjWsLAr z^5$R_J{zrNOeS67N0C@(3#18^q5T*LHK;Pz=~M$sLHsA>9m)1NMz#$TFDGmb>1m~e z@a!P0hY$#mXA;DSXyua|SW~g~L+FjZG235Sb-mE)Gq7TD zap^jMt1Bef|tFan7n^-1Pt4I$i{xjaRqKP&n|8q~2NR}2(&RZh4Iqdzsw ze%J-Bp7d&$_3TY|MR{CQ(R?$$-aeVROrVEOq|DfR@B)pA=E0v$E3s#JC%2mITyiq$ z=>g;9pBVC5c*@Bs5B3640SV;2ElHK4yVKk{2Myh8 zPHgwm2_%`66UNAp($q-%>_MP-vWB0jKbDCmrTs1(96kO=3jh$~3{emKe1$rVmc+OB zU_!YE@OkKcjH<_7gJlK~hlh6VuE|B1P)qO_lv>eG_p~h*SHJsYgzRkI13gM*NX6-4 z+Ue=Fclk9k(9v6Kg9Gsw>dN0s3Upq6>;V~)x2*Fh0zJWsgJC1WedtRoOzhAoOMq+O zoSklREIlQ%o{kMt+|?|}AhWp{PmA37c9DhO*eo+H8|O&zrz5q~mBx0j*T>4i*oUgF zqpz;mSfBuaUJTlb3nPkylcX~WCu#~X9Mc}5+UE4oyBuf+ko+KaHbyoj3D zM7iX1c|gr8WFjgC{5Y>Svb$4UkqMy%kbQAXZ!bN+FJ6VCdbWMadi|WJ$V1+*+Wd>Q zNi&|@f67sMbK-&4sk4}XQeqb=Xkf*qOga!wZYH(!`I0Qs#{9(CaiGU=QT79FL=r7> zZ-xl*FIVwR{+Cm%G^HutdNRFuK^nc9)tu+ekZ5~cWeEaVY#aa5-q0hvrAK)b0m$}o z&Q`glkiu~W>?8=1v#pjlZ%hlkiPLU-#f1i=N`Rrpf$SXmQnx<}pAzk{6TYm6iVLOV zZD#zuFMn$4!qo8PUT=0+qp&8}4w-r_k{Tlu7s9i!W(dU}g*b0K-m^ni_8xCS-@cYN zrli^tj})|j`6FH@E_P)hBkhXrwxHLiNzc|j>j@}GY0o^8IU&ZTB-ei7lpDGxls#B4 ztkhXBci!3r_REBgH1-Vv_PtX%H%`CsF7vq`%3Z%n=dgC)=;1d)D z#wx0X?V8&?KaIY`jR0yXFh}KpoC+*#q`1FN=jB-ze=|cAh3Ge5zws~l+RLxSgrLrV zTmA4ZEa_#@uVTWMY{Ey=3rZRH;2M)~`5hI(@aY#hTrbs&3(K|{mIG|yNB`hm$Inw4 zV-Z?eOL+@If^`B`z~F+rTivr4UKx0h?8|kmnJqRP4L&NZbojT@z(!SdB(> zi&I>@&2=S28=dZfx$q46VND6A)4(Ma%L#!nQ9yL(|svh`f~=8^oQio^_G zZ81J7b0}+1UXrJR4qdW-1xh*Bv^x)>y;S%IK^l#R(DtQuBzGpH`mL}-zx{#~YQI6j zQ4j04?3;?7njWEsmr`*+GU99z^dtNLp!=gM3jBF45J8-04dhfl+s=xSG>K-6d1cu; z52{}X^Z0?vBVYT2$UG;Ch*B<*A?U{szvx-%$Sde%e#|p>=X&|YIPN8O`xDrodznSo z7hdh*G(R}VSqU5s*Qq?Up)ywTuMmv{y(DT+e z&JNs4lkYe-OVMIPP94<$sx9_Al%+)o8B{8cqF}iO?+PdJ3;B{4&_aT@j5j-@7+7nI z#T4Iv3mXY~EMtjLy|Yp1awoEf325}JTT1c9()j&d?FUL};V_74uQ#py%|l%+@5*5T z`JO~kNKyB#O9gSmizhlV!*uIm#2%+T1x_%Xrl(O>*`gLw(Wnog7kBZ-*_l@8{rF}A zIrtwf{zx4g)KZoD&dJ3{tNL6fe6Vh6Y~_`yVr-He>e*~}ywYB8^phSpN`w+n30q&E z7I|+TS3JiXmJW-p1zqC=O?oqoPc82golW(;HANti(!Zk<2jSam;Hui2Qk6Kd_oC7u zrEbhmN8@htN^$Ct^LNqxZ9~PT#O<(A3Md8xpurJ{DO^Jb5X00NJ04ZvGD6>dNd?~+ zZ$vCk-kWCa&>k{$gp=w$NimH^{mk~f7flJ-y|nL#A`#^g=@L09^0tb9tLw@Si2Sg4 zAo4!jiH{9zU#wC%HfKg6?Ffcu(-dZ-p{LyN++<#rrMAik|Ad-OqIbBpTMGRK+FgRo z$opoLUYZoDQnRL&X}91p3?eW)R}Qio9B8`Xg(5ilQD8q>V;uN{c?3=IDAU;L<`9V1 zu!W4}2@o;I53cQ8A5=0+kbGT=`3it+9di72fC*_$GT4K*d#^Dt$=zK=L$w#(%g*IQ zaYUWzNrA;%yG}f=NW|xHYN7?F?)u$p28Su4N)B#>#O%SU=UlU5Qt<5e2@S-gm>h@{bv4gTr(0RuSu=9H)@EFs=6)Cv0OqC3Afe$;*Gt2#JGYU(oyrl&@%w{ur@iVv^n4f zhQJPTG-ZPR!atJbuG**nR)G`A!?EN%<1|N!2;G8(*`=uKO3wKQ+oy$JZfnH$bR-); z95=f9GD746q{fLYJBvr+qelB3U%HP1S?JzF8-Bwlwbxgr6QBswb0Y0tmE8Quk9he~ zY?YGeuB~D^JY4g;tzE9D7P&q=nm{%xlTqHi zcoP3Nk^O7bY-TQuZd#kIcQkVRMB3{(owC(ia%ZHe59 zkK%XXB_x?IM%z82Tnf^ zm7isvF16&C!DOy3eja{d4%kw9Vd@%x3DHjQlRc84V5j6cc3L3fLgzo$BW}6;t)CjA>S@6ME9^uV=}Q;er2@SrX^i*Qpa7Y0!>{=?n40nP zpReTg8E~1{ka&V>^Je!=w`$=Ud$^+>^t&TeIrX;d)*9v`3ZrlA>U}0gO=|&Lo%+fSW!TTXtWcVT;^J`_e?ET(+o&lH!pe&kl5oiI6NHK zls0G9w;~&>8LwFR$3bcbQG9z0`?T7SlDh$wuLhC7&C6LJr4uR2Ln;ZtSOV`x5M_ysnGj<96UxaVy^*V+eV7SQKsLvjG( z@btolvCNo4OL8<0^sz}KSi}m{rY_)mM z=3*TBbUoV@782;be#WHD#acO90%mq#regp~@QpJgxM}2SqwuZB_TydieWmV@K7Na}rk<#rG(P*dFs)j?iYy7=@p%rY=`v=X6X z`)SU0&Lya%J3^a>$TW9;LRtHERM61ssb@hHT4ASJf+J)VDp1}T`_+T*s1hl8fyQe7 zt?Nt_9e#4h+ zPWxg8*$Z;@>e7tapU8Dz(Q-ygZX{gA>WIF@tj7~e3&4~!Czl|dSgm0~M6`k3?idN# za(eHdA++ko=#CeJ(vC9)7GrKqDtnJX-V1$AaIsvQRqL&du1GHA3l%X0CVG~z%G-M- zywPH;({)4-|GW&3@nsYgs-^v=kjV0TJuTZsfK|pj;|#^_#qla|EgZO%_JkY?Q=Z=z zn?qiHL*OxWCSt@FVVywjSW-+kUFfF?iUm$cy%Ed=n3lRG($x1)hPS*U>V(pYwF=Q5 zl+;oZCyE6adVodyyL=0Q_{7fL&)y#{-(8e=9wFLUJeBcJlXxnQjb=?#{48BlihU&% zPwz9yT%s=moJtQ5&TO z{2i*C*_uL6)(W%K%w0~RMCzYSWYpLfvDM{=eB#|Mn1bBJ*sGN|^xRT|=}V@9A&6AV z=2HKXJr#TBgQkD>RRI>8yj)4jK5&kTAGX|jvc1%JEIibu00L7DtYb0mwQzAE>^U?d zWzm9db&-NzV^E?aK)|UN0t6_9rL{urape)uB?SN~N>JSM&g`Q}l7)LRnN_;9y@Q=Q z0cz9!dioHUsI0f`8Noe9U(DzygUza~=y7+_;M)u^>tGD9J15ev$Fsb*iOzuekLA7N zb6A6^2ywtH1^FhsUfJ#TiwHCK;|;{y4oL(gq(~%kudI==_7P{K&>e0WpL2ruIz1nI z8I6^KZKdWAMq_P9bDmy)b~XoTdY^6N)U}i5{O98b@S6%HKJB?NPC>DQV>$BFNkmV! zWoeN*@Wi15h${HlYLqE^H8{*V$jAncv@2EBcqL-{T7)vY=PpgVw#2{w5_%p^S z$1C*8Rw54>E{CF=k9?o^b)TgJeQo@Q#jBM19puHp>(_LcH}_;Vcr^`1?@SOsuN-WL z+7%|zDoe!0bIwIldSB+)#~=lXSLs;vvQpQjxNNlsj_^UV{ii7{ zHm~+RjI!A-nnPpY>hpe*sGy73`$og1leb^ZJegP0I9b!&#_e(=xgD?5BY7&U<5Z6~L==bLEM*N;@c-ugmk2?9P5@mQEa-4Dx(Rvd8EsVV52*XZtwo+Ic zl`vou_*&tnM@Te(X8OO(#Se-*r0Lvw7Z5&YlMZbTqq0w(u})fY%QBm_UBRgLeA#{o zv?QG}7+JbU7>M^*9<5eM^ngkDidXd>Gds!rBSM0DepJB+hQUe$02u?Kix<=*%^1|` z7txLZHZYmX-tczTxSX(96jq9NBV|5XYj&$e(pdF*uy>zPMPLDL?pLNi4FpXTzW{ZC z>v@jMN@D&r<#+&G$SA74Gn#hQ)QFFoLdo((2%eKro0A><_FH!|?D#BKLTc?)(ZCwf zGFRJtxftILb_zPI>31-SUQS@;Ki!^Kgpx8sf}H=(pP{!1{_1z>3Gkzm>_8 z03u9&*s&-Fl^=O+8-OE?wZ8DQE$9vQO9k2XQ;4G7kClwW$o7V6%!z2Mil5q_PJT>f>9)l1d9v_*X{Fv!`Y+j?^eX=C|NUY~H8y)nxYrE^iK7~@> zkm5`J3->DT0fY(kzfWrK0DoZsnfhjRz+Pxy(AyjiT!|~dVqbr`^s)&=|vqePr7=gcaZ1 zk4wT=!o0p$A-qUDRHm&5QPx0?{FYjXFO_wNLhYwNGCrKSwjKF2S|y{9rxQ(idU;S~ z)z2D95x(A){&WJJNVsv!PH;XcQNta4^cJT5*K<`7gmlvPi{ji zrPM!&V8$i$CN-UM2DGcMUtaQi1LWpI3ECRFt|lVADgBk?7B+XOq!|P522%#`DJX+m~hRi;Gz&rp(zO@nz-8pFs9uI>&iScHG5(i17uuf%9YJNuwK-~WL89cnI2;HvliYG91) zanR%#qEj#>pP+?g_Y~a5+IAV(j*rihV5H>UWIw8w(yr7#pc&nh<`FwdoRN821qVsZ zAXCk}Ew_C>+|Y^H`tlv9j&&_)3fiAfirODt`XowABC2e77bnW^pgpmxCxpr*_q|P% z?B_rD1;6$8Lp{f%qCWn}?l^G2>&LhKfI>YUR6_BW^5O*>e{OYeBAzL-ft(8-dp}fu zUHQ}0hDc42X6ZJ1b5pJiP*#8%zVXpwhBkEq4hbB!<@5-J(0-;&sp@2o1LYY%y)b>x zt+9Pje+g%Z8FeUJXFsSTO!9aiw9PK|@{86yv(b%VeJ^<)F%-7xKfnWyth1vE(`G!- ze&dsjPISgAgs2e!8+XLbiglpx9`f+)SbIjd-fbyz^0E8K z|KsRWAq$buCRZBLPGm4Nwq#I3HW|~LUw#p)ez_R0wmx!7fN|(5zB-GXuB9qlIesgm zCTzS4PktaT1f0-%^ad~vUeah)1{4Q@OP39@s^=lNCtaCAmP2~l%rA(ZI@uWSSQ9_! zW(^N&0so}5-^0He$Qj_VP6x+~U7vf3>j&h-cGC5_W2ZQC`Sn2@3B~)2oZ$9*3yt8utCe$1C09& zZ8!B4DGQz~26_xKCO6fMum`n<-RE4d7tByu=apWsu!AH6vWSq1MTC5`Qw8vY7HQ*? z%)^tTD!Q|m^ePnV;rm_M9LZ>|x);He^^B3eBSOR3B#o+R=xTcopmYsQ^kRP~Ef2Xw zELmcF!S$$Xtd=8gbdsF0?O)=A`k#Iye}t{eLPi6O-TI3k&pH+38ozx(z8KLaHHA)2 zFQ3rc%=0kMIK4I(NfBXgeWx41koj@&Y0VF@pX;Mx^(O~oo?-gZSXN9W=CG_h6ceFNp}6Sgx$7faL6IB(!#8TJ zNx!Uc5u8ynM`jT0f=c#vXix|ff?e-jwP3$Ptg}WRuf5EF^x4s~RimcOjlf6A@$;q( z{Dc7_ij9ozRO08?D2P;YtQWFX9J5>fy8q~`_=O*EII&jnoTIu7Z&}fo)o!6} ze_a6*`JZ+E1UWS!>cMXO<1nNvWtfpY?+a7ph)GCixUIRl5izU>@a<_P`DA!vLKCU=-0Sbx9C@o?i9l4Rlr-8DXb`@lfmV!9V#IGAY5{6SMv zy58@TJNr%9QZvs*990noJ?n%I00%nWZi z&(c28EltrU80A8mVygIy3IWLn;vkj4xKMSQ9JJ4qRt{l~fxj51A!xt6-;E;)%}1&K z((AS7W7lG|2tm*qwxr;Vpf6zG zpS|}uLX^c5nom%NFQ5kL`&#H?KVLK8zLWf7Rm=#a3$TXF3ia2O=i^a&$tPk<%Ba5$ zYBALEv;#OCS3+!X4{Mm_;WZ>5v zhtl~sSXyqXwL)Uet1Chb1Zc*Q(kC0#o3U7&8@y};GTFh9- z8VcXJ4R@dH`fi{_9_|Nw-z~w@Ac*?rJB|jKE0ENES_d2;6_Qmco-~*((~Jqp`ba|! zazgwd74SJNWV30jjpow+X90k_dI&UA{fIzP3F*&IPcJZ~97*gOu6RuTJQEJ!$}VI8ICm5BE3{dqe?(D8+^BiN47ZXtVMZ3I1Nbl^n3caT zRh1zj;qG(*mGhyw$^DnF%-?cq`1pWDGMm<^$7Do)Oi_S+o7qpgRmo!%y_gc=_$1kO z(cn{7Ej^L+(PbSUm;erPs!O@X8@2rOUNAVA0Aq;7gfh~?rqk2i@!-H5Gno0 zl$qRzO;|}=eLVTRzArh#=tu)|DbdBAA5$z|>KQ^ftblm8Azd@elG0dWMLi?1SnH5g z$8&B>AEw_MPamf*1t~b68J?MpZQ))gi3+bVN8@S#q@zt^;APNytD!F6>U=&`wY1ar zZ}QM&UTxly;^(&S+MuL|t#}F#0n7hr0r-yp*|O_)FDF(p0GX`c6(5$$AIfI}|#!U8IkD_Nk$f~5HKMda}8ifmu(J1~snjvQ(f za%mQ0x?DejoH-z?%zF*@L!?LgN5KW7>qZ1_ zU*UO1i-6~EI|GTr&$b9epGwRc{3KbfEFcckcxYoq>~!a0Xx4M`0?8Q$;uN@_XmqZ5 z$mRQ1`*r=Vrt#2xVScNr`Kiyy9;BiIoJBruv|~c9x_W&s2k$<$%qT^T2FnyVb(7zs z)F~hKEfiSCkq3258Y>Wh6HUQ1EEo3E~-#e)4IRibfS=abRS?2!l zGFzSlkvFZ*`#FWQrcmAfFFw^BSgW>4CbJ^76v~AC3TC;AAya$NEHEX2{hHjFo_=$Hep2OI z#K1Qc)FMX2=O0#?)yoBUKD#Nd$k~a9<06q6y!(O&T(E4L3#WsX#u$a9gp zz4475QCizA&cN)7k;?;lL$M*hI^Y$6+OH<8Yd>ayPE*ddmENOnBTc-~9XybQtZ{wz zn>Nli59&}CFaLT$VNO{~L6DEPW!X~%fS{(16=*`R-+|Wid!z~9i9-!mSZv~7+%xYD zQNfA?Nb=i0%tKCa)5(g_M^d{u;Ze7B-Z4YnCTHWja ze5?HAp6v6`J*blpmWv{3z^z|SKghy3!uD6;X??2!7!G)_#HK%RQ!ZX^)7UJ_8(-X+ zy9`;Qx}^ZJ3V6R|hu#M$i&jI~Nbs~KFa_=t@pVbYJfv38{Bjr5Bf(wwfCoHa;``p( ztQV?956|}np&Y8>(@1G2#zp`8CeavO5ZGk+3Bk}}pYQ=;(IHG_V;`RUpyC7h&eB*C zTN0jJk_OE4|NrlvNRMG`a_)I33PUT1bwBcyl4{%3?xE+!B zY)E!6SxQ7vjJhj;siG`egTY4gk8ZPvTJ0rwWm8%y+@u7*W4UN$+|J-U!WY4@3{tZQ zh^ju%e&9U`kUG-m6-Kh~W%pjqbsF5y&1{C_{` zh)riLV~HJ*I}jZ9rXOc}@fMn84*l-?Fka15)vbXiZQQo9$*|c+{eM5GjINUSp9qNO zpOwK6H2^0S2g`DIrSRNejHepHrU}AGx-~wx%*G^BG@D`2xKoweKf{0Kz6vV%C4hN- znr=*fh4h;|tp_x9J`Pvmk6wQws2+5i=W020k7Ko2G1_DKu72L`H z9w3q>{3;vp^iWI0e4g`H7FXJYx&SP(!HOY;zA0JwB(7uyiq|&Gdw8b_W4)4m}Hh_S_~;(=QVin z1F*8=1q+joyHOd%BS3Njs&OF4K;*IxIGEpUmy|5=@oBH*ObQKK;E`^cQs16HNT!@~ z7a9-p{Ek6LJ;SC#Xj(v8x43iEtt@2RQ2}+$R_r)wcqJ_wi6j-tb{C zJq_H>+}ID~tWSgkExCY|h2Ev}KM@O>AYvgm<0JL7*3R|rIYT`a9|PhBL;G)7|Czbw zk8&*V^yKPA^7XRA?NAxG7wysq%b4vte{R>DIfHy{5X#l&K9#$+ty7}&N}v?=DcrCC zTv5P8!4d3gUuXA3*pup9*W?6bW>G@ms&k(bE@--^%RSsalZ?$)R5wnpCc+O4;_ z(Jj9$a>@tMM-w9HAv_rJE-3lFc*x<&pVEghZY3_;CO?uiF^hd?+)o#g1_hge%dnxa z5B|UAimSXQh}cb+Vgun^k|Z;b_afSKPo!Va)fm3(>O^{EI;(Qdl?H-xNLhkVNEBXF zj6oME`F7;qd~@KXH6;2??A~u(!E7-1uZew+i6-t0d-fUCpq*Aon!vSa01yO3kbDQi zINSGcpxgg_++Qu@<3}}^WT$@aro1N0G&i@s*)7Rs@I%AO; zxn(>iS!}<#-27as!O^>$Yg5aGj$ow59D;nx$18<5kf|mgGlSa~_=aWN-J*Liitlt? z_>GP8Q@E$%>;|+DMf8S9It=(h&KnRwczLG6{EvVd4fqP=j4_Kc-XI0HU%k2(v)WtB z{OmpNe}sDXUgwuYiG+`~ss^jMo-J+pJKD&KI38~B0P*d>EOaNqC~g_hw)ca}%peKP z=WzoqY0(X|r8POv&~5FA)Qlq~;1dS841h#^=sA=?s;$kc{U_22S2{xUrPtjrTT`DZ zZ05mP6?yk$gRI%XeZUZz^VKA>1~R-slR+d`R;YWT9UCc5h@Un9N85U_x7`YBEf~1O~qYd`=k9U!lRl2I2UJQups6Ji?SY z%izJrt(U<;CdQ;Y#96<$V`doJzLLWtvRk841oj#_u}~tNIFmc^gFe?JmaD;#$|6(g zD)Gt!9RxOm3dWAy9LgOKq3Qw8r*&Qw5^vMT`x-J)v1kIkqYI0fO>;a^fF%XBV3!#U z?b&TzGKuKNwTPH)m59tJGYodFglvAhIT%wyJ+>6UP$LoC_i8{g%Ih$39SEcTm{%g7uUm{bd>!|pOGukG6#|f z0U<$Oku}AhcnZ+t^%GQmD)OD7joWF2=YVl+&PGDNVdErE=S598!ec(02Ey8&icW)W zwXHjui2efucFq8^O#<1w5?3~*Ap$yd4P{(NuZ5h}Qr?qusTa<85piq-pOV_)p60wh z38vMF=dXT!&7W>@*6qS*HD&3Gq_{D<6q7Fb?2u=tg}x2GIP32A|B>~TQB_6V+J{EE zyFt2}1Hz$0I5bisDJ@;nAl(hp-5ml_(jkqs(i}j#Q@+jn-uvgf4#sc{1{~I2d#)MJ z^US#f&3Q?Ia<(35gUCsw!GA8s1CVMQCdk?MgIHh`DqZI_pg@g2Vz{pE*uvs0DJ1?p z`7)zG#&vnNC7fA~AKk_+_$4Ygt@^~u(n0%zjUm9=hi*QKsVchQ3Aw_RQ6a+7?#TWFOROnxhv3;b{g9DCxUVWr=Pn9VX>ObZ zoCU5>F~aE0Lk%n-_Ai%5Zt2O);+$1~7*+$++9@9oSEVKKLu*k1hF4XQQ{l!S?=yBN zFbgVe9ulz~{$3!UfTt{c>*$;L5=>(0wq%9z2$*eRSruLqLIK%97xuon@@!{EBqfH0 z>(t=i5*YYxB=(Rs+tem9G6?LD3aNH9MFc60Y6>%qzXEOT&v2KSlg;JD;*|XmM^L=y zr`eGWE%M4I%5qA>1f{s(%P&C?g}1xevMGUvrDV9?*rVIpV>Z`@K z$aIFZTgM?FMp<$~fUX}M3qWsMg8`BsQUuzPJ}K6bguP6po&-8B@ppyXjgq5w^Y-CJ z!C_BM*<#{BKv%-3_6<1kh58^uC8GT5aZmz?VqZqQp)j{>wF6y}K$_10*oMoqpe&G4 z<@*mhG@$&a`42PKDHt%d`0-t-&b2S}Qt8y35p6GkdS^)By1qzC8NL#}&4|Zn65^|i zWMQUa$r#rJORad4Dak7^>}^&F2hyniqVi}|Kr-<{n8oJy7y5AO87aEqF!d!!Ov1~E z{};6lFk7j4d1Q-TV@;GtJbzo7m>jiPmtaH!;Oiv{w~7D<$8mSvBMfkLUs*7yWdTWL zLTCRO61@sG4v*H#aETG9>>C_Y87dy1CD1GTQoX=d>VhGibZ~iQe|c6rtl5q#c2^X~ z&81O$?p0{B0D=+Phi^_QW!FxuKLf;;%ui~xK9z>~N?h=&DG{6Ja@@8$qgKnNW zl=aTJ#-GfqC?cF|UkkLPB@>74_oA!SV@GA<{}Y)jPz|ZGKuB?(1*YKvgTdsm`2bq> z2mL=Ffs}>`j>-WOtu&WksckbLQrA1>v&jOVq1qg_bj({HrjB&jC?y zQ|jYQ;GCUrTY61;-io}0E5h*rj|-H5`z82i32z5-ieGNK5C253g*g-F;q;2+$VT&0 z?I=u@J?q(tF{H{#pogu>t|Eg9Ft8_yA<-%yEO@Ak?-gHpTcJ4~iGO;=TZN^t^D$D| zts+O}xFht8hWMc`#ONe?g6?!yJ$(v%l0-5MEJK2a5BU#Eo!85@N1fNUwW;&nky4%B z9yiBNe=Vym-~82^)L;B81ikDElJCAjs9L+FnRoEP$)>F27+oP6v8?O)^j_KjU{lMI zkuj9V(PwcX94$)HfFiVCp5=*z(Ep3Y)3INagF?ak@);wazG25iW)%R=8|<;A z!NmRer!oDTYiY{&wjX~M(LhvBM!_l1SJo6FbxgD0yN9~ccm>}cyPm84x-E{pd~>5~c`hFUuR;$w>+Q_%3okn9h7Ai6~_0r z%Rx?;7Hdf)3FbGMFc~NowW9F{{F}`nVH@elq960Eq4$D`i#sJ1c}C*5PBm1yql`GK>SPPhq2ai zMhyqrx)ME1qV_k(2Mzf)1k5lB*qNZ@C4ZwF)B%NcGGEd2J|_@yCq7abX8f)bWBDGi z^n-7zQ?-}H@iBcWYV-1yU0N*s|Zbqv#i@4Z=^H>Xq|bE!kzeZ9hLC z2S~YQY+I_aD>xTzC6+M|f6IfQFsaxmMB^^O5P9f&Mpz=Wf0<cgYDp za#BnGxBWe~Po#g9`F@Ggv0TS!F^qyjG#IPd7M50=6483XSZ=~X=n1P2OS|`d74Gt- za+WEdue8(ZFRtwNJNNwEe@L&2e6&;K^h;yzsaKQ{p=?$@`A7BEjnLI(r{eo#R5)&r zOQe4zeD|v4=U7YfcTQIX7Q(Wyx_*olqY|u3_&K)f* z+F<;rUQM~&=MSR}hrid%L~TQ$#$8))%*8;abeti@dwFoU&ZtW+i?)R)->Td&L3uUq zjG*dZN=0Xf4NqV|oY$E(t7Fh?Q?=D)c+hc%nMvUl~ra(w0ocQ)tfOTXIqjrP5spKc*j9?r~ZSsa(NHJQAOcg;W#c6~{AQ<6Vj6M9ET+l0?dY> zw?=6)I=}aT25m8fw7kT<3?cwXy{A))k`q<%skKrb9#AmgTszzJ0@y zua9|+0wp*zM-hRHl+z0`x5(QyW$o~aIZGatjcBnZs#S1a<97sAdnwi$iPkE4#Q#KMKpNmC4TWZ<9LAlB|FDEO|BmI-`ac2jTwDt3x z#tYMG#yt-%4vX4R$TYy`%U0P3xWN z$CU_K+|Pl)kpxEZ$*Kp*A!?&&vfimDs#_Il&n(%!XPkC|w4hS_hG87^FWmOQ7edgBz+} zHiwy)eDl+}?Yf-;bpHm5#YrsTi2&l>3bo+moL}4xiqUf55+b&+#AL2^D!@$J14{|p zU3;l7*KtG1cbXAC4e1e`ZD;Z4^8Vmh)` zIPT0=)@=E#C>^F>_d+`@1}?%4lIiHkbnlD#6>}P8pqGH%rVcylkWMA{1zsPVhQ#Qq zkJ3}<_~8cUnUb5-Qb3*KgTd2t@ny+7i77RAyD`tv>Y8hHz@tpi z{=IVEW^FF?TBYaviC?tWTMzxPn>o{kxEtezxWKdf?JsT*`$D86=prIK!P;nuGvHu%1Z--PxjOT z6LSsSjS^FHh==wia3T;7bqY^EL^ju5eR8!U{ZW14fYeE0` z4LL6s2Dg5_JJ8zcRlns6Ut}L{&SBTN;+_*Y^OUx~y5w=_@+sRt&6c}idxB`_sdSB0 zHu$xe)SVUGw1fHMjI2qWb_)~AWSB2!_=PfpiUec1=#;hFtzuM+!h^{4)6}fMIIhhpq;R!Jso;+dHIGFG| zb6=$t+WX1{tc*)h10XS($N?XX=F&4odrZL(zig<-+7k&RLh~V4MS3!czHU%(>zmG1 z^1ADSP&Yd0c0j_HdI6PU|M5cgZMM~>tG_qXA2AumQnyUe7G2aqTbm$F=a4OyaGO_aO)9Zq0m4Yb$xQ1FeeX3SPa2C^4;QeIsl0k7;1(;rZ9+f z<}~WS3Geyx(dJ+1if%^diP6x@-o6P=`)=L!MzhC-rdy>Kftfdf<5~;%dtNejzg z8tGJ~VW{pyxe%;~(2)z;Mtg{W9ir6I#NIJqWZ*=RO2qj*FtIx&; z6=Q`z`N){l;XUOasYk2G1%t|hXvGf`IVS@nw#9D>X|m&f{nkd0lxob1jJ-v8hLk-L8wnnaw!8jWeeUm3>u$7T@ww}I+z+^J_Bc@ilTPb&a_Ao zp69+QIF_7@oGs=z=@Jv-Id5QWv67g%EInhvC?n!J(FZ8mok;5+X(|SBOM@_Y$M6D? zf%YPruuu;>{dYBeJF0$Rz(~p_APYxO&cVFtw!PvN^&PWAj})#z9VQrvz*0|r+X^~3 zYx!13xcTc_2Ty&Q6|WcRH1LZkAl>dW$!=Ti%_2JSH9aSSgHaWPg*~_l=B6TX4-&ok zMd0F#zr(E*N3S=SGnQI`>|8*Y(l$8DKL7PSUc{@V0bPyl@hhQhoFzLUv9 zAa`WU+u`uivRWsFWC!%JV)Wtum2kWDGH?&=&Zn<&e=EC;B}y(kL1OR`=aYKguh$e> z9xQc7oO1(>gEJb0mAl8m|EmR<8bIZ3SOT+|N;3j;m@~o84D?e3^_P|Rpj-I@?J?&F zBFMNwJKyYYq`wK&DU05uKdUcJdQ((uHv!LBq%N0%tDX|qS$n0pwx-HD4VSkaKiwuN zmv0n9l_@cN&==?T)?ZFgCz2Nd3hmGY{}QR6;2(+8Opb*2)5wmz*1%zOa)ktVqG=_& z7p~(BJB#=dS~A2eXzfTrc|~Rpd9+^-ytWQg=?`JG8`x;_a*9}9sKXma>lZ15L%Ycm zOxTKxns_Zfu+Sz*x;*{lB6cz7a{V=2RHrFqXQRz1Vp5{?ACH8Vr}#v;%Unos)hJOQ zGMbRZpUsctu36dQ52OPU)xZNAl9H=3=@+vTgRGxy!-*jlFGWT7l5ZvbJMIc|x&FvZ zTD24n^MI@d2DyBH?gu$}nRUQ7lH6#04W3Qw_IbnmYlW|%OkWF=VhzRCj_)f_(;$|H zSI$#v#H^p1ispSo@uyu?R2gvJb3?-lbYSX7Mq~cmx0^P&g8@2@wesASTFgHBqLesh znY&%@x|6FzK}=XGV$Vr8uwPei+Sb3*v=fG0-9(?`v{TS%nr)fz`%C@nJe=WVBtC?5 z9Hr#;B(2EMVXxTUf+{S2knPhTN|NKm7t>1A(`N)n3QhI;)hzZ%dba}YQD?Yf6?2d^ zXHzFAGRuAtymmAK5_GHzTb^b~eq#ox+M%+UI{ zX^EZZox6c2OULOXYNzN7w{1t~3o2|{;nv|5Kjit0Az8P5)fKG!r(w>|XKg{h_wKi7%0B+5ZnTgF!zR!{ z0<{IZ_&J4n`|OwqKB@Y9d+WwDueYE2wm8=6Gs+ccc|i(FXanUN3Fz0OEA7h}W!0G$ z1Ekfogqk8>VzdmimY?m&+@DTgfkI|9LX*A%@B|-hf^MoR;Aj38VZVFiFH&<{iXEuJ z+#M6)v`JgPy^x~woy2o3~^5DBLVL!>9;MxB?_nHo(g$B3+T5yJ}iZcck_ z#I0v%tjw>1NOB)I5I6${`aqQfmtH?zKRn?w&6%=hW`5gYCYbcErrH2MG9(c}<$KA_ zr%!pA86zM6vIq5%D^FXy+A|%@`Pi=CcF`c?4@6w^GfKQtI$(K^Zotx0==0U}L0c!0 z+AA+akZ#(mpd1SMB;zVEBsUZf;2i7@dXd0^Sb}*DCn52vDK<&cn^~u?*qtHEw%PEw zi?KM{^d%r5p)5H@%F~qwoP3c%vk?XA;Qp?x<@A2hd~Q6aw(ic^NYVE_Z$qODz>X0s zCg?o_sZhhjPkk~svt#+GozNzz-H!roVQ1sG>`$Y}NN+q9?1S5$i`3RKe}j}PW<@l3 zX6y+6enMatnI6+$(3P}-Ac$k}cXM3+S-7w3uwW6VdLD)kIQUA0&TMzxBX1Am7rZTz zVgQ&df@QDk#bH^Nuv6uK%w)TQ22sRZ{h48LUOIcH%YFi7y;b4YiNoOmy{3~des7YB z;Q3qYQCSL@LSt$$h691noI&ZFx2(uQxV+LZ%Uqoz(dEZ^p6$344&$WQRaU1PKW0tR z;TK(`nC*B^PHRj%3}T1Z;{#lqEMTUpKIAf|1eQ;wm{Z>|HQmZ&YsrPh4;Rxzfx!m< zvQe-Jhn8--yq=Di$gWKUSLm@W)0-1CWIm@R@*O$meFuCDd*6R2`)T#(JXsXQu z(WA-=|I>BPTY)%X)6$btwbyo=t8fX%_0v{8+T!EzXe+fuxma$$AwFycdJ)lk=SH0nH50j_3f`}y(*2Fm!M zI68$Oe@O7FZ84M>u?LX}^+GtUZ$tro8AJ+qPj^iLb+7Hr6G^AH{GTWfeXFr=e5(hH zbRo!E6gXwdg>Vxc#%Y=*HVWz}Z+L^zz;r1rn9vYb3j0t^R4D6RIjcH_4z0cXt&x+P z)Z+ytP;t)LxXO$sYVS*g592_wT1cN`1U>eL-U&h=tqWbi3@^%V-W!4=XXI2(DA#3W=-_WUD+DEY<~@3 z!j@~~_I?<^t%gBJmXa1Xye)Q^pcUic@Z$%4+J}W_fOx1+`Gt4B^T@q(P4bL1@`+!(M>2m-dwH8xjHCF95K$ z4>plJi!UoIEhEi4W*C#fLX?OsCR_-z0^v*!YYJOHFbzq9)%Bj(!Gp36U*tNBr&(X3 zFQ;@xCC9c+BgH-T)vIjYd(kpY9p(KqeuitW1oe=ZO$t$WcuDypKc%mlE-R>5CoI~V zAdFIH5o8GW%Eo|)6zU$vEf3sg)Mj0xtZVvpO_g#0d|ENvGXcuYGe;R7igD{+kL)|| z3|4!Rlq>q@nA&BT6ybvV4^`$Yyu1&>NfN9o`{BI98S7 z59zCm(b*yee(p7)G@-H|KpwB_Y#HTx5K5T&UD5Od(>)wcok$F3foeffc^_^hz5>yqzhUymneaDsHTNuq_iCh0e#XU zn3krE87pF^AXpO!Sv|>{c)BH+7ikOsh!|l1$T;{bS(@Q>sxWjG7CJ5Hc~j z(~zZTlA-l697D@)zseK{Gt^qe#_}3oCR_K7l7|radKihJ8~qaab%^Z5uNe^jpvX;3=E7y4^$bo5cv0YkQk(y*D5ne?*1-n`2C86KdE`RYTv zQ|eQfJl5flU#hjNn6A2J8rD;r2X+{xri3|zVJ}FRIHOC+2;dbmE`BPNGP~+BLU^-r z-kj_dmCHHrt=14<;Ni&wwvoCw@{sIqIB_{NID68&Q;24f{2 zuGq)MeU61JrJ>jzDDX5VzHW)ts$2QijI`hHYhzqK;~@-~@j|Slgy?#n=&yL`dOB@! zx&DNM`adb~_bdVR!%FIQ8(p)^BiKmBN6LL*ja3K_ zE${*S2g;_os$VtduuxAedvoxc@#*elol=`?oLo<}u9b`Op!#G8nIoe+jjHFZy;=U_ zVX6ueQOH>pjXX&qQTw(*<+^!4gi3SaqwId$5t5r|zt=n(3-VVzpEf5&11Kg+3miR( zBOpK+l5`@1TAkcGDX(BR+j%!c99SGJzBRI6daKp?qSH+V1%1ezzQQog#z_$!8hWO-L&Km}6U9}bqnC2q6wN^NsfVDWOse9QEnOyC#nt0SX- z@_bTTQA4{(HUqB6wOO#~OzPA~l zwi4&c`prOU?!{OPr@S;Hxf6Ubxe-vS%y-`g`o2e0LLRnlZbpq)*a>$mv6hh}=#O6v zj962+T$}8S^Ov~k+Io6K2JbAF1#7={xqqRDELnIqldbjb9nho!s9`6y!&>ww!*5}2 zJp6xPtwP}r{3967a8@9(`w<9lFXTU60by_=ouv7YRp@)FnJGJYa2}N~C?X15DD)^9y!9>qN{QqLU+dbj2qHHH#frqX=(sMm zTPy)nPJkZi10ZA1ozfmQiB4*dXCYmbYx^royRQ2gBhW-hOXyok&F0#2fPnF{!U4SG z;gw?(V|1;8RG^G$X|HsXL|DZz6-bz3`=M(-NFFZhkjpNz3CI%WeoZ)L&+cE`H3YCV zJ0z<>QWk2oIcf=;#W^CzO-jO>IFYx6Hj8AV8_GNhARxo+DVX1h3xqVw65>D)|A@Ii z8b%GzjG^Qy9SO!mnmI8y2Oj%q4FRa$ctJg62)w_}9A5xD?#n+HRv)^n*|S(<6yG03 z_o!3kZR2!!>HgtNlBUsEM#xm!X}IF@3pj+K8CKPg4{MFJv0Hs!+jXAhz$W43_Km4{ zsRCbW+1DN|ix&Iga8Ek7&Tf)It*^#{9=id5<~S57xG?AqI_>}9i?XKw4X)d(I~lq0 zrdeD*KIxEkk25j|&5j5dMi3(XD<6xk-3v?>y%3)C=@H->DHe!`X(0Oi65859xNtu( zBedrNW3kG~Q+imQA6Fn-(pH}`U+>JV3VI1^!{hhZi_UGJL~Q=FwnN>DH#!l_KxF^U^%z*v>F2c{J-JNyLVN7L03PfJScvHPB9=F*U6XLcb)%Nctr%SDQ)O?_5KS9Ah?wd(DbID)& z`hHR@wC!RAlUVtvEA(d8v;HQjQ{Ij-P(fX{t^jVm!lOF&m?j_&6^?aoF0UqOX z&T8lm$6HERy#HWLA3g_#g-6rG$G=~?>S__PlU;d9KHCG#()F;*@4mRUPh#uHt_{x| zFJSRkE)s$nfLN_P#GO#$p@aO6-z19|EpayWx(Jv7q}3ytU9}l@S+16Jjg+G++qEi0 z3?#x`T=CM}06~>dpaak{GZb@s6CvZ;pZqt5zp;F~U4RvF+1*!_Y+v{B%YL-6w~$l105=(_r8VK3jHt zU2*Z#?<25m;iczP*ZwxYtzfJnp!fv*lM`tS+J)40GSrj`ilKa=rm^J9HB`OJ@{Fv5sezY z5N{rwWvVjy^8q$7rG@pxR*Av%B&>qW=vNgaj94`)QpRJbv|!xY`k}9a!hSJ~`e}YT zlyFvLY(BKU8@G1+NUP;EwxVn&IylmYzvWA#LV2m98r3UNduik?B-&5G`3v=A-LC4^ zqNA+<=T*sd6ax%>gA&FJYb;gpanPfI1@PqvoIq$%?@{jktuLmn~22u)dHZq7Bv+a^J^Lglhsf;T}GX)P>}N$Wzf41%eFAQ(R0+XJeEm| zLCi4>V(bjTs=DU;Ly-@XfZK&^ERT){AD9szq)5Bf&(V4<%ykVvR~ybG0BH`$xxj5*@_w-MW{J=Ov8pY?{XO#@@=>R5wA8*^<^ET`!B4aZCJ^H8|;u4giof zTW?f91q-w+`K|u5bcP;!319Ko_*~g9hz#%orjy*_YDU+X4Rjx;ED3avD(<9yGUW6- z4K=g%*1$9L<9qD-+sZi;Gp2Q7>$)NNV^HX`|BFI~@l7e94gk(f@D=&*;EWumZ|XTB zpzqgh(iNhRG*NhaHV(+6cT_SFL+w_(m8q$)%Q1V^l1o?6OFaanqF->aYQ6OZd_x_U zXbAy(2m=yD(+zy{fI_q2!M8%t`DyE(@=`cZM#-246j<@pEe-%0ha_Yw?G};a6Ry0% zqfm1~)eFD54jAmq~xd{6+8SF;c=7x*1Nx^IZ|hx{J>_Z2(0&Q`gR6}%rBB~wy6 z9XI6h>|FVD3y2!pMln2q1Zr~sf%sWAtpED57Hh?xm@h!RA*KO51%`v43GQb_WvAR8 z7~2Tnz`kUOKQP3xfokp+42nX^?8ecO?66f0D2O=k;AP&<`hw~{abhrwU;E7Jbp=ALMEs$70 zXN3A{^sNB>ULePe1fs-|G}vV( zA|mYwz&Xj7h1Yj*5MwrzrNK@kel=>nF$I%!oLhxl#+$719C8&Fn}w5A=>$xDAxZnT z{WB3LcWMo!Wb^*?XFmbc+(k_k@Ak$9K*q3|Wi5AnZ&8wVHf7m_ZWl_FiUHdzCrH~HcVU-<3{>m^NPDKRc|Gasn5uG$#K9E_#W-YbUGKo2_M29o+q~gCs6BLEE zjq4PXVS>Dca=vCXeo^6q7)~-UAkW_u_^|~?E-5C-&GqYru}Qs&tW#w0 ztMy$xA$-;aq+1jeDqVxmwMuTNtRd(r-w@E+#%4&f>&Iga50u<;m<-5u_I+bG#XRfD z{{n)YlVOT=mtW;`d1Z8JbDvi%R5wu3!ar42(VC%;H^wO@^1hTz-71#43R-*(KsQ0Q z3!?LrsIm02(v~Mk-mSN%VAF%}yreaHAwtJpQfl`u!YYIk&U&UY({*$=k=T%AL z3;0fuGZ7gDEK=%*pObO!qn8LGE?D&k zcRI`;uD)|3%w4~6U{CgboQY|y0|I+5vBs0VSHE}a!0{C6Ts|k;6mx**$bs2t%eMJN z?nW2(%WuK;gd)3$coizbe6;RcSw~s~xe0D3%L0fG-;a z+_x*sooC=a7GRQgmNMgwtKeIqEAr|2jPwAJ52RG6B*9}yfvF9V8}(60@(iF)+$hSW zJ!)u>zG!qi`1dfZ-XscEKP#c0U&RQP&ldpRj z0VfZR0dwaT+W)gMmR{B(63_1>KHBGmtN7K~*CGT8ozNsdw4aElFub6MEwC=Ehl?8$ z)xow(x^B_B$1)qb|2o?<`90W3iw;u{pvCJkqm6%6$KFVJ=mEywRqvjiJU-7NfMa3G zPl_Vk0VEkkKZ|a&U>?zdue|-=Os2TG6YgPzoB#K-ibs0r8(iC&7vk7zLZd?vm{qY! z+IEa(8sQ5bFZjH^isk%RKg#uV1on?G<^(;JLN%N!h6AOSb&lGfu)fiMao!0VaSGA^($ z-KFi5RaHUaOkwDg22z(PBDMA(=msZ)0OVfhHfawE08mNy9ZXOSF4Wpwv-0I~@azHb zMit;O`3G=FE*Vlyv`B$ZOEM`a#UOqIY|!gI`n;JA=D*uNFw4I0tXv1Cc~mt&A20I4 z=Ote#7aWkw3da(T0Xnry@IHJGpaOZ&oP+I`KmLLOHg0kTfMtR}fU3|vOJ?$^cH!OP5RhqV=?s8# z{vKB}gBDMu3mLm(^gsVIA=>5m&GJw+!r52GYc9Oc)F<=ufuoMoZ$sr3ipc^?Bv6U0 zZ#yk1<5VxZOyfKwH9DdHBUx-Q;j-%_&wM^;fJLEdOiB=x;JF4T7hn{Q#shB!1OMfz zfdz7rQqgL~MxE-v{>i%6yrhZ4b)p*;0?d9tPIVBK(>ffEcn6Rct{%TkP5%A{T?T0( zlgg#g_9;q`GQO-sGc?MGR}8-FkQgTnAb~mHd7naeu2CaV1ON>79Tv8+!~Ev(8jFp_ zDmCT**%)iy3+8vE-xp=+$%(Ks`!qeqzB%m&!$aI%h$R0(m-3Z${?Fg~S|!%hp3V&z zM)UFh>Jg|n))}-$krUaC(muvrfk6trAK`vkR1N@w&X~jUuLf8~IWwFAY#4=tN}0zY zl%KTAyLkBj|Ix$^b=n3s-5u-cwIF}Fos|D;9(}|A{gOk}@fr6o?Pb02As zDw`d=kyL|$?Mr|X^+L6omVT;gHXqU#^7&6S&J2bJe8G_0)LPPrHEKbtE&$_2#a-(* zm>p$u7Pesqn9wFiBRzCjapU(Bfs9XVvEe~4jpZtFwx7038Zg54`>r zwE-6yUG}U-ZS!#gugj13UzuBqNpWpBWBBjciB&YjmdfS&FPim2+_a&r{_<(jR0#35K`y|HkMyZdu;7o zqieFUQnKY)iD}?b!{w=EJsT*kNB#O3zhkg6Qd$)VF2G%`TC*^NTXp_;8& zK)r{gX08AfLUn+O?!n(^kmW5jH096cou``ugju`>75lFiLS3O~0AFt(H06AuU(Q)q zyPZCb5gSy);Ru)K)~5(^l$9tYi(}B8LdFT;Tb47W3@ge;&ZaTP?s& zFd+8~S2}x`qCrdc^YQE)0o4>8$adjDS_{d@d`?k2khR8ETUr)Es)!v33Xsrexx9hw_3#vqUpN9*=$4t0aa>7nXM`M#Qck z0tjx6UtEt8B^adq{rCbzMc^n^#4)UPW0B)lA$1b3+Qj0uI z?pGZv7LYByAh6aKTMWk@Idx>Mc8~G|h0Kw14F!6T%s3N`9<>&a1R>vth8VD;w0FB^ zAKqM()p@=dDsk@UFnf_)52l>I3a7N376JKW0EEyTFMj=cZT|3UcgFhed{&u%Z)dT& zGOI7L=S@C{I{Hw*2oATrw$jUit$62W2c+-9B{+(bOO9S zFKRA{bzAI0;tBL@n+&bxDrTtbOz=P5HEw2^p1WYi={N^KEzwI3gC)cD07Nsy<6ZUB zVsfzaD6pgoyW2tZ@IjypOHl1gSh7rvS;Fj~k*&JE8&vTW74L~bMh8)iWW_|cUKmt28b#|!;xRP{&rlo+H$h^(t3 zptEDVMZ9tLP{q5`QoIXE3l4kNG<4F)$QI|^Z1DIXr%o{uwD)EfTF=9NX$sfMcD$`h z{iCh>nRVBpjfTULiTtOhH6UMEB&l2261u%HkWZv0BLJT(Hml}FJz%~8 zA)*23qbzxPVja60b`b-!LbGd$go$il6xc-97P#y0koT#9Ee8-RW3E-~_ZE4Bfd68h z4S}|ms?8fSY_@FOge@N+KCaHTky9GT9d;{fMrbeF0Rf0cvy<{7^|&d!`Rpxm0yUY8 zpVibq1Hm^+Lz6k+n8s4*1K7}SatzE~6KZYK9p-#WLlhcz%QtKHZBq*X;bxqJARFG= z3tHYeeGBJ16*xsij@;~{V+G<1=F`d`kyK07Y&jsexcoP{Mw>K}cXc9u63!m?q1_7m zeU4VF00FRab1Ofwz4BDoKCk0^vF9l)JefbvxiQ>eoBh__g&iD5 z5>ev~m~g~0qOoorD^nCe#F=J)yw(SFJL~yrf%7RBh6_r;q+L&dou&+%+PPu?;fD#2 zmY9X8u4+~aEh%gPXuaYYP)$%Gm1z+p3-tE}ENwfaYiY>so6pK0Kj#H(u9Zyb$6a5T zf)}s73^%DRhl3s(C@GSVV-RjN#zgJRE&!fdLeQ1c=Z`7D>x7lmL4xv)d~9qLU0p@j zVbkb2zf9w~Txeoxn(j))+jVUZF3E9t(=j`H(|nmmjG2=iHQV{ua;&027g?U7br z#pN3XviitXlEELLovEz^0^g1RZn>NbD{vzpAN#$o)qZP47HJ<{7Hc#TNLT$E3kq6r z2C!K?(uX@@g{QuFCXf@=au(j{O$|YZoDbnKn-0-kQSMm$Qe*_xdqu3+K3`_gX=u7| ztIV!pwrj|0i!_^+A0&1@zex!^SmZT*UWakC**7@IwE-?Hb=} zugjdUb$y2^C&ZvOnGclMD?8}~lJzkxLikFnqcw{HfV}{$M`6z7)S1XNyv2!^UBh(x zx3;aD9cg}81|Uuonc=quN(=dYLor&e=^GkgwB%eNxy& zK!(?sHjok+Rw6zDC#Hs)TSQQ+LIyE+vbGpG$4FZ4 zXIze=qKL)eRhqY@fLtgc{kSfYDMI+&7h}zqJ*>Q)m&G!(exib-48dTH4yowNlWwX8 zIw}e@YEQZzc!2f20$#$?QoCl7 z`*=&A30k}X24ZK<)}bS(tuEo&aQ7jnkWeW_y|UmNO!iheUrEs&{Ia7kAvo*tE(>A& zEvhDbd^9sX{75ax()M2jQF%R752v^pS2BZsnvPV5rQWmlc(7I?G(D^&+#wq_RETpLu_o!)apr=wbRold*<~?&uBFUI+&+N5o5iu@M zE!zt!Uzaq34Bpi=?#Y!&F`OYaZ81OhAJ1=HnW29FAgU-2*a99K2HSM<-o~4dqcJ30 zN{LrX+zY!l!odx%#^{IVveIT#FA2)ShX5_YXhF6guULVqp1d2u;f>T_?1$$P$?qp(V`%o#S2P!+RcC z*W=#v)M7wJOTZLI*#cUd5P0crH5E1E3Nhhx^dT`i{~p%);EguhRhrWhpn+lmNLM7p zlO(MU*=>&>We+^ z`3p^O+3PiQV%Q7QNPk4AyTJAo@r~0Z!rGn z0Zjab#v;-52@?~6*lpj_ZwvAIPyr&UMGu`~peykxbNTf6JGH28a={D|Rmwz=iXt57 zZ&^n+yoRO8bWg%e22hXNhk5>|vH~_8Xs|1I`cH#hOrv@A8mE7iIXmbE85%N|-0Q{a z%X%VqVP8pez~xq?eeD`^~i4UvB|)&0q3qw$T*M9y#{_$n-?yh9vYS;IsbbXbyd5^yjyyl9Jy5l**CW z&XWI=T$dO2yiMkXLU&7j?i!Mtj|J zqKf+NGuoXlFyRVrAxRPk$C8!4&A;-0KTW*c59_??3H?g4XqY`?4 zvW4zIFKbfypW}2q?U+4K&*EOXYz)IJjs6_Vna^!V>dUqS$q@x;Y-L)vE9W|3cHW2q ztVMBBBxSPOr8V2ER^;+62P&a#KEOK}0}|(o3k*=kz7V^|nOcN9e9BmG7L7W}fZXRr zW_>a-=C8=f6d}3mgm%9*+nEe*2*9_GY9s1-_TvxOS8Ws_00I_k^9J(B9yDPT;VgH8%o)OgZXi;zLg`J6walhbD#i0u#ilkq9&dfP9~LBHOJ*eC9s? zMcPSOI!D?rL4XM4&12$m&T~i&7h!-DGRhv8Z;h({+@OiYYr=vF;v=|Gsztd6#OhIO z%+K%?b=!JeC=e{{AT6DW-><)R=Bw86r3Ch5DJyn z!vWd9bbo1k$+D3>B}y($HvY579L=Ar@e_EE-MnFB)Rmv(H?qfH!S&24Hxm{w^?smaqNFl@L}f{s)TxSH&VtbI4AF(NR#Dajh=%wYJXJp*T*dRLJWA_9OeT;O2 z_tCE|bY7CgSALRr3 zgdIgUEqtq~q;~a0>W#v(Obrd1m$-#gmiRTE?bxL%y%K{uX|gw7R~vRWa*{n2XH*r^ ziV?_=YqK^>2flsDLhjLiY5KUz96ecM;`UrTVE3kFubtETr(etM>b1Bf1I36n{98KR zm)=lQOR}V6(Mdls{AITolMy`~VP#jB1okuHxX8#Awfj8DVQfaGMbSa|pwxHYL~QGp z!wt%I6aLaCS&(FrP`zyE6Z*NPCY0ey{`HyO=C^^8@}8V$R%|;yiS$%adJ%2}m*|gw zqS^@*A2B?8#ONyt{a#w!ZhD4*=P*M^3bp^}q9Z)Eng#91*~~OY)FE?kh&(m@7MH@P ztf3MEH);M5k+cMt;Zb6Ph@lo$DEo+PeU@bkgza1IZcsK_tCnB?q$e1i9~8C%Dq&ig zDilDGeqnO4E>-?Ju=BB@x3WzheL1s(?59Z@`y?`XsL4u!>c3_%m?-wj{ZX>7s3vju zvhrL7ddLt@56ai_Kek0Wwrqh+t{z|dBbz|!4-tWx zh(1LHhqaP9`kE|Q$5qxx2Q<$CVo-?ZH+Xa!eh{PwO zMuV%Wg%@I>{f293Mnh$NU1E4N3ju8*;pV)0nAG{kcAbL8Akm)S72K0cr>Hkbj}#+a zwJ?I-^zM&01P83vsV~*F;^C!@13OJa0EgL*iov;xz?0zv#r{q0H$c3A^UR6-n!0i| zB_)=<_#p~sPG4uorJ;Pw^>e2`?3V z30E1CUlqpsSFEx{7*A9`A9FU&Jk znFSpC$cx_&9a1uW)po3iVxxav2eH{mmLTQqQpL;~M~1CdT<){_Z~)gj`&+sh1TAaZ zcdPmu{Mgi^k`_vmCKL<EC|%~c+##M&YN;BJZeFEx~kxM6H$NMQ$9fmeZVRDyB1Rw*Bax=ExO}F zP*Q+4u8ZK01fY~WUY$w%J1X*+*0Z#EBrWM3ubU20h)NV z{YyQ#0!Ovaf#Bq0S9N+!MafZYkUrPX{QQ#=X4=!>f5f2@^p2gJo3rg zih8}ITX7ke$onMFKC;2u-T5Sf*&}K@-LzbZf$wMOSD&>|{$W(2M_RT|4AN3diU@Qe zQ^(YgA#I?+_L-s@4ASW1OC>1UW2Shi@$;dfD78I^oE@1#7+sxGx)_HD^PLwj;ti*b z<_<09JaZa%3w|IYwb#Ap+KkLOmu$LsKAO~givJI=QlsSSpTn{gtDt*SZ&Pj6?W*!A zg;9#yqlni`$ff~O4NvJ>ooXpT82)l`i7U{Y; zi$Mj=1bvi^95#J{qSuUXwqA(g=RRHy+KNhY+8wM_t`hkr$dgpNr!g-q)Ua${k62xi zv^8J85NR1;Q^e*dTIOA<7QAbsa20pWXfPm#I&gWxTdEHMT6^BF{ioyz#0(ao%+?R{ux(tbni&2kpFb*tByORC+u1Npy#M@n1bD)o&ne8NWFrr7Q|l)q`y(C=fbE z?lwAZq}@#56g_x11?EOrg8q!I#o5~>nSQHoj?|=7QkEkxROx}RVO+AoT5Y}C%AO*C zSwY}+vjEjeeuV#^fcec~12Q?SHuK!yk5UiU$WXAO@3vQYp_D!K6{~q%6WM69L3h2p(D%|^|@{j4%iX$$w^N-L3!>`vs~aI*jXm^4*k)*xN|d@X`e1A+TF6rTBVqRsBFIQy|T-Zz;Z zc*i}^-CJ>+Db*}hfo#vx`zZ<>q;qk2j8Xz6nRF%3^Wfnk#nm!Re8Ra_q&*BzJql%A zmL&W}BuRUu6%Y-jnXE~un*)!fE9%eG1Ej^D`2l!T`025e+69W$p6kuZG(@->-}VF^ z?q%=<;n;uva)peLlr;)ETpCQ6 zD;gj@wOI+k4_#jtOrW5UjPH#md-yHbEw}Pqy-2|VbT82%5AU{Mr2xITK3z`^-8wN7 z=I1HH-@e`q9vE}FKcVIu`dZHvQC14M7D6REGu1@qjqM-^dJLjPLk6YdUr(}H_Az=m zGW@4ZO>oE!EJ*k{St5^TFRVZzkf{=z`W-HlMSqWQRIe}3cgKHG#8vYo;S>-Fm1zGS zB$(vjdIOjRgG}6l6$XQJ33-j6kKKx25YEz#7%t5vQCu7%f)f^Mk!USWBGi~cI*lB9 zt;vrpkjk)00j1QspG{d{9I3c2Q$+j?B%~@6VWfk`0rEUI^#0roR{lC*EXC3>+9Uy)?_ndO3aLG~>q#39%TUCR20e zH|T~b2#`Ge(Oj03fM`-pn}>O4&w7%{&}<2a;-fU&lcqF94|Sedf-S9RN5Yr8>L`7Y zIZ@jLC=h&hik)ZsXQ#gEsUWi{FzRRWPCTUMA`bq;rkmR7DtsbQD=9QpCs zPuI_naVvm9c!dlI$0&fZP|x5RtL7fQmrj^cGeKi6SF5$5yzaQy(9<(9e6y{QsJ-rzTRYo4KKhK973@AVonF_j{-0HvQK&gp z*c)R0IFs?V`=#yJvpu2#wA0O&-c-p@Z0IO%HqgD$dD0P{RQ-FTqdT>W7!3uApG^7 zwZ<*P$P?EtW0kETPF$Um=m~=`+~-6@-Pzkn;P<^`h^E%}fgatnw7o#5<7Gg{1pdA0 zsrQUJJ{Sh%Vr#TZ`BXp*7iFrdjM~68VnI~`#LG59D$2je&jF3(6{n3M?of~_-%YL; z7M?AUUzIys!^X#jgPmnKFbS$@4rByL8aWa--hsfVLcdM z9Cl@z=u%TwI@}2u*G?T?B=?tZ!^2fLoQ)nfDTVUl+KDqY@)e-7>L%g! zftABy9xomXcGIc&YxzhtrcmTny-tD8f3Y=h1OCI-uvV6iGL>p@IF;5whO}V{gy~pZ z9C=wuu7^6+k{&zM7om4G0n_EJ^yO@~jl9S-))~qHOP*bmb`PZl*eV{dC*d%QD(tyi zYfTAq_fl~SmC@4&A&&s@hVf=Zem*Gh#Q7$_Y_7oRdi_d9KP*LzQ@@*t9nU}|B40ee zPl=g;O2<=OaGotm;(*{@5;!ID4v)t!#f7hw5Ldwr_b)Q^vRIy@ztgtnFrwu>@(|gj z0M~Cmu1`+lpc%{VijQk)Sk#N~Qqqr`yg^qO6Fq`-xh|T%LCdf5_-lnRo=0jd+Kpbt zgKdt_*`QUjD3Vt8X)HmKjQG<>xrZSt8s?zaFsD5zyCxTRQc z)u-BfD6bQ_v&BcEbliN;;Q)-|l+g|Kp&DV~pB9X{Qf40NYs}8_VaCBKD&-ufFt; z*R6`OpqaUH=lrGjcF7bwSIb&L*988OCd)wNtG)SuI25n`Tl#KXL+`+INayY z4r{mS=+M~V%s&fnmR10`IDV2>SpQ``r2);nsH^#>9g2Ia8Pm^Wa_Wcc|L}e>S+(12 zEwfMd$vDU*^lA!#F7rPC58Eu-JlklK1rM~mis9^IYWEvxF+6q(^=u52tqmgtr{+pa zs9Udmbik`(b@mSdPTJJbMntB_g9JHcn!wUoY`uv-P1oMnvS)!J4J7+%M}*ow(Q3W1 z8ouY*YM4+r^RPswG$OndE6Jam(~H>yG~@u_;x$QH)WNS_zMuY!nU7=WdmC86Z;xRV zp&klhuG+D6Dq+5M;7YNSio^7M4EVZzL7ahS;7luNTl@B`sO|iEK#Y;1ys7?=Mm-ue z@ss7@d$h#qThc70{Gd3tX6cTP^j;naj1-VNF0Juq1*yLrI;}Sd?7;9;ST}OqKOwH3 z&BRZ#;v}IVOSgX%Hm}dtwMC&Kdk@!!PFk+JmVU~LJ1}%HmAns8(yC_jZ`hYE|0S~? zkH-E_p1zHA9y%f?hE_0@JmU5!p(Eu8?-4li2tcGJHy2U0g175|6t%@WFy87__!M@F zSFXipe%V)sU%wz>_NiL?lvP+0R;#LlF>L5OhT_G5K%rl2N z8@tCpkoP4`6#IYSnpNcqyH2K1rf+@7**|7;XLLkOnHZo%i_w=3_>{@Y0eEQ^DYTpo zOoZ%}C3c|K7gwpxezgR;?S6B(o=tu>NzBZzFlS2}5iC!7U>k|F1*O1GVzUAtfQt0| zU<=b`IT5)TD@voH5iiX}Y>`sx^ z^K!-g6;@O_vfmg>`XU|uqo6xl|GITK#IA^i+%035ZqQt>G^x=*f3 z=bw&EV4IMQTQ+B?J~*h}7kAYf%P&@zmWEAk>6*29K?!OWU$w;4!T()M2Rflb)Qh^& z8x5O(p%86hpR{RM(Te4i;mOBl)&2GRE5CE9daxrQC-R5U7 z0TU6eArKWX;{X##*Ad}D_YCzYzu+TuUw)ML7-ye&dm$m$V3s_FcUX&MCzYRzc5BuNUx~yk>sK>@KbmA zqO3C6m(cU2Q{zXRJT4=Aa#jy3zR*zt1GvcTT3qbST|@OEFI79d3J}l-y9mKmMSnao zSciy3YS*dPR9(^FW4&jJ92|;5MPs$RGuqk*ciDQ>d{@R-tkL+0Bx>?M_z4j5jDyDm z_&qSm(dypn?^AReFfnV$(zE8ilKndt+j{Ov6sLmXLv5>pIjtXF$#j&3S4|X98qd^% zGOo4J?A8#|%NG-g;T9H#sa`|uSt393Ng=hzZ4t4{a@1Bc_`hy@G?=o@Vf z1RdvqenIuwF33I^qy+5msStWKp3jisj=l&)RajJGVoiyNF&rB3z|O?(XjYmJDl^n7 z7s&?*E^ehnPl>`{u6779tqCs6#7$KQXfNRKp9v;|seZHn5=qngx|I6D-jjwd!9a?B?Y?0pg9a|5>IFdOe18--|L{Y(e1FJS;)blG3f`hENOkG{A*DMmA!qck#0 z>e^;|XxS`}rKROeiuVb~;sFGO3pQky1TX^YM~JTG+R(G7;#7$@247z>avS-tEnXk) zJoUA*VBv4J48?`s)>t+=j=^x}{Gfku1+RPHX=5a4HhntWmw?FXdw_Nm8fQz=lPH?R zjZtS!|4o@Rk3TXm#yYNkEE@V0&dMkx{?{$15v@XCA);5tI%DtW_mgvFWeZM* zS1$M7x85E+^%O>Lx!_Z_GniyJVhm{k`6L)^Q88WtxZb+^?a`=sAAF{%zNdgc-Lz3^ z3GkV1U?HH&mB6*k{1F@evC{bRu=|^{u_bsl@d+>2X`&O?r&r=d*x`t|F&*HFb~cC8 zz0bxVcAHX|dJT{PMQlN&2w~yqmOl=nOydn$^iRd-tA!>0qP=RDiqq9(`srbWMNpiL zPDv;G>21q+>cF5^CTw}=*%F@b;BysL1CU@GDjtkU;C}ue`lPo4v^8W*_SJw_j$QIv z5PSLmr%jA){GbD0BLr?T$cVsAFaYs+Elk%N2g)Yhl=CqrQooJG%yL&9G`LjE!Y_%2)zx14nJ=P8vI)3knoP$#`9(A?r ze|6p39(Xin#!6*%?bfGgX`>~C@tidQa@ljSm|Mnz=vm)g08Gjl$>n>;;?AvY1%aUC zJ5Dn{Js--9p}blTt6oY|9rXUE0+odYtrtEoK?A&9bPs-?+b61}HX4_@JznFjYRVxT z|3Qk2dnfj%0Z4Ud8j|!dNQxhFVz)2wajA(HmASc_2W|?KoJMU8qi3H|F7~luWleqy z z!}4*;JlLZELjEIrkZ{2&on-?fS>g*Qtcm8&jvXw9fXYzh(tS<0&HFi|WgyW(4gqRa zP0HD1QA^bK2BTLpb#WTCbi+7h0I~uDYJYqSdM)YqjW#w(25J1Q{7#XoMel~ppct4) zzzrtk!TG(*k_-uQ-0haCIl~VL1uZM|FcfdDnH`m4y=hT$?ZTOLSq?E@a~7(uSQu^< zsG2_}nJaa32YuNUwY!qjMP!%Oe?aW7)k8iV-yH<_}vTzh2Z@Xd~1nSq|EP-Rx|FxC^i1US{F5z)0QF|qh( zMKWq~VJX?5jsTF|=GT@<_M6I6NH8ANEP|uQ4!`*%P7}f11meX)FcrnrsMg&K4Z69D zEn3Ce6_#YXq2`ddl>72A-%$Ua^MAV5UOqQgRI ze}smtrAtU^teYzOx7BzcQ&BL}hi#|S?g~>Tu?h67Vwq?C^(Ch;csqRLACdA*eH4U( zEsw(v#lev}cRdqU5bO50Hr!&!646VpD@DPj2Lb_BUgb`@jjhm=2HnkP48d)*Der^Z z1AuE79_LU1^4$CbD_{)3(~kwn*7;`cNXxJakv!~{`;QR3Y8+5jC2ZTP(%8?e%HUj* ztf6T@XI$g<+J+KMza|eUEM?TKir_o?MaGdZ6 zj&PKHw@x69U8l?gPojM{iYk4}-PRHW0r?)X<`>Oh+FHSU6{jhDREaXT_pD z_Y8rq;w1;;A`~IzesK0}Qhnme)#oAXOJ;sLLN(wX| z&)*bm(%D*o(bhF%=^ThFVNvk$|G9K_wt7r~TNy2t?t>@0K7RTCNPMmJl6M53|KHk_ z#@hlzFqB>Be#&Nyj9?@?kWEcgk8dQ^+Hjk*TM+;g|7~M@)Px3eWEIazxwbrKbxHnT z%SX7vA)oZuj{9r-_;%7fDUM+Sx9+@m|yJ1o9F`LP-_`l9(~$}Y+b6kqCNI09kFyRRRHF(9|x8x3qlzC|G7$uVBhH3L~s4)l9DJ^uQ$Y|8V;6)kv|*Ww@_i z9F8f&0Anyz1;~{DHC7C!|M>#g2}KsTwFL-Z0)ZT@-15*0JLn{@&Mk2W~n)4`ffQ*ef69mP>?a{-*s32mDz_*F0?&# zIIaYa_p~o0d$WPM!CT=!b$^Q4YLF4yt^XUr$gd!d=v zWfu+FeKJ#zfULHYa^Bdlu0M(9^^ymLG&lVF#bCL&!YWc zG1`Mu;FNT%tf;7@w{7QrTQoZ?-u%&a=p6fO&(a$rR#;Z{0w*4Sl}cVad=g|AAW9ZB z{kU+1l(E_J;W6xg+xTAsW9`2PjE6%7Nk%=6 zu$K$>gJQYXB-bCc_unDn60I%UYY&`XMKIHTuqPn1#pKU0E<)n~@AywU7lPYmzr_PL z=jaCMaFppKpNG!N6Z+z-q7G*?==U{i+xcKG+gS1jQUsNJ5?j8G1AfXyk0}2*sHEPS zMyYMxM6Cknkp~1P$Z&)rv;T7Y6-hrr=?8?K!S6AIMY1!%YYf)NTXg3R#?nG>zGyOe zyQAE#?Ol?$Ys(;n(*Kt8L!P@Gt>O1Q^jOhW;d+?yMDLhh@zacs$b|+bn>ssU2)Uxr zi%k*5%{N7afPxak_Hs6g1EQRMFlTBnc#-EIb(3775@fBWd$Zf3QO6nRW%B*pj5?emIk|2W0-}C#>|(T!ywo=i z`MdFV-x0HseZ{6fWGNL@Ma{BZ+uk?Sak) zgoVqt-mrh=%HSCG-Mau#MRQPR_E7nlU~l%?F2TNqzEHr+qyKpy0fZ%SVfC6$3KMDq z)4)yUlUKUj4x`+TE$1Iu9`z5ymKUYAdoQ~j*4Y;uLNI{mqNa&$ zB0YN~E|0q}D6Jd1IKEuwfrsaP4)*b&pnv#To zC&voMqv@|$dnmKjJl@lRBLY^hfkrTRO#J1k4{$4pmtH{1Oe!+^>_1^IkIco{ySvRS zs1%@fhnWZ@L0OsOg%6Ef`l^)=m>Tj>bJgwiAJLkPjMilR0am$;m)GUGJW2TBmano-+f%}E z+<%Fs4pJ9I%0zMef)qXNP8|CQEhPSiZEc7Z zt%s&*i@H<1E&TJ+SQpWP?;T~-KdCdB7&;6C8OPwchm@VsnN6i5jJUq$2U2ipoFBBE z(3SX)#79w{zgpo*-$c~?1d4%J5riPJv6gFBNLymJ=001!C|b_MmwoR(OJ!8P|1@>@ zr3f$T({AtxPV3e2$;Gc`+-ja&LKD{VI`Q(lHx>Rj^Z~aU|B%ROE9{@3gBIiXH`^gy zTq4}HpQ1C@*u?F-ARv=1e*Q28k|yrw-lvz=!m9|LLCsM$Hxxt zp*xq}`yK$bP|(HzU1NUf*?msizxcQ^)t{j`IvHLQpTc^^y$LB;kkBc62fpBAWZ+Lj zPv6?}uH|-un6}a}-DttvB<0J;?=i32ReY~y#mlpNzn*p;s_+ZTzkK%mGynNVpDzq? z0{AGD1w!OH(lBQ4^i*q(A)SD%gZMJ>kXD9qx*y zB+NqeS|f9u#{B~lMC7128nK8XonD=HP)*dEE(q}-$9|&!mKhvmBuY5)WxQ-TV_XcAvrzIQa-+Eh;i?1Si#CeIF;77?<p zH{9$h(floR=H)kjqBs(YLhKeuj*S$fYi#!qmn3CMr`l^nk8W;0JI|X&2`*0FwGZd~LKmbaaep@Qs-N6I66^7t8jRCyYYLlyU8QaCs)?G~vDZH_~4G?hqI%4H~If*j4- zmY4hV!I*Z5aZKo)xhHiEAA00r3tdyFqYcmSD!GDcSxH=s0?k24wy>6-o)cTsyHcO; z!)(9UqG||b1|<(X%82w&3{bQ6qc1Vz!FzMmMY48!(#Xnq&wLjgGWd=fGexJ0GjxdF zi282Gv9R9!dMRP8TjjNj+xzcDX^XCnUk@L~(Ov6CKTL9~3Ykf~&u>eH-^POnl`~B) z&EIDQo%|oJR82Oj@T_KyKmILzIT<6kLep@)YjiJ`h?tPfs#40w;=0Ptdhc5z9Q~BJ zu~AUmO}?PuHZnio?R%LBInDk*^(v$d+|CHU_w1ORN=UdpeutRvVU44a7=g^3N0vPg z=qvx(wkG7d>pCk}HD^T4!b{5l6kaz-f2=L`CaUx>_HtaNz=(tO+?(n54e2;UJn9b?l2UZr3-w`D`J8Z zhR}`P20yQNRQ(}54aH;6vQAZVdp+>>{`MQLr(#rV&S3rx`t2O~b-;Y&45OHFP8K2( zMRMF_b8c5u@*Bl*(u~J0=u<}zAnCx2LhcRA;HDa1cHNA=j3A{mVs4IaoTDXv8S0^6 zBUlC=>om%5TlRsgdlY}NcvUd@WreZlwgk%-bWOy?=5mzJWDC;pt53Ta{MJz5p9sev z)2T9phe417w$`|ow9l3QeD4AMW3jpTT06e8M2j=*yOY}DI*!m6DlZ>!aFlb;(;RwM z)O<&Yy|m29tsdMO4&H*H4fPuC!@`i%+;kp;V|gOs+&@3}X3=RA%h~)m=7lqi++0#( zTu|yNo<_~DgepRc5&3tmGFwSY5C6d973azPX-7A#n&QL)SLTSJ^E`K8IwQOqvmbXP zlO%z_@wZyIhR<Lo z{)&~Pb6hBuG7+gIzZ6IQ48$bQwig;GHJKDDg?VE5U!W11%WHXI$*8t#pIYGE|K4-?6EQBv=+Dwoc?Fw##WXB4C#|?t z*aL}Gxi!r@-^N={sIxI=E>^1fEYSLIwI#-f$wz%jbG;W^GX&6AH}U}0k7o4s%TAkC z1{(I(0q-3YRne#Lqy!d`_f85&GuOJ37LZ=glRbaemm{JiQE`7K9~W*T0c&28y_M?= zB^ap*4RFcx)IhBv{U%fPeNK4oeY>gBs&Xf@fK?|5sewc!8Pau8})M48i(F!QDPnsA>I!@1^g@Z($2Y zEjo+uJeA*!hY77L)nim1LN3Mw4i8skzMhp+G z@bqTw7tj45qI!o~oHxSLz%cy_R&1cOf*N55iq7W#oL@Hhm>D@2csY^QiD5)asHvJr z6Ly$6c7qHQ3R<4S)9a4MS(WjY|6VD!&z`~>G5ZZdmW$=hu3MU2yOhNIk(-#Qg&wbH zFu$*r-R!nvqahCL0H1n!+M*YPE3;9e*OEAcHuW{p1wAG!1(TBcl8YVst@{sh=R>*O z9QQs}Hq0buren@TV(YENp*_hH6#NjxH-6C25m(9W&3B|`^is@4Mc)+Ny2esLVO`6S zXn;p=wKtRi11hv4?b>UyFqL?3Kf1_StNzv{ulKZ&R-wIwFM6}1P*?O(d4wELCq1RZhh1SgpjqtYZR#RZETJ&Vj?&qX?_NWNzO!PsQSeGjZcJZ=?>L;JlK|jHp@a(g| z42rsV<9DM#G||P55&S(?m9Nl>C_dpmH$;rxwI!t&B6d9ZLQQWz(pdeIzlS#G{jFEA zNS2}&2-u+Gf7<9H;$&v3xl!4_K0BLh?kzQTvroM7oB6&4g?1@{o4kR5bN(*Wb ztD%~NuDWJoUC{ab2GHfm(opxizK0(kiA$j-tgUI@TVnM0ch0PLhq?ee3Ne`n8;5$@ zi9phzQIpjuU*?knvv(>OPmJ6AxDVdAni-a%6Egj9%WLXc zh_(ygx)bPvI3($P)P!e~9OYxAxBUsX60wXtWm2PF5*(~m^>aVUv``9HXOql@WRM5q zljCT7$)L;x?kqyIJ`6eo)Y=EF8zKHq`PMB?ig49e=he*(3l5J5dVcVr3{<3#j$m%> zD+@YGhba{Vx!Sw1@w7PEnb(P{WB7E;jD@Sou7*8G(UH76(&6B&u#(g}41zgMdC#Z$ zpy!G|pTY4SG5SDO!PC@YVCPMlabdz>{q1{nZ#uI%$TEH$#pisLs5-bC34GM%Y#8u~ za$e6E8olYiI+)}?!bv@GIUfn%qhysBxI&R2cJ^u#aW8}M+de^UkAcf*e|f6)Ksel( zmlpmzGS-&<5!P3!rWNS0Rq6u$L(nHK{)7y-3wAdn&0sD|#&5k5k@7Shuu>8w)cAsj z!D0B=V@5n&C z!CYQQ&|bJIDBM!LuV4CJbRJU)a&yj@5GRVtoyi)a7B5> zW3oGd?R?1klKD8C1-YlKg1t#Q_L=m<+{e$=Y)}IjN)7or8d#-yVtOeAjywrC9zmOy z4B9mde6X6$z2n?17+fZ&3aiC9K}tn$bH~|J*xKshcWyF`Uj96->kulun=M#C5Ne&% z5YoWpuf@l96iykhZjclcIYn_L-&;)(APHq9Qrr-~=1cylzEQx|f~O+NLV2=+^XPKm z1#yzAM%t49G+nmrR4YjsKeFC?jakir@oGNafUq~R-dIg}w0p=Dy%gMv{l1?@<#h?9Bs)NozzrO-MA2ro@Z< zu=&@|SNPph4Z|TSfza`_d|{JT7dM$#Fa-&jYhZ-IKL3i?(F4LU4Mu%etwOap5~aF= zZGCBV+u%E&qzc8V)$7)FJaAWw4 zTTjs*nO-4N(fQ7-RK5^zpVO>mn^mE8WO*=HLY`q0NYoV%R8*pb|kODyA-SLToY4VS|v;#$sw-Zr;rmVnb!ch%|$j;r6pyz3*QzI*+E!^b-^ z6&AltKnFGQ7J{?Czg!o05M|`gbFn(++Qzxq;_cs*{fU4EBd)z^cl6T!8;=&!lU zU1j(S>yjlN|A0xB!%s=9Qa4CF(fibFne2OuCk>D9OgN~4cs=Q*J3VEEeZh>sJVZD3 zl77B$mt!W>P(QV;9sJ7t&qS3)Y*{;Z5nb$3~_}g&`y5#PfDPXRFn51u5s3l^=((y|lUQ8<~U7wtPmv~!+_WFKL#_#MGJ17N}&0E@> zwSApBwA|!xdh&GQ{lviuGT*8Rb-E?ymrIeup;~Y@+Io7U4Pk_i>LQ?OG5@nb0XnJ6&g%cbvZ2E?6qnjnBsXEwM zs-B91`x=TRr+dX6J7>uzhtW=nwAIvW&*`x=6KN;b|H z4d$~-aogw28qz#^~4Fpm+x}cR?o)6X*)e?>cT2CEh#rT@DbDY$8>$Xg!X(+7ctcTOc$E;1)b5-y`BCm^F)U1 z!OY@qeNL+s^b&7M%;CR`-&VWgd`6G7;tMeNy_}a#QBH3ea30n8k00CNoaX$j!~leQ zid1gf!d=uCN7)aF8)&s}0>@AA|Aj9nvgRtRuuv_RphRVT=jy#T=w|@=)(94Gk6h{JOmPvo^1}-?wysp)Jt%L9~u#qnk2jXT};O-(gMzeX3Kr zfrgS=7Ual?tPNrQ^GnJhC|(!pGnoUKL{m$oq;zjrNKY8TIl8%s+*Z$SJZoseLFJ=! zB81z)?0~=c%401_#9$(_kT1iXF=+X!ah|}*z$aCxw(rQx#LI{Gn9ShKvgYoe>+a3% zu`Nf{i4796WQ!~@|MW_?vWnRHy}M1wjqxhG8AE{QoX(4IKNF0tv0&#tb$Nj%jO**CH;8&p`>< z-ud;pV6Z0&$)&W1#zf@hK&P{0CSC;UZ0E()i{d|(9%Q}giCQPoMCB~lwxf~Z!v%#W z_$P_+yq8r-eHb0s7!c{3=5I^-AuDBeGK1HoOiUn1rmAvORQoG#*S_`-zNQtXT5JqU$zX4T zNImCxAyD@6xI#@g74MQqx^1zWUTm#aCB}C8WtKpX{}dTSY7ej?F(faOW^Y&g*Cn_3 zy3j?|g2`-b$A;ypI($ZVu24t&C~YKfSHJa*l2%CB%VoHnePRWB%}8@hlhiwmjt*lo z!F~I;B)(qzXbI8jHB(%TQ``5kRz4GbhhY3R7;@A*0YQ+nw2 zAWMJFTD55Br%j-I{igID}-q#Rh9^6bw|Wi$OW^e7oql6hTPl7l&Z& zz2O|MvcM&>_dDhA>TF)$Jr<*14iLuR5AQKkx^Jw_|46T>6QEQrl)J{1mYMQ#0m)Kw z&#&R>9~*B_dezpIf-`Y{%@TofTPw)nlJIS@-+9EZXWtia*@+^(K@Sokj1TaRj>&qR zTpSpR%1#&kQ7Tl9PnY2JcKOsNDg*ieriyg&ScZirPpMa#Rzny6q3l;k!Y_5AHWzf zfD^(9z_zCWCs&OygHpOQe!`VW3Zxy4{*C~#sWkjA?y?OLHOK5~6$IQ2_*&;%w_2kJ+`D^|dB98FX+J=fO$`Uu|0 zrzk2z{O-llAX6kbi67<<)o7LFqm7}8thu0K>C#5!WHK7S|7! z(CWzBkjGO{p*xX+z0IA7KcC(R+@+WPEVkG=eJN(gl=S^067=h}?Mt+69y4(WVl%6s zn{YnD;*;#z(_lDcaFVn26yu2U^PoGJR(~Jhv8TK!z11mW6g*Hn3zZJ>LelGUU+;^X zNo9Baw7XB0a&Z|n>(n!h3QSu3aP#RMoL~2~KhdvmP8H%u2r6#RPmTMZH>CdSV z?RAuKcS{n`s@bBQr=X9mxmHB^vt{40ou7E#V7okt(Rr!_LC>7uCPmu6J*Xd^F3f53 z@<;J?y1V&0)8QO`Dt^;vxVCnsnbSX&k&Ozq-ksDNUb2oaIt3QdUnK0$?-#x+dbNmE zWRG$~ZJzHS>Ko{tHfjqIHx7Oi<+PVKv+h6vq zzUN5rJZ0?RKr%$%iy9x9d!-6Rcoeg$@$JWc&`L9`tD}Vk#K;jdf-%0mUI=oQG-?hbMH)F5khC3+GK$P>oaT0-MNtBZn+nCN^1ap& z2QAHUF|$diErOrW>H1tE>tB|PyY|+t1(%C7rk~)K3NO{E!5CBiC_a5ox$mk(O)+?o ze`%0N(V+LvQsxuffGgeeual{7?0T3grlzbCVKx5@mr(|03>pa9XJ6k4Lhd?H#qN7h#w+yJK)P@lF_!?oR&ycF(7@5YPuO$5- z+`i>hrI01VmL3UT@@pb-RJ0m$sl>AdzhN9$7gqz z`}c|SsOOQQkFeG6>IIdJ#IPS%w8gDUJV7dNd-&zKwdAd1{;KA8CfUaK=DOZ+V0xI< z6wb1p_AoWevU0m}JHt5YTL#17Z4}@Y{i7u~n9aBJ(AP6`2P58<&|@~}+=uZ4`ZI;% z>N)*Aet7W&XT|qx=cagm$d3kTGYK@nf}|wgdpS*KJ}x0EfU4o1sd0;sm4piw zVR>TW#Tb2Le3Wrb7I>r1H*j2edF^g;I%xV&vx*66KU8k9p0zNuN_p6ISIN`z3Bxx1 z$=FE0+T?OQ7SV}k+2*Aa)p-#*fbZF=SA~6s`bu86F?6o=yQ)n8QHlRMT@ObWnWN0s z1-Jmp#G%4<|F@9B8(xxc+T>NKnmaKOy=a4Bp10H|r&q5xUXaMqpaG{|vc^-zDiMW) zQWrBb)%UIp{x^u0vvEc03^^?5^=yo<0EeB1%65K?|Bs(x4a0sCoA4cm5Yxt~+sNm6lBF{LWy^Qen za!kTRjr6teZ=SqX*QCz5iaqFTd}i#*{AiYIBR+jHT~)lr8nL)ErQ7*OjZ3D?0Bjpg zljsLaITIDHgDO{DuUpt}wW$K)J`N0YqD(ZoM^Si5ls7`xss?sRIHD*}x-h zOg-8*o-k3Rev{DF56IktzrG2zGaI*Rxs%sSE^+%6BkEo0R2E|*uD$aRzWb+mL7L>qGEP1=1kc0|_PJGfLe1{=5SVST?2V7pm=~6}znIF<=jDLy;KXcP8 zp|bm8kHMoNx@;EF<%~!HOgMt3F5p^2FU;`oC@5{D!t2if zWYwzo0*&w3bs4xpkAV^aTjd7#Z!04o$RvVPR?xAPGNX!>ibxx7+uPFMIl z`O_viGy~ILsDyt<N34v?!BYIRmH%WkDmj&AT>;7p}*?g5HbKws|b#Xw_7 z!_O3>ZcG`eSTi_SLE-dp_e&wdIuMq0hc3o+rTF)MR#-`*^5MoVXa~L##(geYV!GW8 zz+#U59~uc7$2{QCiQRGQ>gO)G?7kBIwN!68GJ)~vc)KC9EYGhS9;4-Toi?3eEIHZg z5__c2sE1O)Z=vLniY^%Pn1q^BYi@4A?#f}8n^OylL3*r!@HiTa8~w2>DH>of_&zJ8 z`Az}gj{vn1m$)L4_z~ap?O?~pVWTbO6+Zo*@q-a=Rf%dZx=G(Qb;(1UPqmwxQxCza zA^rv50eMaVSEZg`3neblrevnNZP|CkU1x4!^HQ>i8v56yFcH0L#}Kd!L>&vv+*Mn5 zT#f&|`s<7M!W=xnh>j(-aWGI1_g(gWBJPs*^njJ?`=#~=w^a_#rYCqt(`8d0fD3+lNW05&n@;A|!-IjHbmP31u3>8(CKo4D zumf`Awl4!Txoi7%|5RT1_E1t?*a%{6768QG)xWk|E;|yQd>RWl@|#B25U`Kk=KXf< zl4?j6!IH&SvDMCi-@BEmqrEF&uJ5Fz?mpy`y-Smxu-oaI+i&VO%OS!td8c`Mt$I>q zgJl-+7!C2b3EHTN7H@rJWd&4GOXPct`KBB1$C`4EY&qng9RS*W=IG$OAL-~NMIWFR zsk6_;i5mKW?C!L&IxglXf zELPO-bpTF2IhFg4Y5S5y`JHLZF)>KjSS3|l6EG-75`#@Y%-H%gs`@U?S08!vXFSh_ zvY0joT{jK3YX#pnf(T6Q<;EV~Kq4Mg^Y^NMTK&-amdk6})>ML8^MO_t4Mt1{?Pp zX=NCNWHoTd+6fZ72(scpkjPCG_goC)0mukmhlQsBF%+mXl>9}Ot1DbIo5KEbyj2W) zKcDu&My~#Iuwa4QX*CN1B_w|!{=D~$kXi3rxT{{+f=JK}w+@KC+X&s;^8+=-gRD!k zs+aD`I5~5D*=Aq{HzBW`Eiv|CN_l-K>2vdH>PpvnXvV2u6T<4cz*rXx_iAG`S z;%lBDkMf1#Ue8)jkVBemOv`{H@uT{Z^hFRa0MeU2BNDk6_4>=nu(mkm8v51heOD4` zpU#>A9nCr`?0*~+fm4}>p?y#D_wc|vsA;t|(nQH%K~+|`G2#2 zFhVFldWLFP)!-~q8dVjM=BO4;y1IIA>DKAG|D^@^&j+e5^CN|%Zu-1ZTkdqpbFTCH zv+jwyrYiYVV&}yZP~G*!U6&OxtGdHm0d->SpOkJ7*K68EEBuyw#fCL>i806^bdJ-F zL?3DZy!GvZFE)8n0cMKhrgE5B2%w zqPb4)#Ky;0S9$zKK32?xQeYqNmto;f0Cg*_VL*Mm*dpoVq&`1)0)n_}t@n7=c>4 zw8m27%B;ucOSWe-;PrBRc?A6O`rb{(Z*M{URj|3hs`2mUbbokb=(6%)R+W?gNu<0W zX2rMFrHR9lrQYRG6cC90Qo&TEPoL`vXL7KfW5(dWU9_WmfqKkLFlZo*DQwMIE+t28 z-Q@YU{gv!m{ibB~&2#IFv1JK8)KT{;X%d9 z#z3hFs$KIZfsPSijaSZoxP5t6GQ8*-&u`oNQ4x=0xjY7i>|s$uvESVSpkyvVx)^#l zktu8-W!oOLZtc66TfWdqQx!eTes1Hf4RC=>t!VEl;@;*2Oc#5E$0abD^{j2hiP}kz zn{PdSvLAIQ3yD!}P73!*14#pI+4bWu8!uK<7rd;wPQMbnxIiG-4#JEO1H!#$mlagD zM-DtbOzoa}Nw1Q5;W_G01SH4tL%-z3r?#K5?$tAI=577!wM_TM+_JAZm#kixGvaZ6 z#Sp_Fehk}s#K7jLw8xFNQ&OizpFewtytdBZjkk&jCAt?AZbhnk(l3_#74}rNG$Pk-Qp<3}%s6&nA)o)ZYeeE=ECr|G+yi+un z?zw8gy;QB7n5wK5^}wW<1P#%x-(b8|``nPL2Xp1$jteu8yYgk?T40qcw0M^LL6zDQ>t z4c4cAdY$ci@O&~R+w=)5^MXb4726(^LW;-|{3tl#5zwLr>AXG>82CQNE&**YJ-!f+ zs4g@U)5cH5f-G9et|RUSvw8UR3-(EsiB(zx68(( z=@yEPg7m4+FAPR!gmY5?IhxGlQ{#F)22QO}pDej-%&f{70w2&O7`amGZZZ7e_Z4Y0 zfyoO2Ss{#f<^n>053$|lmZ6>eotuUR9K# zQQ~-esE#{TLpKF($B#!Y^)B!v^2Ux$#es9eW^3{I0hosrTeR4js8kMmR&8+OujWrL zoeBiVC(8tX=9myRjynPSnNCO^AuPQ0gswX6WL~g9Uruhjt1kWRTJuZ%n^;}kYbn+p z)(a~tuRN)q{@Th9yJcD9+>U8Fcn> zTT~S`2+3NM0B^@p9%)VmV}Q_M3OB=?GWpG@?BWaGR`w)Ec(qP`xTz<>({lt-vcvgPdRJ9jJ)9OR)W?7O60S=#9{T4^j87x+lj7A0sw5JPz<{dmX%I{h-?-?q9XT~Bg{zIq7 zAOstixq?~}iNNve^3&|cy#%-DuldB=rj7U6N`{NHnyvLlEC=rqh(A7A=tPbgGA5WEt{{KB5@ZXd~E1tfdb_=mu#_Eb^g zk3v70TiyYOwde6evJ2pD$ERk(pVOV7aPy}RMkqjuzwj6&92l+ngfjeMoy#hfs^y+D2RLgl$JJFRM6mj#Pa1S#Z3+YLNpNx(%aP%bC%Dr?TcInMu|3Hygj4YJF9ZUl%H!~DK>#18)Cg0G-jtC z;th0SV|;*qjJZ(1*LE4%pL$NC<3*YryN?5M42bV8)Eyw9nZ>dsaIL7tYnS)=@4%t@ zD3WG%J=c7cGFIA62#t*6N{9a-K}w)@gzToH`?2$2)=`?DNb3LA6r&EioqI?CrF--^ zg9<_8v5A^_iTMDeSQmJ$Pe)dLYPeirqQkn-%sYW zpU6ST&Xq(u?^B=FeZVfhNB;FVZgiVW5)9{`m=-uXF;`Cfc@vZtRB22uOByL2&!hPe z_!D(>BIi)S$-7teuKRwCzYOuzlSyqtGlM?@{E+Tc<*|h6OAX0DoCfg_qt`vo&jCGj z_W7gkx2a=aS^| zUN>>(g?wf3^_9n7B4EvdP|e6?bIOcXHv21p?0#>Ep6F*3R+CXQXj7MeiYe@?`b>%x zn`^_iIqh?NWcC!})wQf7e|pA`1M$d0kT3uODv&!n1RN6~4EV<_Qq*~@Bm$F*D9qww zb&%UBJB^V40AD37q}*-HNiyQjQk`pa+a*j*4h(7 zHwVI`rF%zl;j)N*u#PZwy3J{`sff4KP>+4-%ZI;kwM={Fd~3wVoA;k z`-L@U!U`sE(y+I!v_y^Ny=<~a;q9oi?yRVms|63KKnipAU`D0Gm*V4qW{R*%F0=RO z&iRtx@@^7F@D4|xozp!VtGPWaMTEB;3~Je*>qmP=OKnMEZU0RMW&a&33fE+w8^*>F z+L-4WYnq?erux5RVfYYT!C8Fz?9YnJl8MW<R(AYU2J)aG)L?W zk}we`XYztIBskd>X*`l+A|liG-^Jc+3t$lf0_Ud>&Pqx?cM+hoK$sLt82!pz3Dv?`rwNR{b3<+p zzB^uReED~JM6WF(pUNp}2V^gygSGkMifskn$Q6^T!Ehn0X<$cK7cOmtmdMVt<~McZ)s} zzYEq?Q3{qfEk}E(CsFSse1et9!KL%V@qKsR+K&S>_l?|>1@I`53ksf>ba$Gs?uBLQ z#8&x$O`^v4Q^XQd`*HfSmb08FZMyb^pj=QL08#t zggeo8_g>`Tb|}hf%=w_={jA9I$m2?Ynj!o9arKKW4D0Mc+j5e=r}NiUWNwI>{M)kw zT*~SUCOc&B9SkoQ;NYz$H)AV$;wOpPKg{C8$2c7>wyNPFu!V((gE?Hu8)tjQ{97&L z+)wQlxP<=^vVT}NN}3(jVxId~p4yI@>WA3qJl7B>hDexbe#?)IC(OD?2{bpUcq^7_ z%&E=~PsB|WO)*1+{ADJ9p1izA1 z`ysEhVCNPEe*J$8eOY?fz|3ZQjRem62Oz)O>eTAj2Xdd}LO|YSWIS7;(h}t8$;8hfevjvxnpx$H zG*!hlF0YH#Mr(qJh|z^)bFW7l_$}R+*x!3rRfd_iIg;JU;jHNg_R)vG!J~Rq?W)Nr17{kw zZWKC+;8%J<@8>|K$h`JD`)NxKV{Ca)hn`Z!!OTp|l|7oywAx`bAe|c!spP+qE^5iXs`M@FR~?N9WF?O5nQ98%gk*r zXt4f!T1KPC_8)Sdg}g{%!s~D1ueQK`F{}xw$$w({9zcYvGAC1U&ypf%F->tIVWRP! zFqYn=i($ZtWVJL{B1AYB**nqxa9z(;xLQ45%lvC`j8biM%U)_6fnNl*0LYmG_EXLh zHK@nAJMN6z?Ibj5!#-XPo+&|{VixyA$YsLaj8#KMY!)~>hKg^p#v*;t-dnF7m3w*F zh3&+bJ|C}Y%8Uzb#lZ3EYokJ2sczlmvS8M zDbyK01rNC!jn0XrJz|+F8=cf1P;sHzWn!Ls0)%6~)>LGo%pMsvq&(XDTcB6H2^Ptp z?wKrsQT8#iI3&S0IJ7!QV0_q@c%#=k22dBg80zC+=HsHY*|^R=gWb%_S_lC1V1 zytD8toqOgEl4u@LCNw!Qk7Av>wYX{G_zeeddD3tEKl(+7Fei=m6lSN`EO1zlQh}z| zEv$rE;ZbA6)ZV+&i~m)${gN0}>bmurwf}u?2y9gx6CiF)v4gFr+!S;uj}8m9@{AT* zFGm*;L*Bnf<$h9+PIc{XF-C5x5;o=dqA|&KAXU~6a~hS)2h@Sd!06Z1D?uB*5@|Jm zS&3-63meO%ht&BExq*}Nh7NsUHir-6G z>baD>=-mEHH_k0ueZQb0S_HUI_&s|!63}MBzxqNe?nXO>Do&6m#1NFaMjy->3BA}XN#af^69~--&yV)T^PT^8IvEy3# zxnY4&idIYf8hPDys#R$6Pz%ECEtmgmB|&p2L16?Q{UDBF*N%G`lRAAM42rKZfxATc z@Z(Q;YaLJeH4^~lcAF+$8@-00n2;a}O#wTMnt4OM_pqo#!Rt8qPbEpcr9Apr^*^6= zKjTR8HL5Jdh7<?#AD}B_b(z?^d9agf@uS*Go=4BxsLx>zz^xxtqfdgA)HF zU3*zlq)gE7RF{9wTCWVeL~8h2`)=sh1yYT%2890l;N03(?{!&r8U>=O)>k&fI~iZF zEys?32J*{NugD)yKRSk)s6chKSDQZqSDwCRC<7!1O2PlAWwwCM3d;1ds!g zTkpXmWYO(LXldztW~(sqWb4%}b*jm{%ck44i=kSj~-TF9ZbAp9jEgE}Em+YD3N^WN+N7G_j5s7?Tg=fCbh#6#Wd}O$ z%GB&4tV-0)d16)1LTby-6=|_d1Pgxdv~If)`H;Ing2t5{X11T^V-8c7@19%V*>we4 zBzpwcK)BQ1a~0W%z2b0rHdg&&Zv0$Ug36tooH>8TXng4V0f0fEc~<@hPRTkxQ}GHO zNr?2N@hft!J|#T}EsU4Fv*=HT7uPQTU4vF?ISZAwl`VQtY>haTcN3We(ZILoXyCT9 zXTq}4uWnJFww5ROyI=5$+tLOXxMd}%&R)kka}NQ@fT=Vl@x9m9V4yqO$O0KY`*8I& zVt<*+&)7170|!50>$`aEMBby^?j4#4{jp0(`b_bv-?Zr&p-U5=m1{0t$?*I%wDFaB z4saxd;Puv6rn!%Oi9pY_E9>-;#a&Q6rqFC)#ql_FrIV!fhwRef=e1AWtfdGo&1+ zdTG7i^$mkOc4SrXti7R{0Z=^RQ!jRrxTtYL?kdiBfL1+?6GL(Se9p z8z=NMp;&0{aDPKCrK1$XMbSO2M> zxKhO#<2t+saPR<=i~8P&8-juSQGqLFkR4otg_rTbt5KJkuIe15AM@JkL2Kgr0h~=2 zU)rV6sr=(pTS}=c^z86!T{ZdXl{4#e%g-%OW+3R@1ub+xG7#ZP@U8z=DS5D&s-KRh zvHk2nFlR-}4*9j>LfEp#UbtFEVS?UN@aaB`Y>`f1JcZ>TV!)K}HCntJ=_?29>*PF` zoGkIu$asB`Cy%k<5?t-oDqnNMR^zfy&MBE1j*&Yr-qy_o%oSG^Gn^tw0Uqz0Rcqq( z%ZYDnY191dvS{miR zwiF#jdNERc}qT^@gOU1nR1UBrbVxx*B1PSdjIyp~hM<+af zJ`6z$KU^4mYkcJm+$9Z9u|s+zzkUFlZV)hAos5{nGfrwpF}3(~KXiV(g%Sba0B;Xr z-M8!L*_@lN)S7mBPKdO7ym%;n!xoa>N8}tA_uP(gS{;}7B2)Z(dxRFL{y*_b&aXp( z3HqnG$T*znVg3vKUmq$X#fR#Ii<8JbfQnu#IbJtY`reegdG?bLfDN>MEUSz6q#Uyb6 ziLr$UG|X%DdGzjG`s`F3{SXFV1bfj^d(Ua`LF*NA+VxxCP@$qfkO#*_9Rlkuk_K8~VC1KriS$&-^)RwPTqT|R;rC-l!)+%} zli}{-(j;SU0k-;y`;s3}_r2(``p0tH_ow0OxplxM`tBv)*7zTHgcKRo+`zA;yA6(!J#6dK zl}rmtBwi7ZbQtE?hq-ogPo0%Wi=NMmD#?Q(U6!xkF@07`l}nAMfwK*~01SHKNX=Q%unRVzP zH}zHEBx*d1wt>G%D`@F)q*lsLg< zrsPRUC2Jmx)0eQja(xcbnY(b0r9~y~)&J50xE;f}wyT)p0RgB~%=Cb(UnAs|=k9M% z@vYv~O~Jwa(k7o|oxMIj-KY7%;n(#1MFD8RRiLE0k7BIM_HU6b{h{sRGq!`HXi=nF zID&a!Mdj0-g0T=`TF2k^&9q#ovGA6xkPekk%@gf$f}^(90CEw_1<2I-I3eu@0laiu z9O~zji`~gnvK~a^E9cDHdYQoN3BJ>WIP{TuFVl;EGF?b^`EzVopex|Oq?A;L(;j^2 z%g&daKL2>g;%*w&O|9a7uH4(=C$WFFoWc{ov`(y-p90F8fpb;BfG#2Xa_#PnIa8+O ztX*IZCmx-D%gNjH$#|aa9ZzciTeL|=kublRpsft17Z&X=8ISy`spl@T;*i@R6;xw$ zGKXhTH=`D5a4}C*I@`>U>=V;!M-^JKxuH1i2+aZ{?mv}oh=A^w6R3908H0&^vpSxp z{;tgH=H@mPAoH%Wh(%~eETjjs3CrfvgLW&^_Vfzh+8u$?&@*Dq9w;DzA!#OW{^Xpc zn(;GS05VRj)&5u!F5uBU@%x?cjL*vaT}@$wn$R7{~Lm_}|tjVZHNzTN>B-;zU%NX|GxhF<|c5 z6eHD3jZgzS7TH?7Spugy<`*YGn%U&j|)?%ERml&Q9&n2RV0AQ~*=JaCcwgE;GA??AMU7uxHm#)rK`u;TbewX~yyzCFRS;rN_iAE16R z(ynW@9$QgG=Gl4)r7?Uu*jaV}>UD}|YB0>Z#RkO!D!>*PLIj8INQ$!Oz@>h?AEyz> z<5mu4*$$ID|3&_QbMhRQY-EhB5_p$UklYnv?O%3BCI2WbgMtE!2@Pwvnid{R(;6&b zlp}BY*`?iw8!2c#d=X@8hl{&e@ihj^5;ip;pi>EaX@C)U?#%6Gat{jCPKF_#t(jEQ z)HFK1JHPYgxsC`H6cfjTam32CnCA|}mo4Qe8)djJ{wEi-y}o%;ge6Mkgm%MN0A`$p zVipxMCRB|Xok|7Dr0P{h$m{!(!35$c@7TX9W+jPUlF05kI?WM*G`W>b#iM@O)MCZ} zX-n5BHH)g_@cy#@WA(zhfAAhZVA{E{&jZ9Q`2d;$O;pO1UYOEkTLvtSoVY&qtjgH) zjU#&xjxTK+cYW8*>`Ic_1NL9zw{0WMUIXOWnMXw{Sls#$WEdjnT zSJqHEDv99Dw^310QsH>G9!fap)|Jby3fYZwftm#kL~aze0e~A2#MIf-Q4-6|TzNeE z^!TqMu^!Ejb47kcUE{QTNEmD$jfp<;VS*II&z^KZ^3cqRRex&Z`b$85G!-5f!qOt_ zFN)`<#4F~PBdSDy?>_Qi3eV-G_$#gn?b}~kcaXkyD;4Q1mV5pFSJGI__-?fWG1ZGmIhdxS?w%)+zNHqde(dp^1pp#rF+W{@%3GAC z+pNp^G{g{(ZPrOiB_f}_Mxtv=(W~#mR+-Fc-bYtcV);h^wDOw4km5OjA)VNvK5>FbP624C?$~Ko0F2ukLYkavcelMy>0u*2q${v3(zo zYHa|bTL(5VWwC<&$CX#Cb#Wj6OM@AN;AqLG!-qdcNl-`Pv0nHSUpcn!Kmpsnk;n$l zq-RSm5EO}&9S2Ge+i#*hC>xjP@!G!ks0RrG%s_p2j-*!k`r0lW;HY0vE?{QwAVvQo z&?Nsp*WWA7Zz z(WR!5KP3oNJRPN->;1LQ_wg@~r=;k<&S}4S-;LaJmcR0Nz3opjW-StQG_gX8zJx)j zkI_SMAyrzkBAvhXhc4uY3gAX((b-uGV3ETLvpVx*4d0vgHVrg4l)3Y%Ykd!e>P8P8*xJ54lQ7GBvC(jy!=DrtrlJS~PY=SAdOxdsN6XzgD3Z4JfzAg?=N=!P!6 z6;AvX4&O)(ycg%G9J}5Ivz*6#(rT7#eT%7O8&ms^V=d@{`$Y4A=lhZihn?$9Ilh#i zxVPYS)weoaduSch#4JX2PoA>W z8GN~;f&nkWvu-k0V_$Vfx+7eg+T6q}AEfPzC=cssk4~qe1SK-}HW@sf^SwlX+~LPn z0SdAMEtF}V{!t5zt{&3At+t@-^0jjh-!=H#-Hsao%d3LDBxHGU+wkTHkb_Zy7$nCk z?p-M6-!hT+DKdy`XfQV>QN{V0+e5<~;D3PFybNAT(H?iV<<#g$EiJhh7i6nd@eX>1 zx|5`C!4P_%2C4yO{`gT+lPDO%cWU`ncFVo1$BZpY&7ri2skIhByN+4n7#L!?>eWY? z=1hv!ZWPZe(A6q2I<(y-14!9O!`3KxRpA(OjQV+|CzkEKmFbv~T>eR4r{Il7?bwge zfElG|*_1V(S+($F9N!?_EQ(nxK#n)t0x5_hWt8=#Ee>xZ&HJJ<&iTW|Xz%mPO|Jq4 zHcXZI-!mI6)|EDGP-p3z6((8<>Ffobl39^RR<4!>)X+l}3is-5H>8~i$A{Q{lA9NH zOFMS$FaOb70inq)zBXHc5I#`O&5<+#l_kZPxS`f#&))M=XHryO^q}zxgzOTCK@CqDqqq(9V-X=NTZilq8~4af4Io%3xa-r zQ50lw%U|6WIfrVJ12nuC0K;Fg|Hto`3Rv(9oF-%aL%33Z&??SuuEmKdKG@~$bIs19 z2Y-?-&r$q{yEz&nlZF1%xy6-H^U4#=-x#*)*{~vgvdmDUuSFuAlp-{jUTQvF^d}yO zb58;HToDW%JW@WoLs8*hMhF6^G$L>fYhiBwh$eWsR^~BHnhn}>{uHly+?nWz(x=+P zjFb<8g=469+mnoUk3KQ?JaQ*%&0hKQwHGSbeXa;(D4=^MJ)&sSF`wo3L>RihUKU{x z{zx9%@z_@S&k-2WkKPeEEOa#3=B1GlsiYrtKgW}-_U_M7=$&tQO=or%LC+Y>Z9|j) zu^uk>lV~Ylpfd3**JMKdrt6_c962EDfaGT1x~kdDRgv}8pBC^grR{TjA!%JJ3J`es?+enC z9`}*BqzRFqn`Sa7zD;cnuUt2y+UGsm>VRV%NNL%2ZEQSu{$D@hN1=6Ar*L-l z?-9;i@G)RsiVOxl?Uc;-w+%xNqVTu{>OMTQ+ z@q%yuNS|R+5KXoUgS3lwv2k8ej_PoN`G^h#-m(#DNsn6Y&r520V!%(+X5%Q0z$2_b zE%kocQN)|Mk-d>vOp$a=k6EWFAYNww0vfD=T~y+d9DBe1emhGDz;-=Zp%`7z&G4gl z%Ys&PU=5|gL~_(Mw={Y>MIwAjL?_-X@G5@^&In|5-h~H0qJ^B{mq%uMVj1GjoXIfG zjs5xk`c_}Mqot){UL#PudAZjMmQ(s(zGVrSB*h$Q$|H#(aK9Xj$>B^qgSTzgR;GMNEpOeVS{iIF7LleR;pwc*JR@HnH ztAlI?T4-|_0_a!-P-4G>?L`0}uD3lrz9Dxj+$jS_48*H8yLhp?{P*}{MSZHaUN|Bwkm}|Y;0ot`XB^$N0@bePX=0Tq0UWhrS z@7m_JBA(|>h(`&c#el6(F*_{1w^JOrA)UZMgY7@D65ERokD9MyZ|mXb%E8SS(RLao z@{FwVCmpQA27Ku8u))R=Mdzeb7sP$DeS_oTL zsl{?uYB5}^Vgg{Rd0YV&hZwrbJKHk?+-ZIer%-*_e}Mf*!-+>l3(*e%8H#ht^xnwV z^qOWyKV+WvP;AK4oJp*TI+Zu@e0^ms@gyICRv)9!B5n+8)ea+ooB)^#q9o?LN~ysj z!1c5PeYfH^Mdc3;r`PV#;MA{VfcaZC`&qYcGOQ>0TKWc;8E12!X(t%8Qi&u&qjAbkngP0B&3&4aMt zg8|ncP_h*QIW$No7U=1ms#yUK-lYxN_2?e*UR@mlhipUDLP4o7?Emq(8WR?$JMMIl#=C7+E8 z(dEHKVXbk?^JR}NhL#W3un9bsj1pt&upf?mr$RSDQmDV4KdL2{ES?w1d{gU~11;ug zWn)nqVE2BrOb?E_aCeMRTU9pScfC0Te}o;E0iMjCI0DF^ z@6}o}G6?UDtAPCWlFrLEPXX~GiAH%j)j0!ui%1tlVgsc%qCB_;gUH^c?qKRrWt)Kkb3 ziQ3h*5T*u#G>Vf`_6Rj)LTF-9nuhcZh*ryQjA07~Ek|gnxRy@9Jl$Z8?}=*)23E>Z!sypW zn%8Odo{0=}i1bl+&Sbz_)CE_du8cZrAt$tM6WQlbn%OALE-K~$pXE;*_~NH+qwh6al2-Fs zhfz)bt?Ca(PWmH-s6Q}lce{ld#^1cxqmRtt0=52jdOzX}It!E@Q;6v^cA z=L^o|&ENQ(+MD7C z{u4IsS2TU1jW@dI5Hq;9>5MdqmL#gLQ(Txm8;~V(bLFeZiD~Lxpd!@q)Tlb<(ktQT zpSe>gKjD(lqFzLiJc!NBorBUe!?lP>C!F?zyJPrNSo?9>Kx6K;dRj-hjDu766^n`& z8S_ySZAwo^l3ihR15({}SqGp~0!H8OB+TzNZ4{WpyHt;+q~dI0Mj7K;K*{TPNtc)# zL&@T|h!Q(F=J8{9?aFyaSIxzNMgb_4C>q>Aqf@A`EJ)bu$qpjorm^^7Q z#*Kx|Ytlv%eI5;?T7dgrHX&0}zQFD^WZ7_ywjTq+uEKU^NnYGF7kLa zdycW#1_vB=X?J*C3NL{GQojUkDPyfH6@@5{;;d>(tFil7pke^D7z{0@qx`NJc;PUl z7={&)f!}O`K|9O+G&(07s<1}jPE7V}EfsCY5IEG&6<$%0ILE9_Pabge<&o&WsON1@ z{wHSy(9~bS9qpcG{)kpNtVyv+J}@jkiz9%5Hr}MwjHH1XY|h)C!`|K}4CYeHnO$~D z8AjQF5x-0!Pm5MTE2 zapE?YNh6(6G&Nvme$MNTor?#iuEvP3@m-xtFMyV6BNHyWKluTa>csu^7Vrc@mOJG^ z?}Ez$?9fnDBd-A2p`kT;eIx+h=S;YsXd0(j}gf7*kNc1bm^q|JY9VvhR#heYxw!+M)6R@{6CJzZ+E&*OoLve z8h*b)N23oE8y*I9Lb!MsbXO^&BWts6?CW*@-=FtqXyUIkAJI7+BF<8psk8$DzD>|) z&{FYero5J_6YFq;o(agaWgCANbZfer2vUm-xySv1yR7Fa5HaITfp7yZu&Jqx^mNVNz+4yeKLTH?6t5a^aiB~++(0WmBoiChfeMF zk@s0D7Om3Q{)ao3EzV}3!5grLevjYW68Cx1+545!c^WX$?xTp1Y2rUE(s`g7BGB}) zB#a{p1aZavQ~iDIGs1mU<>V#}46Ey$o-PW5=Z~RV0VF?eOmP6%MAbJks~JI)vo{kz zxmk0v%{|@2&q=8SoqFP4-I=6FAaU^Hm(6;B+y}q3Tq6_BdGe(@D8dzI)Ip1 zY6h7P`%=cC&{d^B*brd7#26yHBmHo>!J|m4?a^B8c6cncEDCbv2L+Ak1?z9kfncjV zr75u~_5d!w)}w;}D^DeA+o1Uhc0FZTcmTnpU4924c#g6|A(QR1<&J9}%m?wPBbydS))#jKY7i9sqHzP7N7x!Dp1&A$d(UF5MPD4Bqv_!2H;=o>%7c zi$?MLLTM+yWnwyU9k#hfo+7^>kv|2Kv@I-LbIDU~SiOeE0p+)W3D*u|TkX=IpEC}a zTKy6?>8s^2P<;n(Wwh$!r4&*1r*i5~Cm+=(%@5V_&>CE9SDC0qCapLr4O_k};^EHs z8o#T~`*Bg3`{xDr@uK1hQ`+=ka@~F?v0*uPr)fEIlla#r*Mw7VztLw}XgVM_Aa_%B z`NB7n)o_1TH&ybX1III;ffxaI(d0vx%zv%ki6POpuJ%v`)_d0~+qpULmT~AzZ_LI; z0;|CVQ*cX4BKB=AIN(>E2b?f`5kxVyYG!mf(pAzOQhIn zuWnbj=$X(buNDppyM=J4H?kRC(EVI{xghJjn@{jt&$&c3cYcX zSHSnm98^c!oUOs$JyN6cp%7OlKcbs>68eWPsOe4Gh&=QE5%tz#QGZ{w@ZiWG(x5a0 z(gM;QGDssSsdPz$Ac%mJbW3-4gMf4>LxXfUq;v>KBl#Y_zkBcd$2>g1%zVz-r}kQV z?S0&GBa^*U)csP1_;nc3cC=s;is3DzO**);XZtR;>8o0}PGqVUMVHDyE(;2Delf)Y>N66lK6p(zNF8z{x&Ka^hFjizcU-nC3W1DYCruVVJbVy&i_CXUi z?_pPtHo^lqUXMT|8UL84Mtql0M3_XjSQp%O?GA{i=Pi;p!2)9PR&LR2;{lv z+Jyd$323h76+6Q|9dAm>p^~&}5CPO4Cc%a=rl0E_B2%!A{*DpX-3Uu9e;+`CGxfJ zU5XUcVkm+sL6gYcQ&?)2>4`$<^eY}frniLY_x?Ft?cEixEm zUAoHss+)sO#^(}a&xx>$9M z&ZW9bfDTL#*0-$d&9RHd&-vWwIyOM*(^Z}uSVi$&3k2mU^K$e&#yuKlZ}c~_ zZ2f(viF1+~`t(*K3c_=-nRTr0zwj@RF)pG?^yTanGB;4^X#{0Yqh`M)C;W0 zFkV+lM@Temp2Yy2IT7K8@^E=|8ykJv_O3oA@ZE0r4H=HhzU|8KWR^-tB+?IrC6uvR zjWBi(XW36p;F2D{pB3a|rUXZ7 z_`PjH$v|;|AITyL65bQDXItC^0WASXO_qK()a9I9XH{;dPgpo zz9g>p5Qwdv8%}CHVB(yJPD2iOG+uN2%o~9m%7xN{+KP5#zHXTwRbA~cqJ2u&vWUqRP27MqvWKJ zH&97|yvhJk#b)vgJv}wBX>O4*-PhwUDcomV4Q;nXx#L0u&tyvvBSS~puyey zFjj*x)0{uK^X({C-DoO5qD9$<5ek`{4`m8^dDrbQG(S1{=T-)uJcnwURlZLmu=x4e zqWI2*Y+Q%SRn<~isgQ3jbpy6Z5RT&4s+&GwLs46!n1GY^2f?pIV>{(Pe}Xlev^Bhk z5`#|$+O+Li7Ind17uXnLpk}wL8~zbPG?P0*-jUHmDU!^4#>}aj&F|J@d(pB7Sz*^4jp?U-+=w;JB;zQ&h6@NZaLV0mNmSu5oft; zcQRF8-h8n96X#nhkvDO&V;4(Lg6O9+D?#umtpEF{4wC=cT4}-}!>PH<$e-a;SW}v` zpQ6=(9rOQpi0!{Oso=%aC$)aLxf_{KIwm`50cnjfS49y$80L@v*M$EKZeftZqgQQo zn$iqjl?tB+XvqHGtoq+uy#tMt4y#lfe33bsk8hJU|2HsXw(~uUB1YL&EB<^p3urqL zl4pW9z5}!mb#BAryY+}j-oD^nPbtf}32AX4+#lk^?v%RsUq{ptWu5;bz(t%WnzRt# zZoOFPLQ0%94~5#qfq>KaIk12Zn$KstFX3Mg9jJRouRXSkv0D?)QOgE#%f&BgLx(l^ zWOs?{PA1Yqa7$w46a8j4jDE=4hDi;%MDZx{eLoR(XUDljcS)Brt>{bPaj5VV&3{_5 zs&taHI9zxUJ{c^3$d-UrUVYE!gKd@+%D_}Qif{2qAJT!<-hu`BI}xj*3yw2Q`vv6& zQIOF{{OolQSTzZ%+ALqwoOAcQOupCN>|jSsZjZT&GuN8CCbv)tku!)M)N0Rn0HJ75p#P*-`bRQ=^36z%aOK8f(r=BqR5 z{;~8JApyza7i>}13Y&88(~}(r`Ci*CUMcl0+AZ*Z21ho;XMR>2B(mFznTg-7su)6j zMo{oAW^;rkQNSYWz54G&+~C$4>U_7d_0#UKqM=-QUAi4_u1z>Yb|@1@*_;~M2a7e! z&CS8n3Qwx0VbewiXO6wOtleHk@(Jq_jbFBY=pE0GGTyNg{hA2RcplK#XWRm|xgHxf zoyLKKq=w8 z{TcmWD%`R<)BB1<0LnZps#Ut~ND!)8B11TWp}POuUeCL8JEq44)7e9}wa#rem_Iw0 zUbrl>>=o-{z7&5!J28s|z1gDP-hy=ts&YsgCiDs8D3;dVj~s>_2&B%X&e$uSP(z;g ziL+%$VsxgCYO?%qq08ovlimksMc7IV3{Jps4CHd{=7@vE)1gHgtN9Rx)DTRQ)%H5; zcCr3SRE%<=TU>C6Ginx2Lw96{v?iuJ@>e;QtO_)Iw~5WDB>JiDX?{1{rQkt(hgb`@4mx1+6G>(sfQH{HWbJZJqu#-D{(G9r-+o zChB1y{jcOk25bovpzIPq5x174>yj*4MzBGDiI%)$^>ZjkWwOls_9usolDRoPYx+6Z z>oJgOxmVbV6&m#oL#~Q)MwC${KedOq{=h1i%@JvIvR!3)tS<171>7wT)bW+S!QP0% zIV`S@$fbMv9v^rdQzrst-zdb#Bc<5F7CPrYUbVlOX*&~^wLr+%P?SWI9UO2DyqJvc z+owLWdTBs+%l&mvm`7edP4`-Wi`STuxP+jQH_e_Q(N{bDJ*!`pGsX{R(r1A@uYH6UWy_3Wj&JwL`IxFdK2X|<`<!9cD_tgH zT*^pdHIO@0CXDiHFiZCPo!%dcOM0ILM+q<#GK#S`--j;FmLCyLWkH$4<$~$n-K`kK z9G8%qZQ+h)HjT{LUEzOXF`WDovNvdF+-QS4?cpVQKf=}Y2@^Hg{PkhR+w9NbA4Kx# zLZng%8?t2Dc2nEG2bKr@J!KV#sLBy4@?m6^?R)W3Q&90V@hjQk5qxuN*}ds`xBX0Z z8M!{{;{*mCnwO`XY~)s+z*c&?^SPNd*42!g`qCW4)38`fd32Ua~N%kDAlV+qhr}s=a@PH)oj?wRg`#Z@)RgfLtZZ>SO!!`4pAzTXC{k z(TpS}iaaCKh979~uItpArC%RykSv71K5;>v5yWED`$zt@*67^s7>f~AU3m=#@O-dq z_a6jNOvHKey5?6Pp(LF^PM2pgmwQuH#gM}?n`sKNvGEjm+^ZNEahVJiPFaHZ;zUNo z7%cOeBd-doa3ZwH;!=@aYA}Nk-RU;mS<%p>1c?}#uaws-lsG4*%jV9Dh7)3T>**Ep zO}l8zTv4@genYt_%!9cAbF>*(Q4VdrK^X2yyr)_=QOWc4w$coEvPz(W5bH{yrtHvs zUx5x0@lC*b#U^OA-4Q)9n!+I-VNFVrDMi9HMX`dh$RU+^2ZQG7 z)k{V@dRAjbMq8rWa?Q(X|BBh)Rg9fv1G zxfA;n`QMWOm&Yq3-=kK6ElohcN~X4J3Vz# zOX_h#xlQim+erpA{7YICC#9gO@%#3zf*9<&z0~5NL{ZOP@XszaBs|oo7Z>!2Wisdi z*dNNwwsOANiFNn-KwFq|j*7h3uisi#_E3|@wBXc?9&&p2zFDTt@kPzjbKbANU^YKn z8c!n`j~&2IOM_;D#gC3?Dbx0~(113-ne!0P3x(5rj|mdz{38-??t5xefyDy;sJEk% zbmt-*j$!}!S{9@8Zv3W1XnOew%R$E5uyALC<2i{ubWID_fa}h+2Yy0)X6uX_b5uDl zG*qm5ZLUFI1FqMJimz(+t9H3cUdws<|cL<9VAfzY$ugsl1qK z)=al>W`cr+Osj-vR@V&yE8z273RijVyYx=%b$}CWq~!x0;74|yuq0jU&8fjO&i2xC z?&HCy@zv5K)if32@`6n-R*@5}Sp0zn$|x{01@Xkjc9JRN#O9^p4$=fmR%(FX??xu} zZ8h}0DX<~K+7m*VTvGq+Pf==w`aGtLO{Xr*B9p)ZTtY(OeSN>fb*7gUmRblg1a_tA z+$Pg(>Zly|wgXOwSk#stV_3;AlfPF=$V8TZtC*_UgQ8!9NAW*k-rP5FmMj;TfCX4B z$9ClHCIi2+@*4)C%nmPAmOsiXm~%R$tfG+25YylY74c2(M|5W!|4Bj=?$BF`veI?E zFfc!+86C&s!s82`ius+qQxoK24Ud?xN>7_@Vv)EUaY-yh6{(Fq*?*g@!?ZsloN8AU zn#+|P?`z#J{J@0rJlt1qTioc|bFN;el&S)au2lYk`Lo1hrd_n9n5dl|q8z<`sS9xK zceLV+DOJnz=G%>ObG4^^+-O*Nzl~C+5uTS;QgmSg`P(L`bT_u*+U#D5dwl{t11ajQ z7)!rS>3^+5%d8_;>7pY9Kc%^Wn>zzr2aay?nxY43i#Z&;hWHXgILBO8yGeyF!JQOv5lr6k7r@fL$Lfo4Y$`J2AN{E~C z4YFkO3sSy|_7Eq_S_!}Lgx82WUv}J$MPujpXJv<40MqKf?RB4fU~Jx}Wj*`V*l@Yf z{I@1jpA;_S$Kfy+e$%Ebn_OgnFDuotrJt6?@?kxg4!8>d)_|q((jWn`6Xvp}O6gV~ zcqm5Zrld7-U;p_^e(SVTLD5te>jE8AG2R!qT^%K11BlU2N-#_DhJ~b-5@5}899_KMSB)*#DZsos$CUtq z-eF@diCc}67oP?*_V{0BNKWgYr5K=~eRblX*20Sk%CR%>?PSsvtA#^ogR|*3Z9f%B z2hROZWf_T_VKE7@`re(^bV{95^SlLfCLc|%u)qEal$yFJjCiTUp0hL=aaHt9f{cRd zJ#S=J^SmE#U^V@WMs+Bi#v1`es-%9L>A@su`H&N({ zyn9H1G)51QbdmlB^|g}P!~wWk*RR6{L@X7!W2q@QZk+zeKe>@1*rNeNaeET7F#@JOfA3GK+OvP2&NHyDk4e3b zm;jHUJ&Jf9H8tdVp5l2h=I!JpNJr7g{DcS-5zav&ug z{SbO-1}@p2_d{oOeI0aqo$ooizc3qsal35nEP4>U!Tp^30FkZ#y4FmeExod(Mru^_ zmwEX({4abyqVZboo0vfnZ(%An*7~SeBSQK^p z-OK|1{`Ue5AH`ifP z6(o=0d$6VX;GG1*V0E5l8@4xJ+2cOv8WrG1#0ZS%-ygCOctfC+jarN>YjY=?9&r>9O?V zLQ?tcoqlEIr*6jDv`SaV;G!d#)vw4nuDYlrbi{* z1dh5#yB5N;8}6z$SFKQ7Xd{3rx!91bY_9^x7ZSS(KRc2(_dleQGGL& z_uzsdrP#~XxR0T`$eM$;pucOZw;Vp7eVM*3-1?YqVCW|Y&z7nQC4IXrXxh1WqVVx& zi|fe2`5>!(?V{ujh1)NawB2F5GjSM1@I;G=xNI%}5XKOnl%|t5LIKARpT#CTfA4*1 zaMoSxKOaA*(w=vbY6&@E##RNS}d+bmO^-XV<;1c0PEzFlV6qH!!<-Zc0~d zoNCx2+Ef^ABUtl`my9H z&^!__XFd~n9K!5Y1(v5o?(qL%>1w7a0JBszPia@hE|Byh=51oE;FzR)pH1rTuf%T_ zrcuw5=7l+okwePlK2JU6T`wry4Ni0p91leNL-^fdV==hkkTaz3gBS#naWWZ%fvYU# zd3@bjtW?lw^eA4AudPEV#u6L!2dEFJ4|7bCGh&I(9j0NjYLY@pd(g~D{j_!{?fE}G zd(|vWR+czb^)rfdRMVTwr3W2z$kbX9Mh}-}s{5c{ehJx-B!!f&;cQ7>0mnLV0Ac?? z6+zbiKHLBX`FPuzTG}m|A)Z*zo}OTO#Ec){R_k5>J!<>?X*r!53UM;L6!kg8kO!2A zg}&`h)=T@JJW6ng#fEe*PT|X?1m0u&$I=TA7My)s7w^B=>i~yr6Qh5pIvcq@H?EGAd~cT!DyWlpiC|$2jGAX&_7r|0H+c<#DdA4YFd?6N%aL) zqFbKS(VcDbb_o()K$SRWVZ%3rxoM(d@->q@tw!*G9*st2WbXCjh>t|sv~CFbLx>{! z?s1a}gt?*gMUUnKIlmQcm-L{6M+BOKG?@4OQ_<1(%_Q6x%2#szzgrh&nu~w@GgHb) zm2~~-V9yXRKBY5gLJr@u%Y!!MoKb15XYX9)37=Jt=c^YS`au&|e)E(45|B?r+h2WM zPZeuLDBJrs;BT}bBxN;%yq!$D?4GI|e6?F$5pKOxz#A{Ss3aa_h5aa||3_WH+rStL z`IVS-)fR(+-4rljdDK*noZNcuS$^1C*oqAAqE;Ae7j=tbHP{)=m$bdfAv8+T$Y_$L z!Y4)1k3^nc{Ar4|6z{8H!Tr?jlZ$il=j;COF)N`@UcZL`r0hpJEQT#povX|H>Qc~0 zeO8!Zl$kt@%N1#@5ZwkX*yzJ5l_-7jG+N86gG+}|-Z^>qi?lpAG%!xR}*>iXf zN}e_4aQ;0UodP&&r=T(d?VQXf^LKzn+biyir;&0V48z8Cl6)>ZyP2iGL>Ig^&d?wn zqGu#YUcY#En7h{=yB;SI%qV?_r>M#~;q z0;q$E<{Y<7Y=}?Oz-?0u$E|PIW`Ie=3dZks(iQr(#BsYpzx2K3iM-fM5bf2yO&Wys zUeMihRmmMzV-IVr{-^vh9*OqAmUb)HZY+&ZXq;PhH;$H~x9CLM4uc`JH_JR{jFK6N z5TcsaIMi$S-m9W(X1(0iDe*(bdYf#6HW3s1ct$Lh@vK3vqu`8J?c|rL}Xujf)bcPohJdl+nzb}M$3@6 z3Y8i)^rv>8!9|7t0t9B&pHCF^k0U3tt@@vg1Gl+xSA8q6#b0&~s;)RUATjM2pDkj{ z~lqw!}?CdiT$?eKi4s=B|CKAWVWwe~BU z-SZw)&hXvli;APaB(ow8=@$*{tI7OET_k$+@r2J%vaP-ca*Xz5DZKv|8}V=SA0^>5&u^$Z7QBOQw=wVYh@rjzC#u)2*?t;+^hv;Po+1uFxjT@SqT*049s5dTu&``??^^N|m{s_a%6wxTr9&##Wyt;Qnc#UbDdbPceA>>8_ zCDRg`oB348C+gH>)`-pJdh>A6E{a09Tr(<+i{{12EmEXs*Tcek$C@i{-?0`?qE4G( z_^>GbXGfezjggMsmn6}!DmQ1scsFN{v2tn{%dqG@M8P)_nm+uzPWbuu~3LF};hdvn^o4?&3OR)6NULc%9wEDNaQq_5lF% zUA4`tC7-du;LU!>_WWbL?6dOnQkOr91dJ?00X_Zll(pU#$jn^p#YO)>Lg zbTLm)5l1vs){KM$(`?CH!zKV|1%gpD{82C|JNPxy=X?e*JK6$nsCC;4&_zHhn+Ru@#ULVjBI$!kNjnbF{Ic7;^EVQfUCnbV zRY0{M3oFtTW{M<5JofM);r%|nayygpk0Rf}5g;1ivA@Degps}uR=cFGtEN46aMXw9 zkGua@3(&}b?^8+o_qugiko~pn2D@XqpI>DoA`P``>g5V z7*qhD)1qW9_560nc@o#>_*-Ig5rEbv?LYI^f~nO>tfj~jYw;9IXw<>f1+PjInY+%d=Kf|M)SFVR=n=k5eJ!n=v= z`r(a7+IqYq&b^q|9tj$aYF1I!PV~ ztx1r~8l+mgIki!1X$I<>5T87lx{Q@!i_r z!7gk6D2GAz5#YQAx?9At9sc)qHKj-E(GO6t;(nhYQy2BG{*q;)aUFfRga$U*nAMV&A5UE_8tK6iIi!VJC@j`#MaiJf71NChu1Sx_}Y1P3}0-llX!7){)m z1Bi>swsTk9YmU-?c`NSL-jKzUML7?*o!Y7pI&f1p2i=sn@V!rKDDk?)ha(a+5K243 z?2*OyeKAQi$i@Zg2eOw%gSicQihsP(n1@V-JS%PCer=H?YRR%>0D(vl3jW@wOrHjw2`J3?gc|+$Y6CqE zj%n}|)4%15fgZ*q^b(^f^oBtoe$uIP&%YL77`~6rnavE<9$FEMmn(GDkf7j&X#ft{ z#NzUZ!I6eGL1N@58#|q(lqRE^O?%C?TMwVpHQtLfM(%CFzq#UKd*(}qUVAo{`@B4V zorC=`rRPnz8dj|RW<<9`Z1B5yVXI$bh5+A<&iY1XMpWww>i(Mm?R!jYLhpj-Ku`YI zdM~KGW`6h7&3=$C-V=jGl`1{SdMgl&N`;>@y+;pG6wU3aBjtQM31lSn1)*_PJNl-> z0$@2x`&U6^H^lMf=IU!760cvo0x&`WZmF0+nX{w{oO@}gMXzyd?OnbQsbv%s8OB<; z+->1)3z7G&Ksn?g)5t&Gzl=??%7lIIN!J}sobl}2j$ZReJ;@41tHzs(@5%P`4q@`{ zU#~`~GL8VVa!luvquCW@T4C&c-T?ux$we2ew^&{C5;1#7pC8TvI?0M{avgLi){lHGml7g%Z}VJNmRo>7 zv9LZei?REeFDno1m9bfi+!$hej|`$v=TO9vcBqMil8x^uhR2>@ELjd!=rrhzN-H5dmChI5oCh9j`t7flDQ%XDu(8nV$^_=oDK##g6tS<%xH-K{mi$5% z$1|;C>+>SQD-?Z-Q*Ey8nH~q8`lx%ypZe6F+GFaCp@>+91|&*4c^Q-n=1Nlenx#Dc zH7%P)PUDy?`8rQ|(Aw_$S`MyId!IeNn(u^gmY+BN5^c&JSJURVSF96zCfL+&qyuIY zUK@H=_t-NxVmt&vw!#aX%`~_7@d7-yw?{$7%WY#LUqW@i1^4kr|Gfz&rlL@=L7>fm z!l$SRg=<}b#oq~{vZqv`6}p%3_ZyW}8ss~{+mS}Gq|C3JXnd`(MNd}81)IDpey35T)2L{M1YdlvF%jfzEVNO$VD*iz+UzoR=C-qLDvWsRkIaS$pr6KPx)>kB?i zQKyxK1riEEP9yIdTkYo;TFpX{m93e-WdH3WZ?yR?@DRnVNm7MFqWwGuKJHTj5098v zv|#c4mo_Hw@jTCzzv&2!fX^DXi29qT{pA3|4=bmsTC+P}Bli|x7QT8auY2zatp;hB z%mPw@{v6VU1pdVuLQx~Nr|>DecAqT8JEKb|}ID?#DRdHJH2Tl*JGy z429C?dJ+tf&wh?#_pZv@yX1?KaDwZn5>1Hq=jmPQ1l!#QK@HVN|1lh#f*y?vDojm{ zxR{MC3r$%@>X%lp$Uxj>%0Z}J6m204bFkJ;6ydabG^r&0cFar_e;4_Y3>-QIL5 zG0`HZpQI+nl=JfI^&h`aSLJlc7lFSRZ0ch2-m#FE%}ruShM~1@@{(j?6l}Na%C2t| zARJNqB;wv^h$}~gfT7sUrgD!Z-V>We;N-+PagNUI{-b%+ZyxaNh9nAAxBO?qQac!+ z9m=QySex5!w_GjBEOomb-nH!*EMLtdI`Q^55Cgj|LllPS$Vh3!$>b1XKgbf?9$9$0 zz!;0kl5D@Bfz#@p+5QABrBqx^dy~6z)NrzZK-_r7c$uf3R0<-j5Bh{UWh}|&#SB%* zUldA8*~>smxi+8g+lMuE&4&kkE+HP|ESg}OiKNTd3|9B*cyWA&!Mvv|De zqoj0S5vA(LUEFXg#5Hool$s+=xN=;P5^b#7dCP>-dnb6q^#MgF^g^tH^oz(-p=A6_ zqUfDcTiR&{>pDgL;r743(OaBWNo7S8o!3^cU9-T(dLc#u^#()d?s{_jshnMr9Ho6>gr z<*o5F{W@6Bc;fcC6xOF4tn-5uu){yOUV*p%5|7GYpBn*@V74|HlU^>!#~uk)I;bGu zi2|elaLntrg02^8HviiE0blWf5~5BwWq;r8;l%Ta)55cN0^4tgrV_B?YXAYQ#-5C# zGEe@9ENZoc+iXvXWSAb2irK<_Ei&96r0#hk&+Ax1W)j|=XWwbQ_MIfRr-GXpFbsa4 z-Qlh}V^AQ}Sj1}P*Ny16+kc&>F3058t+%!g7IbZUGn+}RQ7%9WU6jg4@qT^Ch5m!j zt(a4%)SOJ{7Z+`{IpX1?K!j1r!GzU`&4Z!>bN^W1fi;z}$YXnzL|X5}$;B;U>O(#VlzJ!4t|}qkE0!9G zgUHOtrDn%GJBZ|{Hzq7qHfjv}9%1CcG(2xi*V>1s2> ziQyi0Y%p4MUR~n;*_UkJxZKOLH`Mw!St~*|WkyCwsW)|9R6}j}W=1h1ZDT_#$W1t; zV>#Y?%^F^OQ{%>_`pxZ6@*Z!Ll7;@z%FWMRl$j6?DoBY9vv%?4%a&;Q0A0G0AGJiK zseH4_aa}fNS7!BJ>BjgvK*)Zq=!t@Xx>q@KG*uNY$2<_35FInsuF;= z7nQ8!Nz1L!>izC$VkjLUQuJo?z+pCO-szH`?nscU31jhsL*L$zm3u7D6aOfw_*t!h z*6{HU=`Md1xnF$oeDo;8uoYL78qutlwNtj*Jzd<1(MJ?&D}4GUpVvN!X%_vC=85c~ z*tS5Wj-`&(RYHMVw2NF8W*C0yA^f;Fje>Mem~qmhB&%+D;)|*YgN=%S;rXPYbfd2J zKZ)rt2^1J>-9D+91S%~L>0l4~qyj-^pg(6j7k-{10MWWJ%-ulp-xEDp{LS+SONr`b zx~`?Us{JKV-6?ktoEHmIu}+)?N;lj#VfD6S)#?IFIuo!j`aYr`v3F1UM%|&&3{5KE z;Um<`B|o9g)_=(^m&mRJ&0$ap<<#MRar4u~qd#T>ar=Fn39P}sycQW}@`46QTB7qV8cWCjtn7$Yiv-J= z%T@I+g=yg0%9R`y!;fXtLj(&Bz$ybwf@NaZef=O!cBh_vEL(CVs{XT?!Y%^fGyS1Q zJxW1);GUw5-_j2WZl~06A9yRn_e$A)oLJGvT`0Dsx&Yi$WH!Nts7{?CEh;aqb8+19 zS#5R04E4=oB%Hg66P3*jL1hAaHaMdcWeGj+1hx;)%zAnb^GE6@*iuNyd!0P(F4{~M zDUe^b+A2TcWbua_H_Yvg1lJf|yD%p_@`pn|-xQB$sMd+(oSIp$Nk~4}ZJj=p|M!nR zQAI}H%qGj`?Vxj7Al)9{(>*LD)u2L(2uvc!Sf}mY)iZTXW`cumey$KW1(oDbcrv(s z2IK{J9UPI+8a6#yk-ZhHbH)0w-EgNmIJsk{Fq-h<^PEj^>%#}cz=p^=E*(u!EC-2<)zYI?;zl8lIEX< z7;P7zO%6dPdpH3-6rHbl_Gr_C_M6yZ;Z z9_kC&izcL0KdN*P3zF~lWSlTDB)sYRDarg{l4Ou@wbQQH`FwMsDhQoSb)aE z{p#ktY!0Ws3JW?Iu&_a6lia(|hG=BCg{P_#Z35-c-Ohx?Ob@Fq2qae`RB`DkUR0Xz z+-xZt8xy8)B+C6+{Bfi7V5g)ag7srD_SGhJ;psA}DB?^kPYHxY7IkAtlW3UiozvXY z?mvanG?IRqZV3^|Dk9`8Ff5M*qH}1^Gsew~SmG{`rrKAg;V(<&U~2e008f z)*klwS-c&5g>lU853(OPLblDsZdi0~3Vtl=<(CA{g|61`!g{9oY44K|rk4|{I zS)_54^r)I@P07Yn!=LZ*Y9PBWYa$p^|41fyHBsP6>YI2>sj1jCE(csW4lRMpa4k{$EmzUAO*+ia`0i(vHmWSE4>_54q)=aL#KZvOUYHJCs zhuy^}DvvsPM^duq47aaW?~jVJ?@C{jfEc}lHa)HNVv@}(1Jke1Z9sGZ;kc95An$=4 ze7nQ>Gzj!!HOY;@fs}qZ()VtDr~PeF-(Tp^oEJ%uPK7 zw8Q59j+EECjvLvibn(O<;3@h%n&XUrd!&Q=^%P+|&vVVXoyiO=s3yUsTK-ZXxR=l} zYa}>ycH|?K%AdN{mpb2{$L&kp$?Z1!-crQj&_}Rw=vF_vOCQt^0zn9Jz-J<2)k4|}eAmzTWL6eR=N)SI0iDYL? z_#YRIv^N_ghcYt8VACcm$Ddm9M;lvHAAi9l7#o%HP>9@e7XaGel|c^-$MsgfB*A}= z(?EAX2pobqNLtaUYo8fhaR|CW-6XT)Uu}ua)qDU}A%`oOg5~$}JnYJ5#Mq zq>_Q&ABk4kel!4dkeqS*->+<(y19&A;XY+>;R3%O*wMO7e;o38EYE`5KLvl#(*o3< zoagH`q@Rvnr@8IZz!pDgm5PzYg1F-(xh%EFBl;Y%RN19TN$-1AZsCKXZ%lPL9S>Op zyl)*u9gj!_qAPt1R-RR+ynhB*jb8oM5f@2^NmGqrV-;hFx`03*8VZo9pZ43qQVeYTjY?BAI=QSH{w@|oB`U?=i7J#vSSPj_mStxBXxyl15zFWQsYilJ3=0hgd;nx zuMlfAiD;_7))47QI=DC|HF497Ku{ThwhSgxLR?`Wdm7?Iir5o zxISjpm{(UnEfss(Pf25OeiuibUTD`imBZFkEmt;Pz%;#^dGR3Ic8djKoUpOz?Ep016aIaSK z$ArwX(+1(GJ6r5en-h}McX$0YQ_|!DE`3mhwm1l+f^{f3rDG+`LBkN=t908?SLi<= z=OKB-?RpbB!SIvYi43yEit*SBWosd1}IPDImj5j%E69k~D1XPt8mYCXuC_0^zQ$-P5N$ zqYKCu8g$GQT$Z3LE{MM_F4#&wd@cw@gJi5B%>Vw`D^682BT5bwl+(oyMnMDertPF; zc{#q`l#o@`{`_%&a)HC3lFv59D0kI=zVxYFEUEn+k%AF1g%en~47PG6DE~M#0h0UVfLs!pfwzAv1daTpr>}V~+e~mDQ&_p}oD`Bg? z!S$(Oa|Xey>ODQ)Xe*^fm z7dAgs*pupvsckFB%chjG;C3y!Uvd6=cSo^59B>n})!ANe`Wbgov3muKuXx$zszc&j zFg{y}gY4SzmIem=y!MI(XukS*>WyvF1|P!spA2E)Pzue?Er<+4ag35T@jj-?{umN< z*Qaw(aRoa@vEC1oz*Bp>$nexttzixQsfg!cI~OjPwbr}0EfkUY%9nz{*I4690Zz+L zY3(cXe+)keOzR*3nb^S7HMv#xpe+#=%$*4nz>Vz+PPQMKL7__&s1^c+Mb%Wu>y zRlG4evW1K)M3#8jeQI#~3Tg5gtkfmAAe$>R6{IsC7bSb!LF%|XI~Kx@1}% zR(EZuuN$2?i9}yAt{_i|QHcwp$newYH6S%u9ca|L&^XO$^_7iYO24Kjg+h)Q?(4c-YMplhQiWQ<(xZ`F52RH%^^D4Yi$t7`Eh)}Zn#tC zv+M9K1+D1#u9vsWwIr2^wM+`m7z%ZXiA2E%<*Lvl;UMk=l#a6&O!R!tjvr@oV{(V?4>rJDEZi zUr1`Oq-$1FEfWhD>_M?8%U8-VICP@AI9%jOoS!aPo;{3BVR!4TnVRb_-g`ILEw*~h zR_YA6h+;ChI! zpL_)eNG*1}iKUT}cG4hU1b?t&;7-#VvR9mrW_pxFX$vnEk5=BsN&vOMG(7A&U*Nor zjv3Ab+MVS`kw22PJhRO!n2CTwg>fp?w4)r?v*+M*n+ecoE*Kr%%(Q zUrxn4v)!d|h-IVAh}U}_2|#>?W@SF9V0@fc`V^g`ICm#(Zx4!Z2m$H(Og)IEB~m$f z^9tTekF2W5*lm$%&u7ViD~Ki~omz}7svTAg&vZ;8p+>z=)qve)%|n3d8Vb2f*w$_~ z_yMvA(ID%CsWz3jXhxN@Pb@w0R2{AYofAv%Qs;LmRU>v%UEVDxuz~i1X0ubSWs|$m z?G|o}b2An;es$yeJY;$ZhKn{wF01@bF%Gi8?Zy9seA>I)HY<%mIzL2p&q|QXE0Fvr zHUtRjOqiZ@W!8=3-=(U6kpsu&Ga-8caXAbvHYsnz4Qa<3awhwbA6#GV9%*W8prQK9 zZNiNq4FPHcB=O(Hw2iTBBHCRc5YDT0mA}^0FG1B5T~`tIoDDB$qloJn!1eY;z#=z* z?)VwxbVs#tvrb>J2hYOvd%u3uS&3O~2nED$Sw?^}IE2EVKJVNWg)Dd5m9bl%0`(9U z64hr6icroZze(kYBYn*r`8e|MvUxaO+{5{3$*^C|%J^ z+%*#rz_4&IiF{3IUeC1L)h1xGHDKq?c{FL}kwTOC-JafHt`QA_&rDd16Io;@A3$G-LKX;%-|&YSnb@&h*+JnjlD zW7kv{1g`N8TBom@C;52A5?3uRc4mvh)j<|)Jr5;1AbN>VComyU{3YCl|a8M zf|Q^22Awc)@R{n~kVOrjn5spm{@8no2WVqcvO=8&n@|%(!6Bf64I6soEeezM$}HF( zwS$E@4?b&6lmKqLFWMNeW8x{;#{0*|uhjq-;frxu*MW{;*l^FHr2nz}4jG_I5IWX& zmisVpr~N1z<{{t{`KSKhJDaQJW+fR63=Dj!5uRzjz6@GGHU|)cz@^~HAj;F#&t;uc GLK6UM@3&b1 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/variant/644.json b/public/images/pokemon/variant/644.json new file mode 100644 index 00000000000..e84e7373389 --- /dev/null +++ b/public/images/pokemon/variant/644.json @@ -0,0 +1,48 @@ +{ + "1": { + "1a1a21": "35296b", + "2c2c35": "c1c8e8", + "103a52": "251076", + "191921": "686c99", + "22222e": "705ba8", + "005da4": "4800e3", + "31313a": "cfd0e6", + "6bf7ff": "b77dff", + "00c5ff": "7626ff", + "1a1821": "7888c2", + "23232f": "8c9bd1", + "ce0000": "a44bf2", + "121212": "54428f", + "940000": "762fcc", + "52525a": "e6e7f2", + "003682": "4c29ab", + "08528c": "3b1899", + "212129": "9b9fc4", + "111111": "5b5f8c", + "009cde": "dbbaff", + "101010": "49568f" + }, + "2": { + "1a1a21": "350707", + "2c2c35": "9c5fa4", + "103a52": "671212", + "191921": "843172", + "22222e": "350707", + "005da4": "c8433a", + "31313a": "ef9dae", + "6bf7ff": "f5e5da", + "00c5ff": "fbd3a8", + "1a1821": "5e286f", + "23232f": "763e7f", + "ce0000": "f3d32c", + "121212": "210214", + "940000": "aa5d0e", + "52525a": "ffc5d1", + "003682": "671212", + "08528c": "821b1b", + "212129": "ca6c94", + "111111": "4a1a4c", + "009cde": "ef806b", + "101010": "3b1a4c" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/646-black.json b/public/images/pokemon/variant/646-black.json new file mode 100644 index 00000000000..70094ae228b --- /dev/null +++ b/public/images/pokemon/variant/646-black.json @@ -0,0 +1,59 @@ +{ + "1": { + "2f2f38": "112240", + "6b8c7b": "2b4366", + "524a31": "203c5c", + "191921": "6a6a94", + "648776": "905dcf", + "315a42": "1a2b4d", + "e3e3dc": "d4c3f7", + "e8e8dc": "e6a18a", + "35353d": "c8c9e0", + "786655": "5482b0", + "ededeb": "ebd4c3", + "b3ac8b": "c77161", + "006b94": "4c13a1", + "3b3b42": "9e463f", + "2e5942": "484873", + "addec5": "426585", + "b59400": "b35a3e", + "004b6f": "4c13a1", + "7d6d5b": "b2bdd4", + "ada584": "78a9cc", + "ffff4a": "db966b", + "deddd3": "edc9ff", + "282830": "9b9bc2", + "23232b": "0c142e", + "1e1e26": "15213b", + "00b5ff": "a033ff", + "b6e3ca": "bb8ae3" + }, + "2": { + "2f2f38": "550f0f", + "6b8c7b": "be6e34", + "524a31": "550f0f", + "191921": "3d0d38", + "648776": "ea93a5", + "315a42": "7b2d25", + "e3e3dc": "ffadbe", + "e8e8dc": "e0e0cc", + "35353d": "913a7d", + "786655": "982222", + "b3ac8b": "cec7a7", + "006b94": "6b3773", + "3b3b42": "423f30", + "2e5942": "ca6c94", + "addec5": "e6b45b", + "b59400": "166a2d", + "004b6f": "411d46", + "7d6d5b": "982222", + "ada584": "c23232", + "ffff4a": "6ae649", + "deddd3": "ffc5d1", + "282830": "6c245b", + "23232b": "521610", + "1e1e26": "480b0b", + "00b5ff": "b464bf", + "b6e3ca": "ea93a5" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/646-white.json b/public/images/pokemon/variant/646-white.json new file mode 100644 index 00000000000..ff46920d000 --- /dev/null +++ b/public/images/pokemon/variant/646-white.json @@ -0,0 +1,52 @@ +{ + "1": { + "101010": "101010", + "741a18": "9c5528", + "4a4a29": "2a446b", + "4a4a2d": "181930", + "4c4a2c": "1b2547", + "315a42": "1b2547", + "7b7b5a": "779fbf", + "73737b": "222342", + "942921": "d49748", + "e64a42": "ffe587", + "6b8c7b": "2e466b", + "cc9827": "b35a3e", + "ffde38": "db966b", + "ffde3a": "ffde3a", + "ffad63": "fff7c4", + "ada584": "b7dbeb", + "bdbdc5": "292b40", + "addec5": "45678a", + "f7f3f3": "f7f3f3", + "fbf8f8": "414659", + "fdf9f9": "fcfcfc", + "fcfcfc": "fcfcfc", + "ffffff": "ffffff" + }, + "2": { + "101010": "101010", + "741a18": "1f504d", + "4a4a29": "550f0f", + "4a4a2d": "1f1544", + "4c4a2c": "7b2d25", + "315a42": "7b2d25", + "7b7b5a": "982222", + "73737b": "2b2871", + "942921": "3d8073", + "e64a42": "4ba789", + "6b8c7b": "be6e34", + "cc9827": "166a2d", + "ffde38": "6ae649", + "ffde3a": "9df377", + "ffad63": "5cdca6", + "ada584": "c23232", + "bdbdc5": "3d458f", + "addec5": "e6b45b", + "f7f3f3": "f7f3f3", + "fbf8f8": "5870c4", + "fdf9f9": "4f9290", + "fcfcfc": "e2f9b5", + "ffffff": "ffffff" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/646.json b/public/images/pokemon/variant/646.json new file mode 100644 index 00000000000..c8a0453a135 --- /dev/null +++ b/public/images/pokemon/variant/646.json @@ -0,0 +1,38 @@ +{ + "1": { + "8c7329": "b35a3e", + "949cad": "a6cfe0", + "3b3b4a": "39444c", + "103a52": "121836", + "ffe600": "db966b", + "73737b": "6394b0", + "373746": "121836", + "bde6ff": "3c5878", + "424252": "3d6285", + "696973": "606a73", + "ceb500": "a55c39", + "cecece": "bec9ce", + "def7ff": "577c96", + "6d737b": "a55c39", + "6b8494": "1a2647", + "ffffff": "edfcff", + "a5b5ce": "293c5e" + }, + "2": { + "8c7329": "166a2d", + "949cad": "c23232", + "3b3b4a": "4a3b3b", + "103a52": "7b2d25", + "ffe600": "6ae649", + "73737b": "982222", + "373746": "7b2d25", + "bde6ff": "e6b45b", + "424252": "550f0f", + "696973": "736969", + "ceb500": "2aac2b", + "def7ff": "f7ec88", + "6d737b": "2aac2b", + "6b8494": "974626", + "a5b5ce": "be6e34" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/692.json b/public/images/pokemon/variant/692.json new file mode 100644 index 00000000000..954dcffb3e9 --- /dev/null +++ b/public/images/pokemon/variant/692.json @@ -0,0 +1,26 @@ +{ + "1": { + "b3f2ff": "fada7f", + "44a2b4": "af6a37", + "2f7280": "783a1d", + "cd9d3a": "53be53", + "575757": "c85b5b", + "72561c": "20734c", + "60dbf2": "e1ac53", + "b4b4b4": "c8ba6d", + "3d3d3d": "7d182d", + "ffc549": "a9f076" + }, + "2": { + "b3f2ff": "faf8d7", + "44a2b4": "968144", + "2f7280": "5f3c23", + "cd9d3a": "7743be", + "575757": "88cd56", + "72561c": "371c72", + "60dbf2": "e1d6b6", + "b4b4b4": "68a7aa", + "3d3d3d": "1c873e", + "ffc549": "a36feb" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/693.json b/public/images/pokemon/variant/693.json new file mode 100644 index 00000000000..2e80795d2a0 --- /dev/null +++ b/public/images/pokemon/variant/693.json @@ -0,0 +1,30 @@ +{ + "1": { + "23a2c8": "c87a23", + "ffc859": "6ccd80", + "224b73": "552813", + "404040": "3c171b", + "262626": "230808", + "5f5f5f": "6e2e3b", + "cc9c3d": "1b3c17", + "61daf2": "f2bd61", + "735822": "08230e", + "3674b3": "7d3e21", + "ffc44c": "426e2e", + "4595e5": "aa6839" + }, + "2": { + "23a2c8": "beb099", + "ffc859": "f5b281", + "224b73": "5f463a", + "404040": "2a8c53", + "262626": "295a1c", + "5f5f5f": "51c85d", + "cc9c3d": "6259af", + "61daf2": "f0eadb", + "735822": "36235f", + "3674b3": "9b8265", + "ffc44c": "a39afa", + "4595e5": "c8b493" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/746-school.json b/public/images/pokemon/variant/746-school.json new file mode 100644 index 00000000000..a76aca2921f --- /dev/null +++ b/public/images/pokemon/variant/746-school.json @@ -0,0 +1,40 @@ +{ + "1": { + "101010": "101010", + "0a1627": "5f2112", + "113650": "0b3d3a", + "123954": "75351b", + "10437d": "16574d", + "134884": "934f26", + "1766c6": "b77736", + "3d66d8": "d39c63", + "416adf": "2c9572", + "79848a": "a67834", + "749cf6": "5ce09d", + "43ebf3": "824388", + "72f0f6": "27133f", + "9cd3fd": "78f389", + "a6c5f7": "aafe94", + "cfd1d3": "d5ab51", + "fbfbfb": "f7d76b" + }, + "2": { + "101010": "101010", + "0a1627": "160523", + "113650": "846228", + "123954": "28071a", + "10437d": "b7904d", + "134884": "350b19", + "1766c6": "4a1111", + "3d66d8": "622222", + "416adf": "dec284", + "79848a": "4a1111", + "749cf6": "f8ecc5", + "43ebf3": "4378eb", + "72f0f6": "31238e", + "9cd3fd": "fefed9", + "a6c5f7": "fefeef", + "cfd1d3": "5f291c", + "fbfbfb": "844232" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/746.json b/public/images/pokemon/variant/746.json new file mode 100644 index 00000000000..5b183b10e5d --- /dev/null +++ b/public/images/pokemon/variant/746.json @@ -0,0 +1,40 @@ +{ + "1": { + "101010": "101010", + "1f2161": "16574d", + "5d666d": "75391b", + "616b72": "a67834", + "9c455b": "308c9d", + "374793": "2c9572", + "4764c9": "5ce09d", + "3e9cbb": "27133f", + "61c8de": "824388", + "8c9c9d": "935926", + "8d9c9d": "c69b3f", + "d88394": "65cfe2", + "b0c5c6": "d5ab51", + "ccd2ce": "b77736", + "d8d9da": "d8d9da", + "eeeeee": "f7d76b", + "fefefe": "fefefe" + }, + "2": { + "101010": "101010", + "1f2161": "b7904d", + "5d666d": "1e0726", + "616b72": "4a1111", + "9c455b": "b9682d", + "374793": "dec284", + "4764c9": "f8ecc5", + "3e9cbb": "4378eb", + "61c8de": "5787f1", + "8c9c9d": "350b19", + "8d9c9d": "531917", + "d88394": "e4d85f", + "b0c5c6": "5f291c", + "ccd2ce": "4a1111", + "d8d9da": "d8d9da", + "eeeeee": "844232", + "fefefe": "fefefe" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/780.json b/public/images/pokemon/variant/780.json new file mode 100644 index 00000000000..0399d3567bf --- /dev/null +++ b/public/images/pokemon/variant/780.json @@ -0,0 +1,40 @@ +{ + "1": { + "8d541b": "bd8955", + "297b8b": "1a316b", + "606f55": "496375", + "ffc4d7": "f29d9d", + "105262": "0e194a", + "b4cda4": "9ab5b8", + "f5ae07": "e8c987", + "ce5b9b": "cf4654", + "faf550": "faf0b1", + "e67b9c": "e65757", + "bd3983": "bd3341", + "eea6bc": "f06e6e", + "5aa4a4": "284c80", + "b8b7a3": "cf8d38", + "726d5c": "a36026", + "91a37c": "7798a1", + "eeeeee": "e6c15e" + }, + "2": { + "8d541b": "157d36", + "297b8b": "4e4f73", + "606f55": "8f825d", + "ffc4d7": "f2e396", + "105262": "3f3c61", + "b4cda4": "d6dbba", + "f5ae07": "24ab2b", + "ce5b9b": "d9ae5d", + "faf550": "3ec435", + "e67b9c": "e3b656", + "bd3983": "c27529", + "eea6bc": "f2d98d", + "5aa4a4": "6a708a", + "b8b7a3": "254e59", + "726d5c": "162d3d", + "91a37c": "b5b48b", + "eeeeee": "3e7a76" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/782.json b/public/images/pokemon/variant/782.json new file mode 100644 index 00000000000..bd04ccc0c70 --- /dev/null +++ b/public/images/pokemon/variant/782.json @@ -0,0 +1,34 @@ +{ + "1": { + "f13035": "48bd8c", + "bec6cb": "e8cea0", + "fdfdfd": "fcf2ca", + "f8f236": "e77b57", + "504e4b": "2b130b", + "aba5ad": "336340", + "7b766f": "472d1d", + "7a756d": "a67e5b", + "726475": "214a33", + "4f4d4b": "8a5b41", + "940a0d": "258067", + "dbdbdb": "4e8759", + "957509": "a63424", + "fff7cc": "f7c4b5" + }, + "2": { + "f13035": "b8c0fc", + "bec6cb": "b7ddeb", + "fdfdfd": "d5f4f7", + "f8f236": "52d9ac", + "504e4b": "132040", + "aba5ad": "5e3e75", + "7b766f": "273959", + "7a756d": "8ab7cf", + "726475": "412959", + "4f4d4b": "567496", + "940a0d": "636a94", + "dbdbdb": "855d99", + "957509": "258085", + "fff7cc": "baf7dc" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/783.json b/public/images/pokemon/variant/783.json new file mode 100644 index 00000000000..0748d5ff79e --- /dev/null +++ b/public/images/pokemon/variant/783.json @@ -0,0 +1,32 @@ +{ + "1": { + "f13035": "48bd8c", + "6c6968": "472d1d", + "97938c": "2a573e", + "4d4644": "2b130b", + "940a0d": "258067", + "fdfdfd": "fcf2ca", + "6e6a69": "8a5b41", + "fff5ae": "f7c4b5", + "c2c1c0": "42754f", + "d7aa22": "c25236", + "957509": "a63424", + "69625c": "133027", + "f4da42": "e77b57" + }, + "2": { + "f13035": "d9ddfc", + "6c6968": "2e4266", + "97938c": "543666", + "4d4644": "151e38", + "940a0d": "636a94", + "fdfdfd": "d5f4f7", + "6e6a69": "567496", + "fff5ae": "baf7dc", + "c2c1c0": "744e87", + "d7aa22": "37ad94", + "957509": "258085", + "69625c": "2d1c3d", + "f4da42": "52d9ac" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/784.json b/public/images/pokemon/variant/784.json new file mode 100644 index 00000000000..0bd28476e98 --- /dev/null +++ b/public/images/pokemon/variant/784.json @@ -0,0 +1,50 @@ +{ + "1": { + "c99f21": "c25236", + "4b4657": "8a5b41", + "544747": "517d37", + "d0d2d5": "77a353", + "fafafa": "f7c4b5", + "d4d6d9": "e8cea0", + "9d6702": "9c3c27", + "f4da42": "e77b57", + "f13035": "48bd8c", + "2d2b28": "2b130b", + "c59c21": "b5482f", + "cb0e12": "258067", + "47444e": "472d1d", + "f7f7f7": "fcf2ca", + "a7a29e": "336142", + "807673": "a67e5b", + "504444": "123028", + "885902": "a63424", + "7e7572": "204736", + "d7d9db": "548752", + "4d4946": "447835", + "fdfdfd": "bbd477" + }, + "2": { + "c99f21": "37ad94", + "4b4657": "567496", + "544747": "558ea3", + "d0d2d5": "7ec2cc", + "fafafa": "daf2e7", + "d4d6d9": "b7ddeb", + "9d6702": "227880", + "f4da42": "52d9ac", + "f13035": "d9ddfc", + "2d2b28": "151e38", + "c59c21": "34a897", + "cb0e12": "636a94", + "47444e": "2e4266", + "f7f7f7": "d5f4f7", + "a7a29e": "6c457a", + "807673": "8ab7cf", + "504444": "2d1840", + "885902": "2b8c8b", + "7e7572": "4e2e61", + "d7d9db": "ac7fb3", + "4d4946": "558fa6", + "fdfdfd": "adedf0" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/840.json b/public/images/pokemon/variant/840.json new file mode 100644 index 00000000000..255e2e7689a --- /dev/null +++ b/public/images/pokemon/variant/840.json @@ -0,0 +1,34 @@ +{ + "1": { + "e2244a": "70a2c5", + "8d4229": "570749", + "94d84a": "e5e8ee", + "5fab1d": "7a7c9e", + "d39a52": "9c2e72", + "e32b50": "4e77a2", + "357912": "313846", + "fe455c": "abd7e2", + "5bab1d": "acb0c3", + "247912": "48485d", + "a50534": "3e6085", + "a4d84a": "9aa0b3", + "f2c171": "c55885", + "fa6f8b": "c1f3f3" + }, + "2": { + "e2244a": "bfb5ab", + "8d4229": "230808", + "94d84a": "589df3", + "5fab1d": "a8546e", + "d39a52": "291411", + "e32b50": "807770", + "357912": "823455", + "fe455c": "dcd9d1", + "5bab1d": "354dbf", + "247912": "2e2246", + "a50534": "68645f", + "a4d84a": "e28c95", + "f2c171": "463731", + "fa6f8b": "eeedea" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/841-gigantamax.json b/public/images/pokemon/variant/841-gigantamax.json new file mode 100644 index 00000000000..5d3b8c49133 --- /dev/null +++ b/public/images/pokemon/variant/841-gigantamax.json @@ -0,0 +1,52 @@ +{ + "1": { + "101010": "101010", + "772628": "3e6085", + "2c4828": "291634", + "427638": "7a7c9e", + "872d23": "460c4d", + "8b3329": "2c255d", + "913c3c": "5b4585", + "a63139": "70a2c5", + "8d4229": "272a52", + "bf6c31": "b668a0", + "d2394d": "abd7e2", + "d54456": "751680", + "c57741": "9c2e72", + "e84466": "8666ae", + "39a43d": "9aa0b3", + "b3ac62": "95aec9", + "c68a48": "2b526f", + "e2bb56": "c55885", + "e9c558": "397880", + "ffc66a": "eeb4cb", + "dad08b": "dcebf9", + "fff1ab": "63b9b9", + "f9f9f9": "f9f9f9" + }, + "2": { + "101010": "101010", + "772628": "695d57", + "2c4828": "341c1c", + "427638": "a54e69", + "872d23": "2e2246", + "8b3329": "3a2222", + "913c3c": "682d2d", + "a63139": "baada1", + "8d4229": "9c564c", + "bf6c31": "354dbf", + "d2394d": "dcd9d1", + "d54456": "2e38bf", + "c57741": "291411", + "e84466": "915a41", + "39a43d": "e28c95", + "b3ac62": "c1a39c", + "c68a48": "d1a87e", + "e2bb56": "463731", + "e9c558": "eee0bc", + "ffc66a": "589df3", + "dad08b": "e2dcd6", + "fff1ab": "fdf3c0", + "f9f9f9": "f9f9f9" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/841.json b/public/images/pokemon/variant/841.json new file mode 100644 index 00000000000..3f1c756da5e --- /dev/null +++ b/public/images/pokemon/variant/841.json @@ -0,0 +1,38 @@ +{ + "1": { + "df6655": "c55885", + "b5915b": "34123a", + "9b2629": "70a2c5", + "8d764b": "110723", + "56ab32": "a59ab3", + "f0bda6": "c1f3f3", + "c3a965": "b3b1d6", + "f1c950": "f3c5dd", + "ccca71": "e6dcf9", + "ccb468": "5d2654", + "612324": "3e6085", + "d72d31": "abd7e2", + "874c23": "613863", + "ebe381": "854774", + "488235": "8e7a9e", + "395a2e": "383146" + }, + "2": { + "df6655": "463731", + "b5915b": "541711", + "9b2629": "bfb5ab", + "8d764b": "230313", + "56ab32": "e28c95", + "f0bda6": "eeedea", + "c3a965": "cbb4af", + "f1c950": "589df3", + "ccca71": "e2dcd6", + "ccb468": "8b4332", + "612324": "68645f", + "d72d31": "dcd9d1", + "874c23": "2e2246", + "ebe381": "c68862", + "488235": "a8546e", + "395a2e": "4f0e30" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/842-gigantamax.json b/public/images/pokemon/variant/842-gigantamax.json new file mode 100644 index 00000000000..5d3b8c49133 --- /dev/null +++ b/public/images/pokemon/variant/842-gigantamax.json @@ -0,0 +1,52 @@ +{ + "1": { + "101010": "101010", + "772628": "3e6085", + "2c4828": "291634", + "427638": "7a7c9e", + "872d23": "460c4d", + "8b3329": "2c255d", + "913c3c": "5b4585", + "a63139": "70a2c5", + "8d4229": "272a52", + "bf6c31": "b668a0", + "d2394d": "abd7e2", + "d54456": "751680", + "c57741": "9c2e72", + "e84466": "8666ae", + "39a43d": "9aa0b3", + "b3ac62": "95aec9", + "c68a48": "2b526f", + "e2bb56": "c55885", + "e9c558": "397880", + "ffc66a": "eeb4cb", + "dad08b": "dcebf9", + "fff1ab": "63b9b9", + "f9f9f9": "f9f9f9" + }, + "2": { + "101010": "101010", + "772628": "695d57", + "2c4828": "341c1c", + "427638": "a54e69", + "872d23": "2e2246", + "8b3329": "3a2222", + "913c3c": "682d2d", + "a63139": "baada1", + "8d4229": "9c564c", + "bf6c31": "354dbf", + "d2394d": "dcd9d1", + "d54456": "2e38bf", + "c57741": "291411", + "e84466": "915a41", + "39a43d": "e28c95", + "b3ac62": "c1a39c", + "c68a48": "d1a87e", + "e2bb56": "463731", + "e9c558": "eee0bc", + "ffc66a": "589df3", + "dad08b": "e2dcd6", + "fff1ab": "fdf3c0", + "f9f9f9": "f9f9f9" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/842.json b/public/images/pokemon/variant/842.json new file mode 100644 index 00000000000..9563715745e --- /dev/null +++ b/public/images/pokemon/variant/842.json @@ -0,0 +1,40 @@ +{ + "1": { + "101010": "101010", + "1f4329": "313846", + "1f5829": "852560", + "2c743e": "7a7c9e", + "9f7034": "9aa0b3", + "ac6b20": "110723", + "af2348": "67829e", + "e75574": "70a2c5", + "39a45f": "92cbd9", + "7de755": "9aa0b3", + "e78422": "1f1946", + "ffa63b": "2d3d68", + "f1cf6d": "a3b9d0", + "f9d56d": "698db4", + "ffc575": "2b526f", + "f18e8e": "c1f3f3", + "fcff86": "397880" + }, + "2": { + "101010": "101010", + "1f4329": "511c2d", + "1f5829": "2e2246", + "2c743e": "a8546e", + "9f7034": "3a130d", + "ac6b20": "68645f", + "af2348": "bfb5ab", + "e75574": "dcd9d1", + "39a45f": "e28c95", + "7de755": "589df3", + "e78422": "4b211b", + "ffa63b": "63473b", + "f1cf6d": "cbb4af", + "f9d56d": "b9937a", + "ffc575": "d1a87e", + "f18e8e": "eeedea", + "fcff86": "eee0bc" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/871.json b/public/images/pokemon/variant/871.json new file mode 100644 index 00000000000..5004d3013b5 --- /dev/null +++ b/public/images/pokemon/variant/871.json @@ -0,0 +1,32 @@ +{ + "1": { + "101010": "101010", + "2e2732": "1b3334", + "281f2e": "2a2732", + "46384c": "504540", + "493d4e": "3a5d57", + "665272": "62857c", + "544947": "7d320e", + "7a7270": "a8501b", + "9e9a96": "cd7930", + "7b4e1c": "5b0d3f", + "d58815": "a02c58", + "fdba2f": "c45858", + "fdf22f": "f1e8e8" + }, + "2": { + "101010": "101010", + "2e2732": "8b4738", + "281f2e": "212232", + "46384c": "504740", + "493d4e": "ce8a66", + "665272": "eac69b", + "544947": "1a1730", + "7a7270": "27223b", + "9e9a96": "3a3449", + "7b4e1c": "222c58", + "d58815": "343f7f", + "fdba2f": "67729f", + "fdf22f": "8e9fc9" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/88.json b/public/images/pokemon/variant/88.json new file mode 100644 index 00000000000..61b7ca3b802 --- /dev/null +++ b/public/images/pokemon/variant/88.json @@ -0,0 +1,28 @@ +{ + "1": { + "101010": "101010", + "424a5a": "5b3a1d", + "5a3173": "6a010c", + "848c9c": "9b7c48", + "944a9c": "b1160e", + "adb5bd": "e9de8c", + "bd7bbd": "d55021", + "ce8cc5": "e98a47", + "d6d6de": "ded7ce", + "ffffff": "ffffff", + "efade6": "f8be70" + }, + "2": { + "101010": "101010", + "424a5a": "2d7351", + "5a3173": "a21851", + "848c9c": "69b17b", + "944a9c": "d04569", + "adb5bd": "b0e4a9", + "bd7bbd": "ed8ea2", + "ce8cc5": "f4bfbf", + "d6d6de": "d6d6de", + "ffffff": "ffffff", + "efade6": "f8d8cf" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/89.json b/public/images/pokemon/variant/89.json new file mode 100644 index 00000000000..eda3558d7c2 --- /dev/null +++ b/public/images/pokemon/variant/89.json @@ -0,0 +1,30 @@ +{ + "1": { + "101010": "101010", + "424a5a": "5b3a1d", + "5a3173": "6a010c", + "848c9c": "9b7c48", + "944a9c": "b1160e", + "adb5bd": "e9de8c", + "bd7bbd": "d55021", + "ce8cc5": "e98a47", + "d6d6de": "ded7ce", + "ffffff": "ffffff", + "efade6": "f8be70", + "ad63ad": "c63a17" + }, + "2": { + "101010": "101010", + "424a5a": "2d7351", + "5a3173": "a21851", + "848c9c": "69b17b", + "944a9c": "d04569", + "adb5bd": "b0e4a9", + "bd7bbd": "ed8ea2", + "ce8cc5": "f4bfbf", + "d6d6de": "d6d6de", + "ffffff": "ffffff", + "efade6": "f8d8cf", + "ad63ad": "e5728a" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/_exp_masterlist.json b/public/images/pokemon/variant/_exp_masterlist.json index 0ef5f209439..e588be59073 100644 --- a/public/images/pokemon/variant/_exp_masterlist.json +++ b/public/images/pokemon/variant/_exp_masterlist.json @@ -94,6 +94,8 @@ "689": [0, 1, 1], "690": [0, 1, 1], "691": [0, 1, 1], + "692": [0, 1, 1], + "693": [0, 1, 1], "696": [0, 1, 1], "697": [0, 1, 1], "699": [0, 1, 1], @@ -120,6 +122,8 @@ "735": [0, 1, 1], "742": [0, 2, 2], "743": [0, 2, 2], + "746": [0, 1, 1], + "746-school": [0, 1, 1], "747": [0, 2, 2], "748": [0, 1, 1], "751": [0, 1, 1], @@ -159,6 +163,7 @@ "778-busted": [0, 1, 1], "778-disguised": [0, 1, 1], "779": [0, 1, 1], + "780": [0, 1, 1], "789": [1, 1, 1], "790": [0, 1, 1], "791": [2, 1, 1], @@ -186,6 +191,9 @@ "830": [0, 1, 1], "835": [0, 1, 1], "836": [0, 2, 2], + "840": [0, 1, 1], + "841": [0, 1, 1], + "842": [0, 1, 1], "850": [0, 1, 1], "851": [0, 1, 1], "854": [0, 1, 1], @@ -200,6 +208,7 @@ "863": [0, 1, 1], "864": [0, 1, 1], "867": [0, 1, 1], + "871": [0, 1, 1], "872": [1, 1, 1], "873": [1, 1, 1], "876-female": [0, 1, 1], @@ -297,6 +306,8 @@ "2026": [0, 1, 1], "2027": [0, 1, 1], "2028": [0, 1, 1], + "2037": [0, 1, 1], + "2038": [0, 1, 1], "2052": [0, 1, 1], "2053": [0, 1, 0], "2103": [0, 1, 1], @@ -422,6 +433,8 @@ "689": [0, 1, 1], "690": [0, 1, 1], "691": [0, 1, 1], + "692": [0, 1, 1], + "693": [0, 1, 1], "696": [0, 1, 1], "697": [0, 1, 1], "699": [0, 2, 2], @@ -448,6 +461,8 @@ "735": [0, 1, 1], "742": [0, 2, 2], "743": [0, 2, 2], + "746": [0, 1, 1], + "746-school": [0, 1, 1], "747": [0, 2, 2], "748": [0, 1, 1], "751": [0, 1, 1], @@ -486,6 +501,7 @@ "778-busted": [0, 1, 1], "778-disguised": [0, 1, 1], "779": [0, 1, 1], + "780": [0, 1, 1], "789": [1, 1, 1], "790": [0, 1, 1], "791": [1, 1, 1], @@ -513,6 +529,9 @@ "830": [0, 1, 1], "835": [0, 1, 1], "836": [0, 1, 1], + "840": [0, 1, 1], + "841": [0, 1, 1], + "842": [0, 1, 1], "850": [0, 1, 1], "851": [0, 1, 1], "854": [0, 1, 1], @@ -527,6 +546,7 @@ "863": [0, 1, 1], "864": [0, 1, 1], "867": [0, 1, 1], + "871": [0, 1, 1], "872": [1, 1, 1], "873": [1, 1, 1], "876-female": [0, 1, 1], @@ -623,6 +643,8 @@ "2026": [0, 1, 1], "2027": [0, 1, 1], "2028": [0, 1, 1], + "2037": [0, 1, 1], + "2038": [0, 1, 1], "2052": [0, 1, 1], "2053": [0, 1, 1], "2103": [0, 1, 1], diff --git a/public/images/pokemon/variant/_masterlist.json b/public/images/pokemon/variant/_masterlist.json index ac683d9544e..719f3db3d86 100644 --- a/public/images/pokemon/variant/_masterlist.json +++ b/public/images/pokemon/variant/_masterlist.json @@ -32,6 +32,9 @@ "29": [0, 1, 1], "30": [0, 1, 1], "31": [1, 1, 1], + "32": [0, 1, 1], + "33": [0, 1, 1], + "34": [0, 1, 1], "35": [0, 1, 2], "36": [0, 1, 1], "37": [0, 1, 1], @@ -67,6 +70,8 @@ "85": [1, 1, 1], "86": [1, 1, 1], "87": [1, 1, 1], + "88": [0, 1, 1], + "89": [0, 1, 1], "92": [2, 2, 2], "93": [1, 1, 1], "94-gigantamax": [1, 2, 2], @@ -113,6 +118,8 @@ "141": [0, 2, 2], "142-mega": [0, 1, 1], "142": [0, 1, 1], + "143-gigantamax": [0, 1, 1], + "143": [0, 1, 1], "144": [1, 2, 2], "145": [1, 1, 1], "146": [1, 1, 1], @@ -154,6 +161,9 @@ "183": [0, 1, 2], "184": [0, 2, 2], "185": [0, 1, 1], + "187": [0, 1, 1], + "188": [0, 1, 1], + "189": [0, 1, 1], "190": [0, 1, 1], "193": [0, 1, 1], "194": [0, 1, 1], @@ -192,6 +202,8 @@ "201-w": [0, 1, 1], "201-o": [0, 1, 1], "203": [0, 1, 1], + "204": [0, 1, 1], + "205": [0, 1, 1], "206": [0, 1, 1], "207": [0, 1, 1], "211": [0, 1, 1], @@ -247,6 +259,7 @@ "291": [2, 2, 2], "292": [2, 1, 2], "298": [0, 2, 2], + "299": [0, 1, 1], "300": [1, 1, 1], "301": [1, 1, 1], "302": [0, 1, 1], @@ -265,13 +278,19 @@ "310": [0, 1, 1], "311": [1, 1, 1], "312": [0, 1, 1], + "313": [0, 1, 1], + "314": [0, 1, 1], "315": [0, 1, 1], "320": [0, 1, 1], "321": [0, 1, 1], + "325": [0, 1, 1], + "326": [0, 1, 1], "327": [0, 1, 1], "328": [0, 1, 1], "329": [0, 1, 2], "330": [0, 1, 1], + "331": [0, 1, 1], + "332": [0, 1, 1], "333": [0, 1, 1], "334-mega": [0, 2, 1], "334": [0, 2, 2], @@ -283,6 +302,8 @@ "340": [0, 1, 2], "341": [0, 2, 2], "342": [0, 2, 2], + "345": [0, 1, 1], + "346": [0, 1, 1], "351-rainy": [1, 2, 2], "351-snowy": [1, 1, 1], "351-sunny": [1, 2, 2], @@ -331,10 +352,16 @@ "393": [0, 1, 1], "394": [0, 1, 1], "395": [0, 1, 1], + "396": [0, 1, 1], + "397": [0, 1, 1], + "398": [0, 1, 1], "399": [0, 1, 1], "400": [0, 1, 1], "401": [0, 1, 1], "402": [0, 1, 1], + "403": [0, 1, 1], + "404": [0, 1, 1], + "405": [0, 1, 1], "406": [0, 1, 1], "407": [0, 1, 1], "412-sandy": [2, 2, 2], @@ -344,8 +371,12 @@ "413-trash": [1, 1, 1], "413-sandy": [1, 1, 1], "414": [0, 1, 1], + "417": [0, 1, 1], "418": [0, 1, 1], "419": [0, 1, 1], + "420": [0, 1, 1], + "421-overcast": [0, 1, 1], + "421-sunshine": [0, 1, 1], "422-west": [1, 1, 1], "422-east": [1, 1, 1], "423-west": [1, 1, 1], @@ -369,6 +400,7 @@ "444": [1, 1, 1], "445-mega": [1, 1, 1], "445": [1, 1, 1], + "446": [0, 1, 1], "447": [1, 1, 1], "448-mega": [1, 1, 1], "448": [1, 1, 1], @@ -392,6 +424,7 @@ "474": [0, 1, 1], "475-mega": [0, 2, 2], "475": [0, 1, 1], + "476": [0, 1, 1], "478": [0, 2, 1], "479-heat": [0, 1, 1], "479-wash": [0, 1, 1], @@ -416,11 +449,22 @@ "495": [0, 1, 1], "496": [0, 1, 1], "497": [0, 1, 1], + "498": [0, 1, 1], + "499": [0, 1, 1], + "500": [0, 1, 1], "501": [0, 1, 1], "502": [0, 1, 1], "503": [0, 1, 1], + "511": [0, 1, 1], + "512": [0, 1, 1], + "513": [0, 1, 1], + "514": [0, 1, 1], + "515": [0, 1, 1], + "516": [0, 1, 1], "517": [0, 1, 1], "518": [0, 1, 1], + "522": [0, 1, 1], + "523": [0, 1, 1], "524": [0, 1, 1], "525": [0, 1, 1], "526": [0, 2, 2], @@ -433,6 +477,9 @@ "532": [0, 1, 1], "533": [0, 1, 1], "534": [0, 1, 1], + "535": [0, 1, 1], + "536": [0, 1, 1], + "537": [0, 1, 1], "538": [0, 1, 1], "539": [0, 2, 2], "540": [0, 1, 1], @@ -448,17 +495,23 @@ "551": [0, 1, 1], "552": [0, 1, 1], "553": [0, 1, 1], + "554": [0, 1, 1], + "555": [0, 1, 1], + "555-zen": [0, 1, 1], "556": [0, 1, 1], "559": [1, 1, 1], "560": [1, 1, 1], "562": [0, 1, 1], "563": [0, 1, 1], + "566": [0, 1, 1], + "567": [0, 1, 1], "568": [0, 2, 2], "569-gigantamax": [0, 1, 1], "569": [0, 1, 1], "570": [0, 1, 1], "571": [0, 1, 1], "572": [0, 1, 1], + "573": [0, 1, 1], "577": [1, 1, 1], "578": [1, 1, 1], "579": [1, 1, 1], @@ -499,6 +552,7 @@ "621": [0, 1, 1], "622": [0, 1, 1], "623": [0, 1, 1], + "626": [0, 1, 1], "631": [0, 2, 2], "632": [0, 1, 1], "633": [0, 1, 1], @@ -507,6 +561,11 @@ "636": [0, 1, 1], "637": [0, 1, 1], "640": [0, 1, 1], + "643": [0, 1, 1], + "644": [0, 1, 1], + "646-black": [0, 1, 1], + "646-white": [0, 1, 1], + "646": [0, 1, 1], "647-resolute": [0, 1, 1], "647-ordinary": [0, 1, 1], "648-aria": [0, 1, 1], @@ -583,6 +642,8 @@ "689": [0, 1, 1], "690": [0, 1, 1], "691": [0, 1, 1], + "692": [0, 1, 1], + "693": [0, 1, 1], "696": [0, 1, 1], "697": [0, 1, 1], "698": [0, 1, 1], @@ -613,6 +674,8 @@ "735": [0, 1, 1], "742": [0, 2, 2], "743": [0, 2, 2], + "746": [0, 1, 1], + "746-school": [0, 1, 1], "747": [0, 1, 1], "748": [0, 1, 1], "751": [0, 1, 1], @@ -651,6 +714,10 @@ "778-busted": [0, 1, 1], "778-disguised": [0, 1, 1], "779": [0, 1, 1], + "780": [0, 1, 1], + "782": [0, 1, 1], + "783": [0, 1, 1], + "784": [0, 1, 1], "789": [1, 1, 1], "790": [0, 1, 1], "791-radiant-sun": [0, 1, 1], @@ -683,6 +750,11 @@ "830": [0, 1, 1], "835": [0, 1, 1], "836": [0, 2, 2], + "840": [0, 1, 1], + "841-gigantamax": [0, 1, 1], + "841": [0, 1, 1], + "842-gigantamax": [0, 1, 1], + "842": [0, 1, 1], "850": [0, 1, 1], "851-gigantamax": [0, 1, 1], "851": [0, 1, 1], @@ -700,6 +772,7 @@ "863": [0, 1, 1], "864": [0, 1, 1], "867": [0, 1, 1], + "871": [0, 1, 1], "872": [1, 1, 1], "873": [1, 1, 1], "876-female": [0, 1, 1], @@ -798,14 +871,18 @@ "1007-apex-build": [0, 2, 2], "1008-ultimate-mode": [1, 1, 1], "1010": [0, 1, 1], + "1011": [0, 1, 1], "1012-counterfeit": [0, 1, 1], "1013-unremarkable": [0, 1, 1], "1018": [0, 1, 1], + "1019": [0, 1, 1], "1022": [0, 1, 1], "1023": [0, 1, 1], "2026": [0, 1, 1], "2027": [0, 1, 1], "2028": [0, 1, 1], + "2037": [0, 1, 1], + "2038": [0, 1, 1], "2052": [0, 1, 1], "2053": [0, 1, 1], "2103": [0, 1, 1], @@ -880,12 +957,20 @@ "307": [0, 1, 1], "308": [0, 1, 1], "315": [0, 1, 1], + "332": [0, 1, 1], "369": [0, 1, 1], + "396": [0, 1, 1], + "397": [0, 1, 1], + "398": [0, 1, 1], "399": [0, 1, 1], "400": [0, 1, 1], "401": [0, 1, 1], "402": [0, 2, 2], + "403": [0, 1, 1], + "404": [0, 1, 1], + "405": [0, 1, 1], "407": [0, 1, 1], + "417": [0, 1, 1], "418": [0, 1, 1], "419": [0, 2, 1], "424": [0, 1, 1], @@ -937,6 +1022,9 @@ "29": [0, 1, 1], "30": [0, 1, 1], "31": [1, 1, 1], + "32": [0, 1, 1], + "33": [0, 1, 1], + "34": [0, 1, 1], "35": [0, 1, 1], "36": [0, 2, 1], "37": [0, 1, 1], @@ -972,6 +1060,8 @@ "85": [1, 1, 1], "86": [1, 1, 1], "87": [1, 1, 1], + "88": [0, 1, 1], + "89": [0, 1, 1], "92": [2, 2, 2], "93": [1, 1, 1], "94-gigantamax": [1, 1, 1], @@ -1018,6 +1108,8 @@ "141": [0, 1, 1], "142-mega": [0, 1, 1], "142": [0, 1, 1], + "143-gigantamax": [0, 1, 1], + "143": [0, 1, 1], "144": [1, 1, 1], "145": [1, 1, 1], "146": [1, 1, 1], @@ -1059,6 +1151,9 @@ "183": [0, 1, 1], "184": [0, 1, 1], "185": [0, 1, 1], + "187": [0, 1, 1], + "188": [0, 1, 1], + "189": [0, 1, 1], "190": [0, 1, 1], "193": [0, 1, 1], "194": [0, 1, 1], @@ -1097,6 +1192,8 @@ "201-w": [0, 1, 1], "201-o": [0, 1, 1], "203": [0, 1, 1], + "204": [0, 1, 1], + "205": [0, 1, 1], "206": [0, 1, 1], "207": [0, 1, 1], "211": [0, 1, 1], @@ -1152,6 +1249,7 @@ "291": [2, 2, 2], "292": [2, 2, 2], "298": [0, 1, 1], + "299": [0, 1, 1], "300": [1, 1, 1], "301": [1, 1, 1], "302": [0, 1, 1], @@ -1170,13 +1268,19 @@ "310": [0, 1, 1], "311": [1, 1, 1], "312": [0, 1, 1], + "313": [0, 1, 1], + "314": [0, 1, 1], "315": [0, 1, 1], "320": [0, 1, 1], "321": [0, 1, 1], + "325": [0, 1, 1], + "326": [0, 1, 1], "327": [0, 1, 1], "328": [0, 1, 1], "329": [0, 1, 1], "330": [0, 1, 1], + "331": [0, 1, 1], + "332": [0, 1, 1], "333": [0, 1, 1], "334-mega": [0, 1, 1], "334": [0, 1, 1], @@ -1188,6 +1292,8 @@ "340": [0, 1, 2], "341": [0, 1, 1], "342": [0, 2, 2], + "345": [0, 1, 1], + "346": [0, 1, 1], "351-rainy": [1, 1, 1], "351-snowy": [1, 1, 1], "351-sunny": [1, 1, 2], @@ -1236,10 +1342,16 @@ "393": [0, 1, 1], "394": [0, 1, 1], "395": [0, 1, 1], + "396": [0, 1, 1], + "397": [0, 1, 1], + "398": [0, 1, 1], "399": [0, 2, 1], "400": [0, 1, 1], "401": [0, 1, 1], "402": [0, 1, 1], + "403": [0, 1, 1], + "404": [0, 1, 1], + "405": [0, 1, 1], "406": [0, 1, 1], "407": [0, 1, 1], "412-sandy": [2, 2, 2], @@ -1249,8 +1361,12 @@ "413-trash": [1, 1, 1], "413-sandy": [1, 1, 1], "414": [0, 1, 1], + "417": [0, 1, 1], "418": [0, 1, 1], "419": [0, 1, 1], + "420": [0, 1, 1], + "421-overcast": [0, 1, 1], + "421-sunshine": [0, 1, 1], "422-west": [1, 1, 1], "422-east": [1, 1, 1], "423-west": [1, 1, 1], @@ -1274,6 +1390,7 @@ "444": [1, 1, 1], "445-mega": [1, 1, 1], "445": [1, 1, 1], + "446": [0, 1, 1], "447": [1, 1, 1], "448-mega": [1, 1, 1], "448": [1, 1, 1], @@ -1297,6 +1414,7 @@ "474": [0, 1, 1], "475-mega": [0, 2, 2], "475": [0, 1, 1], + "476": [0, 1, 1], "478": [0, 2, 1], "479-heat": [0, 1, 1], "479-wash": [0, 1, 1], @@ -1307,8 +1425,9 @@ "480": [1, 1, 1], "481": [1, 1, 1], "482": [1, 1, 1], - "485": [0, 1, 1], "486": [0, 1 , 1 - ] ,"487-altered": [0, 1, 1], + "485": [0, 1, 1], + "486": [0, 1 , 1] , + "487-altered": [0, 1, 1], "487-origin": [0, 1, 1], "488": [0, 1, 1], "489": [1, 1, 1], @@ -1320,11 +1439,22 @@ "495": [0, 1, 1], "496": [0, 1, 1], "497": [0, 1, 1], + "498": [0, 1, 1], + "499": [0, 1, 1], + "500": [0, 1, 1], "501": [0, 1, 1], "502": [0, 1, 1], "503": [0, 1, 1], + "511": [0, 1, 1], + "512": [0, 1, 1], + "513": [0, 1, 1], + "514": [0, 1, 1], + "515": [0, 1, 1], + "516": [0, 1, 1], "517": [0, 1, 1], "518": [0, 1, 1], + "522": [0, 1, 1], + "523": [0, 1, 1], "524": [0, 1, 1], "525": [0, 1, 1], "526": [0, 1, 1], @@ -1337,6 +1467,9 @@ "532": [0, 1, 1], "533": [0, 1, 1], "534": [0, 1, 1], + "535": [0, 1, 1], + "536": [0, 1, 1], + "537": [0, 1, 1], "538": [0, 1, 1], "539": [0, 2, 2], "540": [0, 1, 1], @@ -1352,17 +1485,23 @@ "551": [0, 1, 1], "552": [0, 1, 1], "553": [0, 1, 1], + "554": [0, 1, 1], + "555": [0, 1, 1], + "555-zen": [0, 1, 1], "556": [0, 1, 1], "559": [1, 1, 1], "560": [1, 1, 1], "562": [0, 1, 1], "563": [0, 1, 1], + "566": [0, 1, 1], + "567": [0, 1, 1], "568": [0, 1, 1], "569-gigantamax": [0, 1, 1], "569": [0, 1, 1], "570": [0, 1, 1], "571": [0, 1, 1], "572": [0, 1, 1], + "573": [0, 1, 1], "577": [1, 1, 1], "578": [1, 1, 1], "579": [1, 1, 1], @@ -1403,6 +1542,7 @@ "621": [0, 1, 1], "622": [0, 1, 1], "623": [0, 1, 1], + "626": [0, 1, 1], "631": [0, 2, 2], "632": [0, 1, 1], "633": [0, 1, 1], @@ -1411,12 +1551,11 @@ "636": [0, 1, 1], "637": [0, 1, 1], "640": [0, 1, 1], - "641-incarnate": [0, 0, 0], - "641-therian": [0, 0, 0], - "642-incarnate": [0, 0, 0], - "642-therian": [0, 0, 0], - "645-incarnate": [0, 0, 0], - "645-therian": [0, 0, 0], + "643": [0, 1, 1], + "644": [0, 1, 1], + "646-black": [0, 1, 1], + "646-white": [0, 1, 1], + "646": [0, 1, 1], "647-resolute": [0, 1, 1], "647-ordinary": [0, 1, 1], "648-aria": [0, 1, 1], @@ -1493,6 +1632,8 @@ "689": [0, 1, 1], "690": [0, 1, 1], "691": [0, 1, 1], + "692": [0, 1, 1], + "693": [0, 1, 1], "696": [0, 1, 1], "697": [0, 1, 1], "698": [0, 1, 1], @@ -1523,6 +1664,8 @@ "735": [0, 1, 1], "742": [0, 2, 2], "743": [0, 2, 2], + "746": [0, 1, 1], + "746-school": [0, 1, 1], "747": [0, 1, 1], "748": [0, 1, 1], "751": [0, 1, 1], @@ -1561,6 +1704,10 @@ "778-busted": [0, 1, 1], "778-disguised": [0, 1, 1], "779": [0, 1, 1], + "780": [0, 1, 1], + "782": [0, 1, 1], + "783": [0, 1, 1], + "784": [0, 1, 1], "789": [1, 1, 1], "790": [0, 1, 1], "791-radiant-sun": [0, 1, 1], @@ -1593,6 +1740,11 @@ "830": [0, 1, 1], "835": [0, 1, 1], "836": [0, 1, 1], + "840": [0, 1, 1], + "841-gigantamax": [0, 1, 1], + "841": [0, 1, 1], + "842-gigantamax": [0, 1, 1], + "842": [0, 1, 1], "850": [0, 1, 1], "851-gigantamax": [0, 1, 1], "851": [0, 1, 1], @@ -1610,6 +1762,7 @@ "863": [0, 1, 1], "864": [0, 1, 1], "867": [0, 1, 1], + "871": [0, 1, 1], "872": [1, 1, 1], "873": [1, 1, 1], "876-female": [0, 1, 1], @@ -1708,14 +1861,18 @@ "1007-apex-build": [0, 2, 2], "1008-ultimate-mode": [1, 1, 1], "1010": [0, 1, 1], + "1011": [0, 1, 1], "1012-counterfeit": [0, 1, 1], "1013-unremarkable": [0, 1, 1], "1018": [0, 1, 1], + "1019": [0, 1, 1], "1022": [0, 2, 2], "1023": [0, 1, 1], "2026": [0, 1, 1], "2027": [0, 1, 1], "2028": [0, 1, 1], + "2037": [0, 1, 1], + "2038": [0, 1, 1], "2052": [0, 1, 1], "2053": [0, 1, 1], "2103": [0, 1, 1], @@ -1790,12 +1947,20 @@ "307": [0, 1, 1], "308": [0, 1, 1], "315": [0, 1, 1], + "332": [0, 1, 1], "369": [0, 1, 1], + "396": [0, 1, 1], + "397": [0, 1, 1], + "398": [0, 1, 1], "399": [0, 2, 1], "400": [0, 1, 1], "401": [0, 1, 1], "402": [0, 1, 1], + "403": [0, 1, 1], + "404": [0, 1, 1], + "405": [0, 1, 1], "407": [0, 1, 1], + "417": [0, 1, 1], "418": [0, 2, 2], "419": [0, 1, 1], "424": [0, 1, 1], diff --git a/public/images/pokemon/variant/back/1011.json b/public/images/pokemon/variant/back/1011.json new file mode 100644 index 00000000000..d8cffc4d587 --- /dev/null +++ b/public/images/pokemon/variant/back/1011.json @@ -0,0 +1,29 @@ +{ + "1": { + "b09579": "7b91a7", + "253922": "232b3a", + "fd9477": "63b9b9", + "345539": "313d4b", + "9c1e2a": "272a52", + "7eb36a": "9aa0b3", + "9fc164": "9aa0b3", + "8e9960": "67698b", + "c73030": "2b526f", + "e64d3c": "397880", + "477d45": "67698b", + "61071f": "190e2e" + }, + "2": { + "253922": "2e0920", + "fd9477": "f3efde", + "345539": "4f162a", + "9c1e2a": "9c564c", + "7eb36a": "e8838d", + "9fc164": "e28c95", + "8e9960": "9e4553", + "c73030": "d1a87e", + "e64d3c": "eee0bc", + "477d45": "903c4e", + "61071f": "4f0a1d" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/1019.json b/public/images/pokemon/variant/back/1019.json new file mode 100644 index 00000000000..b8e674f2357 --- /dev/null +++ b/public/images/pokemon/variant/back/1019.json @@ -0,0 +1,44 @@ +{ + "1": { + "8b1313": "302752", + "746739": "582c74", + "6ba835": "7a7c9e", + "b49779": "9c2e72", + "9ce05f": "9aa0b3", + "bf2b2e": "abd7e2", + "d43e2d": "4e969e", + "841111": "302752", + "ae2124": "663267", + "ff7a59": "69c5c5", + "680606": "27103c", + "b72629": "2b526f", + "b59a7d": "a3b9d0", + "3e662b": "313846", + "e8cfb4": "c55885", + "82664a": "48476c", + "a60b0b": "70a2c5", + "e9cfb3": "dcebf9", + "3c9b3e": "e8edff" + }, + "2": { + "8b1313": "413534", + "746739": "312374", + "6ba835": "a8546e", + "b49779": "402622", + "9ce05f": "e28c95", + "bf2b2e": "e8e5de", + "d43e2d": "eedfb8", + "841111": "4b211b", + "ae2124": "63473b", + "ff7a59": "f3efde", + "680606": "4b211b", + "b72629": "bf9870", + "b59a7d": "cbb4af", + "3e662b": "341c1c", + "e8cfb4": "5d4c45", + "82664a": "613838", + "a60b0b": "c7c2bc", + "e9cfb3": "e2dcd6", + "3c9b3e": "5e75e2" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/143-gigantamax.json b/public/images/pokemon/variant/back/143-gigantamax.json new file mode 100644 index 00000000000..ffe8e7a31cd --- /dev/null +++ b/public/images/pokemon/variant/back/143-gigantamax.json @@ -0,0 +1,62 @@ +{ + "1": { + "101010": "101010", + "624120": "544a41", + "5e3e1d": "351b52", + "31573f": "7b59ba", + "54792b": "c06386", + "103941": "701a55", + "315a7b": "943469", + "bd3740": "c94489", + "a3704e": "522663", + "a47352": "6b6357", + "ad7f5f": "b56564", + "de5656": "d65a8a", + "069f5f": "b083de", + "89b432": "f1a1b2", + "bbe35b": "f1a1b2", + "98a0a0": "98a0a0", + "a0a0a0": "a0a0a0", + "fc8b9f": "ed7794", + "e6c5ac": "cf8880", + "f6e6bd": "f0beb1", + "c9c9c9": "c9c9c9", + "f4f4f4": "f4f4f4", + "4d6e27": "5c9bb8", + "91ba3d": "6bc7c7", + "93bf39": "74c2cf", + "bee366": "8de3d7", + "d95b7f": "c24a6c", + "fc92a6": "fc92a6" + }, + "2": { + "101010": "101010", + "624120": "ba6632", + "5e3e1d": "c2986e", + "31573f": "4b4c52", + "54792b": "208073", + "103941": "93b5c2", + "315a7b": "b6d6d9", + "bd3740": "9e4619", + "a3704e": "e6cda1", + "a47352": "cf9d48", + "ad7f5f": "284878", + "de5656": "bd742b", + "069f5f": "7c7c82", + "89b432": "37ad82", + "bbe35b": "79e0a2", + "98a0a0": "53738a", + "a0a0a0": "abd1cc", + "fc8b9f": "d9a443", + "e6c5ac": "27538a", + "f6e6bd": "36719c", + "c9c9c9": "b4d3d9", + "f4f4f4": "f4f4f4", + "4d6e27": "964117", + "91ba3d": "d9a65b", + "93bf39": "d9a250", + "bee366": "e6cf5e", + "d95b7f": "b77727", + "fc92a6": "d9b64c" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/143.json b/public/images/pokemon/variant/back/143.json new file mode 100644 index 00000000000..7dc08d72559 --- /dev/null +++ b/public/images/pokemon/variant/back/143.json @@ -0,0 +1,32 @@ +{ + "1": { + "000000": "101010", + "103a42": "701a55", + "315a7b": "943469", + "528cad": "ad4b70", + "735a21": "91504e", + "737373": "756363", + "a57352": "b36462", + "c59c5a": "b36462", + "cecece": "cbc4c4", + "e6c5ad": "cf8880", + "f7d6bd": "e09f96", + "f7e6bd": "f0beb1", + "ffffff": "ffffff" + }, + "2": { + "000000": "101010", + "103a42": "93b5c2", + "315a7b": "b6d6d9", + "528cad": "d5e8e7", + "735a21": "1b2e61", + "737373": "525266", + "a57352": "1b2e61", + "c59c5a": "20386e", + "cecece": "bfc7cb", + "e6c5ad": "284878", + "f7d6bd": "38638f", + "f7e6bd": "457ca8", + "ffffff": "ffffff" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/187.json b/public/images/pokemon/variant/back/187.json new file mode 100644 index 00000000000..7e0d1dca511 --- /dev/null +++ b/public/images/pokemon/variant/back/187.json @@ -0,0 +1,28 @@ +{ + "1": { + "101010": "101010", + "425a10": "934200", + "52843a": "c27600", + "63bd5a": "efac00", + "8c083a": "012a3e", + "9cde5a": "ffdc46", + "b56373": "003e53", + "ff7b94": "006d7f", + "f79cb5": "00a59b", + "ffc500": "e3396c", + "ffff00": "ffa8b6" + }, + "2": { + "101010": "101010", + "425a10": "5f0052", + "52843a": "960070", + "63bd5a": "960070", + "8c083a": "802600", + "9cde5a": "e01c75", + "b56373": "d8591c", + "ff7b94": "fa9600", + "f79cb5": "ffc93b", + "ffc500": "5ec0ec", + "ffff00": "94ecf9" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/188.json b/public/images/pokemon/variant/back/188.json new file mode 100644 index 00000000000..a674bbf244e --- /dev/null +++ b/public/images/pokemon/variant/back/188.json @@ -0,0 +1,30 @@ +{ + "1": { + "000000": "101010", + "196b00": "c66b31", + "42b521": "e99f23", + "63d631": "ffd953", + "8c5200": "004269", + "8cf74a": "fef579", + "b5d6de": "fa9600", + "ce8400": "075976", + "f7a519": "005883", + "ffd600": "046c90", + "ffef00": "007b9a", + "ffffff": "ffc93b" + }, + "2": { + "000000": "101010", + "196b00": "2659ad", + "42b521": "5293d5", + "63d631": "79d5fa", + "8c5200": "5f0052", + "8cf74a": "a6eafa", + "b5d6de": "fa9600", + "ce8400": "9d0562", + "f7a519": "960070", + "ffd600": "ba0071", + "ffef00": "e01c75", + "ffffff": "ffc93b" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/189.json b/public/images/pokemon/variant/back/189.json new file mode 100644 index 00000000000..ed1e40ed4b3 --- /dev/null +++ b/public/images/pokemon/variant/back/189.json @@ -0,0 +1,32 @@ +{ + "1": { + "101010": "101010", + "194a73": "b64d21", + "29844a": "83839f", + "3a73c5": "e19903", + "739cff": "fcd936", + "84ce7b": "c1bdd1", + "8cb5ff": "f9f870", + "b58c31": "071a3c", + "d6bd5a": "282773", + "ded67b": "2192b2", + "efe69c": "104f80", + "fff7b5": "1379a0", + "ffffde": "2faac4" + }, + "2": { + "101010": "101010", + "194a73": "680054", + "29844a": "3887d3", + "3a73c5": "980062", + "739cff": "d20d6a", + "84ce7b": "58c1eb", + "8cb5ff": "e4486a", + "b58c31": "da5014", + "d6bd5a": "f06f22", + "ded67b": "fce37b", + "efe69c": "ffa747", + "fff7b5": "ffd45a", + "ffffde": "f9f29b" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/2037.json b/public/images/pokemon/variant/back/2037.json new file mode 100644 index 00000000000..0d2c02cf980 --- /dev/null +++ b/public/images/pokemon/variant/back/2037.json @@ -0,0 +1,22 @@ +{ + "1": { + "151515": "101010", + "558b9f": "9f435d", + "648082": "6e67b0", + "97bdd2": "ffa8b8", + "c1d1d2": "b3b8ea", + "d9e9f4": "ffd3e1", + "fdfdfd": "d7d9f9", + "ffffff": "ffffff" + }, + "2": { + "151515": "101010", + "558b9f": "90215e", + "648082": "bf4747", + "97bdd2": "da4e75", + "c1d1d2": "ffc07b", + "d9e9f4": "ff8489", + "fdfdfd": "ffe6a0", + "ffffff": "ffffff" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/2038.json b/public/images/pokemon/variant/back/2038.json new file mode 100644 index 00000000000..845c45f7887 --- /dev/null +++ b/public/images/pokemon/variant/back/2038.json @@ -0,0 +1,36 @@ +{ + "1": { + "101010": "101010", + "4d5c78": "394880", + "516077": "9f435d", + "007ab5": "2380c4", + "38858d": "e35ea2", + "7a8a9c": "6172ab", + "66b3d7": "3dbfe0", + "86a8c0": "e27495", + "81c2c5": "ff89c0", + "bdcbd7": "a7ade7", + "a1e1de": "ffb6e5", + "b0d3ea": "ffa8b8", + "eafefe": "ffd3e1", + "fdfdfd": "bec6ef", + "ffffff": "ffffff" + }, + "2": { + "101010": "101010", + "4d5c78": "73174a", + "516077": "bb3c3c", + "007ab5": "882493", + "38858d": "572746", + "7a8a9c": "90215e", + "66b3d7": "a044ab", + "86a8c0": "ff824c", + "81c2c5": "75355e", + "bdcbd7": "da426d", + "a1e1de": "93547c", + "b0d3ea": "ffbf6b", + "eafefe": "ffe28c", + "fdfdfd": "ff6f86", + "ffffff": "ffffff" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/204.json b/public/images/pokemon/variant/back/204.json new file mode 100644 index 00000000000..1e4007149cb --- /dev/null +++ b/public/images/pokemon/variant/back/204.json @@ -0,0 +1,16 @@ +{ + "1": { + "52adb5": "a4b76b", + "84d6d6": "c1cd7d", + "294a7b": "4b7641", + "b5eff7": "e3e796", + "3a73a5": "74a057" + }, + "2": { + "52adb5": "d46b84", + "84d6d6": "eda6ae", + "294a7b": "700a4b", + "b5eff7": "f7dcd7", + "3a73a5": "b43469" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/205.json b/public/images/pokemon/variant/back/205.json new file mode 100644 index 00000000000..5a3e2d61606 --- /dev/null +++ b/public/images/pokemon/variant/back/205.json @@ -0,0 +1,22 @@ +{ + "1": { + "847b9c": "103b2c", + "e6cef7": "3e7745", + "ff9c9c": "ffb356", + "c5a5de": "205639", + "f76373": "f68b31", + "bd2942": "d8681e", + "524263": "04211a", + "841031": "af3b11" + }, + "2": { + "847b9c": "962a41", + "e6cef7": "e9b1a0", + "ff9c9c": "b0f5ee", + "c5a5de": "c86554", + "f76373": "6bbfd2", + "bd2942": "2c6094", + "524263": "691338", + "841031": "0e2667" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/299.json b/public/images/pokemon/variant/back/299.json new file mode 100644 index 00000000000..3b2cd15e3cd --- /dev/null +++ b/public/images/pokemon/variant/back/299.json @@ -0,0 +1,28 @@ +{ + "1": { + "000000": "101010", + "5a1921": "1f3a30", + "31314a": "6b2710", + "9c314a": "30594a", + "de5252": "487c60", + "ff6b7b": "5a9170", + "42529c": "a14020", + "637bbd": "c66831", + "ff9494": "7fbc7a", + "8ca5e6": "db8644", + "adbdf7": "e09a65" + }, + "2": { + "000000": "101010", + "5a1921": "28163a", + "31314a": "38619e", + "9c314a": "452b5e", + "de5252": "584282", + "ff6b7b": "675398", + "42529c": "68a2cd", + "637bbd": "99e4ee", + "ff9494": "7282c4", + "8ca5e6": "dcfff8", + "adbdf7": "f3fff6" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/313.json b/public/images/pokemon/variant/back/313.json new file mode 100644 index 00000000000..65a1cfe9eae --- /dev/null +++ b/public/images/pokemon/variant/back/313.json @@ -0,0 +1,28 @@ +{ + "1": { + "a5b5c5": "eea256", + "4a4a52": "9c1200", + "deb552": "ffda31", + "7b8ca5": "d66d38", + "ce3a52": "491c22", + "f78473": "643a35", + "8c6b52": "845c46", + "ffe652": "fffa52", + "8c314a": "2b1419", + "8c8c94": "ff3b21", + "e65263": "57272c" + }, + "2": { + "a5b5c5": "3a767b", + "4a4a52": "175614", + "deb552": "b6d479", + "7b8ca5": "1e5256", + "ce3a52": "1585cc", + "f78473": "77d4ee", + "8c6b52": "5c713d", + "ffe652": "dde6b1", + "8c314a": "0c4275", + "8c8c94": "0ba905", + "e65263": "32b0ff" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/314.json b/public/images/pokemon/variant/back/314.json new file mode 100644 index 00000000000..f77165c7b15 --- /dev/null +++ b/public/images/pokemon/variant/back/314.json @@ -0,0 +1,30 @@ +{ + "1": { + "9c8452": "ac6f0e", + "5a6b8c": "9a4013", + "8cadce": "d66d38", + "ce8cde": "6a342c", + "ffe673": "fbf650", + "7b7b7b": "b82b18", + "e6b54a": "efcb26", + "3a3a3a": "6b180d", + "9c52bd": "57272c", + "adc5ef": "eea256", + "3a3152": "2d0723", + "6b5a94": "2b1419" + }, + "2": { + "9c8452": "074656", + "5a6b8c": "70a84f", + "8cadce": "c1db9c", + "ce8cde": "77d4ee", + "ffe673": "3dc5d3", + "7b7b7b": "155870", + "e6b54a": "019792", + "3a3a3a": "0a2934", + "9c52bd": "43a3df", + "adc5ef": "e5edcc", + "3a3152": "051b37", + "6b5a94": "255b95" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/32.json b/public/images/pokemon/variant/back/32.json new file mode 100644 index 00000000000..473edcae2af --- /dev/null +++ b/public/images/pokemon/variant/back/32.json @@ -0,0 +1,34 @@ +{ + "1": { + "101010": "101010", + "006342": "273161", + "63426b": "944f25", + "b51900": "28678a", + "de4229": "42adc1", + "ff6b52": "78d6d3", + "00a573": "3b4d7a", + "9c4aad": "ab5c24", + "bd63c5": "cf863e", + "19ce9c": "55729e", + "e69cd6": "e0c151", + "efbdef": "ede4ab", + "cecece": "cecece", + "ffffff": "ffffff" + }, + "2": { + "101010": "101010", + "006342": "b0384a", + "63426b": "142440", + "b51900": "b86527", + "de4229": "e1b13b", + "ff6b52": "eddd95", + "00a573": "d65e64", + "9c4aad": "133257", + "bd63c5": "253f5e", + "19ce9c": "ed938e", + "e69cd6": "375c73", + "efbdef": "5d91a1", + "cecece": "cecece", + "ffffff": "ffffff" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/325.json b/public/images/pokemon/variant/back/325.json new file mode 100644 index 00000000000..1918b48adfd --- /dev/null +++ b/public/images/pokemon/variant/back/325.json @@ -0,0 +1,24 @@ +{ + "1": { + "ef84ad": "5ca0b5", + "f7a5bd": "6ac5c8", + "c5637b": "3c6b95", + "ffd6e6": "b4e6e7", + "7b7b8c": "559b43", + "5a5a73": "2e7320", + "a5a5ad": "b5d780", + "a53a42": "2b4d7d", + "3a4252": "18340c" + }, + "2": { + "ef84ad": "1f6759", + "f7a5bd": "379a85", + "c5637b": "144844", + "ffd6e6": "8dd6ab", + "7b7b8c": "dca878", + "5a5a73": "a7724a", + "a5a5ad": "fbe3a3", + "a53a42": "0c2625", + "3a4252": "72442d" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/326.json b/public/images/pokemon/variant/back/326.json new file mode 100644 index 00000000000..eb1c4954208 --- /dev/null +++ b/public/images/pokemon/variant/back/326.json @@ -0,0 +1,30 @@ +{ + "1": { + "9c9ca5": "7ecdd1", + "d684ce": "7bb15b", + "636373": "3c6b95", + "6b426b": "559b43", + "ce5a7b": "d06d50", + "a5425a": "a84331", + "f7a5b5": "f7d1a0", + "ef7b94": "e99e76", + "bd63ad": "559b43", + "e6a5de": "b5d780", + "4a4a52": "2b4d7d", + "7b7b84": "5ca0b5" + }, + "2": { + "9c9ca5": "fffade", + "d684ce": "67508c", + "636373": "e8bc75", + "6b426b": "081f19", + "ce5a7b": "1f6759", + "a5425a": "144844", + "f7a5b5": "5cba98", + "ef7b94": "379a85", + "bd63ad": "574285", + "e6a5de": "7a649c", + "4a4a52": "d08f55", + "7b7b84": "fbefb3" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/33.json b/public/images/pokemon/variant/back/33.json new file mode 100644 index 00000000000..331220de9ef --- /dev/null +++ b/public/images/pokemon/variant/back/33.json @@ -0,0 +1,32 @@ +{ + "1": { + "101010": "101010", + "5a3a63": "944f25", + "b51900": "b51900", + "de4229": "de4229", + "845a52": "42adc1", + "009463": "273161", + "945ab5": "cf863e", + "4acea5": "55729e", + "848484": "848484", + "ce84de": "e0c151", + "e6adef": "ede4ab", + "c5c5c5": "c5c5c5", + "ffffff": "ffffff" + }, + "2": { + "101010": "101010", + "5a3a63": "142440", + "b51900": "d98943", + "de4229": "edc85a", + "845a52": "e1b13b", + "009463": "b0384a", + "945ab5": "253f5e", + "4acea5": "ed938e", + "848484": "848484", + "ce84de": "375c73", + "e6adef": "5d91a1", + "c5c5c5": "c5c5c5", + "ffffff": "ffffff" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/331.json b/public/images/pokemon/variant/back/331.json new file mode 100644 index 00000000000..7dcb633affb --- /dev/null +++ b/public/images/pokemon/variant/back/331.json @@ -0,0 +1,30 @@ +{ + "1": { + "003a10": "601130", + "ffe63a": "7aa1df", + "31944a": "b73736", + "215200": "69102c", + "63bd6b": "dd6754", + "f7bd19": "448bc3", + "4a7310": "9f2a3f", + "196b31": "891d2c", + "94c552": "d76868", + "739c3a": "d74f4f", + "8c6b3a": "123a5a", + "bdde7b": "e67f7f" + }, + "2": { + "003a10": "684531", + "ffe63a": "eaa5c6", + "31944a": "c09e6c", + "215200": "694426", + "63bd6b": "d9c985", + "f7bd19": "d979b2", + "4a7310": "6d3494", + "196b31": "946e51", + "94c552": "9364a5", + "739c3a": "7c558d", + "8c6b3a": "983364", + "bdde7b": "a772bd" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/332.json b/public/images/pokemon/variant/back/332.json new file mode 100644 index 00000000000..c13c07c34b4 --- /dev/null +++ b/public/images/pokemon/variant/back/332.json @@ -0,0 +1,28 @@ +{ + "1": { + "319452": "831a1f", + "4aa552": "9f2f2c", + "7ba563": "b44040", + "8cbd63": "c54b4b", + "215200": "710f2f", + "196b21": "831a1f", + "a5d674": "df5252", + "4a7310": "982443", + "a5d673": "e16363", + "63b56b": "b2332f", + "215201": "630d28" + }, + "2": { + "319452": "b08d72", + "4aa552": "c5a77f", + "7ba563": "704e7e", + "8cbd63": "e3d7a6", + "215200": "3f3249", + "196b21": "b08d72", + "a5d674": "d7cda7", + "4a7310": "4f3956", + "a5d673": "8c669b", + "63b56b": "cfc191", + "215201": "583823" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/34.json b/public/images/pokemon/variant/back/34.json new file mode 100644 index 00000000000..953d0276777 --- /dev/null +++ b/public/images/pokemon/variant/back/34.json @@ -0,0 +1,32 @@ +{ + "1": { + "101010": "101010", + "5a296b": "7a411d", + "73735a": "696342", + "73735b": "73735b", + "73735c": "3b447a", + "a55294": "cf863e", + "d673ef": "e0c151", + "c5c5a5": "6272a8", + "c7c7a9": "c7c7a9", + "c4c4a7": "c4c4a7", + "de94f7": "ede4ab", + "fcfcfc": "fcfcfc", + "ffffff": "ffffff" + }, + "2": { + "101010": "101010", + "5a296b": "142440", + "73735a": "a37355", + "73735b": "73735b", + "73735c": "85204a", + "a55294": "253f5e", + "d673ef": "375c73", + "c5c5a5": "c43d63", + "c7c7a9": "e0b990", + "c4c4a7": "c4c4a7", + "de94f7": "5d91a1", + "fcfcfc": "fcfcfc", + "ffffff": "ede1b4" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/345.json b/public/images/pokemon/variant/back/345.json new file mode 100644 index 00000000000..c7b0d665e29 --- /dev/null +++ b/public/images/pokemon/variant/back/345.json @@ -0,0 +1,28 @@ +{ + "1": { + "633a84": "611746", + "efd663": "fcf3a2", + "bd5284": "6084bd", + "6b5221": "679e3a", + "b5ade6": "ff5289", + "d6a531": "d8e374", + "efadb5": "b9f0ff", + "7363b5": "801f4c", + "ce7394": "84aedb", + "843a5a": "394287", + "9c84ce": "bd3167" + }, + "2": { + "633a84": "b57c2d", + "efd663": "de463e", + "bd5284": "429949", + "6b5221": "661634", + "b5ade6": "fff8a3", + "d6a531": "942532", + "efadb5": "beed9a", + "7363b5": "dbb34d", + "ce7394": "7fcc68", + "843a5a": "296e47", + "9c84ce": "f5df73" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/346.json b/public/images/pokemon/variant/back/346.json new file mode 100644 index 00000000000..d2b5406f75a --- /dev/null +++ b/public/images/pokemon/variant/back/346.json @@ -0,0 +1,30 @@ +{ + "1": { + "ffd6ef": "deffea", + "3a6b52": "7f183f", + "a57b10": "5e8c29", + "a5e68c": "f38460", + "ce6394": "526f84", + "ef6b8c": "93c6c5", + "7bc573": "eb564b", + "ff9cad": "d2faef", + "f7d642": "d8e374", + "cea531": "a7c961", + "944263": "304459", + "529c5a": "b32843" + }, + "2": { + "ffd6ef": "a3ffc3", + "3a6b52": "96483b", + "a57b10": "661634", + "a5e68c": "ffe6b5", + "ce6394": "32806f", + "ef6b8c": "53b491", + "7bc573": "efbd8c", + "ff9cad": "7be3b6", + "f7d642": "de463e", + "cea531": "942532", + "944263": "17404a", + "529c5a": "bf815c" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/396.json b/public/images/pokemon/variant/back/396.json new file mode 100644 index 00000000000..00ffa97fd19 --- /dev/null +++ b/public/images/pokemon/variant/back/396.json @@ -0,0 +1,36 @@ +{ + "1": { + "d6dede": "e3d09d", + "949494": "dbb070", + "736363": "28854d", + "ffffff": "f0ecd3", + "382028": "751e23", + "d67300": "db963b", + "b5b5b5": "d4b27f", + "808080": "c48c51", + "9c4a21": "b06421", + "8c7373": "bd453c", + "3a2129": "07332d", + "524a4a": "156146", + "4f4747": "144a40", + "ad9c9c": "ed7f4c", + "ff9429": "ffcf5e" + }, + "2": { + "d6dede": "f0deaa", + "949494": "c29b72", + "736363": "2f436b", + "ffffff": "fcfad2", + "382028": "163d4d", + "d67300": "52281f", + "b5b5b5": "debd8c", + "808080": "a67c5d", + "9c4a21": "451915", + "8c7373": "307b82", + "3a2129": "0f1730", + "524a4a": "1b2745", + "4f4747": "e6a647", + "ad9c9c": "4da8a1", + "ff9429": "8c604c" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/397.json b/public/images/pokemon/variant/back/397.json new file mode 100644 index 00000000000..d1f7e646649 --- /dev/null +++ b/public/images/pokemon/variant/back/397.json @@ -0,0 +1,36 @@ +{ + "1": { + "735a63": "bd453c", + "574f57": "144a40", + "5a525a": "28854d", + "f75242": "8bba65", + "878787": "bda377", + "b5b5b5": "d9c798", + "ff9429": "ffcf5e", + "382f38": "0c3331", + "3a313a": "156146", + "362d36": "572e14", + "fcfcfc": "f0ebc5", + "bd6300": "994c1c", + "7b4221": "c47a2f", + "523a4a": "751e23", + "9c848c": "ed7f4c" + }, + "2": { + "735a63": "307b82", + "574f57": "e6a647", + "5a525a": "2f436b", + "f75242": "f797ad", + "878787": "ba946e", + "b5b5b5": "debd8c", + "ff9429": "8c604c", + "382f38": "c27b34", + "3a313a": "1b2745", + "362d36": "421917", + "fcfcfc": "fcfad2", + "bd6300": "63362b", + "7b4221": "52281f", + "523a4a": "163d4d", + "9c848c": "4da8a1" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/398.json b/public/images/pokemon/variant/back/398.json new file mode 100644 index 00000000000..ed678a4c4f3 --- /dev/null +++ b/public/images/pokemon/variant/back/398.json @@ -0,0 +1,35 @@ +{ + "1": { + "9c4242": "5fad3b", + "5c545c": "144a40", + "3a313a": "0b3634", + "7b4221": "b06421", + "bd6300": "db963b", + "5a525a": "156146", + "7b6b7b": "28854d", + "f75242": "90cc58", + "735a63": "bd453c", + "ffffff": "e8e3b6", + "523a4a": "751e23", + "3a3a3a": "07332d", + "b5b5b5": "d7be89", + "9c848c": "ed7f4c", + "ff9429": "ffcf5e" + }, + "2": { + "9c4242": "c4833d", + "5c545c": "e6a647", + "7b4221": "421917", + "bd6300": "63362b", + "5a525a": "1b2745", + "7b6b7b": "293854", + "f75242": "e6bd4e", + "735a63": "307b82", + "ffffff": "fcfad2", + "523a4a": "163d4d", + "3a3a3a": "080d1f", + "b5b5b5": "debd8c", + "9c848c": "4da8a1", + "ff9429": "8c604c" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/403.json b/public/images/pokemon/variant/back/403.json new file mode 100644 index 00000000000..4b8d7b52070 --- /dev/null +++ b/public/images/pokemon/variant/back/403.json @@ -0,0 +1,22 @@ +{ + "1": { + "b59c5a": "45babf", + "7badf7": "bb5c3a", + "637bb5": "903325", + "4a4a63": "dcb788", + "ffe65a": "59dcd6", + "313142": "bf8652", + "42426b": "671919", + "736352": "267789" + }, + "2": { + "b59c5a": "9a31be", + "7badf7": "303465", + "637bb5": "222352", + "4a4a63": "bbc2e5", + "ffe65a": "e25ce8", + "313142": "8883d4", + "42426b": "121031", + "736352": "611c7f" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/404.json b/public/images/pokemon/variant/back/404.json new file mode 100644 index 00000000000..32ab9ea8a1d --- /dev/null +++ b/public/images/pokemon/variant/back/404.json @@ -0,0 +1,24 @@ +{ + "1": { + "736352": "267789", + "4a4a73": "671919", + "63637b": "f1dfb1", + "637bb5": "903325", + "4a4a63": "dcb788", + "ffe65a": "59dcd6", + "313142": "bf8652", + "b59c5a": "45babf", + "7badf7": "bb5c3a" + }, + "2": { + "736352": "611c7f", + "4a4a73": "121031", + "63637b": "dee4f4", + "637bb5": "222352", + "4a4a63": "bbc2e5", + "ffe65a": "e25ce8", + "313142": "8883d4", + "b59c5a": "9a31be", + "7badf7": "303465" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/405.json b/public/images/pokemon/variant/back/405.json new file mode 100644 index 00000000000..46a38cfd243 --- /dev/null +++ b/public/images/pokemon/variant/back/405.json @@ -0,0 +1,30 @@ +{ + "1": { + "b59c5a": "45babf", + "7badf7": "bb5c3a", + "63637b": "f1dfb1", + "4a4a73": "671919", + "637bb5": "903325", + "353255": "4a0e15", + "4a4a63": "dcb788", + "ffe65a": "59dcd6", + "313142": "bf8652", + "943a52": "472614", + "e64a52": "4f3217", + "736352": "267789" + }, + "2": { + "b59c5a": "9a31be", + "7badf7": "303465", + "63637b": "dee4f4", + "4a4a73": "121031", + "637bb5": "222352", + "353255": "06051b", + "4a4a63": "bbc2e5", + "ffe65a": "e25ce8", + "313142": "8883d4", + "943a52": "614b9a", + "e64a52": "6f5dac", + "736352": "611c7f" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/417.json b/public/images/pokemon/variant/back/417.json new file mode 100644 index 00000000000..27f45e74557 --- /dev/null +++ b/public/images/pokemon/variant/back/417.json @@ -0,0 +1,36 @@ +{ + "1": { + "101010": "101010", + "3e364e": "734430", + "524941": "732e12", + "5a524a": "642f1a", + "4a425a": "5f2618", + "84523a": "9b314f", + "ef845a": "e26e6e", + "c5a563": "e95d6c", + "ffd663": "f17c7c", + "637b9c": "86452b", + "7bb5e6": "a25f37", + "cec5c5": "e8be64", + "f7f7f7": "faeda9", + "ffffff": "ffffff", + "7b7b84": "8e623c" + }, + "2": { + "101010": "101010", + "3e364e": "203243", + "524941": "2d284c", + "5a524a": "0f203a", + "4a425a": "23704c", + "84523a": "693939", + "ef845a": "e1b8ac", + "c5a563": "5ae7f6", + "ffd663": "8ffaff", + "637b9c": "a2dc76", + "7bb5e6": "e4fba1", + "cec5c5": "357577", + "f7f7f7": "5ba297", + "ffffff": "ffffff", + "7b7b84": "1f3f4e" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/420.json b/public/images/pokemon/variant/back/420.json new file mode 100644 index 00000000000..3177603d799 --- /dev/null +++ b/public/images/pokemon/variant/back/420.json @@ -0,0 +1,32 @@ +{ + "1": { + "101010": "101010", + "423131": "103d47", + "6b3a4a": "09303b", + "314252": "8f3833", + "3a734a": "ab554b", + "843152": "185158", + "ad426b": "368a7f", + "429442": "d98b77", + "52a54a": "f7bfa8", + "73ce5a": "fcdbc7", + "de6384": "51b095", + "ff8cad": "73d9ae", + "ffffff": "ffffff" + }, + "2": { + "101010": "101010", + "423131": "390f26", + "6b3a4a": "29091b", + "314252": "752a4a", + "3a734a": "9c4861", + "843152": "3b0d21", + "ad426b": "571539", + "429442": "a86a79", + "52a54a": "c29597", + "73ce5a": "dec3c3", + "de6384": "752648", + "ff8cad": "ad5168", + "ffffff": "ffffff" + } + } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/421-overcast.json b/public/images/pokemon/variant/back/421-overcast.json new file mode 100644 index 00000000000..77c5c18415d --- /dev/null +++ b/public/images/pokemon/variant/back/421-overcast.json @@ -0,0 +1,34 @@ +{ + "1": { + "101010": "101010", + "105221": "ab554b", + "4a2942": "5e1228", + "7b294a": "103d47", + "7a2a4a": "236e6a", + "427b4a": "d98b77", + "6b427b": "962a3e", + "a53a63": "368a7f", + "ce527b": "51b095", + "52ad5a": "f7bfa8", + "5ac55a": "fcdbc7", + "845aad": "c75058", + "9c7bbd": "db7f7f", + "de7394": "73d9ae" + }, + "2": { + "101010": "101010", + "105221": "995969", + "4a2942": "521d44", + "7b294a": "390f26", + "7a2a4a": "571539", + "427b4a": "ba8087", + "6b427b": "8f4270", + "a53a63": "611c3b", + "ce527b": "752648", + "52ad5a": "cf9d9d", + "5ac55a": "e3cbca", + "845aad": "a86886", + "9c7bbd": "d197ac", + "de7394": "ad5168" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/421-sunshine.json b/public/images/pokemon/variant/back/421-sunshine.json new file mode 100644 index 00000000000..096641576c9 --- /dev/null +++ b/public/images/pokemon/variant/back/421-sunshine.json @@ -0,0 +1,40 @@ +{ + "1": { + "101010": "101010", + "006310": "e6d590", + "941e3f": "103d47", + "9c6b10": "c4655a", + "941f40": "5c1547", + "942142": "591230", + "ce3a6b": "751a38", + "cf3c6d": "872e5c", + "cf3e6e": "368a7f", + "19943a": "f0f0bd", + "d6b55a": "db8e7d", + "f7de73": "f7bfa8", + "e66394": "51b095", + "de84ad": "962a3e", + "ffa5c5": "c75058", + "ffe6f7": "d0fdf0", + "ffffff": "ffffff" + }, + "2": { + "101010": "101010", + "006310": "72559e", + "941e3f": "390f26", + "9c6b10": "4a2942", + "941f40": "3a234a", + "942142": "804058", + "ce3a6b": "995969", + "cf3c6d": "563666", + "cf3e6e": "571539", + "19943a": "9574b3", + "d6b55a": "914972", + "f7de73": "b35f86", + "e66394": "752648", + "de84ad": "cf9d9d", + "ffa5c5": "e3cbca", + "ffe6f7": "d26393", + "ffffff": "ffffff" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/446.json b/public/images/pokemon/variant/back/446.json new file mode 100644 index 00000000000..1f6d43127bb --- /dev/null +++ b/public/images/pokemon/variant/back/446.json @@ -0,0 +1,38 @@ +{ + "1": { + "000000": "101010", + "104242": "4d0f3f", + "215a73": "701a55", + "317b9c": "943469", + "3194b5": "ad4b70", + "524a10": "91504e", + "73737b": "756363", + "7b5a31": "522663", + "948442": "bf777a", + "9c3a42": "714084", + "b5b563": "de9494", + "cccfce": "cbc4c4", + "cecece": "cecece", + "de9494": "a270b5", + "efe684": "f0beb1", + "ffffff": "ffffff" + }, + "2": { + "000000": "101010", + "104242": "6398b7", + "215a73": "a3cacd", + "317b9c": "cbe4e2", + "3194b5": "edf5f4", + "524a10": "233f69", + "73737b": "525266", + "7b5a31": "e6cda1", + "948442": "2f4d80", + "9c3a42": "487d43", + "b5b563": "38638f", + "cccfce": "bfc7cb", + "cecece": "cecece", + "de9494": "9cb780", + "efe684": "4781a8", + "ffffff": "ffffff" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/476.json b/public/images/pokemon/variant/back/476.json new file mode 100644 index 00000000000..5f54f51d1f9 --- /dev/null +++ b/public/images/pokemon/variant/back/476.json @@ -0,0 +1,36 @@ +{ + "1": { + "101010": "101010", + "5a2921": "0e291d", + "7b3129": "1e3f30", + "293a4a": "352310", + "3a4a5a": "59452f", + "bd3152": "30594a", + "e65a63": "578b6b", + "194a84": "62230e", + "3a63ad": "9d3a18", + "5a7bce": "c76227", + "ef7b8c": "77b472", + "739ce6": "de7f36", + "84adf7": "e68c43", + "c5cede": "c5cede", + "ffffff": "ffffff" + }, + "2": { + "101010": "101010", + "5a2921": "21132c", + "7b3129": "301b3f", + "293a4a": "111b28", + "3a4a5a": "253142", + "bd3152": "482a5e", + "e65a63": "6a5394", + "194a84": "30578e", + "3a63ad": "5b97c1", + "5a7bce": "92dee8", + "ef7b8c": "747fc4", + "739ce6": "dbfff4", + "84adf7": "c2efe5", + "c5cede": "c5cede", + "ffffff": "ffffff" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/498.json b/public/images/pokemon/variant/back/498.json new file mode 100644 index 00000000000..ecc0ccf7a98 --- /dev/null +++ b/public/images/pokemon/variant/back/498.json @@ -0,0 +1,44 @@ +{ + "1": { + "101010": "101010", + "2e1e1e": "b1a385", + "2e1f1f": "d1c5ab", + "302020": "194737", + "312121": "1e2a4d", + "473830": "f7f5e9", + "4a3a31": "2d405c", + "7a3827": "1c2e1b", + "7b3a29": "194737", + "947310": "cc955e", + "bd6331": "3b805f", + "ce423a": "3e4f37", + "a54a42": "2d452b", + "e66b29": "b5cca5", + "efbd08": "f0cc8b", + "ef843a": "65b57c", + "c5ada5": "c1c5a5", + "ffffff": "ffffff", + "47382f": "472770" + }, + "2": { + "101010": "101010", + "2e1e1e": "ac8b61", + "2e1f1f": "c4a884", + "302020": "522e2e", + "312121": "47150e", + "473830": "e0d3ab", + "4a3a31": "733421", + "7a3827": "222742", + "7b3a29": "522e2e", + "947310": "828399", + "bd6331": "85564e", + "ce423a": "323754", + "a54a42": "4c5275", + "e66b29": "778aa6", + "efbd08": "c7c8d9", + "ef843a": "ab8274", + "c5ada5": "dddef0", + "ffffff": "ffffff", + "47382f": "456da8" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/499.json b/public/images/pokemon/variant/back/499.json new file mode 100644 index 00000000000..ad525f3e114 --- /dev/null +++ b/public/images/pokemon/variant/back/499.json @@ -0,0 +1,40 @@ +{ + "1": { + "101010": "101010", + "3a2121": "1e2a4d", + "3a3a3a": "122b18", + "523129": "2d405c", + "7a3827": "1c2e1b", + "7b3a29": "234f3d", + "736310": "ab6441", + "4a4a4a": "264524", + "bd5a31": "41785a", + "ce423a": "3e4f37", + "ef7329": "62a174", + "b59421": "cc955e", + "efc53a": "f0cc8b", + "c5ada5": "c5ada5", + "c4aea7": "c4aea7", + "fcfcfc": "fcfcfc", + "ffffff": "ffffff" + }, + "2": { + "101010": "101010", + "3a2121": "47150e", + "3a3a3a": "1c2245", + "523129": "733421", + "7a3827": "222742", + "7b3a29": "533330", + "736310": "3c3e5b", + "4a4a4a": "272d4f", + "bd5a31": "7a5a56", + "ce423a": "323754", + "ef7329": "967a71", + "b59421": "828399", + "efc53a": "c7c8d9", + "c5ada5": "c4a884", + "c4aea7": "c4aea7", + "fcfcfc": "e0d3ab", + "ffffff": "ffffff" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/500.json b/public/images/pokemon/variant/back/500.json new file mode 100644 index 00000000000..55e8d8b6548 --- /dev/null +++ b/public/images/pokemon/variant/back/500.json @@ -0,0 +1,46 @@ +{ + "1": { + "101010": "101010", + "212121": "1e2a4d", + "313131": "2d405c", + "333333": "2c2f35", + "7b1910": "257036", + "7a1a11": "1c2e1b", + "732900": "2c473e", + "7b5a08": "ab6441", + "a33a31": "35963e", + "a53a31": "3e4f37", + "bd5221": "3e6952", + "ef6321": "699676", + "b58c21": "cc955e", + "ef8c08": "86e677", + "efbd08": "c7f797", + "f0be0a": "f0cc8b", + "adadad": "a3a6ad", + "f7f7f7": "e4eef5", + "e63129": "58db58", + "e33229": "627556" + }, + "2": { + "101010": "101010", + "212121": "47150e", + "313131": "733421", + "333333": "3b352b", + "7b1910": "ba843d", + "7a1a11": "20243d", + "732900": "522e2e", + "7b5a08": "3c3e5b", + "a33a31": "cfa255", + "a53a31": "2d3250", + "bd5221": "7a5a56", + "ef6321": "967a71", + "b58c21": "828399", + "ef8c08": "f2d591", + "efbd08": "faefc7", + "f0be0a": "c7c8d9", + "adadad": "c4a884", + "f7f7f7": "e0d3ab", + "e63129": "e3c65c", + "e33229": "464a66" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/511.json b/public/images/pokemon/variant/back/511.json new file mode 100644 index 00000000000..a5ca6fa862f --- /dev/null +++ b/public/images/pokemon/variant/back/511.json @@ -0,0 +1,20 @@ +{ + "1": { + "a57b3a": "c58869", + "ffce7b": "edc293", + "735221": "bd7653", + "cea55a": "d9a177", + "194a29": "912f1c", + "087331": "c45331", + "19a552": "d97b41" + }, + "2": { + "a57b3a": "5580bf", + "ffce7b": "8ecaed", + "735221": "3f6aa6", + "cea55a": "73acde", + "194a29": "4c2d7a", + "087331": "683b8c", + "19a552": "8a53a6" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/512.json b/public/images/pokemon/variant/back/512.json new file mode 100644 index 00000000000..8d75727c3f0 --- /dev/null +++ b/public/images/pokemon/variant/back/512.json @@ -0,0 +1,26 @@ +{ + "1": { + "ffce7b": "eab68b", + "525252": "a36e46", + "087331": "c74638", + "194a29": "a12d25", + "ffffff": "dbc086", + "a57b3a": "a65b3d", + "cea55a": "c8895f", + "9c9c9c": "cfa067", + "735221": "733224", + "19a552": "ed6f53" + }, + "2": { + "ffce7b": "58aee0", + "525252": "3073ab", + "087331": "522880", + "194a29": "331961", + "ffffff": "5bc6de", + "a57b3a": "3762bf", + "cea55a": "4686cf", + "9c9c9c": "4099c2", + "735221": "2a42a1", + "19a552": "6e368f" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/513.json b/public/images/pokemon/variant/back/513.json new file mode 100644 index 00000000000..5a8f4847bc9 --- /dev/null +++ b/public/images/pokemon/variant/back/513.json @@ -0,0 +1,20 @@ +{ + "1": { + "a57b3a": "e4907f", + "ffce7b": "ffe6c9", + "bd423a": "28629c", + "e65242": "3d9bbe", + "7b3131": "1b3e70", + "735221": "c3635b", + "cea55a": "f9b9a2" + }, + "2": { + "a57b3a": "bc2f2f", + "ffce7b": "ed8c7b", + "bd423a": "d5b393", + "e65242": "f4ecd7", + "7b3131": "ad7a63", + "735221": "a1272f", + "cea55a": "d4554c" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/514.json b/public/images/pokemon/variant/back/514.json new file mode 100644 index 00000000000..90e7c698f29 --- /dev/null +++ b/public/images/pokemon/variant/back/514.json @@ -0,0 +1,27 @@ +{ + "1": { + "ffce7b": "ffe2bf", + "bd423a": "265494", + "e65242": "3a7bb5", + "7b3131": "193170", + "ffffff": "c0e7fc", + "735221": "ba6a57", + "c5c5c5": "97c0e6", + "cea55a": "edba9a", + "9c9c9c": "6f94c7", + "525252": "465f9e" + }, + "2": { + "ffce7b": "cc643b", + "bd423a": "cfb88f", + "e65242": "ede9d1", + "7b3131": "a88260", + "a57b3a": "782017", + "ffffff": "f7cc57", + "735221": "5c0e0e", + "c5c5c5": "e3a13d", + "cea55a": "943722", + "9c9c9c": "cc762b", + "525252": "ad4d1d" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/515.json b/public/images/pokemon/variant/back/515.json new file mode 100644 index 00000000000..d8a7c4e9136 --- /dev/null +++ b/public/images/pokemon/variant/back/515.json @@ -0,0 +1,22 @@ +{ + "1": { + "ffce7b": "fff187", + "003a73": "0a4a2d", + "21739c": "136b3b", + "198cad": "219448", + "29b5de": "34c15e", + "cea55a": "e0c265", + "735221": "735f21", + "a57b3a": "b5893c" + }, + "2": { + "ffce7b": "e76092", + "003a73": "a64e8b", + "21739c": "cc70a4", + "198cad": "eb98bf", + "29b5de": "ffc9dd", + "cea55a": "cc4580", + "735221": "8f1f68", + "a57b3a": "b32e77" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/516.json b/public/images/pokemon/variant/back/516.json new file mode 100644 index 00000000000..ae188e87625 --- /dev/null +++ b/public/images/pokemon/variant/back/516.json @@ -0,0 +1,24 @@ +{ + "1": { + "ffce7b": "fadd73", + "106b8c": "13571a", + "003a73": "08420d", + "9c9c9c": "aecf86", + "a57b3a": "9c7935", + "cea55a": "c4a148", + "218ca5": "3c8c22", + "735221": "7b5e29", + "29b5de": "6fad37" + }, + "2": { + "ffce7b": "e76092", + "106b8c": "cc70a4", + "003a73": "a64e8b", + "9c9c9c": "59b7d4", + "a57b3a": "b32e77", + "cea55a": "cc4580", + "218ca5": "eb98bf", + "735221": "8f1f68", + "29b5de": "ffc9dd" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/522.json b/public/images/pokemon/variant/back/522.json new file mode 100644 index 00000000000..9c301bca713 --- /dev/null +++ b/public/images/pokemon/variant/back/522.json @@ -0,0 +1,36 @@ +{ + "1": { + "a5a5a5": "676fc2", + "7b7b7b": "505a9b", + "525252": "95355d", + "cecece": "788bcb", + "161d1d": "2e0d1f", + "797878": "676fc2", + "005a9c": "75c239", + "505050": "3d4488", + "ffffff": "b9cfef", + "ffe600": "61e4bf", + "3a3a3a": "731f51", + "00adde": "b9e96c", + "8c7321": "33a08a", + "292929": "53173b", + "192121": "43172f" + }, + "2": { + "a5a5a5": "cb6a3a", + "7b7b7b": "731515", + "525252": "ebc37d", + "cecece": "97221a", + "161d1d": "370b0b", + "797878": "cb6a3a", + "005a9c": "30309d", + "505050": "4e1416", + "ffffff": "c23e2e", + "ffe600": "36c294", + "3a3a3a": "cd8a58", + "00adde": "3e4ddc", + "8c7321": "288278", + "292929": "914824", + "192121": "661212" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/523.json b/public/images/pokemon/variant/back/523.json new file mode 100644 index 00000000000..e8e37d6b7ab --- /dev/null +++ b/public/images/pokemon/variant/back/523.json @@ -0,0 +1,44 @@ +{ + "1": { + "373737": "43172f", + "373f3f": "353573", + "a5a5a5": "7080c6", + "5d4802": "1f8076", + "ffffff": "b9cfef", + "181f1f": "3d467d", + "8c7321": "33a08a", + "293131": "6a1d44", + "8c721f": "3d9197", + "7b7b7b": "5265a4", + "797878": "5265a4", + "182121": "430f30", + "cecece": "7e91d3", + "5a5a5a": "47548f", + "ffe600": "61e4bf", + "3a3a3a": "5d213a", + "00adde": "b9e96c", + "3a4242": "84294f", + "192121": "57163d" + }, + "2": { + "373737": "501a19", + "373f3f": "4e1416", + "a5a5a5": "861816", + "5d4802": "145b5d", + "ffffff": "c23e2e", + "181f1f": "5e1717", + "8c7321": "288278", + "293131": "c89161", + "8c721f": "54a48a", + "7b7b7b": "731515", + "797878": "da7248", + "182121": "661212", + "cecece": "97221a", + "5a5a5a": "611616", + "ffe600": "36c294", + "3a3a3a": "682321", + "00adde": "3e4ddc", + "3a4242": "ebc37d", + "192121": "9e533b" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/535.json b/public/images/pokemon/variant/back/535.json new file mode 100644 index 00000000000..2d1a18e3b9a --- /dev/null +++ b/public/images/pokemon/variant/back/535.json @@ -0,0 +1,26 @@ +{ + "1": { + "6bbdff": "a9c4d7", + "366089": "801941", + "636363": "8b2b4b", + "66bafd": "d65a5a", + "3a638c": "40567d", + "191919": "330821", + "7394c5": "6f8fb1", + "6f90c1": "b53a57", + "292929": "420e2d", + "424242": "671e3f" + }, + "2": { + "6bbdff": "672a23", + "366089": "ac6634", + "636363": "d76d39", + "66bafd": "f3cd69", + "3a638c": "420f1d", + "191919": "4f150a", + "7394c5": "54131a", + "6f90c1": "cd984a", + "292929": "7d2414", + "424242": "ac4423" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/536.json b/public/images/pokemon/variant/back/536.json new file mode 100644 index 00000000000..78a59fb699c --- /dev/null +++ b/public/images/pokemon/variant/back/536.json @@ -0,0 +1,32 @@ +{ + "1": { + "196373": "801941", + "404040": "874330", + "84e6d6": "d65a5a", + "10427b": "40567d", + "52a5b5": "b53a57", + "292929": "400a32", + "5e5e5e": "a96147", + "ffffff": "e3c998", + "296bad": "6f8fb1", + "c5c5c5": "ca9470", + "424242": "5e1246", + "0894d6": "a9c4d7", + "636363": "801c4e" + }, + "2": { + "196373": "ac6634", + "404040": "365a72", + "84e6d6": "f3cd69", + "10427b": "4a1423", + "52a5b5": "cd984a", + "292929": "7d2414", + "5e5e5e": "52809b", + "ffffff": "aadfe0", + "296bad": "5d171e", + "c5c5c5": "7fb8c2", + "424242": "ac4423", + "0894d6": "75332b", + "636363": "d76d39" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/537.json b/public/images/pokemon/variant/back/537.json new file mode 100644 index 00000000000..757d692bd40 --- /dev/null +++ b/public/images/pokemon/variant/back/537.json @@ -0,0 +1,24 @@ +{ + "1": { + "196373": "801941", + "52a58c": "b53a57", + "636363": "801c4e", + "10427b": "40567d", + "73e6ce": "d65a5a", + "292929": "400a32", + "424242": "5e1246", + "296bad": "6f8fb1", + "0894d6": "a9c4d7" + }, + "2": { + "196373": "ac6634", + "52a58c": "cd984a", + "636363": "d76d39", + "10427b": "4a1423", + "73e6ce": "f3cd69", + "292929": "7d2414", + "424242": "ac4423", + "296bad": "5d171e", + "0894d6": "75332b" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/554.json b/public/images/pokemon/variant/back/554.json new file mode 100644 index 00000000000..803721e4f0d --- /dev/null +++ b/public/images/pokemon/variant/back/554.json @@ -0,0 +1,32 @@ +{ + "1": { + "101010": "101010", + "5a1919": "2e3573", + "66311a": "a16012", + "634231": "946344", + "9c2929": "4e5aa3", + "ce3131": "6c7ec4", + "947310": "b0895f", + "ad5a2b": "a17a50", + "a75625": "d19628", + "cea519": "bda373", + "ffce21": "e3e2ba", + "ff9452": "e8c661", + "b15c29": "a17a50" + }, + "2": { + "101010": "101010", + "5a1919": "bf7558", + "66311a": "291d1b", + "634231": "75102a", + "9c2929": "d6a376", + "ce3131": "f0e2b9", + "947310": "9c1c2b", + "ad5a2b": "4a3021", + "a75625": "4a3021", + "cea519": "ba343d", + "ffce21": "d14949", + "ff9452": "614b38", + "b15c29": "b15c29" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/555-zen.json b/public/images/pokemon/variant/back/555-zen.json new file mode 100644 index 00000000000..9df761c1833 --- /dev/null +++ b/public/images/pokemon/variant/back/555-zen.json @@ -0,0 +1,24 @@ +{ + "1": { + "101010": "101010", + "215263": "592226", + "3a7b8c": "7d3e3d", + "425a63": "b5775b", + "529cad": "8c5b54", + "7ba5bd": "c99d7b", + "ad6b29": "3b3f87", + "b5d6ef": "e0c19b", + "e6a563": "7b8dd4" + }, + "2": { + "101010": "101010", + "215263": "523273", + "3a7b8c": "805a9c", + "425a63": "2e2a51", + "529cad": "a278b0", + "7ba5bd": "494162", + "ad6b29": "9e907e", + "b5d6ef": "605375", + "e6a563": "f5f3e9" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/555.json b/public/images/pokemon/variant/back/555.json new file mode 100644 index 00000000000..b83ca9fb88b --- /dev/null +++ b/public/images/pokemon/variant/back/555.json @@ -0,0 +1,30 @@ +{ + "1": { + "101010": "101010", + "523a21": "a65f33", + "631919": "222675", + "6b5a10": "b04a21", + "8c1929": "2d3685", + "ad2119": "3a4c94", + "b57b4a": "d9a455", + "bd0000": "cfc191", + "bd9429": "c26932", + "ef1010": "e3e2ba", + "efa56b": "e8cd7b", + "efce10": "d9944a" + }, + "2": { + "101010": "101010", + "523a21": "291b19", + "631919": "a86722", + "6b5a10": "941c32", + "8c1929": "d6993e", + "ad2119": "e8ca5d", + "b57b4a": "4a3021", + "bd0000": "bab5a6", + "bd9429": "ba343d", + "ef1010": "f5f3e9", + "efa56b": "614b38", + "efce10": "d14949" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/566.json b/public/images/pokemon/variant/back/566.json new file mode 100644 index 00000000000..cb2601d4a93 --- /dev/null +++ b/public/images/pokemon/variant/back/566.json @@ -0,0 +1,32 @@ +{ + "1": { + "101010": "101010", + "10316b": "1c4943", + "31529c": "336d60", + "3184f7": "4f9279", + "3a3a3a": "3a3a3a", + "523131": "641b49", + "524229": "2f6934", + "944242": "aa3c79", + "9c9cad": "9c9cad", + "bd9452": "66b562", + "de524a": "eb7fae", + "e6e6e6": "e6e6e6", + "f7ce63": "9be08b" + }, + "2": { + "101010": "101010", + "10316b": "283957", + "31529c": "929bdf", + "3184f7": "c4d3ff", + "3a3a3a": "3a3a3a", + "523131": "284452", + "524229": "211f69", + "944242": "44988f", + "9c9cad": "9c9cad", + "bd9452": "3b4bad", + "de524a": "65cda4", + "e6e6e6": "e6e6e6", + "f7ce63": "557ecd" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/567.json b/public/images/pokemon/variant/back/567.json new file mode 100644 index 00000000000..f4bb6a76111 --- /dev/null +++ b/public/images/pokemon/variant/back/567.json @@ -0,0 +1,37 @@ +{ + "1": { + "101010": "101010", + "523131": "454f52", + "635229": "2f6934", + "10316b": "1c4943", + "086b5a": "b3296b", + "9c4a4a": "7b8687", + "844252": "844252", + "de524a": "abb3b3", + "bd9452": "66b562", + "f7ce63": "9be08b", + "31529c": "336d60", + "10a594": "ee609d", + "3184f7": "4f9279", + "9c9cad": "9c9cad", + "ffffff": "ffffff" + }, + "2": { + "101010": "101010", + "523131": "284452", + "635229": "211f69", + "10316b": "283957", + "086b5a": "462d7e", + "9c4a4a": "44988f", + "844252": "844252", + "de524a": "65cda4", + "bd9452": "3b4bad", + "f7ce63": "557ecd", + "31529c": "929bdf", + "10a594": "7346a1", + "3184f7": "c4d3ff", + "9c9cad": "9c9cad", + "ffffff": "ffffff" + + } +} diff --git a/public/images/pokemon/variant/back/572.json b/public/images/pokemon/variant/back/572.json index e305e231ec0..5e74f55850d 100644 --- a/public/images/pokemon/variant/back/572.json +++ b/public/images/pokemon/variant/back/572.json @@ -1,18 +1,20 @@ { "1": { - "8c847b": "b2af6e", - "524a42": "524a42", - "ffffff": "feffd9", - "decec5": "decec5", - "bdb5a5": "dad7a1", - "101010": "101010" + "ffffff": "b3e8ba", + "4d473d": "802b50", + "524940": "428066", + "decec5": "87cc9a", + "bdb5a5": "cf6b77", + "918a83": "60a37b", + "8c847b": "b34967" }, "2": { - "8c847b": "86aaa7", - "524a42": "5f807e", - "ffffff": "ffffff", - "decec5": "d7e8e6", - "bdb5a5": "aec8c6", - "101010": "101010" + "ffffff": "d9e3aa", + "4d473d": "101931", + "524940": "466336", + "decec5": "7f915e", + "bdb5a5": "294a6b", + "918a83": "67824d", + "8c847b": "193457" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/573.json b/public/images/pokemon/variant/back/573.json new file mode 100644 index 00000000000..d3ceaf257b4 --- /dev/null +++ b/public/images/pokemon/variant/back/573.json @@ -0,0 +1,24 @@ +{ + "1": { + "524a42": "802b50", + "bdb5b5": "60a67c", + "847b73": "b34967", + "ffffff": "b3e8ba", + "bdad9c": "cf6b77", + "decec5": "87cc9a", + "d65252": "256145", + "807871": "458766", + "ef8484": "58a672" + }, + "2": { + "524a42": "101931", + "bdb5b5": "597041", + "847b73": "193457", + "ffffff": "d9e3aa", + "bdad9c": "294a6b", + "decec5": "7f915e", + "d65252": "558f45", + "807871": "3d542d", + "ef8484": "b4cf88" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/626.json b/public/images/pokemon/variant/back/626.json new file mode 100644 index 00000000000..3a709763542 --- /dev/null +++ b/public/images/pokemon/variant/back/626.json @@ -0,0 +1,46 @@ +{ + "1": { + "101010": "101010", + "312921": "303120", + "36363c": "362126", + "4a3119": "122119", + "4a4131": "4a4831", + "6b4a29": "2d4a3a", + "6b4a2a": "5f3539", + "6e4c2a": "565796", + "3a3a42": "4d150f", + "6b6b73": "802d1f", + "946a31": "4d6650", + "946a33": "513236", + "9a6f33": "716fab", + "ad8c29": "8580c4", + "9c845a": "9e655c", + "9c845c": "9e655c", + "bda57b": "bd8c7b", + "ffc54a": "c0b5eb", + "9ca5a5": "a34933", + "f7d69c": "f38d5d" + }, + "2": { + "101010": "101010", + "312921": "962430", + "36363c": "905932", + "4a3119": "855168", + "4a4131": "cc4545", + "6b4a29": "c17c95", + "6b4a2a": "907d32", + "6e4c2a": "678db8", + "3a3a42": "7f5310", + "6b6b73": "d49612", + "946a31": "e4b3b3", + "946a33": "946a33", + "9a6f33": "7da2c5", + "ad8c29": "92bcd4", + "9c845a": "beab6c", + "9c845c": "db9a39", + "bda57b": "efeac2", + "ffc54a": "c2e5f0", + "9ca5a5": "e9ca5a", + "f7d69c": "f5cc51" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/643.json b/public/images/pokemon/variant/back/643.json new file mode 100644 index 00000000000..08e6a2dd694 --- /dev/null +++ b/public/images/pokemon/variant/back/643.json @@ -0,0 +1,50 @@ +{ + "1": { + "196ba5": "e0912f", + "857c9c": "3c4154", + "54517a": "232738", + "c2c1db": "e6e7ef", + "fffffa": "fffffc", + "767ca8": "97a5b0", + "4a4a6b": "0d0d1a", + "504f75": "a58419", + "c3c1e0": "f0edc2", + "ffa531": "fcfade", + "767da3": "d6c563", + "d3d3e0": "2f3247", + "fff5f9": "565a69", + "c1c1d6": "454959", + "cacadb": "bfbfd6", + "ff6331": "ffee6b", + "d6c5b5": "f2f2d8", + "757d9e": "212236", + "e6b573": "f2ecaa", + "565280": "596675", + "ffffff": "414659", + "de2908": "ffca0a" + }, + "2": { + "196ba5": "b33a68", + "857c9c": "3c50a1", + "54517a": "2d3984", + "c2c1db": "343d8e", + "fffffa": "4459a2", + "767ca8": "2b2871", + "4a4a6b": "2d3984", + "504f75": "19323c", + "c3c1e0": "4f9290", + "ffa531": "e2f9b5", + "767da3": "3a6d71", + "d3d3e0": "647bd9", + "fff5f9": "a9bbff", + "c1c1d6": "647bd9", + "cacadb": "ffffff", + "ff6331": "9df377", + "d6c5b5": "3d8073", + "757d9e": "3c50a1", + "e6b573": "4ba789", + "565280": "19143f", + "ffffff": "a9bbff", + "de2908": "5cdca6" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/644.json b/public/images/pokemon/variant/back/644.json new file mode 100644 index 00000000000..01475c838c7 --- /dev/null +++ b/public/images/pokemon/variant/back/644.json @@ -0,0 +1,44 @@ +{ + "1": { + "1a1a21": "705ba8", + "2c2c35": "c1c8e8", + "103a52": "251076", + "191921": "686c99", + "16161d": "7687c2", + "6bf7ff": "dbbaff", + "00c5ff": "b77dff", + "0f0d13": "49568f", + "006bbd": "4800e3", + "121212": "54428f", + "940000": "762fcc", + "52525a": "7175a3", + "ce0000": "a44bf2", + "31313a": "cfd0e6", + "08528c": "3b1899", + "004275": "8742ff", + "111111": "5b5f8c", + "009cde": "7626ff", + "212129": "9b9fc4" + }, + "2": { + "1a1a21": "350707", + "2c2c35": "884290", + "103a52": "671212", + "191921": "843172", + "16161d": "5e286f", + "6bf7ff": "f5e5da", + "00c5ff": "f5b698", + "0f0d13": "3b1a4c", + "006bbd": "c8433a", + "121212": "210214", + "940000": "cc8215", + "52525a": "ffc5d1", + "ce0000": "f3d32c", + "31313a": "ef9dae", + "08528c": "821b1b", + "004275": "821b1b", + "111111": "4a1a4c", + "009cde": "ef806b", + "212129": "ca6c94" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/646-black.json b/public/images/pokemon/variant/back/646-black.json new file mode 100644 index 00000000000..28baffd5690 --- /dev/null +++ b/public/images/pokemon/variant/back/646-black.json @@ -0,0 +1,49 @@ +{ + "1": { + "ebebe8": "edc9ff", + "6b8c7b": "2b4366", + "7b6b5a": "5482b0", + "315a42": "1a2b4d", + "292930": "9b9bc2", + "31313a": "c8c9e0", + "e6e6de": "e6a18a", + "006b94": "4c13a1", + "23232b": "1c1c24", + "191921": "6a6a94", + "addec5": "426585", + "b59400": "b35a3e", + "355e45": "484873", + "2c2c36": "15213b", + "00b5ff": "a033ff", + "ffff4a": "db966b", + "524a31": "112240", + "b6e3c7": "bb8ae3", + "004b6f": "2f0e75", + "1e1e26": "1b1b24", + "719180": "905dcf", + "ada584": "78a9cc" + }, + "2": { + "ebebe8": "ffc5d1", + "6b8c7b": "be6e34", + "7b6b5a": "982222", + "315a42": "7b2d25", + "292930": "6c245b", + "31313a": "913a7d", + "006b94": "6b3773", + "23232b": "2b050a", + "191921": "3d0d38", + "addec5": "e6b45b", + "b59400": "166a2d", + "355e45": "ca6c94", + "2c2c36": "480b0b", + "00b5ff": "b464bf", + "ffff4a": "6ae649", + "524a31": "550f0f", + "b6e3c7": "ffadbe", + "004b6f": "411d46", + "1e1e26": "7b2d25", + "719180": "ea93a5", + "ada584": "c23232" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/646-white.json b/public/images/pokemon/variant/back/646-white.json new file mode 100644 index 00000000000..b2951e6fc38 --- /dev/null +++ b/public/images/pokemon/variant/back/646-white.json @@ -0,0 +1,46 @@ +{ + "1": { + "101010": "101010", + "741a18": "7a3418", + "4a4a29": "2a446b", + "4c4a2c": "0d0d1a", + "4a4a2d": "0d1030", + "315a42": "172247", + "7b7b5a": "779fbf", + "73737b": "120e1f", + "942921": "d49748", + "e64a42": "ffe587", + "6b8c7b": "2e466b", + "cc9827": "cc9827", + "ffde3a": "f0d897", + "ffad63": "fff7c4", + "ada584": "b7dbeb", + "bdbdc5": "232538", + "addec5": "45678a", + "e6e8f2": "414659", + "f5f5fa": "f5f5fa", + "ffffff": "ffffff" + }, + "2": { + "101010": "101010", + "741a18": "1f504d", + "4a4a29": "550f0f", + "4c4a2c": "1f1544", + "4a4a2d": "7b2d25", + "315a42": "7b2d25", + "7b7b5a": "982222", + "73737b": "2b2871", + "942921": "3d8073", + "e64a42": "4ba789", + "6b8c7b": "be6e34", + "cc9827": "166a2d", + "ffde3a": "9df377", + "ffad63": "5cdca6", + "ada584": "c23232", + "bdbdc5": "3d458f", + "addec5": "e6b45b", + "e6e8f2": "5870c4", + "f5f5fa": "f5f5fa", + "ffffff": "e2f9b5" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/646.json b/public/images/pokemon/variant/back/646.json new file mode 100644 index 00000000000..c509a0cda9c --- /dev/null +++ b/public/images/pokemon/variant/back/646.json @@ -0,0 +1,33 @@ +{ + "1": { + "8c7329": "b35a3e", + "949cad": "a6cfe0", + "6d737b": "a55c39", + "103a52": "121836", + "ffe600": "db966b", + "73737b": "6394b0", + "bde6ff": "3c5878", + "424252": "3d6285", + "696973": "6394b0", + "ceb500": "c46f52", + "a5b5ce": "293c5e", + "3b3b4a": "3d6285", + "6b8494": "1a2647" + }, + "2": { + "8c7329": "166a2d", + "949cad": "c23232", + "6d737b": "1a791b", + "103a52": "7b2d25", + "ffe600": "6ae649", + "73737b": "982222", + "bde6ff": "e6b45b", + "424252": "550f0f", + "696973": "736969", + "ceb500": "2aac2b", + "def7ff": "f7ec88", + "a5b5ce": "be6e34", + "3b3b4a": "4a3b3b", + "6b8494": "974626" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/692.json b/public/images/pokemon/variant/back/692.json new file mode 100644 index 00000000000..d4c85f37c9d --- /dev/null +++ b/public/images/pokemon/variant/back/692.json @@ -0,0 +1,28 @@ +{ + "1": { + "337380": "783a1d", + "b3b3b3": "c8ba6d", + "595959": "c85b5b", + "61daf2": "e1ac53", + "cc9c3d": "53be53", + "404040": "7d182d", + "ffc44c": "a9f076", + "b2f2ff": "fada7f", + "47a1b3": "af6a37", + "101010": "070707", + "735822": "20734c" + }, + "2": { + "337380": "5f3c23", + "b3b3b3": "68a7aa", + "595959": "88cd56", + "61daf2": "e1d6b6", + "cc9c3d": "7743be", + "404040": "1c873e", + "ffc44c": "a36feb", + "b2f2ff": "faf8d7", + "47a1b3": "968144", + "101010": "070707", + "735822": "371c72" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/693.json b/public/images/pokemon/variant/back/693.json new file mode 100644 index 00000000000..3187a81e0c0 --- /dev/null +++ b/public/images/pokemon/variant/back/693.json @@ -0,0 +1,28 @@ +{ + "1": { + "224b73": "552813", + "4595e5": "aa6839", + "23a2c8": "c87a23", + "262626": "230808", + "cc9c3d": "1b3c17", + "404040": "3c171b", + "5f5f5f": "6e2e3b", + "61daf2": "f2bd61", + "3674b3": "7d3e21", + "ffc44c": "426e2e", + "735822": "08230e" + }, + "2": { + "224b73": "5f463a", + "4595e5": "c8b493", + "23a2c8": "beb099", + "262626": "295a1c", + "cc9c3d": "6259af", + "404040": "2a8c53", + "5f5f5f": "51c85d", + "61daf2": "f0eadb", + "3674b3": "9b8265", + "ffc44c": "a39afa", + "735822": "36235f" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/746-school.json b/public/images/pokemon/variant/back/746-school.json new file mode 100644 index 00000000000..d8fa61a3829 --- /dev/null +++ b/public/images/pokemon/variant/back/746-school.json @@ -0,0 +1,38 @@ +{ + "1": { + "101010": "101010", + "0a1627": "5f2112", + "123954": "75391b", + "134884": "935926", + "134d84": "16574d", + "1766c6": "b77736", + "416adf": "2c9572", + "79848a": "a67834", + "749cf6": "5ce09d", + "73dcf5": "27133f", + "73e5f5": "552b64", + "72f0f6": "824388", + "9cd3fd": "aafe94", + "a6c5f7": "78f389", + "cfd1d3": "d5ab51", + "fbfbfb": "f7d76b" + }, + "2": { + "101010": "101010", + "0a1627": "0f0523", + "123954": "28071a", + "134884": "350b19", + "134d84": "b7904d", + "1766c6": "4a1111", + "416adf": "dec284", + "79848a": "4a1111", + "749cf6": "f8ecc5", + "73dcf5": "31238e", + "73e5f5": "3a4ebd", + "72f0f6": "6492f7", + "9cd3fd": "fefeef", + "a6c5f7": "fefed9", + "cfd1d3": "5f291c", + "fbfbfb": "844232" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/746.json b/public/images/pokemon/variant/back/746.json new file mode 100644 index 00000000000..5b183b10e5d --- /dev/null +++ b/public/images/pokemon/variant/back/746.json @@ -0,0 +1,40 @@ +{ + "1": { + "101010": "101010", + "1f2161": "16574d", + "5d666d": "75391b", + "616b72": "a67834", + "9c455b": "308c9d", + "374793": "2c9572", + "4764c9": "5ce09d", + "3e9cbb": "27133f", + "61c8de": "824388", + "8c9c9d": "935926", + "8d9c9d": "c69b3f", + "d88394": "65cfe2", + "b0c5c6": "d5ab51", + "ccd2ce": "b77736", + "d8d9da": "d8d9da", + "eeeeee": "f7d76b", + "fefefe": "fefefe" + }, + "2": { + "101010": "101010", + "1f2161": "b7904d", + "5d666d": "1e0726", + "616b72": "4a1111", + "9c455b": "b9682d", + "374793": "dec284", + "4764c9": "f8ecc5", + "3e9cbb": "4378eb", + "61c8de": "5787f1", + "8c9c9d": "350b19", + "8d9c9d": "531917", + "d88394": "e4d85f", + "b0c5c6": "5f291c", + "ccd2ce": "4a1111", + "d8d9da": "d8d9da", + "eeeeee": "844232", + "fefefe": "fefefe" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/780.json b/public/images/pokemon/variant/back/780.json new file mode 100644 index 00000000000..f55158dcabb --- /dev/null +++ b/public/images/pokemon/variant/back/780.json @@ -0,0 +1,28 @@ +{ + "1": { + "8d541b": "bd8955", + "297b8b": "1a316b", + "5aa4a4": "284c80", + "f5ae07": "faf0b1", + "606f55": "496375", + "726d5c": "a36026", + "105262": "0e194a", + "b8b7a3": "cf8d38", + "b4cda4": "9ab5b8", + "91a37c": "7798a1", + "eeeeee": "e6c15e" + }, + "2": { + "8d541b": "157d36", + "297b8b": "4e4f73", + "5aa4a4": "6a708a", + "f5ae07": "3ec435", + "606f55": "8f825d", + "726d5c": "162d3d", + "105262": "3f3c61", + "b8b7a3": "254e59", + "b4cda4": "d6dbba", + "91a37c": "b5b48b", + "eeeeee": "3e7a76" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/782.json b/public/images/pokemon/variant/back/782.json new file mode 100644 index 00000000000..f2bc20ecfba --- /dev/null +++ b/public/images/pokemon/variant/back/782.json @@ -0,0 +1,30 @@ +{ + "1": { + "f13035": "48bd8c", + "f8f236": "e77b57", + "504e4b": "472d1d", + "aba5ad": "336340", + "7b766f": "a67e5b", + "fdfdfd": "fcf2ca", + "726475": "214a33", + "bec6cb": "e8cea0", + "957509": "a63424", + "dbdbdb": "4e8759", + "940a0d": "258067", + "4d4b48": "8a5b41" + }, + "2": { + "f13035": "b8c0fc", + "f8f236": "52d9ac", + "504e4b": "273959", + "aba5ad": "5e3e75", + "7b766f": "8ab7cf", + "fdfdfd": "d5f4f7", + "726475": "412959", + "bec6cb": "b7ddeb", + "957509": "258085", + "dbdbdb": "855d99", + "940a0d": "636a94", + "4d4b48": "567496" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/783.json b/public/images/pokemon/variant/back/783.json new file mode 100644 index 00000000000..d91ccb51133 --- /dev/null +++ b/public/images/pokemon/variant/back/783.json @@ -0,0 +1,32 @@ +{ + "1": { + "f13035": "48bd8c", + "6c6968": "472d1d", + "97938c": "2a573e", + "957509": "a63424", + "fff5ae": "f7c4b5", + "4d4644": "2b130b", + "fdfdfd": "fcf2ca", + "6b6968": "8a5b41", + "940a0d": "258067", + "c2c1c0": "42754f", + "d7aa22": "c25236", + "69625c": "133027", + "f4da42": "e77b57" + }, + "2": { + "f13035": "d9ddfc", + "6c6968": "2e4266", + "97938c": "543666", + "957509": "258085", + "fff5ae": "baf7dc", + "4d4644": "151e38", + "fdfdfd": "d5f4f7", + "6b6968": "567496", + "940a0d": "636a94", + "c2c1c0": "744e87", + "d7aa22": "37ad94", + "69625c": "2d1c3d", + "f4da42": "52d9ac" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/784.json b/public/images/pokemon/variant/back/784.json new file mode 100644 index 00000000000..74a18ff0d3d --- /dev/null +++ b/public/images/pokemon/variant/back/784.json @@ -0,0 +1,42 @@ +{ + "1": { + "c99f21": "bf5841", + "2d2b28": "2b130b", + "d0d2d5": "77a353", + "a8a4a0": "517d37", + "fafafa": "fcf2ca", + "d4d6d9": "e8cea0", + "4a4743": "8a5b41", + "f4da42": "e77b57", + "f13035": "48bd8c", + "cb0e12": "258067", + "4d4040": "123028", + "a7a29e": "336142", + "523e41": "447835", + "885902": "87281b", + "9d6702": "993d26", + "7e7572": "204736", + "fdfdfd": "bbd477", + "4b4845": "472d1d" + }, + "2": { + "c99f21": "3aba9c", + "2d2b28": "151e38", + "d0d2d5": "7ec2cc", + "a8a4a0": "558ea3", + "fafafa": "d5f4f7", + "d4d6d9": "b7ddeb", + "4a4743": "567496", + "f4da42": "2a918e", + "f13035": "d9ddfc", + "cb0e12": "636a94", + "4d4040": "2d1840", + "a7a29e": "6c457a", + "523e41": "558fa6", + "885902": "1f6b6e", + "9d6702": "37ad94", + "7e7572": "4e2e61", + "fdfdfd": "adedf0", + "4b4845": "2e4266" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/840.json b/public/images/pokemon/variant/back/840.json new file mode 100644 index 00000000000..3129592abb3 --- /dev/null +++ b/public/images/pokemon/variant/back/840.json @@ -0,0 +1,28 @@ +{ + "1": { + "e2244a": "70a2c5", + "5fab1d": "7a7c9e", + "d39a52": "a22f76", + "e32b50": "4e77a2", + "fe455c": "abd7e2", + "fa6f8b": "c1f3f3", + "a4d84a": "9aa0b3", + "357912": "48485d", + "d3ee77": "d2d8df", + "8d4229": "741163", + "a50534": "3e6085" + }, + "2": { + "e2244a": "bfb5ab", + "5fab1d": "993c63", + "d39a52": "463731", + "e32b50": "807770", + "fe455c": "dcd9d1", + "fa6f8b": "eeedea", + "a4d84a": "c76886", + "357912": "6b2041", + "d3ee77": "e28c95", + "8d4229": "291411", + "a50534": "68645f" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/841-gigantamax.json b/public/images/pokemon/variant/back/841-gigantamax.json new file mode 100644 index 00000000000..6526fec9b4d --- /dev/null +++ b/public/images/pokemon/variant/back/841-gigantamax.json @@ -0,0 +1,36 @@ +{ + "1": { + "39a43d": "9aa0b3", + "d2394d": "abd7e2", + "61112d": "2c255d", + "a63139": "70a2c5", + "d54456": "8666ae", + "427638": "7a7c9e", + "c68a48": "9c2e72", + "8d4229": "272a52", + "eec856": "397880", + "cb8a42": "2b526f", + "b3ac62": "a3b9d0", + "dad08b": "dcebf9", + "2c4828": "243c63", + "e9c558": "c55885", + "772628": "1e1a4a" + }, + "2": { + "39a43d": "e28c95", + "d2394d": "dcd9d1", + "61112d": "3a2222", + "a63139": "bfb5ab", + "d54456": "915a41", + "427638": "b04f6d", + "c68a48": "2a1310", + "8d4229": "79392f", + "eec856": "eee0bc", + "cb8a42": "d1a87e", + "b3ac62": "cbb4af", + "dad08b": "e2dcd6", + "2c4828": "2e2246", + "e9c558": "463731", + "772628": "4f4840" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/841.json b/public/images/pokemon/variant/back/841.json new file mode 100644 index 00000000000..8cccd7dd76b --- /dev/null +++ b/public/images/pokemon/variant/back/841.json @@ -0,0 +1,34 @@ +{ + "1": { + "df6655": "c1f3f3", + "56ab32": "a59ab3", + "9b2629": "70a2c5", + "488235": "8e7a9e", + "ebe381": "854774", + "ccb468": "5d2654", + "ccca71": "cbb4af", + "8d764b": "110723", + "612324": "3e6085", + "da5245": "c55885", + "c3a965": "e2dcd6", + "b5915b": "34123a", + "d72d31": "abd7e2", + "395a2e": "383146" + }, + "2": { + "df6655": "e2dcd6", + "56ab32": "e28c95", + "9b2629": "bfb5ab", + "488235": "a8546e", + "ebe381": "be7b53", + "ccb468": "743527", + "ccca71": "cbb4af", + "8d764b": "230313", + "612324": "68645f", + "da5245": "463731", + "c3a965": "e2dcd6", + "b5915b": "541711", + "d72d31": "dcd9d1", + "395a2e": "4f0e30" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/842-gigantamax.json b/public/images/pokemon/variant/back/842-gigantamax.json new file mode 100644 index 00000000000..6526fec9b4d --- /dev/null +++ b/public/images/pokemon/variant/back/842-gigantamax.json @@ -0,0 +1,36 @@ +{ + "1": { + "39a43d": "9aa0b3", + "d2394d": "abd7e2", + "61112d": "2c255d", + "a63139": "70a2c5", + "d54456": "8666ae", + "427638": "7a7c9e", + "c68a48": "9c2e72", + "8d4229": "272a52", + "eec856": "397880", + "cb8a42": "2b526f", + "b3ac62": "a3b9d0", + "dad08b": "dcebf9", + "2c4828": "243c63", + "e9c558": "c55885", + "772628": "1e1a4a" + }, + "2": { + "39a43d": "e28c95", + "d2394d": "dcd9d1", + "61112d": "3a2222", + "a63139": "bfb5ab", + "d54456": "915a41", + "427638": "b04f6d", + "c68a48": "2a1310", + "8d4229": "79392f", + "eec856": "eee0bc", + "cb8a42": "d1a87e", + "b3ac62": "cbb4af", + "dad08b": "e2dcd6", + "2c4828": "2e2246", + "e9c558": "463731", + "772628": "4f4840" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/842.json b/public/images/pokemon/variant/back/842.json new file mode 100644 index 00000000000..3fdccc629c8 --- /dev/null +++ b/public/images/pokemon/variant/back/842.json @@ -0,0 +1,36 @@ +{ + "1": { + "39a45f": "9aa0b3", + "ffcd88": "698db4", + "621522": "3e6085", + "9f7034": "110723", + "f9be6b": "a3b9d0", + "fcff86": "397880", + "2c743e": "7a7c9e", + "af2348": "70a2c5", + "1f4329": "313846", + "ffc575": "2b526f", + "ffa63b": "2d3d68", + "275734": "852560", + "e78422": "1f1946", + "e75574": "abd7e2", + "7de755": "d66f9a" + }, + "2": { + "39a45f": "e28c95", + "ffcd88": "b9937a", + "621522": "68645f", + "9f7034": "2e0e09", + "f9be6b": "cbb4af", + "fcff86": "eee0bc", + "2c743e": "a8546e", + "af2348": "bfb5ab", + "1f4329": "341c1c", + "ffc575": "d1a87e", + "ffa63b": "63473b", + "275734": "2e2246", + "e78422": "4b211b", + "e75574": "dcd9d1", + "7de755": "589df3" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/871.json b/public/images/pokemon/variant/back/871.json new file mode 100644 index 00000000000..5004d3013b5 --- /dev/null +++ b/public/images/pokemon/variant/back/871.json @@ -0,0 +1,32 @@ +{ + "1": { + "101010": "101010", + "2e2732": "1b3334", + "281f2e": "2a2732", + "46384c": "504540", + "493d4e": "3a5d57", + "665272": "62857c", + "544947": "7d320e", + "7a7270": "a8501b", + "9e9a96": "cd7930", + "7b4e1c": "5b0d3f", + "d58815": "a02c58", + "fdba2f": "c45858", + "fdf22f": "f1e8e8" + }, + "2": { + "101010": "101010", + "2e2732": "8b4738", + "281f2e": "212232", + "46384c": "504740", + "493d4e": "ce8a66", + "665272": "eac69b", + "544947": "1a1730", + "7a7270": "27223b", + "9e9a96": "3a3449", + "7b4e1c": "222c58", + "d58815": "343f7f", + "fdba2f": "67729f", + "fdf22f": "8e9fc9" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/88.json b/public/images/pokemon/variant/back/88.json new file mode 100644 index 00000000000..61b7ca3b802 --- /dev/null +++ b/public/images/pokemon/variant/back/88.json @@ -0,0 +1,28 @@ +{ + "1": { + "101010": "101010", + "424a5a": "5b3a1d", + "5a3173": "6a010c", + "848c9c": "9b7c48", + "944a9c": "b1160e", + "adb5bd": "e9de8c", + "bd7bbd": "d55021", + "ce8cc5": "e98a47", + "d6d6de": "ded7ce", + "ffffff": "ffffff", + "efade6": "f8be70" + }, + "2": { + "101010": "101010", + "424a5a": "2d7351", + "5a3173": "a21851", + "848c9c": "69b17b", + "944a9c": "d04569", + "adb5bd": "b0e4a9", + "bd7bbd": "ed8ea2", + "ce8cc5": "f4bfbf", + "d6d6de": "d6d6de", + "ffffff": "ffffff", + "efade6": "f8d8cf" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/89.json b/public/images/pokemon/variant/back/89.json new file mode 100644 index 00000000000..eda3558d7c2 --- /dev/null +++ b/public/images/pokemon/variant/back/89.json @@ -0,0 +1,30 @@ +{ + "1": { + "101010": "101010", + "424a5a": "5b3a1d", + "5a3173": "6a010c", + "848c9c": "9b7c48", + "944a9c": "b1160e", + "adb5bd": "e9de8c", + "bd7bbd": "d55021", + "ce8cc5": "e98a47", + "d6d6de": "ded7ce", + "ffffff": "ffffff", + "efade6": "f8be70", + "ad63ad": "c63a17" + }, + "2": { + "101010": "101010", + "424a5a": "2d7351", + "5a3173": "a21851", + "848c9c": "69b17b", + "944a9c": "d04569", + "adb5bd": "b0e4a9", + "bd7bbd": "ed8ea2", + "ce8cc5": "f4bfbf", + "d6d6de": "d6d6de", + "ffffff": "ffffff", + "efade6": "f8d8cf", + "ad63ad": "e5728a" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/207.json b/public/images/pokemon/variant/back/female/207.json index 52c582cf1a8..89ed15e95c5 100644 --- a/public/images/pokemon/variant/back/female/207.json +++ b/public/images/pokemon/variant/back/female/207.json @@ -1,16 +1,14 @@ { "1": { - "63314a": "7f4812", - "e6a5ce": "f8dd84", - "de84b5": "daa93f", - "101010": "101010", - "ad6394": "b67322" + "de84b5": "e3784d", + "e6a5ce": "f7a565", + "63314a": "802019", + "ad6394": "ba4732" }, "2": { - "63314a": "5f1723", - "e6a5ce": "ef6b58", - "de84b5": "c04144", - "101010": "101010", - "ad6394": "97343c" + "de84b5": "42bca0", + "e6a5ce": "70e0b7", + "63314a": "134e5e", + "ad6394": "27868a" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/332.json b/public/images/pokemon/variant/back/female/332.json new file mode 100644 index 00000000000..9ec50cb7e92 --- /dev/null +++ b/public/images/pokemon/variant/back/female/332.json @@ -0,0 +1,28 @@ +{ + "1": { + "319452": "780d4a", + "4aa552": "8a1652", + "7ba563": "b44040", + "8cbd63": "bf3d64", + "215200": "710f2f", + "196b21": "780d4a", + "a5d674": "de5b6f", + "4a7310": "982443", + "a5d673": "e16363", + "63b56b": "9e2056", + "215201": "710f2e" + }, + "2": { + "319452": "b59c72", + "4aa552": "c9b991", + "7ba563": "805a9c", + "8cbd63": "ebe9ca", + "215200": "41334d", + "196b21": "b59c72", + "a5d674": "f6f7df", + "4a7310": "4f3956", + "a5d673": "a473ba", + "63b56b": "e3ddb8", + "215201": "694d37" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/396.json b/public/images/pokemon/variant/back/female/396.json new file mode 100644 index 00000000000..429adbc8791 --- /dev/null +++ b/public/images/pokemon/variant/back/female/396.json @@ -0,0 +1,36 @@ +{ + "1": { + "d6dede": "e3d09d", + "949494": "dbb070", + "736363": "89ad57", + "ffffff": "f0ecd3", + "382028": "731e22", + "d67300": "db963b", + "b5b5b5": "d4b27f", + "808080": "c48c51", + "9c4a21": "b06421", + "8c7373": "b53f36", + "3a2129": "2a4f19", + "524a4a": "558033", + "4f4747": "144a40", + "ad9c9c": "ed7b61", + "ff9429": "ffcf5e" + }, + "2": { + "d6dede": "f0deaa", + "949494": "cca472", + "736363": "4da8a1", + "ffffff": "fcfad2", + "382028": "0d142e", + "d67300": "52281f", + "b5b5b5": "debd8c", + "808080": "bf8d62", + "9c4a21": "451915", + "8c7373": "1b2745", + "3a2129": "235a6b", + "524a4a": "307b82", + "4f4747": "e0703d", + "ad9c9c": "2f436b", + "ff9429": "8c604c" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/397.json b/public/images/pokemon/variant/back/female/397.json new file mode 100644 index 00000000000..0eef3be33d9 --- /dev/null +++ b/public/images/pokemon/variant/back/female/397.json @@ -0,0 +1,36 @@ +{ + "1": { + "735a63": "b53f36", + "574f57": "144a40", + "5a525a": "739e49", + "f75242": "8bba65", + "878787": "baa277", + "b5b5b5": "d9c798", + "ff9429": "ffcf5e", + "382f38": "0c3330", + "3a313a": "496e2e", + "362d36": "612e10", + "fcfcfc": "f0ebc5", + "bd6300": "b06421", + "7b4221": "965318", + "523a4a": "731e22", + "9c848c": "ed7b61" + }, + "2": { + "735a63": "1b2745", + "574f57": "e0703d", + "5a525a": "4da8a1", + "f75242": "f797ad", + "878787": "d4b885", + "b5b5b5": "f0deaa", + "ff9429": "8c604c", + "382f38": "b04a28", + "3a313a": "307b82", + "362d36": "421917", + "fcfcfc": "fcfad2", + "bd6300": "66362b", + "7b4221": "52281f", + "523a4a": "0d142e", + "9c848c": "2f436b" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/398.json b/public/images/pokemon/variant/back/female/398.json new file mode 100644 index 00000000000..0c987cf37b0 --- /dev/null +++ b/public/images/pokemon/variant/back/female/398.json @@ -0,0 +1,36 @@ +{ + "1": { + "9c4242": "09302d", + "5c545c": "144a40", + "3a313a": "0d3236", + "7b4221": "965318", + "bd6300": "db963b", + "5a525a": "558033", + "7b6b7b": "89ad57", + "f75242": "144a40", + "735a63": "d94f45", + "ffffff": "e8e3b6", + "523a4a": "872328", + "3a3a3a": "2a4f19", + "b5b5b5": "d7be89", + "9c848c": "ed7b61", + "ff9429": "ffcf5e" + }, + "2": { + "9c4242": "c94a2a", + "5c545c": "e0703d", + "3a313a": "a64221", + "7b4221": "421917", + "bd6300": "63362b", + "5a525a": "307b82", + "7b6b7b": "4da8a1", + "f75242": "f78a4a", + "735a63": "1b2745", + "ffffff": "fcfad2", + "523a4a": "080d1f", + "3a3a3a": "235a6b", + "b5b5b5": "f0deaa", + "9c848c": "293854", + "ff9429": "8c604c" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/403.json b/public/images/pokemon/variant/back/female/403.json new file mode 100644 index 00000000000..4eb1da93a49 --- /dev/null +++ b/public/images/pokemon/variant/back/female/403.json @@ -0,0 +1,22 @@ +{ + "1": { + "b59c5a": "3763b8", + "7badf7": "bf403a", + "637bb5": "962a2f", + "4a4a63": "dcb788", + "ffe65a": "4881cc", + "313142": "bd8254", + "42426b": "63121d", + "736352": "234085" + }, + "2": { + "b59c5a": "36b88a", + "7badf7": "324663", + "637bb5": "222f4d", + "4a4a63": "bbe5e5", + "ffe65a": "46d382", + "313142": "73bec9", + "42426b": "161b36", + "736352": "298e7d" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/404.json b/public/images/pokemon/variant/back/female/404.json new file mode 100644 index 00000000000..1ebec7af6be --- /dev/null +++ b/public/images/pokemon/variant/back/female/404.json @@ -0,0 +1,24 @@ +{ + "1": { + "736352": "234085", + "4a4a73": "63121d", + "63637b": "f1dbb1", + "637bb5": "962a2f", + "4a4a63": "dcb788", + "ffe65a": "4881cc", + "313142": "bd8254", + "b59c5a": "3763b8", + "7badf7": "bf403a" + }, + "2": { + "736352": "298e7d", + "4a4a73": "161b36", + "63637b": "def4f0", + "637bb5": "222f4d", + "4a4a63": "bbe5e5", + "ffe65a": "46d382", + "313142": "73bec9", + "b59c5a": "36b88a", + "7badf7": "324663" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/405.json b/public/images/pokemon/variant/back/female/405.json new file mode 100644 index 00000000000..c70567e0728 --- /dev/null +++ b/public/images/pokemon/variant/back/female/405.json @@ -0,0 +1,30 @@ +{ + "1": { + "b59c5a": "3763b8", + "7badf7": "bf403a", + "63637b": "f1dbb1", + "3a3859": "430917", + "637bb5": "962a2f", + "4a4a73": "63121d", + "4a4a63": "dcb488", + "ffe65a": "4881cc", + "313142": "bd7e54", + "943a52": "5a2d0f", + "e64a52": "3e2711", + "736352": "234085" + }, + "2": { + "b59c5a": "36b88a", + "7badf7": "324663", + "63637b": "def4f0", + "3a3859": "0f0f26", + "637bb5": "222f4d", + "4a4a73": "161b36", + "4a4a63": "bbe5e5", + "ffe65a": "46d382", + "313142": "73bec9", + "943a52": "3a5e80", + "e64a52": "4a7c92", + "736352": "298e7d" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/417.json b/public/images/pokemon/variant/back/female/417.json new file mode 100644 index 00000000000..42b3180ee3c --- /dev/null +++ b/public/images/pokemon/variant/back/female/417.json @@ -0,0 +1,36 @@ +{ + "1": { + "101010": "101010", + "3e364e": "734430", + "524941": "732e12", + "5a524a": "642f1a", + "4a425a": "5f2618", + "84523a": "9b314f", + "ef845a": "e26e6e", + "c5a563": "e95d6c", + "ffd663": "f17c7c", + "637b9c": "86452b", + "7bb5e6": "a25f37", + "cec5c5": "e8be64", + "f7f7f7": "faeda9", + "ffffff": "ffffff", + "7b7b84": "8e623c" + }, + "2": { + "101010": "101010", + "3e364e": "203243", + "524941": "2d284c", + "5a524a": "0f203a", + "4a425a": "23704c", + "84523a": "693939", + "ef845a": "e1b8ac", + "c5a563": "8fecf7", + "ffd663": "d0fdff", + "637b9c": "a2dc76", + "7bb5e6": "e4fba1", + "cec5c5": "357577", + "f7f7f7": "5ba297", + "ffffff": "ffffff", + "7b7b84": "1f3f4e" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/2037.json b/public/images/pokemon/variant/exp/2037.json new file mode 100644 index 00000000000..2c190d5d36a --- /dev/null +++ b/public/images/pokemon/variant/exp/2037.json @@ -0,0 +1,26 @@ +{ + "1": { + "151515": "101010", + "2d57bb": "235dc4", + "558b9f": "9f435d", + "648082": "6e67b0", + "6cb1db": "3daae0", + "97bdd2": "ffa8b8", + "c1d1d2": "b3b8ea", + "d9e9f4": "ffd3e1", + "fdfdfd": "d7d9f9", + "ffffff": "ffffff" + }, + "2": { + "151515": "101010", + "2d57bb": "6e1179", + "558b9f": "90215e", + "648082": "bf4747", + "6cb1db": "8832a0", + "97bdd2": "da4e75", + "c1d1d2": "ffc07b", + "d9e9f4": "ff8489", + "fdfdfd": "ffe6a0", + "ffffff": "ffffff" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/2038.json b/public/images/pokemon/variant/exp/2038.json new file mode 100644 index 00000000000..845c45f7887 --- /dev/null +++ b/public/images/pokemon/variant/exp/2038.json @@ -0,0 +1,36 @@ +{ + "1": { + "101010": "101010", + "4d5c78": "394880", + "516077": "9f435d", + "007ab5": "2380c4", + "38858d": "e35ea2", + "7a8a9c": "6172ab", + "66b3d7": "3dbfe0", + "86a8c0": "e27495", + "81c2c5": "ff89c0", + "bdcbd7": "a7ade7", + "a1e1de": "ffb6e5", + "b0d3ea": "ffa8b8", + "eafefe": "ffd3e1", + "fdfdfd": "bec6ef", + "ffffff": "ffffff" + }, + "2": { + "101010": "101010", + "4d5c78": "73174a", + "516077": "bb3c3c", + "007ab5": "882493", + "38858d": "572746", + "7a8a9c": "90215e", + "66b3d7": "a044ab", + "86a8c0": "ff824c", + "81c2c5": "75355e", + "bdcbd7": "da426d", + "a1e1de": "93547c", + "b0d3ea": "ffbf6b", + "eafefe": "ffe28c", + "fdfdfd": "ff6f86", + "ffffff": "ffffff" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/692.json b/public/images/pokemon/variant/exp/692.json new file mode 100644 index 00000000000..954dcffb3e9 --- /dev/null +++ b/public/images/pokemon/variant/exp/692.json @@ -0,0 +1,26 @@ +{ + "1": { + "b3f2ff": "fada7f", + "44a2b4": "af6a37", + "2f7280": "783a1d", + "cd9d3a": "53be53", + "575757": "c85b5b", + "72561c": "20734c", + "60dbf2": "e1ac53", + "b4b4b4": "c8ba6d", + "3d3d3d": "7d182d", + "ffc549": "a9f076" + }, + "2": { + "b3f2ff": "faf8d7", + "44a2b4": "968144", + "2f7280": "5f3c23", + "cd9d3a": "7743be", + "575757": "88cd56", + "72561c": "371c72", + "60dbf2": "e1d6b6", + "b4b4b4": "68a7aa", + "3d3d3d": "1c873e", + "ffc549": "a36feb" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/693.json b/public/images/pokemon/variant/exp/693.json new file mode 100644 index 00000000000..2e80795d2a0 --- /dev/null +++ b/public/images/pokemon/variant/exp/693.json @@ -0,0 +1,30 @@ +{ + "1": { + "23a2c8": "c87a23", + "ffc859": "6ccd80", + "224b73": "552813", + "404040": "3c171b", + "262626": "230808", + "5f5f5f": "6e2e3b", + "cc9c3d": "1b3c17", + "61daf2": "f2bd61", + "735822": "08230e", + "3674b3": "7d3e21", + "ffc44c": "426e2e", + "4595e5": "aa6839" + }, + "2": { + "23a2c8": "beb099", + "ffc859": "f5b281", + "224b73": "5f463a", + "404040": "2a8c53", + "262626": "295a1c", + "5f5f5f": "51c85d", + "cc9c3d": "6259af", + "61daf2": "f0eadb", + "735822": "36235f", + "3674b3": "9b8265", + "ffc44c": "a39afa", + "4595e5": "c8b493" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/746-school.json b/public/images/pokemon/variant/exp/746-school.json new file mode 100644 index 00000000000..a76aca2921f --- /dev/null +++ b/public/images/pokemon/variant/exp/746-school.json @@ -0,0 +1,40 @@ +{ + "1": { + "101010": "101010", + "0a1627": "5f2112", + "113650": "0b3d3a", + "123954": "75351b", + "10437d": "16574d", + "134884": "934f26", + "1766c6": "b77736", + "3d66d8": "d39c63", + "416adf": "2c9572", + "79848a": "a67834", + "749cf6": "5ce09d", + "43ebf3": "824388", + "72f0f6": "27133f", + "9cd3fd": "78f389", + "a6c5f7": "aafe94", + "cfd1d3": "d5ab51", + "fbfbfb": "f7d76b" + }, + "2": { + "101010": "101010", + "0a1627": "160523", + "113650": "846228", + "123954": "28071a", + "10437d": "b7904d", + "134884": "350b19", + "1766c6": "4a1111", + "3d66d8": "622222", + "416adf": "dec284", + "79848a": "4a1111", + "749cf6": "f8ecc5", + "43ebf3": "4378eb", + "72f0f6": "31238e", + "9cd3fd": "fefed9", + "a6c5f7": "fefeef", + "cfd1d3": "5f291c", + "fbfbfb": "844232" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/746.json b/public/images/pokemon/variant/exp/746.json new file mode 100644 index 00000000000..5b183b10e5d --- /dev/null +++ b/public/images/pokemon/variant/exp/746.json @@ -0,0 +1,40 @@ +{ + "1": { + "101010": "101010", + "1f2161": "16574d", + "5d666d": "75391b", + "616b72": "a67834", + "9c455b": "308c9d", + "374793": "2c9572", + "4764c9": "5ce09d", + "3e9cbb": "27133f", + "61c8de": "824388", + "8c9c9d": "935926", + "8d9c9d": "c69b3f", + "d88394": "65cfe2", + "b0c5c6": "d5ab51", + "ccd2ce": "b77736", + "d8d9da": "d8d9da", + "eeeeee": "f7d76b", + "fefefe": "fefefe" + }, + "2": { + "101010": "101010", + "1f2161": "b7904d", + "5d666d": "1e0726", + "616b72": "4a1111", + "9c455b": "b9682d", + "374793": "dec284", + "4764c9": "f8ecc5", + "3e9cbb": "4378eb", + "61c8de": "5787f1", + "8c9c9d": "350b19", + "8d9c9d": "531917", + "d88394": "e4d85f", + "b0c5c6": "5f291c", + "ccd2ce": "4a1111", + "d8d9da": "d8d9da", + "eeeeee": "844232", + "fefefe": "fefefe" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/780.json b/public/images/pokemon/variant/exp/780.json new file mode 100644 index 00000000000..0399d3567bf --- /dev/null +++ b/public/images/pokemon/variant/exp/780.json @@ -0,0 +1,40 @@ +{ + "1": { + "8d541b": "bd8955", + "297b8b": "1a316b", + "606f55": "496375", + "ffc4d7": "f29d9d", + "105262": "0e194a", + "b4cda4": "9ab5b8", + "f5ae07": "e8c987", + "ce5b9b": "cf4654", + "faf550": "faf0b1", + "e67b9c": "e65757", + "bd3983": "bd3341", + "eea6bc": "f06e6e", + "5aa4a4": "284c80", + "b8b7a3": "cf8d38", + "726d5c": "a36026", + "91a37c": "7798a1", + "eeeeee": "e6c15e" + }, + "2": { + "8d541b": "157d36", + "297b8b": "4e4f73", + "606f55": "8f825d", + "ffc4d7": "f2e396", + "105262": "3f3c61", + "b4cda4": "d6dbba", + "f5ae07": "24ab2b", + "ce5b9b": "d9ae5d", + "faf550": "3ec435", + "e67b9c": "e3b656", + "bd3983": "c27529", + "eea6bc": "f2d98d", + "5aa4a4": "6a708a", + "b8b7a3": "254e59", + "726d5c": "162d3d", + "91a37c": "b5b48b", + "eeeeee": "3e7a76" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/840.json b/public/images/pokemon/variant/exp/840.json new file mode 100644 index 00000000000..5a6a81a887e --- /dev/null +++ b/public/images/pokemon/variant/exp/840.json @@ -0,0 +1,34 @@ +{ + "1": { + "e2244a": "70a2c5", + "8d4229": "570749", + "94d84a": "fefefe", + "a4d84a": "9aa0b3", + "d39a52": "9c2e72", + "e32b50": "4e77a2", + "5fab1d": "7a7c9e", + "fe455c": "abd7e2", + "5bab1d": "acb0c3", + "247912": "48485d", + "a50534": "3e6085", + "357912": "313846", + "f2c171": "c55885", + "fa6f8b": "c1f3f3" + }, + "2": { + "e2244a": "bfb5ab", + "8d4229": "230808", + "94d84a": "589df3", + "a4d84a": "9aa0b3", + "d39a52": "291411", + "e32b50": "807770", + "5fab1d": "7a7c9e", + "fe455c": "dcd9d1", + "5bab1d": "354dbf", + "247912": "2e2246", + "a50534": "68645f", + "357912": "313846", + "f2c171": "463731", + "fa6f8b": "eeedea" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/841.json b/public/images/pokemon/variant/exp/841.json new file mode 100644 index 00000000000..aa68f322f29 --- /dev/null +++ b/public/images/pokemon/variant/exp/841.json @@ -0,0 +1,42 @@ +{ + "1": { + "101010": "101010", + "612324": "3e6085", + "395a2e": "383146", + "9b2629": "70a2c5", + "d72d31": "abd7e2", + "874c23": "453157", + "8d764b": "110723", + "d9695a": "c55885", + "488235": "8e7a9e", + "56ab32": "a59ab3", + "b08c51": "b3b1d6", + "b5915b": "34123a", + "ccb468": "5d2654", + "f1c950": "f3c5dd", + "ccca71": "e6dcf9", + "f0bda6": "c1f3f3", + "ebe381": "854774", + "fcfcfc": "fcfcfc" + }, + "2": { + "101010": "101010", + "612324": "827466", + "395a2e": "4f0e30", + "9b2629": "bfb5ab", + "d72d31": "dcd9d1", + "874c23": "2e2246", + "8d764b": "230313", + "d9695a": "463731", + "488235": "a8546e", + "56ab32": "e28c95", + "b08c51": "cbb4af", + "b5915b": "541711", + "ccb468": "8b4332", + "f1c950": "589df3", + "ccca71": "e2dcd6", + "f0bda6": "eeedea", + "ebe381": "c68862", + "fcfcfc": "fcfcfc" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/842.json b/public/images/pokemon/variant/exp/842.json new file mode 100644 index 00000000000..0629adc139a --- /dev/null +++ b/public/images/pokemon/variant/exp/842.json @@ -0,0 +1,43 @@ +{ + "1": { + "101010": "101010", + "1f4329": "313846", + "1f5829": "852560", + "2c743e": "7a7c9e", + "9f7034": "230f47", + "ac6b20": "110723", + "af2348": "67829e", + "e75574": "70a2c5", + "39a45f": "92cbd9", + "7de755": "d66f9a", + "e78422": "1f1946", + "ffa63b": "2d3d68", + "f1cf6d": "a3b9d0", + "f9d56d": "698db4", + "ffc575": "2b526f", + "f18e8e": "c1f3f3", + "fcff86": "397880", + "621522": "204063" + + }, + "2": { + "101010": "101010", + "1f4329": "511c2d", + "1f5829": "2e2246", + "2c743e": "a8546e", + "9f7034": "3a130d", + "ac6b20": "68645f", + "af2348": "bfb5ab", + "e75574": "dcd9d1", + "39a45f": "e28c95", + "7de755": "589df3", + "e78422": "4b211b", + "ffa63b": "63473b", + "f1cf6d": "cbb4af", + "f9d56d": "b9937a", + "ffc575": "d1a87e", + "f18e8e": "eeedea", + "fcff86": "eee0bc", + "621522": "68645f" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/871.json b/public/images/pokemon/variant/exp/871.json new file mode 100644 index 00000000000..5004d3013b5 --- /dev/null +++ b/public/images/pokemon/variant/exp/871.json @@ -0,0 +1,32 @@ +{ + "1": { + "101010": "101010", + "2e2732": "1b3334", + "281f2e": "2a2732", + "46384c": "504540", + "493d4e": "3a5d57", + "665272": "62857c", + "544947": "7d320e", + "7a7270": "a8501b", + "9e9a96": "cd7930", + "7b4e1c": "5b0d3f", + "d58815": "a02c58", + "fdba2f": "c45858", + "fdf22f": "f1e8e8" + }, + "2": { + "101010": "101010", + "2e2732": "8b4738", + "281f2e": "212232", + "46384c": "504740", + "493d4e": "ce8a66", + "665272": "eac69b", + "544947": "1a1730", + "7a7270": "27223b", + "9e9a96": "3a3449", + "7b4e1c": "222c58", + "d58815": "343f7f", + "fdba2f": "67729f", + "fdf22f": "8e9fc9" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/2037.json b/public/images/pokemon/variant/exp/back/2037.json new file mode 100644 index 00000000000..0d2c02cf980 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/2037.json @@ -0,0 +1,22 @@ +{ + "1": { + "151515": "101010", + "558b9f": "9f435d", + "648082": "6e67b0", + "97bdd2": "ffa8b8", + "c1d1d2": "b3b8ea", + "d9e9f4": "ffd3e1", + "fdfdfd": "d7d9f9", + "ffffff": "ffffff" + }, + "2": { + "151515": "101010", + "558b9f": "90215e", + "648082": "bf4747", + "97bdd2": "da4e75", + "c1d1d2": "ffc07b", + "d9e9f4": "ff8489", + "fdfdfd": "ffe6a0", + "ffffff": "ffffff" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/2038.json b/public/images/pokemon/variant/exp/back/2038.json new file mode 100644 index 00000000000..845c45f7887 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/2038.json @@ -0,0 +1,36 @@ +{ + "1": { + "101010": "101010", + "4d5c78": "394880", + "516077": "9f435d", + "007ab5": "2380c4", + "38858d": "e35ea2", + "7a8a9c": "6172ab", + "66b3d7": "3dbfe0", + "86a8c0": "e27495", + "81c2c5": "ff89c0", + "bdcbd7": "a7ade7", + "a1e1de": "ffb6e5", + "b0d3ea": "ffa8b8", + "eafefe": "ffd3e1", + "fdfdfd": "bec6ef", + "ffffff": "ffffff" + }, + "2": { + "101010": "101010", + "4d5c78": "73174a", + "516077": "bb3c3c", + "007ab5": "882493", + "38858d": "572746", + "7a8a9c": "90215e", + "66b3d7": "a044ab", + "86a8c0": "ff824c", + "81c2c5": "75355e", + "bdcbd7": "da426d", + "a1e1de": "93547c", + "b0d3ea": "ffbf6b", + "eafefe": "ffe28c", + "fdfdfd": "ff6f86", + "ffffff": "ffffff" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/692.json b/public/images/pokemon/variant/exp/back/692.json new file mode 100644 index 00000000000..d4c85f37c9d --- /dev/null +++ b/public/images/pokemon/variant/exp/back/692.json @@ -0,0 +1,28 @@ +{ + "1": { + "337380": "783a1d", + "b3b3b3": "c8ba6d", + "595959": "c85b5b", + "61daf2": "e1ac53", + "cc9c3d": "53be53", + "404040": "7d182d", + "ffc44c": "a9f076", + "b2f2ff": "fada7f", + "47a1b3": "af6a37", + "101010": "070707", + "735822": "20734c" + }, + "2": { + "337380": "5f3c23", + "b3b3b3": "68a7aa", + "595959": "88cd56", + "61daf2": "e1d6b6", + "cc9c3d": "7743be", + "404040": "1c873e", + "ffc44c": "a36feb", + "b2f2ff": "faf8d7", + "47a1b3": "968144", + "101010": "070707", + "735822": "371c72" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/693.json b/public/images/pokemon/variant/exp/back/693.json new file mode 100644 index 00000000000..3187a81e0c0 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/693.json @@ -0,0 +1,28 @@ +{ + "1": { + "224b73": "552813", + "4595e5": "aa6839", + "23a2c8": "c87a23", + "262626": "230808", + "cc9c3d": "1b3c17", + "404040": "3c171b", + "5f5f5f": "6e2e3b", + "61daf2": "f2bd61", + "3674b3": "7d3e21", + "ffc44c": "426e2e", + "735822": "08230e" + }, + "2": { + "224b73": "5f463a", + "4595e5": "c8b493", + "23a2c8": "beb099", + "262626": "295a1c", + "cc9c3d": "6259af", + "404040": "2a8c53", + "5f5f5f": "51c85d", + "61daf2": "f0eadb", + "3674b3": "9b8265", + "ffc44c": "a39afa", + "735822": "36235f" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/746-school.json b/public/images/pokemon/variant/exp/back/746-school.json new file mode 100644 index 00000000000..d8fa61a3829 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/746-school.json @@ -0,0 +1,38 @@ +{ + "1": { + "101010": "101010", + "0a1627": "5f2112", + "123954": "75391b", + "134884": "935926", + "134d84": "16574d", + "1766c6": "b77736", + "416adf": "2c9572", + "79848a": "a67834", + "749cf6": "5ce09d", + "73dcf5": "27133f", + "73e5f5": "552b64", + "72f0f6": "824388", + "9cd3fd": "aafe94", + "a6c5f7": "78f389", + "cfd1d3": "d5ab51", + "fbfbfb": "f7d76b" + }, + "2": { + "101010": "101010", + "0a1627": "0f0523", + "123954": "28071a", + "134884": "350b19", + "134d84": "b7904d", + "1766c6": "4a1111", + "416adf": "dec284", + "79848a": "4a1111", + "749cf6": "f8ecc5", + "73dcf5": "31238e", + "73e5f5": "3a4ebd", + "72f0f6": "6492f7", + "9cd3fd": "fefeef", + "a6c5f7": "fefed9", + "cfd1d3": "5f291c", + "fbfbfb": "844232" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/746.json b/public/images/pokemon/variant/exp/back/746.json new file mode 100644 index 00000000000..5b183b10e5d --- /dev/null +++ b/public/images/pokemon/variant/exp/back/746.json @@ -0,0 +1,40 @@ +{ + "1": { + "101010": "101010", + "1f2161": "16574d", + "5d666d": "75391b", + "616b72": "a67834", + "9c455b": "308c9d", + "374793": "2c9572", + "4764c9": "5ce09d", + "3e9cbb": "27133f", + "61c8de": "824388", + "8c9c9d": "935926", + "8d9c9d": "c69b3f", + "d88394": "65cfe2", + "b0c5c6": "d5ab51", + "ccd2ce": "b77736", + "d8d9da": "d8d9da", + "eeeeee": "f7d76b", + "fefefe": "fefefe" + }, + "2": { + "101010": "101010", + "1f2161": "b7904d", + "5d666d": "1e0726", + "616b72": "4a1111", + "9c455b": "b9682d", + "374793": "dec284", + "4764c9": "f8ecc5", + "3e9cbb": "4378eb", + "61c8de": "5787f1", + "8c9c9d": "350b19", + "8d9c9d": "531917", + "d88394": "e4d85f", + "b0c5c6": "5f291c", + "ccd2ce": "4a1111", + "d8d9da": "d8d9da", + "eeeeee": "844232", + "fefefe": "fefefe" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/780.json b/public/images/pokemon/variant/exp/back/780.json new file mode 100644 index 00000000000..f55158dcabb --- /dev/null +++ b/public/images/pokemon/variant/exp/back/780.json @@ -0,0 +1,28 @@ +{ + "1": { + "8d541b": "bd8955", + "297b8b": "1a316b", + "5aa4a4": "284c80", + "f5ae07": "faf0b1", + "606f55": "496375", + "726d5c": "a36026", + "105262": "0e194a", + "b8b7a3": "cf8d38", + "b4cda4": "9ab5b8", + "91a37c": "7798a1", + "eeeeee": "e6c15e" + }, + "2": { + "8d541b": "157d36", + "297b8b": "4e4f73", + "5aa4a4": "6a708a", + "f5ae07": "3ec435", + "606f55": "8f825d", + "726d5c": "162d3d", + "105262": "3f3c61", + "b8b7a3": "254e59", + "b4cda4": "d6dbba", + "91a37c": "b5b48b", + "eeeeee": "3e7a76" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/840.json b/public/images/pokemon/variant/exp/back/840.json new file mode 100644 index 00000000000..c60e9aaa3a7 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/840.json @@ -0,0 +1,28 @@ +{ + "1": { + "e2244a": "4e77a2", + "5fab1d": "7a7c9e", + "d39a52": "c55885", + "e32b50": "70a2c5", + "fe455c": "abd7e2", + "fa6f8b": "c1f3f3", + "a4d84a": "9aa0b3", + "357912": "313846", + "d3ee77": "c0cbd6", + "8d4229": "9c2e72", + "a50534": "3e6085" + }, + "2": { + "e2244a": "bfb5ab", + "5fab1d": "7a7c9e", + "d39a52": "463731", + "e32b50": "807770", + "fe455c": "dcd9d1", + "fa6f8b": "eeedea", + "a4d84a": "9aa0b3", + "357912": "313846", + "d3ee77": "afc6d2", + "8d4229": "291411", + "a50534": "68645f" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/841.json b/public/images/pokemon/variant/exp/back/841.json new file mode 100644 index 00000000000..11e45f3fc34 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/841.json @@ -0,0 +1,34 @@ +{ + "1": { + "df6655": "c1f3f3", + "56ab32": "a59ab3", + "9b2629": "70a2c5", + "d9695a": "c55885", + "ebe381": "854774", + "ccb468": "5d2654", + "8d764b": "110723", + "ccca71": "b3b1d6", + "612324": "3e6085", + "488235": "8e7a9e", + "c3a965": "e6dcf9", + "b5915b": "34123a", + "d72d31": "abd7e2", + "395a2e": "383146" + }, + "2": { + "df6655": "eeedea", + "56ab32": "e28c95", + "9b2629": "bfb5ab", + "d9695a": "463731", + "ebe381": "854774", + "ccb468": "5d2654", + "8d764b": "110723", + "ccca71": "e2dcd6", + "612324": "68645f", + "488235": "a8546e", + "c3a965": "cbb4af", + "b5915b": "34123a", + "d72d31": "dcd9d1", + "395a2e": "4f0e30" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/842.json b/public/images/pokemon/variant/exp/back/842.json new file mode 100644 index 00000000000..926d558357b --- /dev/null +++ b/public/images/pokemon/variant/exp/back/842.json @@ -0,0 +1,38 @@ +{ + "1": { + "ac6b20": "101010", + "1f4329": "313846", + "9f7034": "110723", + "cfb07a": "a3b9d0", + "fcff86": "397880", + "7de755": "d66f9a", + "244d1f": "852560", + "fed26e": "698db4", + "39a45f": "9aa0b3", + "ffa63b": "2d3d68", + "e78422": "1f1946", + "e75574": "abd7e2", + "af2348": "70a2c5", + "621522": "3e6085", + "ffc575": "2b526f", + "2c743e": "7a7c9e" + }, + "2": { + "ac6b20": "101010", + "1f4329": "341c1c", + "9f7034": "2e0e09", + "cfb07a": "cbb4af", + "fcff86": "eee0bc", + "7de755": "589df3", + "244d1f": "2e2246", + "fed26e": "b9937a", + "39a45f": "e28c95", + "ffa63b": "63473b", + "e78422": "4b211b", + "e75574": "dcd9d1", + "af2348": "bfb5ab", + "621522": "68645f", + "ffc575": "d1a87e", + "2c743e": "a8546e" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/871.json b/public/images/pokemon/variant/exp/back/871.json new file mode 100644 index 00000000000..5004d3013b5 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/871.json @@ -0,0 +1,32 @@ +{ + "1": { + "101010": "101010", + "2e2732": "1b3334", + "281f2e": "2a2732", + "46384c": "504540", + "493d4e": "3a5d57", + "665272": "62857c", + "544947": "7d320e", + "7a7270": "a8501b", + "9e9a96": "cd7930", + "7b4e1c": "5b0d3f", + "d58815": "a02c58", + "fdba2f": "c45858", + "fdf22f": "f1e8e8" + }, + "2": { + "101010": "101010", + "2e2732": "8b4738", + "281f2e": "212232", + "46384c": "504740", + "493d4e": "ce8a66", + "665272": "eac69b", + "544947": "1a1730", + "7a7270": "27223b", + "9e9a96": "3a3449", + "7b4e1c": "222c58", + "d58815": "343f7f", + "fdba2f": "67729f", + "fdf22f": "8e9fc9" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/female/207.json b/public/images/pokemon/variant/female/207.json index b0ae8e84102..b1e3582ae5c 100644 --- a/public/images/pokemon/variant/female/207.json +++ b/public/images/pokemon/variant/female/207.json @@ -1,32 +1,26 @@ { "1": { - "63314a": "7f4812", - "e6a5ce": "f8dd84", - "101010": "101010", - "ad6394": "b67322", - "de84b5": "daa93f", - "4a5a73": "4a5a73", - "ffffff": "ffffff", - "adbdc5": "adbdc5", - "bd6b5a": "bd6b5a", + "de84b5": "e3784d", + "e6a5ce": "f7a565", + "63314a": "2b8199", "4a73bd": "3b426f", - "ffa584": "ffa584", "294a7b": "1f2142", - "6b9cef": "596596" + "ad6394": "ba4732", + "612f48": "802019", + "6b9cef": "596596", + "ffa584": "68edca", + "bd6b5a": "44c5c9" }, "2": { - "63314a": "5f1723", - "e6a5ce": "ef6b58", - "101010": "101010", - "ad6394": "97343c", - "de84b5": "c04144", - "4a5a73": "4a5a73", - "ffffff": "ffffff", - "adbdc5": "adbdc5", - "bd6b5a": "c86539", - "4a73bd": "42bca0", + "de84b5": "42bca0", + "e6a5ce": "70e0b7", + "63314a": "752d17", + "4a73bd": "de597e", + "294a7b": "8a2b54", + "ad6394": "27868a", + "612f48": "134e5e", + "6b9cef": "f78f96", "ffa584": "f0a452", - "294a7b": "33817e", - "6b9cef": "81e4b3" + "bd6b5a": "c86539" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/female/332.json b/public/images/pokemon/variant/female/332.json new file mode 100644 index 00000000000..c86429d13c4 --- /dev/null +++ b/public/images/pokemon/variant/female/332.json @@ -0,0 +1,34 @@ +{ + "1": { + "319452": "780d4a", + "4a7310": "982443", + "7ba563": "b44040", + "bdef84": "ec8c8c", + "8cbd63": "bf3d64", + "215200": "710f2e", + "a5d674": "e16363", + "196b21": "7d1157", + "f7ce00": "5bcfc3", + "525252": "20668c", + "63b56b": "9e2056", + "a5d673": "de5b6f", + "8c6b3a": "33a3b0", + "4aa552": "8a1652" + }, + "2": { + "319452": "b59c72", + "4a7310": "4f3956", + "7ba563": "805a9c", + "bdef84": "c193cf", + "8cbd63": "f6f7df", + "215200": "694d37", + "a5d674": "a473ba", + "196b21": "9c805f", + "f7ce00": "f2aab6", + "525252": "983364", + "63b56b": "e3ddb8", + "a5d673": "ebe9ca", + "8c6b3a": "df879f", + "4aa552": "c9b991" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/female/396.json b/public/images/pokemon/variant/female/396.json new file mode 100644 index 00000000000..f811a4e002d --- /dev/null +++ b/public/images/pokemon/variant/female/396.json @@ -0,0 +1,38 @@ +{ + "1": { + "d6dede": "e3d09d", + "736363": "89ad57", + "3f1e27": "965318", + "d67300": "edb651", + "b5b5b5": "d1a562", + "9c4a21": "db963b", + "ff9429": "ffcf5e", + "3a2129": "2a4f19", + "524a4a": "558033", + "4f4747": "dbb070", + "fcfcfc": "f0ebc5", + "ff0000": "5da848", + "4a4343": "731e22", + "ad9c9c": "ed7b61", + "756565": "144a40", + "8c7373": "b53f36" + }, + "2": { + "d6dede": "f0deaa", + "736363": "4da8a1", + "3f1e27": "451915", + "d67300": "63362b", + "b5b5b5": "debd8c", + "9c4a21": "52281f", + "ff9429": "8c604c", + "3a2129": "235a6b", + "524a4a": "307b82", + "4f4747": "e3c896", + "fcfcfc": "fcfad2", + "ff0000": "c4568a", + "4a4343": "0d142e", + "ad9c9c": "2f436b", + "756565": "e0703d", + "8c7373": "1b2745" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/female/397.json b/public/images/pokemon/variant/female/397.json new file mode 100644 index 00000000000..8f266f191c6 --- /dev/null +++ b/public/images/pokemon/variant/female/397.json @@ -0,0 +1,38 @@ +{ + "1": { + "ff9429": "ffcf5e", + "3a3a3a": "558033", + "7b4221": "965318", + "523a4a": "731e22", + "9c848c": "ed7b61", + "5a525a": "739e49", + "735a63": "b53f36", + "f75242": "8bba65", + "b5b5b5": "d9c798", + "bd6300": "db963b", + "9c4242": "528a3e", + "3b303d": "144a40", + "4d464d": "256e54", + "2e222e": "3c5e24", + "3b333b": "753510", + "fcfcfc": "f0ebc5" + }, + "2": { + "ff9429": "8c604c", + "3a3a3a": "307b82", + "7b4221": "52281f", + "523a4a": "0d142e", + "9c848c": "2f436b", + "5a525a": "4da8a1", + "735a63": "1b2745", + "f75242": "f797ad", + "b5b5b5": "f0deaa", + "bd6300": "63362b", + "9c4242": "c4568a", + "3b303d": "e0703d", + "4d464d": "e68e57", + "2e222e": "235a6b", + "3b333b": "421917", + "fcfcfc": "fcfad2" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/female/398.json b/public/images/pokemon/variant/female/398.json new file mode 100644 index 00000000000..d4e72672103 --- /dev/null +++ b/public/images/pokemon/variant/female/398.json @@ -0,0 +1,36 @@ +{ + "1": { + "735a63": "b53f36", + "5c545c": "144a40", + "5a525a": "558033", + "7b6b7b": "89ad57", + "f75242": "156146", + "4f3847": "753510", + "b5b5b5": "d7be89", + "9c4242": "0c403b", + "7b4221": "965318", + "fcfcfc": "e8e3b6", + "3a3a3a": "2a4f19", + "bd6300": "db963b", + "523a4a": "731e22", + "9c848c": "ed7b61", + "ff9429": "ffcf5e" + }, + "2": { + "735a63": "1b2745", + "5c545c": "e0703d", + "5a525a": "307b82", + "7b6b7b": "4da8a1", + "f75242": "f78a4a", + "4f3847": "421917", + "b5b5b5": "f0deaa", + "9c4242": "c94a2a", + "7b4221": "52281f", + "fcfcfc": "fcfad2", + "3a3a3a": "235a6b", + "bd6300": "63362b", + "523a4a": "080d1f", + "9c848c": "293854", + "ff9429": "8c604c" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/female/403.json b/public/images/pokemon/variant/female/403.json new file mode 100644 index 00000000000..4f8bd43540c --- /dev/null +++ b/public/images/pokemon/variant/female/403.json @@ -0,0 +1,26 @@ +{ + "1": { + "b59c5a": "3763b8", + "7badf7": "bf403a", + "943a52": "33190a", + "637bb5": "962a2f", + "4a4a63": "dcb788", + "ffe65a": "4881cc", + "313142": "bd8254", + "e64a52": "3e2711", + "42426b": "63121d", + "736352": "234085" + }, + "2": { + "b59c5a": "36b88a", + "7badf7": "324663", + "943a52": "3a5e80", + "637bb5": "222f4d", + "4a4a63": "bbe5e5", + "ffe65a": "46d382", + "313142": "73bec9", + "e64a52": "4a7c92", + "42426b": "161b36", + "736352": "298e7d" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/female/404.json b/public/images/pokemon/variant/female/404.json new file mode 100644 index 00000000000..1c96dd11832 --- /dev/null +++ b/public/images/pokemon/variant/female/404.json @@ -0,0 +1,28 @@ +{ + "1": { + "736352": "234085", + "4a4a73": "63121d", + "63637b": "f1dbb1", + "b59c5a": "3763b8", + "637bb5": "962a2f", + "4a4a63": "dcb788", + "ffe65a": "4881cc", + "313142": "bd8254", + "943a52": "5a2d0f", + "e64a52": "3e2711", + "7badf7": "bf403a" + }, + "2": { + "736352": "298e7d", + "4a4a73": "161b36", + "63637b": "def4f0", + "b59c5a": "36b88a", + "637bb5": "222f4d", + "4a4a63": "bbe5e5", + "ffe65a": "46d382", + "313142": "73bec9", + "943a52": "3a5e80", + "e64a52": "4a7c92", + "7badf7": "324663" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/female/405.json b/public/images/pokemon/variant/female/405.json new file mode 100644 index 00000000000..c873cceb259 --- /dev/null +++ b/public/images/pokemon/variant/female/405.json @@ -0,0 +1,28 @@ +{ + "1": { + "b59c5a": "3763b8", + "7badf7": "bf403a", + "63637b": "f1dbb1", + "637bb5": "962a2f", + "943a52": "5a2d0f", + "4a4a63": "dcb488", + "ffe65a": "4881cc", + "313142": "bd7e54", + "4a4a73": "63121d", + "e64a52": "3e2711", + "736352": "234085" + }, + "2": { + "b59c5a": "36b88a", + "7badf7": "324663", + "63637b": "def4f0", + "637bb5": "222f4d", + "943a52": "3a5e80", + "4a4a63": "bbe5e5", + "ffe65a": "46d382", + "313142": "73bec9", + "4a4a73": "161b36", + "e64a52": "4a7c92", + "736352": "298e7d" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/female/417.json b/public/images/pokemon/variant/female/417.json new file mode 100644 index 00000000000..42b3180ee3c --- /dev/null +++ b/public/images/pokemon/variant/female/417.json @@ -0,0 +1,36 @@ +{ + "1": { + "101010": "101010", + "3e364e": "734430", + "524941": "732e12", + "5a524a": "642f1a", + "4a425a": "5f2618", + "84523a": "9b314f", + "ef845a": "e26e6e", + "c5a563": "e95d6c", + "ffd663": "f17c7c", + "637b9c": "86452b", + "7bb5e6": "a25f37", + "cec5c5": "e8be64", + "f7f7f7": "faeda9", + "ffffff": "ffffff", + "7b7b84": "8e623c" + }, + "2": { + "101010": "101010", + "3e364e": "203243", + "524941": "2d284c", + "5a524a": "0f203a", + "4a425a": "23704c", + "84523a": "693939", + "ef845a": "e1b8ac", + "c5a563": "8fecf7", + "ffd663": "d0fdff", + "637b9c": "a2dc76", + "7bb5e6": "e4fba1", + "cec5c5": "357577", + "f7f7f7": "5ba297", + "ffffff": "ffffff", + "7b7b84": "1f3f4e" + } +} \ No newline at end of file diff --git a/public/images/pokemon_icons_1v.json b/public/images/pokemon_icons_1v.json index de66db65eb7..f5023b98a4b 100644 --- a/public/images/pokemon_icons_1v.json +++ b/public/images/pokemon_icons_1v.json @@ -13,2287 +13,6287 @@ "filename": "1_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 0, "y": 0, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + } }, { "filename": "1_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 40, "y": 0, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 0, + "w": 40, + "h": 30 + } }, { "filename": "2_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 80, "y": 0, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 0, + "w": 40, + "h": 30 + } }, { "filename": "2_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 120, "y": 0, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 0, + "w": 40, + "h": 30 + } }, { "filename": "3-gigantamax_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 160, "y": 0, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 0, + "w": 40, + "h": 30 + } }, { "filename": "3-gigantamax_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 200, "y": 0, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 0, + "w": 40, + "h": 30 + } }, { "filename": "3-mega_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 240, "y": 0, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 0, + "w": 40, + "h": 30 + } }, { "filename": "3-mega_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 280, "y": 0, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 0, + "w": 40, + "h": 30 + } }, { "filename": "3_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 320, "y": 0, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 0, + "w": 40, + "h": 30 + } }, { "filename": "3_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 360, "y": 0, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 0, + "w": 40, + "h": 30 + } }, { "filename": "4_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 400, "y": 0, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 0, + "w": 40, + "h": 30 + } }, { "filename": "4_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 440, "y": 0, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 0, + "w": 40, + "h": 30 + } }, { "filename": "5_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 480, "y": 0, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 480, + "y": 0, + "w": 40, + "h": 30 + } }, { "filename": "5_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 520, "y": 0, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 520, + "y": 0, + "w": 40, + "h": 30 + } }, { "filename": "6-gigantamax_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 560, "y": 0, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 560, + "y": 0, + "w": 40, + "h": 30 + } }, { "filename": "6-gigantamax_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 0, "y": 30, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 30, + "w": 40, + "h": 30 + } }, { "filename": "6-mega-x_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 40, "y": 30, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 30, + "w": 40, + "h": 30 + } }, { "filename": "6-mega-x_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 80, "y": 30, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 30, + "w": 40, + "h": 30 + } }, { "filename": "6-mega-y_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 120, "y": 30, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 30, + "w": 40, + "h": 30 + } }, { "filename": "6-mega-y_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 160, "y": 30, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 30, + "w": 40, + "h": 30 + } }, { "filename": "6_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 200, "y": 30, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 30, + "w": 40, + "h": 30 + } }, { "filename": "6_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 240, "y": 30, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 30, + "w": 40, + "h": 30 + } }, { "filename": "7_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 280, "y": 30, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 30, + "w": 40, + "h": 30 + } }, { "filename": "7_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 320, "y": 30, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 30, + "w": 40, + "h": 30 + } }, { "filename": "8_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 360, "y": 30, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 30, + "w": 40, + "h": 30 + } }, { "filename": "8_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 400, "y": 30, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 30, + "w": 40, + "h": 30 + } }, { "filename": "9-gigantamax_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 440, "y": 30, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 30, + "w": 40, + "h": 30 + } }, { "filename": "9-gigantamax_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 480, "y": 30, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 480, + "y": 30, + "w": 40, + "h": 30 + } }, { "filename": "9-mega_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 520, "y": 30, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 520, + "y": 30, + "w": 40, + "h": 30 + } }, { "filename": "9-mega_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 560, "y": 30, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 560, + "y": 30, + "w": 40, + "h": 30 + } }, { "filename": "9_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 0, "y": 60, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 60, + "w": 40, + "h": 30 + } }, { "filename": "9_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 40, "y": 60, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 60, + "w": 40, + "h": 30 + } }, { "filename": "19_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 80, "y": 60, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 60, + "w": 40, + "h": 30 + } }, { "filename": "19_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 120, "y": 60, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 60, + "w": 40, + "h": 30 + } }, { "filename": "20_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 160, "y": 60, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 60, + "w": 40, + "h": 30 + } }, { "filename": "20_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 200, "y": 60, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 60, + "w": 40, + "h": 30 + } }, { "filename": "23_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 240, "y": 60, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 60, + "w": 40, + "h": 30 + } }, { "filename": "23_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 280, "y": 60, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 60, + "w": 40, + "h": 30 + } }, { "filename": "24_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 320, "y": 60, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 60, + "w": 40, + "h": 30 + } }, { "filename": "24_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 360, "y": 60, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 60, + "w": 40, + "h": 30 + } }, { "filename": "25-beauty-cosplay_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 400, "y": 60, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 60, + "w": 40, + "h": 30 + } }, { "filename": "25-beauty-cosplay_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 440, "y": 60, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 60, + "w": 40, + "h": 30 + } }, { "filename": "25-cool-cosplay_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 480, "y": 60, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 480, + "y": 60, + "w": 40, + "h": 30 + } }, { "filename": "25-cool-cosplay_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 520, "y": 60, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 520, + "y": 60, + "w": 40, + "h": 30 + } }, { "filename": "25-cosplay_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 560, "y": 60, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 560, + "y": 60, + "w": 40, + "h": 30 + } }, { "filename": "25-cosplay_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 0, "y": 90, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 90, + "w": 40, + "h": 30 + } }, { "filename": "25-cute-cosplay_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 40, "y": 90, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 90, + "w": 40, + "h": 30 + } }, { "filename": "25-cute-cosplay_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 80, "y": 90, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 90, + "w": 40, + "h": 30 + } }, { "filename": "25-gigantamax_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 120, "y": 90, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 90, + "w": 40, + "h": 30 + } }, { "filename": "25-gigantamax_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 160, "y": 90, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 90, + "w": 40, + "h": 30 + } }, { "filename": "25-partner_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 200, "y": 90, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 90, + "w": 40, + "h": 30 + } }, { "filename": "25-partner_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 240, "y": 90, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 90, + "w": 40, + "h": 30 + } }, { "filename": "25-smart-cosplay_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 280, "y": 90, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 90, + "w": 40, + "h": 30 + } }, { "filename": "25-smart-cosplay_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 320, "y": 90, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 90, + "w": 40, + "h": 30 + } }, { "filename": "25-tough-cosplay_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 360, "y": 90, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 90, + "w": 40, + "h": 30 + } }, { "filename": "25-tough-cosplay_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 400, "y": 90, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 90, + "w": 40, + "h": 30 + } }, { "filename": "25_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 440, "y": 90, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 90, + "w": 40, + "h": 30 + } }, { "filename": "25_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 480, "y": 90, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 480, + "y": 90, + "w": 40, + "h": 30 + } }, { "filename": "26_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 520, "y": 90, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 520, + "y": 90, + "w": 40, + "h": 30 + } }, { "filename": "26_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 560, "y": 90, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 560, + "y": 90, + "w": 40, + "h": 30 + } }, { "filename": "29_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 0, "y": 120, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 120, + "w": 40, + "h": 30 + } }, { "filename": "29_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 40, "y": 120, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 120, + "w": 40, + "h": 30 + } }, { "filename": "29_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 80, "y": 120, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 120, + "w": 40, + "h": 30 + } }, { "filename": "30_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 120, "y": 120, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 120, + "w": 40, + "h": 30 + } }, { "filename": "30_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 160, "y": 120, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 120, + "w": 40, + "h": 30 + } }, { "filename": "31_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 200, "y": 120, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 120, + "w": 40, + "h": 30 + } }, { "filename": "31_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 240, "y": 120, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 120, + "w": 40, + "h": 30 + } }, { "filename": "31_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 280, "y": 120, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 120, + "w": 40, + "h": 30 + } + }, + { + "filename": "32_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 120, + "w": 40, + "h": 30 + } + }, + { + "filename": "32_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 120, + "w": 40, + "h": 30 + } + }, + { + "filename": "33_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 120, + "w": 40, + "h": 30 + } + }, + { + "filename": "33_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 120, + "w": 40, + "h": 30 + } + }, + { + "filename": "34_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 480, + "y": 120, + "w": 40, + "h": 30 + } + }, + { + "filename": "34_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 520, + "y": 120, + "w": 40, + "h": 30 + } }, { "filename": "35_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 320, "y": 120, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 560, + "y": 120, + "w": 40, + "h": 30 + } }, { "filename": "35_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 360, "y": 120, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 150, + "w": 40, + "h": 30 + } }, { "filename": "36_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 400, "y": 120, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 150, + "w": 40, + "h": 30 + } }, { "filename": "36_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 440, "y": 120, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 150, + "w": 40, + "h": 30 + } }, { "filename": "37_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 480, "y": 120, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 150, + "w": 40, + "h": 30 + } }, { "filename": "37_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 520, "y": 120, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 150, + "w": 40, + "h": 30 + } }, { "filename": "38_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 560, "y": 120, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 150, + "w": 40, + "h": 30 + } }, { "filename": "38_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 0, "y": 150, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 150, + "w": 40, + "h": 30 + } }, { "filename": "39_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 40, "y": 150, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 150, + "w": 40, + "h": 30 + } }, { "filename": "39_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 80, "y": 150, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 150, + "w": 40, + "h": 30 + } }, { "filename": "40_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 120, "y": 150, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 150, + "w": 40, + "h": 30 + } }, { "filename": "40_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 160, "y": 150, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 150, + "w": 40, + "h": 30 + } }, { "filename": "41_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 200, "y": 150, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 150, + "w": 40, + "h": 30 + } }, { "filename": "41_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 240, "y": 150, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 480, + "y": 150, + "w": 40, + "h": 30 + } }, { "filename": "41_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 280, "y": 150, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 520, + "y": 150, + "w": 40, + "h": 30 + } }, { "filename": "42_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 320, "y": 150, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 560, + "y": 150, + "w": 40, + "h": 30 + } }, { "filename": "42_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 360, "y": 150, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 180, + "w": 40, + "h": 30 + } }, { "filename": "42_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 400, "y": 150, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 180, + "w": 40, + "h": 30 + } }, { "filename": "43_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 440, "y": 150, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 180, + "w": 40, + "h": 30 + } }, { "filename": "43_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 480, "y": 150, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 180, + "w": 40, + "h": 30 + } }, { "filename": "44_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 520, "y": 150, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 180, + "w": 40, + "h": 30 + } }, { "filename": "44_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 560, "y": 150, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 180, + "w": 40, + "h": 30 + } }, { "filename": "45_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 0, "y": 180, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 180, + "w": 40, + "h": 30 + } }, { "filename": "45_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 40, "y": 180, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 180, + "w": 40, + "h": 30 + } }, { "filename": "46_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 80, "y": 180, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 180, + "w": 40, + "h": 30 + } }, { "filename": "46_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 120, "y": 180, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 180, + "w": 40, + "h": 30 + } }, { "filename": "46_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 160, "y": 180, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 180, + "w": 40, + "h": 30 + } }, { "filename": "47_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 200, "y": 180, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 180, + "w": 40, + "h": 30 + } }, { "filename": "47_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 240, "y": 180, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 480, + "y": 180, + "w": 40, + "h": 30 + } }, { "filename": "47_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 280, "y": 180, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 520, + "y": 180, + "w": 40, + "h": 30 + } }, { "filename": "50_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 320, "y": 180, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 560, + "y": 180, + "w": 40, + "h": 30 + } }, { "filename": "50_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 360, "y": 180, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 210, + "w": 40, + "h": 30 + } }, { "filename": "51_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 400, "y": 180, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 210, + "w": 40, + "h": 30 + } }, { "filename": "51_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 440, "y": 180, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 210, + "w": 40, + "h": 30 + } }, { "filename": "52-gigantamax_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 480, "y": 180, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 210, + "w": 40, + "h": 30 + } }, { "filename": "52-gigantamax_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 520, "y": 180, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 210, + "w": 40, + "h": 30 + } }, { "filename": "52-gigantamax_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 560, "y": 180, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 210, + "w": 40, + "h": 30 + } }, { "filename": "52_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 0, "y": 210, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 210, + "w": 40, + "h": 30 + } }, { "filename": "52_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 40, "y": 210, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 210, + "w": 40, + "h": 30 + } }, { "filename": "52_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 80, "y": 210, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 210, + "w": 40, + "h": 30 + } }, { "filename": "53_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 120, "y": 210, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 210, + "w": 40, + "h": 30 + } }, { "filename": "53_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 160, "y": 210, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 210, + "w": 40, + "h": 30 + } }, { "filename": "53_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 200, "y": 210, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 210, + "w": 40, + "h": 30 + } }, { "filename": "56_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 240, "y": 210, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 480, + "y": 210, + "w": 40, + "h": 30 + } }, { "filename": "56_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 280, "y": 210, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 520, + "y": 210, + "w": 40, + "h": 30 + } }, { "filename": "56_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 320, "y": 210, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 560, + "y": 210, + "w": 40, + "h": 30 + } }, { "filename": "57_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 360, "y": 210, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 240, + "w": 40, + "h": 30 + } }, { "filename": "57_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 400, "y": 210, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 240, + "w": 40, + "h": 30 + } }, { "filename": "57_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 440, "y": 210, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 240, + "w": 40, + "h": 30 + } }, { "filename": "69_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 480, "y": 210, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 240, + "w": 40, + "h": 30 + } }, { "filename": "69_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 520, "y": 210, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 240, + "w": 40, + "h": 30 + } }, { "filename": "70_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 560, "y": 210, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 240, + "w": 40, + "h": 30 + } }, { "filename": "70_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 0, "y": 240, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 240, + "w": 40, + "h": 30 + } }, { "filename": "71_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 40, "y": 240, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 240, + "w": 40, + "h": 30 + } }, { "filename": "71_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 80, "y": 240, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 240, + "w": 40, + "h": 30 + } }, { "filename": "77_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 120, "y": 240, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 240, + "w": 40, + "h": 30 + } }, { "filename": "77_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 160, "y": 240, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 240, + "w": 40, + "h": 30 + } }, { "filename": "78_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 200, "y": 240, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 240, + "w": 40, + "h": 30 + } }, { "filename": "78_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 240, "y": 240, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 480, + "y": 240, + "w": 40, + "h": 30 + } }, { "filename": "79_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 280, "y": 240, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 520, + "y": 240, + "w": 40, + "h": 30 + } }, { "filename": "79_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 320, "y": 240, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 560, + "y": 240, + "w": 40, + "h": 30 + } }, { "filename": "79_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 360, "y": 240, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 270, + "w": 40, + "h": 30 + } }, { "filename": "80-mega_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 400, "y": 240, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 270, + "w": 40, + "h": 30 + } }, { "filename": "80-mega_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 440, "y": 240, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 270, + "w": 40, + "h": 30 + } }, { "filename": "80_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 480, "y": 240, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 270, + "w": 40, + "h": 30 + } }, { "filename": "80_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 520, "y": 240, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 270, + "w": 40, + "h": 30 + } }, { "filename": "81_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 560, "y": 240, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 270, + "w": 40, + "h": 30 + } }, { "filename": "81_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 0, "y": 270, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 270, + "w": 40, + "h": 30 + } }, { "filename": "82_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 40, "y": 270, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 270, + "w": 40, + "h": 30 + } }, { "filename": "82_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 80, "y": 270, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 270, + "w": 40, + "h": 30 + } }, { "filename": "83_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 120, "y": 270, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 270, + "w": 40, + "h": 30 + } }, { "filename": "83_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 160, "y": 270, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 270, + "w": 40, + "h": 30 + } }, { "filename": "84-f_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 200, "y": 270, "w": 40, "h": 30} - }, - { - "filename": "84-f_2", - "rotated": false, - "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 240, "y": 270, "w": 40, "h": 30} - }, - { - "filename": "84-f_3", - "rotated": false, - "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 280, "y": 270, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 270, + "w": 40, + "h": 30 + } }, { "filename": "84_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 320, "y": 270, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 270, + "w": 40, + "h": 30 + } + }, + { + "filename": "84-f_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 480, + "y": 270, + "w": 40, + "h": 30 + } + }, + { + "filename": "84-f_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 520, + "y": 270, + "w": 40, + "h": 30 + } }, { "filename": "84_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 360, "y": 270, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 560, + "y": 270, + "w": 40, + "h": 30 + } }, { "filename": "84_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 400, "y": 270, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 300, + "w": 40, + "h": 30 + } }, { "filename": "85-f_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 440, "y": 270, "w": 40, "h": 30} - }, - { - "filename": "85-f_2", - "rotated": false, - "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 480, "y": 270, "w": 40, "h": 30} - }, - { - "filename": "85-f_3", - "rotated": false, - "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 520, "y": 270, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 300, + "w": 40, + "h": 30 + } }, { "filename": "85_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 560, "y": 270, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 300, + "w": 40, + "h": 30 + } + }, + { + "filename": "85-f_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 300, + "w": 40, + "h": 30 + } + }, + { + "filename": "85-f_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 300, + "w": 40, + "h": 30 + } }, { "filename": "85_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 0, "y": 300, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 300, + "w": 40, + "h": 30 + } }, { "filename": "85_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 40, "y": 300, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 300, + "w": 40, + "h": 30 + } }, { "filename": "86_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 80, "y": 300, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 300, + "w": 40, + "h": 30 + } }, { "filename": "86_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 120, "y": 300, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 300, + "w": 40, + "h": 30 + } }, { "filename": "86_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 160, "y": 300, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 300, + "w": 40, + "h": 30 + } }, { "filename": "87_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 200, "y": 300, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 300, + "w": 40, + "h": 30 + } }, { "filename": "87_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 240, "y": 300, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 300, + "w": 40, + "h": 30 + } }, { "filename": "87_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 280, "y": 300, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 300, + "w": 40, + "h": 30 + } + }, + { + "filename": "88_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 480, + "y": 300, + "w": 40, + "h": 30 + } + }, + { + "filename": "88_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 520, + "y": 300, + "w": 40, + "h": 30 + } + }, + { + "filename": "89_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 560, + "y": 300, + "w": 40, + "h": 30 + } + }, + { + "filename": "89_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 330, + "w": 40, + "h": 30 + } }, { "filename": "92_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 320, "y": 300, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 330, + "w": 40, + "h": 30 + } }, { "filename": "92_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 360, "y": 300, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 330, + "w": 40, + "h": 30 + } }, { "filename": "92_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 400, "y": 300, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 330, + "w": 40, + "h": 30 + } }, { "filename": "93_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 440, "y": 300, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 330, + "w": 40, + "h": 30 + } }, { "filename": "93_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 480, "y": 300, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 330, + "w": 40, + "h": 30 + } }, { "filename": "93_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 520, "y": 300, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 330, + "w": 40, + "h": 30 + } }, { "filename": "94-gigantamax_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 560, "y": 300, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 330, + "w": 40, + "h": 30 + } }, { "filename": "94-gigantamax_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 0, "y": 330, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 330, + "w": 40, + "h": 30 + } }, { "filename": "94-gigantamax_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 40, "y": 330, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 330, + "w": 40, + "h": 30 + } }, { "filename": "94-mega_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 80, "y": 330, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 330, + "w": 40, + "h": 30 + } }, { "filename": "94-mega_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 120, "y": 330, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 330, + "w": 40, + "h": 30 + } }, { "filename": "94-mega_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 160, "y": 330, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 480, + "y": 330, + "w": 40, + "h": 30 + } }, { "filename": "94_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 200, "y": 330, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 520, + "y": 330, + "w": 40, + "h": 30 + } }, { "filename": "94_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 240, "y": 330, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 560, + "y": 330, + "w": 40, + "h": 30 + } }, { "filename": "94_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 280, "y": 330, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 360, + "w": 40, + "h": 30 + } }, { "filename": "98_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 320, "y": 330, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 360, + "w": 40, + "h": 30 + } }, { "filename": "98_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 360, "y": 330, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 360, + "w": 40, + "h": 30 + } }, { "filename": "99-gigantamax_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 400, "y": 330, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 360, + "w": 40, + "h": 30 + } }, { "filename": "99-gigantamax_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 440, "y": 330, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 360, + "w": 40, + "h": 30 + } }, { "filename": "99_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 480, "y": 330, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 360, + "w": 40, + "h": 30 + } }, { "filename": "99_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 520, "y": 330, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 360, + "w": 40, + "h": 30 + } }, { "filename": "100_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 560, "y": 330, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 360, + "w": 40, + "h": 30 + } }, { "filename": "100_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 0, "y": 360, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 360, + "w": 40, + "h": 30 + } }, { "filename": "101_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 40, "y": 360, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 360, + "w": 40, + "h": 30 + } }, { "filename": "101_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 80, "y": 360, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 360, + "w": 40, + "h": 30 + } }, { "filename": "102_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 120, "y": 360, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 360, + "w": 40, + "h": 30 + } }, { "filename": "102_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 160, "y": 360, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 480, + "y": 360, + "w": 40, + "h": 30 + } }, { "filename": "103_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 200, "y": 360, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 520, + "y": 360, + "w": 40, + "h": 30 + } }, { "filename": "103_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 240, "y": 360, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 560, + "y": 360, + "w": 40, + "h": 30 + } }, { "filename": "111_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 280, "y": 360, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 390, + "w": 40, + "h": 30 + } }, { "filename": "111_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 320, "y": 360, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 390, + "w": 40, + "h": 30 + } }, { "filename": "112_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 360, "y": 360, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 390, + "w": 40, + "h": 30 + } }, { "filename": "112_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 400, "y": 360, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 390, + "w": 40, + "h": 30 + } }, { "filename": "113_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 440, "y": 360, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 390, + "w": 40, + "h": 30 + } }, { "filename": "113_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 480, "y": 360, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 390, + "w": 40, + "h": 30 + } }, { "filename": "113_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 520, "y": 360, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 390, + "w": 40, + "h": 30 + } }, { "filename": "114_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 560, "y": 360, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 390, + "w": 40, + "h": 30 + } }, { "filename": "114_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 0, "y": 390, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 390, + "w": 40, + "h": 30 + } }, { "filename": "116_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 40, "y": 390, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 390, + "w": 40, + "h": 30 + } }, { "filename": "116_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 80, "y": 390, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 390, + "w": 40, + "h": 30 + } }, { "filename": "117_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 120, "y": 390, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 390, + "w": 40, + "h": 30 + } }, { "filename": "117_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 160, "y": 390, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 480, + "y": 390, + "w": 40, + "h": 30 + } }, { "filename": "118_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 200, "y": 390, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 520, + "y": 390, + "w": 40, + "h": 30 + } }, { "filename": "118_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 240, "y": 390, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 560, + "y": 390, + "w": 40, + "h": 30 + } }, { "filename": "118_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 280, "y": 390, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 420, + "w": 40, + "h": 30 + } }, { "filename": "119_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 320, "y": 390, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 420, + "w": 40, + "h": 30 + } }, { "filename": "119_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 360, "y": 390, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 420, + "w": 40, + "h": 30 + } }, { "filename": "119_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 400, "y": 390, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 420, + "w": 40, + "h": 30 + } }, { "filename": "120_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 440, "y": 390, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 420, + "w": 40, + "h": 30 + } }, { "filename": "120_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 480, "y": 390, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 420, + "w": 40, + "h": 30 + } }, { "filename": "121_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 520, "y": 390, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 420, + "w": 40, + "h": 30 + } }, { "filename": "121_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 560, "y": 390, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 420, + "w": 40, + "h": 30 + } }, { "filename": "123_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 0, "y": 420, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 420, + "w": 40, + "h": 30 + } }, { "filename": "123_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 40, "y": 420, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 420, + "w": 40, + "h": 30 + } }, { "filename": "123_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 80, "y": 420, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 420, + "w": 40, + "h": 30 + } }, { "filename": "125_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 120, "y": 420, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 420, + "w": 40, + "h": 30 + } }, { "filename": "125_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 160, "y": 420, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 480, + "y": 420, + "w": 40, + "h": 30 + } }, { "filename": "125_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 200, "y": 420, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 520, + "y": 420, + "w": 40, + "h": 30 + } }, { "filename": "126_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 240, "y": 420, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 560, + "y": 420, + "w": 40, + "h": 30 + } }, { "filename": "126_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 280, "y": 420, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 450, + "w": 40, + "h": 30 + } }, { "filename": "127-mega_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 320, "y": 420, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 450, + "w": 40, + "h": 30 + } }, { "filename": "127-mega_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 360, "y": 420, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 450, + "w": 40, + "h": 30 + } }, { "filename": "127_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 400, "y": 420, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 450, + "w": 40, + "h": 30 + } }, { "filename": "127_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 440, "y": 420, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 450, + "w": 40, + "h": 30 + } }, { "filename": "128_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 480, "y": 420, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 450, + "w": 40, + "h": 30 + } }, { "filename": "128_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 520, "y": 420, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 450, + "w": 40, + "h": 30 + } }, { "filename": "129_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 560, "y": 420, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 450, + "w": 40, + "h": 30 + } }, { "filename": "129_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 0, "y": 450, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 450, + "w": 40, + "h": 30 + } }, { "filename": "130-mega_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 40, "y": 450, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 450, + "w": 40, + "h": 30 + } }, { "filename": "130-mega_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 80, "y": 450, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 450, + "w": 40, + "h": 30 + } }, { "filename": "130_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 120, "y": 450, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 450, + "w": 40, + "h": 30 + } }, { "filename": "130_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 160, "y": 450, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 480, + "y": 450, + "w": 40, + "h": 30 + } }, { "filename": "131-gigantamax_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 200, "y": 450, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 520, + "y": 450, + "w": 40, + "h": 30 + } }, { "filename": "131-gigantamax_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 240, "y": 450, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 560, + "y": 450, + "w": 40, + "h": 30 + } }, { "filename": "131_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 280, "y": 450, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 480, + "w": 40, + "h": 30 + } }, { "filename": "131_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 320, "y": 450, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 480, + "w": 40, + "h": 30 + } }, { "filename": "132_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 360, "y": 450, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 480, + "w": 40, + "h": 30 + } }, { "filename": "132_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 400, "y": 450, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 480, + "w": 40, + "h": 30 + } }, { "filename": "133-partner_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 440, "y": 450, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 480, + "w": 40, + "h": 30 + } }, { "filename": "133-partner_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 480, "y": 450, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 480, + "w": 40, + "h": 30 + } }, { "filename": "133_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 520, "y": 450, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 480, + "w": 40, + "h": 30 + } }, { "filename": "133_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 560, "y": 450, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 480, + "w": 40, + "h": 30 + } }, { "filename": "134_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 0, "y": 480, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 480, + "w": 40, + "h": 30 + } }, { "filename": "134_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 40, "y": 480, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 480, + "w": 40, + "h": 30 + } }, { "filename": "135_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 80, "y": 480, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 480, + "w": 40, + "h": 30 + } }, { "filename": "135_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 120, "y": 480, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 480, + "w": 40, + "h": 30 + } }, { "filename": "135_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 160, "y": 480, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 480, + "y": 480, + "w": 40, + "h": 30 + } }, { "filename": "136_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 200, "y": 480, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 520, + "y": 480, + "w": 40, + "h": 30 + } }, { "filename": "136_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 240, "y": 480, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 560, + "y": 480, + "w": 40, + "h": 30 + } }, { "filename": "136_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 280, "y": 480, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 510, + "w": 40, + "h": 30 + } }, { "filename": "137_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 320, "y": 480, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 510, + "w": 40, + "h": 30 + } }, { "filename": "137_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 360, "y": 480, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 510, + "w": 40, + "h": 30 + } }, { "filename": "138_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 400, "y": 480, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 510, + "w": 40, + "h": 30 + } }, { "filename": "138_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 440, "y": 480, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 510, + "w": 40, + "h": 30 + } }, { "filename": "139_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 480, "y": 480, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 510, + "w": 40, + "h": 30 + } }, { "filename": "139_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 520, "y": 480, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 510, + "w": 40, + "h": 30 + } }, { "filename": "140_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 560, "y": 480, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 510, + "w": 40, + "h": 30 + } }, { "filename": "140_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 0, "y": 510, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 510, + "w": 40, + "h": 30 + } }, { "filename": "141_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 40, "y": 510, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 510, + "w": 40, + "h": 30 + } }, { "filename": "141_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 80, "y": 510, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 510, + "w": 40, + "h": 30 + } }, { "filename": "142-mega_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 120, "y": 510, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 510, + "w": 40, + "h": 30 + } }, { "filename": "142-mega_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 160, "y": 510, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 480, + "y": 510, + "w": 40, + "h": 30 + } }, { "filename": "142_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 200, "y": 510, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 520, + "y": 510, + "w": 40, + "h": 30 + } }, { "filename": "142_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 240, "y": 510, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 560, + "y": 510, + "w": 40, + "h": 30 + } + }, + { + "filename": "143-gigantamax_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 540, + "w": 40, + "h": 30 + } + }, + { + "filename": "143-gigantamax_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 540, + "w": 40, + "h": 30 + } + }, + { + "filename": "143_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 540, + "w": 40, + "h": 30 + } + }, + { + "filename": "143_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 540, + "w": 40, + "h": 30 + } }, { "filename": "144_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 280, "y": 510, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 540, + "w": 40, + "h": 30 + } }, { "filename": "144_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 320, "y": 510, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 540, + "w": 40, + "h": 30 + } }, { "filename": "144_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 360, "y": 510, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 540, + "w": 40, + "h": 30 + } }, { "filename": "145_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 400, "y": 510, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 540, + "w": 40, + "h": 30 + } }, { "filename": "145_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 440, "y": 510, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 540, + "w": 40, + "h": 30 + } }, { "filename": "145_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 480, "y": 510, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 540, + "w": 40, + "h": 30 + } }, { "filename": "146_1", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 520, "y": 510, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 540, + "w": 40, + "h": 30 + } }, { "filename": "146_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 560, "y": 510, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 540, + "w": 40, + "h": 30 + } }, { "filename": "146_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 0, "y": 540, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 480, + "y": 540, + "w": 40, + "h": 30 + } }, { "filename": "147_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 40, "y": 540, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 520, + "y": 540, + "w": 40, + "h": 30 + } }, { "filename": "147_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 80, "y": 540, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 560, + "y": 540, + "w": 40, + "h": 30 + } }, { "filename": "148_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 120, "y": 540, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 570, + "w": 40, + "h": 30 + } }, { "filename": "148_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 160, "y": 540, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 570, + "w": 40, + "h": 30 + } }, { "filename": "149_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 200, "y": 540, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 570, + "w": 40, + "h": 30 + } }, { "filename": "149_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 240, "y": 540, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 570, + "w": 40, + "h": 30 + } }, { "filename": "150-mega-x_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 280, "y": 540, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 570, + "w": 40, + "h": 30 + } }, { "filename": "150-mega-x_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 320, "y": 540, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 570, + "w": 40, + "h": 30 + } }, { "filename": "150-mega-y_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 360, "y": 540, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 570, + "w": 40, + "h": 30 + } }, { "filename": "150-mega-y_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 400, "y": 540, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 570, + "w": 40, + "h": 30 + } }, { "filename": "150_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 440, "y": 540, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 570, + "w": 40, + "h": 30 + } }, { "filename": "150_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 480, "y": 540, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 570, + "w": 40, + "h": 30 + } }, { "filename": "151_2", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 520, "y": 540, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 570, + "w": 40, + "h": 30 + } }, { "filename": "151_3", "rotated": false, "trimmed": false, - "sourceSize": {"w": 40, "h": 30}, - "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, - "frame": {"x": 560, "y": 540, "w": 40, "h": 30} + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 570, + "w": 40, + "h": 30 + } } ] } ], "meta": { - "app": "texturepacker", - "version": "3.0" + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:3447489444000034526be9543e0a03fb:c9244ec22fd9b63bdc7e97bf457f1266:2fc2d7db306a93e9369e20846ccef45c$" } } diff --git a/public/images/pokemon_icons_1v.png b/public/images/pokemon_icons_1v.png index d6b1bc0cf7e2e4122c62151cdc92d31b1ff9f1a1..025c1ab025abca56312d51a6ae723702dbba126b 100644 GIT binary patch literal 61514 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 T$AjEhm_tQDQywV?3;q89PPn4n literal 58708 zcmYhicQjnz_dc#fFCl958ev8R5kwcgCd$lUFhmz(i0IKJO4R5?qBCQR(MGSMm*}E* z(L=PTKdquY_jRy2*9hr z=Ky6<9tl6y+&@7@9Bew#PoLdh?i=}*e)FA>7Z+7ig>Z%&%Bw5lRwsK@qLTp^rtJX(@Sp?XfV~?8^=Ru4MbZ z-}A%6a}Oyc2jP$I{B(A9uGQ5`Fc9zJw?`DZ>%0Z$5NZsKDo8e&D zGM~2oVf&lMu646d(h3VxjI@>h)t5Hyp0crqA@#Y>!l)Ifge2dkI~oTZHbveZ)@rJ% z+M9f9kL^FbyyAHNdZMmSGCJ@X;Bi)k^7Y^ADC72sx52_(0`B~(?oZ+*LcegUz3Y#y zg$U{*a6|Iy>eqjE3$)!~-MO()M-797$UtX%0A$d``xyX!WL5ODaWgKhBEr?ozpZ&{ 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 diff --git a/public/images/pokemon_icons_2v.json b/public/images/pokemon_icons_2v.json index 23eec483b42..519ea6c62f2 100644 --- a/public/images/pokemon_icons_2v.json +++ b/public/images/pokemon_icons_2v.json @@ -4,8 +4,8 @@ "image": "pokemon_icons_2v.png", "format": "RGBA8888", "size": { - "w": 520, - "h": 520 + "w": 540, + "h": 540 }, "scale": 1, "frames": [ @@ -1417,7 +1417,7 @@ } }, { - "filename": "190_2", + "filename": "187_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -1437,6 +1437,132 @@ "h": 30 } }, + { + "filename": "187_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 150, + "w": 40, + "h": 30 + } + }, + { + "filename": "188_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 150, + "w": 40, + "h": 30 + } + }, + { + "filename": "188_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 150, + "w": 40, + "h": 30 + } + }, + { + "filename": "189_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 150, + "w": 40, + "h": 30 + } + }, + { + "filename": "189_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 150, + "w": 40, + "h": 30 + } + }, + { + "filename": "190_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 150, + "w": 40, + "h": 30 + } + }, { "filename": "190_3", "rotated": false, @@ -1452,7 +1578,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 360, "y": 150, "w": 40, "h": 30 @@ -1473,7 +1599,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 400, "y": 150, "w": 40, "h": 30 @@ -1494,7 +1620,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 440, "y": 150, "w": 40, "h": 30 @@ -1515,7 +1641,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 480, "y": 150, "w": 40, "h": 30 @@ -1536,8 +1662,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 150, + "x": 0, + "y": 180, "w": 40, "h": 30 } @@ -1557,8 +1683,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 150, + "x": 40, + "y": 180, "w": 40, "h": 30 } @@ -1578,8 +1704,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 150, + "x": 80, + "y": 180, "w": 40, "h": 30 } @@ -1599,8 +1725,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 150, + "x": 120, + "y": 180, "w": 40, "h": 30 } @@ -1620,8 +1746,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 150, + "x": 160, + "y": 180, "w": 40, "h": 30 } @@ -1641,8 +1767,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 150, + "x": 200, + "y": 180, "w": 40, "h": 30 } @@ -1662,7 +1788,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 240, "y": 180, "w": 40, "h": 30 @@ -1683,7 +1809,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 280, "y": 180, "w": 40, "h": 30 @@ -1704,7 +1830,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 320, "y": 180, "w": 40, "h": 30 @@ -1725,7 +1851,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 320, "y": 180, "w": 40, "h": 30 @@ -1746,7 +1872,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 360, "y": 180, "w": 40, "h": 30 @@ -1767,7 +1893,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 360, "y": 180, "w": 40, "h": 30 @@ -1788,7 +1914,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 400, "y": 180, "w": 40, "h": 30 @@ -1809,7 +1935,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 440, "y": 180, "w": 40, "h": 30 @@ -1830,7 +1956,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 480, "y": 180, "w": 40, "h": 30 @@ -1851,8 +1977,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 180, + "x": 0, + "y": 210, "w": 40, "h": 30 } @@ -1872,8 +1998,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 180, + "x": 40, + "y": 210, "w": 40, "h": 30 } @@ -1893,8 +2019,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 180, + "x": 80, + "y": 210, "w": 40, "h": 30 } @@ -1914,8 +2040,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 180, + "x": 120, + "y": 210, "w": 40, "h": 30 } @@ -1935,8 +2061,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 180, + "x": 160, + "y": 210, "w": 40, "h": 30 } @@ -1956,8 +2082,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 180, + "x": 200, + "y": 210, "w": 40, "h": 30 } @@ -1977,7 +2103,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 240, "y": 210, "w": 40, "h": 30 @@ -1998,7 +2124,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 280, "y": 210, "w": 40, "h": 30 @@ -2019,7 +2145,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 320, "y": 210, "w": 40, "h": 30 @@ -2040,7 +2166,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 360, "y": 210, "w": 40, "h": 30 @@ -2061,7 +2187,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 400, "y": 210, "w": 40, "h": 30 @@ -2082,7 +2208,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 440, "y": 210, "w": 40, "h": 30 @@ -2103,7 +2229,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 480, "y": 210, "w": 40, "h": 30 @@ -2124,8 +2250,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 210, + "x": 0, + "y": 240, "w": 40, "h": 30 } @@ -2145,8 +2271,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 210, + "x": 40, + "y": 240, "w": 40, "h": 30 } @@ -2166,8 +2292,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 210, + "x": 80, + "y": 240, "w": 40, "h": 30 } @@ -2187,8 +2313,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 210, + "x": 120, + "y": 240, "w": 40, "h": 30 } @@ -2208,8 +2334,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 210, + "x": 160, + "y": 240, "w": 40, "h": 30 } @@ -2229,8 +2355,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 210, + "x": 200, + "y": 240, "w": 40, "h": 30 } @@ -2250,7 +2376,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 240, "y": 240, "w": 40, "h": 30 @@ -2271,7 +2397,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 280, "y": 240, "w": 40, "h": 30 @@ -2292,7 +2418,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 320, "y": 240, "w": 40, "h": 30 @@ -2313,7 +2439,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 360, "y": 240, "w": 40, "h": 30 @@ -2334,7 +2460,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 400, "y": 240, "w": 40, "h": 30 @@ -2355,7 +2481,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 440, "y": 240, "w": 40, "h": 30 @@ -2376,7 +2502,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 480, "y": 240, "w": 40, "h": 30 @@ -2397,8 +2523,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 240, + "x": 0, + "y": 270, "w": 40, "h": 30 } @@ -2418,8 +2544,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 240, + "x": 40, + "y": 270, "w": 40, "h": 30 } @@ -2439,8 +2565,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 240, + "x": 80, + "y": 270, "w": 40, "h": 30 } @@ -2460,8 +2586,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 240, + "x": 120, + "y": 270, "w": 40, "h": 30 } @@ -2481,8 +2607,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 240, + "x": 160, + "y": 270, "w": 40, "h": 30 } @@ -2502,8 +2628,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 240, + "x": 200, + "y": 270, "w": 40, "h": 30 } @@ -2523,7 +2649,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 240, "y": 270, "w": 40, "h": 30 @@ -2544,7 +2670,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 280, "y": 270, "w": 40, "h": 30 @@ -2565,7 +2691,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 320, "y": 270, "w": 40, "h": 30 @@ -2586,7 +2712,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 360, "y": 270, "w": 40, "h": 30 @@ -2607,7 +2733,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 400, "y": 270, "w": 40, "h": 30 @@ -2628,7 +2754,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 440, "y": 270, "w": 40, "h": 30 @@ -2649,7 +2775,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 480, "y": 270, "w": 40, "h": 30 @@ -2670,8 +2796,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 270, + "x": 0, + "y": 300, "w": 40, "h": 30 } @@ -2691,8 +2817,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 270, + "x": 40, + "y": 300, "w": 40, "h": 30 } @@ -2712,8 +2838,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 270, + "x": 80, + "y": 300, "w": 40, "h": 30 } @@ -2733,8 +2859,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 270, + "x": 120, + "y": 300, "w": 40, "h": 30 } @@ -2754,8 +2880,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 270, + "x": 160, + "y": 300, "w": 40, "h": 30 } @@ -2775,8 +2901,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 270, + "x": 200, + "y": 300, "w": 40, "h": 30 } @@ -2796,7 +2922,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 240, "y": 300, "w": 40, "h": 30 @@ -2817,7 +2943,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 280, "y": 300, "w": 40, "h": 30 @@ -2838,7 +2964,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 320, "y": 300, "w": 40, "h": 30 @@ -2859,7 +2985,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 360, "y": 300, "w": 40, "h": 30 @@ -2880,7 +3006,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 400, "y": 300, "w": 40, "h": 30 @@ -2901,7 +3027,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 440, "y": 300, "w": 40, "h": 30 @@ -2922,7 +3048,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 480, "y": 300, "w": 40, "h": 30 @@ -2943,8 +3069,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 300, + "x": 0, + "y": 330, "w": 40, "h": 30 } @@ -2964,8 +3090,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 300, + "x": 40, + "y": 330, "w": 40, "h": 30 } @@ -2985,8 +3111,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 300, + "x": 80, + "y": 330, "w": 40, "h": 30 } @@ -3006,8 +3132,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 300, + "x": 120, + "y": 330, "w": 40, "h": 30 } @@ -3027,8 +3153,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 300, + "x": 160, + "y": 330, "w": 40, "h": 30 } @@ -3048,8 +3174,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 300, + "x": 200, + "y": 330, "w": 40, "h": 30 } @@ -3069,7 +3195,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 240, "y": 330, "w": 40, "h": 30 @@ -3090,7 +3216,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 280, "y": 330, "w": 40, "h": 30 @@ -3111,7 +3237,91 @@ "h": 30 }, "frame": { - "x": 80, + "x": 320, + "y": 330, + "w": 40, + "h": 30 + } + }, + { + "filename": "204_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 330, + "w": 40, + "h": 30 + } + }, + { + "filename": "204_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 330, + "w": 40, + "h": 30 + } + }, + { + "filename": "205_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 330, + "w": 40, + "h": 30 + } + }, + { + "filename": "205_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 480, "y": 330, "w": 40, "h": 30 @@ -3132,8 +3342,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 330, + "x": 0, + "y": 360, "w": 40, "h": 30 } @@ -3153,8 +3363,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 330, + "x": 40, + "y": 360, "w": 40, "h": 30 } @@ -3174,8 +3384,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 330, + "x": 80, + "y": 360, "w": 40, "h": 30 } @@ -3195,8 +3405,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 330, + "x": 120, + "y": 360, "w": 40, "h": 30 } @@ -3216,8 +3426,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 330, + "x": 160, + "y": 360, "w": 40, "h": 30 } @@ -3237,8 +3447,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 330, + "x": 200, + "y": 360, "w": 40, "h": 30 } @@ -3258,8 +3468,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 330, + "x": 240, + "y": 360, "w": 40, "h": 30 } @@ -3279,8 +3489,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 330, + "x": 280, + "y": 360, "w": 40, "h": 30 } @@ -3300,8 +3510,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 330, + "x": 320, + "y": 360, "w": 40, "h": 30 } @@ -3321,8 +3531,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 330, + "x": 360, + "y": 360, "w": 40, "h": 30 } @@ -3342,7 +3552,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 400, "y": 360, "w": 40, "h": 30 @@ -3363,7 +3573,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 440, "y": 360, "w": 40, "h": 30 @@ -3384,7 +3594,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 480, "y": 360, "w": 40, "h": 30 @@ -3405,8 +3615,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 360, + "x": 0, + "y": 390, "w": 40, "h": 30 } @@ -3426,8 +3636,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 360, + "x": 40, + "y": 390, "w": 40, "h": 30 } @@ -3447,8 +3657,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 360, + "x": 80, + "y": 390, "w": 40, "h": 30 } @@ -3468,8 +3678,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 360, + "x": 120, + "y": 390, "w": 40, "h": 30 } @@ -3489,8 +3699,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 360, + "x": 160, + "y": 390, "w": 40, "h": 30 } @@ -3510,8 +3720,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 360, + "x": 200, + "y": 390, "w": 40, "h": 30 } @@ -3531,8 +3741,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 360, + "x": 240, + "y": 390, "w": 40, "h": 30 } @@ -3552,8 +3762,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 360, + "x": 280, + "y": 390, "w": 40, "h": 30 } @@ -3573,8 +3783,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 360, + "x": 320, + "y": 390, "w": 40, "h": 30 } @@ -3594,8 +3804,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 360, + "x": 360, + "y": 390, "w": 40, "h": 30 } @@ -3615,7 +3825,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 400, "y": 390, "w": 40, "h": 30 @@ -3636,7 +3846,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 440, "y": 390, "w": 40, "h": 30 @@ -3657,7 +3867,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 480, "y": 390, "w": 40, "h": 30 @@ -3678,8 +3888,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 390, + "x": 0, + "y": 420, "w": 40, "h": 30 } @@ -3699,8 +3909,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 390, + "x": 40, + "y": 420, "w": 40, "h": 30 } @@ -3720,8 +3930,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 390, + "x": 80, + "y": 420, "w": 40, "h": 30 } @@ -3741,8 +3951,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 390, + "x": 120, + "y": 420, "w": 40, "h": 30 } @@ -3762,8 +3972,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 390, + "x": 160, + "y": 420, "w": 40, "h": 30 } @@ -3783,8 +3993,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 390, + "x": 200, + "y": 420, "w": 40, "h": 30 } @@ -3804,8 +4014,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 390, + "x": 240, + "y": 420, "w": 40, "h": 30 } @@ -3825,8 +4035,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 390, + "x": 280, + "y": 420, "w": 40, "h": 30 } @@ -3846,8 +4056,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 390, + "x": 320, + "y": 420, "w": 40, "h": 30 } @@ -3867,8 +4077,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 390, + "x": 360, + "y": 420, "w": 40, "h": 30 } @@ -3888,7 +4098,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 400, "y": 420, "w": 40, "h": 30 @@ -3909,7 +4119,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 440, "y": 420, "w": 40, "h": 30 @@ -3930,7 +4140,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 480, "y": 420, "w": 40, "h": 30 @@ -3951,8 +4161,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 420, + "x": 0, + "y": 450, "w": 40, "h": 30 } @@ -3972,8 +4182,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 420, + "x": 40, + "y": 450, "w": 40, "h": 30 } @@ -3993,8 +4203,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 420, + "x": 80, + "y": 450, "w": 40, "h": 30 } @@ -4014,8 +4224,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 420, + "x": 120, + "y": 450, "w": 40, "h": 30 } @@ -4035,8 +4245,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 420, + "x": 160, + "y": 450, "w": 40, "h": 30 } @@ -4056,8 +4266,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 420, + "x": 200, + "y": 450, "w": 40, "h": 30 } @@ -4077,8 +4287,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 420, + "x": 240, + "y": 450, "w": 40, "h": 30 } @@ -4098,8 +4308,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 420, + "x": 280, + "y": 450, "w": 40, "h": 30 } @@ -4119,8 +4329,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 420, + "x": 320, + "y": 450, "w": 40, "h": 30 } @@ -4140,8 +4350,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 420, + "x": 360, + "y": 450, "w": 40, "h": 30 } @@ -4161,7 +4371,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 400, "y": 450, "w": 40, "h": 30 @@ -4182,7 +4392,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 440, "y": 450, "w": 40, "h": 30 @@ -4203,7 +4413,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 480, "y": 450, "w": 40, "h": 30 @@ -4223,216 +4433,6 @@ "w": 40, "h": 30 }, - "frame": { - "x": 120, - "y": 450, - "w": 40, - "h": 30 - } - }, - { - "filename": "243_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 160, - "y": 450, - "w": 40, - "h": 30 - } - }, - { - "filename": "244_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 200, - "y": 450, - "w": 40, - "h": 30 - } - }, - { - "filename": "244_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 240, - "y": 450, - "w": 40, - "h": 30 - } - }, - { - "filename": "245_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 280, - "y": 450, - "w": 40, - "h": 30 - } - }, - { - "filename": "245_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 320, - "y": 450, - "w": 40, - "h": 30 - } - }, - { - "filename": "246_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 360, - "y": 450, - "w": 40, - "h": 30 - } - }, - { - "filename": "246_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 400, - "y": 450, - "w": 40, - "h": 30 - } - }, - { - "filename": "247_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 440, - "y": 450, - "w": 40, - "h": 30 - } - }, - { - "filename": "247_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 480, - "y": 450, - "w": 40, - "h": 30 - } - }, - { - "filename": "248-mega_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, "frame": { "x": 0, "y": 480, @@ -4441,7 +4441,7 @@ } }, { - "filename": "248-mega_3", + "filename": "243_3", "rotated": false, "trimmed": false, "sourceSize": { @@ -4462,7 +4462,7 @@ } }, { - "filename": "248_2", + "filename": "244_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -4483,7 +4483,7 @@ } }, { - "filename": "248_3", + "filename": "244_3", "rotated": false, "trimmed": false, "sourceSize": { @@ -4504,7 +4504,7 @@ } }, { - "filename": "249_2", + "filename": "245_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -4525,7 +4525,7 @@ } }, { - "filename": "249_3", + "filename": "245_3", "rotated": false, "trimmed": false, "sourceSize": { @@ -4546,7 +4546,7 @@ } }, { - "filename": "250_2", + "filename": "246_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -4567,7 +4567,7 @@ } }, { - "filename": "250_3", + "filename": "246_3", "rotated": false, "trimmed": false, "sourceSize": { @@ -4588,7 +4588,7 @@ } }, { - "filename": "251_2", + "filename": "247_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -4609,7 +4609,7 @@ } }, { - "filename": "251_3", + "filename": "247_3", "rotated": false, "trimmed": false, "sourceSize": { @@ -4628,6 +4628,216 @@ "w": 40, "h": 30 } + }, + { + "filename": "248-mega_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 480, + "w": 40, + "h": 30 + } + }, + { + "filename": "248-mega_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 480, + "w": 40, + "h": 30 + } + }, + { + "filename": "248_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 480, + "y": 480, + "w": 40, + "h": 30 + } + }, + { + "filename": "248_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 510, + "w": 40, + "h": 30 + } + }, + { + "filename": "249_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 510, + "w": 40, + "h": 30 + } + }, + { + "filename": "249_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 510, + "w": 40, + "h": 30 + } + }, + { + "filename": "250_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 510, + "w": 40, + "h": 30 + } + }, + { + "filename": "250_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 510, + "w": 40, + "h": 30 + } + }, + { + "filename": "251_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 510, + "w": 40, + "h": 30 + } + }, + { + "filename": "251_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 510, + "w": 40, + "h": 30 + } } ] } @@ -4635,6 +4845,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:cb87bf48266ab3d893dbbd24a52f875f:d37e73561b49b4fe831e3fcaee67b851:63b368599cdc6e139499267117e91cd5$" + "smartupdate": "$TexturePacker:SmartUpdate:9bbc7b4492e80aa5722cc2bf05816872:55b15740d88d2f1d62acee04668f97a7:63b368599cdc6e139499267117e91cd5$" } } diff --git a/public/images/pokemon_icons_2v.png b/public/images/pokemon_icons_2v.png index e74840b647b50427e5d26528fe7063770c31c386..fea0fb339ce07cf4b480d95b7f6eb723f3ae2b15 100644 GIT binary patch literal 39393 zcmZsBRa9I}&@Ju^?lU+9cNyFrf?I+UBf(8f@WPr=} zuPZP2p{sWF!|CeNr`OrNtK)QDtKj2M;~*g+;j5`C>LDSa0RL-Ps4qS7^f9lIkWi6y zG!2wA-+Qod$|LUns);%2>FGVEV3(U9)6>(-G9f)bKZ|lJh)F70&?`UJsY?=biA(C< zPkAZFO3;J2_VYB9WwL$r9J#pMcsRKhH9VGmkgbigQ%wx0X>_7E6i3z%t-bo9)TBp> zR=UL1#@rbVuUjhNr zd3)uYfAJL3cPL5Tmt$d(Fph0-QF)%?imm;jq3v?<@tYuk7#EK(qfzJJ_iu7VGuMP5 zT?VG-6_YqRX7vJtP`8D_&Mxzqb>8I23?8%gjwxGx=)a?|4iN`DK1sjSqPcLxhvvD) zX%~6hvl2C<%+iaI>4j#ea91^+P`f%WlTH#Ek^2IJx+wYtQj@-o<<^UOA z=unzo-_IvMDQzGmqPgzS8m}nvC}2Bo>0f$W(aoE6VDsDjW``It@vk~rBZqAAOCMAy zO}E#*F3bmmh%`06xa_uH{_I>kyXideJc4xRHrb4P6g=z;Y>T2_Q?lBeX&f&N?VC<+ z`~vT&+pJ3aAfGYT=SsodBD!2$Sx7@@Sr`S-hAofJFgdVV^{U}kJt~{al>@mG*Bw2E zzwk!2CV%%pvslQ!xZU4-0uge%3*>M2l+@NWI6oKWAUWtwKzlhTp1b^DAKF~~O ztEFO|ektLK0S0?SEh;*Tovk^sQ_eOk!aM(tBBT!S7f(g+8r!YcgtJy(i@a29<7ZMU+=)Z=X#R;H6LZU}fQud~59U-?JNecYr{~?aAXLv5biuu) zRS z9R6P>+0dV^P6+yEWSO_pQ13nLOA@?t8VAbIa+(RM7xTHj&{HSB1zHin+ zfp@hA%H$^@vC<%GilF4Wv=zFXZzBPK&-_{zxGO{EJ_3Ja1$SYgr!xzo%+%WDt&ynT z6`LYavp>Bcw**J-9k?=rAb19LDa&k zklnMv`-Kns$>D<6N~gG!>?)^!KZBRM>bE=c5|7Qf!PNN+NTV*13ZFp!EZqxX%*c=6 zQ<*m)00H&QmX-YA(~mB?g_{5y6FMP0%J5Uj(Ib8$QR1xaTq;Txhi$pKp917x5Q+xMi zt*~)8ZuMf#&3T6oMR#x37_J>}jC5`q>L+JbRgorpDsFn~GgE>UL`qB3(_=qF92uww zXDB@YM#b!pNVBnT#(3{ig zHePT>bUoDt9Q9~v=$QLVzblx`+rHRTLMW(#0>?pR1PA{%G}`m#wgx$5zcM92T+SnTU<=X1J(L< z$2;QDIZxiL8PZde1Ubq)Bkn@(5mG&{mdG`(A=Eo~>~;nJ@!IFc6xA}Wl5NIa*l8S5 z|HJj>f5RI```68xxmSkt$PX!aNTmdg`}ln_@mr=mvv~K|uX=2i^;CVhSZi#spp1K1 zHFFP=2?c&_N=**Lr_o*QDaClJ))kvvUY-p{Zm{ObNg&cU z@{}M8fzF!24wT4@YZD{gst{8Dkg^=}#>8zav&PhIHl0uiy@*qj82%jckTRLbCkt`D zDtZc|aUKmi19}xH{5^a5Z0Xt3{cx`!CsY!?cb<%j zXUluRDYRQ*+L6!_XCd|tR7`A@`p+Yzp#em+-~%~cHog0bply?ip3Ms^0^rec$?xYo z8FsYMk*>2Pbxi5QG_=u^2+a05Y}lbuaXMRhn#Fgy1BbtzPyB4cCKf{hkSMNfn-dB2KU z+oDO+8?Mx?prpXf1frLpSlMZeXAT2bJ;o-{l5j?DDOOl27>SG6oRXLl6IWQS4P&_s zg$q)!Fst_&+U*8TOx#d57_&9_y|wn+xQ2R{jnsSv+{MledC_lFwbUH3U+6r@sjH{M znXp$=b!9!ij_JWv*jwaGN6Fgx#x%xR#bwPjT42wt$o+kH5HneD-TqPrD>!-=)WY*d z>2xZNv*qHbwo%V3o)8`q0rd0QX9H{`z zpIJ?$iMwYIS(Je!R;BvgUS)nw16L-FxT3XEDoo0h9Tt$x*X6-l|6Q({F zZPB*&*%F`il=9(d#n`!8TS6o-h1EhfC7zZnrb_#V?O1>?5I>@|r3E7)xNVwG%eJzh z$Nys2G%dyEZOx7enZA(`In!U=$LkIXa&k9{yQ*J-2LV#{Wq!-$IyTfLaokP#t+Nq^ zX_>j-lMQ}iL!ES+HR$D|nyQ#}ekxXxUz6%FR`-Rk9%h9Ws*Bjuu4cM2n_lfQ0T)cu z*bg%rUR`^Wj%Buu8J5$*S1z5n=Po!ZXsLIg3coo43?Q=1K+T2Q#mX?*Z;lEI3io_I zwivQKuG_*O(K{=O6Cjq|H&npUj0g5ey-N-LIA`h&3LxBFi$ENIUH zM^lca1%q#>4AmNIt7i#vc3NK>&IS6s#Q`fWd(kRo;S>-m-H=0c462PSQw~<5TqY;T zQFd+9GRybWe&Fq`q~i$!XG=x998L-kcGe=jV-KbZ&pblM6wS>J1vRr-qYp6~_&C!m z;us@}iW*|*M7&N!}St+7;=t6ae=Va)NXbFL{{wmz&bFfgfQNq9agUI+*$OBrffd89pHe5!LkLiS@l~MACzq2B9^lNv^bE+VY0R;q<&tBl zD_Pvcxy)OKNU{RrlGq~_SoBobO200|+N5liWcin5rvHK6|7Mhx4r(U7e;}ixncrH@ zpez5?dF(`a$yid;+dJ-GbSP0>DlemF|3JlqRazzAXZn*i`z*rUYNKD>0M23c8oQ;= zaTC3sp&M63lX|4n>Wu}_gu5Z_W#DLnzdIjG)Ncx^Zy!wyiHEzlwI*>l%(O2mbj`6rmYAl5n&YXyNR2L9n-%0 zj-U=VMPG1Q!K{xvU!36Luc8P2a9qdGk?WvhfgPmA<{qZTA{1>&5%Fg?3ybQczXnD;k(eL>lvJBqJDltB=n!l%3ze)M(St8@83#x}F6ztLwzrlt+=^(pZ9Iy@A3*JMINm94-cq3pX{*cdD9?8@9j%MObD;<6 zkY9e6u(Cougr?=+@XL4ojzC3N$wb<2H)7&|F~Vt+;YYH_Dps5)KQFc;3bp6z^U0G( zB|}~B7*RwQRcISO9}T1Z%D-}1cnxb&i31F}L=FKD%(c878;ySP4=ySPCRPAjGKL}s zn`W`B8CLw4m_duM@T9Fa9N_R3|F#@A4Vp^#dC=r55x02B(0P|yX+urLg+Bl!eJ464 zu&U&hALpxP@!HN#zZaq>Oz=y>PP_N=H3>~kba)8U^4X8&q3DvGeh~~M44GS|a3alS z^oWEdg8mhi7ckLYp`fXBWQ15Wwj`4|&?T&}{Bc{Y|7k?#moDM={S*~tS{c9(H)2j6 zrj!JwoSJy{1xE6AG?n@eUfj4?B^#AUCf(JXD8HHQZ+_IP@UXxMZEHH}x~=6gj3=)i z`&ZT59@^4WlPjNi&PQaP_;ph9gkugU!F;!-QotoZDH9)L%e{dg$XISA#LmO>r_wG0 z3U?$fBHLQR6d9r=7XN~hv|J1E2m^qDldtKN8WAA z8FTyT^Xe1|2JX%3IK$Id3nfgnXBNs;tkAg`{BXE0Yz!mRnI`1*HXP=qBa;Y8#KT*^ z7!6%C10#fDFeNw~Ey+k|u*Qsw|5O!gO^wTotc{Fn+xnfxd$U z5Sc?hB}|6PGJ*c#wf!=IVW|{b*pQ>Yk*G_<8dbF#LRRlc^zs>IO}k$_$HExNu(|(Z zgs{3;bsJaGqttF`Ip}gl*j`*pW71NmrCpQi40)Q(7Dy%U!XQ8Z~Mfu+B9d*qZv(PvjwL@ln&GCPs`&ncKuv9Uw-g7i^KKmArjA+c;-V*6c+RYxmCTfiKSv-8I#)^LhzKQ7 z{qdH%e2)S(0yQoP7OkC66?+C)o$<3n?!q;qWyKj-@P<2JjY<#^sOi@?V=kQUHe%r+ zq!Z@ks$+7R@VtJ1pZXAQMF_l2q1b)ziNxHvjSiTvW~hqPx~MHJ|3B=a$DuO1O~eK)jzN9IK!3uBLe+$z!CMC~ zFsN}T&uOe-YnvjOC2l`W_eODd{P|u7BuKz}WBqPen6Y;J$AVDQ9DnX(^TbE_>#QM9 z?a&KZ1nWZ5gn2n>+fnBMvA@aCe>%Fn3t_gSxhC&%+<`y;x;ktTcrEO-Si=<&8gLLx zROzNo0LqViua}$*ijY{dRuZ+xh`>Mxv<${Kth$QuaW87bOpT1eLmy>%fqSq(N)*7g zGJa9N1olhTL@3EvS)QaMBn1*Az)T1|sGw)xB~=Nzq8Mq15F2xDXQE@WP5zA4RQ7Wf zwNazF5sZI672-es+q6?a#de9I9Mz6VS?%Mbc%=8sI?YKI$f^NY%J;6=+2>%v#T!*w z0Dlp}=VHhC=5NLesthgDZotHnP%^ zAO~ZQSNig(*vPSE-3DZ!9~~@0NVM^>{#=Zu5u)HGinlHdz+or^DITL`2On@UZ2yu3 z(hd?Sej0>}n0;Zt!(_Hv%K<~uaHHTkIR*Z_eM$b)DSGgzd4tNfb8 zg&xStg-(MNv(t)mm$ai^jY(0RYJJ8B!)C#MxOSRE>qoQA%B(c#(+AXJqCGHLJ{*@ zv~|FI)c zJwi)>#ZNenHaN4^(F&O=RFE+m=iHfD1CjO7;wfrmCa&Zy_ia(~Pa4Tb7r0iMgmTwo zLiels=+f^_76`WoNx#%e(AAlqD$MGa>{f{}L;*RHS^wtjJ*~T)k^a8-HgTuI<9N%+vBX zBS>}QCGs!Y!MYXwDJ^@6M(=Bl%a!JSa~k!ut?htRZ_}($I$r1nQ#3IT)zh3NyjUwJ zF?1$H%m~6cKRvzNHQt#vP7F{@bil^^xv>`kFn>L~`gU3&=cQot*ks7sy z%>3MthIL!u2PVXaI!Fi;BNt>sPCop6uXXD7G1cd>o~y6&_%OfXFtDDw7P<}90FZy4 zj&xl*LBnLW_?45p5=Yb=Sy9)sUfAGqaK@T`@ zS|bkP0Q^PkHwoIBE)h#E@nW-SImExqW+r1NJW-__^8Mv}wwwIIZA zrtJH=B}KybzvCqRPp^duWbv~X=?_-rUQYT)mD-IYp^fR)k2hzZ09?%sTvP*LIVb3V zmF_(8rlII22Zr8^zyhHWWT$EK4Bx{+u|*c57=h04=E129WV3 z%B28rz{P(I-&4i+Fx+IsB`!oW3)0y)VjSoJ%Bts_Un^oNJv?vX5AvlE zrcsTFd3gcS*VOmixHu)SZAV8(@ZGJN;e%!opj}4=vaq;V;ZV-G-NfY_Mna>g5^fBh zargQUH4y`vSXVnHAnQBV9d=X*L~xJegMy+h^zMxU=23JLfYRy@=GG43`xq+)f|&K( z+?AO@hB-igv>%u)hAsGGW?2a`HLFypo*JgCD+arYIcVXLlWBt!lmmz1Fz%cWj8s61 z!&SjT1IUGyLN3jyFZS;4F0g=$7Fb(HK4_iP^F04Bs<(C#KPEz&qFb8v)D+Y&84yPnT4C(~0f8e@NGvxtGfmnS zt~eUd;(%VJf5e;)>jmS8r&qJob3PbOxuUn1qZjf-&mlsja>MC{TMlQ2i|$s8n_a|% zO;0hZ{kujs!-^fI7YZAp_Hh=H_bhHt^uof@?MdIyXxGGSOvfUz|7qSX_!A#~1AQ*` zq^C(K3O1t{5Su3;=V6`f1{$u8Z(KZv9B z3g~>_oi)EUE!7#P5)_LQ!@O~#E4sSf+vsvW^uIPdS+qxRGVP_QkfvWt^?OVZ(ExN7 zL$*=FZ4Y1I%t8!YX*y6KS6y|x)FA|YaJpzY;&pogAB~dY)v=P*VoWU`%_*#htf-Sy zmZhn1pl#8knAoI-@3evMCB`23WBvLG9CveDu9iYU?z_A+Ge0ZvblsS^_J$1jz`g@z zO1t%w55GT*oXUj2)4I;jwznOw4QoSrax{#@ucG4Ky2^y?{Fq*jU}xOR4JVgUqA^k& z;isz~47NOQ~>eC3@gd6D#Frp_(g4){M7bbNM*eJDRFz{AtzE zwY80auY5f$th?lFwUI7Mc*?H!t$RfaYwqFs-nA9ZtnQEMB`nO@i=7&RkVvNDYIWRS z4B$ft+VG4}1OvE>(f+FSMfq?N9~fjO(E>EqK4fJl-}*O~=_4NhVZxf7+9!aRii;c* zC%?CjVT4JJHVR##RFRI}^di4LLsSXCW&e=5#6OIfHZTB72Y6OgUqdY))w@W-dp3;u z&<=Ot+3UmK3Yu72!J$t*w4urD1BoHFFw6=dH|S540W0uA6a2?oBgXEc0URQ(&=!mT zeSyGcP%>+1<-&za>l}dylKO_}Uf`EtSjI24uRC;=Kcjwp^7ysz->3}egj$O)!sxHp zB>yPz|6_77)~RcX9vcQ;dHA|s{R5q%+zy}T1NaK|mWhg)+Hk0Q0D7Qo0R`ioun|3(XVG%R?cIu(UdZ z%gz*bph$Fii}hsOu2lE^`>b8`v~fBV6UrfS`bYa!am#BmVi!F779uyttG}LTgZlyl z&7LgbJDz#lP%85-i{Ej{vMLg{c%vh@Lov;ZxSSSD(s=H__s>-ZECJ7r&w)edbz7-- zTEFn~goU>#5lfiKcxH4fUH?=!CjF{`df>KNyUHK-e~%q$AU4%oD_GFy-#s{*D%?2? zhfoiYO>{<)^dYq2ogfyGSjZ)L5yd1Ur6UDKK7tUhZJ9%hp9Qg>LnkNyq)`iEqskLq zKgTE5^NM&Xue^pGFQ+KV2iCSntej(EJ_S1hgoYaI$DWVpY4UYaMmfhoq41Ma1{S7!#~wzkwn+90wdG-CG!0#6i4f`?v! z4|1$qs5xWcak*Nh8DulYJrnE?)i=w?3=Dnc;p;DgGT(Jx_1u*hJLz|x%*tuCoj!{W z3-Vyf?W(WV_xRxisKB1(X>;CNlSTO`o&N7H^l&N@Ae^Z07buwo1ImFzZyztO4^tgVX%<2H7 zFmRqlAlW2<@kqSjZNf&)QbiF?96qSB1C=05kT}>6CkKqlatR#l3*!UNRlkru#i(U^ zZ);QcxeI)9c(SHp0o`VdxWC(8hs&(1sbM~qyI0N&4~-laR4P9=M6cX_Z)>3R418H% zj2*&KkK_91E|2By{x@J%A)|(m`sAPneFN1Re+=GN6$%QN-4q$;NOKJ3OmbgS6p7!c z{UXQV6l6O*=LelCxR}I_p-Tb34Mj)AcHew35*w(O#J!VMZo}21_qvaJi|W4of9?Vt zj$sOva;wU1uT%VHq#GMs|62JPbznA14wD`@Pvwm?Fx&i@9TfH4vxshV(_kLB4-fWc zxxY?KUSh{&mI~%;c$E4Z}LLl2j9Q{r$E=^i#DrOeUfEWL%OK~wPPAnskrF-|n zT%0pKm{FOTXx5%^=xMUAF#~6R0U_afgEBJ-Mkh$Cxf1^fu52XPz+uGdqu&cgT82to z*+8FZJ~KmU{XUdOWH-;U|HK+qF7SkZIdI%r7VOmg1bnH4%>|tqX678LL=h$b+dQ6O zu-{ideT~ebrUr#frur64k0Vp?tb3Jc7va+Ix-7^rH1=d)yz%_&Ox9?4;3Fb4J)QxT zEamiumypbBtIGDyl8G0OCU{w9LKB66?Kq!a6-f7ZZHU{Jg?&ElI&({j7r5VFk24*0 z537A&X5QuNTAqaFKD8M;P*RRsT2?lJR5m_dXvYTp@aI*3TBJ+2!)+DXXwaB4W{7QO zalne~WshuUvrP2}x_%k~N2F7?(fi=g%OzdMix%X=EN?|!M=_6q?d84UEj`D83ni}# zVmsT7*CST=|iM!4WhVe{XnprI-WR`NCg zWb{Ga^_LGy!X$aK9NCVn{(VD$Sb5y2}}uq*H%<{saGXdYyDC{8AKQ_$CB zdziu!p+Mg_iwb1{9gL;}t^|{Mba{3Hqjecs`b;sx-G*^t6Z-;fn3AdVkHnLoWMnJX z1;3Ol>FXcJ*x|40+l=RxG1q|LeIVJ+#$jf28r26PQwO&gw4@o(f(aa;U< zXjjwg=%!7qK|*fNuZsF>WGRKmrLo)=s8466r$m2*it@s0acj4}x2jCBiE(YO;ODTb z3ifTo4pEZ*zi7&JvyEQk?kSz(@O&pX$`7Ji?DuL?)#3 zmp7uI3aUG(oJanJkPPDWgAOOgElc~~A5_Jl57Frn5gJNCZi|}X;BGq&HvVRbF3->9 zL!7|W&~3Q54dc`G&P6)0FmQE9+1JgjL;4?dIWB2=e%?}BG}-ef@783^M>=){&Ku-p zAoA!|5(M!E&i@B<0NE%I#!>Dkv)0b{dQ1iuHW%Ni@v55c6Crz>1kscHd0*CVsEFMKCi(!`D!H zavPoVGiSV_yF#W?5M(b~6%}LNjB}-I+ zfc!&71vnR#>BY0XosZDaXopz6eWUZ0W`B=w%JT{+5n?x!?kXlpyU!Ft|6!DOg$799 z*@~61Bhk6@~kJ2OpTav$Ml(hXiNkzcnpEkdgXVa_{u`ZFKF1&C z(=?2%m({Erohoa=JUk&^%wI*dX9%DDMNY_$j)j*RPIv}G#wV1lX5q~|$f-%wGRt!? z2vcFb!>EC zD*qBc!R}QK6Wv$K5FbUaW*;_c>_?d*(KD~dVe%5kp-sfO&$3iqlp`s7O#6r;=DOy% zbvqOg&Xg)n!5E+L9d2Z30!utOL5{`fbQ07XyMNfyAi}?zX9eY^+s9@Ky+unHe32^g zH(DwJc$uX`TU6C7DMAnXb8{OcAaG8apntoynrd=HPv|tx%Yc6_L!W{&W=MQc@A#G$ zql?|>>DFuw>z@XGQEd|vh_Cr5gO$lh6T>yi6+8@%rbM;#eFe=>FlBa>#C3SAoW-pf z56%IY%+@Vwuo}6?)xqLW-a-D=G5JOMpL25mEa;hRMYB}dA5!-q8w5dKBQX-8r)&Oc zA!8n2w!O~-3!8#?=XSnl3wu}T=mPki(~@(S?eIa-G%d;dxKr$OcA%(EGfMYk*wbUZ zk75kZR-{%FHrEs!jem`LogLXB;1@{LlVwgk|mGeyzQ6lz`$f z(aQZU`V&AIV(@dVjr|AC5;1Ua-gRwZ4q58?D`ZFh^3a~IoOo}Qu>SSUSyAdtk$i%Q z8ua<(terVg%UIt_Fe=-mi={`HW#Ma`?oyR*4jj4ck9%SMKzfI{`=7wesh18>nW^tu z$c3^KFkZGgwDfq#@!v7kle3RaRYil}xQmaT%JuV@z~&3nB?r(y={5&inQHmJX>vaQ zTJtw$z0P)Df!Q@`#jqJ08L(v}w~K&KEUu%Sprl&3y8@nK1B~eaF8*#7x83NWH{mXJDuhH!ZbA!1c=VW4?rkDi3jbw}~3& zWJUX6tRhMYemJpvIuhNi!!1^n?L1>sP>IFk5*FWi&=j>qU7hJ3cO4gz)%L%17GD$V zRw5)ZZAm!~7M(StBu^_*UpSQcz7){dvWC2p#LW$QZTa(4wXdulM!zn*I8O|J9nh$s zKX03oN1W%7(uj24NAY{}vetewj=8YrPoT4H)jGeKK7K??p_rHy34cT8`$Ookg18^8 z0MXv~?y%E~q7@DZk5C+{eNqFXfzU9cDU^B!+ecbr6NIxTGQ9n-ox94NjdyL-mOBc| z2V<^f#2jfwW`rPks_Fyo9KHwlt-0yD+`MGN0R6BIfxYvc!LI5}m^uBm3(`x;>Tv$T z;H+51Ja5wQ3olGTY6xY}mItN)G7MxT28xNrNnJzm@>C(-eJRe4S3RQUdwmqsyA3Esp7` z(FWyLqW2cGt^viD`tLEVo5|*rWlvwO(NeX=5RShTi+9Nmj#ai?`mT2P*Jec%JK`?vF5)o2GmV!+mkHAu!OWaHNRcQ%(pFNT zwJWl0()X%OCD((bsLa$}?`7n!iz&H~zZ>nR0| z^IsBI`&I@wLPvy)NLy&<4|sh+8nlTguWlr`B41U?0CDj?wJsw0u8GfLRvT1e|wRJ#vE}HGCzZpF1IvN zg38LL!b9wXnmN&nNJk%i<=#CT2wAtw$4-9hBFF_r|5ZG$Z4wS8f8!zj>!;%sUM6o& zNWkH9?MJ)wkyq{zL<0xS*>Oc#T9SyL};H{t}#L9}|YS#}fM-wVmtb{L{e z?tYR?8Di?c1&CAn#20UN)Y&YS z`)Ep?b6joT$uv!njry?K`B&y~RAy+r44Z^iwvMOc&ju%gn1qDk%|l|?o!x-|m9+vk zz9Ar7GBS+uaR3`%3lQ$uE#tr1(jOUf(;C@#p?2G1w-XtIL7#IRQUVGT8EZ_M0hk-8 z1>k%$N%Dur@;QND(^Ewd5)cw8Kd@Jd5~Iz3Qb-jLXmtFmp%EdpzxHJxNw={?=`I;_ zW|J~C4x(vNo)1uN9Ym$a*irphckT5x7C>d49Tm0KiGbP|TYpBY=fhV|j}hIxNfDrJ24*Dt`juv;soJf-`!pDRH>aP&lP{!;o{Ym` zcC(S#+4wOahYt^+5x9UD|7^=n(_Z4T%4^5boC*0pv&sT4_5=7iln`kW7iJZ$#; z>cefslc#&Id}z@&K`|~n4=e^(lVOV!tFCl)w0E6hIvRX4UDt{1}|14T7mtqr$@;WFV?&{i?5Su`eG(diQ`5YG5enX!Qu zsv?97v~M5J!nBtkB0T{uN-~q zWCWVSlCQ7VPL_)0Y`L5#i%ER2R6ql>h)5RZz5TOFCZJ{PA_U2jkotC+Z1fK!)q8Cj zD1?yir)a_qyl<{M7PEh+xvGC68HH*0MH&k~V7UyVFkjODMZoMdt z$G5WY8O2D|uxsP0Lzlv{qZ;izMi|0bQB2Uz{!|fVDUyv2RcYNugo zSIDYf=4!V4rYP3p^FZU=(b{4QT>Qph*%oWGnQD}yi}rF(F`=$g{4b4HsTo8;gpSTXJ%yRcA8$4yz95t(A` z6#sAEWVvB9IUu48kc1eqa*7YNJvtgmq?!-rO>f|r3%UPyw)IJy4mL(nGxq4}v=$AL z@O4>flA{;Ucpy~{xo6+umv$QbyWh0_yW5rsd$d$j7xS{vOSSJCGcdze5u};t#pQ1e z6UyoELY{bP(fpu6gR{eve#`xC&4#5L20=WL2_W8TjXv-<6!*@Vm1@)M6(oxkn9I4V zdc{e*Iy8m`$cv}qUz`wgX5q-B1Kugz5^-*J8W56fs5H%fA{Ze}6yO+EPuiqkS!qJH z#Zjg@?d8{v9sRUdR*K=i(zI?2M%k`VnnOD2tsiLId-op6cWbE&vf}bZbHKW_{zRry!%)r*G%#&@~L@THvNE!(!QQ65Iaq>y~$$63zU18A1=Kd-!T6(aT@b1uW z%jfjIB}Z^;CvRZ^pQhA$P_R`o^!{poD>OeFV{N=ywg!Fpg;DALKo7TVu^=?VB`4MI z<@Z0gTDJ1BLSAmMQ()VolnL#2?iOf*ldCohD~P1Y+i#OG8#_g7^g8+fm=o1_2dV;g zin9m*9Z^s7DfX;7F4u{B%v@x@NuT<(K<7_%qmQw_8u}`;uPy93*P3u1a~{9kHgLIt znQpV(b~Jgxf!;@f!-rtbDENW>+Rj{$+KOk{m~|>ZQ%%5&zL*wohgH8czXW z)mm~HVVjldW%aKA;}yFwkdO7F=Zhqtn^8D6-S2~$X~)x*Q8M2dRxRN z?gC2|`otvjA=5=I+Z*LR^x?X1+_{;5S^Eje>WH+;!}l@&en=D`{1$U@IW8R^&;dOu zgWL!^RAL7Akq>8TJaBby2?hup%c{_3B5VpQ9}&S?&%7s?efQ{y?EuH`HlhEQFg1tq zqS`kcy334)qPPU3|G4C5R4s_U%u@)+YftJ}vG;|1cFq#|U>T+o+}6q?T)=*oTRWCSwZ zr9&tGCRlWJHA3$)V5o1t@osYz=$w7VVXUM^ZZfB&oJ&G7VZg&X!~m7aVHjsP$}|+m zXgLi}Ac<^g*~dM2NCCX$X%XcU*fV6qoH zFc6A8Je=vp_0@^0`lHiQMDv~}_nS5kET>r@dta9S!K0J& zC(X1M&%qO=AgMnsbLKiQe=cl%-*X-=+IMejd=HX33Q3<75+_5~k*R#IqFRDm?~b;R z!V{flK$yaZo9w0xX4^_-{fT-7B8yXr<7u(#WzZUnnVwHDb%Elm7_|8MYI3hY7LKM- zRlxT0wxsf0+jks|@qFt{FJ#dKj%z_Nzz7`ufFQ&L*W~td7DImy&sWY~k=Z4t>Bx>B z@tFIDi;v8>)5!j=cd)1ajJ*=?=v`YQfJ3CkP*UuvSmaBXhNc=2Cw&UFEY;OvzmYnH zRwNp(umPn?UFHXMY0RDTO~qaM3DX&nbX8-xDdh#w=y494&=pjpk%scOgv1+c)`Y0c ztUOwXlM5u&MBYJQi|jbyswfORS&^$Xxev3h$42iWNqR1cbte{s^3sI!PaGRSVwI+H$t7H=+39g&k02~7aUW*w9CCPU z0=&nM7TIf9Fo{zpHT7fkc6ANyUN1f0e7?)xpDT3dM$m?WzqP~y_$ttPxQ=sFW2QTs zuXOBoo25I>1TB~uJ>7eJ@| zCDKUjpZmzCj=*0Ww5#z7zM54bC=1M;1F5R1#mQgaR-E|&WJP2LN-CH*I8c+&-jy*l zAjp!?6!9_D6|=5`7e9@Sd>zTSFAk87Cnj?1A$;1(X<^t^zib$%JU++`erKBic8^_jhP+EI>YFO6!8c$+HEUy;A+J{+$QJBqlwOoAlJNv5Z# zCqh2TO9oyaEi!^7J3e_2?X8O$03;L!`R2Q4t+l}W z)H^#@+@dFP>=(O!E_nOYt@b6JiBwFFBmObAG|jVQl|)p{^9x?%qJ%VZGf`tJt4cwt zk4d6{v8ExBS1b#)hW8caE*rK)paoamhsO~XafYybg0LmJz!b++f98JE9=cMw-C11P zn*snE6CYCF1R($)MEk?Bc+ht3OSsEq+ZtSR$duOe{O#P*SDiJsP(P1yW0 z+)w7+UhX1(G6U@>o3K>n!PrRp8<(;+?+*=>7!qpSB06tsvhZ!nEM<<_6NvRz-|M#M zn!eX+W@E@IAZG!F`7+SPnDHD>hb=wrw%QV=@Y@R1w>q?k5){cxzAhMVr*%UH1*vOb zr?g1LWb>eB`N|snWr0*li0b5rVgrv9aMR+wV#mZv_wMq3+t(msaTJ+9K8=)nCyf(S z=SIa&GKweD=KE;wt1t`?j@Sr;NYy(1S4`@0IgI*3VX(Z?uAFLn)JG0ZFR$82OG8of zH#lKWB)dEJ^F{pZi&{J}tvijrt{>OaGSykTpO$SUGb)pbMO#_bWgC-om|OTWnXkniV{^pN3k?U0%Y zg_eF6aK;-ZJ8E}~|K0Lg-i0d~i5s-=mO;emSRgr+I8n1d`i+<#2MeWPI6gOMXt?P4 z>eWQldrXAZqi$?M>+_|I5o;yrLoV{r@E{9|5liNG!9BP(5L}wz1ef4p_`R9`n_2Vjhq}9}KipMySD$<8oU?ZU*1x***=Z^M^{xF5 zXOcYXuPIDC!ZCF$eivkA3l>!XFBQiwmk+6zM@2BaC%cPqP=a`ceXvIF%}S}LidbS` z!yF{jT~;QK?~e|v+>{YC4t~ge1>EK#dO8zeVY#&M91dAsHNNU!Fzs|JHmnOMbtU;r zXVXFp;YFhoPnG|dvbmOoxUDj05HZ=N3I63_nEy3Ew&QSpHAjF;ql?beGw6k$QTj6E zu!=@DYl)m{^__|to3rf*O=+oB`-^RiHNz|fo8eOeYbVX)$JM{bN*I=#GY#iZTVLUS z?|;&3k16P!{ET@SObs*)J!Gx{DMA{lGr^zudL7%nBo4K^7lgi zY%j75|8`lL2*jK;CTjKd7}C)14MN+mI^ENMt%XZbQ6#EZc6rcn0gex^X6Kh*E>cV|yec&DbyQ!KH3D^$8*dkDQwpLQ zBm*Hx%uwAg=wDW$aQApI(n}iXjZgn_sKFm4F8=xM5@(ZT1u0Sl&H6M3YCr9hq z7x5uM>8u0d@0-@VCrETV&7u;&J+%BEm0EWXc6(m&rM?zN%?D=JTGMohr=9KoSg0OvKZ# zG1g8XTPqBZkXw7W6A;a6l><5^_!Ld2i40zmZf{o&!c=IF;pUlupo}<=KM(-lTSZ0v zUK9E=IJ49^5sJR?xg||hE%ES*yA!I8uSrc?j49Zhe6S8tkZToLvn2bJj-yW zTmZa#4flzh(9=YvaA5W;}iEF49sg9(jr%t6TnE-v9WCgd8fOsi=_@f6fHik1e!iEQ;T{oI(d{3wW3ZSYmMve)XOb z%oCrLfjDgvRKRvM3|1tFDggF~x=7g)>Yfj(e4wE^o>M+1u=5yrw8az&t=B26pBbdJ zRHsr98NP@qBT_e31S?MYu7L`=b(E}~S5cf@;jv}#Q=R#7wF$4TyL2s_~gakfrE!vPTS=O zC@|GnrfXwwQ&8+IXp;3X@CYg=OY@56#JR2D>9%<(0eNS-hBhwG-Jz4GxU?D-z>mpG zkf?pH74{}}FnhBc0|WHqY>)y6JdI@cVsS`BFk>HFq>*`?R+KfIoM9-IXAI2$cnQ(b zAZ!0L)IM)XgglUY0v#09?h_B9d_B-Nz$#10z-)JJZF=`fi{3p{< z{(wjoAwLyu6SqEpI4@uy|G|y2QKT*`C;3w(=3R}t@Gw_@U%LQ2%gwxdBcZ}Hua(Wn zIoQMs@>|BId0mIRvq^Asm$>uzSPQpL`ZQT65PkjQd5Cy?ZlDTxy+v5@)`-^^LMkT6 zvW=?PTPO0(0t*IrW5TbBA;L9?Z$(C@f|*l0Y682x=`95F1nr=7JOoM~6#+6I)o-G9 zUuX|LHk*RrQJtlAKaefHEB2|x9f4`i2==I5%?lOsx#nVPF1)sDKZ0#SvMMM2TOTEy+xMU{sDUtp`QL;i|`rb zu!Od@HlYcRy3Nv3tKGD;&IhCh3!eQtxM%Z+?4Xxf)GJSY%vz6zUcm|qP}4HPf`2$j z3C`epM6={MU(RDoVF3m|UG6c0|1H^B8-M-&IqVDi?v_ndzliH{gDTW#`XkZI%Pig> zMCRD;$q)pDLIaRd@Pk*YIX=8;E-9rz(7ttCHk6hJxP^YXo~V&FnOev$3CH7VsLzlF z_}_%i&eKXk)KC?@w+wT9ZpnbIRlj9a+1jPHLFBp`a$RR*@9~UgGG@ADjGCa+ysVdQ z-gDSTH68=ri`N}*MHbHzji|(&j}4&2j0 zGB2*Gu>Y~St?j~T+Hw16sirsnv6^QjZ_Wp|I!P$bk8L-<+OAd9*1-W1ok$Bwf@-+k zmzia>kL88yE?UgLQ_JJt5Hs>NN^{d_4wHqMhs(pt?cF3OZHmWlhC$yf=6Y5W5?HWP za%$Lz^THdFgq|8#JBgC;Xx{hc?{c2tf7Dc;2a_p=)8Rta<;2#vdkKdO<$Vxws83Jr zAFne$?FL$|B_tfo{}O%;HmMN7-eo1fd_r&Z2>;F#xhnI>F9~qM0;knSiwh+{l_Ga~ zdW|>yLxi9Df}MQ!>l*2`W9BAf#~HPPGp5!)uChbS3F;8`tN)thXDnLR#sgQRm`=+A z(w2ClP{#{?D+=Z)c;gv`hwO!;a7#3pZDLv+8_JmX#LPZ!0St8{yqhg{wc~iu7I-iU zeXdC%P(%;e>aTISjv7I`$|So*j=8$^HNK;Hei8p~2u!?9jsZ#6`>O+@AhBE-c>vcJ z!*TQeb-NIus#7FA(M5OeaqU3PgXTKUk&5G6Umd};%sz9o9kkQ!1R8$UKc@p5dKNXm zk{)9J1^WLp6@Csc!xH)5Jpcc{WqL4V(}@l~!kMj&dU`F%LwvF~&TG#3WBq~9!(~U-aZTX)CBM-XE-LaIy&v+#b&ioL+>C7-a7Fm%Jv@KyV%PDMQtT!p&m+9n zMI5j|oIt=6I^&~CiuRWQ^=uZ5d%Su#)QE$J1I&3O8_l*uqM4AAu;t#zbREmBHH$-^ z5(l`X&{5qjoF)1$&v-yl(l9WzjOghQUqu&%iSIBYzYu^P84IHaaowS=aYX4KP^y9~ z(P_bb8bUQ3RE5q-AuZpX(!vy_deprM;Ftn{%&NMHu2;ZfcDKxkpfuakiN&!NO=li; zlivK%4IpHboqb8>(OpqDe*9H$3>O_fLDJf&2{C}?q1 z1rrd|)0g?!m`|}(H|{Z$*Y<4XmmhnPf5jJj=lh63eB%Fn&uXHN)ux13E(@mhu zD??;34XG!dL1TLJi)geH8pVP6*z`=PVj?l;$IZ>;hnw!JSAX@eZ@Ra?6z@qk*alb| zU_dxK@7fNU(p=FrCeQNr0hw+c}3)&pdEXH9-G-}zeP~TPibmr^-`D2h!o5%Z3 ztiUHN<1djU+P#gu&tAdwq_i{>#EF7;631*=y!;`hFXIE?NF7I6Rzx)h;Qw}Cao$u4 zBEfs|skiNJ3Tth6ip)doYl*DdlJhE5*;ihQ-%{d{n@K?nnZ^$$+pt28J~ze`2}N6P z`8PNdq;LR*@t&I7PXnbOBH@zO_7#x4CndV32qCjc!V&3 z{-~fX)b924wuck2x&zPRlDY6$?tX?eVrDGt9P5?YF{?YhbIAA@^y&9$!(Vyr3lP9U=1T@P0 zu5O`-BsQ-&vXdm+y+g;otbf87gvvLr^7G|wm*o{xUJwG`P12>k3{@q@ez$L+v??loNGVk;keAh#>LdwyvK3jRLJj!IoX_VX z(M#tJY+o&GGwdl{n3W?5NEe1NRo>Q7N@~owTCo&QZkj>lbYU6!IWjmS(^@6P@`dQ8 z^z7vF9?ixDlVSY@ahdA@?w_qHtz|hte>dlU`_VafLNQ;mah2X7g-Uj&UpU!HN>dYN z9I;_w4Os)6m-?|%ju?*di`G>mx`_H#P#-c);1yvwkcYVn9G~hDExoii*GIVL9FW1> zM1`oURlMdlaW!e$l5vcJ;kwxhACkjfk zzU7JFC{2;o4x@Ppb{|dM%@l3kA}Q-nu@>|QMcRZFKobTCIgbz3NyP9qxGThuBr)#h zx&12X?jgFo>gw(D6O-}(VJjEam-A{mtd#kE9=uRNVq4RjH@T-9fiF>7j6cLya$AUA zB>+%zBXBTG!}Z49&CRed>YX+BUlaiSRy-=K+a*{@3G)x!xYf;OQn_W{X zRXw66>74zj8I=ynhoXK0KI2WbW&<=_p_Mb`sml5tfX$kt!dO>l1ew{N5KW=;_shSVvuiki$;#YTuOPNav zb_TVBALm-yga$q(zJxxG45~&{Y&|}wWaIs_mGc+?rhiRF7ej!Tn*I?!Ji z1M7Z^G}b0Ktp@p{KoQBagH0gku}J*ajwO!}iLyl_?MEcY8H)oE+0fy)Z72d!!!&i2 zgNLaY6FjLCHQdCP^5Me*F%TYsYlA9-^2#*pLFVMR`h;R@c-N^91(#>Q^n|2O>~Nu- zyGA}P3o~Qe1{MUB2$$1A@_f7b? z@Z&Jf&?ckp^T6-<2pttbgIED`_m_)&;3WZ z+@uH6Z<(ZQ-!h%DKM;_Dho|lS zeA2XxCk`vTst(%pxPZv;zzp&F-lG0>oXI>bLNblMLRlwF%25MVbn}AnwL57+b`0<> z?V_+^xwEv73}?t^_w5^8ooBN&TibAG8+2gkEd<_``WNFMjsh@+SD%Z>D zz3;d$akQ5<5gHySeX0wzwWIyo)^?Aj_PPHV8a=y4q1&b;)1Q`nA+qdq33sV!RZxEV z32|48@X!!LCZc-0Q4}6(UP3fuynh<%NI+Ruxxe5TI2MQ0@vi&B_|lCx&!&n{)bsb-_%x6-ooJ-3OAu$e5dPEkg9NV zE|VOLoD3Hrg*{VmH3TF`BTox&)itow(Wo_w@m=r8_k7z(V>CEdpV{=^S+=sDlw+eGwcm%Sl3^(n-p_A4LWU-;G)RQPdC z>c)xj&4#0q@)!{LXs$xQi-i!z_=9IkOZ^~!{__xqwrEcQ_%&wh{E2}qa{*Ylf$ovM z8u<=q*rhuP4=K}eS9+m0n~(6-8dp?wbPX=_;&Fqk)i=^hcekEMS#w3EFCW z!}OpGLrO!3brUH~@l=5XXOe*!R84lcd#Y8H?t7J${6bgznvSGiwlG|ZFnf@AC2``@ z!?%E=aZdd@B=};t8S2pa){qIGU7M`}b>6|uDy`h_$mpV?=%O=NEWL-&tG?G%x69vx zEIRMW+FxK!YJf|F3v@W7FEsqKl$yz;3az;IZi0$~cS-4yQoqZ*mf$3@r_4)2jswKU zO#zl!OD|Rg;8TmC=|FJ@tUZuD_5PmXZrS}Dh#b8UF z7h~OGoaJqwq1N-V!m-Km(U{|+eY)MG?%(So6DSmgusPRrfLhwxCO3k%AQocdfDvV` zaM>@JGk;aGq}md&wio`BU{IGA?6Unv7;VL#tY*=(X|QBtd=~1&pS3SFMy_QXZ`Q~U z#q93IQC2x;GsB1d@_k7`(YM+6M_wBf{)d>KXxaIX9=KDWKA2cklGGhP({vVSGnF7> z5iJc30Y#|cJ;V|HAd^*RTNJEc@2?jW1aEOlY$kh6mTaPm3lEKD!%2afhqSzBj`N7# zfwo;^DQkpY*Dj{ixFQ{|o2?yAsa4sDB_SaJwdqw})@f6p;4~?lQkrtIQ zaW_Iez=DP5qf3O^ymfAM3U9*1{OaqwUA}9yS&3Hr7XRt4hkV zG29_`EC5rfp$M&6U+CM4RGzR$wY#ZsPab5+ZPvL|ks`?yKsGo`~@F#}9z7ut`%^1>vDS zR;wl7jOj#6*02wy3}*IIc}B@W;gPo-Di|h zReHH@4iXJ17J8Y!@96)y;o)F)xO@;B0vbc@L@G~qcU#6-tGAeb&phwvNn%`_J8b^|>8LN3J}U+2tpxg75YtxA zU^4_11UoZ_K?*2fNPIgaJP(4ejZ=`LLfopnKjLLagz-z;;uetb2w*5>G#;$gWObdq}E(0PJRC8B6}}N~8^pZwSD* zt98(2NIf1wtoB*4ve@F8JNSLnrl(Ss3$Jq{j{_fLz9Ewd0h z-TTgg%S(S%EGkx2GYT2jJ_Q`UTkrwZie6T)i`*h6xhs5ipJBOZ0~BS(ehpQ?Z3bf>XSPq%XG!dvyxlXS0pPMFqk9U}_I&gh>ZEQ-6|e3GSx7 zsGXWoquEjPqAbkvT@dowmi`)^`n$YaVu!WQ-pgF9-H&)w7x0~L%}1GzchvoT`DIJm z7HMAb|L(XoegH=Y2jXO5rX5OmF*`O}Q3~C{?z{2S;&zGf z)9FIlzz1rPl8eSpoaJV&vmuUu79%LC#2D%nh!DI!+6_BMh&cVsc&#hl<7{7FlvlAr zuwTT8i$_zhIsq~1$_-{O;jX+e!M8Y>vgm}kD+WPEQ_7r&2|`|Zr}07>c&#i9X!;1m z%BB|t!jtx4F4A!3-x0IucVqV@OR3h5xmHKHb*)>ic8b3im|&IP0Wn|ULu9tf`O z^B3A5K)c(`<4$^eS#rk0{P*~%am)7mvlD&j5t^_3Vrag@?YV;L(<1!#qtWA*%U!ZE z>nw3F2&k@z21(?sweMMnuq(veF!O{oof?P2!h<%|29ssV=iQLP=F*PT3x zp!~rBHaYNZG7g0O$(vc+SMgxTMz;l>o z$;Zp&g{AgcSB(0BP4QKnm>f4?#o z_or7+38Fy|Qg}$|tsZ+lVVOg+F`;gdl72m3UXmm=8mK!gtXY~3M5@p$%F|Mgc+qUQ z>x}G`#~LDkM75fhJB>mpwNP~^54!O@IklcKKz6Sp*hE=w?cDX7>%PhtVUhE7h&wO7 z?Ul^!FM1a=#~#=nFaC;(>6KQ`;_uE{6qI*iuI1*a!GCk;LZpa_v9K}gLnVuSZ~myj z(a_~OV!D3cu;sD~H5bq}??9zIJq41XxcB;O;N*-9jMpHSDh;&EF~36=nco$nEO%Mu zTEMHZsW-1LHj1{b!ch_jA{dddqgg9^^5%9b#v&&Q3)a{x7h8L$Cz!$NV;DsW zHyMY?8~YQ*BT3j`2g$?2fS4IVCaP$J#z!y{DrKA2t}L(Hc~Ns1U^oOL1clddSgCP! zgu!SgNdzvV00e81iJckzlkN+Jwjdc}2r36Xkp53C02(L`iIimtGX!D2u-l$5Q~Yx- zQrsvd(+?-I2F%h#8vRO}?5~r&>7l&H^lNG?E2Je2jw5=`*VOJAs13;Li*?pC@)6_? zB>|EtCawe*$$JJ#&4xF}S;aR* zjQ%r;vTeNJ$n*^2J|qPo<+d9~eRYaTMnHAd2erV5WBEA2xnJ+r>I$W_6J#NRPV1_b z@M1;$o!DTc2nL5CpjHA787K2&-KPwx)KH)8-`-*Of(GtNyaY))kALs04eS|?Cf`ga zqWcK-YO@I3`LdSk-HM-{_b01k0eo0XV`tbMFoto_wqo1hip91e<5Ju;P_T5pBX_Ur2H zr6)v0tVW;_YHCQnN(1a!q^5}2B}Oxs)7;{_KqCa41>#43&Sqt3RpB4cA1m*)ye!v! zLSkZ$620X#u+VisyM-tC6A6yrIJ#S7wu-ShzI8Uuj!SS{Xn#l z|EUdd_%lC?P%r({@UQf4TF+mVbHbztiieh4jCz>Xv!X3H3%_cqN5TpAgZEDlFfJ#dYfe4Y0I=KdAQ-!{Mn<(# z<73tCCDB(ehY7gWGFB0BKrGTmg!{3?308CWNPn&qIUNtsr1aaA=^_To=R60e z0LNazSedNtYraz-)Ug{FsS4;AwQr)T;-Moie;cC{ak`o8_iR#sui&LH*23=h>t^^6dtFHLkRx7X&3+$5b*Rneqv z$^F6%8#I4w>o87W^O~v5_FtCuWD?&i!oJ}iP5cbB@Zx-)lt-rQ@jHprcCQ1Q&P-ks zMLWr3XF}>5=bQWL)62m1F~c6&6^fXJuUp23!w_MGvDPMg4gdRti)Tj5{wTLKODyIg z8A2Nyg&hPOu9KCpbl-tX4SpB7G`*oh_6@rwy2t79>xuF0f%=D^WS;9=Nwd*hhaF!Y zBNPHOy9eru;?dcLMm@6d|D1FCA%l-5bZZz8Efo^NK?y*wf!*gj733l8xX*s(Teo6y zVs-V8L0Mo z^HUf(&nAcauganwd*zL?b&o^;I0Bj$7U4SHYL)H#>sB!#+5Lkp3cgg!S~? zY;osl8-Mhzkc9EL!fO7^R{?nQ>_Q~C_4h&>VWOrzWa#5X2A6ln%C}s(PYC2v#~)h6w)%9_va{@MV-myl%4nq1X`3^ucOSjo-+s21 z<8rzx1bA65SBoOzl*rgqfJa)3%UwRc?lR%Uaq~uh_v!1gDe{VL@23pKj!IM#+ddD~ z`_6HF;o-wX0%Ps!e4ddYl_fd3OaB!m-lfylcco@LENnsl?rsZLMNc;zg6SEZ>C>a- zUegoCD9O>kO8H+xX5^s2o^~Ic1dy{cau- zeplyXbot}sN`_+kNP0TPW|m~|KNOMoUPoD8y^BL2QmzLvn0!7YbON|JT%07Kd@@&2 zHUKg@H%d0r;9g6<8MONnsNgIw-x=g-d=FFn#>8-=W)hI;G5wT*BAU)b56XZ#so06A zI=zNJ%B#Xc@p?8PG-FS!_d60(qLY_`z9cD1k;Y90Ce2sO02P=;3L*fQ0Tc&cQ2^X4 zio<7;67}!D-5vbpTzCAmXGe9~y>UptPwML-{U1TZ`+6ME`kr9(eA5OiDIGSfuBeQbEU8}JHcK&n1k1h?*NQm+; zlA5-zWWJXVJmv4gB_W=*{{<%F<`n5Kbngo94id{~NUBO_KGf9oO#kkTlV3N@Y1Qw9 z-WI|#5*H!;PQ>@l6;HdlE(+T`RC-J;zNHH?ke|AqyYDBTiYXG&aeyGvvj)P%*KWwL z?XBNK%MWKLz!AmX%Vn`1x;qUpQ_gXHuQlWl9K^q76+QyZ`#9R+mxRZJI$9du@0wWl zm1c*F#$gkhH{gH6xy!}s_2EEvC`q#E$|rz>iRGjRjep%Qj^@0BP4DEl+Plv86S1p? zX?9|}IM!K1g!@~qVR&M28&v$z`ba%$Z+`6VSmk z9!~Cg2dpc|M7Sa)2U5CKwF^gt=BxxjBuy9bEisKyDAMqHC-%=IuE6M}3i3gXOrr6m0wW`;+ zicfaTT+6PcBCKP|BA4fdZ4J|w2Jip!(rD|ZN8+f!qcv29Fa-&S%z`AqI@6898xjxI zq=}LW7ZT%EBJ|6JKtJIIL^p@I2z{9a_ufsn_dh87C&oq4C6%3HsB1=eZ7hLr@p8}L z5rg8-e%AqR78dZq{I}nmEl0}fzSq|-9dy)$Cn;$;@+YtZZv^DNP+4U7bK4E@h2?Rt z3;>d`A7F0k8cDG40Gvty%~dOFaD*DlT_Zf(2w)?6=Q`w8q2 z0^#?ha6GRwa+d0H*FV@vDI$ZePQnV~E&B}I7O*fyoOhkO``b;WRGY1RcIq)AkA48>>aRvq3XC;^Z3#@LUa#^FZF7k|| zpY5I)u~@tPYg9-VOY@NQ8uY>XWVN-eL5AxSv?K);0NfwLHbJ8j8@H%rMK=$J39IU& zM{)OY*nBswu^mGoPhkD zR8It$g}3ecrJ>o~)$VJp6FZ5?sB4|3j)$V;AXq3A18!uFs)73l@Xq|1P}9U(q;A+^ z2Z^e)@|@diGUY-^c>i{5)p|{LF{PQU0mq{wpg>i09j_7j`1Vr19~YUPy%93p#p5(?yG ziTlcFx_aPGW92eNo}dM!*^-XO=t|H^#3IM%@c=^HLSD|05Rl11=DD}>6_!T>-G^UY z)R+(xLdn&xC7uwB+Nb^lo3}cc*VDr!4iPN|wNi58VQMFW+sL?z1VtlN z3e=_$dQ8nzMMlL%JUdAle*=jZ@Rew@TuoaHsUNIzXu*3wU_-r-no_gHQAjNaJ<}0i zN6Em|$prP6q_^Z_Afm~=ZRzo$SxkDXag*}pun~`BBLs1WBaiP%L$%(YcQEe?D{7}# zPFa_^fyMH(``P*C6djf1M(qQ#=%1dUIgw$7&lkY`cm=p@qb)Mdh(bqC zJO@Xg-FOZ<`)jIm6j?7D`GC)poz=fM4_fVQJ}PMA7o;=B6-DK^!I|&{N_&{p`3M9~ zh&@47H}<(v37WgbhAv*wW^UcC@`dAn=5~8s>qf{yAnQxluRZadKafE~Q@?!~z8x45 zotMg4j;Md0_&C33sO8<`>>B3}cX;60?&qyt4q9p4;ZrlEKHhM-sqyeKG_hU%biakI zE+TmPEyizV)9&EA;oLcxeXZ=2QGK=fG=DEp2xoa`9P6E7{_}Ho+W+hKoS#xk#{M~c z{kz@5>igQe){2N%A&;Vc(%-C)v?+kBf_sc}$Id}qV|aBpK4W#niSKy@RuV$)_CKzV4NFIF`Qw=kS1#6^%tatimzL90gZ@ag!crI>uGFk(^EU5~lk0G9g^KHj`)I%Il|J+wK%%(h@DT zO&uM*`IncM9dg9kIcuDpIXO9hP>PsIAW7J_zLl~c5oF%9!VgFp& zrduV2{_W66w<7zH!UyzHg5 zHId49*Cwui|2A!)T8&*ZBm|@B&0* zSb>99%S|72XRAf4BzhHS)(C+`=@O2HR$&R`|KYmRst8v@FS{tdclU&Y9}Flk0jl@X zd;peZ@zwfre80f795$FJsV;S6hOg8#9YZCvmN|z8{eCjM`qFAFGZWFTKl5QIkyhd) zz3|OoaV74r64jZ_$m4Ntvh>j|2~Nfc%MUPWpG`9zi7&pq7a09CO&&DzX02jym#J;rn%GmXcy3P-NZKnApMn(D%&Sp*&6HyN9#En5PclnogAClh(F4p|YtY%B zI%(mzVRtySs8sSm)b<9}21%DXZW$4I8H7!9bCmCldPtHwHH0OP*YWXGZoAUnL5 zSh=|A!QfcxFm`v>>PFF@)#t(kQy!fD7u(BzWmkW2+PkLVpeLTgxzP6AM%4Lf? zuOJ3?93GxH_hR4xrZr9~St_cDo$8=E4krW$y}eFNwugydBf^)Mf#r+jK1q(T(XZZ3 zsqFph6OfnF*r1xdgKZU>AiX;VY^4M%Mc}ch_J-jwLhxc2x6M53*-k8&=|G-8|!Cbx5E!z;3nk!Vx5)cGy@S&F?5d8B|u?}H8?HTTI5+9q;#nt_Iu?aK58tQlW zX{DG5684!+hk~wPTcvm?SW)4tm#$)y3`}kYbrMms)93Mj2N!t$0~NeU`2M>uvA*KH zR6L5!*LYwVfwtBXX8f-OvgHblnZ#g_cTh_?X`-m4aU(L2lM9s~X*6`AEJ1H?Qd$gq z^0RO$rK#`jV`gB8OhaKwcnR1xdp25|^y})gRpL?;UUV1`s3;dZ{gq{7d?1$FkPwjYe(<}O zBS0iYz8#e|@RmnIscb^5mLm{SQz(%8`+MAODnHU5!nhB6@7wrF_oPH~DRlb@YjBmO zLcIhFKIl!?dJx43zWT3n8V#vQSO1X4W9o~hwJJSz^_D$Nvw6j07i zs^?--vFY)Gt*seAwjxSn7-)sNDWVm~oePeVz_T|Iqbn}nEme04Ts$>>K<9P5+4*y*P(b%{_i-3QJ0J(r2$;rmyC zzFkwowIhz|Z$G%Ws4oST1p3ET<}y-0hdFmNg-)ulVc)O z5Ic=&Zpl|GIn%|ueAH6LMp1TY_--L#Ij)L^POaa5a+a47$Ddd~Mt#GaEGpI%Px(d- z+4w}SPY(Axi9*(NmHfK{8+jazjHrU5uOzWB-Z7LUOx|ry_qx6=4TPk1I|tN!Bu{M5 z8!&2hE7e5>0bzK))3{Hoqn}wwwey8EfA^+Xk6t3CWz_~F%}w*yWVol&mV0{3=FkA9 z*$1?|*LiZPfRrdaI}3gyb2zi;g_u#3qY{HFPjB$I;`66%mVbLM5eJbjGKp7u zo)^ND{(l!uuzle4?HvhJ2VZ2ui#s;gU66uj-5m88o~rVp*23rJpEJAPc)j-rV{x5s z7wIRwTVJ61x^1|fQ1#kUrmVQIQ1&+*uAz2AoKS|yeed!oW?LaHCTiZ(OYyS#%gRot z+pm|`dq`a5u$2bveEQ4OM|N3Tzjw4G9v$$WAR%J9C?`ig`cpM6C01cVYbzC@S!0;K za&$}KtIX634B%k#%T*YDQs~f;efbhZ5u~uIqoUHLqM}mIx-isU_%v{*)*bkip}Wr3 zTx(<;{9npP#MtCxQMlmC!&ZRQF1dQd+owy-icxJn(De~{f6@^RGV;j>zpc##-fA3N z9%{Uua;BYBAXn4PT%9XYl-TJPmfJG2cP0Lm%Fb7PQZN8aQ&J2Pf4|vlF^!Ln!>ccG zHMLvP$zl2FUuQr3CAK#W$;B5TcA1Rhnkfo_DNMYbE*v)c5if`##_!gR0sb3VDxLA^ z0yv@|{K9icY2V{Ht^4HsPO=r;zUA8(;MI0BAM@}uo!h_J4G|R1W51w;^`HH%HR`68 z^1Uw{d3c=X*!~Z+`#p(Vh&@eX0vr`%Es%+E0FFat{6k1XOXPphFI_WKRJyPebN<7c z{iQo4*omtw)nwy}oS7N5Z|Xvtij8ydVic5ZZIxRkK^_iM`9swHs_d0-^zZ;{3-EgX zo0A9Yb@pzO%P`<5g>5lQd11H~>_vv9I@oL>J+s#Aiv#jdI$N`Ir!(@<@ybH&hG5U; z2*#GQ-w>U3`1!Q>+Mu1~xgW~ru->}c=|G2mNB#>Bi1jkVMm1)E2y-8)<*+RD3G=;UsJ>{8)n5;|+6ROGfCVdlS zOQ}M_uYa!!Pq~(RphD|R^F;TA6Jz!HgSI4Q}mv z?L6C7XST(~yQGJctgo&5Mw#hNUaDX)4I-&ROqEB4AJAGTeM+$l2_H3)2FO%_JO)TSXq!f*n_s%W+y0fe_Z0Cs znTKD7$QL(`m@8QbTkv?=>Eu| z+e##P$bOF9?|h&`%*JFStHG0PmWR=MtHFkXBIEOso*9@(i5ql#{M+Y@iQ*YZ>~V&U z&SGzGEv<;U$FlG|o7*Gp!6s}j+elGL2#I!PByrjoEH0^0H}MAPCsPCcp6362F~cA& zfrUra;G5X6591EqbMGq=LhXlGghUIhKGhZHbRJR(i zA>*i3!+mT_8`SSX6YvPW*~E@CNB54N03OMWC)kndO3He`0Xo(TK-R5S4fE11zyUgL z2|zx-bw!nT9dO)6Co2HCdfi|;)~`n+i&mCgoqSN*=FMnioiyYrZ*`19ayB0a{cJ3j zfA(zbnP<-WN(Z5k)SN_KO)Pe@rY4q`SK})kghG`BDTa3J-rccV4ab{7w6da6$q@tSs!psi8Lg~n zR8qwNx?#x1bqXf;zFdg^Zr+N>X#1#o48gL(6 zT%aVr;Pc1^+LcspS-7}BNmO)@5D!5He^=5$LOcW+{9Q>0-M&6F1Tuz(uHU|W)ig+o zH!hsw8V5;XM>jc}+)Wy<^9<8*)*I3U8qb{dukm?IhhT&8r~w`Rc^M3bV1x0<1s(SL zw0Qgry7AR9N|9ESzDhZ!H~^tjGD6zALTv}%>1;zujCJHdMSOp?RM0_e zLrIKvq(VhVIfJmC!9aiwWnaU2w-^ir*ubCEdDj^X1PToPq$z4CVfGw6MylT+y(x`7 z$0oi>y5`wH2eZKiM$n;p4?zdB!39Rpp~?dt%!Vj1%O)Tk!*uZcEWC%%4CP>3W+)gG zXk=#UEGf-uXl)f}%$n7zrh|t%SUm(C%GXR4LmjLhf)3qfhsq%tOh#%srLJ42oL`|U zkPIf{^(*xH=btO*R|v%fYygYfG;~!b9WWh5MM68m`f;$d%?A!}RdLd^<6u%Y&N3Z* zr6pyal#LpuLwBEWlCqJ@bf8(8&?s1Zu5B0&O}XGkC?JeZ#>#wJfG#e8{LrO=3q(fCt zMvYH|#4wq0@*He%SX{>08}+csOHMXlB7)eA!h*PD$YV1K3u4S;GYSjh>Hrp=6wR!8 zGM=CsX=I$!CPJ&CYGX&`p;b|}v7_?Ps^sS0#qD^gK`!F3xqT7wSZUBEuT@=C#tnK{ ztp=mUREyPMBxY93zY2+&6^lGEvtp4qiMPBT77&{}77&{}7LcU7hzVZnWm2x$eituq zm-l_G&7I6!-cSC!lGtIMh(shJ5s64dBEEY+l!zY@8#63DW;P{Y9d3NcI709}-LCw{ z4F{>$5{=G#?m6>-Rg!JbY1tI7U7I0C!RF0-N;kIH)wNybojkdMe#mUt!9m&C_o9m> z;!%2=ooCNIr>6r4e2D0G^1$l`b(5%wXrVDru#pQmfCbH4x>N%Pb?pWmz=BSOLO)?Yu_$-8uk{u$Ze#Un4K8DHi(+6p){c_3qGsOERKYuf395BO7+S42fcp@k)( zHYzRUPaPWv0Z02&^V*+UI&Yq&!}k^eT`hoP&We+BR)kKTlyv+Ms|)4Kn9;(3803Sp zva?$l5QBUGjZ1V_?}WFf3}EEFn5NMVFArdBeJ)L{9W=CNXlPAMP0div2OoUUj)!7# zPSF=dMPGzMp`uV}X=xiC>IHxqU;}V0eF|(mg)d8SuK4H&Z3i2GBeVi+tiYEL@_tzQ zAvZ3A4UYJ-THpJmdTelHW$7=#4K`*t4&8-z(7t`LNaul!G_`c_xh?Xxf{Zk^bP%&K zG{k_kf6(3zI%<5ygP09onEOSjt+cHTbc7V*!EEH7fpCC|r{otrmXaSEyFY?(fQl9J z3mzf*A=z&dJU}xXCnv|#4L@&6f(K|uZEaSTryDA7N;59a=z(@P6ZRcM`})(Ek30xR zUYd{&|K&ubZE4KMRtU$|G$9>|pGAp6?%shdEf&9Hbh;aF5jQ} z114kW_V3_2P+IWW&emi6dG0b9=_L!{Izs9E*~ZpmeBRpj3>XfuA((h-o**%Y^?D#LNf z?GboPP&&jxPfP3X?@wbx%4LP}-Wl&+ygcZC8XHnBE3~!CCyz_XoZIeg(DA#PHFJdh z_+b1c{mD&FPj4x4OF+lMP+?1YA?ydr%Xm04+H*6&M!T#g?GO-t_!N~nySIalIkK9} zfq?Ks$wsFg9MoU|2fa_F?_0d{FiPv6GUN$59LJG#s7fTM?87LT5Z zN(c3)c>y+1R%C^FXPkOaTRabJpsdIW(=|>#sJ*=(XQ?udN!9k7{ z99!Oh|JwUopb4d=@9SD}{0>W=TI%px#-}uNrH=n%?Pe~tg|2BDB}(j9e_w`x0-AyE`~2AW=%YC;yZ_&7 z+XWQR419m>HJxr;xL{FNpc@-D80!i-Ti)NY<(lIFjV(Gh95h)=mpBg4SgK~jnUND0 z4aZU14gwfianY!)Rof2y?|8CHEzYH$OEV@?SSU~U(RKUw?UQKmiftgnrgW5aY!!aA zs{ewf&x9i5TWx0uHaH;96Jg^WhGRE_u`i9u03IZ_ z-j6OTT?|JVgHf8sWB?B@Z+uzlKePt@E5p&xk3%Xra(dd(q%a&g{OIwA1FbgVZ)=5O zKtRBT&qiQ^yLb)J+$9tP0s=O+Z&y{}3xK2Zg5wyPS=sQa#8A z4jzd?JpmPGU^XBg?Pq-9K;CPpC!pdZm<@=>oR8FSKr}9p3*Vvlk1QG+khej9`Ayn_ zx&l77aJ;YXX=y3y3iw#c@zi?dRnY!4g9pL*gok!Gjxz6oY#s#5t`*uLDvMv5>s-qH z^lI)5IF1?K42#`RI_(1$dC-r3Asg!iA%5Ca3M#fjKiY(BR0%>~9ZJ8X1HS{* zgZ!nV5ZaL==^)@5 zipIawak#WFA=-1e!Ev~>Fd>c>4(Hky$7ML)*N<~JOO|pT&je`bKv8kLVK8y>`1=kt zvqu>SF$_k66<^V+B3buS+-1Qp)dk?#A35($~0W5Z2~=8Yd(Gvu+M-M>lch3Os}`l~stjqAmkwc5O{ zxL$nJWggtB`@<2IjZV|ST%Em)Wuw8AcTGA{)BDb@gB__>hIn-2Q)p-EQcKF zILdO7<&AZaujN3$0<|Cl7Ck_uXCl|d7qz5+oy{$4sjaQb^2Pu{LHhM{czHcNIUzEp zjiAJo*R|caoUO5w{=lBJ({xAq2FhknY8*kQYXT4Fnvo8HhqFXW2P*}Sh4D~__tyKJ zvbC%fJQl`79hyAvG6h^$dYp;Q+WY&A@p)>W;oH!H4hxiWP+fAYYT#N+Iqb5#M?KYb zcGi(a-s*;i)n+Za#$horyM#kOY{KKBd`M^HD5u@x<6t5$J4-$7Hm1JxOmyXv@EJC6 zu+OlDV@TmceX2{L9UFGnqp=WLNnR*8`RfizdFkHqU9II>qohRqNMf=t_>qVo6&;g&!H@6i$DDl4 zOzaf?u^{~5gLcDeDJixU+O_l=Zi0?~Z8Ye?-d^Bg&f`lhrdUz5zNyJ7@0EoM6L9=X z%SQ5pV564|nolV=_zKTqQy%|!k=qosX}>PG3v&~2eDC6*8Es)S{Mi^)ZAe`F+n0^8 z)y7{qe5M|Kg(FdD?kyU+VH6<1;SWdhoxi7)6ve$b@Gmz;{yl^v*yJ+{Fm`nmgd=yM zPu?pDI_@1C*>Wep77o7?xOdb)kb(`O@R)yqaQMN|H1?vy5Dq^$7P<*K?jajlj-$Co z4Ee%=za1F;59A96{x*3W9KoPpS!r^MMpvI#a&!I4%0l--f{uH`Mpib@>}9KWVUK~s zyVi;aN3Rl&c%Fn~q!;14y7|K~S~|#8!I6-TdnFulL4czkpeF&r@T7PhJ_H-w!;F*^ z5)cgMRp3Lg5gv2J__1(!6D-se98JeqIO2H=a}{)W%K$7)mR(+g4TLM!w=0*lQ1XMx z$#L-j6_?-Z#a}(xJGR`=jg%WV;^M(n)Q9m`DPt`M4Cx~y=pYKYyzmuljD_REBO~Y_ zIxX`S<|^P2_f{o(+PM7UoXCqM=rF@kOX4aIwJPbLI!0r-Z6y|xI2$87T&iF+hTB$R zA&Ijwy2B*_hnMEM(Zg=kbwdot7)L7L7|!c>)$MTI(+r22jgtdUUnUDS&V^#Z1RVxA zYU7uA$f{KdN1b5fz2UVn)O$Jk!SM|);9w5wD~9vJ$v0B`8eEo+(BZ?vk}w&EqxpxU zp>fI~q~r9fuZlb-5VK)~qa{SlMgk5q9ggemtaGycmyp)I7iVMG zPWZD?A7^7Y&z}vZBNPG;`AEgL!}!c+HiF}t*$byngNL2S!?#!Qxs%yYm6d^6{BhYx zN2r-Uf(bf|-Yg4NG`q#&ty8{*h3a|*8+AaZPVTDm#>Gb88HXykfYdivAg{v9lW5%V z={N)s(GcZF^M!CoHpZ0;5XnV{MRqgtXW_KF=&9JxfyIAS`u*R8(G1I z*c($@>%SSdPO_2Qi)upLtVlM--ZhCTBpWxvs3yeCie%%)4L{-zvtk6BLiy2XJ|Gcn z1jpZci(X~L$X$4PXGh0QKqA;s3CAoi2KD!cVm3syG$-KDy-#kIQ=9$76R0T;kA?Xv z2iK6gH|oF!7n1j6Nnt|9z`-@7;)@Ef!G)w=mJ}w$_eer7f=x|KM?TPyY!vxO4D=#* z;X`*#!Q}RYH(Phz} zc;lkn($d(m&@g=wCK4l}VQ*ZNTUuW_@((w$V1)8LG=l!O?1R}@2r4d|-sz#C8svah zF&lxvfZ@h+)Xr>_mWC3-VWNZR=mQTt`UGUdyWS~fj~Pm*fd_lv=p}Ecv{#x9kaBq} z9LXu+FT&&vm4>C+z+d{`wU0tgp+~rycqIjF_-^5|QaD`q!s%C4J@??Oir~qL z!2!dizNw|TJ$SCYC3Ns$0uDph?>z9p6HmZz@GflLSC^GN{wfdN_(t-B$xkvKmwS`P zvvDUcd^6={g~a2Ak`0s<)RkaUAOJQV5xuRSzBY;WzXv zwY3f^3Uh(Z1rNY()mu3s9m$uuu4oUE zkd7P4TvrqaU6c?S6m$#@20~GV$rL4o<_kJ*-kg8B!*Hjj0j6WnbSG@05Yy4poM>2# z{R)ZeJ!J93tSR|P1pAF%!$GP*u-^!)%%dmop~1nyHUOe5QC`b(8d~%M05Q(EJ`Fr< z?yMaH9*J&c0`;ZVVkt!L09q32HP9g@-H31S9wx0ZwkYT%H0FT8O2G|^29IKbuQ zr|q^h2NQGl6R0mXTP{hCZqQ{D9CCDnlJ#&94^mPf5Hi4l53VlrPh0ILxBZP1N8KKe zB>OwXlW~*N@Q8=aC0w8&rn^4I6(n&)e+WV|iFwo#vYO_g7f!#BfaBlL6;EnjBJMu^ YKR{l6vK5&s_W%F@07*qoM6N<$f-{^hDF6Tf literal 37450 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 DuuDNg diff --git a/public/images/pokemon_icons_3v.json b/public/images/pokemon_icons_3v.json index 2500eebbff8..e18ce672c4e 100644 --- a/public/images/pokemon_icons_3v.json +++ b/public/images/pokemon_icons_3v.json @@ -4,8 +4,8 @@ "image": "pokemon_icons_3v.png", "format": "RGBA8888", "size": { - "w": 520, - "h": 520 + "w": 560, + "h": 560 }, "scale": 1, "frames": [ @@ -297,8 +297,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 30, + "x": 520, + "y": 0, "w": 40, "h": 30 } @@ -318,7 +318,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 0, "y": 30, "w": 40, "h": 30 @@ -339,7 +339,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 40, "y": 30, "w": 40, "h": 30 @@ -360,7 +360,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 80, "y": 30, "w": 40, "h": 30 @@ -381,7 +381,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 120, "y": 30, "w": 40, "h": 30 @@ -402,7 +402,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 160, "y": 30, "w": 40, "h": 30 @@ -423,7 +423,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 200, "y": 30, "w": 40, "h": 30 @@ -444,7 +444,7 @@ "h": 30 }, "frame": { - "x": 280, + "x": 240, "y": 30, "w": 40, "h": 30 @@ -465,7 +465,7 @@ "h": 30 }, "frame": { - "x": 320, + "x": 280, "y": 30, "w": 40, "h": 30 @@ -486,7 +486,7 @@ "h": 30 }, "frame": { - "x": 360, + "x": 320, "y": 30, "w": 40, "h": 30 @@ -507,7 +507,7 @@ "h": 30 }, "frame": { - "x": 400, + "x": 360, "y": 30, "w": 40, "h": 30 @@ -528,7 +528,7 @@ "h": 30 }, "frame": { - "x": 440, + "x": 400, "y": 30, "w": 40, "h": 30 @@ -549,7 +549,7 @@ "h": 30 }, "frame": { - "x": 480, + "x": 440, "y": 30, "w": 40, "h": 30 @@ -570,8 +570,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 60, + "x": 480, + "y": 30, "w": 40, "h": 30 } @@ -591,8 +591,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 60, + "x": 520, + "y": 30, "w": 40, "h": 30 } @@ -612,7 +612,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 0, "y": 60, "w": 40, "h": 30 @@ -633,7 +633,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 40, "y": 60, "w": 40, "h": 30 @@ -654,7 +654,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 80, "y": 60, "w": 40, "h": 30 @@ -675,7 +675,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 120, "y": 60, "w": 40, "h": 30 @@ -696,7 +696,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 160, "y": 60, "w": 40, "h": 30 @@ -717,7 +717,7 @@ "h": 30 }, "frame": { - "x": 280, + "x": 200, "y": 60, "w": 40, "h": 30 @@ -738,7 +738,7 @@ "h": 30 }, "frame": { - "x": 320, + "x": 240, "y": 60, "w": 40, "h": 30 @@ -759,7 +759,7 @@ "h": 30 }, "frame": { - "x": 360, + "x": 280, "y": 60, "w": 40, "h": 30 @@ -780,7 +780,7 @@ "h": 30 }, "frame": { - "x": 400, + "x": 320, "y": 60, "w": 40, "h": 30 @@ -801,7 +801,7 @@ "h": 30 }, "frame": { - "x": 440, + "x": 360, "y": 60, "w": 40, "h": 30 @@ -822,7 +822,7 @@ "h": 30 }, "frame": { - "x": 480, + "x": 400, "y": 60, "w": 40, "h": 30 @@ -843,8 +843,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 90, + "x": 440, + "y": 60, "w": 40, "h": 30 } @@ -864,8 +864,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 90, + "x": 480, + "y": 60, "w": 40, "h": 30 } @@ -885,8 +885,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 90, + "x": 520, + "y": 60, "w": 40, "h": 30 } @@ -906,7 +906,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 0, "y": 90, "w": 40, "h": 30 @@ -927,7 +927,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 40, "y": 90, "w": 40, "h": 30 @@ -948,7 +948,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 80, "y": 90, "w": 40, "h": 30 @@ -969,7 +969,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 120, "y": 90, "w": 40, "h": 30 @@ -990,7 +990,7 @@ "h": 30 }, "frame": { - "x": 280, + "x": 160, "y": 90, "w": 40, "h": 30 @@ -1011,7 +1011,7 @@ "h": 30 }, "frame": { - "x": 320, + "x": 200, "y": 90, "w": 40, "h": 30 @@ -1032,7 +1032,7 @@ "h": 30 }, "frame": { - "x": 360, + "x": 240, "y": 90, "w": 40, "h": 30 @@ -1053,7 +1053,7 @@ "h": 30 }, "frame": { - "x": 400, + "x": 280, "y": 90, "w": 40, "h": 30 @@ -1074,7 +1074,7 @@ "h": 30 }, "frame": { - "x": 440, + "x": 320, "y": 90, "w": 40, "h": 30 @@ -1095,7 +1095,7 @@ "h": 30 }, "frame": { - "x": 480, + "x": 360, "y": 90, "w": 40, "h": 30 @@ -1116,8 +1116,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 120, + "x": 400, + "y": 90, "w": 40, "h": 30 } @@ -1137,8 +1137,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 120, + "x": 440, + "y": 90, "w": 40, "h": 30 } @@ -1158,7 +1158,49 @@ "h": 30 }, "frame": { - "x": 80, + "x": 480, + "y": 90, + "w": 40, + "h": 30 + } + }, + { + "filename": "299_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 520, + "y": 90, + "w": 40, + "h": 30 + } + }, + { + "filename": "299_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, "y": 120, "w": 40, "h": 30 @@ -1179,7 +1221,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 40, "y": 120, "w": 40, "h": 30 @@ -1200,7 +1242,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 80, "y": 120, "w": 40, "h": 30 @@ -1221,7 +1263,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 120, "y": 120, "w": 40, "h": 30 @@ -1242,7 +1284,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 160, "y": 120, "w": 40, "h": 30 @@ -1263,7 +1305,7 @@ "h": 30 }, "frame": { - "x": 280, + "x": 200, "y": 120, "w": 40, "h": 30 @@ -1284,7 +1326,7 @@ "h": 30 }, "frame": { - "x": 320, + "x": 240, "y": 120, "w": 40, "h": 30 @@ -1305,7 +1347,7 @@ "h": 30 }, "frame": { - "x": 360, + "x": 280, "y": 120, "w": 40, "h": 30 @@ -1326,7 +1368,7 @@ "h": 30 }, "frame": { - "x": 400, + "x": 320, "y": 120, "w": 40, "h": 30 @@ -1347,7 +1389,7 @@ "h": 30 }, "frame": { - "x": 440, + "x": 360, "y": 120, "w": 40, "h": 30 @@ -1368,7 +1410,7 @@ "h": 30 }, "frame": { - "x": 480, + "x": 400, "y": 120, "w": 40, "h": 30 @@ -1389,8 +1431,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 150, + "x": 440, + "y": 120, "w": 40, "h": 30 } @@ -1410,8 +1452,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 150, + "x": 480, + "y": 120, "w": 40, "h": 30 } @@ -1431,8 +1473,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 150, + "x": 520, + "y": 120, "w": 40, "h": 30 } @@ -1452,7 +1494,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 0, "y": 150, "w": 40, "h": 30 @@ -1473,7 +1515,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 40, "y": 150, "w": 40, "h": 30 @@ -1494,7 +1536,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 80, "y": 150, "w": 40, "h": 30 @@ -1515,7 +1557,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 120, "y": 150, "w": 40, "h": 30 @@ -1536,7 +1578,7 @@ "h": 30 }, "frame": { - "x": 280, + "x": 160, "y": 150, "w": 40, "h": 30 @@ -1557,7 +1599,7 @@ "h": 30 }, "frame": { - "x": 320, + "x": 200, "y": 150, "w": 40, "h": 30 @@ -1578,7 +1620,7 @@ "h": 30 }, "frame": { - "x": 360, + "x": 240, "y": 150, "w": 40, "h": 30 @@ -1599,7 +1641,7 @@ "h": 30 }, "frame": { - "x": 400, + "x": 280, "y": 150, "w": 40, "h": 30 @@ -1620,7 +1662,7 @@ "h": 30 }, "frame": { - "x": 440, + "x": 320, "y": 150, "w": 40, "h": 30 @@ -1641,7 +1683,7 @@ "h": 30 }, "frame": { - "x": 480, + "x": 360, "y": 150, "w": 40, "h": 30 @@ -1662,8 +1704,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 180, + "x": 400, + "y": 150, "w": 40, "h": 30 } @@ -1683,8 +1725,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 180, + "x": 440, + "y": 150, "w": 40, "h": 30 } @@ -1704,8 +1746,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 180, + "x": 480, + "y": 150, "w": 40, "h": 30 } @@ -1725,8 +1767,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 180, + "x": 520, + "y": 150, "w": 40, "h": 30 } @@ -1746,7 +1788,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 0, "y": 180, "w": 40, "h": 30 @@ -1767,7 +1809,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 40, "y": 180, "w": 40, "h": 30 @@ -1788,7 +1830,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 80, "y": 180, "w": 40, "h": 30 @@ -1809,7 +1851,7 @@ "h": 30 }, "frame": { - "x": 280, + "x": 120, "y": 180, "w": 40, "h": 30 @@ -1830,7 +1872,7 @@ "h": 30 }, "frame": { - "x": 320, + "x": 160, "y": 180, "w": 40, "h": 30 @@ -1851,7 +1893,7 @@ "h": 30 }, "frame": { - "x": 360, + "x": 200, "y": 180, "w": 40, "h": 30 @@ -1872,7 +1914,7 @@ "h": 30 }, "frame": { - "x": 400, + "x": 240, "y": 180, "w": 40, "h": 30 @@ -1893,7 +1935,7 @@ "h": 30 }, "frame": { - "x": 440, + "x": 280, "y": 180, "w": 40, "h": 30 @@ -1914,7 +1956,7 @@ "h": 30 }, "frame": { - "x": 480, + "x": 320, "y": 180, "w": 40, "h": 30 @@ -1935,8 +1977,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 210, + "x": 360, + "y": 180, "w": 40, "h": 30 } @@ -1956,8 +1998,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 210, + "x": 400, + "y": 180, "w": 40, "h": 30 } @@ -1977,8 +2019,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 210, + "x": 440, + "y": 180, "w": 40, "h": 30 } @@ -1998,8 +2040,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 210, + "x": 480, + "y": 180, "w": 40, "h": 30 } @@ -2019,8 +2061,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 210, + "x": 520, + "y": 180, "w": 40, "h": 30 } @@ -2040,7 +2082,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 0, "y": 210, "w": 40, "h": 30 @@ -2061,7 +2103,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 40, "y": 210, "w": 40, "h": 30 @@ -2082,7 +2124,7 @@ "h": 30 }, "frame": { - "x": 280, + "x": 80, "y": 210, "w": 40, "h": 30 @@ -2103,7 +2145,91 @@ "h": 30 }, "frame": { - "x": 320, + "x": 120, + "y": 210, + "w": 40, + "h": 30 + } + }, + { + "filename": "313_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 210, + "w": 40, + "h": 30 + } + }, + { + "filename": "313_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 210, + "w": 40, + "h": 30 + } + }, + { + "filename": "314_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 210, + "w": 40, + "h": 30 + } + }, + { + "filename": "314_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, "y": 210, "w": 40, "h": 30 @@ -2124,7 +2250,7 @@ "h": 30 }, "frame": { - "x": 360, + "x": 320, "y": 210, "w": 40, "h": 30 @@ -2145,7 +2271,7 @@ "h": 30 }, "frame": { - "x": 400, + "x": 360, "y": 210, "w": 40, "h": 30 @@ -2166,7 +2292,7 @@ "h": 30 }, "frame": { - "x": 440, + "x": 400, "y": 210, "w": 40, "h": 30 @@ -2187,7 +2313,7 @@ "h": 30 }, "frame": { - "x": 480, + "x": 440, "y": 210, "w": 40, "h": 30 @@ -2208,8 +2334,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 240, + "x": 480, + "y": 210, "w": 40, "h": 30 } @@ -2228,6 +2354,48 @@ "w": 40, "h": 30 }, + "frame": { + "x": 520, + "y": 210, + "w": 40, + "h": 30 + } + }, + { + "filename": "325_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 240, + "w": 40, + "h": 30 + } + }, + { + "filename": "325_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, "frame": { "x": 40, "y": 240, @@ -2235,6 +2403,48 @@ "h": 30 } }, + { + "filename": "326_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 240, + "w": 40, + "h": 30 + } + }, + { + "filename": "326_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 240, + "w": 40, + "h": 30 + } + }, { "filename": "327_2", "rotated": false, @@ -2250,7 +2460,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 160, "y": 240, "w": 40, "h": 30 @@ -2271,7 +2481,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 200, "y": 240, "w": 40, "h": 30 @@ -2292,7 +2502,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 240, "y": 240, "w": 40, "h": 30 @@ -2313,7 +2523,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 280, "y": 240, "w": 40, "h": 30 @@ -2334,7 +2544,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 320, "y": 240, "w": 40, "h": 30 @@ -2355,7 +2565,7 @@ "h": 30 }, "frame": { - "x": 280, + "x": 360, "y": 240, "w": 40, "h": 30 @@ -2376,7 +2586,7 @@ "h": 30 }, "frame": { - "x": 320, + "x": 400, "y": 240, "w": 40, "h": 30 @@ -2396,48 +2606,6 @@ "w": 40, "h": 30 }, - "frame": { - "x": 360, - "y": 240, - "w": 40, - "h": 30 - } - }, - { - "filename": "333_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 400, - "y": 240, - "w": 40, - "h": 30 - } - }, - { - "filename": "333_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, "frame": { "x": 440, "y": 240, @@ -2446,7 +2614,7 @@ } }, { - "filename": "334-mega_2", + "filename": "331_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -2467,7 +2635,28 @@ } }, { - "filename": "334-mega_3", + "filename": "331_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 520, + "y": 240, + "w": 40, + "h": 30 + } + }, + { + "filename": "332_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -2487,6 +2676,111 @@ "h": 30 } }, + { + "filename": "332_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 270, + "w": 40, + "h": 30 + } + }, + { + "filename": "333_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 270, + "w": 40, + "h": 30 + } + }, + { + "filename": "333_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 270, + "w": 40, + "h": 30 + } + }, + { + "filename": "334-mega_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 270, + "w": 40, + "h": 30 + } + }, + { + "filename": "334-mega_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 270, + "w": 40, + "h": 30 + } + }, { "filename": "334_2", "rotated": false, @@ -2502,7 +2796,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 240, "y": 270, "w": 40, "h": 30 @@ -2523,7 +2817,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 280, "y": 270, "w": 40, "h": 30 @@ -2544,7 +2838,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 320, "y": 270, "w": 40, "h": 30 @@ -2565,7 +2859,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 360, "y": 270, "w": 40, "h": 30 @@ -2586,7 +2880,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 400, "y": 270, "w": 40, "h": 30 @@ -2607,7 +2901,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 440, "y": 270, "w": 40, "h": 30 @@ -2628,7 +2922,7 @@ "h": 30 }, "frame": { - "x": 280, + "x": 480, "y": 270, "w": 40, "h": 30 @@ -2649,7 +2943,7 @@ "h": 30 }, "frame": { - "x": 320, + "x": 520, "y": 270, "w": 40, "h": 30 @@ -2670,8 +2964,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 270, + "x": 0, + "y": 300, "w": 40, "h": 30 } @@ -2691,8 +2985,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 270, + "x": 40, + "y": 300, "w": 40, "h": 30 } @@ -2712,8 +3006,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 270, + "x": 80, + "y": 300, "w": 40, "h": 30 } @@ -2733,8 +3027,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 270, + "x": 120, + "y": 300, "w": 40, "h": 30 } @@ -2754,7 +3048,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 160, "y": 300, "w": 40, "h": 30 @@ -2775,7 +3069,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 200, "y": 300, "w": 40, "h": 30 @@ -2796,7 +3090,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 240, "y": 300, "w": 40, "h": 30 @@ -2817,7 +3111,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 280, "y": 300, "w": 40, "h": 30 @@ -2838,7 +3132,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 320, "y": 300, "w": 40, "h": 30 @@ -2859,7 +3153,91 @@ "h": 30 }, "frame": { - "x": 200, + "x": 360, + "y": 300, + "w": 40, + "h": 30 + } + }, + { + "filename": "345_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 300, + "w": 40, + "h": 30 + } + }, + { + "filename": "345_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 300, + "w": 40, + "h": 30 + } + }, + { + "filename": "346_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 480, + "y": 300, + "w": 40, + "h": 30 + } + }, + { + "filename": "346_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 520, "y": 300, "w": 40, "h": 30 @@ -2880,8 +3258,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 300, + "x": 0, + "y": 330, "w": 40, "h": 30 } @@ -2901,8 +3279,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 300, + "x": 40, + "y": 330, "w": 40, "h": 30 } @@ -2922,8 +3300,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 300, + "x": 80, + "y": 330, "w": 40, "h": 30 } @@ -2943,8 +3321,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 300, + "x": 120, + "y": 330, "w": 40, "h": 30 } @@ -2964,8 +3342,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 300, + "x": 160, + "y": 330, "w": 40, "h": 30 } @@ -2985,8 +3363,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 300, + "x": 200, + "y": 330, "w": 40, "h": 30 } @@ -3006,8 +3384,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 300, + "x": 240, + "y": 330, "w": 40, "h": 30 } @@ -3027,7 +3405,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 280, "y": 330, "w": 40, "h": 30 @@ -3048,7 +3426,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 320, "y": 330, "w": 40, "h": 30 @@ -3069,7 +3447,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 360, "y": 330, "w": 40, "h": 30 @@ -3090,7 +3468,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 400, "y": 330, "w": 40, "h": 30 @@ -3111,7 +3489,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 440, "y": 330, "w": 40, "h": 30 @@ -3132,7 +3510,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 480, "y": 330, "w": 40, "h": 30 @@ -3153,7 +3531,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 520, "y": 330, "w": 40, "h": 30 @@ -3174,8 +3552,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 330, + "x": 0, + "y": 360, "w": 40, "h": 30 } @@ -3195,8 +3573,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 330, + "x": 40, + "y": 360, "w": 40, "h": 30 } @@ -3216,8 +3594,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 330, + "x": 80, + "y": 360, "w": 40, "h": 30 } @@ -3237,8 +3615,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 330, + "x": 120, + "y": 360, "w": 40, "h": 30 } @@ -3258,8 +3636,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 330, + "x": 160, + "y": 360, "w": 40, "h": 30 } @@ -3279,8 +3657,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 330, + "x": 200, + "y": 360, "w": 40, "h": 30 } @@ -3300,7 +3678,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 240, "y": 360, "w": 40, "h": 30 @@ -3321,7 +3699,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 280, "y": 360, "w": 40, "h": 30 @@ -3342,7 +3720,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 320, "y": 360, "w": 40, "h": 30 @@ -3363,7 +3741,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 360, "y": 360, "w": 40, "h": 30 @@ -3384,7 +3762,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 400, "y": 360, "w": 40, "h": 30 @@ -3405,7 +3783,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 440, "y": 360, "w": 40, "h": 30 @@ -3426,7 +3804,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 480, "y": 360, "w": 40, "h": 30 @@ -3447,7 +3825,7 @@ "h": 30 }, "frame": { - "x": 280, + "x": 520, "y": 360, "w": 40, "h": 30 @@ -3468,8 +3846,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 360, + "x": 0, + "y": 390, "w": 40, "h": 30 } @@ -3489,8 +3867,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 360, + "x": 40, + "y": 390, "w": 40, "h": 30 } @@ -3510,8 +3888,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 360, + "x": 80, + "y": 390, "w": 40, "h": 30 } @@ -3531,8 +3909,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 360, + "x": 120, + "y": 390, "w": 40, "h": 30 } @@ -3552,8 +3930,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 360, + "x": 160, + "y": 390, "w": 40, "h": 30 } @@ -3573,7 +3951,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 200, "y": 390, "w": 40, "h": 30 @@ -3594,7 +3972,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 240, "y": 390, "w": 40, "h": 30 @@ -3615,7 +3993,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 280, "y": 390, "w": 40, "h": 30 @@ -3636,7 +4014,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 320, "y": 390, "w": 40, "h": 30 @@ -3657,7 +4035,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 360, "y": 390, "w": 40, "h": 30 @@ -3678,7 +4056,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 400, "y": 390, "w": 40, "h": 30 @@ -3699,7 +4077,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 440, "y": 390, "w": 40, "h": 30 @@ -3720,7 +4098,7 @@ "h": 30 }, "frame": { - "x": 280, + "x": 480, "y": 390, "w": 40, "h": 30 @@ -3741,7 +4119,7 @@ "h": 30 }, "frame": { - "x": 320, + "x": 520, "y": 390, "w": 40, "h": 30 @@ -3762,8 +4140,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 390, + "x": 0, + "y": 420, "w": 40, "h": 30 } @@ -3783,8 +4161,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 390, + "x": 40, + "y": 420, "w": 40, "h": 30 } @@ -3804,8 +4182,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 390, + "x": 80, + "y": 420, "w": 40, "h": 30 } @@ -3825,8 +4203,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 390, + "x": 120, + "y": 420, "w": 40, "h": 30 } @@ -3846,7 +4224,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 160, "y": 420, "w": 40, "h": 30 @@ -3867,7 +4245,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 200, "y": 420, "w": 40, "h": 30 @@ -3888,7 +4266,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 240, "y": 420, "w": 40, "h": 30 @@ -3909,7 +4287,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 280, "y": 420, "w": 40, "h": 30 @@ -3930,7 +4308,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 320, "y": 420, "w": 40, "h": 30 @@ -3951,7 +4329,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 360, "y": 420, "w": 40, "h": 30 @@ -3972,7 +4350,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 400, "y": 420, "w": 40, "h": 30 @@ -3993,7 +4371,7 @@ "h": 30 }, "frame": { - "x": 280, + "x": 440, "y": 420, "w": 40, "h": 30 @@ -4014,7 +4392,7 @@ "h": 30 }, "frame": { - "x": 320, + "x": 480, "y": 420, "w": 40, "h": 30 @@ -4035,7 +4413,7 @@ "h": 30 }, "frame": { - "x": 360, + "x": 520, "y": 420, "w": 40, "h": 30 @@ -4056,8 +4434,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 420, + "x": 0, + "y": 450, "w": 40, "h": 30 } @@ -4077,8 +4455,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 420, + "x": 40, + "y": 450, "w": 40, "h": 30 } @@ -4098,8 +4476,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 420, + "x": 80, + "y": 450, "w": 40, "h": 30 } @@ -4119,7 +4497,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 120, "y": 450, "w": 40, "h": 30 @@ -4140,7 +4518,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 160, "y": 450, "w": 40, "h": 30 @@ -4161,7 +4539,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 200, "y": 450, "w": 40, "h": 30 @@ -4182,7 +4560,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 240, "y": 450, "w": 40, "h": 30 @@ -4203,7 +4581,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 280, "y": 450, "w": 40, "h": 30 @@ -4224,7 +4602,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 320, "y": 450, "w": 40, "h": 30 @@ -4245,7 +4623,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 360, "y": 450, "w": 40, "h": 30 @@ -4266,7 +4644,7 @@ "h": 30 }, "frame": { - "x": 280, + "x": 400, "y": 450, "w": 40, "h": 30 @@ -4287,7 +4665,7 @@ "h": 30 }, "frame": { - "x": 320, + "x": 440, "y": 450, "w": 40, "h": 30 @@ -4308,7 +4686,7 @@ "h": 30 }, "frame": { - "x": 360, + "x": 480, "y": 450, "w": 40, "h": 30 @@ -4329,7 +4707,7 @@ "h": 30 }, "frame": { - "x": 400, + "x": 520, "y": 450, "w": 40, "h": 30 @@ -4349,48 +4727,6 @@ "w": 40, "h": 30 }, - "frame": { - "x": 440, - "y": 450, - "w": 40, - "h": 30 - } - }, - { - "filename": "382-primal_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 480, - "y": 450, - "w": 40, - "h": 30 - } - }, - { - "filename": "382_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, "frame": { "x": 0, "y": 480, @@ -4399,7 +4735,7 @@ } }, { - "filename": "382_3", + "filename": "382-primal_3", "rotated": false, "trimmed": false, "sourceSize": { @@ -4420,7 +4756,7 @@ } }, { - "filename": "383-primal_2", + "filename": "382_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -4441,7 +4777,7 @@ } }, { - "filename": "383-primal_3", + "filename": "382_3", "rotated": false, "trimmed": false, "sourceSize": { @@ -4462,7 +4798,7 @@ } }, { - "filename": "383_2", + "filename": "383-primal_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -4483,7 +4819,7 @@ } }, { - "filename": "383_3", + "filename": "383-primal_3", "rotated": false, "trimmed": false, "sourceSize": { @@ -4504,7 +4840,7 @@ } }, { - "filename": "384-mega_2", + "filename": "383_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -4525,7 +4861,7 @@ } }, { - "filename": "384-mega_3", + "filename": "383_3", "rotated": false, "trimmed": false, "sourceSize": { @@ -4546,7 +4882,7 @@ } }, { - "filename": "384_2", + "filename": "384-mega_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -4567,7 +4903,7 @@ } }, { - "filename": "384_3", + "filename": "384-mega_3", "rotated": false, "trimmed": false, "sourceSize": { @@ -4588,7 +4924,7 @@ } }, { - "filename": "385_1", + "filename": "384_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -4609,7 +4945,7 @@ } }, { - "filename": "385_2", + "filename": "384_3", "rotated": false, "trimmed": false, "sourceSize": { @@ -4630,7 +4966,7 @@ } }, { - "filename": "385_3", + "filename": "385_1", "rotated": false, "trimmed": false, "sourceSize": { @@ -4649,6 +4985,48 @@ "w": 40, "h": 30 } + }, + { + "filename": "385_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 520, + "y": 480, + "w": 40, + "h": 30 + } + }, + { + "filename": "385_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 510, + "w": 40, + "h": 30 + } } ] } @@ -4656,6 +5034,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:673055e796ec5f9913fd1dd04284765c:1804ddee68059c3372bf99289c91dd89:039b026190bf1878996b3e03190bcdf3$" + "smartupdate": "$TexturePacker:SmartUpdate:205dbeed0e74aff154166e4664b6771c:8bafe4b4084b51e4e837c213db97e8a4:039b026190bf1878996b3e03190bcdf3$" } } diff --git a/public/images/pokemon_icons_3v.png b/public/images/pokemon_icons_3v.png index 6b699b3bfa95b29528a86a307548ded7a2758784..b151e36e72c181247a66fd3a6ad418a0707b7911 100644 GIT binary patch literal 47691 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 literal 44779 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

      TcfY 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 BU8(>8 diff --git a/public/images/pokemon_icons_4v.json b/public/images/pokemon_icons_4v.json index 2f171915e01..bbaca92c7c7 100644 --- a/public/images/pokemon_icons_4v.json +++ b/public/images/pokemon_icons_4v.json @@ -4,8 +4,8 @@ "image": "pokemon_icons_4v.png", "format": "RGBA8888", "size": { - "w": 520, - "h": 520 + "w": 540, + "h": 540 }, "scale": 1, "frames": [ @@ -388,7 +388,7 @@ } }, { - "filename": "399_2", + "filename": "396_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -408,6 +408,132 @@ "h": 30 } }, + { + "filename": "396_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "397_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "397_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "398_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "398_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "399_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 30, + "w": 40, + "h": 30 + } + }, { "filename": "399_3", "rotated": false, @@ -423,7 +549,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 480, "y": 30, "w": 40, "h": 30 @@ -444,8 +570,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 30, + "x": 0, + "y": 60, "w": 40, "h": 30 } @@ -465,8 +591,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 30, + "x": 40, + "y": 60, "w": 40, "h": 30 } @@ -486,8 +612,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 30, + "x": 80, + "y": 60, "w": 40, "h": 30 } @@ -507,8 +633,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 30, + "x": 120, + "y": 60, "w": 40, "h": 30 } @@ -528,8 +654,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 30, + "x": 160, + "y": 60, "w": 40, "h": 30 } @@ -549,8 +675,134 @@ "h": 30 }, "frame": { - "x": 480, - "y": 30, + "x": 200, + "y": 60, + "w": 40, + "h": 30 + } + }, + { + "filename": "403_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 60, + "w": 40, + "h": 30 + } + }, + { + "filename": "403_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 60, + "w": 40, + "h": 30 + } + }, + { + "filename": "404_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 60, + "w": 40, + "h": 30 + } + }, + { + "filename": "404_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 60, + "w": 40, + "h": 30 + } + }, + { + "filename": "405_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 60, + "w": 40, + "h": 30 + } + }, + { + "filename": "405_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 60, "w": 40, "h": 30 } @@ -570,7 +822,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 480, "y": 60, "w": 40, "h": 30 @@ -591,8 +843,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 60, + "x": 0, + "y": 90, "w": 40, "h": 30 } @@ -612,8 +864,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 60, + "x": 40, + "y": 90, "w": 40, "h": 30 } @@ -633,8 +885,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 60, + "x": 80, + "y": 90, "w": 40, "h": 30 } @@ -654,8 +906,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 60, + "x": 120, + "y": 90, "w": 40, "h": 30 } @@ -675,8 +927,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 60, + "x": 160, + "y": 90, "w": 40, "h": 30 } @@ -696,8 +948,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 60, + "x": 200, + "y": 90, "w": 40, "h": 30 } @@ -717,8 +969,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 60, + "x": 240, + "y": 90, "w": 40, "h": 30 } @@ -738,8 +990,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 60, + "x": 280, + "y": 90, "w": 40, "h": 30 } @@ -759,8 +1011,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 60, + "x": 320, + "y": 90, "w": 40, "h": 30 } @@ -780,8 +1032,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 60, + "x": 360, + "y": 90, "w": 40, "h": 30 } @@ -801,8 +1053,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 60, + "x": 400, + "y": 90, "w": 40, "h": 30 } @@ -822,8 +1074,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 60, + "x": 440, + "y": 90, "w": 40, "h": 30 } @@ -843,7 +1095,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 480, "y": 90, "w": 40, "h": 30 @@ -864,8 +1116,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 90, + "x": 0, + "y": 120, "w": 40, "h": 30 } @@ -885,8 +1137,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 90, + "x": 40, + "y": 120, "w": 40, "h": 30 } @@ -906,8 +1158,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 90, + "x": 80, + "y": 120, "w": 40, "h": 30 } @@ -927,8 +1179,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 90, + "x": 120, + "y": 120, "w": 40, "h": 30 } @@ -948,8 +1200,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 90, + "x": 160, + "y": 120, "w": 40, "h": 30 } @@ -969,8 +1221,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 90, + "x": 200, + "y": 120, "w": 40, "h": 30 } @@ -990,8 +1242,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 90, + "x": 240, + "y": 120, "w": 40, "h": 30 } @@ -1011,8 +1263,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 90, + "x": 280, + "y": 120, "w": 40, "h": 30 } @@ -1032,8 +1284,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 90, + "x": 320, + "y": 120, "w": 40, "h": 30 } @@ -1053,8 +1305,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 90, + "x": 360, + "y": 120, "w": 40, "h": 30 } @@ -1074,8 +1326,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 90, + "x": 400, + "y": 120, "w": 40, "h": 30 } @@ -1095,8 +1347,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 90, + "x": 440, + "y": 120, "w": 40, "h": 30 } @@ -1116,7 +1368,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 480, "y": 120, "w": 40, "h": 30 @@ -1136,9 +1388,135 @@ "w": 40, "h": 30 }, + "frame": { + "x": 0, + "y": 150, + "w": 40, + "h": 30 + } + }, + { + "filename": "420_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, "frame": { "x": 40, - "y": 120, + "y": 150, + "w": 40, + "h": 30 + } + }, + { + "filename": "420_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 150, + "w": 40, + "h": 30 + } + }, + { + "filename": "421-overcast_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 150, + "w": 40, + "h": 30 + } + }, + { + "filename": "421-overcast_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 150, + "w": 40, + "h": 30 + } + }, + { + "filename": "421-sunshine_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 150, + "w": 40, + "h": 30 + } + }, + { + "filename": "421-sunshine_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 150, "w": 40, "h": 30 } @@ -1158,8 +1536,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 120, + "x": 280, + "y": 150, "w": 40, "h": 30 } @@ -1179,8 +1557,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 120, + "x": 320, + "y": 150, "w": 40, "h": 30 } @@ -1200,8 +1578,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 120, + "x": 360, + "y": 150, "w": 40, "h": 30 } @@ -1221,8 +1599,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 120, + "x": 400, + "y": 150, "w": 40, "h": 30 } @@ -1242,8 +1620,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 120, + "x": 440, + "y": 150, "w": 40, "h": 30 } @@ -1263,8 +1641,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 120, + "x": 480, + "y": 150, "w": 40, "h": 30 } @@ -1284,8 +1662,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 120, + "x": 0, + "y": 180, "w": 40, "h": 30 } @@ -1305,8 +1683,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 120, + "x": 40, + "y": 180, "w": 40, "h": 30 } @@ -1326,8 +1704,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 120, + "x": 80, + "y": 180, "w": 40, "h": 30 } @@ -1347,8 +1725,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 120, + "x": 120, + "y": 180, "w": 40, "h": 30 } @@ -1368,8 +1746,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 120, + "x": 160, + "y": 180, "w": 40, "h": 30 } @@ -1389,8 +1767,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 150, + "x": 200, + "y": 180, "w": 40, "h": 30 } @@ -1410,8 +1788,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 150, + "x": 240, + "y": 180, "w": 40, "h": 30 } @@ -1431,8 +1809,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 150, + "x": 280, + "y": 180, "w": 40, "h": 30 } @@ -1452,8 +1830,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 150, + "x": 320, + "y": 180, "w": 40, "h": 30 } @@ -1473,8 +1851,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 150, + "x": 360, + "y": 180, "w": 40, "h": 30 } @@ -1494,8 +1872,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 150, + "x": 400, + "y": 180, "w": 40, "h": 30 } @@ -1515,8 +1893,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 150, + "x": 440, + "y": 180, "w": 40, "h": 30 } @@ -1536,8 +1914,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 150, + "x": 480, + "y": 180, "w": 40, "h": 30 } @@ -1557,8 +1935,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 150, + "x": 0, + "y": 210, "w": 40, "h": 30 } @@ -1578,8 +1956,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 150, + "x": 40, + "y": 210, "w": 40, "h": 30 } @@ -1599,8 +1977,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 150, + "x": 80, + "y": 210, "w": 40, "h": 30 } @@ -1620,8 +1998,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 150, + "x": 120, + "y": 210, "w": 40, "h": 30 } @@ -1641,8 +2019,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 150, + "x": 160, + "y": 210, "w": 40, "h": 30 } @@ -1662,8 +2040,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 180, + "x": 200, + "y": 210, "w": 40, "h": 30 } @@ -1683,8 +2061,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 180, + "x": 240, + "y": 210, "w": 40, "h": 30 } @@ -1704,8 +2082,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 180, + "x": 280, + "y": 210, "w": 40, "h": 30 } @@ -1725,8 +2103,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 180, + "x": 320, + "y": 210, "w": 40, "h": 30 } @@ -1746,8 +2124,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 180, + "x": 360, + "y": 210, "w": 40, "h": 30 } @@ -1767,8 +2145,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 180, + "x": 400, + "y": 210, "w": 40, "h": 30 } @@ -1788,8 +2166,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 180, + "x": 440, + "y": 210, "w": 40, "h": 30 } @@ -1809,8 +2187,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 180, + "x": 480, + "y": 210, "w": 40, "h": 30 } @@ -1830,8 +2208,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 180, + "x": 0, + "y": 240, "w": 40, "h": 30 } @@ -1851,8 +2229,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 180, + "x": 40, + "y": 240, "w": 40, "h": 30 } @@ -1872,8 +2250,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 180, + "x": 80, + "y": 240, "w": 40, "h": 30 } @@ -1893,8 +2271,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 180, + "x": 120, + "y": 240, "w": 40, "h": 30 } @@ -1914,8 +2292,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 180, + "x": 160, + "y": 240, "w": 40, "h": 30 } @@ -1935,8 +2313,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 210, + "x": 200, + "y": 240, "w": 40, "h": 30 } @@ -1956,8 +2334,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 210, + "x": 240, + "y": 240, "w": 40, "h": 30 } @@ -1977,8 +2355,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 210, + "x": 280, + "y": 240, "w": 40, "h": 30 } @@ -1998,8 +2376,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 210, + "x": 320, + "y": 240, "w": 40, "h": 30 } @@ -2019,8 +2397,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 210, + "x": 360, + "y": 240, "w": 40, "h": 30 } @@ -2040,8 +2418,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 210, + "x": 400, + "y": 240, "w": 40, "h": 30 } @@ -2061,8 +2439,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 210, + "x": 440, + "y": 240, "w": 40, "h": 30 } @@ -2082,8 +2460,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 210, + "x": 480, + "y": 240, "w": 40, "h": 30 } @@ -2103,8 +2481,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 210, + "x": 0, + "y": 270, "w": 40, "h": 30 } @@ -2124,8 +2502,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 210, + "x": 40, + "y": 270, "w": 40, "h": 30 } @@ -2145,8 +2523,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 210, + "x": 80, + "y": 270, "w": 40, "h": 30 } @@ -2166,8 +2544,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 210, + "x": 120, + "y": 270, "w": 40, "h": 30 } @@ -2187,8 +2565,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 210, + "x": 160, + "y": 270, "w": 40, "h": 30 } @@ -2208,8 +2586,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 240, + "x": 200, + "y": 270, "w": 40, "h": 30 } @@ -2229,8 +2607,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 240, + "x": 240, + "y": 270, "w": 40, "h": 30 } @@ -2250,8 +2628,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 240, + "x": 280, + "y": 270, "w": 40, "h": 30 } @@ -2271,8 +2649,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 240, + "x": 320, + "y": 270, "w": 40, "h": 30 } @@ -2292,8 +2670,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 240, + "x": 360, + "y": 270, "w": 40, "h": 30 } @@ -2313,8 +2691,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 240, + "x": 400, + "y": 270, "w": 40, "h": 30 } @@ -2334,8 +2712,50 @@ "h": 30 }, "frame": { - "x": 240, - "y": 240, + "x": 440, + "y": 270, + "w": 40, + "h": 30 + } + }, + { + "filename": "446_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 480, + "y": 270, + "w": 40, + "h": 30 + } + }, + { + "filename": "446_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 300, "w": 40, "h": 30 } @@ -2355,8 +2775,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 240, + "x": 40, + "y": 300, "w": 40, "h": 30 } @@ -2376,8 +2796,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 240, + "x": 80, + "y": 300, "w": 40, "h": 30 } @@ -2397,8 +2817,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 240, + "x": 120, + "y": 300, "w": 40, "h": 30 } @@ -2418,8 +2838,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 240, + "x": 160, + "y": 300, "w": 40, "h": 30 } @@ -2439,8 +2859,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 240, + "x": 200, + "y": 300, "w": 40, "h": 30 } @@ -2460,8 +2880,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 240, + "x": 240, + "y": 300, "w": 40, "h": 30 } @@ -2481,8 +2901,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 270, + "x": 280, + "y": 300, "w": 40, "h": 30 } @@ -2502,8 +2922,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 270, + "x": 320, + "y": 300, "w": 40, "h": 30 } @@ -2523,8 +2943,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 270, + "x": 360, + "y": 300, "w": 40, "h": 30 } @@ -2544,8 +2964,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 270, + "x": 400, + "y": 300, "w": 40, "h": 30 } @@ -2565,8 +2985,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 270, + "x": 440, + "y": 300, "w": 40, "h": 30 } @@ -2586,8 +3006,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 270, + "x": 480, + "y": 300, "w": 40, "h": 30 } @@ -2607,8 +3027,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 270, + "x": 0, + "y": 330, "w": 40, "h": 30 } @@ -2628,8 +3048,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 270, + "x": 40, + "y": 330, "w": 40, "h": 30 } @@ -2649,8 +3069,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 270, + "x": 80, + "y": 330, "w": 40, "h": 30 } @@ -2670,8 +3090,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 270, + "x": 120, + "y": 330, "w": 40, "h": 30 } @@ -2691,8 +3111,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 270, + "x": 160, + "y": 330, "w": 40, "h": 30 } @@ -2712,8 +3132,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 270, + "x": 200, + "y": 330, "w": 40, "h": 30 } @@ -2733,8 +3153,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 270, + "x": 240, + "y": 330, "w": 40, "h": 30 } @@ -2754,8 +3174,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 300, + "x": 280, + "y": 330, "w": 40, "h": 30 } @@ -2775,8 +3195,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 300, + "x": 320, + "y": 330, "w": 40, "h": 30 } @@ -2796,8 +3216,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 300, + "x": 360, + "y": 330, "w": 40, "h": 30 } @@ -2817,8 +3237,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 300, + "x": 400, + "y": 330, "w": 40, "h": 30 } @@ -2838,8 +3258,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 300, + "x": 440, + "y": 330, "w": 40, "h": 30 } @@ -2859,8 +3279,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 300, + "x": 480, + "y": 330, "w": 40, "h": 30 } @@ -2880,8 +3300,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 300, + "x": 0, + "y": 360, "w": 40, "h": 30 } @@ -2901,8 +3321,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 300, + "x": 40, + "y": 360, "w": 40, "h": 30 } @@ -2922,8 +3342,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 300, + "x": 80, + "y": 360, "w": 40, "h": 30 } @@ -2943,8 +3363,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 300, + "x": 120, + "y": 360, "w": 40, "h": 30 } @@ -2964,8 +3384,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 300, + "x": 160, + "y": 360, "w": 40, "h": 30 } @@ -2985,8 +3405,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 300, + "x": 200, + "y": 360, "w": 40, "h": 30 } @@ -3006,8 +3426,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 300, + "x": 240, + "y": 360, "w": 40, "h": 30 } @@ -3027,8 +3447,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 330, + "x": 280, + "y": 360, "w": 40, "h": 30 } @@ -3048,8 +3468,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 330, + "x": 320, + "y": 360, "w": 40, "h": 30 } @@ -3069,8 +3489,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 330, + "x": 360, + "y": 360, "w": 40, "h": 30 } @@ -3090,8 +3510,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 330, + "x": 400, + "y": 360, "w": 40, "h": 30 } @@ -3111,8 +3531,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 330, + "x": 440, + "y": 360, "w": 40, "h": 30 } @@ -3132,8 +3552,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 330, + "x": 480, + "y": 360, "w": 40, "h": 30 } @@ -3153,8 +3573,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 330, + "x": 0, + "y": 390, "w": 40, "h": 30 } @@ -3174,8 +3594,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 330, + "x": 40, + "y": 390, "w": 40, "h": 30 } @@ -3195,8 +3615,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 330, + "x": 80, + "y": 390, "w": 40, "h": 30 } @@ -3216,8 +3636,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 330, + "x": 120, + "y": 390, "w": 40, "h": 30 } @@ -3237,8 +3657,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 330, + "x": 160, + "y": 390, "w": 40, "h": 30 } @@ -3258,8 +3678,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 330, + "x": 200, + "y": 390, "w": 40, "h": 30 } @@ -3279,8 +3699,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 330, + "x": 240, + "y": 390, "w": 40, "h": 30 } @@ -3300,8 +3720,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 360, + "x": 280, + "y": 390, "w": 40, "h": 30 } @@ -3321,8 +3741,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 360, + "x": 320, + "y": 390, "w": 40, "h": 30 } @@ -3342,8 +3762,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 360, + "x": 360, + "y": 390, "w": 40, "h": 30 } @@ -3363,8 +3783,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 360, + "x": 400, + "y": 390, "w": 40, "h": 30 } @@ -3384,8 +3804,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 360, + "x": 440, + "y": 390, "w": 40, "h": 30 } @@ -3405,8 +3825,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 360, + "x": 480, + "y": 390, "w": 40, "h": 30 } @@ -3426,8 +3846,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 360, + "x": 0, + "y": 420, "w": 40, "h": 30 } @@ -3447,8 +3867,50 @@ "h": 30 }, "frame": { - "x": 280, - "y": 360, + "x": 40, + "y": 420, + "w": 40, + "h": 30 + } + }, + { + "filename": "476_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 420, + "w": 40, + "h": 30 + } + }, + { + "filename": "476_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 420, "w": 40, "h": 30 } @@ -3468,8 +3930,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 360, + "x": 160, + "y": 420, "w": 40, "h": 30 } @@ -3489,8 +3951,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 360, + "x": 200, + "y": 420, "w": 40, "h": 30 } @@ -3510,8 +3972,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 360, + "x": 240, + "y": 420, "w": 40, "h": 30 } @@ -3531,8 +3993,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 360, + "x": 280, + "y": 420, "w": 40, "h": 30 } @@ -3552,8 +4014,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 360, + "x": 320, + "y": 420, "w": 40, "h": 30 } @@ -3573,8 +4035,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 390, + "x": 360, + "y": 420, "w": 40, "h": 30 } @@ -3594,8 +4056,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 390, + "x": 400, + "y": 420, "w": 40, "h": 30 } @@ -3615,8 +4077,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 390, + "x": 440, + "y": 420, "w": 40, "h": 30 } @@ -3636,8 +4098,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 390, + "x": 480, + "y": 420, "w": 40, "h": 30 } @@ -3657,8 +4119,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 390, + "x": 0, + "y": 450, "w": 40, "h": 30 } @@ -3678,8 +4140,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 390, + "x": 40, + "y": 450, "w": 40, "h": 30 } @@ -3699,8 +4161,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 390, + "x": 80, + "y": 450, "w": 40, "h": 30 } @@ -3720,8 +4182,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 390, + "x": 120, + "y": 450, "w": 40, "h": 30 } @@ -3741,8 +4203,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 390, + "x": 160, + "y": 450, "w": 40, "h": 30 } @@ -3762,8 +4224,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 390, + "x": 200, + "y": 450, "w": 40, "h": 30 } @@ -3783,8 +4245,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 390, + "x": 240, + "y": 450, "w": 40, "h": 30 } @@ -3804,8 +4266,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 390, + "x": 280, + "y": 450, "w": 40, "h": 30 } @@ -3825,8 +4287,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 390, + "x": 320, + "y": 450, "w": 40, "h": 30 } @@ -3846,8 +4308,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 420, + "x": 360, + "y": 450, "w": 40, "h": 30 } @@ -3867,8 +4329,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 420, + "x": 400, + "y": 450, "w": 40, "h": 30 } @@ -3888,8 +4350,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 420, + "x": 440, + "y": 450, "w": 40, "h": 30 } @@ -3909,8 +4371,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 420, + "x": 480, + "y": 450, "w": 40, "h": 30 } @@ -3930,8 +4392,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 420, + "x": 0, + "y": 480, "w": 40, "h": 30 } @@ -3951,8 +4413,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 420, + "x": 40, + "y": 480, "w": 40, "h": 30 } @@ -3972,8 +4434,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 420, + "x": 80, + "y": 480, "w": 40, "h": 30 } @@ -3993,8 +4455,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 420, + "x": 120, + "y": 480, "w": 40, "h": 30 } @@ -4014,8 +4476,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 420, + "x": 160, + "y": 480, "w": 40, "h": 30 } @@ -4035,8 +4497,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 420, + "x": 200, + "y": 480, "w": 40, "h": 30 } @@ -4056,8 +4518,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 420, + "x": 240, + "y": 480, "w": 40, "h": 30 } @@ -4077,8 +4539,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 420, + "x": 280, + "y": 480, "w": 40, "h": 30 } @@ -4098,8 +4560,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 420, + "x": 320, + "y": 480, "w": 40, "h": 30 } @@ -4119,8 +4581,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 450, + "x": 360, + "y": 480, "w": 40, "h": 30 } @@ -4140,8 +4602,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 450, + "x": 400, + "y": 480, "w": 40, "h": 30 } @@ -4161,8 +4623,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 450, + "x": 440, + "y": 480, "w": 40, "h": 30 } @@ -4182,8 +4644,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 450, + "x": 480, + "y": 480, "w": 40, "h": 30 } @@ -4203,8 +4665,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 450, + "x": 0, + "y": 510, "w": 40, "h": 30 } @@ -4224,8 +4686,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 450, + "x": 40, + "y": 510, "w": 40, "h": 30 } @@ -4245,8 +4707,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 450, + "x": 80, + "y": 510, "w": 40, "h": 30 } @@ -4266,8 +4728,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 450, + "x": 120, + "y": 510, "w": 40, "h": 30 } @@ -4287,8 +4749,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 450, + "x": 160, + "y": 510, "w": 40, "h": 30 } @@ -4308,8 +4770,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 450, + "x": 200, + "y": 510, "w": 40, "h": 30 } @@ -4329,8 +4791,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 450, + "x": 240, + "y": 510, "w": 40, "h": 30 } @@ -4350,8 +4812,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 450, + "x": 280, + "y": 510, "w": 40, "h": 30 } @@ -4371,8 +4833,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 450, + "x": 320, + "y": 510, "w": 40, "h": 30 } @@ -4392,8 +4854,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 480, + "x": 360, + "y": 510, "w": 40, "h": 30 } @@ -4404,6 +4866,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2288ca6bd49f36a5ca5b49f1bcaab17a:e83f40529aad7883718910695eafd075:ebc3f8ec5b2480b298192d752b6e57dc$" + "smartupdate": "$TexturePacker:SmartUpdate:52236a80fa87dc64d12684ac85cf8440:2809a2ce37dd2c24fc872d083bf5a2aa:ebc3f8ec5b2480b298192d752b6e57dc$" } } diff --git a/public/images/pokemon_icons_4v.png b/public/images/pokemon_icons_4v.png index 7cfab80312aefe81b60615bd638d3567c539c5b3..43938ed50958d3fb9a200e654bca1e5646415453 100644 GIT binary patch literal 46415 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 PfcY^tFxRitb)x(q$5Ont diff --git a/public/images/pokemon_icons_5v.json b/public/images/pokemon_icons_5v.json index 7da5a765c0c..d793ed1b650 100644 --- a/public/images/pokemon_icons_5v.json +++ b/public/images/pokemon_icons_5v.json @@ -4,8 +4,8 @@ "image": "pokemon_icons_5v.png", "format": "RGBA8888", "size": { - "w": 520, - "h": 520 + "w": 570, + "h": 570 }, "scale": 1, "frames": [ @@ -178,7 +178,7 @@ } }, { - "filename": "501_2", + "filename": "498_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -198,6 +198,132 @@ "h": 30 } }, + { + "filename": "498_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 0, + "w": 40, + "h": 30 + } + }, + { + "filename": "499_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 0, + "w": 40, + "h": 30 + } + }, + { + "filename": "499_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 0, + "w": 40, + "h": 30 + } + }, + { + "filename": "500_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 480, + "y": 0, + "w": 40, + "h": 30 + } + }, + { + "filename": "500_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 520, + "y": 0, + "w": 40, + "h": 30 + } + }, + { + "filename": "501_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 30, + "w": 40, + "h": 30 + } + }, { "filename": "501_3", "rotated": false, @@ -213,8 +339,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 0, + "x": 40, + "y": 30, "w": 40, "h": 30 } @@ -234,8 +360,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 0, + "x": 80, + "y": 30, "w": 40, "h": 30 } @@ -255,8 +381,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 0, + "x": 120, + "y": 30, "w": 40, "h": 30 } @@ -276,8 +402,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 0, + "x": 160, + "y": 30, "w": 40, "h": 30 } @@ -297,12 +423,264 @@ "h": 30 }, "frame": { - "x": 0, + "x": 200, "y": 30, "w": 40, "h": 30 } }, + { + "filename": "511_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "511_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "512_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "512_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "513_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "513_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "514_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 480, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "514_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 520, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "515_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 60, + "w": 40, + "h": 30 + } + }, + { + "filename": "515_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 60, + "w": 40, + "h": 30 + } + }, + { + "filename": "516_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 60, + "w": 40, + "h": 30 + } + }, + { + "filename": "516_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 60, + "w": 40, + "h": 30 + } + }, { "filename": "517_2", "rotated": false, @@ -318,8 +696,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 30, + "x": 160, + "y": 60, "w": 40, "h": 30 } @@ -339,8 +717,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 30, + "x": 200, + "y": 60, "w": 40, "h": 30 } @@ -360,8 +738,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 30, + "x": 240, + "y": 60, "w": 40, "h": 30 } @@ -381,8 +759,92 @@ "h": 30 }, "frame": { - "x": 160, - "y": 30, + "x": 280, + "y": 60, + "w": 40, + "h": 30 + } + }, + { + "filename": "522_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 60, + "w": 40, + "h": 30 + } + }, + { + "filename": "522_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 60, + "w": 40, + "h": 30 + } + }, + { + "filename": "523_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 60, + "w": 40, + "h": 30 + } + }, + { + "filename": "523_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 60, "w": 40, "h": 30 } @@ -402,8 +864,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 30, + "x": 480, + "y": 60, "w": 40, "h": 30 } @@ -423,8 +885,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 30, + "x": 520, + "y": 60, "w": 40, "h": 30 } @@ -444,8 +906,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 30, + "x": 0, + "y": 90, "w": 40, "h": 30 } @@ -465,8 +927,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 30, + "x": 40, + "y": 90, "w": 40, "h": 30 } @@ -486,8 +948,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 30, + "x": 80, + "y": 90, "w": 40, "h": 30 } @@ -507,8 +969,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 30, + "x": 120, + "y": 90, "w": 40, "h": 30 } @@ -528,8 +990,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 30, + "x": 160, + "y": 90, "w": 40, "h": 30 } @@ -549,8 +1011,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 30, + "x": 200, + "y": 90, "w": 40, "h": 30 } @@ -570,8 +1032,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 60, + "x": 240, + "y": 90, "w": 40, "h": 30 } @@ -591,8 +1053,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 60, + "x": 280, + "y": 90, "w": 40, "h": 30 } @@ -612,8 +1074,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 60, + "x": 320, + "y": 90, "w": 40, "h": 30 } @@ -633,8 +1095,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 60, + "x": 360, + "y": 90, "w": 40, "h": 30 } @@ -654,8 +1116,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 60, + "x": 400, + "y": 90, "w": 40, "h": 30 } @@ -675,8 +1137,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 60, + "x": 440, + "y": 90, "w": 40, "h": 30 } @@ -696,8 +1158,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 60, + "x": 480, + "y": 90, "w": 40, "h": 30 } @@ -717,8 +1179,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 60, + "x": 520, + "y": 90, "w": 40, "h": 30 } @@ -738,8 +1200,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 60, + "x": 0, + "y": 120, "w": 40, "h": 30 } @@ -759,8 +1221,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 60, + "x": 40, + "y": 120, "w": 40, "h": 30 } @@ -780,8 +1242,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 60, + "x": 80, + "y": 120, "w": 40, "h": 30 } @@ -801,8 +1263,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 60, + "x": 120, + "y": 120, "w": 40, "h": 30 } @@ -822,8 +1284,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 60, + "x": 160, + "y": 120, "w": 40, "h": 30 } @@ -843,8 +1305,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 90, + "x": 200, + "y": 120, "w": 40, "h": 30 } @@ -864,8 +1326,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 90, + "x": 240, + "y": 120, "w": 40, "h": 30 } @@ -885,8 +1347,134 @@ "h": 30 }, "frame": { - "x": 80, - "y": 90, + "x": 280, + "y": 120, + "w": 40, + "h": 30 + } + }, + { + "filename": "535_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 120, + "w": 40, + "h": 30 + } + }, + { + "filename": "535_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 120, + "w": 40, + "h": 30 + } + }, + { + "filename": "536_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 120, + "w": 40, + "h": 30 + } + }, + { + "filename": "536_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 120, + "w": 40, + "h": 30 + } + }, + { + "filename": "537_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 480, + "y": 120, + "w": 40, + "h": 30 + } + }, + { + "filename": "537_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 520, + "y": 120, "w": 40, "h": 30 } @@ -906,8 +1494,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 90, + "x": 0, + "y": 150, "w": 40, "h": 30 } @@ -927,8 +1515,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 90, + "x": 40, + "y": 150, "w": 40, "h": 30 } @@ -948,8 +1536,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 90, + "x": 80, + "y": 150, "w": 40, "h": 30 } @@ -969,8 +1557,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 90, + "x": 120, + "y": 150, "w": 40, "h": 30 } @@ -990,8 +1578,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 90, + "x": 160, + "y": 150, "w": 40, "h": 30 } @@ -1011,8 +1599,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 90, + "x": 200, + "y": 150, "w": 40, "h": 30 } @@ -1032,8 +1620,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 90, + "x": 240, + "y": 150, "w": 40, "h": 30 } @@ -1053,8 +1641,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 90, + "x": 280, + "y": 150, "w": 40, "h": 30 } @@ -1074,8 +1662,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 90, + "x": 320, + "y": 150, "w": 40, "h": 30 } @@ -1095,8 +1683,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 90, + "x": 360, + "y": 150, "w": 40, "h": 30 } @@ -1116,8 +1704,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 120, + "x": 400, + "y": 150, "w": 40, "h": 30 } @@ -1137,8 +1725,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 120, + "x": 440, + "y": 150, "w": 40, "h": 30 } @@ -1158,8 +1746,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 120, + "x": 480, + "y": 150, "w": 40, "h": 30 } @@ -1179,8 +1767,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 120, + "x": 520, + "y": 150, "w": 40, "h": 30 } @@ -1200,8 +1788,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 120, + "x": 0, + "y": 180, "w": 40, "h": 30 } @@ -1221,8 +1809,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 120, + "x": 40, + "y": 180, "w": 40, "h": 30 } @@ -1242,8 +1830,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 120, + "x": 80, + "y": 180, "w": 40, "h": 30 } @@ -1263,8 +1851,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 120, + "x": 120, + "y": 180, "w": 40, "h": 30 } @@ -1284,8 +1872,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 120, + "x": 160, + "y": 180, "w": 40, "h": 30 } @@ -1305,8 +1893,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 120, + "x": 200, + "y": 180, "w": 40, "h": 30 } @@ -1326,8 +1914,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 120, + "x": 240, + "y": 180, "w": 40, "h": 30 } @@ -1347,8 +1935,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 120, + "x": 280, + "y": 180, "w": 40, "h": 30 } @@ -1368,8 +1956,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 120, + "x": 320, + "y": 180, "w": 40, "h": 30 } @@ -1389,8 +1977,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 150, + "x": 360, + "y": 180, "w": 40, "h": 30 } @@ -1410,8 +1998,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 150, + "x": 400, + "y": 180, "w": 40, "h": 30 } @@ -1431,8 +2019,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 150, + "x": 440, + "y": 180, "w": 40, "h": 30 } @@ -1452,8 +2040,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 150, + "x": 480, + "y": 180, "w": 40, "h": 30 } @@ -1473,8 +2061,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 150, + "x": 520, + "y": 180, "w": 40, "h": 30 } @@ -1494,8 +2082,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 150, + "x": 0, + "y": 210, "w": 40, "h": 30 } @@ -1515,8 +2103,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 150, + "x": 40, + "y": 210, "w": 40, "h": 30 } @@ -1535,9 +2123,135 @@ "w": 40, "h": 30 }, + "frame": { + "x": 80, + "y": 210, + "w": 40, + "h": 30 + } + }, + { + "filename": "554_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 210, + "w": 40, + "h": 30 + } + }, + { + "filename": "554_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 210, + "w": 40, + "h": 30 + } + }, + { + "filename": "555-zen_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 210, + "w": 40, + "h": 30 + } + }, + { + "filename": "555-zen_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 210, + "w": 40, + "h": 30 + } + }, + { + "filename": "555_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, "frame": { "x": 280, - "y": 150, + "y": 210, + "w": 40, + "h": 30 + } + }, + { + "filename": "555_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 210, "w": 40, "h": 30 } @@ -1557,8 +2271,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 150, + "x": 360, + "y": 210, "w": 40, "h": 30 } @@ -1578,8 +2292,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 150, + "x": 400, + "y": 210, "w": 40, "h": 30 } @@ -1599,8 +2313,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 150, + "x": 440, + "y": 210, "w": 40, "h": 30 } @@ -1620,8 +2334,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 150, + "x": 480, + "y": 210, "w": 40, "h": 30 } @@ -1641,8 +2355,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 150, + "x": 520, + "y": 210, "w": 40, "h": 30 } @@ -1663,7 +2377,7 @@ }, "frame": { "x": 0, - "y": 180, + "y": 240, "w": 40, "h": 30 } @@ -1684,7 +2398,7 @@ }, "frame": { "x": 40, - "y": 180, + "y": 240, "w": 40, "h": 30 } @@ -1705,7 +2419,7 @@ }, "frame": { "x": 80, - "y": 180, + "y": 240, "w": 40, "h": 30 } @@ -1726,7 +2440,7 @@ }, "frame": { "x": 120, - "y": 180, + "y": 240, "w": 40, "h": 30 } @@ -1747,7 +2461,7 @@ }, "frame": { "x": 160, - "y": 180, + "y": 240, "w": 40, "h": 30 } @@ -1768,7 +2482,7 @@ }, "frame": { "x": 200, - "y": 180, + "y": 240, "w": 40, "h": 30 } @@ -1789,7 +2503,91 @@ }, "frame": { "x": 240, - "y": 180, + "y": 240, + "w": 40, + "h": 30 + } + }, + { + "filename": "566_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 240, + "w": 40, + "h": 30 + } + }, + { + "filename": "566_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 240, + "w": 40, + "h": 30 + } + }, + { + "filename": "567_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 240, + "w": 40, + "h": 30 + } + }, + { + "filename": "567_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 240, "w": 40, "h": 30 } @@ -1809,8 +2607,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 180, + "x": 440, + "y": 240, "w": 40, "h": 30 } @@ -1830,8 +2628,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 180, + "x": 480, + "y": 240, "w": 40, "h": 30 } @@ -1851,8 +2649,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 180, + "x": 520, + "y": 240, "w": 40, "h": 30 } @@ -1872,8 +2670,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 180, + "x": 0, + "y": 270, "w": 40, "h": 30 } @@ -1893,8 +2691,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 180, + "x": 40, + "y": 270, "w": 40, "h": 30 } @@ -1914,8 +2712,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 180, + "x": 80, + "y": 270, "w": 40, "h": 30 } @@ -1935,8 +2733,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 210, + "x": 120, + "y": 270, "w": 40, "h": 30 } @@ -1956,8 +2754,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 210, + "x": 160, + "y": 270, "w": 40, "h": 30 } @@ -1977,8 +2775,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 210, + "x": 200, + "y": 270, "w": 40, "h": 30 } @@ -1998,8 +2796,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 210, + "x": 240, + "y": 270, "w": 40, "h": 30 } @@ -2019,8 +2817,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 210, + "x": 280, + "y": 270, "w": 40, "h": 30 } @@ -2040,8 +2838,50 @@ "h": 30 }, "frame": { - "x": 200, - "y": 210, + "x": 320, + "y": 270, + "w": 40, + "h": 30 + } + }, + { + "filename": "573_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 270, + "w": 40, + "h": 30 + } + }, + { + "filename": "573_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 270, "w": 40, "h": 30 } @@ -2061,8 +2901,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 210, + "x": 440, + "y": 270, "w": 40, "h": 30 } @@ -2082,8 +2922,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 210, + "x": 480, + "y": 270, "w": 40, "h": 30 } @@ -2103,8 +2943,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 210, + "x": 520, + "y": 270, "w": 40, "h": 30 } @@ -2124,8 +2964,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 210, + "x": 0, + "y": 300, "w": 40, "h": 30 } @@ -2145,8 +2985,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 210, + "x": 40, + "y": 300, "w": 40, "h": 30 } @@ -2166,8 +3006,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 210, + "x": 80, + "y": 300, "w": 40, "h": 30 } @@ -2187,8 +3027,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 210, + "x": 120, + "y": 300, "w": 40, "h": 30 } @@ -2208,8 +3048,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 240, + "x": 160, + "y": 300, "w": 40, "h": 30 } @@ -2229,8 +3069,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 240, + "x": 200, + "y": 300, "w": 40, "h": 30 } @@ -2250,8 +3090,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 240, + "x": 240, + "y": 300, "w": 40, "h": 30 } @@ -2271,8 +3111,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 240, + "x": 280, + "y": 300, "w": 40, "h": 30 } @@ -2292,8 +3132,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 240, + "x": 320, + "y": 300, "w": 40, "h": 30 } @@ -2313,8 +3153,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 240, + "x": 360, + "y": 300, "w": 40, "h": 30 } @@ -2334,8 +3174,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 240, + "x": 400, + "y": 300, "w": 40, "h": 30 } @@ -2355,8 +3195,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 240, + "x": 440, + "y": 300, "w": 40, "h": 30 } @@ -2376,8 +3216,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 240, + "x": 480, + "y": 300, "w": 40, "h": 30 } @@ -2397,8 +3237,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 240, + "x": 520, + "y": 300, "w": 40, "h": 30 } @@ -2418,8 +3258,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 240, + "x": 0, + "y": 330, "w": 40, "h": 30 } @@ -2439,8 +3279,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 240, + "x": 40, + "y": 330, "w": 40, "h": 30 } @@ -2460,8 +3300,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 240, + "x": 80, + "y": 330, "w": 40, "h": 30 } @@ -2481,8 +3321,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 270, + "x": 120, + "y": 330, "w": 40, "h": 30 } @@ -2502,8 +3342,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 270, + "x": 160, + "y": 330, "w": 40, "h": 30 } @@ -2523,8 +3363,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 270, + "x": 200, + "y": 330, "w": 40, "h": 30 } @@ -2544,8 +3384,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 270, + "x": 240, + "y": 330, "w": 40, "h": 30 } @@ -2565,8 +3405,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 270, + "x": 280, + "y": 330, "w": 40, "h": 30 } @@ -2586,8 +3426,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 270, + "x": 320, + "y": 330, "w": 40, "h": 30 } @@ -2607,8 +3447,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 270, + "x": 360, + "y": 330, "w": 40, "h": 30 } @@ -2628,8 +3468,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 270, + "x": 400, + "y": 330, "w": 40, "h": 30 } @@ -2649,8 +3489,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 270, + "x": 440, + "y": 330, "w": 40, "h": 30 } @@ -2670,8 +3510,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 270, + "x": 480, + "y": 330, "w": 40, "h": 30 } @@ -2691,8 +3531,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 270, + "x": 520, + "y": 330, "w": 40, "h": 30 } @@ -2712,8 +3552,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 270, + "x": 0, + "y": 360, "w": 40, "h": 30 } @@ -2733,8 +3573,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 270, + "x": 40, + "y": 360, "w": 40, "h": 30 } @@ -2754,8 +3594,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 300, + "x": 80, + "y": 360, "w": 40, "h": 30 } @@ -2775,8 +3615,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 300, + "x": 120, + "y": 360, "w": 40, "h": 30 } @@ -2796,8 +3636,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 300, + "x": 160, + "y": 360, "w": 40, "h": 30 } @@ -2817,8 +3657,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 300, + "x": 200, + "y": 360, "w": 40, "h": 30 } @@ -2838,8 +3678,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 300, + "x": 240, + "y": 360, "w": 40, "h": 30 } @@ -2859,8 +3699,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 300, + "x": 280, + "y": 360, "w": 40, "h": 30 } @@ -2880,8 +3720,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 300, + "x": 320, + "y": 360, "w": 40, "h": 30 } @@ -2901,8 +3741,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 300, + "x": 360, + "y": 360, "w": 40, "h": 30 } @@ -2922,8 +3762,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 300, + "x": 400, + "y": 360, "w": 40, "h": 30 } @@ -2943,8 +3783,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 300, + "x": 440, + "y": 360, "w": 40, "h": 30 } @@ -2964,8 +3804,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 300, + "x": 480, + "y": 360, "w": 40, "h": 30 } @@ -2985,8 +3825,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 300, + "x": 520, + "y": 360, "w": 40, "h": 30 } @@ -3006,8 +3846,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 300, + "x": 0, + "y": 390, "w": 40, "h": 30 } @@ -3027,8 +3867,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 330, + "x": 40, + "y": 390, "w": 40, "h": 30 } @@ -3048,8 +3888,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 330, + "x": 80, + "y": 390, "w": 40, "h": 30 } @@ -3069,8 +3909,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 330, + "x": 120, + "y": 390, "w": 40, "h": 30 } @@ -3090,8 +3930,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 330, + "x": 160, + "y": 390, "w": 40, "h": 30 } @@ -3111,8 +3951,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 330, + "x": 200, + "y": 390, "w": 40, "h": 30 } @@ -3132,8 +3972,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 330, + "x": 240, + "y": 390, "w": 40, "h": 30 } @@ -3153,8 +3993,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 330, + "x": 280, + "y": 390, "w": 40, "h": 30 } @@ -3174,8 +4014,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 330, + "x": 320, + "y": 390, "w": 40, "h": 30 } @@ -3195,8 +4035,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 330, + "x": 360, + "y": 390, "w": 40, "h": 30 } @@ -3216,8 +4056,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 330, + "x": 400, + "y": 390, "w": 40, "h": 30 } @@ -3237,8 +4077,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 330, + "x": 440, + "y": 390, "w": 40, "h": 30 } @@ -3258,8 +4098,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 330, + "x": 480, + "y": 390, "w": 40, "h": 30 } @@ -3279,8 +4119,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 330, + "x": 520, + "y": 390, "w": 40, "h": 30 } @@ -3301,7 +4141,7 @@ }, "frame": { "x": 0, - "y": 360, + "y": 420, "w": 40, "h": 30 } @@ -3322,7 +4162,7 @@ }, "frame": { "x": 40, - "y": 360, + "y": 420, "w": 40, "h": 30 } @@ -3343,7 +4183,7 @@ }, "frame": { "x": 80, - "y": 360, + "y": 420, "w": 40, "h": 30 } @@ -3364,7 +4204,7 @@ }, "frame": { "x": 120, - "y": 360, + "y": 420, "w": 40, "h": 30 } @@ -3385,7 +4225,7 @@ }, "frame": { "x": 160, - "y": 360, + "y": 420, "w": 40, "h": 30 } @@ -3406,7 +4246,7 @@ }, "frame": { "x": 200, - "y": 360, + "y": 420, "w": 40, "h": 30 } @@ -3427,7 +4267,7 @@ }, "frame": { "x": 240, - "y": 360, + "y": 420, "w": 40, "h": 30 } @@ -3448,7 +4288,7 @@ }, "frame": { "x": 280, - "y": 360, + "y": 420, "w": 40, "h": 30 } @@ -3469,7 +4309,7 @@ }, "frame": { "x": 320, - "y": 360, + "y": 420, "w": 40, "h": 30 } @@ -3490,7 +4330,7 @@ }, "frame": { "x": 360, - "y": 360, + "y": 420, "w": 40, "h": 30 } @@ -3511,7 +4351,7 @@ }, "frame": { "x": 400, - "y": 360, + "y": 420, "w": 40, "h": 30 } @@ -3532,7 +4372,7 @@ }, "frame": { "x": 440, - "y": 360, + "y": 420, "w": 40, "h": 30 } @@ -3553,7 +4393,7 @@ }, "frame": { "x": 480, - "y": 360, + "y": 420, "w": 40, "h": 30 } @@ -3573,8 +4413,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 390, + "x": 520, + "y": 420, "w": 40, "h": 30 } @@ -3594,8 +4434,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 390, + "x": 0, + "y": 450, "w": 40, "h": 30 } @@ -3615,8 +4455,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 390, + "x": 40, + "y": 450, "w": 40, "h": 30 } @@ -3636,8 +4476,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 390, + "x": 80, + "y": 450, "w": 40, "h": 30 } @@ -3657,8 +4497,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 390, + "x": 120, + "y": 450, "w": 40, "h": 30 } @@ -3678,8 +4518,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 390, + "x": 160, + "y": 450, "w": 40, "h": 30 } @@ -3699,8 +4539,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 390, + "x": 200, + "y": 450, "w": 40, "h": 30 } @@ -3720,8 +4560,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 390, + "x": 240, + "y": 450, "w": 40, "h": 30 } @@ -3741,8 +4581,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 390, + "x": 280, + "y": 450, "w": 40, "h": 30 } @@ -3762,8 +4602,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 390, + "x": 320, + "y": 450, "w": 40, "h": 30 } @@ -3782,9 +4622,51 @@ "w": 40, "h": 30 }, + "frame": { + "x": 360, + "y": 450, + "w": 40, + "h": 30 + } + }, + { + "filename": "626_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, "frame": { "x": 400, - "y": 390, + "y": 450, + "w": 40, + "h": 30 + } + }, + { + "filename": "626_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 450, "w": 40, "h": 30 } @@ -3804,8 +4686,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 390, + "x": 480, + "y": 450, "w": 40, "h": 30 } @@ -3825,8 +4707,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 390, + "x": 520, + "y": 450, "w": 40, "h": 30 } @@ -3847,7 +4729,7 @@ }, "frame": { "x": 0, - "y": 420, + "y": 480, "w": 40, "h": 30 } @@ -3868,7 +4750,7 @@ }, "frame": { "x": 40, - "y": 420, + "y": 480, "w": 40, "h": 30 } @@ -3889,7 +4771,7 @@ }, "frame": { "x": 80, - "y": 420, + "y": 480, "w": 40, "h": 30 } @@ -3910,7 +4792,7 @@ }, "frame": { "x": 120, - "y": 420, + "y": 480, "w": 40, "h": 30 } @@ -3931,7 +4813,7 @@ }, "frame": { "x": 160, - "y": 420, + "y": 480, "w": 40, "h": 30 } @@ -3952,7 +4834,7 @@ }, "frame": { "x": 200, - "y": 420, + "y": 480, "w": 40, "h": 30 } @@ -3973,7 +4855,7 @@ }, "frame": { "x": 240, - "y": 420, + "y": 480, "w": 40, "h": 30 } @@ -3994,7 +4876,7 @@ }, "frame": { "x": 280, - "y": 420, + "y": 480, "w": 40, "h": 30 } @@ -4015,7 +4897,7 @@ }, "frame": { "x": 320, - "y": 420, + "y": 480, "w": 40, "h": 30 } @@ -4036,7 +4918,7 @@ }, "frame": { "x": 360, - "y": 420, + "y": 480, "w": 40, "h": 30 } @@ -4057,7 +4939,7 @@ }, "frame": { "x": 400, - "y": 420, + "y": 480, "w": 40, "h": 30 } @@ -4078,7 +4960,7 @@ }, "frame": { "x": 440, - "y": 420, + "y": 480, "w": 40, "h": 30 } @@ -4099,7 +4981,7 @@ }, "frame": { "x": 480, - "y": 420, + "y": 480, "w": 40, "h": 30 } @@ -4119,14 +5001,35 @@ "h": 30 }, "frame": { - "x": 0, - "y": 450, + "x": 520, + "y": 480, "w": 40, "h": 30 } }, { - "filename": "641-incarnate_1", + "filename": "643_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 510, + "w": 40, + "h": 30 + } + }, + { + "filename": "643_3", "rotated": false, "trimmed": false, "sourceSize": { @@ -4141,13 +5044,13 @@ }, "frame": { "x": 40, - "y": 450, + "y": 510, "w": 40, "h": 30 } }, { - "filename": "641-therian_1", + "filename": "644_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -4162,13 +5065,13 @@ }, "frame": { "x": 80, - "y": 450, + "y": 510, "w": 40, "h": 30 } }, { - "filename": "642-incarnate_1", + "filename": "644_3", "rotated": false, "trimmed": false, "sourceSize": { @@ -4183,13 +5086,13 @@ }, "frame": { "x": 120, - "y": 450, + "y": 510, "w": 40, "h": 30 } }, { - "filename": "642-therian_1", + "filename": "646-black_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -4204,13 +5107,13 @@ }, "frame": { "x": 160, - "y": 450, + "y": 510, "w": 40, "h": 30 } }, { - "filename": "645-incarnate_1", + "filename": "646-black_3", "rotated": false, "trimmed": false, "sourceSize": { @@ -4225,13 +5128,13 @@ }, "frame": { "x": 200, - "y": 450, + "y": 510, "w": 40, "h": 30 } }, { - "filename": "645-therian_1", + "filename": "646-white_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -4246,7 +5149,70 @@ }, "frame": { "x": 240, - "y": 450, + "y": 510, + "w": 40, + "h": 30 + } + }, + { + "filename": "646-white_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 510, + "w": 40, + "h": 30 + } + }, + { + "filename": "646_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 510, + "w": 40, + "h": 30 + } + }, + { + "filename": "646_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 510, "w": 40, "h": 30 } @@ -4266,8 +5232,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 450, + "x": 400, + "y": 510, "w": 40, "h": 30 } @@ -4287,8 +5253,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 450, + "x": 440, + "y": 510, "w": 40, "h": 30 } @@ -4308,8 +5274,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 450, + "x": 480, + "y": 510, "w": 40, "h": 30 } @@ -4329,8 +5295,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 450, + "x": 520, + "y": 510, "w": 40, "h": 30 } @@ -4350,8 +5316,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 450, + "x": 0, + "y": 540, "w": 40, "h": 30 } @@ -4371,8 +5337,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 450, + "x": 40, + "y": 540, "w": 40, "h": 30 } @@ -4392,8 +5358,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 480, + "x": 80, + "y": 540, "w": 40, "h": 30 } @@ -4413,8 +5379,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 480, + "x": 120, + "y": 540, "w": 40, "h": 30 } @@ -4434,8 +5400,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 480, + "x": 160, + "y": 540, "w": 40, "h": 30 } @@ -4455,8 +5421,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 480, + "x": 200, + "y": 540, "w": 40, "h": 30 } @@ -4476,8 +5442,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 480, + "x": 240, + "y": 540, "w": 40, "h": 30 } @@ -4497,8 +5463,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 480, + "x": 280, + "y": 540, "w": 40, "h": 30 } @@ -4518,8 +5484,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 480, + "x": 320, + "y": 540, "w": 40, "h": 30 } @@ -4539,8 +5505,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 480, + "x": 360, + "y": 540, "w": 40, "h": 30 } @@ -4560,8 +5526,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 480, + "x": 400, + "y": 540, "w": 40, "h": 30 } @@ -4581,8 +5547,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 480, + "x": 440, + "y": 540, "w": 40, "h": 30 } @@ -4602,8 +5568,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 480, + "x": 480, + "y": 540, "w": 40, "h": 30 } @@ -4623,8 +5589,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 480, + "x": 520, + "y": 540, "w": 40, "h": 30 } @@ -4635,6 +5601,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:b615ea9a62bec26b97d0171030d11a55:35fd8571f91311ef2e9944578f979466:f1931bc28ee7f32dba7543723757cf2a$" + "smartupdate": "$TexturePacker:SmartUpdate:d7ba1fabe0180573c58dd3fb1ea6e279:cbff8ace700a0111c2ee3279d01d11e4:f1931bc28ee7f32dba7543723757cf2a$" } } diff --git a/public/images/pokemon_icons_5v.png b/public/images/pokemon_icons_5v.png index 9dd1b278ac1bf13f0b003f0f43876c27052809ce..ba23de2e3f538d8e07dbbe1b7bf16b4d02c97c05 100644 GIT binary patch literal 51486 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 RbEE(O002ovPDHLkV1h*wQAq#* literal 41975 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 QH2?qr07*qoM6N<$f@rYXJpcdz diff --git a/public/images/pokemon_icons_7v.json b/public/images/pokemon_icons_7v.json index 30e12ce3bb4..d82cc4e3210 100644 --- a/public/images/pokemon_icons_7v.json +++ b/public/images/pokemon_icons_7v.json @@ -4,8 +4,8 @@ "image": "pokemon_icons_7v.png", "format": "RGBA8888", "size": { - "w": 440, - "h": 440 + "w": 450, + "h": 450 }, "scale": 1, "frames": [ @@ -304,7 +304,7 @@ } }, { - "filename": "747_2", + "filename": "746-school_1", "rotated": false, "trimmed": false, "sourceSize": { @@ -324,6 +324,90 @@ "h": 30 } }, + { + "filename": "746-school_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "746_1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "746_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "747_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 30, + "w": 40, + "h": 30 + } + }, { "filename": "747_3", "rotated": false, @@ -339,7 +423,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 320, "y": 30, "w": 40, "h": 30 @@ -360,7 +444,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 360, "y": 30, "w": 40, "h": 30 @@ -381,7 +465,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 400, "y": 30, "w": 40, "h": 30 @@ -402,8 +486,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 30, + "x": 0, + "y": 60, "w": 40, "h": 30 } @@ -423,8 +507,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 30, + "x": 40, + "y": 60, "w": 40, "h": 30 } @@ -444,8 +528,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 30, + "x": 80, + "y": 60, "w": 40, "h": 30 } @@ -465,8 +549,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 30, + "x": 120, + "y": 60, "w": 40, "h": 30 } @@ -486,7 +570,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 160, "y": 60, "w": 40, "h": 30 @@ -507,7 +591,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 200, "y": 60, "w": 40, "h": 30 @@ -528,7 +612,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 240, "y": 60, "w": 40, "h": 30 @@ -549,7 +633,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 280, "y": 60, "w": 40, "h": 30 @@ -570,7 +654,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 320, "y": 60, "w": 40, "h": 30 @@ -591,7 +675,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 360, "y": 60, "w": 40, "h": 30 @@ -612,7 +696,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 400, "y": 60, "w": 40, "h": 30 @@ -633,8 +717,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 60, + "x": 0, + "y": 90, "w": 40, "h": 30 } @@ -654,8 +738,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 60, + "x": 40, + "y": 90, "w": 40, "h": 30 } @@ -675,8 +759,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 60, + "x": 80, + "y": 90, "w": 40, "h": 30 } @@ -696,8 +780,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 60, + "x": 120, + "y": 90, "w": 40, "h": 30 } @@ -717,7 +801,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 160, "y": 90, "w": 40, "h": 30 @@ -738,7 +822,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 200, "y": 90, "w": 40, "h": 30 @@ -759,7 +843,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 240, "y": 90, "w": 40, "h": 30 @@ -780,7 +864,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 280, "y": 90, "w": 40, "h": 30 @@ -801,7 +885,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 320, "y": 90, "w": 40, "h": 30 @@ -822,7 +906,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 360, "y": 90, "w": 40, "h": 30 @@ -843,7 +927,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 400, "y": 90, "w": 40, "h": 30 @@ -864,8 +948,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 90, + "x": 0, + "y": 120, "w": 40, "h": 30 } @@ -885,8 +969,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 90, + "x": 40, + "y": 120, "w": 40, "h": 30 } @@ -906,8 +990,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 90, + "x": 80, + "y": 120, "w": 40, "h": 30 } @@ -927,8 +1011,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 90, + "x": 120, + "y": 120, "w": 40, "h": 30 } @@ -948,7 +1032,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 160, "y": 120, "w": 40, "h": 30 @@ -969,7 +1053,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 200, "y": 120, "w": 40, "h": 30 @@ -990,7 +1074,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 240, "y": 120, "w": 40, "h": 30 @@ -1011,7 +1095,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 280, "y": 120, "w": 40, "h": 30 @@ -1032,7 +1116,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 320, "y": 120, "w": 40, "h": 30 @@ -1053,7 +1137,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 360, "y": 120, "w": 40, "h": 30 @@ -1074,7 +1158,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 400, "y": 120, "w": 40, "h": 30 @@ -1095,8 +1179,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 120, + "x": 0, + "y": 150, "w": 40, "h": 30 } @@ -1116,8 +1200,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 120, + "x": 40, + "y": 150, "w": 40, "h": 30 } @@ -1137,8 +1221,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 120, + "x": 80, + "y": 150, "w": 40, "h": 30 } @@ -1158,8 +1242,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 120, + "x": 120, + "y": 150, "w": 40, "h": 30 } @@ -1179,7 +1263,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 160, "y": 150, "w": 40, "h": 30 @@ -1200,7 +1284,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 200, "y": 150, "w": 40, "h": 30 @@ -1221,7 +1305,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 240, "y": 150, "w": 40, "h": 30 @@ -1242,7 +1326,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 280, "y": 150, "w": 40, "h": 30 @@ -1263,7 +1347,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 320, "y": 150, "w": 40, "h": 30 @@ -1284,7 +1368,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 360, "y": 150, "w": 40, "h": 30 @@ -1305,7 +1389,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 400, "y": 150, "w": 40, "h": 30 @@ -1326,8 +1410,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 150, + "x": 0, + "y": 180, "w": 40, "h": 30 } @@ -1347,8 +1431,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 150, + "x": 40, + "y": 180, "w": 40, "h": 30 } @@ -1368,8 +1452,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 150, + "x": 80, + "y": 180, "w": 40, "h": 30 } @@ -1389,8 +1473,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 150, + "x": 120, + "y": 180, "w": 40, "h": 30 } @@ -1410,7 +1494,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 160, "y": 180, "w": 40, "h": 30 @@ -1431,7 +1515,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 200, "y": 180, "w": 40, "h": 30 @@ -1452,7 +1536,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 240, "y": 180, "w": 40, "h": 30 @@ -1473,7 +1557,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 280, "y": 180, "w": 40, "h": 30 @@ -1494,7 +1578,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 320, "y": 180, "w": 40, "h": 30 @@ -1515,7 +1599,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 360, "y": 180, "w": 40, "h": 30 @@ -1536,7 +1620,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 400, "y": 180, "w": 40, "h": 30 @@ -1557,8 +1641,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 180, + "x": 0, + "y": 210, "w": 40, "h": 30 } @@ -1578,8 +1662,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 180, + "x": 40, + "y": 210, "w": 40, "h": 30 } @@ -1599,8 +1683,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 180, + "x": 80, + "y": 210, "w": 40, "h": 30 } @@ -1620,8 +1704,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 180, + "x": 120, + "y": 210, "w": 40, "h": 30 } @@ -1641,7 +1725,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 160, "y": 210, "w": 40, "h": 30 @@ -1662,7 +1746,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 200, "y": 210, "w": 40, "h": 30 @@ -1683,7 +1767,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 240, "y": 210, "w": 40, "h": 30 @@ -1704,7 +1788,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 280, "y": 210, "w": 40, "h": 30 @@ -1725,7 +1809,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 320, "y": 210, "w": 40, "h": 30 @@ -1746,7 +1830,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 360, "y": 210, "w": 40, "h": 30 @@ -1767,7 +1851,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 400, "y": 210, "w": 40, "h": 30 @@ -1788,8 +1872,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 210, + "x": 0, + "y": 240, "w": 40, "h": 30 } @@ -1809,8 +1893,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 210, + "x": 40, + "y": 240, "w": 40, "h": 30 } @@ -1830,8 +1914,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 210, + "x": 80, + "y": 240, "w": 40, "h": 30 } @@ -1851,8 +1935,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 210, + "x": 120, + "y": 240, "w": 40, "h": 30 } @@ -1872,7 +1956,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 160, "y": 240, "w": 40, "h": 30 @@ -1893,12 +1977,180 @@ "h": 30 }, "frame": { - "x": 40, + "x": 200, "y": 240, "w": 40, "h": 30 } }, + { + "filename": "780_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 240, + "w": 40, + "h": 30 + } + }, + { + "filename": "780_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 240, + "w": 40, + "h": 30 + } + }, + { + "filename": "782_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 240, + "w": 40, + "h": 30 + } + }, + { + "filename": "782_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 240, + "w": 40, + "h": 30 + } + }, + { + "filename": "783_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 240, + "w": 40, + "h": 30 + } + }, + { + "filename": "783_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 270, + "w": 40, + "h": 30 + } + }, + { + "filename": "784_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 270, + "w": 40, + "h": 30 + } + }, + { + "filename": "784_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 270, + "w": 40, + "h": 30 + } + }, { "filename": "789_1", "rotated": false, @@ -1914,8 +2166,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 240, + "x": 120, + "y": 270, "w": 40, "h": 30 } @@ -1935,8 +2187,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 240, + "x": 160, + "y": 270, "w": 40, "h": 30 } @@ -1956,8 +2208,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 240, + "x": 200, + "y": 270, "w": 40, "h": 30 } @@ -1977,8 +2229,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 240, + "x": 240, + "y": 270, "w": 40, "h": 30 } @@ -1998,8 +2250,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 240, + "x": 280, + "y": 270, "w": 40, "h": 30 } @@ -2019,8 +2271,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 240, + "x": 320, + "y": 270, "w": 40, "h": 30 } @@ -2040,8 +2292,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 240, + "x": 360, + "y": 270, "w": 40, "h": 30 } @@ -2061,8 +2313,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 240, + "x": 400, + "y": 270, "w": 40, "h": 30 } @@ -2082,8 +2334,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 240, + "x": 0, + "y": 300, "w": 40, "h": 30 } @@ -2103,8 +2355,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 270, + "x": 40, + "y": 300, "w": 40, "h": 30 } @@ -2124,8 +2376,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 270, + "x": 80, + "y": 300, "w": 40, "h": 30 } @@ -2145,8 +2397,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 270, + "x": 120, + "y": 300, "w": 40, "h": 30 } @@ -2166,8 +2418,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 270, + "x": 160, + "y": 300, "w": 40, "h": 30 } @@ -2187,8 +2439,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 270, + "x": 200, + "y": 300, "w": 40, "h": 30 } @@ -2208,8 +2460,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 270, + "x": 240, + "y": 300, "w": 40, "h": 30 } @@ -2229,8 +2481,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 270, + "x": 280, + "y": 300, "w": 40, "h": 30 } @@ -2250,8 +2502,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 270, + "x": 320, + "y": 300, "w": 40, "h": 30 } @@ -2271,8 +2523,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 270, + "x": 360, + "y": 300, "w": 40, "h": 30 } @@ -2292,8 +2544,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 270, + "x": 400, + "y": 300, "w": 40, "h": 30 } @@ -2313,8 +2565,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 270, + "x": 0, + "y": 330, "w": 40, "h": 30 } @@ -2334,8 +2586,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 300, + "x": 40, + "y": 330, "w": 40, "h": 30 } @@ -2355,8 +2607,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 300, + "x": 80, + "y": 330, "w": 40, "h": 30 } @@ -2376,8 +2628,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 300, + "x": 120, + "y": 330, "w": 40, "h": 30 } @@ -2397,8 +2649,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 300, + "x": 160, + "y": 330, "w": 40, "h": 30 } @@ -2418,8 +2670,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 300, + "x": 200, + "y": 330, "w": 40, "h": 30 } @@ -2439,8 +2691,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 300, + "x": 240, + "y": 330, "w": 40, "h": 30 } @@ -2460,8 +2712,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 300, + "x": 280, + "y": 330, "w": 40, "h": 30 } @@ -2481,8 +2733,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 300, + "x": 320, + "y": 330, "w": 40, "h": 30 } @@ -2502,8 +2754,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 300, + "x": 360, + "y": 330, "w": 40, "h": 30 } @@ -2523,8 +2775,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 300, + "x": 400, + "y": 330, "w": 40, "h": 30 } @@ -2544,8 +2796,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 300, + "x": 0, + "y": 360, "w": 40, "h": 30 } @@ -2565,8 +2817,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 330, + "x": 40, + "y": 360, "w": 40, "h": 30 } @@ -2586,8 +2838,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 330, + "x": 80, + "y": 360, "w": 40, "h": 30 } @@ -2607,8 +2859,8 @@ "h": 30 }, "frame": { - "x": 80, - "y": 330, + "x": 120, + "y": 360, "w": 40, "h": 30 } @@ -2628,8 +2880,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 330, + "x": 160, + "y": 360, "w": 40, "h": 30 } @@ -2649,8 +2901,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 330, + "x": 200, + "y": 360, "w": 40, "h": 30 } @@ -2670,8 +2922,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 330, + "x": 240, + "y": 360, "w": 40, "h": 30 } @@ -2691,8 +2943,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 330, + "x": 280, + "y": 360, "w": 40, "h": 30 } @@ -2712,8 +2964,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 330, + "x": 320, + "y": 360, "w": 40, "h": 30 } @@ -2733,8 +2985,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 330, + "x": 360, + "y": 360, "w": 40, "h": 30 } @@ -2754,8 +3006,8 @@ "h": 30 }, "frame": { - "x": 360, - "y": 330, + "x": 400, + "y": 360, "w": 40, "h": 30 } @@ -2775,8 +3027,8 @@ "h": 30 }, "frame": { - "x": 400, - "y": 330, + "x": 0, + "y": 390, "w": 40, "h": 30 } @@ -2796,8 +3048,8 @@ "h": 30 }, "frame": { - "x": 0, - "y": 360, + "x": 40, + "y": 390, "w": 40, "h": 30 } @@ -2817,8 +3069,8 @@ "h": 30 }, "frame": { - "x": 40, - "y": 360, + "x": 80, + "y": 390, "w": 40, "h": 30 } @@ -2838,8 +3090,92 @@ "h": 30 }, "frame": { - "x": 80, - "y": 360, + "x": 120, + "y": 390, + "w": 40, + "h": 30 + } + }, + { + "filename": "2037_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 390, + "w": 40, + "h": 30 + } + }, + { + "filename": "2037_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 390, + "w": 40, + "h": 30 + } + }, + { + "filename": "2038_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 390, + "w": 40, + "h": 30 + } + }, + { + "filename": "2038_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 390, "w": 40, "h": 30 } @@ -2859,8 +3195,8 @@ "h": 30 }, "frame": { - "x": 120, - "y": 360, + "x": 320, + "y": 390, "w": 40, "h": 30 } @@ -2880,8 +3216,8 @@ "h": 30 }, "frame": { - "x": 160, - "y": 360, + "x": 360, + "y": 390, "w": 40, "h": 30 } @@ -2901,8 +3237,8 @@ "h": 30 }, "frame": { - "x": 200, - "y": 360, + "x": 400, + "y": 390, "w": 40, "h": 30 } @@ -2922,8 +3258,8 @@ "h": 30 }, "frame": { - "x": 240, - "y": 360, + "x": 0, + "y": 420, "w": 40, "h": 30 } @@ -2943,8 +3279,8 @@ "h": 30 }, "frame": { - "x": 280, - "y": 360, + "x": 40, + "y": 420, "w": 40, "h": 30 } @@ -2964,8 +3300,8 @@ "h": 30 }, "frame": { - "x": 320, - "y": 360, + "x": 80, + "y": 420, "w": 40, "h": 30 } @@ -2976,6 +3312,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:914c9869d6dab145bbbe443bdc3f932c:80b9ecf9647b68af17c07b88e1a1856e:d5975df27e1e94206a68aa1fd3c2c8d0$" + "smartupdate": "$TexturePacker:SmartUpdate:57eaade41c16d492ffda5339ea142c4d:b96a0f88bd707a9967af73e7bdf13031:d5975df27e1e94206a68aa1fd3c2c8d0$" } } diff --git a/public/images/pokemon_icons_7v.png b/public/images/pokemon_icons_7v.png index 1f7d6e5f8261f47127caf722e50838288cd63d12..12c81de925c809a201a23c769f3abb7349147971 100644 GIT binary patch literal 30580 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 literal 27054 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 literal 46264 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 diff --git a/public/images/pokemon_icons_9v.json b/public/images/pokemon_icons_9v.json index 6c8b93208e3..57159a3fbfb 100644 --- a/public/images/pokemon_icons_9v.json +++ b/public/images/pokemon_icons_9v.json @@ -3291,6 +3291,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:c13ec323095f727665fa953e64e98300:e7531bea9b5e1bef44def5b357c81630:3ec5c0bc286c296cfb7fa30a8b06f3da$" + "smartupdate": "$TexturePacker:SmartUpdate:c01add1e11aabd2f8931110a67a9222b:e7531bea9b5e1bef44def5b357c81630:3ec5c0bc286c296cfb7fa30a8b06f3da$" } } diff --git a/public/images/pokemon_icons_9v.png b/public/images/pokemon_icons_9v.png index f71b6c5ada5fad7f6c35380870005042d0d2b845..f3530abe569a35ed34dbc021ba0720c967802bf0 100644 GIT binary patch literal 35071 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 Date: Thu, 1 May 2025 20:24:37 -0400 Subject: [PATCH 086/262] [Docs] Added changes to markdown files + comment fixes (#5682) * Added changes to markdown files, reworked test boilerplate code + comment fixes * Update comments.md Removed references to jsdoc. Removed mention of @extends which doesn't even exist in tsdoc Increased clarity of documenting `args` parameter. Moved to using active voice instead of passive voice * Fix truncated sentence in returns example * fix create-test-boilerplate.js Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update gameManager.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update comments.md Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update gameManager.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update gameManager.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update gameManager.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update gameManager.ts * Fixed doc thing * Fixed the things Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Fixde boilerplate to use snake case * Update .gitignore to include workspace files * Update linting.md, fix lefthook etc. * Fix tpyo * Update create-test-boilerplate.js Co-authored-by: Dean <69436131+emdeann@users.noreply.github.com> * Update create-test-boilerplate.js Co-authored-by: Dean <69436131+emdeann@users.noreply.github.com> * Update create-test-boilerplate.js Co-authored-by: Dean <69436131+emdeann@users.noreply.github.com> * Reverted boilerplate code fixes and applied review comments Will now be handled by milkmaiden * Fixed up documentation for comments.md and linting.md Comments.md added info pertaining to Kev's review linting.md i just stopped spouting misinformation * Update `biome.jsonc` comments Update `comments.md` Update docs for `AddSubstituteAttr` in `move.ts` to match example * Apply suggestions to the suggestions --------- Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: Dean <69436131+emdeann@users.noreply.github.com> --- .gitignore | 3 +- biome.jsonc | 4 +- docs/comments.md | 117 +++++++++++++++++++++---------- docs/enemy-ai.md | 125 ++++++++++++++++++++++------------ docs/linting.md | 71 +++++++++++++------ lefthook.yml | 5 +- src/data/moves/move.ts | 20 +++--- src/utils/common.ts | 16 ++--- test/testUtils/gameManager.ts | 55 ++++++++------- 9 files changed, 265 insertions(+), 151 deletions(-) diff --git a/.gitignore b/.gitignore index 9d96ed04a15..00df0002e01 100644 --- a/.gitignore +++ b/.gitignore @@ -13,7 +13,8 @@ dist-ssr *.local # Editor directories and files -.vscode/* +.vscode +*.code-workspace .idea .DS_Store *.suo diff --git a/biome.jsonc b/biome.jsonc index a433470cd90..3385614635c 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -105,10 +105,10 @@ "linter": { "rules": { "performance": { - "noDelete": "off" + "noDelete": "off" // TODO: evaluate if this is necessary for the test(s) to function }, "style": { - "noNamespaceImport": "off" + "noNamespaceImport": "off" // this is required for `vi.spyOn` to work in some tests } } } diff --git a/docs/comments.md b/docs/comments.md index 9610052adf2..ba6c9929625 100644 --- a/docs/comments.md +++ b/docs/comments.md @@ -1,64 +1,107 @@ -## How do I comment my code? +# Commenting code -### While we're not enforcing a strict standard, there are some things to keep in mind: +People spend more time reading code than writing it (sometimes substantially more so). As such, comments and documentation are **vital** for any large codebase like this. + +## General Guidelines +While we're not enforcing a strict standard, here are some things to keep in mind: - Make comments meaningful - - Comments should be explaining why a line or block of code exists and what the reason behind it is - - Comments should not be repeating chunks of code or explaining what 'true' and 'false' means in typescript + - Comments should **NOT** repeat _what_ code _does_[^1] or explain concepts obvious to someone with a basic understanding of the language at hand. Instead, focus on explaining _why_ a line or block of code exists. + - Anyone with basic reading comprehension and a good IDE can figure out what code does; gaining a _post hoc_ understanding of the _reasons_ behind its existence takes a lot more digging, effort and bloodshed. +- Keep comments readable + - A comment's verbosity should roughly scale with the complexity of its subject matter. Some people naturally write shorter or longer comments as a personal style, but summarizing a 300 line function with "does a thing" is about as good as writing nothing. Conversely, writing a paragraph-level response where a basic one-liner would suffice is no less undesirable. + - Long comments should ideally be broken into multiple lines at around the 100-120 character mark. This isn't _mandatory_, but avoids unnecessary scrolling in terminals and IDEs. - Make sure comments exist on Functions, Classes, Methods, and Properties - - This may be the most important things to comment. When someone goes to use a function/class/method/etc., having a comment reduces the need to flip back and forth between files to figure out how something works. Peek Definition is great until you're three nested functions deep. - - The best example of this is JSDoc-style comments as seen below: - - When formatted this way, the comment gets shown by intellisense in VS Code or similar IDEs just by hovering over the text! - - Functions also show each the comment for parameter as you type them, making keeping track of what each one does in lengthy functions much more clear -```js -/** - * Changes the type-based weather modifier if this move's power would be reduced by it - * @param user {@linkcode Pokemon} using this move - * @param target {@linkcode Pokemon} target of this move - * @param move {@linkcode Move} being used - * @param args [0] {@linkcode Utils.NumberHolder} for arenaAttackTypeMultiplier - * @returns true if the function succeeds - */ -apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { -} + - These may be the most important things to comment. When someone goes to use a function/class/method/etc., having a comment reduces the need to flip back and forth between files to figure out what XYZ does. Peek Definition is great until you're three nested levels deep. -/** Set to true when experimental animated sprites from Gen6+ are used */ -public experimentalSprites: boolean = false; +[^1]: With exceptions for extremely long, convoluted or unintuitive methods (though an over-dependency on said comments is likely a symptom of poorly structured code). +# TSDoc +The codebase makes extensive use of [TSDoc](https://tsdoc.org), which is a TypeScript-specific version of [JSDoc](https://jsdoc.app/about-getting-started) +that uses similar syntax and attaches to functions, classes, etc. + +When formatted correctly, these comments are shown within VS Code or similar IDEs just by hovering over the function or object. +- Functions also show the comment for each parameter as you type them, making keeping track of arguments inside lengthy functions much more clear. + +They can also be used to generate a commentated overview of the codebase. There is a GitHub action that automatically updates [this docs site](https://pagefaultgames.github.io/pokerogue/main/index.html) +and you can generate it locally as well via `npm run docs` which will generate into the `typedoc/` directory. + +## Syntax +For an example of how TSDoc comments work, here are some TSDoc comments taken from `src/data/moves/move.ts`: +```ts /** - * Cures the user's party of non-volatile status conditions, ie. Heal Bell, Aromatherapy - * @extends MoveAttr - * @see {@linkcode apply} + * Attribute to put in a {@link https://bulbapedia.bulbagarden.net/wiki/Substitute_(doll) | Substitute Doll} for the user. */ -export class DontHealThePartyPlsAttr extends MoveAttr { +export class AddSubstituteAttr extends MoveEffectAttr { + /** The ratio of the user's max HP that is required to apply this effect */ + private hpCost: number; + /** Whether the damage taken should be rounded up (Shed Tail rounds up) */ + private roundUp: boolean; + + constructor(hpCost: number, roundUp: boolean) { + // code removed + } + + /** + * Removes 1/4 of the user's maximum HP (rounded down) to create a substitute for the user + * @param user - The {@linkcode Pokemon} that used the move. + * @param target - n/a + * @param move - The {@linkcode Move} with this attribute. + * @param args - n/a + * @returns `true` if the attribute successfully applies, `false` otherwise + */ + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + // code removed + } + + getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { + // code removed + } + + getCondition(): MoveConditionFunc { + // code removed + } + + /** + * Get the substitute-specific failure message if one should be displayed. + * @param user - The pokemon using the move. + * @returns The substitute-specific failure message if the conditions apply, otherwise `undefined` + */ + getFailedText(user: Pokemon, _target: Pokemon, _move: Move): string | undefined { + // code removed + } } ``` -You'll notice this contains an `{@linkcode Object}` tag for each parameter. This provides an easy type denomination and hyperlink to that type using VS Code's Intellisense. `@linkcode` is used instead of `@link` so that the text appears in monospace which is more obviously a `type` rather than a random hyperlink. -If you're interested in going more in depth, you can find a reference guide for how comments like these work [here](https://jsdoc.app) +Looking at the example given, you'll notice this contains an `{@linkcode XYZ}` tag in some of the parameters. This provides a clickable hyperlink to that type or object in most modern IDEs. (`@linkcode` is used here instead of `@link` so that the text appears in monospace which is more obviously a `type` rather than a random hyperlink.) \ +Also note the dashes (` - `) between the parameter names and descriptions - these are **mandatory** under the TSDoc spec[^2]. + +If you're interested in going more in depth, you can find a reference guide for how comments like these work [on the TSDoc website](https://tsdoc.org). +The [playground page](https://tsdoc.org/play/) there can also be used for live testing of examples. + +[^2]: Incidentally, this is also the only place dashes are explicitly _required_. ### What not to do: - Don't leave comments for code you don't understand - - Incorrect information is worse than no information. If you aren't sure how something works, don't make something up to explain it. Ask for help instead. + - Incorrect information is worse than no information. If you aren't sure how something works, don't make something up to explain it - ask for help and/or mark it as TODO. - Don't over-comment - - Not everything needs an explanation. Try to summarize blocks of code instead of singular lines where possible. Single line comments should call out specific oddities. + - Not everything needs a comment. Try to summarize blocks of code instead of singular lines where possible, always preferring giving a reason over stating a fact. Single line comments should call out specific oddities or features. ## How do Abilities and Moves differ from other classes? While other classes should be fully documented, Abilities and Moves heavily incoperate inheritance (i.e. the `extends` keyword). Because of this, much of the functionality in these classes is duplicated or only slightly changed between classes. ### With this in mind, there's a few more things to keep in mind for these: - Do not document any parameters if the function mirrors the one they extend. - - Keep this in mind for functions that are not the `apply` function as they are usually sparce and mostly reused -- The class itself must be documented - - This must include the `@extends BaseClass` and `@see {@linkcode apply}` tags + - Keep this in mind for functions that are not the `apply` function as they are usually sparse and mostly reused - Class member variables must be documented - You can use a single line documentation comment for these `/** i.e. a comment like this */` - `args` parameters must be documented if used - - This should look something like this when there are multiple: + - This should look something vaguely like this when there are multiple: ```ts /** ... - * @param args [0] {@linkcode Utils.NumberHolder} of arenaAttackTypeMultiplier - * [1] {@linkcode Utils.BooleanHolder} of cancelled - * [2] {@linkcode Utils.BooleanHolder} of rWeDoneYet + * @param args - + * `[0]` The {@linkcode Move} being used + * `[1]` A {@linkcode BooleanHolder} used to track XYZ + * `[2]` {@linkcode BooleanHolder} `paramC` - paramC description here ... */ -``` \ No newline at end of file +``` diff --git a/docs/enemy-ai.md b/docs/enemy-ai.md index 8edf5a3f10e..d73b0af980e 100644 --- a/docs/enemy-ai.md +++ b/docs/enemy-ai.md @@ -37,12 +37,12 @@ The `EnemyCommandPhase` follows this process to determine whether or not an enem 1. If the Pokémon has a move already queued (e.g. they are recharging after using Hyper Beam), or they are trapped (e.g. by Bind or Arena Trap), skip to resolving a `FIGHT` command (see next section). 2. For each Pokémon in the enemy's party, [compute their matchup scores](#calculating-matchup-scores) against the active player Pokémon. If there are two active player Pokémon in the battle, add their matchup scores together. 3. Take the party member with the highest matchup score and apply a multiplier to the score that reduces the score based on how frequently the enemy trainer has switched Pokémon in the current battle. - - The multiplier scales off of a counter that increments when the enemy trainer chooses to switch a Pokémon and decrements when they choose to use a move. + - The multiplier scales off of a counter that increments when the enemy trainer chooses to switch a Pokémon and decrements when they choose to use a move. 4. Compare the result of Step 3 with the active enemy Pokémon's matchup score. If the party member's matchup score is at least three times that of the active Pokémon, switch to that party member. - - "Boss" trainers only require the party member's matchup score to be at least two times that of the active Pokémon, so they are more likely to switch than other trainers. The full list of boss trainers in the game is as follows: - - All gym leaders, Elite 4 members, and Champions - - All Evil Team leaders - - The last three Rival Fights (on waves 95, 145, and 195) + - "Boss" trainers only require the party member's matchup score to be at least two times that of the active Pokémon, so they are more likely to switch than other trainers. The full list of boss trainers in the game is as follows: + - All gym leaders, Elite 4 members, and Champions + - All Evil Team leaders + - The last three Rival Fights (on waves 95, 145, and 195) 5. If the enemy decided to switch, send a switch `turnCommand` and end this `EnemyCommandPhase`; otherwise, move on to resolving a `FIGHT` enemy command. ## Step 2: Selecting a Move @@ -54,28 +54,35 @@ At this point, the enemy (a wild or trainer Pokémon) has decided against switch In `getNextMove()`, the enemy Pokémon chooses a move to use in the following steps: 1. If the Pokémon has a move in its Move Queue (e.g. the second turn of a charging move), and the queued move is still usable, use that move against the given target. 2. Filter out any moves it can't use within its moveset. The remaining moves make up the enemy's **move pool** for the turn. - 1. A move can be unusable if it has no PP left or it has been disabled by another move or effect - 2. If the enemy's move pool is empty, use Struggle. + 1. A move can be unusable if it has no PP left or it has been disabled by another move or effect. + 2. If the enemy's move pool is empty, use Struggle. 3. Calculate the **move score** of each move in the enemy's move pool. - 1. A move's move score is equivalent to the move's maximum **target score** among all of the move's possible targets on the field ([more on this later](#calculating-move-and-target-scores)). - 2. A move's move score is set to -20 if at least one of these conditions are met: - - The move is unimplemented (or, more precisely, the move's name ends with " (N)"). - - Conditions for the move to succeed are not met (unless the move is Sucker Punch, Upper Hand, or Thunderclap, as those moves' conditions can't be resolved before the turn starts). - - The move's target scores are 0 or `NaN` for each target. In this case, the game assumes the target score calculation for that move is unimplemented. + 1. A move's move score is equivalent to the move's maximum **target score** among all of the move's possible targets on the field ([more on this later](#calculating-move-and-target-scores)). + 2. A move's move score is set to -20 if at least one of these conditions are met: + - The move is unimplemented (or, more precisely, the move's name ends with "(N)"). + - Conditions for the move to succeed are not met (unless the move is Sucker Punch, Upper Hand or Thunderclap, as those moves' conditions can't be resolved until after the turn starts). + - The move's target scores are 0 or `NaN` for each target. In this case, the game assumes the target score calculation for that move is unimplemented. 4. Sort the move pool in descending order of move scores. 5. From here, the enemy's move selection varies based on its `aiType`. If the enemy is a Boss Pokémon or has a Trainer, it uses the `SMART` AI type; otherwise, it uses the `SMART_RANDOM` AI type. - 1. Let $m_i$ be the *i*-th move in the sorted move pool $M$: - - If `aiType === SMART_RANDOM`, the enemy has a 5/8 chance of selecting $m_0$ and a 3/8 chance of advancing to the next best move $m_1$, where it then repeats this roll. This process stops when a move is selected or the last move in the move pool is reached. - - If `aiType === SMART`, a similar loop is used to decide between selecting the move $m_i$ and advancing to the next iteration with the move $m_{i+1}$. However, instead of using a flat probability, the following conditions need to be met to advance from selecting $m_i$ to $m_{i+1}$: - - $\text{sign}(s_i) = \text{sign}(s_{i+1})$, where $s_i$ is the move score of $m_i$. - - $\text{randInt}(0, 100) < \text{round}(\frac{s_{i+1}}{s_i}\times 50)$. In other words: if the scores of $m_i$ and $m_{i+1}$ have the same sign, the chance to advance to the next iteration with $m_{i+1}$ is proportional to how close the scores are to each other. The probability to advance to the next iteration is at most 50 percent (when $s_i$ and $s_{i+1}$ are equal). + 1. Let $m_i$ be the *i*-th move in the sorted move pool $M$: + - If `aiType === SMART_RANDOM`, the enemy has a 5/8 chance of selecting $m_0$ and a 3/8 chance of advancing to the next best move $m_1$, where it then repeats this roll. This process stops when a move is selected or the last move in the move pool is reached. + - If `aiType === SMART`, a similar loop is used to decide between selecting the move $m_i$ and advancing to the next iteration with the move $m_{i+1}$. However, instead of using a flat probability, the following conditions need to be met to advance from selecting $m_i$ to $m_{i+1}$: + - $\text{sign}(s_i) = \text{sign}(s_{i+1})$, where $s_i$ is the move score of $m_i$. + - $\text{randInt}(0, 100) < \text{round}(\frac{s_{i+1}}{s_i}\times 50)$. In other words: if the scores of $m_i$ and $m_{i+1}$ have the same sign, the chance to advance to the next iteration with $m_{i+1}$ is proportional to how close the scores are to each other. The probability to advance to the next iteration is at most 50 percent (when $s_i$ and $s_{i+1}$ are equal). 6. The enemy will use the move selected in Step 5 against the target(s) with the highest [**target selection score (TSS)**](#choosing-targets-with-getnexttargets) ### Calculating Move and Target Scores -As part of the move selection process, the enemy Pokémon must compute a **target score (TS)** for each legal target for each move in its move pool. The base target score for all moves is a combination of the move's **user benefit score (UBS)** and **target benefit score (TBS)**. +As part of the move selection process, the enemy Pokémon must compute a **target score (TS)** for each legal target for each move in its move pool. The base target score is a combination of the move's **user benefit score (UBS)** and **target benefit score (TBS)**, representing how much the move helps or hinders the user and/or its target(s). -![equation](https://latex.codecogs.com/png.image?%5Cinline%20%5Cdpi%7B100%7D%5Cbg%7Bwhite%7D%5Ctext%7BTS%7D=%5Ctext%7BUBS%7D+%5Ctext%7BTBS%7D%5Ctimes%5Cleft%5C%7B%5Cbegin%7Bmatrix%7D-1&%5Ctext%7Bif%20target%20is%20an%20opponent%7D%5C%5C1&%5Ctext%7Botherwise%7D%5C%5C%5Cend%7Bmatrix%7D%5Cright.) +$$ +\text{TS} = \text{UBS} + \left( \text{TBS} \times +\begin{cases} +-1 & \text{if target is an opponent} \\ +1 & \text{otherwise} +\end{cases} +\right) +$$ A move's UBS and TBS are computed with the respective functions in the `Move` class: @@ -96,19 +103,38 @@ In addition to the base score from `Move.getTargetBenefitScore()`, attack moves - The move's category (Physical/Special), and whether the user has a higher Attack or Special Attack stat. More specifically, the following steps are taken to compute the move's `attackScore`: -1. Compute a multiplier based on the move's type effectiveness: +1. Compute a multiplier based on the move's type effectiveness: - ![typeMultEqn](https://latex.codecogs.com/png.image?%5Cdpi%7B110%7D%5Cbg%7Bwhite%7D%5Ctext%7BtypeMult%7D=%5Cleft%5C%7B%5Cbegin%7Bmatrix%7D2&&%5Ctext%7Bif%20move%20is%20super%20effective(or%20better)%7D%5C%5C-2&&%5Ctext%7Botherwise%7D%5C%5C%5Cend%7Bmatrix%7D%5Cright.) + $$ + \text{typeMult} = + \begin{cases} + 2 & \text{if move is super effective (or better)} \\ + -2 & \text{otherwise} + \end{cases} + $$ 2. Compute a multiplier based on the move's category and the user's offensive stats: - 1. Compute the user's offensive stat ratio: - - ![statRatioEqn](https://latex.codecogs.com/png.image?%5Cinline%20%5Cdpi%7B100%7D%5Cbg%7Bwhite%7D%5Ctext%7BstatRatio%7D=%5Cleft%5C%7B%5Cbegin%7Bmatrix%7D%5Cfrac%7B%5Ctext%7BuserSpAtk%7D%7D%7B%5Ctext%7BuserAtk%7D%7D&%5Ctext%7Bif%20move%20is%20physical%7D%5C%5C%5Cfrac%7B%5Ctext%7BuserAtk%7D%7D%7B%5Ctext%7BuserSpAtk%7D%7D&%5Ctext%7Botherwise%7D%5C%5C%5Cend%7Bmatrix%7D%5Cright.) - 2. Compute the stat-based multiplier: + 1. Compute the user's offensive stat ratio: - ![statMultEqn](https://latex.codecogs.com/png.image?%5Cinline%20%5Cdpi%7B100%7D%5Cbg%7Bwhite%7D%5Ctext%7BstatMult%7D=%5Cleft%5C%7B%5Cbegin%7Bmatrix%7D2&%5Ctext%7Bif%20statRatio%7D%5Cle%200.75%5C%5C1.5&%5Ctext%7Bif%5C;%7D0.75%5Cle%5Ctext%7BstatRatio%7D%5Cle%200.875%5C%5C1&%5Ctext%7Botherwise%7D%5C%5C%5Cend%7Bmatrix%7D%5Cright.) + $$ + \text{statRatio} = + \begin{cases} + \frac{\text{userSpAtk}}{\text{userAtk}} & \text{if move is physical} \\ + \frac{\text{userAtk}}{\text{userSpAtk}} & \text{otherwise} + \end{cases} + $$ + 2. Compute the stat-based multiplier: + + $$ + \text{statMult} = + \begin{cases} + 2 & \text{if statRatio} \leq 0.75 \\ + 1.5 & \text{if } 0.75 \leq \text{statRatio} \leq 0.875 \\ + 1 & \text{otherwise} + \end{cases} + $$ 3. Calculate the move's `attackScore`: - $\text{attackScore} = (\text{typeMult}\times \text{statMult})+\lfloor \frac{\text{power}}{5} \rfloor$ + $\text{attackScore} = (\text{typeMult}\times \text{statMult})+\lfloor \frac{\text{power}}{5} \rfloor$ The maximum total multiplier in `attackScore` ($\text{typeMult}\times \text{statMult}$) is 4, which occurs for attacks that are super effective against the target and are categorically aligned with the user's offensive stats (e.g. the move is physical, and the user has much higher Attack than Sp. Atk). The minimum total multiplier of -4 occurs (somewhat confusingly) for attacks that are not super effective but are categorically aligned with the user's offensive stats. @@ -125,18 +151,31 @@ The final step to calculate an attack move's target score (TS) is to multiply th The enemy's target selection for single-target moves works in a very similar way to its move selection. Each potential target is given a **target selection score (TSS)** which is based on the move's [target benefit score](#calculating-move-and-target-scores) for that target: -![TSSEqn](https://latex.codecogs.com/png.image?%5Cinline%20%5Cdpi%7B100%7D%5Cbg%7Bwhite%7D%5Ctext%7BTSS%7D=%5Ctext%7BTBS%7D%5Ctimes%5Cleft%5C%7B%5Cbegin%7Bmatrix%7D-1&%5Ctext%7Bif%20target%20is%20an%20opponent%7D%5C%5C1&%5Ctext%7Botherwise%7D%5C%5C%5Cend%7Bmatrix%7D%5Cright.) +$$ +\text{TSS} = \text{TBS} \times +\begin{cases} +-1 & \text{if target is an opponent} \\ +1 & \text{otherwise} +\end{cases} +$$ Once the TSS is calculated for each target, the target is selected as follows: 1. Sort the targets (indexes) in decreasing order of their target selection scores (or weights). Let $t_i$ be the index of the *i*-th target in the sorted list, and let $w_i$ be that target's corresponding TSS. 2. Normalize the weights. Let $w_n$ be the lowest-weighted target in the sorted list, then: - - ![normWeightEqn](https://latex.codecogs.com/png.image?%5Cinline%20%5Cdpi%7B100%7D%5Cbg%7Bwhite%7DW_i=%5Cleft%5C%7B%5Cbegin%7Bmatrix%7Dw_i+%7Cw_n%7C&%5Ctext%7Bif%5C;%7Dw_n%5C;%5Ctext%7Bis%20negative%7D%5C%5Cw_i&%5Ctext%7Botherwise%7D%5C%5C%5Cend%7Bmatrix%7D%5Cright.) + + $$ + W_i = + \begin{cases} + w_i + |w_n| & \text{if } w_n \text{ is negative} \\ + w_i & \text{otherwise} + \end{cases} + $$ + 3. Remove all weights from the list such that $W_i < \frac{W_0}{2}$ 4. Generate a random integer $R=\text{rand}(0, W_{\text{total}})$ where $W_{\text{total}}$ is the sum of all the remaining weights after Step 3. 5. For each target $(t_i, W_i)$, - 1. if $R \le \sum_{j=0}^{i} W_i$, or if $t_i$ is the last target in the list, **return** $t_i$ - 2. otherwise, advance to the next target $t_{i+1}$ and repeat this check. + 1. if $R \le \sum_{j=0}^{i} W_i$, or if $t_i$ is the last target in the list, **return** $t_i$ + 2. otherwise, advance to the next target $t_{i+1}$ and repeat this check. Once the target is selected, the enemy has successfully determined its next action for the turn, and its corresponding `EnemyCommandPhase` ends. From here, the `TurnStartPhase` processes the enemy's commands alongside the player's commands and begins to resolve the turn. @@ -145,15 +184,15 @@ Once the target is selected, the enemy has successfully determined its next acti Suppose you enter a single battle against an enemy trainer with the following Pokémon in their party: 1. An [Excadrill](https://bulbapedia.bulbagarden.net/wiki/Excadrill_(Pok%C3%A9mon)) with the Ability Sand Force and the following moveset - 1. Earthquake - 2. Iron Head - 3. Crush Claw - 4. Swords Dance + 1. Earthquake + 2. Iron Head + 3. Crush Claw + 4. Swords Dance 2. A [Heatmor](https://bulbapedia.bulbagarden.net/wiki/Heatmor_(Pok%C3%A9mon)) with the Ability Flash Fire and the following moveset - 1. Fire Lash - 2. Inferno - 3. Hone Claws - 4. Shadow Claw + 1. Fire Lash + 2. Inferno + 3. Hone Claws + 4. Shadow Claw The enemy trainer leads with their Heatmor, and you lead with a [Dachsbun](https://bulbapedia.bulbagarden.net/wiki/Dachsbun_(Pok%C3%A9mon)) with the Ability Well-Baked Body. We'll cover the enemy's behavior over the next two turns. @@ -172,13 +211,13 @@ Based on the enemy party's matchup scores, whether or not the trainer switches o Now that the enemy Pokémon with the best matchup score is on the field (assuming it survives Dachsbun's attack on the last turn), the enemy will now decide to have Excadrill use one of its moves. Assuming all of its moves are usable, we'll go through the target score calculations for each move: - **Earthquake**: In a single battle, this move is just a 100-power Ground-type physical attack with no additional effects. With no additional benefit score from attributes, the move's base target score against the player's Dachsbun is just the `attackScore` from `AttackMove.getTargetBenefitScore()`. In this case, Earthquake's `attackScore` is given by - + $\text{attackScore}=(\text{typeMult}\times \text{statMult}) + \lfloor \frac{\text{power}}{5} \rfloor = -2\times 2 + 20 = 16$ Here, `typeMult` is -2 because the move is not super effective, and `statMult` is 2 because Excadrill's Attack is significantly higher than its Sp. Atk. Accounting for STAB thanks to Excadrill's typing, the final target score for this move is **24** - **Iron Head**: This move is an 80-power Steel-type physical attack with an additional chance to cause the target to flinch. With these properties, Iron Head has a user benefit score of 0 and a target benefit score given by - + $\text{TBS}=\text{getTargetBenefitScore(FlinchAttr)}-\text{attackScore}$ Under its current implementation, the target benefit score of `FlinchAttr` is -5. Calculating the move's `attackScore`, we get: @@ -198,7 +237,7 @@ Now that the enemy Pokémon with the best matchup score is on the field (assumin where `levels` is the number of stat stages added by the attribute (in this case, +2). The final score for this move is **6** (Note: because this move is self-targeted, we don't flip the sign of TBS when computing the target score). - **Crush Claw**: This move is a 75-power Normal-type physical attack with a 50 percent chance to lower the target's Defense by one stage. The additional effect is implemented by the same `StatStageChangeAttr` as Swords Dance, so we can use the same formulas from before to compute the total TBS and base target score. - + $\text{TBS}=\text{getTargetBenefitScore(StatStageChangeAttr)}-\text{attackScore}$ $\text{TBS}=(-4 + 2)-(-2\times 2 + \lfloor \frac{75}{5} \rfloor)=-2-11=-13$ diff --git a/docs/linting.md b/docs/linting.md index ff512740a80..d3b4e47675f 100644 --- a/docs/linting.md +++ b/docs/linting.md @@ -1,34 +1,65 @@ -# Biome +# Linting & Formatting -## Key Features +> "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." +> +> — Martin Fowler -1. **Automation**: - - A pre-commit hook has been added to automatically run Biome on the added or modified files, ensuring code quality before commits. +Writing clean, readable code is important, and linters and formatters are an integral part of ensuring code quality and readability. +It is for this reason we are using [Biome](https://biomejs.dev), an opinionated linter/formatter (akin to Prettier) with a heavy focus on speed and performance. -2. **Manual Usage**: - - If you prefer not to use the pre-commit hook, you can manually run biome to automatically fix issues using the command: +### Installation +You probably installed Biome already without noticing it - it's included inside `package.json` and should've been downloaded when you ran `npm install` after cloning the repo (assuming you followed proper instructions, that is). If you haven't done that yet, go do it. - ```sh - npx @biomejs/biome --write - ``` +# Using Biome - - Running this command will lint all files in the repository. +For the most part, Biome attempts to stay "out of your hair", letting you write code while enforcing a consistent formatting standard and only notifying for errors it can't automatically fix.\ +On the other hand, if Biome complains about a piece of code, **there's probably a good reason why**. Disable comments should be used sparingly or when readabilty demands it - your first instinct should be to fix the code in question, not disable the rule. -3. **GitHub Action**: - - A GitHub Action has been added to automatically run Biome on every push and pull request, ensuring code quality in the CI/CD pipeline. +## Editor Integration +Biome has integration with many popular code editors. See [these](https://biomejs.dev/guides/editors/first-party-extensions/) [pages](https://biomejs.dev/guides/editors/third-party-extensions/) for information about enabling Biome in your editor of choice. -If you are getting linting errors from biome and want to see which files they are coming from, you can find that out by running biome in a way that is configured to only show the errors for that specific rule: ``npx @biomejs/biome lint --only=category/ruleName`` +## Automated Runs +Generally speaking, most users shouldn't need to run Biome directly; in addition to editor integration, [pre-commit hook](../lefthook.yml) will periodically run Biome before each commit. +You will **not** be able to push code with `error`-level linting problems - fix them beforehand. -## Summary of Biome Rules +We also have a [Github Action](../.github/workflows/quality.yml) to verify code quality each time a PR is updated, preventing bad code from inadvertently making its way upstream. -We use the [recommended ruleset](https://biomejs.dev/linter/rules/) for Biome, with some customizations to better suit our project's needs. +### Why am I getting errors for code I didn't write? + +To save time and minimize friction with existing code, both the pre-commit hook and workflow run will only check files **directly changed** by a given PR or commit. +As a result, changes to files not updated since Biome's introduction can cause any _prior_ linting errors in them to resurface and get flagged. +This should occur less and less often as time passes and more files are updated to the new standard. -For a complete list of rules and their configurations, refer to the `biome.jsonc` file in the project root. +## Running Biome via CLI +If you want Biome to check your files manually, you can run it from the command line like so: + +```sh +npx biome check --[flags] +``` + +A full list of flags and options can be found on [their website](https://biomejs.dev/reference/cli/), but here's a few useful ones to keep in mind: + +- `--write` will cause Biome to write all "safe" fixes and formatting changes directly to your files (rather than just complaining and doing nothing). +- `--changed` and `--staged` will only perform checks on all changed or staged files respectively. Biome sources this info from the relevant version control system (in this case Git). +- `diagnostic-level=XXX` will only show diagnostics with at least the given severity level (`info/warn/error`). Useful to only focus on errors causing a failed workflow run or similar. + +## Linting Rules + +We primarily use Biome's [recommended ruleset](https://biomejs.dev/linter/rules/) for linting JS/TS, with some customizations to better suit our project's needs[^1]. Some things to consider: -- We have disabled rules that prioritize style over performance, such as `useTemplate` -- Some rules are currently marked as warnings (`warn`) to allow for gradual refactoring without blocking development. Do not write new code that triggers these warnings. -- The linter is configured to ignore specific files and folders, such as large or complex files that are pending refactors, to improve performance and focus on actionable areas. +- We have disabled rules that prioritize style over performance, such as `useTemplate`. +- Some rules are currently disabled or marked as warnings (`warn`) to allow for gradual refactoring without blocking development. **Do not write new code that triggers these warnings.** +- The linter is configured to ignore specific files and folders (such as excessively large files or ones in need of refactoring) to improve performance and focus on actionable areas. -Formatting is also handled by Biome. You should not have to worry about manually formatting your code. +Any questions about linting rules should be brought up in the `#dev-corner` channel in the discord. + +[^1]: A complete list of rules can be found in the `biome.jsonc` file in the project root. + +## What about ESLint? + + +Our project migrated away from ESLint around March 2025 due to it simply not scaling well enough with the codebase's ever-growing size. The [existing eslint rules](../eslint.config.js) are considered _deprecated_, only kept due to Biome lacking the corresponding rules in its current ruleset. + +No additional ESLint rules should be added under any circumstances - even the few currently in circulation take longer to run than the entire Biome formatting/linting suite combined. \ No newline at end of file diff --git a/lefthook.yml b/lefthook.yml index ddf875f15de..ff0ac00f9e5 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -2,13 +2,12 @@ pre-commit: parallel: true commands: biome-lint: - glob: "*.{js,jsx,ts,tsx}" - run: npx @biomejs/biome check --write --reporter=summary {staged_files} --no-errors-on-unmatched + run: npx biome check --write --reporter=summary --staged --no-errors-on-unmatched stage_fixed: true skip: - merge - rebase - + post-merge: commands: update-submodules: diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index f02c98fad1f..b0558d303f1 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -122,7 +122,6 @@ import { MoveFlags } from "#enums/MoveFlags"; import { MoveEffectTrigger } from "#enums/MoveEffectTrigger"; import { MultiHitType } from "#enums/MultiHitType"; import { invalidAssistMoves, invalidCopycatMoves, invalidMetronomeMoves, invalidMirrorMoveMoves, invalidSleepTalkMoves } from "./invalid-moves"; -import { TrainerVariant } from "#app/field/trainer"; import { SelectBiomePhase } from "#app/phases/select-biome-phase"; type MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => boolean; @@ -1803,10 +1802,7 @@ export class HalfSacrificialAttr extends MoveEffectAttr { } /** - * Attribute to put in a {@link https://bulbapedia.bulbagarden.net/wiki/Substitute_(doll) | Substitute Doll} - * for the user. - * @extends MoveEffectAttr - * @see {@linkcode apply} + * Attribute to put in a {@link https://bulbapedia.bulbagarden.net/wiki/Substitute_(doll) | Substitute Doll} for the user. */ export class AddSubstituteAttr extends MoveEffectAttr { /** The ratio of the user's max HP that is required to apply this effect */ @@ -1823,11 +1819,11 @@ export class AddSubstituteAttr extends MoveEffectAttr { /** * Removes 1/4 of the user's maximum HP (rounded down) to create a substitute for the user - * @param user the {@linkcode Pokemon} that used the move. - * @param target n/a - * @param move the {@linkcode Move} with this attribute. - * @param args n/a - * @returns true if the attribute successfully applies, false otherwise + * @param user - The {@linkcode Pokemon} that used the move. + * @param target - n/a + * @param move - The {@linkcode Move} with this attribute. + * @param args - n/a + * @returns `true` if the attribute successfully applies, `false` otherwise */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (!super.apply(user, target, move, args)) { @@ -1848,12 +1844,12 @@ export class AddSubstituteAttr extends MoveEffectAttr { } getCondition(): MoveConditionFunc { - return (user, target, move) => !user.getTag(SubstituteTag) && user.hp > (this.roundUp ? Math.ceil(user.getMaxHp() * this.hpCost) : Math.floor(user.getMaxHp() * this.hpCost)) && user.getMaxHp() > 1; + return (user, _target, _move) => !user.getTag(SubstituteTag) && user.hp > (this.roundUp ? Math.ceil(user.getMaxHp() * this.hpCost) : Math.floor(user.getMaxHp() * this.hpCost)) && user.getMaxHp() > 1; } /** * Get the substitute-specific failure message if one should be displayed. - * @param user The pokemon using the move. + * @param user - The pokemon using the move. * @returns The substitute-specific failure message if the conditions apply, otherwise `undefined` */ getFailedText(user: Pokemon, _target: Pokemon, _move: Move): string | undefined { diff --git a/src/utils/common.ts b/src/utils/common.ts index 4acfabce080..6984840fb5c 100644 --- a/src/utils/common.ts +++ b/src/utils/common.ts @@ -515,8 +515,8 @@ export function capitalizeString(str: string, sep: string, lowerFirstChar = true return null; } -export function isNullOrUndefined(object: any): object is undefined | null { - return null === object || undefined === object; +export function isNullOrUndefined(object: any): object is null | undefined { + return object === null || object === undefined; } /** @@ -550,14 +550,14 @@ export function getLocalizedSpriteKey(baseKey: string) { } /** - * Check if a number is **inclusive** between two numbers - * @param num the number to check - * @param min the minimum value (included) - * @param max the maximum value (included) - * @returns `true` if number is **inclusive** between min and max + * Check if a number is **inclusively** between two numbers + * @param num - the number to check + * @param min - the minimum value (inclusive) + * @param max - the maximum value (inclusive) + * @returns Whether num is no less than min and no greater than max */ export function isBetween(num: number, min: number, max: number): boolean { - return num >= min && num <= max; + return min <= num && num <= max; } /** diff --git a/test/testUtils/gameManager.ts b/test/testUtils/gameManager.ts index 874d8f786b8..39e65fba0e5 100644 --- a/test/testUtils/gameManager.ts +++ b/test/testUtils/gameManager.ts @@ -310,8 +310,8 @@ export default class GameManager { /** * Emulate a player's target selection after a move is chosen, usually called automatically by {@linkcode MoveHelper.select}. * Will trigger during the next {@linkcode SelectTargetPhase} - * @param {BattlerIndex} targetIndex The index of the attack target, or `undefined` for multi-target attacks - * @param movePosition The index of the move in the pokemon's moveset array + * @param targetIndex - The {@linkcode BattlerIndex} of the attack target, or `undefined` for multi-target attacks + * @param movePosition - The 0-indexed position of the move in the pokemon's moveset array */ selectTarget(movePosition: number, targetIndex?: BattlerIndex) { this.onNextPrompt( @@ -347,7 +347,7 @@ export default class GameManager { } } - /** Emulate selecting a modifier (item) */ + /** Queue up button presses to skip taking an item on the next {@linkcode SelectModifierPhase} */ doSelectModifier() { this.onNextPrompt( "SelectModifierPhase", @@ -380,8 +380,9 @@ export default class GameManager { /** * Forces the next enemy selecting a move to use the given move in its moveset against the * given target (if applicable). - * @param moveId {@linkcode Moves} the move the enemy will use - * @param target {@linkcode BattlerIndex} the target on which the enemy will use the given move + * @param moveId - The {@linkcode Moves | move} the enemy will use + * @param target - The {@linkcode BattlerIndex} of the target against which the enemy will use the given move; + * will use normal target selection priorities if omitted. */ async forceEnemyMove(moveId: Moves, target?: BattlerIndex) { // Wait for the next EnemyCommandPhase to start @@ -421,7 +422,10 @@ export default class GameManager { await this.phaseInterceptor.to(CommandPhase); } - /** Emulate selecting a modifier (item) and transition to the next upcoming {@linkcode CommandPhase} */ + /** + * Queue up button presses to skip taking an item on the next {@linkcode SelectModifierPhase}, + * and then transition to the next {@linkcode CommandPhase}. + */ async toNextWave() { this.doSelectModifier(); @@ -439,8 +443,8 @@ export default class GameManager { } /** - * Checks if the player has won the battle. - * @returns True if the player has won, otherwise false. + * Check if the player has won the battle. + * @returns whether the player has won the battle (all opposing Pokemon have been fainted) */ isVictory() { return this.scene.currentBattle.enemyParty.every(pokemon => pokemon.isFainted()); @@ -449,7 +453,7 @@ export default class GameManager { /** * Checks if the current phase matches the target phase. * @param phaseTarget - The target phase. - * @returns True if the current phase matches the target phase, otherwise false. + * @returns Whether the current phase matches the target phase */ isCurrentPhase(phaseTarget) { const targetName = typeof phaseTarget === "string" ? phaseTarget : phaseTarget.name; @@ -458,8 +462,8 @@ export default class GameManager { /** * Checks if the current mode matches the target mode. - * @param mode - The target mode. - * @returns True if the current mode matches the target mode, otherwise false. + * @param mode - The target {@linkcode UiMode} to check. + * @returns Whether the current mode matches the target mode. */ isCurrentMode(mode: UiMode) { return this.scene.ui?.getMode() === mode; @@ -499,7 +503,7 @@ export default class GameManager { /** * Faints a player or enemy pokemon instantly by setting their HP to 0. - * @param pokemon The player/enemy pokemon being fainted + * @param pokemon - The player/enemy pokemon being fainted * @returns A promise that resolves once the fainted pokemon's FaintPhase finishes running. */ async killPokemon(pokemon: PlayerPokemon | EnemyPokemon) { @@ -512,8 +516,9 @@ export default class GameManager { } /** - * Command an in-battle switch to another Pokemon via the main battle menu. - * @param pokemonIndex the index of the pokemon in your party to switch to + * Command an in-battle switch to another {@linkcode Pokemon} via the main battle menu. + * @param pokemonIndex - The 0-indexed position of the party pokemon to switch to. + * Should never be called with 0 as that will select the currently active pokemon and freeze. */ doSwitchPokemon(pokemonIndex: number) { this.onNextPrompt("CommandPhase", UiMode.COMMAND, () => { @@ -526,7 +531,7 @@ export default class GameManager { /** * Revive pokemon, currently players only. - * @param pokemonIndex the index of the pokemon in your party to revive + * @param pokemonIndex - The 0-indexed position of the pokemon in your party to revive */ doRevivePokemon(pokemonIndex: number) { const party = this.scene.getPlayerParty(); @@ -536,13 +541,12 @@ export default class GameManager { } /** - * Select a pokemon from the party menu. Only really handles the basic cases - * of the party UI, where you just need to navigate to a party slot and press - * Action twice - navigating any menus that come up after you select a party member - * is not supported. - * @param slot the index of the pokemon in your party to switch to - * @param inPhase Which phase to expect the selection to occur in. Typically - * non-command switch actions happen in SwitchPhase. + * Select a pokemon from the party menu during the given phase. + * Only really handles the basic case of "navigate to party slot and press Action twice" - + * any menus that come up afterwards are ignored and must be handled separately by the caller. + * @param slot - The 0-indexed position of the pokemon in your party to switch to + * @param inPhase - Which phase to expect the selection to occur in. Defaults to `SwitchPhase` + * (which is where the majority of non-command switch operations occur). */ doSelectPartyPokemon(slot: number, inPhase = "SwitchPhase") { this.onNextPrompt(inPhase, UiMode.PARTY, () => { @@ -557,7 +561,7 @@ export default class GameManager { /** * Select the BALL option from the command menu, then press Action; in the BALL * menu, select a pokéball type and press Action again to throw it. - * @param ballIndex the index of the pokeball to throw + * @param ballIndex - The index of the pokeball to throw */ public doThrowPokeball(ballIndex: number) { this.onNextPrompt("CommandPhase", UiMode.COMMAND, () => { @@ -575,8 +579,9 @@ export default class GameManager { /** * Intercepts `TurnStartPhase` and mocks {@linkcode TurnStartPhase.getSpeedOrder}'s return value. * Used to manually modify Pokemon turn order. - * Note: This *DOES NOT* account for priority, only speed. - * @param {BattlerIndex[]} order The turn order to set + + * Note: This *DOES NOT* account for priority. + * @param order - The turn order to set * @example * ```ts * await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2]); From 8eeec9511bc5d2eed57ac96d6bbc81677b2cfe30 Mon Sep 17 00:00:00 2001 From: Xavion3 Date: Fri, 2 May 2025 11:18:38 +1000 Subject: [PATCH 087/262] [Bug] Correctly get cursor position in command UI (#5740) Correctly get cursor position in command UI Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> --- src/ui/command-ui-handler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/command-ui-handler.ts b/src/ui/command-ui-handler.ts index 57c5b5a82a2..ff27e9c41c0 100644 --- a/src/ui/command-ui-handler.ts +++ b/src/ui/command-ui-handler.ts @@ -86,7 +86,7 @@ export default class CommandUiHandler extends UiHandler { this.teraButton.setFrame(PokemonType[globalScene.getField()[this.fieldIndex].getTeraType()].toLowerCase()); } else { this.teraButton.setVisible(false); - if (this.cursor === Command.TERA) { + if (this.getCursor() === Command.TERA) { this.setCursor(Command.FIGHT); } } From 3af1bdbcffb284cb3c6c5ba982c248d168059204 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Thu, 1 May 2025 21:41:57 -0500 Subject: [PATCH 088/262] [Bug][Ability] Fix change move type abilities (#5665) * Make type changing moves change type after abilities but before ion deluge/electrify * Create unified test file for galvanize, pixilate, and refrigerate * Make type boost items like silk scarf affect the move after its type change * Add tests for type boost item interaction * Remove leftover log messages * Update spies in type-change ability tests * Add automated tests for normalize * Fix test name injection for tera blast * Add automated test for tera blast normalize interaction * Restore pokemon as a type-only import in moves.ts * Add aerilate to type changing tests * Rename galvanize test file * Fix utils import * Apply suggestions from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Remove unnecessary mockRestore * Remove unnecessary nullish coalescing Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/field/pokemon.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --------- Co-authored-by: Madmadness65 <59298170+Madmadness65@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/constants.ts | 3 + src/data/abilities/ability.ts | 49 +++-- src/data/moves/invalid-moves.ts | 15 ++ src/data/moves/move.ts | 29 ++- src/field/pokemon.ts | 8 +- src/modifier/modifier-type.ts | 5 +- src/modifier/modifier.ts | 3 +- test/abilities/galvanize.test.ts | 131 ------------ .../abilities/normal-move-type-change.test.ts | 190 ++++++++++++++++++ test/abilities/normalize.test.ts | 92 +++++++++ test/moves/tera_blast.test.ts | 32 ++- 11 files changed, 401 insertions(+), 156 deletions(-) delete mode 100644 test/abilities/galvanize.test.ts create mode 100644 test/abilities/normal-move-type-change.test.ts create mode 100644 test/abilities/normalize.test.ts diff --git a/src/constants.ts b/src/constants.ts index dc901e4a766..d3594c389b6 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -14,3 +14,6 @@ export const MAX_INT_ATTR_VALUE = 0x80000000; export const CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES: [number, number] = [10, 180] as const; /** The min and max waves for mystery encounters to spawn in challenge mode */ export const CHALLENGE_MODE_MYSTERY_ENCOUNTER_WAVES: [number, number] = [10, 180] as const; + +/** The raw percentage power boost for type boost items*/ +export const TYPE_BOOST_ITEM_BOOST_PERCENT = 20; diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 80b05b89d16..6e3f4c77f87 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -14,7 +14,6 @@ import { SelfStatusMove, VariablePowerAttr, applyMoveAttrs, - VariableMoveTypeAttr, RandomMovesetMoveAttr, RandomMoveAttr, NaturePowerAttr, @@ -73,6 +72,7 @@ import type { BattlerIndex } from "#app/battle"; import type Move from "#app/data/moves/move"; import type { ArenaTrapTag, SuppressAbilitiesTag } from "#app/data/arena-tag"; import { SelectBiomePhase } from "#app/phases/select-biome-phase"; +import { noAbilityTypeOverrideMoves } from "../moves/invalid-moves"; export class BlockRecoilDamageAttr extends AbAttr { constructor() { @@ -1240,12 +1240,39 @@ export class MoveTypeChangeAbAttr extends PreAttackAbAttr { super(false); } - override canApplyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon | null, move: Move, args: any[]): boolean { - return (this.condition && this.condition(pokemon, defender, move)) ?? false; + /** + * Determine if the move type change attribute can be applied + * + * Can be applied if: + * - The ability's condition is met, e.g. pixilate only boosts normal moves, + * - The move is not forbidden from having its type changed by an ability, e.g. {@linkcode Moves.MULTI_ATTACK} + * - The user is not terastallized and using tera blast + * - The user is not a terastallized terapagos with tera stellar using tera starstorm + * @param pokemon - The pokemon that has the move type changing ability and is using the attacking move + * @param _passive - Unused + * @param _simulated - Unused + * @param _defender - The pokemon being attacked (unused) + * @param move - The move being used + * @param _args - args[0] holds the type that the move is changed to, args[1] holds the multiplier + * @returns whether the move type change attribute can be applied + */ + override canApplyPreAttack(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _defender: Pokemon | null, move: Move, _args: [NumberHolder?, NumberHolder?, ...any]): boolean { + return (!this.condition || this.condition(pokemon, _defender, move)) && + !noAbilityTypeOverrideMoves.has(move.id) && + (!pokemon.isTerastallized || + (move.id !== Moves.TERA_BLAST && + (move.id !== Moves.TERA_STARSTORM || pokemon.getTeraType() !== PokemonType.STELLAR || !pokemon.hasSpecies(Species.TERAPAGOS)))); } - // TODO: Decouple this into two attributes (type change / power boost) - override applyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, args: any[]): void { + /** + * @param pokemon - The pokemon that has the move type changing ability and is using the attacking move + * @param passive - Unused + * @param simulated - Unused + * @param defender - The pokemon being attacked (unused) + * @param move - The move being used + * @param args - args[0] holds the type that the move is changed to, args[1] holds the multiplier + */ + override applyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, args: [NumberHolder?, NumberHolder?, ...any]): void { if (args[0] && args[0] instanceof NumberHolder) { args[0].value = this.newType; } @@ -6629,9 +6656,7 @@ export function initAbilities() { .conditionalAttr(pokemon => pokemon.status ? pokemon.status.effect === StatusEffect.PARALYSIS : false, StatMultiplierAbAttr, Stat.SPD, 2) .conditionalAttr(pokemon => !!pokemon.status || pokemon.hasAbility(Abilities.COMATOSE), StatMultiplierAbAttr, Stat.SPD, 1.5), new Ability(Abilities.NORMALIZE, 4) - .attr(MoveTypeChangeAbAttr, PokemonType.NORMAL, 1.2, (user, target, move) => { - return ![ Moves.MULTI_ATTACK, Moves.REVELATION_DANCE, Moves.TERRAIN_PULSE, Moves.HIDDEN_POWER, Moves.WEATHER_BALL, Moves.NATURAL_GIFT, Moves.JUDGMENT, Moves.TECHNO_BLAST ].includes(move.id); - }), + .attr(MoveTypeChangeAbAttr, PokemonType.NORMAL, 1.2), new Ability(Abilities.SNIPER, 4) .attr(MultCritAbAttr, 1.5), new Ability(Abilities.MAGIC_GUARD, 4) @@ -6896,7 +6921,7 @@ export function initAbilities() { new Ability(Abilities.STRONG_JAW, 6) .attr(MovePowerBoostAbAttr, (user, target, move) => move.hasFlag(MoveFlags.BITING_MOVE), 1.5), new Ability(Abilities.REFRIGERATE, 6) - .attr(MoveTypeChangeAbAttr, PokemonType.ICE, 1.2, (user, target, move) => move.type === PokemonType.NORMAL && !move.hasAttr(VariableMoveTypeAttr)), + .attr(MoveTypeChangeAbAttr, PokemonType.ICE, 1.2, (user, target, move) => move.type === PokemonType.NORMAL), new Ability(Abilities.SWEET_VEIL, 6) .attr(UserFieldStatusEffectImmunityAbAttr, StatusEffect.SLEEP) .attr(PostSummonUserFieldRemoveStatusEffectAbAttr, StatusEffect.SLEEP) @@ -6920,11 +6945,11 @@ export function initAbilities() { new Ability(Abilities.TOUGH_CLAWS, 6) .attr(MovePowerBoostAbAttr, (user, target, move) => move.hasFlag(MoveFlags.MAKES_CONTACT), 1.3), new Ability(Abilities.PIXILATE, 6) - .attr(MoveTypeChangeAbAttr, PokemonType.FAIRY, 1.2, (user, target, move) => move.type === PokemonType.NORMAL && !move.hasAttr(VariableMoveTypeAttr)), + .attr(MoveTypeChangeAbAttr, PokemonType.FAIRY, 1.2, (user, target, move) => move.type === PokemonType.NORMAL), new Ability(Abilities.GOOEY, 6) .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => move.hasFlag(MoveFlags.MAKES_CONTACT), Stat.SPD, -1, false), new Ability(Abilities.AERILATE, 6) - .attr(MoveTypeChangeAbAttr, PokemonType.FLYING, 1.2, (user, target, move) => move.type === PokemonType.NORMAL && !move.hasAttr(VariableMoveTypeAttr)), + .attr(MoveTypeChangeAbAttr, PokemonType.FLYING, 1.2, (user, target, move) => move.type === PokemonType.NORMAL), new Ability(Abilities.PARENTAL_BOND, 6) .attr(AddSecondStrikeAbAttr, 0.25), new Ability(Abilities.DARK_AURA, 6) @@ -7001,7 +7026,7 @@ export function initAbilities() { new Ability(Abilities.TRIAGE, 7) .attr(ChangeMovePriorityAbAttr, (pokemon, move) => move.hasFlag(MoveFlags.TRIAGE_MOVE), 3), new Ability(Abilities.GALVANIZE, 7) - .attr(MoveTypeChangeAbAttr, PokemonType.ELECTRIC, 1.2, (user, target, move) => move.type === PokemonType.NORMAL && !move.hasAttr(VariableMoveTypeAttr)), + .attr(MoveTypeChangeAbAttr, PokemonType.ELECTRIC, 1.2, (_user, _target, move) => move.type === PokemonType.NORMAL), new Ability(Abilities.SURGE_SURFER, 7) .conditionalAttr(getTerrainCondition(TerrainType.ELECTRIC), StatMultiplierAbAttr, Stat.SPD, 2), new Ability(Abilities.SCHOOLING, 7) diff --git a/src/data/moves/invalid-moves.ts b/src/data/moves/invalid-moves.ts index 5cd45de7939..025c0383f43 100644 --- a/src/data/moves/invalid-moves.ts +++ b/src/data/moves/invalid-moves.ts @@ -240,3 +240,18 @@ export const invalidMirrorMoveMoves: ReadonlySet = new Set([ Moves.WATER_SPORT, Moves.WIDE_GUARD, ]); + +/** Set of moves that can never have their type overridden by an ability like Pixilate or Normalize + * + * Excludes tera blast and tera starstorm, as these are only conditionally forbidden + */ +export const noAbilityTypeOverrideMoves: ReadonlySet = new Set([ + Moves.WEATHER_BALL, + Moves.JUDGMENT, + Moves.REVELATION_DANCE, + Moves.MULTI_ATTACK, + Moves.TERRAIN_PULSE, + Moves.NATURAL_GIFT, + Moves.TECHNO_BLAST, + Moves.HIDDEN_POWER, +]); diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index b0558d303f1..37ed8ce342c 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -810,8 +810,9 @@ export default class Move implements Localizable { const power = new NumberHolder(this.power); const typeChangeMovePowerMultiplier = new NumberHolder(1); + const typeChangeHolder = new NumberHolder(this.type); - applyPreAttackAbAttrs(MoveTypeChangeAbAttr, source, target, this, true, null, typeChangeMovePowerMultiplier); + applyPreAttackAbAttrs(MoveTypeChangeAbAttr, source, target, this, true, typeChangeHolder, typeChangeMovePowerMultiplier); const sourceTeraType = source.getTeraType(); if (source.isTerastallized && sourceTeraType === this.type && power.value < 60 && this.priority <= 0 && !this.hasAttr(MultiHitAttr) && !globalScene.findModifier(m => m instanceof PokemonMultiHitModifier && m.pokemonId === source.id)) { @@ -841,7 +842,7 @@ export default class Move implements Localizable { power.value *= typeChangeMovePowerMultiplier.value; - const typeBoost = source.findTag(t => t instanceof TypeBoostTag && t.boostedType === this.type) as TypeBoostTag; + const typeBoost = source.findTag(t => t instanceof TypeBoostTag && t.boostedType === typeChangeHolder.value) as TypeBoostTag; if (typeBoost) { power.value *= typeBoost.boostValue; } @@ -849,8 +850,8 @@ export default class Move implements Localizable { applyMoveAttrs(VariablePowerAttr, source, target, this, power); if (!this.hasAttr(TypelessAttr)) { - globalScene.arena.applyTags(WeakenMoveTypeTag, simulated, this.type, power); - globalScene.applyModifiers(AttackTypeBoosterModifier, source.isPlayer(), source, this.type, power); + globalScene.arena.applyTags(WeakenMoveTypeTag, simulated, typeChangeHolder.value, power); + globalScene.applyModifiers(AttackTypeBoosterModifier, source.isPlayer(), source, typeChangeHolder.value, power); } if (source.getTag(HelpingHandTag)) { @@ -4826,7 +4827,12 @@ export class FormChangeItemTypeAttr extends VariableMoveTypeAttr { return true; } - return false; + // Force move to have its original typing if it changed + if (moveType.value === move.type) { + return false; + } + moveType.value = move.type + return true; } } @@ -4977,7 +4983,11 @@ export class WeatherBallTypeAttr extends VariableMoveTypeAttr { moveType.value = PokemonType.ICE; break; default: - return false; + if (moveType.value === move.type) { + return false; + } + moveType.value = move.type; + break; } return true; } @@ -5025,7 +5035,12 @@ export class TerrainPulseTypeAttr extends VariableMoveTypeAttr { moveType.value = PokemonType.PSYCHIC; break; default: - return false; + if (moveType.value === move.type) { + return false; + } + // force move to have its original typing if it was changed + moveType.value = move.type; + break; } return true; } diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 492856b4b52..48c2d93692c 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -2591,9 +2591,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { null, move, simulated, - moveTypeHolder, + moveTypeHolder ); + // If the user is terastallized and the move is tera blast, or tera starstorm that is stellar type, + // then bypass the check for ion deluge and electrify + if (this.isTerastallized && (move.id === Moves.TERA_BLAST || move.id === Moves.TERA_STARSTORM && moveTypeHolder.value === PokemonType.STELLAR)) { + return moveTypeHolder.value as PokemonType; + } + globalScene.arena.applyTags( ArenaTagType.ION_DELUGE, simulated, diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 219a6b6344b..110c19dfec0 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -128,6 +128,7 @@ import { getStatKey, Stat, TEMP_BATTLE_STATS } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; import i18next from "i18next"; import { timedEventManager } from "#app/global-event-manager"; +import { TYPE_BOOST_ITEM_BOOST_PERCENT } from "#app/constants"; const outputModifierData = false; const useMaxWeightForOutput = false; @@ -1329,7 +1330,7 @@ class AttackTypeBoosterModifierTypeGenerator extends ModifierTypeGenerator { constructor() { super((party: Pokemon[], pregenArgs?: any[]) => { if (pregenArgs && pregenArgs.length === 1 && pregenArgs[0] in PokemonType) { - return new AttackTypeBoosterModifierType(pregenArgs[0] as PokemonType, 20); + return new AttackTypeBoosterModifierType(pregenArgs[0] as PokemonType, TYPE_BOOST_ITEM_BOOST_PERCENT); } const attackMoveTypes = party.flatMap(p => @@ -1377,7 +1378,7 @@ class AttackTypeBoosterModifierTypeGenerator extends ModifierTypeGenerator { weight += typeWeight; } - return new AttackTypeBoosterModifierType(type!, 20); + return new AttackTypeBoosterModifierType(type!, TYPE_BOOST_ITEM_BOOST_PERCENT); }); } } diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 3eaf4e3c510..7dfbcf6ca0b 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -1479,7 +1479,8 @@ export class AttackTypeBoosterModifier extends PokemonHeldItemModifier { return ( super.shouldApply(pokemon, moveType, movePower) && typeof moveType === "number" && - movePower instanceof NumberHolder + movePower instanceof NumberHolder && + this.moveType === moveType ); } diff --git a/test/abilities/galvanize.test.ts b/test/abilities/galvanize.test.ts deleted file mode 100644 index 5db8b642197..00000000000 --- a/test/abilities/galvanize.test.ts +++ /dev/null @@ -1,131 +0,0 @@ -import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; -import { PokemonType } from "#enums/pokemon-type"; -import { Abilities } from "#app/enums/abilities"; -import { Moves } from "#app/enums/moves"; -import { Species } from "#app/enums/species"; -import GameManager from "#test/testUtils/gameManager"; -import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; - -describe("Abilities - Galvanize", () => { - let phaserGame: Phaser.Game; - let game: GameManager; - - beforeAll(() => { - phaserGame = new Phaser.Game({ - type: Phaser.HEADLESS, - }); - }); - - afterEach(() => { - game.phaseInterceptor.restoreOg(); - }); - - beforeEach(() => { - game = new GameManager(phaserGame); - - game.override - .battleStyle("single") - .startingLevel(100) - .ability(Abilities.GALVANIZE) - .moveset([Moves.TACKLE, Moves.REVELATION_DANCE, Moves.FURY_SWIPES]) - .enemySpecies(Species.DUSCLOPS) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) - .enemyLevel(100); - }); - - it("should change Normal-type attacks to Electric type and boost their power", async () => { - await game.classicMode.startBattle(); - - const playerPokemon = game.scene.getPlayerPokemon()!; - vi.spyOn(playerPokemon, "getMoveType"); - - const enemyPokemon = game.scene.getEnemyPokemon()!; - const spy = vi.spyOn(enemyPokemon, "getMoveEffectiveness"); - - const move = allMoves[Moves.TACKLE]; - vi.spyOn(move, "calculateBattlePower"); - - game.move.select(Moves.TACKLE); - - await game.phaseInterceptor.to("BerryPhase", false); - - expect(playerPokemon.getMoveType).toHaveLastReturnedWith(PokemonType.ELECTRIC); - expect(spy).toHaveReturnedWith(1); - expect(move.calculateBattlePower).toHaveReturnedWith(48); - expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); - - spy.mockRestore(); - }); - - it("should cause Normal-type attacks to activate Volt Absorb", async () => { - game.override.enemyAbility(Abilities.VOLT_ABSORB); - - await game.classicMode.startBattle(); - - const playerPokemon = game.scene.getPlayerPokemon()!; - vi.spyOn(playerPokemon, "getMoveType"); - - const enemyPokemon = game.scene.getEnemyPokemon()!; - const spy = vi.spyOn(enemyPokemon, "getMoveEffectiveness"); - - enemyPokemon.hp = Math.floor(enemyPokemon.getMaxHp() * 0.8); - - game.move.select(Moves.TACKLE); - - await game.phaseInterceptor.to("BerryPhase", false); - - expect(playerPokemon.getMoveType).toHaveLastReturnedWith(PokemonType.ELECTRIC); - expect(spy).toHaveReturnedWith(0); - expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); - }); - - it("should not change the type of variable-type moves", async () => { - game.override.enemySpecies(Species.MIGHTYENA); - - await game.classicMode.startBattle([Species.ESPEON]); - - const playerPokemon = game.scene.getPlayerPokemon()!; - vi.spyOn(playerPokemon, "getMoveType"); - - const enemyPokemon = game.scene.getEnemyPokemon()!; - const spy = vi.spyOn(enemyPokemon, "getMoveEffectiveness"); - - game.move.select(Moves.REVELATION_DANCE); - await game.phaseInterceptor.to("BerryPhase", false); - - expect(playerPokemon.getMoveType).not.toHaveLastReturnedWith(PokemonType.ELECTRIC); - expect(spy).toHaveReturnedWith(0); - expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); - }); - - it("should affect all hits of a Normal-type multi-hit move", async () => { - await game.classicMode.startBattle(); - - const playerPokemon = game.scene.getPlayerPokemon()!; - vi.spyOn(playerPokemon, "getMoveType"); - - const enemyPokemon = game.scene.getEnemyPokemon()!; - const spy = vi.spyOn(enemyPokemon, "getMoveEffectiveness"); - - game.move.select(Moves.FURY_SWIPES); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); - await game.move.forceHit(); - - await game.phaseInterceptor.to("MoveEffectPhase"); - expect(playerPokemon.turnData.hitCount).toBeGreaterThan(1); - expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); - - while (playerPokemon.turnData.hitsLeft > 0) { - const enemyStartingHp = enemyPokemon.hp; - await game.phaseInterceptor.to("MoveEffectPhase"); - - expect(playerPokemon.getMoveType).toHaveLastReturnedWith(PokemonType.ELECTRIC); - expect(enemyPokemon.hp).toBeLessThan(enemyStartingHp); - } - - expect(spy).not.toHaveReturnedWith(0); - }); -}); diff --git a/test/abilities/normal-move-type-change.test.ts b/test/abilities/normal-move-type-change.test.ts new file mode 100644 index 00000000000..50c8e04af1f --- /dev/null +++ b/test/abilities/normal-move-type-change.test.ts @@ -0,0 +1,190 @@ +import { BattlerIndex } from "#app/battle"; +import { allMoves } from "#app/data/moves/move"; +import { PokemonType } from "#enums/pokemon-type"; +import { Abilities } from "#app/enums/abilities"; +import { Moves } from "#app/enums/moves"; +import { Species } from "#app/enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { TYPE_BOOST_ITEM_BOOST_PERCENT } from "#app/constants"; +import { allAbilities } from "#app/data/data-lists"; +import { MoveTypeChangeAbAttr } from "#app/data/abilities/ability"; +import { toDmgValue } from "#app/utils/common"; + +/** + * Tests for abilities that change the type of normal moves to + * a different type and boost their power + * + * Includes + * - Aerialate + * - Galvanize + * - Pixilate + * - Refrigerate + */ + +describe.each([ + { ab: Abilities.GALVANIZE, ab_name: "Galvanize", ty: PokemonType.ELECTRIC, tyName: "electric" }, + { ab: Abilities.PIXILATE, ab_name: "Pixilate", ty: PokemonType.FAIRY, tyName: "fairy" }, + { ab: Abilities.REFRIGERATE, ab_name: "Refrigerate", ty: PokemonType.ICE, tyName: "ice" }, + { ab: Abilities.AERILATE, ab_name: "Aerilate", ty: PokemonType.FLYING, tyName: "flying" }, +])("Abilities - $ab_name", ({ ab, ty, tyName }) => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + + game.override + .battleStyle("single") + .startingLevel(100) + .starterSpecies(Species.MAGIKARP) + .ability(ab) + .moveset([Moves.TACKLE, Moves.REVELATION_DANCE, Moves.FURY_SWIPES]) + .enemySpecies(Species.DUSCLOPS) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH) + .enemyLevel(100); + }); + + it(`should change Normal-type attacks to ${tyName} type and boost their power`, async () => { + await game.classicMode.startBattle(); + + const playerPokemon = game.scene.getPlayerPokemon()!; + const typeSpy = vi.spyOn(playerPokemon, "getMoveType"); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemySpy = vi.spyOn(enemyPokemon, "getMoveEffectiveness"); + const powerSpy = vi.spyOn(allMoves[Moves.TACKLE], "calculateBattlePower"); + + game.move.select(Moves.TACKLE); + + await game.phaseInterceptor.to("BerryPhase", false); + + expect(typeSpy).toHaveLastReturnedWith(ty); + expect(enemySpy).toHaveReturnedWith(1); + expect(powerSpy).toHaveReturnedWith(48); + expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); + }); + + // Galvanize specifically would like to check for volt absorb's activation + if (ab === Abilities.GALVANIZE) { + it("should cause Normal-type attacks to activate Volt Absorb", async () => { + game.override.enemyAbility(Abilities.VOLT_ABSORB); + + await game.classicMode.startBattle(); + + const playerPokemon = game.scene.getPlayerPokemon()!; + const tySpy = vi.spyOn(playerPokemon, "getMoveType"); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyEffectivenessSpy = vi.spyOn(enemyPokemon, "getMoveEffectiveness"); + + enemyPokemon.hp = Math.floor(enemyPokemon.getMaxHp() * 0.8); + + game.move.select(Moves.TACKLE); + + await game.phaseInterceptor.to("BerryPhase", false); + + expect(tySpy).toHaveLastReturnedWith(PokemonType.ELECTRIC); + expect(enemyEffectivenessSpy).toHaveReturnedWith(0); + expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); + }); + } + + it.each([ + { moveName: "Revelation Dance", move: Moves.REVELATION_DANCE, expected_ty: PokemonType.WATER }, + { moveName: "Judgement", move: Moves.JUDGMENT, expected_ty: PokemonType.NORMAL }, + { moveName: "Terrain Pulse", move: Moves.TERRAIN_PULSE, expected_ty: PokemonType.NORMAL }, + { moveName: "Weather Ball", move: Moves.WEATHER_BALL, expected_ty: PokemonType.NORMAL }, + { moveName: "Multi Attack", move: Moves.MULTI_ATTACK, expected_ty: PokemonType.NORMAL }, + { moveName: "Techno Blast", move: Moves.TECHNO_BLAST, expected_ty: PokemonType.NORMAL }, + ])("should not change the type of $moveName", async ({ move, expected_ty: expectedTy }) => { + game.override + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .moveset([move]) + .starterSpecies(Species.MAGIKARP); + + await game.classicMode.startBattle([Species.MAGIKARP]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + const tySpy = vi.spyOn(playerPokemon, "getMoveType"); + + game.move.select(move); + await game.phaseInterceptor.to("BerryPhase", false); + + expect(tySpy).toHaveLastReturnedWith(expectedTy); + }); + + it("should affect all hits of a Normal-type multi-hit move", async () => { + await game.classicMode.startBattle(); + + const playerPokemon = game.scene.getPlayerPokemon()!; + const tySpy = vi.spyOn(playerPokemon, "getMoveType"); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.FURY_SWIPES); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.move.forceHit(); + + await game.phaseInterceptor.to("MoveEffectPhase"); + expect(playerPokemon.turnData.hitCount).toBeGreaterThan(1); + expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); + + while (playerPokemon.turnData.hitsLeft > 0) { + const enemyStartingHp = enemyPokemon.hp; + await game.phaseInterceptor.to("MoveEffectPhase"); + + expect(tySpy).toHaveLastReturnedWith(ty); + expect(enemyPokemon.hp).toBeLessThan(enemyStartingHp); + } + }); + + it("should not be affected by silk scarf after changing the move's type", async () => { + game.override.startingHeldItems([{ name: "ATTACK_TYPE_BOOSTER", count: 1, type: PokemonType.NORMAL }]); + await game.classicMode.startBattle(); + + const testMoveInstance = allMoves[Moves.TACKLE]; + + // get the power boost from the ability so we can compare it to the item + // @ts-expect-error power multiplier is private + const boost = allAbilities[ab]?.getAttrs(MoveTypeChangeAbAttr)[0]?.powerMultiplier; + expect(boost, "power boost should be defined").toBeDefined(); + + const powerSpy = vi.spyOn(testMoveInstance, "calculateBattlePower"); + const typeSpy = vi.spyOn(game.scene.getPlayerPokemon()!, "getMoveType"); + game.move.select(Moves.TACKLE); + await game.phaseInterceptor.to("BerryPhase", false); + expect(typeSpy, "type was not changed").toHaveLastReturnedWith(ty); + expect(powerSpy).toHaveLastReturnedWith(toDmgValue(testMoveInstance.power * boost)); + }); + + it("should be affected by the type boosting item after changing the move's type", async () => { + game.override.startingHeldItems([{ name: "ATTACK_TYPE_BOOSTER", count: 1, type: ty }]); + await game.classicMode.startBattle(); + + // get the power boost from the ability so we can compare it to the item + // @ts-expect-error power multiplier is private + const boost = allAbilities[ab]?.getAttrs(MoveTypeChangeAbAttr)[0]?.powerMultiplier; + expect(boost, "power boost should be defined").toBeDefined(); + + const tackle = allMoves[Moves.TACKLE]; + + const spy = vi.spyOn(tackle, "calculateBattlePower"); + game.move.select(Moves.TACKLE); + await game.phaseInterceptor.to("BerryPhase", false); + expect(spy).toHaveLastReturnedWith(toDmgValue(tackle.power * boost * (1 + TYPE_BOOST_ITEM_BOOST_PERCENT / 100))); + }); +}); diff --git a/test/abilities/normalize.test.ts b/test/abilities/normalize.test.ts new file mode 100644 index 00000000000..3256f0188d1 --- /dev/null +++ b/test/abilities/normalize.test.ts @@ -0,0 +1,92 @@ +import { TYPE_BOOST_ITEM_BOOST_PERCENT } from "#app/constants"; +import { allMoves } from "#app/data/moves/move"; +import { toDmgValue } from "#app/utils/common"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { PokemonType } from "#enums/pokemon-type"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Abilities - Normalize", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([Moves.TACKLE]) + .ability(Abilities.NORMALIZE) + .battleStyle("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should boost the power of normal type moves by 20%", async () => { + await game.classicMode.startBattle([Species.MAGIKARP]); + const powerSpy = vi.spyOn(allMoves[Moves.TACKLE], "calculateBattlePower"); + + game.move.select(Moves.TACKLE); + await game.phaseInterceptor.to("BerryPhase"); + expect(powerSpy).toHaveLastReturnedWith(toDmgValue(allMoves[Moves.TACKLE].power * 1.2)); + }); + + it("should not apply the old type boost item after changing a move's type", async () => { + game.override.startingHeldItems([{ name: "ATTACK_TYPE_BOOSTER", count: 1, type: PokemonType.GRASS }]); + game.override.moveset([Moves.LEAFAGE]); + + const powerSpy = vi.spyOn(allMoves[Moves.LEAFAGE], "calculateBattlePower"); + await game.classicMode.startBattle([Species.MAGIKARP]); + game.move.select(Moves.LEAFAGE); + await game.phaseInterceptor.to("BerryPhase"); + + // It should return with 1.2 (that is, only the power boost from the ability) + expect(powerSpy).toHaveLastReturnedWith(toDmgValue(allMoves[Moves.LEAFAGE].power * 1.2)); + }); + + it("should apply silk scarf's power boost after changing a move's type", async () => { + game.override.startingHeldItems([{ name: "ATTACK_TYPE_BOOSTER", count: 1, type: PokemonType.NORMAL }]); + game.override.moveset([Moves.LEAFAGE]); + + const powerSpy = vi.spyOn(allMoves[Moves.LEAFAGE], "calculateBattlePower"); + await game.classicMode.startBattle([Species.MAGIKARP]); + game.move.select(Moves.LEAFAGE); + await game.phaseInterceptor.to("BerryPhase"); + + // 1.2 from normalize boost, second 1.2 from + expect(powerSpy).toHaveLastReturnedWith( + toDmgValue(allMoves[Moves.LEAFAGE].power * 1.2 * (1 + TYPE_BOOST_ITEM_BOOST_PERCENT / 100)), + ); + }); + + it.each([ + { moveName: "Revelation Dance", move: Moves.REVELATION_DANCE }, + { moveName: "Judgement", move: Moves.JUDGMENT, expected_ty: PokemonType.NORMAL }, + { moveName: "Terrain Pulse", move: Moves.TERRAIN_PULSE }, + { moveName: "Weather Ball", move: Moves.WEATHER_BALL }, + { moveName: "Multi Attack", move: Moves.MULTI_ATTACK }, + { moveName: "Techno Blast", move: Moves.TECHNO_BLAST }, + { moveName: "Hidden Power", move: Moves.HIDDEN_POWER }, + ])("should not boost the power of $moveName", async ({ move }) => { + game.override.moveset([move]); + await game.classicMode.startBattle([Species.MAGIKARP]); + const powerSpy = vi.spyOn(allMoves[move], "calculateBattlePower"); + + game.move.select(move); + await game.phaseInterceptor.to("BerryPhase"); + expect(powerSpy).toHaveLastReturnedWith(allMoves[move].power); + }); +}); diff --git a/test/moves/tera_blast.test.ts b/test/moves/tera_blast.test.ts index 8817f12b8cf..efdb75e8156 100644 --- a/test/moves/tera_blast.test.ts +++ b/test/moves/tera_blast.test.ts @@ -75,7 +75,7 @@ describe("Moves - Tera Blast", () => { await game.phaseInterceptor.to("MoveEffectPhase"); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(100); - }, 20000); + }); it("is super effective against terastallized targets if user is Stellar tera type", async () => { await game.classicMode.startBattle(); @@ -189,5 +189,33 @@ describe("Moves - Tera Blast", () => { expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(-1); expect(playerPokemon.getStatStage(Stat.ATK)).toBe(-1); - }, 20000); + }); + + it.each([ + { ab: "galvanize", ty: "electric", ab_id: Abilities.GALVANIZE, ty_id: PokemonType.ELECTRIC }, + { ab: "refrigerate", ty: "ice", ab_id: Abilities.REFRIGERATE, ty_id: PokemonType.ICE }, + { ab: "pixilate", ty: "fairy", ab_id: Abilities.PIXILATE, ty_id: PokemonType.FAIRY }, + { ab: "aerilate", ty: "flying", ab_id: Abilities.AERILATE, ty_id: PokemonType.FLYING }, + ])("should be $ty type if the user has $ab", async ({ ab_id, ty_id }) => { + game.override.ability(ab_id).moveset([Moves.TERA_BLAST]).enemyAbility(Abilities.BALL_FETCH); + await game.classicMode.startBattle([Species.MAGIKARP]); + const playerPokemon = game.scene.getPlayerPokemon()!; + expect(playerPokemon.getMoveType(allMoves[Moves.TERA_BLAST])).toBe(ty_id); + }); + + it("should not be affected by normalize when the user is terastallized with tera normal", async () => { + game.override.moveset([Moves.TERA_BLAST]).ability(Abilities.NORMALIZE); + await game.classicMode.startBattle([Species.MAGIKARP]); + const playerPokemon = game.scene.getPlayerPokemon()!; + // override the tera state for the pokemon + playerPokemon.isTerastallized = true; + playerPokemon.teraType = PokemonType.NORMAL; + + const move = allMoves[Moves.TERA_BLAST]; + const powerSpy = vi.spyOn(move, "calculateBattlePower"); + + game.move.select(Moves.TERA_BLAST); + await game.phaseInterceptor.to("BerryPhase"); + expect(powerSpy).toHaveLastReturnedWith(move.power); + }); }); From 7a9fc3fc8d18e1b46f11df81919d0eda69a7b530 Mon Sep 17 00:00:00 2001 From: Dean <69436131+emdeann@users.noreply.github.com> Date: Thu, 1 May 2025 19:50:56 -0700 Subject: [PATCH 089/262] [Bug] Clear status immediately in menus (#5739) Add asPhase parameter --- src/data/moves/move.ts | 2 +- src/field/pokemon.ts | 35 ++++++++++++++++++++++++++-- src/modifier/modifier.ts | 6 ++--- src/phases/party-heal-phase.ts | 2 +- src/phases/reset-status-phase.ts | 20 +--------------- src/phases/revival-blessing-phase.ts | 2 +- 6 files changed, 40 insertions(+), 27 deletions(-) diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 37ed8ce342c..29542b54f6d 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -6145,7 +6145,7 @@ export class RevivalBlessingAttr extends MoveEffectAttr { const faintedPokemon = globalScene.getEnemyParty().filter((p) => p.isFainted() && !p.isBoss()); const pokemon = faintedPokemon[user.randSeedInt(faintedPokemon.length)]; const slotIndex = globalScene.getEnemyParty().findIndex((p) => pokemon.id === p.id); - pokemon.resetStatus(); + pokemon.resetStatus(true, false, false, true); pokemon.heal(Math.min(toDmgValue(0.5 * pokemon.getMaxHp()), pokemon.getMaxHp())); globalScene.queueMessage(i18next.t("moveTriggers:revivalBlessing", { pokemonName: getPokemonNameWithAffix(pokemon) }), 0, true); const allyPokemon = user.getAlly(); diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 48c2d93692c..0c412e73b52 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -5608,13 +5608,44 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param revive Whether revive should be cured; defaults to true. * @param confusion Whether resetStatus should include confusion or not; defaults to false. * @param reloadAssets Whether to reload the assets or not; defaults to false. + * @param asPhase Whether to reset the status in a phase or immediately */ - resetStatus(revive = true, confusion = false, reloadAssets = false): void { + resetStatus(revive = true, confusion = false, reloadAssets = false, asPhase = true): void { const lastStatus = this.status?.effect; if (!revive && lastStatus === StatusEffect.FAINT) { return; } - globalScene.unshiftPhase(new ResetStatusPhase(this, confusion, reloadAssets)); + + if (asPhase) { + globalScene.unshiftPhase(new ResetStatusPhase(this, confusion, reloadAssets)); + } else { + this.clearStatus(confusion, reloadAssets); + } + } + + /** + * Performs the action of clearing a Pokemon's status + * + * This is a helper to {@linkcode resetStatus}, which should be called directly instead of this method + */ + public clearStatus(confusion: boolean, reloadAssets: boolean) { + const lastStatus = this.status?.effect; + this.status = null; + if (lastStatus === StatusEffect.SLEEP) { + this.setFrameRate(10); + if (this.getTag(BattlerTagType.NIGHTMARE)) { + this.lapseTag(BattlerTagType.NIGHTMARE); + } + } + if (confusion) { + if (this.getTag(BattlerTagType.CONFUSED)) { + this.lapseTag(BattlerTagType.CONFUSED); + } + } + if (reloadAssets) { + this.loadAssets(false).then(() => this.playAnim()); + } + this.updateInfo(true); } /** diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 7dfbcf6ca0b..549ce462c11 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -1953,7 +1953,7 @@ export class PokemonInstantReviveModifier extends PokemonHeldItemModifier { ); // Remove the Pokemon's FAINT status - pokemon.resetStatus(true, false, true); + pokemon.resetStatus(true, false, true, false); // Reapply Commander on the Pokemon's side of the field, if applicable const field = pokemon.isPlayer() ? globalScene.getPlayerField() : globalScene.getEnemyField(); @@ -2161,7 +2161,7 @@ export class PokemonHpRestoreModifier extends ConsumablePokemonModifier { restorePoints = Math.floor(restorePoints * multiplier); } if (this.fainted || this.healStatus) { - pokemon.resetStatus(true, true); + pokemon.resetStatus(true, true, false, false); } pokemon.hp = Math.min( pokemon.hp + @@ -2181,7 +2181,7 @@ export class PokemonStatusHealModifier extends ConsumablePokemonModifier { * @returns always `true` */ override apply(playerPokemon: PlayerPokemon): boolean { - playerPokemon.resetStatus(true, true); + playerPokemon.resetStatus(true, true, false, false); return true; } } diff --git a/src/phases/party-heal-phase.ts b/src/phases/party-heal-phase.ts index a208ccfff92..4a9f8a0c888 100644 --- a/src/phases/party-heal-phase.ts +++ b/src/phases/party-heal-phase.ts @@ -21,7 +21,7 @@ export class PartyHealPhase extends BattlePhase { globalScene.ui.fadeOut(1000).then(() => { for (const pokemon of globalScene.getPlayerParty()) { pokemon.hp = pokemon.getMaxHp(); - pokemon.resetStatus(); + pokemon.resetStatus(true, false, false, true); for (const move of pokemon.moveset) { move.ppUsed = 0; } diff --git a/src/phases/reset-status-phase.ts b/src/phases/reset-status-phase.ts index 0ba3559d9b7..19bfc3027e2 100644 --- a/src/phases/reset-status-phase.ts +++ b/src/phases/reset-status-phase.ts @@ -1,7 +1,5 @@ import type Pokemon from "#app/field/pokemon"; import { BattlePhase } from "#app/phases/battle-phase"; -import { BattlerTagType } from "#enums/battler-tag-type"; -import { StatusEffect } from "#enums/status-effect"; /** * Phase which handles resetting a Pokemon's status to none @@ -22,23 +20,7 @@ export class ResetStatusPhase extends BattlePhase { } public override start() { - const lastStatus = this.pokemon.status?.effect; - this.pokemon.status = null; - if (lastStatus === StatusEffect.SLEEP) { - this.pokemon.setFrameRate(10); - if (this.pokemon.getTag(BattlerTagType.NIGHTMARE)) { - this.pokemon.lapseTag(BattlerTagType.NIGHTMARE); - } - } - if (this.affectConfusion) { - if (this.pokemon.getTag(BattlerTagType.CONFUSED)) { - this.pokemon.lapseTag(BattlerTagType.CONFUSED); - } - } - if (this.reloadAssets) { - this.pokemon.loadAssets(false).then(() => this.pokemon.playAnim()); - } - this.pokemon.updateInfo(true); + this.pokemon.clearStatus(this.affectConfusion, this.reloadAssets); this.end(); } } diff --git a/src/phases/revival-blessing-phase.ts b/src/phases/revival-blessing-phase.ts index 2de1c616f69..598d9109abc 100644 --- a/src/phases/revival-blessing-phase.ts +++ b/src/phases/revival-blessing-phase.ts @@ -32,7 +32,7 @@ export class RevivalBlessingPhase extends BattlePhase { } pokemon.resetTurnData(); - pokemon.resetStatus(); + pokemon.resetStatus(true, false, false, false); pokemon.heal(Math.min(toDmgValue(0.5 * pokemon.getMaxHp()), pokemon.getMaxHp())); globalScene.queueMessage( i18next.t("moveTriggers:revivalBlessing", { From fa86ea3214cdb78601f297c01f47600cfdb242db Mon Sep 17 00:00:00 2001 From: damocleas Date: Thu, 1 May 2025 22:54:59 -0400 Subject: [PATCH 090/262] [Misc] Spring Stuff (#5742) * Update timed-event-manager.ts * spr25 images * Update the-pokemon-salesman-encounter.ts rolls --- public/images/events/spr25event-de.png | Bin 0 -> 31446 bytes public/images/events/spr25event-en.png | Bin 0 -> 29008 bytes public/images/events/spr25event-es-ES.png | Bin 0 -> 30560 bytes public/images/events/spr25event-es-MX.png | Bin 0 -> 30560 bytes public/images/events/spr25event-fr.png | Bin 0 -> 30245 bytes public/images/events/spr25event-it.png | Bin 0 -> 30077 bytes public/images/events/spr25event-ja.png | Bin 0 -> 32924 bytes public/images/events/spr25event-ko.png | Bin 0 -> 32000 bytes public/images/events/spr25event-pt-BR.png | Bin 0 -> 30642 bytes .../the-pokemon-salesman-encounter.ts | 5 ++- src/timed-event-manager.ts | 42 ++++++++++++++++++ 11 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 public/images/events/spr25event-de.png create mode 100644 public/images/events/spr25event-en.png create mode 100644 public/images/events/spr25event-es-ES.png create mode 100644 public/images/events/spr25event-es-MX.png create mode 100644 public/images/events/spr25event-fr.png create mode 100644 public/images/events/spr25event-it.png create mode 100644 public/images/events/spr25event-ja.png create mode 100644 public/images/events/spr25event-ko.png create mode 100644 public/images/events/spr25event-pt-BR.png diff --git a/public/images/events/spr25event-de.png b/public/images/events/spr25event-de.png new file mode 100644 index 0000000000000000000000000000000000000000..1ccd9557460f72cf1cba32788099afac4f3d1cc6 GIT binary patch literal 31446 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

      %m(&p zgIPz6@Do6^^NY_Dm;dPe>3JuA(yCuQ)H3fJS>Z*H?Q_Z2W=}?e9|JvH)eC@H8q3`57+<^8 zHd7=?Y_g1aNnJX62Bd3&DQwHp;;NZksqYSEK7W3Ax$6pp-(KiK8QVtk>u+lEj~?5C z0(;JlYG1iei%fGsvdpfsY3hHIDuTLa!`WOtkYPRSFocX?Ko`hA;<9v;#0lHD@)?{9%XBakO z)z!Fdssvo8ol5(kd_5hNiJHBguW9cA<`D7vOFXl|?cwZ%SN$B(>f&%mEW3YSgnDtc zki#o#CsC_0jk#ICU+3JAD8a{@y}ASB9|XRTD?#KP?JHsJ0g}9F|Kxl~d2xw{SdS(CR2V48EQ#Rk$K6Z)p^~5;P;GHBh~jw3%q* z3El@pWqz^KHghhseOJKUg`L;fbXXYv@HrIVVWaoXw52AagW}o6hs92j9fKy%UZFaj zcn9O@wvxu@TO*ux$Mn>jFrPj3`S@5WIZmst*A&Ixhn%*5-Kco^SE(6Y?y)rxCt^K_ zfvS-ToFA`}!{Nb-2#l^^1Qz8>LU4q^ypmVYRxdpX+^7()#PL8C0)0#P>^H z$tbUzQKW$gqzyg@7hTAvE_f3JI-86BpJ?=BI5V8Qi7uk`j+>fHmF*e zlm?z&p}yy_W0CnS$|coVOrPN5Sk^7anjtWm<1D4U=)KXZv4C;~-e02Nkx6q?F&7ed zEw>I`l9l+Wy&reQ=x{}qm1iM$Zy7Mv^ObEbB|qc7KzRHMg?E8jVenZrspoDb)~>@M znNp~-gyX}6Y5-(*f<$m(c|Y+E3!;D?0P_t9qGO z&vxtA)i{sEx=>rc=7ZE`q2f``%nI$lOqM3EImhrU;yHbU>tD_&UO2A=k!Cv|Xr$a- z4>y!1qT_PrK9_HECCfQVJwMI0Fd{?dS{Wv~5{1;kAsw5y7ai{}$`bP8zXV|bg~xk@ zfSN$Fkr*I=N{NUM>-!QG`SuysC8nSo_279k3Ufz7U;2*-4BBz9grj+=omU1!*wa8& z3F=cHzCLvT2A_HqUX7Q*E@k!7<^e(7AL5xWs~(GNYcJv#x$IqD+?SYtMm&A>w$o`} zn;@YDL}TXnLf&6FcVq7l7v&^EoQ=R*$6> zDXQL(FI|{u8n$siyfM|bU0*|We{aOR9$2VZJoVj2yp=nDXQt)lMMb;@tvXF zmKSL`x)g07P^K-JR5-Q7Gp%+UQ$Q?D%;|h(c5-qsFFf5iR$6emJaK;6i?B^jBmG1V z2P?GKbbl+_-wJUVn<=|wt(@WP6J3U9K4McC8#E}|^D~#UVOmK1WptZe#EOr7*4kOX z?^uYY+zx<>mdtW&V+>T~ukE~%mxPRHOPV!@K0Ih%*W*Zu8BU(pB^F!s>&^TTtF9su!|2s{j#8cH(eg8Hs!-$=G(*=0STVGYsZll- zN&J~@wBM6?9YT>XUnKpSOAP4Bb-z|n)K>0){@QWOJ(nUWsv(@ORSkqHK5Y;JenA0U zdgm1;rf|Q=9EVXSH8|&5#|>0O-g+7GJz--P8n6zHh)NGX&5pz@y!eU)y?U3+8rLx9 oAF|pN^lqpQzw7(QUY&7IrhZqbi}UU~|II^nW$nKUm0o}Ne-dzmu>b%7 literal 0 HcmV?d00001 diff --git a/public/images/events/spr25event-es-ES.png b/public/images/events/spr25event-es-ES.png new file mode 100644 index 0000000000000000000000000000000000000000..137f1c6e7436f167fa6af462610c087f2c89890c GIT binary patch literal 30560 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 literal 0 HcmV?d00001 diff --git a/public/images/events/spr25event-es-MX.png b/public/images/events/spr25event-es-MX.png new file mode 100644 index 0000000000000000000000000000000000000000..137f1c6e7436f167fa6af462610c087f2c89890c GIT binary patch literal 30560 zcmce-2Ut_v);78j5CH*2u>pcKB}nfbMOr99NJ8%f2)*~FVnGlj5Ri^i0!b*+iP8RRrnMJKV+I`)vLG`KYXQ05oc< z_jCY&%pJV`c;*!NmsPlr7p>mTje`o{bf4Ez71Sswtr9s)({ftNOd6bp5s9 zR{joFlGbeUa;!4GQs4kiC{GJkUnfUr4=G<+wm-*}0D*KPdoJ*kESsIDr>hh{zmJa(pN}w~i@PnqproWEzkm?GkPt6O!Rz7Y>}lc4 z>+He)uMzH{JgnT&uAXQYXV#MuEi7HUJZ0HHPXAhhlj}djI(z&rCQxAfz80?hf_wre zOZt=0+Ug%VS1)(RKPR`g;zv26oKVi59w4pYKeVoPE}kwPb}s*B=znhimkB`8YHI#7 z$A8Oaewir^SCHwziV8adCID0CxcGWMPZqcXhU9WBq4er4(HpUEINmLGFbA zJH8{%GQ^Ud!xWU@^+E<8G+ug;|!V>L>2F1u~jbhccLp%H3_+3T*9PVW9|AXQ9{{x@e zI%=ACkV-mtSnuknX=vQhf-C(S7XCZRlhOH4T;^W_;r}-x`_pepsiHkV^Y#0iAzhT) zFV_BaRZm2h!C%(g&^oVECdCFEX9SztVRA2 z@P8{HAt_;re>uMY=K}hB>#Xc7oNZAcX5jxnScb9F>;J`v|9`p^tN*zB|6#*VbmAWc`S&8TM!BPZ+yCEn>>n0b z|J1hscjo(#+V(#SQvW}1(Vvd#FE_*gzj~m*KHvLGj>;!?`6t|w`tN+r|5X1#{38X% z+y4-Ot!->1gsrVCc*QI%ZBFp61h0e$7&%2HtpsdPVwM6ng5oFId@`EL|7isN$3OoD zasTDALEL4ZlTI-1(yANC0hCRK{0EZ+jHi< zi%lL7oCoSdPRffE+l!aKJO1E#dTPhAU;dQO*wIf%;KGWuv~?(5Lf0wRz~1r)0X1gQ zryHb?1A83|eA+vQx~d&Q~jfJQpL z#iJOn`R(e56xizEQGB}h&b8-AiV)~D-D4V?-Q=x;q)vqvD{;4~Ydk(po87Kr7o8yP zi$kkx-+HzZ#nv)aOIpKz?pAi(i~gyEt}@X?Q8ju1VMqBKm>bSZWVdr~tZuwtpn|?ZF3FxtSWDLGJ#ER(&)z#qW?LZaa zu_J)Yo^Z@T?_3TkfP`@ImF*bYhgV+Yv>dJfI9;@yo*~oUDxUfz1CEu*b%kNMt6Y&n z4_kstzxE&U7U%GpO>7b)uMq(Bq;=e= zOy-&M3)BU6K7>?+ZCw1uQ5kSk5(>HGT`x9A1XtAbSc_#T#BlamW;mAqLjT+sML@)H zgp3lFU4bh6sc*-p4mmnJn3X5-{TW*oCH%Py3ZYO|LyT6spAOCA8L*YTyZgpqsSPk3 z7@^5K!Z#V0sRfVUdeu1|-2_YEft@O{*$AlH+D#6j_%wAun_JoSy!`o}ntSdp+kMfe zh$D>-!@!~bPa|XiyF6`|HuG2xLiy2)K%UB44v%I?NcJ-=MB9@<+OBn?oABu;YdWp9G~sEwXiCyxN8n?rE#^ zOSR0)pT~(p5St@6>reSsWD;=2H;$kk{m1*dFG>%yqj@b*C8p(JScBG=lstFOw2DR> zdskE(?zE`^El2Cl987W4@*S_{94NQp*OE)z@5uDKJ=zC=J>RA1?HWpj!nRJKYnoO$ z_*2O5_CfHEXJ)7jzc(ABZ8=ByW}bIJsFKanqwdKz(A#>UdJLF%x_d!=gl0#x6!w0+nNo~92TN}Nykx{5k7|deYQYU{mNp; zO?A-lt*YyVs6vklT)BaXpUPe@U6Bvb1saOkJXF=b_*)x$JIufb*-aS0pYnyJ!EYs6 zt82RD4$v|#%9MANcRR+Z|G4xu2LDK`qrakqp?d9VuK{IF6}_#J`-fq2qjrBP$)~?G z>%29g!#~L8JZnibb&Uq1wugfSvh%oP$UWfA%*2M*`cz}H!Q-36scc8W@#Akgz1^sz z?A? z()?JRTs}dL%b|j+{^2|Mz(Di#3ly7o8~g2SQPtdx! zw8n9{cW&eG72C6Q@n!PN%u=BFFC~E zh9Idp_f~DqROaq^qk$A`5}gNfm2JDn(9At?aP81X9as!;EfGpO54;Q7qycOS)Q;61 z63XxzNisqg8;W`K-JYGhJEek=UtSPGmnK&qJXQ$|;75OH9=RlrQmiRnrHxlh!M=d$ z9iOVnr%&**svV6X-nzB1svLY!FbTA<1h@|;z6!fp_Oaj*e3w*eXSi7tjrWoIGFS|H zhTKX~fP5Ho63IZP5PmNWymr6ijUdtVlvRkOsIR`*@KoLQhF2#~fvJ+}yNeZb33a`Z z{O)penDJMXJdES@lH?7?n!%kuM4GD}(|&qcsgHQCaxUi%n!Jz6-N&K*x*37A`b`M% zbbR%k&H_pN6+Bir6vKh_g_OK8&pg~d9m+`IH|y?$WN6h*q$JQ?aw2yCa@Z|$F|VAV z16jp_+d1Orrwjj!72vf*4~q%=2{+0&^QPJ~t0vqFdO8f65#PI!5&Y?`Ps6a(7kC$R zIU!VgsR%!g@%c+LA*1z`&j>kY2{p%;ihX)$=*U(+;@8r2MP*8!nEn{LfQ0O5&EBxB z*e>(asIVGw)sRS>KSJp}{Y0dx6v{~o9zu-q5D~93V@y7I9Sg}q z=gE=~B%&DXNnBC&g`lfE@gbvkFL-G58V}JUr;@^Iu9Z``elrQS6HAqkyW^GIg{;n<06+X!yK8u>fWy(jwbh-FgdRtsKjL5YAfaDs zchi8axzRHUwU5BP3h@MrcCsJ4mgrxV=D~?t!fOq<FcA7TBaH0>njAt89pFIZu{92|xrcV;}m$o#k!2xVufxw-Ul(-5H|Ws3-Y zozM0+5L1nNkY9|-74bj3mGCaMeHfW^%WB@LDh*Mvi*93DsSogxJA;ZT?}=B_(V5B! zyZ3}jRn)wgHvkpZbibrl&bSuu`615g{5>`~BSZnjYx4qE3dFRFpl8%}= ziSf6?F0a^Yb_kXBdylRBAx^nutMD1AZ5FvTOyTz(p03q&^WK1?O9|B>TrKyTKbS5$ zsdM2w!%IX-20giNft-8-O2JpI0HilUC9iDd~6ZL zPq5!oge?BRFes0h1s>P?#NNNbezD^;z1Km9M%?K@xP%d^U8rh0N2n8uN@{jb?Ea&Ib49F^ zMNVR2)rWat)Ll5V+UNA3ZR}ZWKK;Zj-MdI*DIPcIiq={ME{R~?$U{SAIayl5=4Qc_ z2TFL8?)JuJ!lhnqv~^)(ds}x0))y~pSjMvuZXG$77bZ(LOiF3X`OJ;JLDA-0j`;OG^-v<4LcjkL0+K{J_ty5`oh(0OG3>50Bty3<9Do&G>{ zp+<1!f=Hh&&n4euC!KuLi9or1x0s4iuk=g6mWgSv!+DnPQ$*{{n}Q~UxO{pTmYHD6 z7#>z4#BDG+AN3T3IT|pO6oDRwf=hIWQ^oVHm0c7^KM1R@wn!HyNeP{e^4V4`{qeDgC(xH1*g0ZYt(Me@JfdOCIXdK7Ut+smtg|m``EGM3zlT_3S{8i-=MfZH+#?57 zU4>J<)!(y!d2mk#3!j!Qb`mZ$DQ`B=G!*UjfhPpf{VY@Enx|)?oLEigqDWJh!SW(F zpFqzEb8U5$TVlh#kzCRBeez3ZxT=FQ^tpYSH0PX_h|b26q+3)^zehxsZL5#BDy$ij zm#FV=pBdJjbA0tme2B5Iq&QLVGUzd`h3YV9f77{9bihR<`z@|>gD^zYUiQ{5Xfu1qa4@BGljzt5{WS7$BYcV| zvNTWk9L2;ayzI}|fRS`LWf$@Z4OEZ$KCck(P4cZGT>2qY3}Usfh+XOrGkIjmxW=PY zl7n|&>eH|-Ou8M|IVt!1+ub5?e@(oGn;TMTWjEi%0v6)LcQ9SZawWBF{4lJqI%JaJ zn8S}@tmK7Z1#~;c1C3lh6FgaPyB87yo>r+G7-j;myOnr5e0dtDg$O@id}BZrbR@B{ z-s^*_!XLonpC9O!#|)25J`y`VAPW6S7N4}WaLz`ab{(Nfjj4Wu4KHB1by)JPx4)j% zA~&pf4eneK?GFtoPBMHw%O zN&L8Hh#`sn@Fo?}`c^QJXV+(PWcDz+`AL_qX5Gf#%QVZU(IOxmpd_%YS62J(-~@m9 z;)g>J%;hj?p39D+q#jSRvbL53wUuY{b#YM@qt|g^8yrJ7uzNEGj#zV>+%5aDD|0#s z)Z?maSn~okPU5cR`B0_qD4IETCW#5kY2D%F4@`nY=JGV?1f)YVTm+Qb=z9<%UGf zq*HcCBaQdLV_Sswc$*+)r#CtW7>it;t#UQ4ureHd6TXa?AOrpQxJqieI}^B=uU6lM z?W4R+3=siX(bP^Kpfhcpw*6Cq$I?nAKdJ&d%zm?5cRPY|Fw;9ZtkWn&Gwv)R$2#eC z(wEJxhOPW`jtYmgAN6$ijEf|B{t(eyX9?-64{AkytSu4J)p3=xT2hQ6DViLC^=xt6 zKU27K^D1Ns^eqgg4B9Qn{tu3Wllw>`3HY?RyvC*23G!_uf%=DCP zKvVndY+x)!id%?_;vC4O08$4d~MN6IBP&WRn;3!;Tg^mUE@$@h+n^~JWIsepK zFA|G-(%J?rqbBb9ZQQqUYT%z`PTk67j}KaL7+Rk`j1jnt!S|@*?OUIunyULE6ohFw zgRG4T<2ZxWIxyC?rO`bB?`5&!5mnDI<%YsDQZ6+|L)$j8Q7_7<%TMVG@5ut%y%%8! z%ZiKYX7y(%ZLuz&e#IoqkH{e*c==|ANOt1uwu`kn$aK-xfW&;M{*Cew(5DX`9J|%3!7lmk;ax#|!W10quGrmn0s_ z6~d`64v+gj7e6AsnMOO&=jK8dr67VaC>H#-A|7zuFWan3X*1jwU*A@GJtL*L!(gZg zvDF(Wb2NUn^9EJ9e<+`vCUTZr|5D&~Z5Av!_$Wv0=roAX%C(FrEekYYoX>E3ZYjqF z<>=gv(Y>|GsosL{zVTip6bx@eItZy4lu@_6R<<<+Mvq)8Y^^hLV6zLtUrmlD(MJRc zFXlnibgEqS-di`?&*$sim?R#F9l!y)v;OT1+`QK=D{``L?A91w-1o_AHb50xCPMywZIk*;hnyPOk%yr2uj_R5horhDUaoX=7}9in7;?g;5UoX!OO zKY8-p^Si#5(5-@**Q^^L)UM>3 z{J2nkIxT3eHr-Da^sk=7ZOlu>p7^%!1%W$I?xes9&xsaKSABds9QqqLzU_qV(yg-2bp+vxhzE9#>5X-@ zXIfjftZADSD6zdbUfsc?c_$WAm+b~Q5UUK1i+vdplf_=&UH9lF7kH3|*Vce}t>xth z1$iFIj+#lwcX!PL=4o!k7d~T2(P5()EAr&m7&x|oB-bh0^nF`A(!RIR_l3zP3Q8lC z;_X-`6#gdzq4Bd`_e>kvTl*>E^RWO11&ahj)lS`ToPDrXd&7C_!a1UbB10O!_y)MY zBPM>m+CyKHSWB>(jVsH-W!VNb{h|)j55a)D4!4PD=}<{@Fr}PIC3_1iw=P`1`gm13 z0k{&f*a{T1JW$o=x|7VqSV0@qE1r}gi)AI)gbM~7|6EqB6cW_iRWvS)=bz;zbDe74 zXP?ZIGP`knDUiavjeVU&q*i7wqpNBBomKPg@Dj`tqn^x}iN|6gig;X)Gt?gng?_Wl zZW2WqQVM+4emn^Dr9ng1Dr#?4woNgz%Wal<&I?^`Saaza{C)w}Z*|udYoeypSv#i* zP#mp`kfAD~0vE5l6t;AnPGIs7X5NkG;wI8Q#rqS*S`73ahV^0?J7aNBuN0{wumSA3h83)TQhxNX0sK z*UVKm9Pxd8l@7*}j0K+F$#%=U`G-?^O%60V+q+~{9yZq?AjpCBAF2wol${AZE-*hQ z6jjMxBC9){mX6NVNEZwETv!+XFrttwbO`3hJC!hez&`hIE70L>#bJA1XH1cPPDu~@ znM8j`P+Vlachjt@4F9n4oX65wAneO%(lYlZB`W24l4>i3BQ4aBD?e$r>K~$kqU|hxp|Z-ryipry zoZS}oEB|=@QGSnP_Rq*zbnYdYw4-2qf_lrTAKOjgS3B(o4kLnim)Ax1eU2B!TmqUi zLi|R`y$GS!`zH3AFN4w{B2-Ne{55FB)%W_Tj1IF&^>&L3v1+Qlc(gTg*dWH(3XGPCw^H#K(ZZYpTBFN?QvRK{ zUU(yWX8(ZAu-#YEt|6{-an?T-aqx~GELe(V;<-d%JjjEL>SlI+DX=jc3=(E+DAN-q z34IF2tm;qWD#X6_>{} zL5||*2hKlu6rT^aJ%wX`t8m@Qb_5Ttn1J1tm(D=0k6(ntE|Q5r%Wth>}BvXh<1s%A%VgBFAUg{EQXYa zAfB##2&Br;x$nN}UGn^*ES5Sa2n0rB*r)!y{4xhLp`$i>DuE!n42&y>4QnTEX>7+- zKfIQ=GCP%Eotj%YfGf5rh(f^vNgA43BTlIRM@wa3RGG^oL!Y;OteZ@_gX&Ty<1BXk zavLdOnGMFM4fu>>nNjTek%Y6-um^(^q|Ne)+oXMnS@HCmwSU7)2;fhxhlQIcp8$ln*dncR<7N4;|)bIIcX?KnO~I%&(T+5@Xdl zA0h_J-flaKnptaWogGy6-jF47(m#QEj4QSSXZO7sL;raCj>eo9FrRDGeVKdCS1*%L zdnBdCImaz{zehK-HdYK$z6BN;0WjY%xv>7!FzCEpuFb*k>>?DA^av(JW-`|JS!S+#o0jjTB}an2d&vvz~j z{cf?bt)_yCfRTX3)OWF?tNli#(ac}P6D=h6Gs4l`N=9Cd!p9v;luWs!L~1boD1*(y zmzE3{S?eTrMxVP2;d}h}F`zZv8KP%oC9GGD%_CDo1l7G23GQCQRX=^Qc(_vS;_k`U zYFEWtr|yW=uPH7=xaAvh@J7fDuL6<}V%wHdFkvZ2ubD7gY@_7}#1`lT?M__5R z(1`jM5h?|@w$&r^4jhM}{Q6MZq*2U*oR4rqf!an)uox8hD5*L{~I! zL-&VAv^1sP`&ZO|fAO}pTdy|;H>EU<|>F(j1iIp>FTUb5Kd+$JxNU5hf!28*{~-lr-vH}_0KZ; zn4+Y&=){V_4&$m!T|^a^Da&{F0#|vPf;*E&i*4_+ne~DJd2aLcD<_Is- zrgE~}GgwD_$b7mb-8l2edUe$>key@$sU|y<00v;=&{CYNir=ZW$yrpO13R7PzLe3( zZCVj+1xwcLNwbeurZ}~;ni>OaN$$FH6vOuPmxu*Un4@HjFT`TvtrwthsHz1Xr|%4& z&iZ93WM3e{i0seULy_U*S3%ZTNZ#6PF%lc@3khUM6-V+J4w1n4SvtR%kS! zbg8KMG!nlR3`=?DxQ^!Qs})|XGV)QcE5v3k9EIZ`MvB?zdHNT#V3XT$Fe&aH@ru(8 z$;mq&R+TfBT2J;V%TTsZX>kBQpM3wkEY|!ef_w9jtOSx#m1C)NHvlrZ-ivWKd;QQx znxjLd3rKADN1aS<@ z@#wE{>@UMd@xI0fk*-VKr4G$RL`d-bp`rGeJ*Y{$ z^|?N#ioUc2vhqa+k@L#AZMvDIoOO~2wLgo8KH6P8{Ou%#G!mWL9w#|4Qz@g}*swl5 z_ulM~AeNX0kx@h$y_kP@!{U(ts!!rzaltVuaD8uF?S}2=ADhG{L>B6}SDdL&+*Rle zbZ%%b#vUjer1bAm7phA?oQn(7=+p_t&HFfhtlHQ~lp+`g>>9c2F@EAiWD~BRB!H9j zj_RH3`2-t%is5?``CF0sD#$G&*MGt<~4o9rtQccTFk$@}M+>0FnEK0c+7MuBj->&#ew7w5NRtquNIULqn>gPR< z5Zf^nv3yw|s(cBS&D%SFv$5x%O{c;O{k*!TyCdx{a6+Fb3H$N9_ZpGtZ=SbINq;f| z8Esf`-z5xg?`Zh5>K9%~up33n;&DsseA{=~|FTX9Z^%YY19S5%ol+w*wa$gN&?F_A zl?TfFY4uE2fjH-v$XIHZz$&Ud9&NSu1V%lwEqP121bccNBtvJqNSk)k}Rl4ssB=xn?d$njdA>xKZZ_2F0 zTmlZ?nbYldA9I?$77NfAISFz?&q3PZU!?x&OF zj@R2xjL|ESvx*{q_1-YVi(mmKN`jg_4WaNu9o57Oeihb_{E55|odlj>4epS{M^atCRMGt58p+{1SrZlBVZmzWQtUWLmp%a9e> z<_cLi`V|I@$VM7ITn6(?wDOLW1#POJL>8s8jvTHy5}+(gsikf`4jNS(;umzwy;Do* zn;f5&7zV*#JpwC)$vl^PQEX@)a|>k^EXkAC)kUpo514EEMo1}f9AU{kOF7^f?D`TJ zDqCdNY`gon^Or>#g1mb)@?K+`b!(v)K)i307hGnURn27-VP2xsW7}CiF}^d*ltAr5 z945<9NuUMhWrAE(yKi{yaU9>|r15gJ!NK_)YHRfjx!&oK0V~`v&agqSL1y>eV2l8K z*r2te#OMy#;dbUm&9xjK3|Zgcg-7)yiHA;L+BmhS=b76nOpBVkwipFADZi~l7t0t2 zmOSS(-Vg6fnT{Tl0sG8;8f%}lf@16o3Y>cA!`p(FRcRE|oG5W3bVr;?bDz>ox2Que z&HAVY#22^yo}}-wCO9&U1u}-_Mfgx?m$VhC?r<(;l9h12Gg%SsHCQf{UZcqx5a@eW zLcevtj3zzshz3v`h$a{K5h)7*tJ4W!UzIM)%?cWwz?hB_+Z$6_I&&W3IDdZyU4Uep z>NZ#h*LC0zQ3o~pq?+9->QM0{h^OSnCaF_eTN82>R;Y|Bfr)iEVrlaF1~0dkVT3ec zXipl2*9);8=hWG5UG_RY3(Ka#c50FwpZ>X#x>S2i<(0fdlVQ3t_;NnA$&9kvq{Q3U z3>ajW9Iob+C;6hY9oBFpKK3)qW#-{4p39ktq?zBkW1#-m+>kCr9fpxK3mPP1S%zI`aSL=f#@C~^4DJ(=C*S-_CFpT6NC|E0b1W@#{C%U4@R z66#;;Lg8vwa@{l?W_EbGVUDzBw?UHX{2spIU+Fn?g3UNzM?L; z)1iK=c;uXQY12vJ^UW`0rtgH!Kb@g``(>RXE01xu`3^xNCJd3xg%FaqN4V2aB;(xK z+{z061JnC9AE0r!ab8a@im|}j#n^SLJ zEBnRF>4?`r?~`L!Q4A zgi_bZPnIMHXqUc~d9I9&j-xJ(k z;I{op>=8h@d(N7Et8br?l-(nPa?} zjT6ja;!(+0DVDX!oj!jxnt<})u&30L$YZ4M!Y`*P-myhMN~NomhUJ9E4W^x*W}RW9 zMM)d8ST6MLe5xfKv7oc5yvOaCeuW<%S=j--;QsoJOha+4wp*&8yjg?a-KeywXP*n1 zOxCZABRQmQ(#~V=hq&FlFN2ND_?-D-E={g1d-i8nd#m@V77ZV5!Q9Po?xjqQm~7to zF&+n_R#OA+g|$-Q_Vda#3aetXDZ|VS>MojRWj>atVW)GNG%4w#jvDs)l|v?&c^uSQ z?^|Y%8PfunQ~LxWC@j|X7D8Ibq}3Xs&nm=Nf7Q(2Kn|3SbOdM+e=LZT>JQ;z+S?+k zRPE(#U>o6H|8tU#@g==1f4pmxS$N4c9UNWgogmr`pKFBUSxFZ{mTkTLnd!XfLta5i z9zj*zAv|LF;2&tT&Wj4z)AP`!53DObcYW$*fo%V2okK+C-TfS`Kz zaypo}Itr zB%lAEJ7V6{PTi}UIYMidF zlxZkDL^N>GnCu#FZ14xJie}^1Hmzz|o+efrmLd{`6={cnrEiy900Fzc8^Az?47)X% zuo`OMbew2$%8!AI3XfpdfXazcVUmM-(j(GtgHgXTU~!6Ortl} zS`b)uU2#$m)`*PVx}Wo?IFav6gVz>@$-XIaAN>4`cO7ZuBF?ro~D zY{gXB?R%g6k-f^n7u~FFe!a2ax6R(5R)0)8UajAj%#a>KK!~3 zJ`dyMF`jb?9|m7%Fah5e$dk&|eqLid=kPhLt#&G%sO;sLDoautu5AnZ)J3)9)AZT# znObjjjz&;IoJ7nz_BbxT)4?~%#|j5v+7i6Vm(w)tLBi({Ai`s z+bP#GXQ6NQCP`&L$I~-w_x-I$ss>mBO)f?AglfoQQJRq0u}%l}n5t_c_R$UJv$V|B z#^&N(CK1$dFKSK%gEpylw2d5<8!|KgiRRn!w}Af!X(*0DguKYV)gIVB2&4|pvrwVe zd1(5ur9A0{^UbihYvmOdbGP@E+qkD5cFm37c7nat=j(#XAWD!&n+aL6Ukwr$j1$3^ zE{1TXnKpG>d`>;rlRUsCNzrAF=C~>xKKx#)>~0xmnwXWtl2U@;sv=O`dREd#D{RZ~ zd$;jbYXa3+)m4Sn*48+9&R5s1)vNM33w<}x*bFSsB{u^nNRc}s#Y@wOBbY|SX@)LJB^(EK z4T`}yRcq#mjWk#-M3pZ-uw?^YJ(EUr8HQ5S(ZRebcI(O;t#xukL$)nvjgpix?+8c`5YNMG*v}53d{%sk*fjgIu*)fLCA-^cM<@4>zq# zZ`(+kl=SX4-^&gpv-bXJmzvy`Sk*F}#%MzDTKV>n_^yj0v~m8D8WRffq5H{~w8s%7 zXIY9qR|s=*lKTcZI=3YioqB0VDj;@t1c{lzcnryWX>3;QyV21lORux)JDb*u-iPnJ zdfu+|>FV`h?9IuaP6!LvRk+szGfU-Q6Q?2~=2IH9u2+j`u38M9lLl4prQ}&PnYo4p zo5e1ruC#eILeJT9RwffF>5(13+7j?@8eZ$Ub(;q!qJ{*+5l}rQlPk zB79dN2L1NuF#QLfG!3pTr49+@FbPiET~F>%%GuiG5uQXous6o5V!9nl`zKmw2KR<6 z!LdKhYu;~!87aO|juY1hlZ}l~dfh>~qubMwGlqysvi`$>vGKeCAf!F#e$+RWo0EA3 z-i!S4YUj*27Idq2m;@#7<4?6D7hyiQH|q)aY=LR1SBFLn935#{pQkkS1yAy-S&kEQ z$Djj(U+Fn8=-=yZHSYZw!`@4qfO-8q{LgN;yj?=XyCpxy<*jnBBPt^xV;nTLXv4SH z6`0lZTa&aTU6EXm_LzP+#3Y5?oke%EeRQLwi&iaY`_9s=DEl14K(P6`IG)TrnsiEH zKlnI^b-jR277^L>O1<^?nR;AFjf~U>-I0OW&p6i<{Ibpa)tHve4W)P51{3b*jR)?v z9ba}$dzp!o2#Lo;tU4*Zah=LAHDF;}&g+1K-I$s4gs)xm;i_K9M4ey=T0hSd9w zOy)sK_R_B;m!x>8SeD8i3mLe5CQ{wHiZ|vUcI@8#IVe-=chl$1P2#IxARV5|Leh2( zDP~9`-8o_!qN$g`A<7}fwMV7J$zH!@%YlJo(lDaMPoh&J?jhTnHo*KAA9|Fcp*Xu8 z*dW%Oan8d7aBQP12cwPUzLL;MhVWc5;l|K)17WE2tqZ--p*8qJEkw32o+zM;7%m4} zHL?lERT;9;5^t2o-<>w!orb;hE-6lLHBc#4dJ{bH#>Mo>2o!nEs1Z6__mBub_#s-? zcmZ7K>mwqYbpl&UdQIFCzir#k#l*DXw;|l}Zw?M7bYcgxKJ$DCYNn~lOcH#PC8x4e`$O7Er>bROD>QMT#hyAVfNGd}bawIC zGO0P(&)f*b;ZG??XftZtmNrRHf`|C{mxAJ0!d6WrVz1ycMOFm%h(uQ>t z^KQ=3ajdMy?eM&pAfHGnPbzyu9%=)GCOvw}_R-+awpr`vzWB@IS7y+B<&7nZ zN@vDwLXk6gq*w^U<($_isnZ9tk4p;B5q*Xsd^6CVI|>YDH3qUU9R3Y^*Uhg6SlZ!w zbd&UB_9*qQar;!}lW`^Tgfl}*w;q3mH}8zXn|&|dXxiMsj#DGvnl%VEQiJdcrQUy| zJ9Wk3n){K*RhrKhM_ZA5-QBr9r&6<^YOt#dcd!By6lra)(wx}C(;KU0$yMAJQr|&+ zaU8?CYV&Hie6qZAJ3pUsMfLLE34oN1X4+bq`&2c)A2B&I5tj%9+xWq_I}{eE}!nchU9>q8|=%g89%6G;w0_`7gUU9^;^`Xf$c~913P*|!(#KZ4>jVb z_im|KDBb+3o!VP(@bN7(R`!Am*G!wN6N4$N+s5n7xn-h;bs_KI#UNU-Z&_fq>B-Qq zcWNYe&S%W!5uZQ?!L;@zKIJ!5=^RNL!@5#}C_}CnTBf4tqzx^MoxQ&;3IMS_V=#F zY>m9U)5`&y6sgM%MNo@)HDcU!9@zVM8QeUsa;aeQc1&Y=rP>-}QqAigjpSX@P%y)H zhiw~`j4f497ej=yI%K^q`|wyU0CYe%?q_!2TQiyJoPzo#dK4`&Xy|c8sp}m_V2XJt zLcqW=^>8lY+?xFRSb1S?9$)gdOQs=r&rrUe@1YAm^=Tt)+BRFuX!AJ3wz#lMyEA># zsjf6PuR?YszU2X~YPXB!ozsXRf(z_VJ)H)*3?es_FMZei(DWEu;U&&~L)aWpSk6eP{nYSd*Tts1asE9WMg}2Q41yQT&Bi+Nn8=s*kf+? zgotyT707b_i7V+-I=*G_v%as_sH!qU?qx;+M^7tyw#;Pgu7}o@o!%WDPuVyXD!b6P zZrCLobdJ7^& zY>6AKwtWSjll5CevXy3BEn;PB)5NTFr4reKF4c%W@6~?XeM5RfxaLRIoIzxR<3I0Z zykR;xqa6TI<3SIY`I=nqXjN&SQH8Hx_-6e^78|gJhogs>K-8-KAT;UeUR&~D%EF)4 zS#!$LON*(GTEU`rrf86~kKuUPMCM9^I4(+sO>lFDKNwc#_=nzD`A)7)e%ICu1F1A< z>{Ldn3e_h3p>=DAuzl9)3~yxd=x0n3*f5;s`4uj)D?o9%@QvRJ- ztmqiNs~3<8zE`Nq7EazKUW%KSSu$uyde;*t6W`2uch5Qn@BZ3Imjl^`L6l@6U)Qa< zcQ%7S(jc+xIpT;Z+$|_e<0;i#p$`iBQTx6P!?(=#&o{t`$Pd0J$@irTbId;>a}}a; z8GpAfUzJb4VoMQ7t(Kp5xD4amy>(|GYhHN!5|DceY^%6TT3I^I{D3_oT1YRh4a}9F z#hQZwV?KmSC&s1Yi$R_DDx9PM?Y$8e7^zzZ1JmoCI%;e zs!tTq{J*L??{K!lzyC*{+Wx>=AoY z#HzhV%^I=y%5!|5-|zbN`8O`tba%B-aip1q;JC?iKX zJyy5)s|m(KxtE`uwW2M}@u~(Yv(6>Tvfo6Sn(Rj@vs|4ai@h{sizK z?Ej-r2nRQlS*mA$f3}l|{%+H5586 z;yi*A+|D18l)z%kZz}AO;VAVhTlyM=7G^pHhTvqph5WkoKfL_RgXbCePqMx7*Z78^ z`xqUFtJ{YZy?5rTTgMQ@fx5SMIlwE>5HwTSV6~t|sshejihMMt6_h5v8jsswhfPSK zW|C*f6>U0w74On@SkPat;BxgHA+1krm(O%F`sb|kIA)jK(&j{GWS^n_ssNKCgwaJE z&-0ExzlRJEDe%edD*=qROE7(*%2{aF@i)%4>w@u%_%x7J{2AN(Nf{tOnhihCH_EL0 zM7BC~Nfypghp>Es`nz+#FEiT)261rI@`U|4bB(}DK{J=)X3^2S9}~g^t;xnP*W*tS zQ%)eH_*)rJ{<$q1X!Q>9i($KgB{&oP$p-{zH2L?17=R4QDr_Ty;L%jjet zge6#HyNNyG;Ay(W(?ri7p1< z4*l1xVgU_6Eh<-Ql&2vRpOPCka-T`;wA$oDGch)Hkl0AZrm8i;Q86E1&fl=B_lKiT z_Z&hBBqrC?Cl(;aRqhF@{5>z^1$3UWaehGwwg+T8{WGfmju_=ZZ)7{772X_#(g3My z5vDKJjR4v$?|=3-jhLqt{n`AFNd_~9+YYY~DRl>!1)J&j&jkp9RGw|PPUk>=hk={E z>4r&A%V8+#)Li#F<3N4+N^-!3hkt#22vN_9qY2}f;_3%56`!cMWWj#OVvg|p2z)d~ zP=FBWrbUuYscZ-6-YZhOQ1{LuZKT2Uc0aBFkEy*|-B9`uQ!}FL|ExYrIT@1w!j(|b zPEuuiJT-1~uzPU*d04))LA-0^`|P9_?G~SlX;*$qFs{PNBS6}_B~uLDs#`zYc^o0eY6jF*?0x2rN-FIZV~(Q=(b~{M zkE{J!Ehr3a`a+R7O#Vj>Ai4jSJ1c|&m0prhWtNgd$}|_;%~ME?vz_}+L^8Re7Y5e! z`m%|Tb_IL&P|D&YTQn!2&0b~sG+KcEzLCDX!eFPRTG^zKGI^m`!?fGz#n{Xtq zX+pCci^RBX6YqMhz(6sxRQd7-k*T@gzdgJAt<{o%=>uc}`ocJE zl!DH6;Vu-)PWAhcx@DfQg74w`0zBKrwBh5E;ctCM+;j(f={5to2uVNXlgSVFUSx(u zho~&w3u`gx!4LJnWYI1!1`w85L2cxkm(?|ARfl0~dlL7p1yN9E`B94Qx10Q#DarV} zYpG=a^eU~~F?d{b6lIL-&qf+G5wo*5`EW=pMYWqFjAZAAsu_yEB(2X93@9n4nBq9& zUB;|{3Bl{}x{T-<5kr!J3Zf7PEXQhpJsZf?xuYfdb*QeY-vDvD^QlGZuUGg;3v7LD%fypB%guTGTyITS*bQ+jf@624c7!Vcv+#6<*k6zbmGpm$*D z8dfFd&s{$mvK>gZd$FM<@IXT$7{TS>K3XmVukiBFX;Zu0kn@Rg5@Ojbw>%IX_c=nE z51{J-=*o_9el33@g@u@7-Pjqs8v`~K=hM%X+0q_m;tBb7k7!F=QdY0*#_UdN^Jzk# z-#xn?94@~_D61JS;pTkJ;h zhdCWlDh8olAKml)<}7OMj*+a2f892>E_+h$O4GB`!b{xEF9pVgoM=T?#UKJsh3{pU zL?V!|plm_x2{pRE)f#vq^dDINZZ>t68q}2a!t4R9o>lcyo4bOcZm@`Mh;BQ%>;ovO z=vU0uitdXdzx0M^*MAbRFIN+GfvW0i@XiQZu4)V$C zX&%q>-KK5+gH|!}I(Ll9D_(H|i2ZKw89NZgQ`<{Vidu~!f2yAwpn2|Z03~h4t=p%+ z>5Y5N`fTzIN}Wn4BkjLVBhHP!Mn1UGO0{-9RWAgC!p=WE^gL*xcC~PI51m)JS6G(- zjC=(Btcg3rb;J|FNnhW5l8p(W(H5K7l*{X_@8zm>?h!0L}5~_fRk`Q2ZiD=eM?DimEKUYNid>y%e5L8-(|zx z0^#laV9~Scf;OA{TE)_1UWyvxWbIy=W&-Vf&^)|Cr=#(s6b7|tV8W%ik=11#?6a{z zXpvwE6OkdE2)lT?vSYoMjFp|D<~mgJeud_48ANiYw@A=EtFtjkE;6VyKk89`46qzP z-Sz*nhW09DzH>aRp=a0rxSCJtuF$(o%0WV_5y=cLj7>?R+c$R~7+~@rO4|~>X9nvg z{a$uMiqrtLJ2Czglb_jg#CkL3Vtz@_Rw31H{F5#s#q5BJ9{a@nPiKh~nNmlf*0esX zq+pgl@ScAZm&dL-3eei=P6JWDSZX+#N8D4Dr@Ix(-Gjzw0h@_K|tx@PSe2L51=gAYaWYFgmtZ zeJaZNUg=?u%Od1S9V`7~{VS>EN)#h>up-{%m7m9xB#9HakTRWYObH58rL!%uS(%~( zh|eBsnM04sz;aG7_ASQwKHc_MTxGCETRKpLx6?T3NO;1hNNTR(>|9dqj$D3`&Sh1v zpXJ}OV;1pkKBaedH8(CRnQNZvf*m||s9&QR2s11@Soc;a+ke<;EPxm|ocD?RmS?ux zE4Z@AjtB#9($l(&x4u(-URgSE00Lzrh)v%E@AC3ydO&>+r_z`VcM@qgB#w*v^QWq9 zwZ`lmL*7??!x=7m9H3bpvISQe6=p0xG)qKsmrKHrP2TUm?hMp!?b2{`4-la zE?9|F#j>o1sumNab07eSLW>A%==Zr6ByXetkcoIy!B7YtiCOz;eNpk>I+2Lu(?`ch zc>d$S9}*{(nXC`@?Ql@fOQfCavS%YArEb$rEF9@zCZCdTl}BxpbL8FuSCYFO-$a&7 zG7s5L6!^~7n>u^`=YB(nz4N03K$yX{KV1#()4eC6Vr|2;3lUkYU2aUaRh>K6BK9bn zlHAQ_+ty358#u2)JX8z+`v2d&%c(Yc^Oa%k>K2n`5;TjU!v$gzULt{Kt^Adm%KECo zW{>c52xPD2tv#*xsoE5-4@j03G@*lP*Vd9DWnYSUur{cSjAm(g;Iqu~M1TlB-)IwJ z52d5BrAHr1`W_U66zUFA;H!*~;5l1U>WYeI$QFa?x=_j$k;;?Vz|Qg0BAd+NQN$f- z!m};6o!g=ddxO?G<-5Dz_damNb&m$9nS0;d2*Age2+=$@y07tB^+b5N`=RSvzeUPf zR(JC0WFPSEDWm59E--%FVC5m*m!AFR9C{W!(HjFu|A%sKi}?DBs_pOvx#;6emg^KJ ztKcVG%`bNmC7X-p`FW$|Jhq~(+2fAFj5cAjGg(Pg_Rbmk&O`QP^}R(2N>Rg8z`sz; zl%)4aB6~uz+9^q^0J;-QSXGT?8T?}bvR66VC~EFvZyo=2 z*NN0|7aQgyEt1JF%eiFKTeZVf+r3?NYqCP&-Cq2j8-nfOl-*tX8j1Z5rbq+N_dYYB zw&y>fOM^TvF$=>{F7e8RPTz z(#Y-1@4EhGHZPHi6!vPjC0vK*OD0)T>{@#}WAZ9G_PNiU#^e{-p6k|4UQ*oo<8A}2 zUnGCXl}(ozVr48}Yw)*$)wRP9%ZF&q`vOApoXO_5-x|B}u=HC4^L4x2%-60pb0m`c z1GykR0z#2tX>f=7m1ft|+F@JftDskaE*ZAs1~l|s@VINKBWXHe)%Sx>iBN{3p-B6fBW}0#Heb)s^sBS(IVXxK?XCUOM7J%S+F#C<#s$m6 zA!E8?MrIjCDy`Hit!nhoUx_{FN`aQ@V;_f)O+A@5?&V`i%I-7Gqv(Pu*~+3xe{PVB zbOOqcq8gWR7m$?EGxqe+_g~#$AFC?x^;$|#JEPP3xMQG2($Jpg#xW5uqwO|^Zq<(# znG80*@IGthodTtnSuF#7mnbZ=-|}4TSLd(ey*Na~$2TE_tSEAPX^C znsih1NKYD_OPpcK3N=k$54M*k?slkoBUV`zFRQCpRd$@J7D@m9e3EGRY&mu+koA@W zD2aK1AVR(Pholw2_J@q$SutuWcUP_iQ0^1D{Y|a-tAiFIH4fNBPBf= zYdV8of%qsR@42I-y0i0<-{#`1zdh!`O>D?5nz&s1dbKQ=Q^wc6#he%O zR0Xq~XlZ?SM;^L^0DNJ=df0W-#kNMJ5c)?5OCS@cylQ5ORk?Hn6>w*XlEh)0!vTVe_>*hd@V>eYEoA=xr z<0-$00S#?aorjmTJr()=jKh{{+X0pnTtX?AGW{ z_D3rO!S#Gh=Zm63Qeo zIQjlhcsERPFv}PjSNnE_KjG;}rI_@ukOZVa)&K7NK54lv>B%?~Y4T|{AtqIRf`!KW z2j$3JOHCugud-=Tlk%ZwXn-hZ!~xJ{vNQvzv&1N?A0%4(%G>)D44u&Pdwf6g2?NER&v(FW0j# z=Eqi9O@0MxBbMLRGwl2_4*iqE9+TI0nXk`m92h@^FEVV4V7;#rRVUe%E@C|V17!@d%CP^sQ1`XN0 z0dK1EB;%`I;_N=ehG{5ls!p99eSO6wJ;^sezWc*_w;kJIL$n1N!V25uh6g<`q#9sb zQCyS3m6n;U6!kLtcJA!c7vC$2i_$28Bip4^c5=OuXygT6jf(% zwhF-NFW`Tps_B&KAd@#5Q%hQYT_ITC)0lEr%OEPqNxbqp6 zU?u9Zr;Tg9{p|T`89o*K{Ic6aWLC^%>z8Vq#SLlEC+7#_`$>g8{V%6zC=aZ(dG{Fn z>`OnbO+E7u7v$)W!P>-ORnT7VHY>bgUFGL{TtE#(#7(DZ-%$RKKIEl0oXfxg5;7qFhVs`!XPVJcC;HQOSLC zCD?OG_mv!eJCFU1`=o9XhlfBO{Mz^lG+Hg>nI2PwTX&JpC9-XK#gC#A$Z=htFss_k zuRPGt_9Z}$X7ee^wAOQyGsXUVH*JZ?Dbq&c@MoEE+Gp!U?dmf7RGgV&=x54@1m}5Q zXv-nI(qY2S=(0qK_-Q_Z>TrH1jMT_`Z<0|)*y{94443q(YdF~#$x$5KYflOT$Fy~} z-Zm_f&sIscLu{LSj{5AjcPxH>n74fvRVds`C23ps7tFWFdm++CV=fA$)B+=C4$RTA z9#Xskt_+ozOEFADDX>I!He>)qMmsT1id42$hQ(hc5oMXE0*2%Mx-q3~r0{PMP#n;s z=Uy0ZKcLI4LuKKle%K|iDDL+6O|~Qcc{s0r*%kFtPyEc{GV_3S)SgA=r#ViDg!vI= z*h?Bc5y@1%9qQnb&Gl3#6n?SCi^>x5H~C~>fVV6DT8@Cj--f`U9Q}fKgNp=xoO19t zrq_J$BOZw{Gss>9EWv(h>!rg=rwWXwjL%-^!nnqoAb8va4dk9HzgHZlCH2>eiCH50 z`!;Vn4jP@mhl{Kd?sibaS&jEYfvje|Tsm~y!PC*_oBzE9&f)|k^!MdEfj2c5qfTV7 zyOUIC^4kT;5lvRF0Z;}L5d8g#(Gs?ajpk~C%`jWP1~2SsCll{hl19L7#$0_cdj52+ zj|cssrZ`LtIl~qy5+LL=7sYM^hma4_;-4Z*nZIL8Sr|W%{#dVUy1JDvK!*IJ3@KzY6Ce9YP762Cuezj_g1gk?zGMsbE5_6%<|H$=81RlnjkDbY z%2O{4WQBb3N3?4NvG{8^dHwz@s|^2R$O*q^_2l-~#O|Y|0C|uvHBS?Coll!-)+O1@4m@UHrKmy?{EIqcFL4-$+{s9`q_Ru?vDl_fHSH* zRQChM&EH#Fx7TW!1sJl7>0V9MQUge&waA>c0sfq@yLGJ;Y3wNnm1U#-(HN(0c#@Pe z7oZTS;wt-NY>8KBpR4SjmJ#S?3Y`-sO!SQ#F&9Wmfd*`gn;lCuU)VWkot1jNEyHfq zH0zkH4O8kD-EZN<7eLCn!xzo!>V0oh8K#{#;qeZ~T6K2X?f9z}xuXhG5712D&eg zSe`hZnmx&0@m1=|mLOQvwyzSq*5T2?b|0b|CB#>$op+>A`;GC6HO@U|polv+;>@z_ z6P><#BfS>RcRhHvw3oWZDP$+7&*w{x0|lmVyuI4TUxI_B*|xNuP@gGRNM~AmQ!bTn zwRIb%R2g|u*mbWIuvfAVF1d(pgY2sY=k;FYh-P-7D2iavyr6Zo3WF4*d6xswdhWZR zL`iaV-^P9JfcYPzE=%(^7EoP9bVX zjD4NR59Vt|kwD(FR*0aC%iX9dCE%k%{X73=!e0+=MO=$;6Gl9!4J%rW4%R9+_;7kO zl2c=^I?Y6}uj28^?D!XuG>9#n_wWFQqK_6KUOY{LnW>tZSv^Ykn=)WwjNO~1D(dG} zLthy{*Fv@xOD5xxz@$9aUZdrmjNw;{BkbKI&&#)`)}Mp2JH5pd?ms39GBCoW9s$kg z3>J2D9T4P?dCaQ?wicA_%4dd?^urZ1+4|M#11wM0WHsJay?#?M47&B&Zv2|;Ng35k zZ!#wIh7MEL_akQ5$G8H)q`@(I<;RLA#nA1)dV`p&Gis!3q$dz{ph3+9T0HgluQ;x= z&fnStz`%5}F)cE|^Em1W%D2C|h$WqLua>f!nM>I`wZg;hE6VIc1 zNFvLnnPyqLhPwt#;*v!fC%5-+t#6=97>6WRx?-lUZ3gBoomA!;>@+d<%N%%^0wu?f zmA*$5B(moT^aP@JNtx8#QBOZ^Jk+&8`n8jOCrW+RA=!%j3TI4Wu}X#P3HELij^wuV zJzc61tGwqrIT5X3Npb6ken`q2C#twzq|4Crj3H2o#@w&q8iEL>20cnIYqbbrvtD2m ztH9pJB6Fq+S-zdqMj$s?A#QSaedZcGQw9flDHhF%syULgMr7)mQ2ts0mU`3G;p6?! z!_z`Kt$kn8`qr9Fu5j+}6$0~H_MdlCZ)WnO<`@muYOr#2Ms%s`Dn2U^^4nK*IViQZ z=8#?)WdEc%)D20gap}|InvI!4+Lh!>O=z82Z)2x$87(Tas!*~LXvQqN_23TUivRpW z@4yJduRtg6Qta`<06||9LL8j1J^+3I(wOfQ+BY=|M>)@P;-~E&`3;r5y#1gGl|R8` zKv{o}1NolyZQgS!l!WG%JwA!mo6uC%0}!$%CnfCF7u1oyppLaC3u)@Pf0(zF>I>JN z!FSy&KZ5x#ZO%ukWhK3MCQ}omS-KySf&l$2F*&iT;=FUP-p=m;j3Xd-DtrpI9uia3 zpjhbW)s4p^k`Xu6&+OIiX|So~3&TzFLNn>Kva$sWIrriIt;v-lgzKZ1N2ExD=uu0+G zFYTsuunh?A(SVI*wh$@cGG|4a23fa^ApAFOXx; z11x3gUc<@pdqD#xOjHG098gfZ*eb}~!KA$iyySjDC?hGc?Eht*BIWhekI%5uowqeb zg0eo4UvKD8@b~AH!?`fhCqBn6AVA1&WY!B^rbZT3>csvC~Cpr(ub3y>$Mrl`PPOs&n5kt0LkCielaRO@Pj6Foo@pS8!WE`G@hJLlRN1YYB6VhL28T|A^C^lJQ>*jes%V%O9tckI5Qf z)^-!Klps&hd_t*(bLK^*jf@1W#B^$D4XkdgmR2PWZ8X|I#SLD#77e)HEAKcDyj6hzGzKPw(EI?J11xSh{4 zCn3nypraTfSp$8Z0$T9i z7Ac#%PpH(ND?qKBfw36|ND~1KaVQ)&&-~AfagZC$)A018ow1cJV@GsxQ8(TgS9^tk z-nBOes9`{tew_bDJY)s*h8V9$3!XydGw^+$Ot93-(D%ef|B1%lm#lE5^+TqCY0;Rw zQWPX_-;ZdF=~C)WkfNj2!odu_2l8H+Yn06H1guWJf)xhxn|C(HpN3tbejV^r9Yajd z)9aU7(O*0vyWTVS74ZxCeuhi9J+tYrZt~?F9pyb4I(;W4FCKkLSs^IADTgmsq7#+g z$$%(HqYX5LtxzaRqPm~OSu2e`0q?=v^-Uwjvy%zq6>qf!uXBd=4n;^H|8c|psXodB z6kng?lF5zZszRNNA1(5LS9X1-3bQj30EtLMZr?ar*uX(0Jr>$>e$Oe^r z_l_6j58nG*1K2m9ulxi!Z=3I)evOZ^6KS`(g+r`QS8O|K7zs&lOI}II$^mHm!9!rv zY_px^zw?l*V!v>GD4C>?8zkDGdC=k($qT3x^ZPs6&}YVZv7cSYz#+;~^~7#{su>k1 zwR-;Ed;|?`I_Jocou}FS3(Hmk8a4X!v)`Yqa-G_JY^Qq3WmN|sV0Gg5?%MKl&Q&M- zwqQ2JKXCmsAH_s?eoZbAEL=d_ly{~fiOEy@;o!SlIMQzFycm8F5L}+CVKJ-3m8Q8S z))E{NT-Wy*e>R->h)e())8hhr+B_DNq(5B@?t^1h%;}|tx!RJd6qU7x*cI(-}VC%IP;?E3{vp z5TV1z-loB+%fFCy#W~>TKn>%)chQX})+ZS!348kU$FF)6&HtlY-rdPeVRtqxVwMWM z{KR%lnB!Yyj_iWT&xz#`8*CY`f-)=}KkzK>tdtGRU#AOf+#>5AM3Kj=ZmDg<4^Rif zIG4yL07n0Ty-wJZj5Zmgbs!FU^7zbKn)zIQh6M;0D(3JkjDZ#CD{$9VqaX9Dqc3>6 zv0@<|@pqiSNKT3C=?hNp(*{z|x!7?TsCF6U41CgQBbDdB*R$NS92kmv&Mjvhhw zQbMb+S7T&9*Zoke8CQCyo z`_uVYbZ4K>poAo751nCn4knl%Sg!6xaiD%JoCFa5Fg9h;G#BxwcUMu(I5;Om z*mKwGx}Z+Qul;gBUqBCN|KBb)H}=*lS4WB!iILs`upqKgYw0@cZ_?{i?KRm!%Q=vx zHy7J+O;*)jU})V!7mx9qosSyI1^(6Q~*whlU(V?%2B4in}Qd*lqLF9qr?jZ(Wdp z6hp6M)-UF~j~cuUR)>!3Wd1Uoy_ragRXQy6ROPkx-NlKq-EYxq@pscQmv#`#C z^DZ$+zYe*>zpvN5JVsNmYo4@F`lZ+j09jyx1fMxCn^~3g3x;LO6x`qE|kw|scglx zYQ9gM;>J!X`yDz+b)L7EQaC3PkIW_c)K(5c||C8a%TqU#~s z@4WUJzLelJ9{pd`fQZc=Ish(>vuOUD+pa8CaS)qR42Bj2U7ys8@ z7bh0&3^&IX6~8!AaKqt+Z5$0Lou&C|xh3dOtd3pTlAcd?9OJ?sOaTg{`RPP_6z6nD$(8oI^>a z)Uuyzb7ZvG9QcNTKM44YOFj#;d-SGAQD@E392(e5z#-}Jk41on2vG|vZtc=sfUPF* zlgiv0LAE)!L$5~r-b~cO@1^75KX-A;-BwF?!PSJtq%&*bxWCf4L=u!Kla2x*Se8pXuh^ixws5K$@?x?PB0NA9h^&>N_f0`VSobwSrY#^l%S$z zJR|FJVY(_D{;JDWQOdKG-3#-_w^C$;eICj;IQt^B4dxw2P;p7{oq_}s8&@VV^EJFH zQ3Y?xDH}O4c&+pP#pi$UrndE=yk}{%jmhT661?~wK8SM-y4*@Ex)tKbSFTOb34CQJ9?EFu jIPl}gy!SsBOk~Rnl#r0(SNL`D4O}Jp*Dv#)zy0_>gl8@m literal 0 HcmV?d00001 diff --git a/public/images/events/spr25event-fr.png b/public/images/events/spr25event-fr.png new file mode 100644 index 0000000000000000000000000000000000000000..e7089eee4a1f32547f8364089468072177ad361d GIT binary patch literal 30245 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%0A_7<6+LYHK^ZO>u*>qYX&8if&Xuv15!=L8LdrVT2 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 literal 0 HcmV?d00001 diff --git a/public/images/events/spr25event-pt-BR.png b/public/images/events/spr25event-pt-BR.png new file mode 100644 index 0000000000000000000000000000000000000000..ae195fecc97efa99c2d0a2e90847800ac5c32c99 GIT binary patch literal 30642 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 literal 0 HcmV?d00001 diff --git a/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts b/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts index bfba553af5d..bab0c44db7d 100644 --- a/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts @@ -106,7 +106,7 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter = MysteryEncounterBui * If an event with more than 1 valid event encounter species is active, you have 20% chance to get one of those * If the rolled species has no HA, and there are valid event encounters, you will get one of those * If the rolled species has no HA and there are no valid event encounters, you will get Shiny Magikarp - * Mons rolled from the event encounter pool get 2 extra shiny rolls + * Mons rolled from the event encounter pool get 3 extra shiny rolls */ if ( r === 0 || @@ -120,12 +120,13 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter = MysteryEncounterBui (validEventEncounters.length > 0 && (r <= EVENT_THRESHOLD || (isNullOrUndefined(species.abilityHidden) || species.abilityHidden === Abilities.NONE))) ) { - // If you roll 20%, give event encounter with 2 extra shiny rolls and its HA, if it has one + // If you roll 20%, give event encounter with 3 extra shiny rolls and its HA, if it has one const enc = randSeedItem(validEventEncounters); species = getPokemonSpecies(enc.species); pokemon = new PlayerPokemon(species, 5, species.abilityHidden === Abilities.NONE ? undefined : 2, enc.formIndex); pokemon.trySetShinySeed(); pokemon.trySetShinySeed(); + pokemon.trySetShinySeed(); } else { pokemon = new PlayerPokemon(species, 5, 2, species.formIndex); } diff --git a/src/timed-event-manager.ts b/src/timed-event-manager.ts index 8f5a9c75428..3f5e0393ff7 100644 --- a/src/timed-event-manager.ts +++ b/src/timed-event-manager.ts @@ -310,6 +310,48 @@ const timedEvents: TimedEvent[] = [ }, ], }, + { + name: "Shining Spring", + eventType: EventType.SHINY, + startDate: new Date(Date.UTC(2025, 4, 2)), + endDate: new Date(Date.UTC(2025, 4, 12)), + bannerKey: "spr25event", + scale: 0.21, + availableLangs: ["en", "de", "it", "fr", "ja", "ko", "es-ES", "es-MX", "pt-BR", "zh-CN"], + shinyMultiplier: 2, + upgradeUnlockedVouchers: true, + eventEncounters: [ + { species: Species.HOPPIP }, + { species: Species.CELEBI }, + { species: Species.VOLBEAT }, + { species: Species.ILLUMISE }, + { species: Species.SPOINK }, + { species: Species.LILEEP }, + { species: Species.SHINX }, + { species: Species.PACHIRISU }, + { species: Species.CHERUBI }, + { species: Species.MUNCHLAX }, + { species: Species.TEPIG }, + { species: Species.PANSAGE }, + { species: Species.PANSEAR }, + { species: Species.PANPOUR }, + { species: Species.DARUMAKA }, + { species: Species.ARCHEN }, + { species: Species.DEERLING, formIndex: 0 }, // Spring Deerling + { species: Species.CLAUNCHER }, + { species: Species.WISHIWASHI }, + { species: Species.MUDBRAY }, + { species: Species.DRAMPA }, + { species: Species.JANGMO_O }, + { species: Species.APPLIN }, + ], + classicWaveRewards: [ + { wave: 8, type: "SHINY_CHARM" }, + { wave: 8, type: "ABILITY_CHARM" }, + { wave: 8, type: "CATCHING_CHARM" }, + { wave: 25, type: "SHINY_CHARM" }, + ], + } ]; export class TimedEventManager { From 6d90649b925c2c1537815ba797dd783e3fdb2135 Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Fri, 2 May 2025 01:06:07 -0400 Subject: [PATCH 091/262] [Refactor/Bug/Ability] Reworked BattleData, fixed Rage Fist, Harvest, Belch + Implemented Cud Chew (#5655) * Grabbed reverted changes from stuff * Added version migrator for rage fist data + deepMergeSpriteData tests * fixed formattign * Fied a few * Fixed constructor (maybe), moved deepCopy and deepMergeSpriteData to own file `common.ts` is hella bloated so seems legit * Moved empty moveset verification mapping thing to upgrade script bc i wanted to * Fixed tests * test added * Fixed summondata being cleared inside summonPhase, removed `summonDataPrimer` like seriously how come no-one checked this * Fixed test I forgot that we outsped and oneshot * Fixed test * huhjjjjjb * Hopefully fixed bug my sanity and homework are paying the price for this lol * added commented out console.log statement uncomment to see new berry data * Fixed migrate script, re-added deprecated attributes out of necessity * Fixed failing test by not trying to mock rng * Fixed test * Fixed tests * Update ability.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update ability.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update overrides.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update berry-phase.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update encounter-phase.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update game-data.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update move-phase.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Added utility function `randSeedFloat` basically just `Phaser.math.RND.realInRange(0, 1)` * Applied review comments, cleaned up code a bit * Removed unnecessary null checks for turnData and co. I explicitly made them initialized by default for this very reason * Added tests for Last Resort regarding moveHistory * Update pokemon.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update pokemon.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update pokemon.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update pokemon.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update pokemon.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update pokemon.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update pokemon.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update pokemon.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update battle-scene.ts Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> * Update the-winstrate-challenge-encounter.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update pokemon.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update pokemon.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update pokemon.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update ability.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update move.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update move.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update move.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update battle-anims.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update pokemon.ts comments * Fixed a few outstanding issues with documentation * Updated switch summon phase comment * Re-added BattleSummonData as TempSummonData * Hppefully fixed -1 sprite scale glitch * Fixed comment * Reveted `pokemon-forms.ts` * Fuxed constructor * fixed -1 bug * Revert "Added utility function `randSeedFloat`" This reverts commit 4c3447c851731c989fc591feea0094b6bbde7fd2. --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> --- src/battle-scene.ts | 25 +- src/data/abilities/ab-attrs/ab-attr.ts | 4 + src/data/abilities/ability.ts | 251 ++++-- src/data/arena-tag.ts | 72 +- src/data/battle-anims.ts | 1 - src/data/battler-tags.ts | 72 +- src/data/berry.ts | 177 ++-- src/data/challenge.ts | 3 +- src/data/custom-pokemon-data.ts | 37 +- src/data/moves/move.ts | 242 +++-- .../encounters/clowning-around-encounter.ts | 3 - .../global-trade-system-encounter.ts | 4 +- .../the-winstrate-challenge-encounter.ts | 3 +- .../encounters/weird-dream-encounter.ts | 4 - .../utils/encounter-phase-utils.ts | 12 +- .../utils/encounter-pokemon-utils.ts | 3 - .../encounter-transformation-sequence.ts | 4 +- src/data/pokemon-species.ts | 20 +- src/enums/biome.ts | 1 + src/field/pokemon.ts | 837 ++++++++++-------- src/inputs-controller.ts | 3 +- src/modifier/modifier-type.ts | 1 + src/modifier/modifier.ts | 47 +- src/overrides.ts | 10 +- src/phases/battle-end-phase.ts | 4 +- src/phases/berry-phase.ts | 91 +- src/phases/encounter-phase.ts | 20 +- src/phases/evolution-phase.ts | 4 +- src/phases/faint-phase.ts | 4 +- src/phases/field-phase.ts | 3 +- src/phases/form-change-phase.ts | 2 +- src/phases/move-effect-phase.ts | 3 - src/phases/move-phase.ts | 2 +- src/phases/mystery-encounter-phases.ts | 3 +- src/phases/new-biome-encounter-phase.ts | 12 +- src/phases/next-encounter-phase.ts | 9 +- src/phases/quiet-form-change-phase.ts | 2 +- src/phases/show-ability-phase.ts | 4 +- src/phases/stat-stage-change-phase.ts | 8 - src/phases/summon-phase.ts | 10 +- src/phases/switch-summon-phase.ts | 122 +-- src/phases/turn-end-phase.ts | 5 +- src/phases/turn-start-phase.ts | 23 +- src/system/game-data.ts | 112 +-- src/system/pokemon-data.ts | 180 ++-- .../version_migration/version_converter.ts | 5 + .../version_migration/versions/v1_9_0.ts | 47 + src/ui/battle-info.ts | 4 +- src/ui/fight-ui-handler.ts | 6 +- src/ui/party-ui-handler.ts | 2 +- src/ui/registration-form-ui-handler.ts | 4 +- src/ui/summary-ui-handler.ts | 8 +- src/ui/target-select-ui-handler.ts | 2 +- src/utils/common.ts | 39 +- src/utils/data.ts | 40 + test/abilities/cud_chew.test.ts | 322 +++++++ test/abilities/good_as_gold.test.ts | 2 +- test/abilities/harvest.test.ts | 346 ++++++++ test/abilities/illusion.test.ts | 12 +- test/abilities/infiltrator.test.ts | 8 +- test/abilities/libero.test.ts | 16 +- test/abilities/protean.test.ts | 16 +- test/abilities/quick_draw.test.ts | 6 +- test/abilities/wimp_out.test.ts | 2 +- test/battle/inverse_battle.test.ts | 4 +- test/battlerTags/substitute.test.ts | 1 - test/moves/dive.test.ts | 2 +- test/moves/fake_out.test.ts | 67 +- test/moves/instruct.test.ts | 6 +- test/moves/last-resort.test.ts | 166 ++++ test/moves/powder.test.ts | 2 +- test/moves/rage_fist.test.ts | 135 ++- test/moves/toxic_spikes.test.ts | 2 +- test/moves/transform.test.ts | 24 +- test/moves/u_turn.test.ts | 4 +- test/settingMenu/rebinding_setting.test.ts | 2 +- test/testUtils/gameManager.ts | 3 +- test/testUtils/helpers/moveHelper.ts | 11 + test/testUtils/helpers/overridesHelper.ts | 15 + test/testUtils/helpers/reloadHelper.ts | 12 +- test/utils.test.ts | 31 + 81 files changed, 2541 insertions(+), 1292 deletions(-) create mode 100644 src/system/version_migration/versions/v1_9_0.ts create mode 100644 src/utils/data.ts create mode 100644 test/abilities/cud_chew.test.ts create mode 100644 test/abilities/harvest.test.ts create mode 100644 test/moves/last-resort.test.ts diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 8fe6c85263d..db036847994 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -7,7 +7,6 @@ import type PokemonSpecies from "#app/data/pokemon-species"; import { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species"; import { fixedInt, - deepMergeObjects, getIvsFromId, randSeedInt, getEnumValues, @@ -19,6 +18,7 @@ import { BooleanHolder, type Constructor, } from "#app/utils/common"; +import { deepMergeSpriteData } from "#app/utils/data"; import type { Modifier, ModifierPredicate, TurnHeldItemTransferModifier } from "./modifier/modifier"; import { ConsumableModifier, @@ -787,7 +787,7 @@ export default class BattleScene extends SceneBase { return; } const expVariantData = await this.cachedFetch("./images/pokemon/variant/_exp_masterlist.json").then(r => r.json()); - deepMergeObjects(variantData, expVariantData); + deepMergeSpriteData(variantData, expVariantData); } cachedFetch(url: string, init?: RequestInit): Promise { @@ -835,6 +835,7 @@ export default class BattleScene extends SceneBase { return this.getPlayerField().find(p => p.isActive() && (includeSwitching || p.switchOutStatus === false)); } + // TODO: Add `undefined` to return type /** * Returns an array of PlayerPokemon of length 1 or 2 depending on if in a double battle or not. * Does not actually check if the pokemon are on the field or not. @@ -850,9 +851,9 @@ export default class BattleScene extends SceneBase { } /** - * @returns The first {@linkcode EnemyPokemon} that is {@linkcode getEnemyField on the field} - * and {@linkcode EnemyPokemon.isActive is active} - * (aka {@linkcode EnemyPokemon.isAllowedInBattle is allowed in battle}), + * @returns The first {@linkcode EnemyPokemon} that is {@linkcode getEnemyField | on the field} + * and {@linkcode EnemyPokemon.isActive | is active} + * (aka {@linkcode EnemyPokemon.isAllowedInBattle | is allowed in battle}), * or `undefined` if there are no valid pokemon * @param includeSwitching Whether a pokemon that is currently switching out is valid, default `true` */ @@ -873,8 +874,8 @@ export default class BattleScene extends SceneBase { /** * Returns an array of Pokemon on both sides of the battle - player first, then enemy. * Does not actually check if the pokemon are on the field or not, and always has length 4 regardless of battle type. - * @param activeOnly Whether to consider only active pokemon - * @returns array of {@linkcode Pokemon} + * @param activeOnly - Whether to consider only active pokemon; default `false` + * @returns An array of {@linkcode Pokemon}, as described above. */ public getField(activeOnly = false): Pokemon[] { const ret = new Array(4).fill(null); @@ -1307,14 +1308,13 @@ export default class BattleScene extends SceneBase { return isNewBiome; } - // TODO: ...this never actually returns `null`, right? newBattle( waveIndex?: number, battleType?: BattleType, trainerData?: TrainerData, double?: boolean, mysteryEncounterType?: MysteryEncounterType, - ): Battle | null { + ): Battle { const _startingWave = Overrides.STARTING_WAVE_OVERRIDE || startingWave; const newWaveIndex = waveIndex || (this.currentBattle?.waveIndex || _startingWave - 1) + 1; let newDouble: boolean | undefined; @@ -1496,7 +1496,7 @@ export default class BattleScene extends SceneBase { }); for (const pokemon of this.getPlayerParty()) { - pokemon.resetBattleData(); + pokemon.resetBattleAndWaveData(); pokemon.resetTera(); applyPostBattleInitAbAttrs(PostBattleInitAbAttr, pokemon); if ( @@ -3264,6 +3264,7 @@ export default class BattleScene extends SceneBase { [this.modifierBar, this.enemyModifierBar].map(m => m.setVisible(visible)); } + // TODO: Document this updateModifiers(player = true, instant?: boolean): void { const modifiers = player ? this.modifiers : (this.enemyModifiers as PersistentModifier[]); for (let m = 0; m < modifiers.length; m++) { @@ -3316,8 +3317,8 @@ export default class BattleScene extends SceneBase { * gets removed. This function does NOT apply in-battle effects, such as Unburden. * If in-battle effects are needed, use {@linkcode Pokemon.loseHeldItem} instead. * @param modifier The item to be removed. - * @param enemy If `true`, remove an item owned by the enemy. If `false`, remove an item owned by the player. Default is `false`. - * @returns `true` if the item exists and was successfully removed, `false` otherwise. + * @param enemy `true` to remove an item owned by the enemy rather than the player; default `false`. + * @returns `true` if the item exists and was successfully removed, `false` otherwise */ removeModifier(modifier: PersistentModifier, enemy = false): boolean { const modifiers = !enemy ? this.modifiers : this.enemyModifiers; diff --git a/src/data/abilities/ab-attrs/ab-attr.ts b/src/data/abilities/ab-attrs/ab-attr.ts index a653c3f372d..24fbb6dc338 100644 --- a/src/data/abilities/ab-attrs/ab-attr.ts +++ b/src/data/abilities/ab-attrs/ab-attr.ts @@ -6,6 +6,10 @@ export abstract class AbAttr { public showAbility: boolean; private extraCondition: AbAttrCondition; + /** + * @param showAbility - Whether to show this ability as a flyout during battle; default `true`. + * Should be kept in parity with mainline where possible. + */ constructor(showAbility = true) { this.showAbility = showAbility; } diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 6e3f4c77f87..1cb19e57533 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -60,6 +60,11 @@ import { SwitchType } from "#enums/switch-type"; import { MoveFlags } from "#enums/MoveFlags"; import { MoveTarget } from "#enums/MoveTarget"; import { MoveCategory } from "#enums/MoveCategory"; +import type { BerryType } from "#enums/berry-type"; +import { CommonAnimPhase } from "#app/phases/common-anim-phase"; +import { CommonAnim } from "../battle-anims"; +import { getBerryEffectFunc } from "../berry"; +import { BerryUsedEvent } from "#app/events/battle-scene"; // Type imports @@ -2675,7 +2680,7 @@ export class PostSummonCopyAllyStatsAbAttr extends PostSummonAbAttr { } /** - * Used by Imposter + * Attribute used by {@linkcode Abilities.IMPOSTER} to transform into a random opposing pokemon on entry. */ export class PostSummonTransformAbAttr extends PostSummonAbAttr { constructor() { @@ -2710,7 +2715,7 @@ export class PostSummonTransformAbAttr extends PostSummonAbAttr { const targets = pokemon.getOpponents(); const target = this.getTarget(targets); - if (!!target.summonData?.illusion) { + if (target.summonData.illusion) { return false; } @@ -3292,13 +3297,13 @@ export class ConditionalUserFieldStatusEffectImmunityAbAttr extends UserFieldSta /** * Conditionally provides immunity to stat drop effects to the user's field. - * + * * Used by {@linkcode Abilities.FLOWER_VEIL | Flower Veil}. */ export class ConditionalUserFieldProtectStatAbAttr extends PreStatStageChangeAbAttr { /** {@linkcode BattleStat} to protect or `undefined` if **all** {@linkcode BattleStat} are protected */ protected protectedStat?: BattleStat; - + /** If the method evaluates to true, the stat will be protected. */ protected condition: (target: Pokemon) => boolean; @@ -3315,7 +3320,7 @@ export class ConditionalUserFieldProtectStatAbAttr extends PreStatStageChangeAbA * @param stat The stat being affected * @param cancelled Holds whether the stat change was already prevented. * @param args Args[0] is the target pokemon of the stat change. - * @returns + * @returns */ override canApplyPreStatStageChange(pokemon: Pokemon, passive: boolean, simulated: boolean, stat: BattleStat, cancelled: BooleanHolder, args: [Pokemon, ...any]): boolean { const target = args[0]; @@ -3451,7 +3456,7 @@ export class BonusCritAbAttr extends AbAttr { /** * Apply the bonus crit ability by increasing the value in the provided number holder by 1 - * + * * @param pokemon The pokemon with the BonusCrit ability (unused) * @param passive Unused * @param simulated Unused @@ -3604,7 +3609,7 @@ export class PreWeatherEffectAbAttr extends AbAttr { args: any[]): boolean { return true; } - + applyPreWeatherEffect( pokemon: Pokemon, passive: boolean, @@ -3657,14 +3662,10 @@ export class SuppressWeatherEffectAbAttr extends PreWeatherEffectAbAttr { * Condition function to applied to abilities related to Sheer Force. * Checks if last move used against target was affected by a Sheer Force user and: * Disables: Color Change, Pickpocket, Berserk, Anger Shell - * @returns {AbAttrCondition} If false disables the ability which the condition is applied to. + * @returns An {@linkcode AbAttrCondition} to disable the ability under the proper conditions. */ function getSheerForceHitDisableAbCondition(): AbAttrCondition { return (pokemon: Pokemon) => { - if (!pokemon.turnData) { - return true; - } - const lastReceivedAttack = pokemon.turnData.attacksReceived[0]; if (!lastReceivedAttack) { return true; @@ -3675,7 +3676,7 @@ function getSheerForceHitDisableAbCondition(): AbAttrCondition { return true; } - /**if the last move chance is greater than or equal to cero, and the last attacker's ability is sheer force*/ + /** `true` if the last move's chance is above 0 and the last attacker's ability is sheer force */ const SheerForceAffected = allMoves[lastReceivedAttack.move].chance >= 0 && lastAttacker.hasAbility(Abilities.SHEER_FORCE); return !SheerForceAffected; @@ -3745,7 +3746,7 @@ function getAnticipationCondition(): AbAttrCondition { */ function getOncePerBattleCondition(ability: Abilities): AbAttrCondition { return (pokemon: Pokemon) => { - return !pokemon.battleData?.abilitiesApplied.includes(ability); + return !pokemon.waveData.abilitiesApplied.has(ability); }; } @@ -4034,7 +4035,7 @@ export class PostTurnStatusHealAbAttr extends PostTurnAbAttr { /** * After the turn ends, resets the status of either the ability holder or their ally - * @param {boolean} allyTarget Whether to target ally, defaults to false (self-target) + * @param allyTarget Whether to target ally, defaults to false (self-target) */ export class PostTurnResetStatusAbAttr extends PostTurnAbAttr { private allyTarget: boolean; @@ -4066,79 +4067,153 @@ export class PostTurnResetStatusAbAttr extends PostTurnAbAttr { } /** - * After the turn ends, try to create an extra item + * Attribute to try and restore eaten berries after the turn ends. + * Used by {@linkcode Abilities.HARVEST}. */ -export class PostTurnLootAbAttr extends PostTurnAbAttr { +export class PostTurnRestoreBerryAbAttr extends PostTurnAbAttr { /** - * @param itemType - The type of item to create - * @param procChance - Chance to create an item - * @see {@linkcode applyPostTurn()} + * Array containing all {@linkcode BerryType | BerryTypes} that are under cap and able to be restored. + * Stored inside the class for a minor performance boost + */ + private berriesUnderCap: BerryType[] + + /** + * @param procChance - function providing chance to restore an item + * @see {@linkcode createEatenBerry()} */ constructor( - /** Extend itemType to add more options */ - private itemType: "EATEN_BERRIES" | "HELD_BERRIES", private procChance: (pokemon: Pokemon) => number ) { super(); } - override canApplyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - // Clamp procChance to [0, 1]. Skip if didn't proc (less than pass) - const pass = Phaser.Math.RND.realInRange(0, 1); - return !(Math.max(Math.min(this.procChance(pokemon), 1), 0) < pass) && this.itemType === "EATEN_BERRIES" && !!pokemon.battleData.berriesEaten; - } + override canApplyPostTurn(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { + // Ensure we have at least 1 recoverable berry (at least 1 berry in berriesEaten is not capped) + const cappedBerries = new Set( + globalScene.getModifiers(BerryModifier, pokemon.isPlayer()).filter( + bm => bm.pokemonId === pokemon.id && bm.getCountUnderMax() < 1 + ).map(bm => bm.berryType) + ); - override applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { - this.createEatenBerry(pokemon, simulated); - } + this.berriesUnderCap = pokemon.battleData.berriesEaten.filter( + bt => !cappedBerries.has(bt) + ); - /** - * Create a new berry chosen randomly from the berries the pokemon ate this battle - * @param pokemon The pokemon with this ability - * @param simulated whether the associated ability call is simulated - * @returns whether a new berry was created - */ - createEatenBerry(pokemon: Pokemon, simulated: boolean): boolean { - const berriesEaten = pokemon.battleData.berriesEaten; - - if (!berriesEaten.length) { + if (!this.berriesUnderCap.length) { return false; } - if (simulated) { - return true; + // Clamp procChance to [0, 1]. Skip if didn't proc (less than pass) + const pass = Phaser.Math.RND.realInRange(0, 1); + return Phaser.Math.Clamp(this.procChance(pokemon), 0, 1) >= pass; + } + + override applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + if (!simulated) { + this.createEatenBerry(pokemon); } + } - const randomIdx = randSeedInt(berriesEaten.length); - const chosenBerryType = berriesEaten[randomIdx]; + /** + * Create a new berry chosen randomly from all berries the pokemon ate this battle + * @param pokemon - The {@linkcode Pokemon} with this ability + * @returns `true` if a new berry was created + */ + createEatenBerry(pokemon: Pokemon): boolean { + // Pick a random available berry to yoink + const randomIdx = randSeedInt(this.berriesUnderCap.length); + const chosenBerryType = this.berriesUnderCap[randomIdx]; + pokemon.battleData.berriesEaten.splice(randomIdx, 1); // Remove berry from memory const chosenBerry = new BerryModifierType(chosenBerryType); - berriesEaten.splice(randomIdx); // Remove berry from memory + // Add the randomly chosen berry or update the existing one const berryModifier = globalScene.findModifier( - (m) => m instanceof BerryModifier && m.berryType === chosenBerryType, + (m) => m instanceof BerryModifier && m.berryType === chosenBerryType && m.pokemonId == pokemon.id, pokemon.isPlayer() ) as BerryModifier | undefined; - if (!berryModifier) { + if (berryModifier) { + berryModifier.stackCount++ + } else { const newBerry = new BerryModifier(chosenBerry, pokemon.id, chosenBerryType, 1); if (pokemon.isPlayer()) { globalScene.addModifier(newBerry); } else { globalScene.addEnemyModifier(newBerry); } - } else if (berryModifier.stackCount < berryModifier.getMaxHeldItemCount(pokemon)) { - berryModifier.stackCount++; } - globalScene.queueMessage(i18next.t("abilityTriggers:postTurnLootCreateEatenBerry", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), berryName: chosenBerry.name })); globalScene.updateModifiers(pokemon.isPlayer()); - + globalScene.queueMessage(i18next.t("abilityTriggers:postTurnLootCreateEatenBerry", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), berryName: chosenBerry.name })); return true; } } /** - * Attribute used for {@linkcode Abilities.MOODY} + * Attribute to track and re-trigger last turn's berries at the end of the `BerryPhase`. + * Used by {@linkcode Abilities.CUD_CHEW}. +*/ +export class RepeatBerryNextTurnAbAttr extends PostTurnAbAttr { + /** + * @returns `true` if the pokemon ate anything last turn + */ + override canApply(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { + // force ability popup for ability triggers on normal turns. + // Still not used if ability doesn't proc + this.showAbility = true; + return !!pokemon.summonData.berriesEatenLast.length; + } + + /** + * Cause this {@linkcode Pokemon} to regurgitate and eat all berries inside its `berriesEatenLast` array. + * Triggers a berry use animation, but does *not* count for other berry or item-related abilities. + * @param pokemon - The {@linkcode Pokemon} having a bad tummy ache + * @param _passive - N/A + * @param _simulated - N/A + * @param _cancelled - N/A + * @param _args - N/A + */ + override apply(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _cancelled: BooleanHolder | null, _args: any[]): void { + globalScene.unshiftPhase( + new CommonAnimPhase(pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.USE_ITEM), + ); + + // Re-apply effects of all berries previously scarfed. + // This doesn't count as "eating" a berry (for unnerve/stuff cheeks/unburden) as no item is consumed. + for (const berryType of pokemon.summonData.berriesEatenLast) { + getBerryEffectFunc(berryType)(pokemon); + const bMod = new BerryModifier(new BerryModifierType(berryType), pokemon.id, berryType, 1); + globalScene.eventTarget.dispatchEvent(new BerryUsedEvent(bMod)); // trigger message + } + + // uncomment to make cheek pouch work with cud chew + // applyAbAttrs(HealFromBerryUseAbAttr, pokemon, new BooleanHolder(false)); + } + + /** + * @returns always `true` as we always want to move berries into summon data + */ + override canApplyPostTurn(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { + this.showAbility = false; // don't show popup for turn end berry moving (should ideally be hidden) + return true; + } + + /** + * Move this {@linkcode Pokemon}'s `berriesEaten` array from `PokemonTurnData` + * into `PokemonSummonData` on turn end. + * Both arrays are cleared on switch. + * @param pokemon - The {@linkcode Pokemon} having a nice snack + * @param _passive - N/A + * @param _simulated - N/A + * @param _args - N/A + */ + override applyPostTurn(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): void { + pokemon.summonData.berriesEatenLast = pokemon.turnData.berriesEaten; + } +} + +/** + * Attribute used for {@linkcode Abilities.MOODY} to randomly raise and lower stats at turn end. */ export class MoodyAbAttr extends PostTurnAbAttr { constructor() { @@ -4232,7 +4307,7 @@ export class PostTurnHurtIfSleepingAbAttr extends PostTurnAbAttr { } /** * Deals damage to all sleeping opponents equal to 1/8 of their max hp (min 1) - * @param pokemon Pokemon that has this ability + * @param pokemon {@linkcode Pokemon} with this ability * @param passive N/A * @param simulated `true` if applying in a simulated call. * @param args N/A @@ -4414,7 +4489,7 @@ export class PostItemLostAbAttr extends AbAttr { } /** - * Applies a Battler Tag to the Pokemon after it loses or consumes item + * Applies a Battler Tag to the Pokemon after it loses or consumes an item * @extends PostItemLostAbAttr */ export class PostItemLostApplyBattlerTagAbAttr extends PostItemLostAbAttr { @@ -4503,8 +4578,19 @@ export class DoubleBerryEffectAbAttr extends AbAttr { } } +/** + * Attribute to prevent opposing berry use while on the field. + * Used by {@linkcode Abilities.UNNERVE}, {@linkcode Abilities.AS_ONE_GLASTRIER} and {@linkcode Abilities.AS_ONE_SPECTRIER} + */ export class PreventBerryUseAbAttr extends AbAttr { - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + /** + * Prevent use of opposing berries. + * @param _pokemon - Unused + * @param _passive - Unused + * @param _simulated - Unused + * @param cancelled - {@linkcode BooleanHolder} containing whether to block berry use + */ + override apply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, cancelled: BooleanHolder): void { cancelled.value = true; } } @@ -4526,17 +4612,19 @@ export class HealFromBerryUseAbAttr extends AbAttr { } override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, ...args: [BooleanHolder, any[]]): void { + if (simulated) { + return; + } + const { name: abilityName } = passive ? pokemon.getPassiveAbility() : pokemon.getAbility(); - if (!simulated) { - globalScene.unshiftPhase( - new PokemonHealPhase( - pokemon.getBattlerIndex(), - toDmgValue(pokemon.getMaxHp() * this.healPercent), - i18next.t("abilityTriggers:healFromBerryUse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }), - true + globalScene.unshiftPhase( + new PokemonHealPhase( + pokemon.getBattlerIndex(), + toDmgValue(pokemon.getMaxHp() * this.healPercent), + i18next.t("abilityTriggers:healFromBerryUse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }), + true ) ); - } } } @@ -4568,7 +4656,8 @@ export class CheckTrappedAbAttr extends AbAttr { simulated: boolean, trapped: BooleanHolder, otherPokemon: Pokemon, - args: any[]): boolean { + args: any[], + ): boolean { return true; } @@ -5091,7 +5180,7 @@ export class PostSummonStatStageChangeOnArenaAbAttr extends PostSummonStatStageC /** * Takes no damage from the first hit of a damaging move. * This is used in the Disguise and Ice Face abilities. - * + * * Does not apply to a user's substitute * @extends ReceivedMoveDamageMultiplierAbAttr */ @@ -5176,15 +5265,14 @@ export class IllusionPreSummonAbAttr extends PreSummonAbAttr { } override canApplyPreSummon(pokemon: Pokemon, passive: boolean, args: any[]): boolean { - pokemon.initSummondata() - if(pokemon.hasTrainer()){ + if (pokemon.hasTrainer()) { const party: Pokemon[] = (pokemon.isPlayer() ? globalScene.getPlayerParty() : globalScene.getEnemyParty()).filter(p => p.isAllowedInBattle()); const lastPokemon: Pokemon = party.filter(p => p !==pokemon).at(-1) || pokemon; const speciesId = lastPokemon.species.speciesId; // If the last conscious Pokémon in the party is a Terastallized Ogerpon or Terapagos, Illusion will not activate. // Illusion will also not activate if the Pokémon with Illusion is Terastallized and the last Pokémon in the party is Ogerpon or Terapagos. - if ( + if ( lastPokemon === pokemon || ((speciesId === Species.OGERPON || speciesId === Species.TERAPAGOS) && (lastPokemon.isTerastallized || pokemon.isTerastallized)) ) { @@ -5221,7 +5309,7 @@ export class PostDefendIllusionBreakAbAttr extends PostDefendAbAttr { override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { const breakIllusion: HitResult[] = [ HitResult.EFFECTIVE, HitResult.SUPER_EFFECTIVE, HitResult.NOT_VERY_EFFECTIVE, HitResult.ONE_HIT_KO ]; - return breakIllusion.includes(hitResult) && !!pokemon.summonData?.illusion + return breakIllusion.includes(hitResult) && !!pokemon.summonData.illusion } } @@ -5442,11 +5530,8 @@ function applySingleAbAttrs( globalScene.queueAbilityDisplay(pokemon, passive, false); } - if (pokemon.summonData && !pokemon.summonData.abilitiesApplied.includes(ability.id)) { - pokemon.summonData.abilitiesApplied.push(ability.id); - } - if (pokemon.battleData && !simulated && !pokemon.battleData.abilitiesApplied.includes(ability.id)) { - pokemon.battleData.abilitiesApplied.push(ability.id); + if (!simulated) { + pokemon.waveData.abilitiesApplied.add(ability.id); } globalScene.clearPhaseQueueSplice(); @@ -5637,6 +5722,7 @@ export class PostDamageForceSwitchAbAttr extends PostDamageAbAttr { this.hpRatio = hpRatio; } + // TODO: Refactor to use more early returns public override canApplyPostDamage( pokemon: Pokemon, damage: number, @@ -5664,6 +5750,7 @@ export class PostDamageForceSwitchAbAttr extends PostDamageAbAttr { if (fordbiddenDefendingMoves.includes(enemyLastMoveUsed.move) || enemyLastMoveUsed.move === Moves.SKY_DROP && enemyLastMoveUsed.result === MoveResult.OTHER) { return false; // Will not activate if the Pokémon's HP falls below half by a move affected by Sheer Force. + // TODO: Make this use the sheer force disable condition } else if (allMoves[enemyLastMoveUsed.move].chance >= 0 && source.hasAbility(Abilities.SHEER_FORCE)) { return false; // Activate only after the last hit of multistrike moves @@ -6326,17 +6413,14 @@ export function applyOnLoseAbAttrs(pokemon: Pokemon, passive = false, simulated /** * Sets the ability of a Pokémon as revealed. - * * @param pokemon - The Pokémon whose ability is being revealed. */ function setAbilityRevealed(pokemon: Pokemon): void { - if (pokemon.battleData) { - pokemon.battleData.abilityRevealed = true; - } + pokemon.waveData.abilityRevealed = true; } /** - * Returns the Pokemon with weather-based forms + * Returns all Pokemon on field with weather-based forms */ function getPokemonWithWeatherBasedForms() { return globalScene.getField(true).filter(p => @@ -6784,8 +6868,7 @@ export function initAbilities() { .attr(MovePowerBoostAbAttr, (user, target, move) => move.category === MoveCategory.SPECIAL && user?.status?.effect === StatusEffect.BURN, 1.5), new Ability(Abilities.HARVEST, 5) .attr( - PostTurnLootAbAttr, - "EATEN_BERRIES", + PostTurnRestoreBerryAbAttr, /** Rate is doubled when under sun {@link https://dex.pokemonshowdown.com/abilities/harvest} */ (pokemon) => 0.5 * (getWeatherCondition(WeatherType.SUNNY, WeatherType.HARSH_SUN)(pokemon) ? 2 : 1) ) @@ -6907,7 +6990,7 @@ export function initAbilities() { .attr(HealFromBerryUseAbAttr, 1 / 3), new Ability(Abilities.PROTEAN, 6) .attr(PokemonTypeChangeAbAttr), - //.condition((p) => !p.summonData?.abilitiesApplied.includes(Abilities.PROTEAN)), //Gen 9 Implementation + //.condition((p) => !p.summonData.abilitiesApplied.includes(Abilities.PROTEAN)), //Gen 9 Implementation new Ability(Abilities.FUR_COAT, 6) .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => move.category === MoveCategory.PHYSICAL, 0.5) .ignorable(), @@ -7153,7 +7236,7 @@ export function initAbilities() { .attr(PostSummonStatStageChangeAbAttr, [ Stat.DEF ], 1, true), new Ability(Abilities.LIBERO, 8) .attr(PokemonTypeChangeAbAttr), - //.condition((p) => !p.summonData?.abilitiesApplied.includes(Abilities.LIBERO)), //Gen 9 Implementation + //.condition((p) => !p.summonData.abilitiesApplied.includes(Abilities.LIBERO)), //Gen 9 Implementation new Ability(Abilities.BALL_FETCH, 8) .attr(FetchBallAbAttr) .condition(getOncePerBattleCondition(Abilities.BALL_FETCH)), @@ -7368,7 +7451,7 @@ export function initAbilities() { new Ability(Abilities.OPPORTUNIST, 9) .attr(StatStageChangeCopyAbAttr), new Ability(Abilities.CUD_CHEW, 9) - .unimplemented(), + .attr(RepeatBerryNextTurnAbAttr), new Ability(Abilities.SHARPNESS, 9) .attr(MovePowerBoostAbAttr, (user, target, move) => move.hasFlag(MoveFlags.SLICING_MOVE), 1.5), new Ability(Abilities.SUPREME_OVERLORD, 9) diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index ff9e4068292..19c94a8a045 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -768,32 +768,27 @@ class SpikesTag extends ArenaTrapTag { } override activateTrap(pokemon: Pokemon, simulated: boolean): boolean { - if (pokemon.isGrounded()) { - const cancelled = new BooleanHolder(false); - applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); - - if (simulated) { - return !cancelled.value; - } - - if (!cancelled.value) { - const damageHpRatio = 1 / (10 - 2 * this.layers); - const damage = toDmgValue(pokemon.getMaxHp() * damageHpRatio); - - globalScene.queueMessage( - i18next.t("arenaTag:spikesActivateTrap", { - pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - }), - ); - pokemon.damageAndUpdate(damage, { result: HitResult.INDIRECT }); - if (pokemon.turnData) { - pokemon.turnData.damageTaken += damage; - } - return true; - } + if (!pokemon.isGrounded()) { + return false; } - return false; + const cancelled = new BooleanHolder(false); + applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); + if (simulated || cancelled.value) { + return !cancelled.value; + } + + const damageHpRatio = 1 / (10 - 2 * this.layers); + const damage = toDmgValue(pokemon.getMaxHp() * damageHpRatio); + + globalScene.queueMessage( + i18next.t("arenaTag:spikesActivateTrap", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + }), + ); + pokemon.damageAndUpdate(damage, { result: HitResult.INDIRECT }); + pokemon.turnData.damageTaken += damage; + return true; } } @@ -962,31 +957,28 @@ class StealthRockTag extends ArenaTrapTag { override activateTrap(pokemon: Pokemon, simulated: boolean): boolean { const cancelled = new BooleanHolder(false); applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); - if (cancelled.value) { return false; } const damageHpRatio = this.getDamageHpRatio(pokemon); + if (!damageHpRatio) { + return false; + } - if (damageHpRatio) { - if (simulated) { - return true; - } - const damage = toDmgValue(pokemon.getMaxHp() * damageHpRatio); - globalScene.queueMessage( - i18next.t("arenaTag:stealthRockActivateTrap", { - pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - }), - ); - pokemon.damageAndUpdate(damage, { result: HitResult.INDIRECT }); - if (pokemon.turnData) { - pokemon.turnData.damageTaken += damage; - } + if (simulated) { return true; } - return false; + const damage = toDmgValue(pokemon.getMaxHp() * damageHpRatio); + globalScene.queueMessage( + i18next.t("arenaTag:stealthRockActivateTrap", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + }), + ); + pokemon.damageAndUpdate(damage, { result: HitResult.INDIRECT }); + pokemon.turnData.damageTaken += damage; + return true; } getMatchupScoreMultiplier(pokemon: Pokemon): number { diff --git a/src/data/battle-anims.ts b/src/data/battle-anims.ts index 0999e9db6ff..454bd40130c 100644 --- a/src/data/battle-anims.ts +++ b/src/data/battle-anims.ts @@ -1132,7 +1132,6 @@ export abstract class BattleAnim { if (priority === 0) { // Place the sprite in front of the pokemon on the field. targetSprite = globalScene.getEnemyField().find(p => p) ?? globalScene.getPlayerField().find(p => p); - console.log(typeof targetSprite); moveFunc = globalScene.field.moveBelow; } else if (priority === 2 && this.bgSprite) { moveFunc = globalScene.field.moveAbove; diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index ee41f0435b9..8a512f3c16c 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -1,4 +1,5 @@ import { globalScene } from "#app/global-scene"; +import Overrides from "#app/overrides"; import { applyAbAttrs, BlockNonDirectDamageAbAttr, @@ -91,7 +92,12 @@ export class BattlerTag { onOverlap(_pokemon: Pokemon): void {} + /** + * Tick down this {@linkcode BattlerTag}'s duration. + * @returns `true` if the tag should be kept (`turnCount` > 0`) + */ lapse(_pokemon: Pokemon, _lapseType: BattlerTagLapseType): boolean { + // TODO: Maybe flip this (return `true` if tag needs removal) return --this.turnCount > 0; } @@ -108,9 +114,9 @@ export class BattlerTag { } /** - * When given a battler tag or json representing one, load the data for it. - * This is meant to be inherited from by any battler tag with custom attributes - * @param {BattlerTag | any} source A battler tag + * Load the data for a given {@linkcode BattlerTag} or JSON representation thereof. + * Should be inherited from by any battler tag with custom attributes. + * @param source The battler tag to load */ loadTag(source: BattlerTag | any): void { this.turnCount = source.turnCount; @@ -120,7 +126,7 @@ export class BattlerTag { /** * Helper function that retrieves the source Pokemon object - * @returns The source {@linkcode Pokemon} or `null` if none is found + * @returns The source {@linkcode Pokemon}, or `null` if none is found */ public getSourcePokemon(): Pokemon | null { return this.sourceId ? globalScene.getPokemonById(this.sourceId) : null; @@ -140,8 +146,8 @@ export interface TerrainBattlerTag { * in-game. This is not to be confused with {@linkcode Moves.DISABLE}. * * Descendants can override {@linkcode isMoveRestricted} to restrict moves that - * match a condition. A restricted move gets cancelled before it is used. Players and enemies should not be allowed - * to select restricted moves. + * match a condition. A restricted move gets cancelled before it is used. + * Players and enemies should not be allowed to select restricted moves. */ export abstract class MoveRestrictionBattlerTag extends BattlerTag { constructor( @@ -746,31 +752,33 @@ export class ConfusedTag extends BattlerTag { } lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { - const ret = lapseType !== BattlerTagLapseType.CUSTOM && super.lapse(pokemon, lapseType); + const shouldLapse = lapseType !== BattlerTagLapseType.CUSTOM && super.lapse(pokemon, lapseType); - if (ret) { - globalScene.queueMessage( - i18next.t("battlerTags:confusedLapse", { - pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - }), - ); - globalScene.unshiftPhase(new CommonAnimPhase(pokemon.getBattlerIndex(), undefined, CommonAnim.CONFUSION)); - - // 1/3 chance of hitting self with a 40 base power move - if (pokemon.randSeedInt(3) === 0) { - const atk = pokemon.getEffectiveStat(Stat.ATK); - const def = pokemon.getEffectiveStat(Stat.DEF); - const damage = toDmgValue( - ((((2 * pokemon.level) / 5 + 2) * 40 * atk) / def / 50 + 2) * (pokemon.randSeedIntRange(85, 100) / 100), - ); - globalScene.queueMessage(i18next.t("battlerTags:confusedLapseHurtItself")); - pokemon.damageAndUpdate(damage, { result: HitResult.CONFUSION }); - pokemon.battleData.hitCount++; - (globalScene.getCurrentPhase() as MovePhase).cancel(); - } + if (!shouldLapse) { + return false; } - return ret; + globalScene.queueMessage( + i18next.t("battlerTags:confusedLapse", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + }), + ); + globalScene.unshiftPhase(new CommonAnimPhase(pokemon.getBattlerIndex(), undefined, CommonAnim.CONFUSION)); + + // 1/3 chance of hitting self with a 40 base power move + if (pokemon.randSeedInt(3) === 0 || Overrides.CONFUSION_ACTIVATION_OVERRIDE === true) { + const atk = pokemon.getEffectiveStat(Stat.ATK); + const def = pokemon.getEffectiveStat(Stat.DEF); + const damage = toDmgValue( + ((((2 * pokemon.level) / 5 + 2) * 40 * atk) / def / 50 + 2) * (pokemon.randSeedIntRange(85, 100) / 100), + ); + // Intentionally don't increment rage fist's hitCount + globalScene.queueMessage(i18next.t("battlerTags:confusedLapseHurtItself")); + pokemon.damageAndUpdate(damage, { result: HitResult.CONFUSION }); + (globalScene.getCurrentPhase() as MovePhase).cancel(); + } + + return true; } getDescriptor(): string { @@ -1117,8 +1125,8 @@ export class FrenzyTag extends BattlerTag { } /** - * Applies the effects of the move Encore onto the target Pokemon - * Encore forces the target Pokemon to use its most-recent move for 3 turns + * Applies the effects of {@linkcode Moves.ENCORE} onto the target Pokemon. + * Encore forces the target Pokemon to use its most-recent move for 3 turns. */ export class EncoreTag extends MoveRestrictionBattlerTag { public moveId: Moves; @@ -1133,10 +1141,6 @@ export class EncoreTag extends MoveRestrictionBattlerTag { ); } - /** - * When given a battler tag or json representing one, load the data for it. - * @param {BattlerTag | any} source A battler tag - */ loadTag(source: BattlerTag | any): void { super.loadTag(source); this.moveId = source.moveId as Moves; diff --git a/src/data/berry.ts b/src/data/berry.ts index 22950c0beca..ecc3e92ca64 100644 --- a/src/data/berry.ts +++ b/src/data/berry.ts @@ -5,10 +5,8 @@ import { getStatusEffectHealText } from "./status-effect"; import { NumberHolder, toDmgValue, randSeedInt } from "#app/utils/common"; import { DoubleBerryEffectAbAttr, - PostItemLostAbAttr, ReduceBerryUseThresholdAbAttr, applyAbAttrs, - applyPostItemLostAbAttrs, } from "./abilities/ability"; import i18next from "i18next"; import { BattlerTagType } from "#enums/battler-tag-type"; @@ -70,97 +68,94 @@ export function getBerryPredicate(berryType: BerryType): BerryPredicate { } } -export type BerryEffectFunc = (pokemon: Pokemon, berryOwner?: Pokemon) => void; +export type BerryEffectFunc = (consumer: Pokemon) => void; export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { - switch (berryType) { - case BerryType.SITRUS: - case BerryType.ENIGMA: - return (pokemon: Pokemon, berryOwner?: Pokemon) => { - if (pokemon.battleData) { - pokemon.battleData.berriesEaten.push(berryType); - } - const hpHealed = new NumberHolder(toDmgValue(pokemon.getMaxHp() / 4)); - applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, false, hpHealed); - globalScene.unshiftPhase( - new PokemonHealPhase( - pokemon.getBattlerIndex(), - hpHealed.value, - i18next.t("battle:hpHealBerry", { - pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - berryName: getBerryName(berryType), - }), - true, - ), - ); - applyPostItemLostAbAttrs(PostItemLostAbAttr, berryOwner ?? pokemon, false); - }; - case BerryType.LUM: - return (pokemon: Pokemon, berryOwner?: Pokemon) => { - if (pokemon.battleData) { - pokemon.battleData.berriesEaten.push(berryType); - } - if (pokemon.status) { - globalScene.queueMessage(getStatusEffectHealText(pokemon.status.effect, getPokemonNameWithAffix(pokemon))); - } - pokemon.resetStatus(true, true); - pokemon.updateInfo(); - applyPostItemLostAbAttrs(PostItemLostAbAttr, berryOwner ?? pokemon, false); - }; - case BerryType.LIECHI: - case BerryType.GANLON: - case BerryType.PETAYA: - case BerryType.APICOT: - case BerryType.SALAC: - return (pokemon: Pokemon, berryOwner?: Pokemon) => { - if (pokemon.battleData) { - pokemon.battleData.berriesEaten.push(berryType); - } - // Offset BerryType such that LIECHI -> Stat.ATK = 1, GANLON -> Stat.DEF = 2, so on and so forth - const stat: BattleStat = berryType - BerryType.ENIGMA; - const statStages = new NumberHolder(1); - applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, false, statStages); - globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [stat], statStages.value)); - applyPostItemLostAbAttrs(PostItemLostAbAttr, berryOwner ?? pokemon, false); - }; - case BerryType.LANSAT: - return (pokemon: Pokemon, berryOwner?: Pokemon) => { - if (pokemon.battleData) { - pokemon.battleData.berriesEaten.push(berryType); - } - pokemon.addTag(BattlerTagType.CRIT_BOOST); - applyPostItemLostAbAttrs(PostItemLostAbAttr, berryOwner ?? pokemon, false); - }; - case BerryType.STARF: - return (pokemon: Pokemon, berryOwner?: Pokemon) => { - if (pokemon.battleData) { - pokemon.battleData.berriesEaten.push(berryType); - } - const randStat = randSeedInt(Stat.SPD, Stat.ATK); - const stages = new NumberHolder(2); - applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, false, stages); - globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [randStat], stages.value)); - applyPostItemLostAbAttrs(PostItemLostAbAttr, berryOwner ?? pokemon, false); - }; - case BerryType.LEPPA: - return (pokemon: Pokemon, berryOwner?: Pokemon) => { - if (pokemon.battleData) { - pokemon.battleData.berriesEaten.push(berryType); - } - const ppRestoreMove = pokemon.getMoveset().find(m => !m.getPpRatio()) - ? pokemon.getMoveset().find(m => !m.getPpRatio()) - : pokemon.getMoveset().find(m => m.getPpRatio() < 1); - if (ppRestoreMove !== undefined) { - ppRestoreMove!.ppUsed = Math.max(ppRestoreMove!.ppUsed - 10, 0); - globalScene.queueMessage( - i18next.t("battle:ppHealBerry", { - pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - moveName: ppRestoreMove!.getName(), - berryName: getBerryName(berryType), - }), + return (consumer: Pokemon) => { + // Apply an effect pertaining to what berry we're using + switch (berryType) { + case BerryType.SITRUS: + case BerryType.ENIGMA: + { + const hpHealed = new NumberHolder(toDmgValue(consumer.getMaxHp() / 4)); + applyAbAttrs(DoubleBerryEffectAbAttr, consumer, null, false, hpHealed); + globalScene.unshiftPhase( + new PokemonHealPhase( + consumer.getBattlerIndex(), + hpHealed.value, + i18next.t("battle:hpHealBerry", { + pokemonNameWithAffix: getPokemonNameWithAffix(consumer), + berryName: getBerryName(berryType), + }), + true, + ), ); - applyPostItemLostAbAttrs(PostItemLostAbAttr, berryOwner ?? pokemon, false); } - }; - } + break; + case BerryType.LUM: + { + if (consumer.status) { + globalScene.queueMessage( + getStatusEffectHealText(consumer.status.effect, getPokemonNameWithAffix(consumer)), + ); + } + consumer.resetStatus(true, true); + consumer.updateInfo(); + } + break; + case BerryType.LIECHI: + case BerryType.GANLON: + case BerryType.PETAYA: + case BerryType.APICOT: + case BerryType.SALAC: + { + // Offset BerryType such that LIECHI --> Stat.ATK = 1, GANLON --> Stat.DEF = 2, etc etc. + const stat: BattleStat = berryType - BerryType.ENIGMA; + const statStages = new NumberHolder(1); + applyAbAttrs(DoubleBerryEffectAbAttr, consumer, null, false, statStages); + globalScene.unshiftPhase( + new StatStageChangePhase(consumer.getBattlerIndex(), true, [stat], statStages.value), + ); + } + break; + + case BerryType.LANSAT: + { + consumer.addTag(BattlerTagType.CRIT_BOOST); + } + break; + + case BerryType.STARF: + { + const randStat = randSeedInt(Stat.SPD, Stat.ATK); + const stages = new NumberHolder(2); + applyAbAttrs(DoubleBerryEffectAbAttr, consumer, null, false, stages); + globalScene.unshiftPhase( + new StatStageChangePhase(consumer.getBattlerIndex(), true, [randStat], stages.value), + ); + } + break; + + case BerryType.LEPPA: + { + // Pick the first move completely out of PP, or else the first one that has any PP missing + const ppRestoreMove = + consumer.getMoveset().find(m => m.ppUsed === m.getMovePp()) ?? + consumer.getMoveset().find(m => m.ppUsed < m.getMovePp()); + if (ppRestoreMove) { + ppRestoreMove.ppUsed = Math.max(ppRestoreMove.ppUsed - 10, 0); + globalScene.queueMessage( + i18next.t("battle:ppHealBerry", { + pokemonNameWithAffix: getPokemonNameWithAffix(consumer), + moveName: ppRestoreMove.getName(), + berryName: getBerryName(berryType), + }), + ); + } + } + break; + default: + console.error("Incorrect BerryType %d passed to GetBerryEffectFunc", berryType); + } + }; } diff --git a/src/data/challenge.ts b/src/data/challenge.ts index 7388f397c7e..b4b8db2cc10 100644 --- a/src/data/challenge.ts +++ b/src/data/challenge.ts @@ -1,4 +1,5 @@ -import { BooleanHolder, type NumberHolder, randSeedItem, deepCopy } from "#app/utils/common"; +import { BooleanHolder, type NumberHolder, randSeedItem } from "#app/utils/common"; +import { deepCopy } from "#app/utils/data"; import i18next from "i18next"; import type { DexAttrProps, GameData } from "#app/system/game-data"; import { defaultStarterSpecies } from "#app/system/game-data"; diff --git a/src/data/custom-pokemon-data.ts b/src/data/custom-pokemon-data.ts index 704835e9dbc..20f6ea96174 100644 --- a/src/data/custom-pokemon-data.ts +++ b/src/data/custom-pokemon-data.ts @@ -1,36 +1,31 @@ import type { Abilities } from "#enums/abilities"; import type { PokemonType } from "#enums/pokemon-type"; -import { isNullOrUndefined } from "#app/utils/common"; import type { Nature } from "#enums/nature"; /** - * Data that can customize a Pokemon in non-standard ways from its Species - * Used by Mystery Encounters and Mints - * Also used as a counter how often a Pokemon got hit until new arena encounter + * Data that can customize a Pokemon in non-standard ways from its Species. + * Includes abilities, nature, changed types, etc. */ export class CustomPokemonData { - public spriteScale: number; + // TODO: Change the default value for all these from -1 to something a bit more sensible + /** + * The scale at which to render this Pokemon's sprite. + */ + public spriteScale = -1; public ability: Abilities | -1; public passive: Abilities | -1; public nature: Nature | -1; public types: PokemonType[]; - /** `hitsReceivedCount` aka `hitsRecCount` saves how often the pokemon got hit until a new arena encounter (used for Rage Fist) */ - public hitsRecCount: number; + /** Deprecated but needed for session save migration */ + // TODO: Remove this once pre-session migration is implemented + public hitsRecCount: number | null = null; constructor(data?: CustomPokemonData | Partial) { - if (!isNullOrUndefined(data)) { - Object.assign(this, data); - } - - this.spriteScale = this.spriteScale ?? -1; - this.ability = this.ability ?? -1; - this.passive = this.passive ?? -1; - this.nature = this.nature ?? -1; - this.types = this.types ?? []; - this.hitsRecCount = this.hitsRecCount ?? 0; - } - - resetHitReceivedCount(): void { - this.hitsRecCount = 0; + this.spriteScale = data?.spriteScale ?? -1; + this.ability = data?.ability ?? -1; + this.passive = data?.passive ?? -1; + this.nature = data?.nature ?? -1; + this.types = data?.types ?? []; + this.hitsRecCount = data?.hitsRecCount ?? null; } } diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 29542b54f6d..81ae499da10 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -2532,10 +2532,10 @@ export class PsychoShiftEffectAttr extends MoveEffectAttr { return !target.status && target.canSetStatus(user.status?.effect, true, false, user) ? -10 : 0; } } + /** - * The following needs to be implemented for Thief - * "If the user faints due to the target's Ability (Rough Skin or Iron Barbs) or held Rocky Helmet, it cannot remove the target's held item." - * "If Knock Off causes a Pokémon with the Sticky Hold Ability to faint, it can now remove that Pokémon's held item." + * Attribute to steal items upon this move's use. + * Used for {@linkcode Moves.THIEF} and {@linkcode Moves.COVET}. */ export class StealHeldItemChanceAttr extends MoveEffectAttr { private chance: number; @@ -2550,18 +2550,22 @@ export class StealHeldItemChanceAttr extends MoveEffectAttr { if (rand >= this.chance) { return false; } + const heldItems = this.getTargetHeldItems(target).filter((i) => i.isTransferable); - if (heldItems.length) { - const poolType = target.isPlayer() ? ModifierPoolType.PLAYER : target.hasTrainer() ? ModifierPoolType.TRAINER : ModifierPoolType.WILD; - const highestItemTier = heldItems.map((m) => m.type.getOrInferTier(poolType)).reduce((highestTier, tier) => Math.max(tier!, highestTier), 0); // TODO: is the bang after tier correct? - const tierHeldItems = heldItems.filter((m) => m.type.getOrInferTier(poolType) === highestItemTier); - const stolenItem = tierHeldItems[user.randSeedInt(tierHeldItems.length)]; - if (globalScene.tryTransferHeldItemModifier(stolenItem, user, false)) { - globalScene.queueMessage(i18next.t("moveTriggers:stoleItem", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), itemName: stolenItem.type.name })); - return true; - } + if (!heldItems.length) { + return false; } - return false; + + const poolType = target.isPlayer() ? ModifierPoolType.PLAYER : target.hasTrainer() ? ModifierPoolType.TRAINER : ModifierPoolType.WILD; + const highestItemTier = heldItems.map((m) => m.type.getOrInferTier(poolType)).reduce((highestTier, tier) => Math.max(tier!, highestTier), 0); // TODO: is the bang after tier correct? + const tierHeldItems = heldItems.filter((m) => m.type.getOrInferTier(poolType) === highestItemTier); + const stolenItem = tierHeldItems[user.randSeedInt(tierHeldItems.length)]; + if (!globalScene.tryTransferHeldItemModifier(stolenItem, user, false)) { + return false; + } + + globalScene.queueMessage(i18next.t("moveTriggers:stoleItem", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), itemName: stolenItem.type.name })); + return true; } getTargetHeldItems(target: Pokemon): PokemonHeldItemModifier[] { @@ -2585,58 +2589,62 @@ export class StealHeldItemChanceAttr extends MoveEffectAttr { * Used for Incinerate and Knock Off. * Not Implemented Cases: (Same applies for Thief) * "If the user faints due to the target's Ability (Rough Skin or Iron Barbs) or held Rocky Helmet, it cannot remove the target's held item." - * "If Knock Off causes a Pokémon with the Sticky Hold Ability to faint, it can now remove that Pokémon's held item." + * "If the Pokémon is knocked out by the attack, Sticky Hold does not protect the held item."" */ export class RemoveHeldItemAttr extends MoveEffectAttr { - /** Optional restriction for item pool to berries only i.e. Differentiating Incinerate and Knock Off */ + /** Optional restriction for item pool to berries only; i.e. Incinerate */ private berriesOnly: boolean; - constructor(berriesOnly: boolean) { + constructor(berriesOnly: boolean = false) { super(false); this.berriesOnly = berriesOnly; } /** - * - * @param user {@linkcode Pokemon} that used the move - * @param target Target {@linkcode Pokemon} that the moves applies to - * @param move {@linkcode Move} that is used + * Attempt to permanently remove a held + * @param user - The {@linkcode Pokemon} that used the move + * @param target - The {@linkcode Pokemon} targeted by the move + * @param move - N/A * @param args N/A - * @returns True if an item was removed + * @returns `true` if an item was able to be removed */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (!this.berriesOnly && target.isPlayer()) { // "Wild Pokemon cannot knock off Player Pokemon's held items" (See Bulbapedia) return false; } + // Check for abilities that block item theft + // TODO: This should not trigger if the target would faint beforehand const cancelled = new BooleanHolder(false); - applyAbAttrs(BlockItemTheftAbAttr, target, cancelled); // Check for abilities that block item theft + applyAbAttrs(BlockItemTheftAbAttr, target, cancelled); - if (cancelled.value === true) { + if (cancelled.value) { return false; } - // Considers entire transferrable item pool by default (Knock Off). Otherwise berries only if specified (Incinerate). + // Considers entire transferrable item pool by default (Knock Off). + // Otherwise only consider berries (Incinerate). let heldItems = this.getTargetHeldItems(target).filter(i => i.isTransferable); if (this.berriesOnly) { heldItems = heldItems.filter(m => m instanceof BerryModifier && m.pokemonId === target.id, target.isPlayer()); } - if (heldItems.length) { - const removedItem = heldItems[user.randSeedInt(heldItems.length)]; + if (!heldItems.length) { + return false; + } - // Decrease item amount and update icon - target.loseHeldItem(removedItem); - globalScene.updateModifiers(target.isPlayer()); + const removedItem = heldItems[user.randSeedInt(heldItems.length)]; + // Decrease item amount and update icon + target.loseHeldItem(removedItem); + globalScene.updateModifiers(target.isPlayer()); - if (this.berriesOnly) { - globalScene.queueMessage(i18next.t("moveTriggers:incineratedItem", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), itemName: removedItem.type.name })); - } else { - globalScene.queueMessage(i18next.t("moveTriggers:knockedOffItem", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), itemName: removedItem.type.name })); - } + if (this.berriesOnly) { + globalScene.queueMessage(i18next.t("moveTriggers:incineratedItem", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), itemName: removedItem.type.name })); + } else { + globalScene.queueMessage(i18next.t("moveTriggers:knockedOffItem", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), itemName: removedItem.type.name })); } return true; @@ -2662,17 +2670,18 @@ export class RemoveHeldItemAttr extends MoveEffectAttr { * Attribute that causes targets of the move to eat a berry. Used for Teatime, Stuff Cheeks */ export class EatBerryAttr extends MoveEffectAttr { - protected chosenBerry: BerryModifier | undefined; + protected chosenBerry: BerryModifier; constructor(selfTarget: boolean) { super(selfTarget); } + /** * Causes the target to eat a berry. - * @param user {@linkcode Pokemon} Pokemon that used the move - * @param target {@linkcode Pokemon} Pokemon that will eat a berry - * @param move {@linkcode Move} The move being used + * @param user The {@linkcode Pokemon} Pokemon that used the move + * @param target The {@linkcode Pokemon} Pokemon that will eat the berry + * @param move The {@linkcode Move} being used * @param args Unused - * @returns {boolean} true if the function succeeds + * @returns `true` if the function succeeds */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (!super.apply(user, target, move, args)) { @@ -2685,6 +2694,8 @@ export class EatBerryAttr extends MoveEffectAttr { if (heldBerries.length <= 0) { return false; } + + // pick a random berry to gobble and check if we preserve it this.chosenBerry = heldBerries[user.randSeedInt(heldBerries.length)]; const preserve = new BooleanHolder(false); // check for berry pouch preservation @@ -2692,7 +2703,10 @@ export class EatBerryAttr extends MoveEffectAttr { if (!preserve.value) { this.reduceBerryModifier(pokemon); } - this.eatBerry(pokemon); + + // Don't update harvest for berries preserved via Berry pouch (no item dupes lol) + this.eatBerry(target, undefined, !preserve.value); + return true; } @@ -2708,46 +2722,64 @@ export class EatBerryAttr extends MoveEffectAttr { globalScene.updateModifiers(target.isPlayer()); } - eatBerry(consumer: Pokemon, berryOwner?: Pokemon) { - getBerryEffectFunc(this.chosenBerry!.berryType)(consumer, berryOwner); // consumer eats the berry + + /** + * Internal function to apply berry effects. + * + * @param consumer - The {@linkcode Pokemon} eating the berry; assumed to also be owner if `berryOwner` is omitted + * @param berryOwner - The {@linkcode Pokemon} whose berry is being eaten; defaults to `consumer` if not specified. + * @param updateHarvest - Whether to prevent harvest from tracking berries; + * defaults to whether `consumer` equals `berryOwner` (i.e. consuming own berry). + */ + protected eatBerry(consumer: Pokemon, berryOwner: Pokemon = consumer, updateHarvest = consumer === berryOwner) { + // consumer eats berry, owner triggers unburden and similar effects + getBerryEffectFunc(this.chosenBerry.berryType)(consumer); + applyPostItemLostAbAttrs(PostItemLostAbAttr, berryOwner, false); applyAbAttrs(HealFromBerryUseAbAttr, consumer, new BooleanHolder(false)); + consumer.recordEatenBerry(this.chosenBerry.berryType, updateHarvest); } } /** - * Attribute used for moves that steal a random berry from the target. The user then eats the stolen berry. - * Used for Pluck & Bug Bite. + * Attribute used for moves that steal and eat a random berry from the target. + * Used for {@linkcode Moves.PLUCK} & {@linkcode Moves.BUG_BITE}. */ export class StealEatBerryAttr extends EatBerryAttr { constructor() { super(false); } + /** * User steals a random berry from the target and then eats it. - * @param user - Pokemon that used the move and will eat the stolen berry - * @param target - Pokemon that will have its berry stolen - * @param move - Move being used - * @param args Unused - * @returns true if the function succeeds + * @param user - The {@linkcode Pokemon} using the move; will eat the stolen berry + * @param target - The {@linkcode Pokemon} having its berry stolen + * @param move - The {@linkcode Move} being used + * @param args N/A + * @returns `true` if the function succeeds */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + // check for abilities that block item theft const cancelled = new BooleanHolder(false); - applyAbAttrs(BlockItemTheftAbAttr, target, cancelled); // check for abilities that block item theft + applyAbAttrs(BlockItemTheftAbAttr, target, cancelled); if (cancelled.value === true) { return false; } + // check if the target even _has_ a berry in the first place + // TODO: Check on cart if Pluck displays messages when used against sticky hold mons w/o berries const heldBerries = this.getTargetHeldBerries(target); if (heldBerries.length <= 0) { return false; } - // if the target has berries, pick a random berry and steal it + + // pick a random berry and eat it this.chosenBerry = heldBerries[user.randSeedInt(heldBerries.length)]; applyPostItemLostAbAttrs(PostItemLostAbAttr, target, false); const message = i18next.t("battle:stealEatBerry", { pokemonName: user.name, targetName: target.name, berryName: this.chosenBerry.type.name }); globalScene.queueMessage(message); this.reduceBerryModifier(target); this.eatBerry(user, target); + return true; } } @@ -4100,30 +4132,23 @@ export class FriendshipPowerAttr extends VariablePowerAttr { /** * This Attribute calculates the current power of {@linkcode Moves.RAGE_FIST}. - * The counter for power calculation does not reset on every wave but on every new arena encounter + * The counter for power calculation does not reset on every wave but on every new arena encounter. + * Self-inflicted confusion damage and hits taken by a Subsitute are ignored. */ export class RageFistPowerAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const { hitCount, prevHitCount } = user.battleData; + /* Reasons this works correctly: + * Confusion calls user.damageAndUpdate() directly (no counter increment), + * Substitute hits call user.damageAndUpdate() with a damage value of 0, also causing + no counter increment + */ + const hitCount = user.battleData.hitCount; const basePower: NumberHolder = args[0]; - this.updateHitReceivedCount(user, hitCount, prevHitCount); - - basePower.value = 50 + (Math.min(user.customPokemonData.hitsRecCount, 6) * 50); - + basePower.value = 50 * (1 + Math.min(hitCount, 6)); return true; } - /** - * Updates the number of hits the Pokemon has taken in battle - * @param user Pokemon calling Rage Fist - * @param hitCount The number of received hits this battle - * @param previousHitCount The number of received hits this battle since last time Rage Fist was used - */ - protected updateHitReceivedCount(user: Pokemon, hitCount: number, previousHitCount: number): void { - user.customPokemonData.hitsRecCount += (hitCount - previousHitCount); - user.battleData.prevHitCount = hitCount; - } } /** @@ -4354,10 +4379,10 @@ export class LastMoveDoublePowerAttr extends VariablePowerAttr { const userAlly = user.getAlly(); const enemyAlly = enemy?.getAlly(); - if (!isNullOrUndefined(userAlly) && userAlly.turnData.acted) { + if (userAlly?.turnData.acted) { pokemonActed.push(userAlly); } - if (!isNullOrUndefined(enemyAlly) && enemyAlly.turnData.acted) { + if (enemyAlly?.turnData.acted) { pokemonActed.push(enemyAlly); } } @@ -4425,13 +4450,10 @@ export class CombinedPledgeStabBoostAttr extends MoveAttr { * @extends VariablePowerAttr */ export class RoundPowerAttr extends VariablePowerAttr { - override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + override apply(user: Pokemon, target: Pokemon, move: Move, args: [NumberHolder]): boolean { const power = args[0]; - if (!(power instanceof NumberHolder)) { - return false; - } - if (user.turnData?.joinedRound) { + if (user.turnData.joinedRound) { power.value *= 2; return true; } @@ -7764,17 +7786,27 @@ export class StatusIfBoostedAttr extends MoveEffectAttr { } } +/** + * Attribute to fail move usage unless all of the user's other moves have been used at least once. + * Used by {@linkcode Moves.LAST_RESORT}. + */ export class LastResortAttr extends MoveAttr { + // TODO: Verify behavior as Bulbapedia page is _extremely_ poorly documented getCondition(): MoveConditionFunc { - return (user: Pokemon, target: Pokemon, move: Move) => { - const uniqueUsedMoveIds = new Set(); - const movesetMoveIds = user.getMoveset().map(m => m.moveId); - user.getMoveHistory().map(m => { - if (m.move !== move.id && movesetMoveIds.find(mm => mm === m.move)) { - uniqueUsedMoveIds.add(m.move); - } - }); - return uniqueUsedMoveIds.size >= movesetMoveIds.length - 1; + return (user: Pokemon, _target: Pokemon, move: Move) => { + const movesInMoveset = new Set(user.getMoveset().map(m => m.moveId)); + if (!movesInMoveset.delete(move.id) || !movesInMoveset.size) { + return false; // Last resort fails if used when not in user's moveset or no other moves exist + } + + const movesInHistory = new Set( + user.getMoveHistory() + .filter(m => !m.virtual) // TODO: Change to (m) => m < MoveUseType.INDIRECT after Dancer PR refactors virtual into enum + .map(m => m.move) + ); + + // Since `Set.intersection()` is only present in ESNext, we have to coerce it to an array to check inclusion + return [...movesInMoveset].every(m => movesInHistory.has(m)) }; } } @@ -7982,13 +8014,18 @@ export class MoveCondition { } } +/** + * Condition to allow a move's use only on the first turn this Pokemon is sent into battle + * (or the start of a new wave, whichever comes first). + */ + export class FirstMoveCondition extends MoveCondition { constructor() { - super((user, target, move) => user.battleSummonData?.waveTurnCount === 1); + super((user, _target, _move) => user.tempSummonData.waveTurnCount === 1); } - getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { - return this.apply(user, target, move) ? 10 : -20; + getUserBenefitScore(user: Pokemon, _target: Pokemon, _move: Move): number { + return this.apply(user, _target, _move) ? 10 : -20; } } @@ -8626,7 +8663,7 @@ export function initMoves() { new StatusMove(Moves.TRANSFORM, PokemonType.NORMAL, -1, 10, -1, 0, 1) .attr(TransformAttr) .condition((user, target, move) => !target.getTag(BattlerTagType.SUBSTITUTE)) - .condition((user, target, move) => !target.summonData?.illusion && !user.summonData?.illusion) + .condition((user, target, move) => !target.summonData.illusion && !user.summonData.illusion) // transforming from or into fusion pokemon causes various problems (such as crashes) .condition((user, target, move) => !target.getTag(BattlerTagType.SUBSTITUTE) && !user.fusionSpecies && !target.fusionSpecies) .ignoresProtect() @@ -8701,7 +8738,10 @@ export function initMoves() { .attr(MultiHitPowerIncrementAttr, 3) .checkAllHits(), new AttackMove(Moves.THIEF, PokemonType.DARK, MoveCategory.PHYSICAL, 60, 100, 25, -1, 0, 2) - .attr(StealHeldItemChanceAttr, 0.3), + .attr(StealHeldItemChanceAttr, 0.3) + .edgeCase(), + // Should not be able to steal held item if user faints due to Rough Skin, Iron Barbs, etc. + // Should be able to steal items from pokemon with Sticky Hold if the damage causes them to faint new StatusMove(Moves.SPIDER_WEB, PokemonType.BUG, -1, 10, -1, 0, 2) .condition(failIfGhostTypeCondition) .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, true, 1) @@ -8991,6 +9031,7 @@ export function initMoves() { .soundBased() .target(MoveTarget.RANDOM_NEAR_ENEMY) .partial(), // Does not lock the user, does not stop Pokemon from sleeping + // Likely can make use of FrenzyAttr and an ArenaTag (just without the FrenzyMissFunc) new SelfStatusMove(Moves.STOCKPILE, PokemonType.NORMAL, -1, 20, -1, 0, 3) .condition(user => (user.getTag(StockpilingTag)?.stockpiledCount ?? 0) < 3) .attr(AddBattlerTagAttr, BattlerTagType.STOCKPILING, true), @@ -9088,7 +9129,10 @@ export function initMoves() { .reflectable(), new AttackMove(Moves.KNOCK_OFF, PokemonType.DARK, MoveCategory.PHYSICAL, 65, 100, 20, -1, 0, 3) .attr(MovePowerMultiplierAttr, (user, target, move) => target.getHeldItems().filter(i => i.isTransferable).length > 0 ? 1.5 : 1) - .attr(RemoveHeldItemAttr, false), + .attr(RemoveHeldItemAttr, false) + .edgeCase(), + // Should not be able to remove held item if user faints due to Rough Skin, Iron Barbs, etc. + // Should be able to remove items from pokemon with Sticky Hold if the damage causes them to faint new AttackMove(Moves.ENDEAVOR, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 3) .attr(MatchHpAttr) .condition(failOnBossCondition), @@ -9276,7 +9320,10 @@ export function initMoves() { .attr(HighCritAttr) .attr(StatusEffectAttr, StatusEffect.POISON), new AttackMove(Moves.COVET, PokemonType.NORMAL, MoveCategory.PHYSICAL, 60, 100, 25, -1, 0, 3) - .attr(StealHeldItemChanceAttr, 0.3), + .attr(StealHeldItemChanceAttr, 0.3) + .edgeCase(), + // Should not be able to steal held item if user faints due to Rough Skin, Iron Barbs, etc. + // Should be able to steal items from pokemon with Sticky Hold if the damage causes them to faint new AttackMove(Moves.VOLT_TACKLE, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 120, 100, 15, 10, 0, 3) .attr(RecoilAttr, false, 0.33) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) @@ -9338,6 +9385,11 @@ export function initMoves() { new AttackMove(Moves.NATURAL_GIFT, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 100, 15, -1, 0, 4) .makesContact(false) .unimplemented(), + /* + NOTE: To whoever tries to implement this, reminder to push to battleData.berriesEaten + and enable the harvest test.. + Do NOT push to berriesEatenLast or else cud chew will puke the berry. + */ new AttackMove(Moves.FEINT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 30, 100, 10, -1, 2, 4) .attr(RemoveBattlerTagAttr, [ BattlerTagType.PROTECTED ]) .attr(RemoveArenaTagsAttr, [ ArenaTagType.QUICK_GUARD, ArenaTagType.WIDE_GUARD, ArenaTagType.MAT_BLOCK, ArenaTagType.CRAFTY_SHIELD ], false) @@ -9415,7 +9467,8 @@ export function initMoves() { .makesContact(true) .attr(PunishmentPowerAttr), new AttackMove(Moves.LAST_RESORT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 140, 100, 5, -1, 0, 4) - .attr(LastResortAttr), + .attr(LastResortAttr) + .edgeCase(), // May or may not need to ignore remotely called moves depending on how it works new StatusMove(Moves.WORRY_SEED, PokemonType.GRASS, 100, 10, -1, 0, 4) .attr(AbilityChangeAttr, Abilities.INSOMNIA) .reflectable(), @@ -9782,7 +9835,9 @@ export function initMoves() { .hidesTarget(), new AttackMove(Moves.INCINERATE, PokemonType.FIRE, MoveCategory.SPECIAL, 60, 100, 15, -1, 0, 5) .target(MoveTarget.ALL_NEAR_ENEMIES) - .attr(RemoveHeldItemAttr, true), + .attr(RemoveHeldItemAttr, true) + .edgeCase(), + // Should be able to remove items from pokemon with Sticky Hold if the damage causes them to faint new StatusMove(Moves.QUASH, PokemonType.DARK, 100, 15, -1, 0, 5) .condition(failIfSingleBattle) .condition((user, target, move) => !target.turnData.acted) @@ -9957,7 +10012,7 @@ export function initMoves() { .condition(new FirstMoveCondition()) .condition(failIfLastCondition), new AttackMove(Moves.BELCH, PokemonType.POISON, MoveCategory.SPECIAL, 120, 90, 10, -1, 0, 6) - .condition((user, target, move) => user.battleData.berriesEaten.length > 0), + .condition((user, target, move) => user.battleData.hasEatenBerry), new StatusMove(Moves.ROTOTILLER, PokemonType.GROUND, -1, 10, -1, 0, 6) .target(MoveTarget.ALL) .condition((user, target, move) => { @@ -11083,7 +11138,6 @@ export function initMoves() { new AttackMove(Moves.TWIN_BEAM, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 40, 100, 10, -1, 0, 9) .attr(MultiHitAttr, MultiHitType._2), new AttackMove(Moves.RAGE_FIST, PokemonType.GHOST, MoveCategory.PHYSICAL, 50, 100, 10, -1, 0, 9) - .edgeCase() // Counter incorrectly increases on confusion self-hits .attr(RageFistPowerAttr) .punchingMove(), new AttackMove(Moves.ARMOR_CANNON, PokemonType.FIRE, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 9) diff --git a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts index 24c076f750e..ce5eb2cfdd1 100644 --- a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts +++ b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts @@ -397,9 +397,6 @@ export const ClowningAroundEncounter: MysteryEncounter = MysteryEncounterBuilder newTypes.push(secondType); // Apply the type changes (to both base and fusion, if pokemon is fused) - if (!pokemon.customPokemonData) { - pokemon.customPokemonData = new CustomPokemonData(); - } pokemon.customPokemonData.types = newTypes; if (pokemon.isFusion()) { if (!pokemon.fusionCustomPokemonData) { diff --git a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts index b0721ddfee9..bb41bc7883c 100644 --- a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts +++ b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts @@ -684,7 +684,7 @@ function doPokemonTradeSequence(tradedPokemon: PlayerPokemon, receivedPokemon: P sprite.setPipelineData("shiny", tradedPokemon.shiny); sprite.setPipelineData("variant", tradedPokemon.variant); ["spriteColors", "fusionSpriteColors"].map(k => { - if (tradedPokemon.summonData?.speciesForm) { + if (tradedPokemon.summonData.speciesForm) { k += "Base"; } sprite.pipelineData[k] = tradedPokemon.getSprite().pipelineData[k]; @@ -710,7 +710,7 @@ function doPokemonTradeSequence(tradedPokemon: PlayerPokemon, receivedPokemon: P sprite.setPipelineData("shiny", receivedPokemon.shiny); sprite.setPipelineData("variant", receivedPokemon.variant); ["spriteColors", "fusionSpriteColors"].map(k => { - if (receivedPokemon.summonData?.speciesForm) { + if (receivedPokemon.summonData.speciesForm) { k += "Base"; } sprite.pipelineData[k] = receivedPokemon.getSprite().pipelineData[k]; diff --git a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts index bc7c570abca..3cbe42591d8 100644 --- a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts @@ -222,7 +222,8 @@ function endTrainerBattleAndShowDialogue(): Promise { globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeAbilityTrigger); } - pokemon.resetBattleData(); + // Each trainer battle is supposed to be a new fight, so reset all per-battle activation effects + pokemon.resetBattleAndWaveData(); applyPostBattleInitAbAttrs(PostBattleInitAbAttr, pokemon); } diff --git a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts index cd9ffefb516..cceda25fcb4 100644 --- a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts +++ b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts @@ -23,7 +23,6 @@ import { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species"; import type { PokemonHeldItemModifier } from "#app/modifier/modifier"; import { HiddenAbilityRateBoosterModifier, PokemonFormChangeItemModifier } from "#app/modifier/modifier"; import { achvs } from "#app/system/achv"; -import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import { showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; import { modifierTypes } from "#app/modifier/modifier-type"; @@ -601,9 +600,6 @@ async function postProcessTransformedPokemon( newType = randSeedInt(18) as PokemonType; } newTypes.push(newType); - if (!newPokemon.customPokemonData) { - newPokemon.customPokemonData = new CustomPokemonData(); - } newPokemon.customPokemonData.types = newTypes; // Enable passive if previous had it diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index 67904fc856c..0215928bbe8 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -10,7 +10,7 @@ import { import { showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import type { AiType, PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { EnemyPokemon, FieldPosition, PokemonMove, PokemonSummonData } from "#app/field/pokemon"; +import { EnemyPokemon, FieldPosition, PokemonMove } from "#app/field/pokemon"; import type { CustomModifierSettings, ModifierType } from "#app/modifier/modifier-type"; import { getPartyLuckValue, @@ -348,11 +348,6 @@ export async function initBattleWithEnemyConfig(partyConfig: EnemyPartyConfig): enemyPokemon.status = new Status(status, 0, cureTurn); } - // Set summon data fields - if (!enemyPokemon.summonData) { - enemyPokemon.summonData = new PokemonSummonData(); - } - // Set ability if (!isNullOrUndefined(config.abilityIndex)) { enemyPokemon.abilityIndex = config.abilityIndex; @@ -390,14 +385,11 @@ export async function initBattleWithEnemyConfig(partyConfig: EnemyPartyConfig): } } - // mysteryEncounterBattleEffects will only be used IFF MYSTERY_ENCOUNTER_POST_SUMMON tag is applied + // mysteryEncounterBattleEffects will only be used if MYSTERY_ENCOUNTER_POST_SUMMON tag is applied if (config.mysteryEncounterBattleEffects) { enemyPokemon.mysteryEncounterBattleEffects = config.mysteryEncounterBattleEffects; } - // Requires re-priming summon data to update everything properly - enemyPokemon.primeSummonData(enemyPokemon.summonData); - if (enemyPokemon.isShiny() && !enemyPokemon["shinySparkle"]) { enemyPokemon.initShinySparkle(); } diff --git a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts index ed94a46ac18..a6a87b4ab9a 100644 --- a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts @@ -1031,9 +1031,6 @@ export function applyAbilityOverrideToPokemon(pokemon: Pokemon, ability: Abiliti } pokemon.fusionCustomPokemonData.ability = ability; } else { - if (!pokemon.customPokemonData) { - pokemon.customPokemonData = new CustomPokemonData(); - } pokemon.customPokemonData.ability = ability; } } diff --git a/src/data/mystery-encounters/utils/encounter-transformation-sequence.ts b/src/data/mystery-encounters/utils/encounter-transformation-sequence.ts index 578c2efefdb..ebef47eac2d 100644 --- a/src/data/mystery-encounters/utils/encounter-transformation-sequence.ts +++ b/src/data/mystery-encounters/utils/encounter-transformation-sequence.ts @@ -88,7 +88,7 @@ export function doPokemonTransformationSequence( sprite.setPipelineData("shiny", previousPokemon.shiny); sprite.setPipelineData("variant", previousPokemon.variant); ["spriteColors", "fusionSpriteColors"].map(k => { - if (previousPokemon.summonData?.speciesForm) { + if (previousPokemon.summonData.speciesForm) { k += "Base"; } sprite.pipelineData[k] = previousPokemon.getSprite().pipelineData[k]; @@ -108,7 +108,7 @@ export function doPokemonTransformationSequence( sprite.setPipelineData("shiny", transformPokemon.shiny); sprite.setPipelineData("variant", transformPokemon.variant); ["spriteColors", "fusionSpriteColors"].map(k => { - if (transformPokemon.summonData?.speciesForm) { + if (transformPokemon.summonData.speciesForm) { k += "Base"; } sprite.pipelineData[k] = transformPokemon.getSprite().pipelineData[k]; diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 5a9a6ee9b3d..59167ba47f6 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -33,6 +33,7 @@ import { SpeciesFormKey } from "#enums/species-form-key"; import { starterPassiveAbilities } from "#app/data/balance/passives"; import { loadPokemonVariantAssets } from "#app/sprites/pokemon-sprite"; import { hasExpSprite } from "#app/sprites/sprite-utils"; +import { Gender } from "./gender"; export enum Region { NORMAL, @@ -485,10 +486,10 @@ export abstract class PokemonSpeciesForm { break; case Species.ZACIAN: case Species.ZAMAZENTA: + // biome-ignore lint/suspicious/noFallthroughSwitchClause: Falls through if (formSpriteKey.startsWith("behemoth")) { formSpriteKey = "crowned"; } - // biome-ignore lint/suspicious/no-fallthrough: Falls through default: ret += `-${formSpriteKey}`; break; @@ -749,7 +750,7 @@ export abstract class PokemonSpeciesForm { let paletteColors: Map = new Map(); const originalRandom = Math.random; - Math.random = () => Phaser.Math.RND.realInRange(0, 1); + Math.random = Phaser.Math.RND.frac; globalScene.executeWithSeedOffset( () => { @@ -879,6 +880,21 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali return this.name; } + /** + * Pick and return a random {@linkcode Gender} for a {@linkcode Pokemon}. + * @returns A randomly rolled gender based on this Species' {@linkcode malePercent}. + */ + generateGender(): Gender { + if (isNullOrUndefined(this.malePercent)) { + return Gender.GENDERLESS; + } + + if (Phaser.Math.RND.realInRange(0, 1) <= this.malePercent) { + return Gender.MALE; + } + return Gender.FEMALE; + } + /** * Find the name of species with proper attachments for regionals and separate starter forms (Floette, Ursaluna) * @returns a string with the region name or other form name attached diff --git a/src/enums/biome.ts b/src/enums/biome.ts index bb9eaf454cc..7284528767d 100644 --- a/src/enums/biome.ts +++ b/src/enums/biome.ts @@ -1,4 +1,5 @@ export enum Biome { + // TODO: Should -1 be part of the enum signature (for "unknown place") TOWN, PLAINS, GRASS, diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 0c412e73b52..b9c64ad071c 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -124,6 +124,7 @@ import { TarShotTag, AutotomizedTag, PowerTrickTag, + loadBattlerTag, type GrudgeTag, } from "../data/battler-tags"; import { WeatherType } from "#enums/weather-type"; @@ -305,6 +306,12 @@ type getBaseDamageParams = Omit type getAttackDamageParams = Omit; export default abstract class Pokemon extends Phaser.GameObjects.Container { + /** + * This pokemon's {@link https://bulbapedia.bulbagarden.net/wiki/Personality_value | Personality value/PID}, + * used to determine various parameters of this Pokemon. + * Represented as a random 32-bit unsigned integer. + * TODO: Stop treating this like a unique ID and stop treating 0 as no pokemon + */ public id: number; public name: string; public nickname: string; @@ -334,7 +341,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { public luck: number; public pauseEvolutions: boolean; public pokerus: boolean; - public switchOutStatus: boolean; + public switchOutStatus = false; public evoCounter: number; public teraType: PokemonType; public isTerastallized: boolean; @@ -350,13 +357,23 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { public fusionCustomPokemonData: CustomPokemonData | null; public fusionTeraType: PokemonType; - private summonDataPrimer: PokemonSummonData | null; + public customPokemonData: CustomPokemonData = new CustomPokemonData(); - public summonData: PokemonSummonData; - public battleData: PokemonBattleData; - public battleSummonData: PokemonBattleSummonData; - public turnData: PokemonTurnData; - public customPokemonData: CustomPokemonData; + /* Pokemon data types, in vaguely decreasing order of precedence */ + + /** + * Data that resets only on *battle* end (hit count, harvest berries, etc.) + * Kept between waves. + */ + public battleData: PokemonBattleData = new PokemonBattleData(); + /** Data that resets on switch or battle end (stat stages, battler tags, etc.) */ + public summonData: PokemonSummonData = new PokemonSummonData(); + /** Similar to {@linkcode PokemonSummonData}, but is reset on reload (not saved to file). */ + public tempSummonData: PokemonTempSummonData = new PokemonTempSummonData(); + /** Wave data correponding to moves/ability information revealed */ + public waveData: PokemonWaveData = new PokemonWaveData(); + /** Per-turn data like hit count & flinch tracking */ + public turnData: PokemonTurnData = new PokemonTurnData(); /** Used by Mystery Encounters to execute pokemon-specific logic (such as stat boosts) at start of battle */ public mysteryEncounterBattleEffects?: (pokemon: Pokemon) => void; @@ -370,6 +387,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { private shinySparkle: Phaser.GameObjects.Sprite; + // TODO: Rework this eventually constructor( x: number, y: number, @@ -390,38 +408,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { throw `Cannot create a player Pokemon for species '${species.getName(formIndex)}'`; } - const hiddenAbilityChance = new NumberHolder( - BASE_HIDDEN_ABILITY_CHANCE, - ); - if (!this.hasTrainer()) { - globalScene.applyModifiers( - HiddenAbilityRateBoosterModifier, - true, - hiddenAbilityChance, - ); - } - this.species = species; this.pokeball = dataSource?.pokeball || PokeballType.POKEBALL; this.level = level; - this.switchOutStatus = false; - // Determine the ability index - if (abilityIndex !== undefined) { - this.abilityIndex = abilityIndex; // Use the provided ability index if it is defined - } else { - // If abilityIndex is not provided, determine it based on species and hidden ability - const hasHiddenAbility = !randSeedInt(hiddenAbilityChance.value); - const randAbilityIndex = randSeedInt(2); - if (species.abilityHidden && hasHiddenAbility) { - // If the species has a hidden ability and the hidden ability is present - this.abilityIndex = 2; - } else { - // If there is no hidden ability or species does not have a hidden ability - this.abilityIndex = - species.ability2 !== species.ability1 ? randAbilityIndex : 0; // Use random ability index if species has a second ability, otherwise use 0 - } - } + this.abilityIndex = abilityIndex ?? this.generateAbilityIndex() + if (formIndex !== undefined) { this.formIndex = formIndex; } @@ -437,6 +429,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.exp = dataSource?.exp || getLevelTotalExp(this.level, species.growthRate); this.levelExp = dataSource?.levelExp || 0; + if (dataSource) { this.id = dataSource.id; this.hp = dataSource.hp; @@ -512,8 +505,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.variant = this.shiny ? this.generateShinyVariant() : 0; } - this.customPokemonData = new CustomPokemonData(); - if (nature !== undefined) { this.setNature(nature); } else { @@ -554,6 +545,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.stellarTypesBoosted = []; } + this.summonData = new PokemonSummonData(dataSource?.summonData); + this.battleData = new PokemonBattleData(dataSource?.battleData); + this.generateName(); if (!species.isObtainable()) { @@ -563,14 +557,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (!dataSource) { this.calculateStats(); } + } /** * @param {boolean} useIllusion - Whether we want the fake name or the real name of the Pokemon (for Illusion ability). */ getNameToRender(useIllusion: boolean = true) { - const name: string = (!useIllusion && !!this.summonData?.illusion) ? this.summonData?.illusion.basePokemon!.name : this.name; - const nickname: string = (!useIllusion && !!this.summonData?.illusion) ? this.summonData?.illusion.basePokemon!.nickname : this.nickname; + const name: string = (!useIllusion && this.summonData.illusion) ? this.summonData.illusion.basePokemon.name : this.name; + const nickname: string = (!useIllusion && this.summonData.illusion) ? this.summonData.illusion.basePokemon.nickname : this.nickname; try { if (nickname) { return decodeURIComponent(escape(atob(nickname))); @@ -584,7 +579,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { getPokeball(useIllusion = false){ if(useIllusion){ - return this.summonData?.illusion?.pokeball ?? this.pokeball + return this.summonData.illusion?.pokeball ?? this.pokeball } else { return this.pokeball } @@ -679,9 +674,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } /** - * Checks if the pokemon is allowed in battle (ie: not fainted, and allowed under any active challenges). - * @param onField `true` to also check if the pokemon is currently on the field, defaults to `false` - * @returns `true` if the pokemon is "active". Returns `false` if there is no active {@linkcode BattleScene} + * Checks if this {@linkcode Pokemon} is allowed in battle (ie: not fainted, and allowed under any active challenges). + * @param onField `true` to also check if the pokemon is currently on the field; default `false` + * @returns `true` if the pokemon is "active", as described above. + * Returns `false` if there is no active {@linkcode BattleScene} or the pokemon is disallowed. */ public isActive(onField = false): boolean { if (!globalScene) { @@ -723,11 +719,38 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } + /** Generate `abilityIndex` based on species and hidden ability if not pre-defined. */ + private generateAbilityIndex(): number { + + // Roll for hidden ability chance, applying any ability charms for enemy mons + const hiddenAbilityChance = new NumberHolder( + BASE_HIDDEN_ABILITY_CHANCE, + ); + if (!this.hasTrainer()) { + globalScene.applyModifiers( + HiddenAbilityRateBoosterModifier, + true, + hiddenAbilityChance, + ); + } + + // If the roll succeeded and we have one, use HA; otherwise pick a random ability + const hasHiddenAbility = !randSeedInt(hiddenAbilityChance.value); + if (this.species.abilityHidden && hasHiddenAbility) { + return 2; + } + + // only use random ability if species has a second ability + return this.species.ability2 !== this.species.ability1 ? randSeedInt(2) : 0; + } + + + /** * Generate an illusion of the last pokemon in the party, as other wild pokemon in the area. */ setIllusion(pokemon: Pokemon): boolean { - if(!!this.summonData?.illusion){ + if (this.summonData.illusion) { this.breakIllusion(); } if (this.hasTrainer()) { @@ -787,15 +810,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } breakIllusion(): boolean { - if (!this.summonData?.illusion) { + if (!this.summonData.illusion) { return false; } else { - this.name = this.summonData?.illusion.basePokemon.name; - this.nickname = this.summonData?.illusion.basePokemon.nickname; - this.shiny = this.summonData?.illusion.basePokemon.shiny; - this.variant = this.summonData?.illusion.basePokemon.variant; - this.fusionVariant = this.summonData?.illusion.basePokemon.fusionVariant; - this.fusionShiny = this.summonData?.illusion.basePokemon.fusionShiny; + this.name = this.summonData.illusion.basePokemon.name; + this.nickname = this.summonData.illusion.basePokemon.nickname; + this.shiny = this.summonData.illusion.basePokemon.shiny; + this.variant = this.summonData.illusion.basePokemon.variant; + this.fusionVariant = this.summonData.illusion.basePokemon.fusionVariant; + this.fusionShiny = this.summonData.illusion.basePokemon.fusionShiny; this.summonData.illusion = null; } if (this.isOnField()) { @@ -825,13 +848,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const loadPromises: Promise[] = []; // Assets for moves loadPromises.push(loadMoveAnimations(this.getMoveset().map(m => m.getMove().id))); - + // Load the assets for the species form - const formIndex = !!this.summonData?.illusion && useIllusion ? this.summonData?.illusion.formIndex : this.formIndex; + const formIndex = useIllusion && this.summonData.illusion ? this.summonData.illusion.formIndex : this.formIndex; loadPromises.push( this.getSpeciesForm(false, useIllusion).loadAssets( - this.getGender(useIllusion) === Gender.FEMALE, - formIndex, + this.getGender(useIllusion) === Gender.FEMALE, + formIndex, this.isShiny(useIllusion), this.getVariant(useIllusion) ), @@ -844,13 +867,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ); } if (this.getFusionSpeciesForm()) { - const fusionFormIndex = !!this.summonData?.illusion && useIllusion ? this.summonData?.illusion.fusionFormIndex : this.fusionFormIndex; - const fusionShiny = !!this.summonData?.illusion && !useIllusion ? this.summonData?.illusion.basePokemon!.fusionShiny : this.fusionShiny; - const fusionVariant = !!this.summonData?.illusion && !useIllusion ? this.summonData?.illusion.basePokemon!.fusionVariant : this.fusionVariant; + const fusionFormIndex = useIllusion && this.summonData.illusion ? this.summonData.illusion.fusionFormIndex : this.fusionFormIndex; + const fusionShiny = !useIllusion && this.summonData.illusion?.basePokemon ? this.summonData.illusion.basePokemon.fusionShiny : this.fusionShiny; + const fusionVariant = !useIllusion && this.summonData.illusion?.basePokemon ? this.summonData.illusion.basePokemon.fusionVariant : this.fusionVariant; loadPromises.push(this.getFusionSpeciesForm(false, useIllusion).loadAssets( - this.getFusionGender(false, useIllusion) === Gender.FEMALE, - fusionFormIndex, - fusionShiny, + this.getFusionGender(false, useIllusion) === Gender.FEMALE, + fusionFormIndex, + fusionShiny, fusionVariant )); globalScene.loadPokemonAtlas( @@ -904,7 +927,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // update the fusion palette this.updateFusionPalette(); - if (this.summonData?.speciesForm) { + if (this.summonData.speciesForm) { this.updateFusionPalette(true); } } @@ -1014,11 +1037,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } getSpriteId(ignoreOverride?: boolean): string { - const formIndex: integer = !!this.summonData?.illusion ? this.summonData?.illusion.formIndex! : this.formIndex; + const formIndex = this.summonData.illusion?.formIndex ?? this.formIndex; return this.getSpeciesForm(ignoreOverride, true).getSpriteId( - this.getGender(ignoreOverride, true) === Gender.FEMALE, - formIndex, - this.shiny, + this.getGender(ignoreOverride, true) === Gender.FEMALE, + formIndex, + this.shiny, this.variant ); } @@ -1028,13 +1051,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { back = this.isPlayer(); } - const formIndex: integer = !!this.summonData?.illusion ? this.summonData?.illusion.formIndex! : this.formIndex; + const formIndex = this.summonData.illusion?.formIndex ?? this.formIndex; return this.getSpeciesForm(ignoreOverride, true).getSpriteId( - this.getGender(ignoreOverride, true) === Gender.FEMALE, - formIndex, - this.shiny, - this.variant, + this.getGender(ignoreOverride, true) === Gender.FEMALE, + formIndex, + this.shiny, + this.variant, back ); } @@ -1043,8 +1066,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return this.getSpeciesForm(ignoreOverride, false).getSpriteKey( this.getGender(ignoreOverride) === Gender.FEMALE, this.formIndex, - this.summonData?.illusion?.basePokemon.shiny ?? this.shiny, - this.summonData?.illusion?.basePokemon.variant ?? this.variant + this.summonData.illusion?.basePokemon.shiny ?? this.shiny, + this.summonData.illusion?.basePokemon.variant ?? this.variant ); } @@ -1053,11 +1076,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } getFusionSpriteId(ignoreOverride?: boolean): string { - const fusionFormIndex: integer = !!this.summonData?.illusion ? this.summonData?.illusion.fusionFormIndex! : this.fusionFormIndex; + const fusionFormIndex = this.summonData.illusion?.fusionFormIndex ?? this.fusionFormIndex; return this.getFusionSpeciesForm(ignoreOverride, true).getSpriteId( - this.getFusionGender(ignoreOverride, true) === Gender.FEMALE, - fusionFormIndex, - this.fusionShiny, + this.getFusionGender(ignoreOverride, true) === Gender.FEMALE, + fusionFormIndex, + this.fusionShiny, this.fusionVariant ); } @@ -1067,13 +1090,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { back = this.isPlayer(); } - const fusionFormIndex: integer = !!this.summonData?.illusion ? this.summonData?.illusion.fusionFormIndex! : this.fusionFormIndex; + const fusionFormIndex = this.summonData.illusion?.fusionFormIndex ?? this.fusionFormIndex; return this.getFusionSpeciesForm(ignoreOverride, true).getSpriteId( - this.getFusionGender(ignoreOverride, true) === Gender.FEMALE, - fusionFormIndex, - this.fusionShiny, - this.fusionVariant, + this.getFusionGender(ignoreOverride, true) === Gender.FEMALE, + fusionFormIndex, + this.fusionShiny, + this.fusionVariant, back ); } @@ -1093,52 +1116,56 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } getIconAtlasKey(ignoreOverride?: boolean): string { - const formIndex: integer = !!this.summonData?.illusion ? this.summonData?.illusion.formIndex : this.formIndex; + const formIndex = this.summonData.illusion?.formIndex ?? this.formIndex; return this.getSpeciesForm(ignoreOverride, true).getIconAtlasKey( - formIndex, - this.shiny, + formIndex, + this.shiny, this.variant ); } getFusionIconAtlasKey(ignoreOverride?: boolean): string { return this.getFusionSpeciesForm(ignoreOverride, true).getIconAtlasKey( - this.fusionFormIndex, - this.fusionShiny, + this.fusionFormIndex, + this.fusionShiny, this.fusionVariant ); } getIconId(ignoreOverride?: boolean): string { - const formIndex: integer = !!this.summonData?.illusion ? this.summonData?.illusion.formIndex : this.formIndex; + const formIndex = this.summonData.illusion?.formIndex ?? this.formIndex; return this.getSpeciesForm(ignoreOverride, true).getIconId( - this.getGender(ignoreOverride, true) === Gender.FEMALE, - formIndex, - this.shiny, + this.getGender(ignoreOverride, true) === Gender.FEMALE, + formIndex, + this.shiny, this.variant ); } getFusionIconId(ignoreOverride?: boolean): string { - const fusionFormIndex: integer = !!this.summonData?.illusion ? this.summonData?.illusion.fusionFormIndex! : this.fusionFormIndex; + const fusionFormIndex = this.summonData.illusion?.fusionFormIndex ?? this.fusionFormIndex; return this.getFusionSpeciesForm(ignoreOverride, true).getIconId( - this.getFusionGender(ignoreOverride, true) === Gender.FEMALE, - fusionFormIndex, - this.fusionShiny, + this.getFusionGender(ignoreOverride, true) === Gender.FEMALE, + fusionFormIndex, + this.fusionShiny, this.fusionVariant ); } /** - * @param {boolean} useIllusion - Whether we want the speciesForm of the illusion or not. + * Get this {@linkcode Pokemon}'s {@linkcode PokemonSpeciesForm}. + * @param ignoreOverride - Whether to ignore overridden species from {@linkcode Moves.TRANSFORM}, default `false`. + * This overrides `useIllusion` if `true`. + * @param useIllusion - `true` to use the speciesForm of the illusion; default `false`. */ - getSpeciesForm(ignoreOverride?: boolean, useIllusion: boolean = false): PokemonSpeciesForm { - const species: PokemonSpecies = useIllusion && !!this.summonData?.illusion ? getPokemonSpecies(this.summonData?.illusion.species) : this.species; - const formIndex: integer = useIllusion && !!this.summonData?.illusion ? this.summonData?.illusion.formIndex : this.formIndex; - - if (!ignoreOverride && this.summonData?.speciesForm) { + getSpeciesForm(ignoreOverride: boolean = false, useIllusion: boolean = false): PokemonSpeciesForm { + if (!ignoreOverride && this.summonData.speciesForm) { return this.summonData.speciesForm; } + + const species: PokemonSpecies = useIllusion && this.summonData.illusion ? getPokemonSpecies(this.summonData.illusion.species) : this.species; + const formIndex = useIllusion && this.summonData.illusion ? this.summonData.illusion.formIndex : this.formIndex; + if (species.forms && species.forms.length > 0) { return species.forms[formIndex]; } @@ -1150,14 +1177,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param {boolean} useIllusion - Whether we want the fusionSpeciesForm of the illusion or not. */ getFusionSpeciesForm(ignoreOverride?: boolean, useIllusion: boolean = false): PokemonSpeciesForm { - const fusionSpecies: PokemonSpecies = useIllusion && !!this.summonData?.illusion ? this.summonData?.illusion.fusionSpecies! : this.fusionSpecies!; - const fusionFormIndex: integer = useIllusion && !!this.summonData?.illusion ? this.summonData?.illusion.fusionFormIndex! : this.fusionFormIndex; + const fusionSpecies: PokemonSpecies = useIllusion && this.summonData.illusion ? this.summonData.illusion.fusionSpecies! : this.fusionSpecies!; + const fusionFormIndex = useIllusion && this.summonData.illusion ? this.summonData.illusion.fusionFormIndex! : this.fusionFormIndex; - if (!ignoreOverride && this.summonData?.speciesForm) { + if (!ignoreOverride && this.summonData.fusionSpeciesForm) { return this.summonData.fusionSpeciesForm; } if ( - !fusionSpecies?.forms?.length || + !fusionSpecies?.forms?.length || fusionFormIndex >= fusionSpecies?.forms.length ) { return fusionSpecies; @@ -1185,12 +1212,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { formKey === "ruchbah-starmobile" || formKey === "caph-starmobile" ) { + // G-Max and starmobiles have flat 1.5x scale return 1.5; } - if (this.customPokemonData.spriteScale > 0) { - return this.customPokemonData.spriteScale; + + // TODO: Rather than using -1 as a default... why don't we just change it to 1???????? + if (this.customPokemonData.spriteScale <= 0) { + return 1; } - return 1; + return this.customPokemonData.spriteScale; } /** Resets the pokemon's field sprite properties, including position, alpha, and scale */ @@ -1384,12 +1414,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } /** - * Retrieves the entire set of stats of the {@linkcode Pokemon}. - * @param bypassSummonData prefer actual stats (`true` by default) or in-battle overriden stats (`false`) - * @returns the numeric values of the {@linkcode Pokemon}'s stats + * Retrieves the entire set of stats of this {@linkcode Pokemon}. + * @param bypassSummonData - whether to use actual stats or in-battle overriden stats from Transform; default `true` + * @returns the numeric values of this {@linkcode Pokemon}'s stats */ getStats(bypassSummonData = true): number[] { - if (!bypassSummonData && this.summonData?.stats) { + if (!bypassSummonData && this.summonData.stats) { return this.summonData.stats; } return this.stats; @@ -1404,7 +1434,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { getStat(stat: PermanentStat, bypassSummonData = true): number { if ( !bypassSummonData && - this.summonData && this.summonData.stats[stat] !== 0 ) { return this.summonData.stats[stat]; @@ -1421,12 +1450,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param bypassSummonData write to actual stats (`true` by default) or in-battle overridden stats (`false`) */ setStat(stat: PermanentStat, value: number, bypassSummonData = true): void { - if (value >= 0) { - if (!bypassSummonData && this.summonData) { - this.summonData.stats[stat] = value; - } else { - this.stats[stat] = value; - } + if (value < 0) { + return; + } + + if (!bypassSummonData) { + this.summonData.stats[stat] = value; + } else { + this.stats[stat] = value; } } @@ -1455,20 +1486,17 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param value the desired numeric value */ setStatStage(stat: BattleStat, value: number): void { - if (this.summonData) { - if (value >= -6) { - this.summonData.statStages[stat - 1] = Math.min(value, 6); - } else { - this.summonData.statStages[stat - 1] = Math.max(value, -6); - } + if (value >= -6) { + this.summonData.statStages[stat - 1] = Math.min(value, 6); + } else { + this.summonData.statStages[stat - 1] = Math.max(value, -6); } } /** * Calculate the critical-hit stage of a move used against this pokemon by * the given source - * - * @param source - The {@linkcode Pokemon} who using the move + * @param source - The {@linkcode Pokemon} using the move * @param move - The {@linkcode Move} being used * @returns The final critical-hit stage value */ @@ -1826,9 +1854,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param {boolean} useIllusion - Whether we want the fake or real gender (illusion ability). */ getGender(ignoreOverride?: boolean, useIllusion: boolean = false): Gender { - if (useIllusion && !!this.summonData?.illusion) { - return this.summonData?.illusion.gender!; - } else if (!ignoreOverride && this.summonData?.gender !== undefined) { + if (useIllusion && this.summonData.illusion) { + return this.summonData.illusion.gender; + } else if (!ignoreOverride && !isNullOrUndefined(this.summonData.gender)) { return this.summonData.gender; } return this.gender; @@ -1838,9 +1866,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param {boolean} useIllusion - Whether we want the fake or real gender (illusion ability). */ getFusionGender(ignoreOverride?: boolean, useIllusion: boolean = false): Gender { - if (useIllusion && !!this.summonData?.illusion) { - return this.summonData?.illusion.fusionGender!; - } else if (!ignoreOverride && this.summonData?.fusionGender !== undefined) { + if (useIllusion && this.summonData.illusion?.fusionGender) { + return this.summonData.illusion.fusionGender; + } else if (!ignoreOverride && !isNullOrUndefined(this.summonData.fusionGender)) { return this.summonData.fusionGender; } return this.fusionGender; @@ -1850,21 +1878,21 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param {boolean} useIllusion - Whether we want the fake or real shininess (illusion ability). */ isShiny(useIllusion: boolean = false): boolean { - if (!useIllusion && !!this.summonData?.illusion) { - return this.summonData?.illusion.basePokemon?.shiny || (!!this.summonData?.illusion.fusionSpecies && this.summonData?.illusion.basePokemon?.fusionShiny) || false; + if (!useIllusion && this.summonData.illusion) { + return this.summonData.illusion.basePokemon?.shiny || (this.summonData.illusion.fusionSpecies && this.summonData.illusion.basePokemon?.fusionShiny) || false; } else { return this.shiny || (this.isFusion(useIllusion) && this.fusionShiny); } } /** - * + * * @param useIllusion - Whether we want the fake or real shininess (illusion ability). * @returns `true` if the {@linkcode Pokemon} is shiny and the fusion is shiny as well, `false` otherwise */ isDoubleShiny(useIllusion: boolean = false): boolean { - if (!useIllusion && !!this.summonData?.illusion) { - return this.isFusion(false) && this.summonData?.illusion.basePokemon.shiny && this.summonData?.illusion.basePokemon.fusionShiny; + if (!useIllusion && this.summonData.illusion?.basePokemon) { + return this.isFusion(false) && this.summonData.illusion.basePokemon.shiny && this.summonData.illusion.basePokemon.fusionShiny; } else { return this.isFusion(useIllusion) && this.shiny && this.fusionShiny; } @@ -1874,25 +1902,23 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param {boolean} useIllusion - Whether we want the fake or real variant (illusion ability). */ getVariant(useIllusion: boolean = false): Variant { - if (!useIllusion && !!this.summonData?.illusion) { - return !this.isFusion(false) - ? this.summonData?.illusion.basePokemon!.variant + if (!useIllusion && this.summonData.illusion) { + return !this.isFusion(false) + ? this.summonData.illusion.basePokemon!.variant : Math.max(this.variant, this.fusionVariant) as Variant; } else { - return !this.isFusion(true) - ? this.variant + return !this.isFusion(true) + ? this.variant : Math.max(this.variant, this.fusionVariant) as Variant; } } getBaseVariant(doubleShiny: boolean): Variant { if (doubleShiny) { - return !!this.summonData?.illusion - ? this.summonData?.illusion.basePokemon!.variant - : this.variant; - } else { - return this.getVariant(); + return this.summonData.illusion?.basePokemon?.variant ?? this.variant; } + + return this.getVariant(); } getLuck(): number { @@ -1900,19 +1926,18 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } isFusion(useIllusion: boolean = false): boolean { - if (useIllusion && !!this.summonData?.illusion) { - return !!this.summonData?.illusion.fusionSpecies; - } else { - return !!this.fusionSpecies; + if (useIllusion && this.summonData.illusion) { + return !!this.summonData.illusion.fusionSpecies; } + return !!this.fusionSpecies; } /** * @param {boolean} useIllusion - Whether we want the fake name or the real name of the Pokemon (for Illusion ability). */ getName(useIllusion: boolean = false): string { - return (!useIllusion && !!this.summonData?.illusion && this.summonData?.illusion.basePokemon) - ? this.summonData?.illusion.basePokemon.name + return (!useIllusion && this.summonData.illusion?.basePokemon) + ? this.summonData.illusion.basePokemon.name : this.name; } @@ -1946,7 +1971,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { getMoveset(ignoreOverride?: boolean): PokemonMove[] { const ret = - !ignoreOverride && this.summonData?.moveset + !ignoreOverride && this.summonData.moveset ? this.summonData.moveset : this.moveset; @@ -2032,9 +2057,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @returns array of {@linkcode PokemonType} */ public getTypes( - includeTeraType = false, - forDefend: boolean = false, - ignoreOverride?: boolean, + includeTeraType = false, + forDefend: boolean = false, + ignoreOverride?: boolean, useIllusion: boolean | "AUTO" = "AUTO" ): PokemonType[] { const types: PokemonType[] = []; @@ -2053,10 +2078,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const doIllusion: boolean = (useIllusion === "AUTO") ? !forDefend : useIllusion; if ( - !ignoreOverride && - this.summonData?.types && - this.summonData.types.length > 0 && - (!this.summonData?.illusion || !doIllusion) + !ignoreOverride && + this.summonData.types && + this.summonData.types.length > 0 && + (!this.summonData.illusion || !doIllusion) ) { this.summonData.types.forEach(t => types.push(t)); } else { @@ -2137,10 +2162,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } - // the type added to Pokemon from moves like Forest's Curse or Trick Or Treat + // check type added to Pokemon from moves like Forest's Curse or Trick Or Treat if ( !ignoreOverride && - this.summonData && this.summonData.addedType && !types.includes(this.summonData.addedType) ) { @@ -2183,7 +2207,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @returns The non-passive {@linkcode Ability} of the pokemon */ public getAbility(ignoreOverride = false): Ability { - if (!ignoreOverride && this.summonData?.ability) { + if (!ignoreOverride && this.summonData.ability) { return allAbilities[this.summonData.ability]; } if (Overrides.ABILITY_OVERRIDE && this.isPlayer()) { @@ -2249,8 +2273,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * Accounts for all the various effects which can affect whether an ability will be present or * in effect, and both passive and non-passive. * @param attrType - {@linkcode AbAttr} The ability attribute to check for. - * @param canApply - If `false`, it doesn't check whether the ability is currently active; Default `true` - * @param ignoreOverride - If `true`, it ignores ability changing effects; Default `false` + * @param canApply - Whether to check if the ability is currently active; Default `true` + * @param ignoreOverride - Whether to ignore ability changing effects; Default `false` * @returns An array of all the ability attributes on this ability. */ public getAbilityAttrs( @@ -2362,7 +2386,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return false; } if ( - this.summonData?.abilitySuppressed && + this.summonData.abilitySuppressed && ability.isSuppressable ) { return false; @@ -2403,15 +2427,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * Checks whether a pokemon has the specified ability and it's in effect. Accounts for all the various * effects which can affect whether an ability will be present or in effect, and both passive and * non-passive. This is the primary way to check whether a pokemon has a particular ability. - * @param {Abilities} ability The ability to check for - * @param {boolean} canApply If false, it doesn't check whether the ability is currently active - * @param {boolean} ignoreOverride If true, it ignores ability changing effects - * @returns {boolean} Whether the ability is present and active + * @param ability The ability to check for + * @param canApply - Whether to check if the ability is currently active; default `true` + * @param ignoreOverride Whether to ignore ability changing effects; default `false` + * @returns `true` if the ability is present and active */ public hasAbility( ability: Abilities, canApply = true, - ignoreOverride?: boolean, + ignoreOverride = false, ): boolean { if ( this.getAbility(ignoreOverride).id === ability && @@ -2434,15 +2458,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * Accounts for all the various effects which can affect whether an ability will be present or * in effect, and both passive and non-passive. This is one of the two primary ways to check * whether a pokemon has a particular ability. - * @param {AbAttr} attrType The ability attribute to check for - * @param {boolean} canApply If false, it doesn't check whether the ability is currently active - * @param {boolean} ignoreOverride If true, it ignores ability changing effects - * @returns {boolean} Whether an ability with that attribute is present and active + * @param attrType The {@link AbAttr | ability attribute} to check for + * @param canApply - Whether to check if the ability is currently active; default `true` + * @param ignoreOverride Whether to ignore ability changing effects; default `false` + * @returns `true` if an ability with the given {@linkcode AbAttr} is present and active */ public hasAbilityWithAttr( attrType: Constructor, canApply = true, - ignoreOverride?: boolean, + ignoreOverride = false, ): boolean { if ( (!canApply || this.canApplyAbility()) && @@ -2641,14 +2665,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const moveType = source.getMoveType(move); const typeMultiplier = new NumberHolder( - move.category !== MoveCategory.STATUS || + move.category !== MoveCategory.STATUS || move.hasAttr(RespectAttackTypeImmunityAttr) ? this.getAttackTypeEffectiveness( - moveType, - source, - false, - simulated, - move, + moveType, + source, + false, + simulated, + move, useIllusion ) : 1); @@ -2759,11 +2783,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @returns a multiplier for the type effectiveness */ getAttackTypeEffectiveness( - moveType: PokemonType, - source?: Pokemon, - ignoreStrongWinds: boolean = false, - simulated: boolean = true, - move?: Move, + moveType: PokemonType, + source?: Pokemon, + ignoreStrongWinds: boolean = false, + simulated: boolean = true, + move?: Move, useIllusion: boolean = false ): TypeDamageMultiplier { if (moveType === PokemonType.STELLAR) { @@ -3143,7 +3167,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } const move = new PokemonMove(moveId); this.moveset[moveIndex] = move; - if (this.summonData?.moveset) { + if (this.summonData.moveset) { this.summonData.moveset[moveIndex] = move; } } @@ -3884,7 +3908,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { getOpponent(targetIndex: number): Pokemon | null { const ret = this.getOpponents()[targetIndex]; - if (ret.summonData) { + if (ret.summonData) { // TODO: why does this check for summonData and can we remove it? return ret; } return null; @@ -3892,7 +3916,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** * Returns the pokemon that oppose this one and are active - * + * * @param onField - whether to also check if the pokemon is currently on the field (defaults to true) */ getOpponents(onField = true): Pokemon[] { @@ -4202,12 +4226,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** Determine the STAB multiplier for a move used against this pokemon. - * + * * @param source - The attacking {@linkcode Pokemon} * @param move - The {@linkcode Move} used in the attack * @param ignoreSourceAbility - If `true`, ignores the attacking Pokemon's ability effects * @param simulated - If `true`, suppresses changes to game state during the calculation - * + * * @returns The STAB multiplier for the move used against this Pokemon */ calculateStabMultiplier(source: Pokemon, move: Move, ignoreSourceAbility: boolean, simulated: boolean): number { @@ -4602,7 +4626,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { }; } - /** Calculate whether the given move critically hits this pokemon + /** Calculate whether the given move critically hits this pokemon * @param source - The {@linkcode Pokemon} using the move * @param move - The {@linkcode Move} being used * @param simulated - If `true`, suppresses changes to game state during calculation (defaults to `true`) @@ -4631,16 +4655,16 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { applyAbAttrs(BlockCritAbAttr, this, null, simulated, isCritical); return isCritical.value; - + } /** * Called by damageAndUpdate() * @param damage integer * @param ignoreSegments boolean, not currently used - * @param preventEndure used to update damage if endure or sturdy - * @param ignoreFaintPhase flag on wheter to add FaintPhase if pokemon after applying damage faints - * @returns integer representing damage + * @param preventEndure used to update damage if endure or sturdy + * @param ignoreFaintPhas flag on whether to add FaintPhase if pokemon after applying damage faints + * @returns integer representing damage dealt */ damage( damage: number, @@ -4653,6 +4677,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } const surviveDamage = new BooleanHolder(false); + // check for endure and other abilities that would prevent us from death if (!preventEndure && this.hp - damage <= 0) { if (this.hp >= 1 && this.getTag(BattlerTagType.ENDURING)) { surviveDamage.value = this.lapseTag(BattlerTagType.ENDURING); @@ -4696,7 +4721,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** * Given the damage, adds a new DamagePhase and update HP values, etc. - * + * * Checks for 'Indirect' HitResults to account for Endure/Reviver Seed applying correctly * @param damage integer - passed to damage() * @param result an enum if it's super effective, not very, etc. @@ -4708,25 +4733,25 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { */ damageAndUpdate(damage: number, { - result = HitResult.EFFECTIVE, - isCritical = false, - ignoreSegments = false, - ignoreFaintPhase = false, + result = HitResult.EFFECTIVE, + isCritical = false, + ignoreSegments = false, + ignoreFaintPhase = false, source = undefined, }: { - result?: DamageResult, - isCritical?: boolean, - ignoreSegments?: boolean, - ignoreFaintPhase?: boolean, + result?: DamageResult, + isCritical?: boolean, + ignoreSegments?: boolean, + ignoreFaintPhase?: boolean, source?: Pokemon, } = {} ): number { const isIndirectDamage = [ HitResult.INDIRECT, HitResult.INDIRECT_KO ].includes(result); const damagePhase = new DamageAnimPhase( - this.getBattlerIndex(), - damage, - result as DamageResult, + this.getBattlerIndex(), + damage, + result as DamageResult, isCritical ); globalScene.unshiftPhase(damagePhase); @@ -4862,51 +4887,51 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { getTag(tagType: BattlerTagType.GRUDGE): GrudgeTag | nil; /** @overload */ - getTag(tagType: BattlerTagType): BattlerTag | nil; + getTag(tagType: BattlerTagType): BattlerTag | undefined; /** @overload */ - getTag(tagType: Constructor): T | nil; + getTag(tagType: Constructor): T | undefined; - getTag(tagType: BattlerTagType | Constructor): BattlerTag | nil { - if (!this.summonData) { - return null; - } + getTag(tagType: BattlerTagType | Constructor): BattlerTag | undefined { return tagType instanceof Function ? this.summonData.tags.find(t => t instanceof tagType) : this.summonData.tags.find(t => t.tagType === tagType); } findTag(tagFilter: (tag: BattlerTag) => boolean) { - if (!this.summonData) { - return null; - } return this.summonData.tags.find(t => tagFilter(t)); } findTags(tagFilter: (tag: BattlerTag) => boolean): BattlerTag[] { - if (!this.summonData) { - return []; - } return this.summonData.tags.filter(t => tagFilter(t)); } + /** + * Tick down the first {@linkcode BattlerTag} found matching the given {@linkcode BattlerTagType}, + * removing it if its duration goes below 0. + * @param tagType the {@linkcode BattlerTagType} to check against + * @returns `true` if the tag was present + */ lapseTag(tagType: BattlerTagType): boolean { - if (!this.summonData) { - return false; - } const tags = this.summonData.tags; const tag = tags.find(t => t.tagType === tagType); - if (tag && !tag.lapse(this, BattlerTagLapseType.CUSTOM)) { + if (!tag) { + return false + } + + if (!tag.lapse(this, BattlerTagLapseType.CUSTOM)) { tag.onRemove(this); tags.splice(tags.indexOf(tag), 1); } - return !!tag; + return true } + /** + * Tick down all {@linkcode BattlerTags} matching the given {@linkcode BattlerTagLapseType}, + * removing any whose durations fall below 0. + * @param tagType the {@linkcode BattlerTagLapseType} to tick down + */ lapseTags(lapseType: BattlerTagLapseType): void { - if (!this.summonData) { - return; - } const tags = this.summonData.tags; tags .filter( @@ -4921,23 +4946,24 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { }); } - removeTag(tagType: BattlerTagType): boolean { - if (!this.summonData) { - return false; - } + /** + * Remove the first tag matching the given {@linkcode BattlerTagType}. + * @param tagType the {@linkcode BattlerTagType} to search for and remove + */ + removeTag(tagType: BattlerTagType): void { const tags = this.summonData.tags; const tag = tags.find(t => t.tagType === tagType); if (tag) { tag.onRemove(this); tags.splice(tags.indexOf(tag), 1); } - return !!tag; } - findAndRemoveTags(tagFilter: (tag: BattlerTag) => boolean): boolean { - if (!this.summonData) { - return false; - } + /** + * Find and remove all {@linkcode BattlerTag}s matching the given function. + * @param tagFilter a function dictating which tags to remove + */ + findAndRemoveTags(tagFilter: (tag: BattlerTag) => boolean): void { const tags = this.summonData.tags; const tagsToRemove = tags.filter(t => tagFilter(t)); for (const tag of tagsToRemove) { @@ -4945,7 +4971,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { tag.onRemove(this); tags.splice(tags.indexOf(tag), 1); } - return true; } removeTagsBySourceId(sourceId: number): void { @@ -4953,13 +4978,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } transferTagsBySourceId(sourceId: number, newSourceId: number): void { - if (!this.summonData) { - return; - } - const tags = this.summonData.tags; - tags - .filter(t => t.sourceId === sourceId) - .forEach(t => (t.sourceId = newSourceId)); + this.summonData.tags.forEach(t => { + if (t.sourceId === sourceId) { + t.sourceId = newSourceId; + } + }) } /** @@ -5075,7 +5098,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } public getMoveHistory(): TurnMove[] { - return this.battleSummonData.moveHistory; + return this.summonData.moveHistory; } public pushMoveHistory(turnMove: TurnMove): void { @@ -5373,7 +5396,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } const message = effect && this.status?.effect === effect ? getStatusEffectOverlapText(effect ?? StatusEffect.NONE, getPokemonNameWithAffix(this)) - : i18next.t("abilityTriggers:moveImmunity", { + : i18next.t("abilityTriggers:moveImmunity", { pokemonNameWithAffix: getPokemonNameWithAffix(this), }); globalScene.queueMessage(message); @@ -5518,9 +5541,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { sourcePokemon !== this && this.isSafeguarded(sourcePokemon) ) { - if(!quiet){ + if(!quiet){ globalScene.queueMessage( - i18next.t("moveTriggers:safeguard", { targetName: getPokemonNameWithAffix(this) + i18next.t("moveTriggers:safeguard", { targetName: getPokemonNameWithAffix(this) })); } return false; @@ -5667,65 +5690,19 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return false; } - primeSummonData(summonDataPrimer: PokemonSummonData): void { - this.summonDataPrimer = summonDataPrimer; - } - - // For PreSummonAbAttr to get access to summonData - initSummondata(): void { - this.summonData = this.summonData ?? this.summonDataPrimer ?? new PokemonSummonData() - } - + /** + * Reset this Pokemon's {@linkcode PokemonSummonData | SummonData} and {@linkcode PokemonTempSummonData | TempSummonData} + * in preparation for switching pokemon, as well as removing any relevant on-switch tags. + */ resetSummonData(): void { - const illusion: IllusionData | null = this.summonData?.illusion; - if (this.summonData?.speciesForm) { + const illusion: IllusionData | null = this.summonData.illusion; + if (this.summonData.speciesForm) { this.summonData.speciesForm = null; this.updateFusionPalette(); } this.summonData = new PokemonSummonData(); + this.tempSummonData = new PokemonTempSummonData(); this.setSwitchOutStatus(false); - if (!this.battleData) { - this.resetBattleData(); - } - this.resetBattleSummonData(); - if (this.summonDataPrimer) { - for (const k of Object.keys(this.summonDataPrimer)) { - if (this.summonDataPrimer[k]) { - this.summonData[k] = this.summonDataPrimer[k]; - } - } - // If this Pokemon has a Substitute when loading in, play an animation to add its sprite - if (this.getTag(SubstituteTag)) { - globalScene.triggerPokemonBattleAnim( - this, - PokemonAnimType.SUBSTITUTE_ADD, - ); - this.getTag(SubstituteTag)!.sourceInFocus = false; - } - - // If this Pokemon has Commander and Dondozo as an active ally, hide this Pokemon's sprite. - if ( - this.hasAbilityWithAttr(CommanderAbAttr) && - globalScene.currentBattle.double && - this.getAlly()?.species.speciesId === Species.DONDOZO - ) { - this.setVisible(false); - } - this.summonDataPrimer = null; - } - this.summonData.illusion = illusion - this.updateInfo(); - } - - resetBattleData(): void { - this.battleData = new PokemonBattleData(); - } - - resetBattleSummonData(): void { - this.battleSummonData = new PokemonBattleSummonData(); - if (this.getTag(BattlerTagType.SEEDED)) { - this.lapseTag(BattlerTagType.SEEDED); - } if (globalScene) { globalScene.triggerPokemonFormChange( this, @@ -5733,6 +5710,45 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { true, ); } + + // If this Pokemon has a Substitute when loading in, play an animation to add its sprite + if (this.getTag(SubstituteTag)) { + globalScene.triggerPokemonBattleAnim( + this, + PokemonAnimType.SUBSTITUTE_ADD, + ); + this.getTag(SubstituteTag)!.sourceInFocus = false; + } + + // If this Pokemon has Commander and Dondozo as an active ally, hide this Pokemon's sprite. + if ( + this.hasAbilityWithAttr(CommanderAbAttr) && + globalScene.currentBattle.double && + this.getAlly()?.species.speciesId === Species.DONDOZO + ) { + this.setVisible(false); + } + this.summonData.illusion = illusion + this.updateInfo(); + } + + /** + * Reset a {@linkcode Pokemon}'s per-battle {@linkcode PokemonBattleData | battleData}, + * as well as any transient {@linkcode PokemonWaveData | waveData} for the current wave. + * Should be called once per arena transition (new biome/trainer battle/Mystery Encounter). + */ + resetBattleAndWaveData(): void { + this.battleData = new PokemonBattleData(); + this.resetWaveData(); + } + + /** + * Reset a {@linkcode Pokemon}'s {@linkcode PokemonWaveData | waveData}. + * Should be called upon starting a new wave in addition to whenever an arena transition occurs. + * @see {@linkcode resetBattleAndWaveData()} + */ + resetWaveData(): void { + this.waveData = new PokemonWaveData(); } resetTera(): void { @@ -5853,10 +5869,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { .filter(s => !!s) .map(s => { s.pipelineData[ - `spriteColors${ignoreOveride && this.summonData?.speciesForm ? "Base" : ""}` + `spriteColors${ignoreOveride && this.summonData.speciesForm ? "Base" : ""}` ] = []; s.pipelineData[ - `fusionSpriteColors${ignoreOveride && this.summonData?.speciesForm ? "Base" : ""}` + `fusionSpriteColors${ignoreOveride && this.summonData.speciesForm ? "Base" : ""}` ] = []; }); return; @@ -6213,10 +6229,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { .filter(s => !!s) .map(s => { s.pipelineData[ - `spriteColors${ignoreOveride && this.summonData?.speciesForm ? "Base" : ""}` + `spriteColors${ignoreOveride && this.summonData.speciesForm ? "Base" : ""}` ] = spriteColors; s.pipelineData[ - `fusionSpriteColors${ignoreOveride && this.summonData?.speciesForm ? "Base" : ""}` + `fusionSpriteColors${ignoreOveride && this.summonData.speciesForm ? "Base" : ""}` ] = fusionSpriteColors; }); @@ -6269,7 +6285,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (clearEffects) { this.destroySubstitute(); - this.resetSummonData(); // this also calls `resetBattleSummonData` + this.resetSummonData(); } if (hideInfo) { this.hideInfo(); @@ -6339,7 +6355,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { heldItem: PokemonHeldItemModifier, forBattle = true, ): boolean { - if (heldItem.pokemonId === -1 || heldItem.pokemonId === this.id) { + if (heldItem.pokemonId !== -1 && heldItem.pokemonId !== this.id) { + return false; + } + heldItem.stackCount--; if (heldItem.stackCount <= 0) { globalScene.removeModifier(heldItem, !this.isPlayer()); @@ -6347,10 +6366,23 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (forBattle) { applyPostItemLostAbAttrs(PostItemLostAbAttr, this, false); } + return true; - } else { - return false; + } + + /** + * Record a berry being eaten for ability and move triggers. + * Only tracks things that proc _every_ time a berry is eaten. + * @param berryType The type of berry being eaten. + * @param updateHarvest Whether to track the berry for harvest; default `true`. + */ + public recordEatenBerry(berryType: BerryType, updateHarvest: boolean = true) { + this.battleData.hasEatenBerry = true; + if (updateHarvest) { + // Only track for harvest if we actually consumed the berry + this.battleData.berriesEaten.push(berryType) } + this.turnData.berriesEaten.push(berryType); } } @@ -6919,6 +6951,8 @@ export class PlayerPokemon extends Pokemon { if (partyMemberIndex > fusedPartyMemberIndex) { partyMemberIndex--; } + + // combine the two mons' held items const fusedPartyMemberHeldModifiers = globalScene.findModifiers( m => m instanceof PokemonHeldItemModifier && m.pokemonId === pokemon.id, true, @@ -7232,9 +7266,9 @@ export class EnemyPokemon extends Pokemon { p.getAttackDamage({ source: this, move, - ignoreAbility: !p.battleData.abilityRevealed, + ignoreAbility: !p.waveData.abilityRevealed, ignoreSourceAbility: false, - ignoreAllyAbility: !p.getAlly()?.battleData.abilityRevealed, + ignoreAllyAbility: !p.getAlly()?.waveData.abilityRevealed, ignoreSourceAllyAbility: false, isCritical, } @@ -7296,11 +7330,18 @@ export class EnemyPokemon extends Pokemon { ) { targetScore = -20; } else if (move instanceof AttackMove) { - /** - * Attack moves are given extra multipliers to their base benefit score based on - * the move's type effectiveness against the target and whether the move is a STAB move. - */ - const effectiveness = target.getMoveEffectiveness(this, move, !target.battleData?.abilityRevealed, undefined, undefined, true); + /** + * Attack moves are given extra multipliers to their base benefit score based on + * the move's type effectiveness against the target and whether the move is a STAB move. + */ + const effectiveness = target.getMoveEffectiveness( + this, + move, + !target.waveData.abilityRevealed, + undefined, + undefined, + true); + if (target.isPlayer() !== this.isPlayer()) { targetScore *= effectiveness; if (this.isOfType(move.type)) { @@ -7743,53 +7784,131 @@ export interface AttackMoveResult { sourceBattlerIndex: BattlerIndex; } +/** + * Persistent in-battle data for a {@linkcode Pokemon}. + * Resets on switch or new battle. + */ export class PokemonSummonData { /** [Atk, Def, SpAtk, SpDef, Spd, Acc, Eva] */ public statStages: number[] = [0, 0, 0, 0, 0, 0, 0]; public moveQueue: TurnMove[] = []; public tags: BattlerTag[] = []; public abilitySuppressed = false; - public abilitiesApplied: Abilities[] = []; - public speciesForm: PokemonSpeciesForm | null; - public fusionSpeciesForm: PokemonSpeciesForm; - public ability: Abilities = Abilities.NONE; - public passiveAbility: Abilities = Abilities.NONE; - public gender: Gender; - public fusionGender: Gender; + + // Overrides for transform. + // TODO: Move these into a separate class & add rage fist hit count + public speciesForm: PokemonSpeciesForm | null = null; + public fusionSpeciesForm: PokemonSpeciesForm | null = null; + public ability: Abilities | undefined; + public passiveAbility: Abilities | undefined; + public gender: Gender | undefined; + public fusionGender: Gender | undefined; public stats: number[] = [0, 0, 0, 0, 0, 0]; - public moveset: PokemonMove[]; - public illusionBroken: boolean = false; + public moveset: PokemonMove[] | null; // If not initialized this value will not be populated from save data. public types: PokemonType[] = []; public addedType: PokemonType | null = null; + + /** Data pertaining to this pokemon's illusion. */ public illusion: IllusionData | null = null; -} + public illusionBroken: boolean = false; -export class PokemonBattleData { - /** counts the hits the pokemon received */ - public hitCount = 0; - /** used for {@linkcode Moves.RAGE_FIST} in order to save hit Counts received before Rage Fist is applied */ - public prevHitCount = 0; - public endured = false; - public berriesEaten: BerryType[] = []; - public abilitiesApplied: Abilities[] = []; - public abilityRevealed: boolean = false; -} + /** Array containing all berries eaten in the last turn; used by {@linkcode Abilities.CUD_CHEW} */ + public berriesEatenLast: BerryType[] = []; -export class PokemonBattleSummonData { - /** The number of turns the pokemon has passed since entering the battle */ - public turnCount = 1; - /** The number of turns the pokemon has passed since the start of the wave */ - public waveTurnCount = 1; - /** The list of moves the pokemon has used since entering the battle */ + /** + * An array of all moves this pokemon has used since entering the battle. + * Used for most moves and abilities that check prior move usage or copy already-used moves. + */ public moveHistory: TurnMove[] = []; + + constructor(source?: PokemonSummonData | Partial) { + if (isNullOrUndefined(source)) { + return; + } + + // TODO: Rework this into an actual generic function for use elsewhere + for (const [key, value] of Object.entries(source)) { + if (isNullOrUndefined(value) && this.hasOwnProperty(key)) { + continue; + } + + if (key === "tags") { + // load battler tags + this.tags = value.map((t: BattlerTag) => loadBattlerTag(t)); + continue; + } + this[key] = value; + } + } } + // TODO: Merge this inside `summmonData` but exclude from save if/when a save data serializer is added +export class PokemonTempSummonData { + /** + * The number of turns this pokemon has spent without switching out. + * Only currently used for positioning the battle cursor. + */ + turnCount: number = 1; + + /** + * The number of turns this pokemon has spent in the active position since the start of the wave + * without switching out. + * Reset on switch and new wave, but not stored in `SummonData` to avoid being written to the save file. + + * Used to evaluate "first turn only" conditions such as + * {@linkcode Moves.FAKE_OUT | Fake Out} and {@linkcode Moves.FIRST_IMPRESSION | First Impression}). + */ + waveTurnCount = 1; + +} + +/** + * Persistent data for a {@linkcode Pokemon}. + * Resets at the start of a new battle (but not on switch). + */ +export class PokemonBattleData { + /** Counter tracking direct hits this Pokemon has received during this battle; used for {@linkcode Moves.RAGE_FIST} */ + public hitCount = 0; + /** Whether this Pokemon has eaten a berry this battle; used for {@linkcode Moves.BELCH} */ + public hasEatenBerry: boolean = false; + /** Array containing all berries eaten and not yet recovered during this current battle; used by {@linkcode Abilities.HARVEST} */ + public berriesEaten: BerryType[] = []; + + constructor(source?: PokemonBattleData | Partial) { + if (!isNullOrUndefined(source)) { + this.hitCount = source.hitCount ?? 0; + this.hasEatenBerry = source.hasEatenBerry ?? false; + this.berriesEaten = source.berriesEaten ?? []; + } + } +} + +/** + * Temporary data for a {@linkcode Pokemon}. + * Resets on new wave/battle start (but not on switch). + */ +export class PokemonWaveData { + /** Whether the pokemon has endured due to a {@linkcode BattlerTagType.ENDURE_TOKEN} */ + public endured = false; + /** + * A set of all the abilities this {@linkcode Pokemon} has used in this wave. + * Used to track once per battle conditions, as well as (hopefully) by the updated AI for move effectiveness. + */ + public abilitiesApplied: Set = new Set; + /** Whether the pokemon's ability has been revealed or not */ + public abilityRevealed = false; +} + +/** + * Temporary data for a {@linkcode Pokemon}. + * Resets at the start of a new turn, as well as on switch. + */ export class PokemonTurnData { public flinched = false; public acted = false; - /** How many times the move should hit the target(s) */ + /** How many times the current move should hit the target(s) */ public hitCount = 0; /** * - `-1` = Calculate how many hits are left @@ -7813,6 +7932,12 @@ export class PokemonTurnData { * forced to act again in the same turn */ public extraTurns = 0; + /** + * All berries eaten by this pokemon in this turn. + * Saved into {@linkcode PokemonSummonData | SummonData} by {@linkcode Abilities.CUD_CHEW} on turn end. + * @see {@linkcode PokemonSummonData.berriesEatenLast} + */ + public berriesEaten: BerryType[] = [] } export enum AiType { @@ -7850,8 +7975,8 @@ export type DamageResult = | HitResult.SUPER_EFFECTIVE | HitResult.NOT_VERY_EFFECTIVE | HitResult.ONE_HIT_KO - | HitResult.CONFUSION - | HitResult.INDIRECT_KO + | HitResult.CONFUSION + | HitResult.INDIRECT_KO | HitResult.INDIRECT; /** Interface containing the results of a damage calculation for a given move */ @@ -7868,8 +7993,8 @@ export interface DamageCalculationResult { * Wrapper class for the {@linkcode Move} class for Pokemon to interact with. * These are the moves assigned to a {@linkcode Pokemon} object. * It links to {@linkcode Move} class via the move ID. - * Compared to {@linkcode Move}, this class also tracks if a move has received. - * PP Ups, amount of PP used, and things like that. + * Compared to {@linkcode Move}, this class also tracks things like + * PP Ups recieved, PP used, etc. * @see {@linkcode isUsable} - checks if move is restricted, out of PP, or not implemented. * @see {@linkcode getMove} - returns {@linkcode Move} object by looking it up via ID. * @see {@linkcode usePp} - removes a point of PP from the move. @@ -7940,9 +8065,9 @@ export class PokemonMove { /** * Sets {@link ppUsed} for this move and ensures the value does not exceed {@link getMovePp} - * @param {number} count Amount of PP to use + * @param count Amount of PP to use */ - usePp(count = 1) { + usePp(count: number = 1) { this.ppUsed = Math.min(this.ppUsed + count, this.getMovePp()); } @@ -7962,9 +8087,9 @@ export class PokemonMove { } /** - * Copies an existing move or creates a valid PokemonMove object from json representing one - * @param {PokemonMove | any} source The data for the move to copy - * @return {PokemonMove} A valid pokemonmove object + * Copies an existing move or creates a valid {@linkcode PokemonMove} object from json representing one + * @param source The data for the move to copy; can be a {@linkcode PokemonMove} or JSON object representing one + * @returns A valid {@linkcode PokemonMove} object */ static loadMove(source: PokemonMove | any): PokemonMove { return new PokemonMove( diff --git a/src/inputs-controller.ts b/src/inputs-controller.ts index 7fde0f2aca8..02a95f71ac4 100644 --- a/src/inputs-controller.ts +++ b/src/inputs-controller.ts @@ -1,5 +1,6 @@ import Phaser from "phaser"; -import { deepCopy, getEnumValues } from "#app/utils/common"; +import { getEnumValues } from "#app/utils/common"; +import { deepCopy } from "#app/utils/data"; import pad_generic from "./configs/inputs/pad_generic"; import pad_unlicensedSNES from "./configs/inputs/pad_unlicensedSNES"; import pad_xbox360 from "./configs/inputs/pad_xbox360"; diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 110c19dfec0..8bd2dc8948a 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -790,6 +790,7 @@ export class BerryModifierType extends PokemonHeldItemModifierType implements Ge ); this.berryType = berryType; + this.id = "BERRY"; // needed to prevent harvest item deletion; remove after modifier rework } get name(): string { diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 549ce462c11..2823e74fffe 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -47,7 +47,12 @@ import { } from "./modifier-type"; import { Color, ShadowColor } from "#enums/color"; import { FRIENDSHIP_GAIN_FROM_RARE_CANDY } from "#app/data/balance/starters"; -import { applyAbAttrs, CommanderAbAttr } from "#app/data/abilities/ability"; +import { + applyAbAttrs, + applyPostItemLostAbAttrs, + CommanderAbAttr, + PostItemLostAbAttr, +} from "#app/data/abilities/ability"; import { globalScene } from "#app/global-scene"; export type ModifierPredicate = (modifier: Modifier) => boolean; @@ -232,6 +237,10 @@ export abstract class PersistentModifier extends Modifier { abstract getMaxStackCount(forThreshold?: boolean): number; + getCountUnderMax(): number { + return this.getMaxStackCount() - this.getStackCount(); + } + isIconVisible(): boolean { return true; } @@ -653,7 +662,9 @@ export class TerastallizeAccessModifier extends PersistentModifier { } export abstract class PokemonHeldItemModifier extends PersistentModifier { + /** The ID of the {@linkcode Pokemon} that this item belongs to. */ public pokemonId: number; + /** Whether this item can be transfered to or stolen by another Pokemon. */ public isTransferable = true; constructor(type: ModifierType, pokemonId: number, stackCount?: number) { @@ -1639,14 +1650,15 @@ export class FlinchChanceModifier extends PokemonHeldItemModifier { } /** - * Applies {@linkcode FlinchChanceModifier} - * @param pokemon the {@linkcode Pokemon} that holds the item - * @param flinched {@linkcode BooleanHolder} that is `true` if the pokemon flinched - * @returns `true` if {@linkcode FlinchChanceModifier} has been applied + * Applies {@linkcode FlinchChanceModifier} to randomly flinch targets hit. + * @param pokemon - The {@linkcode Pokemon} that holds the item + * @param flinched - A {@linkcode BooleanHolder} holding whether the pokemon has flinched + * @returns `true` if {@linkcode FlinchChanceModifier} was applied successfully */ override apply(pokemon: Pokemon, flinched: BooleanHolder): boolean { - // The check for pokemon.battleSummonData is to ensure that a crash doesn't occur when a Pokemon with King's Rock procs a flinch - if (pokemon.battleSummonData && !flinched.value && pokemon.randSeedInt(100) < this.getStackCount() * this.chance) { + // The check for pokemon.summonData is to ensure that a crash doesn't occur when a Pokemon with King's Rock procs a flinch + // TODO: Since summonData is always defined now, we can probably remove this + if (pokemon.summonData && !flinched.value && pokemon.randSeedInt(100) < this.getStackCount() * this.chance) { flinched.value = true; return true; } @@ -1772,6 +1784,7 @@ export class HitHealModifier extends PokemonHeldItemModifier { */ override apply(pokemon: Pokemon): boolean { if (pokemon.turnData.totalDamageDealt && !pokemon.isFullHp()) { + // TODO: this shouldn't be undefined AFAIK globalScene.unshiftPhase( new PokemonHealPhase( pokemon.getBattlerIndex(), @@ -1867,11 +1880,15 @@ export class BerryModifier extends PokemonHeldItemModifier { override apply(pokemon: Pokemon): boolean { const preserve = new BooleanHolder(false); globalScene.applyModifiers(PreserveBerryModifier, pokemon.isPlayer(), pokemon, preserve); + this.consumed = !preserve.value; + // munch the berry and trigger unburden-like effects getBerryEffectFunc(this.berryType)(pokemon); - if (!preserve.value) { - this.consumed = true; - } + applyPostItemLostAbAttrs(PostItemLostAbAttr, pokemon, false); + + // Update berry eaten trackers for Belch, Harvest, Cud Chew, etc. + // Don't recover it if we proc berry pouch (no item duplication) + pokemon.recordEatenBerry(this.berryType, this.consumed); return true; } @@ -1910,9 +1927,7 @@ export class PreserveBerryModifier extends PersistentModifier { * @returns always `true` */ override apply(pokemon: Pokemon, doPreserve: BooleanHolder): boolean { - if (!doPreserve.value) { - doPreserve.value = pokemon.randSeedInt(10) < this.getStackCount() * 3; - } + doPreserve.value ||= pokemon.randSeedInt(10) < this.getStackCount() * 3; return true; } @@ -3609,7 +3624,7 @@ export class EnemyAttackStatusEffectChanceModifier extends EnemyPersistentModifi super(type, stackCount); this.effect = effect; - //Hardcode temporarily + // Hardcode temporarily this.chance = 0.025 * (this.effect === StatusEffect.BURN || this.effect === StatusEffect.POISON ? 2 : 1); } @@ -3716,13 +3731,13 @@ export class EnemyEndureChanceModifier extends EnemyPersistentModifier { * @returns `true` if {@linkcode Pokemon} endured */ override apply(target: Pokemon): boolean { - if (target.battleData.endured || target.randSeedInt(100) >= this.chance * this.getStackCount()) { + if (target.waveData.endured || target.randSeedInt(100) >= this.chance * this.getStackCount()) { return false; } target.addTag(BattlerTagType.ENDURE_TOKEN, 1); - target.battleData.endured = true; + target.waveData.endured = true; return true; } diff --git a/src/overrides.ts b/src/overrides.ts index 7e6a46f2f85..5bbd29b355f 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -104,8 +104,16 @@ class DefaultOverrides { readonly BYPASS_TUTORIAL_SKIP_OVERRIDE: boolean = false; /** Set to `true` to be able to re-earn already unlocked achievements */ readonly ACHIEVEMENTS_REUNLOCK_OVERRIDE: boolean = false; - /** Set to `true` to force Paralysis and Freeze to always activate, or `false` to force them to not activate */ + /** + * Set to `true` to force Paralysis and Freeze to always activate, + * or `false` to force them to not activate (or clear for freeze). + */ readonly STATUS_ACTIVATION_OVERRIDE: boolean | null = null; + /** + * Set to `true` to force confusion to always trigger, + * or `false` to force it to never trigger. + */ + readonly CONFUSION_ACTIVATION_OVERRIDE: boolean | null = null; // ---------------- // PLAYER OVERRIDES diff --git a/src/phases/battle-end-phase.ts b/src/phases/battle-end-phase.ts index 275a9017dfa..b4bb28fe55e 100644 --- a/src/phases/battle-end-phase.ts +++ b/src/phases/battle-end-phase.ts @@ -59,8 +59,8 @@ export class BattleEndPhase extends BattlePhase { } for (const pokemon of globalScene.getField()) { - if (pokemon?.battleSummonData) { - pokemon.battleSummonData.waveTurnCount = 1; + if (pokemon) { + pokemon.tempSummonData.waveTurnCount = 1; } } diff --git a/src/phases/berry-phase.ts b/src/phases/berry-phase.ts index b20b1736d4f..b027469ea5e 100644 --- a/src/phases/berry-phase.ts +++ b/src/phases/berry-phase.ts @@ -1,4 +1,9 @@ -import { applyAbAttrs, PreventBerryUseAbAttr, HealFromBerryUseAbAttr } from "#app/data/abilities/ability"; +import { + applyAbAttrs, + PreventBerryUseAbAttr, + HealFromBerryUseAbAttr, + RepeatBerryNextTurnAbAttr, +} from "#app/data/abilities/ability"; import { CommonAnim } from "#app/data/battle-anims"; import { BerryUsedEvent } from "#app/events/battle-scene"; import { getPokemonNameWithAffix } from "#app/messages"; @@ -8,47 +13,65 @@ import { BooleanHolder } from "#app/utils/common"; import { FieldPhase } from "./field-phase"; import { CommonAnimPhase } from "./common-anim-phase"; import { globalScene } from "#app/global-scene"; +import type Pokemon from "#app/field/pokemon"; -/** The phase after attacks where the pokemon eat berries */ +/** + * The phase after attacks where the pokemon eat berries. + * Also triggers Cud Chew's "repeat berry use" effects + */ export class BerryPhase extends FieldPhase { start() { super.start(); this.executeForAll(pokemon => { - const hasUsableBerry = !!globalScene.findModifier(m => { - return m instanceof BerryModifier && m.shouldApply(pokemon); - }, pokemon.isPlayer()); - - if (hasUsableBerry) { - const cancelled = new BooleanHolder(false); - pokemon.getOpponents().map(opp => applyAbAttrs(PreventBerryUseAbAttr, opp, cancelled)); - - if (cancelled.value) { - globalScene.queueMessage( - i18next.t("abilityTriggers:preventBerryUse", { - pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - }), - ); - } else { - globalScene.unshiftPhase( - new CommonAnimPhase(pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.USE_ITEM), - ); - - for (const berryModifier of globalScene.applyModifiers(BerryModifier, pokemon.isPlayer(), pokemon)) { - if (berryModifier.consumed) { - berryModifier.consumed = false; - pokemon.loseHeldItem(berryModifier); - } - globalScene.eventTarget.dispatchEvent(new BerryUsedEvent(berryModifier)); // Announce a berry was used - } - - globalScene.updateModifiers(pokemon.isPlayer()); - - applyAbAttrs(HealFromBerryUseAbAttr, pokemon, new BooleanHolder(false)); - } - } + this.eatBerries(pokemon); + applyAbAttrs(RepeatBerryNextTurnAbAttr, pokemon, null); }); this.end(); } + + /** + * Attempt to eat all of a given {@linkcode Pokemon}'s berries once. + * @param pokemon - The {@linkcode Pokemon} to check + */ + eatBerries(pokemon: Pokemon): void { + const hasUsableBerry = !!globalScene.findModifier( + m => m instanceof BerryModifier && m.shouldApply(pokemon), + pokemon.isPlayer(), + ); + + if (!hasUsableBerry) { + return; + } + + // TODO: If both opponents on field have unnerve, which one displays its message? + const cancelled = new BooleanHolder(false); + pokemon.getOpponents().forEach(opp => applyAbAttrs(PreventBerryUseAbAttr, opp, cancelled)); + if (cancelled.value) { + globalScene.queueMessage( + i18next.t("abilityTriggers:preventBerryUse", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + }), + ); + return; + } + + globalScene.unshiftPhase( + new CommonAnimPhase(pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.USE_ITEM), + ); + + for (const berryModifier of globalScene.applyModifiers(BerryModifier, pokemon.isPlayer(), pokemon)) { + // No need to track berries being eaten; already done inside applyModifiers + if (berryModifier.consumed) { + berryModifier.consumed = false; + pokemon.loseHeldItem(berryModifier); + } + globalScene.eventTarget.dispatchEvent(new BerryUsedEvent(berryModifier)); + } + globalScene.updateModifiers(pokemon.isPlayer()); + + // Abilities.CHEEK_POUCH only works once per round of nom noms + applyAbAttrs(HealFromBerryUseAbAttr, pokemon, new BooleanHolder(false)); + } } diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index 20ed69119f9..5b799bd9316 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -113,12 +113,6 @@ export class EncounterPhase extends BattlePhase { } if (!this.loaded) { if (battle.battleType === BattleType.TRAINER) { - //resets hitRecCount during Trainer ecnounter - for (const pokemon of globalScene.getPlayerParty()) { - if (pokemon) { - pokemon.customPokemonData.resetHitReceivedCount(); - } - } battle.enemyParty[e] = battle.trainer?.genPartyMember(e)!; // TODO:: is the bang correct here? } else { let enemySpecies = globalScene.randomSpecies(battle.waveIndex, level, true); @@ -140,7 +134,6 @@ export class EncounterPhase extends BattlePhase { if (globalScene.currentBattle.battleSpec === BattleSpec.FINAL_BOSS) { battle.enemyParty[e].ivs = new Array(6).fill(31); } - // biome-ignore lint/complexity/noForEach: Improves readability globalScene .getPlayerParty() .slice(0, !battle.double ? 1 : 2) @@ -195,7 +188,7 @@ export class EncounterPhase extends BattlePhase { ]; const moveset: string[] = []; for (const move of enemyPokemon.getMoveset()) { - moveset.push(move!.getName()); // TODO: remove `!` after moveset-null removal PR + moveset.push(move.getName()); } console.log( @@ -288,6 +281,7 @@ export class EncounterPhase extends BattlePhase { }); if (!this.loaded && battle.battleType !== BattleType.MYSTERY_ENCOUNTER) { + // generate modifiers for MEs, overriding prior ones as applicable regenerateModifierPoolThresholds( globalScene.getEnemyField(), battle.battleType === BattleType.TRAINER ? ModifierPoolType.TRAINER : ModifierPoolType.WILD, @@ -300,8 +294,8 @@ export class EncounterPhase extends BattlePhase { } } - if (battle.battleType === BattleType.TRAINER) { - globalScene.currentBattle.trainer!.genAI(globalScene.getEnemyParty()); + if (battle.battleType === BattleType.TRAINER && globalScene.currentBattle.trainer) { + globalScene.currentBattle.trainer.genAI(globalScene.getEnemyParty()); } globalScene.ui.setMode(UiMode.MESSAGE).then(() => { @@ -342,8 +336,10 @@ export class EncounterPhase extends BattlePhase { } for (const pokemon of globalScene.getPlayerParty()) { + // Currently, a new wave is not considered a new battle if there is no arena reset + // Therefore, we only reset wave data here if (pokemon) { - pokemon.resetBattleData(); + pokemon.resetWaveData(); } } @@ -558,7 +554,7 @@ export class EncounterPhase extends BattlePhase { if (enemyPokemon.isShiny(true)) { globalScene.unshiftPhase(new ShinySparklePhase(BattlerIndex.ENEMY + e)); } - /** This sets Eternatus' held item to be untransferrable, preventing it from being stolen */ + /** This sets Eternatus' held item to be untransferrable, preventing it from being stolen */ if ( enemyPokemon.species.speciesId === Species.ETERNATUS && (globalScene.gameMode.isBattleClassicFinalBoss(globalScene.currentBattle.waveIndex) || diff --git a/src/phases/evolution-phase.ts b/src/phases/evolution-phase.ts index 7b013555f40..8fc8a8be031 100644 --- a/src/phases/evolution-phase.ts +++ b/src/phases/evolution-phase.ts @@ -146,7 +146,7 @@ export class EvolutionPhase extends Phase { sprite.setPipelineData("shiny", this.pokemon.shiny); sprite.setPipelineData("variant", this.pokemon.variant); ["spriteColors", "fusionSpriteColors"].map(k => { - if (this.pokemon.summonData?.speciesForm) { + if (this.pokemon.summonData.speciesForm) { k += "Base"; } sprite.pipelineData[k] = this.pokemon.getSprite().pipelineData[k]; @@ -178,7 +178,7 @@ export class EvolutionPhase extends Phase { sprite.setPipelineData("shiny", evolvedPokemon.shiny); sprite.setPipelineData("variant", evolvedPokemon.variant); ["spriteColors", "fusionSpriteColors"].map(k => { - if (evolvedPokemon.summonData?.speciesForm) { + if (evolvedPokemon.summonData.speciesForm) { k += "Base"; } sprite.pipelineData[k] = evolvedPokemon.getSprite().pipelineData[k]; diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index 4c99a609b11..1aa24d59fa0 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -118,7 +118,7 @@ export class FaintPhase extends PokemonPhase { pokemon.resetTera(); - if (pokemon.turnData?.attacksReceived?.length) { + if (pokemon.turnData.attacksReceived?.length) { const lastAttack = pokemon.turnData.attacksReceived[0]; applyPostFaintAbAttrs( PostFaintAbAttr, @@ -136,7 +136,7 @@ export class FaintPhase extends PokemonPhase { for (const p of alivePlayField) { applyPostKnockOutAbAttrs(PostKnockOutAbAttr, p, pokemon); } - if (pokemon.turnData?.attacksReceived?.length) { + if (pokemon.turnData.attacksReceived?.length) { const defeatSource = this.source; if (defeatSource?.isOnField()) { diff --git a/src/phases/field-phase.ts b/src/phases/field-phase.ts index 98c1ced510f..c37f0e960e7 100644 --- a/src/phases/field-phase.ts +++ b/src/phases/field-phase.ts @@ -6,8 +6,7 @@ type PokemonFunc = (pokemon: Pokemon) => void; export abstract class FieldPhase extends BattlePhase { executeForAll(func: PokemonFunc): void { - const field = globalScene.getField(true).filter(p => p.summonData); - for (const pokemon of field) { + for (const pokemon of globalScene.getField(true)) { func(pokemon); } } diff --git a/src/phases/form-change-phase.ts b/src/phases/form-change-phase.ts index ac7edadf244..5517fb0f402 100644 --- a/src/phases/form-change-phase.ts +++ b/src/phases/form-change-phase.ts @@ -51,7 +51,7 @@ export class FormChangePhase extends EvolutionPhase { sprite.setPipelineData("shiny", transformedPokemon.shiny); sprite.setPipelineData("variant", transformedPokemon.variant); ["spriteColors", "fusionSpriteColors"].map(k => { - if (transformedPokemon.summonData?.speciesForm) { + if (transformedPokemon.summonData.speciesForm) { k += "Base"; } sprite.pipelineData[k] = transformedPokemon.getSprite().pipelineData[k]; diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index 4b4e62db71b..64cae923f07 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -277,9 +277,6 @@ export class MoveEffectPhase extends PokemonPhase { super.end(); return; } - if (isNullOrUndefined(user.turnData)) { - user.resetTurnData(); - } } /** diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index b24d7b61ebb..e704b040d20 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -618,7 +618,7 @@ export class MovePhase extends BattlePhase { globalScene.eventTarget.dispatchEvent(new MoveUsedEvent(this.pokemon?.id, this.move.getMove(), ppUsed)); } - if (this.cancelled && this.pokemon.summonData?.tags?.find(t => t.tagType === BattlerTagType.FRENZY)) { + if (this.cancelled && this.pokemon.summonData.tags?.find(t => t.tagType === BattlerTagType.FRENZY)) { frenzyMissFunc(this.pokemon, this.move.getMove()); } diff --git a/src/phases/mystery-encounter-phases.ts b/src/phases/mystery-encounter-phases.ts index 011dd26db92..fd0c4ef7949 100644 --- a/src/phases/mystery-encounter-phases.ts +++ b/src/phases/mystery-encounter-phases.ts @@ -229,8 +229,7 @@ export class MysteryEncounterBattleStartCleanupPhase extends Phase { // Lapse any residual flinches/endures but ignore all other turn-end battle tags const includedLapseTags = [BattlerTagType.FLINCHED, BattlerTagType.ENDURING]; - const field = globalScene.getField(true).filter(p => p.summonData); - field.forEach(pokemon => { + globalScene.getField(true).forEach(pokemon => { const tags = pokemon.summonData.tags; tags .filter( diff --git a/src/phases/new-biome-encounter-phase.ts b/src/phases/new-biome-encounter-phase.ts index 6a7afcb8da8..ef027bfd77a 100644 --- a/src/phases/new-biome-encounter-phase.ts +++ b/src/phases/new-biome-encounter-phase.ts @@ -7,17 +7,17 @@ export class NewBiomeEncounterPhase extends NextEncounterPhase { doEncounter(): void { globalScene.playBgm(undefined, true); + // Reset all battle and wave data, perform form changes, etc. + // We do this because new biomes are considered "arena transitions" akin to MEs and trainer battles for (const pokemon of globalScene.getPlayerParty()) { if (pokemon) { - pokemon.resetBattleData(); - pokemon.customPokemonData.resetHitReceivedCount(); + pokemon.resetBattleAndWaveData(); + if (pokemon.isOnField()) { + applyAbAttrs(PostBiomeChangeAbAttr, pokemon, null); + } } } - for (const pokemon of globalScene.getPlayerParty().filter(p => p.isOnField())) { - applyAbAttrs(PostBiomeChangeAbAttr, pokemon, null); - } - const enemyField = globalScene.getEnemyField(); const moveTargets: any[] = [globalScene.arenaEnemy, enemyField]; const mysteryEncounter = globalScene.currentBattle?.mysteryEncounter?.introVisuals; diff --git a/src/phases/next-encounter-phase.ts b/src/phases/next-encounter-phase.ts index e5e61312c3b..30b4004363c 100644 --- a/src/phases/next-encounter-phase.ts +++ b/src/phases/next-encounter-phase.ts @@ -1,6 +1,10 @@ import { globalScene } from "#app/global-scene"; import { EncounterPhase } from "./encounter-phase"; +/** + * The phase between defeating an encounter and starting another wild wave. + * Handles generating, loading and preparing for it. + */ export class NextEncounterPhase extends EncounterPhase { start() { super.start(); @@ -9,9 +13,12 @@ export class NextEncounterPhase extends EncounterPhase { doEncounter(): void { globalScene.playBgm(undefined, true); + // Reset all player transient wave data/intel before starting a new wild encounter. + // We exclusively reset wave data here as wild waves are considered one continuous "battle" + // for lack of an arena transition. for (const pokemon of globalScene.getPlayerParty()) { if (pokemon) { - pokemon.resetBattleData(); + pokemon.resetWaveData(); } } diff --git a/src/phases/quiet-form-change-phase.ts b/src/phases/quiet-form-change-phase.ts index f476919a628..76411f62f77 100644 --- a/src/phases/quiet-form-change-phase.ts +++ b/src/phases/quiet-form-change-phase.ts @@ -74,7 +74,7 @@ export class QuietFormChangePhase extends BattlePhase { isTerastallized: this.pokemon.isTerastallized, }); ["spriteColors", "fusionSpriteColors"].map(k => { - if (this.pokemon.summonData?.speciesForm) { + if (this.pokemon.summonData.speciesForm) { k += "Base"; } sprite.pipelineData[k] = this.pokemon.getSprite().pipelineData[k]; diff --git a/src/phases/show-ability-phase.ts b/src/phases/show-ability-phase.ts index 8097af33fe0..d6193ac3946 100644 --- a/src/phases/show-ability-phase.ts +++ b/src/phases/show-ability-phase.ts @@ -50,9 +50,7 @@ export class ShowAbilityPhase extends PokemonPhase { } globalScene.abilityBar.showAbility(this.pokemonName, this.abilityName, this.passive, this.player).then(() => { - if (pokemon?.battleData) { - pokemon.battleData.abilityRevealed = true; - } + pokemon.waveData.abilityRevealed = true; this.end(); }); diff --git a/src/phases/stat-stage-change-phase.ts b/src/phases/stat-stage-change-phase.ts index 9d64a81bbb4..6731e45025c 100644 --- a/src/phases/stat-stage-change-phase.ts +++ b/src/phases/stat-stage-change-phase.ts @@ -217,16 +217,8 @@ export class StatStageChangePhase extends PokemonPhase { for (const s of filteredStats) { if (stages.value > 0 && pokemon.getStatStage(s) < 6) { - if (!pokemon.turnData) { - // Temporary fix for missing turn data struct on turn 1 - pokemon.resetTurnData(); - } pokemon.turnData.statStagesIncreased = true; } else if (stages.value < 0 && pokemon.getStatStage(s) > -6) { - if (!pokemon.turnData) { - // Temporary fix for missing turn data struct on turn 1 - pokemon.resetTurnData(); - } pokemon.turnData.statStagesDecreased = true; } diff --git a/src/phases/summon-phase.ts b/src/phases/summon-phase.ts index ee27fc28247..fef9b356348 100644 --- a/src/phases/summon-phase.ts +++ b/src/phases/summon-phase.ts @@ -177,11 +177,7 @@ export class SummonPhase extends PartyMemberPokemonPhase { } globalScene.currentBattle.seenEnemyPartyMemberIds.add(pokemon.id); } - addPokeballOpenParticles( - pokemon.x, - pokemon.y - 16, - pokemon.getPokeball(true), - ); + addPokeballOpenParticles(pokemon.x, pokemon.y - 16, pokemon.getPokeball(true)); globalScene.updateModifiers(this.player); globalScene.updateFieldScale(); pokemon.showInfo(); @@ -200,9 +196,8 @@ export class SummonPhase extends PartyMemberPokemonPhase { onComplete: () => { pokemon.cry(pokemon.getHpRatio() > 0.25 ? undefined : { rate: 0.85 }); pokemon.getSprite().clearTint(); - pokemon.resetSummonData(); // necessary to stay transformed during wild waves - if (pokemon.summonData?.speciesForm) { + if (pokemon.summonData.speciesForm) { pokemon.loadAssets(false); } globalScene.time.delayedCall(1000, () => this.end()); @@ -266,7 +261,6 @@ export class SummonPhase extends PartyMemberPokemonPhase { onComplete: () => { pokemon.cry(pokemon.getHpRatio() > 0.25 ? undefined : { rate: 0.85 }); pokemon.getSprite().clearTint(); - pokemon.resetSummonData(); globalScene.updateFieldScale(); globalScene.time.delayedCall(1000, () => this.end()); }, diff --git a/src/phases/switch-summon-phase.ts b/src/phases/switch-summon-phase.ts index f8728f3f9b9..bb31f87cc3d 100644 --- a/src/phases/switch-summon-phase.ts +++ b/src/phases/switch-summon-phase.ts @@ -33,10 +33,10 @@ export class SwitchSummonPhase extends SummonPhase { * @param fieldIndex - Position on the battle field * @param slotIndex - The index of pokemon (in party of 6) to switch into * @param doReturn - Whether to render "comeback" dialogue - * @param player - (Optional) `true` if the switch is from the player + * @param player - Whether the switch came from the player or enemy; default `true` */ - constructor(switchType: SwitchType, fieldIndex: number, slotIndex: number, doReturn: boolean, player?: boolean) { - super(fieldIndex, player !== undefined ? player : true); + constructor(switchType: SwitchType, fieldIndex: number, slotIndex: number, doReturn: boolean, player = true) { + super(fieldIndex, player); this.switchType = switchType; this.slotIndex = slotIndex; @@ -67,7 +67,8 @@ export class SwitchSummonPhase extends SummonPhase { !(this.player ? globalScene.getPlayerParty() : globalScene.getEnemyParty())[this.slotIndex]) ) { if (this.player) { - return this.switchAndSummon(); + this.switchAndSummon(); + return; } globalScene.time.delayedCall(750, () => this.switchAndSummon()); return; @@ -120,14 +121,23 @@ export class SwitchSummonPhase extends SummonPhase { switchAndSummon() { const party = this.player ? this.getParty() : globalScene.getEnemyParty(); - const switchedInPokemon = party[this.slotIndex]; + const switchedInPokemon: Pokemon | undefined = party[this.slotIndex]; this.lastPokemon = this.getPokemon(); + applyPreSummonAbAttrs(PreSummonAbAttr, switchedInPokemon); applyPreSwitchOutAbAttrs(PreSwitchOutAbAttr, this.lastPokemon); - if (this.switchType === SwitchType.BATON_PASS && switchedInPokemon) { - (this.player ? globalScene.getEnemyField() : globalScene.getPlayerField()).forEach(enemyPokemon => + if (!switchedInPokemon) { + this.end(); + return; + } + + if (this.switchType === SwitchType.BATON_PASS) { + // If switching via baton pass, update opposing tags coming from the prior pokemon + (this.player ? globalScene.getEnemyField() : globalScene.getPlayerField()).forEach((enemyPokemon: Pokemon) => enemyPokemon.transferTagsBySourceId(this.lastPokemon.id, switchedInPokemon.id), ); + + // If the recipient pokemon lacks a baton, give our baton to it during the swap if ( !globalScene.findModifier( m => @@ -140,14 +150,8 @@ export class SwitchSummonPhase extends SummonPhase { m instanceof SwitchEffectTransferModifier && (m as SwitchEffectTransferModifier).pokemonId === this.lastPokemon.id, ) as SwitchEffectTransferModifier; - if ( - batonPassModifier && - !globalScene.findModifier( - m => - m instanceof SwitchEffectTransferModifier && - (m as SwitchEffectTransferModifier).pokemonId === switchedInPokemon.id, - ) - ) { + + if (batonPassModifier) { globalScene.tryTransferHeldItemModifier( batonPassModifier, switchedInPokemon, @@ -160,49 +164,48 @@ export class SwitchSummonPhase extends SummonPhase { } } } - if (switchedInPokemon) { - party[this.slotIndex] = this.lastPokemon; - party[this.fieldIndex] = switchedInPokemon; - const showTextAndSummon = () => { - globalScene.ui.showText( - this.player - ? i18next.t("battle:playerGo", { - pokemonName: getPokemonNameWithAffix(switchedInPokemon), - }) - : i18next.t("battle:trainerGo", { - trainerName: globalScene.currentBattle.trainer?.getName( - !(this.fieldIndex % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER, - ), - pokemonName: this.getPokemon().getNameToRender(), - }), - ); - /** - * If this switch is passing a Substitute, make the switched Pokemon match the returned Pokemon's state as it left. - * Otherwise, clear any persisting tags on the returned Pokemon. - */ - if (this.switchType === SwitchType.BATON_PASS || this.switchType === SwitchType.SHED_TAIL) { - const substitute = this.lastPokemon.getTag(SubstituteTag); - if (substitute) { - switchedInPokemon.x += this.lastPokemon.getSubstituteOffset()[0]; - switchedInPokemon.y += this.lastPokemon.getSubstituteOffset()[1]; - switchedInPokemon.setAlpha(0.5); - } - } else { - switchedInPokemon.resetSummonData(); + + party[this.slotIndex] = this.lastPokemon; + party[this.fieldIndex] = switchedInPokemon; + const showTextAndSummon = () => { + globalScene.ui.showText( + this.player + ? i18next.t("battle:playerGo", { + pokemonName: getPokemonNameWithAffix(switchedInPokemon), + }) + : i18next.t("battle:trainerGo", { + trainerName: globalScene.currentBattle.trainer?.getName( + !(this.fieldIndex % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER, + ), + pokemonName: this.getPokemon().getNameToRender(), + }), + ); + + /** + * If this switch is passing a Substitute, make the switched Pokemon matches the returned Pokemon's state as it left. + * Otherwise, clear any persisting tags on the returned Pokemon. + */ + if (this.switchType === SwitchType.BATON_PASS || this.switchType === SwitchType.SHED_TAIL) { + const substitute = this.lastPokemon.getTag(SubstituteTag); + if (substitute) { + switchedInPokemon.x += this.lastPokemon.getSubstituteOffset()[0]; + switchedInPokemon.y += this.lastPokemon.getSubstituteOffset()[1]; + switchedInPokemon.setAlpha(0.5); } - this.summon(); - }; - if (this.player) { - showTextAndSummon(); } else { - globalScene.time.delayedCall(1500, () => { - this.hideEnemyTrainer(); - globalScene.pbTrayEnemy.hide(); - showTextAndSummon(); - }); + switchedInPokemon.resetSummonData(); } + this.summon(); + }; + + if (this.player) { + showTextAndSummon(); } else { - this.end(); + globalScene.time.delayedCall(1500, () => { + this.hideEnemyTrainer(); + globalScene.pbTrayEnemy.hide(); + showTextAndSummon(); + }); } } @@ -220,15 +223,15 @@ export class SwitchSummonPhase extends SummonPhase { const lastPokemonHasForceSwitchAbAttr = this.lastPokemon.hasAbilityWithAttr(PostDamageForceSwitchAbAttr) && !this.lastPokemon.isFainted(); - // Compensate for turn spent summoning - // Or compensate for force switch move if switched out pokemon is not fainted + // Compensate for turn spent summoning/forced switch if switched out pokemon is not fainted. + // Needed as we increment turn counters in `TurnEndPhase`. if ( currentCommand === Command.POKEMON || lastPokemonIsForceSwitchedAndNotFainted || lastPokemonHasForceSwitchAbAttr ) { - pokemon.battleSummonData.turnCount--; - pokemon.battleSummonData.waveTurnCount--; + pokemon.tempSummonData.turnCount--; + pokemon.tempSummonData.waveTurnCount--; } if (this.switchType === SwitchType.BATON_PASS && pokemon) { @@ -240,12 +243,13 @@ export class SwitchSummonPhase extends SummonPhase { } } + // Reset turn data if not initial switch (since it gets initialized to an empty object on turn start) if (this.switchType !== SwitchType.INITIAL_SWITCH) { pokemon.resetTurnData(); pokemon.turnData.switchedInThisTurn = true; } - this.lastPokemon?.resetSummonData(); + this.lastPokemon.resetSummonData(); globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeActiveTrigger, true); // Reverts to weather-based forms when weather suppressors (Cloud Nine/Air Lock) are switched out diff --git a/src/phases/turn-end-phase.ts b/src/phases/turn-end-phase.ts index fe16a4a864e..756c497802b 100644 --- a/src/phases/turn-end-phase.ts +++ b/src/phases/turn-end-phase.ts @@ -54,11 +54,10 @@ export class TurnEndPhase extends FieldPhase { } globalScene.applyModifiers(TurnStatusEffectModifier, pokemon.isPlayer(), pokemon); - globalScene.applyModifiers(TurnHeldItemTransferModifier, pokemon.isPlayer(), pokemon); - pokemon.battleSummonData.turnCount++; - pokemon.battleSummonData.waveTurnCount++; + pokemon.tempSummonData.turnCount++; + pokemon.tempSummonData.waveTurnCount++; }; this.executeForAll(handlePokemon); diff --git a/src/phases/turn-start-phase.ts b/src/phases/turn-start-phase.ts index 622b9cdcbd1..b802780bbb8 100644 --- a/src/phases/turn-start-phase.ts +++ b/src/phases/turn-start-phase.ts @@ -72,19 +72,16 @@ export class TurnStartPhase extends FieldPhase { // This occurs before the main loop because of battles with more than two Pokemon const battlerBypassSpeed = {}; - globalScene - .getField(true) - .filter(p => p.summonData) - .map(p => { - const bypassSpeed = new BooleanHolder(false); - const canCheckHeldItems = new BooleanHolder(true); - applyAbAttrs(BypassSpeedChanceAbAttr, p, null, false, bypassSpeed); - applyAbAttrs(PreventBypassSpeedChanceAbAttr, p, null, false, bypassSpeed, canCheckHeldItems); - if (canCheckHeldItems.value) { - globalScene.applyModifiers(BypassSpeedChanceModifier, p.isPlayer(), p, bypassSpeed); - } - battlerBypassSpeed[p.getBattlerIndex()] = bypassSpeed; - }); + globalScene.getField(true).map(p => { + const bypassSpeed = new BooleanHolder(false); + const canCheckHeldItems = new BooleanHolder(true); + applyAbAttrs(BypassSpeedChanceAbAttr, p, null, false, bypassSpeed); + applyAbAttrs(PreventBypassSpeedChanceAbAttr, p, null, false, bypassSpeed, canCheckHeldItems); + if (canCheckHeldItems.value) { + globalScene.applyModifiers(BypassSpeedChanceModifier, p.isPlayer(), p, bypassSpeed); + } + battlerBypassSpeed[p.getBattlerIndex()] = bypassSpeed; + }); // The function begins sorting orderedTargets based on command priority, move priority, and possible speed bypasses. // Non-FIGHT commands (SWITCH, BALL, RUN) have a higher command priority and will always occur before any FIGHT commands. diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 8573c774054..e200fa6b3c7 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -1145,7 +1145,7 @@ export class GameData { ? trainerConfig?.doubleOnly || sessionData.trainer?.variant === TrainerVariant.DOUBLE : sessionData.enemyParty.length > 1, mysteryEncounterType, - )!; // TODO: is this bang correct? + ); battle.enemyLevels = sessionData.enemyParty.map(p => p.level); globalScene.arena.init(); @@ -1198,13 +1198,16 @@ export class GameData { } } + if (globalScene.modifiers.length) { + console.warn("Existing modifiers not cleared on session load, deleting..."); + globalScene.modifiers = []; + } for (const modifierData of sessionData.modifiers) { const modifier = modifierData.toModifier(Modifier[modifierData.className]); if (modifier) { globalScene.addModifier(modifier, true); } } - globalScene.updateModifiers(true); for (const enemyModifierData of sessionData.enemyModifiers) { @@ -1342,68 +1345,67 @@ export class GameData { } parseSessionData(dataStr: string): SessionSaveData { + // TODO: Add `null`/`undefined` to the corresponding type signatures for this + // (or prevent them from being null) + // If the value is able to *not exist*, it should say so in the code const sessionData = JSON.parse(dataStr, (k: string, v: any) => { - if (k === "party" || k === "enemyParty") { - const ret: PokemonData[] = []; - if (v === null) { - v = []; - } - for (const pd of v) { - ret.push(new PokemonData(pd)); - } - return ret; - } - - if (k === "trainer") { - return v ? new TrainerData(v) : null; - } - - if (k === "modifiers" || k === "enemyModifiers") { - const player = k === "modifiers"; - const ret: PersistentModifierData[] = []; - if (v === null) { - v = []; - } - for (const md of v) { - if (md?.className === "ExpBalanceModifier") { - // Temporarily limit EXP Balance until it gets reworked - md.stackCount = Math.min(md.stackCount, 4); + // TODO: Add pre-parse migrate scripts + switch (k) { + case "party": + case "enemyParty": { + const ret: PokemonData[] = []; + for (const pd of v ?? []) { + ret.push(new PokemonData(pd)); } - if ( - (md instanceof Modifier.EnemyAttackStatusEffectChanceModifier && md.effect === StatusEffect.FREEZE) || - md.effect === StatusEffect.SLEEP - ) { - continue; + return ret; + } + + case "trainer": + return v ? new TrainerData(v) : null; + + case "modifiers": + case "enemyModifiers": { + const ret: PersistentModifierData[] = []; + for (const md of v ?? []) { + if (md?.className === "ExpBalanceModifier") { + // Temporarily limit EXP Balance until it gets reworked + md.stackCount = Math.min(md.stackCount, 4); + } + + if ( + md instanceof Modifier.EnemyAttackStatusEffectChanceModifier && + (md.effect === StatusEffect.FREEZE || md.effect === StatusEffect.SLEEP) + ) { + // Discard any old "sleep/freeze chance tokens". + // TODO: make this migrate script + continue; + } + + ret.push(new PersistentModifierData(md, k === "modifiers")); } - ret.push(new PersistentModifierData(md, player)); + return ret; } - return ret; - } - if (k === "arena") { - return new ArenaData(v); - } + case "arena": + return new ArenaData(v); - if (k === "challenges") { - const ret: ChallengeData[] = []; - if (v === null) { - v = []; + case "challenges": { + const ret: ChallengeData[] = []; + for (const c of v ?? []) { + ret.push(new ChallengeData(c)); + } + return ret; } - for (const c of v) { - ret.push(new ChallengeData(c)); - } - return ret; - } - if (k === "mysteryEncounterType") { - return v as MysteryEncounterType; - } + case "mysteryEncounterType": + return v as MysteryEncounterType; - if (k === "mysteryEncounterSaveData") { - return new MysteryEncounterSaveData(v); - } + case "mysteryEncounterSaveData": + return new MysteryEncounterSaveData(v); - return v; + default: + return v; + } }) as SessionSaveData; applySessionVersionMigration(sessionData); @@ -1456,7 +1458,7 @@ export class GameData { encrypt(JSON.stringify(sessionData), bypassLogin), ); - console.debug("Session data saved"); + console.debug("Session data saved!"); if (!bypassLogin && sync) { pokerogueApi.savedata.updateAll(request).then(error => { diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index 00baad8cf12..7e71dffde5e 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -1,16 +1,15 @@ import { BattleType } from "#enums/battle-type"; import { globalScene } from "#app/global-scene"; import type { Gender } from "../data/gender"; -import type { Nature } from "#enums/nature"; -import type { PokeballType } from "#enums/pokeball"; +import { Nature } from "#enums/nature"; +import { PokeballType } from "#enums/pokeball"; import { getPokemonSpecies, getPokemonSpeciesForm } from "../data/pokemon-species"; -import { Status } from "../data/status-effect"; -import Pokemon, { EnemyPokemon, PokemonMove, PokemonSummonData } from "../field/pokemon"; +import type { Status } from "../data/status-effect"; +import Pokemon, { EnemyPokemon, PokemonBattleData, PokemonMove, PokemonSummonData } from "../field/pokemon"; import { TrainerSlot } from "#enums/trainer-slot"; import type { Variant } from "#app/sprites/variant"; -import { loadBattlerTag } from "../data/battler-tags"; import type { Biome } from "#enums/biome"; -import { Moves } from "#enums/moves"; +import type { Moves } from "#enums/moves"; import type { Species } from "#enums/species"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import type { PokemonType } from "#enums/pokemon-type"; @@ -60,79 +59,66 @@ export default class PokemonData { public fusionTeraType: PokemonType; public boss: boolean; - public bossSegments?: number; + public bossSegments: number; + // Effects that need to be preserved between waves public summonData: PokemonSummonData; + public battleData: PokemonBattleData; public summonDataSpeciesFormIndex: number; - /** Data that can customize a Pokemon in non-standard ways from its Species */ public customPokemonData: CustomPokemonData; public fusionCustomPokemonData: CustomPokemonData; // Deprecated attributes, needed for now to allow SessionData migration (see PR#4619 comments) + // TODO: Remove these once pre-session migration is implemented public natureOverride: Nature | -1; public mysteryEncounterPokemonData: CustomPokemonData | null; public fusionMysteryEncounterPokemonData: CustomPokemonData | null; - constructor(source: Pokemon | any, forHistory = false) { - const sourcePokemon = source instanceof Pokemon ? source : null; + /** + * Construct a new {@linkcode PokemonData} instance out of a {@linkcode Pokemon} + * or JSON representation thereof. + * @param source The {@linkcode Pokemon} to convert into data (or a JSON object representing one) + */ + // TODO: Remove any from type signature in favor of 2 separate method funcs + constructor(source: Pokemon | any) { + const sourcePokemon = source instanceof Pokemon ? source : undefined; + this.id = source.id; - this.player = sourcePokemon ? sourcePokemon.isPlayer() : source.player; - this.species = sourcePokemon ? sourcePokemon.species.speciesId : source.species; - this.nickname = sourcePokemon - ? (!!sourcePokemon.summonData?.illusion ? sourcePokemon.summonData.illusion.basePokemon.nickname : sourcePokemon.nickname) - : source.nickname; + this.player = sourcePokemon?.isPlayer() ?? source.player; + this.species = sourcePokemon?.species.speciesId ?? source.species; + this.nickname = sourcePokemon?.summonData.illusion?.basePokemon.nickname ?? source.nickname; this.formIndex = Math.max(Math.min(source.formIndex, getPokemonSpecies(this.species).forms.length - 1), 0); this.abilityIndex = source.abilityIndex; this.passive = source.passive; - this.shiny = sourcePokemon ? sourcePokemon.isShiny() : source.shiny; - this.variant = sourcePokemon ? sourcePokemon.getVariant() : source.variant; - this.pokeball = source.pokeball; + this.shiny = sourcePokemon?.isShiny() ?? source.shiny; + this.variant = sourcePokemon?.getVariant() ?? source.variant; + this.pokeball = source.pokeball ?? PokeballType.POKEBALL; this.level = source.level; this.exp = source.exp; - if (!forHistory) { - this.levelExp = source.levelExp; - } + this.levelExp = source.levelExp; this.gender = source.gender; - if (!forHistory) { - this.hp = source.hp; - } + this.hp = source.hp; this.stats = source.stats; this.ivs = source.ivs; - this.nature = source.nature !== undefined ? source.nature : (0 as Nature); - this.friendship = - source.friendship !== undefined ? source.friendship : getPokemonSpecies(this.species).baseFriendship; + + // TODO: Can't we move some of this verification stuff to an upgrade script? + this.nature = source.nature ?? Nature.HARDY; + this.moveset = source.moveset.map((m: any) => PokemonMove.loadMove(m)); + this.status = source.status ?? null; + this.friendship = source.friendship ?? getPokemonSpecies(this.species).baseFriendship; this.metLevel = source.metLevel || 5; - this.metBiome = source.metBiome !== undefined ? source.metBiome : -1; + this.metBiome = source.metBiome ?? -1; this.metSpecies = source.metSpecies; this.metWave = source.metWave ?? (this.metBiome === -1 ? -1 : 0); - this.luck = source.luck !== undefined ? source.luck : source.shiny ? source.variant + 1 : 0; - if (!forHistory) { - this.pauseEvolutions = !!source.pauseEvolutions; - this.evoCounter = source.evoCounter ?? 0; - } + this.luck = source.luck ?? (source.shiny ? source.variant + 1 : 0); + this.pauseEvolutions = !!source.pauseEvolutions; this.pokerus = !!source.pokerus; - this.teraType = source.teraType as PokemonType; - this.isTerastallized = source.isTerastallized || false; - this.stellarTypesBoosted = source.stellarTypesBoosted || []; - - this.fusionSpecies = sourcePokemon ? sourcePokemon.fusionSpecies?.speciesId : source.fusionSpecies; - this.fusionFormIndex = source.fusionFormIndex; - this.fusionAbilityIndex = source.fusionAbilityIndex; - this.fusionShiny = sourcePokemon - ? (!!sourcePokemon.summonData?.illusion ? sourcePokemon.summonData.illusion.basePokemon.fusionShiny : sourcePokemon.fusionShiny) - : source.fusionShiny; - this.fusionVariant = sourcePokemon - ? (!!sourcePokemon.summonData?.illusion ? sourcePokemon.summonData.illusion.basePokemon.fusionVariant : sourcePokemon.fusionVariant) - : source.fusionVariant; - this.fusionGender = source.fusionGender; - this.fusionLuck = - source.fusionLuck !== undefined ? source.fusionLuck : source.fusionShiny ? source.fusionVariant + 1 : 0; - this.fusionCustomPokemonData = new CustomPokemonData(source.fusionCustomPokemonData); - this.fusionTeraType = (source.fusionTeraType ?? 0) as PokemonType; this.usedTMs = source.usedTMs ?? []; - - this.customPokemonData = new CustomPokemonData(source.customPokemonData); + this.evoCounter = source.evoCounter ?? 0; + this.teraType = source.teraType as PokemonType; + this.isTerastallized = !!source.isTerastallized; + this.stellarTypesBoosted = source.stellarTypesBoosted ?? []; // Deprecated, but needed for session data migration this.natureOverride = source.natureOverride; @@ -143,52 +129,25 @@ export default class PokemonData { ? new CustomPokemonData(source.fusionMysteryEncounterPokemonData) : null; - if (!forHistory) { - this.boss = (source instanceof EnemyPokemon && !!source.bossSegments) || (!this.player && !!source.boss); - this.bossSegments = source.bossSegments; - } + this.fusionSpecies = sourcePokemon?.fusionSpecies?.speciesId ?? source.fusionSpecies; + this.fusionFormIndex = source.fusionFormIndex; + this.fusionAbilityIndex = source.fusionAbilityIndex; + this.fusionShiny = sourcePokemon?.summonData.illusion?.basePokemon.fusionShiny ?? source.fusionShiny; + this.fusionVariant = sourcePokemon?.summonData.illusion?.basePokemon.fusionVariant ?? source.fusionVariant; + this.fusionGender = source.fusionGender; + this.fusionLuck = source.fusionLuck ?? (source.fusionShiny ? source.fusionVariant + 1 : 0); + this.fusionTeraType = (source.fusionTeraType ?? 0) as PokemonType; - if (sourcePokemon) { - this.moveset = sourcePokemon.moveset; - if (!forHistory) { - this.status = sourcePokemon.status; - if (this.player && sourcePokemon.summonData) { - this.summonData = sourcePokemon.summonData; - this.summonDataSpeciesFormIndex = this.getSummonDataSpeciesFormIndex(); - } - } - } else { - this.moveset = (source.moveset || [new PokemonMove(Moves.TACKLE), new PokemonMove(Moves.GROWL)]) - .filter(m => m) - .map((m: any) => new PokemonMove(m.moveId, m.ppUsed, m.ppUp, m.virtual, m.maxPpOverride)); - if (!forHistory) { - this.status = source.status - ? new Status(source.status.effect, source.status.toxicTurnCount, source.status.sleepTurnsRemaining) - : null; - } + this.boss = (source instanceof EnemyPokemon && !!source.bossSegments) || (!this.player && !!source.boss); + this.bossSegments = source.bossSegments ?? 0; - this.summonData = new PokemonSummonData(); - if (!forHistory && source.summonData) { - this.summonData.stats = source.summonData.stats; - this.summonData.statStages = source.summonData.statStages; - this.summonData.moveQueue = source.summonData.moveQueue; - this.summonData.abilitySuppressed = source.summonData.abilitySuppressed; - this.summonData.abilitiesApplied = source.summonData.abilitiesApplied; + this.summonData = new PokemonSummonData(source.summonData); + this.battleData = new PokemonBattleData(source.battleData); + this.summonDataSpeciesFormIndex = + sourcePokemon?.summonData.speciesForm?.formIndex ?? source.summonDataSpeciesFormIndex; - this.summonData.ability = source.summonData.ability; - this.summonData.moveset = source.summonData.moveset?.map(m => PokemonMove.loadMove(m)); - this.summonData.types = source.summonData.types; - this.summonData.speciesForm = source.summonData.speciesForm; - this.summonDataSpeciesFormIndex = source.summonDataSpeciesFormIndex; - this.summonData.illusionBroken = source.summonData.illusionBroken; - - if (source.summonData.tags) { - this.summonData.tags = source.summonData.tags?.map(t => loadBattlerTag(t)); - } else { - this.summonData.tags = []; - } - } - } + this.customPokemonData = new CustomPokemonData(source.customPokemonData); + this.fusionCustomPokemonData = new CustomPokemonData(source.fusionCustomPokemonData); } toPokemon(battleType?: BattleType, partyMemberIndex = 0, double = false): Pokemon { @@ -223,30 +182,15 @@ export default class PokemonData { false, this, ); - if (this.summonData) { - // when loading from saved session, recover summonData.speciesFrom and form index species object - // used to stay transformed on reload session - if (this.summonData.speciesForm) { - this.summonData.speciesForm = getPokemonSpeciesForm( - this.summonData.speciesForm.speciesId, - this.summonDataSpeciesFormIndex, - ); - } - ret.primeSummonData(this.summonData); + // when loading from saved session, recover summonData.speciesFrom and form index species object + // used to stay transformed on reload session + if (this.summonData.speciesForm) { + this.summonData.speciesForm = getPokemonSpeciesForm( + this.summonData.speciesForm.speciesId, + this.summonDataSpeciesFormIndex, + ); } return ret; } - - /** - * Method to save summon data species form index - * Necessary in case the pokemon is transformed - * to reload the correct form - */ - getSummonDataSpeciesFormIndex(): number { - if (this.summonData.speciesForm) { - return this.summonData.speciesForm.formIndex; - } - return 0; - } } diff --git a/src/system/version_migration/version_converter.ts b/src/system/version_migration/version_converter.ts index 1fdb9e93f88..798115e0395 100644 --- a/src/system/version_migration/version_converter.ts +++ b/src/system/version_migration/version_converter.ts @@ -59,6 +59,10 @@ import * as v1_7_0 from "./versions/v1_7_0"; // biome-ignore lint/style/noNamespaceImport: Convenience import * as v1_8_3 from "./versions/v1_8_3"; +// --- v1.9.0 PATCHES --- // +// biome-ignore lint/style/noNamespaceImport: Convenience +import * as v1_9_0 from "./versions/v1_9_0"; + /** Current game version */ const LATEST_VERSION = version; @@ -80,6 +84,7 @@ systemMigrators.push(...v1_8_3.systemMigrators); const sessionMigrators: SessionSaveMigrator[] = []; sessionMigrators.push(...v1_0_4.sessionMigrators); sessionMigrators.push(...v1_7_0.sessionMigrators); +sessionMigrators.push(...v1_9_0.sessionMigrators); /** All settings migrators */ const settingsMigrators: SettingsSaveMigrator[] = []; diff --git a/src/system/version_migration/versions/v1_9_0.ts b/src/system/version_migration/versions/v1_9_0.ts new file mode 100644 index 00000000000..9505a7138f8 --- /dev/null +++ b/src/system/version_migration/versions/v1_9_0.ts @@ -0,0 +1,47 @@ +import type { SessionSaveMigrator } from "#app/@types/SessionSaveMigrator"; +import { Status } from "#app/data/status-effect"; +import { PokemonMove } from "#app/field/pokemon"; +import type { SessionSaveData } from "#app/system/game-data"; +import type PokemonData from "#app/system/pokemon-data"; +import { Moves } from "#enums/moves"; + +/** + * Migrate all lingering rage fist data inside `CustomPokemonData`, + * as well as enforcing default values across the board. + * @param data - {@linkcode SystemSaveData} + */ +const migratePartyData: SessionSaveMigrator = { + version: "1.9.0", + migrate: (data: SessionSaveData): void => { + // this stuff is copied straight from the constructor fwiw + const mapParty = (pkmnData: PokemonData) => { + pkmnData.status &&= new Status( + pkmnData.status.effect, + pkmnData.status.toxicTurnCount, + pkmnData.status.sleepTurnsRemaining, + ); + // remove empty moves from moveset + pkmnData.moveset = (pkmnData.moveset ?? [new PokemonMove(Moves.TACKLE), new PokemonMove(Moves.GROWL)]) + .filter(m => !!m) + .map(m => PokemonMove.loadMove(m)); + // only edit summondata moveset if exists + pkmnData.summonData.moveset &&= pkmnData.summonData.moveset.filter(m => !!m).map(m => PokemonMove.loadMove(m)); + + if ( + pkmnData.customPokemonData && + "hitsRecCount" in pkmnData.customPokemonData && + typeof pkmnData.customPokemonData["hitsRecCount"] === "number" + ) { + // transfer old hit count stat to battleData. + pkmnData.battleData.hitCount = pkmnData.customPokemonData["hitsRecCount"]; + pkmnData.customPokemonData["hitsRecCount"] = null; + } + return pkmnData; + }; + + data.party = data.party.map(mapParty); + data.enemyParty = data.enemyParty.map(mapParty); + }, +}; + +export const sessionMigrators: Readonly = [migratePartyData] as const; diff --git a/src/ui/battle-info.ts b/src/ui/battle-info.ts index 99a91a9330e..cabe897d7b6 100644 --- a/src/ui/battle-info.ts +++ b/src/ui/battle-info.ts @@ -617,7 +617,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { return resolve(); } - const gender: Gender = pokemon.summonData?.illusion ? pokemon.summonData?.illusion.gender : pokemon.gender; + const gender = pokemon.summonData.illusion?.gender ?? pokemon.gender; this.genderText.setText(getGenderSymbol(gender)); this.genderText.setColor(getGenderColor(gender)); @@ -794,7 +794,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { const nameSizeTest = addTextObject(0, 0, displayName, TextStyle.BATTLE_INFO); nameTextWidth = nameSizeTest.displayWidth; - const gender: Gender = pokemon.summonData?.illusion ? pokemon.summonData?.illusion.gender : pokemon.gender; + const gender = pokemon.summonData.illusion?.gender ?? pokemon.gender; while ( nameTextWidth > (this.player || !this.boss ? 60 : 98) - diff --git a/src/ui/fight-ui-handler.ts b/src/ui/fight-ui-handler.ts index e0a73d62934..5a0978a934d 100644 --- a/src/ui/fight-ui-handler.ts +++ b/src/ui/fight-ui-handler.ts @@ -127,7 +127,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { messageHandler.commandWindow.setVisible(false); messageHandler.movesWindowContainer.setVisible(true); const pokemon = (globalScene.getCurrentPhase() as CommandPhase).getPokemon(); - if (pokemon.battleSummonData.turnCount <= 1) { + if (pokemon.tempSummonData.turnCount <= 1) { this.setCursor(0); } else { this.setCursor(this.getCursor()); @@ -305,7 +305,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { const effectiveness = opponent.getMoveEffectiveness( pokemon, pokemonMove.getMove(), - !opponent.battleData?.abilityRevealed, + !opponent.waveData.abilityRevealed, undefined, undefined, true, @@ -356,7 +356,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { opponent.getMoveEffectiveness( pokemon, pokemonMove.getMove(), - !opponent.battleData.abilityRevealed, + !opponent.waveData.abilityRevealed, undefined, undefined, true, diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 7c3689e757c..6e947796d63 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -1581,7 +1581,7 @@ class PartySlot extends Phaser.GameObjects.Container { fusionShinyStar.setOrigin(0, 0); fusionShinyStar.setPosition(shinyStar.x, shinyStar.y); fusionShinyStar.setTint( - getVariantTint(this.pokemon.summonData?.illusion?.basePokemon.fusionVariant ?? this.pokemon.fusionVariant), + getVariantTint(this.pokemon.summonData.illusion?.basePokemon.fusionVariant ?? this.pokemon.fusionVariant), ); slotInfoContainer.add(fusionShinyStar); diff --git a/src/ui/registration-form-ui-handler.ts b/src/ui/registration-form-ui-handler.ts index 3d4613c21d6..a60a53a8e7a 100644 --- a/src/ui/registration-form-ui-handler.ts +++ b/src/ui/registration-form-ui-handler.ts @@ -102,9 +102,9 @@ export default class RegistrationFormUiHandler extends FormModalUiHandler { // Prevent overlapping overrides on action modification this.submitAction = originalRegistrationAction; this.sanitizeInputs(); - globalScene.ui.setMode(UiMode.LOADING, { buttonActions: [] }); + globalScene.ui.setMode(UiMode.LOADING, { buttonActions: [] }); const onFail = error => { - globalScene.ui.setMode(UiMode.REGISTRATION_FORM, Object.assign(config, { errorMessage: error?.trim() })); + globalScene.ui.setMode(UiMode.REGISTRATION_FORM, Object.assign(config, { errorMessage: error?.trim() })); globalScene.ui.playError(); const errorMessageFontSize = languageSettings[i18next.resolvedLanguage!]?.errorMessageFontSize; if (errorMessageFontSize) { diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index 877c342651f..f93a1826b3e 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -359,15 +359,15 @@ export default class SummaryUiHandler extends UiHandler { this.pokemonSprite.setPipelineData("spriteKey", this.pokemon.getSpriteKey()); this.pokemonSprite.setPipelineData( "shiny", - this.pokemon.summonData?.illusion?.basePokemon.shiny ?? this.pokemon.shiny, + this.pokemon.summonData.illusion?.basePokemon.shiny ?? this.pokemon.shiny, ); this.pokemonSprite.setPipelineData( "variant", - this.pokemon.summonData?.illusion?.basePokemon.variant ?? this.pokemon.variant, + this.pokemon.summonData.illusion?.basePokemon.variant ?? this.pokemon.variant, ); ["spriteColors", "fusionSpriteColors"].map(k => { delete this.pokemonSprite.pipelineData[`${k}Base`]; - if (this.pokemon?.summonData?.speciesForm) { + if (this.pokemon?.summonData.speciesForm) { k += "Base"; } this.pokemonSprite.pipelineData[k] = this.pokemon?.getSprite().pipelineData[k]; @@ -462,7 +462,7 @@ export default class SummaryUiHandler extends UiHandler { this.fusionShinyIcon.setVisible(doubleShiny); if (isFusion) { this.fusionShinyIcon.setTint( - getVariantTint(this.pokemon.summonData?.illusion?.basePokemon.fusionVariant ?? this.pokemon.fusionVariant), + getVariantTint(this.pokemon.summonData.illusion?.basePokemon.fusionVariant ?? this.pokemon.fusionVariant), ); } diff --git a/src/ui/target-select-ui-handler.ts b/src/ui/target-select-ui-handler.ts index 0db2020c25a..5e14e5f7771 100644 --- a/src/ui/target-select-ui-handler.ts +++ b/src/ui/target-select-ui-handler.ts @@ -71,7 +71,7 @@ export default class TargetSelectUiHandler extends UiHandler { */ resetCursor(cursorN: number, user: Pokemon): void { if (!isNullOrUndefined(cursorN)) { - if ([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2].includes(cursorN) || user.battleSummonData.waveTurnCount === 1) { + if ([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2].includes(cursorN) || user.tempSummonData.waveTurnCount === 1) { // Reset cursor on the first turn of a fight or if an ally was targeted last turn cursorN = -1; } diff --git a/src/utils/common.ts b/src/utils/common.ts index 6984840fb5c..4cf7ceccff2 100644 --- a/src/utils/common.ts +++ b/src/utils/common.ts @@ -467,35 +467,22 @@ export function truncateString(str: string, maxLength = 10) { return str; } -/** - * Perform a deep copy of an object. - * - * @param values - The object to be deep copied. - * @returns A new object that is a deep copy of the input. - */ -export function deepCopy(values: object): object { - // Convert the object to a JSON string and parse it back to an object to perform a deep copy - return JSON.parse(JSON.stringify(values)); -} - /** * Convert a space-separated string into a capitalized and underscored string. - * * @param input - The string to be converted. * @returns The converted string with words capitalized and separated by underscores. */ -export function reverseValueToKeySetting(input) { +export function reverseValueToKeySetting(input: string) { // Split the input string into an array of words const words = input.split(" "); // Capitalize the first letter of each word and convert the rest to lowercase - const capitalizedWords = words.map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()); + const capitalizedWords = words.map((word: string) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()); // Join the capitalized words with underscores and return the result return capitalizedWords.join("_"); } /** * Capitalize a string. - * * @param str - The string to be capitalized. * @param sep - The separator between the words of the string. * @param lowerFirstChar - Whether the first character of the string should be lowercase or not. @@ -579,25 +566,3 @@ export function animationFileName(move: Moves): string { export function camelCaseToKebabCase(str: string): string { return str.replace(/[A-Z]+(?![a-z])|[A-Z]/g, (s, o) => (o ? "-" : "") + s.toLowerCase()); } - -/** - * Merges the two objects, such that for each property in `b` that matches a property in `a`, - * the value in `a` is replaced by the value in `b`. This is done recursively if the property is a non-array object - * - * If the property does not exist in `a` or its `typeof` evaluates differently, the property is skipped. - * If the value of the property is an array, the array is replaced. If it is any other object, the object is merged recursively. - */ -// biome-ignore lint/complexity/noBannedTypes: This function is designed to merge json objects -export function deepMergeObjects(a: Object, b: Object) { - for (const key in b) { - // !(key in a) is redundant here, yet makes it clear that we're explicitly interested in properties that exist in `a` - if (!(key in a) || typeof a[key] !== typeof b[key]) { - continue; - } - if (typeof b[key] === "object" && !Array.isArray(b[key])) { - deepMergeObjects(a[key], b[key]); - } else { - a[key] = b[key]; - } - } -} diff --git a/src/utils/data.ts b/src/utils/data.ts new file mode 100644 index 00000000000..33623dc5e40 --- /dev/null +++ b/src/utils/data.ts @@ -0,0 +1,40 @@ +/** + * Perform a deep copy of an object. + * @param values - The object to be deep copied. + * @returns A new object that is a deep copy of the input. + */ +export function deepCopy(values: object): object { + // Convert the object to a JSON string and parse it back to an object to perform a deep copy + return JSON.parse(JSON.stringify(values)); +} + +/** + * Deeply merge two JSON objects' common properties together. + * This copies all values from `source` that match properties inside `dest`, + * checking recursively for non-null nested objects. + + * If a property in `source` does not exist in `dest` or its `typeof` evaluates differently, it is skipped. + * If it is a non-array object, its properties are recursed into and checked in turn. + * All other values are copied verbatim. + * @param dest - The object to merge values into + * @param source - The object to source merged values from + * @remarks Do not use for regular objects; this is specifically made for JSON copying. + */ +export function deepMergeSpriteData(dest: object, source: object) { + for (const key of Object.keys(source)) { + if ( + !(key in dest) || + typeof source[key] !== typeof dest[key] || + Array.isArray(source[key]) !== Array.isArray(dest[key]) + ) { + continue; + } + + // Pure objects get recursed into; everything else gets overwritten + if (typeof source[key] !== "object" || source[key] === null || Array.isArray(source[key])) { + dest[key] = source[key]; + } else { + deepMergeSpriteData(dest[key], source[key]); + } + } +} diff --git a/test/abilities/cud_chew.test.ts b/test/abilities/cud_chew.test.ts new file mode 100644 index 00000000000..f99060cb744 --- /dev/null +++ b/test/abilities/cud_chew.test.ts @@ -0,0 +1,322 @@ +import { RepeatBerryNextTurnAbAttr } from "#app/data/abilities/ability"; +import Pokemon from "#app/field/pokemon"; +import { globalScene } from "#app/global-scene"; +import { getPokemonNameWithAffix } from "#app/messages"; +import { Abilities } from "#enums/abilities"; +import { BerryType } from "#enums/berry-type"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { Stat } from "#enums/stat"; +import GameManager from "#test/testUtils/gameManager"; +import i18next from "i18next"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Abilities - Cud Chew", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([Moves.BUG_BITE, Moves.SPLASH, Moves.HYPER_VOICE, Moves.STUFF_CHEEKS]) + .startingHeldItems([{ name: "BERRY", type: BerryType.SITRUS, count: 1 }]) + .ability(Abilities.CUD_CHEW) + .battleStyle("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + describe("tracks berries eaten", () => { + it("stores inside summonData at end of turn", async () => { + await game.classicMode.startBattle([Species.FARIGIRAF]); + + const farigiraf = game.scene.getPlayerPokemon()!; + farigiraf.hp = 1; // needed to allow sitrus procs + + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("BerryPhase"); + + // berries tracked in turnData; not moved to battleData yet + expect(farigiraf.summonData.berriesEatenLast).toEqual([]); + expect(farigiraf.turnData.berriesEaten).toEqual([BerryType.SITRUS]); + + await game.phaseInterceptor.to("TurnEndPhase"); + + // berries stored in battleData; not yet cleared from turnData + expect(farigiraf.summonData.berriesEatenLast).toEqual([BerryType.SITRUS]); + expect(farigiraf.turnData.berriesEaten).toEqual([BerryType.SITRUS]); + + await game.toNextTurn(); + + // turnData cleared on turn start + expect(farigiraf.summonData.berriesEatenLast).toEqual([BerryType.SITRUS]); + expect(farigiraf.turnData.berriesEaten).toEqual([]); + }); + + it("shows ability popup for eating berry, even if berry is useless", async () => { + const abDisplaySpy = vi.spyOn(globalScene, "queueAbilityDisplay"); + game.override.enemyMoveset([Moves.SPLASH, Moves.HEAL_PULSE]); + await game.classicMode.startBattle([Species.FARIGIRAF]); + + const farigiraf = game.scene.getPlayerPokemon()!; + // Dip below half to eat berry + farigiraf.hp = farigiraf.getMaxHp() / 2 - 1; + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.SPLASH); + await game.phaseInterceptor.to("TurnEndPhase"); + + // doesn't trigger since cud chew hasn't eaten berry yet + expect(farigiraf.summonData.berriesEatenLast).toContain(BerryType.SITRUS); + expect(abDisplaySpy).not.toHaveBeenCalledWith(farigiraf); + await game.toNextTurn(); + + // get heal pulsed back to full before the cud chew proc + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.HEAL_PULSE); + await game.phaseInterceptor.to("TurnEndPhase"); + + // globalScene.queueAbilityDisplay should be called twice: + // once to show cud chew text before regurgitating berries, + // once to hide ability text after finishing. + expect(abDisplaySpy).toBeCalledTimes(2); + expect(abDisplaySpy.mock.calls[0][0]).toBe(farigiraf); + expect(abDisplaySpy.mock.calls[0][2]).toBe(true); + expect(abDisplaySpy.mock.calls[1][0]).toBe(farigiraf); + expect(abDisplaySpy.mock.calls[1][2]).toBe(false); + + // should display messgae + expect(game.textInterceptor.getLatestMessage()).toBe( + i18next.t("battle:hpIsFull", { + pokemonName: getPokemonNameWithAffix(farigiraf), + }), + ); + + // not called again at turn end + expect(abDisplaySpy).toBeCalledTimes(2); + }); + + it("can store multiple berries across 2 turns with teatime", async () => { + // always eat first berry for stuff cheeks & company + vi.spyOn(Pokemon.prototype, "randSeedInt").mockReturnValue(0); + game.override + .startingHeldItems([ + { name: "BERRY", type: BerryType.PETAYA, count: 3 }, + { name: "BERRY", type: BerryType.LIECHI, count: 3 }, + ]) + .enemyMoveset(Moves.TEATIME); + await game.classicMode.startBattle([Species.FARIGIRAF]); + + const farigiraf = game.scene.getPlayerPokemon()!; + farigiraf.hp = 1; // needed to allow berry procs + + game.move.select(Moves.STUFF_CHEEKS); + await game.toNextTurn(); + + // Ate 2 petayas from moves + 1 of each at turn end; all 4 get tallied on turn end + expect(farigiraf.summonData.berriesEatenLast).toEqual([ + BerryType.PETAYA, + BerryType.PETAYA, + BerryType.PETAYA, + BerryType.LIECHI, + ]); + expect(farigiraf.turnData.berriesEaten).toEqual([]); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + + // previous berries eaten and deleted from summon data as remaining eaten berries move to replace them + expect(farigiraf.summonData.berriesEatenLast).toEqual([BerryType.LIECHI, BerryType.LIECHI]); + expect(farigiraf.turnData.berriesEaten).toEqual([]); + expect(farigiraf.getStatStage(Stat.SPATK)).toBe(6); // 3+0+3 + expect(farigiraf.getStatStage(Stat.ATK)).toBe(4); // 1+2+1 + }); + + it("should reset both arrays on switch", async () => { + await game.classicMode.startBattle([Species.FARIGIRAF, Species.GIRAFARIG]); + + const farigiraf = game.scene.getPlayerPokemon()!; + farigiraf.hp = 1; + + // eat berry turn 1, switch out turn 2 + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + + const turn1Hp = farigiraf.hp; + game.doSwitchPokemon(1); + await game.toNextTurn(); + + // summonData got cleared due to switch, turnData got cleared due to turn end + expect(farigiraf.summonData.berriesEatenLast).toEqual([]); + expect(farigiraf.turnData.berriesEaten).toEqual([]); + expect(farigiraf.hp).toEqual(turn1Hp); + + game.doSwitchPokemon(1); + await game.toNextTurn(); + + // TurnData gets cleared while switching in + expect(farigiraf.summonData.berriesEatenLast).toEqual([]); + expect(farigiraf.turnData.berriesEaten).toEqual([]); + expect(farigiraf.hp).toEqual(turn1Hp); + }); + + it("clears array if disabled", async () => { + game.override.enemyAbility(Abilities.NEUTRALIZING_GAS); + await game.classicMode.startBattle([Species.FARIGIRAF]); + + const farigiraf = game.scene.getPlayerPokemon()!; + farigiraf.hp = 1; + + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("BerryPhase"); + + expect(farigiraf.summonData.berriesEatenLast).toEqual([]); + expect(farigiraf.turnData.berriesEaten).toEqual([BerryType.SITRUS]); + + await game.toNextTurn(); + + // both arrays empty since neut gas disabled both the mid-turn and post-turn effects + expect(farigiraf.summonData.berriesEatenLast).toEqual([]); + expect(farigiraf.turnData.berriesEaten).toEqual([]); + }); + }); + + describe("regurgiates berries", () => { + it("re-triggers effects on eater without pushing to array", async () => { + const apply = vi.spyOn(RepeatBerryNextTurnAbAttr.prototype, "apply"); + await game.classicMode.startBattle([Species.FARIGIRAF]); + + const farigiraf = game.scene.getPlayerPokemon()!; + farigiraf.hp = 1; + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + + // ate 1 sitrus the turn prior, spitball pending + expect(farigiraf.summonData.berriesEatenLast).toEqual([BerryType.SITRUS]); + expect(farigiraf.turnData.berriesEaten).toEqual([]); + expect(apply.mock.lastCall).toBeUndefined(); + + const turn1Hp = farigiraf.hp; + + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("TurnEndPhase"); + + // healed back up to half without adding any more to array + expect(farigiraf.hp).toBeGreaterThan(turn1Hp); + expect(farigiraf.summonData.berriesEatenLast).toEqual([]); + expect(farigiraf.turnData.berriesEaten).toEqual([]); + }); + + it("bypasses unnerve", async () => { + game.override.enemyAbility(Abilities.UNNERVE); + await game.classicMode.startBattle([Species.FARIGIRAF]); + + const farigiraf = game.scene.getPlayerPokemon()!; + farigiraf.hp = 1; + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("TurnEndPhase"); + + // Turn end proc set the berriesEatenLast array back to being empty + expect(farigiraf.summonData.berriesEatenLast).toEqual([]); + expect(farigiraf.turnData.berriesEaten).toEqual([]); + expect(farigiraf.hp).toBeGreaterThanOrEqual(farigiraf.hp / 2); + }); + + it("doesn't trigger on non-eating removal", async () => { + game.override.enemyMoveset(Moves.INCINERATE); + await game.classicMode.startBattle([Species.FARIGIRAF]); + + const farigiraf = game.scene.getPlayerPokemon()!; + farigiraf.hp = farigiraf.getMaxHp() / 4; + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + + // no berries eaten due to getting cooked + expect(farigiraf.summonData.berriesEatenLast).toEqual([]); + expect(farigiraf.turnData.berriesEaten).toEqual([]); + expect(farigiraf.hp).toBeLessThan(farigiraf.getMaxHp() / 4); + }); + + it("works with pluck", async () => { + game.override + .enemySpecies(Species.BLAZIKEN) + .enemyHeldItems([{ name: "BERRY", type: BerryType.PETAYA, count: 1 }]) + .startingHeldItems([]); + await game.classicMode.startBattle([Species.FARIGIRAF]); + + const farigiraf = game.scene.getPlayerPokemon()!; + + game.move.select(Moves.BUG_BITE); + await game.toNextTurn(); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + + // berry effect triggered twice - once for bug bite, once for cud chew + expect(farigiraf.getStatStage(Stat.SPATK)).toBe(2); + }); + + it("works with Ripen", async () => { + game.override.passiveAbility(Abilities.RIPEN); + await game.classicMode.startBattle([Species.FARIGIRAF]); + + const farigiraf = game.scene.getPlayerPokemon()!; + farigiraf.hp = 1; + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + + // Rounding errors only ever cost a maximum of 4 hp + expect(farigiraf.getInverseHp()).toBeLessThanOrEqual(3); + }); + + it("is preserved on reload/wave clear", async () => { + game.override.enemyLevel(1); + await game.classicMode.startBattle([Species.FARIGIRAF]); + + const farigiraf = game.scene.getPlayerPokemon()!; + farigiraf.hp = 1; + + game.move.select(Moves.HYPER_VOICE); + await game.toNextWave(); + + // berry went yummy yummy in big fat giraffe tummy + expect(farigiraf.summonData.berriesEatenLast).toEqual([BerryType.SITRUS]); + expect(farigiraf.hp).toBeGreaterThan(1); + + // reload and the berry should still be there + await game.reload.reloadSession(); + + const farigirafReloaded = game.scene.getPlayerPokemon()!; + expect(farigirafReloaded.summonData.berriesEatenLast).toEqual([BerryType.SITRUS]); + + const wave1Hp = farigirafReloaded.hp; + + // blow up next wave and we should proc the repeat eating + game.move.select(Moves.HYPER_VOICE); + await game.toNextWave(); + + expect(farigirafReloaded.hp).toBeGreaterThan(wave1Hp); + }); + }); +}); diff --git a/test/abilities/good_as_gold.test.ts b/test/abilities/good_as_gold.test.ts index 944c1d1bca1..09bdaafb11f 100644 --- a/test/abilities/good_as_gold.test.ts +++ b/test/abilities/good_as_gold.test.ts @@ -49,7 +49,7 @@ describe("Abilities - Good As Gold", () => { await game.phaseInterceptor.to("BerryPhase"); - expect(player.battleData.abilitiesApplied[0]).toBe(Abilities.GOOD_AS_GOLD); + expect(player.waveData.abilitiesApplied).toContain(Abilities.GOOD_AS_GOLD); expect(player.getStatStage(Stat.ATK)).toBe(0); }); diff --git a/test/abilities/harvest.test.ts b/test/abilities/harvest.test.ts new file mode 100644 index 00000000000..23c0ed9088c --- /dev/null +++ b/test/abilities/harvest.test.ts @@ -0,0 +1,346 @@ +import { BattlerIndex } from "#app/battle"; +import { PostTurnRestoreBerryAbAttr } from "#app/data/abilities/ability"; +import type Pokemon from "#app/field/pokemon"; +import { BerryModifier, PreserveBerryModifier } from "#app/modifier/modifier"; +import type { ModifierOverride } from "#app/modifier/modifier-type"; +import type { BooleanHolder } from "#app/utils/common"; +import { Abilities } from "#enums/abilities"; +import { BerryType } from "#enums/berry-type"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { Stat } from "#enums/stat"; +import { WeatherType } from "#enums/weather-type"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Abilities - Harvest", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + const getPlayerBerries = () => + game.scene.getModifiers(BerryModifier, true).filter(b => b.pokemonId === game.scene.getPlayerPokemon()?.id); + + /** Check whether the player's Modifiers contains the specified berries and nothing else. */ + function expectBerriesContaining(...berries: ModifierOverride[]): void { + const actualBerries: ModifierOverride[] = getPlayerBerries().map( + // only grab berry type and quantity since that's literally all we care about + b => ({ name: "BERRY", type: b.berryType, count: b.getStackCount() }), + ); + expect(actualBerries).toEqual(berries); + } + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([Moves.SPLASH, Moves.NATURAL_GIFT, Moves.FALSE_SWIPE, Moves.GASTRO_ACID]) + .ability(Abilities.HARVEST) + .startingLevel(100) + .battleStyle("single") + .disableCrits() + .statusActivation(false) // Since we're using nuzzle to proc both enigma and sitrus berries + .weather(WeatherType.SUNNY) // guaranteed recovery + .enemyLevel(1) + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset([Moves.SPLASH, Moves.NUZZLE, Moves.KNOCK_OFF, Moves.INCINERATE]); + }); + + it("replenishes eaten berries", async () => { + game.override.startingHeldItems([{ name: "BERRY", type: BerryType.LUM, count: 1 }]); + await game.classicMode.startBattle([Species.FEEBAS]); + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.NUZZLE); + await game.phaseInterceptor.to("BerryPhase"); + expect(getPlayerBerries()).toHaveLength(0); + expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toHaveLength(1); + await game.phaseInterceptor.to("TurnEndPhase"); + + expectBerriesContaining({ name: "BERRY", type: BerryType.LUM, count: 1 }); + expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toEqual([]); + }); + + it("tracks berries eaten while disabled/not present", async () => { + // Note: this also checks for harvest not being present as neutralizing gas works by making + // the game consider all other pokemon to *not* have their respective abilities. + game.override + .startingHeldItems([ + { name: "BERRY", type: BerryType.ENIGMA, count: 2 }, + { name: "BERRY", type: BerryType.LUM, count: 2 }, + ]) + .enemyAbility(Abilities.NEUTRALIZING_GAS); + await game.classicMode.startBattle([Species.MILOTIC]); + + const milotic = game.scene.getPlayerPokemon()!; + expect(milotic).toBeDefined(); + + // Chug a few berries without harvest (should get tracked) + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.NUZZLE); + await game.toNextTurn(); + + expect(milotic.battleData.berriesEaten).toEqual(expect.arrayContaining([BerryType.ENIGMA, BerryType.LUM])); + expect(getPlayerBerries()).toHaveLength(2); + + // Give ourselves harvest and disable enemy neut gas, + // but force our roll to fail so we don't accidentally recover anything + vi.spyOn(PostTurnRestoreBerryAbAttr.prototype, "canApplyPostTurn").mockReturnValueOnce(false); + game.override.ability(Abilities.HARVEST); + game.move.select(Moves.GASTRO_ACID); + await game.forceEnemyMove(Moves.NUZZLE); + + await game.toNextTurn(); + + expect(milotic.battleData.berriesEaten).toEqual( + expect.arrayContaining([BerryType.ENIGMA, BerryType.LUM, BerryType.ENIGMA, BerryType.LUM]), + ); + expect(getPlayerBerries()).toHaveLength(0); + + // proc a high roll and we _should_ get a berry back! + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.SPLASH); + await game.toNextTurn(); + + expect(milotic.battleData.berriesEaten).toHaveLength(3); + expect(getPlayerBerries()).toHaveLength(1); + }); + + it("remembers berries eaten array across waves", async () => { + game.override + .startingHeldItems([{ name: "BERRY", type: BerryType.PETAYA, count: 2 }]) + .ability(Abilities.BALL_FETCH); // don't actually need harvest for this test + await game.classicMode.startBattle([Species.REGIELEKI]); + + const regieleki = game.scene.getPlayerPokemon()!; + regieleki.hp = 1; + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.SPLASH); + await game.doKillOpponents(); + await game.phaseInterceptor.to("TurnEndPhase"); + + // ate 1 berry without recovering (no harvest) + expect(regieleki.battleData.berriesEaten).toEqual([BerryType.PETAYA]); + expectBerriesContaining({ name: "BERRY", count: 1, type: BerryType.PETAYA }); + expect(regieleki.getStatStage(Stat.SPATK)).toBe(1); + + await game.toNextWave(); + + expect(regieleki.battleData.berriesEaten).toEqual([BerryType.PETAYA]); + expectBerriesContaining({ name: "BERRY", count: 1, type: BerryType.PETAYA }); + expect(regieleki.getStatStage(Stat.SPATK)).toBe(1); + }); + + it("keeps harvested berries across reloads", async () => { + game.override + .startingHeldItems([{ name: "BERRY", type: BerryType.PETAYA, count: 1 }]) + .moveset([Moves.SPLASH, Moves.EARTHQUAKE]) + .enemyMoveset([Moves.SUPER_FANG, Moves.HEAL_PULSE]) + .enemyAbility(Abilities.COMPOUND_EYES); + await game.classicMode.startBattle([Species.REGIELEKI]); + + const regieleki = game.scene.getPlayerPokemon()!; + regieleki.hp = regieleki.getMaxHp() / 4 + 1; + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.SUPER_FANG); + await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.toNextTurn(); + + // ate 1 berry and recovered it + expect(regieleki.battleData.berriesEaten).toEqual([]); + expect(getPlayerBerries()).toEqual([expect.objectContaining({ berryType: BerryType.PETAYA, stackCount: 1 })]); + expect(game.scene.getPlayerPokemon()?.getStatStage(Stat.SPATK)).toBe(1); + + // heal up so harvest doesn't proc and kill enemy + game.move.select(Moves.EARTHQUAKE); + await game.forceEnemyMove(Moves.HEAL_PULSE); + await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.toNextWave(); + + expectBerriesContaining({ name: "BERRY", count: 1, type: BerryType.PETAYA }); + expect(game.scene.getPlayerPokemon()?.getStatStage(Stat.SPATK)).toBe(1); + + await game.reload.reloadSession(); + + expect(regieleki.battleData.berriesEaten).toEqual([]); + expectBerriesContaining({ name: "BERRY", count: 1, type: BerryType.PETAYA }); + expect(game.scene.getPlayerPokemon()?.getStatStage(Stat.SPATK)).toBe(1); + }); + + it("cannot restore capped berries", async () => { + const initBerries: ModifierOverride[] = [ + { name: "BERRY", type: BerryType.LUM, count: 2 }, + { name: "BERRY", type: BerryType.STARF, count: 2 }, + ]; + game.override.startingHeldItems(initBerries); + await game.classicMode.startBattle([Species.FEEBAS]); + + const feebas = game.scene.getPlayerPokemon()!; + feebas.battleData.berriesEaten = [BerryType.LUM, BerryType.STARF]; + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.SPLASH); + await game.phaseInterceptor.to("BerryPhase"); + + // Force RNG roll to hit the first berry we find that matches. + // This does nothing on a success (since there'd only be a starf left to grab), + // but ensures we don't accidentally let any false positives through. + vi.spyOn(Phaser.Math.RND, "integerInRange").mockReturnValue(0); + await game.phaseInterceptor.to("TurnEndPhase"); + + // recovered a starf + expectBerriesContaining( + { name: "BERRY", type: BerryType.LUM, count: 2 }, + { name: "BERRY", type: BerryType.STARF, count: 3 }, + ); + }); + + it("does nothing if all berries are capped", async () => { + const initBerries: ModifierOverride[] = [ + { name: "BERRY", type: BerryType.LUM, count: 2 }, + { name: "BERRY", type: BerryType.STARF, count: 3 }, + ]; + game.override.startingHeldItems(initBerries); + await game.classicMode.startBattle([Species.FEEBAS]); + + const player = game.scene.getPlayerPokemon()!; + player.battleData.berriesEaten = [BerryType.LUM, BerryType.STARF]; + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.SPLASH); + await game.phaseInterceptor.to("TurnEndPhase"); + + expectBerriesContaining(...initBerries); + }); + + describe("move/ability interactions", () => { + it("cannot restore incinerated berries", async () => { + game.override.startingHeldItems([{ name: "BERRY", type: BerryType.STARF, count: 3 }]); + await game.classicMode.startBattle([Species.FEEBAS]); + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.INCINERATE); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toEqual([]); + }); + + it("cannot restore knocked off berries", async () => { + game.override.startingHeldItems([{ name: "BERRY", type: BerryType.STARF, count: 3 }]); + await game.classicMode.startBattle([Species.FEEBAS]); + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.KNOCK_OFF); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toEqual([]); + }); + + it("can restore berries eaten by Teatime", async () => { + const initBerries: ModifierOverride[] = [{ name: "BERRY", type: BerryType.STARF, count: 1 }]; + game.override.startingHeldItems(initBerries).enemyMoveset(Moves.TEATIME); + await game.classicMode.startBattle([Species.FEEBAS]); + + // nom nom the berr berr yay yay + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toEqual([]); + expectBerriesContaining(...initBerries); + }); + + it("cannot restore Plucked berries for either side", async () => { + const initBerries: ModifierOverride[] = [{ name: "BERRY", type: BerryType.PETAYA, count: 1 }]; + game.override.startingHeldItems(initBerries).enemyAbility(Abilities.HARVEST).enemyMoveset(Moves.PLUCK); + await game.classicMode.startBattle([Species.FEEBAS]); + + // gobble gobble gobble + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("BerryPhase"); + + // pluck triggers harvest for neither side + expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toEqual([]); + expect(game.scene.getEnemyPokemon()?.battleData.berriesEaten).toEqual([]); + expect(getPlayerBerries()).toEqual([]); + }); + + it("cannot restore berries preserved via Berry Pouch", async () => { + // mock berry pouch to have a 100% success rate + vi.spyOn(PreserveBerryModifier.prototype, "apply").mockImplementation( + (_pokemon: Pokemon, doPreserve: BooleanHolder): boolean => { + doPreserve.value = false; + return true; + }, + ); + + const initBerries: ModifierOverride[] = [{ name: "BERRY", type: BerryType.PETAYA, count: 1 }]; + game.override.startingHeldItems(initBerries).startingModifier([{ name: "BERRY_POUCH", count: 1 }]); + await game.classicMode.startBattle([Species.FEEBAS]); + + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("TurnEndPhase", false); + + // won't trigger harvest since we didn't lose the berry (it just doesn't ever add it to the array) + expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toEqual([]); + expectBerriesContaining(...initBerries); + }); + + it("can restore stolen berries", async () => { + const initBerries: ModifierOverride[] = [{ name: "BERRY", type: BerryType.SITRUS, count: 1 }]; + game.override.enemyHeldItems(initBerries).passiveAbility(Abilities.MAGICIAN).hasPassiveAbility(true); + await game.classicMode.startBattle([Species.MEOWSCARADA]); + + // pre damage + const player = game.scene.getPlayerPokemon()!; + player.hp = 1; + + // steal a sitrus and immediately consume it + game.move.select(Moves.FALSE_SWIPE); + await game.forceEnemyMove(Moves.SPLASH); + await game.phaseInterceptor.to("BerryPhase"); + expect(player.battleData.berriesEaten).toEqual([BerryType.SITRUS]); + + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(player.battleData.berriesEaten).toEqual([]); + expectBerriesContaining(...initBerries); + }); + + // TODO: Enable once fling actually works...??? + it.todo("can restore berries flung at user", async () => { + game.override.enemyHeldItems([{ name: "BERRY", type: BerryType.STARF, count: 1 }]).enemyMoveset(Moves.FLING); + await game.classicMode.startBattle([Species.FEEBAS]); + + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toBe([]); + expect(getPlayerBerries()).toEqual([]); + }); + + // TODO: Enable once Nat Gift gets implemented...??? + it.todo("can restore berries consumed via Natural Gift", async () => { + const initBerries: ModifierOverride[] = [{ name: "BERRY", type: BerryType.STARF, count: 1 }]; + game.override.startingHeldItems(initBerries); + await game.classicMode.startBattle([Species.FEEBAS]); + + game.move.select(Moves.NATURAL_GIFT); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toHaveLength(0); + expectBerriesContaining(...initBerries); + }); + }); +}); diff --git a/test/abilities/illusion.test.ts b/test/abilities/illusion.test.ts index 1d8ce58ab38..998d29f169c 100644 --- a/test/abilities/illusion.test.ts +++ b/test/abilities/illusion.test.ts @@ -38,8 +38,8 @@ describe("Abilities - Illusion", () => { const zoroark = game.scene.getPlayerPokemon()!; const zorua = game.scene.getEnemyPokemon()!; - expect(!!zoroark.summonData?.illusion).equals(true); - expect(!!zorua.summonData?.illusion).equals(true); + expect(!!zoroark.summonData.illusion).equals(true); + expect(!!zorua.summonData.illusion).equals(true); }); it("break after receiving damaging move", async () => { @@ -50,7 +50,7 @@ describe("Abilities - Illusion", () => { const zorua = game.scene.getEnemyPokemon()!; - expect(!!zorua.summonData?.illusion).equals(false); + expect(!!zorua.summonData.illusion).equals(false); expect(zorua.name).equals("Zorua"); }); @@ -62,7 +62,7 @@ describe("Abilities - Illusion", () => { const zorua = game.scene.getEnemyPokemon()!; - expect(!!zorua.summonData?.illusion).equals(false); + expect(!!zorua.summonData.illusion).equals(false); }); it("break with neutralizing gas", async () => { @@ -71,7 +71,7 @@ describe("Abilities - Illusion", () => { const zorua = game.scene.getEnemyPokemon()!; - expect(!!zorua.summonData?.illusion).equals(false); + expect(!!zorua.summonData.illusion).equals(false); }); it("causes enemy AI to consider the illusion's type instead of the actual type when considering move effectiveness", async () => { @@ -116,7 +116,7 @@ describe("Abilities - Illusion", () => { const zoroark = game.scene.getPlayerPokemon()!; - expect(!!zoroark.summonData?.illusion).equals(true); + expect(!!zoroark.summonData.illusion).equals(true); }); it("copies the the name, nickname, gender, shininess, and pokeball from the illusion source", async () => { diff --git a/test/abilities/infiltrator.test.ts b/test/abilities/infiltrator.test.ts index 48671e54020..1a9f802dd9c 100644 --- a/test/abilities/infiltrator.test.ts +++ b/test/abilities/infiltrator.test.ts @@ -68,7 +68,7 @@ describe("Abilities - Infiltrator", () => { const postScreenDmg = enemy.getAttackDamage({ source: player, move: allMoves[move] }).damage; expect(postScreenDmg).toBe(preScreenDmg); - expect(player.battleData.abilitiesApplied[0]).toBe(Abilities.INFILTRATOR); + expect(player.waveData.abilitiesApplied).toContain(Abilities.INFILTRATOR); }); it("should bypass the target's Safeguard", async () => { @@ -83,7 +83,7 @@ describe("Abilities - Infiltrator", () => { await game.phaseInterceptor.to("BerryPhase", false); expect(enemy.status?.effect).toBe(StatusEffect.SLEEP); - expect(player.battleData.abilitiesApplied[0]).toBe(Abilities.INFILTRATOR); + expect(player.waveData.abilitiesApplied).toContain(Abilities.INFILTRATOR); }); // TODO: fix this interaction to pass this test @@ -99,7 +99,7 @@ describe("Abilities - Infiltrator", () => { await game.phaseInterceptor.to("MoveEndPhase"); expect(enemy.getStatStage(Stat.ATK)).toBe(-1); - expect(player.battleData.abilitiesApplied[0]).toBe(Abilities.INFILTRATOR); + expect(player.waveData.abilitiesApplied).toContain(Abilities.INFILTRATOR); }); it("should bypass the target's Substitute", async () => { @@ -114,6 +114,6 @@ describe("Abilities - Infiltrator", () => { await game.phaseInterceptor.to("MoveEndPhase"); expect(enemy.getStatStage(Stat.ATK)).toBe(-1); - expect(player.battleData.abilitiesApplied[0]).toBe(Abilities.INFILTRATOR); + expect(player.waveData.abilitiesApplied).toContain(Abilities.INFILTRATOR); }); }); diff --git a/test/abilities/libero.test.ts b/test/abilities/libero.test.ts index 2e3668813c5..4adb828180e 100644 --- a/test/abilities/libero.test.ts +++ b/test/abilities/libero.test.ts @@ -67,7 +67,7 @@ describe("Abilities - Libero", () => { game.move.select(Moves.AGILITY); await game.phaseInterceptor.to(TurnEndPhase); - expect(leadPokemon.summonData.abilitiesApplied.filter(a => a === Abilities.LIBERO)).toHaveLength(1); + expect(leadPokemon.waveData.abilitiesApplied).toContain(Abilities.LIBERO); const leadPokemonType = PokemonType[leadPokemon.getTypes()[0]]; const moveType = PokemonType[allMoves[Moves.AGILITY].type]; expect(leadPokemonType).not.toBe(moveType); @@ -99,7 +99,7 @@ describe("Abilities - Libero", () => { game.move.select(Moves.WEATHER_BALL); await game.phaseInterceptor.to(TurnEndPhase); - expect(leadPokemon.summonData.abilitiesApplied).toContain(Abilities.LIBERO); + expect(leadPokemon.waveData.abilitiesApplied).toContain(Abilities.LIBERO); expect(leadPokemon.getTypes()).toHaveLength(1); const leadPokemonType = PokemonType[leadPokemon.getTypes()[0]], moveType = PokemonType[PokemonType.FIRE]; @@ -118,7 +118,7 @@ describe("Abilities - Libero", () => { game.move.select(Moves.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); - expect(leadPokemon.summonData.abilitiesApplied).toContain(Abilities.LIBERO); + expect(leadPokemon.waveData.abilitiesApplied).toContain(Abilities.LIBERO); expect(leadPokemon.getTypes()).toHaveLength(1); const leadPokemonType = PokemonType[leadPokemon.getTypes()[0]], moveType = PokemonType[PokemonType.ICE]; @@ -214,7 +214,7 @@ describe("Abilities - Libero", () => { game.move.select(Moves.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); - expect(leadPokemon.summonData.abilitiesApplied).not.toContain(Abilities.LIBERO); + expect(leadPokemon.waveData.abilitiesApplied).not.toContain(Abilities.LIBERO); }); test("ability is not applied if pokemon is terastallized", async () => { @@ -230,7 +230,7 @@ describe("Abilities - Libero", () => { game.move.select(Moves.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); - expect(leadPokemon.summonData.abilitiesApplied).not.toContain(Abilities.LIBERO); + expect(leadPokemon.waveData.abilitiesApplied).not.toContain(Abilities.LIBERO); }); test("ability is not applied if pokemon uses struggle", async () => { @@ -244,7 +244,7 @@ describe("Abilities - Libero", () => { game.move.select(Moves.STRUGGLE); await game.phaseInterceptor.to(TurnEndPhase); - expect(leadPokemon.summonData.abilitiesApplied).not.toContain(Abilities.LIBERO); + expect(leadPokemon.waveData.abilitiesApplied).not.toContain(Abilities.LIBERO); }); test("ability is not applied if the pokemon's move fails", async () => { @@ -258,7 +258,7 @@ describe("Abilities - Libero", () => { game.move.select(Moves.BURN_UP); await game.phaseInterceptor.to(TurnEndPhase); - expect(leadPokemon.summonData.abilitiesApplied).not.toContain(Abilities.LIBERO); + expect(leadPokemon.waveData.abilitiesApplied).not.toContain(Abilities.LIBERO); }); test("ability applies correctly even if the pokemon's Trick-or-Treat fails", async () => { @@ -293,7 +293,7 @@ describe("Abilities - Libero", () => { }); function testPokemonTypeMatchesDefaultMoveType(pokemon: PlayerPokemon, move: Moves) { - expect(pokemon.summonData.abilitiesApplied).toContain(Abilities.LIBERO); + expect(pokemon.waveData.abilitiesApplied).toContain(Abilities.LIBERO); expect(pokemon.getTypes()).toHaveLength(1); const pokemonType = PokemonType[pokemon.getTypes()[0]], moveType = PokemonType[allMoves[move].type]; diff --git a/test/abilities/protean.test.ts b/test/abilities/protean.test.ts index efa6f33fe00..8f7633e1327 100644 --- a/test/abilities/protean.test.ts +++ b/test/abilities/protean.test.ts @@ -67,7 +67,7 @@ describe("Abilities - Protean", () => { game.move.select(Moves.AGILITY); await game.phaseInterceptor.to(TurnEndPhase); - expect(leadPokemon.summonData.abilitiesApplied.filter(a => a === Abilities.PROTEAN)).toHaveLength(1); + expect(leadPokemon.waveData.abilitiesApplied).toContain(Abilities.PROTEAN); const leadPokemonType = PokemonType[leadPokemon.getTypes()[0]]; const moveType = PokemonType[allMoves[Moves.AGILITY].type]; expect(leadPokemonType).not.toBe(moveType); @@ -99,7 +99,7 @@ describe("Abilities - Protean", () => { game.move.select(Moves.WEATHER_BALL); await game.phaseInterceptor.to(TurnEndPhase); - expect(leadPokemon.summonData.abilitiesApplied).toContain(Abilities.PROTEAN); + expect(leadPokemon.waveData.abilitiesApplied).toContain(Abilities.PROTEAN); expect(leadPokemon.getTypes()).toHaveLength(1); const leadPokemonType = PokemonType[leadPokemon.getTypes()[0]], moveType = PokemonType[PokemonType.FIRE]; @@ -118,7 +118,7 @@ describe("Abilities - Protean", () => { game.move.select(Moves.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); - expect(leadPokemon.summonData.abilitiesApplied).toContain(Abilities.PROTEAN); + expect(leadPokemon.waveData.abilitiesApplied).toContain(Abilities.PROTEAN); expect(leadPokemon.getTypes()).toHaveLength(1); const leadPokemonType = PokemonType[leadPokemon.getTypes()[0]], moveType = PokemonType[PokemonType.ICE]; @@ -214,7 +214,7 @@ describe("Abilities - Protean", () => { game.move.select(Moves.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); - expect(leadPokemon.summonData.abilitiesApplied).not.toContain(Abilities.PROTEAN); + expect(leadPokemon.waveData.abilitiesApplied).not.toContain(Abilities.PROTEAN); }); test("ability is not applied if pokemon is terastallized", async () => { @@ -230,7 +230,7 @@ describe("Abilities - Protean", () => { game.move.select(Moves.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); - expect(leadPokemon.summonData.abilitiesApplied).not.toContain(Abilities.PROTEAN); + expect(leadPokemon.waveData.abilitiesApplied).not.toContain(Abilities.PROTEAN); }); test("ability is not applied if pokemon uses struggle", async () => { @@ -244,7 +244,7 @@ describe("Abilities - Protean", () => { game.move.select(Moves.STRUGGLE); await game.phaseInterceptor.to(TurnEndPhase); - expect(leadPokemon.summonData.abilitiesApplied).not.toContain(Abilities.PROTEAN); + expect(leadPokemon.waveData.abilitiesApplied).not.toContain(Abilities.PROTEAN); }); test("ability is not applied if the pokemon's move fails", async () => { @@ -258,7 +258,7 @@ describe("Abilities - Protean", () => { game.move.select(Moves.BURN_UP); await game.phaseInterceptor.to(TurnEndPhase); - expect(leadPokemon.summonData.abilitiesApplied).not.toContain(Abilities.PROTEAN); + expect(leadPokemon.waveData.abilitiesApplied).not.toContain(Abilities.PROTEAN); }); test("ability applies correctly even if the pokemon's Trick-or-Treat fails", async () => { @@ -293,7 +293,7 @@ describe("Abilities - Protean", () => { }); function testPokemonTypeMatchesDefaultMoveType(pokemon: PlayerPokemon, move: Moves) { - expect(pokemon.summonData.abilitiesApplied).toContain(Abilities.PROTEAN); + expect(pokemon.waveData.abilitiesApplied).toContain(Abilities.PROTEAN); expect(pokemon.getTypes()).toHaveLength(1); const pokemonType = PokemonType[pokemon.getTypes()[0]], moveType = PokemonType[allMoves[move].type]; diff --git a/test/abilities/quick_draw.test.ts b/test/abilities/quick_draw.test.ts index 0d3171e947e..79a29b0ce77 100644 --- a/test/abilities/quick_draw.test.ts +++ b/test/abilities/quick_draw.test.ts @@ -54,7 +54,7 @@ describe("Abilities - Quick Draw", () => { expect(pokemon.isFainted()).toBe(false); expect(enemy.isFainted()).toBe(true); - expect(pokemon.battleData.abilitiesApplied).contain(Abilities.QUICK_DRAW); + expect(pokemon.waveData.abilitiesApplied).contain(Abilities.QUICK_DRAW); }, 20000); test( @@ -76,7 +76,7 @@ describe("Abilities - Quick Draw", () => { expect(pokemon.isFainted()).toBe(true); expect(enemy.isFainted()).toBe(false); - expect(pokemon.battleData.abilitiesApplied).not.contain(Abilities.QUICK_DRAW); + expect(pokemon.waveData.abilitiesApplied).not.contain(Abilities.QUICK_DRAW); }, ); @@ -96,6 +96,6 @@ describe("Abilities - Quick Draw", () => { expect(pokemon.isFainted()).toBe(true); expect(enemy.isFainted()).toBe(false); - expect(pokemon.battleData.abilitiesApplied).contain(Abilities.QUICK_DRAW); + expect(pokemon.waveData.abilitiesApplied).contain(Abilities.QUICK_DRAW); }, 20000); }); diff --git a/test/abilities/wimp_out.test.ts b/test/abilities/wimp_out.test.ts index 463ec7587dc..f558efdb103 100644 --- a/test/abilities/wimp_out.test.ts +++ b/test/abilities/wimp_out.test.ts @@ -155,7 +155,7 @@ describe("Abilities - Wimp Out", () => { game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("SwitchSummonPhase", false); - expect(wimpod.summonData.abilitiesApplied).not.toContain(Abilities.WIMP_OUT); + expect(wimpod.waveData.abilitiesApplied).not.toContain(Abilities.WIMP_OUT); await game.phaseInterceptor.to("TurnEndPhase"); diff --git a/test/battle/inverse_battle.test.ts b/test/battle/inverse_battle.test.ts index f8afa3518a9..799442bb603 100644 --- a/test/battle/inverse_battle.test.ts +++ b/test/battle/inverse_battle.test.ts @@ -179,12 +179,12 @@ describe("Inverse Battle", () => { expect(enemy.status?.effect).toBe(StatusEffect.PARALYSIS); }); - it("Anticipation should trigger on 2x effective moves - Anticipation against Thunderbolt", async () => { + it("Anticipation should trigger on 2x effective moves", async () => { game.override.moveset([Moves.THUNDERBOLT]).enemySpecies(Species.SANDSHREW).enemyAbility(Abilities.ANTICIPATION); await game.challengeMode.startBattle(); - expect(game.scene.getEnemyPokemon()?.summonData.abilitiesApplied[0]).toBe(Abilities.ANTICIPATION); + expect(game.scene.getEnemyPokemon()?.waveData.abilitiesApplied).toContain(Abilities.ANTICIPATION); }); it("Conversion 2 should change the type to the resistive type - Conversion 2 against Dragonite", async () => { diff --git a/test/battlerTags/substitute.test.ts b/test/battlerTags/substitute.test.ts index d2df5511c0a..c2a99299716 100644 --- a/test/battlerTags/substitute.test.ts +++ b/test/battlerTags/substitute.test.ts @@ -42,7 +42,6 @@ describe("BattlerTag - SubstituteTag", () => { // simulate a Trapped tag set by another Pokemon, then expect the filter to catch it. const trapTag = new BindTag(5, 0); expect(tagFilter(trapTag)).toBeTruthy(); - return true; }) as Pokemon["findAndRemoveTags"], } as unknown as Pokemon; diff --git a/test/moves/dive.test.ts b/test/moves/dive.test.ts index f33dc69b55f..95c3349c8a6 100644 --- a/test/moves/dive.test.ts +++ b/test/moves/dive.test.ts @@ -105,7 +105,7 @@ describe("Moves - Dive", () => { await game.phaseInterceptor.to("MoveEndPhase"); expect(playerPokemon.hp).toBeLessThan(playerPokemon.getMaxHp()); - expect(enemyPokemon.battleData.abilitiesApplied[0]).toBe(Abilities.ROUGH_SKIN); + expect(enemyPokemon.waveData.abilitiesApplied).toContain(Abilities.ROUGH_SKIN); }); it("should cancel attack after Harsh Sunlight is set", async () => { diff --git a/test/moves/fake_out.test.ts b/test/moves/fake_out.test.ts index cbce16270e0..404473c8fa0 100644 --- a/test/moves/fake_out.test.ts +++ b/test/moves/fake_out.test.ts @@ -26,64 +26,71 @@ describe("Moves - Fake Out", () => { .moveset([Moves.FAKE_OUT, Moves.SPLASH]) .enemyMoveset(Moves.SPLASH) .enemyLevel(10) - .startingLevel(10) // prevent LevelUpPhase from happening + .startingLevel(1) // prevent LevelUpPhase from happening .disableCrits(); }); - it("can only be used on the first turn a pokemon is sent out in a battle", async () => { + it("should only work the first turn a pokemon is sent out in a battle", async () => { await game.classicMode.startBattle([Species.FEEBAS]); - const enemy = game.scene.getEnemyPokemon()!; + const corv = game.scene.getEnemyPokemon()!; game.move.select(Moves.FAKE_OUT); await game.toNextTurn(); - expect(enemy.hp).toBeLessThan(enemy.getMaxHp()); - const postTurnOneHp = enemy.hp; + expect(corv.hp).toBeLessThan(corv.getMaxHp()); + const postTurnOneHp = corv.hp; game.move.select(Moves.FAKE_OUT); await game.toNextTurn(); - expect(enemy.hp).toBe(postTurnOneHp); - }, 20000); + expect(corv.hp).toBe(postTurnOneHp); + }); // This is a PokeRogue buff to Fake Out - it("can be used at the start of every wave even if the pokemon wasn't recalled", async () => { + it("should succeed at the start of each new wave, even if user wasn't recalled", async () => { await game.classicMode.startBattle([Species.FEEBAS]); - const enemy = game.scene.getEnemyPokemon()!; - enemy.damageAndUpdate(enemy.getMaxHp() - 1); - + // set hp to 1 for easy knockout + game.scene.getEnemyPokemon()!.hp = 1; game.move.select(Moves.FAKE_OUT); await game.toNextWave(); game.move.select(Moves.FAKE_OUT); await game.toNextTurn(); - expect(game.scene.getEnemyPokemon()!.isFullHp()).toBe(false); - }, 20000); + const corv = game.scene.getEnemyPokemon()!; + expect(corv).toBeDefined(); + expect(corv?.hp).toBeLessThan(corv?.getMaxHp()); + }); - it("can be used again if recalled and sent back out", async () => { - game.override.startingWave(4); + // This is a PokeRogue buff to Fake Out + it("should succeed at the start of each new wave, even if user wasn't recalled", async () => { + await game.classicMode.startBattle([Species.FEEBAS]); + + // set hp to 1 for easy knockout + game.scene.getEnemyPokemon()!.hp = 1; + game.move.select(Moves.FAKE_OUT); + await game.toNextWave(); + + game.move.select(Moves.FAKE_OUT); + await game.toNextTurn(); + + const corv = game.scene.getEnemyPokemon()!; + expect(corv).toBeDefined(); + expect(corv.hp).toBeLessThan(corv.getMaxHp()); + }); + + it("should succeed if recalled and sent back out", async () => { await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); - const enemy1 = game.scene.getEnemyPokemon()!; - - game.move.select(Moves.FAKE_OUT); - await game.phaseInterceptor.to("MoveEndPhase"); - - expect(enemy1.hp).toBeLessThan(enemy1.getMaxHp()); - - await game.doKillOpponents(); - await game.toNextWave(); - game.move.select(Moves.FAKE_OUT); await game.toNextTurn(); - const enemy2 = game.scene.getEnemyPokemon()!; + const corv = game.scene.getEnemyPokemon()!; - expect(enemy2.hp).toBeLessThan(enemy2.getMaxHp()); - enemy2.hp = enemy2.getMaxHp(); + expect(corv.hp).toBeLessThan(corv.getMaxHp()); + corv.hp = corv.getMaxHp(); game.doSwitchPokemon(1); await game.toNextTurn(); @@ -94,6 +101,6 @@ describe("Moves - Fake Out", () => { game.move.select(Moves.FAKE_OUT); await game.toNextTurn(); - expect(enemy2.hp).toBeLessThan(enemy2.getMaxHp()); - }, 20000); + expect(corv.hp).toBeLessThan(corv.getMaxHp()); + }); }); diff --git a/test/moves/instruct.test.ts b/test/moves/instruct.test.ts index c5650d7bbd5..dd25db4ec90 100644 --- a/test/moves/instruct.test.ts +++ b/test/moves/instruct.test.ts @@ -228,7 +228,7 @@ describe("Moves - Instruct", () => { const amoonguss = game.scene.getPlayerPokemon()!; game.move.changeMoveset(amoonguss, Moves.SEED_BOMB); - amoonguss.battleSummonData.moveHistory = [ + amoonguss.summonData.moveHistory = [ { move: Moves.SEED_BOMB, targets: [BattlerIndex.ENEMY], @@ -301,7 +301,7 @@ describe("Moves - Instruct", () => { const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - enemy.battleSummonData.moveHistory = [ + enemy.summonData.moveHistory = [ { move: Moves.SONIC_BOOM, targets: [BattlerIndex.PLAYER], @@ -350,7 +350,7 @@ describe("Moves - Instruct", () => { await game.classicMode.startBattle([Species.LUCARIO, Species.BANETTE]); const enemyPokemon = game.scene.getEnemyPokemon()!; - enemyPokemon.battleSummonData.moveHistory = [ + enemyPokemon.summonData.moveHistory = [ { move: Moves.WHIRLWIND, targets: [BattlerIndex.PLAYER], diff --git a/test/moves/last-resort.test.ts b/test/moves/last-resort.test.ts new file mode 100644 index 00000000000..a7b462f3ca4 --- /dev/null +++ b/test/moves/last-resort.test.ts @@ -0,0 +1,166 @@ +import { BattlerIndex } from "#app/battle"; +import { MoveResult } from "#app/field/pokemon"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Last Resort", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + function expectLastResortFail() { + expect(game.scene.getPlayerPokemon()?.getLastXMoves()[0]).toEqual( + expect.objectContaining({ + move: Moves.LAST_RESORT, + result: MoveResult.FAIL, + }), + ); + } + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .ability(Abilities.BALL_FETCH) + .battleStyle("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should fail unless all other moves (excluding itself) has been used at least once", async () => { + game.override.moveset([Moves.LAST_RESORT, Moves.SPLASH, Moves.GROWL, Moves.GROWTH]); + await game.classicMode.startBattle([Species.BLISSEY]); + + const blissey = game.scene.getPlayerPokemon()!; + expect(blissey).toBeDefined(); + + // Last resort by itself + game.move.select(Moves.LAST_RESORT); + await game.phaseInterceptor.to("TurnEndPhase"); + expectLastResortFail(); + + // Splash (1/3) + blissey.pushMoveHistory({ move: Moves.SPLASH, targets: [BattlerIndex.PLAYER] }); + game.move.select(Moves.LAST_RESORT); + await game.phaseInterceptor.to("TurnEndPhase"); + expectLastResortFail(); + + // Growl (2/3) + blissey.pushMoveHistory({ move: Moves.GROWL, targets: [BattlerIndex.ENEMY] }); + game.move.select(Moves.LAST_RESORT); + await game.phaseInterceptor.to("TurnEndPhase"); + expectLastResortFail(); // Were last resort itself counted, it would error here + + // Growth (3/3) + blissey.pushMoveHistory({ move: Moves.GROWTH, targets: [BattlerIndex.PLAYER] }); + game.move.select(Moves.LAST_RESORT); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(game.scene.getPlayerPokemon()?.getLastXMoves()[0]).toEqual( + expect.objectContaining({ + move: Moves.LAST_RESORT, + result: MoveResult.SUCCESS, + }), + ); + }); + + it("should disregard virtually invoked moves", async () => { + game.override + .moveset([Moves.LAST_RESORT, Moves.SWORDS_DANCE, Moves.ABSORB, Moves.MIRROR_MOVE]) + .enemyMoveset([Moves.SWORDS_DANCE, Moves.ABSORB]) + .ability(Abilities.DANCER) + .enemySpecies(Species.ABOMASNOW); // magikarp has 50% chance to be okho'd on absorb crit + await game.classicMode.startBattle([Species.BLISSEY]); + + // use mirror move normally to trigger absorb virtually + game.move.select(Moves.MIRROR_MOVE); + await game.forceEnemyMove(Moves.ABSORB); + await game.toNextTurn(); + + game.move.select(Moves.LAST_RESORT); + await game.forceEnemyMove(Moves.SWORDS_DANCE); // goes first to proc dancer ahead of time + await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.phaseInterceptor.to("TurnEndPhase"); + expectLastResortFail(); + }); + + it("should fail if no other moves in moveset", async () => { + game.override.moveset(Moves.LAST_RESORT); + await game.classicMode.startBattle([Species.BLISSEY]); + + game.move.select(Moves.LAST_RESORT); + await game.phaseInterceptor.to("TurnEndPhase"); + + expectLastResortFail(); + }); + + it("should work if invoked virtually when all other moves have been used", async () => { + game.override.moveset([Moves.LAST_RESORT, Moves.SLEEP_TALK]).ability(Abilities.COMATOSE); + await game.classicMode.startBattle([Species.KOMALA]); + + game.move.select(Moves.SLEEP_TALK); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(game.scene.getPlayerPokemon()?.getLastXMoves(-1)).toEqual([ + expect.objectContaining({ + move: Moves.LAST_RESORT, + result: MoveResult.SUCCESS, + virtual: true, + }), + expect.objectContaining({ + move: Moves.SLEEP_TALK, + result: MoveResult.SUCCESS, + }), + ]); + }); + + it("should preserve usability status on reload", async () => { + game.override.moveset([Moves.LAST_RESORT, Moves.SPLASH]).ability(Abilities.COMATOSE); + await game.classicMode.startBattle([Species.BLISSEY]); + + game.move.select(Moves.SPLASH); + await game.doKillOpponents(); + await game.toNextWave(); + + const oldMoveHistory = game.scene.getPlayerPokemon()?.summonData.moveHistory; + await game.reload.reloadSession(); + + const newMoveHistory = game.scene.getPlayerPokemon()?.summonData.moveHistory; + expect(oldMoveHistory).toEqual(newMoveHistory); + + // use last resort and it should kill the karp just fine + game.move.select(Moves.LAST_RESORT); + game.scene.getEnemyPokemon()!.hp = 1; + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(game.isVictory()).toBe(true); + }); + + it("should fail if used while not in moveset", async () => { + game.override.moveset(Moves.MIRROR_MOVE).enemyMoveset([Moves.ABSORB, Moves.LAST_RESORT]); + await game.classicMode.startBattle([Species.BLISSEY]); + + // ensure enemy last resort succeeds + game.move.select(Moves.MIRROR_MOVE); + await game.forceEnemyMove(Moves.ABSORB); + await game.phaseInterceptor.to("TurnEndPhase"); + game.move.select(Moves.MIRROR_MOVE); + await game.forceEnemyMove(Moves.LAST_RESORT); + await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.phaseInterceptor.to("TurnEndPhase"); + + expectLastResortFail(); + }); +}); diff --git a/test/moves/powder.test.ts b/test/moves/powder.test.ts index 6f7a6add054..457beb60f91 100644 --- a/test/moves/powder.test.ts +++ b/test/moves/powder.test.ts @@ -146,7 +146,7 @@ describe("Moves - Powder", () => { await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.FAIL); expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); - expect(enemyPokemon.summonData?.types).not.toBe(PokemonType.FIRE); + expect(enemyPokemon.summonData.types).not.toBe(PokemonType.FIRE); }); it("should cancel Fire-type moves generated by the target's Dancer ability", async () => { diff --git a/test/moves/rage_fist.test.ts b/test/moves/rage_fist.test.ts index 687d805da78..f215c5955c6 100644 --- a/test/moves/rage_fist.test.ts +++ b/test/moves/rage_fist.test.ts @@ -7,6 +7,7 @@ import type Move from "#app/data/moves/move"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { BattleType } from "#enums/battle-type"; describe("Moves - Rage Fist", () => { let phaserGame: Phaser.Game; @@ -28,19 +29,18 @@ describe("Moves - Rage Fist", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .moveset([Moves.RAGE_FIST, Moves.SPLASH, Moves.SUBSTITUTE]) + .moveset([Moves.RAGE_FIST, Moves.SPLASH, Moves.SUBSTITUTE, Moves.TIDY_UP]) .startingLevel(100) .enemyLevel(1) + .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.DOUBLE_KICK); vi.spyOn(move, "calculateBattlePower"); }); - it("should have 100 more power if hit twice before calling Rage Fist", async () => { - game.override.enemySpecies(Species.MAGIKARP); - - await game.classicMode.startBattle([Species.MAGIKARP]); + it("should gain power per hit taken", async () => { + await game.classicMode.startBattle([Species.FEEBAS]); game.move.select(Moves.RAGE_FIST); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); @@ -49,51 +49,95 @@ describe("Moves - Rage Fist", () => { expect(move.calculateBattlePower).toHaveLastReturnedWith(150); }); - it("should maintain its power during next battle if it is within the same arena encounter", async () => { - game.override.enemySpecies(Species.MAGIKARP).startingWave(1); + it("caps at 6 hits taken", async () => { + await game.classicMode.startBattle([Species.FEEBAS]); - await game.classicMode.startBattle([Species.MAGIKARP]); + // spam splash against magikarp hitting us 2 times per turn + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + + game.move.select(Moves.RAGE_FIST); + await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.phaseInterceptor.to("TurnEndPhase"); + + // hit 8 times, but nothing else + expect(game.scene.getPlayerPokemon()?.battleData.hitCount).toBe(8); + expect(move.calculateBattlePower).toHaveLastReturnedWith(350); + }); + + it("should not count substitute hits or confusion damage", async () => { + game.override.enemySpecies(Species.SHUCKLE).enemyMoveset([Moves.CONFUSE_RAY, Moves.DOUBLE_KICK]); + + await game.classicMode.startBattle([Species.REGIROCK]); + + game.move.select(Moves.SUBSTITUTE); + await game.forceEnemyMove(Moves.DOUBLE_KICK); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.toNextTurn(); + + // no increase due to substitute + expect(game.scene.getPlayerPokemon()?.battleData.hitCount).toBe(0); + + // remove substitute and get confused + game.move.select(Moves.TIDY_UP); + await game.forceEnemyMove(Moves.CONFUSE_RAY); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.toNextTurn(); + + game.move.select(Moves.RAGE_FIST); + await game.forceEnemyMove(Moves.CONFUSE_RAY); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.move.forceConfusionActivation(true); + await game.toNextTurn(); + + // didn't go up from hitting ourself + expect(game.scene.getPlayerPokemon()?.battleData.hitCount).toBe(0); + }); + + it("should maintain hits recieved between wild waves", async () => { + await game.classicMode.startBattle([Species.FEEBAS]); game.move.select(Moves.RAGE_FIST); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextWave(); + expect(game.scene.getPlayerPokemon()?.battleData.hitCount).toBe(2); + game.move.select(Moves.RAGE_FIST); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); - await game.phaseInterceptor.to("BerryPhase", false); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(game.scene.getPlayerPokemon()?.battleData.hitCount).toBe(4); expect(move.calculateBattlePower).toHaveLastReturnedWith(250); }); - it("should reset the hitRecCounter if we enter new trainer battle", async () => { - game.override.enemySpecies(Species.MAGIKARP).startingWave(4); + it("should reset hits recieved before trainer battles", async () => { + await game.classicMode.startBattle([Species.IRON_HANDS]); - await game.classicMode.startBattle([Species.MAGIKARP]); + const ironHands = game.scene.getPlayerPokemon()!; + expect(ironHands).toBeDefined(); + // beat up a magikarp game.move.select(Moves.RAGE_FIST); + await game.forceEnemyMove(Moves.DOUBLE_KICK); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(game.isVictory()).toBe(true); + expect(ironHands.battleData.hitCount).toBe(2); + expect(move.calculateBattlePower).toHaveLastReturnedWith(150); + + game.override.battleType(BattleType.TRAINER); await game.toNextWave(); - game.move.select(Moves.RAGE_FIST); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); - await game.phaseInterceptor.to("BerryPhase", false); - - expect(move.calculateBattlePower).toHaveLastReturnedWith(150); + expect(ironHands.battleData.hitCount).toBe(0); }); - it("should not increase the hitCounter if Substitute is hit", async () => { - game.override.enemySpecies(Species.MAGIKARP).startingWave(4); - - await game.classicMode.startBattle([Species.MAGIKARP]); - - game.move.select(Moves.SUBSTITUTE); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); - await game.phaseInterceptor.to("MoveEffectPhase"); - - expect(game.scene.getPlayerPokemon()?.customPokemonData.hitsRecCount).toBe(0); - }); - - it("should reset the hitRecCounter if we enter new biome", async () => { + it("should reset hits recieved before new biome", async () => { game.override.enemySpecies(Species.MAGIKARP).startingWave(10); await game.classicMode.startBattle([Species.MAGIKARP]); @@ -109,25 +153,50 @@ describe("Moves - Rage Fist", () => { expect(move.calculateBattlePower).toHaveLastReturnedWith(150); }); - it("should not reset the hitRecCounter if switched out", async () => { - game.override.enemySpecies(Species.MAGIKARP).startingWave(1).enemyMoveset(Moves.TACKLE); + it("should not reset if switched out or on reload", async () => { + game.override.enemyMoveset(Moves.TACKLE); + + const getPartyHitCount = () => + game.scene + .getPlayerParty() + .filter(p => !!p) + .map(m => m.battleData.hitCount); await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + // Charizard hit game.move.select(Moves.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); + expect(getPartyHitCount()).toEqual([1, 0]); + // blastoise switched in & hit game.doSwitchPokemon(1); await game.toNextTurn(); + expect(getPartyHitCount()).toEqual([1, 1]); + // charizard switched in & hit game.doSwitchPokemon(1); await game.toNextTurn(); + expect(getPartyHitCount()).toEqual([2, 1]); + // Charizard rage fist game.move.select(Moves.RAGE_FIST); await game.phaseInterceptor.to("MoveEndPhase"); - expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(Species.CHARIZARD); + const charizard = game.scene.getPlayerPokemon()!; + expect(charizard).toBeDefined(); + expect(charizard.species.speciesId).toBe(Species.CHARIZARD); + expect(move.calculateBattlePower).toHaveLastReturnedWith(150); + + // go to new wave, reload game and beat up another poor sap + await game.toNextWave(); + + await game.reload.reloadSession(); + + // outsped and oneshot means power rmains same as prior + game.move.select(Moves.RAGE_FIST); + await game.phaseInterceptor.to("MoveEndPhase"); expect(move.calculateBattlePower).toHaveLastReturnedWith(150); }); }); diff --git a/test/moves/toxic_spikes.test.ts b/test/moves/toxic_spikes.test.ts index 624db27bb92..b1fdc7f39c2 100644 --- a/test/moves/toxic_spikes.test.ts +++ b/test/moves/toxic_spikes.test.ts @@ -129,7 +129,7 @@ describe("Moves - Toxic Spikes", () => { await game.phaseInterceptor.to("BattleEndPhase"); await game.toNextWave(); - const sessionData: SessionSaveData = gameData["getSessionSaveData"](); + const sessionData: SessionSaveData = gameData.getSessionSaveData(); localStorage.setItem("sessionTestData", encrypt(JSON.stringify(sessionData), true)); const recoveredData: SessionSaveData = gameData.parseSessionData( decrypt(localStorage.getItem("sessionTestData")!, true), diff --git a/test/moves/transform.test.ts b/test/moves/transform.test.ts index 5bcb7c7ed4c..8bfe7df688b 100644 --- a/test/moves/transform.test.ts +++ b/test/moves/transform.test.ts @@ -4,7 +4,7 @@ import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Moves } from "#enums/moves"; -import { Stat, BATTLE_STATS, EFFECTIVE_STATS } from "#enums/stat"; +import { Stat, EFFECTIVE_STATS } from "#enums/stat"; import { Abilities } from "#enums/abilities"; import { BattlerIndex } from "#app/battle"; @@ -49,30 +49,18 @@ describe("Moves - Transform", () => { expect(player.getAbility()).toBe(enemy.getAbility()); expect(player.getGender()).toBe(enemy.getGender()); + // copies all stats except hp expect(player.getStat(Stat.HP, false)).not.toBe(enemy.getStat(Stat.HP)); for (const s of EFFECTIVE_STATS) { expect(player.getStat(s, false)).toBe(enemy.getStat(s, false)); } - for (const s of BATTLE_STATS) { - expect(player.getStatStage(s)).toBe(enemy.getStatStage(s)); - } + expect(player.getStatStages()).toEqual(enemy.getStatStages()); - const playerMoveset = player.getMoveset(); - const enemyMoveset = enemy.getMoveset(); + // move IDs are equal + expect(player.getMoveset().map(m => m.moveId)).toEqual(enemy.getMoveset().map(m => m.moveId)); - expect(playerMoveset.length).toBe(enemyMoveset.length); - for (let i = 0; i < playerMoveset.length && i < enemyMoveset.length; i++) { - expect(playerMoveset[i]?.moveId).toBe(enemyMoveset[i]?.moveId); - } - - const playerTypes = player.getTypes(); - const enemyTypes = enemy.getTypes(); - - expect(playerTypes.length).toBe(enemyTypes.length); - for (let i = 0; i < playerTypes.length && i < enemyTypes.length; i++) { - expect(playerTypes[i]).toBe(enemyTypes[i]); - } + expect(player.getTypes()).toEqual(enemy.getTypes()); }); it("should copy in-battle overridden stats", async () => { diff --git a/test/moves/u_turn.test.ts b/test/moves/u_turn.test.ts index 68bb7fe05c1..4ceb6865be0 100644 --- a/test/moves/u_turn.test.ts +++ b/test/moves/u_turn.test.ts @@ -65,7 +65,7 @@ describe("Moves - U-turn", () => { // assert const playerPkm = game.scene.getPlayerPokemon()!; expect(playerPkm.hp).not.toEqual(playerPkm.getMaxHp()); - expect(game.scene.getEnemyPokemon()!.battleData.abilityRevealed).toBe(true); // proxy for asserting ability activated + expect(game.scene.getEnemyPokemon()!.waveData.abilityRevealed).toBe(true); // proxy for asserting ability activated expect(playerPkm.species.speciesId).toEqual(Species.RAICHU); expect(game.phaseInterceptor.log).not.toContain("SwitchSummonPhase"); }, 20000); @@ -84,7 +84,7 @@ describe("Moves - U-turn", () => { const playerPkm = game.scene.getPlayerPokemon()!; expect(playerPkm.status?.effect).toEqual(StatusEffect.POISON); expect(playerPkm.species.speciesId).toEqual(Species.RAICHU); - expect(game.scene.getEnemyPokemon()!.battleData.abilityRevealed).toBe(true); // proxy for asserting ability activated + expect(game.scene.getEnemyPokemon()!.waveData.abilityRevealed).toBe(true); // proxy for asserting ability activated expect(game.phaseInterceptor.log).not.toContain("SwitchSummonPhase"); }, 20000); diff --git a/test/settingMenu/rebinding_setting.test.ts b/test/settingMenu/rebinding_setting.test.ts index 45c647248c4..20a1fe51484 100644 --- a/test/settingMenu/rebinding_setting.test.ts +++ b/test/settingMenu/rebinding_setting.test.ts @@ -2,7 +2,7 @@ import cfg_keyboard_qwerty from "#app/configs/inputs/cfg_keyboard_qwerty"; import { getKeyWithKeycode, getKeyWithSettingName } from "#app/configs/inputs/configHandler"; import type { InterfaceConfig } from "#app/inputs-controller"; import { SettingKeyboard } from "#app/system/settings/settings-keyboard"; -import { deepCopy } from "#app/utils/common"; +import { deepCopy } from "#app/utils/data"; import { Button } from "#enums/buttons"; import { Device } from "#enums/devices"; import { InGameManip } from "#test/settingMenu/helpers/inGameManip"; diff --git a/test/testUtils/gameManager.ts b/test/testUtils/gameManager.ts index 39e65fba0e5..8dd90decf1a 100644 --- a/test/testUtils/gameManager.ts +++ b/test/testUtils/gameManager.ts @@ -579,9 +579,8 @@ export default class GameManager { /** * Intercepts `TurnStartPhase` and mocks {@linkcode TurnStartPhase.getSpeedOrder}'s return value. * Used to manually modify Pokemon turn order. - * Note: This *DOES NOT* account for priority. - * @param order - The turn order to set + * @param order - The turn order to set as an array of {@linkcode BattlerIndex}es. * @example * ```ts * await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2]); diff --git a/test/testUtils/helpers/moveHelper.ts b/test/testUtils/helpers/moveHelper.ts index 0f3d75c6268..269cf65ea56 100644 --- a/test/testUtils/helpers/moveHelper.ts +++ b/test/testUtils/helpers/moveHelper.ts @@ -103,6 +103,17 @@ export class MoveHelper extends GameManagerHelper { vi.spyOn(Overrides, "STATUS_ACTIVATION_OVERRIDE", "get").mockReturnValue(null); } + /** + * Forces the Confusion status to activate on the next move by temporarily mocking {@linkcode Overrides.CONFUSION_ACTIVATION_OVERRIDE}, + * advancing to the next `MovePhase`, and then resetting the override to `null` + * @param activated - `true` to force the Pokemon to hit themself, `false` to forcibly disable it + */ + public async forceConfusionActivation(activated: boolean): Promise { + vi.spyOn(Overrides, "CONFUSION_ACTIVATION_OVERRIDE", "get").mockReturnValue(activated); + await this.game.phaseInterceptor.to("MovePhase"); + vi.spyOn(Overrides, "CONFUSION_ACTIVATION_OVERRIDE", "get").mockReturnValue(null); + } + /** * Changes a pokemon's moveset to the given move(s). * Used when the normal moveset override can't be used (such as when it's necessary to check or update properties of the moveset). diff --git a/test/testUtils/helpers/overridesHelper.ts b/test/testUtils/helpers/overridesHelper.ts index 6aa382ef59a..acc2e4d5cd0 100644 --- a/test/testUtils/helpers/overridesHelper.ts +++ b/test/testUtils/helpers/overridesHelper.ts @@ -522,6 +522,21 @@ export class OverridesHelper extends GameManagerHelper { return this; } + /** + * Override confusion to always or never activate + * @param activate - `true` to force activation, `false` to force no activation, `null` to disable the override + * @returns `this` + */ + public confusionActivation(activate: boolean | null): this { + vi.spyOn(Overrides, "CONFUSION_ACTIVATION_OVERRIDE", "get").mockReturnValue(activate); + if (activate !== null) { + this.log(`Confusion forced to ${activate ? "always" : "never"} activate!`); + } else { + this.log("Confusion activation override disabled!"); + } + return this; + } + /** * Override the encounter chance for a mystery encounter. * @param percentage - The encounter chance in % diff --git a/test/testUtils/helpers/reloadHelper.ts b/test/testUtils/helpers/reloadHelper.ts index 4867a146aaf..4a9e5356968 100644 --- a/test/testUtils/helpers/reloadHelper.ts +++ b/test/testUtils/helpers/reloadHelper.ts @@ -46,6 +46,16 @@ export class ReloadHelper extends GameManagerHelper { scene.unshiftPhase(titlePhase); this.game.endPhase(); // End the currently ongoing battle + // remove all persistent mods before loading + // TODO: Look into why these aren't removed before load + if (this.game.scene.modifiers.length) { + console.log( + "Removing %d modifiers from scene on load...", + this.game.scene.modifiers.length, + this.game.scene.modifiers, + ); + this.game.scene.modifiers = []; + } titlePhase.loadSaveSlot(-1); // Load the desired session data this.game.phaseInterceptor.shift(); // Loading the save slot also ended TitlePhase, clean it up @@ -73,6 +83,6 @@ export class ReloadHelper extends GameManagerHelper { } await this.game.phaseInterceptor.to(CommandPhase); - console.log("==================[New Turn]=================="); + console.log("==================[New Turn (Reloaded)]=================="); } } diff --git a/test/utils.test.ts b/test/utils.test.ts index 33f7906738c..fe93bdd6970 100644 --- a/test/utils.test.ts +++ b/test/utils.test.ts @@ -1,5 +1,6 @@ import { expect, describe, it, beforeAll } from "vitest"; import { randomString, padInt } from "#app/utils/common"; +import { deepMergeSpriteData } from "#app/utils/data"; import Phaser from "phaser"; @@ -9,6 +10,7 @@ describe("utils", () => { type: Phaser.HEADLESS, }); }); + describe("randomString", () => { it("should return a string of the specified length", () => { const str = randomString(10); @@ -46,4 +48,33 @@ describe("utils", () => { expect(result).toBe("1"); }); }); + describe("deepMergeSpriteData", () => { + it("should merge two objects' common properties", () => { + const dest = { a: 1, b: 2 }; + const source = { a: 3, b: 3, e: 4 }; + deepMergeSpriteData(dest, source); + expect(dest).toEqual({ a: 3, b: 3 }); + }); + + it("does nothing for identical objects", () => { + const dest = { a: 1, b: 2 }; + const source = { a: 1, b: 2 }; + deepMergeSpriteData(dest, source); + expect(dest).toEqual({ a: 1, b: 2 }); + }); + + it("should preserve missing and mistyped properties", () => { + const dest = { a: 1, c: 56, d: "test" }; + const source = { a: "apple", b: 3, d: "no hablo español" }; + deepMergeSpriteData(dest, source); + expect(dest).toEqual({ a: 1, c: 56, d: "no hablo español" }); + }); + + it("should copy arrays verbatim even with mismatches", () => { + const dest = { a: 1, b: [{ d: 1 }, { d: 2 }, { d: 3 }] }; + const source = { a: 3, b: [{ c: [4, 5] }, { p: [7, 8] }], e: 4 }; + deepMergeSpriteData(dest, source); + expect(dest).toEqual({ a: 3, b: [{ c: [4, 5] }, { p: [7, 8] }] }); + }); + }); }); From 8f0eee9c4c70f3b1ef561febffa15bb19b562530 Mon Sep 17 00:00:00 2001 From: damocleas Date: Fri, 2 May 2025 01:11:02 -0400 Subject: [PATCH 092/262] [Balance] [Mystery Encounter] Many Minor Mystery Encounter Adjustments (#5726) * Update slumbering-snorlax-encounter.ts * Add Slumbering Snorlax to Tall Grass, remove Absolute Avarice from Plains * Update absolute-avarice-encounter.ts * Update absolute-avarice-encounter.ts * Update slumbering-snorlax-encounter.ts * Update slumbering-snorlax-encounter.ts * Update the-expert-pokemon-breeder-encounter.ts * Update slumbering-snorlax-encounter.ts nature * Update bug-type-superfan-encounter.ts move reward * Update bug-type-superfan-encounter.ts moves again * fix encounter waves * Update absolute-avarice-encounter.test.ts * add Nature import * Update bug-type-superfan-encounter.test.ts * greedent moves * test moves * Updated mysterious-chest-encounter.ts trap/reward chance * swapped Macho Brace stats, +2 / 10% for HP stats and +1 / 5% for all else * Update bug-type-superfan-encounter.ts moves * Update the-expert-pokemon-breeder-encounter.ts tera * Update bug-type-superfan-encounter.test.ts fix test --- .../encounters/absolute-avarice-encounter.ts | 11 ++++--- .../encounters/bug-type-superfan-encounter.ts | 28 +++++++++++------ .../encounters/mysterious-chest-encounter.ts | 4 +-- .../slumbering-snorlax-encounter.ts | 30 +++++++++++-------- .../the-expert-pokemon-breeder-encounter.ts | 7 ++--- .../mystery-encounters/mystery-encounters.ts | 4 +-- src/modifier/modifier.ts | 14 ++++----- .../absolute-avarice-encounter.test.ts | 8 +++-- .../bug-type-superfan-encounter.test.ts | 28 +++++++++++------ 9 files changed, 80 insertions(+), 54 deletions(-) diff --git a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts index e0486c83e77..acfc8cb16a1 100644 --- a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts +++ b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts @@ -37,7 +37,6 @@ import type HeldModifierConfig from "#app/interfaces/held-modifier-config"; import type { BerryType } from "#enums/berry-type"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { Stat } from "#enums/stat"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import i18next from "i18next"; /** the i18n namespace for this encounter */ @@ -52,8 +51,8 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = MysteryEncounterBuilde MysteryEncounterType.ABSOLUTE_AVARICE, ) .withEncounterTier(MysteryEncounterTier.GREAT) - .withSceneWaveRangeRequirement(...CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES) - .withSceneRequirement(new PersistentModifierRequirement("BerryModifier", 4)) // Must have at least 4 berries to spawn + .withSceneWaveRangeRequirement(20, 180) + .withSceneRequirement(new PersistentModifierRequirement("BerryModifier", 6)) // Must have at least 6 berries to spawn .withFleeAllowed(false) .withIntroSpriteConfigs([ { @@ -220,9 +219,9 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = MysteryEncounterBuilde // Do NOT remove the real berries yet or else it will be persisted in the session data - // SpDef buff below wave 50, +1 to all stats otherwise + // +1 SpDef below wave 50, SpDef and Speed otherwise const statChangesForBattle: (Stat.ATK | Stat.DEF | Stat.SPATK | Stat.SPDEF | Stat.SPD | Stat.ACC | Stat.EVA)[] = - globalScene.currentBattle.waveIndex < 50 ? [Stat.SPDEF] : [Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD]; + globalScene.currentBattle.waveIndex < 50 ? [Stat.SPDEF] : [Stat.SPDEF, Stat.SPD]; // Calculate boss mon const config: EnemyPartyConfig = { @@ -233,7 +232,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = MysteryEncounterBuilde isBoss: true, bossSegments: 3, shiny: false, // Shiny lock because of consistency issues between the different options - moveSet: [Moves.THRASH, Moves.BODY_PRESS, Moves.STUFF_CHEEKS, Moves.CRUNCH], + moveSet: [Moves.THRASH, Moves.CRUNCH, Moves.BODY_PRESS, Moves.SLACK_OFF], modifierConfigs: bossModifierConfigs, tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { diff --git a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts index 001faf3a67f..87b223d5245 100644 --- a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts +++ b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts @@ -146,24 +146,34 @@ const POOL_4_POKEMON = [Species.GENESECT, Species.SLITHER_WING, Species.BUZZWOLE const PHYSICAL_TUTOR_MOVES = [ Moves.MEGAHORN, - Moves.X_SCISSOR, Moves.ATTACK_ORDER, - Moves.PIN_MISSILE, + Moves.BUG_BITE, Moves.FIRST_IMPRESSION, + Moves.LUNGE ]; -const SPECIAL_TUTOR_MOVES = [Moves.SILVER_WIND, Moves.BUG_BUZZ, Moves.SIGNAL_BEAM, Moves.POLLEN_PUFF]; +const SPECIAL_TUTOR_MOVES = [ + Moves.SILVER_WIND, + Moves.SIGNAL_BEAM, + Moves.BUG_BUZZ, + Moves.POLLEN_PUFF, + Moves.STRUGGLE_BUG +]; -const STATUS_TUTOR_MOVES = [Moves.STRING_SHOT, Moves.STICKY_WEB, Moves.SILK_TRAP, Moves.RAGE_POWDER, Moves.HEAL_ORDER]; +const STATUS_TUTOR_MOVES = [ + Moves.STRING_SHOT, + Moves.DEFEND_ORDER, + Moves.RAGE_POWDER, + Moves.STICKY_WEB, + Moves.SILK_TRAP +]; const MISC_TUTOR_MOVES = [ - Moves.BUG_BITE, Moves.LEECH_LIFE, - Moves.DEFEND_ORDER, - Moves.QUIVER_DANCE, - Moves.TAIL_GLOW, - Moves.INFESTATION, Moves.U_TURN, + Moves.HEAL_ORDER, + Moves.QUIVER_DANCE, + Moves.INFESTATION, ]; /** diff --git a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts index e9976ba04aa..e6c11378163 100644 --- a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts @@ -29,8 +29,8 @@ import { Species } from "#enums/species"; const namespace = "mysteryEncounters/mysteriousChest"; const RAND_LENGTH = 100; -const TRAP_PERCENT = 35; -const COMMON_REWARDS_PERCENT = 20; +const TRAP_PERCENT = 30; +const COMMON_REWARDS_PERCENT = 25; const ULTRA_REWARDS_PERCENT = 30; const ROGUE_REWARDS_PERCENT = 10; const MASTER_REWARDS_PERCENT = 5; diff --git a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts index 41c20f35ba1..2654f6b18d8 100644 --- a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts +++ b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts @@ -19,6 +19,7 @@ import { setEncounterRewards, } from "../utils/encounter-phase-utils"; import { queueEncounterMessage } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; +import { Nature } from "#enums/nature"; import { Moves } from "#enums/moves"; import { BattlerIndex } from "#app/battle"; import { AiType, PokemonMove } from "#app/field/pokemon"; @@ -26,9 +27,10 @@ import { getPokemonSpecies } from "#app/data/pokemon-species"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { PartyHealPhase } from "#app/phases/party-heal-phase"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { BerryType } from "#enums/berry-type"; +import { Stat } from "#enums/stat"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; +import { randSeedInt } from "#app/utils/common"; /** i18n namespace for the encounter */ const namespace = "mysteryEncounters/slumberingSnorlax"; @@ -42,7 +44,7 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = MysteryEncounterBuil MysteryEncounterType.SLUMBERING_SNORLAX, ) .withEncounterTier(MysteryEncounterTier.GREAT) - .withSceneWaveRangeRequirement(...CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES) + .withSceneWaveRangeRequirement(15, 150) .withCatchAllowed(true) .withHideWildIntroMessage(true) .withFleeAllowed(false) @@ -72,16 +74,26 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = MysteryEncounterBuil species: bossSpecies, isBoss: true, shiny: false, // Shiny lock because shiny is rolled only if the battle option is picked - status: [StatusEffect.SLEEP, 5], // Extra turns on timer for Snorlax's start of fight moves - moveSet: [Moves.REST, Moves.SLEEP_TALK, Moves.CRUNCH, Moves.GIGA_IMPACT], + status: [StatusEffect.SLEEP, 6], // Extra turns on timer for Snorlax's start of fight moves + nature: Nature.DOCILE, + moveSet: [Moves.BODY_SLAM, Moves.CRUNCH, Moves.SLEEP_TALK, Moves.REST], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.BERRY, [BerryType.SITRUS]) as PokemonHeldItemModifierType, - stackCount: 2, }, { modifier: generateModifierType(modifierTypes.BERRY, [BerryType.ENIGMA]) as PokemonHeldItemModifierType, - stackCount: 2, + }, + { + modifier: generateModifierType(modifierTypes.BASE_STAT_BOOSTER, [Stat.HP]) as PokemonHeldItemModifierType, + }, + { + modifier: generateModifierType(modifierTypes.SOOTHE_BELL) as PokemonHeldItemModifierType, + stackCount: randSeedInt(2, 0), + }, + { + modifier: generateModifierType(modifierTypes.LUCKY_EGG) as PokemonHeldItemModifierType, + stackCount: randSeedInt(2, 0), }, ], customPokemonData: new CustomPokemonData({ spriteScale: 1.25 }), @@ -128,12 +140,6 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = MysteryEncounterBuil move: new PokemonMove(Moves.SNORE), ignorePp: true, }, - { - sourceBattlerIndex: BattlerIndex.ENEMY, - targets: [BattlerIndex.PLAYER], - move: new PokemonMove(Moves.SNORE), - ignorePp: true, - }, ); await initBattleWithEnemyConfig(encounter.enemyPartyConfigs[0]); }, diff --git a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts index 076171b3e5e..15063bc2763 100644 --- a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts @@ -11,7 +11,6 @@ import { randSeedShuffle } from "#app/utils/common"; import type MysteryEncounter from "../mystery-encounter"; import { MysteryEncounterBuilder } from "../mystery-encounter"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { Biome } from "#enums/biome"; import { TrainerType } from "#enums/trainer-type"; import i18next from "i18next"; @@ -123,7 +122,7 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = MysteryEncount MysteryEncounterType.THE_EXPERT_POKEMON_BREEDER, ) .withEncounterTier(MysteryEncounterTier.ULTRA) - .withSceneWaveRangeRequirement(...CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES) + .withSceneWaveRangeRequirement(25, 180) .withScenePartySizeRequirement(4, 6, true) // Must have at least 4 legal pokemon in party .withIntroSpriteConfigs([]) // These are set in onInit() .withIntroDialogue([ @@ -483,9 +482,9 @@ function getPartyConfig(): EnemyPartyConfig { abilityIndex: 1, // Magic Guard shiny: false, nature: Nature.ADAMANT, - moveSet: [Moves.METEOR_MASH, Moves.FIRE_PUNCH, Moves.ICE_PUNCH, Moves.THUNDER_PUNCH], + moveSet: [Moves.FIRE_PUNCH, Moves.ICE_PUNCH, Moves.THUNDER_PUNCH, Moves.METEOR_MASH], ivs: [31, 31, 31, 31, 31, 31], - tera: PokemonType.STEEL, + tera: PokemonType.FAIRY, }, ], }; diff --git a/src/data/mystery-encounters/mystery-encounters.ts b/src/data/mystery-encounters/mystery-encounters.ts index 5dd952b2bce..1a36dc27df2 100644 --- a/src/data/mystery-encounters/mystery-encounters.ts +++ b/src/data/mystery-encounters/mystery-encounters.ts @@ -226,9 +226,9 @@ const anyBiomeEncounters: MysteryEncounterType[] = [ */ export const mysteryEncountersByBiome = new Map([ [Biome.TOWN, []], - [Biome.PLAINS, [MysteryEncounterType.SLUMBERING_SNORLAX, MysteryEncounterType.ABSOLUTE_AVARICE]], + [Biome.PLAINS, [MysteryEncounterType.SLUMBERING_SNORLAX]], [Biome.GRASS, [MysteryEncounterType.SLUMBERING_SNORLAX, MysteryEncounterType.ABSOLUTE_AVARICE]], - [Biome.TALL_GRASS, [MysteryEncounterType.ABSOLUTE_AVARICE]], + [Biome.TALL_GRASS, [MysteryEncounterType.SLUMBERING_SNORLAX, MysteryEncounterType.ABSOLUTE_AVARICE]], [Biome.METROPOLIS, []], [Biome.FOREST, [MysteryEncounterType.SAFARI_ZONE, MysteryEncounterType.ABSOLUTE_AVARICE]], [Biome.SEA, [MysteryEncounterType.LOST_AT_SEA]], diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 2823e74fffe..9df7aa7813f 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -1114,20 +1114,20 @@ export class PokemonIncrementingStatModifier extends PokemonHeldItemModifier { * @returns always `true` */ override apply(_pokemon: Pokemon, stat: Stat, statHolder: NumberHolder): boolean { - // Modifies the passed in stat number holder by +1 per stack for HP, +2 per stack for other stats - // If the Macho Brace is at max stacks (50), adds additional 5% to total HP and 10% to other stats + // Modifies the passed in stat number holder by +2 per stack for HP, +1 per stack for other stats + // If the Macho Brace is at max stacks (50), adds additional 10% to total HP and 5% to other stats const isHp = stat === Stat.HP; if (isHp) { - statHolder.value += this.stackCount; - if (this.stackCount === this.getMaxHeldItemCount()) { - statHolder.value = Math.floor(statHolder.value * 1.05); - } - } else { statHolder.value += 2 * this.stackCount; if (this.stackCount === this.getMaxHeldItemCount()) { statHolder.value = Math.floor(statHolder.value * 1.1); } + } else { + statHolder.value += this.stackCount; + if (this.stackCount === this.getMaxHeldItemCount()) { + statHolder.value = Math.floor(statHolder.value * 1.05); + } } return true; diff --git a/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts b/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts index e00ce03333c..36a284880c1 100644 --- a/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts +++ b/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts @@ -23,7 +23,7 @@ import i18next from "i18next"; const namespace = "mysteryEncounters/absoluteAvarice"; const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; -const defaultBiome = Biome.PLAINS; +const defaultBiome = Biome.TALL_GRASS; const defaultWave = 45; describe("Absolute Avarice - Mystery Encounter", () => { @@ -45,7 +45,7 @@ describe("Absolute Avarice - Mystery Encounter", () => { vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([ - [Biome.PLAINS, [MysteryEncounterType.ABSOLUTE_AVARICE]], + [Biome.TALL_GRASS, [MysteryEncounterType.ABSOLUTE_AVARICE]], [Biome.VOLCANO, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], ]), ); @@ -91,6 +91,7 @@ describe("Absolute Avarice - Mystery Encounter", () => { game.override.startingHeldItems([ { name: "BERRY", count: 2, type: BerryType.SITRUS }, { name: "BERRY", count: 3, type: BerryType.GANLON }, + { name: "BERRY", count: 2, type: BerryType.APICOT }, ]); await game.runToMysteryEncounter(); @@ -102,6 +103,7 @@ describe("Absolute Avarice - Mystery Encounter", () => { game.override.startingHeldItems([ { name: "BERRY", count: 2, type: BerryType.SITRUS }, { name: "BERRY", count: 3, type: BerryType.GANLON }, + { name: "BERRY", count: 2, type: BerryType.APICOT }, ]); await game.runToMysteryEncounter(MysteryEncounterType.ABSOLUTE_AVARICE, defaultParty); @@ -138,7 +140,7 @@ describe("Absolute Avarice - Mystery Encounter", () => { expect(enemyField[0].species.speciesId).toBe(Species.GREEDENT); const moveset = enemyField[0].moveset.map(m => m.moveId); expect(moveset?.length).toBe(4); - expect(moveset).toEqual([Moves.THRASH, Moves.BODY_PRESS, Moves.STUFF_CHEEKS, Moves.CRUNCH]); + expect(moveset).toEqual([Moves.THRASH, Moves.CRUNCH, Moves.BODY_PRESS, Moves.SLACK_OFF]); const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof MovePhase).map(p => p[0]); expect(movePhases.length).toBe(1); diff --git a/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts b/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts index fc208ed7180..455a5d28194 100644 --- a/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts +++ b/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts @@ -118,24 +118,34 @@ const POOL_4_POKEMON = [Species.GENESECT, Species.SLITHER_WING, Species.BUZZWOLE const PHYSICAL_TUTOR_MOVES = [ Moves.MEGAHORN, - Moves.X_SCISSOR, Moves.ATTACK_ORDER, - Moves.PIN_MISSILE, + Moves.BUG_BITE, Moves.FIRST_IMPRESSION, + Moves.LUNGE ]; -const SPECIAL_TUTOR_MOVES = [Moves.SILVER_WIND, Moves.BUG_BUZZ, Moves.SIGNAL_BEAM, Moves.POLLEN_PUFF]; +const SPECIAL_TUTOR_MOVES = [ + Moves.SILVER_WIND, + Moves.SIGNAL_BEAM, + Moves.BUG_BUZZ, + Moves.POLLEN_PUFF, + Moves.STRUGGLE_BUG +]; -const STATUS_TUTOR_MOVES = [Moves.STRING_SHOT, Moves.STICKY_WEB, Moves.SILK_TRAP, Moves.RAGE_POWDER, Moves.HEAL_ORDER]; +const STATUS_TUTOR_MOVES = [ + Moves.STRING_SHOT, + Moves.DEFEND_ORDER, + Moves.RAGE_POWDER, + Moves.STICKY_WEB, + Moves.SILK_TRAP +]; const MISC_TUTOR_MOVES = [ - Moves.BUG_BITE, Moves.LEECH_LIFE, - Moves.DEFEND_ORDER, - Moves.QUIVER_DANCE, - Moves.TAIL_GLOW, - Moves.INFESTATION, Moves.U_TURN, + Moves.HEAL_ORDER, + Moves.QUIVER_DANCE, + Moves.INFESTATION, ]; describe("Bug-Type Superfan - Mystery Encounter", () => { From 3a89b7bb752de892bad13d015f77dd9bd21089d2 Mon Sep 17 00:00:00 2001 From: damocleas Date: Fri, 2 May 2025 17:38:30 -0400 Subject: [PATCH 093/262] [Balance] [Beta] 1.9 Egg Move Followup (#5749) Update egg-moves.ts for Aerodactyl Amaura Diglett --- src/data/balance/egg-moves.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/data/balance/egg-moves.ts b/src/data/balance/egg-moves.ts index 47898e9e885..289ac60bcc5 100644 --- a/src/data/balance/egg-moves.ts +++ b/src/data/balance/egg-moves.ts @@ -66,7 +66,7 @@ export const speciesEggMoves = { [Species.PORYGON]: [ Moves.THUNDERCLAP, Moves.AURA_SPHERE, Moves.FLAMETHROWER, Moves.TECHNO_BLAST ], [Species.OMANYTE]: [ Moves.FREEZE_DRY, Moves.GIGA_DRAIN, Moves.POWER_GEM, Moves.STEAM_ERUPTION ], [Species.KABUTO]: [ Moves.CEASELESS_EDGE, Moves.HIGH_HORSEPOWER, Moves.CRABHAMMER, Moves.MIGHTY_CLEAVE ], - [Species.AERODACTYL]: [ Moves.FLOATY_FALL, Moves.CLOSE_COMBAT, Moves.STONE_AXE, Moves.SWORDS_DANCE ], + [Species.AERODACTYL]: [ Moves.FLOATY_FALL, Moves.HIGH_HORSEPOWER, Moves.STONE_AXE, Moves.SWORDS_DANCE ], [Species.ARTICUNO]: [ Moves.EARTH_POWER, Moves.CALM_MIND, Moves.AURORA_VEIL, Moves.AEROBLAST ], [Species.ZAPDOS]: [ Moves.BLEAKWIND_STORM, Moves.CALM_MIND, Moves.SANDSEAR_STORM, Moves.ELECTRO_SHOT ], [Species.MOLTRES]: [ Moves.EARTH_POWER, Moves.CALM_MIND, Moves.AEROBLAST, Moves.TORCH_SONG ], @@ -360,7 +360,7 @@ export const speciesEggMoves = { [Species.CLAUNCHER]: [ Moves.SHELL_SMASH, Moves.ARMOR_CANNON, Moves.ENERGY_BALL, Moves.ORIGIN_PULSE ], [Species.HELIOPTILE]: [ Moves.WEATHER_BALL, Moves.HYDRO_STEAM, Moves.EARTH_POWER, Moves.BOOMBURST ], [Species.TYRUNT]: [ Moves.DRAGON_HAMMER, Moves.FLARE_BLITZ, Moves.VOLT_TACKLE, Moves.SHIFT_GEAR ], - [Species.AMAURA]: [ Moves.RECOVER, Moves.WRING_OUT, Moves.POWER_GEM, Moves.GEOMANCY ], + [Species.AMAURA]: [ Moves.RECOVER, Moves.TERA_STARSTORM, Moves.POWER_GEM, Moves.GEOMANCY ], [Species.HAWLUCHA]: [ Moves.TRIPLE_AXEL, Moves.HIGH_HORSEPOWER, Moves.FLOATY_FALL, Moves.WICKED_BLOW ], [Species.DEDENNE]: [ Moves.BOOMBURST, Moves.FAKE_OUT, Moves.NASTY_PLOT, Moves.REVIVAL_BLESSING ], [Species.CARBINK]: [ Moves.BODY_PRESS, Moves.SHORE_UP, Moves.SPARKLY_SWIRL, Moves.DIAMOND_STORM ], @@ -436,7 +436,7 @@ export const speciesEggMoves = { [Species.ALOLA_RATTATA]: [ Moves.FALSE_SURRENDER, Moves.PSYCHIC_FANGS, Moves.COIL, Moves.EXTREME_SPEED ], [Species.ALOLA_SANDSHREW]: [ Moves.SPIKY_SHIELD, Moves.LIQUIDATION, Moves.SHIFT_GEAR, Moves.GLACIAL_LANCE ], [Species.ALOLA_VULPIX]: [ Moves.MOONBLAST, Moves.GLARE, Moves.MYSTICAL_FIRE, Moves.REVIVAL_BLESSING ], - [Species.ALOLA_DIGLETT]: [ Moves.THOUSAND_WAVES, Moves.SWORDS_DANCE, Moves.TRIPLE_DIVE, Moves.MOUNTAIN_GALE ], + [Species.ALOLA_DIGLETT]: [ Moves.THOUSAND_WAVES, Moves.SWORDS_DANCE, Moves.TRIPLE_DIVE, Moves.PYRO_BALL ], [Species.ALOLA_MEOWTH]: [ Moves.BADDY_BAD, Moves.BUZZY_BUZZ, Moves.PARTING_SHOT, Moves.MAKE_IT_RAIN ], [Species.ALOLA_GEODUDE]: [ Moves.THOUSAND_WAVES, Moves.BULK_UP, Moves.STONE_AXE, Moves.EXTREME_SPEED ], [Species.ALOLA_GRIMER]: [ Moves.SUCKER_PUNCH, Moves.BARB_BARRAGE, Moves.RECOVER, Moves.SURGING_STRIKES ], From 75d01adf9abb0385cdff1427987ad15e2eeb97da Mon Sep 17 00:00:00 2001 From: Blitzy <118096277+Blitz425@users.noreply.github.com> Date: Fri, 2 May 2025 20:05:48 -0500 Subject: [PATCH 094/262] [Bug] Disable Illusion in Fusions (#5752) Update ability.ts --- src/data/abilities/ability.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 1cb19e57533..705de6f242d 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -6907,6 +6907,8 @@ export function initAbilities() { .attr(IllusionBreakAbAttr) // The Pokemon loses its illusion when damaged by a move .attr(PostDefendIllusionBreakAbAttr, true) + // Disable Illusion in fusions + .attr(NoFusionAbilityAbAttr) // Illusion is available again after a battle .conditionalAttr((pokemon) => pokemon.isAllowedInBattle(), IllusionPostBattleAbAttr, false) .uncopiable() From bf0abd3ddcc85d1273d2a7d766f59043a3e1dfdf Mon Sep 17 00:00:00 2001 From: damocleas Date: Fri, 2 May 2025 21:32:59 -0400 Subject: [PATCH 095/262] [Move] [Beta] Undo Order Up Sheer Force change (#5750) Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/data/moves/move.ts | 5 +++-- test/moves/order_up.test.ts | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 81ae499da10..d09613123bb 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -3482,7 +3482,8 @@ export class CutHpStatStageBoostAttr extends StatStageChangeAttr { /** * Attribute implementing the stat boosting effect of {@link https://bulbapedia.bulbagarden.net/wiki/Order_Up_(move) | Order Up}. * If the user has a Pokemon with {@link https://bulbapedia.bulbagarden.net/wiki/Commander_(Ability) | Commander} in their mouth, - * one of the user's stats are increased by 1 stage, depending on the "commanding" Pokemon's form. + * one of the user's stats are increased by 1 stage, depending on the "commanding" Pokemon's form. This effect does not respect + * effect chance, but Order Up itself may be boosted by Sheer Force. */ export class OrderUpStatBoostAttr extends MoveEffectAttr { constructor() { @@ -11024,7 +11025,7 @@ export function initMoves() { .makesContact(false), new AttackMove(Moves.LUMINA_CRASH, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 9) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -2), - new AttackMove(Moves.ORDER_UP, PokemonType.DRAGON, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 9) + new AttackMove(Moves.ORDER_UP, PokemonType.DRAGON, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 9) .attr(OrderUpStatBoostAttr) .makesContact(false), new AttackMove(Moves.JET_PUNCH, PokemonType.WATER, MoveCategory.PHYSICAL, 60, 100, 15, -1, 1, 9) diff --git a/test/moves/order_up.test.ts b/test/moves/order_up.test.ts index 701d0489c25..b5df5bfba41 100644 --- a/test/moves/order_up.test.ts +++ b/test/moves/order_up.test.ts @@ -65,4 +65,23 @@ describe("Moves - Order Up", () => { affectedStats.forEach(st => expect(dondozo.getStatStage(st)).toBe(st === stat ? 3 : 2)); }, ); + + it("should be boosted by Sheer Force while still applying a stat boost", async () => { + game.override.passiveAbility(Abilities.SHEER_FORCE).starterForms({ [Species.TATSUGIRI]: 0 }); + + await game.classicMode.startBattle([Species.TATSUGIRI, Species.DONDOZO]); + + const [tatsugiri, dondozo] = game.scene.getPlayerField(); + + expect(game.scene.triggerPokemonBattleAnim).toHaveBeenLastCalledWith(tatsugiri, PokemonAnimType.COMMANDER_APPLY); + expect(dondozo.getTag(BattlerTagType.COMMANDED)).toBeDefined(); + + game.move.select(Moves.ORDER_UP, 1, BattlerIndex.ENEMY); + expect(game.scene.currentBattle.turnCommands[0]?.skip).toBeTruthy(); + + await game.phaseInterceptor.to("BerryPhase", false); + + expect(dondozo.waveData.abilitiesApplied.has(Abilities.SHEER_FORCE)).toBeTruthy(); + expect(dondozo.getStatStage(Stat.ATK)).toBe(3); + }); }); From cdeb14364377fa140c6e3e397f760a885533423c Mon Sep 17 00:00:00 2001 From: damocleas Date: Fri, 2 May 2025 21:41:11 -0400 Subject: [PATCH 096/262] Version 1.8.5 -> 1.9.0 * Update package.json * Update package-lock.json --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 07fed79969e..f9280ad594b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pokemon-rogue-battle", - "version": "1.8.4", + "version": "1.9.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pokemon-rogue-battle", - "version": "1.8.4", + "version": "1.9.0", "hasInstallScript": true, "dependencies": { "@material/material-color-utilities": "^0.2.7", diff --git a/package.json b/package.json index 938d362f263..b9ccb324969 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.8.5", + "version": "1.9.0", "type": "module", "scripts": { "start": "vite", From 5fc379c405279c8f77a8b5c14ca4501a9c1fad0d Mon Sep 17 00:00:00 2001 From: Madmadness65 Date: Fri, 2 May 2025 20:43:13 -0500 Subject: [PATCH 097/262] [i18n] Update locales --- public/locales | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/locales b/public/locales index 833dc40ec74..a7036a07875 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit 833dc40ec7409031fcea147ccbc45ec9c0ba0213 +Subproject commit a7036a07875615674ea898d0fe3b182a1080af38 From a8382d71fc8be5c0abeb53a2c2a636d1d2f89d24 Mon Sep 17 00:00:00 2001 From: Madmadness65 Date: Fri, 2 May 2025 20:45:35 -0500 Subject: [PATCH 098/262] Remove Mudbray from spring event At the request of Damocleas --- src/timed-event-manager.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/timed-event-manager.ts b/src/timed-event-manager.ts index 3f5e0393ff7..951d98aefec 100644 --- a/src/timed-event-manager.ts +++ b/src/timed-event-manager.ts @@ -340,7 +340,6 @@ const timedEvents: TimedEvent[] = [ { species: Species.DEERLING, formIndex: 0 }, // Spring Deerling { species: Species.CLAUNCHER }, { species: Species.WISHIWASHI }, - { species: Species.MUDBRAY }, { species: Species.DRAMPA }, { species: Species.JANGMO_O }, { species: Species.APPLIN }, @@ -351,7 +350,7 @@ const timedEvents: TimedEvent[] = [ { wave: 8, type: "CATCHING_CHARM" }, { wave: 25, type: "SHINY_CHARM" }, ], - } + }, ]; export class TimedEventManager { From 3cb3fd15ec9420e248d766afae90e66123002e29 Mon Sep 17 00:00:00 2001 From: Madmadness65 <59298170+Madmadness65@users.noreply.github.com> Date: Fri, 2 May 2025 20:50:23 -0500 Subject: [PATCH 099/262] [Sprite] Add missing variant icons, fix misnamed variant icons (#5751) Add missing variant icons, fix misnamed variant icons --- .../images/pokemon/icons/variant/4/417_2.png | Bin 0 -> 744 bytes .../images/pokemon/icons/variant/4/417_3.png | Bin 0 -> 747 bytes .../pokemon/icons/variant/7/746-school_1.png | Bin 747 -> 0 bytes .../pokemon/icons/variant/7/746-school_3.png | Bin 0 -> 747 bytes .../images/pokemon/icons/variant/7/746_1.png | Bin 492 -> 0 bytes .../images/pokemon/icons/variant/7/746_2.png | Bin 489 -> 492 bytes .../images/pokemon/icons/variant/7/746_3.png | Bin 0 -> 489 bytes .../images/pokemon/icons/variant/8/840_2.png | Bin 0 -> 269 bytes .../images/pokemon/icons/variant/8/840_3.png | Bin 0 -> 281 bytes .../icons/variant/8/841-gigantamax_2.png | Bin 0 -> 406 bytes .../icons/variant/8/841-gigantamax_3.png | Bin 0 -> 408 bytes .../images/pokemon/icons/variant/8/841_2.png | Bin 0 -> 397 bytes .../images/pokemon/icons/variant/8/841_3.png | Bin 0 -> 408 bytes .../icons/variant/8/842-gigantamax_2.png | Bin 0 -> 406 bytes .../icons/variant/8/842-gigantamax_3.png | Bin 0 -> 408 bytes .../images/pokemon/icons/variant/8/842_2.png | Bin 0 -> 388 bytes .../images/pokemon/icons/variant/8/842_3.png | Bin 0 -> 388 bytes .../images/pokemon/icons/variant/8/871_1.png | Bin 471 -> 0 bytes .../images/pokemon/icons/variant/8/871_2.png | Bin 474 -> 543 bytes .../images/pokemon/icons/variant/8/871_3.png | Bin 0 -> 538 bytes .../images/pokemon/icons/variant/9/1011_2.png | Bin 0 -> 344 bytes .../images/pokemon/icons/variant/9/1011_3.png | Bin 0 -> 344 bytes .../images/pokemon/icons/variant/9/1019_2.png | Bin 0 -> 492 bytes .../images/pokemon/icons/variant/9/1019_3.png | Bin 0 -> 492 bytes public/images/pokemon_icons_4v.json | 508 +++---- public/images/pokemon_icons_4v.png | Bin 46415 -> 46932 bytes public/images/pokemon_icons_7v.json | 10 +- public/images/pokemon_icons_8v.json | 1190 ++++++++++------- public/images/pokemon_icons_8v.png | Bin 46699 -> 48634 bytes public/images/pokemon_icons_9v.json | 112 +- public/images/pokemon_icons_9v.png | Bin 35071 -> 36066 bytes 31 files changed, 1078 insertions(+), 742 deletions(-) create mode 100644 public/images/pokemon/icons/variant/4/417_2.png create mode 100644 public/images/pokemon/icons/variant/4/417_3.png delete mode 100644 public/images/pokemon/icons/variant/7/746-school_1.png create mode 100644 public/images/pokemon/icons/variant/7/746-school_3.png delete mode 100644 public/images/pokemon/icons/variant/7/746_1.png create mode 100644 public/images/pokemon/icons/variant/7/746_3.png create mode 100644 public/images/pokemon/icons/variant/8/840_2.png create mode 100644 public/images/pokemon/icons/variant/8/840_3.png create mode 100644 public/images/pokemon/icons/variant/8/841-gigantamax_2.png create mode 100644 public/images/pokemon/icons/variant/8/841-gigantamax_3.png create mode 100644 public/images/pokemon/icons/variant/8/841_2.png create mode 100644 public/images/pokemon/icons/variant/8/841_3.png create mode 100644 public/images/pokemon/icons/variant/8/842-gigantamax_2.png create mode 100644 public/images/pokemon/icons/variant/8/842-gigantamax_3.png create mode 100644 public/images/pokemon/icons/variant/8/842_2.png create mode 100644 public/images/pokemon/icons/variant/8/842_3.png delete mode 100644 public/images/pokemon/icons/variant/8/871_1.png create mode 100644 public/images/pokemon/icons/variant/8/871_3.png create mode 100644 public/images/pokemon/icons/variant/9/1011_2.png create mode 100644 public/images/pokemon/icons/variant/9/1011_3.png create mode 100644 public/images/pokemon/icons/variant/9/1019_2.png create mode 100644 public/images/pokemon/icons/variant/9/1019_3.png diff --git a/public/images/pokemon/icons/variant/4/417_2.png b/public/images/pokemon/icons/variant/4/417_2.png new file mode 100644 index 0000000000000000000000000000000000000000..e1bd9e52bb009dc5a468fcecec531bbb39ebf5ca GIT binary patch literal 744 zcmVP)X00001b5ch_0Itp) z=>Px%p-DtRR9Hvtl}|_%aTLejUKTMaOlZLr7om(URtD)IWjDQak|GcZB!i-`Kq*3! z4kAbd?jcD`(Tjwq=+vb(Q3AUx_6MR2++7OELy@8>dztt?c*D=xb!T?xH?jxcW#%`( zncw^TzVCg1@K_tI% z?7*%`FyDMAMUAH_84N%b7+N6((* zvTa2^Gr(5(SDJzVjIQ~4-m`x(RE)>tG=8R)6Lmz}O+f*-o&3w=ho4?@dDZ^QW{6A& zWzHp*Ma0ReSHKUpU%1D0VsL?IO_;^X@^_&2ldXc&X00001b5ch_0Itp) z=>Px%qe(K^^$!(a_^?;j?^-)OgB`1)( z1}Lgo0nx_?q=VfRKott=!7g=A(7%a~WT&PlfOa`0fPk8N-e3ZvJ-fP0;o33(6om80 zbW>U<7+&JQ+JQg4Tz1Sq*x9qFOdC%@CZ3wp|0^BoZC z^}UF3K1rfWNXzvhx)y1rf#yOJ?&U&^zJ5EweSn`jzU5Dd0dXhV!p;N$YQUrr0N53+ zG1XJygcy*+Em3cC5O7BuZ&K+QZAbWeMmE{600U5R5AS8%8tV_?0dD~f!!WeV^%S~$ zm0_%o<=wmRYZFjaZ~oO3Gh+S9=LG#6AN39p>K#5*L4n70JA{DKqVr{}su-NFjK60{ z`3RXOb27nUPS#ZnKvbq`09kz2Pl2-QN#LTQ0HR;oc#)Ue!MOqil&aRJr<1gC>;Q-D z?5%bNc=O~@l7av{LTfzk+g%J52nN~F#{Ju-pnzNY{g?ZbRka*mHUBadM5==_ z>k!K(Qps_HKL_I5{RBNtqSeLVc5@JB2a;+xE z3Bn3kH(&zmNX00001b5ch_0Itp) z=>Px%q)9|UR9Hvtmpw=vK@`WIg#!uL03UmKc4EYDahHX0|>Z={41IWr^i*@Rlus=K`JcB zp^i@xTQ@s_!={r0#3I9u9@^ReEd&G{41ltkx$mz6ayel@83wQnI=^^G1>P)r_w7>r z1fU#qaP8-S0U^P=@1sOcET6#v&Ai!fHGw3TF!_tEa-<&FrG?p#$m< zObNJ|=0?N)0Q?mR7#Z!Pa3`do>R#2&DwvwlEus6Ax$@n%tHgtIq@a8du$qY9aW)V9 zDK^Rw`m7j9d^dM0F_Jgr7!=1i~wmGhI zP#>FX00001b5ch_0Itp) z=>Px%qe(r>DCjv=C+l9Tde&q8mhz!h&>=iVk5ck%EYl zHw7<>3f@AB4pLztf(PrCL=ae#V6vzYZ6dn5;6=2ImEt?_d&~~A``+xng@yWE-rITa z&3xwj`!`!e1#U$J&PV?NbM?@_rC=}^{1c1CJl(V>lK~8_Tw8iU7wc}5mykIF0uEpc z&xdI&{*1m&*B2h(`SwpV-@765!Bjz3Kb`8HDahGs0th%OaZCy8bXwIt1#GKoCCh(? z-u?7By4ejJHk}h77HKL@QX+mR1OyxmfU@b_msdb8Ck!aV0G2_cnQb%w`PFzd=SVq5kKQ>?i#pa zmm&1$OqrTBAUum7HyOD;30hdhQWml~*tI*IS(la48BysXaX&dyEx-ZDtqtSoHf#)Qa^i6WWEI~|bX00001b5ch_0Itp) z=>Px$q)9|UR9Hu2WEkXtage)@Vbp z90zh32!O=yU3tc^pzjnzLXjC*%)9hFZKD|7f$JBZWZ0IG33e3Bksulb<}~dF)4j)k zf$6Q?hO~7cw$KAPuyHmw18b8p*nu!dfgGeFC%}-o@)bP9Xr7C)IS>?uYiF1$bq0}x_I_6*esBPKmZhq`o^*h`_^3rJ8s{hrwpr~ zvl5-wa5+ppvSq_9b5|-#;4y{`825i^#aIt|6 zL1Z7J*B&5#sN`=3Cp&41(;vtlvO^GGw7?uapixXtjwDA9O+t_yhfp;aQ_}&2%o+_r iLLo#*e$a;?0Bl;k9}>C!fdBvi07*qoM6N<$f&c)`_Q>7< diff --git a/public/images/pokemon/icons/variant/7/746_2.png b/public/images/pokemon/icons/variant/7/746_2.png index 8746a45310dff6fa78aeabb7f9eba9d407c64907..d4897e0acf3481796b389f02aff5ecfc067ee1e4 100644 GIT binary patch delta 453 zcmV;$0XqKa1MCBkF@K~q>BS#4g-Y<44Cd?hqDd5wZZHQTdy*F>0ZZBY=6ndkW%MLlH)-7$qGT_ z&_H(FX{VnIAV-262XYt)fW+=ydB(7y?-WBqkr`ObyYxJ5qZr+R>ldD6*p`tAb`;E! zAQ}YbH0=h{y~lrn>8;&{v~?i1&;vQJaW*#tYm+h9fiOpb9Hb&Az>vA}6+Fafo{O$bq0}x_I_6*esBPKmZhq`o^*h z`_^3rJ8s{hrwpr~vl5-wa5+ppvSq_9b5|-#; z4y{`825i^#aIt|6L1Z7J*B&5#sN`=3Cp&41(;vtlvOYr)U$np+J)lucPL3o;4^2Xl v9EVUf7gN&#gv=TZK|&!!NPf_VAOLJyydM&|{eb`g002ovPDHLkV1fVufD*&M delta 450 zcmV;z0X_cg1L*^hF@K>+L_t(oN9~n8OT$1I$DgXSs6(L;unrO(M1qST2ri;upx~(B z2_eMha@W`nd6v6e?k>Olp68Mr zjdJYH5MFPZ=8xkz(xoLmQGW&$59fJN5V*g;P@>xX z3&}!i0|ue)ZjSx;SX$ln`+#9M4E_rsgTV;LPIcSw&sv+J-?A@gYp+Iz_fD0yaw0ga zS27s15rjLb)(Mb+0~i8hP4}7X$1k$x#>Lp>>qNRK4g+2_9;n_t7f=j|7IAj%iq8(L!$n$OnHPWnLj>Vu zz69YpiE9vmNR!v@ioF1YfJI|wTGSfgZhHoel|Q6w?JxMmfY^v3MQyda0*nKITywJD zx_)Mr02z{to s0U78i9wb2AUYWr-Lvi;<-rz5>_qZQfp|`C70000b%7 diff --git a/public/images/pokemon/icons/variant/7/746_3.png b/public/images/pokemon/icons/variant/7/746_3.png new file mode 100644 index 0000000000000000000000000000000000000000..8746a45310dff6fa78aeabb7f9eba9d407c64907 GIT binary patch literal 489 zcmVX00001b5ch_0Itp) z=>Px$p-DtRR9Hvtl|4(tKp4lLsp%AbR5*iy#OtqF*baG?yIk%rzxy&?8h&%=ElX?8(L!$n$OnHPWnLj>Vuz69YpiE9vmNR!v@ zioF1YfJI|wTGSfgZhHoel|Q6w?JxMmfY^v3MQyda0*nKITywJDx_)Mr02z{toEW<^Neqn@eUffF79Is7F- ze!&d?QNYvQdCP!O^`0({Ar`%FFGX{;8t|}O@XMQ&jMD#C&*-Z6C?T=rt=YW1H__01clnfXhuev$$@ Og~8L+&t;ucLK6VTn08M9 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/8/841-gigantamax_2.png b/public/images/pokemon/icons/variant/8/841-gigantamax_2.png new file mode 100644 index 0000000000000000000000000000000000000000..aaed8081eec8fbcf46ce52506260a34c6bf3952f GIT binary patch literal 406 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4ats1|LR=LU z6+f&9`hT~6_4P;p|Nk#obky0&aq-RzZE5SOYUbT}{S&D0u*;-3^=q_)@+~VGSobEG z0fhugg8YJk>S2HZ#9((Vl>o~9@N{tuvFPo+%*c0GfrItJ{D=ap1HbQ=J=nG6)=Rfp zYFEX(x+=~!{yTL2VWL9~$EwdqWYt=JGj};%{wUn!5_$QouYgCVhf4;(qGprQw*B8~ zZfSn@J@?^k(X+ov2Lvsj&zJ5y-rT)=W^JR!Px%-3PwbqsdycV^k=XR&sgG9$RrD z63nsGXsX5TsFNAD6_l>}Eh^r9`B&vtzi%HzqDq-&e{tWMdRen((b?+4tWquCtUn%J zb$70%Pf1(7t$%NjRbPopwac{&)|(<{=I_`(Q&F&3Y07iSw|X;_H+d)LvA*5X%JsXb wNKgC5ujA)uc}HITvGtnxX*28Pvh8sv@9G{{GkwkpU??zny85}Sb4q9e0Em#d#sB~S literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/8/841_2.png b/public/images/pokemon/icons/variant/8/841_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d1a57120993711dd93b8df0bf9510e24cca7d5d7 GIT binary patch literal 397 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4ats1|LR>+# zfkDBdqkUELf`Wpg)nZp)f7E1Gw`=GU@FKT6fZ0;PlR#OMCc2SX3%on3QI^tSz_}_4wBtpKr3BTCbAar*bUY z_1~9uwWW$^`{f9^U(!-*O;%kJ=xdBoi=KXo>#LZmQ-t#})o;<|?5Ql5oSq%OT+Q~F$n{@2+I#U&(Y4nV_L7C2 zf-HR>>-3l_Gvk<_y0+dA+f#gMjy~T<_LL{S^S29Ir0%SEZtj fQ;a`f{K~3vmW_3f{$*RB*BLxr{an^LB{Ts5QqHg# literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/8/841_3.png b/public/images/pokemon/icons/variant/8/841_3.png new file mode 100644 index 0000000000000000000000000000000000000000..5eaf8ea1c57373c09cf96eaa49e8e25e40e048ed GIT binary patch literal 408 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a?ApJLR^8g zfq}vPt*amPObrSO%2$xMbMs=iv(d4Rq!l4~_x`_p_x9E1jn|&t`Pooj095Q|em`a9 z|EX`ymjF3JB|(0{4FAzV+`%?GpzJ447sn8b-m{kj^A9WVuso2FIie@h`~QD>`sEd~ z&9E%Mk^xOYVGU@G_vhJj}!0DMamv*ol$xO0wY7A29oRhfb+NrNMB5szm ztUS>ztNYL=<^No+G*b^QKJ|S%U(`dgR?V5rRbG-}bi-=tEQ|a&!Pc9p5gYH$vh=A^ zxSCpHv$pcV@s#6DJm2p=(ASCkSl2EdC+*%?rss6)*k0`r!DDN~1sB?GH~Dhh|HYqU zE6OZi=hxdy)^*CUeEV0YCmU({`oO0}52x!oB}zU%s#w?jWl!SgGA8%Pb#wc6oivKd qdi!N^18@6A?fVjoX8yeVl~Xg1E#see$3dX)89ZJ6T-G@yGywnzqr4da literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/8/842-gigantamax_2.png b/public/images/pokemon/icons/variant/8/842-gigantamax_2.png new file mode 100644 index 0000000000000000000000000000000000000000..aaed8081eec8fbcf46ce52506260a34c6bf3952f GIT binary patch literal 406 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4ats1|LR=LU z6+f&9`hT~6_4P;p|Nk#obky0&aq-RzZE5SOYUbT}{S&D0u*;-3^=q_)@+~VGSobEG z0fhugg8YJk>S2HZ#9((Vl>o~9@N{tuvFPo+%*c0GfrItJ{D=ap1HbQ=J=nG6)=Rfp zYFEX(x+=~!{yTL2VWL9~$EwdqWYt=JGj};%{wUn!5_$QouYgCVhf4;(qGprQw*B8~ zZfSn@J@?^k(X+ov2Lvsj&zJ5y-rT)=W^JR!Px%-3PwbqsdycV^k=XR&sgG9$RrD z63nsGXsX5TsFNAD6_l>}Eh^r9`B&vtzi%HzqDq-&e{tWMdRen((b?+4tWquCtUn%J zb$70%Pf1(7t$%NjRbPopwac{&)|(<{=I_`(Q&F&3Y07iSw|X;_H+d)LvA*5X%JsXb wNKgC5ujA)uc}HITvGtnxX*28Pvh8sv@9G{{GkwkpU??zny85}Sb4q9e0Em#d#sB~S literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/8/842_2.png b/public/images/pokemon/icons/variant/8/842_2.png new file mode 100644 index 0000000000000000000000000000000000000000..87de609f819c7459d0826780608ea18257222500 GIT binary patch literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4ats1|LR>+# zfx+tQk7g~{91swo9h7fb(U94@MNcyL@87=#i;h;+%mb=PFPPJ+ns6^4$Ja^u-ec7jV%l5w35xBrIFLKYt zT#kd6FQf#ghCC15-l@F%{gnM#Uk+}3zxHX>X%C6|)PrGXANxqFUrN2$D#CNfQLaD1 zao+lb(CZRbcAjEBO=;mrG8~+?O*ziIQ+2|wK7Ku=69M+}_od!H(5x3S;QSr7mqGp_ W`_c3z=lFm=X7F_Nb6Mw<&;$S>x2*vH literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/8/842_3.png b/public/images/pokemon/icons/variant/8/842_3.png new file mode 100644 index 0000000000000000000000000000000000000000..15dfe7ea02caed0cd7141dfa16e160c9dc43581b GIT binary patch literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4ats1|LR>+# zfx(@d7a#RZ4G0LhxT5aegFVUa*4~QJfB*j7zjgJBkUXH8Ma{Kt=J!)p{@)_glndkw zlmz(&GyF#d2LigCfpX70T^vI!dXHYd-F4W2hvh=w;%@1S&;I}4rrf%TJ3IaF6)qVj zOG(b-JMY>B9MH;%c$_iCLagW_%kkn=h7%vBv|ck1Ec~7BwJGlDwe=~RcCVTl>#bs( zF1lqU%i=q$H^;j^O1XFToM!q&1N{k`s?I9~MxG13@Z5RR_GO>eE!+EAN8kd>yvRKl zb2$!PzK{}}8uC1Jd#Cd5_fz&~eL1-C{o1Ehr#&R_^j=oZ|!fn8DN4&t;ucLK6VjU#?34 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/8/871_1.png b/public/images/pokemon/icons/variant/8/871_1.png deleted file mode 100644 index ff77c60cea26e2f99e50106a57e30a4f09db0c4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 471 zcmV;|0Vw{7P)Px$k4Z#9R9Hvtn6XL&K@f%~*yuZ0MvS1C6CcFJ&Q7cp!RN3Ljg_L6osEUyONgWp zOwh*=w2S;J|FK!lOIY14m}nKiTa_ff74m{~LXYry7gt|XY*TxNd&t-RDM3Vze+00000 NNkvXXu0mjf0040z(OUoj diff --git a/public/images/pokemon/icons/variant/8/871_2.png b/public/images/pokemon/icons/variant/8/871_2.png index bfefb010219cef18084f42ec879cf851b55310ef..719ee1eb3a9c114f9994b82a6f5503c5519aa5bf 100644 GIT binary patch literal 543 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`B?5dxT#Yo<&sG{Fwboe0hA+^GI1&-@@x=?EWa%#<10cmw666>B9|9Qe zHSdiCig6ZrL>4nJ@ErzW#^d=bQb2~4xJHx&=ckpFCl;kL1SDqWmFW4ohA5co8S0t+ zxp;g%P|dc~2+uT6Pb~%xAcvJfijkFp5ynupK>$cc0dZzK z3s^i0$OeG~AO`7&(P)-30K;JdI|B<)g@KW=0pkLQsURJ!3m_&<0kT1W31|)zSY?o< z1&{^RWoQ5j0)|5z_1CVdM)?An(>z@qLoEECPI$=IV!+WXIHUT%`MznD^A~ZPP2WO73E;Gsz&EPzKq3$6z^jd&J9OGHa6*= zJ@0pgjrFSHWY-6dS?}hab07+cG5;)Y=ZoDt vgTe~DWM4f%fOs7 literal 474 zcmV<00VV#4P)Px$lu1NER9Hvtn6XL&K@f%~ub_wsT4-ZuA&QMppa_DUq!4TrG;iQ@M64`=g`lOi zg^ef{b~ail1RGyL`B(n1SwI zSikF=bT>hTpP zA;MNn{1`MFV_7Tosj!tV}##9h-fwE6v2dzHk0Xpp1vF{W&1TUJ~RN{2vS$q`aBk zfI^%F9+AZi419+{nDKc2iWH!rM2TxeNpOBzNqJ&XDnmeGW?qS&pKFMMsh**p*`JHY z*8|mTOO5bM^YqkW-~e)18Kf9l85n^qFCdnNvcW!JWCn{f0mTg&nHU6sbQBP0wzGi6 zvw&<6NC0Axei)5rDFZMJCa^QG096!MXrq(i9*Y1ek#4Fo9JDSy}*D zP+f)w1|Zo(9QD_(sz&(&nNvMo978PppH2wmJ8Zz=tl4ts|B0=VLENVodHue%#V|?KQhe^4TJDnSjgnVSVJ?sA5 z6{@UX6}w#@xMsbL^;Mc8`Tt)~rGJ~z=GaFCPUo(AEp6s2wCLN#-u~O*z>D2G6rKHabV59X-r21&f$teO5DEak-(R=msX`#ak9IO{s&*)hH@BeeQH_NgVxP4QEKK4I{5^>bP0l+XkKCV-aC literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/9/1011_3.png b/public/images/pokemon/icons/variant/9/1011_3.png new file mode 100644 index 0000000000000000000000000000000000000000..fa5e3e351352fb3cd797346f71424ca2de5436ae GIT binary patch literal 344 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a&!ZHLR=LU z6(99XOm);q}g#sB~RSA^t!et+-rrKNMie8MFpF0QECGG_)*$7LPAA3%z~ zB*-rqs0;}(T)8u2Ay8_cr;B5VMeo(ir-cqHaIjujJ)>j&zyHtK-YoO-i7g3E+tiu9 zyL)z4*}Q$iB}yr-CI literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/9/1019_2.png b/public/images/pokemon/icons/variant/9/1019_2.png new file mode 100644 index 0000000000000000000000000000000000000000..671ae3f6552063d6c01a178f386541da435830f9 GIT binary patch literal 492 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4ax4RULR=LU z6+PT@f`WpygYx~R&8w=JH*3M>JFkB}-t@6OXwl-G7ykeMZ!O|jHgT(`tQSyf$C>+S zM(IG^yY?;Q1yaH#L4LtNHE4igQ|%oNpnXoBE{-7NQ9b$7B+i{=;0>=nh0!80Vj2b8p5X6Xz(E>Nww-X;C7#N&d#2R&=9 z%)B6`sTX@lcv^t;jZc~HqgEJ)Z?xFiD79sZ)}-kt8jtRN{Y>U)!K8+Q#oh-W=^8W~ z|5(JElUmEX{g=|_?|;tgwygUz^~kMIea&o-@0%3E%Xq9pmhWv-ogcf}Dr)+UW$y*2 zJgK#M;-zk0;OwQTzS!qPpT?8gcY(~G)s0U~-rn}yvo!L;LEiaF#oIX5A}h?Meg3;s z=f9q1cz)l_y7wWEEspc&S{YwkYGxpx82YqjHtY7DpW>Mn8t1GJT$)&Vzu{lQyTaN% ae;EZFY`D7i_s#+aHiM_DpUXO@geCwj!{dYi literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/9/1019_3.png b/public/images/pokemon/icons/variant/9/1019_3.png new file mode 100644 index 0000000000000000000000000000000000000000..0569b3e84b6409b1ce3ca680941d35125f428257 GIT binary patch literal 492 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4ax4RULR=LU z6$7=kgMxzg&nS3zf5-BmoR2-z9^JY2c+sCX+$AjE#&Gqvg4tkdgT@=_d z`NuA%`Namucbwwlx;xpZMe~bg_KM=h;29F%14`O2vvdX?7pPWT?~?vk;&DOWgPt{4 zW?m4})QdeNJS{-_#;45pQ7eqYH(Km$l-e>yYtr-+jYoICekOCYU{XWDV(){GbPXDg ze=Oq7Nv&nx{!3}|_dn-#Th{%VdgNB9zGk+^_f3l7Wjt0P%lEda&W~Mf6*YawviE{h zp43`B@lrQ0aQ4zvU+ic%G~Z*P0t&FcNH8YS;41L-%n{|87Pw~tOjdRuqE=?@G-|(;DU19B> azl;J7He6l%duIUyo59o7&t;ucLK6UNjpQ!? literal 0 HcmV?d00001 diff --git a/public/images/pokemon_icons_4v.json b/public/images/pokemon_icons_4v.json index bbaca92c7c7..ffc36e945c4 100644 --- a/public/images/pokemon_icons_4v.json +++ b/public/images/pokemon_icons_4v.json @@ -1312,7 +1312,7 @@ } }, { - "filename": "418_2", + "filename": "417_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -1332,6 +1332,48 @@ "h": 30 } }, + { + "filename": "417_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 120, + "w": 40, + "h": 30 + } + }, + { + "filename": "418_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 480, + "y": 120, + "w": 40, + "h": 30 + } + }, { "filename": "418_3", "rotated": false, @@ -1347,8 +1389,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 120, + "x": 0, + "y": 150, "w": 40, "h": 30 } @@ -1368,8 +1410,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 120, + "x": 40, + "y": 150, "w": 40, "h": 30 } @@ -1389,7 +1431,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 80, "y": 150, "w": 40, "h": 30 @@ -1410,7 +1452,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 120, "y": 150, "w": 40, "h": 30 @@ -1431,7 +1473,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 160, "y": 150, "w": 40, "h": 30 @@ -1452,7 +1494,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 200, "y": 150, "w": 40, "h": 30 @@ -1473,7 +1515,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 240, "y": 150, "w": 40, "h": 30 @@ -1494,7 +1536,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 280, "y": 150, "w": 40, "h": 30 @@ -1515,7 +1557,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 320, "y": 150, "w": 40, "h": 30 @@ -1536,7 +1578,7 @@ "h": 30 }, "frame": { - "x": 280, + "x": 360, "y": 150, "w": 40, "h": 30 @@ -1557,7 +1599,7 @@ "h": 30 }, "frame": { - "x": 320, + "x": 400, "y": 150, "w": 40, "h": 30 @@ -1578,7 +1620,7 @@ "h": 30 }, "frame": { - "x": 360, + "x": 440, "y": 150, "w": 40, "h": 30 @@ -1599,7 +1641,7 @@ "h": 30 }, "frame": { - "x": 400, + "x": 480, "y": 150, "w": 40, "h": 30 @@ -1620,8 +1662,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 150, + "x": 0, + "y": 180, "w": 40, "h": 30 } @@ -1641,8 +1683,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 150, + "x": 40, + "y": 180, "w": 40, "h": 30 } @@ -1662,7 +1704,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 80, "y": 180, "w": 40, "h": 30 @@ -1683,7 +1725,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 120, "y": 180, "w": 40, "h": 30 @@ -1704,7 +1746,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 160, "y": 180, "w": 40, "h": 30 @@ -1725,7 +1767,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 200, "y": 180, "w": 40, "h": 30 @@ -1746,7 +1788,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 240, "y": 180, "w": 40, "h": 30 @@ -1767,7 +1809,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 280, "y": 180, "w": 40, "h": 30 @@ -1788,7 +1830,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 320, "y": 180, "w": 40, "h": 30 @@ -1809,7 +1851,7 @@ "h": 30 }, "frame": { - "x": 280, + "x": 360, "y": 180, "w": 40, "h": 30 @@ -1830,7 +1872,7 @@ "h": 30 }, "frame": { - "x": 320, + "x": 400, "y": 180, "w": 40, "h": 30 @@ -1851,7 +1893,7 @@ "h": 30 }, "frame": { - "x": 360, + "x": 440, "y": 180, "w": 40, "h": 30 @@ -1872,7 +1914,7 @@ "h": 30 }, "frame": { - "x": 400, + "x": 480, "y": 180, "w": 40, "h": 30 @@ -1893,8 +1935,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 180, + "x": 0, + "y": 210, "w": 40, "h": 30 } @@ -1914,8 +1956,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 180, + "x": 40, + "y": 210, "w": 40, "h": 30 } @@ -1935,7 +1977,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 80, "y": 210, "w": 40, "h": 30 @@ -1956,7 +1998,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 120, "y": 210, "w": 40, "h": 30 @@ -1977,7 +2019,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 160, "y": 210, "w": 40, "h": 30 @@ -1998,7 +2040,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 200, "y": 210, "w": 40, "h": 30 @@ -2019,7 +2061,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 240, "y": 210, "w": 40, "h": 30 @@ -2040,7 +2082,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 280, "y": 210, "w": 40, "h": 30 @@ -2061,7 +2103,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 320, "y": 210, "w": 40, "h": 30 @@ -2082,7 +2124,7 @@ "h": 30 }, "frame": { - "x": 280, + "x": 360, "y": 210, "w": 40, "h": 30 @@ -2103,7 +2145,7 @@ "h": 30 }, "frame": { - "x": 320, + "x": 400, "y": 210, "w": 40, "h": 30 @@ -2124,7 +2166,7 @@ "h": 30 }, "frame": { - "x": 360, + "x": 440, "y": 210, "w": 40, "h": 30 @@ -2145,7 +2187,7 @@ "h": 30 }, "frame": { - "x": 400, + "x": 480, "y": 210, "w": 40, "h": 30 @@ -2166,8 +2208,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 210, + "x": 0, + "y": 240, "w": 40, "h": 30 } @@ -2187,8 +2229,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 210, + "x": 40, + "y": 240, "w": 40, "h": 30 } @@ -2208,7 +2250,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 80, "y": 240, "w": 40, "h": 30 @@ -2229,7 +2271,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 120, "y": 240, "w": 40, "h": 30 @@ -2250,7 +2292,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 160, "y": 240, "w": 40, "h": 30 @@ -2271,7 +2313,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 200, "y": 240, "w": 40, "h": 30 @@ -2292,7 +2334,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 240, "y": 240, "w": 40, "h": 30 @@ -2313,7 +2355,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 280, "y": 240, "w": 40, "h": 30 @@ -2334,7 +2376,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 320, "y": 240, "w": 40, "h": 30 @@ -2355,7 +2397,7 @@ "h": 30 }, "frame": { - "x": 280, + "x": 360, "y": 240, "w": 40, "h": 30 @@ -2376,7 +2418,7 @@ "h": 30 }, "frame": { - "x": 320, + "x": 400, "y": 240, "w": 40, "h": 30 @@ -2397,7 +2439,7 @@ "h": 30 }, "frame": { - "x": 360, + "x": 440, "y": 240, "w": 40, "h": 30 @@ -2418,7 +2460,7 @@ "h": 30 }, "frame": { - "x": 400, + "x": 480, "y": 240, "w": 40, "h": 30 @@ -2439,8 +2481,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 240, + "x": 0, + "y": 270, "w": 40, "h": 30 } @@ -2460,8 +2502,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 240, + "x": 40, + "y": 270, "w": 40, "h": 30 } @@ -2481,7 +2523,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 80, "y": 270, "w": 40, "h": 30 @@ -2502,7 +2544,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 120, "y": 270, "w": 40, "h": 30 @@ -2523,7 +2565,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 160, "y": 270, "w": 40, "h": 30 @@ -2544,7 +2586,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 200, "y": 270, "w": 40, "h": 30 @@ -2565,7 +2607,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 240, "y": 270, "w": 40, "h": 30 @@ -2586,7 +2628,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 280, "y": 270, "w": 40, "h": 30 @@ -2607,7 +2649,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 320, "y": 270, "w": 40, "h": 30 @@ -2628,7 +2670,7 @@ "h": 30 }, "frame": { - "x": 280, + "x": 360, "y": 270, "w": 40, "h": 30 @@ -2649,7 +2691,7 @@ "h": 30 }, "frame": { - "x": 320, + "x": 400, "y": 270, "w": 40, "h": 30 @@ -2670,7 +2712,7 @@ "h": 30 }, "frame": { - "x": 360, + "x": 440, "y": 270, "w": 40, "h": 30 @@ -2691,7 +2733,7 @@ "h": 30 }, "frame": { - "x": 400, + "x": 480, "y": 270, "w": 40, "h": 30 @@ -2712,8 +2754,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 270, + "x": 0, + "y": 300, "w": 40, "h": 30 } @@ -2733,8 +2775,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 270, + "x": 40, + "y": 300, "w": 40, "h": 30 } @@ -2754,7 +2796,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 80, "y": 300, "w": 40, "h": 30 @@ -2775,7 +2817,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 120, "y": 300, "w": 40, "h": 30 @@ -2796,7 +2838,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 160, "y": 300, "w": 40, "h": 30 @@ -2817,7 +2859,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 200, "y": 300, "w": 40, "h": 30 @@ -2838,7 +2880,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 240, "y": 300, "w": 40, "h": 30 @@ -2859,7 +2901,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 280, "y": 300, "w": 40, "h": 30 @@ -2880,7 +2922,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 320, "y": 300, "w": 40, "h": 30 @@ -2901,7 +2943,7 @@ "h": 30 }, "frame": { - "x": 280, + "x": 360, "y": 300, "w": 40, "h": 30 @@ -2922,7 +2964,7 @@ "h": 30 }, "frame": { - "x": 320, + "x": 400, "y": 300, "w": 40, "h": 30 @@ -2943,7 +2985,7 @@ "h": 30 }, "frame": { - "x": 360, + "x": 440, "y": 300, "w": 40, "h": 30 @@ -2964,7 +3006,7 @@ "h": 30 }, "frame": { - "x": 400, + "x": 480, "y": 300, "w": 40, "h": 30 @@ -2985,8 +3027,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 300, + "x": 0, + "y": 330, "w": 40, "h": 30 } @@ -3006,8 +3048,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 300, + "x": 40, + "y": 330, "w": 40, "h": 30 } @@ -3027,7 +3069,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 80, "y": 330, "w": 40, "h": 30 @@ -3048,7 +3090,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 120, "y": 330, "w": 40, "h": 30 @@ -3069,7 +3111,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 160, "y": 330, "w": 40, "h": 30 @@ -3090,7 +3132,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 200, "y": 330, "w": 40, "h": 30 @@ -3111,7 +3153,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 240, "y": 330, "w": 40, "h": 30 @@ -3132,7 +3174,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 280, "y": 330, "w": 40, "h": 30 @@ -3153,7 +3195,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 320, "y": 330, "w": 40, "h": 30 @@ -3174,7 +3216,7 @@ "h": 30 }, "frame": { - "x": 280, + "x": 360, "y": 330, "w": 40, "h": 30 @@ -3195,7 +3237,7 @@ "h": 30 }, "frame": { - "x": 320, + "x": 400, "y": 330, "w": 40, "h": 30 @@ -3216,7 +3258,7 @@ "h": 30 }, "frame": { - "x": 360, + "x": 440, "y": 330, "w": 40, "h": 30 @@ -3237,7 +3279,7 @@ "h": 30 }, "frame": { - "x": 400, + "x": 480, "y": 330, "w": 40, "h": 30 @@ -3258,8 +3300,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 330, + "x": 0, + "y": 360, "w": 40, "h": 30 } @@ -3279,8 +3321,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 330, + "x": 40, + "y": 360, "w": 40, "h": 30 } @@ -3300,7 +3342,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 80, "y": 360, "w": 40, "h": 30 @@ -3321,7 +3363,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 120, "y": 360, "w": 40, "h": 30 @@ -3342,7 +3384,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 160, "y": 360, "w": 40, "h": 30 @@ -3363,7 +3405,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 200, "y": 360, "w": 40, "h": 30 @@ -3384,7 +3426,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 240, "y": 360, "w": 40, "h": 30 @@ -3405,7 +3447,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 280, "y": 360, "w": 40, "h": 30 @@ -3426,7 +3468,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 320, "y": 360, "w": 40, "h": 30 @@ -3447,7 +3489,7 @@ "h": 30 }, "frame": { - "x": 280, + "x": 360, "y": 360, "w": 40, "h": 30 @@ -3468,7 +3510,7 @@ "h": 30 }, "frame": { - "x": 320, + "x": 400, "y": 360, "w": 40, "h": 30 @@ -3489,7 +3531,7 @@ "h": 30 }, "frame": { - "x": 360, + "x": 440, "y": 360, "w": 40, "h": 30 @@ -3510,7 +3552,7 @@ "h": 30 }, "frame": { - "x": 400, + "x": 480, "y": 360, "w": 40, "h": 30 @@ -3531,8 +3573,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 360, + "x": 0, + "y": 390, "w": 40, "h": 30 } @@ -3552,8 +3594,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 360, + "x": 40, + "y": 390, "w": 40, "h": 30 } @@ -3573,7 +3615,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 80, "y": 390, "w": 40, "h": 30 @@ -3594,7 +3636,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 120, "y": 390, "w": 40, "h": 30 @@ -3615,7 +3657,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 160, "y": 390, "w": 40, "h": 30 @@ -3636,7 +3678,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 200, "y": 390, "w": 40, "h": 30 @@ -3657,7 +3699,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 240, "y": 390, "w": 40, "h": 30 @@ -3678,7 +3720,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 280, "y": 390, "w": 40, "h": 30 @@ -3699,7 +3741,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 320, "y": 390, "w": 40, "h": 30 @@ -3720,7 +3762,7 @@ "h": 30 }, "frame": { - "x": 280, + "x": 360, "y": 390, "w": 40, "h": 30 @@ -3741,7 +3783,7 @@ "h": 30 }, "frame": { - "x": 320, + "x": 400, "y": 390, "w": 40, "h": 30 @@ -3762,7 +3804,7 @@ "h": 30 }, "frame": { - "x": 360, + "x": 440, "y": 390, "w": 40, "h": 30 @@ -3783,7 +3825,7 @@ "h": 30 }, "frame": { - "x": 400, + "x": 480, "y": 390, "w": 40, "h": 30 @@ -3804,8 +3846,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 390, + "x": 0, + "y": 420, "w": 40, "h": 30 } @@ -3825,8 +3867,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 390, + "x": 40, + "y": 420, "w": 40, "h": 30 } @@ -3846,7 +3888,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 80, "y": 420, "w": 40, "h": 30 @@ -3867,7 +3909,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 120, "y": 420, "w": 40, "h": 30 @@ -3888,7 +3930,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 160, "y": 420, "w": 40, "h": 30 @@ -3909,7 +3951,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 200, "y": 420, "w": 40, "h": 30 @@ -3930,7 +3972,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 240, "y": 420, "w": 40, "h": 30 @@ -3951,7 +3993,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 280, "y": 420, "w": 40, "h": 30 @@ -3972,7 +4014,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 320, "y": 420, "w": 40, "h": 30 @@ -3993,7 +4035,7 @@ "h": 30 }, "frame": { - "x": 280, + "x": 360, "y": 420, "w": 40, "h": 30 @@ -4014,7 +4056,7 @@ "h": 30 }, "frame": { - "x": 320, + "x": 400, "y": 420, "w": 40, "h": 30 @@ -4035,7 +4077,7 @@ "h": 30 }, "frame": { - "x": 360, + "x": 440, "y": 420, "w": 40, "h": 30 @@ -4056,7 +4098,7 @@ "h": 30 }, "frame": { - "x": 400, + "x": 480, "y": 420, "w": 40, "h": 30 @@ -4077,8 +4119,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 420, + "x": 0, + "y": 450, "w": 40, "h": 30 } @@ -4098,8 +4140,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 420, + "x": 40, + "y": 450, "w": 40, "h": 30 } @@ -4119,7 +4161,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 80, "y": 450, "w": 40, "h": 30 @@ -4140,7 +4182,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 120, "y": 450, "w": 40, "h": 30 @@ -4161,7 +4203,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 160, "y": 450, "w": 40, "h": 30 @@ -4182,7 +4224,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 200, "y": 450, "w": 40, "h": 30 @@ -4203,7 +4245,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 240, "y": 450, "w": 40, "h": 30 @@ -4224,7 +4266,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 280, "y": 450, "w": 40, "h": 30 @@ -4245,7 +4287,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 320, "y": 450, "w": 40, "h": 30 @@ -4266,7 +4308,7 @@ "h": 30 }, "frame": { - "x": 280, + "x": 360, "y": 450, "w": 40, "h": 30 @@ -4287,7 +4329,7 @@ "h": 30 }, "frame": { - "x": 320, + "x": 400, "y": 450, "w": 40, "h": 30 @@ -4308,7 +4350,7 @@ "h": 30 }, "frame": { - "x": 360, + "x": 440, "y": 450, "w": 40, "h": 30 @@ -4329,7 +4371,7 @@ "h": 30 }, "frame": { - "x": 400, + "x": 480, "y": 450, "w": 40, "h": 30 @@ -4350,8 +4392,8 @@ "h": 30 }, "frame": { - "x": 440, - "y": 450, + "x": 0, + "y": 480, "w": 40, "h": 30 } @@ -4371,8 +4413,8 @@ "h": 30 }, "frame": { - "x": 480, - "y": 450, + "x": 40, + "y": 480, "w": 40, "h": 30 } @@ -4392,7 +4434,7 @@ "h": 30 }, "frame": { - "x": 0, + "x": 80, "y": 480, "w": 40, "h": 30 @@ -4413,7 +4455,7 @@ "h": 30 }, "frame": { - "x": 40, + "x": 120, "y": 480, "w": 40, "h": 30 @@ -4434,7 +4476,7 @@ "h": 30 }, "frame": { - "x": 80, + "x": 160, "y": 480, "w": 40, "h": 30 @@ -4455,7 +4497,7 @@ "h": 30 }, "frame": { - "x": 120, + "x": 200, "y": 480, "w": 40, "h": 30 @@ -4476,7 +4518,7 @@ "h": 30 }, "frame": { - "x": 160, + "x": 240, "y": 480, "w": 40, "h": 30 @@ -4497,7 +4539,7 @@ "h": 30 }, "frame": { - "x": 200, + "x": 280, "y": 480, "w": 40, "h": 30 @@ -4518,7 +4560,7 @@ "h": 30 }, "frame": { - "x": 240, + "x": 320, "y": 480, "w": 40, "h": 30 @@ -4539,7 +4581,7 @@ "h": 30 }, "frame": { - "x": 280, + "x": 360, "y": 480, "w": 40, "h": 30 @@ -4560,7 +4602,7 @@ "h": 30 }, "frame": { - "x": 320, + "x": 400, "y": 480, "w": 40, "h": 30 @@ -4581,7 +4623,7 @@ "h": 30 }, "frame": { - "x": 360, + "x": 440, "y": 480, "w": 40, "h": 30 @@ -4602,7 +4644,7 @@ "h": 30 }, "frame": { - "x": 400, + "x": 480, "y": 480, "w": 40, "h": 30 @@ -4622,48 +4664,6 @@ "w": 40, "h": 30 }, - "frame": { - "x": 440, - "y": 480, - "w": 40, - "h": 30 - } - }, - { - "filename": "489_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 480, - "y": 480, - "w": 40, - "h": 30 - } - }, - { - "filename": "489_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, "frame": { "x": 0, "y": 510, @@ -4672,7 +4672,7 @@ } }, { - "filename": "490_1", + "filename": "489_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -4693,7 +4693,7 @@ } }, { - "filename": "490_2", + "filename": "489_3", "rotated": false, "trimmed": false, "sourceSize": { @@ -4714,7 +4714,7 @@ } }, { - "filename": "490_3", + "filename": "490_1", "rotated": false, "trimmed": false, "sourceSize": { @@ -4735,7 +4735,7 @@ } }, { - "filename": "491_2", + "filename": "490_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -4756,7 +4756,7 @@ } }, { - "filename": "491_3", + "filename": "490_3", "rotated": false, "trimmed": false, "sourceSize": { @@ -4777,7 +4777,7 @@ } }, { - "filename": "492-land_2", + "filename": "491_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -4798,7 +4798,7 @@ } }, { - "filename": "492-land_3", + "filename": "491_3", "rotated": false, "trimmed": false, "sourceSize": { @@ -4819,7 +4819,7 @@ } }, { - "filename": "492-sky_2", + "filename": "492-land_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -4840,7 +4840,7 @@ } }, { - "filename": "492-sky_3", + "filename": "492-land_3", "rotated": false, "trimmed": false, "sourceSize": { @@ -4859,6 +4859,48 @@ "w": 40, "h": 30 } + }, + { + "filename": "492-sky_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 510, + "w": 40, + "h": 30 + } + }, + { + "filename": "492-sky_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 510, + "w": 40, + "h": 30 + } } ] } @@ -4866,6 +4908,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:52236a80fa87dc64d12684ac85cf8440:2809a2ce37dd2c24fc872d083bf5a2aa:ebc3f8ec5b2480b298192d752b6e57dc$" + "smartupdate": "$TexturePacker:SmartUpdate:00a4e5499c11f3abdf9f56423bbf4561:6f365ccd1246c9b5ae27e0e440695926:ebc3f8ec5b2480b298192d752b6e57dc$" } } diff --git a/public/images/pokemon_icons_4v.png b/public/images/pokemon_icons_4v.png index 43938ed50958d3fb9a200e654bca1e5646415453..972bff8b777a5bbc0e1c2196274824e4477e40ca 100644 GIT binary patch literal 46932 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 literal 46415 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 diff --git a/public/images/pokemon_icons_9v.json b/public/images/pokemon_icons_9v.json index 57159a3fbfb..4b7a7ba4572 100644 --- a/public/images/pokemon_icons_9v.json +++ b/public/images/pokemon_icons_9v.json @@ -3013,7 +3013,7 @@ } }, { - "filename": "1012-counterfeit_2", + "filename": "1011_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -3034,7 +3034,7 @@ } }, { - "filename": "1012-counterfeit_3", + "filename": "1011_3", "rotated": false, "trimmed": false, "sourceSize": { @@ -3055,7 +3055,7 @@ } }, { - "filename": "1013-unremarkable_2", + "filename": "1012-counterfeit_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -3076,7 +3076,7 @@ } }, { - "filename": "1013-unremarkable_3", + "filename": "1012-counterfeit_3", "rotated": false, "trimmed": false, "sourceSize": { @@ -3097,7 +3097,7 @@ } }, { - "filename": "1018_2", + "filename": "1013-unremarkable_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -3118,7 +3118,7 @@ } }, { - "filename": "1018_3", + "filename": "1013-unremarkable_3", "rotated": false, "trimmed": false, "sourceSize": { @@ -3139,7 +3139,7 @@ } }, { - "filename": "1022_2", + "filename": "1018_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -3160,7 +3160,7 @@ } }, { - "filename": "1022_3", + "filename": "1018_3", "rotated": false, "trimmed": false, "sourceSize": { @@ -3181,7 +3181,7 @@ } }, { - "filename": "1023_2", + "filename": "1019_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -3202,7 +3202,7 @@ } }, { - "filename": "1023_3", + "filename": "1019_3", "rotated": false, "trimmed": false, "sourceSize": { @@ -3223,7 +3223,7 @@ } }, { - "filename": "8901_1", + "filename": "1022_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -3244,7 +3244,7 @@ } }, { - "filename": "8901_2", + "filename": "1022_3", "rotated": false, "trimmed": false, "sourceSize": { @@ -3265,7 +3265,7 @@ } }, { - "filename": "8901_3", + "filename": "1023_2", "rotated": false, "trimmed": false, "sourceSize": { @@ -3284,6 +3284,90 @@ "w": 40, "h": 30 } + }, + { + "filename": "1023_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 420, + "w": 40, + "h": 30 + } + }, + { + "filename": "8901_1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 420, + "w": 40, + "h": 30 + } + }, + { + "filename": "8901_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 420, + "w": 40, + "h": 30 + } + }, + { + "filename": "8901_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 420, + "w": 40, + "h": 30 + } } ] } @@ -3291,6 +3375,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:c01add1e11aabd2f8931110a67a9222b:e7531bea9b5e1bef44def5b357c81630:3ec5c0bc286c296cfb7fa30a8b06f3da$" + "smartupdate": "$TexturePacker:SmartUpdate:a78ab8261d4cd63caee19962a0e01d8a:cb77bcbd2cc296577c3f2ba84b4c50f2:3ec5c0bc286c296cfb7fa30a8b06f3da$" } } diff --git a/public/images/pokemon_icons_9v.png b/public/images/pokemon_icons_9v.png index f3530abe569a35ed34dbc021ba0720c967802bf0..3636c3059d8e0e758ccbeb9749294fd80021d294 100644 GIT binary patch literal 36066 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

      BLU%vKrrUolQO6XG-?` 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 Date: Fri, 2 May 2025 21:52:51 -0400 Subject: [PATCH 100/262] [Balance][Mystery][Beta] Salesman doesn't offer event mons without HA or shiny (#5746) Don't offer event mons without HA or shiny --- .../the-pokemon-salesman-encounter.ts | 46 +++++++++++++++---- 1 file changed, 36 insertions(+), 10 deletions(-) diff --git a/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts b/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts index bab0c44db7d..25798de3b4a 100644 --- a/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts @@ -88,7 +88,7 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter = MysteryEncounterBui const r = randSeedInt(SHINY_MAGIKARP_WEIGHT); - const validEventEncounters = timedEventManager + let validEventEncounters = timedEventManager .getEventEncounters() .filter( s => @@ -116,18 +116,44 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter = MysteryEncounterBui // If you roll 1%, give shiny Magikarp with random variant species = getPokemonSpecies(Species.MAGIKARP); pokemon = new PlayerPokemon(species, 5, 2, undefined, undefined, true); - } else if ( + } + else if ( (validEventEncounters.length > 0 && (r <= EVENT_THRESHOLD || (isNullOrUndefined(species.abilityHidden) || species.abilityHidden === Abilities.NONE))) ) { - // If you roll 20%, give event encounter with 3 extra shiny rolls and its HA, if it has one - const enc = randSeedItem(validEventEncounters); - species = getPokemonSpecies(enc.species); - pokemon = new PlayerPokemon(species, 5, species.abilityHidden === Abilities.NONE ? undefined : 2, enc.formIndex); - pokemon.trySetShinySeed(); - pokemon.trySetShinySeed(); - pokemon.trySetShinySeed(); - } else { + tries = 0; + do { + // If you roll 20%, give event encounter with 3 extra shiny rolls and its HA, if it has one + const enc = randSeedItem(validEventEncounters); + species = getPokemonSpecies(enc.species); + pokemon = new PlayerPokemon(species, 5, species.abilityHidden === Abilities.NONE ? undefined : 2, enc.formIndex); + pokemon.trySetShinySeed(); + pokemon.trySetShinySeed(); + pokemon.trySetShinySeed(); + if (pokemon.shiny || pokemon.abilityIndex === 2) { + break; + } + tries++; + } while (tries < 6); + if (!pokemon.shiny && pokemon.abilityIndex !== 2) { + // If, after 6 tries, you STILL somehow don't have an HA or shiny mon, pick from only the event mons that have an HA. + if (validEventEncounters.some(s => !!getPokemonSpecies(s.species).abilityHidden)) { + validEventEncounters.filter(s => !!getPokemonSpecies(s.species).abilityHidden); + const enc = randSeedItem(validEventEncounters); + species = getPokemonSpecies(enc.species); + pokemon = new PlayerPokemon(species, 5, 2, enc.formIndex); + pokemon.trySetShinySeed(); + pokemon.trySetShinySeed(); + pokemon.trySetShinySeed(); + } + else { + // If there's, and this would never happen, no eligible event encounters with a hidden ability, just do Magikarp + species = getPokemonSpecies(Species.MAGIKARP); + pokemon = new PlayerPokemon(species, 5, 2, undefined, undefined, true); + } + } + } + else { pokemon = new PlayerPokemon(species, 5, 2, species.formIndex); } pokemon.generateAndPopulateMoveset(); From cedeaf866852e57c54899838dea4aa8346c6b2c6 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Fri, 2 May 2025 19:55:48 -0700 Subject: [PATCH 101/262] [Bug] Fix crash when loading a save with a statused Pokemon (#5756) --- src/system/pokemon-data.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index 7e71dffde5e..ef1f30830f0 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -4,7 +4,7 @@ import type { Gender } from "../data/gender"; import { Nature } from "#enums/nature"; import { PokeballType } from "#enums/pokeball"; import { getPokemonSpecies, getPokemonSpeciesForm } from "../data/pokemon-species"; -import type { Status } from "../data/status-effect"; +import { Status } from "../data/status-effect"; import Pokemon, { EnemyPokemon, PokemonBattleData, PokemonMove, PokemonSummonData } from "../field/pokemon"; import { TrainerSlot } from "#enums/trainer-slot"; import type { Variant } from "#app/sprites/variant"; @@ -105,7 +105,9 @@ export default class PokemonData { // TODO: Can't we move some of this verification stuff to an upgrade script? this.nature = source.nature ?? Nature.HARDY; this.moveset = source.moveset.map((m: any) => PokemonMove.loadMove(m)); - this.status = source.status ?? null; + this.status = source.status + ? new Status(source.status.effect, source.status.toxicTurnCount, source.status.sleepTurnsRemaining) + : null; this.friendship = source.friendship ?? getPokemonSpecies(this.species).baseFriendship; this.metLevel = source.metLevel || 5; this.metBiome = source.metBiome ?? -1; From 9283be652d421257fb818d9498bdc35e679559a3 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Sat, 3 May 2025 03:47:04 -0500 Subject: [PATCH 102/262] [GitHub] Create release action workflows (#5743) * Create release actions * Add release branch to push/pull events that invoke test workflows --- .github/workflows/create-release.yml | 73 ++++++++++++++++++++++ .github/workflows/deploy-beta.yml | 15 +++-- .github/workflows/post-release-deleted.yml | 12 ++++ .github/workflows/tests.yml | 2 + 4 files changed, 97 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/create-release.yml create mode 100644 .github/workflows/post-release-deleted.yml diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml new file mode 100644 index 00000000000..35a31f6b4d1 --- /dev/null +++ b/.github/workflows/create-release.yml @@ -0,0 +1,73 @@ +name: Create Release Branch +on: + workflow_dispatch: + inputs: + versionName: + description: "Name of version (i.e. 1.9.0)" + type: string + required: true + confirmVersion: + type: string + required: true + description: "Confirm version name" + +# explicitly specify the necessary scopes +permissions: + pull-requests: write + actions: write + contents: write + +jobs: + create-release: + if: github.repository == 'pagefaultgames/pokerogue' && (vars.BETA_DEPLOY_BRANCH == '' || ! startsWith(vars.BETA_DEPLOY_BRANCH, 'release')) + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed for github cli commands + runs-on: ubuntu-latest + steps: + - name: Validate provided version + # Ensure version matches confirmation and conforms to expected pattern. + run: | + if [[ "${{ github.event.inputs.versionName }}" != "${{ github.event.inputs.confirmVersion }}" ]]; then + echo "Version name does not match confirmation. Exiting." + exit 1 + fi + if [[ ! "${{ github.event.inputs.versionName }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "Version name must follow the format X.Y.Z where X, Y, and Z are all numbers. Exiting..." + exit 1 + fi + shell: bash + - name: Check out code + uses: actions/checkout@v4 + with: + submodules: "recursive" + # Always base off of beta branch, regardless of the branch the workflow was triggered from. + ref: beta + - name: Create release branch + run: git checkout -b release + # In order to be able to open a PR into beta, we need the branch to have at least one change. + - name: Overwrite RELEASE file + run: | + git config --local user.name "github-actions[bot]" + git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" + echo "Release v${{ github.event.inputs.versionName }}" > RELEASE + git add RELEASE + git commit -m "Stage release v${{ github.event.inputs.versionName }}" + - name: Push new branch + run: git push origin release + # The repository variable is used by the deploy-beta workflow to determine whether to deploy from beta or release. + - name: Set repository variable + run: GITHUB_TOKEN="${{ secrets.RW_VARS_PAT }}" gh variable set BETA_DEPLOY_BRANCH --body "release" + - name: Create pull request to main + run: | + gh pr create --base main \ + --head release \ + --title "Release v${{ github.event.inputs.versionName }} to main" \ + --body "This PR is for the release of v${{ github.event.inputs.versionName }}, and was created automatically by the GitHub Actions workflow invoked by ${{ github.actor }}" \ + --draft + - name: Create pull request to beta + run: | + gh pr create --base beta \ + --head release \ + --title "Release v${{ github.event.inputs.versionName }} to beta" \ + --body "This PR is for the release of v${{ github.event.inputs.versionName }}, and was created automatically by the GitHub Actions workflow invoked by ${{ github.actor }}" \ + --draft diff --git a/.github/workflows/deploy-beta.yml b/.github/workflows/deploy-beta.yml index 8b0e33a18c4..90b3008c8e9 100644 --- a/.github/workflows/deploy-beta.yml +++ b/.github/workflows/deploy-beta.yml @@ -4,18 +4,23 @@ on: push: branches: - beta + - release + workflow_run: + types: completed + workflows: ["Post Release Deleted"] jobs: deploy: - if: github.repository == 'pagefaultgames/pokerogue' + if: github.repository == 'pagefaultgames/pokerogue' && github.ref_name == ${{ vars.BETA_DEPLOY_BRANCH || 'beta' }} runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: - submodules: 'recursive' + submodules: "recursive" + ref: ${{ vars.BETA_DEPLOY_BRANCH || 'beta'}} - uses: actions/setup-node@v4 with: - node-version-file: '.nvmrc' + node-version-file: ".nvmrc" - name: Install dependencies run: npm ci - name: Build @@ -30,5 +35,5 @@ jobs: chmod 600 ~/.ssh/* ssh-keyscan -H ${{ secrets.BETA_SSH_HOST }} >> ~/.ssh/known_hosts - name: Deploy build on server - run: | - rsync --del --no-times --checksum -vrm dist/* ${{ secrets.BETA_SSH_USER }}@${{ secrets.BETA_SSH_HOST }}:${{ secrets.BETA_DESTINATION_DIR }} \ No newline at end of file + run: | + rsync --del --no-times --checksum -vrm dist/* ${{ secrets.BETA_SSH_USER }}@${{ secrets.BETA_SSH_HOST }}:${{ secrets.BETA_DESTINATION_DIR }} diff --git a/.github/workflows/post-release-deleted.yml b/.github/workflows/post-release-deleted.yml new file mode 100644 index 00000000000..65447e7826b --- /dev/null +++ b/.github/workflows/post-release-deleted.yml @@ -0,0 +1,12 @@ +name: Post Release Deleted +on: + delete: + +jobs: + # Set the BETA_DEPLOY_BRANCH variable to beta when a release branch is deleted + update-release-var: + if: github.repository == 'pagefaultgames/pokerogue' && github.event.ref_type == 'branch' && github.event.ref == 'release' + runs-on: ubuntu-latest + steps: + - name: Set BETA_DEPLOY_BRANCH to beta + run: GITHUB_TOKEN="${{ secrets.RW_VARS_PAT }}" gh variable set BETA_DEPLOY_BRANCH --body "beta" --repo "pagefaultgames/pokerogue" \ No newline at end of file diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index ccc8604ff7e..d9db8401f8e 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -7,6 +7,7 @@ on: branches: - main # Trigger on push events to the main branch - beta # Trigger on push events to the beta branch + - release # Trigger on push events to the release branch # go upvote https://github.com/actions/runner/issues/1182 and yell at microsoft until they fix this or ditch yml for workflows paths: # src and test files @@ -32,6 +33,7 @@ on: branches: - main # Trigger on pull request events targeting the main branch - beta # Trigger on pull request events targeting the beta branch + - release # Trigger on pull request events targeting the release branch paths: # go upvote https://github.com/actions/runner/issues/1182 and yell at microsoft because until then we have to duplicate this # src and test files - "src/**" From a5311779b4aafa42bf577d1136a2c7b086bd56f8 Mon Sep 17 00:00:00 2001 From: damocleas Date: Sat, 3 May 2025 12:59:55 -0400 Subject: [PATCH 103/262] [Misc] More Spring (#5759) extendo evento --- src/timed-event-manager.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/timed-event-manager.ts b/src/timed-event-manager.ts index 951d98aefec..163afdc098b 100644 --- a/src/timed-event-manager.ts +++ b/src/timed-event-manager.ts @@ -313,8 +313,8 @@ const timedEvents: TimedEvent[] = [ { name: "Shining Spring", eventType: EventType.SHINY, - startDate: new Date(Date.UTC(2025, 4, 2)), - endDate: new Date(Date.UTC(2025, 4, 12)), + startDate: new Date(Date.UTC(2025, 4, 3)), + endDate: new Date(Date.UTC(2025, 4, 13)), bannerKey: "spr25event", scale: 0.21, availableLangs: ["en", "de", "it", "fr", "ja", "ko", "es-ES", "es-MX", "pt-BR", "zh-CN"], From 1042b528ecfe1ada2bd684ef19dd91027f3b3c00 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 3 May 2025 13:07:37 -0400 Subject: [PATCH 104/262] Bump vite from 6.2.4 to 6.3.4 (#5758) * Bump vite from 6.2.4 to 6.3.4 Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.2.4 to 6.3.4. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v6.3.4/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-version: 6.3.4 dependency-type: direct:development ... Signed-off-by: dependabot[bot] * Update `rollup` version in `package-lock.json` --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- package-lock.json | 212 +++++++++++++++++++++++++++------------------- package.json | 2 +- 2 files changed, 125 insertions(+), 89 deletions(-) diff --git a/package-lock.json b/package-lock.json index f9280ad594b..da00292e7b8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,10 +39,11 @@ "lefthook": "^1.11.5", "msw": "^2.7.3", "phaser3spectorjs": "^0.0.8", + "rollup": "^4.40.1", "typedoc": "^0.28.1", "typescript": "^5.8.2", "typescript-eslint": "^8.28.0", - "vite": "^6.2.0", + "vite": "^6.3.4", "vite-tsconfig-paths": "^5.1.4", "vitest": "^3.0.9", "vitest-canvas-mock": "^0.3.3" @@ -2161,9 +2162,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.38.0.tgz", - "integrity": "sha512-ldomqc4/jDZu/xpYU+aRxo3V4mGCV9HeTgUBANI3oIQMOL+SsxB+S2lxMpkFp5UamSS3XuTMQVbsS24R4J4Qjg==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.1.tgz", + "integrity": "sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw==", "cpu": [ "arm" ], @@ -2175,9 +2176,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.38.0.tgz", - "integrity": "sha512-VUsgcy4GhhT7rokwzYQP+aV9XnSLkkhlEJ0St8pbasuWO/vwphhZQxYEKUP3ayeCYLhk6gEtacRpYP/cj3GjyQ==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.1.tgz", + "integrity": "sha512-PPkxTOisoNC6TpnDKatjKkjRMsdaWIhyuMkA4UsBXT9WEZY4uHezBTjs6Vl4PbqQQeu6oION1w2voYZv9yquCw==", "cpu": [ "arm64" ], @@ -2189,9 +2190,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.38.0.tgz", - "integrity": "sha512-buA17AYXlW9Rn091sWMq1xGUvWQFOH4N1rqUxGJtEQzhChxWjldGCCup7r/wUnaI6Au8sKXpoh0xg58a7cgcpg==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.1.tgz", + "integrity": "sha512-VWXGISWFY18v/0JyNUy4A46KCFCb9NVsH+1100XP31lud+TzlezBbz24CYzbnA4x6w4hx+NYCXDfnvDVO6lcAA==", "cpu": [ "arm64" ], @@ -2203,9 +2204,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.38.0.tgz", - "integrity": "sha512-Mgcmc78AjunP1SKXl624vVBOF2bzwNWFPMP4fpOu05vS0amnLcX8gHIge7q/lDAHy3T2HeR0TqrriZDQS2Woeg==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.1.tgz", + "integrity": "sha512-nIwkXafAI1/QCS7pxSpv/ZtFW6TXcNUEHAIA9EIyw5OzxJZQ1YDrX+CL6JAIQgZ33CInl1R6mHet9Y/UZTg2Bw==", "cpu": [ "x64" ], @@ -2217,9 +2218,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.38.0.tgz", - "integrity": "sha512-zzJACgjLbQTsscxWqvrEQAEh28hqhebpRz5q/uUd1T7VTwUNZ4VIXQt5hE7ncs0GrF+s7d3S4on4TiXUY8KoQA==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.1.tgz", + "integrity": "sha512-BdrLJ2mHTrIYdaS2I99mriyJfGGenSaP+UwGi1kB9BLOCu9SR8ZpbkmmalKIALnRw24kM7qCN0IOm6L0S44iWw==", "cpu": [ "arm64" ], @@ -2231,9 +2232,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.38.0.tgz", - "integrity": "sha512-hCY/KAeYMCyDpEE4pTETam0XZS4/5GXzlLgpi5f0IaPExw9kuB+PDTOTLuPtM10TlRG0U9OSmXJ+Wq9J39LvAg==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.1.tgz", + "integrity": "sha512-VXeo/puqvCG8JBPNZXZf5Dqq7BzElNJzHRRw3vjBE27WujdzuOPecDPc/+1DcdcTptNBep3861jNq0mYkT8Z6Q==", "cpu": [ "x64" ], @@ -2245,9 +2246,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.38.0.tgz", - "integrity": "sha512-mimPH43mHl4JdOTD7bUMFhBdrg6f9HzMTOEnzRmXbOZqjijCw8LA5z8uL6LCjxSa67H2xiLFvvO67PT05PRKGg==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.1.tgz", + "integrity": "sha512-ehSKrewwsESPt1TgSE/na9nIhWCosfGSFqv7vwEtjyAqZcvbGIg4JAcV7ZEh2tfj/IlfBeZjgOXm35iOOjadcg==", "cpu": [ "arm" ], @@ -2259,9 +2260,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.38.0.tgz", - "integrity": "sha512-tPiJtiOoNuIH8XGG8sWoMMkAMm98PUwlriOFCCbZGc9WCax+GLeVRhmaxjJtz6WxrPKACgrwoZ5ia/uapq3ZVg==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.1.tgz", + "integrity": "sha512-m39iO/aaurh5FVIu/F4/Zsl8xppd76S4qoID8E+dSRQvTyZTOI2gVk3T4oqzfq1PtcvOfAVlwLMK3KRQMaR8lg==", "cpu": [ "arm" ], @@ -2273,9 +2274,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.38.0.tgz", - "integrity": "sha512-wZco59rIVuB0tjQS0CSHTTUcEde+pXQWugZVxWaQFdQQ1VYub/sTrNdY76D1MKdN2NB48JDuGABP6o6fqos8mA==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.1.tgz", + "integrity": "sha512-Y+GHnGaku4aVLSgrT0uWe2o2Rq8te9hi+MwqGF9r9ORgXhmHK5Q71N757u0F8yU1OIwUIFy6YiJtKjtyktk5hg==", "cpu": [ "arm64" ], @@ -2287,9 +2288,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.38.0.tgz", - "integrity": "sha512-fQgqwKmW0REM4LomQ+87PP8w8xvU9LZfeLBKybeli+0yHT7VKILINzFEuggvnV9M3x1Ed4gUBmGUzCo/ikmFbQ==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.1.tgz", + "integrity": "sha512-jEwjn3jCA+tQGswK3aEWcD09/7M5wGwc6+flhva7dsQNRZZTe30vkalgIzV4tjkopsTS9Jd7Y1Bsj6a4lzz8gQ==", "cpu": [ "arm64" ], @@ -2301,9 +2302,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.38.0.tgz", - "integrity": "sha512-hz5oqQLXTB3SbXpfkKHKXLdIp02/w3M+ajp8p4yWOWwQRtHWiEOCKtc9U+YXahrwdk+3qHdFMDWR5k+4dIlddg==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.1.tgz", + "integrity": "sha512-ySyWikVhNzv+BV/IDCsrraOAZ3UaC8SZB67FZlqVwXwnFhPihOso9rPOxzZbjp81suB1O2Topw+6Ug3JNegejQ==", "cpu": [ "loong64" ], @@ -2315,9 +2316,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.38.0.tgz", - "integrity": "sha512-NXqygK/dTSibQ+0pzxsL3r4Xl8oPqVoWbZV9niqOnIHV/J92fe65pOir0xjkUZDRSPyFRvu+4YOpJF9BZHQImw==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.1.tgz", + "integrity": "sha512-BvvA64QxZlh7WZWqDPPdt0GH4bznuL6uOO1pmgPnnv86rpUpc8ZxgZwcEgXvo02GRIZX1hQ0j0pAnhwkhwPqWg==", "cpu": [ "ppc64" ], @@ -2329,9 +2330,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.38.0.tgz", - "integrity": "sha512-GEAIabR1uFyvf/jW/5jfu8gjM06/4kZ1W+j1nWTSSB3w6moZEBm7iBtzwQ3a1Pxos2F7Gz+58aVEnZHU295QTg==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.1.tgz", + "integrity": "sha512-EQSP+8+1VuSulm9RKSMKitTav89fKbHymTf25n5+Yr6gAPZxYWpj3DzAsQqoaHAk9YX2lwEyAf9S4W8F4l3VBQ==", "cpu": [ "riscv64" ], @@ -2343,9 +2344,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.38.0.tgz", - "integrity": "sha512-9EYTX+Gus2EGPbfs+fh7l95wVADtSQyYw4DfSBcYdUEAmP2lqSZY0Y17yX/3m5VKGGJ4UmIH5LHLkMJft3bYoA==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.1.tgz", + "integrity": "sha512-n/vQ4xRZXKuIpqukkMXZt9RWdl+2zgGNx7Uda8NtmLJ06NL8jiHxUawbwC+hdSq1rrw/9CghCpEONor+l1e2gA==", "cpu": [ "riscv64" ], @@ -2357,9 +2358,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.38.0.tgz", - "integrity": "sha512-Mpp6+Z5VhB9VDk7RwZXoG2qMdERm3Jw07RNlXHE0bOnEeX+l7Fy4bg+NxfyN15ruuY3/7Vrbpm75J9QHFqj5+Q==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.1.tgz", + "integrity": "sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg==", "cpu": [ "s390x" ], @@ -2371,9 +2372,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.38.0.tgz", - "integrity": "sha512-vPvNgFlZRAgO7rwncMeE0+8c4Hmc+qixnp00/Uv3ht2x7KYrJ6ERVd3/R0nUtlE6/hu7/HiiNHJ/rP6knRFt1w==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.1.tgz", + "integrity": "sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ==", "cpu": [ "x64" ], @@ -2385,9 +2386,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.38.0.tgz", - "integrity": "sha512-q5Zv+goWvQUGCaL7fU8NuTw8aydIL/C9abAVGCzRReuj5h30TPx4LumBtAidrVOtXnlB+RZkBtExMsfqkMfb8g==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.1.tgz", + "integrity": "sha512-2BRORitq5rQ4Da9blVovzNCMaUlyKrzMSvkVR0D4qPuOy/+pMCrh1d7o01RATwVy+6Fa1WBw+da7QPeLWU/1mQ==", "cpu": [ "x64" ], @@ -2399,9 +2400,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.38.0.tgz", - "integrity": "sha512-u/Jbm1BU89Vftqyqbmxdq14nBaQjQX1HhmsdBWqSdGClNaKwhjsg5TpW+5Ibs1mb8Es9wJiMdl86BcmtUVXNZg==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.1.tgz", + "integrity": "sha512-b2bcNm9Kbde03H+q+Jjw9tSfhYkzrDUf2d5MAd1bOJuVplXvFhWz7tRtWvD8/ORZi7qSCy0idW6tf2HgxSXQSg==", "cpu": [ "arm64" ], @@ -2413,9 +2414,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.38.0.tgz", - "integrity": "sha512-mqu4PzTrlpNHHbu5qleGvXJoGgHpChBlrBx/mEhTPpnAL1ZAYFlvHD7rLK839LLKQzqEQMFJfGrrOHItN4ZQqA==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.1.tgz", + "integrity": "sha512-DfcogW8N7Zg7llVEfpqWMZcaErKfsj9VvmfSyRjCyo4BI3wPEfrzTtJkZG6gKP/Z92wFm6rz2aDO7/JfiR/whA==", "cpu": [ "ia32" ], @@ -2427,9 +2428,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.38.0.tgz", - "integrity": "sha512-jjqy3uWlecfB98Psxb5cD6Fny9Fupv9LrDSPTQZUROqjvZmcCqNu4UMl7qqhlUUGpwiAkotj6GYu4SZdcr/nLw==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.1.tgz", + "integrity": "sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA==", "cpu": [ "x64" ], @@ -4427,6 +4428,21 @@ "reusify": "^1.0.4" } }, + "node_modules/fdir": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", @@ -6559,9 +6575,9 @@ } }, "node_modules/rollup": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.38.0.tgz", - "integrity": "sha512-5SsIRtJy9bf1ErAOiFMFzl64Ex9X5V7bnJ+WlFMb+zmP459OSWCEG7b0ERZ+PEU7xPt4OG3RHbrp1LJlXxYTrw==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.1.tgz", + "integrity": "sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw==", "dev": true, "license": "MIT", "dependencies": { @@ -6575,26 +6591,26 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.38.0", - "@rollup/rollup-android-arm64": "4.38.0", - "@rollup/rollup-darwin-arm64": "4.38.0", - "@rollup/rollup-darwin-x64": "4.38.0", - "@rollup/rollup-freebsd-arm64": "4.38.0", - "@rollup/rollup-freebsd-x64": "4.38.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.38.0", - "@rollup/rollup-linux-arm-musleabihf": "4.38.0", - "@rollup/rollup-linux-arm64-gnu": "4.38.0", - "@rollup/rollup-linux-arm64-musl": "4.38.0", - "@rollup/rollup-linux-loongarch64-gnu": "4.38.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.38.0", - "@rollup/rollup-linux-riscv64-gnu": "4.38.0", - "@rollup/rollup-linux-riscv64-musl": "4.38.0", - "@rollup/rollup-linux-s390x-gnu": "4.38.0", - "@rollup/rollup-linux-x64-gnu": "4.38.0", - "@rollup/rollup-linux-x64-musl": "4.38.0", - "@rollup/rollup-win32-arm64-msvc": "4.38.0", - "@rollup/rollup-win32-ia32-msvc": "4.38.0", - "@rollup/rollup-win32-x64-msvc": "4.38.0", + "@rollup/rollup-android-arm-eabi": "4.40.1", + "@rollup/rollup-android-arm64": "4.40.1", + "@rollup/rollup-darwin-arm64": "4.40.1", + "@rollup/rollup-darwin-x64": "4.40.1", + "@rollup/rollup-freebsd-arm64": "4.40.1", + "@rollup/rollup-freebsd-x64": "4.40.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.40.1", + "@rollup/rollup-linux-arm-musleabihf": "4.40.1", + "@rollup/rollup-linux-arm64-gnu": "4.40.1", + "@rollup/rollup-linux-arm64-musl": "4.40.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.40.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.40.1", + "@rollup/rollup-linux-riscv64-gnu": "4.40.1", + "@rollup/rollup-linux-riscv64-musl": "4.40.1", + "@rollup/rollup-linux-s390x-gnu": "4.40.1", + "@rollup/rollup-linux-x64-gnu": "4.40.1", + "@rollup/rollup-linux-x64-musl": "4.40.1", + "@rollup/rollup-win32-arm64-msvc": "4.40.1", + "@rollup/rollup-win32-ia32-msvc": "4.40.1", + "@rollup/rollup-win32-x64-msvc": "4.40.1", "fsevents": "~2.3.2" } }, @@ -7043,6 +7059,23 @@ "dev": true, "license": "MIT" }, + "node_modules/tinyglobby": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", + "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, "node_modules/tinypool": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", @@ -7413,15 +7446,18 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/vite": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.4.tgz", - "integrity": "sha512-veHMSew8CcRzhL5o8ONjy8gkfmFJAd5Ac16oxBUjlwgX3Gq2Wqr+qNC3TjPIpy7TPV/KporLga5GT9HqdrCizw==", + "version": "6.3.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.4.tgz", + "integrity": "sha512-BiReIiMS2fyFqbqNT/Qqt4CVITDU9M9vE+DKcVAsB+ZV0wvTKd+3hMbkpxz1b+NmEDMegpVbisKiAZOnvO92Sw==", "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", "postcss": "^8.5.3", - "rollup": "^4.30.1" + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" }, "bin": { "vite": "bin/vite.js" diff --git a/package.json b/package.json index b9ccb324969..8504db8d0d8 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "typedoc": "^0.28.1", "typescript": "^5.8.2", "typescript-eslint": "^8.28.0", - "vite": "^6.2.0", + "vite": "^6.3.4", "vite-tsconfig-paths": "^5.1.4", "vitest": "^3.0.9", "vitest-canvas-mock": "^0.3.3" From 04bfaf901a30b56d0b5de59e2731f51600b60196 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Sat, 3 May 2025 19:59:49 -0700 Subject: [PATCH 105/262] Update version to 1.9.1 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index da00292e7b8..9d9b7638997 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pokemon-rogue-battle", - "version": "1.9.0", + "version": "1.9.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pokemon-rogue-battle", - "version": "1.9.0", + "version": "1.9.1", "hasInstallScript": true, "dependencies": { "@material/material-color-utilities": "^0.2.7", diff --git a/package.json b/package.json index 8504db8d0d8..6bde0af2fa5 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.9.0", + "version": "1.9.1", "type": "module", "scripts": { "start": "vite", From b5cfa88455d4c7d319ea257f3e003cb77ed9eeb6 Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Sat, 3 May 2025 23:07:50 -0400 Subject: [PATCH 106/262] [Tiny] Removed unused loc in `v1_9_0.ts` (#5760) --- src/system/version_migration/versions/v1_9_0.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/system/version_migration/versions/v1_9_0.ts b/src/system/version_migration/versions/v1_9_0.ts index 9505a7138f8..dca92cd1fae 100644 --- a/src/system/version_migration/versions/v1_9_0.ts +++ b/src/system/version_migration/versions/v1_9_0.ts @@ -15,11 +15,6 @@ const migratePartyData: SessionSaveMigrator = { migrate: (data: SessionSaveData): void => { // this stuff is copied straight from the constructor fwiw const mapParty = (pkmnData: PokemonData) => { - pkmnData.status &&= new Status( - pkmnData.status.effect, - pkmnData.status.toxicTurnCount, - pkmnData.status.sleepTurnsRemaining, - ); // remove empty moves from moveset pkmnData.moveset = (pkmnData.moveset ?? [new PokemonMove(Moves.TACKLE), new PokemonMove(Moves.GROWL)]) .filter(m => !!m) From 9e433c85a9f6ddaa7a7352b150798c3b435d8b87 Mon Sep 17 00:00:00 2001 From: damocleas Date: Sat, 3 May 2025 23:19:18 -0400 Subject: [PATCH 107/262] Add missing zh-CN Spring Banner --- public/images/events/spr25event-zh-CN.png | Bin 0 -> 36886 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 public/images/events/spr25event-zh-CN.png diff --git a/public/images/events/spr25event-zh-CN.png b/public/images/events/spr25event-zh-CN.png new file mode 100644 index 0000000000000000000000000000000000000000..1d8ad35c166691210ac84028cac00194fc9d71a9 GIT binary patch literal 36886 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 z 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 Date: Sun, 4 May 2025 01:59:37 -0400 Subject: [PATCH 108/262] [Hotfix] Fix evil grunts using wrong template (#5763) --- src/data/trainers/TrainerPartyTemplate.ts | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/data/trainers/TrainerPartyTemplate.ts b/src/data/trainers/TrainerPartyTemplate.ts index 1952bcc179e..ccc494218e9 100644 --- a/src/data/trainers/TrainerPartyTemplate.ts +++ b/src/data/trainers/TrainerPartyTemplate.ts @@ -224,18 +224,19 @@ export const trainerPartyTemplates = { */ export function getEvilGruntPartyTemplate(): TrainerPartyTemplate { const waveIndex = globalScene.currentBattle?.waveIndex; - switch (waveIndex) { - case ClassicFixedBossWaves.EVIL_GRUNT_1: - return trainerPartyTemplates.TWO_AVG; - case ClassicFixedBossWaves.EVIL_GRUNT_2: - return trainerPartyTemplates.THREE_AVG; - case ClassicFixedBossWaves.EVIL_GRUNT_3: - return trainerPartyTemplates.TWO_AVG_ONE_STRONG; - case ClassicFixedBossWaves.EVIL_ADMIN_1: - return trainerPartyTemplates.GYM_LEADER_4; // 3avg 1 strong 1 stronger - default: - return trainerPartyTemplates.GYM_LEADER_5; // 3 avg 2 strong 1 stronger + if (waveIndex <= ClassicFixedBossWaves.EVIL_GRUNT_1){ + return trainerPartyTemplates.TWO_AVG; } + if (waveIndex <= ClassicFixedBossWaves.EVIL_GRUNT_2){ + return trainerPartyTemplates.THREE_AVG; + } + if (waveIndex <= ClassicFixedBossWaves.EVIL_GRUNT_3){ + return trainerPartyTemplates.TWO_AVG_ONE_STRONG; + } + if (waveIndex <= ClassicFixedBossWaves.EVIL_ADMIN_1){ + return trainerPartyTemplates.GYM_LEADER_4; // 3avg 1 strong 1 stronger + } + return trainerPartyTemplates.GYM_LEADER_5; // 3 avg 2 strong 1 stronger } export function getWavePartyTemplate(...templates: TrainerPartyTemplate[]) { From c31bd9ef61f02946963647a6af752bcd412a0a47 Mon Sep 17 00:00:00 2001 From: Dean <69436131+emdeann@users.noreply.github.com> Date: Sat, 3 May 2025 23:04:04 -0700 Subject: [PATCH 109/262] [Bug][Hotfix] Secondary effects no longer trigger status immunity messages (#5764) Fix secondary effects triggering status immunity messages --- src/data/moves/move.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index d09613123bb..3ef70fd75be 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -2454,13 +2454,14 @@ export class StatusEffectAttr extends MoveEffectAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveChance = this.getMoveChance(user, target, move, this.selfTarget, true); const statusCheck = moveChance < 0 || moveChance === 100 || user.randSeedInt(100) < moveChance; + const quiet = move.category !== MoveCategory.STATUS; if (statusCheck) { const pokemon = this.selfTarget ? user : target; - if (user !== target && move.category === MoveCategory.STATUS && !target.canSetStatus(this.effect, false, false, user, true)) { + if (user !== target && move.category === MoveCategory.STATUS && !target.canSetStatus(this.effect, quiet, false, user, true)) { return false; } if (((!pokemon.status || this.overrideStatus) || (pokemon.status.effect === this.effect && moveChance < 0)) - && pokemon.trySetStatus(this.effect, true, user, this.turnsRemaining, null, this.overrideStatus, false)) { + && pokemon.trySetStatus(this.effect, true, user, this.turnsRemaining, null, this.overrideStatus, quiet)) { applyPostAttackAbAttrs(ConfusionOnStatusEffectAbAttr, user, target, move, null, false, this.effect); return true; } From fa774268ca81070f9155442acd8d08bfcbb6b8f3 Mon Sep 17 00:00:00 2001 From: damocleas Date: Sun, 4 May 2025 10:36:57 -0400 Subject: [PATCH 110/262] Add files via upload --- public/images/events/spr25event-fr.png | Bin 30245 -> 30270 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/public/images/events/spr25event-fr.png b/public/images/events/spr25event-fr.png index e7089eee4a1f32547f8364089468072177ad361d..7730e16d4a39f547a426e8e2d21533b2b4deacc5 100644 GIT binary patch delta 9602 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 delta 9535 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 Date: Sun, 4 May 2025 15:35:44 -0700 Subject: [PATCH 111/262] [Bug][Hotfix] Always show hit result message (#5769) Always show hit result --- src/phases/move-effect-phase.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index 64cae923f07..c65e8e15271 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -944,7 +944,7 @@ export class MoveEffectPhase extends PokemonPhase { const result = this.applyMoveDamage(user, target, effectiveness); - if (user.turnData.hitsLeft === 1 && target.isFainted()) { + if (user.turnData.hitsLeft === 1 || target.isFainted()) { this.queueHitResultMessage(result); } From 7547b37e852a5fab0ad7445015ae40ccff1c1b97 Mon Sep 17 00:00:00 2001 From: lxy-lxy-lxy <55084073+lxy-lxy-lxy@users.noreply.github.com> Date: Mon, 5 May 2025 21:32:56 +0800 Subject: [PATCH 112/262] [Bug] Fix local save encoding crash and Psychic anim (#5775) * fix error: utf8 to base64 * fix error: space missed --- public/battle-anims/psychic.json | 2 +- src/system/game-data.ts | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/public/battle-anims/psychic.json b/public/battle-anims/psychic.json index 5ad4898de5a..72161ff9aff 100644 --- a/public/battle-anims/psychic.json +++ b/public/battle-anims/psychic.json @@ -1,6 +1,6 @@ { "id": 94, - "graphic": "PRAS- PsychicBG", + "graphic": "PRAS- Psychic BG", "frames": [ [ { diff --git a/src/system/game-data.ts b/src/system/game-data.ts index e200fa6b3c7..51e488210be 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -118,15 +118,17 @@ export function getDataTypeKey(dataType: GameDataType, slotId = 0): string { } export function encrypt(data: string, bypassLogin: boolean): string { - return (bypassLogin ? (data: string) => btoa(data) : (data: string) => AES.encrypt(data, saveKey))( - data, - ) as unknown as string; // TODO: is this correct? + return (bypassLogin + ? (data: string) => btoa(encodeURIComponent(data)) + : (data: string) => AES.encrypt(data, saveKey))(data) as unknown as string; // TODO: is this correct? } export function decrypt(data: string, bypassLogin: boolean): string { - return (bypassLogin ? (data: string) => atob(data) : (data: string) => AES.decrypt(data, saveKey).toString(enc.Utf8))( - data, - ); + return ( + bypassLogin + ? (data: string) => decodeURIComponent(atob(data)) + : (data: string) => AES.decrypt(data, saveKey).toString(enc.Utf8) + )(data); } export interface SystemSaveData { From bd913a201ce61bb2d3ea27475910b24ad530499d Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Mon, 5 May 2025 17:18:24 -0400 Subject: [PATCH 113/262] [Sprite] Fix Clauncher consistent variants, floating Jangmo-o (#5777) Fix Clauncher consistent variants, flying Jangmo-o --- public/images/pokemon/692.json | 59 +++----- public/images/pokemon/692.png | Bin 510 -> 2628 bytes public/images/pokemon/782.json | 222 ++++++++++++++-------------- public/images/pokemon/back/692.json | 59 +++----- public/images/pokemon/back/692.png | Bin 476 -> 2043 bytes public/images/pokemon/back/782.json | 222 ++++++++++++++-------------- 6 files changed, 260 insertions(+), 302 deletions(-) diff --git a/public/images/pokemon/692.json b/public/images/pokemon/692.json index a06bb0c77b7..125642a01f1 100644 --- a/public/images/pokemon/692.json +++ b/public/images/pokemon/692.json @@ -1,41 +1,20 @@ -{ - "textures": [ - { - "image": "692.png", - "format": "RGBA8888", - "size": { - "w": 56, - "h": 56 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 56, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 56, - "h": 35 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:031fb8fbcf9162adb44c0a90fd2cc110:44a2bd195c730b2d35c3ad898e1b3672:2880def858c84cd859bedf13b0b49a33$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 121, "y": 36, "w": 56, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 56, "h": 35 }, + "sourceSize": { "w": 63, "h": 35 }, + "duration": 50 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.12-x64", + "image": "692.png", + "format": "I8", + "size": { "w": 239, "h": 106 }, + "scale": "1" + } } diff --git a/public/images/pokemon/692.png b/public/images/pokemon/692.png index ce0cb4d32435eed23067d7d5fe0f21ab2f8bd473..a22655931a819af880379c8c349ce0b65a4d026f 100644 GIT binary patch literal 2628 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 Date: Tue, 6 May 2025 07:34:35 +1000 Subject: [PATCH 114/262] [Bug] Fix shiny save bug (#5780) Correctly determine shininess and variant during saving --- src/system/pokemon-data.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index ef1f30830f0..248fe9cf513 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -91,8 +91,8 @@ export default class PokemonData { this.formIndex = Math.max(Math.min(source.formIndex, getPokemonSpecies(this.species).forms.length - 1), 0); this.abilityIndex = source.abilityIndex; this.passive = source.passive; - this.shiny = sourcePokemon?.isShiny() ?? source.shiny; - this.variant = sourcePokemon?.getVariant() ?? source.variant; + this.shiny = source.shiny; + this.variant = source.variant; this.pokeball = source.pokeball ?? PokeballType.POKEBALL; this.level = source.level; this.exp = source.exp; From ae25a70b4d34fe7604dd374e5ca6e98f1bf3f789 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Mon, 5 May 2025 16:36:22 -0500 Subject: [PATCH 115/262] [Bug][UI/UX] Ensure pokemon hop when animations are selected (#5781) Ensure pokemon hop when animations are selected --- src/ui/pokedex-ui-handler.ts | 24 ++++++++++-------------- src/ui/starter-select-ui-handler.ts | 28 ++++++++++++---------------- 2 files changed, 22 insertions(+), 30 deletions(-) diff --git a/src/ui/pokedex-ui-handler.ts b/src/ui/pokedex-ui-handler.ts index b1d0945de07..935c9adfeb8 100644 --- a/src/ui/pokedex-ui-handler.ts +++ b/src/ui/pokedex-ui-handler.ts @@ -873,6 +873,7 @@ export default class PokedexUiHandler extends MessageUiHandler { const tweenChain: Phaser.Types.Tweens.TweenChainBuilderConfig = { targets: icon, loop: -1, + paused: startPaused, // Make the initial bounce a little randomly delayed delay: randIntRange(0, 50) * 5, loopDelay: 1000, @@ -894,19 +895,14 @@ export default class PokedexUiHandler extends MessageUiHandler { ], }; - const isPassiveAvailable = this.isPassiveAvailable(species.speciesId); - const isValueReductionAvailable = this.isValueReductionAvailable(species.speciesId); - const isSameSpeciesEggAvailable = this.isSameSpeciesEggAvailable(species.speciesId); - - // 'Passives Only' mode - if (globalScene.candyUpgradeNotification === 1) { - if (isPassiveAvailable) { - globalScene.tweens.chain(tweenChain).paused = startPaused; - } - // 'On' mode - } else if (globalScene.candyUpgradeNotification === 2) { - if (isPassiveAvailable || isValueReductionAvailable || isSameSpeciesEggAvailable) { - globalScene.tweens.chain(tweenChain).paused = startPaused; + if ( + this.isPassiveAvailable(species.speciesId) || + (globalScene.candyUpgradeNotification === 2 && + (this.isValueReductionAvailable(species.speciesId) || this.isSameSpeciesEggAvailable(species.speciesId))) + ) { + const chain = globalScene.tweens.chain(tweenChain); + if (!startPaused) { + chain.play(); } } } @@ -2040,7 +2036,7 @@ export default class PokedexUiHandler extends MessageUiHandler { this.checkIconId(lastSpeciesIcon, container.species, props.female, props.formIndex, props.shiny, props.variant); this.iconAnimHandler.addOrUpdate(lastSpeciesIcon, PokemonIconAnimMode.NONE); // Resume the animation for the previously selected species - globalScene.tweens.getTweensOf(lastSpeciesIcon).forEach(tween => tween.resume()); + globalScene.tweens.getTweensOf(lastSpeciesIcon).forEach(tween => tween.play()); } } diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 7c345f1735e..09d7322cb75 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -1444,6 +1444,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const tweenChain: Phaser.Types.Tweens.TweenChainBuilderConfig = { targets: icon, + paused: startPaused, loop: -1, // Make the initial bounce a little randomly delayed delay: randIntRange(0, 50) * 5, @@ -1451,14 +1452,14 @@ export default class StarterSelectUiHandler extends MessageUiHandler { tweens: [ { targets: icon, - y: 2 - 5, + y: "-=5", duration: fixedInt(125), ease: "Cubic.easeOut", yoyo: true, }, { targets: icon, - y: 2 - 3, + y: "-=3", duration: fixedInt(150), ease: "Cubic.easeOut", yoyo: true, @@ -1466,19 +1467,14 @@ export default class StarterSelectUiHandler extends MessageUiHandler { ], }; - const isPassiveAvailable = this.isPassiveAvailable(species.speciesId); - const isValueReductionAvailable = this.isValueReductionAvailable(species.speciesId); - const isSameSpeciesEggAvailable = this.isSameSpeciesEggAvailable(species.speciesId); - - // 'Passives Only' mode - if (globalScene.candyUpgradeNotification === 1) { - if (isPassiveAvailable) { - globalScene.tweens.chain(tweenChain).paused = startPaused; - } - // 'On' mode - } else if (globalScene.candyUpgradeNotification === 2) { - if (isPassiveAvailable || isValueReductionAvailable || isSameSpeciesEggAvailable) { - globalScene.tweens.chain(tweenChain).paused = startPaused; + if ( + this.isPassiveAvailable(species.speciesId) || + (globalScene.candyUpgradeNotification === 2 && + (this.isValueReductionAvailable(species.speciesId) || this.isSameSpeciesEggAvailable(species.speciesId))) + ) { + const chain = globalScene.tweens.chain(tweenChain); + if (!startPaused) { + chain.play(); } } } @@ -3478,7 +3474,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { // Resume the animation for the previously selected species const icon = this.starterContainers[speciesIndex].icon; - globalScene.tweens.getTweensOf(icon).forEach(tween => tween.resume()); + globalScene.tweens.getTweensOf(icon).forEach(tween => tween.play()); } this.lastSpecies = species!; // TODO: is this bang correct? From 92f1cfdd50878ccc0ea10bc395092144e0d4cca9 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Mon, 5 May 2025 18:34:17 -0400 Subject: [PATCH 116/262] [Hotfix] Remove Charcadet line from exp variant masterlist (#5782) * Remove Charcadet line from exp variant masterlist * Remove line's backsprite from masterlist --- public/images/pokemon/variant/_exp_masterlist.json | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/public/images/pokemon/variant/_exp_masterlist.json b/public/images/pokemon/variant/_exp_masterlist.json index e588be59073..88c6f4a95c1 100644 --- a/public/images/pokemon/variant/_exp_masterlist.json +++ b/public/images/pokemon/variant/_exp_masterlist.json @@ -256,9 +256,6 @@ "932": [0, 2, 2], "933": [0, 2, 2], "934": [0, 1, 1], - "935": [1, 1, 2], - "936": [2, 2, 2], - "937": [2, 2, 2], "940": [0, 1, 1], "941": [0, 1, 1], "944": [0, 1, 1], @@ -593,9 +590,6 @@ "932": [0, 1, 1], "933": [0, 1, 1], "934": [0, 1, 1], - "935": [2, 2, 2], - "936": [2, 2, 2], - "937": [2, 2, 2], "940": [0, 1, 1], "941": [0, 1, 1], "944": [0, 1, 1], @@ -675,4 +669,4 @@ "6215": [0, 1, 1] } } -} \ No newline at end of file +} From 3161461b6c9960bc286c127f9f31ae609f4e3311 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Mon, 5 May 2025 17:35:51 -0500 Subject: [PATCH 117/262] [Bug][UI/UX] Update battle-info inside pokemon#damageAndUpdate (#5778) * Update battle-info inside pokemon#damageAndUpdate * Ensure updatePokemonHp does not skip last hp number --- src/field/pokemon.ts | 5 +++++ src/ui/battle-info.ts | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index b9c64ad071c..5615f3844bd 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -4764,6 +4764,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { isIndirectDamage, ignoreFaintPhase, ); + // Ensure the battle-info bar's HP is updated, though only if the battle info is visible + // TODO: When battle-info UI is refactored, make this only update the HP bar + if (this.battleInfo.visible) { + this.updateInfo(); + } // Damage amount may have changed, but needed to be queued before calling damage function damagePhase.updateAmount(damage); /** diff --git a/src/ui/battle-info.ts b/src/ui/battle-info.ts index cabe897d7b6..839f0d62819 100644 --- a/src/ui/battle-info.ts +++ b/src/ui/battle-info.ts @@ -727,6 +727,12 @@ export default class BattleInfo extends Phaser.GameObjects.Container { }, onComplete: () => { updateHpFrame(); + // If, after tweening, the hp is different from the original (due to rounding), force the hp number display + // to update to the correct value. + if (this.player && this.lastHp !== pokemon.hp) { + this.setHpNumbers(pokemon.hp, pokemon.getMaxHp()); + this.lastHp = pokemon.hp; + } resolve(); }, }); From b42b2f6752849cb32f8f8b3a6f4d8f35553dae94 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Mon, 5 May 2025 20:38:49 -0400 Subject: [PATCH 118/262] [Test] Fix sprite test due to unused files (#5783) Fix sprite test due to unused files --- public/images/pokemon/exp/935.json | 440 ------------ public/images/pokemon/exp/935.png | Bin 1972 -> 0 bytes public/images/pokemon/exp/936.json | 524 -------------- public/images/pokemon/exp/936.png | Bin 5477 -> 0 bytes public/images/pokemon/exp/937.json | 125 ---- public/images/pokemon/exp/937.png | Bin 4707 -> 0 bytes public/images/pokemon/exp/back/935.json | 356 ---------- public/images/pokemon/exp/back/935.png | Bin 1809 -> 0 bytes public/images/pokemon/exp/back/936.json | 356 ---------- public/images/pokemon/exp/back/936.png | Bin 5792 -> 0 bytes public/images/pokemon/exp/back/937.json | 650 ------------------ public/images/pokemon/exp/back/937.png | Bin 13741 -> 0 bytes public/images/pokemon/exp/back/shiny/935.json | 356 ---------- public/images/pokemon/exp/back/shiny/935.png | Bin 1811 -> 0 bytes public/images/pokemon/exp/back/shiny/936.json | 356 ---------- public/images/pokemon/exp/back/shiny/936.png | Bin 5792 -> 0 bytes public/images/pokemon/exp/back/shiny/937.json | 650 ------------------ public/images/pokemon/exp/back/shiny/937.png | Bin 13741 -> 0 bytes public/images/pokemon/exp/shiny/935.json | 440 ------------ public/images/pokemon/exp/shiny/935.png | Bin 1972 -> 0 bytes public/images/pokemon/exp/shiny/936.json | 524 -------------- public/images/pokemon/exp/shiny/936.png | Bin 5491 -> 0 bytes public/images/pokemon/exp/shiny/937.json | 125 ---- public/images/pokemon/exp/shiny/937.png | Bin 4704 -> 0 bytes public/images/pokemon/variant/exp/935.json | 46 -- public/images/pokemon/variant/exp/935_1.png | Bin 3215 -> 0 bytes public/images/pokemon/variant/exp/935_2.png | Bin 3216 -> 0 bytes public/images/pokemon/variant/exp/935_3.json | 440 ------------ public/images/pokemon/variant/exp/935_3.png | Bin 3218 -> 0 bytes public/images/pokemon/variant/exp/936_1.json | 524 -------------- public/images/pokemon/variant/exp/936_1.png | Bin 9702 -> 0 bytes public/images/pokemon/variant/exp/936_2.json | 524 -------------- public/images/pokemon/variant/exp/936_2.png | Bin 9177 -> 0 bytes public/images/pokemon/variant/exp/936_3.json | 524 -------------- public/images/pokemon/variant/exp/936_3.png | Bin 9689 -> 0 bytes public/images/pokemon/variant/exp/937_1.json | 125 ---- public/images/pokemon/variant/exp/937_1.png | Bin 8076 -> 0 bytes public/images/pokemon/variant/exp/937_2.json | 125 ---- public/images/pokemon/variant/exp/937_2.png | Bin 5512 -> 0 bytes public/images/pokemon/variant/exp/937_3.json | 125 ---- public/images/pokemon/variant/exp/937_3.png | Bin 8076 -> 0 bytes .../pokemon/variant/exp/back/935_1.json | 356 ---------- .../images/pokemon/variant/exp/back/935_1.png | Bin 2286 -> 0 bytes .../pokemon/variant/exp/back/935_2.json | 356 ---------- .../images/pokemon/variant/exp/back/935_2.png | Bin 2286 -> 0 bytes .../pokemon/variant/exp/back/935_3.json | 356 ---------- .../images/pokemon/variant/exp/back/935_3.png | Bin 2286 -> 0 bytes .../pokemon/variant/exp/back/936_1.json | 356 ---------- .../images/pokemon/variant/exp/back/936_1.png | Bin 9722 -> 0 bytes .../pokemon/variant/exp/back/936_2.json | 356 ---------- .../images/pokemon/variant/exp/back/936_2.png | Bin 9722 -> 0 bytes .../pokemon/variant/exp/back/936_3.json | 356 ---------- .../images/pokemon/variant/exp/back/936_3.png | Bin 9722 -> 0 bytes .../pokemon/variant/exp/back/937_1.json | 650 ------------------ .../images/pokemon/variant/exp/back/937_1.png | Bin 18447 -> 0 bytes .../pokemon/variant/exp/back/937_2.json | 650 ------------------ .../images/pokemon/variant/exp/back/937_2.png | Bin 15851 -> 0 bytes .../pokemon/variant/exp/back/937_3.json | 650 ------------------ .../images/pokemon/variant/exp/back/937_3.png | Bin 18452 -> 0 bytes 59 files changed, 11421 deletions(-) delete mode 100644 public/images/pokemon/exp/935.json delete mode 100644 public/images/pokemon/exp/935.png delete mode 100644 public/images/pokemon/exp/936.json delete mode 100644 public/images/pokemon/exp/936.png delete mode 100644 public/images/pokemon/exp/937.json delete mode 100644 public/images/pokemon/exp/937.png delete mode 100644 public/images/pokemon/exp/back/935.json delete mode 100644 public/images/pokemon/exp/back/935.png delete mode 100644 public/images/pokemon/exp/back/936.json delete mode 100644 public/images/pokemon/exp/back/936.png delete mode 100644 public/images/pokemon/exp/back/937.json delete mode 100644 public/images/pokemon/exp/back/937.png delete mode 100644 public/images/pokemon/exp/back/shiny/935.json delete mode 100644 public/images/pokemon/exp/back/shiny/935.png delete mode 100644 public/images/pokemon/exp/back/shiny/936.json delete mode 100644 public/images/pokemon/exp/back/shiny/936.png delete mode 100644 public/images/pokemon/exp/back/shiny/937.json delete mode 100644 public/images/pokemon/exp/back/shiny/937.png delete mode 100644 public/images/pokemon/exp/shiny/935.json delete mode 100644 public/images/pokemon/exp/shiny/935.png delete mode 100644 public/images/pokemon/exp/shiny/936.json delete mode 100644 public/images/pokemon/exp/shiny/936.png delete mode 100644 public/images/pokemon/exp/shiny/937.json delete mode 100644 public/images/pokemon/exp/shiny/937.png delete mode 100644 public/images/pokemon/variant/exp/935.json delete mode 100644 public/images/pokemon/variant/exp/935_1.png delete mode 100644 public/images/pokemon/variant/exp/935_2.png delete mode 100644 public/images/pokemon/variant/exp/935_3.json delete mode 100644 public/images/pokemon/variant/exp/935_3.png delete mode 100644 public/images/pokemon/variant/exp/936_1.json delete mode 100644 public/images/pokemon/variant/exp/936_1.png delete mode 100644 public/images/pokemon/variant/exp/936_2.json delete mode 100644 public/images/pokemon/variant/exp/936_2.png delete mode 100644 public/images/pokemon/variant/exp/936_3.json delete mode 100644 public/images/pokemon/variant/exp/936_3.png delete mode 100644 public/images/pokemon/variant/exp/937_1.json delete mode 100644 public/images/pokemon/variant/exp/937_1.png delete mode 100644 public/images/pokemon/variant/exp/937_2.json delete mode 100644 public/images/pokemon/variant/exp/937_2.png delete mode 100644 public/images/pokemon/variant/exp/937_3.json delete mode 100644 public/images/pokemon/variant/exp/937_3.png delete mode 100644 public/images/pokemon/variant/exp/back/935_1.json delete mode 100644 public/images/pokemon/variant/exp/back/935_1.png delete mode 100644 public/images/pokemon/variant/exp/back/935_2.json delete mode 100644 public/images/pokemon/variant/exp/back/935_2.png delete mode 100644 public/images/pokemon/variant/exp/back/935_3.json delete mode 100644 public/images/pokemon/variant/exp/back/935_3.png delete mode 100644 public/images/pokemon/variant/exp/back/936_1.json delete mode 100644 public/images/pokemon/variant/exp/back/936_1.png delete mode 100644 public/images/pokemon/variant/exp/back/936_2.json delete mode 100644 public/images/pokemon/variant/exp/back/936_2.png delete mode 100644 public/images/pokemon/variant/exp/back/936_3.json delete mode 100644 public/images/pokemon/variant/exp/back/936_3.png delete mode 100644 public/images/pokemon/variant/exp/back/937_1.json delete mode 100644 public/images/pokemon/variant/exp/back/937_1.png delete mode 100644 public/images/pokemon/variant/exp/back/937_2.json delete mode 100644 public/images/pokemon/variant/exp/back/937_2.png delete mode 100644 public/images/pokemon/variant/exp/back/937_3.json delete mode 100644 public/images/pokemon/variant/exp/back/937_3.png diff --git a/public/images/pokemon/exp/935.json b/public/images/pokemon/exp/935.json deleted file mode 100644 index 95df77f9c54..00000000000 --- a/public/images/pokemon/exp/935.json +++ /dev/null @@ -1,440 +0,0 @@ -{ - "textures": [ - { - "image": "935.png", - "format": "RGBA8888", - "size": { - "w": 165, - "h": 165 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 0, - "y": 55, - "w": 35, - "h": 55 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 0, - "y": 55, - "w": 35, - "h": 55 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 0, - "y": 55, - "w": 35, - "h": 55 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 0, - "y": 110, - "w": 35, - "h": 55 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 0, - "y": 110, - "w": 35, - "h": 55 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 0, - "y": 110, - "w": 35, - "h": 55 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 55 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 55 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 55 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 35, - "y": 55, - "w": 35, - "h": 55 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 35, - "y": 110, - "w": 35, - "h": 55 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 70, - "y": 0, - "w": 35, - "h": 55 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 105, - "y": 0, - "w": 35, - "h": 55 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 70, - "y": 55, - "w": 35, - "h": 55 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 70, - "y": 110, - "w": 35, - "h": 55 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 105, - "y": 55, - "w": 35, - "h": 55 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 105, - "y": 110, - "w": 35, - "h": 55 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:06750fe617b2ad66c1af576e0074e016:b59cf22eea90e9839062adc1f728c00a:077dcf06dc5fc347497b59afe6126a5e$" - } -} diff --git a/public/images/pokemon/exp/935.png b/public/images/pokemon/exp/935.png deleted file mode 100644 index 1ca019f8c1164fc0efad7e1081fcf0fd2546da5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1972 zcmYjSeK-?pAD+ZChVpTSXvXYJrWL8PYn5qav5z(~CCq%J6sdKY*g;|)KDb1u0 zA6F=yBm1b9ruT#lT}8wgrw?a@xA(Poov!zK-#?z;eLv50U-$2Me$R7VKMsX-01UDR z0RR9nArMd1W5f4hVyKUxrI)jM*hdKt@zeT#X^|gmd(XcMFvD}4p6^Ob;pud$MTrZ&Kz7GXL@`y#9Kxzh-?Jm%}d#=t8&(GTkBcnb-_c@@lTvUe} zd0o_#az9j?8+npEQ5lhg%{0}eKNi8+yYq)vLt+QcSf1`h-nA4{LXN5|m!X~O8&ec~ zzgeks#when4vp??BM`3P+Tr3>*9QL!a~D2CA0bJM-jAIgC&`?)Ze0OxcYaXw9{(7P z-E;}C4Jj2-ls#3U1fGcQ4RngVl}p^uQ#vuHh+ncgUJN(uW>t91@6xah*i*dveKal<~ zX6tN{ivMvNc~`Y<8KtWHWrpv%SD66hly7}<3psz+CoYKhZ7UL7Ow}3eZ9y^nze3xJ z-9r)&RuM-}jD9!^{)D0>+c8VWom`(?=tw#|>*yVKl{k7=P!*cW#)?G450;O#VheDS z-Qk_?i{>>0t})d26)mH%W#zPU2lG@oZ=MNpt-%H7JKaRS6A(eKlQgg{{_oh-$e^)r zO#9g42*#-ajy2d40BiPJ!%~pKgdKO+c>~OrT3x> zhWKt3vVZQ0Xm}CYt znI4IcAFbVgdwMXhdebIeNCV%NXy-0acj;!Z$NPyb6@M2eAfyMz;@7gAOIN7TeP-|hzo3D6`^`c1w1o)yA)HT zxh{k+^Xn7I%CCkkORk|Cjy~~zgIzADqCPZzC zo2bNm*lv56*lnGYr!`yn8W43AoNxo`ghO_2-fQLJ9JKOUH3laiM zgNedChhi8``>W`t8RhhyGOO@(ecB-XRE{;omN$e!)NSWD9kZA>?Ip()0R8P>Je6Ss ztKOpe&ay{Xe@<~cx(76y47Ex9@OLq)Gi~!Dy?T#^LAbF#B|PB%l^u7&6{m$JnyVbt zc}L70L2NC;{$|*S3|(q7qcErjdYEX-cGoeSu3oz8xlzE?7q0A{1YJsXuuUO^f{UW7 z5dt1b7?_D*@jdM%DSjqd6auUM=cuPvOA&C^VKY8@v$Ak%`M%hFL5l~?{oFJdT=NIy zN@p*xN}kzmRLv`O4#2YqP zk!+{ttk_?9_M6A6eipdVA@&ktQi=6=T)<=qOT+UlYZ@xXG6aZqCnO0M>*JEF)f>A( zG0j6*hwDXYTedaHx#02Fj4?&f9GWTL#j0Lj;9>ekz7QSN7i&f4UOpMLLiT@UxG@Dm yFFQLzbaZ2R>mFXi1kWW+)$RJfhagc4m$vbeRtXyhRb+kd1Q7g5_-4Q8-2VU{-Ia9! diff --git a/public/images/pokemon/exp/936.json b/public/images/pokemon/exp/936.json deleted file mode 100644 index b7dff5e8393..00000000000 --- a/public/images/pokemon/exp/936.json +++ /dev/null @@ -1,524 +0,0 @@ -{ - "textures": [ - { - "image": "936.png", - "format": "RGBA8888", - "size": { - "w": 323, - "h": 323 - }, - "scale": 1, - "frames": [ - { - "filename": "0016.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 99 - }, - "frame": { - "x": 0, - "y": 0, - "w": 76, - "h": 99 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 99 - }, - "frame": { - "x": 0, - "y": 99, - "w": 76, - "h": 99 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 99 - }, - "frame": { - "x": 0, - "y": 198, - "w": 76, - "h": 99 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 98 - }, - "frame": { - "x": 76, - "y": 0, - "w": 76, - "h": 98 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 98 - }, - "frame": { - "x": 152, - "y": 0, - "w": 76, - "h": 98 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 70, - "h": 99 - }, - "frame": { - "x": 228, - "y": 0, - "w": 70, - "h": 99 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 70, - "h": 99 - }, - "frame": { - "x": 76, - "y": 98, - "w": 70, - "h": 99 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 146, - "y": 98, - "w": 59, - "h": 99 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 146, - "y": 98, - "w": 59, - "h": 99 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 146, - "y": 98, - "w": 59, - "h": 99 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 76, - "y": 197, - "w": 59, - "h": 99 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 76, - "y": 197, - "w": 59, - "h": 99 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 76, - "y": 197, - "w": 59, - "h": 99 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 76, - "y": 197, - "w": 59, - "h": 99 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 135, - "y": 197, - "w": 59, - "h": 99 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 135, - "y": 197, - "w": 59, - "h": 99 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 135, - "y": 197, - "w": 59, - "h": 99 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 194, - "y": 197, - "w": 59, - "h": 99 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 59, - "h": 98 - }, - "frame": { - "x": 205, - "y": 99, - "w": 59, - "h": 98 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 59, - "h": 98 - }, - "frame": { - "x": 205, - "y": 99, - "w": 59, - "h": 98 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 59, - "h": 98 - }, - "frame": { - "x": 205, - "y": 99, - "w": 59, - "h": 98 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 59, - "h": 98 - }, - "frame": { - "x": 205, - "y": 99, - "w": 59, - "h": 98 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 264, - "y": 99, - "w": 59, - "h": 99 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 59, - "h": 98 - }, - "frame": { - "x": 253, - "y": 198, - "w": 59, - "h": 98 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2943281264e8142bbdb55f3a34167d72:322e92870c690e237c7a5e4a4a5f8e84:1a0490303f9626f92e787c567cd10feb$" - } -} diff --git a/public/images/pokemon/exp/936.png b/public/images/pokemon/exp/936.png deleted file mode 100644 index dce770dca44943ff8ecc8d37a14fa483f6b2818d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5477 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 Tr^Ja*`D&@IqOFWnv<&|rhf0%E diff --git a/public/images/pokemon/exp/937.json b/public/images/pokemon/exp/937.json deleted file mode 100644 index 9eba0e32900..00000000000 --- a/public/images/pokemon/exp/937.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "textures": [ - { - "image": "937.png", - "format": "RGBA8888", - "size": { - "w": 247, - "h": 247 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 99 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 83, - "h": 98 - }, - "frame": { - "x": 0, - "y": 0, - "w": 83, - "h": 98 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 99 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 81, - "h": 99 - }, - "frame": { - "x": 83, - "y": 0, - "w": 81, - "h": 99 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 99 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 83, - "h": 99 - }, - "frame": { - "x": 164, - "y": 0, - "w": 83, - "h": 99 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 86, - "h": 99 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 86, - "h": 99 - }, - "frame": { - "x": 0, - "y": 99, - "w": 86, - "h": 99 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 86, - "h": 99 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 86, - "h": 99 - }, - "frame": { - "x": 86, - "y": 99, - "w": 86, - "h": 99 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:492182e4e32e5cddaa9dfc2c2c08b684:084d0317f824a0d082ba0ffcfebc407b:1d4b4f8d62307c37457ba974879b47d0$" - } -} diff --git a/public/images/pokemon/exp/937.png b/public/images/pokemon/exp/937.png deleted file mode 100644 index 6e8b5b3426806fb2412745b2f7173fdb61328040..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4707 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 diff --git a/public/images/pokemon/exp/back/935.json b/public/images/pokemon/exp/back/935.json deleted file mode 100644 index 26aa6c572c3..00000000000 --- a/public/images/pokemon/exp/back/935.json +++ /dev/null @@ -1,356 +0,0 @@ -{ - "textures": [ - { - "image": "935.png", - "format": "RGBA8888", - "size": { - "w": 133, - "h": 133 - }, - "scale": 1, - "frames": [ - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 29, - "h": 49 - }, - "frame": { - "x": 0, - "y": 0, - "w": 29, - "h": 49 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 29, - "h": 49 - }, - "frame": { - "x": 0, - "y": 0, - "w": 29, - "h": 49 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 29, - "h": 49 - }, - "frame": { - "x": 29, - "y": 0, - "w": 29, - "h": 49 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 29, - "h": 49 - }, - "frame": { - "x": 29, - "y": 0, - "w": 29, - "h": 49 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 28, - "h": 49 - }, - "frame": { - "x": 58, - "y": 0, - "w": 28, - "h": 49 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 28, - "h": 49 - }, - "frame": { - "x": 58, - "y": 0, - "w": 28, - "h": 49 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 28, - "h": 49 - }, - "frame": { - "x": 86, - "y": 0, - "w": 28, - "h": 49 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 28, - "h": 49 - }, - "frame": { - "x": 86, - "y": 0, - "w": 28, - "h": 49 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 28, - "h": 48 - }, - "frame": { - "x": 0, - "y": 49, - "w": 28, - "h": 48 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 28, - "h": 48 - }, - "frame": { - "x": 0, - "y": 49, - "w": 28, - "h": 48 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 27, - "h": 48 - }, - "frame": { - "x": 28, - "y": 49, - "w": 27, - "h": 48 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 27, - "h": 47 - }, - "frame": { - "x": 55, - "y": 49, - "w": 27, - "h": 47 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 27, - "h": 47 - }, - "frame": { - "x": 55, - "y": 49, - "w": 27, - "h": 47 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 26, - "h": 46 - }, - "frame": { - "x": 82, - "y": 49, - "w": 26, - "h": 46 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 26, - "h": 46 - }, - "frame": { - "x": 82, - "y": 49, - "w": 26, - "h": 46 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 25, - "h": 45 - }, - "frame": { - "x": 108, - "y": 49, - "w": 25, - "h": 45 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2880dad5e3c550bb25e02ab0ab8d58c8:9dc0340440df25f20b3f006422b7a238:077dcf06dc5fc347497b59afe6126a5e$" - } -} diff --git a/public/images/pokemon/exp/back/935.png b/public/images/pokemon/exp/back/935.png deleted file mode 100644 index 64fc37a4a33832aa5d1e229bba55a4cbe9847161..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1809 zcmV+s2k!WZP)M6scE3+ey=?#TnkRXyQDQ zhdReom_}a8K8$$3^T@{okEd=FB#s&*;r-4dpA=rppc$Pz>-Ao>I&%myy!D6)My2Q+ zQY9Omdpz`B8#utt4GE?f7JTr za-2%J?<$7RL9xL#Mma|z1`X;>O!;MR7CM!wVhjLSv=rfa)zp~(*u-k1CL+H*%RmZWOa9geJ))!@5=>(L!4$A8 z^Wy)5rGhLe@u&FlU4~-dj2NCVki{7RUNgvAh%Yz7f~dq-e3Fso6jV{%<7CM}v?|5R z`K1jQufa=d1aqul<6OMk#n)C%SL3G+`cBCANb!xa@|T6;b6y4L)Fa?8j7C%ypt7!4C+aGRu@H^sCc=yx$NE1pnxUo}oW;21FT_~;Yd5xH815uq zAc%=`RM+>!*5jG+h#VtP7x|<@S6mBKa$aajH(S)O%2hkSmO&NY3UgUmlKbWt97^S)>BE`h2 zl?6E(uZk1ZO3AUf2$E4ocX;2jmM&j~Xv&c_+G&*1D-ndu3Xl*{LmBFMw#z%;jJ@|p7VIqHlWC@r_<|)jKly|+?GHWSO%MQ9oe5=9@fRWym z#~O5YNrxRA2m@u-Qa=+@1Pno~*h4<^=cB0&;ibf9a6Yf*rf;0q^z2kBYKY5H@(V@@6|VY3ETPbOUwPGU*)YxZV#`0T^bQ zqHqkAwVWWSJBgoTkBlp1Gn{8HEDSGD0Eo_7yb@Uph&>?SiX?TMAYcqH$N(Wx7?rgk zgm~DBJJ{*zM>NBpRxFf0?I?1a+@-RXcp00SWm9`bFPjx-_Xv|>GbyYkQI5b`O3JZY z^$XL?j-z`SR2=vP5mBWaH3KZzxmdg`gC{s;931V_Np-EK2P00000NkvXXu0mjfT8mCD diff --git a/public/images/pokemon/exp/back/936.json b/public/images/pokemon/exp/back/936.json deleted file mode 100644 index 79ff3ce5c33..00000000000 --- a/public/images/pokemon/exp/back/936.json +++ /dev/null @@ -1,356 +0,0 @@ -{ - "textures": [ - { - "image": "936.png", - "format": "RGBA8888", - "size": { - "w": 283, - "h": 283 - }, - "scale": 1, - "frames": [ - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 59, - "h": 97 - }, - "frame": { - "x": 0, - "y": 0, - "w": 59, - "h": 97 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 59, - "h": 97 - }, - "frame": { - "x": 0, - "y": 0, - "w": 59, - "h": 97 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 59, - "h": 97 - }, - "frame": { - "x": 0, - "y": 97, - "w": 59, - "h": 97 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 59, - "h": 97 - }, - "frame": { - "x": 0, - "y": 97, - "w": 59, - "h": 97 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 59, - "h": 97 - }, - "frame": { - "x": 59, - "y": 0, - "w": 59, - "h": 97 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 59, - "h": 97 - }, - "frame": { - "x": 59, - "y": 0, - "w": 59, - "h": 97 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 58, - "h": 97 - }, - "frame": { - "x": 59, - "y": 97, - "w": 58, - "h": 97 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 58, - "h": 97 - }, - "frame": { - "x": 59, - "y": 97, - "w": 58, - "h": 97 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 58, - "h": 97 - }, - "frame": { - "x": 117, - "y": 97, - "w": 58, - "h": 97 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 58, - "h": 97 - }, - "frame": { - "x": 117, - "y": 97, - "w": 58, - "h": 97 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 57, - "h": 96 - }, - "frame": { - "x": 118, - "y": 0, - "w": 57, - "h": 96 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 57, - "h": 96 - }, - "frame": { - "x": 118, - "y": 0, - "w": 57, - "h": 96 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 58, - "h": 95 - }, - "frame": { - "x": 175, - "y": 0, - "w": 58, - "h": 95 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 58, - "h": 95 - }, - "frame": { - "x": 175, - "y": 0, - "w": 58, - "h": 95 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 58, - "h": 94 - }, - "frame": { - "x": 175, - "y": 95, - "w": 58, - "h": 94 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 10, - "y": 3, - "w": 57, - "h": 94 - }, - "frame": { - "x": 175, - "y": 189, - "w": 57, - "h": 94 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:973448a7633a4dceb9828d95556ed3c2:09d8ad02433d8015e4665464587b1259:1a0490303f9626f92e787c567cd10feb$" - } -} diff --git a/public/images/pokemon/exp/back/936.png b/public/images/pokemon/exp/back/936.png deleted file mode 100644 index 14b0c1c7bf23b063d01a8b8e7824e816bc4e03df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5792 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 Hhfn_p+=mN4 diff --git a/public/images/pokemon/exp/back/shiny/935.json b/public/images/pokemon/exp/back/shiny/935.json deleted file mode 100644 index 2bdf2b2a155..00000000000 --- a/public/images/pokemon/exp/back/shiny/935.json +++ /dev/null @@ -1,356 +0,0 @@ -{ - "textures": [ - { - "image": "935.png", - "format": "RGBA8888", - "size": { - "w": 133, - "h": 133 - }, - "scale": 1, - "frames": [ - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 29, - "h": 49 - }, - "frame": { - "x": 0, - "y": 0, - "w": 29, - "h": 49 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 29, - "h": 49 - }, - "frame": { - "x": 0, - "y": 0, - "w": 29, - "h": 49 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 29, - "h": 49 - }, - "frame": { - "x": 29, - "y": 0, - "w": 29, - "h": 49 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 29, - "h": 49 - }, - "frame": { - "x": 29, - "y": 0, - "w": 29, - "h": 49 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 28, - "h": 49 - }, - "frame": { - "x": 58, - "y": 0, - "w": 28, - "h": 49 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 28, - "h": 49 - }, - "frame": { - "x": 58, - "y": 0, - "w": 28, - "h": 49 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 28, - "h": 49 - }, - "frame": { - "x": 86, - "y": 0, - "w": 28, - "h": 49 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 28, - "h": 49 - }, - "frame": { - "x": 86, - "y": 0, - "w": 28, - "h": 49 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 28, - "h": 48 - }, - "frame": { - "x": 0, - "y": 49, - "w": 28, - "h": 48 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 28, - "h": 48 - }, - "frame": { - "x": 0, - "y": 49, - "w": 28, - "h": 48 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 27, - "h": 48 - }, - "frame": { - "x": 28, - "y": 49, - "w": 27, - "h": 48 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 27, - "h": 47 - }, - "frame": { - "x": 55, - "y": 49, - "w": 27, - "h": 47 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 27, - "h": 47 - }, - "frame": { - "x": 55, - "y": 49, - "w": 27, - "h": 47 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 26, - "h": 46 - }, - "frame": { - "x": 82, - "y": 49, - "w": 26, - "h": 46 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 26, - "h": 46 - }, - "frame": { - "x": 82, - "y": 49, - "w": 26, - "h": 46 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 25, - "h": 45 - }, - "frame": { - "x": 108, - "y": 49, - "w": 25, - "h": 45 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:039aaaf52028b39c07e4909a88a5e8bb:1e66e8f98dd44fa06a53d364e32b154b:077dcf06dc5fc347497b59afe6126a5e$" - } -} diff --git a/public/images/pokemon/exp/back/shiny/935.png b/public/images/pokemon/exp/back/shiny/935.png deleted file mode 100644 index bdd1ef192ad60ab6472f2af83036a90c8f6fbe9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1811 zcmV+u2kiKXP)M6scE3+ey=?#TnkRXyQDQ zhdReom_}a8K8$$3^T@{okEd=FB#s&*;r-4dpA=rppc$Pz>-Ao>I&%myy!D6)My2Q+ zQY9Omdpat1!v|Ly9cEX0IL@_xw@o zm&D%RU?#zAjRSH1*x{cX6W+;u)MipYH>b=~e zk!zN_zn8Hy_Ekf*7_@yI#qXHfC~Z^_(;u?X?jZ%EsLb6S`V?twihuccCm<0mf=?7@ z($ynBH_Iiz5nJd~riw8DV9`>9=T%c<{$mrXjhcx3_ACP_d@cD~AM}WldPp#d`3F~$SV(ffu=5kh}j;b#;k@IcTy}f5&0XJ^wO#n zFXxvwV7vw|sS(Vvf{kILI_Ntg-y_90#>!t7iqCl!pi_^4!|}!MPUqsj z0yq-Bnf9xl8s-z6ual_CW0mjl{RdeVRmi{n0Hj}7#nn5%&i*?k5|z&_&Z69O0e(KW ziHg5^O*j-7V>232Re;L6UY)3`B*sECnwtnSZXE0X#At?^Zg3XkmcI~V?XTU~ieb2u zc!3}$&QV?86I+jG#v^i!L|x>Q3SDt6RLP0m#nFcnG>N@-oNeezb%dW*Y8>pJ11+%? z9J9zQ6wGnOIL3fKTKr<=_0Y|z+@H|mSLD%!xU>us0=7z>~8FMJnE5>0=?5PCGAIC!5$cqbqh&1}X{iB-Hd0Wsbn=66OUdU>%F*+b7PY`6Hnp6nR?2)8PCO zSsLc^-7=J-YQY%?Ip<&&+A^exTVJ9FNQ9=d$_UAk5F@5{#7wml#kZqmEfwG*0wR$V zc`c)$e#P-$q9*OUEwhToiHIgBSqt=(Lr#&q1S@a0Q#B_QJyO0tJBRti>ylwSd?I0#|Z+)@PZ5w5`|G& z3qpv8t+<1oo_<6#>}kb9>C=uPx5-^9Yl)Y!nOQcqXY{gJadwX|DK?YBS`y_5tfizJ zyH&q1&Fnb3mqEpWUl0*h%26|rV^p^=)yzJ+F9#~9rDq`e!fZ2>(O5erGLRp=Y&K#H z{M-GWdg`gCo_gx3r=EK1si&TL>Zzxmdg^~re*jB!z(FbdV3q&?002ovPDHLkV1ft@ BR^9M78R9NZ7gm|Fd@<7J)^Ikt=wW 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 Hhfn_p+=mN4 diff --git a/public/images/pokemon/exp/shiny/935.json b/public/images/pokemon/exp/shiny/935.json deleted file mode 100644 index 3b7326364a9..00000000000 --- a/public/images/pokemon/exp/shiny/935.json +++ /dev/null @@ -1,440 +0,0 @@ -{ - "textures": [ - { - "image": "935.png", - "format": "RGBA8888", - "size": { - "w": 165, - "h": 165 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 0, - "y": 55, - "w": 35, - "h": 55 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 0, - "y": 55, - "w": 35, - "h": 55 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 0, - "y": 55, - "w": 35, - "h": 55 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 0, - "y": 110, - "w": 35, - "h": 55 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 0, - "y": 110, - "w": 35, - "h": 55 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 0, - "y": 110, - "w": 35, - "h": 55 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 55 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 55 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 35, - "y": 0, - "w": 35, - "h": 55 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 35, - "y": 55, - "w": 35, - "h": 55 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 35, - "y": 110, - "w": 35, - "h": 55 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 70, - "y": 0, - "w": 35, - "h": 55 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 105, - "y": 0, - "w": 35, - "h": 55 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 70, - "y": 55, - "w": 35, - "h": 55 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 70, - "y": 110, - "w": 35, - "h": 55 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 105, - "y": 55, - "w": 35, - "h": 55 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 35, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 55 - }, - "frame": { - "x": 105, - "y": 110, - "w": 35, - "h": 55 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:f58bc6c5ab628b520de90b88937784eb:2cb222a4a62936135e43a7f74d7bb852:077dcf06dc5fc347497b59afe6126a5e$" - } -} diff --git a/public/images/pokemon/exp/shiny/935.png b/public/images/pokemon/exp/shiny/935.png deleted file mode 100644 index ce821b4f870a7ae9467e1076cab0f6e6248e9d03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1972 zcmYjSeK-?pAD+ZChVpTSXvXYJrWL8PYjsQ`i*4G-lrZy=Ql!>plFxjM6=psrXG$~a z!^c&WbB^{^EluwU8M;Em7^e?sgtzy#cb%^Hdfz{u-+e#Nb6@xGd4A7xT|agR=^z+n z4*~!HU_v0CqQ|Ch!^BV@LCY`a^zd^?aHzi?Ei5c@tgN(U!23RE2WOX$V3zU%GY1(@O4PS5uwrE+yT)sn=8Rw%pUCJZrE$sEFKOy9Ah#_~0W$J>UJ zsNv|`x5ynIMwglIPwP&hJ9!I_tv%Nkh8GrW1X0nY&HOG8w1?1FdGy@Z8Re;dk*0|j zLkql7O$@ge-l~<{07K(bUjC5kZGmaMNTHF*T24wdbenq!sHQ%A-|5;n(093@@;p?h z8+k+YlL|jnhZ}i{JXsx?i_J3CWjq$bS$hkH*Fxh4&RU-7Mc%a(g@hhcS*}34Ha4d! zcz$zI=gd*)n_Mc**@iDz$31|H+FhIcFV0{51pO6BqW6C2@;F6icl78AaeE7bTKDMJ62Gt>YrwLuKSgVKz7CUC%2FbcYWf6xL>y;!6g)(!TvTBqyG!E zqr^Ql=}--E^yKLKbKs9CYKk4BY{JR)*~QM}BXf@4@m0jpyZoB4G!|AU9DcZRv>jWB zo9c<^a$hp98*q)KysK;*g{>%OoI4q(Be)9;h-)1#xWMTqa*R&|y-wD^x_Q52)1rdL zzcTFON+Ri}Taew)g)z$Y&sk#Z`U@6{m2xTvck+Dwbs6Ta$a~Z}Dq)a;LUyo$hs*B8 z6b|v+DrNuN7x};yJU|R_uH(5^$_4-$M+CSCcik_k7wN*i%@X*-z_7-N&F;69qF^^8 z`0k7-e8On`f!i~K`L$cNa6_ATwnRI3zPejCi#^eAoMJOD;QpixdjnGqvs+g!c8kRS z&fcZph%dilPTA^gUCQa=SKgQt4jtq1{;Pr0k`J2Z}};Xgs-hpw%_=ivKezty_H3%jv{qn3@p1 zEq<~Z^M0r85t9EtaiDp-*$}TfjZ-J%%`=Q*oZ2(t zWIV07fjh}u)ol5BLbedHb4i-Niu(EYri_1~_)&|DUC`%=83m~I>iR#HK*u0zgTwm= zx9h!um)AH~+Y9JURNpz)2=mWrwnxu^W{aUVxgS0jt2*1UFw(2{Xc~kY>r=u5?qA(?Cqi*XV4|sF zqb@jN?(pO45%xF3M`Y+Sn^}cHEzrY6TfVn}?o@TT%5yWHqc2?fJqfyu;$WLf2m=?# z)FSv?k{~b(!Q^?`NmBhxvO@^W#vh}fS}jMynMcfc=&j14>6QB;_eCupH2-7EU~t_Z zkgHw6=sWp{`L$1gALJ5f;b3Ax_H(Hf^I(?6qhe$)ghb5Ra|fxJX8WyHc5JRVYj$v4 zj)mRC9yX?#KpffueO>|ckZ-ieNMGz^{B(8>i$s}qW&ST1(*+04%%gqf=&~2tRE5DS zKwp0TYRdN&^C@wQ9B{={y{5W`SwFS+>ojoHiyjgwtZ)Bi$!#Na!hi>;)@l3j)7^TqS>(j90C&+K) zugY{7=_dhViua!Nomkr%dP}S(rCUiFb0B%+aO#DlTi(7NRaoupfo0xHC_NOrvGCj9 zT|N4;*;BjsI|WCp&o1JF+un8B3%R1XX|~T?mB0d9(E)L9fpf+Y_ToahZ6lYHgLuON zD^l##>{a`#&wlfG)z1VsJH%Z^OewJ*j|&-eL0Lq;WnEL{cqSjQ;iM$-Qe%9wwR&?8 zD7JM7>u|j|ecO%}IR`xPnm(=wnnyF_dziH=i(E|K$Y-LX`cl2n+{-7ETEzOV3^%SI y=w;_dh>mVdZ{4G7nBe*3>4rW3_YfpX(ee&%@)}{&po*;TodAMA3E%1$llLD8jFkic diff --git a/public/images/pokemon/exp/shiny/936.json b/public/images/pokemon/exp/shiny/936.json deleted file mode 100644 index 550894878b6..00000000000 --- a/public/images/pokemon/exp/shiny/936.json +++ /dev/null @@ -1,524 +0,0 @@ -{ - "textures": [ - { - "image": "936.png", - "format": "RGBA8888", - "size": { - "w": 323, - "h": 323 - }, - "scale": 1, - "frames": [ - { - "filename": "0016.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 99 - }, - "frame": { - "x": 0, - "y": 0, - "w": 76, - "h": 99 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 99 - }, - "frame": { - "x": 0, - "y": 99, - "w": 76, - "h": 99 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 99 - }, - "frame": { - "x": 0, - "y": 198, - "w": 76, - "h": 99 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 98 - }, - "frame": { - "x": 76, - "y": 0, - "w": 76, - "h": 98 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 98 - }, - "frame": { - "x": 152, - "y": 0, - "w": 76, - "h": 98 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 70, - "h": 99 - }, - "frame": { - "x": 228, - "y": 0, - "w": 70, - "h": 99 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 70, - "h": 99 - }, - "frame": { - "x": 76, - "y": 98, - "w": 70, - "h": 99 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 146, - "y": 98, - "w": 59, - "h": 99 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 146, - "y": 98, - "w": 59, - "h": 99 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 146, - "y": 98, - "w": 59, - "h": 99 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 76, - "y": 197, - "w": 59, - "h": 99 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 76, - "y": 197, - "w": 59, - "h": 99 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 76, - "y": 197, - "w": 59, - "h": 99 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 76, - "y": 197, - "w": 59, - "h": 99 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 135, - "y": 197, - "w": 59, - "h": 99 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 135, - "y": 197, - "w": 59, - "h": 99 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 135, - "y": 197, - "w": 59, - "h": 99 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 194, - "y": 197, - "w": 59, - "h": 99 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 59, - "h": 98 - }, - "frame": { - "x": 205, - "y": 99, - "w": 59, - "h": 98 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 59, - "h": 98 - }, - "frame": { - "x": 205, - "y": 99, - "w": 59, - "h": 98 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 59, - "h": 98 - }, - "frame": { - "x": 205, - "y": 99, - "w": 59, - "h": 98 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 59, - "h": 98 - }, - "frame": { - "x": 205, - "y": 99, - "w": 59, - "h": 98 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 264, - "y": 99, - "w": 59, - "h": 99 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 59, - "h": 98 - }, - "frame": { - "x": 253, - "y": 198, - "w": 59, - "h": 98 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:244cdd3e42481041b59c3b67b0c2744d:204f377b772d27af90e7fcb35c29932a:1a0490303f9626f92e787c567cd10feb$" - } -} diff --git a/public/images/pokemon/exp/shiny/936.png b/public/images/pokemon/exp/shiny/936.png deleted file mode 100644 index 97856ebb8cc970fc8881e3173cd9dd8aafd8ad4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5491 zcmZXYcUTkMy2TShud&cOsDQK}U0Ud%f;5rdn;<0=iPTVyAkBgi=_pM^nh-+oN=KSV z2aysXARv$cxqObh>!?ipoyU=0Q&2@8vt;5N?%Le z3~u*(?6yw_gr0o(_tD6ZJ}z?91l%Azj6mpqM6b1C73*6y{Bc;;mLd(4qQ2s$KvFms&j zy&q?5**zCq|6h$P5){*D>pW?vJemMEy4PWxoSH7DUOKOYo8oRaCpC>svUMm`S*^ZD zw<^he2(n9{Yt-1aM%Sp_>|SBMYdpTkBC(mQ+7t9R4mo3KCZZ^Amf$*G^+<*@wa?B| zcD?Cd?}ffU<{Gr-4epOC5=l2SaBDajhnlI+-3Stmm z{A3H4SUKm@B@h)lT5S4U)@j**;g{n!>dp~#UUm?dIgy4T(WK_Sgg8a4TV~WByRg&iCEXU=0mP;B;7c>H_t8? zFuRX=G##h)-n@3>hV&wkIff>mGJgw}RY9%Fs;V7ox$2M=T=fU;f2~=t3j*iYWEduI zzZbV6ACc&NWI1s!-hPMvs9HMOOgZj@G zM-5z10~`4o=qYKX^s5gg`vflN#GBpQnN9MpgxaXx)7yWg-Epsth0U7vIkx5l**}-9CPD8JwB#Kg{r@h~=}w1aa`m_}n-%2!?#C9W|8TqbE--~6`+-~qGbp=Lg zun3^MXr{?yR%kEJP^H`JdkYn<*eE2wl6@%g(~OOq1HtLIi>eXq)EL*ECY_Im6k^c6 z4P75X3$J)DK1g4Ev;Lj8rMQinpKuaycdyU@*q{8X5BbyYKG#iY*$3umgeFkm7`V}o z{cGhG{{s9p;e;l2oISPu);a#BC@6o`d{KgAzL^UA{R^wJBi!sH!jzNO|Ve1FB?yXNLV#*IGkb_t+xT2k zLs~&TNV+}qNyCcv2VuWSfq=)_CHW?Zqx-w${>#bJRdCr``x^?=NuZvp8yyP9{w_%k zu& zo;Pi3yIdREc2yt#^>!jisJPg>a;Yb!RJkHw88W@dxgsv6fhy?T$=+KHb`HHgq~`tB41jTdVE76I;;N0{{Q z$1+P#PFfrJI#tT{7M2K6uercIp4tiiVO|zcnXzYm);`;1x*vy5{(957tDhODx--|c zq;RJ(cIUuz@}YbM90}#pCYpN1f4C3}0n1Tuei}UNJBS=xx@M)Q()-4?Q@ORrMF)K) zls-9M|KxWO4e&6Q0&uqq=~G(^+x-J!e1M8mbYJ^oCbYjI@Zy%Y6_e|TvJBmLK2nN7 zOOJE(cH1idn_d_Dnpz?yS1*}ewxdp`GD9F;!DH%jQG+|BuVkOaSO%qy8`JE{gfMxp z2Y878DMu4)uJH^c$j~J|h38P-WO61)1TjTjtmDxwE-LP@l=^nfu+g9(5-CM_e~0s1 z&5t+8)#@>gUGNQk(57Jm&%$Ja*QM1Rv0d;B87&!x%P&rNGR#VNKj<5OOs+ks)?s?T zTagxM8yHf2Z0D7a`o3(5Q5+mi9qiz3c>)cOA8bzQ3NK3o+}8Z{AUA6$x?1NWnV6ge zr-kSPWMP_bwb8d+S%8NI^Yx1fuc!kONC5fq8Hajti4Z|IrmgGFGz z_;;X##~m0@RkaMebCcec-Tob@gAyzQcBTxdIZ@>}NBH4Z@7PTkbD0%t3E8^X$6z`) zDOm;-oG2u%#cx*4Kz`b`RBV)0&OjEzH>f7QR?I*a!wn`f8%R;;;Ov!mvB4+p91vG; z_FqkRkt^|ib48^YvcIlb_#CE$Oiq!SnNu3_H<@cNxF{xnCv?@)FadsdEcRpNjNc>y zo5@;Y3`^&fcr3rUk0TgNGOc)vq%z=8Xm*Ym8ginnSF`rN(&ff1F)8;m305uo;rOW-^Q;E z?(HDaoBV#FR=z?Vg1+ktbLvSo9~T6EmaKP}j`l2;tcz4X*`WC}aI`y>xrOL^bby2zQ`yw!2l>9W z8VT!c&CHOC&CZb9R4gWiuntZB3Z%06+z>>SiF25pu6=-yS3$ZC^8~{^@u%CUTIszj zkY1s(f&DZRHv^fPz$q=vB#=tZCir9@C2d{b4pJ-MBy@pw=%a@DSqv@SB=Uw+2Vg*3 zi{18ttwEwzuNv~KM>f;wXTi-no_LtI{m*47kN~Za*g#iG`Y$u8Fut0jhryEPu`52L z*c}RVe#+S113&M|&u?wPgM866_-VQpcPDq8PQz2*06K zv*Ey!|I-O|kIJSlAJm@DyvgANEqPGT8gNSQR2zJW&y!Tyhrmsp`c>=u$tb%CRoGO* z7I@<0+Ro0?#g`c@)OR7&RYlOTei#)OccRoYH-YSJDLq*H7;t_pp<5Ak<>}+5CeymF z!oo4A&DqPyXvHl=kDA2cdEN%re5Xm;|X#^+%*ps2g(ZtdVFjxl*SODn+tZ( z0nL8K@Eh+K4{Ob9bkn#6JXE4;q-w>W{q^BA`3{DGtqgfmT;QnR!-7PrqI2p}05W&K ztz@bf<#j*W;h6rMBC=^bp@!RtFpiuUQH5EHa*U26Chb9eZ$`sjtKT`iO6qAGcyJqt zC>jVvqJa3{54E4Xv)iNiwES+T2ZE#_^&{N_0vJM^Prrf(Q)&}GdbkNsw$Z;;SY&S@ zGltaBQYv=DQd>}F9&SF=E~06Q5JXB&yMSZu5yB{IhHT)D{gdM1O<(ON36+EDe-5Y^ z^fqFJj>)vTW-=Vj(1aX|?=uO5xY#J(n4f^|CT&LMmioL;dtT%jz5zypfaxHKeb@VYMG=2=*mkgum~;Xq za%~ujSV2^WO)`78d+uPvI`Nfs;E_B8pbzMNR4V#|`t~vOIHn%)g^`9#j4E>lTki3C z9kzO}>b)jnp%3PM^gCg~`hJb1`cwIM=~Doy#-RVtgmkwvDXGEGU16Ekf>EK5UsDC9 z?e)w(i+n^$;c5DGaC)R(moQKHS_lp1P$@+{8nu%sR<~+$_kN9CL%wZc&n_FAR#y%m z-v6M6>rr|@0oryX%aJvbz;+q@`K3AxoI6P_?oVQ?dF_zGLPpo%PruXRPDy)8w%y-VJdv-#=TE?6)jkhGji3Rabf0|{Q z=S2+-H_0ILHvkd222l%1tE&mh9;PDj-LcQ>#99HSAGt*{cB>^`qiUZag=!v}+5Vwf zMdb#OpDj?QxeRdH-$B{<=Jii3b9=hpt)?!Y&V0DbkDc)`atk6AlaDug_YQcPq)ya1 zw=Yj&!%knVN7~)*SH`csi@b3rzWk0AzPD;X+~PG*4spj9$WcVg-yVNF8mV_{s^Fkd z?SZKvJjN_b_Qd(vOgMCJZjZ{FmfSa^G@y`})ZP_<@U|xPL2BHgC-;3>DqTqYSlr``0K0nMi5zyj3eVvMH|m!TqE1I_+mS7xPEBz3oAZDHlc0c6 zq8(NWN)%RyJK~aFT@?oIv3LBWuxWw$Js|CaYew3uCrFRNoQxu2k$t;1Sxes0V71PYZ(7?SrA@e zmL+{+&3g-ktV;eHFhy$q7HN-|@0GaAPbk5z;Wd-4FL-K7E;K&a2nb+DJ!6_QK}JCp=AMC1=9MKSJIA34IwEB%+Aqz0fxOJIJ?bf6dXr zVEgYx<~9Os0g9IYj{Sjut&8)z(Xkm_SG)C`2YiEltBV8N*kyMxk$H>&TT0&*>IfHx zhk6-Cw937>5gb2F;p@9k6)PqZ;EuN4{%aoDdZ~AY-G{ZYX`FZa83|~J++YIqX0mOa zmZ&W_;~4b-)X~DRcEmB(_PCxWG`R?hu$qgcFa9C>VHKVIwAF^UIr2%4g0tQ@!XlOY qpkx350@8n4G64HNL7Jamt-z(7msO>nTxb780s7j8TICuJ(fwXFaQ7m;9lOj;QvWCaQ$TU{+Rmy$N1Rx|4U)0RdA?mPQNHLS~M{yUS-M3ZW{eP=V6Yaj2KVCQ09^JO`zO-QV)6`F`#R2c89^Ng*&+Lx&8kWw~ zxb!QTkVNRO)>fE496DL&$vrc;9xEWgq1g@W?7H6#mQM_ zwq{rpYk=p~djPod3@rjxV6}EX@n;U&T#d9P8L2^_)$zc45${HQ_L9vkHCQzYoOw$i zHu9E6mDwtxWf5~U*(ULRmTUmMv=}DAyS~j{k0pqIGO}w>f?1{M(uRq2+MFQK4*C4q zbqJ@r1S$_gVAhV3s^doB^DN%<_9k&Re7t;nBh_wN1n+8dt~Uw%f>f%N`NPow*oY}q zK0Ix_-}=u_=6!Nq8fgnqiS5h{Y2jS{=g;~kKc&uIyqVp?+ejd`8D$*KrJ1%LG$0Q^ zH4?<17moYX^4`m(184(n0DoXO?s~nd_nD2=J3#%jaJTjdAc$4roEwJYuTp1!R+>iT z)%usO7$gI|SK?V2! zh=155jmUsnm;2u>ABhvkdBVHz8T*%co3vS<{nL}|qe&*jX5kp~S)?*~ zj(;;zykUKQ^UqImlu2g9X5mz117%*zb22|EHZ7JsSBt*Qc7^T|!hQyYW1lH>PUHQyo^Q)`nozG2) zjBS<;ra4C1*AFMvhUgrKM`x33%LHYP`qV0C$X%UlKy;3%Ks+j&PIdn!TWI} zyeTD0*d2)Nvw5P3gsIwJx+GGnGKqeZ=tm=Vf+QM)YfNmK&Ep&}2fepSljzc9$)@3n zO{fgaiDD{1B@&ml?ykP9O~q_5$w#B1h^XEy?mBcC+CQDVH0c~km4P7AO5{En=t64) zkrN;nyHsaGS~^MZsVnq|;gDDlCpH!FxJzTQw^(04+%OcqhZHH-9rL){^{Ra;@#^HM zT1Q#vv6u}>G(_Aa!ga9p<-y<3lfU>tc-Ot8|1BGxHuEy3;7txcx#xWnX6&8(Lq~X@PELDVwVm50GP3X# zL}IVusL*zgI76kt&0BcEE$uRfl66VJo3^}9T$+qDOvJo*@3x5Lz|EVSX>Vp@wKiGy zhPF^0y6g<<^JA&=r__6nz0GV3BV_X2VCrr>R{!+VA|8=JOws;$lDL_xVi;7Wov5$$Jl+PUxC@+C`$to-?FmuD#- zd#_*o_TNU*@K)eS(pI7c0%9i4U2c2Z^o+S4&q6jB<)*lXvjp$eQ?y0gcX^vSYav_c zsrPK&j2tv<1H6Nn0|SvZ?~4TQk)+P=8`(g7FK{yNMZ09&I0^y`=OS-~3?}Z(X;5#1 zw}_JwRXdp^h?)3$HB#a|oA@o8L937rkeFpEPQxNd(`Ip>ATSA~=<&vP)+y?=?`I8M ziKabbk|5smX5d|K=9#x;qa~4VWP>7wZhO-(GjJIO(>8HKxU~#wtRNm*IGsd0@lJ@o z?^EwwT(cx-C*B&jX_J)m_lQm_8)oh;H7}aZsy({f@1Nbr)ylb*X-95gqM3^}pusy3 z1F-M=%}K)B#6iRJfQk=-4AR3OO@fFTM`<<*obG#bm&#Oa6Bl#yUd6|isWjZ4l^c7{ z{0T(zCf)B(G79{3&$~D8IfSFFPVJ6;_iuaRfFY_Q>PSbRg_X$*)?7NCv z-ZszF+lZZ4>*6H2@Ou;-%gB4ag`?J1AVS>GKJqqkioGZG79w{`-6S=lJfL6>R;&0a z_m(~l*_rj;B;gJ5c^&T?si5rDCa1P!vl(?8Vtj_SBVsB`VBjfK+ z66J$wI6}})yyuBJFJBk{ZV|)XFl9nq^42D~ai4iZJT|A;d`P@mJP_rJSgcupYm!LE zY5+01KSUQ!=Vz_$9&yewOE3|*gd^Ib=yUCyNm^>I_vk5T!#ikegBtoHUBX+$JBSNn z5^XEN0*EGaVn->H;B9gDA^pUAgK50*D7r8)_nu~07bofC?=_pG6o8t|T3L?}&xr(R z;vIddS>8ZyF)_)-0vAv>-@F${_rE*I1>*3Ike%P~PKZ{)+n~{1LgLnoTl3oT_IH?H zyj2@FGFU%6Nn~S0JYZmwO5W`8-wDymh8dvL!JD)0O*$3_62nZHq0MDh?*-ng^>0iP z#3d4+%v-ZDs#Z$0`mdB|wc(AuN$}PJGHG)hz4o&#MAN*8w`s5O!20n?LY%b)89fp( z3(ox}(WgX+pG-XVo?s1e$5bE_=qTb+Vm>V@&hlt;g7w3bjGMGkQhaNig7hA-`@f7x zTy`um%oVxeor{C{@!`8kOQh{Hqf4&epX7R~1T*Aw_(a5>i7QgGVu9&2WE0%$6h*n{i6MOG4p`BAl(?*xUy=U#} zNgA`iiMJqH1!mD3#9W+-=rXi9gI6_443oWE5b+J6%zlS?2J$X-gg5d5uws&lcq3wO z#Y_o&-y6uB3UBn;YLZqMWh-J3XYXw!yf>&|;_3mgZjvCj%mz=pd){X-H>epC-nEki zu~jx;BJd4wLGE}I#49J+o`@^5&ikB0!KIYmI&yNo+OArzx=`3)PE1u zGmkI)a_a!%vC>jzeQ6E__NQqtGqf)UU=I|Z&HF-^1F#2{Emps95nT>o9vk{hR;+&j z@}RV__#W16u|H0GHgD`{KLC3`VF^0KUxB^+w6H67=vR;r7dL5mA3#1xU36i7Y0ZWA z4=jTBkLEUCCa>nC)e`$-y|GLl=dpz~u*Yhbm&spM>Q`CjZvN+kFV(l^}~#*nC9`7FO$dn2AyZdE&|$uy6y ze3^Xx`v|bAJ)vTn$5*~g9;wu?(NCzD<{?#HCXcoJm231t1s2o;E8iv0^;xx+ADh|} zst5J>!Y=uEhd!3c*91Nms0UWQOTK!UJT|o#sK>#Ke(|MArNs$a`rPd&cs*Yej>>+7hs z{PooOI({vGJ+;2-*YeW~sK-}%Ek8A<0((%A81Aj*=MT{{&|PYWjk$-EIOS{kBk`~p zkLVfb7WG}%$sg*CW%Aj=dm^zGajhqyq75pgZ!EWQ9;3}lR9?$(-p@c|D)t1cxMIKEdw(sz zd9UJ*9`(+kG1a^=&*Q!GwfyRB;#ekMt^}G=S8muRPv7cIsvWL`Mbxw6KI!E zS8p}fpZIof1BCYx3{i*gU%ZEb#oeRcDKw>a;F@=Lj5me%5m2_4pRmPVI{XKKqCTJ* zwd=qI_8YyU7dxn4zLuXtb%YaH^!^I%a;k^}tK0*;Ra*>`rRs<#UnXB@6wu8T^*8V9 zG2W(4SgKxHCSQ&l&=Pfhuf_LzoA$}AHtz0Pet0ABf;XTAsyz>WXW-_{A1th8sm-k`cE( zZT05zrDgy5h4K2ry91;)7vB54!GYyS0NYUWE-(8BSFzvoHxj(p0SoW__L_F=X;*I= z?vaN874O1p6Y?9t%f;jOI;b^Kc}+V4KMfXn&RwD6U3hK6cc1iL#iiEQFtGLRns&1K z>OBm1wO8iqU0n8$z`scx?+&2ins$onq~iDEzP;K3-lbE7k-b{H?{7V_IIMTpw3~Uf z>i-n9moMNcFnK2ME-(9sxTf$@aqH1u?10)^)2`-LXmIJ~Zn|+9Y0OT%3#TYw?fYu+ zp2hKE2Y5fSraciiZ^Rv#=3PET@Wzt*mj)hslx4D94|!|FZ!yWd6)DWfyRhs(Iq0tw z?}N8#_pmN6(I*P#XprE|aho<4IX^nhZ1ep~qKj+9q^dXK0;hpT{eR$bFDqGgxUVQCQFYn)3qR);*^Gr)UlX|Y zsMS5bL_dg&d3e*b1e}(weKeMBmJVc%xUw7Wa zy9E{EZN2N4=%a!-yqi!V-rl=@Ek6#s1U@yRLcD3-eD#TlQH(kq*J^E8a zD#TlQw_T!-J^Gc@1H@~V=wpw5Ybv&ux3Bso`Us{a7381ceJ)&z71aN{fRg1!X{^`)0000Px#1ZP1_K>z@;j|==^1poj5JWxzjMbE4Uv1rQu%?;&=wOgRflh(H(DS}90r4J7e zO*ChSTBEpy*2kL88zCckThpbV-~a#ryScesU1R_N0P8=DzyJUM6m(KfQ~&?}|NsC0 z|NsC0|NsC0|NsC008dZn5dZ)H32;bRa{vGizW@LZzX3P}QzQTY3%p50K~#8N?Ocm; z<2DdW(zC6^Rg$a!|6dC%A0oB8R{~F<05pbKsIThn3He=L|mS zStw%%bCnj_B``E8jl8`0q{0}QoT_x#v9itQ{7(a!G2m3jz`kP#owa?U6AhX?)YAUp?>SXHGhg>?G@41xvUw~hGtP!`9sY;LH@_NPp*DGC8ByY8Fppk)zsY-|B@_N19uGb_C zzc!9HVtI(GG!U2YNDO^`r4j8iq@qEW%kB2s`84Xk(uiKEh>8Vq`S$kuntd+!yVR%A zil1pDqGAFrlgaFJfzA8nzU1M8pJ}93x!Ni=#O0r261Xk+4>s?+>Z6U=7J3zM3>6zs zG+A9@Jua!duRh#}X`xj?ua=5~z01pGNh{G-A8o|8(5gU2=Gm(_5SO{~b%95?Kslad z0&%br$3m}yUbTvcr@E(rWm#m8afY4C%m_AOT4+>quS&(k)3VSd?Y+KU`0$Ez6z4}% ze6SJ6LZ^a})N8Ne0WMLsrpf7YT~{1e_xDzR*vS1(%Gd%qt%^*iRa`tRYpOySFCI5m z--OT|HUSq1P{%5-VC5kaxAU#OXijp7o(Gz(rg@WNr&6&u2n zM)E*~Wns^1RVWcL*|_B4zFe@^{MUaf%Z|N-8&M{fE6#oZSE^S>MWebDlelQ}3_zC_ zrW81+7H+R%LHQu(N`_nz^2Qm&r6}X&Os;bIdLpA60+j3kjSM_s2p@$(5s@P<7kos; z>c8W)_O?7s4*^PbP#ZB_;v-2?0VQfuTyh2I0ktSjQ{Y)5Bm^kQL2ktLfbDBmF%KFW ztxGwt)*bL7wW&lQ$0hdDx<1z1OuLV!XCkBEg$B?@sV zSl|A712~7Ql%Wx!%q_GkK~$G33h|Dc5BQgP&>Wx)Ec7Zd6qizqspZkeF^b0tsAx1U zStUKDEefYmG_p%}xblf#eHz6;<5G&o`lnC~6qn_?!eYDnG>UnLxrO7{UobD^YwH zxtND}VtF4@f}QMG(4VANp66kn0EInpc+yEhPZIq|dS$2{p#;J_4U|j4#KM>nprk$~ zoiwmr2GT2|@XC}@=ZTqA$7QZ|C*b|$F(X0=Ek}dSWzxsR*1c^FLV|x|J3s-Z%h92A zS@r!HHp;w_Q70gMKTqVAA8O<~lpg=K%b3lBE@fXOxbkyKJ5k7{I(rfZrQpocD>KUX zT#ogx^Ylu9BG{JWn9HetAiZ)V;8K<&WHP&)>w`dyNC66f&Fyj=a5>k(^C0D+f|eq8@HHj4+#2F?Y9TQ)N$x%v(UF$Id*en-CbHZX z;4);PCJFou%tqn2tOg~|BsRT0VnbZcEPzodSPv@$(^9}O11^E(a1hE9^%Q(QO$T1v ziBi!Nax%l+BMzc@qD&ZNU^1hqSd_jIW4Rqf@pVNmvr(`}T(Ui-TkgxJxf~wGc_Ow*7B)g1 z4_mr~454KCO3BcaZaFZKu^b-w3Rx|1p*npuDJ)R30ZErg;vq#x3ZtPUXiB#npTAL% zXG%8bE|b0=!;wxlkRj5o@|;3OTJGAbYSxClb1V9842P&5NYEyU38gMa#%6M85ui)J z(pMhx4EQUfnlYo4;e@gr-A=QST}CVb7#)Ur9?MlIJTdG{n7JHbmw@PxEVN-BJmifn zQosdQ7`!RB#sSPBE@ig+UEaRsAs?H|#zNk*gPfBksUxRq9@sF6;o!3)9>pKqyev#l z+`6|UHmb|kf}TI=c1az+a^%qh48jOA8yr_6YyoT7_A1LBbV(1rg`H0c>d+@ZvBI3ju+QO@uOT#Dcga7*$|^ zM)c{@GMOlYjLiYcsF6L2OR2>k$@12oTp z^h%(SZ~UeX!xXdH61W(djH!?l48bUug0Y1JKNk{fB;gAgm{4)y%w2v@rNyq_X)$kU z|GU4b6R-e6fzO#+s4`!08L-e$JWi;QOo-ZaTm~%svy>j5OQ-t3;ZhE|1W!IV+={L0>!Cc6XCa`XQC#kd^#t=U&qkrj)wB>$v5;Kui}eH` z5ThA>hGIfo&WrI;Dt&KTNSgCA6dQCI(U+UsiL@{w08$<*XekmR7*iY-8{%?WoEVuT zH$c9UCkm)IfXk4D8fNg)D=mdz^iC*_iUV;uD+XhWTzolC6j1SSVxB0V;^EvpQ6?PE zzyylxfeYY+z8t_@aF0?|e2T5&VwNZ3O~P?{MNvd$Oi5@d#pbmj^~N& z^vWPlWU83I%;Vx{p2$nDjPgX9g5@xOna9JyJkc(_BKk>wqa=(dDwTx6kx960irL~; z%<4_QF_1zRnNe_vqEbl{B$ugJ<%zlpsGdOv7rJHq5XFYPb1TJNo@n1MvbULjt>#^ZZcd;`E+I7o!-qUDLUq{|t4hv} zWp4GwiRqH>f#sE2&7YRxiy4@-j9u~0Cuf)R%1|F;So4jtpFWuPF+i8|q)sejGy6@Q z)ax|wV}LHpO4VXm*wxCmS;ht%TT0%#f%8Q2J{qmdTFlygHLd~EjLqyfb<#QbXfrTa zPi~q(j!RVYDl|{(%riC-%G>vUQ%8#F(lFUlY#g9`F$2SV0;;9h+7Ua7g=3VwC4j~y ztE9)YMd37xMs~>#|4-^v1SkfI%W_h)*seZ}VxS(Ex!Sn~5vNf!ic9%=l|_E_X%r3Z zvOG~ZjiOOp@(P)*lz#DP6ou-tqNogT8YSWJ_#2by7Ml@dj==x`002ovPDHLkV1oFh B{Nw-t diff --git a/public/images/pokemon/variant/exp/935_2.png b/public/images/pokemon/variant/exp/935_2.png deleted file mode 100644 index 87d88ad2a7497b59b9b248751c392e70444623b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3216 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 diff --git a/public/images/pokemon/variant/exp/936_1.json b/public/images/pokemon/variant/exp/936_1.json deleted file mode 100644 index f3c45278c91..00000000000 --- a/public/images/pokemon/variant/exp/936_1.json +++ /dev/null @@ -1,524 +0,0 @@ -{ - "textures": [ - { - "image": "936_1.png", - "format": "RGBA8888", - "size": { - "w": 323, - "h": 323 - }, - "scale": 1, - "frames": [ - { - "filename": "0016.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 99 - }, - "frame": { - "x": 0, - "y": 0, - "w": 76, - "h": 99 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 99 - }, - "frame": { - "x": 0, - "y": 99, - "w": 76, - "h": 99 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 99 - }, - "frame": { - "x": 0, - "y": 198, - "w": 76, - "h": 99 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 98 - }, - "frame": { - "x": 76, - "y": 0, - "w": 76, - "h": 98 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 98 - }, - "frame": { - "x": 152, - "y": 0, - "w": 76, - "h": 98 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 70, - "h": 99 - }, - "frame": { - "x": 228, - "y": 0, - "w": 70, - "h": 99 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 70, - "h": 99 - }, - "frame": { - "x": 76, - "y": 98, - "w": 70, - "h": 99 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 146, - "y": 98, - "w": 59, - "h": 99 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 146, - "y": 98, - "w": 59, - "h": 99 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 146, - "y": 98, - "w": 59, - "h": 99 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 76, - "y": 197, - "w": 59, - "h": 99 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 76, - "y": 197, - "w": 59, - "h": 99 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 76, - "y": 197, - "w": 59, - "h": 99 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 76, - "y": 197, - "w": 59, - "h": 99 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 135, - "y": 197, - "w": 59, - "h": 99 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 135, - "y": 197, - "w": 59, - "h": 99 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 135, - "y": 197, - "w": 59, - "h": 99 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 194, - "y": 197, - "w": 59, - "h": 99 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 59, - "h": 98 - }, - "frame": { - "x": 205, - "y": 99, - "w": 59, - "h": 98 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 59, - "h": 98 - }, - "frame": { - "x": 205, - "y": 99, - "w": 59, - "h": 98 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 59, - "h": 98 - }, - "frame": { - "x": 205, - "y": 99, - "w": 59, - "h": 98 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 59, - "h": 98 - }, - "frame": { - "x": 205, - "y": 99, - "w": 59, - "h": 98 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 59, - "h": 99 - }, - "frame": { - "x": 264, - "y": 99, - "w": 59, - "h": 99 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 76, - "h": 99 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 59, - "h": 98 - }, - "frame": { - "x": 253, - "y": 198, - "w": 59, - "h": 98 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2943281264e8142bbdb55f3a34167d72:322e92870c690e237c7a5e4a4a5f8e84:1a0490303f9626f92e787c567cd10feb$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/936_1.png b/public/images/pokemon/variant/exp/936_1.png deleted file mode 100644 index cdc333ab841b21058028e8a836f33995977f95d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9702 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�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�Ln!vwmj!c;J9Z&@hvd%mlD@71sOa2}$t8 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 P?}rLi)`XP2coq0Rl8OLl?o!;H;xzyF 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 IM6N<$f^uj+IsgCw diff --git a/public/images/pokemon/variant/exp/back/935_2.json b/public/images/pokemon/variant/exp/back/935_2.json deleted file mode 100644 index 44fc56f8621..00000000000 --- a/public/images/pokemon/variant/exp/back/935_2.json +++ /dev/null @@ -1,356 +0,0 @@ -{ - "textures": [ - { - "image": "935_2.png", - "format": "RGBA8888", - "size": { - "w": 133, - "h": 133 - }, - "scale": 1, - "frames": [ - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 29, - "h": 49 - }, - "frame": { - "x": 0, - "y": 0, - "w": 29, - "h": 49 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 29, - "h": 49 - }, - "frame": { - "x": 0, - "y": 0, - "w": 29, - "h": 49 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 29, - "h": 49 - }, - "frame": { - "x": 29, - "y": 0, - "w": 29, - "h": 49 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 29, - "h": 49 - }, - "frame": { - "x": 29, - "y": 0, - "w": 29, - "h": 49 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 28, - "h": 49 - }, - "frame": { - "x": 58, - "y": 0, - "w": 28, - "h": 49 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 28, - "h": 49 - }, - "frame": { - "x": 58, - "y": 0, - "w": 28, - "h": 49 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 28, - "h": 49 - }, - "frame": { - "x": 86, - "y": 0, - "w": 28, - "h": 49 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 28, - "h": 49 - }, - "frame": { - "x": 86, - "y": 0, - "w": 28, - "h": 49 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 28, - "h": 48 - }, - "frame": { - "x": 0, - "y": 49, - "w": 28, - "h": 48 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 28, - "h": 48 - }, - "frame": { - "x": 0, - "y": 49, - "w": 28, - "h": 48 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 27, - "h": 48 - }, - "frame": { - "x": 28, - "y": 49, - "w": 27, - "h": 48 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 27, - "h": 47 - }, - "frame": { - "x": 55, - "y": 49, - "w": 27, - "h": 47 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 27, - "h": 47 - }, - "frame": { - "x": 55, - "y": 49, - "w": 27, - "h": 47 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 26, - "h": 46 - }, - "frame": { - "x": 82, - "y": 49, - "w": 26, - "h": 46 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 26, - "h": 46 - }, - "frame": { - "x": 82, - "y": 49, - "w": 26, - "h": 46 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 25, - "h": 45 - }, - "frame": { - "x": 108, - "y": 49, - "w": 25, - "h": 45 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2880dad5e3c550bb25e02ab0ab8d58c8:9dc0340440df25f20b3f006422b7a238:077dcf06dc5fc347497b59afe6126a5e$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/935_2.png b/public/images/pokemon/variant/exp/back/935_2.png deleted file mode 100644 index 08789758184c7622b1b7d98c05c353d17b342574..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2286 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 IM6N<$f+V3p;{X5v diff --git a/public/images/pokemon/variant/exp/back/935_3.json b/public/images/pokemon/variant/exp/back/935_3.json deleted file mode 100644 index b2d13ca9909..00000000000 --- a/public/images/pokemon/variant/exp/back/935_3.json +++ /dev/null @@ -1,356 +0,0 @@ -{ - "textures": [ - { - "image": "935_3.png", - "format": "RGBA8888", - "size": { - "w": 133, - "h": 133 - }, - "scale": 1, - "frames": [ - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 29, - "h": 49 - }, - "frame": { - "x": 0, - "y": 0, - "w": 29, - "h": 49 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 29, - "h": 49 - }, - "frame": { - "x": 0, - "y": 0, - "w": 29, - "h": 49 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 29, - "h": 49 - }, - "frame": { - "x": 29, - "y": 0, - "w": 29, - "h": 49 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 29, - "h": 49 - }, - "frame": { - "x": 29, - "y": 0, - "w": 29, - "h": 49 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 28, - "h": 49 - }, - "frame": { - "x": 58, - "y": 0, - "w": 28, - "h": 49 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 28, - "h": 49 - }, - "frame": { - "x": 58, - "y": 0, - "w": 28, - "h": 49 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 28, - "h": 49 - }, - "frame": { - "x": 86, - "y": 0, - "w": 28, - "h": 49 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 28, - "h": 49 - }, - "frame": { - "x": 86, - "y": 0, - "w": 28, - "h": 49 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 28, - "h": 48 - }, - "frame": { - "x": 0, - "y": 49, - "w": 28, - "h": 48 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 28, - "h": 48 - }, - "frame": { - "x": 0, - "y": 49, - "w": 28, - "h": 48 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 27, - "h": 48 - }, - "frame": { - "x": 28, - "y": 49, - "w": 27, - "h": 48 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 27, - "h": 47 - }, - "frame": { - "x": 55, - "y": 49, - "w": 27, - "h": 47 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 27, - "h": 47 - }, - "frame": { - "x": 55, - "y": 49, - "w": 27, - "h": 47 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 26, - "h": 46 - }, - "frame": { - "x": 82, - "y": 49, - "w": 26, - "h": 46 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 26, - "h": 46 - }, - "frame": { - "x": 82, - "y": 49, - "w": 26, - "h": 46 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 49 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 25, - "h": 45 - }, - "frame": { - "x": 108, - "y": 49, - "w": 25, - "h": 45 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2880dad5e3c550bb25e02ab0ab8d58c8:9dc0340440df25f20b3f006422b7a238:077dcf06dc5fc347497b59afe6126a5e$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/935_3.png b/public/images/pokemon/variant/exp/back/935_3.png deleted file mode 100644 index e58a17ead33673ef4462511a57084d01bbc4c945..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2286 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 IM6N<$f?sMpu>b%7 diff --git a/public/images/pokemon/variant/exp/back/936_1.json b/public/images/pokemon/variant/exp/back/936_1.json deleted file mode 100644 index ca0f37cffb2..00000000000 --- a/public/images/pokemon/variant/exp/back/936_1.json +++ /dev/null @@ -1,356 +0,0 @@ -{ - "textures": [ - { - "image": "936_1.png", - "format": "RGBA8888", - "size": { - "w": 283, - "h": 283 - }, - "scale": 1, - "frames": [ - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 59, - "h": 97 - }, - "frame": { - "x": 0, - "y": 0, - "w": 59, - "h": 97 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 59, - "h": 97 - }, - "frame": { - "x": 0, - "y": 0, - "w": 59, - "h": 97 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 59, - "h": 97 - }, - "frame": { - "x": 0, - "y": 97, - "w": 59, - "h": 97 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 59, - "h": 97 - }, - "frame": { - "x": 0, - "y": 97, - "w": 59, - "h": 97 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 59, - "h": 97 - }, - "frame": { - "x": 59, - "y": 0, - "w": 59, - "h": 97 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 59, - "h": 97 - }, - "frame": { - "x": 59, - "y": 0, - "w": 59, - "h": 97 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 58, - "h": 97 - }, - "frame": { - "x": 59, - "y": 97, - "w": 58, - "h": 97 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 58, - "h": 97 - }, - "frame": { - "x": 59, - "y": 97, - "w": 58, - "h": 97 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 58, - "h": 97 - }, - "frame": { - "x": 117, - "y": 97, - "w": 58, - "h": 97 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 58, - "h": 97 - }, - "frame": { - "x": 117, - "y": 97, - "w": 58, - "h": 97 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 57, - "h": 96 - }, - "frame": { - "x": 118, - "y": 0, - "w": 57, - "h": 96 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 57, - "h": 96 - }, - "frame": { - "x": 118, - "y": 0, - "w": 57, - "h": 96 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 58, - "h": 95 - }, - "frame": { - "x": 175, - "y": 0, - "w": 58, - "h": 95 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 58, - "h": 95 - }, - "frame": { - "x": 175, - "y": 0, - "w": 58, - "h": 95 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 58, - "h": 94 - }, - "frame": { - "x": 175, - "y": 95, - "w": 58, - "h": 94 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 10, - "y": 3, - "w": 57, - "h": 94 - }, - "frame": { - "x": 175, - "y": 189, - "w": 57, - "h": 94 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:973448a7633a4dceb9828d95556ed3c2:09d8ad02433d8015e4665464587b1259:1a0490303f9626f92e787c567cd10feb$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/936_1.png b/public/images/pokemon/variant/exp/back/936_1.png deleted file mode 100644 index 154c4e8636400695b976460f152d4493dcfc03a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9722 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 IM6N<$f`JRTy8r+H diff --git a/public/images/pokemon/variant/exp/back/936_2.json b/public/images/pokemon/variant/exp/back/936_2.json deleted file mode 100644 index 282d9823ab7..00000000000 --- a/public/images/pokemon/variant/exp/back/936_2.json +++ /dev/null @@ -1,356 +0,0 @@ -{ - "textures": [ - { - "image": "936_2.png", - "format": "RGBA8888", - "size": { - "w": 283, - "h": 283 - }, - "scale": 1, - "frames": [ - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 59, - "h": 97 - }, - "frame": { - "x": 0, - "y": 0, - "w": 59, - "h": 97 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 59, - "h": 97 - }, - "frame": { - "x": 0, - "y": 0, - "w": 59, - "h": 97 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 59, - "h": 97 - }, - "frame": { - "x": 0, - "y": 97, - "w": 59, - "h": 97 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 59, - "h": 97 - }, - "frame": { - "x": 0, - "y": 97, - "w": 59, - "h": 97 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 59, - "h": 97 - }, - "frame": { - "x": 59, - "y": 0, - "w": 59, - "h": 97 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 59, - "h": 97 - }, - "frame": { - "x": 59, - "y": 0, - "w": 59, - "h": 97 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 58, - "h": 97 - }, - "frame": { - "x": 59, - "y": 97, - "w": 58, - "h": 97 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 58, - "h": 97 - }, - "frame": { - "x": 59, - "y": 97, - "w": 58, - "h": 97 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 58, - "h": 97 - }, - "frame": { - "x": 117, - "y": 97, - "w": 58, - "h": 97 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 58, - "h": 97 - }, - "frame": { - "x": 117, - "y": 97, - "w": 58, - "h": 97 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 57, - "h": 96 - }, - "frame": { - "x": 118, - "y": 0, - "w": 57, - "h": 96 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 57, - "h": 96 - }, - "frame": { - "x": 118, - "y": 0, - "w": 57, - "h": 96 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 58, - "h": 95 - }, - "frame": { - "x": 175, - "y": 0, - "w": 58, - "h": 95 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 58, - "h": 95 - }, - "frame": { - "x": 175, - "y": 0, - "w": 58, - "h": 95 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 58, - "h": 94 - }, - "frame": { - "x": 175, - "y": 95, - "w": 58, - "h": 94 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 10, - "y": 3, - "w": 57, - "h": 94 - }, - "frame": { - "x": 175, - "y": 189, - "w": 57, - "h": 94 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:973448a7633a4dceb9828d95556ed3c2:09d8ad02433d8015e4665464587b1259:1a0490303f9626f92e787c567cd10feb$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/936_2.png b/public/images/pokemon/variant/exp/back/936_2.png deleted file mode 100644 index 442abc72971e3dc9dda7496702ed9b7a5481e6be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9722 zcmVf6Xi@@54ZTQ_E-Enz5K6$1 z03tR-RB%L5k){YTDBysjLy@r}iiH7DvFijGMAUI`6dRUFWUU$Bym{}eS9UO(Z2>7`&z9wUXbV-Il z#&6`Y8GKGQ04S2&F6MJnWNa;Ck|;8QE#r9r;7G||@X{|>%+C|c55>;RS}qbKr-&IQ zTvLXPlM{>K&(BTgi^a?^4mXV>;xX8n8Ce|RasXz}{8imI52H3ZN4bf ze_i~WlJ|C&UW9+{8AKoW!}eExnGFE2re(F+`iE_46#!l90Z_aBhs|Iw0E)7{bq;-T z9=d#9QpDmcXDh4R++0fmpKB>E=%LdZt9g z$j;($`3&Zthxi`{{&gM}5&R^+h%b~yM9Zd3AWW9ETgVfL1(`yIK=_}U_z%PWq}jQa ziQ4!P(3V&Nr6C$XejWfQDiI(Fdt@un?|lo#M+5oIi_w{wo%_#%{(V=tO#a9gB!7-$ zM?^BX5>d|Vn*3S!?g~$*UQipUP zL&zMmg;!4Do9IA%up=Rh?=qPj=x&RGBx1dpI68aT- z2O}^EromdU5o`ssU{5#*j)WJ%$?!5bA1;Eoz?EiTr=n?cd`V|I)p<|3O zju?MT93~aB0<#&j8`F+Cg&D?-VWzQItUA^l>xvDRIYI4MQ`g1<+DyrL=EogS06Xii({|v`U^zjmmKqDIK93(F5q| z^fLNk`gQs{RV`IdRle#b)i%{Ds;|}NsClUI)k@Ub)kf6bsWa4l)YH_rsduU0(?DsM zX@qO!YV6TCtMPOWZH~(v?wpc2hv(eZgf-1HBQ#fN?$aF5oYvCT^3%%Fs?s{6^;Da# z?V+8jy+iwi_M{F~$4y6|vqR^k&SQoO!;_KDsATjprgSxR{dFa}^}2()GkV5)QF?`X z?Rxk03HmJkB>f%wz4}uIItC#I1qQ7Kw+-=zEW;GTU55RJuZ@h2VvIHzbs0S}Rx=JT z&Npr~zH34@aW`3J(qMAU6l2OVO*7qXdf5y%vo}jIt1%lghs_<#1?IcWhb_<+P8LFo z28$a^64R5J!)#@aTGB0pEekEXET35!SjAgyv+B3{Xl-wuZrx~o$A)4PXj5p@WAm%6 znJw40#`fA=@?77!tLJvleQsxN$G6*KchjC~A7a13zSsVPgQJ7Uq0M2^(ZDg$vDWbh zi^d9LZDyT!LOXdmt#&%*^w!zIS?qk+`4<X~g?%562@eae34a)26HyS+zks@6 z$%2*zuOhu7%OdYYnM6sVdZQJi6QY}=U&naIl*dS8tzuWkUW(I*6U24LW8oFzvR(TOpMEs5_rp_~TJ^wNN(wM(bC zZ0;`Z6P^ce2XB(^$}i_nB)KM)Cp}7bP2Qe7nc|*Ok@8f)7E}wKr~0SXrM^xJP1~RL zDLp2=Jp-4Km~m7{5vB?IGPN`FGKaIwvx>8%%bb_(Ts9>N5;bK**^9Ef#WdN^)PTf9 zvR*Qp{o-l7TcBI8wqSIn=gRt3(5j`Y zdRObOE?Pal#&6AmwS={4Ykw%TE-Wv6xh`g1Pmxy9nxe7we(PI{6^cd0H#WFzsN0Cz zDA+i-Y3`<~O&?2mB^OJrODjs>Z{}{k_?699m0x|@lC)*8%%N=0R?Jr6*6Z8cw;d=~ zF3&F?+a9vLa|dHb$&Qyhm+ZVyVOLSNi?B>BD~E ze(8aT1AWbo&CM;EEoH56tE6@EV8X%6-*|u1-NtOIZ>P7H9s-9XhaP{M`0e$>L5F*f zu#U8SXZT%h2eqT56Y5;vIn|ZYCGC#u9zGg)w718lr{jCe@An_mJyvsE<#^c%!il02 zpHAkVoIaIx>gnm^(__6$dheWxJ#(!uyl?Pq(Ao3ne9xWf_v}A;-u3*k3(gmgUSwVD zy5w-FbHIL};|Kd6ItCpEJBJ*Hx-UCj?irppeBz4xmD5+fub#UWaP88_{E^}7QP*$Y zNVp-r$-DXJR{E{yw{vdK+*xxMeYfPE(!GlNn)e%iH2tw%>L5Kn>ODH}V8MesW8ASP zKV|>)e!S=*`C-L`&P4Mg+egPHeJ3wJUif(YN!F8@r^P=j|6Kdbc>FRj6+1Ql zT=e|YubW?}zu5oM?q%!-fL_t(|ob8UP zv$Jg!iBCel#NnN$Yr*(~f zblc7AJla%jRW|)Y-?nYjWoi7h2HMPQw=re~M(h24kF+uNRr%NrOfJeCjv3m8X-0w5 z&rg$U8>X`Vy{<-{bypU| zG4{7IV=&R0x_r1ePyyCyS>f#3e12|RnzDwonq{@FyZvP6iSJR+KA=)3>a(!RwTu;g zx`~Flo-dEv{q}jgajTL@&7xZGRvS&M^@FBvTS$Xr3xD|nBM=3wK`Nn_;*n1u>HZGdy}B|~(~wsyY*}0Na_*7dZ?}4fmBXH%y0yRmyT#)ui7U*_ zv`DQB&7!fJ6>GEJO%8DZuQVACJcfIRe1^wm<3#o6{#2dvP_?Vn!gRQQY_ytX@{#8^ zC=HpR{oDEBhWtHPmOG|`nyZwedD;sODymjWmHVt5HW%i4K`ES{`CC;wz;2&jO`zH* zLYWyBX=4u^L{zJ&_c`yQChl{0?i@$C)NS?;Rdp(^G};-{ayzJ0_vbE7(WR>Ea3ofz z%`WadFU$2hR-6f>ao5uIi`c3f7Ua1&GmMG%I92Qwf(3!}hnm!4$914K7$mscFp~un zXq%v8u$QOXL0q`s3p_NHbC!404`LlwKGO6SQ@jS;0(IX1Zq)EpxWc z?Uh)Ts%qcT+4;e>86^$``M+gO+?ff2LurOVRVmUCsu-wZ+Gw4qniaKL6EyP9~pP2+AOi@?_*Oped9E;q^gP) zM>6^0Uhjhqr3%sxkOqQWl(LSPw?l1$s>`8iZ0l;q{hB*HR~6T>(Z(6VpVp8rtL}vr zq~8CgjH3_k?O+KLRclO@g4sDkv@A@BLRr1x$HzR||Lk=`o&Ndrr%RlWK@+9=;Nv%X zy9)KqR9%it`RZ5KAPs8sA*m`JZ&dJU4Q= z?iu^QqcTq-hB^zv8o06Fb8^gBkk7Tta!WWX*oPh6Xh=jnYh~N+4-?l%z~*? zRsB-e&?a0GiK(yeSewOqg}1lb>|V?Av5TUuG#cH~)#zT_r45PF2#-H7S%~MCo1k)+ zc~>7OB$1o`nFXi2F?VXD`K6?Six#7O4QS&P37Xl0!A!X1)62K~1g)ys zB;wk4y2jGjM(!kC6uIlZfRl zYa=-=$;ZOZ^SCzVHpODAa1UajHZ&8$3eHS$$p=b1<6P#nEFbVHQZ?XmUZ8O1{rs>^ znp~K4kQID9!EB(^b^%itdh#m&>cWDvFVmX(L~XEghOMdPXo7P*K}j1S&;=L2{fRY& z$l<4g)53yFwQ==3FSECA)FxyQqrBuYVP+FeFjDo<6zAzovF72I;uLWlg zILr33S$t*ND6j{RASy4os8jih3(6R2j5hscW1=K8G*MpC zZtRMbOa~^I$Qs)^wSuW%`)axJmnEuVKH`E43E{bfK(*Co|5?zqSsN4OOd}GsF)Mgx zYYI}B$a;yh2=z^p2z^nVX@mLT1xFJ?oGNbu+W5D_Cf;5+G)!`LILuJd;wH(DWWCsH zKb}Nh-&d68niz7YMAU^A97{;*)P81o34(QL!^_)*G|{^ek6fOv~fzd zk~Z|tgU;ncs&ku6)M7(%uy#y)YSo67x4J+CZhj_8SEcMa92ambD`*prJLZEXU*D0e ziJ{lj+#gp_&&VVMZ0Ygde45G^R{JeunnD##&*lCSiKB?EtPKXbCvoE9B-+3Vh&0tf z)A%?n)j1Q#=^TRYy6Z>7#KOg4Qx6L`nqMMoV(pWdtbN7I;`!M}sZ}N)G$B-1^a(LQ z<@9~d;9Zf~k?Glw{6iL4Z3`&H&BHQaC)b<(ZB%brr{S3G9XM&aw1EQz%RGzI&(BY=R2y7C z!8WS!tftv|JJH6f2ww4Xz`o~|R8-tkl6sg%JU=R{U~FbIPmn_4Sp!}+sZ%A?ThJ!h zLJObq(@y6{4bdizGFiWn{A7MA=*kZNK8aWI2tgcWP8-@Z(t1l0;t$oJ&g`npJ+;!U z&Hgs>^uqd0)XPl~1BE2oKxJ{bSHWo}A5lUST;}_$eO!U=VW93su?`SzkA1ZHwfAuHWqPji(p_4M|i&c{8uX z=^UKqTLvbCo)r75(opQ~k*=O+Yh!Kv^pf=}1ezGLK<62>*^=^(v(k431h}LhDHW;W%%UfmbSiQ+zTobQ}&m}C%UTvZ?fh6^`x23HuBkaQCOshLC zn;M_YYj8Oer!yW_Y9DnK{on(^QjL<{76*DPtdBFvAoE)3^GqA^ah>XWSRJ3y)EmES ziK9us+VXx~bPnpDZKv37>F- zeWW%UYD3bHE?=RwF=3?~DssOpZpGlW)@M|7_IlkN{%s#uNKGI*1+^+ zZM?9`WigzI!OiXyuQ{J5+H77MqYi#PgtxWEXoF#*e?C38EbxjmY5R&lWv?(!%waxI z?p5%4kryLsgI?9eo#{Av{LQAJ+IVT`^kDgh8$0n**3lF((DNi}ZYTKk7g~uuEp-)+ zSoW3iU4hPF-yHu3reh=Z%Qx>T5*7n3NFw!07RFMtFi1v%HvYZzrT^B1IC$!ln=@&c zOxVUGqEqJcR2w1<)kZ#-9x+1d)jU_$s1Rsb649yY8o}q0Q%p&!#51(92Q7%R&{cDw z)G7Kbb1FDckJ3g=eW|ZjZDObDQv4x7R+|Ti(^aFbNlg1`u}}BKyX~LX2EWZ%9ca5Y zcz%_*tokZ#;poyPjk74wcAxHe^*7drpUjRLLh6gtaFD~pINN=K2!HweV;rL^M@YRo zpB)J_&S62E?LNWf-^_)~SZ#!NRd`u&;;A`@a=BIc{2Q&~M-+~f`cg-74$rMcpJiJU z;Hxs){2keG#MBpRbDY9_m}7iCOPjx9oF|T&Q#i(F#_2e5M=ahSQq)o-q4-mN*?F&ROOUlh7FE5TB`a zFdtJmT}fbJW~_xU`w}0VCWrd5+LRRN={ZVm3di_7&}K}-Daic!`CDa}gM2<$8#(iN zM~z{2`Q#gP#UEegf7LKbW|wtTq)lpFQf>LkJx!a&*>#2aIG;b-9KA%HnOBUi0&PrT z-=a9yhP=T)tW7?J57h?Wp?`n*zQx;?!a|?9$(?EAo_85}1V7GvCeF4Lp7?}OaLJG@ ztuf;)^T%L}KPd{T1YC0k0MVxdY}q9ORtIhn%Y&$^ zw%qHdP=w5IE5kF$3bk1cW9M#pP!>LB%HURTB52FaqIo{KuZkJQ+B^)FXem-=ia;PM zg)B|33asH|v0mQrY%KyR$w0ko^ZzN7_rsQy<4CQm3zgw{3beUT7CxqRa- zOg9TIszAY6vYulP-i$J9O_)7ng_9Lsd(*-;a>zeHteu-${$N!qTpH4quh|z~M{pV9 zvDyMs{(Ehuz29;jb%cW}D4R99v39z9ghgaweUlu*7h7%c?z{Kn#WBOPd91%86Gtxd zZ3-TyF7!vIc*^uzy*4Hvj;`bxOXllE{;RNs-m3;aP#pZ74k+Q;HsuGA<~SV&b!SgF zks!^;T>69TB>qrsz+Ztj_M7hefFRvI2{lkRSikr^1lBmBm#!1Y6Jo{XZ?qxbFCWLB za$~};S!~4LsV(f>IMW7jQUH8#Qd%Ih$$cZl8on;!LXGfKW5hXzNEHIMET3tkMOP}0 z3N-`iNH<;++{I8Q9U+#+K$eanQU`(BnJq*cUvmZP5ep!g3F$u~EG7IYrp=(P(*cp1 za8JY~;d-6m$7U|6Fh#j-j+CUy4f>!t|(4d&ru73 z76C+xiBk&LnrO+DEJt6g-j1e&PMYkQNrDZ8B?6#fX09!@OA{vOAyNzlMIcgKodmEY z5Vmq9$BH#ZdQs+8v@+Dfg5_`?yAvtx09cp((gcVU1#GDRS>ibq09#WreJm>058~3G zi#+oRyGF{&Q3SD*5FsF3yKPJ#^CW>taln?pg5x=inLc&{5?cVi1Q^pTU5+9D)TIME zaU7TgXY!Dhg$?g;cEscBAdXN1k-EYLjU>)IU~92+^0j=h9HV08F2%O-$KzlU`cw?s z!0lNVU^{e4lR~750b8*)W|jT8v{9axg6M;B*s^qI$B+q{LqxMs(_oA1F|N2jGVx4s zNxFt-WXco_dSqSkaER9H;t6Z#tOT5_d_JTGkNld{G z^n(~n#Skf;LqxNLDI~n3V0pY6MfjM)_a&^HT(rRm_UYn`r8a45*<9!l09)5!Nf}E5 zVT&%t5^Zn`bPi{7hH12D<4HM#7)vsnYe{n`0k(oAp#jlJCaX~*vn{El7X(*%&Vu2oLL+N9)RIHIpcq;%2L5ovqi^J{q0-eWiV#ZR^ zCXNV^N&*dWF65|~0=6=1DyEO6#VU0T#iT(p7XdH9u9J#kgaS?>oLIG9Y)Z@`l>}M{ z*ealpkuFZtPYn@Wl!B{VCS#vDj8MYbXeyjY8^VGD#!?wz>yj|fQu^3ciN(s0ULMbr zoTLaiuvi>-MM$;jU@VEuBEr|wdB9c_rVEQnBhuh9fGy&4)2s}c&p09Bv&?0QF+%da z*a~rEo)h6~odUKL*>e=dQ5*)BtVVtiXFeT#jI=(|P!k>)V=OTY$$m^wop1($%@y&r z)CpiKqSiqA0e2_S;F2jS?lW+N$gPSw@=BzklpTkl!3`S+F_sp(U$jc&OaWVpgh;gU zCCAB3{4|VJYmyKFUbOg2cp9$65n|Yjf&8f)UrPoa**lla#U0{p%o__ zp#iKM#w<#-VH_cz!ioHbn1+JO)8LM2X`#2I>q6mYVPWrJg~}|9LxQZFzK7ishLjj* z4zR`fOsrKYrfI1*RzwaTqv9yoBs@q1R~|7F1o;J>PXcBER3XkoG>fba9&7-3#uj5j zlH)#);6?ltCX1j6;&f|cr^uS(%pqxq5Gfs0jaFlJF>;a|@fpF3>0cf|weUEFXKErG z(99~%o@m6KETc^hK9>9TkjlfkC@W{`#h)Ais7RcpfGtXNGY=l+wDC<&@EJftnU)c{ zKq#ApK{H^S0H|o3dXoWLDMiXJ##|F;O)lS1Gc6;$E72w}Xhv&;4=*O`*B4HbL-Gt; zT-;$XX7;d_Weo$@q^ONIPWe1=&ts@ITM=YQ&}K_4`C`lzPDUGnBqa3HU~EA<0VXs1 zyMY6>NoSabDQdH!Wt#iBq;8^G6&k9vM9|uvdn<&=7-bM!Jx&`xLkR{IAWIR`$L~YI zwV_QTb9`f|&p17pA8iBv2C==xT7U$p8GeTDnpSFz0kXscCQp(}^ScH}Vs1^j>BUYR zN$5v93I<}P~n=J-!2pBs5+H~({c`-YW&9J7eJO;094_l zXx}jkX>bk6C#Latwf;rOk`*!B;;c9eYXw(L-v+YeUdXk1EYvFpS%O1gf#<5xv3~jM z>cDJUd|grG6#97#q0vGy4H(%l&ppMR>hVyoWxJRGug9_2X@hAqajV@1ch z2--XtvQ!qO=!xb}rP>^~@Q!t{ZQ&IeZALYmf+(xNY*oy<1_o8wOXlI)G)H-&&B>vk zdadgjY#XBZK7IaIEu$bxahh4XDlS_??!QEvx+u?%ZY78QZf%msEQV@R6s6!PzZ6T> ze5=>#xNMm5_tz$U>n?5Fr#_qbG+gy)j8f;@R4tcntTxjykWjle{ug=HVWBpa>*7?K zVdK!#qquBm^EV|tfaRnd-3Y_12-EO8yv)^wxk`)pLs%4{`bdfi^qZ_x`-*SIFOa# z2_!+DA8~9yMj(WPtat>?!vGfFW~|VXErsA#%LIA#VT9Q=+V=l!414h-j@xiwZ`wf* zC@|+|RpHp;@l!W`Z2Cu>{9xFFpA$enxHexM%|9|`_|Ccgauy;C#(j(R8;?0`c@V%S zX8edlNF)IY^3#mnz&)fHOk|V382WZYh271n*pEzXJ zhTnwT!cvexwMbyE7am92SYC!@`>_38-$tAqheR)dB{EZKM!*2S$xuMR!)?b1ph0Gd zc^;;>EV zDN7_R8^2R*2Pg4+jT9ylZ=L6N!S+~)ce&Z6u0`75&Q|Wu;8zFzoWWTlZZo%-C9)vc zheD6uV3e>#DA;FNno)q?ZbT3gzhf21Vzw8(h?tc(7!hg1?+ zoi{ReEZOIh<*dB^a6<4M83{^cQxVwbowTvf@#Ajdu{MrCl;Nzr#qivNgb9J%G6}Qt z9wT7{(T`nVXTcP+@*X3r4VKB}B4AeDV$cn|?U`K7Twdt^80_f_H3w?S|jvmz)FktFh7 z18*BMbd5)e{AdFx5&C~$9o9cFI7#G396C5jqzWbS@*}!#sz8an{77!pyz4clFn+Yj z4+)p?a~WlaR5sg>Hf9JUk)N-K!)PXny!=Q>A~LJ#4M(0NGM23L9fw2`(LdUlaYzz* zZ*dMuB5z$dJtUDAA6>MJ7a!-^ysbFrB$4+moKup>`!1?JTE=US0&TW8Z8&`-k=Gu5 zB$1aMog|T$9-Xv|S03H8j29lyqX&JzF@Towx+84l_h3i=2P_no1fZ1vxc~qF07*qo IM6N<$f|Bp9B>(^b diff --git a/public/images/pokemon/variant/exp/back/936_3.json b/public/images/pokemon/variant/exp/back/936_3.json deleted file mode 100644 index 24eeb8e705e..00000000000 --- a/public/images/pokemon/variant/exp/back/936_3.json +++ /dev/null @@ -1,356 +0,0 @@ -{ - "textures": [ - { - "image": "936_3.png", - "format": "RGBA8888", - "size": { - "w": 283, - "h": 283 - }, - "scale": 1, - "frames": [ - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 59, - "h": 97 - }, - "frame": { - "x": 0, - "y": 0, - "w": 59, - "h": 97 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 59, - "h": 97 - }, - "frame": { - "x": 0, - "y": 0, - "w": 59, - "h": 97 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 59, - "h": 97 - }, - "frame": { - "x": 0, - "y": 97, - "w": 59, - "h": 97 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 59, - "h": 97 - }, - "frame": { - "x": 0, - "y": 97, - "w": 59, - "h": 97 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 59, - "h": 97 - }, - "frame": { - "x": 59, - "y": 0, - "w": 59, - "h": 97 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 59, - "h": 97 - }, - "frame": { - "x": 59, - "y": 0, - "w": 59, - "h": 97 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 58, - "h": 97 - }, - "frame": { - "x": 59, - "y": 97, - "w": 58, - "h": 97 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 58, - "h": 97 - }, - "frame": { - "x": 59, - "y": 97, - "w": 58, - "h": 97 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 58, - "h": 97 - }, - "frame": { - "x": 117, - "y": 97, - "w": 58, - "h": 97 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 58, - "h": 97 - }, - "frame": { - "x": 117, - "y": 97, - "w": 58, - "h": 97 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 57, - "h": 96 - }, - "frame": { - "x": 118, - "y": 0, - "w": 57, - "h": 96 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 57, - "h": 96 - }, - "frame": { - "x": 118, - "y": 0, - "w": 57, - "h": 96 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 58, - "h": 95 - }, - "frame": { - "x": 175, - "y": 0, - "w": 58, - "h": 95 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 58, - "h": 95 - }, - "frame": { - "x": 175, - "y": 0, - "w": 58, - "h": 95 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 58, - "h": 94 - }, - "frame": { - "x": 175, - "y": 95, - "w": 58, - "h": 94 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 97 - }, - "spriteSourceSize": { - "x": 10, - "y": 3, - "w": 57, - "h": 94 - }, - "frame": { - "x": 175, - "y": 189, - "w": 57, - "h": 94 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:973448a7633a4dceb9828d95556ed3c2:09d8ad02433d8015e4665464587b1259:1a0490303f9626f92e787c567cd10feb$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/936_3.png b/public/images/pokemon/variant/exp/back/936_3.png deleted file mode 100644 index db67191d73e4ac2cdf4a29633fc284ae56239ee9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9722 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 IM6N<$f)c)#bN~PV diff --git a/public/images/pokemon/variant/exp/back/937_1.json b/public/images/pokemon/variant/exp/back/937_1.json deleted file mode 100644 index f7f0201b676..00000000000 --- a/public/images/pokemon/variant/exp/back/937_1.json +++ /dev/null @@ -1,650 +0,0 @@ -{ - "textures": [ - { - "image": "937_1.png", - "format": "RGBA8888", - "size": { - "w": 382, - "h": 382 - }, - "scale": 1, - "frames": [ - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 91, - "h": 96 - }, - "frame": { - "x": 0, - "y": 0, - "w": 91, - "h": 96 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 91, - "h": 96 - }, - "frame": { - "x": 91, - "y": 0, - "w": 91, - "h": 96 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 90, - "h": 96 - }, - "frame": { - "x": 182, - "y": 0, - "w": 90, - "h": 96 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 90, - "h": 96 - }, - "frame": { - "x": 182, - "y": 0, - "w": 90, - "h": 96 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 89, - "h": 96 - }, - "frame": { - "x": 272, - "y": 0, - "w": 89, - "h": 96 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 89, - "h": 96 - }, - "frame": { - "x": 272, - "y": 0, - "w": 89, - "h": 96 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 91, - "h": 95 - }, - "frame": { - "x": 0, - "y": 96, - "w": 91, - "h": 95 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 91, - "h": 95 - }, - "frame": { - "x": 0, - "y": 96, - "w": 91, - "h": 95 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 89, - "h": 95 - }, - "frame": { - "x": 91, - "y": 96, - "w": 89, - "h": 95 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 89, - "h": 95 - }, - "frame": { - "x": 91, - "y": 96, - "w": 89, - "h": 95 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 88, - "h": 96 - }, - "frame": { - "x": 180, - "y": 96, - "w": 88, - "h": 96 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 88, - "h": 96 - }, - "frame": { - "x": 180, - "y": 96, - "w": 88, - "h": 96 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 88, - "h": 96 - }, - "frame": { - "x": 0, - "y": 191, - "w": 88, - "h": 96 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 88, - "h": 96 - }, - "frame": { - "x": 0, - "y": 191, - "w": 88, - "h": 96 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 88, - "h": 96 - }, - "frame": { - "x": 88, - "y": 191, - "w": 88, - "h": 96 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 88, - "h": 96 - }, - "frame": { - "x": 88, - "y": 191, - "w": 88, - "h": 96 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 87, - "h": 96 - }, - "frame": { - "x": 176, - "y": 192, - "w": 87, - "h": 96 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 87, - "h": 96 - }, - "frame": { - "x": 176, - "y": 192, - "w": 87, - "h": 96 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 85, - "h": 95 - }, - "frame": { - "x": 0, - "y": 287, - "w": 85, - "h": 95 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 85, - "h": 95 - }, - "frame": { - "x": 0, - "y": 287, - "w": 85, - "h": 95 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 85, - "h": 94 - }, - "frame": { - "x": 85, - "y": 287, - "w": 85, - "h": 94 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 85, - "h": 94 - }, - "frame": { - "x": 85, - "y": 287, - "w": 85, - "h": 94 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 82, - "h": 96 - }, - "frame": { - "x": 263, - "y": 192, - "w": 82, - "h": 96 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 82, - "h": 96 - }, - "frame": { - "x": 263, - "y": 192, - "w": 82, - "h": 96 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 85, - "h": 93 - }, - "frame": { - "x": 268, - "y": 96, - "w": 85, - "h": 93 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 85, - "h": 93 - }, - "frame": { - "x": 268, - "y": 96, - "w": 85, - "h": 93 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 81, - "h": 94 - }, - "frame": { - "x": 170, - "y": 288, - "w": 81, - "h": 94 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 81, - "h": 94 - }, - "frame": { - "x": 170, - "y": 288, - "w": 81, - "h": 94 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 80, - "h": 94 - }, - "frame": { - "x": 251, - "y": 288, - "w": 80, - "h": 94 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 80, - "h": 94 - }, - "frame": { - "x": 251, - "y": 288, - "w": 80, - "h": 94 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:25759b98c1f7867fe6c4ff54c797c3e2:0076c777d18a4f3d780937118dfb6388:1d4b4f8d62307c37457ba974879b47d0$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/937_1.png b/public/images/pokemon/variant/exp/back/937_1.png deleted file mode 100644 index 2d0d58b0912c94c4c2dd06c9c608eda45ec7d496..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18447 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 diff --git a/public/images/pokemon/variant/exp/back/937_2.json b/public/images/pokemon/variant/exp/back/937_2.json deleted file mode 100644 index cda51714b93..00000000000 --- a/public/images/pokemon/variant/exp/back/937_2.json +++ /dev/null @@ -1,650 +0,0 @@ -{ - "textures": [ - { - "image": "937_2.png", - "format": "RGBA8888", - "size": { - "w": 382, - "h": 382 - }, - "scale": 1, - "frames": [ - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 91, - "h": 96 - }, - "frame": { - "x": 0, - "y": 0, - "w": 91, - "h": 96 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 91, - "h": 96 - }, - "frame": { - "x": 91, - "y": 0, - "w": 91, - "h": 96 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 90, - "h": 96 - }, - "frame": { - "x": 182, - "y": 0, - "w": 90, - "h": 96 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 90, - "h": 96 - }, - "frame": { - "x": 182, - "y": 0, - "w": 90, - "h": 96 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 89, - "h": 96 - }, - "frame": { - "x": 272, - "y": 0, - "w": 89, - "h": 96 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 89, - "h": 96 - }, - "frame": { - "x": 272, - "y": 0, - "w": 89, - "h": 96 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 91, - "h": 95 - }, - "frame": { - "x": 0, - "y": 96, - "w": 91, - "h": 95 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 91, - "h": 95 - }, - "frame": { - "x": 0, - "y": 96, - "w": 91, - "h": 95 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 89, - "h": 95 - }, - "frame": { - "x": 91, - "y": 96, - "w": 89, - "h": 95 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 89, - "h": 95 - }, - "frame": { - "x": 91, - "y": 96, - "w": 89, - "h": 95 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 88, - "h": 96 - }, - "frame": { - "x": 180, - "y": 96, - "w": 88, - "h": 96 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 88, - "h": 96 - }, - "frame": { - "x": 180, - "y": 96, - "w": 88, - "h": 96 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 88, - "h": 96 - }, - "frame": { - "x": 0, - "y": 191, - "w": 88, - "h": 96 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 88, - "h": 96 - }, - "frame": { - "x": 0, - "y": 191, - "w": 88, - "h": 96 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 88, - "h": 96 - }, - "frame": { - "x": 88, - "y": 191, - "w": 88, - "h": 96 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 88, - "h": 96 - }, - "frame": { - "x": 88, - "y": 191, - "w": 88, - "h": 96 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 87, - "h": 96 - }, - "frame": { - "x": 176, - "y": 192, - "w": 87, - "h": 96 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 87, - "h": 96 - }, - "frame": { - "x": 176, - "y": 192, - "w": 87, - "h": 96 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 85, - "h": 95 - }, - "frame": { - "x": 0, - "y": 287, - "w": 85, - "h": 95 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 85, - "h": 95 - }, - "frame": { - "x": 0, - "y": 287, - "w": 85, - "h": 95 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 85, - "h": 94 - }, - "frame": { - "x": 85, - "y": 287, - "w": 85, - "h": 94 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 85, - "h": 94 - }, - "frame": { - "x": 85, - "y": 287, - "w": 85, - "h": 94 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 82, - "h": 96 - }, - "frame": { - "x": 263, - "y": 192, - "w": 82, - "h": 96 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 82, - "h": 96 - }, - "frame": { - "x": 263, - "y": 192, - "w": 82, - "h": 96 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 85, - "h": 93 - }, - "frame": { - "x": 268, - "y": 96, - "w": 85, - "h": 93 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 85, - "h": 93 - }, - "frame": { - "x": 268, - "y": 96, - "w": 85, - "h": 93 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 81, - "h": 94 - }, - "frame": { - "x": 170, - "y": 288, - "w": 81, - "h": 94 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 81, - "h": 94 - }, - "frame": { - "x": 170, - "y": 288, - "w": 81, - "h": 94 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 80, - "h": 94 - }, - "frame": { - "x": 251, - "y": 288, - "w": 80, - "h": 94 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 95, - "h": 97 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 80, - "h": 94 - }, - "frame": { - "x": 251, - "y": 288, - "w": 80, - "h": 94 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:25759b98c1f7867fe6c4ff54c797c3e2:0076c777d18a4f3d780937118dfb6388:1d4b4f8d62307c37457ba974879b47d0$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/937_2.png b/public/images/pokemon/variant/exp/back/937_2.png deleted file mode 100644 index 7ba1aa09b976f06083d44dc11786295e96eb7ecb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15851 zcmZ8oWmKC@(}n`2xVyGMaVTCi6nBcdwzyky0u*<5EAH;@+CuRHg%Df{1P>6Bm*@NW z%{lkkvpaL|%@?mITSO&CSS$NRvgnp%{8e{xUn~R=3`3J)q&^KyiG%suwv) zChglSoq)QEJZJSL(NFC5ojLq(RzkGZeM`g(x6Wa#4jlBPEq>FYf}BSA%8Lz* z@t?ffu%!*Zwd!hZHQAjlwynKoOB{%~A=0Th*6LMS)!J&j_l#=%RhBwX&R?napZ|BIc5zb)nTHF`pj|sA}XG%&Tkw7WU^bAcW=JHgt4<; zWCaK&GMm~4HzEIP2X?fEk-R1G>MFQupDO1;kt~kF`>k}@z@Tb@rqtdzbDQQ(Df95K z7e&Q~-S^N_##4J?V-wr+qO2zye75m<Y;j)MqTW{5`XFJB~ly;R1?3>hA^g1k?5DCZTq_(_yk5IC!x5H5A;(7^}kORku z<^n=;#|^?oRT4W6`&bQ~@qNGPsrMU-s8f2FtsmPBNbgHk3;0RfWOdlV?mGM0{@5yt z^grybxk7;QA}E09?qX|EfpVqJ7q2D`2Gd-BeyaM`wmxX}ts5{yZ>-q(}ix<^eEFyODcDsB}bCn|FiSUHTwE)NRlC$l_>W4yN0kK zkp;r#*Cm)=?1PJS2VX1`{RM*!LZtX+ogM!2Ul>M*>(bcKER!mY1^2uPgs(RiT&eL* z+WG_pb`gdonNO7b-2Z}e92rwhrA4^(3PVfXw*kEO>g@CsOX>`66bHmPmXEUEcq+

      ij_`qhqj`Bk${ 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 z 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 Hu0mjfNTKz+ From 4203513db2b736da3e44b5d2615ee15ab6aaade8 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Mon, 5 May 2025 19:49:59 -0500 Subject: [PATCH 119/262] [Bug] Ensure shiny and variant status respects illusion properly (#5784) Ensure shiny and variant status respects illusion properly --- src/system/pokemon-data.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index 248fe9cf513..8d4fd7c05df 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -91,8 +91,8 @@ export default class PokemonData { this.formIndex = Math.max(Math.min(source.formIndex, getPokemonSpecies(this.species).forms.length - 1), 0); this.abilityIndex = source.abilityIndex; this.passive = source.passive; - this.shiny = source.shiny; - this.variant = source.variant; + this.shiny = sourcePokemon?.summonData.illusion?.basePokemon.shiny ?? source.shiny; + this.variant = sourcePokemon?.summonData.illusion?.basePokemon.variant ?? source.variant; this.pokeball = source.pokeball ?? PokeballType.POKEBALL; this.level = source.level; this.exp = source.exp; From e677e2725ee5035c4d9d356292f398dbab1625e4 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Mon, 5 May 2025 19:52:03 -0500 Subject: [PATCH 120/262] Update locales --- public/locales | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/locales b/public/locales index a7036a07875..f4b8b7b737e 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit a7036a07875615674ea898d0fe3b182a1080af38 +Subproject commit f4b8b7b737e47eaf7e7231855d0b59f8c7c7c0f8 From 4f541a8dcebb642d67d0e40c9bd8efd52dd429f6 Mon Sep 17 00:00:00 2001 From: Lylian BALL <131535108+PyGaVS@users.noreply.github.com> Date: Tue, 6 May 2025 03:31:11 +0200 Subject: [PATCH 121/262] [Bug] Fix some moves using illusion type instead of real type (#5772) * fix revelation dance using the type of the illusion instead of the actual type * fix other move that might get the illusion type as well * fix other move that might get the illusion type as well * fix abilities that might get the illusion type as well * fix illusion icon in party ui handler * Fix TSDoc for `Pokemon#getTypes` * Remove now-unnecessary changes to `.getTypes()` calls Revert `overrides.ts` changes * Replace `|| false` with `!!` --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/battle-scene.ts | 17 ++++--- src/data/abilities/ability.ts | 3 +- src/field/pokemon.ts | 92 +++++++++++++++++++++-------------- src/modifier/modifier.ts | 2 +- src/ui/battle-info.ts | 4 +- 5 files changed, 69 insertions(+), 49 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index db036847994..39bd1dd64cf 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1046,31 +1046,32 @@ export default class BattleScene extends SceneBase { originX = 0.5, originY = 0.5, ignoreOverride = false, + useIllusion = false, ): Phaser.GameObjects.Container { const container = this.add.container(x, y); container.setName(`${pokemon.name}-icon`); - const icon = this.add.sprite(0, 0, pokemon.getIconAtlasKey(ignoreOverride)); + const icon = this.add.sprite(0, 0, pokemon.getIconAtlasKey(ignoreOverride, useIllusion)); icon.setName(`sprite-${pokemon.name}-icon`); - icon.setFrame(pokemon.getIconId(true)); + icon.setFrame(pokemon.getIconId(true, useIllusion)); // Temporary fix to show pokemon's default icon if variant icon doesn't exist - if (icon.frame.name !== pokemon.getIconId(true)) { + if (icon.frame.name !== pokemon.getIconId(true, useIllusion)) { console.log(`${pokemon.name}'s variant icon does not exist. Replacing with default.`); const temp = pokemon.shiny; pokemon.shiny = false; - icon.setTexture(pokemon.getIconAtlasKey(ignoreOverride)); - icon.setFrame(pokemon.getIconId(true)); + icon.setTexture(pokemon.getIconAtlasKey(ignoreOverride, useIllusion)); + icon.setFrame(pokemon.getIconId(true, useIllusion)); pokemon.shiny = temp; } icon.setOrigin(0.5, 0); container.add(icon); - if (pokemon.isFusion(true)) { - const fusionIcon = this.add.sprite(0, 0, pokemon.getFusionIconAtlasKey(ignoreOverride)); + if (pokemon.isFusion(useIllusion)) { + const fusionIcon = this.add.sprite(0, 0, pokemon.getFusionIconAtlasKey(ignoreOverride, useIllusion)); fusionIcon.setName("sprite-fusion-icon"); fusionIcon.setOrigin(0.5, 0); - fusionIcon.setFrame(pokemon.getFusionIconId(true)); + fusionIcon.setFrame(pokemon.getFusionIconId(true, useIllusion)); const originalWidth = icon.width; const originalHeight = icon.height; diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 705de6f242d..4609ff6ec1a 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -43,10 +43,9 @@ import { PokemonTransformPhase } from "#app/phases/pokemon-transform-phase"; import { allAbilities } from "#app/data/data-lists"; import { AbAttr } from "#app/data/abilities/ab-attrs/ab-attr"; import { Ability } from "#app/data/abilities/ability-class"; -import { TrainerVariant } from "#app/field/trainer"; // Enum imports -import { Stat, type BattleStat , BATTLE_STATS, EFFECTIVE_STATS, getStatKey, type EffectiveStat } from "#enums/stat"; +import { Stat, type BattleStat, BATTLE_STATS, EFFECTIVE_STATS, getStatKey, type EffectiveStat } from "#enums/stat"; import { PokemonType } from "#enums/pokemon-type"; import { PokemonAnimType } from "#enums/pokemon-anim-type"; import { StatusEffect } from "#enums/status-effect"; diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 5615f3844bd..13eb2990a17 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1115,40 +1115,45 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ); } - getIconAtlasKey(ignoreOverride?: boolean): string { - const formIndex = this.summonData.illusion?.formIndex ?? this.formIndex; - return this.getSpeciesForm(ignoreOverride, true).getIconAtlasKey( + getIconAtlasKey(ignoreOverride?: boolean, useIllusion: boolean = true): string { + const formIndex = useIllusion && this.summonData.illusion?.formIndex ? this.summonData.illusion?.formIndex : this.formIndex; + const variant = !useIllusion && !!this.summonData.illusion ? this.summonData.illusion?.basePokemon.variant : this.variant; + return this.getSpeciesForm(ignoreOverride, useIllusion).getIconAtlasKey( formIndex, - this.shiny, - this.variant + this.isBaseShiny(useIllusion), + variant ); } - getFusionIconAtlasKey(ignoreOverride?: boolean): string { - return this.getFusionSpeciesForm(ignoreOverride, true).getIconAtlasKey( - this.fusionFormIndex, - this.fusionShiny, - this.fusionVariant - ); - } - - getIconId(ignoreOverride?: boolean): string { - const formIndex = this.summonData.illusion?.formIndex ?? this.formIndex; - return this.getSpeciesForm(ignoreOverride, true).getIconId( - this.getGender(ignoreOverride, true) === Gender.FEMALE, - formIndex, - this.shiny, - this.variant - ); - } - - getFusionIconId(ignoreOverride?: boolean): string { - const fusionFormIndex = this.summonData.illusion?.fusionFormIndex ?? this.fusionFormIndex; - return this.getFusionSpeciesForm(ignoreOverride, true).getIconId( - this.getFusionGender(ignoreOverride, true) === Gender.FEMALE, + getFusionIconAtlasKey(ignoreOverride?: boolean, useIllusion: boolean = true): string { + const fusionFormIndex = useIllusion && this.summonData.illusion?.fusionFormIndex ? this.summonData.illusion?.fusionFormIndex : this.fusionFormIndex; + const fusionVariant = !useIllusion && !!this.summonData.illusion ? this.summonData.illusion?.basePokemon.fusionVariant : this.fusionVariant; + return this.getFusionSpeciesForm(ignoreOverride, useIllusion).getIconAtlasKey( fusionFormIndex, - this.fusionShiny, - this.fusionVariant + this.isFusionShiny(), + fusionVariant + ); + } + + getIconId(ignoreOverride?: boolean, useIllusion: boolean = true): string { + const formIndex = useIllusion && this.summonData.illusion?.formIndex ? this.summonData.illusion?.formIndex : this.formIndex; + const variant = !useIllusion && !!this.summonData.illusion ? this.summonData.illusion?.basePokemon.variant : this.variant; + return this.getSpeciesForm(ignoreOverride, useIllusion).getIconId( + this.getGender(ignoreOverride, useIllusion) === Gender.FEMALE, + formIndex, + this.isBaseShiny(), + variant + ); + } + + getFusionIconId(ignoreOverride?: boolean, useIllusion: boolean = true): string { + const fusionFormIndex = useIllusion && this.summonData.illusion?.fusionFormIndex ? this.summonData.illusion?.fusionFormIndex : this.fusionFormIndex; + const fusionVariant = !useIllusion && !!this.summonData.illusion ? this.summonData.illusion?.basePokemon.fusionVariant : this.fusionVariant; + return this.getFusionSpeciesForm(ignoreOverride, useIllusion).getIconId( + this.getFusionGender(ignoreOverride, useIllusion) === Gender.FEMALE, + fusionFormIndex, + this.isFusionShiny(), + fusionVariant ); } @@ -1885,6 +1890,22 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } + isBaseShiny(useIllusion: boolean = false){ + if (!useIllusion && this.summonData.illusion) { + return !!this.summonData.illusion.basePokemon?.shiny; + } else { + return this.shiny; + } + } + + isFusionShiny(useIllusion: boolean = false){ + if (!useIllusion && this.summonData.illusion) { + return !!this.summonData.illusion.basePokemon?.fusionShiny; + } else { + return this.isFusion(useIllusion) && this.fusionShiny; + } + } + /** * * @param useIllusion - Whether we want the fake or real shininess (illusion ability). @@ -2053,14 +2074,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param includeTeraType - `true` to include tera-formed type; Default: `false` * @param forDefend - `true` if the pokemon is defending from an attack; Default: `false` * @param ignoreOverride - If `true`, ignore ability changing effects; Default: `false` - * @param useIllusion - `true` to return the types of the illusion instead of the actual types; "AUTO" will depend on forDefend param; Default: "AUTO" + * @param useIllusion - `true` to return the types of the illusion instead of the actual types; Default: `false` * @returns array of {@linkcode PokemonType} */ public getTypes( includeTeraType = false, forDefend: boolean = false, - ignoreOverride?: boolean, - useIllusion: boolean | "AUTO" = "AUTO" + ignoreOverride: boolean = false, + useIllusion: boolean = false ): PokemonType[] { const types: PokemonType[] = []; @@ -2076,17 +2097,16 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } if (!types.length || !includeTeraType) { - const doIllusion: boolean = (useIllusion === "AUTO") ? !forDefend : useIllusion; if ( !ignoreOverride && this.summonData.types && this.summonData.types.length > 0 && - (!this.summonData.illusion || !doIllusion) + (!this.summonData.illusion || !useIllusion) ) { this.summonData.types.forEach(t => types.push(t)); } else { - const speciesForm = this.getSpeciesForm(ignoreOverride, doIllusion); - const fusionSpeciesForm = this.getFusionSpeciesForm(ignoreOverride, doIllusion); + const speciesForm = this.getSpeciesForm(ignoreOverride, useIllusion); + const fusionSpeciesForm = this.getFusionSpeciesForm(ignoreOverride, useIllusion); const customTypes = this.customPokemonData.types?.length > 0; // First type, checking for "permanently changed" types from ME diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 9df7aa7813f..763b40c8555 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -710,7 +710,7 @@ export abstract class PokemonHeldItemModifier extends PersistentModifier { if (!forSummary) { const pokemon = this.getPokemon(); if (pokemon) { - const pokemonIcon = globalScene.addPokemonIcon(pokemon, -2, 10, 0, 0.5); + const pokemonIcon = globalScene.addPokemonIcon(pokemon, -2, 10, 0, 0.5, undefined, true); container.add(pokemonIcon); container.setName(pokemon.id.toString()); } diff --git a/src/ui/battle-info.ts b/src/ui/battle-info.ts index 839f0d62819..2822e8364ec 100644 --- a/src/ui/battle-info.ts +++ b/src/ui/battle-info.ts @@ -465,7 +465,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.shinyIcon.setVisible(pokemon.isShiny()); - const types = pokemon.getTypes(true); + const types = pokemon.getTypes(true, false, undefined, true); this.type1Icon.setTexture(`pbinfo_${this.player ? "player" : "enemy"}_type${types.length > 1 ? "1" : ""}`); this.type1Icon.setFrame(PokemonType[types[0]].toLowerCase()); this.type2Icon.setVisible(types.length > 1); @@ -685,7 +685,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.statusIndicator.setVisible(!!this.lastStatus); } - const types = pokemon.getTypes(true); + const types = pokemon.getTypes(true, false, undefined, true); this.type1Icon.setTexture(`pbinfo_${this.player ? "player" : "enemy"}_type${types.length > 1 ? "1" : ""}`); this.type1Icon.setFrame(PokemonType[types[0]].toLowerCase()); this.type2Icon.setVisible(types.length > 1); From 4aa0eac5aadc133796d6d9d6c911095653228560 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Tue, 6 May 2025 04:33:10 -0700 Subject: [PATCH 122/262] Update version to 1.9.2 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9d9b7638997..da89f87b0bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pokemon-rogue-battle", - "version": "1.9.1", + "version": "1.9.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pokemon-rogue-battle", - "version": "1.9.1", + "version": "1.9.2", "hasInstallScript": true, "dependencies": { "@material/material-color-utilities": "^0.2.7", diff --git a/package.json b/package.json index 6bde0af2fa5..d5eb1138776 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.9.1", + "version": "1.9.2", "type": "module", "scripts": { "start": "vite", From 5ba294ffee839e06146269de3d7849b0ea8c38be Mon Sep 17 00:00:00 2001 From: lxy-lxy-lxy <55084073+lxy-lxy-lxy@users.noreply.github.com> Date: Wed, 7 May 2025 23:05:32 +0800 Subject: [PATCH 123/262] [Bug] Lock Capsule not locking rarities consistently (#5786) --- src/modifier/modifier-type.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 8bd2dc8948a..608eca1157e 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -3640,7 +3640,7 @@ function getNewModifierTypeOption( } tier += upgradeCount; } - } else if (retryCount === 10 && tier) { + } else if (retryCount >= 100 && tier) { retryCount = 0; tier--; } From fa6c51d1e2c07be50c4017896bb0008192f7af81 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Wed, 7 May 2025 21:01:54 -0700 Subject: [PATCH 124/262] [Bug] Prevent some corrupt eggs from crashing the game (#5787) If an egg is somehow a species that doesn't have an associated egg tier (such as Pikachu), `Egg#getEggTier` now falls back to `EggTier.COMMON` --- src/data/egg.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/egg.ts b/src/data/egg.ts index 55a253e843f..0b7733bf199 100644 --- a/src/data/egg.ts +++ b/src/data/egg.ts @@ -598,7 +598,7 @@ export class Egg { } private getEggTier(): EggTier { - return speciesEggTiers[this.species]; + return speciesEggTiers[this.species] ?? EggTier.COMMON; } //// From cf1367cece5f09545be69c9efea8d75069edb47c Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Wed, 7 May 2025 21:02:16 -0700 Subject: [PATCH 125/262] [Bug] `PokemonSummonData` movesets will now be loaded correctly (#5793) --- src/field/pokemon.ts | 5 +++++ src/system/version_migration/versions/v1_9_0.ts | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 13eb2990a17..a7db6ddcdf3 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -7859,6 +7859,11 @@ export class PokemonSummonData { continue; } + if (key === "moveset") { + this.moveset = value.map((m: any) => PokemonMove.loadMove(m)); + continue; + } + if (key === "tags") { // load battler tags this.tags = value.map((t: BattlerTag) => loadBattlerTag(t)); diff --git a/src/system/version_migration/versions/v1_9_0.ts b/src/system/version_migration/versions/v1_9_0.ts index dca92cd1fae..c517896cf45 100644 --- a/src/system/version_migration/versions/v1_9_0.ts +++ b/src/system/version_migration/versions/v1_9_0.ts @@ -1,5 +1,4 @@ import type { SessionSaveMigrator } from "#app/@types/SessionSaveMigrator"; -import { Status } from "#app/data/status-effect"; import { PokemonMove } from "#app/field/pokemon"; import type { SessionSaveData } from "#app/system/game-data"; import type PokemonData from "#app/system/pokemon-data"; From 530b2b8a006e75e10413ecc9e42ac257dbe8acdf Mon Sep 17 00:00:00 2001 From: Jimmybald1 <122436263+Jimmybald1@users.noreply.github.com> Date: Thu, 8 May 2025 06:03:22 +0200 Subject: [PATCH 126/262] [Bug] Fix seed not being reset in Select Biome Phase (#5794) Fix seed not being reset now that Select Biome Phase goes before New Battle Co-authored-by: Jimmybald1 <147992650+IBBCalc@users.noreply.github.com> --- src/phases/select-biome-phase.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/phases/select-biome-phase.ts b/src/phases/select-biome-phase.ts index 4811c4e6b8f..efd376eb5ba 100644 --- a/src/phases/select-biome-phase.ts +++ b/src/phases/select-biome-phase.ts @@ -13,6 +13,8 @@ export class SelectBiomePhase extends BattlePhase { start() { super.start(); + globalScene.resetSeed(); + const currentBiome = globalScene.arena.biomeType; const nextWaveIndex = globalScene.currentBattle.waveIndex + 1; From 5a58abfddf65cf21f67db6b28befe122f38ef522 Mon Sep 17 00:00:00 2001 From: Dean <69436131+emdeann@users.noreply.github.com> Date: Wed, 7 May 2025 21:04:24 -0700 Subject: [PATCH 127/262] [Bug][Hotfix] Suppress Illusion if NG is already active (#5797) * Suppress preSummon attrs off field * Add test case --- src/field/pokemon.ts | 4 +++- test/abilities/illusion.test.ts | 16 +++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index a7db6ddcdf3..6a05bea4c6d 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -186,6 +186,7 @@ import { applyAllyStatMultiplierAbAttrs, AllyStatMultiplierAbAttr, MoveAbilityBypassAbAttr, + PreSummonAbAttr, } from "#app/data/abilities/ability"; import { allAbilities } from "#app/data/data-lists"; import type PokemonData from "#app/system/pokemon-data"; @@ -2414,8 +2415,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const suppressAbilitiesTag = arena.getTag( ArenaTagType.NEUTRALIZING_GAS, ) as SuppressAbilitiesTag; + const suppressOffField = ability.hasAttr(PreSummonAbAttr); if ( - this.isOnField() && + (this.isOnField() || suppressOffField) && suppressAbilitiesTag && !suppressAbilitiesTag.isBeingRemoved() ) { diff --git a/test/abilities/illusion.test.ts b/test/abilities/illusion.test.ts index 998d29f169c..8aae433b6c0 100644 --- a/test/abilities/illusion.test.ts +++ b/test/abilities/illusion.test.ts @@ -65,7 +65,7 @@ describe("Abilities - Illusion", () => { expect(!!zorua.summonData.illusion).equals(false); }); - it("break with neutralizing gas", async () => { + it("breaks with neutralizing gas", async () => { game.override.enemyAbility(Abilities.NEUTRALIZING_GAS); await game.classicMode.startBattle([Species.KOFFING]); @@ -74,6 +74,20 @@ describe("Abilities - Illusion", () => { expect(!!zorua.summonData.illusion).equals(false); }); + it("does not activate if neutralizing gas is active", async () => { + game.override + .enemyAbility(Abilities.NEUTRALIZING_GAS) + .ability(Abilities.ILLUSION) + .moveset(Moves.SPLASH) + .enemyMoveset(Moves.SPLASH); + await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS, Species.MAGIKARP]); + + game.doSwitchPokemon(1); + await game.toNextTurn(); + + expect(game.scene.getPlayerPokemon()!.summonData.illusion).toBeFalsy(); + }); + it("causes enemy AI to consider the illusion's type instead of the actual type when considering move effectiveness", async () => { game.override.enemyMoveset([Moves.FLAMETHROWER, Moves.PSYCHIC, Moves.TACKLE]); await game.classicMode.startBattle([Species.ZOROARK, Species.FEEBAS]); From b183f26330831ca4668a7024eb631da6be7d5307 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Fri, 9 May 2025 00:16:06 -0700 Subject: [PATCH 128/262] Update version to 1.9.3 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index da89f87b0bd..02a5d375588 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pokemon-rogue-battle", - "version": "1.9.2", + "version": "1.9.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pokemon-rogue-battle", - "version": "1.9.2", + "version": "1.9.3", "hasInstallScript": true, "dependencies": { "@material/material-color-utilities": "^0.2.7", diff --git a/package.json b/package.json index d5eb1138776..715deefbe32 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.9.2", + "version": "1.9.3", "type": "module", "scripts": { "start": "vite", From 0712f86462fde33333f84024988fd11521724046 Mon Sep 17 00:00:00 2001 From: Dean <69436131+emdeann@users.noreply.github.com> Date: Fri, 9 May 2025 01:34:28 -0700 Subject: [PATCH 129/262] [Bug][Hotfix] Fix crashes when loading save with a transformed pokemon (#5806) * Fix speciesForm being saved incorrectly * Fix transformed icon * Fix moveset loading errors --- src/battle-scene.ts | 8 ++++---- src/field/pokemon.ts | 2 +- src/system/pokemon-data.ts | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 39bd1dd64cf..9f70b33b296 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1045,7 +1045,7 @@ export default class BattleScene extends SceneBase { y: number, originX = 0.5, originY = 0.5, - ignoreOverride = false, + ignoreOverride = true, useIllusion = false, ): Phaser.GameObjects.Container { const container = this.add.container(x, y); @@ -1053,9 +1053,9 @@ export default class BattleScene extends SceneBase { const icon = this.add.sprite(0, 0, pokemon.getIconAtlasKey(ignoreOverride, useIllusion)); icon.setName(`sprite-${pokemon.name}-icon`); - icon.setFrame(pokemon.getIconId(true, useIllusion)); + icon.setFrame(pokemon.getIconId(ignoreOverride, useIllusion)); // Temporary fix to show pokemon's default icon if variant icon doesn't exist - if (icon.frame.name !== pokemon.getIconId(true, useIllusion)) { + if (icon.frame.name !== pokemon.getIconId(ignoreOverride, useIllusion)) { console.log(`${pokemon.name}'s variant icon does not exist. Replacing with default.`); const temp = pokemon.shiny; pokemon.shiny = false; @@ -1071,7 +1071,7 @@ export default class BattleScene extends SceneBase { const fusionIcon = this.add.sprite(0, 0, pokemon.getFusionIconAtlasKey(ignoreOverride, useIllusion)); fusionIcon.setName("sprite-fusion-icon"); fusionIcon.setOrigin(0.5, 0); - fusionIcon.setFrame(pokemon.getFusionIconId(true, useIllusion)); + fusionIcon.setFrame(pokemon.getFusionIconId(ignoreOverride, useIllusion)); const originalWidth = icon.width; const originalHeight = icon.height; diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 6a05bea4c6d..43669c874a9 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -7862,7 +7862,7 @@ export class PokemonSummonData { } if (key === "moveset") { - this.moveset = value.map((m: any) => PokemonMove.loadMove(m)); + this.moveset = value?.map((m: any) => PokemonMove.loadMove(m)); continue; } diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index 8d4fd7c05df..00169678ed0 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -188,7 +188,7 @@ export default class PokemonData { // when loading from saved session, recover summonData.speciesFrom and form index species object // used to stay transformed on reload session if (this.summonData.speciesForm) { - this.summonData.speciesForm = getPokemonSpeciesForm( + ret.summonData.speciesForm = getPokemonSpeciesForm( this.summonData.speciesForm.speciesId, this.summonDataSpeciesFormIndex, ); From 09e38bad39d33f21eeec6f95c944a4c31dc7a13f Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Sat, 10 May 2025 19:05:18 -0500 Subject: [PATCH 130/262] Set lastHit to true when target faints during multi-hit move --- src/phases/move-effect-phase.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index c65e8e15271..462e4ba47b8 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -905,6 +905,14 @@ export class MoveEffectPhase extends PokemonPhase { target.destroySubstitute(); target.lapseTag(BattlerTagType.COMMANDED); + + // Force `lastHit` to be true if this is a multi hit move with hits left + // `hitsLeft` must be left as-is in order for the message displaying the number of hits + // to display the proper number. + // Note: When Dragon Darts' smart targeting is implemented, this logic may need to be adjusted. + if (!this.lastHit && user.turnData.hitsLeft > 1) { + this.lastHit = true; + } } /** From 6c6821b47d96df23a6b71f508e1a810a70d4b1ec Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Sun, 11 May 2025 20:10:19 -0500 Subject: [PATCH 131/262] [Bug] [Move] Fix KO causing effects to occur twice (#5811) * Fix firstTarget calculation when a target was fainted * Update type annotation in applyMoveEffects Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/phases/move-effect-phase.ts | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index 462e4ba47b8..d067807486d 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -206,11 +206,13 @@ export class MoveEffectPhase extends PokemonPhase { * @throws Error if there was an unexpected hit check result */ private applyToTargets(user: Pokemon, targets: Pokemon[]): void { + let firstHit = true; for (const [i, target] of targets.entries()) { const [hitCheckResult, effectiveness] = this.hitChecks[i]; switch (hitCheckResult) { case HitCheckResult.HIT: - this.applyMoveEffects(target, effectiveness); + this.applyMoveEffects(target, effectiveness, firstHit); + firstHit = false; if (isFieldTargeted(this.move)) { // Stop processing other targets if the move is a field move return; @@ -763,15 +765,12 @@ export class MoveEffectPhase extends PokemonPhase { * - Invoking {@linkcode applyOnTargetEffects} if the move does not hit a substitute * - Triggering form changes and emergency exit / wimp out if this is the last hit * - * @param target the {@linkcode Pokemon} hit by this phase's move. - * @param effectiveness the effectiveness of the move (as previously evaluated in {@linkcode hitCheck}) + * @param target - the {@linkcode Pokemon} hit by this phase's move. + * @param effectiveness - The effectiveness of the move (as previously evaluated in {@linkcode hitCheck}) + * @param firstTarget - Whether this is the first target successfully struck by the move */ - protected applyMoveEffects(target: Pokemon, effectiveness: TypeDamageMultiplier): void { + protected applyMoveEffects(target: Pokemon, effectiveness: TypeDamageMultiplier, firstTarget: boolean): void { const user = this.getUserPokemon(); - - /** The first target hit by the move */ - const firstTarget = target === this.getTargets().find((_, i) => this.hitChecks[i][1] > 0); - if (isNullOrUndefined(user)) { return; } From d790b30a30f26fd9a31af96b4b84c83d7b61151a Mon Sep 17 00:00:00 2001 From: Dean <69436131+emdeann@users.noreply.github.com> Date: Sun, 11 May 2025 18:23:37 -0700 Subject: [PATCH 132/262] [Bug][Hotfix] Fix Transformed Sprites not loading properly (#5808) * Fix ditto sprite not loading properly * Remove review comment --- src/field/pokemon.ts | 17 ++++++++++------- src/system/game-data.ts | 2 +- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 43669c874a9..eec20beb01c 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -909,19 +909,22 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const originalWarn = console.warn; // Ignore warnings for missing frames, because there will be a lot console.warn = () => {}; - const battleFrameNames = globalScene.anims.generateFrameNames(this.getBattleSpriteKey(), { + const battleSpriteKey = this.getBattleSpriteKey(this.isPlayer(), ignoreOverride); + const battleFrameNames = globalScene.anims.generateFrameNames(battleSpriteKey, { zeroPad: 4, suffix: ".png", start: 1, end: 400, }); console.warn = originalWarn; - globalScene.anims.create({ - key: this.getBattleSpriteKey(), - frames: battleFrameNames, - frameRate: 10, - repeat: -1, - }); + if (!globalScene.anims.exists(battleSpriteKey)) { + globalScene.anims.create({ + key: battleSpriteKey, + frames: battleFrameNames, + frameRate: 10, + repeat: -1, + }); + } } // With everything loaded, now begin playing the animation. this.playAnim(); diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 51e488210be..0c5e0b349ed 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -1110,7 +1110,7 @@ export class GameData { for (const p of sessionData.party) { const pokemon = p.toPokemon() as PlayerPokemon; pokemon.setVisible(false); - loadPokemonAssets.push(pokemon.loadAssets()); + loadPokemonAssets.push(pokemon.loadAssets(false)); party.push(pokemon); } From 9b1a222935a032a65432103c8875c46439b6a3e9 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Mon, 12 May 2025 15:33:52 -0500 Subject: [PATCH 133/262] [Bug] Fix old session load modifier crash (#5814) Fix inability to load saves due to modifier type being nulled --- src/battle-scene.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 9f70b33b296..5835ee08af5 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -2921,7 +2921,10 @@ export default class BattleScene extends SceneBase { instant?: boolean, cost?: number, ): boolean { - if (!modifier) { + // We check against modifier.type to stop a bug related to loading in a pokemon that has a form change item, which prior to some patch + // that changed form change modifiers worked, had previously set the `type` field to null. + // TODO: This is not the right place to check for this; it should ideally go in a session migrator. + if (!modifier || !modifier.type) { return false; } let success = false; From 30ba53894ec6de86e7373803852ed26047db052a Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Mon, 12 May 2025 17:58:28 -0700 Subject: [PATCH 134/262] [i18n] Update locales --- public/locales | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/locales b/public/locales index f4b8b7b737e..ee6bb371afe 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit f4b8b7b737e47eaf7e7231855d0b59f8c7c7c0f8 +Subproject commit ee6bb371afefe4c6d872cc7765f0e0d26e630d4e From 84192cd3230be998c1e4a1b2620993545144dcc9 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Thu, 15 May 2025 14:51:16 -0700 Subject: [PATCH 135/262] Update version to 1.9.4 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 02a5d375588..66400b14459 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pokemon-rogue-battle", - "version": "1.9.3", + "version": "1.9.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pokemon-rogue-battle", - "version": "1.9.3", + "version": "1.9.4", "hasInstallScript": true, "dependencies": { "@material/material-color-utilities": "^0.2.7", diff --git a/package.json b/package.json index 715deefbe32..7d1ba35154a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.9.3", + "version": "1.9.4", "type": "module", "scripts": { "start": "vite", From 0c48fff14bbca1628134934b1e1b9c4e078d0997 Mon Sep 17 00:00:00 2001 From: Dean <69436131+emdeann@users.noreply.github.com> Date: Sat, 17 May 2025 08:35:38 -0700 Subject: [PATCH 136/262] [Bug] Fix Substitute sprite crash & revived Pokemon softlock (#5829) Break `resetSummonData` into two methods Co-authored-by: damocleas Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com> Co-authored-by: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Co-authored-by: lxy-lxy-lxy <55084073+lxy-lxy-lxy@users.noreply.github.com> Co-authored-by: Xavion3 Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Co-authored-by: Lylian BALL <131535108+PyGaVS@users.noreply.github.com> --- src/field/pokemon.ts | 32 ++++++++++++++++++++----------- src/phases/encounter-phase.ts | 2 +- src/phases/summon-phase.ts | 2 ++ src/phases/switch-summon-phase.ts | 2 +- 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index eec20beb01c..983494b36c8 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -5721,17 +5721,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } /** - * Reset this Pokemon's {@linkcode PokemonSummonData | SummonData} and {@linkcode PokemonTempSummonData | TempSummonData} - * in preparation for switching pokemon, as well as removing any relevant on-switch tags. + * Performs miscellaneous setup for when the Pokemon is summoned, like generating the substitute sprite + * @param resetSummonData - Whether to additionally reset the Pokemon's summon data (default: `false`) */ - resetSummonData(): void { - const illusion: IllusionData | null = this.summonData.illusion; - if (this.summonData.speciesForm) { - this.summonData.speciesForm = null; - this.updateFusionPalette(); - } - this.summonData = new PokemonSummonData(); - this.tempSummonData = new PokemonTempSummonData(); + public fieldSetup(resetSummonData?: boolean): void { this.setSwitchOutStatus(false); if (globalScene) { globalScene.triggerPokemonFormChange( @@ -5740,7 +5733,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { true, ); } - // If this Pokemon has a Substitute when loading in, play an animation to add its sprite if (this.getTag(SubstituteTag)) { globalScene.triggerPokemonBattleAnim( @@ -5758,6 +5750,24 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ) { this.setVisible(false); } + + if (resetSummonData) { + this.resetSummonData(); + } + } + + /** + * Reset this Pokemon's {@linkcode PokemonSummonData | SummonData} and {@linkcode PokemonTempSummonData | TempSummonData} + * in preparation for switching pokemon, as well as removing any relevant on-switch tags. + */ + resetSummonData(): void { + const illusion: IllusionData | null = this.summonData.illusion; + if (this.summonData.speciesForm) { + this.summonData.speciesForm = null; + this.updateFusionPalette(); + } + this.summonData = new PokemonSummonData(); + this.tempSummonData = new PokemonTempSummonData(); this.summonData.illusion = illusion this.updateInfo(); } diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index 5b799bd9316..3cfd2b9a901 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -146,7 +146,7 @@ export class EncounterPhase extends BattlePhase { const enemyPokemon = globalScene.getEnemyParty()[e]; if (e < (battle.double ? 2 : 1)) { enemyPokemon.setX(-66 + enemyPokemon.getFieldPositionOffset()[0]); - enemyPokemon.resetSummonData(); + enemyPokemon.fieldSetup(true); } if (!this.loaded) { diff --git a/src/phases/summon-phase.ts b/src/phases/summon-phase.ts index fef9b356348..c217583f163 100644 --- a/src/phases/summon-phase.ts +++ b/src/phases/summon-phase.ts @@ -196,6 +196,7 @@ export class SummonPhase extends PartyMemberPokemonPhase { onComplete: () => { pokemon.cry(pokemon.getHpRatio() > 0.25 ? undefined : { rate: 0.85 }); pokemon.getSprite().clearTint(); + pokemon.fieldSetup(); // necessary to stay transformed during wild waves if (pokemon.summonData.speciesForm) { pokemon.loadAssets(false); @@ -261,6 +262,7 @@ export class SummonPhase extends PartyMemberPokemonPhase { onComplete: () => { pokemon.cry(pokemon.getHpRatio() > 0.25 ? undefined : { rate: 0.85 }); pokemon.getSprite().clearTint(); + pokemon.fieldSetup(); globalScene.updateFieldScale(); globalScene.time.delayedCall(1000, () => this.end()); }, diff --git a/src/phases/switch-summon-phase.ts b/src/phases/switch-summon-phase.ts index bb31f87cc3d..a063b6e6863 100644 --- a/src/phases/switch-summon-phase.ts +++ b/src/phases/switch-summon-phase.ts @@ -193,7 +193,7 @@ export class SwitchSummonPhase extends SummonPhase { switchedInPokemon.setAlpha(0.5); } } else { - switchedInPokemon.resetSummonData(); + switchedInPokemon.fieldSetup(true); } this.summon(); }; From 998619e7e565ff06c1624f6b4d22ab444554a037 Mon Sep 17 00:00:00 2001 From: Jimmybald1 <122436263+Jimmybald1@users.noreply.github.com> Date: Sat, 17 May 2025 17:36:16 +0200 Subject: [PATCH 137/262] [Bug] IVs of trainers were incorrectly using the battle seed (#5822) * Fixed IVs of trainers using the Battle Seed. * Renamed the randSeedInt functions that use the Battle Seed to randBattleSeedInt functions * Incorrectly used this in common * Fixed tests that were still calling the old function name --------- Co-authored-by: damocleas Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com> Co-authored-by: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Co-authored-by: Dean <69436131+emdeann@users.noreply.github.com> Co-authored-by: lxy-lxy-lxy <55084073+lxy-lxy-lxy@users.noreply.github.com> Co-authored-by: Xavion3 Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Co-authored-by: Lylian BALL <131535108+PyGaVS@users.noreply.github.com> Co-authored-by: Jimmybald1 <147992650+IBBCalc@users.noreply.github.com> --- src/data/abilities/ability.ts | 36 +- src/data/battler-tags.ts | 8 +- src/data/moves/move.ts | 52 +- src/data/trainers/trainer-config.ts | 693 ++++++++++++++++++------ src/field/pokemon.ts | 16 +- src/modifier/modifier.ts | 14 +- src/phases/attempt-capture-phase.ts | 6 +- src/phases/attempt-run-phase.ts | 2 +- src/phases/move-effect-phase.ts | 2 +- src/phases/move-phase.ts | 4 +- src/utils/common.ts | 10 + test/abilities/cud_chew.test.ts | 2 +- test/abilities/desolate-land.test.ts | 2 +- test/abilities/neutralizing_gas.test.ts | 2 +- test/items/reviver_seed.test.ts | 2 +- test/moves/u_turn.test.ts | 2 +- 16 files changed, 608 insertions(+), 245 deletions(-) diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 4609ff6ec1a..ff86937622b 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -850,14 +850,14 @@ export class PostDefendContactApplyStatusEffectAbAttr extends PostDefendAbAttr { } override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - const effect = this.effects.length === 1 ? this.effects[0] : this.effects[pokemon.randSeedInt(this.effects.length)]; + const effect = this.effects.length === 1 ? this.effects[0] : this.effects[pokemon.randBattleSeedInt(this.effects.length)]; return move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) && !attacker.status - && (this.chance === -1 || pokemon.randSeedInt(100) < this.chance) + && (this.chance === -1 || pokemon.randBattleSeedInt(100) < this.chance) && attacker.canSetStatus(effect, true, false, pokemon); } override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { - const effect = this.effects.length === 1 ? this.effects[0] : this.effects[pokemon.randSeedInt(this.effects.length)]; + const effect = this.effects.length === 1 ? this.effects[0] : this.effects[pokemon.randBattleSeedInt(this.effects.length)]; attacker.trySetStatus(effect, true, pokemon); } } @@ -891,7 +891,7 @@ export class PostDefendContactApplyTagChanceAbAttr extends PostDefendAbAttr { } override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - return move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) && pokemon.randSeedInt(100) < this.chance + return move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) && pokemon.randBattleSeedInt(100) < this.chance && attacker.canAddTag(this.tagType); } @@ -1068,7 +1068,7 @@ export class PostDefendMoveDisableAbAttr extends PostDefendAbAttr { override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { return attacker.getTag(BattlerTagType.DISABLED) === null - && move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) && (this.chance === -1 || pokemon.randSeedInt(100) < this.chance); + && move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) && (this.chance === -1 || pokemon.randBattleSeedInt(100) < this.chance); } override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { @@ -1741,7 +1741,7 @@ export class PostAttackStealHeldItemAbAttr extends PostAttackAbAttr { const heldItems = this.getTargetHeldItems(defender).filter((i) => i.isTransferable); if (heldItems.length) { // Ensure that the stolen item in testing is the same as when the effect is applied - this.stolenItem = heldItems[pokemon.randSeedInt(heldItems.length)]; + this.stolenItem = heldItems[pokemon.randBattleSeedInt(heldItems.length)]; if (globalScene.canTransferHeldItemModifier(this.stolenItem, pokemon)) { return true; } @@ -1762,7 +1762,7 @@ export class PostAttackStealHeldItemAbAttr extends PostAttackAbAttr { ): void { const heldItems = this.getTargetHeldItems(defender).filter((i) => i.isTransferable); if (!this.stolenItem) { - this.stolenItem = heldItems[pokemon.randSeedInt(heldItems.length)]; + this.stolenItem = heldItems[pokemon.randBattleSeedInt(heldItems.length)]; } if (globalScene.tryTransferHeldItemModifier(this.stolenItem, pokemon, false)) { globalScene.queueMessage( @@ -1799,9 +1799,9 @@ export class PostAttackApplyStatusEffectAbAttr extends PostAttackAbAttr { if ( super.canApplyPostAttack(pokemon, passive, simulated, attacker, move, hitResult, args) && (simulated || !attacker.hasAbilityWithAttr(IgnoreMoveEffectsAbAttr) && pokemon !== attacker - && (!this.contactRequired || move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon})) && pokemon.randSeedInt(100) < this.chance && !pokemon.status) + && (!this.contactRequired || move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon})) && pokemon.randBattleSeedInt(100) < this.chance && !pokemon.status) ) { - const effect = this.effects.length === 1 ? this.effects[0] : this.effects[pokemon.randSeedInt(this.effects.length)]; + const effect = this.effects.length === 1 ? this.effects[0] : this.effects[pokemon.randBattleSeedInt(this.effects.length)]; return simulated || attacker.canSetStatus(effect, true, false, pokemon); } @@ -1809,7 +1809,7 @@ export class PostAttackApplyStatusEffectAbAttr extends PostAttackAbAttr { } applyPostAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): void { - const effect = this.effects.length === 1 ? this.effects[0] : this.effects[pokemon.randSeedInt(this.effects.length)]; + const effect = this.effects.length === 1 ? this.effects[0] : this.effects[pokemon.randBattleSeedInt(this.effects.length)]; attacker.trySetStatus(effect, true, pokemon); } } @@ -1839,12 +1839,12 @@ export class PostAttackApplyBattlerTagAbAttr extends PostAttackAbAttr { return super.canApplyPostAttack(pokemon, passive, simulated, attacker, move, hitResult, args) && !attacker.hasAbilityWithAttr(IgnoreMoveEffectsAbAttr) && pokemon !== attacker && (!this.contactRequired || move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon})) && - pokemon.randSeedInt(100) < this.chance(attacker, pokemon, move) && !pokemon.status; + pokemon.randBattleSeedInt(100) < this.chance(attacker, pokemon, move) && !pokemon.status; } override applyPostAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): void { if (!simulated) { - const effect = this.effects.length === 1 ? this.effects[0] : this.effects[pokemon.randSeedInt(this.effects.length)]; + const effect = this.effects.length === 1 ? this.effects[0] : this.effects[pokemon.randBattleSeedInt(this.effects.length)]; attacker.addTag(effect); } } @@ -1868,7 +1868,7 @@ export class PostDefendStealHeldItemAbAttr extends PostDefendAbAttr { ) { const heldItems = this.getTargetHeldItems(attacker).filter((i) => i.isTransferable); if (heldItems.length) { - this.stolenItem = heldItems[pokemon.randSeedInt(heldItems.length)]; + this.stolenItem = heldItems[pokemon.randBattleSeedInt(heldItems.length)]; if (globalScene.canTransferHeldItemModifier(this.stolenItem, pokemon)) { return true; } @@ -1889,7 +1889,7 @@ export class PostDefendStealHeldItemAbAttr extends PostDefendAbAttr { const heldItems = this.getTargetHeldItems(attacker).filter((i) => i.isTransferable); if (!this.stolenItem) { - this.stolenItem = heldItems[pokemon.randSeedInt(heldItems.length)]; + this.stolenItem = heldItems[pokemon.randBattleSeedInt(heldItems.length)]; } if (globalScene.tryTransferHeldItemModifier(this.stolenItem, pokemon, false)) { globalScene.queueMessage( @@ -3171,7 +3171,7 @@ export class ConfusionOnStatusEffectAbAttr extends PostAttackAbAttr { */ override applyPostAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, hitResult: HitResult, args: any[]): void { if (!simulated) { - defender.addTag(BattlerTagType.CONFUSED, pokemon.randSeedIntRange(2, 5), move.id, defender.id); + defender.addTag(BattlerTagType.CONFUSED, pokemon.randBattleSeedIntRange(2, 5), move.id, defender.id); } } } @@ -4235,12 +4235,12 @@ export class MoodyAbAttr extends PostTurnAbAttr { if (!simulated) { if (canRaise.length > 0) { - const raisedStat = canRaise[pokemon.randSeedInt(canRaise.length)]; + const raisedStat = canRaise[pokemon.randBattleSeedInt(canRaise.length)]; canLower = canRaise.filter(s => s !== raisedStat); globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ raisedStat ], 2)); } if (canLower.length > 0) { - const loweredStat = canLower[pokemon.randSeedInt(canLower.length)]; + const loweredStat = canLower[pokemon.randBattleSeedInt(canLower.length)]; globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ loweredStat ], -1)); } } @@ -5349,7 +5349,7 @@ export class BypassSpeedChanceAbAttr extends AbAttr { const isCommandFight = turnCommand?.command === Command.FIGHT; const move = turnCommand?.move?.move ? allMoves[turnCommand.move.move] : null; const isDamageMove = move?.category === MoveCategory.PHYSICAL || move?.category === MoveCategory.SPECIAL; - return !simulated && !bypassSpeed.value && pokemon.randSeedInt(100) < this.chance && isCommandFight && isDamageMove; + return !simulated && !bypassSpeed.value && pokemon.randBattleSeedInt(100) < this.chance && isCommandFight && isDamageMove; } /** diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 8a512f3c16c..34fdd5409c8 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -766,11 +766,11 @@ export class ConfusedTag extends BattlerTag { globalScene.unshiftPhase(new CommonAnimPhase(pokemon.getBattlerIndex(), undefined, CommonAnim.CONFUSION)); // 1/3 chance of hitting self with a 40 base power move - if (pokemon.randSeedInt(3) === 0 || Overrides.CONFUSION_ACTIVATION_OVERRIDE === true) { + if (pokemon.randBattleSeedInt(3) === 0 || Overrides.CONFUSION_ACTIVATION_OVERRIDE === true) { const atk = pokemon.getEffectiveStat(Stat.ATK); const def = pokemon.getEffectiveStat(Stat.DEF); const damage = toDmgValue( - ((((2 * pokemon.level) / 5 + 2) * 40 * atk) / def / 50 + 2) * (pokemon.randSeedIntRange(85, 100) / 100), + ((((2 * pokemon.level) / 5 + 2) * 40 * atk) / def / 50 + 2) * (pokemon.randBattleSeedIntRange(85, 100) / 100), ); // Intentionally don't increment rage fist's hitCount globalScene.queueMessage(i18next.t("battlerTags:confusedLapseHurtItself")); @@ -890,7 +890,7 @@ export class InfatuatedTag extends BattlerTag { ); globalScene.unshiftPhase(new CommonAnimPhase(pokemon.getBattlerIndex(), undefined, CommonAnim.ATTRACT)); - if (pokemon.randSeedInt(2)) { + if (pokemon.randBattleSeedInt(2)) { globalScene.queueMessage( i18next.t("battlerTags:infatuatedLapseImmobilize", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), @@ -1119,7 +1119,7 @@ export class FrenzyTag extends BattlerTag { if (this.turnCount < 2) { // Only add CONFUSED tag if a disruption occurs on the final confusion-inducing turn of FRENZY - pokemon.addTag(BattlerTagType.CONFUSED, pokemon.randSeedIntRange(2, 4)); + pokemon.addTag(BattlerTagType.CONFUSED, pokemon.randBattleSeedIntRange(2, 4)); } } } diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 3ef70fd75be..235cb954ea5 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -1591,7 +1591,7 @@ export class RandomLevelDamageAttr extends FixedDamageAttr { } getDamage(user: Pokemon, target: Pokemon, move: Move): number { - return toDmgValue(user.level * (user.randSeedIntRange(50, 150) * 0.01)); + return toDmgValue(user.level * (user.randBattleSeedIntRange(50, 150) * 0.01)); } } @@ -2352,7 +2352,7 @@ export class MultiHitAttr extends MoveAttr { switch (this.multiHitType) { case MultiHitType._2_TO_5: { - const rand = user.randSeedInt(20); + const rand = user.randBattleSeedInt(20); const hitValue = new NumberHolder(rand); applyAbAttrs(MaxMultiHitAbAttr, user, null, false, hitValue); if (hitValue.value >= 13) { @@ -2453,7 +2453,7 @@ export class StatusEffectAttr extends MoveEffectAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveChance = this.getMoveChance(user, target, move, this.selfTarget, true); - const statusCheck = moveChance < 0 || moveChance === 100 || user.randSeedInt(100) < moveChance; + const statusCheck = moveChance < 0 || moveChance === 100 || user.randBattleSeedInt(100) < moveChance; const quiet = move.category !== MoveCategory.STATUS; if (statusCheck) { const pokemon = this.selfTarget ? user : target; @@ -2560,7 +2560,7 @@ export class StealHeldItemChanceAttr extends MoveEffectAttr { const poolType = target.isPlayer() ? ModifierPoolType.PLAYER : target.hasTrainer() ? ModifierPoolType.TRAINER : ModifierPoolType.WILD; const highestItemTier = heldItems.map((m) => m.type.getOrInferTier(poolType)).reduce((highestTier, tier) => Math.max(tier!, highestTier), 0); // TODO: is the bang after tier correct? const tierHeldItems = heldItems.filter((m) => m.type.getOrInferTier(poolType) === highestItemTier); - const stolenItem = tierHeldItems[user.randSeedInt(tierHeldItems.length)]; + const stolenItem = tierHeldItems[user.randBattleSeedInt(tierHeldItems.length)]; if (!globalScene.tryTransferHeldItemModifier(stolenItem, user, false)) { return false; } @@ -2636,7 +2636,7 @@ export class RemoveHeldItemAttr extends MoveEffectAttr { return false; } - const removedItem = heldItems[user.randSeedInt(heldItems.length)]; + const removedItem = heldItems[user.randBattleSeedInt(heldItems.length)]; // Decrease item amount and update icon target.loseHeldItem(removedItem); @@ -2697,7 +2697,7 @@ export class EatBerryAttr extends MoveEffectAttr { } // pick a random berry to gobble and check if we preserve it - this.chosenBerry = heldBerries[user.randSeedInt(heldBerries.length)]; + this.chosenBerry = heldBerries[user.randBattleSeedInt(heldBerries.length)]; const preserve = new BooleanHolder(false); // check for berry pouch preservation globalScene.applyModifiers(PreserveBerryModifier, pokemon.isPlayer(), pokemon, preserve); @@ -2774,7 +2774,7 @@ export class StealEatBerryAttr extends EatBerryAttr { } // pick a random berry and eat it - this.chosenBerry = heldBerries[user.randSeedInt(heldBerries.length)]; + this.chosenBerry = heldBerries[user.randBattleSeedInt(heldBerries.length)]; applyPostItemLostAbAttrs(PostItemLostAbAttr, target, false); const message = i18next.t("battle:stealEatBerry", { pokemonName: user.name, targetName: target.name, berryName: this.chosenBerry.type.name }); globalScene.queueMessage(message); @@ -3205,7 +3205,7 @@ export class StatStageChangeAttr extends MoveEffectAttr { } const moveChance = this.getMoveChance(user, target, move, this.selfTarget, true); - if (moveChance < 0 || moveChance === 100 || user.randSeedInt(100) < moveChance) { + if (moveChance < 0 || moveChance === 100 || user.randBattleSeedInt(100) < moveChance) { const stages = this.getLevels(user); globalScene.unshiftPhase(new StatStageChangePhase((this.selfTarget ? user : target).getBattlerIndex(), this.selfTarget, this.stats, stages, this.showMessage)); return true; @@ -3431,7 +3431,7 @@ export class AcupressureStatStageChangeAttr extends MoveEffectAttr { override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const randStats = BATTLE_STATS.filter((s) => target.getStatStage(s) < 6); if (randStats.length > 0) { - const boostStat = [ randStats[user.randSeedInt(randStats.length)] ]; + const boostStat = [ randStats[user.randBattleSeedInt(randStats.length)] ]; globalScene.unshiftPhase(new StatStageChangePhase(target.getBattlerIndex(), this.selfTarget, boostStat, 2)); return true; } @@ -4823,7 +4823,7 @@ export class ShellSideArmCategoryAttr extends VariableMoveCategoryAttr { if (predictedPhysDmg > predictedSpecDmg) { category.value = MoveCategory.PHYSICAL; return true; - } else if (predictedPhysDmg === predictedSpecDmg && user.randSeedInt(2) === 0) { + } else if (predictedPhysDmg === predictedSpecDmg && user.randBattleSeedInt(2) === 0) { category.value = MoveCategory.PHYSICAL; return true; } @@ -5404,7 +5404,7 @@ export class FrenzyAttr extends MoveEffectAttr { } if (!user.getTag(BattlerTagType.FRENZY) && !user.getMoveQueue().length) { - const turnCount = user.randSeedIntRange(1, 2); + const turnCount = user.randBattleSeedIntRange(1, 2); new Array(turnCount).fill(null).map(() => user.getMoveQueue().push({ move: move.id, targets: [ target.getBattlerIndex() ], ignorePP: true })); user.addTag(BattlerTagType.FRENZY, turnCount, move.id, user.id); } else { @@ -5485,8 +5485,8 @@ export class AddBattlerTagAttr extends MoveEffectAttr { } const moveChance = this.getMoveChance(user, target, move, this.selfTarget, true); - if (moveChance < 0 || moveChance === 100 || user.randSeedInt(100) < moveChance) { - return (this.selfTarget ? user : target).addTag(this.tagType, user.randSeedIntRange(this.turnCountMin, this.turnCountMax), move.id, user.id); + if (moveChance < 0 || moveChance === 100 || user.randBattleSeedInt(100) < moveChance) { + return (this.selfTarget ? user : target).addTag(this.tagType, user.randBattleSeedIntRange(this.turnCountMin, this.turnCountMax), move.id, user.id); } return false; @@ -5654,7 +5654,7 @@ export class JawLockAttr extends AddBattlerTagAttr { } const moveChance = this.getMoveChance(user, target, move, this.selfTarget); - if (moveChance < 0 || moveChance === 100 || user.randSeedInt(100) < moveChance) { + if (moveChance < 0 || moveChance === 100 || user.randBattleSeedInt(100) < moveChance) { /** * Add the tag to both the user and the target. * The target's tag source is considered to be the user and vice versa @@ -5792,7 +5792,7 @@ export class ProtectAttr extends AddBattlerTagAttr { timesUsed++; } if (timesUsed) { - return !user.randSeedInt(Math.pow(3, timesUsed)); + return !user.randBattleSeedInt(Math.pow(3, timesUsed)); } return true; }); @@ -5916,7 +5916,7 @@ export class AddArenaTagAttr extends MoveEffectAttr { return false; } - if ((move.chance < 0 || move.chance === 100 || user.randSeedInt(100) < move.chance) && user.getLastXMoves(1)[0]?.result === MoveResult.SUCCESS) { + if ((move.chance < 0 || move.chance === 100 || user.randBattleSeedInt(100) < move.chance) && user.getLastXMoves(1)[0]?.result === MoveResult.SUCCESS) { const side = ((this.selfSideTarget ? user : target).isPlayer() !== (move.hasAttr(AddArenaTrapTagAttr) && target === user)) ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; globalScene.arena.addTag(this.tagType, this.turnCount, move.id, user.id, side); return true; @@ -5992,7 +5992,7 @@ export class AddArenaTrapTagHitAttr extends AddArenaTagAttr { const moveChance = this.getMoveChance(user, target, move, this.selfTarget, true); const side = (this.selfSideTarget ? user : target).isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; const tag = globalScene.arena.getTagOnSide(this.tagType, side) as ArenaTrapTag; - if ((moveChance < 0 || moveChance === 100 || user.randSeedInt(100) < moveChance) && user.getLastXMoves(1)[0]?.result === MoveResult.SUCCESS) { + if ((moveChance < 0 || moveChance === 100 || user.randBattleSeedInt(100) < moveChance) && user.getLastXMoves(1)[0]?.result === MoveResult.SUCCESS) { globalScene.arena.addTag(this.tagType, 0, move.id, user.id, side); if (!tag) { return true; @@ -6167,7 +6167,7 @@ export class RevivalBlessingAttr extends MoveEffectAttr { // If used by an enemy trainer with at least one fainted non-boss Pokemon, this // revives one of said Pokemon selected at random. const faintedPokemon = globalScene.getEnemyParty().filter((p) => p.isFainted() && !p.isBoss()); - const pokemon = faintedPokemon[user.randSeedInt(faintedPokemon.length)]; + const pokemon = faintedPokemon[user.randBattleSeedInt(faintedPokemon.length)]; const slotIndex = globalScene.getEnemyParty().findIndex((p) => pokemon.id === p.id); pokemon.resetStatus(true, false, false, true); pokemon.heal(Math.min(toDmgValue(0.5 * pokemon.getMaxHp()), pokemon.getMaxHp())); @@ -6263,7 +6263,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { if (switchOutTarget.hp > 0) { if (this.switchType === SwitchType.FORCE_SWITCH) { switchOutTarget.leaveField(true); - const slotIndex = eligibleNewIndices[user.randSeedInt(eligibleNewIndices.length)]; + const slotIndex = eligibleNewIndices[user.randBattleSeedInt(eligibleNewIndices.length)]; globalScene.prependToPhase( new SwitchSummonPhase( this.switchType, @@ -6306,7 +6306,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { if (switchOutTarget.hp > 0) { if (this.switchType === SwitchType.FORCE_SWITCH) { switchOutTarget.leaveField(true); - const slotIndex = eligibleNewIndices[user.randSeedInt(eligibleNewIndices.length)]; + const slotIndex = eligibleNewIndices[user.randBattleSeedInt(eligibleNewIndices.length)]; globalScene.prependToPhase( new SwitchSummonPhase( this.switchType, @@ -6725,7 +6725,7 @@ class CallMoveAttr extends OverrideMoveEffectAttr { } const targets = moveTargets.multiple || moveTargets.targets.length === 1 ? moveTargets.targets - : [ this.hasTarget ? target.getBattlerIndex() : moveTargets.targets[user.randSeedInt(moveTargets.targets.length)] ]; // account for Mirror Move having a target already + : [ this.hasTarget ? target.getBattlerIndex() : moveTargets.targets[user.randBattleSeedInt(moveTargets.targets.length)] ]; // account for Mirror Move having a target already user.getMoveQueue().push({ move: move.id, targets: targets, virtual: true, ignorePP: true }); globalScene.unshiftPhase(new LoadMoveAnimPhase(move.id)); globalScene.unshiftPhase(new MovePhase(user, targets, new PokemonMove(move.id, 0, 0, true), true, true)); @@ -6765,7 +6765,7 @@ export class RandomMoveAttr extends CallMoveAttr { const moveIds = getEnumValues(Moves).map(m => !this.invalidMoves.has(m) && !allMoves[m].name.endsWith(" (N)") ? m : Moves.NONE); let moveId: Moves = Moves.NONE; do { - moveId = this.getMoveOverride() ?? moveIds[user.randSeedInt(moveIds.length)]; + moveId = this.getMoveOverride() ?? moveIds[user.randBattleSeedInt(moveIds.length)]; } while (moveId === Moves.NONE); return super.apply(user, target, allMoves[moveId], args); @@ -6817,7 +6817,7 @@ export class RandomMovesetMoveAttr extends CallMoveAttr { return false; } - this.moveId = moves[user.randSeedInt(moves.length)]!.moveId; + this.moveId = moves[user.randBattleSeedInt(moves.length)]!.moveId; return true; }; } @@ -7900,7 +7900,7 @@ const phaseForcedSlower = (phase: MovePhase, target: Pokemon, trickRoom: boolean let slower: boolean; // quashed pokemon still have speed ties if (phase.pokemon.getEffectiveStat(Stat.SPD) === target.getEffectiveStat(Stat.SPD)) { - slower = !!target.randSeedInt(2); + slower = !!target.randBattleSeedInt(2); } else { slower = !trickRoom ? phase.pokemon.getEffectiveStat(Stat.SPD) < target.getEffectiveStat(Stat.SPD) : phase.pokemon.getEffectiveStat(Stat.SPD) > target.getEffectiveStat(Stat.SPD); } @@ -8103,7 +8103,7 @@ export class ResistLastMoveTypeAttr extends MoveEffectAttr { if (!validTypes.length) { return false; } - const type = validTypes[user.randSeedInt(validTypes.length)]; + const type = validTypes[user.randBattleSeedInt(validTypes.length)]; user.summonData.types = [ type ]; globalScene.queueMessage(i18next.t("battle:transformedIntoType", { pokemonName: getPokemonNameWithAffix(user), type: toReadableString(PokemonType[type]) })); user.updateInfo(); @@ -8218,7 +8218,7 @@ export function getMoveTargets(user: Pokemon, move: Moves, replaceTarget?: MoveT multiple = moveTarget !== MoveTarget.NEAR_ENEMY; break; case MoveTarget.RANDOM_NEAR_ENEMY: - set = [ opponents[user.randSeedInt(opponents.length)] ]; + set = [ opponents[user.randBattleSeedInt(opponents.length)] ]; break; case MoveTarget.ATTACKER: return { targets: [ -1 as BattlerIndex ], multiple: false }; diff --git a/src/data/trainers/trainer-config.ts b/src/data/trainers/trainer-config.ts index 50acf84efa6..839a1cdc0cc 100644 --- a/src/data/trainers/trainer-config.ts +++ b/src/data/trainers/trainer-config.ts @@ -1,7 +1,7 @@ import { globalScene } from "#app/global-scene"; import { modifierTypes } from "#app/modifier/modifier-type"; import { PokemonMove } from "#app/field/pokemon"; -import { toReadableString, isNullOrUndefined, randSeedItem, randSeedInt } from "#app/utils/common"; +import { toReadableString, isNullOrUndefined, randSeedItem, randSeedInt, randSeedIntRange } from "#app/utils/common"; import { pokemonEvolutions, pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { tmSpecies } from "#app/data/balance/tms"; @@ -2856,21 +2856,29 @@ export const trainerConfigs: TrainerConfigs = { .initForEliteFour(signatureSpecies["LORELEI"], false, PokemonType.ICE, 2) .setBattleBgm("battle_kanto_gym") .setMixedBattleBgm("battle_kanto_gym") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.DEWGONG], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 0, + getRandomPartyMemberFunc([Species.DEWGONG], TrainerSlot.TRAINER, true, p => { p.abilityIndex = 0; // Thick Fat p.generateAndPopulateMoveset(); }), ) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SLOWBRO, Species.GALAR_SLOWBRO], TrainerSlot.TRAINER, true, p => { // Tera Ice Slowbro/G-Slowbro + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.SLOWBRO, Species.GALAR_SLOWBRO], TrainerSlot.TRAINER, true, p => { + // Tera Ice Slowbro/G-Slowbro p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.ICE_BEAM)) { // Check if Ice Beam is in the moveset, if not, replace the third move with Ice Beam. + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.ICE_BEAM)) { + // Check if Ice Beam is in the moveset, if not, replace the third move with Ice Beam. p.moveset[2] = new PokemonMove(Moves.ICE_BEAM); } }), ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.JYNX])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CLOYSTER, Species.ALOLA_SANDSLASH])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.LAPRAS], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.LAPRAS], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -2880,9 +2888,13 @@ export const trainerConfigs: TrainerConfigs = { .setBattleBgm("battle_kanto_gym") .setMixedBattleBgm("battle_kanto_gym") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.HITMONLEE, Species.HITMONCHAN, Species.HITMONTOP])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.STEELIX], TrainerSlot.TRAINER, true, p => { // Tera Fighting Steelix + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.STEELIX], TrainerSlot.TRAINER, true, p => { + // Tera Fighting Steelix p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.BODY_PRESS)) { // Check if Body Press is in the moveset, if not, replace the third move with Body Press. + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.BODY_PRESS)) { + // Check if Body Press is in the moveset, if not, replace the third move with Body Press. p.moveset[2] = new PokemonMove(Moves.BODY_PRESS); } }), @@ -2901,16 +2913,22 @@ export const trainerConfigs: TrainerConfigs = { .setBattleBgm("battle_kanto_gym") .setMixedBattleBgm("battle_kanto_gym") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.MISMAGIUS])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.ARBOK, Species.WEEZING], TrainerSlot.TRAINER, true, p => { // Tera Ghost Arbok/Weezing + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.ARBOK, Species.WEEZING], TrainerSlot.TRAINER, true, p => { + // Tera Ghost Arbok/Weezing p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { + // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); } }), ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.ALOLA_MAROWAK])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CURSOLA])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.GENGAR], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.GENGAR], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -2921,16 +2939,22 @@ export const trainerConfigs: TrainerConfigs = { .setBattleBgm("battle_kanto_gym") .setMixedBattleBgm("battle_kanto_gym") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.KINGDRA])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.GYARADOS, Species.AERODACTYL], TrainerSlot.TRAINER, true, p => { // Tera Dragon Gyarados/Aerodactyl + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.GYARADOS, Species.AERODACTYL], TrainerSlot.TRAINER, true, p => { + // Tera Dragon Gyarados/Aerodactyl p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { + // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); } }), ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.ALOLA_EXEGGUTOR])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SALAMENCE])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.DRAGONITE], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.DRAGONITE], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -2943,7 +2967,9 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SLOWKING, Species.GALAR_SLOWKING])) // Tera Psychic Slowking/G-Slowking .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.EXEGGUTOR])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.WYRDEER, Species.FARIGIRAF])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.XATU], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.XATU], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -2952,7 +2978,9 @@ export const trainerConfigs: TrainerConfigs = { .initForEliteFour(signatureSpecies["KOGA"], true, PokemonType.POISON, 2) .setBattleBgm("battle_johto_gym") .setMixedBattleBgm("battle_johto_gym") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.VENOMOTH], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 0, + getRandomPartyMemberFunc([Species.VENOMOTH], TrainerSlot.TRAINER, true, p => { p.abilityIndex = 1; // Tinted Lens p.generateAndPopulateMoveset(); }), @@ -2960,7 +2988,9 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.MUK, Species.WEEZING])) // Tera Poison Muk/Weezing .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.TENTACRUEL])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SNEASLER, Species.OVERQWIL])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.CROBAT], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.CROBAT], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -2970,16 +3000,22 @@ export const trainerConfigs: TrainerConfigs = { .setBattleBgm("battle_johto_gym") .setMixedBattleBgm("battle_johto_gym") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.UMBREON])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.GENGAR], TrainerSlot.TRAINER, true, p => { // Tera Dark Gengar + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.GENGAR], TrainerSlot.TRAINER, true, p => { + // Tera Dark Gengar p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.DARK_PULSE)) { // Check if Dark Pulse is in the moveset, if not, replace the third move with Dark Pulse. + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.DARK_PULSE)) { + // Check if Dark Pulse is in the moveset, if not, replace the third move with Dark Pulse. p.moveset[2] = new PokemonMove(Moves.DARK_PULSE); } }), ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.HONCHKROW])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.WEAVILE])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.HOUNDOOM], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.HOUNDOOM], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -2987,7 +3023,9 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.SIDNEY]: new TrainerConfig(++t) .initForEliteFour(signatureSpecies["SIDNEY"], true, PokemonType.DARK, 2) .setMixedBattleBgm("battle_hoenn_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.MIGHTYENA], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 0, + getRandomPartyMemberFunc([Species.MIGHTYENA], TrainerSlot.TRAINER, true, p => { p.abilityIndex = 0; // Intimidate p.generateAndPopulateMoveset(); }), @@ -3008,12 +3046,16 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SABLEYE])) .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.BANETTE])) // Tera Ghost Banette .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.DRIFBLIM, Species.MISMAGIUS])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ORICORIO, Species.ALOLA_MAROWAK], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 4, + getRandomPartyMemberFunc([Species.ORICORIO, Species.ALOLA_MAROWAK], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.formIndex = p.species.speciesId === Species.ORICORIO ? 3 : 0; // Oricorio-Sensu }), ) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.DUSKNOIR], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.DUSKNOIR], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3021,7 +3063,9 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.GLACIA]: new TrainerConfig(++t) .initForEliteFour(signatureSpecies["GLACIA"], false, PokemonType.ICE, 2) .setMixedBattleBgm("battle_hoenn_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ABOMASNOW], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 0, + getRandomPartyMemberFunc([Species.ABOMASNOW], TrainerSlot.TRAINER, true, p => { p.abilityIndex = 0; // Snow Warning p.generateAndPopulateMoveset(); }), @@ -3029,7 +3073,9 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.GLALIE])) // Tera Ice Glalie .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.FROSLASS])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ALOLA_NINETALES])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.WALREIN], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.WALREIN], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3038,16 +3084,22 @@ export const trainerConfigs: TrainerConfigs = { .initForEliteFour(signatureSpecies["DRAKE"], true, PokemonType.DRAGON, 2) .setMixedBattleBgm("battle_hoenn_elite") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ALTARIA])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.DHELMISE], TrainerSlot.TRAINER, true, p => { // Tera Dragon Dhelmise + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.DHELMISE], TrainerSlot.TRAINER, true, p => { + // Tera Dragon Dhelmise p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { + // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); } }), ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.FLYGON])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.KINGDRA])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.SALAMENCE], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.SALAMENCE], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3060,11 +3112,15 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.HERACROSS])) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.VESPIQUEN])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SCIZOR, Species.KLEAVOR])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.DRAPION], TrainerSlot.TRAINER, true, p => { // Tera Bug Drapion + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.DRAPION], TrainerSlot.TRAINER, true, p => { + // Tera Bug Drapion p.setBoss(true, 2); p.abilityIndex = 1; // Sniper p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.X_SCISSOR)) { // Check if X-Scissor is in the moveset, if not, replace the third move with X-Scissor. + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.X_SCISSOR)) { + // Check if X-Scissor is in the moveset, if not, replace the third move with X-Scissor. p.moveset[2] = new PokemonMove(Moves.X_SCISSOR); } }), @@ -3074,14 +3130,19 @@ export const trainerConfigs: TrainerConfigs = { .setBattleBgm("battle_sinnoh_gym") .setMixedBattleBgm("battle_sinnoh_gym") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.WHISCASH])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.HIPPOWDON], TrainerSlot.TRAINER, true, p => { // Tera Ground Hippowdon + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.HIPPOWDON], TrainerSlot.TRAINER, true, p => { + // Tera Ground Hippowdon p.abilityIndex = 0; // Sand Stream p.generateAndPopulateMoveset(); }), ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GLISCOR])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.MAMOSWINE, Species.URSALUNA])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.RHYPERIOR], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.RHYPERIOR], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.abilityIndex = 1; // Solid Rock p.generateAndPopulateMoveset(); @@ -3092,16 +3153,22 @@ export const trainerConfigs: TrainerConfigs = { .setBattleBgm("battle_sinnoh_gym") .setMixedBattleBgm("battle_sinnoh_gym") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.RAPIDASH])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.STEELIX, Species.LOPUNNY], TrainerSlot.TRAINER, true, p => { // Tera Fire Steelix/Lopunny + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.STEELIX, Species.LOPUNNY], TrainerSlot.TRAINER, true, p => { + // Tera Fire Steelix/Lopunny p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { + // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); } }), ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.INFERNAPE])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ARCANINE, Species.HISUI_ARCANINE])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.MAGMORTAR], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.MAGMORTAR], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3114,7 +3181,9 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.FARIGIRAF])) // Tera Psychic Farigiraf .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.BRONZONG])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.MR_RIME, Species.HISUI_BRAVIARY])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.GALLADE], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.GALLADE], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.abilityIndex = 1; // Sharpness p.generateAndPopulateMoveset(); @@ -3126,8 +3195,10 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.COFAGRIGUS])) .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.GOLURK])) // Tera Ghost Golurk .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.JELLICENT])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.MISMAGIUS, Species.FROSLASS ])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.CHANDELURE], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.MISMAGIUS, Species.FROSLASS])) + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.CHANDELURE], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3139,7 +3210,9 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.MIENSHAO])) // Tera Fighting Mienshao .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.EMBOAR])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.BRELOOM, Species.TOXICROAK])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.CONKELDURR], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.CONKELDURR], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3151,7 +3224,9 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.KROOKODILE])) // Tera Dark Krookodile .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.SCRAFTY])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ZOROARK, Species.HISUI_SAMUROTT])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.KINGAMBIT], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.KINGAMBIT], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3161,7 +3236,9 @@ export const trainerConfigs: TrainerConfigs = { .setMixedBattleBgm("battle_unova_elite") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.MUSHARNA])) .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.REUNICLUS])) // Tera Psychic Reuniclus - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GALLADE], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 3, + getRandomPartyMemberFunc([Species.GALLADE], TrainerSlot.TRAINER, true, p => { p.abilityIndex = 1; // Sharpness p.generateAndPopulateMoveset(); }), @@ -3177,19 +3254,25 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.MALVA]: new TrainerConfig(++t) .initForEliteFour(signatureSpecies["MALVA"], false, PokemonType.FIRE, 2) .setMixedBattleBgm("battle_kalos_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PYROAR], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 0, + getRandomPartyMemberFunc([Species.PYROAR], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.FEMALE; }), ) .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.HOUNDOOM])) // Tera Fire Houndoom - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.TORKOAL], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 3, + getRandomPartyMemberFunc([Species.TORKOAL], TrainerSlot.TRAINER, true, p => { p.abilityIndex = 1; // Drought p.generateAndPopulateMoveset(); }), ) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CHANDELURE, Species.DELPHOX])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.TALONFLAME], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.TALONFLAME], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3201,7 +3284,9 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.GYARADOS])) // Tera Water Gyarados .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.STARMIE])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.BLASTOISE, Species.DONDOZO])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.BARBARACLE], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.BARBARACLE], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.abilityIndex = 1; // Tough Claws p.generateAndPopulateMoveset(); @@ -3211,16 +3296,22 @@ export const trainerConfigs: TrainerConfigs = { .initForEliteFour(signatureSpecies["WIKSTROM"], true, PokemonType.STEEL, 2) .setMixedBattleBgm("battle_kalos_elite") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.KLEFKI])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.CERULEDGE], TrainerSlot.TRAINER, true, p => { // Tera Steel Ceruledge + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.CERULEDGE], TrainerSlot.TRAINER, true, p => { + // Tera Steel Ceruledge p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.IRON_HEAD)) { // Check if Iron Head is in the moveset, if not, replace the third move with Iron Head. + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.IRON_HEAD)) { + // Check if Iron Head is in the moveset, if not, replace the third move with Iron Head. p.moveset[2] = new PokemonMove(Moves.IRON_HEAD); } }), ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.SCIZOR])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CORVIKNIGHT])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.AEGISLASH], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.AEGISLASH], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3232,7 +3323,9 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.GARCHOMP])) // Tera Dragon Garchomp .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.ALTARIA])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.DRUDDIGON])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.NOIVERN], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.NOIVERN], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3241,16 +3334,22 @@ export const trainerConfigs: TrainerConfigs = { .initForEliteFour(signatureSpecies["HALA"], true, PokemonType.FIGHTING, 2) .setMixedBattleBgm("battle_alola_elite") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.HARIYAMA])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.INCINEROAR], TrainerSlot.TRAINER, true, p => { // Tera Fighting Incineroar + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.INCINEROAR], TrainerSlot.TRAINER, true, p => { + // Tera Fighting Incineroar p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.CROSS_CHOP)) { // Check if Cross Chop is in the moveset, if not, replace the third move with Cross Chop. + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.CROSS_CHOP)) { + // Check if Cross Chop is in the moveset, if not, replace the third move with Cross Chop. p.moveset[2] = new PokemonMove(Moves.CROSS_CHOP); } }), ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.BEWEAR])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.POLIWRATH, Species.ANNIHILAPE])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.CRABOMINABLE], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.CRABOMINABLE], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3262,7 +3361,9 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.ALOLA_SANDSLASH])) // Tera Steel A-Sandslash .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.MAGNEZONE])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.METAGROSS, Species.KINGAMBIT])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.ALOLA_DUGTRIO], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.ALOLA_DUGTRIO], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3270,7 +3371,9 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.OLIVIA]: new TrainerConfig(++t) .initForEliteFour(signatureSpecies["OLIVIA"], false, PokemonType.ROCK, 2) .setMixedBattleBgm("battle_alola_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.GIGALITH], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 0, + getRandomPartyMemberFunc([Species.GIGALITH], TrainerSlot.TRAINER, true, p => { p.abilityIndex = 1; // Sand Stream p.generateAndPopulateMoveset(); }), @@ -3278,7 +3381,9 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.PROBOPASS])) // Tera Rock Probopass .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.ALOLA_GOLEM])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.RELICANTH, Species.CARBINK])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.LYCANROC], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.LYCANROC], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.formIndex = 1; p.generateAndPopulateMoveset(); @@ -3291,7 +3396,9 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.MIMIKYU])) // Tera Ghost Mimikyu .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.DHELMISE])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.FROSLASS])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.PALOSSAND], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.PALOSSAND], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3300,16 +3407,22 @@ export const trainerConfigs: TrainerConfigs = { .initForEliteFour(signatureSpecies["KAHILI"], false, PokemonType.FLYING, 2) .setMixedBattleBgm("battle_alola_elite") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.HAWLUCHA])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.DECIDUEYE], TrainerSlot.TRAINER, true, p => { // Tera Flying Decidueye + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.DECIDUEYE], TrainerSlot.TRAINER, true, p => { + // Tera Flying Decidueye p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.BRAVE_BIRD)) { // Check if Brave Bird is in the moveset, if not, replace the third move with Brave Bird. + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.BRAVE_BIRD)) { + // Check if Brave Bird is in the moveset, if not, replace the third move with Brave Bird. p.moveset[2] = new PokemonMove(Moves.BRAVE_BIRD); } }), ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.BRAVIARY, Species.MANDIBUZZ])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ORICORIO])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.TOUCANNON], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.TOUCANNON], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3319,7 +3432,10 @@ export const trainerConfigs: TrainerConfigs = { .initForEliteFour(signatureSpecies["MARNIE_ELITE"], false, PokemonType.DARK, 2) .setMixedBattleBgm("battle_galar_elite") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.LIEPARD])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.TOXICROAK], TrainerSlot.TRAINER, true, p => { // Tera Dark Toxicroak + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.TOXICROAK], TrainerSlot.TRAINER, true, p => { + // Tera Dark Toxicroak p.generateAndPopulateMoveset(); if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.SUCKER_PUNCH)) { // Check if Sucker Punch is in the moveset, if not, replace the third move with Sucker Punch. @@ -3329,7 +3445,9 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.SCRAFTY, Species.PANGORO])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.MORPEKO])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.GRIMMSNARL], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.GRIMMSNARL], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3339,20 +3457,28 @@ export const trainerConfigs: TrainerConfigs = { .initForEliteFour(signatureSpecies["NESSA_ELITE"], false, PokemonType.WATER, 2) .setMixedBattleBgm("battle_galar_elite") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.GOLISOPOD])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.EISCUE], TrainerSlot.TRAINER, true, p => { // Tera Water Eiscue + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.EISCUE], TrainerSlot.TRAINER, true, p => { + // Tera Water Eiscue p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.LIQUIDATION)) { // Check if Liquidation is in the moveset, if not, replace the third move with Liquidation. + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.LIQUIDATION)) { + // Check if Liquidation is in the moveset, if not, replace the third move with Liquidation. p.moveset[2] = new PokemonMove(Moves.LIQUIDATION); } }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.PELIPPER], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 3, + getRandomPartyMemberFunc([Species.PELIPPER], TrainerSlot.TRAINER, true, p => { p.abilityIndex = 1; // Drizzle p.generateAndPopulateMoveset(); }), ) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.TOXAPEX])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.DREDNAW], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.DREDNAW], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3365,7 +3491,9 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SIRFETCHD])) // Tera Fighting Sirfetch'd .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GRAPPLOCT, Species.FALINKS])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.HITMONTOP])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.MACHAMP], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.MACHAMP], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3378,7 +3506,9 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.RUNERIGUS])) // Tera Ghost Runerigus .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.POLTEAGEIST, Species.SINISTCHA])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CURSOLA])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.GENGAR], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.GENGAR], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3388,17 +3518,23 @@ export const trainerConfigs: TrainerConfigs = { .initForEliteFour(signatureSpecies["RAIHAN_ELITE"], true, PokemonType.DRAGON, 2) .setMixedBattleBgm("battle_galar_elite") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.FLYGON])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.TORKOAL], TrainerSlot.TRAINER, true, p => { // Tera Dragon Torkoal + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.TORKOAL], TrainerSlot.TRAINER, true, p => { + // Tera Dragon Torkoal p.abilityIndex = 1; // Drought p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { + // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); } }), ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GOODRA])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.TURTONATOR])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.ARCHALUDON], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.ARCHALUDON], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3410,7 +3546,10 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.DONPHAN])) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.SWAMPERT, Species.TORTERRA])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CAMERUPT])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.CLODSIRE], TrainerSlot.TRAINER, true, p => { // Tera Ground Clodsire + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.CLODSIRE], TrainerSlot.TRAINER, true, p => { + // Tera Ground Clodsire p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3420,13 +3559,18 @@ export const trainerConfigs: TrainerConfigs = { .setMixedBattleBgm("battle_paldea_elite") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.COPPERAJAH])) .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.MAGNEZONE])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.BRONZONG, Species.CORVIKNIGHT], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 3, + getRandomPartyMemberFunc([Species.BRONZONG, Species.CORVIKNIGHT], TrainerSlot.TRAINER, true, p => { p.abilityIndex = p.species.speciesId === Species.BRONZONG ? 0 : 1; // Levitate Bronzong, Unnerve Corviknight p.generateAndPopulateMoveset(); }), ) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.STEELIX])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.TINKATON], TrainerSlot.TRAINER, true, p => { // Tera Steel Tinkaton + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.TINKATON], TrainerSlot.TRAINER, true, p => { + // Tera Steel Tinkaton p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3439,7 +3583,10 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.BOMBIRDIER])) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.TROPIUS])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.STARAPTOR])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.FLAMIGO], TrainerSlot.TRAINER, true, p => { // Tera Flying Flamigo + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.FLAMIGO], TrainerSlot.TRAINER, true, p => { + // Tera Flying Flamigo p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3451,7 +3598,10 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.DRAGALGE])) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.FLAPPLE, Species.APPLETUN, Species.HYDRAPPLE])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.HAXORUS])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.BAXCALIBUR], TrainerSlot.TRAINER, true, p => { // Tera Dragon Baxcalibur + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.BAXCALIBUR], TrainerSlot.TRAINER, true, p => { + // Tera Dragon Baxcalibur p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3459,27 +3609,38 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.CRISPIN]: new TrainerConfig(++t) .initForEliteFour(signatureSpecies["CRISPIN"], true, PokemonType.FIRE, 2) .setMixedBattleBgm("battle_bb_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ROTOM], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 0, + getRandomPartyMemberFunc([Species.ROTOM], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Heat Rotom p.generateAndPopulateMoveset(); }), ) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.EXEGGUTOR], TrainerSlot.TRAINER, true, p => { // Tera Fire Exeggutor + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.EXEGGUTOR], TrainerSlot.TRAINER, true, p => { + // Tera Fire Exeggutor p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { + // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); } }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.TALONFLAME], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 3, + getRandomPartyMemberFunc([Species.TALONFLAME], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.SUNNY_DAY)) { // Check if Sunny Day is in the moveset, if not, replace the third move with Sunny Day. + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.SUNNY_DAY)) { + // Check if Sunny Day is in the moveset, if not, replace the third move with Sunny Day. p.moveset[2] = new PokemonMove(Moves.SUNNY_DAY); } }), ) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.MAGMORTAR])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.BLAZIKEN], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.BLAZIKEN], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3488,16 +3649,22 @@ export const trainerConfigs: TrainerConfigs = { .initForEliteFour(signatureSpecies["AMARYS"], false, PokemonType.STEEL, 2) .setMixedBattleBgm("battle_bb_elite") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SKARMORY])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.REUNICLUS], TrainerSlot.TRAINER, true, p => { // Tera Steel Reuniclus + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.REUNICLUS], TrainerSlot.TRAINER, true, p => { + // Tera Steel Reuniclus p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.FLASH_CANNON)) { // Check if Flash Cannon is in the moveset, if not, replace the third move with Flash Cannon. + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.FLASH_CANNON)) { + // Check if Flash Cannon is in the moveset, if not, replace the third move with Flash Cannon. p.moveset[2] = new PokemonMove(Moves.FLASH_CANNON); } }), ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.EMPOLEON])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SCIZOR])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.METAGROSS], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.METAGROSS], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3509,10 +3676,14 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.PRIMARINA])) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GRANBULL])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ALCREMIE])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.EXCADRILL], TrainerSlot.TRAINER, true, p => { // Tera Fairy Excadrill + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.EXCADRILL], TrainerSlot.TRAINER, true, p => { + // Tera Fairy Excadrill p.setBoss(true, 2); p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { + // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); } }), @@ -3521,16 +3692,22 @@ export const trainerConfigs: TrainerConfigs = { .initForEliteFour(signatureSpecies["DRAYTON"], true, PokemonType.DRAGON, 2) .setMixedBattleBgm("battle_bb_elite") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.DRAGONITE])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SCEPTILE], TrainerSlot.TRAINER, true, p => { // Tera Dragon Sceptile + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.SCEPTILE], TrainerSlot.TRAINER, true, p => { + // Tera Dragon Sceptile p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.DUAL_CHOP)) { // Check if Dual Chop is in the moveset, if not, replace the third move with Dual Chop. + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.DUAL_CHOP)) { + // Check if Dual Chop is in the moveset, if not, replace the third move with Dual Chop. p.moveset[2] = new PokemonMove(Moves.DUAL_CHOP); } }), ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.HAXORUS])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.KINGDRA, Species.DRACOVISH])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.ARCHALUDON], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.ARCHALUDON], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3545,18 +3722,29 @@ export const trainerConfigs: TrainerConfigs = { .setDoubleTitle("champion_double") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ALAKAZAM])) .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.MACHAMP])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.HO_OH], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.HO_OH], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.RHYPERIOR, Species.ELECTIVIRE])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ARCANINE, Species.EXEGGUTOR, Species.GYARADOS], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 4, + getRandomPartyMemberFunc( + [Species.ARCANINE, Species.EXEGGUTOR, Species.GYARADOS], + TrainerSlot.TRAINER, + true, + p => { p.generateAndPopulateMoveset(); p.setBoss(true, 2); - }), + }, + ), ) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.PIDGEOT], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.PIDGEOT], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Pidgeot p.generateAndPopulateMoveset(); p.generateName(); @@ -3571,7 +3759,9 @@ export const trainerConfigs: TrainerConfigs = { .setHasDouble("red_blue_double") .setDoubleTrainerType(TrainerType.BLUE) .setDoubleTitle("champion_double") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PIKACHU], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 0, + getRandomPartyMemberFunc([Species.PIKACHU], TrainerSlot.TRAINER, true, p => { p.formIndex = 8; // G-Max Pikachu p.generateAndPopulateMoveset(); p.generateName(); @@ -3579,24 +3769,34 @@ export const trainerConfigs: TrainerConfigs = { }), ) .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.ESPEON, Species.UMBREON, Species.SYLVEON])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.LUGIA], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.LUGIA], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SNORLAX], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 4, + getRandomPartyMemberFunc([Species.SNORLAX], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.setBoss(true, 2); }), ) - .setPartyMemberFunc(5, getRandomPartyMemberFunc( - [Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc( + [Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE], + TrainerSlot.TRAINER, + true, + p => { p.formIndex = 1; // Mega Venusaur, Mega Charizard X, or Mega Blastoise p.generateAndPopulateMoveset(); p.generateName(); p.gender = Gender.MALE; - }), + }, + ), ) .setInstantTera(3), // Tera Grass Meganium / Fire Typhlosion / Water Feraligatr [TrainerType.LANCE_CHAMPION]: new TrainerConfig(++t) @@ -3606,20 +3806,26 @@ export const trainerConfigs: TrainerConfigs = { .setMixedBattleBgm("battle_johto_champion") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.GYARADOS, Species.KINGDRA])) .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.AERODACTYL])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SALAMENCE], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.SALAMENCE], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Salamence p.generateAndPopulateMoveset(); p.generateName(); }), ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.CHARIZARD])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.TYRANITAR, Species.GARCHOMP, Species.KOMMO_O], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 4, + getRandomPartyMemberFunc([Species.TYRANITAR, Species.GARCHOMP, Species.KOMMO_O], TrainerSlot.TRAINER, true, p => { p.teraType = PokemonType.DRAGON; p.generateAndPopulateMoveset(); p.abilityIndex = p.species.speciesId === Species.KOMMO_O ? 1 : 2; // Soundproof Kommo-o, Unnerve Tyranitar, Rough Skin Garchomp }), ) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.DRAGONITE], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.DRAGONITE], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; p.setBoss(true, 2); @@ -3635,18 +3841,24 @@ export const trainerConfigs: TrainerConfigs = { .setDoubleTitle("champion_double") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SKARMORY])) .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.CRADILY, Species.ARMALDO])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.AGGRON], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.AGGRON], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.setBoss(true, 2); }), ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GOLURK, Species.RUNERIGUS])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.REGIROCK, Species.REGICE, Species.REGISTEEL], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 4, + getRandomPartyMemberFunc([Species.REGIROCK, Species.REGICE, Species.REGISTEEL], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), ) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.METAGROSS], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.METAGROSS], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Metagross p.generateAndPopulateMoveset(); p.generateName(); @@ -3660,13 +3872,17 @@ export const trainerConfigs: TrainerConfigs = { .setHasDouble("wallace_steven_double") .setDoubleTrainerType(TrainerType.STEVEN) .setDoubleTitle("champion_double") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PELIPPER], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 0, + getRandomPartyMemberFunc([Species.PELIPPER], TrainerSlot.TRAINER, true, p => { p.abilityIndex = 1; // Drizzle p.generateAndPopulateMoveset(); }), ) .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.LUDICOLO])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.LATIAS, Species.LATIOS], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.LATIAS, Species.LATIOS], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Latios or Mega Latias p.generateAndPopulateMoveset(); p.generateName(); @@ -3674,12 +3890,16 @@ export const trainerConfigs: TrainerConfigs = { }), ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.SWAMPERT, Species.GASTRODON, Species.SEISMITOAD])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.REGIELEKI, Species.REGIDRAGO], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 4, + getRandomPartyMemberFunc([Species.REGIELEKI, Species.REGIDRAGO], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), ) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.MILOTIC], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.MILOTIC], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.FEMALE; p.setBoss(true, 2); @@ -3692,22 +3912,35 @@ export const trainerConfigs: TrainerConfigs = { .setMixedBattleBgm("battle_sinnoh_champion") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SPIRITOMB])) .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.LUCARIO])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.GIRATINA], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.GIRATINA], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.MILOTIC, Species.ROSERADE, Species.HISUI_ARCANINE], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.teraType = p.species.type1; - }), + .setPartyMemberFunc( + 3, + getRandomPartyMemberFunc( + [Species.MILOTIC, Species.ROSERADE, Species.HISUI_ARCANINE], + TrainerSlot.TRAINER, + true, + p => { + p.generateAndPopulateMoveset(); + p.teraType = p.species.type1; + }, + ), ) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.TOGEKISS], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 4, + getRandomPartyMemberFunc([Species.TOGEKISS], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.setBoss(true, 2); }), ) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.GARCHOMP], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.GARCHOMP], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Garchomp p.generateAndPopulateMoveset(); p.generateName(); @@ -3723,28 +3956,47 @@ export const trainerConfigs: TrainerConfigs = { .setBattleBgm("battle_champion_alder") .setMixedBattleBgm("battle_champion_alder") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.BOUFFALANT, Species.BRAVIARY])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.HISUI_LILLIGANT, Species.HISUI_ZOROARK, Species.BASCULEGION], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 1, + getRandomPartyMemberFunc( + [Species.HISUI_LILLIGANT, Species.HISUI_ZOROARK, Species.BASCULEGION], + TrainerSlot.TRAINER, + true, + p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ROGUE_BALL; - }), + }, + ), ) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.ZEKROM], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.ZEKROM], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.KELDEO], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 3, + getRandomPartyMemberFunc([Species.KELDEO], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), ) - .setPartyMemberFunc(4, getRandomPartyMemberFunc( - [Species.CHANDELURE, Species.KROOKODILE, Species.REUNICLUS, Species.CONKELDURR], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.teraType = p.species.speciesId === Species.KROOKODILE ? PokemonType.DARK : p.species.type1; - }), + .setPartyMemberFunc( + 4, + getRandomPartyMemberFunc( + [Species.CHANDELURE, Species.KROOKODILE, Species.REUNICLUS, Species.CONKELDURR], + TrainerSlot.TRAINER, + true, + p => { + p.generateAndPopulateMoveset(); + p.teraType = p.species.speciesId === Species.KROOKODILE ? PokemonType.DARK : p.species.type1; + }, + ), ) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.VOLCARONA], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.VOLCARONA], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; p.setBoss(true, 2); @@ -3760,23 +4012,36 @@ export const trainerConfigs: TrainerConfigs = { .setDoubleTitle("champion_double") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.DRUDDIGON])) .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.ARCHEOPS])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.RESHIRAM], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.RESHIRAM], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.SALAMENCE, Species.HYDREIGON, Species.ARCHALUDON], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.teraType = PokemonType.DRAGON; - }), + .setPartyMemberFunc( + 3, + getRandomPartyMemberFunc( + [Species.SALAMENCE, Species.HYDREIGON, Species.ARCHALUDON], + TrainerSlot.TRAINER, + true, + p => { + p.generateAndPopulateMoveset(); + p.teraType = PokemonType.DRAGON; + }, + ), ) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.LAPRAS], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 4, + getRandomPartyMemberFunc([Species.LAPRAS], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // G-Max Lapras p.generateAndPopulateMoveset(); p.generateName(); }), ) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.HAXORUS], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.HAXORUS], TrainerSlot.TRAINER, true, p => { p.abilityIndex = 1; // Mold Breaker p.generateAndPopulateMoveset(); p.gender = Gender.FEMALE; @@ -3787,28 +4052,38 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.DIANTHA]: new TrainerConfig(++t) .initForChampion(false) .setMixedBattleBgm("battle_kalos_champion") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.HAWLUCHA], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 0, + getRandomPartyMemberFunc([Species.HAWLUCHA], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); }), ) .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.TREVENANT, Species.GOURGEIST])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.XERNEAS], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.XERNEAS], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.TYRANTRUM, Species.AURORUS], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 3, + getRandomPartyMemberFunc([Species.TYRANTRUM, Species.AURORUS], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.abilityIndex = 2; // Rock Head Tyrantrum, Snow Warning Aurorus p.teraType = p.species.type2!; }), ) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.GOODRA], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 4, + getRandomPartyMemberFunc([Species.GOODRA], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.setBoss(true, 2); }), ) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.GARDEVOIR], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.GARDEVOIR], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Gardevoir p.generateAndPopulateMoveset(); p.generateName(); @@ -3819,29 +4094,45 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.KUKUI]: new TrainerConfig(++t) .initForChampion(true) .setMixedBattleBgm("battle_champion_kukui") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.LYCANROC], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 0, + getRandomPartyMemberFunc([Species.LYCANROC], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.formIndex = 2; // Dusk Lycanroc }), ) .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.MAGNEZONE, Species.ALOLA_NINETALES])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.TORNADUS, Species.THUNDURUS, Species.LANDORUS], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Therian Formes + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc( + [Species.TORNADUS, Species.THUNDURUS, Species.LANDORUS], + TrainerSlot.TRAINER, + true, + p => { + p.formIndex = 1; // Therian Formes p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; - }), + }, + ), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.TAPU_KOKO, Species.TAPU_FINI], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 3, + getRandomPartyMemberFunc([Species.TAPU_KOKO, Species.TAPU_FINI], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.setBoss(true, 2); p.pokeball = PokeballType.ULTRA_BALL; }), ) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SNORLAX], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 4, + getRandomPartyMemberFunc([Species.SNORLAX], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.formIndex = 1; // G-Max Snorlax }), ) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.INCINEROAR, Species.HISUI_DECIDUEYE], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.INCINEROAR, Species.HISUI_DECIDUEYE], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; p.teraType = p.species.type2!; @@ -3853,24 +4144,32 @@ export const trainerConfigs: TrainerConfigs = { .setMixedBattleBgm("battle_alola_champion") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ALOLA_RAICHU])) .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.NOIVERN])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SOLGALEO], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.SOLGALEO], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.TAPU_LELE, Species.TAPU_BULU], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 3, + getRandomPartyMemberFunc([Species.TAPU_LELE, Species.TAPU_BULU], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.teraType = p.species.type1; }), ) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ZYGARDE], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 4, + getRandomPartyMemberFunc([Species.ZYGARDE], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Zygarde 10% forme, Aura Break p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ROGUE_BALL; }), ) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.DECIDUEYE, Species.PRIMARINA], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.DECIDUEYE, Species.PRIMARINA], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.setBoss(true, 2); p.gender = p.species.speciesId === Species.PRIMARINA ? Gender.FEMALE : Gender.MALE; @@ -3882,18 +4181,29 @@ export const trainerConfigs: TrainerConfigs = { .setMixedBattleBgm("battle_galar_champion") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.AEGISLASH])) .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.RHYPERIOR, Species.SEISMITOAD, Species.MR_RIME])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.ZACIAN], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.ZACIAN], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.DRAGAPULT])) - .setPartyMemberFunc(4,getRandomPartyMemberFunc([Species.RILLABOOM, Species.CINDERACE, Species.INTELEON], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 4, + getRandomPartyMemberFunc( + [Species.RILLABOOM, Species.CINDERACE, Species.INTELEON], + TrainerSlot.TRAINER, + true, + p => { p.generateAndPopulateMoveset(); p.setBoss(true, 2); - }), + }, + ), ) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.CHARIZARD], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.CHARIZARD], TrainerSlot.TRAINER, true, p => { p.formIndex = 3; // G-Max Charizard p.generateAndPopulateMoveset(); p.generateName(); @@ -3904,35 +4214,47 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.MUSTARD]: new TrainerConfig(++t) .initForChampion(true) .setMixedBattleBgm("battle_mustard") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.CORVIKNIGHT], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 0, + getRandomPartyMemberFunc([Species.CORVIKNIGHT], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), ) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.KOMMO_O], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 1, + getRandomPartyMemberFunc([Species.KOMMO_O], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), ) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.GALAR_SLOWBRO, Species.GALAR_SLOWKING], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.GALAR_SLOWBRO, Species.GALAR_SLOWKING], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.teraType = p.species.type1; }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GALAR_DARMANITAN], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 3, + getRandomPartyMemberFunc([Species.GALAR_DARMANITAN], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), ) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.BLASTOISE, Species.VENUSAUR], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 4, + getRandomPartyMemberFunc([Species.BLASTOISE, Species.VENUSAUR], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.setBoss(true, 2); p.pokeball = PokeballType.ULTRA_BALL; }), ) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.URSHIFU], TrainerSlot.TRAINER, true, p => { - p.formIndex = randSeedInt(2, 2); // Random G-Max Urshifu + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.URSHIFU], TrainerSlot.TRAINER, true, p => { + p.formIndex = randSeedIntRange(2, 3); // Random G-Max Urshifu p.generateAndPopulateMoveset(); p.generateName(); p.gender = Gender.MALE; @@ -3943,21 +4265,27 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.GEETA]: new TrainerConfig(++t) .initForChampion(false) .setMixedBattleBgm("battle_champion_geeta") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.GLIMMORA], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 0, + getRandomPartyMemberFunc([Species.GLIMMORA], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; p.setBoss(true, 2); }), ) .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.ESPATHRA, Species.VELUZA])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.MIRAIDON], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.MIRAIDON], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.BAXCALIBUR])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.KINGAMBIT], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.KINGAMBIT], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. @@ -3971,50 +4299,71 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.NEMONA]: new TrainerConfig(++t) .initForChampion(false) .setMixedBattleBgm("battle_champion_nemona") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.LYCANROC], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 0, + getRandomPartyMemberFunc([Species.LYCANROC], TrainerSlot.TRAINER, true, p => { p.formIndex = 0; // Midday form p.generateAndPopulateMoveset(); }), ) .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PAWMOT])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.KORAIDON], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.KORAIDON], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GHOLDENGO])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ARMAROUGE, Species.CERULEDGE], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 4, + getRandomPartyMemberFunc([Species.ARMAROUGE, Species.CERULEDGE], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.teraType = p.species.type2!; }), ) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc( + [Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], + TrainerSlot.TRAINER, + true, + p => { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; p.setBoss(true, 2); - }), + }, + ), ) .setInstantTera(4), // Tera Psychic Armarouge / Ghost Ceruledge [TrainerType.KIERAN]: new TrainerConfig(++t) .initForChampion(true) .setMixedBattleBgm("battle_champion_kieran") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.POLIWRATH, Species.POLITOED])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.INCINEROAR, Species.GRIMMSNARL], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 1, + getRandomPartyMemberFunc([Species.INCINEROAR, Species.GRIMMSNARL], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.abilityIndex = p.species.speciesId === Species.INCINEROAR ? 2 : 0; // Intimidate Incineroar, Prankster Grimmsnarl }), ) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.TERAPAGOS], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 2, + getRandomPartyMemberFunc([Species.TERAPAGOS], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.URSALUNA, Species.BLOODMOON_URSALUNA], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 3, + getRandomPartyMemberFunc([Species.URSALUNA, Species.BLOODMOON_URSALUNA], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), ) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.OGERPON], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 4, + getRandomPartyMemberFunc([Species.OGERPON], TrainerSlot.TRAINER, true, p => { p.formIndex = randSeedInt(4); // Random Ogerpon Tera Mask p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; @@ -4024,7 +4373,9 @@ export const trainerConfigs: TrainerConfigs = { } }), ) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.HYDRAPPLE], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc( + 5, + getRandomPartyMemberFunc([Species.HYDRAPPLE], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; p.setBoss(true, 2); diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 983494b36c8..8abe3a303ca 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -54,7 +54,7 @@ import { getStarterValueFriendshipCap, speciesStarterCosts, } from "#app/data/balance/starters"; -import { NumberHolder, randSeedInt, getIvsFromId, BooleanHolder, randSeedItem, isNullOrUndefined, getEnumValues, toDmgValue, fixedInt, rgbaToInt, rgbHexToRgba, rgbToHsv, deltaRgb, isBetween, type nil, type Constructor } from "#app/utils/common"; +import { NumberHolder, randSeedInt, getIvsFromId, BooleanHolder, randSeedItem, isNullOrUndefined, getEnumValues, toDmgValue, fixedInt, rgbaToInt, rgbHexToRgba, rgbToHsv, deltaRgb, isBetween, type nil, type Constructor, randSeedIntRange } from "#app/utils/common"; import type { TypeDamageMultiplier } from "#app/data/type"; import { getTypeDamageMultiplier, getTypeRgb } from "#app/data/type"; import { PokemonType } from "#enums/pokemon-type"; @@ -4485,7 +4485,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { */ const randomMultiplier = simulated ? 1 - : this.randSeedIntRange(85, 100) / 100; + : this.randBattleSeedIntRange(85, 100) / 100; /** A damage multiplier for when the attack is of the attacker's type and/or Tera type. */ @@ -5629,7 +5629,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { let sleepTurnsRemaining: NumberHolder; if (effect === StatusEffect.SLEEP) { - sleepTurnsRemaining = new NumberHolder(this.randSeedIntRange(2, 4)); + sleepTurnsRemaining = new NumberHolder(this.randBattleSeedIntRange(2, 4)); this.setFrameRate(4); @@ -6292,7 +6292,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param min The minimum integer to pick, default `0` * @returns A random integer between {@linkcode min} and ({@linkcode min} + {@linkcode range} - 1) */ - randSeedInt(range: number, min = 0): number { + randBattleSeedInt(range: number, min = 0): number { return globalScene.currentBattle ? globalScene.randBattleSeedInt(range, min) : randSeedInt(range, min); @@ -6304,8 +6304,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param max The maximum integer to generate * @returns a random integer between {@linkcode min} and {@linkcode max} inclusive */ - randSeedIntRange(min: number, max: number): number { - return this.randSeedInt(max - min + 1, min); + randBattleSeedIntRange(min: number, max: number): number { + return globalScene.currentBattle + ? globalScene.randBattleSeedInt(max - min + 1, min) + : randSeedIntRange(min, max); } /** @@ -7143,7 +7145,7 @@ export class EnemyPokemon extends Pokemon { const { waveIndex } = globalScene.currentBattle; const ivs: number[] = []; while (ivs.length < 6) { - ivs.push(this.randSeedIntRange(Math.floor(waveIndex / 10), 31)); + ivs.push(randSeedIntRange(Math.floor(waveIndex / 10), 31)); } this.ivs = ivs; } diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 763b40c8555..94bb0e3419a 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -1548,7 +1548,7 @@ export class SurviveDamageModifier extends PokemonHeldItemModifier { * @returns `true` if the survive damage has been applied */ override apply(pokemon: Pokemon, surviveDamage: BooleanHolder): boolean { - if (!surviveDamage.value && pokemon.randSeedInt(10) < this.getStackCount()) { + if (!surviveDamage.value && pokemon.randBattleSeedInt(10) < this.getStackCount()) { surviveDamage.value = true; globalScene.queueMessage( @@ -1594,7 +1594,7 @@ export class BypassSpeedChanceModifier extends PokemonHeldItemModifier { * @returns `true` if {@linkcode BypassSpeedChanceModifier} has been applied */ override apply(pokemon: Pokemon, doBypassSpeed: BooleanHolder): boolean { - if (!doBypassSpeed.value && pokemon.randSeedInt(10) < this.getStackCount()) { + if (!doBypassSpeed.value && pokemon.randBattleSeedInt(10) < this.getStackCount()) { doBypassSpeed.value = true; const isCommandFight = globalScene.currentBattle.turnCommands[pokemon.getBattlerIndex()]?.command === Command.FIGHT; @@ -1658,7 +1658,7 @@ export class FlinchChanceModifier extends PokemonHeldItemModifier { override apply(pokemon: Pokemon, flinched: BooleanHolder): boolean { // The check for pokemon.summonData is to ensure that a crash doesn't occur when a Pokemon with King's Rock procs a flinch // TODO: Since summonData is always defined now, we can probably remove this - if (pokemon.summonData && !flinched.value && pokemon.randSeedInt(100) < this.getStackCount() * this.chance) { + if (pokemon.summonData && !flinched.value && pokemon.randBattleSeedInt(100) < this.getStackCount() * this.chance) { flinched.value = true; return true; } @@ -1927,7 +1927,7 @@ export class PreserveBerryModifier extends PersistentModifier { * @returns always `true` */ override apply(pokemon: Pokemon, doPreserve: BooleanHolder): boolean { - doPreserve.value ||= pokemon.randSeedInt(10) < this.getStackCount() * 3; + doPreserve.value ||= pokemon.randBattleSeedInt(10) < this.getStackCount() * 3; return true; } @@ -3240,7 +3240,7 @@ export abstract class HeldItemTransferModifier extends PokemonHeldItemModifier { return false; } - const targetPokemon = opponents[pokemon.randSeedInt(opponents.length)]; + const targetPokemon = opponents[pokemon.randBattleSeedInt(opponents.length)]; const transferredItemCount = this.getTransferredItemCount(); if (!transferredItemCount) { @@ -3272,7 +3272,7 @@ export abstract class HeldItemTransferModifier extends PokemonHeldItemModifier { break; } } - const randItemIndex = pokemon.randSeedInt(itemModifiers.length); + const randItemIndex = pokemon.randBattleSeedInt(itemModifiers.length); const randItem = itemModifiers[randItemIndex]; if (globalScene.tryTransferHeldItemModifier(randItem, pokemon, false)) { transferredModifierTypes.push(randItem.type); @@ -3731,7 +3731,7 @@ export class EnemyEndureChanceModifier extends EnemyPersistentModifier { * @returns `true` if {@linkcode Pokemon} endured */ override apply(target: Pokemon): boolean { - if (target.waveData.endured || target.randSeedInt(100) >= this.chance * this.getStackCount()) { + if (target.waveData.endured || target.randBattleSeedInt(100) >= this.chance * this.getStackCount()) { return false; } diff --git a/src/phases/attempt-capture-phase.ts b/src/phases/attempt-capture-phase.ts index 795aa7010e1..8592cd98508 100644 --- a/src/phases/attempt-capture-phase.ts +++ b/src/phases/attempt-capture-phase.ts @@ -63,7 +63,7 @@ export class AttemptCapturePhase extends PokemonPhase { const modifiedCatchRate = Math.round((((_3m - _2h) * catchRate * pokeballMultiplier) / _3m) * statusMultiplier); const shakeProbability = Math.round(65536 / Math.pow(255 / modifiedCatchRate, 0.1875)); // Formula taken from gen 6 const criticalCaptureChance = getCriticalCaptureChance(modifiedCatchRate); - const isCritical = pokemon.randSeedInt(256) < criticalCaptureChance; + const isCritical = pokemon.randBattleSeedInt(256) < criticalCaptureChance; const fpOffset = pokemon.getFieldPositionOffset(); const pokeballAtlasKey = getPokeballAtlasKey(this.pokeballType); @@ -135,14 +135,14 @@ export class AttemptCapturePhase extends PokemonPhase { pokeballMultiplier === -1 || isCritical || modifiedCatchRate >= 255 || - pokemon.randSeedInt(65536) < shakeProbability + pokemon.randBattleSeedInt(65536) < shakeProbability ) { globalScene.playSound("se/pb_move"); } else { shakeCounter.stop(); this.failCatch(shakeCount); } - } else if (isCritical && pokemon.randSeedInt(65536) >= shakeProbability) { + } else if (isCritical && pokemon.randBattleSeedInt(65536) >= shakeProbability) { // Above, perform the one shake check for critical captures after the ball shakes once shakeCounter.stop(); this.failCatch(shakeCount); diff --git a/src/phases/attempt-run-phase.ts b/src/phases/attempt-run-phase.ts index 274d3c40576..15c521c01fc 100644 --- a/src/phases/attempt-run-phase.ts +++ b/src/phases/attempt-run-phase.ts @@ -34,7 +34,7 @@ export class AttemptRunPhase extends PokemonPhase { applyAbAttrs(RunSuccessAbAttr, playerPokemon, null, false, escapeChance); - if (playerPokemon.randSeedInt(100) < escapeChance.value && !this.forceFailEscape) { + if (playerPokemon.randBattleSeedInt(100) < escapeChance.value && !this.forceFailEscape) { enemyField.forEach(enemyPokemon => applyPreLeaveFieldAbAttrs(PreLeaveFieldAbAttr, enemyPokemon)); globalScene.playSound("se/flee"); diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index d067807486d..59f5ac69fd8 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -594,7 +594,7 @@ export class MoveEffectPhase extends PokemonPhase { } const accuracyMultiplier = user.getAccuracyMultiplier(target, this.move); - const rand = user.randSeedInt(100); + const rand = user.randBattleSeedInt(100); if (rand < moveAccuracy * accuracyMultiplier) { return [HitCheckResult.HIT, effectiveness]; diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index e704b040d20..5d63fe6efea 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -232,7 +232,7 @@ export class MovePhase extends BattlePhase { switch (this.pokemon.status.effect) { case StatusEffect.PARALYSIS: activated = - (!this.pokemon.randSeedInt(4) || Overrides.STATUS_ACTIVATION_OVERRIDE === true) && + (!this.pokemon.randBattleSeedInt(4) || Overrides.STATUS_ACTIVATION_OVERRIDE === true) && Overrides.STATUS_ACTIVATION_OVERRIDE !== false; break; case StatusEffect.SLEEP: { @@ -258,7 +258,7 @@ export class MovePhase extends BattlePhase { .findAttr( attr => attr instanceof HealStatusEffectAttr && attr.selfTarget && attr.isOfEffect(StatusEffect.FREEZE), ) || - (!this.pokemon.randSeedInt(5) && Overrides.STATUS_ACTIVATION_OVERRIDE !== true) || + (!this.pokemon.randBattleSeedInt(5) && Overrides.STATUS_ACTIVATION_OVERRIDE !== true) || Overrides.STATUS_ACTIVATION_OVERRIDE === false; activated = !healed; diff --git a/src/utils/common.ts b/src/utils/common.ts index 4cf7ceccff2..b9111578e2f 100644 --- a/src/utils/common.ts +++ b/src/utils/common.ts @@ -99,6 +99,16 @@ export function randSeedInt(range: number, min = 0): number { return Phaser.Math.RND.integerInRange(min, range - 1 + min); } +/** + * Generates a random number using the global seed + * @param min The minimum integer to generate + * @param max The maximum integer to generate + * @returns a random integer between {@linkcode min} and {@linkcode max} inclusive + */ +export function randSeedIntRange(min: number, max: number): number { + return randSeedInt(max - min + 1, min); +} + /** * Returns a random integer between min and max (non-inclusive) * @param min The lowest number diff --git a/test/abilities/cud_chew.test.ts b/test/abilities/cud_chew.test.ts index f99060cb744..2f65ac5fd97 100644 --- a/test/abilities/cud_chew.test.ts +++ b/test/abilities/cud_chew.test.ts @@ -111,7 +111,7 @@ describe("Abilities - Cud Chew", () => { it("can store multiple berries across 2 turns with teatime", async () => { // always eat first berry for stuff cheeks & company - vi.spyOn(Pokemon.prototype, "randSeedInt").mockReturnValue(0); + vi.spyOn(Pokemon.prototype, "randBattleSeedInt").mockReturnValue(0); game.override .startingHeldItems([ { name: "BERRY", type: BerryType.PETAYA, count: 3 }, diff --git a/test/abilities/desolate-land.test.ts b/test/abilities/desolate-land.test.ts index d6f01f7aa5e..697bd0a4c48 100644 --- a/test/abilities/desolate-land.test.ts +++ b/test/abilities/desolate-land.test.ts @@ -139,7 +139,7 @@ describe("Abilities - Desolate Land", () => { await game.classicMode.startBattle([Species.MAGIKARP]); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN); - vi.spyOn(game.scene.getPlayerPokemon()!, "randSeedInt").mockReturnValue(0); + vi.spyOn(game.scene.getPlayerPokemon()!, "randBattleSeedInt").mockReturnValue(0); const commandPhase = game.scene.getCurrentPhase() as CommandPhase; commandPhase.handleCommand(Command.RUN, 0); diff --git a/test/abilities/neutralizing_gas.test.ts b/test/abilities/neutralizing_gas.test.ts index 32c61b72e4d..979583b7d97 100644 --- a/test/abilities/neutralizing_gas.test.ts +++ b/test/abilities/neutralizing_gas.test.ts @@ -164,7 +164,7 @@ describe("Abilities - Neutralizing Gas", () => { await game.classicMode.startBattle([Species.MAGIKARP]); expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeDefined(); - vi.spyOn(game.scene.getPlayerPokemon()!, "randSeedInt").mockReturnValue(0); + vi.spyOn(game.scene.getPlayerPokemon()!, "randBattleSeedInt").mockReturnValue(0); const commandPhase = game.scene.getCurrentPhase() as CommandPhase; commandPhase.handleCommand(Command.RUN, 0); diff --git a/test/items/reviver_seed.test.ts b/test/items/reviver_seed.test.ts index c109794d3d2..3c67481a904 100644 --- a/test/items/reviver_seed.test.ts +++ b/test/items/reviver_seed.test.ts @@ -73,7 +73,7 @@ describe("Items - Reviver Seed", () => { const reviverSeed = player.getHeldItems()[0] as PokemonInstantReviveModifier; vi.spyOn(reviverSeed, "apply"); - vi.spyOn(player, "randSeedInt").mockReturnValue(0); // Force confusion self-hit + vi.spyOn(player, "randBattleSeedInt").mockReturnValue(0); // Force confusion self-hit game.move.select(Moves.TACKLE); await game.phaseInterceptor.to("BerryPhase"); diff --git a/test/moves/u_turn.test.ts b/test/moves/u_turn.test.ts index 4ceb6865be0..9dca29414a1 100644 --- a/test/moves/u_turn.test.ts +++ b/test/moves/u_turn.test.ts @@ -74,7 +74,7 @@ describe("Moves - U-turn", () => { // arrange game.override.enemyAbility(Abilities.POISON_POINT); await game.classicMode.startBattle([Species.RAICHU, Species.SHUCKLE]); - vi.spyOn(game.scene.getEnemyPokemon()!, "randSeedInt").mockReturnValue(0); + vi.spyOn(game.scene.getEnemyPokemon()!, "randBattleSeedInt").mockReturnValue(0); // act game.move.select(Moves.U_TURN); From 4376a22a7c665e9070afbd60d9e994ea807727b8 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Sat, 17 May 2025 16:04:16 -0500 Subject: [PATCH 138/262] [Bug] Fix field moves always playing their animations (#5830) --- src/phases/move-effect-phase.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index 59f5ac69fd8..e3773952214 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -354,8 +354,8 @@ export class MoveEffectPhase extends PokemonPhase { move.id as Moves, user, firstTarget?.getBattlerIndex() ?? BattlerIndex.ATTACKER, - // Field moves and some moves used in mystery encounters should be played even on an empty field - fieldMove || (globalScene.currentBattle?.mysteryEncounter?.hasBattleAnimationsWithoutTargets ?? false), + // Some moves used in mystery encounters should be played even on an empty field + globalScene.currentBattle?.mysteryEncounter?.hasBattleAnimationsWithoutTargets ?? false, ).play(move.hitsSubstitute(user, firstTarget), () => this.postAnimCallback(user, targets)); return; From 22f5ed1232ec4b02811593ccd406da9873d4fbb6 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Sat, 17 May 2025 20:34:06 -0700 Subject: [PATCH 139/262] [i18n] Update locales --- public/locales | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/locales b/public/locales index ee6bb371afe..a074ddb28c3 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit ee6bb371afefe4c6d872cc7765f0e0d26e630d4e +Subproject commit a074ddb28c3f0c7e9bbd0560efa33e3ce5f71bcd From 9ae969117b0dd1d4bc39be3dd6d2624bd585dbaa Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Sun, 18 May 2025 00:22:09 -0500 Subject: [PATCH 140/262] [Bug][UI/UX] Fix fiery fallout message bug (#5834) * Fix fiery fallout message bug * Ensure pokemon names are replaced when there is no separator --- src/phases/message-phase.ts | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/phases/message-phase.ts b/src/phases/message-phase.ts index f6777579857..b277d67de82 100644 --- a/src/phases/message-phase.ts +++ b/src/phases/message-phase.ts @@ -35,20 +35,22 @@ export class MessagePhase extends Phase { this.text = this.text.split(pokename[p]).join(repname[p]); } const pageIndex = this.text.indexOf("$"); - for (let p = 0; p < globalScene.getPlayerField().length; p++) { - this.text = this.text.split(repname[p]).join(pokename[p]); - } if (pageIndex !== -1) { + let page0 = this.text.slice(0, pageIndex); + let page1 = this.text.slice(pageIndex + 1); + // Pokemon names must be re-inserted _after_ the split, otherwise the index will be wrong + for (let p = 0; p < globalScene.getPlayerField().length; p++) { + page0 = page0.split(repname[p]).join(pokename[p]); + page1 = page1.split(repname[p]).join(pokename[p]); + } globalScene.unshiftPhase( - new MessagePhase( - this.text.slice(pageIndex + 1), - this.callbackDelay, - this.prompt, - this.promptDelay, - this.speaker, - ), + new MessagePhase(page1, this.callbackDelay, this.prompt, this.promptDelay, this.speaker), ); - this.text = this.text.slice(0, pageIndex).trim(); + this.text = page0.trim(); + } else { + for (let p = 0; p < globalScene.getPlayerField().length; p++) { + this.text = this.text.split(repname[p]).join(pokename[p]); + } } } From bd14ed640c8c11da897128ca621e5951b7cd0113 Mon Sep 17 00:00:00 2001 From: Lugiad <2070109+Adri1@users.noreply.github.com> Date: Tue, 20 May 2025 00:00:51 +0200 Subject: [PATCH 141/262] [Localization] Localizable "Cancel" text in Ball selection menu (#5836) "Cancel" text localizable --- src/ui/ball-ui-handler.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ui/ball-ui-handler.ts b/src/ui/ball-ui-handler.ts index abb106a6553..eb7c208662a 100644 --- a/src/ui/ball-ui-handler.ts +++ b/src/ui/ball-ui-handler.ts @@ -7,6 +7,7 @@ import { addWindow } from "./ui-theme"; import { Button } from "#enums/buttons"; import type { CommandPhase } from "#app/phases/command-phase"; import { globalScene } from "#app/global-scene"; +import i18next from "i18next"; export default class BallUiHandler extends UiHandler { private pokeballSelectContainer: Phaser.GameObjects.Container; @@ -31,7 +32,7 @@ export default class BallUiHandler extends UiHandler { for (let pb = 0; pb < Object.keys(globalScene.pokeballCounts).length; pb++) { optionsTextContent += `${getPokeballName(pb)}\n`; } - optionsTextContent += "Cancel"; + optionsTextContent += i18next.t("pokeball:cancel"); const optionsText = addTextObject(0, 0, optionsTextContent, TextStyle.WINDOW, { align: "right", maxLines: 6 }); const optionsTextWidth = optionsText.displayWidth; this.pokeballSelectContainer = globalScene.add.container( From a9ec3b324c8deb88de9cc7b986fc92814922dd5a Mon Sep 17 00:00:00 2001 From: Lugiad <2070109+Adri1@users.noreply.github.com> Date: Tue, 20 May 2025 00:03:42 +0200 Subject: [PATCH 142/262] [UI/UX] [i18n] Text ratio adjustment for es-MX Egg Gatcha (#5839) --- src/ui/egg-gacha-ui-handler.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/egg-gacha-ui-handler.ts b/src/ui/egg-gacha-ui-handler.ts index 5377cf3d283..1bb7124d935 100644 --- a/src/ui/egg-gacha-ui-handler.ts +++ b/src/ui/egg-gacha-ui-handler.ts @@ -108,7 +108,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { let pokemonIconX = -20; let pokemonIconY = 6; - if (["de", "es-ES", "fr", "ko", "pt-BR"].includes(currentLanguage)) { + if (["de", "es-ES", "es-MX", "fr", "ko", "pt-BR"].includes(currentLanguage)) { gachaTextStyle = TextStyle.SMALLER_WINDOW_ALT; gachaX = 2; gachaY = 2; @@ -116,7 +116,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { let legendaryLabelX = gachaX; let legendaryLabelY = gachaY; - if (["de", "es-ES"].includes(currentLanguage)) { + if (["de", "es-ES", "es-MX"].includes(currentLanguage)) { pokemonIconX = -25; pokemonIconY = 10; legendaryLabelX = -6; From dda94c7b22411af71f7f1e52725f8587af89ad55 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Mon, 19 May 2025 17:18:26 -0700 Subject: [PATCH 143/262] [i18n] Update locales --- public/locales | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/locales b/public/locales index a074ddb28c3..42cd5cf577f 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit a074ddb28c3f0c7e9bbd0560efa33e3ce5f71bcd +Subproject commit 42cd5cf577f475c22bc82d55e7ca358eb4f3184f From 9746f1a2a6aa61d03137674dad92ef2c72225469 Mon Sep 17 00:00:00 2001 From: Lugiad <2070109+Adri1@users.noreply.github.com> Date: Tue, 20 May 2025 02:39:17 +0200 Subject: [PATCH 144/262] [UI/UX] [Localization] Update Korean starterInfoText --- src/ui/starter-select-ui-handler.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 09d7322cb75..ac781a71da0 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -145,8 +145,10 @@ const languageSettings: { [key: string]: LanguageSetting } = { starterInfoXPos: 33, }, ko: { - starterInfoTextSize: "52px", + starterInfoTextSize: "60px", instructionTextSize: "38px", + starterInfoYOffset: -0.5, + starterInfoXPos: 30, }, ja: { starterInfoTextSize: "51px", From 23e1d88c3ad45914602d815fc10ef8b14d1c2c92 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Tue, 20 May 2025 15:40:05 -0400 Subject: [PATCH 145/262] [Balance] Update TM compatibility for Curse (#5791) * Update Curse TM compat with former egg moves/level ups * Pumpkaboo is not Phantump --- src/data/balance/tms.ts | 44 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/src/data/balance/tms.ts b/src/data/balance/tms.ts index 69aef9b135d..b7480e9131d 100644 --- a/src/data/balance/tms.ts +++ b/src/data/balance/tms.ts @@ -19057,8 +19057,15 @@ export const tmSpecies: TmSpecies = { Species.SLAKING, Species.HARIYAMA, Species.NOSEPASS, + Species.ARON, + Species.LAIRON, + Species.AGGRON, + Species.ELECTRIKE, + Species.MANECTRIC, Species.GULPIN, Species.SWALOT, + Species.WAILMER, + Species.WAILORD, Species.NUMEL, Species.CAMERUPT, Species.TORKOAL, @@ -19067,18 +19074,28 @@ export const tmSpecies: TmSpecies = { Species.ZANGOOSE, Species.SEVIPER, Species.WHISCASH, + Species.LILEEP, + Species.CRADILY, + Species.ANORITH, + Species.ARMALDO, Species.SHUPPET, Species.BANETTE, Species.DUSKULL, Species.DUSCLOPS, Species.TROPIUS, Species.CHIMECHO, + Species.ABSOL, + Species.SPHEAL, + Species.SEALEO, + Species.WALREIN, Species.REGIROCK, Species.REGICE, Species.REGISTEEL, Species.TURTWIG, Species.GROTLE, Species.TORTERRA, + Species.BIDOOF, + Species.BIBAREL, Species.CRANIDOS, Species.RAMPARDOS, Species.SHIELDON, @@ -19120,6 +19137,11 @@ export const tmSpecies: TmSpecies = { Species.TEPIG, Species.PIGNITE, Species.EMBOAR, + Species.MUNNA, + Species.MUSHARNA, + Species.ROGGENROLA, + Species.BOLDORE, + Species.GIGALITH, Species.DRILBUR, Species.EXCADRILL, Species.TIMBURR, @@ -19128,28 +19150,44 @@ export const tmSpecies: TmSpecies = { Species.SANDILE, Species.KROKOROK, Species.KROOKODILE, + Species.DWEBBLE, + Species.CRUSTLE, Species.SCRAGGY, Species.SCRAFTY, Species.YAMASK, - Species.COFAGRIGUS, + Species.COFAGRIGUS, + Species.TRUBBISH, + Species.GARBODOR, Species.SAWSBUCK, + Species.FERROSEED, + Species.FERROTHORN, Species.LITWICK, Species.LAMPENT, Species.CHANDELURE, Species.BEARTIC, + Species.SHELMET, + Species.ACCELGOR, + Species.STUNFISK, Species.GOLETT, Species.GOLURK, + Species.HEATMOR, Species.CHESPIN, Species.QUILLADIN, Species.CHESNAUGHT, + Species.TYRUNT, + Species.TYRANTRUM, Species.SYLVEON, Species.GOOMY, Species.SLIGGOO, Species.GOODRA, Species.PHANTUMP, Species.TREVENANT, + Species.PUMPKABOO, + Species.GOURGEIST, Species.BERGMITE, Species.AVALUGG, + Species.ROWLET, + Species.DARTRIX, Species.DECIDUEYE, Species.GUMSHOOS, Species.MUDBRAY, @@ -19157,7 +19195,9 @@ export const tmSpecies: TmSpecies = { Species.PASSIMIAN, Species.SANDYGAST, Species.PALOSSAND, + Species.PYUKUMUKU, Species.KOMALA, + Species.TURTONATOR, Species.MIMIKYU, Species.SKWOVET, Species.GREEDENT, @@ -19169,6 +19209,7 @@ export const tmSpecies: TmSpecies = { Species.SINISTEA, Species.POLTEAGEIST, Species.PERRSERKER, + Species.CURSOLA, Species.RUNERIGUS, Species.PINCURCHIN, Species.STONJOURNER, @@ -19236,6 +19277,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_WEEZING, Species.GALAR_SLOWKING, Species.GALAR_YAMASK, + Species.GALAR_STUNFISK, Species.HISUI_ELECTRODE, Species.HISUI_TYPHLOSION, Species.HISUI_QWILFISH, From 663c64fdb41c51a4104ba270639f93c862698296 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Tue, 20 May 2025 16:46:23 -0500 Subject: [PATCH 146/262] [Misc] Fix trailing whitespace (#5856) Remove trailing whitespace --- src/data/balance/signature-species.ts | 6 +++--- src/data/balance/tms.ts | 4 ++-- src/field/pokemon.ts | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/data/balance/signature-species.ts b/src/data/balance/signature-species.ts index fb8f33d4435..04749a67521 100644 --- a/src/data/balance/signature-species.ts +++ b/src/data/balance/signature-species.ts @@ -8,11 +8,11 @@ export type SignatureSpecies = { * The signature species for each Gym Leader, Elite Four member, and Champion. * The key is the trainer type, and the value is an array of Species or Species arrays. * This is in a separate const so it can be accessed from other places and not just the trainerConfigs - * + * * @remarks - * The `Proxy` object allows us to define a handler that will intercept + * The `Proxy` object allows us to define a handler that will intercept * the property access and return an empty array if the property does not exist in the object. - * + * * This means that accessing `signatureSpecies` will not throw an error if the property does not exist, * but instead default to an empty array. */ diff --git a/src/data/balance/tms.ts b/src/data/balance/tms.ts index b7480e9131d..06d191c3b2a 100644 --- a/src/data/balance/tms.ts +++ b/src/data/balance/tms.ts @@ -67104,7 +67104,7 @@ export const tmSpecies: TmSpecies = { Species.CHEWTLE, Species.DREDNAW, Species.YAMPER, - Species.BOLTUND, + Species.BOLTUND, Species.ROLYCOLY, Species.CARKOL, Species.COALOSSAL, @@ -67121,7 +67121,7 @@ export const tmSpecies: TmSpecies = { Species.SIZZLIPEDE, Species.CENTISKORCH, Species.CLOBBOPUS, - Species.GRAPPLOCT, + Species.GRAPPLOCT, Species.SINISTEA, Species.POLTEAGEIST, Species.HATENNA, diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 8abe3a303ca..fcca0c5614a 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -5678,7 +5678,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** * Performs the action of clearing a Pokemon's status - * + * * This is a helper to {@linkcode resetStatus}, which should be called directly instead of this method */ public clearStatus(confusion: boolean, reloadAssets: boolean) { From 288e4e7e7eb9e6a9d450369a9c11cb0945845fcd Mon Sep 17 00:00:00 2001 From: itgalex24 <123003541+itgalex24@users.noreply.github.com> Date: Tue, 20 May 2025 19:12:54 -0400 Subject: [PATCH 147/262] [Bug] [Move] Synchronoise hitting Tera Type fix (#5779) * synchronoize fix * Add regression test for synchronoise --------- Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> --- src/data/moves/move.ts | 6 ++--- test/moves/synchronoise.test.ts | 47 +++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 test/moves/synchronoise.test.ts diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 235cb954ea5..b190729621c 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -8052,10 +8052,10 @@ export class UpperHandCondition extends MoveCondition { } } -export class hitsSameTypeAttr extends VariableMoveTypeMultiplierAttr { +export class HitsSameTypeAttr extends VariableMoveTypeMultiplierAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const multiplier = args[0] as NumberHolder; - if (!user.getTypes().some(type => target.getTypes().includes(type))) { + if (!user.getTypes(true).some(type => target.getTypes(true).includes(type))) { multiplier.value = 0; return true; } @@ -9756,7 +9756,7 @@ export function initMoves() { new AttackMove(Moves.SYNCHRONOISE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 5) .target(MoveTarget.ALL_NEAR_OTHERS) .condition(unknownTypeCondition) - .attr(hitsSameTypeAttr), + .attr(HitsSameTypeAttr), new AttackMove(Moves.ELECTRO_BALL, PokemonType.ELECTRIC, MoveCategory.SPECIAL, -1, 100, 10, -1, 0, 5) .attr(ElectroBallPowerAttr) .ballBombMove(), diff --git a/test/moves/synchronoise.test.ts b/test/moves/synchronoise.test.ts new file mode 100644 index 00000000000..0f59bce26b4 --- /dev/null +++ b/test/moves/synchronoise.test.ts @@ -0,0 +1,47 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { PokemonType } from "#enums/pokemon-type"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Synchronoise", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([Moves.SYNCHRONOISE]) + .ability(Abilities.BALL_FETCH) + .battleStyle("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should consider the user's tera type if it is terastallized", async () => { + await game.classicMode.startBattle([Species.BIDOOF]); + const playerPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + // force the player to be terastallized + playerPokemon.teraType = PokemonType.WATER; + playerPokemon.isTerastallized = true; + game.move.select(Moves.SYNCHRONOISE); + await game.phaseInterceptor.to("BerryPhase"); + expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); + }); +}); From b72389295e69625406393f4b4087be3191ec8382 Mon Sep 17 00:00:00 2001 From: Madmadness65 <59298170+Madmadness65@users.noreply.github.com> Date: Tue, 20 May 2025 21:07:37 -0500 Subject: [PATCH 148/262] [Animation] [P3 Bug] Fix Sandstorm weather animation not playing properly (#5853) Fix Sandstorm weather animation not playing properly The sandstorm background image is now properly used within the weather animation's JSON. --- public/battle-anims/common-sandstorm.json | 73 +++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/public/battle-anims/common-sandstorm.json b/public/battle-anims/common-sandstorm.json index b5b2d29f54c..fba90a08645 100644 --- a/public/battle-anims/common-sandstorm.json +++ b/public/battle-anims/common-sandstorm.json @@ -542,6 +542,79 @@ "volume": 100, "pitch": 55, "eventType": "AnimTimedSoundEvent" + }, + { + "frameIndex": 0, + "resourceName": "PRAS- Sandstorm", + "bgX": -50, + "bgY": 0, + "opacity": 0, + "duration": 5, + "eventType": "AnimTimedAddBgEvent" + }, + { + "frameIndex": 0, + "resourceName": "", + "bgX": -50, + "bgY": 0, + "opacity": 96, + "duration": 3, + "eventType": "AnimTimedUpdateBgEvent" + } + ], + "3": [ + { + "frameIndex": 3, + "resourceName": "", + "bgX": -25, + "bgY": 0, + "opacity": 128, + "duration": 3, + "eventType": "AnimTimedUpdateBgEvent" + } + ], + "6": [ + { + "frameIndex": 6, + "resourceName": "", + "bgX": 0, + "bgY": 0, + "opacity": 192, + "duration": 3, + "eventType": "AnimTimedUpdateBgEvent" + } + ], + "9": [ + { + "frameIndex": 9, + "resourceName": "", + "bgX": 25, + "bgY": 0, + "opacity": 128, + "duration": 3, + "eventType": "AnimTimedUpdateBgEvent" + } + ], + "12": [ + { + "frameIndex": 12, + "resourceName": "", + "bgX": 50, + "bgY": 0, + "opacity": 96, + "duration": 3, + "eventType": "AnimTimedUpdateBgEvent" + } + ], + "15": [ + { + "frameIndex": 15, + "resourceName": "", + "bgX": 50, + "bgY": 0, + "opacity": 0, + "duration": 3, + "eventType": "AnimTimedUpdateBgEvent" } ] }, From f01e7599ac8ea7a1c8fc14f556f0c5ae090c4ea1 Mon Sep 17 00:00:00 2001 From: Lugiad <2070109+Adri1@users.noreply.github.com> Date: Wed, 21 May 2025 04:21:35 +0200 Subject: [PATCH 149/262] [UI/UX] [Localization] Update Japanese starterInfoText (#5852) Update Japanese starterInfoText --- src/ui/starter-select-ui-handler.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index ac781a71da0..a35f426e8bd 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -151,8 +151,10 @@ const languageSettings: { [key: string]: LanguageSetting } = { starterInfoXPos: 30, }, ja: { - starterInfoTextSize: "51px", + starterInfoTextSize: "62px", instructionTextSize: "38px", + starterInfoYOffset: 0.5, + starterInfoXPos: 33, }, "ca-ES": { starterInfoTextSize: "52px", From 1cf19b49f26d0b82c102d304d7585fe5bacea785 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Tue, 20 May 2025 22:59:39 -0400 Subject: [PATCH 150/262] [Balance] Moveset generation adjustments (#5801) * Moveset generation adjustments * Remove shiny explosion check, prevent 2 self-KO moves --- src/field/pokemon.ts | 74 +++++++++++++++++--------------------------- 1 file changed, 29 insertions(+), 45 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index fcca0c5614a..74ccb0c7f49 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -3500,11 +3500,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } let weight = levelMove[0]; // Evolution Moves - if (weight === 0) { + if (weight === EVOLVE_MOVE) { weight = 50; } - // Assume level 1 moves with 80+ BP are "move reminder" moves and bump their weight - if (weight === 1 && allMoves[levelMove[1]].power >= 80) { + // Assume level 1 moves with 80+ BP are "move reminder" moves and bump their weight. Trainers use actual relearn moves. + if (weight === 1 && allMoves[levelMove[1]].power >= 80 || weight === RELEARN_MOVE && this.hasTrainer()) { weight = 40; } if ( @@ -3609,9 +3609,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // Bosses never get self ko moves or Pain Split if (this.isBoss()) { - movePool = movePool.filter(m => !allMoves[m[0]].hasAttr(SacrificialAttr)); - movePool = movePool.filter(m => !allMoves[m[0]].hasAttr(HpSplitAttr)); + movePool = movePool.filter(m => !allMoves[m[0]].hasAttr(SacrificialAttr) && !allMoves[m[0]].hasAttr(HpSplitAttr)); } + // No one gets Memento or Final Gambit movePool = movePool.filter( m => !allMoves[m[0]].hasAttr(SacrificialAttrOnHit), ); @@ -3623,10 +3623,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { m[0], m[1] * (allMoves[m[0]].hasAttr(SacrificialAttr) ? 0.5 : 1), ]); - movePool = movePool.map(m => [ - m[0], - m[1] * (allMoves[m[0]].hasAttr(SacrificialAttrOnHit) ? 0.5 : 1), - ]); // Trainers get a weight bump to stat buffing moves movePool = movePool.map(m => [ m[0], @@ -3687,10 +3683,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ]); /** The higher this is the more the game weights towards higher level moves. At `0` all moves are equal weight. */ - let weightMultiplier = 0.9; - if (this.hasTrainer()) { - weightMultiplier += 0.7; - } + let weightMultiplier = 1.6; if (this.isBoss()) { weightMultiplier += 0.4; } @@ -3699,37 +3692,21 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { Math.ceil(Math.pow(m[1], weightMultiplier) * 100), ]); - // Trainers and bosses always force a stab move - if (this.hasTrainer() || this.isBoss()) { - const stabMovePool = baseWeights.filter( - m => - allMoves[m[0]].category !== MoveCategory.STATUS && - this.isOfType(allMoves[m[0]].type), - ); + // All Pokemon force a STAB move first + const stabMovePool = baseWeights.filter( + m => + allMoves[m[0]].category !== MoveCategory.STATUS && + this.isOfType(allMoves[m[0]].type), + ); - if (stabMovePool.length) { - const totalWeight = stabMovePool.reduce((v, m) => v + m[1], 0); - let rand = randSeedInt(totalWeight); - let index = 0; - while (rand > stabMovePool[index][1]) { - rand -= stabMovePool[index++][1]; - } - this.moveset.push(new PokemonMove(stabMovePool[index][0], 0, 0)); - } - } else { - // Normal wild pokemon just force a random damaging move - const attackMovePool = baseWeights.filter( - m => allMoves[m[0]].category !== MoveCategory.STATUS, - ); - if (attackMovePool.length) { - const totalWeight = attackMovePool.reduce((v, m) => v + m[1], 0); - let rand = randSeedInt(totalWeight); - let index = 0; - while (rand > attackMovePool[index][1]) { - rand -= attackMovePool[index++][1]; - } - this.moveset.push(new PokemonMove(attackMovePool[index][0], 0, 0)); + if (stabMovePool.length) { + const totalWeight = stabMovePool.reduce((v, m) => v + m[1], 0); + let rand = randSeedInt(totalWeight); + let index = 0; + while (rand > stabMovePool[index][1]) { + rand -= stabMovePool[index++][1]; } + this.moveset.push(new PokemonMove(stabMovePool[index][0], 0, 0)); } while ( @@ -3741,7 +3718,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // Other damaging moves 2x weight if 0-1 damaging moves, 0.5x if 2, 0.125x if 3. These weights get 20x if STAB. // Status moves remain unchanged on weight, this encourages 1-2 movePool = baseWeights - .filter(m => !this.moveset.some(mo => m[0] === mo.moveId)) + .filter(m => !this.moveset.some( + mo => + m[0] === mo.moveId || + (allMoves[m[0]].hasAttr(SacrificialAttr) && mo.getMove().hasAttr(SacrificialAttr)) // Only one self-KO move allowed + )) .map(m => { let ret: number; if ( @@ -3772,7 +3753,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { }); } else { // Non-trainer pokemon just use normal weights - movePool = baseWeights.filter(m => !this.moveset.some(mo => m[0] === mo.moveId)); + movePool = baseWeights.filter(m => !this.moveset.some( + mo => + m[0] === mo.moveId || + (allMoves[m[0]].hasAttr(SacrificialAttr) && mo.getMove().hasAttr(SacrificialAttr)) // Only one self-KO move allowed + )); } const totalWeight = movePool.reduce((v, m) => v + m[1], 0); let rand = randSeedInt(totalWeight); @@ -7104,7 +7089,6 @@ export class EnemyPokemon extends Pokemon { if (!dataSource) { this.generateAndPopulateMoveset(); - if (shinyLock || Overrides.OPP_SHINY_OVERRIDE === false) { this.shiny = false; } else { From 4a39adacf88fa9b13a98def0d6dbf10329daba38 Mon Sep 17 00:00:00 2001 From: damocleas Date: Tue, 20 May 2025 23:05:39 -0400 Subject: [PATCH 151/262] [UI/UX] Remove Redundant Unlock Passive text (#5845) * Update starter-select-ui-handler.ts * Update pokedex-page-ui-handler.ts --- src/ui/pokedex-page-ui-handler.ts | 2 +- src/ui/starter-select-ui-handler.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index ddc16ab5a88..051d267259f 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -1888,7 +1888,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { if (!(passiveAttr & PassiveAttr.UNLOCKED)) { const passiveCost = getPassiveCandyCount(speciesStarterCosts[this.starterId]); options.push({ - label: `x${passiveCost} ${i18next.t("pokedexUiHandler:unlockPassive")} (${allAbilities[this.passive].name})`, + label: `x${passiveCost} ${i18next.t("pokedexUiHandler:unlockPassive")}`, handler: () => { if (Overrides.FREE_CANDY_UPGRADE_OVERRIDE || candyCount >= passiveCost) { starterData.passiveAttr |= PassiveAttr.UNLOCKED | PassiveAttr.ENABLED; diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index a35f426e8bd..f24a3ff9265 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -2184,7 +2184,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { if (!(passiveAttr & PassiveAttr.UNLOCKED)) { const passiveCost = getPassiveCandyCount(speciesStarterCosts[this.lastSpecies.speciesId]); options.push({ - label: `x${passiveCost} ${i18next.t("starterSelectUiHandler:unlockPassive")} (${allAbilities[this.lastSpecies.getPassiveAbility()].name})`, + label: `x${passiveCost} ${i18next.t("starterSelectUiHandler:unlockPassive")}`, handler: () => { if (Overrides.FREE_CANDY_UPGRADE_OVERRIDE || candyCount >= passiveCost) { starterData.passiveAttr |= PassiveAttr.UNLOCKED | PassiveAttr.ENABLED; From 3c934808c004f4e90ef77c30308197eb9ef33e90 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Tue, 20 May 2025 23:42:17 -0400 Subject: [PATCH 152/262] [Sprite] Fix T1 shiny Eternatus not animating in consistent, remove unused exp for Giratina Origin (#5802) Remove Origin Giratina exp, fix consistent shiny Etern Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> --- public/exp-sprites.json | 8 - public/images/pokemon/exp/487-origin.json | 566 ------ public/images/pokemon/exp/487-origin.png | Bin 9290 -> 0 bytes .../images/pokemon/exp/back/487-origin.json | 566 ------ public/images/pokemon/exp/back/487-origin.png | Bin 11381 -> 0 bytes .../pokemon/exp/back/shiny/487-origin.json | 293 --- .../pokemon/exp/back/shiny/487-origin.png | Bin 11381 -> 0 bytes .../images/pokemon/exp/shiny/487-origin.json | 293 --- .../images/pokemon/exp/shiny/487-origin.png | Bin 9290 -> 0 bytes public/images/pokemon/shiny/890.json | 1807 ++++++++++++++++- public/images/pokemon/shiny/890.png | Bin 1666 -> 33055 bytes 11 files changed, 1796 insertions(+), 1737 deletions(-) delete mode 100644 public/images/pokemon/exp/487-origin.json delete mode 100644 public/images/pokemon/exp/487-origin.png delete mode 100644 public/images/pokemon/exp/back/487-origin.json delete mode 100644 public/images/pokemon/exp/back/487-origin.png delete mode 100644 public/images/pokemon/exp/back/shiny/487-origin.json delete mode 100644 public/images/pokemon/exp/back/shiny/487-origin.png delete mode 100644 public/images/pokemon/exp/shiny/487-origin.json delete mode 100644 public/images/pokemon/exp/shiny/487-origin.png diff --git a/public/exp-sprites.json b/public/exp-sprites.json index 2595b5a7983..5580bb5cb7d 100644 --- a/public/exp-sprites.json +++ b/public/exp-sprites.json @@ -179,8 +179,6 @@ "483-origin", "484-origin", "484-origin", - "487-origin", - "487-origin", "531-mega", "531-mega", "569-gigantamax", @@ -1293,8 +1291,6 @@ "483b-origin", "484b-origin", "484b-origin", - "487b-origin", - "487b-origin", "531b-mega", "531b-mega", "569b-gigantamax", @@ -2407,8 +2403,6 @@ "483sb-origin", "484sb-origin", "484sb-origin", - "487sb-origin", - "487sb-origin", "531sb-mega", "531sb-mega", "569sb-gigantamax", @@ -3526,8 +3520,6 @@ "483s-origin", "484s-origin", "484s-origin", - "487s-origin", - "487s-origin", "531s-mega", "531s-mega", "569s-gigantamax", diff --git a/public/images/pokemon/exp/487-origin.json b/public/images/pokemon/exp/487-origin.json deleted file mode 100644 index a146f68d70d..00000000000 --- a/public/images/pokemon/exp/487-origin.json +++ /dev/null @@ -1,566 +0,0 @@ -{ - "textures": [ - { - "image": "487-origin.png", - "format": "RGBA8888", - "size": { - "w": 318, - "h": 318 - }, - "scale": 1, - "frames": [ - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 91, - "h": 77 - }, - "frame": { - "x": 0, - "y": 0, - "w": 91, - "h": 77 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 91, - "h": 77 - }, - "frame": { - "x": 0, - "y": 0, - "w": 91, - "h": 77 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 91, - "h": 74 - }, - "frame": { - "x": 91, - "y": 0, - "w": 91, - "h": 74 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 91, - "h": 74 - }, - "frame": { - "x": 91, - "y": 0, - "w": 91, - "h": 74 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 91, - "h": 74 - }, - "frame": { - "x": 91, - "y": 0, - "w": 91, - "h": 74 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 89, - "h": 75 - }, - "frame": { - "x": 182, - "y": 0, - "w": 89, - "h": 75 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 89, - "h": 75 - }, - "frame": { - "x": 182, - "y": 0, - "w": 89, - "h": 75 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 89, - "h": 75 - }, - "frame": { - "x": 182, - "y": 0, - "w": 89, - "h": 75 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 3, - "y": 7, - "w": 86, - "h": 79 - }, - "frame": { - "x": 91, - "y": 74, - "w": 86, - "h": 79 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 3, - "y": 8, - "w": 86, - "h": 79 - }, - "frame": { - "x": 91, - "y": 74, - "w": 86, - "h": 79 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 85, - "h": 83 - }, - "frame": { - "x": 0, - "y": 77, - "w": 85, - "h": 83 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 85, - "h": 83 - }, - "frame": { - "x": 0, - "y": 77, - "w": 85, - "h": 83 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 85, - "h": 82 - }, - "frame": { - "x": 177, - "y": 75, - "w": 85, - "h": 82 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 83, - "h": 83 - }, - "frame": { - "x": 85, - "y": 153, - "w": 83, - "h": 83 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 83, - "h": 83 - }, - "frame": { - "x": 85, - "y": 153, - "w": 83, - "h": 83 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 80, - "h": 82 - }, - "frame": { - "x": 0, - "y": 236, - "w": 80, - "h": 82 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 80, - "h": 82 - }, - "frame": { - "x": 0, - "y": 236, - "w": 80, - "h": 82 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 80, - "h": 82 - }, - "frame": { - "x": 0, - "y": 236, - "w": 80, - "h": 82 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 83, - "h": 76 - }, - "frame": { - "x": 0, - "y": 160, - "w": 83, - "h": 76 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 83, - "h": 76 - }, - "frame": { - "x": 0, - "y": 160, - "w": 83, - "h": 76 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 81, - "h": 81 - }, - "frame": { - "x": 80, - "y": 236, - "w": 81, - "h": 81 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 81, - "h": 80 - }, - "frame": { - "x": 161, - "y": 236, - "w": 81, - "h": 80 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 81, - "h": 80 - }, - "frame": { - "x": 161, - "y": 236, - "w": 81, - "h": 80 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 81, - "h": 79 - }, - "frame": { - "x": 168, - "y": 157, - "w": 81, - "h": 79 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 81, - "h": 79 - }, - "frame": { - "x": 168, - "y": 157, - "w": 81, - "h": 79 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 81, - "h": 79 - }, - "frame": { - "x": 168, - "y": 157, - "w": 81, - "h": 79 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:f669baef18fc6ae83124ad81c9b726f9:b705ee5bfe7dc7d92c348ffa4a4d6ce2:5d19509f6557fe13b0b6311434ba7e2d$" - } -} diff --git a/public/images/pokemon/exp/487-origin.png b/public/images/pokemon/exp/487-origin.png deleted file mode 100644 index 370ddf89173dc731773c3d0904099d582a00e295..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9290 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 sR?Pp9(#aC%{ diff --git a/public/images/pokemon/exp/back/487-origin.json b/public/images/pokemon/exp/back/487-origin.json deleted file mode 100644 index 72f5e4d4dc4..00000000000 --- a/public/images/pokemon/exp/back/487-origin.json +++ /dev/null @@ -1,566 +0,0 @@ -{ - "textures": [ - { - "image": "487-origin.png", - "format": "RGBA8888", - "size": { - "w": 326, - "h": 326 - }, - "scale": 1, - "frames": [ - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 88 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 95, - "h": 84 - }, - "frame": { - "x": 0, - "y": 0, - "w": 95, - "h": 84 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 88 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 95, - "h": 84 - }, - "frame": { - "x": 0, - "y": 0, - "w": 95, - "h": 84 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 88 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 97, - "h": 79 - }, - "frame": { - "x": 0, - "y": 84, - "w": 97, - "h": 79 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 88 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 97, - "h": 79 - }, - "frame": { - "x": 0, - "y": 84, - "w": 97, - "h": 79 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 97, - "h": 78 - }, - "frame": { - "x": 95, - "y": 0, - "w": 97, - "h": 78 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 97, - "h": 78 - }, - "frame": { - "x": 95, - "y": 0, - "w": 97, - "h": 78 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 97, - "h": 78 - }, - "frame": { - "x": 95, - "y": 0, - "w": 97, - "h": 78 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 94, - "h": 84 - }, - "frame": { - "x": 97, - "y": 78, - "w": 94, - "h": 84 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 94, - "h": 84 - }, - "frame": { - "x": 97, - "y": 78, - "w": 94, - "h": 84 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 94, - "h": 84 - }, - "frame": { - "x": 97, - "y": 78, - "w": 94, - "h": 84 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 95, - "h": 81 - }, - "frame": { - "x": 97, - "y": 162, - "w": 95, - "h": 81 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 7, - "w": 95, - "h": 81 - }, - "frame": { - "x": 97, - "y": 162, - "w": 95, - "h": 81 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 94, - "h": 84 - }, - "frame": { - "x": 191, - "y": 78, - "w": 94, - "h": 84 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 94, - "h": 84 - }, - "frame": { - "x": 191, - "y": 78, - "w": 94, - "h": 84 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 88 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 94, - "h": 77 - }, - "frame": { - "x": 192, - "y": 0, - "w": 94, - "h": 77 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 88 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 94, - "h": 77 - }, - "frame": { - "x": 192, - "y": 0, - "w": 94, - "h": 77 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 88 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 94, - "h": 77 - }, - "frame": { - "x": 192, - "y": 0, - "w": 94, - "h": 77 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 94, - "h": 83 - }, - "frame": { - "x": 0, - "y": 163, - "w": 94, - "h": 83 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 92, - "h": 83 - }, - "frame": { - "x": 192, - "y": 162, - "w": 92, - "h": 83 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 92, - "h": 82 - }, - "frame": { - "x": 94, - "y": 243, - "w": 92, - "h": 82 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 92, - "h": 82 - }, - "frame": { - "x": 94, - "y": 243, - "w": 92, - "h": 82 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 88 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 90, - "h": 78 - }, - "frame": { - "x": 0, - "y": 246, - "w": 90, - "h": 78 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 88 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 90, - "h": 78 - }, - "frame": { - "x": 0, - "y": 246, - "w": 90, - "h": 78 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 88 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 91, - "h": 81 - }, - "frame": { - "x": 186, - "y": 245, - "w": 91, - "h": 81 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 88 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 91, - "h": 81 - }, - "frame": { - "x": 186, - "y": 245, - "w": 91, - "h": 81 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 88 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 91, - "h": 81 - }, - "frame": { - "x": 186, - "y": 245, - "w": 91, - "h": 81 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:d1a63c2aac4c99e778e6efb9fa120e53:11f49886c328fc8474daefc2533a7f5d:5d19509f6557fe13b0b6311434ba7e2d$" - } -} diff --git a/public/images/pokemon/exp/back/487-origin.png b/public/images/pokemon/exp/back/487-origin.png deleted file mode 100644 index ec3dfd6c8f80a4965e4bfbc29aa3f66ca7884c35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11381 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 xNbp>=^G*ET-)hwY|mOtxE6KtqFvCumAu60d!JM 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 DdfIMP diff --git a/public/images/pokemon/exp/shiny/487-origin.json b/public/images/pokemon/exp/shiny/487-origin.json deleted file mode 100644 index d770a34a1b8..00000000000 --- a/public/images/pokemon/exp/shiny/487-origin.json +++ /dev/null @@ -1,293 +0,0 @@ -{ - "textures": [ - { - "image": "487-origin.png", - "format": "RGBA8888", - "size": { - "w": 318, - "h": 318 - }, - "scale": 1, - "frames": [ - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 91, - "h": 77 - }, - "frame": { - "x": 0, - "y": 0, - "w": 91, - "h": 77 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 91, - "h": 74 - }, - "frame": { - "x": 91, - "y": 0, - "w": 91, - "h": 74 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 89, - "h": 75 - }, - "frame": { - "x": 182, - "y": 0, - "w": 89, - "h": 75 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 89, - "h": 75 - }, - "frame": { - "x": 182, - "y": 0, - "w": 89, - "h": 75 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 3, - "y": 7, - "w": 86, - "h": 79 - }, - "frame": { - "x": 91, - "y": 74, - "w": 86, - "h": 79 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 85, - "h": 83 - }, - "frame": { - "x": 0, - "y": 77, - "w": 85, - "h": 83 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 85, - "h": 82 - }, - "frame": { - "x": 177, - "y": 75, - "w": 85, - "h": 82 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 83, - "h": 83 - }, - "frame": { - "x": 85, - "y": 153, - "w": 83, - "h": 83 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 80, - "h": 82 - }, - "frame": { - "x": 0, - "y": 236, - "w": 80, - "h": 82 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 83, - "h": 76 - }, - "frame": { - "x": 0, - "y": 160, - "w": 83, - "h": 76 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 81, - "h": 81 - }, - "frame": { - "x": 80, - "y": 236, - "w": 81, - "h": 81 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 81, - "h": 80 - }, - "frame": { - "x": 161, - "y": 236, - "w": 81, - "h": 80 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 91, - "h": 87 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 81, - "h": 79 - }, - "frame": { - "x": 168, - "y": 157, - "w": 81, - "h": 79 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:00abebb007c47ada81d4e754581d7146:4691e19364eb9392dbee1ee37d737c8b:5d19509f6557fe13b0b6311434ba7e2d$" - } -} diff --git a/public/images/pokemon/exp/shiny/487-origin.png b/public/images/pokemon/exp/shiny/487-origin.png deleted file mode 100644 index d0f0fdb6b9b40f63b37a71c4d9197fbdd095c60d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9290 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

      oS}2mx?{p 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 delta 1649 zcmV-%29Eikf&zjKGKo-5M-2)Z3IG5A4M|8uQUCw|TmS$7SOfzA004?mjeP(B05DKY zR7C&)00993GXN}+GADlzf~QRY0004WQchCl(Q?R&sKm! zDRoJ!Yg(X6qyQjw5R`-T_ulO8?cC&Y7a6-|%=^smecx~P&v<`tv<2+7G?3RR+*b}X zE})^|1)8`+az2L+zLj@D{`P|g@*)MC&w~!W4=&8X@@(Brw0|CEE(a7mQ0Hl7bJXCP zcY-q=8=W$RrcI`0Bk=Hhc>#ycb;=#3zt6+I;t97H`XGID$sUcTzEnlx~ zJ{${#E|L@vv)N z!0i{t{LS1d!{i1%;Vg^rq%YlCn|bqi*njxE`{EcmWxVEuS18n1}x% zHb3lUA|$pv$H7@!GUviMH|F6nCc)y{qF9m7Q#ya|V$mf(EDCJ>ae&@74ht40q~IV59!_~J2iG)m{P~SoPrS`24LUlee%u@B%t3$Fby9FX;Pa1KRQi6UQZic=xWw>t z&aJL;o-!#@=F*H#bin4Q^lhi1jtY(QU`|=b*Cn5CqLF2|iOGvq#CG$y@$DJWwp*y^V7i2unQaV%7X&%T} zb@u69$Usrr(yb1SWg{qo(S^tpd& zQd}@&iI=!66`pM0o0y5AgIH-bV*MMGQrTu9d3p4BJ2&IW_h0Kh4QeEZeIt}Ha!4?~ zKO!Ydkl#iA&G^?J_b|<}9Hq@z$o6Pt`7@VB_9fL^j@mo>$RkHCBA zV2Vjjy!hTE|Ngt9qx)LuOOnwHyZBZj52RdNX~0t@B__o35wQFi|5@KVj5>-@jS;AqL{gANO@U00v(2qZ-cmXHg{zRn$X9=S;?spF zfHh{^WB7RTk$!hWWTrJh@(GnMd@D^rIe2gwi#T~EP8N4fka8eq#oRo`O zi8+*4PlzopNs03XPK(ZC4h*#7*)dKRvR3Y?%QByb+E$r3u>(UI@~80%u@c*eADfJtz#^*E$26d00000NkvXXu0mjfz!NVj From d1b0bbb155087d174d053aeab4de643382878062 Mon Sep 17 00:00:00 2001 From: Sophia Date: Wed, 21 May 2025 08:14:16 +0100 Subject: [PATCH 153/262] [Bug]: Fix #5010: roar and whirlwind missing fail message when against a trainer (#5659) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [BUG] Fixes #5010 Roar and Whirlwind don´t display a fail message Roar and Whirlwind should now display a fail message when used against a trainer with only one pokémon left * Apply suggestions from code review made by SirzBenjie --- src/data/moves/move.ts | 15 +++++++++++++++ test/moves/whirlwind.test.ts | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index b190729621c..71807288abc 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -6390,8 +6390,23 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { return (user, target, move) => { const switchOutTarget = (this.selfSwitch ? user : target); const player = switchOutTarget instanceof PlayerPokemon; + const forceSwitchAttr = move.getAttrs(ForceSwitchOutAttr).find(attr => attr.switchType === SwitchType.FORCE_SWITCH); if (!this.selfSwitch) { + if (move.hitsSubstitute(user, target)) { + return false; + } + + // Check if the move is Roar or Whirlwind and if there is a trainer with only Pokémon left. + if (forceSwitchAttr && globalScene.currentBattle.trainer) { + const enemyParty = globalScene.getEnemyParty(); + // Filter out any Pokémon that are not allowed in battle (e.g. fainted ones) + const remainingPokemon = enemyParty.filter(p => p.hp > 0 && p.isAllowedInBattle()); + if (remainingPokemon.length <= 1) { + return false; + } + } + // Dondozo with an allied Tatsugiri in its mouth cannot be forced out const commandedTag = switchOutTarget.getTag(BattlerTagType.COMMANDED); if (commandedTag?.getSourcePokemon()?.isActive(true)) { diff --git a/test/moves/whirlwind.test.ts b/test/moves/whirlwind.test.ts index 6b5133ec7b1..67ffb77612c 100644 --- a/test/moves/whirlwind.test.ts +++ b/test/moves/whirlwind.test.ts @@ -10,6 +10,7 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { Status } from "#app/data/status-effect"; import { StatusEffect } from "#enums/status-effect"; +import { globalScene } from "#app/global-scene"; import { BattlerIndex } from "#app/battle"; import { BattleType } from "#enums/battle-type"; import { TrainerType } from "#enums/trainer-type"; @@ -161,6 +162,37 @@ describe("Moves - Whirlwind", () => { expect(eevee.isOnField()).toBe(false); }); + it("should fail when player uses Whirlwind against an opponent with only one available Pokémon", async () => { + // Set up the battle scenario with the player knowing Whirlwind + game.override.startingWave(5).enemySpecies(Species.PIDGEY).moveset([Moves.WHIRLWIND]); + await game.classicMode.startBattle(); + + const enemyParty = game.scene.getEnemyParty(); + + // Ensure the opponent has only one available Pokémon + if (enemyParty.length > 1) { + enemyParty.slice(1).forEach(p => { + p.hp = 0; + p.status = new Status(StatusEffect.FAINT); + }); + } + const eligibleEnemy = enemyParty.filter(p => p.hp > 0 && p.isAllowedInBattle()); + expect(eligibleEnemy.length).toBe(1); + + // Spy on the queueMessage function + const queueSpy = vi.spyOn(globalScene, "queueMessage"); + + // Player uses Whirlwind; opponent uses Splash + game.move.select(Moves.WHIRLWIND); + await game.forceEnemyMove(Moves.SPLASH); + await game.toNextTurn(); + + // Verify that the failure message is displayed for Whirlwind + expect(queueSpy).toHaveBeenCalledWith(expect.stringContaining("But it failed")); + // Verify the opponent's Splash message + expect(queueSpy).toHaveBeenCalledWith(expect.stringContaining("But nothing happened!")); + }); + it("should not pull in the other trainer's pokemon in a partner trainer battle", async () => { game.override .startingWave(2) From ebac2d112606d8e9c9418b1db33974541b45aaf2 Mon Sep 17 00:00:00 2001 From: Madmadness65 <59298170+Madmadness65@users.noreply.github.com> Date: Wed, 21 May 2025 15:38:24 -0500 Subject: [PATCH 154/262] [Sprite] [P3 Bug] Fix Wishiwashi's shadow appearing broken (#5815) Fix Wishiwashi's shadow appearing broken Cropped all of Wishiwashi-solo's frames from 96x96 to 50x50, then re-exported the atlases. This fixed the shadows appearing broken in the animation. --- public/images/pokemon/exp/746.json | 2129 +++++++++++++++------- public/images/pokemon/exp/746.png | Bin 900 -> 1527 bytes public/images/pokemon/exp/shiny/746.json | 2128 ++++++++++++++------- public/images/pokemon/exp/shiny/746.png | Bin 868 -> 1509 bytes 4 files changed, 2978 insertions(+), 1279 deletions(-) diff --git a/public/images/pokemon/exp/746.json b/public/images/pokemon/exp/746.json index f4967f59669..9f5db562bf0 100644 --- a/public/images/pokemon/exp/746.json +++ b/public/images/pokemon/exp/746.json @@ -1,641 +1,1490 @@ -{ "frames": [ - { - "filename": "0001.png", - "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0002.png", - "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 41, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0003.png", - "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0004.png", - "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 41, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0005.png", - "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0006.png", - "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 42, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0007.png", - "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 44, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0008.png", - "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 46, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0009.png", - "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 47, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0010.png", - "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0011.png", - "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 48, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0012.png", - "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0013.png", - "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 48, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0014.png", - "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0015.png", - "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 47, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0016.png", - "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 46, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0017.png", - "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 44, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0018.png", - "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 42, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0019.png", - "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0020.png", - "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 41, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0021.png", - "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0022.png", - "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 41, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0023.png", - "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0024.png", - "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 42, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0025.png", - "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 44, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0026.png", - "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 46, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0027.png", - "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 47, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0028.png", - "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0029.png", - "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 48, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0030.png", - "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0031.png", - "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 48, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0032.png", - "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0033.png", - "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 47, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0034.png", - "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 46, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0035.png", - "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 44, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0036.png", - "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 42, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0037.png", - "frame": { "x": 40, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0038.png", - "frame": { "x": 75, "y": 26, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 41, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0039.png", - "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0040.png", - "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 41, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0041.png", - "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0042.png", - "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 42, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0043.png", - "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 44, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0044.png", - "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 46, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0045.png", - "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 47, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0046.png", - "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0047.png", - "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 48, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0048.png", - "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0049.png", - "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 48, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0050.png", - "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0051.png", - "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 47, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0052.png", - "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 46, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0053.png", - "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 44, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0054.png", - "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 41, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0055.png", - "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0056.png", - "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 41, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0057.png", - "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0058.png", - "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 42, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0059.png", - "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 44, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0060.png", - "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 46, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0061.png", - "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 47, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0062.png", - "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0063.png", - "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 48, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0064.png", - "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0065.png", - "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 48, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0066.png", - "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0067.png", - "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 47, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0068.png", - "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 46, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0069.png", - "frame": { "x": 1, "y": 26, "w": 39, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 44, "w": 37, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - }, - { - "filename": "0070.png", - "frame": { "x": 36, "y": 51, "w": 35, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 28, "y": 42, "w": 33, "h": 23 }, - "sourceSize": { "w": 96, "h": 96 }, - "duration": 110 - } - ], - "meta": { - "app": "https://www.aseprite.org/", - "version": "1.3.13-x64", - "image": "746.png", - "format": "I8", - "size": { "w": 119, "h": 77 }, - "scale": "1" - } +{ + "textures": [ + { + "image": "746.png", + "format": "RGBA8888", + "size": { + "w": 100, + "h": 100 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 15, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 25 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 15, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 25 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 15, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 25 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 18, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 25 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 21, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 25 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 22, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 25 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 22, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 25 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 21, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 25 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 18, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 25 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 15, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 25 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 15, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 25 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 15, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 25 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 18, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 25 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 21, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 25 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 22, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 25 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 22, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 25 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 21, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 25 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 18, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 25 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 15, + "w": 39, + "h": 25 + }, + "frame": { + "x": 39, + "y": 0, + "w": 39, + "h": 25 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 15, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 25, + "w": 39, + "h": 25 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 15, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 25, + "w": 39, + "h": 25 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 18, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 25, + "w": 39, + "h": 25 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 21, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 25, + "w": 39, + "h": 25 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 22, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 25, + "w": 39, + "h": 25 + } + }, + { + "filename": "0049.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 22, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 25, + "w": 39, + "h": 25 + } + }, + { + "filename": "0051.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 21, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 25, + "w": 39, + "h": 25 + } + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 18, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 25, + "w": 39, + "h": 25 + } + }, + { + "filename": "0055.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 15, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 25, + "w": 39, + "h": 25 + } + }, + { + "filename": "0057.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 15, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 25, + "w": 39, + "h": 25 + } + }, + { + "filename": "0059.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 18, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 25, + "w": 39, + "h": 25 + } + }, + { + "filename": "0061.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 21, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 25, + "w": 39, + "h": 25 + } + }, + { + "filename": "0063.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 22, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 25, + "w": 39, + "h": 25 + } + }, + { + "filename": "0065.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 22, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 25, + "w": 39, + "h": 25 + } + }, + { + "filename": "0067.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 21, + "w": 39, + "h": 25 + }, + "frame": { + "x": 0, + "y": 25, + "w": 39, + "h": 25 + } + }, + { + "filename": "0069.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 18, + "w": 39, + "h": 25 + }, + "frame": { + "x": 39, + "y": 25, + "w": 39, + "h": 25 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 15, + "w": 35, + "h": 25 + }, + "frame": { + "x": 0, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 15, + "w": 35, + "h": 25 + }, + "frame": { + "x": 0, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 16, + "w": 35, + "h": 25 + }, + "frame": { + "x": 0, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 20, + "w": 35, + "h": 25 + }, + "frame": { + "x": 0, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 22, + "w": 35, + "h": 25 + }, + "frame": { + "x": 0, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 22, + "w": 35, + "h": 25 + }, + "frame": { + "x": 0, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 22, + "w": 35, + "h": 25 + }, + "frame": { + "x": 0, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 20, + "w": 35, + "h": 25 + }, + "frame": { + "x": 0, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 16, + "w": 35, + "h": 25 + }, + "frame": { + "x": 0, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 15, + "w": 35, + "h": 25 + }, + "frame": { + "x": 0, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 15, + "w": 35, + "h": 25 + }, + "frame": { + "x": 0, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 16, + "w": 35, + "h": 25 + }, + "frame": { + "x": 0, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 20, + "w": 35, + "h": 25 + }, + "frame": { + "x": 0, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 22, + "w": 35, + "h": 25 + }, + "frame": { + "x": 0, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 22, + "w": 35, + "h": 25 + }, + "frame": { + "x": 0, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 22, + "w": 35, + "h": 25 + }, + "frame": { + "x": 0, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 20, + "w": 35, + "h": 25 + }, + "frame": { + "x": 0, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 16, + "w": 35, + "h": 25 + }, + "frame": { + "x": 0, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 15, + "w": 35, + "h": 25 + }, + "frame": { + "x": 0, + "y": 75, + "w": 35, + "h": 25 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 15, + "w": 35, + "h": 25 + }, + "frame": { + "x": 35, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 16, + "w": 35, + "h": 25 + }, + "frame": { + "x": 35, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 20, + "w": 35, + "h": 25 + }, + "frame": { + "x": 35, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 22, + "w": 35, + "h": 25 + }, + "frame": { + "x": 35, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 22, + "w": 35, + "h": 25 + }, + "frame": { + "x": 35, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 22, + "w": 35, + "h": 25 + }, + "frame": { + "x": 35, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 20, + "w": 35, + "h": 25 + }, + "frame": { + "x": 35, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0054.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 15, + "w": 35, + "h": 25 + }, + "frame": { + "x": 35, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0056.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 15, + "w": 35, + "h": 25 + }, + "frame": { + "x": 35, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0058.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 16, + "w": 35, + "h": 25 + }, + "frame": { + "x": 35, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0060.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 20, + "w": 35, + "h": 25 + }, + "frame": { + "x": 35, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0062.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 22, + "w": 35, + "h": 25 + }, + "frame": { + "x": 35, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0064.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 22, + "w": 35, + "h": 25 + }, + "frame": { + "x": 35, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0066.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 22, + "w": 35, + "h": 25 + }, + "frame": { + "x": 35, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0068.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 20, + "w": 35, + "h": 25 + }, + "frame": { + "x": 35, + "y": 50, + "w": 35, + "h": 25 + } + }, + { + "filename": "0070.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 50, + "h": 50 + }, + "spriteSourceSize": { + "x": 7, + "y": 16, + "w": 35, + "h": 25 + }, + "frame": { + "x": 35, + "y": 75, + "w": 35, + "h": 25 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:f7634f2f6edeb6f56071bb6680b7f94b:08a6c2c31e47fffe1f31594d207e513f:1a4f7e535d823202c4828f963d5b4404$" + } } diff --git a/public/images/pokemon/exp/746.png b/public/images/pokemon/exp/746.png index e2be0f27de7d630b0a3822b51f7cd70dc014b5ae..e06ee8916dee53c56537173bf67fc8afe6b9b770 100644 GIT binary patch literal 1527 zcmZ8heKga182@c;SzMQ6Szg0p&HG#1F6!2>Y}uB#gc3Uqd98~K$5qBq#LTYPrt(r9 z$6|(yR!lFLaLY>wU1f2*SMEWby7F>=>vsR?Ip_I)KF{ZQzR&kO-|so!OFncjO?3lx z001;8WKTa3nJPzY16Qy85s@H3lKi~ffrcTYw_pH^BGQNe&{V9k&VYk4-iI1MGBIN? zViUcX3Tuz*k0RN`Tr~g&RysI2J3wyy*Hv{Q{KkKs_#jsq6zmKA zQt9XN1IWJaa&&M|Wno(LdfVZBn;<((@gxSE@pxA;#S=MbdrS_%Q|u-OwzlGG6Q(ZC z;L|7LcF*s`5o!}o`*Zr8?{7lRmnz6%Yxz=7RHpW)O#Kndjgx!&t?ns$dneo1`{C{~ zY^(&M(6DnjWtXA3SS{wzrVG1i2~k;c+kWU%^9mP(& zMXmf8!r^qOzXF_LLiq;$z@<+_mn>7kVpObqm#+N$REanxGIm!4u5QQ0YwbxjUNd*5 zJbR_aH!n?o%8hOqm4yi6jwZM}&oqvVH>aG{j?hh`N%fbqLiuB2TE9+_5Gxfph1N6L zuIW~bt8LaZzKQom`93f{eN}s@h-rpkQC;=W z(pT(5W8U%AHje~BF(=A?^NsOf2QbZ0{s&rTa_clBb_VD723Sl-OSw2ACcTcv=Y$W^ zqijI|@$v#HDTHvnCB>?P6nt?;X@?eN7amwk#mGp(1-Po;)o1U%BL})Qw-!hRqp(9q zr#qh2EIp5}X0?0I{}h9az{QqIbLKFY#kZ*AF%x&9IM{lu##ZGz89ASm-NUX$*R$$u z?aauo?Ww{SLFgbq;_zdExOm5YZ(Ghj3mC-&zYG;cTW6tZaH11H^MgDwKE*)ZG9o&m z36^dw%a%6=L9v~8&EYa1r|OxGhr0~xf00wD-aLNzE^_WZH&$*GzOhLCn8evi!A)Hl zau$;CsQi^M3;p56X_v!Q1kZ#T%JW(|^H3IN~jQG`S6eefzt>)?VqyS5m| z(6nYhX?t2`a%W11UF#JCokd6IT*{Pq9~|RxhaZVE9x~6K6vkXO#}F7<*`pY;s}iSx zuhr4G?}LQO`lT!W-1pd#R)M7D?Z|H8aMjm0*Ztl=gLhes;t5UP&c0@~BZ;K}^5MMW zXFx%}L|9lV^j-;*Rxv$gNqP48Kx=fxaiVa4C7 O--SY=dp5X-v;PIZC4Q*@ literal 900 zcmV-~1AF|5P)Px#Hc(7dMF0Q*5D*X_Az@u+ZDDJ2oJCtVN0Ucn$v&LBVaVQ$oSluFo!Envu*JsA z($3h~+V1Y|{{H?~Y_NC$000tnQchC<|NsC0|NsC0|NsC0|NsC0|6aj{J^%m$-bqA3 zRA_F8$N)Ft(#lvq^yZ4qsotyauYDW8bdO zT&V{55r)oEP1lI4RF@&Nu_i>*G}Wmti_o13PaUpEUA93tuOUeMt+*O=S(Nv6UeP-0 zcZONKMm9FDBDS_zoZx+Z&bQlya`l};^e0}Z1BZ!58pHFOKhH>dkhP3z|o(Q^=|F5-37?6 zxK-8|kTcvC&u+WS4QTB64<~ZR!jBiC?$sahd|v zjYibK_Y3kuXtusWW<@NFXiO<_qCg+P8H^~s;c8(80DcrWg#`;9Ug!ucP9M%;8+PSY zx*2d9!#5mpKk!@>GdhcTxX}NH$CAs_7=tKxs4nwzJN5emDl+<<-OjMHfvW5mS5F}S zn0y@zVngxT=jEDz*wkbp4!3I*aoPO3lxlH>kBULpZ0@PR;{BLT^EJ87r!KB$Ol znY~K#Nj8&q9`B%9%QBdEJ@l~ zZfExk87N1p5mq2e+IeobHV86M8>vEgUt!WtbGujWAXCfiHIgp)qufqrKeIEEuK0K$ z4@ORs#>WGBFdZc8+#AR*3_%|$TK5KWcBVQB!yg6mPLg7sKrYVg3H~^c%QJh>N`bs1 zvy)K^jZLXTNVv80(n9h7mAn$3r zpSJU7?G@5rg0!7IYp;<*eOqa}_N@JVAeZ({pOCZrWlP(F%-&!56LM?IK;F*m{Uu4; z?aY3paXW1bGW($wYX@>^WBoub?yMik<*ii%xwNfvAn$0a8OVFvY6Wt6U*$k9ZTuI= a&#eFaD3{mT#6>3n00001jV3HCuUK7ORh&R5Mn+d3=$BJ>-<6gqazytA`=KKB)+a^~pppZ9gVz2l zz@%9u28wC2=}ayFAkiv?0cGX-kW)XI8lD_g8#?3_Oh zbTvRZ*W<#$y&z}}Xg~%6Fn}Qd7{qo$iv7k_TUx@_eeuH~PJ+P!6ok7VO~_UI;!lLQ zNN#?v^UxLc+JpEysF&&(PGgen<3cG%s0>##**{#@PdGW_?gvecVP z`U)x&DQU&zNXGl&S-VAuO3GBs+sDZFRzaJi0JN(X6W5s(RpV<1;%ir&j!Y!J-xv^D^cXKueg|DgK3r|9Y|S&hWc9EavvHP*>$UEct>JGC9(5(B zvJ09hdifU_qL5S}uXV-!&J$)LI!@PooRp%eT=3D$W_MNR;7qag8o@Uo5qdr9@@lRh z{%la=jHgre_K=2x#xlgC{$54=RG$!81pzs-iFK}Il)}^)-Y1P$`UUg^2iTU}lXbR|dwC1B-@oAL*5#@J10Ge*0~8Z7-V4>|yjCVejzX z%6BwZ1C5;*;pGW7S*8pG*&bj7!upJ&Vz$&8lI=~mS-J77uDvh_Px>xWkR54>8CV!s z=KMOea}r-`4(@D3;yueM-0nC?!f1SJ1?Du1-oc$Nm78Lbln)I8?SzyCEvqJ`Fm}~u z4(~Zy;dbLtYZ~h+yhDNRLEU?G$oqtD*E;NTQP_p-NIXVH=*HB@aQ?WaG=5a$80hud z?wU9#Y|?>U;F`?>B$K!$cnmE`mJRRn~ZHa||mszVGC4h9-H?%n8OWa+Fcr z6*UcsAU$DEs5GXDS0Cv_-6WJWc7lm$ywOtG6#Vle0zG{nV=3hQT`PLJXlB$We02G- zE_v{*?I*t_8-{qZuK`k!U#BOKn9NK*n3v5BoW8_m6lsCVOyV@vcRMlacWO=j%JCO{Bh?)p~&TA^sGB{xKXq+-O<_ zvGi&JU?=brr{=bsr7<{JnH)6!$LoX-zfUOZ`)1#6SphFE+rR3pR{bd;)t6H55uN=H Dzsqv2 literal 868 zcmV-q1DpJbP)Px#Fi=cXMF0Q*5D*X_Az_?FTZ(#U*p3DM&=@yIlSgF9jGUd=gOtX;m(0@6*xB0g z@xcE6{`Y3ZZ2$lO5Oh*bQvm<}|NsC0|NsC0|NsC0|G-d-LjV8*#z{m$R9Juxa|lO*O)^Xr49I`aWQR z2_k*eieO#W5|c(|wJkF+Q{u?XWpoOE8=pc}ZTqsLGt90+;PCo8wCoJDGZ3op@_MbP zR(-6+=#19jkTFfPRM9Z0$(|pw1r>dX7M>Ajun;NNkA*Y?(O6353MU722xJj5 z`oq)~6ad%}Kp2q&i)Pv!Ii?KK$U#$9M4tyr5ShbfhwGjEM?b$Ki#EE)K3l4W2N9}E zCWnmjm$f#O5DHgzh_3NN$QM8A-2y*Ez0!D1;GKJJaHC$4G=YcbgNhmT$UrBEVQ7C=0)Mv6;A<6%ZOLY4(H;QO&sToM|sA!0?E1#@ur zQ;ZZ>3XPVGcC^wc5eV0_o#K)_7~J_JARQ$KzJQbB(mbfOJ5B=fQ8IA$W2Lw_4_ae3 z5_uNPL3n~U@*s&?7W5!I!(XGG6Fd+!{59%1!30sqzNj|`1o$9n*%$SK>(K%HXE&l= z2MFQ)sK**5g14d`FAF*;5cQZ@kdBK)y}m4HN+9a7N-XLzyB$xDyHStVE_htsi+UaH zB%)qVJBg^r?^jE5@w>rF)ay9CN|H<84Q8OPUo*)i?*? Date: Wed, 21 May 2025 19:05:09 -0500 Subject: [PATCH 155/262] [GitHub] Make tests skip if no filters are matched (#5744) * Make tests skip if filters are matched * Tweak filter path * Make thing checkout thing * Change where workflow is skipped * Change where workflow is skipped * Update github test filters * Update test-filters.yml --------- Co-authored-by: Wlowscha <54003515+Wlowscha@users.noreply.github.com> --- .github/test-filters.yml | 19 ++++++++ .github/workflows/test-shard-template.yml | 5 ++ .github/workflows/tests.yml | 57 ++++++----------------- 3 files changed, 39 insertions(+), 42 deletions(-) create mode 100644 .github/test-filters.yml diff --git a/.github/test-filters.yml b/.github/test-filters.yml new file mode 100644 index 00000000000..89f4322adea --- /dev/null +++ b/.github/test-filters.yml @@ -0,0 +1,19 @@ +all: + - "src/**" + - "test/**" + - "public/**" + # Workflows that can impact tests + - ".github/workflows/test*.yml" + - ".github/test-filters.yml" + # top-level files + - "package*.json" + - ".nvrmc" # Updates to node version can break tests + - "vite*" # vite.config.ts, vite.vitest.config.ts, vitest.workspace.ts + - "tsconfig*.json" # tsconfig.json tweaking can impact compilation + - "global.d.ts" + - ".env*" + # Blanket negations for files that cannot impact tests + - "!**/*.py" # No .py files + - "!**/*.sh" # No .sh files + - "!**/*.md" # No .md files + - "!**/.git*" # .gitkeep and family diff --git a/.github/workflows/test-shard-template.yml b/.github/workflows/test-shard-template.yml index cee452f3a59..a1146cb3497 100644 --- a/.github/workflows/test-shard-template.yml +++ b/.github/workflows/test-shard-template.yml @@ -12,11 +12,16 @@ on: totalShards: required: true type: number + skip: + required: true + type: boolean + default: false jobs: test: name: Shard ${{ inputs.shard }} of ${{ inputs.totalShards }} runs-on: ubuntu-latest + if: ${{ !inputs.skip }} steps: - name: Check out Git repository uses: actions/checkout@v4.2.2 diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index d9db8401f8e..f04a1987eff 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -7,58 +7,30 @@ on: branches: - main # Trigger on push events to the main branch - beta # Trigger on push events to the beta branch - - release # Trigger on push events to the release branch - # go upvote https://github.com/actions/runner/issues/1182 and yell at microsoft until they fix this or ditch yml for workflows - paths: - # src and test files - - "src/**" - - "test/**" - - "public/**" - # Workflows that can impact tests - - ".github/workflows/test*.yml" - # top-level files - - "package*.json" - - ".nvrmc" # Updates to node version can break tests - - "vite.*.ts" # vite.config.ts, vite.vitest.config.ts, vitest.workspace.ts - - "tsconfig*.json" # tsconfig.json tweaking can impact compilation - - "global.d.ts" - - ".env.*" - # Blanket negations for files that cannot impact tests - - "!**/*.py" # No .py files - - "!**/*.sh" # No .sh files - - "!**/*.md" # No .md files - - "!**/.git*" # .gitkeep and family - pull_request: branches: - main # Trigger on pull request events targeting the main branch - beta # Trigger on pull request events targeting the beta branch - - release # Trigger on pull request events targeting the release branch - paths: # go upvote https://github.com/actions/runner/issues/1182 and yell at microsoft because until then we have to duplicate this - # src and test files - - "src/**" - - "test/**" - - "public/**" - # Workflows that can impact tests - - ".github/workflows/test*.yml" - # top-level files - - "package*.json" - - ".nvrmc" # Updates to node version can break tests - - "vite*" # vite.config.ts, vite.vitest.config.ts, vitest.workspace.ts - - "tsconfig*.json" # tsconfig.json tweaking can impact compilation - - "global.d.ts" - - ".env.*" - # Blanket negations for files that cannot impact tests - - "!**/*.py" # No .py files - - "!**/*.sh" # No .sh files - - "!**/*.md" # No .md files - - "!**/.git*" # .gitkeep and family merge_group: types: [checks_requested] jobs: + check-path-change-filter: + runs-on: ubuntu-latest + permissions: + pull-requests: read + outputs: + all: ${{ steps.filter.outputs.all }} + steps: + - name: checkout + uses: actions/checkout@v4 + - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 + with: + filters: .github/test-filters.yml + run-tests: name: Run Tests + needs: check-path-change-filter strategy: matrix: shard: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] @@ -67,3 +39,4 @@ jobs: project: main shard: ${{ matrix.shard }} totalShards: 10 + skip: ${{ needs.check-path-change-filter.outputs.all == 'false'}} From f0e806c50898526551368256d03759e56ce36a68 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Wed, 21 May 2025 22:18:24 -0500 Subject: [PATCH 156/262] [Misc] Move `allMoves` to `data-lists.ts` (#5860) --- src/battle-scene.ts | 2 +- src/data/abilities/ability.ts | 2 +- src/data/arena-tag.ts | 2 +- src/data/balance/egg-moves.ts | 2 +- src/data/battle-anims.ts | 3 ++- src/data/battler-tags.ts | 2 +- src/data/data-lists.ts | 2 ++ src/data/moves/move.ts | 7 ++---- .../encounters/bug-type-superfan-encounter.ts | 22 +++++-------------- src/data/pokemon-forms.ts | 2 +- src/field/pokemon.ts | 2 +- src/modifier/modifier-type.ts | 3 ++- src/modifier/modifier.ts | 2 +- src/phases/faint-phase.ts | 3 ++- src/phases/learn-move-phase.ts | 2 +- src/phases/move-phase.ts | 2 +- src/phases/select-target-phase.ts | 2 +- src/phases/switch-summon-phase.ts | 3 ++- src/phases/turn-start-phase.ts | 3 ++- src/system/game-data.ts | 2 +- src/ui/modifier-select-ui-handler.ts | 2 +- src/ui/party-ui-handler.ts | 3 ++- src/ui/pokedex-page-ui-handler.ts | 2 +- src/ui/pokedex-scan-ui-handler.ts | 2 +- src/ui/pokedex-ui-handler.ts | 2 +- src/ui/pokemon-hatch-info-container.ts | 2 +- src/ui/starter-select-ui-handler.ts | 2 +- test/abilities/aura_break.test.ts | 2 +- test/abilities/battery.test.ts | 2 +- test/abilities/battle_bond.test.ts | 3 ++- test/abilities/flower_veil.test.ts | 2 +- test/abilities/friend_guard.test.ts | 2 +- test/abilities/hustle.test.ts | 2 +- test/abilities/infiltrator.test.ts | 2 +- test/abilities/libero.test.ts | 2 +- test/abilities/magic_bounce.test.ts | 2 +- .../abilities/normal-move-type-change.test.ts | 2 +- test/abilities/normalize.test.ts | 2 +- test/abilities/power_spot.test.ts | 2 +- test/abilities/protean.test.ts | 2 +- test/abilities/sap_sipper.test.ts | 3 ++- test/abilities/serene_grace.test.ts | 2 +- test/abilities/sheer_force.test.ts | 3 ++- test/abilities/steely_spirit.test.ts | 2 +- test/abilities/supreme_overlord.test.ts | 2 +- test/abilities/unburden.test.ts | 3 ++- test/abilities/wimp_out.test.ts | 2 +- test/abilities/wonder_skin.test.ts | 2 +- test/arena/arena_gravity.test.ts | 2 +- test/arena/grassy_terrain.test.ts | 2 +- test/arena/weather_fog.test.ts | 2 +- test/arena/weather_strong_winds.test.ts | 2 +- test/battle/damage_calculation.test.ts | 2 +- test/battlerTags/substitute.test.ts | 2 +- test/enemy_command.test.ts | 2 +- test/items/reviver_seed.test.ts | 2 +- test/moves/astonish.test.ts | 2 +- test/moves/aurora_veil.test.ts | 3 ++- test/moves/burning_jealousy.test.ts | 2 +- test/moves/ceaseless_edge.test.ts | 2 +- test/moves/copycat.test.ts | 3 ++- test/moves/destiny_bond.test.ts | 2 +- test/moves/diamond_storm.test.ts | 2 +- test/moves/dig.test.ts | 2 +- test/moves/dragon_tail.test.ts | 2 +- test/moves/dynamax_cannon.test.ts | 2 +- test/moves/effectiveness.test.ts | 2 +- test/moves/fell_stinger.test.ts | 2 +- test/moves/fly.test.ts | 2 +- test/moves/freezy_frost.test.ts | 2 +- test/moves/fusion_flare_bolt.test.ts | 2 +- test/moves/glaive_rush.test.ts | 2 +- test/moves/hard_press.test.ts | 2 +- test/moves/hyper_beam.test.ts | 2 +- test/moves/lash_out.test.ts | 2 +- test/moves/last_respects.test.ts | 2 +- test/moves/light_screen.test.ts | 3 ++- test/moves/magic_coat.test.ts | 2 +- test/moves/metronome.test.ts | 3 ++- test/moves/moongeist_beam.test.ts | 3 ++- test/moves/pledge_moves.test.ts | 3 ++- test/moves/protect.test.ts | 2 +- test/moves/rage_fist.test.ts | 2 +- test/moves/reflect.test.ts | 3 ++- test/moves/retaliate.test.ts | 2 +- test/moves/rollout.test.ts | 2 +- test/moves/round.test.ts | 2 +- test/moves/scale_shot.test.ts | 2 +- test/moves/secret_power.test.ts | 2 +- test/moves/shell_side_arm.test.ts | 3 ++- test/moves/shell_trap.test.ts | 2 +- test/moves/sketch.test.ts | 3 ++- test/moves/solar_beam.test.ts | 2 +- test/moves/sparkly_swirl.test.ts | 2 +- test/moves/spectral_thief.test.ts | 2 +- test/moves/spit_up.test.ts | 2 +- test/moves/steamroller.test.ts | 2 +- test/moves/substitute.test.ts | 3 ++- test/moves/telekinesis.test.ts | 2 +- test/moves/tera_blast.test.ts | 3 ++- test/moves/toxic.test.ts | 2 +- test/moves/triple_arrows.test.ts | 3 ++- 102 files changed, 130 insertions(+), 121 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 5835ee08af5..cbaf07d579c 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -51,7 +51,7 @@ import { initGameSpeed } from "#app/system/game-speed"; import { Arena, ArenaBase } from "#app/field/arena"; import { GameData } from "#app/system/game-data"; import { addTextObject, getTextColor, TextStyle } from "#app/ui/text"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "./data/data-lists"; import { MusicPreference } from "#app/system/settings/settings"; import { getDefaultModifierTypeForTier, diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index ff86937622b..b677dd2bd11 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -9,7 +9,6 @@ import { FlinchAttr, OneHitKOAttr, HitHealAttr, - allMoves, StatusMove, SelfStatusMove, VariablePowerAttr, @@ -21,6 +20,7 @@ import { NeutralDamageAgainstFlyingTypeMultiplierAttr, FixedDamageAttr, } from "#app/data/moves/move"; +import { allMoves } from "../data-lists"; import { ArenaTagSide } from "#app/data/arena-tag"; import { BerryModifier, HitHealModifier, PokemonHeldItemModifier } from "#app/modifier/modifier"; import { TerrainType } from "#app/data/terrain"; diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index 19c94a8a045..1955b51e8e0 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -2,7 +2,7 @@ import { globalScene } from "#app/global-scene"; import type { Arena } from "#app/field/arena"; import { PokemonType } from "#enums/pokemon-type"; import { BooleanHolder, NumberHolder, toDmgValue } from "#app/utils/common"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "./data-lists"; import { MoveTarget } from "#enums/MoveTarget"; import { MoveCategory } from "#enums/MoveCategory"; import { getPokemonNameWithAffix } from "#app/messages"; diff --git a/src/data/balance/egg-moves.ts b/src/data/balance/egg-moves.ts index 289ac60bcc5..73c6300166b 100644 --- a/src/data/balance/egg-moves.ts +++ b/src/data/balance/egg-moves.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "../data-lists"; import { getEnumKeys, getEnumValues } from "#app/utils/common"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/src/data/battle-anims.ts b/src/data/battle-anims.ts index 454bd40130c..f395c3bb832 100644 --- a/src/data/battle-anims.ts +++ b/src/data/battle-anims.ts @@ -1,5 +1,6 @@ import { globalScene } from "#app/global-scene"; -import { AttackMove, BeakBlastHeaderAttr, DelayedAttackAttr, SelfStatusMove, allMoves } from "./moves/move"; +import { AttackMove, BeakBlastHeaderAttr, DelayedAttackAttr, SelfStatusMove } from "./moves/move"; +import { allMoves } from "./data-lists"; import { MoveFlags } from "#enums/MoveFlags"; import type Pokemon from "../field/pokemon"; import { type nil, getFrameMs, getEnumKeys, getEnumValues, animationFileName } from "../utils/common"; diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 34fdd5409c8..c284fcd5130 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -12,12 +12,12 @@ import { allAbilities } from "./data-lists"; import { ChargeAnim, CommonAnim, CommonBattleAnim, MoveChargeAnim } from "#app/data/battle-anims"; import type Move from "#app/data/moves/move"; import { - allMoves, applyMoveAttrs, ConsecutiveUseDoublePowerAttr, HealOnAllyAttr, StatusCategoryOnAllyAttr, } from "#app/data/moves/move"; +import { allMoves } from "./data-lists"; import { MoveFlags } from "#enums/MoveFlags"; import { MoveCategory } from "#enums/MoveCategory"; import { SpeciesFormChangeAbilityTrigger } from "#app/data/pokemon-forms"; diff --git a/src/data/data-lists.ts b/src/data/data-lists.ts index d3c31abc851..c763a001280 100644 --- a/src/data/data-lists.ts +++ b/src/data/data-lists.ts @@ -1,3 +1,5 @@ import type { Ability } from "./abilities/ability-class"; +import type Move from "./moves/move"; export const allAbilities: Ability[] = []; +export const allMoves: Move[] = []; diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 71807288abc..31ad3337926 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -66,7 +66,7 @@ import { VariableMovePowerAbAttr, WonderSkinAbAttr, } from "../abilities/ability"; -import { allAbilities } from "../data-lists"; +import { allAbilities, allMoves } from "../data-lists"; import { AttackTypeBoosterModifier, BerryModifier, @@ -8261,14 +8261,11 @@ export function getMoveTargets(user: Pokemon, move: Moves, replaceTarget?: MoveT return { targets: set.filter(p => p?.isActive(true)).map(p => p.getBattlerIndex()).filter(t => t !== undefined), multiple }; } -export const allMoves: Move[] = [ - new SelfStatusMove(Moves.NONE, PokemonType.NORMAL, MoveCategory.STATUS, -1, -1, 0, 1), -]; - export const selfStatLowerMoves: Moves[] = []; export function initMoves() { allMoves.push( + new SelfStatusMove(Moves.NONE, PokemonType.NORMAL, MoveCategory.STATUS, -1, -1, 0, 1), new AttackMove(Moves.POUND, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 35, -1, 0, 1), new AttackMove(Moves.KARATE_CHOP, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 50, 100, 25, -1, 0, 1) .attr(HighCritAttr), diff --git a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts index 87b223d5245..17c1c31d55e 100644 --- a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts +++ b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts @@ -50,7 +50,7 @@ import { } from "#app/modifier/modifier"; import i18next from "i18next"; import MoveInfoOverlay from "#app/ui/move-info-overlay"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { getSpriteKeysFromSpecies } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; @@ -144,20 +144,14 @@ const POOL_3_POKEMON: { species: Species; formIndex?: number }[] = [ const POOL_4_POKEMON = [Species.GENESECT, Species.SLITHER_WING, Species.BUZZWOLE, Species.PHEROMOSA]; -const PHYSICAL_TUTOR_MOVES = [ - Moves.MEGAHORN, - Moves.ATTACK_ORDER, - Moves.BUG_BITE, - Moves.FIRST_IMPRESSION, - Moves.LUNGE -]; +const PHYSICAL_TUTOR_MOVES = [Moves.MEGAHORN, Moves.ATTACK_ORDER, Moves.BUG_BITE, Moves.FIRST_IMPRESSION, Moves.LUNGE]; const SPECIAL_TUTOR_MOVES = [ Moves.SILVER_WIND, Moves.SIGNAL_BEAM, Moves.BUG_BUZZ, Moves.POLLEN_PUFF, - Moves.STRUGGLE_BUG + Moves.STRUGGLE_BUG, ]; const STATUS_TUTOR_MOVES = [ @@ -165,16 +159,10 @@ const STATUS_TUTOR_MOVES = [ Moves.DEFEND_ORDER, Moves.RAGE_POWDER, Moves.STICKY_WEB, - Moves.SILK_TRAP + Moves.SILK_TRAP, ]; -const MISC_TUTOR_MOVES = [ - Moves.LEECH_LIFE, - Moves.U_TURN, - Moves.HEAL_ORDER, - Moves.QUIVER_DANCE, - Moves.INFESTATION, -]; +const MISC_TUTOR_MOVES = [Moves.LEECH_LIFE, Moves.U_TURN, Moves.HEAL_ORDER, Moves.QUIVER_DANCE, Moves.INFESTATION]; /** * Wave breakpoints that determine how strong to make the Bug-Type Superfan's team diff --git a/src/data/pokemon-forms.ts b/src/data/pokemon-forms.ts index f76462d2725..da594f7c27f 100644 --- a/src/data/pokemon-forms.ts +++ b/src/data/pokemon-forms.ts @@ -1,7 +1,7 @@ import { PokemonFormChangeItemModifier } from "../modifier/modifier"; import type Pokemon from "../field/pokemon"; import { StatusEffect } from "#enums/status-effect"; -import { allMoves } from "./moves/move"; +import { allMoves } from "./data-lists"; import { MoveCategory } from "#enums/MoveCategory"; import type { Constructor, nil } from "#app/utils/common"; import { Abilities } from "#enums/abilities"; diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 74ccb0c7f49..62ec8081c5d 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -16,7 +16,6 @@ import { applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, - allMoves, TypelessAttr, CritOnlyAttr, getMoveTargets, @@ -41,6 +40,7 @@ import { VariableMoveTypeChartAttr, HpSplitAttr, } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { MoveTarget } from "#enums/MoveTarget"; import { MoveCategory } from "#enums/MoveCategory"; import type { PokemonSpeciesForm } from "#app/data/pokemon-species"; diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 608eca1157e..4c61123eb2d 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -2,7 +2,8 @@ import { globalScene } from "#app/global-scene"; import { EvolutionItem, pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { tmPoolTiers, tmSpecies } from "#app/data/balance/tms"; import { getBerryEffectDescription, getBerryName } from "#app/data/berry"; -import { allMoves, AttackMove } from "#app/data/moves/move"; +import { AttackMove } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { getNatureName, getNatureStatMultiplier } from "#app/data/nature"; import { getPokeballCatchMultiplier, getPokeballName, MAX_PER_TYPE_POKEBALLS } from "#app/data/pokeball"; import { diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 94bb0e3419a..42e0155bdd8 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -1,7 +1,7 @@ import { FusionSpeciesFormEvolution, pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { getBerryEffectFunc, getBerryPredicate } from "#app/data/berry"; import { getLevelTotalExp } from "#app/data/exp"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { MAX_PER_TYPE_POKEBALLS } from "#app/data/pokeball"; import { type FormChangeItem, SpeciesFormChangeItemTrigger } from "#app/data/pokemon-forms"; import { getStatusEffectHealText } from "#app/data/status-effect"; diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index 1aa24d59fa0..bf0adf77061 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -11,7 +11,8 @@ import { } from "#app/data/abilities/ability"; import { BattlerTagLapseType } from "#app/data/battler-tags"; import { battleSpecDialogue } from "#app/data/dialogue"; -import { allMoves, PostVictoryStatStageChangeAttr } from "#app/data/moves/move"; +import { PostVictoryStatStageChangeAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms"; import { BattleSpec } from "#app/enums/battle-spec"; import { StatusEffect } from "#app/enums/status-effect"; diff --git a/src/phases/learn-move-phase.ts b/src/phases/learn-move-phase.ts index 515ce492b92..c585679ba4f 100644 --- a/src/phases/learn-move-phase.ts +++ b/src/phases/learn-move-phase.ts @@ -1,7 +1,7 @@ import { globalScene } from "#app/global-scene"; import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims"; import type Move from "#app/data/moves/move"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { SpeciesFormChangeMoveLearnedTrigger } from "#app/data/pokemon-forms"; import { Moves } from "#enums/moves"; import { getPokemonNameWithAffix } from "#app/messages"; diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index 5d63fe6efea..d7cbf1b9a6f 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -16,7 +16,6 @@ import { CommonAnim } from "#app/data/battle-anims"; import { BattlerTagLapseType, CenterOfAttentionTag } from "#app/data/battler-tags"; import { AddArenaTrapTagAttr, - allMoves, applyMoveAttrs, BypassRedirectAttr, BypassSleepAttr, @@ -27,6 +26,7 @@ import { PreMoveMessageAttr, PreUseInterruptAttr, } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { MoveFlags } from "#enums/MoveFlags"; import { SpeciesFormChangePreMoveTrigger } from "#app/data/pokemon-forms"; import { getStatusEffectActivationText, getStatusEffectHealText } from "#app/data/status-effect"; diff --git a/src/phases/select-target-phase.ts b/src/phases/select-target-phase.ts index c969b9ca421..f8a8ecfbf18 100644 --- a/src/phases/select-target-phase.ts +++ b/src/phases/select-target-phase.ts @@ -5,7 +5,7 @@ import { UiMode } from "#enums/ui-mode"; import { CommandPhase } from "./command-phase"; import { PokemonPhase } from "./pokemon-phase"; import i18next from "#app/plugins/i18n"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; export class SelectTargetPhase extends PokemonPhase { // biome-ignore lint/complexity/noUselessConstructor: This makes `fieldIndex` required diff --git a/src/phases/switch-summon-phase.ts b/src/phases/switch-summon-phase.ts index a063b6e6863..c61eb73118f 100644 --- a/src/phases/switch-summon-phase.ts +++ b/src/phases/switch-summon-phase.ts @@ -6,7 +6,8 @@ import { PreSummonAbAttr, PreSwitchOutAbAttr, } from "#app/data/abilities/ability"; -import { allMoves, ForceSwitchOutAttr } from "#app/data/moves/move"; +import { ForceSwitchOutAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { getPokeballTintColor } from "#app/data/pokeball"; import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms"; import { TrainerSlot } from "#enums/trainer-slot"; diff --git a/src/phases/turn-start-phase.ts b/src/phases/turn-start-phase.ts index b802780bbb8..de510ef07d7 100644 --- a/src/phases/turn-start-phase.ts +++ b/src/phases/turn-start-phase.ts @@ -1,5 +1,6 @@ import { applyAbAttrs, BypassSpeedChanceAbAttr, PreventBypassSpeedChanceAbAttr } from "#app/data/abilities/ability"; -import { allMoves, MoveHeaderAttr } from "#app/data/moves/move"; +import { MoveHeaderAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Abilities } from "#app/enums/abilities"; import { Stat } from "#app/enums/stat"; import type Pokemon from "#app/field/pokemon"; diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 0c5e0b349ed..5711ad338c3 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -30,7 +30,7 @@ import { Nature } from "#enums/nature"; import { GameStats } from "#app/system/game-stats"; import { Tutorial } from "#app/tutorial"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { TrainerVariant } from "#app/field/trainer"; import type { Variant } from "#app/sprites/variant"; import { setSettingGamepad, SettingGamepad, settingGamepadDefaults } from "#app/system/settings/settings-gamepad"; diff --git a/src/ui/modifier-select-ui-handler.ts b/src/ui/modifier-select-ui-handler.ts index 9ba54491175..7f5bf997f88 100644 --- a/src/ui/modifier-select-ui-handler.ts +++ b/src/ui/modifier-select-ui-handler.ts @@ -9,7 +9,7 @@ import { LockModifierTiersModifier, PokemonHeldItemModifier, HealShopCostModifie import { handleTutorial, Tutorial } from "../tutorial"; import { Button } from "#enums/buttons"; import MoveInfoOverlay from "./move-info-overlay"; -import { allMoves } from "../data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { formatMoney, NumberHolder } from "#app/utils/common"; import Overrides from "#app/overrides"; import i18next from "i18next"; diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 6e947796d63..f6105c51ee3 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -11,7 +11,8 @@ import { PokemonHeldItemModifier, SwitchEffectTransferModifier, } from "#app/modifier/modifier"; -import { allMoves, ForceSwitchOutAttr } from "#app/data/moves/move"; +import { ForceSwitchOutAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Gender, getGenderColor, getGenderSymbol } from "#app/data/gender"; import { StatusEffect } from "#enums/status-effect"; import PokemonIconAnimHandler, { PokemonIconAnimMode } from "#app/ui/pokemon-icon-anim-handler"; diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index 051d267259f..ab729db8c26 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -9,7 +9,7 @@ import { allAbilities } from "#app/data/data-lists"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { GrowthRate, getGrowthRateColor } from "#app/data/exp"; import { Gender, getGenderColor, getGenderSymbol } from "#app/data/gender"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { getNatureName } from "#app/data/nature"; import type { SpeciesFormChange } from "#app/data/pokemon-forms"; import { pokemonFormChanges } from "#app/data/pokemon-forms"; diff --git a/src/ui/pokedex-scan-ui-handler.ts b/src/ui/pokedex-scan-ui-handler.ts index 45092d461a3..df3e7cbc8c4 100644 --- a/src/ui/pokedex-scan-ui-handler.ts +++ b/src/ui/pokedex-scan-ui-handler.ts @@ -7,7 +7,7 @@ import { isNullOrUndefined } from "#app/utils/common"; import { UiMode } from "#enums/ui-mode"; import { FilterTextRow } from "./filter-text"; import { allAbilities } from "#app/data/data-lists"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { allSpecies } from "#app/data/pokemon-species"; import i18next from "i18next"; diff --git a/src/ui/pokedex-ui-handler.ts b/src/ui/pokedex-ui-handler.ts index 935c9adfeb8..08fe5d7442f 100644 --- a/src/ui/pokedex-ui-handler.ts +++ b/src/ui/pokedex-ui-handler.ts @@ -37,7 +37,7 @@ import { addWindow } from "./ui-theme"; import type { OptionSelectConfig } from "./abstact-option-select-ui-handler"; import { FilterText, FilterTextRow } from "./filter-text"; import { allAbilities } from "#app/data/data-lists"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { speciesTmMoves } from "#app/data/balance/tms"; import { pokemonStarters } from "#app/data/balance/pokemon-evolutions"; import { Biome } from "#enums/biome"; diff --git a/src/ui/pokemon-hatch-info-container.ts b/src/ui/pokemon-hatch-info-container.ts index f3095cb48bf..5471a769d95 100644 --- a/src/ui/pokemon-hatch-info-container.ts +++ b/src/ui/pokemon-hatch-info-container.ts @@ -4,7 +4,7 @@ import { PokemonType } from "#enums/pokemon-type"; import { rgbHexToRgba, padInt } from "#app/utils/common"; import { TextStyle, addTextObject } from "#app/ui/text"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Species } from "#enums/species"; import { getEggTierForSpecies } from "#app/data/egg"; import { starterColors } from "#app/global-vars/starter-colors"; diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index f24a3ff9265..80acac6a6b4 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -13,7 +13,7 @@ import { allAbilities } from "#app/data/data-lists"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { GrowthRate, getGrowthRateColor } from "#app/data/exp"; import { Gender, getGenderColor, getGenderSymbol } from "#app/data/gender"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { getNatureName } from "#app/data/nature"; import { pokemonFormChanges } from "#app/data/pokemon-forms"; import type { LevelMoves } from "#app/data/balance/pokemon-level-moves"; diff --git a/test/abilities/aura_break.test.ts b/test/abilities/aura_break.test.ts index 523a2773c99..f88d7d875bf 100644 --- a/test/abilities/aura_break.test.ts +++ b/test/abilities/aura_break.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/abilities/battery.test.ts b/test/abilities/battery.test.ts index 6a1f77f4b27..251ca6ccf16 100644 --- a/test/abilities/battery.test.ts +++ b/test/abilities/battery.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Abilities } from "#app/enums/abilities"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; diff --git a/test/abilities/battle_bond.test.ts b/test/abilities/battle_bond.test.ts index d599b3212f9..d9f7b0bd0dc 100644 --- a/test/abilities/battle_bond.test.ts +++ b/test/abilities/battle_bond.test.ts @@ -1,4 +1,5 @@ -import { allMoves, MultiHitAttr } from "#app/data/moves/move"; +import { MultiHitAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { MultiHitType } from "#enums/MultiHitType"; import { Status } from "#app/data/status-effect"; import { Abilities } from "#enums/abilities"; diff --git a/test/abilities/flower_veil.test.ts b/test/abilities/flower_veil.test.ts index 1fd7dbb3ed7..ce45906c4a9 100644 --- a/test/abilities/flower_veil.test.ts +++ b/test/abilities/flower_veil.test.ts @@ -7,7 +7,7 @@ import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { BattlerTagType } from "#enums/battler-tag-type"; import { allAbilities } from "#app/data/data-lists"; diff --git a/test/abilities/friend_guard.test.ts b/test/abilities/friend_guard.test.ts index 43a378c47a2..0afe678b175 100644 --- a/test/abilities/friend_guard.test.ts +++ b/test/abilities/friend_guard.test.ts @@ -6,7 +6,7 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { BattlerIndex } from "#app/battle"; import { allAbilities } from "#app/data/data-lists"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { MoveCategory } from "#enums/MoveCategory"; describe("Moves - Friend Guard", () => { diff --git a/test/abilities/hustle.test.ts b/test/abilities/hustle.test.ts index bf2889eab63..85b6e611d6d 100644 --- a/test/abilities/hustle.test.ts +++ b/test/abilities/hustle.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Abilities } from "#app/enums/abilities"; import { Stat } from "#app/enums/stat"; import { Moves } from "#enums/moves"; diff --git a/test/abilities/infiltrator.test.ts b/test/abilities/infiltrator.test.ts index 1a9f802dd9c..aeeb681e73c 100644 --- a/test/abilities/infiltrator.test.ts +++ b/test/abilities/infiltrator.test.ts @@ -1,5 +1,5 @@ import { ArenaTagSide } from "#app/data/arena-tag"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; import { Stat } from "#enums/stat"; diff --git a/test/abilities/libero.test.ts b/test/abilities/libero.test.ts index 4adb828180e..a6942b18aad 100644 --- a/test/abilities/libero.test.ts +++ b/test/abilities/libero.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { PokemonType } from "#enums/pokemon-type"; import { Weather } from "#app/data/weather"; import type { PlayerPokemon } from "#app/field/pokemon"; diff --git a/test/abilities/magic_bounce.test.ts b/test/abilities/magic_bounce.test.ts index 11131640a0f..78e4114724c 100644 --- a/test/abilities/magic_bounce.test.ts +++ b/test/abilities/magic_bounce.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { allAbilities } from "#app/data/data-lists"; import { ArenaTagSide } from "#app/data/arena-tag"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { Stat } from "#app/enums/stat"; diff --git a/test/abilities/normal-move-type-change.test.ts b/test/abilities/normal-move-type-change.test.ts index 50c8e04af1f..88a7b49e26b 100644 --- a/test/abilities/normal-move-type-change.test.ts +++ b/test/abilities/normal-move-type-change.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { PokemonType } from "#enums/pokemon-type"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; diff --git a/test/abilities/normalize.test.ts b/test/abilities/normalize.test.ts index 3256f0188d1..a299294f543 100644 --- a/test/abilities/normalize.test.ts +++ b/test/abilities/normalize.test.ts @@ -1,5 +1,5 @@ import { TYPE_BOOST_ITEM_BOOST_PERCENT } from "#app/constants"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { toDmgValue } from "#app/utils/common"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/test/abilities/power_spot.test.ts b/test/abilities/power_spot.test.ts index 3e4f79d7445..c3accdb04f8 100644 --- a/test/abilities/power_spot.test.ts +++ b/test/abilities/power_spot.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Abilities } from "#app/enums/abilities"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; diff --git a/test/abilities/protean.test.ts b/test/abilities/protean.test.ts index 8f7633e1327..8e6b69dabd6 100644 --- a/test/abilities/protean.test.ts +++ b/test/abilities/protean.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { PokemonType } from "#enums/pokemon-type"; import { Weather } from "#app/data/weather"; import type { PlayerPokemon } from "#app/field/pokemon"; diff --git a/test/abilities/sap_sipper.test.ts b/test/abilities/sap_sipper.test.ts index 2157177b84c..03a6ee5d398 100644 --- a/test/abilities/sap_sipper.test.ts +++ b/test/abilities/sap_sipper.test.ts @@ -9,7 +9,8 @@ import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { allMoves, RandomMoveAttr } from "#app/data/moves/move"; +import { RandomMoveAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; // See also: TypeImmunityAbAttr describe("Abilities - Sap Sipper", () => { diff --git a/test/abilities/serene_grace.test.ts b/test/abilities/serene_grace.test.ts index 2547971a4b8..191d5a44f19 100644 --- a/test/abilities/serene_grace.test.ts +++ b/test/abilities/serene_grace.test.ts @@ -4,7 +4,7 @@ import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { FlinchAttr } from "#app/data/moves/move"; diff --git a/test/abilities/sheer_force.test.ts b/test/abilities/sheer_force.test.ts index ce3232a1869..6bb0a631124 100644 --- a/test/abilities/sheer_force.test.ts +++ b/test/abilities/sheer_force.test.ts @@ -7,7 +7,8 @@ import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { allMoves, FlinchAttr } from "#app/data/moves/move"; +import { FlinchAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; describe("Abilities - Sheer Force", () => { let phaserGame: Phaser.Game; diff --git a/test/abilities/steely_spirit.test.ts b/test/abilities/steely_spirit.test.ts index be759724c3a..09805d61e14 100644 --- a/test/abilities/steely_spirit.test.ts +++ b/test/abilities/steely_spirit.test.ts @@ -1,5 +1,5 @@ import { allAbilities } from "#app/data/data-lists"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/abilities/supreme_overlord.test.ts b/test/abilities/supreme_overlord.test.ts index 8af0a0ac37c..6cc52de64bf 100644 --- a/test/abilities/supreme_overlord.test.ts +++ b/test/abilities/supreme_overlord.test.ts @@ -7,7 +7,7 @@ import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; describe("Abilities - Supreme Overlord", () => { let phaserGame: Phaser.Game; diff --git a/test/abilities/unburden.test.ts b/test/abilities/unburden.test.ts index 2af889d1da4..ff28c3b6a09 100644 --- a/test/abilities/unburden.test.ts +++ b/test/abilities/unburden.test.ts @@ -1,6 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { PostItemLostAbAttr } from "#app/data/abilities/ability"; -import { allMoves, StealHeldItemChanceAttr } from "#app/data/moves/move"; +import { StealHeldItemChanceAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import type Pokemon from "#app/field/pokemon"; import type { ContactHeldItemTransferChanceModifier } from "#app/modifier/modifier"; import { Abilities } from "#enums/abilities"; diff --git a/test/abilities/wimp_out.test.ts b/test/abilities/wimp_out.test.ts index f558efdb103..67885a82163 100644 --- a/test/abilities/wimp_out.test.ts +++ b/test/abilities/wimp_out.test.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; import { ArenaTagSide } from "#app/data/arena-tag"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import GameManager from "#test/testUtils/gameManager"; import { toDmgValue } from "#app/utils/common"; import { Abilities } from "#enums/abilities"; diff --git a/test/abilities/wonder_skin.test.ts b/test/abilities/wonder_skin.test.ts index d039ba1e6a7..fd4cc77bd1c 100644 --- a/test/abilities/wonder_skin.test.ts +++ b/test/abilities/wonder_skin.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/test/arena/arena_gravity.test.ts b/test/arena/arena_gravity.test.ts index 0ce5ac0ea4c..33a1631ad18 100644 --- a/test/arena/arena_gravity.test.ts +++ b/test/arena/arena_gravity.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Abilities } from "#enums/abilities"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; diff --git a/test/arena/grassy_terrain.test.ts b/test/arena/grassy_terrain.test.ts index f8ca07bd65e..05b57d210de 100644 --- a/test/arena/grassy_terrain.test.ts +++ b/test/arena/grassy_terrain.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/arena/weather_fog.test.ts b/test/arena/weather_fog.test.ts index b1edf75704b..ae41c9d14e8 100644 --- a/test/arena/weather_fog.test.ts +++ b/test/arena/weather_fog.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Abilities } from "#app/enums/abilities"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Moves } from "#enums/moves"; diff --git a/test/arena/weather_strong_winds.test.ts b/test/arena/weather_strong_winds.test.ts index 9fcdb18c872..b996d8bf62a 100644 --- a/test/arena/weather_strong_winds.test.ts +++ b/test/arena/weather_strong_winds.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { StatusEffect } from "#app/enums/status-effect"; import { TurnStartPhase } from "#app/phases/turn-start-phase"; import { Abilities } from "#enums/abilities"; diff --git a/test/battle/damage_calculation.test.ts b/test/battle/damage_calculation.test.ts index 26772cbc4f0..1d027a96792 100644 --- a/test/battle/damage_calculation.test.ts +++ b/test/battle/damage_calculation.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import type { EnemyPersistentModifier } from "#app/modifier/modifier"; import { modifierTypes } from "#app/modifier/modifier-type"; import { Abilities } from "#enums/abilities"; diff --git a/test/battlerTags/substitute.test.ts b/test/battlerTags/substitute.test.ts index c2a99299716..827b9f48f85 100644 --- a/test/battlerTags/substitute.test.ts +++ b/test/battlerTags/substitute.test.ts @@ -7,7 +7,7 @@ import { BattlerTagLapseType, BindTag, SubstituteTag } from "#app/data/battler-t import { Moves } from "#app/enums/moves"; import { PokemonAnimType } from "#app/enums/pokemon-anim-type"; import * as messages from "#app/messages"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import type { MoveEffectPhase } from "#app/phases/move-effect-phase"; import GameManager from "#test/testUtils/gameManager"; diff --git a/test/enemy_command.test.ts b/test/enemy_command.test.ts index ae1f2918798..e5199847702 100644 --- a/test/enemy_command.test.ts +++ b/test/enemy_command.test.ts @@ -1,5 +1,5 @@ import type BattleScene from "#app/battle-scene"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { MoveCategory } from "#enums/MoveCategory"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; diff --git a/test/items/reviver_seed.test.ts b/test/items/reviver_seed.test.ts index 3c67481a904..13aaf98249e 100644 --- a/test/items/reviver_seed.test.ts +++ b/test/items/reviver_seed.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import type { PokemonInstantReviveModifier } from "#app/modifier/modifier"; import { Abilities } from "#enums/abilities"; diff --git a/test/moves/astonish.test.ts b/test/moves/astonish.test.ts index 1713df1de15..accddcd545d 100644 --- a/test/moves/astonish.test.ts +++ b/test/moves/astonish.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { BerryPhase } from "#app/phases/berry-phase"; import { CommandPhase } from "#app/phases/command-phase"; diff --git a/test/moves/aurora_veil.test.ts b/test/moves/aurora_veil.test.ts index e9ab66d4203..96e74ec5a9e 100644 --- a/test/moves/aurora_veil.test.ts +++ b/test/moves/aurora_veil.test.ts @@ -1,7 +1,8 @@ import type BattleScene from "#app/battle-scene"; import { ArenaTagSide } from "#app/data/arena-tag"; import type Move from "#app/data/moves/move"; -import { allMoves, CritOnlyAttr } from "#app/data/moves/move"; +import { CritOnlyAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import type Pokemon from "#app/field/pokemon"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; diff --git a/test/moves/burning_jealousy.test.ts b/test/moves/burning_jealousy.test.ts index ea02bf5f4f5..1d9ba974687 100644 --- a/test/moves/burning_jealousy.test.ts +++ b/test/moves/burning_jealousy.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Abilities } from "#app/enums/abilities"; import { StatusEffect } from "#app/enums/status-effect"; import { Moves } from "#enums/moves"; diff --git a/test/moves/ceaseless_edge.test.ts b/test/moves/ceaseless_edge.test.ts index 72e552bef6f..e88b301239d 100644 --- a/test/moves/ceaseless_edge.test.ts +++ b/test/moves/ceaseless_edge.test.ts @@ -1,5 +1,5 @@ import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Abilities } from "#app/enums/abilities"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; diff --git a/test/moves/copycat.test.ts b/test/moves/copycat.test.ts index 2e6e8098835..96c21723ab9 100644 --- a/test/moves/copycat.test.ts +++ b/test/moves/copycat.test.ts @@ -1,5 +1,6 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves, RandomMoveAttr } from "#app/data/moves/move"; +import { RandomMoveAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Stat } from "#app/enums/stat"; import { MoveResult } from "#app/field/pokemon"; import { Abilities } from "#enums/abilities"; diff --git a/test/moves/destiny_bond.test.ts b/test/moves/destiny_bond.test.ts index 6e6446f464f..16014677f39 100644 --- a/test/moves/destiny_bond.test.ts +++ b/test/moves/destiny_bond.test.ts @@ -1,6 +1,6 @@ import type { ArenaTrapTag } from "#app/data/arena-tag"; import { ArenaTagSide } from "#app/data/arena-tag"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Abilities } from "#enums/abilities"; import { ArenaTagType } from "#enums/arena-tag-type"; import { Moves } from "#enums/moves"; diff --git a/test/moves/diamond_storm.test.ts b/test/moves/diamond_storm.test.ts index 9ba62bbc52d..1e64babacfb 100644 --- a/test/moves/diamond_storm.test.ts +++ b/test/moves/diamond_storm.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/moves/dig.test.ts b/test/moves/dig.test.ts index 80d51a5c2d5..e8f39c05fd8 100644 --- a/test/moves/dig.test.ts +++ b/test/moves/dig.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Abilities } from "#enums/abilities"; import { BattlerTagType } from "#enums/battler-tag-type"; import { Moves } from "#enums/moves"; diff --git a/test/moves/dragon_tail.test.ts b/test/moves/dragon_tail.test.ts index 31e5560d4e0..0e7cd04d078 100644 --- a/test/moves/dragon_tail.test.ts +++ b/test/moves/dragon_tail.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Status } from "#app/data/status-effect"; import { Challenges } from "#enums/challenges"; import { StatusEffect } from "#enums/status-effect"; diff --git a/test/moves/dynamax_cannon.test.ts b/test/moves/dynamax_cannon.test.ts index 84def8a821f..6c4f1a321e3 100644 --- a/test/moves/dynamax_cannon.test.ts +++ b/test/moves/dynamax_cannon.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Moves } from "#enums/moves"; diff --git a/test/moves/effectiveness.test.ts b/test/moves/effectiveness.test.ts index fb03f1c10a0..9fc6c7b8ce7 100644 --- a/test/moves/effectiveness.test.ts +++ b/test/moves/effectiveness.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { TrainerSlot } from "#enums/trainer-slot"; import { PokemonType } from "#enums/pokemon-type"; diff --git a/test/moves/fell_stinger.test.ts b/test/moves/fell_stinger.test.ts index 11731d8a06f..50813029c05 100644 --- a/test/moves/fell_stinger.test.ts +++ b/test/moves/fell_stinger.test.ts @@ -7,7 +7,7 @@ import { Moves } from "#enums/moves"; import { Stat } from "#enums/stat"; import { StatusEffect } from "#app/enums/status-effect"; import { WeatherType } from "#app/enums/weather-type"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; describe("Moves - Fell Stinger", () => { let phaserGame: Phaser.Game; diff --git a/test/moves/fly.test.ts b/test/moves/fly.test.ts index f200e976704..74f8bc4a770 100644 --- a/test/moves/fly.test.ts +++ b/test/moves/fly.test.ts @@ -8,7 +8,7 @@ import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; describe("Moves - Fly", () => { let phaserGame: Phaser.Game; diff --git a/test/moves/freezy_frost.test.ts b/test/moves/freezy_frost.test.ts index 4eb3114a5ba..7cee9bfb372 100644 --- a/test/moves/freezy_frost.test.ts +++ b/test/moves/freezy_frost.test.ts @@ -5,7 +5,7 @@ import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { CommandPhase } from "#app/phases/command-phase"; describe("Moves - Freezy Frost", () => { diff --git a/test/moves/fusion_flare_bolt.test.ts b/test/moves/fusion_flare_bolt.test.ts index ce6bb62d1d0..da2d48a7cdb 100644 --- a/test/moves/fusion_flare_bolt.test.ts +++ b/test/moves/fusion_flare_bolt.test.ts @@ -1,6 +1,6 @@ import { Stat } from "#enums/stat"; import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import type Move from "#app/data/moves/move"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; diff --git a/test/moves/glaive_rush.test.ts b/test/moves/glaive_rush.test.ts index 3c2bcea7884..979c26ca20f 100644 --- a/test/moves/glaive_rush.test.ts +++ b/test/moves/glaive_rush.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; diff --git a/test/moves/hard_press.test.ts b/test/moves/hard_press.test.ts index 8fe768cb8e4..e1a01c0109d 100644 --- a/test/moves/hard_press.test.ts +++ b/test/moves/hard_press.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/test/moves/hyper_beam.test.ts b/test/moves/hyper_beam.test.ts index 5b370f49e4c..e6b3955ef0d 100644 --- a/test/moves/hyper_beam.test.ts +++ b/test/moves/hyper_beam.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Abilities } from "#app/enums/abilities"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { Moves } from "#app/enums/moves"; diff --git a/test/moves/lash_out.test.ts b/test/moves/lash_out.test.ts index c80a8ce348a..e45df4fc998 100644 --- a/test/moves/lash_out.test.ts +++ b/test/moves/lash_out.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/moves/last_respects.test.ts b/test/moves/last_respects.test.ts index a69ecb2e989..89c4896ae56 100644 --- a/test/moves/last_respects.test.ts +++ b/test/moves/last_respects.test.ts @@ -3,7 +3,7 @@ import { BattlerIndex } from "#app/battle"; import { Species } from "#enums/species"; import { Abilities } from "#enums/abilities"; import GameManager from "#test/testUtils/gameManager"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import type Move from "#app/data/moves/move"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import Phaser from "phaser"; diff --git a/test/moves/light_screen.test.ts b/test/moves/light_screen.test.ts index cea26f29542..93d51ad7372 100644 --- a/test/moves/light_screen.test.ts +++ b/test/moves/light_screen.test.ts @@ -1,7 +1,8 @@ import type BattleScene from "#app/battle-scene"; import { ArenaTagSide } from "#app/data/arena-tag"; import type Move from "#app/data/moves/move"; -import { allMoves, CritOnlyAttr } from "#app/data/moves/move"; +import { CritOnlyAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Abilities } from "#app/enums/abilities"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import type Pokemon from "#app/field/pokemon"; diff --git a/test/moves/magic_coat.test.ts b/test/moves/magic_coat.test.ts index 23deef97318..4e0bd7f0a98 100644 --- a/test/moves/magic_coat.test.ts +++ b/test/moves/magic_coat.test.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; import { ArenaTagSide } from "#app/data/arena-tag"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { Stat } from "#app/enums/stat"; diff --git a/test/moves/metronome.test.ts b/test/moves/metronome.test.ts index bf177fb1a93..75b4b7190e6 100644 --- a/test/moves/metronome.test.ts +++ b/test/moves/metronome.test.ts @@ -1,5 +1,6 @@ import { RechargingTag, SemiInvulnerableTag } from "#app/data/battler-tags"; -import { allMoves, RandomMoveAttr } from "#app/data/moves/move"; +import { RandomMoveAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Abilities } from "#app/enums/abilities"; import { Stat } from "#app/enums/stat"; import { CommandPhase } from "#app/phases/command-phase"; diff --git a/test/moves/moongeist_beam.test.ts b/test/moves/moongeist_beam.test.ts index 82a2567377b..29398776f7f 100644 --- a/test/moves/moongeist_beam.test.ts +++ b/test/moves/moongeist_beam.test.ts @@ -1,4 +1,5 @@ -import { allMoves, RandomMoveAttr } from "#app/data/moves/move"; +import { RandomMoveAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/moves/pledge_moves.test.ts b/test/moves/pledge_moves.test.ts index 2bfd408e5fb..9dbf2b4cb02 100644 --- a/test/moves/pledge_moves.test.ts +++ b/test/moves/pledge_moves.test.ts @@ -1,7 +1,8 @@ import { BattlerIndex } from "#app/battle"; import { allAbilities } from "#app/data/data-lists"; import { ArenaTagSide } from "#app/data/arena-tag"; -import { allMoves, FlinchAttr } from "#app/data/moves/move"; +import { FlinchAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { PokemonType } from "#enums/pokemon-type"; import { ArenaTagType } from "#enums/arena-tag-type"; import { Stat } from "#enums/stat"; diff --git a/test/moves/protect.test.ts b/test/moves/protect.test.ts index 183430f8654..14844019b31 100644 --- a/test/moves/protect.test.ts +++ b/test/moves/protect.test.ts @@ -5,7 +5,7 @@ import { Species } from "#enums/species"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Stat } from "#enums/stat"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; import { BattlerIndex } from "#app/battle"; import { MoveResult } from "#app/field/pokemon"; diff --git a/test/moves/rage_fist.test.ts b/test/moves/rage_fist.test.ts index f215c5955c6..0aabb717f1b 100644 --- a/test/moves/rage_fist.test.ts +++ b/test/moves/rage_fist.test.ts @@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import type Move from "#app/data/moves/move"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; diff --git a/test/moves/reflect.test.ts b/test/moves/reflect.test.ts index b8338cea8cf..268d9ebb71b 100644 --- a/test/moves/reflect.test.ts +++ b/test/moves/reflect.test.ts @@ -1,7 +1,8 @@ import type BattleScene from "#app/battle-scene"; import { ArenaTagSide } from "#app/data/arena-tag"; import type Move from "#app/data/moves/move"; -import { allMoves, CritOnlyAttr } from "#app/data/moves/move"; +import { CritOnlyAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Abilities } from "#app/enums/abilities"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import type Pokemon from "#app/field/pokemon"; diff --git a/test/moves/retaliate.test.ts b/test/moves/retaliate.test.ts index 9ad7cd7853b..81ea353a120 100644 --- a/test/moves/retaliate.test.ts +++ b/test/moves/retaliate.test.ts @@ -3,7 +3,7 @@ import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { Moves } from "#enums/moves"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import type Move from "#app/data/moves/move"; describe("Moves - Retaliate", () => { diff --git a/test/moves/rollout.test.ts b/test/moves/rollout.test.ts index b477fd8274f..dab9ef67596 100644 --- a/test/moves/rollout.test.ts +++ b/test/moves/rollout.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { CommandPhase } from "#app/phases/command-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/test/moves/round.test.ts b/test/moves/round.test.ts index a58efb730f8..43e505705ae 100644 --- a/test/moves/round.test.ts +++ b/test/moves/round.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import type { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/test/moves/scale_shot.test.ts b/test/moves/scale_shot.test.ts index 4731ccf9574..49e68c75450 100644 --- a/test/moves/scale_shot.test.ts +++ b/test/moves/scale_shot.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; diff --git a/test/moves/secret_power.test.ts b/test/moves/secret_power.test.ts index cbc0cded28b..f6870c5ed1d 100644 --- a/test/moves/secret_power.test.ts +++ b/test/moves/secret_power.test.ts @@ -2,7 +2,7 @@ import { Abilities } from "#enums/abilities"; import { Biome } from "#enums/biome"; import { Moves } from "#enums/moves"; import { Stat } from "#enums/stat"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; diff --git a/test/moves/shell_side_arm.test.ts b/test/moves/shell_side_arm.test.ts index e43bf6db037..4d7ae7025a1 100644 --- a/test/moves/shell_side_arm.test.ts +++ b/test/moves/shell_side_arm.test.ts @@ -1,5 +1,6 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves, ShellSideArmCategoryAttr } from "#app/data/moves/move"; +import { ShellSideArmCategoryAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import type Move from "#app/data/moves/move"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/test/moves/shell_trap.test.ts b/test/moves/shell_trap.test.ts index f6501c2cd9e..313d02b4d73 100644 --- a/test/moves/shell_trap.test.ts +++ b/test/moves/shell_trap.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { MoveResult } from "#app/field/pokemon"; diff --git a/test/moves/sketch.test.ts b/test/moves/sketch.test.ts index c9755189a71..fc38d6a1147 100644 --- a/test/moves/sketch.test.ts +++ b/test/moves/sketch.test.ts @@ -7,7 +7,8 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { StatusEffect } from "#app/enums/status-effect"; import { BattlerIndex } from "#app/battle"; -import { allMoves, RandomMoveAttr } from "#app/data/moves/move"; +import { RandomMoveAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; describe("Moves - Sketch", () => { let phaserGame: Phaser.Game; diff --git a/test/moves/solar_beam.test.ts b/test/moves/solar_beam.test.ts index 49605a70c66..8566859a4bc 100644 --- a/test/moves/solar_beam.test.ts +++ b/test/moves/solar_beam.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { BattlerTagType } from "#enums/battler-tag-type"; import { WeatherType } from "#enums/weather-type"; import { MoveResult } from "#app/field/pokemon"; diff --git a/test/moves/sparkly_swirl.test.ts b/test/moves/sparkly_swirl.test.ts index b9df302933c..9eb018d4be7 100644 --- a/test/moves/sparkly_swirl.test.ts +++ b/test/moves/sparkly_swirl.test.ts @@ -1,4 +1,4 @@ -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { StatusEffect } from "#app/enums/status-effect"; import { CommandPhase } from "#app/phases/command-phase"; import { Abilities } from "#enums/abilities"; diff --git a/test/moves/spectral_thief.test.ts b/test/moves/spectral_thief.test.ts index 2654ab1ad8d..4c2e9f96274 100644 --- a/test/moves/spectral_thief.test.ts +++ b/test/moves/spectral_thief.test.ts @@ -1,7 +1,7 @@ import { Abilities } from "#enums/abilities"; import { BattlerIndex } from "#app/battle"; import { Stat } from "#enums/stat"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; diff --git a/test/moves/spit_up.test.ts b/test/moves/spit_up.test.ts index c034117bc64..7197d9b75c3 100644 --- a/test/moves/spit_up.test.ts +++ b/test/moves/spit_up.test.ts @@ -1,6 +1,6 @@ import { Stat } from "#enums/stat"; import { StockpilingTag } from "#app/data/battler-tags"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import type { TurnMove } from "#app/field/pokemon"; import { MoveResult } from "#app/field/pokemon"; diff --git a/test/moves/steamroller.test.ts b/test/moves/steamroller.test.ts index b32b4551c81..a77a30321e1 100644 --- a/test/moves/steamroller.test.ts +++ b/test/moves/steamroller.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import type { DamageCalculationResult } from "#app/field/pokemon"; import { Abilities } from "#enums/abilities"; diff --git a/test/moves/substitute.test.ts b/test/moves/substitute.test.ts index 7f4a2e69f9e..6d0995d3a26 100644 --- a/test/moves/substitute.test.ts +++ b/test/moves/substitute.test.ts @@ -1,7 +1,8 @@ import { BattlerIndex } from "#app/battle"; import { ArenaTagSide } from "#app/data/arena-tag"; import { SubstituteTag, TrappedTag } from "#app/data/battler-tags"; -import { allMoves, StealHeldItemChanceAttr } from "#app/data/moves/move"; +import { StealHeldItemChanceAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { MoveResult } from "#app/field/pokemon"; import type { CommandPhase } from "#app/phases/command-phase"; import GameManager from "#test/testUtils/gameManager"; diff --git a/test/moves/telekinesis.test.ts b/test/moves/telekinesis.test.ts index d11cc0861f0..e889926b5c8 100644 --- a/test/moves/telekinesis.test.ts +++ b/test/moves/telekinesis.test.ts @@ -1,5 +1,5 @@ import { BattlerTagType } from "#enums/battler-tag-type"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/test/moves/tera_blast.test.ts b/test/moves/tera_blast.test.ts index efdb75e8156..c18c7f25498 100644 --- a/test/moves/tera_blast.test.ts +++ b/test/moves/tera_blast.test.ts @@ -1,6 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { Stat } from "#enums/stat"; -import { allMoves, TeraMoveCategoryAttr } from "#app/data/moves/move"; +import { TeraMoveCategoryAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import type Move from "#app/data/moves/move"; import { PokemonType } from "#enums/pokemon-type"; import { Abilities } from "#app/enums/abilities"; diff --git a/test/moves/toxic.test.ts b/test/moves/toxic.test.ts index f908d27ec7e..c773abb5bd3 100644 --- a/test/moves/toxic.test.ts +++ b/test/moves/toxic.test.ts @@ -5,7 +5,7 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { StatusEffect } from "#enums/status-effect"; import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; describe("Moves - Toxic", () => { let phaserGame: Phaser.Game; diff --git a/test/moves/triple_arrows.test.ts b/test/moves/triple_arrows.test.ts index 58ce8a9c528..bd061f4059d 100644 --- a/test/moves/triple_arrows.test.ts +++ b/test/moves/triple_arrows.test.ts @@ -1,4 +1,5 @@ -import { allMoves, FlinchAttr, StatStageChangeAttr } from "#app/data/moves/move"; +import { FlinchAttr, StatStageChangeAttr } from "#app/data/moves/move"; +import { allMoves } from "#app/data/data-lists"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import type Move from "#app/data/moves/move"; From da6cdaf187dbecddfe7ca42603604fc04435fa05 Mon Sep 17 00:00:00 2001 From: pom-eranian Date: Wed, 21 May 2025 23:25:07 -0400 Subject: [PATCH 157/262] [Sprite][Color][QoL] Removed unchanged entries in variant json (#5765) * Removed unchanged color entries (front) * Removed unchanged color entries (back) * Removed unchanged color entries (exp) * Removed unchanged color entries (exp back) * Removed unchanged color entries (female front, back, exp) --- public/images/pokemon/variant/1.json | 6 -- public/images/pokemon/variant/100.json | 2 - public/images/pokemon/variant/1000.json | 3 - public/images/pokemon/variant/1001.json | 12 +-- public/images/pokemon/variant/1003.json | 4 - public/images/pokemon/variant/1004.json | 8 +- public/images/pokemon/variant/1006.json | 2 - .../pokemon/variant/1008-ultimate-mode.json | 18 +---- public/images/pokemon/variant/101.json | 6 -- public/images/pokemon/variant/1010.json | 8 +- public/images/pokemon/variant/1018.json | 2 - public/images/pokemon/variant/1022.json | 4 - public/images/pokemon/variant/1023.json | 12 +-- public/images/pokemon/variant/111.json | 10 +-- public/images/pokemon/variant/112.json | 14 +--- public/images/pokemon/variant/114.json | 6 -- public/images/pokemon/variant/116.json | 6 -- public/images/pokemon/variant/117.json | 4 - public/images/pokemon/variant/118.json | 4 - public/images/pokemon/variant/119.json | 3 - public/images/pokemon/variant/120.json | 2 - public/images/pokemon/variant/121.json | 2 - public/images/pokemon/variant/123.json | 26 +----- public/images/pokemon/variant/125.json | 4 - public/images/pokemon/variant/126.json | 4 - public/images/pokemon/variant/127-mega.json | 12 +-- public/images/pokemon/variant/127.json | 8 +- public/images/pokemon/variant/129.json | 5 +- public/images/pokemon/variant/130-mega.json | 5 -- public/images/pokemon/variant/130.json | 3 - .../pokemon/variant/131-gigantamax.json | 6 -- public/images/pokemon/variant/131.json | 5 -- public/images/pokemon/variant/132.json | 2 - .../images/pokemon/variant/133-partner.json | 4 - public/images/pokemon/variant/133.json | 4 - public/images/pokemon/variant/134.json | 10 +-- public/images/pokemon/variant/135.json | 3 - public/images/pokemon/variant/136.json | 6 -- public/images/pokemon/variant/137.json | 2 - public/images/pokemon/variant/138.json | 2 - public/images/pokemon/variant/139.json | 4 +- public/images/pokemon/variant/140.json | 4 - public/images/pokemon/variant/142-mega.json | 4 - public/images/pokemon/variant/142.json | 6 -- public/images/pokemon/variant/144.json | 6 +- public/images/pokemon/variant/145.json | 9 --- public/images/pokemon/variant/146.json | 18 +---- public/images/pokemon/variant/147.json | 2 - public/images/pokemon/variant/148.json | 2 - public/images/pokemon/variant/149.json | 12 +-- public/images/pokemon/variant/150-mega-x.json | 4 - public/images/pokemon/variant/150-mega-y.json | 5 -- public/images/pokemon/variant/150.json | 4 - public/images/pokemon/variant/151.json | 6 -- public/images/pokemon/variant/161.json | 5 +- public/images/pokemon/variant/162.json | 7 +- public/images/pokemon/variant/163.json | 10 +-- public/images/pokemon/variant/169.json | 13 +-- public/images/pokemon/variant/173.json | 4 +- public/images/pokemon/variant/175.json | 4 - public/images/pokemon/variant/176.json | 3 - public/images/pokemon/variant/177.json | 10 +-- public/images/pokemon/variant/179.json | 4 - public/images/pokemon/variant/181-mega.json | 2 - public/images/pokemon/variant/181.json | 2 - public/images/pokemon/variant/182.json | 4 - public/images/pokemon/variant/183.json | 1 - public/images/pokemon/variant/185.json | 2 - public/images/pokemon/variant/19.json | 12 +-- public/images/pokemon/variant/190.json | 10 +-- public/images/pokemon/variant/193.json | 2 - public/images/pokemon/variant/196.json | 8 +- public/images/pokemon/variant/197.json | 3 - public/images/pokemon/variant/199.json | 6 -- public/images/pokemon/variant/2.json | 4 +- public/images/pokemon/variant/20.json | 2 - public/images/pokemon/variant/200.json | 6 -- public/images/pokemon/variant/201-a.json | 3 +- public/images/pokemon/variant/201-b.json | 3 +- public/images/pokemon/variant/201-c.json | 3 +- public/images/pokemon/variant/201-d.json | 6 +- public/images/pokemon/variant/201-e.json | 3 +- .../pokemon/variant/201-exclamation.json | 3 +- public/images/pokemon/variant/201-f.json | 3 +- public/images/pokemon/variant/201-g.json | 3 +- public/images/pokemon/variant/201-h.json | 3 +- public/images/pokemon/variant/201-i.json | 3 +- public/images/pokemon/variant/201-j.json | 6 +- public/images/pokemon/variant/201-k.json | 3 +- public/images/pokemon/variant/201-l.json | 6 +- public/images/pokemon/variant/201-m.json | 3 +- public/images/pokemon/variant/201-n.json | 3 +- public/images/pokemon/variant/201-o.json | 3 +- public/images/pokemon/variant/201-p.json | 3 +- public/images/pokemon/variant/201-q.json | 3 +- .../images/pokemon/variant/201-question.json | 3 +- public/images/pokemon/variant/201-r.json | 3 +- public/images/pokemon/variant/201-s.json | 3 +- public/images/pokemon/variant/201-t.json | 3 +- public/images/pokemon/variant/201-u.json | 3 +- public/images/pokemon/variant/201-v.json | 3 +- public/images/pokemon/variant/201-w.json | 3 +- public/images/pokemon/variant/201-x.json | 6 +- public/images/pokemon/variant/201-y.json | 3 +- public/images/pokemon/variant/201-z.json | 3 +- public/images/pokemon/variant/2027.json | 10 +-- public/images/pokemon/variant/2028.json | 4 - public/images/pokemon/variant/203.json | 4 - public/images/pokemon/variant/2052.json | 6 -- public/images/pokemon/variant/2053.json | 6 +- public/images/pokemon/variant/206.json | 8 +- public/images/pokemon/variant/212-mega.json | 25 +----- public/images/pokemon/variant/212.json | 19 +---- public/images/pokemon/variant/213.json | 2 - public/images/pokemon/variant/215.json | 3 - public/images/pokemon/variant/216.json | 21 +---- public/images/pokemon/variant/217.json | 19 +---- public/images/pokemon/variant/222.json | 3 - public/images/pokemon/variant/227.json | 3 - public/images/pokemon/variant/228.json | 13 +-- public/images/pokemon/variant/229-mega.json | 8 -- public/images/pokemon/variant/229.json | 9 +-- public/images/pokemon/variant/23.json | 4 - public/images/pokemon/variant/230.json | 2 - public/images/pokemon/variant/231.json | 6 +- public/images/pokemon/variant/232.json | 6 -- public/images/pokemon/variant/233.json | 3 - public/images/pokemon/variant/235.json | 12 +-- public/images/pokemon/variant/239.json | 10 +-- public/images/pokemon/variant/24.json | 6 -- public/images/pokemon/variant/240.json | 8 -- public/images/pokemon/variant/243.json | 2 - public/images/pokemon/variant/245.json | 2 - public/images/pokemon/variant/246.json | 4 - public/images/pokemon/variant/247.json | 3 - public/images/pokemon/variant/248-mega.json | 56 ++++++------- public/images/pokemon/variant/248.json | 4 - public/images/pokemon/variant/251.json | 5 +- public/images/pokemon/variant/255.json | 4 - public/images/pokemon/variant/256.json | 6 -- public/images/pokemon/variant/257-mega.json | 2 - public/images/pokemon/variant/257.json | 1 - public/images/pokemon/variant/261.json | 12 +-- public/images/pokemon/variant/262.json | 14 +--- public/images/pokemon/variant/263.json | 10 +-- public/images/pokemon/variant/264.json | 8 +- public/images/pokemon/variant/2670.json | 2 - public/images/pokemon/variant/278.json | 3 - public/images/pokemon/variant/279.json | 2 +- public/images/pokemon/variant/282.json | 8 -- public/images/pokemon/variant/285.json | 5 -- public/images/pokemon/variant/286.json | 10 +-- public/images/pokemon/variant/29.json | 10 +-- public/images/pokemon/variant/290.json | 4 - public/images/pokemon/variant/292.json | 1 - .../images/pokemon/variant/3-gigantamax.json | 4 - public/images/pokemon/variant/3.json | 8 +- public/images/pokemon/variant/30.json | 12 +-- public/images/pokemon/variant/300.json | 3 - public/images/pokemon/variant/301.json | 9 --- public/images/pokemon/variant/302-mega.json | 2 - public/images/pokemon/variant/302.json | 2 - public/images/pokemon/variant/303-mega.json | 11 --- public/images/pokemon/variant/303.json | 8 +- public/images/pokemon/variant/304.json | 3 - public/images/pokemon/variant/305.json | 3 - public/images/pokemon/variant/306-mega.json | 11 +-- public/images/pokemon/variant/306.json | 3 - public/images/pokemon/variant/307.json | 13 +-- public/images/pokemon/variant/308-mega.json | 8 +- public/images/pokemon/variant/308.json | 2 - public/images/pokemon/variant/309.json | 6 -- public/images/pokemon/variant/31.json | 14 +--- public/images/pokemon/variant/310-mega.json | 4 - public/images/pokemon/variant/310.json | 10 +-- public/images/pokemon/variant/311.json | 9 +-- public/images/pokemon/variant/312.json | 4 - public/images/pokemon/variant/315.json | 2 - public/images/pokemon/variant/320.json | 8 -- public/images/pokemon/variant/321.json | 8 +- public/images/pokemon/variant/327.json | 2 - public/images/pokemon/variant/328.json | 12 +-- public/images/pokemon/variant/329.json | 2 - public/images/pokemon/variant/330.json | 4 - public/images/pokemon/variant/333.json | 8 +- public/images/pokemon/variant/334-mega.json | 3 +- public/images/pokemon/variant/336.json | 4 - public/images/pokemon/variant/337.json | 2 - public/images/pokemon/variant/338.json | 2 - public/images/pokemon/variant/339.json | 3 - public/images/pokemon/variant/340.json | 2 - public/images/pokemon/variant/35.json | 2 - public/images/pokemon/variant/351-rainy.json | 5 -- public/images/pokemon/variant/351-snowy.json | 15 +--- public/images/pokemon/variant/351-sunny.json | 1 - public/images/pokemon/variant/352.json | 13 +-- public/images/pokemon/variant/353.json | 2 - public/images/pokemon/variant/354-mega.json | 3 - public/images/pokemon/variant/354.json | 3 - public/images/pokemon/variant/357.json | 3 - public/images/pokemon/variant/358.json | 2 - public/images/pokemon/variant/36.json | 8 +- public/images/pokemon/variant/361.json | 7 +- public/images/pokemon/variant/362-mega.json | 1 - public/images/pokemon/variant/369.json | 2 - public/images/pokemon/variant/37.json | 4 - public/images/pokemon/variant/370.json | 3 - public/images/pokemon/variant/371.json | 12 +-- public/images/pokemon/variant/372.json | 4 - public/images/pokemon/variant/373.json | 4 - public/images/pokemon/variant/374.json | 2 - public/images/pokemon/variant/375.json | 3 - public/images/pokemon/variant/376-mega.json | 2 - public/images/pokemon/variant/376.json | 2 - public/images/pokemon/variant/38.json | 4 - public/images/pokemon/variant/380-mega.json | 4 - public/images/pokemon/variant/380.json | 4 - public/images/pokemon/variant/381-mega.json | 4 - public/images/pokemon/variant/381.json | 4 - public/images/pokemon/variant/382-primal.json | 4 - public/images/pokemon/variant/382.json | 4 - public/images/pokemon/variant/383-primal.json | 6 -- public/images/pokemon/variant/383.json | 2 - public/images/pokemon/variant/384-mega.json | 4 +- public/images/pokemon/variant/384.json | 10 +-- public/images/pokemon/variant/385.json | 6 -- public/images/pokemon/variant/387.json | 7 +- public/images/pokemon/variant/388.json | 12 +-- public/images/pokemon/variant/389.json | 2 - public/images/pokemon/variant/393.json | 3 - public/images/pokemon/variant/394.json | 3 - public/images/pokemon/variant/395.json | 9 +-- public/images/pokemon/variant/399.json | 7 +- public/images/pokemon/variant/4.json | 4 - public/images/pokemon/variant/400.json | 5 -- public/images/pokemon/variant/401.json | 2 - public/images/pokemon/variant/402.json | 5 -- public/images/pokemon/variant/4052.json | 5 -- public/images/pokemon/variant/406.json | 10 +-- public/images/pokemon/variant/407.json | 2 - public/images/pokemon/variant/4077.json | 8 +- public/images/pokemon/variant/4078.json | 4 - public/images/pokemon/variant/4079.json | 6 -- public/images/pokemon/variant/4080.json | 6 -- public/images/pokemon/variant/41.json | 10 +-- public/images/pokemon/variant/412-plant.json | 5 -- public/images/pokemon/variant/412-trash.json | 3 - public/images/pokemon/variant/413-sandy.json | 6 -- public/images/pokemon/variant/413-trash.json | 6 -- public/images/pokemon/variant/414.json | 2 - public/images/pokemon/variant/418.json | 7 -- public/images/pokemon/variant/419.json | 5 -- public/images/pokemon/variant/4199.json | 4 - public/images/pokemon/variant/42.json | 8 -- public/images/pokemon/variant/422-east.json | 9 --- public/images/pokemon/variant/422-west.json | 6 -- public/images/pokemon/variant/4222.json | 2 - public/images/pokemon/variant/423-east.json | 11 --- public/images/pokemon/variant/423-west.json | 21 +---- public/images/pokemon/variant/424.json | 10 +-- public/images/pokemon/variant/425.json | 2 - public/images/pokemon/variant/426.json | 2 - public/images/pokemon/variant/4263.json | 4 - public/images/pokemon/variant/4264.json | 4 - public/images/pokemon/variant/427.json | 10 +-- public/images/pokemon/variant/428-mega.json | 4 - public/images/pokemon/variant/428.json | 4 - public/images/pokemon/variant/429.json | 6 -- public/images/pokemon/variant/43.json | 2 - public/images/pokemon/variant/433.json | 12 +-- public/images/pokemon/variant/436.json | 2 - public/images/pokemon/variant/437.json | 2 - public/images/pokemon/variant/438.json | 5 +- public/images/pokemon/variant/44.json | 2 - public/images/pokemon/variant/440.json | 2 - public/images/pokemon/variant/441.json | 2 - public/images/pokemon/variant/442.json | 6 -- public/images/pokemon/variant/443.json | 13 --- public/images/pokemon/variant/444.json | 15 +--- public/images/pokemon/variant/445-mega.json | 24 +----- public/images/pokemon/variant/445.json | 15 ---- public/images/pokemon/variant/447.json | 10 +-- public/images/pokemon/variant/448-mega.json | 5 -- public/images/pokemon/variant/448.json | 7 +- public/images/pokemon/variant/45.json | 2 - public/images/pokemon/variant/456.json | 4 - public/images/pokemon/variant/4562.json | 6 -- public/images/pokemon/variant/457.json | 8 +- public/images/pokemon/variant/458.json | 4 - public/images/pokemon/variant/46.json | 6 -- public/images/pokemon/variant/461.json | 3 - public/images/pokemon/variant/462.json | 8 +- public/images/pokemon/variant/464.json | 7 -- public/images/pokemon/variant/466.json | 9 +-- public/images/pokemon/variant/467.json | 14 +--- public/images/pokemon/variant/468.json | 3 - public/images/pokemon/variant/47.json | 3 - public/images/pokemon/variant/470.json | 10 +-- public/images/pokemon/variant/471.json | 3 - public/images/pokemon/variant/474.json | 3 - public/images/pokemon/variant/475.json | 8 -- public/images/pokemon/variant/478.json | 1 - public/images/pokemon/variant/479-fan.json | 4 - public/images/pokemon/variant/479-frost.json | 4 - public/images/pokemon/variant/479-heat.json | 4 - public/images/pokemon/variant/479-mow.json | 5 -- public/images/pokemon/variant/479-wash.json | 4 - public/images/pokemon/variant/479.json | 4 - public/images/pokemon/variant/480.json | 6 -- public/images/pokemon/variant/481.json | 6 -- public/images/pokemon/variant/482.json | 10 +-- public/images/pokemon/variant/485.json | 4 - .../images/pokemon/variant/487-altered.json | 2 - public/images/pokemon/variant/487-origin.json | 3 - public/images/pokemon/variant/488.json | 6 +- public/images/pokemon/variant/489.json | 14 ---- public/images/pokemon/variant/490.json | 7 -- public/images/pokemon/variant/491.json | 4 - public/images/pokemon/variant/492-land.json | 2 - public/images/pokemon/variant/492-sky.json | 2 - public/images/pokemon/variant/494.json | 15 +--- public/images/pokemon/variant/495.json | 4 - public/images/pokemon/variant/496.json | 10 +-- public/images/pokemon/variant/497.json | 2 - public/images/pokemon/variant/5.json | 8 -- public/images/pokemon/variant/50.json | 4 - public/images/pokemon/variant/51.json | 4 - public/images/pokemon/variant/517.json | 4 - public/images/pokemon/variant/518.json | 8 +- .../images/pokemon/variant/52-gigantamax.json | 9 --- public/images/pokemon/variant/52.json | 13 --- public/images/pokemon/variant/524.json | 2 - public/images/pokemon/variant/525.json | 2 - public/images/pokemon/variant/53.json | 17 +--- public/images/pokemon/variant/531-mega.json | 2 - public/images/pokemon/variant/531.json | 11 +-- public/images/pokemon/variant/532.json | 6 -- public/images/pokemon/variant/533.json | 4 - public/images/pokemon/variant/534.json | 8 +- public/images/pokemon/variant/538.json | 8 +- public/images/pokemon/variant/540.json | 14 +--- public/images/pokemon/variant/541.json | 8 +- public/images/pokemon/variant/542.json | 4 - public/images/pokemon/variant/544.json | 1 - public/images/pokemon/variant/545.json | 3 - public/images/pokemon/variant/546.json | 2 - public/images/pokemon/variant/547.json | 11 +-- public/images/pokemon/variant/548.json | 13 +-- public/images/pokemon/variant/549.json | 5 +- public/images/pokemon/variant/551.json | 6 -- public/images/pokemon/variant/552.json | 4 - public/images/pokemon/variant/553.json | 4 - public/images/pokemon/variant/556.json | 2 - public/images/pokemon/variant/559.json | 25 +----- public/images/pokemon/variant/56.json | 8 +- public/images/pokemon/variant/560.json | 17 ---- public/images/pokemon/variant/562.json | 6 +- public/images/pokemon/variant/563.json | 2 - .../pokemon/variant/569-gigantamax.json | 2 - public/images/pokemon/variant/569.json | 5 +- public/images/pokemon/variant/570.json | 6 -- public/images/pokemon/variant/571.json | 7 +- public/images/pokemon/variant/577.json | 9 --- public/images/pokemon/variant/578.json | 3 - public/images/pokemon/variant/579.json | 4 - public/images/pokemon/variant/586-autumn.json | 9 +-- public/images/pokemon/variant/586-spring.json | 9 +-- public/images/pokemon/variant/586-summer.json | 3 - public/images/pokemon/variant/586-winter.json | 5 +- public/images/pokemon/variant/592.json | 2 - public/images/pokemon/variant/593.json | 10 +-- public/images/pokemon/variant/594.json | 2 - public/images/pokemon/variant/595.json | 4 - public/images/pokemon/variant/596.json | 10 +-- .../images/pokemon/variant/6-gigantamax.json | 1 - public/images/pokemon/variant/6-mega-x.json | 2 - public/images/pokemon/variant/6-mega-y.json | 5 +- public/images/pokemon/variant/602.json | 2 - public/images/pokemon/variant/603.json | 3 - public/images/pokemon/variant/604.json | 2 - public/images/pokemon/variant/605.json | 6 -- public/images/pokemon/variant/606.json | 4 - public/images/pokemon/variant/609.json | 2 - public/images/pokemon/variant/610.json | 6 -- public/images/pokemon/variant/6100.json | 4 - public/images/pokemon/variant/6101.json | 12 +-- public/images/pokemon/variant/611.json | 4 - public/images/pokemon/variant/612.json | 2 - public/images/pokemon/variant/618.json | 4 - public/images/pokemon/variant/619.json | 7 +- public/images/pokemon/variant/620.json | 6 -- public/images/pokemon/variant/6215.json | 10 +-- public/images/pokemon/variant/622.json | 1 - public/images/pokemon/variant/623.json | 2 - public/images/pokemon/variant/633.json | 2 - public/images/pokemon/variant/634.json | 10 +-- public/images/pokemon/variant/635.json | 8 +- public/images/pokemon/variant/640.json | 2 - .../images/pokemon/variant/647-ordinary.json | 13 +-- .../images/pokemon/variant/647-resolute.json | 12 +-- public/images/pokemon/variant/648-aria.json | 2 - .../images/pokemon/variant/648-pirouette.json | 1 - public/images/pokemon/variant/649-burn.json | 14 +--- public/images/pokemon/variant/649-chill.json | 12 +-- public/images/pokemon/variant/649-douse.json | 14 +--- public/images/pokemon/variant/649-shock.json | 14 +--- public/images/pokemon/variant/649.json | 14 +--- public/images/pokemon/variant/653.json | 8 +- public/images/pokemon/variant/654.json | 10 +-- public/images/pokemon/variant/6549.json | 5 +- public/images/pokemon/variant/655.json | 5 -- public/images/pokemon/variant/6570.json | 7 +- public/images/pokemon/variant/6571.json | 3 - public/images/pokemon/variant/664.json | 6 -- public/images/pokemon/variant/665.json | 4 - .../pokemon/variant/666-archipelago.json | 20 +---- .../pokemon/variant/666-continental.json | 20 +---- .../images/pokemon/variant/666-elegant.json | 20 +---- public/images/pokemon/variant/666-fancy.json | 56 +++++-------- public/images/pokemon/variant/666-garden.json | 18 +---- .../pokemon/variant/666-high-plains.json | 22 +---- .../images/pokemon/variant/666-icy-snow.json | 18 +---- public/images/pokemon/variant/666-jungle.json | 20 +---- public/images/pokemon/variant/666-marine.json | 18 +---- public/images/pokemon/variant/666-meadow.json | 20 +---- public/images/pokemon/variant/666-modern.json | 20 +---- .../images/pokemon/variant/666-monsoon.json | 48 ++++------- public/images/pokemon/variant/666-ocean.json | 20 +---- .../images/pokemon/variant/666-poke-ball.json | 12 +-- public/images/pokemon/variant/666-polar.json | 20 +---- public/images/pokemon/variant/666-river.json | 54 ++++--------- .../images/pokemon/variant/666-sandstorm.json | 20 +---- .../images/pokemon/variant/666-savanna.json | 20 +---- public/images/pokemon/variant/666-sun.json | 20 +---- public/images/pokemon/variant/666-tundra.json | 18 +---- public/images/pokemon/variant/669-orange.json | 1 - public/images/pokemon/variant/669-red.json | 9 +-- public/images/pokemon/variant/669-white.json | 8 -- public/images/pokemon/variant/669-yellow.json | 1 - public/images/pokemon/variant/6705.json | 5 +- public/images/pokemon/variant/671-blue.json | 5 -- public/images/pokemon/variant/671-orange.json | 7 -- public/images/pokemon/variant/671-red.json | 5 -- public/images/pokemon/variant/671-white.json | 5 -- public/images/pokemon/variant/671-yellow.json | 5 -- public/images/pokemon/variant/6713.json | 2 - public/images/pokemon/variant/672.json | 1 - public/images/pokemon/variant/673.json | 2 - public/images/pokemon/variant/677.json | 8 +- public/images/pokemon/variant/678-female.json | 4 - public/images/pokemon/variant/678.json | 4 - public/images/pokemon/variant/690.json | 2 - public/images/pokemon/variant/691.json | 1 - public/images/pokemon/variant/696.json | 70 +++++----------- public/images/pokemon/variant/697.json | 65 +++++++-------- public/images/pokemon/variant/698.json | 6 -- public/images/pokemon/variant/699.json | 4 - public/images/pokemon/variant/70.json | 2 - public/images/pokemon/variant/700.json | 2 - public/images/pokemon/variant/702.json | 4 - public/images/pokemon/variant/703.json | 3 - public/images/pokemon/variant/704.json | 2 - public/images/pokemon/variant/705.json | 2 - public/images/pokemon/variant/706.json | 4 - public/images/pokemon/variant/708.json | 2 - public/images/pokemon/variant/709.json | 2 - public/images/pokemon/variant/71.json | 4 - public/images/pokemon/variant/710.json | 2 - public/images/pokemon/variant/711.json | 3 - public/images/pokemon/variant/712.json | 7 +- public/images/pokemon/variant/713.json | 8 +- public/images/pokemon/variant/714.json | 4 - public/images/pokemon/variant/715.json | 76 +++++++++-------- public/images/pokemon/variant/716-active.json | 4 - .../images/pokemon/variant/716-neutral.json | 4 - public/images/pokemon/variant/717.json | 8 +- .../images/pokemon/variant/720-unbound.json | 12 +-- public/images/pokemon/variant/720.json | 3 - public/images/pokemon/variant/728.json | 4 - public/images/pokemon/variant/729.json | 6 -- public/images/pokemon/variant/730.json | 8 +- public/images/pokemon/variant/734.json | 7 -- public/images/pokemon/variant/735.json | 7 -- public/images/pokemon/variant/747.json | 8 +- public/images/pokemon/variant/748.json | 3 - public/images/pokemon/variant/752.json | 3 - public/images/pokemon/variant/753.json | 2 - public/images/pokemon/variant/754.json | 2 - public/images/pokemon/variant/755.json | 2 - public/images/pokemon/variant/756.json | 1 - public/images/pokemon/variant/761.json | 7 +- public/images/pokemon/variant/762.json | 7 -- public/images/pokemon/variant/763.json | 12 +-- public/images/pokemon/variant/767.json | 8 +- public/images/pokemon/variant/768.json | 7 +- public/images/pokemon/variant/77.json | 4 - public/images/pokemon/variant/771.json | 4 - public/images/pokemon/variant/772.json | 2 - public/images/pokemon/variant/773.json | 5 -- public/images/pokemon/variant/776.json | 4 - public/images/pokemon/variant/777.json | 5 -- .../images/pokemon/variant/778-disguised.json | 2 +- public/images/pokemon/variant/779.json | 10 +-- public/images/pokemon/variant/78.json | 4 - public/images/pokemon/variant/789.json | 12 --- public/images/pokemon/variant/79.json | 13 --- public/images/pokemon/variant/790.json | 9 --- .../pokemon/variant/791-radiant-sun.json | 4 - public/images/pokemon/variant/791.json | 8 +- .../images/pokemon/variant/792-full-moon.json | 9 --- public/images/pokemon/variant/792.json | 7 -- public/images/pokemon/variant/793.json | 6 +- public/images/pokemon/variant/797.json | 2 - public/images/pokemon/variant/798.json | 2 - public/images/pokemon/variant/80-mega.json | 6 -- public/images/pokemon/variant/80.json | 6 -- .../pokemon/variant/800-dawn-wings.json | 2 - .../images/pokemon/variant/800-dusk-mane.json | 8 +- public/images/pokemon/variant/800-ultra.json | 9 +-- public/images/pokemon/variant/800.json | 3 - public/images/pokemon/variant/802.json | 8 +- public/images/pokemon/variant/803.json | 2 - public/images/pokemon/variant/804.json | 2 - public/images/pokemon/variant/808.json | 8 +- .../pokemon/variant/809-gigantamax.json | 7 +- public/images/pokemon/variant/809.json | 8 +- public/images/pokemon/variant/81.json | 3 - public/images/pokemon/variant/816.json | 8 +- public/images/pokemon/variant/817.json | 4 - .../pokemon/variant/818-gigantamax.json | 9 +-- public/images/pokemon/variant/818.json | 4 - public/images/pokemon/variant/82.json | 3 - public/images/pokemon/variant/821.json | 6 -- public/images/pokemon/variant/822.json | 4 - public/images/pokemon/variant/823.json | 5 +- public/images/pokemon/variant/829.json | 3 - public/images/pokemon/variant/830.json | 2 - public/images/pokemon/variant/835.json | 12 +-- public/images/pokemon/variant/84.json | 7 -- public/images/pokemon/variant/85.json | 11 --- public/images/pokemon/variant/850.json | 14 +--- .../pokemon/variant/851-gigantamax.json | 11 +-- public/images/pokemon/variant/851.json | 5 -- public/images/pokemon/variant/854.json | 3 - public/images/pokemon/variant/855.json | 6 +- public/images/pokemon/variant/856.json | 2 - .../pokemon/variant/858-gigantamax.json | 4 - public/images/pokemon/variant/858.json | 8 +- public/images/pokemon/variant/859.json | 5 -- public/images/pokemon/variant/86.json | 11 +-- public/images/pokemon/variant/860.json | 5 -- .../pokemon/variant/861-gigantamax.json | 5 -- public/images/pokemon/variant/861.json | 7 -- public/images/pokemon/variant/862.json | 9 +-- public/images/pokemon/variant/863.json | 4 - public/images/pokemon/variant/864.json | 2 - public/images/pokemon/variant/867.json | 2 - public/images/pokemon/variant/87.json | 7 -- public/images/pokemon/variant/872.json | 15 +--- public/images/pokemon/variant/873.json | 4 - public/images/pokemon/variant/876-female.json | 2 - public/images/pokemon/variant/876.json | 2 - public/images/pokemon/variant/877-hangry.json | 14 ---- public/images/pokemon/variant/877.json | 21 ----- public/images/pokemon/variant/880.json | 3 - public/images/pokemon/variant/881.json | 2 - public/images/pokemon/variant/882.json | 2 - public/images/pokemon/variant/883.json | 2 - .../pokemon/variant/884-gigantamax.json | 3 - public/images/pokemon/variant/884.json | 2 - public/images/pokemon/variant/885.json | 3 - public/images/pokemon/variant/886.json | 7 +- public/images/pokemon/variant/887.json | 2 - .../images/pokemon/variant/888-crowned.json | 4 - public/images/pokemon/variant/888.json | 4 - .../images/pokemon/variant/889-crowned.json | 4 - public/images/pokemon/variant/889.json | 8 +- .../images/pokemon/variant/890-eternamax.json | 2 - public/images/pokemon/variant/890.json | 6 +- public/images/pokemon/variant/8901.json | 25 +----- public/images/pokemon/variant/891.json | 11 --- .../pokemon/variant/892-gigantamax-rapid.json | 4 - .../variant/892-gigantamax-single.json | 4 - .../pokemon/variant/892-rapid-strike.json | 17 +--- public/images/pokemon/variant/892.json | 11 --- public/images/pokemon/variant/896.json | 3 - public/images/pokemon/variant/897.json | 2 - public/images/pokemon/variant/898-ice.json | 6 -- public/images/pokemon/variant/898-shadow.json | 10 --- public/images/pokemon/variant/898.json | 5 -- .../images/pokemon/variant/9-gigantamax.json | 5 -- public/images/pokemon/variant/900.json | 20 +---- public/images/pokemon/variant/901.json | 9 +-- public/images/pokemon/variant/903.json | 2 - public/images/pokemon/variant/911.json | 15 +--- public/images/pokemon/variant/912.json | 4 - public/images/pokemon/variant/914.json | 2 - public/images/pokemon/variant/919.json | 8 -- public/images/pokemon/variant/924.json | 3 - public/images/pokemon/variant/925-four.json | 2 - public/images/pokemon/variant/925-three.json | 2 - public/images/pokemon/variant/93.json | 9 --- public/images/pokemon/variant/932.json | 2 - public/images/pokemon/variant/933.json | 7 +- public/images/pokemon/variant/934.json | 2 - .../images/pokemon/variant/94-gigantamax.json | 3 - public/images/pokemon/variant/94.json | 5 -- public/images/pokemon/variant/940.json | 5 -- public/images/pokemon/variant/941.json | 4 - public/images/pokemon/variant/948.json | 2 - public/images/pokemon/variant/949.json | 12 +-- public/images/pokemon/variant/951.json | 2 - public/images/pokemon/variant/952.json | 8 -- public/images/pokemon/variant/953.json | 2 - public/images/pokemon/variant/954.json | 2 - public/images/pokemon/variant/957.json | 5 +- public/images/pokemon/variant/958.json | 2 - public/images/pokemon/variant/962.json | 3 - public/images/pokemon/variant/967.json | 11 +-- public/images/pokemon/variant/969.json | 2 - public/images/pokemon/variant/970.json | 2 - public/images/pokemon/variant/974.json | 8 -- public/images/pokemon/variant/98.json | 10 +-- public/images/pokemon/variant/981.json | 6 -- .../pokemon/variant/982-three-segment.json | 3 - public/images/pokemon/variant/982.json | 3 - public/images/pokemon/variant/987.json | 12 +-- public/images/pokemon/variant/988.json | 4 - .../images/pokemon/variant/99-gigantamax.json | 2 - public/images/pokemon/variant/99.json | 6 -- public/images/pokemon/variant/993.json | 5 -- public/images/pokemon/variant/994.json | 6 -- public/images/pokemon/variant/995.json | 7 +- public/images/pokemon/variant/996.json | 4 - public/images/pokemon/variant/997.json | 4 - public/images/pokemon/variant/998.json | 2 - public/images/pokemon/variant/999.json | 7 -- public/images/pokemon/variant/back/1.json | 8 +- public/images/pokemon/variant/back/100.json | 7 +- public/images/pokemon/variant/back/1000.json | 13 +-- public/images/pokemon/variant/back/1001.json | 2 - public/images/pokemon/variant/back/1003.json | 2 - public/images/pokemon/variant/back/1004.json | 8 +- public/images/pokemon/variant/back/1006.json | 3 - .../variant/back/1008-ultimate-mode.json | 19 +---- public/images/pokemon/variant/back/101.json | 9 +-- public/images/pokemon/variant/back/1010.json | 8 +- public/images/pokemon/variant/back/1018.json | 5 -- public/images/pokemon/variant/back/1023.json | 6 -- public/images/pokemon/variant/back/111.json | 10 +-- public/images/pokemon/variant/back/112.json | 10 +-- public/images/pokemon/variant/back/113.json | 3 - public/images/pokemon/variant/back/114.json | 2 - public/images/pokemon/variant/back/116.json | 6 -- public/images/pokemon/variant/back/117.json | 10 +-- public/images/pokemon/variant/back/118.json | 3 - public/images/pokemon/variant/back/119.json | 4 - public/images/pokemon/variant/back/120.json | 2 - public/images/pokemon/variant/back/121.json | 6 +- public/images/pokemon/variant/back/123.json | 27 +------ public/images/pokemon/variant/back/125.json | 7 +- public/images/pokemon/variant/back/126.json | 4 - .../images/pokemon/variant/back/127-mega.json | 16 +--- public/images/pokemon/variant/back/127.json | 8 +- public/images/pokemon/variant/back/129.json | 5 +- .../images/pokemon/variant/back/130-mega.json | 13 +-- public/images/pokemon/variant/back/130.json | 5 +- .../pokemon/variant/back/131-gigantamax.json | 6 -- public/images/pokemon/variant/back/131.json | 6 -- public/images/pokemon/variant/back/132.json | 6 +- .../pokemon/variant/back/133-partner.json | 2 - public/images/pokemon/variant/back/133.json | 2 - public/images/pokemon/variant/back/134.json | 2 - public/images/pokemon/variant/back/135.json | 11 +-- public/images/pokemon/variant/back/136.json | 3 - public/images/pokemon/variant/back/137.json | 4 - public/images/pokemon/variant/back/138.json | 2 - public/images/pokemon/variant/back/139.json | 9 +-- public/images/pokemon/variant/back/140.json | 4 - public/images/pokemon/variant/back/141.json | 2 - .../images/pokemon/variant/back/142-mega.json | 4 - public/images/pokemon/variant/back/142.json | 6 -- public/images/pokemon/variant/back/144.json | 20 +---- public/images/pokemon/variant/back/145.json | 6 -- public/images/pokemon/variant/back/146.json | 18 +---- public/images/pokemon/variant/back/147.json | 2 - public/images/pokemon/variant/back/148.json | 2 - public/images/pokemon/variant/back/149.json | 12 +-- .../pokemon/variant/back/150-mega-x.json | 5 -- .../pokemon/variant/back/150-mega-y.json | 6 +- public/images/pokemon/variant/back/150.json | 4 - public/images/pokemon/variant/back/151.json | 2 - public/images/pokemon/variant/back/161.json | 2 - public/images/pokemon/variant/back/162.json | 4 - public/images/pokemon/variant/back/163.json | 10 +-- public/images/pokemon/variant/back/164.json | 12 +-- public/images/pokemon/variant/back/169.json | 2 - public/images/pokemon/variant/back/173.json | 2 - public/images/pokemon/variant/back/175.json | 4 - public/images/pokemon/variant/back/176.json | 3 - public/images/pokemon/variant/back/177.json | 10 +-- public/images/pokemon/variant/back/179.json | 4 - public/images/pokemon/variant/back/180.json | 2 - .../images/pokemon/variant/back/181-mega.json | 2 - public/images/pokemon/variant/back/181.json | 5 -- public/images/pokemon/variant/back/182.json | 2 - public/images/pokemon/variant/back/183.json | 2 - public/images/pokemon/variant/back/184.json | 8 +- public/images/pokemon/variant/back/185.json | 2 - public/images/pokemon/variant/back/19.json | 6 -- public/images/pokemon/variant/back/190.json | 2 - public/images/pokemon/variant/back/193.json | 2 - public/images/pokemon/variant/back/196.json | 3 - public/images/pokemon/variant/back/197.json | 2 - public/images/pokemon/variant/back/199.json | 6 -- public/images/pokemon/variant/back/2.json | 9 +-- public/images/pokemon/variant/back/20.json | 12 +-- public/images/pokemon/variant/back/200.json | 1 - public/images/pokemon/variant/back/2027.json | 4 - public/images/pokemon/variant/back/2028.json | 2 - public/images/pokemon/variant/back/203.json | 4 - public/images/pokemon/variant/back/2052.json | 4 - public/images/pokemon/variant/back/2053.json | 2 - public/images/pokemon/variant/back/206.json | 2 - public/images/pokemon/variant/back/207.json | 2 - .../images/pokemon/variant/back/212-mega.json | 18 ----- public/images/pokemon/variant/back/212.json | 19 +---- public/images/pokemon/variant/back/213.json | 2 - public/images/pokemon/variant/back/215.json | 5 +- public/images/pokemon/variant/back/216.json | 18 +---- public/images/pokemon/variant/back/217.json | 21 +---- public/images/pokemon/variant/back/222.json | 2 - public/images/pokemon/variant/back/226.json | 2 - public/images/pokemon/variant/back/227.json | 5 +- public/images/pokemon/variant/back/228.json | 10 +-- .../images/pokemon/variant/back/229-mega.json | 6 -- public/images/pokemon/variant/back/229.json | 11 +-- public/images/pokemon/variant/back/23.json | 8 +- public/images/pokemon/variant/back/230.json | 2 - public/images/pokemon/variant/back/231.json | 5 +- public/images/pokemon/variant/back/232.json | 2 - public/images/pokemon/variant/back/233.json | 7 +- public/images/pokemon/variant/back/235.json | 2 - public/images/pokemon/variant/back/239.json | 8 +- public/images/pokemon/variant/back/24.json | 10 +-- public/images/pokemon/variant/back/240.json | 10 +-- public/images/pokemon/variant/back/242.json | 3 - public/images/pokemon/variant/back/243.json | 4 - public/images/pokemon/variant/back/245.json | 5 -- public/images/pokemon/variant/back/246.json | 4 - public/images/pokemon/variant/back/247.json | 2 - .../images/pokemon/variant/back/248-mega.json | 40 +++++---- public/images/pokemon/variant/back/248.json | 9 --- public/images/pokemon/variant/back/249.json | 2 - public/images/pokemon/variant/back/250.json | 12 +-- public/images/pokemon/variant/back/251.json | 6 +- public/images/pokemon/variant/back/255.json | 8 +- public/images/pokemon/variant/back/256.json | 2 - .../images/pokemon/variant/back/257-mega.json | 2 - public/images/pokemon/variant/back/257.json | 4 - public/images/pokemon/variant/back/261.json | 10 +-- public/images/pokemon/variant/back/262.json | 14 +--- public/images/pokemon/variant/back/263.json | 7 +- public/images/pokemon/variant/back/264.json | 6 -- public/images/pokemon/variant/back/2670.json | 2 - public/images/pokemon/variant/back/278.json | 6 +- public/images/pokemon/variant/back/279.json | 8 -- .../images/pokemon/variant/back/282-mega.json | 5 -- public/images/pokemon/variant/back/282.json | 8 +- public/images/pokemon/variant/back/285.json | 5 -- public/images/pokemon/variant/back/286.json | 6 +- public/images/pokemon/variant/back/29.json | 6 -- public/images/pokemon/variant/back/290.json | 4 - public/images/pokemon/variant/back/298.json | 2 - .../pokemon/variant/back/3-gigantamax.json | 8 +- public/images/pokemon/variant/back/3.json | 8 +- public/images/pokemon/variant/back/30.json | 13 +-- public/images/pokemon/variant/back/300.json | 3 - public/images/pokemon/variant/back/301.json | 3 - .../images/pokemon/variant/back/302-mega.json | 2 - public/images/pokemon/variant/back/302.json | 2 - .../images/pokemon/variant/back/303-mega.json | 14 ---- public/images/pokemon/variant/back/303.json | 6 -- public/images/pokemon/variant/back/304.json | 5 -- public/images/pokemon/variant/back/305.json | 3 - .../images/pokemon/variant/back/306-mega.json | 3 - public/images/pokemon/variant/back/306.json | 3 - public/images/pokemon/variant/back/307.json | 2 - .../images/pokemon/variant/back/308-mega.json | 3 - public/images/pokemon/variant/back/308.json | 3 - public/images/pokemon/variant/back/309.json | 8 +- public/images/pokemon/variant/back/31.json | 12 +-- .../images/pokemon/variant/back/310-mega.json | 9 +-- public/images/pokemon/variant/back/310.json | 10 +-- public/images/pokemon/variant/back/311.json | 3 - public/images/pokemon/variant/back/312.json | 2 - public/images/pokemon/variant/back/315.json | 2 - public/images/pokemon/variant/back/320.json | 2 - public/images/pokemon/variant/back/321.json | 3 - public/images/pokemon/variant/back/327.json | 2 - public/images/pokemon/variant/back/328.json | 4 - public/images/pokemon/variant/back/329.json | 4 - public/images/pokemon/variant/back/330.json | 7 +- public/images/pokemon/variant/back/333.json | 8 +- .../images/pokemon/variant/back/334-mega.json | 2 - public/images/pokemon/variant/back/334.json | 2 - public/images/pokemon/variant/back/336.json | 4 - public/images/pokemon/variant/back/337.json | 2 - public/images/pokemon/variant/back/338.json | 2 - public/images/pokemon/variant/back/339.json | 1 - public/images/pokemon/variant/back/340.json | 6 +- public/images/pokemon/variant/back/341.json | 6 -- public/images/pokemon/variant/back/35.json | 8 +- .../pokemon/variant/back/351-rainy.json | 10 --- .../pokemon/variant/back/351-snowy.json | 11 +-- .../pokemon/variant/back/351-sunny.json | 2 - public/images/pokemon/variant/back/351.json | 2 - public/images/pokemon/variant/back/352.json | 12 +-- public/images/pokemon/variant/back/353.json | 2 - .../images/pokemon/variant/back/354-mega.json | 2 - public/images/pokemon/variant/back/354.json | 2 - public/images/pokemon/variant/back/357.json | 1 - public/images/pokemon/variant/back/358.json | 6 -- public/images/pokemon/variant/back/36.json | 5 +- public/images/pokemon/variant/back/361.json | 2 - .../images/pokemon/variant/back/362-mega.json | 2 - public/images/pokemon/variant/back/362.json | 5 +- public/images/pokemon/variant/back/37.json | 2 - public/images/pokemon/variant/back/371.json | 16 +--- public/images/pokemon/variant/back/372.json | 4 - .../images/pokemon/variant/back/373-mega.json | 8 +- public/images/pokemon/variant/back/373.json | 7 +- public/images/pokemon/variant/back/374.json | 2 - public/images/pokemon/variant/back/375.json | 2 - .../images/pokemon/variant/back/376-mega.json | 6 +- public/images/pokemon/variant/back/376.json | 2 - public/images/pokemon/variant/back/38.json | 2 - .../images/pokemon/variant/back/380-mega.json | 2 - public/images/pokemon/variant/back/380.json | 4 - .../images/pokemon/variant/back/381-mega.json | 2 - public/images/pokemon/variant/back/381.json | 4 - .../pokemon/variant/back/382-primal.json | 4 - public/images/pokemon/variant/back/382.json | 8 +- .../pokemon/variant/back/383-primal.json | 14 +--- public/images/pokemon/variant/back/383.json | 10 +-- .../images/pokemon/variant/back/384-mega.json | 8 +- public/images/pokemon/variant/back/384.json | 11 +-- public/images/pokemon/variant/back/385.json | 3 - public/images/pokemon/variant/back/387.json | 4 +- public/images/pokemon/variant/back/388.json | 12 +-- public/images/pokemon/variant/back/389.json | 2 - public/images/pokemon/variant/back/393.json | 3 - public/images/pokemon/variant/back/394.json | 2 - public/images/pokemon/variant/back/395.json | 2 - public/images/pokemon/variant/back/399.json | 1 - public/images/pokemon/variant/back/4.json | 10 +-- public/images/pokemon/variant/back/400.json | 3 - public/images/pokemon/variant/back/401.json | 2 - public/images/pokemon/variant/back/402.json | 3 - public/images/pokemon/variant/back/4052.json | 4 - public/images/pokemon/variant/back/406.json | 2 - public/images/pokemon/variant/back/407.json | 2 - public/images/pokemon/variant/back/4077.json | 2 - public/images/pokemon/variant/back/4078.json | 4 - public/images/pokemon/variant/back/4079.json | 10 +-- public/images/pokemon/variant/back/4080.json | 8 -- public/images/pokemon/variant/back/41.json | 12 +-- .../pokemon/variant/back/412-plant.json | 6 +- .../pokemon/variant/back/412-trash.json | 3 - .../pokemon/variant/back/413-plant.json | 3 - .../pokemon/variant/back/413-sandy.json | 3 - .../pokemon/variant/back/413-trash.json | 5 -- public/images/pokemon/variant/back/414.json | 2 - public/images/pokemon/variant/back/418.json | 7 -- public/images/pokemon/variant/back/419.json | 7 -- public/images/pokemon/variant/back/4199.json | 4 - public/images/pokemon/variant/back/42.json | 2 - .../images/pokemon/variant/back/422-east.json | 6 -- .../images/pokemon/variant/back/422-west.json | 6 -- public/images/pokemon/variant/back/4222.json | 2 - .../images/pokemon/variant/back/423-east.json | 3 - .../images/pokemon/variant/back/423-west.json | 4 - public/images/pokemon/variant/back/424.json | 2 - public/images/pokemon/variant/back/425.json | 2 - public/images/pokemon/variant/back/426.json | 2 - public/images/pokemon/variant/back/4263.json | 10 +-- public/images/pokemon/variant/back/4264.json | 4 - public/images/pokemon/variant/back/427.json | 3 - .../images/pokemon/variant/back/428-mega.json | 2 - public/images/pokemon/variant/back/428.json | 2 - public/images/pokemon/variant/back/429.json | 12 +-- public/images/pokemon/variant/back/43.json | 2 - public/images/pokemon/variant/back/433.json | 3 - public/images/pokemon/variant/back/436.json | 2 - public/images/pokemon/variant/back/437.json | 2 - public/images/pokemon/variant/back/438.json | 2 - public/images/pokemon/variant/back/44.json | 2 - public/images/pokemon/variant/back/440.json | 4 - public/images/pokemon/variant/back/441.json | 1 - public/images/pokemon/variant/back/442.json | 9 +-- public/images/pokemon/variant/back/443.json | 11 --- public/images/pokemon/variant/back/444.json | 15 +--- .../images/pokemon/variant/back/445-mega.json | 12 --- public/images/pokemon/variant/back/445.json | 12 --- public/images/pokemon/variant/back/447.json | 11 +-- .../images/pokemon/variant/back/448-mega.json | 15 +--- public/images/pokemon/variant/back/448.json | 15 +--- public/images/pokemon/variant/back/45.json | 2 - public/images/pokemon/variant/back/453.json | 1 - public/images/pokemon/variant/back/454.json | 1 - public/images/pokemon/variant/back/456.json | 10 +-- public/images/pokemon/variant/back/4562.json | 4 - public/images/pokemon/variant/back/457.json | 2 - public/images/pokemon/variant/back/46.json | 3 - public/images/pokemon/variant/back/461.json | 3 - public/images/pokemon/variant/back/462.json | 3 - public/images/pokemon/variant/back/464.json | 9 +-- public/images/pokemon/variant/back/465.json | 4 +- public/images/pokemon/variant/back/466.json | 5 +- public/images/pokemon/variant/back/467.json | 6 -- public/images/pokemon/variant/back/468.json | 3 - public/images/pokemon/variant/back/47.json | 3 - public/images/pokemon/variant/back/470.json | 1 - public/images/pokemon/variant/back/471.json | 14 +--- public/images/pokemon/variant/back/474.json | 3 - public/images/pokemon/variant/back/475.json | 6 -- public/images/pokemon/variant/back/478.json | 1 - .../images/pokemon/variant/back/479-fan.json | 9 +-- .../pokemon/variant/back/479-frost.json | 9 +-- .../images/pokemon/variant/back/479-heat.json | 3 - .../images/pokemon/variant/back/479-mow.json | 6 +- .../images/pokemon/variant/back/479-wash.json | 8 +- public/images/pokemon/variant/back/479.json | 4 - public/images/pokemon/variant/back/480.json | 3 - public/images/pokemon/variant/back/481.json | 6 +- public/images/pokemon/variant/back/482.json | 3 - public/images/pokemon/variant/back/485.json | 9 +-- .../pokemon/variant/back/487-altered.json | 2 - .../pokemon/variant/back/487-origin.json | 6 +- public/images/pokemon/variant/back/488.json | 4 - public/images/pokemon/variant/back/489.json | 3 - public/images/pokemon/variant/back/490.json | 3 - public/images/pokemon/variant/back/491.json | 11 +-- .../images/pokemon/variant/back/492-land.json | 2 - .../images/pokemon/variant/back/492-sky.json | 2 - public/images/pokemon/variant/back/494.json | 4 - public/images/pokemon/variant/back/495.json | 4 - public/images/pokemon/variant/back/496.json | 6 -- public/images/pokemon/variant/back/497.json | 3 - public/images/pokemon/variant/back/5.json | 8 -- public/images/pokemon/variant/back/50.json | 2 - public/images/pokemon/variant/back/51.json | 2 - public/images/pokemon/variant/back/517.json | 8 +- public/images/pokemon/variant/back/518.json | 2 - .../pokemon/variant/back/52-gigantamax.json | 9 --- public/images/pokemon/variant/back/52.json | 8 -- public/images/pokemon/variant/back/524.json | 2 - public/images/pokemon/variant/back/525.json | 2 - public/images/pokemon/variant/back/526.json | 2 - public/images/pokemon/variant/back/53.json | 3 - public/images/pokemon/variant/back/530.json | 3 - .../images/pokemon/variant/back/531-mega.json | 2 - public/images/pokemon/variant/back/531.json | 3 - public/images/pokemon/variant/back/532.json | 6 -- public/images/pokemon/variant/back/533.json | 2 - public/images/pokemon/variant/back/534.json | 2 - public/images/pokemon/variant/back/540.json | 2 - public/images/pokemon/variant/back/541.json | 2 - public/images/pokemon/variant/back/542.json | 2 - public/images/pokemon/variant/back/543.json | 1 - public/images/pokemon/variant/back/544.json | 2 - public/images/pokemon/variant/back/545.json | 2 - public/images/pokemon/variant/back/546.json | 2 - public/images/pokemon/variant/back/547.json | 4 - public/images/pokemon/variant/back/548.json | 3 - public/images/pokemon/variant/back/549.json | 4 - public/images/pokemon/variant/back/551.json | 2 - public/images/pokemon/variant/back/552.json | 2 - public/images/pokemon/variant/back/553.json | 2 - public/images/pokemon/variant/back/556.json | 2 - public/images/pokemon/variant/back/559.json | 25 +----- public/images/pokemon/variant/back/56.json | 3 - public/images/pokemon/variant/back/560.json | 18 ----- public/images/pokemon/variant/back/562.json | 9 +-- public/images/pokemon/variant/back/563.json | 2 - public/images/pokemon/variant/back/568.json | 2 - .../pokemon/variant/back/569-gigantamax.json | 3 - public/images/pokemon/variant/back/569.json | 2 - public/images/pokemon/variant/back/57.json | 8 +- public/images/pokemon/variant/back/570.json | 2 - public/images/pokemon/variant/back/571.json | 8 +- public/images/pokemon/variant/back/577.json | 4 - public/images/pokemon/variant/back/578.json | 3 - public/images/pokemon/variant/back/579.json | 3 - .../pokemon/variant/back/585-summer.json | 2 - .../pokemon/variant/back/586-autumn.json | 7 -- .../pokemon/variant/back/586-spring.json | 2 - .../pokemon/variant/back/586-summer.json | 3 - .../pokemon/variant/back/586-winter.json | 5 +- public/images/pokemon/variant/back/592.json | 4 +- public/images/pokemon/variant/back/593.json | 2 - public/images/pokemon/variant/back/594.json | 4 +- public/images/pokemon/variant/back/595.json | 2 - public/images/pokemon/variant/back/596.json | 3 - .../pokemon/variant/back/6-gigantamax.json | 1 - .../images/pokemon/variant/back/6-mega-x.json | 4 +- .../images/pokemon/variant/back/6-mega-y.json | 7 +- public/images/pokemon/variant/back/602.json | 2 - public/images/pokemon/variant/back/603.json | 3 - public/images/pokemon/variant/back/604.json | 2 - public/images/pokemon/variant/back/605.json | 3 - public/images/pokemon/variant/back/606.json | 4 - public/images/pokemon/variant/back/609.json | 2 - public/images/pokemon/variant/back/610.json | 6 -- public/images/pokemon/variant/back/6100.json | 8 -- public/images/pokemon/variant/back/6101.json | 9 +-- public/images/pokemon/variant/back/611.json | 4 - public/images/pokemon/variant/back/612.json | 2 - public/images/pokemon/variant/back/618.json | 5 -- public/images/pokemon/variant/back/619.json | 7 +- public/images/pokemon/variant/back/620.json | 4 - public/images/pokemon/variant/back/6215.json | 6 -- public/images/pokemon/variant/back/622.json | 2 - public/images/pokemon/variant/back/633.json | 2 - public/images/pokemon/variant/back/634.json | 10 +-- public/images/pokemon/variant/back/635.json | 4 - .../pokemon/variant/back/647-ordinary.json | 13 +-- .../pokemon/variant/back/647-resolute.json | 12 +-- .../pokemon/variant/back/648-pirouette.json | 5 +- .../images/pokemon/variant/back/649-burn.json | 8 -- .../pokemon/variant/back/649-chill.json | 6 -- .../pokemon/variant/back/649-douse.json | 8 -- .../pokemon/variant/back/649-shock.json | 8 -- public/images/pokemon/variant/back/649.json | 8 -- public/images/pokemon/variant/back/653.json | 2 - public/images/pokemon/variant/back/654.json | 10 +-- public/images/pokemon/variant/back/6549.json | 12 +-- public/images/pokemon/variant/back/655.json | 6 -- public/images/pokemon/variant/back/6570.json | 2 - public/images/pokemon/variant/back/6571.json | 5 +- public/images/pokemon/variant/back/664.json | 2 - public/images/pokemon/variant/back/665.json | 3 - .../pokemon/variant/back/666-archipelago.json | 19 +---- .../pokemon/variant/back/666-continental.json | 19 +---- .../pokemon/variant/back/666-elegant.json | 17 +--- .../pokemon/variant/back/666-fancy.json | 54 +++++-------- .../pokemon/variant/back/666-garden.json | 15 +--- .../pokemon/variant/back/666-high-plains.json | 21 +---- .../pokemon/variant/back/666-icy-snow.json | 15 +--- .../pokemon/variant/back/666-jungle.json | 19 +---- .../pokemon/variant/back/666-marine.json | 15 +--- .../pokemon/variant/back/666-meadow.json | 17 +--- .../pokemon/variant/back/666-modern.json | 19 +---- .../pokemon/variant/back/666-monsoon.json | 48 ++++------- .../pokemon/variant/back/666-ocean.json | 20 +---- .../pokemon/variant/back/666-poke-ball.json | 11 +-- .../pokemon/variant/back/666-polar.json | 19 +---- .../pokemon/variant/back/666-river.json | 54 ++++--------- .../pokemon/variant/back/666-sandstorm.json | 19 +---- .../pokemon/variant/back/666-savanna.json | 17 +--- .../images/pokemon/variant/back/666-sun.json | 17 +--- .../pokemon/variant/back/666-tundra.json | 15 +--- .../images/pokemon/variant/back/669-blue.json | 5 -- .../pokemon/variant/back/669-orange.json | 5 -- .../images/pokemon/variant/back/669-red.json | 5 -- .../pokemon/variant/back/669-white.json | 6 -- .../pokemon/variant/back/669-yellow.json | 5 -- .../images/pokemon/variant/back/670-blue.json | 7 +- .../pokemon/variant/back/670-orange.json | 7 +- .../images/pokemon/variant/back/670-red.json | 7 +- .../pokemon/variant/back/670-white.json | 11 +-- .../pokemon/variant/back/670-yellow.json | 7 +- public/images/pokemon/variant/back/6705.json | 7 +- .../images/pokemon/variant/back/671-blue.json | 7 +- .../pokemon/variant/back/671-orange.json | 7 +- .../images/pokemon/variant/back/671-red.json | 7 +- .../pokemon/variant/back/671-white.json | 9 +-- .../pokemon/variant/back/671-yellow.json | 7 +- public/images/pokemon/variant/back/6713.json | 2 - public/images/pokemon/variant/back/672.json | 2 - public/images/pokemon/variant/back/673.json | 2 - public/images/pokemon/variant/back/677.json | 6 +- .../pokemon/variant/back/678-female.json | 2 - public/images/pokemon/variant/back/678.json | 2 - public/images/pokemon/variant/back/69.json | 5 -- public/images/pokemon/variant/back/690.json | 2 - public/images/pokemon/variant/back/691.json | 2 - public/images/pokemon/variant/back/696.json | 70 +++++----------- public/images/pokemon/variant/back/697.json | 52 ++++++------ public/images/pokemon/variant/back/698.json | 10 +-- public/images/pokemon/variant/back/699.json | 4 - public/images/pokemon/variant/back/700.json | 2 - public/images/pokemon/variant/back/702.json | 2 - public/images/pokemon/variant/back/703.json | 3 - public/images/pokemon/variant/back/704.json | 2 - public/images/pokemon/variant/back/705.json | 2 - public/images/pokemon/variant/back/706.json | 4 - public/images/pokemon/variant/back/708.json | 2 - public/images/pokemon/variant/back/709.json | 2 - public/images/pokemon/variant/back/71.json | 5 -- public/images/pokemon/variant/back/710.json | 2 - public/images/pokemon/variant/back/711.json | 3 - public/images/pokemon/variant/back/712.json | 7 +- public/images/pokemon/variant/back/713.json | 6 +- public/images/pokemon/variant/back/714.json | 2 - public/images/pokemon/variant/back/715.json | 66 +++++++-------- .../pokemon/variant/back/716-active.json | 6 -- .../pokemon/variant/back/716-neutral.json | 2 - public/images/pokemon/variant/back/717.json | 1 - .../pokemon/variant/back/720-unbound.json | 3 - public/images/pokemon/variant/back/720.json | 3 - public/images/pokemon/variant/back/728.json | 4 - public/images/pokemon/variant/back/729.json | 9 +-- public/images/pokemon/variant/back/730.json | 8 +- public/images/pokemon/variant/back/734.json | 2 - public/images/pokemon/variant/back/735.json | 2 - public/images/pokemon/variant/back/747.json | 2 - public/images/pokemon/variant/back/748.json | 8 +- public/images/pokemon/variant/back/751.json | 9 +-- public/images/pokemon/variant/back/752.json | 4 - public/images/pokemon/variant/back/753.json | 10 +-- public/images/pokemon/variant/back/755.json | 2 - public/images/pokemon/variant/back/756.json | 2 - public/images/pokemon/variant/back/761.json | 7 +- public/images/pokemon/variant/back/762.json | 5 -- public/images/pokemon/variant/back/763.json | 6 -- public/images/pokemon/variant/back/767.json | 2 - public/images/pokemon/variant/back/768.json | 7 +- public/images/pokemon/variant/back/77.json | 4 - public/images/pokemon/variant/back/771.json | 4 - public/images/pokemon/variant/back/772.json | 2 - public/images/pokemon/variant/back/773.json | 4 - public/images/pokemon/variant/back/776.json | 2 - public/images/pokemon/variant/back/777.json | 3 - .../pokemon/variant/back/778-busted.json | 1 - .../pokemon/variant/back/778-disguised.json | 3 +- public/images/pokemon/variant/back/779.json | 10 +-- public/images/pokemon/variant/back/78.json | 4 - public/images/pokemon/variant/back/789.json | 14 ---- public/images/pokemon/variant/back/79.json | 15 +--- public/images/pokemon/variant/back/790.json | 10 --- .../pokemon/variant/back/791-radiant-sun.json | 2 - public/images/pokemon/variant/back/791.json | 2 - .../pokemon/variant/back/792-full-moon.json | 3 - public/images/pokemon/variant/back/792.json | 4 - public/images/pokemon/variant/back/793.json | 6 +- public/images/pokemon/variant/back/797.json | 2 - public/images/pokemon/variant/back/798.json | 1 - .../images/pokemon/variant/back/80-mega.json | 6 -- public/images/pokemon/variant/back/80.json | 8 -- .../pokemon/variant/back/800-dawn-wings.json | 2 - .../pokemon/variant/back/800-dusk-mane.json | 3 - .../pokemon/variant/back/800-ultra.json | 2 - public/images/pokemon/variant/back/800.json | 6 +- public/images/pokemon/variant/back/802.json | 3 - public/images/pokemon/variant/back/803.json | 2 - public/images/pokemon/variant/back/804.json | 2 - public/images/pokemon/variant/back/808.json | 8 +- .../pokemon/variant/back/809-gigantamax.json | 7 +- public/images/pokemon/variant/back/809.json | 7 +- public/images/pokemon/variant/back/81.json | 3 - public/images/pokemon/variant/back/816.json | 6 +- public/images/pokemon/variant/back/817.json | 8 +- .../pokemon/variant/back/818-gigantamax.json | 7 -- public/images/pokemon/variant/back/818.json | 4 - public/images/pokemon/variant/back/82.json | 3 - public/images/pokemon/variant/back/821.json | 2 - public/images/pokemon/variant/back/822.json | 4 - public/images/pokemon/variant/back/823.json | 4 - public/images/pokemon/variant/back/829.json | 3 - public/images/pokemon/variant/back/830.json | 6 +- public/images/pokemon/variant/back/835.json | 3 - public/images/pokemon/variant/back/836.json | 4 - public/images/pokemon/variant/back/84.json | 7 -- public/images/pokemon/variant/back/85.json | 11 --- public/images/pokemon/variant/back/850.json | 6 +- .../pokemon/variant/back/851-gigantamax.json | 5 -- public/images/pokemon/variant/back/851.json | 6 +- public/images/pokemon/variant/back/854.json | 2 - public/images/pokemon/variant/back/855.json | 2 - public/images/pokemon/variant/back/856.json | 2 - .../pokemon/variant/back/858-gigantamax.json | 2 - public/images/pokemon/variant/back/858.json | 2 - public/images/pokemon/variant/back/859.json | 2 - public/images/pokemon/variant/back/86.json | 6 -- public/images/pokemon/variant/back/860.json | 2 - .../pokemon/variant/back/861-gigantamax.json | 2 - public/images/pokemon/variant/back/861.json | 2 - public/images/pokemon/variant/back/862.json | 9 +-- public/images/pokemon/variant/back/863.json | 3 - public/images/pokemon/variant/back/864.json | 6 +- public/images/pokemon/variant/back/867.json | 2 - public/images/pokemon/variant/back/87.json | 18 +---- public/images/pokemon/variant/back/872.json | 6 -- public/images/pokemon/variant/back/873.json | 9 +-- .../pokemon/variant/back/876-female.json | 2 - public/images/pokemon/variant/back/876.json | 2 - .../pokemon/variant/back/877-hangry.json | 7 -- public/images/pokemon/variant/back/877.json | 12 --- public/images/pokemon/variant/back/880.json | 3 - public/images/pokemon/variant/back/881.json | 3 - public/images/pokemon/variant/back/882.json | 2 - public/images/pokemon/variant/back/883.json | 2 - .../pokemon/variant/back/884-gigantamax.json | 2 - public/images/pokemon/variant/back/884.json | 2 - public/images/pokemon/variant/back/885.json | 3 - public/images/pokemon/variant/back/886.json | 4 - public/images/pokemon/variant/back/887.json | 4 - .../pokemon/variant/back/888-crowned.json | 2 - public/images/pokemon/variant/back/888.json | 2 - .../pokemon/variant/back/889-crowned.json | 2 - public/images/pokemon/variant/back/889.json | 2 - .../pokemon/variant/back/890-eternamax.json | 2 - public/images/pokemon/variant/back/890.json | 6 -- public/images/pokemon/variant/back/8901.json | 20 +---- public/images/pokemon/variant/back/891.json | 6 -- .../variant/back/892-gigantamax-rapid.json | 5 -- .../variant/back/892-gigantamax-single.json | 5 -- .../variant/back/892-rapid-strike.json | 5 -- public/images/pokemon/variant/back/892.json | 5 -- public/images/pokemon/variant/back/896.json | 3 - public/images/pokemon/variant/back/897.json | 7 -- .../images/pokemon/variant/back/898-ice.json | 13 +-- .../pokemon/variant/back/898-shadow.json | 11 --- public/images/pokemon/variant/back/898.json | 5 -- .../pokemon/variant/back/9-gigantamax.json | 5 -- public/images/pokemon/variant/back/900.json | 20 +---- public/images/pokemon/variant/back/901.json | 15 +--- public/images/pokemon/variant/back/903.json | 4 - public/images/pokemon/variant/back/909.json | 8 +- public/images/pokemon/variant/back/911.json | 9 +-- public/images/pokemon/variant/back/912.json | 2 - public/images/pokemon/variant/back/913.json | 2 - public/images/pokemon/variant/back/914.json | 2 - public/images/pokemon/variant/back/919.json | 13 +-- public/images/pokemon/variant/back/920.json | 12 --- public/images/pokemon/variant/back/924.json | 3 - .../images/pokemon/variant/back/925-four.json | 3 - .../pokemon/variant/back/925-three.json | 3 - public/images/pokemon/variant/back/93.json | 15 +--- public/images/pokemon/variant/back/932.json | 2 - public/images/pokemon/variant/back/933.json | 2 - public/images/pokemon/variant/back/934.json | 2 - public/images/pokemon/variant/back/936.json | 11 --- public/images/pokemon/variant/back/937.json | 4 - .../pokemon/variant/back/94-gigantamax.json | 3 - .../images/pokemon/variant/back/94-mega.json | 3 - public/images/pokemon/variant/back/94.json | 3 - public/images/pokemon/variant/back/940.json | 4 - public/images/pokemon/variant/back/941.json | 6 -- public/images/pokemon/variant/back/948.json | 2 - public/images/pokemon/variant/back/949.json | 6 -- public/images/pokemon/variant/back/951.json | 4 - public/images/pokemon/variant/back/952.json | 2 - public/images/pokemon/variant/back/953.json | 2 - public/images/pokemon/variant/back/954.json | 2 - public/images/pokemon/variant/back/957.json | 3 - public/images/pokemon/variant/back/958.json | 3 - public/images/pokemon/variant/back/959.json | 7 -- public/images/pokemon/variant/back/962.json | 3 - public/images/pokemon/variant/back/967.json | 11 +-- public/images/pokemon/variant/back/968.json | 15 +--- public/images/pokemon/variant/back/969.json | 2 - public/images/pokemon/variant/back/970.json | 1 - public/images/pokemon/variant/back/973.json | 11 --- public/images/pokemon/variant/back/974.json | 2 - public/images/pokemon/variant/back/975.json | 9 +-- .../pokemon/variant/back/978-stretchy.json | 2 - public/images/pokemon/variant/back/979.json | 7 +- public/images/pokemon/variant/back/98.json | 6 -- public/images/pokemon/variant/back/981.json | 6 -- .../variant/back/982-three-segment.json | 2 - public/images/pokemon/variant/back/982.json | 2 - public/images/pokemon/variant/back/987.json | 3 - public/images/pokemon/variant/back/988.json | 6 -- .../pokemon/variant/back/99-gigantamax.json | 2 - public/images/pokemon/variant/back/99.json | 3 - public/images/pokemon/variant/back/993.json | 4 - public/images/pokemon/variant/back/994.json | 6 -- public/images/pokemon/variant/back/995.json | 8 -- public/images/pokemon/variant/back/996.json | 5 -- public/images/pokemon/variant/back/997.json | 2 - public/images/pokemon/variant/back/998.json | 3 - public/images/pokemon/variant/back/999.json | 7 -- .../pokemon/variant/back/female/111.json | 10 +-- .../pokemon/variant/back/female/112.json | 10 +-- .../pokemon/variant/back/female/118.json | 3 - .../pokemon/variant/back/female/119.json | 2 - .../pokemon/variant/back/female/123.json | 27 +------ .../pokemon/variant/back/female/129.json | 2 - .../pokemon/variant/back/female/130.json | 2 - .../pokemon/variant/back/female/185.json | 2 - .../pokemon/variant/back/female/19.json | 6 -- .../pokemon/variant/back/female/190.json | 2 - .../pokemon/variant/back/female/20.json | 7 +- .../pokemon/variant/back/female/203.json | 4 - .../pokemon/variant/back/female/212.json | 19 +---- .../pokemon/variant/back/female/215.json | 5 +- .../pokemon/variant/back/female/217.json | 21 +---- .../pokemon/variant/back/female/229.json | 12 +-- .../pokemon/variant/back/female/232.json | 2 - .../pokemon/variant/back/female/255.json | 8 +- .../pokemon/variant/back/female/256.json | 2 - .../pokemon/variant/back/female/257.json | 2 - .../images/pokemon/variant/back/female/3.json | 8 +- .../pokemon/variant/back/female/307.json | 2 - .../pokemon/variant/back/female/308.json | 3 - .../pokemon/variant/back/female/315.json | 2 - .../pokemon/variant/back/female/369.json | 4 - .../pokemon/variant/back/female/399.json | 3 - .../pokemon/variant/back/female/400.json | 3 - .../pokemon/variant/back/female/401.json | 2 - .../pokemon/variant/back/female/402.json | 2 - .../pokemon/variant/back/female/407.json | 5 -- .../pokemon/variant/back/female/41.json | 10 +-- .../pokemon/variant/back/female/419.json | 7 -- .../pokemon/variant/back/female/42.json | 2 - .../pokemon/variant/back/female/424.json | 2 - .../pokemon/variant/back/female/44.json | 3 - .../pokemon/variant/back/female/443.json | 11 --- .../pokemon/variant/back/female/444.json | 15 +--- .../pokemon/variant/back/female/445.json | 12 --- .../pokemon/variant/back/female/45.json | 2 - .../pokemon/variant/back/female/453.json | 1 - .../pokemon/variant/back/female/454.json | 1 - .../pokemon/variant/back/female/456.json | 10 +-- .../pokemon/variant/back/female/457.json | 4 - .../pokemon/variant/back/female/461.json | 6 +- .../pokemon/variant/back/female/464.json | 9 +-- .../pokemon/variant/back/female/465.json | 2 - .../pokemon/variant/back/female/592.json | 12 +-- .../pokemon/variant/back/female/593.json | 3 - .../pokemon/variant/back/female/6215.json | 6 -- .../pokemon/variant/back/female/84.json | 9 --- .../pokemon/variant/back/female/85.json | 11 --- public/images/pokemon/variant/exp/1001.json | 14 +--- public/images/pokemon/variant/exp/1003.json | 2 - public/images/pokemon/variant/exp/1004.json | 46 +---------- public/images/pokemon/variant/exp/1006.json | 1 - .../variant/exp/1008-ultimate-mode.json | 15 ---- .../images/pokemon/variant/exp/127-mega.json | 14 +--- .../images/pokemon/variant/exp/181-mega.json | 2 - public/images/pokemon/variant/exp/2027.json | 4 - public/images/pokemon/variant/exp/2028.json | 5 +- public/images/pokemon/variant/exp/2052.json | 4 - public/images/pokemon/variant/exp/2053.json | 2 - .../images/pokemon/variant/exp/212-mega.json | 24 +----- .../images/pokemon/variant/exp/229-mega.json | 8 -- .../images/pokemon/variant/exp/248-mega.json | 56 ++++++------- .../images/pokemon/variant/exp/257-mega.json | 2 - .../images/pokemon/variant/exp/302-mega.json | 2 - .../images/pokemon/variant/exp/303-mega.json | 8 -- .../images/pokemon/variant/exp/306-mega.json | 8 +- .../images/pokemon/variant/exp/334-mega.json | 1 - .../images/pokemon/variant/exp/354-mega.json | 10 +-- .../images/pokemon/variant/exp/362-mega.json | 4 +- .../images/pokemon/variant/exp/373-mega.json | 11 --- .../images/pokemon/variant/exp/376-mega.json | 2 - .../images/pokemon/variant/exp/380-mega.json | 2 +- .../images/pokemon/variant/exp/381-mega.json | 2 +- .../pokemon/variant/exp/382-primal.json | 22 +---- .../pokemon/variant/exp/383-primal.json | 6 -- .../images/pokemon/variant/exp/384-mega.json | 4 +- public/images/pokemon/variant/exp/4052.json | 11 +-- public/images/pokemon/variant/exp/4077.json | 4 - public/images/pokemon/variant/exp/4078.json | 4 - public/images/pokemon/variant/exp/4079.json | 6 -- public/images/pokemon/variant/exp/4080.json | 6 -- public/images/pokemon/variant/exp/4199.json | 4 - public/images/pokemon/variant/exp/4222.json | 2 - public/images/pokemon/variant/exp/4263.json | 4 - public/images/pokemon/variant/exp/4264.json | 4 - .../images/pokemon/variant/exp/428-mega.json | 4 - .../images/pokemon/variant/exp/445-mega.json | 18 +---- public/images/pokemon/variant/exp/4562.json | 4 - .../images/pokemon/variant/exp/531-mega.json | 2 - public/images/pokemon/variant/exp/6100.json | 2 - public/images/pokemon/variant/exp/6101.json | 12 +-- public/images/pokemon/variant/exp/6215.json | 12 +-- public/images/pokemon/variant/exp/653.json | 8 +- public/images/pokemon/variant/exp/654.json | 6 -- public/images/pokemon/variant/exp/6549.json | 6 +- public/images/pokemon/variant/exp/655.json | 2 - public/images/pokemon/variant/exp/6570.json | 7 +- public/images/pokemon/variant/exp/6571.json | 7 -- public/images/pokemon/variant/exp/664.json | 6 -- public/images/pokemon/variant/exp/665.json | 4 - .../pokemon/variant/exp/666-archipelago.json | 20 +---- .../pokemon/variant/exp/666-continental.json | 20 +---- .../pokemon/variant/exp/666-elegant.json | 20 +---- .../images/pokemon/variant/exp/666-fancy.json | 56 +++++-------- .../pokemon/variant/exp/666-garden.json | 18 +---- .../pokemon/variant/exp/666-high-plains.json | 22 +---- .../pokemon/variant/exp/666-icy-snow.json | 18 +---- .../pokemon/variant/exp/666-jungle.json | 20 +---- .../pokemon/variant/exp/666-marine.json | 18 +---- .../pokemon/variant/exp/666-meadow.json | 52 +++++------- .../pokemon/variant/exp/666-modern.json | 20 +---- .../pokemon/variant/exp/666-monsoon.json | 48 ++++------- .../images/pokemon/variant/exp/666-ocean.json | 20 +---- .../pokemon/variant/exp/666-poke-ball.json | 12 +-- .../images/pokemon/variant/exp/666-polar.json | 20 +---- .../images/pokemon/variant/exp/666-river.json | 54 ++++--------- .../pokemon/variant/exp/666-sandstorm.json | 20 +---- .../pokemon/variant/exp/666-savanna.json | 20 +---- .../images/pokemon/variant/exp/666-sun.json | 20 +---- .../pokemon/variant/exp/666-tundra.json | 18 +---- .../images/pokemon/variant/exp/669-blue.json | 3 - .../images/pokemon/variant/exp/669-white.json | 3 - .../pokemon/variant/exp/669-yellow.json | 3 - .../images/pokemon/variant/exp/670-blue.json | 16 +--- .../pokemon/variant/exp/670-orange.json | 16 +--- .../images/pokemon/variant/exp/670-red.json | 16 +--- .../images/pokemon/variant/exp/670-white.json | 18 +---- .../pokemon/variant/exp/670-yellow.json | 16 +--- public/images/pokemon/variant/exp/6705.json | 5 +- .../images/pokemon/variant/exp/671-blue.json | 8 +- .../pokemon/variant/exp/671-orange.json | 8 +- .../images/pokemon/variant/exp/671-red.json | 8 +- .../images/pokemon/variant/exp/671-white.json | 8 +- .../pokemon/variant/exp/671-yellow.json | 14 +--- public/images/pokemon/variant/exp/6713.json | 2 - public/images/pokemon/variant/exp/672.json | 4 - public/images/pokemon/variant/exp/673.json | 4 - public/images/pokemon/variant/exp/677.json | 8 +- .../pokemon/variant/exp/678-female.json | 4 - public/images/pokemon/variant/exp/678.json | 9 +-- public/images/pokemon/variant/exp/691.json | 1 - public/images/pokemon/variant/exp/696.json | 80 +++++++----------- public/images/pokemon/variant/exp/697.json | 81 +++++++++---------- public/images/pokemon/variant/exp/699.json | 4 - public/images/pokemon/variant/exp/700.json | 56 ++++++------- public/images/pokemon/variant/exp/702.json | 4 - public/images/pokemon/variant/exp/704.json | 2 - public/images/pokemon/variant/exp/705.json | 2 - public/images/pokemon/variant/exp/706.json | 4 - public/images/pokemon/variant/exp/709.json | 2 - public/images/pokemon/variant/exp/710.json | 2 - public/images/pokemon/variant/exp/711.json | 4 - public/images/pokemon/variant/exp/712.json | 7 +- public/images/pokemon/variant/exp/713.json | 8 +- public/images/pokemon/variant/exp/715.json | 34 ++++---- .../pokemon/variant/exp/716-active.json | 8 +- .../pokemon/variant/exp/716-neutral.json | 2 - public/images/pokemon/variant/exp/728.json | 6 -- public/images/pokemon/variant/exp/729.json | 6 -- public/images/pokemon/variant/exp/730.json | 8 +- public/images/pokemon/variant/exp/734.json | 16 +--- public/images/pokemon/variant/exp/735.json | 7 -- public/images/pokemon/variant/exp/748.json | 3 - public/images/pokemon/variant/exp/752.json | 5 -- public/images/pokemon/variant/exp/753.json | 2 - public/images/pokemon/variant/exp/754.json | 2 - public/images/pokemon/variant/exp/755.json | 2 - public/images/pokemon/variant/exp/756.json | 2 - public/images/pokemon/variant/exp/761.json | 8 +- public/images/pokemon/variant/exp/762.json | 5 -- public/images/pokemon/variant/exp/763.json | 5 -- public/images/pokemon/variant/exp/767.json | 8 +- public/images/pokemon/variant/exp/768.json | 7 +- public/images/pokemon/variant/exp/771.json | 4 +- public/images/pokemon/variant/exp/772.json | 2 - public/images/pokemon/variant/exp/773.json | 5 -- public/images/pokemon/variant/exp/776.json | 4 - public/images/pokemon/variant/exp/777.json | 5 -- .../pokemon/variant/exp/778-busted.json | 3 - .../pokemon/variant/exp/778-disguised.json | 4 +- public/images/pokemon/variant/exp/779.json | 10 +-- public/images/pokemon/variant/exp/789.json | 8 -- public/images/pokemon/variant/exp/790.json | 9 --- public/images/pokemon/variant/exp/792.json | 18 +---- public/images/pokemon/variant/exp/797.json | 2 - public/images/pokemon/variant/exp/798.json | 2 - .../images/pokemon/variant/exp/80-mega.json | 6 -- .../pokemon/variant/exp/800-dawn-wings.json | 21 +---- .../images/pokemon/variant/exp/800-ultra.json | 10 +-- public/images/pokemon/variant/exp/800.json | 3 - public/images/pokemon/variant/exp/802.json | 5 -- public/images/pokemon/variant/exp/803.json | 2 - public/images/pokemon/variant/exp/804.json | 8 +- public/images/pokemon/variant/exp/808.json | 8 +- public/images/pokemon/variant/exp/809.json | 8 +- public/images/pokemon/variant/exp/816.json | 8 +- public/images/pokemon/variant/exp/817.json | 4 - public/images/pokemon/variant/exp/818.json | 7 -- public/images/pokemon/variant/exp/822.json | 4 - public/images/pokemon/variant/exp/823.json | 5 +- public/images/pokemon/variant/exp/830.json | 2 - public/images/pokemon/variant/exp/835.json | 12 +-- public/images/pokemon/variant/exp/850.json | 14 +--- public/images/pokemon/variant/exp/851.json | 5 -- public/images/pokemon/variant/exp/854.json | 3 - public/images/pokemon/variant/exp/855.json | 8 +- public/images/pokemon/variant/exp/856.json | 2 - public/images/pokemon/variant/exp/858.json | 2 - public/images/pokemon/variant/exp/859.json | 5 -- public/images/pokemon/variant/exp/860.json | 7 -- public/images/pokemon/variant/exp/861.json | 7 -- public/images/pokemon/variant/exp/862.json | 5 -- public/images/pokemon/variant/exp/863.json | 13 +-- public/images/pokemon/variant/exp/864.json | 2 +- public/images/pokemon/variant/exp/867.json | 2 - public/images/pokemon/variant/exp/872.json | 15 +--- public/images/pokemon/variant/exp/873.json | 4 - .../pokemon/variant/exp/876-female.json | 2 - public/images/pokemon/variant/exp/876.json | 5 -- .../pokemon/variant/exp/877-hangry.json | 14 ---- public/images/pokemon/variant/exp/877.json | 22 +---- public/images/pokemon/variant/exp/880.json | 48 +---------- public/images/pokemon/variant/exp/881.json | 2 - public/images/pokemon/variant/exp/883.json | 2 - public/images/pokemon/variant/exp/884.json | 2 - public/images/pokemon/variant/exp/885.json | 3 - public/images/pokemon/variant/exp/886.json | 5 -- public/images/pokemon/variant/exp/887.json | 3 - .../pokemon/variant/exp/888-crowned.json | 6 -- public/images/pokemon/variant/exp/888.json | 10 +-- .../pokemon/variant/exp/889-crowned.json | 6 -- public/images/pokemon/variant/exp/889.json | 10 +-- .../pokemon/variant/exp/890-eternamax.json | 2 - public/images/pokemon/variant/exp/890.json | 6 +- public/images/pokemon/variant/exp/891.json | 10 --- .../pokemon/variant/exp/892-rapid-strike.json | 17 +--- public/images/pokemon/variant/exp/892.json | 17 +--- public/images/pokemon/variant/exp/896.json | 3 - public/images/pokemon/variant/exp/897.json | 7 -- .../images/pokemon/variant/exp/898-ice.json | 7 -- .../pokemon/variant/exp/898-shadow.json | 11 --- public/images/pokemon/variant/exp/898.json | 5 -- public/images/pokemon/variant/exp/900.json | 17 +--- public/images/pokemon/variant/exp/901.json | 17 +--- public/images/pokemon/variant/exp/903.json | 3 - public/images/pokemon/variant/exp/909.json | 23 +----- public/images/pokemon/variant/exp/912.json | 2 - public/images/pokemon/variant/exp/913.json | 2 - public/images/pokemon/variant/exp/914.json | 5 +- public/images/pokemon/variant/exp/919.json | 6 -- public/images/pokemon/variant/exp/920.json | 12 --- public/images/pokemon/variant/exp/934.json | 2 - public/images/pokemon/variant/exp/940.json | 7 -- public/images/pokemon/variant/exp/941.json | 10 --- public/images/pokemon/variant/exp/948.json | 2 - public/images/pokemon/variant/exp/949.json | 2 - public/images/pokemon/variant/exp/951.json | 3 - public/images/pokemon/variant/exp/952.json | 12 --- public/images/pokemon/variant/exp/953.json | 4 +- public/images/pokemon/variant/exp/954.json | 2 - public/images/pokemon/variant/exp/962.json | 52 +----------- public/images/pokemon/variant/exp/967.json | 9 --- public/images/pokemon/variant/exp/968.json | 19 +---- public/images/pokemon/variant/exp/969.json | 2 - public/images/pokemon/variant/exp/973.json | 26 +----- public/images/pokemon/variant/exp/974.json | 8 -- public/images/pokemon/variant/exp/975.json | 8 +- public/images/pokemon/variant/exp/981.json | 6 -- .../variant/exp/982-three-segment.json | 9 +-- public/images/pokemon/variant/exp/982.json | 3 - public/images/pokemon/variant/exp/987.json | 6 -- public/images/pokemon/variant/exp/988.json | 4 - public/images/pokemon/variant/exp/993.json | 50 +----------- public/images/pokemon/variant/exp/994.json | 2 - public/images/pokemon/variant/exp/995.json | 15 +--- public/images/pokemon/variant/exp/996.json | 3 - public/images/pokemon/variant/exp/999.json | 2 - .../images/pokemon/variant/exp/back/1000.json | 13 +-- .../images/pokemon/variant/exp/back/1001.json | 2 - .../images/pokemon/variant/exp/back/1003.json | 2 - .../images/pokemon/variant/exp/back/1004.json | 8 +- .../variant/exp/back/1008-ultimate-mode.json | 19 +---- .../pokemon/variant/exp/back/127-mega.json | 16 +--- .../pokemon/variant/exp/back/130-mega.json | 13 +-- .../pokemon/variant/exp/back/142-mega.json | 2 - .../pokemon/variant/exp/back/150-mega-x.json | 5 -- .../pokemon/variant/exp/back/181-mega.json | 6 +- .../images/pokemon/variant/exp/back/2027.json | 10 +-- .../images/pokemon/variant/exp/back/2028.json | 8 +- .../images/pokemon/variant/exp/back/2052.json | 4 - .../images/pokemon/variant/exp/back/2053.json | 8 +- .../pokemon/variant/exp/back/212-mega.json | 27 ------- .../pokemon/variant/exp/back/229-mega.json | 12 --- .../pokemon/variant/exp/back/248-mega.json | 40 +++++---- .../pokemon/variant/exp/back/257-mega.json | 2 - .../pokemon/variant/exp/back/282-mega.json | 5 -- .../pokemon/variant/exp/back/302-mega.json | 2 - .../pokemon/variant/exp/back/303-mega.json | 9 --- .../pokemon/variant/exp/back/308-mega.json | 3 - .../pokemon/variant/exp/back/310-mega.json | 9 +-- .../pokemon/variant/exp/back/354-mega.json | 2 - .../pokemon/variant/exp/back/362-mega.json | 2 - .../pokemon/variant/exp/back/373-mega.json | 1 - .../pokemon/variant/exp/back/376-mega.json | 8 +- .../pokemon/variant/exp/back/380-mega.json | 2 - .../pokemon/variant/exp/back/381-mega.json | 2 - .../pokemon/variant/exp/back/382-primal.json | 24 +----- .../pokemon/variant/exp/back/383-primal.json | 10 --- .../pokemon/variant/exp/back/384-mega.json | 8 +- .../images/pokemon/variant/exp/back/4052.json | 8 -- .../images/pokemon/variant/exp/back/4077.json | 2 - .../images/pokemon/variant/exp/back/4078.json | 6 -- .../images/pokemon/variant/exp/back/4079.json | 10 +-- .../images/pokemon/variant/exp/back/4199.json | 4 - .../images/pokemon/variant/exp/back/4222.json | 2 - .../images/pokemon/variant/exp/back/4263.json | 8 -- .../images/pokemon/variant/exp/back/4264.json | 10 +-- .../pokemon/variant/exp/back/428-mega.json | 2 - .../pokemon/variant/exp/back/445-mega.json | 18 ----- .../pokemon/variant/exp/back/448-mega.json | 24 +----- .../images/pokemon/variant/exp/back/4562.json | 4 - .../pokemon/variant/exp/back/531-mega.json | 8 +- .../pokemon/variant/exp/back/6-mega-y.json | 6 +- .../images/pokemon/variant/exp/back/6100.json | 8 -- .../images/pokemon/variant/exp/back/6101.json | 9 +-- .../images/pokemon/variant/exp/back/6215.json | 6 -- .../images/pokemon/variant/exp/back/653.json | 2 - .../images/pokemon/variant/exp/back/654.json | 6 -- .../images/pokemon/variant/exp/back/6549.json | 12 +-- .../images/pokemon/variant/exp/back/6570.json | 2 - .../images/pokemon/variant/exp/back/6571.json | 7 +- .../images/pokemon/variant/exp/back/664.json | 4 +- .../images/pokemon/variant/exp/back/665.json | 3 - .../variant/exp/back/666-archipelago.json | 50 ++++-------- .../variant/exp/back/666-continental.json | 20 +---- .../pokemon/variant/exp/back/666-elegant.json | 49 ++++------- .../pokemon/variant/exp/back/666-fancy.json | 54 +++++-------- .../pokemon/variant/exp/back/666-garden.json | 47 ++++------- .../variant/exp/back/666-high-plains.json | 53 ++++-------- .../variant/exp/back/666-icy-snow.json | 46 ++++------- .../pokemon/variant/exp/back/666-jungle.json | 49 ++++------- .../pokemon/variant/exp/back/666-marine.json | 47 ++++------- .../pokemon/variant/exp/back/666-meadow.json | 49 ++++------- .../pokemon/variant/exp/back/666-modern.json | 47 ++++------- .../pokemon/variant/exp/back/666-monsoon.json | 48 ++++------- .../pokemon/variant/exp/back/666-ocean.json | 49 ++++------- .../variant/exp/back/666-poke-ball.json | 55 ++++++------- .../pokemon/variant/exp/back/666-polar.json | 49 ++++------- .../pokemon/variant/exp/back/666-river.json | 54 ++++--------- .../variant/exp/back/666-sandstorm.json | 49 ++++------- .../pokemon/variant/exp/back/666-savanna.json | 49 ++++------- .../pokemon/variant/exp/back/666-sun.json | 51 +++++------- .../pokemon/variant/exp/back/666-tundra.json | 47 ++++------- .../pokemon/variant/exp/back/670-orange.json | 3 - .../pokemon/variant/exp/back/670-red.json | 3 - .../pokemon/variant/exp/back/670-white.json | 4 - .../pokemon/variant/exp/back/670-yellow.json | 3 - .../images/pokemon/variant/exp/back/6705.json | 5 +- .../pokemon/variant/exp/back/671-blue.json | 11 +-- .../pokemon/variant/exp/back/671-orange.json | 11 +-- .../pokemon/variant/exp/back/671-red.json | 11 +-- .../pokemon/variant/exp/back/671-white.json | 11 +-- .../pokemon/variant/exp/back/671-yellow.json | 11 +-- .../images/pokemon/variant/exp/back/6713.json | 2 - .../images/pokemon/variant/exp/back/672.json | 4 +- .../images/pokemon/variant/exp/back/673.json | 4 +- .../images/pokemon/variant/exp/back/677.json | 2 - .../pokemon/variant/exp/back/678-female.json | 6 +- .../images/pokemon/variant/exp/back/678.json | 2 - .../images/pokemon/variant/exp/back/690.json | 2 - .../images/pokemon/variant/exp/back/691.json | 2 - .../images/pokemon/variant/exp/back/696.json | 55 ++++++------- .../images/pokemon/variant/exp/back/697.json | 62 +++++++------- .../images/pokemon/variant/exp/back/700.json | 56 ++++++------- .../images/pokemon/variant/exp/back/702.json | 4 - .../images/pokemon/variant/exp/back/704.json | 2 - .../images/pokemon/variant/exp/back/705.json | 38 +++++---- .../images/pokemon/variant/exp/back/706.json | 2 - .../images/pokemon/variant/exp/back/709.json | 3 - .../images/pokemon/variant/exp/back/710.json | 6 -- .../images/pokemon/variant/exp/back/711.json | 6 -- .../images/pokemon/variant/exp/back/712.json | 7 +- .../images/pokemon/variant/exp/back/713.json | 6 +- .../images/pokemon/variant/exp/back/715.json | 4 - .../pokemon/variant/exp/back/716-active.json | 9 --- .../pokemon/variant/exp/back/716-neutral.json | 8 +- .../images/pokemon/variant/exp/back/717.json | 1 - .../images/pokemon/variant/exp/back/720.json | 3 - .../images/pokemon/variant/exp/back/728.json | 6 -- .../images/pokemon/variant/exp/back/729.json | 6 -- .../images/pokemon/variant/exp/back/730.json | 8 +- .../images/pokemon/variant/exp/back/734.json | 8 +- .../images/pokemon/variant/exp/back/735.json | 3 - .../images/pokemon/variant/exp/back/748.json | 8 +- .../images/pokemon/variant/exp/back/751.json | 4 - .../images/pokemon/variant/exp/back/752.json | 6 -- .../images/pokemon/variant/exp/back/753.json | 10 +-- .../images/pokemon/variant/exp/back/754.json | 1 - .../images/pokemon/variant/exp/back/755.json | 2 - .../images/pokemon/variant/exp/back/756.json | 2 - .../images/pokemon/variant/exp/back/761.json | 7 +- .../images/pokemon/variant/exp/back/762.json | 5 -- .../images/pokemon/variant/exp/back/763.json | 5 -- .../images/pokemon/variant/exp/back/767.json | 2 - .../images/pokemon/variant/exp/back/768.json | 9 +-- .../images/pokemon/variant/exp/back/771.json | 4 - .../images/pokemon/variant/exp/back/772.json | 2 - .../images/pokemon/variant/exp/back/773.json | 6 -- .../images/pokemon/variant/exp/back/777.json | 6 +- .../pokemon/variant/exp/back/778-busted.json | 6 +- .../variant/exp/back/778-disguised.json | 4 +- .../images/pokemon/variant/exp/back/779.json | 9 +-- .../images/pokemon/variant/exp/back/789.json | 9 +-- .../images/pokemon/variant/exp/back/790.json | 10 --- .../images/pokemon/variant/exp/back/792.json | 14 +--- .../images/pokemon/variant/exp/back/793.json | 6 -- .../images/pokemon/variant/exp/back/797.json | 2 - .../images/pokemon/variant/exp/back/798.json | 4 - .../pokemon/variant/exp/back/80-mega.json | 6 -- .../variant/exp/back/800-dawn-wings.json | 7 -- .../pokemon/variant/exp/back/800-ultra.json | 6 +- .../images/pokemon/variant/exp/back/800.json | 6 +- .../images/pokemon/variant/exp/back/802.json | 9 +-- .../images/pokemon/variant/exp/back/803.json | 2 - .../images/pokemon/variant/exp/back/804.json | 2 - .../images/pokemon/variant/exp/back/808.json | 8 +- .../images/pokemon/variant/exp/back/809.json | 9 +-- .../images/pokemon/variant/exp/back/816.json | 6 +- .../images/pokemon/variant/exp/back/817.json | 8 +- .../images/pokemon/variant/exp/back/818.json | 4 - .../images/pokemon/variant/exp/back/821.json | 2 - .../images/pokemon/variant/exp/back/822.json | 8 -- .../images/pokemon/variant/exp/back/823.json | 5 -- .../images/pokemon/variant/exp/back/829.json | 3 - .../images/pokemon/variant/exp/back/830.json | 6 +- .../images/pokemon/variant/exp/back/835.json | 3 - .../images/pokemon/variant/exp/back/836.json | 4 - .../images/pokemon/variant/exp/back/850.json | 6 +- .../images/pokemon/variant/exp/back/851.json | 6 +- .../images/pokemon/variant/exp/back/854.json | 2 - .../images/pokemon/variant/exp/back/855.json | 2 - .../images/pokemon/variant/exp/back/856.json | 2 - .../images/pokemon/variant/exp/back/858.json | 2 - .../images/pokemon/variant/exp/back/859.json | 2 - .../images/pokemon/variant/exp/back/860.json | 4 - .../images/pokemon/variant/exp/back/861.json | 2 - .../images/pokemon/variant/exp/back/862.json | 9 +-- .../images/pokemon/variant/exp/back/863.json | 11 +-- .../images/pokemon/variant/exp/back/864.json | 6 +- .../images/pokemon/variant/exp/back/867.json | 2 - .../images/pokemon/variant/exp/back/872.json | 6 -- .../images/pokemon/variant/exp/back/873.json | 9 +-- .../pokemon/variant/exp/back/876-female.json | 2 - .../images/pokemon/variant/exp/back/876.json | 2 - .../pokemon/variant/exp/back/877-hangry.json | 7 -- .../images/pokemon/variant/exp/back/877.json | 10 --- .../images/pokemon/variant/exp/back/880.json | 3 - .../images/pokemon/variant/exp/back/881.json | 3 - .../images/pokemon/variant/exp/back/882.json | 2 - .../images/pokemon/variant/exp/back/883.json | 4 - .../images/pokemon/variant/exp/back/884.json | 2 - .../images/pokemon/variant/exp/back/885.json | 3 - .../images/pokemon/variant/exp/back/886.json | 6 +- .../images/pokemon/variant/exp/back/887.json | 4 - .../pokemon/variant/exp/back/888-crowned.json | 18 +---- .../images/pokemon/variant/exp/back/888.json | 2 - .../pokemon/variant/exp/back/889-crowned.json | 2 - .../images/pokemon/variant/exp/back/889.json | 2 - .../images/pokemon/variant/exp/back/890.json | 6 -- .../images/pokemon/variant/exp/back/891.json | 6 -- .../variant/exp/back/892-rapid-strike.json | 7 -- .../images/pokemon/variant/exp/back/892.json | 5 -- .../images/pokemon/variant/exp/back/896.json | 12 +-- .../images/pokemon/variant/exp/back/897.json | 7 -- .../pokemon/variant/exp/back/898-ice.json | 21 +---- .../pokemon/variant/exp/back/898-shadow.json | 11 --- .../images/pokemon/variant/exp/back/898.json | 5 -- .../images/pokemon/variant/exp/back/900.json | 20 +---- .../images/pokemon/variant/exp/back/901.json | 15 +--- .../images/pokemon/variant/exp/back/903.json | 4 - .../images/pokemon/variant/exp/back/909.json | 12 +-- .../images/pokemon/variant/exp/back/911.json | 14 +--- .../images/pokemon/variant/exp/back/912.json | 2 - .../images/pokemon/variant/exp/back/913.json | 2 - .../images/pokemon/variant/exp/back/919.json | 13 +-- .../images/pokemon/variant/exp/back/920.json | 12 --- .../images/pokemon/variant/exp/back/932.json | 2 - .../images/pokemon/variant/exp/back/933.json | 5 -- .../images/pokemon/variant/exp/back/934.json | 2 - .../pokemon/variant/exp/back/94-mega.json | 5 -- .../images/pokemon/variant/exp/back/940.json | 4 - .../images/pokemon/variant/exp/back/941.json | 12 +-- .../images/pokemon/variant/exp/back/948.json | 2 - .../images/pokemon/variant/exp/back/949.json | 6 -- .../images/pokemon/variant/exp/back/951.json | 4 - .../images/pokemon/variant/exp/back/952.json | 1 - .../images/pokemon/variant/exp/back/953.json | 2 - .../images/pokemon/variant/exp/back/954.json | 2 - .../images/pokemon/variant/exp/back/957.json | 10 +-- .../images/pokemon/variant/exp/back/958.json | 10 --- .../images/pokemon/variant/exp/back/959.json | 4 - .../images/pokemon/variant/exp/back/962.json | 5 +- .../images/pokemon/variant/exp/back/967.json | 9 +-- .../images/pokemon/variant/exp/back/969.json | 2 - .../images/pokemon/variant/exp/back/970.json | 1 - .../images/pokemon/variant/exp/back/973.json | 22 +---- .../images/pokemon/variant/exp/back/974.json | 2 - .../images/pokemon/variant/exp/back/975.json | 2 - .../variant/exp/back/978-stretchy.json | 2 - .../images/pokemon/variant/exp/back/979.json | 7 +- .../images/pokemon/variant/exp/back/981.json | 6 -- .../variant/exp/back/982-three-segment.json | 3 - .../images/pokemon/variant/exp/back/982.json | 5 -- .../images/pokemon/variant/exp/back/987.json | 3 - .../images/pokemon/variant/exp/back/988.json | 6 -- .../images/pokemon/variant/exp/back/993.json | 4 - .../images/pokemon/variant/exp/back/994.json | 9 +-- .../images/pokemon/variant/exp/back/995.json | 16 +--- .../images/pokemon/variant/exp/back/996.json | 5 -- .../images/pokemon/variant/exp/back/997.json | 6 +- .../images/pokemon/variant/exp/back/998.json | 3 - .../images/pokemon/variant/exp/back/999.json | 11 +-- .../pokemon/variant/exp/back/female/6215.json | 6 -- .../pokemon/variant/exp/female/6215.json | 12 +-- public/images/pokemon/variant/female/111.json | 10 +-- public/images/pokemon/variant/female/112.json | 14 +--- public/images/pokemon/variant/female/118.json | 2 - public/images/pokemon/variant/female/119.json | 4 - public/images/pokemon/variant/female/123.json | 26 +----- public/images/pokemon/variant/female/129.json | 8 +- public/images/pokemon/variant/female/130.json | 2 - public/images/pokemon/variant/female/185.json | 2 - public/images/pokemon/variant/female/19.json | 12 +-- public/images/pokemon/variant/female/190.json | 10 +-- public/images/pokemon/variant/female/20.json | 2 - public/images/pokemon/variant/female/203.json | 4 - public/images/pokemon/variant/female/212.json | 19 +---- public/images/pokemon/variant/female/215.json | 3 - public/images/pokemon/variant/female/217.json | 19 +---- public/images/pokemon/variant/female/229.json | 12 +-- public/images/pokemon/variant/female/232.json | 6 -- public/images/pokemon/variant/female/255.json | 4 - public/images/pokemon/variant/female/256.json | 12 +-- public/images/pokemon/variant/female/257.json | 2 - public/images/pokemon/variant/female/3.json | 6 +- public/images/pokemon/variant/female/307.json | 13 +-- public/images/pokemon/variant/female/308.json | 6 -- public/images/pokemon/variant/female/315.json | 2 - public/images/pokemon/variant/female/369.json | 4 - public/images/pokemon/variant/female/399.json | 12 +-- public/images/pokemon/variant/female/400.json | 6 -- public/images/pokemon/variant/female/401.json | 3 - public/images/pokemon/variant/female/407.json | 2 - public/images/pokemon/variant/female/41.json | 10 +-- public/images/pokemon/variant/female/418.json | 7 -- public/images/pokemon/variant/female/419.json | 2 - public/images/pokemon/variant/female/42.json | 8 -- public/images/pokemon/variant/female/424.json | 10 +-- public/images/pokemon/variant/female/44.json | 2 - public/images/pokemon/variant/female/443.json | 12 --- public/images/pokemon/variant/female/444.json | 15 +--- public/images/pokemon/variant/female/445.json | 15 ---- public/images/pokemon/variant/female/45.json | 2 - public/images/pokemon/variant/female/456.json | 4 - public/images/pokemon/variant/female/457.json | 8 +- public/images/pokemon/variant/female/461.json | 3 - public/images/pokemon/variant/female/464.json | 7 -- public/images/pokemon/variant/female/592.json | 6 -- public/images/pokemon/variant/female/593.json | 14 +--- .../images/pokemon/variant/female/6215.json | 10 +-- public/images/pokemon/variant/female/84.json | 7 -- public/images/pokemon/variant/female/85.json | 11 --- 1859 files changed, 2035 insertions(+), 11840 deletions(-) diff --git a/public/images/pokemon/variant/1.json b/public/images/pokemon/variant/1.json index 4c53b4ca522..e5ac0df229e 100644 --- a/public/images/pokemon/variant/1.json +++ b/public/images/pokemon/variant/1.json @@ -2,7 +2,6 @@ "1": { "526329": "4a1117", "a5d642": "ff745e", - "101010": "101010", "194a4a": "57003d", "73ad31": "b34952", "3a9494": "9c195c", @@ -10,16 +9,13 @@ "317373": "6e034e", "63d6b5": "de3570", "bdff73": "ffc5a3", - "cecece": "cecece", "ef213a": "712f8f", "ad0031": "3f1375", - "ffffff": "ffffff", "ff6b63": "a266b0" }, "2": { "526329": "022e59", "a5d642": "80c3d9", - "101010": "101010", "194a4a": "782c00", "73ad31": "446b94", "3a9494": "d46d00", @@ -27,10 +23,8 @@ "317373": "5c410d", "63d6b5": "faac05", "bdff73": "befaf1", - "cecece": "cecece", "ef213a": "1d540c", "ad0031": "3c8227", - "ffffff": "ffffff", "ff6b63": "86bf75" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/100.json b/public/images/pokemon/variant/100.json index a37f7e045be..32f619876dd 100644 --- a/public/images/pokemon/variant/100.json +++ b/public/images/pokemon/variant/100.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "841010": "983d00", "d63142": "c76d14", "ff5221": "f0b64a", @@ -12,7 +11,6 @@ "b5adbd": "d6b0a5" }, "2": { - "101010": "101010", "841010": "27145d", "d63142": "482683", "ff5221": "7240a2", diff --git a/public/images/pokemon/variant/1000.json b/public/images/pokemon/variant/1000.json index e7451cd51d0..1e8bb087c88 100644 --- a/public/images/pokemon/variant/1000.json +++ b/public/images/pokemon/variant/1000.json @@ -3,7 +3,6 @@ "917228": "a33612", "ffdba6": "ffb667", "ffd52d": "ee883f", - "0f0f0f": "0f0f0f", "f7a62d": "a64700", "d9880f": "9b3e00", "484415": "6d1906", @@ -20,7 +19,6 @@ "917228": "622f43", "ffdba6": "f3e3e4", "ffd52d": "e1ced1", - "0f0f0f": "0f0f0f", "f7a62d": "96747e", "d9880f": "7a4e5d", "484415": "4b1a32", @@ -37,7 +35,6 @@ "917228": "3d717b", "ffdba6": "ffffff", "ffd52d": "e5fffc", - "0f0f0f": "0f0f0f", "f7a62d": "89d1d6", "d9880f": "5a9aa3", "484415": "214048", diff --git a/public/images/pokemon/variant/1001.json b/public/images/pokemon/variant/1001.json index 84ef616b389..b3fd1825cd6 100644 --- a/public/images/pokemon/variant/1001.json +++ b/public/images/pokemon/variant/1001.json @@ -3,7 +3,6 @@ "505551": "754e3b", "b8bebd": "ebe6c0", "313430": "4f2711", - "010101": "010101", "7e615a": "1f1e1c", "48492e": "0a0907", "a28b76": "383734", @@ -13,16 +12,12 @@ "524a36": "754607", "b99c60": "e2a845", "7b7253": "b87416", - "f97c20": "a5af8b", - "fdfdfd": "fdfdfd", - "212421": "212421", - "212021": "212021" + "f97c20": "a5af8b" }, "2": { "505551": "322733", "b8bebd": "dbcce8", "313430": "1b101c", - "010101": "010101", "7e615a": "e6aec8", "48492e": "9c4b6f", "a28b76": "fce6f0", @@ -32,9 +27,6 @@ "524a36": "420f0f", "b99c60": "bd405d", "7b7253": "5e1b1b", - "f97c20": "f536f5", - "fdfdfd": "fdfdfd", - "212421": "212421", - "212021": "212021" + "f97c20": "f536f5" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/1003.json b/public/images/pokemon/variant/1003.json index a0b7fb54c9e..28805ce18a9 100644 --- a/public/images/pokemon/variant/1003.json +++ b/public/images/pokemon/variant/1003.json @@ -2,9 +2,7 @@ "1": { "283331": "96562e", "a6b4a7": "e7cb7e", - "4a4a4a": "4a4a4a", "486863": "be8550", - "0f0f0f": "0f0f0f", "73958b": "daa666", "5e4622": "352831", "5c3127": "861d0f", @@ -20,9 +18,7 @@ "2": { "283331": "472d7c", "a6b4a7": "cfa0f3", - "4a4a4a": "4a4a4a", "486863": "6c4aac", - "0f0f0f": "0f0f0f", "73958b": "8d6acc", "5e4622": "434377", "5c3127": "313246", diff --git a/public/images/pokemon/variant/1004.json b/public/images/pokemon/variant/1004.json index f8370292ad5..dc6c13f5f47 100644 --- a/public/images/pokemon/variant/1004.json +++ b/public/images/pokemon/variant/1004.json @@ -2,7 +2,6 @@ "1": { "a23724": "b06f00", "f4342f": "f2b200", - "0f0f0f": "0f0f0f", "f35e38": "ffc81b", "f9824f": "ffe13a", "b15236": "dca300", @@ -13,13 +12,11 @@ "1c4021": "3e3e84", "5b985a": "5c71c1", "83b884": "7a9ae0", - "3c3f3a": "27276a", - "f8f8f0": "f8f8f0" + "3c3f3a": "27276a" }, "2": { "a23724": "76074d", "f4342f": "a525d3", - "0f0f0f": "0f0f0f", "f35e38": "3449f6", "f9824f": "49c9f6", "b15236": "6233a3", @@ -30,7 +27,6 @@ "1c4021": "655a59", "5b985a": "b09f97", "83b884": "d7cbb5", - "3c3f3a": "4b4444", - "f8f8f0": "f8f8f0" + "3c3f3a": "4b4444" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/1006.json b/public/images/pokemon/variant/1006.json index 420456dcd93..e6a76a533fd 100644 --- a/public/images/pokemon/variant/1006.json +++ b/public/images/pokemon/variant/1006.json @@ -2,10 +2,8 @@ "2": { "2d384a": "2a224e", "595f6a": "181440", - "f4f8f7": "f4f8f7", "4b8383": "3e2d63", "6db0b4": "585995", - "0f0f0f": "0f0f0f", "264d24": "483d5c", "5ab46a": "c2c8dc", "41835a": "79728e", diff --git a/public/images/pokemon/variant/1008-ultimate-mode.json b/public/images/pokemon/variant/1008-ultimate-mode.json index 3c1fb26f6ff..935e8e6a220 100644 --- a/public/images/pokemon/variant/1008-ultimate-mode.json +++ b/public/images/pokemon/variant/1008-ultimate-mode.json @@ -1,21 +1,15 @@ { "0": { "4ba5cf": "8955b5", - "fefefe": "fefefe", "d7c2c1": "d7c3f7", "c883d1": "7fd8cf", "1a1c42": "393a3e", "5c4370": "3e446d", "fcdf14": "427eff", - "878594": "878594", - "c1bddf": "c1bddf", - "e6e3f2": "e6e3f2", "643fa3": "c8c8c8", - "0e0e12": "0e0e12", "4d3672": "858585", "392855": "616161", - "2e3176": "868686", - "ffffff": "ffffff" + "2e3176": "868686" }, "1": { "4ba5cf": "31808e", @@ -27,13 +21,10 @@ "fcdf14": "2cc151", "878594": "89a5ff", "c1bddf": "b7d8ff", - "e6e3f2": "e6e3f2", "643fa3": "626877", - "0e0e12": "0e0e12", "4d3672": "444b66", "392855": "393e51", - "2e3176": "3aff75", - "ffffff": "ffffff" + "2e3176": "3aff75" }, "2": { "4ba5cf": "8e3c84", @@ -41,16 +32,13 @@ "d7c2c1": "ff93d4", "c883d1": "ffc26d", "1a1c42": "29253f", - "5c4370": "5c4370", "fcdf14": "cc5767", "878594": "ad9e9d", "c1bddf": "e0e0e0", "e6e3f2": "eae8f4", "643fa3": "3b4986", - "0e0e12": "0e0e12", "4d3672": "2a3768", "392855": "192142", - "2e3176": "cf3e57", - "ffffff": "ffffff" + "2e3176": "cf3e57" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/101.json b/public/images/pokemon/variant/101.json index 335af910d8a..46735c1d98a 100644 --- a/public/images/pokemon/variant/101.json +++ b/public/images/pokemon/variant/101.json @@ -1,11 +1,8 @@ { "1": { - "5a5252": "5a5252", "cecede": "d6b0a5", "efefef": "f7e4da", - "101010": "101010", "ffffff": "fffdfb", - "a59c9c": "a59c9c", "d68494": "d59679", "c52942": "c76d14", "f7a58c": "ffd86f", @@ -14,12 +11,9 @@ "841010": "983d00" }, "2": { - "5a5252": "5a5252", "cecede": "94b1c9", "efefef": "cde3ef", - "101010": "101010", "ffffff": "f3fdff", - "a59c9c": "a59c9c", "d68494": "887db5", "c52942": "482683", "f7a58c": "c27bec", diff --git a/public/images/pokemon/variant/1010.json b/public/images/pokemon/variant/1010.json index f216f9f184a..75461e5d114 100644 --- a/public/images/pokemon/variant/1010.json +++ b/public/images/pokemon/variant/1010.json @@ -6,13 +6,11 @@ "c51333": "4a6329", "ff5f7c": "638c10", "ffb2c0": "9cce52", - "0b0b0b": "0b0b0b", "aedf87": "ef8ca5", "343631": "313436", "61635b": "5b6263", "8a8d85": "858d8c", - "c0c1be": "bec1c0", - "1d1d1c": "1d1d1c" + "c0c1be": "bec1c0" }, "2": { "1e5238": "834b04", @@ -21,12 +19,10 @@ "c51333": "9131a3", "ff5f7c": "e565fd", "ffb2c0": "eeeeee", - "0b0b0b": "0b0b0b", "aedf87": "e3d520", "343631": "54544c", "61635b": "a1a19b", "8a8d85": "cacac6", - "c0c1be": "eeeeee", - "1d1d1c": "1d1d1c" + "c0c1be": "eeeeee" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/1018.json b/public/images/pokemon/variant/1018.json index ed50c6015c8..47ac432cdb4 100644 --- a/public/images/pokemon/variant/1018.json +++ b/public/images/pokemon/variant/1018.json @@ -1,7 +1,6 @@ { "1": { "691701": "871e14", - "000000": "000000", "aa3810": "ed7746", "7d5c02": "b53d07", "272b87": "1d542f", @@ -19,7 +18,6 @@ }, "2": { "691701": "062449", - "000000": "000000", "aa3810": "2077a6", "7d5c02": "126fa3", "272b87": "fede7d", diff --git a/public/images/pokemon/variant/1022.json b/public/images/pokemon/variant/1022.json index e4eb3ac16b2..249ba1e3afc 100644 --- a/public/images/pokemon/variant/1022.json +++ b/public/images/pokemon/variant/1022.json @@ -3,11 +3,9 @@ "382929": "5e1111", "604640": "9c120b", "7a5a4b": "ce2e25", - "050505": "050505", "adadad": "9a9696", "cfcfcf": "c1baba", "b87b21": "0a8d7f", - "eeeeee": "eeeeee", "8a8e8a": "817c7c", "dfa939": "22c7b6", "5a5a56": "56534c", @@ -19,11 +17,9 @@ "382929": "744c08", "604640": "bba010", "7a5a4b": "e3d520", - "050505": "050505", "adadad": "a1a19b", "cfcfcf": "cacac6", "b87b21": "9131a3", - "eeeeee": "eeeeee", "8a8e8a": "74746b", "dfa939": "e565fd", "5a5a56": "54544c", diff --git a/public/images/pokemon/variant/1023.json b/public/images/pokemon/variant/1023.json index 19d232e9566..8250aea2677 100644 --- a/public/images/pokemon/variant/1023.json +++ b/public/images/pokemon/variant/1023.json @@ -2,8 +2,6 @@ "1": { "00a6ad": "92c72a", "62f7f7": "bcfb3f", - "f9ffff": "f9ffff", - "050505": "050505", "f0c720": "c5f6e6", "89570c": "52766a", "b4961f": "88b8a8", @@ -11,17 +9,13 @@ "163d43": "133453", "45cbc8": "5ca6ea", "389cad": "3673aa", - "242322": "242322", "858ca7": "7b7b7b", "c9cfda": "bdbdbd", - "454a54": "4f4d4d", - "7092be": "7092be" + "454a54": "4f4d4d" }, "2": { "00a6ad": "852098", "62f7f7": "d046e8", - "f9ffff": "f9ffff", - "050505": "050505", "f0c720": "b6d4d2", "89570c": "627675", "b4961f": "9bb4b3", @@ -29,10 +23,8 @@ "163d43": "5c3c06", "45cbc8": "d9cd25", "389cad": "c1991d", - "242322": "242322", "858ca7": "a9a7a2", "c9cfda": "d5d5d1", - "454a54": "72716d", - "7092be": "7092be" + "454a54": "72716d" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/111.json b/public/images/pokemon/variant/111.json index 163e82ae742..f21cec533c5 100644 --- a/public/images/pokemon/variant/111.json +++ b/public/images/pokemon/variant/111.json @@ -1,22 +1,16 @@ { "1": { "5a5a7b": "241e2f", - "101010": "101010", "bdbdce": "6a547a", "e6e6ef": "9781ab", "8484ad": "402f51", - "3a3a52": "261e2d", - "ffffff": "ffffff", - "ad3a29": "ad3a29" + "3a3a52": "261e2d" }, "2": { "5a5a7b": "ab4355", - "101010": "101010", "bdbdce": "e18db3", "e6e6ef": "f7b4d1", "8484ad": "d76688", - "3a3a52": "6d2935", - "ffffff": "ffffff", - "ad3a29": "ad3a29" + "3a3a52": "6d2935" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/112.json b/public/images/pokemon/variant/112.json index 621308c3297..dceef9b6ed9 100644 --- a/public/images/pokemon/variant/112.json +++ b/public/images/pokemon/variant/112.json @@ -1,32 +1,22 @@ { "1": { "8c8c94": "523c5c", - "101010": "101010", "c5c5bd": "6a547a", "52525a": "3c2945", "e6e6de": "9781ab", "735a31": "6b6373", "ffefc5": "cecede", "b5a573": "948cad", - "ffffff": "ffffff", - "a53110": "a53110", - "e6523a": "e6523a", - "e6d6ad": "cecede", - "732110": "732110" + "e6d6ad": "cecede" }, "2": { "8c8c94": "ab3f5c", - "101010": "101010", "c5c5bd": "cb568a", "52525a": "642224", "e6e6de": "ef86b5", "735a31": "6d586d", "ffefc5": "dacad3", "b5a573": "be9bb6", - "ffffff": "ffffff", - "a53110": "a53110", - "e6523a": "e6523a", - "e6d6ad": "dacad3", - "732110": "732110" + "e6d6ad": "dacad3" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/114.json b/public/images/pokemon/variant/114.json index fa07a96b55d..d57d431a799 100644 --- a/public/images/pokemon/variant/114.json +++ b/public/images/pokemon/variant/114.json @@ -4,9 +4,6 @@ "427b94": "654294", "5aa5ce": "755ace", "94d6f7": "a479ff", - "101010": "101010", - "b5b5b5": "b5b5b5", - "ffffff": "ffffff", "732929": "2b7329", "ad2942": "2dad29", "de4a6b": "7bde4a", @@ -17,9 +14,6 @@ "427b94": "ad875a", "5aa5ce": "ebc582", "94d6f7": "ffedb6", - "101010": "101010", - "b5b5b5": "b5b5b5", - "ffffff": "ffffff", "732929": "332119", "ad2942": "4d2c1d", "de4a6b": "7a4932", diff --git a/public/images/pokemon/variant/116.json b/public/images/pokemon/variant/116.json index 978af835a5c..90904480c4d 100644 --- a/public/images/pokemon/variant/116.json +++ b/public/images/pokemon/variant/116.json @@ -4,10 +4,7 @@ "bddeff": "7ed683", "a5c5ef": "5bab65", "6b94b5": "3d7b4f", - "101010": "101010", - "ffffff": "ffffff", "ff7373": "34b9af", - "d6d6d6": "d6d6d6", "dec54a": "91bf49", "9c844a": "548133", "ffffad": "fff370" @@ -17,10 +14,7 @@ "bddeff": "fffaa1", "a5c5ef": "ffe675", "6b94b5": "edb766", - "101010": "101010", - "ffffff": "ffffff", "ff7373": "9973c7", - "d6d6d6": "d6d6d6", "dec54a": "4e878a", "9c844a": "314e5e", "ffffad": "7bc9bb" diff --git a/public/images/pokemon/variant/117.json b/public/images/pokemon/variant/117.json index 81b047d6142..6dab6d19277 100644 --- a/public/images/pokemon/variant/117.json +++ b/public/images/pokemon/variant/117.json @@ -4,12 +4,10 @@ "21425a": "122647", "a5cee6": "45b38f", "84adce": "2e8b7b", - "101010": "101010", "4a6b84": "143c4f", "7b6321": "3f8a49", "dec552": "87c563", "ffffad": "b5e37f", - "ffffff": "ffffff", "9c9c9c": "243b61" }, "2": { @@ -17,12 +15,10 @@ "21425a": "702525", "a5cee6": "ffd166", "84adce": "ffab66", - "101010": "101010", "4a6b84": "c74c4c", "7b6321": "4e878a", "dec552": "7bc9bb", "ffffad": "b3f2d8", - "ffffff": "ffffff", "9c9c9c": "ff9a47" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/118.json b/public/images/pokemon/variant/118.json index 19f98fd8911..3c64ebd5879 100644 --- a/public/images/pokemon/variant/118.json +++ b/public/images/pokemon/variant/118.json @@ -2,9 +2,7 @@ "0": { "52525a": "734733", "ffffff": "fff7ee", - "101010": "101010", "8c8c94": "966f58", - "ceb57b": "ceb57b", "efefef": "e7d7c9", "d6d6de": "cbb7aa", "ffc57b": "ffda73", @@ -19,7 +17,6 @@ "1": { "52525a": "492d5c", "ffffff": "e7d1ea", - "101010": "101010", "8c8c94": "6c5277", "ceb57b": "7e3eb1", "efefef": "b9a0bf", @@ -36,7 +33,6 @@ "2": { "52525a": "2b4a54", "ffffff": "d5e6e4", - "101010": "101010", "8c8c94": "526d71", "ceb57b": "45895b", "efefef": "aecac8", diff --git a/public/images/pokemon/variant/119.json b/public/images/pokemon/variant/119.json index 9c211993e1f..5201cd2ce9c 100644 --- a/public/images/pokemon/variant/119.json +++ b/public/images/pokemon/variant/119.json @@ -6,7 +6,6 @@ "5a5a63": "734733", "52525a": "522b23", "cec5c5": "e1caba", - "101010": "101010", "943119": "8c5003", "e67342": "f5c767", "f79463": "ffe499", @@ -23,7 +22,6 @@ "5a5a63": "6c5277", "52525a": "39195d", "cec5c5": "ac90b2", - "101010": "101010", "943119": "582488", "e67342": "9e5fcb", "f79463": "ba82d9", @@ -40,7 +38,6 @@ "5a5a63": "526d71", "52525a": "2b4a54", "cec5c5": "9ab8b8", - "101010": "101010", "943119": "0e3c1e", "e67342": "5fad67", "f79463": "92c494", diff --git a/public/images/pokemon/variant/120.json b/public/images/pokemon/variant/120.json index f9970a1f814..1de1061e5e1 100644 --- a/public/images/pokemon/variant/120.json +++ b/public/images/pokemon/variant/120.json @@ -2,7 +2,6 @@ "1": { "633131": "07293b", "9c6b3a": "1b7272", - "000000": "000000", "deb563": "4bd09b", "7b523a": "0f4c58", "d69c52": "2d9683", @@ -19,7 +18,6 @@ "2": { "633131": "1d5198", "9c6b3a": "3eb7e5", - "000000": "000000", "deb563": "9cffff", "7b523a": "2c81bc", "d69c52": "74e7f7", diff --git a/public/images/pokemon/variant/121.json b/public/images/pokemon/variant/121.json index 82840e49783..8e59d32fc21 100644 --- a/public/images/pokemon/variant/121.json +++ b/public/images/pokemon/variant/121.json @@ -2,7 +2,6 @@ "1": { "5a529c": "8b4a52", "8c73bd": "de6262", - "000000": "000000", "313a73": "631c26", "d6adef": "ffc5b4", "b58cd6": "ee9494", @@ -19,7 +18,6 @@ "2": { "5a529c": "9eb4ff", "8c73bd": "c5d5ff", - "000000": "000000", "313a73": "597cdb", "d6adef": "ffffff", "b58cd6": "d6e8ff", diff --git a/public/images/pokemon/variant/123.json b/public/images/pokemon/variant/123.json index 53f7ef977f7..c3f41aa1ede 100644 --- a/public/images/pokemon/variant/123.json +++ b/public/images/pokemon/variant/123.json @@ -2,43 +2,23 @@ "0": { "425a21": "632929", "bde673": "f76b6b", - "101010": "101010", "9c8c31": "9494a5", "fff7d6": "ffffff", "8cce73": "d63a3a", "e6d6ad": "b5b5ce", - "5a9c4a": "a52929", - "ffffff": "ffffff", - "dedede": "dedede", - "bdbdbd": "bdbdbd", - "737373": "737373" + "5a9c4a": "a52929" }, "1": { "425a21": "484e75", "bde673": "7c9ac5", - "101010": "101010", - "9c8c31": "9c8c31", - "fff7d6": "fff7d6", "8cce73": "92b0db", - "e6d6ad": "e6d6ad", - "5a9c4a": "7b94d6", - "ffffff": "ffffff", - "dedede": "dedede", - "bdbdbd": "bdbdbd", - "737373": "737373" + "5a9c4a": "7b94d6" }, "2": { "425a21": "8f3907", "bde673": "f8f581", - "101010": "101010", - "9c8c31": "9c8c31", - "fff7d6": "fff7d6", "8cce73": "f0c947", - "e6d6ad": "e6d6ad", "5a9c4a": "e6a027", - "ffffff": "ffffff", - "dedede": "f0c947", - "bdbdbd": "bdbdbd", - "737373": "737373" + "dedede": "f0c947" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/125.json b/public/images/pokemon/variant/125.json index 4b265d02a60..4948e455c46 100644 --- a/public/images/pokemon/variant/125.json +++ b/public/images/pokemon/variant/125.json @@ -3,13 +3,11 @@ "c5a510": "b34d2b", "5a4a08": "752c0b", "ffe63a": "ff8b3a", - "101010": "101010", "fff7b5": "ffd4b5", "e6c521": "e66a21", "292921": "211d29", "3a4252": "3f3a52", "6b6b63": "57526e", - "ffffff": "ffffff", "c5c5d6": "c5ccd6", "b53a6b": "b53a59", "e66394": "e66380" @@ -18,13 +16,11 @@ "c5a510": "2dbd73", "5a4a08": "235c3c", "ffe63a": "59f7d0", - "101010": "101010", "fff7b5": "c8ffea", "e6c521": "43e6b7", "292921": "282a24", "3a4252": "424554", "6b6b63": "6a6982", - "ffffff": "ffffff", "c5c5d6": "cfd2dc", "b53a6b": "b85195", "e66394": "ed89c2" diff --git a/public/images/pokemon/variant/126.json b/public/images/pokemon/variant/126.json index 8c90e069d6d..a0bbca87284 100644 --- a/public/images/pokemon/variant/126.json +++ b/public/images/pokemon/variant/126.json @@ -1,16 +1,12 @@ { "2": { "7b5231": "699296", - "000000": "000000", "ffef4a": "eaffff", "c57b10": "9ec9cf", "e6bd31": "c6edf2", "6b2121": "303d58", "ce1042": "4065b0", "ff4a31": "5398cf", - "636363": "636363", - "ffffff": "ffffff", - "c5c5c5": "c5c5c5", "ff8c63": "b2a0b1", "ffcebd": "cabac8", "fff7ce": "ffffff" diff --git a/public/images/pokemon/variant/127-mega.json b/public/images/pokemon/variant/127-mega.json index a5d06441236..eea226c236f 100644 --- a/public/images/pokemon/variant/127-mega.json +++ b/public/images/pokemon/variant/127-mega.json @@ -3,32 +3,24 @@ "837362": "7e5649", "c0b5ab": "b1846f", "fdf7e6": "eccb90", - "101010": "101010", "4a4139": "441a0f", "e1d7cc": "d29f88", - "f0831d": "f0831d", "836a52": "3b554d", "5a4131": "172a22", "c5ac8b": "72988e", "a48b6a": "54796f", - "e6d5b4": "92bab1", - "ffde62": "ffde62", - "f8f8f8": "f8f8f8" + "e6d5b4": "92bab1" }, "2": { "837362": "868686", "c0b5ab": "b7b7b7", "fdf7e6": "ffffff", - "101010": "101010", "4a4139": "484848", "e1d7cc": "d5d5d5", - "f0831d": "f0831d", "836a52": "8c2c40", "5a4131": "5c0026", "c5ac8b": "d56a70", "a48b6a": "b44954", - "e6d5b4": "fa958c", - "ffde62": "ffde62", - "f8f8f8": "f8f8f8" + "e6d5b4": "fa958c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/127.json b/public/images/pokemon/variant/127.json index d0c615686f6..dd09ba44692 100644 --- a/public/images/pokemon/variant/127.json +++ b/public/images/pokemon/variant/127.json @@ -4,27 +4,23 @@ "b5a594": "b1846f", "efe6ce": "eccb90", "4a423a": "441a0f", - "000000": "000000", "d6c5b5": "d29f88", "846b52": "3b554d", "5a4231": "172a22", "c5ad8c": "72988e", "e6d6b5": "92bab1", - "a58c6b": "54796f", - "ffffff": "ffffff" + "a58c6b": "54796f" }, "2": { "847363": "868686", "b5a594": "b7b7b7", "efe6ce": "ffffff", "4a423a": "484848", - "000000": "000000", "d6c5b5": "d5d5d5", "846b52": "8c2c40", "5a4231": "5c0026", "c5ad8c": "d56a70", "e6d6b5": "fa958c", - "a58c6b": "b44954", - "ffffff": "ffffff" + "a58c6b": "b44954" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/129.json b/public/images/pokemon/variant/129.json index ad9817f4aa7..8274a684944 100644 --- a/public/images/pokemon/variant/129.json +++ b/public/images/pokemon/variant/129.json @@ -7,7 +7,6 @@ "f76319": "ac9bbc", "840042": "312b45", "c5ad73": "d0784b", - "000000": "000000", "525263": "896e5d", "bd4242": "6f6380", "ffffff": "fffcf3", @@ -24,13 +23,11 @@ "f76319": "f25090", "840042": "6c0261", "c5ad73": "bcaf98", - "000000": "000000", "525263": "74619a", "bd4242": "cd2b78", "ffffff": "f9efff", "8c8ca5": "af97ce", "ceced6": "d1bae7", - "ff9c63": "ff9dbb", - "ffe6c5": "ffe6c5" + "ff9c63": "ff9dbb" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/130-mega.json b/public/images/pokemon/variant/130-mega.json index e551e93baec..82fd8fd6b87 100644 --- a/public/images/pokemon/variant/130-mega.json +++ b/public/images/pokemon/variant/130-mega.json @@ -3,16 +3,13 @@ "132d5b": "611d07", "2192e4": "eea747", "1b68a7": "c67429", - "101010": "101010", "cdb47b": "bd9b8e", "144f7e": "923d13", - "5a4120": "5a4120", "3c3f47": "c32625", "67686b": "dd493b", "980e31": "8691d5", "e43343": "c9d4ff", "f6e6ac": "fff3ec", - "f8f8f8": "f8f8f8", "383b42": "682a23", "d5def6": "f37754" }, @@ -20,7 +17,6 @@ "132d5b": "200d46", "2192e4": "7b43a1", "1b68a7": "582c81", - "101010": "101010", "cdb47b": "d7aec0", "144f7e": "411f70", "5a4120": "855a71", @@ -29,7 +25,6 @@ "980e31": "a62869", "e43343": "e15693", "f6e6ac": "ffedf4", - "f8f8f8": "f8f8f8", "383b42": "202b47", "d5def6": "ffdb85" } diff --git a/public/images/pokemon/variant/130.json b/public/images/pokemon/variant/130.json index fd6a18134d0..6ec3446c6a6 100644 --- a/public/images/pokemon/variant/130.json +++ b/public/images/pokemon/variant/130.json @@ -6,12 +6,10 @@ "d6def7": "d2bdb4", "196394": "a85104", "194273": "873503", - "191919": "191919", "7bd6ef": "fed076", "42b5ef": "f2aa45", "f7e6ad": "fff3ec", "ceb57b": "bd9b8e", - "5a4221": "5a4221", "bd3163": "6274e1", "6b1921": "3b42b5", "ef6342": "95abff" @@ -23,7 +21,6 @@ "d6def7": "f3c3de", "196394": "431a77", "194273": "1f0a47", - "191919": "191919", "7bd6ef": "9e5cc8", "42b5ef": "7f43b3", "f7e6ad": "e8b4d4", diff --git a/public/images/pokemon/variant/131-gigantamax.json b/public/images/pokemon/variant/131-gigantamax.json index 3cb6eb5dc1b..323c758a5e6 100644 --- a/public/images/pokemon/variant/131-gigantamax.json +++ b/public/images/pokemon/variant/131-gigantamax.json @@ -1,12 +1,10 @@ { "1": { - "101010": "101010", "41a4e6": "85cfef", "184152": "133363", "73c5f6": "ffc0e7", "397ba4": "3595c4", "51fffb": "ff8de5", - "fffad6": "fffad6", "8ba494": "a7b2ab", "dec583": "dac99e", "52526a": "3c1838", @@ -17,18 +15,14 @@ "f6deac": "f1e9d9" }, "2": { - "101010": "101010", "41a4e6": "49b18c", - "184152": "184152", "73c5f6": "8bd3b6", "397ba4": "3a8770", "51fffb": "0085b2", - "fffad6": "fffad6", "8ba494": "8ca594", "dec583": "baafaa", "52526a": "282548", "a49494": "666b8b", - "fefefe": "fefefe", "d5cdc5": "969dbc", "807573": "454565", "f6deac": "e8e3e0" diff --git a/public/images/pokemon/variant/131.json b/public/images/pokemon/variant/131.json index 603bff575b2..7fed0f8336b 100644 --- a/public/images/pokemon/variant/131.json +++ b/public/images/pokemon/variant/131.json @@ -1,7 +1,6 @@ { "1": { "194252": "133363", - "000000": "000000", "42a5e6": "85cfef", "3a7ba5": "4b9bc3", "73c5f7": "c4f6ff", @@ -17,15 +16,11 @@ }, "2": { "194252": "06383e", - "000000": "000000", "42a5e6": "49b18c", "3a7ba5": "3a8770", "73c5f7": "8bd3b6", - "f7efe6": "f7efe6", "6b5219": "18418d", "dec584": "baafaa", - "8ca594": "8ca594", - "5a4a42": "5a4a42", "52526b": "383851", "d6cec5": "969dbc", "a59494": "666b8b", diff --git a/public/images/pokemon/variant/132.json b/public/images/pokemon/variant/132.json index bb2e7bf9ef2..06d421c2fc5 100644 --- a/public/images/pokemon/variant/132.json +++ b/public/images/pokemon/variant/132.json @@ -1,7 +1,6 @@ { "1": { "5a1994": "2a6d20", - "000000": "000000", "9c5ab5": "5aa03d", "ffceff": "ffffc2", "c57be6": "9dce55", @@ -10,7 +9,6 @@ }, "2": { "5a1994": "0e0c1c", - "000000": "000000", "9c5ab5": "131432", "ffceff": "83bdff", "c57be6": "2b3154", diff --git a/public/images/pokemon/variant/133-partner.json b/public/images/pokemon/variant/133-partner.json index 1939d16ec22..a69dce56708 100644 --- a/public/images/pokemon/variant/133-partner.json +++ b/public/images/pokemon/variant/133-partner.json @@ -3,22 +3,18 @@ "a5634a": "5982b7", "734a4a": "334b7d", "d69c4a": "90c1f1", - "000000": "000000", "523121": "13235c", "e6c594": "9db5d8", "bd9c7b": "5f6f94", - "ffffff": "ffffff", "ffe6ad": "d7ebff" }, "2": { "a5634a": "915ea3", "734a4a": "5e3372", "d69c4a": "bf88cb", - "000000": "000000", "523121": "461144", "e6c594": "d7b8ba", "bd9c7b": "a07c83", - "ffffff": "ffffff", "ffe6ad": "f3e6e3" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/133.json b/public/images/pokemon/variant/133.json index 1939d16ec22..a69dce56708 100644 --- a/public/images/pokemon/variant/133.json +++ b/public/images/pokemon/variant/133.json @@ -3,22 +3,18 @@ "a5634a": "5982b7", "734a4a": "334b7d", "d69c4a": "90c1f1", - "000000": "000000", "523121": "13235c", "e6c594": "9db5d8", "bd9c7b": "5f6f94", - "ffffff": "ffffff", "ffe6ad": "d7ebff" }, "2": { "a5634a": "915ea3", "734a4a": "5e3372", "d69c4a": "bf88cb", - "000000": "000000", "523121": "461144", "e6c594": "d7b8ba", "bd9c7b": "a07c83", - "ffffff": "ffffff", "ffe6ad": "f3e6e3" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/134.json b/public/images/pokemon/variant/134.json index f801da9a8e0..c3e06b60196 100644 --- a/public/images/pokemon/variant/134.json +++ b/public/images/pokemon/variant/134.json @@ -4,7 +4,6 @@ "107394": "7054e7", "bdad5a": "a26b30", "6b6321": "663a18", - "101010": "101010", "8c8c8c": "754949", "ffffff": "ffe6db", "ffe6a5": "f4cb60", @@ -12,16 +11,13 @@ "84deff": "c497e5", "5ac5e6": "a271e1", "429cbd": "764abf", - "521073": "18359b", - "7b0829": "7b0829", - "d65273": "d65273" + "521073": "18359b" }, "2": { "104a63": "5e1120", "107394": "b75846", "bdad5a": "7d2f67", "6b6321": "4a1642", - "101010": "101010", "8c8c8c": "655081", "ffffff": "fee1fa", "ffe6a5": "a65687", @@ -29,8 +25,6 @@ "84deff": "e1c66e", "5ac5e6": "d29d48", "429cbd": "a66829", - "521073": "13517b", - "7b0829": "7b0829", - "d65273": "d65273" + "521073": "13517b" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/135.json b/public/images/pokemon/variant/135.json index 9203e23b72e..81198118b43 100644 --- a/public/images/pokemon/variant/135.json +++ b/public/images/pokemon/variant/135.json @@ -1,6 +1,5 @@ { "0": { - "000000": "000000", "5a4a10": "7b3e14", "cead4a": "e4a254", "ad8c3a": "975720", @@ -13,7 +12,6 @@ "c5c5c5": "aacbc7" }, "1": { - "000000": "000000", "5a4a10": "202448", "cead4a": "5e5a84", "ad8c3a": "35346d", @@ -26,7 +24,6 @@ "c5c5c5": "8e99b5" }, "2": { - "000000": "000000", "5a4a10": "2c3182", "cead4a": "47b4e9", "ad8c3a": "4351d7", diff --git a/public/images/pokemon/variant/136.json b/public/images/pokemon/variant/136.json index d3ce6e156f5..b3dd572687c 100644 --- a/public/images/pokemon/variant/136.json +++ b/public/images/pokemon/variant/136.json @@ -3,39 +3,33 @@ "732119": "64391a", "c5a56b": "ac9276", "d64252": "b1772e", - "000000": "000000", "735a42": "5e4828", "ffefa5": "f5f4e2", "f7734a": "e6af4a", "debd8c": "e5d9c3", "21216b": "0e4481", - "ffffff": "ffffff", "a54252": "8c5219" }, "1": { "732119": "1b5255", "c5a56b": "b1a58c", "d64252": "3aad8b", - "000000": "000000", "735a42": "766a5b", "ffefa5": "f5f3df", "f7734a": "5dde9d", "debd8c": "d9c9ac", "21216b": "541433", - "ffffff": "ffffff", "a54252": "2c736b" }, "2": { "732119": "4c0013", "c5a56b": "564c51", "d64252": "8c2426", - "000000": "000000", "735a42": "2d252a", "ffefa5": "a89da0", "f7734a": "b54144", "debd8c": "82787c", "21216b": "4d1b00", - "ffffff": "ffffff", "a54252": "771823" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/137.json b/public/images/pokemon/variant/137.json index 81f82938bcc..497c86c2979 100644 --- a/public/images/pokemon/variant/137.json +++ b/public/images/pokemon/variant/137.json @@ -7,7 +7,6 @@ "efad9c": "f8a8cd", "085a73": "4d030f", "5abde6": "e9635a", - "000000": "000000", "ff6363": "e9778e", "0884a5": "841023", "08add6": "ba333b", @@ -22,7 +21,6 @@ "efad9c": "82391d", "085a73": "a1562c", "5abde6": "ffd9ab", - "000000": "000000", "ff6363": "491c0c", "0884a5": "cf8556", "08add6": "efb787", diff --git a/public/images/pokemon/variant/138.json b/public/images/pokemon/variant/138.json index 1801e9e8a0a..1f9e9a02000 100644 --- a/public/images/pokemon/variant/138.json +++ b/public/images/pokemon/variant/138.json @@ -5,7 +5,6 @@ "635231": "821e16", "e6de84": "e67443", "c5ad73": "d04e2a", - "000000": "000000", "3a4284": "2c0c19", "426bad": "48172f", "ffffff": "f3fdff", @@ -21,7 +20,6 @@ "635231": "0c0f28", "e6de84": "404c5f", "c5ad73": "2a344b", - "000000": "000000", "3a4284": "0c5540", "426bad": "1a7e5c", "ffffff": "ffa788", diff --git a/public/images/pokemon/variant/139.json b/public/images/pokemon/variant/139.json index 76a3db354f5..40fe7fd0b33 100644 --- a/public/images/pokemon/variant/139.json +++ b/public/images/pokemon/variant/139.json @@ -4,14 +4,12 @@ "e6de84": "db764a", "635242": "5f1e19", "c5ad73": "c04e2f", - "000000": "000000", "ffefc5": "fdad7d", "426bad": "39121f", "63bdf7": "885374", "3a9cce": "602a48", "3a4284": "2c0c19", "424242": "3c1313", - "fff79c": "ffca9c", - "ffffff": "ffffff" + "fff79c": "ffca9c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/140.json b/public/images/pokemon/variant/140.json index 0739e7baea2..5c7a5e96729 100644 --- a/public/images/pokemon/variant/140.json +++ b/public/images/pokemon/variant/140.json @@ -2,8 +2,6 @@ "1": { "7b5229": "600006", "4a2900": "52060e", - "ffffff": "ffffff", - "000000": "000000", "c58429": "9f1105", "a56b29": "870100", "ff8cad": "ff5bda", @@ -15,8 +13,6 @@ "2": { "7b5229": "2821ab", "4a2900": "271381", - "ffffff": "ffffff", - "000000": "000000", "c58429": "4b64e6", "a56b29": "3440cb", "ff8cad": "ffed85", diff --git a/public/images/pokemon/variant/142-mega.json b/public/images/pokemon/variant/142-mega.json index 7306fb27ac5..49fd230e379 100644 --- a/public/images/pokemon/variant/142-mega.json +++ b/public/images/pokemon/variant/142-mega.json @@ -6,12 +6,10 @@ "957fa0": "945f65", "a79ed4": "b58788", "57406d": "582e34", - "010101": "010101", "79559f": "c54522", "9767d2": "df6d3c", "c5bfe3": "e4b7b2", "317329": "2150d9", - "fafafa": "fafafa", "832041": "a31048", "ae87e2": "ee9152", "d95b6b": "ee526f" @@ -23,12 +21,10 @@ "957fa0": "a8bdcc", "a79ed4": "cae0ec", "57406d": "596876", - "010101": "010101", "79559f": "1e5e54", "9767d2": "348f78", "c5bfe3": "d7ecf4", "317329": "c00c39", - "fafafa": "fafafa", "832041": "941c2d", "ae87e2": "5ebf9c", "d95b6b": "e76e67" diff --git a/public/images/pokemon/variant/142.json b/public/images/pokemon/variant/142.json index 0a31b67ad8b..e7cd2d299aa 100644 --- a/public/images/pokemon/variant/142.json +++ b/public/images/pokemon/variant/142.json @@ -1,14 +1,11 @@ { "1": { "9484a5": "6c3c43", - "000000": "000000", "adadd6": "945f65", "cecee6": "b58788", "524273": "411921", "31196b": "671707", "317329": "2150d9", - "cecece": "cecece", - "ffffff": "ffffff", "735294": "c54522", "ce3a4a": "d92f62", "842142": "a31048", @@ -18,14 +15,11 @@ }, "2": { "9484a5": "7c8e9f", - "000000": "000000", "adadd6": "a8bdcc", "cecee6": "cae0ec", "524273": "374659", "31196b": "0b3433", "317329": "c00c39", - "cecece": "cecece", - "ffffff": "ffffff", "735294": "1e5e54", "ce3a4a": "d03e3f", "842142": "941c2d", diff --git a/public/images/pokemon/variant/144.json b/public/images/pokemon/variant/144.json index 3117db9f49d..956a8386699 100644 --- a/public/images/pokemon/variant/144.json +++ b/public/images/pokemon/variant/144.json @@ -3,17 +3,13 @@ "005273": "642c89", "94c5ff": "f1dfff", "4a84d6": "7b42ab", - "000000": "000000", "6badf7": "d7adff", "003152": "461660", "007bbd": "a142c8", "5a3a19": "221531", "b59473": "736581", "8c6b52": "372841", - "ffffff": "ffffff", "bd293a": "2d6cb0", - "cee6ff": "fef5ff", - "525252": "525252", - "cecece": "cecece" + "cee6ff": "fef5ff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/145.json b/public/images/pokemon/variant/145.json index 3104d408a9f..8a0354f6ed7 100644 --- a/public/images/pokemon/variant/145.json +++ b/public/images/pokemon/variant/145.json @@ -5,11 +5,8 @@ "101010": "000000", "d6ad08": "cc4e17", "9c7b10": "991500", - "ffffff": "ffffff", - "dedede": "dedede", "f79419": "6c4645", "c56b19": "442526", - "6b6b6b": "6b6b6b", "7b6b19": "2f1517", "9c8c31": "290f13" }, @@ -19,11 +16,8 @@ "101010": "000000", "d6ad08": "e3b68e", "9c7b10": "ac7c5b", - "ffffff": "ffffff", - "dedede": "dedede", "f79419": "ff9a33", "c56b19": "dd6b10", - "6b6b6b": "6b6b6b", "7b6b19": "885024", "9c8c31": "6e4216" }, @@ -33,11 +27,8 @@ "101010": "000000", "d6ad08": "a32a71", "9c7b10": "94007e", - "ffffff": "ffffff", - "dedede": "dedede", "f79419": "ffdeff", "c56b19": "c992cb", - "6b6b6b": "6b6b6b", "7b6b19": "970083", "9c8c31": "ce24a8" } diff --git a/public/images/pokemon/variant/146.json b/public/images/pokemon/variant/146.json index 8f9a5337298..fa210ac4bac 100644 --- a/public/images/pokemon/variant/146.json +++ b/public/images/pokemon/variant/146.json @@ -6,15 +6,11 @@ "ffa54a": "e01291", "734210": "220f23", "de9410": "431d43", - "000000": "000000", "ffc54a": "512d4e", "ffef63": "755c73", "523a29": "460241", "8c634a": "8c0c75", - "cecece": "cecece", - "ffffff": "ffffff", - "b58c63": "dd2559", - "636363": "636363" + "b58c63": "dd2559" }, "1": { "d60808": "00877f", @@ -23,15 +19,11 @@ "ffa54a": "90e932", "734210": "706127", "de9410": "c2b562", - "000000": "000000", "ffc54a": "f1eca3", "ffef63": "feffe1", "523a29": "840000", "8c634a": "ad1910", - "cecece": "cecece", - "ffffff": "ffffff", - "b58c63": "de423a", - "636363": "636363" + "b58c63": "de423a" }, "2": { "d60808": "053889", @@ -40,14 +32,10 @@ "ffa54a": "26b1e1", "734210": "0c4f6b", "de9410": "58abdb", - "000000": "000000", "ffc54a": "9dd5ff", "ffef63": "dae9ff", "523a29": "3e0b03", "8c634a": "78230b", - "cecece": "cecece", - "ffffff": "ffffff", - "b58c63": "b05329", - "636363": "636363" + "b58c63": "b05329" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/147.json b/public/images/pokemon/variant/147.json index acc6eb7909e..83715497ae9 100644 --- a/public/images/pokemon/variant/147.json +++ b/public/images/pokemon/variant/147.json @@ -3,7 +3,6 @@ "9c948c": "79a2a3", "ffffff": "def1ef", "5a5a5a": "54787d", - "000000": "000000", "ded6de": "a2c7c7", "5a63bd": "b24729", "293184": "a82d17", @@ -15,7 +14,6 @@ "9c948c": "c2a7a3", "ffffff": "fff5f0", "5a5a5a": "8c7270", - "000000": "000000", "ded6de": "dfc8c2", "5a63bd": "1b5f6f", "293184": "134557", diff --git a/public/images/pokemon/variant/148.json b/public/images/pokemon/variant/148.json index b05769f1f8f..abb514c0adf 100644 --- a/public/images/pokemon/variant/148.json +++ b/public/images/pokemon/variant/148.json @@ -1,6 +1,5 @@ { "1": { - "000000": "000000", "a59ca5": "79a2a3", "ffffff": "def1ef", "5a525a": "54787d", @@ -16,7 +15,6 @@ "425aff": "359bbd" }, "2": { - "000000": "000000", "a59ca5": "c29490", "ffffff": "ffedde", "5a525a": "895e5c", diff --git a/public/images/pokemon/variant/149.json b/public/images/pokemon/variant/149.json index aade1494b1f..e7c2222f75f 100644 --- a/public/images/pokemon/variant/149.json +++ b/public/images/pokemon/variant/149.json @@ -3,34 +3,26 @@ "5a3a21": "102908", "ffefbd": "def1ef", "ef9c3a": "e9917b", - "000000": "000000", "de733a": "d15b67", "efbd8c": "a2c7c7", "9c5a4a": "5a394e", "f7bd5a": "f8b58f", - "cecece": "cecece", - "ffffff": "ffffff", "196b63": "359bbd", "21a57b": "61cce2", "104231": "1b6794", - "ad8c42": "79a2a3", - "636363": "636363" + "ad8c42": "79a2a3" }, "2": { "5a3a21": "102908", "ffefbd": "f8dfce", "ef9c3a": "55a39f", - "000000": "000000", "de733a": "2d636d", "efbd8c": "c0a59d", "9c5a4a": "895e5c", "f7bd5a": "8ed9c4", - "cecece": "cecece", - "ffffff": "ffffff", "196b63": "a44a91", "21a57b": "f86ebf", "104231": "9c4a94", - "ad8c42": "ad7e7a", - "636363": "636363" + "ad8c42": "ad7e7a" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/150-mega-x.json b/public/images/pokemon/variant/150-mega-x.json index b25e997cab9..9d645e5895d 100644 --- a/public/images/pokemon/variant/150-mega-x.json +++ b/public/images/pokemon/variant/150-mega-x.json @@ -5,11 +5,9 @@ "b4acc5": "db8aaf", "ded5e6": "ffb5d6", "eee6ee": "ffd6ef", - "101010": "101010", "6a319c": "196b5b", "9441bd": "4bac9a", "2b68b3": "4bac9a", - "fdfdfd": "fdfdfd", "b44aee": "c4fff4", "57acdf": "89cabe", "392052": "105144" @@ -20,11 +18,9 @@ "b4acc5": "edaf5b", "ded5e6": "ffdd98", "eee6ee": "ffeeb6", - "101010": "101010", "6a319c": "6b2619", "9441bd": "ac4f4b", "2b68b3": "da2e29", - "fdfdfd": "fdfdfd", "b44aee": "ffffff", "57acdf": "ea5f5b", "392052": "531b10" diff --git a/public/images/pokemon/variant/150-mega-y.json b/public/images/pokemon/variant/150-mega-y.json index 0a13977e42d..cc0aa0c43e8 100644 --- a/public/images/pokemon/variant/150-mega-y.json +++ b/public/images/pokemon/variant/150-mega-y.json @@ -7,9 +7,7 @@ "393952": "5a2952", "6a319c": "196b5b", "9441bd": "4bac9a", - "fdfdfd": "fdfdfd", "c83535": "4bac9a", - "101010": "101010", "ea5f5b": "89cabe", "392052": "12493f", "b44aee": "c4fff4" @@ -22,10 +20,7 @@ "393952": "884c17", "6a319c": "6b2619", "9441bd": "ac4f4b", - "fdfdfd": "fdfdfd", "c83535": "da2e29", - "101010": "101010", - "ea5f5b": "ea5f5b", "392052": "491b12", "b44aee": "ffffff" } diff --git a/public/images/pokemon/variant/150.json b/public/images/pokemon/variant/150.json index 7f64d98f731..69e437fe113 100644 --- a/public/images/pokemon/variant/150.json +++ b/public/images/pokemon/variant/150.json @@ -6,10 +6,8 @@ "3a3a52": "5a2952", "6b319c": "196b5b", "9442bd": "4bac9a", - "000000": "000000", "efe6ef": "ffd6ef", "3a2152": "12493f", - "ffffff": "ffffff", "b54aef": "c4fff4" }, "2": { @@ -19,10 +17,8 @@ "3a3a52": "884c17", "6b319c": "6b2619", "9442bd": "ac4f4b", - "000000": "000000", "efe6ef": "ffeeb6", "3a2152": "491b12", - "ffffff": "ffffff", "b54aef": "ffffff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/151.json b/public/images/pokemon/variant/151.json index 5506cdbc7c9..aed8f4c467f 100644 --- a/public/images/pokemon/variant/151.json +++ b/public/images/pokemon/variant/151.json @@ -3,11 +3,8 @@ "b56394": "895ac3", "5a2952": "5c2da1", "ffb5d6": "d3b8e8", - "000000": "000000", "ef84b5": "ab87cf", "ffd6ef": "eed7fa", - "cecece": "cecece", - "ffffff": "ffffff", "193a6b": "ca241d", "2963e6": "e85040", "84adf7": "ff9180" @@ -16,11 +13,8 @@ "b56394": "d68f40", "5a2952": "884c17", "ffb5d6": "ffdd98", - "000000": "000000", "ef84b5": "edaf5b", "ffd6ef": "ffeeb6", - "cecece": "cecece", - "ffffff": "ffffff", "193a6b": "067576", "2963e6": "11948c", "84adf7": "74f5e3" diff --git a/public/images/pokemon/variant/161.json b/public/images/pokemon/variant/161.json index 3c8b46ed63f..b8e51656235 100644 --- a/public/images/pokemon/variant/161.json +++ b/public/images/pokemon/variant/161.json @@ -3,15 +3,12 @@ "4a3121": "252054", "634231": "46387d", "3a0800": "15143c", - "101010": "101010", "b52142": "921a4b", "de424a": "a44362", "8c5a42": "744e9b", "cea584": "eec1ff", "bd845a": "cc95eb", "a5734a": "a374c7", - "ffffff": "ffffff", - "3a1910": "161443", - "cecec5": "cecec5" + "3a1910": "161443" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/162.json b/public/images/pokemon/variant/162.json index 635da722c22..24794d4cb47 100644 --- a/public/images/pokemon/variant/162.json +++ b/public/images/pokemon/variant/162.json @@ -3,28 +3,23 @@ "522921": "151c34", "e6c54a": "988fc7", "7b423a": "2d2766", - "212129": "212129", "9c634a": "46387d", "c59c42": "7266a2", "ffef94": "b7abde", "ad8429": "716aa8", "ffffc5": "d3c8ec", - "ffffff": "ffffff", "737373": "3a8591", - "9c0000": "9c1f00", - "ff9463": "ff9463" + "9c0000": "9c1f00" }, "2": { "522921": "222f3c", "e6c54a": "b4d1dc", "7b423a": "56697a", - "212129": "212129", "9c634a": "7a8e9b", "c59c42": "8aaabb", "ffef94": "daeff5", "ad8429": "67748a", "ffffc5": "f9feff", - "ffffff": "ffffff", "737373": "cc3b46", "9c0000": "00379c", "ff9463": "1e78c6" diff --git a/public/images/pokemon/variant/163.json b/public/images/pokemon/variant/163.json index dc7b7424543..9ac5eef1aad 100644 --- a/public/images/pokemon/variant/163.json +++ b/public/images/pokemon/variant/163.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "424242": "462f68", "734a19": "4d438b", "523100": "25245c", @@ -12,12 +11,9 @@ "bd5a29": "663e5f", "efad94": "87627e", "ffe6c5": "cdd9ee", - "debd9c": "a3b0d2", - "ffffff": "ffffff", - "7b7b7b": "7b7b7b" + "debd9c": "a3b0d2" }, "2": { - "101010": "101010", "424242": "232d44", "734a19": "435170", "523100": "1f2a4e", @@ -29,8 +25,6 @@ "bd5a29": "36282b", "efad94": "4f4143", "ffe6c5": "e3e9eb", - "debd9c": "ccd4d9", - "ffffff": "ffffff", - "7b7b7b": "7b7b7b" + "debd9c": "ccd4d9" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/169.json b/public/images/pokemon/variant/169.json index 751102ef4a0..2d32d0c0610 100644 --- a/public/images/pokemon/variant/169.json +++ b/public/images/pokemon/variant/169.json @@ -3,30 +3,21 @@ "7b4a9c": "2f2a5f", "63197b": "14093b", "a55ace": "3d4381", - "101010": "101010", "b57bce": "666fb4", "08426b": "b06130", "ce0021": "1200b5", "ffd600": "20e0ff", "d69400": "099ac3", - "216b94": "ffb049", - "ffffff": "ffffff", - "a5a5a5": "a5a5a5", - "6b6b6b": "6b6b6b" + "216b94": "ffb049" }, "2": { "7b4a9c": "80607b", "63197b": "3c1e39", "a55ace": "b49db2", - "101010": "101010", "b57bce": "c8b6c2", "08426b": "901606", - "ce0021": "ce0021", "ffd600": "ffa028", "d69400": "ff7b00", - "216b94": "b52c0c", - "ffffff": "ffffff", - "a5a5a5": "a5a5a5", - "6b6b6b": "6b6b6b" + "216b94": "b52c0c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/173.json b/public/images/pokemon/variant/173.json index 8f6346693a1..b0a2e6b6422 100644 --- a/public/images/pokemon/variant/173.json +++ b/public/images/pokemon/variant/173.json @@ -4,12 +4,10 @@ "632119": "3d2e66", "ffc5ad": "c19fe3", "ffa594": "9579c9", - "101010": "101010", "523100": "44004a", "de7b6b": "7c52ba", "6b4a31": "494299", "c58c29": "5ca3bf", - "a56b00": "647cb3", - "ffffff": "ffffff" + "a56b00": "647cb3" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/175.json b/public/images/pokemon/variant/175.json index 0d99c606a43..c56b1593eda 100644 --- a/public/images/pokemon/variant/175.json +++ b/public/images/pokemon/variant/175.json @@ -1,13 +1,11 @@ { "0": { "94735a": "844466", - "000000": "000000", "f7efc5": "f7c9c5", "ce9c73": "a7738f", "734a4a": "5b2847", "f7d6a5": "e4b2bb", "b5b5c5": "c5b5b5", - "ffffff": "ffffff", "ad2121": "811a5f", "d6dede": "ded6d6", "c54242": "409e80", @@ -18,7 +16,6 @@ }, "1": { "94735a": "734350", - "000000": "000000", "f7efc5": "f7c5ce", "ce9c73": "a26867", "734a4a": "452030", @@ -35,7 +32,6 @@ }, "2": { "94735a": "404d5b", - "000000": "000000", "f7efc5": "ddeaef", "ce9c73": "8093a5", "734a4a": "1f293b", diff --git a/public/images/pokemon/variant/176.json b/public/images/pokemon/variant/176.json index 612920b2e34..740a71a7396 100644 --- a/public/images/pokemon/variant/176.json +++ b/public/images/pokemon/variant/176.json @@ -1,7 +1,6 @@ { "0": { "737b84": "6b3552", - "000000": "000000", "ffffff": "eee0db", "adc5bd": "ceacac", "d6efef": "dbc9c5", @@ -12,7 +11,6 @@ }, "1": { "737b84": "734350", - "000000": "000000", "ffffff": "f3cbcb", "adc5bd": "ae7675", "d6efef": "c79397", @@ -23,7 +21,6 @@ }, "2": { "737b84": "384d72", - "000000": "000000", "ffffff": "c1dfe9", "adc5bd": "81aaca", "d6efef": "91b6cf", diff --git a/public/images/pokemon/variant/177.json b/public/images/pokemon/variant/177.json index f1736061523..412ee5f3228 100644 --- a/public/images/pokemon/variant/177.json +++ b/public/images/pokemon/variant/177.json @@ -3,30 +3,24 @@ "842900": "001d3f", "ff424a": "4b798a", "d63131": "174d69", - "292929": "292929", "296b29": "b36848", "73bd42": "ffbe79", "94d642": "ffe88e", "4a9442": "d1915e", - "ffffff": "ffffff", "846321": "356f6d", "d6ad29": "4ca690", - "ffde29": "8ddcaf", - "cecece": "cecece" + "ffde29": "8ddcaf" }, "2": { "842900": "3b060c", "ff424a": "9a3841", "d63131": "662340", - "292929": "292929", "296b29": "224181", "73bd42": "62a1e8", "94d642": "82d4fc", "4a9442": "4973c7", - "ffffff": "ffffff", "846321": "382c78", "d6ad29": "554196", - "ffde29": "8767bf", - "cecece": "cecece" + "ffde29": "8767bf" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/179.json b/public/images/pokemon/variant/179.json index 0d1f5d32faf..79c50f2af23 100644 --- a/public/images/pokemon/variant/179.json +++ b/public/images/pokemon/variant/179.json @@ -6,8 +6,6 @@ "e6cea5": "deccb2", "e6ad00": "eaa60f", "ffde00": "ffe85a", - "ffffff": "ffffff", - "101010": "101010", "525252": "392229", "a5a5a5": "4f3a3d", "004a94": "461e1b", @@ -23,8 +21,6 @@ "e6cea5": "352b53", "e6ad00": "c33486", "ffde00": "ee74c1", - "ffffff": "ffffff", - "101010": "101010", "525252": "221b1f", "a5a5a5": "2d282a", "004a94": "42579d", diff --git a/public/images/pokemon/variant/181-mega.json b/public/images/pokemon/variant/181-mega.json index b8976b8cd03..571cc3a7650 100644 --- a/public/images/pokemon/variant/181-mega.json +++ b/public/images/pokemon/variant/181-mega.json @@ -2,7 +2,6 @@ "1": { "737373": "58341f", "f8f8f8": "ffe8b2", - "101010": "101010", "bf370a": "e28f09", "bfbfbf": "e5c079", "ff490d": "ffe85a", @@ -15,7 +14,6 @@ "2": { "737373": "5d412a", "f8f8f8": "fff1d0", - "101010": "101010", "bf370a": "d26b00", "bfbfbf": "ebbb78", "ff490d": "ffab34", diff --git a/public/images/pokemon/variant/181.json b/public/images/pokemon/variant/181.json index c898dfb6d7a..5b1f92cdefc 100644 --- a/public/images/pokemon/variant/181.json +++ b/public/images/pokemon/variant/181.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "636b6b": "4a1e19", "ffc510": "9f5834", "845a31": "492602", @@ -15,7 +14,6 @@ "e6e6e6": "e6c285" }, "2": { - "101010": "101010", "636b6b": "3e2752", "ffc510": "6189db", "845a31": "1c2a6d", diff --git a/public/images/pokemon/variant/182.json b/public/images/pokemon/variant/182.json index 11f04f60f96..da8f5b2a6b2 100644 --- a/public/images/pokemon/variant/182.json +++ b/public/images/pokemon/variant/182.json @@ -4,13 +4,11 @@ "f76b00": "79f6d5", "840000": "338497", "e6d66b": "5c51b9", - "101010": "101010", "b5a53a": "3a2c7d", "847319": "231c5a", "73ad31": "a2d281", "9cd64a": "d8ecb1", "526329": "659251", - "ffffff": "ffffff", "3a9400": "6370b3", "105210": "373c8b", "52ce31": "90a4d7" @@ -20,13 +18,11 @@ "f76b00": "eaed6e", "840000": "a7801f", "e6d66b": "eb4f50", - "101010": "101010", "b5a53a": "ca3442", "847319": "a21b36", "73ad31": "804428", "9cd64a": "b68356", "526329": "592819", - "ffffff": "ffffff", "3a9400": "b8462a", "105210": "901a17", "52ce31": "e87940" diff --git a/public/images/pokemon/variant/183.json b/public/images/pokemon/variant/183.json index 9fa6031e129..a3b79858fee 100644 --- a/public/images/pokemon/variant/183.json +++ b/public/images/pokemon/variant/183.json @@ -8,7 +8,6 @@ "941010": "7b3cd6", "bd2931": "778dd1", "de4252": "9fcae2", - "ffffff": "ffffff", "101010": "32392e", "b5d6ff": "ffd9f3", "636363": "7c6a7d", diff --git a/public/images/pokemon/variant/185.json b/public/images/pokemon/variant/185.json index 9935620d320..1b7c8ba77fa 100644 --- a/public/images/pokemon/variant/185.json +++ b/public/images/pokemon/variant/185.json @@ -3,7 +3,6 @@ "635a4a": "322a22", "c5a54a": "7b7670", "ad845a": "5d564e", - "101010": "101010", "315a19": "3d1e0c", "4ac542": "8a6a24", "5a8c5a": "6c4616", @@ -17,7 +16,6 @@ "635a4a": "2d2164", "c5a54a": "5c80c0", "ad845a": "4058a8", - "101010": "101010", "315a19": "cf985e", "4ac542": "efe1b2", "5a8c5a": "e0c282", diff --git a/public/images/pokemon/variant/19.json b/public/images/pokemon/variant/19.json index 3347f6b9529..1e32b660c54 100644 --- a/public/images/pokemon/variant/19.json +++ b/public/images/pokemon/variant/19.json @@ -4,33 +4,25 @@ "8c4a8c": "4e5e7e", "d69cd6": "88a0b1", "4a2942": "262f4f", - "101010": "101010", "a57308": "a17c7d", "e6ce73": "b79897", "634a08": "765358", "efdeb5": "e8cec9", "a5193a": "2d945e", - "cecece": "cecece", - "ffffff": "ffffff", "e65a73": "61d8c1", - "cead63": "c4a3a1", - "5a5a5a": "5a5a5a" + "cead63": "c4a3a1" }, "2": { "b573bd": "efdcd1", "8c4a8c": "d6b2a6", "d69cd6": "fff5eb", "4a2942": "865c54", - "101010": "101010", "a57308": "ba476f", "e6ce73": "c6667d", "634a08": "7e3754", "efdeb5": "efb5c0", "a5193a": "a91507", - "cecece": "cecece", - "ffffff": "ffffff", "e65a73": "d85926", - "cead63": "d98a9f", - "5a5a5a": "5a5a5a" + "cead63": "d98a9f" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/190.json b/public/images/pokemon/variant/190.json index 3a8e737b470..911d18e7347 100644 --- a/public/images/pokemon/variant/190.json +++ b/public/images/pokemon/variant/190.json @@ -2,27 +2,21 @@ "1": { "8442ad": "ad452f", "bd7bde": "dea95a", - "000000": "000000", "52216b": "701523", "a55ac5": "c47440", "8c6b42": "8c7457", "bd8c63": "bd9a7e", "c5ad6b": "c4b487", - "ffdea5": "ffeccc", - "ffffff": "ffffff", - "adada5": "adada5" + "ffdea5": "ffeccc" }, "2": { "8442ad": "a6a297", "bd7bde": "e5dfdf", - "000000": "000000", "52216b": "807870", "a55ac5": "bfbeb4", "8c6b42": "632339", "bd8c63": "802d44", "c5ad6b": "99455d", - "ffdea5": "ed8286", - "ffffff": "ffffff", - "adada5": "adada5" + "ffdea5": "ed8286" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/193.json b/public/images/pokemon/variant/193.json index 90199bf510b..aef5305e261 100644 --- a/public/images/pokemon/variant/193.json +++ b/public/images/pokemon/variant/193.json @@ -2,7 +2,6 @@ "1": { "632900": "a13a80", "f75a52": "fc95c5", - "101010": "101010", "ad3119": "e069b1", "94adbd": "c9859d", "e6ffff": "f0afbc", @@ -19,7 +18,6 @@ "2": { "632900": "913919", "f75a52": "eba64d", - "101010": "101010", "ad3119": "cf6838", "94adbd": "81a690", "e6ffff": "f3ffe6", diff --git a/public/images/pokemon/variant/196.json b/public/images/pokemon/variant/196.json index ce41a030de1..cbff9a81321 100644 --- a/public/images/pokemon/variant/196.json +++ b/public/images/pokemon/variant/196.json @@ -1,44 +1,38 @@ { "0": { "7b4a7b": "204024", - "101010": "101010", "efbdef": "bddd9e", "e7a5d6": "6c9e63", "b57bb5": "416240", "314273": "a86a2c", "4a73b5": "ffb554", "c62152": "ffa80e", - "ffffff": "ffffff", "8c2152": "c54200", "8463b5": "ffa72a", "c6c6c6": "c5c5c5" }, "1": { "7b4a7b": "581747", - "101010": "101010", "efbdef": "e99eae", "e7a5d6": "d1759c", "b57bb5": "953b6c", "314273": "537fde", "4a73b5": "90b7f9", "c62152": "31d9ff", - "ffffff": "ffffff", "8c2152": "15a7d2", "8463b5": "1662bf", "c6c6c6": "c5c5c5" }, "2": { "7b4a7b": "9b5250", - "101010": "101010", "efbdef": "f5f3e1", "e7a5d6": "ded0af", "b57bb5": "ce987a", "314273": "194540", "4a73b5": "39816d", "c62152": "00de92", - "ffffff": "ffffff", "8c2152": "00ad7f", "8463b5": "006b5b", "c6c6c6": "c5c5c5" } -} +} \ No newline at end of file diff --git a/public/images/pokemon/variant/197.json b/public/images/pokemon/variant/197.json index 87cee244bd7..cbeb67fdf45 100644 --- a/public/images/pokemon/variant/197.json +++ b/public/images/pokemon/variant/197.json @@ -2,19 +2,16 @@ "1": { "29314a": "3a2534", "63637b": "896c75", - "101010": "101010", "424252": "553849", "525200": "9b0f33", "efd652": "ff5153", "b59429": "c72343", "6b2110": "e37e22", - "ffefde": "ffefde", "ad424a": "ffbb49" }, "2": { "29314a": "9f8981", "63637b": "eddbcf", - "101010": "101010", "424252": "d3bcb1", "525200": "974623", "efd652": "e7af5d", diff --git a/public/images/pokemon/variant/199.json b/public/images/pokemon/variant/199.json index 22e345030c0..f0ee6325d3f 100644 --- a/public/images/pokemon/variant/199.json +++ b/public/images/pokemon/variant/199.json @@ -1,15 +1,12 @@ { "1": { - "101010": "101010", "63636b": "734927", "d6d6d6": "f1d191", "ada5a5": "bf9562", "b52919": "2b191b", - "ffffff": "ffffff", "ef736b": "5b3332", "ce5252": "4c2523", "ff9c94": "885345", - "d1cdc9": "d1cdc9", "ad6310": "a25a53", "deb531": "b97565", "ffff8c": "e0b69d", @@ -18,16 +15,13 @@ "ff5a4a": "93de76" }, "2": { - "101010": "101010", "63636b": "192b32", "d6d6d6": "4c7668", "ada5a5": "2b4a48", "b52919": "893d28", - "ffffff": "ffffff", "ef736b": "de9048", "ce5252": "b0613c", "ff9c94": "edbc69", - "d1cdc9": "d1cdc9", "ad6310": "a12d18", "deb531": "ba5127", "ffff8c": "d16d36", diff --git a/public/images/pokemon/variant/2.json b/public/images/pokemon/variant/2.json index 69bf62863f8..687263c7683 100644 --- a/public/images/pokemon/variant/2.json +++ b/public/images/pokemon/variant/2.json @@ -4,7 +4,6 @@ "d6425a": "2e6902", "ffada5": "c5d95f", "ff7b7b": "88b043", - "101010": "101010", "104a3a": "022e59", "7bd673": "bef0fa", "317b52": "446b94", @@ -12,7 +11,6 @@ "10424a": "733502", "84e6d6": "ffbb45", "5acebd": "faa405", - "219484": "c76102", - "ffffff": "ffffff" + "219484": "c76102" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/20.json b/public/images/pokemon/variant/20.json index dbc0e0afaee..b3ffae21dd6 100644 --- a/public/images/pokemon/variant/20.json +++ b/public/images/pokemon/variant/20.json @@ -7,7 +7,6 @@ "deb54a": "635653", "c5943a": "4a3331", "6b3a00": "261518", - "101010": "101010", "ffffff": "fff2e4", "f7f7a5": "d2b2ad", "845a29": "48272e", @@ -24,7 +23,6 @@ "deb54a": "fff8ef", "c5943a": "e2cbb9", "6b3a00": "7f645c", - "101010": "101010", "ffffff": "fffaf4", "f7f7a5": "ba5e68", "845a29": "34171d", diff --git a/public/images/pokemon/variant/200.json b/public/images/pokemon/variant/200.json index 75ec1831f2e..6a12b2b75a4 100644 --- a/public/images/pokemon/variant/200.json +++ b/public/images/pokemon/variant/200.json @@ -1,7 +1,6 @@ { "0": { "631942": "71370f", - "101010": "101010", "de63a5": "f6b557", "9c3a4a": "c7722c", "4a84a5": "8366ab", @@ -10,14 +9,12 @@ "3a6384": "603f90", "bd9431": "c08ecb", "a5295a": "d3941a", - "ffffff": "ffffff", "efe663": "e5c9e9", "de4284": "ffdd67", "731031": "9b490e" }, "1": { "631942": "00535b", - "101010": "101010", "de63a5": "099394", "9c3a4a": "42c3bc", "4a84a5": "c7d8e1", @@ -26,14 +23,12 @@ "3a6384": "4a6077", "bd9431": "149c9d", "a5295a": "c87819", - "ffffff": "ffffff", "efe663": "55e6de", "de4284": "ffc668", "731031": "7b3c08" }, "2": { "631942": "5d4a2f", - "101010": "101010", "de63a5": "fff7dd", "9c3a4a": "fae3ad", "4a84a5": "fecb77", @@ -42,7 +37,6 @@ "3a6384": "e1983d", "bd9431": "66d0e5", "a5295a": "7a1511", - "ffffff": "ffffff", "efe663": "a6f0f8", "de4284": "b83a31", "731031": "430a09" diff --git a/public/images/pokemon/variant/201-a.json b/public/images/pokemon/variant/201-a.json index 93929b1d6ff..46efa61cc3f 100644 --- a/public/images/pokemon/variant/201-a.json +++ b/public/images/pokemon/variant/201-a.json @@ -4,8 +4,7 @@ "dedede": "ffe1bd", "a5a5a5": "ffad4b", "101010": "201100", - "737373": "e67d00", - "ffffff": "ffffff" + "737373": "e67d00" }, "2": { "525252": "905438", diff --git a/public/images/pokemon/variant/201-b.json b/public/images/pokemon/variant/201-b.json index b3aa945a57d..1b9497bdab4 100644 --- a/public/images/pokemon/variant/201-b.json +++ b/public/images/pokemon/variant/201-b.json @@ -4,8 +4,7 @@ "525252": "a45900", "737373": "e67d00", "dedede": "ffe1bd", - "a5a5a5": "ffad4b", - "ffffff": "ffffff" + "a5a5a5": "ffad4b" }, "2": { "101010": "411600", diff --git a/public/images/pokemon/variant/201-c.json b/public/images/pokemon/variant/201-c.json index 237244aa2d7..663065c07ec 100644 --- a/public/images/pokemon/variant/201-c.json +++ b/public/images/pokemon/variant/201-c.json @@ -4,8 +4,7 @@ "101010": "201100", "737373": "e67d00", "a5a5a5": "ffad4b", - "dedede": "ffe1bd", - "ffffff": "ffffff" + "dedede": "ffe1bd" }, "2": { "525252": "6f090c", diff --git a/public/images/pokemon/variant/201-d.json b/public/images/pokemon/variant/201-d.json index e51f09a105f..5470f3ed693 100644 --- a/public/images/pokemon/variant/201-d.json +++ b/public/images/pokemon/variant/201-d.json @@ -4,15 +4,13 @@ "101010": "201100", "737373": "e67d00", "dedede": "ffe1bd", - "a5a5a5": "ffad4b", - "ffffff": "ffffff" + "a5a5a5": "ffad4b" }, "2": { "525252": "6498c2", "101010": "041b3f", "737373": "c4edf1", "dedede": "ffffff", - "a5a5a5": "f2ffff", - "ffffff": "ffffff" + "a5a5a5": "f2ffff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/201-e.json b/public/images/pokemon/variant/201-e.json index 1a057eb1e3c..6a17a8d1814 100644 --- a/public/images/pokemon/variant/201-e.json +++ b/public/images/pokemon/variant/201-e.json @@ -4,8 +4,7 @@ "525252": "a45900", "737373": "e67d00", "dedede": "ffe1bd", - "a5a5a5": "ffad4b", - "ffffff": "ffffff" + "a5a5a5": "ffad4b" }, "2": { "101010": "002618", diff --git a/public/images/pokemon/variant/201-exclamation.json b/public/images/pokemon/variant/201-exclamation.json index 718b96facd1..58fdaf1c7ad 100644 --- a/public/images/pokemon/variant/201-exclamation.json +++ b/public/images/pokemon/variant/201-exclamation.json @@ -4,8 +4,7 @@ "101010": "201100", "a5a5a5": "ffad4b", "737373": "e67d00", - "dedede": "ffe1bd", - "ffffff": "ffffff" + "dedede": "ffe1bd" }, "2": { "525252": "a1122b", diff --git a/public/images/pokemon/variant/201-f.json b/public/images/pokemon/variant/201-f.json index a7d7e053ac1..d7d29982076 100644 --- a/public/images/pokemon/variant/201-f.json +++ b/public/images/pokemon/variant/201-f.json @@ -4,8 +4,7 @@ "101010": "201100", "737373": "e67d00", "dedede": "ffe1bd", - "a5a5a5": "ffad4b", - "ffffff": "ffffff" + "a5a5a5": "ffad4b" }, "2": { "525252": "b34394", diff --git a/public/images/pokemon/variant/201-g.json b/public/images/pokemon/variant/201-g.json index d92920facd2..083df9b4cce 100644 --- a/public/images/pokemon/variant/201-g.json +++ b/public/images/pokemon/variant/201-g.json @@ -4,8 +4,7 @@ "525252": "a45900", "737373": "e67d00", "a5a5a5": "ffad4b", - "dedede": "ffe1bd", - "ffffff": "ffffff" + "dedede": "ffe1bd" }, "2": { "101010": "471100", diff --git a/public/images/pokemon/variant/201-h.json b/public/images/pokemon/variant/201-h.json index 476a6560eb2..468b13b50f5 100644 --- a/public/images/pokemon/variant/201-h.json +++ b/public/images/pokemon/variant/201-h.json @@ -4,8 +4,7 @@ "101010": "201100", "737373": "e67d00", "a5a5a5": "ffad4b", - "dedede": "ffe1bd", - "ffffff": "ffffff" + "dedede": "ffe1bd" }, "2": { "525252": "aa1731", diff --git a/public/images/pokemon/variant/201-i.json b/public/images/pokemon/variant/201-i.json index e9caaa30132..3785c7096f5 100644 --- a/public/images/pokemon/variant/201-i.json +++ b/public/images/pokemon/variant/201-i.json @@ -4,8 +4,7 @@ "dedede": "ffe1bd", "a5a5a5": "ffad4b", "101010": "201100", - "737373": "e67d00", - "ffffff": "ffffff" + "737373": "e67d00" }, "2": { "525252": "483a74", diff --git a/public/images/pokemon/variant/201-j.json b/public/images/pokemon/variant/201-j.json index 0d0812ce955..0396693c527 100644 --- a/public/images/pokemon/variant/201-j.json +++ b/public/images/pokemon/variant/201-j.json @@ -4,15 +4,13 @@ "525252": "a45900", "a5a5a5": "ffad4b", "737373": "e67d00", - "dedede": "ffe1bd", - "ffffff": "ffffff" + "dedede": "ffe1bd" }, "2": { "101010": "392b32", "525252": "ac8e97", "a5a5a5": "eee3e5", "737373": "d6c8cb", - "dedede": "fff7f8", - "ffffff": "ffffff" + "dedede": "fff7f8" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/201-k.json b/public/images/pokemon/variant/201-k.json index b2e1fbc6aaf..e84d26f8ce4 100644 --- a/public/images/pokemon/variant/201-k.json +++ b/public/images/pokemon/variant/201-k.json @@ -4,8 +4,7 @@ "a5a5a5": "ffad4b", "101010": "201100", "dedede": "ffe1bd", - "737373": "e67d00", - "ffffff": "ffffff" + "737373": "e67d00" }, "2": { "525252": "6eab2c", diff --git a/public/images/pokemon/variant/201-l.json b/public/images/pokemon/variant/201-l.json index 9cd531b948c..e88727eabcd 100644 --- a/public/images/pokemon/variant/201-l.json +++ b/public/images/pokemon/variant/201-l.json @@ -4,15 +4,13 @@ "101010": "201100", "dedede": "ffe1bd", "a5a5a5": "ffad4b", - "737373": "e67d00", - "ffffff": "ffffff" + "737373": "e67d00" }, "2": { "525252": "bb8e77", "101010": "290808", "dedede": "fff4e5", "a5a5a5": "f3ddc5", - "737373": "e2bea2", - "ffffff": "ffffff" + "737373": "e2bea2" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/201-m.json b/public/images/pokemon/variant/201-m.json index fcebfe7b6bc..e3e691eb2b5 100644 --- a/public/images/pokemon/variant/201-m.json +++ b/public/images/pokemon/variant/201-m.json @@ -4,8 +4,7 @@ "101010": "201100", "737373": "e67d00", "dedede": "ffe1bd", - "a5a5a5": "ffad4b", - "ffffff": "ffffff" + "a5a5a5": "ffad4b" }, "2": { "525252": "1a917f", diff --git a/public/images/pokemon/variant/201-n.json b/public/images/pokemon/variant/201-n.json index 1d27cb75039..28d88a5b131 100644 --- a/public/images/pokemon/variant/201-n.json +++ b/public/images/pokemon/variant/201-n.json @@ -4,8 +4,7 @@ "a5a5a5": "ffad4b", "101010": "201100", "dedede": "ffe1bd", - "737373": "e67d00", - "ffffff": "ffffff" + "737373": "e67d00" }, "2": { "525252": "351e67", diff --git a/public/images/pokemon/variant/201-o.json b/public/images/pokemon/variant/201-o.json index 4257ccecc03..bfe33dd1c16 100644 --- a/public/images/pokemon/variant/201-o.json +++ b/public/images/pokemon/variant/201-o.json @@ -4,8 +4,7 @@ "525252": "a45900", "737373": "e67d00", "a5a5a5": "ffad4b", - "dedede": "ffe1bd", - "ffffff": "ffffff" + "dedede": "ffe1bd" }, "2": { "101010": "000000", diff --git a/public/images/pokemon/variant/201-p.json b/public/images/pokemon/variant/201-p.json index 7932df09f12..7da0cd744bc 100644 --- a/public/images/pokemon/variant/201-p.json +++ b/public/images/pokemon/variant/201-p.json @@ -4,8 +4,7 @@ "101010": "201100", "dedede": "ffe1bd", "a5a5a5": "ffad4b", - "737373": "e67d00", - "ffffff": "ffffff" + "737373": "e67d00" }, "2": { "525252": "ad540f", diff --git a/public/images/pokemon/variant/201-q.json b/public/images/pokemon/variant/201-q.json index 8283eabfdcf..241daf37027 100644 --- a/public/images/pokemon/variant/201-q.json +++ b/public/images/pokemon/variant/201-q.json @@ -4,8 +4,7 @@ "737373": "e67d00", "101010": "201100", "dedede": "ffe1bd", - "a5a5a5": "ffad4b", - "ffffff": "ffffff" + "a5a5a5": "ffad4b" }, "2": { "525252": "bd8f26", diff --git a/public/images/pokemon/variant/201-question.json b/public/images/pokemon/variant/201-question.json index 919cc7676a2..f7109a6e579 100644 --- a/public/images/pokemon/variant/201-question.json +++ b/public/images/pokemon/variant/201-question.json @@ -4,8 +4,7 @@ "dedede": "ffe1bd", "a5a5a5": "ffad4b", "737373": "e67d00", - "525252": "a45900", - "ffffff": "ffffff" + "525252": "a45900" }, "2": { "101010": "000020", diff --git a/public/images/pokemon/variant/201-r.json b/public/images/pokemon/variant/201-r.json index 176f97fec1a..8b425529d01 100644 --- a/public/images/pokemon/variant/201-r.json +++ b/public/images/pokemon/variant/201-r.json @@ -4,8 +4,7 @@ "101010": "201100", "737373": "e67d00", "dedede": "ffe1bd", - "a5a5a5": "ffad4b", - "ffffff": "ffffff" + "a5a5a5": "ffad4b" }, "2": { "525252": "44251f", diff --git a/public/images/pokemon/variant/201-s.json b/public/images/pokemon/variant/201-s.json index 3cf0d17b4bb..6b55531bf5b 100644 --- a/public/images/pokemon/variant/201-s.json +++ b/public/images/pokemon/variant/201-s.json @@ -4,8 +4,7 @@ "dedede": "ffe1bd", "a5a5a5": "ffad4b", "101010": "201100", - "737373": "e67d00", - "ffffff": "ffffff" + "737373": "e67d00" }, "2": { "525252": "266526", diff --git a/public/images/pokemon/variant/201-t.json b/public/images/pokemon/variant/201-t.json index 95239e5731b..040a1f84451 100644 --- a/public/images/pokemon/variant/201-t.json +++ b/public/images/pokemon/variant/201-t.json @@ -4,8 +4,7 @@ "737373": "e67d00", "525252": "a45900", "a5a5a5": "ffad4b", - "dedede": "ffe1bd", - "ffffff": "ffffff" + "dedede": "ffe1bd" }, "2": { "101010": "22003c", diff --git a/public/images/pokemon/variant/201-u.json b/public/images/pokemon/variant/201-u.json index f52b6d86827..95b8a0fa4bd 100644 --- a/public/images/pokemon/variant/201-u.json +++ b/public/images/pokemon/variant/201-u.json @@ -4,8 +4,7 @@ "a5a5a5": "ffad4b", "737373": "e67d00", "101010": "201100", - "dedede": "ffe1bd", - "ffffff": "ffffff" + "dedede": "ffe1bd" }, "2": { "525252": "551b2c", diff --git a/public/images/pokemon/variant/201-v.json b/public/images/pokemon/variant/201-v.json index 0824e793d9c..6cc08547da1 100644 --- a/public/images/pokemon/variant/201-v.json +++ b/public/images/pokemon/variant/201-v.json @@ -4,8 +4,7 @@ "525252": "a45900", "737373": "e67d00", "dedede": "ffe1bd", - "a5a5a5": "ffad4b", - "ffffff": "ffffff" + "a5a5a5": "ffad4b" }, "2": { "101010": "371000", diff --git a/public/images/pokemon/variant/201-w.json b/public/images/pokemon/variant/201-w.json index 5515d25e5d5..bb310de7bed 100644 --- a/public/images/pokemon/variant/201-w.json +++ b/public/images/pokemon/variant/201-w.json @@ -4,8 +4,7 @@ "dedede": "ffe1bd", "a5a5a5": "ffad4b", "101010": "201100", - "737373": "e67d00", - "ffffff": "ffffff" + "737373": "e67d00" }, "2": { "525252": "9975bb", diff --git a/public/images/pokemon/variant/201-x.json b/public/images/pokemon/variant/201-x.json index 52d07cb0750..482724308e6 100644 --- a/public/images/pokemon/variant/201-x.json +++ b/public/images/pokemon/variant/201-x.json @@ -4,15 +4,13 @@ "101010": "201100", "dedede": "ffe1bd", "a5a5a5": "ffad4b", - "737373": "e67d00", - "ffffff": "ffffff" + "737373": "e67d00" }, "2": { "525252": "60a6b5", "101010": "001434", "dedede": "e9fff7", "a5a5a5": "cdf4ec", - "737373": "91e9e4", - "ffffff": "ffffff" + "737373": "91e9e4" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/201-y.json b/public/images/pokemon/variant/201-y.json index 744581d4b77..e092f989c53 100644 --- a/public/images/pokemon/variant/201-y.json +++ b/public/images/pokemon/variant/201-y.json @@ -4,8 +4,7 @@ "dedede": "ffe1bd", "a5a5a5": "ffad4b", "737373": "e67d00", - "101010": "201100", - "ffffff": "ffffff" + "101010": "201100" }, "2": { "525252": "d1762f", diff --git a/public/images/pokemon/variant/201-z.json b/public/images/pokemon/variant/201-z.json index 810a933dcfc..97b7a3ab5aa 100644 --- a/public/images/pokemon/variant/201-z.json +++ b/public/images/pokemon/variant/201-z.json @@ -4,8 +4,7 @@ "dedede": "ffe1bd", "a5a5a5": "ffad4b", "737373": "e67d00", - "101010": "201100", - "ffffff": "ffffff" + "101010": "201100" }, "2": { "525252": "21402e", diff --git a/public/images/pokemon/variant/2027.json b/public/images/pokemon/variant/2027.json index b479f8e2283..3560616640f 100644 --- a/public/images/pokemon/variant/2027.json +++ b/public/images/pokemon/variant/2027.json @@ -2,31 +2,25 @@ "1": { "518d9f": "a24c68", "354e73": "752e42", - "fefefe": "fefefe", "b6dbe7": "ffdac2", "84b3ce": "d27c80", - "101010": "101010", "10397b": "212d55", "897e67": "aaaa96", "297bcd": "3b5e82", "d1c592": "d3d3c6", "fefea9": "fffffc", - "ebe2b1": "e9e9e0", - "cfd3d8": "cfd3d8" + "ebe2b1": "e9e9e0" }, "2": { "518d9f": "6a439e", "354e73": "3d2c78", - "fefefe": "fefefe", "b6dbe7": "dbb1eb", "84b3ce": "a87bcf", - "101010": "101010", "10397b": "1d6268", "897e67": "2e163d", "297bcd": "3a9b8a", "d1c592": "44225a", "fefea9": "6f3480", - "ebe2b1": "552668", - "cfd3d8": "cfd3d8" + "ebe2b1": "552668" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/2028.json b/public/images/pokemon/variant/2028.json index 955b24576a2..3222a22072f 100644 --- a/public/images/pokemon/variant/2028.json +++ b/public/images/pokemon/variant/2028.json @@ -1,7 +1,6 @@ { "1": { "3c88b4": "966281", - "101010": "101010", "52b0cf": "e2877b", "f1f1f4": "fffffc", "b0e5f8": "fffed9", @@ -12,12 +11,10 @@ "b7e3e7": "ffb59e", "77a2bb": "d9746e", "606060": "6f525d", - "8b8b8b": "8b8b8b", "bdbdcd": "d0c0b6" }, "2": { "3c88b4": "515fa9", - "101010": "101010", "52b0cf": "57a5c5", "f1f1f4": "e3f0ff", "b0e5f8": "f8f5b0", @@ -28,7 +25,6 @@ "b7e3e7": "5f2e71", "77a2bb": "381d4d", "606060": "3a3a54", - "8b8b8b": "8b8b8b", "bdbdcd": "acb7d0" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/203.json b/public/images/pokemon/variant/203.json index a4391436a20..10e0040644a 100644 --- a/public/images/pokemon/variant/203.json +++ b/public/images/pokemon/variant/203.json @@ -1,7 +1,6 @@ { "1": { "424a73": "351810", - "ffffff": "ffffff", "adb5d6": "8f6f66", "6b8cb5": "512b21", "4a3a3a": "231117", @@ -9,7 +8,6 @@ "9c7b42": "571522", "efde52": "9c3e3e", "9c3a5a": "ab9d75", - "101010": "101010", "ce6b94": "d8d1ad", "947b6b": "1f4062", "635252": "112246", @@ -18,7 +16,6 @@ }, "2": { "424a73": "27091d", - "ffffff": "ffffff", "adb5d6": "c5b0b7", "6b8cb5": "4a1b33", "4a3a3a": "091225", @@ -26,7 +23,6 @@ "9c7b42": "15545d", "efde52": "2a9d8f", "9c3a5a": "52ab5f", - "101010": "101010", "ce6b94": "a8e781", "947b6b": "1a2e43", "635252": "111d34", diff --git a/public/images/pokemon/variant/2052.json b/public/images/pokemon/variant/2052.json index adcd32d0470..a78ae48b8c2 100644 --- a/public/images/pokemon/variant/2052.json +++ b/public/images/pokemon/variant/2052.json @@ -1,32 +1,26 @@ { "1": { "45505f": "8c583b", - "101010": "101010", "91a3bf": "ffda5c", "262b3c": "41185e", "995433": "493473", "627986": "de974e", - "f3f3f3": "f3f3f3", "e3cc2b": "a66db5", "ca833c": "7a519a", "798071": "7a4888", "b5b6b9": "bb92d5", - "bcbdc0": "bcbdc0", "f0f0f0": "f4ceff" }, "2": { "45505f": "271420", - "101010": "101010", "91a3bf": "7c4e42", "262b3c": "1d1b33", "995433": "45328e", "627986": "5f3036", - "f3f3f3": "f3f3f3", "e3cc2b": "b5b8f9", "ca833c": "7b7fda", "798071": "5f5c7e", "b5b6b9": "7b7895", - "bcbdc0": "bcbdc0", "f0f0f0": "d1daf5" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/2053.json b/public/images/pokemon/variant/2053.json index 9c5fcd4c20b..aa5dec5609b 100644 --- a/public/images/pokemon/variant/2053.json +++ b/public/images/pokemon/variant/2053.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "464457": "8c583b", "262b3c": "41185e", "45505f": "512d6c", @@ -8,13 +7,10 @@ "6c7791": "de974e", "9ba8b7": "ffda5c", "1784d5": "6945aa", - "fdfdfd": "fdfdfd", "11b8f7": "9d67d8", - "1149a8": "2e2575", - "b6b6b6": "b6b6b6" + "1149a8": "2e2575" }, "2": { - "101010": "101010", "464457": "271420", "262b3c": "111323", "45505f": "1d1b33", diff --git a/public/images/pokemon/variant/206.json b/public/images/pokemon/variant/206.json index 1a765507cd6..e16e94cefa0 100644 --- a/public/images/pokemon/variant/206.json +++ b/public/images/pokemon/variant/206.json @@ -4,29 +4,25 @@ "f7e67b": "ececec", "debd3a": "aeaeae", "bd8c21": "757575", - "101010": "101010", "d6e6f7": "c1d7e2", "5a6373": "5d6970", "f7ffff": "f6ffff", "fff7c5": "fdfdfd", "6bbdce": "748da4", "216b84": "2a413f", - "318ca5": "4a6165", - "bdcee6": "bdcee6" + "318ca5": "4a6165" }, "2": { "735a42": "462a3e", "f7e67b": "db4069", "debd3a": "a12e55", "bd8c21": "692342", - "101010": "101010", "d6e6f7": "f4ce91", "5a6373": "5c4a4d", "f7ffff": "fdffdc", "fff7c5": "e97798", "6bbdce": "b5f2ec", "216b84": "1d737a", - "318ca5": "38a8a6", - "bdcee6": "bdcee6" + "318ca5": "38a8a6" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/212-mega.json b/public/images/pokemon/variant/212-mega.json index 5534f751f83..883352cde2d 100644 --- a/public/images/pokemon/variant/212-mega.json +++ b/public/images/pokemon/variant/212-mega.json @@ -2,43 +2,24 @@ "0": { "622929": "215a2d", "f66a6a": "8cce73", - "101010": "101010", "d53939": "4a9c53", - "a42929": "2f794e", - "39394a": "39394a", - "fdfdfd": "fdfdfd", - "9494a4": "9494a4", - "b4b4cd": "b4b4cd", - "0090b4": "0090b4", - "20d6f4": "20d6f4", - "343444": "343444" + "a42929": "2f794e" }, "1": { "622929": "2f2962", "f66a6a": "639cf7", - "101010": "101010", "d53939": "4263ef", - "a42929": "29429c", - "39394a": "39394a", - "fdfdfd": "fdfdfd", - "9494a4": "9494a4", - "b4b4cd": "b4b4cd", - "0090b4": "0090b4", - "20d6f4": "20d6f4", - "343444": "343444" + "a42929": "29429c" }, "2": { "622929": "645117", "f66a6a": "c59f29", - "101010": "101010", "d53939": "ffca2a", "a42929": "b88619", "39394a": "282d2c", - "fdfdfd": "fdfdfd", "9494a4": "3c4543", "b4b4cd": "cdccb4", "0090b4": "b49800", - "20d6f4": "f4e920", - "343444": "343444" + "20d6f4": "f4e920" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/212.json b/public/images/pokemon/variant/212.json index 55fcc0858ac..5240f4f81e3 100644 --- a/public/images/pokemon/variant/212.json +++ b/public/images/pokemon/variant/212.json @@ -2,24 +2,14 @@ "0": { "632929": "215a2d", "f76b6b": "8cce73", - "101010": "101010", - "3a3a4a": "3a3a4a", - "ffffff": "ffffff", "d63a3a": "4a9c53", - "b5b5ce": "b5b5ce", - "9494a5": "9494a5", - "a52929": "2f794e", - "dec510": "dec510", - "9c6b21": "9c6b21" + "a52929": "2f794e" }, "1": { "632929": "2f2962", "f76b6b": "639cf7", - "101010": "101010", "3a3a4a": "3c3c50", - "ffffff": "ffffff", "d63a3a": "4263ef", - "b5b5ce": "b5b5ce", "9494a5": "6262a4", "a52929": "29429c", "dec510": "10bdde", @@ -28,14 +18,9 @@ "2": { "632929": "645117", "f76b6b": "c59f29", - "101010": "101010", "3a3a4a": "282d2c", - "ffffff": "ffffff", "d63a3a": "ffca2a", - "b5b5ce": "b5b5ce", "9494a5": "3c4543", - "a52929": "b88619", - "dec510": "dec510", - "9c6b21": "9c6b21" + "a52929": "b88619" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/213.json b/public/images/pokemon/variant/213.json index 3ce19ff580c..04c2e0b8064 100644 --- a/public/images/pokemon/variant/213.json +++ b/public/images/pokemon/variant/213.json @@ -4,7 +4,6 @@ "efc54a": "cc5b74", "735210": "5d1931", "ffff5a": "d68b71", - "101010": "101010", "842100": "0d1f2d", "6b633a": "8e4d31", "d6ceb5": "fcc86f", @@ -18,7 +17,6 @@ "efc54a": "5bbfaa", "735210": "254d59", "ffff5a": "aaedbe", - "101010": "101010", "842100": "2c1b2a", "6b633a": "1f1f1f", "d6ceb5": "4f3e46", diff --git a/public/images/pokemon/variant/215.json b/public/images/pokemon/variant/215.json index dabf55363bb..9058de23c8e 100644 --- a/public/images/pokemon/variant/215.json +++ b/public/images/pokemon/variant/215.json @@ -6,7 +6,6 @@ "316373": "6d1631", "f75273": "637696", "3a94ad": "ac373e", - "000000": "000000", "42849c": "902738", "a57b3a": "c3701b", "dece73": "ffcd68", @@ -22,13 +21,11 @@ "316373": "d4874f", "f75273": "7ac3f0", "3a94ad": "fbdba1", - "000000": "000000", "42849c": "eab273", "a57b3a": "d04e6d", "dece73": "ff8ce0", "4a4a4a": "383d51", "bdbdc5": "a1a0c3", - "f7f7ff": "f7f7ff", "8cc5ce": "d1d1ee" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/216.json b/public/images/pokemon/variant/216.json index c6e00a3e844..d0ff8a89b16 100644 --- a/public/images/pokemon/variant/216.json +++ b/public/images/pokemon/variant/216.json @@ -2,43 +2,28 @@ "0": { "6b4219": "225c35", "b56321": "4cae50", - "101010": "101010", "ff843a": "90db6d", "de7331": "6ac669", "dece9c": "d6f794", "ffe6a5": "ffffb5", - "ffffff": "ffffff", - "6b6b7b": "6b6b7b", - "efad52": "ffe66b", - "dedede": "dedede", - "b5b5bd": "b5b5bd" + "efad52": "ffe66b" }, "1": { "6b4219": "5e0c28", "b56321": "9e253b", - "101010": "101010", "ff843a": "e44642", "de7331": "c42f3e", "dece9c": "ddb49d", "ffe6a5": "f7eee1", - "ffffff": "ffffff", - "6b6b7b": "6b6b7b", - "efad52": "f2cab8", - "dedede": "dedede", - "b5b5bd": "b5b5bd" + "efad52": "f2cab8" }, "2": { "6b4219": "1e2249", "b56321": "323760", - "101010": "101010", "ff843a": "46527a", "de7331": "3c456e", "dece9c": "85deff", "ffe6a5": "b5fffc", - "ffffff": "ffffff", - "6b6b7b": "6b6b7b", - "efad52": "75aaff", - "dedede": "dedede", - "b5b5bd": "b5b5bd" + "efad52": "75aaff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/217.json b/public/images/pokemon/variant/217.json index 88ac9da8225..076e45c965b 100644 --- a/public/images/pokemon/variant/217.json +++ b/public/images/pokemon/variant/217.json @@ -1,47 +1,30 @@ { "0": { - "7b7b8c": "7b7b8c", - "101010": "101010", "634229": "1d3d26", - "ffffff": "ffffff", "945221": "2f6324", "422919": "112114", - "dedede": "dedede", "bd7342": "6a8a46", "ffef84": "f7ffa5", - "b5b5bd": "b5b5bd", "c59c4a": "ceb552", "f7c563": "f7de7b", "841931": "a52942", "de3a5a": "ef526b" }, "1": { - "7b7b8c": "7b7b8c", - "101010": "101010", "634229": "6b1d38", - "ffffff": "ffffff", "945221": "8c2a37", "422919": "2d0e1f", - "dedede": "dedede", "bd7342": "b74543", "ffef84": "f9eddb", - "b5b5bd": "b5b5bd", "c59c4a": "c48e81", - "f7c563": "f2cab8", - "841931": "841931", - "de3a5a": "de3a5a" + "f7c563": "f2cab8" }, "2": { - "7b7b8c": "7b7b8c", - "101010": "101010", "634229": "1e2249", - "ffffff": "ffffff", "945221": "323760", "422919": "111433", - "dedede": "dedede", "bd7342": "46527a", "ffef84": "adf2f7", - "b5b5bd": "b5b5bd", "c59c4a": "45a2f9", "f7c563": "5ccaf2", "841931": "a52942", diff --git a/public/images/pokemon/variant/222.json b/public/images/pokemon/variant/222.json index 61681ff421a..a184a41df10 100644 --- a/public/images/pokemon/variant/222.json +++ b/public/images/pokemon/variant/222.json @@ -1,12 +1,10 @@ { "1": { - "101010": "101010", "ffcee6": "f5eab0", "bd004a": "b76600", "ffa5c5": "f6cc70", "e66394": "f39806", "f77bb5": "f6b64e", - "ffffff": "ffffff", "dee6f7": "d9fafa", "adc5de": "9fdbd8", "5a7bad": "0095a1" @@ -18,7 +16,6 @@ "ffa5c5": "c7e5a0", "e66394": "85ba58", "f77bb5": "adca66", - "ffffff": "ffffff", "dee6f7": "1da7a3", "adc5de": "207a80", "5a7bad": "1c5469" diff --git a/public/images/pokemon/variant/227.json b/public/images/pokemon/variant/227.json index 592d33eea65..aebecf36444 100644 --- a/public/images/pokemon/variant/227.json +++ b/public/images/pokemon/variant/227.json @@ -6,14 +6,12 @@ "bdcee6": "6d93a4", "deefff": "97bcce", "637bad": "062233", - "101010": "101010", "941019": "4a0451", "c5314a": "912790", "ff8494": "c47acc", "ef5a63": "ad57ba", "ce9400": "d34b21", "ffde00": "f87642", - "841921": "841921", "ffffff": "97bcce" }, "2": { @@ -23,7 +21,6 @@ "bdcee6": "ac6f7d", "deefff": "c8aeae", "637bad": "231429", - "101010": "101010", "941019": "10255a", "c5314a": "245a98", "ff8494": "9ef8e2", diff --git a/public/images/pokemon/variant/228.json b/public/images/pokemon/variant/228.json index e9634ee0a05..aa2cc00e0c8 100644 --- a/public/images/pokemon/variant/228.json +++ b/public/images/pokemon/variant/228.json @@ -1,40 +1,29 @@ { "1": { "101921": "321b32", - "080808": "080808", "4a4a52": "76546b", "46435c": "471d23", "767085": "a84b50", "ffffff": "f3bd87", "a59cad": "c87966", "292931": "553454", - "292929": "292929", - "f8f9ff": "f8f9ff", - "f1fcff": "f1fcff", "f7a57b": "f8f1e7", "734229": "77545b", "1b1b23": "352241", - "ad7352": "ceb0a5", - "e2e0e3": "e2e0e3", - "8c1900": "8c1900" + "ad7352": "ceb0a5" }, "2": { "101921": "2c2335", - "080808": "080808", "4a4a52": "f8faf3", "46435c": "171635", "767085": "223657", "ffffff": "5c8d95", "a59cad": "38576c", "292931": "b1a3b1", - "292929": "292929", - "f8f9ff": "f8f9ff", - "f1fcff": "f1fcff", "f7a57b": "72557e", "734229": "311f3a", "1b1b23": "ecb592", "ad7352": "533960", - "e2e0e3": "e2e0e3", "8c1900": "a87ea3" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/229-mega.json b/public/images/pokemon/variant/229-mega.json index 7f2956d6bb0..ea6d7d04687 100644 --- a/public/images/pokemon/variant/229-mega.json +++ b/public/images/pokemon/variant/229-mega.json @@ -4,18 +4,13 @@ "a49cac": "a84b50", "cdd5d5": "c87966", "fcfcfc": "f3bd87", - "010101": "010101", "622910": "77545b", "182029": "321b32", "a45a4a": "ceb0a5", "4a4a52": "76546b", "f69c83": "f8f1e7", "313139": "553454", - "c5cdd1": "c5cdd1", "ce0a10": "455d92", - "f8f9ff": "f8f9ff", - "000000": "000000", - "e2e0e3": "e2e0e3", "cb070d": "aa8c82" }, "2": { @@ -23,7 +18,6 @@ "a49cac": "223657", "cdd5d5": "38576c", "fcfcfc": "5c8d95", - "010101": "010101", "622910": "311f3a", "182029": "321b32", "a45a4a": "533960", @@ -33,8 +27,6 @@ "c5cdd1": "100f27", "ce0a10": "e58142", "f8f9ff": "223657", - "000000": "000000", - "e2e0e3": "e2e0e3", "cb070d": "534b6a" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/229.json b/public/images/pokemon/variant/229.json index fe532e0c908..ffe3de858f0 100644 --- a/public/images/pokemon/variant/229.json +++ b/public/images/pokemon/variant/229.json @@ -6,16 +6,11 @@ "a59cad": "a84244", "192129": "431129", "4a4a52": "85324a", - "000000": "000000", "a55a4a": "ceb0a5", "f79c84": "f8f1e7", "841021": "41578c", "31313a": "631e3f", - "ada5b3": "ada5b3", - "632910": "8c6362", - "f8f9ff": "f8f9ff", - "e2e0e3": "e2e0e3", - "9c293a": "9c293a" + "632910": "8c6362" }, "2": { "84738c": "111a33", @@ -24,7 +19,6 @@ "a59cad": "223657", "192129": "616f8c", "4a4a52": "e8f8ff", - "000000": "000000", "a55a4a": "4a3a5e", "f79c84": "665a83", "841021": "f37755", @@ -32,7 +26,6 @@ "ada5b3": "111a33", "632910": "2d203c", "f8f9ff": "223657", - "e2e0e3": "e2e0e3", "9c293a": "9e6b77" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/23.json b/public/images/pokemon/variant/23.json index f0f5f749d4d..9edd18b1d5d 100644 --- a/public/images/pokemon/variant/23.json +++ b/public/images/pokemon/variant/23.json @@ -9,8 +9,6 @@ "845210": "6f483e", "ffd66b": "f3f1d4", "e6ad5a": "d6c7a2", - "101010": "101010", - "ffffff": "ffffff", "9c1000": "9e352b", "c54219": "c76740", "f7734a": "e59d59", @@ -26,8 +24,6 @@ "845210": "1d265b", "ffd66b": "4d759b", "e6ad5a": "3b5a87", - "101010": "101010", - "ffffff": "ffffff", "9c1000": "67305a", "c54219": "904864", "f7734a": "a75e6d", diff --git a/public/images/pokemon/variant/230.json b/public/images/pokemon/variant/230.json index 83212a90de2..e7a6095423f 100644 --- a/public/images/pokemon/variant/230.json +++ b/public/images/pokemon/variant/230.json @@ -2,7 +2,6 @@ "1": { "4a5a94": "2a2750", "639cce": "2f4861", - "101010": "101010", "8cbdef": "396979", "cee6f7": "5dac9b", "add6ff": "3e8383", @@ -17,7 +16,6 @@ "2": { "4a5a94": "54133f", "639cce": "b53f49", - "101010": "101010", "8cbdef": "d64b52", "cee6f7": "ffb273", "add6ff": "f27461", diff --git a/public/images/pokemon/variant/231.json b/public/images/pokemon/variant/231.json index ad75f38a1d3..fc21b2003a8 100644 --- a/public/images/pokemon/variant/231.json +++ b/public/images/pokemon/variant/231.json @@ -4,21 +4,17 @@ "add6ef": "e8e8e8", "525294": "4d5271", "9cbdef": "bac4ca", - "101010": "101010", "bd3a31": "4b6aa1", "840000": "394e85", "f76b52": "859abf", - "ffffff": "ffffff", "6b9cce": "97a5b5", - "8c8c8c": "8c8baa", - "d6d6d6": "d6d6d6" + "8c8c8c": "8c8baa" }, "2": { "527bb5": "4f2955", "add6ef": "a56898", "525294": "3a2043", "9cbdef": "814c79", - "101010": "101010", "bd3a31": "cea141", "840000": "b17333", "f76b52": "f1d35b", diff --git a/public/images/pokemon/variant/232.json b/public/images/pokemon/variant/232.json index 97f598a8545..c90b8815809 100644 --- a/public/images/pokemon/variant/232.json +++ b/public/images/pokemon/variant/232.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "6b7373": "7fa0d7", "4a5252": "5f74c7", "3a3a3a": "333a77", @@ -11,8 +10,6 @@ "d6ded6": "f4f4f4", "424242": "2f3441", "738484": "6c7488", - "f9f9f9": "f9f9f9", - "d6d6d6": "d6d6d6", "bdc5c5": "cdd1dc", "707f7f": "b6511d", "bdbdbd": "de913e", @@ -20,7 +17,6 @@ "dedede": "edbb5e" }, "2": { - "101010": "101010", "6b7373": "d17e47", "4a5252": "994e30", "3a3a3a": "6f2219", @@ -31,8 +27,6 @@ "d6ded6": "665263", "424242": "2c1f2e", "738484": "1e1225", - "f9f9f9": "f9f9f9", - "d6d6d6": "d6d6d6", "bdc5c5": "584158", "707f7f": "1d2a54", "bdbdbd": "3b70c3", diff --git a/public/images/pokemon/variant/233.json b/public/images/pokemon/variant/233.json index dd2b7299736..cff3f5d31f1 100644 --- a/public/images/pokemon/variant/233.json +++ b/public/images/pokemon/variant/233.json @@ -4,8 +4,6 @@ "ef5a63": "f8a8cd", "5a3a4a": "d9546f", "ff94b5": "fccee9", - "ffffff": "ffffff", - "101010": "101010", "31739c": "6d224c", "8cd6ff": "9e4971", "4a9cd6": "833462", @@ -19,7 +17,6 @@ "5a3a4a": "31150e", "ff94b5": "a04c27", "ffffff": "ffe4d4", - "101010": "101010", "31739c": "cf8556", "8cd6ff": "ffd9ab", "4a9cd6": "efb787", diff --git a/public/images/pokemon/variant/235.json b/public/images/pokemon/variant/235.json index 1da37a2624d..668c0c7c1dc 100644 --- a/public/images/pokemon/variant/235.json +++ b/public/images/pokemon/variant/235.json @@ -5,16 +5,10 @@ "4a3a10": "431a2e", "6b5a31": "672f44", "adad8c": "b1767f", - "101010": "101010", - "c5c5c5": "c5c5c5", - "ffffff": "ffffff", - "94949c": "94949c", "199c00": "113041", "086300": "091728", "6bde42": "347c78", - "42c519": "1f5259", - "b50000": "b50000", - "f78400": "f78400" + "42c519": "1f5259" }, "2": { "8c8452": "3a3f47", @@ -22,10 +16,6 @@ "4a3a10": "141622", "6b5a31": "262b39", "adad8c": "8a909b", - "101010": "101010", - "c5c5c5": "c5c5c5", - "ffffff": "ffffff", - "94949c": "94949c", "199c00": "111321", "086300": "080811", "6bde42": "272b39", diff --git a/public/images/pokemon/variant/239.json b/public/images/pokemon/variant/239.json index e35d5491405..f7e4cc0a914 100644 --- a/public/images/pokemon/variant/239.json +++ b/public/images/pokemon/variant/239.json @@ -4,9 +4,7 @@ "b56b00": "a83018", "ffce31": "ff844b", "ce8c00": "d44b2c", - "101010": "101010", "a5a5a5": "adadad", - "ffffff": "ffffff", "cecece": "d8d8d8", "6b6b6b": "6e3048", "e6ad19": "f2673d", @@ -17,12 +15,6 @@ "b56b00": "33b571", "ffce31": "6bff9e", "ce8c00": "52ba8b", - "101010": "101010", - "a5a5a5": "a5a5a5", - "ffffff": "ffffff", - "cecece": "cecece", - "6b6b6b": "6b6b6b", - "e6ad19": "53e680", - "313131": "313131" + "e6ad19": "53e680" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/24.json b/public/images/pokemon/variant/24.json index 6faaf4b0c4e..05acdd202cc 100644 --- a/public/images/pokemon/variant/24.json +++ b/public/images/pokemon/variant/24.json @@ -4,9 +4,6 @@ "c5a5ef": "8feae4", "523a7b": "113a53", "a584c5": "30abb3", - "101010": "101010", - "ffffff": "ffffff", - "c5c5c5": "c5c5c5", "9c1000": "aa352b", "f7734a": "e3aa74", "c54219": "c27048", @@ -17,9 +14,6 @@ "c5a5ef": "fff9e5", "523a7b": "875a5f", "a584c5": "eed3b1", - "101010": "101010", - "ffffff": "ffffff", - "c5c5c5": "c5c5c5", "9c1000": "393c81", "f7734a": "6388ac", "c54219": "4f5a98", diff --git a/public/images/pokemon/variant/240.json b/public/images/pokemon/variant/240.json index 06b748f4cb7..aeb798619eb 100644 --- a/public/images/pokemon/variant/240.json +++ b/public/images/pokemon/variant/240.json @@ -3,10 +3,6 @@ "d6523a": "372d49", "ff7b63": "524b6f", "943121": "272034", - "101010": "101010", - "c5c5c5": "c5c5c5", - "73737b": "73737b", - "ffffff": "ffffff", "ffffb5": "f5ad27", "f7d63a": "fb832b", "d6ad00": "db4d19", @@ -16,10 +12,6 @@ "d6523a": "4065b0", "ff7b63": "5398cf", "943121": "303d58", - "101010": "101010", - "c5c5c5": "c5c5c5", - "73737b": "73737b", - "ffffff": "ffffff", "ffffb5": "ffffff", "f7d63a": "eaffff", "d6ad00": "c6edf2", diff --git a/public/images/pokemon/variant/243.json b/public/images/pokemon/variant/243.json index e42b832d153..0a431c7cf27 100644 --- a/public/images/pokemon/variant/243.json +++ b/public/images/pokemon/variant/243.json @@ -2,7 +2,6 @@ "1": { "846ba5": "732c40", "52296b": "481532", - "101010": "101010", "bd8cc5": "b74f57", "6b6b6b": "3c3c4e", "9cd6ff": "ffcb59", @@ -18,7 +17,6 @@ "2": { "846ba5": "dc9779", "52296b": "994d3d", - "101010": "101010", "bd8cc5": "f5d4c0", "6b6b6b": "3c3c4e", "9cd6ff": "ffb23a", diff --git a/public/images/pokemon/variant/245.json b/public/images/pokemon/variant/245.json index da4dd9edf29..36359b042d9 100644 --- a/public/images/pokemon/variant/245.json +++ b/public/images/pokemon/variant/245.json @@ -1,7 +1,6 @@ { "1": { "31428c": "271a56", - "101010": "101010", "7bbdff": "6b62c0", "5a7bd6": "4c4097", "7b5ab5": "bd4530", @@ -18,7 +17,6 @@ }, "2": { "31428c": "854607", - "101010": "101010", "7bbdff": "f5c042", "5a7bd6": "d67f17", "7b5ab5": "863062", diff --git a/public/images/pokemon/variant/246.json b/public/images/pokemon/variant/246.json index b05a319791b..12465da965d 100644 --- a/public/images/pokemon/variant/246.json +++ b/public/images/pokemon/variant/246.json @@ -4,10 +4,8 @@ "4a5a3a": "0b4367", "d6e6ce": "4fa6e0", "adce9c": "4493c7", - "101010": "101010", "bd3a21": "cd8f30", "6b2100": "a86e14", - "ffffff": "ffffff", "ef5229": "efca4f", "ffa55a": "fff69f" }, @@ -16,10 +14,8 @@ "4a5a3a": "a5494d", "d6e6ce": "ecd292", "adce9c": "e5a267", - "101010": "101010", "bd3a21": "67478f", "6b2100": "403266", - "ffffff": "ffffff", "ef5229": "875cdb", "ffa55a": "a56db5" } diff --git a/public/images/pokemon/variant/247.json b/public/images/pokemon/variant/247.json index c21ea3a3c0e..5ca07bb53c7 100644 --- a/public/images/pokemon/variant/247.json +++ b/public/images/pokemon/variant/247.json @@ -2,11 +2,8 @@ "1": { "295a84": "4a5a39", "bde6ff": "dee6cd", - "101010": "101010", "739cc5": "739c62", "8cc5ef": "accd9c", - "adadad": "adadad", - "ffffff": "ffffff", "b54200": "0098fc" }, "2": { diff --git a/public/images/pokemon/variant/248-mega.json b/public/images/pokemon/variant/248-mega.json index 589b3616079..38bd9b9edce 100644 --- a/public/images/pokemon/variant/248-mega.json +++ b/public/images/pokemon/variant/248-mega.json @@ -1,34 +1,34 @@ { "1": { -"4a5a39": "533334", -"821610": "004194", -"942900": "004194", -"d0243b": "006fb3", -"d55200": "0098fc", -"ff3e40": "0098fc", -"f24159": "088a72", -"f55e72": "18b8a0", -"ff6668": "1cd9ff", -"739c62": "915957", -"ff8385": "00e0fc", -"ffa3a4": "00ffc8", -"accd9c": "c78482", -"dee6cd": "dbb1b5" + "4a5a39": "533334", + "821610": "004194", + "942900": "004194", + "d0243b": "006fb3", + "d55200": "0098fc", + "ff3e40": "0098fc", + "f24159": "088a72", + "f55e72": "18b8a0", + "ff6668": "1cd9ff", + "739c62": "915957", + "ff8385": "00e0fc", + "ffa3a4": "00ffc8", + "accd9c": "c78482", + "dee6cd": "dbb1b5" }, "2": { -"4a5a39": "06092f", -"821610": "ee7b06", -"942900": "ee7b06", -"d0243b": "ffa904", -"d55200": "ffa904", -"ff3e40": "ffef76", -"f24159": "ff9224", -"f55e72": "ffba36", -"ff6668": "fff28f", -"739c62": "2c3071", -"ff8385": "fff49a", -"ffa3a4": "fff9ce", -"accd9c": "625695", -"dee6cd": "7068b2" + "4a5a39": "06092f", + "821610": "ee7b06", + "942900": "ee7b06", + "d0243b": "ffa904", + "d55200": "ffa904", + "ff3e40": "ffef76", + "f24159": "ff9224", + "f55e72": "ffba36", + "ff6668": "fff28f", + "739c62": "2c3071", + "ff8385": "fff49a", + "ffa3a4": "fff9ce", + "accd9c": "625695", + "dee6cd": "7068b2" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/248.json b/public/images/pokemon/variant/248.json index a08e0fe55cc..bc35cfd8637 100644 --- a/public/images/pokemon/variant/248.json +++ b/public/images/pokemon/variant/248.json @@ -17,12 +17,8 @@ "2": { "4a5a3a": "06092f", "adce9c": "625695", - "101010": "101010", "dee6ce": "7068b2", "739c63": "2c3071", - "ffffff": "ffffff", - "c5c5c5": "c5c5c5", - "737373": "737373", "942900": "ee7b06", "d65200": "ffa904", "217bbd": "ffa904", diff --git a/public/images/pokemon/variant/251.json b/public/images/pokemon/variant/251.json index a26cc859cff..0abf162a72b 100644 --- a/public/images/pokemon/variant/251.json +++ b/public/images/pokemon/variant/251.json @@ -3,7 +3,6 @@ "73a531": "599b91", "a5de52": "9cc6ae", "528cad": "9b296f", - "101010": "101010", "8cb5ce": "d763a0", "0063b5": "681151", "4a7321": "28696a", @@ -11,14 +10,12 @@ "ffffde": "f4e5d9", "b5c55a": "cbc5af", "deef94": "ddd7c2", - "ffffff": "fff5f5", - "6b7384": "6b7384" + "ffffff": "fff5f5" }, "2": { "73a531": "5f234e", "a5de52": "8c387a", "528cad": "b82053", - "101010": "101010", "8cb5ce": "e33d69", "0063b5": "640d3a", "4a7321": "3f0e2a", diff --git a/public/images/pokemon/variant/255.json b/public/images/pokemon/variant/255.json index 78d2d1d13dd..5a950c8c19f 100644 --- a/public/images/pokemon/variant/255.json +++ b/public/images/pokemon/variant/255.json @@ -3,26 +3,22 @@ "ad8c00": "298084", "efbd31": "34ad90", "f7de6b": "58dfa5", - "000000": "000000", "ad4210": "b93a23", "ff8c31": "ff9039", "e65a21": "e86434", "ffad52": "ffde8e", "7b4a19": "6f1214", - "ffffff": "ffffff", "8c5221": "1d5461" }, "2": { "ad8c00": "550d28", "efbd31": "811c2c", "f7de6b": "ad3633", - "000000": "000000", "ad4210": "b3817d", "ff8c31": "f3e5cf", "e65a21": "d3afa0", "ffad52": "fffef6", "7b4a19": "364464", - "ffffff": "ffffff", "8c5221": "400724" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/256.json b/public/images/pokemon/variant/256.json index 130891974ba..80c0e94444f 100644 --- a/public/images/pokemon/variant/256.json +++ b/public/images/pokemon/variant/256.json @@ -1,16 +1,13 @@ { "1": { "de5a29": "1f9ba4", - "181818": "181818", "ff7b4a": "3dd0b0", "9c3110": "11526f", "9c7329": "a7471f", - "191919": "191919", "efde73": "ffc148", "efbd4a": "f19830", "d63131": "9083aa", "962d0d": "605c8d", - "ffffff": "ffffff", "d05325": "414f7b", "6b6b73": "413d75", "dedece": "9386b8", @@ -21,16 +18,13 @@ }, "2": { "de5a29": "cdb09b", - "181818": "181818", "ff7b4a": "fff7e1", "9c3110": "8a685f", "9c7329": "641835", - "191919": "191919", "efde73": "c4584d", "efbd4a": "962b39", "d63131": "89bed0", "962d0d": "5f7faa", - "ffffff": "ffffff", "d05325": "39487b", "6b6b73": "192132", "dedece": "494f67", diff --git a/public/images/pokemon/variant/257-mega.json b/public/images/pokemon/variant/257-mega.json index e97fd77c50f..c5526ad284c 100644 --- a/public/images/pokemon/variant/257-mega.json +++ b/public/images/pokemon/variant/257-mega.json @@ -4,7 +4,6 @@ "62524a": "55607d", "dedeb4": "f0fbff", "948362": "8095b3", - "010101": "010101", "bdb494": "a8c7da", "832929": "9b422a", "ee6262": "f7ca4b", @@ -23,7 +22,6 @@ "62524a": "5b143d", "dedeb4": "bc474d", "948362": "842446", - "010101": "010101", "bdb494": "a1304d", "832929": "9c7c70", "ee6262": "fffae1", diff --git a/public/images/pokemon/variant/257.json b/public/images/pokemon/variant/257.json index e56213da4a7..7a56c280b91 100644 --- a/public/images/pokemon/variant/257.json +++ b/public/images/pokemon/variant/257.json @@ -1,7 +1,6 @@ { "1": { "b93e3e": "46649c", - "000000": "000000", "bdb594": "a8c7da", "948463": "8095b3", "ee5e5e": "598dc1", diff --git a/public/images/pokemon/variant/261.json b/public/images/pokemon/variant/261.json index ec04e5dbf43..78ff43fa223 100644 --- a/public/images/pokemon/variant/261.json +++ b/public/images/pokemon/variant/261.json @@ -2,7 +2,6 @@ "1": { "636363": "803c2c", "c5c5c5": "d4a172", - "000000": "000000", "a5a5a5": "b26c55", "424242": "380927", "595963": "71231f", @@ -10,15 +9,11 @@ "9c2942": "222d84", "e6193a": "3a56b1", "bd8c42": "a968a1", - "ffffff": "ffffff", - "f7f75a": "c59aaa", - "6b6b84": "6b6b84", - "ff0018": "ff0018" + "f7f75a": "c59aaa" }, "2": { "636363": "24103c", "c5c5c5": "753e93", - "000000": "000000", "a5a5a5": "402067", "424242": "4e9ea3", "595963": "0a0f43", @@ -26,9 +21,6 @@ "9c2942": "182556", "e6193a": "263f74", "bd8c42": "8aa8cd", - "ffffff": "ffffff", - "f7f75a": "bdd9f2", - "6b6b84": "6b6b84", - "ff0018": "ff0018" + "f7f75a": "bdd9f2" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/262.json b/public/images/pokemon/variant/262.json index 3451ee0f16f..f9128d09f4c 100644 --- a/public/images/pokemon/variant/262.json +++ b/public/images/pokemon/variant/262.json @@ -1,6 +1,5 @@ { "1": { - "000000": "000000", "525252": "7a3424", "94949c": "ad5c41", "bdbdc5": "d2975f", @@ -8,16 +7,10 @@ "4d4d4d": "71231f", "4a4a4a": "711956", "de2942": "a32c60", - "f7ef5a": "f7ef5a", - "bd8c42": "bd8c42", "ad1021": "761b51", - "323232": "5a1c15", - "bd4a7b": "bd4a7b", - "ffffff": "ffffff", - "949cad": "949cad" + "323232": "5a1c15" }, "2": { - "000000": "000000", "525252": "230f3b", "94949c": "402067", "bdbdc5": "753e93", @@ -28,9 +21,6 @@ "f7ef5a": "ffb98c", "bd8c42": "d36b58", "ad1021": "45809a", - "323232": "0a0b3d", - "bd4a7b": "bd4a7b", - "ffffff": "ffffff", - "949cad": "949cad" + "323232": "0a0b3d" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/263.json b/public/images/pokemon/variant/263.json index f470554de32..3529755bb82 100644 --- a/public/images/pokemon/variant/263.json +++ b/public/images/pokemon/variant/263.json @@ -3,23 +3,18 @@ "bdad9c": "be94bb", "e6dece": "e1c7dc", "73635a": "481f4e", - "000000": "000000", "b59c8c": "8e588f", "947b6b": "85355a", "5a524a": "3c1332", "424242": "52283f", - "ffffff": "ffffff", "524231": "1795be", "6b5231": "41f3ff", - "212129": "311737", - "a51900": "a51900", - "c5c5bd": "c5c5bd" + "212129": "311737" }, "2": { "bdad9c": "3d2661", "e6dece": "5f4e9c", "73635a": "29155a", - "000000": "000000", "b59c8c": "aebcff", "947b6b": "7e86d2", "5a524a": "1e133e", @@ -28,7 +23,6 @@ "524231": "d0037a", "6b5231": "ff429b", "212129": "31134d", - "a51900": "d0037a", - "c5c5bd": "c5c5bd" + "a51900": "d0037a" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/264.json b/public/images/pokemon/variant/264.json index 54bbcffec10..b6719a37f15 100644 --- a/public/images/pokemon/variant/264.json +++ b/public/images/pokemon/variant/264.json @@ -1,28 +1,22 @@ { "1": { "6b6363": "481f4e", - "000000": "000000", "846b5a": "85355a", "ad9c8c": "be94bb", "decebd": "e1c7dc", "a58c7b": "8e588f", "5a4a3a": "59193d", - "423a21": "423a21", "296b94": "1795be", - "ffffff": "ffffff", "6badc5": "41f3ff", - "94847b": "643369", - "737373": "737373" + "94847b": "643369" }, "2": { "6b6363": "1e133e", - "000000": "000000", "846b5a": "90a2f4", "ad9c8c": "3d2661", "decebd": "5f4e9c", "a58c7b": "535db9", "5a4a3a": "465aab", - "423a21": "423a21", "296b94": "d0037a", "ffffff": "ffe6e2", "6badc5": "ff429b", diff --git a/public/images/pokemon/variant/2670.json b/public/images/pokemon/variant/2670.json index a2a1fde327e..028e17e4966 100644 --- a/public/images/pokemon/variant/2670.json +++ b/public/images/pokemon/variant/2670.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "666161": "516378", "403d3d": "222547", "802d2d": "302a9c", @@ -15,7 +14,6 @@ "fffbfb": "f8f4f4" }, "2": { - "101010": "101010", "666161": "fff9f2", "403d3d": "b5c6c3", "802d2d": "20877a", diff --git a/public/images/pokemon/variant/278.json b/public/images/pokemon/variant/278.json index 201aa0450ab..543b44e764b 100644 --- a/public/images/pokemon/variant/278.json +++ b/public/images/pokemon/variant/278.json @@ -1,7 +1,6 @@ { "0": { "525252": "542b2b", - "000000": "000000", "ffffff": "ecd8d4", "d6cee6": "ba928c", "296b94": "3f4c13", @@ -16,7 +15,6 @@ }, "1": { "525252": "2b3e68", - "000000": "000000", "ffffff": "c7dff4", "d6cee6": "80a2d0", "296b94": "143a72", @@ -31,7 +29,6 @@ }, "2": { "525252": "732a22", - "000000": "000000", "ffffff": "f5e1d1", "d6cee6": "d19e92", "296b94": "5d0803", diff --git a/public/images/pokemon/variant/279.json b/public/images/pokemon/variant/279.json index 5c193f7939b..f33224e222b 100644 --- a/public/images/pokemon/variant/279.json +++ b/public/images/pokemon/variant/279.json @@ -46,4 +46,4 @@ "ced6ef": "d19e92", "31638c": "610f0e" } -} +} \ No newline at end of file diff --git a/public/images/pokemon/variant/282.json b/public/images/pokemon/variant/282.json index 87d890934fa..7b2fcc28f6b 100644 --- a/public/images/pokemon/variant/282.json +++ b/public/images/pokemon/variant/282.json @@ -5,12 +5,10 @@ "8ce68c": "ebc984", "73bd73": "c08f44", "7b8cb5": "d59c80", - "000000": "000000", "efefff": "f8efde", "cecee6": "ffc4a6", "d64a73": "da3e4f", "ff7b94": "ca2033", - "ffffff": "ffffff", "a5b5ce": "d59c80", "84294a": "b80e2f" }, @@ -19,14 +17,8 @@ "b5f794": "5b5790", "8ce68c": "3f427f", "73bd73": "282c5d", - "7b8cb5": "7b8cb5", - "000000": "000000", - "efefff": "efefff", - "cecee6": "cecee6", "d64a73": "d846c1", "ff7b94": "ed50f7", - "ffffff": "ffffff", - "a5b5ce": "a5b5ce", "84294a": "9e2a7c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/285.json b/public/images/pokemon/variant/285.json index ec433b12e77..d23c9adaa31 100644 --- a/public/images/pokemon/variant/285.json +++ b/public/images/pokemon/variant/285.json @@ -1,21 +1,16 @@ { "1": { - "73634a": "73634a", - "5a4a42": "5a4a42", "efd6b5": "efc4b5", - "000000": "000000", "c5a584": "c59584", "94b57b": "b57bad", "c5c594": "c394c5", "849c7b": "9c7b9b", - "f7efd6": "f7efd6", "526b42": "6b425f" }, "2": { "73634a": "575370", "5a4a42": "3e3651", "efd6b5": "e3ded8", - "000000": "000000", "c5a584": "b7ada2", "94b57b": "3e6f96", "c5c594": "6b9ab6", diff --git a/public/images/pokemon/variant/286.json b/public/images/pokemon/variant/286.json index c1908f97269..4a3f8a18157 100644 --- a/public/images/pokemon/variant/286.json +++ b/public/images/pokemon/variant/286.json @@ -5,14 +5,10 @@ "639452": "945291", "84213a": "842155", "f7636b": "f763ca", - "000000": "000000", "bd314a": "bd31b7", "b59c7b": "b5857b", "634a3a": "63573a", - "debd8c": "dea98c", - "fff7bd": "fff7bd", - "f7dead": "f7dead", - "ffffff": "ffffff" + "debd8c": "dea98c" }, "2": { "215231": "102141", @@ -20,13 +16,11 @@ "639452": "244162", "84213a": "43206b", "f7636b": "c763cf", - "000000": "000000", "bd314a": "682a88", "b59c7b": "857367", "634a3a": "6b4b3d", "debd8c": "b7ada2", "fff7bd": "f3eee6", - "f7dead": "e3ded8", - "ffffff": "ffffff" + "f7dead": "e3ded8" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/29.json b/public/images/pokemon/variant/29.json index 1ed0ecf0d99..1e720505aaa 100644 --- a/public/images/pokemon/variant/29.json +++ b/public/images/pokemon/variant/29.json @@ -5,13 +5,10 @@ "d6d6ff": "f28566", "adadce": "c94d40", "efefff": "fed0aa", - "101010": "101010", "bd314a": "2141ac", "ff5242": "386ecf", - "ffffff": "ffffff", "199c94": "668cdd", - "3a6b94": "3750a4", - "dedede": "dedede" + "3a6b94": "3750a4" }, "2": { "424284": "371e5d", @@ -19,12 +16,9 @@ "d6d6ff": "8175d6", "adadce": "6044ac", "efefff": "b0abff", - "101010": "101010", "bd314a": "c54910", "ff5242": "da781a", - "ffffff": "ffffff", "199c94": "e5b471", - "3a6b94": "c77d3a", - "dedede": "dedede" + "3a6b94": "c77d3a" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/290.json b/public/images/pokemon/variant/290.json index d290ab1fef2..ad5c4e2cf9b 100644 --- a/public/images/pokemon/variant/290.json +++ b/public/images/pokemon/variant/290.json @@ -1,7 +1,6 @@ { "0": { "427b52": "0e5502", - "000000": "000000", "b5de73": "77ce53", "6b6b63": "803b0b", "73ad5a": "1e7709", @@ -11,14 +10,12 @@ "fffff7": "fff3ba", "524a4a": "692a05", "cedece": "e5af4f", - "634a42": "634a42", "cebd9c": "f7ecd7", "9c8473": "bfa483", "ad947b": "e8d6b6" }, "1": { "427b52": "7a4f7c", - "000000": "000000", "b5de73": "c3b4c0", "6b6b63": "060931", "73ad5a": "886883", @@ -35,7 +32,6 @@ }, "2": { "427b52": "88134e", - "000000": "000000", "b5de73": "d9537b", "6b6b63": "125460", "73ad5a": "ac265e", diff --git a/public/images/pokemon/variant/292.json b/public/images/pokemon/variant/292.json index 13e73ded788..f4ddafc6ff5 100644 --- a/public/images/pokemon/variant/292.json +++ b/public/images/pokemon/variant/292.json @@ -7,7 +7,6 @@ "5a5242": "261846", "deb573": "5f4c7a", "b5945a": "443859", - "101010": "101010", "f7d684": "8467a4", "94847b": "594684", "736b5a": "1a103b", diff --git a/public/images/pokemon/variant/3-gigantamax.json b/public/images/pokemon/variant/3-gigantamax.json index 9b74b1131ba..ee3f7faa822 100644 --- a/public/images/pokemon/variant/3-gigantamax.json +++ b/public/images/pokemon/variant/3-gigantamax.json @@ -9,14 +9,12 @@ "ff7b73": "712f8f", "de4141": "3f1375", "ffbdbd": "a266b0", - "101010": "101010", "107b6a": "9e1976", "105241": "4f2800", "83de7b": "a37707", "2e5529": "38001c", "5a9c39": "705207", "20b49c": "de3592", - "fdfdfd": "fdfdfd", "5ad5c5": "f062a4" }, "2": { @@ -29,14 +27,12 @@ "ff7b73": "9db042", "de4141": "3c8227", "ffbdbd": "e7e385", - "101010": "101010", "107b6a": "d44300", "105241": "381601", "83de7b": "80ced9", "2e5519": "011c38", "5a9c39": "446b94", "20b49c": "fa8405", - "fdfdfd": "fdfdfd", "5ad5c5": "faa405" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/3.json b/public/images/pokemon/variant/3.json index bdcc30edcbf..c9784ba3382 100644 --- a/public/images/pokemon/variant/3.json +++ b/public/images/pokemon/variant/3.json @@ -7,7 +7,6 @@ "debd29": "078a8f", "bd6b31": "168a69", "de4242": "3f1375", - "101010": "101010", "ffef52": "37d6de", "105242": "190038", "107b6b": "9e1976", @@ -15,8 +14,7 @@ "84de7b": "ff745e", "5ad6c5": "f062a4", "2e5519": "38001c", - "21b59c": "de3592", - "ffffff": "ffffff" + "21b59c": "de3592" }, "2": { "843100": "420514", @@ -26,7 +24,6 @@ "debd29": "a30a66", "bd6b31": "852a41", "de4242": "3c8227", - "101010": "101010", "ffef52": "f75ea8", "105242": "381601", "107b6b": "d44300", @@ -34,7 +31,6 @@ "84de7b": "80ced9", "5ad6c5": "faa405", "2e5519": "011c38", - "21b59c": "fa8405", - "ffffff": "ffffff" + "21b59c": "fa8405" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/30.json b/public/images/pokemon/variant/30.json index d7ebdb40b48..0247dcaae0e 100644 --- a/public/images/pokemon/variant/30.json +++ b/public/images/pokemon/variant/30.json @@ -4,31 +4,23 @@ "c5e6ef": "f28566", "3a5a63": "6b1524", "8cc5ce": "c94d40", - "101010": "101010", "193a73": "3750a4", "1063b5": "131f65", "4a84f7": "668cdd", - "ffffff": "ffffff", "c52110": "2141ac", "ff9c8c": "65a4e7", - "ef4a3a": "386ecf", - "d6d6d6": "d6d6d6", - "848484": "848484" + "ef4a3a": "386ecf" }, "2": { "5a94b5": "402489", "c5e6ef": "8175d6", "3a5a63": "260f4a", "8cc5ce": "6044ac", - "101010": "101010", "193a73": "c77d3a", "1063b5": "883f16", "4a84f7": "e5b471", - "ffffff": "ffffff", "c52110": "c54910", "ff9c8c": "f2ae45", - "ef4a3a": "da781a", - "d6d6d6": "d6d6d6", - "848484": "848484" + "ef4a3a": "da781a" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/300.json b/public/images/pokemon/variant/300.json index f015beb050f..28961c7d218 100644 --- a/public/images/pokemon/variant/300.json +++ b/public/images/pokemon/variant/300.json @@ -2,7 +2,6 @@ "0": { "9c3142": "66054d", "7b6342": "663d58", - "101010": "101010", "f79cb5": "ff5959", "f7dead": "e5ced2", "efbd7b": "cca3b0", @@ -15,7 +14,6 @@ "1": { "9c3142": "46518c", "7b6342": "996b82", - "101010": "101010", "f79cb5": "adcad8", "f7dead": "ffffff", "efbd7b": "e5ced2", @@ -28,7 +26,6 @@ "2": { "9c3142": "661422", "7b6342": "1f304c", - "101010": "101010", "f79cb5": "e58f67", "f7dead": "b2dfff", "efbd7b": "7a94cc", diff --git a/public/images/pokemon/variant/301.json b/public/images/pokemon/variant/301.json index 89f742731c2..fddd9e82273 100644 --- a/public/images/pokemon/variant/301.json +++ b/public/images/pokemon/variant/301.json @@ -3,45 +3,36 @@ "634a7b": "991657", "422963": "66054d", "a573c5": "ff5959", - "000000": "000000", "8452a5": "cc3359", "e6b563": "cca3b0", "73523a": "663d58", "fff7bd": "f2e6e6", - "52525a": "52525a", "ffde8c": "e5ced2", "f7f7de": "ffffff", - "9c9c9c": "9c9c9c", "ce944a": "996b82" }, "1": { "634a7b": "948eb2", "422963": "65597f", "a573c5": "ffffff", - "000000": "000000", "8452a5": "cecee5", "e6b563": "cc7a7a", "73523a": "66283d", "fff7bd": "ffcccc", - "52525a": "52525a", "ffde8c": "ffbfb2", "f7f7de": "ffffff", - "9c9c9c": "9c9c9c", "ce944a": "994c59" }, "2": { "634a7b": "ea9360", "422963": "a84859", "a573c5": "f9f8a4", - "000000": "000000", "8452a5": "efbd7c", "e6b563": "597ccc", "73523a": "1f304c", "fff7bd": "99d4ff", - "52525a": "52525a", "ffde8c": "79c6ff", "f7f7de": "ffffff", - "9c9c9c": "9c9c9c", "ce944a": "3a498e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/302-mega.json b/public/images/pokemon/variant/302-mega.json index b54dc545c4d..254c56b23fc 100644 --- a/public/images/pokemon/variant/302-mega.json +++ b/public/images/pokemon/variant/302-mega.json @@ -5,7 +5,6 @@ "ff7587": "f45abe", "ffa8b5": "ff8fcf", "393952": "123812", - "000000": "000000", "5a4a94": "416a3d", "aca4f6": "b2ca9b", "cc3f7c": "90177a", @@ -20,7 +19,6 @@ "ff7587": "3aa9de", "ffa8b5": "61d6f2", "393952": "580a16", - "000000": "000000", "5a4a94": "7e141c", "aca4f6": "e0604e", "cc3f7c": "093a89", diff --git a/public/images/pokemon/variant/302.json b/public/images/pokemon/variant/302.json index 1f27fd23c2a..f058d698135 100644 --- a/public/images/pokemon/variant/302.json +++ b/public/images/pokemon/variant/302.json @@ -3,7 +3,6 @@ "5a4a94": "416a3d", "ada5f7": "b2ca9b", "3a3a52": "123812", - "000000": "000000", "8c73d6": "86ad74", "735aad": "5d8853", "84c5d6": "e560b7", @@ -19,7 +18,6 @@ "5a4a94": "7e141c", "ada5f7": "e0604e", "3a3a52": "580a16", - "000000": "000000", "8c73d6": "be3933", "735aad": "9f2123", "84c5d6": "8a7ad6", diff --git a/public/images/pokemon/variant/303-mega.json b/public/images/pokemon/variant/303-mega.json index cb0b81b464b..cc6709b1d14 100644 --- a/public/images/pokemon/variant/303-mega.json +++ b/public/images/pokemon/variant/303-mega.json @@ -1,15 +1,11 @@ { "0": { "363636": "55163b", - "101010": "101010", "9ca494": "e175b4", "737373": "c14c82", "525252": "6f264f", - "7b5a29": "7b5a29", "ffc55a": "e4c997", "de9441": "ad8867", - "f8f8f8": "f8f8f8", - "cdcdcd": "cdcdcd", "9c4a6a": "1f194c", "d583ac": "31296a", "732041": "201434", @@ -18,15 +14,11 @@ }, "1": { "363636": "0e313c", - "101010": "101010", "9ca494": "4fa285", "737373": "347c7d", "525252": "193e49", - "7b5a29": "7b5a29", "ffc55a": "d6c491", "de9441": "bc8a52", - "f8f8f8": "f8f8f8", - "cdcdcd": "cdcdcd", "9c4a6a": "c73323", "d583ac": "ff725a", "732041": "162843", @@ -35,15 +27,12 @@ }, "2": { "363636": "271a58", - "101010": "101010", "9ca494": "ba94e6", "737373": "8a62d0", "525252": "332c76", "7b5a29": "706d80", "ffc55a": "cfc8e4", "de9441": "b1a3ca", - "f8f8f8": "f8f8f8", - "cdcdcd": "cdcdcd", "9c4a6a": "a81931", "d583ac": "f04948", "732041": "2b1c3f", diff --git a/public/images/pokemon/variant/303.json b/public/images/pokemon/variant/303.json index c5d389b45f7..0422a837887 100644 --- a/public/images/pokemon/variant/303.json +++ b/public/images/pokemon/variant/303.json @@ -9,11 +9,9 @@ "525252": "285c66", "9c4a6b": "b53a29", "7b5a29": "6b5424", - "cecece": "cecece", "ffde8c": "e9e1b5", "bd638c": "de4a42", - "d684ad": "ff635a", - "ffffff": "ffffff" + "d684ad": "ff635a" }, "2": { "000000": "101010", @@ -25,10 +23,8 @@ "525252": "5f43b1", "9c4a6b": "b53a29", "7b5a29": "706d80", - "cecece": "cecece", "ffde8c": "f3e4f7", "bd638c": "de4a42", - "d684ad": "ff635a", - "ffffff": "ffffff" + "d684ad": "ff635a" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/304.json b/public/images/pokemon/variant/304.json index 7b03cc133f1..e42b49f5e55 100644 --- a/public/images/pokemon/variant/304.json +++ b/public/images/pokemon/variant/304.json @@ -5,7 +5,6 @@ "8c949c": "bca88c", "3a3a4a": "122919", "ffffff": "fff2e5", - "000000": "000000", "316b9c": "8acc0e", "6bbdff": "d6ff42", "525263": "2c4531", @@ -17,7 +16,6 @@ "8c949c": "686dc0", "3a3a4a": "371219", "ffffff": "cdd9fa", - "000000": "000000", "316b9c": "e9a217", "6bbdff": "ffcf47", "525263": "611f26", @@ -29,7 +27,6 @@ "8c949c": "a45f34", "3a3a4a": "192c45", "ffffff": "ffcc7d", - "000000": "000000", "316b9c": "05b1ad", "6bbdff": "2aebcf", "525263": "2c4368", diff --git a/public/images/pokemon/variant/305.json b/public/images/pokemon/variant/305.json index 13ceb93336c..d4b59c61843 100644 --- a/public/images/pokemon/variant/305.json +++ b/public/images/pokemon/variant/305.json @@ -3,7 +3,6 @@ "6b6b7b": "6c5440", "7b8494": "947d63", "ffffff": "fff2e5", - "000000": "000000", "c5ced6": "cbc4a2", "424a52": "825d3f", "9c9cad": "bca88c", @@ -19,7 +18,6 @@ "6b6b7b": "2b265d", "7b8494": "3d3c8c", "ffffff": "cdd9fa", - "000000": "000000", "c5ced6": "91a1e3", "424a52": "433f93", "9c9cad": "686dc0", @@ -35,7 +33,6 @@ "6b6b7b": "722f15", "7b8494": "89441f", "ffffff": "ffcc7d", - "000000": "000000", "c5ced6": "d2954e", "424a52": "7c3619", "9c9cad": "a45f34", diff --git a/public/images/pokemon/variant/306-mega.json b/public/images/pokemon/variant/306-mega.json index d729c252e2d..a36e49283b6 100644 --- a/public/images/pokemon/variant/306-mega.json +++ b/public/images/pokemon/variant/306-mega.json @@ -2,7 +2,6 @@ "0": { "52524a": "15321e", "6a6a6a": "224228", - "101010": "101010", "5a5a62": "4b382a", "acacac": "69ad6c", "838394": "a48d76", @@ -10,14 +9,11 @@ "8b8b8b": "3e6244", "cdcdcd": "cbc4a2", "a4a4ac": "bca88c", - "6abdff": "ff78fa", - "9c3141": "9c3141", - "de5252": "de5252" + "6abdff": "ff78fa" }, "1": { "52524a": "47121b", "6a6a6a": "6e1e26", - "101010": "101010", "5a5a62": "2b265d", "acacac": "d4857c", "838394": "3d3c8c", @@ -32,7 +28,6 @@ "2": { "52524a": "0e213a", "6a6a6a": "1d365e", - "101010": "101010", "5a5a62": "722f15", "acacac": "7d95bf", "838394": "833d19", @@ -40,8 +35,6 @@ "8b8b8b": "385594", "cdcdcd": "d48e3c", "a4a4ac": "a45f34", - "6abdff": "2aebcf", - "9c3141": "9c3141", - "de5252": "de5252" + "6abdff": "2aebcf" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/306.json b/public/images/pokemon/variant/306.json index 931059f334b..935cb607740 100644 --- a/public/images/pokemon/variant/306.json +++ b/public/images/pokemon/variant/306.json @@ -2,7 +2,6 @@ "0": { "848494": "947d63", "5a5a63": "6c5440", - "000000": "000000", "ffffff": "fff2e5", "cecece": "cbc4a2", "a5a5ad": "bca88c", @@ -17,7 +16,6 @@ "1": { "848494": "3d3c8c", "5a5a63": "2b265d", - "000000": "000000", "ffffff": "cdd9fa", "cecece": "91a1e3", "a5a5ad": "686dc0", @@ -32,7 +30,6 @@ "2": { "848494": "89441f", "5a5a63": "722f15", - "000000": "000000", "ffffff": "ffcc7d", "cecece": "d48e3c", "a5a5ad": "a45f34", diff --git a/public/images/pokemon/variant/307.json b/public/images/pokemon/variant/307.json index d3e6a2437f1..2037cf72054 100644 --- a/public/images/pokemon/variant/307.json +++ b/public/images/pokemon/variant/307.json @@ -1,34 +1,25 @@ { "1": { "7b6b6b": "7a5f5f", - "000000": "000000", "e6dede": "deccc3", "b5adad": "9f8383", - "4a4242": "4a4242", - "ffffff": "ffffff", "3a4a5a": "5a2859", "b5d6ff": "f4a8c8", "6bcee6": "ce7bb0", "d65252": "d65287", - "84424a": "84424a", "3a84b5": "7e4377", - "5aa5ce": "b95ba1", - "d65273": "d65273" + "5aa5ce": "b95ba1" }, "2": { "7b6b6b": "314b76", - "000000": "000000", "e6dede": "c2cfdb", "b5adad": "6f89aa", "4a4242": "1e2f52", - "ffffff": "ffffff", "3a4a5a": "113926", "b5d6ff": "7edfb7", "6bcee6": "66c3a3", "d65252": "c067c7", - "84424a": "84424a", "3a84b5": "375a47", - "5aa5ce": "579578", - "d65273": "d65273" + "5aa5ce": "579578" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/308-mega.json b/public/images/pokemon/variant/308-mega.json index 6e8e6fee4d3..556a06deebf 100644 --- a/public/images/pokemon/variant/308-mega.json +++ b/public/images/pokemon/variant/308-mega.json @@ -1,7 +1,6 @@ { "1": { "83414a": "59141d", - "101010": "101010", "8b838b": "5a4357", "b44a5a": "83272c", "e6738b": "a53835", @@ -13,12 +12,10 @@ "a47329": "722966", "f6de83": "ee9bd5", "eebd5a": "ce5cb6", - "00b4e0": "efa360", - "fcfcff": "fcfcff" + "00b4e0": "efa360" }, "2": { "83414a": "461f5d", - "101010": "101010", "8b838b": "445a7e", "b44a5a": "633971", "e6738b": "7d5187", @@ -30,7 +27,6 @@ "a47329": "205a9e", "f6de83": "5abbef", "eebd5a": "3a8dca", - "00b4e0": "3dc7b6", - "fcfcff": "fcfcff" + "00b4e0": "3dc7b6" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/308.json b/public/images/pokemon/variant/308.json index 6f974743a6d..dd647a36e72 100644 --- a/public/images/pokemon/variant/308.json +++ b/public/images/pokemon/variant/308.json @@ -1,7 +1,6 @@ { "2": { "84424a": "461f5d", - "101010": "101010", "e6738c": "7d5187", "ef9ca5": "a37aac", "ce5a73": "71467d", @@ -13,7 +12,6 @@ "b54a5a": "633971", "f7de84": "5abbef", "efbd5a": "3a8dca", - "ffffff": "ffffff", "a57329": "205a9e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/309.json b/public/images/pokemon/variant/309.json index 1a0ff287a78..5eb43b65611 100644 --- a/public/images/pokemon/variant/309.json +++ b/public/images/pokemon/variant/309.json @@ -2,30 +2,24 @@ "1": { "846b42": "a50d24", "ffef42": "ff4039", - "101010": "101010", "639c63": "1a3269", "3a5a52": "091545", "b5ef9c": "6692c4", "84d67b": "3e6194", "cea53a": "d11a2d", "63bd63": "314f86", - "bdbdc5": "bdbdc5", - "ffffff": "ffffff", "844a63": "73033e", "e66ba5": "a40e49" }, "2": { "846b42": "b818ab", "ffef42": "ef60c5", - "101010": "101010", "639c63": "a78ab3", "3a5a52": "593c6c", "b5ef9c": "f9e7ee", "84d67b": "d5c1d9", "cea53a": "d03ab2", "63bd63": "c4abcb", - "bdbdc5": "bdbdc5", - "ffffff": "ffffff", "844a63": "5f2971", "e66ba5": "9954a4" } diff --git a/public/images/pokemon/variant/31.json b/public/images/pokemon/variant/31.json index 53f16a10671..77fe31d599d 100644 --- a/public/images/pokemon/variant/31.json +++ b/public/images/pokemon/variant/31.json @@ -4,27 +4,18 @@ "5ab5ce": "bd94c5", "314a4a": "5f366d", "9cd6de": "eed3f3", - "101010": "101010", "c5ad5a": "c5c5a4", "735a29": "73735a", - "ffffff": "ffffff", - "d6cece": "d6cece", - "a52942": "a52942", "efe6a5": "ffffff", - "ce6b6b": "ce6b6b", - "e6ce8c": "e6e6d5", - "ff9c8c": "ff9c8c" + "e6ce8c": "e6e6d5" }, "1": { "638cad": "88241f", "5ab5ce": "be4234", "314a4a": "441327", "9cd6de": "e58060", - "101010": "101010", "c5ad5a": "c29f9a", "735a29": "734b48", - "ffffff": "ffffff", - "d6cece": "d6cece", "a52942": "6c1a33", "efe6a5": "ffede7", "ce6b6b": "b34d28", @@ -36,11 +27,8 @@ "5ab5ce": "5f4897", "314a4a": "210d3b", "9cd6de": "8770c7", - "101010": "101010", "c5ad5a": "eab56b", "735a29": "ad5923", - "ffffff": "ffffff", - "d6cece": "d6cece", "a52942": "1c3666", "efe6a5": "fff6d6", "ce6b6b": "445fd7", diff --git a/public/images/pokemon/variant/310-mega.json b/public/images/pokemon/variant/310-mega.json index ad22fc10dd0..e17f406097b 100644 --- a/public/images/pokemon/variant/310-mega.json +++ b/public/images/pokemon/variant/310-mega.json @@ -1,12 +1,10 @@ { "1": { "8f6841": "630013", - "101010": "101010", "fff06d": "d4302a", "d0a446": "a6101a", "3d4a75": "0d1843", "b50b0b": "c0610e", - "fcfcfc": "fcfcfc", "4b75a1": "1a3269", "f44242": "ffc058", "52a8d4": "3e6194", @@ -15,12 +13,10 @@ }, "2": { "8f6841": "810040", - "101010": "101010", "fff06d": "e545b6", "d0a446": "c32574", "3d4a75": "3f5476", "b50b0b": "4a0698", - "fcfcfc": "fcfcfc", "4b75a1": "6f8caa", "f44242": "893edf", "52a8d4": "c1ddeb", diff --git a/public/images/pokemon/variant/310.json b/public/images/pokemon/variant/310.json index a41c1e0b66d..40110b45014 100644 --- a/public/images/pokemon/variant/310.json +++ b/public/images/pokemon/variant/310.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "736352": "550010", "ffef63": "d7231c", "c5ad5a": "9b0c24", @@ -10,13 +9,10 @@ "639cc5": "284781", "5a84ad": "1a3269", "ce2121": "c0610e", - "ffffff": "ffffff", "ff7373": "ffc058", - "94cede": "5e8fb8", - "bdbde6": "bdbde6" + "94cede": "5e8fb8" }, "2": { - "101010": "101010", "736352": "810040", "ffef63": "e545b6", "c5ad5a": "c32574", @@ -26,9 +22,7 @@ "639cc5": "c4bfd9", "5a84ad": "a399bd", "ce2121": "893edf", - "ffffff": "ffffff", "ff7373": "9663ef", - "94cede": "e2e7f9", - "bdbde6": "bdbde6" + "94cede": "e2e7f9" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/311.json b/public/images/pokemon/variant/311.json index 4371be50e3b..474932256f9 100644 --- a/public/images/pokemon/variant/311.json +++ b/public/images/pokemon/variant/311.json @@ -3,36 +3,29 @@ "b53131": "c24e9e", "de4a42": "e070a9", "ef8484": "f89bc2", - "101010": "101010", "ffefb5": "feda99", "7b6352": "c08242", "e6c573": "ebb657", - "b59c63": "c08242", - "ffffff": "ffffff", - "ad4229": "ad4229" + "b59c63": "c08242" }, "1": { "b53131": "b7653c", "de4a42": "d17e4d", "ef8484": "efa772", - "101010": "101010", "ffefb5": "e9f5ff", "7b6352": "7e89bc", "e6c573": "becef1", "b59c63": "7e89bc", - "ffffff": "ffffff", "ad4229": "ac4b1b" }, "2": { "b53131": "b7ac55", "de4a42": "e2dba3", "ef8484": "fbf6e0", - "101010": "101010", "ffefb5": "be4637", "7b6352": "620b05", "e6c573": "891e32", "b59c63": "620b05", - "ffffff": "ffffff", "ad4229": "220400" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/312.json b/public/images/pokemon/variant/312.json index d55b0f800de..8dbb8503a8c 100644 --- a/public/images/pokemon/variant/312.json +++ b/public/images/pokemon/variant/312.json @@ -2,12 +2,10 @@ "1": { "4252de": "533bb0", "739cf7": "c5ade5", - "101010": "101010", "5a84ef": "8f6cd0", "ffefb5": "d7f1ff", "7b7352": "74acac", "b59c63": "93c6da", - "ffffff": "ffffff", "e6c573": "b4dfe5", "a52921": "533bb0", "d64a5a": "8f6cd0" @@ -15,12 +13,10 @@ "2": { "4252de": "7cc5a5", "739cf7": "e6f8ee", - "101010": "101010", "5a84ef": "c4ddd2", "ffefb5": "475aad", "7b7352": "031426", "b59c63": "011f45", - "ffffff": "ffffff", "e6c573": "2e3a7f", "a52921": "031426", "d64a5a": "e6f8ee" diff --git a/public/images/pokemon/variant/315.json b/public/images/pokemon/variant/315.json index 4fb39ab46d1..cb4ffeb75b2 100644 --- a/public/images/pokemon/variant/315.json +++ b/public/images/pokemon/variant/315.json @@ -4,7 +4,6 @@ "3a5229": "0b2337", "a5314a": "9c5910", "a5de73": "4d8393", - "000000": "000000", "f75a84": "d28f31", "ffa5bd": "efc754", "73c55a": "215569", @@ -21,7 +20,6 @@ "3a5229": "2f1c52", "a5314a": "9c2407", "a5de73": "9e76bb", - "000000": "000000", "f75a84": "cb5a1b", "ffa5bd": "ec883b", "73c55a": "764f9c", diff --git a/public/images/pokemon/variant/320.json b/public/images/pokemon/variant/320.json index 51967d7420d..a1e4101e6c1 100644 --- a/public/images/pokemon/variant/320.json +++ b/public/images/pokemon/variant/320.json @@ -5,12 +5,8 @@ "4a84b5": "ce323d", "315a94": "a4172f", "21314a": "510019", - "000000": "000000", - "b5bdc5": "b5bdc5", "6b634a": "6c3f51", - "ffffff": "ffffff", "efd6a5": "ffe6f8", - "848c9c": "848c9c", "ffefce": "ffeef7", "ceb584": "cba6b8", "9c8c63": "986a7a" @@ -21,12 +17,8 @@ "4a84b5": "503769", "315a94": "34224b", "21314a": "1a0a30", - "000000": "000000", - "b5bdc5": "b5bdc5", "6b634a": "4d4056", - "ffffff": "ffffff", "efd6a5": "eed9ef", - "848c9c": "848c9c", "ffefce": "fcebf6", "ceb584": "b7a3bf", "9c8c63": "8c7897" diff --git a/public/images/pokemon/variant/321.json b/public/images/pokemon/variant/321.json index 946b3d5278a..97c17c6df7d 100644 --- a/public/images/pokemon/variant/321.json +++ b/public/images/pokemon/variant/321.json @@ -10,9 +10,7 @@ "d6cede": "d3b5c4", "94adff": "f5796d", "524a4a": "5c263d", - "efe6ff": "ffe6f8", - "101010": "101010", - "29527b": "29527b" + "efe6ff": "ffe6f8" }, "2": { "293a9c": "22123a", @@ -25,8 +23,6 @@ "d6cede": "eed9ef", "94adff": "b484ce", "524a4a": "563564", - "efe6ff": "fcebf6", - "101010": "101010", - "29527b": "29527b" + "efe6ff": "fcebf6" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/327.json b/public/images/pokemon/variant/327.json index 14d757e1002..a206d228e4b 100644 --- a/public/images/pokemon/variant/327.json +++ b/public/images/pokemon/variant/327.json @@ -2,7 +2,6 @@ "1": { "7b4231": "0a1b2e", "e6d6a5": "b2dcd7", - "101010": "101010", "735242": "122c3b", "cea573": "6ca9ac", "e66373": "df6341", @@ -13,7 +12,6 @@ "2": { "7b4231": "522014", "e6d6a5": "be5f3c", - "101010": "101010", "735242": "52180f", "cea573": "93381f", "e66373": "de625a", diff --git a/public/images/pokemon/variant/328.json b/public/images/pokemon/variant/328.json index 667a4f50828..23403188ba8 100644 --- a/public/images/pokemon/variant/328.json +++ b/public/images/pokemon/variant/328.json @@ -4,25 +4,17 @@ "ff947b": "ffffbc", "ef7342": "c9da97", "734242": "254226", - "212121": "212121", - "292929": "292929", "cecec5": "e99339", - "ffffff": "ffffff", "a5ada5": "bc6427", - "848484": "89370b", - "424231": "424231" + "848484": "89370b" }, "2": { "c55a4a": "3e9cb7", "ff947b": "84f6e4", "ef7342": "5dd7db", "734242": "17465e", - "212121": "212121", - "292929": "292929", "cecec5": "e4a056", - "ffffff": "ffffff", "a5ada5": "cd7537", - "848484": "a84e20", - "424231": "424231" + "848484": "a84e20" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/329.json b/public/images/pokemon/variant/329.json index 48f3d8d04d6..25117a4e0d4 100644 --- a/public/images/pokemon/variant/329.json +++ b/public/images/pokemon/variant/329.json @@ -9,8 +9,6 @@ "737352": "1e4320", "bdad7b": "89af58", "e6d68c": "b6cd74", - "bdbdde": "bdbdde", - "ffffff": "ffffff", "ffffa5": "f0f088", "94de84": "fdfb89" } diff --git a/public/images/pokemon/variant/330.json b/public/images/pokemon/variant/330.json index 71dfe226dfc..9d7bde24554 100644 --- a/public/images/pokemon/variant/330.json +++ b/public/images/pokemon/variant/330.json @@ -3,13 +3,11 @@ "84293a": "752d0c", "315a5a": "7a4205", "de6373": "e99339", - "101010": "101010", "6ba573": "d8b430", "5a7b52": "8b6009", "ce3a4a": "bc6427", "94d69c": "f6e85f", "b5de73": "e4ee9e", - "ffffff": "ffffff", "ffa5b5": "f5cd2d", "8ca552": "b3c46a", "84bd63": "8aa963", @@ -20,13 +18,11 @@ "84293a": "a84e20", "315a5a": "171997", "de6373": "f79021", - "101010": "101010", "6ba573": "465fd4", "5a7b52": "2836af", "ce3a4a": "cd7537", "94d69c": "80a1f5", "b5de73": "94e3ff", - "ffffff": "ffffff", "ffa5b5": "ffd52c", "8ca552": "4dabe8", "84bd63": "3587a9", diff --git a/public/images/pokemon/variant/333.json b/public/images/pokemon/variant/333.json index ca25669dfcb..a3df7bf0e4c 100644 --- a/public/images/pokemon/variant/333.json +++ b/public/images/pokemon/variant/333.json @@ -7,9 +7,7 @@ "cecee6": "5251bd", "7bceff": "e9d9fa", "63ade6": "cab1ec", - "101010": "101010", - "848494": "392166", - "5a5a73": "5a5a73" + "848494": "392166" }, "2": { "9c9cc5": "bf6744", @@ -19,8 +17,6 @@ "cecee6": "eb9d6a", "7bceff": "ff9ebd", "63ade6": "e677a5", - "101010": "101010", - "848494": "892f26", - "5a5a73": "5a5a73" + "848494": "892f26" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/334-mega.json b/public/images/pokemon/variant/334-mega.json index dff8102c90b..67a27b7e7a8 100644 --- a/public/images/pokemon/variant/334-mega.json +++ b/public/images/pokemon/variant/334-mega.json @@ -11,7 +11,6 @@ "c1e8f4": "ff93ac", "deadc4": "c63057", "a4889f": "7c103a", - "ffc5ee": "e7536d", - "101010": "101010" + "ffc5ee": "e7536d" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/336.json b/public/images/pokemon/variant/336.json index bcdd68e2035..45fb50d25eb 100644 --- a/public/images/pokemon/variant/336.json +++ b/public/images/pokemon/variant/336.json @@ -9,11 +9,9 @@ "3a4252": "4c2e57", "735a94": "908ea4", "a573e6": "d5cce0", - "000000": "000000", "631919": "20525a", "ad423a": "2d6a77", "d6524a": "108bac", - "ffffff": "ffffff", "de4252": "60bdd6" }, "2": { @@ -26,11 +24,9 @@ "3a4252": "acb4cd", "735a94": "b43952", "a573e6": "e6628b", - "000000": "000000", "631919": "192121", "ad423a": "293131", "d6524a": "5a6262", - "ffffff": "ffffff", "de4252": "8b9494" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/337.json b/public/images/pokemon/variant/337.json index 4681d4cd48d..bb48121d2b8 100644 --- a/public/images/pokemon/variant/337.json +++ b/public/images/pokemon/variant/337.json @@ -5,7 +5,6 @@ "efde8c": "8396a8", "846b42": "161617", "cebd6b": "505c71", - "101010": "101010", "3a423a": "20282b", "841029": "611267", "d65a73": "ec40c7", @@ -17,7 +16,6 @@ "efde8c": "a63c22", "846b42": "2f0616", "cebd6b": "8a1211", - "101010": "101010", "3a423a": "341413", "841029": "08adad", "d65a73": "73ffff", diff --git a/public/images/pokemon/variant/338.json b/public/images/pokemon/variant/338.json index d511e24c4a3..827850a08bf 100644 --- a/public/images/pokemon/variant/338.json +++ b/public/images/pokemon/variant/338.json @@ -1,7 +1,6 @@ { "1": { "634a19": "2b272d", - "101010": "101010", "f7e663": "8d8b7f", "deb519": "605a4a", "c59442": "404042", @@ -16,7 +15,6 @@ }, "2": { "634a19": "80849a", - "101010": "101010", "f7e663": "dbe4ee", "deb519": "b1becb", "c59442": "96a2ae", diff --git a/public/images/pokemon/variant/339.json b/public/images/pokemon/variant/339.json index fb1ecc7e5b7..a1040be47d3 100644 --- a/public/images/pokemon/variant/339.json +++ b/public/images/pokemon/variant/339.json @@ -3,7 +3,6 @@ "315a84": "764c27", "1073ad": "8f612a", "31b5e6": "bba665", - "000000": "000000", "63cef7": "ebd48e", "293142": "3e1e1e", "525252": "322c22", @@ -16,9 +15,7 @@ "315a84": "402769", "1073ad": "762c9f", "31b5e6": "ff7bcd", - "000000": "000000", "63cef7": "fbabcc", - "293142": "293142", "525252": "413aad", "d6d6de": "aaffd5", "bdbdc5": "5bd5d5", diff --git a/public/images/pokemon/variant/340.json b/public/images/pokemon/variant/340.json index e53a744da32..d6fc747d6f9 100644 --- a/public/images/pokemon/variant/340.json +++ b/public/images/pokemon/variant/340.json @@ -6,14 +6,12 @@ "29314a": "302322", "84deff": "e27f9f", "73ade6": "bd5f55", - "000000": "000000", "3a4a9c": "443636", "637bce": "856d6d", "4263b5": "655050", "adb584": "d7ac74", "6384bd": "885b57", "7bb5e6": "885b57", - "ffffff": "ffffff", "ce4a5a": "9360c1" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/35.json b/public/images/pokemon/variant/35.json index c229263e3d7..f00e064f41a 100644 --- a/public/images/pokemon/variant/35.json +++ b/public/images/pokemon/variant/35.json @@ -6,10 +6,8 @@ "ffd6bd": "c7a1e4", "5a3121": "20475b", "9c8473": "72899d", - "101010": "101010", "ffadad": "9786e3", "949494": "40496b", - "ffffff": "ffffff", "ef423a": "ed9abb", "b53a29": "a14795" } diff --git a/public/images/pokemon/variant/351-rainy.json b/public/images/pokemon/variant/351-rainy.json index 426db252603..27494952faa 100644 --- a/public/images/pokemon/variant/351-rainy.json +++ b/public/images/pokemon/variant/351-rainy.json @@ -1,16 +1,11 @@ { "0": { "526384": "527384", - "8ccede": "8ccede", - "84b5c5": "84b5c5", - "3a425a": "3a425a", - "ffffff": "ffffff", "6373bd": "379aa9", "94b5ce": "5fd4b5", "738cd6": "48c2b4", "ceeff7": "79ff5e", "5a5a52": "4f555a", - "191919": "191919", "b5c5de": "85de7e", "c5c5c5": "9db4c5", "948c94": "6b8494" diff --git a/public/images/pokemon/variant/351-snowy.json b/public/images/pokemon/variant/351-snowy.json index a5d57b3d9b0..bb28819e69c 100644 --- a/public/images/pokemon/variant/351-snowy.json +++ b/public/images/pokemon/variant/351-snowy.json @@ -1,17 +1,10 @@ { "0": { - "73a58c": "73a58c", "bde6e6": "bee3e6", - "8ccead": "8ccead", - "29523a": "29523a", - "52736b": "52736b", - "191919": "191919", "634a73": "4a4a73", "8c73d6": "738cd6", "c5b5ff": "f7ff7e", "7b52bd": "5260bd", - "4a524a": "4a524a", - "ffffff": "ffffff", "9c9cc5": "c8c87a" }, "1": { @@ -20,14 +13,10 @@ "8ccead": "c4dcdc", "29523a": "335c68", "52736b": "688e94", - "191919": "191919", "634a73": "1f2567", "8c73d6": "3f59a0", - "c5b5ff": "c5b5ff", "7b52bd": "323e85", - "4a524a": "2f3355", - "ffffff": "ffffff", - "9c9cc5": "9c9cc5" + "4a524a": "2f3355" }, "2": { "73a58c": "245b68", @@ -35,13 +24,11 @@ "8ccead": "47989e", "29523a": "15364b", "52736b": "5e98a5", - "191919": "191919", "634a73": "2f4954", "8c73d6": "b6e7e8", "c5b5ff": "535c85", "7b52bd": "7eafbf", "4a524a": "27255c", - "ffffff": "ffffff", "9c9cc5": "464d85" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/351-sunny.json b/public/images/pokemon/variant/351-sunny.json index bbee6a647bf..a35a050752d 100644 --- a/public/images/pokemon/variant/351-sunny.json +++ b/public/images/pokemon/variant/351-sunny.json @@ -6,7 +6,6 @@ "ffffff": "f0dee7", "d6844a": "d6994a", "ff9c42": "ff566c", - "191919": "191919", "ef7b4a": "ff566c", "fff76b": "ffb282", "ce5a4a": "bf4b6a", diff --git a/public/images/pokemon/variant/352.json b/public/images/pokemon/variant/352.json index a265711a49c..24e7d7960b9 100644 --- a/public/images/pokemon/variant/352.json +++ b/public/images/pokemon/variant/352.json @@ -2,24 +2,20 @@ "0": { "8c7b5a": "824c0b", "42635a": "296161", - "000000": "000000", "f7ef7b": "f7dd7b", "5abd73": "5db5a8", "5a9473": "418b87", "dec55a": "e5b740", "bda552": "cd9a2b", - "c5de7b": "c5de7b", "7bd684": "7bd6b4", "a5ef9c": "9cefbc", "a54284": "296389", "73315a": "0e3354", - "d663ad": "54a3ca", - "ffffff": "ffffff" + "d663ad": "54a3ca" }, "1": { "8c7b5a": "7b2577", "42635a": "762f0f", - "000000": "000000", "f7ef7b": "ed7cd8", "5abd73": "c98640", "5a9473": "a7612a", @@ -30,13 +26,11 @@ "a5ef9c": "ffd577", "a54284": "3d48b2", "73315a": "202065", - "d663ad": "8597d6", - "ffffff": "ffffff" + "d663ad": "8597d6" }, "2": { "8c7b5a": "307855", "42635a": "58214c", - "000000": "000000", "f7ef7b": "affec6", "5abd73": "d775b5", "5a9473": "b45599", @@ -47,7 +41,6 @@ "a5ef9c": "ffd2ee", "a54284": "64152b", "73315a": "400e2a", - "d663ad": "ab2f43", - "ffffff": "ffffff" + "d663ad": "ab2f43" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/353.json b/public/images/pokemon/variant/353.json index 09a77ba1f2b..c3ba675384e 100644 --- a/public/images/pokemon/variant/353.json +++ b/public/images/pokemon/variant/353.json @@ -1,7 +1,6 @@ { "1": { "635a8c": "9c4572", - "000000": "000000", "a5add6": "e2a8b2", "8484ad": "d57b96", "3a4a7b": "5c203e", @@ -17,7 +16,6 @@ }, "2": { "635a8c": "487c5d", - "000000": "000000", "a5add6": "b8c2a8", "8484ad": "93aa7f", "3a4a7b": "1d4547", diff --git a/public/images/pokemon/variant/354-mega.json b/public/images/pokemon/variant/354-mega.json index a781dfe624c..25e03fcfe31 100644 --- a/public/images/pokemon/variant/354-mega.json +++ b/public/images/pokemon/variant/354-mega.json @@ -3,7 +3,6 @@ "4d464f": "592145", "523900": "361a2d", "7c777d": "934861", - "010101": "010101", "d59c39": "7d656d", "eebd5a": "b78d90", "7b5a29": "624858", @@ -12,14 +11,12 @@ "918c92": "b0697b", "d74477": "37838b", "ea7bb6": "73bdbd", - "f9f9f9": "f9f9f9", "80313d": "1c4d5d" }, "2": { "4d464f": "5b777b", "523900": "151433", "7c777d": "9cbf81", - "010101": "010101", "d59c39": "3b3d54", "eebd5a": "4d4f5b", "7b5a29": "292941", diff --git a/public/images/pokemon/variant/354.json b/public/images/pokemon/variant/354.json index f51713573a2..50a835ce22b 100644 --- a/public/images/pokemon/variant/354.json +++ b/public/images/pokemon/variant/354.json @@ -4,11 +4,9 @@ "3a3142": "2e0920", "9c9ca5": "934861", "7b7b84": "6c2f4c", - "000000": "000000", "b5adbd": "b0697b", "ad293a": "00667f", "c5425a": "1697a6", - "ffffff": "ffffff", "e66373": "6bc1c9", "523a00": "361a2d", "a57b10": "715568", @@ -21,7 +19,6 @@ "3a3142": "2b454a", "9c9ca5": "9ed18a", "7b7b84": "84bd95", - "000000": "000000", "b5adbd": "cbeab9", "ad293a": "4f0209", "c5425a": "751a1c", diff --git a/public/images/pokemon/variant/357.json b/public/images/pokemon/variant/357.json index a731ebf1aed..00bcf93bbde 100644 --- a/public/images/pokemon/variant/357.json +++ b/public/images/pokemon/variant/357.json @@ -5,7 +5,6 @@ "52ad52": "f5c266", "3a8c4a": "e58b48", "6bc56b": "ffeeae", - "ffffff": "ffffff", "523a31": "754a30", "947352": "eeccab", "b5946b": "ffefd5", @@ -18,12 +17,10 @@ "ffff6b": "b5feff" }, "2": { - "000000": "000000", "216321": "101121", "52ad52": "2d3c5c", "3a8c4a": "1f2547", "6bc56b": "48637c", - "ffffff": "ffffff", "523a31": "28345c", "947352": "45899e", "b5946b": "78c9c9", diff --git a/public/images/pokemon/variant/358.json b/public/images/pokemon/variant/358.json index fcca3087804..918899dd73a 100644 --- a/public/images/pokemon/variant/358.json +++ b/public/images/pokemon/variant/358.json @@ -5,7 +5,6 @@ "ffe694": "faedcd", "ffd65a": "ebd4b0", "000000": "101010", - "ffffff": "ffffff", "424a6b": "29346b", "c5e6ff": "afadcd", "9cc5e6": "888ab1", @@ -21,7 +20,6 @@ "ffe694": "f4c89d", "ffd65a": "ee9b65", "000000": "101010", - "ffffff": "ffffff", "424a6b": "5b4950", "c5e6ff": "e8d6d6", "9cc5e6": "c29ea6", diff --git a/public/images/pokemon/variant/36.json b/public/images/pokemon/variant/36.json index 81d6431641d..c307da0c807 100644 --- a/public/images/pokemon/variant/36.json +++ b/public/images/pokemon/variant/36.json @@ -2,7 +2,6 @@ "1": { "52423a": "335566", "de6363": "6638a6", - "101010": "101010", "7b6b63": "617c91", "ffc5b5": "b098e3", "8c4a52": "382275", @@ -10,7 +9,6 @@ "52314a": "3c4259", "d67ba5": "4ca49c", "bd5a7b": "427273", - "ffffff": "ffffff", "d67b8c": "7e62cc", "de3a5a": "db74ab", "848484": "4d5f9d" @@ -18,17 +16,13 @@ "2": { "52423a": "59435c", "de6363": "958fe6", - "101010": "101010", "7b6b63": "ab6f83", "ffc5b5": "e5faf2", "8c4a52": "7e4b9c", "ef9494": "abcbff", - "52314a": "52314a", "d67ba5": "f5c4e0", "bd5a7b": "d1829b", - "ffffff": "ffffff", "d67b8c": "958fe6", - "de3a5a": "ed746f", - "848484": "848484" + "de3a5a": "ed746f" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/361.json b/public/images/pokemon/variant/361.json index a3ea63cc61a..268ee73604d 100644 --- a/public/images/pokemon/variant/361.json +++ b/public/images/pokemon/variant/361.json @@ -4,24 +4,19 @@ "94634a": "851d63", "ffefa5": "f5a4c6", "efc56b": "c36193", - "000000": "000000", "ff735a": "ffe7b2", "3a3131": "2e161b", "4a4a4a": "4b2d2d", "b55a31": "ddb478", "737373": "5c413e", "8cd6ff": "ffd1a9", - "4294d6": "dd6f2c", - "dedede": "dedede", - "ffffff": "ffffff", - "b5adad": "b5adad" + "4294d6": "dd6f2c" }, "2": { "ce8c5a": "0f2b0d", "94634a": "08250b", "ffefa5": "5f884c", "efc56b": "1f4419", - "000000": "000000", "ff735a": "071f12", "3a3131": "2c3e38", "4a4a4a": "8c9f94", diff --git a/public/images/pokemon/variant/362-mega.json b/public/images/pokemon/variant/362-mega.json index 9352e485dc6..b3f4144f46f 100644 --- a/public/images/pokemon/variant/362-mega.json +++ b/public/images/pokemon/variant/362-mega.json @@ -17,7 +17,6 @@ "20315e": "460025" }, "2": { - "010101": "010101", "2b74a8": "0c4b3a", "bbeeff": "5ce11a", "393941": "221315", diff --git a/public/images/pokemon/variant/369.json b/public/images/pokemon/variant/369.json index 1be34201a4b..9c1c0339ac7 100644 --- a/public/images/pokemon/variant/369.json +++ b/public/images/pokemon/variant/369.json @@ -4,7 +4,6 @@ "efcea5": "757e99", "ceb594": "4b5368", "52423a": "16181d", - "000000": "000000", "524242": "91603c", "b59c9c": "fcbc8e", "8c734a": "282f41", @@ -21,7 +20,6 @@ "efcea5": "85a558", "ceb594": "6b8745", "52423a": "4b523a", - "000000": "000000", "524242": "21234a", "b59c9c": "5459a2", "8c734a": "42532c", diff --git a/public/images/pokemon/variant/37.json b/public/images/pokemon/variant/37.json index e82a2f00914..447b7cb09e5 100644 --- a/public/images/pokemon/variant/37.json +++ b/public/images/pokemon/variant/37.json @@ -6,12 +6,10 @@ "5a3100": "511f4c", "f7bd7b": "f2b4e4", "e6946b": "dc91d5", - "101010": "101010", "845231": "743a67", "ff945a": "c18fcf", "bd735a": "ba6cbd", "a57342": "865175", - "ffffff": "ffffff", "ffe6b5": "e8e0d1", "ffde94": "d4c5b6" }, @@ -22,12 +20,10 @@ "5a3100": "100f1b", "f7bd7b": "68689f", "e6946b": "45457c", - "101010": "101010", "845231": "1b1b47", "ff945a": "a8516c", "bd735a": "33325e", "a57342": "2a3457", - "ffffff": "ffffff", "ffe6b5": "d8e4e8", "ffde94": "9fb3c1" } diff --git a/public/images/pokemon/variant/370.json b/public/images/pokemon/variant/370.json index 946ff2d9385..10c1dc5613c 100644 --- a/public/images/pokemon/variant/370.json +++ b/public/images/pokemon/variant/370.json @@ -3,11 +3,9 @@ "a56b52": "3b766b", "733a31": "173f3d", "ffc5d6": "a1edc6", - "000000": "000000", "f794b5": "82d7b4", "e6739c": "52a08a", "314aad": "a1221e", - "ffffff": "ffffff", "295af7": "e36f50", "e6adde": "d6e1e0", "c5738c": "235b57", @@ -17,7 +15,6 @@ "a56b52": "49529f", "733a31": "2b3179", "ffc5d6": "bfcded", - "000000": "000000", "f794b5": "9dadd9", "e6739c": "6b7cbc", "314aad": "6c1e4a", diff --git a/public/images/pokemon/variant/371.json b/public/images/pokemon/variant/371.json index bf2eeace213..e312d9ba79d 100644 --- a/public/images/pokemon/variant/371.json +++ b/public/images/pokemon/variant/371.json @@ -4,33 +4,25 @@ "4a5263": "4f342a", "f7f7ff": "fff8ec", "d6cede": "ead1b5", - "000000": "000000", "a59cb5": "bc997e", "5a84ad": "a8662e", "efde6b": "375794", - "ffffff": "ffffff", "bda573": "28407d", "63ade6": "d19656", "94d6ff": "efc687", - "847352": "2e4688", - "9c4219": "9c4219", - "d67342": "d67342" + "847352": "2e4688" }, "2": { "849494": "89624e", "4a5263": "55111e", "f7f7ff": "f4ecd1", "d6cede": "eacb8e", - "000000": "000000", "a59cb5": "c79961", "5a84ad": "8c2736", "efde6b": "fff9e5", - "ffffff": "ffffff", "bda573": "c79961", "63ade6": "b33c47", "94d6ff": "c7515c", - "847352": "e5cdab", - "9c4219": "9c4219", - "d67342": "d67342" + "847352": "e5cdab" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/372.json b/public/images/pokemon/variant/372.json index b638e142324..ced469a4d09 100644 --- a/public/images/pokemon/variant/372.json +++ b/public/images/pokemon/variant/372.json @@ -1,7 +1,6 @@ { "1": { "525263": "704a3b", - "191919": "191919", "d6d6d6": "ead1b5", "adadb5": "bc997e", "7b7384": "99755e", @@ -9,14 +8,12 @@ "4a423a": "5e2710", "efe663": "61caf7", "7b7b73": "d19656", - "ffffce": "ffffce", "ad2942": "28407d", "63313a": "182759", "bd4252": "375794" }, "2": { "525263": "7b4e2e", - "191919": "191919", "d6d6d6": "f2d9a9", "adadb5": "d0a674", "7b7384": "a16f44", @@ -24,7 +21,6 @@ "4a423a": "501116", "efe663": "ffaf4a", "7b7b73": "b03d48", - "ffffce": "ffffce", "ad2942": "e4d9c0", "63313a": "885b63", "bd4252": "fff9e5" diff --git a/public/images/pokemon/variant/373.json b/public/images/pokemon/variant/373.json index e9338f0a933..c9d64ce41b2 100644 --- a/public/images/pokemon/variant/373.json +++ b/public/images/pokemon/variant/373.json @@ -4,13 +4,11 @@ "de8494": "4572a2", "bd526b": "1c4076", "a53a4a": "132760", - "191919": "191919", "29637b": "66300e", "42849c": "9f5727", "84cee6": "f3be6d", "4aa5ce": "c77939", "adada5": "f1dbc0", - "ffffff": "ffffff", "832041": "66162b", "cb3f51": "ba415d", "d95b6b": "cd5d6b", @@ -22,13 +20,11 @@ "de8494": "fff5fb", "bd526b": "ddc9d5", "a53a4a": "b596ab", - "191919": "191919", "29637b": "310823", "42849c": "420c26", "84cee6": "8b2539", "4aa5ce": "631734", "adada5": "ddbc94", - "ffffff": "ffffff", "832041": "761c6f", "cb3f51": "ae369a", "d95b6b": "d95bb2", diff --git a/public/images/pokemon/variant/374.json b/public/images/pokemon/variant/374.json index a1947b28e06..7e9f119c384 100644 --- a/public/images/pokemon/variant/374.json +++ b/public/images/pokemon/variant/374.json @@ -4,7 +4,6 @@ "424a84": "550611", "94b5ef": "ff795f", "4a6ba5": "851421", - "101010": "101010", "73b5f7": "eb4c43", "ff6b6b": "67ffe2", "844a4a": "13a4c3", @@ -20,7 +19,6 @@ "424a84": "0d4346", "94b5ef": "7ef5d1", "4a6ba5": "1e716e", - "101010": "101010", "73b5f7": "70e1bf", "ff6b6b": "41ed76", "844a4a": "11c23f", diff --git a/public/images/pokemon/variant/375.json b/public/images/pokemon/variant/375.json index 3708ec8f9b3..50925a63629 100644 --- a/public/images/pokemon/variant/375.json +++ b/public/images/pokemon/variant/375.json @@ -1,8 +1,6 @@ { "1": { "636b8c": "8d4010", - "c5c5ce": "c5c5ce", - "101010": "101010", "ffffff": "ffed80", "3a426b": "550611", "9c9cad": "ce7c29", @@ -18,7 +16,6 @@ "2": { "636b8c": "7e280e", "c5c5ce": "eb763d", - "101010": "101010", "ffffff": "ffb752", "3a426b": "0d4346", "9c9cad": "bd582c", diff --git a/public/images/pokemon/variant/376-mega.json b/public/images/pokemon/variant/376-mega.json index 6ec3c34f4b5..a97bec70294 100644 --- a/public/images/pokemon/variant/376-mega.json +++ b/public/images/pokemon/variant/376-mega.json @@ -7,7 +7,6 @@ "736a73": "703b08", "cdcdcd": "ffc753", "a1a1a1": "a76911", - "101010": "101010", "e7e7e7": "ffe07c", "b44100": "8d4010", "e69c00": "ce7c29", @@ -23,7 +22,6 @@ "736a73": "6f2c17", "cdcdcd": "f57e37", "a1a1a1": "9f4219", - "101010": "101010", "e7e7e7": "ffdb64", "b44100": "962c10", "e69c00": "d6632a", diff --git a/public/images/pokemon/variant/376.json b/public/images/pokemon/variant/376.json index 71c925078aa..92eee45c942 100644 --- a/public/images/pokemon/variant/376.json +++ b/public/images/pokemon/variant/376.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "313a63": "550611", "7ba5f7": "ea4037", "4a84c5": "bf2e2d", @@ -16,7 +15,6 @@ "948c94": "a76911" }, "2": { - "101010": "101010", "313a63": "0b3739", "7ba5f7": "67ddbe", "4a84c5": "41b4a1", diff --git a/public/images/pokemon/variant/38.json b/public/images/pokemon/variant/38.json index 0d9c4c3f940..998b005aa2b 100644 --- a/public/images/pokemon/variant/38.json +++ b/public/images/pokemon/variant/38.json @@ -1,11 +1,9 @@ { "1": { "846319": "613260", - "101010": "101010", "e6c552": "ca91ba", "f7e67b": "f0c2dc", "ce9c4a": "b16da0", - "ffffff": "ffffff", "b51000": "3c44d9", "de2110": "368abd", "ff6b29": "3664bd", @@ -14,11 +12,9 @@ }, "2": { "846319": "0b0b2a", - "101010": "101010", "e6c552": "293272", "f7e67b": "3f548b", "ce9c4a": "1a1a52", - "ffffff": "ffffff", "b51000": "e3382d", "de2110": "b83e0e", "ff6b29": "a42920", diff --git a/public/images/pokemon/variant/380-mega.json b/public/images/pokemon/variant/380-mega.json index bf71ded9127..1a0adffe295 100644 --- a/public/images/pokemon/variant/380-mega.json +++ b/public/images/pokemon/variant/380-mega.json @@ -1,27 +1,23 @@ { "1": { "525e61": "9a6853", - "101010": "101010", "d3d9dc": "f3e6df", "a0a7a9": "e3cfc1", "7d8486": "b48f79", "523977": "97440c", "784db9": "b35e17", "9876c6": "d08528", - "fafafa": "fafafa", "cda44a": "6734bf", "ffcd5a": "9b75ff" }, "2": { "525e61": "8d5a8f", - "101010": "101010", "d3d9dc": "eedaea", "a0a7a9": "e4c7e1", "7d8486": "c78ac4", "523977": "2393a2", "784db9": "2cbcbd", "9876c6": "5de2d5", - "fafafa": "fafafa", "cda44a": "dd6800", "ffcd5a": "e88a00" } diff --git a/public/images/pokemon/variant/380.json b/public/images/pokemon/variant/380.json index 1fe2df47529..4468edd6b3a 100644 --- a/public/images/pokemon/variant/380.json +++ b/public/images/pokemon/variant/380.json @@ -2,7 +2,6 @@ "1": { "7b73a5": "896d62", "efefff": "f3e6df", - "000000": "000000", "ceceef": "e3cfc1", "8c294a": "741c00", "ff6363": "cb621c", @@ -10,7 +9,6 @@ "ffa573": "e18459", "bd4242": "8e2c03", "cea54a": "7646e5", - "ffffff": "ffffff", "ffce5a": "9b75ff", "ada5d6": "ac9485", "73adef": "a480f8", @@ -19,7 +17,6 @@ "2": { "7b73a5": "ad5682", "efefff": "f2bddf", - "000000": "000000", "ceceef": "d899bd", "8c294a": "480a81", "ff6363": "9344b8", @@ -27,7 +24,6 @@ "ffa573": "862b99", "bd4242": "5a1e8c", "cea54a": "ab2635", - "ffffff": "ffffff", "ffce5a": "cf3d45", "ada5d6": "c56399", "73adef": "e64c4b", diff --git a/public/images/pokemon/variant/381-mega.json b/public/images/pokemon/variant/381-mega.json index 92cda32e287..50f4cab301e 100644 --- a/public/images/pokemon/variant/381-mega.json +++ b/public/images/pokemon/variant/381-mega.json @@ -1,27 +1,23 @@ { "1": { "525e61": "7e447b", - "101010": "101010", "d3d9dc": "f9cfed", "a0a7a9": "dfa1d2", "7d8486": "b673ad", "523977": "29165d", "784db9": "382a7b", "9876c6": "453c90", - "fafafa": "fafafa", "c5395a": "d05718", "d16f88": "f78232" }, "2": { "525e61": "98485e", - "101010": "101010", "d3d9dc": "f7d9ec", "a0a7a9": "e4abcc", "7d8486": "d086ac", "523977": "52060f", "784db9": "721119", "9876c6": "97241f", - "fafafa": "fafafa", "c5395a": "70309f", "d16f88": "9344b8" } diff --git a/public/images/pokemon/variant/381.json b/public/images/pokemon/variant/381.json index 4ad3ae57555..ed2dde0090b 100644 --- a/public/images/pokemon/variant/381.json +++ b/public/images/pokemon/variant/381.json @@ -4,7 +4,6 @@ "ded6ce": "d6bfc5", "6b636b": "653c7e", "b5b5ad": "c09faa", - "101010": "101010", "dedede": "ecdbde", "9cceff": "87589f", "4a63b5": "3e1f5a", @@ -12,7 +11,6 @@ "293173": "2a0f43", "5273d6": "4f2c6a", "c53a5a": "d05718", - "ffffff": "ffffff", "ff5a52": "f78232" }, "2": { @@ -20,7 +18,6 @@ "ded6ce": "dab1d7", "6b636b": "733e7c", "b5b5ad": "bb8dbb", - "101010": "101010", "dedede": "e9cae4", "9cceff": "f3b070", "4a63b5": "b54800", @@ -28,7 +25,6 @@ "293173": "892300", "5273d6": "ce6700", "c53a5a": "1586bc", - "ffffff": "ffffff", "ff5a52": "16a4c5" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/382-primal.json b/public/images/pokemon/variant/382-primal.json index ec1b34be70f..4ff4763b865 100644 --- a/public/images/pokemon/variant/382-primal.json +++ b/public/images/pokemon/variant/382-primal.json @@ -1,7 +1,6 @@ { "1": { "082a78": "d96714", - "101010": "101010", "768ac4": "ffb44c", "c7eafe": "f6e4e0", "101c4c": "791309", @@ -10,7 +9,6 @@ "fab672": "a2ee62", "fff493": "e1ff9f", "f8d58b": "91d37f", - "64626c": "64626c", "fbfbfb": "fff7f4", "00bfec": "ff3200", "0788d6": "c5253a", @@ -18,7 +16,6 @@ }, "2": { "082a78": "780613", - "101010": "101010", "768ac4": "ea512b", "c7eafe": "f2d9dc", "101c4c": "3c0818", @@ -27,7 +24,6 @@ "fab672": "67a6f4", "fff493": "90ffde", "f8d58b": "5ad6ef", - "64626c": "64626c", "fbfbfb": "ffe9e6", "00bfec": "ffc546", "0788d6": "ea7c18", diff --git a/public/images/pokemon/variant/382.json b/public/images/pokemon/variant/382.json index 0cd69afd0ab..f1ea72f8bf2 100644 --- a/public/images/pokemon/variant/382.json +++ b/public/images/pokemon/variant/382.json @@ -1,7 +1,5 @@ { "1": { - "101010": "101010", - "5a526b": "5a526b", "313a73": "d85c0d", "dedede": "fff7f4", "4a84d6": "ffa938", @@ -17,8 +15,6 @@ "ffce31": "30ff6d" }, "2": { - "101010": "101010", - "5a526b": "5a526b", "313a73": "6a0515", "dedede": "ffe9e6", "4a84d6": "ce3118", diff --git a/public/images/pokemon/variant/383-primal.json b/public/images/pokemon/variant/383-primal.json index da20585cc60..04ff6c48796 100644 --- a/public/images/pokemon/variant/383-primal.json +++ b/public/images/pokemon/variant/383-primal.json @@ -2,29 +2,23 @@ "1": { "9d2929": "11421e", "fe736b": "279930", - "010101": "010101", "fe2129": "2b5b32", "fab672": "ff8571", "fff493": "ffd493", "7c2129": "011e0b", "fe6336": "ff203f", - "272324": "272324", "3f3b3c": "383540", "595355": "625769", - "64626c": "64626c", "fbfbfb": "fff6de", "cdccd0": "e5d4b6" }, "2": { "9d2929": "20516c", "fe736b": "68cfd0", - "010101": "010101", "fe2129": "3e8b9f", "fab672": "61ee93", "fff493": "d2ff93", "7c2129": "0a2c43", - "fe6336": "fe6336", - "272324": "272324", "3f3b3c": "2b3c4e", "595355": "4e5169", "64626c": "7373a6", diff --git a/public/images/pokemon/variant/383.json b/public/images/pokemon/variant/383.json index c3db9af1fec..557f9334795 100644 --- a/public/images/pokemon/variant/383.json +++ b/public/images/pokemon/variant/383.json @@ -1,7 +1,6 @@ { "1": { "7b2129": "032a10", - "000000": "000000", "9c2929": "11421e", "ffbdbd": "35b93b", "ff2129": "2b5b32", @@ -18,7 +17,6 @@ }, "2": { "7b2129": "123953", - "000000": "000000", "9c2929": "20516c", "ffbdbd": "73e7e8", "ff2129": "3e8b9f", diff --git a/public/images/pokemon/variant/384-mega.json b/public/images/pokemon/variant/384-mega.json index d5e3456b6ea..53a3f48844a 100644 --- a/public/images/pokemon/variant/384-mega.json +++ b/public/images/pokemon/variant/384-mega.json @@ -4,7 +4,6 @@ "fc9436": "098faf", "836231": "003082", "f6de00": "17e2d6", - "010101": "010101", "22523e": "650f04", "3d7d6d": "84120f", "c5a400": "0db1b1", @@ -13,7 +12,6 @@ "60d293": "f1785e", "e4b629": "036486", "9c2952": "063f67", - "e65273": "2083e7", - "fcfcfc": "fcfcfc" + "e65273": "2083e7" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/384.json b/public/images/pokemon/variant/384.json index cdd2e3bfbde..69f37d3662c 100644 --- a/public/images/pokemon/variant/384.json +++ b/public/images/pokemon/variant/384.json @@ -4,31 +4,25 @@ "4a8473": "66637b", "5abd8c": "b3aec1", "94deb5": "e4e0ee", - "000000": "000000", "9c2952": "1cb450", "73293a": "0a642c", "846331": "064c1e", "c5a500": "27c750", "f7de00": "4ff869", "e65273": "4cd870", - "ffffff": "ffffff", - "bd638c": "98285b", - "ded6ef": "ded6ef" + "bd638c": "98285b" }, "2": { "295242": "540709", "4a8473": "821815", "5abd8c": "ca4636", "94deb5": "f99365", - "000000": "000000", "9c2952": "117a7a", "73293a": "003082", "846331": "380100", "c5a500": "098faf", "f7de00": "17e2d6", "e65273": "17e2d6", - "ffffff": "ffffff", - "bd638c": "2083e7", - "ded6ef": "ded6ef" + "bd638c": "2083e7" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/385.json b/public/images/pokemon/variant/385.json index 7d3f8636614..21122ae0004 100644 --- a/public/images/pokemon/variant/385.json +++ b/public/images/pokemon/variant/385.json @@ -1,7 +1,6 @@ { "0": { "ad8431": "925108", - "000000": "000000", "ffff94": "f7e980", "ffe65a": "f3bf5c", "e6bd52": "db942d", @@ -10,13 +9,11 @@ "63d6de": "f87d82", "c5cede": "cea9b3", "e6eff7": "ddd4d6", - "ffffff": "ffffff", "6b7373": "6e2d47", "9ca5ad": "965771" }, "1": { "ad8431": "874100", - "000000": "000000", "ffff94": "f7be5d", "ffe65a": "de9128", "e6bd52": "ba670d", @@ -25,13 +22,11 @@ "63d6de": "7dea9b", "c5cede": "decbc5", "e6eff7": "f7ece6", - "ffffff": "ffffff", "6b7373": "816566", "9ca5ad": "ad9d9c" }, "2": { "ad8431": "234664", - "000000": "000000", "ffff94": "b1dbe8", "ffe65a": "6fb6da", "e6bd52": "427aa3", @@ -40,7 +35,6 @@ "63d6de": "f6a5e0", "c5cede": "d6c5de", "e6eff7": "eee6f7", - "ffffff": "ffffff", "6b7373": "7f6581", "9ca5ad": "aa9cad" } diff --git a/public/images/pokemon/variant/387.json b/public/images/pokemon/variant/387.json index 04e2eb81fea..88a87e5d0d4 100644 --- a/public/images/pokemon/variant/387.json +++ b/public/images/pokemon/variant/387.json @@ -5,15 +5,13 @@ "7bd66b": "f5def0", "634a3a": "320a2a", "8c6b42": "511b41", - "000000": "000000", "5a7b42": "320a2a", "b58452": "934974", "94ad5a": "b1516b", "dee68c": "f7a8af", "bdce84": "e37d90", "f7e65a": "8fae94", - "c5bd3a": "4b6b63", - "ffffff": "ffffff" + "c5bd3a": "4b6b63" }, "2": { "3aa542": "d6e1e9", @@ -28,7 +26,6 @@ "dee68c": "958790", "bdce84": "7d6d7a", "f7e65a": "8bcadd", - "c5bd3a": "3875a1", - "ffffff": "ffffff" + "c5bd3a": "3875a1" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/388.json b/public/images/pokemon/variant/388.json index 42702aefa93..f602e9e97b5 100644 --- a/public/images/pokemon/variant/388.json +++ b/public/images/pokemon/variant/388.json @@ -3,7 +3,6 @@ "3a8c42": "e79ac2", "3a5a29": "3b1228", "63b56b": "ffd3f2", - "101019": "101019", "634a3a": "0d2520", "b58452": "3f5e4c", "8c6b42": "19322b", @@ -11,16 +10,12 @@ "efd642": "9cc096", "6b8c4a": "773859", "94ad5a": "954e6c", - "adc563": "b07587", - "ffffff": "ffffff", - "d6d6d6": "d6d6d6", - "949494": "949494" + "adc563": "b07587" }, "2": { "3a8c42": "d6e1e9", "3a5a29": "1c1a1a", "63b56b": "ffffff", - "101019": "101019", "634a3a": "251c3d", "b58452": "2c4a78", "8c6b42": "20284e", @@ -28,9 +23,6 @@ "efd642": "8bcadd", "6b8c4a": "362f2f", "94ad5a": "463d3e", - "adc563": "756667", - "ffffff": "ffffff", - "d6d6d6": "d6d6d6", - "949494": "949494" + "adc563": "756667" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/389.json b/public/images/pokemon/variant/389.json index 799d606ff37..1f7a9efd94e 100644 --- a/public/images/pokemon/variant/389.json +++ b/public/images/pokemon/variant/389.json @@ -3,7 +3,6 @@ "196319": "ba597b", "318c3a": "e799bb", "42ad42": "fddcf6", - "101010": "101010", "a5a5a5": "365f49", "6b737b": "1f4133", "e6e6e6": "8faf89", @@ -18,7 +17,6 @@ "196319": "738d9d", "318c3a": "a7bcc9", "42ad42": "d6e1e9", - "101010": "101010", "a5a5a5": "2c4a78", "6b737b": "20284e", "e6e6e6": "8bcadd", diff --git a/public/images/pokemon/variant/393.json b/public/images/pokemon/variant/393.json index 1449d14b88f..c67dc4f302a 100644 --- a/public/images/pokemon/variant/393.json +++ b/public/images/pokemon/variant/393.json @@ -4,10 +4,8 @@ "104a73": "244941", "318cd6": "44a36b", "6ba5e6": "54c461", - "ffffff": "ffffff", "bdcede": "e2d7a5", "63a5c5": "ce8a56", - "101010": "101010", "9cd6f7": "e8ce81", "637b94": "c68a67", "ad843a": "81899b", @@ -24,7 +22,6 @@ "ffffff": "f4ede8", "bdcede": "ccb9af", "63a5c5": "4a172e", - "101010": "101010", "9cd6f7": "782439", "637b94": "877e78", "ad843a": "368089", diff --git a/public/images/pokemon/variant/394.json b/public/images/pokemon/variant/394.json index 559eaa8b020..05726277fd7 100644 --- a/public/images/pokemon/variant/394.json +++ b/public/images/pokemon/variant/394.json @@ -4,13 +4,11 @@ "ffe684": "bec8d1", "7b5242": "1e202b", "efce63": "81899b", - "101010": "101010", "21426b": "2b544b", "215a94": "338757", "639cf7": "c97d4e", "9cceff": "e8ce81", "deefff": "ffefde", - "ffffff": "ffffff", "3a7bb5": "b24125", "bdcede": "e5dca5", "225c96": "8c2419", @@ -21,7 +19,6 @@ "ffe684": "baf3e4", "7b5242": "265255", "efce63": "82d3d0", - "101010": "101010", "21426b": "c44a7c", "215a94": "f880a0", "639cf7": "670f2f", diff --git a/public/images/pokemon/variant/395.json b/public/images/pokemon/variant/395.json index ad87c323be3..4a3c2cbdf6a 100644 --- a/public/images/pokemon/variant/395.json +++ b/public/images/pokemon/variant/395.json @@ -3,7 +3,6 @@ "bd8c6b": "363b56", "ffe684": "bec8d1", "efce63": "81899b", - "101010": "101010", "103a73": "23603f", "103c75": "7f1711", "528ce6": "cc8043", @@ -16,27 +15,23 @@ "deefff": "cbede1", "73a5ef": "e0b757", "5891e8": "77ba95", - "f9fcfb": "eaf9f4", - "000000": "000000" + "f9fcfb": "eaf9f4" }, "2": { "bd8c6b": "2c7787", "ffe684": "8af3dc", "efce63": "4bb3b1", - "101010": "101010", "103a73": "ffa5b2", "103c75": "32092a", "528ce6": "4f1438", "9cceff": "7e2b44", "4a73ad": "400e30", - "f9fcff": "f9fcff", "295a94": "380b2a", "102142": "da6785", "7b5242": "184555", "deefff": "7e1939", "73a5ef": "641b3c", "5891e8": "962849", - "f9fcfb": "ad2b41", - "000000": "000000" + "f9fcfb": "ad2b41" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/399.json b/public/images/pokemon/variant/399.json index 251f073613e..64538ba2077 100644 --- a/public/images/pokemon/variant/399.json +++ b/public/images/pokemon/variant/399.json @@ -4,7 +4,6 @@ "9c6331": "d46378", "c58c42": "e5a5bb", "634a31": "70323f", - "101010": "101010", "cebd84": "eba978", "ffefbd": "fff5d1", "ffffff": "f7f7f7", @@ -18,13 +17,9 @@ "9c6331": "3e5ca8", "c58c42": "617dda", "634a31": "313d63", - "101010": "101010", "cebd84": "8497ce", "ffefbd": "bdcfff", - "ffffff": "ffffff", "5a4229": "42295a", - "ef5a4a": "4a9bef", - "cec5c5": "cec5c5", - "848484": "848484" + "ef5a4a": "4a9bef" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/4.json b/public/images/pokemon/variant/4.json index a8cdf9d99ac..a4cc504775c 100644 --- a/public/images/pokemon/variant/4.json +++ b/public/images/pokemon/variant/4.json @@ -4,11 +4,9 @@ "8c2900": "0f3234", "ff9442": "26837c", "ffc563": "38bc90", - "101010": "101010", "e63a00": "5033ce", "083a8c": "8e0b25", "198cb5": "c40f0f", - "ffffff": "ffffff", "31adef": "f23113", "ffd608": "e9bfff", "f7a500": "9e59db", @@ -20,11 +18,9 @@ "8c2900": "20346f", "ff9442": "3a78b7", "ffc563": "54a3d8", - "101010": "101010", "e63a00": "4c83d4", "083a8c": "0021a8", "198cb5": "0059ff", - "ffffff": "ffffff", "31adef": "1e8eff", "ffd608": "f9fffa", "f7a500": "96e8e8", diff --git a/public/images/pokemon/variant/400.json b/public/images/pokemon/variant/400.json index 1e1bcaa4d20..3c1412f91bb 100644 --- a/public/images/pokemon/variant/400.json +++ b/public/images/pokemon/variant/400.json @@ -2,13 +2,10 @@ "1": { "5a3a31": "70323f", "bd844a": "dba0ac", - "101010": "101010", "8c5a31": "c46269", "e6d69c": "fff5d1", "ad947b": "bd9171", "c5c5b5": "b7b9d0", - "ffffff": "ffffff", - "3a3129": "3a3129", "63523a": "824561", "de4a4a": "ffa488", "423a31": "3e3040" @@ -16,12 +13,10 @@ "2": { "5a3a31": "313d63", "bd844a": "617dda", - "101010": "101010", "8c5a31": "3e5ca8", "e6d69c": "bdcfff", "ad947b": "8497ce", "c5c5b5": "b5b6c5", - "ffffff": "ffffff", "3a3129": "2c183f", "63523a": "42295a", "de4a4a": "4a9bef", diff --git a/public/images/pokemon/variant/401.json b/public/images/pokemon/variant/401.json index 9e1fd614922..78db2283687 100644 --- a/public/images/pokemon/variant/401.json +++ b/public/images/pokemon/variant/401.json @@ -3,7 +3,6 @@ "524a42": "cf8439", "9c9c94": "ffeea0", "7b7363": "f6bb47", - "101010": "101010", "8c6b08": "272344", "e6c56b": "454389", "ffefad": "56769d", @@ -19,7 +18,6 @@ "524a42": "453565", "9c9c94": "ae85ba", "7b7363": "71558c", - "101010": "101010", "8c6b08": "784341", "e6c56b": "e59a75", "ffefad": "ffd47c", diff --git a/public/images/pokemon/variant/402.json b/public/images/pokemon/variant/402.json index 26008d941d1..64dc58b78f2 100644 --- a/public/images/pokemon/variant/402.json +++ b/public/images/pokemon/variant/402.json @@ -2,10 +2,8 @@ "1": { "633100": "272344", "de5a52": "afd3df", - "101010": "101010", "9c4231": "498ebe", "31293a": "592a22", - "fff3e3": "fff3e3", "524a42": "cf8439", "7b7363": "f6bb47", "945219": "973939", @@ -15,17 +13,14 @@ "bd9c63": "454389", "9c9c94": "26264b", "ffd684": "56769d", - "000000": "000000", "424252": "0e0e23", "ffffff": "454389" }, "2": { "633100": "2a545f", "de5a52": "70af85", - "101010": "101010", "9c4231": "2f9378", "31293a": "281c41", - "fff3e3": "fff3e3", "524a42": "453565", "7b7363": "71558c", "945219": "b5567a", diff --git a/public/images/pokemon/variant/4052.json b/public/images/pokemon/variant/4052.json index 4dae5cc07dd..b6d6aec3339 100644 --- a/public/images/pokemon/variant/4052.json +++ b/public/images/pokemon/variant/4052.json @@ -1,25 +1,20 @@ { "1": { - "181a1d": "181a1d", "3d4547": "4e385a", "ada09a": "c3c5d4", "5b4e4d": "57567e", "84726f": "7b7aa5", "9aa094": "9ea9b5", - "f3f3f3": "f3f3f3", - "010101": "010101", "272d2e": "342b49", "f3d91d": "ffff89" }, "2": { - "181a1d": "181a1d", "3d4547": "417778", "ada09a": "603b54", "5b4e4d": "171127", "84726f": "3c2841", "9aa094": "cc9a5f", "f3f3f3": "f4d294", - "010101": "010101", "272d2e": "234a56", "f3d91d": "c4e857" } diff --git a/public/images/pokemon/variant/406.json b/public/images/pokemon/variant/406.json index 5f47761b081..1deec5a8940 100644 --- a/public/images/pokemon/variant/406.json +++ b/public/images/pokemon/variant/406.json @@ -3,30 +3,24 @@ "73a54a": "153a51", "b5ef73": "5fadaf", "3a5a29": "0b2337", - "000000": "000000", "7bd65a": "215869", "948400": "856454", "ffef6b": "e4d0c2", "e6bd3a": "c7a999", "21524a": "a92239", "317b63": "d6454a", - "4a9473": "ed6e67", - "ce0031": "ce0031", - "f76363": "f76363" + "4a9473": "ed6e67" }, "2": { "73a54a": "52347a", "b5ef73": "c098dd", "3a5a29": "2d1a4e", - "000000": "000000", "7bd65a": "7d4f9c", "948400": "44336d", "ffef6b": "f2e4ff", "e6bd3a": "c9b6e1", "21524a": "2d55a9", "317b63": "4f81d8", - "4a9473": "83bef3", - "ce0031": "ce0031", - "f76363": "f76363" + "4a9473": "83bef3" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/407.json b/public/images/pokemon/variant/407.json index 457c76d4159..4f2d8bc49b0 100644 --- a/public/images/pokemon/variant/407.json +++ b/public/images/pokemon/variant/407.json @@ -4,7 +4,6 @@ "ffffff": "fff1cb", "297b52": "153a51", "d6cede": "e1bf95", - "000000": "000000", "7b3a5a": "9c5910", "bd426b": "d28f31", "ff6384": "efc754", @@ -21,7 +20,6 @@ "ffffff": "fcf8ff", "297b52": "503277", "d6cede": "d6c7e6", - "000000": "000000", "7b3a5a": "9c2407", "bd426b": "c15a21", "ff6384": "ec883b", diff --git a/public/images/pokemon/variant/4077.json b/public/images/pokemon/variant/4077.json index f80e6124c18..40d3cfe71f3 100644 --- a/public/images/pokemon/variant/4077.json +++ b/public/images/pokemon/variant/4077.json @@ -7,14 +7,12 @@ "de9fff": "ff884c", "d2daff": "ffb44c", "59237e": "312c49", - "101010": "101010", "78499b": "514766", "ffffe3": "8cd8ff", "646357": "192666", "ded5ae": "5b93cc", "8e39c1": "990c00", - "a3a49f": "355699", - "fdfdfd": "fdfdfd" + "a3a49f": "355699" }, "2": { "64c2d7": "cc1e83", @@ -24,13 +22,11 @@ "de9fff": "483e7c", "d2daff": "b247a0", "59237e": "312c49", - "101010": "101010", "78499b": "514766", "ffffe3": "ff99dd", "646357": "361e66", "ded5ae": "cc66cc", "8e39c1": "161f4c", - "a3a49f": "7a3d99", - "fdfdfd": "fdfdfd" + "a3a49f": "7a3d99" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/4078.json b/public/images/pokemon/variant/4078.json index a57e9d6f066..0eefedacf98 100644 --- a/public/images/pokemon/variant/4078.json +++ b/public/images/pokemon/variant/4078.json @@ -1,10 +1,8 @@ { "1": { - "0c0c0c": "0c0c0c", "44bf75": "cc9470", "737ba4": "514766", "85fabf": "ffd9a5", - "2b3055": "2b3055", "109865": "995944", "ffffe3": "8cd8ff", "636357": "192666", @@ -19,11 +17,9 @@ "4ed68b": "cc9470" }, "2": { - "0c0c0c": "0c0c0c", "44bf75": "cc1e4c", "737ba4": "514766", "85fabf": "ff3255", - "2b3055": "2b3055", "109865": "990f3d", "ffffe3": "ff99dd", "636357": "361e66", diff --git a/public/images/pokemon/variant/4079.json b/public/images/pokemon/variant/4079.json index f1fd0c2ca2a..eb3e2d5d7d1 100644 --- a/public/images/pokemon/variant/4079.json +++ b/public/images/pokemon/variant/4079.json @@ -6,10 +6,7 @@ "aa4a6b": "613934", "f88daf": "bb694b", "7c2847": "452a29", - "d5cdcd": "d5cdcd", - "fcfcfc": "fcfcfc", "d76d96": "8f5345", - "101010": "101010", "dea462": "e0799c", "8b5a18": "a84071", "ffe6b4": "ff9eba" @@ -21,10 +18,7 @@ "aa4a6b": "846467", "f88daf": "ecdcbe", "7c2847": "503941", - "d5cdcd": "d5cdcd", - "fcfcfc": "fcfcfc", "d76d96": "c6aead", - "101010": "101010", "dea462": "ca8e74", "8b5a18": "a45c58", "ffe6b4": "eec596" diff --git a/public/images/pokemon/variant/4080.json b/public/images/pokemon/variant/4080.json index 8a4b733e0ee..727a540ddc2 100644 --- a/public/images/pokemon/variant/4080.json +++ b/public/images/pokemon/variant/4080.json @@ -2,10 +2,7 @@ "1": { "723f7c": "edc59e", "a565c0": "ffedcc", - "181818": "181818", "d76792": "905446", - "c9c9c9": "c9c9c9", - "fbfbfb": "fbfbfb", "7b6987": "a94172", "f985aa": "bb694b", "ede2ef": "ff9fbb", @@ -22,10 +19,7 @@ "2": { "723f7c": "963e59", "a565c0": "d9736b", - "181818": "181818", "d76792": "c6aead", - "c9c9c9": "c9c9c9", - "fbfbfb": "fbfbfb", "7b6987": "a45c58", "f985aa": "ecdcbe", "ede2ef": "efc697", diff --git a/public/images/pokemon/variant/41.json b/public/images/pokemon/variant/41.json index 99ab116de02..88572737c89 100644 --- a/public/images/pokemon/variant/41.json +++ b/public/images/pokemon/variant/41.json @@ -1,26 +1,20 @@ { "1": { - "101010": "101010", "637bb5": "12325c", "4a427b": "14093b", "bdceff": "868ecc", "8cb5ef": "205182", "b5529c": "d58e41", "73215a": "b6591e", - "d673bd": "f0ad57", - "ffffff": "ffffff", - "636363": "636363" + "d673bd": "f0ad57" }, "2": { - "101010": "101010", "637bb5": "916c8b", "4a427b": "4d3259", "bdceff": "e8d2e6", "8cb5ef": "cbabca", "b5529c": "94241c", "73215a": "670f10", - "d673bd": "bc3b1d", - "ffffff": "ffffff", - "636363": "636363" + "d673bd": "bc3b1d" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/412-plant.json b/public/images/pokemon/variant/412-plant.json index 5a4fcc17bce..63277d41b8e 100644 --- a/public/images/pokemon/variant/412-plant.json +++ b/public/images/pokemon/variant/412-plant.json @@ -4,7 +4,6 @@ "84847b": "5f709f", "5a5a5a": "455081", "3a3a42": "262b56", - "101010": "101010", "314a3a": "274530", "7b9c4a": "6c956d", "527342": "446649", @@ -14,11 +13,9 @@ "634a3a": "4f3f36" }, "1": { - "292931": "292931", "84847b": "9f8a8f", "5a5a5a": "725c67", "3a3a42": "392933", - "101010": "101010", "314a3a": "452c30", "7b9c4a": "9d8781", "527342": "7c5d5e", @@ -28,11 +25,9 @@ "634a3a": "261a1a" }, "2": { - "292931": "292931", "84847b": "c69ab0", "5a5a5a": "ab7492", "3a3a42": "724063", - "101010": "101010", "314a3a": "203460", "7b9c4a": "5d9ac0", "527342": "3c689b", diff --git a/public/images/pokemon/variant/412-trash.json b/public/images/pokemon/variant/412-trash.json index 92dbf56e4ee..1c95606a860 100644 --- a/public/images/pokemon/variant/412-trash.json +++ b/public/images/pokemon/variant/412-trash.json @@ -1,6 +1,5 @@ { "0": { - "101010": "101010", "292931": "191c46", "5a5a5a": "455081", "84847b": "5f709f", @@ -15,7 +14,6 @@ "737b7b": "572d73" }, "1": { - "101010": "101010", "292931": "1d1929", "5a5a5a": "594f69", "84847b": "7e768c", @@ -30,7 +28,6 @@ "737b7b": "403c48" }, "2": { - "101010": "101010", "292931": "273f2c", "5a5a5a": "b5d6b2", "84847b": "daeed5", diff --git a/public/images/pokemon/variant/413-sandy.json b/public/images/pokemon/variant/413-sandy.json index 42177c21025..84e8f7ef251 100644 --- a/public/images/pokemon/variant/413-sandy.json +++ b/public/images/pokemon/variant/413-sandy.json @@ -1,6 +1,5 @@ { "0": { - "101010": "101010", "5a5a5a": "455081", "3a3a42": "30366b", "737b6b": "526390", @@ -9,14 +8,12 @@ "634a3a": "5a453b", "635252": "926f57", "ad9473": "b89b78", - "ffffff": "ffffff", "8c4a3a": "7d212c", "d6c573": "e4d3b0", "ef7352": "bc4c43", "847363": "735040" }, "1": { - "101010": "101010", "5a5a5a": "64403f", "3a3a42": "533032", "737b6b": "835d57", @@ -25,14 +22,12 @@ "634a3a": "54212a", "635252": "3e2025", "ad9473": "734443", - "ffffff": "ffffff", "8c4a3a": "c58839", "d6c573": "8e6457", "ef7352": "e4c565", "847363": "4e2d2d" }, "2": { - "101010": "101010", "5a5a5a": "aeb2cd", "3a3a42": "8385a6", "737b6b": "dfe6f1", @@ -41,7 +36,6 @@ "634a3a": "1c3a5e", "635252": "1a1830", "ad9473": "5a5f7f", - "ffffff": "ffffff", "8c4a3a": "1b4758", "d6c573": "7c8397", "ef7352": "61c8d9", diff --git a/public/images/pokemon/variant/413-trash.json b/public/images/pokemon/variant/413-trash.json index 5e11d943d93..984cd225d47 100644 --- a/public/images/pokemon/variant/413-trash.json +++ b/public/images/pokemon/variant/413-trash.json @@ -1,6 +1,5 @@ { "0": { - "101010": "101010", "5a5a5a": "455081", "3a3a42": "30366b", "737b6b": "526390", @@ -9,11 +8,9 @@ "844a73": "572d73", "7b4a5a": "92427c", "b56b7b": "c373a4", - "ffffff": "ffffff", "ef949c": "df9dbf" }, "1": { - "101010": "101010", "5a5a5a": "594f69", "3a3a42": "403850", "737b6b": "8e869c", @@ -22,11 +19,9 @@ "844a73": "723542", "7b4a5a": "3d3b56", "b56b7b": "5a5a79", - "ffffff": "ffffff", "ef949c": "828498" }, "2": { - "101010": "101010", "5a5a5a": "b5d6b2", "3a3a42": "7aa17b", "737b6b": "daeed5", @@ -35,7 +30,6 @@ "844a73": "39343f", "7b4a5a": "1b6b2e", "b56b7b": "399746", - "ffffff": "ffffff", "ef949c": "69bd6a" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/414.json b/public/images/pokemon/variant/414.json index f8a8ab67845..e609549b309 100644 --- a/public/images/pokemon/variant/414.json +++ b/public/images/pokemon/variant/414.json @@ -2,7 +2,6 @@ "1": { "734221": "99745b", "e66b29": "f2daba", - "101010": "101010", "a54a00": "d2a884", "f7d67b": "97534e", "6b5a4a": "471415", @@ -17,7 +16,6 @@ "2": { "734221": "90412e", "e66b29": "e8b479", - "101010": "101010", "a54a00": "d2895c", "f7d67b": "8556b0", "6b5a4a": "382463", diff --git a/public/images/pokemon/variant/418.json b/public/images/pokemon/variant/418.json index 628252e5296..7100520550d 100644 --- a/public/images/pokemon/variant/418.json +++ b/public/images/pokemon/variant/418.json @@ -3,12 +3,8 @@ "ad5a21": "7d1e39", "ef7b19": "9c354f", "7b4221": "611b35", - "191919": "191919", "dec584": "cea49d", "f7f7b5": "e8d4cc", - "ffffff": "ffffff", - "6b6b6b": "6b6b6b", - "d6d6ce": "d6d6ce", "ffde00": "d2e5e8", "9c6300": "995e5c", "e6a531": "a0b3ba", @@ -20,12 +16,9 @@ "ad5a21": "cd91aa", "ef7b19": "e8c3ce", "7b4221": "84466b", - "191919": "191919", "dec584": "8a4370", "f7f7b5": "a8688f", - "ffffff": "ffffff", "6b6b6b": "432e38", - "d6d6ce": "d6d6ce", "ffde00": "eda342", "9c6300": "642858", "e6a531": "ca6e26", diff --git a/public/images/pokemon/variant/419.json b/public/images/pokemon/variant/419.json index 414cd251187..d3c4729024f 100644 --- a/public/images/pokemon/variant/419.json +++ b/public/images/pokemon/variant/419.json @@ -2,7 +2,6 @@ "1": { "7b4221": "611b35", "ef7b19": "9c354f", - "191919": "191919", "ce6b19": "851d3e", "ad5a21": "7d1e39", "9c6300": "995e5c", @@ -10,8 +9,6 @@ "cebd84": "cea49d", "99693c": "6a808c", "e6a531": "a0b3ba", - "6b6b6b": "6b6b6b", - "ffffff": "ffffff", "ffde00": "d2e5e8", "2163a5": "385e11", "63bde6": "6a9539" @@ -19,7 +16,6 @@ "2": { "7b4221": "9e6a86", "ef7b19": "debfc8", - "191919": "191919", "ce6b19": "dca5b5", "ad5a21": "cd91aa", "9c6300": "672e5d", @@ -28,7 +24,6 @@ "99693c": "8e410e", "e6a531": "d4812f", "6b6b6b": "726481", - "ffffff": "ffffff", "ffde00": "eda342", "2163a5": "4b2a70", "63bde6": "744d99" diff --git a/public/images/pokemon/variant/4199.json b/public/images/pokemon/variant/4199.json index 1b17bcc8234..e6136479ab0 100644 --- a/public/images/pokemon/variant/4199.json +++ b/public/images/pokemon/variant/4199.json @@ -3,12 +3,10 @@ "493e66": "831e2b", "a191b5": "de504e", "7a6a98": "ad3139", - "101010": "101010", "654493": "7e3351", "413668": "622344", "403468": "4f0926", "269a36": "f28783", - "f8f8f8": "f8f8f8", "a090b5": "ff9eba", "63577d": "a84071", "723f7c": "d0bca2", @@ -27,12 +25,10 @@ "493e66": "2a6122", "a191b5": "b0dc72", "7a6a98": "71ae48", - "101010": "101010", "654493": "38735c", "413668": "1d4c46", "403468": "9f3637", "269a36": "e68c5d", - "f8f8f8": "f8f8f8", "a090b5": "efc697", "63577d": "a55d59", "723f7c": "ae4653", diff --git a/public/images/pokemon/variant/42.json b/public/images/pokemon/variant/42.json index af784a0fd2c..7891449360e 100644 --- a/public/images/pokemon/variant/42.json +++ b/public/images/pokemon/variant/42.json @@ -6,11 +6,7 @@ "631052": "892d03", "ce6bb5": "f1a139", "adceff": "3c74b1", - "000000": "000000", "ad52ad": "d5711b", - "636363": "636363", - "ffffff": "ffffff", - "d6d6d6": "d6d6d6", "943a7b": "af4e0c" }, "2": { @@ -20,11 +16,7 @@ "631052": "54070c", "ce6bb5": "bc3b1d", "adceff": "e8d2e6", - "000000": "000000", "ad52ad": "94241c", - "636363": "636363", - "ffffff": "ffffff", - "d6d6d6": "d6d6d6", "943a7b": "670f10" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/422-east.json b/public/images/pokemon/variant/422-east.json index cb5b031b3f2..c3209e3e025 100644 --- a/public/images/pokemon/variant/422-east.json +++ b/public/images/pokemon/variant/422-east.json @@ -2,8 +2,6 @@ "0": { "636394": "61819f", "bdceef": "b8d4e6", - "ffffff": "ffffff", - "101010": "101010", "52527b": "636b7b", "84deff": "b9f7d4", "6bb5f7": "82e1c0", @@ -11,7 +9,6 @@ "ffde73": "ffdf75", "a58c3a": "a68e3c", "524a3a": "554d3c", - "d63aa5": "d63aa5", "5a8452": "b8d4e6", "424a3a": "61819f", "8cb552": "ffffff" @@ -19,8 +16,6 @@ "1": { "636394": "314173", "bdceef": "b8d4e6", - "ffffff": "ffffff", - "101010": "101010", "52527b": "293852", "84deff": "5271bd", "6bb5f7": "485f9c", @@ -28,7 +23,6 @@ "ffde73": "82e1c0", "a58c3a": "649bb2", "524a3a": "455f73", - "d63aa5": "d63aa5", "5a8452": "b8d4e6", "424a3a": "61819f", "8cb552": "ffffff" @@ -36,8 +30,6 @@ "2": { "636394": "6d427b", "bdceef": "c5deef", - "ffffff": "ffffff", - "101010": "101010", "52527b": "451e4c", "84deff": "ad75e8", "6bb5f7": "955dbe", @@ -45,7 +37,6 @@ "ffde73": "ffc975", "a58c3a": "e5693d", "524a3a": "933f04", - "d63aa5": "d63aa5", "5a8452": "df5e7d", "424a3a": "914d43", "8cb552": "ff8ca1" diff --git a/public/images/pokemon/variant/422-west.json b/public/images/pokemon/variant/422-west.json index f5f94becd75..6f9e575dee9 100644 --- a/public/images/pokemon/variant/422-west.json +++ b/public/images/pokemon/variant/422-west.json @@ -1,7 +1,6 @@ { "0": { "73426b": "8b3553", - "101010": "101010", "e652a5": "c66264", "ff8cc5": "ff9269", "6b3a52": "7a3425", @@ -9,7 +8,6 @@ "ffb5e6": "ffbea6", "ffde73": "ffd275", "a58c3a": "ca8b46", - "ffffff": "ffffff", "524a3a": "645346", "c5428c": "bd294a", "b5b5c5": "ca8b46", @@ -18,7 +16,6 @@ }, "1": { "73426b": "573d64", - "101010": "101010", "e652a5": "7960a1", "ff8cc5": "aa8be8", "6b3a52": "573d64", @@ -26,7 +23,6 @@ "ffb5e6": "c1a5ff", "ffde73": "ffb8c5", "a58c3a": "da6f7b", - "ffffff": "ffffff", "524a3a": "993d48", "c5428c": "bd294a", "b5b5c5": "d1b07c", @@ -35,7 +31,6 @@ }, "2": { "73426b": "281e4c", - "101010": "101010", "e652a5": "48427b", "ff8cc5": "5d64be", "6b3a52": "281e4c", @@ -43,7 +38,6 @@ "ffb5e6": "7588e8", "ffde73": "ffc975", "a58c3a": "e5693d", - "ffffff": "ffffff", "524a3a": "933f04", "c5428c": "bd294a", "b5b5c5": "00a172", diff --git a/public/images/pokemon/variant/4222.json b/public/images/pokemon/variant/4222.json index 15e23a6d468..d271fb7a8e3 100644 --- a/public/images/pokemon/variant/4222.json +++ b/public/images/pokemon/variant/4222.json @@ -9,7 +9,6 @@ "e3c4f2": "d7d2f6", "9c94a3": "58929f", "cbc2d1": "a9e4e3", - "101010": "101010", "af9e9e": "44a0af", "ffa4c5": "76c6ff", "e66294": "0099ff", @@ -25,7 +24,6 @@ "e3c4f2": "567f83", "9c94a3": "4b1f28", "cbc2d1": "773050", - "101010": "101010", "af9e9e": "b0919b", "ffa4c5": "8ff3a3", "e66294": "15c05f", diff --git a/public/images/pokemon/variant/423-east.json b/public/images/pokemon/variant/423-east.json index f002fc3efb4..95e095396bd 100644 --- a/public/images/pokemon/variant/423-east.json +++ b/public/images/pokemon/variant/423-east.json @@ -10,7 +10,6 @@ "a58c3a": "a58e3b", "524a3a": "574e3e", "736363": "574e3e", - "ffffff": "ffffff", "6b7bad": "679ab2", "6bb5f7": "80e2bf", "b5295a": "b42a59", @@ -18,36 +17,26 @@ }, "1": { "3a4231": "293852", - "101010": "101010", "5a944a": "485f9c", "426b31": "314173", "7bbd52": "5271bd", "ffde73": "82e1c0", - "313129": "313129", "a58c3a": "649bb2", "524a3a": "455f73", - "736363": "736363", - "ffffff": "ffffff", "6b7bad": "b8d4e6", "6bb5f7": "ffffff", - "b5295a": "b5295a", "5a527b": "61819f" }, "2": { "3a4231": "451e4c", - "101010": "101010", "5a944a": "955dbe", "426b31": "6d427b", "7bbd52": "ad75e8", "ffde73": "ffc975", - "313129": "313129", "a58c3a": "e5693d", "524a3a": "933f04", - "736363": "736363", - "ffffff": "ffffff", "6b7bad": "df5e7d", "6bb5f7": "ff8ca1", - "b5295a": "b5295a", "5a527b": "914d43" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/423-west.json b/public/images/pokemon/variant/423-west.json index d9b876d07e7..b0cd26a7201 100644 --- a/public/images/pokemon/variant/423-west.json +++ b/public/images/pokemon/variant/423-west.json @@ -1,53 +1,38 @@ { "0": { "4a3a3a": "101010", - "101010": "101010", "a56b3a": "c66264", "6b4a3a": "8b3553", "c5944a": "ff9269", "a58c3a": "ca8b46", "ffde73": "ffd275", - "313129": "313129", "524a3a": "645346", - "736363": "736363", - "ffffff": "ffffff", "ad6394": "c66264", "ff8cc5": "ff9269", - "6b3a52": "7a3425", - "b5295a": "b5295a" + "6b3a52": "7a3425" }, "1": { "4a3a3a": "573d64", - "101010": "101010", "a56b3a": "aa8be8", "6b4a3a": "7960a1", "c5944a": "c1a5ff", "a58c3a": "da6f7b", "ffde73": "ffb8c5", - "313129": "313129", "524a3a": "993d48", - "736363": "736363", - "ffffff": "ffffff", "ad6394": "d1b07c", "ff8cc5": "f7f0b4", - "6b3a52": "8a7b68", - "b5295a": "b5295a" + "6b3a52": "8a7b68" }, "2": { "4a3a3a": "281e4c", - "101010": "101010", "a56b3a": "5d64be", "6b4a3a": "48427b", "c5944a": "7588e8", "a58c3a": "e5693d", "ffde73": "ffc975", - "313129": "313129", "524a3a": "933f04", - "736363": "736363", - "ffffff": "ffffff", "ad6394": "00a172", "ff8cc5": "3cc59b", - "6b3a52": "00706a", - "b5295a": "b5295a" + "6b3a52": "00706a" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/424.json b/public/images/pokemon/variant/424.json index 4e00c3c1234..eace71f2a3a 100644 --- a/public/images/pokemon/variant/424.json +++ b/public/images/pokemon/variant/424.json @@ -3,7 +3,6 @@ "734a42": "415c73", "ad5242": "428dad", "ff735a": "5ae9ff", - "101010": "101010", "debd73": "c4b487", "ffefa5": "ffeccc", "8c6b42": "8c7457", @@ -13,15 +12,12 @@ "9c4ac5": "c47440", "bd9473": "bd9a7e", "ab5141": "293b94", - "ffffff": "ffffff", - "fc7158": "3973e5", - "adada5": "adada5" + "fc7158": "3973e5" }, "2": { "734a42": "593802", "ad5242": "946212", "ff735a": "ffb338", - "101010": "101010", "debd73": "99455d", "ffefa5": "ed8286", "8c6b42": "632339", @@ -31,8 +27,6 @@ "9c4ac5": "bfbeb4", "bd9473": "802d44", "ab5141": "8c1c2f", - "ffffff": "ffffff", - "fc7158": "b33636", - "adada5": "adada5" + "fc7158": "b33636" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/425.json b/public/images/pokemon/variant/425.json index f28dbd93c07..b490bf42686 100644 --- a/public/images/pokemon/variant/425.json +++ b/public/images/pokemon/variant/425.json @@ -3,7 +3,6 @@ "c5d6e6": "c2f5d4", "ffffff": "e8ffed", "5a5a63": "5e7466", - "101010": "101010", "7b42a5": "497b91", "946be6": "64acb1", "633184": "39677a", @@ -17,7 +16,6 @@ "c5d6e6": "c2f5d4", "ffffff": "e8ffed", "5a5a63": "5e7466", - "101010": "101010", "7b42a5": "93a383", "946be6": "c0c7ab", "633184": "697c63", diff --git a/public/images/pokemon/variant/426.json b/public/images/pokemon/variant/426.json index fcbd8f4ce35..fd8e92ce451 100644 --- a/public/images/pokemon/variant/426.json +++ b/public/images/pokemon/variant/426.json @@ -3,7 +3,6 @@ "c5c5e6": "7ca786", "ffffff": "b0d1b8", "5a5a63": "536661", - "101010": "101010", "423a5a": "1e3f42", "5a427b": "1d524d", "8452ad": "20787c", @@ -20,7 +19,6 @@ "c5c5e6": "7ca786", "ffffff": "b0d1b8", "5a5a63": "536661", - "101010": "101010", "423a5a": "42382c", "5a427b": "686458", "8452ad": "9fa994", diff --git a/public/images/pokemon/variant/4263.json b/public/images/pokemon/variant/4263.json index 035d011d7a0..5d2e8d90ecc 100644 --- a/public/images/pokemon/variant/4263.json +++ b/public/images/pokemon/variant/4263.json @@ -1,14 +1,12 @@ { "1": { "1b2627": "00312d", - "010101": "010101", "3e4042": "01473a", "60656a": "1c8155", "5b5958": "397e4a", "f5f5f6": "f5ffea", "b2b3b2": "a3ce9e", "d94a7f": "d414dd", - "fcfcfc": "fcfcfc", "e2729a": "ff69fa", "6e3b51": "9b00b4", "9b4f69": "d414dd", @@ -16,14 +14,12 @@ }, "2": { "1b2627": "080929", - "010101": "010101", "3e4042": "412991", "60656a": "8e5aef", "5b5958": "100d2d", "f5f5f6": "3c335d", "b2b3b2": "201b47", "d94a7f": "0099ce", - "fcfcfc": "fcfcfc", "e2729a": "54f1ff", "6e3b51": "004a8b", "9b4f69": "0099ce", diff --git a/public/images/pokemon/variant/4264.json b/public/images/pokemon/variant/4264.json index 5c118e7edc8..bbbaf135a4d 100644 --- a/public/images/pokemon/variant/4264.json +++ b/public/images/pokemon/variant/4264.json @@ -4,9 +4,7 @@ "797570": "397e4a", "414141": "1c8155", "abadaf": "95c090", - "010101": "010101", "f5f5f6": "f5ffea", - "1c1917": "1c1917", "ff4e89": "ff69fa", "bc3065": "d414dd", "68696a": "27323a", @@ -17,9 +15,7 @@ "797570": "080929", "414141": "7c4cd6", "abadaf": "1e1a3b", - "010101": "010101", "f5f5f6": "342d4c", - "1c1917": "1c1917", "ff4e89": "54f1ff", "bc3065": "0099ce", "68696a": "2a1b4e", diff --git a/public/images/pokemon/variant/427.json b/public/images/pokemon/variant/427.json index 2571159d29b..5ed6103857c 100644 --- a/public/images/pokemon/variant/427.json +++ b/public/images/pokemon/variant/427.json @@ -3,28 +3,22 @@ "846b5a": "991e47", "c5a57b": "cc3d55", "efdea5": "ff6666", - "101010": "101010", "b57b4a": "ffcc99", "523a3a": "994c3d", "8c5a42": "cc8866", "7b3a42": "948eb2", "ff8ca5": "ffffff", - "c55a7b": "cecee5", - "ffffff": "ffffff", - "3a313a": "3a313a" + "c55a7b": "cecee5" }, "2": { "846b5a": "948eb2", "c5a57b": "cecee5", "efdea5": "ffffff", - "101010": "101010", "b57b4a": "8cd8ff", "523a3a": "355699", "8c5a42": "5b93cc", "7b3a42": "99548d", "ff8ca5": "ffbfdf", - "c55a7b": "cc84b4", - "ffffff": "ffffff", - "3a313a": "3a313a" + "c55a7b": "cc84b4" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/428-mega.json b/public/images/pokemon/variant/428-mega.json index d58a03ca175..e61bbdf0142 100644 --- a/public/images/pokemon/variant/428-mega.json +++ b/public/images/pokemon/variant/428-mega.json @@ -2,14 +2,12 @@ "1": { "836a5a": "991e47", "eedea4": "ff6666", - "101010": "101010", "c5a47b": "cc3d55", "532d30": "994c3d", "aa6840": "ffcc99", "894d3b": "cc8866", "7b3941": "472866", "c55a7b": "7f4c99", - "f8f8f8": "f8f8f8", "ee5a4a": "bd7acc", "2c2423": "0d0b16", "3a3130": "161626", @@ -18,14 +16,12 @@ "2": { "836a5a": "948eb2", "eedea4": "ffffff", - "101010": "101010", "c5a47b": "cecee5", "532d30": "355699", "aa6840": "8cd8ff", "894d3b": "5b93cc", "7b3941": "990c00", "c55a7b": "cc4328", - "f8f8f8": "f8f8f8", "ee5a4a": "ff884c", "2c2423": "191933", "3a3130": "312c49", diff --git a/public/images/pokemon/variant/428.json b/public/images/pokemon/variant/428.json index 46c653b17b0..3978fe7c610 100644 --- a/public/images/pokemon/variant/428.json +++ b/public/images/pokemon/variant/428.json @@ -1,7 +1,6 @@ { "1": { "523a3a": "994c3d", - "101010": "101010", "846b5a": "991e47", "b57b4a": "ffcc99", "efdea5": "ff6666", @@ -10,12 +9,10 @@ "7b3a42": "472866", "c5a57b": "cc3d55", "634a42": "660a38", - "ffffff": "ffffff", "ef5a4a": "bd7acc" }, "2": { "523a3a": "355699", - "101010": "101010", "846b5a": "948eb2", "b57b4a": "8cd8ff", "efdea5": "ffffff", @@ -24,7 +21,6 @@ "7b3a42": "990c00", "c5a57b": "cecee5", "634a42": "65597f", - "ffffff": "ffffff", "ef5a4a": "ff884c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/429.json b/public/images/pokemon/variant/429.json index 07e458a0baa..576fda4a949 100644 --- a/public/images/pokemon/variant/429.json +++ b/public/images/pokemon/variant/429.json @@ -4,11 +4,9 @@ "845284": "d3941a", "b563b5": "ffdd67", "31213a": "132443", - "101010": "101010", "4a3a5a": "244260", "6b4a94": "387fa7", "ce9c00": "c08ecb", - "ffffff": "ffffff", "943a5a": "71370f", "f7de3a": "e5c9e9", "ef3a10": "cc762f" @@ -18,11 +16,9 @@ "845284": "1dbdb9", "b563b5": "3df7ed", "31213a": "244358", - "101010": "101010", "4a3a5a": "7396b4", "6b4a94": "a1c8db", "ce9c00": "149c9d", - "ffffff": "ffffff", "943a5a": "7b3c08", "f7de3a": "55e6de", "ef3a10": "e28c27" @@ -32,11 +28,9 @@ "845284": "eece8c", "b563b5": "fff7dd", "31213a": "603305", - "101010": "101010", "4a3a5a": "b56f2a", "6b4a94": "e6aa47", "ce9c00": "66d0e5", - "ffffff": "ffffff", "943a5a": "7a1511", "f7de3a": "a6f0f8", "ef3a10": "b83a31" diff --git a/public/images/pokemon/variant/43.json b/public/images/pokemon/variant/43.json index 382d5ea10ad..7cfdf44679a 100644 --- a/public/images/pokemon/variant/43.json +++ b/public/images/pokemon/variant/43.json @@ -4,7 +4,6 @@ "8cad31": "3f419d", "c5e67b": "90a1d7", "9cd64a": "606dbb", - "101010": "101010", "5a6b84": "7946a9", "7394a5": "a564c7", "94b5c5": "d688e6", @@ -17,7 +16,6 @@ "8cad31": "8b4a13", "c5e67b": "e8b737", "9cd64a": "b88026", - "101010": "101010", "5a6b84": "79152a", "7394a5": "b3292e", "94b5c5": "de6042", diff --git a/public/images/pokemon/variant/433.json b/public/images/pokemon/variant/433.json index 9f770cfc89d..53f2aa0d25d 100644 --- a/public/images/pokemon/variant/433.json +++ b/public/images/pokemon/variant/433.json @@ -5,13 +5,11 @@ "e66352": "f37cdf", "d6d6f7": "e7d6e8", "a5a5ce": "a189a6", - "000000": "000000", "63524a": "7d492f", "ffd65a": "ffce5a", "bd9c4a": "e6a54a", "ffe694": "ffd1a4", - "846b4a": "a6673b", - "ffffff": "ffffff" + "846b4a": "a6673b" }, "1": { "6b3a31": "14404e", @@ -19,13 +17,11 @@ "e66352": "4a94ad", "d6d6f7": "ebd4b0", "a5a5ce": "cca375", - "000000": "000000", "63524a": "404c85", "ffd65a": "afadcd", "bd9c4a": "888ab1", "ffe694": "e0dbf5", - "846b4a": "5b6596", - "ffffff": "ffffff" + "846b4a": "5b6596" }, "2": { "6b3a31": "102837", @@ -33,12 +29,10 @@ "e66352": "4d8891", "d6d6f7": "f7e6e5", "a5a5ce": "c29ea6", - "000000": "000000", "63524a": "6d2018", "ffd65a": "f0a878", "bd9c4a": "c86b3e", "ffe694": "ffd1a4", - "846b4a": "934123", - "ffffff": "ffffff" + "846b4a": "934123" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/436.json b/public/images/pokemon/variant/436.json index b695af1a3fc..e2fa4e0d532 100644 --- a/public/images/pokemon/variant/436.json +++ b/public/images/pokemon/variant/436.json @@ -4,7 +4,6 @@ "2984a5": "9192a6", "195a7b": "737185", "42a5c5": "c3c3de", - "101010": "101010", "ffde73": "ed87ff", "94b58c": "a15ed9", "63c5e6": "dfe1f4" @@ -14,7 +13,6 @@ "2984a5": "9d4e16", "195a7b": "7e2b15", "42a5c5": "d0662a", - "101010": "101010", "ffde73": "82d562", "94b58c": "899945", "63c5e6": "e98851" diff --git a/public/images/pokemon/variant/437.json b/public/images/pokemon/variant/437.json index d5dedea3748..a278b01e36f 100644 --- a/public/images/pokemon/variant/437.json +++ b/public/images/pokemon/variant/437.json @@ -4,7 +4,6 @@ "73d6ef": "eeeaff", "214a5a": "202429", "42adce": "dedede", - "101010": "101010", "3194b5": "9c9db4", "bdd6de": "bd9173", "a5c5ce": "a27661", @@ -17,7 +16,6 @@ "73d6ef": "f4a97f", "214a5a": "3a1812", "42adce": "d58151", - "101010": "101010", "3194b5": "9d5f33", "bdd6de": "e0da82", "a5c5ce": "ccbd73", diff --git a/public/images/pokemon/variant/438.json b/public/images/pokemon/variant/438.json index 11b250edd0c..46689927197 100644 --- a/public/images/pokemon/variant/438.json +++ b/public/images/pokemon/variant/438.json @@ -4,7 +4,6 @@ "5a8c5a": "6c4616", "9cde7b": "b6a747", "4ac542": "8a6a24", - "000000": "000000", "846b42": "4c443b", "524231": "322a22", "ad845a": "5d564e", @@ -18,13 +17,11 @@ "5a8c5a": "b9ac9d", "9cde7b": "fffdee", "4ac542": "e8e6d7", - "000000": "000000", "846b42": "3c389d", "524231": "2d2164", "ad845a": "4058a8", "c5a54a": "5c80c0", "ffef7b": "c1e0f3", - "f7ce3a": "8fb5dc", - "a5424a": "a5424a" + "f7ce3a": "8fb5dc" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/44.json b/public/images/pokemon/variant/44.json index 143a57297ec..872ed4d67d7 100644 --- a/public/images/pokemon/variant/44.json +++ b/public/images/pokemon/variant/44.json @@ -1,7 +1,6 @@ { "1": { "5a2900": "162486", - "101010": "101010", "ad523a": "4d75b6", "843a19": "2c489f", "ffbd42": "55bb7e", @@ -17,7 +16,6 @@ }, "2": { "5a2900": "680b10", - "101010": "101010", "ad523a": "bd4e2d", "843a19": "8d1e11", "ffbd42": "e8d65e", diff --git a/public/images/pokemon/variant/440.json b/public/images/pokemon/variant/440.json index 090daa258ac..55aa924a89f 100644 --- a/public/images/pokemon/variant/440.json +++ b/public/images/pokemon/variant/440.json @@ -2,7 +2,6 @@ "0": { "a55a7b": "925382", "ffc5d6": "f6cae1", - "101010": "101010", "c58ca5": "c57cad", "73425a": "6c1f9e", "ffffff": "fff4fb", @@ -13,7 +12,6 @@ "1": { "a55a7b": "81256f", "ffc5d6": "ebbada", - "101010": "101010", "c58ca5": "bd61a4", "73425a": "4f0e22", "ffffff": "fff4fb", diff --git a/public/images/pokemon/variant/441.json b/public/images/pokemon/variant/441.json index 1fce9238ec2..bd6244727fe 100644 --- a/public/images/pokemon/variant/441.json +++ b/public/images/pokemon/variant/441.json @@ -3,7 +3,6 @@ "292931": "331d29", "42424a": "573244", "5a5a63": "8f5a70", - "000000": "000000", "ffffff": "deacce", "c5c5c5": "ffeef7", "e67b9c": "ffd067", @@ -19,7 +18,6 @@ "292931": "212530", "42424a": "2e333d", "5a5a63": "3c4047", - "000000": "000000", "ffffff": "dec0ac", "c5c5c5": "fff1dc", "e67b9c": "f37878", diff --git a/public/images/pokemon/variant/442.json b/public/images/pokemon/variant/442.json index 56ab0f334e8..39129cccf64 100644 --- a/public/images/pokemon/variant/442.json +++ b/public/images/pokemon/variant/442.json @@ -7,13 +7,9 @@ "ffde10": "db8241", "31634a": "00145e", "4a8c42": "d77548", - "101010": "101010", "314231": "423131", "734a7b": "1d1d70", "52426b": "42426b", - "b59c94": "b59c94", - "9c846b": "9c846b", - "846b63": "846b63", "524252": "524242" }, "2": { @@ -24,8 +20,6 @@ "ffde10": "a61145", "31634a": "4d559d", "4a8c42": "42598c", - "101010": "101010", - "314231": "314231", "734a7b": "671b35", "52426b": "7d354e", "b59c94": "59001f", diff --git a/public/images/pokemon/variant/443.json b/public/images/pokemon/variant/443.json index 2863290a668..344bcafdebf 100644 --- a/public/images/pokemon/variant/443.json +++ b/public/images/pokemon/variant/443.json @@ -5,15 +5,9 @@ "8cc5d6": "42a5f7", "426b84": "085284", "101010": "101921", - "42d6de": "42d6de", - "c5ced6": "c5ced6", - "3aadc5": "3aadc5", - "ffffff": "ffffff", - "5a6363": "5a6363", "7b1910": "731029", "ad3a10": "a57c10", "de5a29": "e6c529", - "ce7373": "ce7373", "5a1000": "524200" }, "1": { @@ -23,14 +17,10 @@ "426b84": "522521", "101010": "101921", "42d6de": "54b0ff", - "c5ced6": "c5ced6", "3aadc5": "2878e1", - "ffffff": "ffffff", - "5a6363": "5a6363", "7b1910": "731029", "ad3a10": "92a9b2", "de5a29": "d9f0f1", - "ce7373": "ce7373", "5a1000": "524200" }, "2": { @@ -40,10 +30,7 @@ "426b84": "223a4a", "101010": "101921", "42d6de": "6fe6a3", - "c5ced6": "c5ced6", "3aadc5": "23b8a8", - "ffffff": "ffffff", - "5a6363": "5a6363", "7b1910": "7b1a43", "ad3a10": "be472f", "de5a29": "dd845e", diff --git a/public/images/pokemon/variant/444.json b/public/images/pokemon/variant/444.json index e9a652ad8c2..c928f82a213 100644 --- a/public/images/pokemon/variant/444.json +++ b/public/images/pokemon/variant/444.json @@ -11,10 +11,7 @@ "de9c19": "e53d3f", "5a1000": "502209", "ad314a": "ad7b08", - "c5ced6": "c5ced6", - "ffffff": "ffffff", - "de5a29": "f7b834", - "737b84": "737b84" + "de5a29": "f7b834" }, "1": { "102952": "3d0a17", @@ -28,10 +25,7 @@ "de9c19": "d9900e", "5a1000": "211e33", "ad314a": "829ca6", - "c5ced6": "c5ced6", - "ffffff": "ffffff", - "de5a29": "c2dedf", - "737b84": "737b84" + "de5a29": "c2dedf" }, "2": { "102952": "092136", @@ -45,9 +39,6 @@ "de9c19": "2c8bf7", "5a1000": "521000", "ad314a": "be472f", - "c5ced6": "c5ced6", - "ffffff": "ffffff", - "de5a29": "ee723e", - "737b84": "737b84" + "de5a29": "ee723e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/445-mega.json b/public/images/pokemon/variant/445-mega.json index 0e67f00ecd9..f74cd6fd1cf 100644 --- a/public/images/pokemon/variant/445-mega.json +++ b/public/images/pokemon/variant/445-mega.json @@ -5,15 +5,9 @@ "41418b": "19446e", "ffd518": "42d6de", "c59410": "3aadc5", - "101010": "101010", "7e2121": "502209", - "f5f5f5": "f5f5f5", "bd3941": "9e5201", - "e64a31": "f7ac34", - "6a395a": "6a395a", - "bd737b": "bd737b", - "737b83": "737b83", - "c5cdd5": "c5cdd5" + "e64a31": "f7ac34" }, "1": { "292952": "632f1b", @@ -21,15 +15,9 @@ "41418b": "b67252", "ffd518": "4caaff", "c59410": "255dd7", - "101010": "101010", "7e2121": "393648", - "f5f5f5": "f5f5f5", "bd3941": "9fb6bf", - "e64a31": "dce8e8", - "6a395a": "6a395a", - "bd737b": "bd737b", - "737b83": "737b83", - "c5cdd5": "c5cdd5" + "e64a31": "dce8e8" }, "2": { "292952": "051a2e", @@ -37,14 +25,8 @@ "41418b": "152c3b", "ffd518": "6fe6a3", "c59410": "23b8a8", - "101010": "101010", "7e2121": "521000", - "f5f5f5": "f5f5f5", "bd3941": "b23219", - "e64a31": "ec642c", - "6a395a": "6a395a", - "bd737b": "bd737b", - "737b83": "737b83", - "c5cdd5": "c5cdd5" + "e64a31": "ec642c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/445.json b/public/images/pokemon/variant/445.json index 5e0b917b349..664a505d419 100644 --- a/public/images/pokemon/variant/445.json +++ b/public/images/pokemon/variant/445.json @@ -6,12 +6,7 @@ "292952": "0a1347", "5a63ad": "226596", "ffd619": "42d6de", - "737b84": "737b84", - "101010": "101010", - "ffffff": "ffffff", - "c5ced6": "c5ced6", "6b3a5a": "6b4a29", - "bd737b": "bd737b", "e64a31": "f7ac34", "5a1000": "502209", "bd3a42": "b2630f" @@ -23,12 +18,7 @@ "292952": "3d0a17", "5a63ad": "deae7a", "ffd619": "4caaff", - "737b84": "737b84", - "101010": "101010", - "ffffff": "ffffff", - "c5ced6": "c5ced6", "6b3a5a": "6b4a29", - "bd737b": "bd737b", "e64a31": "dce8e8", "5a1000": "393648", "bd3a42": "9fb6bf" @@ -40,12 +30,7 @@ "292952": "051a2e", "5a63ad": "2f434b", "ffd619": "6fe6a3", - "737b84": "737b84", - "101010": "101010", - "ffffff": "ffffff", - "c5ced6": "c5ced6", "6b3a5a": "6b4a29", - "bd737b": "bd737b", "e64a31": "ee723e", "5a1000": "521000", "bd3a42": "be472f" diff --git a/public/images/pokemon/variant/447.json b/public/images/pokemon/variant/447.json index a6c8ea5f5cd..80147a9e70a 100644 --- a/public/images/pokemon/variant/447.json +++ b/public/images/pokemon/variant/447.json @@ -1,13 +1,10 @@ { "0": { - "101010": "101010", "104a7b": "6c3e20", "29739c": "a56d2f", "4a9cef": "e2ce75", "5a5a5a": "2c486e", "3a3a3a": "12334a", - "a53131": "a53131", - "de4242": "de4242", "ffffff": "fff8f1", "8c843a": "b6957f", "dec573": "e6d5b9", @@ -15,7 +12,6 @@ "b5b5b5": "fff8f1" }, "1": { - "101010": "101010", "104a7b": "410814", "29739c": "7f1e2f", "4a9cef": "b85251", @@ -30,7 +26,6 @@ "b5b5b5": "fcc161" }, "2": { - "101010": "101010", "104a7b": "2e1547", "29739c": "513674", "4a9cef": "735c9e", @@ -38,10 +33,7 @@ "3a3a3a": "26153f", "a53131": "b8461f", "de4242": "de8141", - "ffffff": "ffffff", "8c843a": "373566", - "dec573": "51668e", - "848484": "848484", - "b5b5b5": "b5b5b5" + "dec573": "51668e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/448-mega.json b/public/images/pokemon/variant/448-mega.json index 09c18f8521b..242019be218 100644 --- a/public/images/pokemon/variant/448-mega.json +++ b/public/images/pokemon/variant/448-mega.json @@ -2,13 +2,11 @@ "0": { "173968": "6c3e20", "407cdc": "e2ce75", - "101010": "101010", "2e5c85": "a56d2f", "5a5a5a": "2c2f4c", "393939": "171932", "838383": "3a5376", "9a2626": "8a332f", - "fcfcfc": "fcfcfc", "de4141": "d85e40", "e6d083": "719cbe", "b09a4d": "51689c", @@ -17,7 +15,6 @@ "1": { "173968": "3f0916", "407cdc": "b85251", - "101010": "101010", "2e5c85": "7f1e2f", "5a5a5a": "202931", "393939": "202931", @@ -32,13 +29,11 @@ "2": { "173968": "2e1547", "407cdc": "735c9e", - "101010": "101010", "2e5c85": "513674", "5a5a5a": "2c2339", "393939": "291838", "838383": "453a5a", "9a2626": "b8461f", - "fcfcfc": "fcfcfc", "de4141": "de8141", "e6d083": "51668e", "b09a4d": "373566", diff --git a/public/images/pokemon/variant/448.json b/public/images/pokemon/variant/448.json index e573f087e67..e7854e081d7 100644 --- a/public/images/pokemon/variant/448.json +++ b/public/images/pokemon/variant/448.json @@ -2,7 +2,6 @@ "0": { "104a7b": "6c3e20", "4a9cef": "e2ce75", - "101010": "101010", "29739c": "a56d2f", "3a3a3a": "0a2734", "5a5a5a": "223754", @@ -17,7 +16,6 @@ "1": { "104a7b": "410814", "4a9cef": "b85251", - "101010": "101010", "29739c": "7f1e2f", "3a3a3a": "3d1919", "5a5a5a": "262032", @@ -32,16 +30,13 @@ "2": { "104a7b": "2e1547", "4a9cef": "735c9e", - "101010": "101010", "29739c": "513674", "3a3a3a": "291838", "5a5a5a": "2c2339", "848484": "453a5a", "a53131": "b8461f", - "ffffff": "ffffff", "de4242": "de8141", "b5b563": "47439c", - "e6e69c": "6c8bc7", - "d6d6d6": "d6d6d6" + "e6e69c": "6c8bc7" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/45.json b/public/images/pokemon/variant/45.json index a1dfd2e7558..358817678d6 100644 --- a/public/images/pokemon/variant/45.json +++ b/public/images/pokemon/variant/45.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "731910": "091d79", "f78c8c": "8cbef7", "f77373": "5e8fde", @@ -18,7 +17,6 @@ "7384a5": "966fbb" }, "2": { - "101010": "101010", "731910": "97696f", "f78c8c": "ebe8d1", "f77373": "d2cbb2", diff --git a/public/images/pokemon/variant/456.json b/public/images/pokemon/variant/456.json index d73c8b48616..bdbd1a816c3 100644 --- a/public/images/pokemon/variant/456.json +++ b/public/images/pokemon/variant/456.json @@ -2,7 +2,6 @@ "1": { "526b8c": "966764", "94d6e6": "f3e1c6", - "101010": "101010", "7394ad": "cda38c", "833171": "d3633a", "29293a": "4f2846", @@ -10,14 +9,12 @@ "c5e6f7": "fffbf2", "c54591": "f19e53", "426b84": "aa6985", - "efffff": "efffff", "c54a94": "8bbcd9", "ad8cbd": "ffca7b" }, "2": { "526b8c": "181e52", "94d6e6": "34507e", - "101010": "101010", "7394ad": "1c335b", "833171": "366ea4", "29293a": "b66736", @@ -25,7 +22,6 @@ "c5e6f7": "49749b", "c54591": "50a8c2", "426b84": "fff8b0", - "efffff": "efffff", "c54a94": "7b1615", "ad8cbd": "3979a1" } diff --git a/public/images/pokemon/variant/4562.json b/public/images/pokemon/variant/4562.json index 52855aa484a..a2c3bd41ea6 100644 --- a/public/images/pokemon/variant/4562.json +++ b/public/images/pokemon/variant/4562.json @@ -2,11 +2,8 @@ "1": { "313131": "145555", "525252": "257e6a", - "101010": "101010", "672b82": "7e173e", "ab38d1": "b0264c", - "371d3f": "371d3f", - "000000": "000000", "6f5c6b": "743949", "c5b9bb": "c69981", "cb414b": "18265b", @@ -17,11 +14,8 @@ "2": { "313131": "69162c", "525252": "90222b", - "101010": "101010", "672b82": "57a0b9", "ab38d1": "c2ffe2", - "371d3f": "371d3f", - "000000": "000000", "6f5c6b": "0a4340", "c5b9bb": "298a61", "cb414b": "ffad58", diff --git a/public/images/pokemon/variant/457.json b/public/images/pokemon/variant/457.json index 2c9766d905b..0a698b077ae 100644 --- a/public/images/pokemon/variant/457.json +++ b/public/images/pokemon/variant/457.json @@ -1,7 +1,6 @@ { "1": { "526b8c": "966764", - "101010": "101010", "c5e6f7": "fffbf2", "94d6e6": "f3e1c6", "29293a": "4f2846", @@ -10,12 +9,10 @@ "c54591": "ffc369", "9e357b": "c7703c", "73427b": "6f75a0", - "c54a94": "aadff3", - "efffff": "efffff" + "c54a94": "aadff3" }, "2": { "526b8c": "0f154a", - "101010": "101010", "c5e6f7": "5781c7", "94d6e6": "34507e", "29293a": "ffa849", @@ -24,7 +21,6 @@ "c54591": "50a8c2", "9e357b": "366ea4", "73427b": "7b1213", - "c54a94": "983121", - "efffff": "efffff" + "c54a94": "983121" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/458.json b/public/images/pokemon/variant/458.json index cac7ad8d381..5fd291d1021 100644 --- a/public/images/pokemon/variant/458.json +++ b/public/images/pokemon/variant/458.json @@ -5,11 +5,9 @@ "1052ad": "d98223", "639cd6": "ffbe49", "102952": "4b1e00", - "000000": "000000", "9cb5de": "cebea5", "b5deff": "eae0cb", "7b94a5": "a48e76", - "ffffff": "ffffff", "4a6373": "8d6c43" }, "2": { @@ -18,11 +16,9 @@ "1052ad": "9ec050", "639cd6": "c6e188", "102952": "233e05", - "000000": "000000", "9cb5de": "e5ca9c", "b5deff": "f3e6cc", "7b94a5": "cbaa7a", - "ffffff": "ffffff", "4a6373": "8d6c43" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/46.json b/public/images/pokemon/variant/46.json index d053c5e40b8..877ed57db83 100644 --- a/public/images/pokemon/variant/46.json +++ b/public/images/pokemon/variant/46.json @@ -5,14 +5,12 @@ "f76b6b": "d7b5b1", "c5b521": "d9c9b9", "ffd652": "f3e8dc", - "101010": "101010", "734a19": "521e0a", "3a2910": "311c07", "e68429": "bc4b23", "b56321": "85251b", "ffad63": "cf6423", "5a5a5a": "774718", - "fff7ff": "fff7ff", "a5a5ce": "ddaf52", "cecece": "f6dc7f" }, @@ -22,14 +20,12 @@ "f76b6b": "e83557", "c5b521": "e5d59c", "ffd652": "fffedf", - "101010": "101010", "734a19": "5a392d", "3a2910": "3a2108", "e68429": "d1afa3", "b56321": "98655f", "ffad63": "f3d8cb", "5a5a5a": "312b68", - "fff7ff": "fff7ff", "a5a5ce": "7070ea", "cecece": "92a4f0" }, @@ -39,14 +35,12 @@ "f76b6b": "5668f8", "c5b521": "b4c5d0", "ffd652": "ddf1f8", - "101010": "101010", "734a19": "3d2b4e", "3a2910": "1e152d", "e68429": "9779a6", "b56321": "6a507b", "ffad63": "bf9edd", "5a5a5a": "760013", - "fff7ff": "fff7ff", "a5a5ce": "e83557", "cecece": "ff878d" } diff --git a/public/images/pokemon/variant/461.json b/public/images/pokemon/variant/461.json index a3af436f1e1..e770a53d4ec 100644 --- a/public/images/pokemon/variant/461.json +++ b/public/images/pokemon/variant/461.json @@ -4,7 +4,6 @@ "c52973": "3a3d60", "ff94a5": "94a3c5", "f75273": "636896", - "101010": "101010", "424a84": "691043", "7384bd": "ac3755", "6b6bad": "8b274b", @@ -21,12 +20,10 @@ "c52973": "3d81c5", "ff94a5": "78ebfc", "f75273": "5cb0eb", - "101010": "101010", "424a84": "ecaa84", "7384bd": "ffeed4", "6b6bad": "ffd3a7", "293152": "96543f", - "ffffff": "ffffff", "c58c08": "8f1a8d", "ffd642": "e6509f", "c5bdce": "afd3e9", diff --git a/public/images/pokemon/variant/462.json b/public/images/pokemon/variant/462.json index 808b79b6da4..69da17dc2de 100644 --- a/public/images/pokemon/variant/462.json +++ b/public/images/pokemon/variant/462.json @@ -3,24 +3,18 @@ "ad8419": "8fb9cc", "f7ce52": "cee7f2", "635a6b": "90495b", - "ffffff": "ffffff", - "101010": "101010", "7b7b84": "90495b", "adadb5": "c36c77", "424252": "612e40", "8494c5": "ffc4b8", "9cbdef": "ffe9e5", - "6b739c": "f99596", - "d64a29": "d64a29", - "a53a29": "a53a29", - "732929": "732929" + "6b739c": "f99596" }, "2": { "ad8419": "6a9ca0", "f7ce52": "a7dcaa", "635a6b": "662e00", "ffffff": "fffb93", - "101010": "101010", "7b7b84": "662e00", "adadb5": "8c500b", "424252": "401d00", diff --git a/public/images/pokemon/variant/464.json b/public/images/pokemon/variant/464.json index 835bdca7c47..0d1ed67d49d 100644 --- a/public/images/pokemon/variant/464.json +++ b/public/images/pokemon/variant/464.json @@ -1,25 +1,18 @@ { "1": { - "6b6373": "6b6373", "3a3a4a": "3b2d40", "5a4a63": "514259", - "101010": "101010", - "efefff": "efefff", "29293a": "1f1028", "523100": "3b1f58", "7b6b7b": "6e5d7b", - "948cad": "948cad", "943a00": "4c2f6e", "ef5200": "6f4d9f", - "cecede": "cecede", - "ad2900": "ad2900", "bd4200": "60418a" }, "2": { "6b6373": "b66360", "3a3a4a": "701f38", "5a4a63": "8f2c41", - "101010": "101010", "efefff": "ffdfd1", "29293a": "442339", "523100": "492133", diff --git a/public/images/pokemon/variant/466.json b/public/images/pokemon/variant/466.json index b0a2bd12820..d81269246f2 100644 --- a/public/images/pokemon/variant/466.json +++ b/public/images/pokemon/variant/466.json @@ -4,29 +4,24 @@ "731900": "004f87", "ffde21": "f07224", "5a4a42": "5e3a3a", - "000000": "000000", "b53a19": "3194ce", "f7523a": "63c5ef", "ffef94": "e8aa8b", "312929": "2d2629", "c5ad42": "bd4c3a", "ffffff": "e8e8e8", - "b5b5c5": "b5bdc5", - "6b6b6b": "6b6b6b" + "b5b5c5": "b5bdc5" }, "1": { "9c844a": "668198", "731900": "73376d", "ffde21": "35ffab", "5a4a42": "465b69", - "000000": "000000", "b53a19": "a45ead", "f7523a": "f795f6", "ffef94": "baffde", "312929": "333931", "c5ad42": "4abaae", - "ffffff": "ffffff", - "b5b5c5": "e6d5da", - "6b6b6b": "6b6b6b" + "b5b5c5": "e6d5da" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/467.json b/public/images/pokemon/variant/467.json index 684a34c97fa..cd1ee711a46 100644 --- a/public/images/pokemon/variant/467.json +++ b/public/images/pokemon/variant/467.json @@ -5,19 +5,14 @@ "ffc53a": "fb8c3b", "cea53a": "db4d19", "f76331": "ee7f2d", - "4a4a42": "4a4a42", "9e344a": "8c3313", "ad3a52": "372d49", "642423": "272034", "4e251d": "581d08", - "101010": "101010", "e64231": "524b6f", "ff94a5": "777066", "c55a6b": "474139", - "ffffff": "ffffff", - "ced6e6": "ced6e6", - "9b3c56": "3f352f", - "2a2523": "2a2523" + "9b3c56": "3f352f" }, "2": { "846321": "699296", @@ -25,18 +20,13 @@ "ffc53a": "eaffff", "cea53a": "c6edf2", "f76331": "478bc0", - "4a4a42": "4a4a42", "9e344a": "4065b0", "ad3a52": "4065b0", "642423": "303d58", "4e251d": "303d58", - "101010": "101010", "e64231": "5398cf", "ff94a5": "abc7de", "c55a6b": "7f90a9", - "ffffff": "ffffff", - "ced6e6": "ced6e6", - "9b3c56": "586271", - "2a2523": "2a2523" + "9b3c56": "586271" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/468.json b/public/images/pokemon/variant/468.json index f29881dcb1b..3196edc8f95 100644 --- a/public/images/pokemon/variant/468.json +++ b/public/images/pokemon/variant/468.json @@ -6,7 +6,6 @@ "4a5a73": "593237", "ce4a31": "1c7b7e", "bdc5de": "ceacac", - "101010": "101010", "4284ef": "d44779", "94b5ff": "ff7986", "bd8484": "28a6a5", @@ -19,7 +18,6 @@ "4a5a73": "452030", "ce4a31": "f6bd58", "bdc5de": "c2888c", - "101010": "101010", "4284ef": "ef884d", "94b5ff": "ffc490", "bd8484": "ffdbaa", @@ -32,7 +30,6 @@ "4a5a73": "254985", "ce4a31": "d97741", "bdc5de": "81aaca", - "101010": "101010", "4284ef": "db79db", "94b5ff": "e89fe5", "bd8484": "e48d41", diff --git a/public/images/pokemon/variant/47.json b/public/images/pokemon/variant/47.json index 4d953e02dcf..c55cc1f25f0 100644 --- a/public/images/pokemon/variant/47.json +++ b/public/images/pokemon/variant/47.json @@ -10,7 +10,6 @@ "b5423a": "85251b", "631000": "521e0a", "de6b31": "bc4b23", - "101010": "101010", "9c8ca5": "774718", "fff7ff": "f6dc7f", "d6d6d6": "ddaf52" @@ -26,7 +25,6 @@ "b5423a": "98655f", "631000": "5a392d", "de6b31": "d1afa3", - "101010": "101010", "9c8ca5": "312b68", "fff7ff": "92a4f0", "d6d6d6": "7070ea" @@ -42,7 +40,6 @@ "b5423a": "6a507b", "631000": "3d2b4e", "de6b31": "9779a6", - "101010": "101010", "9c8ca5": "aa1810", "fff7ff": "ee5a3b", "d6d6d6": "cb381f" diff --git a/public/images/pokemon/variant/470.json b/public/images/pokemon/variant/470.json index 227c74bb524..8af1cf54438 100644 --- a/public/images/pokemon/variant/470.json +++ b/public/images/pokemon/variant/470.json @@ -2,7 +2,6 @@ "0": { "31635a": "076849", "319c73": "17b579", - "101010": "101010", "6bbd8c": "6aec9e", "635242": "736151", "5a4221": "1c59a6", @@ -10,15 +9,11 @@ "bd9463": "c5a87a", "946331": "1c85a7", "3a2919": "0b1747", - "efffff": "efffff", - "846b42": "846b42", - "d6b573": "e8d09f", - "423a42": "423a42" + "d6b573": "e8d09f" }, "1": { "31635a": "024335", "319c73": "67a27a", - "101010": "101010", "6bbd8c": "a9d9ab", "635242": "736151", "5a4221": "541741", @@ -26,7 +21,6 @@ "bd9463": "975e45", "946331": "7a2c56", "3a2919": "0a2c33", - "efffff": "efffff", "846b42": "824734", "d6b573": "b78160", "423a42": "4b2629" @@ -34,7 +28,6 @@ "2": { "31635a": "9f5d29", "319c73": "d8a452", - "101010": "101010", "6bbd8c": "edd898", "635242": "4e230e", "5a4221": "803825", @@ -42,7 +35,6 @@ "bd9463": "6d4f33", "946331": "a95c3e", "3a2919": "552c12", - "efffff": "efffff", "846b42": "4a391e", "d6b573": "816242", "423a42": "310f06" diff --git a/public/images/pokemon/variant/471.json b/public/images/pokemon/variant/471.json index 14cc5e429e8..4240babbcae 100644 --- a/public/images/pokemon/variant/471.json +++ b/public/images/pokemon/variant/471.json @@ -1,15 +1,12 @@ { "0": { - "101010": "101010", "7b9cb5": "dad9ea", "94e6ef": "f8f7ff", "525a84": "636b94", "52639c": "54bbd2", "3a3a52": "1a6782", "529cde": "a0e7f7", - "313a4a": "313a4a", "425a6b": "3597ac", - "efffff": "efffff", "94b5ce": "e6e3f3" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/474.json b/public/images/pokemon/variant/474.json index 83d717503a6..6ec1f7edef1 100644 --- a/public/images/pokemon/variant/474.json +++ b/public/images/pokemon/variant/474.json @@ -3,10 +3,8 @@ "5a3a4a": "9e264e", "94426b": "d95492", "ef5a63": "f8a8e6", - "101010": "101010", "bd4a6b": "e883c8", "ff94b5": "fccef2", - "ffffff": "ffffff", "313a63": "110a25", "8cd6ff": "5e4868", "31739c": "271a3e", @@ -19,7 +17,6 @@ "5a3a4a": "31150e", "94426b": "491c0c", "ef5a63": "82391d", - "101010": "101010", "bd4a6b": "612a17", "ff94b5": "a04c27", "ffffff": "ffe4d4", diff --git a/public/images/pokemon/variant/475.json b/public/images/pokemon/variant/475.json index 68f3a5a6432..2b1cb0e6173 100644 --- a/public/images/pokemon/variant/475.json +++ b/public/images/pokemon/variant/475.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "7394a5": "fff1c0", "7bc5b5": "ebc984", "527b84": "17042f", @@ -11,24 +10,17 @@ "c5cede": "ffc4a6", "efefff": "f8efde", "a5b5ce": "ffc4a6", - "ffffff": "ffffff", "e6523a": "da3e4f", "ff9c84": "ca2033", "7b5252": "b80e2f" }, "2": { - "101010": "101010", "7394a5": "5b5790", "7bc5b5": "3f427f", "527b84": "2e2746", "3a5252": "34345d", "42845a": "242745", "5ab56b": "282c5d", - "7b8cad": "7b8cad", - "c5cede": "c5cede", - "efefff": "efefff", - "a5b5ce": "a5b5ce", - "ffffff": "ffffff", "e6523a": "d846c1", "ff9c84": "b035ae", "7b5252": "9e2a7c" diff --git a/public/images/pokemon/variant/478.json b/public/images/pokemon/variant/478.json index a27441bba77..cb6fdbce804 100644 --- a/public/images/pokemon/variant/478.json +++ b/public/images/pokemon/variant/478.json @@ -3,7 +3,6 @@ "527bb5": "189c28", "42528c": "0f8c40", "73b5d6": "65d64d", - "101010": "101010", "42426b": "123120", "8c8cad": "244f32", "ffffff": "558752", diff --git a/public/images/pokemon/variant/479-fan.json b/public/images/pokemon/variant/479-fan.json index 6f4818f6770..8fd87e5db9b 100644 --- a/public/images/pokemon/variant/479-fan.json +++ b/public/images/pokemon/variant/479-fan.json @@ -8,7 +8,6 @@ "ffffff": "fbffbd", "ef7329": "417131", "ffad84": "819d56", - "101010": "101010", "4a4a52": "2e3f18", "bdbdbd": "d8e082", "ffde73": "7aa26f", @@ -20,12 +19,9 @@ "ffefa5": "edf2fa", "c54a19": "cbb240", "7b3a21": "ad7d28", - "ffffff": "ffffff", "ef7329": "e4de6d", "ffad84": "fcfebf", - "101010": "101010", "4a4a52": "374f6c", - "bdbdbd": "bdbdbd", "ffde73": "e99499", "e67319": "d36172" } diff --git a/public/images/pokemon/variant/479-frost.json b/public/images/pokemon/variant/479-frost.json index a45e4bea735..4277eb9dc63 100644 --- a/public/images/pokemon/variant/479-frost.json +++ b/public/images/pokemon/variant/479-frost.json @@ -7,7 +7,6 @@ "ffad84": "819d56", "7b3a21": "183b29", "ef7329": "417131", - "101010": "101010", "ffffff": "fbffbd", "9484de": "9ea436", "6b3aad": "648c50", @@ -22,11 +21,8 @@ "ffad84": "e9edfe", "7b3a21": "536d8c", "ef7329": "c5cbe5", - "101010": "101010", - "ffffff": "ffffff", "9484de": "f0e096", "6b3aad": "d3a94c", - "bdbdbd": "bdbdbd", "4a4a52": "2f4865" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/479-heat.json b/public/images/pokemon/variant/479-heat.json index b0cf3c22876..b9d3c248833 100644 --- a/public/images/pokemon/variant/479-heat.json +++ b/public/images/pokemon/variant/479-heat.json @@ -11,7 +11,6 @@ "bdbdbd": "d8e082", "ff7373": "9ea436", "ce313a": "648c50", - "101010": "101010", "292929": "183b29", "4a4a52": "505a46" }, @@ -19,15 +18,12 @@ "bd2929": "cbbf4c", "ff4231": "f5f4ab", "ff9c94": "fdffe1", - "ffffff": "ffffff", "c54a19": "d06280", "7b3a21": "9e3867", "ef7329": "ff8493", "ffad84": "ffd5d0", - "bdbdbd": "bdbdbd", "ff7373": "37c983", "ce313a": "1b976a", - "101010": "101010", "292929": "581944", "4a4a52": "793142" } diff --git a/public/images/pokemon/variant/479-mow.json b/public/images/pokemon/variant/479-mow.json index ef080956443..31daefc660c 100644 --- a/public/images/pokemon/variant/479-mow.json +++ b/public/images/pokemon/variant/479-mow.json @@ -7,7 +7,6 @@ "8cf7ad": "9ea436", "ef7329": "417131", "ffad84": "819d56", - "101010": "101010", "4a4a52": "183b29", "21b552": "9ea436", "ffffff": "fbffbd", @@ -22,11 +21,7 @@ "8cf7ad": "ffbcc2", "ef7329": "279e69", "ffad84": "6ada9c", - "101010": "101010", - "4a4a52": "4a4a52", "21b552": "83d0ec", - "ffffff": "ffffff", - "bdbdbd": "bdbdbd", "087b42": "40b4de" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/479-wash.json b/public/images/pokemon/variant/479-wash.json index 05366c8e80f..d24a1094568 100644 --- a/public/images/pokemon/variant/479-wash.json +++ b/public/images/pokemon/variant/479-wash.json @@ -11,7 +11,6 @@ "ffffff": "fbffbd", "317bef": "9ea436", "0842ad": "648c50", - "101010": "101010", "4a4a52": "183b29" }, "2": { @@ -22,11 +21,8 @@ "ef7329": "86d7ec", "7b3a21": "255e90", "ffad84": "bbf7fe", - "bdbdbd": "bdbdbd", - "ffffff": "ffffff", "317bef": "73757f", "0842ad": "53555e", - "101010": "101010", "4a4a52": "3f3f4e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/479.json b/public/images/pokemon/variant/479.json index 1ecfab64f61..2ae2cf23642 100644 --- a/public/images/pokemon/variant/479.json +++ b/public/images/pokemon/variant/479.json @@ -8,7 +8,6 @@ "ef7329": "417131", "ffad84": "819d56", "ffffff": "fbffbd", - "101010": "101010", "bdbdbd": "d8e082", "317bef": "89a271", "0842ad": "648c50" @@ -21,9 +20,6 @@ "7b3a21": "242834", "ef7329": "4d5262", "ffad84": "777b88", - "ffffff": "ffffff", - "101010": "101010", - "bdbdbd": "bdbdbd", "317bef": "e9919c", "0842ad": "c95367" } diff --git a/public/images/pokemon/variant/480.json b/public/images/pokemon/variant/480.json index d65bc170282..de8d9f0f7c1 100644 --- a/public/images/pokemon/variant/480.json +++ b/public/images/pokemon/variant/480.json @@ -1,7 +1,6 @@ { "0": { "735a42": "86340d", - "101010": "101010", "f7c573": "e8824f", "ffde9c": "ffb376", "ad8c42": "ba5327", @@ -10,13 +9,11 @@ "424242": "542416", "ef4242": "e141ed", "5a3a42": "440e8c", - "ffffff": "ffffff", "949cc5": "d49472", "ad4242": "ad2dd7" }, "1": { "735a42": "0b1f51", - "101010": "101010", "f7c573": "3675ba", "ffde9c": "5099d9", "ad8c42": "1e4891", @@ -25,13 +22,11 @@ "424242": "162460", "ef4242": "ffbd73", "5a3a42": "aa4e1c", - "ffffff": "ffffff", "949cc5": "6085d4", "ad4242": "ef8d45" }, "2": { "735a42": "123723", - "101010": "101010", "f7c573": "4d967d", "ffde9c": "92dabb", "ad8c42": "24594a", @@ -40,7 +35,6 @@ "424242": "47684e", "ef4242": "c45cec", "5a3a42": "5f1c68", - "ffffff": "ffffff", "949cc5": "a5bca8", "ad4242": "ab32ce" } diff --git a/public/images/pokemon/variant/481.json b/public/images/pokemon/variant/481.json index 54a3e938751..14b00812c7d 100644 --- a/public/images/pokemon/variant/481.json +++ b/public/images/pokemon/variant/481.json @@ -1,6 +1,5 @@ { "0": { - "101010": "101010", "84426b": "691149", "ef73ad": "b35596", "b55284": "93397b", @@ -8,7 +7,6 @@ "ef4242": "ffa85f", "5a3a42": "bf5614", "7b7394": "8d4275", - "ffffff": "ffffff", "b5cef7": "fbc8e1", "949cc5": "d295b9", "ad4242": "ef8134", @@ -17,7 +15,6 @@ "424242": "591c4b" }, "1": { - "101010": "101010", "84426b": "371959", "ef73ad": "785194", "b55284": "59367e", @@ -25,7 +22,6 @@ "ef4242": "28c75c", "5a3a42": "076033", "7b7394": "6b4b75", - "ffffff": "ffffff", "b5cef7": "e7d6ea", "949cc5": "b89cbb", "ad4242": "17a352", @@ -34,7 +30,6 @@ "424242": "51385c" }, "2": { - "101010": "101010", "84426b": "813401", "ef73ad": "ebab24", "b55284": "d97e2b", @@ -42,7 +37,6 @@ "ef4242": "ce569c", "5a3a42": "7c2060", "7b7394": "896149", - "ffffff": "ffffff", "b5cef7": "f7e0b5", "949cc5": "c5ac94", "ad4242": "bb3e8d", diff --git a/public/images/pokemon/variant/482.json b/public/images/pokemon/variant/482.json index 8665895fa59..5b48766e609 100644 --- a/public/images/pokemon/variant/482.json +++ b/public/images/pokemon/variant/482.json @@ -5,16 +5,12 @@ "b5cef7": "c5e1ef", "424242": "3e5a9d", "5a94c5": "27bac2", - "101010": "101010", "426394": "0f7293", "949cc5": "86abcc", "5a3a42": "500c66", "ef4242": "a045e1", "ad4242": "7c1caa", - "73ade6": "44e9e1", - "ffffff": "ffffff", - "ffb521": "ffb521", - "ad8c42": "ad8c42" + "73ade6": "44e9e1" }, "1": { "7b7394": "5d8e91", @@ -22,14 +18,12 @@ "b5cef7": "b5f7df", "424242": "3c6268", "5a94c5": "488356", - "101010": "101010", "426394": "32613b", "949cc5": "7ab5ad", "5a3a42": "9e3b0f", "ef4242": "eb914d", "ad4242": "d26725", "73ade6": "82be84", - "ffffff": "ffffff", "ffb521": "553178", "ad8c42": "9c5fb8" }, @@ -39,14 +33,12 @@ "b5cef7": "dbc6e6", "424242": "573d79", "5a94c5": "ce569c", - "101010": "101010", "426394": "a4327e", "949cc5": "ae8bc7", "5a3a42": "845104", "ef4242": "dfb132", "ad4242": "cb901d", "73ade6": "ec84be", - "ffffff": "ffffff", "ffb521": "2acf53", "ad8c42": "52e589" } diff --git a/public/images/pokemon/variant/485.json b/public/images/pokemon/variant/485.json index 91ff1824b7a..3a9144ba9c5 100644 --- a/public/images/pokemon/variant/485.json +++ b/public/images/pokemon/variant/485.json @@ -1,6 +1,5 @@ { "1": { - "737373": "737373", "5a3131": "313f5a", "e6e6ef": "ffffff", "c5c5c5": "e3e3e3", @@ -10,13 +9,11 @@ "949494": "bfa9a9", "ce8429": "29ce5a", "ffa510": "10ff6b", - "ffffff": "ffffff", "525252": "767676", "b54229": "b5a529", "ff523a": "fcff3a" }, "2": { - "737373": "737373", "5a3131": "462151", "e6e6ef": "b0b0b0", "c5c5c5": "949494", @@ -26,7 +23,6 @@ "949494": "636363", "ce8429": "ce2988", "ffa510": "f110ff", - "ffffff": "ffffff", "525252": "514949", "b54229": "4ab529", "ff523a": "7aff3a" diff --git a/public/images/pokemon/variant/487-altered.json b/public/images/pokemon/variant/487-altered.json index 8b1ce80eac6..929526b87b7 100644 --- a/public/images/pokemon/variant/487-altered.json +++ b/public/images/pokemon/variant/487-altered.json @@ -9,7 +9,6 @@ "9494a5": "535e7e", "c5ced6": "84a1b9", "ad7b00": "084740", - "000000": "000000", "ff4252": "ff78ef", "a5213a": "b23dad", "4a4a5a": "2f3154", @@ -25,7 +24,6 @@ "9494a5": "3e5056", "c5ced6": "597379", "ad7b00": "7b623f", - "000000": "000000", "ff4252": "46e92a", "a5213a": "16b811", "4a4a5a": "273c30", diff --git a/public/images/pokemon/variant/487-origin.json b/public/images/pokemon/variant/487-origin.json index dc396105b93..1d19e13cc14 100644 --- a/public/images/pokemon/variant/487-origin.json +++ b/public/images/pokemon/variant/487-origin.json @@ -13,7 +13,6 @@ "c5ced6": "acb6d8", "9494a5": "8485b9", "ffefc5": "9fffd4", - "000000": "000000", "6b6b7b": "7a58a6" }, "2": { @@ -29,8 +28,6 @@ "ce9c00": "e2d4af", "c5ced6": "818a7c", "9494a5": "495f64", - "ffefc5": "ffefc5", - "000000": "000000", "6b6b7b": "37434b" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/488.json b/public/images/pokemon/variant/488.json index 53e8b23da16..59e1c46f74c 100644 --- a/public/images/pokemon/variant/488.json +++ b/public/images/pokemon/variant/488.json @@ -1,7 +1,6 @@ { "1": { "6b5231": "5a3c2a", - "101010": "101010", "ffefbd": "fdf0d6", "ad945a": "bc977d", "ffd673": "ddbfa4", @@ -9,12 +8,10 @@ "d68cce": "dd8d2e", "8c427b": "721e01", "523a5a": "420600", - "ffffff": "ffffff", "e6c5ef": "ffd28c", "8494f7": "4863b6", "526bb5": "304190", - "3a427b": "181d46", - "c5b5b5": "c5b5b5" + "3a427b": "181d46" }, "2": { "6b5231": "67858a", @@ -26,7 +23,6 @@ "d68cce": "7fe14b", "8c427b": "168557", "523a5a": "084c38", - "ffffff": "ffffff", "e6c5ef": "e0ff8c", "8494f7": "4a4f5f", "526bb5": "1f2435", diff --git a/public/images/pokemon/variant/489.json b/public/images/pokemon/variant/489.json index f7e55dad2a7..5fad38db4e7 100644 --- a/public/images/pokemon/variant/489.json +++ b/public/images/pokemon/variant/489.json @@ -1,48 +1,34 @@ { "0": { "317bad": "399271", - "101010": "101010", "3a529c": "185b4f", "9ce6ff": "c3ffcd", "6bc5f7": "9bf3b7", "199cd6": "69c796", "ceefff": "e3ffe3", "196bde": "326260", - "ffffff": "ffffff", - "948c9c": "948c9c", - "4a526b": "4a526b", "ad3a29": "c37a31", "de849c": "ffcb68", "e64210": "d19449" }, "1": { "317bad": "964d17", - "101010": "101010", "3a529c": "682307", "9ce6ff": "ffd289", "6bc5f7": "f5a54e", "199cd6": "c27138", - "ceefff": "ceefff", "196bde": "23395b", - "ffffff": "ffffff", - "948c9c": "948c9c", - "4a526b": "4a526b", "ad3a29": "3c68ad", "de849c": "b9e6ff", "e64210": "4d9ac4" }, "2": { "317bad": "a43b74", - "101010": "101010", "3a529c": "84255f", "9ce6ff": "efa0b2", "6bc5f7": "e484a8", "199cd6": "c65086", - "ceefff": "ceefff", "196bde": "45135e", - "ffffff": "ffffff", - "948c9c": "948c9c", - "4a526b": "4a526b", "ad3a29": "652386", "de849c": "a884ff", "e64210": "893ac2" diff --git a/public/images/pokemon/variant/490.json b/public/images/pokemon/variant/490.json index 2b0ca7f8c23..c14dba48eea 100644 --- a/public/images/pokemon/variant/490.json +++ b/public/images/pokemon/variant/490.json @@ -2,14 +2,12 @@ "0": { "317bad": "399271", "199cd6": "69c796", - "101010": "101010", "6bc5f7": "9bf3b7", "294a84": "185b4f", "9ce6ff": "cdffd7", "ceefff": "eaffeb", "ffde52": "215957", "e6ad52": "143c3e", - "ffffff": "ffffff", "ad3a29": "c37a31", "de849c": "ffcb68", "e64210": "d19449" @@ -17,14 +15,12 @@ "1": { "317bad": "964d17", "199cd6": "c27138", - "101010": "101010", "6bc5f7": "f5a54e", "294a84": "682307", "9ce6ff": "ffd289", "ceefff": "ffeecc", "ffde52": "38577c", "e6ad52": "23395b", - "ffffff": "ffffff", "ad3a29": "3c68ad", "de849c": "b9e6ff", "e64210": "4d9ac4" @@ -32,14 +28,11 @@ "2": { "317bad": "b8488c", "199cd6": "cc659c", - "101010": "101010", "6bc5f7": "de89b3", "294a84": "912b6e", "9ce6ff": "e7a6c3", - "ceefff": "ceefff", "ffde52": "692a88", "e6ad52": "45135e", - "ffffff": "ffffff", "ad3a29": "652386", "de849c": "a884ff", "e64210": "893ac2" diff --git a/public/images/pokemon/variant/491.json b/public/images/pokemon/variant/491.json index 51bdf9a431f..13289bf4c2f 100644 --- a/public/images/pokemon/variant/491.json +++ b/public/images/pokemon/variant/491.json @@ -3,28 +3,24 @@ "848484": "3b6771", "adb5bd": "7cbcc1", "524a4a": "53818e", - "101010": "101010", "313131": "274656", "dee6ef": "bcdddd", "520000": "0a436c", "942942": "1e849a", "108cad": "a32819", "29e6ff": "d7502b", - "ffffff": "ffffff", "e63a29": "4fe0cd" }, "2": { "848484": "694624", "adb5bd": "ce9c7a", "524a4a": "b42f40", - "101010": "101010", "313131": "7a1d36", "dee6ef": "ffcdbc", "520000": "6a2c00", "942942": "ba5a19", "108cad": "25a6c7", "29e6ff": "76f7ff", - "ffffff": "ffffff", "e63a29": "ffa645" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/492-land.json b/public/images/pokemon/variant/492-land.json index 32deb188493..46b355d108d 100644 --- a/public/images/pokemon/variant/492-land.json +++ b/public/images/pokemon/variant/492-land.json @@ -3,13 +3,11 @@ "8cad63": "aa671e", "5a7342": "743510", "adde63": "f0a852", - "ffef7b": "ffef7b", "844a6b": "326a9a", "ef8ca5": "81bdd3", "635a6b": "a7604e", "bdc5d6": "e0bba1", "ffffff": "fff4ea", - "101010": "101010", "3a9442": "9f422a", "ce6b8c": "67a9c6", "31633a": "521605", diff --git a/public/images/pokemon/variant/492-sky.json b/public/images/pokemon/variant/492-sky.json index 5ca67b4871a..f22d2130ba7 100644 --- a/public/images/pokemon/variant/492-sky.json +++ b/public/images/pokemon/variant/492-sky.json @@ -7,7 +7,6 @@ "52525a": "78492a", "ffffff": "fffae9", "ceced6": "e0cea9", - "101010": "101010", "bd4a5a": "ce4626", "7b3a52": "8f210d", "f74a42": "ee7b56" @@ -20,7 +19,6 @@ "52525a": "7a3126", "ffffff": "fff4ea", "ceced6": "e0bba1", - "101010": "101010", "bd4a5a": "7e399c", "7b3a52": "531f72", "f74a42": "b96bd2" diff --git a/public/images/pokemon/variant/494.json b/public/images/pokemon/variant/494.json index 78e5a04a275..a096e70d70b 100644 --- a/public/images/pokemon/variant/494.json +++ b/public/images/pokemon/variant/494.json @@ -3,34 +3,23 @@ "8c3110": "563a0a", "ff6b19": "fff1ce", "bd4a00": "706040", - "000000": "000000", "c59c5a": "d96030", "ffe6ad": "ee8e3e", "6b4a10": "902300", - "3a3a3a": "3a3a3a", "846b3a": "c43d21", "3a5aad": "084f4c", - "ffffff": "ffffff", - "c5bdbd": "c5bdbd", - "73adff": "34a696", - "a55a5a": "a55a5a", - "c57373": "c57373" + "73adff": "34a696" }, "2": { "8c3110": "813a61", "ff6b19": "ffb7e0", "bd4a00": "b9648d", - "000000": "000000", "c59c5a": "45465d", "ffe6ad": "72758a", "6b4a10": "1e1b36", "3a3a3a": "120d26", "846b3a": "2b2a40", "3a5aad": "710643", - "ffffff": "ffffff", - "c5bdbd": "c5bdbd", - "73adff": "cd5fa5", - "a55a5a": "a55a5a", - "c57373": "c57373" + "73adff": "cd5fa5" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/495.json b/public/images/pokemon/variant/495.json index c1cb2c10db1..07fc4b6b717 100644 --- a/public/images/pokemon/variant/495.json +++ b/public/images/pokemon/variant/495.json @@ -2,7 +2,6 @@ "1": { "005200": "1f153d", "00b500": "585fa0", - "080808": "080808", "ffde29": "ff884c", "fff7bd": "ffe5b2", "8c7b31": "7f533f", @@ -10,14 +9,12 @@ "c59c00": "cc4328", "943a00": "4c3d99", "5a2100": "1e1e66", - "ffffff": "ffffff", "de7b42": "8766cc", "088400": "363270" }, "2": { "005200": "7f194c", "00b500": "e55b77", - "080808": "080808", "ffde29": "ffffff", "fff7bd": "fff2f8", "8c7b31": "664c61", @@ -25,7 +22,6 @@ "c59c00": "cecee5", "943a00": "168399", "5a2100": "054566", - "ffffff": "ffffff", "de7b42": "33cccc", "088400": "b23561" } diff --git a/public/images/pokemon/variant/496.json b/public/images/pokemon/variant/496.json index 6c9f5ab6096..1e2661a7f40 100644 --- a/public/images/pokemon/variant/496.json +++ b/public/images/pokemon/variant/496.json @@ -6,12 +6,9 @@ "8c7b31": "7f533f", "21943a": "433e7c", "fff7bd": "ffe5b2", - "000000": "000000", "734210": "4c3d99", "bd4a21": "8766cc", - "ffffff": "ffffff", - "c5bd63": "cca37a", - "081010": "081010" + "c5bd63": "cca37a" }, "2": { "105229": "7f194c", @@ -20,11 +17,8 @@ "8c7b31": "664c61", "21943a": "b23561", "fff7bd": "fff2f8", - "000000": "000000", "734210": "4a52a5", "bd4a21": "778fd8", - "ffffff": "ffffff", - "c5bd63": "ccadc1", - "081010": "081010" + "c5bd63": "ccadc1" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/497.json b/public/images/pokemon/variant/497.json index 3fff190062b..d84d71dd3d4 100644 --- a/public/images/pokemon/variant/497.json +++ b/public/images/pokemon/variant/497.json @@ -1,11 +1,9 @@ { "1": { - "8c8cad": "8c8cad", "6b733a": "99261e", "ffce29": "ff9966", "10733a": "1b0f3f", "081010": "06010c", - "ffffff": "ffffff", "d69c08": "cc523d", "199c4a": "2e2872", "c5c5d6": "c5c5d5", diff --git a/public/images/pokemon/variant/5.json b/public/images/pokemon/variant/5.json index 3bb5b8d92f6..9647a507698 100644 --- a/public/images/pokemon/variant/5.json +++ b/public/images/pokemon/variant/5.json @@ -4,16 +4,12 @@ "942110": "10292c", "ff846b": "40a78f", "ff524a": "2a6e70", - "101010": "101010", - "b5b5b5": "b5b5b5", - "ffffff": "ffffff", "005aff": "ce1010", "ff4200": "5033ce", "ffa500": "9e59db", "e6cead": "99f4f7", "cead7b": "6ee3e5", "ffde29": "e9bfff", - "6b6b6b": "6b6b6b", "b58c5a": "60c5c8" }, "2": { @@ -21,16 +17,12 @@ "942110": "101a70", "ff846b": "418ae2", "ff524a": "2564bc", - "101010": "101010", - "b5b5b5": "b5b5b5", - "ffffff": "ffffff", "005aff": "2b75ff", "ff4200": "4c83d4", "ffa500": "96e8e8", "e6cead": "5e238e", "cead7b": "47177a", "ffde29": "f9fffa", - "6b6b6b": "6b6b6b", "b58c5a": "340d6b" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/50.json b/public/images/pokemon/variant/50.json index e12b740720f..dd71578dd77 100644 --- a/public/images/pokemon/variant/50.json +++ b/public/images/pokemon/variant/50.json @@ -4,8 +4,6 @@ "c57342": "4eb578", "a55a5a": "2b8d62", "de9c5a": "7ade9a", - "101010": "101010", - "ffffff": "ffffff", "d63a4a": "ef4da0", "730019": "882859", "ffad94": "ffc6cf", @@ -20,8 +18,6 @@ "c57342": "f2ad3d", "a55a5a": "cc8029", "de9c5a": "ffde62", - "101010": "101010", - "ffffff": "ffffff", "d63a4a": "c3ccd9", "730019": "62738c", "ffad94": "ffffff", diff --git a/public/images/pokemon/variant/51.json b/public/images/pokemon/variant/51.json index 969ea6baa27..cc4e4419a61 100644 --- a/public/images/pokemon/variant/51.json +++ b/public/images/pokemon/variant/51.json @@ -4,8 +4,6 @@ "5a3119": "10644e", "de9c5a": "7ade9a", "c57342": "4eb578", - "101010": "101010", - "ffffff": "ffffff", "730019": "882859", "d63a4a": "ef4da0", "ffad94": "ffc6cf", @@ -20,8 +18,6 @@ "5a3119": "a66010", "de9c5a": "ffde62", "c57342": "f2ad3d", - "101010": "101010", - "ffffff": "ffffff", "730019": "62738c", "d63a4a": "c3ccd9", "ffad94": "ffffff", diff --git a/public/images/pokemon/variant/517.json b/public/images/pokemon/variant/517.json index 012ed3a717c..eb14a152580 100644 --- a/public/images/pokemon/variant/517.json +++ b/public/images/pokemon/variant/517.json @@ -4,13 +4,11 @@ "ffc5ce": "7ed1a3", "844263": "2d7a6e", "845a94": "087173", - "101010": "101010", "ad7bce": "119b87", "ffd6de": "b9ecbf", "f78cd6": "5fafdf", "de7bbd": "3175b5", "ad2942": "ca2793", - "ffffff": "ffffff", "de2942": "f455a8", "e6adc5": "5cb391", "634a6b": "003f4f" @@ -20,13 +18,11 @@ "ffc5ce": "3f88ba", "844263": "182c53", "845a94": "923a35", - "101010": "101010", "ad7bce": "d6654d", "ffd6de": "71c1e4", "f78cd6": "efc375", "de7bbd": "cd8042", "ad2942": "9b1112", - "ffffff": "ffffff", "de2942": "bd3a25", "e6adc5": "3070b5", "634a6b": "6a111c" diff --git a/public/images/pokemon/variant/518.json b/public/images/pokemon/variant/518.json index cdc86872a18..0113fb54ba1 100644 --- a/public/images/pokemon/variant/518.json +++ b/public/images/pokemon/variant/518.json @@ -8,10 +8,8 @@ "947bde": "e4845e", "9c5a63": "854655", "ffc5ce": "f5dddf", - "101010": "101010", "ce9c94": "efbcc9", - "525252": "a86c76", - "6b314a": "6b314a" + "525252": "a86c76" }, "2": { "bd73ad": "314da0", @@ -22,9 +20,7 @@ "947bde": "ffdcaa", "9c5a63": "151c59", "ffc5ce": "384a8f", - "101010": "101010", "ce9c94": "233175", - "525252": "0b0f3c", - "6b314a": "6b314a" + "525252": "0b0f3c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/52-gigantamax.json b/public/images/pokemon/variant/52-gigantamax.json index 2910872ad30..5a688f9ffa2 100644 --- a/public/images/pokemon/variant/52-gigantamax.json +++ b/public/images/pokemon/variant/52-gigantamax.json @@ -4,12 +4,7 @@ "7f5745": "5b4a3b", "fbf7e6": "ece3c7", "f0dea2": "c7b497", - "101010": "101010", - "986100": "986100", "d46140": "ac68b5", - "f9d400": "f9d400", - "f6f6f6": "f6f6f6", - "cca700": "cca700", "fced87": "ffd156", "944100": "751e7c", "c5810b": "b146ac", @@ -20,11 +15,9 @@ "7f5745": "552e15", "fbf7e6": "e5bc79", "f0dea2": "c08647", - "101010": "101010", "986100": "683700", "d46140": "dd4c2a", "f9d400": "ffbf3f", - "f6f6f6": "f6f6f6", "cca700": "a96c00", "fced87": "55d0eb", "944100": "2948ad", @@ -36,11 +29,9 @@ "7f5745": "2a221c", "fbf7e6": "807d77", "f0dea2": "524f4a", - "101010": "101010", "986100": "986f00", "d46140": "ffd0c5", "f9d400": "f9e600", - "f6f6f6": "f6f6f6", "cca700": "efc300", "fced87": "77e84e", "944100": "256a24", diff --git a/public/images/pokemon/variant/52.json b/public/images/pokemon/variant/52.json index 622f878120b..00ff0470ef3 100644 --- a/public/images/pokemon/variant/52.json +++ b/public/images/pokemon/variant/52.json @@ -2,16 +2,10 @@ "0": { "8c6b00": "5b4a3b", "ffe684": "c7b497", - "101010": "101010", - "cea500": "cea500", - "ffd600": "ffd600", - "ffffff": "ffffff", "d65a3a": "af4dbc", "ff7352": "e177de", - "945a00": "945a00", "debd3a": "816f5c", "ffffb5": "ece3c7", - "e6e6e6": "e6e6e6", "944200": "86358c", "ef9c31": "d577c9", "c57b08": "be5fba" @@ -19,16 +13,12 @@ "1": { "8c6b00": "552e15", "ffe684": "c08647", - "101010": "101010", "cea500": "a96c00", "ffd600": "ffbf3f", - "ffffff": "ffffff", "d65a3a": "b62315", "ff7352": "dd4c2a", - "945a00": "945a00", "debd3a": "915d2f", "ffffb5": "e5bc79", - "e6e6e6": "e6e6e6", "944200": "2948ad", "ef9c31": "7bf7f7", "c57b08": "52add6" @@ -36,16 +26,13 @@ "2": { "8c6b00": "241d18", "ffe684": "524f4a", - "101010": "101010", "cea500": "d2ac00", "ffd600": "f9e600", - "ffffff": "ffffff", "d65a3a": "d06e6b", "ff7352": "fab2a1", "945a00": "986f00", "debd3a": "322d28", "ffffb5": "807d77", - "e6e6e6": "e6e6e6", "944200": "3c693b", "ef9c31": "c1e8b2", "c57b08": "88c082" diff --git a/public/images/pokemon/variant/524.json b/public/images/pokemon/variant/524.json index a13526e2c5e..f03b1ec5152 100644 --- a/public/images/pokemon/variant/524.json +++ b/public/images/pokemon/variant/524.json @@ -1,7 +1,6 @@ { "1": { "3a2119": "4d8c77", - "000000": "000000", "7b5a4a": "97d9c3", "5a4231": "63a690", "19213a": "292538", @@ -13,7 +12,6 @@ }, "2": { "3a2119": "292933", - "000000": "000000", "7b5a4a": "979bb3", "5a4231": "515266", "19213a": "584245", diff --git a/public/images/pokemon/variant/525.json b/public/images/pokemon/variant/525.json index dd485da0763..3821f88f78d 100644 --- a/public/images/pokemon/variant/525.json +++ b/public/images/pokemon/variant/525.json @@ -1,7 +1,6 @@ { "1": { "293a6b": "464558", - "101010": "101010", "42528c": "656273", "21293a": "292538", "ad2919": "0d6d58", @@ -14,7 +13,6 @@ }, "2": { "293a6b": "9b7570", - "101010": "101010", "42528c": "cdac94", "21293a": "584245", "ad2919": "a7323b", diff --git a/public/images/pokemon/variant/53.json b/public/images/pokemon/variant/53.json index af32e750d29..9d42a70b47d 100644 --- a/public/images/pokemon/variant/53.json +++ b/public/images/pokemon/variant/53.json @@ -1,6 +1,5 @@ { "0": { - "101010": "101010", "947b21": "af4dbc", "bda54a": "e177de", "845200": "5b4a3b", @@ -9,13 +8,9 @@ "735a10": "de6363", "b58429": "816f5c", "f75242": "e9bb00", - "ffffff": "ffffff", - "ffbd9c": "ffbd9c", - "a51000": "b56e00", - "dedede": "dedede" + "a51000": "b56e00" }, "1": { - "101010": "101010", "947b21": "b62315", "bda54a": "dd4c2a", "845200": "552e15", @@ -24,13 +19,10 @@ "735a10": "de6363", "b58429": "431a0e", "f75242": "52add6", - "ffffff": "ffffff", "ffbd9c": "dd4c2a", - "a51000": "2948ad", - "dedede": "dedede" + "a51000": "2948ad" }, "2": { - "101010": "101010", "947b21": "d06e6b", "bda54a": "fab2a1", "845200": "241d18", @@ -39,9 +31,6 @@ "735a10": "de6363", "b58429": "28221e", "f75242": "5ed835", - "ffffff": "ffffff", - "ffbd9c": "ffbd9c", - "a51000": "3ba624", - "dedede": "dedede" + "a51000": "3ba624" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/531-mega.json b/public/images/pokemon/variant/531-mega.json index eedd2b17f19..851a0277af4 100644 --- a/public/images/pokemon/variant/531-mega.json +++ b/public/images/pokemon/variant/531-mega.json @@ -7,7 +7,6 @@ "ffb3ae": "f5a779", "ffe1ec": "f17475", "fbfbfb": "f0728d", - "181818": "181818", "c4b3b6": "cc3a74", "df7b95": "870505", "ffebee": "fcb7c5", @@ -22,7 +21,6 @@ "ffb3ae": "f6e3a8", "ffe1ec": "637971", "fbfbfb": "323c52", - "181818": "181818", "c4b3b6": "202537", "df7b95": "e8a245", "ffebee": "fdf2ce", diff --git a/public/images/pokemon/variant/531.json b/public/images/pokemon/variant/531.json index fb0689f6784..140fe5c4646 100644 --- a/public/images/pokemon/variant/531.json +++ b/public/images/pokemon/variant/531.json @@ -1,6 +1,5 @@ { "1": { - "ce6b73": "ce6b73", "de8c94": "f5a779", "734a4a": "b64231", "6b634a": "874231", @@ -8,11 +7,8 @@ "ceb584": "d6bfb4", "1963ad": "ae0771", "a58c63": "a86d57", - "101010": "101010", - "ffffff": "ffffff", "63636b": "782b3e", - "d6d6e6": "cd5178", - "c55a3a": "c55a3a" + "d6d6e6": "cd5178" }, "2": { "ce6b73": "cf9a4a", @@ -23,10 +19,7 @@ "ceb584": "29878f", "1963ad": "841f21", "a58c63": "195359", - "101010": "101010", - "ffffff": "ffffff", "63636b": "13253c", - "d6d6e6": "394d6d", - "c55a3a": "c55a3a" + "d6d6e6": "394d6d" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/532.json b/public/images/pokemon/variant/532.json index f94a3c7afeb..fa21ebcc8e0 100644 --- a/public/images/pokemon/variant/532.json +++ b/public/images/pokemon/variant/532.json @@ -1,14 +1,11 @@ { "1": { "5a4a4a": "30503b", - "101010": "101010", "c5bdad": "779f7d", "9c8c84": "5f836c", "843142": "3a3931", "ef7b8c": "6c6958", "c55a73": "545148", - "c5c5c5": "c5c5c5", - "ffffff": "ffffff", "5a3a08": "4c1d14", "ad7308": "954734", "7b5208": "663326", @@ -18,14 +15,11 @@ }, "2": { "5a4a4a": "546162", - "101010": "101010", "c5bdad": "95abab", "9c8c84": "70858b", "843142": "201f36", "ef7b8c": "504f66", "c55a73": "2f2b42", - "c5c5c5": "c5c5c5", - "ffffff": "ffffff", "5a3a08": "6f4b33", "ad7308": "b3774d", "7b5208": "825536", diff --git a/public/images/pokemon/variant/533.json b/public/images/pokemon/variant/533.json index 89f7248b05f..aa51abd4856 100644 --- a/public/images/pokemon/variant/533.json +++ b/public/images/pokemon/variant/533.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "84293a": "666b72", "de525a": "8d949f", "bd3a4a": "707885", @@ -11,12 +10,10 @@ "733152": "382c22", "9c4a84": "4e443b", "d66bb5": "6e675e", - "ffffff": "ffffff", "732942": "402652", "ad2942": "5a2d72" }, "2": { - "101010": "101010", "84293a": "6e869f", "de525a": "d6e6f5", "bd3a4a": "acc2d7", @@ -27,7 +24,6 @@ "733152": "121830", "9c4a84": "222a4a", "d66bb5": "37415c", - "ffffff": "ffffff", "732942": "5e5d53", "ad2942": "b5b18f" } diff --git a/public/images/pokemon/variant/534.json b/public/images/pokemon/variant/534.json index 9aa39b463fd..bf39355ad7d 100644 --- a/public/images/pokemon/variant/534.json +++ b/public/images/pokemon/variant/534.json @@ -3,7 +3,6 @@ "8c6b5a": "17524f", "5a3a21": "0d382d", "c59c73": "2a726e", - "101010": "101010", "3a3a31": "6e7878", "8c8c84": "becfd1", "6b6b63": "94a6a9", @@ -11,14 +10,12 @@ "c56bb5": "766b5f", "9c4a84": "5c5048", "732942": "2c2c3e", - "ad2942": "544c6e", - "ffffff": "ffffff" + "ad2942": "544c6e" }, "2": { "8c6b5a": "68797a", "5a3a21": "505252", "c59c73": "90aba8", - "101010": "101010", "3a3a31": "5c5830", "8c8c84": "e3c682", "6b6b63": "a78f4c", @@ -26,7 +23,6 @@ "c56bb5": "65377e", "9c4a84": "442a6c", "732942": "958d71", - "ad2942": "b5b18f", - "ffffff": "ffffff" + "ad2942": "b5b18f" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/538.json b/public/images/pokemon/variant/538.json index 5bd4ac34471..f1b804a9bf7 100644 --- a/public/images/pokemon/variant/538.json +++ b/public/images/pokemon/variant/538.json @@ -2,25 +2,21 @@ "1": { "631919": "2a6045", "de5a5a": "5fb55f", - "101010": "101010", "ad3131": "348350", "3a3a3a": "70543d", "efe6d6": "d7b06a", "292921": "3e2514", "948c84": "8b6036", - "c5bdad": "a97745", - "f7f7f7": "f7f7f7" + "c5bdad": "a97745" }, "2": { "631919": "255268", "de5a5a": "638ed9", - "101010": "101010", "ad3131": "396999", "3a3a3a": "681a1a", "efe6d6": "cf3737", "292921": "360b0b", "948c84": "912727", - "c5bdad": "7e1e1e", - "f7f7f7": "f7f7f7" + "c5bdad": "7e1e1e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/540.json b/public/images/pokemon/variant/540.json index 32a8b416443..a77507fa553 100644 --- a/public/images/pokemon/variant/540.json +++ b/public/images/pokemon/variant/540.json @@ -1,6 +1,5 @@ { "1": { - "000000": "000000", "3a6319": "7b4a5a", "5a9c31": "b56b7b", "94ce08": "ef949c", @@ -8,15 +7,10 @@ "9c7b08": "67412e", "fff7ad": "967768", "ffde31": "6f4c3b", - "ffffff": "ffffff", - "4a4a4a": "4a4a4a", "e68408": "eabb81", - "945219": "b8875c", - "ceced6": "ceced6", - "ffad4a": "ffad4a" + "945219": "b8875c" }, "2": { - "000000": "000000", "3a6319": "171f5b", "5a9c31": "1a2388", "94ce08": "1152d8", @@ -24,11 +18,7 @@ "9c7b08": "674e2e", "fff7ad": "ffffff", "ffde31": "ead3c1", - "ffffff": "ffffff", - "4a4a4a": "4a4a4a", "e68408": "d4bb66", - "945219": "a89860", - "ceced6": "ceced6", - "ffad4a": "ffad4a" + "945219": "a89860" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/541.json b/public/images/pokemon/variant/541.json index 6f4c802251b..e1f10dcc93c 100644 --- a/public/images/pokemon/variant/541.json +++ b/public/images/pokemon/variant/541.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "3a6319": "7b4a5a", "94ce08": "ef949c", "5a9c31": "b56b7b", @@ -10,11 +9,9 @@ "b5a529": "6f4c3b", "ffef3a": "967768", "5a5a3a": "67412e", - "7b733a": "553829", - "ffffff": "ffffff" + "7b733a": "553829" }, "2": { - "101010": "101010", "3a6319": "1e1e67", "94ce08": "0d3fa6", "5a9c31": "0d267d", @@ -24,7 +21,6 @@ "b5a529": "ead3c1", "ffef3a": "ffffff", "5a5a3a": "67412e", - "7b733a": "553829", - "ffffff": "ffffff" + "7b733a": "553829" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/542.json b/public/images/pokemon/variant/542.json index e48e883ecf0..b1d99b5f949 100644 --- a/public/images/pokemon/variant/542.json +++ b/public/images/pokemon/variant/542.json @@ -1,6 +1,5 @@ { "1": { - "000000": "000000", "bdad10": "6b4d3e", "8c7b10": "573728", "fff721": "6f4c3b", @@ -9,14 +8,12 @@ "5a9c31": "b56b7b", "ffff9c": "967768", "843142": "316d84", - "ffffff": "ffffff", "ff314a": "31ceff", "10423a": "5f3f49", "299c52": "b46877", "19734a": "8e525e" }, "2": { - "000000": "000000", "bdad10": "7b6053", "8c7b10": "846851", "fff721": "ead3c1", @@ -25,7 +22,6 @@ "5a9c31": "183da4", "ffff9c": "ffffff", "843142": "9e5e25", - "ffffff": "ffffff", "ff314a": "ff7800", "10423a": "122455", "299c52": "183da4", diff --git a/public/images/pokemon/variant/544.json b/public/images/pokemon/variant/544.json index 2cd6862c924..3aacb7a38b8 100644 --- a/public/images/pokemon/variant/544.json +++ b/public/images/pokemon/variant/544.json @@ -1,7 +1,6 @@ { "1": { "5a4a63": "0a3939", - "000000": "000000", "84739c": "135c56", "c5195a": "a63c9f", "bd5294": "0d635c", diff --git a/public/images/pokemon/variant/545.json b/public/images/pokemon/variant/545.json index c7c78da1a55..f281eb92015 100644 --- a/public/images/pokemon/variant/545.json +++ b/public/images/pokemon/variant/545.json @@ -2,7 +2,6 @@ "1": { "631010": "0b4a45", "c5195a": "238071", - "101010": "101010", "6b216b": "831774", "8c3a9c": "a63c9f", "ad297b": "0d635c", @@ -17,13 +16,11 @@ "2": { "631010": "8f795c", "c5195a": "dddaaf", - "101010": "101010", "6b216b": "b37830", "8c3a9c": "d7b444", "ad297b": "b37830", "9c1042": "bdaf8a", "4a0000": "6d5435", - "212931": "212931", "424a63": "5a93a5", "84084a": "965840", "3a3a4a": "466f90", diff --git a/public/images/pokemon/variant/546.json b/public/images/pokemon/variant/546.json index d4216c57f1e..a2e1f8b8865 100644 --- a/public/images/pokemon/variant/546.json +++ b/public/images/pokemon/variant/546.json @@ -4,7 +4,6 @@ "dee6c5": "e4b397", "7b846b": "914e3a", "4a5a52": "663023", - "101010": "101010", "ffffff": "e1cac5", "ceced6": "d2a19a", "427b42": "9d62bc", @@ -18,7 +17,6 @@ "dee6c5": "bf7c6a", "7b846b": "662c26", "4a5a52": "521819", - "101010": "101010", "ffffff": "f7dbd1", "ceced6": "d89185", "427b42": "559c7a", diff --git a/public/images/pokemon/variant/547.json b/public/images/pokemon/variant/547.json index 15e08aa18a7..6ab3bb114da 100644 --- a/public/images/pokemon/variant/547.json +++ b/public/images/pokemon/variant/547.json @@ -4,7 +4,6 @@ "6b5a42": "663023", "e6dece": "dda585", "c5b58c": "b77153", - "101010": "101010", "194a19": "512143", "427b42": "924a75", "52a54a": "c27199", @@ -12,25 +11,19 @@ "523a29": "56191d", "ad6b10": "127498", "735242": "693535", - "ffffff": "ffffff", - "e68400": "28adc7", - "ad4a63": "ad4a63" + "e68400": "28adc7" }, "2": { "ad945a": "4b1918", "6b5a42": "360e10", "e6dece": "a86250", "c5b58c": "70322b", - "101010": "101010", "194a19": "a13618", "427b42": "ec7441", "52a54a": "ffa97c", "946b42": "fdca95", - "523a29": "523a29", "ad6b10": "c95d1a", "735242": "e79e64", - "ffffff": "ffffff", - "e68400": "ffa34c", - "ad4a63": "ad4a63" + "e68400": "ffa34c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/548.json b/public/images/pokemon/variant/548.json index ac7c564eeae..c8a60d65937 100644 --- a/public/images/pokemon/variant/548.json +++ b/public/images/pokemon/variant/548.json @@ -3,33 +3,24 @@ "315a31": "31425a", "3aad3a": "76bfc7", "3a844a": "307489", - "101010": "101010", "9cbd4a": "adb563", "637b31": "636329", - "c5ef7b": "d6ef7b", - "cecebd": "cecebd", - "ffffff": "ffffff", - "bd8c94": "bd8c94", - "7b313a": "7b313a" + "c5ef7b": "d6ef7b" }, "1": { "315a31": "8c1d34", "3aad3a": "ef5e55", "3a844a": "bd2d40", - "101010": "101010", "9cbd4a": "8e954d", "637b31": "73733c", "c5ef7b": "bfd17f", "cecebd": "beb1a3", - "ffffff": "f6eaea", - "bd8c94": "bd8c94", - "7b313a": "7b313a" + "ffffff": "f6eaea" }, "2": { "315a31": "351c49", "3aad3a": "8d57a4", "3a844a": "663982", - "101010": "101010", "9cbd4a": "b39436", "637b31": "5c4510", "c5ef7b": "ded26f", diff --git a/public/images/pokemon/variant/549.json b/public/images/pokemon/variant/549.json index 8fb9272c5fa..45ac71244cf 100644 --- a/public/images/pokemon/variant/549.json +++ b/public/images/pokemon/variant/549.json @@ -1,19 +1,16 @@ { "1": { - "101010": "101010", "734221": "09445f", "ff6b3a": "54c5eb", "bd633a": "228ac5", "bda552": "77909a", "ffde42": "b6c7cc", "ffb59c": "78e6f7", - "ffffff": "ffffff", "315a31": "80152b", "4a844a": "bd2d40", "3aad3a": "ef5755", "526329": "5a5a2c", "c5ef7b": "bfd17f", - "9cb563": "8e954d", - "cec5bd": "cec5bd" + "9cb563": "8e954d" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/551.json b/public/images/pokemon/variant/551.json index 9e4903a6701..0f12156ef75 100644 --- a/public/images/pokemon/variant/551.json +++ b/public/images/pokemon/variant/551.json @@ -4,11 +4,8 @@ "212121": "262347", "debd84": "f29973", "523a10": "27172f", - "101010": "101010", "c59c5a": "d8693a", "42424a": "343958", - "b5b5bd": "b5b5bd", - "525263": "525263", "ce737b": "307681", "ef94a5": "4cbda2" }, @@ -17,11 +14,8 @@ "212121": "290c2a", "debd84": "8688a0", "523a10": "1c2231", - "101010": "101010", "c59c5a": "646781", "42424a": "301f40", - "b5b5bd": "b5b5bd", - "525263": "525263", "ce737b": "91a1b7", "ef94a5": "d6e2eb" } diff --git a/public/images/pokemon/variant/552.json b/public/images/pokemon/variant/552.json index efb650485c4..92bdcca9ddd 100644 --- a/public/images/pokemon/variant/552.json +++ b/public/images/pokemon/variant/552.json @@ -4,9 +4,7 @@ "523a10": "261d35", "c59c5a": "d8693a", "debd84": "f29973", - "101010": "101010", "292931": "343958", - "b5b5bd": "b5b5bd", "191921": "232044", "5a5a6b": "7c4c1f", "ffffff": "ebce81", @@ -20,9 +18,7 @@ "523a10": "161b23", "c59c5a": "646781", "debd84": "8688a0", - "101010": "101010", "292931": "412853", - "b5b5bd": "b5b5bd", "191921": "281842", "5a5a6b": "27353d", "ffffff": "90a0a7", diff --git a/public/images/pokemon/variant/553.json b/public/images/pokemon/variant/553.json index 5bc0be23fb5..45365e1d89b 100644 --- a/public/images/pokemon/variant/553.json +++ b/public/images/pokemon/variant/553.json @@ -5,9 +5,7 @@ "c55252": "1b7871", "191921": "131735", "212129": "192540", - "101010": "101010", "e67b73": "40a592", - "52525a": "52525a", "b5b5b5": "c98e5c", "8c948c": "d8693a", "ffffff": "ffefa7", @@ -21,9 +19,7 @@ "c55252": "c5cbd0", "191921": "3d1947", "212129": "58265a", - "101010": "101010", "e67b73": "e8e9eb", - "52525a": "52525a", "b5b5b5": "45545d", "8c948c": "171b20", "ffffff": "69777e", diff --git a/public/images/pokemon/variant/556.json b/public/images/pokemon/variant/556.json index 4c43ef55532..30356639a3a 100644 --- a/public/images/pokemon/variant/556.json +++ b/public/images/pokemon/variant/556.json @@ -3,7 +3,6 @@ "b53173": "7191ca", "8c1957": "454792", "e66ba5": "aad7ec", - "101010": "101010", "857510": "8d4026", "ffd600": "ff9b3b", "214a21": "375460", @@ -18,7 +17,6 @@ "b53173": "dc9bbd", "8c1957": "b06ea0", "e66ba5": "ffcadc", - "101010": "101010", "857510": "c78366", "ffd600": "fff1ac", "214a21": "68023b", diff --git a/public/images/pokemon/variant/559.json b/public/images/pokemon/variant/559.json index d844e2314af..8aca440eb71 100644 --- a/public/images/pokemon/variant/559.json +++ b/public/images/pokemon/variant/559.json @@ -6,11 +6,6 @@ "e63a42": "e18abd", "bd9c00": "896b14", "ffce00": "d7c475", - "212121": "212121", - "424242": "424242", - "ffffff": "ffffff", - "63635a": "63635a", - "adada5": "adada5", "7b7352": "5f533d", "c5bd84": "c7bea5", "fff7b5": "ecead9" @@ -21,15 +16,7 @@ "7b6308": "8b8352", "e63a42": "82809f", "bd9c00": "bdbc82", - "ffce00": "fffcdd", - "212121": "212121", - "424242": "424242", - "ffffff": "ffffff", - "63635a": "63635a", - "adada5": "adada5", - "7b7352": "7b7352", - "c5bd84": "c5bd84", - "fff7b5": "fff7b5" + "ffce00": "fffcdd" }, "2": { "b52931": "2d852b", @@ -37,14 +24,6 @@ "7b6308": "6f9d3d", "e63a42": "7cce68", "bd9c00": "98c053", - "ffce00": "e5ff87", - "212121": "212121", - "424242": "424242", - "ffffff": "ffffff", - "63635a": "63635a", - "adada5": "adada5", - "7b7352": "7b7352", - "c5bd84": "c5bd84", - "fff7b5": "fff7b5" + "ffce00": "e5ff87" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/56.json b/public/images/pokemon/variant/56.json index d349c7003dc..2bae876562d 100644 --- a/public/images/pokemon/variant/56.json +++ b/public/images/pokemon/variant/56.json @@ -1,6 +1,5 @@ { "0": { - "101010": "101010", "ffc584": "98b5cb", "6b4a29": "5f4e8a", "d6ad9c": "867ba4", @@ -8,11 +7,6 @@ "f7deb5": "ada2cd", "dea573": "7b96ab", "734200": "476983", - "fff7ce": "c8bfe3", - "ffffff": "ffffff", - "dedede": "dedede", - "ef7363": "ef7363", - "b54231": "b54231", - "efb58c": "efb58c" + "fff7ce": "c8bfe3" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/560.json b/public/images/pokemon/variant/560.json index 7c5a1841d70..511de5cf888 100644 --- a/public/images/pokemon/variant/560.json +++ b/public/images/pokemon/variant/560.json @@ -2,15 +2,10 @@ "0": { "7b3a29": "5c392e", "e66373": "e18abd", - "212121": "212121", "de293a": "b1578c", "c55a19": "aea489", "f77b21": "d9d7bf", "4a4a4a": "652f56", - "949494": "949494", - "ffffff": "ffffff", - "e6e6e6": "e6e6e6", - "bdbdbd": "bdbdbd", "636363": "b8749c", "6b5229": "66470e", "f7ce10": "d7c475", @@ -19,16 +14,9 @@ "1": { "7b3a29": "251c34", "e66373": "82809f", - "212121": "212121", "de293a": "4f4967", "c55a19": "988658", "f77b21": "c3b889", - "4a4a4a": "4a4a4a", - "949494": "949494", - "ffffff": "ffffff", - "e6e6e6": "e6e6e6", - "bdbdbd": "bdbdbd", - "636363": "636363", "6b5229": "8b8352", "f7ce10": "fffcdd", "b59419": "bdbc82" @@ -36,15 +24,10 @@ "2": { "7b3a29": "24360d", "e66373": "8bb089", - "212121": "212121", "de293a": "3f5d3e", "c55a19": "c5bd84", "f77b21": "fff7b5", "4a4a4a": "1c342e", - "949494": "949494", - "ffffff": "ffffff", - "e6e6e6": "e6e6e6", - "bdbdbd": "bdbdbd", "636363": "3b6253", "6b5229": "627f2e", "f7ce10": "d8f769", diff --git a/public/images/pokemon/variant/562.json b/public/images/pokemon/variant/562.json index 07dafa01aa7..f6ff8c151ce 100644 --- a/public/images/pokemon/variant/562.json +++ b/public/images/pokemon/variant/562.json @@ -2,20 +2,16 @@ "1": { "313131": "741136", "525252": "a63051", - "101010": "101010", "ad0000": "4fe0b6", "ff0000": "a0f7ff", - "5a0000": "5a0000", "8c5a21": "551f1d", "ffde7b": "d29887", "f7ad29": "ae6a5d", - "ce8410": "90493f", - "dedede": "dedede" + "ce8410": "90493f" }, "2": { "313131": "2a895c", "525252": "49bc7a", - "101010": "101010", "ad0000": "e5b7e7", "ff0000": "ffd8ef", "5a0000": "955b85", diff --git a/public/images/pokemon/variant/563.json b/public/images/pokemon/variant/563.json index 0657f362348..56b495e27f9 100644 --- a/public/images/pokemon/variant/563.json +++ b/public/images/pokemon/variant/563.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "216b7b": "18265c", "294a4a": "242b71", "3194ad": "32459b", @@ -14,7 +13,6 @@ "393941": "521f2d" }, "2": { - "101010": "101010", "216b7b": "923c1c", "294a4a": "591105", "3194ad": "e03241", diff --git a/public/images/pokemon/variant/569-gigantamax.json b/public/images/pokemon/variant/569-gigantamax.json index 52344562aa4..deddcfe2304 100644 --- a/public/images/pokemon/variant/569-gigantamax.json +++ b/public/images/pokemon/variant/569-gigantamax.json @@ -1,6 +1,5 @@ { "1": { - "010101": "010101", "7b6a5a": "162632", "5a4a41": "101829", "a48b73": "273947", @@ -29,7 +28,6 @@ "798489": "4c546c" }, "2": { - "010101": "010101", "7b6a5a": "d3b492", "5a4a41": "96684c", "a48b73": "f4eccf", diff --git a/public/images/pokemon/variant/569.json b/public/images/pokemon/variant/569.json index 7af6106672e..ac1f82c209c 100644 --- a/public/images/pokemon/variant/569.json +++ b/public/images/pokemon/variant/569.json @@ -1,7 +1,6 @@ { "1": { "7b6b5a": "162632", - "000000": "000000", "5a4a42": "101829", "a58c73": "273947", "bd317b": "2aaf52", @@ -17,7 +16,6 @@ }, "2": { "7b6b5a": "d3b492", - "000000": "000000", "5a4a42": "9d7862", "a58c73": "f4eccf", "bd317b": "be5285", @@ -28,7 +26,6 @@ "296b4a": "773835", "194a31": "59221f", "bdbdbd": "da975a", - "737373": "9d5038", - "ffffff": "ffffff" + "737373": "9d5038" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/570.json b/public/images/pokemon/variant/570.json index 5c9acf9b3fc..c2bce8bd6f8 100644 --- a/public/images/pokemon/variant/570.json +++ b/public/images/pokemon/variant/570.json @@ -4,11 +4,7 @@ "ad1042": "c359e6", "5a5a73": "475378", "212131": "1b1b47", - "101010": "101010", "424252": "2f375a", - "19b5b5": "19b5b5", - "318484": "318484", - "ffffff": "ffffff", "313142": "283766" }, "2": { @@ -16,11 +12,9 @@ "ad1042": "01d5bb", "5a5a73": "a1a1c0", "212131": "163956", - "101010": "101010", "424252": "746a98", "19b5b5": "e879d6", "318484": "bd3eb8", - "ffffff": "ffffff", "313142": "60808f" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/571.json b/public/images/pokemon/variant/571.json index d69b017886b..ecfc34ddbfe 100644 --- a/public/images/pokemon/variant/571.json +++ b/public/images/pokemon/variant/571.json @@ -1,21 +1,16 @@ { "1": { - "101010": "101010", "293142": "283766", "212131": "0a133f", "7b2942": "8e2270", "4a1029": "540548", "ad1042": "cc2f94", - "7b7b84": "7b7b84", "63636b": "4e4664", "4a4a52": "2d2b43", - "cecece": "cecece", "318484": "00766a", - "19b5b5": "0ab5b3", - "ce4a5a": "ce4a5a" + "19b5b5": "0ab5b3" }, "2": { - "101010": "101010", "293142": "283766", "212131": "121b47", "7b2942": "125091", diff --git a/public/images/pokemon/variant/577.json b/public/images/pokemon/variant/577.json index cd19056738d..bcba18b965a 100644 --- a/public/images/pokemon/variant/577.json +++ b/public/images/pokemon/variant/577.json @@ -6,14 +6,12 @@ "94e6ad": "cab8f1", "6b6329": "597070", "5a845a": "5e2c58", - "101010": "101010", "e6de73": "afdfce", "cee6bd": "ebc7d9", "a59c31": "88aca5", "9cad8c": "975b88", "316342": "442e7a", "94314a": "84197e", - "c54252": "c54252", "b5cea5": "c696b4" }, "1": { @@ -23,31 +21,24 @@ "94e6ad": "ee8c91", "6b6329": "522849", "5a845a": "961d3c", - "101010": "101010", "e6de73": "9d65b1", "cee6bd": "dfab9f", "a59c31": "824885", "9cad8c": "b86d6a", "316342": "3b031b", - "94314a": "94314a", - "c54252": "c54252", "b5cea5": "cd9790" }, "2": { "428c5a": "a968a4", "5ab57b": "ce8ec2", - "ffffff": "ffffff", "94e6ad": "f7c6e5", "6b6329": "3e8c82", "5a845a": "9d4e4c", - "101010": "101010", "e6de73": "74d6b3", "cee6bd": "f0c9ba", "a59c31": "5ab3a2", "9cad8c": "ba7066", "316342": "713c85", - "94314a": "94314a", - "c54252": "c54252", "b5cea5": "d69887" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/578.json b/public/images/pokemon/variant/578.json index 83db4394938..a0fb38f3064 100644 --- a/public/images/pokemon/variant/578.json +++ b/public/images/pokemon/variant/578.json @@ -6,7 +6,6 @@ "c5deb5": "ebc7e1", "317b4a": "6b2981", "9cbd8c": "9b65ac", - "101010": "101010", "e6ffde": "fff9fb", "84dea5": "c3b8f1", "b54242": "ad4252", @@ -19,7 +18,6 @@ "c5deb5": "d69289", "317b4a": "3b031b", "9cbd8c": "b0605c", - "101010": "101010", "e6ffde": "fff3f3", "84dea5": "ee8c91", "b54242": "ad4252", @@ -32,7 +30,6 @@ "c5deb5": "f0c9ba", "317b4a": "732971", "9cbd8c": "d69887", - "101010": "101010", "e6ffde": "ffffff", "84dea5": "f7c6e5", "b54242": "ad4252", diff --git a/public/images/pokemon/variant/579.json b/public/images/pokemon/variant/579.json index 168a4470b9c..a12a26d3902 100644 --- a/public/images/pokemon/variant/579.json +++ b/public/images/pokemon/variant/579.json @@ -6,7 +6,6 @@ "4a8c63": "40516c", "d6efc5": "bfdadd", "9cbd8c": "7f9fb5", - "101010": "101010", "ffffff": "f1feff", "de6363": "7bfff7", "a55252": "4aad8c", @@ -22,7 +21,6 @@ "4a8c63": "862f2d", "d6efc5": "d69289", "9cbd8c": "b0605c", - "101010": "101010", "ffffff": "fff3f3", "de6363": "e39744", "a55252": "bb6620", @@ -38,8 +36,6 @@ "4a8c63": "9d4e4c", "d6efc5": "e8baac", "9cbd8c": "c5887f", - "101010": "101010", - "ffffff": "ffffff", "de6363": "74d6b3", "a55252": "5ab3a2", "debd7b": "a29fbd", diff --git a/public/images/pokemon/variant/586-autumn.json b/public/images/pokemon/variant/586-autumn.json index e56a7af7d02..9345bdee6c4 100644 --- a/public/images/pokemon/variant/586-autumn.json +++ b/public/images/pokemon/variant/586-autumn.json @@ -1,18 +1,11 @@ { "0": { - "842131": "842131", - "bd3a3a": "bd3a3a", - "5a1919": "5a1919", - "000000": "000000", "422110": "9d4f62", "4a0808": "7f334a", "dec56b": "ffd5f6", "633121": "c66479", "7b5231": "d98997", "a57b4a": "e1b2d7", - "de8c29": "ffecfb", - "dedede": "dedede", - "adadad": "adadad", - "311010": "311010" + "de8c29": "ffecfb" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/586-spring.json b/public/images/pokemon/variant/586-spring.json index 14f8eded105..2518667eb20 100644 --- a/public/images/pokemon/variant/586-spring.json +++ b/public/images/pokemon/variant/586-spring.json @@ -1,18 +1,11 @@ { "0": { - "311010": "311010", - "000000": "000000", "4a1008": "7f334a", - "ff739c": "ff739c", - "731931": "731931", "dec56b": "ffd5f6", - "ce4263": "ce4263", "633a21": "c66479", "422119": "9d4f62", "de9429": "ffecfb", "7b5a31": "d98997", - "a57b4a": "e1b2d7", - "dedede": "dedede", - "adadad": "adadad" + "a57b4a": "e1b2d7" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/586-summer.json b/public/images/pokemon/variant/586-summer.json index 97a0efa33ce..0f89496c1fc 100644 --- a/public/images/pokemon/variant/586-summer.json +++ b/public/images/pokemon/variant/586-summer.json @@ -2,7 +2,6 @@ "0": { "193a29": "314a29", "088c42": "4a8b4a", - "000000": "000000", "195a31": "416a39", "dec56b": "ffd5f6", "4a1008": "783046", @@ -11,8 +10,6 @@ "7b5a31": "cc818e", "a57b4a": "e1b2d7", "de9429": "ffecfb", - "dedede": "dedede", - "adadad": "adadad", "311010": "582333" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/586-winter.json b/public/images/pokemon/variant/586-winter.json index a4ece9d251e..352a4c57920 100644 --- a/public/images/pokemon/variant/586-winter.json +++ b/public/images/pokemon/variant/586-winter.json @@ -2,9 +2,7 @@ "0": { "6b6b6b": "cf9bc4", "424a42": "b184a8", - "311010": "311010", "ffffff": "ffd5f6", - "000000": "000000", "adadad": "e1b2d7", "4a1008": "7f334a", "dec56b": "ffecfb", @@ -12,7 +10,6 @@ "7b5a31": "d98997", "633a21": "c66479", "a57b4a": "e1b2d7", - "de9429": "ffecfb", - "dedede": "dedede" + "de9429": "ffecfb" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/592.json b/public/images/pokemon/variant/592.json index 2307621e36e..7c37f370752 100644 --- a/public/images/pokemon/variant/592.json +++ b/public/images/pokemon/variant/592.json @@ -1,12 +1,10 @@ { "1": { "3a5a6b": "933b94", - "101010": "101010", "b5c5e6": "e3b8ec", "d6e6ff": "fee8ff", "5aa5c5": "c35ec7", "84d6ff": "ef94eb", - "ffffff": "ffffff", "3a63c5": "981741", "de2910": "de4a29" } diff --git a/public/images/pokemon/variant/593.json b/public/images/pokemon/variant/593.json index 88dc5472de5..d9eb0136c16 100644 --- a/public/images/pokemon/variant/593.json +++ b/public/images/pokemon/variant/593.json @@ -2,23 +2,17 @@ "1": { "213a6b": "6a236f", "9cadd6": "e3b8ec", - "101010": "101010", "d6e6ff": "fee8ff", "29529c": "933b94", "3a84ce": "c35ec7", - "3ac5f7": "ef94eb", - "de4a29": "de4a29", - "ffffff": "ffffff" + "3ac5f7": "ef94eb" }, "2": { "213a6b": "6e1b12", "9cadd6": "d24d25", - "101010": "101010", "d6e6ff": "ec7542", "29529c": "8e2b16", "3a84ce": "cb7048", - "3ac5f7": "ffc195", - "de4a29": "de4a29", - "ffffff": "ffffff" + "3ac5f7": "ffc195" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/594.json b/public/images/pokemon/variant/594.json index 18aa79a0569..700107d7c37 100644 --- a/public/images/pokemon/variant/594.json +++ b/public/images/pokemon/variant/594.json @@ -3,7 +3,6 @@ "8c4263": "aa3a18", "ffbdbd": "f9c976", "c55a7b": "ca4f16", - "000000": "000000", "633a42": "882915", "ff8cad": "f5a454", "f77384": "e37830", @@ -13,7 +12,6 @@ "002931": "310000", "005263": "681f16", "9c8c10": "a74c8e", - "ffffff": "ffffff", "d6d63a": "dc8ec6" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/595.json b/public/images/pokemon/variant/595.json index 159e4c78bef..e610e4c52ea 100644 --- a/public/images/pokemon/variant/595.json +++ b/public/images/pokemon/variant/595.json @@ -1,23 +1,19 @@ { "1": { "735208": "583e28", - "101010": "101010", "f7de42": "e9ae7e", "cead08": "b57353", "083163": "3f210d", "848c52": "5e341a", - "dedeef": "dedeef", "636be6": "684529", "315ac5": "7c4620" }, "2": { "735208": "46494d", - "101010": "101010", "f7de42": "aab3bf", "cead08": "7b828b", "083163": "a1400e", "848c52": "d1630f", - "dedeef": "dedeef", "636be6": "834333", "315ac5": "ff8e1e" } diff --git a/public/images/pokemon/variant/596.json b/public/images/pokemon/variant/596.json index b494b9ee23a..b877aab21a0 100644 --- a/public/images/pokemon/variant/596.json +++ b/public/images/pokemon/variant/596.json @@ -3,28 +3,22 @@ "293a7b": "5e341a", "192942": "3f210d", "3a52b5": "7c4620", - "101010": "101010", - "3a3a42": "3a3a42", "cead00": "995b37", "ffde52": "be8454", "9c849c": "9d2f07", "6b523a": "4f2a1d", "9c8419": "7d422c", - "736b6b": "712002", - "ffffff": "ffffff" + "736b6b": "712002" }, "2": { "293a7b": "cc5e14", "192942": "943710", "3a52b5": "ff9327", - "101010": "101010", - "3a3a42": "3a3a42", "cead00": "7b828b", "ffde52": "aab3bf", "9c849c": "007dea", "6b523a": "46494d", "9c8419": "575b62", - "736b6b": "0048ab", - "ffffff": "ffffff" + "736b6b": "0048ab" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/6-gigantamax.json b/public/images/pokemon/variant/6-gigantamax.json index 8cdb79ca267..cb84f4fdedb 100644 --- a/public/images/pokemon/variant/6-gigantamax.json +++ b/public/images/pokemon/variant/6-gigantamax.json @@ -6,7 +6,6 @@ "843119": "552982", "ef8429": "b77cb2", "ce5242": "9052af", - "101010": "101010", "ffe877": "adffcc", "fcfcfc": "eafff4", "efb55a": "d8a3e2", diff --git a/public/images/pokemon/variant/6-mega-x.json b/public/images/pokemon/variant/6-mega-x.json index 67924c8d011..400005513ca 100644 --- a/public/images/pokemon/variant/6-mega-x.json +++ b/public/images/pokemon/variant/6-mega-x.json @@ -4,14 +4,12 @@ "60a6c8": "82d179", "5a5a5a": "317396", "99d9f7": "e6ffcc", - "080808": "080808", "009de1": "3da542", "383838": "163d82", "1e4167": "4c1f76", "92a09c": "66afcc", "2b629c": "7341a6", "00b1e6": "af66ff", - "f8f8f8": "f8f8f8", "ce1010": "aa299d", "e481b5": "ff91cb" } diff --git a/public/images/pokemon/variant/6-mega-y.json b/public/images/pokemon/variant/6-mega-y.json index 9429b1d1773..189c3bdd6c3 100644 --- a/public/images/pokemon/variant/6-mega-y.json +++ b/public/images/pokemon/variant/6-mega-y.json @@ -2,16 +2,13 @@ "1": { "833118": "552982", "ee8329": "b27cbc", - "101010": "101010", "cd5241": "8053b2", "eeb45a": "d8a3e2", - "f8f8f8": "f8f8f8", "207394": "41a86e", "084152": "196045", "eede7b": "fae5ff", "f6a410": "9e59db", "e64110": "5033ce", - "ffd510": "e9bfff", - "cdcdcd": "cdcdcd" + "ffd510": "e9bfff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/602.json b/public/images/pokemon/variant/602.json index 7a73a049e47..f9ccb092de2 100644 --- a/public/images/pokemon/variant/602.json +++ b/public/images/pokemon/variant/602.json @@ -5,7 +5,6 @@ "cedee6": "b291d6", "efffff": "e8ddff", "7b8494": "6b357a", - "191921": "191921", "ce4a00": "42296e", "942100": "58418c", "ffe67b": "55b5d6", @@ -19,7 +18,6 @@ "cedee6": "8ecbaf", "efffff": "c7f0d5", "7b8494": "315775", - "191921": "191921", "ce4a00": "2f5c70", "942100": "18314e", "ffe67b": "9a2957", diff --git a/public/images/pokemon/variant/603.json b/public/images/pokemon/variant/603.json index 1c04d573309..720d1510f68 100644 --- a/public/images/pokemon/variant/603.json +++ b/public/images/pokemon/variant/603.json @@ -3,7 +3,6 @@ "c5ad7b": "8dd8d0", "847342": "4f8194", "efdea5": "b9f1d3", - "191921": "191921", "103a4a": "884993", "215a63": "957bd0", "949c4a": "ff772d", @@ -12,14 +11,12 @@ "de7352": "8c1a6a", "deb500": "d89d77", "ffd600": "f7e1a6", - "ffffff": "ffffff", "bdbdbd": "8babbd" }, "2": { "c5ad7b": "283b4e", "847342": "0d1a31", "efdea5": "3a5865", - "191921": "191921", "103a4a": "6faa3c", "215a63": "bbdf64", "949c4a": "dd0d70", diff --git a/public/images/pokemon/variant/604.json b/public/images/pokemon/variant/604.json index de39eb8b3a0..5a04687d1cd 100644 --- a/public/images/pokemon/variant/604.json +++ b/public/images/pokemon/variant/604.json @@ -4,7 +4,6 @@ "002131": "501d59", "216373": "957bd0", "73b5ce": "b29fe8", - "101019": "101019", "847342": "4f8194", "c5ad7b": "8dd8d0", "949c4a": "ff7e34", @@ -21,7 +20,6 @@ "002131": "225517", "216373": "bbdf64", "73b5ce": "e1ed9e", - "101019": "101019", "847342": "0d1a31", "c5ad7b": "283b4e", "949c4a": "a5183d", diff --git a/public/images/pokemon/variant/605.json b/public/images/pokemon/variant/605.json index cbd0fcb750b..e287c8070c9 100644 --- a/public/images/pokemon/variant/605.json +++ b/public/images/pokemon/variant/605.json @@ -4,12 +4,10 @@ "3a7352": "121545", "639484": "3c508b", "a5cebd": "617eb8", - "101010": "101010", "6b6b73": "39498b", "424242": "1b1f5a", "105229": "034652", "219c10": "2ecbc2", - "ffffff": "ffffff", "7b2929": "3f1c7b", "ce0000": "954bd8", "6b6310": "54760c", @@ -20,12 +18,10 @@ "3a7352": "702c2c", "639484": "9f5952", "a5cebd": "be847a", - "101010": "101010", "6b6b73": "854340", "424242": "3d1c1c", "105229": "600c41", "219c10": "f052a8", - "ffffff": "ffffff", "7b2929": "3a219a", "ce0000": "615ad4", "6b6310": "a13815", @@ -36,12 +32,10 @@ "3a7352": "1f1f34", "639484": "38394c", "a5cebd": "5b5e68", - "101010": "101010", "6b6b73": "2b2b3d", "424242": "0c0916", "105229": "471180", "219c10": "8952dc", - "ffffff": "ffffff", "7b2929": "9a2031", "ce0000": "ee5962", "6b6310": "8b3dbe", diff --git a/public/images/pokemon/variant/606.json b/public/images/pokemon/variant/606.json index a187ecafe90..0090b08f518 100644 --- a/public/images/pokemon/variant/606.json +++ b/public/images/pokemon/variant/606.json @@ -4,7 +4,6 @@ "de9c7b": "9f534b", "634229": "5a2133", "a5634a": "7d3134", - "101010": "101010", "292929": "230909", "216329": "002d55", "219c3a": "1585b1", @@ -21,7 +20,6 @@ "de9c7b": "a0e4e6", "634229": "2f536f", "a5634a": "6eb2bf", - "101010": "101010", "292929": "071824", "216329": "6e0928", "219c3a": "c63150", @@ -38,11 +36,9 @@ "de9c7b": "e5d1cc", "634229": "834f57", "a5634a": "c09a97", - "101010": "101010", "292929": "3e1426", "216329": "35116c", "219c3a": "884acc", - "8c2929": "8c2929", "ce0000": "d3335a", "c5a57b": "bc3295", "8c5a3a": "7e176b", diff --git a/public/images/pokemon/variant/609.json b/public/images/pokemon/variant/609.json index 12941964218..da9ad678c36 100644 --- a/public/images/pokemon/variant/609.json +++ b/public/images/pokemon/variant/609.json @@ -7,7 +7,6 @@ "313131": "11247b", "5a5a5a": "123684", "c5d6d6": "8e7c96", - "ffffff": "ffffff", "ffe621": "78e8cd", "7b8c8c": "bb9fbc" }, @@ -19,7 +18,6 @@ "313131": "a15f42", "5a5a5a": "8d412b", "c5d6d6": "dcceae", - "ffffff": "ffffff", "ffe621": "ffbb55", "7b8c8c": "eee6ca" } diff --git a/public/images/pokemon/variant/610.json b/public/images/pokemon/variant/610.json index 23ba21cd699..d7d726d15e5 100644 --- a/public/images/pokemon/variant/610.json +++ b/public/images/pokemon/variant/610.json @@ -3,12 +3,9 @@ "313a29": "0a0b31", "636b4a": "4b409d", "4a523a": "27105b", - "000000": "000000", "94a55a": "514776", "6b7b4a": "3f3562", "ce0000": "9d9d9d", - "ffffff": "ffffff", - "b5b5d6": "b5b5d6", "630000": "361a06", "d6e694": "d8d8d8", "adbd63": "737370", @@ -19,12 +16,9 @@ "313a29": "0e1f3d", "636b4a": "35679c", "4a523a": "193769", - "000000": "000000", "94a55a": "983f50", "6b7b4a": "681c2a", "ce0000": "00b5ce", - "ffffff": "ffffff", - "b5b5d6": "b5b5d6", "630000": "2f0010", "d6e694": "379aff", "adbd63": "1f4fbf", diff --git a/public/images/pokemon/variant/6100.json b/public/images/pokemon/variant/6100.json index a9790f043db..8585360e3ac 100644 --- a/public/images/pokemon/variant/6100.json +++ b/public/images/pokemon/variant/6100.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "7c2506": "2e333b", "c04a1c": "4e6170", "ec6f00": "69a6b4", @@ -10,12 +9,10 @@ "ddccc8": "bfebee", "d9a866": "a5aab7", "fefefe": "ecfffc", - "6f625e": "6f625e", "b8752e": "838797", "f3d181": "c9cdd6" }, "2": { - "101010": "101010", "7c2506": "5d0a26", "c04a1c": "72142b", "ec6f00": "a62833", @@ -25,7 +22,6 @@ "ddccc8": "ecd3c1", "d9a866": "3a272e", "fefefe": "fff9ee", - "6f625e": "6f625e", "b8752e": "2d2327", "f3d181": "502b32" } diff --git a/public/images/pokemon/variant/6101.json b/public/images/pokemon/variant/6101.json index 37f99d5cc8a..a1f15929920 100644 --- a/public/images/pokemon/variant/6101.json +++ b/public/images/pokemon/variant/6101.json @@ -3,30 +3,22 @@ "845c35": "373e4c", "d9a866": "a5aab7", "f3d181": "c9cdd6", - "101010": "101010", "f7dfa8": "e8ebf0", "a9763d": "838797", "c04a1c": "386583", "ec6f00": "69a6b4", "dc5d00": "4f879f", - "7c2506": "2e333b", - "ddccc8": "ddccc8", - "fefefe": "fefefe", - "6f625e": "6f625e" + "7c2506": "2e333b" }, "2": { "845c35": "231b20", "d9a866": "452d35", "f3d181": "5e343c", - "101010": "101010", "f7dfa8": "864549", "a9763d": "35262c", "c04a1c": "72142b", "ec6f00": "a62833", "dc5d00": "8f1b2c", - "7c2506": "4a061d", - "ddccc8": "ddccc8", - "fefefe": "fefefe", - "6f625e": "6f625e" + "7c2506": "4a061d" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/611.json b/public/images/pokemon/variant/611.json index 210611b4290..30bce9d0e26 100644 --- a/public/images/pokemon/variant/611.json +++ b/public/images/pokemon/variant/611.json @@ -2,14 +2,12 @@ "1": { "314a29": "650b18", "4a8c4a": "b52439", - "101010": "101010", "426b3a": "98182b", "737373": "3f3562", "5a5a52": "342047", "630000": "3a3a3a", "de4242": "c4c4c3", "3a3a3a": "2a0e29", - "ffffff": "ffffff", "b52121": "737373", "9c9c9c": "736198", "7b7b7b": "514776", @@ -19,14 +17,12 @@ "2": { "314a29": "0d0e27", "4a8c4a": "35679c", - "101010": "101010", "426b3a": "102a5b", "737373": "681c2a", "5a5a52": "3b0820", "630000": "0d1e7c", "de4242": "379aff", "3a3a3a": "2c0216", - "ffffff": "ffffff", "b52121": "1f4fbf", "9c9c9c": "983f50", "7b7b7b": "823140", diff --git a/public/images/pokemon/variant/612.json b/public/images/pokemon/variant/612.json index 028d5953136..be0a1e2c33b 100644 --- a/public/images/pokemon/variant/612.json +++ b/public/images/pokemon/variant/612.json @@ -1,7 +1,6 @@ { "1": { "520000": "383838", - "000000": "000000", "8c0000": "84847e", "3a3a4a": "342047", "c50000": "c4c4c3", @@ -11,7 +10,6 @@ "636b10": "650b18", "a5ad19": "b52439", "29293a": "2a0e29", - "ffffff": "ffffff", "73424a": "893a4d" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/618.json b/public/images/pokemon/variant/618.json index dcce711b155..5e3b7bb3e97 100644 --- a/public/images/pokemon/variant/618.json +++ b/public/images/pokemon/variant/618.json @@ -3,15 +3,12 @@ "cebd00": "bdac99", "ffff00": "f3e6dd", "6b6319": "987b6d", - "081019": "081019", "52423a": "312118", "6b524a": "4a342a", "bd846b": "8c3841", "846b63": "6b3838", "d69c84": "ad4c4c", "efce42": "eac2bd", - "d6cec5": "d6cec5", - "ffffff": "ffffff", "081018": "081019", "735a52": "564038", "9c8473": "a08773", @@ -21,7 +18,6 @@ "cebd00": "58536b", "ffff00": "707488", "6b6319": "39314a", - "081019": "081019", "52423a": "5a2e2e", "6b524a": "804e48", "bd846b": "cec9b1", diff --git a/public/images/pokemon/variant/619.json b/public/images/pokemon/variant/619.json index 8c813beccb4..3cb2a2b4403 100644 --- a/public/images/pokemon/variant/619.json +++ b/public/images/pokemon/variant/619.json @@ -6,12 +6,9 @@ "634a29": "5b3724", "ad9c4a": "9d8169", "7b7b7b": "572821", - "000000": "000000", "a54252": "b64619", "de637b": "dd7736", - "7b213a": "922308", - "ffffff": "ffffff", - "73293a": "73293a" + "7b213a": "922308" }, "2": { "947b52": "8d3e21", @@ -20,11 +17,9 @@ "634a29": "722611", "ad9c4a": "b15932", "7b7b7b": "552136", - "000000": "000000", "a54252": "56307f", "de637b": "764ebb", "7b213a": "3e0a70", - "ffffff": "ffffff", "73293a": "3c0c6a" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/620.json b/public/images/pokemon/variant/620.json index 15546e0ced1..892424f79e6 100644 --- a/public/images/pokemon/variant/620.json +++ b/public/images/pokemon/variant/620.json @@ -2,7 +2,6 @@ "1": { "5a4231": "2a5a8c", "ce8c52": "4a86c5", - "000000": "000000", "735263": "855348", "b59c9c": "ddb2a5", "e6d6d6": "f3d9ce", @@ -10,16 +9,13 @@ "8463ad": "b82f34", "ad8cc5": "db6059", "a52121": "e1811a", - "4a2121": "4a2121", "ffad63": "abe5ff", - "ffffff": "ffffff", "424242": "63332d", "bda5a5": "e4c3b7" }, "2": { "5a4231": "8c0224", "ce8c52": "e61b42", - "000000": "000000", "735263": "654162", "b59c9c": "ba89a1", "e6d6d6": "e2b7db", @@ -27,9 +23,7 @@ "8463ad": "2f4c81", "ad8cc5": "3979ad", "a52121": "7b25cf", - "4a2121": "4a2121", "ffad63": "ff425d", - "ffffff": "ffffff", "424242": "3a193c", "bda5a5": "d39dda" } diff --git a/public/images/pokemon/variant/6215.json b/public/images/pokemon/variant/6215.json index 99e0c880142..56ee351cd66 100644 --- a/public/images/pokemon/variant/6215.json +++ b/public/images/pokemon/variant/6215.json @@ -1,7 +1,6 @@ { "1": { "503678": "0f5d6d", - "080808": "080808", "514a80": "402010", "956cbe": "31dabb", "9c9bce": "ae8976", @@ -12,13 +11,10 @@ "ffde7b": "a7a7a7", "584d80": "562627", "28234b": "220d0a", - "c52973": "ea903f", - "bdbdc5": "bdbdc5", - "f6f6ff": "f6f6ff" + "c52973": "ea903f" }, "2": { "503678": "601522", - "080808": "080808", "514a80": "14273a", "956cbe": "cc5427", "9c9bce": "3c8775", @@ -29,8 +25,6 @@ "ffde7b": "ffe07e", "584d80": "1c3942", "28234b": "0a191e", - "c52973": "f49633", - "bdbdc5": "bdbdc5", - "f6f6ff": "f6f6ff" + "c52973": "f49633" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/622.json b/public/images/pokemon/variant/622.json index 9d3d631c473..d7c42cb47eb 100644 --- a/public/images/pokemon/variant/622.json +++ b/public/images/pokemon/variant/622.json @@ -3,7 +3,6 @@ "106b63": "732d02", "004a52": "4c1b11", "84cece": "c78b3f", - "191921": "191921", "29848c": "65331c", "298c8c": "793907", "5aada5": "9d5915", diff --git a/public/images/pokemon/variant/623.json b/public/images/pokemon/variant/623.json index 2a9f0774f9a..7e9f52b0474 100644 --- a/public/images/pokemon/variant/623.json +++ b/public/images/pokemon/variant/623.json @@ -6,7 +6,6 @@ "195a7b": "4d0a00", "84c5ce": "e0854c", "003a52": "471205", - "191921": "191921", "ffefa5": "5fc8ff", "bdad73": "35a3ee", "dece94": "1b7ccb", @@ -21,7 +20,6 @@ "195a7b": "3c0702", "84c5ce": "9d3f1f", "003a52": "280008", - "191921": "191921", "ffefa5": "50ddaf", "bdad73": "3cb897", "dece94": "25957d", diff --git a/public/images/pokemon/variant/633.json b/public/images/pokemon/variant/633.json index ad02ba594d4..9e5c8c1c3aa 100644 --- a/public/images/pokemon/variant/633.json +++ b/public/images/pokemon/variant/633.json @@ -2,7 +2,6 @@ "1": { "292129": "140d35", "5a5252": "4c297a", - "101010": "101010", "525252": "4c297a", "423a42": "331c62", "19316b": "35475d", @@ -16,7 +15,6 @@ "2": { "292129": "1c2313", "5a5252": "3a452d", - "101010": "101010", "525252": "3a452d", "423a42": "2b351e", "19316b": "6a6a51", diff --git a/public/images/pokemon/variant/634.json b/public/images/pokemon/variant/634.json index 68039ec9ea8..197a398555e 100644 --- a/public/images/pokemon/variant/634.json +++ b/public/images/pokemon/variant/634.json @@ -1,7 +1,6 @@ { "1": { "423a42": "331c62", - "101010": "101010", "292129": "140d35", "525252": "4c297a", "3a63a5": "728197", @@ -9,14 +8,11 @@ "6394de": "bdd2e2", "732919": "7a1545", "9c4231": "bc3962", - "e6dede": "e6dede", "9c3a6b": "3a80b8", - "632142": "1f4c90", - "adadad": "adadad" + "632142": "1f4c90" }, "2": { "423a42": "2b351e", - "101010": "101010", "292129": "1c2313", "525252": "3a452d", "3a63a5": "a5a685", @@ -24,9 +20,7 @@ "6394de": "d9d9aa", "732919": "640303", "9c4231": "950505", - "e6dede": "e6dede", "9c3a6b": "ba5744", - "632142": "813530", - "adadad": "adadad" + "632142": "813530" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/635.json b/public/images/pokemon/variant/635.json index 9f00b8d3f09..d13d1388937 100644 --- a/public/images/pokemon/variant/635.json +++ b/public/images/pokemon/variant/635.json @@ -5,14 +5,12 @@ "292129": "140d35", "8c2963": "3a80b8", "bd527b": "65bfed", - "101010": "101010", "632142": "1f4c90", "19316b": "35475d", "5a84ce": "bdd2e2", "3a5a9c": "728197", "9c4231": "bc3962", - "732919": "7a1545", - "e6dede": "e6dede" + "732919": "7a1545" }, "2": { "423a42": "2b351e", @@ -20,13 +18,11 @@ "292129": "1c2313", "8c2963": "ba5744", "bd527b": "e78256", - "101010": "101010", "632142": "813530", "19316b": "6a6a51", "5a84ce": "d9d9aa", "3a5a9c": "a5a685", "9c4231": "950505", - "732919": "640303", - "e6dede": "e6dede" + "732919": "640303" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/640.json b/public/images/pokemon/variant/640.json index 2b85b86d986..da3a22eb676 100644 --- a/public/images/pokemon/variant/640.json +++ b/public/images/pokemon/variant/640.json @@ -10,7 +10,6 @@ "ad426b": "833018", "de738c": "b86a54", "7b103a": "651702", - "ffffff": "ffffff", "f7f7d6": "e1b0a0", "adb56b": "a77e72", "6b6b4a": "2d0c02" @@ -26,7 +25,6 @@ "ad426b": "1e7392", "de738c": "4694b1", "7b103a": "11495d", - "ffffff": "ffffff", "f7f7d6": "e5d7bd", "adb56b": "ccc1ad", "6b6b4a": "8e8169" diff --git a/public/images/pokemon/variant/647-ordinary.json b/public/images/pokemon/variant/647-ordinary.json index 0475084ff21..e425e289fee 100644 --- a/public/images/pokemon/variant/647-ordinary.json +++ b/public/images/pokemon/variant/647-ordinary.json @@ -1,24 +1,17 @@ { "1": { "7b3129": "96711f", - "212121": "212121", "de4221": "fdbb3e", "ad3121": "c2912f", - "6b6b52": "6b6b52", - "fff7bd": "fff7bd", "19295a": "922517", "217ba5": "f15c5d", - "b5ad84": "b5ad84", "4a6bce": "ef4635", "63bdff": "f69284", "314a8c": "c3382a", - "addeff": "fbcfcb", - "ffffff": "ffffff", - "525252": "525252" + "addeff": "fbcfcb" }, "2": { "7b3129": "81304a", - "212121": "212121", "de4221": "de5d83", "ad3121": "a84564", "6b6b52": "6a4863", @@ -29,8 +22,6 @@ "4a6bce": "524881", "63bdff": "e4d7ff", "314a8c": "3b3160", - "addeff": "f1ecff", - "ffffff": "ffffff", - "525252": "525252" + "addeff": "f1ecff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/647-resolute.json b/public/images/pokemon/variant/647-resolute.json index 85975acfdc7..1e0f5c75d5c 100644 --- a/public/images/pokemon/variant/647-resolute.json +++ b/public/images/pokemon/variant/647-resolute.json @@ -1,23 +1,16 @@ { "1": { - "101010": "101010", "314a8c": "c3382a", "843a29": "c2912f", "63bdff": "f69284", - "4a5252": "4a5252", "ff9421": "d84a9a", "4a6bce": "ef4635", "de4a31": "fdbb3e", "193163": "922517", "3ab53a": "993f88", - "21848c": "be4848", - "b5ad73": "b5ad73", - "fff7ad": "fff7ad", - "635a29": "635a29", - "ffffff": "ffffff" + "21848c": "be4848" }, "2": { - "101010": "101010", "314a8c": "3b3160", "843a29": "81304a", "63bdff": "e4d7ff", @@ -30,7 +23,6 @@ "21848c": "b89edb", "b5ad73": "b573a8", "fff7ad": "d89cc6", - "635a29": "6a4863", - "ffffff": "ffffff" + "635a29": "6a4863" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/648-aria.json b/public/images/pokemon/variant/648-aria.json index b755f35b778..dc562c08be4 100644 --- a/public/images/pokemon/variant/648-aria.json +++ b/public/images/pokemon/variant/648-aria.json @@ -12,8 +12,6 @@ "428c7b": "750461", "947b5a": "6a8e93", "31c5a5": "ad1e71", - "de7b8c": "de7b8c", - "b55263": "b55263", "5a5252": "4d7b84" }, "2": { diff --git a/public/images/pokemon/variant/648-pirouette.json b/public/images/pokemon/variant/648-pirouette.json index 4b9a068eb65..c7e96d1122d 100644 --- a/public/images/pokemon/variant/648-pirouette.json +++ b/public/images/pokemon/variant/648-pirouette.json @@ -24,7 +24,6 @@ "73423a": "553a35", "ef7352": "ca956d", "635a52": "625246", - "423131": "423131", "fffff7": "fff4e0", "c5b594": "c9b190", "c5315a": "553a35", diff --git a/public/images/pokemon/variant/649-burn.json b/public/images/pokemon/variant/649-burn.json index ba34e8ba203..f34c5a14c0c 100644 --- a/public/images/pokemon/variant/649-burn.json +++ b/public/images/pokemon/variant/649-burn.json @@ -5,15 +5,10 @@ "9c5ac5": "7baec3", "101010": "081662", "ceb5ff": "87feff", - "5a2110": "5a2110", - "ef2100": "ef2100", - "a53121": "a53121", "a584bd": "62c4e6", "733129": "26a624", "f75221": "ddffb0", - "b54221": "97e083", - "ffffff": "ffffff", - "737373": "737373" + "b54221": "97e083" }, "2": { "52294a": "1e1d33", @@ -21,14 +16,9 @@ "9c5ac5": "484553", "101010": "000000", "ceb5ff": "f56e6e", - "5a2110": "5a2110", - "ef2100": "ef2100", - "a53121": "a53121", "a584bd": "b72852", "733129": "91283b", "f75221": "ff9b90", - "b54221": "c9514e", - "ffffff": "ffffff", - "737373": "737373" + "b54221": "c9514e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/649-chill.json b/public/images/pokemon/variant/649-chill.json index acdb58ceb61..6e719cbc091 100644 --- a/public/images/pokemon/variant/649-chill.json +++ b/public/images/pokemon/variant/649-chill.json @@ -5,14 +5,10 @@ "9c5ac5": "7baec3", "101010": "081662", "ceb5ff": "87feff", - "42423a": "42423a", - "ffffff": "ffffff", - "a5a5ad": "a5a5ad", "a584bd": "62c4e6", "733129": "26a624", "f75221": "ddffb0", - "b54221": "97e083", - "737373": "737373" + "b54221": "97e083" }, "2": { "52294a": "1e1d33", @@ -20,13 +16,9 @@ "9c5ac5": "484553", "101010": "000000", "ceb5ff": "ccf7fe", - "42423a": "42423a", - "ffffff": "ffffff", - "a5a5ad": "a5a5ad", "a584bd": "8dc7e3", "733129": "4b8fba", "f75221": "aafaff", - "b54221": "7cc9e0", - "737373": "737373" + "b54221": "7cc9e0" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/649-douse.json b/public/images/pokemon/variant/649-douse.json index b3796b6ac79..54b13882365 100644 --- a/public/images/pokemon/variant/649-douse.json +++ b/public/images/pokemon/variant/649-douse.json @@ -5,15 +5,10 @@ "9c5ac5": "7baec3", "101010": "081662", "ceb5ff": "87feff", - "00424a": "00424a", - "00ceff": "00ceff", - "0084b5": "0084b5", "a584bd": "62c4e6", "733129": "26a624", "f75221": "ddffb0", - "b54221": "97e083", - "ffffff": "ffffff", - "737373": "737373" + "b54221": "97e083" }, "2": { "52294a": "1e1d33", @@ -21,14 +16,9 @@ "9c5ac5": "484553", "101010": "000000", "ceb5ff": "7bbde3", - "00424a": "00424a", - "00ceff": "00ceff", - "0084b5": "0084b5", "a584bd": "4994da", "733129": "2048bd", "f75221": "a4c8ff", - "b54221": "6c92e0", - "ffffff": "ffffff", - "737373": "737373" + "b54221": "6c92e0" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/649-shock.json b/public/images/pokemon/variant/649-shock.json index 5e9fab695c2..b81def26a0c 100644 --- a/public/images/pokemon/variant/649-shock.json +++ b/public/images/pokemon/variant/649-shock.json @@ -5,15 +5,10 @@ "9c5ac5": "7baec3", "101010": "081662", "ceb5ff": "87feff", - "4a4208": "4a4208", - "deff00": "deff00", - "b5b500": "b5b500", "a584bd": "62c4e6", "733129": "26a624", "f75221": "ddffb0", - "b54221": "97e083", - "ffffff": "ffffff", - "737373": "737373" + "b54221": "97e083" }, "2": { "52294a": "1e1d33", @@ -21,14 +16,9 @@ "9c5ac5": "484553", "101010": "000000", "ceb5ff": "ffee5e", - "4a4208": "4a4208", - "deff00": "deff00", - "b5b500": "b5b500", "a584bd": "ecb549", "733129": "c69634", "f75221": "fff7aa", - "b54221": "eccc67", - "ffffff": "ffffff", - "737373": "737373" + "b54221": "eccc67" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/649.json b/public/images/pokemon/variant/649.json index 8dd2e6919e1..1d3c6dd1539 100644 --- a/public/images/pokemon/variant/649.json +++ b/public/images/pokemon/variant/649.json @@ -5,15 +5,10 @@ "9c5ac5": "7baec3", "101010": "081662", "ceb5ff": "87feff", - "6b4a08": "6b4a08", - "efbd00": "efbd00", - "c58400": "c58400", "a584bd": "62c4e6", "733129": "26a624", "f75221": "ddffb0", - "b54221": "97e083", - "ffffff": "ffffff", - "737373": "737373" + "b54221": "97e083" }, "2": { "52294a": "1e1d33", @@ -21,14 +16,9 @@ "9c5ac5": "484553", "101010": "000000", "ceb5ff": "f7ae6a", - "6b4a08": "6b4a08", - "efbd00": "efbd00", - "c58400": "c58400", "a584bd": "e2854c", "733129": "c6684b", "f75221": "fbba7f", - "b54221": "e0875a", - "ffffff": "ffffff", - "737373": "737373" + "b54221": "e0875a" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/653.json b/public/images/pokemon/variant/653.json index be967d6c9c2..d603337fb8c 100644 --- a/public/images/pokemon/variant/653.json +++ b/public/images/pokemon/variant/653.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "736028": "9f398a", "ffd659": "e190c3", "ccab47": "c35ba3", @@ -9,11 +8,9 @@ "b34724": "502c81", "737373": "68326b", "f8f8f8": "fbecff", - "bfbfbf": "c093c3", - "404040": "404040" + "bfbfbf": "c093c3" }, "2": { - "101010": "101010", "736028": "172547", "ffd659": "3a6a93", "ccab47": "264166", @@ -22,7 +19,6 @@ "b34724": "0aaa77", "737373": "75553c", "f8f8f8": "fff8ec", - "bfbfbf": "d4b996", - "404040": "404040" + "bfbfbf": "d4b996" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/654.json b/public/images/pokemon/variant/654.json index ce87bf218fb..7d9c5adae93 100644 --- a/public/images/pokemon/variant/654.json +++ b/public/images/pokemon/variant/654.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "736028": "061530", "ffd659": "b55390", "ccab47": "872b59", @@ -10,12 +9,9 @@ "f8f8f8": "f7e4fc", "737373": "5c255f", "bfbfbf": "c093c3", - "804913": "c5b3ca", - "262626": "262626", - "404040": "404040" + "804913": "c5b3ca" }, "2": { - "101010": "101010", "736028": "061530", "ffd659": "2b5f8a", "ccab47": "173864", @@ -25,8 +21,6 @@ "f8f8f8": "fff2dd", "737373": "75553c", "bfbfbf": "d4b996", - "804913": "098794", - "262626": "262626", - "404040": "404040" + "804913": "098794" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/6549.json b/public/images/pokemon/variant/6549.json index 30afb7ebadf..264064b1e4c 100644 --- a/public/images/pokemon/variant/6549.json +++ b/public/images/pokemon/variant/6549.json @@ -2,7 +2,6 @@ "1": { "70365a": "29547d", "bd59a2": "5094c0", - "101010": "101010", "315a31": "5a5a2c", "ff84bd": "73bad9", "39ac39": "bfd17f", @@ -13,13 +12,11 @@ "526229": "80152b", "4a834a": "8e954d", "c5ee7b": "ef5755", - "9cb462": "bd2d40", - "cdc5bd": "cdc5bd" + "9cb462": "bd2d40" }, "2": { "70365a": "8a1a3c", "bd59a2": "d64065", - "101010": "101010", "315a31": "643312", "ff84bd": "e8617a", "39ac39": "ebc460", diff --git a/public/images/pokemon/variant/655.json b/public/images/pokemon/variant/655.json index 9b4721929c1..63e142f0b48 100644 --- a/public/images/pokemon/variant/655.json +++ b/public/images/pokemon/variant/655.json @@ -7,7 +7,6 @@ "816528": "331035", "ffda5a": "e7caef", "deb048": "c093c3", - "101010": "101010", "a7673a": "7a4b9f", "f8f8f8": "ffeef1", "bfbfbf": "d2b3ba", @@ -24,11 +23,7 @@ "816528": "75553c", "ffda5a": "fff2dd", "deb048": "d4b996", - "101010": "101010", "a7673a": "098794", - "f8f8f8": "f8f8f8", - "bfbfbf": "bfbfbf", - "6e6d6a": "6e6d6a", "62211b": "061530", "ae3d32": "215679", "893027": "13325b" diff --git a/public/images/pokemon/variant/6570.json b/public/images/pokemon/variant/6570.json index 0cb91cc3490..083f6275b4c 100644 --- a/public/images/pokemon/variant/6570.json +++ b/public/images/pokemon/variant/6570.json @@ -4,17 +4,13 @@ "d53a3e": "e8512a", "5f0002": "5d0019", "f07376": "ff6d26", - "4a4d53": "4a4d53", "f7acae": "fdc9a2", "fafafa": "f3dac4", - "101010": "101010", "b3b3bb": "d6b7b1", "cbcfd8": "7b7897", "6d4d62": "e1d2d3", "928d96": "303443", - "a7484f": "9e111f", - "ffae1a": "ffae1a", - "df7806": "df7806" + "a7484f": "9e111f" }, "2": { "942429": "09523d", @@ -24,7 +20,6 @@ "4a4d53": "6f4332", "f7acae": "79d38d", "fafafa": "f0decd", - "101010": "101010", "b3b3bb": "c6ab99", "cbcfd8": "d79568", "6d4d62": "813059", diff --git a/public/images/pokemon/variant/6571.json b/public/images/pokemon/variant/6571.json index c87a105447a..3b1482f8a61 100644 --- a/public/images/pokemon/variant/6571.json +++ b/public/images/pokemon/variant/6571.json @@ -2,7 +2,6 @@ "1": { "942429": "4a1921", "d53a3e": "782d41", - "101010": "101010", "928d96": "4a4759", "fafafa": "e1d2d2", "f7acae": "ce646c", @@ -19,7 +18,6 @@ "2": { "942429": "143130", "d53a3e": "2e625a", - "101010": "101010", "928d96": "885f49", "fafafa": "f0decd", "f7acae": "6aa899", @@ -29,7 +27,6 @@ "a7484f": "2a6062", "4a4d53": "411c1a", "cbcfd8": "bc9072", - "4b163b": "4b163b", "6d4d62": "c2589c", "f6ee6c": "98f25f" } diff --git a/public/images/pokemon/variant/664.json b/public/images/pokemon/variant/664.json index bd4164ca7db..932e2399bb9 100644 --- a/public/images/pokemon/variant/664.json +++ b/public/images/pokemon/variant/664.json @@ -2,29 +2,23 @@ "1": { "4d4d4d": "9d6260", "f8f8f8": "ffffff", - "101010": "101010", "b3b3b3": "e9c7c4", "363636": "4c2855", "747474": "a97dbb", "4e4e4e": "895a9f", "9d7247": "838b53", "d1bf6b": "a0c896", - "b2b2b2": "b2b2b2", - "f7f7f7": "f7f7f7", "855d31": "626649" }, "2": { "4d4d4d": "590015", "f8f8f8": "c83e4c", - "101010": "101010", "b3b3b3": "a70d37", "363636": "05312f", "747474": "73bdae", "4e4e4e": "377772", "9d7247": "dda476", "d1bf6b": "ffe0ba", - "b2b2b2": "b2b2b2", - "f7f7f7": "f7f7f7", "855d31": "bf8961" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/665.json b/public/images/pokemon/variant/665.json index 6d828dadb5d..ac2d2e6c336 100644 --- a/public/images/pokemon/variant/665.json +++ b/public/images/pokemon/variant/665.json @@ -6,8 +6,6 @@ "4e4e4e": "895a9f", "747474": "a97dbb", "bfbfbf": "b294be", - "101010": "101010", - "fdfdfd": "fdfdfd", "8c8c8c": "895a9f", "4d4d4d": "9c615f", "f8f8f8": "ffffff", @@ -23,8 +21,6 @@ "4e4e4e": "377772", "747474": "73bdae", "bfbfbf": "a70d37", - "101010": "101010", - "fdfdfd": "fdfdfd", "8c8c8c": "590015", "4d4d4d": "590015", "f8f8f8": "c83e4c", diff --git a/public/images/pokemon/variant/666-archipelago.json b/public/images/pokemon/variant/666-archipelago.json index 5895b2e4836..c3017840a5b 100644 --- a/public/images/pokemon/variant/666-archipelago.json +++ b/public/images/pokemon/variant/666-archipelago.json @@ -1,36 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "c8373c": "c8373c", - "d2bf96": "d2bf96", - "30c171": "30c171", "303030": "402746", - "c27351": "c27351", "675220": "958c8a", "ceab62": "d9edd4", "707068": "a97cbc", "504a4a": "7f6991", - "a2523b": "a2523b", - "c3c3c3": "ffeaff", - "811c1c": "811c1c", - "b28e67": "b28e67" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "824719", - "c8373c": "c8373c", - "d2bf96": "d2bf96", - "30c171": "30c171", "303030": "642703", - "c27351": "c27351", "675220": "741300", "ceab62": "a22414", "707068": "a22414", "504a4a": "741300", - "a2523b": "a2523b", - "c3c3c3": "e7caa5", - "811c1c": "811c1c", - "b28e67": "b28e67" + "c3c3c3": "e7caa5" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/666-continental.json b/public/images/pokemon/variant/666-continental.json index 92614fb346c..2c40d87b19e 100644 --- a/public/images/pokemon/variant/666-continental.json +++ b/public/images/pokemon/variant/666-continental.json @@ -1,38 +1,22 @@ { "1": { - "101010": "101010", "595959": "724b7a", "555353": "724b7a", - "d18257": "d18257", - "f9bd55": "f9bd55", "303030": "402746", - "f8f05e": "f8f05e", - "d24c3e": "d24c3e", "675220": "958c8a", "ceab62": "d9edd4", "707068": "a97cbc", "504a4a": "7f6991", - "aa5844": "aa5844", - "c3c3c3": "ffeaff", - "811c1c": "811c1c", - "e08528": "e08528" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "8f551e", "555353": "e99b44", - "d18257": "d18257", - "f9bd55": "f9bd55", "303030": "6d2d0d", - "f8f05e": "f8f05e", - "d24c3e": "d24c3e", "675220": "9c5c19", "ceab62": "e99b44", "707068": "e99b44", "504a4a": "9c5c19", - "aa5844": "aa5844", - "c3c3c3": "f8f27f", - "811c1c": "811c1c", - "308528": "308528" + "c3c3c3": "f8f27f" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/666-elegant.json b/public/images/pokemon/variant/666-elegant.json index 7d4e199f74d..43f74da48db 100644 --- a/public/images/pokemon/variant/666-elegant.json +++ b/public/images/pokemon/variant/666-elegant.json @@ -1,36 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "e6ddf8": "e6ddf8", - "f8de3f": "f8de3f", - "cf7ef3": "cf7ef3", "303030": "402746", - "875fb5": "875fb5", - "de4040": "de4040", "675220": "958c8a", "ceab62": "d9edd4", "707068": "a97cbc", "504a4a": "7f6991", - "56479d": "56479d", - "c3c3c3": "ffeaff", - "811c1c": "811c1c" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "612776", - "e6ddf8": "e6ddf8", - "f8de3f": "f8de3f", - "cf7ef3": "cf7ef3", "303030": "351262", - "875fb5": "875fb5", - "de4040": "de4040", "675220": "7d1083", "ceab62": "a73fab", "707068": "a73fab", "504a4a": "7d1083", - "56479d": "56479d", - "c3c3c3": "f0ecff", - "811c1c": "811c1c" + "c3c3c3": "f0ecff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/666-fancy.json b/public/images/pokemon/variant/666-fancy.json index 1f31ac6983d..964324d96e5 100644 --- a/public/images/pokemon/variant/666-fancy.json +++ b/public/images/pokemon/variant/666-fancy.json @@ -1,38 +1,22 @@ { - "1": { - "101010": "101010", - "303030": "402746", - "675220": "958c8a", - "504a4a": "7f6991", - "595959": "724b7a", - "707068": "a97cbc", - "811c1c": "811c1c", - "de4040": "de4040", - "5faa3e": "5faa3e", - "ceab62": "d9edd4", - "b6d26d": "b6d26d", - "e9e052": "e9e052", - "cf7ef3": "cf7ef3", - "c3c3c3": "ffeaff", - "f2d4e3": "f2d4e3", - "ead2e3": "ffeaff" - }, - "2": { - "101010": "101010", - "303030": "00771b", - "675220": "b9c05a", - "504a4a": "b9c05a", - "595959": "6f9f42", - "707068": "e3e982", - "811c1c": "811c1c", - "de4040": "de4040", - "5faa3e": "5faa3e", - "ceab62": "e3e982", - "b6d26d": "b6d26d", - "e9e052": "e9e052", - "cf7ef3": "cf7ef3", - "c3c3c3": "fcf1ff", - "f2d4e3": "f2d4e3", - "ead2e3": "fcf1ff" - } + "1": { + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "ceab62": "d9edd4", + "c3c3c3": "ffeaff", + "ead2e3": "ffeaff" + }, + "2": { + "303030": "00771b", + "675220": "b9c05a", + "504a4a": "b9c05a", + "595959": "6f9f42", + "707068": "e3e982", + "ceab62": "e3e982", + "c3c3c3": "fcf1ff", + "ead2e3": "fcf1ff" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/666-garden.json b/public/images/pokemon/variant/666-garden.json index 3b88609e835..7cae3ceec5a 100644 --- a/public/images/pokemon/variant/666-garden.json +++ b/public/images/pokemon/variant/666-garden.json @@ -1,34 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "398351": "398351", - "3dba96": "3dba96", "303030": "402746", - "88d254": "88d254", "675220": "958c8a", "ceab62": "d9edd4", - "de4040": "de4040", "707068": "a97cbc", "504a4a": "7f6991", - "3f919a": "3f919a", - "c3c3c3": "ffeaff", - "811c1c": "811c1c" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "006b55", - "398351": "398351", - "3dba96": "3dba96", "303030": "044553", - "88d254": "88d254", "675220": "055160", "ceab62": "227687", - "de4040": "de4040", "707068": "227687", "504a4a": "055160", - "3f919a": "3f919a", - "c3c3c3": "72d0a3", - "811c1c": "811c1c" + "c3c3c3": "72d0a3" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/666-high-plains.json b/public/images/pokemon/variant/666-high-plains.json index 85a5eb24cc3..d5a9e9f5874 100644 --- a/public/images/pokemon/variant/666-high-plains.json +++ b/public/images/pokemon/variant/666-high-plains.json @@ -1,38 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "f3a861": "f3a861", "303030": "402746", - "9a5a3b": "9a5a3b", - "e1764e": "e1764e", - "aa4343": "aa4343", "675220": "958c8a", "ceab62": "d9edd4", "707068": "a97cbc", "504a4a": "7f6991", - "c3c3c3": "ffeaff", - "811c1c": "811c1c", - "337543": "337543", - "e8c815": "e8c815", - "773d21": "773d21" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "a55422", - "f3a861": "f3a861", "303030": "8f1d19", - "9a5a3b": "9a5a3b", - "e1764e": "e1764e", - "aa4343": "aa4343", "675220": "c97034", "ceab62": "f2975a", "707068": "f2975a", "504a4a": "c97034", - "c3c3c3": "edc67c", - "811c1c": "811c1c", - "337543": "337543", - "e8c815": "e8c815", - "773d21": "773d21" + "c3c3c3": "edc67c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/666-icy-snow.json b/public/images/pokemon/variant/666-icy-snow.json index d69d48d89e9..244c47d1863 100644 --- a/public/images/pokemon/variant/666-icy-snow.json +++ b/public/images/pokemon/variant/666-icy-snow.json @@ -1,34 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "f0f0f8": "f0f0f8", "303030": "402746", - "cfd9cf": "cfd9cf", - "c5c5da": "c5c5da", "675220": "958c8a", "ceab62": "d9edd4", "707068": "a97cbc", "504a4a": "7f6991", - "c3c3c3": "ffeaff", - "acacc2": "acacc2", - "95a1a1": "95a1a1", - "811c1c": "811c1c" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "60646a", - "f0f0f8": "f0f0f8", "303030": "364051", - "cfd9cf": "cfd9cf", - "c5c5da": "c5c5da", "675220": "666b7d", "ceab62": "8c91a4", "707068": "8c91a4", "504a4a": "666b7d", - "c3c3c3": "fefeff", - "acacc2": "acacc2", - "95a1a1": "95a1a1", - "811c1c": "811c1c" + "c3c3c3": "fefeff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/666-jungle.json b/public/images/pokemon/variant/666-jungle.json index ad4070f0378..919184c4dde 100644 --- a/public/images/pokemon/variant/666-jungle.json +++ b/public/images/pokemon/variant/666-jungle.json @@ -1,36 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "638c63": "638c63", - "7cc48b": "7cc48b", "303030": "402746", "675220": "958c8a", "ceab62": "d9edd4", "707068": "a97cbc", "504a4a": "7f6991", - "567456": "567456", - "c3c3c3": "ffeaff", - "811c1c": "811c1c", - "9a653e": "9a653e", - "c29566": "c29566", - "724e28": "724e28" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "285b3b", - "638c63": "638c63", - "7cc48b": "7cc48b", "303030": "20452e", "675220": "153922", "ceab62": "385c43", "707068": "385c43", "504a4a": "153922", - "567456": "567456", - "c3c3c3": "a9d9a0", - "811c1c": "811c1c", - "9a653e": "9a653e", - "c29566": "c29566", - "724e28": "724e28" + "c3c3c3": "a9d9a0" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/666-marine.json b/public/images/pokemon/variant/666-marine.json index 027644dc62d..181da6b4c4b 100644 --- a/public/images/pokemon/variant/666-marine.json +++ b/public/images/pokemon/variant/666-marine.json @@ -1,34 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "2f8dc9": "2f8dc9", - "5acdf1": "5acdf1", "303030": "402746", "675220": "958c8a", "ceab62": "d9edd4", - "f2f2f2": "f2f2f2", - "367cb9": "367cb9", "707068": "a97cbc", "504a4a": "7f6991", - "315382": "315382", - "c3c3c3": "ffeaff", - "811c1c": "811c1c" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "2a5894", - "2f8dc9": "2f8dc9", - "5acdf1": "5acdf1", "303030": "16244f", "675220": "264c85", "ceab62": "3070af", - "f2f2f2": "f2f2f2", - "367cb9": "367cb9", "707068": "3070af", "504a4a": "264c85", - "315382": "315382", - "c3c3c3": "f2f2f2", - "811c1c": "811c1c" + "c3c3c3": "f2f2f2" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/666-meadow.json b/public/images/pokemon/variant/666-meadow.json index 058cb600ee3..e1a99ebebdd 100644 --- a/public/images/pokemon/variant/666-meadow.json +++ b/public/images/pokemon/variant/666-meadow.json @@ -1,36 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "da6b7e": "da6b7e", - "f3a0ca": "f3a0ca", "303030": "402746", "675220": "958c8a", "ceab62": "d9edd4", - "b4295a": "b4295a", - "2d9b9b": "2d9b9b", - "f2f2f2": "f2f2f2", "707068": "a97cbc", "504a4a": "7f6991", - "e66fad": "e66fad", - "c3c3c3": "ffeaff", - "811c1c": "811c1c" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "9e3941", - "da6b7e": "da6b7e", - "f3a0ca": "f3a0ca", "303030": "770921", "675220": "a2275e", "ceab62": "ce5283", - "b4295a": "b4295a", - "2d9b9b": "2d9b9b", - "f2f2f2": "f2f2f2", "707068": "ce5283", "504a4a": "a2275e", - "e66fad": "e66fad", - "c3c3c3": "f4c2ec", - "811c1c": "811c1c" + "c3c3c3": "f4c2ec" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/666-modern.json b/public/images/pokemon/variant/666-modern.json index 9ff33f89cea..73ed4020c5b 100644 --- a/public/images/pokemon/variant/666-modern.json +++ b/public/images/pokemon/variant/666-modern.json @@ -1,36 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", "c3c3c3": "ffeaff", - "3b6cbb": "3b6cbb", - "f44f4f": "f44f4f", "303030": "402746", "675220": "958c8a", "ceab62": "d9edd4", - "f8f05c": "f8f05c", "707068": "a97cbc", - "504a4a": "7f6991", - "b83c3c": "b83c3c", - "cfc5d9": "cfc5d9", - "811c1c": "811c1c", - "405793": "405793" + "504a4a": "7f6991" }, "2": { - "101010": "101010", "595959": "830012", "c3c3c3": "ffeae8", - "3b6cbb": "3b6cbb", - "f44f4f": "f44f4f", "303030": "4e0000", "675220": "801521", "ceab62": "ad2640", - "f8f05c": "f8f05c", "707068": "ad2640", - "504a4a": "801521", - "b83c3c": "b83c3c", - "cfc5d9": "cfc5d9", - "811c1c": "811c1c", - "405793": "405793" + "504a4a": "801521" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/666-monsoon.json b/public/images/pokemon/variant/666-monsoon.json index 915d471b2b1..5a127a43bbe 100644 --- a/public/images/pokemon/variant/666-monsoon.json +++ b/public/images/pokemon/variant/666-monsoon.json @@ -1,33 +1,19 @@ { - "1": { - "101010": "101010", - "303030": "402746", - "675220": "958c8a", - "504a4a": "7f6991", - "595959": "724b7a", - "707068": "a97cbc", - "807676": "807676", - "ceab62": "d9edd4", - "5676de": "5676de", - "4eccd6": "4eccd6", - "989898": "989898", - "c3c3c3": "c3c3c3", - "f0f0f8": "f0f0f8" - }, - "2": { - "101010": "101010", - "303030": "3d3231", - "675220": "2c3593", - "504a4a": "2c3593", - "595959": "4f4645", - "707068": "5857bc", - "807676": "807676", - "ceab62": "5857bc", - "5676de": "5676de", - "4eccd6": "4eccd6", - "989898": "989898", - "92f4f4": "92f4f4", - "c3c3c3": "b8f9f9", - "f0f0f8": "f0f0f8" - } + "1": { + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "ceab62": "d9edd4" + }, + "2": { + "303030": "3d3231", + "675220": "2c3593", + "504a4a": "2c3593", + "595959": "4f4645", + "707068": "5857bc", + "ceab62": "5857bc", + "c3c3c3": "b8f9f9" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/666-ocean.json b/public/images/pokemon/variant/666-ocean.json index 23f8d48c681..5f46bf9343c 100644 --- a/public/images/pokemon/variant/666-ocean.json +++ b/public/images/pokemon/variant/666-ocean.json @@ -1,36 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "e1384d": "e1384d", - "f4ad61": "f4ad61", - "f8ef6a": "f8ef6a", "303030": "402746", "675220": "958c8a", "ceab62": "d9edd4", "707068": "a97cbc", "504a4a": "7f6991", - "ebcf3f": "ebcf3f", - "c3c3c3": "ffeaff", - "4482c9": "4482c9", - "6bb2e9": "6bb2e9", - "811c1c": "811c1c" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "e99a26", - "e1384d": "e1384d", - "f4ad61": "f4ad61", - "f8ef6a": "f8ef6a", "303030": "b54908", "675220": "bc601c", "ceab62": "ea8742", "707068": "ea8742", "504a4a": "bc601c", - "ebcf3f": "ebcf3f", - "c3c3c3": "f3c86b", - "4482c9": "4482c9", - "6bb2e9": "6bb2e9", - "811c1c": "811c1c" + "c3c3c3": "f3c86b" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/666-poke-ball.json b/public/images/pokemon/variant/666-poke-ball.json index fe6b42f6ef3..048cb75ecfd 100644 --- a/public/images/pokemon/variant/666-poke-ball.json +++ b/public/images/pokemon/variant/666-poke-ball.json @@ -1,33 +1,23 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "b72c2c": "b72c2c", - "dc4b4b": "dc4b4b", "303030": "402746", "675220": "958c8a", "ceab62": "d9edd4", - "e97e7e": "e97e7e", - "971d1d": "971d1d", - "f8f8f8": "f8f8f8", "707068": "a97cbc", "504a4a": "7f6991", "c3c3c3": "ffeaff", - "811c1c": "811c1c", - "a9a99e": "a9a99e", "2c2b2b": "402746" }, "2": { - "101010": "101010", "f8f8f8": "00006d", "303030": "ae001a", "2c2b2b": "660000", - "504a4a": "a70038", + "504a4a": "a70038", "595959": "df0036", "c3c3c3": "f0a6bf", "707068": "d5375a", "a9a99e": "000050", - "811c1c": "811c1c", "971d1d": "040046", "b72c2c": "00005e", "dc4b4b": "19007d", diff --git a/public/images/pokemon/variant/666-polar.json b/public/images/pokemon/variant/666-polar.json index 23ee3a94a79..8c8a681f1c6 100644 --- a/public/images/pokemon/variant/666-polar.json +++ b/public/images/pokemon/variant/666-polar.json @@ -1,36 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "4d6cc1": "4d6cc1", "303030": "402746", - "f0f0f8": "f0f0f8", - "3b4b8a": "3b4b8a", - "bfbfbf": "bfbfbf", "675220": "958c8a", "ceab62": "d9edd4", "707068": "a97cbc", "504a4a": "7f6991", - "c3c3c3": "ffeaff", - "2d2d61": "2d2d61", - "811c1c": "811c1c", - "6aa2dc": "6aa2dc" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "2f3887", - "4d6cc1": "4d6cc1", "303030": "191b54", - "f0f0f8": "f0f0f8", - "3b4b8a": "3b4b8a", - "bfbfbf": "bfbfbf", "675220": "366098", "ceab62": "5f85c1", "707068": "5f85c1", "504a4a": "366098", - "c3c3c3": "ffffff", - "2d2d61": "2d2d61", - "811c1c": "811c1c", - "6aa2dc": "6aa2dc" + "c3c3c3": "ffffff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/666-river.json b/public/images/pokemon/variant/666-river.json index c7e5e288d05..5ba0084df9d 100644 --- a/public/images/pokemon/variant/666-river.json +++ b/public/images/pokemon/variant/666-river.json @@ -1,40 +1,18 @@ { - "1": { - "101010": "101010", - "303030": "402746", - "4a412c": "4a412c", - "675220": "958c8a", - "634d20": "634d20", - "1d726a": "1d726a", - "504a4a": "7f6991", - "595959": "724b7a", - "625841": "625841", - "707068": "a97cbc", - "bc813f": "bc813f", - "9c9143": "9c9143", - "ceab62": "ceab62", - "279ec2": "279ec2", - "59c9d3": "59c9d3", - "c3c3c3": "c3c3c3", - "d2a862": "d9edd4" - }, - "2": { - "101010": "101010", - "303030": "7b2800", - "4a412c": "4a412c", - "675220": "ae7f41", - "634d20": "634d20", - "1d726a": "1d726a", - "504a4a": "ae7f41", - "595959": "8a5702", - "625841": "625841", - "707068": "d9a666", - "bc813f": "bc813f", - "9c9143": "9c9143", - "ceab62": "ceab62", - "279ec2": "279ec2", - "59c9d3": "59c9d3", - "c3c3c3": "e3c384", - "d2a862": "d2a862" - } + "1": { + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "d2a862": "d9edd4" + }, + "2": { + "303030": "7b2800", + "675220": "ae7f41", + "504a4a": "ae7f41", + "595959": "8a5702", + "707068": "d9a666", + "c3c3c3": "e3c384" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/666-sandstorm.json b/public/images/pokemon/variant/666-sandstorm.json index c1324548e3d..b80d841c0cc 100644 --- a/public/images/pokemon/variant/666-sandstorm.json +++ b/public/images/pokemon/variant/666-sandstorm.json @@ -1,36 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "f1d69e": "f1d69e", "303030": "402746", - "625843": "625843", - "ba8d68": "ba8d68", - "9b9148": "9b9148", "675220": "958c8a", "ceab62": "d9edd4", "707068": "a97cbc", "504a4a": "7f6991", - "d9b674": "d9b674", - "c3c3c3": "ffeaff", - "811c1c": "811c1c", - "72604d": "72604d" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "88583e", - "f1d69e": "f1d69e", "303030": "443123", - "625843": "625843", - "ba8d68": "ba8d68", - "9b9148": "9b9148", "675220": "9c703b", "ceab62": "c6975f", "707068": "c6975f", "504a4a": "9c703b", - "d9b674": "d9b674", - "c3c3c3": "ece1a9", - "811c1c": "811c1c", - "72604d": "72604d" + "c3c3c3": "ece1a9" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/666-savanna.json b/public/images/pokemon/variant/666-savanna.json index 48ecc051beb..a227c3ae8af 100644 --- a/public/images/pokemon/variant/666-savanna.json +++ b/public/images/pokemon/variant/666-savanna.json @@ -1,36 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "61a0f5": "61a0f5", - "fffd77": "fffd77", - "55d3d9": "55d3d9", "303030": "402746", "675220": "958c8a", "ceab62": "d9edd4", - "dcc433": "dcc433", "707068": "a97cbc", "504a4a": "7f6991", - "3b67ac": "3b67ac", - "6cc6c6": "6cc6c6", - "c3c3c3": "ffeaff", - "811c1c": "811c1c" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "4168bb", - "61a0f5": "61a0f5", - "fffd77": "fffd77", - "55d3d9": "55d3d9", "303030": "183576", "675220": "1d828b", "ceab62": "4faab3", - "dcc433": "dcc433", "707068": "4faab3", "504a4a": "1d828b", - "3b67ac": "3b67ac", - "6cc6c6": "6cc6c6", - "c3c3c3": "81e7e1", - "811c1c": "811c1c" + "c3c3c3": "81e7e1" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/666-sun.json b/public/images/pokemon/variant/666-sun.json index d4b682c9804..aafa9a6cbc6 100644 --- a/public/images/pokemon/variant/666-sun.json +++ b/public/images/pokemon/variant/666-sun.json @@ -1,36 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "f1a26a": "f1a26a", - "f47491": "f47491", "303030": "402746", - "fcf372": "fcf372", - "f0ce44": "f0ce44", "675220": "958c8a", "ceab62": "d9edd4", "707068": "a97cbc", "504a4a": "7f6991", - "c94971": "c94971", - "e18248": "e18248", - "c3c3c3": "ffeaff", - "811c1c": "811c1c" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "750500", - "f1a26a": "f1a26a", - "f47491": "f47491", "303030": "640000", - "fcf372": "fcf372", - "f0ce44": "f0ce44", "675220": "8c1850", "ceab62": "b83b74", "707068": "b83b74", "504a4a": "8c1850", - "c94971": "c94971", - "e18248": "e18248", - "c3c3c3": "fee3e7", - "811c1c": "811c1c" + "c3c3c3": "fee3e7" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/666-tundra.json b/public/images/pokemon/variant/666-tundra.json index e5faa385d22..b458a78851d 100644 --- a/public/images/pokemon/variant/666-tundra.json +++ b/public/images/pokemon/variant/666-tundra.json @@ -1,34 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "a3def1": "a3def1", "303030": "402746", - "f0f0f8": "f0f0f8", - "74bbe9": "74bbe9", - "d0d0d0": "d0d0d0", "675220": "958c8a", "ceab62": "d9edd4", "707068": "a97cbc", "504a4a": "7f6991", - "c3c3c3": "ffeaff", - "539ad9": "539ad9", - "811c1c": "811c1c" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "225b72", - "a3def1": "a3def1", "303030": "003d69", - "f0f0f8": "f0f0f8", - "74bbe9": "74bbe9", - "d0d0d0": "d0d0d0", "675220": "3a76a7", "ceab62": "659dd0", "707068": "659dd0", "504a4a": "3a76a7", - "c3c3c3": "cbfbfb", - "539ad9": "539ad9", - "811c1c": "811c1c" + "c3c3c3": "cbfbfb" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/669-orange.json b/public/images/pokemon/variant/669-orange.json index bc1328bebf9..d6d416d0299 100644 --- a/public/images/pokemon/variant/669-orange.json +++ b/public/images/pokemon/variant/669-orange.json @@ -6,7 +6,6 @@ "595959": "712b2b", "f8f8f8": "fff1df", "bfbfbf": "f1beb3", - "101010": "101010", "686868": "712b2b", "fffbfb": "fff6f6", "e15455": "b84816", diff --git a/public/images/pokemon/variant/669-red.json b/public/images/pokemon/variant/669-red.json index 145228a41c2..eb95bd11117 100644 --- a/public/images/pokemon/variant/669-red.json +++ b/public/images/pokemon/variant/669-red.json @@ -1,10 +1,7 @@ { "1": { - "101010": "101010", "3d6629": "094740", "665a1f": "3e0547", - "595959": "595959", - "686868": "686868", "802d2d": "55061c", "d94c4c": "aa263c", "e15455": "dc6295", @@ -12,10 +9,7 @@ "65a943": "e493a1", "6bb347": "1d8057", "ccb43d": "6a094f", - "ffe14c": "9c235f", - "bfbfbf": "bfbfbf", - "f8f8f8": "f8f8f8", - "fffbfb": "fffbfb" + "ffe14c": "9c235f" }, "2": { "665a1f": "393833", @@ -24,7 +18,6 @@ "595959": "800d3e", "f8f8f8": "ffd7db", "bfbfbf": "f1a2a9", - "101010": "101010", "686868": "800d3e", "fffbfb": "fff6f6", "e15455": "8e0a0a", diff --git a/public/images/pokemon/variant/669-white.json b/public/images/pokemon/variant/669-white.json index 4556e17f09b..48a1806db8f 100644 --- a/public/images/pokemon/variant/669-white.json +++ b/public/images/pokemon/variant/669-white.json @@ -3,11 +3,6 @@ "665a1f": "110732", "ffe14c": "4c495c", "ccb43d": "302b40", - "595959": "595959", - "f8f8f8": "f8f8f8", - "bfbfbf": "bfbfbf", - "101010": "101010", - "686868": "686868", "fffbfb": "f8f8f8", "e15455": "dc6295", "65a943": "e493a1", @@ -22,10 +17,7 @@ "ffe14c": "fdfffb", "ccb43d": "c4c6bf", "595959": "616a64", - "f8f8f8": "f8f8f8", "bfbfbf": "d4dcd5", - "101010": "101010", - "686868": "686868", "fffbfb": "fff6f6", "e15455": "273232", "65a943": "636a67", diff --git a/public/images/pokemon/variant/669-yellow.json b/public/images/pokemon/variant/669-yellow.json index 3ad52b61c15..ab2f958c46b 100644 --- a/public/images/pokemon/variant/669-yellow.json +++ b/public/images/pokemon/variant/669-yellow.json @@ -6,7 +6,6 @@ "595959": "6a532c", "f8f8f8": "fffde0", "bfbfbf": "ead295", - "101010": "101010", "686868": "6a532c", "fffbfb": "fff6f6", "e15455": "bf8f10", diff --git a/public/images/pokemon/variant/6705.json b/public/images/pokemon/variant/6705.json index 87efeef5278..75cbca989ed 100644 --- a/public/images/pokemon/variant/6705.json +++ b/public/images/pokemon/variant/6705.json @@ -6,15 +6,13 @@ "4d454d": "8a2166", "367456": "197497", "50ab89": "3aa8c4", - "101010": "101010", "60606c": "1f1233", "c5cce0": "513981", "aeb5c6": "442967", "949aab": "301848", "665980": "8b69c3", "b8a1e5": "c7a1e5", - "e3e8f4": "cfd6f7", - "8f7db3": "8f7db3" + "e3e8f4": "cfd6f7" }, "2": { "807380": "2b736f", @@ -23,7 +21,6 @@ "4d454d": "194f51", "367456": "a34205", "50ab89": "d27e26", - "101010": "101010", "60606c": "042329", "c5cce0": "176463", "aeb5c6": "0d484a", diff --git a/public/images/pokemon/variant/671-blue.json b/public/images/pokemon/variant/671-blue.json index cb538b357dc..3f60ceea3d1 100644 --- a/public/images/pokemon/variant/671-blue.json +++ b/public/images/pokemon/variant/671-blue.json @@ -6,15 +6,10 @@ "3d9ccc": "2938a3", "61c2f2": "3c54b8", "e5ffff": "69c9e3", - "101010": "101010", "1b594a": "aa1a58", "ffa64c": "ff3e3e", "2d806b": "dc5073", "3aa68b": "ff91a4", - "595959": "595959", - "f8f8f8": "f8f8f8", - "bfbfbf": "bfbfbf", - "262626": "262626", "fff6f6": "f8f8f8" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/671-orange.json b/public/images/pokemon/variant/671-orange.json index 25ffaa4bec2..a7c9af94e41 100644 --- a/public/images/pokemon/variant/671-orange.json +++ b/public/images/pokemon/variant/671-orange.json @@ -6,15 +6,10 @@ "d98d41": "954c17", "ffb266": "cd8e31", "fff2e5": "ffbc77", - "101010": "101010", "1b594a": "aa1a58", "b36bb3": "fff35a", "2d806b": "dc5073", "3aa68b": "ff91a4", - "595959": "595959", - "f8f8f8": "f8f8f8", - "bfbfbf": "bfbfbf", - "262626": "262626", "fff6f6": "f8f8f8" }, "2": { @@ -24,7 +19,6 @@ "d98d41": "7f9f1f", "ffb266": "afcf4f", "fff2e5": "dfe3e1", - "101010": "101010", "1b594a": "800707", "b36bb3": "ffca98", "2d806b": "b1380f", @@ -32,7 +26,6 @@ "595959": "712b2b", "f8f8f8": "fff1df", "bfbfbf": "f1a695", - "262626": "262626", "fff6f6": "f9f9f9" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/671-red.json b/public/images/pokemon/variant/671-red.json index a07f1bf5d25..23ca6c98f2b 100644 --- a/public/images/pokemon/variant/671-red.json +++ b/public/images/pokemon/variant/671-red.json @@ -6,15 +6,10 @@ "d94c4c": "95172c", "ff7373": "c64040", "ffb2cc": "ff90a2", - "101010": "101010", "1b594a": "aa1a58", "ffe14c": "ff7c39", "2d806b": "dc5073", "3aa68b": "ff91a4", - "595959": "595959", - "f8f8f8": "f8f8f8", - "bfbfbf": "bfbfbf", - "262626": "262626", "fff6f6": "f8f8f8" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/671-white.json b/public/images/pokemon/variant/671-white.json index 1db360bee55..21344eab104 100644 --- a/public/images/pokemon/variant/671-white.json +++ b/public/images/pokemon/variant/671-white.json @@ -6,15 +6,10 @@ "d9d9d9": "3c3b47", "fefefe": "60616a", "ffbfca": "c2c1c6", - "101010": "101010", "1b594a": "aa1a58", "41d9d9": "ffffff", "2d806b": "dc5073", "3aa68b": "ff91a4", - "595959": "595959", - "f8f8f8": "f8f8f8", - "bfbfbf": "bfbfbf", - "262626": "262626", "fff6f6": "f8f8f8" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/671-yellow.json b/public/images/pokemon/variant/671-yellow.json index f6e962d1f3f..dfbd260ec74 100644 --- a/public/images/pokemon/variant/671-yellow.json +++ b/public/images/pokemon/variant/671-yellow.json @@ -6,15 +6,10 @@ "d9cc41": "789c16", "fff266": "b0bf2b", "ffd2a6": "ffe593", - "101010": "101010", "1b594a": "aa1a58", "93b336": "5f30ff", "2d806b": "dc5073", "3aa68b": "ff91a4", - "595959": "595959", - "f8f8f8": "f8f8f8", - "bfbfbf": "bfbfbf", - "262626": "262626", "fff6f6": "f8f8f8" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/6713.json b/public/images/pokemon/variant/6713.json index ce1113cb3f9..a23af6d279f 100644 --- a/public/images/pokemon/variant/6713.json +++ b/public/images/pokemon/variant/6713.json @@ -6,7 +6,6 @@ "6b5442": "732334", "335980": "994255", "fbffff": "ffebf2", - "101010": "101010", "492d25": "101010", "553e33": "4c131f", "927863": "994255", @@ -23,7 +22,6 @@ "6b5442": "2c7a75", "335980": "824628", "fbffff": "fff2ad", - "101010": "101010", "492d25": "00403d", "553e33": "006761", "927863": "5ba6a1", diff --git a/public/images/pokemon/variant/672.json b/public/images/pokemon/variant/672.json index 7ee3888e36d..8ed15346d6f 100644 --- a/public/images/pokemon/variant/672.json +++ b/public/images/pokemon/variant/672.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "737373": "9e2c3d", "404040": "73132e", "403830": "642509", diff --git a/public/images/pokemon/variant/673.json b/public/images/pokemon/variant/673.json index e6d03313a9f..313adada8a5 100644 --- a/public/images/pokemon/variant/673.json +++ b/public/images/pokemon/variant/673.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "404040": "73132e", "666666": "9e2c3d", "542914": "471405", @@ -16,7 +15,6 @@ "d6b778": "ce8648" }, "2": { - "101010": "101010", "404040": "161526", "666666": "2d2b40", "542914": "37224d", diff --git a/public/images/pokemon/variant/677.json b/public/images/pokemon/variant/677.json index 9708332f277..f26f7f73032 100644 --- a/public/images/pokemon/variant/677.json +++ b/public/images/pokemon/variant/677.json @@ -6,10 +6,8 @@ "8a8a99": "943b5d", "f8f8f8": "f1f0e4", "cca3cc": "43adaf", - "ffffff": "ffffff", "3f6273": "30237a", - "995c99": "29767f", - "101010": "101010" + "995c99": "29767f" }, "2": { "5c5c66": "243e41", @@ -18,9 +16,7 @@ "8a8a99": "426b62", "f8f8f8": "67415e", "cca3cc": "ff657d", - "ffffff": "ffffff", "3f6273": "69004e", - "995c99": "d13955", - "101010": "101010" + "995c99": "d13955" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/678-female.json b/public/images/pokemon/variant/678-female.json index 06f6eb9ca3b..ffd4c9a6cf3 100644 --- a/public/images/pokemon/variant/678-female.json +++ b/public/images/pokemon/variant/678-female.json @@ -5,10 +5,8 @@ "f8f8f8": "f8f5cd", "17294d": "47182e", "365fb3": "a5346b", - "101010": "101010", "264480": "76264d", "ffe54f": "3fbae2", - "ffffff": "ffffff", "d92121": "415493", "c9ad20": "4b86bd" }, @@ -18,10 +16,8 @@ "f8f8f8": "855577", "17294d": "1d3f33", "365fb3": "7bd38d", - "101010": "101010", "264480": "47946c", "ffe54f": "ff85ad", - "ffffff": "ffffff", "d92121": "9d0067", "c9ad20": "f2557b" } diff --git a/public/images/pokemon/variant/678.json b/public/images/pokemon/variant/678.json index a4ca1b86f3f..cf323c28b96 100644 --- a/public/images/pokemon/variant/678.json +++ b/public/images/pokemon/variant/678.json @@ -6,10 +6,8 @@ "17294d": "47182e", "365fb3": "a5346b", "264480": "76264d", - "101010": "101010", "7ff5f5": "74e8eb", "43c3a7": "1fa5bb", - "ffffff": "ffffff", "14864d": "415493" }, "2": { @@ -19,10 +17,8 @@ "17294d": "1d3f33", "365fb3": "7bd38d", "264480": "47946c", - "101010": "101010", "7ff5f5": "ff867c", "43c3a7": "df4272", - "ffffff": "ffffff", "14864d": "9a0066" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/690.json b/public/images/pokemon/variant/690.json index bc38775de62..77cd77e8069 100644 --- a/public/images/pokemon/variant/690.json +++ b/public/images/pokemon/variant/690.json @@ -4,7 +4,6 @@ "3f6273": "310511", "a6703a": "3e44a2", "a6e1ff": "792a48", - "101010": "101010", "7ec3e5": "6b1f42", "734d28": "22287b", "cc8f52": "6673c0", @@ -18,7 +17,6 @@ "3f6273": "340628", "a6703a": "2c5d64", "a6e1ff": "633060", - "101010": "101010", "7ec3e5": "481a42", "734d28": "123c47", "cc8f52": "37797c", diff --git a/public/images/pokemon/variant/691.json b/public/images/pokemon/variant/691.json index 91435005b4f..579dd697b58 100644 --- a/public/images/pokemon/variant/691.json +++ b/public/images/pokemon/variant/691.json @@ -1,7 +1,6 @@ { "1": { "4e4f26": "31246d", - "101010": "101010", "8b8c62": "403c94", "751e2a": "310511", "dc3d51": "5a152f", diff --git a/public/images/pokemon/variant/696.json b/public/images/pokemon/variant/696.json index 19a14cea4ea..2e5ebaa0a7b 100644 --- a/public/images/pokemon/variant/696.json +++ b/public/images/pokemon/variant/696.json @@ -1,53 +1,27 @@ { "1": { - "734517":"5e0b0b", - "ffa64c":"a50d0d", - "4a322c":"023425", - "404040":"4c3216", - "101010":"101010", - "65483a":"0b4c29", - "966858":"1b6430", - "f8f8f8":"dfdea7", - "8c8c8c":"ad8c63", - "bfbfbf":"cbbe8c", - "121212":"121212", - "bdbdbd":"cfc28f" + "734517": "5e0b0b", + "ffa64c": "a50d0d", + "4a322c": "023425", + "404040": "4c3216", + "65483a": "0b4c29", + "966858": "1b6430", + "f8f8f8": "dfdea7", + "8c8c8c": "ad8c63", + "bfbfbf": "cbbe8c", + "bdbdbd": "cfc28f" }, "2": { - "734517":"395cb7", - "ffa64c":"d2e9ff", - "4a322c":"3e1f18", - "404040":"250860", - "101010":"101010", - "65483a":"644943", - "966858":"83726e", - "f8f8f8":"6e46a7", - "8c8c8c":"411684", - "bfbfbf":"593097", - "121212":"decaff", - "bdbdbd":"79c8d3" + "734517": "395cb7", + "ffa64c": "d2e9ff", + "4a322c": "3e1f18", + "404040": "250860", + "65483a": "644943", + "966858": "83726e", + "f8f8f8": "6e46a7", + "8c8c8c": "411684", + "bfbfbf": "593097", + "121212": "decaff", + "bdbdbd": "79c8d3" } -} - - - - - - - - - - - - - - - - - - - - - - - +} \ No newline at end of file diff --git a/public/images/pokemon/variant/697.json b/public/images/pokemon/variant/697.json index 5932ca714e4..f0b1435d35d 100644 --- a/public/images/pokemon/variant/697.json +++ b/public/images/pokemon/variant/697.json @@ -1,39 +1,36 @@ { "1": { - "54434c":"4c3216", - "080808":"080808", - "fafafa":"dfdea7", - "964b1c":"5e0b0b", - "f19d5a":"b52424", - "bf7545":"971c1c", - "cccccc":"cbbe8c", - "50131e":"0b241e", - "963e4e":"285234", - "722533":"153626", - "32252c":"401f18", - "c9c9c9":"cfc28f", - "f7f7f7":"e0dfa8", - "9f9d98":"ad8c63", - "2f2329":"3e1e17", - "584650":"4a3115" + "54434c": "4c3216", + "fafafa": "dfdea7", + "964b1c": "5e0b0b", + "f19d5a": "b52424", + "bf7545": "971c1c", + "cccccc": "cbbe8c", + "50131e": "0b241e", + "963e4e": "285234", + "722533": "153626", + "32252c": "401f18", + "c9c9c9": "cfc28f", + "f7f7f7": "e0dfa8", + "9f9d98": "ad8c63", + "2f2329": "3e1e17", + "584650": "4a3115" }, "2": { - "54434c":"170c25", - "080808":"080808", - "fafafa":"4b2e64", - "964b1c":"9d5390", - "f19d5a":"f3daf5", - "bf7545":"cd7aca", - "cccccc":"33214f", - "50131e":"52352f", - "963e4e":"ab9b97", - "722533":"83726e", - "32252c":"0d0124", - "c9c9c9":"ce7ecc", - "f7f7f7":"f4dbf6", - "9f9d98":"26173b", - "2f2329":"c979c7", - "584650":"eed5f0" + "54434c": "170c25", + "fafafa": "4b2e64", + "964b1c": "9d5390", + "f19d5a": "f3daf5", + "bf7545": "cd7aca", + "cccccc": "33214f", + "50131e": "52352f", + "963e4e": "ab9b97", + "722533": "83726e", + "32252c": "0d0124", + "c9c9c9": "ce7ecc", + "f7f7f7": "f4dbf6", + "9f9d98": "26173b", + "2f2329": "c979c7", + "584650": "eed5f0" } -} - +} \ No newline at end of file diff --git a/public/images/pokemon/variant/698.json b/public/images/pokemon/variant/698.json index f4b95a1c7bf..2f7e4b2d4c7 100644 --- a/public/images/pokemon/variant/698.json +++ b/public/images/pokemon/variant/698.json @@ -5,11 +5,8 @@ "fff2b2": "9bffa9", "85b4cc": "cf755d", "a6e1ff": "efab87", - "cacaca": "cacaca", - "101010": "101010", "2eaeec": "4dc796", "1f75a0": "29988e", - "fdfdfd": "fdfdfd", "537180": "b04f4b", "217aa6": "7f99e1", "30b2f2": "b5dcff", @@ -22,11 +19,8 @@ "fff2b2": "eb88b9", "85b4cc": "654a8a", "a6e1ff": "936daa", - "cacaca": "cacaca", - "101010": "101010", "2eaeec": "ad4e6e", "1f75a0": "8d2656", - "fdfdfd": "fdfdfd", "537180": "392d65", "217aa6": "efaa51", "30b2f2": "ffd169", diff --git a/public/images/pokemon/variant/699.json b/public/images/pokemon/variant/699.json index 8aecfd2f2c2..aeae4cdce3c 100644 --- a/public/images/pokemon/variant/699.json +++ b/public/images/pokemon/variant/699.json @@ -10,10 +10,8 @@ "3689b3": "8487e1", "81a0dc": "e5756b", "ffffff": "ffeac0", - "f8f8f8": "f8f8f8", "4cc3ff": "c2d5ff", "657dac": "c44f5d", - "101010": "101010", "3d8eb6": "12545e", "53c5ff": "1c7376", "4b6f76": "b78460", @@ -31,10 +29,8 @@ "3689b3": "efbe63", "81a0dc": "3f648b", "ffffff": "bae8ff", - "f8f8f8": "f8f8f8", "4cc3ff": "ffea82", "657dac": "2f4978", - "101010": "101010", "3d8eb6": "852d6b", "53c5ff": "ab467e", "4b6f76": "1c183a", diff --git a/public/images/pokemon/variant/70.json b/public/images/pokemon/variant/70.json index a3c4f64f2c7..1b765e959ea 100644 --- a/public/images/pokemon/variant/70.json +++ b/public/images/pokemon/variant/70.json @@ -10,7 +10,6 @@ "d6c552": "ca4f59", "6bc552": "e59266", "fff7ad": "f9bfa6", - "ffffff": "ffffff", "b5424a": "5b284a", "ef9cad": "aa6172", "7b2929": "3d1138", @@ -27,7 +26,6 @@ "d6c552": "6aa6cd", "6bc552": "b0ccd7", "fff7ad": "bae7eb", - "ffffff": "ffffff", "b5424a": "18286f", "ef9cad": "4874b4", "7b2929": "0f1653", diff --git a/public/images/pokemon/variant/700.json b/public/images/pokemon/variant/700.json index dd61b5d1dc4..1aa7adcebd6 100644 --- a/public/images/pokemon/variant/700.json +++ b/public/images/pokemon/variant/700.json @@ -4,7 +4,6 @@ "235a99": "a63071", "fa8caa": "c7a6ee", "64c8f3": "e974db", - "101010": "101010", "528fcc": "d648b7", "d85a7a": "996cd2", "895c72": "5c6889", @@ -18,7 +17,6 @@ "235a99": "900d1b", "fa8caa": "7dec9d", "64c8f3": "ff9a68", - "101010": "101010", "528fcc": "dd3d4f", "d85a7a": "5dae7d", "895c72": "7f5c89", diff --git a/public/images/pokemon/variant/702.json b/public/images/pokemon/variant/702.json index 12feb29a0fd..adea0fb21eb 100644 --- a/public/images/pokemon/variant/702.json +++ b/public/images/pokemon/variant/702.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "262626": "2a3b5e", "4d4d4d": "6789b3", "bfbf86": "a3d1cc", @@ -10,12 +9,10 @@ "f2c261": "ffd3b6", "bf994c": "e49f84", "1d1d1d": "1a1c45", - "f8f8f8": "f8f8f8", "464646": "424b8f", "d97d21": "7cd6a1" }, "2": { - "101010": "101010", "262626": "072d38", "4d4d4d": "197870", "bfbf86": "aaa8d6", @@ -25,7 +22,6 @@ "f2c261": "5f3662", "bf994c": "432249", "1d1d1d": "02172d", - "f8f8f8": "f8f8f8", "464646": "17646c", "d97d21": "d2fff1" } diff --git a/public/images/pokemon/variant/703.json b/public/images/pokemon/variant/703.json index 46a8ec413b4..063a732a361 100644 --- a/public/images/pokemon/variant/703.json +++ b/public/images/pokemon/variant/703.json @@ -2,13 +2,11 @@ "1": { "6994bf": "e67c37", "474759": "292638", - "f8f8f8": "f8f8f8", "8cc6ff": "ffa633", "2e5073": "c35b2a", "8f8fb3": "4d496b", "adadd9": "68638e", "666680": "37344e", - "101010": "101010", "21abd9": "ff9b44", "595959": "e6ac60", "f2f2f2": "ffeed6", @@ -23,7 +21,6 @@ "8f8fb3": "e4cdf9", "adadd9": "faecff", "666680": "cca1db", - "101010": "101010", "21abd9": "de5f8e", "595959": "5a3d84", "f2f2f2": "a473bf", diff --git a/public/images/pokemon/variant/704.json b/public/images/pokemon/variant/704.json index 7c6e384891c..dfbcd3ecc58 100644 --- a/public/images/pokemon/variant/704.json +++ b/public/images/pokemon/variant/704.json @@ -4,7 +4,6 @@ "f2daf2": "fbb3d2", "bfacbf": "e56ca6", "4d454d": "8a2166", - "101010": "101010", "4d993d": "197497", "66cc52": "3aa8c4", "b8a1e5": "c7a1e5", @@ -16,7 +15,6 @@ "f2daf2": "92d8c8", "bfacbf": "63a99e", "4d454d": "134557", - "101010": "101010", "4d993d": "a34205", "66cc52": "d27e26", "b8a1e5": "4a9699", diff --git a/public/images/pokemon/variant/705.json b/public/images/pokemon/variant/705.json index 26e5d5527fd..165f951ed65 100644 --- a/public/images/pokemon/variant/705.json +++ b/public/images/pokemon/variant/705.json @@ -6,7 +6,6 @@ "4d454d": "8a2166", "307922": "aa6a00", "46b030": "ffd047", - "101010": "101010", "98bd51": "197497", "d2e79e": "3aa8c4", "647543": "0c5474", @@ -21,7 +20,6 @@ "4d454d": "194f51", "307922": "007d61", "46b030": "49ffbf", - "101010": "101010", "98bd51": "a34205", "d2e79e": "d27e26", "647543": "842401", diff --git a/public/images/pokemon/variant/706.json b/public/images/pokemon/variant/706.json index 5ede613c3cc..f369598d1b5 100644 --- a/public/images/pokemon/variant/706.json +++ b/public/images/pokemon/variant/706.json @@ -4,8 +4,6 @@ "807380": "8a2166", "bfacbf": "da75a5", "e6d4e7": "f1a4c5", - "f8f8f8": "f8f8f8", - "101010": "101010", "998a99": "b24c86", "307922": "0c5474", "46b030": "197497", @@ -21,8 +19,6 @@ "807380": "194f51", "bfacbf": "5db6a9", "e6d4e7": "9cead8", - "f8f8f8": "f8f8f8", - "101010": "101010", "998a99": "2b736f", "307922": "842401", "46b030": "a34205", diff --git a/public/images/pokemon/variant/708.json b/public/images/pokemon/variant/708.json index a92a69f34c1..e3d4958fccb 100644 --- a/public/images/pokemon/variant/708.json +++ b/public/images/pokemon/variant/708.json @@ -1,7 +1,6 @@ { "1": { "2b303c": "722023", - "101010": "101010", "494e5b": "a14743", "174d3b": "4d362e", "56372f": "36384f", @@ -13,7 +12,6 @@ }, "2": { "2b303c": "6f5f80", - "101010": "101010", "494e5b": "9c92a4", "174d3b": "a94079", "56372f": "31161d", diff --git a/public/images/pokemon/variant/709.json b/public/images/pokemon/variant/709.json index 21d5e210162..984c8b8da02 100644 --- a/public/images/pokemon/variant/709.json +++ b/public/images/pokemon/variant/709.json @@ -2,7 +2,6 @@ "1": { "2d241b": "17182f", "a37a4c": "575a6a", - "101010": "101010", "004321": "361f1b", "1ea762": "907f76", "007541": "4d362e", @@ -15,7 +14,6 @@ "2": { "2d241b": "47232b", "a37a4c": "7e5658", - "101010": "101010", "004321": "761d52", "1ea762": "da7ea8", "007541": "a94079", diff --git a/public/images/pokemon/variant/71.json b/public/images/pokemon/variant/71.json index 993b1749a04..a5b18472689 100644 --- a/public/images/pokemon/variant/71.json +++ b/public/images/pokemon/variant/71.json @@ -2,15 +2,12 @@ "1": { "4aa57b": "e28e58", "635229": "4f0537", - "000000": "000000", "10633a": "b0552e", "8cc57b": "f9be81", "a57b31": "781649", "841900": "50155e", "c55a21": "8d2f89", "ef8c52": "b352a5", - "ffffff": "ffffff", - "bdc5c5": "bdc5c5", "debd52": "983b3d", "efd66b": "b6514d", "f7ef94": "d37763" @@ -25,7 +22,6 @@ "841900": "1d198a", "c55a21": "2231a7", "ef8c52": "3250c7", - "ffffff": "ffffff", "bdc5c5": "b0c3c7", "debd52": "5966b0", "efd66b": "6880c2", diff --git a/public/images/pokemon/variant/710.json b/public/images/pokemon/variant/710.json index 599076fba4b..56ae838fe41 100644 --- a/public/images/pokemon/variant/710.json +++ b/public/images/pokemon/variant/710.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "332721": "213a22", "664e42": "72a966", "4d3b32": "478243", @@ -12,7 +11,6 @@ "b36859": "262626" }, "2": { - "101010": "101010", "332721": "0e2218", "664e42": "425947", "4d3b32": "2a4031", diff --git a/public/images/pokemon/variant/711.json b/public/images/pokemon/variant/711.json index aab77e6eebf..31420703595 100644 --- a/public/images/pokemon/variant/711.json +++ b/public/images/pokemon/variant/711.json @@ -5,7 +5,6 @@ "4c3a1b": "593a59", "894331": "171717", "bf634c": "262626", - "101010": "101010", "f49670": "404040", "ac733e": "aa7e43", "7b4425": "673b1b", @@ -21,7 +20,6 @@ "4c3a1b": "2c2c30", "894331": "153f18", "bf634c": "325b34", - "101010": "101010", "f49670": "4d7d4b", "ac733e": "baa78d", "7b4425": "5c4831", @@ -37,7 +35,6 @@ "4c3a1b": "ad3b33", "894331": "102316", "bf634c": "213c28", - "101010": "101010", "f49670": "36593d", "ac733e": "9b613a", "7b4425": "4a2618", diff --git a/public/images/pokemon/variant/712.json b/public/images/pokemon/variant/712.json index 9663215b117..98f5721bb80 100644 --- a/public/images/pokemon/variant/712.json +++ b/public/images/pokemon/variant/712.json @@ -5,14 +5,10 @@ "58647b": "bf566d", "719aa9": "d97389", "b3eaf8": "ffbfda", - "101010": "101010", "705c99": "732334", "f2ba49": "9dcc3e", "967acc": "994255", - "ffd98c": "cbe696", - "737373": "737373", - "bfbfbf": "bfbfbf", - "f8f8f8": "f8f8f8" + "ffd98c": "cbe696" }, "2": { "a5c4d2": "e69e2b", @@ -20,7 +16,6 @@ "58647b": "a8632a", "719aa9": "cc7b1e", "b3eaf8": "fcc95c", - "101010": "101010", "705c99": "006761", "f2ba49": "6cb3ae", "967acc": "2c7a75", diff --git a/public/images/pokemon/variant/713.json b/public/images/pokemon/variant/713.json index ca45360ecea..af98bddcc6d 100644 --- a/public/images/pokemon/variant/713.json +++ b/public/images/pokemon/variant/713.json @@ -7,12 +7,8 @@ "77b8d9": "d97389", "335980": "994255", "f2ffff": "ffebf2", - "101010": "101010", - "737373": "737373", - "bfbfbf": "bfbfbf", "efab34": "9dcc3e", - "ffe46a": "cbe696", - "f8f8f8": "f8f8f8" + "ffe46a": "cbe696" }, "2": { "608cba": "a8632a", @@ -22,8 +18,6 @@ "77b8d9": "cc7b1e", "335980": "824628", "f2ffff": "fff2ad", - "101010": "101010", - "737373": "737373", "bfbfbf": "6cb3ae", "efab34": "6cb3ae", "ffe46a": "b9f2ee", diff --git a/public/images/pokemon/variant/714.json b/public/images/pokemon/variant/714.json index d726bd0e87d..8c9cafc054d 100644 --- a/public/images/pokemon/variant/714.json +++ b/public/images/pokemon/variant/714.json @@ -2,28 +2,24 @@ "1": { "633674": "731338", "b459d5": "a42c54", - "101010": "101010", "85489b": "8e1d4b", "756175": "43167f", "a791a7": "7047ba", "d7bad7": "8d7be3", "3f3f3f": "202558", "ccb43d": "ff8a58", - "f8f8f8": "f8f8f8", "606060": "2f386b", "ffe14c": "ffc182" }, "2": { "633674": "5f151c", "b459d5": "c24430", - "101010": "101010", "85489b": "882c27", "756175": "945d56", "a791a7": "dfb6a8", "d7bad7": "f9e8dd", "3f3f3f": "5b1922", "ccb43d": "33d8d0", - "f8f8f8": "f8f8f8", "606060": "7c2928", "ffe14c": "49ffcd" } diff --git a/public/images/pokemon/variant/715.json b/public/images/pokemon/variant/715.json index e43af20a0de..83d43e5adf6 100644 --- a/public/images/pokemon/variant/715.json +++ b/public/images/pokemon/variant/715.json @@ -1,42 +1,38 @@ { - "1": { - "101010": "101010", - "2b2b2b": "43167f", - "343333": "563d8f", - "3b3b3b": "5f32b1", - "6a3f73": "0f103c", - "287366": "731338", - "575757": "7a5ccc", - "555454": "9166c8", - "801a1a": "5d173d", - "e52e2e": "903b78", - "ffe14c": "ff8a58", - "8e5499": "202558", - "bd70cc": "2f386b", - "3aa694": "a42c54", - "4cd9c1": "d04b6c", - "bfbfbf": "bb9adc", - "f8f8f8": "f8f8f8", - "f7f3f3": "d6c8f1" - }, - "2": { - "101010": "101010", - "2b2b2b": "5e3932", - "343333": "1d060c", - "3b3b3b": "c29484", - "6a3f73": "3b0c18", - "287366": "832714", - "575757": "ecd3c3", - "555454": "2f0d13", - "801a1a": "7c0907", - "e52e2e": "ad3419", - "ffe14c": "49ffcd", - "8e5499": "5b1922", - "bd70cc": "7c2928", - "3aa694": "b8552c", - "4cd9c1": "dd834c", - "bfbfbf": "43191e", - "f8f8f8": "f8f8f8", - "f7f3f3": "5a2a2b" - } + "1": { + "2b2b2b": "43167f", + "343333": "563d8f", + "3b3b3b": "5f32b1", + "6a3f73": "0f103c", + "287366": "731338", + "575757": "7a5ccc", + "555454": "9166c8", + "801a1a": "5d173d", + "e52e2e": "903b78", + "ffe14c": "ff8a58", + "8e5499": "202558", + "bd70cc": "2f386b", + "3aa694": "a42c54", + "4cd9c1": "d04b6c", + "bfbfbf": "bb9adc", + "f7f3f3": "d6c8f1" + }, + "2": { + "2b2b2b": "5e3932", + "343333": "1d060c", + "3b3b3b": "c29484", + "6a3f73": "3b0c18", + "287366": "832714", + "575757": "ecd3c3", + "555454": "2f0d13", + "801a1a": "7c0907", + "e52e2e": "ad3419", + "ffe14c": "49ffcd", + "8e5499": "5b1922", + "bd70cc": "7c2928", + "3aa694": "b8552c", + "4cd9c1": "dd834c", + "bfbfbf": "43191e", + "f7f3f3": "5a2a2b" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/716-active.json b/public/images/pokemon/variant/716-active.json index f56ac097702..fe5ff1c16b6 100644 --- a/public/images/pokemon/variant/716-active.json +++ b/public/images/pokemon/variant/716-active.json @@ -9,13 +9,11 @@ "f24949": "418fc9", "ffecb2": "f0c197", "547fe9": "b33ccd", - "101010": "101010", "f29d49": "51d6ad", "b857d9": "6c45da", "243659": "132b1b", "5c8ae5": "324c37", "3d5c99": "1e3824", - "fff9e6": "fff9e6", "262626": "518554", "404040": "7ca376" }, @@ -29,13 +27,11 @@ "f24949": "f65be1", "ffecb2": "553639", "547fe9": "d75343", - "101010": "101010", "f29d49": "8b67ff", "b857d9": "f7477f", "243659": "37134c", "5c8ae5": "884e9f", "3d5c99": "643071", - "fff9e6": "fff9e6", "262626": "d284b6", "404040": "faaed8" } diff --git a/public/images/pokemon/variant/716-neutral.json b/public/images/pokemon/variant/716-neutral.json index e6b5dab397b..7dd54065267 100644 --- a/public/images/pokemon/variant/716-neutral.json +++ b/public/images/pokemon/variant/716-neutral.json @@ -3,11 +3,9 @@ "364566": "603f3c", "84b4ce": "ac8781", "c0e0ec": "bfa19a", - "101010": "101010", "243659": "132b1b", "5c8ae5": "324c37", "3d5c99": "1e3824", - "fff9e6": "fff9e6", "2b2a2e": "518554", "404040": "7ca376" }, @@ -15,11 +13,9 @@ "364566": "230d1e", "84b4ce": "42283b", "c0e0ec": "613e56", - "101010": "101010", "243659": "37134c", "5c8ae5": "884e9f", "3d5c99": "643071", - "fff9e6": "fff9e6", "2b2a2e": "d285a7", "404040": "f6badb" } diff --git a/public/images/pokemon/variant/717.json b/public/images/pokemon/variant/717.json index 29b3fc77fb3..f809d0abdc1 100644 --- a/public/images/pokemon/variant/717.json +++ b/public/images/pokemon/variant/717.json @@ -3,7 +3,6 @@ "1a1b1e": "0f0b2c", "586369": "323b6b", "3c4247": "1d2250", - "010101": "010101", "282d31": "12133a", "6d6969": "c1ac9a", "a49897": "dbd4cd", @@ -13,14 +12,12 @@ "c43647": "8235a4", "ec4434": "9642b1", "5b1a2b": "3a0e5b", - "43c8cf": "57b3ff", - "fbfbfb": "fbfbfb" + "43c8cf": "57b3ff" }, "2": { "1a1b1e": "234596", "586369": "94cbf9", "3c4247": "5f9ee4", - "010101": "010101", "282d31": "356cbc", "6d6969": "bfb0f4", "a49897": "ded9ff", @@ -30,7 +27,6 @@ "c43647": "1a1c77", "ec4434": "222a90", "5b1a2b": "0e0742", - "43c8cf": "ff1519", - "fbfbfb": "fbfbfb" + "43c8cf": "ff1519" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/720-unbound.json b/public/images/pokemon/variant/720-unbound.json index 8fc7ab07db3..70acd449dba 100644 --- a/public/images/pokemon/variant/720-unbound.json +++ b/public/images/pokemon/variant/720-unbound.json @@ -3,7 +3,6 @@ "582840": "701507", "cf4f8f": "cb5e23", "9f3f6f": "902c0d", - "101010": "101010", "446475": "513b29", "302c2c": "3e162b", "afcfdf": "c6bba8", @@ -12,14 +11,12 @@ "6b8b98": "725f4d", "7f5f1f": "414a79", "ffdf3f": "becef5", - "bf9f3f": "9ca7d5", - "fefefe": "fefefe" + "bf9f3f": "9ca7d5" }, "1": { "582840": "280d46", "cf4f8f": "753f9b", "9f3f6f": "471c6b", - "101010": "101010", "446475": "4d244e", "302c2c": "632373", "afcfdf": "c3aabe", @@ -28,14 +25,12 @@ "6b8b98": "72496e", "7f5f1f": "853015", "ffdf3f": "ffc26a", - "bf9f3f": "e2885a", - "fefefe": "fefefe" + "bf9f3f": "e2885a" }, "2": { "582840": "150933", "cf4f8f": "35387c", "9f3f6f": "1d1a4b", - "101010": "101010", "446475": "1a3f35", "302c2c": "1c2433", "afcfdf": "a1c4c3", @@ -44,7 +39,6 @@ "6b8b98": "345a54", "7f5f1f": "682b16", "ffdf3f": "ed9b42", - "bf9f3f": "b05d2d", - "fefefe": "fefefe" + "bf9f3f": "b05d2d" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/720.json b/public/images/pokemon/variant/720.json index e2d1409fbe3..b2cb8e2105d 100644 --- a/public/images/pokemon/variant/720.json +++ b/public/images/pokemon/variant/720.json @@ -5,7 +5,6 @@ "cc5c81": "902c0d", "676773": "3e162b", "8a8a99": "684252", - "101010": "101010", "dadaf2": "ffdb73", "807126": "414a79", "b8b8cc": "cc923c", @@ -22,7 +21,6 @@ "cc5c81": "471c6b", "676773": "632373", "8a8a99": "a947b4", - "101010": "101010", "dadaf2": "f7bae9", "807126": "853015", "b8b8cc": "ca79bd", @@ -39,7 +37,6 @@ "cc5c81": "1d1a4b", "676773": "1c2433", "8a8a99": "304757", - "101010": "101010", "dadaf2": "d5cce5", "807126": "682b16", "b8b8cc": "9e8fbb", diff --git a/public/images/pokemon/variant/728.json b/public/images/pokemon/variant/728.json index fb17e2c119e..cd73143937a 100644 --- a/public/images/pokemon/variant/728.json +++ b/public/images/pokemon/variant/728.json @@ -7,8 +7,6 @@ "436cbf": "009469", "b3627d": "e54c41", "6c90d9": "14af82", - "101010": "101010", - "808080": "808080", "bfbfbf": "c2beb4", "314f8c": "006355", "639ba6": "858d7d", @@ -24,8 +22,6 @@ "436cbf": "a6213f", "b3627d": "a7225c", "6c90d9": "be294a", - "101010": "101010", - "808080": "808080", "bfbfbf": "bfb4b9", "314f8c": "770f29", "639ba6": "b88389", diff --git a/public/images/pokemon/variant/729.json b/public/images/pokemon/variant/729.json index 491f0e1447d..fbf9b930c18 100644 --- a/public/images/pokemon/variant/729.json +++ b/public/images/pokemon/variant/729.json @@ -1,34 +1,28 @@ { "1": { - "808080": "808080", "f8f8f8": "fff6e2", "bfbfbf": "c2beb4", "476d72": "be665d", "8dafaf": "ff989e", - "101010": "101010", "326187": "006b65", "2d8ec4": "009a88", "bad8d8": "ffbd98", "1eb9ee": "0ccfa2", "733f50": "bb402f", "e57ea1": "ff9384", - "2d2e31": "2d2e31", "b3627d": "fb6051" }, "2": { - "808080": "808080", "f8f8f8": "f5edee", "bfbfbf": "bfb4b9", "476d72": "793f5e", "8dafaf": "b681a6", - "101010": "101010", "326187": "5a141b", "2d8ec4": "952c3f", "bad8d8": "deabce", "1eb9ee": "c6496f", "733f50": "620a33", "e57ea1": "dd3780", - "2d2e31": "2d2e31", "b3627d": "a7225c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/730.json b/public/images/pokemon/variant/730.json index eec815b0572..9ac00923a7a 100644 --- a/public/images/pokemon/variant/730.json +++ b/public/images/pokemon/variant/730.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "8d3f4a": "a62c20", "c76374": "e54c41", "0e6792": "b54f5f", @@ -18,11 +17,9 @@ "c0bdc1": "beaac0", "aac7e6": "ea7c5b", "f8f8f8": "fff2d4", - "faf8f8": "f1e8f1", - "fef8f8": "fef8f8" + "faf8f8": "f1e8f1" }, "2": { - "101010": "101010", "8d3f4a": "1d1638", "c76374": "391e62", "0e6792": "500518", @@ -40,7 +37,6 @@ "c0bdc1": "c0b4a5", "aac7e6": "e9a5c0", "f8f8f8": "f5edee", - "faf8f8": "f5f3e3", - "fef8f8": "fef8f8" + "faf8f8": "f5f3e3" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/734.json b/public/images/pokemon/variant/734.json index e85de98e300..f4048ea2099 100644 --- a/public/images/pokemon/variant/734.json +++ b/public/images/pokemon/variant/734.json @@ -7,11 +7,6 @@ "9c5b50": "2a3f52", "ba836d": "35576b", "ea8c96": "c1715c", - "080808": "080808", - "f8f8f8": "f8f8f8", - "686d77": "686d77", - "433f3a": "433f3a", - "a5a8af": "a5a8af", "413d38": "523716" }, "2": { @@ -22,8 +17,6 @@ "9c5b50": "786a66", "ba836d": "a69c98", "ea8c96": "a38b89", - "080808": "080808", - "f8f8f8": "f8f8f8", "686d77": "6c6c6c", "433f3a": "3f3f3f", "a5a8af": "a7a7a7", diff --git a/public/images/pokemon/variant/735.json b/public/images/pokemon/variant/735.json index 7e6e6e65449..dc4575ce8c8 100644 --- a/public/images/pokemon/variant/735.json +++ b/public/images/pokemon/variant/735.json @@ -5,13 +5,9 @@ "8d473d": "2a3252", "602c24": "03102d", "af754e": "354c6b", - "101010": "101010", "b6973a": "7a6a6d", "393633": "5f3d1c", - "f8f8f8": "f8f8f8", - "787885": "787885", "ea6f91": "c1715c", - "a3a3ab": "a3a3ab", "2d2b28": "5a3215" }, "2": { @@ -20,10 +16,7 @@ "8d473d": "90827e", "602c24": "524b4b", "af754e": "ada5a4", - "101010": "101010", "b6973a": "362e2e", - "393633": "393633", - "f8f8f8": "f8f8f8", "787885": "6e6e7b", "ea6f91": "846a68", "a3a3ab": "989898", diff --git a/public/images/pokemon/variant/747.json b/public/images/pokemon/variant/747.json index 8c4b94e9149..f765e3a51f8 100644 --- a/public/images/pokemon/variant/747.json +++ b/public/images/pokemon/variant/747.json @@ -6,12 +6,10 @@ "ba8dbe": "edd5ca", "daac23": "aca5f3", "9265a3": "d29784", - "101010": "101010", "335780": "490a26", "6098b7": "b24b34", "dcafd6": "a21f90", - "9fd9d6": "e07b53", - "fdfdfd": "fdfdfd" + "9fd9d6": "e07b53" }, "2": { "be7c34": "9f4354", @@ -20,11 +18,9 @@ "ba8dbe": "2b6157", "daac23": "efa2ad", "9265a3": "1c524b", - "101010": "101010", "335780": "186443", "6098b7": "359d5d", "dcafd6": "ff3f5a", - "9fd9d6": "5bd97f", - "fdfdfd": "fdfdfd" + "9fd9d6": "5bd97f" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/748.json b/public/images/pokemon/variant/748.json index 280c676293a..5ffc26903ab 100644 --- a/public/images/pokemon/variant/748.json +++ b/public/images/pokemon/variant/748.json @@ -1,7 +1,6 @@ { "1": { "943732": "490a3c", - "101010": "101010", "f28c4f": "a21f90", "e25025": "91138c", "6f97c4": "be583d", @@ -9,7 +8,6 @@ "93d1d7": "df7b52", "711a6a": "81463e", "d76fa5": "edd5ca", - "171539": "171539", "3a3f6d": "462952", "525898": "6c3776", "b7429a": "d29784", @@ -18,7 +16,6 @@ }, "2": { "943732": "c30e49", - "101010": "101010", "f28c4f": "ff3f5a", "e25025": "e12350", "6f97c4": "359d5d", diff --git a/public/images/pokemon/variant/752.json b/public/images/pokemon/variant/752.json index 448e2c5dbf5..551478e1bd9 100644 --- a/public/images/pokemon/variant/752.json +++ b/public/images/pokemon/variant/752.json @@ -3,8 +3,6 @@ "426b84": "7c3b51", "b7d7e6": "ffc8d1", "81afc9": "d187a0", - "fdfdfd": "fdfdfd", - "101010": "101010", "69670e": "3a112f", "9bad34": "4e1f42", "cedf42": "673252", @@ -21,7 +19,6 @@ "b7d7e6": "dce7ee", "81afc9": "a7a2bc", "fdfdfd": "f3fbff", - "101010": "101010", "69670e": "263756", "9bad34": "4980ac", "cedf42": "72add9", diff --git a/public/images/pokemon/variant/753.json b/public/images/pokemon/variant/753.json index 78eaa04fb78..d6ffc97c2da 100644 --- a/public/images/pokemon/variant/753.json +++ b/public/images/pokemon/variant/753.json @@ -3,7 +3,6 @@ "234028": "2e1643", "468050": "3e2253", "5ba668": "4e2c62", - "101010": "101010", "315945": "0e2616", "69bf94": "27452c", "549977": "1b3822", @@ -19,7 +18,6 @@ "234028": "812255", "468050": "ad3a87", "5ba668": "ce54b0", - "101010": "101010", "315945": "441342", "69bf94": "6e3472", "549977": "5a215a", diff --git a/public/images/pokemon/variant/754.json b/public/images/pokemon/variant/754.json index c8fcf792f01..07ba33a140a 100644 --- a/public/images/pokemon/variant/754.json +++ b/public/images/pokemon/variant/754.json @@ -6,7 +6,6 @@ "315945": "122a1a", "d98d9a": "c95623", "69bf94": "314e36", - "101010": "101010", "cc5266": "ac351f", "404040": "3c1717", "bfbfbf": "c9d6b7", @@ -20,7 +19,6 @@ "315945": "c940c4", "d98d9a": "2944a2", "69bf94": "f881ff", - "101010": "101010", "cc5266": "343381", "404040": "0c0a3f", "bfbfbf": "feccff", diff --git a/public/images/pokemon/variant/755.json b/public/images/pokemon/variant/755.json index 19c8b36ac41..05d00a042a9 100644 --- a/public/images/pokemon/variant/755.json +++ b/public/images/pokemon/variant/755.json @@ -3,7 +3,6 @@ "7a3f7a": "451233", "f1b6c8": "e76d5b", "e07c8d": "d64742", - "101010": "101010", "b591c4": "803a5c", "9d70b1": "5c2445", "6f80a8": "8c3338", @@ -18,7 +17,6 @@ "7a3f7a": "1d225e", "f1b6c8": "b0ffe1", "e07c8d": "7ae7c9", - "101010": "101010", "b591c4": "3a4b75", "9d70b1": "2c336b", "6f80a8": "179b8f", diff --git a/public/images/pokemon/variant/756.json b/public/images/pokemon/variant/756.json index 22e94d25718..e04f4c7b624 100644 --- a/public/images/pokemon/variant/756.json +++ b/public/images/pokemon/variant/756.json @@ -4,7 +4,6 @@ "b591c4": "e76d5b", "97b371": "866eaf", "cbd59f": "e5aff3", - "101010": "101010", "9867ad": "d64742", "764b67": "451233", "d08aab": "4e1f3b", diff --git a/public/images/pokemon/variant/761.json b/public/images/pokemon/variant/761.json index 2760b472e6a..48e6f8960df 100644 --- a/public/images/pokemon/variant/761.json +++ b/public/images/pokemon/variant/761.json @@ -3,20 +3,15 @@ "476629": "215e59", "6b993d": "398793", "8fcc52": "70d2e1", - "101010": "101010", "80334d": "251936", "b3476b": "7e5cdb", "e55c8a": "9f86e4", - "f8f8f8": "f8f8f8", - "ffe14c": "7e5cdb", - "737373": "737373", - "bfbfbf": "bfbfbf" + "ffe14c": "7e5cdb" }, "2": { "476629": "3e0a11", "6b993d": "5a0a16", "8fcc52": "86232e", - "101010": "101010", "80334d": "0f0f0f", "b3476b": "254536", "e55c8a": "2c574a", diff --git a/public/images/pokemon/variant/762.json b/public/images/pokemon/variant/762.json index a5662084e60..5eeac0d1de3 100644 --- a/public/images/pokemon/variant/762.json +++ b/public/images/pokemon/variant/762.json @@ -1,15 +1,10 @@ { "1": { "446328": "215e59", - "0f0f0f": "0f0f0f", "96c853": "70d2e1", "659344": "398793", "ebe130": "e66556", - "c7b8c4": "c7b8c4", - "72585f": "72585f", "ce466b": "a787ff", - "fdfdfd": "fdfdfd", - "fcfcfc": "fcfcfc", "962354": "45366e", "f26284": "7e5cdb", "6a1533": "251936", @@ -17,7 +12,6 @@ }, "2": { "446328": "3e0a11", - "0f0f0f": "0f0f0f", "96c853": "86232e", "659344": "5a0a16", "ebe130": "5c0505", @@ -25,7 +19,6 @@ "72585f": "574348", "ce466b": "124e3c", "fdfdfd": "e4c59e", - "fcfcfc": "fcfcfc", "962354": "162d25", "f26284": "2c574a", "6a1533": "0f0f0f", diff --git a/public/images/pokemon/variant/763.json b/public/images/pokemon/variant/763.json index e7d4566e507..501801f888d 100644 --- a/public/images/pokemon/variant/763.json +++ b/public/images/pokemon/variant/763.json @@ -9,12 +9,7 @@ "c5ae14": "af3e31", "96c853": "70d2e1", "659344": "398793", - "0f0f0f": "0f0f0f", - "fdfdfd": "fdfdfd", - "c7b8c4": "c7b8c4", - "ce466b": "7e5cdb", - "fcfcfc": "fcfcfc", - "72585f": "72585f" + "ce466b": "7e5cdb" }, "2": { "6a1533": "000000", @@ -26,11 +21,8 @@ "c5ae14": "391717", "96c853": "86232e", "659344": "5a0a16", - "0f0f0f": "0f0f0f", "fdfdfd": "e4c59e", "c7b8c4": "af8260", - "ce466b": "124e3c", - "fcfcfc": "fcfcfc", - "72585f": "72585f" + "ce466b": "124e3c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/767.json b/public/images/pokemon/variant/767.json index 5ece1ca679f..84114ed68e0 100644 --- a/public/images/pokemon/variant/767.json +++ b/public/images/pokemon/variant/767.json @@ -3,26 +3,22 @@ "46334f": "844008", "a65e97": "e8a92a", "713e70": "c86910", - "080808": "080808", "3f5252": "202733", "bed3cf": "6e6d6d", "5c7877": "293141", "867b73": "ecd42a", "8a9f9e": "494950", - "ede650": "7798b8", - "f7f7f7": "f7f7f7" + "ede650": "7798b8" }, "2": { "46334f": "091b52", "a65e97": "2849ac", "713e70": "1c306d", - "080808": "080808", "3f5252": "3d105f", "bed3cf": "844caf", "5c7877": "5722a6", "867b73": "8cdded", "8a9f9e": "452772", - "ede650": "d3f4fb", - "f7f7f7": "f7f7f7" + "ede650": "d3f4fb" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/768.json b/public/images/pokemon/variant/768.json index 1b150c04b37..d617f494ce7 100644 --- a/public/images/pokemon/variant/768.json +++ b/public/images/pokemon/variant/768.json @@ -2,7 +2,6 @@ "1": { "546b57": "202733", "c8e1cd": "6e6d6d", - "101010": "101010", "81b68e": "494950", "498f6c": "e7cd19", "842886": "c85710", @@ -17,16 +16,12 @@ "2": { "546b57": "091b52", "c8e1cd": "2849ac", - "101010": "101010", "81b68e": "1c306d", "498f6c": "dfb6f3", "842886": "5722a6", "cc5fcf": "8b51e1", "9a6982": "452772", - "5c635e": "5c635e", "bd95a8": "844caf", - "7a4952": "3d105f", - "2f3330": "2f3330", - "404843": "404843" + "7a4952": "3d105f" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/77.json b/public/images/pokemon/variant/77.json index e988ee2ef1b..7f2515b589d 100644 --- a/public/images/pokemon/variant/77.json +++ b/public/images/pokemon/variant/77.json @@ -7,10 +7,8 @@ "8c5231": "65597f", "733131": "2b2333", "ffefce": "ffffff", - "000000": "000000", "e6ce8c": "cecee5", "c59c6b": "948eb2", - "ffffff": "ffffff", "424a84": "191933", "737ba5": "312c49", "c5c5d6": "514766" @@ -23,10 +21,8 @@ "8c5231": "090b16", "733131": "03060c", "ffefce": "514766", - "000000": "000000", "e6ce8c": "312c49", "c59c6b": "191933", - "ffffff": "ffffff", "424a84": "59497a", "737ba5": "857cb2", "c5c5d6": "b5b5e2" diff --git a/public/images/pokemon/variant/771.json b/public/images/pokemon/variant/771.json index 6540f79d3dd..d80e7770f62 100644 --- a/public/images/pokemon/variant/771.json +++ b/public/images/pokemon/variant/771.json @@ -3,26 +3,22 @@ "73223d": "570a00", "992e52": "c95340", "d94174": "de884b", - "101010": "101010", "404040": "731b33", "737373": "b5284a", "262626": "4a1a30", "595959": "bd5e49", "f8f8f8": "dec890", - "1a1a1a": "1a1a1a", "bfbfbf": "e07f47" }, "2": { "73223d": "b94114", "992e52": "db7b43", "d94174": "ead059", - "101010": "101010", "404040": "dacece", "737373": "f5ede4", "262626": "b8a197", "595959": "1c1c2d", "f8f8f8": "4d4d65", - "1a1a1a": "1a1a1a", "bfbfbf": "383850" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/772.json b/public/images/pokemon/variant/772.json index 38afba110bf..1097be00976 100644 --- a/public/images/pokemon/variant/772.json +++ b/public/images/pokemon/variant/772.json @@ -4,7 +4,6 @@ "92a6a9": "889db1", "642515": "7e4f36", "6b777e": "526085", - "080808": "080808", "c55e3a": "eed8a1", "934031": "c8976c", "c0cecf": "bdc4e5", @@ -27,7 +26,6 @@ "92a6a9": "65657c", "642515": "444961", "6b777e": "3b3b51", - "080808": "080808", "c55e3a": "c1cfd8", "934031": "7f94b1", "c0cecf": "dbd8e8", diff --git a/public/images/pokemon/variant/773.json b/public/images/pokemon/variant/773.json index b64796b9bf9..15805bf76ec 100644 --- a/public/images/pokemon/variant/773.json +++ b/public/images/pokemon/variant/773.json @@ -9,7 +9,6 @@ "e3e6ec": "bdd1e5", "3f3b50": "1e172a", "aba7bc": "493d55", - "080808": "080808", "e64f5e": "f1944a", "483c39": "3a2d53", "79615e": "504a75", @@ -17,7 +16,6 @@ "e9eaf8": "e7ebed", "0073bf": "7a4949", "5399df": "b59489", - "fffef5": "fffef5", "251845": "753c32", "9618e0": "dc9c4d", "125d4b": "ce7f3f", @@ -31,9 +29,7 @@ "565969": "0f0f1b", "bcbbc5": "242433", "e3e6ec": "444455", - "3f3b50": "3f3b50", "aba7bc": "dbd8e8", - "080808": "080808", "e64f5e": "98ce58", "483c39": "778894", "79615e": "d6d4d4", @@ -41,7 +37,6 @@ "e9eaf8": "eef4f8", "0073bf": "6a6c75", "5399df": "92949e", - "fffef5": "fffef5", "251845": "425735", "9618e0": "ade265", "125d4b": "686981", diff --git a/public/images/pokemon/variant/776.json b/public/images/pokemon/variant/776.json index 295f413292e..7847d29e15f 100644 --- a/public/images/pokemon/variant/776.json +++ b/public/images/pokemon/variant/776.json @@ -1,7 +1,6 @@ { "1": { "281715": "39221d", - "080808": "080808", "71171a": "2c0f2d", "6b473c": "f4eba2", "e74545": "4f3d66", @@ -12,12 +11,10 @@ "ccccad": "b4b8c8", "969678": "887c97", "3c2b24": "d5966f", - "fdfdfd": "fdfdfd", "9b6500": "276da5" }, "2": { "281715": "0a413b", - "080808": "080808", "71171a": "be8a7a", "6b473c": "caee67", "e74545": "faeecd", @@ -28,7 +25,6 @@ "ccccad": "adc4e9", "969678": "7983c1", "3c2b24": "61b551", - "fdfdfd": "fdfdfd", "9b6500": "341a3c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/777.json b/public/images/pokemon/variant/777.json index f434d0446ea..549b0f6ba5c 100644 --- a/public/images/pokemon/variant/777.json +++ b/public/images/pokemon/variant/777.json @@ -1,21 +1,17 @@ { "1": { - "101010": "101010", "ffea80": "dec2f0", "ccb852": "ac8fbb", "4d4d4d": "362952", "b3b3b3": "8e71cd", "808080": "645393", "595959": "444147", - "f8f8f8": "f8f8f8", "8c8c8c": "99979b", - "fbfbfb": "fbfbfb", "bfbfbf": "d0dadb", "977d63": "d263b0", "73593f": "ae428a" }, "2": { - "101010": "101010", "ffea80": "d65d3c", "ccb852": "7b3c26", "4d4d4d": "294127", @@ -24,7 +20,6 @@ "595959": "342a20", "f8f8f8": "e5b38c", "8c8c8c": "634c41", - "fbfbfb": "fbfbfb", "bfbfbf": "b27f64", "977d63": "724b39", "73593f": "47240f" diff --git a/public/images/pokemon/variant/778-disguised.json b/public/images/pokemon/variant/778-disguised.json index 3fb6d0c98c2..3b8eca6ee7f 100644 --- a/public/images/pokemon/variant/778-disguised.json +++ b/public/images/pokemon/variant/778-disguised.json @@ -31,4 +31,4 @@ "805933": "6d80a4", "3c3838": "ff766e" } -} +} \ No newline at end of file diff --git a/public/images/pokemon/variant/779.json b/public/images/pokemon/variant/779.json index a550ffadda3..687adbe3000 100644 --- a/public/images/pokemon/variant/779.json +++ b/public/images/pokemon/variant/779.json @@ -3,7 +3,6 @@ "58295f": "a52121", "834589": "c62c2c", "b75eb7": "f65656", - "101010": "101010", "de5c8a": "602b7a", "97354e": "2e0c3f", "ef87b5": "84539d", @@ -11,15 +10,12 @@ "93d3e1": "caefff", "5e9fc4": "94c5da", "cfae3f": "d65e5e", - "efe85f": "faa28c", - "fdfdfd": "fdfdfd", - "969696": "969696" + "efe85f": "faa28c" }, "2": { "58295f": "4545c4", "834589": "6666e2", "b75eb7": "8585ff", - "101010": "101010", "de5c8a": "dca032", "97354e": "935b3b", "ef87b5": "ffd166", @@ -27,8 +23,6 @@ "93d3e1": "eeeeff", "5e9fc4": "afafe1", "cfae3f": "2d2c43", - "efe85f": "454457", - "fdfdfd": "fdfdfd", - "969696": "969696" + "efe85f": "454457" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/78.json b/public/images/pokemon/variant/78.json index 610f15ed2df..80e167ed347 100644 --- a/public/images/pokemon/variant/78.json +++ b/public/images/pokemon/variant/78.json @@ -9,9 +9,7 @@ "de1010": "995b3d", "c5946b": "948eb2", "efc58c": "cecee5", - "000000": "000000", "c5c5c5": "514766", - "ffffff": "ffffff", "424a52": "191933", "737b84": "312c49" }, @@ -25,9 +23,7 @@ "de1010": "660011", "c5946b": "191933", "efc58c": "312c49", - "000000": "000000", "c5c5c5": "b5b5e2", - "ffffff": "ffffff", "424a52": "59497a", "737b84": "857cb2" } diff --git a/public/images/pokemon/variant/789.json b/public/images/pokemon/variant/789.json index 79e0e78b047..6ae3e541843 100644 --- a/public/images/pokemon/variant/789.json +++ b/public/images/pokemon/variant/789.json @@ -3,16 +3,8 @@ "4e5cc7": "6a12dc", "169fda": "9255f2", "34eef8": "db34f8", - "fdfdfd": "fdfdfd", "422d66": "490f2c", - "101010": "101010", "503896": "64173e", - "9d5f00": "9d5f00", - "f8f229": "f8f229", - "283937": "283937", - "ba953e": "ba953e", - "1484de": "1484de", - "34c3fa": "34c3fa", "8c49a9": "dc48a7", "e2629f": "f77247" }, @@ -20,9 +12,7 @@ "4e5cc7": "f6a42d", "169fda": "ffdf49", "34eef8": "fff695", - "fdfdfd": "fdfdfd", "422d66": "830000", - "101010": "101010", "503896": "eb5b2a", "9d5f00": "6a738f", "f8f229": "e5efff", @@ -37,9 +27,7 @@ "4e5cc7": "3dc7e0", "169fda": "71ffd8", "34eef8": "c9ffe2", - "fdfdfd": "fdfdfd", "422d66": "030038", - "101010": "101010", "503896": "007ecc", "9d5f00": "61061f", "f8f229": "c22741", diff --git a/public/images/pokemon/variant/79.json b/public/images/pokemon/variant/79.json index 7c9fa7a0ba8..e737328a200 100644 --- a/public/images/pokemon/variant/79.json +++ b/public/images/pokemon/variant/79.json @@ -1,9 +1,5 @@ { "0": { - "6b6363": "6b6363", - "101010": "101010", - "d6cece": "d6cece", - "ffffff": "ffffff", "ffa5a5": "cebdff", "de637b": "846bbd", "ff8494": "ad94ff", @@ -11,14 +7,9 @@ "7b2131": "52397b", "dea563": "deb55a", "8c5a19": "8c6b10", - "efc58c": "efc58c", "ffe6b5": "fff7b5" }, "1": { - "6b6363": "6b6363", - "101010": "101010", - "d6cece": "d6cece", - "ffffff": "ffffff", "ffa5a5": "ad7459", "de637b": "5b3332", "ff8494": "885345", @@ -30,10 +21,6 @@ "ffe6b5": "e0b69d" }, "2": { - "6b6363": "6b6363", - "101010": "101010", - "d6cece": "d6cece", - "ffffff": "ffffff", "ffa5a5": "ffeb9b", "de637b": "dd8f47", "ff8494": "eebd6a", diff --git a/public/images/pokemon/variant/790.json b/public/images/pokemon/variant/790.json index cbc8fda0072..6b3d3f079da 100644 --- a/public/images/pokemon/variant/790.json +++ b/public/images/pokemon/variant/790.json @@ -1,22 +1,16 @@ { "1": { - "101010": "101010", "8a5911": "545d9e", "c87522": "7b89c4", "faf54e": "e5efff", "e8a61e": "aebde2", - "fdfdfd": "fdfdfd", "1d3e89": "a20b02", "169fda": "ffdf49", "764394": "ff4079", "2c5fab": "eb5b2a", - "1e232b": "1e232b", - "17a6e3": "17a6e3", - "1f4294": "1f4294", "e2629f": "f6a42d" }, "2": { - "101010": "101010", "8a5911": "730627", "c87522": "890425", "faf54e": "d4314c", @@ -26,9 +20,6 @@ "169fda": "71ffd8", "764394": "7e13bf", "2c5fab": "3dc7e0", - "1e232b": "1e232b", - "17a6e3": "17a6e3", - "1f4294": "1f4294", "e2629f": "3dc7e0" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/791-radiant-sun.json b/public/images/pokemon/variant/791-radiant-sun.json index dd95b0e1a09..675c9dfd17b 100644 --- a/public/images/pokemon/variant/791-radiant-sun.json +++ b/public/images/pokemon/variant/791-radiant-sun.json @@ -2,27 +2,23 @@ "1": { "aa8735": "c72453", "f9f190": "ff7899", - "151515": "151515", "dcb75f": "f35785", "c2c7c6": "da6e40", "52525a": "062139", "f8f8f8": "ffcf88", "1d2787": "810300", "5aacec": "4ba4ff", - "fefefe": "fefefe", "868e8d": "a5381c" }, "2": { "aa8735": "730627", "f9f190": "c22741", - "151515": "151515", "dcb75f": "890425", "c2c7c6": "322e6c", "52525a": "062139", "f8f8f8": "584193", "1d2787": "1a224a", "5aacec": "f3633f", - "fefefe": "fefefe", "868e8d": "0b1f45" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/791.json b/public/images/pokemon/variant/791.json index cc5d499152d..18b4742babd 100644 --- a/public/images/pokemon/variant/791.json +++ b/public/images/pokemon/variant/791.json @@ -1,7 +1,6 @@ { "1": { "91510b": "7a80ab", - "080808": "080808", "efe85a": "edf4ff", "ab1605": "b51140", "52525a": "4c0200", @@ -13,12 +12,10 @@ "5c5c65": "b72011", "868e8d": "a5381c", "0900a8": "810300", - "5aacec": "677dff", - "fefefe": "fefefe" + "5aacec": "677dff" }, "2": { "91510b": "5b021d", - "080808": "080808", "efe85a": "ae1a3d", "ab1605": "d36d00", "52525a": "062139", @@ -30,7 +27,6 @@ "5c5c65": "0b2b57", "868e8d": "0b1f45", "0900a8": "1a224a", - "5aacec": "d51d3c", - "fefefe": "fefefe" + "5aacec": "d51d3c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/792-full-moon.json b/public/images/pokemon/variant/792-full-moon.json index f5717506c7b..7efc0e30ccb 100644 --- a/public/images/pokemon/variant/792-full-moon.json +++ b/public/images/pokemon/variant/792-full-moon.json @@ -2,24 +2,18 @@ "1": { "aa8735": "624427", "f9f190": "e6ded2", - "151515": "151515", "59b3c6": "971283", "acebf0": "ff87d1", "dcb75f": "afa191", - "fffef2": "fffef2", "fefefe": "ffdda2", "85d0e0": "de37cf", "cbc6ce": "ffa255", "7b807e": "811500", - "240f62": "240f62", - "510d8e": "510d8e", - "fcfcfc": "fcfcfc", "ff268f": "5290ff" }, "2": { "aa8735": "6b0420", "f9f190": "c22741", - "151515": "151515", "59b3c6": "2460ac", "acebf0": "58cbe9", "dcb75f": "980f2a", @@ -28,9 +22,6 @@ "85d0e0": "3797d0", "cbc6ce": "e19096", "7b807e": "7e343d", - "240f62": "240f62", - "510d8e": "510d8e", - "fcfcfc": "fcfcfc", "ff268f": "ff26f0" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/792.json b/public/images/pokemon/variant/792.json index 3f1e077e0be..c8db5b2675a 100644 --- a/public/images/pokemon/variant/792.json +++ b/public/images/pokemon/variant/792.json @@ -2,7 +2,6 @@ "1": { "665d14": "675340", "e5da7f": "e6ded2", - "080808": "080808", "a69e5c": "afa191", "7b807e": "864110", "fefefe": "ffd386", @@ -10,26 +9,20 @@ "240f62": "60000c", "45348e": "bc1836", "bcb5c1": "d39143", - "fdfce8": "fdfce8", "510d8e": "53101c", - "fcfcfc": "fcfcfc", "ff268f": "5290ff", "73e6cd": "ff31e0" }, "2": { "665d14": "6b0420", "e5da7f": "c22741", - "080808": "080808", "a69e5c": "980f2a", "7b807e": "7e343d", "fefefe": "ffd1d1", "6046d8": "1550a1", - "240f62": "240f62", "45348e": "1a3186", "bcb5c1": "e19096", "fdfce8": "ff6d74", - "510d8e": "510d8e", - "fcfcfc": "fcfcfc", "ff268f": "ff26f0", "73e6cd": "58cbe9" } diff --git a/public/images/pokemon/variant/793.json b/public/images/pokemon/variant/793.json index 198e1081425..3408987b524 100644 --- a/public/images/pokemon/variant/793.json +++ b/public/images/pokemon/variant/793.json @@ -7,8 +7,7 @@ "308ebc": "1ecb76", "26507d": "109d6a", "6b868f": "47090d", - "53b0d9": "40ffcc", - "101010": "101010" + "53b0d9": "40ffcc" }, "2": { "adbec5": "5128c3", @@ -18,7 +17,6 @@ "308ebc": "24a7b0", "26507d": "2368b1", "6b868f": "120d6b", - "53b0d9": "6bebff", - "101010": "101010" + "53b0d9": "6bebff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/797.json b/public/images/pokemon/variant/797.json index 05e51ab62bd..3e41ffa9ef2 100644 --- a/public/images/pokemon/variant/797.json +++ b/public/images/pokemon/variant/797.json @@ -8,7 +8,6 @@ "82ada4": "506ee3", "bccfc4": "f2b97f", "b3e088": "ffc785", - "101010": "101010", "a3e2bb": "9db7f4", "53ca89": "f0f5f9", "193124": "09112e" @@ -22,7 +21,6 @@ "82ada4": "8b1933", "bccfc4": "242733", "b3e088": "232323", - "101010": "101010", "a3e2bb": "bd2f62", "53ca89": "bbf3ef", "193124": "330007" diff --git a/public/images/pokemon/variant/798.json b/public/images/pokemon/variant/798.json index 3e5c571addf..62561deeeae 100644 --- a/public/images/pokemon/variant/798.json +++ b/public/images/pokemon/variant/798.json @@ -4,7 +4,6 @@ "fdfdfd": "d8e169", "cfcfcf": "87ab39", "aeaeae": "588720", - "101010": "101010", "a86c1c": "07421f", "9b2c17": "2c180e", "ffd53a": "2c9435", @@ -20,7 +19,6 @@ "fdfdfd": "87d2da", "cfcfcf": "4a86b8", "aeaeae": "305895", - "101010": "101010", "a86c1c": "5a2036", "9b2c17": "8a482d", "ffd53a": "cc7d4f", diff --git a/public/images/pokemon/variant/80-mega.json b/public/images/pokemon/variant/80-mega.json index 9bf85259157..dbc6bddc733 100644 --- a/public/images/pokemon/variant/80-mega.json +++ b/public/images/pokemon/variant/80-mega.json @@ -1,12 +1,9 @@ { "1": { - "181818": "181818", "b55565": "3f2729", "e66a7b": "5b3332", "ff9494": "885345", "ffbdac": "ad7459", - "deded5": "deded5", - "f8f8f8": "f8f8f8", "835a20": "9f675f", "cda462": "b97565", "ffeeb4": "e0b69d", @@ -16,13 +13,10 @@ "8b9494": "bf9562" }, "2": { - "181818": "181818", "b55565": "c08746", "e66a7b": "de9048", "ff9494": "eebd6a", "ffbdac": "ffea9a", - "deded5": "deded5", - "f8f8f8": "f8f8f8", "835a20": "69080f", "cda462": "8f2622", "ffeeb4": "d16b34", diff --git a/public/images/pokemon/variant/80.json b/public/images/pokemon/variant/80.json index 83203a8cc62..17a3c0627c6 100644 --- a/public/images/pokemon/variant/80.json +++ b/public/images/pokemon/variant/80.json @@ -3,10 +3,7 @@ "7b3131": "3f2729", "e66b7b": "5c3433", "ff9494": "895446", - "191919": "191919", "ffbdad": "ae755a", - "deded6": "deded6", - "ffffff": "ffffff", "52525a": "8b5d37", "845a21": "9f675f", "8c9494": "bf9562", @@ -20,10 +17,7 @@ "7b3131": "a54729", "e66b7b": "dd8f47", "ff9494": "edbc69", - "191919": "191919", "ffbdad": "ffeb9b", - "deded6": "deded6", - "ffffff": "ffffff", "52525a": "192b32", "845a21": "69080f", "8c9494": "2a4947", diff --git a/public/images/pokemon/variant/800-dawn-wings.json b/public/images/pokemon/variant/800-dawn-wings.json index b54a0e54903..1433f782e15 100644 --- a/public/images/pokemon/variant/800-dawn-wings.json +++ b/public/images/pokemon/variant/800-dawn-wings.json @@ -2,7 +2,6 @@ "1": { "305fb6": "624427", "82c5f7": "e6ded2", - "080808": "080808", "6197e9": "afa191", "7b807e": "86102d", "fefefe": "ffd386", @@ -19,7 +18,6 @@ "2": { "305fb6": "3b0015", "82c5f7": "970b22", - "080808": "080808", "6197e9": "5b0318", "7b807e": "041243", "fefefe": "ffd1d1", diff --git a/public/images/pokemon/variant/800-dusk-mane.json b/public/images/pokemon/variant/800-dusk-mane.json index fe21d5d0b98..80721becae1 100644 --- a/public/images/pokemon/variant/800-dusk-mane.json +++ b/public/images/pokemon/variant/800-dusk-mane.json @@ -1,7 +1,6 @@ { "1": { "1b2021": "3a001c", - "080808": "080808", "424a50": "890425", "2b3233": "5f0021", "ae6200": "7a80ab", @@ -13,12 +12,10 @@ "768188": "c8245d", "fd2b2b": "35d5e8", "18f013": "9d63ff", - "53f2f2": "453ef2", - "fdfcf8": "fdfcf8" + "53f2f2": "453ef2" }, "2": { "1b2021": "240842", - "080808": "080808", "424a50": "602483", "2b3233": "3e135f", "ae6200": "5b021d", @@ -30,7 +27,6 @@ "768188": "b13dc8", "fd2b2b": "ffcb49", "18f013": "e73c37", - "53f2f2": "fd852b", - "fdfcf8": "fdfcf8" + "53f2f2": "fd852b" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/800-ultra.json b/public/images/pokemon/variant/800-ultra.json index cf4a0d16f07..0bdc4f1d6f0 100644 --- a/public/images/pokemon/variant/800-ultra.json +++ b/public/images/pokemon/variant/800-ultra.json @@ -8,10 +8,7 @@ "fefac2": "ff7e75", "fcf167": "ee2033", "dcb92c": "bc0125", - "8e6924": "770031", - "151515": "151515", - "fd2b2b": "fd2b2b", - "00c2d2": "00c2d2" + "8e6924": "770031" }, "2": { "a08f6d": "e552ec", @@ -23,8 +20,6 @@ "fcf167": "ff49e7", "dcb92c": "d10cc7", "8e6924": "510059", - "151515": "151515", - "fd2b2b": "900090", - "00c2d2": "00c2d2" + "fd2b2b": "900090" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/800.json b/public/images/pokemon/variant/800.json index 0c0baf8d973..7f996fdbf81 100644 --- a/public/images/pokemon/variant/800.json +++ b/public/images/pokemon/variant/800.json @@ -4,11 +4,9 @@ "424a50": "890425", "2b3233": "5f0021", "768188": "c8245d", - "080808": "080808", "5fcfbe": "453ef2", "fd2b2b": "35d5e8", "ec925b": "9d63ff", - "0a5ec5": "0a5ec5", "9965c9": "6219a8", "18f013": "69fff0", "b5bbbf": "a266eb", @@ -19,7 +17,6 @@ "424a50": "602483", "2b3233": "3e135f", "768188": "b13dc8", - "080808": "080808", "5fcfbe": "b71334", "fd2b2b": "fd2bc1", "ec925b": "e73c37", diff --git a/public/images/pokemon/variant/802.json b/public/images/pokemon/variant/802.json index 95a92d8babc..489a2ede00b 100644 --- a/public/images/pokemon/variant/802.json +++ b/public/images/pokemon/variant/802.json @@ -3,19 +3,14 @@ "2c3e30": "111c12", "6a806d": "526555", "536155": "29352b", - "101010": "101010", "2d3137": "084434", "747778": "76bc8f", - "4e5356": "3a7e5d", - "f8f592": "f8f592", - "ff4506": "ff4506", - "f2a455": "f2a455" + "4e5356": "3a7e5d" }, "1": { "2c3e30": "7a758d", "6a806d": "cbc9e8", "536155": "b5b1ce", - "101010": "101010", "2d3137": "17145e", "747778": "515aad", "4e5356": "2f3079", @@ -27,7 +22,6 @@ "2c3e30": "508294", "6a806d": "a7eaee", "536155": "82b7c3", - "101010": "101010", "2d3137": "5a0423", "747778": "ce3e63", "4e5356": "97123b", diff --git a/public/images/pokemon/variant/803.json b/public/images/pokemon/variant/803.json index 1f612916938..2fa484408e6 100644 --- a/public/images/pokemon/variant/803.json +++ b/public/images/pokemon/variant/803.json @@ -2,7 +2,6 @@ "1": { "78757f": "449e93", "ccc0d8": "e3ffec", - "101010": "101010", "98295e": "27579e", "ff6ccc": "54cbdc", "d9338e": "3492b9", @@ -17,7 +16,6 @@ "2": { "78757f": "cd9b85", "ccc0d8": "ffefe0", - "101010": "101010", "98295e": "a12f63", "ff6ccc": "ff778d", "d9338e": "d6487a", diff --git a/public/images/pokemon/variant/804.json b/public/images/pokemon/variant/804.json index 53abed974c1..01257b89642 100644 --- a/public/images/pokemon/variant/804.json +++ b/public/images/pokemon/variant/804.json @@ -7,7 +7,6 @@ "ff6cd3": "e88354", "db3e94": "c74736", "793fbe": "284173", - "101010": "101010", "6d656d": "2b5d67", "aaeaff": "ffdfa3", "a896a9": "8edfd5", @@ -23,7 +22,6 @@ "ff6cd3": "fff8cc", "db3e94": "dcbb94", "793fbe": "095654", - "101010": "101010", "6d656d": "690940", "aaeaff": "475269", "a896a9": "96234e", diff --git a/public/images/pokemon/variant/808.json b/public/images/pokemon/variant/808.json index f21c7b2ea50..70d7dd21a53 100644 --- a/public/images/pokemon/variant/808.json +++ b/public/images/pokemon/variant/808.json @@ -4,9 +4,7 @@ "ab732b": "ce5a6f", "ffda45": "ffbeae", "fbf28d": "fff1d1", - "f9f9f9": "f9f9f9", "814f23": "85374d", - "101010": "101010", "59544e": "38585b", "3d3534": "2c4048", "67675f": "426e73", @@ -21,16 +19,12 @@ "ab732b": "2d2931", "ffda45": "9b6e98", "fbf28d": "bf99bc", - "f9f9f9": "f9f9f9", "814f23": "101010", - "101010": "101010", "59544e": "9e002e", "3d3534": "780000", "67675f": "ba2b41", "dcdcda": "ffbe6e", "b1b5a6": "f49769", - "8a8d7e": "d66352", - "741012": "741012", - "c2292e": "c2292e" + "8a8d7e": "d66352" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/809-gigantamax.json b/public/images/pokemon/variant/809-gigantamax.json index e008cbcd6e3..543e4007238 100644 --- a/public/images/pokemon/variant/809-gigantamax.json +++ b/public/images/pokemon/variant/809-gigantamax.json @@ -4,7 +4,6 @@ "8a8d7e": "6a8f97", "e8e8e8": "dff7f7", "dcdcda": "c2effc", - "f9f9f9": "f9f9f9", "59544e": "38585b", "211d1d": "232a2b", "ab732b": "ce5a6f", @@ -13,7 +12,6 @@ "67675f": "426e73", "3d3534": "2c4048", "e46d8b": "ffce6b", - "101010": "101010", "c2292e": "ffce6b" }, "2": { @@ -21,7 +19,6 @@ "8a8d7e": "d66352", "e8e8e8": "ffde6c", "dcdcda": "ffbe6e", - "f9f9f9": "f9f9f9", "59544e": "9e002e", "211d1d": "570000", "ab732b": "2d2931", @@ -29,8 +26,6 @@ "dea220": "64486f", "67675f": "ba2b41", "3d3534": "780000", - "e46d8b": "c2292e", - "101010": "101010", - "c2292e": "c2292e" + "e46d8b": "c2292e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/809.json b/public/images/pokemon/variant/809.json index a30297cdb08..ee99fc95991 100644 --- a/public/images/pokemon/variant/809.json +++ b/public/images/pokemon/variant/809.json @@ -10,10 +10,8 @@ "814f23": "85374d", "67675f": "426e73", "ffda45": "ffbeae", - "101010": "101010", "dcdcda": "c2effc", - "b1b5a6": "98d6f0", - "f9f9f9": "f9f9f9" + "b1b5a6": "98d6f0" }, "2": { "59544e": "9e002e", @@ -26,9 +24,7 @@ "814f23": "101010", "67675f": "ba2b41", "ffda45": "9b6e98", - "101010": "101010", "dcdcda": "ffbe6e", - "b1b5a6": "f49769", - "f9f9f9": "f9f9f9" + "b1b5a6": "f49769" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/81.json b/public/images/pokemon/variant/81.json index 9bbbe4471cd..37cb315af7a 100644 --- a/public/images/pokemon/variant/81.json +++ b/public/images/pokemon/variant/81.json @@ -6,8 +6,6 @@ "d6d6d6": "ffc4b8", "524a4a": "90495b", "2984ad": "8fb9cc", - "ffffff": "ffffff", - "101010": "101010", "ef1900": "e67468", "5a8463": "c36c77", "8cb5a5": "f99596", @@ -22,7 +20,6 @@ "524a4a": "8c500b", "2984ad": "a7dcaa", "ffffff": "fffb93", - "101010": "101010", "ef1900": "e6a845", "5a8463": "a65410", "8cb5a5": "bf7826", diff --git a/public/images/pokemon/variant/816.json b/public/images/pokemon/variant/816.json index 32174bf545b..55573466e55 100644 --- a/public/images/pokemon/variant/816.json +++ b/public/images/pokemon/variant/816.json @@ -9,11 +9,9 @@ "add7e7": "e6828e", "718b93": "a7664c", "5091c0": "b5464b", - "fbfbfb": "fbfbfb", "bdc6ca": "d9c5bc", "d2e7ec": "eecaa2", - "9fbac1": "e19b78", - "101010": "101010" + "9fbac1": "e19b78" }, "2": { "1f2d63": "6e1a4c", @@ -25,10 +23,8 @@ "add7e7": "fffbec", "718b93": "933644", "5091c0": "dea26c", - "fbfbfb": "fbfbfb", "bdc6ca": "c5e4ea", "d2e7ec": "ec8b48", - "9fbac1": "d5543c", - "101010": "101010" + "9fbac1": "d5543c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/817.json b/public/images/pokemon/variant/817.json index f6650317915..d148636069b 100644 --- a/public/images/pokemon/variant/817.json +++ b/public/images/pokemon/variant/817.json @@ -9,9 +9,7 @@ "70cce0": "eb8577", "31b5d0": "cf5b5d", "6ba01b": "a36d5d", - "101010": "101010", "ccc7cd": "c7c1bd", - "fefefe": "fefefe", "3d6424": "83403e", "8cd222": "d99f8d" }, @@ -25,9 +23,7 @@ "70cce0": "ffe5a3", "31b5d0": "fcbe6d", "6ba01b": "ba2c22", - "101010": "101010", "ccc7cd": "becee1", - "fefefe": "fefefe", "3d6424": "731317", "8cd222": "d85633" } diff --git a/public/images/pokemon/variant/818-gigantamax.json b/public/images/pokemon/variant/818-gigantamax.json index 82fc117bf7b..4d9197e5ac5 100644 --- a/public/images/pokemon/variant/818-gigantamax.json +++ b/public/images/pokemon/variant/818-gigantamax.json @@ -7,15 +7,10 @@ "01599a": "0ea6a8", "9cd2e2": "107ac0", "549bc3": "0060a4", - "101010": "101010", - "ee3e5c": "ee3e5c", "31302f": "989dac", "646565": "f7fbfc", "4a4a4d": "c4ccd4", - "5e9bc3": "0a60a4", - "b0faff": "b0faff", - "5cdada": "5cdada", - "fdfdfd": "fdfdfd" + "5e9bc3": "0a60a4" }, "1": { "003e6a": "4c1819", @@ -25,7 +20,6 @@ "01599a": "9c2734", "9cd2e2": "e1926f", "549bc3": "a45e4a", - "101010": "101010", "ee3e5c": "5885a2", "31302f": "251e1c", "646565": "4c4643", @@ -43,7 +37,6 @@ "01599a": "d8b284", "9cd2e2": "ffcd57", "549bc3": "e38544", - "101010": "101010", "ee3e5c": "5885a2", "31302f": "571342", "646565": "be3a7d", diff --git a/public/images/pokemon/variant/818.json b/public/images/pokemon/variant/818.json index d4563f39dd6..804dbaa3a6a 100644 --- a/public/images/pokemon/variant/818.json +++ b/public/images/pokemon/variant/818.json @@ -8,9 +8,7 @@ "01599a": "9c2734", "549bc3": "a55846", "9cd2e2": "e1926f", - "fdfdfd": "fdfdfd", "e3a32b": "5885a2", - "101010": "101010", "31302f": "251e1c", "646565": "4c4643", "4a4a4d": "342b2a", @@ -25,9 +23,7 @@ "01599a": "d8b284", "549bc3": "e38544", "9cd2e2": "ffcd57", - "fdfdfd": "fdfdfd", "e3a32b": "a13047", - "101010": "101010", "31302f": "571342", "646565": "be3a7d", "4a4a4d": "771b54", diff --git a/public/images/pokemon/variant/82.json b/public/images/pokemon/variant/82.json index 6af03f7f5b2..795e1f91d2d 100644 --- a/public/images/pokemon/variant/82.json +++ b/public/images/pokemon/variant/82.json @@ -2,10 +2,8 @@ "1": { "3a3131": "612e40", "d6d6d6": "ffc4b8", - "ffffff": "ffffff", "8c8c8c": "c36c77", "524a4a": "90495b", - "101010": "101010", "b5b5b5": "f99596", "ef1900": "e67468", "ff8c4a": "ffc4b8", @@ -22,7 +20,6 @@ "ffffff": "fffb93", "8c8c8c": "8c500b", "524a4a": "662e00", - "101010": "101010", "b5b5b5": "b27a20", "ef1900": "a65410", "ff8c4a": "e6a845", diff --git a/public/images/pokemon/variant/821.json b/public/images/pokemon/variant/821.json index 2ad0feb8b11..e41457b53e3 100644 --- a/public/images/pokemon/variant/821.json +++ b/public/images/pokemon/variant/821.json @@ -7,11 +7,8 @@ "403524": "845195", "6d1b29": "5722a6", "344172": "ad6f83", - "f4f4f4": "f4f4f4", - "aeaeae": "aeaeae", "e21d22": "8b51e1", "979b9e": "57445a", - "080808": "080808", "6c5d64": "2e262f", "ac9534": "f4a0b9", "e9e356": "ffdeeb" @@ -24,11 +21,8 @@ "403524": "be8410", "6d1b29": "5a0015", "344172": "b95212", - "f4f4f4": "f4f4f4", - "aeaeae": "aeaeae", "e21d22": "8f0021", "979b9e": "743419", - "080808": "080808", "6c5d64": "541705", "ac9534": "edd472", "e9e356": "fff2c0" diff --git a/public/images/pokemon/variant/822.json b/public/images/pokemon/variant/822.json index 7ff524139bf..21b08947fa3 100644 --- a/public/images/pokemon/variant/822.json +++ b/public/images/pokemon/variant/822.json @@ -6,10 +6,8 @@ "426eb2": "ffdeeb", "2f4577": "f4a0b9", "403524": "ad6f83", - "080808": "080808", "6d1b29": "5722a6", "e21d22": "8b51e1", - "f4f4f4": "f4f4f4", "95a1b6": "57445a", "444f59": "25282d", "f85947": "8b51e1", @@ -22,10 +20,8 @@ "426eb2": "edd472", "2f4577": "eaae36", "403524": "b95212", - "080808": "080808", "6d1b29": "5a0015", "e21d22": "8f0021", - "f4f4f4": "f4f4f4", "95a1b6": "743419", "444f59": "541705", "f85947": "8f0021", diff --git a/public/images/pokemon/variant/823.json b/public/images/pokemon/variant/823.json index 4877b9b4ab9..53532f02db8 100644 --- a/public/images/pokemon/variant/823.json +++ b/public/images/pokemon/variant/823.json @@ -5,14 +5,12 @@ "303360": "ad6f83", "646ca8": "ffdeeb", "4d5488": "f4a0b9", - "010101": "010101", "ffa8a8": "ffc586", "f30101": "df7b10", "4e4150": "57445a", "2c2b58": "845195", "18173d": "4b2a5e", - "3e3d6d": "bc7dc3", - "2e262f": "2e262f" + "3e3d6d": "bc7dc3" }, "2": { "251d4e": "612a0e", @@ -20,7 +18,6 @@ "303360": "b95212", "646ca8": "edd472", "4d5488": "eaae36", - "010101": "010101", "ffa8a8": "ff4a4a", "f30101": "e80000", "4e4150": "743419", diff --git a/public/images/pokemon/variant/829.json b/public/images/pokemon/variant/829.json index b4fbd7f76dc..ca67c326709 100644 --- a/public/images/pokemon/variant/829.json +++ b/public/images/pokemon/variant/829.json @@ -2,7 +2,6 @@ "1": { "9a632c": "0a6290", "f4d626": "4aebe3", - "101010": "101010", "e09b24": "1da3c2", "fef54b": "84fff5", "fef1a7": "96ffe0", @@ -19,7 +18,6 @@ "2": { "9a632c": "472359", "f4d626": "bc77ff", - "101010": "101010", "e09b24": "8236c0", "fef54b": "e8aaff", "fef1a7": "f6e6ff", @@ -30,7 +28,6 @@ "3fad71": "41658c", "fef0a0": "ede9d3", "6d6649": "4b1a5a", - "ab9b65": "ab9b65", "397558": "1d396f" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/830.json b/public/images/pokemon/variant/830.json index 8c1e9dfdfb6..7f247585dfd 100644 --- a/public/images/pokemon/variant/830.json +++ b/public/images/pokemon/variant/830.json @@ -6,7 +6,6 @@ "e8d5c6": "a2d2e7", "828a3f": "358699", "b6b23d": "8be8e4", - "101010": "101010", "fef0a0": "ece7c8", "bab743": "c38ec6", "9f6137": "3b0122", @@ -22,7 +21,6 @@ "e8d5c6": "d5aee9", "828a3f": "8243b6", "b6b23d": "b87def", - "101010": "101010", "fef0a0": "f4f1de", "bab743": "6a9cbb", "9f6137": "14103b", diff --git a/public/images/pokemon/variant/835.json b/public/images/pokemon/variant/835.json index 708c7028bcd..fbb7122a337 100644 --- a/public/images/pokemon/variant/835.json +++ b/public/images/pokemon/variant/835.json @@ -1,7 +1,6 @@ { "1": { "844840": "051514", - "101010": "101010", "bd8d62": "e0bb76", "a26642": "aa8e5a", "6d943a": "28797b", @@ -11,26 +10,19 @@ "fbfbfb": "fdffe1", "cba685": "fbffc7", "9a6229": "13423f", - "f9f9f9": "f9f9f9", - "d1cccb": "e7c78d", - "837a76": "837a76", - "db6659": "db6659" + "d1cccb": "e7c78d" }, "2": { "844840": "313e38", - "101010": "101010", "bd8d62": "509468", "a26642": "3d5d59", "6d943a": "1e1a42", "76c745": "202758", "cf9529": "56447e", "f7da11": "776baf", - "fbfbfb": "fbfbfb", "cba685": "8cd3a5", "9a6229": "2b2042", - "f9f9f9": "f9f9f9", "d1cccb": "a0bcaa", - "837a76": "43554d", - "db6659": "db6659" + "837a76": "43554d" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/84.json b/public/images/pokemon/variant/84.json index c30aeefe259..d50f701c4aa 100644 --- a/public/images/pokemon/variant/84.json +++ b/public/images/pokemon/variant/84.json @@ -4,9 +4,6 @@ "946b5a": "3a8951", "dead73": "a5e6a0", "bd8c52": "65bf75", - "636363": "636363", - "ffffff": "ffffff", - "101010": "101010", "a5844a": "bba689", "635210": "7a614c", "efdead": "ece4ce", @@ -18,8 +15,6 @@ "dead73": "c35d88", "bd8c52": "9f4079", "636363": "3a2050", - "ffffff": "ffffff", - "101010": "101010", "a5844a": "b35656", "635210": "84333c", "efdead": "efbcad", @@ -31,8 +26,6 @@ "dead73": "95bedc", "bd8c52": "618bbc", "636363": "7a355d", - "ffffff": "ffffff", - "101010": "101010", "a5844a": "2f2745", "635210": "1b1436", "efdead": "584c6b", diff --git a/public/images/pokemon/variant/85.json b/public/images/pokemon/variant/85.json index 4220e737b91..cc60db8ddc0 100644 --- a/public/images/pokemon/variant/85.json +++ b/public/images/pokemon/variant/85.json @@ -1,13 +1,8 @@ { "0": { - "424242": "424242", - "848484": "848484", - "000000": "000000", "5a4221": "1b4e31", "ce9c52": "65bf75", "a57b5a": "3a8951", - "ffffff": "ffffff", - "d6cece": "d6cece", "635a42": "7a614c", "efdead": "ece4ce", "b5a57b": "bba689", @@ -19,12 +14,9 @@ "1": { "424242": "3a2050", "848484": "6b4685", - "000000": "000000", "5a4221": "48123f", "ce9c52": "9f4079", "a57b5a": "6f265a", - "ffffff": "ffffff", - "d6cece": "d6cece", "635a42": "84333c", "efdead": "efbcad", "b5a57b": "c46e6e", @@ -36,12 +28,9 @@ "2": { "424242": "553246", "848484": "8f6174", - "000000": "000000", "5a4221": "1b2c59", "ce9c52": "95bedc", "a57b5a": "618bbc", - "ffffff": "ffffff", - "d6cece": "d6cece", "635a42": "1d1636", "efdead": "584c6b", "b5a57b": "43385c", diff --git a/public/images/pokemon/variant/850.json b/public/images/pokemon/variant/850.json index 991f1782552..7c2431b7df5 100644 --- a/public/images/pokemon/variant/850.json +++ b/public/images/pokemon/variant/850.json @@ -1,32 +1,22 @@ { "1": { - "2f1610": "2f1610", "681607": "024f2d", "bf3922": "117956", "804a3e": "59365d", - "101010": "101010", "ff5839": "35c36c", "5b2f26": "36203c", "ff836c": "5ff58e", "f77c42": "89fbad", "f89e08": "67ef9c", "ffd901": "c8ffcc", - "be5409": "117956", - "fbfbfb": "fbfbfb" + "be5409": "117956" }, "2": { - "2f1610": "2f1610", "681607": "68063c", "bf3922": "ae1165", "804a3e": "475294", - "101010": "101010", "ff5839": "d73981", "5b2f26": "36426c", - "ff836c": "ff836c", - "f77c42": "f77c42", - "f89e08": "f89e08", - "ffd901": "ffc143", - "be5409": "be5409", - "fbfbfb": "fbfbfb" + "ffd901": "ffc143" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/851-gigantamax.json b/public/images/pokemon/variant/851-gigantamax.json index 44af1041c17..f1b3d6bcf4f 100644 --- a/public/images/pokemon/variant/851-gigantamax.json +++ b/public/images/pokemon/variant/851-gigantamax.json @@ -10,25 +10,18 @@ "9a2d21": "36203c", "5b2f26": "5e3d35", "804a3e": "745f47", - "2f1610": "2f1610", - "010000": "010000", - "f4ba01": "a3ffab", - "fbfbfb": "fbfbfb" + "f4ba01": "a3ffab" }, "2": { "e75814": "890f52", "f89e08": "d73981", "ffd901": "ffc143", - "941528": "941528", "5b0f0f": "121439", "e71d12": "36426c", "ff5839": "7866cb", "9a2d21": "222957", "5b2f26": "60144b", "804a3e": "973554", - "2f1610": "2f1610", - "010000": "010000", - "f4ba01": "e98a27", - "fbfbfb": "fbfbfb" + "f4ba01": "e98a27" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/851.json b/public/images/pokemon/variant/851.json index 62cbe9d8531..0f1e234d0aa 100644 --- a/public/images/pokemon/variant/851.json +++ b/public/images/pokemon/variant/851.json @@ -6,12 +6,10 @@ "2f1610": "24122b", "681607": "0a5660", "804a3e": "714272", - "101010": "101010", "ff5839": "35c3a8", "5b2f26": "503154", "bf3922": "1a8987", "b96f5d": "ad58ab", - "fbfbfb": "fbfbfb", "941528": "005f35", "42221c": "36203c" }, @@ -22,13 +20,10 @@ "2f1610": "121439", "681607": "6e0442", "804a3e": "475294", - "101010": "101010", "ff5839": "d73981", "5b2f26": "36426c", "bf3922": "ae1165", "b96f5d": "7866cb", - "fbfbfb": "fbfbfb", - "941528": "941528", "42221c": "222957" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/854.json b/public/images/pokemon/variant/854.json index 7c4e10fbead..3ebee0aaaea 100644 --- a/public/images/pokemon/variant/854.json +++ b/public/images/pokemon/variant/854.json @@ -1,6 +1,5 @@ { "1": { - "5e401f": "5e401f", "cf9a4c": "592626", "ffd45c": "b7763c", "c3bfe0": "f2bbaa", @@ -10,7 +9,6 @@ "d38095": "eb8328", "f79e67": "ffab61", "4bb2af": "6d142c", - "101010": "101010", "72cfcc": "7c2039", "9aedea": "b74f6c", "f5f9fa": "ecb6c5" @@ -26,7 +24,6 @@ "d38095": "c6c95e", "f79e67": "f4f394", "4bb2af": "333231", - "101010": "101010", "72cfcc": "7c7270", "9aedea": "c9c0b9", "f5f9fa": "fdfdfd" diff --git a/public/images/pokemon/variant/855.json b/public/images/pokemon/variant/855.json index 9ecc1422501..1d840d9f6cf 100644 --- a/public/images/pokemon/variant/855.json +++ b/public/images/pokemon/variant/855.json @@ -13,8 +13,7 @@ "f5f9fa": "f2bbaa", "f79e67": "eb8328", "d38095": "ef9e5c", - "733a87": "cc752f", - "101010": "101010" + "733a87": "cc752f" }, "2": { "5e401f": "463f2b", @@ -30,7 +29,6 @@ "f5f9fa": "524c4e", "f79e67": "f4f394", "d38095": "c6c95e", - "733a87": "49755c", - "101010": "101010" + "733a87": "49755c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/856.json b/public/images/pokemon/variant/856.json index 3d245b74324..bfc575d89d7 100644 --- a/public/images/pokemon/variant/856.json +++ b/public/images/pokemon/variant/856.json @@ -2,7 +2,6 @@ "1": { "727ab1": "1d4a3b", "c8e9ff": "5ec183", - "181818": "181818", "acbfdf": "3b9665", "bb6a99": "043232", "f9d5da": "298675", @@ -13,7 +12,6 @@ "2": { "727ab1": "6b0124", "c8e9ff": "cb304d", - "181818": "181818", "acbfdf": "a11437", "bb6a99": "30163d", "f9d5da": "523f73", diff --git a/public/images/pokemon/variant/858-gigantamax.json b/public/images/pokemon/variant/858-gigantamax.json index 5e8730f3850..02a34377288 100644 --- a/public/images/pokemon/variant/858-gigantamax.json +++ b/public/images/pokemon/variant/858-gigantamax.json @@ -2,7 +2,6 @@ "1": { "727ab1": "1d4a3b", "c8e9ff": "5ec183", - "101010": "101010", "c15974": "043232", "acbfdf": "3b9665", "f5bac2": "298675", @@ -12,13 +11,11 @@ "fefefe": "f7e4e4", "b4a2b7": "bf9ca0", "856d8b": "9c7a81", - "f9d5da": "f9d5da", "d9cedb": "dec1c2" }, "2": { "727ab1": "6b0124", "c8e9ff": "cb304d", - "101010": "101010", "c15974": "30163d", "acbfdf": "a11437", "f5bac2": "523f73", @@ -28,7 +25,6 @@ "fefefe": "fee9fa", "b4a2b7": "bc93b7", "856d8b": "976c95", - "f9d5da": "f9d5da", "d9cedb": "e4bcde" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/858.json b/public/images/pokemon/variant/858.json index 97e35677ec3..41e50e22464 100644 --- a/public/images/pokemon/variant/858.json +++ b/public/images/pokemon/variant/858.json @@ -3,7 +3,6 @@ "727ab1": "1d4a3b", "c8e9ff": "5ec183", "acbfdf": "3b9665", - "101010": "101010", "948fc2": "287b59", "d9cedb": "dec1c2", "e5e4ef": "f7e4e4", @@ -12,14 +11,12 @@ "c15974": "043232", "b4a2b7": "bf9ca0", "856d8b": "9c7a81", - "f5bac2": "298675", - "f9d5da": "f9d5da" + "f5bac2": "298675" }, "2": { "727ab1": "6b0124", "c8e9ff": "cb304d", "acbfdf": "a11437", - "101010": "101010", "948fc2": "8c0e32", "d9cedb": "e4bcde", "e5e4ef": "ffecf9", @@ -28,7 +25,6 @@ "c15974": "30163d", "b4a2b7": "bc93b7", "856d8b": "976c95", - "f5bac2": "523f73", - "f9d5da": "f9d5da" + "f5bac2": "523f73" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/859.json b/public/images/pokemon/variant/859.json index 703d5d67218..bb4e943fa79 100644 --- a/public/images/pokemon/variant/859.json +++ b/public/images/pokemon/variant/859.json @@ -8,9 +8,6 @@ "735aac": "a4332d", "947cd8": "cd643d", "f42252": "f55c14", - "101010": "101010", - "fdfdfd": "fdfdfd", - "c9c9c9": "c9c9c9", "8b73d5": "cc5836" }, "2": { @@ -22,8 +19,6 @@ "735aac": "f0c475", "947cd8": "d9975b", "f42252": "fc645a", - "101010": "101010", - "fdfdfd": "fdfdfd", "c9c9c9": "dad6bf", "8b73d5": "f9e9a4" } diff --git a/public/images/pokemon/variant/86.json b/public/images/pokemon/variant/86.json index e24d4c5c672..f44946f3dda 100644 --- a/public/images/pokemon/variant/86.json +++ b/public/images/pokemon/variant/86.json @@ -4,23 +4,16 @@ "e6e6f7": "f3c7aa", "949cb5": "a86f5b", "d6ceef": "c78f72", - "101010": "101010", - "ffffff": "ffffff", "6b5a10": "6b3410", "b59442": "a4622f", "f7e6bd": "f7e3bd", - "dec573": "bb9451", - "d6735a": "d6735a", - "8c3121": "8c3121", - "ffadad": "ffadad" + "dec573": "bb9451" }, "1": { "425284": "414e63", "e6e6f7": "b2c3d1", "949cb5": "5e6d7c", "d6ceef": "91a0ac", - "101010": "101010", - "ffffff": "ffffff", "6b5a10": "847b73", "b59442": "b5ada5", "f7e6bd": "efefe6", @@ -34,8 +27,6 @@ "e6e6f7": "7ecdca", "949cb5": "325062", "d6ceef": "558a98", - "101010": "101010", - "ffffff": "ffffff", "6b5a10": "5f3e2e", "b59442": "81604a", "f7e6bd": "d9caa5", diff --git a/public/images/pokemon/variant/860.json b/public/images/pokemon/variant/860.json index 784d8e3bb64..50da28c1002 100644 --- a/public/images/pokemon/variant/860.json +++ b/public/images/pokemon/variant/860.json @@ -8,9 +8,6 @@ "e93761": "638a48", "fd0b42": "d24309", "433568": "5a1d27", - "101010": "101010", - "c9c9c9": "c9c9c9", - "fdfdfd": "fdfdfd", "409555": "244849", "47be62": "366c59", "356a3c": "162a35" @@ -24,9 +21,7 @@ "e93761": "491337", "fd0b42": "f0443e", "433568": "c98e63", - "101010": "101010", "c9c9c9": "dad6bf", - "fdfdfd": "fdfdfd", "409555": "272664", "47be62": "3f386f", "356a3c": "090d50" diff --git a/public/images/pokemon/variant/861-gigantamax.json b/public/images/pokemon/variant/861-gigantamax.json index 45d7da58c75..e3c084d3374 100644 --- a/public/images/pokemon/variant/861-gigantamax.json +++ b/public/images/pokemon/variant/861-gigantamax.json @@ -2,15 +2,12 @@ "1": { "2f184e": "290527", "5d4694": "8b332d", - "101010": "101010", "433568": "5a1d27", "352954": "3b1528", "409555": "244849", "47be62": "366c59", "356a3c": "162a35", "fd0b42": "d24309", - "c9c9c9": "c9c9c9", - "fdfdfd": "fdfdfd", "f874a0": "ea812f", "e93761": "638a48", "f75c90": "7daf56" @@ -18,7 +15,6 @@ "2": { "2f184e": "6a2f3a", "5d4694": "dfc784", - "101010": "101010", "433568": "c98e63", "352954": "a26458", "409555": "272664", @@ -26,7 +22,6 @@ "356a3c": "090d50", "fd0b42": "f0443e", "c9c9c9": "dad6bf", - "fdfdfd": "fdfdfd", "f874a0": "f291bf", "e93761": "491337", "f75c90": "64233b" diff --git a/public/images/pokemon/variant/861.json b/public/images/pokemon/variant/861.json index f60f7b31a56..539009124d0 100644 --- a/public/images/pokemon/variant/861.json +++ b/public/images/pokemon/variant/861.json @@ -3,15 +3,11 @@ "356a3c": "162a35", "47be62": "366c59", "2f184e": "290527", - "101010": "101010", "5d4694": "8b332d", "409555": "244849", "fd0b42": "d24309", "433568": "5a1d27", - "c9c9c9": "c9c9c9", - "fdfdfd": "fdfdfd", "352954": "3b1528", - "7c8089": "7c8089", "e93761": "638a48", "f75c90": "7daf56" }, @@ -19,15 +15,12 @@ "356a3c": "090d50", "47be62": "3f386f", "2f184e": "6a2f3a", - "101010": "101010", "5d4694": "dfc784", "409555": "272664", "fd0b42": "f0443e", "433568": "c98e63", "c9c9c9": "dad6bf", - "fdfdfd": "fdfdfd", "352954": "a26458", - "7c8089": "7c8089", "e93761": "491337", "f75c90": "64233b" } diff --git a/public/images/pokemon/variant/862.json b/public/images/pokemon/variant/862.json index 8b25c875e3f..3b033382be4 100644 --- a/public/images/pokemon/variant/862.json +++ b/public/images/pokemon/variant/862.json @@ -1,8 +1,6 @@ { "1": { - "1b2627": "1b2627", "474749": "156a66", - "010101": "010101", "303034": "094448", "f5f5f6": "f5ffea", "b2b3b2": "90c093", @@ -11,13 +9,11 @@ "242428": "001b1a", "6f7071": "01473a", "df84ad": "ff69fa", - "9b4f69": "d414dd", - "fcfcfc": "fcfcfc" + "9b4f69": "d414dd" }, "2": { "1b2627": "060724", "474749": "8655e1", - "010101": "010101", "303034": "5a3eb9", "f5f5f6": "342d4c", "b2b3b2": "18133d", @@ -26,7 +22,6 @@ "242428": "161058", "6f7071": "2e1d7b", "df84ad": "54f1ff", - "9b4f69": "0099ce", - "fcfcfc": "fcfcfc" + "9b4f69": "0099ce" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/863.json b/public/images/pokemon/variant/863.json index 78002ec7085..fe1146fa213 100644 --- a/public/images/pokemon/variant/863.json +++ b/public/images/pokemon/variant/863.json @@ -2,14 +2,11 @@ "1": { "66716c": "59879a", "bfc1bf": "b4e0d3", - "010101": "010101", "8f9c95": "85c1c0", - "181a1d": "181a1d", "3d4547": "4e385a", "272d2e": "342b49", "ef9b50": "fbe663", "dd5e33": "df9834", - "f3f3f3": "f3f3f3", "9aa094": "9fb8bc", "84726f": "9591a7", "5b4e4d": "4e455c", @@ -18,7 +15,6 @@ "2": { "66716c": "331a37", "bfc1bf": "92264b", - "010101": "010101", "8f9c95": "6d0b3c", "181a1d": "0f2127", "3d4547": "417778", diff --git a/public/images/pokemon/variant/864.json b/public/images/pokemon/variant/864.json index 9dcd35fa713..971e15cc81c 100644 --- a/public/images/pokemon/variant/864.json +++ b/public/images/pokemon/variant/864.json @@ -12,7 +12,6 @@ "fcfcfc": "ffffff", "c6bbcb": "a7e6e5", "ffa4c5": "bed5ff", - "101010": "101010", "7f806a": "4d8894", "af9e9e": "42a2b1" }, @@ -29,7 +28,6 @@ "fcfcfc": "ffffff", "c6bbcb": "773050", "ffa4c5": "8ff3a3", - "101010": "101010", "7f806a": "4b1f28", "af9e9e": "48c492" } diff --git a/public/images/pokemon/variant/867.json b/public/images/pokemon/variant/867.json index fcf7e29867a..8b2b7fc38d9 100644 --- a/public/images/pokemon/variant/867.json +++ b/public/images/pokemon/variant/867.json @@ -1,7 +1,6 @@ { "1": { "393941": "69d9bf", - "101010": "101010", "d9d0d1": "d6b8a0", "c5b9bb": "c69981", "d66770": "334599", @@ -13,7 +12,6 @@ }, "2": { "393941": "a4222c", - "101010": "101010", "d9d0d1": "4fb66a", "c5b9bb": "298a61", "d66770": "ffe78d", diff --git a/public/images/pokemon/variant/87.json b/public/images/pokemon/variant/87.json index e32cf4fe2b9..6678cb61e8f 100644 --- a/public/images/pokemon/variant/87.json +++ b/public/images/pokemon/variant/87.json @@ -5,10 +5,8 @@ "e6e6f7": "f0b28a", "425263": "773630", "d6ceef": "bc7855", - "101010": "101010", "ffffff": "ffecd8", "847b7b": "5328a6", - "d6cece": "d6cece", "9c0000": "b03f2f", "d62921": "f68484" }, @@ -18,10 +16,7 @@ "e6e6f7": "96adbe", "425263": "2f3b50", "d6ceef": "5a7286", - "101010": "101010", "ffffff": "beeaf8", - "847b7b": "847b7b", - "d6cece": "d6cece", "9c0000": "9e3d77", "d62921": "d280ab" }, @@ -31,10 +26,8 @@ "e6e6f7": "86dfe2", "425263": "171d3f", "d6ceef": "5493ac", - "101010": "101010", "ffffff": "d4fffc", "847b7b": "125889", - "d6cece": "d6cece", "9c0000": "c74351", "d62921": "f37171" } diff --git a/public/images/pokemon/variant/872.json b/public/images/pokemon/variant/872.json index 1576f560018..763cf0d0250 100644 --- a/public/images/pokemon/variant/872.json +++ b/public/images/pokemon/variant/872.json @@ -3,33 +3,24 @@ "7b8b9b": "345f5c", "acc3cc": "669a8c", "d8e9f0": "b7f1d6", - "f5fdff": "f5fdff", "695e77": "275e43", - "101010": "101010", "edeae0": "a6d6a6", - "b3a7c2": "73a878", - "fdfdfb": "fdfdfb" + "b3a7c2": "73a878" }, "1": { "7b8b9b": "22504c", "acc3cc": "548e8f", "d8e9f0": "b6e7df", - "f5fdff": "f5fdff", "695e77": "354b63", - "101010": "101010", "edeae0": "c1ebf3", - "b3a7c2": "89a9be", - "fdfdfb": "fdfdfb" + "b3a7c2": "89a9be" }, "2": { "7b8b9b": "5a3993", "acc3cc": "a66ac2", "d8e9f0": "d5c3ff", - "f5fdff": "f5fdff", "695e77": "5f3465", - "101010": "101010", "edeae0": "e5a2da", - "b3a7c2": "a060a0", - "fdfdfb": "fdfdfb" + "b3a7c2": "a060a0" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/873.json b/public/images/pokemon/variant/873.json index 5ea93b1c3bb..2bf9938b290 100644 --- a/public/images/pokemon/variant/873.json +++ b/public/images/pokemon/variant/873.json @@ -5,7 +5,6 @@ "e7e0e6": "a6d6a6", "b3b4bd": "73a878", "8f8f9f": "547b58", - "101010": "101010", "758174": "497e7a", "c0e4c2": "eefffc", "a0baa8": "aae3d9", @@ -20,13 +19,11 @@ "e7e0e6": "c1ebf3", "b3b4bd": "8ebbca", "8f8f9f": "648397", - "101010": "101010", "758174": "428586", "c0e4c2": "d7fff8", "a0baa8": "7bcbc0", "4662ce": "0fa5bd", "8e9fe1": "2dd3e0", - "3f4474": "3f4474", "c0df86": "eefffb" }, "2": { @@ -35,7 +32,6 @@ "e7e0e6": "d78dcb", "b3b4bd": "864c86", "8f8f9f": "5f3465", - "101010": "101010", "758174": "795a9e", "c0e4c2": "e1e3ff", "a0baa8": "9f87ca", diff --git a/public/images/pokemon/variant/876-female.json b/public/images/pokemon/variant/876-female.json index 3d34ed7afae..9372d190545 100644 --- a/public/images/pokemon/variant/876-female.json +++ b/public/images/pokemon/variant/876-female.json @@ -5,7 +5,6 @@ "564c6c": "4a282a", "2f2642": "2c1419", "6c64a6": "b72e3e", - "101010": "101010", "d872e7": "79e28d", "ccb7c2": "c4a691", "fefefe": "e8d4bf", @@ -21,7 +20,6 @@ "564c6c": "d58da4", "2f2642": "444a8e", "6c64a6": "78aae5", - "101010": "101010", "d872e7": "ff9cca", "ccb7c2": "cbdbe6", "fefefe": "f0f2f3", diff --git a/public/images/pokemon/variant/876.json b/public/images/pokemon/variant/876.json index 0f7b7dbd9d4..78478b9098b 100644 --- a/public/images/pokemon/variant/876.json +++ b/public/images/pokemon/variant/876.json @@ -2,7 +2,6 @@ "1": { "2e2641": "2c1419", "7d7493": "5a3736", - "101010": "101010", "564c6c": "4a282a", "2f2642": "2c1419", "6c64a6": "b72e3e", @@ -18,7 +17,6 @@ "2": { "2e2641": "314c7c", "7d7493": "a3c5e8", - "101010": "101010", "564c6c": "78a5d4", "2f2642": "7a316c", "6c64a6": "f589bb", diff --git a/public/images/pokemon/variant/877-hangry.json b/public/images/pokemon/variant/877-hangry.json index 100665220df..44e48631166 100644 --- a/public/images/pokemon/variant/877-hangry.json +++ b/public/images/pokemon/variant/877-hangry.json @@ -1,19 +1,13 @@ { "0": { - "101010": "101010", "383634": "540606", "6c6c6c": "952222", "4f4b47": "3a1010", "9958ce": "cebb58", "6b3d96": "967f3d", - "ff151c": "ff151c", - "f38bb7": "f38bb7", - "9f9f9f": "9f9f9f", - "fbfbfb": "fbfbfb", "493061": "615e30" }, "1": { - "101010": "101010", "383634": "212020", "6c6c6c": "3a3a3a", "4f4b47": "161514", @@ -21,21 +15,13 @@ "6b3d96": "a2512c", "ff151c": "ff6b00", "f38bb7": "f3a18b", - "9f9f9f": "9f9f9f", - "fbfbfb": "fbfbfb", "493061": "753e25" }, "2": { - "101010": "101010", - "383634": "383634", - "6c6c6c": "6c6c6c", - "4f4b47": "4f4b47", "9958ce": "7fba7f", "6b3d96": "568351", "ff151c": "065b06", "f38bb7": "468e46", - "9f9f9f": "9f9f9f", - "fbfbfb": "fbfbfb", "493061": "306135" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/877.json b/public/images/pokemon/variant/877.json index 1708b129eb0..a8757d6d822 100644 --- a/public/images/pokemon/variant/877.json +++ b/public/images/pokemon/variant/877.json @@ -1,50 +1,29 @@ { "0": { - "101010": "101010", "8a5e48": "383634", "cf9c66": "6c6c6c", - "383634": "383634", - "6c6c6c": "6c6c6c", "af7044": "4f4b47", - "4f4b47": "4f4b47", "f4f489": "b689f4", "d3b351": "8851d3", - "fbfbfb": "fbfbfb", - "5c5c5c": "5c5c5c", - "f38bb7": "f38bb7", - "b24244": "b24244", - "e76961": "e76961", "785b23": "8851d3" }, "1": { - "101010": "101010", "8a5e48": "2c439d", "cf9c66": "86aaff", - "383634": "383634", - "6c6c6c": "6c6c6c", "af7044": "2c439d", - "4f4b47": "4f4b47", "f4f489": "fff98f", "d3b351": "8b8853", - "fbfbfb": "fbfbfb", - "5c5c5c": "5c5c5c", "f38bb7": "1010b3", "b24244": "424eb2", "e76961": "61b6e7", "785b23": "8b8853" }, "2": { - "101010": "101010", "8a5e48": "4f8a48", "cf9c66": "71cf66", - "383634": "383634", - "6c6c6c": "6c6c6c", "af7044": "44af5b", - "4f4b47": "4f4b47", "f4f489": "f8f8f8", "d3b351": "b6b6b6", - "fbfbfb": "fbfbfb", - "5c5c5c": "5c5c5c", "f38bb7": "a1f38b", "b24244": "388040", "e76961": "95e69d", diff --git a/public/images/pokemon/variant/880.json b/public/images/pokemon/variant/880.json index 3e626f744bd..cdb83257d50 100644 --- a/public/images/pokemon/variant/880.json +++ b/public/images/pokemon/variant/880.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "975e17": "5b0610", "ffff84": "ee8563", "ead900": "c6362b", @@ -17,11 +16,9 @@ "39ad5a": "a2b5c8" }, "2": { - "101010": "101010", "975e17": "211b3d", "ffff84": "dceeeb", "ead900": "636287", - "8f261b": "8f261b", "e39e1e": "35365e", "ed4e76": "ca5939", "ff8d9f": "e28854", diff --git a/public/images/pokemon/variant/881.json b/public/images/pokemon/variant/881.json index 231947e9afd..24d7946cf75 100644 --- a/public/images/pokemon/variant/881.json +++ b/public/images/pokemon/variant/881.json @@ -2,7 +2,6 @@ "1": { "975e17": "5b0610", "ffff84": "ee8563", - "101010": "101010", "e39e1e": "9c1430", "ead900": "c6362b", "2abbfc": "ceb16f", @@ -21,7 +20,6 @@ "2": { "975e17": "211b3d", "ffff84": "dceeeb", - "101010": "101010", "e39e1e": "35365e", "ead900": "636287", "2abbfc": "26c248", diff --git a/public/images/pokemon/variant/882.json b/public/images/pokemon/variant/882.json index cffd202806d..0782d97fee3 100644 --- a/public/images/pokemon/variant/882.json +++ b/public/images/pokemon/variant/882.json @@ -6,7 +6,6 @@ "83bbed": "eaa561", "777ebd": "cc6235", "edf3f2": "faebc8", - "101010": "101010", "005e44": "564e6e", "ff3c6d": "312f47", "8f261b": "1d2238", @@ -23,7 +22,6 @@ "83bbed": "8c1f45", "777ebd": "6c1046", "edf3f2": "fbecff", - "101010": "101010", "005e44": "f1b45f", "ff3c6d": "ca5939", "8f261b": "215b68", diff --git a/public/images/pokemon/variant/883.json b/public/images/pokemon/variant/883.json index 1cc1087f458..5c62474e9a3 100644 --- a/public/images/pokemon/variant/883.json +++ b/public/images/pokemon/variant/883.json @@ -4,7 +4,6 @@ "83bbed": "eaa561", "777ebd": "cc6235", "172459": "771922", - "101010": "101010", "edf3f2": "faebc8", "09354d": "2f1f1a", "085d94": "714363", @@ -19,7 +18,6 @@ "83bbed": "8c1f45", "777ebd": "6c1046", "172459": "320432", - "101010": "101010", "edf3f2": "fcffe4", "09354d": "2f1a20", "085d94": "ad3b6c", diff --git a/public/images/pokemon/variant/884-gigantamax.json b/public/images/pokemon/variant/884-gigantamax.json index d3f84a91842..70de36f39ec 100644 --- a/public/images/pokemon/variant/884-gigantamax.json +++ b/public/images/pokemon/variant/884-gigantamax.json @@ -3,7 +3,6 @@ "a893a8": "9b715e", "837080": "5d392f", "e4e5f1": "f8e0cf", - "151515": "151515", "fefefe": "fff5ed", "c4bac5": "c19b85", "ffde59": "ed7746", @@ -20,7 +19,6 @@ "a893a8": "312857", "837080": "1a0e34", "e4e5f1": "6e5ca6", - "151515": "151515", "fefefe": "8477cf", "c4bac5": "443a6e", "ffde59": "6df4ff", @@ -30,7 +28,6 @@ "4e4f5f": "fede7d", "393a41": "ed7746", "707086": "ffffc6", - "28272d": "28272d", "2e6976": "a87220" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/884.json b/public/images/pokemon/variant/884.json index 962edf2d6da..f4e311bd455 100644 --- a/public/images/pokemon/variant/884.json +++ b/public/images/pokemon/variant/884.json @@ -2,7 +2,6 @@ "1": { "68353c": "871e14", "b96a6a": "cd452b", - "151515": "151515", "c4bac5": "c19b85", "e4e5f1": "f8e0cf", "837080": "5d392f", @@ -18,7 +17,6 @@ "2": { "68353c": "062449", "b96a6a": "2077a6", - "151515": "151515", "c4bac5": "3d3268", "e4e5f1": "6e5ca6", "837080": "1a0e34", diff --git a/public/images/pokemon/variant/885.json b/public/images/pokemon/variant/885.json index 046b01e6625..bc8d6dd1f8c 100644 --- a/public/images/pokemon/variant/885.json +++ b/public/images/pokemon/variant/885.json @@ -1,7 +1,6 @@ { "0": { "3a583c": "133056", - "101010": "101010", "fa5494": "efa93f", "cc4066": "cc8225", "476b48": "20486e", @@ -16,7 +15,6 @@ }, "1": { "3a583c": "2f040d", - "101010": "101010", "fa5494": "4590da", "cc4066": "3261b7", "476b48": "4e0e17", @@ -31,7 +29,6 @@ }, "2": { "3a583c": "1f0c2c", - "101010": "101010", "fa5494": "68c7c4", "cc4066": "2a8286", "476b48": "231234", diff --git a/public/images/pokemon/variant/886.json b/public/images/pokemon/variant/886.json index 521ce4e84b7..c32ce74f987 100644 --- a/public/images/pokemon/variant/886.json +++ b/public/images/pokemon/variant/886.json @@ -2,7 +2,6 @@ "0": { "444e62": "2d365a", "addcbc": "6accd6", - "101010": "101010", "5f875a": "2f6c89", "2c323f": "192250", "566f89": "465272", @@ -19,7 +18,6 @@ "1": { "444e62": "4a1621", "addcbc": "da6151", - "101010": "101010", "5f875a": "6b242e", "2c323f": "2e080d", "566f89": "602034", @@ -36,7 +34,6 @@ "2": { "444e62": "231b45", "addcbc": "927fa1", - "101010": "101010", "5f875a": "3c2750", "2c323f": "251b31", "566f89": "3b2e5d", @@ -46,8 +43,6 @@ "ffe322": "87ff46", "7fb3b1": "8b659f", "5b878c": "6c4d85", - "d5fffb": "d67ae7", - "b5a36a": "b5a36a", - "dbd39d": "dbd39d" + "d5fffb": "d67ae7" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/887.json b/public/images/pokemon/variant/887.json index 9858e270bc0..89a0b872a99 100644 --- a/public/images/pokemon/variant/887.json +++ b/public/images/pokemon/variant/887.json @@ -3,7 +3,6 @@ "2c323f": "2e080d", "566f89": "6c273d", "444e62": "4a1621", - "101010": "101010", "fa5494": "4590da", "cc4066": "244f9f", "48a9b0": "8a212f", @@ -20,7 +19,6 @@ "2c323f": "1b163f", "566f89": "4c3f6f", "444e62": "332a59", - "101010": "101010", "fa5494": "68c7c4", "cc4066": "2a8286", "48a9b0": "482962", diff --git a/public/images/pokemon/variant/888-crowned.json b/public/images/pokemon/variant/888-crowned.json index 64509128dc6..6b85e432037 100644 --- a/public/images/pokemon/variant/888-crowned.json +++ b/public/images/pokemon/variant/888-crowned.json @@ -3,7 +3,6 @@ "8f4e2f": "2f4567", "d79a53": "5a829b", "f2db8a": "a1c9cd", - "080808": "080808", "3471b4": "b74323", "2d4377": "5c1a1d", "4999da": "ec813b", @@ -13,14 +12,12 @@ "fae2c0": "fff8cd", "d3a79a": "da9772", "34313e": "32171f", - "fdfdfd": "fdfdfd", "9d6862": "a85f49" }, "2": { "8f4e2f": "692e47", "d79a53": "964c5c", "f2db8a": "c4826b", - "080808": "080808", "3471b4": "9fa7d0", "2d4377": "615c7e", "4999da": "e6ecff", @@ -30,7 +27,6 @@ "fae2c0": "3d5b72", "d3a79a": "243149", "34313e": "1a1829", - "fdfdfd": "fdfdfd", "9d6862": "1c2238" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/888.json b/public/images/pokemon/variant/888.json index e6a4c1e784f..4941ed244e1 100644 --- a/public/images/pokemon/variant/888.json +++ b/public/images/pokemon/variant/888.json @@ -1,7 +1,6 @@ { "1": { "2d4377": "5c1a1d", - "080808": "080808", "4999da": "ec813b", "3471b4": "b74323", "f45353": "448b48", @@ -10,12 +9,10 @@ "34313e": "32171f", "be3c45": "224d42", "93262f": "0d2729", - "fdfdfd": "fdfdfd", "9d6862": "a85f49" }, "2": { "2d4377": "615c7e", - "080808": "080808", "4999da": "e6ecff", "3471b4": "9fa7d0", "f45353": "902d57", @@ -24,7 +21,6 @@ "34313e": "1a1829", "be3c45": "6c1d59", "93262f": "431042", - "fdfdfd": "fdfdfd", "9d6862": "1c2238" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/889-crowned.json b/public/images/pokemon/variant/889-crowned.json index 9a91c8a7939..2cd690856c1 100644 --- a/public/images/pokemon/variant/889-crowned.json +++ b/public/images/pokemon/variant/889-crowned.json @@ -1,7 +1,6 @@ { "1": { "2d2f7b": "102c2c", - "080808": "080808", "396dce": "70a757", "2d48a8": "3c6959", "8f4e2f": "2f4567", @@ -12,13 +11,11 @@ "731a27": "1c163d", "ae2836": "422b61", "34313e": "19142f", - "fdfdfd": "fdfdfd", "c2c3cf": "ffe0cc", "8887a8": "d69f97" }, "2": { "2d2f7b": "244e61", - "080808": "080808", "396dce": "6fc7c1", "2d48a8": "4797a4", "8f4e2f": "692e47", @@ -29,7 +26,6 @@ "731a27": "615c7e", "ae2836": "9fa7d0", "34313e": "22192c", - "fdfdfd": "fdfdfd", "c2c3cf": "694f69", "8887a8": "442e49" } diff --git a/public/images/pokemon/variant/889.json b/public/images/pokemon/variant/889.json index ec9903b04a3..3c172653f72 100644 --- a/public/images/pokemon/variant/889.json +++ b/public/images/pokemon/variant/889.json @@ -3,28 +3,24 @@ "2d2f7b": "102c2c", "396dce": "70a757", "2d48a8": "3c6959", - "080808": "080808", "f2db8a": "a1c9cd", "731a27": "1c163d", "eb363a": "614378", "ae2836": "422b61", "c2c3cf": "ffe0cc", "8887a8": "d69f97", - "34313e": "19142f", - "fdfdfd": "fdfdfd" + "34313e": "19142f" }, "2": { "2d2f7b": "244e61", "396dce": "6fc7c1", "2d48a8": "4797a4", - "080808": "080808", "f2db8a": "c4826b", "731a27": "615c7e", "eb363a": "e6ecff", "ae2836": "9fa7d0", "c2c3cf": "694f69", "8887a8": "442e49", - "34313e": "22192c", - "fdfdfd": "fdfdfd" + "34313e": "22192c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/890-eternamax.json b/public/images/pokemon/variant/890-eternamax.json index c34a226f4cb..654b1392e89 100644 --- a/public/images/pokemon/variant/890-eternamax.json +++ b/public/images/pokemon/variant/890-eternamax.json @@ -1,7 +1,6 @@ { "1": { "25134c": "162a52", - "010101": "010101", "3622a7": "406d89", "6461ba": "4989a6", "31245f": "264864", @@ -14,7 +13,6 @@ }, "2": { "25134c": "354e95", - "010101": "010101", "3622a7": "bfd1fa", "6461ba": "e1ecff", "31245f": "87a3dd", diff --git a/public/images/pokemon/variant/890.json b/public/images/pokemon/variant/890.json index 781b6e3821d..cb5bb7cd634 100644 --- a/public/images/pokemon/variant/890.json +++ b/public/images/pokemon/variant/890.json @@ -2,7 +2,6 @@ "1": { "26124d": "09113c", "3a15bc": "264864", - "010101": "010101", "b21833": "370c82", "eb1533": "5b5bc3", "9a2433": "561ab7", @@ -11,7 +10,6 @@ "fb2553": "3f2e91", "675cc5": "406d89", "ffbcbc": "508eff", - "12042d": "12042d", "e22dbc": "ee535a", "f18cd5": "ff7d54", "fefefe": "dbf2ff" @@ -19,7 +17,6 @@ "2": { "26124d": "4963af", "3a15bc": "bfd1fa", - "010101": "010101", "b21833": "7b2f0e", "eb1533": "cb7622", "9a2433": "732208", @@ -30,7 +27,6 @@ "ffbcbc": "de9335", "12042d": "2d276a", "e22dbc": "298fb9", - "f18cd5": "73e5dc", - "fefefe": "fefefe" + "f18cd5": "73e5dc" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/8901.json b/public/images/pokemon/variant/8901.json index 3029b8292b8..eb5c692452b 100644 --- a/public/images/pokemon/variant/8901.json +++ b/public/images/pokemon/variant/8901.json @@ -2,33 +2,12 @@ "0": { "4b271b": "491b24", "b8805f": "b24c57", - "764e38": "823343", - "564d4e": "564d4e", - "050505": "050505", - "bdb8b5": "bdb8b5", - "847c7a": "847c7a", - "34302e": "34302e", - "f83259": "f83259", - "f0bc75": "f0bc75", - "ff99ae": "ff99ae", - "be8b47": "be8b47", - "efefef": "efefef", - "47943f": "47943f" + "764e38": "823343" }, "1": { "4b271b": "20232d", "b8805f": "4d7269", "764e38": "354d4f", - "564d4e": "564d4e", - "050505": "050505", - "bdb8b5": "bdb8b5", - "847c7a": "847c7a", - "34302e": "34302e", - "f83259": "f83259", - "f0bc75": "f0bc75", - "ff99ae": "ff99ae", - "be8b47": "be8b47", - "efefef": "efefef", "47943f": "2781bc" }, "2": { @@ -36,7 +15,6 @@ "b8805f": "565084", "764e38": "423765", "564d4e": "5c486b", - "050505": "050505", "bdb8b5": "ede6eb", "847c7a": "c199ae", "34302e": "2a1a35", @@ -44,7 +22,6 @@ "f0bc75": "32c1ff", "ff99ae": "d3bfff", "be8b47": "2d76e2", - "efefef": "efefef", "47943f": "f83259" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/891.json b/public/images/pokemon/variant/891.json index 11fed4d7271..c0f6521085f 100644 --- a/public/images/pokemon/variant/891.json +++ b/public/images/pokemon/variant/891.json @@ -4,11 +4,8 @@ "d8d1cb": "d1c8ba", "b5ada6": "ad9a8a", "9194a2": "9e988d", - "101010": "101010", "fbfbfb": "f4f4f4", "c9cccd": "c8c4c3", - "262628": "262628", - "fefefe": "fefefe", "655e65": "5c5653", "cdab78": "c75d57", "f8f3a0": "f99350", @@ -20,15 +17,11 @@ "d8d1cb": "6e8b9b", "b5ada6": "475b68", "9194a2": "181b33", - "101010": "101010", "fbfbfb": "444f5b", "c9cccd": "2e3549", - "262628": "262628", - "fefefe": "fefefe", "655e65": "433e3f", "cdab78": "cd9e79", "f8f3a0": "f8cf9f", - "b37a55": "b37a55", "393539": "292124" }, "2": { @@ -36,15 +29,11 @@ "d8d1cb": "e8e8ff", "b5ada6": "9f9fcc", "9194a2": "7f1c27", - "101010": "101010", "fbfbfb": "d33b3d", "c9cccd": "a52139", - "262628": "262628", - "fefefe": "fefefe", "655e65": "8b8d99", "cdab78": "cc9278", "f8f3a0": "f7caa0", - "b37a55": "b37a55", "393539": "38383f" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/892-gigantamax-rapid.json b/public/images/pokemon/variant/892-gigantamax-rapid.json index de6dfd18c04..297aa8f6e55 100644 --- a/public/images/pokemon/variant/892-gigantamax-rapid.json +++ b/public/images/pokemon/variant/892-gigantamax-rapid.json @@ -1,12 +1,8 @@ { "0": { - "100d4f": "100d4f", "303ff1": "4550e6", "282d26": "212028", - "2b337d": "2b337d", "605f4d": "5a525b", - "010101": "010101", - "86a0fd": "86a0fd", "f5f5f5": "f4efe8", "9e6225": "8b222f", "d5a926": "b95826", diff --git a/public/images/pokemon/variant/892-gigantamax-single.json b/public/images/pokemon/variant/892-gigantamax-single.json index 5f2a6dbc509..5bbeb6c3b9b 100644 --- a/public/images/pokemon/variant/892-gigantamax-single.json +++ b/public/images/pokemon/variant/892-gigantamax-single.json @@ -2,12 +2,8 @@ "0": { "282d26": "25141f", "605f4d": "513b46", - "010101": "010101", - "570f0f": "570f0f", "e7140a": "d03932", "42473a": "382334", - "922718": "922718", - "fe7d70": "fe7d70", "f5f5f5": "f4efe8", "9e6225": "8b222f", "fffa60": "ff9736", diff --git a/public/images/pokemon/variant/892-rapid-strike.json b/public/images/pokemon/variant/892-rapid-strike.json index d673eb22ed6..85633b70f6a 100644 --- a/public/images/pokemon/variant/892-rapid-strike.json +++ b/public/images/pokemon/variant/892-rapid-strike.json @@ -4,47 +4,36 @@ "605f4d": "513b46", "8d8c8e": "957961", "6b6574": "725444", - "010101": "010101", - "fcfcfc": "fcfcfc", "9e6225": "8b222f", "282d26": "25141f", "fffa60": "ff9736", "d5a926": "b95826", - "b9b9b9": "b9b9b9", - "42473a": "382334", - "b4b4b4": "b4b4b4", - "fefefe": "fefefe" + "42473a": "382334" }, "1": { "4f4b58": "242a3f", "605f4d": "444f5b", "8d8c8e": "809ba3", "6b6574": "4c6877", - "010101": "010101", "fcfcfc": "b3c0c6", "9e6225": "272735", "282d26": "181b33", "fffa60": "616368", "d5a926": "494b54", "b9b9b9": "768187", - "42473a": "2e3549", - "b4b4b4": "b4b4b4", - "fefefe": "fefefe" + "42473a": "2e3549" }, "2": { "4f4b58": "56546b", "605f4d": "213199", "8d8c8e": "e8e8ff", "6b6574": "9f9fcc", - "010101": "010101", "fcfcfc": "4169d3", "9e6225": "875537", "282d26": "07073f", "fffa60": "f7caa0", "d5a926": "cc9278", "b9b9b9": "2e4ed1", - "42473a": "111a6b", - "b4b4b4": "b4b4b4", - "fefefe": "fefefe" + "42473a": "111a6b" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/892.json b/public/images/pokemon/variant/892.json index 678e64f952c..64c0182bf02 100644 --- a/public/images/pokemon/variant/892.json +++ b/public/images/pokemon/variant/892.json @@ -1,23 +1,17 @@ { "0": { "605f4d": "513b46", - "010101": "010101", - "fcfcfc": "fcfcfc", "4f4b58": "4a2e27", - "b9b9b9": "b9b9b9", "8d8c8e": "957961", "6b6574": "725444", "282d26": "25141f", "42473a": "382334", "9e6225": "8b222f", - "b4b4b4": "b4b4b4", "fffa60": "ff9736", - "fefefe": "fefefe", "d5a926": "b95826" }, "1": { "605f4d": "444f5b", - "010101": "010101", "fcfcfc": "b3c0c6", "4f4b58": "263138", "b9b9b9": "768187", @@ -26,14 +20,11 @@ "282d26": "181b33", "42473a": "2e3549", "9e6225": "272735", - "b4b4b4": "b4b4b4", "fffa60": "616368", - "fefefe": "fefefe", "d5a926": "494b54" }, "2": { "605f4d": "870e2a", - "010101": "010101", "fcfcfc": "d33b3d", "4f4b58": "56546b", "b9b9b9": "a52139", @@ -42,9 +33,7 @@ "282d26": "3d0015", "42473a": "51081e", "9e6225": "875537", - "b4b4b4": "b4b4b4", "fffa60": "f7caa0", - "fefefe": "fefefe", "d5a926": "cc9278" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/896.json b/public/images/pokemon/variant/896.json index afb9c0209a0..116eed94e9d 100644 --- a/public/images/pokemon/variant/896.json +++ b/public/images/pokemon/variant/896.json @@ -1,7 +1,6 @@ { "0": { "8cacdd": "8f84c9", - "101010": "101010", "bbd2ff": "b9abea", "eeeef3": "f6ebf6", "cbc1cc": "c9c0d4", @@ -13,7 +12,6 @@ }, "1": { "8cacdd": "41d5b3", - "101010": "101010", "bbd2ff": "9dffff", "eeeef3": "d7ffff", "cbc1cc": "90f6da", @@ -25,7 +23,6 @@ }, "2": { "8cacdd": "bc393b", - "101010": "101010", "bbd2ff": "f68c79", "eeeef3": "fde3d6", "cbc1cc": "f3bca6", diff --git a/public/images/pokemon/variant/897.json b/public/images/pokemon/variant/897.json index d0171d386fa..9e8ec916d03 100644 --- a/public/images/pokemon/variant/897.json +++ b/public/images/pokemon/variant/897.json @@ -1,7 +1,6 @@ { "1": { "3c3c3c": "622d51", - "101010": "101010", "525852": "904c75", "00285c": "6e1817", "49478f": "932f27", @@ -14,7 +13,6 @@ }, "2": { "3c3c3c": "3a6965", - "101010": "101010", "525852": "5c8a7b", "00285c": "0d2222", "49478f": "13312b", diff --git a/public/images/pokemon/variant/898-ice.json b/public/images/pokemon/variant/898-ice.json index b74cf26d567..3f01947a78d 100644 --- a/public/images/pokemon/variant/898-ice.json +++ b/public/images/pokemon/variant/898-ice.json @@ -1,7 +1,6 @@ { "0": { "8cacdd": "8f84c9", - "101010": "101010", "bbd2ff": "b9abea", "004037": "00403c", "007766": "00776f", @@ -9,7 +8,6 @@ "eeeef3": "f6ebf6", "4d524d": "6a5837", "cbc1cc": "c9c0d4", - "fbfbfb": "fbfbfb", "c6c7cc": "ccc6d1", "d1c8be": "d7c881", "9e8f87": "ae8b50", @@ -22,7 +20,6 @@ }, "1": { "8cacdd": "41d5b3", - "101010": "101010", "bbd2ff": "9dffff", "004037": "00124d", "007766": "345ab5", @@ -30,8 +27,6 @@ "eeeef3": "d7ffff", "4d524d": "38255f", "cbc1cc": "90f6da", - "fbfbfb": "fbfbfb", - "c6c7cc": "c6c7cc", "d1c8be": "ba9ded", "9e8f87": "927ec4", "003071": "014837", @@ -43,7 +38,6 @@ }, "2": { "8cacdd": "bc393b", - "101010": "101010", "bbd2ff": "f68c79", "004037": "3c1522", "007766": "88253e", diff --git a/public/images/pokemon/variant/898-shadow.json b/public/images/pokemon/variant/898-shadow.json index 8394ad0f19e..416ecb7861e 100644 --- a/public/images/pokemon/variant/898-shadow.json +++ b/public/images/pokemon/variant/898-shadow.json @@ -3,20 +3,14 @@ "004037": "00403c", "007766": "00776f", "00584b": "005852", - "3c3c3c": "3c3c3c", "4d524d": "6a5837", - "101010": "101010", "525852": "5d5458", - "fbfbfb": "fbfbfb", "00285c": "632741", "c7c8cd": "ccc6d1", "d1c8be": "d7c881", "9e8f87": "ae8b50", "49478f": "894061", "7c5bcf": "d05a82", - "d9a4e3": "d9a4e3", - "fcfcfc": "fcfcfc", - "755179": "755179", "3b3b3b": "6a5837", "00285b": "3b2948", "504e8e": "80447d", @@ -28,11 +22,8 @@ "00584b": "183986", "3c3c3c": "622d51", "4d524d": "38255f", - "101010": "101010", "525852": "904c75", - "fbfbfb": "fbfbfb", "00285c": "6e1817", - "c7c8cd": "c7c8cd", "d1c8be": "ba9ded", "9e8f87": "927ec4", "49478f": "932f27", @@ -51,7 +42,6 @@ "00584b": "601b35", "3c3c3c": "3a6965", "4d524d": "181935", - "101010": "101010", "525852": "5c8a7b", "fbfbfb": "fefdeb", "00285c": "0d2222", diff --git a/public/images/pokemon/variant/898.json b/public/images/pokemon/variant/898.json index ccc39d3a5eb..ac5b85b955f 100644 --- a/public/images/pokemon/variant/898.json +++ b/public/images/pokemon/variant/898.json @@ -6,9 +6,7 @@ "00584b": "005852", "504e8e": "71517a", "007766": "00776f", - "101010": "101010", "525852": "6a5837", - "fcfcfc": "fcfcfc", "c7c8cd": "ccc6d1", "9e8f87": "ae8b50", "d1c8be": "d7c881", @@ -22,9 +20,7 @@ "00584b": "183986", "504e8e": "c64883", "007766": "345ab5", - "101010": "101010", "525852": "38255f", - "fcfcfc": "fcfcfc", "c7c8cd": "ccc6d1", "9e8f87": "927ec4", "d1c8be": "ba9ded", @@ -38,7 +34,6 @@ "00584b": "601b35", "504e8e": "cc8c49", "007766": "88253e", - "101010": "101010", "525852": "181935", "fcfcfc": "fefdeb", "c7c8cd": "c4bdb3", diff --git a/public/images/pokemon/variant/9-gigantamax.json b/public/images/pokemon/variant/9-gigantamax.json index a173fe1b242..03200447167 100644 --- a/public/images/pokemon/variant/9-gigantamax.json +++ b/public/images/pokemon/variant/9-gigantamax.json @@ -1,17 +1,12 @@ { "1": { - "949494": "949494", "352e27": "2c2525", - "101010": "101010", - "cdcdd5": "cdcdd5", - "fdfdfd": "fdfdfd", "494136": "3e322f", "5f5647": "504945", "083962": "204c6d", "5a8bcd": "5fc7a3", "2062ac": "33808c", "6ce8d6": "9bffa4", - "4a4a4a": "4a4a4a", "c75435": "b44839", "94ace6": "50b176" } diff --git a/public/images/pokemon/variant/900.json b/public/images/pokemon/variant/900.json index 585467bea2a..3c341eaa899 100644 --- a/public/images/pokemon/variant/900.json +++ b/public/images/pokemon/variant/900.json @@ -1,30 +1,14 @@ { "1": { - "2b1f22": "2b1f22", - "3a2e2f": "3a2e2f", - "4d3d3e": "4d3d3e", - "080808": "080808", - "6a5856": "6a5856", - "96856d": "96856d", - "fcfcfc": "fcfcfc", "6b563a": "221a69", - "c8bdb7": "c8bdb7", "e2b561": "4b84d2", - "af7845": "354da7", - "e3d1ae": "e3d1ae" + "af7845": "354da7" }, "2": { - "2b1f22": "2b1f22", - "3a2e2f": "3a2e2f", "4d3d3e": "808080", - "080808": "080808", "6a5856": "424242", - "96856d": "96856d", - "fcfcfc": "fcfcfc", "6b563a": "a54200", - "c8bdb7": "c8bdb7", "e2b561": "ffde00", - "af7845": "e68400", - "e3d1ae": "e3d1ae" + "af7845": "e68400" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/901.json b/public/images/pokemon/variant/901.json index fe8f810700f..171e44c62ee 100644 --- a/public/images/pokemon/variant/901.json +++ b/public/images/pokemon/variant/901.json @@ -4,16 +4,9 @@ "231a18": "0c1515", "63443d": "31563f", "502f29": "273b32", - "0f0f0f": "0f0f0f", - "77655b": "77655b", - "9c8d86": "9c8d86", - "4b4236": "4b4236", "ca8b35": "c48e81", "fec643": "f7eee1", - "fcfcfc": "fcfcfc", "25521f": "557f24", - "fec672": "f2cab8", - "95908a": "95908a", - "b4b4b1": "b4b4b1" + "fec672": "f2cab8" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/903.json b/public/images/pokemon/variant/903.json index 6e6eff76441..7414a6891f4 100644 --- a/public/images/pokemon/variant/903.json +++ b/public/images/pokemon/variant/903.json @@ -9,9 +9,7 @@ "b07528": "6e6f6f", "6a56b3": "722738", "ecb629": "a7a7a7", - "f8feff": "f8feff", "36326d": "210609", - "9b98a9": "9b98a9", "de2f41": "31dabb", "8e2458": "12968b", "eb357c": "31dabb" diff --git a/public/images/pokemon/variant/911.json b/public/images/pokemon/variant/911.json index b3beb1e23c3..a1c5345d79a 100644 --- a/public/images/pokemon/variant/911.json +++ b/public/images/pokemon/variant/911.json @@ -4,35 +4,24 @@ "f45511": "91dada", "ffd017": "b4e6e6", "ee8b08": "81d5d5", - "5b5c5e": "5b5c5e", "fcfcfc": "cccccc", "9fa0a2": "758a70", - "333c36": "333c36", "a334d8": "9524ca", "ff4a3c": "366565", - "0f0f0f": "0f0f0f", "741010": "152828", "ba3227": "234141", - "4e2c85": "4e2c85", - "ffa252": "dbf3f3", - "000000": "000000" + "ffa252": "dbf3f3" }, "2": { "d20000": "0ea631", "f45511": "2fe757", "ffd017": "4ffc75", "ee8b08": "08e739", - "5b5c5e": "5b5c5e", "fcfcfc": "e5ffec", "9fa0a2": "82977c", - "333c36": "333c36", - "a334d8": "a334d8", "ff4a3c": "38583f", - "0f0f0f": "0f0f0f", "741010": "162319", "ba3227": "243929", - "4e2c85": "4e2c85", - "ffa252": "a6ffba", - "000000": "000000" + "ffa252": "a6ffba" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/912.json b/public/images/pokemon/variant/912.json index c366d573c0a..b99e7fa7843 100644 --- a/public/images/pokemon/variant/912.json +++ b/public/images/pokemon/variant/912.json @@ -4,14 +4,12 @@ "3686b1": "d96536", "2fbee8": "e69c51", "84d7ff": "f7ca7b", - "0f0f0f": "0f0f0f", "f2fdff": "fff0d4", "4d6373": "a05f27", "becde4": "d79f63", "005ba2": "7f0e0b", "7999bd": "b9865a", "f6fbfc": "ffe3b0", - "ffffff": "ffffff", "6a6a41": "3b2e28", "aca462": "5b5450", "f6f64a": "868382" @@ -21,14 +19,12 @@ "3686b1": "1c7962", "2fbee8": "33b37e", "84d7ff": "58d299", - "0f0f0f": "0f0f0f", "f2fdff": "a6f5bb", "4d6373": "2d185d", "becde4": "5137a0", "005ba2": "0e3f31", "7999bd": "422c84", "f6fbfc": "6767e3", - "ffffff": "ffffff", "6a6a41": "601a0d", "aca462": "bb602f", "f6f64a": "f49651" diff --git a/public/images/pokemon/variant/914.json b/public/images/pokemon/variant/914.json index 1204b6c99a1..eeb547c68ba 100644 --- a/public/images/pokemon/variant/914.json +++ b/public/images/pokemon/variant/914.json @@ -2,7 +2,6 @@ "2": { "3d7a71": "541222", "55dbe6": "f15e76", - "0f0f0f": "0f0f0f", "394bee": "1d6c42", "282a4d": "072a2b", "419bc2": "a22f49", @@ -13,7 +12,6 @@ "a24720": "eac7b4", "eda936": "ffa564", "803213": "4b251b", - "ffffff": "ffffff", "efffff": "4b40be", "cb7e29": "c76740", "8ea6a8": "3b188e", diff --git a/public/images/pokemon/variant/919.json b/public/images/pokemon/variant/919.json index c06063fba68..c04f4510a9f 100644 --- a/public/images/pokemon/variant/919.json +++ b/public/images/pokemon/variant/919.json @@ -3,7 +3,6 @@ "434863": "312d28", "26253d": "1b1916", "607493": "4c463e", - "0f0f0f": "0f0f0f", "879ab2": "6c665d", "c5c2c5": "a39d62", "f7f7ff": "dbd4a2", @@ -19,13 +18,7 @@ "434863": "2a5549", "26253d": "162d2a", "607493": "4a9058", - "0f0f0f": "0f0f0f", "879ab2": "71bb74", - "c5c2c5": "c5c2c5", - "f7f7ff": "f7f7ff", - "6e6b82": "6e6b82", - "373547": "373547", - "efefef": "efefef", "7c451b": "80223b", "b59a13": "a93930", "ffc608": "c64e2f", @@ -35,7 +28,6 @@ "434863": "611d3a", "26253d": "350f21", "607493": "9a3545", - "0f0f0f": "0f0f0f", "879ab2": "c84d52", "c5c2c5": "343434", "f7f7ff": "4a4a4a", diff --git a/public/images/pokemon/variant/924.json b/public/images/pokemon/variant/924.json index 752fd7d8840..ce42f528bcb 100644 --- a/public/images/pokemon/variant/924.json +++ b/public/images/pokemon/variant/924.json @@ -4,7 +4,6 @@ "f9f9f9": "cddef1", "393a44": "344854", "b8b9c0": "9c89d2", - "0f0f0f": "0f0f0f", "888b97": "5a6e8f", "567d9a": "755382", "b8ccde": "a3a6ef", @@ -15,7 +14,6 @@ "f9f9f9": "b39090", "393a44": "3f0f0f", "b8b9c0": "785e5e", - "0f0f0f": "0f0f0f", "888b97": "6e4343", "567d9a": "a15d55", "b8ccde": "eaafb2", @@ -26,7 +24,6 @@ "f9f9f9": "757373", "393a44": "27272e", "b8b9c0": "4b4b4d", - "0f0f0f": "0f0f0f", "888b97": "3c3c3d", "567d9a": "471910", "b8ccde": "7a5b5d", diff --git a/public/images/pokemon/variant/925-four.json b/public/images/pokemon/variant/925-four.json index a72e775844b..17beec20972 100644 --- a/public/images/pokemon/variant/925-four.json +++ b/public/images/pokemon/variant/925-four.json @@ -4,7 +4,6 @@ "f9f9f9": "cddef1", "393a44": "344854", "b8b9c0": "9c89d2", - "0f0f0f": "0f0f0f", "888b97": "5a6e8f", "567d9a": "755382", "b8ccde": "a3a6ef", @@ -16,7 +15,6 @@ "f9f9f9": "b39090", "393a44": "3f0f0f", "b8b9c0": "785e5e", - "0f0f0f": "0f0f0f", "888b97": "6e4343", "567d9a": "a15d55", "b8ccde": "eaafb2", diff --git a/public/images/pokemon/variant/925-three.json b/public/images/pokemon/variant/925-three.json index 89577c9d44a..d0ee20c0536 100644 --- a/public/images/pokemon/variant/925-three.json +++ b/public/images/pokemon/variant/925-three.json @@ -16,7 +16,6 @@ "f9f9f9": "b39090", "393a44": "3f0f0f", "b8b9c0": "785e5e", - "0f0f0f": "0f0f0f", "888b97": "6e4343", "567d9a": "a15d55", "b8ccde": "eaafb2", @@ -28,7 +27,6 @@ "f9f9f9": "757373", "393a44": "27272e", "b8b9c0": "4b4b4d", - "0f0f0f": "0f0f0f", "888b97": "3c3c3d", "567d9a": "471910", "b8ccde": "7a5b5d", diff --git a/public/images/pokemon/variant/93.json b/public/images/pokemon/variant/93.json index 21243b8f93d..77cc3ca23f9 100644 --- a/public/images/pokemon/variant/93.json +++ b/public/images/pokemon/variant/93.json @@ -3,12 +3,9 @@ "845a6b": "8e699a", "524263": "52426b", "ad6bce": "caaddf", - "101010": "101010", "c58cce": "dfcaee", "b51919": "2963d6", "de4a31": "5a94ff", - "d6d6d6": "d6d6d6", - "ffffff": "ffffff", "d6a5de": "d6a5e6", "6b0000": "0831a5" }, @@ -16,12 +13,9 @@ "845a6b": "631b3f", "524263": "380508", "ad6bce": "8e395f", - "101010": "101010", "c58cce": "c06380", "b51919": "7ee75c", "de4a31": "e4f67c", - "d6d6d6": "d6d6d6", - "ffffff": "ffffff", "d6a5de": "ef8d9f", "6b0000": "2eb063" }, @@ -29,12 +23,9 @@ "845a6b": "302433", "524263": "1a1320", "ad6bce": "4c4354", - "101010": "101010", "c58cce": "82748c", "b51919": "e47750", "de4a31": "fae277", - "d6d6d6": "d6d6d6", - "ffffff": "ffffff", "d6a5de": "d6a5e6", "6b0000": "b72b47" } diff --git a/public/images/pokemon/variant/932.json b/public/images/pokemon/variant/932.json index cadab6eeec4..992a25b53e8 100644 --- a/public/images/pokemon/variant/932.json +++ b/public/images/pokemon/variant/932.json @@ -1,7 +1,6 @@ { "1": { "998694": "966480", - "564d57": "564d57", "fcfcfc": "f9c2cd", "8e5f57": "9ba7b0", "724747": "76828b", @@ -9,7 +8,6 @@ "c0937c": "deeaf3", "472727": "3d4952", "e4c2b6": "f9ffff", - "0f0f0f": "0f0f0f", "765c4b": "703e4c", "eeac31": "ed3336" } diff --git a/public/images/pokemon/variant/933.json b/public/images/pokemon/variant/933.json index e63b668cc87..3756a0a9706 100644 --- a/public/images/pokemon/variant/933.json +++ b/public/images/pokemon/variant/933.json @@ -1,6 +1,5 @@ { "1": { - "564d57": "564d57", "64514d": "6d7982", "fcfcfc": "f9c2cd", "bfb4ba": "bc8296", @@ -11,8 +10,7 @@ "8a7367": "a0acb6", "eeac31": "ed3336", "f6e21a": "ffe8f3", - "44332e": "3a464f", - "0f0f0f": "0f0f0f" + "44332e": "3a464f" }, "2": { "564d57": "444251", @@ -26,7 +24,6 @@ "8a7367": "608263", "eeac31": "551d8f", "f6e21a": "e1b1fb", - "44332e": "2b3f3f", - "0f0f0f": "0f0f0f" + "44332e": "2b3f3f" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/934.json b/public/images/pokemon/variant/934.json index 4710c813afe..a99340c38be 100644 --- a/public/images/pokemon/variant/934.json +++ b/public/images/pokemon/variant/934.json @@ -7,7 +7,6 @@ "96675a": "adbac3", "8a7367": "949fa8", "c3927b": "d8e9f5", - "0f0f0f": "0f0f0f", "44332e": "3a464f", "64514d": "6d7982", "ea881c": "d63e6e", @@ -23,7 +22,6 @@ "96675a": "5d9157", "8a7367": "608263", "c3927b": "7fc17c", - "0f0f0f": "0f0f0f", "44332e": "2b3f3f", "64514d": "3d5e47", "ea881c": "551d8f", diff --git a/public/images/pokemon/variant/94-gigantamax.json b/public/images/pokemon/variant/94-gigantamax.json index 2e9d2f5824c..c8053904556 100644 --- a/public/images/pokemon/variant/94-gigantamax.json +++ b/public/images/pokemon/variant/94-gigantamax.json @@ -3,14 +3,11 @@ "5a4a9c": "a89dc4", "4a294a": "091659", "b48bbd": "fefefe", - "101010": "101010", "9473b4": "fcf4fc", "7b62a4": "d1bcd6", "ff8337": "010202", "ffff00": "21252a", "cc1e5b": "2963d6", - "fff6ff": "fff6ff", - "bdacbd": "bdacbd", "ba325a": "352936", "920634": "143e92", "743a5b": "7492d5", diff --git a/public/images/pokemon/variant/94.json b/public/images/pokemon/variant/94.json index c1d7c6358ae..5425501c462 100644 --- a/public/images/pokemon/variant/94.json +++ b/public/images/pokemon/variant/94.json @@ -3,21 +3,17 @@ "5a4a9c": "9e85a6", "4a294a": "634b63", "b58cbd": "ebdbf7", - "101010": "101010", "9473b5": "cbb7da", "7b63a5": "d1bcd6", "ff5a5a": "2963d6", "ff9494": "5a94ff", - "bdadbd": "bdadbd", "fff7ff": "ffffff", - "6b637b": "6b637b", "ded6de": "dedede" }, "1": { "5a4a9c": "4a1f36", "4a294a": "1b0917", "b58cbd": "c56f8a", - "101010": "101010", "9473b5": "8d3e61", "7b63a5": "6f284a", "ff5a5a": "e79c39", @@ -31,7 +27,6 @@ "5a4a9c": "302433", "4a294a": "1a1320", "b58cbd": "7b6888", - "101010": "101010", "9473b5": "3f324a", "7b63a5": "3b2b3e", "ff5a5a": "a9223d", diff --git a/public/images/pokemon/variant/940.json b/public/images/pokemon/variant/940.json index a84fb9ed44d..8613ad30761 100644 --- a/public/images/pokemon/variant/940.json +++ b/public/images/pokemon/variant/940.json @@ -5,11 +5,8 @@ "181a1b": "271945", "ffcd37": "7dffc0", "91a5c3": "e39fc5", - "f9f9f9": "f9f9f9", "be8f29": "5dd9c8", - "0f0f0f": "0f0f0f", "643c28": "433382", - "73bbbf": "73bbbf", "f1a156": "ce87fa", "c27741": "9a5fd9", "826426": "1b9ea1", @@ -23,9 +20,7 @@ "181a1b": "532d61", "ffcd37": "d9647b", "91a5c3": "ba73b2", - "f9f9f9": "f9f9f9", "be8f29": "b3466a", - "0f0f0f": "0f0f0f", "643c28": "2b2745", "73bbbf": "ffcf4a", "f1a156": "745b85", diff --git a/public/images/pokemon/variant/941.json b/public/images/pokemon/variant/941.json index 3c36d6a91da..a9b2ac62402 100644 --- a/public/images/pokemon/variant/941.json +++ b/public/images/pokemon/variant/941.json @@ -6,12 +6,10 @@ "aa7e24": "3dd1cc", "ffcd37": "6ef5c8", "8c898c": "9c5bd9", - "fdfdfd": "fdfdfd", "2b1717": "773185", "73bbbf": "de82ff", "441e21": "d16492", "692a2f": "ff9ec6", - "0f0f0f": "0f0f0f", "624a20": "217991", "37415a": "55348a", "272a2e": "3b227a", @@ -24,12 +22,10 @@ "aa7e24": "c44f6c", "ffcd37": "e3667d", "8c898c": "cf7827", - "fdfdfd": "fdfdfd", "2b1717": "3a3466", "73bbbf": "ffcf4a", "441e21": "51467a", "692a2f": "776294", - "0f0f0f": "0f0f0f", "624a20": "8a2f62", "37415a": "723b80", "272a2e": "56286b", diff --git a/public/images/pokemon/variant/948.json b/public/images/pokemon/variant/948.json index 01b0e57a61d..25ce7335bcb 100644 --- a/public/images/pokemon/variant/948.json +++ b/public/images/pokemon/variant/948.json @@ -7,7 +7,6 @@ "976924": "a50927", "ffec37": "ff6237", "fef8f5": "fff4f1", - "000000": "000000", "eaba2b": "b9352b", "d2bbac": "e2bea6", "886b59": "8d5740" @@ -20,7 +19,6 @@ "976924": "254087", "ffec37": "4b86bd", "fef8f5": "ffede5", - "000000": "000000", "eaba2b": "2e609b", "d2bbac": "d8bdab", "886b59": "ad927b" diff --git a/public/images/pokemon/variant/949.json b/public/images/pokemon/variant/949.json index efda1b10f0b..c04cc4b9d0d 100644 --- a/public/images/pokemon/variant/949.json +++ b/public/images/pokemon/variant/949.json @@ -3,38 +3,30 @@ "404040": "4b3073", "282828": "33134d", "5f5f5f": "7462ad", - "000000": "000000", "ede652": "1672a1", "86433c": "a50927", "ca7268": "d41929", "d6938b": "ff4737", "e7bcb8": "ff9d6d", - "ffffff": "ffffff", "cdae52": "0c4a83", "c2ae83": "b29785", "f5f9b9": "d6c1b1", - "f9f1b9": "f9f1b9", "94724b": "60473c", - "936839": "042259", - "bdbdbd": "bdbdbd" + "936839": "042259" }, "2": { "404040": "70150e", "282828": "460001", "5f5f5f": "c64d30", - "000000": "000000", "ede652": "dd7731", "86433c": "401e54", "ca7268": "613a8a", "d6938b": "8e65c1", "e7bcb8": "dd9dff", - "ffffff": "ffffff", "cdae52": "af3610", "c2ae83": "d9b591", "f5f9b9": "ffe8d6", - "f9f1b9": "f9f1b9", "94724b": "6f492c", - "936839": "7e1200", - "bdbdbd": "bdbdbd" + "936839": "7e1200" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/951.json b/public/images/pokemon/variant/951.json index 11e0575d7f4..50cf97f8ccf 100644 --- a/public/images/pokemon/variant/951.json +++ b/public/images/pokemon/variant/951.json @@ -6,7 +6,6 @@ "2e302f": "1f0c17", "3f9a5f": "be8a84", "2f683c": "9d6b5b", - "0f0f0f": "0f0f0f", "5c7c5c": "4c292f", "79b97b": "704f4f", "a6b496": "facf81", @@ -21,7 +20,6 @@ "2e302f": "3b2e3a", "3f9a5f": "a78bdc", "2f683c": "7456a8", - "0f0f0f": "0f0f0f", "5c7c5c": "8e7eb1", "79b97b": "cfbfe6", "a6b496": "fa95d1", diff --git a/public/images/pokemon/variant/952.json b/public/images/pokemon/variant/952.json index cdf83f43e8f..485d60ab51f 100644 --- a/public/images/pokemon/variant/952.json +++ b/public/images/pokemon/variant/952.json @@ -3,8 +3,6 @@ "294e25": "55321d", "51c444": "facf81", "3f8147": "d38c43", - "0f0f0f": "0f0f0f", - "1f1f1f": "1f1f1f", "641e1c": "8c2f0a", "a23424": "bb5a2b", "ef5131": "f8975d", @@ -12,7 +10,6 @@ "cdcdcd": "ffd2cc", "42804b": "9d6b5b", "dd5800": "ffb676", - "192021": "192021", "fffff7": "ffd2cc", "eff3e6": "ffd2cc", "476b51": "704f4f", @@ -23,8 +20,6 @@ "294e25": "3f3399", "51c444": "90c3ea", "3f8147": "627bcd", - "0f0f0f": "0f0f0f", - "1f1f1f": "1f1f1f", "641e1c": "8c1f39", "a23424": "cb486d", "ef5131": "f77baf", @@ -32,9 +27,6 @@ "cdcdcd": "f8f3fe", "42804b": "9884d3", "dd5800": "f597cf", - "192021": "192021", - "fffff7": "fffff7", - "eff3e6": "eff3e6", "476b51": "f8f3fe", "262826": "9986b3", "3c5042": "cfbfe6" diff --git a/public/images/pokemon/variant/953.json b/public/images/pokemon/variant/953.json index 417229d550b..4e0efbdcefa 100644 --- a/public/images/pokemon/variant/953.json +++ b/public/images/pokemon/variant/953.json @@ -8,7 +8,6 @@ "37332b": "104139", "b96c26": "2f7410", "575244": "18734a", - "0f0f0f": "0f0f0f", "777463": "199e46", "4d4530": "b29c3e", "b0a766": "f9fba2", @@ -25,7 +24,6 @@ "37332b": "261031", "b96c26": "4792bd", "575244": "5e2d72", - "0f0f0f": "0f0f0f", "777463": "8358a1", "4d4530": "534b8c", "b0a766": "c9dbac", diff --git a/public/images/pokemon/variant/954.json b/public/images/pokemon/variant/954.json index efdb5836805..b79e72aef37 100644 --- a/public/images/pokemon/variant/954.json +++ b/public/images/pokemon/variant/954.json @@ -9,7 +9,6 @@ "f8f8f8": "fbf3ab", "3f4f5c": "523223", "5ea2c6": "7d4538", - "181818": "181818", "6bc0dd": "b05858", "98979d": "d9bd6f", "c94c5a": "159464", @@ -25,7 +24,6 @@ "f8f8f8": "432f77", "3f4f5c": "21214c", "5ea2c6": "616481", - "181818": "181818", "6bc0dd": "9e9fb6", "98979d": "221a4c", "c94c5a": "4c92c5", diff --git a/public/images/pokemon/variant/957.json b/public/images/pokemon/variant/957.json index aa15c60152b..943e7876c41 100644 --- a/public/images/pokemon/variant/957.json +++ b/public/images/pokemon/variant/957.json @@ -4,7 +4,6 @@ "ecd0d0": "f2d5cb", "aa848f": "ad858d", "312b33": "3f2319", - "0f0f0f": "0f0f0f", "ada1c5": "cb836c", "897194": "8b5745", "4a3670": "532835", @@ -12,8 +11,6 @@ "ae597d": "e07d97", "644f9b": "6a3443", "a74167": "993868", - "ec558c": "c65f7e", - "fcfcfc": "fcfcfc", - "585ea3": "585ea3" + "ec558c": "c65f7e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/958.json b/public/images/pokemon/variant/958.json index 6ac6a705fdd..52b921a4d39 100644 --- a/public/images/pokemon/variant/958.json +++ b/public/images/pokemon/variant/958.json @@ -3,12 +3,10 @@ "522e45": "201a3d", "ecd0d0": "f3e0ff", "aa848f": "c0b3e2", - "0f0f0f": "0f0f0f", "e991b5": "a074b0", "ec558c": "7a4889", "ae597d": "795bad", "a74167": "44306b", - "fcfcfc": "fcfcfc", "585ea3": "42895c", "312b33": "1e1d30", "ada1c5": "5b5a68", diff --git a/public/images/pokemon/variant/962.json b/public/images/pokemon/variant/962.json index 53dfdb4f11b..fa419376421 100644 --- a/public/images/pokemon/variant/962.json +++ b/public/images/pokemon/variant/962.json @@ -2,7 +2,6 @@ "0": { "342930": "3e1d26", "4a3942": "60354a", - "0f0f0f": "0f0f0f", "665b60": "924f57", "b9aaaf": "dd9f9d", "efe3e1": "f6cbc4", @@ -18,7 +17,6 @@ "1": { "342930": "1e382a", "4a3942": "395740", - "0f0f0f": "0f0f0f", "665b60": "404b22", "b9aaaf": "c6ca8e", "efe3e1": "e8e8c0", @@ -34,7 +32,6 @@ "2": { "342930": "754156", "4a3942": "a5777f", - "0f0f0f": "0f0f0f", "665b60": "211f45", "b9aaaf": "453863", "efe3e1": "67548a", diff --git a/public/images/pokemon/variant/967.json b/public/images/pokemon/variant/967.json index 5f527aa11fd..55d9a079729 100644 --- a/public/images/pokemon/variant/967.json +++ b/public/images/pokemon/variant/967.json @@ -3,28 +3,19 @@ "384a35": "464354", "1c2916": "272431", "54654e": "67637a", - "b9b7b3": "b9b7b3", - "0f0f0f": "0f0f0f", "f16b32": "bead9d", "607d6d": "6e76a9", "75b07d": "9299c7", - "fcfcfc": "fcfcfc", - "34453d": "444a71", - "323943": "323943", - "222328": "222328", - "4b565c": "4b565c", - "e2e9d7": "e2e9d7" + "34453d": "444a71" }, "2": { "384a35": "5d0c0c", "1c2916": "43060b", "54654e": "942d22", "b9b7b3": "c0ab8b", - "0f0f0f": "0f0f0f", "f16b32": "8c63d2", "607d6d": "6b2c31", "75b07d": "a95d50", - "fcfcfc": "fcfcfc", "34453d": "531d27", "323943": "502b2a", "222328": "371516", diff --git a/public/images/pokemon/variant/969.json b/public/images/pokemon/variant/969.json index e1f44ca1ddd..96e3e78e40c 100644 --- a/public/images/pokemon/variant/969.json +++ b/public/images/pokemon/variant/969.json @@ -8,7 +8,6 @@ "3d464b": "44111b", "4d6076": "6b1933", "ffff31": "dde4e6", - "0f0f0f": "0f0f0f", "5a869c": "bd2646", "635181": "527492", "453b4d": "2c445a", @@ -25,7 +24,6 @@ "3d464b": "2d293a", "4d6076": "433e53", "ffff31": "c0efff", - "0f0f0f": "0f0f0f", "5a869c": "656b8b", "635181": "193a1c", "453b4d": "0d240f", diff --git a/public/images/pokemon/variant/970.json b/public/images/pokemon/variant/970.json index 3eda121f7d1..1d1805163fd 100644 --- a/public/images/pokemon/variant/970.json +++ b/public/images/pokemon/variant/970.json @@ -5,7 +5,6 @@ "5de0aa": "fbce5d", "262b6b": "323b51", "3253d6": "577b81", - "0f0f0f": "0f0f0f", "a02c75": "3f4a6f", "2c369a": "435469", "e0548f": "758eb4", @@ -22,7 +21,6 @@ "5de0aa": "df543b", "262b6b": "bb7154", "3253d6": "ffedd1", - "0f0f0f": "0f0f0f", "a02c75": "1b3842", "2c369a": "e1a47a", "e0548f": "235c65", diff --git a/public/images/pokemon/variant/974.json b/public/images/pokemon/variant/974.json index 6d2662547de..bba74da0831 100644 --- a/public/images/pokemon/variant/974.json +++ b/public/images/pokemon/variant/974.json @@ -4,16 +4,12 @@ "bebaba": "ee9065", "524951": "661427", "efefef": "ffcc9e", - "0f0f0f": "0f0f0f", "a29793": "c85442", "a44667": "2c7193", "c7639c": "48aeba", "f493c9": "71e2d3", - "fcfcfc": "fcfcfc", "832041": "6a193e", - "c9c9c9": "c9c9c9", "cd394a": "ac5070", - "5e5e5e": "5e5e5e", "dc7569": "e37c8e" }, "2": { @@ -21,16 +17,12 @@ "bebaba": "2a607f", "524951": "172651", "efefef": "438aa0", - "0f0f0f": "0f0f0f", "a29793": "1c426b", "a44667": "ae664a", "c7639c": "daa470", "f493c9": "ffdfa1", - "fcfcfc": "fcfcfc", "832041": "433363", - "c9c9c9": "c9c9c9", "cd394a": "775b8c", - "5e5e5e": "5e5e5e", "dc7569": "a87fae" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/98.json b/public/images/pokemon/variant/98.json index 972444eae32..6f84619fbf2 100644 --- a/public/images/pokemon/variant/98.json +++ b/public/images/pokemon/variant/98.json @@ -4,27 +4,21 @@ "ffa563": "c466f3", "ff7331": "9359ca", "843110": "3e3662", - "101010": "101010", "5a4221": "231947", "735210": "534681", "ffdebd": "c3d6ff", - "dedede": "dedede", "e6bd8c": "9ba3d9", - "b58442": "7c72b6", - "ffffff": "ffffff" + "b58442": "7c72b6" }, "2": { "de524a": "2678b8", "ffa563": "5ce6f3", "ff7331": "4abbd4", "843110": "23457e", - "101010": "101010", "5a4221": "040522", "735210": "0d0e3c", "ffdebd": "4c549a", - "dedede": "dedede", "e6bd8c": "342b78", - "b58442": "1b1d62", - "ffffff": "ffffff" + "b58442": "1b1d62" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/981.json b/public/images/pokemon/variant/981.json index 32e3fac7aa9..38b46463253 100644 --- a/public/images/pokemon/variant/981.json +++ b/public/images/pokemon/variant/981.json @@ -7,11 +7,8 @@ "9ca0ab": "665144", "8b704c": "3d6186", "322513": "091e34", - "0f0f0f": "0f0f0f", "fff42f": "c29925", - "fcfcfc": "fcfcfc", "deb43d": "dec93d", - "a8abb3": "a8abb3", "775c10": "774f10", "b1a75c": "7e262d", "fdec8a": "9c3e3e", @@ -32,11 +29,8 @@ "9ca0ab": "9c5978", "8b704c": "e4efcf", "322513": "337142", - "0f0f0f": "0f0f0f", "fff42f": "ed9233", - "fcfcfc": "fcfcfc", "deb43d": "ebbb72", - "a8abb3": "a8abb3", "775c10": "b35127", "b1a75c": "1e7884", "fdec8a": "2a9d8f", diff --git a/public/images/pokemon/variant/982-three-segment.json b/public/images/pokemon/variant/982-three-segment.json index 37662044457..16869ca244a 100644 --- a/public/images/pokemon/variant/982-three-segment.json +++ b/public/images/pokemon/variant/982-three-segment.json @@ -2,7 +2,6 @@ "1": { "1e6d7d": "2a413f", "66c4c4": "748da4", - "101010": "101010", "2f959e": "4a6165", "735a41": "53575a", "f6e67b": "ececec", @@ -10,7 +9,6 @@ "debd39": "aeaeae", "5a6273": "5d6970", "bdcde6": "c1d7e2", - "f6ffff": "f6ffff", "fff6c5": "fdfdfd", "d5e6f6": "d8edf3", "bd7d9c": "bfab7c" @@ -18,7 +16,6 @@ "2": { "1e6d7d": "1d737a", "66c4c4": "b5f2ec", - "101010": "101010", "2f959e": "38a8a6", "735a41": "462a3e", "f6e67b": "db4069", diff --git a/public/images/pokemon/variant/982.json b/public/images/pokemon/variant/982.json index 5efd0b4a83b..f0115e44404 100644 --- a/public/images/pokemon/variant/982.json +++ b/public/images/pokemon/variant/982.json @@ -2,7 +2,6 @@ "1": { "1e6d7d": "2a413f", "66c4c4": "748da4", - "101010": "101010", "2f959e": "4a6165", "735a41": "53575a", "f6e67b": "ececec", @@ -10,7 +9,6 @@ "debd39": "aeaeae", "5a6273": "5d6970", "bdcde6": "c1d7e2", - "f6ffff": "f6ffff", "d5e6f6": "d8edf3", "fff6c5": "fdfdfd", "bd7d9c": "bfab7c" @@ -18,7 +16,6 @@ "2": { "1e6d7d": "1d737a", "66c4c4": "b5f2ec", - "101010": "101010", "2f959e": "38a8a6", "735a41": "462a3e", "f6e67b": "db4069", diff --git a/public/images/pokemon/variant/987.json b/public/images/pokemon/variant/987.json index d05c49d8f07..24be6175ad7 100644 --- a/public/images/pokemon/variant/987.json +++ b/public/images/pokemon/variant/987.json @@ -2,7 +2,6 @@ "0": { "8a378a": "9b490e", "ee93e8": "ffdd67", - "0f0f0f": "0f0f0f", "314a62": "244260", "182941": "132443", "b36cc1": "d3941a", @@ -12,13 +11,11 @@ "de62a4": "ffc668", "a4295a": "cc762f", "bd9431": "cb79dd", - "eee662": "ffc7ff", - "f9f9f9": "f9f9f9" + "eee662": "ffc7ff" }, "1": { "8a378a": "0c8086", "ee93e8": "3df7ed", - "0f0f0f": "0f0f0f", "314a62": "7396b4", "182941": "2c384d", "b36cc1": "1dbdb9", @@ -28,13 +25,11 @@ "de62a4": "ffdf90", "a4295a": "e28c27", "bd9431": "66d0e5", - "eee662": "a6f0f8", - "f9f9f9": "f9f9f9" + "eee662": "a6f0f8" }, "2": { "8a378a": "5d4a2f", "ee93e8": "fff7dd", - "0f0f0f": "0f0f0f", "314a62": "b56f2a", "182941": "603305", "b36cc1": "eece8c", @@ -44,7 +39,6 @@ "de62a4": "e25038", "a4295a": "a62a21", "bd9431": "66d0e5", - "eee662": "a6f0f8", - "f9f9f9": "f9f9f9" + "eee662": "a6f0f8" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/988.json b/public/images/pokemon/variant/988.json index b19d419c2cc..8268e990e77 100644 --- a/public/images/pokemon/variant/988.json +++ b/public/images/pokemon/variant/988.json @@ -5,13 +5,9 @@ "7b2000": "0b334c", "d8a33f": "56e4ba", "efd165": "66e9c2", - "35384f": "35384f", - "465175": "465175", - "f1f7f7": "f1f7f7", "9ade1d": "d7d346", "d1fd77": "e2fd77", "f04137": "17b79f", - "181820": "181820", "a9a9ab": "92c9b9", "ff3121": "2c9484", "e63529": "23ae9a", diff --git a/public/images/pokemon/variant/99-gigantamax.json b/public/images/pokemon/variant/99-gigantamax.json index ecf9643d77c..7cc082c0d67 100644 --- a/public/images/pokemon/variant/99-gigantamax.json +++ b/public/images/pokemon/variant/99-gigantamax.json @@ -4,7 +4,6 @@ "f6c58b": "9f60d5", "832908": "3b1c69", "ee8b4a": "8853bf", - "101010": "101010", "735210": "534681", "fdfdfd": "ffdbdb", "e1d0db": "d5869b", @@ -21,7 +20,6 @@ "f6c58b": "75e0e8", "832908": "22447d", "ee8b4a": "43adc4", - "101010": "101010", "735210": "1e1743", "fdfdfd": "b1f1cf", "e1d0db": "73c1c2", diff --git a/public/images/pokemon/variant/99.json b/public/images/pokemon/variant/99.json index d907c0f85fc..33b04dbb06b 100644 --- a/public/images/pokemon/variant/99.json +++ b/public/images/pokemon/variant/99.json @@ -4,13 +4,10 @@ "842908": "3b1c69", "ef8c4a": "8853bf", "f7c58c": "9f60d5", - "101010": "101010", "4a3121": "1c1f46", "5a4231": "2c3c61", "b57b5a": "7c72b6", "735210": "534681", - "dedef7": "dedef7", - "ffffff": "ffffff", "ffe6b5": "c3d6ff", "efbd8c": "9ba3d9" }, @@ -19,13 +16,10 @@ "842908": "23457e", "ef8c4a": "43adc4", "f7c58c": "75e0e8", - "101010": "101010", "4a3121": "1b1e3b", "5a4231": "2b354e", "b57b5a": "231d51", "735210": "1e1743", - "dedef7": "dedef7", - "ffffff": "ffffff", "ffe6b5": "464d89", "efbd8c": "31296f" } diff --git a/public/images/pokemon/variant/993.json b/public/images/pokemon/variant/993.json index 74fb021387d..2ae7dd659e9 100644 --- a/public/images/pokemon/variant/993.json +++ b/public/images/pokemon/variant/993.json @@ -4,11 +4,9 @@ "7a787a": "f8f5e2", "463741": "754711", "4f4d51": "c59b4b", - "0f0f0f": "0f0f0f", "952b7d": "585a5c", "ff4dcb": "b7c6d6", "4a424a": "533310", - "333539": "333539", "fcfcfc": "ffffff", "20459b": "3c236a", "172e57": "160832", @@ -22,12 +20,9 @@ "7a787a": "a4bfbe", "463741": "2a545a", "4f4d51": "467678", - "0f0f0f": "0f0f0f", "952b7d": "873954", "ff4dcb": "e3bbd3", "4a424a": "1e2b37", - "333539": "333539", - "fcfcfc": "fcfcfc", "20459b": "600f40", "172e57": "470e2c", "86abf0": "ba1e51", diff --git a/public/images/pokemon/variant/994.json b/public/images/pokemon/variant/994.json index aeb03ed5d63..87ce90e2229 100644 --- a/public/images/pokemon/variant/994.json +++ b/public/images/pokemon/variant/994.json @@ -7,9 +7,7 @@ "626262": "696983", "5e2d4e": "ae7a24", "be5a83": "fdc263", - "181820": "181820", "874070": "d79a38", - "313139": "313139", "959595": "9b9bb6", "dbdadc": "d9d9ea", "36485a": "3f357c", @@ -21,13 +19,9 @@ "c77923": "00759b", "f29c46": "00bfe1", "fac173": "7bf2ff", - "626262": "626262", "5e2d4e": "6e2140", "be5a83": "ff5e5e", - "181820": "181820", "874070": "e72158", - "313139": "313139", - "959595": "959595", "dbdadc": "e9dac7", "36485a": "664338", "6a8795": "ff926c", diff --git a/public/images/pokemon/variant/995.json b/public/images/pokemon/variant/995.json index 95453040c50..8d4d6c3cea8 100644 --- a/public/images/pokemon/variant/995.json +++ b/public/images/pokemon/variant/995.json @@ -2,23 +2,18 @@ "1": { "99c350": "ddcb86", "c4de98": "f6eebd", - "0f0f0f": "0f0f0f", "3c571e": "4f4528", "4b792d": "7b6a31", "78913e": "8d7f54", "8caa48": "b6a674", "1d9b70": "6a267e", "03fd9f": "ca72e4", - "393538": "393538", "37bd7a": "9d3eb9", - "ddeed7": "e9d7ee", - "252323": "252323", - "504a4a": "504a4a" + "ddeed7": "e9d7ee" }, "2": { "99c350": "6b737b", "c4de98": "949ca5", - "0f0f0f": "0f0f0f", "3c571e": "26292b", "4b792d": "383c40", "78913e": "464b51", diff --git a/public/images/pokemon/variant/996.json b/public/images/pokemon/variant/996.json index 9aeb5942284..e6311b9bdf9 100644 --- a/public/images/pokemon/variant/996.json +++ b/public/images/pokemon/variant/996.json @@ -7,7 +7,6 @@ "af9b0a": "3b69d3", "f9d800": "30d1ff", "dedfde": "b7926b", - "0f0f0f": "0f0f0f", "9c979c": "8f6049", "8ebbb7": "8f6049", "c2e7e9": "b7926b", @@ -23,9 +22,6 @@ "8f99a3": "ceccef", "af9b0a": "b4425a", "f9d800": "ff6767", - "dedfde": "dedfde", - "0f0f0f": "0f0f0f", - "9c979c": "9c979c", "8ebbb7": "ca6d2a", "c2e7e9": "fcb925", "725e16": "2a3064", diff --git a/public/images/pokemon/variant/997.json b/public/images/pokemon/variant/997.json index eb2acdbae7d..f4a3efc5cf4 100644 --- a/public/images/pokemon/variant/997.json +++ b/public/images/pokemon/variant/997.json @@ -6,11 +6,9 @@ "5b6f8a": "2e4042", "7da6a6": "8f6049", "6695e3": "325747", - "0f0f0f": "0f0f0f", "ffd14a": "30d1ff", "da9123": "3b69d3", "4b7a9a": "293b39", - "ffffff": "ffffff", "3a637e": "1e2c2f", "643620": "705c39", "f47d2f": "c5a64d", @@ -23,11 +21,9 @@ "5b6f8a": "524f60", "7da6a6": "ca6d2a", "6695e3": "e6e6eb", - "0f0f0f": "0f0f0f", "ffd14a": "ff6767", "da9123": "b4425a", "4b7a9a": "a09ec1", - "ffffff": "ffffff", "3a637e": "756c98", "643620": "2a3064", "f47d2f": "2984e8", diff --git a/public/images/pokemon/variant/998.json b/public/images/pokemon/variant/998.json index 19257d173aa..4d1a752ab09 100644 --- a/public/images/pokemon/variant/998.json +++ b/public/images/pokemon/variant/998.json @@ -11,7 +11,6 @@ "3a4149": "413c41", "f7c600": "30d1ff", "262426": "2a272c", - "141414": "141414", "8d292c": "705c39", "ea3745": "c5a64d" }, @@ -27,7 +26,6 @@ "3a4149": "215ecd", "f7c600": "ff6767", "262426": "223992", - "141414": "141414", "8d292c": "33468c", "ea3745": "2984e8" } diff --git a/public/images/pokemon/variant/999.json b/public/images/pokemon/variant/999.json index a0cbb5f322a..b6c95c3db01 100644 --- a/public/images/pokemon/variant/999.json +++ b/public/images/pokemon/variant/999.json @@ -6,7 +6,6 @@ "545b6b": "1e2e60", "ddc126": "d52d70", "783a52": "4b0f01", - "0f0f0f": "0f0f0f", "ac4454": "ab461e", "bfa33e": "bc1457", "8a8f9f": "34497e", @@ -23,13 +22,10 @@ "545b6b": "415073", "ddc126": "728295", "783a52": "4f2e5c", - "0f0f0f": "0f0f0f", "ac4454": "794e83", "bfa33e": "485466", "8a8f9f": "8bb0ab", "b9becd": "afd2ca", - "bac4d8": "bac4d8", - "7a82a9": "7a82a9", "a59227": "9c9cbe", "745527": "302d62" }, @@ -40,13 +36,10 @@ "545b6b": "6467a8", "ddc126": "4e85bf", "783a52": "6d6594", - "0f0f0f": "0f0f0f", "ac4454": "bcb9d6", "bfa33e": "294f7e", "8a8f9f": "a5ace8", "b9becd": "dae0f3", - "bac4d8": "bac4d8", - "7a82a9": "7a82a9", "a59227": "b6d0d7", "745527": "1c394d" } diff --git a/public/images/pokemon/variant/back/1.json b/public/images/pokemon/variant/back/1.json index 895bcad4e6d..81843438dfe 100644 --- a/public/images/pokemon/variant/back/1.json +++ b/public/images/pokemon/variant/back/1.json @@ -6,10 +6,8 @@ "bdff73": "ffc5a3", "a5d642": "ff745e", "63d6b5": "de3570", - "101010": "101010", "73ad31": "b34952", - "3a9494": "9c195c", - "ffffff": "ffffff" + "3a9494": "9c195c" }, "2": { "526329": "022e59", @@ -18,9 +16,7 @@ "bdff73": "befaf1", "a5d642": "80c3d9", "63d6b5": "faac05", - "101010": "101010", "73ad31": "446b94", - "3a9494": "d46d00", - "ffffff": "ffffff" + "3a9494": "d46d00" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/100.json b/public/images/pokemon/variant/back/100.json index 6203c3cfa54..ed53410ee28 100644 --- a/public/images/pokemon/variant/back/100.json +++ b/public/images/pokemon/variant/back/100.json @@ -1,6 +1,5 @@ { "1": { - "841010": "841010", "ffad9c": "fffdd7", "ff845a": "ffd86f", "ff5221": "f0b64a", @@ -8,8 +7,7 @@ "d63142": "c76d14", "b5adbd": "d6b0a5", "ded6d6": "f7e4da", - "ffffff": "fffdfb", - "101010": "101010" + "ffffff": "fffdfb" }, "2": { "841010": "27145d", @@ -20,7 +18,6 @@ "d63142": "482683", "b5adbd": "94b1c9", "ded6d6": "cde3ef", - "ffffff": "f3fdff", - "101010": "101010" + "ffffff": "f3fdff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/1000.json b/public/images/pokemon/variant/back/1000.json index 8149392d9b6..4f27d5ea595 100644 --- a/public/images/pokemon/variant/back/1000.json +++ b/public/images/pokemon/variant/back/1000.json @@ -1,7 +1,6 @@ { "0": { "b78234": "a64700", - "121212": "121212", "e0b81a": "d05c31", "f9d95b": "ee883f", "623c20": "6d1906", @@ -11,12 +10,10 @@ "762534": "5d0d05", "9c3e43": "6d1906", "323437": "531f03", - "545b6b": "8f4a14", - "0f0f0f": "0f0f0f" + "545b6b": "8f4a14" }, "1": { "b78234": "7a4e5d", - "121212": "121212", "e0b81a": "96747e", "f9d95b": "e1ced1", "623c20": "622f43", @@ -26,22 +23,18 @@ "762534": "513a59", "9c3e43": "7f6086", "323437": "1d2c54", - "545b6b": "415073", - "0f0f0f": "0f0f0f" + "545b6b": "415073" }, "2": { "b78234": "5a9aa3", - "121212": "121212", "e0b81a": "89d1d6", "f9d95b": "e5fffc", "623c20": "3d717b", - "ffffff": "ffffff", "b4a45e": "36465f", "918344": "1f3149", "762534": "547995", "9c3e43": "7e93b0", "323437": "212857", - "545b6b": "495890", - "0f0f0f": "0f0f0f" + "545b6b": "495890" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/1001.json b/public/images/pokemon/variant/back/1001.json index 4aa4f62bf62..e98d729116e 100644 --- a/public/images/pokemon/variant/back/1001.json +++ b/public/images/pokemon/variant/back/1001.json @@ -7,7 +7,6 @@ "8c979d": "a19775", "a28b76": "383734", "7e615a": "1f1e1c", - "0f0f0f": "0f0f0f", "618044": "9e4b28", "76b458": "de7e52", "524a36": "6e4105", @@ -22,7 +21,6 @@ "8c979d": "9f88b3", "a28b76": "fce6f0", "7e615a": "e6aec8", - "0f0f0f": "0f0f0f", "618044": "e170a1", "76b458": "f5bede", "524a36": "420f0f", diff --git a/public/images/pokemon/variant/back/1003.json b/public/images/pokemon/variant/back/1003.json index a7216e678f1..10746b80ec9 100644 --- a/public/images/pokemon/variant/back/1003.json +++ b/public/images/pokemon/variant/back/1003.json @@ -4,7 +4,6 @@ "a6b4a7": "e7cb7e", "73958b": "daa666", "486863": "be8550", - "0f0f0f": "0f0f0f", "5e4622": "352831", "5c3127": "861d0f", "8c6140": "ff7d59", @@ -19,7 +18,6 @@ "a6b4a7": "cfa0f3", "73958b": "8d6acc", "486863": "6c4aac", - "0f0f0f": "0f0f0f", "5e4622": "434377", "5c3127": "313246", "8c6140": "767a7e", diff --git a/public/images/pokemon/variant/back/1004.json b/public/images/pokemon/variant/back/1004.json index 16c69b047b5..8e2df2d0163 100644 --- a/public/images/pokemon/variant/back/1004.json +++ b/public/images/pokemon/variant/back/1004.json @@ -2,7 +2,6 @@ "1": { "a23724": "b06f00", "f4342f": "f2b200", - "0f0f0f": "0f0f0f", "f35e38": "ffc81b", "f9824f": "ffe13a", "f0a755": "ffe86b", @@ -13,13 +12,11 @@ "5b985a": "5c71c1", "83b884": "7a9ae0", "3c3f3a": "27276a", - "487447": "394d9a", - "f8f8f0": "f8f8f0" + "487447": "394d9a" }, "2": { "a23724": "76074d", "f4342f": "a525d3", - "0f0f0f": "0f0f0f", "f35e38": "3449f6", "f9824f": "49c9f6", "f0a755": "79f6a1", @@ -30,7 +27,6 @@ "5b985a": "b09f97", "83b884": "d7cbb5", "3c3f3a": "4b4444", - "487447": "84736f", - "f8f8f0": "f8f8f0" + "487447": "84736f" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/1006.json b/public/images/pokemon/variant/back/1006.json index c03a810dcec..04d4a5e9aae 100644 --- a/public/images/pokemon/variant/back/1006.json +++ b/public/images/pokemon/variant/back/1006.json @@ -3,8 +3,6 @@ "293549": "2a224e", "6db1b5": "585995", "4a8484": "3e2d63", - "f8f8f8": "f8f8f8", - "030303": "030303", "214c1f": "483d5c", "59b56a": "c2c8dc", "3f845a": "79728e", @@ -13,7 +11,6 @@ "b0accf": "27678e", "ff5098": "a5ffd4", "fcfcfc": "36a5aa", - "81899c": "81899c", "eeb1dd": "fbfffc", "585f6a": "2a224e" } diff --git a/public/images/pokemon/variant/back/1008-ultimate-mode.json b/public/images/pokemon/variant/back/1008-ultimate-mode.json index ce46761068e..300c4e5fae9 100644 --- a/public/images/pokemon/variant/back/1008-ultimate-mode.json +++ b/public/images/pokemon/variant/back/1008-ultimate-mode.json @@ -1,56 +1,43 @@ { "0": { "4ba5cf": "8955b5", - "fefefe": "fefefe", "d7c2c1": "d7c3f7", "c883d1": "7fd8cf", - "0e0e12": "0e0e12", "1a1c42": "393a3e", "5c4370": "3e446d", "fcdf14": "427eff", - "e6e3f2": "e6e3f2", - "878594": "878594", "4d3672": "858585", - "c1bddf": "c1bddf", "643fa3": "c8c8c8", "392855": "616161", - "2e3176": "868686", - "25173d": "25173d" + "2e3176": "868686" }, "1": { "4ba5cf": "31808e", "fefefe": "ffffc9", "d7c2c1": "b3e2d0", "c883d1": "ade263", - "0e0e12": "0e0e12", "1a1c42": "184433", "5c4370": "3b5c63", "fcdf14": "2cc151", - "e6e3f2": "e6e3f2", "878594": "89a5ff", "4d3672": "444b66", "c1bddf": "b7d8ff", "643fa3": "626877", "392855": "393e51", - "2e3176": "3aff75", - "25173d": "25173d" + "2e3176": "3aff75" }, "2": { "4ba5cf": "8e3c84", "fefefe": "ffd8ff", "d7c2c1": "ff93d4", "c883d1": "ffc26d", - "0e0e12": "0e0e12", "1a1c42": "29253f", - "5c4370": "5c4370", "fcdf14": "cc5767", - "e6e3f2": "e6e3f2", "878594": "ad9e9d", "4d3672": "2a3768", "c1bddf": "e0e0e0", "643fa3": "3b4986", "392855": "192142", - "2e3176": "cf3e57", - "25173d": "25173d" + "2e3176": "cf3e57" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/101.json b/public/images/pokemon/variant/back/101.json index 0dad4f6c88d..73e31735422 100644 --- a/public/images/pokemon/variant/back/101.json +++ b/public/images/pokemon/variant/back/101.json @@ -3,28 +3,23 @@ "5a5252": "683f3c", "efefef": "f7e4da", "cecede": "d6b0a5", - "101010": "101010", "a59c9c": "8f7a6f", - "f7a58c": "f7a58c", "d68494": "d59679", "ff5221": "f0b64a", "e63a31": "dd932b", "c52942": "c76d14", - "841010": "983d00", - "ffffff": "ffffff" + "841010": "983d00" }, "2": { "5a5252": "384c6a", "efefef": "cde3ef", "cecede": "94b1c9", - "101010": "101010", "a59c9c": "7993b1", "f7a58c": "c27bec", "d68494": "887db5", "ff5221": "7240a2", "e63a31": "5c3295", "c52942": "482683", - "841010": "27145d", - "ffffff": "ffffff" + "841010": "27145d" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/1010.json b/public/images/pokemon/variant/back/1010.json index bc8248c6576..e0fed348d1e 100644 --- a/public/images/pokemon/variant/back/1010.json +++ b/public/images/pokemon/variant/back/1010.json @@ -1,6 +1,5 @@ { "1": { - "0b0b0b": "0b0b0b", "1e5238": "63193a", "39804b": "943a5a", "69b95b": "d6637b", @@ -11,11 +10,9 @@ "343631": "313436", "c0c1be": "bec1c0", "ff5f7c": "638c10", - "ffb2c0": "9cce52", - "1d1d1c": "1d1d1c" + "ffb2c0": "9cce52" }, "2": { - "0b0b0b": "0b0b0b", "1e5238": "834b04", "39804b": "a4790a", "69b95b": "bba010", @@ -26,7 +23,6 @@ "343631": "54544c", "c0c1be": "eeeeee", "ff5f7c": "e565fd", - "ffb2c0": "eeeeee", - "1d1d1c": "1d1d1c" + "ffb2c0": "eeeeee" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/1018.json b/public/images/pokemon/variant/back/1018.json index 70f9c5a2f50..a3748b6b543 100644 --- a/public/images/pokemon/variant/back/1018.json +++ b/public/images/pokemon/variant/back/1018.json @@ -2,7 +2,6 @@ "1": { "7a3d3e": "871e14", "c94747": "ed7746", - "151515": "151515", "101d3a": "081f16", "243c79": "1d542f", "295098": "3b814a", @@ -19,12 +18,8 @@ "2": { "7a3d3e": "062449", "c94747": "2077a6", - "151515": "151515", "101d3a": "062449", - "243c79": "243c79", - "295098": "295098", "544a6f": "1a0e34", - "1e2c59": "1e2c59", "ffdf9d": "6df4ff", "bb7944": "28b9dc", "e0e0ed": "8075c1", diff --git a/public/images/pokemon/variant/back/1023.json b/public/images/pokemon/variant/back/1023.json index 09ce8fa2132..9ef53b06171 100644 --- a/public/images/pokemon/variant/back/1023.json +++ b/public/images/pokemon/variant/back/1023.json @@ -2,35 +2,29 @@ "1": { "89570c": "52766a", "00a6ad": "92c72a", - "050505": "050505", "f0c720": "c5f6e6", "62f7f7": "bcfb3f", "b4961f": "88b8a8", - "f9ffff": "f9ffff", "163d43": "133453", "45cbc8": "5ca6ea", "389cad": "3673aa", "206477": "285883", "858ca7": "7b7b7b", "c9cfda": "bdbdbd", - "242322": "242322", "454a54": "4f4d4d" }, "2": { "89570c": "627675", "00a6ad": "852098", - "050505": "050505", "f0c720": "b6d4d2", "62f7f7": "d046e8", "b4961f": "9bb4b3", - "f9ffff": "f9ffff", "163d43": "5c3c06", "45cbc8": "d9cd25", "389cad": "c1991d", "206477": "94670d", "858ca7": "a9a7a2", "c9cfda": "d5d5d1", - "242322": "242322", "454a54": "72716d" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/111.json b/public/images/pokemon/variant/back/111.json index 24a94b7145d..27474254759 100644 --- a/public/images/pokemon/variant/back/111.json +++ b/public/images/pokemon/variant/back/111.json @@ -4,19 +4,13 @@ "bdbdce": "6a547a", "8484ad": "402f51", "3a3a52": "261e2d", - "101010": "101010", - "e6e6ef": "9781ab", - "ffffff": "ffffff", - "ad3a29": "ad3a29" + "e6e6ef": "9781ab" }, "2": { "5a5a7b": "ab4355", "bdbdce": "e18db3", "8484ad": "d76688", "3a3a52": "6d2935", - "101010": "101010", - "e6e6ef": "f7b4d1", - "ffffff": "ffffff", - "ad3a29": "ad3a29" + "e6e6ef": "f7b4d1" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/112.json b/public/images/pokemon/variant/back/112.json index c983447afce..b1ad7e99b19 100644 --- a/public/images/pokemon/variant/back/112.json +++ b/public/images/pokemon/variant/back/112.json @@ -3,24 +3,18 @@ "52525a": "3c2945", "c5c5bd": "6a547a", "8c8c94": "523c5c", - "101010": "101010", "e6e6de": "9781ab", "735a31": "6b6373", "e6d6ad": "cecede", - "b5a573": "948cad", - "ffffff": "ffffff", - "e6523a": "e6523a" + "b5a573": "948cad" }, "2": { "52525a": "642224", "c5c5bd": "cb568a", "8c8c94": "ab3f5c", - "101010": "101010", "e6e6de": "ef86b5", "735a31": "6d586d", "e6d6ad": "dacad3", - "b5a573": "be9bb6", - "ffffff": "ffffff", - "e6523a": "e6523a" + "b5a573": "be9bb6" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/113.json b/public/images/pokemon/variant/back/113.json index 1d1a74731c7..2f83d9e4ab0 100644 --- a/public/images/pokemon/variant/back/113.json +++ b/public/images/pokemon/variant/back/113.json @@ -4,7 +4,6 @@ "ffd6d6": "f6caec", "ffadad": "cc96c5", "8c4242": "6b279e", - "101010": "101010", "ff845a": "c164e4", "ef5a31": "953fc7" }, @@ -13,7 +12,6 @@ "ffd6d6": "f8c8e3", "ffadad": "e5a5ce", "8c4242": "61020c", - "101010": "101010", "ff845a": "d33128", "ef5a31": "a3091a" }, @@ -22,7 +20,6 @@ "ffd6d6": "d7baec", "ffadad": "ac8fc4", "8c4242": "204b7d", - "101010": "101010", "ff845a": "567bbf", "ef5a31": "204b7d" } diff --git a/public/images/pokemon/variant/back/114.json b/public/images/pokemon/variant/back/114.json index 9b04d485b01..b24b70c2032 100644 --- a/public/images/pokemon/variant/back/114.json +++ b/public/images/pokemon/variant/back/114.json @@ -2,7 +2,6 @@ "1": { "214252": "442152", "5aa5ce": "755ace", - "101010": "101010", "94d6f7": "a479ff", "427b94": "654294", "732929": "2b7329", @@ -12,7 +11,6 @@ "2": { "214252": "705040", "5aa5ce": "ebc582", - "101010": "101010", "94d6f7": "ffedb6", "427b94": "ad875a", "732929": "332119", diff --git a/public/images/pokemon/variant/back/116.json b/public/images/pokemon/variant/back/116.json index f19c6b2b98e..e36ac1629fa 100644 --- a/public/images/pokemon/variant/back/116.json +++ b/public/images/pokemon/variant/back/116.json @@ -3,10 +3,7 @@ "3a5263": "1f4f3e", "a5c5ef": "5bab65", "6b94b5": "3d7b4f", - "101010": "101010", - "ffffff": "ffffff", "c52929": "34b9af", - "d6d6d6": "d6d6d6", "bddeff": "7ed683", "9c844a": "548133", "dec54a": "91bf49", @@ -16,10 +13,7 @@ "3a5263": "cf7d3a", "a5c5ef": "ffe675", "6b94b5": "edb766", - "101010": "101010", - "ffffff": "ffffff", "c52929": "9973c7", - "d6d6d6": "d6d6d6", "bddeff": "fffaa1", "9c844a": "314e5e", "dec54a": "4e878a", diff --git a/public/images/pokemon/variant/back/117.json b/public/images/pokemon/variant/back/117.json index ff7bebd575a..49ff752ece2 100644 --- a/public/images/pokemon/variant/back/117.json +++ b/public/images/pokemon/variant/back/117.json @@ -1,28 +1,22 @@ { "1": { "7b6321": "3f8a49", - "101010": "101010", "ffffad": "b5e37f", "dec552": "87c563", "4a6b84": "143c4f", "21425a": "122647", "a5cee6": "45b38f", "84adce": "2e8b7b", - "6b849c": "185461", - "ffffff": "ffffff", - "9c9c9c": "9c9c9c" + "6b849c": "185461" }, "2": { "7b6321": "4e878a", - "101010": "101010", "ffffad": "b3f2d8", "dec552": "7bc9bb", "4a6b84": "c74c4c", "21425a": "702525", "a5cee6": "ffd166", "84adce": "ffab66", - "6b849c": "f2705c", - "ffffff": "ffffff", - "9c9c9c": "9c9c9c" + "6b849c": "f2705c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/118.json b/public/images/pokemon/variant/back/118.json index 9f221892b82..ff3e6b6af61 100644 --- a/public/images/pokemon/variant/back/118.json +++ b/public/images/pokemon/variant/back/118.json @@ -2,7 +2,6 @@ "0": { "52525a": "734733", "ffffff": "fff7ee", - "101010": "101010", "8c8c94": "966f58", "efefef": "e7d7c9", "d6d6de": "cbb7aa", @@ -17,7 +16,6 @@ "1": { "52525a": "492d5c", "ffffff": "e7d1ea", - "101010": "101010", "8c8c94": "6c5277", "efefef": "b9a0bf", "d6d6de": "947c9c", @@ -32,7 +30,6 @@ "2": { "52525a": "2b4a54", "ffffff": "d5e6e4", - "101010": "101010", "8c8c94": "526d71", "efefef": "aecac8", "d6d6de": "84a0a1", diff --git a/public/images/pokemon/variant/back/119.json b/public/images/pokemon/variant/back/119.json index 058ebc50e1c..2af5fde5a79 100644 --- a/public/images/pokemon/variant/back/119.json +++ b/public/images/pokemon/variant/back/119.json @@ -3,8 +3,6 @@ "8c7b84": "966f58", "f7f7ff": "fff7ee", "dedee6": "e7d7c9", - "ffdebd": "ffdebd", - "101010": "101010", "943119": "794708", "c54229": "d6952e", "52525a": "522b23", @@ -18,7 +16,6 @@ "f7f7ff": "e7d1ea", "dedee6": "b9a0bf", "ffdebd": "bd9fc6", - "101010": "101010", "943119": "39195d", "c54229": "7e3eb1", "52525a": "39195d", @@ -32,7 +29,6 @@ "f7f7ff": "d5e6e4", "dedee6": "aecac8", "ffdebd": "b8cecd", - "101010": "101010", "943119": "174027", "c54229": "32723f", "52525a": "2b4a54", diff --git a/public/images/pokemon/variant/back/120.json b/public/images/pokemon/variant/back/120.json index 3b40ba1cfd8..3efc6d5cdcf 100644 --- a/public/images/pokemon/variant/back/120.json +++ b/public/images/pokemon/variant/back/120.json @@ -1,7 +1,6 @@ { "1": { "633131": "07293b", - "000000": "000000", "9c6b3a": "1b7272", "deb563": "4bd09b", "7b523a": "0f4c58", @@ -13,7 +12,6 @@ }, "2": { "633131": "1d5198", - "000000": "000000", "9c6b3a": "3eb7e5", "deb563": "9cffff", "7b523a": "2c81bc", diff --git a/public/images/pokemon/variant/back/121.json b/public/images/pokemon/variant/back/121.json index 7679498bfa0..fcd42e83f1a 100644 --- a/public/images/pokemon/variant/back/121.json +++ b/public/images/pokemon/variant/back/121.json @@ -4,15 +4,13 @@ "313a73": "631c26", "d6adef": "ffc5b4", "8c73bd": "de6262", - "b58cd6": "ee9494", - "000000": "000000" + "b58cd6": "ee9494" }, "2": { "5a529c": "9eb4ff", "313a73": "597cdb", "d6adef": "ffffff", "8c73bd": "c5d5ff", - "b58cd6": "d6e8ff", - "000000": "000000" + "b58cd6": "d6e8ff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/123.json b/public/images/pokemon/variant/back/123.json index 81f615bcd45..e937d728471 100644 --- a/public/images/pokemon/variant/back/123.json +++ b/public/images/pokemon/variant/back/123.json @@ -5,43 +5,22 @@ "e6d6ad": "b5b5ce", "9c8c31": "632929", "8cce73": "f76b6b", - "101010": "101010", "fff7d6": "ffffff", "5a9c4a": "d63a3a", - "bdbdbd": "bdbdbd", - "c5a573": "b5b5ce", - "dedede": "dedede", - "ffffff": "ffffff", - "737373": "737373" + "c5a573": "b5b5ce" }, "1": { "425a21": "484e75", "bde673": "bdbdbd", - "e6d6ad": "e6d6ad", - "9c8c31": "9c8c31", "8cce73": "92b0db", - "101010": "101010", - "fff7d6": "fff7d6", "5a9c4a": "7b94d6", "bdbdbd": "ffffff", - "c5a573": "9cc5ff", - "dedede": "dedede", - "ffffff": "ffffff", - "737373": "737373" + "c5a573": "9cc5ff" }, "2": { "425a21": "8f3907", "bde673": "f8f581", - "e6d6ad": "e6d6ad", - "9c8c31": "9c8c31", "8cce73": "f0c947", - "101010": "101010", - "fff7d6": "fff7d6", - "5a9c4a": "e6a027", - "bdbdbd": "bdbdbd", - "c5a573": "c5a573", - "dedede": "dedede", - "ffffff": "ffffff", - "737373": "737373" + "5a9c4a": "e6a027" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/125.json b/public/images/pokemon/variant/back/125.json index 8933b2e4c58..9e2994e265d 100644 --- a/public/images/pokemon/variant/back/125.json +++ b/public/images/pokemon/variant/back/125.json @@ -2,25 +2,20 @@ "0": { "5a4a08": "752c0b", "ffe63a": "ff8b3a", - "101010": "101010", "e6c521": "e66a21", "c5a510": "b34d2b", "fff7b5": "ffd4b5", "3a4252": "3f3a52", "6b6b63": "57526e", - "ffffff": "ffffff", "c5c5d6": "c8c5d6" }, "1": { "5a4a08": "235c3c", "ffe63a": "59f7d0", - "101010": "101010", "e6c521": "43e6b7", "c5a510": "2dbd73", "fff7b5": "c8ffea", "3a4252": "424554", - "6b6b63": "6a6982", - "ffffff": "ffffff", - "c5c5d6": "c5c5d6" + "6b6b63": "6a6982" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/126.json b/public/images/pokemon/variant/back/126.json index c636ff760ad..e96a2a1866e 100644 --- a/public/images/pokemon/variant/back/126.json +++ b/public/images/pokemon/variant/back/126.json @@ -4,13 +4,9 @@ "ffef4a": "eaffff", "7b5231": "699296", "e6bd31": "c6edf2", - "636363": "636363", - "ffffff": "ffffff", "ff4a31": "5398cf", "ce1042": "4065b0", "6b2121": "303d58", - "c5c5c5": "c5c5c5", - "000000": "000000", "ff8c63": "81c9e6", "ee442d": "5398cf", "ffcebd": "cabac8", diff --git a/public/images/pokemon/variant/back/127-mega.json b/public/images/pokemon/variant/back/127-mega.json index 855390b8f37..fa6cade9e21 100644 --- a/public/images/pokemon/variant/back/127-mega.json +++ b/public/images/pokemon/variant/back/127-mega.json @@ -4,33 +4,21 @@ "847163": "7e5649", "d6c7b5": "d29f88", "efe7ce": "eccb90", - "000000": "000000", - "ee8329": "ee8329", - "cd5241": "cd5241", "5a4131": "172a22", "c6ae8c": "72988e", "a58e6b": "54796f", "846952": "3b554d", - "ffde62": "ffde62", - "ac9441": "ac9441", - "837362": "7e5649", - "ffffff": "ffffff" + "837362": "7e5649" }, "2": { "4a4139": "484848", "847163": "868686", "d6c7b5": "d5d5d5", "efe7ce": "ffffff", - "000000": "000000", - "ee8329": "ee8329", - "cd5241": "cd5241", "5a4131": "5c0026", "c6ae8c": "d56a70", "a58e6b": "b44954", "846952": "8c2c40", - "ffde62": "ffde62", - "ac9441": "ac9441", - "837362": "868686", - "ffffff": "ffffff" + "837362": "868686" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/127.json b/public/images/pokemon/variant/back/127.json index f49fb93e217..c094c7713de 100644 --- a/public/images/pokemon/variant/back/127.json +++ b/public/images/pokemon/variant/back/127.json @@ -5,13 +5,11 @@ "efe6ce": "eccb90", "4a423a": "441a0f", "d6c5b5": "d29f88", - "000000": "000000", "5a4231": "172a22", "e6d6b5": "92bab1", "c5ad8c": "72988e", "846b52": "3b554d", - "a58c6b": "54796f", - "ffffff": "ffffff" + "a58c6b": "54796f" }, "2": { "b5a594": "b7b7b7", @@ -19,12 +17,10 @@ "efe6ce": "ffffff", "4a423a": "484848", "d6c5b5": "d5d5d5", - "000000": "000000", "5a4231": "5c0026", "e6d6b5": "fa958c", "c5ad8c": "d56a70", "846b52": "8c2c40", - "a58c6b": "b44954", - "ffffff": "ffffff" + "a58c6b": "b44954" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/129.json b/public/images/pokemon/variant/back/129.json index d73f104ed91..7e9821bf337 100644 --- a/public/images/pokemon/variant/back/129.json +++ b/public/images/pokemon/variant/back/129.json @@ -1,7 +1,6 @@ { "1": { "7b6352": "a6452e", - "000000": "000000", "ffde29": "f0a475", "c5ad73": "d0784b", "840042": "312b45", @@ -17,7 +16,6 @@ }, "2": { "7b6352": "94836f", - "000000": "000000", "ffde29": "fffef3", "c5ad73": "e2d9c0", "840042": "6c0261", @@ -28,7 +26,6 @@ "ceced6": "d1bae7", "ffffff": "f9efff", "525263": "74619a", - "8c8ca5": "af97ce", - "ffefa5": "ffefa5" + "8c8ca5": "af97ce" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/130-mega.json b/public/images/pokemon/variant/back/130-mega.json index 1e091a7a55f..47217f75dc6 100644 --- a/public/images/pokemon/variant/back/130-mega.json +++ b/public/images/pokemon/variant/back/130-mega.json @@ -5,15 +5,10 @@ "44b4f4": "eea747", "826c4d": "90665d", "f8eaba": "fff3ec", - "0d0d0d": "0d0d0d", "cdac7b": "bd9b8e", "992137": "8691d5", "e6414a": "c9d4ff", - "202020": "202020", - "2b2d33": "682a23", - "3c3f47": "3c3f47", - "c3c3c3": "c3c3c3", - "202226": "202226" + "2b2d33": "682a23" }, "2": { "207cc1": "582c81", @@ -21,14 +16,10 @@ "44b4f4": "7b43a1", "826c4d": "855a71", "f8eaba": "ffedf4", - "0d0d0d": "0d0d0d", "cdac7b": "d7aec0", "992137": "a62869", "e6414a": "e15693", - "202020": "202020", - "2b2d33": "2b2d33", "3c3f47": "c07d4a", - "c3c3c3": "ddb07a", - "202226": "202226" + "c3c3c3": "ddb07a" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/130.json b/public/images/pokemon/variant/back/130.json index 088d8ca68c4..50f4527f1d7 100644 --- a/public/images/pokemon/variant/back/130.json +++ b/public/images/pokemon/variant/back/130.json @@ -2,20 +2,17 @@ "1": { "737b7b": "93776f", "f7f7f7": "fff3ec", - "191919": "191919", "d6def7": "d2bdb4", "194273": "873503", "218cad": "cd7c1b", "196394": "a85104", "42b5ef": "f2aa45", "f7e6ad": "fff3ec", - "ceb57b": "bd9b8e", - "5a4221": "5a4221" + "ceb57b": "bd9b8e" }, "2": { "737b7b": "ad6c94", "f7f7f7": "ffe8f4", - "191919": "191919", "d6def7": "f3c3de", "194273": "1f0a47", "218cad": "5e2b97", diff --git a/public/images/pokemon/variant/back/131-gigantamax.json b/public/images/pokemon/variant/back/131-gigantamax.json index 99ccd7f45d5..4b15e8f581a 100644 --- a/public/images/pokemon/variant/back/131-gigantamax.json +++ b/public/images/pokemon/variant/back/131-gigantamax.json @@ -3,14 +3,11 @@ "184152": "133363", "41a4e6": "85cfef", "73c5f6": "ffc0e7", - "101010": "101010", "397ba4": "3989b0", - "fffad6": "fffad6", "51fffb": "ff8de5", "8ba494": "a7b2ab", "52526a": "3c1838", "dec583": "dac99e", - "fefefe": "fefefe", "d5cdc5": "cb88b0", "a49494": "844a73", "807573": "6b3768", @@ -20,14 +17,11 @@ "184152": "06383e", "41a4e6": "49b18c", "73c5f6": "8bd3b6", - "101010": "101010", "397ba4": "3a8770", - "fffad6": "fffad6", "51fffb": "0085b2", "8ba494": "8ca594", "52526a": "282548", "dec583": "baafaa", - "fefefe": "fefefe", "d5cdc5": "969dbc", "a49494": "666b8b", "807573": "454565", diff --git a/public/images/pokemon/variant/back/131.json b/public/images/pokemon/variant/back/131.json index fc364e9a423..4f39e2730c6 100644 --- a/public/images/pokemon/variant/back/131.json +++ b/public/images/pokemon/variant/back/131.json @@ -2,15 +2,12 @@ "1": { "194252": "133363", "73c5f7": "c4f6ff", - "000000": "000000", "42a5e6": "85cfef", "3a7ba5": "408aaf", - "f7efe6": "f7efe6", "6b5219": "b83e94", "d6cec5": "cb88b0", "8ca594": "a7b2ab", "dec584": "dac99e", - "5a4a42": "5a4a42", "52526b": "51264d", "a59494": "844a73", "f7dead": "f1e9d9" @@ -18,13 +15,10 @@ "2": { "194252": "06383e", "73c5f7": "8bd3b6", - "000000": "000000", "42a5e6": "49b18c", "3a7ba5": "3a8770", - "f7efe6": "f7efe6", "6b5219": "256fc4", "d6cec5": "8289a9", - "8ca594": "8ca594", "dec584": "baafaa", "5a4a42": "574e49", "52526b": "262641", diff --git a/public/images/pokemon/variant/back/132.json b/public/images/pokemon/variant/back/132.json index f4ef6e8444a..c7f568267c8 100644 --- a/public/images/pokemon/variant/back/132.json +++ b/public/images/pokemon/variant/back/132.json @@ -4,15 +4,13 @@ "5a1994": "2a6d20", "b56bce": "6ab33c", "e6a5f7": "d5ea79", - "c57be6": "9dce55", - "000000": "000000" + "c57be6": "9dce55" }, "2": { "9c5ab5": "131432", "5a1994": "0e0c1c", "b56bce": "1f2345", "e6a5f7": "486195", - "c57be6": "2b3154", - "000000": "000000" + "c57be6": "2b3154" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/133-partner.json b/public/images/pokemon/variant/back/133-partner.json index d48eaad4364..c647162304a 100644 --- a/public/images/pokemon/variant/back/133-partner.json +++ b/public/images/pokemon/variant/back/133-partner.json @@ -4,7 +4,6 @@ "523121": "0b1145", "d69c4a": "90c1f1", "a5634a": "5982b7", - "000000": "000000", "ffe6ad": "d7ebff", "bd9c7b": "5f6f94", "e6c594": "8ca8d2" @@ -14,7 +13,6 @@ "523121": "461144", "d69c4a": "bf88cb", "a5634a": "915ea3", - "000000": "000000", "ffe6ad": "f3e6e3", "bd9c7b": "a07c83", "e6c594": "cfa7a9" diff --git a/public/images/pokemon/variant/back/133.json b/public/images/pokemon/variant/back/133.json index d48eaad4364..c647162304a 100644 --- a/public/images/pokemon/variant/back/133.json +++ b/public/images/pokemon/variant/back/133.json @@ -4,7 +4,6 @@ "523121": "0b1145", "d69c4a": "90c1f1", "a5634a": "5982b7", - "000000": "000000", "ffe6ad": "d7ebff", "bd9c7b": "5f6f94", "e6c594": "8ca8d2" @@ -14,7 +13,6 @@ "523121": "461144", "d69c4a": "bf88cb", "a5634a": "915ea3", - "000000": "000000", "ffe6ad": "f3e6e3", "bd9c7b": "a07c83", "e6c594": "cfa7a9" diff --git a/public/images/pokemon/variant/back/134.json b/public/images/pokemon/variant/back/134.json index 736a9262847..debdf1e028b 100644 --- a/public/images/pokemon/variant/back/134.json +++ b/public/images/pokemon/variant/back/134.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "104a63": "26185f", "bdad5a": "a26b30", "107394": "372194", @@ -11,7 +10,6 @@ "84deff": "c497e5" }, "2": { - "101010": "101010", "104a63": "742921", "bdad5a": "7d2f67", "107394": "983930", diff --git a/public/images/pokemon/variant/back/135.json b/public/images/pokemon/variant/back/135.json index d54215466ac..16bfbf03121 100644 --- a/public/images/pokemon/variant/back/135.json +++ b/public/images/pokemon/variant/back/135.json @@ -3,11 +3,9 @@ "ad8c3a": "975720", "846b29": "b87130", "ffde52": "eecc94", - "000000": "000000", "cead4a": "e4a254", "5a4a10": "894d17", "4a087b": "126746", - "84848c": "84848c", "525252": "3b3f50", "ffffff": "effffd", "c5c5c5": "aacbc7" @@ -16,11 +14,9 @@ "ad8c3a": "7a6f96", "846b29": "404076", "ffde52": "a8a2c1", - "000000": "000000", "cead4a": "7f7ba7", "5a4a10": "202046", "4a087b": "c08336", - "84848c": "84848c", "525252": "30486d", "ffffff": "c7cedb", "c5c5c5": "8e99b5" @@ -29,13 +25,8 @@ "ad8c3a": "4351d7", "846b29": "3249a6", "ffde52": "90ecee", - "000000": "000000", "cead4a": "47b4e9", "5a4a10": "1f2478", - "4a087b": "7b2817", - "84848c": "84848c", - "525252": "525252", - "ffffff": "ffffff", - "c5c5c5": "c5c5c5" + "4a087b": "7b2817" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/136.json b/public/images/pokemon/variant/back/136.json index 41987721533..0743aed4210 100644 --- a/public/images/pokemon/variant/back/136.json +++ b/public/images/pokemon/variant/back/136.json @@ -1,7 +1,6 @@ { "0": { "732119": "64391a", - "000000": "000000", "f7734a": "e6af4a", "d64252": "b1772e", "735a42": "5e4828", @@ -11,7 +10,6 @@ }, "1": { "732119": "1b5255", - "000000": "000000", "f7734a": "5dde9d", "d64252": "3aad8b", "735a42": "766a5b", @@ -21,7 +19,6 @@ }, "2": { "732119": "4c0013", - "000000": "000000", "f7734a": "b54144", "d64252": "8c2426", "735a42": "2d252a", diff --git a/public/images/pokemon/variant/back/137.json b/public/images/pokemon/variant/back/137.json index 47b4c121ebe..64558c39b24 100644 --- a/public/images/pokemon/variant/back/137.json +++ b/public/images/pokemon/variant/back/137.json @@ -6,11 +6,8 @@ "8cd6ef": "e9635a", "08add6": "ba333b", "f7d6c5": "fccee9", - "ffffff": "ffffff", "ff6363": "f8a8cd", "7b2942": "c5415c", - "000000": "000000", - "c5c5c5": "c5c5c5", "5abde6": "e9635a", "efad9c": "e883a9" }, @@ -24,7 +21,6 @@ "ffffff": "dea27e", "ff6363": "82391d", "7b2942": "280e07", - "000000": "000000", "c5c5c5": "c67f4b", "5abde6": "ffd9ab", "efad9c": "683420" diff --git a/public/images/pokemon/variant/back/138.json b/public/images/pokemon/variant/back/138.json index 8210f144709..7c596218457 100644 --- a/public/images/pokemon/variant/back/138.json +++ b/public/images/pokemon/variant/back/138.json @@ -5,7 +5,6 @@ "e6de84": "e67443", "c5ad73": "d04e2a", "635231": "821e16", - "000000": "000000", "426bad": "602a48", "9ce6f7": "d2a3c2", "63bdf7": "b17aa1", @@ -18,7 +17,6 @@ "e6de84": "404c5f", "c5ad73": "2a344b", "635231": "080a20", - "000000": "000000", "426bad": "1a7e5c", "9ce6f7": "43c787", "63bdf7": "43c787", diff --git a/public/images/pokemon/variant/back/139.json b/public/images/pokemon/variant/back/139.json index 57da8d0b167..53306bfbce9 100644 --- a/public/images/pokemon/variant/back/139.json +++ b/public/images/pokemon/variant/back/139.json @@ -2,27 +2,22 @@ "1": { "635242": "5f1e19", "9c846b": "973b2d", - "000000": "000000", "e6de84": "fdad7d", "c5ad73": "db764a", "426bad": "602a48", "63bdf7": "a36c8a", "3a4284": "380c23", - "3a9cce": "885374", - "424242": "424242", - "fff79c": "fff79c" + "3a9cce": "885374" }, "2": { "635242": "080a1d", "9c846b": "101530", - "000000": "000000", "e6de84": "435370", "c5ad73": "293257", "426bad": "1c624a", "63bdf7": "4dbc86", "3a4284": "03261c", "3a9cce": "37a075", - "424242": "14503b", - "fff79c": "fff79c" + "424242": "14503b" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/140.json b/public/images/pokemon/variant/back/140.json index d7466b4908f..b09c8dcc38a 100644 --- a/public/images/pokemon/variant/back/140.json +++ b/public/images/pokemon/variant/back/140.json @@ -2,9 +2,7 @@ "1": { "7b5229": "600006", "d6a552": "bf2512", - "ffffff": "ffffff", "4a2900": "3a000a", - "000000": "000000", "c58429": "9f1105", "a56b29": "870100", "5a4200": "221f7e", @@ -13,9 +11,7 @@ "2": { "7b5229": "140e80", "d6a552": "4b64e6", - "ffffff": "ffffff", "4a2900": "10065f", - "000000": "000000", "c58429": "334dd4", "a56b29": "1d28a5", "5a4200": "f6c09f", diff --git a/public/images/pokemon/variant/back/141.json b/public/images/pokemon/variant/back/141.json index aa6b896fafb..d1909ec4043 100644 --- a/public/images/pokemon/variant/back/141.json +++ b/public/images/pokemon/variant/back/141.json @@ -3,7 +3,6 @@ "4a4a63": "312c85", "ffffff": "c7ceff", "523119": "290105", - "000000": "000000", "e6e6d6": "9da3f7", "cea573": "c23721", "bd8c42": "a82216", @@ -15,7 +14,6 @@ "4a4a63": "8e4f0c", "ffffff": "ffd4bc", "523119": "150453", - "000000": "000000", "e6e6d6": "ffbb8a", "cea573": "4c6be7", "bd8c42": "3c45cc", diff --git a/public/images/pokemon/variant/back/142-mega.json b/public/images/pokemon/variant/back/142-mega.json index 6c0dfdb66be..d768d04c787 100644 --- a/public/images/pokemon/variant/back/142-mega.json +++ b/public/images/pokemon/variant/back/142-mega.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "484848": "922217", "9483a4": "7e494f", "1d1d1d": "3b0101", @@ -11,11 +10,9 @@ "31186a": "671707", "735294": "c54522", "9462cd": "df6d3c", - "f2f2f2": "f2f2f2", "317329": "2150d9" }, "2": { - "101010": "101010", "484848": "20606b", "9483a4": "889dab", "1d1d1d": "041c21", @@ -26,7 +23,6 @@ "31186a": "0c313c", "735294": "1e5e54", "9462cd": "348f78", - "f2f2f2": "f2f2f2", "317329": "c00c39" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/142.json b/public/images/pokemon/variant/back/142.json index 9cdfeb741dd..aae72d2e25b 100644 --- a/public/images/pokemon/variant/back/142.json +++ b/public/images/pokemon/variant/back/142.json @@ -4,12 +4,9 @@ "adadd6": "99686d", "cecee6": "b58788", "9484a5": "76454c", - "000000": "000000", "31196b": "671707", "735294": "c54522", "9463ce": "df6d3c", - "cecece": "cecece", - "ffffff": "ffffff", "317329": "2150d9" }, "2": { @@ -17,12 +14,9 @@ "adadd6": "a8bdcc", "cecee6": "cae0ec", "9484a5": "7c8e9f", - "000000": "000000", "31196b": "0b3433", "735294": "1e5e54", "9463ce": "348f78", - "cecece": "cecece", - "ffffff": "ffffff", "317329": "c00c39" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/144.json b/public/images/pokemon/variant/back/144.json index b7d8968da76..28242c5df86 100644 --- a/public/images/pokemon/variant/back/144.json +++ b/public/images/pokemon/variant/back/144.json @@ -3,51 +3,37 @@ "005273": "461660", "6badf7": "d7adff", "94c5ff": "f1dfff", - "000000": "000000", "4a84d6": "7b42ab", "003152": "461660", "007bbd": "a142c8", - "ffffff": "ffffff", - "cecece": "cecece", "5a3a19": "221531", "bd293a": "2d6cb0", "b59473": "736581", "8c6b52": "372841", - "cee6ff": "f1dfff", - "525252": "525252" + "cee6ff": "f1dfff" }, "1": { "005273": "4d0a3e", "6badf7": "ae5290", "94c5ff": "ffbee5", - "000000": "000000", "4a84d6": "6a1657", "003152": "380334", "007bbd": "ad6297", - "ffffff": "ffffff", - "cecece": "cecece", "5a3a19": "652b0f", - "bd293a": "bd293a", "b59473": "d99c5e", "8c6b52": "a9652f", - "cee6ff": "ffd4e9", - "525252": "525252" + "cee6ff": "ffd4e9" }, "2": { "005273": "904d00", "6badf7": "ffe67c", "94c5ff": "ffecbd", - "000000": "000000", "4a84d6": "e9b93f", "003152": "552b01", "007bbd": "fdc44c", - "ffffff": "ffffff", - "cecece": "cecece", "5a3a19": "492a11", - "bd293a": "bd293a", "b59473": "a08d74", "8c6b52": "7d6447", - "cee6ff": "fff8d7", - "525252": "525252" + "cee6ff": "fff8d7" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/145.json b/public/images/pokemon/variant/back/145.json index cd1b65a8cb7..d530fdb2295 100644 --- a/public/images/pokemon/variant/back/145.json +++ b/public/images/pokemon/variant/back/145.json @@ -7,8 +7,6 @@ "d6ad08": "cc4e17", "c56b19": "513131", "7b6b19": "2f1517", - "6b6b6b": "6b6b6b", - "ffffff": "ffffff", "9c8c31": "643738", "f79419": "6c4645" }, @@ -20,8 +18,6 @@ "d6ad08": "e3b68e", "c56b19": "dd6b10", "7b6b19": "885024", - "6b6b6b": "6b6b6b", - "ffffff": "ffffff", "9c8c31": "a06532", "f79419": "ff9a33" }, @@ -33,8 +29,6 @@ "d6ad08": "a32a71", "c56b19": "c992cb", "7b6b19": "970083", - "6b6b6b": "6b6b6b", - "ffffff": "ffffff", "9c8c31": "ce24a8", "f79419": "ffdeff" } diff --git a/public/images/pokemon/variant/back/146.json b/public/images/pokemon/variant/back/146.json index 55f5cd03506..6bba3ef779d 100644 --- a/public/images/pokemon/variant/back/146.json +++ b/public/images/pokemon/variant/back/146.json @@ -8,13 +8,9 @@ "ffd663": "ff3bac", "de9410": "431d43", "ffef63": "755c73", - "000000": "000000", "523a29": "57004d", "8c634a": "8c0c75", - "ffffff": "ffffff", - "b58c63": "dd2559", - "cecece": "cecece", - "636363": "636363" + "b58c63": "dd2559" }, "1": { "ef633a": "0ab10c", @@ -25,13 +21,9 @@ "ffd663": "fffa4c", "de9410": "c2b562", "ffef63": "feffe1", - "000000": "000000", "523a29": "840000", "8c634a": "ad1910", - "ffffff": "ffffff", - "b58c63": "de423a", - "cecece": "cecece", - "636363": "636363" + "b58c63": "de423a" }, "2": { "ef633a": "1377b3", @@ -42,12 +34,8 @@ "ffd663": "68fffd", "de9410": "58abdb", "ffef63": "dae9ff", - "000000": "000000", "523a29": "3e0b03", "8c634a": "78230b", - "ffffff": "ffffff", - "b58c63": "b05329", - "cecece": "cecece", - "636363": "636363" + "b58c63": "b05329" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/147.json b/public/images/pokemon/variant/back/147.json index 3373e281cc0..99ae600c1b0 100644 --- a/public/images/pokemon/variant/back/147.json +++ b/public/images/pokemon/variant/back/147.json @@ -2,7 +2,6 @@ "1": { "5a5a5a": "54787d", "9c948c": "79a2a3", - "000000": "000000", "ffffff": "def1ef", "ded6de": "a2c7c7", "5a63bd": "b24729", @@ -13,7 +12,6 @@ "2": { "5a5a5a": "8c7270", "9c948c": "c2a7a3", - "000000": "000000", "ffffff": "fff5f0", "ded6de": "dfc8c2", "5a63bd": "328f97", diff --git a/public/images/pokemon/variant/back/148.json b/public/images/pokemon/variant/back/148.json index db6cfd69857..a6b498ff215 100644 --- a/public/images/pokemon/variant/back/148.json +++ b/public/images/pokemon/variant/back/148.json @@ -8,7 +8,6 @@ "193173": "90150c", "7badff": "ffad67", "5a8cef": "f48c59", - "000000": "000000", "425aff": "359bbd", "7bceff": "61cce2", "19297b": "1b6794" @@ -22,7 +21,6 @@ "193173": "1b5f6f", "7badff": "90eacc", "5a8cef": "4aab9f", - "000000": "000000", "425aff": "b930bc", "7bceff": "f86ebf", "19297b": "971f7d" diff --git a/public/images/pokemon/variant/back/149.json b/public/images/pokemon/variant/back/149.json index ff4a7a77a21..da23b9af3bf 100644 --- a/public/images/pokemon/variant/back/149.json +++ b/public/images/pokemon/variant/back/149.json @@ -3,28 +3,20 @@ "5a3a21": "102908", "ffefbd": "def1ef", "f7bd5a": "f8b58f", - "000000": "000000", "ef9c3a": "e9917b", "de733a": "d15b67", "9c5a4a": "5a394e", "efbd8c": "a2c7c7", - "cecece": "cecece", - "ffffff": "ffffff", - "ad8c42": "79a2a3", - "636363": "636363" + "ad8c42": "79a2a3" }, "2": { "5a3a21": "102908", "ffefbd": "f8dfce", "f7bd5a": "8ed9c4", - "000000": "000000", "ef9c3a": "56a29e", "de733a": "35656d", "9c5a4a": "134050", "efbd8c": "c0a59d", - "cecece": "cecece", - "ffffff": "ffffff", - "ad8c42": "895e5c", - "636363": "636363" + "ad8c42": "895e5c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/150-mega-x.json b/public/images/pokemon/variant/back/150-mega-x.json index 0d3cbf49951..148ae70ee5a 100644 --- a/public/images/pokemon/variant/back/150-mega-x.json +++ b/public/images/pokemon/variant/back/150-mega-x.json @@ -1,25 +1,20 @@ { "1": { "7a7a99": "a66b8e", - "101010": "101010", "dadaf2": "ffb5d6", "36364d": "5a2952", "acacbf": "db8aaf", "461f59": "105144", "9643bf": "379e8a", - "f8f8f8": "f8f8f8", - "55a4f2": "55a4f2", "6e318c": "1d6153" }, "2": { "7a7a99": "d68f40", - "101010": "101010", "dadaf2": "ffdd98", "36364d": "884c17", "acacbf": "edaf5b", "461f59": "6b2619", "9643bf": "ac4f4b", - "f8f8f8": "f8f8f8", "55a4f2": "da2e29", "6e318c": "6b2619" } diff --git a/public/images/pokemon/variant/back/150-mega-y.json b/public/images/pokemon/variant/back/150-mega-y.json index daae4ff6ca7..99061b18c16 100644 --- a/public/images/pokemon/variant/back/150-mega-y.json +++ b/public/images/pokemon/variant/back/150-mega-y.json @@ -4,16 +4,13 @@ "dadaf2": "ffb5d6", "36364d": "5a2952", "acacbf": "db8aaf", - "101010": "101010", "9643bf": "43bfbd", "be55f2": "55f2e1", "461f59": "1f5859", "6e318c": "318c8a", - "f8f8f8": "f8f8f8", "f25555": "4bac9a" }, "2": { - "101010": "101010", "36364d": "884c17", "461f59": "59201f", "6e318c": "8c3331", @@ -21,8 +18,7 @@ "9643bf": "bf4c43", "be55f2": "f26155", "acacbf": "edaf5b", - "f25555": "f25555", "f8f8f8": "ffdd98", "dadaf2": "ffdd98" } -} +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/150.json b/public/images/pokemon/variant/back/150.json index 51435df396e..5f50624308f 100644 --- a/public/images/pokemon/variant/back/150.json +++ b/public/images/pokemon/variant/back/150.json @@ -4,8 +4,6 @@ "847b9c": "a66b8e", "b5adc5": "db8aaf", "ded6e6": "ffd6ef", - "000000": "000000", - "ffffff": "ffffff", "9442bd": "4bac9a", "6b319c": "196b5b", "3a2152": "12493f" @@ -15,8 +13,6 @@ "847b9c": "edaf5b", "b5adc5": "ffdd98", "ded6e6": "ffeeb6", - "000000": "000000", - "ffffff": "ffffff", "9442bd": "ac4f4b", "6b319c": "6b2619", "3a2152": "884c17" diff --git a/public/images/pokemon/variant/back/151.json b/public/images/pokemon/variant/back/151.json index 822e201bc18..5aab0a15c4e 100644 --- a/public/images/pokemon/variant/back/151.json +++ b/public/images/pokemon/variant/back/151.json @@ -3,7 +3,6 @@ "5a2952": "5c2da1", "ef84b5": "ab87cf", "b56394": "895ac3", - "000000": "000000", "ffb5d6": "d3b8e8", "ffd6ef": "eed7fa", "f7b584": "e86140" @@ -12,7 +11,6 @@ "5a2952": "884c17", "ef84b5": "edaf5b", "b56394": "ba7324", - "000000": "000000", "ffb5d6": "ffdd98", "ffd6ef": "ffeeb6", "f7b584": "55716f" diff --git a/public/images/pokemon/variant/back/161.json b/public/images/pokemon/variant/back/161.json index b91fd4d8573..21ec81e5dca 100644 --- a/public/images/pokemon/variant/back/161.json +++ b/public/images/pokemon/variant/back/161.json @@ -1,7 +1,6 @@ { "1": { "3a1910": "15143c", - "101010": "101010", "634231": "46387d", "4a3121": "252054", "a5734a": "ba82dd", @@ -12,7 +11,6 @@ }, "2": { "3a1910": "243064", - "101010": "101010", "634231": "667fb8", "4a3121": "3c508b", "a5734a": "aac7e9", diff --git a/public/images/pokemon/variant/back/162.json b/public/images/pokemon/variant/back/162.json index 1e630e957cd..c779f8dde58 100644 --- a/public/images/pokemon/variant/back/162.json +++ b/public/images/pokemon/variant/back/162.json @@ -1,6 +1,5 @@ { "1": { - "212129": "212129", "7b423a": "342e6d", "ffef94": "b7abde", "e6c54a": "988fc7", @@ -9,11 +8,9 @@ "ad8429": "716aa8", "c59c42": "716aa8", "ffffc5": "d3c8ec", - "ffffff": "ffffff", "737373": "3a8591" }, "2": { - "212129": "212129", "7b423a": "56697a", "ffef94": "daeff5", "e6c54a": "b4d1dc", @@ -22,7 +19,6 @@ "ad8429": "67748a", "c59c42": "67748a", "ffffc5": "f9feff", - "ffffff": "ffffff", "737373": "cc3b46" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/163.json b/public/images/pokemon/variant/back/163.json index 5ba8ecd4c64..b01e81a5963 100644 --- a/public/images/pokemon/variant/back/163.json +++ b/public/images/pokemon/variant/back/163.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "424242": "2c203e", "734a19": "3d346b", "bd8c42": "9c83c7", @@ -10,12 +9,9 @@ "debd9c": "a3b0d2", "6b3119": "2e1f39", "bd5a29": "663e5f", - "efad94": "87627e", - "ffffff": "ffffff", - "7b7b7b": "7b7b7b" + "efad94": "87627e" }, "2": { - "101010": "101010", "424242": "192133", "734a19": "435170", "bd8c42": "a5b4be", @@ -25,8 +21,6 @@ "debd9c": "ccd4d9", "6b3119": "36282b", "bd5a29": "291920", - "efad94": "4f4143", - "ffffff": "ffffff", - "7b7b7b": "7b7b7b" + "efad94": "4f4143" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/164.json b/public/images/pokemon/variant/back/164.json index 699a992b724..b815ed5851a 100644 --- a/public/images/pokemon/variant/back/164.json +++ b/public/images/pokemon/variant/back/164.json @@ -8,11 +8,7 @@ "deb56b": "a08dbd", "bd9463": "6b5d90", "9c735a": "443c64", - "634231": "161633", - "101010": "101010", - "636363": "636363", - "c5c5c5": "c5c5c5", - "ffffff": "ffffff" + "634231": "161633" }, "2": { "a5846b": "7a8d99", @@ -23,10 +19,6 @@ "deb56b": "c4d0d4", "bd9463": "99abb3", "9c735a": "768894", - "634231": "313f51", - "101010": "101010", - "636363": "636363", - "c5c5c5": "c5c5c5", - "ffffff": "ffffff" + "634231": "313f51" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/169.json b/public/images/pokemon/variant/back/169.json index 34cfabeb573..a22d7e92559 100644 --- a/public/images/pokemon/variant/back/169.json +++ b/public/images/pokemon/variant/back/169.json @@ -4,7 +4,6 @@ "a55ace": "3d4381", "7b4a9c": "2f2a5f", "b57bce": "666fb4", - "101010": "101010", "08426b": "b06130", "216b94": "ffb049" }, @@ -13,7 +12,6 @@ "a55ace": "b49db2", "7b4a9c": "80607b", "b57bce": "c8b6c2", - "101010": "101010", "08426b": "901606", "216b94": "b52c0c" } diff --git a/public/images/pokemon/variant/back/173.json b/public/images/pokemon/variant/back/173.json index f181872451c..3b0a5dd3b7a 100644 --- a/public/images/pokemon/variant/back/173.json +++ b/public/images/pokemon/variant/back/173.json @@ -6,7 +6,6 @@ "de7b6b": "7c52ba", "ffa594": "9579c9", "523100": "44004a", - "101010": "101010", "6b4a31": "494299", "a56b00": "647cb3", "c58c29": "5ca3bf" @@ -18,7 +17,6 @@ "de7b6b": "95aeff", "ffa594": "b2d6ff", "523100": "912676", - "101010": "101010", "6b4a31": "b35783", "a56b00": "f28aa4", "c58c29": "ffc5e3" diff --git a/public/images/pokemon/variant/back/175.json b/public/images/pokemon/variant/back/175.json index 897a5189daf..b15179727ee 100644 --- a/public/images/pokemon/variant/back/175.json +++ b/public/images/pokemon/variant/back/175.json @@ -2,14 +2,12 @@ "0": { "94735a": "844466", "734a4a": "5b2847", - "000000": "000000", "ce9c73": "a7738f", "f7d6a5": "e4b2bb", "f7efc5": "f7c9c5", "7b8c94": "9c8c84", "d6dede": "ded6d6", "b5b5c5": "c5b5b5", - "ffffff": "ffffff", "de736b": "8ee4be", "c54242": "409e80", "4a84c5": "d05887", @@ -18,7 +16,6 @@ "1": { "94735a": "734350", "734a4a": "452030", - "000000": "000000", "ce9c73": "a26867", "f7d6a5": "be868a", "f7efc5": "f7c5ce", @@ -34,7 +31,6 @@ "2": { "94735a": "404d5b", "734a4a": "1f293b", - "000000": "000000", "ce9c73": "8093a5", "f7d6a5": "afc2d1", "f7efc5": "ddeaef", diff --git a/public/images/pokemon/variant/back/176.json b/public/images/pokemon/variant/back/176.json index 43e27a02cda..d16ca14a3ab 100644 --- a/public/images/pokemon/variant/back/176.json +++ b/public/images/pokemon/variant/back/176.json @@ -1,7 +1,6 @@ { "0": { "737b84": "6b3552", - "000000": "000000", "ffffff": "eee0db", "adc5bd": "b58f8f", "d6efef": "d2bcb7", @@ -10,7 +9,6 @@ }, "1": { "737b84": "734350", - "000000": "000000", "ffffff": "f3cbcb", "adc5bd": "ae7675", "d6efef": "c79397", @@ -19,7 +17,6 @@ }, "2": { "737b84": "404d5b", - "000000": "000000", "ffffff": "ddeaef", "adc5bd": "8093a5", "d6efef": "afc2d1", diff --git a/public/images/pokemon/variant/back/177.json b/public/images/pokemon/variant/back/177.json index 7b2c7d04a48..625103692a6 100644 --- a/public/images/pokemon/variant/back/177.json +++ b/public/images/pokemon/variant/back/177.json @@ -1,6 +1,5 @@ { "1": { - "292929": "292929", "842900": "001d3f", "d63131": "174d69", "ff424a": "4b798a", @@ -10,12 +9,9 @@ "296b29": "b36848", "846321": "356f6d", "ffde29": "8ddcaf", - "d6ad29": "4ca690", - "ffffff": "ffffff", - "cecece": "cecece" + "d6ad29": "4ca690" }, "2": { - "292929": "292929", "842900": "3b060c", "d63131": "662340", "ff424a": "9a3841", @@ -25,8 +21,6 @@ "296b29": "224181", "846321": "382c78", "ffde29": "8767bf", - "d6ad29": "554196", - "ffffff": "ffffff", - "cecece": "cecece" + "d6ad29": "554196" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/179.json b/public/images/pokemon/variant/back/179.json index 1b5b96d0ed4..80a80f85b86 100644 --- a/public/images/pokemon/variant/back/179.json +++ b/public/images/pokemon/variant/back/179.json @@ -1,13 +1,11 @@ { "1": { "847352": "8f6c51", - "101010": "101010", "ceb58c": "b69977", "e6cea5": "deccb2", "ffe6bd": "f2ebdb", "e6ad00": "d26b00", "ffde00": "fdba5b", - "ffffff": "ffffff", "a5a5a5": "452f32", "525252": "301a21", "b57b00": "a23c00", @@ -18,13 +16,11 @@ }, "2": { "847352": "131026", - "101010": "101010", "ceb58c": "2b2447", "e6cea5": "352b53", "ffe6bd": "4b3c68", "e6ad00": "c33486", "ffde00": "ee74c1", - "ffffff": "ffffff", "a5a5a5": "2d282a", "525252": "221b1f", "b57b00": "88205b", diff --git a/public/images/pokemon/variant/back/180.json b/public/images/pokemon/variant/back/180.json index 5605b9dda8c..8f83626315d 100644 --- a/public/images/pokemon/variant/back/180.json +++ b/public/images/pokemon/variant/back/180.json @@ -4,7 +4,6 @@ "84738c": "693806", "ffffff": "ffe6aa", "dee6f7": "ebbb78", - "101010": "101010", "4a4a5a": "4d2102", "de4263": "884626", "ff7373": "8e4c38", @@ -20,7 +19,6 @@ "84738c": "693806", "ffffff": "ffe6aa", "dee6f7": "ebbb78", - "101010": "101010", "4a4a5a": "4d2102", "de4263": "884626", "ff7373": "9a5328", diff --git a/public/images/pokemon/variant/back/181-mega.json b/public/images/pokemon/variant/back/181-mega.json index f26151236d5..6d064fc5d32 100644 --- a/public/images/pokemon/variant/back/181-mega.json +++ b/public/images/pokemon/variant/back/181-mega.json @@ -2,7 +2,6 @@ "1": { "737373": "58341f", "f8f8f8": "ffe8b2", - "101010": "101010", "bfbfbf": "e5c079", "bf370a": "e28f09", "734b22": "49200d", @@ -15,7 +14,6 @@ "2": { "737373": "5d412a", "f8f8f8": "fff1d0", - "101010": "101010", "bfbfbf": "ebbb78", "bf370a": "d26b00", "734b22": "49200d", diff --git a/public/images/pokemon/variant/back/181.json b/public/images/pokemon/variant/back/181.json index d26f2773b32..2fd605b86be 100644 --- a/public/images/pokemon/variant/back/181.json +++ b/public/images/pokemon/variant/back/181.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "636b6b": "521a03", "c54200": "eaa60f", "ce8c10": "492602", @@ -10,11 +9,9 @@ "ffef4a": "af724a", "adadad": "ebbb78", "e6e6e6": "ffe6aa", - "ffffff": "ffffff", "8c2100": "c06400" }, "2": { - "101010": "101010", "636b6b": "3e2752", "c54200": "d53691", "ce8c10": "1c2a6d", @@ -23,8 +20,6 @@ "845a31": "131a51", "ffef4a": "78a8ec", "adadad": "b38582", - "e6e6e6": "e6e6e6", - "ffffff": "ffffff", "8c2100": "b12173" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/182.json b/public/images/pokemon/variant/back/182.json index b544187f64e..319fa7bec95 100644 --- a/public/images/pokemon/variant/back/182.json +++ b/public/images/pokemon/variant/back/182.json @@ -3,7 +3,6 @@ "840000": "338497", "f76b00": "79f6d5", "d62100": "49c1c2", - "101010": "101010", "526329": "659251", "9cd64a": "d8ecb1", "73ad31": "a2d281", @@ -18,7 +17,6 @@ "840000": "a7801f", "f76b00": "eaed6e", "d62100": "cdbb39", - "101010": "101010", "526329": "592819", "9cd64a": "b68356", "73ad31": "804428", diff --git a/public/images/pokemon/variant/back/183.json b/public/images/pokemon/variant/back/183.json index 99046544dc4..668660a08cc 100644 --- a/public/images/pokemon/variant/back/183.json +++ b/public/images/pokemon/variant/back/183.json @@ -5,7 +5,6 @@ "5a9cef": "fb95c2", "193a73": "822156", "4284ce": "e067b0", - "101010": "101010", "636363": "7c6a7d" }, "2": { @@ -14,7 +13,6 @@ "5a9cef": "74847c", "193a73": "362d27", "4284ce": "5a6362", - "101010": "101010", "636363": "56504e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/184.json b/public/images/pokemon/variant/back/184.json index b6b63cc9890..ec9460f13ad 100644 --- a/public/images/pokemon/variant/back/184.json +++ b/public/images/pokemon/variant/back/184.json @@ -4,19 +4,15 @@ "5a9cef": "fdb1cc", "4284ce": "e077ab", "316bad": "d47090", - "101010": "101010", "7b9cc5": "dea0c1", - "c5c5d6": "ffdbdf", - "6b6b6b": "6b6b6b" + "c5c5d6": "ffdbdf" }, "2": { "193a73": "3f344d", "5a9cef": "698f7b", "4284ce": "49736f", "316bad": "496666", - "101010": "101010", "7b9cc5": "94a396", - "c5c5d6": "bcbeab", - "6b6b6b": "6b6b6b" + "c5c5d6": "bcbeab" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/185.json b/public/images/pokemon/variant/back/185.json index 2d8d461fbe7..18183ce113e 100644 --- a/public/images/pokemon/variant/back/185.json +++ b/public/images/pokemon/variant/back/185.json @@ -1,7 +1,6 @@ { "1": { "635a4a": "322a22", - "101010": "101010", "ad845a": "5d564e", "8c7342": "4c443b", "315a19": "3d1e0c", @@ -12,7 +11,6 @@ }, "2": { "635a4a": "332868", - "101010": "101010", "ad845a": "4058a8", "8c7342": "47449e", "315a19": "cf985e", diff --git a/public/images/pokemon/variant/back/19.json b/public/images/pokemon/variant/back/19.json index f87f36e8edc..57f4dd2cb01 100644 --- a/public/images/pokemon/variant/back/19.json +++ b/public/images/pokemon/variant/back/19.json @@ -4,13 +4,10 @@ "d69cd6": "88a0b1", "b573bd": "5f778e", "4a2942": "262f4f", - "101010": "101010", "a57308": "a17c7d", "efdeb5": "e8cec9", "634a08": "765358", "cead63": "c4a3a1", - "ffffff": "ffffff", - "5a5a5a": "5a5a5a", "e65a73": "739794" }, "2": { @@ -18,13 +15,10 @@ "d69cd6": "fff5eb", "b573bd": "efdcd1", "4a2942": "865c54", - "101010": "101010", "a57308": "ba476f", "efdeb5": "efb5c0", "634a08": "7e3754", "cead63": "d98a9f", - "ffffff": "ffffff", - "5a5a5a": "5a5a5a", "e65a73": "707b83" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/190.json b/public/images/pokemon/variant/back/190.json index d89680a2200..9c7c9e1b4e1 100644 --- a/public/images/pokemon/variant/back/190.json +++ b/public/images/pokemon/variant/back/190.json @@ -2,7 +2,6 @@ "1": { "52216b": "701523", "a55ac5": "c47440", - "000000": "000000", "bd7bde": "dea95a", "8442ad": "ad452f", "8c6b42": "8c7457", @@ -13,7 +12,6 @@ "2": { "52216b": "807870", "a55ac5": "bfbeb4", - "000000": "000000", "bd7bde": "e5dfdf", "8442ad": "a6a297", "8c6b42": "632339", diff --git a/public/images/pokemon/variant/back/193.json b/public/images/pokemon/variant/back/193.json index 8c6770f192a..c8679f12e39 100644 --- a/public/images/pokemon/variant/back/193.json +++ b/public/images/pokemon/variant/back/193.json @@ -11,7 +11,6 @@ "73a54a": "7262de", "6b7b84": "a36280", "c5d6ef": "ed9db5", - "101010": "101010", "4a4a52": "693e78" }, "2": { @@ -26,7 +25,6 @@ "73a54a": "46769c", "6b7b84": "607b84", "c5d6ef": "d8edbb", - "101010": "101010", "4a4a52": "3e4a52" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/196.json b/public/images/pokemon/variant/back/196.json index fd930465c7f..92eb5c3843c 100644 --- a/public/images/pokemon/variant/back/196.json +++ b/public/images/pokemon/variant/back/196.json @@ -4,7 +4,6 @@ "b57bb5": "416240", "e6a5d6": "6c9e63", "efbdef": "bddd9e", - "101010": "101010", "314273": "a86a2c", "4a73b5": "ffb554" }, @@ -13,7 +12,6 @@ "b57bb5": "d1759c", "e6a5d6": "e99eae", "efbdef": "d2a2b5", - "101010": "101010", "314273": "537fde", "4a73b5": "90b7f9" }, @@ -22,7 +20,6 @@ "b57bb5": "ce987a", "e6a5d6": "ded0af", "efbdef": "f5f3e1", - "101010": "101010", "314273": "194540", "4a73b5": "39816d" } diff --git a/public/images/pokemon/variant/back/197.json b/public/images/pokemon/variant/back/197.json index ee4a8cd3ce5..d855e228fb5 100644 --- a/public/images/pokemon/variant/back/197.json +++ b/public/images/pokemon/variant/back/197.json @@ -3,7 +3,6 @@ "29314a": "3a2534", "424252": "553849", "63637b": "896c75", - "101010": "101010", "efd652": "ff5153", "b59429": "c72343", "525200": "9b0f33" @@ -12,7 +11,6 @@ "29314a": "9f8981", "424252": "d3bcb1", "63637b": "eddbcf", - "101010": "101010", "efd652": "e7af5d", "b59429": "bf793b", "525200": "974623" diff --git a/public/images/pokemon/variant/back/199.json b/public/images/pokemon/variant/back/199.json index f17d7951ccd..9aec41df0fb 100644 --- a/public/images/pokemon/variant/back/199.json +++ b/public/images/pokemon/variant/back/199.json @@ -3,14 +3,11 @@ "63636b": "734927", "d6d6d6": "f1d191", "ada5a5": "bf9562", - "101010": "101010", - "ffffff": "ffffff", "a53129": "538a55", "ce5252": "542a28", "ff5a4a": "93de76", "e64221": "50b64e", "b52919": "2b191b", - "d1cdc9": "d1cdc9", "ef736b": "5b3332", "ff9c94": "885345", "deb531": "b97565", @@ -20,14 +17,11 @@ "63636b": "192b32", "d6d6d6": "4c7668", "ada5a5": "2b4a48", - "101010": "101010", - "ffffff": "ffffff", "a53129": "2e1910", "ce5252": "b0613c", "ff5a4a": "6f4d35", "e64221": "543322", "b52919": "893d28", - "d1cdc9": "d1cdc9", "ef736b": "de9048", "ff9c94": "edbc69", "deb531": "bf4f2a", diff --git a/public/images/pokemon/variant/back/2.json b/public/images/pokemon/variant/back/2.json index ba7f0b01ff9..90b02797ad5 100644 --- a/public/images/pokemon/variant/back/2.json +++ b/public/images/pokemon/variant/back/2.json @@ -7,11 +7,9 @@ "7bd673": "ff745e", "63ad5a": "c24627", "104a3a": "4a1117", - "101010": "101010", "10424a": "57004f", "219484": "9c1a73", - "5acebd": "de359a", - "ffffff": "ffffff" + "5acebd": "de359a" }, "2": { "7b3129": "2e3601", @@ -20,11 +18,8 @@ "317b52": "446b94", "7bd673": "bef0fa", "63ad5a": "80c3d9", - "104a3a": "104a3a", - "101010": "101010", "10424a": "733502", "219484": "c76102", - "5acebd": "faa405", - "ffffff": "ffffff" + "5acebd": "faa405" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/20.json b/public/images/pokemon/variant/back/20.json index 3b1a46c1f8b..5171363f30f 100644 --- a/public/images/pokemon/variant/back/20.json +++ b/public/images/pokemon/variant/back/20.json @@ -3,32 +3,24 @@ "6b3a00": "261518", "a57329": "352121", "c5943a": "4a3331", - "101010": "101010", "c58452": "bc9087", "ffce9c": "dfc0b3", "945210": "764f4d", "845a29": "48272e", - "b5b5b5": "b5b5b5", "a58431": "784e54", "f7f7a5": "d2b2ad", - "ffffff": "ffffff", - "efce73": "c09b9c", - "737373": "737373" + "efce73": "c09b9c" }, "2": { "6b3a00": "7f645c", "a57329": "bba08f", "c5943a": "e2cbb9", - "101010": "101010", "c58452": "ae6f7e", "ffce9c": "e4b4b4", "945210": "813636", "845a29": "34171d", - "b5b5b5": "b5b5b5", "a58431": "631737", "f7f7a5": "c46771", - "ffffff": "ffffff", - "efce73": "973a59", - "737373": "737373" + "efce73": "973a59" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/200.json b/public/images/pokemon/variant/back/200.json index 2e11c0eeb76..5d11a30847e 100644 --- a/public/images/pokemon/variant/back/200.json +++ b/public/images/pokemon/variant/back/200.json @@ -3,7 +3,6 @@ "9c3a4a": "cc762f", "631942": "71370f", "de63a5": "f6b557", - "101010": "101010", "192942": "432e69", "3a6384": "8366ab", "314a63": "603f90", diff --git a/public/images/pokemon/variant/back/2027.json b/public/images/pokemon/variant/back/2027.json index 19a32275979..bffe4327837 100644 --- a/public/images/pokemon/variant/back/2027.json +++ b/public/images/pokemon/variant/back/2027.json @@ -4,8 +4,6 @@ "354e73": "752e42", "b6dbe7": "ffdac2", "84b3ce": "d27c80", - "fefefe": "fefefe", - "101010": "101010", "897e67": "aaaa96", "fefea9": "fffffc", "d1c592": "d3d3c6" @@ -15,8 +13,6 @@ "354e73": "3d2c78", "b6dbe7": "dbb1eb", "84b3ce": "a87bcf", - "fefefe": "fefefe", - "101010": "101010", "897e67": "2e163d", "fefea9": "6f3480", "d1c592": "44225a" diff --git a/public/images/pokemon/variant/back/2028.json b/public/images/pokemon/variant/back/2028.json index e2a25c789c1..6a47ecacf45 100644 --- a/public/images/pokemon/variant/back/2028.json +++ b/public/images/pokemon/variant/back/2028.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "3a6b8c": "692a61", "f1f1f4": "fffffc", "b0e5f8": "fffed9", @@ -16,7 +15,6 @@ "9994b6": "8d6e6f" }, "2": { - "101010": "101010", "3a6b8c": "3c2d74", "f1f1f4": "e3f0ff", "b0e5f8": "f8f5b0", diff --git a/public/images/pokemon/variant/back/203.json b/public/images/pokemon/variant/back/203.json index 1429eb40c25..cb82db0fd3c 100644 --- a/public/images/pokemon/variant/back/203.json +++ b/public/images/pokemon/variant/back/203.json @@ -1,14 +1,12 @@ { "1": { "424a73": "351810", - "ffffff": "ffffff", "adb5d6": "8f6f66", "6b8cb5": "512b21", "4a3a3a": "231117", "efde52": "9c3e3e", "c5a53a": "7e262d", "9c3a5a": "ab9d75", - "101010": "101010", "9c7b42": "571522", "ce6b94": "d8d1ad", "947b6b": "1f4062", @@ -18,14 +16,12 @@ }, "2": { "424a73": "27091d", - "ffffff": "ffffff", "adb5d6": "c5b0b7", "6b8cb5": "4a1b33", "4a3a3a": "091225", "efde52": "2a9d8f", "c5a53a": "1e7884", "9c3a5a": "52ab5f", - "101010": "101010", "9c7b42": "15545d", "ce6b94": "a8e781", "947b6b": "1a2e43", diff --git a/public/images/pokemon/variant/back/2052.json b/public/images/pokemon/variant/back/2052.json index 97ce82e0380..6e709a677f7 100644 --- a/public/images/pokemon/variant/back/2052.json +++ b/public/images/pokemon/variant/back/2052.json @@ -2,10 +2,8 @@ "1": { "45505f": "8c583b", "91a3bf": "ffda5c", - "101010": "101010", "995433": "493473", "627986": "de974e", - "f3f3f3": "f3f3f3", "e3cc2b": "a66db5", "ca833c": "7a519a", "798071": "7a4888", @@ -15,10 +13,8 @@ "2": { "45505f": "271420", "91a3bf": "7c4e42", - "101010": "101010", "995433": "45328e", "627986": "5f3036", - "f3f3f3": "f3f3f3", "e3cc2b": "b5b8f9", "ca833c": "7b7fda", "798071": "5f5c7e", diff --git a/public/images/pokemon/variant/back/2053.json b/public/images/pokemon/variant/back/2053.json index 3924a1a57f8..0defe48e028 100644 --- a/public/images/pokemon/variant/back/2053.json +++ b/public/images/pokemon/variant/back/2053.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "262b3c": "41185e", "464457": "71442a", "6c7791": "de974e", @@ -8,7 +7,6 @@ "5f6281": "8c583b" }, "2": { - "101010": "101010", "262b3c": "1d1b33", "464457": "271420", "6c7791": "5f3036", diff --git a/public/images/pokemon/variant/back/206.json b/public/images/pokemon/variant/back/206.json index c9d70c975cc..1c902ff2472 100644 --- a/public/images/pokemon/variant/back/206.json +++ b/public/images/pokemon/variant/back/206.json @@ -6,7 +6,6 @@ "f7ffff": "f6ffff", "debd3a": "aeaeae", "318ca5": "4a6165", - "101010": "101010", "6bbdce": "748da4", "216b84": "2a413f", "d6e6f7": "d8edf3", @@ -21,7 +20,6 @@ "f7ffff": "fdffdc", "debd3a": "a12e55", "318ca5": "38a8a6", - "101010": "101010", "6bbdce": "73d7d5", "216b84": "1d737a", "d6e6f7": "ffd4ac", diff --git a/public/images/pokemon/variant/back/207.json b/public/images/pokemon/variant/back/207.json index 52c582cf1a8..dee74529c90 100644 --- a/public/images/pokemon/variant/back/207.json +++ b/public/images/pokemon/variant/back/207.json @@ -3,14 +3,12 @@ "63314a": "7f4812", "e6a5ce": "f8dd84", "de84b5": "daa93f", - "101010": "101010", "ad6394": "b67322" }, "2": { "63314a": "5f1723", "e6a5ce": "ef6b58", "de84b5": "c04144", - "101010": "101010", "ad6394": "97343c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/212-mega.json b/public/images/pokemon/variant/back/212-mega.json index c9755a5cb27..e118c31d3be 100644 --- a/public/images/pokemon/variant/back/212-mega.json +++ b/public/images/pokemon/variant/back/212-mega.json @@ -3,37 +3,19 @@ "662929": "215a2d", "a62929": "2f794e", "d93636": "4a9c53", - "101010": "101010", - "404040": "404040", - "f8f8f8": "f8f8f8", - "bfbfbf": "bfbfbf", - "737373": "737373", - "0cb9f2": "0cb9f2", - "087599": "087599", "f26161": "8cce73" }, "1": { "662929": "2f2962", "a62929": "29429c", "d93636": "4263ef", - "101010": "101010", - "404040": "404040", - "f8f8f8": "f8f8f8", - "bfbfbf": "bfbfbf", - "737373": "737373", - "0cb9f2": "0cb9f2", - "087599": "087599", "f26161": "639cf7" }, "2": { "662929": "645117", "a62929": "b88619", "d93636": "ffca2a", - "101010": "101010", - "404040": "404040", - "f8f8f8": "f8f8f8", "bfbfbf": "cdccb4", - "737373": "737373", "0cb9f2": "f4e920", "087599": "b49800", "f26161": "c59f29" diff --git a/public/images/pokemon/variant/back/212.json b/public/images/pokemon/variant/back/212.json index 84f12bf1434..3c7d9a4799c 100644 --- a/public/images/pokemon/variant/back/212.json +++ b/public/images/pokemon/variant/back/212.json @@ -3,24 +3,14 @@ "632929": "215a2d", "f76b6b": "8cce73", "a52929": "2f794e", - "101010": "101010", - "d63a3a": "4a9c53", - "9494a5": "9494a5", - "ffffff": "ffffff", - "b5b5ce": "b5b5ce", - "3a3a4a": "3a3a4a", - "9c6b21": "9c6b21", - "dec510": "dec510" + "d63a3a": "4a9c53" }, "1": { "632929": "2f2962", "f76b6b": "639cf7", "a52929": "29429c", - "101010": "101010", "d63a3a": "4263ef", "9494a5": "6262a4", - "ffffff": "ffffff", - "b5b5ce": "b5b5ce", "3a3a4a": "3c3c50", "9c6b21": "131387", "dec510": "10bdde" @@ -29,13 +19,8 @@ "632929": "645117", "f76b6b": "c59f29", "a52929": "b88619", - "101010": "101010", "d63a3a": "ffca2a", "9494a5": "3c4543", - "ffffff": "ffffff", - "b5b5ce": "b5b5ce", - "3a3a4a": "282d2c", - "9c6b21": "9c6b21", - "dec510": "dec510" + "3a3a4a": "282d2c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/213.json b/public/images/pokemon/variant/back/213.json index 11a4ca52ff1..87d543f7868 100644 --- a/public/images/pokemon/variant/back/213.json +++ b/public/images/pokemon/variant/back/213.json @@ -4,7 +4,6 @@ "735210": "5d1931", "ffff5a": "d68b71", "efc54a": "cc5b74", - "101010": "101010", "6b633a": "8e4d31", "ffffff": "fff0d8", "d6ceb5": "fcc86f", @@ -18,7 +17,6 @@ "735210": "254d59", "ffff5a": "aaedbe", "efc54a": "5bbfaa", - "101010": "101010", "6b633a": "1f1f1f", "ffffff": "705b66", "d6ceb5": "4f3e46", diff --git a/public/images/pokemon/variant/back/215.json b/public/images/pokemon/variant/back/215.json index 1c3719c45bf..624c90d4a21 100644 --- a/public/images/pokemon/variant/back/215.json +++ b/public/images/pokemon/variant/back/215.json @@ -6,7 +6,6 @@ "316373": "6d1631", "21315a": "220a11", "3a94ad": "ac373e", - "000000": "000000", "42849c": "902738", "bdbdc5": "c5a080", "4a4a4a": "69523f", @@ -19,10 +18,8 @@ "316373": "d4874f", "21315a": "723522", "3a94ad": "fbdba1", - "000000": "000000", "42849c": "eab273", "bdbdc5": "a1a0c3", - "4a4a4a": "383d51", - "f7f7ff": "f7f7ff" + "4a4a4a": "383d51" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/216.json b/public/images/pokemon/variant/back/216.json index 014803f0c86..67087b3d9ea 100644 --- a/public/images/pokemon/variant/back/216.json +++ b/public/images/pokemon/variant/back/216.json @@ -1,38 +1,26 @@ { "0": { "6b4219": "225c35", - "101010": "101010", "ff843a": "90db6d", "b56321": "4cae50", "de7331": "6ac669", "ffe6a5": "ffffb5", - "efad52": "ffe66b", - "dedede": "dedede", - "6b6b7b": "6b6b7b", - "b5b5bd": "b5b5bd" + "efad52": "ffe66b" }, "1": { "6b4219": "5e0c28", - "101010": "101010", "ff843a": "e44642", "b56321": "9e253b", "de7331": "c42f3e", "ffe6a5": "f7eee1", - "efad52": "f2cab8", - "dedede": "dedede", - "6b6b7b": "6b6b7b", - "b5b5bd": "b5b5bd" + "efad52": "f2cab8" }, "2": { "6b4219": "1e2249", - "101010": "101010", "ff843a": "46527a", "b56321": "323760", "de7331": "3c456e", "ffe6a5": "b5fffc", - "efad52": "75aaff", - "dedede": "dedede", - "6b6b7b": "6b6b7b", - "b5b5bd": "b5b5bd" + "efad52": "75aaff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/217.json b/public/images/pokemon/variant/back/217.json index 501a7a8e666..3b8582df4dc 100644 --- a/public/images/pokemon/variant/back/217.json +++ b/public/images/pokemon/variant/back/217.json @@ -1,38 +1,23 @@ { "0": { "422919": "112114", - "7b7b8c": "7b7b8c", - "101010": "101010", "945221": "2f6324", - "ffffff": "ffffff", "634229": "1d3d26", - "b5b5bd": "b5b5bd", "f7c563": "fecd85", - "c59c4a": "cd9343", - "dedede": "dedede" + "c59c4a": "cd9343" }, "1": { "422919": "2d0e1f", - "7b7b8c": "7b7b8c", - "101010": "101010", "945221": "8c2a37", - "ffffff": "ffffff", "634229": "6b1d38", - "b5b5bd": "b5b5bd", "f7c563": "f2cab8", - "c59c4a": "c48e81", - "dedede": "dedede" + "c59c4a": "c48e81" }, "2": { "422919": "111433", - "7b7b8c": "7b7b8c", - "101010": "101010", "945221": "323760", - "ffffff": "ffffff", "634229": "1e2249", - "b5b5bd": "b5b5bd", "f7c563": "5ccaf2", - "c59c4a": "45a2f9", - "dedede": "dedede" + "c59c4a": "45a2f9" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/222.json b/public/images/pokemon/variant/back/222.json index 2c50d3c55a8..f5f17ab07bf 100644 --- a/public/images/pokemon/variant/back/222.json +++ b/public/images/pokemon/variant/back/222.json @@ -2,7 +2,6 @@ "1": { "bd004a": "b76600", "7b0008": "73490d", - "000000": "000000", "ffa5c5": "f6cc70", "e66394": "f39806", "ffcee6": "f5eab0", @@ -12,7 +11,6 @@ "2": { "bd004a": "2b8c23", "7b0008": "0f660f", - "000000": "000000", "ffa5c5": "cae4a2", "e66394": "89b958", "ffcee6": "f4fad7", diff --git a/public/images/pokemon/variant/back/226.json b/public/images/pokemon/variant/back/226.json index 50a96e73d3b..a941e8be14f 100644 --- a/public/images/pokemon/variant/back/226.json +++ b/public/images/pokemon/variant/back/226.json @@ -2,7 +2,6 @@ "1": { "313a5a": "862a10", "5a6bde": "e27b36", - "101010": "101010", "4a5294": "aa4514", "525a6b": "642f21", "adb5ce": "b9783a", @@ -13,7 +12,6 @@ "2": { "313a5a": "1e3405", "5a6bde": "b1cf6b", - "101010": "101010", "4a5294": "6d9729", "525a6b": "174306", "adb5ce": "2e5f10", diff --git a/public/images/pokemon/variant/back/227.json b/public/images/pokemon/variant/back/227.json index 3615df8fc2e..c51bf16f8dd 100644 --- a/public/images/pokemon/variant/back/227.json +++ b/public/images/pokemon/variant/back/227.json @@ -5,11 +5,9 @@ "9cb5d6": "49748c", "deefff": "97bcce", "bdcee6": "6d93a4", - "101010": "101010", "ce9400": "d34b21", "ffde00": "f87642", - "637bad": "062233", - "841921": "841921" + "637bad": "062233" }, "2": { "31527b": "260e21", @@ -17,7 +15,6 @@ "9cb5d6": "773c5b", "deefff": "c8aeae", "bdcee6": "ac6f7d", - "101010": "101010", "ce9400": "36989a", "ffde00": "69d3c3", "637bad": "231429", diff --git a/public/images/pokemon/variant/back/228.json b/public/images/pokemon/variant/back/228.json index 7da9f57826e..a4e110ee3d9 100644 --- a/public/images/pokemon/variant/back/228.json +++ b/public/images/pokemon/variant/back/228.json @@ -3,30 +3,24 @@ "292931": "553454", "080808": "181223", "4a4a52": "76546b", - "101921": "101921", "767085": "a84b50", "ffffff": "f3bd87", "a59cad": "c87966", - "f8f9ff": "f8f9ff", "ada5b3": "414d67", "f7a57b": "f8f1e7", "734229": "311f3a", - "b57b5a": "ceb0a5", - "e2e0e3": "e2e0e3" + "b57b5a": "ceb0a5" }, "2": { "292931": "b1a3b1", "080808": "181223", "4a4a52": "f8faf3", - "101921": "101921", "767085": "223657", "ffffff": "5c8d95", "a59cad": "38576c", - "f8f9ff": "f8f9ff", "ada5b3": "292929", "f7a57b": "72557e", "734229": "311f3a", - "b57b5a": "533960", - "e2e0e3": "e2e0e3" + "b57b5a": "533960" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/229-mega.json b/public/images/pokemon/variant/back/229-mega.json index 4e85412dd72..6194d3d3bcb 100644 --- a/public/images/pokemon/variant/back/229-mega.json +++ b/public/images/pokemon/variant/back/229-mega.json @@ -1,27 +1,22 @@ { "1": { "83738b": "7c323c", - "000000": "000000", "ffffff": "f3bd87", "a49cac": "a84b50", "cdd5d5": "c87966", "182029": "321b32", "313139": "553454", "4a4a52": "76546b", - "f7f9fa": "f7f9fa", "af1b1b": "455d92", - "bbc3ce": "bbc3ce", "732422": "314075", "622910": "77545b", "f69c83": "f8f1e7", "a45a4a": "ceb0a5", - "f5eeee": "f5eeee", "aa1919": "aa8c82", "671f1e": "856458" }, "2": { "83738b": "121d3c", - "000000": "000000", "ffffff": "5c8d95", "a49cac": "223657", "cdd5d5": "38576c", @@ -35,7 +30,6 @@ "622910": "311f3a", "f69c83": "72557e", "a45a4a": "533960", - "f5eeee": "f5eeee", "aa1919": "534b6a", "671f1e": "423655" } diff --git a/public/images/pokemon/variant/back/229.json b/public/images/pokemon/variant/back/229.json index a4d9316078e..4e5cd46a77e 100644 --- a/public/images/pokemon/variant/back/229.json +++ b/public/images/pokemon/variant/back/229.json @@ -5,17 +5,13 @@ "ced6d6": "dc7e67", "ffffff": "f8c288", "192129": "431129", - "000000": "000000", "31313a": "631e3f", "4a4a52": "85324a", - "f8f9ff": "f8f9ff", "841021": "41578c", - "ada5b3": "ada5b3", "632910": "8c6362", "f79c84": "f8f1e7", "a55a4a": "ceb0a5", - "9c293a": "4c2a31", - "e2e0e3": "e2e0e3" + "9c293a": "4c2a31" }, "2": { "84738c": "111a33", @@ -23,16 +19,13 @@ "ced6d6": "38576c", "ffffff": "5c8d95", "192129": "444e6c", - "000000": "000000", "31313a": "a9bfd1", "4a4a52": "e8f8ff", "f8f9ff": "1d2d4e", "841021": "f37755", - "ada5b3": "ada5b3", "632910": "2d203c", "f79c84": "665a83", "a55a4a": "4a3a5e", - "9c293a": "8c5a98", - "e2e0e3": "e2e0e3" + "9c293a": "8c5a98" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/23.json b/public/images/pokemon/variant/back/23.json index b77da94b156..b424b1a7024 100644 --- a/public/images/pokemon/variant/back/23.json +++ b/public/images/pokemon/variant/back/23.json @@ -8,9 +8,7 @@ "ce63b5": "77d3a7", "7b316b": "1f8179", "e6ad5a": "d6c7a2", - "5a104a": "093640", - "101010": "101010", - "ffffff": "ffffff" + "5a104a": "093640" }, "2": { "b57b31": "293e6f", @@ -21,8 +19,6 @@ "ce63b5": "ebe1d7", "7b316b": "b3857d", "e6ad5a": "4d759b", - "5a104a": "5b303e", - "101010": "101010", - "ffffff": "ffffff" + "5a104a": "5b303e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/230.json b/public/images/pokemon/variant/back/230.json index 2603b437bbe..c7f0eb6aba6 100644 --- a/public/images/pokemon/variant/back/230.json +++ b/public/images/pokemon/variant/back/230.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "4a5a94": "2a2750", "8cbdef": "396979", "cee6f7": "5dac9b", @@ -15,7 +14,6 @@ "e6ad3a": "63a666" }, "2": { - "101010": "101010", "4a5a94": "54133f", "8cbdef": "d64b52", "cee6f7": "ffb273", diff --git a/public/images/pokemon/variant/back/231.json b/public/images/pokemon/variant/back/231.json index 7c4e6c5bc9a..68bc4fb808f 100644 --- a/public/images/pokemon/variant/back/231.json +++ b/public/images/pokemon/variant/back/231.json @@ -7,10 +7,8 @@ "525294": "4d5271", "bd3a31": "4b6aa1", "f76b52": "859abf", - "101010": "101010", "840000": "394e85", - "8c8c8c": "8c8baa", - "d6d6d6": "d6d6d6" + "8c8c8c": "8c8baa" }, "2": { "6b9cce": "673a67", @@ -20,7 +18,6 @@ "525294": "3a2043", "bd3a31": "cea141", "f76b52": "f1d35b", - "101010": "101010", "840000": "b17333", "8c8c8c": "755873", "d6d6d6": "fff8d5" diff --git a/public/images/pokemon/variant/back/232.json b/public/images/pokemon/variant/back/232.json index 2c5174d42c4..adb8af8a5cf 100644 --- a/public/images/pokemon/variant/back/232.json +++ b/public/images/pokemon/variant/back/232.json @@ -3,7 +3,6 @@ "4a5252": "5f74c7", "3a3a3a": "333a77", "849494": "b0d8ff", - "101010": "101010", "6b7373": "7fa0d7", "842129": "c8563f", "9ca5a5": "9ca3b5", @@ -21,7 +20,6 @@ "4a5252": "994e30", "3a3a3a": "6f2219", "849494": "f4b975", - "101010": "101010", "6b7373": "d17e47", "842129": "1d2a54", "9ca5a5": "3c283f", diff --git a/public/images/pokemon/variant/back/233.json b/public/images/pokemon/variant/back/233.json index e177f4e243a..99debec22a3 100644 --- a/public/images/pokemon/variant/back/233.json +++ b/public/images/pokemon/variant/back/233.json @@ -3,14 +3,12 @@ "94426b": "e27089", "ef5a63": "f8a8cd", "ff94b5": "fccee9", - "ffffff": "ffffff", "31739c": "6d224c", "d6d6d6": "e1dbff", "4a9cd6": "833462", "313a63": "4c1131", "5a3a4a": "d94664", - "6b6b7b": "887acd", - "101010": "101010" + "6b6b7b": "887acd" }, "2": { "94426b": "491c0c", @@ -22,7 +20,6 @@ "4a9cd6": "ffd9ab", "313a63": "b77751", "5a3a4a": "31150e", - "6b6b7b": "b77751", - "101010": "101010" + "6b6b7b": "b77751" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/235.json b/public/images/pokemon/variant/back/235.json index 8d3ab0ea5dd..f7255e5965a 100644 --- a/public/images/pokemon/variant/back/235.json +++ b/public/images/pokemon/variant/back/235.json @@ -5,7 +5,6 @@ "4a3a10": "431a2e", "adad8c": "b1767f", "6b5a31": "672f44", - "101010": "101010", "086300": "113041", "199c00": "1f5259", "42c519": "287170", @@ -17,7 +16,6 @@ "4a3a10": "141622", "adad8c": "8a909b", "6b5a31": "262b39", - "101010": "101010", "086300": "111321", "199c00": "1b1e2c", "42c519": "222734", diff --git a/public/images/pokemon/variant/back/239.json b/public/images/pokemon/variant/back/239.json index c48a006ef4d..db9f51c2840 100644 --- a/public/images/pokemon/variant/back/239.json +++ b/public/images/pokemon/variant/back/239.json @@ -6,7 +6,6 @@ "ce8c00": "d44b2c", "6b6b6b": "7a2414", "101010": "000000", - "ffffff": "ffffff", "cecece": "d8d8d8", "e6ad19": "f2673d", "a5a5a5": "adadad", @@ -18,11 +17,6 @@ "b56b00": "33b571", "ce8c00": "52ba8b", "6b6b6b": "206e33", - "101010": "101010", - "ffffff": "ffffff", - "cecece": "cecece", - "e6ad19": "53e680", - "a5a5a5": "a5a5a5", - "313131": "313131" + "e6ad19": "53e680" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/24.json b/public/images/pokemon/variant/back/24.json index a54eb499950..1aba309ef20 100644 --- a/public/images/pokemon/variant/back/24.json +++ b/public/images/pokemon/variant/back/24.json @@ -3,18 +3,12 @@ "523a7b": "113a53", "a584c5": "30abb3", "7b63ad": "146d7d", - "ffffff": "ffffff", - "101010": "101010", - "c5a5ef": "8feae4", - "c5c5c5": "c5c5c5" + "c5a5ef": "8feae4" }, "2": { "523a7b": "875a5f", "a584c5": "eed3b1", "7b63ad": "bf9a8e", - "ffffff": "ffffff", - "101010": "101010", - "c5a5ef": "fff9e5", - "c5c5c5": "c5c5c5" + "c5a5ef": "fff9e5" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/240.json b/public/images/pokemon/variant/back/240.json index d9fdfa30751..c237b239384 100644 --- a/public/images/pokemon/variant/back/240.json +++ b/public/images/pokemon/variant/back/240.json @@ -3,24 +3,18 @@ "d6523a": "372d49", "943121": "101010", "ff7b63": "524b6f", - "101010": "101010", "ffffb5": "ffffff", "ad8400": "db4d19", "f7d63a": "fba42e", - "d6ad00": "fb832b", - "73737b": "73737b", - "ffffff": "ffffff" + "d6ad00": "fb832b" }, "2": { "d6523a": "4065b0", "943121": "303d58", "ff7b63": "5398cf", - "101010": "101010", "ffffb5": "ffffff", "ad8400": "699296", "f7d63a": "eaffff", - "d6ad00": "c6edf2", - "73737b": "73737b", - "ffffff": "ffffff" + "d6ad00": "c6edf2" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/242.json b/public/images/pokemon/variant/back/242.json index 9333afa8335..89053184294 100644 --- a/public/images/pokemon/variant/back/242.json +++ b/public/images/pokemon/variant/back/242.json @@ -5,7 +5,6 @@ "ffadc5": "f6caec", "de84a5": "cc96c5", "ffc5ce": "ffdef4", - "101010": "101010", "6b6b6b": "521259", "b5b5b5": "6a1e76", "ded6d6": "a462c4", @@ -17,7 +16,6 @@ "ffadc5": "e5a5ce", "de84a5": "bd77ab", "ffc5ce": "ffd0eb", - "101010": "101010", "6b6b6b": "48050c", "b5b5b5": "60071d", "ded6d6": "8b2d4e", @@ -29,7 +27,6 @@ "ffadc5": "ddbcf5", "de84a5": "be98dd", "ffc5ce": "f4daff", - "101010": "101010", "6b6b6b": "201a4f", "b5b5b5": "3f377f", "ded6d6": "52489c", diff --git a/public/images/pokemon/variant/back/243.json b/public/images/pokemon/variant/back/243.json index ce3d36b9db3..530b240683a 100644 --- a/public/images/pokemon/variant/back/243.json +++ b/public/images/pokemon/variant/back/243.json @@ -2,7 +2,6 @@ "1": { "846ba5": "732c40", "bd8cc5": "b74f57", - "101010": "101010", "52296b": "481532", "6b6b6b": "3c3c4e", "ffffff": "f3dfdf", @@ -11,13 +10,11 @@ "a5a5a5": "9b7b81", "d69c29": "c55d3b", "8c6310": "833000", - "c50000": "c50000", "ffce42": "ff945c" }, "2": { "846ba5": "dc9779", "bd8cc5": "f5d4c0", - "101010": "101010", "52296b": "994d3d", "6b6b6b": "3c3c4e", "ffffff": "eed7cd", @@ -26,7 +23,6 @@ "a5a5a5": "ac8982", "d69c29": "5278c7", "8c6310": "2a4083", - "c50000": "c50000", "ffce42": "8aade5" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/245.json b/public/images/pokemon/variant/back/245.json index 638bfa96065..6187c3c5997 100644 --- a/public/images/pokemon/variant/back/245.json +++ b/public/images/pokemon/variant/back/245.json @@ -4,7 +4,6 @@ "5a7bd6": "4c4097", "7bbdff": "6b62c0", "7b5ab5": "bd4530", - "101010": "101010", "ad6bd6": "e56444", "523a7b": "892015", "c594de": "ff8e67", @@ -13,7 +12,6 @@ "ffffff": "f7dfec", "848484": "65395c", "dedede": "e0b4ce", - "d61010": "d61010", "bdefff": "9795d1" }, "2": { @@ -21,7 +19,6 @@ "5a7bd6": "d67617", "7bbdff": "f5ae42", "7b5ab5": "863062", - "101010": "101010", "ad6bd6": "c16792", "523a7b": "40163c", "c594de": "e8a0d2", @@ -29,8 +26,6 @@ "bdbdbd": "b29cc0", "ffffff": "fbecff", "848484": "856c98", - "dedede": "dedede", - "d61010": "d61010", "bdefff": "ffdf85" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/246.json b/public/images/pokemon/variant/back/246.json index 5b507495d06..5d7c14dd125 100644 --- a/public/images/pokemon/variant/back/246.json +++ b/public/images/pokemon/variant/back/246.json @@ -4,8 +4,6 @@ "4a5a3a": "0b4367", "d6e6ce": "4fa6e0", "adce9c": "4493c7", - "101010": "101010", - "ffffff": "ffffff", "ef5229": "efca4f", "bd3a21": "cd8f30" }, @@ -14,8 +12,6 @@ "4a5a3a": "a5494d", "d6e6ce": "ecd292", "adce9c": "e5a267", - "101010": "101010", - "ffffff": "ffffff", "ef5229": "67478f", "bd3a21": "403266" } diff --git a/public/images/pokemon/variant/back/247.json b/public/images/pokemon/variant/back/247.json index 34a8a10ef3d..e05f4cc8b31 100644 --- a/public/images/pokemon/variant/back/247.json +++ b/public/images/pokemon/variant/back/247.json @@ -2,13 +2,11 @@ "1": { "295a84": "4a5a39", "8cc5ef": "accd9c", - "101010": "101010", "739cc5": "739c62" }, "2": { "295a84": "51202f", "8cc5ef": "b63c37", - "101010": "101010", "739cc5": "8b1534" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/248-mega.json b/public/images/pokemon/variant/back/248-mega.json index c63b19d7c29..70a6011b03c 100644 --- a/public/images/pokemon/variant/back/248-mega.json +++ b/public/images/pokemon/variant/back/248-mega.json @@ -1,28 +1,26 @@ { "1": { "171717": "101010", - "4a5a39": "533334", - "4b5a3b": "533334", - "727272": "727272", - "801c17": "533334", - "922d00": "004194", - "ce283d": "006fb3", - "d35200": "0098fc", - "729a62": "915957", - "739c62": "915957", - "aacb9a": "c78482" + "4a5a39": "533334", + "4b5a3b": "533334", + "801c17": "533334", + "922d00": "004194", + "ce283d": "006fb3", + "d35200": "0098fc", + "729a62": "915957", + "739c62": "915957", + "aacb9a": "c78482" }, "2": { - "171717": "101010", - "4a5a39": "06092f", - "4b5a3b": "06092f", - "727272": "727272", - "801c17": "ee7b06", - "922d00": "ee7b06", - "ce283d": "ffa904", - "d35200": "ffa904", - "729a62": "59417c", - "739c62": "59417c", - "aacb9a": "625695" + "171717": "101010", + "4a5a39": "06092f", + "4b5a3b": "06092f", + "801c17": "ee7b06", + "922d00": "ee7b06", + "ce283d": "ffa904", + "d35200": "ffa904", + "729a62": "59417c", + "739c62": "59417c", + "aacb9a": "625695" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/248.json b/public/images/pokemon/variant/back/248.json index a769de9a1ed..61908bc0aa3 100644 --- a/public/images/pokemon/variant/back/248.json +++ b/public/images/pokemon/variant/back/248.json @@ -3,11 +3,6 @@ "4a5a3a": "533334", "adce9c": "c78482", "739c63": "915957", - "101010": "101010", - "c5c5c5": "c5c5c5", - "ffffff": "ffffff", - "737373": "737373", - "942900": "942900", "004a8c": "004194", "217bbd": "006fbe" }, @@ -15,10 +10,6 @@ "4a5a3a": "06092f", "adce9c": "625695", "739c63": "2c3071", - "101010": "101010", - "c5c5c5": "c5c5c5", - "ffffff": "ffffff", - "737373": "737373", "942900": "ee7b06", "004a8c": "ee7b06", "217bbd": "ffa904" diff --git a/public/images/pokemon/variant/back/249.json b/public/images/pokemon/variant/back/249.json index 309f1d77b6b..a59c8a029d7 100644 --- a/public/images/pokemon/variant/back/249.json +++ b/public/images/pokemon/variant/back/249.json @@ -2,7 +2,6 @@ "1": { "63737b": "1d3e41", "9cade6": "326460", - "101010": "101010", "ffffff": "bad8c9", "b5c5f7": "447a6c", "004284": "214f5f", @@ -15,7 +14,6 @@ "2": { "63737b": "101010", "9cade6": "18162b", - "101010": "101010", "ffffff": "353043", "b5c5f7": "211d33", "004284": "7a7291", diff --git a/public/images/pokemon/variant/back/250.json b/public/images/pokemon/variant/back/250.json index b9e8aa51ae7..f3f2d784df3 100644 --- a/public/images/pokemon/variant/back/250.json +++ b/public/images/pokemon/variant/back/250.json @@ -4,31 +4,23 @@ "940800": "340b27", "ff5a10": "843974", "9c6300": "592964", - "101010": "101010", "42d652": "d6541f", "ffde00": "e4bcef", "dead00": "d28cda", "b5ffbd": "ed8543", "bd4210": "5b214b", - "ffef84": "f4deff", - "c5c5c5": "c5c5c5", - "ffffff": "ffffff", - "6b6b6b": "6b6b6b" + "ffef84": "f4deff" }, "2": { "109410": "365869", "940800": "0f0c3a", "ff5a10": "222e57", "9c6300": "95532c", - "101010": "101010", "42d652": "3e95c9", "ffde00": "e7aa6e", "dead00": "c68046", "b5ffbd": "77d7dd", "bd4210": "1a2053", - "ffef84": "ffd59f", - "c5c5c5": "c5c5c5", - "ffffff": "ffffff", - "6b6b6b": "6b6b6b" + "ffef84": "ffd59f" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/251.json b/public/images/pokemon/variant/back/251.json index e5f01223e07..be8f2c3bf11 100644 --- a/public/images/pokemon/variant/back/251.json +++ b/public/images/pokemon/variant/back/251.json @@ -9,10 +9,7 @@ "deef94": "f4e5d9", "4a7321": "28696a", "ffffde": "fff5f5", - "101010": "101010", - "b5c55a": "cbc5af", - "6b7384": "6b7384", - "ffffff": "ffffff" + "b5c55a": "cbc5af" }, "2": { "73a531": "5f234e", @@ -24,7 +21,6 @@ "deef94": "ba9aa9", "4a7321": "3f0e2a", "ffffde": "ffedf3", - "101010": "101010", "b5c55a": "886580", "6b7384": "64475e", "ffffff": "eed9d9" diff --git a/public/images/pokemon/variant/back/255.json b/public/images/pokemon/variant/back/255.json index 94804ee8f02..78989f05aea 100644 --- a/public/images/pokemon/variant/back/255.json +++ b/public/images/pokemon/variant/back/255.json @@ -2,23 +2,19 @@ "1": { "ad8c00": "298084", "f7de6b": "58dfa5", - "000000": "000000", "efbd31": "34ad90", "7b4a19": "1d5461", "ad4210": "b93a23", "e65a21": "e86434", - "ff8c31": "ff9039", - "ffffff": "ffffff" + "ff8c31": "ff9039" }, "2": { "ad8c00": "550d28", "f7de6b": "ad3633", - "000000": "000000", "efbd31": "811c2c", "7b4a19": "400724", "ad4210": "b3817d", "e65a21": "d3afa0", - "ff8c31": "f3e5cf", - "ffffff": "ffffff" + "ff8c31": "f3e5cf" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/256.json b/public/images/pokemon/variant/back/256.json index 159cc5a51f5..0fecd72e2f5 100644 --- a/public/images/pokemon/variant/back/256.json +++ b/public/images/pokemon/variant/back/256.json @@ -1,7 +1,6 @@ { "1": { "9c3110": "11526f", - "191919": "191919", "ff7b4a": "3dd0b0", "de5a29": "1f9ba4", "9c7329": "a7471f", @@ -15,7 +14,6 @@ }, "2": { "9c3110": "8a685f", - "191919": "191919", "ff7b4a": "fff7e1", "de5a29": "cdb09b", "9c7329": "641835", diff --git a/public/images/pokemon/variant/back/257-mega.json b/public/images/pokemon/variant/back/257-mega.json index 8cde98eae09..28ecfb14064 100644 --- a/public/images/pokemon/variant/back/257-mega.json +++ b/public/images/pokemon/variant/back/257-mega.json @@ -10,7 +10,6 @@ "ff9a7f": "fff185", "e55858": "51b5cd", "ee6262": "f7ca4b", - "000000": "000000", "bd4141": "da8923", "fff188": "ecfff8", "297bd5": "930808", @@ -30,7 +29,6 @@ "ff9a7f": "fffce9", "e55858": "c6e6ff", "ee6262": "fffae1", - "000000": "000000", "bd4141": "d2bda7", "fff188": "c6fffd", "297bd5": "1f3061", diff --git a/public/images/pokemon/variant/back/257.json b/public/images/pokemon/variant/back/257.json index 42cd254566d..c294398a55c 100644 --- a/public/images/pokemon/variant/back/257.json +++ b/public/images/pokemon/variant/back/257.json @@ -6,7 +6,6 @@ "948463": "8095b3", "dedeb5": "f0fbff", "63524a": "55607d", - "000000": "000000", "ee5e5e": "598dc1", "842929": "11526f", "ef6363": "3dd0b0", @@ -20,7 +19,6 @@ "ffffff": "9386b8", "dfa550": "b2c3e3", "8c633a": "bf462a", - "c46b37": "c46b37", "dea552": "f99140", "f7d663": "ffc96b" }, @@ -31,7 +29,6 @@ "948463": "772436", "dedeb5": "cc6155", "63524a": "5b1832", - "000000": "000000", "ee5e5e": "772040", "842929": "9c7c70", "ef6363": "fffae1", @@ -41,7 +38,6 @@ "bd5f42": "983b2d", "9c8c84": "e6a653", "ffde6b": "da9b60", - "297bd6": "297bd6", "ffffff": "473c61", "dfa550": "be6646", "8c633a": "2d2e58", diff --git a/public/images/pokemon/variant/back/261.json b/public/images/pokemon/variant/back/261.json index 47e9abd21a6..5b911371ac3 100644 --- a/public/images/pokemon/variant/back/261.json +++ b/public/images/pokemon/variant/back/261.json @@ -2,27 +2,21 @@ "1": { "636363": "803c2c", "c5c5c5": "d4a172", - "000000": "000000", "a5a5a5": "b26c55", "424242": "380927", "5a5a63": "6d1757", "bd8c42": "a3738d", "f7f75a": "c59cbe", - "9c2942": "222d84", - "ffffff": "ffffff", - "6b6b84": "6b6b84" + "9c2942": "222d84" }, "2": { "636363": "24103c", "c5c5c5": "763f94", - "000000": "000000", "a5a5a5": "402067", "424242": "4e9ea3", "5a5a63": "96eedf", "bd8c42": "8aa8cd", "f7f75a": "bdd9f2", - "9c2942": "182556", - "ffffff": "ffffff", - "6b6b84": "6b6b84" + "9c2942": "182556" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/262.json b/public/images/pokemon/variant/back/262.json index 492ca26dca5..5b22bbef5c8 100644 --- a/public/images/pokemon/variant/back/262.json +++ b/public/images/pokemon/variant/back/262.json @@ -1,24 +1,17 @@ { "1": { "525252": "7a3424", - "000000": "000000", "94949c": "ad5c41", "bdbdc5": "d2975f", "313131": "510c2b", "4a4a4a": "711956", "4d4d4d": "71231f", - "bd8c42": "bd8c42", - "f7ef5a": "f7ef5a", "ad1021": "5f0d3e", - "bd4a7b": "bd4a7b", - "ffffff": "ffffff", "de2942": "8f1c4e", - "323232": "5a1c15", - "949cad": "949cad" + "323232": "5a1c15" }, "2": { "525252": "230f3b", - "000000": "000000", "94949c": "402067", "bdbdc5": "753e93", "313131": "4f9fa4", @@ -27,10 +20,7 @@ "bd8c42": "cb6654", "f7ef5a": "ffb98c", "ad1021": "45809a", - "bd4a7b": "bd4a7b", - "ffffff": "ffffff", "de2942": "5ba7ba", - "323232": "0b1044", - "949cad": "949cad" + "323232": "0b1044" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/263.json b/public/images/pokemon/variant/back/263.json index 782b8284aab..17836f92682 100644 --- a/public/images/pokemon/variant/back/263.json +++ b/public/images/pokemon/variant/back/263.json @@ -1,27 +1,22 @@ { "1": { "424242": "481f4e", - "000000": "000000", "73635a": "481f4e", "b59c8c": "8e588f", "bdad9c": "be94bb", "947b6b": "85355a", "e6dece": "e1c7dc", "5a524a": "3c1332", - "ffffff": "ffffff", - "524231": "1795be", - "a51900": "a51900" + "524231": "1795be" }, "2": { "424242": "29155a", - "000000": "000000", "73635a": "29155a", "b59c8c": "aebcff", "bdad9c": "3d2661", "947b6b": "7e86d2", "e6dece": "5f4e9c", "5a524a": "40236c", - "ffffff": "ffffff", "524231": "d0037a", "a51900": "d0037a" } diff --git a/public/images/pokemon/variant/back/264.json b/public/images/pokemon/variant/back/264.json index b6edee70ea4..9dbed087704 100644 --- a/public/images/pokemon/variant/back/264.json +++ b/public/images/pokemon/variant/back/264.json @@ -1,6 +1,5 @@ { "1": { - "000000": "000000", "ad9c8c": "be94bb", "6b6363": "481f4e", "5a4a3a": "59193d", @@ -9,13 +8,10 @@ "a58c7b": "8e588f", "296b94": "1795be", "6badc5": "41f3ff", - "ffffff": "ffffff", - "423a21": "423a21", "737373": "643369", "94847b": "643369" }, "2": { - "000000": "000000", "ad9c8c": "3d2661", "6b6363": "1e133e", "5a4a3a": "465aab", @@ -24,8 +20,6 @@ "a58c7b": "535db9", "296b94": "d0037a", "6badc5": "ff429b", - "ffffff": "ffffff", - "423a21": "423a21", "737373": "210f4e", "94847b": "210f4e" } diff --git a/public/images/pokemon/variant/back/2670.json b/public/images/pokemon/variant/back/2670.json index 81e91c8fb72..6a8c90767ac 100644 --- a/public/images/pokemon/variant/back/2670.json +++ b/public/images/pokemon/variant/back/2670.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "404040": "1d2040", "ff7373": "73e1ff", "802d2d": "1f298e", @@ -13,7 +12,6 @@ "243a66": "63132f" }, "2": { - "101010": "101010", "404040": "b3b3b3", "ff7373": "4cd9af", "802d2d": "20877a", diff --git a/public/images/pokemon/variant/back/278.json b/public/images/pokemon/variant/back/278.json index d5b6652f719..71ded3cae1d 100644 --- a/public/images/pokemon/variant/back/278.json +++ b/public/images/pokemon/variant/back/278.json @@ -1,6 +1,5 @@ { "0": { - "000000": "000000", "525252": "542b2b", "ffffff": "ecd8d4", "d6cee6": "ba928c", @@ -24,13 +23,10 @@ "319cd6": "4060bc", "8c5210": "201838", "949494": "3d5982", - "424242": "424242", "de8400": "473d6f", - "ffad31": "5b5481", - "313131": "313131" + "ffad31": "5b5481" }, "2": { - "000000": "000000", "525252": "732a22", "ffffff": "f5e1d1", "d6cee6": "d19e92", diff --git a/public/images/pokemon/variant/back/279.json b/public/images/pokemon/variant/back/279.json index 1e9870d772b..418bf94a12d 100644 --- a/public/images/pokemon/variant/back/279.json +++ b/public/images/pokemon/variant/back/279.json @@ -1,7 +1,6 @@ { "0": { "31638c": "324a26", - "101010": "101010", "5aa5ce": "40683c", "7bceef": "789c6e", "a5e6ff": "b6d9ac", @@ -17,15 +16,9 @@ "ce4252": "af2c4f" }, "1": { - "31638c": "31638c", - "101010": "101010", "5aa5ce": "4060bc", "7bceef": "657ddf", "a5e6ff": "b4b3ff", - "ced6ef": "ced6ef", - "737384": "737384", - "9cb5c5": "9cb5c5", - "ffffff": "ffffff", "8c4231": "17103f", "ffde4a": "534e72", "c57b31": "2a1f50", @@ -35,7 +28,6 @@ }, "2": { "31638c": "6f1314", - "101010": "101010", "5aa5ce": "892722", "7bceef": "be3d2f", "a5e6ff": "dd533a", diff --git a/public/images/pokemon/variant/back/282-mega.json b/public/images/pokemon/variant/back/282-mega.json index 5839ece498d..cc86a603997 100644 --- a/public/images/pokemon/variant/back/282-mega.json +++ b/public/images/pokemon/variant/back/282-mega.json @@ -5,7 +5,6 @@ "59b359": "c08f44", "8f8fb3": "d59c80", "f2f2ff": "f8efde", - "101010": "101010", "bcf2aa": "fff1c0", "ff8095": "ca2033", "d9576c": "da3e4f", @@ -20,13 +19,9 @@ "338046": "242746", "8be68b": "3f427f", "59b359": "282c5d", - "8f8fb3": "8f8fb3", - "f2f2ff": "f2f2ff", - "101010": "101010", "bcf2aa": "5b5790", "ff8095": "ed50f7", "d9576c": "d846c1", - "cfcfe5": "cfcfe5", "803340": "9e2a7c", "8585a6": "110a21", "e6e6f2": "371447", diff --git a/public/images/pokemon/variant/back/282.json b/public/images/pokemon/variant/back/282.json index 74d43b2b4fb..feae69b1303 100644 --- a/public/images/pokemon/variant/back/282.json +++ b/public/images/pokemon/variant/back/282.json @@ -5,7 +5,6 @@ "8ce68c": "ebc984", "b5f794": "fff1c0", "7b8cb5": "d59c80", - "000000": "000000", "efefff": "f8efde", "cecee6": "ffc4a6", "d64a73": "da3e4f", @@ -18,13 +17,8 @@ "73bd73": "282c5d", "8ce68c": "3f427f", "b5f794": "5b5790", - "7b8cb5": "7b8cb5", - "000000": "000000", - "efefff": "efefff", - "cecee6": "cecee6", "d64a73": "d846c1", "ff7b94": "ed50f7", - "84294a": "9e2a7c", - "a5b5ce": "a5b5ce" + "84294a": "9e2a7c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/285.json b/public/images/pokemon/variant/back/285.json index 584bd608434..1e7b07d1989 100644 --- a/public/images/pokemon/variant/back/285.json +++ b/public/images/pokemon/variant/back/285.json @@ -1,9 +1,5 @@ { "1": { - "73634a": "73634a", - "000000": "000000", - "efd6b5": "efd6b5", - "5a4a42": "5a4a42", "c5a584": "c59584", "849c7b": "9c7b9b", "9cce94": "cb94ce", @@ -11,7 +7,6 @@ }, "2": { "73634a": "575370", - "000000": "000000", "efd6b5": "e3ded8", "5a4a42": "3e3651", "c5a584": "b7ada2", diff --git a/public/images/pokemon/variant/back/286.json b/public/images/pokemon/variant/back/286.json index 9206f3c661d..74532287726 100644 --- a/public/images/pokemon/variant/back/286.json +++ b/public/images/pokemon/variant/back/286.json @@ -2,20 +2,16 @@ "1": { "215231": "522147", "84b573": "b573b2", - "000000": "000000", "639452": "945291", "bd314a": "842155", "f7636b": "f763ca", "84213a": "bd31b7", "634a3a": "63573a", - "b59c7b": "dea98c", - "f7dead": "f7dead", - "debd8c": "debd8c" + "b59c7b": "dea98c" }, "2": { "215231": "102141", "84b573": "3e6f96", - "000000": "000000", "639452": "244162", "bd314a": "682a88", "f7636b": "c763cf", diff --git a/public/images/pokemon/variant/back/29.json b/public/images/pokemon/variant/back/29.json index c7cdff7491d..685ec61ee48 100644 --- a/public/images/pokemon/variant/back/29.json +++ b/public/images/pokemon/variant/back/29.json @@ -4,12 +4,9 @@ "424284": "6b1524", "d6d6ff": "f28566", "adadce": "c94d40", - "101010": "101010", "efefff": "fed0aa", - "ffffff": "ffffff", "ff5242": "386ecf", "bd314a": "2141ac", - "dedede": "dedede", "3a6b94": "3750a4", "199c94": "668cdd" }, @@ -18,12 +15,9 @@ "424284": "2e1752", "d6d6ff": "8175d6", "adadce": "6044ac", - "101010": "101010", "efefff": "b0abff", - "ffffff": "ffffff", "ff5242": "da781a", "bd314a": "c54910", - "dedede": "dedede", "3a6b94": "c77d3a", "199c94": "e5b471" } diff --git a/public/images/pokemon/variant/back/290.json b/public/images/pokemon/variant/back/290.json index fcff6dbdc90..f11f281c1b1 100644 --- a/public/images/pokemon/variant/back/290.json +++ b/public/images/pokemon/variant/back/290.json @@ -1,7 +1,6 @@ { "0": { "427b52": "0e5502", - "000000": "000000", "b5de73": "77ce53", "73ad5a": "1e7709", "848484": "a75f18", @@ -10,7 +9,6 @@ "ffffef": "f8d57f", "fffff7": "fff3ba", "6b6b63": "7e400b", - "634a42": "634a42", "ad947b": "e8d6b6", "cebd9c": "f7ecd7", "9c8473": "bfa483", @@ -18,7 +16,6 @@ }, "1": { "427b52": "7a4f7c", - "000000": "000000", "b5de73": "c3b4c0", "73ad5a": "886883", "848484": "2a0b34", @@ -35,7 +32,6 @@ }, "2": { "427b52": "88134e", - "000000": "000000", "b5de73": "d9537b", "73ad5a": "ac265e", "848484": "125a60", diff --git a/public/images/pokemon/variant/back/298.json b/public/images/pokemon/variant/back/298.json index b7b889b4668..68138ad4b26 100644 --- a/public/images/pokemon/variant/back/298.json +++ b/public/images/pokemon/variant/back/298.json @@ -3,7 +3,6 @@ "314a8c": "851958", "6bb5ff": "ff8cc3", "639cf7": "e85ab4", - "101010": "101010", "4a7be6": "d2488d", "3a6bd6": "9c3e9c", "deefff": "ffe1fa", @@ -13,7 +12,6 @@ "314a8c": "4f4969", "6bb5ff": "f2dbb8", "639cf7": "c9c1b5", - "101010": "101010", "4a7be6": "a4a88c", "3a6bd6": "8f6b85", "deefff": "ffffff", diff --git a/public/images/pokemon/variant/back/3-gigantamax.json b/public/images/pokemon/variant/back/3-gigantamax.json index b618abecbcc..949bb2ef621 100644 --- a/public/images/pokemon/variant/back/3-gigantamax.json +++ b/public/images/pokemon/variant/back/3-gigantamax.json @@ -5,7 +5,6 @@ "bd6a31": "012729", "ffee52": "37d6de", "debd29": "078a8f", - "101010": "101010", "de4141": "3f1375", "ff7b73": "712f8f", "ffbdbd": "a266b0", @@ -15,8 +14,7 @@ "2e5519": "38001c", "83de7b": "ff745e", "107b6a": "b80479", - "20b49c": "de3592", - "fdfdfd": "fdfdfd" + "20b49c": "de3592" }, "2": { "833100": "0b2e01", @@ -24,7 +22,6 @@ "bd6a31": "420514", "ffee52": "f75ea8", "debd29": "a30a66", - "101010": "101010", "de4141": "3c8227", "ff7b73": "9db042", "ffbdbd": "e7e385", @@ -34,7 +31,6 @@ "2e5519": "011c38", "83de7b": "80ced9", "107b6a": "d15d04", - "20b49c": "fa8405", - "fdfdfd": "fdfdfd" + "20b49c": "fa8405" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/3.json b/public/images/pokemon/variant/back/3.json index 0c179dd5e4a..4fd41c3a1c8 100644 --- a/public/images/pokemon/variant/back/3.json +++ b/public/images/pokemon/variant/back/3.json @@ -7,7 +7,6 @@ "debd29": "078a8f", "bd6b31": "168a69", "de4242": "3f1375", - "101010": "101010", "ffef52": "5fc7c7", "105242": "190038", "107b6b": "c21f7e", @@ -15,8 +14,7 @@ "2e5519": "38001c", "5ad6c5": "f062a4", "21b59c": "de3592", - "84de7b": "ff745e", - "ffffff": "ffffff" + "84de7b": "ff745e" }, "2": { "843100": "420514", @@ -26,7 +24,6 @@ "debd29": "a30a66", "bd6b31": "852a41", "de4242": "3c8227", - "101010": "101010", "ffef52": "f75ea8", "105242": "381601", "2e5519": "011c38", @@ -34,7 +31,6 @@ "5a9c3a": "446b94", "5ad6c5": "faa405", "21b59c": "fa8405", - "84de7b": "80ced9", - "ffffff": "ffffff" + "84de7b": "80ced9" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/30.json b/public/images/pokemon/variant/back/30.json index 5ddd63925f4..bfb1a5eca4f 100644 --- a/public/images/pokemon/variant/back/30.json +++ b/public/images/pokemon/variant/back/30.json @@ -5,15 +5,10 @@ "8cc5ce": "c94d40", "c5e6ef": "f28566", "193a73": "3750a4", - "101010": "101010", "1063b5": "131f65", - "4a84f7": "4a84f7", - "ffffff": "ffffff", "c52110": "2141ac", "ff9c8c": "65a4e7", - "ef4a3a": "386ecf", - "d6d6d6": "d6d6d6", - "848484": "848484" + "ef4a3a": "386ecf" }, "2": { "5a94b5": "402489", @@ -21,14 +16,10 @@ "8cc5ce": "6044ac", "c5e6ef": "8175d6", "193a73": "c77d3a", - "101010": "101010", "1063b5": "883f16", "4a84f7": "e5b471", - "ffffff": "ffffff", "c52110": "c54910", "ff9c8c": "f2ae45", - "ef4a3a": "da781a", - "d6d6d6": "d6d6d6", - "848484": "848484" + "ef4a3a": "da781a" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/300.json b/public/images/pokemon/variant/back/300.json index 75a46a00d6b..8e5d73ee067 100644 --- a/public/images/pokemon/variant/back/300.json +++ b/public/images/pokemon/variant/back/300.json @@ -4,7 +4,6 @@ "9c3142": "66054d", "f7dead": "e5ced2", "efbd7b": "cca3b0", - "101010": "101010", "f79cb5": "ff5959", "d65a7b": "991657", "ef7b94": "cc3359", @@ -15,7 +14,6 @@ "9c3142": "46518c", "f7dead": "ffffff", "efbd7b": "e5ced2", - "101010": "101010", "f79cb5": "adcad8", "d65a7b": "6379a5", "ef7b94": "85a2bf", @@ -26,7 +24,6 @@ "9c3142": "661422", "f7dead": "b2dfff", "efbd7b": "7a94cc", - "101010": "101010", "f79cb5": "e58f67", "d65a7b": "99352d", "ef7b94": "cc6651", diff --git a/public/images/pokemon/variant/back/301.json b/public/images/pokemon/variant/back/301.json index 4e39e9d194c..b9e533916ce 100644 --- a/public/images/pokemon/variant/back/301.json +++ b/public/images/pokemon/variant/back/301.json @@ -1,7 +1,6 @@ { "0": { "422963": "66054d", - "000000": "000000", "a573c5": "ff5959", "634a7b": "991657", "8452a5": "cc3359", @@ -13,7 +12,6 @@ }, "1": { "422963": "65597f", - "000000": "000000", "a573c5": "ffffff", "634a7b": "948eb2", "8452a5": "cecee5", @@ -25,7 +23,6 @@ }, "2": { "422963": "a84859", - "000000": "000000", "a573c5": "f9f8a4", "634a7b": "ea9360", "8452a5": "efbd7c", diff --git a/public/images/pokemon/variant/back/302-mega.json b/public/images/pokemon/variant/back/302-mega.json index 5540f0ec64f..3d2f5c62fb1 100644 --- a/public/images/pokemon/variant/back/302-mega.json +++ b/public/images/pokemon/variant/back/302-mega.json @@ -5,7 +5,6 @@ "ff4a5a": "e945af", "cc3f7c": "b22391", "393952": "123812", - "000000": "000000", "aca4f6": "b2ca9b", "5a4a94": "416a3d", "8b73d5": "86ad74", @@ -19,7 +18,6 @@ "ff4a5a": "236dbc", "cc3f7c": "153db2", "393952": "580a16", - "000000": "000000", "aca4f6": "e0604e", "5a4a94": "7e141c", "8b73d5": "be3933", diff --git a/public/images/pokemon/variant/back/302.json b/public/images/pokemon/variant/back/302.json index 2382a267541..deabf62908c 100644 --- a/public/images/pokemon/variant/back/302.json +++ b/public/images/pokemon/variant/back/302.json @@ -4,7 +4,6 @@ "ada5f7": "b2ca9b", "5a4a94": "416a3d", "8c73d6": "86ad74", - "000000": "000000", "735aad": "5d8853", "c51021": "844bdd", "ff4a5a": "b38eec", @@ -19,7 +18,6 @@ "ada5f7": "e0604e", "5a4a94": "7e141c", "8c73d6": "be3933", - "000000": "000000", "735aad": "9f2123", "c51021": "185da6", "ff4a5a": "3aa9de", diff --git a/public/images/pokemon/variant/back/303-mega.json b/public/images/pokemon/variant/back/303-mega.json index 0c75755bea5..2275cf822b8 100644 --- a/public/images/pokemon/variant/back/303-mega.json +++ b/public/images/pokemon/variant/back/303-mega.json @@ -1,14 +1,9 @@ { "0": { - "000000": "000000", "9ca494": "e175b4", "737373": "c14c82", - "212121": "212121", "4a4a4a": "6f264f", - "7b5a29": "7b5a29", "ffc55a": "e4c997", - "cdcdcd": "cdcdcd", - "f8f8f8": "f8f8f8", "984868": "1f194c", "b86088": "31296a", "de9441": "ad8867", @@ -17,15 +12,10 @@ "732041": "201434" }, "1": { - "000000": "000000", "9ca494": "4fa285", "737373": "347c7d", - "212121": "212121", "4a4a4a": "193e49", - "7b5a29": "7b5a29", "ffc55a": "d6c491", - "cdcdcd": "cdcdcd", - "f8f8f8": "f8f8f8", "984868": "a52f22", "b86088": "ff725a", "de9441": "bc8a52", @@ -34,15 +24,11 @@ "732041": "162843" }, "2": { - "000000": "000000", "9ca494": "ba94e6", "737373": "8a62d0", - "212121": "212121", "4a4a4a": "332c76", "7b5a29": "706d80", "ffc55a": "cfc8e4", - "cdcdcd": "cdcdcd", - "f8f8f8": "f8f8f8", "984868": "a81931", "b86088": "f04948", "de9441": "b1a3ca", diff --git a/public/images/pokemon/variant/back/303.json b/public/images/pokemon/variant/back/303.json index 477efdfbaa4..117f45dd7a4 100644 --- a/public/images/pokemon/variant/back/303.json +++ b/public/images/pokemon/variant/back/303.json @@ -5,8 +5,6 @@ "000000": "101010", "737373": "c14c82", "9c4a6b": "1f194c", - "cecece": "cecece", - "ffffff": "ffffff", "de9442": "ad8867", "7b5a29": "764d32", "ffc55a": "e4c997", @@ -18,8 +16,6 @@ "000000": "101010", "737373": "347c7d", "9c4a6b": "b53a29", - "cecece": "cecece", - "ffffff": "ffffff", "de9442": "a99372", "7b5a29": "6b5424", "ffc55a": "d6c491", @@ -31,8 +27,6 @@ "000000": "101010", "737373": "9d7cd6", "9c4a6b": "b53a29", - "cecece": "cecece", - "ffffff": "ffffff", "de9442": "b1a3ca", "7b5a29": "706d80", "ffc55a": "cfc8e4", diff --git a/public/images/pokemon/variant/back/304.json b/public/images/pokemon/variant/back/304.json index 50127505ab4..15b3f4bb65f 100644 --- a/public/images/pokemon/variant/back/304.json +++ b/public/images/pokemon/variant/back/304.json @@ -4,7 +4,6 @@ "525a6b": "6c5440", "ceced6": "cbc4a2", "ffffff": "fff2e5", - "000000": "000000", "3a3a4a": "122919", "525263": "2c4531", "316b9c": "8acc0e", @@ -16,11 +15,8 @@ "525a6b": "2b265d", "ceced6": "91a1e3", "ffffff": "cdd9fa", - "000000": "000000", "3a3a4a": "371219", "525263": "611f26", - "316b9c": "316b9c", - "6bbdff": "6bbdff", "737b94": "c2584c" }, "2": { @@ -28,7 +24,6 @@ "525a6b": "722f15", "ceced6": "d2954e", "ffffff": "ffcc7d", - "000000": "000000", "3a3a4a": "192c45", "525263": "2c4368", "316b9c": "05b1ad", diff --git a/public/images/pokemon/variant/back/305.json b/public/images/pokemon/variant/back/305.json index 2cd9ba15a9c..d23f3f6609c 100644 --- a/public/images/pokemon/variant/back/305.json +++ b/public/images/pokemon/variant/back/305.json @@ -3,7 +3,6 @@ "6b6b7b": "6c5440", "ffffff": "fff2e5", "c5ced6": "cbc4a2", - "000000": "000000", "9c9cad": "bca88c", "424a52": "492d1c", "7b8494": "947d63", @@ -16,7 +15,6 @@ "6b6b7b": "2b265d", "ffffff": "cdd9fa", "c5ced6": "91a1e3", - "000000": "000000", "9c9cad": "686dc0", "424a52": "1d153f", "7b8494": "433f93", @@ -29,7 +27,6 @@ "6b6b7b": "722f15", "ffffff": "ffcc7d", "c5ced6": "d2954e", - "000000": "000000", "9c9cad": "a45f34", "424a52": "521709", "7b8494": "873e20", diff --git a/public/images/pokemon/variant/back/306-mega.json b/public/images/pokemon/variant/back/306-mega.json index 3ae17cb8c9d..cb90675d57c 100644 --- a/public/images/pokemon/variant/back/306-mega.json +++ b/public/images/pokemon/variant/back/306-mega.json @@ -1,7 +1,6 @@ { "0": { "393939": "132c1b", - "101010": "101010", "6a6a6a": "325537", "5a5a62": "735c4a", "fefefe": "fff2e5", @@ -13,7 +12,6 @@ }, "1": { "393939": "47121b", - "101010": "101010", "6a6a6a": "8b312e", "5a5a62": "374186", "fefefe": "cdd9fa", @@ -25,7 +23,6 @@ }, "2": { "393939": "1d365e", - "101010": "101010", "6a6a6a": "385594", "5a5a62": "7a3a1a", "fefefe": "f1b25e", diff --git a/public/images/pokemon/variant/back/306.json b/public/images/pokemon/variant/back/306.json index 369e367a076..d7f234ac930 100644 --- a/public/images/pokemon/variant/back/306.json +++ b/public/images/pokemon/variant/back/306.json @@ -4,7 +4,6 @@ "cecece": "e3d9c2", "a5a5ad": "cbc4a2", "ffffff": "fff2e5", - "000000": "000000", "212129": "0b1d12", "6bbdff": "d6ff42", "848494": "bca88c", @@ -18,7 +17,6 @@ "cecece": "b9c8f5", "a5a5ad": "91a1e3", "ffffff": "cdd9fa", - "000000": "000000", "212129": "290d13", "6bbdff": "ffcf47", "848494": "686dc0", @@ -32,7 +30,6 @@ "cecece": "f2b864", "a5a5ad": "d48e3c", "ffffff": "ffcc7d", - "000000": "000000", "212129": "101a37", "6bbdff": "2aebcf", "848494": "a45f34", diff --git a/public/images/pokemon/variant/back/307.json b/public/images/pokemon/variant/back/307.json index 3bdadaa8e16..8420a8631be 100644 --- a/public/images/pokemon/variant/back/307.json +++ b/public/images/pokemon/variant/back/307.json @@ -3,7 +3,6 @@ "7b6b6b": "7a5f5f", "b5adad": "9f8383", "e6dede": "deccc3", - "000000": "000000", "3a84b5": "7e4377", "3a4a5a": "5a2859", "6bcee6": "f4a8c8", @@ -13,7 +12,6 @@ "7b6b6b": "314b76", "b5adad": "677d98", "e6dede": "c2cfdb", - "000000": "000000", "3a84b5": "51876e", "3a4a5a": "113926", "6bcee6": "7edfb7", diff --git a/public/images/pokemon/variant/back/308-mega.json b/public/images/pokemon/variant/back/308-mega.json index 3517d7853a9..db572ca4391 100644 --- a/public/images/pokemon/variant/back/308-mega.json +++ b/public/images/pokemon/variant/back/308-mega.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "83414a": "59141d", "8b838b": "5a4357", "e6738b": "a53835", @@ -8,7 +7,6 @@ "bdafad": "a5829d", "52414a": "432641", "e7e3e7": "e0cdd9", - "f9f8f7": "f9f8f7", "a47329": "722966", "eebd5a": "a25793", "f6de83": "ee9bd5", @@ -16,7 +14,6 @@ "42a2bd": "efa360" }, "2": { - "101010": "101010", "83414a": "461f5d", "8b838b": "445a7e", "e6738b": "7d5187", diff --git a/public/images/pokemon/variant/back/308.json b/public/images/pokemon/variant/back/308.json index d8a8e696541..1f83f02c026 100644 --- a/public/images/pokemon/variant/back/308.json +++ b/public/images/pokemon/variant/back/308.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "84424a": "59141d", "e6738c": "a53835", "ce5a73": "8b2e2b", @@ -15,7 +14,6 @@ "f7de84": "ee9bd5" }, "2": { - "101010": "101010", "84424a": "311548", "e6738c": "7d5187", "ce5a73": "633971", @@ -24,7 +22,6 @@ "b54a5a": "461f5d", "8c848c": "576787", "ada5ad": "7e8daa", - "c5c5c5": "c5c5c5", "a57329": "205a9e", "efbd5a": "3a8dca", "f7de84": "5abbef" diff --git a/public/images/pokemon/variant/back/309.json b/public/images/pokemon/variant/back/309.json index b471b8f69f4..6506ed57935 100644 --- a/public/images/pokemon/variant/back/309.json +++ b/public/images/pokemon/variant/back/309.json @@ -5,11 +5,9 @@ "3a5a52": "091545", "84d67b": "3e6194", "b5ef9c": "6692c4", - "101010": "101010", "ffef42": "ff4039", "63bd63": "284781", - "cea53a": "d11a2d", - "ffffff": "ffffff" + "cea53a": "d11a2d" }, "2": { "639c63": "b399bd", @@ -17,10 +15,8 @@ "3a5a52": "825e94", "84d67b": "edd9ef", "b5ef9c": "ffeff5", - "101010": "101010", "ffef42": "ef60c5", "63bd63": "d5c1d9", - "cea53a": "d03ab2", - "ffffff": "ffffff" + "cea53a": "d03ab2" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/31.json b/public/images/pokemon/variant/back/31.json index 7cbce870f78..e2cbab27a23 100644 --- a/public/images/pokemon/variant/back/31.json +++ b/public/images/pokemon/variant/back/31.json @@ -3,12 +3,9 @@ "314a4a": "593860", "638cad": "9d6ea7", "5ab5ce": "bd94c5", - "101010": "101010", "c5ad5a": "c5c5a4", "9cd6de": "eed3f3", "735a29": "73735a", - "d6cece": "d6cece", - "ffffff": "ffffff", "efe6a5": "ffffff", "e6ce8c": "e6e6d5" }, @@ -16,12 +13,9 @@ "314a4a": "441327", "638cad": "88241f", "5ab5ce": "be4234", - "101010": "101010", "c5ad5a": "c29f9a", "9cd6de": "e58060", "735a29": "734b48", - "d6cece": "d6cece", - "ffffff": "ffffff", "efe6a5": "ffede7", "e6ce8c": "e3ccc7" }, @@ -29,13 +23,9 @@ "314a4a": "210d3b", "638cad": "44286f", "5ab5ce": "5f4897", - "101010": "101010", "c5ad5a": "eab56b", "9cd6de": "5f4897", "735a29": "ad5923", - "d6cece": "d6cece", - "ffffff": "ffffff", - "efe6a5": "ffd999", - "e6ce8c": "e6ce8c" + "efe6a5": "ffd999" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/310-mega.json b/public/images/pokemon/variant/back/310-mega.json index 8ab3d0646dc..b0be523f618 100644 --- a/public/images/pokemon/variant/back/310-mega.json +++ b/public/images/pokemon/variant/back/310-mega.json @@ -4,30 +4,23 @@ "998c4c": "630013", "ffe566": "d4302a", "d9c357": "a6101a", - "101010": "101010", "2a474d": "0d1843", "82cad9": "4c7da6", "548e99": "284781", "69b1bf": "3e6194", - "3f6a73": "1a3269", - "ff7373": "ff7373", - "f8f8f8": "f8f8f8", - "cc2929": "cc2929", - "8c3f3f": "8c3f3f" + "3f6a73": "1a3269" }, "2": { "736a3f": "810040", "998c4c": "a40f5a", "ffe566": "e545b6", "d9c357": "c32574", - "101010": "101010", "2a474d": "3f5476", "82cad9": "c1ddeb", "548e99": "92b4cb", "69b1bf": "b3d1e5", "3f6a73": "6f8caa", "ff7373": "8f60ef", - "f8f8f8": "f8f8f8", "cc2929": "893edf", "8c3f3f": "4a0698" } diff --git a/public/images/pokemon/variant/back/310.json b/public/images/pokemon/variant/back/310.json index 68668df185a..c6370627111 100644 --- a/public/images/pokemon/variant/back/310.json +++ b/public/images/pokemon/variant/back/310.json @@ -4,25 +4,19 @@ "a57b5a": "6d000f", "ffef63": "d7231c", "c5ad5a": "9b0c24", - "101010": "101010", "73b5d6": "3e6194", "4a525a": "0d1a4d", "639cc5": "284781", - "5a84ad": "1a3269", - "bdbde6": "bdbde6", - "ffffff": "ffffff" + "5a84ad": "1a3269" }, "2": { "736352": "810040", "a57b5a": "9c0333", "ffef63": "e545b6", "c5ad5a": "c32574", - "101010": "101010", "73b5d6": "d5d6ee", "4a525a": "4c3a63", "639cc5": "c4bfd9", - "5a84ad": "a399bd", - "bdbde6": "bdbde6", - "ffffff": "ffffff" + "5a84ad": "a399bd" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/311.json b/public/images/pokemon/variant/back/311.json index c981b68c665..4904b5a2de3 100644 --- a/public/images/pokemon/variant/back/311.json +++ b/public/images/pokemon/variant/back/311.json @@ -3,7 +3,6 @@ "de4a42": "e070a9", "ef8484": "f89bc2", "b53131": "c24e9e", - "101010": "101010", "e6c573": "feda99", "b59c63": "c08242", "7b6352": "c08242", @@ -13,7 +12,6 @@ "de4a42": "d17e4d", "ef8484": "efa772", "b53131": "b7653c", - "101010": "101010", "e6c573": "becef1", "b59c63": "7e89bc", "7b6352": "7e89bc", @@ -23,7 +21,6 @@ "de4a42": "e2dba3", "ef8484": "fbf6e0", "b53131": "b7ac55", - "101010": "101010", "e6c573": "891e32", "b59c63": "620b05", "7b6352": "620b05", diff --git a/public/images/pokemon/variant/back/312.json b/public/images/pokemon/variant/back/312.json index e6006e80bbb..b9b732fde2e 100644 --- a/public/images/pokemon/variant/back/312.json +++ b/public/images/pokemon/variant/back/312.json @@ -1,7 +1,6 @@ { "1": { "4252de": "533bb0", - "101010": "101010", "739cf7": "c5ade5", "5a84ef": "8f6cd0", "e6c573": "b4dfe5", @@ -11,7 +10,6 @@ }, "2": { "4252de": "7cc5a5", - "101010": "101010", "739cf7": "e6f8ee", "5a84ef": "c4ddd2", "e6c573": "2e3a7f", diff --git a/public/images/pokemon/variant/back/315.json b/public/images/pokemon/variant/back/315.json index 124fba8a7b0..0f364cacd18 100644 --- a/public/images/pokemon/variant/back/315.json +++ b/public/images/pokemon/variant/back/315.json @@ -3,7 +3,6 @@ "3a5229": "0b2337", "5a9452": "153a51", "a5de73": "408592", - "000000": "000000", "73c55a": "215569", "295a94": "482571", "a5314a": "af681a", @@ -19,7 +18,6 @@ "3a5229": "201443", "5a9452": "402765", "a5de73": "aa78cd", - "000000": "000000", "73c55a": "66418b", "295a94": "6f104e", "a5314a": "8c2601", diff --git a/public/images/pokemon/variant/back/320.json b/public/images/pokemon/variant/back/320.json index e3be16343f5..3cb2d6ca5c0 100644 --- a/public/images/pokemon/variant/back/320.json +++ b/public/images/pokemon/variant/back/320.json @@ -5,7 +5,6 @@ "639cce": "ad252f", "4a84b5": "950f30", "315a94": "7d082e", - "000000": "000000", "ceb584": "cba6b8", "6b634a": "6c3f51", "ffefce": "eed9ef" @@ -16,7 +15,6 @@ "639cce": "503769", "4a84b5": "3d2955", "315a94": "34224b", - "000000": "000000", "ceb584": "b7a3bf", "6b634a": "5c4964", "ffefce": "eed9ef" diff --git a/public/images/pokemon/variant/back/321.json b/public/images/pokemon/variant/back/321.json index 51ee130e4ee..a893b313e54 100644 --- a/public/images/pokemon/variant/back/321.json +++ b/public/images/pokemon/variant/back/321.json @@ -1,6 +1,5 @@ { "1": { - "847384": "847384", "1052ce": "a4172f", "293a9c": "510019", "2173de": "ce323d", @@ -8,7 +7,6 @@ "94adff": "f5796d", "5a84ef": "e64f4f", "efe6ff": "e2c6d0", - "101010": "101010", "d6cede": "cba6b8" }, "2": { @@ -20,7 +18,6 @@ "94adff": "b484ce", "5a84ef": "8f69a3", "efe6ff": "fcebf6", - "101010": "101010", "d6cede": "eed9ef" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/327.json b/public/images/pokemon/variant/back/327.json index 29d66d38e43..850b92e64a6 100644 --- a/public/images/pokemon/variant/back/327.json +++ b/public/images/pokemon/variant/back/327.json @@ -1,7 +1,6 @@ { "1": { "7b4231": "21384a", - "101010": "101010", "735242": "122c3b", "e6d6a5": "b2dcd7", "cea573": "6ca9ac", @@ -11,7 +10,6 @@ }, "2": { "7b4231": "75211a", - "101010": "101010", "735242": "52180f", "e6d6a5": "be5f3c", "cea573": "93381f", diff --git a/public/images/pokemon/variant/back/328.json b/public/images/pokemon/variant/back/328.json index 354371495b7..0645acb54cf 100644 --- a/public/images/pokemon/variant/back/328.json +++ b/public/images/pokemon/variant/back/328.json @@ -4,9 +4,7 @@ "734242": "254226", "ef7342": "c9da97", "ff947b": "ffffbc", - "212121": "212121", "cecec5": "e99339", - "ffffff": "ffffff", "a5ada5": "bc6427", "848484": "89370b" }, @@ -15,9 +13,7 @@ "734242": "17465e", "ef7342": "5dd7db", "ff947b": "84f6e4", - "212121": "212121", "cecec5": "e4a056", - "ffffff": "ffffff", "a5ada5": "cd7537", "848484": "a84e20" } diff --git a/public/images/pokemon/variant/back/329.json b/public/images/pokemon/variant/back/329.json index 38397678f36..27efbde73c5 100644 --- a/public/images/pokemon/variant/back/329.json +++ b/public/images/pokemon/variant/back/329.json @@ -8,8 +8,6 @@ "737352": "1e4320", "bdad7b": "89af58", "e6d68c": "b6cd74", - "bdbdde": "bdbdde", - "ffffff": "ffffff", "ffffa5": "ffffb5" }, "2": { @@ -21,8 +19,6 @@ "737352": "2a658b", "bdad7b": "69b0c8", "e6d68c": "92ddf2", - "bdbdde": "bdbdde", - "ffffff": "ffffff", "ffffa5": "ffffb5" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/330.json b/public/images/pokemon/variant/back/330.json index 96ade337889..2f48030d162 100644 --- a/public/images/pokemon/variant/back/330.json +++ b/public/images/pokemon/variant/back/330.json @@ -4,27 +4,22 @@ "84293a": "752d0c", "6ba573": "d8b430", "ce3a4a": "bc6427", - "101010": "101010", "5a7b52": "8b6009", "de6373": "e99339", "94d69c": "f6e85f", "b5de73": "e4ee9e", - "ffffff": "ffffff", "8ca552": "b3c46a", - "526321": "555e3d", - "deff8c": "deff8c" + "526321": "555e3d" }, "2": { "315a5a": "171997", "84293a": "a84e20", "6ba573": "465fd4", "ce3a4a": "cd7537", - "101010": "101010", "5a7b52": "2836af", "de6373": "f79021", "94d69c": "80a1f5", "b5de73": "94e3ff", - "ffffff": "ffffff", "8ca552": "4dabe8", "526321": "003c64", "deff8c": "d7fff7" diff --git a/public/images/pokemon/variant/back/333.json b/public/images/pokemon/variant/back/333.json index 64d67f5b282..7bc30c324e0 100644 --- a/public/images/pokemon/variant/back/333.json +++ b/public/images/pokemon/variant/back/333.json @@ -4,23 +4,19 @@ "3a6b84": "59377f", "7bceff": "e9d9fa", "63ade6": "cab1ec", - "101010": "101010", "9c9cc5": "3f328d", "ffffff": "80a1f1", "cecee6": "5251bd", - "848494": "392166", - "5a5a73": "5a5a73" + "848494": "392166" }, "2": { "5a94ce": "bc4e8b", "3a6b84": "84265b", "7bceff": "ff9ebd", "63ade6": "e677a5", - "101010": "101010", "9c9cc5": "bf6744", "ffffff": "ffddb4", "cecee6": "eb9d6a", - "848494": "892f26", - "5a5a73": "5a5a73" + "848494": "892f26" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/334-mega.json b/public/images/pokemon/variant/back/334-mega.json index 93a67bca961..38125962e9c 100644 --- a/public/images/pokemon/variant/back/334-mega.json +++ b/public/images/pokemon/variant/back/334-mega.json @@ -10,7 +10,6 @@ "deadc4": "45256a", "95d1e5": "e9d9fa", "4b6973": "462a66", - "101010": "101010", "74a3b3": "947dcf" }, "2": { @@ -24,7 +23,6 @@ "deadc4": "c63057", "95d1e5": "ff93ac", "4b6973": "771743", - "101010": "101010", "74a3b3": "cb457d" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/334.json b/public/images/pokemon/variant/back/334.json index fb032bb4190..ba966e3ea90 100644 --- a/public/images/pokemon/variant/back/334.json +++ b/public/images/pokemon/variant/back/334.json @@ -1,6 +1,5 @@ { "1": { - "000000": "000000", "4a6394": "59377f", "109cce": "947dcf", "5ac5ff": "dbc4fa", @@ -12,7 +11,6 @@ "dee6ef": "6463d8" }, "2": { - "000000": "000000", "4a6394": "84265b", "109cce": "bc4e8b", "5ac5ff": "ff9ebd", diff --git a/public/images/pokemon/variant/back/336.json b/public/images/pokemon/variant/back/336.json index 59602a1c735..1466ff88ffa 100644 --- a/public/images/pokemon/variant/back/336.json +++ b/public/images/pokemon/variant/back/336.json @@ -7,10 +7,8 @@ "efe65a": "f78db5", "deb521": "dc7592", "631919": "20525a", - "000000": "000000", "ad423a": "2d6a77", "d6524a": "108bac", - "ffffff": "ffffff", "4a3152": "616479", "a573e6": "d5cce0", "735a94": "908ea4", @@ -24,10 +22,8 @@ "efe65a": "ee9452", "deb521": "d55218", "631919": "192121", - "000000": "000000", "ad423a": "293131", "d6524a": "5a6262", - "ffffff": "ffffff", "4a3152": "942931", "a573e6": "e6628b", "735a94": "b43952", diff --git a/public/images/pokemon/variant/back/337.json b/public/images/pokemon/variant/back/337.json index 3b6b2e7d4ef..da6fab95bb7 100644 --- a/public/images/pokemon/variant/back/337.json +++ b/public/images/pokemon/variant/back/337.json @@ -5,7 +5,6 @@ "cebd6b": "505c71", "b5a552": "38384b", "846b42": "161617", - "101010": "101010", "3a423a": "20282b", "b5213a": "b81fac", "841029": "611267", @@ -17,7 +16,6 @@ "cebd6b": "8a1211", "b5a552": "630923", "846b42": "2f0616", - "101010": "101010", "3a423a": "341413", "b5213a": "30d6d6", "841029": "08adad", diff --git a/public/images/pokemon/variant/back/338.json b/public/images/pokemon/variant/back/338.json index fac0db9ac9d..8e1981ca714 100644 --- a/public/images/pokemon/variant/back/338.json +++ b/public/images/pokemon/variant/back/338.json @@ -2,7 +2,6 @@ "1": { "634a19": "2b272d", "f7e663": "8d8b7f", - "101010": "101010", "deb519": "605a4a", "9c6b21": "332c2f", "c59442": "404042", @@ -16,7 +15,6 @@ "2": { "634a19": "80849a", "f7e663": "dbe4ee", - "101010": "101010", "deb519": "b1becb", "9c6b21": "8d93a7", "c59442": "96a2ae", diff --git a/public/images/pokemon/variant/back/339.json b/public/images/pokemon/variant/back/339.json index 969045d2a02..d63ded230b8 100644 --- a/public/images/pokemon/variant/back/339.json +++ b/public/images/pokemon/variant/back/339.json @@ -6,7 +6,6 @@ "63cef7": "fbabcc", "2194bd": "8f4daf", "293142": "413aad", - "000000": "000000", "525252": "413aad", "bdbdc5": "5bd5d5", "d6d6de": "aaffd5", diff --git a/public/images/pokemon/variant/back/340.json b/public/images/pokemon/variant/back/340.json index a52e33e995f..1f4723f642b 100644 --- a/public/images/pokemon/variant/back/340.json +++ b/public/images/pokemon/variant/back/340.json @@ -4,13 +4,9 @@ "84deff": "e27f9f", "73ade6": "bd5f55", "4263b5": "655050", - "000000": "000000", "3a4a9c": "443636", "c5a542": "fff6d0", - "f7de5a": "f7de5a", - "6b5a42": "6b5a42", "637bce": "856d6d", - "7bb5e6": "885b57", - "ffffff": "ffffff" + "7bb5e6": "885b57" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/341.json b/public/images/pokemon/variant/back/341.json index efb741ef1b0..aba08b64a3a 100644 --- a/public/images/pokemon/variant/back/341.json +++ b/public/images/pokemon/variant/back/341.json @@ -4,11 +4,8 @@ "ff9c94": "d2d78f", "6b3a42": "5e2204", "f77352": "c1b63c", - "101010": "101010", "e65208": "a37d1c", - "ffffff": "ffffff", "846b52": "ad5d2f", - "cecece": "cecece", "ad9c84": "d4925f", "ceb594": "edbda3" }, @@ -17,11 +14,8 @@ "ff9c94": "dbe5a8", "6b3a42": "5b432a", "f77352": "9ab767", - "101010": "101010", "e65208": "889455", - "ffffff": "ffffff", "846b52": "7a5030", - "cecece": "cecece", "ad9c84": "a88453", "ceb594": "d9bf7e" } diff --git a/public/images/pokemon/variant/back/35.json b/public/images/pokemon/variant/back/35.json index 9ccfd640d33..063f30863fa 100644 --- a/public/images/pokemon/variant/back/35.json +++ b/public/images/pokemon/variant/back/35.json @@ -6,10 +6,8 @@ "ffd6bd": "c7a1e4", "9c8473": "72899d", "ffadad": "9786e3", - "101010": "101010", "5a3121": "20475b", - "949494": "4d5f9d", - "ffffff": "ffffff" + "949494": "4d5f9d" }, "2": { "e67b7b": "958fe6", @@ -19,8 +17,6 @@ "9c8473": "ffd2e0", "ffadad": "badfff", "101010": "321025", - "5a3121": "5a3154", - "949494": "949494", - "ffffff": "ffffff" + "5a3121": "5a3154" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/351-rainy.json b/public/images/pokemon/variant/back/351-rainy.json index 5e7a1d827f2..3835257321a 100644 --- a/public/images/pokemon/variant/back/351-rainy.json +++ b/public/images/pokemon/variant/back/351-rainy.json @@ -1,14 +1,9 @@ { "0": { "526384": "527384", - "8ccede": "8ccede", - "3a425a": "3a425a", - "84b5c5": "84b5c5", - "ffffff": "ffffff", "6373bd": "379aa9", "738cd6": "48c2b4", "b5c5de": "85de7e", - "191919": "191919", "ceeff7": "79ff5e", "5a5a52": "4f555a", "c5c5c5": "9db4c5", @@ -17,13 +12,11 @@ "1": { "526384": "3c165d", "8ccede": "f5bbf6", - "3a425a": "3a425a", "84b5c5": "aa82c1", "ffffff": "faefff", "6373bd": "512b82", "738cd6": "704cb4", "b5c5de": "ac7ce9", - "191919": "191919", "ceeff7": "c5abff", "5a5a52": "352f55", "c5c5c5": "d7d4f1", @@ -32,13 +25,10 @@ "2": { "526384": "2d5170", "8ccede": "59a3b2", - "3a425a": "3a425a", "84b5c5": "487c91", - "ffffff": "ffffff", "6373bd": "99aac3", "738cd6": "cad9ea", "b5c5de": "454fd0", - "191919": "191919", "ceeff7": "5c74e2", "5a5a52": "282e44", "c5c5c5": "605e74", diff --git a/public/images/pokemon/variant/back/351-snowy.json b/public/images/pokemon/variant/back/351-snowy.json index ddb3a3bebb7..5b69d124f6a 100644 --- a/public/images/pokemon/variant/back/351-snowy.json +++ b/public/images/pokemon/variant/back/351-snowy.json @@ -1,11 +1,6 @@ { "0": { - "73a58c": "73a58c", "bde6e6": "bee3e6", - "8ccead": "8ccead", - "29523a": "29523a", - "52736b": "52736b", - "191919": "191919", "634a73": "4a4a73", "7b52bd": "5260bd", "8c73d6": "738cd6", @@ -18,12 +13,9 @@ "8ccead": "c4dcdc", "29523a": "335c68", "52736b": "688e94", - "191919": "191919", "634a73": "1f2567", "7b52bd": "323e85", - "8c73d6": "3f59a0", - "9c9cc5": "9c9cc5", - "c5b5ff": "c5b5ff" + "8c73d6": "3f59a0" }, "2": { "73a58c": "245b68", @@ -31,7 +23,6 @@ "8ccead": "47989e", "29523a": "15364b", "52736b": "5e98a5", - "191919": "191919", "634a73": "2f4954", "7b52bd": "7eafbf", "8c73d6": "b6e7e8", diff --git a/public/images/pokemon/variant/back/351-sunny.json b/public/images/pokemon/variant/back/351-sunny.json index d0d87551e48..2e80bb8d6bb 100644 --- a/public/images/pokemon/variant/back/351-sunny.json +++ b/public/images/pokemon/variant/back/351-sunny.json @@ -5,7 +5,6 @@ "ffffff": "f0dee7", "d6844a": "d6994a", "633129": "633829", - "191919": "191919", "ef7b4a": "ff566c", "ce5a4a": "bf4b6a", "5a5a52": "5a5155", @@ -17,7 +16,6 @@ "ffffff": "d7d4f1", "d6844a": "d34d51", "633129": "4a0427", - "191919": "191919", "ef7b4a": "cd385b", "ce5a4a": "871537", "5a5a52": "282e44", diff --git a/public/images/pokemon/variant/back/351.json b/public/images/pokemon/variant/back/351.json index 1e0c0e15946..d79aa01e05f 100644 --- a/public/images/pokemon/variant/back/351.json +++ b/public/images/pokemon/variant/back/351.json @@ -4,7 +4,6 @@ "949494": "496c9a", "e6dede": "9ec7dc", "f7f7ef": "cfe1e7", - "000000": "000000", "cebdbd": "6288a6", "a59ca5": "6a0650", "ffffff": "b12348", @@ -15,7 +14,6 @@ "949494": "344372", "e6dede": "6f86a4", "f7f7ef": "a7bcd1", - "000000": "000000", "cebdbd": "425a8a", "a59ca5": "93290d", "ffffff": "d87a26", diff --git a/public/images/pokemon/variant/back/352.json b/public/images/pokemon/variant/back/352.json index 565b4cf87d3..b68f95b14a2 100644 --- a/public/images/pokemon/variant/back/352.json +++ b/public/images/pokemon/variant/back/352.json @@ -4,44 +4,38 @@ "73315a": "0e3354", "8c7b5a": "824c0b", "d663ad": "54a3ca", - "000000": "000000", "f7ef7b": "f7dd7b", "dec55a": "e5b740", "bda552": "cd9a2b", "42635a": "296161", "5a9473": "418b87", "5abd73": "5db5a8", - "7bd684": "9cefbc", - "ffffff": "ffffff" + "7bd684": "9cefbc" }, "1": { "a54284": "3d48b2", "73315a": "202065", "8c7b5a": "7b2577", "d663ad": "8597d6", - "000000": "000000", "f7ef7b": "ed7cd8", "dec55a": "cb57b6", "bda552": "962c8d", "42635a": "762f0f", "5a9473": "bd7932", "5abd73": "e4ad46", - "7bd684": "ffd577", - "ffffff": "ffffff" + "7bd684": "ffd577" }, "2": { "a54284": "64152b", "73315a": "400e2a", "8c7b5a": "307855", "d663ad": "ab2f43", - "000000": "000000", "f7ef7b": "affec6", "dec55a": "7edb9f", "bda552": "52b57a", "42635a": "58214c", "5a9473": "b45599", "5abd73": "d775b5", - "7bd684": "f2a8d6", - "ffffff": "ffffff" + "7bd684": "f2a8d6" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/353.json b/public/images/pokemon/variant/back/353.json index 40c30d2720c..a888181b501 100644 --- a/public/images/pokemon/variant/back/353.json +++ b/public/images/pokemon/variant/back/353.json @@ -4,7 +4,6 @@ "635a8c": "9c4572", "73739c": "c25e87", "8484ad": "d57b96", - "000000": "000000", "19315a": "2c1432", "428cad": "5452c7", "73b5d6": "8476d7", @@ -16,7 +15,6 @@ "635a8c": "487c5d", "73739c": "6d9772", "8484ad": "93aa7f", - "000000": "000000", "19315a": "20311c", "428cad": "47b858", "73b5d6": "71d765", diff --git a/public/images/pokemon/variant/back/354-mega.json b/public/images/pokemon/variant/back/354-mega.json index 01632fcde0f..1010d14aaf3 100644 --- a/public/images/pokemon/variant/back/354-mega.json +++ b/public/images/pokemon/variant/back/354-mega.json @@ -5,7 +5,6 @@ "eebd5a": "b78d90", "d59c39": "7d656d", "322c33": "30142a", - "010101": "010101", "685f6b": "6c2f4c", "4d464f": "592145", "7c777d": "934861", @@ -20,7 +19,6 @@ "eebd5a": "4d4f5b", "d59c39": "3b3d54", "322c33": "2b454a", - "010101": "010101", "685f6b": "71a680", "4d464f": "5b777b", "7c777d": "9cbf81", diff --git a/public/images/pokemon/variant/back/354.json b/public/images/pokemon/variant/back/354.json index 2cf56096218..a6004d0fe69 100644 --- a/public/images/pokemon/variant/back/354.json +++ b/public/images/pokemon/variant/back/354.json @@ -4,7 +4,6 @@ "9c9ca5": "934861", "3a3142": "2e0920", "7b7b84": "6c2f4c", - "000000": "000000", "a57b10": "715568", "523a00": "372a38", "efbd5a": "b78d90", @@ -16,7 +15,6 @@ "9c9ca5": "9ed18a", "3a3142": "2b454a", "7b7b84": "84bd95", - "000000": "000000", "a57b10": "33365e", "523a00": "151433", "efbd5a": "4d4f5b", diff --git a/public/images/pokemon/variant/back/357.json b/public/images/pokemon/variant/back/357.json index c2b00a581c0..b7091079ec3 100644 --- a/public/images/pokemon/variant/back/357.json +++ b/public/images/pokemon/variant/back/357.json @@ -15,7 +15,6 @@ "b5946b": "ffefd5" }, "2": { - "000000": "000000", "52ad52": "2d3c5c", "216321": "101121", "3a8c4a": "1f2547", diff --git a/public/images/pokemon/variant/back/358.json b/public/images/pokemon/variant/back/358.json index e0ad4916ffd..d23fb2c57fc 100644 --- a/public/images/pokemon/variant/back/358.json +++ b/public/images/pokemon/variant/back/358.json @@ -1,11 +1,7 @@ { "0": { - "a57352": "a57352", "000000": "101010", - "e6a54a": "e6a54a", "ffd65a": "ffce5a", - "ffe694": "ffe694", - "ffffff": "ffffff", "424a6b": "3a1837", "c5e6ff": "d8c8d9", "9cc5e6": "c3b5c6", @@ -20,7 +16,6 @@ "e6a54a": "cca375", "ffd65a": "ebd4b0", "ffe694": "faedcd", - "ffffff": "ffffff", "424a6b": "29346b", "c5e6ff": "c5c2dc", "9cc5e6": "afadcd", @@ -35,7 +30,6 @@ "e6a54a": "c86b3e", "ffd65a": "ee9b65", "ffe694": "f4c89d", - "ffffff": "ffffff", "424a6b": "593a58", "c5e6ff": "f7e6e5", "9cc5e6": "e8d6d6", diff --git a/public/images/pokemon/variant/back/36.json b/public/images/pokemon/variant/back/36.json index a68781af567..0f92d1fc987 100644 --- a/public/images/pokemon/variant/back/36.json +++ b/public/images/pokemon/variant/back/36.json @@ -3,13 +3,10 @@ "52423a": "59435c", "8c4a52": "7e4b9c", "de6363": "958fe6", - "101010": "101010", "7b6b63": "ab6f83", "ffc5b5": "e5faf2", "ef9494": "abcbff", - "52314a": "52314a", "d67ba5": "f5c4e0", - "bd5a7b": "d1829b", - "ffffff": "ffffff" + "bd5a7b": "d1829b" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/361.json b/public/images/pokemon/variant/back/361.json index 19b1e1aa055..6428c992de9 100644 --- a/public/images/pokemon/variant/back/361.json +++ b/public/images/pokemon/variant/back/361.json @@ -5,7 +5,6 @@ "efc56b": "c36193", "ffefa5": "f5a4c6", "ff735a": "ddb478", - "000000": "000000", "b55a31": "cf9d61", "3a3131": "2e161b", "4a4a4a": "432525" @@ -16,7 +15,6 @@ "efc56b": "1f4419", "ffefa5": "5f884c", "ff735a": "071f12", - "000000": "000000", "b55a31": "03130b", "3a3131": "586b62", "4a4a4a": "8c9f94" diff --git a/public/images/pokemon/variant/back/362-mega.json b/public/images/pokemon/variant/back/362-mega.json index 2f3d13a6944..244a1c96aeb 100644 --- a/public/images/pokemon/variant/back/362-mega.json +++ b/public/images/pokemon/variant/back/362-mega.json @@ -1,7 +1,6 @@ { "1": { "393941": "050832", - "010101": "010101", "2b74a8": "84073c", "bbeeff": "f9383e", "7dbbee": "b7113a", @@ -13,7 +12,6 @@ }, "2": { "393941": "221315", - "010101": "010101", "2b74a8": "0c4b3a", "bbeeff": "5ce11a", "7dbbee": "009325", diff --git a/public/images/pokemon/variant/back/362.json b/public/images/pokemon/variant/back/362.json index 337a5137ab9..13cdf946670 100644 --- a/public/images/pokemon/variant/back/362.json +++ b/public/images/pokemon/variant/back/362.json @@ -1,18 +1,15 @@ { "1": { "3a3a42": "0d1146", - "000000": "000000", "a5a5ad": "f9383e", "7b7b84": "84073c", "7b7b94": "151a57", "e6e6f7": "a2b7e5", "adadce": "2f3c84", - "c5cee6": "6076c6", - "52526b": "52526b" + "c5cee6": "6076c6" }, "2": { "3a3a42": "221315", - "000000": "000000", "a5a5ad": "009325", "7b7b84": "0c4b3a", "7b7b94": "4a282a", diff --git a/public/images/pokemon/variant/back/37.json b/public/images/pokemon/variant/back/37.json index 1c7262f4d92..3e4728637c6 100644 --- a/public/images/pokemon/variant/back/37.json +++ b/public/images/pokemon/variant/back/37.json @@ -5,7 +5,6 @@ "732100": "381d5b", "bd735a": "ba6cbd", "e6946b": "dc91d5", - "101010": "101010", "ffde94": "d4c5b6", "ffe6b5": "e8e0d1", "845231": "743a67", @@ -18,7 +17,6 @@ "732100": "1e1323", "bd735a": "33325e", "e6946b": "45457c", - "101010": "101010", "ffde94": "9fb3c1", "ffe6b5": "d8e4e8", "845231": "1b1b47", diff --git a/public/images/pokemon/variant/back/371.json b/public/images/pokemon/variant/back/371.json index 5191634020b..a8ee100bde5 100644 --- a/public/images/pokemon/variant/back/371.json +++ b/public/images/pokemon/variant/back/371.json @@ -3,32 +3,20 @@ "4a5263": "4f342a", "d6cede": "ead1b5", "a59cb5": "bc997e", - "000000": "000000", "849494": "89624e", "5a84ad": "a8662e", "bda573": "28407d", - "f7f7ff": "f7f7ff", "63ade6": "d19656", - "847352": "1b2867", - "ffffff": "ffffff", - "9c4219": "9c4219", - "d67342": "d67342", - "94d6ff": "94d6ff" + "847352": "1b2867" }, "2": { "4a5263": "55111e", "d6cede": "eacb8e", "a59cb5": "c79961", - "000000": "000000", "849494": "89624e", "5a84ad": "b33c47", "bda573": "e5cdab", - "f7f7ff": "f7f7ff", "63ade6": "c7515c", - "847352": "c79961", - "ffffff": "ffffff", - "9c4219": "9c4219", - "d67342": "d67342", - "94d6ff": "94d6ff" + "847352": "c79961" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/372.json b/public/images/pokemon/variant/back/372.json index 3adf4b49788..8002e0728b7 100644 --- a/public/images/pokemon/variant/back/372.json +++ b/public/images/pokemon/variant/back/372.json @@ -3,9 +3,7 @@ "525263": "5e3528", "7b7384": "704a3b", "d6d6d6": "ead1b5", - "efefd6": "efefd6", "adadb5": "bc997e", - "191919": "191919", "525a52": "9b572b", "9494a5": "9b735d", "4a423a": "6e2a12", @@ -17,9 +15,7 @@ "525263": "7b4e2e", "7b7384": "a16f44", "d6d6d6": "f2d9a9", - "efefd6": "efefd6", "adadb5": "d0a674", - "191919": "191919", "525a52": "862533", "9494a5": "ad7853", "4a423a": "581222", diff --git a/public/images/pokemon/variant/back/373-mega.json b/public/images/pokemon/variant/back/373-mega.json index 04515e84b4b..4e5d5889e6e 100644 --- a/public/images/pokemon/variant/back/373-mega.json +++ b/public/images/pokemon/variant/back/373-mega.json @@ -3,28 +3,22 @@ "602828": "02002c", "a33939": "132760", "ea5350": "1c4076", - "101010": "101010", "002e3f": "6c2d13", "23a1d3": "efb660", "1e7696": "d28943", "f77979": "4572a2", - "255063": "a45f28", - "acaca4": "acaca4", - "fcfcfc": "fcfcfc", - "839494": "839494" + "255063": "a45f28" }, "2": { "602828": "866c51", "a33939": "baae9b", "ea5350": "e5ddcb", - "101010": "101010", "002e3f": "300926", "23a1d3": "8a3562", "1e7696": "71184e", "f77979": "fff9e5", "255063": "3f0f31", "acaca4": "591126", - "fcfcfc": "fcfcfc", "839494": "591126" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/373.json b/public/images/pokemon/variant/back/373.json index ec86f607f9d..b4588ac589c 100644 --- a/public/images/pokemon/variant/back/373.json +++ b/public/images/pokemon/variant/back/373.json @@ -1,6 +1,5 @@ { "1": { - "191919": "191919", "29637b": "66300e", "84cee6": "f3be6d", "4aa5ce": "c77939", @@ -9,13 +8,10 @@ "de8494": "4572a2", "a53a4a": "132760", "42849c": "9f5727", - "ffffff": "ffffff", "adada5": "f1dbc0", - "849494": "c49368", - "efefe6": "efefe6" + "849494": "c49368" }, "2": { - "191919": "191919", "29637b": "310823", "84cee6": "8b2539", "4aa5ce": "631734", @@ -24,7 +20,6 @@ "de8494": "fff5fb", "a53a4a": "b596ab", "42849c": "420c26", - "ffffff": "ffffff", "adada5": "beaa8a", "849494": "8c6d56", "efefe6": "fff9e5" diff --git a/public/images/pokemon/variant/back/374.json b/public/images/pokemon/variant/back/374.json index a5490ebda55..a617d6e3a1b 100644 --- a/public/images/pokemon/variant/back/374.json +++ b/public/images/pokemon/variant/back/374.json @@ -3,7 +3,6 @@ "424a84": "550611", "94b5ef": "ff795f", "528cd6": "b52524", - "101010": "101010", "4a6ba5": "851421", "73b5f7": "eb4c43", "dedede": "f0cb69", @@ -14,7 +13,6 @@ "424a84": "0d4346", "94b5ef": "7ef5d1", "528cd6": "39ac99", - "101010": "101010", "4a6ba5": "1e716e", "73b5f7": "70e1bf", "dedede": "ffb752", diff --git a/public/images/pokemon/variant/back/375.json b/public/images/pokemon/variant/back/375.json index 80de761d4bb..3cb439918de 100644 --- a/public/images/pokemon/variant/back/375.json +++ b/public/images/pokemon/variant/back/375.json @@ -1,7 +1,6 @@ { "1": { "636b8c": "8d4010", - "101010": "101010", "dedede": "f2d660", "9c9cad": "ce7c29", "c5c5ce": "f8b74c", @@ -14,7 +13,6 @@ }, "2": { "636b8c": "7e280e", - "101010": "101010", "dedede": "f19231", "9c9cad": "bd582c", "c5c5ce": "eb763d", diff --git a/public/images/pokemon/variant/back/376-mega.json b/public/images/pokemon/variant/back/376-mega.json index 041b81152c8..1f9fbff63d9 100644 --- a/public/images/pokemon/variant/back/376-mega.json +++ b/public/images/pokemon/variant/back/376-mega.json @@ -6,8 +6,7 @@ "313962": "550611", "736a73": "a76911", "cdcdcd": "ffe07c", - "acacac": "ffc753", - "101010": "101010" + "acacac": "ffc753" }, "2": { "416294": "1e716e", @@ -16,7 +15,6 @@ "313962": "0b3739", "736a73": "9f4219", "cdcdcd": "ffc16a", - "acacac": "f57e37", - "101010": "101010" + "acacac": "f57e37" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/376.json b/public/images/pokemon/variant/back/376.json index ee2939ebeb8..b0379faa0c0 100644 --- a/public/images/pokemon/variant/back/376.json +++ b/public/images/pokemon/variant/back/376.json @@ -1,7 +1,6 @@ { "1": { "313a63": "550611", - "101010": "101010", "a5c5f7": "ff7d6d", "7ba5f7": "f2534b", "4a84c5": "b42a29", @@ -13,7 +12,6 @@ }, "2": { "313a63": "0b3739", - "101010": "101010", "a5c5f7": "7ef5d1", "7ba5f7": "67ddbe", "4a84c5": "41b4a1", diff --git a/public/images/pokemon/variant/back/38.json b/public/images/pokemon/variant/back/38.json index bd8b6202381..54406c2bd7e 100644 --- a/public/images/pokemon/variant/back/38.json +++ b/public/images/pokemon/variant/back/38.json @@ -3,7 +3,6 @@ "846319": "613260", "ce9c4a": "b16da0", "f7e67b": "f0c2dc", - "101010": "101010", "e6c552": "ca91ba", "ffa53a": "8963b5", "ef8429": "593d85" @@ -12,7 +11,6 @@ "846319": "0b0b2a", "ce9c4a": "1a1a52", "f7e67b": "3f548b", - "101010": "101010", "e6c552": "293272", "ffa53a": "a9354a", "ef8429": "811d39" diff --git a/public/images/pokemon/variant/back/380-mega.json b/public/images/pokemon/variant/back/380-mega.json index fe47ff1cda3..98af25e4d7e 100644 --- a/public/images/pokemon/variant/back/380-mega.json +++ b/public/images/pokemon/variant/back/380-mega.json @@ -3,7 +3,6 @@ "7474a6": "9a6853", "f2f2ff": "f3e6df", "adadd9": "b48f79", - "101010": "101010", "cecef2": "e3cfc1", "483f73": "97440c", "8777d9": "d08528", @@ -13,7 +12,6 @@ "7474a6": "8d5a8f", "f2f2ff": "eedaea", "adadd9": "c78ac4", - "101010": "101010", "cecef2": "e4c7e1", "483f73": "167683", "8777d9": "5de2d5", diff --git a/public/images/pokemon/variant/back/380.json b/public/images/pokemon/variant/back/380.json index eeb530ff55c..d04ae32d12e 100644 --- a/public/images/pokemon/variant/back/380.json +++ b/public/images/pokemon/variant/back/380.json @@ -1,7 +1,6 @@ { "1": { "8c294a": "8c3205", - "000000": "000000", "ff6363": "f78232", "7b73a5": "ac654e", "ceceef": "dead89", @@ -10,12 +9,10 @@ "ada5d6": "b87e64", "ce4a52": "d45c1b", "cea54a": "8d4def", - "ffffff": "ffffff", "ffce5a": "a575ff" }, "2": { "8c294a": "480a81", - "000000": "000000", "ff6363": "9344b8", "7b73a5": "912a63", "ceceef": "d899bd", @@ -24,7 +21,6 @@ "ada5d6": "ad5682", "ce4a52": "70309f", "cea54a": "ab2635", - "ffffff": "ffffff", "ffce5a": "cf3d45" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/381-mega.json b/public/images/pokemon/variant/back/381-mega.json index 018df030d4a..87eb3ee0e3a 100644 --- a/public/images/pokemon/variant/back/381-mega.json +++ b/public/images/pokemon/variant/back/381-mega.json @@ -3,7 +3,6 @@ "7474a6": "7e447b", "f2f2ff": "f9cfed", "adadd9": "b673ad", - "101010": "101010", "cecef2": "dfa1d2", "483f73": "29165d", "8777d9": "453c90", @@ -13,7 +12,6 @@ "7474a6": "98485e", "f2f2ff": "f7d9ec", "adadd9": "bf7a9d", - "101010": "101010", "cecef2": "e4abcc", "483f73": "52060f", "8777d9": "97241f", diff --git a/public/images/pokemon/variant/back/381.json b/public/images/pokemon/variant/back/381.json index 85d230ee1df..56fb1494d79 100644 --- a/public/images/pokemon/variant/back/381.json +++ b/public/images/pokemon/variant/back/381.json @@ -3,26 +3,22 @@ "4a63b5": "3e1f5a", "293173": "2a0f43", "5aa5ff": "653c7e", - "101010": "101010", "6b636b": "6d3252", "ded6ce": "f9cfed", "5273d6": "4f2c6a", "b5b5ad": "e4a8d1", "dedede": "ffe5f4", - "ffffff": "ffffff", "c53a5a": "d05718" }, "2": { "4a63b5": "b54800", "293173": "7e2201", "5aa5ff": "ea8b00", - "101010": "101010", "6b636b": "733e7c", "ded6ce": "dab1d7", "5273d6": "ce6700", "b5b5ad": "bb8dbb", "dedede": "e9cae4", - "ffffff": "ffffff", "c53a5a": "00abd2" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/382-primal.json b/public/images/pokemon/variant/back/382-primal.json index 368d7a809f0..2b0eb5ce5fb 100644 --- a/public/images/pokemon/variant/back/382-primal.json +++ b/public/images/pokemon/variant/back/382-primal.json @@ -4,7 +4,6 @@ "74659d": "f3bb49", "90a2c0": "eac3b9", "d3e6f4": "f6e4e0", - "101010": "101010", "e8e3e8": "fff7f4", "373384": "f08d2a", "7eaecc": "ff3200", @@ -19,9 +18,6 @@ "2": { "27245e": "780613", "74659d": "ea512b", - "90a2c0": "90a2c0", - "d3e6f4": "d3e6f4", - "101010": "101010", "e8e3e8": "ffe9e6", "373384": "a90e14", "7eaecc": "ffc546", diff --git a/public/images/pokemon/variant/back/382.json b/public/images/pokemon/variant/back/382.json index 5bd9c3a9a7d..f947132f2d6 100644 --- a/public/images/pokemon/variant/back/382.json +++ b/public/images/pokemon/variant/back/382.json @@ -1,9 +1,7 @@ { "1": { - "5a526b": "5a526b", "dedede": "fff7f4", "3a63b5": "f08d2a", - "101010": "101010", "cebdce": "f6e4e0", "5aa5ff": "ffc95c", "4a84d6": "ffa938", @@ -16,10 +14,7 @@ "73293a": "a30d25" }, "2": { - "5a526b": "5a526b", - "dedede": "dedede", "3a63b5": "a90e14", - "101010": "101010", "cebdce": "d7bbd7", "5aa5ff": "ea512b", "4a84d6": "ce3118", @@ -28,7 +23,6 @@ "9c8c94": "ba9abc", "84ceff": "ff8a5e", "f71010": "ffc546", - "a53163": "ea7c18", - "73293a": "73293a" + "a53163": "ea7c18" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/383-primal.json b/public/images/pokemon/variant/back/383-primal.json index 1cb9664651e..77f7bb7d58a 100644 --- a/public/images/pokemon/variant/back/383-primal.json +++ b/public/images/pokemon/variant/back/383-primal.json @@ -1,6 +1,5 @@ { "1": { - "000000": "000000", "632329": "032a10", "7e2d2d": "10371a", "d5736d": "419e49", @@ -8,16 +7,9 @@ "957346": "ff8571", "f2d259": "ffd493", "a03131": "135121", - "343434": "343434", - "695a5b": "695a5b", - "887981": "887981", - "f6e08c": "f6e08c", - "e0b2b2": "49c74f", - "bdbdd5": "bdbdd5", - "f2f2f2": "f2f2f2" + "e0b2b2": "49c74f" }, "2": { - "000000": "000000", "632329": "123953", "7e2d2d": "20516c", "d5736d": "4daab4", @@ -29,8 +21,6 @@ "695a5b": "4e5169", "887981": "777e95", "f6e08c": "ebffb0", - "e0b2b2": "68cfd0", - "bdbdd5": "bdbdd5", - "f2f2f2": "f2f2f2" + "e0b2b2": "68cfd0" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/383.json b/public/images/pokemon/variant/back/383.json index f3760c0244e..447de8865d4 100644 --- a/public/images/pokemon/variant/back/383.json +++ b/public/images/pokemon/variant/back/383.json @@ -1,6 +1,5 @@ { "1": { - "000000": "000000", "7b2129": "032a10", "9c2929": "10371a", "ff736b": "419e49", @@ -13,11 +12,9 @@ "9c6b31": "d51b3e", "ffce31": "ff435d", "94848c": "72798b", - "ffbdbd": "49c74f", - "ad9ca5": "ad9ca5" + "ffbdbd": "49c74f" }, "2": { - "000000": "000000", "7b2129": "123953", "9c2929": "20516c", "ff736b": "73e7e8", @@ -27,10 +24,7 @@ "736363": "4e5169", "ffffff": "e5fdff", "bdbdd6": "bcdde4", - "9c6b31": "9c6b31", - "ffce31": "ffce31", "94848c": "787f9d", - "ffbdbd": "68cfd0", - "ad9ca5": "ad9ca5" + "ffbdbd": "68cfd0" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/384-mega.json b/public/images/pokemon/variant/back/384-mega.json index 016c044b27f..9ee39a2621c 100644 --- a/public/images/pokemon/variant/back/384-mega.json +++ b/public/images/pokemon/variant/back/384-mega.json @@ -3,7 +3,6 @@ "fbe27e": "90f25d", "fc9436": "3dc62f", "836231": "064c1e", - "010101": "010101", "f6de00": "4ff869", "c5a400": "27c750", "3d7d6d": "66637b", @@ -11,14 +10,12 @@ "22523e": "333554", "e4b629": "27c750", "60d293": "e4e0ee", - "3f3f3f": "333554", - "fcfcfc": "fcfcfc" + "3f3f3f": "333554" }, "2": { "fbe27e": "17e2d6", "fc9436": "098faf", "836231": "121d31", - "010101": "010101", "f6de00": "17e2d6", "c5a400": "098faf", "3d7d6d": "84120f", @@ -26,7 +23,6 @@ "22523e": "650f04", "e4b629": "098faf", "60d293": "f18c5e", - "3f3f3f": "380100", - "fcfcfc": "fcfcfc" + "3f3f3f": "380100" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/384.json b/public/images/pokemon/variant/back/384.json index f4fc7855474..a6400382a8b 100644 --- a/public/images/pokemon/variant/back/384.json +++ b/public/images/pokemon/variant/back/384.json @@ -2,7 +2,6 @@ "1": { "295242": "333554", "4a8473": "66637b", - "000000": "000000", "5abd8c": "b3aec1", "73293a": "064c1e", "9c2952": "27c750", @@ -10,23 +9,17 @@ "c5a500": "4ebc28", "846331": "188c0f", "e65273": "4ff869", - "94deb5": "e4e0ee", - "ffffff": "ffffff", - "ded6ef": "ded6ef" + "94deb5": "e4e0ee" }, "2": { "295242": "540709", "4a8473": "821815", - "000000": "000000", "5abd8c": "ca4636", "73293a": "003b53", "9c2952": "098faf", "f7de00": "17e2d6", "c5a500": "098faf", "846331": "003082", - "e65273": "e65273", - "94deb5": "f18c5e", - "ffffff": "ffffff", - "ded6ef": "ded6ef" + "94deb5": "f18c5e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/385.json b/public/images/pokemon/variant/back/385.json index 1bb728fe3d2..102d7633618 100644 --- a/public/images/pokemon/variant/back/385.json +++ b/public/images/pokemon/variant/back/385.json @@ -1,7 +1,6 @@ { "0": { "ad8431": "925108", - "000000": "000000", "ffff94": "f7e980", "e6bd52": "db942d", "ffe65a": "f3bf5c", @@ -14,7 +13,6 @@ }, "1": { "ad8431": "874100", - "000000": "000000", "ffff94": "f7be5d", "e6bd52": "ba670d", "ffe65a": "de9128", @@ -27,7 +25,6 @@ }, "2": { "ad8431": "234664", - "000000": "000000", "ffff94": "b1dbe8", "e6bd52": "427aa3", "ffe65a": "6fb6da", diff --git a/public/images/pokemon/variant/back/387.json b/public/images/pokemon/variant/back/387.json index a858e24d088..a8d187d2794 100644 --- a/public/images/pokemon/variant/back/387.json +++ b/public/images/pokemon/variant/back/387.json @@ -3,7 +3,6 @@ "3aa542": "d0d6d6", "7bd66b": "ffffff", "3a5a29": "241423", - "000000": "000000", "634a3a": "2c4a78", "b58452": "d6e1e9", "5a7b42": "372835", @@ -12,7 +11,6 @@ "bdce84": "7d6d7a", "dee68c": "958790", "f7e65a": "8bcadd", - "c5bd3a": "3875a1", - "ffffff": "ffffff" + "c5bd3a": "3875a1" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/388.json b/public/images/pokemon/variant/back/388.json index 9ddb71ba8c8..e81ad1f8baf 100644 --- a/public/images/pokemon/variant/back/388.json +++ b/public/images/pokemon/variant/back/388.json @@ -3,34 +3,26 @@ "3a5a29": "3b1228", "3a8c42": "e79ac2", "63b56b": "ffd3f2", - "101019": "101019", "634a3a": "112a24", "b58452": "3f5e4c", "8c6b42": "2c483c", "deb542": "738f7a", "efd642": "9cc096", - "ffffff": "ffffff", "6b8c4a": "773859", "adc563": "b07587", - "94ad5a": "954e6c", - "949494": "949494", - "d6d6d6": "d6d6d6" + "94ad5a": "954e6c" }, "2": { "3a5a29": "362f2f", "3a8c42": "d6e1e9", "63b56b": "ffffff", - "101019": "101019", "634a3a": "251c3d", "b58452": "2c4a78", "8c6b42": "20284e", "deb542": "3875a1", "efd642": "8bcadd", - "ffffff": "ffffff", "6b8c4a": "463d3e", "adc563": "949494", - "94ad5a": "756667", - "949494": "949494", - "d6d6d6": "d6d6d6" + "94ad5a": "756667" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/389.json b/public/images/pokemon/variant/back/389.json index db18c1f2d10..ce698dbdb6d 100644 --- a/public/images/pokemon/variant/back/389.json +++ b/public/images/pokemon/variant/back/389.json @@ -3,7 +3,6 @@ "196319": "ba597b", "42ad42": "fddcf6", "318c3a": "e799bb", - "101010": "101010", "634a3a": "241a21", "8c6b42": "3d2a37", "b58452": "573a4b", @@ -18,7 +17,6 @@ "196319": "738d9d", "42ad42": "d6e1e9", "318c3a": "a7bcc9", - "101010": "101010", "634a3a": "251c3d", "8c6b42": "444661", "b58452": "5c5b75", diff --git a/public/images/pokemon/variant/back/393.json b/public/images/pokemon/variant/back/393.json index e11dce3b058..29ad29cfcbe 100644 --- a/public/images/pokemon/variant/back/393.json +++ b/public/images/pokemon/variant/back/393.json @@ -7,9 +7,7 @@ "63a5c5": "ce8a56", "9cd6f7": "e8ce81", "bdcede": "e2d7a5", - "ffffff": "ffffff", "637b94": "c68a67", - "101010": "101010", "634a10": "363b56", "f7ce42": "bec8d1", "ad843a": "81899b", @@ -25,7 +23,6 @@ "bdcede": "ccb9af", "ffffff": "f4ede8", "637b94": "877e78", - "101010": "101010", "634a10": "368089", "f7ce42": "92edcf", "ad843a": "67c1b7", diff --git a/public/images/pokemon/variant/back/394.json b/public/images/pokemon/variant/back/394.json index c18a4eadc37..0a46d80ab71 100644 --- a/public/images/pokemon/variant/back/394.json +++ b/public/images/pokemon/variant/back/394.json @@ -2,7 +2,6 @@ "1": { "7b5242": "2a2c3a", "bd8c6b": "4f5572", - "101010": "101010", "efce63": "81899b", "ffe684": "bec8d1", "21426b": "2b544b", @@ -16,7 +15,6 @@ "2": { "7b5242": "3c7d84", "bd8c6b": "438084", - "101010": "101010", "efce63": "82d3d0", "ffe684": "baf3e4", "21426b": "aa3565", diff --git a/public/images/pokemon/variant/back/395.json b/public/images/pokemon/variant/back/395.json index e497e8b78e6..624c023fb72 100644 --- a/public/images/pokemon/variant/back/395.json +++ b/public/images/pokemon/variant/back/395.json @@ -3,7 +3,6 @@ "bd8c6b": "464c6b", "ffe684": "bec8d1", "7b5242": "1e202b", - "101010": "101010", "103c75": "7f1711", "9cceff": "fff18c", "528ce6": "cc8043", @@ -18,7 +17,6 @@ "bd8c6b": "2c7787", "ffe684": "6cd3cd", "7b5242": "184555", - "101010": "101010", "103c75": "26061c", "9cceff": "7e2b44", "528ce6": "4f1438", diff --git a/public/images/pokemon/variant/back/399.json b/public/images/pokemon/variant/back/399.json index 86398cd680e..3392927dfdc 100644 --- a/public/images/pokemon/variant/back/399.json +++ b/public/images/pokemon/variant/back/399.json @@ -3,7 +3,6 @@ "634a31": "101e42", "c58c42": "617dda", "9c6331": "3e5ca8", - "101010": "101010", "423110": "0e1831", "cebd84": "8497ce", "5a4229": "42295a" diff --git a/public/images/pokemon/variant/back/4.json b/public/images/pokemon/variant/back/4.json index d3271eebf43..6b337d2ef3a 100644 --- a/public/images/pokemon/variant/back/4.json +++ b/public/images/pokemon/variant/back/4.json @@ -5,14 +5,11 @@ "8c2900": "0f3234", "ff9442": "26837c", "ffd608": "e9bfff", - "101010": "101010", "f7a500": "9e59db", - "ffffff": "ffffff", "31adef": "c40f0f", "083a8c": "8e0b25", "ffd67b": "99f4f7", - "e6ad5a": "60c5c8", - "b5b5b5": "b5b5b5" + "e6ad5a": "60c5c8" }, "2": { "e63a00": "4c83d4", @@ -20,13 +17,10 @@ "8c2900": "20346f", "ff9442": "3a78b7", "ffd608": "f9fffa", - "101010": "101010", "f7a500": "96e8e8", - "ffffff": "ffffff", "31adef": "1e8eff", "083a8c": "0059ff", "ffd67b": "5e238e", - "e6ad5a": "380f6e", - "b5b5b5": "b5b5b5" + "e6ad5a": "380f6e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/400.json b/public/images/pokemon/variant/back/400.json index 734b277ae36..233a47e12ac 100644 --- a/public/images/pokemon/variant/back/400.json +++ b/public/images/pokemon/variant/back/400.json @@ -3,10 +3,8 @@ "ad947b": "bd9171", "e6d69c": "fff5d1", "5a3a31": "70323f", - "3a3129": "3a3129", "bd844a": "dba0ac", "8c5a31": "c46269", - "101010": "101010", "423a31": "3e3040", "63523a": "824561" }, @@ -17,7 +15,6 @@ "3a3129": "313d63", "bd844a": "617dda", "8c5a31": "3e5ca8", - "101010": "101010", "423a31": "38204f", "63523a": "42295a" } diff --git a/public/images/pokemon/variant/back/401.json b/public/images/pokemon/variant/back/401.json index 446e2648182..068a54ee262 100644 --- a/public/images/pokemon/variant/back/401.json +++ b/public/images/pokemon/variant/back/401.json @@ -2,7 +2,6 @@ "1": { "524a42": "cf8439", "7b7363": "f6bb47", - "101010": "101010", "8c6b08": "272344", "ffefad": "56769d", "e6c56b": "454389", @@ -13,7 +12,6 @@ "2": { "524a42": "453565", "7b7363": "71558c", - "101010": "101010", "8c6b08": "784341", "ffefad": "ffd47c", "e6c56b": "e59a75", diff --git a/public/images/pokemon/variant/back/402.json b/public/images/pokemon/variant/back/402.json index 7b6ca4a615e..8dd97d47dae 100644 --- a/public/images/pokemon/variant/back/402.json +++ b/public/images/pokemon/variant/back/402.json @@ -2,9 +2,7 @@ "1": { "633100": "272344", "de5a52": "afd3df", - "101010": "101010", "9c4231": "498ebe", - "31293a": "31293a", "524a42": "cf8439", "7b7363": "f6bb47", "424252": "0e0e23", @@ -17,7 +15,6 @@ "2": { "633100": "2a545f", "de5a52": "70af85", - "101010": "101010", "9c4231": "2f9378", "31293a": "281c41", "524a42": "453565", diff --git a/public/images/pokemon/variant/back/4052.json b/public/images/pokemon/variant/back/4052.json index 58444d01406..46fb4cb3e6d 100644 --- a/public/images/pokemon/variant/back/4052.json +++ b/public/images/pokemon/variant/back/4052.json @@ -1,7 +1,5 @@ { "1": { - "181a1d": "181a1d", - "010101": "010101", "3d4547": "4e385a", "5b4e4d": "57567e", "ada09a": "c3c5d4", @@ -9,8 +7,6 @@ "272d2e": "342b49" }, "2": { - "181a1d": "181a1d", - "010101": "010101", "3d4547": "417778", "5b4e4d": "171127", "ada09a": "603b54", diff --git a/public/images/pokemon/variant/back/406.json b/public/images/pokemon/variant/back/406.json index 744fcb0e506..3265d4e1508 100644 --- a/public/images/pokemon/variant/back/406.json +++ b/public/images/pokemon/variant/back/406.json @@ -1,7 +1,6 @@ { "1": { "73a54a": "153a51", - "000000": "000000", "3a5a29": "0b2337", "b5ef73": "5fadaf", "8cce29": "498b93", @@ -11,7 +10,6 @@ }, "2": { "73a54a": "52347a", - "000000": "000000", "3a5a29": "2d1a4e", "b5ef73": "c098dd", "8cce29": "a47cc7", diff --git a/public/images/pokemon/variant/back/407.json b/public/images/pokemon/variant/back/407.json index 08071023f31..a0005710379 100644 --- a/public/images/pokemon/variant/back/407.json +++ b/public/images/pokemon/variant/back/407.json @@ -5,7 +5,6 @@ "739c8c": "bb9b89", "ffffff": "fff1cb", "d6cede": "e1bf95", - "000000": "000000", "7b3a5a": "9c5910", "ff6384": "efc754", "bd426b": "d28f31", @@ -22,7 +21,6 @@ "739c8c": "a39ec0", "ffffff": "fcf8ff", "d6cede": "d6c7e6", - "000000": "000000", "7b3a5a": "9c2407", "ff6384": "ec883b", "bd426b": "c15a21", diff --git a/public/images/pokemon/variant/back/4077.json b/public/images/pokemon/variant/back/4077.json index 5043570356c..bfa1923812d 100644 --- a/public/images/pokemon/variant/back/4077.json +++ b/public/images/pokemon/variant/back/4077.json @@ -8,7 +8,6 @@ "c973e6": "cc4328", "646357": "192666", "ffffe3": "8cd8ff", - "101010": "101010", "ded5ae": "5b93cc", "a3a49f": "355699", "59237e": "312c49", @@ -23,7 +22,6 @@ "c973e6": "282866", "646357": "361e66", "ffffe3": "ff99dd", - "101010": "101010", "ded5ae": "cc66cc", "a3a49f": "7a3d99", "59237e": "312c49", diff --git a/public/images/pokemon/variant/back/4078.json b/public/images/pokemon/variant/back/4078.json index a47536e3a51..0905cd64299 100644 --- a/public/images/pokemon/variant/back/4078.json +++ b/public/images/pokemon/variant/back/4078.json @@ -1,7 +1,6 @@ { "1": { "44bf75": "cc9470", - "2b3055": "2b3055", "85fabf": "ffd9a5", "737ba4": "514766", "109865": "995944", @@ -9,7 +8,6 @@ "8e38c1": "990c00", "de9fff": "ff884c", "c566e3": "cc4328", - "0c0c0c": "0c0c0c", "414a83": "312c49", "ded5ae": "5b93cc", "636357": "192666", @@ -18,7 +16,6 @@ }, "2": { "44bf75": "cc1e4c", - "2b3055": "2b3055", "85fabf": "ff3255", "737ba4": "514766", "109865": "990f3d", @@ -26,7 +23,6 @@ "8e38c1": "161f4c", "de9fff": "483e7c", "c566e3": "282866", - "0c0c0c": "0c0c0c", "414a83": "312c49", "ded5ae": "cc66cc", "636357": "361e66", diff --git a/public/images/pokemon/variant/back/4079.json b/public/images/pokemon/variant/back/4079.json index e958fc537ab..6872fcd153d 100644 --- a/public/images/pokemon/variant/back/4079.json +++ b/public/images/pokemon/variant/back/4079.json @@ -7,12 +7,9 @@ "fefe3c": "ffeccb", "7c2847": "452a29", "caaa2c": "edc59e", - "101010": "101010", "8b5a18": "a84071", "ffe6b4": "ff9eba", - "dea462": "e0799c", - "fcfcfc": "fcfcfc", - "d5cdcd": "d5cdcd" + "dea462": "e0799c" }, "2": { "d76d96": "c6aead", @@ -22,11 +19,8 @@ "fefe3c": "d9736b", "7c2847": "503941", "caaa2c": "963e59", - "101010": "101010", "8b5a18": "a45c58", "ffe6b4": "efc697", - "dea462": "cb8f75", - "fcfcfc": "fcfcfc", - "d5cdcd": "d5cdcd" + "dea462": "cb8f75" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/4080.json b/public/images/pokemon/variant/back/4080.json index 0101712afb7..ab56fdf775e 100644 --- a/public/images/pokemon/variant/back/4080.json +++ b/public/images/pokemon/variant/back/4080.json @@ -2,13 +2,9 @@ "1": { "723f7c": "edc59e", "a565c0": "ffedcc", - "181818": "181818", "7b2645": "573531", "d76792": "905446", - "c9c9c9": "c9c9c9", - "b6b6ae": "b6b6ae", "7c6987": "a94172", - "fbfbfb": "fbfbfb", "ede2ef": "ff9fbb", "b5a0bd": "e17a9d", "f985aa": "bb694b", @@ -19,13 +15,9 @@ "2": { "723f7c": "963e59", "a565c0": "d9736b", - "181818": "181818", "7b2645": "846467", "d76792": "c6aead", - "c9c9c9": "c9c9c9", - "b6b6ae": "b6b6ae", "7c6987": "a45c58", - "fbfbfb": "fbfbfb", "ede2ef": "efc697", "b5a0bd": "ca8e74", "f985aa": "ecdcbe", diff --git a/public/images/pokemon/variant/back/41.json b/public/images/pokemon/variant/back/41.json index 42283672198..35bd2e46178 100644 --- a/public/images/pokemon/variant/back/41.json +++ b/public/images/pokemon/variant/back/41.json @@ -1,26 +1,18 @@ { "1": { - "101010": "101010", "8cb5ef": "205182", "4a427b": "14093b", "637bb5": "12325c", "73215a": "b6591e", "b5529c": "d58e41", - "bdceff": "868ecc", - "ffffff": "ffffff", - "636363": "636363", - "d6d6d6": "d6d6d6" + "bdceff": "868ecc" }, "2": { - "101010": "101010", "8cb5ef": "cbabca", "4a427b": "4d3259", "637bb5": "916c8b", "73215a": "670f10", "b5529c": "94241c", - "bdceff": "e8d2e6", - "ffffff": "ffffff", - "636363": "636363", - "d6d6d6": "d6d6d6" + "bdceff": "e8d2e6" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/412-plant.json b/public/images/pokemon/variant/back/412-plant.json index 8203db30f28..7174877e4a0 100644 --- a/public/images/pokemon/variant/back/412-plant.json +++ b/public/images/pokemon/variant/back/412-plant.json @@ -3,7 +3,6 @@ "292931": "262b56", "5a5a5a": "5f709f", "3a3a42": "455081", - "101010": "101010", "314a3a": "1f3726", "7b9c4a": "6c956d", "527342": "446649", @@ -13,7 +12,6 @@ "292931": "392933", "5a5a5a": "9f8a8f", "3a3a42": "725c67", - "101010": "101010", "314a3a": "3d2525", "7b9c4a": "8c736c", "527342": "71514e", @@ -23,10 +21,8 @@ "292931": "673f57", "5a5a5a": "c69ab0", "3a3a42": "976480", - "101010": "101010", "314a3a": "1c2d54", "7b9c4a": "5d9ac0", - "527342": "3c6390", - "634a3a": "634a3a" + "527342": "3c6390" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/412-trash.json b/public/images/pokemon/variant/back/412-trash.json index 90cf01bc206..8a1e7b3e8f8 100644 --- a/public/images/pokemon/variant/back/412-trash.json +++ b/public/images/pokemon/variant/back/412-trash.json @@ -1,6 +1,5 @@ { "0": { - "101010": "101010", "292931": "191c46", "3a3a42": "455081", "5a5a5a": "5f709f", @@ -11,7 +10,6 @@ "737b7b": "774490" }, "1": { - "101010": "101010", "292931": "1d1929", "3a3a42": "342e41", "5a5a5a": "594f69", @@ -22,7 +20,6 @@ "737b7b": "4f4955" }, "2": { - "101010": "101010", "292931": "273f2c", "3a3a42": "547e55", "5a5a5a": "b5d6b2", diff --git a/public/images/pokemon/variant/back/413-plant.json b/public/images/pokemon/variant/back/413-plant.json index 397cef6f9a6..ae9f68e2f1f 100644 --- a/public/images/pokemon/variant/back/413-plant.json +++ b/public/images/pokemon/variant/back/413-plant.json @@ -1,6 +1,5 @@ { "0": { - "101010": "101010", "3a3a42": "30366b", "5a5a5a": "455081", "3a5242": "1b3f27", @@ -10,7 +9,6 @@ "314a3a": "304f3a" }, "1": { - "101010": "101010", "3a3a42": "4e3946", "5a5a5a": "725c67", "3a5242": "3f2b2f", @@ -20,7 +18,6 @@ "314a3a": "593d41" }, "2": { - "101010": "101010", "3a3a42": "724063", "5a5a5a": "ab7492", "3a5242": "3c689b", diff --git a/public/images/pokemon/variant/back/413-sandy.json b/public/images/pokemon/variant/back/413-sandy.json index d402bb20673..a89eac5c29c 100644 --- a/public/images/pokemon/variant/back/413-sandy.json +++ b/public/images/pokemon/variant/back/413-sandy.json @@ -1,6 +1,5 @@ { "0": { - "101010": "101010", "5a5a5a": "455081", "3a3a42": "30366b", "3a3131": "2e1e1b", @@ -11,7 +10,6 @@ "635252": "644034" }, "1": { - "101010": "101010", "5a5a5a": "64403f", "3a3a42": "533032", "3a3131": "2c0e17", @@ -22,7 +20,6 @@ "635252": "3e2025" }, "2": { - "101010": "101010", "5a5a5a": "aeb2cd", "3a3a42": "8385a6", "3a3131": "0e1e40", diff --git a/public/images/pokemon/variant/back/413-trash.json b/public/images/pokemon/variant/back/413-trash.json index 1a9df5e0347..796e33cb57c 100644 --- a/public/images/pokemon/variant/back/413-trash.json +++ b/public/images/pokemon/variant/back/413-trash.json @@ -1,6 +1,5 @@ { "0": { - "101010": "101010", "3a3a42": "30366b", "5a5a5a": "455081", "523a4a": "412358", @@ -10,9 +9,7 @@ "7b4a5a": "9b4e86" }, "1": { - "101010": "101010", "3a3a42": "403850", - "5a5a5a": "5a5a5a", "523a4a": "2e2529", "c55a9c": "8d5053", "844a73": "723542", @@ -20,9 +17,7 @@ "7b4a5a": "49496a" }, "2": { - "101010": "101010", "3a3a42": "7aa17b", - "5a5a5a": "5a5a5a", "523a4a": "0e2517", "c55a9c": "5e5864", "844a73": "39343f", diff --git a/public/images/pokemon/variant/back/414.json b/public/images/pokemon/variant/back/414.json index 9c807a346ce..0e55e89659a 100644 --- a/public/images/pokemon/variant/back/414.json +++ b/public/images/pokemon/variant/back/414.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "734221": "b18066", "a54a00": "c59f7e", "e66b29": "f2daba", @@ -15,7 +14,6 @@ "4a3a3a": "291717" }, "2": { - "101010": "101010", "734221": "ae5b3c", "a54a00": "d2895c", "e66b29": "e8b479", diff --git a/public/images/pokemon/variant/back/418.json b/public/images/pokemon/variant/back/418.json index 58fb6a055b6..05967e88af0 100644 --- a/public/images/pokemon/variant/back/418.json +++ b/public/images/pokemon/variant/back/418.json @@ -3,14 +3,10 @@ "ad5a21": "7d1e39", "7b4221": "611b35", "ef7b19": "9c354f", - "191919": "191919", "ce6b19": "851d3e", "f7f7b5": "e8d4cc", "c59452": "995e5c", - "d6d6ce": "d6d6ce", - "ffffff": "ffffff", "cebd84": "cea49d", - "6b6b6b": "6b6b6b", "99693c": "6a808c", "e6a531": "a0b3ba", "2163a5": "385e11", @@ -21,12 +17,9 @@ "ad5a21": "cd91aa", "7b4221": "9e6a86", "ef7b19": "debfc8", - "191919": "191919", "ce6b19": "dca5b5", "f7f7b5": "a8688f", "c59452": "672e5d", - "d6d6ce": "d6d6ce", - "ffffff": "ffffff", "cebd84": "965080", "6b6b6b": "432e38", "99693c": "8e410e", diff --git a/public/images/pokemon/variant/back/419.json b/public/images/pokemon/variant/back/419.json index 3202d442933..197a8b33e18 100644 --- a/public/images/pokemon/variant/back/419.json +++ b/public/images/pokemon/variant/back/419.json @@ -2,17 +2,13 @@ "1": { "7b4221": "611b35", "ef7b19": "9c354f", - "191919": "191919", "ce6b19": "851d3e", "ad5a21": "7d1e39", "cebd84": "cea49d", "f7f7b5": "e8d4cc", "99693c": "6a808c", - "6b6b6b": "6b6b6b", "e6a531": "a0b3ba", "ffde00": "d2e5e8", - "d6d6ce": "d6d6ce", - "ffffff": "ffffff", "c59452": "995e5c", "2163a5": "385e11", "63bde6": "6a9539" @@ -20,7 +16,6 @@ "2": { "7b4221": "9e6a86", "ef7b19": "debfc8", - "191919": "191919", "ce6b19": "dca5b5", "ad5a21": "cd91aa", "cebd84": "965080", @@ -29,8 +24,6 @@ "6b6b6b": "726481", "e6a531": "d4812f", "ffde00": "eda342", - "d6d6ce": "d6d6ce", - "ffffff": "ffffff", "c59452": "672e5d", "2163a5": "4b2a70", "63bde6": "744d99" diff --git a/public/images/pokemon/variant/back/4199.json b/public/images/pokemon/variant/back/4199.json index 3feab3d0964..676cb5e36d7 100644 --- a/public/images/pokemon/variant/back/4199.json +++ b/public/images/pokemon/variant/back/4199.json @@ -1,7 +1,6 @@ { "1": { "413668": "622344", - "101010": "101010", "a191b5": "de504e", "7a6a98": "ad3139", "654493": "7e3351", @@ -11,14 +10,12 @@ "a565c0": "ffeccb", "d76792": "8f5345", "7b2645": "573531", - "f8f8f8": "f8f8f8", "c89a51": "a84254", "eed583": "c75865", "f985aa": "bb694b" }, "2": { "413668": "1d4c46", - "101010": "101010", "a191b5": "b0dc72", "7a6a98": "71ae48", "654493": "38735c", @@ -28,7 +25,6 @@ "a565c0": "d9736b", "d76792": "c7afae", "7b2645": "846467", - "f8f8f8": "f8f8f8", "c89a51": "2b4a49", "eed583": "4c766a", "f985aa": "ecdcbe" diff --git a/public/images/pokemon/variant/back/42.json b/public/images/pokemon/variant/back/42.json index df3cf67d3ef..adb0c8f6360 100644 --- a/public/images/pokemon/variant/back/42.json +++ b/public/images/pokemon/variant/back/42.json @@ -5,7 +5,6 @@ "adceff": "3c74b1", "5aadef": "204882", "631052": "892d03", - "000000": "000000", "ce6bb5": "f1a139", "ad52ad": "d5711b", "943a7b": "af4e0c" @@ -16,7 +15,6 @@ "adceff": "dfcddd", "5aadef": "cbabca", "631052": "54070c", - "000000": "000000", "ce6bb5": "bc3b1d", "ad52ad": "94241c", "943a7b": "670f10" diff --git a/public/images/pokemon/variant/back/422-east.json b/public/images/pokemon/variant/back/422-east.json index 833a1828c33..28d6da15f68 100644 --- a/public/images/pokemon/variant/back/422-east.json +++ b/public/images/pokemon/variant/back/422-east.json @@ -1,8 +1,6 @@ { "0": { "636394": "61819f", - "101010": "101010", - "ffffff": "ffffff", "bdceef": "b8d4e6", "52527b": "636b7b", "6bb5f7": "82e1c0", @@ -17,8 +15,6 @@ }, "1": { "636394": "314173", - "101010": "101010", - "ffffff": "ffffff", "bdceef": "b8d4e6", "52527b": "314173", "6bb5f7": "485f9c", @@ -33,8 +29,6 @@ }, "2": { "636394": "6d427b", - "101010": "101010", - "ffffff": "ffffff", "bdceef": "c5deef", "52527b": "451e4c", "6bb5f7": "955dbe", diff --git a/public/images/pokemon/variant/back/422-west.json b/public/images/pokemon/variant/back/422-west.json index 563110e29e3..acd593a7b6e 100644 --- a/public/images/pokemon/variant/back/422-west.json +++ b/public/images/pokemon/variant/back/422-west.json @@ -1,6 +1,5 @@ { "0": { - "101010": "101010", "c5428c": "8b3553", "e652a5": "c66264", "73426b": "8b3553", @@ -8,7 +7,6 @@ "ff8cc5": "ff9269", "ad6394": "c66264", "ffde73": "ffd275", - "ffffff": "ffffff", "a58c3a": "ca8b46", "524a3a": "645346", "73737b": "645346", @@ -16,7 +14,6 @@ "b5b5c5": "ca8b46" }, "1": { - "101010": "101010", "c5428c": "573d64", "e652a5": "7960a1", "73426b": "573d64", @@ -24,7 +21,6 @@ "ff8cc5": "aa8be8", "ad6394": "7960a1", "ffde73": "ffb8c5", - "ffffff": "ffffff", "a58c3a": "da6f7b", "524a3a": "993d48", "73737b": "8a7b68", @@ -32,7 +28,6 @@ "b5b5c5": "d1b07c" }, "2": { - "101010": "101010", "c5428c": "281e4c", "e652a5": "48427b", "73426b": "281e4c", @@ -40,7 +35,6 @@ "ff8cc5": "5d64be", "ad6394": "48427b", "ffde73": "ffc975", - "ffffff": "ffffff", "a58c3a": "e5693d", "524a3a": "933f04", "73737b": "00706a", diff --git a/public/images/pokemon/variant/back/4222.json b/public/images/pokemon/variant/back/4222.json index 9c778939ac4..597fc4e1a28 100644 --- a/public/images/pokemon/variant/back/4222.json +++ b/public/images/pokemon/variant/back/4222.json @@ -8,7 +8,6 @@ "9c94a3": "58929f", "fbf2ff": "d4fefe", "cbc2d1": "a9e4e3", - "101010": "101010", "af9e9e": "44a0af", "756868": "097f8d" }, @@ -21,7 +20,6 @@ "9c94a3": "4b1f28", "fbf2ff": "874059", "cbc2d1": "773050", - "101010": "101010", "af9e9e": "b0919b", "756868": "8d6573" } diff --git a/public/images/pokemon/variant/back/423-east.json b/public/images/pokemon/variant/back/423-east.json index 07e5cde7799..57268c0a922 100644 --- a/public/images/pokemon/variant/back/423-east.json +++ b/public/images/pokemon/variant/back/423-east.json @@ -3,7 +3,6 @@ "3a4231": "224052", "426b31": "527084", "5a944a": "679ab2", - "101010": "101010", "a58c3a": "a58e3b", "ffde73": "fedf73", "7bbd52": "80e2bf", @@ -16,7 +15,6 @@ "3a4231": "293852", "426b31": "314173", "5a944a": "485f9c", - "101010": "101010", "a58c3a": "649bb2", "ffde73": "82e1c0", "7bbd52": "5271bd", @@ -29,7 +27,6 @@ "3a4231": "451e4c", "426b31": "6d427b", "5a944a": "955dbe", - "101010": "101010", "a58c3a": "e5693d", "ffde73": "ffc975", "7bbd52": "ad75e8", diff --git a/public/images/pokemon/variant/back/423-west.json b/public/images/pokemon/variant/back/423-west.json index 9720880f96d..096917202d3 100644 --- a/public/images/pokemon/variant/back/423-west.json +++ b/public/images/pokemon/variant/back/423-west.json @@ -1,20 +1,17 @@ { "0": { "4a3a3a": "101010", - "101010": "101010", "c5944a": "ff9269", "a56b3a": "c66264", "ffde73": "ffd275", "6b4a3a": "8b3553", "a58c3a": "ca8b46", "ad6394": "c66264", - "6b3a52": "6b3a52", "524a3a": "645346", "ff8cc5": "ff9269" }, "1": { "4a3a3a": "573d64", - "101010": "101010", "c5944a": "c1a5ff", "a56b3a": "aa8be8", "ffde73": "ffb8c5", @@ -27,7 +24,6 @@ }, "2": { "4a3a3a": "281e4c", - "101010": "101010", "c5944a": "7588e8", "a56b3a": "5d64be", "ffde73": "ffc975", diff --git a/public/images/pokemon/variant/back/424.json b/public/images/pokemon/variant/back/424.json index c0e9356a7a4..6a111ce9829 100644 --- a/public/images/pokemon/variant/back/424.json +++ b/public/images/pokemon/variant/back/424.json @@ -3,7 +3,6 @@ "734a42": "415c73", "ad5242": "428dad", "ff735a": "5ae9ff", - "101010": "101010", "8c6b42": "8c7457", "debd73": "c4b487", "ffefa5": "ffeccc", @@ -16,7 +15,6 @@ "734a42": "593802", "ad5242": "946212", "ff735a": "ffb338", - "101010": "101010", "8c6b42": "632339", "debd73": "99455d", "ffefa5": "ed8286", diff --git a/public/images/pokemon/variant/back/425.json b/public/images/pokemon/variant/back/425.json index 16f0160cd1d..4f24d386f9a 100644 --- a/public/images/pokemon/variant/back/425.json +++ b/public/images/pokemon/variant/back/425.json @@ -6,7 +6,6 @@ "946be6": "64acb1", "7b42a5": "497b91", "4a316b": "223142", - "101010": "101010", "633184": "39677a", "c5b5ff": "83d5c0", "8c6b21": "7c6839", @@ -20,7 +19,6 @@ "946be6": "c0c7ab", "7b42a5": "93a383", "4a316b": "3f4a3d", - "101010": "101010", "633184": "697c63", "c5b5ff": "cde5ca", "8c6b21": "3c171e", diff --git a/public/images/pokemon/variant/back/426.json b/public/images/pokemon/variant/back/426.json index 2614d684621..f6dbda4c0a4 100644 --- a/public/images/pokemon/variant/back/426.json +++ b/public/images/pokemon/variant/back/426.json @@ -3,7 +3,6 @@ "c5c5e6": "7ca786", "5a5a63": "536661", "ffffff": "b0d1b8", - "101010": "101010", "8452ad": "20787c", "5a427b": "1d524d", "9c73de": "64acb1", @@ -20,7 +19,6 @@ "c5c5e6": "7ca786", "5a5a63": "536661", "ffffff": "b0d1b8", - "101010": "101010", "8452ad": "9fa994", "5a427b": "686458", "9c73de": "d1d1b8", diff --git a/public/images/pokemon/variant/back/4263.json b/public/images/pokemon/variant/back/4263.json index c9d11566864..8b9cea44bbf 100644 --- a/public/images/pokemon/variant/back/4263.json +++ b/public/images/pokemon/variant/back/4263.json @@ -1,28 +1,20 @@ { "1": { "5b5958": "397e4a", - "010101": "010101", "b2b3b2": "a3ce9e", "f5f5f6": "f5ffea", "3e4042": "01473a", "60656a": "1c8155", - "1b2627": "002121", - "d94a7f": "d94a7f", - "fcfcfc": "fcfcfc", - "ee96b2": "ee96b2", - "6e3b51": "6e3b51", - "9b4f69": "9b4f69" + "1b2627": "002121" }, "2": { "5b5958": "100d2d", - "010101": "010101", "b2b3b2": "201b47", "f5f5f6": "3c335d", "3e4042": "412991", "60656a": "8e5aef", "1b2627": "201b47", "d94a7f": "0099ce", - "fcfcfc": "fcfcfc", "ee96b2": "54f1ff", "6e3b51": "004a8b", "9b4f69": "0099ce" diff --git a/public/images/pokemon/variant/back/4264.json b/public/images/pokemon/variant/back/4264.json index ed5b3343df0..c266ecb7aa4 100644 --- a/public/images/pokemon/variant/back/4264.json +++ b/public/images/pokemon/variant/back/4264.json @@ -1,10 +1,8 @@ { "1": { - "010101": "010101", "abadaf": "95c090", "797570": "579666", "414141": "1c8155", - "1c1917": "1c1917", "f5f5f6": "f5ffea", "bc3065": "d414dd", "322c29": "01473a", @@ -13,11 +11,9 @@ "949496": "3d494e" }, "2": { - "010101": "010101", "abadaf": "1e1a3b", "797570": "302373", "414141": "7c4cd6", - "1c1917": "1c1917", "f5f5f6": "342d4c", "bc3065": "0099ce", "322c29": "412991", diff --git a/public/images/pokemon/variant/back/427.json b/public/images/pokemon/variant/back/427.json index 068998d5196..5ea989326d9 100644 --- a/public/images/pokemon/variant/back/427.json +++ b/public/images/pokemon/variant/back/427.json @@ -6,7 +6,6 @@ "523a3a": "994c3d", "8c5a42": "cc8866", "b57b4a": "ffcc99", - "101010": "101010", "3a313a": "130019", "c55a7b": "cecee5" }, @@ -17,8 +16,6 @@ "523a3a": "355699", "8c5a42": "5b93cc", "b57b4a": "8cd8ff", - "101010": "101010", - "3a313a": "3a313a", "c55a7b": "cc84b4" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/428-mega.json b/public/images/pokemon/variant/back/428-mega.json index e5221fcb22b..8ff3489fc64 100644 --- a/public/images/pokemon/variant/back/428-mega.json +++ b/public/images/pokemon/variant/back/428-mega.json @@ -9,7 +9,6 @@ "624a41": "660a38", "c55a7b": "7f4c99", "7b3941": "472866", - "101010": "101010", "232323": "0d0b16", "414141": "161626" }, @@ -23,7 +22,6 @@ "624a41": "65597f", "c55a7b": "cc4328", "7b3941": "990c00", - "101010": "101010", "232323": "191933", "414141": "312c49" } diff --git a/public/images/pokemon/variant/back/428.json b/public/images/pokemon/variant/back/428.json index b8176251f02..e5efa645c0c 100644 --- a/public/images/pokemon/variant/back/428.json +++ b/public/images/pokemon/variant/back/428.json @@ -1,7 +1,6 @@ { "1": { "523a3a": "991e47", - "101010": "101010", "b57b4a": "ffcc99", "8c5a42": "cc8866", "c5a57b": "cc3d55", @@ -11,7 +10,6 @@ }, "2": { "523a3a": "355699", - "101010": "101010", "b57b4a": "8cd8ff", "8c5a42": "5b93cc", "c5a57b": "cecee5", diff --git a/public/images/pokemon/variant/back/429.json b/public/images/pokemon/variant/back/429.json index 77530e81c00..32b54694f92 100644 --- a/public/images/pokemon/variant/back/429.json +++ b/public/images/pokemon/variant/back/429.json @@ -1,6 +1,5 @@ { "0": { - "101010": "101010", "b563b5": "ffdd67", "5a4263": "9b490e", "845284": "d3941a", @@ -8,11 +7,9 @@ "6b4a94": "387fa7", "31213a": "112048", "ef3a10": "cc762f", - "943a5a": "71370f", - "ffffff": "ffffff" + "943a5a": "71370f" }, "1": { - "101010": "101010", "b563b5": "3df7ed", "5a4263": "0c8086", "845284": "1dbdb9", @@ -20,11 +17,9 @@ "6b4a94": "a1c8db", "31213a": "244358", "ef3a10": "e28c27", - "943a5a": "7b3c08", - "ffffff": "ffffff" + "943a5a": "7b3c08" }, "2": { - "101010": "101010", "b563b5": "fff7dd", "5a4263": "5d4a2f", "845284": "eece8c", @@ -32,7 +27,6 @@ "6b4a94": "e6aa47", "31213a": "603305", "ef3a10": "c33126", - "943a5a": "7a1511", - "ffffff": "ffffff" + "943a5a": "7a1511" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/43.json b/public/images/pokemon/variant/back/43.json index e94b27ad756..407e9490c53 100644 --- a/public/images/pokemon/variant/back/43.json +++ b/public/images/pokemon/variant/back/43.json @@ -4,7 +4,6 @@ "c5e67b": "90a1d7", "4a5a21": "2a2274", "9cd64a": "606dbb", - "101010": "101010", "293a4a": "522c90", "5a6b84": "7946a9", "7394a5": "a564c7" @@ -14,7 +13,6 @@ "c5e67b": "e8b737", "4a5a21": "6a2509", "9cd64a": "b88026", - "101010": "101010", "293a4a": "560a25", "5a6b84": "79152a", "7394a5": "b3292e" diff --git a/public/images/pokemon/variant/back/433.json b/public/images/pokemon/variant/back/433.json index 59f6d4e7b0f..81bc89ed7b7 100644 --- a/public/images/pokemon/variant/back/433.json +++ b/public/images/pokemon/variant/back/433.json @@ -1,7 +1,6 @@ { "0": { "6b3a31": "631d61", - "000000": "000000", "d6d6f7": "f7e6e5", "e66352": "f37cdf", "ad5231": "a6459c", @@ -13,7 +12,6 @@ }, "1": { "6b3a31": "14404e", - "000000": "000000", "d6d6f7": "ebd4b0", "e66352": "4a94ad", "ad5231": "2f6e8c", @@ -25,7 +23,6 @@ }, "2": { "6b3a31": "102837", - "000000": "000000", "d6d6f7": "f7e6e5", "e66352": "4d8891", "ad5231": "3a656c", diff --git a/public/images/pokemon/variant/back/436.json b/public/images/pokemon/variant/back/436.json index 372a91449aa..5f678d2e976 100644 --- a/public/images/pokemon/variant/back/436.json +++ b/public/images/pokemon/variant/back/436.json @@ -1,7 +1,6 @@ { "1": { "103a4a": "3e3b45", - "101010": "101010", "2984a5": "9192a6", "195a7b": "737185", "63c5e6": "dfe1f4", @@ -9,7 +8,6 @@ }, "2": { "103a4a": "400f06", - "101010": "101010", "2984a5": "9d4e16", "195a7b": "7e2b15", "63c5e6": "e98851", diff --git a/public/images/pokemon/variant/back/437.json b/public/images/pokemon/variant/back/437.json index cccd9954d5d..7ea8842e638 100644 --- a/public/images/pokemon/variant/back/437.json +++ b/public/images/pokemon/variant/back/437.json @@ -4,7 +4,6 @@ "3194b5": "dedede", "214a5a": "6a6994", "42adce": "eeeaff", - "101010": "101010", "bdd6de": "bd9173", "73d6ef": "ffffff", "a5c5ce": "a27661", @@ -16,7 +15,6 @@ "3194b5": "d58151", "214a5a": "783827", "42adce": "f4a97f", - "101010": "101010", "bdd6de": "e0da82", "73d6ef": "edc590", "a5c5ce": "ccbd73", diff --git a/public/images/pokemon/variant/back/438.json b/public/images/pokemon/variant/back/438.json index 78a49203dd6..5e45ca123da 100644 --- a/public/images/pokemon/variant/back/438.json +++ b/public/images/pokemon/variant/back/438.json @@ -3,7 +3,6 @@ "315a19": "3d1e0c", "9cde7b": "b6a747", "4ac542": "8a6a24", - "000000": "000000", "5a8c5a": "6c4616", "846b42": "4c443b", "524231": "322a22", @@ -13,7 +12,6 @@ "315a19": "846764", "9cde7b": "fffdee", "4ac542": "e8e6d7", - "000000": "000000", "5a8c5a": "b9ac9d", "846b42": "3c389d", "524231": "2d2164", diff --git a/public/images/pokemon/variant/back/44.json b/public/images/pokemon/variant/back/44.json index 0f4b93f23d8..e370655c694 100644 --- a/public/images/pokemon/variant/back/44.json +++ b/public/images/pokemon/variant/back/44.json @@ -3,7 +3,6 @@ "c57329": "0f7469", "8c3a19": "043d44", "5a2900": "162486", - "101010": "101010", "ce734a": "7aa8d2", "ffbd42": "55bb7e", "f7efbd": "7dcf94", @@ -18,7 +17,6 @@ "c57329": "9f631f", "8c3a19": "773811", "5a2900": "680b10", - "101010": "101010", "ce734a": "d98247", "ffbd42": "e8d65e", "f7efbd": "ede68f", diff --git a/public/images/pokemon/variant/back/440.json b/public/images/pokemon/variant/back/440.json index f89500aa28f..cb9162a831a 100644 --- a/public/images/pokemon/variant/back/440.json +++ b/public/images/pokemon/variant/back/440.json @@ -1,18 +1,15 @@ { "0": { "a55a7b": "925382", - "101010": "101010", "ffc5d6": "f6cae1", "c58ca5": "c57cad", "73425a": "6c1f9e", - "ffffff": "ffffff", "a5527b": "953fc7", "de6b9c": "c164e4", "cebdc5": "d6bdde" }, "1": { "a55a7b": "81256f", - "101010": "101010", "ffc5d6": "ebbada", "c58ca5": "bd61a4", "73425a": "61020c", @@ -23,7 +20,6 @@ }, "2": { "a55a7b": "6a3981", - "101010": "101010", "ffc5d6": "e2bfef", "c58ca5": "b377c6", "73425a": "132f5d", diff --git a/public/images/pokemon/variant/back/441.json b/public/images/pokemon/variant/back/441.json index ab17493bee6..5860511c18a 100644 --- a/public/images/pokemon/variant/back/441.json +++ b/public/images/pokemon/variant/back/441.json @@ -2,7 +2,6 @@ "1": { "292931": "331d29", "5a5a63": "8f5a70", - "000000": "000000", "42424a": "573244", "c5c5c5": "deacce", "ffffff": "ffeef7", diff --git a/public/images/pokemon/variant/back/442.json b/public/images/pokemon/variant/back/442.json index d2fbb6f372c..7ca9d701108 100644 --- a/public/images/pokemon/variant/back/442.json +++ b/public/images/pokemon/variant/back/442.json @@ -6,10 +6,6 @@ "bdd642": "d69042", "ffde10": "db8241", "524252": "42426b", - "101010": "101010", - "b59c94": "b59c94", - "9c846b": "9c846b", - "846b63": "846b63", "734a7b": "8b8b8b" }, "2": { @@ -18,11 +14,8 @@ "63b542": "71cfd7", "bdd642": "a28ded", "ffde10": "a61145", - "524252": "524252", - "101010": "101010", "b59c94": "59001f", "9c846b": "484848", - "846b63": "282828", - "734a7b": "734a7b" + "846b63": "282828" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/443.json b/public/images/pokemon/variant/back/443.json index 4a65daecb4b..c2154751658 100644 --- a/public/images/pokemon/variant/back/443.json +++ b/public/images/pokemon/variant/back/443.json @@ -5,11 +5,6 @@ "314252": "082963", "8cc5d6": "42a5f7", "5294ad": "1984c5", - "42d6de": "42d6de", - "3aadc5": "3aadc5", - "ffffff": "ffffff", - "c5ced6": "c5ced6", - "5a6363": "5a6363", "ad3a10": "a57c10", "de5a29": "e6c529", "7b1910": "731029" @@ -22,9 +17,6 @@ "5294ad": "905647", "42d6de": "54b0ff", "3aadc5": "2878e1", - "ffffff": "ffffff", - "c5ced6": "c5ced6", - "5a6363": "5a6363", "ad3a10": "92a9b2", "de5a29": "d9f0f1", "7b1910": "731029" @@ -37,9 +29,6 @@ "5294ad": "4c5e66", "42d6de": "6fe6a3", "3aadc5": "23b8a8", - "ffffff": "ffffff", - "c5ced6": "c5ced6", - "5a6363": "5a6363", "ad3a10": "92a9b2", "de5a29": "d9f0f1", "7b1910": "3e3a52" diff --git a/public/images/pokemon/variant/back/444.json b/public/images/pokemon/variant/back/444.json index 287f0c4050c..d502b2387a6 100644 --- a/public/images/pokemon/variant/back/444.json +++ b/public/images/pokemon/variant/back/444.json @@ -11,10 +11,7 @@ "5a1000": "502209", "ffff19": "fa845a", "ad314a": "ad7b08", - "c5ced6": "c5ced6", - "de5a29": "f7b834", - "ffffff": "ffffff", - "737b84": "737b84" + "de5a29": "f7b834" }, "1": { "3a4a8c": "6f3633", @@ -28,10 +25,7 @@ "5a1000": "211e33", "ffff19": "ffd177", "ad314a": "829ca6", - "c5ced6": "c5ced6", - "de5a29": "c2dedf", - "ffffff": "ffffff", - "737b84": "737b84" + "de5a29": "c2dedf" }, "2": { "3a4a8c": "223a4a", @@ -45,9 +39,6 @@ "5a1000": "521000", "ffff19": "62cbff", "ad314a": "be472f", - "c5ced6": "c5ced6", - "de5a29": "ee723e", - "ffffff": "ffffff", - "737b84": "737b84" + "de5a29": "ee723e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/445-mega.json b/public/images/pokemon/variant/back/445-mega.json index 68c374cc43f..511c3760720 100644 --- a/public/images/pokemon/variant/back/445-mega.json +++ b/public/images/pokemon/variant/back/445-mega.json @@ -4,13 +4,9 @@ "6060c0": "236696", "404080": "19446e", "8080c0": "65a2d5", - "000000": "000000", "c0a000": "3aadc5", "e0e000": "42d6de", "c04040": "9e5201", - "ffffff": "ffffff", - "808080": "808080", - "c0c0c0": "c0c0c0", "e04040": "f7ac34", "602000": "502209" }, @@ -19,13 +15,9 @@ "6060c0": "deae7a", "404080": "b67252", "8080c0": "f2d8aa", - "000000": "000000", "c0a000": "255dd7", "e0e000": "4caaff", "c04040": "9fb6bf", - "ffffff": "ffffff", - "808080": "808080", - "c0c0c0": "c0c0c0", "e04040": "dce8e8", "602000": "393648" }, @@ -34,13 +26,9 @@ "6060c0": "2f434b", "404080": "152c3b", "8080c0": "689099", - "000000": "000000", "c0a000": "23b8a8", "e0e000": "6fe6a3", "c04040": "b23219", - "ffffff": "ffffff", - "808080": "808080", - "c0c0c0": "c0c0c0", "e04040": "ec642c", "602000": "521000" } diff --git a/public/images/pokemon/variant/back/445.json b/public/images/pokemon/variant/back/445.json index 7bf76d03212..a151b1a7da5 100644 --- a/public/images/pokemon/variant/back/445.json +++ b/public/images/pokemon/variant/back/445.json @@ -4,12 +4,8 @@ "5a63ad": "226596", "42428c": "264074", "7b7bce": "65a2d5", - "101010": "101010", "c59410": "3aadc5", "ffd619": "42d6de", - "ffffff": "ffffff", - "737b84": "737b84", - "c5ced6": "c5ced6", "bd3a42": "b2630f", "5a1000": "502209", "e64a31": "f7ac34" @@ -19,12 +15,8 @@ "5a63ad": "deae7a", "42428c": "af6e55", "7b7bce": "f2d8aa", - "101010": "101010", "c59410": "255dd7", "ffd619": "4caaff", - "ffffff": "ffffff", - "737b84": "737b84", - "c5ced6": "c5ced6", "bd3a42": "9fb6bf", "5a1000": "393648", "e64a31": "c8c8c8" @@ -34,12 +26,8 @@ "5a63ad": "2f434b", "42428c": "152c3b", "7b7bce": "689099", - "101010": "101010", "c59410": "23b8a8", "ffd619": "6fe6a3", - "ffffff": "ffffff", - "737b84": "737b84", - "c5ced6": "c5ced6", "bd3a42": "be472f", "5a1000": "521000", "e64a31": "c8c8c8" diff --git a/public/images/pokemon/variant/back/447.json b/public/images/pokemon/variant/back/447.json index e5bb7f6e3ae..85f1a8f0edd 100644 --- a/public/images/pokemon/variant/back/447.json +++ b/public/images/pokemon/variant/back/447.json @@ -1,18 +1,14 @@ { "0": { - "101010": "101010", "104a7b": "6c3e20", "4a9cef": "e2ce75", "29739c": "a56d2f", "3a3a3a": "12334a", "5a5a5a": "2c486e", - "848484": "848484", "8c843a": "b6957f", - "dec573": "e6d5b9", - "b5b5b5": "b5b5b5" + "dec573": "e6d5b9" }, "1": { - "101010": "101010", "104a7b": "590e1f", "4a9cef": "b85251", "29739c": "7f1e2f", @@ -24,15 +20,12 @@ "b5b5b5": "f3aa58" }, "2": { - "101010": "101010", "104a7b": "3a2254", "4a9cef": "735c9e", "29739c": "513674", "3a3a3a": "26153f", "5a5a5a": "30224c", - "848484": "848484", "8c843a": "373566", - "dec573": "51668e", - "b5b5b5": "b5b5b5" + "dec573": "51668e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/448-mega.json b/public/images/pokemon/variant/back/448-mega.json index 686bb7c0d77..28bb8eb4363 100644 --- a/public/images/pokemon/variant/back/448-mega.json +++ b/public/images/pokemon/variant/back/448-mega.json @@ -3,23 +3,18 @@ "173968": "6c3e20", "407cdc": "e2ce75", "2e5c85": "a56d2f", - "101010": "101010", "393939": "2c2f4c", "5a5a5a": "3a5376", "d5d5d5": "dbcbcb", - "fcfcfc": "fcfcfc", "9a2626": "8a332f", "de4141": "d85e40", "e6d083": "719cbe", - "838383": "838383", - "b09a4d": "51689c", - "ac6262": "ac6262" + "b09a4d": "51689c" }, "1": { "173968": "202931", "407cdc": "b85251", "2e5c85": "7f1e2f", - "101010": "101010", "393939": "202931", "5a5a5a": "444b4b", "d5d5d5": "bb711c", @@ -27,23 +22,17 @@ "9a2626": "a79687", "de4141": "f7eadc", "e6d083": "dec2a3", - "838383": "838383", - "b09a4d": "a26f59", - "ac6262": "ac6262" + "b09a4d": "a26f59" }, "2": { "173968": "2e1547", "407cdc": "735c9e", "2e5c85": "513674", - "101010": "101010", "393939": "291838", "5a5a5a": "352a4b", - "d5d5d5": "d5d5d5", - "fcfcfc": "fcfcfc", "9a2626": "b8461f", "de4141": "de8141", "e6d083": "51668e", - "838383": "838383", "b09a4d": "373566", "ac6262": "9b2e11" } diff --git a/public/images/pokemon/variant/back/448.json b/public/images/pokemon/variant/back/448.json index 5fe86ccde17..17780e4e225 100644 --- a/public/images/pokemon/variant/back/448.json +++ b/public/images/pokemon/variant/back/448.json @@ -3,14 +3,9 @@ "104a7b": "6c3e20", "4a9cef": "e2ce75", "29739c": "a56d2f", - "101010": "101010", "3a3a3a": "0a2734", "5a5a5a": "223754", "d6d6d6": "ddcccc", - "ffffff": "ffffff", - "a53131": "a53131", - "de4242": "de4242", - "848484": "848484", "b5b563": "b6957f", "e6e69c": "e6d5b9", "ad6363": "82b0c4" @@ -19,29 +14,21 @@ "104a7b": "410814", "4a9cef": "b85251", "29739c": "7f1e2f", - "101010": "101010", "3a3a3a": "262032", "5a5a5a": "3b3d4a", "d6d6d6": "eb9645", "ffffff": "fcc161", "a53131": "d3acb2", "de4242": "ebdcdb", - "848484": "848484", "b5b563": "ab8977", - "e6e69c": "dfd0c0", - "ad6363": "ad6363" + "e6e69c": "dfd0c0" }, "2": { "104a7b": "3f2457", "4a9cef": "735c9e", "29739c": "513674", - "101010": "101010", "3a3a3a": "2c2339", "5a5a5a": "3d3052", - "d6d6d6": "d6d6d6", - "ffffff": "ffffff", - "a53131": "a53131", - "de4242": "de4242", "848484": "453a5a", "b5b563": "47439c", "e6e69c": "6c8bc7", diff --git a/public/images/pokemon/variant/back/45.json b/public/images/pokemon/variant/back/45.json index ea6e7dea875..df028577a42 100644 --- a/public/images/pokemon/variant/back/45.json +++ b/public/images/pokemon/variant/back/45.json @@ -7,7 +7,6 @@ "f77373": "5e8fde", "de4a5a": "436ac7", "944a00": "472b86", - "101010": "101010", "ff8429": "966fbb", "ce6319": "724ba4", "19294a": "201349", @@ -24,7 +23,6 @@ "f77373": "d2cbb2", "de4a5a": "cdb2a2", "944a00": "621734", - "101010": "101010", "ff8429": "a23d44", "ce6319": "8b293e", "19294a": "510c35", diff --git a/public/images/pokemon/variant/back/453.json b/public/images/pokemon/variant/back/453.json index 436da3d191f..18211242b55 100644 --- a/public/images/pokemon/variant/back/453.json +++ b/public/images/pokemon/variant/back/453.json @@ -18,7 +18,6 @@ "4a4a8c": "d88f77", "6b73d6": "f0ce8b", "849cff": "fff2c9", - "101010": "101010", "9c3a3a": "16729b", "e6525a": "40adbb", "ff9ca5": "a9ebeb", diff --git a/public/images/pokemon/variant/back/454.json b/public/images/pokemon/variant/back/454.json index 0f96173cbfd..2082cec8ff1 100644 --- a/public/images/pokemon/variant/back/454.json +++ b/public/images/pokemon/variant/back/454.json @@ -15,7 +15,6 @@ }, "2": { "3a3a52": "b15248", - "101010": "101010", "6b73d6": "f0ce8b", "4a4a8c": "d88f77", "849cff": "fff2c9", diff --git a/public/images/pokemon/variant/back/456.json b/public/images/pokemon/variant/back/456.json index e10373acbf4..3a970d1ed94 100644 --- a/public/images/pokemon/variant/back/456.json +++ b/public/images/pokemon/variant/back/456.json @@ -2,7 +2,6 @@ "1": { "31425a": "824568", "526b8c": "966764", - "101010": "101010", "426b84": "aa6985", "94d6e6": "f3e1c6", "29293a": "4f2846", @@ -11,14 +10,11 @@ "c54591": "f19e53", "833171": "d3633a", "c54a94": "8bbcd9", - "efffff": "efffff", - "73427b": "6d90c2", - "15202e": "15202e" + "73427b": "6d90c2" }, "2": { "31425a": "eeb547", "526b8c": "181e52", - "101010": "101010", "426b84": "fff8b0", "94d6e6": "34507e", "29293a": "d36a2b", @@ -27,8 +23,6 @@ "c54591": "50a8c2", "833171": "366ea4", "c54a94": "7b1615", - "efffff": "efffff", - "73427b": "5e0e0e", - "15202e": "15202e" + "73427b": "5e0e0e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/4562.json b/public/images/pokemon/variant/back/4562.json index 9e8c1bee22e..5dd509b1345 100644 --- a/public/images/pokemon/variant/back/4562.json +++ b/public/images/pokemon/variant/back/4562.json @@ -2,10 +2,8 @@ "1": { "313131": "145555", "525252": "257e6a", - "101010": "101010", "672b82": "7e173e", "ab38d1": "b0264c", - "371d3f": "371d3f", "6f5c6b": "743949", "e6ddde": "d6b8a0", "927e8d": "a46361", @@ -14,10 +12,8 @@ "2": { "313131": "69162c", "525252": "90222b", - "101010": "101010", "672b82": "57a0b9", "ab38d1": "c2ffe2", - "371d3f": "371d3f", "6f5c6b": "0a4340", "e6ddde": "4fb66a", "927e8d": "1f6455", diff --git a/public/images/pokemon/variant/back/457.json b/public/images/pokemon/variant/back/457.json index d6a2fad6569..845bfa899e7 100644 --- a/public/images/pokemon/variant/back/457.json +++ b/public/images/pokemon/variant/back/457.json @@ -1,7 +1,6 @@ { "2": { "526b8c": "0f154a", - "101010": "101010", "c5e6f7": "5781c7", "94d6e6": "34507e", "7394ad": "1c335b", @@ -10,7 +9,6 @@ "303449": "b95735", "c54591": "ffc369", "9e357b": "c7703c", - "efffff": "efffff", "c54a94": "983121", "73427b": "7b1213", "26344c": "121c2f" diff --git a/public/images/pokemon/variant/back/46.json b/public/images/pokemon/variant/back/46.json index 1062e915d76..0817d312551 100644 --- a/public/images/pokemon/variant/back/46.json +++ b/public/images/pokemon/variant/back/46.json @@ -8,7 +8,6 @@ "c5b521": "d9c9b9", "3a2910": "3a2108", "734a19": "521e0a", - "101010": "101010", "ffad63": "cf6423", "e68429": "bc4b23" }, @@ -21,7 +20,6 @@ "c5b521": "e5d59c", "3a2910": "3a2108", "734a19": "5a392d", - "101010": "101010", "ffad63": "f3d8cb", "e68429": "d1afa3" }, @@ -34,7 +32,6 @@ "c5b521": "e5d59c", "3a2910": "1e152d", "734a19": "3d2b4e", - "101010": "101010", "ffad63": "bf9edd", "e68429": "9779a6" } diff --git a/public/images/pokemon/variant/back/461.json b/public/images/pokemon/variant/back/461.json index c0cd7405527..01c7eca5892 100644 --- a/public/images/pokemon/variant/back/461.json +++ b/public/images/pokemon/variant/back/461.json @@ -3,7 +3,6 @@ "c52973": "3a3d60", "842152": "191a24", "f75273": "636896", - "101010": "101010", "293152": "530b34", "6b6bad": "8b274b", "424a84": "691043", @@ -18,12 +17,10 @@ "c52973": "3d81c5", "842152": "102f6c", "f75273": "5cb0eb", - "101010": "101010", "293152": "96543f", "6b6bad": "ffd3a7", "424a84": "ecaa84", "c58c08": "8f1a8d", - "ffffff": "ffffff", "ffd642": "e6509f", "6b637b": "718198", "c5bdce": "b3cedb", diff --git a/public/images/pokemon/variant/back/462.json b/public/images/pokemon/variant/back/462.json index 39a7d3460b2..a4af8152167 100644 --- a/public/images/pokemon/variant/back/462.json +++ b/public/images/pokemon/variant/back/462.json @@ -3,8 +3,6 @@ "ad8419": "8fb9cc", "f7ce52": "cee7f2", "635a6b": "90495b", - "ffffff": "ffffff", - "101010": "101010", "424252": "612e40", "7b7b84": "90495b", "adadb5": "c36c77", @@ -17,7 +15,6 @@ "f7ce52": "a7dcaa", "635a6b": "662e00", "ffffff": "fffb93", - "101010": "101010", "424252": "401d00", "7b7b84": "662e00", "adadb5": "8c500b", diff --git a/public/images/pokemon/variant/back/464.json b/public/images/pokemon/variant/back/464.json index b9269dc7279..8232d6da3eb 100644 --- a/public/images/pokemon/variant/back/464.json +++ b/public/images/pokemon/variant/back/464.json @@ -5,15 +5,9 @@ "ef5200": "6f4d9f", "29293a": "1f1028", "3a3a4a": "3b2d40", - "101010": "101010", "7b6b7b": "6e5d7b", - "6b6373": "6b6373", - "cecede": "cecede", - "efefff": "efefff", "5a4a63": "514259", - "948cad": "948cad", - "943a00": "4c2f6e", - "ad2900": "ad2900" + "943a00": "4c2f6e" }, "2": { "523100": "492133", @@ -21,7 +15,6 @@ "ef5200": "6d3950", "29293a": "442339", "3a3a4a": "701f38", - "101010": "101010", "7b6b7b": "c6405b", "6b6373": "b66360", "cecede": "e8a797", diff --git a/public/images/pokemon/variant/back/465.json b/public/images/pokemon/variant/back/465.json index cc868023c2b..26f1d75d388 100644 --- a/public/images/pokemon/variant/back/465.json +++ b/public/images/pokemon/variant/back/465.json @@ -3,10 +3,8 @@ "193a63": "391963", "295a84": "472984", "3a73ad": "6b3aad", - "000000": "000000", "5a193a": "195a2a", "bd216b": "21bd69", - "31313a": "31313a", "d65a94": "5ad662" }, "2": { @@ -18,4 +16,4 @@ "bd216b": "b35131", "193a63": "705040" } -} +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/466.json b/public/images/pokemon/variant/back/466.json index 35c65a58eea..362c4043b08 100644 --- a/public/images/pokemon/variant/back/466.json +++ b/public/images/pokemon/variant/back/466.json @@ -5,7 +5,6 @@ "5a4a42": "465b69", "312929": "333931", "ffef94": "baffde", - "000000": "000000", "c5ad42": "4abaae", "731900": "73376d", "b53a19": "a45ead", @@ -18,11 +17,9 @@ "5a4a42": "285ffb", "312929": "2334c1", "ffef94": "f5f5f5", - "000000": "000000", "c5ad42": "b8bfd6", "731900": "e68419", "b53a19": "f1c168", - "f7523a": "e8ff80", - "b5b5c5": "b5b5c5" + "f7523a": "e8ff80" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/467.json b/public/images/pokemon/variant/back/467.json index 8371e4c36a2..121e1266a39 100644 --- a/public/images/pokemon/variant/back/467.json +++ b/public/images/pokemon/variant/back/467.json @@ -8,18 +8,15 @@ "e64231": "db4d19", "d63131": "ba4014", "953f47": "8c3313", - "101010": "101010", "612922": "8c3313", "ff94a5": "fb832b", "c55a6b": "db4d19", - "4a4a42": "4a4a42", "ca2b2b": "372d49", "a1354b": "272034", "cea53a": "db4d19", "ffc53a": "fb832b", "bc5969": "474139", "ff9dad": "777066", - "ced6e6": "ced6e6", "662f20": "8c3313", "e2937a": "fb832b", "b14849": "db4d19", @@ -34,18 +31,15 @@ "e64231": "478bc0", "d63131": "4065b0", "953f47": "4065b0", - "101010": "101010", "612922": "699296", "ff94a5": "eaffff", "c55a6b": "c6edf2", - "4a4a42": "4a4a42", "ca2b2b": "4065b0", "a1354b": "31508c", "cea53a": "c6edf2", "ffc53a": "eaffff", "bc5969": "7f90a9", "ff9dad": "abc7de", - "ced6e6": "ced6e6", "662f20": "2a2523", "e2937a": "eaffff", "b14849": "4065b0", diff --git a/public/images/pokemon/variant/back/468.json b/public/images/pokemon/variant/back/468.json index 1c0c54973d1..72ada607d8c 100644 --- a/public/images/pokemon/variant/back/468.json +++ b/public/images/pokemon/variant/back/468.json @@ -5,7 +5,6 @@ "ce4a31": "409e80", "4a5a73": "593237", "efefff": "eee0db", - "101010": "101010", "bdc5de": "ceacac", "4284ef": "d05887", "bd8484": "8ee4be", @@ -18,7 +17,6 @@ "ce4a31": "c48330", "4a5a73": "452030", "efefff": "f3cbcb", - "101010": "101010", "bdc5de": "c2888c", "4284ef": "f19a4e", "bd8484": "f5b55e", @@ -31,7 +29,6 @@ "ce4a31": "d97741", "4a5a73": "254985", "efefff": "b3ddeb", - "101010": "101010", "bdc5de": "81aaca", "4284ef": "db79db", "bd8484": "f39a4c", diff --git a/public/images/pokemon/variant/back/47.json b/public/images/pokemon/variant/back/47.json index 141a046e34e..a21356d48cc 100644 --- a/public/images/pokemon/variant/back/47.json +++ b/public/images/pokemon/variant/back/47.json @@ -9,7 +9,6 @@ "de6b31": "bc4b23", "631000": "521e0a", "ff8452": "e0843d", - "101010": "101010", "b5423a": "85251b" }, "1": { @@ -22,7 +21,6 @@ "de6b31": "d1afa3", "631000": "5a392d", "ff8452": "f3d8cb", - "101010": "101010", "b5423a": "98655f" }, "2": { @@ -35,7 +33,6 @@ "de6b31": "9779a6", "631000": "3d2b4e", "ff8452": "bf9edd", - "101010": "101010", "b5423a": "6a507b" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/470.json b/public/images/pokemon/variant/back/470.json index 22912bc961c..3b6f1154e13 100644 --- a/public/images/pokemon/variant/back/470.json +++ b/public/images/pokemon/variant/back/470.json @@ -2,7 +2,6 @@ "2": { "31635a": "9f5d29", "6bbd8c": "edd898", - "101010": "101010", "319c73": "d8a452", "efd69c": "b39671", "d6b573": "816242", diff --git a/public/images/pokemon/variant/back/471.json b/public/images/pokemon/variant/back/471.json index b5332dd5597..f8de14b6bc3 100644 --- a/public/images/pokemon/variant/back/471.json +++ b/public/images/pokemon/variant/back/471.json @@ -1,19 +1,14 @@ { "0": { - "101010": "101010", "94e6ef": "f8f7ff", "94b5ce": "e6e3f3", "7b9cb5": "dad9ea", "525a84": "636b94", - "3a3a52": "3a3a52", - "313a4a": "313a4a", "529cde": "a0e7f7", "425a6b": "3597ac", - "52639c": "54bbd2", - "efffff": "efffff" + "52639c": "54bbd2" }, "1": { - "101010": "101010", "94e6ef": "c0aebd", "94b5ce": "a1899e", "7b9cb5": "865d86", @@ -22,11 +17,9 @@ "313a4a": "53205d", "529cde": "c6b9ff", "425a6b": "835ad1", - "52639c": "997aea", - "efffff": "efffff" + "52639c": "997aea" }, "2": { - "101010": "101010", "94e6ef": "63d1e9", "94b5ce": "3b9abe", "7b9cb5": "28769f", @@ -35,7 +28,6 @@ "313a4a": "09234b", "529cde": "3aceef", "425a6b": "edfcff", - "52639c": "2984d6", - "efffff": "efffff" + "52639c": "2984d6" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/474.json b/public/images/pokemon/variant/back/474.json index 2490d3fd713..1729121eb34 100644 --- a/public/images/pokemon/variant/back/474.json +++ b/public/images/pokemon/variant/back/474.json @@ -3,10 +3,8 @@ "5a3a4a": "9e264e", "ef5a63": "f8a8e6", "94426b": "d95492", - "101010": "101010", "bd4a6b": "e883c8", "ff94b5": "fccef2", - "ffffff": "ffffff", "313a63": "110a25", "31739c": "271a3e", "8cd6ff": "5e4868", @@ -19,7 +17,6 @@ "5a3a4a": "31150e", "ef5a63": "82391d", "94426b": "491c0c", - "101010": "101010", "bd4a6b": "612a17", "ff94b5": "a04c27", "ffffff": "ffe4d4", diff --git a/public/images/pokemon/variant/back/475.json b/public/images/pokemon/variant/back/475.json index 3cafe1d59ea..8d359917f97 100644 --- a/public/images/pokemon/variant/back/475.json +++ b/public/images/pokemon/variant/back/475.json @@ -6,7 +6,6 @@ "42845a": "c08f44", "7394a5": "ebc984", "5ab56b": "eabb5d", - "101010": "101010", "7b8cad": "d59c80", "efefff": "f8efde", "a5b5ce": "ffc4a6", @@ -22,11 +21,6 @@ "42845a": "242745", "7394a5": "3f427f", "5ab56b": "282c5d", - "101010": "101010", - "7b8cad": "7b8cad", - "efefff": "efefff", - "a5b5ce": "a5b5ce", - "c5cede": "c5cede", "e6523a": "d846c1", "7b5252": "9e2a7c", "ff9c84": "b035ae" diff --git a/public/images/pokemon/variant/back/478.json b/public/images/pokemon/variant/back/478.json index 36861f03a5e..bd8ee24cac1 100644 --- a/public/images/pokemon/variant/back/478.json +++ b/public/images/pokemon/variant/back/478.json @@ -7,7 +7,6 @@ "527bb5": "34853e", "73b5d6": "65d64d", "42528c": "045836", - "101010": "101010", "4a3173": "001e1d", "6b3131": "081d22", "e67b4a": "29504d", diff --git a/public/images/pokemon/variant/back/479-fan.json b/public/images/pokemon/variant/back/479-fan.json index 60cb7e4fc50..13d46fccf21 100644 --- a/public/images/pokemon/variant/back/479-fan.json +++ b/public/images/pokemon/variant/back/479-fan.json @@ -8,21 +8,16 @@ "7b3a21": "113526", "ef7329": "417131", "ffad84": "819d56", - "101010": "101010", - "4a4a52": "2e3f18", - "bdbdbd": "bdbdbd" + "4a4a52": "2e3f18" }, "2": { "d6ad00": "adbed7", "ffe65a": "d9e1ec", "ffefa5": "edf2fa", - "ffffff": "ffffff", "c54a19": "cbb240", "7b3a21": "ad7d28", "ef7329": "e4de6d", "ffad84": "fcfebf", - "101010": "101010", - "4a4a52": "374f6c", - "bdbdbd": "bdbdbd" + "4a4a52": "374f6c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/479-frost.json b/public/images/pokemon/variant/back/479-frost.json index 357bc3ceb99..e36f1eb2648 100644 --- a/public/images/pokemon/variant/back/479-frost.json +++ b/public/images/pokemon/variant/back/479-frost.json @@ -4,11 +4,8 @@ "ce73ff": "648c50", "de9cff": "9ea436", "7b3a21": "183b29", - "101010": "101010", "ef7329": "417131", "c54a19": "205027", - "292929": "292929", - "4a4a52": "4a4a52", "ffffff": "fbffbd" }, "2": { @@ -16,11 +13,7 @@ "ce73ff": "59b5d7", "de9cff": "8ed4e9", "7b3a21": "536d8c", - "101010": "101010", "ef7329": "c5cbe5", - "c54a19": "93a5ba", - "292929": "292929", - "4a4a52": "4a4a52", - "ffffff": "ffffff" + "c54a19": "93a5ba" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/479-heat.json b/public/images/pokemon/variant/back/479-heat.json index eb5aa5503f2..123080d40ac 100644 --- a/public/images/pokemon/variant/back/479-heat.json +++ b/public/images/pokemon/variant/back/479-heat.json @@ -8,19 +8,16 @@ "ffad84": "819d56", "c54a19": "205027", "ef7329": "417131", - "101010": "101010", "292929": "142a1f" }, "2": { "bd2929": "cbbf4c", "ff4231": "f5f4ab", "ff9c94": "fdffe1", - "ffffff": "ffffff", "7b3a21": "9e3867", "ffad84": "ffd5d0", "c54a19": "d06280", "ef7329": "ff8493", - "101010": "101010", "292929": "581944" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/479-mow.json b/public/images/pokemon/variant/back/479-mow.json index b05f61a329c..f7e6f73165f 100644 --- a/public/images/pokemon/variant/back/479-mow.json +++ b/public/images/pokemon/variant/back/479-mow.json @@ -7,7 +7,6 @@ "c54a19": "205027", "ef7329": "417131", "ffad84": "819d56", - "101010": "101010", "4a4a52": "183b29", "ffffff": "fbffbd" }, @@ -18,9 +17,6 @@ "7b3a21": "064f40", "c54a19": "147a5c", "ef7329": "279e69", - "ffad84": "6ada9c", - "101010": "101010", - "4a4a52": "4a4a52", - "ffffff": "ffffff" + "ffad84": "6ada9c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/479-wash.json b/public/images/pokemon/variant/back/479-wash.json index eac753f790f..9c7e5547344 100644 --- a/public/images/pokemon/variant/back/479-wash.json +++ b/public/images/pokemon/variant/back/479-wash.json @@ -4,12 +4,10 @@ "084ac5": "204336", "8cbdf7": "9ea436", "c54a19": "205027", - "101010": "101010", "ffad84": "819d56", "7b3a21": "143b2b", "ef7329": "417131", "4a4a52": "183b29", - "292929": "292929", "ffffff": "fbffbd" }, "2": { @@ -17,12 +15,8 @@ "084ac5": "1aac79", "8cbdf7": "b4feca", "c54a19": "53abd0", - "101010": "101010", "ffad84": "bbf7fe", "7b3a21": "255e90", - "ef7329": "86d7ec", - "4a4a52": "4a4a52", - "292929": "292929", - "ffffff": "ffffff" + "ef7329": "86d7ec" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/479.json b/public/images/pokemon/variant/back/479.json index e6bd74a3c5a..d0cc41fd8dc 100644 --- a/public/images/pokemon/variant/back/479.json +++ b/public/images/pokemon/variant/back/479.json @@ -6,7 +6,6 @@ "c54a19": "205027", "7b3a21": "143b2b", "ef7329": "417131", - "101010": "101010", "bdbdbd": "d8e082", "0842ad": "648c50", "317bef": "89a271", @@ -15,12 +14,9 @@ "2": { "5ac5bd": "64da6a", "bdf7ef": "d7f3c1", - "ffffff": "ffffff", "c54a19": "2e3948", "7b3a21": "242834", "ef7329": "4d5262", - "101010": "101010", - "bdbdbd": "bdbdbd", "0842ad": "c95367", "317bef": "e9919c", "29adbd": "1fb18e" diff --git a/public/images/pokemon/variant/back/480.json b/public/images/pokemon/variant/back/480.json index c8b2594016b..17c8018c61b 100644 --- a/public/images/pokemon/variant/back/480.json +++ b/public/images/pokemon/variant/back/480.json @@ -1,6 +1,5 @@ { "0": { - "101010": "101010", "f7c573": "e8824f", "ad8c42": "ba5327", "735a42": "86340d", @@ -11,7 +10,6 @@ "ad4242": "e141ed" }, "1": { - "101010": "101010", "f7c573": "3675ba", "ad8c42": "1e4891", "735a42": "0b1f51", @@ -22,7 +20,6 @@ "ad4242": "ffbd73" }, "2": { - "101010": "101010", "f7c573": "4d967d", "ad8c42": "24594a", "735a42": "123723", diff --git a/public/images/pokemon/variant/back/481.json b/public/images/pokemon/variant/back/481.json index cbaa6c1597b..9ed487565ac 100644 --- a/public/images/pokemon/variant/back/481.json +++ b/public/images/pokemon/variant/back/481.json @@ -3,7 +3,6 @@ "84426b": "691149", "b55284": "93397b", "ef73ad": "b35596", - "101010": "101010", "7b7394": "8d4275", "949cc5": "d295b9", "424242": "591c4b", @@ -14,7 +13,6 @@ "84426b": "371959", "b55284": "59367e", "ef73ad": "785194", - "101010": "101010", "7b7394": "6b4b75", "949cc5": "b89cbb", "424242": "51385c", @@ -25,11 +23,9 @@ "84426b": "813401", "b55284": "c76e1e", "ef73ad": "e2a21b", - "101010": "101010", "7b7394": "896149", "949cc5": "c5ac94", "424242": "633826", - "b5cef7": "f7e0b5", - "ef4242": "ef4242" + "b5cef7": "f7e0b5" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/482.json b/public/images/pokemon/variant/back/482.json index ef599ca2581..59039572fec 100644 --- a/public/images/pokemon/variant/back/482.json +++ b/public/images/pokemon/variant/back/482.json @@ -1,6 +1,5 @@ { "0": { - "101010": "101010", "3a4a73": "03436b", "5a94c5": "27bac2", "426394": "0f7293", @@ -11,7 +10,6 @@ "ad4242": "7c1caa" }, "1": { - "101010": "101010", "3a4a73": "23472c", "5a94c5": "488356", "426394": "32613b", @@ -22,7 +20,6 @@ "ad4242": "d26725" }, "2": { - "101010": "101010", "3a4a73": "62114e", "5a94c5": "ce569c", "426394": "a4327e", diff --git a/public/images/pokemon/variant/back/485.json b/public/images/pokemon/variant/back/485.json index 3eb9d2f0d0f..fd87acf184a 100644 --- a/public/images/pokemon/variant/back/485.json +++ b/public/images/pokemon/variant/back/485.json @@ -2,7 +2,6 @@ "1": { "5a3131": "313f5a", "ad5a42": "4266ad", - "737373": "737373", "191919": "2f2f2f", "84425a": "425884", "c5c5c5": "e3e3e3", @@ -10,21 +9,17 @@ "ce8429": "29ce5a", "ffa510": "10ff6b", "525252": "767676", - "949494": "bfa9a9", - "3a3a3a": "3a3a3a" + "949494": "bfa9a9" }, "2": { "5a3131": "462151", "ad5a42": "7836a7", - "737373": "737373", - "191919": "191919", "84425a": "633372", "c5c5c5": "949494", "e6e6ef": "b0b0b0", "ce8429": "ce2988", "ffa510": "f110ff", "525252": "514949", - "949494": "636363", - "3a3a3a": "3a3a3a" + "949494": "636363" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/487-altered.json b/public/images/pokemon/variant/back/487-altered.json index 2342bc62e92..c7cdeeaabfa 100644 --- a/public/images/pokemon/variant/back/487-altered.json +++ b/public/images/pokemon/variant/back/487-altered.json @@ -2,7 +2,6 @@ "1": { "3a3a4a": "171731", "735200": "023432", - "000000": "000000", "ffefc5": "9fffd4", "ffd600": "35ad81", "ce9c00": "156151", @@ -18,7 +17,6 @@ "2": { "3a3a4a": "12251a", "735200": "4a351b", - "000000": "000000", "ffefc5": "fffdf1", "ffd600": "e2d4af", "ce9c00": "aa956f", diff --git a/public/images/pokemon/variant/back/487-origin.json b/public/images/pokemon/variant/back/487-origin.json index 7990487a65d..a62cfa3a399 100644 --- a/public/images/pokemon/variant/back/487-origin.json +++ b/public/images/pokemon/variant/back/487-origin.json @@ -12,8 +12,7 @@ "a5213a": "974eaf", "6b6b7b": "3c1f59", "5a3110": "5e0e6e", - "ff4252": "df78ff", - "000000": "000000" + "ff4252": "df78ff" }, "2": { "292929": "241010", @@ -28,7 +27,6 @@ "a5213a": "16b811", "6b6b7b": "1e203c", "5a3110": "00760b", - "ff4252": "46e92a", - "000000": "000000" + "ff4252": "46e92a" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/488.json b/public/images/pokemon/variant/back/488.json index 4d302553deb..f6306b0d3f8 100644 --- a/public/images/pokemon/variant/back/488.json +++ b/public/images/pokemon/variant/back/488.json @@ -2,14 +2,12 @@ "1": { "6b5231": "5a3c2a", "ffefbd": "fdf0d6", - "101010": "101010", "ad945a": "bc977d", "ffd673": "ddbfa4", "8c427b": "721e01", "d68cce": "dd8d2e", "c55a9c": "b33c12", "523a5a": "420600", - "ffffff": "ffffff", "e6c5ef": "ffd28c", "3a427b": "181d46", "526bb5": "304190", @@ -18,14 +16,12 @@ "2": { "6b5231": "485e63", "ffefbd": "e0eceb", - "101010": "101010", "ad945a": "7a9294", "ffd673": "bacaca", "8c427b": "168557", "d68cce": "7fe14b", "c55a9c": "2cba5e", "523a5a": "084c38", - "ffffff": "ffffff", "e6c5ef": "e0ff8c", "3a427b": "111828", "526bb5": "2f3345", diff --git a/public/images/pokemon/variant/back/489.json b/public/images/pokemon/variant/back/489.json index 53c68ee6184..234998f9912 100644 --- a/public/images/pokemon/variant/back/489.json +++ b/public/images/pokemon/variant/back/489.json @@ -4,7 +4,6 @@ "3a529c": "185b4f", "6bc5f7": "9bf3b7", "9ce6ff": "c3ffcd", - "101010": "101010", "199cd6": "69c796" }, "1": { @@ -12,7 +11,6 @@ "3a529c": "682307", "6bc5f7": "f5a54e", "9ce6ff": "ffd289", - "101010": "101010", "199cd6": "c27138" }, "2": { @@ -20,7 +18,6 @@ "3a529c": "84255f", "6bc5f7": "e484a8", "9ce6ff": "efa0b2", - "101010": "101010", "199cd6": "c65086" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/490.json b/public/images/pokemon/variant/back/490.json index 4ae1ca03db1..950148a35fe 100644 --- a/public/images/pokemon/variant/back/490.json +++ b/public/images/pokemon/variant/back/490.json @@ -1,7 +1,6 @@ { "0": { "317bad": "399271", - "101010": "101010", "199cd6": "69c796", "6bc5f7": "9bf3b7", "294a84": "185b4f", @@ -9,7 +8,6 @@ }, "1": { "317bad": "c27138", - "101010": "101010", "199cd6": "c27138", "6bc5f7": "f5a54e", "294a84": "964d17", @@ -17,7 +15,6 @@ }, "2": { "317bad": "b8488c", - "101010": "101010", "199cd6": "cc659c", "6bc5f7": "de89b3", "294a84": "912b6e", diff --git a/public/images/pokemon/variant/back/491.json b/public/images/pokemon/variant/back/491.json index 4935373691d..62a7849d6a1 100644 --- a/public/images/pokemon/variant/back/491.json +++ b/public/images/pokemon/variant/back/491.json @@ -1,30 +1,23 @@ { "1": { - "848484": "848484", - "dee6ef": "dee6ef", - "adb5bd": "adb5bd", "524a4a": "53818e", - "101010": "101010", "313131": "274656", "520000": "0a436c", "942942": "1e849a", "e63a29": "4fe0cd", "29e6ff": "d7502b", - "108cad": "a32819", - "ffffff": "ffffff" + "108cad": "a32819" }, "2": { "848484": "694624", "dee6ef": "ffcdbc", "adb5bd": "ce9c7a", "524a4a": "a9303f", - "101010": "101010", "313131": "5e1b2d", "520000": "6a2c00", "942942": "ba5a19", "e63a29": "ffa645", "29e6ff": "76f7ff", - "108cad": "25a6c7", - "ffffff": "ffffff" + "108cad": "25a6c7" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/492-land.json b/public/images/pokemon/variant/back/492-land.json index 3f0b8dda84f..340e9bb285c 100644 --- a/public/images/pokemon/variant/back/492-land.json +++ b/public/images/pokemon/variant/back/492-land.json @@ -2,7 +2,6 @@ "1": { "8cad63": "2a5045", "adde63": "416556", - "101010": "101010", "5a7342": "0f312b", "ffef7b": "cb9373", "844a6b": "b22519", @@ -19,7 +18,6 @@ "2": { "8cad63": "aa671e", "adde63": "f0a852", - "101010": "101010", "5a7342": "743510", "ffef7b": "f0d962", "844a6b": "326a9a", diff --git a/public/images/pokemon/variant/back/492-sky.json b/public/images/pokemon/variant/back/492-sky.json index 3830a053162..1d482166dc2 100644 --- a/public/images/pokemon/variant/back/492-sky.json +++ b/public/images/pokemon/variant/back/492-sky.json @@ -3,7 +3,6 @@ "7bad21": "24493e", "9cd621": "416556", "3a6b10": "103129", - "101010": "101010", "9494ad": "b18355", "ffffff": "fffae9", "52525a": "78492a", @@ -16,7 +15,6 @@ "7bad21": "ad5a1b", "9cd621": "f09d52", "3a6b10": "974a15", - "101010": "101010", "9494ad": "a7604e", "ffffff": "fff4ea", "52525a": "7a3126", diff --git a/public/images/pokemon/variant/back/494.json b/public/images/pokemon/variant/back/494.json index 79cbc752102..c47825a8ff2 100644 --- a/public/images/pokemon/variant/back/494.json +++ b/public/images/pokemon/variant/back/494.json @@ -5,9 +5,7 @@ "846b3a": "c43d21", "c59c5a": "d96030", "ffe6ad": "ee8e3e", - "000000": "000000", "6b4a10": "902300", - "3a3a3a": "3a3a3a", "bd4a00": "706040" }, "2": { @@ -16,9 +14,7 @@ "846b3a": "2b2a40", "c59c5a": "45465d", "ffe6ad": "72758a", - "000000": "000000", "6b4a10": "1e1b36", - "3a3a3a": "3a3a3a", "bd4a00": "b9648d" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/495.json b/public/images/pokemon/variant/back/495.json index a10cba7c1e1..c38d9c8fca8 100644 --- a/public/images/pokemon/variant/back/495.json +++ b/public/images/pokemon/variant/back/495.json @@ -5,10 +5,8 @@ "088400": "363270", "ffde29": "ff884c", "c59c00": "cc4328", - "080808": "080808", "5a2100": "1e1e66", "fff7bd": "ffe5b2", - "ffffff": "ffffff", "943a00": "4c3d99", "c5bd63": "cca37a", "de7b42": "8766cc", @@ -20,10 +18,8 @@ "088400": "b23561", "ffde29": "ffffff", "c59c00": "cecee5", - "080808": "080808", "5a2100": "054566", "fff7bd": "fff2f8", - "ffffff": "ffffff", "943a00": "168399", "c5bd63": "ccadc1", "de7b42": "33cccc", diff --git a/public/images/pokemon/variant/back/496.json b/public/images/pokemon/variant/back/496.json index e0c079d2d15..fb864e30af6 100644 --- a/public/images/pokemon/variant/back/496.json +++ b/public/images/pokemon/variant/back/496.json @@ -3,30 +3,24 @@ "21943a": "433e7c", "105229": "281d49", "29c54a": "6970af", - "000000": "000000", "8c7b31": "7f533f", - "ffffff": "ffffff", "bd4a21": "8766cc", "734210": "4c3d99", "c5bd63": "cca37a", "fff7bd": "ffe5b2", "d6ad29": "cc523d", - "081010": "081010", "ffce29": "ff884c" }, "2": { "21943a": "b23561", "105229": "7f194c", "29c54a": "e55b75", - "000000": "000000", "8c7b31": "664c61", - "ffffff": "ffffff", "bd4a21": "778fd8", "734210": "4a52a5", "c5bd63": "ccadc1", "fff7bd": "fff2f8", "d6ad29": "cecee5", - "081010": "081010", "ffce29": "ffffff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/497.json b/public/images/pokemon/variant/back/497.json index 7249f0b1bb0..34600584f10 100644 --- a/public/images/pokemon/variant/back/497.json +++ b/public/images/pokemon/variant/back/497.json @@ -3,10 +3,8 @@ "105229": "06010c", "10733a": "1b0f3f", "9cd69c": "778fd8", - "081010": "081010", "73a573": "4a52a5", "8c8cad": "8b8bac", - "ffffff": "ffffff", "943a00": "4c3d99", "ff8400": "8766cc", "199c4a": "2e2872", @@ -19,7 +17,6 @@ "105229": "06010c", "10733a": "660f41", "9cd69c": "ff727e", - "081010": "081010", "73a573": "cc4768", "8c8cad": "664c61", "ffffff": "fff2f8", diff --git a/public/images/pokemon/variant/back/5.json b/public/images/pokemon/variant/back/5.json index fc9c313b8b9..dcd498dea43 100644 --- a/public/images/pokemon/variant/back/5.json +++ b/public/images/pokemon/variant/back/5.json @@ -2,16 +2,12 @@ "1": { "942110": "10292c", "ffa500": "9e59db", - "101010": "101010", "ff524a": "2a6e70", "ce3a3a": "1a4848", "ff4200": "5033ce", "ff846b": "40a78f", "ffde29": "e9bfff", - "b5b5b5": "b5b5b5", "005aff": "ce1010", - "ffffff": "ffffff", - "6b6b6b": "6b6b6b", "e6cead": "99f4f7", "b58c5a": "60c5c8", "cead7b": "6ee3e5" @@ -19,16 +15,12 @@ "2": { "942110": "101a70", "ffa500": "96e8e8", - "101010": "101010", "ff524a": "2564bc", "ce3a3a": "163793", "ff4200": "4c83d4", "ff846b": "418ae2", "ffde29": "f9fffa", - "b5b5b5": "b5b5b5", "005aff": "2b75ff", - "ffffff": "ffffff", - "6b6b6b": "6b6b6b", "e6cead": "5e238e", "b58c5a": "340d6b", "cead7b": "47177a" diff --git a/public/images/pokemon/variant/back/50.json b/public/images/pokemon/variant/back/50.json index 598825032ea..e11530fed28 100644 --- a/public/images/pokemon/variant/back/50.json +++ b/public/images/pokemon/variant/back/50.json @@ -4,7 +4,6 @@ "a55a5a": "2b8d62", "5a3119": "10644e", "de9c5a": "7ade9a", - "101010": "101010", "847b4a": "a29276", "e6e6b5": "ffffe4", "5a5221": "77674b", @@ -15,7 +14,6 @@ "a55a5a": "cc8029", "5a3119": "a66010", "de9c5a": "ffde62", - "101010": "101010", "847b4a": "8592a6", "e6e6b5": "e6ebf2", "5a5221": "62738c", diff --git a/public/images/pokemon/variant/back/51.json b/public/images/pokemon/variant/back/51.json index 8d80ecb3f5f..1dda616609b 100644 --- a/public/images/pokemon/variant/back/51.json +++ b/public/images/pokemon/variant/back/51.json @@ -4,7 +4,6 @@ "de9c5a": "7ade9a", "c57342": "4eb578", "5a3119": "10644e", - "101010": "101010", "730019": "882859", "ff6b5a": "ff78b0", "d63a4a": "ef4da0", @@ -18,7 +17,6 @@ "de9c5a": "ffde62", "c57342": "f2ad3d", "5a3119": "a66010", - "101010": "101010", "730019": "62738c", "ff6b5a": "e6ebf2", "d63a4a": "c3ccd9", diff --git a/public/images/pokemon/variant/back/517.json b/public/images/pokemon/variant/back/517.json index 66e30e5a872..c88320baf66 100644 --- a/public/images/pokemon/variant/back/517.json +++ b/public/images/pokemon/variant/back/517.json @@ -7,10 +7,8 @@ "e6adc5": "5cb391", "ad7bce": "119b87", "634a6b": "003f4f", - "101010": "101010", "de7bbd": "5fafdf", - "ad2942": "ca2793", - "ffffff": "ffffff" + "ad2942": "ca2793" }, "2": { "ce8cbd": "255696", @@ -20,9 +18,7 @@ "e6adc5": "3f79b7", "ad7bce": "d6654d", "634a6b": "52252a", - "101010": "101010", "de7bbd": "cd8042", - "ad2942": "bd3c25", - "ffffff": "ffffff" + "ad2942": "bd3c25" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/518.json b/public/images/pokemon/variant/back/518.json index 98dc4134ea0..f1c7177b0e9 100644 --- a/public/images/pokemon/variant/back/518.json +++ b/public/images/pokemon/variant/back/518.json @@ -7,7 +7,6 @@ "6b63a5": "b85635", "ffc5ce": "f7dfe1", "9c5a63": "854655", - "101010": "101010", "ce9c94": "efbcc9", "525252": "a86c76", "bd73ad": "0d4543", @@ -21,7 +20,6 @@ "6b63a5": "e7af71", "ffc5ce": "384a8f", "9c5a63": "151c59", - "101010": "101010", "ce9c94": "233175", "525252": "0b0f3c", "bd73ad": "314da0", diff --git a/public/images/pokemon/variant/back/52-gigantamax.json b/public/images/pokemon/variant/back/52-gigantamax.json index 9837323ddab..620a1792cd6 100644 --- a/public/images/pokemon/variant/back/52-gigantamax.json +++ b/public/images/pokemon/variant/back/52-gigantamax.json @@ -4,11 +4,6 @@ "c89f8c": "816f5c", "fbf7e6": "ece3c7", "f0dea2": "c7b497", - "101010": "101010", - "986100": "986100", - "cca700": "cca700", - "f6f6f6": "f6f6f6", - "f9d400": "f9d400", "944100": "751e7c", "ea9f38": "cb5fbd", "c5810b": "b146ac" @@ -18,10 +13,8 @@ "c89f8c": "915d2f", "fbf7e6": "e5bc79", "f0dea2": "c08647", - "101010": "101010", "986100": "683700", "cca700": "a96c00", - "f6f6f6": "f6f6f6", "f9d400": "ffbf3f", "944100": "2948ad", "ea9f38": "7bf7f7", @@ -32,10 +25,8 @@ "c89f8c": "322d28", "fbf7e6": "807d77", "f0dea2": "524f4a", - "101010": "101010", "986100": "986f00", "cca700": "efc300", - "f6f6f6": "f6f6f6", "f9d400": "f9e600", "944100": "256a24", "ea9f38": "aeec97", diff --git a/public/images/pokemon/variant/back/52.json b/public/images/pokemon/variant/back/52.json index 4bb9cb30ec9..11c20d19a3d 100644 --- a/public/images/pokemon/variant/back/52.json +++ b/public/images/pokemon/variant/back/52.json @@ -2,8 +2,6 @@ "0": { "8c6b00": "5b4a3b", "ffe684": "c7b497", - "101010": "101010", - "ffffff": "ffffff", "ffd600": "cea500", "debd3a": "816f5c", "cea500": "945a00", @@ -14,11 +12,7 @@ "1": { "8c6b00": "552e15", "ffe684": "c08647", - "101010": "101010", - "ffffff": "ffffff", - "ffd600": "ffd600", "debd3a": "915d2f", - "cea500": "cea500", "944200": "2948ad", "ef9c31": "7bf7f7", "c57b08": "52add6" @@ -26,8 +20,6 @@ "2": { "8c6b00": "241d18", "ffe684": "524f4a", - "101010": "101010", - "ffffff": "ffffff", "ffd600": "d2ac00", "debd3a": "322d28", "cea500": "986f00", diff --git a/public/images/pokemon/variant/back/524.json b/public/images/pokemon/variant/back/524.json index 3ce39b1bc45..0ad758ddcb6 100644 --- a/public/images/pokemon/variant/back/524.json +++ b/public/images/pokemon/variant/back/524.json @@ -1,6 +1,5 @@ { "1": { - "000000": "000000", "3a2119": "4d8c77", "5a4231": "63a690", "7b5a4a": "97d9c3", @@ -9,7 +8,6 @@ "42528c": "656273" }, "2": { - "000000": "000000", "3a2119": "292933", "5a4231": "515266", "7b5a4a": "979bb3", diff --git a/public/images/pokemon/variant/back/525.json b/public/images/pokemon/variant/back/525.json index da6fd7b6282..84258c85efb 100644 --- a/public/images/pokemon/variant/back/525.json +++ b/public/images/pokemon/variant/back/525.json @@ -3,7 +3,6 @@ "21293a": "292538", "293a6b": "464558", "42528c": "656273", - "101010": "101010", "733121": "0c3b37", "ff6b52": "bcf1a6", "ce4a3a": "50cd61", @@ -13,7 +12,6 @@ "21293a": "584245", "293a6b": "9b7570", "42528c": "cdac94", - "101010": "101010", "733121": "733120", "ff6b52": "eeb570", "ce4a3a": "dc6c44", diff --git a/public/images/pokemon/variant/back/526.json b/public/images/pokemon/variant/back/526.json index f6cf26e75fc..b17f2ef7785 100644 --- a/public/images/pokemon/variant/back/526.json +++ b/public/images/pokemon/variant/back/526.json @@ -1,6 +1,5 @@ { "1": { - "000000": "000000", "e63131": "50cd61", "6b2121": "0c3b37", "9c3131": "0d6d58", @@ -13,7 +12,6 @@ "848484": "afc1c8" }, "2": { - "000000": "000000", "e63131": "dc6c44", "6b2121": "733120", "9c3131": "a7323b", diff --git a/public/images/pokemon/variant/back/53.json b/public/images/pokemon/variant/back/53.json index 2a3d338fccf..2f890cc3492 100644 --- a/public/images/pokemon/variant/back/53.json +++ b/public/images/pokemon/variant/back/53.json @@ -1,20 +1,17 @@ { "0": { - "101010": "101010", "845200": "5b4a3b", "deb56b": "c7b497", "ffe684": "ece3c7", "b58429": "816f5c" }, "1": { - "101010": "101010", "845200": "431a0e", "deb56b": "8d6038", "ffe684": "c39564", "b58429": "552e15" }, "2": { - "101010": "101010", "845200": "241d18", "deb56b": "322d28", "ffe684": "524f4a", diff --git a/public/images/pokemon/variant/back/530.json b/public/images/pokemon/variant/back/530.json index 1f1d90459d0..2e70eff1305 100644 --- a/public/images/pokemon/variant/back/530.json +++ b/public/images/pokemon/variant/back/530.json @@ -1,15 +1,12 @@ { "1": { "636363": "564964", - "101010": "101010", "d6d6d6": "f7eaec", "a5a5a5": "cab3d8", "423129": "954a29", - "292119": "292119", "5a4a42": "d1884d", "bd4242": "d7f55c", "844242": "88ca4c", - "ffffff": "ffffff", "ce736b": "d35f9e", "ef847b": "ff8be8", "842931": "438c43" diff --git a/public/images/pokemon/variant/back/531-mega.json b/public/images/pokemon/variant/back/531-mega.json index f78a2d37074..1436a7c609d 100644 --- a/public/images/pokemon/variant/back/531-mega.json +++ b/public/images/pokemon/variant/back/531-mega.json @@ -2,7 +2,6 @@ "1": { "80734d": "7c4b3b", "ffecb2": "fff6f0", - "101010": "101010", "ccb87a": "d6bfb4", "b35968": "b64231", "ffbfca": "f5a779", @@ -13,7 +12,6 @@ "2": { "80734d": "09232a", "ffecb2": "4bb9a6", - "101010": "101010", "ccb87a": "29878f", "b35968": "a0602f", "ffbfca": "f6e3a8", diff --git a/public/images/pokemon/variant/back/531.json b/public/images/pokemon/variant/back/531.json index 8a96bebb946..6f430465129 100644 --- a/public/images/pokemon/variant/back/531.json +++ b/public/images/pokemon/variant/back/531.json @@ -1,11 +1,9 @@ { "1": { - "734a4a": "734a4a", "ce6b73": "cc6348", "de8c94": "f5a779", "6b634a": "a86d57", "ceb584": "d6bfb4", - "101010": "101010", "f7e6ad": "fff6f0", "a58c63": "7c4b3b", "63636b": "782b3e", @@ -18,7 +16,6 @@ "de8c94": "f6e3a8", "6b634a": "09232a", "ceb584": "29878f", - "101010": "101010", "f7e6ad": "4bb9a6", "a58c63": "164d54", "63636b": "1a2135", diff --git a/public/images/pokemon/variant/back/532.json b/public/images/pokemon/variant/back/532.json index c0c68638f47..3befad7c830 100644 --- a/public/images/pokemon/variant/back/532.json +++ b/public/images/pokemon/variant/back/532.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "7b5208": "663326", "5a3a08": "4c1d14", "ad7308": "954734", @@ -10,13 +9,10 @@ "843142": "3a3931", "c55a73": "545148", "ef7b8c": "6c6958", - "c5c5c5": "c5c5c5", - "ffffff": "ffffff", "6b3a31": "5c3b64", "94635a": "814981" }, "2": { - "101010": "101010", "7b5208": "825536", "5a3a08": "6f4b33", "ad7308": "b3774d", @@ -26,8 +22,6 @@ "843142": "201f36", "c55a73": "2f2b42", "ef7b8c": "504f66", - "c5c5c5": "c5c5c5", - "ffffff": "ffffff", "6b3a31": "958d71", "94635a": "b5b18f" } diff --git a/public/images/pokemon/variant/back/533.json b/public/images/pokemon/variant/back/533.json index 7b7b707019b..bf227a13f05 100644 --- a/public/images/pokemon/variant/back/533.json +++ b/public/images/pokemon/variant/back/533.json @@ -3,7 +3,6 @@ "631931": "363d48", "bd3a4a": "707885", "84293a": "666b72", - "101010": "101010", "9c8c84": "3b8177", "5a3a42": "1d4c3c", "c5bdad": "569d84", @@ -15,7 +14,6 @@ "631931": "363d48", "bd3a4a": "acc2d7", "84293a": "6e869f", - "101010": "101010", "9c8c84": "6e6685", "5a3a42": "3c3946", "c5bdad": "9a8cad", diff --git a/public/images/pokemon/variant/back/534.json b/public/images/pokemon/variant/back/534.json index 508f107c3f5..7dda8ce3a11 100644 --- a/public/images/pokemon/variant/back/534.json +++ b/public/images/pokemon/variant/back/534.json @@ -3,7 +3,6 @@ "8c6b5a": "17524f", "5a3a21": "0d382d", "c59c73": "2a726e", - "101010": "101010", "3a3a31": "6e7878", "6b6b63": "94a6a9", "8c8c84": "becfd1", @@ -15,7 +14,6 @@ "8c6b5a": "68797a", "5a3a21": "505252", "c59c73": "90aba8", - "101010": "101010", "3a3a31": "5c5830", "6b6b63": "a78f4c", "8c8c84": "e3c682", diff --git a/public/images/pokemon/variant/back/540.json b/public/images/pokemon/variant/back/540.json index 8c61ece684a..5f2e3f94dad 100644 --- a/public/images/pokemon/variant/back/540.json +++ b/public/images/pokemon/variant/back/540.json @@ -1,6 +1,5 @@ { "1": { - "000000": "000000", "3a6319": "7b4a5a", "5a9c31": "b56b7b", "94ce08": "ef949c", @@ -10,7 +9,6 @@ "e68408": "69473c" }, "2": { - "000000": "000000", "3a6319": "051d69", "5a9c31": "15328e", "94ce08": "1e57cc", diff --git a/public/images/pokemon/variant/back/541.json b/public/images/pokemon/variant/back/541.json index c0f2d6d2074..d4bdd357130 100644 --- a/public/images/pokemon/variant/back/541.json +++ b/public/images/pokemon/variant/back/541.json @@ -1,6 +1,5 @@ { "1": { - "000000": "000000", "94ce08": "ef949c", "3a6319": "7b4a5a", "5a9c31": "b56b7b", @@ -9,7 +8,6 @@ "299c52": "ac6675" }, "2": { - "000000": "000000", "94ce08": "1152d8", "3a6319": "051d69", "5a9c31": "1339b8", diff --git a/public/images/pokemon/variant/back/542.json b/public/images/pokemon/variant/back/542.json index 5fd6526edf2..e1b21a7f68d 100644 --- a/public/images/pokemon/variant/back/542.json +++ b/public/images/pokemon/variant/back/542.json @@ -1,7 +1,6 @@ { "1": { "8c7b10": "573728", - "000000": "000000", "fff721": "967768", "426331": "7b4a5a", "7bce08": "ef949c", @@ -13,7 +12,6 @@ }, "2": { "8c7b10": "7b6053", - "000000": "000000", "fff721": "ffffff", "426331": "172371", "7bce08": "1e57cc", diff --git a/public/images/pokemon/variant/back/543.json b/public/images/pokemon/variant/back/543.json index 5100aa499c9..4e6f1855627 100644 --- a/public/images/pokemon/variant/back/543.json +++ b/public/images/pokemon/variant/back/543.json @@ -15,7 +15,6 @@ "efb508": "7ab7e6" }, "2": { - "101010": "101010", "632131": "6d5332", "bd3152": "d3c9ae", "940042": "968167", diff --git a/public/images/pokemon/variant/back/544.json b/public/images/pokemon/variant/back/544.json index 5d02ae2b196..68577d8cdaf 100644 --- a/public/images/pokemon/variant/back/544.json +++ b/public/images/pokemon/variant/back/544.json @@ -1,6 +1,5 @@ { "1": { - "000000": "000000", "5a4a63": "0a3939", "ad94c5": "238071", "84739c": "135c56", @@ -16,7 +15,6 @@ "ffff00": "7ab7e6" }, "2": { - "000000": "000000", "5a4a63": "452e23", "ad94c5": "a67645", "84739c": "764f2d", diff --git a/public/images/pokemon/variant/back/545.json b/public/images/pokemon/variant/back/545.json index c1e2a523206..46c7dcdc6a0 100644 --- a/public/images/pokemon/variant/back/545.json +++ b/public/images/pokemon/variant/back/545.json @@ -2,7 +2,6 @@ "1": { "631010": "0b4a45", "c5195a": "238071", - "101010": "101010", "6b216b": "831774", "8c3a9c": "a63c9f", "9c1042": "135c56", @@ -16,7 +15,6 @@ "2": { "631010": "8f795c", "c5195a": "dddaaf", - "101010": "101010", "6b216b": "b37830", "8c3a9c": "d7b444", "9c1042": "bdaf8a", diff --git a/public/images/pokemon/variant/back/546.json b/public/images/pokemon/variant/back/546.json index 9c45ddf2bd1..231b1f32e88 100644 --- a/public/images/pokemon/variant/back/546.json +++ b/public/images/pokemon/variant/back/546.json @@ -5,7 +5,6 @@ "dee6c5": "e4b397", "4a5a52": "663023", "194a19": "4c2f6e", - "101010": "101010", "52a54a": "c690da", "427b42": "9d62bc", "ffffff": "f2d2cb", @@ -17,7 +16,6 @@ "dee6c5": "bf7c6a", "4a5a52": "5c1e1f", "194a19": "2e6450", - "101010": "101010", "52a54a": "70be90", "427b42": "559c7a", "ffffff": "f7dbd1", diff --git a/public/images/pokemon/variant/back/547.json b/public/images/pokemon/variant/back/547.json index 44fb5bb86da..3ccf3c6ff74 100644 --- a/public/images/pokemon/variant/back/547.json +++ b/public/images/pokemon/variant/back/547.json @@ -3,24 +3,20 @@ "ad945a": "914e3a", "6b5a42": "663023", "e6dece": "dda585", - "101010": "101010", "c5b58c": "b77153", "194a19": "422258", "427b42": "8750a3", "52a54a": "b07cc3", - "523a29": "523a29", "735242": "693535" }, "2": { "ad945a": "4b1918", "6b5a42": "360e10", "e6dece": "a86250", - "101010": "101010", "c5b58c": "70322b", "194a19": "1c523e", "427b42": "428565", "52a54a": "5bab7c", - "523a29": "523a29", "735242": "d79057" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/548.json b/public/images/pokemon/variant/back/548.json index 9dc8f3e868a..93e7e42c1e7 100644 --- a/public/images/pokemon/variant/back/548.json +++ b/public/images/pokemon/variant/back/548.json @@ -2,7 +2,6 @@ "0": { "315a31": "31425a", "3aad3a": "76bfc7", - "101010": "101010", "3a844a": "307489", "9cbd4a": "a3b02e", "637b31": "646412", @@ -12,7 +11,6 @@ "1": { "315a31": "731629", "3aad3a": "ef5755", - "101010": "101010", "3a844a": "bd2d40", "9cbd4a": "8e954d", "637b31": "4e4e25", @@ -22,7 +20,6 @@ "2": { "315a31": "351c49", "3aad3a": "8d57a4", - "101010": "101010", "3a844a": "663982", "9cbd4a": "9f802c", "637b31": "5c4510", diff --git a/public/images/pokemon/variant/back/549.json b/public/images/pokemon/variant/back/549.json index bb81411e8d7..5f2bda23099 100644 --- a/public/images/pokemon/variant/back/549.json +++ b/public/images/pokemon/variant/back/549.json @@ -1,13 +1,11 @@ { "1": { "734221": "09445f", - "101010": "101010", "bd633a": "228ac5", "ffb59c": "78e6f7", "ff6b3a": "54c5eb", "bda552": "77909a", "ffde42": "b6c7cc", - "ffffff": "ffffff", "315a31": "80152b", "4a844a": "bd2d40", "3aad3a": "ef5755", @@ -17,13 +15,11 @@ }, "2": { "734221": "540f26", - "101010": "101010", "bd633a": "a62540", "ffb59c": "fe8e95", "ff6b3a": "de6475", "bda552": "d1b18c", "ffde42": "efddc1", - "ffffff": "ffffff", "315a31": "351c49", "4a844a": "5d3576", "3aad3a": "834c9b", diff --git a/public/images/pokemon/variant/back/551.json b/public/images/pokemon/variant/back/551.json index b173b167f9c..a5eb436667b 100644 --- a/public/images/pokemon/variant/back/551.json +++ b/public/images/pokemon/variant/back/551.json @@ -2,7 +2,6 @@ "1": { "523a10": "27172f", "c59c5a": "d8693a", - "101010": "101010", "8c7331": "b83b28", "42424a": "343958", "212121": "262347", @@ -12,7 +11,6 @@ "2": { "523a10": "1c2231", "c59c5a": "8688a0", - "101010": "101010", "8c7331": "646781", "42424a": "301f40", "212121": "290c2a", diff --git a/public/images/pokemon/variant/back/552.json b/public/images/pokemon/variant/back/552.json index 3b0bed5f6b6..8a4eec1e19f 100644 --- a/public/images/pokemon/variant/back/552.json +++ b/public/images/pokemon/variant/back/552.json @@ -5,7 +5,6 @@ "c59c5a": "d8693a", "523a10": "261d35", "191921": "232044", - "101010": "101010", "292931": "343958", "ffffff": "ebce81", "c5c5c5": "b37941", @@ -19,7 +18,6 @@ "c59c5a": "646781", "523a10": "161b23", "191921": "281842", - "101010": "101010", "292931": "412853", "ffffff": "90a0a7", "c5c5c5": "5b6d75", diff --git a/public/images/pokemon/variant/back/553.json b/public/images/pokemon/variant/back/553.json index aa8ea69e2ad..9769ce870d7 100644 --- a/public/images/pokemon/variant/back/553.json +++ b/public/images/pokemon/variant/back/553.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "8c3142": "164954", "212129": "192540", "c55252": "1b7871", @@ -12,7 +11,6 @@ "ffffff": "ffefa7" }, "2": { - "101010": "101010", "8c3142": "8b93a5", "212129": "58265a", "c55252": "c5cbd0", diff --git a/public/images/pokemon/variant/back/556.json b/public/images/pokemon/variant/back/556.json index 3863d4bda29..59655d106a0 100644 --- a/public/images/pokemon/variant/back/556.json +++ b/public/images/pokemon/variant/back/556.json @@ -4,7 +4,6 @@ "e66ba5": "aad7ec", "ce4a8c": "95bcdb", "8c1957": "454792", - "101010": "101010", "b59c10": "d66430", "ffd600": "ff9b3b", "429c4a": "acd2d3", @@ -20,7 +19,6 @@ "e66ba5": "ffcadc", "ce4a8c": "eea9be", "8c1957": "b06ea0", - "101010": "101010", "b59c10": "e0be7a", "ffd600": "fff1ac", "429c4a": "971746", diff --git a/public/images/pokemon/variant/back/559.json b/public/images/pokemon/variant/back/559.json index 1fd00baef27..df54688b898 100644 --- a/public/images/pokemon/variant/back/559.json +++ b/public/images/pokemon/variant/back/559.json @@ -3,14 +3,9 @@ "732129": "64195b", "b52931": "c855a9", "e63a42": "e18abd", - "212121": "212121", "7b6308": "66470e", "ffce00": "d7c475", "bd9c00": "8a7127", - "424242": "424242", - "adada5": "adada5", - "ffffff": "ffffff", - "63635a": "63635a", "7b7352": "5f533d", "c5bd84": "c7bea5", "fff7b5": "ecead9" @@ -19,32 +14,16 @@ "732129": "251c34", "b52931": "4f4967", "e63a42": "82809f", - "212121": "212121", "7b6308": "8b8352", "ffce00": "fffcdd", - "bd9c00": "bdbc82", - "424242": "424242", - "adada5": "adada5", - "ffffff": "ffffff", - "63635a": "63635a", - "7b7352": "7b7352", - "c5bd84": "c5bd84", - "fff7b5": "fff7b5" + "bd9c00": "bdbc82" }, "2": { "732129": "17541a", "b52931": "2d852b", "e63a42": "7cce68", - "212121": "212121", "7b6308": "6f9d3d", "ffce00": "e5ff87", - "bd9c00": "98c053", - "424242": "424242", - "adada5": "adada5", - "ffffff": "ffffff", - "63635a": "63635a", - "7b7352": "7b7352", - "c5bd84": "c5bd84", - "fff7b5": "fff7b5" + "bd9c00": "98c053" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/56.json b/public/images/pokemon/variant/back/56.json index adede31e531..aa8740928c6 100644 --- a/public/images/pokemon/variant/back/56.json +++ b/public/images/pokemon/variant/back/56.json @@ -5,7 +5,6 @@ "734200": "476983", "ffc584": "98b5cb", "fff7ce": "c8bfe3", - "101010": "101010", "d6ad9c": "867ba4", "f7deb5": "ada2cd", "dea573": "7b96ab" @@ -16,7 +15,6 @@ "734200": "302927", "ffc584": "5b5757", "fff7ce": "f9e9bd", - "101010": "101010", "d6ad9c": "d2a357", "f7deb5": "ddbf6b", "dea573": "4c4442" @@ -27,7 +25,6 @@ "734200": "212a20", "ffc584": "678674", "fff7ce": "ee5d26", - "101010": "101010", "d6ad9c": "a72510", "f7deb5": "cf361c", "dea573": "5d6962" diff --git a/public/images/pokemon/variant/back/560.json b/public/images/pokemon/variant/back/560.json index bf75cf1eed2..f94cac1b56b 100644 --- a/public/images/pokemon/variant/back/560.json +++ b/public/images/pokemon/variant/back/560.json @@ -1,47 +1,29 @@ { "0": { - "212121": "212121", "7b3a29": "5f533d", "de293a": "b1578c", "f77b21": "d9d7bf", "c55a19": "aea489", - "4a4a4a": "4a4a4a", - "949494": "949494", - "ffffff": "ffffff", - "bdbdbd": "bdbdbd", - "636363": "636363", "6b5229": "66470e", "f7ce10": "d7c475", "b59419": "8f7939", "e66373": "e18abd" }, "1": { - "212121": "212121", "7b3a29": "251c34", "de293a": "4f4967", "f77b21": "c3b889", "c55a19": "988658", - "4a4a4a": "4a4a4a", - "949494": "949494", - "ffffff": "ffffff", - "bdbdbd": "bdbdbd", - "636363": "636363", "6b5229": "8b8352", "f7ce10": "fffcdd", "b59419": "bdbc82", "e66373": "82809f" }, "2": { - "212121": "212121", "7b3a29": "24360d", "de293a": "3f5d3e", "f77b21": "fff7b5", "c55a19": "c5bd84", - "4a4a4a": "4a4a4a", - "949494": "949494", - "ffffff": "ffffff", - "bdbdbd": "bdbdbd", - "636363": "636363", "6b5229": "627f2e", "f7ce10": "d8f769", "b59419": "a8c458", diff --git a/public/images/pokemon/variant/back/562.json b/public/images/pokemon/variant/back/562.json index 2b3efcc8f2c..b551e133f8e 100644 --- a/public/images/pokemon/variant/back/562.json +++ b/public/images/pokemon/variant/back/562.json @@ -2,27 +2,22 @@ "1": { "313131": "741136", "525252": "a63051", - "101010": "101010", "ad0000": "4fe0b6", "ff0000": "a0f7ff", - "5a0000": "5a0000", "ce8410": "90493f", "f7ad29": "ae6a5d", "8c5a21": "551f1d", - "ffde7b": "d29887", - "dedede": "dedede" + "ffde7b": "d29887" }, "2": { "313131": "2a895c", "525252": "49bc7a", - "101010": "101010", "ad0000": "b48bb5", "ff0000": "dbbdcf", "5a0000": "955b85", "ce8410": "a6935a", "f7ad29": "d9e878", "8c5a21": "64471e", - "ffde7b": "e4f49e", - "dedede": "dedede" + "ffde7b": "e4f49e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/563.json b/public/images/pokemon/variant/back/563.json index 022c7bb0c47..10a57779fa1 100644 --- a/public/images/pokemon/variant/back/563.json +++ b/public/images/pokemon/variant/back/563.json @@ -1,7 +1,6 @@ { "1": { "3a3a42": "a40e38", - "101010": "101010", "294a4a": "101838", "3194ad": "38478c", "216b7b": "242b71", @@ -12,7 +11,6 @@ }, "2": { "3a3a42": "3ce483", - "101010": "101010", "294a4a": "591105", "3194ad": "e03241", "216b7b": "81280f", diff --git a/public/images/pokemon/variant/back/568.json b/public/images/pokemon/variant/back/568.json index 6fb163ce912..17d826caed0 100644 --- a/public/images/pokemon/variant/back/568.json +++ b/public/images/pokemon/variant/back/568.json @@ -2,7 +2,6 @@ "1": { "296b4a": "6b3873", "4a8c6b": "a35fa3", - "000000": "000000", "103121": "170829", "194a31": "412157", "736352": "162632", @@ -15,7 +14,6 @@ "2": { "296b4a": "773835", "4a8c6b": "b37664", - "000000": "000000", "103121": "411513", "194a31": "59221f", "736352": "d3b492", diff --git a/public/images/pokemon/variant/back/569-gigantamax.json b/public/images/pokemon/variant/back/569-gigantamax.json index 2c3ec4a6446..3bd15935f15 100644 --- a/public/images/pokemon/variant/back/569-gigantamax.json +++ b/public/images/pokemon/variant/back/569-gigantamax.json @@ -3,7 +3,6 @@ "7b6a5a": "162632", "5a4a41": "101829", "a48b73": "273947", - "010101": "010101", "7d8991": "4c6177", "bdbdbd": "8c9bad", "00acd5": "adf083", @@ -21,7 +20,6 @@ "7b6a5a": "d3b492", "5a4a41": "96684c", "a48b73": "f4eccf", - "010101": "010101", "7d8991": "9d5038", "bdbdbd": "da975a", "00acd5": "d5435c", @@ -29,7 +27,6 @@ "184a31": "59221f", "296a4a": "773835", "e6da00": "55383c", - "bc9540": "bc9540", "6bdc27": "f285b9", "febca4": "9b2b4e", "7a5a62": "67152f", diff --git a/public/images/pokemon/variant/back/569.json b/public/images/pokemon/variant/back/569.json index b61cffe9075..f56a152edbd 100644 --- a/public/images/pokemon/variant/back/569.json +++ b/public/images/pokemon/variant/back/569.json @@ -1,6 +1,5 @@ { "1": { - "000000": "000000", "5a4a42": "101829", "7b6b5a": "162632", "a58c73": "273947", @@ -14,7 +13,6 @@ "ef52a5": "adf083" }, "2": { - "000000": "000000", "5a4a42": "9d7862", "7b6b5a": "d3b492", "a58c73": "f4eccf", diff --git a/public/images/pokemon/variant/back/57.json b/public/images/pokemon/variant/back/57.json index dcd82aa40da..5e14ec78953 100644 --- a/public/images/pokemon/variant/back/57.json +++ b/public/images/pokemon/variant/back/57.json @@ -2,20 +2,15 @@ "0": { "634a21": "41306b", "9c6b6b": "476983", - "000000": "000000", "ffe6b5": "ada2cd", "ffffd6": "c8bfe3", "e6bd9c": "867ba4", "5a3100": "233a4c", "ce8c5a": "5c798f", - "e6b58c": "98b5cb", - "424242": "424242", - "7b7b7b": "7b7b7b" + "e6b58c": "98b5cb" }, "1": { - "634a21": "634a21", "9c6b6b": "3a302e", - "000000": "000000", "ffe6b5": "ddbf6b", "ffffd6": "f9e9bd", "e6bd9c": "d2a357", @@ -28,7 +23,6 @@ "2": { "634a21": "802819", "9c6b6b": "313930", - "000000": "000000", "ffe6b5": "cf361c", "ffffd6": "ee5d26", "e6bd9c": "a72510", diff --git a/public/images/pokemon/variant/back/570.json b/public/images/pokemon/variant/back/570.json index db0ddc9ae8d..6573e762e21 100644 --- a/public/images/pokemon/variant/back/570.json +++ b/public/images/pokemon/variant/back/570.json @@ -2,7 +2,6 @@ "1": { "6b213a": "4f025a", "ad1042": "c359e6", - "101010": "101010", "424252": "2f375a", "5a5a73": "475378", "212131": "1b1b47", @@ -12,7 +11,6 @@ "2": { "6b213a": "006867", "ad1042": "01d5bb", - "101010": "101010", "424252": "746a98", "5a5a73": "a1a1c0", "212131": "163956", diff --git a/public/images/pokemon/variant/back/571.json b/public/images/pokemon/variant/back/571.json index 5f18c3b6e51..a427a010eb6 100644 --- a/public/images/pokemon/variant/back/571.json +++ b/public/images/pokemon/variant/back/571.json @@ -1,19 +1,14 @@ { "1": { - "101010": "101010", "293142": "283766", "212131": "0a133f", "4a1029": "540548", "7b2942": "8e2270", "ad1042": "cc2f94", "4a4a52": "2d2b43", - "63636b": "4e4664", - "cecece": "cecece", - "318484": "318484", - "19b5b5": "19b5b5" + "63636b": "4e4664" }, "2": { - "101010": "101010", "293142": "283766", "212131": "121b47", "4a1029": "061a3e", @@ -21,7 +16,6 @@ "ad1042": "2f8cdb", "4a4a52": "5e5277", "63636b": "938aae", - "cecece": "cecece", "318484": "7e248c", "19b5b5": "9c58ca" } diff --git a/public/images/pokemon/variant/back/577.json b/public/images/pokemon/variant/back/577.json index d31bf54a381..b87f61ec984 100644 --- a/public/images/pokemon/variant/back/577.json +++ b/public/images/pokemon/variant/back/577.json @@ -8,7 +8,6 @@ "e6de73": "afdfce", "5a845a": "5e2c58", "6b6329": "597070", - "101010": "101010", "cee6bd": "ebc7d9", "316342": "442e7a", "9cad8c": "975b88", @@ -23,7 +22,6 @@ "e6de73": "9d65b1", "5a845a": "961d3c", "6b6329": "522849", - "101010": "101010", "cee6bd": "dfab9f", "316342": "3b031b", "9cad8c": "b86d6a", @@ -33,12 +31,10 @@ "428c5a": "a968a4", "5ab57b": "ce8ec2", "94e6ad": "f7c6e5", - "ffffff": "ffffff", "a59c31": "5ab3a2", "e6de73": "74d6b3", "5a845a": "ba7066", "6b6329": "3e8c82", - "101010": "101010", "cee6bd": "f0c9ba", "316342": "713c85", "9cad8c": "ba7066", diff --git a/public/images/pokemon/variant/back/578.json b/public/images/pokemon/variant/back/578.json index b1a55c50158..d3e934cfd8d 100644 --- a/public/images/pokemon/variant/back/578.json +++ b/public/images/pokemon/variant/back/578.json @@ -6,7 +6,6 @@ "637b63": "834783", "c5deb5": "ebc7e1", "9cbd8c": "9b65ac", - "101010": "101010", "84dea5": "c3b8f1", "e6ffde": "ffffff" }, @@ -17,7 +16,6 @@ "637b63": "862f2d", "c5deb5": "d69289", "9cbd8c": "b0605c", - "101010": "101010", "84dea5": "ee8c91", "e6ffde": "fff3f3" }, @@ -28,7 +26,6 @@ "637b63": "ba7066", "c5deb5": "f0c9ba", "9cbd8c": "d69887", - "101010": "101010", "84dea5": "d080b8", "e6ffde": "ffffff" } diff --git a/public/images/pokemon/variant/back/579.json b/public/images/pokemon/variant/back/579.json index 2b7c7cadec0..73e43af4a1d 100644 --- a/public/images/pokemon/variant/back/579.json +++ b/public/images/pokemon/variant/back/579.json @@ -6,7 +6,6 @@ "4a8c63": "40516c", "d6efc5": "bfdadd", "9cbd8c": "7f9fb5", - "101010": "101010", "de6363": "7bfff7", "a55252": "4aad8c", "c5a563": "63b519", @@ -19,7 +18,6 @@ "4a8c63": "862f2d", "d6efc5": "d69289", "9cbd8c": "b0605c", - "101010": "101010", "de6363": "e39744", "a55252": "bb6620", "c5a563": "844386", @@ -32,7 +30,6 @@ "4a8c63": "9d4e4c", "d6efc5": "e8baac", "9cbd8c": "c5887f", - "101010": "101010", "de6363": "74d6b3", "a55252": "5ab3a2", "c5a563": "6d648a", diff --git a/public/images/pokemon/variant/back/585-summer.json b/public/images/pokemon/variant/back/585-summer.json index 40e37014b60..6942da9df8d 100644 --- a/public/images/pokemon/variant/back/585-summer.json +++ b/public/images/pokemon/variant/back/585-summer.json @@ -2,14 +2,12 @@ "0": { "315231": "314a29", "317b42": "416a39", - "000000": "000000", "42b542": "4a8b4a", "ce9c08": "d89ca6", "7b5210": "c16b7d", "ffde52": "ffffff", "bda58c": "d89ca6", "9c7b5a": "c16b7d", - "ffffff": "ffffff", "f7efc5": "ffd5f6", "524219": "783046", "313131": "783046", diff --git a/public/images/pokemon/variant/back/586-autumn.json b/public/images/pokemon/variant/back/586-autumn.json index deda6a5097b..fea1b869102 100644 --- a/public/images/pokemon/variant/back/586-autumn.json +++ b/public/images/pokemon/variant/back/586-autumn.json @@ -1,17 +1,10 @@ { "0": { - "000000": "000000", - "bd3a3a": "bd3a3a", - "842131": "842131", - "5a1919": "5a1919", - "4a0808": "4a0808", "7b5231": "d98997", "422110": "9d4f62", "633121": "c66479", "de8c29": "ffecfb", - "dedede": "dedede", "a57b4a": "e1b2d7", - "311010": "311010", "dec56b": "ffd5f6" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/586-spring.json b/public/images/pokemon/variant/back/586-spring.json index 064a1ddecef..0b060156d33 100644 --- a/public/images/pokemon/variant/back/586-spring.json +++ b/public/images/pokemon/variant/back/586-spring.json @@ -1,11 +1,9 @@ { "0": { "311010": "2a1418", - "000000": "000000", "731931": "5e263e", "4a1008": "7f334a", "633a21": "c66479", - "ff739c": "ff739c", "ce4263": "c66479", "dec56b": "ffd5f6", "422119": "9d4f62", diff --git a/public/images/pokemon/variant/back/586-summer.json b/public/images/pokemon/variant/back/586-summer.json index 6481eb33cad..daafade5616 100644 --- a/public/images/pokemon/variant/back/586-summer.json +++ b/public/images/pokemon/variant/back/586-summer.json @@ -1,6 +1,5 @@ { "0": { - "000000": "000000", "193a29": "314a29", "195a31": "416a39", "088c42": "4a8b4a", @@ -9,9 +8,7 @@ "422119": "9d4f62", "633a21": "c66479", "de9429": "ffecfb", - "dedede": "dedede", "a57b4a": "e1b2d7", - "311010": "311010", "dec56b": "ffd5f6" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/586-winter.json b/public/images/pokemon/variant/back/586-winter.json index 630c958cd11..6a9c9ed7400 100644 --- a/public/images/pokemon/variant/back/586-winter.json +++ b/public/images/pokemon/variant/back/586-winter.json @@ -1,7 +1,6 @@ { "0": { "424a42": "99648f", - "000000": "000000", "ffffff": "ffd5f6", "6b6b6b": "b184a8", "adadad": "e1b2d7", @@ -11,8 +10,6 @@ "422119": "9d4f62", "7b5a31": "d98997", "de9429": "ffecfb", - "dedede": "dedede", - "a57b4a": "e1b2d7", - "311010": "311010" + "a57b4a": "e1b2d7" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/592.json b/public/images/pokemon/variant/back/592.json index 802e143bd11..06e3c8618dc 100644 --- a/public/images/pokemon/variant/back/592.json +++ b/public/images/pokemon/variant/back/592.json @@ -1,11 +1,9 @@ { "1": { "3a5a6b": "933b94", - "101010": "101010", "d6e6ff": "fee8ff", "5aa5c5": "c35ec7", "b5c5e6": "e3b8ec", - "84d6ff": "ef94eb", - "ffffff": "ffffff" + "84d6ff": "ef94eb" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/593.json b/public/images/pokemon/variant/back/593.json index f37daf8990c..a346624cdd2 100644 --- a/public/images/pokemon/variant/back/593.json +++ b/public/images/pokemon/variant/back/593.json @@ -2,7 +2,6 @@ "1": { "213a6b": "6a236f", "d6e6ff": "fee8ff", - "101010": "101010", "9cadd6": "e3b8ec", "29529c": "6a236f", "3a84ce": "c35ec7", @@ -11,7 +10,6 @@ "2": { "213a6b": "6e1b12", "d6e6ff": "ec7542", - "101010": "101010", "9cadd6": "d24d25", "29529c": "8e2b16", "3a84ce": "cb7048", diff --git a/public/images/pokemon/variant/back/594.json b/public/images/pokemon/variant/back/594.json index 22beae73c5e..d4f3186772a 100644 --- a/public/images/pokemon/variant/back/594.json +++ b/public/images/pokemon/variant/back/594.json @@ -6,11 +6,9 @@ "ff8cad": "f5a454", "f77384": "e37830", "633a42": "882915", - "000000": "000000", "e68c9c": "d68147", "005263": "681f16", "002931": "310000", - "9c8c10": "a74c8e", - "ffffff": "ffffff" + "9c8c10": "a74c8e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/595.json b/public/images/pokemon/variant/back/595.json index d5d387fb681..2d44343dcf5 100644 --- a/public/images/pokemon/variant/back/595.json +++ b/public/images/pokemon/variant/back/595.json @@ -1,7 +1,6 @@ { "1": { "735208": "583e28", - "101010": "101010", "cead08": "b57353", "f7de42": "e9ae7e", "a58408": "955d41", @@ -11,7 +10,6 @@ }, "2": { "735208": "46494d", - "101010": "101010", "cead08": "7b828b", "f7de42": "aab3bf", "a58408": "575b62", diff --git a/public/images/pokemon/variant/back/596.json b/public/images/pokemon/variant/back/596.json index 13a45eefaf2..26b9b446cad 100644 --- a/public/images/pokemon/variant/back/596.json +++ b/public/images/pokemon/variant/back/596.json @@ -1,7 +1,6 @@ { "1": { "192942": "3f210d", - "101010": "101010", "3a52b5": "7c4620", "3a3a42": "684529", "293a7b": "5e341a", @@ -14,9 +13,7 @@ }, "2": { "192942": "a1400e", - "101010": "101010", "3a52b5": "ff8e1e", - "3a3a42": "3a3a42", "293a7b": "d1630f", "ffde52": "aab3bf", "9c8419": "575b62", diff --git a/public/images/pokemon/variant/back/6-gigantamax.json b/public/images/pokemon/variant/back/6-gigantamax.json index 2cb22a53810..9e871aa6eba 100644 --- a/public/images/pokemon/variant/back/6-gigantamax.json +++ b/public/images/pokemon/variant/back/6-gigantamax.json @@ -7,7 +7,6 @@ "ef8429": "b77cb2", "fcfcfc": "eafff4", "ce5242": "9052af", - "101010": "101010", "ffe877": "adffcc", "efb55a": "d8a3e2", "ff0000": "3d30cc", diff --git a/public/images/pokemon/variant/back/6-mega-x.json b/public/images/pokemon/variant/back/6-mega-x.json index 7e281e5d094..f59aa1b4e5f 100644 --- a/public/images/pokemon/variant/back/6-mega-x.json +++ b/public/images/pokemon/variant/back/6-mega-x.json @@ -1,7 +1,6 @@ { "1": { "1f1f1f": "08225e", - "080808": "080808", "5a5a5a": "317396", "383838": "163d82", "009de1": "3da542", @@ -9,7 +8,6 @@ "99d9f7": "e6ffcc", "60a6c8": "82d179", "00b1e6": "af66ff", - "2b629c": "7341a6", - "f8f8f8": "f8f8f8" + "2b629c": "7341a6" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/6-mega-y.json b/public/images/pokemon/variant/back/6-mega-y.json index 1780f6949e1..d06bb6fffa2 100644 --- a/public/images/pokemon/variant/back/6-mega-y.json +++ b/public/images/pokemon/variant/back/6-mega-y.json @@ -3,16 +3,11 @@ "e64210": "5033ce", "f7a510": "9e59db", "833118": "552982", - "000000": "000000", "ee8329": "b27cbc", "ffd610": "e9bfff", "cd5241": "8053b2", "eeb45a": "d8a3e2", - "cdcdcd": "cdcdcd", "eede7b": "fae5ff", - "f2f2f2": "f2f2f2", - "217394": "41a86e", - "ffffff": "ffffff", - "636363": "636363" + "217394": "41a86e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/602.json b/public/images/pokemon/variant/back/602.json index ff5e607f300..595a98661a7 100644 --- a/public/images/pokemon/variant/back/602.json +++ b/public/images/pokemon/variant/back/602.json @@ -4,7 +4,6 @@ "b5bdce": "9d65ad", "cedee6": "b291d6", "efffff": "e8ddff", - "191921": "191921", "9ca5b5": "6b357a", "ffe67b": "55b5d6", "ffd600": "3d8cbd", @@ -15,7 +14,6 @@ "b5bdce": "62a89e", "cedee6": "8ecbaf", "efffff": "c7f0d5", - "191921": "191921", "9ca5b5": "315775", "ffe67b": "9a2957", "ffd600": "771a32", diff --git a/public/images/pokemon/variant/back/603.json b/public/images/pokemon/variant/back/603.json index e4e8fb70d58..b59b6ea69e2 100644 --- a/public/images/pokemon/variant/back/603.json +++ b/public/images/pokemon/variant/back/603.json @@ -3,7 +3,6 @@ "847342": "4f8194", "efdea5": "b9f1d3", "c5ad7b": "8dd8d0", - "191921": "191921", "103a4a": "884993", "215a63": "957bd0", "de7352": "8c1a6a", @@ -11,14 +10,12 @@ "b54a29": "610c53", "deb500": "d89d77", "ffd600": "f7e1a6", - "ffffff": "ffffff", "949c4a": "ff772d" }, "2": { "847342": "0d1a31", "efdea5": "3a5865", "c5ad7b": "283b4e", - "191921": "191921", "103a4a": "6faa3c", "215a63": "bbdf64", "de7352": "fef5b5", diff --git a/public/images/pokemon/variant/back/604.json b/public/images/pokemon/variant/back/604.json index b7fb3bb6208..01e61a45af2 100644 --- a/public/images/pokemon/variant/back/604.json +++ b/public/images/pokemon/variant/back/604.json @@ -4,7 +4,6 @@ "002131": "501d59", "216373": "957bd0", "73b5ce": "b29fe8", - "101019": "101019", "ffd600": "f7e1a6", "deb500": "d89d77", "847342": "4f8194", @@ -21,7 +20,6 @@ "002131": "225517", "216373": "bbdf64", "73b5ce": "e1ed9e", - "101019": "101019", "ffd600": "b83c5c", "deb500": "92233f", "847342": "0d1a31", diff --git a/public/images/pokemon/variant/back/605.json b/public/images/pokemon/variant/back/605.json index d5431137ef4..d0afbb0acfe 100644 --- a/public/images/pokemon/variant/back/605.json +++ b/public/images/pokemon/variant/back/605.json @@ -4,7 +4,6 @@ "3a7352": "292571", "a5cebd": "617eb8", "639484": "3c508b", - "101010": "101010", "ce0000": "954bd8", "7b2929": "2ecbc2", "6b6310": "54760c", @@ -15,7 +14,6 @@ "3a7352": "702c2c", "a5cebd": "be847a", "639484": "9f5952", - "101010": "101010", "ce0000": "615ad4", "7b2929": "f052a8", "6b6310": "a13815", @@ -26,7 +24,6 @@ "3a7352": "24243a", "a5cebd": "5b5e68", "639484": "38394c", - "101010": "101010", "ce0000": "ee5962", "7b2929": "8952dc", "6b6310": "8b3dbe", diff --git a/public/images/pokemon/variant/back/606.json b/public/images/pokemon/variant/back/606.json index b7517edbab7..ba4a85de4eb 100644 --- a/public/images/pokemon/variant/back/606.json +++ b/public/images/pokemon/variant/back/606.json @@ -4,7 +4,6 @@ "634229": "3f1925", "de9c7b": "9f534b", "8c523a": "581f28", - "101010": "101010", "c5a57b": "e9c0a2", "8c2929": "4b1263", "ce0000": "602985", @@ -18,7 +17,6 @@ "634229": "2f536f", "de9c7b": "a0e4e6", "8c523a": "4d879f", - "101010": "101010", "c5a57b": "c35d43", "8c2929": "16146f", "ce0000": "384097", @@ -32,9 +30,7 @@ "634229": "834f57", "de9c7b": "e5d1cc", "8c523a": "97696a", - "101010": "101010", "c5a57b": "bc3295", - "8c2929": "8c2929", "ce0000": "d3335a", "e6ce00": "a6488d", "e6c5a5": "dc59aa", diff --git a/public/images/pokemon/variant/back/609.json b/public/images/pokemon/variant/back/609.json index 80e1d7b3201..c716a8159ea 100644 --- a/public/images/pokemon/variant/back/609.json +++ b/public/images/pokemon/variant/back/609.json @@ -7,7 +7,6 @@ "313131": "11247b", "5a5a5a": "123684", "c5d6d6": "8e7c96", - "ffffff": "ffffff", "7b8c8c": "bb9fbc" }, "2": { @@ -18,7 +17,6 @@ "313131": "a15f42", "5a5a5a": "8d412b", "c5d6d6": "dcceae", - "ffffff": "ffffff", "7b8c8c": "eee6ca" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/610.json b/public/images/pokemon/variant/back/610.json index b011b55eb06..9fa630fe381 100644 --- a/public/images/pokemon/variant/back/610.json +++ b/public/images/pokemon/variant/back/610.json @@ -1,13 +1,10 @@ { "1": { - "000000": "000000", "313a29": "0a0b31", "4a523a": "27105b", "636b4a": "4b409d", "6b7b4a": "3f3562", "94a55a": "514776", - "b5b5d6": "b5b5d6", - "ffffff": "ffffff", "ce0000": "9d9d9d", "630000": "361a06", "84b521": "b52439", @@ -16,14 +13,11 @@ "d6e694": "d8d8d8" }, "2": { - "000000": "000000", "313a29": "0e1f3d", "4a523a": "193769", "636b4a": "35679c", "6b7b4a": "681c2a", "94a55a": "983f50", - "b5b5d6": "b5b5d6", - "ffffff": "ffffff", "ce0000": "00b5ce", "630000": "2f0010", "84b521": "5b69da", diff --git a/public/images/pokemon/variant/back/6100.json b/public/images/pokemon/variant/back/6100.json index bcf7d0cb55a..5113ce4930c 100644 --- a/public/images/pokemon/variant/back/6100.json +++ b/public/images/pokemon/variant/back/6100.json @@ -3,12 +3,8 @@ "7c2506": "2e333b", "fa923e": "a0c6ca", "ec6f00": "69a6b4", - "101010": "101010", "dc5d00": "598195", "c04a1c": "4e6170", - "ddccc8": "ddccc8", - "fefefe": "fefefe", - "ded5d5": "ded5d5", "f3d181": "c9cdd6", "d9a866": "a5aab7", "b8752e": "838797" @@ -17,12 +13,8 @@ "7c2506": "5d0a26", "fa923e": "d04744", "ec6f00": "a62833", - "101010": "101010", "dc5d00": "8f1b2c", "c04a1c": "72142b", - "ddccc8": "ddccc8", - "fefefe": "fefefe", - "ded5d5": "ded5d5", "f3d181": "502b32", "d9a866": "3a272e", "b8752e": "2d2327" diff --git a/public/images/pokemon/variant/back/6101.json b/public/images/pokemon/variant/back/6101.json index a494bf095d4..f87a8b27a30 100644 --- a/public/images/pokemon/variant/back/6101.json +++ b/public/images/pokemon/variant/back/6101.json @@ -4,13 +4,10 @@ "f3d181": "c9cdd6", "d9a866": "a5aab7", "a9763d": "838797", - "101010": "101010", "dc5d00": "5e8494", "ec6f00": "69a6b4", "c04a1c": "386583", "7c2506": "2e333b", - "cdcdde": "cdcdde", - "fefefe": "fefefe", "6f625e": "373e4c" }, "2": { @@ -18,13 +15,9 @@ "f3d181": "5e343c", "d9a866": "452d35", "a9763d": "35262c", - "101010": "101010", "dc5d00": "582b39", "ec6f00": "a62833", "c04a1c": "72142b", - "7c2506": "4a061d", - "cdcdde": "cdcdde", - "fefefe": "fefefe", - "6f625e": "6f625e" + "7c2506": "4a061d" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/611.json b/public/images/pokemon/variant/back/611.json index 9a803c28aeb..5f55d0c321f 100644 --- a/public/images/pokemon/variant/back/611.json +++ b/public/images/pokemon/variant/back/611.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "4a8c4a": "b52439", "314a29": "650b18", "426b3a": "98182b", @@ -8,14 +7,12 @@ "b52121": "737373", "737373": "3f3562", "3a3a3a": "2a0e29", - "ffffff": "ffffff", "de4242": "c4c4c3", "9c9c9c": "736198", "7b7b7b": "514776", "5a5a52": "342047" }, "2": { - "101010": "101010", "4a8c4a": "35679c", "314a29": "161736", "426b3a": "193769", @@ -23,7 +20,6 @@ "b52121": "1f4fbf", "737373": "681c2a", "3a3a3a": "2c0216", - "ffffff": "ffffff", "de4242": "417dc7", "9c9c9c": "983f50", "7b7b7b": "823140", diff --git a/public/images/pokemon/variant/back/612.json b/public/images/pokemon/variant/back/612.json index a4954b21424..1640dce9b33 100644 --- a/public/images/pokemon/variant/back/612.json +++ b/public/images/pokemon/variant/back/612.json @@ -1,7 +1,6 @@ { "1": { "520000": "383838", - "000000": "000000", "8c0000": "84847e", "424200": "330909", "a5ad19": "b52439", @@ -15,7 +14,6 @@ }, "2": { "520000": "0d1e7c", - "000000": "000000", "8c0000": "1f4fbf", "424200": "0d0e2a", "a5ad19": "193769", diff --git a/public/images/pokemon/variant/back/618.json b/public/images/pokemon/variant/back/618.json index d4db4967946..9c6c04064a3 100644 --- a/public/images/pokemon/variant/back/618.json +++ b/public/images/pokemon/variant/back/618.json @@ -3,16 +3,12 @@ "cebd00": "bdac99", "ffff00": "f3e6dd", "6b6319": "987b6d", - "081019": "081019", "52423a": "312118", "6b524a": "4a342a", "bd846b": "8c3841", "846b63": "6b3838", "d69c84": "ad4c4c", "efce42": "eac2bd", - "d6cec5": "d6cec5", - "ffffff": "ffffff", - "081018": "081018", "735a52": "564038", "735a53": "564038", "9c8473": "a08773", @@ -22,7 +18,6 @@ "cebd00": "58536b", "ffff00": "707488", "6b6319": "39314a", - "081019": "081019", "52423a": "5a2e2e", "6b524a": "804e48", "bd846b": "cec9b1", diff --git a/public/images/pokemon/variant/back/619.json b/public/images/pokemon/variant/back/619.json index 15e699cb554..05e6abc805b 100644 --- a/public/images/pokemon/variant/back/619.json +++ b/public/images/pokemon/variant/back/619.json @@ -1,6 +1,5 @@ { "1": { - "000000": "000000", "634a29": "5b3724", "ad9c4a": "a69384", "947b52": "72533f", @@ -10,12 +9,9 @@ "cebd7b": "faf2db", "de637b": "dd7736", "7b213a": "64171c", - "52525a": "572821", - "ffffff": "ffffff", - "73293a": "73293a" + "52525a": "572821" }, "2": { - "000000": "000000", "634a29": "52271a", "ad9c4a": "aa6b4e", "947b52": "8d3e21", @@ -26,7 +22,6 @@ "de637b": "764ebb", "7b213a": "2f1148", "52525a": "44172c", - "ffffff": "ffffff", "73293a": "3f1f5d" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/620.json b/public/images/pokemon/variant/back/620.json index 407d3dfd576..642c872d137 100644 --- a/public/images/pokemon/variant/back/620.json +++ b/public/images/pokemon/variant/back/620.json @@ -1,6 +1,5 @@ { "1": { - "000000": "000000", "524263": "80101d", "424242": "63332d", "b59c9c": "ddb2a5", @@ -8,14 +7,12 @@ "ad8cc5": "d8524a", "735263": "855348", "e6d6d6": "f3d9ce", - "4a2121": "4a2121", "a52121": "e1811a", "5a4231": "2a5a8c", "ce8c52": "4a86c5", "ffad63": "abe5ff" }, "2": { - "000000": "000000", "524263": "15244d", "424242": "3a193c", "b59c9c": "ba89a1", @@ -23,7 +20,6 @@ "ad8cc5": "3979ad", "735263": "654162", "e6d6d6": "e2b7db", - "4a2121": "4a2121", "a52121": "7b25cf", "5a4231": "8c0224", "ce8c52": "e61b42", diff --git a/public/images/pokemon/variant/back/6215.json b/public/images/pokemon/variant/back/6215.json index 741d6ddc0bb..db99eb822bf 100644 --- a/public/images/pokemon/variant/back/6215.json +++ b/public/images/pokemon/variant/back/6215.json @@ -6,12 +6,9 @@ "9c9bce": "ae8976", "514a80": "402010", "dcdbf7": "d0b3a4", - "080808": "080808", "28234b": "220d0a", "7d6ca4": "853a36", "584d80": "562627", - "f6f6ff": "f6f6ff", - "bdbdc5": "bdbdc5", "c52973": "ea903f" }, "2": { @@ -21,12 +18,9 @@ "9c9bce": "3c8775", "514a80": "14273a", "dcdbf7": "60ae7e", - "080808": "080808", "28234b": "0a191e", "7d6ca4": "395962", "584d80": "1c3942", - "f6f6ff": "f6f6ff", - "bdbdc5": "bdbdc5", "c52973": "f49633" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/622.json b/public/images/pokemon/variant/back/622.json index 97f38954bab..3144bbef1df 100644 --- a/public/images/pokemon/variant/back/622.json +++ b/public/images/pokemon/variant/back/622.json @@ -5,7 +5,6 @@ "84cece": "c78b3f", "004a52": "4c1b11", "106b63": "732d02", - "191921": "191921", "106b7b": "5f2b1b", "29848c": "76432c", "6b4200": "21111f", @@ -21,7 +20,6 @@ "84cece": "ad6352", "004a52": "350408", "106b63": "3a100d", - "191921": "191921", "106b7b": "4d090d", "29848c": "631111", "6b4200": "624b7a", diff --git a/public/images/pokemon/variant/back/633.json b/public/images/pokemon/variant/back/633.json index 8ce4cc2dc04..dd00d344bdf 100644 --- a/public/images/pokemon/variant/back/633.json +++ b/public/images/pokemon/variant/back/633.json @@ -1,7 +1,6 @@ { "1": { "292129": "140d35", - "101010": "101010", "5a5252": "4c297a", "525252": "4c297a", "423a42": "331c62", @@ -14,7 +13,6 @@ }, "2": { "292129": "1c2313", - "101010": "101010", "5a5252": "3a452d", "525252": "3a452d", "423a42": "2b351e", diff --git a/public/images/pokemon/variant/back/634.json b/public/images/pokemon/variant/back/634.json index 56d55acca5d..3cf9dc8670a 100644 --- a/public/images/pokemon/variant/back/634.json +++ b/public/images/pokemon/variant/back/634.json @@ -2,27 +2,21 @@ "1": { "292129": "140d35", "423a42": "331c62", - "101010": "101010", "525252": "4c297a", "3a63a5": "728197", "6394de": "bdd2e2", "19316b": "35475d", "632142": "1f4c90", - "9c3a6b": "3a80b8", - "adadad": "adadad", - "e6dede": "e6dede" + "9c3a6b": "3a80b8" }, "2": { "292129": "1c2313", "423a42": "2b351e", - "101010": "101010", "525252": "3a452d", "3a63a5": "a5a685", "6394de": "d9d9aa", "19316b": "6a6a51", "632142": "813530", - "9c3a6b": "ba5744", - "adadad": "adadad", - "e6dede": "e6dede" + "9c3a6b": "ba5744" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/635.json b/public/images/pokemon/variant/back/635.json index 750953e85e1..d0daca25363 100644 --- a/public/images/pokemon/variant/back/635.json +++ b/public/images/pokemon/variant/back/635.json @@ -3,13 +3,11 @@ "423a42": "331c62", "292129": "140d35", "525252": "4c297a", - "101010": "101010", "3a5a9c": "728197", "5a84ce": "bdd2e2", "9c4231": "bc3962", "19316b": "35475d", "732919": "7a1545", - "e6dede": "e6dede", "632142": "1f4c90", "bd527b": "65bfed", "8c2963": "3a80b8" @@ -18,13 +16,11 @@ "423a42": "2b351e", "292129": "1c2313", "525252": "3a452d", - "101010": "101010", "3a5a9c": "a5a685", "5a84ce": "d9d9aa", "9c4231": "950505", "19316b": "6a6a51", "732919": "640303", - "e6dede": "e6dede", "632142": "813530", "bd527b": "e78256", "8c2963": "ba5744" diff --git a/public/images/pokemon/variant/back/647-ordinary.json b/public/images/pokemon/variant/back/647-ordinary.json index a013f9fbb2f..65ca10d54d9 100644 --- a/public/images/pokemon/variant/back/647-ordinary.json +++ b/public/images/pokemon/variant/back/647-ordinary.json @@ -1,24 +1,17 @@ { "1": { "7b3129": "96711f", - "212121": "212121", "de4221": "fdbb3e", "ad3121": "c2912f", "314a8c": "c3382a", "19295a": "922517", "4a6bce": "ef4635", - "6b6b52": "6b6b52", - "fff7bd": "fff7bd", - "b5ad84": "b5ad84", "217ba5": "f15c5d", "63bdff": "f69284", - "525252": "525252", - "addeff": "fbcfcb", - "ffffff": "ffffff" + "addeff": "fbcfcb" }, "2": { "7b3129": "81304a", - "212121": "212121", "de4221": "de5d83", "ad3121": "a84564", "314a8c": "3b3160", @@ -29,8 +22,6 @@ "b5ad84": "b573a8", "217ba5": "b89edb", "63bdff": "e4d7ff", - "525252": "525252", - "addeff": "f1ecff", - "ffffff": "ffffff" + "addeff": "f1ecff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/647-resolute.json b/public/images/pokemon/variant/back/647-resolute.json index 2231d1dd79a..71b7ec5bbf7 100644 --- a/public/images/pokemon/variant/back/647-resolute.json +++ b/public/images/pokemon/variant/back/647-resolute.json @@ -1,7 +1,5 @@ { "1": { - "4a5252": "4a5252", - "101010": "101010", "843a29": "c2912f", "63bdff": "f69284", "ff9421": "d84a9a", @@ -10,15 +8,10 @@ "314a8c": "c3382a", "193163": "922517", "4a6bce": "ef4635", - "21848c": "be4848", - "635a29": "635a29", - "b5ad73": "b5ad73", - "fff7ad": "fff7ad", - "ffffff": "ffffff" + "21848c": "be4848" }, "2": { "4a5252": "6a4863", - "101010": "101010", "843a29": "81304a", "63bdff": "e4d7ff", "ff9421": "8571a4", @@ -30,7 +23,6 @@ "21848c": "b89edb", "635a29": "6a4863", "b5ad73": "b573a8", - "fff7ad": "d89cc6", - "ffffff": "ffffff" + "fff7ad": "d89cc6" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/648-pirouette.json b/public/images/pokemon/variant/back/648-pirouette.json index 194c63c30d4..c62deec8e21 100644 --- a/public/images/pokemon/variant/back/648-pirouette.json +++ b/public/images/pokemon/variant/back/648-pirouette.json @@ -21,14 +21,11 @@ "4a423a": "413429", "84736b": "83685b", "101010": "1a1313", - "73423a": "73423a", "423131": "553a35", "635a52": "625246", "c5b594": "c9b190", "fffff7": "fff4e0", - "947b5a": "947b5a", "f7527b": "986752", - "c5315a": "553a35", - "5a5252": "5a5252" + "c5315a": "553a35" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/649-burn.json b/public/images/pokemon/variant/back/649-burn.json index 18dd2d964ce..1c73e9602ae 100644 --- a/public/images/pokemon/variant/back/649-burn.json +++ b/public/images/pokemon/variant/back/649-burn.json @@ -5,13 +5,9 @@ "9c5ac5": "7baec3", "73428c": "4084c0", "ceb5ff": "87feff", - "5a2110": "5a2110", - "a53121": "a53121", "a584bd": "62c4e6", - "ef2100": "ef2100", "733129": "26a624", "f75221": "ddffb0", - "ffffff": "ffffff", "b54221": "97e083" }, "2": { @@ -20,13 +16,9 @@ "9c5ac5": "484553", "73428c": "312f42", "ceb5ff": "f56e6e", - "5a2110": "5a2110", - "a53121": "a53121", "a584bd": "b72852", - "ef2100": "ef2100", "733129": "91283b", "f75221": "ff9b90", - "ffffff": "ffffff", "b54221": "c9514e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/649-chill.json b/public/images/pokemon/variant/back/649-chill.json index 7f8988d6a76..ed8bb05fdfc 100644 --- a/public/images/pokemon/variant/back/649-chill.json +++ b/public/images/pokemon/variant/back/649-chill.json @@ -5,10 +5,7 @@ "9c5ac5": "7baec3", "73428c": "4084c0", "ceb5ff": "87feff", - "42423a": "42423a", - "a5a5ad": "a5a5ad", "a584bd": "62c4e6", - "ffffff": "ffffff", "733129": "26a624", "f75221": "ddffb0", "b54221": "97e083" @@ -19,10 +16,7 @@ "9c5ac5": "484553", "73428c": "312f42", "ceb5ff": "ccf7fe", - "42423a": "42423a", - "a5a5ad": "a5a5ad", "a584bd": "8dc7e3", - "ffffff": "ffffff", "733129": "4b8fba", "f75221": "aafaff", "b54221": "7cc9e0" diff --git a/public/images/pokemon/variant/back/649-douse.json b/public/images/pokemon/variant/back/649-douse.json index f00fbdd66cc..80b4a7a5a51 100644 --- a/public/images/pokemon/variant/back/649-douse.json +++ b/public/images/pokemon/variant/back/649-douse.json @@ -5,13 +5,9 @@ "9c5ac5": "7baec3", "73428c": "4084c0", "ceb5ff": "87feff", - "00424a": "00424a", - "0084b5": "0084b5", "a584bd": "62c4e6", - "00ceff": "00ceff", "733129": "26a624", "f75221": "ddffb0", - "ffffff": "ffffff", "b54221": "97e083" }, "2": { @@ -20,13 +16,9 @@ "9c5ac5": "484553", "73428c": "312f42", "ceb5ff": "7bbde3", - "00424a": "00424a", - "0084b5": "0084b5", "a584bd": "4994da", - "00ceff": "00ceff", "733129": "2048bd", "f75221": "a4c8ff", - "ffffff": "ffffff", "b54221": "6c92e0" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/649-shock.json b/public/images/pokemon/variant/back/649-shock.json index e6dfbe5d6e0..feaf84a8a08 100644 --- a/public/images/pokemon/variant/back/649-shock.json +++ b/public/images/pokemon/variant/back/649-shock.json @@ -5,13 +5,9 @@ "9c5ac5": "7baec3", "73428c": "4084c0", "ceb5ff": "87feff", - "4a4208": "4a4208", - "b5b500": "b5b500", "a584bd": "62c4e6", - "deff00": "deff00", "733129": "26a624", "f75221": "ddffb0", - "ffffff": "ffffff", "b54221": "97e083" }, "2": { @@ -20,13 +16,9 @@ "9c5ac5": "484553", "73428c": "312f42", "ceb5ff": "ffee5e", - "4a4208": "4a4208", - "b5b500": "b5b500", "a584bd": "ecb549", - "deff00": "deff00", "733129": "c69634", "f75221": "fff7aa", - "ffffff": "ffffff", "b54221": "eccc67" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/649.json b/public/images/pokemon/variant/back/649.json index fcee232a8c3..c31b7bf27f2 100644 --- a/public/images/pokemon/variant/back/649.json +++ b/public/images/pokemon/variant/back/649.json @@ -5,13 +5,9 @@ "9c5ac5": "7baec3", "73428c": "4084c0", "ceb5ff": "87feff", - "6b4a08": "6b4a08", - "c58400": "c58400", "a584bd": "62c4e6", - "efbd00": "efbd00", "733129": "26a624", "f75221": "ddffb0", - "ffffff": "ffffff", "b54221": "97e083" }, "2": { @@ -20,13 +16,9 @@ "9c5ac5": "484553", "73428c": "312f42", "ceb5ff": "f7ae6a", - "6b4a08": "6b4a08", - "c58400": "c58400", "a584bd": "e2854c", - "efbd00": "efbd00", "733129": "c6684b", "f75221": "fbba7f", - "ffffff": "ffffff", "b54221": "e0875a" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/653.json b/public/images/pokemon/variant/back/653.json index f7761fa32b1..acbc4c24d67 100644 --- a/public/images/pokemon/variant/back/653.json +++ b/public/images/pokemon/variant/back/653.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "736028": "9f398a", "ffd659": "e190c3", "ccab47": "c35ba3", @@ -12,7 +11,6 @@ "f8f8f8": "fbecff" }, "2": { - "101010": "101010", "736028": "172547", "ffd659": "3a6a93", "ccab47": "264166", diff --git a/public/images/pokemon/variant/back/654.json b/public/images/pokemon/variant/back/654.json index cc8722209f8..d9fc958239e 100644 --- a/public/images/pokemon/variant/back/654.json +++ b/public/images/pokemon/variant/back/654.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "736028": "481332", "ccab47": "682546", "ffd659": "a85789", @@ -10,12 +9,9 @@ "737373": "5c255f", "f8f8f8": "e7caef", "804913": "c5b3ca", - "bfbfbf": "c093c3", - "262626": "262626", - "404040": "404040" + "bfbfbf": "c093c3" }, "2": { - "101010": "101010", "736028": "061530", "ccab47": "173864", "ffd659": "2b5f8a", @@ -25,8 +21,6 @@ "737373": "75553c", "f8f8f8": "fff2dd", "804913": "098794", - "bfbfbf": "d4b996", - "262626": "262626", - "404040": "404040" + "bfbfbf": "d4b996" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/6549.json b/public/images/pokemon/variant/back/6549.json index 230d54b1777..e5bf44b1c5a 100644 --- a/public/images/pokemon/variant/back/6549.json +++ b/public/images/pokemon/variant/back/6549.json @@ -2,35 +2,27 @@ "1": { "70365a": "29547d", "ff84bd": "73bad9", - "101010": "101010", "bd59a2": "5094c0", "bda452": "77909a", "ffde41": "b6c7cc", "526229": "80152b", "ffbbdb": "b5ddea", - "fdfdfd": "fdfdfd", "315a31": "5a5a2c", "39ac39": "bfd17f", "4a834a": "8e954d", "9cb462": "bd2d40", - "c5ee7b": "ef5755", - "cdc5bd": "cdc5bd" + "c5ee7b": "ef5755" }, "2": { "70365a": "8a1a3c", "ff84bd": "e8617a", - "101010": "101010", "bd59a2": "d64065", - "bda452": "bda452", - "ffde41": "ffde41", "526229": "351c49", "ffbbdb": "f38e9c", - "fdfdfd": "fdfdfd", "315a31": "643312", "39ac39": "ebc460", "4a834a": "9d7d45", "9cb462": "5d3576", - "c5ee7b": "834c9b", - "cdc5bd": "cdc5bd" + "c5ee7b": "834c9b" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/655.json b/public/images/pokemon/variant/back/655.json index cacae9a43d5..2232880aaba 100644 --- a/public/images/pokemon/variant/back/655.json +++ b/public/images/pokemon/variant/back/655.json @@ -6,11 +6,8 @@ "79280f": "4d1681", "816528": "331035", "ffda5a": "e7caef", - "000000": "000000", "deb048": "c093c3", "a7673a": "a58dab", - "bfbfbf": "bfbfbf", - "6e6d6a": "6e6d6a", "893027": "872b59", "62211b": "550c28", "ae3d32": "b55390" @@ -22,11 +19,8 @@ "79280f": "005646", "816528": "75553c", "ffda5a": "fff2dd", - "000000": "000000", "deb048": "d4b996", "a7673a": "098794", - "bfbfbf": "bfbfbf", - "6e6d6a": "6e6d6a", "893027": "173864", "62211b": "101010", "ae3d32": "2b5f8a" diff --git a/public/images/pokemon/variant/back/6570.json b/public/images/pokemon/variant/back/6570.json index b42d9780a3b..13dd8b85012 100644 --- a/public/images/pokemon/variant/back/6570.json +++ b/public/images/pokemon/variant/back/6570.json @@ -7,7 +7,6 @@ "f7acae": "ffd291", "4a4d53": "3b2b4f", "fafafa": "efd9d9", - "101010": "101010", "b3b3bb": "d6b7b1", "928d96": "504b6a", "cbcfd8": "7b7897", @@ -22,7 +21,6 @@ "f7acae": "79d38d", "4a4d53": "6f4332", "fafafa": "f0decd", - "101010": "101010", "b3b3bb": "c6ab99", "928d96": "995d3e", "cbcfd8": "d79568", diff --git a/public/images/pokemon/variant/back/6571.json b/public/images/pokemon/variant/back/6571.json index fe8a33a5133..971faa8a4cb 100644 --- a/public/images/pokemon/variant/back/6571.json +++ b/public/images/pokemon/variant/back/6571.json @@ -1,7 +1,6 @@ { "1": { "942429": "4a1921", - "101010": "101010", "d53a3e": "782d41", "928d96": "4a4759", "f07376": "b44d63", @@ -17,7 +16,6 @@ }, "2": { "942429": "143130", - "101010": "101010", "d53a3e": "265a52", "928d96": "885f49", "f07376": "4e867b", @@ -28,7 +26,6 @@ "a7484f": "2a6062", "5f0002": "072222", "cbcfd8": "bc9072", - "6d4d62": "c2589c", - "4b163b": "4b163b" + "6d4d62": "c2589c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/664.json b/public/images/pokemon/variant/back/664.json index b4b1dbcc26a..f19fae75071 100644 --- a/public/images/pokemon/variant/back/664.json +++ b/public/images/pokemon/variant/back/664.json @@ -2,7 +2,6 @@ "1": { "737373": "9c615f", "f2f2f2": "ffffff", - "101010": "101010", "b3b3b3": "e9c7c4", "262626": "4c2855", "404040": "895a9f", @@ -14,7 +13,6 @@ "2": { "737373": "590015", "f2f2f2": "c83e4c", - "101010": "101010", "b3b3b3": "a70d37", "262626": "05312f", "404040": "377772", diff --git a/public/images/pokemon/variant/back/665.json b/public/images/pokemon/variant/back/665.json index c5defbab5b7..de52892d922 100644 --- a/public/images/pokemon/variant/back/665.json +++ b/public/images/pokemon/variant/back/665.json @@ -1,11 +1,9 @@ { "1": { - "363636": "363636", "d1bf6b": "a0c896", "8c8c8c": "895a9f", "bfbfbf": "a97dbb", "9d7247": "838b53", - "101010": "101010", "4d4d4d": "9c615f", "b3b3b3": "e9c7c4", "f8f8f8": "ffffff", @@ -19,7 +17,6 @@ "8c8c8c": "590015", "bfbfbf": "a70d37", "9d7247": "dda476", - "101010": "101010", "4d4d4d": "590015", "b3b3b3": "a70d37", "f8f8f8": "c83e4c", diff --git a/public/images/pokemon/variant/back/666-archipelago.json b/public/images/pokemon/variant/back/666-archipelago.json index 88f2fdca3f6..3b5397ac3e6 100644 --- a/public/images/pokemon/variant/back/666-archipelago.json +++ b/public/images/pokemon/variant/back/666-archipelago.json @@ -1,34 +1,19 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "c8373c": "c8373c", - "30c171": "30c171", - "d2bf96": "d2bf96", "303030": "402746", - "c27351": "c27351", "ceab62": "d9edd4", "675220": "958c8a", "707068": "a97cbc", - "a2523b": "a2523b", - "504a4a": "7f6991", - "c3c3c3": "c3c3c3", - "b28e67": "b28e67" + "504a4a": "7f6991" }, "2": { - "101010": "101010", "595959": "824719", - "c8373c": "c8373c", - "30c171": "30c171", - "d2bf96": "d2bf96", "303030": "642703", - "c27351": "c27351", "ceab62": "a22414", "675220": "741300", "707068": "a22414", - "a2523b": "a2523b", "504a4a": "741300", - "c3c3c3": "e7caa5", - "b28e67": "b28e67" + "c3c3c3": "e7caa5" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/666-continental.json b/public/images/pokemon/variant/back/666-continental.json index c28da572185..3a023b45433 100644 --- a/public/images/pokemon/variant/back/666-continental.json +++ b/public/images/pokemon/variant/back/666-continental.json @@ -1,34 +1,19 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "d18257": "d18257", "303030": "402746", - "f9bd55": "f9bd55", - "f8f05e": "f8f05e", - "d24c3e": "d24c3e", "ceab62": "d9edd4", "675220": "958c8a", - "aa5844": "aa5844", "707068": "a97cbc", - "504a4a": "7f6991", - "c3c3c3": "c3c3c3", - "e08528": "e08528" + "504a4a": "7f6991" }, "2": { - "101010": "101010", "595959": "8f551e", - "d18257": "d18257", "303030": "6d2d0d", - "f9bd55": "f9bd55", - "f8f05e": "f8f05e", - "d24c3e": "d24c3e", "ceab62": "e99b44", "675220": "9c5c19", - "aa5844": "aa5844", "707068": "e99b44", "504a4a": "9c5c19", - "c3c3c3": "f8f27f", - "e08528": "e08528" + "c3c3c3": "f8f27f" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/666-elegant.json b/public/images/pokemon/variant/back/666-elegant.json index bfccf82b7fc..c641b655843 100644 --- a/public/images/pokemon/variant/back/666-elegant.json +++ b/public/images/pokemon/variant/back/666-elegant.json @@ -1,33 +1,18 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "e6ddf8": "e6ddf8", - "cf7ef3": "cf7ef3", - "f8de3f": "f8de3f", "303030": "402746", - "875fb5": "875fb5", - "de4040": "de4040", "ceab62": "d9edd4", "675220": "958c8a", "707068": "a97cbc", - "56479d": "56479d", - "504a4a": "7f6991", - "c3c3c3": "c3c3c3" + "504a4a": "7f6991" }, "2": { - "101010": "101010", "595959": "612776", - "e6ddf8": "e6ddf8", - "cf7ef3": "cf7ef3", - "f8de3f": "f8de3f", "303030": "351262", - "875fb5": "875fb5", - "de4040": "de4040", "ceab62": "a73fab", "675220": "7d1083", "707068": "a73fab", - "56479d": "56479d", "504a4a": "7d1083", "c3c3c3": "f0ecff" } diff --git a/public/images/pokemon/variant/back/666-fancy.json b/public/images/pokemon/variant/back/666-fancy.json index 5d368667ae3..6f20a0dc3bb 100644 --- a/public/images/pokemon/variant/back/666-fancy.json +++ b/public/images/pokemon/variant/back/666-fancy.json @@ -1,36 +1,22 @@ { - "1": { - "101010": "101010", - "303030": "402746", - "675220": "958c8a", - "504a4a": "7f6991", - "595959": "724b7a", - "707068": "a97cbc", - "de4040": "de4040", - "5faa3e": "5faa3e", - "ceab62": "d9edd4", - "b6d26d": "b6d26d", - "e9e052": "e9e052", - "cf7ef3": "cf7ef3", - "c3c3c3": "ffeaff", - "f2d4e3": "f2d4e3", - "ead2e3": "ffeaff" - }, - "2": { - "101010": "101010", - "303030": "00771b", - "675220": "b9c05a", - "504a4a": "b9c05a", - "595959": "6f9f42", - "707068": "6f9f42", - "de4040": "de4040", - "5faa3e": "5faa3e", - "ceab62": "e3e982", - "b6d26d": "b6d26d", - "e9e052": "e9e052", - "cf7ef3": "cf7ef3", - "c3c3c3": "fcf1ff", - "f2d4e3": "f2d4e3", - "ead2e3": "fcf1ff" - } + "1": { + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "ceab62": "d9edd4", + "c3c3c3": "ffeaff", + "ead2e3": "ffeaff" + }, + "2": { + "303030": "00771b", + "675220": "b9c05a", + "504a4a": "b9c05a", + "595959": "6f9f42", + "707068": "6f9f42", + "ceab62": "e3e982", + "c3c3c3": "fcf1ff", + "ead2e3": "fcf1ff" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/666-garden.json b/public/images/pokemon/variant/back/666-garden.json index 57dd83db8e9..26d8098a6fd 100644 --- a/public/images/pokemon/variant/back/666-garden.json +++ b/public/images/pokemon/variant/back/666-garden.json @@ -1,31 +1,18 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "398351": "398351", - "3dba96": "3dba96", "303030": "402746", - "88d254": "88d254", "ceab62": "d9edd4", "675220": "958c8a", - "de4040": "de4040", "707068": "a97cbc", - "3f919a": "3f919a", - "504a4a": "7f6991", - "c3c3c3": "c3c3c3" + "504a4a": "7f6991" }, "2": { - "101010": "101010", "595959": "006b55", - "398351": "398351", - "3dba96": "3dba96", "303030": "044553", - "88d254": "88d254", "ceab62": "227687", "675220": "055160", - "de4040": "de4040", "707068": "227687", - "3f919a": "3f919a", "504a4a": "055160", "c3c3c3": "72d0a3" } diff --git a/public/images/pokemon/variant/back/666-high-plains.json b/public/images/pokemon/variant/back/666-high-plains.json index 6ee5c78e6ca..0271aa89d50 100644 --- a/public/images/pokemon/variant/back/666-high-plains.json +++ b/public/images/pokemon/variant/back/666-high-plains.json @@ -1,36 +1,19 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "f3a861": "f3a861", - "9a5a3b": "9a5a3b", "303030": "402746", - "e1764e": "e1764e", - "aa4343": "aa4343", "ceab62": "d9edd4", "675220": "958c8a", "707068": "a97cbc", - "504a4a": "7f6991", - "c3c3c3": "c3c3c3", - "337543": "337543", - "e8c815": "e8c815", - "773d21": "773d21" + "504a4a": "7f6991" }, "2": { - "101010": "101010", "595959": "a55422", - "f3a861": "f3a861", - "9a5a3b": "9a5a3b", "303030": "8f1d19", - "e1764e": "e1764e", - "aa4343": "aa4343", "ceab62": "f2975a", "675220": "c97034", "707068": "f2975a", "504a4a": "c97034", - "c3c3c3": "edc67c", - "337543": "337543", - "e8c815": "e8c815", - "773d21": "773d21" + "c3c3c3": "edc67c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/666-icy-snow.json b/public/images/pokemon/variant/back/666-icy-snow.json index 24fc6ef23b1..4b944b84227 100644 --- a/public/images/pokemon/variant/back/666-icy-snow.json +++ b/public/images/pokemon/variant/back/666-icy-snow.json @@ -1,32 +1,19 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "f0f0f8": "f0f0f8", - "cfd9cf": "cfd9cf", "303030": "402746", - "c5c5da": "c5c5da", "ceab62": "d9edd4", "675220": "958c8a", "707068": "a97cbc", - "504a4a": "7f6991", - "acacc2": "acacc2", - "95a1a1": "95a1a1", - "c3c3c3": "c3c3c3" + "504a4a": "7f6991" }, "2": { - "101010": "101010", "595959": "60646a", - "f0f0f8": "f0f0f8", - "cfd9cf": "cfd9cf", "303030": "364051", - "c5c5da": "c5c5da", "ceab62": "8c91a4", "675220": "666b7d", "707068": "8c91a4", "504a4a": "666b7d", - "acacc2": "acacc2", - "95a1a1": "95a1a1", "c3c3c3": "fefeff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/666-jungle.json b/public/images/pokemon/variant/back/666-jungle.json index 08d50d8afa6..3d1932e0564 100644 --- a/public/images/pokemon/variant/back/666-jungle.json +++ b/public/images/pokemon/variant/back/666-jungle.json @@ -1,34 +1,19 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "638c63": "638c63", - "7cc48b": "7cc48b", "303030": "402746", "ceab62": "d9edd4", "675220": "958c8a", - "567456": "567456", "504a4a": "7f6991", - "707068": "a97cbc", - "c3c3c3": "c3c3c3", - "724e28": "724e28", - "9a653e": "9a653e", - "c29566": "c29566" + "707068": "a97cbc" }, "2": { - "101010": "101010", "595959": "285b3b", - "638c63": "638c63", - "7cc48b": "7cc48b", "303030": "20452e", "ceab62": "385c43", "675220": "153922", - "567456": "567456", "504a4a": "153922", "707068": "385c43", - "c3c3c3": "a9d9a0", - "724e28": "724e28", - "9a653e": "9a653e", - "c29566": "c29566" + "c3c3c3": "a9d9a0" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/666-marine.json b/public/images/pokemon/variant/back/666-marine.json index feadbcb8307..ef344010316 100644 --- a/public/images/pokemon/variant/back/666-marine.json +++ b/public/images/pokemon/variant/back/666-marine.json @@ -1,30 +1,17 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "2f8dc9": "2f8dc9", - "5acdf1": "5acdf1", "303030": "402746", "ceab62": "d9edd4", "675220": "958c8a", - "f2f2f2": "f2f2f2", - "367cb9": "367cb9", - "315382": "315382", "707068": "a97cbc", - "504a4a": "7f6991", - "c3c3c3": "c3c3c3" + "504a4a": "7f6991" }, "2": { - "101010": "101010", "595959": "2a5894", - "2f8dc9": "2f8dc9", - "5acdf1": "5acdf1", "303030": "16244f", "ceab62": "3070af", "675220": "264c85", - "f2f2f2": "f2f2f2", - "367cb9": "367cb9", - "315382": "315382", "707068": "3070af", "504a4a": "264c85", "c3c3c3": "f2f2f2" diff --git a/public/images/pokemon/variant/back/666-meadow.json b/public/images/pokemon/variant/back/666-meadow.json index 54a620a47f6..135e7630d23 100644 --- a/public/images/pokemon/variant/back/666-meadow.json +++ b/public/images/pokemon/variant/back/666-meadow.json @@ -1,33 +1,18 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "da6b7e": "da6b7e", - "f3a0ca": "f3a0ca", "303030": "402746", "ceab62": "d9edd4", "675220": "958c8a", - "b4295a": "b4295a", - "2d9b9b": "2d9b9b", - "f2f2f2": "f2f2f2", "707068": "a97cbc", - "e66fad": "e66fad", - "504a4a": "7f6991", - "c3c3c3": "c3c3c3" + "504a4a": "7f6991" }, "2": { - "101010": "101010", "595959": "9e3941", - "da6b7e": "da6b7e", - "f3a0ca": "f3a0ca", "303030": "770921", "ceab62": "ce5283", "675220": "a2275e", - "b4295a": "b4295a", - "2d9b9b": "2d9b9b", - "f2f2f2": "f2f2f2", "707068": "ce5283", - "e66fad": "e66fad", "504a4a": "a2275e", "c3c3c3": "f4c2ec" } diff --git a/public/images/pokemon/variant/back/666-modern.json b/public/images/pokemon/variant/back/666-modern.json index ab03985576c..88df6a6a10a 100644 --- a/public/images/pokemon/variant/back/666-modern.json +++ b/public/images/pokemon/variant/back/666-modern.json @@ -1,34 +1,19 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "c3c3c3": "c3c3c3", - "3b6cbb": "3b6cbb", - "f44f4f": "f44f4f", "303030": "402746", - "f8f05c": "f8f05c", "ceab62": "d9edd4", "675220": "958c8a", - "cfc5d9": "cfc5d9", - "b83c3c": "b83c3c", "707068": "a97cbc", - "504a4a": "7f6991", - "405793": "405793" + "504a4a": "7f6991" }, "2": { - "101010": "101010", "595959": "830012", "c3c3c3": "ffeae8", - "3b6cbb": "3b6cbb", - "f44f4f": "f44f4f", "303030": "4e0000", - "f8f05c": "f8f05c", "ceab62": "ad2640", "675220": "801521", - "cfc5d9": "cfc5d9", - "b83c3c": "b83c3c", "707068": "ad2640", - "504a4a": "801521", - "405793": "405793" + "504a4a": "801521" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/666-monsoon.json b/public/images/pokemon/variant/back/666-monsoon.json index 915d471b2b1..5a127a43bbe 100644 --- a/public/images/pokemon/variant/back/666-monsoon.json +++ b/public/images/pokemon/variant/back/666-monsoon.json @@ -1,33 +1,19 @@ { - "1": { - "101010": "101010", - "303030": "402746", - "675220": "958c8a", - "504a4a": "7f6991", - "595959": "724b7a", - "707068": "a97cbc", - "807676": "807676", - "ceab62": "d9edd4", - "5676de": "5676de", - "4eccd6": "4eccd6", - "989898": "989898", - "c3c3c3": "c3c3c3", - "f0f0f8": "f0f0f8" - }, - "2": { - "101010": "101010", - "303030": "3d3231", - "675220": "2c3593", - "504a4a": "2c3593", - "595959": "4f4645", - "707068": "5857bc", - "807676": "807676", - "ceab62": "5857bc", - "5676de": "5676de", - "4eccd6": "4eccd6", - "989898": "989898", - "92f4f4": "92f4f4", - "c3c3c3": "b8f9f9", - "f0f0f8": "f0f0f8" - } + "1": { + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "ceab62": "d9edd4" + }, + "2": { + "303030": "3d3231", + "675220": "2c3593", + "504a4a": "2c3593", + "595959": "4f4645", + "707068": "5857bc", + "ceab62": "5857bc", + "c3c3c3": "b8f9f9" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/666-ocean.json b/public/images/pokemon/variant/back/666-ocean.json index 8b62b4a8072..a5ba9408104 100644 --- a/public/images/pokemon/variant/back/666-ocean.json +++ b/public/images/pokemon/variant/back/666-ocean.json @@ -1,34 +1,18 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "e1384d": "e1384d", - "f4ad61": "f4ad61", - "f8ef6a": "f8ef6a", "303030": "402746", - "ceb362": "ceb362", "675220": "958c8a", - "ebcf3f": "ebcf3f", "707068": "a97cbc", - "504a4a": "7f6991", - "c3c3c3": "c3c3c3", - "4482c9": "4482c9", - "6bb2e9": "6bb2e9" + "504a4a": "7f6991" }, "2": { - "101010": "101010", "595959": "e99a26", - "e1384d": "e1384d", - "f4ad61": "f4ad61", - "f8ef6a": "f8ef6a", "303030": "b54908", "ceb362": "ea8742", "675220": "bc601c", - "ebcf3f": "ebcf3f", "707068": "ea8742", "504a4a": "bc601c", - "c3c3c3": "f3c86b", - "4482c9": "4482c9", - "6bb2e9": "6bb2e9" + "c3c3c3": "f3c86b" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/666-poke-ball.json b/public/images/pokemon/variant/back/666-poke-ball.json index 002bcdde6aa..3712ad1a20b 100644 --- a/public/images/pokemon/variant/back/666-poke-ball.json +++ b/public/images/pokemon/variant/back/666-poke-ball.json @@ -1,22 +1,13 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "b72c2c": "b72c2c", "303030": "402746", - "dc4b4b": "dc4b4b", "ceab62": "d9edd4", "675220": "958c8a", - "e97e7e": "e97e7e", - "971d1d": "971d1d", - "f8f8f8": "f8f8f8", "707068": "a97cbc", - "504a4a": "7f6991", - "c3c3c3": "c3c3c3", - "a9a99e": "a9a99e" + "504a4a": "7f6991" }, "2": { - "101010": "101010", "595959": "df0036", "b72c2c": "00005e", "303030": "ae001a", diff --git a/public/images/pokemon/variant/back/666-polar.json b/public/images/pokemon/variant/back/666-polar.json index 7c72f32ed24..fd76c92ae7b 100644 --- a/public/images/pokemon/variant/back/666-polar.json +++ b/public/images/pokemon/variant/back/666-polar.json @@ -1,34 +1,19 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "4d6cc1": "4d6cc1", - "f0f0f8": "f0f0f8", "303030": "402746", - "3b4b8a": "3b4b8a", - "bfbfbf": "bfbfbf", "ceab62": "d9edd4", "675220": "958c8a", "707068": "a97cbc", - "504a4a": "7f6991", - "2d2d61": "2d2d61", - "c3c3c3": "c3c3c3", - "6aa2dc": "6aa2dc" + "504a4a": "7f6991" }, "2": { - "101010": "101010", "595959": "2f3887", - "4d6cc1": "4d6cc1", - "f0f0f8": "f0f0f8", "303030": "191b54", - "3b4b8a": "3b4b8a", - "bfbfbf": "bfbfbf", "ceab62": "5f85c1", "675220": "366098", "707068": "5f85c1", "504a4a": "366098", - "2d2d61": "2d2d61", - "c3c3c3": "ffffff", - "6aa2dc": "6aa2dc" + "c3c3c3": "ffffff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/666-river.json b/public/images/pokemon/variant/back/666-river.json index c7e5e288d05..5ba0084df9d 100644 --- a/public/images/pokemon/variant/back/666-river.json +++ b/public/images/pokemon/variant/back/666-river.json @@ -1,40 +1,18 @@ { - "1": { - "101010": "101010", - "303030": "402746", - "4a412c": "4a412c", - "675220": "958c8a", - "634d20": "634d20", - "1d726a": "1d726a", - "504a4a": "7f6991", - "595959": "724b7a", - "625841": "625841", - "707068": "a97cbc", - "bc813f": "bc813f", - "9c9143": "9c9143", - "ceab62": "ceab62", - "279ec2": "279ec2", - "59c9d3": "59c9d3", - "c3c3c3": "c3c3c3", - "d2a862": "d9edd4" - }, - "2": { - "101010": "101010", - "303030": "7b2800", - "4a412c": "4a412c", - "675220": "ae7f41", - "634d20": "634d20", - "1d726a": "1d726a", - "504a4a": "ae7f41", - "595959": "8a5702", - "625841": "625841", - "707068": "d9a666", - "bc813f": "bc813f", - "9c9143": "9c9143", - "ceab62": "ceab62", - "279ec2": "279ec2", - "59c9d3": "59c9d3", - "c3c3c3": "e3c384", - "d2a862": "d2a862" - } + "1": { + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "d2a862": "d9edd4" + }, + "2": { + "303030": "7b2800", + "675220": "ae7f41", + "504a4a": "ae7f41", + "595959": "8a5702", + "707068": "d9a666", + "c3c3c3": "e3c384" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/666-sandstorm.json b/public/images/pokemon/variant/back/666-sandstorm.json index 63b0661e2fb..66f333b87be 100644 --- a/public/images/pokemon/variant/back/666-sandstorm.json +++ b/public/images/pokemon/variant/back/666-sandstorm.json @@ -1,34 +1,19 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "f1d69e": "f1d69e", - "625843": "625843", "303030": "402746", - "ba8d68": "ba8d68", - "9b9148": "9b9148", "ceab62": "d9edd4", "675220": "958c8a", - "d9b674": "d9b674", "707068": "a97cbc", - "504a4a": "7f6991", - "c3c3c3": "c3c3c3", - "72604d": "72604d" + "504a4a": "7f6991" }, "2": { - "101010": "101010", "595959": "88583e", - "f1d69e": "f1d69e", - "625843": "625843", "303030": "443123", - "ba8d68": "ba8d68", - "9b9148": "9b9148", "ceab62": "c6975f", "675220": "9c703b", - "d9b674": "d9b674", "707068": "c6975f", "504a4a": "9c703b", - "c3c3c3": "ece1a9", - "72604d": "72604d" + "c3c3c3": "ece1a9" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/666-savanna.json b/public/images/pokemon/variant/back/666-savanna.json index 2fa9a25e5ca..462946135a9 100644 --- a/public/images/pokemon/variant/back/666-savanna.json +++ b/public/images/pokemon/variant/back/666-savanna.json @@ -1,33 +1,18 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "61a0f5": "61a0f5", - "fffd77": "fffd77", "303030": "402746", - "55d3d9": "55d3d9", "ceab62": "d9edd4", "675220": "958c8a", - "dcc433": "dcc433", - "3b67ac": "3b67ac", "707068": "a97cbc", - "6cc6c6": "6cc6c6", - "504a4a": "7f6991", - "c3c3c3": "c3c3c3" + "504a4a": "7f6991" }, "2": { - "101010": "101010", "595959": "4168bb", - "61a0f5": "61a0f5", - "fffd77": "fffd77", "303030": "183576", - "55d3d9": "55d3d9", "ceab62": "4faab3", "675220": "1d828b", - "dcc433": "dcc433", - "3b67ac": "3b67ac", "707068": "4faab3", - "6cc6c6": "6cc6c6", "504a4a": "1d828b", "c3c3c3": "81e7e1" } diff --git a/public/images/pokemon/variant/back/666-sun.json b/public/images/pokemon/variant/back/666-sun.json index 4142b1d2643..daaf2ca1932 100644 --- a/public/images/pokemon/variant/back/666-sun.json +++ b/public/images/pokemon/variant/back/666-sun.json @@ -1,32 +1,17 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "f1a26a": "f1a26a", - "f47491": "f47491", - "f0ce44": "f0ce44", - "fcf372": "fcf372", "303030": "402746", "ceab62": "d9edd4", "675220": "958c8a", - "e18248": "e18248", - "c94971": "c94971", "707068": "a97cbc", - "504a4a": "7f6991", - "c3c3c3": "c3c3c3" + "504a4a": "7f6991" }, "2": { - "101010": "101010", "595959": "750500", - "f1a26a": "f1a26a", - "f47491": "f47491", - "f0ce44": "f0ce44", - "fcf372": "fcf372", "303030": "640000", "ceab62": "b83b74", "675220": "8c1850", - "e18248": "e18248", - "c94971": "c94971", "707068": "b83b74", "504a4a": "8c1850", "c3c3c3": "fee3e7" diff --git a/public/images/pokemon/variant/back/666-tundra.json b/public/images/pokemon/variant/back/666-tundra.json index 3e85b8021ad..06e16ee3f2f 100644 --- a/public/images/pokemon/variant/back/666-tundra.json +++ b/public/images/pokemon/variant/back/666-tundra.json @@ -1,32 +1,19 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "a3def1": "a3def1", - "f0f0f8": "f0f0f8", "303030": "402746", - "74bbe9": "74bbe9", - "d0d0d0": "d0d0d0", "ceab62": "d9edd4", "675220": "958c8a", "707068": "a97cbc", - "504a4a": "7f6991", - "539ad9": "539ad9", - "c3c3c3": "c3c3c3" + "504a4a": "7f6991" }, "2": { - "101010": "101010", "595959": "225b72", - "a3def1": "a3def1", - "f0f0f8": "f0f0f8", "303030": "003d69", - "74bbe9": "74bbe9", - "d0d0d0": "d0d0d0", "ceab62": "659dd0", "675220": "3a76a7", "707068": "659dd0", "504a4a": "3a76a7", - "539ad9": "539ad9", "c3c3c3": "cbfbfb" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/669-blue.json b/public/images/pokemon/variant/back/669-blue.json index 758b01c48f8..bd164f701d5 100644 --- a/public/images/pokemon/variant/back/669-blue.json +++ b/public/images/pokemon/variant/back/669-blue.json @@ -3,10 +3,6 @@ "665a1f": "230e63", "ffe14c": "4d37d5", "ccb43d": "3c118e", - "595959": "595959", - "bfbfbf": "bfbfbf", - "f8f8f8": "f8f8f8", - "101010": "101010", "65a943": "e493a1", "266280": "200e5c", "61c2f2": "4d72d5", @@ -21,7 +17,6 @@ "595959": "32448e", "bfbfbf": "a5c3ea", "f8f8f8": "dff2ff", - "101010": "101010", "65a943": "33a2bf", "266280": "215510", "61c2f2": "afcf4f", diff --git a/public/images/pokemon/variant/back/669-orange.json b/public/images/pokemon/variant/back/669-orange.json index a7ca575c15e..452e7af1a62 100644 --- a/public/images/pokemon/variant/back/669-orange.json +++ b/public/images/pokemon/variant/back/669-orange.json @@ -3,10 +3,6 @@ "665a1f": "5c0d0d", "ffe14c": "a3382c", "ccb43d": "871723", - "595959": "595959", - "bfbfbf": "bfbfbf", - "f8f8f8": "f8f8f8", - "101010": "101010", "65a943": "e493a1", "805326": "5c2c09", "ffb266": "cd9231", @@ -21,7 +17,6 @@ "595959": "712b2b", "bfbfbf": "f1beb3", "f8f8f8": "fff1df", - "101010": "101010", "65a943": "ea8c48", "805326": "215510", "ffb266": "afcf4f", diff --git a/public/images/pokemon/variant/back/669-red.json b/public/images/pokemon/variant/back/669-red.json index 249fedd9e3d..ff77021293a 100644 --- a/public/images/pokemon/variant/back/669-red.json +++ b/public/images/pokemon/variant/back/669-red.json @@ -3,10 +3,6 @@ "665a1f": "3e0547", "ffe14c": "9c235f", "ccb43d": "6a094f", - "595959": "595959", - "bfbfbf": "bfbfbf", - "f8f8f8": "f8f8f8", - "101010": "101010", "65a943": "e493a1", "802d2d": "55061c", "ff7373": "cd4a4a", @@ -21,7 +17,6 @@ "595959": "800d3e", "bfbfbf": "f1a2a9", "f8f8f8": "ffd7db", - "101010": "101010", "65a943": "dc3543", "802d2d": "215510", "ff7373": "afcf4f", diff --git a/public/images/pokemon/variant/back/669-white.json b/public/images/pokemon/variant/back/669-white.json index 2140e493685..54678252991 100644 --- a/public/images/pokemon/variant/back/669-white.json +++ b/public/images/pokemon/variant/back/669-white.json @@ -3,10 +3,6 @@ "665a1f": "110732", "ffe14c": "4c495c", "ccb43d": "302b40", - "595959": "595959", - "bfbfbf": "bfbfbf", - "f8f8f8": "f8f8f8", - "101010": "101010", "65a943": "e493a1", "808080": "1e1d2a", "fefefe": "89898e", @@ -20,8 +16,6 @@ "ccb43d": "c4c6bf", "595959": "616a64", "bfbfbf": "d4dcd5", - "f8f8f8": "f8f8f8", - "101010": "101010", "65a943": "636a67", "808080": "215510", "fefefe": "afcf4f", diff --git a/public/images/pokemon/variant/back/669-yellow.json b/public/images/pokemon/variant/back/669-yellow.json index 09e57788049..72a4292bc77 100644 --- a/public/images/pokemon/variant/back/669-yellow.json +++ b/public/images/pokemon/variant/back/669-yellow.json @@ -3,10 +3,6 @@ "665a1f": "034020", "ffe14c": "1a8e16", "ccb43d": "0a6323", - "595959": "595959", - "bfbfbf": "bfbfbf", - "f8f8f8": "f8f8f8", - "101010": "101010", "65a943": "e493a1", "807826": "054e19", "fff266": "abb830", @@ -21,7 +17,6 @@ "595959": "6a532c", "bfbfbf": "ead295", "f8f8f8": "fffde0", - "101010": "101010", "65a943": "f1d74b", "807826": "215510", "fff266": "afcf4f", diff --git a/public/images/pokemon/variant/back/670-blue.json b/public/images/pokemon/variant/back/670-blue.json index f06692d2c71..5a413b46ffc 100644 --- a/public/images/pokemon/variant/back/670-blue.json +++ b/public/images/pokemon/variant/back/670-blue.json @@ -5,15 +5,11 @@ "ffe14c": "402bbf", "61c2f2": "4a64cd", "3d9ccc": "3342b8", - "101010": "101010", "ccb43d": "33168e", "6bb347": "1d8057", "3d6629": "094740", "288a71": "e493a1", - "134035": "aa2960", - "595959": "595959", - "bfbfbf": "bfbfbf", - "f8f8f8": "f8f8f8" + "134035": "aa2960" }, "2": { "665a1f": "b1b1b1", @@ -21,7 +17,6 @@ "ffe14c": "f8f8f4", "61c2f2": "afcf4f", "3d9ccc": "739f1f", - "101010": "101010", "ccb43d": "dcdad8", "6bb347": "3c403a", "3d6629": "121c0d", diff --git a/public/images/pokemon/variant/back/670-orange.json b/public/images/pokemon/variant/back/670-orange.json index a9f85ce8395..0b5c79f1ca2 100644 --- a/public/images/pokemon/variant/back/670-orange.json +++ b/public/images/pokemon/variant/back/670-orange.json @@ -5,15 +5,11 @@ "ffe14c": "a3382c", "ffb266": "cd9231", "d98d41": "aa571d", - "101010": "101010", "ccb43d": "871723", "6bb347": "1d8057", "3d6629": "094740", "288a71": "e493a1", - "134035": "aa2960", - "595959": "595959", - "bfbfbf": "bfbfbf", - "f8f8f8": "f8f8f8" + "134035": "aa2960" }, "2": { "665a1f": "b1b1b1", @@ -21,7 +17,6 @@ "ffe14c": "f8f8f4", "ffb266": "afcf4f", "d98d41": "739f1f", - "101010": "101010", "ccb43d": "dcdad8", "6bb347": "3c403a", "3d6629": "121c0d", diff --git a/public/images/pokemon/variant/back/670-red.json b/public/images/pokemon/variant/back/670-red.json index bfceb377666..151d49c9e93 100644 --- a/public/images/pokemon/variant/back/670-red.json +++ b/public/images/pokemon/variant/back/670-red.json @@ -5,15 +5,11 @@ "ffe14c": "8e1653", "ff7373": "cd4a4a", "d94c4c": "a31f35", - "101010": "101010", "ccb43d": "6a094f", "6bb347": "1d8057", "3d6629": "094740", "288a71": "e493a1", - "134035": "aa2960", - "595959": "595959", - "bfbfbf": "bfbfbf", - "f8f8f8": "f8f8f8" + "134035": "aa2960" }, "2": { "665a1f": "b1b1b1", @@ -21,7 +17,6 @@ "ffe14c": "f8f8f4", "ff7373": "afcf4f", "d94c4c": "739f1f", - "101010": "101010", "ccb43d": "dcdad8", "6bb347": "3c403a", "3d6629": "121c0d", diff --git a/public/images/pokemon/variant/back/670-white.json b/public/images/pokemon/variant/back/670-white.json index fa7b45d2158..a05a2c17394 100644 --- a/public/images/pokemon/variant/back/670-white.json +++ b/public/images/pokemon/variant/back/670-white.json @@ -5,15 +5,11 @@ "ffe14c": "3b374e", "fefefe": "747478", "d9d9d9": "4c4b55", - "101010": "101010", "ccb43d": "2c2347", "6bb347": "1d8057", "3d6629": "094740", "288a71": "e493a1", - "134035": "aa2960", - "595959": "595959", - "bfbfbf": "bfbfbf", - "f8f8f8": "f8f8f8" + "134035": "aa2960" }, "2": { "665a1f": "b1b1b1", @@ -21,14 +17,11 @@ "ffe14c": "f8f8f4", "fefefe": "afcf4f", "d9d9d9": "739f1f", - "101010": "101010", "ccb43d": "dcdad8", "6bb347": "3c403a", "3d6629": "121c0d", "288a71": "6d716f", "134035": "1c2d32", - "595959": "595959", - "bfbfbf": "c6c6c6", - "f8f8f8": "f8f8f8" + "bfbfbf": "c6c6c6" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/670-yellow.json b/public/images/pokemon/variant/back/670-yellow.json index d98e0f97054..683d5e6bc29 100644 --- a/public/images/pokemon/variant/back/670-yellow.json +++ b/public/images/pokemon/variant/back/670-yellow.json @@ -5,15 +5,11 @@ "ffe14c": "1a8021", "fff266": "abb830", "d9cc41": "6f950a", - "101010": "101010", "ccb43d": "0b5c19", "6bb347": "1d8057", "3d6629": "094740", "288a71": "e493a1", - "134035": "aa2960", - "595959": "595959", - "bfbfbf": "bfbfbf", - "f8f8f8": "f8f8f8" + "134035": "aa2960" }, "2": { "665a1f": "b1b1b1", @@ -21,7 +17,6 @@ "ffe14c": "f8f8f4", "fff266": "afcf4f", "d9cc41": "739f1f", - "101010": "101010", "ccb43d": "dcdad8", "6bb347": "3c403a", "3d6629": "121c0d", diff --git a/public/images/pokemon/variant/back/6705.json b/public/images/pokemon/variant/back/6705.json index 5cc27fb033d..a6d18c9cf29 100644 --- a/public/images/pokemon/variant/back/6705.json +++ b/public/images/pokemon/variant/back/6705.json @@ -6,7 +6,6 @@ "bfacbf": "e56ca6", "367456": "0c5474", "50ab89": "197497", - "101010": "101010", "60606c": "1f1233", "c5cce0": "513981", "aeb5c6": "442967", @@ -18,13 +17,9 @@ "f2daf2": "9cead8", "4d454d": "194f51", "bfacbf": "5db6a9", - "367456": "367456", - "50ab89": "50ab89", - "101010": "101010", "60606c": "042329", "c5cce0": "176463", "aeb5c6": "0d484a", - "949aab": "073338", - "e3e8f4": "e3e8f4" + "949aab": "073338" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/671-blue.json b/public/images/pokemon/variant/back/671-blue.json index 935eeeab1b3..043958cec7c 100644 --- a/public/images/pokemon/variant/back/671-blue.json +++ b/public/images/pokemon/variant/back/671-blue.json @@ -4,22 +4,17 @@ "73bfbf": "291371", "e5ffff": "69c9e3", "aaf2f2": "3827a3", - "101010": "101010", "3d9ccc": "2938a3", "61c2f2": "3c54b8", "1b594a": "aa1a58", "3aa68b": "ff91a4", - "2d806b": "dc5073", - "595959": "595959", - "bfbfbf": "bfbfbf", - "f8f8f8": "f8f8f8" + "2d806b": "dc5073" }, "2": { "476d80": "07230a", "73bfbf": "28392c", "e5ffff": "dfe3e1", "aaf2f2": "4d4e46", - "101010": "101010", "3d9ccc": "7f9f1f", "61c2f2": "afcf4f", "1b594a": "0d4a80", diff --git a/public/images/pokemon/variant/back/671-orange.json b/public/images/pokemon/variant/back/671-orange.json index 08a78a394bb..9c9f0faa7fe 100644 --- a/public/images/pokemon/variant/back/671-orange.json +++ b/public/images/pokemon/variant/back/671-orange.json @@ -4,22 +4,17 @@ "cca37a": "631818", "fff2e5": "ffbc77", "ffd9b2": "a34b2c", - "101010": "101010", "d98d41": "954c17", "ffb266": "cd8e31", "1b594a": "aa1a58", "3aa68b": "ff91a4", - "2d806b": "dc5073", - "595959": "595959", - "bfbfbf": "bfbfbf", - "f8f8f8": "f8f8f8" + "2d806b": "dc5073" }, "2": { "71543f": "07230a", "cca37a": "28392c", "fff2e5": "dfe3e1", "ffd9b2": "4d4e46", - "101010": "101010", "d98d41": "7f9f1f", "ffb266": "afcf4f", "1b594a": "800707", diff --git a/public/images/pokemon/variant/back/671-red.json b/public/images/pokemon/variant/back/671-red.json index 642c0c96cae..de5714bdcbf 100644 --- a/public/images/pokemon/variant/back/671-red.json +++ b/public/images/pokemon/variant/back/671-red.json @@ -4,22 +4,17 @@ "a66390": "4e0c38", "ffb2cc": "ff90a2", "d998c3": "8e1a55", - "101010": "101010", "d94c4c": "95172c", "ff7373": "c64040", "1b594a": "aa1a58", "3aa68b": "ff91a4", - "2d806b": "dc5073", - "595959": "595959", - "bfbfbf": "bfbfbf", - "f8f8f8": "f8f8f8" + "2d806b": "dc5073" }, "2": { "683644": "07230a", "a66390": "28392c", "ffb2cc": "dfe3e1", "d998c3": "4d4e46", - "101010": "101010", "d94c4c": "7f9f1f", "ff7373": "afcf4f", "1b594a": "710846", diff --git a/public/images/pokemon/variant/back/671-white.json b/public/images/pokemon/variant/back/671-white.json index 9f3e489ca31..9e96be30a78 100644 --- a/public/images/pokemon/variant/back/671-white.json +++ b/public/images/pokemon/variant/back/671-white.json @@ -4,29 +4,22 @@ "b3b3b3": "272232", "ffbfca": "c2c1c6", "f2f2f2": "353340", - "101010": "101010", "d9d9d9": "3c3b47", "fefefe": "60616a", "1b594a": "aa1a58", "3aa68b": "ff91a4", - "2d806b": "dc5073", - "595959": "595959", - "bfbfbf": "bfbfbf", - "f8f8f8": "f8f8f8" + "2d806b": "dc5073" }, "2": { "808080": "07230a", "b3b3b3": "28392c", "ffbfca": "dfe3e1", "f2f2f2": "4d4e46", - "101010": "101010", "d9d9d9": "7f9f1f", "fefefe": "afcf4f", "1b594a": "1c2d32", "3aa68b": "6d716f", "2d806b": "3c4747", - "595959": "595959", - "bfbfbf": "bfbfbf", "f8f8f8": "f9f9f9" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/671-yellow.json b/public/images/pokemon/variant/back/671-yellow.json index a2aea6302ad..246f3a756b5 100644 --- a/public/images/pokemon/variant/back/671-yellow.json +++ b/public/images/pokemon/variant/back/671-yellow.json @@ -4,22 +4,17 @@ "ccb485": "227850", "ffd2a6": "ffe593", "ffeabf": "22b14a", - "101010": "101010", "d9cc41": "789c16", "fff266": "b0bf2b", "1b594a": "aa1a58", "3aa68b": "ff91a4", - "2d806b": "dc5073", - "595959": "595959", - "bfbfbf": "bfbfbf", - "f8f8f8": "f8f8f8" + "2d806b": "dc5073" }, "2": { "6e6b4a": "07230a", "ccb485": "28392c", "ffd2a6": "dfe3e1", "ffeabf": "4d4e46", - "101010": "101010", "d9cc41": "7f9f1f", "fff266": "afcf4f", "1b594a": "8e4d0a", diff --git a/public/images/pokemon/variant/back/6713.json b/public/images/pokemon/variant/back/6713.json index a0ba9eb72ad..721679daf7d 100644 --- a/public/images/pokemon/variant/back/6713.json +++ b/public/images/pokemon/variant/back/6713.json @@ -3,7 +3,6 @@ "737373": "7a993d", "e8e8e8": "cfe68a", "729ac2": "d97389", - "101010": "101010", "bfbfbf": "9dcc3e", "bff4ff": "ffbfda", "6b5442": "732334", @@ -19,7 +18,6 @@ "737373": "641531", "e8e8e8": "bf576b", "729ac2": "cc7b1e", - "101010": "101010", "bfbfbf": "993554", "bff4ff": "fcc95c", "6b5442": "2c7a75", diff --git a/public/images/pokemon/variant/back/672.json b/public/images/pokemon/variant/back/672.json index ad732e63266..c477cacb3bb 100644 --- a/public/images/pokemon/variant/back/672.json +++ b/public/images/pokemon/variant/back/672.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "737373": "9e2c3d", "404040": "73132e", "403830": "642509", @@ -16,7 +15,6 @@ "ff884c": "552d30" }, "2": { - "101010": "101010", "737373": "2d2b40", "404040": "161526", "403830": "305a4f", diff --git a/public/images/pokemon/variant/back/673.json b/public/images/pokemon/variant/back/673.json index 2861d12d0dd..a9ec1635f4e 100644 --- a/public/images/pokemon/variant/back/673.json +++ b/public/images/pokemon/variant/back/673.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "666666": "9e2c3d", "404040": "73132e", "542914": "471405", @@ -16,7 +15,6 @@ "d6b778": "ce8648" }, "2": { - "101010": "101010", "666666": "2d2b40", "404040": "161526", "542914": "37224d", diff --git a/public/images/pokemon/variant/back/677.json b/public/images/pokemon/variant/back/677.json index 425ffc7ec90..c3b8df46589 100644 --- a/public/images/pokemon/variant/back/677.json +++ b/public/images/pokemon/variant/back/677.json @@ -4,15 +4,13 @@ "b8b8cc": "bd5c81", "45454d": "470d28", "8a8a99": "943b5d", - "f8f8f8": "f1f0e4", - "101010": "101010" + "f8f8f8": "f1f0e4" }, "2": { "5c5c66": "243e41", "b8b8cc": "6ba78a", "45454d": "193437", "8a8a99": "426b62", - "f8f8f8": "67415e", - "101010": "101010" + "f8f8f8": "67415e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/678-female.json b/public/images/pokemon/variant/back/678-female.json index c628e4db4ed..578b1f6f47e 100644 --- a/public/images/pokemon/variant/back/678-female.json +++ b/public/images/pokemon/variant/back/678-female.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "737373": "947859", "bfbfbf": "d5c49f", "f8f8f8": "f8f5cd", @@ -9,7 +8,6 @@ "365fb3": "a5346b" }, "2": { - "101010": "101010", "737373": "3a1633", "bfbfbf": "613d5a", "f8f8f8": "855577", diff --git a/public/images/pokemon/variant/back/678.json b/public/images/pokemon/variant/back/678.json index c628e4db4ed..578b1f6f47e 100644 --- a/public/images/pokemon/variant/back/678.json +++ b/public/images/pokemon/variant/back/678.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "737373": "947859", "bfbfbf": "d5c49f", "f8f8f8": "f8f5cd", @@ -9,7 +8,6 @@ "365fb3": "a5346b" }, "2": { - "101010": "101010", "737373": "3a1633", "bfbfbf": "613d5a", "f8f8f8": "855577", diff --git a/public/images/pokemon/variant/back/69.json b/public/images/pokemon/variant/back/69.json index b93b8b335e7..2e87f433d28 100644 --- a/public/images/pokemon/variant/back/69.json +++ b/public/images/pokemon/variant/back/69.json @@ -1,15 +1,11 @@ { "1": { "ad7b42": "841d4a", - "ffffff": "ffffff", "f7e673": "d97076", "d6bd63": "b04d64", "5a3a00": "3b0239", "000000": "1d0015", "946b42": "4f0537", - "b54231": "b54231", - "d6636b": "d6636b", - "732100": "732100", "426b10": "b3273e", "7bc552": "f3a480", "63a542": "d0735b", @@ -17,7 +13,6 @@ }, "2": { "ad7b42": "5380b6", - "ffffff": "ffffff", "f7e673": "b6e9ff", "d6bd63": "7fb1d9", "5a3a00": "324884", diff --git a/public/images/pokemon/variant/back/690.json b/public/images/pokemon/variant/back/690.json index a513e813823..7e4536149f9 100644 --- a/public/images/pokemon/variant/back/690.json +++ b/public/images/pokemon/variant/back/690.json @@ -2,7 +2,6 @@ "1": { "3f6273": "310511", "4d341b": "181243", - "101010": "101010", "a6e1ff": "792a48", "a6703a": "3e44a2", "7ec3e5": "6b1f42", @@ -16,7 +15,6 @@ "2": { "3f6273": "340628", "4d341b": "042431", - "101010": "101010", "a6e1ff": "633060", "a6703a": "2c5d64", "7ec3e5": "481a42", diff --git a/public/images/pokemon/variant/back/691.json b/public/images/pokemon/variant/back/691.json index 5ed68809c44..849dd6a4e5b 100644 --- a/public/images/pokemon/variant/back/691.json +++ b/public/images/pokemon/variant/back/691.json @@ -1,7 +1,6 @@ { "1": { "4d4d2e": "31246d", - "101010": "101010", "b3b36b": "403c94", "80804d": "382f7d", "732230": "310511", @@ -17,7 +16,6 @@ }, "2": { "4d4d2e": "07262e", - "101010": "101010", "b3b36b": "1d4952", "80804d": "0d3338", "732230": "340b33", diff --git a/public/images/pokemon/variant/back/696.json b/public/images/pokemon/variant/back/696.json index a953f1b1cb3..48a55116ffa 100644 --- a/public/images/pokemon/variant/back/696.json +++ b/public/images/pokemon/variant/back/696.json @@ -1,53 +1,27 @@ { "1": { - "734517":"5e0b0b", - "ffa64c":"a50d0d", - "4a322c":"023425", - "101010":"101010", - "404040":"4c3216", - "966858":"1b6430", - "f8f8f8":"dfdea7", - "65483a":"0b4c29", - "bfbfbf":"cbbe8c", - "8c8c8c":"ad8c63", - "121212":"121212", - "bdbdbd":"cfc28f" + "734517": "5e0b0b", + "ffa64c": "a50d0d", + "4a322c": "023425", + "404040": "4c3216", + "966858": "1b6430", + "f8f8f8": "dfdea7", + "65483a": "0b4c29", + "bfbfbf": "cbbe8c", + "8c8c8c": "ad8c63", + "bdbdbd": "cfc28f" }, "2": { - "734517":"395cb7", - "ffa64c":"d2e9ff", - "4a322c":"3e1f18", - "101010":"101010", - "404040":"250860", - "966858":"83726e", - "f8f8f8":"6e46a7", - "65483a":"644943", - "bfbfbf":"593097", - "8c8c8c":"411684", - "121212":"decaff", - "bdbdbd":"79c8d3" + "734517": "395cb7", + "ffa64c": "d2e9ff", + "4a322c": "3e1f18", + "404040": "250860", + "966858": "83726e", + "f8f8f8": "6e46a7", + "65483a": "644943", + "bfbfbf": "593097", + "8c8c8c": "411684", + "121212": "decaff", + "bdbdbd": "79c8d3" } -} - - - - - - - - - - - - - - - - - - - - - - - +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/697.json b/public/images/pokemon/variant/back/697.json index 392be597d2e..5c4c49c531b 100644 --- a/public/images/pokemon/variant/back/697.json +++ b/public/images/pokemon/variant/back/697.json @@ -1,32 +1,30 @@ { "1": { - "54434c":"4c3216", - "080808":"080808", - "fafafa":"dfdea7", - "cccccc":"cbbe8c", - "964b1c":"5e0b0b", - "f19d5a":"b52424", - "bf7545":"971c1c", - "50131e":"0b241e", - "963e4e":"285234", - "722533":"153626", - "9f9d98":"ad8c63", - "35272e":"36282f", - "584650":"4f3417" + "54434c": "4c3216", + "fafafa": "dfdea7", + "cccccc": "cbbe8c", + "964b1c": "5e0b0b", + "f19d5a": "b52424", + "bf7545": "971c1c", + "50131e": "0b241e", + "963e4e": "285234", + "722533": "153626", + "9f9d98": "ad8c63", + "35272e": "36282f", + "584650": "4f3417" }, "2": { - "54434c":"170c25", - "080808":"080808", - "fafafa":"4b2e64", - "cccccc":"33214f", - "964b1c":"9d5390", - "f19d5a":"f4dbf6", - "bf7545":"ce7ecc", - "50131e":"52352f", - "963e4e":"ab9b97", - "722533":"83726e", - "9f9d98":"26173b", - "35272e":"a15593", - "584650":"cc7cc9" + "54434c": "170c25", + "fafafa": "4b2e64", + "cccccc": "33214f", + "964b1c": "9d5390", + "f19d5a": "f4dbf6", + "bf7545": "ce7ecc", + "50131e": "52352f", + "963e4e": "ab9b97", + "722533": "83726e", + "9f9d98": "26173b", + "35272e": "a15593", + "584650": "cc7cc9" } -} +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/698.json b/public/images/pokemon/variant/back/698.json index 48a717ac503..e47f88780ac 100644 --- a/public/images/pokemon/variant/back/698.json +++ b/public/images/pokemon/variant/back/698.json @@ -5,13 +5,10 @@ "fff2b2": "9bffa9", "537180": "b04f4b", "a6e1ff": "efab87", - "101010": "101010", "85b4cc": "cf755d", "217aa6": "7f99e1", "30b2f2": "b5dcff", - "fdfdfd": "fdfdfd", - "c0c0c0": "d7cca0", - "cacaca": "cacaca" + "c0c0c0": "d7cca0" }, "2": { "b3747e": "c452a6", @@ -19,12 +16,9 @@ "fff2b2": "eb88b9", "537180": "392d65", "a6e1ff": "936daa", - "101010": "101010", "85b4cc": "654a8a", "217aa6": "efaa51", "30b2f2": "ffd169", - "fdfdfd": "fdfdfd", - "c0c0c0": "282747", - "cacaca": "cacaca" + "c0c0c0": "282747" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/699.json b/public/images/pokemon/variant/back/699.json index aa7a63c04c6..34be21e1ec5 100644 --- a/public/images/pokemon/variant/back/699.json +++ b/public/images/pokemon/variant/back/699.json @@ -10,8 +10,6 @@ "657dac": "c44f5d", "ffffff": "ffeac0", "4e568b": "a03c58", - "101010": "101010", - "f8f8f8": "f8f8f8", "3d8eb6": "12545e", "53c5ff": "1c7376", "94b7bd": "d3a47b", @@ -31,8 +29,6 @@ "657dac": "2f4978", "ffffff": "bae8ff", "4e568b": "243369", - "101010": "101010", - "f8f8f8": "f8f8f8", "3d8eb6": "852d6b", "53c5ff": "ab467e", "94b7bd": "261e44", diff --git a/public/images/pokemon/variant/back/700.json b/public/images/pokemon/variant/back/700.json index a7d41e68dd6..129e418ea69 100644 --- a/public/images/pokemon/variant/back/700.json +++ b/public/images/pokemon/variant/back/700.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "8a2843": "452f89", "235a99": "a63071", "d85a7a": "996cd2", @@ -13,7 +12,6 @@ "a88d8c": "8c8fa8" }, "2": { - "101010": "101010", "8a2843": "0e6134", "235a99": "900d1b", "d85a7a": "5dae7d", diff --git a/public/images/pokemon/variant/back/702.json b/public/images/pokemon/variant/back/702.json index 1c19fa48122..81e527f87bd 100644 --- a/public/images/pokemon/variant/back/702.json +++ b/public/images/pokemon/variant/back/702.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "4d4d4d": "6789b3", "262626": "2a3b5e", "735c2e": "a53c42", @@ -9,7 +8,6 @@ "997a3d": "c9685f" }, "2": { - "101010": "101010", "4d4d4d": "197870", "262626": "072d38", "735c2e": "1e0e27", diff --git a/public/images/pokemon/variant/back/703.json b/public/images/pokemon/variant/back/703.json index 951c8b311b9..f5dc35b243e 100644 --- a/public/images/pokemon/variant/back/703.json +++ b/public/images/pokemon/variant/back/703.json @@ -5,9 +5,7 @@ "6994bf": "e67c37", "8cc6ff": "ffa633", "8f8fb3": "4d496b", - "f8f8f8": "f8f8f8", "666680": "37344e", - "101010": "101010", "595959": "e6ac60", "bfbfbf": "ffd3a1", "f2f2f2": "ffeed6" @@ -20,7 +18,6 @@ "8f8fb3": "e4cdf9", "f8f8f8": "ffe2ee", "666680": "cca1db", - "101010": "101010", "595959": "5a3d84", "bfbfbf": "8359a7", "f2f2f2": "a473bf" diff --git a/public/images/pokemon/variant/back/704.json b/public/images/pokemon/variant/back/704.json index be52dd71a83..f293f542288 100644 --- a/public/images/pokemon/variant/back/704.json +++ b/public/images/pokemon/variant/back/704.json @@ -4,7 +4,6 @@ "4d454d": "8a2166", "f2daf2": "fbb3d2", "bfacbf": "c77da0", - "101010": "101010", "66cc52": "348fa6", "4d993d": "185d83", "8f7db3": "7d699d", @@ -16,7 +15,6 @@ "4d454d": "134557", "f2daf2": "92d8c8", "bfacbf": "5f8d86", - "101010": "101010", "66cc52": "bb7935", "4d993d": "a34205", "8f7db3": "2f5d6f", diff --git a/public/images/pokemon/variant/back/705.json b/public/images/pokemon/variant/back/705.json index 7d0e856616d..603dc58909d 100644 --- a/public/images/pokemon/variant/back/705.json +++ b/public/images/pokemon/variant/back/705.json @@ -6,7 +6,6 @@ "bfacbf": "ca719c", "647543": "0c5474", "98bd51": "197497", - "101010": "101010", "665980": "4e4094", "8f7db3": "8b69c3", "b8a1e5": "c7a1e5" @@ -18,7 +17,6 @@ "bfacbf": "4e9b8f", "647543": "842401", "98bd51": "a34205", - "101010": "101010", "665980": "274159", "8f7db3": "2f667c", "b8a1e5": "4a9699" diff --git a/public/images/pokemon/variant/back/706.json b/public/images/pokemon/variant/back/706.json index ff21462bf22..cc05bcd250d 100644 --- a/public/images/pokemon/variant/back/706.json +++ b/public/images/pokemon/variant/back/706.json @@ -4,8 +4,6 @@ "e6d4e7": "f1a4c5", "4d454d": "8a2166", "bfacbf": "cd7aa1", - "f8f8f8": "f8f8f8", - "101010": "101010", "998a99": "b24c86", "307922": "0c5474", "46b030": "197497", @@ -21,8 +19,6 @@ "e6d4e7": "9cead8", "4d454d": "0e4043", "bfacbf": "559b91", - "f8f8f8": "f8f8f8", - "101010": "101010", "998a99": "2b736f", "307922": "842401", "46b030": "a34205", diff --git a/public/images/pokemon/variant/back/708.json b/public/images/pokemon/variant/back/708.json index e3ffaa6e659..700c6e16135 100644 --- a/public/images/pokemon/variant/back/708.json +++ b/public/images/pokemon/variant/back/708.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "2b303c": "722023", "494e5b": "a14743", "56372f": "36384f", @@ -10,7 +9,6 @@ "775943": "575a6a" }, "2": { - "101010": "101010", "2b303c": "6f5f80", "494e5b": "9c92a4", "56372f": "31161d", diff --git a/public/images/pokemon/variant/back/709.json b/public/images/pokemon/variant/back/709.json index 51b5ea55f48..b2327699b93 100644 --- a/public/images/pokemon/variant/back/709.json +++ b/public/images/pokemon/variant/back/709.json @@ -2,7 +2,6 @@ "1": { "4d361f": "36384f", "174d3b": "361f1b", - "101010": "101010", "cc8f52": "7c808c", "36b389": "907f76", "268062": "4d362e", @@ -13,7 +12,6 @@ "2": { "4d361f": "47232b", "174d3b": "761d52", - "101010": "101010", "cc8f52": "7e5658", "36b389": "da7ea8", "268062": "a94079", diff --git a/public/images/pokemon/variant/back/71.json b/public/images/pokemon/variant/back/71.json index bc672f7bcf7..bc7e00d221e 100644 --- a/public/images/pokemon/variant/back/71.json +++ b/public/images/pokemon/variant/back/71.json @@ -2,7 +2,6 @@ "1": { "635229": "4f0537", "a57b31": "781649", - "000000": "000000", "4aa57b": "e28e58", "10633a": "b0552e", "8cc57b": "e28e58", @@ -12,8 +11,6 @@ "ef8c52": "b352a5", "efd66b": "b6514d", "f7ef94": "d37763", - "bdc5c5": "bdc5c5", - "ffffff": "ffffff", "b5e69c": "f9be81" }, "2": { @@ -29,8 +26,6 @@ "ef8c52": "3250c7", "efd66b": "6880c2", "f7ef94": "7998d3", - "bdc5c5": "bdc5c5", - "ffffff": "ffffff", "b5e69c": "cfe3e5" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/710.json b/public/images/pokemon/variant/back/710.json index 63492302b69..443197883f6 100644 --- a/public/images/pokemon/variant/back/710.json +++ b/public/images/pokemon/variant/back/710.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "664e42": "72a966", "332721": "213a22", "4d3b32": "478243", @@ -9,7 +8,6 @@ "d98777": "404040" }, "2": { - "101010": "101010", "664e42": "425947", "332721": "0e2218", "4d3b32": "2a4031", diff --git a/public/images/pokemon/variant/back/711.json b/public/images/pokemon/variant/back/711.json index dfa0005fa7d..b75b1846b79 100644 --- a/public/images/pokemon/variant/back/711.json +++ b/public/images/pokemon/variant/back/711.json @@ -1,6 +1,5 @@ { "0": { - "070707": "070707", "605347": "593a59", "34281d": "291431", "4a4127": "311835", @@ -13,7 +12,6 @@ "c99c6b": "b98e55" }, "1": { - "070707": "070707", "605347": "353631", "34281d": "0f1014", "4a4127": "202423", @@ -26,7 +24,6 @@ "c99c6b": "baa78d" }, "2": { - "070707": "070707", "605347": "e56146", "34281d": "5e0b09", "4a4127": "ad3b33", diff --git a/public/images/pokemon/variant/back/712.json b/public/images/pokemon/variant/back/712.json index 59ad2436866..6a9f45ffebd 100644 --- a/public/images/pokemon/variant/back/712.json +++ b/public/images/pokemon/variant/back/712.json @@ -4,11 +4,7 @@ "58647b": "bf566d", "b3eaf8": "ffbfda", "a5c4d2": "f29eb3", - "e8f5fe": "ffebf2", - "101010": "101010", - "bfbfbf": "bfbfbf", - "737373": "737373", - "f8f8f8": "f8f8f8" + "e8f5fe": "ffebf2" }, "2": { "719aa9": "cc7b1e", @@ -16,7 +12,6 @@ "b3eaf8": "fcc95c", "a5c4d2": "e69e2b", "e8f5fe": "fff2ad", - "101010": "101010", "bfbfbf": "6cb3ae", "737373": "2c7a75", "f8f8f8": "b9f2ee" diff --git a/public/images/pokemon/variant/back/713.json b/public/images/pokemon/variant/back/713.json index 61977f60470..03f24a2226d 100644 --- a/public/images/pokemon/variant/back/713.json +++ b/public/images/pokemon/variant/back/713.json @@ -6,8 +6,7 @@ "bff4ff": "ffbfda", "335980": "994255", "f2ffff": "ffebf2", - "77b8d9": "d97389", - "101010": "101010" + "77b8d9": "d97389" }, "2": { "608cba": "a8632a", @@ -16,7 +15,6 @@ "bff4ff": "fcc95c", "335980": "824628", "f2ffff": "fff2ad", - "77b8d9": "cc7b1e", - "101010": "101010" + "77b8d9": "cc7b1e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/714.json b/public/images/pokemon/variant/back/714.json index c2082c3933b..6eed2094909 100644 --- a/public/images/pokemon/variant/back/714.json +++ b/public/images/pokemon/variant/back/714.json @@ -2,7 +2,6 @@ "1": { "633674": "500a25", "b459d5": "a42c54", - "101010": "101010", "85489b": "8e1d4b", "3f3f3f": "202558", "756175": "43167f", @@ -13,7 +12,6 @@ "2": { "633674": "5f151c", "b459d5": "c24430", - "101010": "101010", "85489b": "882c27", "3f3f3f": "5b1922", "756175": "945d56", diff --git a/public/images/pokemon/variant/back/715.json b/public/images/pokemon/variant/back/715.json index 7ca4d81e5dc..0d07fb84711 100644 --- a/public/images/pokemon/variant/back/715.json +++ b/public/images/pokemon/variant/back/715.json @@ -1,38 +1,32 @@ { - "1": { - "101010": "101010", - "287366": "731338", - "3aa694": "a42c54", - "404040": "542f98", - "343434": "3e107b", - "252525": "260447", - "4cd9c1": "d04b6c", - "595959": "7a5ccc", - "6a3f73": "0f103c", - "737373": "563d8f", - "801a1a": "801a1a", - "8e5499": "202558", - "bd70cc": "2f386b", - "bfbfbf": "ab83dd", - "e52e2e": "e52e2e", - "f8f8f8": "d5bdec" - }, - "2": { - "101010": "101010", - "287366": "832714", - "3aa694": "b8552c", - "404040": "b18373", - "343434": "906152", - "252525": "6c3f39", - "4cd9c1": "dd834c", - "595959": "e2c7b5", - "6a3f73": "3b0c18", - "737373": "280911", - "801a1a": "801a1a", - "8e5499": "5b1922", - "bd70cc": "7c2928", - "bfbfbf": "43191e", - "e52e2e": "e52e2e", - "f8f8f8": "5a2a2b" - } + "1": { + "287366": "731338", + "3aa694": "a42c54", + "404040": "542f98", + "343434": "3e107b", + "252525": "260447", + "4cd9c1": "d04b6c", + "595959": "7a5ccc", + "6a3f73": "0f103c", + "737373": "563d8f", + "8e5499": "202558", + "bd70cc": "2f386b", + "bfbfbf": "ab83dd", + "f8f8f8": "d5bdec" + }, + "2": { + "287366": "832714", + "3aa694": "b8552c", + "404040": "b18373", + "343434": "906152", + "252525": "6c3f39", + "4cd9c1": "dd834c", + "595959": "e2c7b5", + "6a3f73": "3b0c18", + "737373": "280911", + "8e5499": "5b1922", + "bd70cc": "7c2928", + "bfbfbf": "43191e", + "f8f8f8": "5a2a2b" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/716-active.json b/public/images/pokemon/variant/back/716-active.json index 1b3ad588fce..fc83877da6c 100644 --- a/public/images/pokemon/variant/back/716-active.json +++ b/public/images/pokemon/variant/back/716-active.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "ccbd8f": "c27f52", "345090": "75127d", "807659": "7e4428", @@ -16,8 +15,6 @@ "c37732": "36c1a4", "547fe9": "b33ccd", "dd3238": "2e73b1", - "5959b3": "5959b3", - "9191f2": "9191f2", "243659": "132b1b", "3d5c99": "1e3824", "ffecb2": "f0c197", @@ -27,7 +24,6 @@ "5c8ae5": "324c37" }, "2": { - "101010": "101010", "ccbd8f": "3b2328", "345090": "93221f", "807659": "210f14", @@ -43,8 +39,6 @@ "c37732": "7445f1", "547fe9": "d75343", "dd3238": "e445d0", - "5959b3": "5959b3", - "9191f2": "9191f2", "243659": "37134c", "3d5c99": "643071", "ffecb2": "553639", diff --git a/public/images/pokemon/variant/back/716-neutral.json b/public/images/pokemon/variant/back/716-neutral.json index 8d70b9ee2ca..f15d9fc64dc 100644 --- a/public/images/pokemon/variant/back/716-neutral.json +++ b/public/images/pokemon/variant/back/716-neutral.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "84b4ce": "ac8781", "364566": "603f3c", "c0e0ec": "bfa19a", @@ -12,7 +11,6 @@ "5c8ae5": "324c37" }, "2": { - "101010": "101010", "84b4ce": "42283b", "364566": "230d1e", "c0e0ec": "613e56", diff --git a/public/images/pokemon/variant/back/717.json b/public/images/pokemon/variant/back/717.json index 1104b74cf71..615b092ba9c 100644 --- a/public/images/pokemon/variant/back/717.json +++ b/public/images/pokemon/variant/back/717.json @@ -2,7 +2,6 @@ "1": { "4d4d4d": "816450", "b3b3b3": "dbd4cd", - "101010": "101010", "737373": "c1aa9a", "242626": "0f0b2c", "8c8c8c": "cbbfb5", diff --git a/public/images/pokemon/variant/back/720-unbound.json b/public/images/pokemon/variant/back/720-unbound.json index 61c6c599b5d..b8764c786d3 100644 --- a/public/images/pokemon/variant/back/720-unbound.json +++ b/public/images/pokemon/variant/back/720-unbound.json @@ -8,7 +8,6 @@ "7b91a3": "958672", "925b0f": "414a79", "2c2c2c": "3e162b", - "010101": "010101", "dba423": "9ca7d5", "e0ca61": "becef5", "4f4f4f": "684252" @@ -22,7 +21,6 @@ "7b91a3": "997392", "925b0f": "853015", "2c2c2c": "632373", - "010101": "010101", "dba423": "e2885a", "e0ca61": "ffc26a", "4f4f4f": "a947b4" @@ -36,7 +34,6 @@ "7b91a3": "5c827d", "925b0f": "682b16", "2c2c2c": "1c2433", - "010101": "010101", "dba423": "b05d2d", "e0ca61": "ed9b42", "4f4f4f": "304757" diff --git a/public/images/pokemon/variant/back/720.json b/public/images/pokemon/variant/back/720.json index 49f525d94b0..8d53be6f7f9 100644 --- a/public/images/pokemon/variant/back/720.json +++ b/public/images/pokemon/variant/back/720.json @@ -8,7 +8,6 @@ "807126": "414a79", "ffe14c": "c5deec", "fdfdfd": "f3feff", - "101010": "101010", "ccb43d": "9cafdd", "b8b8cc": "cc9b3c", "dadaf2": "ffdb73" @@ -22,7 +21,6 @@ "807126": "853015", "ffe14c": "ffc26a", "fdfdfd": "fff0e8", - "101010": "101010", "ccb43d": "eb7037", "b8b8cc": "ca79bd", "dadaf2": "f7bae9" @@ -36,7 +34,6 @@ "807126": "682b16", "ffe14c": "ffc26a", "fdfdfd": "ffffde", - "101010": "101010", "ccb43d": "b05d2d", "b8b8cc": "9e8fbb", "dadaf2": "d5cce5" diff --git a/public/images/pokemon/variant/back/728.json b/public/images/pokemon/variant/back/728.json index fb17e2c119e..cd73143937a 100644 --- a/public/images/pokemon/variant/back/728.json +++ b/public/images/pokemon/variant/back/728.json @@ -7,8 +7,6 @@ "436cbf": "009469", "b3627d": "e54c41", "6c90d9": "14af82", - "101010": "101010", - "808080": "808080", "bfbfbf": "c2beb4", "314f8c": "006355", "639ba6": "858d7d", @@ -24,8 +22,6 @@ "436cbf": "a6213f", "b3627d": "a7225c", "6c90d9": "be294a", - "101010": "101010", - "808080": "808080", "bfbfbf": "bfb4b9", "314f8c": "770f29", "639ba6": "b88389", diff --git a/public/images/pokemon/variant/back/729.json b/public/images/pokemon/variant/back/729.json index c4d13768085..27c3cf46560 100644 --- a/public/images/pokemon/variant/back/729.json +++ b/public/images/pokemon/variant/back/729.json @@ -1,6 +1,5 @@ { "1": { - "808080": "808080", "f8f8f8": "fff6e2", "bfbfbf": "c2beb4", "8dafaf": "ff989e", @@ -9,13 +8,11 @@ "326187": "006b65", "2d8ec4": "009a88", "1eb9ee": "0ccfa2", - "101010": "101010", "733f50": "bb402f", "e57ea1": "ff9384", "b3627d": "fb6051" }, "2": { - "808080": "808080", "f8f8f8": "f5edee", "bfbfbf": "bfb4b9", "8dafaf": "b681a6", @@ -23,10 +20,6 @@ "bad8d8": "deabce", "326187": "5a141b", "2d8ec4": "952c3f", - "1eb9ee": "c6496f", - "101010": "101010", - "733f50": "733f50", - "e57ea1": "e57ea1", - "b3627d": "b3627d" + "1eb9ee": "c6496f" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/730.json b/public/images/pokemon/variant/back/730.json index eec815b0572..9ac00923a7a 100644 --- a/public/images/pokemon/variant/back/730.json +++ b/public/images/pokemon/variant/back/730.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "8d3f4a": "a62c20", "c76374": "e54c41", "0e6792": "b54f5f", @@ -18,11 +17,9 @@ "c0bdc1": "beaac0", "aac7e6": "ea7c5b", "f8f8f8": "fff2d4", - "faf8f8": "f1e8f1", - "fef8f8": "fef8f8" + "faf8f8": "f1e8f1" }, "2": { - "101010": "101010", "8d3f4a": "1d1638", "c76374": "391e62", "0e6792": "500518", @@ -40,7 +37,6 @@ "c0bdc1": "c0b4a5", "aac7e6": "e9a5c0", "f8f8f8": "f5edee", - "faf8f8": "f5f3e3", - "fef8f8": "fef8f8" + "faf8f8": "f5f3e3" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/734.json b/public/images/pokemon/variant/back/734.json index 0a47457f284..f398dec7ae5 100644 --- a/public/images/pokemon/variant/back/734.json +++ b/public/images/pokemon/variant/back/734.json @@ -6,7 +6,6 @@ "ba836d": "35576b", "db9f4f": "907e82", "9c5b50": "2a3f52", - "080808": "080808", "413d38": "523716" }, "2": { @@ -16,7 +15,6 @@ "ba836d": "a69c98", "db9f4f": "362e2e", "9c5b50": "786a66", - "080808": "080808", "413d38": "464a4d" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/735.json b/public/images/pokemon/variant/back/735.json index ed9354a9ee8..e87a187b31f 100644 --- a/public/images/pokemon/variant/back/735.json +++ b/public/images/pokemon/variant/back/735.json @@ -3,7 +3,6 @@ "84521a": "462f39", "ecd96c": "b99d95", "b6973a": "7a6a6d", - "101010": "101010", "af754e": "354c6b", "8d473d": "2a3252", "602c24": "03102d", @@ -14,7 +13,6 @@ "84521a": "241b1b", "ecd96c": "4d4242", "b6973a": "362e2e", - "101010": "101010", "af754e": "ada5a4", "8d473d": "90827e", "602c24": "524b4b", diff --git a/public/images/pokemon/variant/back/747.json b/public/images/pokemon/variant/back/747.json index 946fd0fa0aa..c98a0cd804f 100644 --- a/public/images/pokemon/variant/back/747.json +++ b/public/images/pokemon/variant/back/747.json @@ -4,7 +4,6 @@ "f9e07d": "e3e2ff", "753e7b": "9b6459", "ba8dbe": "edd5ca", - "101010": "101010", "9265a3": "7d2671", "335780": "490a3c", "dcafd6": "a21f90", @@ -16,7 +15,6 @@ "f9e07d": "ffebed", "753e7b": "113c3a", "ba8dbe": "2b6157", - "101010": "101010", "9265a3": "e5214a", "335780": "12484e", "dcafd6": "ff3f5a", diff --git a/public/images/pokemon/variant/back/748.json b/public/images/pokemon/variant/back/748.json index 80953670173..c486f245f2e 100644 --- a/public/images/pokemon/variant/back/748.json +++ b/public/images/pokemon/variant/back/748.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "943732": "5c075b", "f28c4f": "c639bd", "e25025": "a21f90", @@ -11,11 +10,9 @@ "455b85": "892e20", "711a6a": "81463e", "b7429a": "d29784", - "d76fa5": "edd5ca", - "171539": "171539" + "d76fa5": "edd5ca" }, "2": { - "101010": "101010", "943732": "ac063c", "f28c4f": "ff3f5a", "e25025": "e12350", @@ -26,7 +23,6 @@ "455b85": "186443", "711a6a": "082b29", "b7429a": "1c524b", - "d76fa5": "2b6157", - "171539": "171539" + "d76fa5": "2b6157" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/751.json b/public/images/pokemon/variant/back/751.json index 40dc82691e9..60f85c366f2 100644 --- a/public/images/pokemon/variant/back/751.json +++ b/public/images/pokemon/variant/back/751.json @@ -3,7 +3,6 @@ "8895ac": "ae504b", "e8e8ea": "ffc8d1", "69670e": "3a112f", - "fcfcfc": "fcfcfc", "878330": "431632", "9bad34": "4e1f42", "cedf42": "673252", @@ -11,22 +10,18 @@ "79c4d4": "f3bd8a", "aed7ee": "fcfcfc", "516a7b": "812b3e", - "5e9cbd": "cc7854", - "101010": "101010" + "5e9cbd": "cc7854" }, "2": { "8895ac": "ea9b43", "e8e8ea": "f1dcc2", "69670e": "263756", - "fcfcfc": "fcfcfc", "878330": "37619a", "9bad34": "4980ac", "cedf42": "72add9", "3c4459": "73312f", "79c4d4": "3b5373", - "aed7ee": "aed7ee", "516a7b": "ba5c2c", - "5e9cbd": "253155", - "101010": "101010" + "5e9cbd": "253155" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/752.json b/public/images/pokemon/variant/back/752.json index 19976c0f3ec..26e7cf2c614 100644 --- a/public/images/pokemon/variant/back/752.json +++ b/public/images/pokemon/variant/back/752.json @@ -3,8 +3,6 @@ "426b84": "7c3b51", "b7d7e6": "ffc8d1", "81afc9": "d187a0", - "fdfdfd": "fdfdfd", - "101010": "101010", "69670e": "3a112f", "9bad34": "4e1f42", "cedf42": "673252", @@ -19,8 +17,6 @@ "426b84": "55506a", "b7d7e6": "dce7ee", "81afc9": "a7a2bc", - "fdfdfd": "fdfdfd", - "101010": "101010", "69670e": "263756", "9bad34": "4980ac", "cedf42": "72add9", diff --git a/public/images/pokemon/variant/back/753.json b/public/images/pokemon/variant/back/753.json index d7f33035127..670cdc102c3 100644 --- a/public/images/pokemon/variant/back/753.json +++ b/public/images/pokemon/variant/back/753.json @@ -3,28 +3,22 @@ "234028": "2e1643", "5ba668": "4e2c62", "468050": "3e2253", - "101010": "101010", "549977": "1b3822", "315945": "0e2616", "69bf94": "27452c", "d98d9a": "a55c36", "ffbfca": "b47145", - "803340": "682c16", - "f8f8f8": "f8f8f8", - "bfbfbf": "bfbfbf" + "803340": "682c16" }, "2": { "234028": "531034", "5ba668": "ce54b0", "468050": "9b2d76", - "101010": "101010", "549977": "5a215a", "315945": "441342", "69bf94": "6e3472", "d98d9a": "263b83", "ffbfca": "3454a5", - "803340": "0b1d4e", - "f8f8f8": "f8f8f8", - "bfbfbf": "bfbfbf" + "803340": "0b1d4e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/755.json b/public/images/pokemon/variant/back/755.json index 55f19f27f11..9574af8ad8d 100644 --- a/public/images/pokemon/variant/back/755.json +++ b/public/images/pokemon/variant/back/755.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "7a3f7a": "451233", "e07c8d": "d64742", "f1b6c8": "e76d5b", @@ -16,7 +15,6 @@ "b5cc91": "866eaf" }, "2": { - "101010": "101010", "7a3f7a": "1d225e", "e07c8d": "7ae7c9", "f1b6c8": "b0ffe1", diff --git a/public/images/pokemon/variant/back/756.json b/public/images/pokemon/variant/back/756.json index 7df75eb0186..40daf267d3b 100644 --- a/public/images/pokemon/variant/back/756.json +++ b/public/images/pokemon/variant/back/756.json @@ -6,7 +6,6 @@ "9867ad": "b64a46", "b591c4": "e76d5b", "cbd59f": "e5aff3", - "101010": "101010", "764b67": "451233", "d08aab": "6c344f", "f5bcd8": "904b66", @@ -22,7 +21,6 @@ "9867ad": "2a2f55", "b591c4": "3a4b75", "cbd59f": "dffffa", - "101010": "101010", "764b67": "0d7a66", "d08aab": "81e3c9", "f5bcd8": "98f5d1", diff --git a/public/images/pokemon/variant/back/761.json b/public/images/pokemon/variant/back/761.json index 4b74180dff7..330ad1a112d 100644 --- a/public/images/pokemon/variant/back/761.json +++ b/public/images/pokemon/variant/back/761.json @@ -2,19 +2,14 @@ "1": { "476629": "215e59", "8fcc52": "70d2e1", - "101010": "101010", "6b993d": "398793", "80334d": "251936", "e55c8a": "9f86e4", - "b3476b": "7e5cdb", - "bfbfbf": "bfbfbf", - "737373": "737373", - "f8f8f8": "f8f8f8" + "b3476b": "7e5cdb" }, "2": { "476629": "3e0a11", "8fcc52": "86232e", - "101010": "101010", "6b993d": "5a0a16", "80334d": "0f0f0f", "e55c8a": "2c574a", diff --git a/public/images/pokemon/variant/back/762.json b/public/images/pokemon/variant/back/762.json index ac231760921..7e194693d2a 100644 --- a/public/images/pokemon/variant/back/762.json +++ b/public/images/pokemon/variant/back/762.json @@ -2,12 +2,8 @@ "1": { "446328": "215e59", "96c853": "70d2e1", - "0f0f0f": "0f0f0f", "659344": "398793", "ebe130": "e66556", - "fdfdfd": "fdfdfd", - "c7b8c4": "c7b8c4", - "72585f": "72585f", "962354": "45366e", "f26284": "7e5cdb", "6a1533": "251936", @@ -16,7 +12,6 @@ "2": { "446328": "3e0a11", "96c853": "86232e", - "0f0f0f": "0f0f0f", "659344": "5a0a16", "ebe130": "5c0505", "fdfdfd": "e4c59e", diff --git a/public/images/pokemon/variant/back/763.json b/public/images/pokemon/variant/back/763.json index 614731b9ad7..91c993c1047 100644 --- a/public/images/pokemon/variant/back/763.json +++ b/public/images/pokemon/variant/back/763.json @@ -8,10 +8,6 @@ "cc4876": "674dad", "96c853": "70d2e1", "659344": "398793", - "0f0f0f": "0f0f0f", - "72585f": "72585f", - "fdfdfd": "fdfdfd", - "c7b8c4": "c7b8c4", "ce466b": "9f86e4" }, "2": { @@ -23,8 +19,6 @@ "cc4876": "254536", "96c853": "86232e", "659344": "5a0a16", - "0f0f0f": "0f0f0f", - "72585f": "72585f", "fdfdfd": "e4c59e", "c7b8c4": "af8260", "ce466b": "2c574a" diff --git a/public/images/pokemon/variant/back/767.json b/public/images/pokemon/variant/back/767.json index 74479ed25ec..405506f716f 100644 --- a/public/images/pokemon/variant/back/767.json +++ b/public/images/pokemon/variant/back/767.json @@ -1,7 +1,6 @@ { "1": { "46334f": "844008", - "080808": "080808", "a65e97": "e8a92a", "713e70": "c86910", "3f5252": "202733", @@ -12,7 +11,6 @@ }, "2": { "46334f": "091b52", - "080808": "080808", "a65e97": "2849ac", "713e70": "1c306d", "3f5252": "3d105f", diff --git a/public/images/pokemon/variant/back/768.json b/public/images/pokemon/variant/back/768.json index 4f2bccd4687..def73d43a89 100644 --- a/public/images/pokemon/variant/back/768.json +++ b/public/images/pokemon/variant/back/768.json @@ -4,7 +4,6 @@ "c8e1cd": "6e6d6d", "546b57": "202733", "81b68e": "494950", - "101010": "101010", "842886": "c85710", "cc5fcf": "ff7e2c", "7a4952": "844008", @@ -20,15 +19,11 @@ "c8e1cd": "2849ac", "546b57": "091b52", "81b68e": "1c306d", - "101010": "101010", "842886": "5722a6", "cc5fcf": "8b51e1", "7a4952": "3d105f", "9a6982": "452772", "bd95a8": "844caf", - "498f6c": "8cdded", - "5c635e": "5c635e", - "2f3330": "2f3330", - "404843": "404843" + "498f6c": "8cdded" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/77.json b/public/images/pokemon/variant/back/77.json index 657eb67ffeb..be654bab991 100644 --- a/public/images/pokemon/variant/back/77.json +++ b/public/images/pokemon/variant/back/77.json @@ -9,8 +9,6 @@ "733131": "2b2333", "c59c6b": "948eb2", "ffefce": "ffffff", - "ffffff": "ffffff", - "000000": "000000", "424a84": "191933", "c5c5d6": "514766", "737ba5": "312c49" @@ -25,8 +23,6 @@ "733131": "03060c", "c59c6b": "191933", "ffefce": "514766", - "ffffff": "ffffff", - "000000": "000000", "424a84": "59497a", "c5c5d6": "b5b5e2", "737ba5": "857cb2" diff --git a/public/images/pokemon/variant/back/771.json b/public/images/pokemon/variant/back/771.json index 0d2997ef79a..f2260e4c6b7 100644 --- a/public/images/pokemon/variant/back/771.json +++ b/public/images/pokemon/variant/back/771.json @@ -2,9 +2,7 @@ "1": { "73223d": "570a00", "d94174": "de884b", - "101010": "101010", "992e52": "c95340", - "1a1a1a": "1a1a1a", "404040": "731b33", "262626": "4a1a30", "595959": "bd5e49", @@ -14,9 +12,7 @@ "2": { "73223d": "b94114", "d94174": "ead059", - "101010": "101010", "992e52": "db7b43", - "1a1a1a": "1a1a1a", "404040": "dacece", "262626": "b8a197", "595959": "1c1c2d", diff --git a/public/images/pokemon/variant/back/772.json b/public/images/pokemon/variant/back/772.json index d367e8f88f7..972da787a08 100644 --- a/public/images/pokemon/variant/back/772.json +++ b/public/images/pokemon/variant/back/772.json @@ -2,7 +2,6 @@ "1": { "454f55": "232843", "92a6a9": "889db1", - "080808": "080808", "6b777e": "526085", "642515": "7e4f36", "c55e3a": "eed8a1", @@ -23,7 +22,6 @@ "2": { "454f55": "18182a", "92a6a9": "65657c", - "080808": "080808", "6b777e": "3b3b51", "642515": "444961", "c55e3a": "c1cfd8", diff --git a/public/images/pokemon/variant/back/773.json b/public/images/pokemon/variant/back/773.json index 4b76892c9db..5d79c355815 100644 --- a/public/images/pokemon/variant/back/773.json +++ b/public/images/pokemon/variant/back/773.json @@ -7,7 +7,6 @@ "d3d7df": "98a8be", "e3e6ec": "bdd1e5", "bcbbc5": "788fb5", - "080808": "080808", "3f3b50": "1e172a", "aba7bc": "493d55", "483c39": "3a2d53", @@ -30,11 +29,8 @@ "d3d7df": "b4bcc4", "e3e6ec": "444455", "bcbbc5": "242433", - "080808": "080808", - "3f3b50": "3f3b50", "aba7bc": "dbd8e8", "483c39": "778894", - "e9eaf8": "e9eaf8", "e64f5e": "98ce58", "1d1845": "41434e", "0073bf": "6a6c75", diff --git a/public/images/pokemon/variant/back/776.json b/public/images/pokemon/variant/back/776.json index e35f08c7c5b..fe8b05aad96 100644 --- a/public/images/pokemon/variant/back/776.json +++ b/public/images/pokemon/variant/back/776.json @@ -3,7 +3,6 @@ "635a4e": "5a4c65", "969678": "887c97", "ccccad": "b4b8c8", - "080808": "080808", "71171a": "210920", "b7282c": "3f2350", "e74545": "4f3d66", @@ -18,7 +17,6 @@ "635a4e": "4c4276", "969678": "7983c1", "ccccad": "adc4e9", - "080808": "080808", "71171a": "976b65", "b7282c": "e1bf9f", "e74545": "faeecd", diff --git a/public/images/pokemon/variant/back/777.json b/public/images/pokemon/variant/back/777.json index ab44e252c60..156a0b4c9bc 100644 --- a/public/images/pokemon/variant/back/777.json +++ b/public/images/pokemon/variant/back/777.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "ffea80": "dec2f0", "ccb852": "ac8fbb", "b3b3b3": "8e71cd", @@ -8,11 +7,9 @@ "808080": "645393", "73593f": "ae428a", "bfbfbf": "d0dadb", - "f8f8f8": "f8f8f8", "595959": "444147" }, "2": { - "101010": "101010", "ffea80": "d65d3c", "ccb852": "7b3c26", "b3b3b3": "4cb568", diff --git a/public/images/pokemon/variant/back/778-busted.json b/public/images/pokemon/variant/back/778-busted.json index 70c365d1ff7..ad19c88cd92 100644 --- a/public/images/pokemon/variant/back/778-busted.json +++ b/public/images/pokemon/variant/back/778-busted.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "404040": "2d1818", "b3a76b": "8d4f3d", "f2e291": "aa6f46", diff --git a/public/images/pokemon/variant/back/778-disguised.json b/public/images/pokemon/variant/back/778-disguised.json index 9b8340c7562..8e986e56ccc 100644 --- a/public/images/pokemon/variant/back/778-disguised.json +++ b/public/images/pokemon/variant/back/778-disguised.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "404040": "2d1818", "b3a76b": "8d4f3d", "f2e291": "aa6f46", @@ -19,4 +18,4 @@ "b37d47": "8eb5cd", "805933": "6d80a4" } -} +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/779.json b/public/images/pokemon/variant/back/779.json index f8bebbf1e1f..f3e9539edf2 100644 --- a/public/images/pokemon/variant/back/779.json +++ b/public/images/pokemon/variant/back/779.json @@ -2,7 +2,6 @@ "1": { "58295f": "a52121", "b75eb7": "f65656", - "101010": "101010", "834589": "c62c2c", "de5c8a": "602b7a", "314d8e": "667fb2", @@ -11,14 +10,11 @@ "5e9fc4": "94c5da", "93d3e1": "caefff", "cfae3f": "d65e5e", - "efe85f": "faa28c", - "fdfdfd": "fdfdfd", - "969696": "969696" + "efe85f": "faa28c" }, "2": { "58295f": "4545c4", "b75eb7": "8585ff", - "101010": "101010", "834589": "6666e2", "de5c8a": "dca032", "314d8e": "7878ca", @@ -27,8 +23,6 @@ "5e9fc4": "afafe1", "93d3e1": "eeeeff", "cfae3f": "2d2c43", - "efe85f": "454457", - "fdfdfd": "fdfdfd", - "969696": "969696" + "efe85f": "454457" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/78.json b/public/images/pokemon/variant/back/78.json index 44cfceafde4..25f9f1b388f 100644 --- a/public/images/pokemon/variant/back/78.json +++ b/public/images/pokemon/variant/back/78.json @@ -7,10 +7,8 @@ "8c5231": "65597f", "ffe6c5": "ffffff", "733131": "2b2333", - "000000": "000000", "efc58c": "cecee5", "c5946b": "948eb2", - "ffffff": "ffffff", "c5c5c5": "514766", "424a52": "191933", "737b84": "312c49" @@ -23,10 +21,8 @@ "8c5231": "090b16", "ffe6c5": "514766", "733131": "03060c", - "000000": "000000", "efc58c": "312c49", "c5946b": "191933", - "ffffff": "ffffff", "c5c5c5": "b5b5e2", "424a52": "59497a", "737b84": "857cb2" diff --git a/public/images/pokemon/variant/back/789.json b/public/images/pokemon/variant/back/789.json index e79ed8007b1..71b8ffb3355 100644 --- a/public/images/pokemon/variant/back/789.json +++ b/public/images/pokemon/variant/back/789.json @@ -3,41 +3,27 @@ "4e5cc7": "6a12dc", "169fda": "9255f2", "34eef8": "db34f8", - "fdfdfd": "fdfdfd", "422d66": "490f2c", - "101010": "101010", "503896": "64173e", - "9d5f00": "9d5f00", - "f8f229": "f8f229", - "283937": "283937", "8c49a9": "dc48a7", - "1484de": "1484de", - "34c3fa": "34c3fa", "e2629f": "f77247" }, "1": { "4e5cc7": "f6a42d", "169fda": "ffdf49", "34eef8": "fff695", - "fdfdfd": "fdfdfd", "422d66": "830000", - "101010": "101010", "503896": "eb5b2a", "9d5f00": "6a738f", "f8f229": "e5efff", "283937": "391c21", "8c49a9": "e52518", - "1484de": "1484de", - "34c3fa": "34c3fa", "e2629f": "ff4079" }, "2": { "4e5cc7": "3dc7e0", "169fda": "71ffd8", - "34eef8": "34eef8", - "fdfdfd": "fdfdfd", "422d66": "030038", - "101010": "101010", "503896": "007ecc", "9d5f00": "61061f", "f8f229": "c22741", diff --git a/public/images/pokemon/variant/back/79.json b/public/images/pokemon/variant/back/79.json index 4bec35f4691..961a48e4815 100644 --- a/public/images/pokemon/variant/back/79.json +++ b/public/images/pokemon/variant/back/79.json @@ -1,9 +1,5 @@ { "0": { - "6b6363": "6b6363", - "d6cece": "d6cece", - "101010": "101010", - "ffffff": "ffffff", "ffa5a5": "cebdff", "de637b": "846bbd", "ff8494": "ad94ff", @@ -11,14 +7,9 @@ "7b2131": "52397b", "8c5a19": "8c6b10", "ffe6b5": "fff7b5", - "dea563": "deb55a", - "efc58c": "efc58c" + "dea563": "deb55a" }, "1": { - "6b6363": "6b6363", - "d6cece": "d6cece", - "101010": "101010", - "ffffff": "ffffff", "ffa5a5": "ad7459", "de637b": "5b3332", "ff8494": "885345", @@ -30,10 +21,6 @@ "efc58c": "d49983" }, "2": { - "6b6363": "6b6363", - "d6cece": "d6cece", - "101010": "101010", - "ffffff": "ffffff", "ffa5a5": "ffeb9b", "de637b": "dd8f47", "ff8494": "eebd6a", diff --git a/public/images/pokemon/variant/back/790.json b/public/images/pokemon/variant/back/790.json index 415b2d26074..e111a9e35b9 100644 --- a/public/images/pokemon/variant/back/790.json +++ b/public/images/pokemon/variant/back/790.json @@ -4,14 +4,9 @@ "faf54e": "e5efff", "c87522": "7b89c4", "e8a61e": "aebde2", - "101010": "101010", - "fdfdfd": "fdfdfd", "169fda": "ffdf49", "1d3e89": "a20b02", - "e2629f": "e2629f", "764394": "eb5b2a", - "1e232b": "1e232b", - "17a6e3": "17a6e3", "2c5fab": "ff4079" }, "2": { @@ -19,14 +14,9 @@ "faf54e": "d4314c", "c87522": "890425", "e8a61e": "ae1a3d", - "101010": "101010", - "fdfdfd": "fdfdfd", - "169fda": "169fda", "1d3e89": "0f2388", "e2629f": "71ffd8", "764394": "7e13bf", - "1e232b": "1e232b", - "17a6e3": "17a6e3", "2c5fab": "3dc7e0" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/791-radiant-sun.json b/public/images/pokemon/variant/back/791-radiant-sun.json index a3080d379bf..545a67c4114 100644 --- a/public/images/pokemon/variant/back/791-radiant-sun.json +++ b/public/images/pokemon/variant/back/791-radiant-sun.json @@ -1,7 +1,6 @@ { "1": { "aa8735": "7c0004", - "151515": "151515", "f9f190": "ff648b", "dcb75f": "ec3975", "868e8d": "8c190b", @@ -11,7 +10,6 @@ }, "2": { "aa8735": "730627", - "151515": "151515", "f9f190": "ea2a58", "dcb75f": "97082c", "868e8d": "10175e", diff --git a/public/images/pokemon/variant/back/791.json b/public/images/pokemon/variant/back/791.json index 0c3f46e61fb..8732147daad 100644 --- a/public/images/pokemon/variant/back/791.json +++ b/public/images/pokemon/variant/back/791.json @@ -1,6 +1,5 @@ { "1": { - "080808": "080808", "91510b": "7a80ab", "d29e31": "c5bbd6", "efe85a": "edf4ff", @@ -14,7 +13,6 @@ "313139": "61080b" }, "2": { - "080808": "080808", "91510b": "730627", "d29e31": "890425", "efe85a": "c1143d", diff --git a/public/images/pokemon/variant/back/792-full-moon.json b/public/images/pokemon/variant/back/792-full-moon.json index d4b01d5f77b..d252adadfb0 100644 --- a/public/images/pokemon/variant/back/792-full-moon.json +++ b/public/images/pokemon/variant/back/792-full-moon.json @@ -3,8 +3,6 @@ "aa8735": "765a3f", "f9f190": "fffef2", "dcb75f": "e6ded2", - "fffef2": "fffef2", - "151515": "151515", "59b3c6": "971283", "85d0e0": "ec5ddf", "fefefe": "ffdda2", @@ -17,7 +15,6 @@ "f9f190": "c22741", "dcb75f": "980f2a", "fffef2": "f34958", - "151515": "151515", "59b3c6": "2460ac", "85d0e0": "3797d0", "fefefe": "ffd1d1", diff --git a/public/images/pokemon/variant/back/792.json b/public/images/pokemon/variant/back/792.json index 2e4d97ae0d5..259fadf021c 100644 --- a/public/images/pokemon/variant/back/792.json +++ b/public/images/pokemon/variant/back/792.json @@ -3,8 +3,6 @@ "665d14": "624427", "e5da7f": "e6ded2", "a69e5c": "afa191", - "080808": "080808", - "fdfce8": "fdfce8", "45348e": "bc1836", "bcb5c1": "ffd386", "240f62": "60000c", @@ -17,11 +15,9 @@ "665d14": "6b0420", "e5da7f": "c22741", "a69e5c": "980f2a", - "080808": "080808", "fdfce8": "ff6d74", "45348e": "1a3186", "bcb5c1": "e19096", - "240f62": "240f62", "7b807e": "7e343d", "fefefe": "ffd1d1", "6046d8": "1550a1", diff --git a/public/images/pokemon/variant/back/793.json b/public/images/pokemon/variant/back/793.json index c0254131b0e..a99c6a324df 100644 --- a/public/images/pokemon/variant/back/793.json +++ b/public/images/pokemon/variant/back/793.json @@ -7,8 +7,7 @@ "308ebc": "1ecb76", "6b868f": "47090d", "26507d": "109d6a", - "53b0d9": "40ffcc", - "101010": "101010" + "53b0d9": "40ffcc" }, "2": { "9ba0b6": "1f1b9c", @@ -18,7 +17,6 @@ "308ebc": "24a7b0", "6b868f": "120d6b", "26507d": "2368b1", - "53b0d9": "6bebff", - "101010": "101010" + "53b0d9": "6bebff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/797.json b/public/images/pokemon/variant/back/797.json index 488b7a6b7de..91bb773e7b8 100644 --- a/public/images/pokemon/variant/back/797.json +++ b/public/images/pokemon/variant/back/797.json @@ -1,7 +1,6 @@ { "1": { "4c7e71": "2d3cb0", - "101010": "101010", "fefefe": "f9e5d1", "bccfc4": "f2b97f", "2b584b": "19155c", @@ -15,7 +14,6 @@ }, "2": { "4c7e71": "69132d", - "101010": "101010", "fefefe": "534757", "bccfc4": "242733", "2b584b": "410425", diff --git a/public/images/pokemon/variant/back/798.json b/public/images/pokemon/variant/back/798.json index 33fc6804577..13c60718373 100644 --- a/public/images/pokemon/variant/back/798.json +++ b/public/images/pokemon/variant/back/798.json @@ -21,7 +21,6 @@ "646471": "283e65", "fdfdfd": "87d2da", "cfcfcf": "4a86b8", - "101010": "101010", "aeaeae": "305895", "a86c1c": "5a2036", "686877": "110d1a", diff --git a/public/images/pokemon/variant/back/80-mega.json b/public/images/pokemon/variant/back/80-mega.json index 96b9c22aa83..b751d8ac584 100644 --- a/public/images/pokemon/variant/back/80-mega.json +++ b/public/images/pokemon/variant/back/80-mega.json @@ -1,11 +1,8 @@ { "1": { "783030": "3f2729", - "181818": "181818", "f89090": "885345", "e06878": "5b3332", - "deded5": "deded5", - "f8f8f8": "f8f8f8", "805820": "9f675f", "e8d080": "e0b69d", "505058": "7c5b40", @@ -15,11 +12,8 @@ }, "2": { "783030": "c08746", - "181818": "181818", "f89090": "eebd6a", "e06878": "de9048", - "deded5": "deded5", - "f8f8f8": "f8f8f8", "805820": "69080f", "e8d080": "d16b34", "505058": "192b32", diff --git a/public/images/pokemon/variant/back/80.json b/public/images/pokemon/variant/back/80.json index a95ecf48908..d8e5597dc52 100644 --- a/public/images/pokemon/variant/back/80.json +++ b/public/images/pokemon/variant/back/80.json @@ -1,32 +1,24 @@ { "1": { "7b3131": "3f2729", - "191919": "191919", "52525a": "8b5d37", "ff9494": "895446", "b5bdbd": "f0d090", "e66b7b": "5c3433", "8c9494": "bf9562", - "b6b6ae": "b6b6ae", "845a21": "9f675f", - "deded6": "deded6", "efd684": "e0b69d", - "ffffff": "ffffff", "cea563": "d49983" }, "2": { "7b3131": "a54729", - "191919": "191919", "52525a": "192b32", "ff9494": "edbc69", "b5bdbd": "4b7567", "e66b7b": "dd8f47", "8c9494": "2a4947", - "b6b6ae": "b6b6ae", "845a21": "69080f", - "deded6": "deded6", "efd684": "d16b34", - "ffffff": "ffffff", "cea563": "b34d2e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/800-dawn-wings.json b/public/images/pokemon/variant/back/800-dawn-wings.json index e8391c97440..08002017da4 100644 --- a/public/images/pokemon/variant/back/800-dawn-wings.json +++ b/public/images/pokemon/variant/back/800-dawn-wings.json @@ -3,7 +3,6 @@ "305fb6": "624427", "82c5f7": "e6ded2", "6197e9": "afa191", - "080808": "080808", "afd2da": "bc1836", "7b807e": "86102d", "fefefe": "ffd386", @@ -17,7 +16,6 @@ "305fb6": "3b0015", "82c5f7": "970b22", "6197e9": "5b0318", - "080808": "080808", "afd2da": "1a3186", "7b807e": "041243", "fefefe": "ffd7fc", diff --git a/public/images/pokemon/variant/back/800-dusk-mane.json b/public/images/pokemon/variant/back/800-dusk-mane.json index af3d20d7b58..e070b214b50 100644 --- a/public/images/pokemon/variant/back/800-dusk-mane.json +++ b/public/images/pokemon/variant/back/800-dusk-mane.json @@ -1,12 +1,10 @@ { "1": { - "080808": "080808", "1b2021": "3a001c", "2b3233": "5f0021", "424a50": "890425", "ae6200": "b72011", "d38a2b": "7c0004", - "f3cf55": "f3cf55", "768188": "c8245d", "89704b": "731f09", "dbcc8f": "da6e40", @@ -14,7 +12,6 @@ "fdfcf8": "e8e7ff" }, "2": { - "080808": "080808", "1b2021": "240842", "2b3233": "3e135f", "424a50": "602483", diff --git a/public/images/pokemon/variant/back/800-ultra.json b/public/images/pokemon/variant/back/800-ultra.json index 114151d61a1..b0cff259a9a 100644 --- a/public/images/pokemon/variant/back/800-ultra.json +++ b/public/images/pokemon/variant/back/800-ultra.json @@ -7,7 +7,6 @@ "bc912c": "8e0021", "fcf167": "ee2033", "8e6924": "770031", - "151515": "151515", "dcb92c": "bc0125", "fefac2": "ff7e75" }, @@ -19,7 +18,6 @@ "bc912c": "900090", "fcf167": "ff49e7", "8e6924": "510059", - "151515": "151515", "dcb92c": "d10cc7", "fefac2": "ff8ae9" } diff --git a/public/images/pokemon/variant/back/800.json b/public/images/pokemon/variant/back/800.json index 7e1dad5a59d..1b96bb66727 100644 --- a/public/images/pokemon/variant/back/800.json +++ b/public/images/pokemon/variant/back/800.json @@ -5,8 +5,7 @@ "fbfbfb": "e8e7ff", "768188": "c8245d", "b5bbbf": "a266eb", - "424a50": "890425", - "080808": "080808" + "424a50": "890425" }, "2": { "2b3233": "3e135f", @@ -14,7 +13,6 @@ "fbfbfb": "ffb8c9", "768188": "b13dc8", "b5bbbf": "f66fdc", - "424a50": "602483", - "080808": "080808" + "424a50": "602483" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/802.json b/public/images/pokemon/variant/back/802.json index a5fdbcd63b7..6b2bce333ce 100644 --- a/public/images/pokemon/variant/back/802.json +++ b/public/images/pokemon/variant/back/802.json @@ -3,7 +3,6 @@ "536155": "29352b", "2c3e30": "111c12", "6a806d": "526555", - "101010": "101010", "2d3137": "084434", "747778": "76bc8f", "4e5356": "3a7e5d" @@ -12,7 +11,6 @@ "536155": "b5b1ce", "2c3e30": "7a758d", "6a806d": "cbc9e8", - "101010": "101010", "2d3137": "17145e", "747778": "515aad", "4e5356": "2f3079" @@ -21,7 +19,6 @@ "536155": "82b7c3", "2c3e30": "508294", "6a806d": "a7eaee", - "101010": "101010", "2d3137": "5a0423", "747778": "ce3e63", "4e5356": "97123b" diff --git a/public/images/pokemon/variant/back/803.json b/public/images/pokemon/variant/back/803.json index 99736595873..acd89674274 100644 --- a/public/images/pokemon/variant/back/803.json +++ b/public/images/pokemon/variant/back/803.json @@ -1,7 +1,6 @@ { "1": { "78757f": "449e93", - "101010": "101010", "ccc0d8": "e3ffec", "98295e": "27579e", "d9338e": "3492b9", @@ -13,7 +12,6 @@ }, "2": { "78757f": "cd9b85", - "101010": "101010", "ccc0d8": "ffefe0", "98295e": "a12f63", "d9338e": "d6487a", diff --git a/public/images/pokemon/variant/back/804.json b/public/images/pokemon/variant/back/804.json index 5686b72ac9b..d418b17ae86 100644 --- a/public/images/pokemon/variant/back/804.json +++ b/public/images/pokemon/variant/back/804.json @@ -1,7 +1,6 @@ { "1": { "5f4670": "16396f", - "101010": "101010", "9372c0": "22658d", "bc88ff": "359faf", "9e2348": "81262d", @@ -17,7 +16,6 @@ }, "2": { "5f4670": "0e3346", - "101010": "101010", "9372c0": "2d794e", "bc88ff": "68b363", "9e2348": "7e4e3d", diff --git a/public/images/pokemon/variant/back/808.json b/public/images/pokemon/variant/back/808.json index e7625f51e73..8d6e17d9210 100644 --- a/public/images/pokemon/variant/back/808.json +++ b/public/images/pokemon/variant/back/808.json @@ -4,10 +4,8 @@ "ab732b": "ce5a6f", "dea220": "ff7c8e", "ffda45": "ffbeae", - "101010": "101010", "3d3534": "2c4048", "59544e": "38585b", - "f9f9f9": "f9f9f9", "67675f": "426e73", "8a8d7e": "6a8f97", "b1b5a6": "98d6f0", @@ -20,15 +18,11 @@ "ab732b": "2d2931", "dea220": "64486f", "ffda45": "9b6e98", - "101010": "101010", "3d3534": "780000", "59544e": "9e002e", - "f9f9f9": "f9f9f9", "67675f": "ba2b41", "8a8d7e": "d66352", "b1b5a6": "f49769", - "dcdcda": "ffbe6e", - "741012": "741012", - "c2292e": "c2292e" + "dcdcda": "ffbe6e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/809-gigantamax.json b/public/images/pokemon/variant/back/809-gigantamax.json index 0d1c729ec7c..f9ba49de9c5 100644 --- a/public/images/pokemon/variant/back/809-gigantamax.json +++ b/public/images/pokemon/variant/back/809-gigantamax.json @@ -4,10 +4,8 @@ "b1b5a6": "98d6f0", "dcdcda": "c2effc", "e8e8e8": "dff7f7", - "f9f9f9": "f9f9f9", "67675f": "426e73", "59544e": "38585b", - "101010": "101010", "dea220": "ff7c8e", "ab732b": "ce5a6f", "3d3534": "2c4048", @@ -20,15 +18,12 @@ "b1b5a6": "f49769", "dcdcda": "ffbe6e", "e8e8e8": "ffde6c", - "f9f9f9": "f9f9f9", "67675f": "ba2b41", "59544e": "9e002e", - "101010": "101010", "dea220": "64486f", "ab732b": "2d2931", "3d3534": "780000", "e46d8b": "741012", - "211d1d": "570000", - "c2292e": "c2292e" + "211d1d": "570000" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/809.json b/public/images/pokemon/variant/back/809.json index 78c209e4ea8..1f597aa305e 100644 --- a/public/images/pokemon/variant/back/809.json +++ b/public/images/pokemon/variant/back/809.json @@ -4,7 +4,6 @@ "211d1d": "232a2b", "59544e": "38585b", "814f23": "85374d", - "101010": "101010", "ab732b": "ce5a6f", "67675f": "426e73", "ffda45": "ffbeae", @@ -12,7 +11,6 @@ "dea220": "ff7c8e", "b1b5a6": "98d6f0", "dcdcda": "c2effc", - "f9f9f9": "f9f9f9", "c2292e": "ffce6b" }, "2": { @@ -20,15 +18,12 @@ "211d1d": "570000", "59544e": "9e002e", "814f23": "101010", - "101010": "101010", "ab732b": "2d2931", "67675f": "ba2b41", "ffda45": "9b6e98", "8a8d7e": "d66352", "dea220": "64486f", "b1b5a6": "f49769", - "dcdcda": "ffbe6e", - "f9f9f9": "f9f9f9", - "c2292e": "c2292e" + "dcdcda": "ffbe6e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/81.json b/public/images/pokemon/variant/back/81.json index a5b983598c1..08c0ab1e797 100644 --- a/public/images/pokemon/variant/back/81.json +++ b/public/images/pokemon/variant/back/81.json @@ -3,9 +3,7 @@ "8c8c8c": "c36c77", "b5b5b5": "f99596", "d6d6d6": "ffc4b8", - "ffffff": "ffffff", "524a4a": "90495b", - "101010": "101010", "3a3131": "612e40", "5a8463": "c36c77", "ef1900": "e67468", @@ -20,7 +18,6 @@ "d6d6d6": "f2c76c", "ffffff": "fffb93", "524a4a": "8c500b", - "101010": "101010", "3a3131": "662e00", "5a8463": "a65410", "ef1900": "e6a845", diff --git a/public/images/pokemon/variant/back/816.json b/public/images/pokemon/variant/back/816.json index 8153a53decd..2db6adf77dc 100644 --- a/public/images/pokemon/variant/back/816.json +++ b/public/images/pokemon/variant/back/816.json @@ -7,8 +7,7 @@ "425493": "7d292a", "5091c0": "b5464b", "6ab6d2": "e66371", - "add7e7": "e6828e", - "101010": "101010" + "add7e7": "e6828e" }, "2": { "1f2d63": "6e1a4c", @@ -18,7 +17,6 @@ "425493": "813535", "5091c0": "dea26c", "6ab6d2": "ffeeb8", - "add7e7": "fffbec", - "101010": "101010" + "add7e7": "fffbec" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/817.json b/public/images/pokemon/variant/back/817.json index 7c74f55eef9..818b677a356 100644 --- a/public/images/pokemon/variant/back/817.json +++ b/public/images/pokemon/variant/back/817.json @@ -8,12 +8,10 @@ "6c4499": "a1572f", "70cce0": "eb8577", "a278c7": "dd8a4f", - "101010": "101010", "3d6424": "83403e", "6ba01b": "a36d5d", "8cd222": "d99f8d", - "ccc7cd": "c7c1bd", - "fefefe": "fefefe" + "ccc7cd": "c7c1bd" }, "2": { "183569": "731f4e", @@ -24,11 +22,9 @@ "6c4499": "2c5aa8", "70cce0": "ffe5a3", "a278c7": "459dca", - "101010": "101010", "3d6424": "731317", "6ba01b": "ba2c22", "8cd222": "d85633", - "ccc7cd": "becee1", - "fefefe": "fefefe" + "ccc7cd": "becee1" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/818-gigantamax.json b/public/images/pokemon/variant/back/818-gigantamax.json index e885e058b5a..bca7f49b3fb 100644 --- a/public/images/pokemon/variant/back/818-gigantamax.json +++ b/public/images/pokemon/variant/back/818-gigantamax.json @@ -4,17 +4,12 @@ "f2f889": "f889b6", "1c7bc1": "06cccf", "e9cd5f": "e95f92", - "101010": "101010", "01599a": "0ea6a8", "549bc3": "0060a4", "9cd2e2": "107ac0", - "ee3e5c": "ee3e5c", "31302f": "989dac", "4a4a4d": "c4ccd4", - "5cdada": "5cdada", "5e9bc3": "0a60a4", - "fdfdfd": "fdfdfd", - "b0faff": "b0faff", "646565": "f7fbfc" }, "1": { @@ -22,7 +17,6 @@ "f2f889": "82664c", "1c7bc1": "d94a4c", "e9cd5f": "614432", - "101010": "101010", "01599a": "9c2734", "549bc3": "a45e4a", "9cd2e2": "e1926f", @@ -40,7 +34,6 @@ "f2f889": "65c2e5", "1c7bc1": "fff2cc", "e9cd5f": "4484c3", - "101010": "101010", "01599a": "d8b284", "549bc3": "e38544", "9cd2e2": "ffcd57", diff --git a/public/images/pokemon/variant/back/818.json b/public/images/pokemon/variant/back/818.json index fc948072c94..bbb18e197b3 100644 --- a/public/images/pokemon/variant/back/818.json +++ b/public/images/pokemon/variant/back/818.json @@ -7,8 +7,6 @@ "e9cd5f": "614432", "549bc3": "a55846", "9cd2e2": "e1926f", - "101010": "101010", - "fdfdfd": "fdfdfd", "ff7c00": "5885a2", "31302f": "251e1c", "646565": "4c4643", @@ -23,8 +21,6 @@ "e9cd5f": "4484c3", "549bc3": "e38544", "9cd2e2": "ffcd57", - "101010": "101010", - "fdfdfd": "fdfdfd", "ff7c00": "a13047", "31302f": "510e3c", "646565": "be3a7d", diff --git a/public/images/pokemon/variant/back/82.json b/public/images/pokemon/variant/back/82.json index daed151e7d4..2db8f3ef0ca 100644 --- a/public/images/pokemon/variant/back/82.json +++ b/public/images/pokemon/variant/back/82.json @@ -2,13 +2,11 @@ "1": { "8c8c8c": "c36c77", "524a4a": "90495b", - "ffffff": "ffffff", "d6d6d6": "ffc4b8", "ff8c4a": "ffc4b8", "b5b5b5": "f99596", "3a3131": "612e40", "ef1900": "e67468", - "101010": "101010", "5a8463": "c36c77", "8cb5a5": "f99596", "d6f7de": "ffe9e5", @@ -25,7 +23,6 @@ "b5b5b5": "b27a20", "3a3131": "401d00", "ef1900": "a65410", - "101010": "101010", "5a8463": "701900", "8cb5a5": "a65410", "d6f7de": "e6a845", diff --git a/public/images/pokemon/variant/back/821.json b/public/images/pokemon/variant/back/821.json index 6101b9d4261..dcbdaf08804 100644 --- a/public/images/pokemon/variant/back/821.json +++ b/public/images/pokemon/variant/back/821.json @@ -1,6 +1,5 @@ { "1": { - "080808": "080808", "201a12": "4b2a5e", "505038": "bc7dc3", "272b47": "6a445c", @@ -13,7 +12,6 @@ "ac9534": "be919e" }, "2": { - "080808": "080808", "201a12": "a46828", "505038": "eaae36", "272b47": "612a0e", diff --git a/public/images/pokemon/variant/back/822.json b/public/images/pokemon/variant/back/822.json index cedd8cdfdff..22c63166273 100644 --- a/public/images/pokemon/variant/back/822.json +++ b/public/images/pokemon/variant/back/822.json @@ -1,11 +1,9 @@ { "1": { "403524": "ad6f83", - "201a12": "201a12", "505038": "e7a6c9", "252d49": "c8658a", "2f4577": "f4a0b9", - "080808": "080808", "426eb2": "ffdeeb", "659aba": "fff6f8", "444f59": "2e262f", @@ -13,11 +11,9 @@ }, "2": { "403524": "b95212", - "201a12": "201a12", "505038": "dc7c16", "252d49": "91591e", "2f4577": "eaae36", - "080808": "080808", "426eb2": "edd472", "659aba": "fff1b9", "444f59": "541705", diff --git a/public/images/pokemon/variant/back/823.json b/public/images/pokemon/variant/back/823.json index eb3f2d02655..3245dd6897b 100644 --- a/public/images/pokemon/variant/back/823.json +++ b/public/images/pokemon/variant/back/823.json @@ -1,21 +1,17 @@ { "1": { - "010101": "010101", "251d4e": "6a445c", "434475": "f4a0b9", "303360": "ad6f83", "646ca8": "ffdeeb", "4d5488": "e7a6c9", "f30101": "df7b10", - "ffa8a8": "ffa8a8", "4e4150": "57445a", - "2e262f": "2e262f", "18173d": "4b2a5e", "2c2b58": "845195", "3e3d6d": "bc7dc3" }, "2": { - "010101": "010101", "251d4e": "612a0e", "434475": "dc7c16", "303360": "b95212", diff --git a/public/images/pokemon/variant/back/829.json b/public/images/pokemon/variant/back/829.json index c3f2e3d3228..4fa2d435fb0 100644 --- a/public/images/pokemon/variant/back/829.json +++ b/public/images/pokemon/variant/back/829.json @@ -4,8 +4,6 @@ "e09b24": "1da3c2", "f4d626": "4aebe3", "fef54b": "84fff5", - "101010": "101010", - "fef1a7": "fef1a7", "841d1a": "3b0122", "cf301f": "601335", "fb472f": "7b2640", @@ -17,7 +15,6 @@ "e09b24": "6b2d9e", "f4d626": "bc77ff", "fef54b": "e8aaff", - "101010": "101010", "fef1a7": "f6e6ff", "841d1a": "14103b", "cf301f": "24244b", diff --git a/public/images/pokemon/variant/back/830.json b/public/images/pokemon/variant/back/830.json index 517f81ff692..fdb0b20d021 100644 --- a/public/images/pokemon/variant/back/830.json +++ b/public/images/pokemon/variant/back/830.json @@ -6,8 +6,7 @@ "e8d5c6": "a2d2e7", "5c6738": "6f3e7b", "8a9247": "9d6aa5", - "bab743": "c38ec6", - "101010": "101010" + "bab743": "c38ec6" }, "2": { "89593b": "442664", @@ -16,7 +15,6 @@ "e8d5c6": "d5aee9", "5c6738": "133049", "8a9247": "3c627e", - "bab743": "6a9cbb", - "101010": "101010" + "bab743": "6a9cbb" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/835.json b/public/images/pokemon/variant/back/835.json index 0e4b99223d7..0c68b758f61 100644 --- a/public/images/pokemon/variant/back/835.json +++ b/public/images/pokemon/variant/back/835.json @@ -1,7 +1,6 @@ { "1": { "844840": "051514", - "101010": "101010", "bd8d62": "e0bb76", "a26642": "aa8e5a", "d1cccb": "e7c78d", @@ -15,11 +14,9 @@ }, "2": { "844840": "313e38", - "101010": "101010", "bd8d62": "509468", "a26642": "3d5d59", "d1cccb": "a0bcaa", - "fbfbfb": "fbfbfb", "837a76": "43554d", "9a6229": "2b2042", "f7da11": "776baf", diff --git a/public/images/pokemon/variant/back/836.json b/public/images/pokemon/variant/back/836.json index da9680ed581..fadea8ede4b 100644 --- a/public/images/pokemon/variant/back/836.json +++ b/public/images/pokemon/variant/back/836.json @@ -1,13 +1,10 @@ { "1": { - "a06d21": "a06d21", - "0d0d0d": "0d0d0d", "fad833": "e0bb76", "c8ad25": "aa8e5a", "495043": "28797b", "dec12e": "e0bb76", "cfc7c6": "cbcdb4", - "8c7b7a": "8c7b7a", "f2efef": "fdffe1", "fff665": "e7c78d", "373737": "2c4f4d", @@ -15,7 +12,6 @@ }, "2": { "a06d21": "213d3a", - "0d0d0d": "0d0d0d", "fad833": "509468", "c8ad25": "3d5d59", "495043": "3c2e5b", diff --git a/public/images/pokemon/variant/back/84.json b/public/images/pokemon/variant/back/84.json index 01886764957..9dca4a84b80 100644 --- a/public/images/pokemon/variant/back/84.json +++ b/public/images/pokemon/variant/back/84.json @@ -3,10 +3,7 @@ "523a19": "1b4e31", "946b5a": "3a8951", "bd8c52": "65bf75", - "636363": "636363", "dead73": "a5e6a0", - "ffffff": "ffffff", - "101010": "101010", "a5844a": "bba689", "635210": "1d1636", "efdead": "ece4ce", @@ -18,8 +15,6 @@ "bd8c52": "9f4079", "636363": "3a2050", "dead73": "c35d88", - "ffffff": "ffffff", - "101010": "101010", "a5844a": "84333c", "635210": "642330", "efdead": "efbcad", @@ -31,8 +26,6 @@ "bd8c52": "618bbc", "636363": "7a355d", "dead73": "95bedc", - "ffffff": "ffffff", - "101010": "101010", "a5844a": "2e2448", "635210": "1d1636", "efdead": "584c6b", diff --git a/public/images/pokemon/variant/back/85.json b/public/images/pokemon/variant/back/85.json index fe780361521..145458243f3 100644 --- a/public/images/pokemon/variant/back/85.json +++ b/public/images/pokemon/variant/back/85.json @@ -1,16 +1,11 @@ { "0": { - "424242": "424242", - "848484": "848484", - "000000": "000000", "5a4221": "1b4e31", "a57b5a": "3a8951", "ce9c52": "65bf75", "635a42": "7a614c", "efdead": "ece4ce", - "ffffff": "ffffff", "b5a57b": "bba689", - "d6cece": "d6cece", "b54242": "1e2b61", "ffd6e6": "accaf0", "f784a5": "3a5797" @@ -18,15 +13,12 @@ "1": { "424242": "3a2050", "848484": "6b4685", - "000000": "000000", "5a4221": "48123f", "a57b5a": "6f265a", "ce9c52": "9f4079", "635a42": "84333c", "efdead": "efbcad", - "ffffff": "ffffff", "b5a57b": "c46e6e", - "d6cece": "d6cece", "b54242": "372d68", "ffd6e6": "cbadec", "f784a5": "8163b5" @@ -34,15 +26,12 @@ "2": { "424242": "412334", "848484": "7d4c60", - "000000": "000000", "5a4221": "1b2c59", "a57b5a": "618bbc", "ce9c52": "95bedc", "635a42": "1d1636", "efdead": "584c6b", - "ffffff": "ffffff", "b5a57b": "43385c", - "d6cece": "d6cece", "b54242": "612253", "ffd6e6": "e1a272", "f784a5": "91425d" diff --git a/public/images/pokemon/variant/back/850.json b/public/images/pokemon/variant/back/850.json index 0c37d56a9a3..974ab0a09b3 100644 --- a/public/images/pokemon/variant/back/850.json +++ b/public/images/pokemon/variant/back/850.json @@ -8,7 +8,6 @@ "681607": "065b58", "42221c": "36203c", "2f1610": "24122b", - "101010": "101010", "be5409": "25a96a", "f89e08": "a3ffb9" }, @@ -20,9 +19,6 @@ "ff5839": "f360a3", "681607": "4a1036", "42221c": "222957", - "2f1610": "121439", - "101010": "101010", - "be5409": "be5409", - "f89e08": "f89e08" + "2f1610": "121439" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/851-gigantamax.json b/public/images/pokemon/variant/back/851-gigantamax.json index fe3e1c837e7..f235f9b4e56 100644 --- a/public/images/pokemon/variant/back/851-gigantamax.json +++ b/public/images/pokemon/variant/back/851-gigantamax.json @@ -8,9 +8,7 @@ "e71d12": "59365d", "9a2d21": "36203c", "5b2f26": "5e3d35", - "2f1610": "2f1610", "804a3e": "745f47", - "010000": "010000", "f4ba01": "71ea9d", "ff5839": "ad58ab" }, @@ -19,13 +17,10 @@ "f89e08": "d73981", "ffd901": "ffcb61", "5b0f0f": "121439", - "941528": "941528", "e71d12": "36426c", "9a2d21": "222957", "5b2f26": "60144b", - "2f1610": "2f1610", "804a3e": "973554", - "010000": "010000", "f4ba01": "e98a27", "ff5839": "7866cb" } diff --git a/public/images/pokemon/variant/back/851.json b/public/images/pokemon/variant/back/851.json index 36b7e56509e..3b1881b132d 100644 --- a/public/images/pokemon/variant/back/851.json +++ b/public/images/pokemon/variant/back/851.json @@ -12,11 +12,9 @@ "42221c": "36203c", "2f1610": "24122b", "681607": "024f2d", - "101010": "101010", "941528": "005f35" }, "2": { - "be5409": "be5409", "f89e08": "f36d73", "ffd901": "ffc143", "5b2f26": "36426c", @@ -27,8 +25,6 @@ "ff5839": "ff6970", "42221c": "222957", "2f1610": "121439", - "681607": "6e0442", - "101010": "101010", - "941528": "941528" + "681607": "6e0442" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/854.json b/public/images/pokemon/variant/back/854.json index 2446d716998..09196ea7351 100644 --- a/public/images/pokemon/variant/back/854.json +++ b/public/images/pokemon/variant/back/854.json @@ -9,7 +9,6 @@ "733a87": "cc752f", "9aedea": "b74f6c", "af63c4": "ffffeb", - "101010": "101010", "c3bfe0": "f2bbaa" }, "2": { @@ -22,7 +21,6 @@ "733a87": "2a3c2c", "9aedea": "c9c0b9", "af63c4": "82b183", - "101010": "101010", "c3bfe0": "524c4e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/855.json b/public/images/pokemon/variant/back/855.json index bd1bbcedb7f..a9a234fd471 100644 --- a/public/images/pokemon/variant/back/855.json +++ b/public/images/pokemon/variant/back/855.json @@ -9,7 +9,6 @@ "4bb2af": "531d2b", "c3bfe0": "c06d66", "f5f9fa": "f2bbaa", - "101010": "101010", "733a87": "ef9e5c", "af63c4": "ffffeb", "215557": "3c0e1b" @@ -24,7 +23,6 @@ "4bb2af": "222221", "c3bfe0": "3e383a", "f5f9fa": "524c4e", - "101010": "101010", "733a87": "538c61", "af63c4": "82b183", "215557": "222221" diff --git a/public/images/pokemon/variant/back/856.json b/public/images/pokemon/variant/back/856.json index 3d245b74324..bfc575d89d7 100644 --- a/public/images/pokemon/variant/back/856.json +++ b/public/images/pokemon/variant/back/856.json @@ -2,7 +2,6 @@ "1": { "727ab1": "1d4a3b", "c8e9ff": "5ec183", - "181818": "181818", "acbfdf": "3b9665", "bb6a99": "043232", "f9d5da": "298675", @@ -13,7 +12,6 @@ "2": { "727ab1": "6b0124", "c8e9ff": "cb304d", - "181818": "181818", "acbfdf": "a11437", "bb6a99": "30163d", "f9d5da": "523f73", diff --git a/public/images/pokemon/variant/back/858-gigantamax.json b/public/images/pokemon/variant/back/858-gigantamax.json index 98f13ee6842..a1b18562909 100644 --- a/public/images/pokemon/variant/back/858-gigantamax.json +++ b/public/images/pokemon/variant/back/858-gigantamax.json @@ -1,7 +1,6 @@ { "1": { "948fc2": "1d6447", - "101010": "101010", "c15974": "043232", "c8e9ff": "5ec183", "e489a0": "125a51", @@ -15,7 +14,6 @@ }, "2": { "948fc2": "6d042b", - "101010": "101010", "c15974": "30163d", "c8e9ff": "cb304d", "e489a0": "3b2351", diff --git a/public/images/pokemon/variant/back/858.json b/public/images/pokemon/variant/back/858.json index 5d9ca997770..7efde3f313b 100644 --- a/public/images/pokemon/variant/back/858.json +++ b/public/images/pokemon/variant/back/858.json @@ -2,7 +2,6 @@ "1": { "727ab1": "1d4a3b", "acbfdf": "3b9665", - "101010": "101010", "948fc2": "287b59", "c8e9ff": "5ec183", "d9cedb": "dec1c2", @@ -16,7 +15,6 @@ "2": { "727ab1": "6b0124", "acbfdf": "a11437", - "101010": "101010", "948fc2": "8c0e32", "c8e9ff": "cb304d", "d9cedb": "e4bcde", diff --git a/public/images/pokemon/variant/back/859.json b/public/images/pokemon/variant/back/859.json index 16dcecb181e..a3d7e501811 100644 --- a/public/images/pokemon/variant/back/859.json +++ b/public/images/pokemon/variant/back/859.json @@ -4,7 +4,6 @@ "8d3856": "376b2d", "f589c2": "9aba6d", "ffbff5": "dbe797", - "101010": "101010", "45366d": "5b1d15", "735aac": "a4332d", "947cd8": "cc5836" @@ -14,7 +13,6 @@ "8d3856": "30082d", "f589c2": "6b2b3e", "ffbff5": "904f55", - "101010": "101010", "45366d": "794935", "735aac": "f0c475", "947cd8": "f9e9a4" diff --git a/public/images/pokemon/variant/back/86.json b/public/images/pokemon/variant/back/86.json index 75fd67c9b4d..5375b92e57e 100644 --- a/public/images/pokemon/variant/back/86.json +++ b/public/images/pokemon/variant/back/86.json @@ -4,8 +4,6 @@ "e6e6f7": "f3c7aa", "949cb5": "a86f5b", "d6ceef": "c78f72", - "101010": "101010", - "ffffff": "ffffff", "b59442": "a4622f", "f7e6bd": "f7e3bd", "6b5a10": "6b3410", @@ -16,8 +14,6 @@ "e6e6f7": "b2c3d1", "949cb5": "5e6d7c", "d6ceef": "91a0ac", - "101010": "101010", - "ffffff": "ffffff", "b59442": "b5ada5", "f7e6bd": "efefe6", "6b5a10": "847b73", @@ -28,8 +24,6 @@ "e6e6f7": "7ecdca", "949cb5": "325062", "d6ceef": "558a98", - "101010": "101010", - "ffffff": "ffffff", "b59442": "81604a", "f7e6bd": "d9caa5", "6b5a10": "5f3e2e", diff --git a/public/images/pokemon/variant/back/860.json b/public/images/pokemon/variant/back/860.json index f318490f04c..11974fd8618 100644 --- a/public/images/pokemon/variant/back/860.json +++ b/public/images/pokemon/variant/back/860.json @@ -4,7 +4,6 @@ "e93761": "638a48", "f75c90": "7daf56", "352954": "3b1528", - "101010": "101010", "5d4694": "8b332d", "8872b6": "c45949", "433568": "5a1d27", @@ -17,7 +16,6 @@ "e93761": "491337", "f75c90": "64233b", "352954": "a26458", - "101010": "101010", "5d4694": "dfc784", "8872b6": "f6e8b8", "433568": "c98e63", diff --git a/public/images/pokemon/variant/back/861-gigantamax.json b/public/images/pokemon/variant/back/861-gigantamax.json index e97032b5a26..29c6de702b9 100644 --- a/public/images/pokemon/variant/back/861-gigantamax.json +++ b/public/images/pokemon/variant/back/861-gigantamax.json @@ -1,14 +1,12 @@ { "1": { "2f184e": "290527", - "101010": "101010", "433568": "5a1d27", "5d4694": "8b332d", "352954": "3b1528" }, "2": { "2f184e": "6a2f3a", - "101010": "101010", "433568": "c98e63", "5d4694": "dfc784", "352954": "a26458" diff --git a/public/images/pokemon/variant/back/861.json b/public/images/pokemon/variant/back/861.json index acdc2e3c502..cec30107ea8 100644 --- a/public/images/pokemon/variant/back/861.json +++ b/public/images/pokemon/variant/back/861.json @@ -1,7 +1,6 @@ { "1": { "356a3c": "162a35", - "101010": "101010", "47be62": "366c59", "409555": "244849", "433568": "5a1d27", @@ -11,7 +10,6 @@ }, "2": { "356a3c": "090d50", - "101010": "101010", "47be62": "3f386f", "409555": "272664", "433568": "c98e63", diff --git a/public/images/pokemon/variant/back/862.json b/public/images/pokemon/variant/back/862.json index 8f323fb4822..8ca663c9103 100644 --- a/public/images/pokemon/variant/back/862.json +++ b/public/images/pokemon/variant/back/862.json @@ -1,7 +1,5 @@ { "1": { - "1b2627": "1b2627", - "010101": "010101", "474749": "156a66", "303034": "094448", "6f7071": "01473a", @@ -11,12 +9,10 @@ "f5f5f6": "f5ffea", "9b4f69": "d414dd", "df84ad": "ff69fa", - "2b2d2e": "052332", - "fcfcfc": "fcfcfc" + "2b2d2e": "052332" }, "2": { "1b2627": "180c46", - "010101": "010101", "474749": "8655e1", "303034": "5a3eb9", "6f7071": "2e1d7b", @@ -26,7 +22,6 @@ "f5f5f6": "342d4c", "9b4f69": "0099ce", "df84ad": "54f1ff", - "2b2d2e": "060429", - "fcfcfc": "fcfcfc" + "2b2d2e": "060429" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/863.json b/public/images/pokemon/variant/back/863.json index ddeaa711d6b..c100f2e1b4c 100644 --- a/public/images/pokemon/variant/back/863.json +++ b/public/images/pokemon/variant/back/863.json @@ -2,9 +2,7 @@ "1": { "66716c": "59879a", "bfc1bf": "b4e0d3", - "010101": "010101", "8f9c95": "85c1c0", - "181a1d": "181a1d", "272d2e": "342b49", "3d4547": "4e385a", "84726f": "9591a7", @@ -14,7 +12,6 @@ "2": { "66716c": "331a37", "bfc1bf": "92264b", - "010101": "010101", "8f9c95": "6d0b3c", "181a1d": "0f2127", "272d2e": "234a56", diff --git a/public/images/pokemon/variant/back/864.json b/public/images/pokemon/variant/back/864.json index a9d6199388e..eeefe5b0166 100644 --- a/public/images/pokemon/variant/back/864.json +++ b/public/images/pokemon/variant/back/864.json @@ -8,8 +8,7 @@ "cbc2d1": "d7d2f6", "7f806a": "4d8894", "fbf2ff": "d3ffff", - "c6bbcb": "a7e6e5", - "101010": "101010" + "c6bbcb": "a7e6e5" }, "2": { "bcb9be": "055946", @@ -20,7 +19,6 @@ "cbc2d1": "567f83", "7f806a": "4b1f28", "fbf2ff": "874059", - "c6bbcb": "773050", - "101010": "101010" + "c6bbcb": "773050" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/867.json b/public/images/pokemon/variant/back/867.json index 124ea0d4f66..edfad6a836d 100644 --- a/public/images/pokemon/variant/back/867.json +++ b/public/images/pokemon/variant/back/867.json @@ -1,7 +1,6 @@ { "1": { "393941": "69d9bf", - "101010": "101010", "927e8d": "a46361", "d9d0d1": "d6b8a0", "c5b9bb": "c69981", @@ -10,7 +9,6 @@ }, "2": { "393941": "a4222c", - "101010": "101010", "927e8d": "1f6455", "d9d0d1": "4fb66a", "c5b9bb": "298a61", diff --git a/public/images/pokemon/variant/back/87.json b/public/images/pokemon/variant/back/87.json index bc02e269dbe..a1deab7b93f 100644 --- a/public/images/pokemon/variant/back/87.json +++ b/public/images/pokemon/variant/back/87.json @@ -4,32 +4,20 @@ "e6e6f7": "f0b28a", "425263": "773630", "d6ceef": "bc7855", - "9ca5bd": "b76a43", - "101010": "101010", - "ffffff": "ffffff", - "847b7b": "847b7b", - "d6cece": "d6cece" + "9ca5bd": "b76a43" }, "1": { "6b7ba5": "465264", "e6e6f7": "96adbe", "425263": "2f3b50", "d6ceef": "5a7286", - "9ca5bd": "5e6d7c", - "101010": "101010", - "ffffff": "ffffff", - "847b7b": "847b7b", - "d6cece": "d6cece" + "9ca5bd": "5e6d7c" }, "2": { "6b7ba5": "20354a", "e6e6f7": "86dfe2", "425263": "171d3f", "d6ceef": "5493ac", - "9ca5bd": "305f7d", - "101010": "101010", - "ffffff": "ffffff", - "847b7b": "847b7b", - "d6cece": "d6cece" + "9ca5bd": "305f7d" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/872.json b/public/images/pokemon/variant/back/872.json index c7b73b39012..cac7ab2c540 100644 --- a/public/images/pokemon/variant/back/872.json +++ b/public/images/pokemon/variant/back/872.json @@ -2,9 +2,7 @@ "0": { "7b8b9b": "345f5c", "d8e9f0": "b7f1d6", - "f5fdff": "f5fdff", "acc3cc": "669a8c", - "101010": "101010", "695e77": "275e43", "edeae0": "a6d6a6", "b3a7c2": "73a878" @@ -12,9 +10,7 @@ "1": { "7b8b9b": "22504c", "d8e9f0": "b6e7df", - "f5fdff": "f5fdff", "acc3cc": "548e8f", - "101010": "101010", "695e77": "354b63", "edeae0": "c1ebf3", "b3a7c2": "89a9be" @@ -22,9 +18,7 @@ "2": { "7b8b9b": "5a3993", "d8e9f0": "d5c3ff", - "f5fdff": "f5fdff", "acc3cc": "a66ac2", - "101010": "101010", "695e77": "5f3465", "edeae0": "e5a2da", "b3a7c2": "a060a0" diff --git a/public/images/pokemon/variant/back/873.json b/public/images/pokemon/variant/back/873.json index dd3754e7fe9..e0977b608e7 100644 --- a/public/images/pokemon/variant/back/873.json +++ b/public/images/pokemon/variant/back/873.json @@ -4,23 +4,20 @@ "b3b4bd": "73a878", "e7e0e6": "a6d6a6", "8f8f9f": "27532f", - "fdfdfd": "b7f1d7", - "101010": "101010" + "fdfdfd": "b7f1d7" }, "1": { "747489": "556b7d", "b3b4bd": "92a9b8", "e7e0e6": "b6e7df", "8f8f9f": "415366", - "fdfdfd": "eefffb", - "101010": "101010" + "fdfdfd": "eefffb" }, "2": { "747489": "512d52", "b3b4bd": "864c86", "e7e0e6": "d78dcb", "8f8f9f": "5f3465", - "fdfdfd": "d5c3ff", - "101010": "101010" + "fdfdfd": "d5c3ff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/876-female.json b/public/images/pokemon/variant/back/876-female.json index 38892176d0d..9aa3f570830 100644 --- a/public/images/pokemon/variant/back/876-female.json +++ b/public/images/pokemon/variant/back/876-female.json @@ -4,7 +4,6 @@ "7d7493": "5a3736", "2f2642": "2c1419", "564c6c": "4a282a", - "101010": "101010", "6c64a6": "b72e3e", "4d447e": "8c1932", "3d3055": "64102c", @@ -17,7 +16,6 @@ "7d7493": "ecb2c5", "2f2642": "444a8e", "564c6c": "d58da4", - "101010": "101010", "6c64a6": "78aae5", "4d447e": "5c7bc5", "3d3055": "4c5db1", diff --git a/public/images/pokemon/variant/back/876.json b/public/images/pokemon/variant/back/876.json index af4f5492efe..024747b2e0b 100644 --- a/public/images/pokemon/variant/back/876.json +++ b/public/images/pokemon/variant/back/876.json @@ -3,7 +3,6 @@ "2e2641": "2c1419", "7d7493": "5a3736", "564c6c": "4a282a", - "101010": "101010", "2f2642": "2c1419", "6c64a6": "b72e3e", "4d447e": "8c1932", @@ -16,7 +15,6 @@ "2e2641": "314c7c", "7d7493": "a3c5e8", "564c6c": "78a5d4", - "101010": "101010", "2f2642": "7a316c", "6c64a6": "f589bb", "4d447e": "d268a7", diff --git a/public/images/pokemon/variant/back/877-hangry.json b/public/images/pokemon/variant/back/877-hangry.json index a4e19c34f67..4ecb7181777 100644 --- a/public/images/pokemon/variant/back/877-hangry.json +++ b/public/images/pokemon/variant/back/877-hangry.json @@ -1,7 +1,6 @@ { "0": { "383634": "3a1010", - "101010": "101010", "4f4b47": "952222", "6c6c6c": "540606", "6b3d96": "967f3d", @@ -9,8 +8,6 @@ "9958ce": "cebb58" }, "1": { - "383634": "383634", - "101010": "101010", "4f4b47": "3a3a3a", "6c6c6c": "212020", "6b3d96": "cb6333", @@ -18,10 +15,6 @@ "9958ce": "cb6333" }, "2": { - "383634": "383634", - "101010": "101010", - "4f4b47": "4f4b47", - "6c6c6c": "6c6c6c", "6b3d96": "568351", "493061": "306135", "9958ce": "7fba7f" diff --git a/public/images/pokemon/variant/back/877.json b/public/images/pokemon/variant/back/877.json index 846a3ecdaee..5e4e7501352 100644 --- a/public/images/pokemon/variant/back/877.json +++ b/public/images/pokemon/variant/back/877.json @@ -1,33 +1,21 @@ { "0": { "8a5e48": "383634", - "101010": "101010", - "383634": "383634", "af7044": "4f4b47", - "4f4b47": "4f4b47", - "6c6c6c": "6c6c6c", "cf9c66": "6c6c6c", "d3b351": "8851d3", "f4f489": "b689f4" }, "1": { "8a5e48": "2e57f6", - "101010": "101010", - "383634": "383634", "af7044": "86aaff", - "4f4b47": "4f4b47", - "6c6c6c": "6c6c6c", "cf9c66": "2c439d", "d3b351": "8b8853", "f4f489": "fff98f" }, "2": { "8a5e48": "4f8a48", - "101010": "101010", - "383634": "383634", "af7044": "71cf66", - "4f4b47": "4f4b47", - "6c6c6c": "6c6c6c", "cf9c66": "44af5b", "d3b351": "b6b6b6", "f4f489": "f8f8f8" diff --git a/public/images/pokemon/variant/back/880.json b/public/images/pokemon/variant/back/880.json index 1270725b8a2..7f2d67ad64f 100644 --- a/public/images/pokemon/variant/back/880.json +++ b/public/images/pokemon/variant/back/880.json @@ -1,7 +1,6 @@ { "1": { "8f261b": "1b1829", - "101010": "101010", "ff8d9f": "6a98c4", "ed4e76": "312f47", "975e17": "5b0610", @@ -16,8 +15,6 @@ "025f46": "26253e" }, "2": { - "8f261b": "8f261b", - "101010": "101010", "ff8d9f": "e28854", "ed4e76": "ca5939", "975e17": "211b3d", diff --git a/public/images/pokemon/variant/back/881.json b/public/images/pokemon/variant/back/881.json index 3efad4efe60..580250907bc 100644 --- a/public/images/pokemon/variant/back/881.json +++ b/public/images/pokemon/variant/back/881.json @@ -4,7 +4,6 @@ "975e17": "5b0610", "ffff84": "ee8563", "ead900": "c6362b", - "101010": "101010", "2abbfc": "ceb16f", "09354d": "271014", "9ab8ba": "cea5b9", @@ -24,9 +23,7 @@ "975e17": "211b3d", "ffff84": "dceeeb", "ead900": "636287", - "101010": "101010", "2abbfc": "26c248", - "09354d": "09354d", "9ab8ba": "a3c465", "edf3f2": "fcffe4", "5c7996": "50a751", diff --git a/public/images/pokemon/variant/back/882.json b/public/images/pokemon/variant/back/882.json index bfaf844e6ed..27028180ff4 100644 --- a/public/images/pokemon/variant/back/882.json +++ b/public/images/pokemon/variant/back/882.json @@ -3,7 +3,6 @@ "434c63": "771922", "83bbed": "eaa561", "777ebd": "cc6235", - "101010": "101010", "003319": "1a182b", "005e44": "564e6e", "8f261b": "1d2238", @@ -19,7 +18,6 @@ "434c63": "450940", "83bbed": "8c1f45", "777ebd": "6c1046", - "101010": "101010", "003319": "cc7d3b", "005e44": "f1b45f", "8f261b": "215b68", diff --git a/public/images/pokemon/variant/back/883.json b/public/images/pokemon/variant/back/883.json index 354ac125db9..c28f2eb7f2f 100644 --- a/public/images/pokemon/variant/back/883.json +++ b/public/images/pokemon/variant/back/883.json @@ -3,7 +3,6 @@ "434c63": "3a151c", "83bbed": "eaa561", "172459": "771922", - "101010": "101010", "777ebd": "cc6235", "5c7996": "8c6060", "9ab8ba": "cea5b9", @@ -17,7 +16,6 @@ "434c63": "450940", "83bbed": "8c1f45", "172459": "320432", - "101010": "101010", "777ebd": "6c1046", "5c7996": "50a751", "9ab8ba": "a3c465", diff --git a/public/images/pokemon/variant/back/884-gigantamax.json b/public/images/pokemon/variant/back/884-gigantamax.json index 52bc8a7cab3..a813ba8c860 100644 --- a/public/images/pokemon/variant/back/884-gigantamax.json +++ b/public/images/pokemon/variant/back/884-gigantamax.json @@ -1,7 +1,6 @@ { "1": { "837080": "5d392f", - "151515": "151515", "c4bac5": "c19b85", "a893a8": "9b715e", "e4e5f1": "f8e0cf", @@ -15,7 +14,6 @@ }, "2": { "837080": "1a0e34", - "151515": "151515", "c4bac5": "443a6e", "a893a8": "312857", "e4e5f1": "6e5ca6", diff --git a/public/images/pokemon/variant/back/884.json b/public/images/pokemon/variant/back/884.json index 4cb8efc516b..e71bc735fdf 100644 --- a/public/images/pokemon/variant/back/884.json +++ b/public/images/pokemon/variant/back/884.json @@ -2,7 +2,6 @@ "1": { "68353c": "871e14", "b96a6a": "cd452b", - "151515": "151515", "a893a8": "a77c69", "e4e5f1": "f8e0cf", "837080": "5d392f", @@ -16,7 +15,6 @@ "2": { "68353c": "062449", "b96a6a": "2077a6", - "151515": "151515", "a893a8": "32234e", "e4e5f1": "65549c", "837080": "1a0e34", diff --git a/public/images/pokemon/variant/back/885.json b/public/images/pokemon/variant/back/885.json index a03ef2a9a01..ba01496a553 100644 --- a/public/images/pokemon/variant/back/885.json +++ b/public/images/pokemon/variant/back/885.json @@ -2,7 +2,6 @@ "0": { "3a583c": "133056", "fa5494": "efa93f", - "101010": "101010", "cc4066": "ac7508", "5f875a": "2f6c89", "476b48": "20486e", @@ -15,7 +14,6 @@ "1": { "3a583c": "2f040d", "fa5494": "4590da", - "101010": "101010", "cc4066": "244f9f", "5f875a": "7d1f2c", "476b48": "2f040d", @@ -28,7 +26,6 @@ "2": { "3a583c": "1f0c2c", "fa5494": "68c7c4", - "101010": "101010", "cc4066": "2a8286", "5f875a": "3c2750", "476b48": "231234", diff --git a/public/images/pokemon/variant/back/886.json b/public/images/pokemon/variant/back/886.json index be5cad5860a..227276bd075 100644 --- a/public/images/pokemon/variant/back/886.json +++ b/public/images/pokemon/variant/back/886.json @@ -1,19 +1,16 @@ { "0": { "444e62": "2d365a", - "101010": "101010", "addcbc": "6accd6", "5f875a": "2f6c89", "2c323f": "192250", "566f89": "465272", "fa5494": "efa93f", "7fb3b1": "78c3cb", - "d5fffb": "d5fffb", "5b878c": "4c90a6" }, "1": { "444e62": "4a1621", - "101010": "101010", "addcbc": "da6151", "5f875a": "6b242e", "2c323f": "2e080d", @@ -25,7 +22,6 @@ }, "2": { "444e62": "231b45", - "101010": "101010", "addcbc": "927fa1", "5f875a": "3c2750", "2c323f": "251b31", diff --git a/public/images/pokemon/variant/back/887.json b/public/images/pokemon/variant/back/887.json index e49645f7228..c2d1732dd33 100644 --- a/public/images/pokemon/variant/back/887.json +++ b/public/images/pokemon/variant/back/887.json @@ -1,6 +1,5 @@ { "0": { - "101010": "101010", "2c323f": "192250", "566f89": "46557b", "444e62": "2c3867", @@ -15,7 +14,6 @@ "48a9b0": "479bb6" }, "1": { - "101010": "101010", "2c323f": "2e080d", "566f89": "6c273d", "444e62": "4a1621", @@ -30,9 +28,7 @@ "48a9b0": "8a212f" }, "2": { - "101010": "101010", "2c323f": "1b163f", - "566f89": "566f89", "444e62": "332a59", "fa5494": "68c7c4", "cc4066": "2a666b", diff --git a/public/images/pokemon/variant/back/888-crowned.json b/public/images/pokemon/variant/back/888-crowned.json index e0e62e49bd5..3ca6bf9673c 100644 --- a/public/images/pokemon/variant/back/888-crowned.json +++ b/public/images/pokemon/variant/back/888-crowned.json @@ -2,7 +2,6 @@ "1": { "8f4e2f": "2f4567", "f2db8a": "a1c9cd", - "080808": "080808", "d79a53": "5a829b", "3471b4": "b74323", "2d4377": "5c1a1d", @@ -18,7 +17,6 @@ "2": { "8f4e2f": "692e47", "f2db8a": "c4826b", - "080808": "080808", "d79a53": "964c5c", "3471b4": "9fa7d0", "2d4377": "615c7e", diff --git a/public/images/pokemon/variant/back/888.json b/public/images/pokemon/variant/back/888.json index 22953486afb..12040268121 100644 --- a/public/images/pokemon/variant/back/888.json +++ b/public/images/pokemon/variant/back/888.json @@ -3,7 +3,6 @@ "2d4377": "5c1a1d", "4999da": "ec813b", "3471b4": "b74323", - "080808": "080808", "93262f": "0d2729", "f45353": "448b48", "be3c45": "224d42", @@ -16,7 +15,6 @@ "2d4377": "615c7e", "4999da": "e6ecff", "3471b4": "9fa7d0", - "080808": "080808", "93262f": "431042", "f45353": "902d57", "be3c45": "6c1d59", diff --git a/public/images/pokemon/variant/back/889-crowned.json b/public/images/pokemon/variant/back/889-crowned.json index cd69c495fff..963684b7306 100644 --- a/public/images/pokemon/variant/back/889-crowned.json +++ b/public/images/pokemon/variant/back/889-crowned.json @@ -1,7 +1,6 @@ { "1": { "2d2f7b": "102c2c", - "080808": "080808", "396dce": "70a757", "2d48a8": "3c6959", "8f4e2f": "2f4567", @@ -17,7 +16,6 @@ }, "2": { "2d2f7b": "244e61", - "080808": "080808", "396dce": "6fc7c1", "2d48a8": "4797a4", "8f4e2f": "692e47", diff --git a/public/images/pokemon/variant/back/889.json b/public/images/pokemon/variant/back/889.json index 883802e962a..3c172653f72 100644 --- a/public/images/pokemon/variant/back/889.json +++ b/public/images/pokemon/variant/back/889.json @@ -4,7 +4,6 @@ "396dce": "70a757", "2d48a8": "3c6959", "f2db8a": "a1c9cd", - "080808": "080808", "731a27": "1c163d", "eb363a": "614378", "ae2836": "422b61", @@ -17,7 +16,6 @@ "396dce": "6fc7c1", "2d48a8": "4797a4", "f2db8a": "c4826b", - "080808": "080808", "731a27": "615c7e", "eb363a": "e6ecff", "ae2836": "9fa7d0", diff --git a/public/images/pokemon/variant/back/890-eternamax.json b/public/images/pokemon/variant/back/890-eternamax.json index 356e1209bac..37dcd76f832 100644 --- a/public/images/pokemon/variant/back/890-eternamax.json +++ b/public/images/pokemon/variant/back/890-eternamax.json @@ -5,7 +5,6 @@ "6461ba": "6393a9", "641e30": "0778a0", "31245f": "162a52", - "010101": "010101", "e23434": "119bc7", "ab2a4c": "2fbbdc", "ff8c8c": "68e8f7", @@ -19,7 +18,6 @@ "6461ba": "e0ecff", "641e30": "934516", "31245f": "87a3dd", - "010101": "010101", "e23434": "d98d16", "ab2a4c": "cb7210", "ff8c8c": "e2a234", diff --git a/public/images/pokemon/variant/back/890.json b/public/images/pokemon/variant/back/890.json index 0c4ddb2ee61..97bb904cc13 100644 --- a/public/images/pokemon/variant/back/890.json +++ b/public/images/pokemon/variant/back/890.json @@ -8,11 +8,8 @@ "3a15bc": "264864", "675cc5": "406d89", "b21833": "21779e", - "010101": "010101", "f46d70": "8ef2ff", "f18cd5": "ff7d54", - "fefefe": "fefefe", - "ffbcbc": "ffbcbc", "e22dbc": "ee535a" }, "2": { @@ -24,11 +21,8 @@ "3a15bc": "bfd1fa", "675cc5": "e0ecff", "b21833": "bd5f10", - "010101": "010101", "f46d70": "f1bd4b", "f18cd5": "73e5dc", - "fefefe": "fefefe", - "ffbcbc": "ffbcbc", "e22dbc": "298fb9" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/8901.json b/public/images/pokemon/variant/back/8901.json index 615b6219577..628da15b2de 100644 --- a/public/images/pokemon/variant/back/8901.json +++ b/public/images/pokemon/variant/back/8901.json @@ -2,24 +2,12 @@ "0": { "764e38": "823343", "b8805f": "b24c57", - "4b271b": "491b24", - "564d4e": "564d4e", - "847c7a": "847c7a", - "34302e": "34302e", - "bdb8b5": "bdb8b5", - "050505": "050505", - "efefef": "efefef" + "4b271b": "491b24" }, "1": { "764e38": "354d4f", "b8805f": "4d7269", - "4b271b": "2a2c33", - "564d4e": "564d4e", - "847c7a": "847c7a", - "34302e": "34302e", - "bdb8b5": "bdb8b5", - "050505": "050505", - "efefef": "efefef" + "4b271b": "2a2c33" }, "2": { "764e38": "423765", @@ -28,8 +16,6 @@ "564d4e": "5c486b", "847c7a": "c199ae", "34302e": "2a1a35", - "bdb8b5": "ede6eb", - "050505": "050505", - "efefef": "efefef" + "bdb8b5": "ede6eb" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/891.json b/public/images/pokemon/variant/back/891.json index 6a11dfad107..f20000f7a63 100644 --- a/public/images/pokemon/variant/back/891.json +++ b/public/images/pokemon/variant/back/891.json @@ -1,18 +1,13 @@ { "0": { "717674": "6d5755", - "101010": "101010", "d8d1cb": "d1c8ba", "b5ada6": "ad9a8a", - "9194a2": "9194a2", - "fbfbfb": "fbfbfb", - "c9cccd": "c9cccd", "393539": "34302f", "655e65": "5c5653" }, "1": { "717674": "263138", - "101010": "101010", "d8d1cb": "6e8b9b", "b5ada6": "475b68", "9194a2": "181b33", @@ -23,7 +18,6 @@ }, "2": { "717674": "56546b", - "101010": "101010", "d8d1cb": "e8e8ff", "b5ada6": "a4a4bc", "9194a2": "7f1c27", diff --git a/public/images/pokemon/variant/back/892-gigantamax-rapid.json b/public/images/pokemon/variant/back/892-gigantamax-rapid.json index 0c3cde948bb..66217fca718 100644 --- a/public/images/pokemon/variant/back/892-gigantamax-rapid.json +++ b/public/images/pokemon/variant/back/892-gigantamax-rapid.json @@ -1,18 +1,13 @@ { "0": { - "100d4f": "100d4f", "303ff1": "4550e6", "282d26": "25141f", - "2b337d": "2b337d", - "010101": "010101", "605f4d": "513b46", - "86a0fd": "86a0fd", "f5f5f5": "f4efe8", "9e6225": "8b222f", "fffa60": "ff9736", "d5a926": "b95826", "b5b5b5": "afa299", - "919191": "919191", "6b6574": "726259" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/892-gigantamax-single.json b/public/images/pokemon/variant/back/892-gigantamax-single.json index c2c5098b928..481912d7c11 100644 --- a/public/images/pokemon/variant/back/892-gigantamax-single.json +++ b/public/images/pokemon/variant/back/892-gigantamax-single.json @@ -2,15 +2,10 @@ "0": { "42473a": "382334", "282d26": "25141f", - "010101": "010101", "605f4d": "513b46", - "570f0f": "570f0f", "e7140a": "d03932", - "922718": "922718", - "fe7d70": "fe7d70", "f5f5f5": "f4efe8", "9e6225": "8b222f", - "919191": "919191", "fffa60": "ff9736", "d5a926": "b95826", "b5b5b5": "afa299", diff --git a/public/images/pokemon/variant/back/892-rapid-strike.json b/public/images/pokemon/variant/back/892-rapid-strike.json index cdccb62732d..9d1905b869b 100644 --- a/public/images/pokemon/variant/back/892-rapid-strike.json +++ b/public/images/pokemon/variant/back/892-rapid-strike.json @@ -2,12 +2,9 @@ "0": { "4f4b58": "4a2e27", "605f4d": "513b46", - "010101": "010101", "6b6574": "725444", "8d8c8e": "957961", "282d26": "25141f", - "fcfcfc": "fcfcfc", - "b9b9b9": "b9b9b9", "9e6225": "8b222f", "42473a": "382334", "fffa60": "ff9736", @@ -16,7 +13,6 @@ "1": { "4f4b58": "242a3f", "605f4d": "444f5b", - "010101": "010101", "6b6574": "4c6877", "8d8c8e": "809ba3", "282d26": "181b33", @@ -30,7 +26,6 @@ "2": { "4f4b58": "56546b", "605f4d": "213199", - "010101": "010101", "6b6574": "a4a4bc", "8d8c8e": "e8e8ff", "282d26": "07073f", diff --git a/public/images/pokemon/variant/back/892.json b/public/images/pokemon/variant/back/892.json index 5499ec660fe..7476bf85cfd 100644 --- a/public/images/pokemon/variant/back/892.json +++ b/public/images/pokemon/variant/back/892.json @@ -2,22 +2,18 @@ "0": { "282d26": "25141f", "605f4d": "513b46", - "b9b9b9": "b9b9b9", - "010101": "010101", "4f4b58": "4a2e27", "42473a": "382334", "6b6574": "725444", "8d8c8e": "957961", "9e6225": "8b222f", "fffa60": "ff9736", - "fcfcfc": "fcfcfc", "d5a926": "b95826" }, "1": { "282d26": "181b33", "605f4d": "444f5b", "b9b9b9": "768187", - "010101": "010101", "4f4b58": "263138", "42473a": "2e3549", "6b6574": "4c6877", @@ -31,7 +27,6 @@ "282d26": "3d0015", "605f4d": "870e2a", "b9b9b9": "a52139", - "010101": "010101", "4f4b58": "56546b", "42473a": "51081e", "6b6574": "a4a4bc", diff --git a/public/images/pokemon/variant/back/896.json b/public/images/pokemon/variant/back/896.json index f1c459febd1..a88dce32430 100644 --- a/public/images/pokemon/variant/back/896.json +++ b/public/images/pokemon/variant/back/896.json @@ -1,6 +1,5 @@ { "0": { - "000000": "000000", "8cacdd": "8f84c9", "bbd2ff": "b9abea", "4679b7": "5952a1", @@ -13,7 +12,6 @@ "6c6271": "68627a" }, "1": { - "000000": "000000", "8cacdd": "41d5b3", "bbd2ff": "9dffff", "4679b7": "00816c", @@ -26,7 +24,6 @@ "6c6271": "35486b" }, "2": { - "000000": "000000", "8cacdd": "bc393b", "bbd2ff": "f68c79", "4679b7": "780024", diff --git a/public/images/pokemon/variant/back/897.json b/public/images/pokemon/variant/back/897.json index 2d14655e39b..0217835accd 100644 --- a/public/images/pokemon/variant/back/897.json +++ b/public/images/pokemon/variant/back/897.json @@ -1,19 +1,13 @@ { "0": { - "101010": "101010", - "3c3c3c": "3c3c3c", "525852": "5d5458", "49478f": "894061", "7c5bcf": "d05a82", "00285c": "632741", - "d9a4e3": "d9a4e3", - "fcfcfc": "fcfcfc", - "755179": "755179", "504e8e": "80447d", "8776e4": "b862b3" }, "1": { - "101010": "101010", "3c3c3c": "622d51", "525852": "904c75", "49478f": "932f27", @@ -26,7 +20,6 @@ "8776e4": "ef8956" }, "2": { - "101010": "101010", "3c3c3c": "3a6965", "525852": "5c8a7b", "49478f": "13312b", diff --git a/public/images/pokemon/variant/back/898-ice.json b/public/images/pokemon/variant/back/898-ice.json index ec65a41c97a..c4ce4d27186 100644 --- a/public/images/pokemon/variant/back/898-ice.json +++ b/public/images/pokemon/variant/back/898-ice.json @@ -1,6 +1,5 @@ { "0": { - "101010": "101010", "8cacdd": "8f84c9", "004037": "00403c", "bbd2ff": "b9abea", @@ -8,8 +7,6 @@ "00584b": "005852", "4679b7": "5952a1", "525752": "6a5837", - "fbfbfb": "fbfbfb", - "c6c7cc": "c6c7cc", "9e8f87": "ae8b50", "d1c8be": "d7c881", "003071": "2f104f", @@ -19,11 +16,9 @@ "00285b": "3b2948", "cac0cb": "c9c0d4", "83818f": "6f6982", - "6c6271": "68627a", - "3c3c3c": "3c3c3c" + "6c6271": "68627a" }, "1": { - "101010": "101010", "8cacdd": "41d5b3", "004037": "00124d", "bbd2ff": "9dffff", @@ -31,8 +26,6 @@ "00584b": "183986", "4679b7": "00816c", "525752": "38255f", - "fbfbfb": "fbfbfb", - "c6c7cc": "c6c7cc", "9e8f87": "927ec4", "d1c8be": "ba9ded", "003071": "014837", @@ -42,11 +35,9 @@ "00285b": "8d075a", "cac0cb": "6f8ec1", "83818f": "506698", - "6c6271": "35486b", - "3c3c3c": "3c3c3c" + "6c6271": "35486b" }, "2": { - "101010": "101010", "8cacdd": "bc393b", "004037": "3c1522", "bbd2ff": "f68c79", diff --git a/public/images/pokemon/variant/back/898-shadow.json b/public/images/pokemon/variant/back/898-shadow.json index 336ba31bc8d..a15e24df045 100644 --- a/public/images/pokemon/variant/back/898-shadow.json +++ b/public/images/pokemon/variant/back/898-shadow.json @@ -4,21 +4,14 @@ "007766": "00776f", "00584b": "005852", "525752": "6a5837", - "101010": "101010", - "fbfbfb": "fbfbfb", - "3c3c3c": "3c3c3c", - "c7c8cd": "c7c8cd", "525852": "5d5458", "9e8f87": "ae8b50", "d1c8be": "d7c881", "49478f": "894061", "7c5bcf": "d05a82", "00285c": "632741", - "d9a4e3": "d9a4e3", "3b3b3b": "6a5837", - "fcfcfc": "fcfcfc", "00285b": "3b2948", - "755179": "755179", "504e8e": "80447d", "8776e4": "b862b3" }, @@ -27,10 +20,7 @@ "007766": "345ab5", "00584b": "183986", "525752": "38255f", - "101010": "101010", - "fbfbfb": "fbfbfb", "3c3c3c": "622d51", - "c7c8cd": "c7c8cd", "525852": "904c75", "9e8f87": "927ec4", "d1c8be": "ba9ded", @@ -50,7 +40,6 @@ "007766": "88253e", "00584b": "601b35", "525752": "181935", - "101010": "101010", "fbfbfb": "fefdeb", "3c3c3c": "3a6965", "c7c8cd": "ccc5bb", diff --git a/public/images/pokemon/variant/back/898.json b/public/images/pokemon/variant/back/898.json index b05b80efd5e..174c25d9379 100644 --- a/public/images/pokemon/variant/back/898.json +++ b/public/images/pokemon/variant/back/898.json @@ -7,8 +7,6 @@ "504e8e": "71517a", "007766": "00776f", "525852": "6a5837", - "101010": "101010", - "fcfcfc": "fcfcfc", "c7c8cd": "ccc6d1", "9e8f87": "ae8b50", "797b8f": "8e778d", @@ -23,8 +21,6 @@ "504e8e": "f55a95", "007766": "345ab5", "525852": "38255f", - "101010": "101010", - "fcfcfc": "fcfcfc", "c7c8cd": "ccc6d1", "9e8f87": "927ec4", "797b8f": "c64883", @@ -39,7 +35,6 @@ "504e8e": "cc8c49", "007766": "88253e", "525852": "181935", - "101010": "101010", "fcfcfc": "fefdeb", "c7c8cd": "c4bdb3", "9e8f87": "354d8a", diff --git a/public/images/pokemon/variant/back/9-gigantamax.json b/public/images/pokemon/variant/back/9-gigantamax.json index 689aac11b75..8ab2115c5a8 100644 --- a/public/images/pokemon/variant/back/9-gigantamax.json +++ b/public/images/pokemon/variant/back/9-gigantamax.json @@ -1,17 +1,12 @@ { "1": { "352e27": "2c2525", - "fdfdfd": "fdfdfd", "494136": "3e322f", "5f5647": "504945", - "949494": "949494", - "cdcdd5": "cdcdd5", "083962": "204c6d", - "101010": "101010", "2062ac": "33808c", "94ace6": "50b176", "5a8bcd": "5fc7a3", - "4a4a4a": "4a4a4a", "6ce8d6": "9bffa4", "c75435": "b44839", "ea7957": "e06a71" diff --git a/public/images/pokemon/variant/back/900.json b/public/images/pokemon/variant/back/900.json index 68558c7931b..835b578b32a 100644 --- a/public/images/pokemon/variant/back/900.json +++ b/public/images/pokemon/variant/back/900.json @@ -1,30 +1,14 @@ { "1": { - "080808": "080808", - "3a2e2f": "3a2e2f", - "6a5856": "6a5856", - "4d3d3e": "4d3d3e", - "96856d": "96856d", - "fcfcfc": "fcfcfc", - "2b1f22": "2b1f22", - "c8bdb7": "c8bdb7", "6b563a": "221a69", "af7845": "354da7", - "e2b561": "4b84d2", - "e3d1ae": "e3d1ae" + "e2b561": "4b84d2" }, "2": { - "080808": "080808", - "3a2e2f": "3a2e2f", "6a5856": "424242", "4d3d3e": "808080", - "96856d": "96856d", - "fcfcfc": "fcfcfc", - "2b1f22": "2b1f22", - "c8bdb7": "c8bdb7", "6b563a": "a54200", "af7845": "e68400", - "e2b561": "ffde00", - "e3d1ae": "e3d1ae" + "e2b561": "ffde00" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/901.json b/public/images/pokemon/variant/back/901.json index da538225735..c3fc4fb00ed 100644 --- a/public/images/pokemon/variant/back/901.json +++ b/public/images/pokemon/variant/back/901.json @@ -1,24 +1,16 @@ { "1": { "382423": "1c2825", - "0f0f0f": "0f0f0f", "502f29": "273b32", "231a18": "0c1515", - "77655b": "77655b", - "9c8d86": "9c8d86", - "4b4236": "4b4236", "63443d": "31563f", "ca8b35": "c48e81", "fec643": "f7eee1", - "fcfcfc": "fcfcfc", "25521f": "557f24", - "fec672": "f2cab8", - "95908a": "95908a", - "b4b4b1": "b4b4b1" + "fec672": "f2cab8" }, "2": { "382423": "1e2249", - "0f0f0f": "0f0f0f", "502f29": "323760", "231a18": "111433", "77655b": "c199ae", @@ -27,10 +19,7 @@ "63443d": "46527a", "ca8b35": "437aff", "fec643": "bfeeff", - "fcfcfc": "fcfcfc", "25521f": "f83259", - "fec672": "96b7ff", - "95908a": "95908a", - "b4b4b1": "b4b4b1" + "fec672": "96b7ff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/903.json b/public/images/pokemon/variant/back/903.json index 4cfc1cf557a..1f689b19af0 100644 --- a/public/images/pokemon/variant/back/903.json +++ b/public/images/pokemon/variant/back/903.json @@ -4,13 +4,10 @@ "415b81": "3a0f0e", "533662": "136e81", "9ebade": "bd795f", - "0f110d": "0f110d", "718fbe": "9f4c3d", "8e2458": "12968b", "6a56b3": "722738", "36326d": "210609", - "f8feff": "f8feff", - "9b98a9": "9b98a9", "de2f41": "31dabb", "eb357c": "31dabb" }, @@ -19,7 +16,6 @@ "415b81": "0e2125", "533662": "982e33", "9ebade": "256258", - "0f110d": "0f110d", "718fbe": "194648", "8e2458": "cc5427", "6a56b3": "65b571", diff --git a/public/images/pokemon/variant/back/909.json b/public/images/pokemon/variant/back/909.json index 37ffae8ca39..afcdebd5e28 100644 --- a/public/images/pokemon/variant/back/909.json +++ b/public/images/pokemon/variant/back/909.json @@ -8,9 +8,7 @@ "745e45": "76976a", "aaa493": "a4ba9e", "dfa22f": "8cd9d9", - "0f0f0f": "152828", - "525867": "525867", - "373c46": "373c46" + "0f0f0f": "152828" }, "2": { "fe5c2e": "2ce455", @@ -21,8 +19,6 @@ "745e45": "55754a", "aaa493": "82977c", "dfa22f": "2ce455", - "0f0f0f": "162319", - "525867": "525867", - "373c46": "373c46" + "0f0f0f": "162319" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/911.json b/public/images/pokemon/variant/back/911.json index c46e1bdbb5d..07b60682d4c 100644 --- a/public/images/pokemon/variant/back/911.json +++ b/public/images/pokemon/variant/back/911.json @@ -7,24 +7,19 @@ "5b5c5e": "4f5052", "fcfcfc": "cccccc", "9fa0a2": "758a70", - "333c36": "333c36", "ba3227": "234141", "741010": "152828", - "ff4a3c": "366565", - "0f0f0f": "0f0f0f" + "ff4a3c": "366565" }, "2": { "d20000": "0ea631", "f45511": "2fe757", "ee8b08": "08e739", "ffd017": "4ffc75", - "5b5c5e": "5b5c5e", "fcfcfc": "e5ffec", "9fa0a2": "82977c", - "333c36": "333c36", "ba3227": "243929", "741010": "162319", - "ff4a3c": "38583f", - "0f0f0f": "0f0f0f" + "ff4a3c": "38583f" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/912.json b/public/images/pokemon/variant/back/912.json index bbbe5288893..fce8f37518a 100644 --- a/public/images/pokemon/variant/back/912.json +++ b/public/images/pokemon/variant/back/912.json @@ -2,7 +2,6 @@ "1": { "1f5978": "8c3b14", "2fbee8": "e69c51", - "0f0f0f": "0f0f0f", "3686b1": "d96536", "becde4": "d79f63", "4d6373": "975432", @@ -11,7 +10,6 @@ "2": { "1f5978": "0a3025", "2fbee8": "33b37e", - "0f0f0f": "0f0f0f", "3686b1": "1c7962", "becde4": "5137a0", "4d6373": "2d185d", diff --git a/public/images/pokemon/variant/back/913.json b/public/images/pokemon/variant/back/913.json index e9d85674c0e..fbe1defcb77 100644 --- a/public/images/pokemon/variant/back/913.json +++ b/public/images/pokemon/variant/back/913.json @@ -6,7 +6,6 @@ "13325e": "3f050e", "174b6a": "862311", "30b0ba": "f77122", - "0f0f0f": "0f0f0f", "916a44": "3b2e28", "ddc271": "5b5450", "d0c4d3": "d79f63", @@ -23,7 +22,6 @@ "13325e": "072a2b", "174b6a": "541222", "30b0ba": "a22f49", - "0f0f0f": "0f0f0f", "916a44": "4b251b", "ddc271": "c76740", "d0c4d3": "3b188e", diff --git a/public/images/pokemon/variant/back/914.json b/public/images/pokemon/variant/back/914.json index 2179ed6d464..a10fad30d99 100644 --- a/public/images/pokemon/variant/back/914.json +++ b/public/images/pokemon/variant/back/914.json @@ -7,7 +7,6 @@ "333f93": "821e24", "752911": "302822", "e3460f": "f8edb9", - "0f0f0f": "0f0f0f", "a24720": "dac194", "8ea6a8": "d79f63", "62747b": "975432", @@ -26,7 +25,6 @@ "333f93": "0f4537", "752911": "664747", "e3460f": "fff2e5", - "0f0f0f": "0f0f0f", "a24720": "eac7b4", "8ea6a8": "3b188e", "62747b": "120e4a", diff --git a/public/images/pokemon/variant/back/919.json b/public/images/pokemon/variant/back/919.json index 0f7ecc24eab..581aaf57432 100644 --- a/public/images/pokemon/variant/back/919.json +++ b/public/images/pokemon/variant/back/919.json @@ -4,7 +4,6 @@ "63738c": "4b453d", "798aa2": "6c655c", "4b5870": "302d27", - "121212": "121212", "41485b": "23211d", "dde1e4": "cec890", "c0bdc0": "a29d62", @@ -12,7 +11,6 @@ "7b8ca3": "6c655c", "b0acb0": "a29d62", "ffc608": "d02c35", - "0f0f0f": "0f0f0f", "a38215": "b52736", "a49dac": "62654e" }, @@ -21,24 +19,16 @@ "63738c": "498f57", "798aa2": "70ba74", "4b5870": "295449", - "121212": "121212", "41485b": "1c3835", - "dde1e4": "dde1e4", - "c0bdc0": "c0bdc0", - "636164": "636164", "7b8ca3": "70ba74", - "b0acb0": "b0acb0", "ffc608": "c54d2d", - "0f0f0f": "0f0f0f", - "a38215": "7f223a", - "a49dac": "a49dac" + "a38215": "7f223a" }, "2": { "2f323c": "340f21", "63738c": "983444", "798aa2": "c74d51", "4b5870": "601c3a", - "121212": "121212", "41485b": "4b132c", "dde1e4": "444444", "c0bdc0": "444444", @@ -46,7 +36,6 @@ "7b8ca3": "c74d51", "b0acb0": "333333", "ffc608": "2977b6", - "0f0f0f": "0f0f0f", "a38215": "293c7d", "a49dac": "222222" } diff --git a/public/images/pokemon/variant/back/920.json b/public/images/pokemon/variant/back/920.json index 79b215090f3..2b41be162fe 100644 --- a/public/images/pokemon/variant/back/920.json +++ b/public/images/pokemon/variant/back/920.json @@ -1,12 +1,8 @@ { "0": { "292829": "475316", - "0f0f0f": "0f0f0f", "505050": "dbcf15", "3c393c": "8e931a", - "e6ebef": "e6ebef", - "a59aa5": "a59aa5", - "ffffff": "ffffff", "6b6d6b": "f6ea5f", "607381": "444444", "8e4815": "4d0517", @@ -17,12 +13,8 @@ }, "1": { "292829": "1e391b", - "0f0f0f": "0f0f0f", "505050": "529042", "3c393c": "34642c", - "e6ebef": "e6ebef", - "a59aa5": "a59aa5", - "ffffff": "ffffff", "6b6d6b": "6ea25e", "607381": "919191", "8e4815": "550927", @@ -33,12 +25,8 @@ }, "2": { "292829": "47132c", - "0f0f0f": "0f0f0f", "505050": "b52828", "3c393c": "791b2d", - "e6ebef": "e6ebef", - "a59aa5": "a59aa5", - "ffffff": "ffffff", "6b6d6b": "df4747", "607381": "858585", "8e4815": "1c1936", diff --git a/public/images/pokemon/variant/back/924.json b/public/images/pokemon/variant/back/924.json index 9b2e1c7db20..af06a7001ea 100644 --- a/public/images/pokemon/variant/back/924.json +++ b/public/images/pokemon/variant/back/924.json @@ -3,7 +3,6 @@ "393a44": "344854", "f9f9f9": "cddef1", "b8b9c0": "9c89d2", - "0f0f0f": "0f0f0f", "888b97": "5a6e8f", "565765": "444561", "567d9a": "755382", @@ -14,7 +13,6 @@ "393a44": "3f0f0f", "f9f9f9": "b39090", "b8b9c0": "785e5e", - "0f0f0f": "0f0f0f", "888b97": "6e4343", "565765": "543131", "567d9a": "a15d55", @@ -25,7 +23,6 @@ "393a44": "27272e", "f9f9f9": "757373", "b8b9c0": "4b4b4d", - "0f0f0f": "0f0f0f", "888b97": "3c3c3d", "565765": "252526", "567d9a": "471910", diff --git a/public/images/pokemon/variant/back/925-four.json b/public/images/pokemon/variant/back/925-four.json index 9b2e1c7db20..af06a7001ea 100644 --- a/public/images/pokemon/variant/back/925-four.json +++ b/public/images/pokemon/variant/back/925-four.json @@ -3,7 +3,6 @@ "393a44": "344854", "f9f9f9": "cddef1", "b8b9c0": "9c89d2", - "0f0f0f": "0f0f0f", "888b97": "5a6e8f", "565765": "444561", "567d9a": "755382", @@ -14,7 +13,6 @@ "393a44": "3f0f0f", "f9f9f9": "b39090", "b8b9c0": "785e5e", - "0f0f0f": "0f0f0f", "888b97": "6e4343", "565765": "543131", "567d9a": "a15d55", @@ -25,7 +23,6 @@ "393a44": "27272e", "f9f9f9": "757373", "b8b9c0": "4b4b4d", - "0f0f0f": "0f0f0f", "888b97": "3c3c3d", "565765": "252526", "567d9a": "471910", diff --git a/public/images/pokemon/variant/back/925-three.json b/public/images/pokemon/variant/back/925-three.json index 9b2e1c7db20..af06a7001ea 100644 --- a/public/images/pokemon/variant/back/925-three.json +++ b/public/images/pokemon/variant/back/925-three.json @@ -3,7 +3,6 @@ "393a44": "344854", "f9f9f9": "cddef1", "b8b9c0": "9c89d2", - "0f0f0f": "0f0f0f", "888b97": "5a6e8f", "565765": "444561", "567d9a": "755382", @@ -14,7 +13,6 @@ "393a44": "3f0f0f", "f9f9f9": "b39090", "b8b9c0": "785e5e", - "0f0f0f": "0f0f0f", "888b97": "6e4343", "565765": "543131", "567d9a": "a15d55", @@ -25,7 +23,6 @@ "393a44": "27272e", "f9f9f9": "757373", "b8b9c0": "4b4b4d", - "0f0f0f": "0f0f0f", "888b97": "3c3c3d", "565765": "252526", "567d9a": "471910", diff --git a/public/images/pokemon/variant/back/93.json b/public/images/pokemon/variant/back/93.json index d25c8085a4c..1b0b795524d 100644 --- a/public/images/pokemon/variant/back/93.json +++ b/public/images/pokemon/variant/back/93.json @@ -5,10 +5,7 @@ "524263": "52426b", "c58cce": "dfcaee", "ad6bce": "caaddf", - "b51919": "2963d6", - "101010": "101010", - "ffffff": "ffffff", - "d6d6d6": "d6d6d6" + "b51919": "2963d6" }, "1": { "de4a31": "7ee75c", @@ -16,10 +13,7 @@ "524263": "380508", "c58cce": "c06380", "ad6bce": "8e395f", - "b51919": "2eb063", - "101010": "101010", - "ffffff": "ffffff", - "d6d6d6": "d6d6d6" + "b51919": "2eb063" }, "2": { "de4a31": "e47750", @@ -27,9 +21,6 @@ "524263": "1a1320", "c58cce": "897e91", "ad6bce": "544e59", - "b51919": "b72b47", - "101010": "101010", - "ffffff": "ffffff", - "d6d6d6": "d6d6d6" + "b51919": "b72b47" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/932.json b/public/images/pokemon/variant/back/932.json index 307d0fbe1bb..4a7b43945b8 100644 --- a/public/images/pokemon/variant/back/932.json +++ b/public/images/pokemon/variant/back/932.json @@ -2,7 +2,6 @@ "1": { "717171": "82556e", "ffffff": "f9c2cd", - "121212": "121212", "b4b4b4": "bc8296", "c6876e": "deeaf3", "875651": "9ba7b0", @@ -13,7 +12,6 @@ "2": { "717171": "383744", "ffffff": "9ba0a0", - "121212": "121212", "b4b4b4": "63636d", "c6876e": "7cbf7f", "875651": "618c56", diff --git a/public/images/pokemon/variant/back/933.json b/public/images/pokemon/variant/back/933.json index d2aed23d065..22bdad71eaa 100644 --- a/public/images/pokemon/variant/back/933.json +++ b/public/images/pokemon/variant/back/933.json @@ -1,7 +1,6 @@ { "1": { "636363": "90a4b5", - "121212": "121212", "c6876e": "bc8296", "8c6464": "d8e9f5", "b4b4b4": "adbac3", @@ -15,7 +14,6 @@ }, "2": { "636363": "444251", - "121212": "121212", "c6876e": "5d9157", "8c6464": "3d5e47", "b4b4b4": "63636d", diff --git a/public/images/pokemon/variant/back/934.json b/public/images/pokemon/variant/back/934.json index 84d33b5f448..2aec5e8fe82 100644 --- a/public/images/pokemon/variant/back/934.json +++ b/public/images/pokemon/variant/back/934.json @@ -6,7 +6,6 @@ "c1b5bd": "bc808c", "64514d": "6d7982", "96675a": "adbac3", - "0f0f0f": "0f0f0f", "44332e": "3a464f", "58493e": "563d41", "c3927b": "d8e9f5", @@ -20,7 +19,6 @@ "c1b5bd": "6a6a72", "64514d": "3d5e47", "96675a": "5d9157", - "0f0f0f": "0f0f0f", "44332e": "2b3f3f", "58493e": "444f47", "c3927b": "7fc17c", diff --git a/public/images/pokemon/variant/back/936.json b/public/images/pokemon/variant/back/936.json index 98c7398e1a0..e2131c8988e 100644 --- a/public/images/pokemon/variant/back/936.json +++ b/public/images/pokemon/variant/back/936.json @@ -3,15 +3,11 @@ "e42212": "93d6b7", "fdcd0d": "b885d6", "e589b5": "a59fdf", - "1b2123": "1b2123", "8a2f2f": "5ba0cc", - "4a4848": "4a4848", "5b3e1c": "1d1d36", - "383636": "383636", "a27715": "343467", "cfac07": "645aa3", "f0e631": "6d74b8", - "0f0f0f": "0f0f0f", "542829": "465da8", "fffba6": "aab1ef" }, @@ -21,13 +17,10 @@ "e589b5": "a3bfcc", "1b2123": "342351", "8a2f2f": "418dcc", - "4a4848": "4a4848", "5b3e1c": "193939", - "383636": "383636", "a27715": "2e5f55", "cfac07": "4c8954", "f0e631": "78b770", - "0f0f0f": "0f0f0f", "542829": "1f4a7f", "fffba6": "8be68b" }, @@ -35,15 +28,11 @@ "e42212": "e72ecb", "fdcd0d": "fd890d", "e589b5": "ff5668", - "1b2123": "1b2123", "8a2f2f": "9d4193", - "4a4848": "4a4848", "5b3e1c": "515b7f", - "383636": "383636", "a27715": "7a7fa8", "cfac07": "91a1c1", "f0e631": "cbd4f4", - "0f0f0f": "0f0f0f", "542829": "5e385a", "fffba6": "ffffff" } diff --git a/public/images/pokemon/variant/back/937.json b/public/images/pokemon/variant/back/937.json index d2b407afb4a..46b00ac4a90 100644 --- a/public/images/pokemon/variant/back/937.json +++ b/public/images/pokemon/variant/back/937.json @@ -6,7 +6,6 @@ "97c7dd": "ff8cc7", "343467": "ad5e15", "645aa3": "efcc32", - "0f0f0f": "0f0f0f", "292528": "ad5e15", "2541ad": "c44648", "1d1d36": "5b3e1c", @@ -20,7 +19,6 @@ "97c7dd": "f4b766", "343467": "b52d6c", "645aa3": "e57bc4", - "0f0f0f": "0f0f0f", "292528": "b52d6c", "2541ad": "992923", "1d1d36": "7a1e47", @@ -34,10 +32,8 @@ "97c7dd": "9668e3", "343467": "515b7f", "645aa3": "cbd4f4", - "0f0f0f": "0f0f0f", "292528": "515b7f", "2541ad": "4615bd", - "1d1d36": "1d1d36", "454589": "91a1c1", "453d43": "8897aa" } diff --git a/public/images/pokemon/variant/back/94-gigantamax.json b/public/images/pokemon/variant/back/94-gigantamax.json index 550f763a83f..348c78479ab 100644 --- a/public/images/pokemon/variant/back/94-gigantamax.json +++ b/public/images/pokemon/variant/back/94-gigantamax.json @@ -1,7 +1,6 @@ { "0": { "5a4a9c": "a89dc4", - "101010": "101010", "b48bbd": "fefefe", "9473b4": "fcf4fc", "4a294a": "634b63", @@ -10,7 +9,6 @@ }, "1": { "5a4a9c": "4a1f36", - "101010": "101010", "b48bbd": "c56f8a", "9473b4": "8d3e61", "4a294a": "201323", @@ -19,7 +17,6 @@ }, "2": { "5a4a9c": "302433", - "101010": "101010", "b48bbd": "7b6888", "9473b4": "3f324a", "4a294a": "201323", diff --git a/public/images/pokemon/variant/back/94-mega.json b/public/images/pokemon/variant/back/94-mega.json index a903b3aefb0..ee1076223f4 100644 --- a/public/images/pokemon/variant/back/94-mega.json +++ b/public/images/pokemon/variant/back/94-mega.json @@ -1,6 +1,5 @@ { "0": { - "101010": "101010", "4d2a4d": "634b63", "503f73": "d1bcd6", "775499": "fcf4fc", @@ -11,7 +10,6 @@ "ff5991": "72e9f2" }, "1": { - "101010": "101010", "4d2a4d": "1a1320", "503f73": "511e3b", "775499": "a44c73", @@ -22,7 +20,6 @@ "ff5991": "c1ea61" }, "2": { - "101010": "101010", "4d2a4d": "1a1320", "503f73": "302433", "775499": "3f324a", diff --git a/public/images/pokemon/variant/back/94.json b/public/images/pokemon/variant/back/94.json index 23175bfe203..028450f1498 100644 --- a/public/images/pokemon/variant/back/94.json +++ b/public/images/pokemon/variant/back/94.json @@ -2,7 +2,6 @@ "0": { "5a4a9c": "9e85a6", "b58cbd": "ebdbf7", - "101010": "101010", "9473b5": "cbb7da", "4a294a": "634b63", "7b63a5": "b8a2c3" @@ -10,7 +9,6 @@ "1": { "5a4a9c": "4a1f36", "b58cbd": "c56f8a", - "101010": "101010", "9473b5": "8d3e61", "4a294a": "1b0917", "7b63a5": "6f284a" @@ -18,7 +16,6 @@ "2": { "5a4a9c": "302433", "b58cbd": "7b6888", - "101010": "101010", "9473b5": "3f324a", "4a294a": "201323", "7b63a5": "3f324a" diff --git a/public/images/pokemon/variant/back/940.json b/public/images/pokemon/variant/back/940.json index 313dbd273ec..c68f4dc3c10 100644 --- a/public/images/pokemon/variant/back/940.json +++ b/public/images/pokemon/variant/back/940.json @@ -2,11 +2,9 @@ "1": { "2f3135": "372b61", "3f424d": "4c4982", - "181a1b": "181a1b", "ffcd37": "7dffc0", "be8f29": "5dd9c8", "91a5c3": "e39fc5", - "f9f9f9": "f9f9f9", "73bbbf": "f7859b", "643c28": "433382", "c27741": "9a5fd9", @@ -17,11 +15,9 @@ "2": { "2f3135": "e099a5", "3f424d": "edc5c8", - "181a1b": "181a1b", "ffcd37": "d9647b", "be8f29": "b3466a", "91a5c3": "ba73b2", - "f9f9f9": "f9f9f9", "73bbbf": "ffcf4a", "643c28": "2b2745", "c27741": "57436e", diff --git a/public/images/pokemon/variant/back/941.json b/public/images/pokemon/variant/back/941.json index 8ac4f1c0d7f..9bbee8a2e92 100644 --- a/public/images/pokemon/variant/back/941.json +++ b/public/images/pokemon/variant/back/941.json @@ -1,12 +1,9 @@ { "1": { - "15161e": "15161e", "34393f": "2b3863", "26282c": "1f1d54", "aa7e24": "3dd1cc", "ffcd37": "6ef5c8", - "fdfdfd": "fdfdfd", - "0f0f0f": "0f0f0f", "73bbbf": "de82ff", "2b1717": "773185", "692a2f": "ff9ec6", @@ -15,13 +12,10 @@ "37415a": "55348a" }, "2": { - "15161e": "15161e", "34393f": "f7bebe", "26282c": "e394a7", "aa7e24": "c44f6c", "ffcd37": "e3667d", - "fdfdfd": "fdfdfd", - "0f0f0f": "0f0f0f", "73bbbf": "ffcf4a", "2b1717": "3a3466", "692a2f": "776294", diff --git a/public/images/pokemon/variant/back/948.json b/public/images/pokemon/variant/back/948.json index 35aff4a6038..d567f9de04a 100644 --- a/public/images/pokemon/variant/back/948.json +++ b/public/images/pokemon/variant/back/948.json @@ -6,7 +6,6 @@ "f8d3c2": "8b91c8", "ffec37": "ff6237", "976924": "a50927", - "000000": "000000", "eaba2b": "ce271a", "d2bbac": "e2bea6", "fef8f5": "fff4f1", @@ -19,7 +18,6 @@ "f8d3c2": "eb9a93", "ffec37": "4b86bd", "976924": "254087", - "000000": "000000", "eaba2b": "2e609b", "d2bbac": "d8bdab", "fef8f5": "ffede5", diff --git a/public/images/pokemon/variant/back/949.json b/public/images/pokemon/variant/back/949.json index 1773e282574..2684d9055cc 100644 --- a/public/images/pokemon/variant/back/949.json +++ b/public/images/pokemon/variant/back/949.json @@ -3,15 +3,12 @@ "404040": "4b3073", "282828": "33134d", "5f5f5f": "7462ad", - "000000": "000000", "86433c": "a50927", "ca7268": "d41929", "ede652": "1672a1", - "ffffff": "ffffff", "d6938b": "ff4737", "e7bcb8": "ff9d6d", "cdae52": "0c4a83", - "101010": "101010", "c2ae83": "b29785", "94724b": "60473c", "936839": "042259" @@ -20,15 +17,12 @@ "404040": "70150e", "282828": "460001", "5f5f5f": "c64d30", - "000000": "000000", "86433c": "401e54", "ca7268": "613a8a", "ede652": "dd7731", - "ffffff": "ffffff", "d6938b": "8e65c1", "e7bcb8": "dd9dff", "cdae52": "af3610", - "101010": "101010", "c2ae83": "d9b591", "94724b": "6f492c", "936839": "7e1200" diff --git a/public/images/pokemon/variant/back/951.json b/public/images/pokemon/variant/back/951.json index 600d22ebc33..4e9cc76122b 100644 --- a/public/images/pokemon/variant/back/951.json +++ b/public/images/pokemon/variant/back/951.json @@ -6,10 +6,8 @@ "a6b496": "facf81", "f0fbe3": "ffeacc", "2f683c": "9d6b5b", - "0f0f0f": "0f0f0f", "5c7c5c": "4c292f", "ff9115": "ffb676", - "2e302f": "2e302f", "79b97b": "704f4f" }, "2": { @@ -19,10 +17,8 @@ "a6b496": "fa95d1", "f0fbe3": "fecff5", "2f683c": "7456a8", - "0f0f0f": "0f0f0f", "5c7c5c": "8e7eb1", "ff9115": "b6dfff", - "2e302f": "2e302f", "79b97b": "cfbfe6" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/952.json b/public/images/pokemon/variant/back/952.json index 4f6d47d615d..5502fb57a0a 100644 --- a/public/images/pokemon/variant/back/952.json +++ b/public/images/pokemon/variant/back/952.json @@ -8,7 +8,6 @@ "3f8147": "d38c43", "69ab7b": "be8a84", "42804b": "9d6b5b", - "0f0f0f": "0f0f0f", "262826": "3b1720", "476b51": "704f4f", "3c5042": "4c292f", @@ -23,7 +22,6 @@ "3f8147": "627bcd", "69ab7b": "c4a4eb", "42804b": "9884d3", - "0f0f0f": "0f0f0f", "262826": "7a6597", "476b51": "f8f3fe", "3c5042": "cfbfe6", diff --git a/public/images/pokemon/variant/back/953.json b/public/images/pokemon/variant/back/953.json index 9a56df52cb9..17e3c06732b 100644 --- a/public/images/pokemon/variant/back/953.json +++ b/public/images/pokemon/variant/back/953.json @@ -8,7 +8,6 @@ "c5b4aa": "d3e6e6", "37332b": "104139", "777463": "199e46", - "000000": "000000", "a28e86": "c1d8db", "b96c26": "2f7410" }, @@ -21,7 +20,6 @@ "c5b4aa": "39cfbc", "37332b": "261031", "777463": "8358a1", - "000000": "000000", "a28e86": "52b0b0", "b96c26": "4792bd" } diff --git a/public/images/pokemon/variant/back/954.json b/public/images/pokemon/variant/back/954.json index b760ea947d4..b591f9593db 100644 --- a/public/images/pokemon/variant/back/954.json +++ b/public/images/pokemon/variant/back/954.json @@ -7,7 +7,6 @@ "f73983": "ffbc00", "9a1b48": "fffd91", "f8f8f8": "fbf3ab", - "181818": "181818", "5ea2c6": "7d4538", "6bc0dd": "b05858", "3f4f5c": "523223", @@ -23,7 +22,6 @@ "f73983": "141031", "9a1b48": "ded051", "f8f8f8": "432f77", - "181818": "181818", "5ea2c6": "616481", "6bc0dd": "9e9fb6", "3f4f5c": "21214c", diff --git a/public/images/pokemon/variant/back/957.json b/public/images/pokemon/variant/back/957.json index 2c5e45997ff..81ea5b4b1e5 100644 --- a/public/images/pokemon/variant/back/957.json +++ b/public/images/pokemon/variant/back/957.json @@ -3,7 +3,6 @@ "522e45": "56224b", "ecd0d0": "f2d5cb", "aa848f": "ad858d", - "0f0f0f": "0f0f0f", "a74167": "993868", "ec558c": "c65f7e", "e991b5": "ff9ba0", @@ -15,7 +14,6 @@ "522e45": "7f3435", "ecd0d0": "fef8e6", "aa848f": "aecdcf", - "0f0f0f": "0f0f0f", "a74167": "ee8363", "ec558c": "f3ad79", "e991b5": "ffd8ad", @@ -27,7 +25,6 @@ "522e45": "3e325e", "ecd0d0": "ecd9f7", "aa848f": "c0b3e2", - "0f0f0f": "0f0f0f", "a74167": "7b3f91", "ec558c": "a557a3", "e991b5": "db9fea", diff --git a/public/images/pokemon/variant/back/958.json b/public/images/pokemon/variant/back/958.json index ad50c394745..dc8a9fff24d 100644 --- a/public/images/pokemon/variant/back/958.json +++ b/public/images/pokemon/variant/back/958.json @@ -6,7 +6,6 @@ "312b33": "3f2319", "897194": "8b5745", "ada1c5": "cb836c", - "0f0f0f": "0f0f0f", "e991b5": "ff9ba0", "ae597d": "d35673", "ec558c": "c65f7e", @@ -21,7 +20,6 @@ "312b33": "3f2319", "897194": "834436", "ada1c5": "bf7754", - "0f0f0f": "0f0f0f", "e991b5": "f6c58d", "ae597d": "ad7058", "ec558c": "f3ad79", @@ -36,7 +34,6 @@ "312b33": "1e1d30", "897194": "6a6e77", "ada1c5": "aebab6", - "0f0f0f": "0f0f0f", "e991b5": "db9fea", "ae597d": "a171c4", "ec558c": "a557a3", diff --git a/public/images/pokemon/variant/back/959.json b/public/images/pokemon/variant/back/959.json index 544c4431a68..671346287fc 100644 --- a/public/images/pokemon/variant/back/959.json +++ b/public/images/pokemon/variant/back/959.json @@ -3,12 +3,7 @@ "2b153a": "3d171f", "5f4c9b": "77394b", "452f66": "592740", - "111111": "111111", - "aa855d": "aa855d", - "664636": "664636", "897193": "aa624c", - "eeebc8": "eeebc8", - "e2c793": "e2c793", "524059": "512d1e", "aaa0c3": "e48d72", "cc518e": "873659", @@ -26,7 +21,6 @@ "2b153a": "281738", "5f4c9b": "377377", "452f66": "19374a", - "111111": "111111", "aa855d": "80959f", "664636": "535d6c", "897193": "834436", @@ -49,7 +43,6 @@ "2b153a": "1e1d30", "5f4c9b": "aebab6", "452f66": "6a6e77", - "111111": "111111", "aa855d": "ad9c8a", "664636": "685952", "897193": "353549", diff --git a/public/images/pokemon/variant/back/962.json b/public/images/pokemon/variant/back/962.json index 615d983e2c5..efb88b17751 100644 --- a/public/images/pokemon/variant/back/962.json +++ b/public/images/pokemon/variant/back/962.json @@ -1,7 +1,6 @@ { "0": { "342930": "3e1d26", - "0f0f0f": "0f0f0f", "4a3942": "60354a", "937d85": "b1686b", "b9aaaf": "dd9f9d", @@ -17,7 +16,6 @@ }, "1": { "342930": "1e382a", - "0f0f0f": "0f0f0f", "4a3942": "395740", "937d85": "6b7e50", "b9aaaf": "c6ca8e", @@ -33,7 +31,6 @@ }, "2": { "342930": "754156", - "0f0f0f": "0f0f0f", "4a3942": "a5777f", "937d85": "2f2655", "b9aaaf": "453863", diff --git a/public/images/pokemon/variant/back/967.json b/public/images/pokemon/variant/back/967.json index 7eab2cd96f5..bdd96d92422 100644 --- a/public/images/pokemon/variant/back/967.json +++ b/public/images/pokemon/variant/back/967.json @@ -1,31 +1,22 @@ { "1": { "384a35": "464354", - "b9b7b3": "b9b7b3", "54654e": "67637a", "1c2916": "272431", - "0f0f0f": "0f0f0f", "f16b32": "bead9d", "34453d": "444a71", "607d6d": "6e76a9", - "75b07d": "9299c7", - "fcfcfc": "fcfcfc", - "323943": "323943", - "222328": "222328", - "4b565c": "4b565c", - "e2e9d7": "e2e9d7" + "75b07d": "9299c7" }, "2": { "384a35": "5d0c0c", "b9b7b3": "c0ab8b", "54654e": "942d22", "1c2916": "43060b", - "0f0f0f": "0f0f0f", "f16b32": "8c63d2", "34453d": "45141d", "607d6d": "6b2c31", "75b07d": "a95d50", - "fcfcfc": "fcfcfc", "323943": "502b2a", "222328": "371516", "4b565c": "815652", diff --git a/public/images/pokemon/variant/back/968.json b/public/images/pokemon/variant/back/968.json index 83a04a2bd2c..cf193ddfff8 100644 --- a/public/images/pokemon/variant/back/968.json +++ b/public/images/pokemon/variant/back/968.json @@ -1,30 +1,19 @@ { "1": { - "52585c": "52585c", - "0f0f0f": "0f0f0f", "492927": "29421f", - "d1d1da": "d1d1da", - "92989c": "92989c", "bd494a": "4d7d3a", "f7645a": "5c9446", "813737": "3b5f2d", - "bd928c": "bd928c", - "fcceba": "fcceba", - "52b6ef": "a14363", - "5c4f41": "5c4f41" + "52b6ef": "a14363" }, "2": { "52585c": "676e74", - "0f0f0f": "0f0f0f", "492927": "6f390d", "d1d1da": "dadae3", "92989c": "a1a9ae", "bd494a": "ba7429", "f7645a": "eee870", "813737": "ae7100", - "bd928c": "bd928c", - "fcceba": "fcceba", - "52b6ef": "46de9b", - "5c4f41": "5c4f41" + "52b6ef": "46de9b" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/969.json b/public/images/pokemon/variant/back/969.json index 99e9549bbf9..61effc7cf6d 100644 --- a/public/images/pokemon/variant/back/969.json +++ b/public/images/pokemon/variant/back/969.json @@ -2,7 +2,6 @@ "1": { "21255c": "323b51", "3253d6": "577b81", - "0f0f0f": "0f0f0f", "5de0aa": "fbce5d", "2c369a": "435469", "41968b": "c57833", @@ -18,7 +17,6 @@ "2": { "21255c": "bb7154", "3253d6": "ffedd1", - "0f0f0f": "0f0f0f", "5de0aa": "df543b", "2c369a": "e1a47a", "41968b": "a51414", diff --git a/public/images/pokemon/variant/back/970.json b/public/images/pokemon/variant/back/970.json index 1b4ec91b2f8..cc64345f212 100644 --- a/public/images/pokemon/variant/back/970.json +++ b/public/images/pokemon/variant/back/970.json @@ -1,6 +1,5 @@ { "1": { - "242737": "242737", "366956": "692915", "41968b": "c57833", "5de0aa": "fbce5d", diff --git a/public/images/pokemon/variant/back/973.json b/public/images/pokemon/variant/back/973.json index 6bb3f90575d..49889e00caf 100644 --- a/public/images/pokemon/variant/back/973.json +++ b/public/images/pokemon/variant/back/973.json @@ -6,13 +6,10 @@ "f596b0": "f0ddde", "645555": "404355", "e9e5ea": "e7e2e6", - "e7e2e6": "e7e2e6", "bdaeba": "bdaeb5", "504343": "272636", "f9be51": "e7a11f", "bf964a": "d28011", - "000000": "000000", - "ffffff": "ffffff", "852941": "60484a" }, "1": { @@ -22,13 +19,10 @@ "f596b0": "e768cc", "645555": "404355", "e9e5ea": "e7e2e6", - "e7e2e6": "e7e2e6", "bdaeba": "bdaeb5", "504343": "272636", "f9be51": "5fdd5b", "bf964a": "289c43", - "000000": "000000", - "ffffff": "ffffff", "852941": "430855" }, "2": { @@ -36,15 +30,10 @@ "af3f5b": "b7501e", "eb6d96": "f29f5b", "f596b0": "fabe7d", - "645555": "645555", "e9e5ea": "e7e2e6", - "e7e2e6": "e7e2e6", "bdaeba": "bdaeb5", - "504343": "504343", "f9be51": "3175cb", "bf964a": "2c3ca6", - "000000": "000000", - "ffffff": "ffffff", "852941": "943615" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/974.json b/public/images/pokemon/variant/back/974.json index 31a1cf892b1..057e9e9047d 100644 --- a/public/images/pokemon/variant/back/974.json +++ b/public/images/pokemon/variant/back/974.json @@ -4,7 +4,6 @@ "524951": "661427", "bebaba": "ee9065", "efefef": "ffcc9e", - "0f0f0f": "0f0f0f", "c7639c": "48aeba", "f493c9": "71e2d3", "fcfcfc": "efefef", @@ -17,7 +16,6 @@ "524951": "172651", "bebaba": "2a607f", "efefef": "438aa0", - "0f0f0f": "0f0f0f", "c7639c": "daa470", "f493c9": "ffdfa1", "fcfcfc": "efefef", diff --git a/public/images/pokemon/variant/back/975.json b/public/images/pokemon/variant/back/975.json index 428947aa317..3d082dd5749 100644 --- a/public/images/pokemon/variant/back/975.json +++ b/public/images/pokemon/variant/back/975.json @@ -2,7 +2,6 @@ "1": { "6a6069": "8c2727", "c8c4c4": "ee9065", - "0f0f0f": "0f0f0f", "a29793": "c85442", "fefefe": "ffcc9e", "c7639c": "48aeba", @@ -11,13 +10,11 @@ "b6b6c0": "d85661", "8c8899": "b53653", "f493c9": "71e2d3", - "69697e": "931d50", - "fcfcfc": "fcfcfc" + "69697e": "931d50" }, "2": { "6a6069": "121f43", "c8c4c4": "265777", - "0f0f0f": "0f0f0f", "a29793": "193e66", "fefefe": "357489", "c7639c": "daa470", @@ -25,8 +22,6 @@ "555566": "a05c56", "b6b6c0": "ffe9d6", "8c8899": "ddbcaa", - "f493c9": "ffdfa1", - "69697e": "69697e", - "fcfcfc": "fcfcfc" + "f493c9": "ffdfa1" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/978-stretchy.json b/public/images/pokemon/variant/back/978-stretchy.json index 670d8a67e35..b5781ffc372 100644 --- a/public/images/pokemon/variant/back/978-stretchy.json +++ b/public/images/pokemon/variant/back/978-stretchy.json @@ -4,7 +4,6 @@ "ffcb2d": "7277a4", "8f6b18": "252c60", "ce9b24": "485084", - "0f0f0f": "0f0f0f", "ffcf2d": "c1c1c1", "cd9a23": "a3a3a3", "adafb8": "dace8e", @@ -16,7 +15,6 @@ "ffcb2d": "355c1e", "8f6b18": "184a03", "ce9b24": "273f08", - "0f0f0f": "0f0f0f", "ffcf2d": "d8d0ad", "cd9a23": "afa680", "adafb8": "91734f", diff --git a/public/images/pokemon/variant/back/979.json b/public/images/pokemon/variant/back/979.json index f5051737038..8e636e471ce 100644 --- a/public/images/pokemon/variant/back/979.json +++ b/public/images/pokemon/variant/back/979.json @@ -3,21 +3,17 @@ "7b7786": "706394", "c0c1c8": "bbb3d6", "fafafc": "ddd2ff", - "111111": "111111", "a5a6b2": "ada2cd", "8f8d9c": "867ba4", "55525c": "625583", "474958": "38496a", "555c69": "3f5275", - "323132": "323132", - "5d6976": "4d6289", - "464546": "464546" + "5d6976": "4d6289" }, "1": { "7b7786": "c88945", "c0c1c8": "ebd494", "fafafc": "f9e9bd", - "111111": "111111", "a5a6b2": "ddbf6b", "8f8d9c": "d2a357", "55525c": "895b29", @@ -31,7 +27,6 @@ "7b7786": "b12009", "c0c1c8": "f26a3c", "fafafc": "ffa050", - "111111": "111111", "a5a6b2": "e9492f", "8f8d9c": "d22c10", "55525c": "951500", diff --git a/public/images/pokemon/variant/back/98.json b/public/images/pokemon/variant/back/98.json index 3fc272d9ff2..677c4ac9014 100644 --- a/public/images/pokemon/variant/back/98.json +++ b/public/images/pokemon/variant/back/98.json @@ -4,13 +4,10 @@ "843110": "433868", "ffa563": "c466f3", "ff7331": "9359ca", - "101010": "101010", "5a4221": "231947", "ffdebd": "c3d6ff", "e6bd8c": "9ba3d9", "735210": "4c5067", - "ffffff": "ffffff", - "dedede": "dedede", "b58442": "847ebe" }, "2": { @@ -18,13 +15,10 @@ "843110": "234b85", "ffa563": "5ce6f3", "ff7331": "4abbd4", - "101010": "101010", "5a4221": "0d193e", "ffdebd": "4a5197", "e6bd8c": "342b78", "735210": "232756", - "ffffff": "ffffff", - "dedede": "dedede", "b58442": "1e1e64" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/981.json b/public/images/pokemon/variant/back/981.json index 985b3611ab8..e7e2c41d476 100644 --- a/public/images/pokemon/variant/back/981.json +++ b/public/images/pokemon/variant/back/981.json @@ -1,7 +1,6 @@ { "1": { "43341e": "112b46", - "0f0f0f": "0f0f0f", "6f5431": "1f4062", "8b704c": "3d6186", "36383d": "503a2d", @@ -9,9 +8,7 @@ "9ca0ab": "665144", "fff42f": "c29925", "deb43d": "dec93d", - "fcfcfc": "fcfcfc", "775c10": "774f10", - "a8abb3": "a8abb3", "b1a75c": "882d2d", "513c21": "500f0f", "fdec8a": "9c3e3e", @@ -25,7 +22,6 @@ }, "2": { "43341e": "52ab5f", - "0f0f0f": "0f0f0f", "6f5431": "a8e781", "8b704c": "e4efcf", "36383d": "792e51", @@ -33,9 +29,7 @@ "9ca0ab": "9c5978", "fff42f": "ed9233", "deb43d": "ebbb72", - "fcfcfc": "fcfcfc", "775c10": "b35127", - "a8abb3": "a8abb3", "b1a75c": "1e7884", "513c21": "1a456c", "fdec8a": "2a9d8f", diff --git a/public/images/pokemon/variant/back/982-three-segment.json b/public/images/pokemon/variant/back/982-three-segment.json index 4fe1f475743..b740a63bde3 100644 --- a/public/images/pokemon/variant/back/982-three-segment.json +++ b/public/images/pokemon/variant/back/982-three-segment.json @@ -1,10 +1,8 @@ { "1": { "5a6273": "5d6970", - "f6ffff": "f6ffff", "735a41": "53575a", "f6e67b": "ececec", - "101010": "101010", "debd39": "aeaeae", "c1d1e9": "c1d7e2", "318ba4": "4a6165", diff --git a/public/images/pokemon/variant/back/982.json b/public/images/pokemon/variant/back/982.json index 4fe1f475743..b740a63bde3 100644 --- a/public/images/pokemon/variant/back/982.json +++ b/public/images/pokemon/variant/back/982.json @@ -1,10 +1,8 @@ { "1": { "5a6273": "5d6970", - "f6ffff": "f6ffff", "735a41": "53575a", "f6e67b": "ececec", - "101010": "101010", "debd39": "aeaeae", "c1d1e9": "c1d7e2", "318ba4": "4a6165", diff --git a/public/images/pokemon/variant/back/987.json b/public/images/pokemon/variant/back/987.json index e28a34d5435..b0d6b616201 100644 --- a/public/images/pokemon/variant/back/987.json +++ b/public/images/pokemon/variant/back/987.json @@ -5,7 +5,6 @@ "621841": "71370f", "b36cc1": "d3941a", "182941": "132443", - "0f0f0f": "0f0f0f", "de62a4": "ffc668", "4a83a4": "387fa7", "314a62": "244260", @@ -18,7 +17,6 @@ "621841": "7b3c08", "b36cc1": "1dbdb9", "182941": "244358", - "0f0f0f": "0f0f0f", "de62a4": "ffdf90", "4a83a4": "a1c8db", "314a62": "7396b4", @@ -31,7 +29,6 @@ "621841": "5a0a05", "b36cc1": "eece8c", "182941": "603305", - "0f0f0f": "0f0f0f", "de62a4": "e25038", "4a83a4": "e6aa47", "314a62": "b56f2a", diff --git a/public/images/pokemon/variant/back/988.json b/public/images/pokemon/variant/back/988.json index 7ef8e8d8902..799a483d3e8 100644 --- a/public/images/pokemon/variant/back/988.json +++ b/public/images/pokemon/variant/back/988.json @@ -4,14 +4,10 @@ "ed7e3d": "28d7bd", "7b2000": "0b334c", "d8a33f": "56e4ba", - "181820": "181820", "efd165": "66e9c2", "d1fd77": "e2fd77", "7dc536": "d7d346", "f04137": "17b79f", - "35384f": "35384f", - "f1f7f7": "f1f7f7", - "465175": "465175", "a9a9ab": "92c9b9", "359f8f": "23838b" }, @@ -20,13 +16,11 @@ "ed7e3d": "b258c9", "7b2000": "3d1759", "d8a33f": "9d46a1", - "181820": "181820", "efd165": "c273e0", "d1fd77": "71d1fb", "7dc536": "38b9e0", "f04137": "9439c5", "35384f": "123755", - "f1f7f7": "f1f7f7", "465175": "1b233f", "a9a9ab": "8fb8c9", "359f8f": "154e67" diff --git a/public/images/pokemon/variant/back/99-gigantamax.json b/public/images/pokemon/variant/back/99-gigantamax.json index 31fa87f0e8d..7318afcc1dc 100644 --- a/public/images/pokemon/variant/back/99-gigantamax.json +++ b/public/images/pokemon/variant/back/99-gigantamax.json @@ -4,7 +4,6 @@ "f6c58b": "9f60d5", "832908": "3b1c69", "ee8b4a": "8853bf", - "101010": "101010", "735210": "534681", "fdfdfd": "ffdbdb", "e1d0db": "d5869b", @@ -19,7 +18,6 @@ "f6c58b": "75e0e8", "832908": "22447d", "ee8b4a": "43adc4", - "101010": "101010", "735210": "1e1743", "fdfdfd": "b1f1cf", "e1d0db": "73c1c2", diff --git a/public/images/pokemon/variant/back/99.json b/public/images/pokemon/variant/back/99.json index 3dcbff624f5..de493968876 100644 --- a/public/images/pokemon/variant/back/99.json +++ b/public/images/pokemon/variant/back/99.json @@ -4,8 +4,6 @@ "c56b5a": "6232a9", "ef8c4a": "8853bf", "f7c58c": "9f60d5", - "101010": "101010", - "4a3121": "4a3121", "efbd8c": "9ba3d9", "ffe6b5": "c3d6ff", "b57b5a": "7c72b6", @@ -16,7 +14,6 @@ "c56b5a": "2d6f9e", "ef8c4a": "43adc4", "f7c58c": "75e0e8", - "101010": "101010", "4a3121": "1c1f46", "efbd8c": "31296f", "ffe6b5": "464d89", diff --git a/public/images/pokemon/variant/back/993.json b/public/images/pokemon/variant/back/993.json index 5668106b6b9..a3397ce9af9 100644 --- a/public/images/pokemon/variant/back/993.json +++ b/public/images/pokemon/variant/back/993.json @@ -2,7 +2,6 @@ "1": { "282828": "292109", "7a787a": "f8f5e2", - "0f0f0f": "0f0f0f", "463741": "754711", "4f4d51": "c59b4b", "4a424a": "533310", @@ -11,14 +10,12 @@ "3a75e6": "543280", "952b7d": "585a5c", "ff4dcb": "b7c6d6", - "fcfcfc": "fcfcfc", "172e57": "160832", "749eed": "b98bd6" }, "2": { "282828": "172220", "7a787a": "a4bfbe", - "0f0f0f": "0f0f0f", "463741": "264953", "4f4d51": "467678", "4a424a": "24323e", @@ -27,7 +24,6 @@ "3a75e6": "983b5c", "952b7d": "873954", "ff4dcb": "e3bbd3", - "fcfcfc": "fcfcfc", "172e57": "470e2c", "749eed": "f17ea6" } diff --git a/public/images/pokemon/variant/back/994.json b/public/images/pokemon/variant/back/994.json index bb4507045bd..98b54e86dd2 100644 --- a/public/images/pokemon/variant/back/994.json +++ b/public/images/pokemon/variant/back/994.json @@ -5,13 +5,11 @@ "f29e42": "00f02c", "fac375": "8bffa0", "626262": "696983", - "090913": "090913", "6a0305": "ae7a24", "dd393e": "fdc263", "a91215": "d79a38", "979797": "9b9bb6", "dddcde": "d9d9ea", - "292933": "292933", "30445a": "3f357c", "96cfd7": "b0a4f8", "6a8997": "867bc8" @@ -21,14 +19,10 @@ "7b451b": "0a5763", "f29e42": "00bfe1", "fac375": "7bf2ff", - "626262": "626262", - "090913": "090913", "6a0305": "6e2140", "dd393e": "ff5e5e", "a91215": "e72158", - "979797": "979797", "dddcde": "e9dac7", - "292933": "292933", "30445a": "664338", "96cfd7": "ffc28c", "6a8997": "ff926c" diff --git a/public/images/pokemon/variant/back/995.json b/public/images/pokemon/variant/back/995.json index 7838862d09b..eaa6f55f6e1 100644 --- a/public/images/pokemon/variant/back/995.json +++ b/public/images/pokemon/variant/back/995.json @@ -1,21 +1,15 @@ { "1": { - "101010": "101010", "50692e": "7b6a31", "79a045": "ac9b63", "bbd782": "f6eebd", "9ac450": "ddcb86", "069f7a": "9d3eb9", "02fd9e": "ca72e4", - "edffee": "edffee", - "43343c": "43343c", - "504a4a": "504a4a", "54992b": "8d7f54", - "2c2327": "2c2327", "456723": "4f4528" }, "2": { - "101010": "101010", "50692e": "383c40", "79a045": "4c5156", "bbd782": "949ca5", @@ -23,10 +17,8 @@ "069f7a": "9a1f2c", "02fd9e": "d53143", "edffee": "d8dfe8", - "43343c": "43343c", "504a4a": "48424f", "54992b": "464b51", - "2c2327": "2c2327", "456723": "26292b" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/996.json b/public/images/pokemon/variant/back/996.json index 2891143402e..972620eab18 100644 --- a/public/images/pokemon/variant/back/996.json +++ b/public/images/pokemon/variant/back/996.json @@ -1,6 +1,5 @@ { "1": { - "020202": "020202", "5f5f64": "181f1f", "9ea7af": "293b39", "bec3c7": "325747", @@ -17,7 +16,6 @@ "ffe000": "c5a64d" }, "2": { - "020202": "020202", "5f5f64": "2f2c38", "9ea7af": "ceccef", "bec3c7": "e6e6eb", @@ -25,9 +23,6 @@ "314a5d": "524f60", "c4e9eb": "fcb925", "968201": "2a3064", - "e3e3e3": "e3e3e3", - "bcb7bc": "bcb7bc", - "a39ca1": "a39ca1", "96abac": "ca6d2a", "aecacb": "e38f21", "cab300": "1f46c4", diff --git a/public/images/pokemon/variant/back/997.json b/public/images/pokemon/variant/back/997.json index edf986cf27a..6567c4d0ee5 100644 --- a/public/images/pokemon/variant/back/997.json +++ b/public/images/pokemon/variant/back/997.json @@ -1,6 +1,5 @@ { "1": { - "020202": "020202", "516373": "5a3b36", "caefef": "b7926b", "3f6176": "1e2c2f", @@ -15,7 +14,6 @@ "cf9100": "9f7b3e" }, "2": { - "020202": "020202", "516373": "79452f", "caefef": "fcb925", "3f6176": "8a82aa", diff --git a/public/images/pokemon/variant/back/998.json b/public/images/pokemon/variant/back/998.json index 5c83a4cd734..063d9582962 100644 --- a/public/images/pokemon/variant/back/998.json +++ b/public/images/pokemon/variant/back/998.json @@ -1,7 +1,6 @@ { "1": { "1f3241": "1b2525", - "020202": "020202", "5b879b": "5a3b36", "416075": "305444", "eaf9f9": "e1d4be", @@ -10,14 +9,12 @@ "afc0c7": "8f6049", "ffe100": "30d1ff", "837d34": "3b69d3", - "272427": "272427", "bf373e": "c5a64d", "9b2930": "705c39", "8fa7b1": "835344" }, "2": { "1f3241": "524f60", - "020202": "020202", "5b879b": "79452f", "416075": "e6e6eb", "eaf9f9": "fff8d3", diff --git a/public/images/pokemon/variant/back/999.json b/public/images/pokemon/variant/back/999.json index bacd640b9be..e7ba3b67167 100644 --- a/public/images/pokemon/variant/back/999.json +++ b/public/images/pokemon/variant/back/999.json @@ -9,7 +9,6 @@ "545b6b": "1e2e60", "783a52": "492118", "ac4454": "ab461e", - "0f0f0f": "0f0f0f", "7a82a9": "5e647a", "bac4d8": "757a8b", "a59227": "a44418" @@ -24,9 +23,6 @@ "545b6b": "415073", "783a52": "4f2e5c", "ac4454": "794e83", - "0f0f0f": "0f0f0f", - "7a82a9": "7a82a9", - "bac4d8": "bac4d8", "a59227": "9c9cbe" }, "2": { @@ -39,9 +35,6 @@ "545b6b": "6467a8", "783a52": "6d6594", "ac4454": "bcb9d6", - "0f0f0f": "0f0f0f", - "7a82a9": "7a82a9", - "bac4d8": "bac4d8", "a59227": "b6d0d7" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/111.json b/public/images/pokemon/variant/back/female/111.json index 5ef11d8ed41..bf115bed097 100644 --- a/public/images/pokemon/variant/back/female/111.json +++ b/public/images/pokemon/variant/back/female/111.json @@ -4,19 +4,13 @@ "bdbdce": "6a547a", "8484ad": "402f51", "3a3a52": "261e2d", - "101010": "101010", - "e6e6ef": "9781ab", - "ffffff": "ffffff", - "ad3a29": "ad3a29" + "e6e6ef": "9781ab" }, "2": { "5a5a7b": "ab4355", "bdbdce": "e18db3", "8484ad": "d76688", "3a3a52": "6d2935", - "101010": "101010", - "e6e6ef": "f7b4d1", - "ffffff": "ffffff", - "ad3a29": "ad3a29" + "e6e6ef": "f7b4d1" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/112.json b/public/images/pokemon/variant/back/female/112.json index 774e2d1cf64..189c155b683 100644 --- a/public/images/pokemon/variant/back/female/112.json +++ b/public/images/pokemon/variant/back/female/112.json @@ -3,24 +3,18 @@ "52525a": "3c2945", "c5c5bd": "6a547a", "8c8c94": "523c5c", - "101010": "101010", "e6e6de": "9781ab", "735a31": "6b6373", "e6d6ad": "cecede", - "b5a573": "948cad", - "ffffff": "ffffff", - "e6523a": "e6523a" + "b5a573": "948cad" }, "2": { "52525a": "642224", "c5c5bd": "cb568a", "8c8c94": "ab3f5c", - "101010": "101010", "e6e6de": "ef86b5", "735a31": "6d586d", "e6d6ad": "dacad3", - "b5a573": "be9bb6", - "ffffff": "ffffff", - "e6523a": "e6523a" + "b5a573": "be9bb6" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/118.json b/public/images/pokemon/variant/back/female/118.json index 6097ad43468..2bba2f4b638 100644 --- a/public/images/pokemon/variant/back/female/118.json +++ b/public/images/pokemon/variant/back/female/118.json @@ -2,9 +2,7 @@ "1": { "52525a": "5b3856", "ffffff": "fff9fc", - "101010": "101010", "8c8c94": "9c6891", - "efefef": "efefef", "ceb57b": "975c8c", "d6d6de": "bf8cb0", "ad1000": "40163f", @@ -17,7 +15,6 @@ "2": { "52525a": "2e5453", "ffffff": "f0fff8", - "101010": "101010", "8c8c94": "629a8e", "efefef": "c3f0dd", "ceb57b": "65aaae", diff --git a/public/images/pokemon/variant/back/female/119.json b/public/images/pokemon/variant/back/female/119.json index 9471908cb42..f48ae5bdf48 100644 --- a/public/images/pokemon/variant/back/female/119.json +++ b/public/images/pokemon/variant/back/female/119.json @@ -3,7 +3,6 @@ "8c7b84": "8d6083", "f7f7ff": "ffecfa", "dedee6": "eac5df", - "101010": "101010", "943119": "49215e", "c54229": "843f97", "ffdebd": "eac5df", @@ -17,7 +16,6 @@ "8c7b84": "5182a3", "f7f7ff": "eafcff", "dedee6": "bae6f4", - "101010": "101010", "943119": "132441", "c54229": "1a447b", "ffdebd": "cedaef", diff --git a/public/images/pokemon/variant/back/female/123.json b/public/images/pokemon/variant/back/female/123.json index 049e6e23435..e3734a34d2e 100644 --- a/public/images/pokemon/variant/back/female/123.json +++ b/public/images/pokemon/variant/back/female/123.json @@ -5,43 +5,22 @@ "e6d6ad": "b5b5ce", "9c8c31": "632929", "8cce73": "f76b6b", - "101010": "101010", "fff7d6": "ffffff", "5a9c4a": "d63a3a", - "bdbdbd": "bdbdbd", - "c5a573": "b5b5ce", - "dedede": "dedede", - "ffffff": "ffffff", - "737373": "737373" + "c5a573": "b5b5ce" }, "1": { "425a21": "484e75", "bde673": "bdbdbd", - "e6d6ad": "e6d6ad", - "9c8c31": "9c8c31", "8cce73": "92b0db", - "101010": "101010", - "fff7d6": "fff7d6", "5a9c4a": "7b94d6", "bdbdbd": "ffffff", - "c5a573": "9cc5ff", - "dedede": "dedede", - "ffffff": "ffffff", - "737373": "737373" + "c5a573": "9cc5ff" }, "2": { "425a21": "8f3907", "bde673": "f8f581", - "e6d6ad": "e6d6ad", - "9c8c31": "9c8c31", "8cce73": "f0c947", - "101010": "101010", - "fff7d6": "fff7d6", - "5a9c4a": "e6a027", - "bdbdbd": "bdbdbd", - "c5a573": "c5a573", - "dedede": "dedede", - "ffffff": "ffffff", - "737373": "737373" + "5a9c4a": "e6a027" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/129.json b/public/images/pokemon/variant/back/female/129.json index 1d949149c89..63297954964 100644 --- a/public/images/pokemon/variant/back/female/129.json +++ b/public/images/pokemon/variant/back/female/129.json @@ -1,7 +1,6 @@ { "1": { "7b6352": "8a4723", - "000000": "000000", "ffde29": "f0bf75", "c5ad73": "c07b3f", "840042": "22294c", @@ -16,7 +15,6 @@ }, "2": { "7b6352": "94836f", - "000000": "000000", "ffde29": "e2d9c0", "c5ad73": "bcaf98", "840042": "230f55", diff --git a/public/images/pokemon/variant/back/female/130.json b/public/images/pokemon/variant/back/female/130.json index d18385f7385..1bdb5ddf702 100644 --- a/public/images/pokemon/variant/back/female/130.json +++ b/public/images/pokemon/variant/back/female/130.json @@ -2,7 +2,6 @@ "1": { "737b7b": "9b7866", "f7f7f7": "ffedce", - "191919": "191919", "d6def7": "e3c7ab", "194273": "6c1301", "218cad": "cd6b1b", @@ -15,7 +14,6 @@ "2": { "737b7b": "a37785", "f7f7f7": "f7e2e2", - "191919": "191919", "d6def7": "d9b6b9", "194273": "1c0b46", "218cad": "53227e", diff --git a/public/images/pokemon/variant/back/female/185.json b/public/images/pokemon/variant/back/female/185.json index f65d9951e05..e30e4407750 100644 --- a/public/images/pokemon/variant/back/female/185.json +++ b/public/images/pokemon/variant/back/female/185.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "635a4a": "303429", "ad845a": "6f7367", "8c7342": "515549", @@ -11,7 +10,6 @@ "e6b54a": "8f991b" }, "2": { - "101010": "101010", "635a4a": "243075", "ad845a": "4663b1", "8c7342": "3d47a2", diff --git a/public/images/pokemon/variant/back/female/19.json b/public/images/pokemon/variant/back/female/19.json index c72993def35..54bd7d2edf7 100644 --- a/public/images/pokemon/variant/back/female/19.json +++ b/public/images/pokemon/variant/back/female/19.json @@ -4,13 +4,10 @@ "d69cd6": "88a0b1", "b573bd": "5f778e", "4a2942": "262f4f", - "101010": "101010", "a57308": "cb9287", "efdeb5": "fae4d8", "634a08": "ae6b69", "cead63": "e8beae", - "ffffff": "ffffff", - "5a5a5a": "5a5a5a", "e65a73": "6e8d9a" }, "2": { @@ -18,13 +15,10 @@ "d69cd6": "fff5eb", "b573bd": "efdcd1", "4a2942": "865c54", - "101010": "101010", "a57308": "ba476f", "efdeb5": "efb5c0", "634a08": "7e3754", "cead63": "d98a9f", - "ffffff": "ffffff", - "5a5a5a": "5a5a5a", "e65a73": "cb3f46" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/190.json b/public/images/pokemon/variant/back/female/190.json index 7945e4a1186..9c7c9e1b4e1 100644 --- a/public/images/pokemon/variant/back/female/190.json +++ b/public/images/pokemon/variant/back/female/190.json @@ -3,7 +3,6 @@ "52216b": "701523", "a55ac5": "c47440", "bd7bde": "dea95a", - "000000": "000000", "8442ad": "ad452f", "8c6b42": "8c7457", "c5ad6b": "c4b487", @@ -14,7 +13,6 @@ "52216b": "807870", "a55ac5": "bfbeb4", "bd7bde": "e5dfdf", - "000000": "000000", "8442ad": "a6a297", "8c6b42": "632339", "c5ad6b": "99455d", diff --git a/public/images/pokemon/variant/back/female/20.json b/public/images/pokemon/variant/back/female/20.json index f16f484b797..d3d2738ba7a 100644 --- a/public/images/pokemon/variant/back/female/20.json +++ b/public/images/pokemon/variant/back/female/20.json @@ -3,23 +3,18 @@ "6b3a00": "331a1b", "a57329": "543330", "c5943a": "644c47", - "101010": "101010", "c58452": "bc9087", "ffce9c": "dfc0b3", "945210": "764f4d", "845a29": "956240", - "b5b5b5": "b5b5b5", "a58431": "cd9c6e", "f7f7a5": "fff1d4", - "ffffff": "ffffff", - "efce73": "eccda3", - "737373": "737373" + "efce73": "eccda3" }, "2": { "6b3a00": "7f645c", "a57329": "bba08f", "c5943a": "e2cbb9", - "101010": "101010", "c58452": "ae6f7e", "ffce9c": "e4b4b4", "945210": "813636", diff --git a/public/images/pokemon/variant/back/female/203.json b/public/images/pokemon/variant/back/female/203.json index 1429eb40c25..cb82db0fd3c 100644 --- a/public/images/pokemon/variant/back/female/203.json +++ b/public/images/pokemon/variant/back/female/203.json @@ -1,14 +1,12 @@ { "1": { "424a73": "351810", - "ffffff": "ffffff", "adb5d6": "8f6f66", "6b8cb5": "512b21", "4a3a3a": "231117", "efde52": "9c3e3e", "c5a53a": "7e262d", "9c3a5a": "ab9d75", - "101010": "101010", "9c7b42": "571522", "ce6b94": "d8d1ad", "947b6b": "1f4062", @@ -18,14 +16,12 @@ }, "2": { "424a73": "27091d", - "ffffff": "ffffff", "adb5d6": "c5b0b7", "6b8cb5": "4a1b33", "4a3a3a": "091225", "efde52": "2a9d8f", "c5a53a": "1e7884", "9c3a5a": "52ab5f", - "101010": "101010", "9c7b42": "15545d", "ce6b94": "a8e781", "947b6b": "1a2e43", diff --git a/public/images/pokemon/variant/back/female/212.json b/public/images/pokemon/variant/back/female/212.json index 84f12bf1434..3c7d9a4799c 100644 --- a/public/images/pokemon/variant/back/female/212.json +++ b/public/images/pokemon/variant/back/female/212.json @@ -3,24 +3,14 @@ "632929": "215a2d", "f76b6b": "8cce73", "a52929": "2f794e", - "101010": "101010", - "d63a3a": "4a9c53", - "9494a5": "9494a5", - "ffffff": "ffffff", - "b5b5ce": "b5b5ce", - "3a3a4a": "3a3a4a", - "9c6b21": "9c6b21", - "dec510": "dec510" + "d63a3a": "4a9c53" }, "1": { "632929": "2f2962", "f76b6b": "639cf7", "a52929": "29429c", - "101010": "101010", "d63a3a": "4263ef", "9494a5": "6262a4", - "ffffff": "ffffff", - "b5b5ce": "b5b5ce", "3a3a4a": "3c3c50", "9c6b21": "131387", "dec510": "10bdde" @@ -29,13 +19,8 @@ "632929": "645117", "f76b6b": "c59f29", "a52929": "b88619", - "101010": "101010", "d63a3a": "ffca2a", "9494a5": "3c4543", - "ffffff": "ffffff", - "b5b5ce": "b5b5ce", - "3a3a4a": "282d2c", - "9c6b21": "9c6b21", - "dec510": "dec510" + "3a3a4a": "282d2c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/215.json b/public/images/pokemon/variant/back/female/215.json index 3ce956a327e..95c97bce2c3 100644 --- a/public/images/pokemon/variant/back/female/215.json +++ b/public/images/pokemon/variant/back/female/215.json @@ -6,7 +6,6 @@ "f75273": "637696", "21315a": "220a11", "3a94ad": "ac373e", - "000000": "000000", "42849c": "902738", "4a4a4a": "69523f", "bdbdc5": "c5a080", @@ -19,10 +18,8 @@ "f75273": "7ac3f0", "21315a": "723522", "3a94ad": "fbdba1", - "000000": "000000", "42849c": "eab273", "4a4a4a": "383d51", - "bdbdc5": "a1a0c3", - "f7f7ff": "f7f7ff" + "bdbdc5": "a1a0c3" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/217.json b/public/images/pokemon/variant/back/female/217.json index 7ce80e163b6..bbc26a6e1db 100644 --- a/public/images/pokemon/variant/back/female/217.json +++ b/public/images/pokemon/variant/back/female/217.json @@ -1,38 +1,23 @@ { "0": { "422919": "112114", - "7b7b8c": "7b7b8c", - "101010": "101010", "945221": "2f6324", - "ffffff": "ffffff", "634229": "1d3d26", - "b5b5bd": "b5b5bd", "f7c563": "fecd85", - "c59c4a": "cd9343", - "dedede": "dedede" + "c59c4a": "cd9343" }, "1": { "422919": "2d0e1f", - "7b7b8c": "7b7b8c", - "101010": "101010", "945221": "8c2a37", - "ffffff": "ffffff", "634229": "6b1d38", - "b5b5bd": "b5b5bd", "f7c563": "f2cab8", - "c59c4a": "c48e81", - "dedede": "dedede" + "c59c4a": "c48e81" }, "2": { "422919": "111433", - "7b7b8c": "7b7b8c", - "101010": "101010", "945221": "323760", - "ffffff": "ffffff", "634229": "1e2249", - "b5b5bd": "b5b5bd", "f7c563": "5ccaf2", - "c59c4a": "45a2f9", - "dedede": "dedede" + "c59c4a": "45a2f9" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/229.json b/public/images/pokemon/variant/back/female/229.json index eeff43a6184..ad2612813d4 100644 --- a/public/images/pokemon/variant/back/female/229.json +++ b/public/images/pokemon/variant/back/female/229.json @@ -5,17 +5,12 @@ "ced6d6": "dc7e67", "ffffff": "ffcf9a", "192129": "402b41", - "000000": "000000", "31313a": "5c435d", "4a4a52": "85738c", - "f8f9ff": "f8f9ff", "841021": "3b59a1", - "ada5b3": "ada5b3", "632910": "8c6362", "f79c84": "f8f1e7", - "a55a4a": "ceb0a5", - "9c293a": "9c293a", - "e2e0e3": "e2e0e3" + "a55a4a": "ceb0a5" }, "2": { "84738c": "101028", @@ -23,16 +18,13 @@ "ced6d6": "38576c", "ffffff": "5c8d95", "192129": "3a2d35", - "000000": "000000", "31313a": "b3a5a2", "4a4a52": "f8faf3", "f8f9ff": "3d5f75", "841021": "fe8d53", - "ada5b3": "ada5b3", "632910": "3f2440", "f79c84": "844d76", "a55a4a": "613762", - "9c293a": "8c5273", - "e2e0e3": "e2e0e3" + "9c293a": "8c5273" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/232.json b/public/images/pokemon/variant/back/female/232.json index 7d6c59a0aa3..8f5fb1a7be6 100644 --- a/public/images/pokemon/variant/back/female/232.json +++ b/public/images/pokemon/variant/back/female/232.json @@ -3,7 +3,6 @@ "4a5252": "5f74c7", "3a3a3a": "333a77", "849494": "b0d8ff", - "101010": "101010", "6b7373": "7fa0d7", "842129": "c8563f", "9ca5a5": "9ca3b5", @@ -21,7 +20,6 @@ "4a5252": "994e30", "3a3a3a": "6f2219", "849494": "f4b975", - "101010": "101010", "6b7373": "d17e47", "842129": "1d2a54", "9ca5a5": "3c283f", diff --git a/public/images/pokemon/variant/back/female/255.json b/public/images/pokemon/variant/back/female/255.json index d3666839aac..8ffd9a797b9 100644 --- a/public/images/pokemon/variant/back/female/255.json +++ b/public/images/pokemon/variant/back/female/255.json @@ -2,23 +2,19 @@ "1": { "ad8c00": "782a14", "f7de6b": "f1a545", - "000000": "000000", "efbd31": "d36f2b", "7b4a19": "580c0b", "ad4210": "318793", "e65a21": "4cada9", - "ff8c31": "6bcdb2", - "ffffff": "ffffff" + "ff8c31": "6bcdb2" }, "2": { "ad8c00": "550d38", "f7de6b": "ad3342", - "000000": "000000", "efbd31": "811c3e", "7b4a19": "43082f", "ad4210": "b3817d", "e65a21": "d3afa0", - "ff8c31": "f3e5cf", - "ffffff": "ffffff" + "ff8c31": "f3e5cf" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/256.json b/public/images/pokemon/variant/back/female/256.json index a688ca2f6d0..0fe9ff85cad 100644 --- a/public/images/pokemon/variant/back/female/256.json +++ b/public/images/pokemon/variant/back/female/256.json @@ -1,7 +1,6 @@ { "1": { "9c3110": "8e3820", - "191919": "191919", "ff7b4a": "f7ca4b", "de5a29": "da8923", "9c7329": "3a888d", @@ -16,7 +15,6 @@ }, "2": { "9c3110": "8a685f", - "191919": "191919", "ff7b4a": "fff7e1", "de5a29": "cdb09b", "9c7329": "64163c", diff --git a/public/images/pokemon/variant/back/female/257.json b/public/images/pokemon/variant/back/female/257.json index dadb97bbad6..8f5dcf05c4a 100644 --- a/public/images/pokemon/variant/back/female/257.json +++ b/public/images/pokemon/variant/back/female/257.json @@ -6,7 +6,6 @@ "ee5e5e": "598dc1", "dedeb5": "f0fbff", "ff8463": "70b0d5", - "000000": "000000", "63524a": "55607d", "842929": "8e3820", "ef6363": "f7ca4b", @@ -31,7 +30,6 @@ "ee5e5e": "772040", "dedeb5": "cc6155", "ff8463": "912d42", - "000000": "000000", "63524a": "5b1832", "842929": "9c7c70", "ef6363": "fffae1", diff --git a/public/images/pokemon/variant/back/female/3.json b/public/images/pokemon/variant/back/female/3.json index 49fe726b084..2b3274ae4cb 100644 --- a/public/images/pokemon/variant/back/female/3.json +++ b/public/images/pokemon/variant/back/female/3.json @@ -8,15 +8,13 @@ "ff7b73": "712f8f", "bd6b31": "168a69", "de4242": "3f1375", - "101010": "101010", "105242": "190038", "107b6b": "9e1976", "2e5519": "38001c", "5a9c3a": "b34952", "5ad6c5": "f062a4", "21b59c": "de3592", - "84de7b": "ff745e", - "ffffff": "ffffff" + "84de7b": "ff745e" }, "2": { "843100": "420514", @@ -27,14 +25,12 @@ "ff7b73": "9db042", "bd6b31": "852a41", "de4242": "3c8227", - "101010": "101010", "105242": "381601", "107b6b": "d15d04", "2e5519": "011c38", "5a9c3a": "446b94", "5ad6c5": "faa405", "21b59c": "fa8405", - "84de7b": "80ced9", - "ffffff": "ffffff" + "84de7b": "80ced9" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/307.json b/public/images/pokemon/variant/back/female/307.json index 3bdadaa8e16..8420a8631be 100644 --- a/public/images/pokemon/variant/back/female/307.json +++ b/public/images/pokemon/variant/back/female/307.json @@ -3,7 +3,6 @@ "7b6b6b": "7a5f5f", "b5adad": "9f8383", "e6dede": "deccc3", - "000000": "000000", "3a84b5": "7e4377", "3a4a5a": "5a2859", "6bcee6": "f4a8c8", @@ -13,7 +12,6 @@ "7b6b6b": "314b76", "b5adad": "677d98", "e6dede": "c2cfdb", - "000000": "000000", "3a84b5": "51876e", "3a4a5a": "113926", "6bcee6": "7edfb7", diff --git a/public/images/pokemon/variant/back/female/308.json b/public/images/pokemon/variant/back/female/308.json index fd439be8d40..d5c9803f46b 100644 --- a/public/images/pokemon/variant/back/female/308.json +++ b/public/images/pokemon/variant/back/female/308.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "84424a": "59141d", "e6738c": "a53835", "ce5a73": "8b2e2b", @@ -15,7 +14,6 @@ "f7de84": "ee9bd5" }, "2": { - "101010": "101010", "84424a": "461f5d", "e6738c": "a37aac", "ce5a73": "7d5187", @@ -24,7 +22,6 @@ "b54a5a": "633971", "8c848c": "6c7d9e", "ada5ad": "9faab9", - "c5c5c5": "c5c5c5", "a57329": "205a9e", "efbd5a": "205a9e", "f7de84": "5abbef" diff --git a/public/images/pokemon/variant/back/female/315.json b/public/images/pokemon/variant/back/female/315.json index dc0d3cbf1ba..f909e10f4a1 100644 --- a/public/images/pokemon/variant/back/female/315.json +++ b/public/images/pokemon/variant/back/female/315.json @@ -3,7 +3,6 @@ "3a5229": "0b2337", "5a9452": "153a51", "a5de73": "408592", - "000000": "000000", "73c55a": "215569", "295a94": "482571", "a5314a": "9c5910", @@ -19,7 +18,6 @@ "3a5229": "201443", "5a9452": "402765", "a5de73": "aa78cd", - "000000": "000000", "73c55a": "66418b", "295a94": "1a6644", "a5314a": "1d6970", diff --git a/public/images/pokemon/variant/back/female/369.json b/public/images/pokemon/variant/back/female/369.json index b3cff229c6c..4f43e66892b 100644 --- a/public/images/pokemon/variant/back/female/369.json +++ b/public/images/pokemon/variant/back/female/369.json @@ -7,7 +7,6 @@ "efcea5": "757e99", "ffefce": "aab1c6", "b5946b": "31384a", - "000000": "000000", "3a2929": "644c2b", "9c847b": "e0cc66", "524242": "91743c", @@ -18,17 +17,14 @@ "2": { "6b5242": "3a421e", "8c734a": "3d4521", - "52423a": "52423a", "ceb594": "758745", "efcea5": "96a558", "ffefce": "b6c174", "b5946b": "656d39", - "000000": "000000", "3a2929": "231934", "9c847b": "543d7d", "524242": "32214a", "7b6b63": "412e63", - "ef4a73": "ef4a73", "ce4231": "584a95" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/399.json b/public/images/pokemon/variant/back/female/399.json index 7e2fe21cf2a..f4401d7b1c6 100644 --- a/public/images/pokemon/variant/back/female/399.json +++ b/public/images/pokemon/variant/back/female/399.json @@ -3,8 +3,6 @@ "634a31": "70323f", "c58c42": "e5a5bb", "9c6331": "d46378", - "101010": "101010", - "423110": "423110", "cebd84": "eba978", "5a4229": "824561" }, @@ -12,7 +10,6 @@ "634a31": "101e42", "c58c42": "617dda", "9c6331": "3e5ca8", - "101010": "101010", "423110": "0e1831", "cebd84": "8497ce", "5a4229": "42295a" diff --git a/public/images/pokemon/variant/back/female/400.json b/public/images/pokemon/variant/back/female/400.json index 195d6e1a8b0..6f731de97f4 100644 --- a/public/images/pokemon/variant/back/female/400.json +++ b/public/images/pokemon/variant/back/female/400.json @@ -3,10 +3,8 @@ "ad947b": "bd9171", "e6d69c": "fff5d1", "5a3a31": "70323f", - "3a3129": "3a3129", "bd844a": "dba0ac", "8c5a31": "c46269", - "101010": "101010", "423a31": "3e3040", "63523a": "824561" }, @@ -17,7 +15,6 @@ "3a3129": "313d63", "bd844a": "617dda", "8c5a31": "3e5ca8", - "101010": "101010", "423a31": "38204f", "63523a": "42295a" } diff --git a/public/images/pokemon/variant/back/female/401.json b/public/images/pokemon/variant/back/female/401.json index 446e2648182..068a54ee262 100644 --- a/public/images/pokemon/variant/back/female/401.json +++ b/public/images/pokemon/variant/back/female/401.json @@ -2,7 +2,6 @@ "1": { "524a42": "cf8439", "7b7363": "f6bb47", - "101010": "101010", "8c6b08": "272344", "ffefad": "56769d", "e6c56b": "454389", @@ -13,7 +12,6 @@ "2": { "524a42": "453565", "7b7363": "71558c", - "101010": "101010", "8c6b08": "784341", "ffefad": "ffd47c", "e6c56b": "e59a75", diff --git a/public/images/pokemon/variant/back/female/402.json b/public/images/pokemon/variant/back/female/402.json index 7171c8b3629..a6ed33a6a13 100644 --- a/public/images/pokemon/variant/back/female/402.json +++ b/public/images/pokemon/variant/back/female/402.json @@ -2,7 +2,6 @@ "1": { "633100": "272344", "de5a52": "afd3df", - "101010": "101010", "9c4231": "498ebe", "31293a": "592a22", "524a42": "cf8439", @@ -17,7 +16,6 @@ "2": { "633100": "2a545f", "de5a52": "70af85", - "101010": "101010", "9c4231": "2f9378", "31293a": "281c41", "524a42": "453565", diff --git a/public/images/pokemon/variant/back/female/407.json b/public/images/pokemon/variant/back/female/407.json index 55de95a3105..8edb2911c7e 100644 --- a/public/images/pokemon/variant/back/female/407.json +++ b/public/images/pokemon/variant/back/female/407.json @@ -5,7 +5,6 @@ "739c8c": "bb9b89", "ffffff": "fff1cb", "d6cede": "e1bf95", - "000000": "000000", "7b3a5a": "9c5910", "ff6384": "efc754", "bd426b": "d28f31", @@ -22,15 +21,11 @@ "739c8c": "a199cd", "ffffff": "fcf8ff", "d6cede": "d6c7e6", - "000000": "000000", "7b3a5a": "18585e", "ff6384": "83e4d0", "bd426b": "55b9af", "3a9c63": "764f9c", "f7d64a": "e17641", - "424a84": "424a84", - "4a5abd": "4a5abd", - "5273ef": "5273ef", "a5e6ad": "ebe6fd" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/41.json b/public/images/pokemon/variant/back/female/41.json index 87c18df01ac..8d7350c81ce 100644 --- a/public/images/pokemon/variant/back/female/41.json +++ b/public/images/pokemon/variant/back/female/41.json @@ -1,24 +1,18 @@ { "1": { - "101010": "101010", "8cb5ef": "4e538f", "4a427b": "14093b", "637bb5": "37326f", "73215a": "aa4c18", "b5529c": "cc7b32", - "bdceff": "868ecc", - "ffffff": "ffffff", - "636363": "636363" + "bdceff": "868ecc" }, "2": { - "101010": "101010", "8cb5ef": "cbabca", "4a427b": "4d3259", "637bb5": "916c8b", "73215a": "670f10", "b5529c": "94241c", - "bdceff": "e8d2e6", - "ffffff": "ffffff", - "636363": "636363" + "bdceff": "e8d2e6" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/419.json b/public/images/pokemon/variant/back/female/419.json index 3202d442933..197a8b33e18 100644 --- a/public/images/pokemon/variant/back/female/419.json +++ b/public/images/pokemon/variant/back/female/419.json @@ -2,17 +2,13 @@ "1": { "7b4221": "611b35", "ef7b19": "9c354f", - "191919": "191919", "ce6b19": "851d3e", "ad5a21": "7d1e39", "cebd84": "cea49d", "f7f7b5": "e8d4cc", "99693c": "6a808c", - "6b6b6b": "6b6b6b", "e6a531": "a0b3ba", "ffde00": "d2e5e8", - "d6d6ce": "d6d6ce", - "ffffff": "ffffff", "c59452": "995e5c", "2163a5": "385e11", "63bde6": "6a9539" @@ -20,7 +16,6 @@ "2": { "7b4221": "9e6a86", "ef7b19": "debfc8", - "191919": "191919", "ce6b19": "dca5b5", "ad5a21": "cd91aa", "cebd84": "965080", @@ -29,8 +24,6 @@ "6b6b6b": "726481", "e6a531": "d4812f", "ffde00": "eda342", - "d6d6ce": "d6d6ce", - "ffffff": "ffffff", "c59452": "672e5d", "2163a5": "4b2a70", "63bde6": "744d99" diff --git a/public/images/pokemon/variant/back/female/42.json b/public/images/pokemon/variant/back/female/42.json index d2be9f7ced5..9fede6848a8 100644 --- a/public/images/pokemon/variant/back/female/42.json +++ b/public/images/pokemon/variant/back/female/42.json @@ -5,7 +5,6 @@ "adceff": "666fb4", "5aadef": "3d4381", "631052": "892d03", - "000000": "000000", "ce6bb5": "f1a139", "ad52ad": "d5711b", "943a7b": "af4e0c" @@ -16,7 +15,6 @@ "adceff": "e8d2e6", "5aadef": "cbabca", "631052": "54070c", - "000000": "000000", "ce6bb5": "bc3b1d", "ad52ad": "94241c", "943a7b": "6c1314" diff --git a/public/images/pokemon/variant/back/female/424.json b/public/images/pokemon/variant/back/female/424.json index c0e9356a7a4..6a111ce9829 100644 --- a/public/images/pokemon/variant/back/female/424.json +++ b/public/images/pokemon/variant/back/female/424.json @@ -3,7 +3,6 @@ "734a42": "415c73", "ad5242": "428dad", "ff735a": "5ae9ff", - "101010": "101010", "8c6b42": "8c7457", "debd73": "c4b487", "ffefa5": "ffeccc", @@ -16,7 +15,6 @@ "734a42": "593802", "ad5242": "946212", "ff735a": "ffb338", - "101010": "101010", "8c6b42": "632339", "debd73": "99455d", "ffefa5": "ed8286", diff --git a/public/images/pokemon/variant/back/female/44.json b/public/images/pokemon/variant/back/female/44.json index c3e5290e2a9..1ffdc2c917a 100644 --- a/public/images/pokemon/variant/back/female/44.json +++ b/public/images/pokemon/variant/back/female/44.json @@ -3,7 +3,6 @@ "c57329": "0f7469", "8c3a19": "043d44", "5a2900": "162486", - "101010": "101010", "ce734a": "7aa8d2", "ffbd42": "55bb7e", "ad523a": "4d75b6", @@ -17,8 +16,6 @@ "2": { "c57329": "9f631f", "8c3a19": "773811", - "5a2900": "5a2900", - "101010": "101010", "ce734a": "d98247", "ffbd42": "e8d65e", "ad523a": "bd4e2d", diff --git a/public/images/pokemon/variant/back/female/443.json b/public/images/pokemon/variant/back/female/443.json index 4a65daecb4b..c2154751658 100644 --- a/public/images/pokemon/variant/back/female/443.json +++ b/public/images/pokemon/variant/back/female/443.json @@ -5,11 +5,6 @@ "314252": "082963", "8cc5d6": "42a5f7", "5294ad": "1984c5", - "42d6de": "42d6de", - "3aadc5": "3aadc5", - "ffffff": "ffffff", - "c5ced6": "c5ced6", - "5a6363": "5a6363", "ad3a10": "a57c10", "de5a29": "e6c529", "7b1910": "731029" @@ -22,9 +17,6 @@ "5294ad": "905647", "42d6de": "54b0ff", "3aadc5": "2878e1", - "ffffff": "ffffff", - "c5ced6": "c5ced6", - "5a6363": "5a6363", "ad3a10": "92a9b2", "de5a29": "d9f0f1", "7b1910": "731029" @@ -37,9 +29,6 @@ "5294ad": "4c5e66", "42d6de": "6fe6a3", "3aadc5": "23b8a8", - "ffffff": "ffffff", - "c5ced6": "c5ced6", - "5a6363": "5a6363", "ad3a10": "92a9b2", "de5a29": "d9f0f1", "7b1910": "3e3a52" diff --git a/public/images/pokemon/variant/back/female/444.json b/public/images/pokemon/variant/back/female/444.json index 287f0c4050c..d502b2387a6 100644 --- a/public/images/pokemon/variant/back/female/444.json +++ b/public/images/pokemon/variant/back/female/444.json @@ -11,10 +11,7 @@ "5a1000": "502209", "ffff19": "fa845a", "ad314a": "ad7b08", - "c5ced6": "c5ced6", - "de5a29": "f7b834", - "ffffff": "ffffff", - "737b84": "737b84" + "de5a29": "f7b834" }, "1": { "3a4a8c": "6f3633", @@ -28,10 +25,7 @@ "5a1000": "211e33", "ffff19": "ffd177", "ad314a": "829ca6", - "c5ced6": "c5ced6", - "de5a29": "c2dedf", - "ffffff": "ffffff", - "737b84": "737b84" + "de5a29": "c2dedf" }, "2": { "3a4a8c": "223a4a", @@ -45,9 +39,6 @@ "5a1000": "521000", "ffff19": "62cbff", "ad314a": "be472f", - "c5ced6": "c5ced6", - "de5a29": "ee723e", - "ffffff": "ffffff", - "737b84": "737b84" + "de5a29": "ee723e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/445.json b/public/images/pokemon/variant/back/female/445.json index 41d1e100a96..dc453b93018 100644 --- a/public/images/pokemon/variant/back/female/445.json +++ b/public/images/pokemon/variant/back/female/445.json @@ -4,12 +4,8 @@ "5a63ad": "33719e", "42428c": "1e4b77", "7b7bce": "65a2d5", - "101010": "101010", "c59410": "3aadc5", "ffd619": "42d6de", - "ffffff": "ffffff", - "737b84": "737b84", - "c5ced6": "c5ced6", "bd3a42": "b2630f", "5a1000": "502209", "e64a31": "f7ac34" @@ -19,12 +15,8 @@ "5a63ad": "deae7a", "42428c": "af6e55", "7b7bce": "f2d8aa", - "101010": "101010", "c59410": "255dd7", "ffd619": "4caaff", - "ffffff": "ffffff", - "737b84": "737b84", - "c5ced6": "c5ced6", "bd3a42": "9fb6bf", "5a1000": "393648", "e64a31": "dce8e8" @@ -34,12 +26,8 @@ "5a63ad": "2f434b", "42428c": "152c3b", "7b7bce": "689099", - "101010": "101010", "c59410": "23b8a8", "ffd619": "6fe6a3", - "ffffff": "ffffff", - "737b84": "737b84", - "c5ced6": "c5ced6", "bd3a42": "be472f", "5a1000": "521000", "e64a31": "de5a29" diff --git a/public/images/pokemon/variant/back/female/45.json b/public/images/pokemon/variant/back/female/45.json index b278635e4cc..0af6336f5bf 100644 --- a/public/images/pokemon/variant/back/female/45.json +++ b/public/images/pokemon/variant/back/female/45.json @@ -7,7 +7,6 @@ "f77373": "5e8fde", "de4a5a": "436ac7", "944a00": "472b86", - "101010": "101010", "ff8429": "966fbb", "ce6319": "724ba4", "19294a": "201349", @@ -24,7 +23,6 @@ "f77373": "d2cbb2", "de4a5a": "cdb2a2", "944a00": "621734", - "101010": "101010", "ff8429": "a23d44", "ce6319": "8b293e", "19294a": "510c35", diff --git a/public/images/pokemon/variant/back/female/453.json b/public/images/pokemon/variant/back/female/453.json index 8fab3b26995..f8f06b5808f 100644 --- a/public/images/pokemon/variant/back/female/453.json +++ b/public/images/pokemon/variant/back/female/453.json @@ -4,7 +4,6 @@ "4a4a8c": "701221", "6b73d6": "9e1e23", "849cff": "c45447", - "101010": "101010", "9c3a3a": "d07320", "e6525a": "f2b64c", "ff9ca5": "f7db86", diff --git a/public/images/pokemon/variant/back/female/454.json b/public/images/pokemon/variant/back/female/454.json index c9a44500cec..ef803e87155 100644 --- a/public/images/pokemon/variant/back/female/454.json +++ b/public/images/pokemon/variant/back/female/454.json @@ -1,7 +1,6 @@ { "1": { "3a3a52": "4c0914", - "101010": "101010", "6b73d6": "9e1e23", "4a4a8c": "701221", "849cff": "c45447", diff --git a/public/images/pokemon/variant/back/female/456.json b/public/images/pokemon/variant/back/female/456.json index 5a7072a85e3..88e91daf10d 100644 --- a/public/images/pokemon/variant/back/female/456.json +++ b/public/images/pokemon/variant/back/female/456.json @@ -2,7 +2,6 @@ "1": { "31425a": "b94539", "526b8c": "986259", - "101010": "101010", "426b84": "e2895d", "94d6e6": "f3e1c6", "29293a": "7e2023", @@ -11,14 +10,11 @@ "c54591": "f19e53", "833171": "d3633a", "c54a94": "8bbcd9", - "efffff": "efffff", - "73427b": "688db9", - "15202e": "15202e" + "73427b": "688db9" }, "2": { "31425a": "e89e3d", "526b8c": "162743", - "101010": "101010", "426b84": "fff8b0", "94d6e6": "27616f", "29293a": "b66736", @@ -27,8 +23,6 @@ "c54591": "5fd0a4", "833171": "349b8b", "c54a94": "7b1615", - "efffff": "efffff", - "73427b": "550a16", - "15202e": "15202e" + "73427b": "550a16" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/457.json b/public/images/pokemon/variant/back/female/457.json index d12664b8695..6bb2c6e0efe 100644 --- a/public/images/pokemon/variant/back/female/457.json +++ b/public/images/pokemon/variant/back/female/457.json @@ -1,7 +1,6 @@ { "1": { "526b8c": "966764", - "101010": "101010", "c5e6f7": "fffbf2", "94d6e6": "f3e1c6", "7394ad": "cda38c", @@ -10,14 +9,12 @@ "303449": "812628", "c54591": "ffc369", "9e357b": "c7703c", - "efffff": "efffff", "c54a94": "aadff3", "73427b": "6f75a0", "26344c": "815358" }, "2": { "526b8c": "162743", - "101010": "101010", "c5e6f7": "429b91", "94d6e6": "27616f", "7394ad": "1c405b", @@ -26,7 +23,6 @@ "303449": "d67947", "c54591": "50c2a1", "9e357b": "2e9b8f", - "efffff": "efffff", "c54a94": "983121", "73427b": "7b1213", "26344c": "12223d" diff --git a/public/images/pokemon/variant/back/female/461.json b/public/images/pokemon/variant/back/female/461.json index 71308ceadc5..6414601a8af 100644 --- a/public/images/pokemon/variant/back/female/461.json +++ b/public/images/pokemon/variant/back/female/461.json @@ -3,7 +3,6 @@ "c52973": "3a3d60", "842152": "191a24", "f75273": "636896", - "101010": "101010", "293152": "530b34", "6b6bad": "8b274b", "424a84": "691043", @@ -11,19 +10,16 @@ "ffffff": "ffefb1", "ffd642": "ffb05b", "6b637b": "985d45", - "c5bdce": "cca075", - "8c2931": "8c2931" + "c5bdce": "cca075" }, "2": { "c52973": "3d81c5", "842152": "102f6c", "f75273": "5cb0eb", - "101010": "101010", "293152": "96543f", "6b6bad": "ffd3a7", "424a84": "ecaa84", "c58c08": "8f1a8d", - "ffffff": "ffffff", "ffd642": "e6509f", "6b637b": "718198", "c5bdce": "b3cedb", diff --git a/public/images/pokemon/variant/back/female/464.json b/public/images/pokemon/variant/back/female/464.json index 9479b6f2ebf..10c18fa20e9 100644 --- a/public/images/pokemon/variant/back/female/464.json +++ b/public/images/pokemon/variant/back/female/464.json @@ -5,15 +5,9 @@ "ef5200": "6f4d9f", "29293a": "1f1028", "3a3a4a": "3b2d40", - "101010": "101010", "7b6b7b": "6e5d7b", - "6b6373": "6b6373", - "cecede": "cecede", - "efefff": "efefff", "5a4a63": "514259", - "948cad": "948cad", - "943a00": "4c2f6e", - "ad2900": "ad2900" + "943a00": "4c2f6e" }, "2": { "523100": "492133", @@ -21,7 +15,6 @@ "ef5200": "6d3950", "29293a": "442339", "3a3a4a": "701f38", - "101010": "101010", "7b6b7b": "c6405b", "6b6373": "b66360", "cecede": "e8a797", diff --git a/public/images/pokemon/variant/back/female/465.json b/public/images/pokemon/variant/back/female/465.json index ed257655add..fec2a63f634 100644 --- a/public/images/pokemon/variant/back/female/465.json +++ b/public/images/pokemon/variant/back/female/465.json @@ -3,10 +3,8 @@ "193a63": "391963", "295a84": "472984", "3a73ad": "6b3aad", - "000000": "000000", "5a193a": "195a2a", "bd216b": "21bd69", - "31313a": "31313a", "d65a94": "5ad662" }, "2": { diff --git a/public/images/pokemon/variant/back/female/592.json b/public/images/pokemon/variant/back/female/592.json index eaaa9cf38ea..a7f086924bd 100644 --- a/public/images/pokemon/variant/back/female/592.json +++ b/public/images/pokemon/variant/back/female/592.json @@ -1,29 +1,23 @@ { "0": { "7b3a52": "622a1e", - "101010": "101010", "ffdee6": "ffe7df", "d6b5bd": "f2bba3", "bd84a5": "eb8b4d", - "ffb5d6": "ffb868", - "ffffff": "ffffff" + "ffb5d6": "ffb868" }, "1": { "7b3a52": "302a85", - "101010": "101010", "ffdee6": "e3deff", "d6b5bd": "9d92ce", "bd84a5": "5052c1", - "ffb5d6": "6270e3", - "ffffff": "ffffff" + "ffb5d6": "6270e3" }, "2": { "7b3a52": "4e1b55", - "101010": "101010", "ffdee6": "a65ea3", "d6b5bd": "703573", "bd84a5": "efacd1", - "ffb5d6": "ffdbec", - "ffffff": "ffffff" + "ffb5d6": "ffdbec" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/593.json b/public/images/pokemon/variant/back/female/593.json index 6f954902f10..af86de4b02e 100644 --- a/public/images/pokemon/variant/back/female/593.json +++ b/public/images/pokemon/variant/back/female/593.json @@ -1,7 +1,6 @@ { "0": { "7b3a52": "622a1e", - "101010": "101010", "ffdef7": "ffe7df", "c5a5bd": "f2bba3", "d684b5": "eb8b4d", @@ -9,7 +8,6 @@ }, "1": { "7b3a52": "302a85", - "101010": "101010", "ffdef7": "e3deff", "c5a5bd": "aba5c5", "d684b5": "4c4eb7", @@ -17,7 +15,6 @@ }, "2": { "7b3a52": "4e1b55", - "101010": "101010", "ffdef7": "a65ea3", "c5a5bd": "703573", "d684b5": "efacd1", diff --git a/public/images/pokemon/variant/back/female/6215.json b/public/images/pokemon/variant/back/female/6215.json index 741d6ddc0bb..db99eb822bf 100644 --- a/public/images/pokemon/variant/back/female/6215.json +++ b/public/images/pokemon/variant/back/female/6215.json @@ -6,12 +6,9 @@ "9c9bce": "ae8976", "514a80": "402010", "dcdbf7": "d0b3a4", - "080808": "080808", "28234b": "220d0a", "7d6ca4": "853a36", "584d80": "562627", - "f6f6ff": "f6f6ff", - "bdbdc5": "bdbdc5", "c52973": "ea903f" }, "2": { @@ -21,12 +18,9 @@ "9c9bce": "3c8775", "514a80": "14273a", "dcdbf7": "60ae7e", - "080808": "080808", "28234b": "0a191e", "7d6ca4": "395962", "584d80": "1c3942", - "f6f6ff": "f6f6ff", - "bdbdc5": "bdbdc5", "c52973": "f49633" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/84.json b/public/images/pokemon/variant/back/female/84.json index 2cb87a3cd28..2b665f3b48c 100644 --- a/public/images/pokemon/variant/back/female/84.json +++ b/public/images/pokemon/variant/back/female/84.json @@ -3,10 +3,7 @@ "523a19": "1b4e31", "946b5a": "3a8951", "bd8c52": "65bf75", - "636363": "636363", "dead73": "a5e6a0", - "ffffff": "ffffff", - "101010": "101010", "a5844a": "bba689", "635210": "7a614c", "efdead": "ece4ce", @@ -16,10 +13,7 @@ "523a19": "4e0d2f", "946b5a": "762141", "bd8c52": "9b374e", - "636363": "636363", "dead73": "c35d6a", - "ffffff": "ffffff", - "101010": "101010", "a5844a": "af85a2", "635210": "4a2240", "efdead": "e7cedb", @@ -29,10 +23,7 @@ "523a19": "2e4c6c", "946b5a": "5f92aa", "bd8c52": "7abcc7", - "636363": "636363", "dead73": "b0ebed", - "ffffff": "ffffff", - "101010": "101010", "a5844a": "4a1e41", "635210": "391435", "efdead": "884b71", diff --git a/public/images/pokemon/variant/back/female/85.json b/public/images/pokemon/variant/back/female/85.json index 4499daf9608..ebf7e226b8b 100644 --- a/public/images/pokemon/variant/back/female/85.json +++ b/public/images/pokemon/variant/back/female/85.json @@ -1,16 +1,11 @@ { "0": { - "424242": "424242", - "848484": "848484", - "000000": "000000", "5a4221": "1b4e31", "a57b5a": "3a8951", "ce9c52": "65bf75", "635a42": "7a614c", "efdead": "ece4ce", - "ffffff": "ffffff", "b5a57b": "bba689", - "d6cece": "d6cece", "b54242": "1a265f", "ffd6e6": "7fbdd1", "f784a5": "3a6c97" @@ -18,15 +13,12 @@ "1": { "424242": "1c1d49", "848484": "2e3260", - "000000": "000000", "5a4221": "4e0d2f", "a57b5a": "762141", "ce9c52": "9b374e", "635a42": "4a2240", "efdead": "e7cedb", - "ffffff": "ffffff", "b5a57b": "af85a2", - "d6cece": "d6cece", "b54242": "4e276f", "ffd6e6": "a668ba", "f784a5": "784496" @@ -34,15 +26,12 @@ "2": { "424242": "621e2a", "848484": "973d41", - "000000": "000000", "5a4221": "2e4c6c", "a57b5a": "6a9dbf", "ce9c52": "94d1db", "635a42": "391436", "efdead": "784766", - "ffffff": "ffffff", "b5a57b": "54284b", - "d6cece": "d6cece", "b54242": "6d1b55", "ffd6e6": "e882a5", "f784a5": "a5397a" diff --git a/public/images/pokemon/variant/exp/1001.json b/public/images/pokemon/variant/exp/1001.json index e85b345ed2b..5de76f31c04 100644 --- a/public/images/pokemon/variant/exp/1001.json +++ b/public/images/pokemon/variant/exp/1001.json @@ -3,7 +3,6 @@ "505551": "754e3b", "b8bebd": "ebe6c0", "313430": "4f2711", - "0f0f0f": "0f0f0f", "7e615a": "1f1e1c", "48492e": "0a0907", "a28b76": "383734", @@ -13,17 +12,12 @@ "524a36": "6e4105", "b99c60": "e2a845", "7b7253": "b87416", - "f97c20": "a5af8b", - "fdfdfd": "fdfdfd", - "010101": "010101", - "212421": "212421", - "212021": "212021" + "f97c20": "a5af8b" }, "2": { "505551": "322733", "b8bebd": "dbcce8", "313430": "1b101c", - "0f0f0f": "0f0f0f", "7e615a": "e6aec8", "48492e": "9c4b6f", "a28b76": "fce6f0", @@ -33,10 +27,6 @@ "524a36": "420f0f", "b99c60": "bd405d", "7b7253": "5e1b1b", - "f97c20": "f536f5", - "fdfdfd": "fdfdfd", - "010101": "010101", - "212421": "212421", - "212021": "212021" + "f97c20": "f536f5" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/1003.json b/public/images/pokemon/variant/exp/1003.json index b9e73bfb9aa..2dbd7479745 100644 --- a/public/images/pokemon/variant/exp/1003.json +++ b/public/images/pokemon/variant/exp/1003.json @@ -1,6 +1,5 @@ { "1": { - "000000": "000000", "477068": "daa666", "905a20": "655062", "2e4f49": "96562e", @@ -21,7 +20,6 @@ "856e62": "514758" }, "2": { - "000000": "000000", "477068": "8d6acc", "905a20": "57599c", "2e4f49": "6241a1", diff --git a/public/images/pokemon/variant/exp/1004.json b/public/images/pokemon/variant/exp/1004.json index 4a489005a7e..cbbd66b9a4f 100644 --- a/public/images/pokemon/variant/exp/1004.json +++ b/public/images/pokemon/variant/exp/1004.json @@ -2,7 +2,6 @@ "1": { "a23724": "b06f00", "f4342f": "f2b200", - "0f0f0f": "0f0f0f", "f35e38": "ffc81b", "f9824f": "ffe13a", "b15236": "dca300", @@ -14,39 +13,15 @@ "5b985a": "5c71c1", "83b884": "7a9ae0", "3c3f3a": "27276a", - "f8f8f0": "f8f8f0", "548c53": "5acbe0", - "0e0e0e": "0e0e0e", - "6e5e00": "6e5e00", - "1a3b1e": "1a3b1e", "426b41": "3f89b4", - "ffd871": "ffd871", - "ffba02": "ffba02", - "ffce4c": "ffce4c", - "443a00": "443a00", - "ec8d22": "ec8d22", "73af74": "539de0", "ffc938": "ffe49d", - "ffe191": "fffaed", - "857100": "857100", - "ffedbe": "ffedbe", - "524600": "524600", - "4e6e00": "4e6e00", - "e8ff71": "e8ff71", - "d5ff02": "d5ff02", - "e2ff4c": "e2ff4c", - "304400": "304400", - "7a6800": "7a6800", - "ffe39a": "ffe39a", - "ffc21f": "ffc21f", - "4b4000": "4b4000", - "ece622": "ece622", - "ee9b3d": "ee9b3d" + "ffe191": "fffaed" }, "2": { "a23724": "76074d", "f4342f": "a525d3", - "0f0f0f": "0f0f0f", "f35e38": "3449f6", "f9824f": "49c9f6", "b15236": "7642bd", @@ -58,33 +33,16 @@ "5b985a": "b09f97", "83b884": "d7cbb5", "3c3f3a": "4b4444", - "f8f8f0": "f8f8f0", "548c53": "e5c468", - "0e0e0e": "0e0e0e", - "6e5e00": "6e5e00", "1a3b1e": "420202", "426b41": "bda10a", - "ffd871": "ffd871", - "ffba02": "ffba02", - "ffce4c": "ffce4c", - "443a00": "443a00", - "ec8d22": "ec8d22", "73af74": "b48910", "ffc938": "ff8e70", "ffe191": "ffb3aa", - "857100": "857100", - "ffedbe": "ffedbe", - "524600": "524600", "4e6e00": "a34b0b", "e8ff71": "ffd0ae", "d5ff02": "ffb47d", "e2ff4c": "ff8374", - "304400": "440000", - "7a6800": "7a6800", - "ffe39a": "ffe39a", - "ffc21f": "ffc21f", - "4b4000": "4b4000", - "ece622": "ece622", - "ee9b3d": "ee9b3d" + "304400": "440000" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/1006.json b/public/images/pokemon/variant/exp/1006.json index 3fd7c511936..4e329152f01 100644 --- a/public/images/pokemon/variant/exp/1006.json +++ b/public/images/pokemon/variant/exp/1006.json @@ -1,7 +1,6 @@ { "2": { "37522e": "2a224e", - "000000": "000000", "456539": "2a224e", "4b9080": "3e2d63", "456639": "2a224e", diff --git a/public/images/pokemon/variant/exp/1008-ultimate-mode.json b/public/images/pokemon/variant/exp/1008-ultimate-mode.json index 2301e19c8e6..90b682218e9 100644 --- a/public/images/pokemon/variant/exp/1008-ultimate-mode.json +++ b/public/images/pokemon/variant/exp/1008-ultimate-mode.json @@ -1,18 +1,10 @@ { "0": { "0697ee": "8955b5", - "ffffff": "ffffff", "aaa8db": "7fd8cf", - "39ace3": "39ace3", - "9c97bd": "9c97bd", - "aca7c7": "aca7c7", "f7ec83": "427eff", - "000000": "000000", "635e7b": "5c4370", - "494e5f": "494e5f", - "7e738c": "7e738c", "1c174e": "393a3e", - "e1e0e9": "e1e0e9", "2f329f": "858585", "765cc2": "c8c8c8" }, @@ -20,13 +12,10 @@ "0697ee": "31808e", "ffffff": "ffffc9", "aaa8db": "ade263", - "39ace3": "39ace3", "9c97bd": "7d8ace", "aca7c7": "89a5ff", "f7ec83": "2cc151", - "000000": "000000", "635e7b": "3b5c63", - "494e5f": "494e5f", "7e738c": "626b94", "1c174e": "252e42", "e1e0e9": "b7d8ff", @@ -41,10 +30,6 @@ "9c97bd": "aa88a1", "aca7c7": "ad9e9d", "f7ec83": "cc5767", - "000000": "000000", - "635e7b": "635e7b", - "494e5f": "494e5f", - "7e738c": "7e738c", "1c174e": "192142", "e1e0e9": "e0e0e0", "2f329f": "2a3768", diff --git a/public/images/pokemon/variant/exp/127-mega.json b/public/images/pokemon/variant/exp/127-mega.json index d23b5071423..4ba25f9f216 100644 --- a/public/images/pokemon/variant/exp/127-mega.json +++ b/public/images/pokemon/variant/exp/127-mega.json @@ -3,34 +3,24 @@ "837362": "7e5649", "eee6cd": "eccb90", "d5c5b4": "d29f88", - "000000": "000000", "b4a494": "b1846f", "4a4139": "441a0f", - "ae5a05": "ae5a05", - "eb8823": "eb8823", "5a4131": "172a22", "c5ac8b": "72988e", "836a52": "3b554d", "a48b6a": "54796f", - "e6d5b4": "92bab1", - "fffd79": "fffd79", - "ffffff": "ffffff" + "e6d5b4": "92bab1" }, "2": { "837362": "868686", "eee6cd": "ffffff", "d5c5b4": "d5d5d5", - "000000": "000000", "b4a494": "b7b7b7", "4a4139": "484848", - "ae5a05": "ae5a05", - "eb8823": "eb8823", "5a4131": "5c0026", "c5ac8b": "d56a70", "836a52": "8c2c40", "a48b6a": "b44954", - "e6d5b4": "fa958c", - "fffd79": "fffd79", - "ffffff": "ffffff" + "e6d5b4": "fa958c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/181-mega.json b/public/images/pokemon/variant/exp/181-mega.json index 43ab28dd603..52125fd3653 100644 --- a/public/images/pokemon/variant/exp/181-mega.json +++ b/public/images/pokemon/variant/exp/181-mega.json @@ -2,7 +2,6 @@ "1": { "626a6a": "58341f", "ffffff": "ffe8b2", - "101010": "101010", "c54100": "e28f09", "b4b4bd": "e5c079", "e6e6e6": "ffe8b2", @@ -17,7 +16,6 @@ "2": { "626a6a": "5d412a", "ffffff": "fff1d0", - "101010": "101010", "c54100": "d26b00", "b4b4bd": "ebbb78", "e6e6e6": "fff1d0", diff --git a/public/images/pokemon/variant/exp/2027.json b/public/images/pokemon/variant/exp/2027.json index 1bf950569fb..2aec1f8d221 100644 --- a/public/images/pokemon/variant/exp/2027.json +++ b/public/images/pokemon/variant/exp/2027.json @@ -1,10 +1,8 @@ { "1": { "354e73": "752e42", - "fefefe": "fefefe", "b6dbe7": "ffdac2", "84b3ce": "d27c80", - "101010": "101010", "518d9f": "a24c68", "10397b": "212d55", "cdbe85": "d3d3c6", @@ -13,10 +11,8 @@ }, "2": { "354e73": "3d2c78", - "fefefe": "fefefe", "b6dbe7": "dbb1eb", "84b3ce": "a87bcf", - "101010": "101010", "518d9f": "6a439e", "10397b": "1d6268", "cdbe85": "44225a", diff --git a/public/images/pokemon/variant/exp/2028.json b/public/images/pokemon/variant/exp/2028.json index 36887e3f321..3ef67aec065 100644 --- a/public/images/pokemon/variant/exp/2028.json +++ b/public/images/pokemon/variant/exp/2028.json @@ -1,7 +1,6 @@ { "1": { "3c88b4": "966281", - "101010": "101010", "ffffff": "fffffc", "52b0cf": "e2877b", "b0e5f8": "fffed9", @@ -13,12 +12,10 @@ "8c8c8c": "8d6e6f", "525252": "6f525d", "bdbdcd": "d0c0b6", - "606060": "4f364c", - "f1f1f4": "f1f1f4" + "606060": "4f364c" }, "2": { "3c88b4": "515fa9", - "101010": "101010", "ffffff": "e3f0ff", "52b0cf": "57a5c5", "b0e5f8": "f8f5b0", diff --git a/public/images/pokemon/variant/exp/2052.json b/public/images/pokemon/variant/exp/2052.json index 31ff32696b8..d33bed4ace9 100644 --- a/public/images/pokemon/variant/exp/2052.json +++ b/public/images/pokemon/variant/exp/2052.json @@ -1,11 +1,9 @@ { "1": { "45505f": "8c583b", - "0a0a0a": "0a0a0a", "91a3bf": "ffda5c", "262b3c": "41185e", "995433": "493473", - "f3f3f3": "f3f3f3", "e3cc2b": "a66db5", "ca833c": "7a519a", "798071": "7a4888", @@ -15,11 +13,9 @@ }, "2": { "45505f": "271420", - "0a0a0a": "0a0a0a", "91a3bf": "7c4e42", "262b3c": "1d1b33", "995433": "45328e", - "f3f3f3": "f3f3f3", "e3cc2b": "b5b8f9", "ca833c": "7b7fda", "798071": "5f5c7e", diff --git a/public/images/pokemon/variant/exp/2053.json b/public/images/pokemon/variant/exp/2053.json index 6968f2f227c..7639601cd00 100644 --- a/public/images/pokemon/variant/exp/2053.json +++ b/public/images/pokemon/variant/exp/2053.json @@ -1,13 +1,11 @@ { "1": { - "000000": "000000", "545968": "65352c", "ced6ee": "ffda5c", "a5adc7": "e89b4b", "847f8a": "592d7a", "c2bdc7": "8a519a", "02b0e3": "6945aa", - "ffffff": "ffffff", "5dc7e5": "9d67d8", "0a6079": "2e2575", "7b7ba8": "7c488a", diff --git a/public/images/pokemon/variant/exp/212-mega.json b/public/images/pokemon/variant/exp/212-mega.json index e53c2924659..146a43bc59a 100644 --- a/public/images/pokemon/variant/exp/212-mega.json +++ b/public/images/pokemon/variant/exp/212-mega.json @@ -1,43 +1,23 @@ { "0": { "622929": "215a2d", - "000000": "000000", "f66a6a": "8cce73", "d53939": "4a9c53", - "a42929": "2f794e", - "404052": "404052", - "ffffff": "ffffff", - "717186": "717186", - "2b2b38": "2b2b38", - "b4b4cd": "b4b4cd", - "1083a2": "1083a2", - "2cabcc": "2cabcc" + "a42929": "2f794e" }, "1": { "622929": "2f2962", - "000000": "000000", "f66a6a": "639cf7", "d53939": "4263ef", - "a42929": "29429c", - "404052": "404052", - "ffffff": "ffffff", - "717186": "717186", - "2b2b38": "2b2b38", - "b4b4cd": "b4b4cd", - "1083a2": "1083a2", - "2cabcc": "2cabcc" + "a42929": "29429c" }, "2": { "622929": "645117", - "000000": "000000", "f66a6a": "c59f29", "d53939": "ffca2a", "a42929": "b88619", "404052": "282d2c", - "ffffff": "ffffff", "717186": "3c4543", - "2b2b38": "2b2b38", - "b4b4cd": "b4b4cd", "1083a2": "645117", "2cabcc": "f4e920" } diff --git a/public/images/pokemon/variant/exp/229-mega.json b/public/images/pokemon/variant/exp/229-mega.json index 1cc9a9fe878..a2c95914e2a 100644 --- a/public/images/pokemon/variant/exp/229-mega.json +++ b/public/images/pokemon/variant/exp/229-mega.json @@ -2,7 +2,6 @@ "1": { "83738b": "7c323c", "ffffff": "f3bd87", - "000000": "000000", "cdd5d5": "c87966", "a49cac": "a84b50", "182029": "321b32", @@ -11,19 +10,14 @@ "a45a4a": "ceb0a5", "313139": "553454", "6a211f": "314075", - "c5cdd1": "c5cdd1", "ce0a10": "455d92", - "f8f9ff": "f8f9ff", "622910": "77545b", - "e2e0e3": "e2e0e3", - "b6aabc": "b6aabc", "732422": "856458", "af1b1b": "aa8c82" }, "2": { "83738b": "100f27", "ffffff": "5c8d95", - "000000": "000000", "cdd5d5": "38576c", "a49cac": "223657", "182029": "321b32", @@ -36,8 +30,6 @@ "ce0a10": "e58142", "f8f9ff": "223657", "622910": "311f3a", - "e2e0e3": "e2e0e3", - "b6aabc": "b6aabc", "732422": "423655", "af1b1b": "534b6a" } diff --git a/public/images/pokemon/variant/exp/248-mega.json b/public/images/pokemon/variant/exp/248-mega.json index 0a46ac40a4a..4f62567bc40 100644 --- a/public/images/pokemon/variant/exp/248-mega.json +++ b/public/images/pokemon/variant/exp/248-mega.json @@ -1,34 +1,34 @@ { "1": { -"4a5a39": "533334", -"821610": "004194", -"942900": "004194", -"d0243b": "006fb3", -"d55200": "0098fc", -"ff3e40": "0098fc", -"f24159": "088a72", -"f55e72": "18b8a0", -"ff6668": "1cd9ff", -"739c62": "915957", -"ff8385": "00e0fc", -"ffa3a4": "00ffc8", -"accd9c": "c78482", -"dee6cd": "dbb1b5" + "4a5a39": "533334", + "821610": "004194", + "942900": "004194", + "d0243b": "006fb3", + "d55200": "0098fc", + "ff3e40": "0098fc", + "f24159": "088a72", + "f55e72": "18b8a0", + "ff6668": "1cd9ff", + "739c62": "915957", + "ff8385": "00e0fc", + "ffa3a4": "00ffc8", + "accd9c": "c78482", + "dee6cd": "dbb1b5" }, "2": { -"4a5a39": "06092f", -"821610": "ee7b06", -"942900": "ee7b06", -"d0243b": "ffa904", -"d55200": "ffa904", -"ff3e40": "ffef76", -"f24159": "ffbf44", -"f55e72": "ffd380", -"ff6668": "fef3a1", -"739c62": "2c3071", -"ff8385": "fff8c1", -"ffa3a4": "fffbdd", -"accd9c": "625695", -"dee6cd": "7068b2" + "4a5a39": "06092f", + "821610": "ee7b06", + "942900": "ee7b06", + "d0243b": "ffa904", + "d55200": "ffa904", + "ff3e40": "ffef76", + "f24159": "ffbf44", + "f55e72": "ffd380", + "ff6668": "fef3a1", + "739c62": "2c3071", + "ff8385": "fff8c1", + "ffa3a4": "fffbdd", + "accd9c": "625695", + "dee6cd": "7068b2" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/257-mega.json b/public/images/pokemon/variant/exp/257-mega.json index 0da37a3799f..ac22ad976ce 100644 --- a/public/images/pokemon/variant/exp/257-mega.json +++ b/public/images/pokemon/variant/exp/257-mega.json @@ -1,7 +1,6 @@ { "1": { "62524a": "3b3f61", - "000000": "000000", "832929": "9b422a", "bdb494": "a8c7da", "dedeb4": "f0fbff", @@ -20,7 +19,6 @@ }, "2": { "62524a": "5b143d", - "000000": "000000", "832929": "9c7c70", "bdb494": "a1304d", "dedeb4": "bc474d", diff --git a/public/images/pokemon/variant/exp/302-mega.json b/public/images/pokemon/variant/exp/302-mega.json index 733407fd959..862f7fb8997 100644 --- a/public/images/pokemon/variant/exp/302-mega.json +++ b/public/images/pokemon/variant/exp/302-mega.json @@ -4,7 +4,6 @@ "7b0000": "590752", "9e0d1a": "590752", "ff94ac": "ff8fcf", - "000000": "000000", "5a4a94": "416a3d", "ee4554": "c72c9c", "393952": "123812", @@ -18,7 +17,6 @@ "7b0000": "192077", "9e0d1a": "192077", "ff94ac": "61d6f2", - "000000": "000000", "5a4a94": "7e141c", "ee4554": "185da6", "393952": "580a16", diff --git a/public/images/pokemon/variant/exp/303-mega.json b/public/images/pokemon/variant/exp/303-mega.json index 7a025fedf32..30b63d73c46 100644 --- a/public/images/pokemon/variant/exp/303-mega.json +++ b/public/images/pokemon/variant/exp/303-mega.json @@ -1,34 +1,26 @@ { "1": { - "000000": "000000", "737373": "347c7d", "4a4a4a": "193e49", "7b5a29": "6b5424", "984868": "b43929", "ffc55a": "d6c491", - "ffffff": "ffffff", - "cdcdcd": "cdcdcd", "9ca494": "4fa285", "b86088": "ff625a", "de9441": "a99372", - "484848": "484848", "9c4a6a": "23445e", "732041": "162843", "bd628b": "397189" }, "2": { - "000000": "000000", "737373": "9d7cd6", "4a4a4a": "2f2781", "7b5a29": "706d80", "984868": "b43929", "ffc55a": "cfc8e4", - "ffffff": "ffffff", - "cdcdcd": "cdcdcd", "9ca494": "c7a8eb", "b86088": "ff625a", "de9441": "b1a3ca", - "484848": "484848", "9c4a6a": "4c3767", "732041": "2b1c3f", "bd628b": "694c84" diff --git a/public/images/pokemon/variant/exp/306-mega.json b/public/images/pokemon/variant/exp/306-mega.json index 40575898b93..5a9936478d2 100644 --- a/public/images/pokemon/variant/exp/306-mega.json +++ b/public/images/pokemon/variant/exp/306-mega.json @@ -10,9 +10,7 @@ "838394": "a48d76", "a4a4ac": "bca88c", "6abdff": "ff78fa", - "acacac": "69ad6c", - "9c3141": "9c3141", - "de5252": "de5252" + "acacac": "69ad6c" }, "1": { "000000": "101010", @@ -40,8 +38,6 @@ "838394": "833d19", "a4a4ac": "a45f34", "6abdff": "2aebcf", - "acacac": "7d95bf", - "9c3141": "9c3141", - "de5252": "de5252" + "acacac": "7d95bf" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/334-mega.json b/public/images/pokemon/variant/exp/334-mega.json index 0fafc15e556..16a61dd68d9 100644 --- a/public/images/pokemon/variant/exp/334-mega.json +++ b/public/images/pokemon/variant/exp/334-mega.json @@ -10,7 +10,6 @@ "283858": "771743", "1098c8": "cb457d", "98d8f8": "f3719a", - "101010": "101010", "000000": "101010", "4a6294": "771743", "109ccd": "cb457d" diff --git a/public/images/pokemon/variant/exp/354-mega.json b/public/images/pokemon/variant/exp/354-mega.json index 9e9c1b14f13..b7968016e9c 100644 --- a/public/images/pokemon/variant/exp/354-mega.json +++ b/public/images/pokemon/variant/exp/354-mega.json @@ -3,7 +3,6 @@ "523900": "361a2d", "d59c39": "7d656d", "393141": "431b40", - "000000": "000000", "5a5262": "6c2f4c", "7b5a29": "624858", "eebd5a": "b78d90", @@ -11,16 +10,13 @@ "8d859b": "b0697b", "913e5f": "37838b", "c44a8d": "73bdbd", - "e7e1ea": "e7e1ea", "ce92c8": "b6f0f7", - "512843": "1c4d5d", - "ffffff": "ffffff" + "512843": "1c4d5d" }, "2": { "523900": "151433", "d59c39": "3b3d54", "393141": "3b5d62", - "000000": "000000", "5a5262": "71a680", "7b5a29": "292941", "eebd5a": "4d4f5b", @@ -28,9 +24,7 @@ "8d859b": "b6d192", "913e5f": "751a1c", "c44a8d": "983226", - "e7e1ea": "e7e1ea", "ce92c8": "d1dcaa", - "512843": "4f0209", - "ffffff": "ffffff" + "512843": "4f0209" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/362-mega.json b/public/images/pokemon/variant/exp/362-mega.json index 3b6e39436e6..b3f4144f46f 100644 --- a/public/images/pokemon/variant/exp/362-mega.json +++ b/public/images/pokemon/variant/exp/362-mega.json @@ -1,4 +1,5 @@ -{"1": { +{ + "1": { "010101": "000000", "2b74a8": "84073c", "bbeeff": "f9383e", @@ -16,7 +17,6 @@ "20315e": "460025" }, "2": { - "010101": "010101", "2b74a8": "0c4b3a", "bbeeff": "5ce11a", "393941": "221315", diff --git a/public/images/pokemon/variant/exp/373-mega.json b/public/images/pokemon/variant/exp/373-mega.json index 6500192a0f6..d898320c8b9 100644 --- a/public/images/pokemon/variant/exp/373-mega.json +++ b/public/images/pokemon/variant/exp/373-mega.json @@ -4,18 +4,12 @@ "ce465e": "4572a2", "b83147": "1c4076", "a12a2f": "132760", - "000000": "000000", "2a547a": "6c2d13", "2b87c5": "d28943", "58b3da": "efb660", "2a729a": "a45f28", "ccbc26": "61caf7", "e6e85b": "96e9ff", - "cb3f51": "cb3f51", - "eeeeee": "eeeeee", - "832041": "832041", - "d95b6b": "d95b6b", - "768787": "768787", "a5a594": "f1dbc0", "dfdfd2": "fff8ec" }, @@ -24,17 +18,12 @@ "ce465e": "fff9e5", "b83147": "e5ddcb", "a12a2f": "baae9b", - "000000": "000000", "2a547a": "300926", "2b87c5": "71184e", "58b3da": "8a3562", "2a729a": "3f0f31", "ccbc26": "d56e1d", "e6e85b": "ffaf4a", - "cb3f51": "cb3f51", - "eeeeee": "eeeeee", - "832041": "832041", - "d95b6b": "d95b6b", "768787": "3d0a1d", "a5a594": "591126", "dfdfd2": "781c30" diff --git a/public/images/pokemon/variant/exp/376-mega.json b/public/images/pokemon/variant/exp/376-mega.json index cdcc4794df3..f8043aade9a 100644 --- a/public/images/pokemon/variant/exp/376-mega.json +++ b/public/images/pokemon/variant/exp/376-mega.json @@ -3,7 +3,6 @@ "736a73": "703b08", "313962": "550611", "4a83c5": "bf2e2d", - "101010": "101010", "948b94": "a76911", "416294": "851421", "acacac": "a76911", @@ -20,7 +19,6 @@ "736a73": "6f2c17", "313962": "0b3739", "4a83c5": "41b4a1", - "101010": "101010", "948b94": "9f4219", "416294": "1e716e", "acacac": "9f4219", diff --git a/public/images/pokemon/variant/exp/380-mega.json b/public/images/pokemon/variant/exp/380-mega.json index aedcc39909c..667d83b2203 100644 --- a/public/images/pokemon/variant/exp/380-mega.json +++ b/public/images/pokemon/variant/exp/380-mega.json @@ -27,4 +27,4 @@ "cda44a": "dd6800", "cd4a52": "dd6800" } -} +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/381-mega.json b/public/images/pokemon/variant/exp/381-mega.json index bb5b7cffd0b..872cc0e5cc3 100644 --- a/public/images/pokemon/variant/exp/381-mega.json +++ b/public/images/pokemon/variant/exp/381-mega.json @@ -27,4 +27,4 @@ "62004a": "9344b8", "cd4a52": "70309f" } -} +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/382-primal.json b/public/images/pokemon/variant/exp/382-primal.json index 4fce9922021..9fa6f794653 100644 --- a/public/images/pokemon/variant/exp/382-primal.json +++ b/public/images/pokemon/variant/exp/382-primal.json @@ -1,44 +1,26 @@ { "1": { "27245e": "d96714", - "000000": "000000", "74659d": "ffb44c", "d3e6f4": "f6e4e0", "373384": "f49230", "b8c9df": "c5253a", "7eaecc": "ff3200", - "fbec99": "fbec99", "417999": "c5253a", - "101010": "101010", "dedede": "fff7f4", "9c8b94": "791309", - "f61010": "f61010", - "a43162": "a43162", - "e19d76": "e19d76", - "fadbb3": "fadbb3", - "90a2c0": "eac3b9", - "cdbdcd": "cdbdcd", - "ffffff": "ffffff" + "90a2c0": "eac3b9" }, "2": { "27245e": "780613", - "000000": "000000", "74659d": "ea512b", - "d3e6f4": "d3e6f4", "373384": "a90e14", "b8c9df": "db6d14", "7eaecc": "ffc546", "fbec99": "90ffde", "417999": "ea7c18", - "101010": "101010", - "dedede": "dedede", "9c8b94": "3c0818", "f61010": "3346d0", - "a43162": "a43162", - "e19d76": "67a6f4", - "fadbb3": "fadbb3", - "90a2c0": "90a2c0", - "cdbdcd": "cdbdcd", - "ffffff": "ffffff" + "e19d76": "67a6f4" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/383-primal.json b/public/images/pokemon/variant/exp/383-primal.json index da20585cc60..04ff6c48796 100644 --- a/public/images/pokemon/variant/exp/383-primal.json +++ b/public/images/pokemon/variant/exp/383-primal.json @@ -2,29 +2,23 @@ "1": { "9d2929": "11421e", "fe736b": "279930", - "010101": "010101", "fe2129": "2b5b32", "fab672": "ff8571", "fff493": "ffd493", "7c2129": "011e0b", "fe6336": "ff203f", - "272324": "272324", "3f3b3c": "383540", "595355": "625769", - "64626c": "64626c", "fbfbfb": "fff6de", "cdccd0": "e5d4b6" }, "2": { "9d2929": "20516c", "fe736b": "68cfd0", - "010101": "010101", "fe2129": "3e8b9f", "fab672": "61ee93", "fff493": "d2ff93", "7c2129": "0a2c43", - "fe6336": "fe6336", - "272324": "272324", "3f3b3c": "2b3c4e", "595355": "4e5169", "64626c": "7373a6", diff --git a/public/images/pokemon/variant/exp/384-mega.json b/public/images/pokemon/variant/exp/384-mega.json index e4de3a1c873..ccfb6f6dbe8 100644 --- a/public/images/pokemon/variant/exp/384-mega.json +++ b/public/images/pokemon/variant/exp/384-mega.json @@ -3,7 +3,6 @@ "fbe27e": "17e2d6", "fc9436": "098faf", "836231": "003082", - "010101": "010101", "f6de00": "17e2d6", "c5a400": "0db1b1", "3d7d6d": "84120f", @@ -13,7 +12,6 @@ "60d293": "f1785e", "e4b629": "036486", "9c2952": "063f67", - "e65273": "2083e7", - "fcfcfc": "fcfcfc" + "e65273": "2083e7" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/4052.json b/public/images/pokemon/variant/exp/4052.json index 1aa7d2251c6..d28c4ee091b 100644 --- a/public/images/pokemon/variant/exp/4052.json +++ b/public/images/pokemon/variant/exp/4052.json @@ -1,28 +1,21 @@ { "1": { - "181a1d": "181a1d", "3d4547": "4e385a", "84726f": "7b7aa5", "ada09a": "c3c5d4", "9aa094": "9ea9b5", "5b4e4d": "57567e", "272d2e": "342b49", - "010101": "010101", - "f3f3f3": "f3f3f3", - "f3d91d": "ffff89", - "000000": "000000" + "f3d91d": "ffff89" }, "2": { - "181a1d": "181a1d", "3d4547": "417778", "84726f": "3c2841", "ada09a": "603b54", "9aa094": "cc9a5f", "5b4e4d": "171127", "272d2e": "234a56", - "010101": "010101", "f3f3f3": "f4d294", - "f3d91d": "c4e857", - "000000": "000000" + "f3d91d": "c4e857" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/4077.json b/public/images/pokemon/variant/exp/4077.json index c51662408f4..4731cec1908 100644 --- a/public/images/pokemon/variant/exp/4077.json +++ b/public/images/pokemon/variant/exp/4077.json @@ -12,7 +12,6 @@ "fcf7ff": "edd5c9", "d2daff": "ffb44c", "59237e": "312c49", - "101010": "101010", "d8cde0": "aeadb3", "adadad": "9f9f9f", "78499b": "514766", @@ -23,7 +22,6 @@ "8e39c1": "990c00", "bdbabf": "c7aba8", "ded5ae": "5b93cc", - "fdfdfd": "fdfdfd", "8bbdc6": "ddb57c", "5292c7": "cb8b6b", "ccfffd": "efe091", @@ -47,7 +45,6 @@ "fcf7ff": "bab8c4", "d2daff": "b247a0", "59237e": "312c49", - "101010": "101010", "d8cde0": "aeadb3", "adadad": "9f9f9f", "78499b": "514766", @@ -58,7 +55,6 @@ "8e39c1": "161f4c", "bdbabf": "a7a9b2", "ded5ae": "cc66cc", - "fdfdfd": "fdfdfd", "8bbdc6": "bd80a3", "5292c7": "9e6b91", "ccfffd": "dd9ab7", diff --git a/public/images/pokemon/variant/exp/4078.json b/public/images/pokemon/variant/exp/4078.json index 854a977387d..5f7f7102ef7 100644 --- a/public/images/pokemon/variant/exp/4078.json +++ b/public/images/pokemon/variant/exp/4078.json @@ -1,11 +1,9 @@ { "1": { - "0c0c0c": "0c0c0c", "44bf75": "cc9470", "737ba4": "514766", "85fabf": "ffd9a5", "109865": "995944", - "2b3055": "2b3055", "ffffe3": "8cd8ff", "636357": "192666", "c566e3": "cc4328", @@ -19,12 +17,10 @@ "4ed68b": "cc9470" }, "2": { - "0c0c0c": "0c0c0c", "44bf75": "cc1e4c", "737ba4": "514766", "85fabf": "ff3255", "109865": "990f3d", - "2b3055": "2b3055", "ffffe3": "ff99dd", "636357": "361e66", "c566e3": "282866", diff --git a/public/images/pokemon/variant/exp/4079.json b/public/images/pokemon/variant/exp/4079.json index cb94f21fed1..8db9a419a27 100644 --- a/public/images/pokemon/variant/exp/4079.json +++ b/public/images/pokemon/variant/exp/4079.json @@ -7,9 +7,6 @@ "f88daf": "bb694b", "7c2847": "452a29", "d76d96": "8f5345", - "101010": "101010", - "d5cdcd": "d5cdcd", - "fcfcfc": "fcfcfc", "dea462": "e0799c", "8b5a18": "a84071", "ffe6b4": "ff9eba" @@ -22,9 +19,6 @@ "f88daf": "ecdcbe", "7c2847": "503941", "d76d96": "c6aead", - "101010": "101010", - "d5cdcd": "d5cdcd", - "fcfcfc": "fcfcfc", "dea462": "ca8e74", "8b5a18": "a45c58", "ffe6b4": "eec596" diff --git a/public/images/pokemon/variant/exp/4080.json b/public/images/pokemon/variant/exp/4080.json index 0d1bb55a1f9..b6fac81034e 100644 --- a/public/images/pokemon/variant/exp/4080.json +++ b/public/images/pokemon/variant/exp/4080.json @@ -2,10 +2,7 @@ "1": { "723f7c": "edc59e", "a565c0": "ffedcc", - "181818": "181818", "d76792": "905446", - "c9c9c9": "c9c9c9", - "fbfbfb": "fbfbfb", "c2c9c9": "de504e", "f985aa": "bb694b", "52525a": "821d2a", @@ -22,10 +19,7 @@ "2": { "723f7c": "963e59", "a565c0": "d9736b", - "181818": "181818", "d76792": "c6aead", - "c9c9c9": "c9c9c9", - "fbfbfb": "fbfbfb", "c2c9c9": "b0dc72", "f985aa": "ecdcbe", "52525a": "2a6122", diff --git a/public/images/pokemon/variant/exp/4199.json b/public/images/pokemon/variant/exp/4199.json index 703b641ef72..89bbdd186b2 100644 --- a/public/images/pokemon/variant/exp/4199.json +++ b/public/images/pokemon/variant/exp/4199.json @@ -3,12 +3,10 @@ "493e66": "831e2b", "a191b5": "de504e", "7a6a98": "ad3139", - "101010": "101010", "654493": "7e3351", "413668": "622344", "403468": "4f0926", "269a36": "f28783", - "f8f8f8": "f8f8f8", "a090b5": "ff9eba", "63577d": "a84071", "403568": "66222b", @@ -27,12 +25,10 @@ "493e66": "2a6122", "a191b5": "b0dc72", "7a6a98": "71ae48", - "101010": "101010", "654493": "37725b", "413668": "1d4c46", "403468": "9e3536", "269a36": "e58b5c", - "f8f8f8": "f8f8f8", "a090b5": "efc697", "63577d": "a55d59", "403568": "e6a572", diff --git a/public/images/pokemon/variant/exp/4222.json b/public/images/pokemon/variant/exp/4222.json index 217262ad84a..f3a79881488 100644 --- a/public/images/pokemon/variant/exp/4222.json +++ b/public/images/pokemon/variant/exp/4222.json @@ -9,7 +9,6 @@ "e3c4f2": "d7d2f6", "9c94a3": "58929f", "cbc2d1": "a9e4e3", - "101010": "101010", "ffa4c5": "76c6ff", "af9e9e": "44a0af", "e66294": "0099ff", @@ -26,7 +25,6 @@ "e3c4f2": "567f83", "9c94a3": "4b1f28", "cbc2d1": "773050", - "101010": "101010", "ffa4c5": "8ff3a3", "af9e9e": "b0919b", "e66294": "15c05f", diff --git a/public/images/pokemon/variant/exp/4263.json b/public/images/pokemon/variant/exp/4263.json index 938fe539ce9..52623dd15d4 100644 --- a/public/images/pokemon/variant/exp/4263.json +++ b/public/images/pokemon/variant/exp/4263.json @@ -5,10 +5,8 @@ "1b2627": "00312d", "5b5958": "397e4a", "f5f5f6": "f5ffea", - "010101": "010101", "b2b3b2": "a3ce9e", "d94a7f": "d414dd", - "fcfcfc": "fcfcfc", "e2729a": "ff69fa", "6e3b51": "9b00b4", "9b4f69": "d414dd", @@ -20,10 +18,8 @@ "1b2627": "080929", "5b5958": "100d2d", "f5f5f6": "3c335d", - "010101": "010101", "b2b3b2": "201b47", "d94a7f": "0099ce", - "fcfcfc": "fcfcfc", "e2729a": "54f1ff", "6e3b51": "004a8b", "9b4f69": "0099ce", diff --git a/public/images/pokemon/variant/exp/4264.json b/public/images/pokemon/variant/exp/4264.json index f40cc4b47cb..1841ad38561 100644 --- a/public/images/pokemon/variant/exp/4264.json +++ b/public/images/pokemon/variant/exp/4264.json @@ -1,13 +1,11 @@ { "1": { - "010101": "010101", "1d1c1b": "01473a", "343332": "1c8155", "727374": "579666", "f5f5f6": "f5ffea", "abadaf": "95c090", "ff4e89": "ff69fa", - "fcfcfc": "fcfcfc", "bc3065": "d414dd", "b4636f": "d414dd", "6f7071": "27323a", @@ -15,14 +13,12 @@ "ffa0bf": "ff69fa" }, "2": { - "010101": "010101", "1d1c1b": "412991", "343332": "7c4cd6", "727374": "18133d", "f5f5f6": "342d4c", "abadaf": "18133d", "ff4e89": "54f1ff", - "fcfcfc": "fcfcfc", "bc3065": "0099ce", "b4636f": "0099ce", "6f7071": "2a1b4e", diff --git a/public/images/pokemon/variant/exp/428-mega.json b/public/images/pokemon/variant/exp/428-mega.json index 63d366c60ae..fce41eef1c9 100644 --- a/public/images/pokemon/variant/exp/428-mega.json +++ b/public/images/pokemon/variant/exp/428-mega.json @@ -7,8 +7,6 @@ "b47b4a": "ffcc99", "8b5a41": "cc8866", "624a41": "660a38", - "000000": "000000", - "ffffff": "ffffff", "ee5a4a": "bd7acc", "7b3941": "472866", "393736": "232533", @@ -22,8 +20,6 @@ "b47b4a": "8cd8ff", "8b5a41": "5b93cc", "624a41": "65597f", - "000000": "000000", - "ffffff": "ffffff", "ee5a4a": "ff884c", "7b3941": "990c00", "393736": "514766", diff --git a/public/images/pokemon/variant/exp/445-mega.json b/public/images/pokemon/variant/exp/445-mega.json index 8cd597252af..bd15564de20 100644 --- a/public/images/pokemon/variant/exp/445-mega.json +++ b/public/images/pokemon/variant/exp/445-mega.json @@ -1,6 +1,5 @@ { "0": { - "000000": "000000", "292952": "061638", "c59410": "3aadc5", "5a62ac": "236696", @@ -9,13 +8,9 @@ "ffd518": "42d6de", "5a1000": "502209", "e64a31": "f7ac34", - "bd3941": "9e5201", - "ffffff": "ffffff", - "737b83": "737b83", - "c5cdd5": "c5cdd5" + "bd3941": "9e5201" }, "1": { - "000000": "000000", "292952": "632f1b", "c59410": "255dd7", "5a62ac": "deae7a", @@ -24,13 +19,9 @@ "ffd518": "4caaff", "5a1000": "393648", "e64a31": "dce8e8", - "bd3941": "9fb6bf", - "ffffff": "ffffff", - "737b83": "737b83", - "c5cdd5": "c5cdd5" + "bd3941": "9fb6bf" }, "2": { - "000000": "000000", "292952": "051a2e", "c59410": "23b8a8", "5a62ac": "2f434b", @@ -39,9 +30,6 @@ "ffd518": "6fe6a3", "5a1000": "521000", "e64a31": "ec642c", - "bd3941": "b23219", - "ffffff": "ffffff", - "737b83": "737b83", - "c5cdd5": "c5cdd5" + "bd3941": "b23219" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/4562.json b/public/images/pokemon/variant/exp/4562.json index 66dc22274b9..a2c3bd41ea6 100644 --- a/public/images/pokemon/variant/exp/4562.json +++ b/public/images/pokemon/variant/exp/4562.json @@ -2,10 +2,8 @@ "1": { "313131": "145555", "525252": "257e6a", - "101010": "101010", "672b82": "7e173e", "ab38d1": "b0264c", - "371d3f": "371d3f", "6f5c6b": "743949", "c5b9bb": "c69981", "cb414b": "18265b", @@ -16,10 +14,8 @@ "2": { "313131": "69162c", "525252": "90222b", - "101010": "101010", "672b82": "57a0b9", "ab38d1": "c2ffe2", - "371d3f": "371d3f", "6f5c6b": "0a4340", "c5b9bb": "298a61", "cb414b": "ffad58", diff --git a/public/images/pokemon/variant/exp/531-mega.json b/public/images/pokemon/variant/exp/531-mega.json index 112b24311c4..068c2e81ea6 100644 --- a/public/images/pokemon/variant/exp/531-mega.json +++ b/public/images/pokemon/variant/exp/531-mega.json @@ -3,7 +3,6 @@ "80734d": "7c4b3b", "ffecb2": "fff6f0", "ccb87a": "d6bfb4", - "101010": "101010", "b35968": "6b0a46", "ffbfca": "f5a779", "737373": "6b0a46", @@ -17,7 +16,6 @@ "80734d": "09232a", "ffecb2": "4bb9a6", "ccb87a": "29878f", - "101010": "101010", "b35968": "111322", "ffbfca": "f6e3a8", "737373": "111322", diff --git a/public/images/pokemon/variant/exp/6100.json b/public/images/pokemon/variant/exp/6100.json index 3ad86ad3547..9d3afba665c 100644 --- a/public/images/pokemon/variant/exp/6100.json +++ b/public/images/pokemon/variant/exp/6100.json @@ -1,7 +1,6 @@ { "1": { "beaba7": "bfebee", - "101010": "101010", "ddccc8": "bfebee", "7c2506": "2e333b", "c04a1c": "4e6170", @@ -18,7 +17,6 @@ }, "2": { "beaba7": "ecd3c1", - "101010": "101010", "ddccc8": "ecd3c1", "7c2506": "5d0a26", "c04a1c": "72142b", diff --git a/public/images/pokemon/variant/exp/6101.json b/public/images/pokemon/variant/exp/6101.json index f1de6652e5e..716e2503c61 100644 --- a/public/images/pokemon/variant/exp/6101.json +++ b/public/images/pokemon/variant/exp/6101.json @@ -1,7 +1,6 @@ { "1": { "845c35": "373e4c", - "101010": "101010", "d9a866": "a5aab7", "f3d181": "c9cdd6", "a9763d": "838797", @@ -9,14 +8,10 @@ "c04a1c": "386583", "ec6f00": "69a6b4", "dc5d00": "4f879f", - "7c2506": "2e333b", - "ddccc8": "ddccc8", - "fefefe": "fefefe", - "6f625e": "6f625e" + "7c2506": "2e333b" }, "2": { "845c35": "231b20", - "101010": "101010", "d9a866": "452d35", "f3d181": "5e343c", "a9763d": "35262c", @@ -24,9 +19,6 @@ "c04a1c": "72142b", "ec6f00": "a62833", "dc5d00": "8f1b2c", - "7c2506": "4a061d", - "ddccc8": "ddccc8", - "fefefe": "fefefe", - "6f625e": "6f625e" + "7c2506": "4a061d" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/6215.json b/public/images/pokemon/variant/exp/6215.json index 3198424563b..56ee351cd66 100644 --- a/public/images/pokemon/variant/exp/6215.json +++ b/public/images/pokemon/variant/exp/6215.json @@ -1,7 +1,6 @@ { "1": { "503678": "0f5d6d", - "080808": "080808", "514a80": "402010", "956cbe": "31dabb", "9c9bce": "ae8976", @@ -12,14 +11,10 @@ "ffde7b": "a7a7a7", "584d80": "562627", "28234b": "220d0a", - "c52973": "ea903f", - "bdbdc5": "bdbdc5", - "f6f6ff": "f6f6ff", - "000000": "000000" + "c52973": "ea903f" }, "2": { "503678": "601522", - "080808": "080808", "514a80": "14273a", "956cbe": "cc5427", "9c9bce": "3c8775", @@ -30,9 +25,6 @@ "ffde7b": "ffe07e", "584d80": "1c3942", "28234b": "0a191e", - "c52973": "f49633", - "bdbdc5": "bdbdc5", - "f6f6ff": "f6f6ff", - "000000": "000000" + "c52973": "f49633" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/653.json b/public/images/pokemon/variant/exp/653.json index be967d6c9c2..d603337fb8c 100644 --- a/public/images/pokemon/variant/exp/653.json +++ b/public/images/pokemon/variant/exp/653.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "736028": "9f398a", "ffd659": "e190c3", "ccab47": "c35ba3", @@ -9,11 +8,9 @@ "b34724": "502c81", "737373": "68326b", "f8f8f8": "fbecff", - "bfbfbf": "c093c3", - "404040": "404040" + "bfbfbf": "c093c3" }, "2": { - "101010": "101010", "736028": "172547", "ffd659": "3a6a93", "ccab47": "264166", @@ -22,7 +19,6 @@ "b34724": "0aaa77", "737373": "75553c", "f8f8f8": "fff8ec", - "bfbfbf": "d4b996", - "404040": "404040" + "bfbfbf": "d4b996" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/654.json b/public/images/pokemon/variant/exp/654.json index 0f3b2bf3d4e..98273b9be27 100644 --- a/public/images/pokemon/variant/exp/654.json +++ b/public/images/pokemon/variant/exp/654.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "736028": "061530", "ffd659": "b55390", "ccab47": "872b59", @@ -11,14 +10,11 @@ "737373": "5c255f", "bfbfbf": "c093c3", "804913": "c5b3ca", - "262626": "262626", - "404040": "404040", "f8cf52": "80f37b", "ffc000": "4fcb61", "ff8700": "207d4e" }, "2": { - "101010": "101010", "736028": "061530", "ffd659": "2b5f8a", "ccab47": "173864", @@ -29,8 +25,6 @@ "737373": "75553c", "bfbfbf": "d4b996", "804913": "098794", - "262626": "262626", - "404040": "404040", "f8cf52": "c858a4", "ffc000": "75308e", "ff8700": "521364" diff --git a/public/images/pokemon/variant/exp/6549.json b/public/images/pokemon/variant/exp/6549.json index 8ced2d845dc..821228094f7 100644 --- a/public/images/pokemon/variant/exp/6549.json +++ b/public/images/pokemon/variant/exp/6549.json @@ -3,24 +3,20 @@ "70365a": "29547d", "bd59a2": "5094c0", "315a31": "5a5a2c", - "101010": "101010", "39ac39": "bfd17f", "ff84bd": "73bad9", "bda452": "77909a", "4a834a": "8e954d", "ffbbdb": "b5ddea", - "fdfdfd": "fdfdfd", "ffde41": "b6c7cc", "526229": "80152b", "c5ee7b": "ef5755", - "9cb462": "bd2d40", - "cdc5bd": "cdc5bd" + "9cb462": "bd2d40" }, "2": { "70365a": "8a1a3c", "bd59a2": "d64065", "315a31": "643312", - "101010": "101010", "39ac39": "ebc460", "ff84bd": "e8617a", "bda452": "78412b", diff --git a/public/images/pokemon/variant/exp/655.json b/public/images/pokemon/variant/exp/655.json index 58830e08360..6ac4e8de6dc 100644 --- a/public/images/pokemon/variant/exp/655.json +++ b/public/images/pokemon/variant/exp/655.json @@ -1,7 +1,6 @@ { "1": { "7f5f1f": "331035", - "101010": "101010", "702010": "491679", "f8df5f": "e7caef", "ea541f": "ab6ce0", @@ -31,7 +30,6 @@ }, "2": { "7f5f1f": "75553c", - "101010": "101010", "702010": "005646", "f8df5f": "fff2dd", "ea541f": "21d170", diff --git a/public/images/pokemon/variant/exp/6570.json b/public/images/pokemon/variant/exp/6570.json index d54434d87b5..d7e2a1d6345 100644 --- a/public/images/pokemon/variant/exp/6570.json +++ b/public/images/pokemon/variant/exp/6570.json @@ -4,24 +4,19 @@ "d53a3e": "e8512a", "5f0002": "5d0019", "f07376": "ff6d26", - "101010": "101010", - "4a4d53": "4a4d53", "f7acae": "fdc9a2", "fafafa": "f3dac4", "b3b3bb": "d6b7b1", "cbcfd8": "7b7897", "6d4d62": "e1d2d3", "928d96": "303443", - "a7484f": "9e111f", - "df7806": "df7806", - "ffae1a": "ffae1a" + "a7484f": "9e111f" }, "2": { "942429": "09523d", "d53a3e": "1c7b4f", "5f0002": "033431", "f07376": "3cbc5f", - "101010": "101010", "4a4d53": "6f4332", "f7acae": "79d38d", "fafafa": "f0decd", diff --git a/public/images/pokemon/variant/exp/6571.json b/public/images/pokemon/variant/exp/6571.json index 8ea944f8a12..7d713d3174b 100644 --- a/public/images/pokemon/variant/exp/6571.json +++ b/public/images/pokemon/variant/exp/6571.json @@ -5,14 +5,10 @@ "fcfcfc": "e1d2d2", "dd5857": "782d41", "e79594": "b44d63", - "101010": "101010", - "ffffff": "ffffff", - "918b96": "918b96", "c03a52": "4a1921", "b77076": "883955", "3f3f3f": "262231", "c0b6bd": "c3a5a8", - "d0d1d0": "d0d1d0", "928c91": "4a4759", "5f475c": "d7b4b6", "bfc1bf": "737185", @@ -24,14 +20,11 @@ "fcfcfc": "f0decd", "dd5857": "2e625a", "e79594": "4e867b", - "101010": "101010", - "ffffff": "ffffff", "918b96": "885f49", "c03a52": "143130", "b77076": "2e625a", "3f3f3f": "4b163b", "c0b6bd": "c6ab99", - "d0d1d0": "d0d1d0", "928c91": "885f49", "5f475c": "c2589c", "bfc1bf": "bc9072", diff --git a/public/images/pokemon/variant/exp/664.json b/public/images/pokemon/variant/exp/664.json index bd4164ca7db..932e2399bb9 100644 --- a/public/images/pokemon/variant/exp/664.json +++ b/public/images/pokemon/variant/exp/664.json @@ -2,29 +2,23 @@ "1": { "4d4d4d": "9d6260", "f8f8f8": "ffffff", - "101010": "101010", "b3b3b3": "e9c7c4", "363636": "4c2855", "747474": "a97dbb", "4e4e4e": "895a9f", "9d7247": "838b53", "d1bf6b": "a0c896", - "b2b2b2": "b2b2b2", - "f7f7f7": "f7f7f7", "855d31": "626649" }, "2": { "4d4d4d": "590015", "f8f8f8": "c83e4c", - "101010": "101010", "b3b3b3": "a70d37", "363636": "05312f", "747474": "73bdae", "4e4e4e": "377772", "9d7247": "dda476", "d1bf6b": "ffe0ba", - "b2b2b2": "b2b2b2", - "f7f7f7": "f7f7f7", "855d31": "bf8961" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/665.json b/public/images/pokemon/variant/exp/665.json index 6d828dadb5d..ac2d2e6c336 100644 --- a/public/images/pokemon/variant/exp/665.json +++ b/public/images/pokemon/variant/exp/665.json @@ -6,8 +6,6 @@ "4e4e4e": "895a9f", "747474": "a97dbb", "bfbfbf": "b294be", - "101010": "101010", - "fdfdfd": "fdfdfd", "8c8c8c": "895a9f", "4d4d4d": "9c615f", "f8f8f8": "ffffff", @@ -23,8 +21,6 @@ "4e4e4e": "377772", "747474": "73bdae", "bfbfbf": "a70d37", - "101010": "101010", - "fdfdfd": "fdfdfd", "8c8c8c": "590015", "4d4d4d": "590015", "f8f8f8": "c83e4c", diff --git a/public/images/pokemon/variant/exp/666-archipelago.json b/public/images/pokemon/variant/exp/666-archipelago.json index a305fd9dd81..0a1b2b1d198 100644 --- a/public/images/pokemon/variant/exp/666-archipelago.json +++ b/public/images/pokemon/variant/exp/666-archipelago.json @@ -1,36 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "c8373c": "c8373c", - "d2bf96": "d2bf96", - "30c171": "30c171", "303030": "402746", - "c27351": "c27351", "ceab62": "d9edd4", "675220": "958c8a", "504a4a": "7f6991", "707068": "a97cbc", - "a2523b": "a2523b", - "c3c3c3": "ffeaff", - "811c1c": "811c1c", - "b28e67": "b28e67" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "824719", - "c8373c": "c8373c", - "d2bf96": "d2bf96", - "30c171": "30c171", "303030": "642703", - "c27351": "c27351", "ceab62": "a22414", "675220": "741300", "504a4a": "741300", "707068": "a22414", - "a2523b": "a2523b", - "c3c3c3": "e7caa5", - "811c1c": "811c1c", - "b28e67": "b28e67" + "c3c3c3": "e7caa5" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-continental.json b/public/images/pokemon/variant/exp/666-continental.json index 93ff5a5c5eb..44354f1180a 100644 --- a/public/images/pokemon/variant/exp/666-continental.json +++ b/public/images/pokemon/variant/exp/666-continental.json @@ -1,36 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "d18257": "d18257", "303030": "402746", - "f9bd55": "f9bd55", - "f8f05e": "f8f05e", "ceab62": "d9edd4", - "d24c3e": "d24c3e", "675220": "958c8a", "504a4a": "7f6991", "707068": "a97cbc", - "aa5844": "aa5844", - "c3c3c3": "ffeaff", - "811c1c": "811c1c", - "e08528": "e08528" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "8f551e", - "d18257": "d18257", "303030": "6d2d0d", - "f9bd55": "f9bd55", - "f8f05e": "f8f05e", "ceab62": "e99b44", - "d24c3e": "d24c3e", "675220": "9c5c19", "504a4a": "9c5c19", "707068": "e99b44", - "aa5844": "aa5844", - "c3c3c3": "f8f27f", - "811c1c": "811c1c", - "e08528": "e08528" + "c3c3c3": "f8f27f" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-elegant.json b/public/images/pokemon/variant/exp/666-elegant.json index 06de5005e5f..cbb3635ded6 100644 --- a/public/images/pokemon/variant/exp/666-elegant.json +++ b/public/images/pokemon/variant/exp/666-elegant.json @@ -1,36 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "e6ddf8": "e6ddf8", - "f8de3f": "f8de3f", - "cf7ef3": "cf7ef3", "303030": "402746", - "875fb5": "875fb5", "ceab62": "d9edd4", - "de4040": "de4040", "675220": "958c8a", "504a4a": "7f6991", "707068": "a97cbc", - "56479d": "56479d", - "c3c3c3": "ffeaff", - "811c1c": "811c1c" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "612776", - "e6ddf8": "e6ddf8", - "f8de3f": "f8de3f", - "cf7ef3": "cf7ef3", "303030": "351262", - "875fb5": "875fb5", "ceab62": "a73fab", - "de4040": "de4040", "675220": "7d1083", "504a4a": "7d1083", "707068": "a73fab", - "56479d": "56479d", - "c3c3c3": "f0ecff", - "811c1c": "811c1c" + "c3c3c3": "f0ecff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-fancy.json b/public/images/pokemon/variant/exp/666-fancy.json index 1f31ac6983d..964324d96e5 100644 --- a/public/images/pokemon/variant/exp/666-fancy.json +++ b/public/images/pokemon/variant/exp/666-fancy.json @@ -1,38 +1,22 @@ { - "1": { - "101010": "101010", - "303030": "402746", - "675220": "958c8a", - "504a4a": "7f6991", - "595959": "724b7a", - "707068": "a97cbc", - "811c1c": "811c1c", - "de4040": "de4040", - "5faa3e": "5faa3e", - "ceab62": "d9edd4", - "b6d26d": "b6d26d", - "e9e052": "e9e052", - "cf7ef3": "cf7ef3", - "c3c3c3": "ffeaff", - "f2d4e3": "f2d4e3", - "ead2e3": "ffeaff" - }, - "2": { - "101010": "101010", - "303030": "00771b", - "675220": "b9c05a", - "504a4a": "b9c05a", - "595959": "6f9f42", - "707068": "e3e982", - "811c1c": "811c1c", - "de4040": "de4040", - "5faa3e": "5faa3e", - "ceab62": "e3e982", - "b6d26d": "b6d26d", - "e9e052": "e9e052", - "cf7ef3": "cf7ef3", - "c3c3c3": "fcf1ff", - "f2d4e3": "f2d4e3", - "ead2e3": "fcf1ff" - } + "1": { + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "ceab62": "d9edd4", + "c3c3c3": "ffeaff", + "ead2e3": "ffeaff" + }, + "2": { + "303030": "00771b", + "675220": "b9c05a", + "504a4a": "b9c05a", + "595959": "6f9f42", + "707068": "e3e982", + "ceab62": "e3e982", + "c3c3c3": "fcf1ff", + "ead2e3": "fcf1ff" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-garden.json b/public/images/pokemon/variant/exp/666-garden.json index 6493a613fd8..285d4a5beaf 100644 --- a/public/images/pokemon/variant/exp/666-garden.json +++ b/public/images/pokemon/variant/exp/666-garden.json @@ -1,34 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "398351": "398351", - "3dba96": "3dba96", "303030": "402746", "ceab62": "d9edd4", - "88d254": "88d254", "675220": "958c8a", - "de4040": "de4040", "504a4a": "7f6991", "707068": "a97cbc", - "3f919a": "3f919a", - "c3c3c3": "ffeaff", - "811c1c": "811c1c" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "006b55", - "398351": "398351", - "3dba96": "3dba96", "303030": "044553", "ceab62": "227687", - "88d254": "88d254", "675220": "055160", - "de4040": "de4040", "504a4a": "055160", "707068": "227687", - "3f919a": "3f919a", - "c3c3c3": "72d0a3", - "811c1c": "811c1c" + "c3c3c3": "72d0a3" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-high-plains.json b/public/images/pokemon/variant/exp/666-high-plains.json index f63bb4f81f3..a6600d1e6ac 100644 --- a/public/images/pokemon/variant/exp/666-high-plains.json +++ b/public/images/pokemon/variant/exp/666-high-plains.json @@ -1,38 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "f3a861": "f3a861", "303030": "402746", - "9a5a3b": "9a5a3b", - "e1764e": "e1764e", - "aa4343": "aa4343", "ceab62": "d9edd4", "675220": "958c8a", "504a4a": "7f6991", "707068": "a97cbc", - "c3c3c3": "ffeaff", - "811c1c": "811c1c", - "337543": "337543", - "e8c815": "e8c815", - "773d21": "773d21" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "a55422", - "f3a861": "f3a861", "303030": "8f1d19", - "9a5a3b": "9a5a3b", - "e1764e": "e1764e", - "aa4343": "aa4343", "ceab62": "f2975a", "675220": "c97034", "504a4a": "c97034", "707068": "f2975a", - "c3c3c3": "edc67c", - "811c1c": "811c1c", - "337543": "337543", - "e8c815": "e8c815", - "773d21": "773d21" + "c3c3c3": "edc67c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-icy-snow.json b/public/images/pokemon/variant/exp/666-icy-snow.json index d69d48d89e9..244c47d1863 100644 --- a/public/images/pokemon/variant/exp/666-icy-snow.json +++ b/public/images/pokemon/variant/exp/666-icy-snow.json @@ -1,34 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "f0f0f8": "f0f0f8", "303030": "402746", - "cfd9cf": "cfd9cf", - "c5c5da": "c5c5da", "675220": "958c8a", "ceab62": "d9edd4", "707068": "a97cbc", "504a4a": "7f6991", - "c3c3c3": "ffeaff", - "acacc2": "acacc2", - "95a1a1": "95a1a1", - "811c1c": "811c1c" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "60646a", - "f0f0f8": "f0f0f8", "303030": "364051", - "cfd9cf": "cfd9cf", - "c5c5da": "c5c5da", "675220": "666b7d", "ceab62": "8c91a4", "707068": "8c91a4", "504a4a": "666b7d", - "c3c3c3": "fefeff", - "acacc2": "acacc2", - "95a1a1": "95a1a1", - "811c1c": "811c1c" + "c3c3c3": "fefeff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-jungle.json b/public/images/pokemon/variant/exp/666-jungle.json index 2961f2fa042..19c5f288eb3 100644 --- a/public/images/pokemon/variant/exp/666-jungle.json +++ b/public/images/pokemon/variant/exp/666-jungle.json @@ -1,36 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "638c63": "638c63", - "7cc48b": "7cc48b", "303030": "402746", "ceab62": "d9edd4", "675220": "958c8a", "504a4a": "7f6991", "707068": "a97cbc", - "567456": "567456", - "c3c3c3": "ffeaff", - "811c1c": "811c1c", - "9a653e": "9a653e", - "c29566": "c29566", - "724e28": "724e28" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "285b3b", - "638c63": "638c63", - "7cc48b": "7cc48b", "303030": "20452e", "ceab62": "385c43", "675220": "153922", "504a4a": "153922", "707068": "385c43", - "567456": "567456", - "c3c3c3": "a9d9a0", - "811c1c": "811c1c", - "9a653e": "9a653e", - "c29566": "c29566", - "724e28": "724e28" + "c3c3c3": "a9d9a0" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-marine.json b/public/images/pokemon/variant/exp/666-marine.json index 27efc6226d0..3e4f4254cd8 100644 --- a/public/images/pokemon/variant/exp/666-marine.json +++ b/public/images/pokemon/variant/exp/666-marine.json @@ -1,34 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "2f8dc9": "2f8dc9", - "5acdf1": "5acdf1", "303030": "402746", "ceab62": "d9edd4", "675220": "958c8a", - "f2f2f2": "f2f2f2", - "367cb9": "367cb9", "504a4a": "7f6991", "707068": "a97cbc", - "315382": "315382", - "c3c3c3": "ffeaff", - "811c1c": "811c1c" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "2a5894", - "2f8dc9": "2f8dc9", - "5acdf1": "5acdf1", "303030": "16244f", "ceab62": "3070af", "675220": "264c85", - "f2f2f2": "f2f2f2", - "367cb9": "367cb9", "504a4a": "264c85", "707068": "3070af", - "315382": "315382", - "c3c3c3": "f2f2f2", - "811c1c": "811c1c" + "c3c3c3": "f2f2f2" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-meadow.json b/public/images/pokemon/variant/exp/666-meadow.json index c766325427b..c65040d31d9 100644 --- a/public/images/pokemon/variant/exp/666-meadow.json +++ b/public/images/pokemon/variant/exp/666-meadow.json @@ -1,36 +1,20 @@ { - "1": { - "101010": "101010", - "303030": "402746", - "675220": "958c8a", - "504a4a": "7f6991", - "595959": "724b7a", - "707068": "a97cbc", - "811c1c": "811c1c", - "b4295a": "b4295a", - "da6b7e": "da6b7e", - "ceab62": "d9edd4", - "e66fad": "e66fad", - "2d9b9b": "2d9b9b", - "f3a0ca": "f3a0ca", - "c3c3c3": "ffeaff", - "f2f2f2": "f2f2f2" - }, - "2": { - "101010": "101010", - "303030": "770921", - "675220": "a2275e", - "504a4a": "a2275e", - "595959": "9e3941", - "707068": "ce5283", - "811c1c": "811c1c", - "b4295a": "b4295a", - "da6b7e": "da6b7e", - "ceab62": "ce5283", - "e66fad": "e66fad", - "2d9b9b": "2d9b9b", - "f3a0ca": "f3a0ca", - "c3c3c3": "f4c2ec", - "f2f2f2": "f2f2f2" - } + "1": { + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "ceab62": "d9edd4", + "c3c3c3": "ffeaff" + }, + "2": { + "303030": "770921", + "675220": "a2275e", + "504a4a": "a2275e", + "595959": "9e3941", + "707068": "ce5283", + "ceab62": "ce5283", + "c3c3c3": "f4c2ec" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-modern.json b/public/images/pokemon/variant/exp/666-modern.json index 2cbd9aad858..cc873702571 100644 --- a/public/images/pokemon/variant/exp/666-modern.json +++ b/public/images/pokemon/variant/exp/666-modern.json @@ -1,36 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", "c3c3c3": "ffeaff", - "3b6cbb": "3b6cbb", - "f44f4f": "f44f4f", "303030": "402746", "ceab62": "d9edd4", "675220": "958c8a", - "f8f05e": "f8f05e", "504a4a": "7f6991", - "707068": "a97cbc", - "b83c3c": "b83c3c", - "cfc5d9": "cfc5d9", - "811c1c": "811c1c", - "405793": "405793" + "707068": "a97cbc" }, "2": { - "101010": "101010", "595959": "830012", "c3c3c3": "ffeae8", - "3b6cbb": "3b6cbb", - "f44f4f": "f44f4f", "303030": "4e0000", "ceab62": "ad2640", "675220": "801521", - "f8f05e": "f8f05e", "504a4a": "801521", - "707068": "ad2640", - "b83c3c": "b83c3c", - "cfc5d9": "cfc5d9", - "811c1c": "811c1c", - "405793": "405793" + "707068": "ad2640" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-monsoon.json b/public/images/pokemon/variant/exp/666-monsoon.json index 915d471b2b1..5a127a43bbe 100644 --- a/public/images/pokemon/variant/exp/666-monsoon.json +++ b/public/images/pokemon/variant/exp/666-monsoon.json @@ -1,33 +1,19 @@ { - "1": { - "101010": "101010", - "303030": "402746", - "675220": "958c8a", - "504a4a": "7f6991", - "595959": "724b7a", - "707068": "a97cbc", - "807676": "807676", - "ceab62": "d9edd4", - "5676de": "5676de", - "4eccd6": "4eccd6", - "989898": "989898", - "c3c3c3": "c3c3c3", - "f0f0f8": "f0f0f8" - }, - "2": { - "101010": "101010", - "303030": "3d3231", - "675220": "2c3593", - "504a4a": "2c3593", - "595959": "4f4645", - "707068": "5857bc", - "807676": "807676", - "ceab62": "5857bc", - "5676de": "5676de", - "4eccd6": "4eccd6", - "989898": "989898", - "92f4f4": "92f4f4", - "c3c3c3": "b8f9f9", - "f0f0f8": "f0f0f8" - } + "1": { + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "ceab62": "d9edd4" + }, + "2": { + "303030": "3d3231", + "675220": "2c3593", + "504a4a": "2c3593", + "595959": "4f4645", + "707068": "5857bc", + "ceab62": "5857bc", + "c3c3c3": "b8f9f9" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-ocean.json b/public/images/pokemon/variant/exp/666-ocean.json index c468bbcbf1e..4f7cd822f97 100644 --- a/public/images/pokemon/variant/exp/666-ocean.json +++ b/public/images/pokemon/variant/exp/666-ocean.json @@ -1,36 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "e1384d": "e1384d", - "f3a861": "f3a861", - "fcf372": "fcf372", "303030": "402746", "ceab62": "d9edd4", "675220": "958c8a", "504a4a": "7f6991", "707068": "a97cbc", - "f0ce44": "f0ce44", - "c3c3c3": "ffeaff", - "367cb9": "367cb9", - "74bbe9": "74bbe9", - "811c1c": "811c1c" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "e99a26", - "e1384d": "e1384d", - "f3a861": "f3a861", - "fcf372": "fcf372", "303030": "b54908", "ceab62": "ea8742", "675220": "bc601c", "504a4a": "bc601c", "707068": "ea8742", - "f0ce44": "f0ce44", - "c3c3c3": "f3c86b", - "367cb9": "367cb9", - "74bbe9": "74bbe9", - "811c1c": "811c1c" + "c3c3c3": "f3c86b" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-poke-ball.json b/public/images/pokemon/variant/exp/666-poke-ball.json index fe6b42f6ef3..048cb75ecfd 100644 --- a/public/images/pokemon/variant/exp/666-poke-ball.json +++ b/public/images/pokemon/variant/exp/666-poke-ball.json @@ -1,33 +1,23 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "b72c2c": "b72c2c", - "dc4b4b": "dc4b4b", "303030": "402746", "675220": "958c8a", "ceab62": "d9edd4", - "e97e7e": "e97e7e", - "971d1d": "971d1d", - "f8f8f8": "f8f8f8", "707068": "a97cbc", "504a4a": "7f6991", "c3c3c3": "ffeaff", - "811c1c": "811c1c", - "a9a99e": "a9a99e", "2c2b2b": "402746" }, "2": { - "101010": "101010", "f8f8f8": "00006d", "303030": "ae001a", "2c2b2b": "660000", - "504a4a": "a70038", + "504a4a": "a70038", "595959": "df0036", "c3c3c3": "f0a6bf", "707068": "d5375a", "a9a99e": "000050", - "811c1c": "811c1c", "971d1d": "040046", "b72c2c": "00005e", "dc4b4b": "19007d", diff --git a/public/images/pokemon/variant/exp/666-polar.json b/public/images/pokemon/variant/exp/666-polar.json index 625bfe0f292..0667b5de09c 100644 --- a/public/images/pokemon/variant/exp/666-polar.json +++ b/public/images/pokemon/variant/exp/666-polar.json @@ -1,36 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "4d6cc1": "4d6cc1", "303030": "402746", - "f0f0f8": "f0f0f8", - "3b4b8a": "3b4b8a", "ceab62": "d9edd4", - "bfbfbf": "bfbfbf", "675220": "958c8a", "504a4a": "7f6991", "707068": "a97cbc", - "c3c3c3": "ffeaff", - "2d2d61": "2d2d61", - "811c1c": "811c1c", - "6aa2dc": "6aa2dc" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "2f3887", - "4d6cc1": "4d6cc1", "303030": "191b54", - "f0f0f8": "f0f0f8", - "3b4b8a": "3b4b8a", "ceab62": "5f85c1", - "bfbfbf": "bfbfbf", "675220": "366098", "504a4a": "366098", "707068": "5f85c1", - "c3c3c3": "ffffff", - "2d2d61": "2d2d61", - "811c1c": "811c1c", - "6aa2dc": "6aa2dc" + "c3c3c3": "ffffff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-river.json b/public/images/pokemon/variant/exp/666-river.json index c7e5e288d05..5ba0084df9d 100644 --- a/public/images/pokemon/variant/exp/666-river.json +++ b/public/images/pokemon/variant/exp/666-river.json @@ -1,40 +1,18 @@ { - "1": { - "101010": "101010", - "303030": "402746", - "4a412c": "4a412c", - "675220": "958c8a", - "634d20": "634d20", - "1d726a": "1d726a", - "504a4a": "7f6991", - "595959": "724b7a", - "625841": "625841", - "707068": "a97cbc", - "bc813f": "bc813f", - "9c9143": "9c9143", - "ceab62": "ceab62", - "279ec2": "279ec2", - "59c9d3": "59c9d3", - "c3c3c3": "c3c3c3", - "d2a862": "d9edd4" - }, - "2": { - "101010": "101010", - "303030": "7b2800", - "4a412c": "4a412c", - "675220": "ae7f41", - "634d20": "634d20", - "1d726a": "1d726a", - "504a4a": "ae7f41", - "595959": "8a5702", - "625841": "625841", - "707068": "d9a666", - "bc813f": "bc813f", - "9c9143": "9c9143", - "ceab62": "ceab62", - "279ec2": "279ec2", - "59c9d3": "59c9d3", - "c3c3c3": "e3c384", - "d2a862": "d2a862" - } + "1": { + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "d2a862": "d9edd4" + }, + "2": { + "303030": "7b2800", + "675220": "ae7f41", + "504a4a": "ae7f41", + "595959": "8a5702", + "707068": "d9a666", + "c3c3c3": "e3c384" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-sandstorm.json b/public/images/pokemon/variant/exp/666-sandstorm.json index 3a50d436a19..5f16f97ed58 100644 --- a/public/images/pokemon/variant/exp/666-sandstorm.json +++ b/public/images/pokemon/variant/exp/666-sandstorm.json @@ -1,36 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "f1d69e": "f1d69e", "303030": "402746", - "625843": "625843", - "ba8d68": "ba8d68", - "9b9148": "9b9148", "ceab62": "d9edd4", "675220": "958c8a", "504a4a": "7f6991", "707068": "a97cbc", - "d9b674": "d9b674", - "c3c3c3": "ffeaff", - "811c1c": "811c1c", - "72604d": "72604d" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "88583e", - "f1d69e": "f1d69e", "303030": "443123", - "625843": "625843", - "ba8d68": "ba8d68", - "9b9148": "9b9148", "ceab62": "c6975f", "675220": "9c703b", "504a4a": "9c703b", "707068": "c6975f", - "d9b674": "d9b674", - "c3c3c3": "ece1a9", - "811c1c": "811c1c", - "72604d": "72604d" + "c3c3c3": "ece1a9" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-savanna.json b/public/images/pokemon/variant/exp/666-savanna.json index c42595ae8c2..12dddd4ec8d 100644 --- a/public/images/pokemon/variant/exp/666-savanna.json +++ b/public/images/pokemon/variant/exp/666-savanna.json @@ -1,36 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "61a0f5": "61a0f5", - "fffd77": "fffd77", "303030": "402746", - "55d3d9": "55d3d9", "ceab62": "d9edd4", "675220": "958c8a", - "dcc433": "dcc433", "504a4a": "7f6991", "707068": "a97cbc", - "3b67ac": "3b67ac", - "6cc6c6": "6cc6c6", - "c3c3c3": "ffeaff", - "811c1c": "811c1c" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "4168bb", - "61a0f5": "61a0f5", - "fffd77": "fffd77", "303030": "183576", - "55d3d9": "55d3d9", "ceab62": "4faab3", "675220": "1d828b", - "dcc433": "dcc433", "504a4a": "1d828b", "707068": "4faab3", - "3b67ac": "3b67ac", - "6cc6c6": "6cc6c6", - "c3c3c3": "81e7e1", - "811c1c": "811c1c" + "c3c3c3": "81e7e1" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-sun.json b/public/images/pokemon/variant/exp/666-sun.json index 584b6231a7f..d4297619bb3 100644 --- a/public/images/pokemon/variant/exp/666-sun.json +++ b/public/images/pokemon/variant/exp/666-sun.json @@ -1,36 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "f1a26a": "f1a26a", "303030": "402746", - "f47491": "f47491", - "fcf372": "fcf372", - "f0ce44": "f0ce44", "ceab62": "d9edd4", "675220": "958c8a", "504a4a": "7f6991", "707068": "a97cbc", - "c94971": "c94971", - "e18248": "e18248", - "c3c3c3": "ffeaff", - "811c1c": "811c1c" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "750500", - "f1a26a": "f1a26a", "303030": "640000", - "f47491": "f47491", - "fcf372": "fcf372", - "f0ce44": "f0ce44", "ceab62": "b83b74", "675220": "8c1850", "504a4a": "8c1850", "707068": "b83b74", - "c94971": "c94971", - "e18248": "e18248", - "c3c3c3": "fee3e7", - "811c1c": "811c1c" + "c3c3c3": "fee3e7" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/666-tundra.json b/public/images/pokemon/variant/exp/666-tundra.json index a2cd2299c3a..f64ca7b164b 100644 --- a/public/images/pokemon/variant/exp/666-tundra.json +++ b/public/images/pokemon/variant/exp/666-tundra.json @@ -1,34 +1,20 @@ { "1": { - "101010": "101010", "595959": "724b7a", - "a3def1": "a3def1", "303030": "402746", - "f0f0f8": "f0f0f8", - "74bbe9": "74bbe9", "ceab62": "d9edd4", - "d0d0d0": "d0d0d0", "675220": "958c8a", "504a4a": "7f6991", "707068": "a97cbc", - "c3c3c3": "ffeaff", - "539ad9": "539ad9", - "811c1c": "811c1c" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "225b72", - "a3def1": "a3def1", "303030": "003d69", - "f0f0f8": "f0f0f8", - "74bbe9": "74bbe9", "ceab62": "659dd0", - "d0d0d0": "d0d0d0", "675220": "3a76a7", "504a4a": "3a76a7", "707068": "659dd0", - "c3c3c3": "cbfbfb", - "539ad9": "539ad9", - "811c1c": "811c1c" + "c3c3c3": "cbfbfb" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/669-blue.json b/public/images/pokemon/variant/exp/669-blue.json index 7b79007d9e8..59f7d036e0c 100644 --- a/public/images/pokemon/variant/exp/669-blue.json +++ b/public/images/pokemon/variant/exp/669-blue.json @@ -1,12 +1,10 @@ { "1": { "706050": "635c55", - "f8f7f9": "f8f7f9", "7f6f1f": "1b0755", "cfbfaf": "d5cabf", "cfae4f": "350d80", "faef69": "422cc6", - "101010": "101010", "df4f4f": "dc6295", "ef6f6f": "ef6fbe", "1d563a": "95315a", @@ -26,7 +24,6 @@ "cfbfaf": "a5c3ea", "cfae4f": "c4c6bf", "faef69": "fdfffb", - "101010": "101010", "df4f4f": "048080", "ef6f6f": "5fa9dd", "1d563a": "193b94", diff --git a/public/images/pokemon/variant/exp/669-white.json b/public/images/pokemon/variant/exp/669-white.json index 43bea313995..a5e4ba2c84d 100644 --- a/public/images/pokemon/variant/exp/669-white.json +++ b/public/images/pokemon/variant/exp/669-white.json @@ -1,12 +1,10 @@ { "1": { "706050": "635c55", - "f8f7f9": "f8f7f9", "7f6f1f": "110732", "cfbfaf": "d5cabf", "cfae4f": "302b40", "faef69": "4c495c", - "101010": "101010", "df4f4f": "dc6295", "ef6f6f": "ef6fbe", "1d563a": "95315a", @@ -25,7 +23,6 @@ "cfbfaf": "d4dcd5", "cfae4f": "c4c6bf", "faef69": "fdfffb", - "101010": "101010", "df4f4f": "273232", "ef6f6f": "7e878d", "1d563a": "272f2d", diff --git a/public/images/pokemon/variant/exp/669-yellow.json b/public/images/pokemon/variant/exp/669-yellow.json index 232013c6f88..31f1a7761a6 100644 --- a/public/images/pokemon/variant/exp/669-yellow.json +++ b/public/images/pokemon/variant/exp/669-yellow.json @@ -1,12 +1,10 @@ { "1": { "706050": "635c55", - "f8f7f9": "f8f7f9", "7f6f1f": "034020", "cfbfaf": "d5cabf", "cfae4f": "0a6323", "faef69": "1a8e16", - "101010": "101010", "df4f4f": "dc6295", "ef6f6f": "ef6fbe", "1d563a": "95315a", @@ -26,7 +24,6 @@ "cfbfaf": "ead295", "cfae4f": "c4c6bf", "faef69": "fdfffb", - "101010": "101010", "df4f4f": "bf8f10", "ef6f6f": "d7a34e", "1d563a": "945919", diff --git a/public/images/pokemon/variant/exp/670-blue.json b/public/images/pokemon/variant/exp/670-blue.json index 58db57808f3..52532dedd99 100644 --- a/public/images/pokemon/variant/exp/670-blue.json +++ b/public/images/pokemon/variant/exp/670-blue.json @@ -5,7 +5,6 @@ "857402": "240e63", "3c9bcb": "3342b8", "f0eb57": "402bbf", - "231e1e": "231e1e", "dcd405": "33168e", "10765d": "094740", "86b24d": "1d8057", @@ -13,17 +12,10 @@ "107359": "d9567f", "52ab5d": "e493a1", "0f5436": "ae2d63", - "879496": "879496", - "f5f7fa": "f5f7fa", - "cecee6": "cecee6", "74660f": "110732", "c0ba4b": "33168e", "b3ae28": "33168e", - "475148": "475148", - "201d1d": "73141e", - "9b93c4": "9b93c4", - "9e2d39": "9e2d39", - "dc494d": "dc494d" + "201d1d": "73141e" }, "2": { "286786": "215510", @@ -31,7 +23,6 @@ "857402": "b1b1b1", "3c9bcb": "739f1f", "f0eb57": "f8f8f4", - "231e1e": "231e1e", "dcd405": "dcdad8", "10765d": "121c0d", "86b24d": "3c403a", @@ -45,10 +36,7 @@ "74660f": "b1b1b1", "c0ba4b": "dcdad8", "b3ae28": "dcdad8", - "475148": "475148", "201d1d": "0f5741", - "9b93c4": "6195d9", - "9e2d39": "9e2d39", - "dc494d": "dc494d" + "9b93c4": "6195d9" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/670-orange.json b/public/images/pokemon/variant/exp/670-orange.json index d48c0b4e5d6..88befdd6af3 100644 --- a/public/images/pokemon/variant/exp/670-orange.json +++ b/public/images/pokemon/variant/exp/670-orange.json @@ -5,7 +5,6 @@ "857402": "5c0d0d", "c6763c": "aa571d", "f0eb57": "a3382c", - "231e1e": "231e1e", "dcd405": "871723", "10765d": "094740", "86b24d": "1d8057", @@ -13,17 +12,10 @@ "107359": "d9567f", "52ab5d": "e493a1", "0f5436": "ae2d63", - "879496": "879496", - "f5f7fa": "f5f7fa", - "cecee6": "cecee6", "74660f": "5c0d0d", "c0ba4b": "871723", "b3ae28": "871723", - "475148": "475148", - "211d1d": "73141e", - "9b93c4": "9b93c4", - "9e2d39": "9e2d39", - "dc494d": "dc494d" + "211d1d": "73141e" }, "2": { "a24b1e": "215510", @@ -31,7 +23,6 @@ "857402": "b1b1b1", "c6763c": "739f1f", "f0eb57": "f8f8f4", - "231e1e": "231e1e", "dcd405": "dcdad8", "10765d": "121c0d", "86b24d": "3c403a", @@ -45,10 +36,7 @@ "74660f": "b1b1b1", "c0ba4b": "dcdad8", "b3ae28": "dcdad8", - "475148": "475148", "211d1d": "0f5741", - "9b93c4": "d78876", - "9e2d39": "9e2d39", - "dc494d": "dc494d" + "9b93c4": "d78876" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/670-red.json b/public/images/pokemon/variant/exp/670-red.json index 6ce51d9440a..d80b5620fbd 100644 --- a/public/images/pokemon/variant/exp/670-red.json +++ b/public/images/pokemon/variant/exp/670-red.json @@ -5,7 +5,6 @@ "857402": "3e0547", "972935": "a31f35", "f0eb57": "8e1653", - "231e1e": "231e1e", "dcd405": "6a094f", "10765d": "094740", "86b24d": "1d8057", @@ -13,17 +12,10 @@ "107359": "d9567f", "52ab5d": "e493a1", "0f5436": "ae2d63", - "879496": "879496", - "f5f7fa": "f5f7fa", - "cecee6": "cecee6", "74660f": "3e0547", "c0ba4b": "6a094f", "b3ae28": "6a094f", - "475148": "475148", - "211d1d": "73141e", - "9b93c4": "9b93c4", - "9e2d39": "9e2d39", - "dc494d": "dc494d" + "211d1d": "73141e" }, "2": { "6d1b24": "215510", @@ -31,7 +23,6 @@ "857402": "b1b1b1", "972935": "739f1f", "f0eb57": "f8f8f4", - "231e1e": "231e1e", "dcd405": "dcdad8", "10765d": "121c0d", "86b24d": "3c403a", @@ -45,10 +36,7 @@ "74660f": "b1b1b1", "c0ba4b": "dcdad8", "b3ae28": "dcdad8", - "475148": "475148", "211d1d": "0f5741", - "9b93c4": "cc6283", - "9e2d39": "9e2d39", - "dc494d": "dc494d" + "9b93c4": "cc6283" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/670-white.json b/public/images/pokemon/variant/exp/670-white.json index 8b2f572a523..f963a586166 100644 --- a/public/images/pokemon/variant/exp/670-white.json +++ b/public/images/pokemon/variant/exp/670-white.json @@ -5,7 +5,6 @@ "857402": "110732", "d8d8d8": "4c4b55", "f0eb57": "3b374e", - "231e1e": "231e1e", "dcd405": "2c2347", "10765d": "094740", "86b24d": "1d8057", @@ -13,17 +12,10 @@ "107359": "d9567f", "52ab5d": "e493a1", "0f5436": "ae2d63", - "879496": "879496", - "f5f7fa": "f5f7fa", - "cecee6": "cecee6", "74660f": "110732", "c0ba4b": "2c2347", "b3ae28": "2c2347", - "475148": "475148", - "211d1d": "73141e", - "9b93c4": "9b93c4", - "9e2d39": "9e2d39", - "dc494d": "dc494d" + "211d1d": "73141e" }, "2": { "868686": "215510", @@ -31,7 +23,6 @@ "857402": "b1b1b1", "d8d8d8": "739f1f", "f0eb57": "f8f8f4", - "231e1e": "231e1e", "dcd405": "dcdad8", "10765d": "121c0d", "86b24d": "3c403a", @@ -39,16 +30,11 @@ "107359": "505756", "52ab5d": "6d716f", "0f5436": "1c2d32", - "879496": "879496", - "f5f7fa": "f5f7fa", "cecee6": "e3e3eb", "74660f": "b1b1b1", "c0ba4b": "dcdad8", "b3ae28": "dcdad8", - "475148": "475148", "211d1d": "0f5741", - "9b93c4": "bfbfc9", - "9e2d39": "9e2d39", - "dc494d": "dc494d" + "9b93c4": "bfbfc9" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/670-yellow.json b/public/images/pokemon/variant/exp/670-yellow.json index ac7dc7ebe6c..24b67d62070 100644 --- a/public/images/pokemon/variant/exp/670-yellow.json +++ b/public/images/pokemon/variant/exp/670-yellow.json @@ -5,7 +5,6 @@ "857402": "06471f", "d8cb40": "6f950a", "f0eb57": "1a8021", - "231e1e": "231e1e", "dcd405": "0b5c19", "10765d": "094740", "86b24d": "1d8057", @@ -13,17 +12,10 @@ "107359": "d9567f", "52ab5d": "e493a1", "0f5436": "ae2d63", - "879496": "879496", - "f5f7fa": "f5f7fa", - "cecee6": "cecee6", "74660f": "06471f", "c0ba4b": "0b5c19", "b3ae28": "0b5c19", - "475148": "475148", - "211d1d": "73141e", - "9b93c4": "9b93c4", - "9e2d39": "9e2d39", - "dc494d": "dc494d" + "211d1d": "73141e" }, "2": { "857c28": "215510", @@ -31,7 +23,6 @@ "857402": "b1b1b1", "d8cb40": "739f1f", "f0eb57": "f8f8f4", - "231e1e": "231e1e", "dcd405": "dcdad8", "10765d": "121c0d", "86b24d": "3c403a", @@ -45,10 +36,7 @@ "74660f": "b1b1b1", "c0ba4b": "dcdad8", "b3ae28": "dcdad8", - "475148": "475148", "211d1d": "0f5741", - "9b93c4": "c6a46d", - "9e2d39": "9e2d39", - "dc494d": "dc494d" + "9b93c4": "c6a46d" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/6705.json b/public/images/pokemon/variant/exp/6705.json index 3d204b151ce..a248a3df404 100644 --- a/public/images/pokemon/variant/exp/6705.json +++ b/public/images/pokemon/variant/exp/6705.json @@ -6,15 +6,13 @@ "4d454d": "8a2166", "367456": "197497", "50ab89": "3aa8c4", - "101010": "101010", "60606c": "1f1233", "c5cce0": "513981", "949aab": "301848", "aeb5c6": "442967", "b8a1e5": "c7a1e5", "e3e8f4": "cfd6f7", - "665980": "8b69c3", - "8f7db3": "8f7db3" + "665980": "8b69c3" }, "2": { "807380": "2b736f", @@ -23,7 +21,6 @@ "4d454d": "194f51", "367456": "a34205", "50ab89": "d27e26", - "101010": "101010", "60606c": "042329", "c5cce0": "176463", "949aab": "073338", diff --git a/public/images/pokemon/variant/exp/671-blue.json b/public/images/pokemon/variant/exp/671-blue.json index 1da5b13b301..c335dd2b5ed 100644 --- a/public/images/pokemon/variant/exp/671-blue.json +++ b/public/images/pokemon/variant/exp/671-blue.json @@ -1,7 +1,6 @@ { "1": { "4c7385": "200e5c", - "141214": "141214", "7fc9c9": "291371", "abf2f2": "3827a3", "dcfafa": "69c9e3", @@ -12,16 +11,11 @@ "dba86b": "ff3e3e", "3ca68c": "ff91a4", "2c826c": "dc5073", - "5c5a5c": "5c5a5c", "fcfafc": "f8f8f8", - "bcbebc": "bcbebc", - "141614": "141614", "144234": "951f43", "2c7664": "c6306e", - "242624": "242624", "34866c": "dc4c5b", "2c866c": "d53b6a", - "34967c": "ea5574", - "1c1e1c": "1c1e1c" + "34967c": "ea5574" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/671-orange.json b/public/images/pokemon/variant/exp/671-orange.json index b164a67d444..7cc7d14fe6b 100644 --- a/public/images/pokemon/variant/exp/671-orange.json +++ b/public/images/pokemon/variant/exp/671-orange.json @@ -1,7 +1,6 @@ { "1": { "785a44": "631818", - "141214": "141214", "d2ab84": "631818", "fbd5ad": "a34b2c", "f9eadb": "ffbc77", @@ -12,16 +11,11 @@ "c077a0": "fff35a", "3ca68c": "ff91a4", "2c826c": "dc5073", - "5c5a5c": "5c5a5c", "fcfafc": "f8f8f8", - "bcbebc": "bcbebc", - "141614": "141614", "144234": "951f43", "2c7664": "c6306e", - "242624": "242624", "34866c": "dc4c5b", "2c866c": "d53b6a", - "34967c": "ea5574", - "1c1e1c": "1c1e1c" + "34967c": "ea5574" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/671-red.json b/public/images/pokemon/variant/exp/671-red.json index b45ae4f5a2a..9a7d9c36100 100644 --- a/public/images/pokemon/variant/exp/671-red.json +++ b/public/images/pokemon/variant/exp/671-red.json @@ -1,7 +1,6 @@ { "1": { "643e5c": "390614", - "141214": "141214", "a4628c": "4e0c38", "dc96c4": "8e1a55", "dc9ac4": "8e1a55", @@ -14,16 +13,11 @@ "fce24c": "ff7c39", "3ca68c": "ff91a4", "2c826c": "dc5073", - "5c5a5c": "5c5a5c", "fcfafc": "f8f8f8", - "bcbebc": "bcbebc", - "141614": "141614", "144234": "951f43", "2c7664": "c6306e", - "242624": "242624", "34866c": "dc4c5b", "2c866c": "d53b6a", - "34967c": "ea5574", - "1c1e1c": "1c1e1c" + "34967c": "ea5574" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/671-white.json b/public/images/pokemon/variant/exp/671-white.json index 5e46ac97606..fe867762b79 100644 --- a/public/images/pokemon/variant/exp/671-white.json +++ b/public/images/pokemon/variant/exp/671-white.json @@ -1,7 +1,6 @@ { "1": { "858585": "232323", - "141214": "141214", "b6b3b4": "0f0d15", "f3f3f3": "353340", "f9bdc8": "c2c1c6", @@ -11,16 +10,11 @@ "66dede": "ffffff", "3ca68c": "ff91a4", "2c826c": "dc5073", - "5c5a5c": "5c5a5c", "fcfafc": "f8f8f8", - "bcbebc": "bcbebc", - "141614": "141614", "144234": "951f43", "2c7664": "c6306e", - "242624": "242624", "34866c": "dc4c5b", "2c866c": "d53b6a", - "34967c": "ea5574", - "1c1e1c": "1c1e1c" + "34967c": "ea5574" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/671-yellow.json b/public/images/pokemon/variant/exp/671-yellow.json index fae27d650ae..2523db33de1 100644 --- a/public/images/pokemon/variant/exp/671-yellow.json +++ b/public/images/pokemon/variant/exp/671-yellow.json @@ -1,7 +1,6 @@ { "1": { "75714f": "084e40", - "141214": "141214", "d2b98b": "137849", "ffeac0": "22b14a", "fbcfa3": "ffe593", @@ -12,21 +11,15 @@ "a6bd3d": "5f30ff", "3ca68c": "ff91a4", "2c826c": "dc5073", - "5c5a5c": "5c5a5c", "fcfafc": "f8f8f8", - "bcbebc": "bcbebc", - "141614": "141614", "144234": "951f43", "2c7664": "c6306e", - "242624": "242624", "34866c": "dc4c5b", "2c866c": "d53b6a", - "34967c": "ea5574", - "1c1e1c": "1c1e1c" + "34967c": "ea5574" }, "2": { "75714f": "0a320e", - "141214": "141214", "d2b98b": "28392c", "ffeac0": "4d4e46", "fbcfa3": "dfe3e1", @@ -40,13 +33,10 @@ "5c5a5c": "4e3e23", "fcfafc": "fffde0", "bcbebc": "d4c18f", - "141614": "141614", "144234": "951f43", "2c7664": "b18018", - "242624": "242624", "34866c": "dc4c5b", "2c866c": "d53b6a", - "34967c": "ea5574", - "1c1e1c": "1c1e1c" + "34967c": "ea5574" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/6713.json b/public/images/pokemon/variant/exp/6713.json index 662fbf6b5b1..044b2e45f3a 100644 --- a/public/images/pokemon/variant/exp/6713.json +++ b/public/images/pokemon/variant/exp/6713.json @@ -6,7 +6,6 @@ "6b5442": "732334", "335980": "994255", "fbffff": "ffebf2", - "101010": "101010", "492d25": "101010", "553e33": "4c131f", "927863": "994255", @@ -23,7 +22,6 @@ "6b5442": "2c7a75", "335980": "824628", "fbffff": "fff2ad", - "101010": "101010", "492d25": "00403d", "553e33": "006761", "927863": "5ba6a1", diff --git a/public/images/pokemon/variant/exp/672.json b/public/images/pokemon/variant/exp/672.json index b13a8cd34c0..c4e6dd98661 100644 --- a/public/images/pokemon/variant/exp/672.json +++ b/public/images/pokemon/variant/exp/672.json @@ -1,7 +1,6 @@ { "1": { "3d3128": "642509", - "000000": "000000", "67615b": "9e2c3d", "615140": "89431b", "7e6d5a": "b3743e", @@ -11,14 +10,12 @@ "0e5d58": "8c6859", "0d8374": "d2af94", "09a77c": "f8f0e2", - "cabfbb": "cabfbb", "c16a3f": "321512", "a8905c": "4b2525", "c6b379": "552d30" }, "2": { "3d3128": "161526", - "000000": "000000", "67615b": "2d2b40", "615140": "4c7a68", "7e6d5a": "72b692", @@ -28,7 +25,6 @@ "0e5d58": "363e6c", "0d8374": "6885b6", "09a77c": "96d5e3", - "cabfbb": "cabfbb", "c16a3f": "612c6b", "a8905c": "854d87", "c6b379": "9f5f9b" diff --git a/public/images/pokemon/variant/exp/673.json b/public/images/pokemon/variant/exp/673.json index d70da2c45e2..f9c2207744d 100644 --- a/public/images/pokemon/variant/exp/673.json +++ b/public/images/pokemon/variant/exp/673.json @@ -3,7 +3,6 @@ "3d3128": "641028", "67615b": "9e2c3d", "554538": "781329", - "000000": "000000", "0e5d58": "8c6859", "0d835a": "d2af94", "74593a": "61240a", @@ -12,7 +11,6 @@ "cabfbb": "e3a378", "a8905c": "9e4e21", "c16a3f": "552d30", - "0d8374": "0d8374", "c6b379": "ce8648", "ae492a": "321512" }, @@ -20,7 +18,6 @@ "3d3128": "121123", "67615b": "201e33", "554538": "201e33", - "000000": "000000", "0e5d58": "36466c", "0d835a": "6893b6", "74593a": "513a6b", @@ -29,7 +26,6 @@ "cabfbb": "d4b3d7", "a8905c": "74a0a5", "c16a3f": "9f5f9b", - "0d8374": "0d8374", "c6b379": "c3e1cf", "ae492a": "612c6b" } diff --git a/public/images/pokemon/variant/exp/677.json b/public/images/pokemon/variant/exp/677.json index b532dd61c77..ee852b93210 100644 --- a/public/images/pokemon/variant/exp/677.json +++ b/public/images/pokemon/variant/exp/677.json @@ -6,10 +6,8 @@ "8a8a99": "943b5d", "f8f8f8": "f1f0e4", "cda4cd": "43adaf", - "ffffff": "ffffff", "3c6172": "30237a", - "995a99": "29767f", - "070707": "070707" + "995a99": "29767f" }, "2": { "5a5a65": "243e41", @@ -18,9 +16,7 @@ "8a8a99": "426b62", "f8f8f8": "67415e", "cda4cd": "ff657d", - "ffffff": "ffffff", "3c6172": "69004e", - "995a99": "d13955", - "070707": "070707" + "995a99": "d13955" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/678-female.json b/public/images/pokemon/variant/exp/678-female.json index cf5423c1547..df4f7b5c038 100644 --- a/public/images/pokemon/variant/exp/678-female.json +++ b/public/images/pokemon/variant/exp/678-female.json @@ -6,9 +6,7 @@ "17294d": "47182e", "365fb3": "a5346b", "264480": "76264d", - "101010": "101010", "ffe54f": "3fbae2", - "ffffff": "ffffff", "d92121": "415493", "c9ad20": "4b86bd" }, @@ -19,9 +17,7 @@ "17294d": "1d3f33", "365fb3": "7bd38d", "264480": "47946c", - "101010": "101010", "ffe54f": "ff85ad", - "ffffff": "ffffff", "d92121": "9d0067", "c9ad20": "f2557b" } diff --git a/public/images/pokemon/variant/exp/678.json b/public/images/pokemon/variant/exp/678.json index 972a970a59c..d113058455a 100644 --- a/public/images/pokemon/variant/exp/678.json +++ b/public/images/pokemon/variant/exp/678.json @@ -4,23 +4,18 @@ "f8f8f8": "f8f5cd", "bfbfbf": "d5c49f", "17294d": "47182e", - "101010": "101010", "365fb3": "a5346b", "264480": "76264d", - "aaf2f2": "aaf2f2", - "179958": "415493", - "ffffff": "ffffff" + "179958": "415493" }, "2": { "737373": "3a1633", "f8f8f8": "855577", "bfbfbf": "613d5a", "17294d": "1d3f33", - "101010": "101010", "365fb3": "7bd38d", "264480": "47946c", "aaf2f2": "ff867c", - "179958": "9a0066", - "ffffff": "ffffff" + "179958": "9a0066" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/691.json b/public/images/pokemon/variant/exp/691.json index 71b08e6aea7..8c9aa3d7b71 100644 --- a/public/images/pokemon/variant/exp/691.json +++ b/public/images/pokemon/variant/exp/691.json @@ -2,7 +2,6 @@ "1": { "4d4d2e": "31246d", "b3b36b": "403c94", - "101010": "101010", "732230": "310511", "f24965": "5a152f", "b3364a": "470b1e", diff --git a/public/images/pokemon/variant/exp/696.json b/public/images/pokemon/variant/exp/696.json index 677f5d98578..364de98fb15 100644 --- a/public/images/pokemon/variant/exp/696.json +++ b/public/images/pokemon/variant/exp/696.json @@ -1,51 +1,33 @@ { "1": { -"734517": "5e0b0b", -"ffa64c": "a50d0d", -"4a322c": "023425", -"404040": "4c3216", -"101010": "101010", -"65483a": "0b4c29", -"966858": "1b6430", -"f8f8f8": "dfdea7", -"8c8c8c": "ad8c63", -"bfbfbf": "cbbe8c", -"000000": "000000", -"b73b6b": "4c3216", -"ff949e": "c98c68", -"b3b9b9": "cbbe8c", -"3f3d3d": "4c3216" -}, -"2": { -"734517": "395cb7", -"ffa64c": "d2e9ff", -"4a322c": "3e1f18", -"404040": "250860", -"101010": "101010", -"65483a": "644943", -"966858": "83726e", -"f8f8f8": "6e46a7", -"8c8c8c": "411684", -"bfbfbf": "593097", -"000000": "decaff", -"b73b6b": "395cb7", -"ff949e": "79c8d3", -"b3b9b9": "79c8d3", -"3f3d3d": "395cb7" -} -} - - - - - - - - - - - - - - - + "734517": "5e0b0b", + "ffa64c": "a50d0d", + "4a322c": "023425", + "404040": "4c3216", + "65483a": "0b4c29", + "966858": "1b6430", + "f8f8f8": "dfdea7", + "8c8c8c": "ad8c63", + "bfbfbf": "cbbe8c", + "b73b6b": "4c3216", + "ff949e": "c98c68", + "b3b9b9": "cbbe8c", + "3f3d3d": "4c3216" + }, + "2": { + "734517": "395cb7", + "ffa64c": "d2e9ff", + "4a322c": "3e1f18", + "404040": "250860", + "65483a": "644943", + "966858": "83726e", + "f8f8f8": "6e46a7", + "8c8c8c": "411684", + "bfbfbf": "593097", + "000000": "decaff", + "b73b6b": "395cb7", + "ff949e": "79c8d3", + "b3b9b9": "79c8d3", + "3f3d3d": "395cb7" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/697.json b/public/images/pokemon/variant/exp/697.json index b8d305022f5..dcb3a348dd9 100644 --- a/public/images/pokemon/variant/exp/697.json +++ b/public/images/pokemon/variant/exp/697.json @@ -1,45 +1,38 @@ { -"1": { -"080808": "080808", -"32252c": "3e1e17", -"50131e": "0b241e", -"722533": "153626", -"54434c": "4c3216", -"964b1c": "5e0b0b", -"963e4e": "285234", -"bf7545": "971c1c", -"f19d5a": "b52424", -"9f9d98": "ad8c63", -"cccccc": "cbbe8c", -"fafafa": "dfdea7", -"cac2c2": "cbbe8c", -"f7eeee": "dfdea7", -"53414b": "4c3216", -"30222a": "3e1e17", -"53454d": "4c3216" -}, -"2": { -"080808": "080808", -"32252c": "0d0124", -"50131e": "573b36", -"722533": "83726e", -"54434c": "170c25", -"964b1c": "9d5390", -"963e4e": "ab9b97", -"bf7545": "ce7ecc", -"f19d5a": "f4dbf6", -"9f9d98": "26173b", -"cccccc": "33214f", -"fafafa": "4b2e64", -"cac2c2": "ce7ecc", -"f7eeee": "f4dbf6", -"53414b": "dea5dd", -"30222a": "ce7ecc", -"53454d": "f4dbf6" -} -} - - - - - + "1": { + "32252c": "3e1e17", + "50131e": "0b241e", + "722533": "153626", + "54434c": "4c3216", + "964b1c": "5e0b0b", + "963e4e": "285234", + "bf7545": "971c1c", + "f19d5a": "b52424", + "9f9d98": "ad8c63", + "cccccc": "cbbe8c", + "fafafa": "dfdea7", + "cac2c2": "cbbe8c", + "f7eeee": "dfdea7", + "53414b": "4c3216", + "30222a": "3e1e17", + "53454d": "4c3216" + }, + "2": { + "32252c": "0d0124", + "50131e": "573b36", + "722533": "83726e", + "54434c": "170c25", + "964b1c": "9d5390", + "963e4e": "ab9b97", + "bf7545": "ce7ecc", + "f19d5a": "f4dbf6", + "9f9d98": "26173b", + "cccccc": "33214f", + "fafafa": "4b2e64", + "cac2c2": "ce7ecc", + "f7eeee": "f4dbf6", + "53414b": "dea5dd", + "30222a": "ce7ecc", + "53454d": "f4dbf6" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/699.json b/public/images/pokemon/variant/exp/699.json index 107352097cd..fe543a48ddf 100644 --- a/public/images/pokemon/variant/exp/699.json +++ b/public/images/pokemon/variant/exp/699.json @@ -9,10 +9,8 @@ "657dac": "c44f5d", "81a0dc": "e5756b", "4e568b": "a03c58", - "101010": "101010", "ffffff": "ffeac0", "4cc3ff": "c2d5ff", - "f8f8f8": "f8f8f8", "3689b3": "8487e1", "3d8eb6": "12545e", "53c5ff": "1c7376", @@ -30,10 +28,8 @@ "657dac": "2f4978", "81a0dc": "3f648b", "4e568b": "243369", - "101010": "101010", "ffffff": "bae8ff", "4cc3ff": "ffea82", - "f8f8f8": "f8f8f8", "3689b3": "efbe63", "3d8eb6": "852d6b", "53c5ff": "ab467e", diff --git a/public/images/pokemon/variant/exp/700.json b/public/images/pokemon/variant/exp/700.json index 1189d463f2b..2a8ecba3b8f 100644 --- a/public/images/pokemon/variant/exp/700.json +++ b/public/images/pokemon/variant/exp/700.json @@ -1,32 +1,28 @@ { -"1": { -"101010": "101010", -"8a2843": "452f89", -"235a99": "a63071", -"895c72": "5c6889", -"d85a7a": "996cd2", -"528fcc": "d648b7", -"a88d8c": "8c8fa8", -"f18a78": "b52d27", -"fa8caa": "c7a6ee", -"64c8f3": "e974db", -"d9c3c3": "c3c5d9", -"fff5f5": "f7f5ff", -"65798c": "65798c" -}, -"2": { -"101010": "101010", -"8a2843": "0e6134", -"235a99": "900d1b", -"895c72": "7f5c89", -"d85a7a": "5dae7d", -"528fcc": "dd3d4f", -"a88d8c": "7f5c89", -"f18a78": "d14ea4", -"fa8caa": "7dec9d", -"64c8f3": "ff9a68", -"d9c3c3": "d9c3d6", -"fff5f5": "fff5fc", -"65798c": "65798c" -} + "1": { + "8a2843": "452f89", + "235a99": "a63071", + "895c72": "5c6889", + "d85a7a": "996cd2", + "528fcc": "d648b7", + "a88d8c": "8c8fa8", + "f18a78": "b52d27", + "fa8caa": "c7a6ee", + "64c8f3": "e974db", + "d9c3c3": "c3c5d9", + "fff5f5": "f7f5ff" + }, + "2": { + "8a2843": "0e6134", + "235a99": "900d1b", + "895c72": "7f5c89", + "d85a7a": "5dae7d", + "528fcc": "dd3d4f", + "a88d8c": "7f5c89", + "f18a78": "d14ea4", + "fa8caa": "7dec9d", + "64c8f3": "ff9a68", + "d9c3c3": "d9c3d6", + "fff5f5": "fff5fc" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/702.json b/public/images/pokemon/variant/exp/702.json index 12feb29a0fd..adea0fb21eb 100644 --- a/public/images/pokemon/variant/exp/702.json +++ b/public/images/pokemon/variant/exp/702.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "262626": "2a3b5e", "4d4d4d": "6789b3", "bfbf86": "a3d1cc", @@ -10,12 +9,10 @@ "f2c261": "ffd3b6", "bf994c": "e49f84", "1d1d1d": "1a1c45", - "f8f8f8": "f8f8f8", "464646": "424b8f", "d97d21": "7cd6a1" }, "2": { - "101010": "101010", "262626": "072d38", "4d4d4d": "197870", "bfbf86": "aaa8d6", @@ -25,7 +22,6 @@ "f2c261": "5f3662", "bf994c": "432249", "1d1d1d": "02172d", - "f8f8f8": "f8f8f8", "464646": "17646c", "d97d21": "d2fff1" } diff --git a/public/images/pokemon/variant/exp/704.json b/public/images/pokemon/variant/exp/704.json index e292d6fb41f..48a96fa7ff9 100644 --- a/public/images/pokemon/variant/exp/704.json +++ b/public/images/pokemon/variant/exp/704.json @@ -4,7 +4,6 @@ "f2daf2": "fbb3d2", "bfacbf": "e56ca6", "4d454d": "8a2166", - "101010": "101010", "4d993d": "197497", "66cc52": "3aa8c4", "b8a1e5": "c7a1e5", @@ -18,7 +17,6 @@ "f2daf2": "92d8c8", "bfacbf": "63a99e", "4d454d": "134557", - "101010": "101010", "4d993d": "a34205", "66cc52": "d27e26", "b8a1e5": "4a9699", diff --git a/public/images/pokemon/variant/exp/705.json b/public/images/pokemon/variant/exp/705.json index bf9aa91eb4b..037ff41c585 100644 --- a/public/images/pokemon/variant/exp/705.json +++ b/public/images/pokemon/variant/exp/705.json @@ -6,7 +6,6 @@ "4d454d": "8a2166", "307922": "aa6a00", "46b030": "ffd047", - "101010": "101010", "98bd51": "197497", "d2e79e": "3aa8c4", "647543": "0c5474", @@ -22,7 +21,6 @@ "4d454d": "194f51", "307922": "007d61", "46b030": "49ffbf", - "101010": "101010", "98bd51": "a34205", "d2e79e": "d27e26", "647543": "842401", diff --git a/public/images/pokemon/variant/exp/706.json b/public/images/pokemon/variant/exp/706.json index 41077f9d96b..1dd4602c927 100644 --- a/public/images/pokemon/variant/exp/706.json +++ b/public/images/pokemon/variant/exp/706.json @@ -5,8 +5,6 @@ "bfacbf": "da75a5", "f2daf2": "f1a4c5", "998a99": "b24c86", - "f8f8f8": "f8f8f8", - "101010": "101010", "4d993d": "197497", "336629": "0c5474", "66cc52": "3aa8c4", @@ -21,8 +19,6 @@ "bfacbf": "5db6a9", "f2daf2": "9cead8", "998a99": "2b736f", - "f8f8f8": "f8f8f8", - "101010": "101010", "4d993d": "a34205", "336629": "842401", "66cc52": "d27e26", diff --git a/public/images/pokemon/variant/exp/709.json b/public/images/pokemon/variant/exp/709.json index f249558388a..58b319ead4f 100644 --- a/public/images/pokemon/variant/exp/709.json +++ b/public/images/pokemon/variant/exp/709.json @@ -5,7 +5,6 @@ "12602e": "361f1b", "23b856": "907f76", "128b3b": "4d362e", - "101010": "101010", "915e45": "36384f", "292a40": "a14743", "f92d45": "5996d2", @@ -17,7 +16,6 @@ "12602e": "761d52", "23b856": "da7ea8", "128b3b": "a94079", - "101010": "101010", "915e45": "56323a", "292a40": "9c92a4", "f92d45": "e18933", diff --git a/public/images/pokemon/variant/exp/710.json b/public/images/pokemon/variant/exp/710.json index d63ab9ca323..ef2ef3c5bcd 100644 --- a/public/images/pokemon/variant/exp/710.json +++ b/public/images/pokemon/variant/exp/710.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "61532d": "72a966", "3d301a": "366432", "261d0e": "213a22", @@ -14,7 +13,6 @@ "fff0a5": "fafafa" }, "2": { - "101010": "101010", "61532d": "425947", "3d301a": "2a4031", "261d0e": "262626", diff --git a/public/images/pokemon/variant/exp/711.json b/public/images/pokemon/variant/exp/711.json index df3799ce802..0a34aa48c70 100644 --- a/public/images/pokemon/variant/exp/711.json +++ b/public/images/pokemon/variant/exp/711.json @@ -4,7 +4,6 @@ "61532d": "593a59", "3d301a": "311835", "bf634c": "262626", - "101010": "101010", "f49670": "404040", "894331": "171717", "e09935": "e9f25b", @@ -15,11 +14,9 @@ "fff0a5": "f1ffa7" }, "1": { - "261d0e": "261d0e", "61532d": "434348", "3d301a": "262626", "bf634c": "325b34", - "101010": "101010", "f49670": "4d7d4b", "894331": "153f18", "e09935": "ffa858", @@ -34,7 +31,6 @@ "61532d": "e56146", "3d301a": "9a2d25", "bf634c": "213c28", - "101010": "101010", "f49670": "36593d", "894331": "102316", "e09935": "f1c353", diff --git a/public/images/pokemon/variant/exp/712.json b/public/images/pokemon/variant/exp/712.json index 369ba54cd23..9e83305dab5 100644 --- a/public/images/pokemon/variant/exp/712.json +++ b/public/images/pokemon/variant/exp/712.json @@ -5,14 +5,10 @@ "58647b": "bf566d", "719aa9": "d97389", "b3eaf8": "ffbfda", - "101010": "101010", "705c99": "732334", "f2ba49": "9dcc3e", "967acc": "994255", - "ffd98c": "cbe696", - "bfbfbf": "bfbfbf", - "737373": "737373", - "f8f8f8": "f8f8f8" + "ffd98c": "cbe696" }, "2": { "a5c4d2": "e69e2b", @@ -20,7 +16,6 @@ "58647b": "a8632a", "719aa9": "cc7b1e", "b3eaf8": "fcc95c", - "101010": "101010", "705c99": "006761", "f2ba49": "6cb3ae", "967acc": "2c7a75", diff --git a/public/images/pokemon/variant/exp/713.json b/public/images/pokemon/variant/exp/713.json index ca45360ecea..af98bddcc6d 100644 --- a/public/images/pokemon/variant/exp/713.json +++ b/public/images/pokemon/variant/exp/713.json @@ -7,12 +7,8 @@ "77b8d9": "d97389", "335980": "994255", "f2ffff": "ffebf2", - "101010": "101010", - "737373": "737373", - "bfbfbf": "bfbfbf", "efab34": "9dcc3e", - "ffe46a": "cbe696", - "f8f8f8": "f8f8f8" + "ffe46a": "cbe696" }, "2": { "608cba": "a8632a", @@ -22,8 +18,6 @@ "77b8d9": "cc7b1e", "335980": "824628", "f2ffff": "fff2ad", - "101010": "101010", - "737373": "737373", "bfbfbf": "6cb3ae", "efab34": "6cb3ae", "ffe46a": "b9f2ee", diff --git a/public/images/pokemon/variant/exp/715.json b/public/images/pokemon/variant/exp/715.json index 0e97862f10b..b56ffa5ece4 100644 --- a/public/images/pokemon/variant/exp/715.json +++ b/public/images/pokemon/variant/exp/715.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "404040": "5f32b1", "6a3f73": "0f103c", "287366": "731338", @@ -14,25 +13,22 @@ "737373": "563d8f", "f8f8f8": "d6c8f1", "e52e2e": "903b78", - "000000": "000000", - "ffe14c": "ff8a58" + "ffe14c": "ff8a58" }, "2": { - "101010": "101010", - "404040": "c29484", - "6a3f73": "3b0c18", - "287366": "832714", - "3aa694": "b8552c", - "8e5499": "7c2928", - "bfbfbf": "43191e", - "595959": "ecd3c3", - "801a1a": "7c0907", - "4cd9c1": "dd834c", - "bd70cc": "5b1922", - "737373": "1d060c", - "f8f8f8": "5a2a2b", - "e52e2e": "ad3419", - "000000": "000000", - "ffe14c": "49ffcd" + "404040": "c29484", + "6a3f73": "3b0c18", + "287366": "832714", + "3aa694": "b8552c", + "8e5499": "7c2928", + "bfbfbf": "43191e", + "595959": "ecd3c3", + "801a1a": "7c0907", + "4cd9c1": "dd834c", + "bd70cc": "5b1922", + "737373": "1d060c", + "f8f8f8": "5a2a2b", + "e52e2e": "ad3419", + "ffe14c": "49ffcd" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/716-active.json b/public/images/pokemon/variant/exp/716-active.json index 494bdcbd642..62c4c8887d2 100644 --- a/public/images/pokemon/variant/exp/716-active.json +++ b/public/images/pokemon/variant/exp/716-active.json @@ -9,10 +9,8 @@ "3d5c99": "1e3824", "243659": "132b1b", "5c8ae5": "324c37", - "000000": "000000", "2b2b2e": "518554", - "404040": "7ca376", - "3c3233": "3c3233" + "404040": "7ca376" }, "2": { "807659": "210f14", @@ -24,9 +22,7 @@ "3d5c99": "643071", "243659": "37134c", "5c8ae5": "884e9f", - "000000": "000000", "2b2b2e": "d284b6", - "404040": "faaed8", - "3c3233": "3c3233" + "404040": "faaed8" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/716-neutral.json b/public/images/pokemon/variant/exp/716-neutral.json index 7226d4f0a81..a1716e947c9 100644 --- a/public/images/pokemon/variant/exp/716-neutral.json +++ b/public/images/pokemon/variant/exp/716-neutral.json @@ -3,7 +3,6 @@ "364566": "603f3c", "6eaed1": "ac8781", "a7d6e8": "bfa19a", - "000000": "000000", "3d5c99": "1e3824", "243659": "132b1b", "5c8ae5": "324c37", @@ -14,7 +13,6 @@ "364566": "230d1e", "6eaed1": "42283b", "a7d6e8": "613e56", - "000000": "000000", "3d5c99": "643071", "243659": "37134c", "5c8ae5": "884e9f", diff --git a/public/images/pokemon/variant/exp/728.json b/public/images/pokemon/variant/exp/728.json index a9c7155ec91..899ae80c996 100644 --- a/public/images/pokemon/variant/exp/728.json +++ b/public/images/pokemon/variant/exp/728.json @@ -1,10 +1,8 @@ { "1": { - "101010": "101010", "1e3a66": "363d2f", "243a66": "00473d", "733f50": "a62c20", - "404040": "404040", "b3627d": "e54c41", "2c4f8c": "5a6154", "314f8c": "006355", @@ -13,7 +11,6 @@ "5f9ba6": "b56e76", "639ba6": "858d7d", "6c90d9": "14af82", - "808080": "808080", "bfbfbf": "c2beb4", "9edae5": "f7c1c5", "a1dae5": "92b599", @@ -21,11 +18,9 @@ "fefefe": "fff6e2" }, "2": { - "101010": "101010", "1e3a66": "773f46", "243a66": "54041b", "733f50": "620a33", - "404040": "404040", "b3627d": "a7225c", "2c4f8c": "a45f67", "314f8c": "770f29", @@ -34,7 +29,6 @@ "5f9ba6": "408c62", "639ba6": "b88389", "6c90d9": "be294a", - "808080": "808080", "bfbfbf": "bfb4b9", "9edae5": "91e6a2", "a1dae5": "f7c1c5", diff --git a/public/images/pokemon/variant/exp/729.json b/public/images/pokemon/variant/exp/729.json index 7b196fda526..abfaaf0fc7e 100644 --- a/public/images/pokemon/variant/exp/729.json +++ b/public/images/pokemon/variant/exp/729.json @@ -1,7 +1,5 @@ { "1": { - "101010": "101010", - "2d2e31": "2d2e31", "733f50": "bb402f", "476d72": "be665d", "b3627d": "fb6051", @@ -10,7 +8,6 @@ "639ba6": "b56e76", "2d8ec4": "009a88", "1eb9ee": "0ccfa2", - "808080": "808080", "8dafaf": "ff989e", "bfbfbf": "c2beb4", "bad8d8": "ffbd98", @@ -22,8 +19,6 @@ "6f3f50": "bb402f" }, "2": { - "101010": "101010", - "2d2e31": "2d2e31", "733f50": "620a33", "476d72": "793f5e", "b3627d": "a7225c", @@ -32,7 +27,6 @@ "639ba6": "408c62", "2d8ec4": "952c3f", "1eb9ee": "c6496f", - "808080": "808080", "8dafaf": "b681a6", "bfbfbf": "bfb4b9", "bad8d8": "deabce", diff --git a/public/images/pokemon/variant/exp/730.json b/public/images/pokemon/variant/exp/730.json index 5c8deeb52b2..812f0d1db30 100644 --- a/public/images/pokemon/variant/exp/730.json +++ b/public/images/pokemon/variant/exp/730.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "843843": "a62c20", "8d3f4a": "a62c20", "c46074": "e54c41", @@ -21,11 +20,9 @@ "c0bdc1": "beaac0", "aac7e6": "ea7c5b", "f8f8f8": "fff2d4", - "faf8f8": "f1e8f1", - "fef8f8": "fef8f8" + "faf8f8": "f1e8f1" }, "2": { - "101010": "101010", "843843": "5c2141", "8d3f4a": "1d1638", "c46074": "c17b97", @@ -46,7 +43,6 @@ "c0bdc1": "c0b4a5", "aac7e6": "e9a5c0", "f8f8f8": "f5edee", - "faf8f8": "f5f3e3", - "fef8f8": "fef8f8" + "faf8f8": "f5f3e3" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/734.json b/public/images/pokemon/variant/exp/734.json index f9e52b2d090..128fd4ce9c6 100644 --- a/public/images/pokemon/variant/exp/734.json +++ b/public/images/pokemon/variant/exp/734.json @@ -3,32 +3,20 @@ "9c5b50": "2a3f52", "753933": "03192d", "6b4f27": "523a44", - "070707": "070707", "ba836d": "35576b", "f0cd84": "c1aaaa", "c19462": "907e82", "9b7357": "523a44", - "ea8c96": "c1715c", - "322f2c": "322f2c", - "f5f5f5": "f5f5f5", - "686d77": "686d77", - "bbbdc1": "bbbdc1", - "a7aac2": "a7aac2" + "ea8c96": "c1715c" }, "2": { "9c5b50": "786a66", "753933": "26201f", "6b4f27": "241b1b", - "070707": "070707", "ba836d": "a69c98", "f0cd84": "4d4242", "c19462": "362e2e", "9b7357": "241b1b", - "ea8c96": "a38b89", - "322f2c": "322f2c", - "f5f5f5": "f5f5f5", - "686d77": "686d77", - "bbbdc1": "bbbdc1", - "a7aac2": "a7aac2" + "ea8c96": "a38b89" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/735.json b/public/images/pokemon/variant/exp/735.json index 3949cbe4157..18ebd802f82 100644 --- a/public/images/pokemon/variant/exp/735.json +++ b/public/images/pokemon/variant/exp/735.json @@ -5,13 +5,9 @@ "8d473d": "2a3252", "602c24": "03102d", "af754e": "354c6b", - "101010": "101010", "b6973a": "7a6a6d", "393633": "5f3d1c", - "f8f8f8": "f8f8f8", - "787885": "787885", "ea6f91": "c1715c", - "a3a3ab": "a3a3ab", "2d2b28": "5a3215" }, "2": { @@ -20,10 +16,7 @@ "8d473d": "90827e", "602c24": "524b4b", "af754e": "ada6a4", - "101010": "101010", "b6973a": "362e2e", - "393633": "393633", - "f8f8f8": "f8f8f8", "787885": "6e6e7b", "ea6f91": "846a68", "a3a3ab": "989898", diff --git a/public/images/pokemon/variant/exp/748.json b/public/images/pokemon/variant/exp/748.json index 280c676293a..5ffc26903ab 100644 --- a/public/images/pokemon/variant/exp/748.json +++ b/public/images/pokemon/variant/exp/748.json @@ -1,7 +1,6 @@ { "1": { "943732": "490a3c", - "101010": "101010", "f28c4f": "a21f90", "e25025": "91138c", "6f97c4": "be583d", @@ -9,7 +8,6 @@ "93d1d7": "df7b52", "711a6a": "81463e", "d76fa5": "edd5ca", - "171539": "171539", "3a3f6d": "462952", "525898": "6c3776", "b7429a": "d29784", @@ -18,7 +16,6 @@ }, "2": { "943732": "c30e49", - "101010": "101010", "f28c4f": "ff3f5a", "e25025": "e12350", "6f97c4": "359d5d", diff --git a/public/images/pokemon/variant/exp/752.json b/public/images/pokemon/variant/exp/752.json index c6c3009cd1e..8f7ea16ae4d 100644 --- a/public/images/pokemon/variant/exp/752.json +++ b/public/images/pokemon/variant/exp/752.json @@ -2,11 +2,9 @@ "1": { "859ba7": "7c3b51", "d3edfb": "ffc8d1", - "ffffff": "ffffff", "c2d3dc": "d187a0", "c3d600": "673252", "707b0a": "3a112f", - "000000": "000000", "a8ba00": "4e1f42", "423e35": "395677", "817b6e": "5ea3b8", @@ -20,15 +18,12 @@ "2": { "859ba7": "55506a", "d3edfb": "dce7ee", - "ffffff": "ffffff", "c2d3dc": "a7a2bc", "c3d600": "72add9", "707b0a": "263756", - "000000": "000000", "a8ba00": "4980ac", "423e35": "75291a", "817b6e": "bc521d", - "1e414f": "1e414f", "424a56": "f5cf52", "62c4e5": "3b5373", "1a1c1e": "834723", diff --git a/public/images/pokemon/variant/exp/753.json b/public/images/pokemon/variant/exp/753.json index 78eaa04fb78..d6ffc97c2da 100644 --- a/public/images/pokemon/variant/exp/753.json +++ b/public/images/pokemon/variant/exp/753.json @@ -3,7 +3,6 @@ "234028": "2e1643", "468050": "3e2253", "5ba668": "4e2c62", - "101010": "101010", "315945": "0e2616", "69bf94": "27452c", "549977": "1b3822", @@ -19,7 +18,6 @@ "234028": "812255", "468050": "ad3a87", "5ba668": "ce54b0", - "101010": "101010", "315945": "441342", "69bf94": "6e3472", "549977": "5a215a", diff --git a/public/images/pokemon/variant/exp/754.json b/public/images/pokemon/variant/exp/754.json index c8fcf792f01..07ba33a140a 100644 --- a/public/images/pokemon/variant/exp/754.json +++ b/public/images/pokemon/variant/exp/754.json @@ -6,7 +6,6 @@ "315945": "122a1a", "d98d9a": "c95623", "69bf94": "314e36", - "101010": "101010", "cc5266": "ac351f", "404040": "3c1717", "bfbfbf": "c9d6b7", @@ -20,7 +19,6 @@ "315945": "c940c4", "d98d9a": "2944a2", "69bf94": "f881ff", - "101010": "101010", "cc5266": "343381", "404040": "0c0a3f", "bfbfbf": "feccff", diff --git a/public/images/pokemon/variant/exp/755.json b/public/images/pokemon/variant/exp/755.json index 2d3ff38fb4b..8d6a093c4bb 100644 --- a/public/images/pokemon/variant/exp/755.json +++ b/public/images/pokemon/variant/exp/755.json @@ -5,7 +5,6 @@ "fffbcf": "e4c3d0", "f1b6c8": "e76d5b", "e07c8d": "d64742", - "101010": "101010", "fdff97": "e4c3d0", "b591c4": "803a5c", "9d70b1": "5c2445", @@ -24,7 +23,6 @@ "fffbcf": "d5f9f2", "f1b6c8": "b0ffe1", "e07c8d": "7ae7c9", - "101010": "101010", "fdff97": "d5f9f2", "b591c4": "3a4b75", "9d70b1": "2c336b", diff --git a/public/images/pokemon/variant/exp/756.json b/public/images/pokemon/variant/exp/756.json index d5e8d1f15f1..210aac2a716 100644 --- a/public/images/pokemon/variant/exp/756.json +++ b/public/images/pokemon/variant/exp/756.json @@ -7,7 +7,6 @@ "b9ff5a": "e5aff3", "dcff44": "e5aff3", "c9e161": "e5aff3", - "101010": "101010", "a0d15e": "866eaf", "9867ad": "d64742", "764b67": "451233", @@ -26,7 +25,6 @@ "b9ff5a": "dffffa", "dcff44": "dffffa", "c9e161": "dffffa", - "101010": "101010", "a0d15e": "b0ffe1", "9867ad": "2c336b", "764b67": "0d7a66", diff --git a/public/images/pokemon/variant/exp/761.json b/public/images/pokemon/variant/exp/761.json index 7256c2078c0..0e954ce225b 100644 --- a/public/images/pokemon/variant/exp/761.json +++ b/public/images/pokemon/variant/exp/761.json @@ -3,27 +3,21 @@ "476629": "215e59", "6b993d": "398793", "8fcc52": "70d2e1", - "101010": "101010", "80334d": "251936", "b3476b": "7e5cdb", "e55c8a": "9f86e4", - "f8f8f8": "f8f8f8", "ffe14c": "7e5cdb", - "e38c9c": "e38c8c", - "737373": "737373", - "bfbfbf": "bfbfbf" + "e38c9c": "e38c8c" }, "2": { "476629": "3e0a11", "6b993d": "5a0a16", "8fcc52": "86232e", - "101010": "101010", "80334d": "101010", "b3476b": "254536", "e55c8a": "2c574a", "f8f8f8": "e4c59e", "ffe14c": "16664a", - "e38c9c": "e38c9c", "737373": "72585f", "bfbfbf": "af8260" } diff --git a/public/images/pokemon/variant/exp/762.json b/public/images/pokemon/variant/exp/762.json index 4a0854f4126..1cfd5d9a113 100644 --- a/public/images/pokemon/variant/exp/762.json +++ b/public/images/pokemon/variant/exp/762.json @@ -2,13 +2,9 @@ "1": { "446328": "215e59", "96c853": "70d2e1", - "0f0f0f": "0f0f0f", "659344": "398793", "ebe130": "e66556", - "c7b8c4": "c7b8c4", - "fcfcfc": "fcfcfc", "ce466b": "a787ff", - "72585f": "72585f", "962354": "45366e", "f26284": "7e5cdb", "6a1533": "251936", @@ -17,7 +13,6 @@ "2": { "446328": "3e0a11", "96c853": "86232e", - "0f0f0f": "0f0f0f", "659344": "5a0a16", "ebe130": "5c0505", "c7b8c4": "af8260", diff --git a/public/images/pokemon/variant/exp/763.json b/public/images/pokemon/variant/exp/763.json index 4f1aa828fb2..6eb153b362b 100644 --- a/public/images/pokemon/variant/exp/763.json +++ b/public/images/pokemon/variant/exp/763.json @@ -6,11 +6,7 @@ "fbf21d": "e66556", "455433": "215e59", "95b76d": "398793", - "000000": "000000", "d0fa9f": "70d2e1", - "b7979f": "b7979f", - "ffffff": "ffffff", - "615053": "615053", "d2677e": "7e5cdb", "ffa3b6": "9f86e4", "baa90e": "af3e31", @@ -23,7 +19,6 @@ "fbf21d": "420b0b", "455433": "5c0a1a", "95b76d": "5a0a16", - "000000": "000000", "d0fa9f": "86232e", "b7979f": "af8260", "ffffff": "e4c59e", diff --git a/public/images/pokemon/variant/exp/767.json b/public/images/pokemon/variant/exp/767.json index 46f860b073e..84114ed68e0 100644 --- a/public/images/pokemon/variant/exp/767.json +++ b/public/images/pokemon/variant/exp/767.json @@ -2,27 +2,23 @@ "1": { "46334f": "844008", "a65e97": "e8a92a", - "080808": "080808", "713e70": "c86910", "3f5252": "202733", "bed3cf": "6e6d6d", "5c7877": "293141", "867b73": "ecd42a", "8a9f9e": "494950", - "ede650": "7798b8", - "f7f7f7": "f7f7f7" + "ede650": "7798b8" }, "2": { "46334f": "091b52", "a65e97": "2849ac", - "080808": "080808", "713e70": "1c306d", "3f5252": "3d105f", "bed3cf": "844caf", "5c7877": "5722a6", "867b73": "8cdded", "8a9f9e": "452772", - "ede650": "d3f4fb", - "f7f7f7": "f7f7f7" + "ede650": "d3f4fb" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/768.json b/public/images/pokemon/variant/exp/768.json index ad275949bd2..f7fffd7e822 100644 --- a/public/images/pokemon/variant/exp/768.json +++ b/public/images/pokemon/variant/exp/768.json @@ -2,7 +2,6 @@ "1": { "546b57": "202733", "c8e1cd": "6e6d6d", - "101010": "101010", "81b68e": "494950", "498f6c": "ecd42a", "842886": "c85710", @@ -17,16 +16,12 @@ "2": { "546b57": "091b52", "c8e1cd": "2849ac", - "101010": "101010", "81b68e": "1c306d", "498f6c": "8cdded", "842886": "5722a6", "cc5fcf": "8b51e1", "9a6982": "452772", - "5c635e": "5c635e", "7a4952": "3d105f", - "bd95a8": "844caf", - "2f3330": "2f3330", - "404843": "404843" + "bd95a8": "844caf" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/771.json b/public/images/pokemon/variant/exp/771.json index 31a9623cb09..83f5517a66d 100644 --- a/public/images/pokemon/variant/exp/771.json +++ b/public/images/pokemon/variant/exp/771.json @@ -2,7 +2,6 @@ "1": { "73223d": "570a00", "d94174": "de884b", - "101010": "101010", "992e52": "c95340", "211e1e": "1a1a1a", "737373": "b5284a", @@ -10,7 +9,6 @@ "262626": "4a1a30", "f8f8f8": "dec890", "bfbfbf": "e07f47", - "595959": "bd5e49", - "1a1a1a": "1a1a1a" + "595959": "bd5e49" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/772.json b/public/images/pokemon/variant/exp/772.json index 45c81692bb6..92ba6ef6a63 100644 --- a/public/images/pokemon/variant/exp/772.json +++ b/public/images/pokemon/variant/exp/772.json @@ -3,7 +3,6 @@ "454f55": "232843", "92a6a9": "889db1", "6b777e": "526085", - "080808": "080808", "642515": "7e4f36", "c55e3a": "eed8a1", "934031": "c8976c", @@ -25,7 +24,6 @@ "454f55": "18182a", "92a6a9": "65657c", "6b777e": "3b3b51", - "080808": "080808", "642515": "444961", "c55e3a": "c1cfd8", "934031": "7f94b1", diff --git a/public/images/pokemon/variant/exp/773.json b/public/images/pokemon/variant/exp/773.json index b64796b9bf9..15805bf76ec 100644 --- a/public/images/pokemon/variant/exp/773.json +++ b/public/images/pokemon/variant/exp/773.json @@ -9,7 +9,6 @@ "e3e6ec": "bdd1e5", "3f3b50": "1e172a", "aba7bc": "493d55", - "080808": "080808", "e64f5e": "f1944a", "483c39": "3a2d53", "79615e": "504a75", @@ -17,7 +16,6 @@ "e9eaf8": "e7ebed", "0073bf": "7a4949", "5399df": "b59489", - "fffef5": "fffef5", "251845": "753c32", "9618e0": "dc9c4d", "125d4b": "ce7f3f", @@ -31,9 +29,7 @@ "565969": "0f0f1b", "bcbbc5": "242433", "e3e6ec": "444455", - "3f3b50": "3f3b50", "aba7bc": "dbd8e8", - "080808": "080808", "e64f5e": "98ce58", "483c39": "778894", "79615e": "d6d4d4", @@ -41,7 +37,6 @@ "e9eaf8": "eef4f8", "0073bf": "6a6c75", "5399df": "92949e", - "fffef5": "fffef5", "251845": "425735", "9618e0": "ade265", "125d4b": "686981", diff --git a/public/images/pokemon/variant/exp/776.json b/public/images/pokemon/variant/exp/776.json index 22bf97cd7a0..a17fdc05434 100644 --- a/public/images/pokemon/variant/exp/776.json +++ b/public/images/pokemon/variant/exp/776.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "666657": "5a4c65", "ccccad": "b4b8c8", "71171a": "2c0f2d", @@ -9,14 +8,12 @@ "e74545": "4f3d66", "fadd3d": "32d9e5", "331c1c": "39221d", - "f8f8f8": "f8f8f8", "6b473c": "f4eba2", "cc8720": "2f98cd", "4d2a2a": "d5966f", "9b6500": "276da5" }, "2": { - "101010": "101010", "666657": "4c4276", "ccccad": "adc4e9", "71171a": "be8a7a", @@ -25,7 +22,6 @@ "e74545": "faeecd", "fadd3d": "6e45a0", "331c1c": "0a412c", - "f8f8f8": "f8f8f8", "6b473c": "caee67", "cc8720": "4d2e5e", "4d2a2a": "61b551", diff --git a/public/images/pokemon/variant/exp/777.json b/public/images/pokemon/variant/exp/777.json index 597aad206f4..e04eee7dcd8 100644 --- a/public/images/pokemon/variant/exp/777.json +++ b/public/images/pokemon/variant/exp/777.json @@ -1,22 +1,18 @@ { "1": { - "101010": "101010", "ffea80": "dec2f0", "ccb852": "ac8fbb", "4d4d4d": "362952", "b3b3b3": "8e71cd", "808080": "645393", "595959": "444147", - "f8f8f8": "f8f8f8", "8c8c8c": "99979b", - "fbfbfb": "fbfbfb", "bfbfbf": "d0dadb", "73593f": "ae428a", "e5dba8": "dba6b6", "fff4bf": "ffd8ee" }, "2": { - "101010": "101010", "ffea80": "d65d3c", "ccb852": "7b3c26", "4d4d4d": "294127", @@ -25,7 +21,6 @@ "595959": "342a20", "f8f8f8": "e5b38c", "8c8c8c": "634c41", - "fbfbfb": "fbfbfb", "bfbfbf": "b27f64", "73593f": "47240f", "e5dba8": "c65757", diff --git a/public/images/pokemon/variant/exp/778-busted.json b/public/images/pokemon/variant/exp/778-busted.json index 679ebbb5f31..97168b7209c 100644 --- a/public/images/pokemon/variant/exp/778-busted.json +++ b/public/images/pokemon/variant/exp/778-busted.json @@ -1,7 +1,5 @@ { "1": { - "000000": "000000", - "101010": "101010", "404040": "180c05", "b3a76b": "8d4f3d", "f2e291": "aa6f46", @@ -14,7 +12,6 @@ "404039": "180c05" }, "2": { - "000000": "000000", "101010": "000000", "404040": "0b1231", "b3a76b": "3d2e4f", diff --git a/public/images/pokemon/variant/exp/778-disguised.json b/public/images/pokemon/variant/exp/778-disguised.json index 7dfb153ed7e..c419e6d0577 100644 --- a/public/images/pokemon/variant/exp/778-disguised.json +++ b/public/images/pokemon/variant/exp/778-disguised.json @@ -1,6 +1,5 @@ { "1": { - "000000": "000000", "404040": "180c05", "b3a76b": "8d4f3d", "f2e291": "aa6f46", @@ -13,7 +12,6 @@ "404039": "180c05" }, "2": { - "000000": "000000", "404040": "0b1231", "b3a76b": "3d2e4f", "f2e291": "5b496b", @@ -25,4 +23,4 @@ "805933": "6d80a4", "404039": "ff766e" } -} +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/779.json b/public/images/pokemon/variant/exp/779.json index d7976e85262..9877fff7652 100644 --- a/public/images/pokemon/variant/exp/779.json +++ b/public/images/pokemon/variant/exp/779.json @@ -3,7 +3,6 @@ "58295f": "a52121", "834589": "c62c2c", "b75eb7": "f65656", - "101010": "101010", "de5c8a": "602b7a", "97354e": "2e0c3f", "ef87b5": "84539d", @@ -11,15 +10,12 @@ "93d3e1": "caefff", "5e9fc4": "94c5da", "cfae3f": "d65e5e", - "efe85f": "faa28c", - "fdfdfd": "fdfdfd", - "969696": "969696" + "efe85f": "faa28c" }, "2": { "58295f": "4545c4", "834589": "6666e2", "b75eb7": "8585ff", - "101010": "101010", "de5c8a": "dca032", "97354e": "935b3b", "ef87b5": "ffd166", @@ -27,8 +23,6 @@ "93d3e1": "eeeeff", "5e9fc4": "afafe1", "cfae3f": "2d2c43", - "efe85f": "454457", - "fdfdfd": "fdfdfd", - "969696": "969696" + "efe85f": "454457" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/789.json b/public/images/pokemon/variant/exp/789.json index b4dd5c70403..f3f945b52f1 100644 --- a/public/images/pokemon/variant/exp/789.json +++ b/public/images/pokemon/variant/exp/789.json @@ -1,17 +1,11 @@ { "0": { "3a4ca6": "64173e", - "1b234d": "1b234d", "55bef2": "7d42fd", - "f8f8f8": "f8f8f8", - "101010": "101010", "4774cc": "6a2aaf", "61f2f2": "8d8cff", "ffe359": "ffc259", "736628": "a06921", - "133140": "133140", - "3d7a99": "3d7a99", - "61c2f2": "61c2f2", "9d62d9": "dc48a7", "f285bc": "f77247" }, @@ -20,7 +14,6 @@ "1b234d": "391c21", "55bef2": "ffdf49", "f8f8f8": "fdfdfd", - "101010": "101010", "4774cc": "f6a42d", "61f2f2": "fff695", "ffe359": "e5efff", @@ -36,7 +29,6 @@ "1b234d": "1f1155", "55bef2": "71ffd8", "f8f8f8": "fdfdfd", - "101010": "101010", "4774cc": "3dc7e0", "61f2f2": "c9ffe2", "ffe359": "c22741", diff --git a/public/images/pokemon/variant/exp/790.json b/public/images/pokemon/variant/exp/790.json index cbc8fda0072..6b3d3f079da 100644 --- a/public/images/pokemon/variant/exp/790.json +++ b/public/images/pokemon/variant/exp/790.json @@ -1,22 +1,16 @@ { "1": { - "101010": "101010", "8a5911": "545d9e", "c87522": "7b89c4", "faf54e": "e5efff", "e8a61e": "aebde2", - "fdfdfd": "fdfdfd", "1d3e89": "a20b02", "169fda": "ffdf49", "764394": "ff4079", "2c5fab": "eb5b2a", - "1e232b": "1e232b", - "17a6e3": "17a6e3", - "1f4294": "1f4294", "e2629f": "f6a42d" }, "2": { - "101010": "101010", "8a5911": "730627", "c87522": "890425", "faf54e": "d4314c", @@ -26,9 +20,6 @@ "169fda": "71ffd8", "764394": "7e13bf", "2c5fab": "3dc7e0", - "1e232b": "1e232b", - "17a6e3": "17a6e3", - "1f4294": "1f4294", "e2629f": "3dc7e0" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/792.json b/public/images/pokemon/variant/exp/792.json index 441861522a8..9e182f9ec66 100644 --- a/public/images/pokemon/variant/exp/792.json +++ b/public/images/pokemon/variant/exp/792.json @@ -2,39 +2,25 @@ "1": { "69551f": "675340", "e3da81": "e6ded2", - "080808": "080808", "a19263": "afa191", "72629a": "864110", "edf0ff": "ffd386", "671ace": "eb422a", "240f62": "60000c", "40168c": "bc1836", - "fdfce8": "fdfce8", "494dcc": "53101c", "7bcece": "ff31e0", - "aaa4d8": "d39143", - "ffa0dd": "ffa0dd", - "ff268f": "ff268f", - "fcfcfc": "fcfcfc", - "000000": "000000" + "aaa4d8": "d39143" }, "2": { "69551f": "6b0420", "e3da81": "c22741", - "080808": "080808", "a19263": "980f2a", "72629a": "7e343d", "edf0ff": "ffd1d1", "671ace": "1550a1", - "240f62": "240f62", "40168c": "1a3186", - "fdfce8": "fdfce8", - "494dcc": "494dcc", "7bcece": "58cbe9", - "aaa4d8": "e19096", - "ffa0dd": "ffa0dd", - "ff268f": "ff268f", - "fcfcfc": "fcfcfc", - "000000": "000000" + "aaa4d8": "e19096" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/797.json b/public/images/pokemon/variant/exp/797.json index 05e51ab62bd..3e41ffa9ef2 100644 --- a/public/images/pokemon/variant/exp/797.json +++ b/public/images/pokemon/variant/exp/797.json @@ -8,7 +8,6 @@ "82ada4": "506ee3", "bccfc4": "f2b97f", "b3e088": "ffc785", - "101010": "101010", "a3e2bb": "9db7f4", "53ca89": "f0f5f9", "193124": "09112e" @@ -22,7 +21,6 @@ "82ada4": "8b1933", "bccfc4": "242733", "b3e088": "232323", - "101010": "101010", "a3e2bb": "bd2f62", "53ca89": "bbf3ef", "193124": "330007" diff --git a/public/images/pokemon/variant/exp/798.json b/public/images/pokemon/variant/exp/798.json index 75092d71cdc..18a2ce389ec 100644 --- a/public/images/pokemon/variant/exp/798.json +++ b/public/images/pokemon/variant/exp/798.json @@ -3,7 +3,6 @@ "827d7d": "18470e", "d7d0d0": "87ab39", "a86c1c": "07421f", - "000000": "000000", "af3e00": "2c180e", "fdcf00": "2c9435", "e95503": "614537", @@ -18,7 +17,6 @@ "827d7d": "283e65", "d7d0d0": "4a86b8", "a86c1c": "5a2036", - "000000": "000000", "af3e00": "8a482d", "fdcf00": "cc7d4f", "e95503": "ffeb93", diff --git a/public/images/pokemon/variant/exp/80-mega.json b/public/images/pokemon/variant/exp/80-mega.json index 5d3d810f095..eeebc5a4b50 100644 --- a/public/images/pokemon/variant/exp/80-mega.json +++ b/public/images/pokemon/variant/exp/80-mega.json @@ -1,12 +1,9 @@ { "1": { "7b3131": "3f2729", - "000000": "000000", "e66a7b": "5b3332", "ff9494": "885345", "ffbdac": "ad7459", - "deded5": "deded5", - "ffffff": "ffffff", "835a20": "9f675f", "eed583": "d49983", "ffeeb4": "e0b69d", @@ -18,12 +15,9 @@ }, "2": { "7b3131": "bf8645", - "000000": "000000", "e66a7b": "d9a95d", "ff9494": "e8cd82", "ffbdac": "f7e6a8", - "deded5": "deded5", - "ffffff": "ffffff", "835a20": "69080f", "eed583": "b34d2e", "ffeeb4": "d16b34", diff --git a/public/images/pokemon/variant/exp/800-dawn-wings.json b/public/images/pokemon/variant/exp/800-dawn-wings.json index df0592955af..63563b11d4e 100644 --- a/public/images/pokemon/variant/exp/800-dawn-wings.json +++ b/public/images/pokemon/variant/exp/800-dawn-wings.json @@ -4,10 +4,8 @@ "293233": "5f0021", "3695ce": "afa191", "5a646c": "890425", - "101010": "101010", "72baf3": "e6ded2", "a6bad9": "f1a54f", - "1f1d35": "1f1d35", "838f95": "c8245d", "c7e5ff": "efe9dd", "74b2d8": "bc1836", @@ -20,23 +18,15 @@ "a42828": "dc1246", "e95d5d": "ff5178", "53f2f2": "d58aff", - "f7e9ba": "f7e9ba", - "d7af28": "d7af28", - "424a50": "424a50", - "ff3a9c": "ff3a9c", - "000000": "000000", - "ffa0dd": "ffd386", - "080808": "080808" + "ffa0dd": "ffd386" }, "2": { "20496a": "3b0015", "293233": "3e135f", "3695ce": "5b0318", "5a646c": "602483", - "101010": "101010", "72baf3": "970b22", "a6bad9": "e79093", - "1f1d35": "1f1d35", "838f95": "f66fdc", "c7e5ff": "e44c51", "74b2d8": "1a3186", @@ -48,13 +38,6 @@ "0b82b7": "2e5dda", "a42828": "901323", "e95d5d": "da2e2e", - "53f2f2": "579eff", - "f7e9ba": "f7e9ba", - "d7af28": "d7af28", - "424a50": "424a50", - "ff3a9c": "ff3a9c", - "000000": "000000", - "ffa0dd": "ffa0dd", - "080808": "080808" + "53f2f2": "579eff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/800-ultra.json b/public/images/pokemon/variant/exp/800-ultra.json index cab917ec271..b71e56c485e 100644 --- a/public/images/pokemon/variant/exp/800-ultra.json +++ b/public/images/pokemon/variant/exp/800-ultra.json @@ -4,30 +4,22 @@ "f8f8e8": "ffe1b8", "9b8259": "b43c06", "e5e4c2": "ffbf79", - "000000": "000000", "bc9b4e": "8e0021", "f8f8d0": "ff7e75", "e8e088": "ee2033", "d0b868": "bc0125", - "7d673b": "770031", - "282828": "282828", - "f84040": "f84040", - "f88888": "f88888", - "c81010": "c81010" + "7d673b": "770031" }, "2": { "b0a080": "e552ec", "f8f8e8": "ffe2ed", "9b8259": "b021c5", "e5e4c2": "ffb9f9", - "000000": "000000", "bc9b4e": "900090", "f8f8d0": "ff8ae9", "e8e088": "ff49e7", "d0b868": "d10cc7", "7d673b": "510059", - "282828": "282828", - "f84040": "f84040", "f88888": "1ae2e6", "c81010": "00c2d2" } diff --git a/public/images/pokemon/variant/exp/800.json b/public/images/pokemon/variant/exp/800.json index 42ec6fb5d21..e0e76df5a7b 100644 --- a/public/images/pokemon/variant/exp/800.json +++ b/public/images/pokemon/variant/exp/800.json @@ -4,12 +4,10 @@ "424a50": "890425", "2b3233": "5f0021", "768188": "c8245d", - "080808": "080808", "fd2b2b": "35d5e8", "5fcfbe": "453ef2", "ec925b": "9d63ff", "9965c9": "6219a8", - "0a5ec5": "0a5ec5", "18f013": "69fff0", "b5bbbf": "a266eb", "fbfbfb": "e8e7ff" @@ -19,7 +17,6 @@ "424a50": "602483", "2b3233": "3e135f", "768188": "b13dc8", - "080808": "080808", "fd2b2b": "fd2bc1", "5fcfbe": "b71334", "ec925b": "e73c37", diff --git a/public/images/pokemon/variant/exp/802.json b/public/images/pokemon/variant/exp/802.json index 14caa71b18b..e92974ed087 100644 --- a/public/images/pokemon/variant/exp/802.json +++ b/public/images/pokemon/variant/exp/802.json @@ -2,9 +2,7 @@ "0": { "232627": "084434", "62646a": "76bc8f", - "000000": "000000", "444546": "3a7e5d", - "dc983d": "dc983d", "f2d982": "f8f592", "802d17": "ff623c", "cc411e": "e31101", @@ -13,9 +11,7 @@ "1": { "232627": "0d0b3f", "62646a": "515aad", - "000000": "000000", "444546": "2f3079", - "dc983d": "dc983d", "f2d982": "f8e592", "802d17": "ffbb17", "cc411e": "ff2006", @@ -24,7 +20,6 @@ "2": { "232627": "5a0423", "62646a": "ce3e63", - "000000": "000000", "444546": "97123b", "dc983d": "16a1e1", "f2d982": "4bf6ff", diff --git a/public/images/pokemon/variant/exp/803.json b/public/images/pokemon/variant/exp/803.json index 1f612916938..2fa484408e6 100644 --- a/public/images/pokemon/variant/exp/803.json +++ b/public/images/pokemon/variant/exp/803.json @@ -2,7 +2,6 @@ "1": { "78757f": "449e93", "ccc0d8": "e3ffec", - "101010": "101010", "98295e": "27579e", "ff6ccc": "54cbdc", "d9338e": "3492b9", @@ -17,7 +16,6 @@ "2": { "78757f": "cd9b85", "ccc0d8": "ffefe0", - "101010": "101010", "98295e": "a12f63", "ff6ccc": "ff778d", "d9338e": "d6487a", diff --git a/public/images/pokemon/variant/exp/804.json b/public/images/pokemon/variant/exp/804.json index bee1c93ca0f..e6f0309cb03 100644 --- a/public/images/pokemon/variant/exp/804.json +++ b/public/images/pokemon/variant/exp/804.json @@ -2,7 +2,6 @@ "1": { "523e68": "16396f", "b699f2": "359faf", - "101010": "101010", "8570b1": "22658d", "9e2348": "81262d", "ff6cd3": "e88354", @@ -14,13 +13,11 @@ "e0d9e8": "e3ffec", "9996a9": "8edfd5", "008fdd": "f3c58a", - "b6e4f3": "fff5c9", - "000000": "000000" + "b6e4f3": "fff5c9" }, "2": { "523e68": "0e3346", "b699f2": "68b363", - "101010": "101010", "8570b1": "2d794e", "9e2348": "7e4e3d", "ff6cd3": "fff8cc", @@ -32,7 +29,6 @@ "e0d9e8": "e54558", "9996a9": "96234e", "008fdd": "4c495b", - "b6e4f3": "68637e", - "000000": "000000" + "b6e4f3": "68637e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/808.json b/public/images/pokemon/variant/exp/808.json index a1ed465359f..23e974c8269 100644 --- a/public/images/pokemon/variant/exp/808.json +++ b/public/images/pokemon/variant/exp/808.json @@ -4,9 +4,7 @@ "ab732b": "ce5a6f", "ffda45": "ffbeae", "fbf28d": "fff1d1", - "f9f9f9": "f9f9f9", "814f23": "85374d", - "101010": "101010", "59544e": "38585b", "3d3534": "2c4048", "67675f": "426e73", @@ -21,16 +19,12 @@ "ab732b": "2d2931", "ffda45": "9b6e98", "fbf28d": "bf99bc", - "f9f9f9": "f9f9f9", "814f23": "101010", - "101010": "101010", "59544e": "9e002e", "3d3534": "780000", "67675f": "ba2b41", "8a8d7e": "d66352", "dcdcda": "ffbe6e", - "b1b5a6": "f49769", - "741012": "741012", - "c2292e": "c2292e" + "b1b5a6": "f49769" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/809.json b/public/images/pokemon/variant/exp/809.json index 29b15e46f70..9ffe4ac2c46 100644 --- a/public/images/pokemon/variant/exp/809.json +++ b/public/images/pokemon/variant/exp/809.json @@ -6,14 +6,12 @@ "3d3534": "2c4048", "dea220": "ff7c8e", "ab732b": "ce5a6f", - "101010": "101010", "fbf28d": "fff1d1", "67675f": "426e73", "814f23": "85374d", "ffda45": "ffbeae", "dcdcda": "c2effc", - "b1b5a6": "98d6f0", - "f9f9f9": "f9f9f9" + "b1b5a6": "98d6f0" }, "2": { "59544e": "9e002e", @@ -22,13 +20,11 @@ "3d3534": "780000", "dea220": "64486f", "ab732b": "2d2931", - "101010": "101010", "fbf28d": "bf99bc", "67675f": "ba2b41", "814f23": "101010", "ffda45": "9b6e98", "dcdcda": "ffbe6e", - "b1b5a6": "f49769", - "f9f9f9": "f9f9f9" + "b1b5a6": "f49769" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/816.json b/public/images/pokemon/variant/exp/816.json index 62c875c5941..55573466e55 100644 --- a/public/images/pokemon/variant/exp/816.json +++ b/public/images/pokemon/variant/exp/816.json @@ -8,12 +8,10 @@ "6ab6d2": "e66371", "add7e7": "e6828e", "718b93": "a7664c", - "fbfbfb": "fbfbfb", "5091c0": "b5464b", "bdc6ca": "d9c5bc", "d2e7ec": "eecaa2", - "9fbac1": "e19b78", - "101010": "101010" + "9fbac1": "e19b78" }, "2": { "1f2d63": "6e1a4c", @@ -24,11 +22,9 @@ "6ab6d2": "ffeeb8", "add7e7": "fffbec", "718b93": "933644", - "fbfbfb": "fbfbfb", "5091c0": "dea26c", "bdc6ca": "c5e4ea", "d2e7ec": "ec8b48", - "9fbac1": "d5543c", - "101010": "101010" + "9fbac1": "d5543c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/817.json b/public/images/pokemon/variant/exp/817.json index 5a54b6bdab3..d148636069b 100644 --- a/public/images/pokemon/variant/exp/817.json +++ b/public/images/pokemon/variant/exp/817.json @@ -8,10 +8,8 @@ "005980": "631425", "70cce0": "eb8577", "31b5d0": "cf5b5d", - "101010": "101010", "6ba01b": "a36d5d", "ccc7cd": "c7c1bd", - "fefefe": "fefefe", "3d6424": "83403e", "8cd222": "d99f8d" }, @@ -24,10 +22,8 @@ "005980": "7c2f23", "70cce0": "ffe5a3", "31b5d0": "fcbe6d", - "101010": "101010", "6ba01b": "ba2c22", "ccc7cd": "becee1", - "fefefe": "fefefe", "3d6424": "731317", "8cd222": "d85633" } diff --git a/public/images/pokemon/variant/exp/818.json b/public/images/pokemon/variant/exp/818.json index f624c2fd14a..023c086ae92 100644 --- a/public/images/pokemon/variant/exp/818.json +++ b/public/images/pokemon/variant/exp/818.json @@ -8,9 +8,6 @@ "01599a": "0ea6a8", "549bc3": "0060a4", "9cd2e2": "107ac0", - "fdfdfd": "fdfdfd", - "e3a32b": "e3a32b", - "101010": "101010", "31302f": "989dac", "646565": "f7fbfc", "4a4a4d": "c4ccd4", @@ -25,9 +22,7 @@ "01599a": "9c2734", "549bc3": "a55846", "9cd2e2": "e1926f", - "fdfdfd": "fdfdfd", "e3a32b": "5885a2", - "101010": "101010", "31302f": "251e1c", "646565": "4c4643", "4a4a4d": "342b2a", @@ -42,9 +37,7 @@ "01599a": "d8b284", "549bc3": "e38544", "9cd2e2": "ffcd57", - "fdfdfd": "fdfdfd", "e3a32b": "a13047", - "101010": "101010", "31302f": "571342", "646565": "be3a7d", "4a4a4d": "771b54", diff --git a/public/images/pokemon/variant/exp/822.json b/public/images/pokemon/variant/exp/822.json index 8e4a7614911..722c9d7f45c 100644 --- a/public/images/pokemon/variant/exp/822.json +++ b/public/images/pokemon/variant/exp/822.json @@ -6,10 +6,8 @@ "426eb2": "ffdeeb", "2f4577": "f4a0b9", "403524": "ad6f83", - "101010": "101010", "6d1b29": "5722a6", "e21d22": "8b51e1", - "f4f4f4": "f4f4f4", "95a1b6": "57445a", "444f59": "2e262f", "f85947": "8b51e1", @@ -22,10 +20,8 @@ "426eb2": "edd472", "2f4577": "eaae36", "403524": "b95212", - "101010": "101010", "6d1b29": "5a0015", "e21d22": "8f0021", - "f4f4f4": "f4f4f4", "95a1b6": "743419", "444f59": "541705", "f85947": "8f0021", diff --git a/public/images/pokemon/variant/exp/823.json b/public/images/pokemon/variant/exp/823.json index 8f2c6fe3a1d..75fa0626a8c 100644 --- a/public/images/pokemon/variant/exp/823.json +++ b/public/images/pokemon/variant/exp/823.json @@ -5,14 +5,12 @@ "303360": "ad6f83", "646ca8": "ffdeeb", "4d5488": "f4a0b9", - "010101": "010101", "ffa8a8": "ffc586", "f30101": "df7b10", "4e4150": "57445a", "2c2b58": "845195", "3e3d6d": "bc7dc3", - "18173d": "4b2a5e", - "2e262f": "2e262f" + "18173d": "4b2a5e" }, "2": { "251d4e": "612a0e", @@ -20,7 +18,6 @@ "303360": "b95212", "646ca8": "edd472", "4d5488": "eaae36", - "010101": "010101", "ffa8a8": "ff4a4a", "f30101": "e80000", "4e4150": "743419", diff --git a/public/images/pokemon/variant/exp/830.json b/public/images/pokemon/variant/exp/830.json index 58b1550cf2f..0b736376c07 100644 --- a/public/images/pokemon/variant/exp/830.json +++ b/public/images/pokemon/variant/exp/830.json @@ -6,7 +6,6 @@ "e8d5c6": "a2d2e7", "828a3f": "358699", "b6b23d": "8be8e4", - "101010": "101010", "fef0a0": "ece7c8", "bab743": "c38ec6", "5c6738": "6f3e7b", @@ -22,7 +21,6 @@ "e8d5c6": "d5aee9", "828a3f": "8243b6", "b6b23d": "b87def", - "101010": "101010", "fef0a0": "f4f1de", "bab743": "6a9cbb", "5c6738": "133049", diff --git a/public/images/pokemon/variant/exp/835.json b/public/images/pokemon/variant/exp/835.json index 708c7028bcd..fbb7122a337 100644 --- a/public/images/pokemon/variant/exp/835.json +++ b/public/images/pokemon/variant/exp/835.json @@ -1,7 +1,6 @@ { "1": { "844840": "051514", - "101010": "101010", "bd8d62": "e0bb76", "a26642": "aa8e5a", "6d943a": "28797b", @@ -11,26 +10,19 @@ "fbfbfb": "fdffe1", "cba685": "fbffc7", "9a6229": "13423f", - "f9f9f9": "f9f9f9", - "d1cccb": "e7c78d", - "837a76": "837a76", - "db6659": "db6659" + "d1cccb": "e7c78d" }, "2": { "844840": "313e38", - "101010": "101010", "bd8d62": "509468", "a26642": "3d5d59", "6d943a": "1e1a42", "76c745": "202758", "cf9529": "56447e", "f7da11": "776baf", - "fbfbfb": "fbfbfb", "cba685": "8cd3a5", "9a6229": "2b2042", - "f9f9f9": "f9f9f9", "d1cccb": "a0bcaa", - "837a76": "43554d", - "db6659": "db6659" + "837a76": "43554d" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/850.json b/public/images/pokemon/variant/exp/850.json index c799fd3ac06..f65a10d09ff 100644 --- a/public/images/pokemon/variant/exp/850.json +++ b/public/images/pokemon/variant/exp/850.json @@ -1,9 +1,7 @@ { "1": { - "2f1610": "2f1610", "804a3e": "59365d", "bf3922": "117956", - "101010": "101010", "ff5839": "35c36c", "5b2f26": "36203c", "681607": "024f2d", @@ -11,22 +9,14 @@ "f89e08": "67ef9c", "ff836c": "5ff58e", "ffd901": "c8ffcc", - "be5409": "117956", - "fbfbfb": "fbfbfb" + "be5409": "117956" }, "2": { - "2f1610": "2f1610", "804a3e": "475294", "bf3922": "ae1165", - "101010": "101010", "ff5839": "d73981", "5b2f26": "36426c", "681607": "68063c", - "f77c42": "f77c42", - "f89e08": "f89e08", - "ff836c": "ff836c", - "ffd901": "ffc143", - "be5409": "be5409", - "fbfbfb": "fbfbfb" + "ffd901": "ffc143" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/851.json b/public/images/pokemon/variant/exp/851.json index 827ace8fc29..36675d6da87 100644 --- a/public/images/pokemon/variant/exp/851.json +++ b/public/images/pokemon/variant/exp/851.json @@ -4,7 +4,6 @@ "f89e08": "67ef9c", "ffd901": "c8ffcc", "bf3922": "1a8987", - "101010": "101010", "2f1610": "24122b", "5b2f26": "503154", "804a3e": "714272", @@ -12,7 +11,6 @@ "ff5839": "35c3a8", "b96f5d": "ad58ab", "941528": "005f35", - "fbfbfb": "fbfbfb", "42221c": "36203c", "000000": "101010" }, @@ -21,15 +19,12 @@ "f89e08": "f36d73", "ffd901": "ffc143", "bf3922": "ae1165", - "101010": "101010", "2f1610": "121439", "5b2f26": "36426c", "804a3e": "475294", "681607": "6e0442", "ff5839": "d73981", "b96f5d": "7866cb", - "941528": "941528", - "fbfbfb": "fbfbfb", "42221c": "222957", "000000": "101010" } diff --git a/public/images/pokemon/variant/exp/854.json b/public/images/pokemon/variant/exp/854.json index 8c4d24d68b2..fa1c80f0d51 100644 --- a/public/images/pokemon/variant/exp/854.json +++ b/public/images/pokemon/variant/exp/854.json @@ -1,12 +1,10 @@ { "1": { - "5e401f": "5e401f", "733a87": "cc752f", "cf9a4c": "592626", "ffd45c": "b7763c", "af63c4": "ffffeb", "c3bfe0": "f2bbaa", - "101010": "101010", "215557": "531d2b", "d38095": "ef9e5c", "f79e67": "eb8328", @@ -22,7 +20,6 @@ "ffd45c": "998c68", "af63c4": "82b183", "c3bfe0": "524c4e", - "101010": "101010", "215557": "222221", "d38095": "c6c95e", "f79e67": "f4f394", diff --git a/public/images/pokemon/variant/exp/855.json b/public/images/pokemon/variant/exp/855.json index c22bae10676..1d840d9f6cf 100644 --- a/public/images/pokemon/variant/exp/855.json +++ b/public/images/pokemon/variant/exp/855.json @@ -13,9 +13,7 @@ "f5f9fa": "f2bbaa", "f79e67": "eb8328", "d38095": "ef9e5c", - "733a87": "cc752f", - "101010": "101010", - "000000": "000000" + "733a87": "cc752f" }, "2": { "5e401f": "463f2b", @@ -31,8 +29,6 @@ "f5f9fa": "524c4e", "f79e67": "f4f394", "d38095": "c6c95e", - "733a87": "49755c", - "101010": "101010", - "000000": "000000" + "733a87": "49755c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/856.json b/public/images/pokemon/variant/exp/856.json index 3d245b74324..bfc575d89d7 100644 --- a/public/images/pokemon/variant/exp/856.json +++ b/public/images/pokemon/variant/exp/856.json @@ -2,7 +2,6 @@ "1": { "727ab1": "1d4a3b", "c8e9ff": "5ec183", - "181818": "181818", "acbfdf": "3b9665", "bb6a99": "043232", "f9d5da": "298675", @@ -13,7 +12,6 @@ "2": { "727ab1": "6b0124", "c8e9ff": "cb304d", - "181818": "181818", "acbfdf": "a11437", "bb6a99": "30163d", "f9d5da": "523f73", diff --git a/public/images/pokemon/variant/exp/858.json b/public/images/pokemon/variant/exp/858.json index 1f0c1cefab4..41e50e22464 100644 --- a/public/images/pokemon/variant/exp/858.json +++ b/public/images/pokemon/variant/exp/858.json @@ -3,7 +3,6 @@ "727ab1": "1d4a3b", "c8e9ff": "5ec183", "acbfdf": "3b9665", - "101010": "101010", "948fc2": "287b59", "d9cedb": "dec1c2", "e5e4ef": "f7e4e4", @@ -18,7 +17,6 @@ "727ab1": "6b0124", "c8e9ff": "cb304d", "acbfdf": "a11437", - "101010": "101010", "948fc2": "8c0e32", "d9cedb": "e4bcde", "e5e4ef": "ffecf9", diff --git a/public/images/pokemon/variant/exp/859.json b/public/images/pokemon/variant/exp/859.json index 703d5d67218..bb4e943fa79 100644 --- a/public/images/pokemon/variant/exp/859.json +++ b/public/images/pokemon/variant/exp/859.json @@ -8,9 +8,6 @@ "735aac": "a4332d", "947cd8": "cd643d", "f42252": "f55c14", - "101010": "101010", - "fdfdfd": "fdfdfd", - "c9c9c9": "c9c9c9", "8b73d5": "cc5836" }, "2": { @@ -22,8 +19,6 @@ "735aac": "f0c475", "947cd8": "d9975b", "f42252": "fc645a", - "101010": "101010", - "fdfdfd": "fdfdfd", "c9c9c9": "dad6bf", "8b73d5": "f9e9a4" } diff --git a/public/images/pokemon/variant/exp/860.json b/public/images/pokemon/variant/exp/860.json index 64c279dc81d..e9604691813 100644 --- a/public/images/pokemon/variant/exp/860.json +++ b/public/images/pokemon/variant/exp/860.json @@ -6,13 +6,9 @@ "352954": "3b1528", "fd0b42": "d24309", "5d4694": "8b332d", - "101010": "101010", "433568": "5a1d27", "8872b6": "c45949", - "c9c9c9": "c9c9c9", - "fdfdfd": "fdfdfd", "409555": "244849", - "000000": "000000", "47be62": "366c59", "356a3c": "162a35" }, @@ -23,13 +19,10 @@ "352954": "a26458", "fd0b42": "f0443e", "5d4694": "dfc784", - "101010": "101010", "433568": "c98e63", "8872b6": "f6e8b8", "c9c9c9": "dad6bf", - "fdfdfd": "fdfdfd", "409555": "272664", - "000000": "000000", "47be62": "3f386f", "356a3c": "090d50" } diff --git a/public/images/pokemon/variant/exp/861.json b/public/images/pokemon/variant/exp/861.json index f60f7b31a56..539009124d0 100644 --- a/public/images/pokemon/variant/exp/861.json +++ b/public/images/pokemon/variant/exp/861.json @@ -3,15 +3,11 @@ "356a3c": "162a35", "47be62": "366c59", "2f184e": "290527", - "101010": "101010", "5d4694": "8b332d", "409555": "244849", "fd0b42": "d24309", "433568": "5a1d27", - "c9c9c9": "c9c9c9", - "fdfdfd": "fdfdfd", "352954": "3b1528", - "7c8089": "7c8089", "e93761": "638a48", "f75c90": "7daf56" }, @@ -19,15 +15,12 @@ "356a3c": "090d50", "47be62": "3f386f", "2f184e": "6a2f3a", - "101010": "101010", "5d4694": "dfc784", "409555": "272664", "fd0b42": "f0443e", "433568": "c98e63", "c9c9c9": "dad6bf", - "fdfdfd": "fdfdfd", "352954": "a26458", - "7c8089": "7c8089", "e93761": "491337", "f75c90": "64233b" } diff --git a/public/images/pokemon/variant/exp/862.json b/public/images/pokemon/variant/exp/862.json index afcf3da4864..e2c25f4ec17 100644 --- a/public/images/pokemon/variant/exp/862.json +++ b/public/images/pokemon/variant/exp/862.json @@ -1,8 +1,6 @@ { "1": { - "1b2627": "1b2627", "474749": "156a66", - "010101": "010101", "f5f5f6": "f5ffea", "b2b3b2": "90c093", "303034": "094448", @@ -11,13 +9,11 @@ "6f7071": "01473a", "df84ad": "ff69fa", "9b4f69": "d414dd", - "fcfcfc": "fcfcfc", "494d56": "156a66" }, "2": { "1b2627": "060724", "474749": "8655e1", - "010101": "010101", "f5f5f6": "342d4c", "b2b3b2": "18133d", "303034": "5a3eb9", @@ -26,7 +22,6 @@ "6f7071": "2e1d7b", "df84ad": "54f1ff", "9b4f69": "0099ce", - "fcfcfc": "fcfcfc", "494d56": "8655e1" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/863.json b/public/images/pokemon/variant/exp/863.json index 66d2b4fce96..bececb30c88 100644 --- a/public/images/pokemon/variant/exp/863.json +++ b/public/images/pokemon/variant/exp/863.json @@ -2,26 +2,20 @@ "1": { "66716c": "59879a", "bfc1bf": "b4e0d3", - "040303": "040303", "8f9c95": "85c1c0", "181a1d": "1c1922", "3d4547": "4e385a", "24282b": "342b49", "ef9b50": "fbe663", "dd5e33": "df9834", - "f3f3f3": "f3f3f3", "9aa094": "9fb8bc", "84726f": "928eb0", "5b4e4d": "4e455c", - "ada09a": "d5d0dd", - "111414": "111414", - "333a3b": "333a3b", - "736663": "736663" + "ada09a": "d5d0dd" }, "2": { "66716c": "331a37", "bfc1bf": "92264b", - "040303": "040303", "8f9c95": "6d0b3c", "181a1d": "0f2127", "3d4547": "417778", @@ -32,9 +26,6 @@ "9aa094": "a96840", "84726f": "27293c", "5b4e4d": "141626", - "ada09a": "4c4d62", - "111414": "111414", - "333a3b": "333a3b", - "736663": "736663" + "ada09a": "4c4d62" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/864.json b/public/images/pokemon/variant/exp/864.json index ccfc0f2d88d..84eab2bbe99 100644 --- a/public/images/pokemon/variant/exp/864.json +++ b/public/images/pokemon/variant/exp/864.json @@ -35,4 +35,4 @@ "bbb4bc": "0a7a57", "af9e9e": "48c492" } -} +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/867.json b/public/images/pokemon/variant/exp/867.json index fcf7e29867a..8b2b7fc38d9 100644 --- a/public/images/pokemon/variant/exp/867.json +++ b/public/images/pokemon/variant/exp/867.json @@ -1,7 +1,6 @@ { "1": { "393941": "69d9bf", - "101010": "101010", "d9d0d1": "d6b8a0", "c5b9bb": "c69981", "d66770": "334599", @@ -13,7 +12,6 @@ }, "2": { "393941": "a4222c", - "101010": "101010", "d9d0d1": "4fb66a", "c5b9bb": "298a61", "d66770": "ffe78d", diff --git a/public/images/pokemon/variant/exp/872.json b/public/images/pokemon/variant/exp/872.json index 21ea6cd4192..060816eced9 100644 --- a/public/images/pokemon/variant/exp/872.json +++ b/public/images/pokemon/variant/exp/872.json @@ -3,33 +3,24 @@ "7b8b9b": "345f5c", "acc3cc": "669a8c", "d8e9f0": "b7f1d6", - "f5fdff": "f5fdff", "edeae0": "a6d6a6", "b3a7c2": "73a878", - "101010": "101010", - "695e77": "275e43", - "fdfdfb": "fdfdfb" + "695e77": "275e43" }, "1": { "7b8b9b": "22504c", "acc3cc": "548e8f", "d8e9f0": "b6e7df", - "f5fdff": "f5fdff", "edeae0": "c1ebf3", "b3a7c2": "89a9be", - "101010": "101010", - "695e77": "354b63", - "fdfdfb": "fdfdfb" + "695e77": "354b63" }, "2": { "7b8b9b": "5a3993", "acc3cc": "a66ac2", "d8e9f0": "d5c3ff", - "f5fdff": "f5fdff", "edeae0": "e5a2da", "b3a7c2": "a060a0", - "101010": "101010", - "695e77": "5f3465", - "fdfdfb": "fdfdfb" + "695e77": "5f3465" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/873.json b/public/images/pokemon/variant/exp/873.json index 5ea93b1c3bb..2bf9938b290 100644 --- a/public/images/pokemon/variant/exp/873.json +++ b/public/images/pokemon/variant/exp/873.json @@ -5,7 +5,6 @@ "e7e0e6": "a6d6a6", "b3b4bd": "73a878", "8f8f9f": "547b58", - "101010": "101010", "758174": "497e7a", "c0e4c2": "eefffc", "a0baa8": "aae3d9", @@ -20,13 +19,11 @@ "e7e0e6": "c1ebf3", "b3b4bd": "8ebbca", "8f8f9f": "648397", - "101010": "101010", "758174": "428586", "c0e4c2": "d7fff8", "a0baa8": "7bcbc0", "4662ce": "0fa5bd", "8e9fe1": "2dd3e0", - "3f4474": "3f4474", "c0df86": "eefffb" }, "2": { @@ -35,7 +32,6 @@ "e7e0e6": "d78dcb", "b3b4bd": "864c86", "8f8f9f": "5f3465", - "101010": "101010", "758174": "795a9e", "c0e4c2": "e1e3ff", "a0baa8": "9f87ca", diff --git a/public/images/pokemon/variant/exp/876-female.json b/public/images/pokemon/variant/exp/876-female.json index 6803493d5e3..eb070b03fc2 100644 --- a/public/images/pokemon/variant/exp/876-female.json +++ b/public/images/pokemon/variant/exp/876-female.json @@ -5,7 +5,6 @@ "564c6c": "4a282a", "2f2642": "2c1419", "6c64a6": "b72e3e", - "101010": "101010", "d872e7": "79e28d", "ccb7c2": "c4a691", "fefefe": "e8d4bf", @@ -21,7 +20,6 @@ "564c6c": "d58da4", "2f2642": "444a8e", "6c64a6": "78aae5", - "101010": "101010", "d872e7": "ff9cca", "ccb7c2": "cbdbe6", "fefefe": "f0f2f3", diff --git a/public/images/pokemon/variant/exp/876.json b/public/images/pokemon/variant/exp/876.json index 4760b75fd31..8fbf83473af 100644 --- a/public/images/pokemon/variant/exp/876.json +++ b/public/images/pokemon/variant/exp/876.json @@ -3,9 +3,7 @@ "2e2641": "2c1419", "7d7493": "5a3736", "564c6c": "4a282a", - "101010": "101010", "2f2642": "2c1419", - "000000": "000000", "6c64a6": "b72e3e", "ccb7c2": "c4a691", "fefefe": "e8d4bf", @@ -20,16 +18,13 @@ "2e2641": "314c7c", "7d7493": "a3c5e8", "564c6c": "78a5d4", - "101010": "101010", "2f2642": "7a316c", - "000000": "000000", "6c64a6": "f589bb", "ccb7c2": "e6d2e7", "fefefe": "faeefa", "4d447e": "d268a7", "92605f": "0077dc", "733737": "2d4697", - "28b0e3": "28b0e3", "826882": "9b7e9e", "3d3055": "aa518a" } diff --git a/public/images/pokemon/variant/exp/877-hangry.json b/public/images/pokemon/variant/exp/877-hangry.json index 100665220df..44e48631166 100644 --- a/public/images/pokemon/variant/exp/877-hangry.json +++ b/public/images/pokemon/variant/exp/877-hangry.json @@ -1,19 +1,13 @@ { "0": { - "101010": "101010", "383634": "540606", "6c6c6c": "952222", "4f4b47": "3a1010", "9958ce": "cebb58", "6b3d96": "967f3d", - "ff151c": "ff151c", - "f38bb7": "f38bb7", - "9f9f9f": "9f9f9f", - "fbfbfb": "fbfbfb", "493061": "615e30" }, "1": { - "101010": "101010", "383634": "212020", "6c6c6c": "3a3a3a", "4f4b47": "161514", @@ -21,21 +15,13 @@ "6b3d96": "a2512c", "ff151c": "ff6b00", "f38bb7": "f3a18b", - "9f9f9f": "9f9f9f", - "fbfbfb": "fbfbfb", "493061": "753e25" }, "2": { - "101010": "101010", - "383634": "383634", - "6c6c6c": "6c6c6c", - "4f4b47": "4f4b47", "9958ce": "7fba7f", "6b3d96": "568351", "ff151c": "065b06", "f38bb7": "468e46", - "9f9f9f": "9f9f9f", - "fbfbfb": "fbfbfb", "493061": "306135" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/877.json b/public/images/pokemon/variant/exp/877.json index 4be9b0e5c12..73ab51ab3f0 100644 --- a/public/images/pokemon/variant/exp/877.json +++ b/public/images/pokemon/variant/exp/877.json @@ -1,48 +1,28 @@ { "0": { - "383634": "383634", - "101010": "101010", "8a5e48": "383634", - "6c6c6c": "6c6c6c", "cf9c66": "6c6c6c", "af7044": "4f4b47", - "4f4b47": "4f4b47", "d3b351": "8851d3", - "f4f489": "b689f4", - "fbfbfb": "fbfbfb", - "5c5c5c": "5c5c5c", - "f38bb7": "f38bb7", - "b24244": "b24244", - "e76961": "e76961" + "f4f489": "b689f4" }, "1": { - "383634": "383634", - "101010": "101010", "8a5e48": "2541ad", "6c6c6c": "58666d", "cf9c66": "86aaff", "af7044": "2c439d", - "4f4b47": "4f4b47", "d3b351": "8b8853", "f4f489": "fff98f", - "fbfbfb": "fbfbfb", - "5c5c5c": "5c5c5c", "f38bb7": "1010b3", "b24244": "424eb2", "e76961": "61b6e7" }, "2": { - "383634": "383634", - "101010": "101010", "8a5e48": "4f8a48", - "6c6c6c": "6c6c6c", "cf9c66": "71cf66", "af7044": "44af5b", - "4f4b47": "4f4b47", "d3b351": "b6b6b6", "f4f489": "f8f8f8", - "fbfbfb": "fbfbfb", - "5c5c5c": "5c5c5c", "f38bb7": "a1f38b", "b24244": "388040", "e76961": "95e69d" diff --git a/public/images/pokemon/variant/exp/880.json b/public/images/pokemon/variant/exp/880.json index 96812db4d1b..2ce8fb7dfff 100644 --- a/public/images/pokemon/variant/exp/880.json +++ b/public/images/pokemon/variant/exp/880.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "975e17": "5b0610", "ffff84": "ee8563", "e39e1e": "9c1430", @@ -12,71 +11,28 @@ "871f16": "427d47", "47202a": "20132d", "732c3e": "271d3c", - "0f1514": "0f1514", "b3761a": "271447", - "301613": "301613", - "491a15": "491a15", "ff9946": "bb3333", "008567": "757798", "005e44": "564e6e", "39ad5a": "a2b5c8", "003319": "26233c", - "4c3313": "4c3313", - "4c321e": "4c321e", - "b68b0f": "b68b0f", - "3a1c23": "3a1c23", - "471f29": "471f29", - "5f8047": "5f8047", - "747335": "40030a", - "101514": "101514", - "171412": "171412", - "5a2532": "5a2532", - "8a3248": "8a3248", - "322412": "322412", - "7b4d28": "7b4d28", - "17160f": "17160f", - "654114": "654114", - "171410": "171410", - "2f191e": "2f191e" + "747335": "40030a" }, "2": { - "101010": "101010", "975e17": "211b3d", "ffff84": "dceeeb", "e39e1e": "35365e", - "8f261b": "8f261b", "ead900": "636287", "ed4e76": "ca5939", "ff8d9f": "e28854", "ff3868": "48d385", "871f16": "239d73", - "47202a": "47202a", - "732c3e": "732c3e", - "0f1514": "0f1514", - "b3761a": "b3761a", - "301613": "301613", - "491a15": "491a15", "ff9946": "8993b9", "008567": "fff491", "005e44": "f1b45f", "39ad5a": "ce734d", "003319": "671d18", - "4c3313": "4c3313", - "4c321e": "4c321e", - "b68b0f": "b68b0f", - "3a1c23": "3a1c23", - "471f29": "471f29", - "5f8047": "5f8047", - "747335": "1a122d", - "101514": "101514", - "171412": "171412", - "5a2532": "5a2532", - "8a3248": "8a3248", - "322412": "322412", - "7b4d28": "7b4d28", - "17160f": "17160f", - "654114": "654114", - "171410": "171410", - "2f191e": "2f191e" + "747335": "1a122d" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/881.json b/public/images/pokemon/variant/exp/881.json index 0d408a71172..d32717017a5 100644 --- a/public/images/pokemon/variant/exp/881.json +++ b/public/images/pokemon/variant/exp/881.json @@ -1,7 +1,6 @@ { "1": { "975e17": "5b0610", - "101010": "101010", "ffff84": "ee8563", "e39e1e": "9c1430", "ead900": "c6362b", @@ -20,7 +19,6 @@ }, "2": { "975e17": "211b3d", - "101010": "101010", "ffff84": "dceeeb", "e39e1e": "35365e", "ead900": "636287", diff --git a/public/images/pokemon/variant/exp/883.json b/public/images/pokemon/variant/exp/883.json index 723a0a9bd40..f90d3ed38a4 100644 --- a/public/images/pokemon/variant/exp/883.json +++ b/public/images/pokemon/variant/exp/883.json @@ -5,7 +5,6 @@ "777ebd": "cc6235", "172459": "771922", "edf3f2": "faebc8", - "101010": "101010", "09354d": "2f1f1a", "085d94": "714363", "9ab8ba": "cea5b9", @@ -20,7 +19,6 @@ "777ebd": "6c1046", "172459": "320432", "edf3f2": "fcffe4", - "101010": "101010", "09354d": "2f1a20", "085d94": "ad3b6c", "9ab8ba": "a3c465", diff --git a/public/images/pokemon/variant/exp/884.json b/public/images/pokemon/variant/exp/884.json index 962edf2d6da..f4e311bd455 100644 --- a/public/images/pokemon/variant/exp/884.json +++ b/public/images/pokemon/variant/exp/884.json @@ -2,7 +2,6 @@ "1": { "68353c": "871e14", "b96a6a": "cd452b", - "151515": "151515", "c4bac5": "c19b85", "e4e5f1": "f8e0cf", "837080": "5d392f", @@ -18,7 +17,6 @@ "2": { "68353c": "062449", "b96a6a": "2077a6", - "151515": "151515", "c4bac5": "3d3268", "e4e5f1": "6e5ca6", "837080": "1a0e34", diff --git a/public/images/pokemon/variant/exp/885.json b/public/images/pokemon/variant/exp/885.json index 8dc901e6476..2fc1383bea0 100644 --- a/public/images/pokemon/variant/exp/885.json +++ b/public/images/pokemon/variant/exp/885.json @@ -2,7 +2,6 @@ "0": { "3a583c": "133056", "fa5494": "efa93f", - "101010": "101010", "cc4066": "cc8225", "5f875a": "2f6c89", "476b48": "20486e", @@ -17,7 +16,6 @@ "1": { "3a583c": "2f040d", "fa5494": "4590da", - "101010": "101010", "cc4066": "3261b7", "5f875a": "6b242e", "476b48": "4e0e17", @@ -32,7 +30,6 @@ "2": { "3a583c": "1f0c2c", "fa5494": "68c7c4", - "101010": "101010", "cc4066": "2a8286", "5f875a": "3c2750", "476b48": "231234", diff --git a/public/images/pokemon/variant/exp/886.json b/public/images/pokemon/variant/exp/886.json index 5a32a09d5cc..4bed517c28e 100644 --- a/public/images/pokemon/variant/exp/886.json +++ b/public/images/pokemon/variant/exp/886.json @@ -2,7 +2,6 @@ "0": { "444e62": "2d365a", "addcbc": "6accd6", - "101010": "101010", "5f875a": "2f6c89", "2c323f": "192250", "566f89": "465272", @@ -19,7 +18,6 @@ "1": { "444e62": "4a1621", "addcbc": "da6151", - "101010": "101010", "5f875a": "6b242e", "2c323f": "2e080d", "566f89": "602034", @@ -36,7 +34,6 @@ "2": { "444e62": "231b45", "addcbc": "927fa1", - "101010": "101010", "5f875a": "3c2750", "2c323f": "251b31", "566f89": "3b2e5d", @@ -46,8 +43,6 @@ "ffe322": "87ff46", "7fb3b1": "8b659f", "5b878c": "6c4d85", - "b5a36a": "b5a36a", - "dbd39d": "dbd39d", "000000": "101010" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/887.json b/public/images/pokemon/variant/exp/887.json index a15fdf3c9ec..6e3ccfb6e8b 100644 --- a/public/images/pokemon/variant/exp/887.json +++ b/public/images/pokemon/variant/exp/887.json @@ -1,7 +1,6 @@ { "0": { "2c323f": "192250", - "101010": "101010", "566f89": "46557b", "444e62": "2c3867", "fa5494": "efa93f", @@ -22,7 +21,6 @@ }, "1": { "2c323f": "2e080d", - "101010": "101010", "566f89": "6c273d", "444e62": "4a1621", "fa5494": "4590da", @@ -43,7 +41,6 @@ }, "2": { "2c323f": "1b163f", - "101010": "101010", "566f89": "4c3f6f", "444e62": "332a59", "fa5494": "68c7c4", diff --git a/public/images/pokemon/variant/exp/888-crowned.json b/public/images/pokemon/variant/exp/888-crowned.json index a78ba1d9299..2bb8608a4d8 100644 --- a/public/images/pokemon/variant/exp/888-crowned.json +++ b/public/images/pokemon/variant/exp/888-crowned.json @@ -3,8 +3,6 @@ "f2db8a": "a1c9cd", "8f4e2f": "2f4567", "d79a53": "5a829b", - "080808": "080808", - "000000": "000000", "3471b4": "b74323", "2d4377": "5c1a1d", "4999da": "ec813b", @@ -14,15 +12,12 @@ "fae2c0": "fff8cd", "d3a79a": "da9772", "34313e": "32171f", - "fdfdfd": "fdfdfd", "9d6862": "a85f49" }, "2": { "f2db8a": "c4826b", "8f4e2f": "692e47", "d79a53": "964c5c", - "080808": "080808", - "000000": "000000", "3471b4": "9fa7d0", "2d4377": "615c7e", "4999da": "e6ecff", @@ -32,7 +27,6 @@ "fae2c0": "3d5b72", "d3a79a": "243149", "34313e": "1a1829", - "fdfdfd": "fdfdfd", "9d6862": "1c2238" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/888.json b/public/images/pokemon/variant/exp/888.json index f949289b05b..4941ed244e1 100644 --- a/public/images/pokemon/variant/exp/888.json +++ b/public/images/pokemon/variant/exp/888.json @@ -1,7 +1,6 @@ { "1": { "2d4377": "5c1a1d", - "080808": "080808", "4999da": "ec813b", "3471b4": "b74323", "f45353": "448b48", @@ -10,13 +9,10 @@ "34313e": "32171f", "be3c45": "224d42", "93262f": "0d2729", - "fdfdfd": "fdfdfd", - "9d6862": "a85f49", - "000000": "000000" + "9d6862": "a85f49" }, "2": { "2d4377": "615c7e", - "080808": "080808", "4999da": "e6ecff", "3471b4": "9fa7d0", "f45353": "902d57", @@ -25,8 +21,6 @@ "34313e": "1a1829", "be3c45": "6c1d59", "93262f": "431042", - "fdfdfd": "fdfdfd", - "9d6862": "1c2238", - "000000": "000000" + "9d6862": "1c2238" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/889-crowned.json b/public/images/pokemon/variant/exp/889-crowned.json index 65bffb601fc..61ac4b3949b 100644 --- a/public/images/pokemon/variant/exp/889-crowned.json +++ b/public/images/pokemon/variant/exp/889-crowned.json @@ -1,7 +1,6 @@ { "1": { "2d2f7b": "102c2c", - "080808": "080808", "396dce": "70a757", "2d48a8": "3c6959", "8f4e2f": "2f4567", @@ -9,17 +8,14 @@ "d79a53": "5a829b", "eb363a": "614378", "fffccc": "d3eeea", - "000000": "000000", "731a27": "1c163d", "ae2836": "422b61", "34313e": "19142f", - "fdfdfd": "fdfdfd", "8887a8": "d69f97", "c2c3cf": "ffe0cc" }, "2": { "2d2f7b": "244e61", - "080808": "080808", "396dce": "6fc7c1", "2d48a8": "4797a4", "8f4e2f": "692e47", @@ -27,11 +23,9 @@ "d79a53": "964c5c", "eb363a": "e6ecff", "fffccc": "e5b885", - "000000": "000000", "731a27": "615c7e", "ae2836": "9fa7d0", "34313e": "19142f", - "fdfdfd": "fdfdfd", "8887a8": "442e49", "c2c3cf": "694f69" } diff --git a/public/images/pokemon/variant/exp/889.json b/public/images/pokemon/variant/exp/889.json index 0d3dbf024cb..3c172653f72 100644 --- a/public/images/pokemon/variant/exp/889.json +++ b/public/images/pokemon/variant/exp/889.json @@ -3,30 +3,24 @@ "2d2f7b": "102c2c", "396dce": "70a757", "2d48a8": "3c6959", - "080808": "080808", "f2db8a": "a1c9cd", "731a27": "1c163d", "eb363a": "614378", "ae2836": "422b61", "c2c3cf": "ffe0cc", - "000000": "000000", "8887a8": "d69f97", - "34313e": "19142f", - "fdfdfd": "fdfdfd" + "34313e": "19142f" }, "2": { "2d2f7b": "244e61", "396dce": "6fc7c1", "2d48a8": "4797a4", - "080808": "080808", "f2db8a": "c4826b", "731a27": "615c7e", "eb363a": "e6ecff", "ae2836": "9fa7d0", "c2c3cf": "694f69", - "000000": "000000", "8887a8": "442e49", - "34313e": "22192c", - "fdfdfd": "fdfdfd" + "34313e": "22192c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/890-eternamax.json b/public/images/pokemon/variant/exp/890-eternamax.json index 18f3ca3f097..6445f792042 100644 --- a/public/images/pokemon/variant/exp/890-eternamax.json +++ b/public/images/pokemon/variant/exp/890-eternamax.json @@ -1,7 +1,6 @@ { "1": { "25134c": "162a52", - "010101": "010101", "3622a7": "406d89", "6461ba": "4989a6", "31245f": "264864", @@ -14,7 +13,6 @@ }, "2": { "25134c": "354e95", - "010101": "010101", "3622a7": "bfd1fa", "6461ba": "e1ecff", "31245f": "87a3dd", diff --git a/public/images/pokemon/variant/exp/890.json b/public/images/pokemon/variant/exp/890.json index 781768fde0d..749b4491943 100644 --- a/public/images/pokemon/variant/exp/890.json +++ b/public/images/pokemon/variant/exp/890.json @@ -2,18 +2,14 @@ "2": { "26124d": "4963af", "3a15bc": "bfd1fa", - "010101": "010101", "b21833": "7b2f0e", "eb1533": "cb7622", "9a2433": "732208", "3d2871": "87a3dd", "f46d70": "f1bd4b", "fb2553": "934516", - "675cc5": "675cc5", "ffbcbc": "de9335", - "12042d": "12042d", "e22dbc": "298fb9", - "f18cd5": "73e5dc", - "fefefe": "fefefe" + "f18cd5": "73e5dc" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/891.json b/public/images/pokemon/variant/exp/891.json index e5eb250ad71..a8d182967a2 100644 --- a/public/images/pokemon/variant/exp/891.json +++ b/public/images/pokemon/variant/exp/891.json @@ -5,10 +5,7 @@ "b5ada6": "ad9a8a", "9194a2": "9e988d", "c9cccd": "c8c4c3", - "101010": "101010", "fbfbfb": "f4f4f4", - "262628": "262628", - "fefefe": "fefefe", "655e65": "5c5653", "cdab78": "c75d57", "f8f3a0": "f99350", @@ -21,14 +18,10 @@ "b5ada6": "475b68", "9194a2": "181b33", "c9cccd": "2e3549", - "101010": "101010", "fbfbfb": "444f5b", - "262628": "262628", - "fefefe": "fefefe", "655e65": "433e3f", "cdab78": "cd9e79", "f8f3a0": "f8cf9f", - "b37a55": "b37a55", "393539": "292124" }, "2": { @@ -37,10 +30,7 @@ "b5ada6": "a4a4bc", "9194a2": "7f1c27", "c9cccd": "a52139", - "101010": "101010", "fbfbfb": "d33b3d", - "262628": "262628", - "fefefe": "fefefe", "655e65": "8b8d99", "cdab78": "d6b58f", "f8f3a0": "ffe3ba", diff --git a/public/images/pokemon/variant/exp/892-rapid-strike.json b/public/images/pokemon/variant/exp/892-rapid-strike.json index f9609dbeb89..a0e80f70437 100644 --- a/public/images/pokemon/variant/exp/892-rapid-strike.json +++ b/public/images/pokemon/variant/exp/892-rapid-strike.json @@ -3,23 +3,17 @@ "4f4b58": "4a2e27", "8d8c8e": "957961", "6b6574": "725444", - "010101": "010101", "605f4d": "513b46", "282d26": "25141f", - "fcfcfc": "fcfcfc", - "b9b9b9": "b9b9b9", "9e6225": "8b222f", "fffa60": "ff9736", "d5a926": "b95826", - "42473a": "382334", - "b4b4b4": "b4b4b4", - "fefefe": "fefefe" + "42473a": "382334" }, "1": { "4f4b58": "263138", "8d8c8e": "809ba3", "6b6574": "4c6877", - "010101": "010101", "605f4d": "444f5b", "282d26": "181b33", "fcfcfc": "b3c0c6", @@ -27,15 +21,12 @@ "9e6225": "272735", "fffa60": "616368", "d5a926": "494b54", - "42473a": "2e3549", - "b4b4b4": "b4b4b4", - "fefefe": "fefefe" + "42473a": "2e3549" }, "2": { "4f4b58": "56546b", "8d8c8e": "e8e8ff", "6b6574": "a4a4bc", - "010101": "010101", "605f4d": "213199", "282d26": "07073f", "fcfcfc": "4169d3", @@ -43,8 +34,6 @@ "9e6225": "875537", "fffa60": "f7caa0", "d5a926": "cc9278", - "42473a": "111a6b", - "b4b4b4": "b4b4b4", - "fefefe": "fefefe" + "42473a": "111a6b" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/892.json b/public/images/pokemon/variant/exp/892.json index cb7d7978b0a..7b2dd61bfdb 100644 --- a/public/images/pokemon/variant/exp/892.json +++ b/public/images/pokemon/variant/exp/892.json @@ -1,23 +1,17 @@ { "0": { "605f4d": "513b46", - "010101": "010101", - "fcfcfc": "fcfcfc", "4f4b58": "4a2e27", - "b9b9b9": "b9b9b9", "8d8c8e": "957961", "6b6574": "725444", "282d26": "25141f", "42473a": "382334", "9e6225": "8b222f", "fffa60": "ff9736", - "b4b4b4": "b4b4b4", - "d5a926": "b95826", - "fefefe": "fefefe" + "d5a926": "b95826" }, "1": { "605f4d": "444f5b", - "010101": "010101", "fcfcfc": "b3c0c6", "4f4b58": "263138", "b9b9b9": "768187", @@ -27,13 +21,10 @@ "42473a": "2e3549", "9e6225": "272735", "fffa60": "616368", - "b4b4b4": "b4b4b4", - "d5a926": "494b54", - "fefefe": "fefefe" + "d5a926": "494b54" }, "2": { "605f4d": "870e2a", - "010101": "010101", "fcfcfc": "d33b3d", "4f4b58": "56546b", "b9b9b9": "a52139", @@ -43,8 +34,6 @@ "42473a": "51081e", "9e6225": "875537", "fffa60": "f7caa0", - "b4b4b4": "b4b4b4", - "d5a926": "cc9278", - "fefefe": "fefefe" + "d5a926": "cc9278" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/896.json b/public/images/pokemon/variant/exp/896.json index 46c929da9e3..6684803c8a3 100644 --- a/public/images/pokemon/variant/exp/896.json +++ b/public/images/pokemon/variant/exp/896.json @@ -1,7 +1,6 @@ { "0": { "8cacdd": "8f84c9", - "101010": "101010", "bbd2ff": "b9abea", "eeeef3": "f6ebf6", "cbc1cc": "c9c0d4", @@ -13,7 +12,6 @@ }, "1": { "8cacdd": "41d5b3", - "101010": "101010", "bbd2ff": "9dffff", "eeeef3": "d7ffff", "cbc1cc": "90f6da", @@ -25,7 +23,6 @@ }, "2": { "8cacdd": "bc393b", - "101010": "101010", "bbd2ff": "f68c79", "eeeef3": "fde3d6", "cbc1cc": "f3bca6", diff --git a/public/images/pokemon/variant/exp/897.json b/public/images/pokemon/variant/exp/897.json index 4d99bd33678..491f1aeb1f0 100644 --- a/public/images/pokemon/variant/exp/897.json +++ b/public/images/pokemon/variant/exp/897.json @@ -1,20 +1,14 @@ { "0": { - "3c3c3c": "3c3c3c", - "101010": "101010", "525852": "5d5458", "00285c": "632741", "49478f": "894061", "7c5bcf": "d05a82", - "d9a4e3": "d9a4e3", - "fcfcfc": "fcfcfc", - "755179": "755179", "504e8e": "80447d", "8776e4": "b862b3" }, "1": { "3c3c3c": "622d51", - "101010": "101010", "525852": "904c75", "00285c": "6e1817", "49478f": "932f27", @@ -27,7 +21,6 @@ }, "2": { "3c3c3c": "3a6965", - "101010": "101010", "525852": "5c8a7b", "00285c": "0d2222", "49478f": "13312b", diff --git a/public/images/pokemon/variant/exp/898-ice.json b/public/images/pokemon/variant/exp/898-ice.json index fc6f15bc841..370e2e323f8 100644 --- a/public/images/pokemon/variant/exp/898-ice.json +++ b/public/images/pokemon/variant/exp/898-ice.json @@ -1,7 +1,6 @@ { "0": { "8cacdd": "8f84c9", - "101010": "101010", "bbd2ff": "b9abea", "004037": "00403c", "007766": "00776f", @@ -9,9 +8,7 @@ "eeeef3": "f6ebf6", "cbc1cc": "c9c0d4", "525852": "6a5837", - "fcfcfc": "fcfcfc", "d1c8be": "d7c881", - "c7c8cd": "c7c8cd", "9e8f87": "ae8b50", "003071": "2f104f", "6c6271": "68627a", @@ -22,7 +19,6 @@ }, "1": { "8cacdd": "41d5b3", - "101010": "101010", "bbd2ff": "9dffff", "004037": "00124d", "007766": "345ab5", @@ -30,9 +26,7 @@ "eeeef3": "d7ffff", "cbc1cc": "90f6da", "525852": "38255f", - "fcfcfc": "fcfcfc", "d1c8be": "ba9ded", - "c7c8cd": "c7c8cd", "9e8f87": "927ec4", "003071": "014837", "6c6271": "35486b", @@ -43,7 +37,6 @@ }, "2": { "8cacdd": "bc393b", - "101010": "101010", "bbd2ff": "f68c79", "004037": "3c1522", "007766": "88253e", diff --git a/public/images/pokemon/variant/exp/898-shadow.json b/public/images/pokemon/variant/exp/898-shadow.json index b4aad1b5ce9..981918477d5 100644 --- a/public/images/pokemon/variant/exp/898-shadow.json +++ b/public/images/pokemon/variant/exp/898-shadow.json @@ -2,21 +2,14 @@ "0": { "004037": "00403c", "007766": "00776f", - "3c3c3c": "3c3c3c", "00584b": "005852", - "101010": "101010", "525852": "5d5458", "00285c": "632741", - "fbfbfb": "fbfbfb", "4d524d": "6a5837", "d1c8be": "d7c881", "49478f": "894061", "7c5bcf": "d05a82", - "d9a4e3": "d9a4e3", "9e8f87": "ae8b50", - "c7c8cd": "c7c8cd", - "fcfcfc": "fcfcfc", - "755179": "755179", "4679b7": "3b2948", "00285b": "3b2948", "504e8e": "80447d", @@ -27,17 +20,14 @@ "007766": "345ab5", "3c3c3c": "622d51", "00584b": "183986", - "101010": "101010", "525852": "904c75", "00285c": "6e1817", - "fbfbfb": "fbfbfb", "4d524d": "38255f", "d1c8be": "ba9ded", "49478f": "932f27", "7c5bcf": "cc5837", "d9a4e3": "ff8478", "9e8f87": "927ec4", - "c7c8cd": "c7c8cd", "fcfcfc": "fff3c6", "755179": "a63938", "4679b7": "8d075a", @@ -50,7 +40,6 @@ "007766": "88253e", "3c3c3c": "3a6965", "00584b": "601b35", - "101010": "101010", "525852": "5c8a7b", "00285c": "0d2222", "fbfbfb": "fefdeb", diff --git a/public/images/pokemon/variant/exp/898.json b/public/images/pokemon/variant/exp/898.json index f22e19ed94d..b91fcf52a3d 100644 --- a/public/images/pokemon/variant/exp/898.json +++ b/public/images/pokemon/variant/exp/898.json @@ -6,9 +6,7 @@ "00584b": "005852", "007766": "00776f", "003a87": "71517a", - "101010": "101010", "615350": "6a5837", - "fcfcfc": "fcfcfc", "c7c8cd": "ccc6d1", "9e8f87": "ae8b50", "d1c8be": "d7c881", @@ -22,9 +20,7 @@ "00584b": "183986", "007766": "345ab5", "003a87": "c64883", - "101010": "101010", "615350": "38255f", - "fcfcfc": "fcfcfc", "c7c8cd": "ccc6d1", "9e8f87": "927ec4", "d1c8be": "ba9ded", @@ -38,7 +34,6 @@ "00584b": "601b35", "007766": "88253e", "003a87": "cc8c49", - "101010": "101010", "615350": "181935", "fcfcfc": "fefdeb", "c7c8cd": "c4bdb3", diff --git a/public/images/pokemon/variant/exp/900.json b/public/images/pokemon/variant/exp/900.json index 768fbad4452..c04f7f8c108 100644 --- a/public/images/pokemon/variant/exp/900.json +++ b/public/images/pokemon/variant/exp/900.json @@ -1,30 +1,17 @@ { "1": { - "412d2b": "412d2b", - "715f5d": "715f5d", - "574644": "574644", - "000000": "000000", "69441a": "221a69", "a77235": "354da7", "d29f4b": "4b84d2", - "ffffff": "ffffff", - "3f6378": "3f6378", - "ddf5ff": "ddf5ff", - "dab16e": "6e79da", - "f3e4c0": "f3e4c0" + "dab16e": "6e79da" }, "2": { "412d2b": "424242", "715f5d": "71705d", "574644": "808080", - "000000": "000000", "69441a": "a54200", "a77235": "e68400", "d29f4b": "ffde00", - "ffffff": "ffffff", - "3f6378": "3f6378", - "ddf5ff": "ddf5ff", - "dab16e": "dad46e", - "f3e4c0": "f3e4c0" + "dab16e": "dad46e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/901.json b/public/images/pokemon/variant/exp/901.json index 8c830cd27e3..14961e69576 100644 --- a/public/images/pokemon/variant/exp/901.json +++ b/public/images/pokemon/variant/exp/901.json @@ -4,18 +4,10 @@ "231a18": "0c1515", "63443d": "31563f", "502f29": "273b32", - "77655b": "77655b", - "0f0f0f": "0f0f0f", - "9c8d86": "9c8d86", - "4b4236": "4b4236", "ca8b35": "c48e81", "fec643": "f7eee1", - "fcfcfc": "fcfcfc", "25521f": "557f24", - "fec672": "f2cab8", - "7a1349": "7a1349", - "95908a": "95908a", - "b4b4b1": "b4b4b1" + "fec672": "f2cab8" }, "2": { "382423": "1e2249", @@ -23,16 +15,11 @@ "63443d": "46527a", "502f29": "323760", "77655b": "c199ae", - "0f0f0f": "0f0f0f", "9c8d86": "ede6eb", "4b4236": "593d4a", "ca8b35": "437aff", "fec643": "bfeeff", - "fcfcfc": "fcfcfc", "25521f": "f83259", - "fec672": "96b7ff", - "7a1349": "7a1349", - "95908a": "95908a", - "b4b4b1": "b4b4b1" + "fec672": "96b7ff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/903.json b/public/images/pokemon/variant/exp/903.json index 703b11b471a..baa290c16a3 100644 --- a/public/images/pokemon/variant/exp/903.json +++ b/public/images/pokemon/variant/exp/903.json @@ -2,7 +2,6 @@ "1": { "352d37": "113b69", "4e3f50": "136e81", - "101010": "101010", "4d4b65": "3a0f0e", "7a8eb1": "9f4c3d", "a2bddb": "bd795f", @@ -10,14 +9,12 @@ "a47b39": "6e6f6f", "fe2f29": "31dabb", "7e62b9": "722738", - "fcfcfc": "fcfcfc", "ecc733": "a7a7a7", "5e4181": "4b1320" }, "2": { "352d37": "601522", "4e3f50": "982e33", - "101010": "101010", "4d4b65": "0e2125", "7a8eb1": "194648", "a2bddb": "256258", diff --git a/public/images/pokemon/variant/exp/909.json b/public/images/pokemon/variant/exp/909.json index 0ea1af439d6..55e965387b4 100644 --- a/public/images/pokemon/variant/exp/909.json +++ b/public/images/pokemon/variant/exp/909.json @@ -9,16 +9,8 @@ "e85234": "366565", "baaeaa": "a4ba9e", "f4f4e4": "ffffff", - "000000": "000000", - "ffffff": "ffffff", - "4b4b4b": "4b4b4b", - "593b4b": "593b4b", - "876167": "876167", - "d39794": "d39794", "885c29": "63cbcb", - "cb9c3d": "8cd9d9", - "303239": "303239", - "777777": "777777" + "cb9c3d": "8cd9d9" }, "2": { "e2762d": "2ce455", @@ -26,19 +18,8 @@ "fcf676": "78ff99", "60182b": "162319", "ab3c28": "243929", - "77645e": "77645e", "e85234": "38583f", - "baaeaa": "baaeaa", - "f4f4e4": "f4f4e4", - "000000": "000000", - "ffffff": "ffffff", - "4b4b4b": "4b4b4b", - "593b4b": "593b4b", - "876167": "876167", - "d39794": "d39794", "885c29": "26c148", - "cb9c3d": "2ce455", - "303239": "303239", - "777777": "777777" + "cb9c3d": "2ce455" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/912.json b/public/images/pokemon/variant/exp/912.json index a374c871331..6dc013c4500 100644 --- a/public/images/pokemon/variant/exp/912.json +++ b/public/images/pokemon/variant/exp/912.json @@ -3,14 +3,12 @@ "1f5978": "8c3b14", "3686b1": "d96536", "2fbee8": "e69c51", - "0f0f0f": "0f0f0f", "84d7ff": "f7ca7b", "f2fdff": "fff0d4", "4d6373": "a05926", "f6fbfc": "ffe3b0", "becde4": "d79f63", "001b77": "7f0e0b", - "ffffff": "ffffff", "7999bd": "b17d4f", "005ba2": "a2301b", "6a6a41": "3b2e28", diff --git a/public/images/pokemon/variant/exp/913.json b/public/images/pokemon/variant/exp/913.json index ef10ed6c0e4..1626944ed42 100644 --- a/public/images/pokemon/variant/exp/913.json +++ b/public/images/pokemon/variant/exp/913.json @@ -6,12 +6,10 @@ "1e7cd3": "bd3c24", "304f5a": "62290c", "64d9ea": "ffb75c", - "0f0f0f": "0f0f0f", "4296a2": "f77122", "ab9a3a": "5b5450", "735c28": "3b2e28", "ffdf2b": "868382", - "ffffff": "ffffff", "535153": "975432", "fcfcfc": "ffe3b0", "af9aa5": "d79f63" diff --git a/public/images/pokemon/variant/exp/914.json b/public/images/pokemon/variant/exp/914.json index 88384878b7a..f17ee8abcc1 100644 --- a/public/images/pokemon/variant/exp/914.json +++ b/public/images/pokemon/variant/exp/914.json @@ -2,7 +2,6 @@ "2": { "3d7a71": "541222", "55dbe6": "f15e76", - "0f0f0f": "0f0f0f", "394bee": "1d6c42", "282a4d": "072a2b", "419bc2": "a22f49", @@ -13,11 +12,9 @@ "a24720": "eac7b4", "eda936": "ffa564", "803213": "4b251b", - "ffffff": "ffffff", "efffff": "4b40be", "cb7e29": "c76740", "8ea6a8": "3b188e", - "63797f": "120e4a", - "004040": "004040" + "63797f": "120e4a" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/919.json b/public/images/pokemon/variant/exp/919.json index 2a5000c4454..aadaafcc570 100644 --- a/public/images/pokemon/variant/exp/919.json +++ b/public/images/pokemon/variant/exp/919.json @@ -2,7 +2,6 @@ "0": { "2f3342": "1a1815", "63738c": "4b453d", - "000000": "000000", "8291a6": "6c655c", "454b61": "302d27", "ada7b2": "a29d62", @@ -14,19 +13,14 @@ "1": { "2f3342": "162d2a", "63738c": "498f57", - "000000": "000000", "8291a6": "70ba74", "454b61": "295449", - "ada7b2": "ada7b2", - "dbdde1": "dbdde1", - "6c6473": "6c6473", "ffc608": "c54d2d", "ad8e13": "7f223a" }, "2": { "2f3342": "340f21", "63738c": "983444", - "000000": "000000", "8291a6": "c74d51", "454b61": "601c3a", "ada7b2": "333333", diff --git a/public/images/pokemon/variant/exp/920.json b/public/images/pokemon/variant/exp/920.json index 01685e97fbb..386572ef2b3 100644 --- a/public/images/pokemon/variant/exp/920.json +++ b/public/images/pokemon/variant/exp/920.json @@ -1,45 +1,33 @@ { "0": { "2c2c2c": "475316", - "d6dbdf": "d6dbdf", "5c5d5c": "dbcf15", - "000000": "000000", "484848": "8e931a", - "9d9fa4": "9d9fa4", "ae772a": "8c0325", "fca831": "c42929", "5b6671": "292929", - "ffffff": "ffffff", "3e454d": "1d1d1d", "778a99": "444444", "7d551e": "4d0517" }, "1": { "2c2c2c": "1e391b", - "d6dbdf": "d6dbdf", "5c5d5c": "529042", - "000000": "000000", "484848": "34642c", - "9d9fa4": "9d9fa4", "ae772a": "9b1515", "fca831": "c33c26", "5b6671": "676974", - "ffffff": "ffffff", "3e454d": "4b4d5c", "778a99": "919191", "7d551e": "550927" }, "2": { "2c2c2c": "47132c", - "d6dbdf": "d6dbdf", "5c5d5c": "b52828", - "000000": "000000", "484848": "791b2d", - "9d9fa4": "9d9fa4", "ae772a": "3a3476", "fca831": "2986c4", "5b6671": "525252", - "ffffff": "ffffff", "3e454d": "3b3b3b", "778a99": "858585", "7d551e": "1c1936" diff --git a/public/images/pokemon/variant/exp/934.json b/public/images/pokemon/variant/exp/934.json index 223fbcf5d0e..94d4cc8b4b0 100644 --- a/public/images/pokemon/variant/exp/934.json +++ b/public/images/pokemon/variant/exp/934.json @@ -4,7 +4,6 @@ "999797": "77595f", "ededed": "f9c2cd", "c1b9b9": "bc808c", - "000000": "000000", "6a4c37": "718491", "c8a085": "d8e9f5", "997862": "adbac3", @@ -22,7 +21,6 @@ "999797": "444251", "ededed": "9ba0a0", "c1b9b9": "6a6a72", - "000000": "000000", "6a4c37": "3d5e47", "c8a085": "7fc17c", "997862": "5d9157", diff --git a/public/images/pokemon/variant/exp/940.json b/public/images/pokemon/variant/exp/940.json index f5f5ae5663b..a21e494685c 100644 --- a/public/images/pokemon/variant/exp/940.json +++ b/public/images/pokemon/variant/exp/940.json @@ -1,7 +1,6 @@ { "1": { "1c1e22": "271945", - "000000": "000000", "3d4049": "4c4982", "7d5e1b": "1b9ea1", "c2a227": "5dd9c8", @@ -9,19 +8,15 @@ "292c32": "372b61", "666971": "595e99", "3f424b": "4a4780", - "ffffff": "ffffff", "8596b0": "e39fc5", "b06b38": "9a5fd9", - "000618": "000618", "704424": "433382", "ff9b37": "ce87fa", - "4fc6b4": "4fc6b4", "40434d": "754494", "af6a37": "413280" }, "2": { "1c1e22": "532d61", - "000000": "000000", "3d4049": "edc5c8", "7d5e1b": "8c2a55", "c2a227": "b3466a", @@ -29,10 +24,8 @@ "292c32": "e099a5", "666971": "f7dfdc", "3f424b": "ebc3c5", - "ffffff": "ffffff", "8596b0": "e39fc5", "b06b38": "57436e", - "000618": "000618", "704424": "2b2745", "ff9b37": "745b85", "4fc6b4": "ffcf4a", diff --git a/public/images/pokemon/variant/exp/941.json b/public/images/pokemon/variant/exp/941.json index 1c9bc304c35..0fc158976b0 100644 --- a/public/images/pokemon/variant/exp/941.json +++ b/public/images/pokemon/variant/exp/941.json @@ -1,19 +1,14 @@ { "1": { "825d21": "217991", - "000000": "000000", "ffcd37": "6ef5c8", "aa7e24": "3dd1cc", "34393f": "2b3863", "6c7177": "354c70", "26282c": "1f1d54", "8c898c": "9c5bd9", - "fdfdfd": "fdfdfd", - "1a1c1f": "1a1c1f", "73bbbf": "de82ff", "441e21": "d16492", - "0f0f0f": "0f0f0f", - "ebffff": "ebffff", "692a2f": "ff9ec6", "2b1717": "773185", "37415a": "55348a", @@ -21,19 +16,14 @@ }, "2": { "825d21": "8a2f62", - "000000": "000000", "ffcd37": "e3667d", "aa7e24": "c44f6c", "34393f": "f7bebe", "6c7177": "f7dfdc", "26282c": "e394a7", "8c898c": "cf7827", - "fdfdfd": "fdfdfd", - "1a1c1f": "1a1c1f", "73bbbf": "ffcf4a", "441e21": "51467a", - "0f0f0f": "0f0f0f", - "ebffff": "ebffff", "692a2f": "776294", "2b1717": "3a3466", "37415a": "723b80", diff --git a/public/images/pokemon/variant/exp/948.json b/public/images/pokemon/variant/exp/948.json index a99438ad7f8..bf353053172 100644 --- a/public/images/pokemon/variant/exp/948.json +++ b/public/images/pokemon/variant/exp/948.json @@ -7,7 +7,6 @@ "976924": "a50927", "ffec37": "ff6237", "fef8f5": "fff4f1", - "000000": "000000", "eaba2b": "b9352b", "d2bbac": "e2bea6", "886b59": "8d5740", @@ -22,7 +21,6 @@ "976924": "254087", "ffec37": "4b86bd", "fef8f5": "ffede5", - "000000": "000000", "eaba2b": "2e609b", "d2bbac": "d8bdab", "886b59": "ad927b", diff --git a/public/images/pokemon/variant/exp/949.json b/public/images/pokemon/variant/exp/949.json index 3a3c4564e11..7901f6a1c57 100644 --- a/public/images/pokemon/variant/exp/949.json +++ b/public/images/pokemon/variant/exp/949.json @@ -1,6 +1,5 @@ { "1": { - "000000": "000000", "282828": "33134d", "211f1f": "33134d", "404040": "4b3073", @@ -18,7 +17,6 @@ "cdae52": "0c4a83" }, "2": { - "000000": "000000", "282828": "460001", "211f1f": "460001", "404040": "70150e", diff --git a/public/images/pokemon/variant/exp/951.json b/public/images/pokemon/variant/exp/951.json index 7361474a6f3..979029a3c74 100644 --- a/public/images/pokemon/variant/exp/951.json +++ b/public/images/pokemon/variant/exp/951.json @@ -6,7 +6,6 @@ "2e302f": "1f0c17", "3f9a5f": "be8a84", "2f683c": "9d6b5b", - "0f0f0f": "0f0f0f", "5c7c5c": "4c292f", "79b97b": "704f4f", "a6b496": "facf81", @@ -22,13 +21,11 @@ "2e302f": "3b2e3a", "3f9a5f": "a78bdc", "2f683c": "7456a8", - "0f0f0f": "0f0f0f", "5c7c5c": "8e7eb1", "79b97b": "cfbfe6", "a6b496": "fa95d1", "acd2ae": "f8f3fe", "ff9115": "b6dfff", - "d06382": "d06382", "1c3520": "452a75" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/952.json b/public/images/pokemon/variant/exp/952.json index 5413205c023..a58d68c72a7 100644 --- a/public/images/pokemon/variant/exp/952.json +++ b/public/images/pokemon/variant/exp/952.json @@ -3,8 +3,6 @@ "294e25": "55321d", "51c444": "facf81", "3f8147": "d38c43", - "0f0f0f": "0f0f0f", - "1f1f1f": "1f1f1f", "641e1c": "8c2f0a", "a23424": "bb5a2b", "ef5131": "f8975d", @@ -12,11 +10,7 @@ "cdcdcd": "ffd2cc", "dd5800": "ffb676", "42804b": "9d6b5b", - "192021": "192021", - "fffff7": "fffff7", - "000000": "000000", "ee3131": "9d560e", - "eff3e6": "eff3e6", "e65a29": "c8833c", "ff9c18": "e4ce6d", "ffde52": "fffaa5", @@ -29,8 +23,6 @@ "294e25": "3f3399", "51c444": "90c3ea", "3f8147": "627bcd", - "0f0f0f": "0f0f0f", - "1f1f1f": "1f1f1f", "641e1c": "8c1f39", "a23424": "cb486d", "ef5131": "f77baf", @@ -38,11 +30,7 @@ "cdcdcd": "f8f3fe", "dd5800": "f597cf", "42804b": "9884d3", - "192021": "192021", - "fffff7": "fffff7", - "000000": "000000", "ee3131": "e03d64", - "eff3e6": "eff3e6", "e65a29": "f577a1", "ff9c18": "fa95d1", "ffde52": "fecff5", diff --git a/public/images/pokemon/variant/exp/953.json b/public/images/pokemon/variant/exp/953.json index 6f2885be607..2168de29c70 100644 --- a/public/images/pokemon/variant/exp/953.json +++ b/public/images/pokemon/variant/exp/953.json @@ -5,7 +5,6 @@ "c5b4aa": "d3e6e6", "37332b": "104139", "9e8360": "4059bd", - "0f0f0f": "0f0f0f", "575243": "18734a", "777462": "199e46", "afa668": "f9fba2", @@ -22,7 +21,6 @@ "c5b4aa": "39cfbc", "37332b": "261031", "9e8360": "dbedec", - "0f0f0f": "0f0f0f", "575243": "5e2d72", "777462": "8358a1", "afa668": "c9dbac", @@ -33,4 +31,4 @@ "4e4530": "534b8c", "ba6e29": "4792bd" } -} +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/954.json b/public/images/pokemon/variant/exp/954.json index 825973cc6b0..98eca52471d 100644 --- a/public/images/pokemon/variant/exp/954.json +++ b/public/images/pokemon/variant/exp/954.json @@ -4,7 +4,6 @@ "e11bff": "e1efff", "aa13b7": "a0a9da", "91263f": "87ceeb", - "000000": "000000", "ce2d6b": "fffd91", "ff4c90": "ffbc00", "ffd5e5": "fbf3ab", @@ -28,7 +27,6 @@ "e11bff": "9b2f17", "aa13b7": "6b1911", "91263f": "c65813", - "000000": "000000", "ce2d6b": "ded051", "ff4c90": "141031", "ffd5e5": "432f77", diff --git a/public/images/pokemon/variant/exp/962.json b/public/images/pokemon/variant/exp/962.json index 7f41b7aa01a..e64860b1a63 100644 --- a/public/images/pokemon/variant/exp/962.json +++ b/public/images/pokemon/variant/exp/962.json @@ -1,86 +1,40 @@ { "0": { - "030303": "030303", "44393e": "3e1d26", "997d85": "924f57", "efe3e3": "f6cbc4", "b6a2a7": "dd9f9d", - "000000": "000000", "65545b": "60354a", - "191717": "191717", "723139": "1f3078", "ffffff": "fceff1", "d65263": "4592c0", "a03e4b": "2e6fa8", "bcb1b9": "998482", - "050405": "050405", - "8c7987": "60354a", - "987d85": "987d85", - "987c84": "987c84", - "b5a1a6": "b5a1a6", - "66555c": "66555c", - "110e0f": "110e0f", - "efe2e3": "efe2e3", - "080607": "080607", - "eee2e2": "eee2e2", - "1b1919": "1b1919", - "b7a3a8": "b7a3a8", - "0d0a0c": "0d0a0c" + "8c7987": "60354a" }, "1": { - "030303": "030303", "44393e": "1e382a", "997d85": "404b22", "efe3e3": "e8e8c0", "b6a2a7": "c6ca8e", - "000000": "000000", "65545b": "395740", - "191717": "191717", "723139": "3e1e1d", "ffffff": "edf8e6", "d65263": "b37e6f", "a03e4b": "79433f", "bcb1b9": "6a856a", - "050405": "050405", - "8c7987": "26452d", - "987d85": "987d85", - "987c84": "987c84", - "b5a1a6": "b5a1a6", - "66555c": "66555c", - "110e0f": "110e0f", - "efe2e3": "efe2e3", - "080607": "080607", - "eee2e2": "eee2e2", - "1b1919": "1b1919", - "b7a3a8": "b7a3a8", - "0d0a0c": "0d0a0c" + "8c7987": "26452d" }, "2": { - "030303": "030303", "44393e": "754156", "997d85": "211f45", "efe3e3": "67548a", "b6a2a7": "453863", - "000000": "000000", "65545b": "a5777f", - "191717": "191717", "723139": "545151", "ffffff": "f7e5d0", "d65263": "aba7a8", "a03e4b": "888685", - "bcb1b9": "a96c4b", - "050405": "050405", - "8c7987": "8c7987", - "987d85": "987d85", - "987c84": "987c84", - "b5a1a6": "b5a1a6", - "66555c": "66555c", - "110e0f": "110e0f", - "efe2e3": "efe2e3", - "080607": "080607", - "eee2e2": "eee2e2", - "1b1919": "1b1919", - "b7a3a8": "b7a3a8", - "0d0a0c": "0d0a0c" + "bcb1b9": "a96c4b" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/967.json b/public/images/pokemon/variant/exp/967.json index 212b46ad6f7..f0981eb020e 100644 --- a/public/images/pokemon/variant/exp/967.json +++ b/public/images/pokemon/variant/exp/967.json @@ -3,17 +3,10 @@ "1c2916": "272431", "384a35": "464354", "54654e": "67637a", - "b9b7b3": "b9b7b3", - "0f0f0f": "0f0f0f", "f16b32": "bead9d", "607d6d": "6e76a9", - "fcfcfc": "fcfcfc", "75b07d": "9299c7", "34453d": "444a71", - "4b565c": "4b565c", - "222328": "222328", - "323943": "323943", - "e2e9d7": "e2e9d7", "993832": "625549" }, "2": { @@ -21,10 +14,8 @@ "384a35": "5d0c0c", "54654e": "942d22", "b9b7b3": "c0ab8b", - "0f0f0f": "0f0f0f", "f16b32": "8c63d2", "607d6d": "6b2c31", - "fcfcfc": "fcfcfc", "75b07d": "a95d50", "34453d": "531d27", "4b565c": "815652", diff --git a/public/images/pokemon/variant/exp/968.json b/public/images/pokemon/variant/exp/968.json index 3abf6870ae9..1209b51c4a6 100644 --- a/public/images/pokemon/variant/exp/968.json +++ b/public/images/pokemon/variant/exp/968.json @@ -4,18 +4,9 @@ "c2544c": "4d7d3a", "f7645a": "5c9446", "fa968d": "72b657", - "73666a": "73666a", - "a09498": "a09498", - "cfcbc4": "cfcbc4", - "000000": "000000", - "fefefe": "fefefe", "22b5dd": "c1597d", "4b86a4": "a14363", - "bd5b4b": "4d7d3a", - "9b5746": "9b5746", - "fccdba": "fccdba", - "8b2c3d": "8b2c3d", - "d8816d": "d8816d" + "bd5b4b": "4d7d3a" }, "2": { "8f433f": "6f390d", @@ -25,14 +16,8 @@ "73666a": "676e74", "a09498": "a1a9ae", "cfcbc4": "dadae3", - "000000": "000000", - "fefefe": "fefefe", "22b5dd": "46de9b", "4b86a4": "3caf7c", - "bd5b4b": "ba7429", - "9b5746": "9b5746", - "fccdba": "fccdba", - "8b2c3d": "8b2c3d", - "d8816d": "d8816d" + "bd5b4b": "ba7429" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/969.json b/public/images/pokemon/variant/exp/969.json index 1d703142713..57ca9155f5f 100644 --- a/public/images/pokemon/variant/exp/969.json +++ b/public/images/pokemon/variant/exp/969.json @@ -12,7 +12,6 @@ "3d464b": "44111b", "4d6076": "6b1933", "ffff31": "dde4e6", - "0f0f0f": "0f0f0f", "5a869c": "bd2646", "635181": "527492", "453b4d": "2c445a", @@ -33,7 +32,6 @@ "3d464b": "2d293a", "4d6076": "433e53", "ffff31": "dde4e6", - "0f0f0f": "0f0f0f", "5a869c": "656b8b", "635181": "193a1c", "453b4d": "0d240f", diff --git a/public/images/pokemon/variant/exp/973.json b/public/images/pokemon/variant/exp/973.json index 47244e0779f..fe7d1be4ce5 100644 --- a/public/images/pokemon/variant/exp/973.json +++ b/public/images/pokemon/variant/exp/973.json @@ -1,56 +1,36 @@ { "0": { - "2c2936": "2c2936", - "211f28": "211f28", "3c3946": "404355", - "ffffff": "ffffff", "c4c1dc": "978f97", "ff79b1": "cfbbbc", "811f47": "7c6364", "ffe393": "e7a11f", "ffd55f": "d28011", - "3b3b3b": "3b3b3b", - "000000": "000000", "760c38": "540b1d", "c92f6e": "a7323f", "d43e7c": "988282", - "9c174e": "7d172b", - "3d3b4e": "3d3b4e" + "9c174e": "7d172b" }, "1": { - "2c2936": "2c2936", - "211f28": "211f28", - "3c3946": "3c3946", - "ffffff": "ffffff", - "c4c1dc": "c4c1dc", "ff79b1": "cb36b9", "811f47": "430855", "ffe393": "5fdd5b", "ffd55f": "289c43", - "3b3b3b": "3b3b3b", - "000000": "000000", "760c38": "660f71", "c92f6e": "b11468", "d43e7c": "911b92", - "9c174e": "700f49", - "3d3b4e": "3d3b4e" + "9c174e": "700f49" }, "2": { - "2c2936": "2c2936", - "211f28": "211f28", - "3c3946": "3c3946", "ffffff": "fbf2f4", "c4c1dc": "978f97", "ff79b1": "f29f5b", "811f47": "943615", "ffe393": "3175cb", "ffd55f": "2c3ca6", - "3b3b3b": "3b3b3b", - "000000": "000000", "760c38": "17167d", "c92f6e": "3175cb", "d43e7c": "d77433", - "9c174e": "2c3ca6", - "3d3b4e": "3d3b4e" + "9c174e": "2c3ca6" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/974.json b/public/images/pokemon/variant/exp/974.json index fab4a8d61d1..bba74da0831 100644 --- a/public/images/pokemon/variant/exp/974.json +++ b/public/images/pokemon/variant/exp/974.json @@ -3,15 +3,11 @@ "736875": "8c2727", "bebaba": "ee9065", "524951": "661427", - "0f0f0f": "0f0f0f", "efefef": "ffcc9e", "a29793": "c85442", "a44667": "2c7193", "c7639c": "48aeba", "f493c9": "71e2d3", - "fcfcfc": "fcfcfc", - "c9c9c9": "c9c9c9", - "5e5e5e": "5e5e5e", "832041": "6a193e", "cd394a": "ac5070", "dc7569": "e37c8e" @@ -20,15 +16,11 @@ "736875": "1f355e", "bebaba": "2a607f", "524951": "172651", - "0f0f0f": "0f0f0f", "efefef": "438aa0", "a29793": "1c426b", "a44667": "ae664a", "c7639c": "daa470", "f493c9": "ffdfa1", - "fcfcfc": "fcfcfc", - "c9c9c9": "c9c9c9", - "5e5e5e": "5e5e5e", "832041": "433363", "cd394a": "775b8c", "dc7569": "a87fae" diff --git a/public/images/pokemon/variant/exp/975.json b/public/images/pokemon/variant/exp/975.json index 7ac0645ce57..e8d40f7aa90 100644 --- a/public/images/pokemon/variant/exp/975.json +++ b/public/images/pokemon/variant/exp/975.json @@ -1,6 +1,5 @@ { "1": { - "0f0f0f": "0f0f0f", "b6b6c0": "d85661", "555566": "660e45", "6a6069": "8c2727", @@ -13,11 +12,9 @@ "a44667": "2c7193", "f493c9": "71e2d3", "ded6c0": "db9b76", - "f7f6f2": "ffcfa8", - "fcfcfc": "fcfcfc" + "f7f6f2": "ffcfa8" }, "2": { - "0f0f0f": "0f0f0f", "b6b6c0": "ffe9d6", "555566": "a05c56", "6a6069": "121f43", @@ -30,7 +27,6 @@ "a44667": "ae664a", "f493c9": "ffdfa1", "ded6c0": "2b5a70", - "f7f6f2": "3a7687", - "fcfcfc": "fcfcfc" + "f7f6f2": "3a7687" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/981.json b/public/images/pokemon/variant/exp/981.json index 79ff9efd3ac..43071ff6ad6 100644 --- a/public/images/pokemon/variant/exp/981.json +++ b/public/images/pokemon/variant/exp/981.json @@ -7,13 +7,10 @@ "9ca0ab": "665144", "8b704c": "3d6186", "322513": "091e34", - "0f0f0f": "0f0f0f", "fff42f": "c29925", "b4ff68": "ff8f00", - "fcfcfc": "fcfcfc", "deb43d": "dec93d", "6aad21": "ffbd42", - "a8abb3": "a8abb3", "775c10": "774f10", "b1a75c": "7e262d", "3d680f": "be5302", @@ -35,13 +32,10 @@ "9ca0ab": "9c5978", "8b704c": "e4efcf", "322513": "337142", - "0f0f0f": "0f0f0f", "fff42f": "ed9233", "b4ff68": "dc7346", - "fcfcfc": "fcfcfc", "deb43d": "ebbb72", "6aad21": "d8975d", - "a8abb3": "a8abb3", "775c10": "b35127", "b1a75c": "1e7884", "3d680f": "953c2f", diff --git a/public/images/pokemon/variant/exp/982-three-segment.json b/public/images/pokemon/variant/exp/982-three-segment.json index beafe9763bc..eedc4163bc6 100644 --- a/public/images/pokemon/variant/exp/982-three-segment.json +++ b/public/images/pokemon/variant/exp/982-three-segment.json @@ -3,22 +3,18 @@ "206a83": "2a413f", "6abdcd": "748da4", "318ba4": "4a6165", - "101010": "101010", "735a41": "53575a", "f6e67b": "fdfdfd", "debd39": "aeaeae", "bd8b20": "757575", "5a6273": "5d6970", "d5e6f6": "c1d7e2", - "f6ffff": "f6ffff", - "fff6c5": "fdfdfd", - "000000": "000000" + "fff6c5": "fdfdfd" }, "2": { "206a83": "1d737a", "6abdcd": "b5f2ec", "318ba4": "38a8a6", - "101010": "101010", "735a41": "462a3e", "f6e67b": "db4069", "debd39": "a12e55", @@ -26,7 +22,6 @@ "5a6273": "5c4a4d", "d5e6f6": "ffd4ac", "f6ffff": "fdffdc", - "fff6c5": "e97798", - "000000": "000000" + "fff6c5": "e97798" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/982.json b/public/images/pokemon/variant/exp/982.json index 1237494d460..ac0864b8e6e 100644 --- a/public/images/pokemon/variant/exp/982.json +++ b/public/images/pokemon/variant/exp/982.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "6bbdce": "748da4", "318ca5": "4a6165", "735a42": "53575a", @@ -11,11 +10,9 @@ "5a6373": "5d6970", "fff7c5": "fdfdfd", "f7ffff": "f6ffff", - "bdcee6": "bdcee6", "216b84": "2a413f" }, "2": { - "101010": "101010", "6bbdce": "b5f2ec", "318ca5": "38a8a6", "735a42": "692342", diff --git a/public/images/pokemon/variant/exp/987.json b/public/images/pokemon/variant/exp/987.json index 6456e7153a4..c3514e5b78c 100644 --- a/public/images/pokemon/variant/exp/987.json +++ b/public/images/pokemon/variant/exp/987.json @@ -2,7 +2,6 @@ "0": { "8a378a": "9b490e", "ee93e8": "ffdd67", - "0f0f0f": "0f0f0f", "70bbb4": "5bb6ef", "4a83a4": "387fa7", "314a62": "244260", @@ -12,13 +11,11 @@ "a4295a": "cc762f", "b36cc1": "d3941a", "eee662": "ffc7ff", - "f9f9f9": "f9f9f9", "bd9431": "cb79dd" }, "1": { "8a378a": "0c8086", "ee93e8": "3df7ed", - "0f0f0f": "0f0f0f", "70bbb4": "eefff8", "4a83a4": "a1c8db", "314a62": "7396b4", @@ -28,13 +25,11 @@ "a4295a": "e28c27", "b36cc1": "1dbdb9", "eee662": "a6f0f8", - "f9f9f9": "f9f9f9", "bd9431": "66d0e5" }, "2": { "8a378a": "5d4a2f", "ee93e8": "fff7dd", - "0f0f0f": "0f0f0f", "70bbb4": "f8d371", "4a83a4": "e6aa47", "314a62": "b56f2a", @@ -44,7 +39,6 @@ "a4295a": "a62a21", "b36cc1": "eece8c", "eee662": "a6f0f8", - "f9f9f9": "f9f9f9", "bd9431": "66d0e5" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/988.json b/public/images/pokemon/variant/exp/988.json index 9e6c50e9d06..d3e7851e1fe 100644 --- a/public/images/pokemon/variant/exp/988.json +++ b/public/images/pokemon/variant/exp/988.json @@ -7,10 +7,6 @@ "d8a33f": "56e4ba", "d1fd77": "e2fd77", "f04137": "17b79f", - "35384f": "35384f", - "465175": "465175", - "f1f7f7": "f1f7f7", - "181820": "181820", "a9a9ab": "92c9b9", "ff3121": "2c9484", "e63529": "23ae9a", diff --git a/public/images/pokemon/variant/exp/993.json b/public/images/pokemon/variant/exp/993.json index 3a9ed405d1f..6a18ab70264 100644 --- a/public/images/pokemon/variant/exp/993.json +++ b/public/images/pokemon/variant/exp/993.json @@ -2,99 +2,53 @@ "1": { "272629": "754711", "47454a": "c59b4b", - "000000": "000000", "787578": "f8f5e2", "ff4dcb": "b7c6d6", "ff82db": "d9d9ea", "984983": "58585c", "ffe3ea": "f8f5f5", - "0d1e3d": "0d1e3d", "1f468f": "3c236a", "83a2e5": "c9b0f8", "3f7be5": "a58fcd", "3266d6": "8c6bac", "222421": "91988f", "2a66d6": "662ad6", - "2f2d2f": "2f2d2f", - "3c393c": "3c393c", - "2e2c2e": "2e2c2e", "316bda": "8931da", - "4a454a": "4a454a", "fa4dd6": "e3dde2", "ff5ade": "d6d3d5", "fc55db": "c1bbc0", "f84dd7": "c1b9bf", - "ff80db": "ff80db", - "494449": "494449", - "1d1f1b": "1d1f1b", - "242423": "242423", - "281d21": "281d21", - "ff51de": "ff51de", - "212421": "212421", - "342631": "342631", - "262829": "262829", "ffa8e6": "e5e4ea", "a95994": "aca5aa", "b42a8c": "7c7a7a", "9b2478": "454445", "454348": "c59b4b", "2b0b21": "070707", - "0f040c": "0f040c", - "6d1a55": "1c1b1b", - "2c1526": "2c1526", - "5d5255": "5d5255", - "373237": "373237", - "3d383c": "3d383c", - "161414": "161414", - "150a11": "150a11" + "6d1a55": "1c1b1b" }, "2": { "272629": "203c45", "47454a": "467678", - "000000": "000000", "787578": "a4bfbe", "ff4dcb": "e3bbd3", "ff82db": "f1d9e7", "984983": "873954", - "ffe3ea": "ffe3ea", "0d1e3d": "470e2c", "1f468f": "600f40", "83a2e5": "e583a5", "3f7be5": "8a143d", "3266d6": "ba1e51", - "222421": "222421", "2a66d6": "f1c4d4", - "2f2d2f": "2f2d2f", - "3c393c": "3c393c", - "2e2c2e": "2e2c2e", "316bda": "f1bdd8", - "4a454a": "4a454a", "fa4dd6": "f8d1de", "ff5ade": "f8e6ee", "fc55db": "f8eaf1", "f84dd7": "f8dfec", "ff80db": "ffe5f8", - "494449": "494449", - "1d1f1b": "1d1f1b", - "242423": "242423", - "281d21": "281d21", "ff51de": "f8e3f4", - "212421": "212421", - "342631": "342631", - "262829": "262829", "ffa8e6": "f8edf4", - "a95994": "a95994", "b42a8c": "c181a7", "9b2478": "83486b", - "454348": "454348", - "2b0b21": "2b0b21", - "0f040c": "0f040c", - "6d1a55": "4c1f39", - "2c1526": "2c1526", - "5d5255": "5d5255", - "373237": "373237", - "3d383c": "3d383c", - "161414": "161414", - "150a11": "150a11" + "6d1a55": "4c1f39" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/994.json b/public/images/pokemon/variant/exp/994.json index 273b6e6f0c7..ccc8125d86c 100644 --- a/public/images/pokemon/variant/exp/994.json +++ b/public/images/pokemon/variant/exp/994.json @@ -8,9 +8,7 @@ "626262": "696983", "5e2d4e": "ae7a24", "be5a83": "fdc263", - "181820": "181820", "874070": "d79a38", - "313139": "313139", "959595": "9b9bb6", "dbdadc": "d9d9ea", "36485a": "3f357c", diff --git a/public/images/pokemon/variant/exp/995.json b/public/images/pokemon/variant/exp/995.json index fa33051f318..cad805ca7ad 100644 --- a/public/images/pokemon/variant/exp/995.json +++ b/public/images/pokemon/variant/exp/995.json @@ -3,34 +3,21 @@ "3c571e": "4f4528", "c4de98": "f6eebd", "99c350": "ddcb86", - "000000": "000000", "78913e": "8d7f54", "15b372": "9d3eb9", - "211e1e": "211e1e", - "363735": "363735", - "453f3f": "453f3f", - "3e2a2a": "3e2a2a", "3af0a6": "ca72e4", "a2f4d2": "e9d7ee", - "4b792d": "7b6a31", - "332c2c": "332c2c", - "216645": "216645" + "4b792d": "7b6a31" }, "2": { "3c571e": "26292b", "c4de98": "949ca5", "99c350": "6b737b", - "000000": "000000", "78913e": "464b51", "15b372": "9a1f2c", - "211e1e": "211e1e", - "363735": "363735", - "453f3f": "453f3f", - "3e2a2a": "3e2a2a", "3af0a6": "d53143", "a2f4d2": "f3aebe", "4b792d": "383c40", - "332c2c": "332c2c", "216645": "ff4a73" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/996.json b/public/images/pokemon/variant/exp/996.json index 1281153af1e..79a6c40f295 100644 --- a/public/images/pokemon/variant/exp/996.json +++ b/public/images/pokemon/variant/exp/996.json @@ -4,7 +4,6 @@ "414949": "181f1f", "aab1b7": "325747", "8f99a3": "293b39", - "0f0f0f": "0f0f0f", "af9b0a": "3b69d3", "f9d800": "30d1ff", "dedfde": "b7926b", @@ -21,11 +20,9 @@ "414949": "2f2c38", "aab1b7": "e6e6eb", "8f99a3": "ceccef", - "0f0f0f": "0f0f0f", "af9b0a": "b4425a", "f9d800": "ff6767", "dedfde": "e6e6eb", - "9c979c": "9c979c", "8ebbb7": "ca6d2a", "c2e7e9": "fcb925", "769894": "79452f", diff --git a/public/images/pokemon/variant/exp/999.json b/public/images/pokemon/variant/exp/999.json index 584bf030851..821dabeeb70 100644 --- a/public/images/pokemon/variant/exp/999.json +++ b/public/images/pokemon/variant/exp/999.json @@ -11,7 +11,6 @@ "b53345": "794e83", "545b6b": "415073", "f0f3f8": "bac4d8", - "bac4d8": "bac4d8", "ab843f": "9c9cbe", "f7e077": "728295", "edce3d": "728295", @@ -34,7 +33,6 @@ "b53345": "bcb9d6", "545b6b": "6467a8", "f0f3f8": "bac4d8", - "bac4d8": "bac4d8", "ab843f": "b6d0d7", "f7e077": "4e85bf", "edce3d": "4e85bf", diff --git a/public/images/pokemon/variant/exp/back/1000.json b/public/images/pokemon/variant/exp/back/1000.json index 8149392d9b6..4f27d5ea595 100644 --- a/public/images/pokemon/variant/exp/back/1000.json +++ b/public/images/pokemon/variant/exp/back/1000.json @@ -1,7 +1,6 @@ { "0": { "b78234": "a64700", - "121212": "121212", "e0b81a": "d05c31", "f9d95b": "ee883f", "623c20": "6d1906", @@ -11,12 +10,10 @@ "762534": "5d0d05", "9c3e43": "6d1906", "323437": "531f03", - "545b6b": "8f4a14", - "0f0f0f": "0f0f0f" + "545b6b": "8f4a14" }, "1": { "b78234": "7a4e5d", - "121212": "121212", "e0b81a": "96747e", "f9d95b": "e1ced1", "623c20": "622f43", @@ -26,22 +23,18 @@ "762534": "513a59", "9c3e43": "7f6086", "323437": "1d2c54", - "545b6b": "415073", - "0f0f0f": "0f0f0f" + "545b6b": "415073" }, "2": { "b78234": "5a9aa3", - "121212": "121212", "e0b81a": "89d1d6", "f9d95b": "e5fffc", "623c20": "3d717b", - "ffffff": "ffffff", "b4a45e": "36465f", "918344": "1f3149", "762534": "547995", "9c3e43": "7e93b0", "323437": "212857", - "545b6b": "495890", - "0f0f0f": "0f0f0f" + "545b6b": "495890" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/1001.json b/public/images/pokemon/variant/exp/back/1001.json index 4aa4f62bf62..e98d729116e 100644 --- a/public/images/pokemon/variant/exp/back/1001.json +++ b/public/images/pokemon/variant/exp/back/1001.json @@ -7,7 +7,6 @@ "8c979d": "a19775", "a28b76": "383734", "7e615a": "1f1e1c", - "0f0f0f": "0f0f0f", "618044": "9e4b28", "76b458": "de7e52", "524a36": "6e4105", @@ -22,7 +21,6 @@ "8c979d": "9f88b3", "a28b76": "fce6f0", "7e615a": "e6aec8", - "0f0f0f": "0f0f0f", "618044": "e170a1", "76b458": "f5bede", "524a36": "420f0f", diff --git a/public/images/pokemon/variant/exp/back/1003.json b/public/images/pokemon/variant/exp/back/1003.json index 4498fa9e84b..85fb2a81be1 100644 --- a/public/images/pokemon/variant/exp/back/1003.json +++ b/public/images/pokemon/variant/exp/back/1003.json @@ -1,6 +1,5 @@ { "1": { - "0f0f0f": "0f0f0f", "73958b": "daa666", "486863": "be8550", "a6b4a7": "e7cb7e", @@ -16,7 +15,6 @@ "957560": "9c8e99" }, "2": { - "0f0f0f": "0f0f0f", "73958b": "8d6acc", "486863": "6c4aac", "a6b4a7": "cfa0f3", diff --git a/public/images/pokemon/variant/exp/back/1004.json b/public/images/pokemon/variant/exp/back/1004.json index 83b2909fe3c..8224e7f7f01 100644 --- a/public/images/pokemon/variant/exp/back/1004.json +++ b/public/images/pokemon/variant/exp/back/1004.json @@ -2,7 +2,6 @@ "1": { "a23724": "b06f00", "f4342f": "f2b200", - "0f0f0f": "0f0f0f", "f35e38": "ffc81b", "f9824f": "ffe13a", "f0a755": "ffe86b", @@ -13,13 +12,11 @@ "487447": "394d9a", "5b985a": "5c71c1", "83b884": "7a9ae0", - "3c3f3a": "27276a", - "f8f8f0": "f8f8f0" + "3c3f3a": "27276a" }, "2": { "a23724": "76074d", "f4342f": "a525d3", - "0f0f0f": "0f0f0f", "f35e38": "3449f6", "f9824f": "49c9f6", "f0a755": "79f6a1", @@ -30,7 +27,6 @@ "487447": "84736f", "5b985a": "b09f97", "83b884": "d7cbb5", - "3c3f3a": "4b4444", - "f8f8f0": "f8f8f0" + "3c3f3a": "4b4444" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/1008-ultimate-mode.json b/public/images/pokemon/variant/exp/back/1008-ultimate-mode.json index 9df2f7b0070..ca5aae27c1e 100644 --- a/public/images/pokemon/variant/exp/back/1008-ultimate-mode.json +++ b/public/images/pokemon/variant/exp/back/1008-ultimate-mode.json @@ -1,56 +1,43 @@ { "0": { "4ba5cf": "8955b5", - "fefefe": "fefefe", "d7c2c1": "d7c3f7", "c883d1": "7fd8cf", - "0e0e12": "0e0e12", "1a1c42": "393a3e", "fcdf14": "427eff", "5c4370": "393a3e", "4d3672": "858585", - "e6e3f2": "e6e3f2", - "878594": "878594", - "c1bddf": "c1bddf", "643fa3": "c8c8c8", "392855": "616161", - "2e3176": "616161", - "25173d": "25173d" + "2e3176": "616161" }, "1": { "4ba5cf": "31808e", "fefefe": "ffffc9", "d7c2c1": "b3e2d0", "c883d1": "ade263", - "0e0e12": "0e0e12", "1a1c42": "184433", "fcdf14": "2cc151", "5c4370": "3b5c63", "4d3672": "444b66", - "e6e3f2": "e6e3f2", "878594": "89a5ff", "c1bddf": "b7d8ff", "643fa3": "626877", "392855": "393e51", - "2e3176": "3aff75", - "25173d": "25173d" + "2e3176": "3aff75" }, "2": { "4ba5cf": "8e3c84", "fefefe": "ffd8ff", "d7c2c1": "ff93d4", "c883d1": "ffc26d", - "0e0e12": "0e0e12", "1a1c42": "192142", "fcdf14": "cc5767", - "5c4370": "5c4370", "4d3672": "2a3768", - "e6e3f2": "e6e3f2", "878594": "ad9e9d", "c1bddf": "e0e0e0", "643fa3": "3b4986", "392855": "29253f", - "2e3176": "cf3e57", - "25173d": "25173d" + "2e3176": "cf3e57" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/127-mega.json b/public/images/pokemon/variant/exp/back/127-mega.json index 855390b8f37..fa6cade9e21 100644 --- a/public/images/pokemon/variant/exp/back/127-mega.json +++ b/public/images/pokemon/variant/exp/back/127-mega.json @@ -4,33 +4,21 @@ "847163": "7e5649", "d6c7b5": "d29f88", "efe7ce": "eccb90", - "000000": "000000", - "ee8329": "ee8329", - "cd5241": "cd5241", "5a4131": "172a22", "c6ae8c": "72988e", "a58e6b": "54796f", "846952": "3b554d", - "ffde62": "ffde62", - "ac9441": "ac9441", - "837362": "7e5649", - "ffffff": "ffffff" + "837362": "7e5649" }, "2": { "4a4139": "484848", "847163": "868686", "d6c7b5": "d5d5d5", "efe7ce": "ffffff", - "000000": "000000", - "ee8329": "ee8329", - "cd5241": "cd5241", "5a4131": "5c0026", "c6ae8c": "d56a70", "a58e6b": "b44954", "846952": "8c2c40", - "ffde62": "ffde62", - "ac9441": "ac9441", - "837362": "868686", - "ffffff": "ffffff" + "837362": "868686" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/130-mega.json b/public/images/pokemon/variant/exp/back/130-mega.json index 1e091a7a55f..47217f75dc6 100644 --- a/public/images/pokemon/variant/exp/back/130-mega.json +++ b/public/images/pokemon/variant/exp/back/130-mega.json @@ -5,15 +5,10 @@ "44b4f4": "eea747", "826c4d": "90665d", "f8eaba": "fff3ec", - "0d0d0d": "0d0d0d", "cdac7b": "bd9b8e", "992137": "8691d5", "e6414a": "c9d4ff", - "202020": "202020", - "2b2d33": "682a23", - "3c3f47": "3c3f47", - "c3c3c3": "c3c3c3", - "202226": "202226" + "2b2d33": "682a23" }, "2": { "207cc1": "582c81", @@ -21,14 +16,10 @@ "44b4f4": "7b43a1", "826c4d": "855a71", "f8eaba": "ffedf4", - "0d0d0d": "0d0d0d", "cdac7b": "d7aec0", "992137": "a62869", "e6414a": "e15693", - "202020": "202020", - "2b2d33": "2b2d33", "3c3f47": "c07d4a", - "c3c3c3": "ddb07a", - "202226": "202226" + "c3c3c3": "ddb07a" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/142-mega.json b/public/images/pokemon/variant/exp/back/142-mega.json index fd83d2d0958..2057e2a9ffb 100644 --- a/public/images/pokemon/variant/exp/back/142-mega.json +++ b/public/images/pokemon/variant/exp/back/142-mega.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "524273": "431e24", "484848": "922217", "adadd6": "b58788", @@ -19,7 +18,6 @@ "9483a4": "7e494f" }, "2": { - "101010": "101010", "524273": "374451", "484848": "20606b", "adadd6": "cae0ec", diff --git a/public/images/pokemon/variant/exp/back/150-mega-x.json b/public/images/pokemon/variant/exp/back/150-mega-x.json index 6c5bdf7a533..c569c53cebc 100644 --- a/public/images/pokemon/variant/exp/back/150-mega-x.json +++ b/public/images/pokemon/variant/exp/back/150-mega-x.json @@ -1,25 +1,20 @@ { "1": { "7a7a99": "a66b8e", - "101010": "101010", "dadaf2": "ffb5d6", "34344d": "5a2952", "acacbf": "db8aaf", "461f59": "105144", "9643bf": "379e8a", - "f8f8f8": "f8f8f8", - "55a4f2": "55a4f2", "6e318c": "1d6153" }, "2": { "7a7a99": "d68f40", - "101010": "101010", "dadaf2": "ffdd98", "34344d": "884c17", "acacbf": "edaf5b", "461f59": "6b2619", "9643bf": "ac4f4b", - "f8f8f8": "f8f8f8", "55a4f2": "da2e29", "6e318c": "6b2619" } diff --git a/public/images/pokemon/variant/exp/back/181-mega.json b/public/images/pokemon/variant/exp/back/181-mega.json index 372b0fe3b3c..6a7c6384ef8 100644 --- a/public/images/pokemon/variant/exp/back/181-mega.json +++ b/public/images/pokemon/variant/exp/back/181-mega.json @@ -2,7 +2,6 @@ "1": { "626a6a": "58341f", "ffffff": "fff1d0", - "101010": "101010", "b4b4bd": "ebbb78", "c54100": "e28f09", "835a31": "49200d", @@ -10,15 +9,12 @@ "e6e6e6": "f1cd8d", "ffc510": "8d472a", "ffee4a": "b36d49", - "000000": "000000", "8b2000": "9b5000", - "ff6200": "ffe85a", - "5a0000": "5a0000" + "ff6200": "ffe85a" }, "2": { "626a6a": "5d412a", "ffffff": "fff1d0", - "101010": "101010", "b4b4bd": "ebbb78", "c54100": "d26b00", "835a31": "49200d", diff --git a/public/images/pokemon/variant/exp/back/2027.json b/public/images/pokemon/variant/exp/back/2027.json index 04686fda98b..bffe4327837 100644 --- a/public/images/pokemon/variant/exp/back/2027.json +++ b/public/images/pokemon/variant/exp/back/2027.json @@ -4,23 +4,17 @@ "354e73": "752e42", "b6dbe7": "ffdac2", "84b3ce": "d27c80", - "fefefe": "fefefe", - "101010": "101010", "897e67": "aaaa96", "fefea9": "fffffc", - "d1c592": "d3d3c6", - "000000": "000000" + "d1c592": "d3d3c6" }, "2": { "518d9f": "6a439e", "354e73": "3d2c78", "b6dbe7": "dbb1eb", "84b3ce": "a87bcf", - "fefefe": "fefefe", - "101010": "101010", "897e67": "2e163d", "fefea9": "6f3480", - "d1c592": "44225a", - "000000": "000000" + "d1c592": "44225a" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/2028.json b/public/images/pokemon/variant/exp/back/2028.json index 19710fd1b41..6a47ecacf45 100644 --- a/public/images/pokemon/variant/exp/back/2028.json +++ b/public/images/pokemon/variant/exp/back/2028.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "3a6b8c": "692a61", "f1f1f4": "fffffc", "b0e5f8": "fffed9", @@ -13,11 +12,9 @@ "b7e3e7": "ffb59e", "606060": "6f525d", "bdbdcd": "d0c0b6", - "9994b6": "8d6e6f", - "000000": "000000" + "9994b6": "8d6e6f" }, "2": { - "101010": "101010", "3a6b8c": "3c2d74", "f1f1f4": "e3f0ff", "b0e5f8": "f8f5b0", @@ -30,7 +27,6 @@ "b7e3e7": "5f2e71", "606060": "3a3a54", "bdbdcd": "acb7d0", - "9994b6": "7d83a4", - "000000": "000000" + "9994b6": "7d83a4" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/2052.json b/public/images/pokemon/variant/exp/back/2052.json index 31bcb35f0dc..e999d332c83 100644 --- a/public/images/pokemon/variant/exp/back/2052.json +++ b/public/images/pokemon/variant/exp/back/2052.json @@ -1,12 +1,10 @@ { "1": { "45505f": "8c583b", - "0a0a0a": "0a0a0a", "91a3bf": "ffda5c", "627986": "de974e", "995433": "493473", "262b3c": "41185e", - "f3f3f3": "f3f3f3", "e3cc2b": "a66db5", "ca833c": "7a519a", "798071": "7a4888", @@ -15,12 +13,10 @@ }, "2": { "45505f": "271420", - "0a0a0a": "0a0a0a", "91a3bf": "7c4e42", "627986": "5f3036", "995433": "45328e", "262b3c": "1d1b33", - "f3f3f3": "f3f3f3", "e3cc2b": "b5b8f9", "ca833c": "7b7fda", "798071": "5f5c7e", diff --git a/public/images/pokemon/variant/exp/back/2053.json b/public/images/pokemon/variant/exp/back/2053.json index f833d9b1dd2..fe218ea1564 100644 --- a/public/images/pokemon/variant/exp/back/2053.json +++ b/public/images/pokemon/variant/exp/back/2053.json @@ -1,18 +1,14 @@ { "1": { - "0a0a0a": "0a0a0a", "45505f": "8c583b", "627986": "de974e", "262b3c": "41185e", - "99abc9": "ffda5c", - "080808": "080808" + "99abc9": "ffda5c" }, "2": { - "0a0a0a": "0a0a0a", "45505f": "271420", "627986": "5f3036", "262b3c": "150e1c", - "99abc9": "7c4e42", - "080808": "080808" + "99abc9": "7c4e42" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/212-mega.json b/public/images/pokemon/variant/exp/back/212-mega.json index 4ec3ab904a9..ae127ee48c5 100644 --- a/public/images/pokemon/variant/exp/back/212-mega.json +++ b/public/images/pokemon/variant/exp/back/212-mega.json @@ -3,48 +3,21 @@ "622929": "215a2d", "a42929": "2f794e", "d53939": "4a9c53", - "101010": "101010", - "9494a4": "9494a4", - "ffffff": "ffffff", - "b4b4cd": "b4b4cd", - "39394a": "39394a", - "b0b0c8": "b0b0c8", - "000000": "000000", - "3b3b4c": "3b3b4c", - "006f8a": "006f8a", - "00cad2": "00cad2", - "878791": "878791", "f66a6a": "8cce73" }, "1": { "622929": "2f2962", "a42929": "29429c", "d53939": "4263ef", - "101010": "101010", - "9494a4": "9494a4", - "ffffff": "ffffff", - "b4b4cd": "b4b4cd", - "39394a": "39394a", - "b0b0c8": "b0b0c8", - "000000": "000000", - "3b3b4c": "3b3b4c", - "006f8a": "006f8a", - "00cad2": "00cad2", - "878791": "878791", "f66a6a": "639cf7" }, "2": { "622929": "645117", "a42929": "b88619", "d53939": "ffca2a", - "101010": "101010", "9494a4": "3c4543", - "ffffff": "ffffff", "b4b4cd": "cdccb4", "39394a": "2b2b38", - "b0b0c8": "b0b0c8", - "000000": "000000", - "3b3b4c": "3b3b4c", "006f8a": "645117", "00cad2": "f4e920", "878791": "3c4543", diff --git a/public/images/pokemon/variant/exp/back/229-mega.json b/public/images/pokemon/variant/exp/back/229-mega.json index 817dd33272c..21f5f27a708 100644 --- a/public/images/pokemon/variant/exp/back/229-mega.json +++ b/public/images/pokemon/variant/exp/back/229-mega.json @@ -1,41 +1,32 @@ { "1": { "83738b": "7c323c", - "000000": "000000", "ffffff": "f3bd87", "a49cac": "a84b50", "cdd5d5": "c87966", "182029": "321b32", "313139": "553454", "4a4a52": "76546b", - "010101": "010101", - "f8f9ff": "f8f9ff", "e14825": "9f94cc", "ce0a10": "455d92", "6a211f": "314075", "e89368": "c1c2e8", "f69c83": "f8f1e7", "622910": "77545b", - "0f0f0f": "0f0f0f", "c5cdd1": "bbc3ce", "a45a4a": "ceb0a5", "ffe0b3": "eef5ff", - "e2e0e3": "e2e0e3", - "830c28": "830c28", - "f7f7f7": "f7f7f7", "af1b1b": "aa8c82", "732422": "856458" }, "2": { "83738b": "121d3c", - "000000": "000000", "ffffff": "5c8d95", "a49cac": "223657", "cdd5d5": "38576c", "182029": "321b32", "313139": "b1a3b1", "4a4a52": "f8faf3", - "010101": "010101", "f8f9ff": "223657", "e14825": "2582ce", "ce0a10": "e58142", @@ -43,13 +34,10 @@ "e89368": "4ad1de", "f69c83": "72557e", "622910": "321b32", - "0f0f0f": "0f0f0f", "c5cdd1": "100f27", "a45a4a": "533960", "ffe0b3": "a9f8ef", - "e2e0e3": "e2e0e3", "830c28": "a5657c", - "f7f7f7": "f7f7f7", "af1b1b": "534b6a", "732422": "423655" } diff --git a/public/images/pokemon/variant/exp/back/248-mega.json b/public/images/pokemon/variant/exp/back/248-mega.json index f5b58bf5f10..ef0f1ce5485 100644 --- a/public/images/pokemon/variant/exp/back/248-mega.json +++ b/public/images/pokemon/variant/exp/back/248-mega.json @@ -1,28 +1,26 @@ { "1": { "171717": "101010", - "4a5a39": "533334", - "4b5a3b": "533334", - "727272": "727272", - "801c17": "004194", - "922d00": "004194", - "ce283d": "006fb3", - "d35200": "0098fc", - "729a62": "915957", - "739c62": "915957", - "aacb9a": "c78482" + "4a5a39": "533334", + "4b5a3b": "533334", + "801c17": "004194", + "922d00": "004194", + "ce283d": "006fb3", + "d35200": "0098fc", + "729a62": "915957", + "739c62": "915957", + "aacb9a": "c78482" }, "2": { - "171717": "101010", - "4a5a39": "06092f", - "4b5a3b": "06092f", - "727272": "727272", - "801c17": "ee7b06", - "922d00": "ee7b06", - "ce283d": "ffa904", - "d35200": "ffa904", - "729a62": "2c3071", - "739c62": "2c3071", - "aacb9a": "625695" + "171717": "101010", + "4a5a39": "06092f", + "4b5a3b": "06092f", + "801c17": "ee7b06", + "922d00": "ee7b06", + "ce283d": "ffa904", + "d35200": "ffa904", + "729a62": "2c3071", + "739c62": "2c3071", + "aacb9a": "625695" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/257-mega.json b/public/images/pokemon/variant/exp/back/257-mega.json index 7f2925da1d9..7dea77ff45a 100644 --- a/public/images/pokemon/variant/exp/back/257-mega.json +++ b/public/images/pokemon/variant/exp/back/257-mega.json @@ -9,7 +9,6 @@ "ff9a7f": "fff185", "f0a010": "94f1d8", "ee6262": "f7ca4b", - "000000": "000000", "e55858": "51b5cd", "bd4141": "da8923", "fff188": "ecfff8", @@ -29,7 +28,6 @@ "ff9a7f": "fffce9", "f0a010": "7747bf", "ee6262": "fffae1", - "000000": "000000", "e55858": "c6e6ff", "bd4141": "d2bda7", "fff188": "c6fffd", diff --git a/public/images/pokemon/variant/exp/back/282-mega.json b/public/images/pokemon/variant/exp/back/282-mega.json index 37bf55e1bc2..dcf8bc62a1e 100644 --- a/public/images/pokemon/variant/exp/back/282-mega.json +++ b/public/images/pokemon/variant/exp/back/282-mega.json @@ -6,7 +6,6 @@ "7888b0": "d59c80", "e8e8f8": "f8efde", "b0f090": "fff1c0", - "000000": "000000", "c8c8e0": "ffc4a6", "f87890": "ca2033", "d04870": "da3e4f", @@ -20,11 +19,7 @@ "307840": "242746", "88e088": "3f427f", "70b870": "282c5d", - "7888b0": "7888b0", - "e8e8f8": "e8e8f8", "b0f090": "5b5790", - "000000": "000000", - "c8c8e0": "c8c8e0", "f87890": "b62fa8", "d04870": "d846c1", "802848": "9e2a7c", diff --git a/public/images/pokemon/variant/exp/back/302-mega.json b/public/images/pokemon/variant/exp/back/302-mega.json index 5540f0ec64f..3d2f5c62fb1 100644 --- a/public/images/pokemon/variant/exp/back/302-mega.json +++ b/public/images/pokemon/variant/exp/back/302-mega.json @@ -5,7 +5,6 @@ "ff4a5a": "e945af", "cc3f7c": "b22391", "393952": "123812", - "000000": "000000", "aca4f6": "b2ca9b", "5a4a94": "416a3d", "8b73d5": "86ad74", @@ -19,7 +18,6 @@ "ff4a5a": "236dbc", "cc3f7c": "153db2", "393952": "580a16", - "000000": "000000", "aca4f6": "e0604e", "5a4a94": "7e141c", "8b73d5": "be3933", diff --git a/public/images/pokemon/variant/exp/back/303-mega.json b/public/images/pokemon/variant/exp/back/303-mega.json index 476ffab4228..509921b315c 100644 --- a/public/images/pokemon/variant/exp/back/303-mega.json +++ b/public/images/pokemon/variant/exp/back/303-mega.json @@ -1,34 +1,25 @@ { "1": { - "000000": "000000", "737373": "347c7d", "9ca494": "4fa285", "4a4a4a": "193e49", "7b5a29": "6b5424", "ffc55a": "d6c491", - "ffffff": "ffffff", - "cdcdcd": "cdcdcd", "984868": "b43929", "b86088": "ff625a", - "de9441": "de9441", - "484848": "484848", "9c4a6a": "23445e", "bd628b": "397189", "732041": "162843" }, "2": { - "000000": "000000", "737373": "347c7d", "9ca494": "4fa285", "4a4a4a": "193e49", "7b5a29": "6b5424", "ffc55a": "d6c491", - "ffffff": "ffffff", - "cdcdcd": "cdcdcd", "984868": "b43929", "b86088": "ff625a", "de9441": "bc8a52", - "484848": "484848", "9c4a6a": "23445e", "bd628b": "397189", "732041": "162843" diff --git a/public/images/pokemon/variant/exp/back/308-mega.json b/public/images/pokemon/variant/exp/back/308-mega.json index b13332e5183..cb5df2710f6 100644 --- a/public/images/pokemon/variant/exp/back/308-mega.json +++ b/public/images/pokemon/variant/exp/back/308-mega.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "83414a": "59141d", "e6738b": "a53835", "b44a5a": "83272c", @@ -8,7 +7,6 @@ "bdafad": "a5829d", "52414a": "432641", "e7e3e7": "e0cdd9", - "f9f8f7": "f9f8f7", "a47329": "722966", "eebd5a": "a25793", "f6de83": "ee9bd5", @@ -16,7 +14,6 @@ "42a2bd": "efa360" }, "2": { - "101010": "101010", "83414a": "461f5d", "e6738b": "7d5187", "b44a5a": "633971", diff --git a/public/images/pokemon/variant/exp/back/310-mega.json b/public/images/pokemon/variant/exp/back/310-mega.json index 8ab3d0646dc..b0be523f618 100644 --- a/public/images/pokemon/variant/exp/back/310-mega.json +++ b/public/images/pokemon/variant/exp/back/310-mega.json @@ -4,30 +4,23 @@ "998c4c": "630013", "ffe566": "d4302a", "d9c357": "a6101a", - "101010": "101010", "2a474d": "0d1843", "82cad9": "4c7da6", "548e99": "284781", "69b1bf": "3e6194", - "3f6a73": "1a3269", - "ff7373": "ff7373", - "f8f8f8": "f8f8f8", - "cc2929": "cc2929", - "8c3f3f": "8c3f3f" + "3f6a73": "1a3269" }, "2": { "736a3f": "810040", "998c4c": "a40f5a", "ffe566": "e545b6", "d9c357": "c32574", - "101010": "101010", "2a474d": "3f5476", "82cad9": "c1ddeb", "548e99": "92b4cb", "69b1bf": "b3d1e5", "3f6a73": "6f8caa", "ff7373": "8f60ef", - "f8f8f8": "f8f8f8", "cc2929": "893edf", "8c3f3f": "4a0698" } diff --git a/public/images/pokemon/variant/exp/back/354-mega.json b/public/images/pokemon/variant/exp/back/354-mega.json index d335b807b07..3eb77e2f06a 100644 --- a/public/images/pokemon/variant/exp/back/354-mega.json +++ b/public/images/pokemon/variant/exp/back/354-mega.json @@ -6,7 +6,6 @@ "eebd5a": "b78d90", "4d464f": "592145", "d59c39": "7d656d", - "010101": "010101", "685f6b": "6c2f4c", "7c777d": "934861", "a47b10": "533c4e", @@ -21,7 +20,6 @@ "eebd5a": "4d4f5b", "4d464f": "5b777b", "d59c39": "3b3d54", - "010101": "010101", "685f6b": "71a680", "7c777d": "9cbf81", "a47b10": "373c56", diff --git a/public/images/pokemon/variant/exp/back/362-mega.json b/public/images/pokemon/variant/exp/back/362-mega.json index 2f3d13a6944..244a1c96aeb 100644 --- a/public/images/pokemon/variant/exp/back/362-mega.json +++ b/public/images/pokemon/variant/exp/back/362-mega.json @@ -1,7 +1,6 @@ { "1": { "393941": "050832", - "010101": "010101", "2b74a8": "84073c", "bbeeff": "f9383e", "7dbbee": "b7113a", @@ -13,7 +12,6 @@ }, "2": { "393941": "221315", - "010101": "010101", "2b74a8": "0c4b3a", "bbeeff": "5ce11a", "7dbbee": "009325", diff --git a/public/images/pokemon/variant/exp/back/373-mega.json b/public/images/pokemon/variant/exp/back/373-mega.json index abf1ab30827..0f9d275e792 100644 --- a/public/images/pokemon/variant/exp/back/373-mega.json +++ b/public/images/pokemon/variant/exp/back/373-mega.json @@ -13,7 +13,6 @@ "545a5a": "a45f28", "e6e6df": "fcfcfc", "758888": "839494", - "acaca4": "acaca4", "e0e0d8": "fcfcfc" }, "2": { diff --git a/public/images/pokemon/variant/exp/back/376-mega.json b/public/images/pokemon/variant/exp/back/376-mega.json index 02307c25471..1f9fbff63d9 100644 --- a/public/images/pokemon/variant/exp/back/376-mega.json +++ b/public/images/pokemon/variant/exp/back/376-mega.json @@ -6,9 +6,7 @@ "313962": "550611", "736a73": "a76911", "cdcdcd": "ffe07c", - "acacac": "ffc753", - "101010": "101010", - "ffffff": "ffffff" + "acacac": "ffc753" }, "2": { "416294": "1e716e", @@ -17,8 +15,6 @@ "313962": "0b3739", "736a73": "9f4219", "cdcdcd": "ffc16a", - "acacac": "f57e37", - "101010": "101010", - "ffffff": "ffffff" + "acacac": "f57e37" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/380-mega.json b/public/images/pokemon/variant/exp/back/380-mega.json index 8d973cabd59..63483e791ba 100644 --- a/public/images/pokemon/variant/exp/back/380-mega.json +++ b/public/images/pokemon/variant/exp/back/380-mega.json @@ -3,7 +3,6 @@ "7474a6": "9a6853", "f2f2ff": "f3e6df", "adadd9": "b48f79", - "101010": "101010", "cecef2": "e3cfc1", "483f73": "713004", "8777d9": "d08528", @@ -13,7 +12,6 @@ "7474a6": "8d5a8f", "f2f2ff": "eedaea", "adadd9": "c78ac4", - "101010": "101010", "cecef2": "e4c7e1", "483f73": "15707d", "8777d9": "5de2d5", diff --git a/public/images/pokemon/variant/exp/back/381-mega.json b/public/images/pokemon/variant/exp/back/381-mega.json index 5b676558d13..30fe8a74fa5 100644 --- a/public/images/pokemon/variant/exp/back/381-mega.json +++ b/public/images/pokemon/variant/exp/back/381-mega.json @@ -3,7 +3,6 @@ "7474a6": "7e447b", "f2f2ff": "f9cfed", "adadd9": "b673ad", - "101010": "101010", "cecef2": "dfa1d2", "483f73": "29165d", "8777d9": "453c90", @@ -13,7 +12,6 @@ "7474a6": "98485e", "f2f2ff": "f7d9ec", "adadd9": "d086ac", - "101010": "101010", "cecef2": "e4abcc", "483f73": "52060f", "8777d9": "97241f", diff --git a/public/images/pokemon/variant/exp/back/382-primal.json b/public/images/pokemon/variant/exp/back/382-primal.json index 68a374ee080..2a278ceb80c 100644 --- a/public/images/pokemon/variant/exp/back/382-primal.json +++ b/public/images/pokemon/variant/exp/back/382-primal.json @@ -1,15 +1,8 @@ { "1": { - "5a526b": "5a526b", - "101010": "101010", "322e78": "f08d2a", - "cebdce": "cebdce", - "dedede": "dedede", "7eaecc": "ff3200", - "9c8c94": "9c8c94", "8b7fad": "f3bb49", - "90a2c0": "90a2c0", - "d3e6f4": "d3e6f4", "a43162": "c62e22", "fbec99": "e1ff9f", "6d5e94": "f3bb49", @@ -23,22 +16,12 @@ "fadbb3": "a2ee62", "294c60": "a30d25", "27245e": "d96714", - "74659d": "f3bb49", - "373384": "373384", - "e8e3e8": "e8e3e8", - "34607a": "34607a" + "74659d": "f3bb49" }, "2": { - "5a526b": "5a526b", - "101010": "101010", "322e78": "a90e14", - "cebdce": "cebdce", - "dedede": "dedede", "7eaecc": "ffc546", - "9c8c94": "9c8c94", "8b7fad": "ea512b", - "90a2c0": "90a2c0", - "d3e6f4": "d3e6f4", "a43162": "4139d2", "fbec99": "90ffde", "6d5e94": "ea512b", @@ -52,9 +35,6 @@ "fadbb3": "67a6f4", "294c60": "be5809", "27245e": "780613", - "74659d": "ea512b", - "373384": "373384", - "e8e3e8": "e8e3e8", - "34607a": "34607a" + "74659d": "ea512b" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/383-primal.json b/public/images/pokemon/variant/exp/back/383-primal.json index ccecac7c2ac..4ccfac83fdb 100644 --- a/public/images/pokemon/variant/exp/back/383-primal.json +++ b/public/images/pokemon/variant/exp/back/383-primal.json @@ -1,6 +1,5 @@ { "1": { - "000000": "000000", "7b2129": "10371a", "9c2929": "135121", "ff736b": "419e49", @@ -8,12 +7,8 @@ "957346": "ff8571", "f2d259": "ffd493", "bd3131": "2b5b32", - "343434": "343434", - "695a5b": "695a5b", - "887981": "887981", "3a3a3a": "343434", "632329": "032a10", - "f6e08c": "f6e08c", "7e2d2d": "10371a", "736363": "695a5b", "94848c": "887981", @@ -21,14 +16,11 @@ "c92c33": "2b5b32", "a03131": "135121", "d5736d": "419e49", - "bdbdd5": "bdbdd5", - "f2f2f2": "f2f2f2", "ad9ca5": "49c74f", "ffffff": "f2f2f2", "bdbdd6": "bdbdd5" }, "2": { - "000000": "000000", "7b2129": "20516c", "9c2929": "2f6e85", "ff736b": "4daab4", @@ -49,8 +41,6 @@ "c92c33": "3e8b9f", "a03131": "2f6e85", "d5736d": "4daab4", - "bdbdd5": "bdbdd5", - "f2f2f2": "f2f2f2", "ad9ca5": "68cfd0", "ffffff": "f2f2f2", "bdbdd6": "bdbdd5" diff --git a/public/images/pokemon/variant/exp/back/384-mega.json b/public/images/pokemon/variant/exp/back/384-mega.json index 016c044b27f..9ee39a2621c 100644 --- a/public/images/pokemon/variant/exp/back/384-mega.json +++ b/public/images/pokemon/variant/exp/back/384-mega.json @@ -3,7 +3,6 @@ "fbe27e": "90f25d", "fc9436": "3dc62f", "836231": "064c1e", - "010101": "010101", "f6de00": "4ff869", "c5a400": "27c750", "3d7d6d": "66637b", @@ -11,14 +10,12 @@ "22523e": "333554", "e4b629": "27c750", "60d293": "e4e0ee", - "3f3f3f": "333554", - "fcfcfc": "fcfcfc" + "3f3f3f": "333554" }, "2": { "fbe27e": "17e2d6", "fc9436": "098faf", "836231": "121d31", - "010101": "010101", "f6de00": "17e2d6", "c5a400": "098faf", "3d7d6d": "84120f", @@ -26,7 +23,6 @@ "22523e": "650f04", "e4b629": "098faf", "60d293": "f18c5e", - "3f3f3f": "380100", - "fcfcfc": "fcfcfc" + "3f3f3f": "380100" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/4052.json b/public/images/pokemon/variant/exp/back/4052.json index ac18fada19c..eeaa3c4840f 100644 --- a/public/images/pokemon/variant/exp/back/4052.json +++ b/public/images/pokemon/variant/exp/back/4052.json @@ -1,24 +1,16 @@ { "1": { - "181a1d": "181a1d", "272d2e": "342b49", - "0a0a0a": "0a0a0a", "3d4547": "4e385a", - "000000": "000000", "5b4e43": "57567e", "ada09a": "c3c5d4", - "262b3c": "262b3c", "84726f": "7b7aa5" }, "2": { - "181a1d": "181a1d", "272d2e": "234a56", - "0a0a0a": "0a0a0a", "3d4547": "417778", - "000000": "000000", "5b4e43": "171127", "ada09a": "603b54", - "262b3c": "262b3c", "84726f": "3c2841" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/4077.json b/public/images/pokemon/variant/exp/back/4077.json index cbd88a9fa88..02424269ac2 100644 --- a/public/images/pokemon/variant/exp/back/4077.json +++ b/public/images/pokemon/variant/exp/back/4077.json @@ -10,7 +10,6 @@ "ded5ae": "5b93cc", "ffffe3": "8cd8ff", "a3a49f": "355699", - "101010": "101010", "59237e": "312c49", "78499b": "514766" }, @@ -25,7 +24,6 @@ "ded5ae": "cc66cc", "ffffe3": "ff99dd", "a3a49f": "7a3d99", - "101010": "101010", "59237e": "312c49", "78499b": "514766" } diff --git a/public/images/pokemon/variant/exp/back/4078.json b/public/images/pokemon/variant/exp/back/4078.json index 9c680e6fad1..644385dd72a 100644 --- a/public/images/pokemon/variant/exp/back/4078.json +++ b/public/images/pokemon/variant/exp/back/4078.json @@ -2,15 +2,12 @@ "1": { "44bf75": "cc9470", "85fabf": "ffd9a5", - "2b3055": "2b3055", "109865": "995944", "737ba4": "514766", "ffffe3": "8cd8ff", "8e38c1": "990c00", "de9fff": "ff884c", "c566e3": "cc4328", - "0c0c0c": "0c0c0c", - "ffffff": "ffffff", "414a83": "312c49", "ded5ae": "5b93cc", "636357": "192666", @@ -20,15 +17,12 @@ "2": { "44bf75": "cc1e4c", "85fabf": "ff3255", - "2b3055": "2b3055", "109865": "990f3d", "737ba4": "514766", "ffffe3": "ff99dd", "8e38c1": "161f4c", "de9fff": "483e7c", "c566e3": "282866", - "0c0c0c": "0c0c0c", - "ffffff": "ffffff", "414a83": "312c49", "ded5ae": "cc66cc", "636357": "361e66", diff --git a/public/images/pokemon/variant/exp/back/4079.json b/public/images/pokemon/variant/exp/back/4079.json index 5dd35eec151..b66ac41a38c 100644 --- a/public/images/pokemon/variant/exp/back/4079.json +++ b/public/images/pokemon/variant/exp/back/4079.json @@ -6,13 +6,10 @@ "fefe3c": "ffeccb", "caaa2c": "edc59e", "ac4152": "613934", - "101010": "101010", "7b2031": "452a29", "8b5a18": "a84071", "ffe6b4": "ff9eba", - "dea462": "e0799c", - "fcfcfc": "fcfcfc", - "d5cdcd": "d5cdcd" + "dea462": "e0799c" }, "2": { "de627b": "c6aead", @@ -21,12 +18,9 @@ "fefe3c": "d9736b", "caaa2c": "963e59", "ac4152": "846467", - "101010": "101010", "7b2031": "503941", "8b5a18": "a45c58", "ffe6b4": "efc697", - "dea462": "cb8f75", - "fcfcfc": "fcfcfc", - "d5cdcd": "d5cdcd" + "dea462": "cb8f75" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/4199.json b/public/images/pokemon/variant/exp/back/4199.json index 9b0e2810a2e..07911b965be 100644 --- a/public/images/pokemon/variant/exp/back/4199.json +++ b/public/images/pokemon/variant/exp/back/4199.json @@ -1,7 +1,6 @@ { "1": { "493e66": "821d2a", - "101010": "101010", "a191b5": "de504e", "7a6a98": "ad3139", "413668": "622344", @@ -13,13 +12,11 @@ "7b2645": "573531", "d76792": "8f5345", "f985aa": "bb694b", - "f8f8f8": "f8f8f8", "c89a51": "a84254", "eed583": "c75865" }, "2": { "493e66": "2a6122", - "101010": "101010", "a191b5": "b0dc72", "7a6a98": "71ae48", "413668": "1d4c46", @@ -31,7 +28,6 @@ "7b2645": "856568", "d76792": "c6aead", "f985aa": "ecdcbe", - "f8f8f8": "f8f8f8", "c89a51": "2a4948", "eed583": "4b7569" } diff --git a/public/images/pokemon/variant/exp/back/4222.json b/public/images/pokemon/variant/exp/back/4222.json index 4bfc486bcf6..0ae78cfbd22 100644 --- a/public/images/pokemon/variant/exp/back/4222.json +++ b/public/images/pokemon/variant/exp/back/4222.json @@ -7,7 +7,6 @@ "756868": "097f8d", "af9e9e": "44a0af", "9c94a3": "58929f", - "101010": "101010", "cbc2d1": "a9e4e3", "fbf2ff": "d4fefe", "e3c4f2": "d7d2f6" @@ -20,7 +19,6 @@ "756868": "8d6573", "af9e9e": "b0919b", "9c94a3": "4b1f28", - "101010": "101010", "cbc2d1": "773050", "fbf2ff": "874059", "e3c4f2": "567f83" diff --git a/public/images/pokemon/variant/exp/back/4263.json b/public/images/pokemon/variant/exp/back/4263.json index e6b49ad751f..29c046cf394 100644 --- a/public/images/pokemon/variant/exp/back/4263.json +++ b/public/images/pokemon/variant/exp/back/4263.json @@ -1,21 +1,14 @@ { "1": { - "010101": "010101", "5b5958": "397e4a", "60656a": "1c8155", "b2b3b2": "a3ce9e", "3e4042": "01473a", "f5f5f6": "f5ffea", "1b2627": "002121", - "d94a7f": "d94a7f", - "fcfcfc": "fcfcfc", - "ee96b2": "ee96b2", - "6e3b51": "6e3b51", - "9b4f69": "9b4f69", "000000": "010101" }, "2": { - "010101": "010101", "5b5958": "100d2d", "60656a": "8e5aef", "b2b3b2": "201b47", @@ -23,7 +16,6 @@ "f5f5f6": "3c335d", "1b2627": "201b47", "d94a7f": "0099ce", - "fcfcfc": "fcfcfc", "ee96b2": "54f1ff", "6e3b51": "004a8b", "9b4f69": "0099ce", diff --git a/public/images/pokemon/variant/exp/back/4264.json b/public/images/pokemon/variant/exp/back/4264.json index 8aec39c06cf..c266ecb7aa4 100644 --- a/public/images/pokemon/variant/exp/back/4264.json +++ b/public/images/pokemon/variant/exp/back/4264.json @@ -1,30 +1,24 @@ { "1": { - "010101": "010101", "abadaf": "95c090", "797570": "579666", "414141": "1c8155", - "1c1917": "1c1917", "f5f5f6": "f5ffea", "bc3065": "d414dd", "322c29": "01473a", "ff4e89": "ff69fa", "68696a": "27323a", - "949496": "3d494e", - "000000": "000000" + "949496": "3d494e" }, "2": { - "010101": "010101", "abadaf": "1e1a3b", "797570": "302373", "414141": "7c4cd6", - "1c1917": "1c1917", "f5f5f6": "342d4c", "bc3065": "0099ce", "322c29": "412991", "ff4e89": "54f1ff", "68696a": "2a1b4e", - "949496": "554576", - "000000": "000000" + "949496": "554576" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/428-mega.json b/public/images/pokemon/variant/exp/back/428-mega.json index 3a5b2345189..c95bd9b7366 100644 --- a/public/images/pokemon/variant/exp/back/428-mega.json +++ b/public/images/pokemon/variant/exp/back/428-mega.json @@ -9,7 +9,6 @@ "624a41": "660a38", "c55a7b": "7f4c99", "7b3941": "472866", - "101010": "101010", "232323": "0d0b16", "414141": "161626" }, @@ -23,7 +22,6 @@ "624a41": "65597f", "c55a7b": "cc4328", "7b3941": "990c00", - "101010": "101010", "232323": "191933", "414141": "312c49" } diff --git a/public/images/pokemon/variant/exp/back/445-mega.json b/public/images/pokemon/variant/exp/back/445-mega.json index 8020a5f4255..24c8dc9a9a3 100644 --- a/public/images/pokemon/variant/exp/back/445-mega.json +++ b/public/images/pokemon/variant/exp/back/445-mega.json @@ -7,18 +7,12 @@ "404088": "19446e", "5860a8": "33719e", "7878c8": "65a2d5", - "101010": "101010", "c09010": "3aadc5", "f8d018": "42d6de", "b83840": "b23219", - "ffffff": "ffffff", - "707880": "707880", - "c0c8d0": "c0c8d0", "e04830": "ec642c", "581000": "502209", "7b7bcd": "65a2d5", - "c5cdd5": "c5cdd5", - "737b83": "737b83", "000000": "101010" }, "1": { @@ -29,18 +23,12 @@ "404088": "b67252", "5860a8": "deae7a", "7878c8": "f2d8aa", - "101010": "101010", "c09010": "255dd7", "f8d018": "4caaff", "b83840": "9fb6bf", - "ffffff": "ffffff", - "707880": "707880", - "c0c8d0": "c0c8d0", "e04830": "dce8e8", "581000": "393648", "7b7bcd": "f2d8aa", - "c5cdd5": "c5cdd5", - "737b83": "737b83", "000000": "101010" }, "2": { @@ -51,18 +39,12 @@ "404088": "152c3b", "5860a8": "2f434b", "7878c8": "689099", - "101010": "101010", "c09010": "23b8a8", "f8d018": "6fe6a3", "b83840": "b23219", - "ffffff": "ffffff", - "707880": "707880", - "c0c8d0": "c0c8d0", "e04830": "ec642c", "581000": "521000", "7b7bcd": "689099", - "c5cdd5": "c5cdd5", - "737b83": "737b83", "000000": "101010" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/448-mega.json b/public/images/pokemon/variant/exp/back/448-mega.json index fcfe9ece33c..fb44fc447ec 100644 --- a/public/images/pokemon/variant/exp/back/448-mega.json +++ b/public/images/pokemon/variant/exp/back/448-mega.json @@ -3,42 +3,32 @@ "104878": "6c3e20", "4898e8": "e2ce75", "287098": "a56d2f", - "111111": "111111", "383838": "2c2f4c", "585858": "3a5376", "393939": "2c2f4c", - "d0d0d0": "d0d0d0", "5a5a5a": "454764", - "ffffff": "ffffff", "a03030": "8a332f", "d84040": "d85e40", "732222": "8a332f", "a43131": "d85e40", "b4b462": "51689c", "b0b060": "51689c", - "dddddd": "dddddd", "868640": "384876", "e6e69c": "719cbe", - "888888": "888888", "e0e098": "719cbe", "29739c": "a56d2f", - "104a7b": "104a7b", - "4a9cee": "e2ce75", - "a86060": "a86060" + "4a9cee": "e2ce75" }, "1": { "104878": "3f0916", "4898e8": "b85251", "287098": "7f1e2f", - "111111": "111111", "383838": "202931", "585858": "444b4b", "393939": "2d3740", "d0d0d0": "bb711c", "5a5a5a": "354149", "ffffff": "e8a02b", - "a03030": "a03030", - "d84040": "d84040", "732222": "bba597", "a43131": "ecdfd0", "b4b462": "ad826b", @@ -46,38 +36,30 @@ "dddddd": "bb711c", "868640": "825646", "e6e69c": "e2cab0", - "888888": "888888", "e0e098": "e2cab0", "29739c": "7f1e2f", "104a7b": "8e2929", - "4a9cee": "b85251", - "a86060": "a86060" + "4a9cee": "b85251" }, "2": { "104878": "442864", "4898e8": "735c9e", "287098": "513674", - "111111": "111111", "383838": "2c2339", "585858": "453a5a", "393939": "2c2339", - "d0d0d0": "d0d0d0", "5a5a5a": "3b2e47", - "ffffff": "ffffff", "a03030": "a53c18", "d84040": "de8141", "732222": "a53c18", "a43131": "de8141", "b4b462": "373566", "b0b060": "373566", - "dddddd": "dddddd", "868640": "1a1c3b", "e6e69c": "51668e", - "888888": "888888", "e0e098": "51668e", "29739c": "513674", "104a7b": "442864", - "4a9cee": "735c9e", - "a86060": "a86060" + "4a9cee": "735c9e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/4562.json b/public/images/pokemon/variant/exp/back/4562.json index 9e8c1bee22e..5dd509b1345 100644 --- a/public/images/pokemon/variant/exp/back/4562.json +++ b/public/images/pokemon/variant/exp/back/4562.json @@ -2,10 +2,8 @@ "1": { "313131": "145555", "525252": "257e6a", - "101010": "101010", "672b82": "7e173e", "ab38d1": "b0264c", - "371d3f": "371d3f", "6f5c6b": "743949", "e6ddde": "d6b8a0", "927e8d": "a46361", @@ -14,10 +12,8 @@ "2": { "313131": "69162c", "525252": "90222b", - "101010": "101010", "672b82": "57a0b9", "ab38d1": "c2ffe2", - "371d3f": "371d3f", "6f5c6b": "0a4340", "e6ddde": "4fb66a", "927e8d": "1f6455", diff --git a/public/images/pokemon/variant/exp/back/531-mega.json b/public/images/pokemon/variant/exp/back/531-mega.json index 7bc420db09e..1436a7c609d 100644 --- a/public/images/pokemon/variant/exp/back/531-mega.json +++ b/public/images/pokemon/variant/exp/back/531-mega.json @@ -2,25 +2,21 @@ "1": { "80734d": "7c4b3b", "ffecb2": "fff6f0", - "101010": "101010", "ccb87a": "d6bfb4", "b35968": "b64231", "ffbfca": "f5a779", "737373": "6b0a46", "bfbfbf": "cc3a74", - "f8f8f8": "f0728d", - "000000": "000000" + "f8f8f8": "f0728d" }, "2": { "80734d": "09232a", "ffecb2": "4bb9a6", - "101010": "101010", "ccb87a": "29878f", "b35968": "a0602f", "ffbfca": "f6e3a8", "737373": "111322", "bfbfbf": "202537", - "f8f8f8": "323c52", - "000000": "000000" + "f8f8f8": "323c52" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/6-mega-y.json b/public/images/pokemon/variant/exp/back/6-mega-y.json index fa5dede4662..6d67dd05e03 100644 --- a/public/images/pokemon/variant/exp/back/6-mega-y.json +++ b/public/images/pokemon/variant/exp/back/6-mega-y.json @@ -2,7 +2,6 @@ "1": { "e64210": "5033ce", "843119": "552982", - "000000": "000000", "ffd610": "e9bfff", "ef8429": "b27cbc", "f7a510": "9e59db", @@ -11,10 +10,7 @@ "cd5241": "8053b2", "ee8329": "b27cbc", "efb55a": "d8a3e2", - "cecece": "cecece", "217394": "41a86e", - "ffffff": "ffffff", - "efde7b": "fae5ff", - "636363": "636363" + "efde7b": "fae5ff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/6100.json b/public/images/pokemon/variant/exp/back/6100.json index a5ba1a41917..5113ce4930c 100644 --- a/public/images/pokemon/variant/exp/back/6100.json +++ b/public/images/pokemon/variant/exp/back/6100.json @@ -5,11 +5,7 @@ "ec6f00": "69a6b4", "dc5d00": "598195", "c04a1c": "4e6170", - "101010": "101010", - "fefefe": "fefefe", - "ddccc8": "ddccc8", "f3d181": "c9cdd6", - "ded5d5": "ded5d5", "d9a866": "a5aab7", "b8752e": "838797" }, @@ -19,11 +15,7 @@ "ec6f00": "a62833", "dc5d00": "8f1b2c", "c04a1c": "72142b", - "101010": "101010", - "fefefe": "fefefe", - "ddccc8": "ddccc8", "f3d181": "502b32", - "ded5d5": "ded5d5", "d9a866": "3a272e", "b8752e": "2d2327" } diff --git a/public/images/pokemon/variant/exp/back/6101.json b/public/images/pokemon/variant/exp/back/6101.json index be75bac4e8e..f645b0ba303 100644 --- a/public/images/pokemon/variant/exp/back/6101.json +++ b/public/images/pokemon/variant/exp/back/6101.json @@ -2,29 +2,22 @@ "1": { "845c35": "373e4c", "f3d181": "c9cdd6", - "101010": "101010", "d9a866": "a5aab7", "a9763d": "838797", "c04a1c": "386583", "dc5d00": "5e8494", "ec6f00": "69a6b4", "7c2506": "2e333b", - "cdcdde": "cdcdde", - "fefefe": "fefefe", "6f625e": "373e4c" }, "2": { "845c35": "231b20", "f3d181": "5e343c", - "101010": "101010", "d9a866": "452d35", "a9763d": "35262c", "c04a1c": "72142b", "dc5d00": "582b39", "ec6f00": "a62833", - "7c2506": "4a061d", - "cdcdde": "cdcdde", - "fefefe": "fefefe", - "6f625e": "6f625e" + "7c2506": "4a061d" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/6215.json b/public/images/pokemon/variant/exp/back/6215.json index a66e3780d12..a0485ed67c5 100644 --- a/public/images/pokemon/variant/exp/back/6215.json +++ b/public/images/pokemon/variant/exp/back/6215.json @@ -6,12 +6,9 @@ "956cbe": "31dabb", "514a80": "402010", "dcdbf7": "d0b3a4", - "080808": "080808", "28234b": "220d0a", "7d6ca4": "672e26", "584d80": "401914", - "f6f6ff": "f6f6ff", - "bdbdc5": "bdbdc5", "c52973": "ea903f" }, "2": { @@ -21,12 +18,9 @@ "956cbe": "cc5427", "514a80": "14273a", "dcdbf7": "60ae7e", - "080808": "080808", "28234b": "0a191e", "7d6ca4": "395962", "584d80": "1c3942", - "f6f6ff": "f6f6ff", - "bdbdc5": "bdbdc5", "c52973": "f49633" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/653.json b/public/images/pokemon/variant/exp/back/653.json index f7761fa32b1..acbc4c24d67 100644 --- a/public/images/pokemon/variant/exp/back/653.json +++ b/public/images/pokemon/variant/exp/back/653.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "736028": "9f398a", "ffd659": "e190c3", "ccab47": "c35ba3", @@ -12,7 +11,6 @@ "f8f8f8": "fbecff" }, "2": { - "101010": "101010", "736028": "172547", "ffd659": "3a6a93", "ccab47": "264166", diff --git a/public/images/pokemon/variant/exp/back/654.json b/public/images/pokemon/variant/exp/back/654.json index 0f3b2bf3d4e..98273b9be27 100644 --- a/public/images/pokemon/variant/exp/back/654.json +++ b/public/images/pokemon/variant/exp/back/654.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "736028": "061530", "ffd659": "b55390", "ccab47": "872b59", @@ -11,14 +10,11 @@ "737373": "5c255f", "bfbfbf": "c093c3", "804913": "c5b3ca", - "262626": "262626", - "404040": "404040", "f8cf52": "80f37b", "ffc000": "4fcb61", "ff8700": "207d4e" }, "2": { - "101010": "101010", "736028": "061530", "ffd659": "2b5f8a", "ccab47": "173864", @@ -29,8 +25,6 @@ "737373": "75553c", "bfbfbf": "d4b996", "804913": "098794", - "262626": "262626", - "404040": "404040", "f8cf52": "c858a4", "ffc000": "75308e", "ff8700": "521364" diff --git a/public/images/pokemon/variant/exp/back/6549.json b/public/images/pokemon/variant/exp/back/6549.json index 4c50a4187b3..970b5a100a4 100644 --- a/public/images/pokemon/variant/exp/back/6549.json +++ b/public/images/pokemon/variant/exp/back/6549.json @@ -2,7 +2,6 @@ "1": { "70365a": "29547d", "ff84bd": "73bad9", - "101010": "101010", "bd59a2": "5094c0", "315a31": "5a5a2c", "bda452": "77909a", @@ -10,27 +9,20 @@ "39ac39": "bfd17f", "526229": "80152b", "ffbbdb": "b5ddea", - "fdfdfd": "fdfdfd", "4a834a": "8e954d", "9cb462": "bd2d40", - "c5ee7b": "ef5755", - "cdc5bd": "cdc5bd" + "c5ee7b": "ef5755" }, "2": { "70365a": "8a1a3c", "ff84bd": "e8617a", - "101010": "101010", "bd59a2": "d64065", "315a31": "643312", - "bda452": "bda452", - "ffde41": "ffde41", "39ac39": "ebc460", "526229": "351c49", "ffbbdb": "f38e9c", - "fdfdfd": "fdfdfd", "4a834a": "9d7d45", "9cb462": "5d3576", - "c5ee7b": "834c9b", - "cdc5bd": "cdc5bd" + "c5ee7b": "834c9b" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/6570.json b/public/images/pokemon/variant/exp/back/6570.json index 6f6498fa05a..b5d23c31c49 100644 --- a/public/images/pokemon/variant/exp/back/6570.json +++ b/public/images/pokemon/variant/exp/back/6570.json @@ -7,7 +7,6 @@ "4a4d53": "3b2b4f", "f7acae": "ffd291", "fafafa": "efd9d9", - "101010": "101010", "b3b3bb": "d6b7b1", "928d96": "504b6a", "cbcfd8": "7b7897", @@ -22,7 +21,6 @@ "4a4d53": "6f4332", "f7acae": "79d38d", "fafafa": "f0decd", - "101010": "101010", "b3b3bb": "c6ab99", "928d96": "995d3e", "cbcfd8": "d79568", diff --git a/public/images/pokemon/variant/exp/back/6571.json b/public/images/pokemon/variant/exp/back/6571.json index d678782e9fc..1a674c96676 100644 --- a/public/images/pokemon/variant/exp/back/6571.json +++ b/public/images/pokemon/variant/exp/back/6571.json @@ -1,7 +1,6 @@ { "1": { "942429": "4a1921", - "101010": "101010", "d53a3e": "782d41", "928d96": "4a4759", "f07376": "b44d63", @@ -11,13 +10,10 @@ "4a4d53": "262231", "a7484f": "883955", "5f0002": "330814", - "cbcfd8": "737185", - "4b163b": "4b163b", - "6d4d62": "6d4d62" + "cbcfd8": "737185" }, "2": { "942429": "143130", - "101010": "101010", "d53a3e": "2e625a", "928d96": "885f49", "f07376": "4e867b", @@ -28,7 +24,6 @@ "a7484f": "2a6062", "5f0002": "082226", "cbcfd8": "bc9072", - "4b163b": "4b163b", "6d4d62": "c2589c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/664.json b/public/images/pokemon/variant/exp/back/664.json index ae0ec9fc792..438ec1bf6e0 100644 --- a/public/images/pokemon/variant/exp/back/664.json +++ b/public/images/pokemon/variant/exp/back/664.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "363636": "4c2855", "4d4d4d": "9d6260", "4e4e4e": "895a9f", @@ -12,7 +11,6 @@ "f8f8f8": "ffffff" }, "2": { - "101010": "101010", "363636": "05312f", "4d4d4d": "590015", "4e4e4e": "377772", @@ -21,6 +19,6 @@ "9d7247": "dda476", "d1bf6b": "ffe0ba", "b3b3b3": "a70d37", - "f8f8f8": "c83e4c" + "f8f8f8": "c83e4c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/665.json b/public/images/pokemon/variant/exp/back/665.json index c5defbab5b7..de52892d922 100644 --- a/public/images/pokemon/variant/exp/back/665.json +++ b/public/images/pokemon/variant/exp/back/665.json @@ -1,11 +1,9 @@ { "1": { - "363636": "363636", "d1bf6b": "a0c896", "8c8c8c": "895a9f", "bfbfbf": "a97dbb", "9d7247": "838b53", - "101010": "101010", "4d4d4d": "9c615f", "b3b3b3": "e9c7c4", "f8f8f8": "ffffff", @@ -19,7 +17,6 @@ "8c8c8c": "590015", "bfbfbf": "a70d37", "9d7247": "dda476", - "101010": "101010", "4d4d4d": "590015", "b3b3b3": "a70d37", "f8f8f8": "c83e4c", diff --git a/public/images/pokemon/variant/exp/back/666-archipelago.json b/public/images/pokemon/variant/exp/back/666-archipelago.json index 6386464b74e..512859ce9ef 100644 --- a/public/images/pokemon/variant/exp/back/666-archipelago.json +++ b/public/images/pokemon/variant/exp/back/666-archipelago.json @@ -1,35 +1,19 @@ { - "1": { - "101010": "101010", - "303030": "402746", - "675220": "958c8a", - "504a4a": "7f6991", - "595959": "724b7a", - "707068": "a97cbc", - "c8373c": "c8373c", - "a2523b": "a2523b", - "c27351": "c27351", - "30c171": "30c171", - "b28e67": "b28e67", - "ceab62": "d9edd4", - "d2bf96": "d2bf96", - "c3c3c3": "c3c3c3" - }, - "2": { - "101010": "101010", - "303030": "642703", - "675220": "741300", - "504a4a": "741300", - "595959": "824719", - "707068": "a22414", - "c8373c": "c8373c", - "a2523b": "a2523b", - "c27351": "c27351", - "30c171": "30c171", - "b28e67": "b28e67", - "ceab62": "a22414", - "d2bf96": "d2bf96", - "c3c3c3": "e7caa5" - - } + "1": { + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "ceab62": "d9edd4" + }, + "2": { + "303030": "642703", + "675220": "741300", + "504a4a": "741300", + "595959": "824719", + "707068": "a22414", + "ceab62": "a22414", + "c3c3c3": "e7caa5" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-continental.json b/public/images/pokemon/variant/exp/back/666-continental.json index 92614fb346c..2c40d87b19e 100644 --- a/public/images/pokemon/variant/exp/back/666-continental.json +++ b/public/images/pokemon/variant/exp/back/666-continental.json @@ -1,38 +1,22 @@ { "1": { - "101010": "101010", "595959": "724b7a", "555353": "724b7a", - "d18257": "d18257", - "f9bd55": "f9bd55", "303030": "402746", - "f8f05e": "f8f05e", - "d24c3e": "d24c3e", "675220": "958c8a", "ceab62": "d9edd4", "707068": "a97cbc", "504a4a": "7f6991", - "aa5844": "aa5844", - "c3c3c3": "ffeaff", - "811c1c": "811c1c", - "e08528": "e08528" + "c3c3c3": "ffeaff" }, "2": { - "101010": "101010", "595959": "8f551e", "555353": "e99b44", - "d18257": "d18257", - "f9bd55": "f9bd55", "303030": "6d2d0d", - "f8f05e": "f8f05e", - "d24c3e": "d24c3e", "675220": "9c5c19", "ceab62": "e99b44", "707068": "e99b44", "504a4a": "9c5c19", - "aa5844": "aa5844", - "c3c3c3": "f8f27f", - "811c1c": "811c1c", - "308528": "308528" + "c3c3c3": "f8f27f" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-elegant.json b/public/images/pokemon/variant/exp/back/666-elegant.json index 1b7b9838005..5caa4720b7b 100644 --- a/public/images/pokemon/variant/exp/back/666-elegant.json +++ b/public/images/pokemon/variant/exp/back/666-elegant.json @@ -1,34 +1,19 @@ { - "1": { - "101010": "101010", - "303030": "402746", - "675220": "958c8a", - "504a4a": "7f6991", - "595959": "724b7a", - "707068": "a97cbc", - "de4040": "de4040", - "f8de3f": "f8de3f", - "ceab62": "d9edd4", - "56479d": "56479d", - "875fb5": "875fb5", - "cf7ef3": "cf7ef3", - "c3c3c3": "c3c3c3", - "e6ddf8": "e6ddf8" - }, - "2": { - "101010": "101010", - "303030": "351262", - "675220": "7d1083", - "504a4a": "7d1083", - "595959": "612776", - "707068": "a73fab", - "de4040": "de4040", - "f8de3f": "f8de3f", - "ceab62": "a73fab", - "56479d": "56479d", - "875fb5": "875fb5", - "cf7ef3": "cf7ef3", - "c3c3c3": "f0ecff", - "e6ddf8": "e6ddf8" - } + "1": { + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "ceab62": "d9edd4" + }, + "2": { + "303030": "351262", + "675220": "7d1083", + "504a4a": "7d1083", + "595959": "612776", + "707068": "a73fab", + "ceab62": "a73fab", + "c3c3c3": "f0ecff" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-fancy.json b/public/images/pokemon/variant/exp/back/666-fancy.json index 5d368667ae3..6f20a0dc3bb 100644 --- a/public/images/pokemon/variant/exp/back/666-fancy.json +++ b/public/images/pokemon/variant/exp/back/666-fancy.json @@ -1,36 +1,22 @@ { - "1": { - "101010": "101010", - "303030": "402746", - "675220": "958c8a", - "504a4a": "7f6991", - "595959": "724b7a", - "707068": "a97cbc", - "de4040": "de4040", - "5faa3e": "5faa3e", - "ceab62": "d9edd4", - "b6d26d": "b6d26d", - "e9e052": "e9e052", - "cf7ef3": "cf7ef3", - "c3c3c3": "ffeaff", - "f2d4e3": "f2d4e3", - "ead2e3": "ffeaff" - }, - "2": { - "101010": "101010", - "303030": "00771b", - "675220": "b9c05a", - "504a4a": "b9c05a", - "595959": "6f9f42", - "707068": "6f9f42", - "de4040": "de4040", - "5faa3e": "5faa3e", - "ceab62": "e3e982", - "b6d26d": "b6d26d", - "e9e052": "e9e052", - "cf7ef3": "cf7ef3", - "c3c3c3": "fcf1ff", - "f2d4e3": "f2d4e3", - "ead2e3": "fcf1ff" - } + "1": { + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "ceab62": "d9edd4", + "c3c3c3": "ffeaff", + "ead2e3": "ffeaff" + }, + "2": { + "303030": "00771b", + "675220": "b9c05a", + "504a4a": "b9c05a", + "595959": "6f9f42", + "707068": "6f9f42", + "ceab62": "e3e982", + "c3c3c3": "fcf1ff", + "ead2e3": "fcf1ff" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-garden.json b/public/images/pokemon/variant/exp/back/666-garden.json index 16fec8bc537..2f79f5d017b 100644 --- a/public/images/pokemon/variant/exp/back/666-garden.json +++ b/public/images/pokemon/variant/exp/back/666-garden.json @@ -1,32 +1,19 @@ { - "1": { - "101010": "101010", - "303030": "402746", - "675220": "958c8a", - "504a4a": "7f6991", - "595959": "724b7a", - "707068": "a97cbc", - "de4040": "de4040", - "398351": "398351", - "ceab62": "d9edd4", - "88d254": "88d254", - "3f919a": "3f919a", - "3dba96": "3dba96", - "c3c3c3": "c3c3c3" - }, - "2": { - "101010": "101010", - "303030": "044553", - "675220": "055160", - "504a4a": "055160", - "595959": "006b55", - "707068": "227687", - "de4040": "de4040", - "398351": "398351", - "ceab62": "227687", - "88d254": "88d254", - "3f919a": "3f919a", - "3dba96": "3dba96", - "c3c3c3": "72d0a3" - } + "1": { + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "ceab62": "d9edd4" + }, + "2": { + "303030": "044553", + "675220": "055160", + "504a4a": "055160", + "595959": "006b55", + "707068": "227687", + "ceab62": "227687", + "c3c3c3": "72d0a3" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-high-plains.json b/public/images/pokemon/variant/exp/back/666-high-plains.json index 984055b6a24..55ddeb3fd46 100644 --- a/public/images/pokemon/variant/exp/back/666-high-plains.json +++ b/public/images/pokemon/variant/exp/back/666-high-plains.json @@ -1,38 +1,19 @@ { - "1": { - "101010": "101010", - "303030": "402746", - "675220": "958c8a", - "337543": "337543", - "504a4a": "7f6991", - "595959": "724b7a", - "7d4428": "7d4428", - "707068": "a97cbc", - "9a5a3b": "9a5a3b", - "aa4343": "aa4343", - "e1764e": "e1764e", - "e8c815": "e8c815", - "ceab62": "d9edd4", - "f3a861": "f3a861", - "c3c3c3": "c3c3c3", - "773d21": "773d21" - }, - "2": { - "101010": "101010", - "303030": "8f1d19", - "675220": "c97034", - "337543": "337543", - "504a4a": "c97034", - "595959": "a55422", - "7d4428": "7d4428", - "707068": "f2975a", - "9a5a3b": "9a5a3b", - "aa4343": "aa4343", - "e1764e": "e1764e", - "e8c815": "e8c815", - "ceab62": "f2975a", - "f3a861": "f3a861", - "c3c3c3": "edc67c", - "773d21": "773d21" - } + "1": { + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "ceab62": "d9edd4" + }, + "2": { + "303030": "8f1d19", + "675220": "c97034", + "504a4a": "c97034", + "595959": "a55422", + "707068": "f2975a", + "ceab62": "f2975a", + "c3c3c3": "edc67c" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-icy-snow.json b/public/images/pokemon/variant/exp/back/666-icy-snow.json index ec52af1302a..ab0c92a28fb 100644 --- a/public/images/pokemon/variant/exp/back/666-icy-snow.json +++ b/public/images/pokemon/variant/exp/back/666-icy-snow.json @@ -1,32 +1,18 @@ { - "1": { - "101010": "101010", - "303030": "402746", - "675220": "958c8a", - "504a4a": "7f6991", - "595959": "724b7a", - "707068": "a97cbc", - "ceab62": "d9edd4", - "95a1a1": "95a1a1", - "acacc2": "acacc2", - "c3c3c3": "c3c3c3", - "cfd9cf": "cfd9cf", - "c5c5da": "c5c5da", - "ffffff": "ffffff" - }, - "2": { - "101010": "101010", - "303030": "364051", - "675220": "666b7d", - "504a4a": "666b7d", - "595959": "60646a", - "707068": "8c91a4", - "ceab62": "8c91a4", - "95a1a1": "95a1a1", - "acacc2": "acacc2", - "c3c3c3": "c3c3c3", - "cfd9cf": "cfd9cf", - "c5c5da": "c5c5da", - "ffffff": "ffffff" - } + "1": { + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "ceab62": "d9edd4" + }, + "2": { + "303030": "364051", + "675220": "666b7d", + "504a4a": "666b7d", + "595959": "60646a", + "707068": "8c91a4", + "ceab62": "8c91a4" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-jungle.json b/public/images/pokemon/variant/exp/back/666-jungle.json index 63b998e284e..d4b0171bd78 100644 --- a/public/images/pokemon/variant/exp/back/666-jungle.json +++ b/public/images/pokemon/variant/exp/back/666-jungle.json @@ -1,34 +1,19 @@ { - "1": { - "101010": "101010", - "303030": "402746", - "724e28": "724e28", - "675220": "958c8a", - "504a4a": "7f6991", - "595959": "724b7a", - "567456": "567456", - "707068": "a97cbc", - "9a653e": "9a653e", - "638c63": "638c63", - "c29566": "c29566", - "ceab62": "d9edd4", - "7cc48b": "7cc48b", - "c3c3c3": "c3c3c3" - }, - "2": { - "101010": "101010", - "303030": "20452e", - "724e28": "724e28", - "675220": "153922", - "504a4a": "153922", - "595959": "285b3b", - "567456": "567456", - "707068": "385c43", - "9a653e": "9a653e", - "638c63": "638c63", - "c29566": "c29566", - "ceab62": "385c43", - "7cc48b": "7cc48b", - "c3c3c3": "a9d9a0" - } + "1": { + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "ceab62": "d9edd4" + }, + "2": { + "303030": "20452e", + "675220": "153922", + "504a4a": "153922", + "595959": "285b3b", + "707068": "385c43", + "ceab62": "385c43", + "c3c3c3": "a9d9a0" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-marine.json b/public/images/pokemon/variant/exp/back/666-marine.json index 0bae2c2067e..fa84d9f946b 100644 --- a/public/images/pokemon/variant/exp/back/666-marine.json +++ b/public/images/pokemon/variant/exp/back/666-marine.json @@ -1,32 +1,19 @@ { - "1": { - "101010": "101010", - "303030": "402746", - "675220": "958c8a", - "504a4a": "7f6991", - "595959": "724b7a", - "707068": "a97cbc", - "ceab62": "d9edd4", - "315382": "315382", - "367cb9": "367cb9", - "2f8dc9": "2f8dc9", - "5acdf1": "5acdf1", - "c3c3c3": "c3c3c3", - "f2f2f2": "f2f2f2" - }, - "2": { - "101010": "101010", - "303030": "16244f", - "675220": "264c85", - "504a4a": "264c85", - "595959": "2a5894", - "707068": "3070af", - "ceab62": "3070af", - "315382": "315382", - "367cb9": "367cb9", - "2f8dc9": "2f8dc9", - "5acdf1": "5acdf1", - "c3c3c3": "3070af", - "f2f2f2": "f2f2f2" - } + "1": { + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "ceab62": "d9edd4" + }, + "2": { + "303030": "16244f", + "675220": "264c85", + "504a4a": "264c85", + "595959": "2a5894", + "707068": "3070af", + "ceab62": "3070af", + "c3c3c3": "3070af" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-meadow.json b/public/images/pokemon/variant/exp/back/666-meadow.json index 4f567cb29ee..d722641f0da 100644 --- a/public/images/pokemon/variant/exp/back/666-meadow.json +++ b/public/images/pokemon/variant/exp/back/666-meadow.json @@ -1,34 +1,19 @@ { - "1": { - "101010": "101010", - "f2f2f2": "f2f2f2", - "303030": "402746", - "504a4a": "7f6991", - "595959": "724b7a", - "c3c3c3": "c3c3c3", - "707068": "a97cbc", - "675220": "958c8a", - "ceab62": "d9edd4", - "2d9b9b": "2d9b9b", - "e66fad": "e66fad", - "b4295a": "b4295a", - "f3a0ca": "f3a0ca", - "da6b7e": "da6b7e" - }, - "2": { - "101010": "101010", - "f2f2f2": "f2f2f2", - "303030": "770921", - "504a4a": "a2275e", - "595959": "9e3941", - "c3c3c3": "f4c2ec", - "707068": "ce5283", - "675220": "a2275e", - "ceab62": "ce5283", - "2d9b9b": "2d9b9b", - "e66fad": "e66fad", - "b4295a": "b4295a", - "f3a0ca": "f3a0ca", - "da6b7e": "da6b7e" - } + "1": { + "303030": "402746", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "675220": "958c8a", + "ceab62": "d9edd4" + }, + "2": { + "303030": "770921", + "504a4a": "a2275e", + "595959": "9e3941", + "c3c3c3": "f4c2ec", + "707068": "ce5283", + "675220": "a2275e", + "ceab62": "ce5283" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-modern.json b/public/images/pokemon/variant/exp/back/666-modern.json index 5572a58bfa9..ab01cb62e1d 100644 --- a/public/images/pokemon/variant/exp/back/666-modern.json +++ b/public/images/pokemon/variant/exp/back/666-modern.json @@ -1,32 +1,19 @@ { - "1": { - "101010": "101010", - "303030": "402746", - "675220": "958c8a", - "504a4a": "7f6991", - "595959": "724b7a", - "707068": "a97cbc", - "b83c3c": "b83c3c", - "f44f4f": "f44f4f", - "ceab62": "d9edd4", - "3b6cbb": "3b6cbb", - "405793": "405793", - "c3c3c3": "c3c3c3", - "cfc5d9": "cfc5d9" - }, - "2":{ - "101010": "101010", - "303030": "4e0000", - "675220": "801521", - "504a4a": "801521", - "595959": "830012", - "707068": "ad2640", - "b83c3c": "b83c3c", - "f44f4f": "f44f4f", - "ceab62": "ad2640", - "3b6cbb": "3b6cbb", - "405793": "405793", - "c3c3c3": "ffeae8", - "cfc5d9": "cfc5d9" - } + "1": { + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "ceab62": "d9edd4" + }, + "2": { + "303030": "4e0000", + "675220": "801521", + "504a4a": "801521", + "595959": "830012", + "707068": "ad2640", + "ceab62": "ad2640", + "c3c3c3": "ffeae8" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-monsoon.json b/public/images/pokemon/variant/exp/back/666-monsoon.json index 915d471b2b1..5a127a43bbe 100644 --- a/public/images/pokemon/variant/exp/back/666-monsoon.json +++ b/public/images/pokemon/variant/exp/back/666-monsoon.json @@ -1,33 +1,19 @@ { - "1": { - "101010": "101010", - "303030": "402746", - "675220": "958c8a", - "504a4a": "7f6991", - "595959": "724b7a", - "707068": "a97cbc", - "807676": "807676", - "ceab62": "d9edd4", - "5676de": "5676de", - "4eccd6": "4eccd6", - "989898": "989898", - "c3c3c3": "c3c3c3", - "f0f0f8": "f0f0f8" - }, - "2": { - "101010": "101010", - "303030": "3d3231", - "675220": "2c3593", - "504a4a": "2c3593", - "595959": "4f4645", - "707068": "5857bc", - "807676": "807676", - "ceab62": "5857bc", - "5676de": "5676de", - "4eccd6": "4eccd6", - "989898": "989898", - "92f4f4": "92f4f4", - "c3c3c3": "b8f9f9", - "f0f0f8": "f0f0f8" - } + "1": { + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "ceab62": "d9edd4" + }, + "2": { + "303030": "3d3231", + "675220": "2c3593", + "504a4a": "2c3593", + "595959": "4f4645", + "707068": "5857bc", + "ceab62": "5857bc", + "c3c3c3": "b8f9f9" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-ocean.json b/public/images/pokemon/variant/exp/back/666-ocean.json index 70e7a51c21f..9704a52e083 100644 --- a/public/images/pokemon/variant/exp/back/666-ocean.json +++ b/public/images/pokemon/variant/exp/back/666-ocean.json @@ -1,34 +1,19 @@ { - "1": { - "101010": "101010", - "303030": "402746", - "675220": "958c8a", - "504a4a": "7f6991", - "595959": "724b7a", - "707068": "a97cbc", - "e1384d": "e1384d", - "ebcf3f": "ebcf3f", - "ceab62": "d9edd4", - "f4ad61": "f4ad61", - "f8ef6a": "f8ef6a", - "4482c9": "4482c9", - "6bb2e9": "6bb2e9", - "c3c3c3": "c3c3c3" - }, - "2": { - "101010": "101010", - "303030": "b54908", - "675220": "bc601c", - "504a4a": "bc601c", - "595959": "e99a26", - "707068": "ea8742", - "e1384d": "e1384d", - "ebcf3f": "ebcf3f", - "ceab62": "ea8742", - "f4ad61": "f4ad61", - "f8ef6a": "f8ef6a", - "4482c9": "4482c9", - "6bb2e9": "6bb2e9", - "c3c3c3": "f3c86b" - } + "1": { + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "ceab62": "d9edd4" + }, + "2": { + "303030": "b54908", + "675220": "bc601c", + "504a4a": "bc601c", + "595959": "e99a26", + "707068": "ea8742", + "ceab62": "ea8742", + "c3c3c3": "f3c86b" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-poke-ball.json b/public/images/pokemon/variant/exp/back/666-poke-ball.json index e21ba03fc1e..3625b1857ed 100644 --- a/public/images/pokemon/variant/exp/back/666-poke-ball.json +++ b/public/images/pokemon/variant/exp/back/666-poke-ball.json @@ -1,34 +1,25 @@ { - "1": { - "101010": "101010", - "303030": "402746", - "675220": "958c8a", - "504a4a": "7f6991", - "595959": "724b7a", - "707068": "a97cbc", - "971d1d": "971d1d", - "b72c2c": "b72c2c", - "dc4b4b": "dc4b4b", - "e97e7e": "e97e7e", - "ceab62": "d9edd4", - "a9a99e": "a9a99e", - "c3c3c3": "c3c3c3", - "f8f8f8": "f8f8f8" - }, - "2": { - "101010": "101010", - "303030": "ae001a", - "675220": "a70038", - "504a4a": "a70038", - "595959": "df0036", - "707068": "d5375a", - "971d1d": "040046", - "b72c2c": "00005e", - "dc4b4b": "19007d", - "e97e7e": "2e2095", - "ceab62": "d5375a", - "a9a99e": "000050", - "c3c3c3": "f0a6bf", - "f8f8f8": "00006d" - } + "1": { + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "ceab62": "d9edd4" + }, + "2": { + "303030": "ae001a", + "675220": "a70038", + "504a4a": "a70038", + "595959": "df0036", + "707068": "d5375a", + "971d1d": "040046", + "b72c2c": "00005e", + "dc4b4b": "19007d", + "e97e7e": "2e2095", + "ceab62": "d5375a", + "a9a99e": "000050", + "c3c3c3": "f0a6bf", + "f8f8f8": "00006d" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-polar.json b/public/images/pokemon/variant/exp/back/666-polar.json index f86b4df3dcc..818b7c7850e 100644 --- a/public/images/pokemon/variant/exp/back/666-polar.json +++ b/public/images/pokemon/variant/exp/back/666-polar.json @@ -1,34 +1,19 @@ { - "1": { - "101010": "101010", - "303030": "402746", - "675220": "958c8a", - "2d2d61": "2d2d61", - "504a4a": "7f6991", - "595959": "724b7a", - "707068": "a97cbc", - "ceab62": "d9edd4", - "3b4b8a": "3b4b8a", - "4d6cc1": "4d6cc1", - "6aa2dc": "6aa2dc", - "bfbfbf": "bfbfbf", - "c3c3c3": "c3c3c3", - "f0f0f8": "f0f0f8" - }, - "2": { - "101010": "101010", - "303030": "191b54", - "675220": "366098", - "2d2d61": "2d2d61", - "504a4a": "366098", - "595959": "2f3887", - "707068": "5f85c1", - "ceab62": "5f85c1", - "3b4b8a": "3b4b8a", - "4d6cc1": "4d6cc1", - "6aa2dc": "6aa2dc", - "bfbfbf": "bfbfbf", - "c3c3c3": "ffffff", - "f0f0f8": "f0f0f8" - } + "1": { + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "ceab62": "d9edd4" + }, + "2": { + "303030": "191b54", + "675220": "366098", + "504a4a": "366098", + "595959": "2f3887", + "707068": "5f85c1", + "ceab62": "5f85c1", + "c3c3c3": "ffffff" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-river.json b/public/images/pokemon/variant/exp/back/666-river.json index c7e5e288d05..5ba0084df9d 100644 --- a/public/images/pokemon/variant/exp/back/666-river.json +++ b/public/images/pokemon/variant/exp/back/666-river.json @@ -1,40 +1,18 @@ { - "1": { - "101010": "101010", - "303030": "402746", - "4a412c": "4a412c", - "675220": "958c8a", - "634d20": "634d20", - "1d726a": "1d726a", - "504a4a": "7f6991", - "595959": "724b7a", - "625841": "625841", - "707068": "a97cbc", - "bc813f": "bc813f", - "9c9143": "9c9143", - "ceab62": "ceab62", - "279ec2": "279ec2", - "59c9d3": "59c9d3", - "c3c3c3": "c3c3c3", - "d2a862": "d9edd4" - }, - "2": { - "101010": "101010", - "303030": "7b2800", - "4a412c": "4a412c", - "675220": "ae7f41", - "634d20": "634d20", - "1d726a": "1d726a", - "504a4a": "ae7f41", - "595959": "8a5702", - "625841": "625841", - "707068": "d9a666", - "bc813f": "bc813f", - "9c9143": "9c9143", - "ceab62": "ceab62", - "279ec2": "279ec2", - "59c9d3": "59c9d3", - "c3c3c3": "e3c384", - "d2a862": "d2a862" - } + "1": { + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "d2a862": "d9edd4" + }, + "2": { + "303030": "7b2800", + "675220": "ae7f41", + "504a4a": "ae7f41", + "595959": "8a5702", + "707068": "d9a666", + "c3c3c3": "e3c384" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-sandstorm.json b/public/images/pokemon/variant/exp/back/666-sandstorm.json index 6bc91afb34d..64f3f8ce3fa 100644 --- a/public/images/pokemon/variant/exp/back/666-sandstorm.json +++ b/public/images/pokemon/variant/exp/back/666-sandstorm.json @@ -1,34 +1,19 @@ { - "1": { - "101010": "101010", - "303030": "402746", - "675220": "958c8a", - "504a4a": "7f6991", - "595959": "724b7a", - "625843": "625843", - "72604d": "72604d", - "707068": "a97cbc", - "9b9148": "9b9148", - "ba8d68": "ba8d68", - "ceab62": "d9edd4", - "d9b674": "d9b674", - "f1d69e": "f1d69e", - "c3c3c3": "c3c3c3" - }, - "2": { - "101010": "101010", - "303030": "443123", - "675220": "9c703b", - "504a4a": "9c703b", - "595959": "88583e", - "625843": "625843", - "72604d": "72604d", - "707068": "c6975f", - "9b9148": "9b9148", - "ba8d68": "ba8d68", - "ceab62": "c6975f", - "d9b674": "d9b674", - "f1d69e": "f1d69e", - "c3c3c3": "ece1a9" - } + "1": { + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "ceab62": "d9edd4" + }, + "2": { + "303030": "443123", + "675220": "9c703b", + "504a4a": "9c703b", + "595959": "88583e", + "707068": "c6975f", + "ceab62": "c6975f", + "c3c3c3": "ece1a9" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-savanna.json b/public/images/pokemon/variant/exp/back/666-savanna.json index c261f52dced..1b4b22b67d9 100644 --- a/public/images/pokemon/variant/exp/back/666-savanna.json +++ b/public/images/pokemon/variant/exp/back/666-savanna.json @@ -1,34 +1,19 @@ { - "1": { - "101010": "101010", - "303030": "402746", - "675220": "958c8a", - "504a4a": "7f6991", - "595959": "724b7a", - "707068": "a97cbc", - "dcc433": "dcc433", - "ceab62": "d9edd4", - "3b67ac": "3b67ac", - "61a0f5": "61a0f5", - "55d3d9": "55d3d9", - "6cc6c6": "6cc6c6", - "fffd77": "fffd77", - "c3c3c3": "c3c3c3" - }, - "2": { - "101010": "101010", - "303030": "183576", - "675220": "1d828b", - "504a4a": "1d828b", - "595959": "4168bb", - "707068": "4faab3", - "dcc433": "dcc433", - "ceab62": "4faab3", - "fffd77": "fffd77", - "3b67ac": "3b67ac", - "61a0f5": "61a0f5", - "55d3d9": "55d3d9", - "6cc6c6": "6cc6c6", - "c3c3c3": "81e7e1" - } + "1": { + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "ceab62": "d9edd4" + }, + "2": { + "303030": "183576", + "675220": "1d828b", + "504a4a": "1d828b", + "595959": "4168bb", + "707068": "4faab3", + "ceab62": "4faab3", + "c3c3c3": "81e7e1" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-sun.json b/public/images/pokemon/variant/exp/back/666-sun.json index 21cf5787ba4..c18f2cd34e3 100644 --- a/public/images/pokemon/variant/exp/back/666-sun.json +++ b/public/images/pokemon/variant/exp/back/666-sun.json @@ -1,34 +1,19 @@ -{ - "1": { - "101010": "101010", - "303030": "402746", - "675220": "958c8a", - "504a4a": "7f6991", - "595959": "724b7a", - "707068": "a97cbc", - "c94971": "c94971", - "e18248": "e18248", - "ceab62": "d9edd4", - "f1a26a": "f1a26a", - "f0ce44": "f0ce44", - "fcf372": "fcf372", - "f47491": "f47491", - "c3c3c3": "c3c3c3" - }, - "2": { - "101010": "101010", - "303030": "640000", - "675220": "8c1850", - "504a4a": "8c1850", - "595959": "750500", - "707068": "b83b74", - "c94971": "c94971", - "e18248": "e18248", - "ceab62": "b83b74", - "f1a26a": "f1a26a", - "f0ce44": "f0ce44", - "fcf372": "fcf372", - "f47491": "f47491", - "c3c3c3": "fee3e7" - } +{ + "1": { + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "ceab62": "d9edd4" + }, + "2": { + "303030": "640000", + "675220": "8c1850", + "504a4a": "8c1850", + "595959": "750500", + "707068": "b83b74", + "ceab62": "b83b74", + "c3c3c3": "fee3e7" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/666-tundra.json b/public/images/pokemon/variant/exp/back/666-tundra.json index b098f776c00..fb42b3a6db2 100644 --- a/public/images/pokemon/variant/exp/back/666-tundra.json +++ b/public/images/pokemon/variant/exp/back/666-tundra.json @@ -1,32 +1,19 @@ { - "1": { - "101010": "101010", - "303030": "402746", - "675220": "958c8a", - "504a4a": "7f6991", - "595959": "724b7a", - "707068": "a97cbc", - "ceab62": "d9edd4", - "539ad9": "539ad9", - "74bbe9": "74bbe9", - "a3def1": "a3def1", - "c3c3c3": "c3c3c3", - "d0d0d0": "d0d0d0", - "f0f0f8": "f0f0f8" - }, - "2": { - "101010": "101010", - "303030": "003d69", - "675220": "3a76a7", - "504a4a": "3a76a7", - "595959": "225b72", - "707068": "659dd0", - "ceab62": "659dd0", - "539ad9": "539ad9", - "74bbe9": "74bbe9", - "a3def1": "a3def1", - "c3c3c3": "cbfbfb", - "d0d0d0": "d0d0d0", - "f0f0f8": "f0f0f8" - } + "1": { + "303030": "402746", + "675220": "958c8a", + "504a4a": "7f6991", + "595959": "724b7a", + "707068": "a97cbc", + "ceab62": "d9edd4" + }, + "2": { + "303030": "003d69", + "675220": "3a76a7", + "504a4a": "3a76a7", + "595959": "225b72", + "707068": "659dd0", + "ceab62": "659dd0", + "c3c3c3": "cbfbfb" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/670-orange.json b/public/images/pokemon/variant/exp/back/670-orange.json index 4cf657f0a43..09df5a862ed 100644 --- a/public/images/pokemon/variant/exp/back/670-orange.json +++ b/public/images/pokemon/variant/exp/back/670-orange.json @@ -2,7 +2,6 @@ "1": { "7f6f1f": "5c0d0d", "cfae4f": "a3382c", - "101010": "101010", "875829": "5c2c09", "d98d41": "aa571d", "ffb568": "cd9231", @@ -12,14 +11,12 @@ "208050": "e493a1", "cfbfaf": "bfbfbf", "706050": "595959", - "f8f7f9": "f8f7f9", "50996f": "f2b4b4", "205030": "aa2960" }, "2": { "7f6f1f": "b1b1b1", "cfae4f": "f8f8f4", - "101010": "101010", "875829": "215510", "d98d41": "739f1f", "ffb568": "afcf4f", diff --git a/public/images/pokemon/variant/exp/back/670-red.json b/public/images/pokemon/variant/exp/back/670-red.json index d6f3f1bc99c..ae753ab76b5 100644 --- a/public/images/pokemon/variant/exp/back/670-red.json +++ b/public/images/pokemon/variant/exp/back/670-red.json @@ -2,7 +2,6 @@ "1": { "7f6f1f": "3e0547", "cfae4f": "8e1653", - "101010": "101010", "703040": "630a23", "df4f4f": "a31f35", "ef6f6f": "cd4a4a", @@ -12,14 +11,12 @@ "208050": "e493a1", "cfbfaf": "bfbfbf", "706050": "595959", - "f8f7f9": "f8f7f9", "50996f": "f2b4b4", "205030": "aa2960" }, "2": { "7f6f1f": "b1b1b1", "cfae4f": "f8f8f4", - "101010": "101010", "703040": "215510", "df4f4f": "739f1f", "ef6f6f": "afcf4f", diff --git a/public/images/pokemon/variant/exp/back/670-white.json b/public/images/pokemon/variant/exp/back/670-white.json index 6c781f728dc..dda06922053 100644 --- a/public/images/pokemon/variant/exp/back/670-white.json +++ b/public/images/pokemon/variant/exp/back/670-white.json @@ -2,7 +2,6 @@ "1": { "7f6f1f": "110732", "cfae4f": "3b374e", - "101010": "101010", "878787": "1e1d2a", "d9d9d9": "4c4b55", "fdfdfd": "747478", @@ -12,14 +11,12 @@ "208050": "e493a1", "cfbfaf": "bfbfbf", "706050": "595959", - "f8f7f9": "f8f7f9", "50996f": "f2b4b4", "205030": "aa2960" }, "2": { "7f6f1f": "b1b1b1", "cfae4f": "f8f8f4", - "101010": "101010", "878787": "215510", "d9d9d9": "739f1f", "fdfdfd": "afcf4f", @@ -29,7 +26,6 @@ "208050": "6d716f", "cfbfaf": "c6c6c6", "706050": "595959", - "f8f7f9": "f8f7f9", "50996f": "a3a6a4", "205030": "1c2d32" } diff --git a/public/images/pokemon/variant/exp/back/670-yellow.json b/public/images/pokemon/variant/exp/back/670-yellow.json index 44f974da441..76b47b04e21 100644 --- a/public/images/pokemon/variant/exp/back/670-yellow.json +++ b/public/images/pokemon/variant/exp/back/670-yellow.json @@ -2,7 +2,6 @@ "1": { "7f6f1f": "06471f", "cfae4f": "1a8021", - "101010": "101010", "857c28": "064718", "d8cb40": "6f950a", "f9ec63": "abb830", @@ -12,14 +11,12 @@ "208050": "e493a1", "cfbfaf": "bfbfbf", "706050": "595959", - "f8f7f9": "f8f7f9", "50996f": "f2b4b4", "205030": "aa2960" }, "2": { "7f6f1f": "b1b1b1", "cfae4f": "f8f8f4", - "101010": "101010", "857c28": "215510", "d8cb40": "739f1f", "f9ec63": "afcf4f", diff --git a/public/images/pokemon/variant/exp/back/6705.json b/public/images/pokemon/variant/exp/back/6705.json index a4e3b52f015..f8d367abf7a 100644 --- a/public/images/pokemon/variant/exp/back/6705.json +++ b/public/images/pokemon/variant/exp/back/6705.json @@ -6,7 +6,6 @@ "bfacbf": "e56ca6", "367456": "0c5474", "50ab89": "197497", - "101010": "101010", "60606c": "1f1233", "c5cce0": "513981", "aeb5c6": "442967", @@ -20,11 +19,9 @@ "bfacbf": "5db6a9", "367456": "842401", "50ab89": "a34205", - "101010": "101010", "60606c": "042329", "c5cce0": "176463", "aeb5c6": "0d484a", - "949aab": "073338", - "e3e8f4": "e3e8f4" + "949aab": "073338" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/671-blue.json b/public/images/pokemon/variant/exp/back/671-blue.json index d439421802b..025c6e2ad0e 100644 --- a/public/images/pokemon/variant/exp/back/671-blue.json +++ b/public/images/pokemon/variant/exp/back/671-blue.json @@ -3,7 +3,6 @@ "4a778a": "130540", "7cc6c6": "291371", "daf8f8": "69c9e3", - "141214": "141214", "aaf2f2": "3827a3", "466e82": "130540", "3d9ccc": "2938a3", @@ -12,17 +11,12 @@ "247264": "dc5073", "2c826c": "dc5073", "3ca68c": "ff91a4", - "5c5a5c": "5c5a5c", - "bcbebc": "bcbebc", - "fcfafc": "fcfafc", - "245a4c": "aa1a58", - "1c362c": "1c362c" + "245a4c": "aa1a58" }, "2": { "4a778a": "07230a", "7cc6c6": "213225", "daf8f8": "dfe3e1", - "141214": "141214", "aaf2f2": "4d4e46", "466e82": "0a320e", "3d9ccc": "7f9f1f", @@ -34,7 +28,6 @@ "5c5a5c": "32448e", "bcbebc": "9fb6d4", "fcfafc": "dff2ff", - "245a4c": "0d4a80", - "1c362c": "1c362c" + "245a4c": "0d4a80" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/671-orange.json b/public/images/pokemon/variant/exp/back/671-orange.json index 9a543e497f5..4bf20675cd8 100644 --- a/public/images/pokemon/variant/exp/back/671-orange.json +++ b/public/images/pokemon/variant/exp/back/671-orange.json @@ -3,7 +3,6 @@ "795941": "401d04", "d2ab84": "631818", "faeadb": "ffbc77", - "141214": "141214", "ffd9b2": "a34b2c", "785941": "401d04", "d98d41": "954c17", @@ -12,17 +11,12 @@ "247264": "dc5073", "2c826c": "dc5073", "3ca68c": "ff91a4", - "5c5a5c": "5c5a5c", - "bcbebc": "bcbebc", - "fcfafc": "fcfafc", - "245a4c": "aa1a58", - "1c362c": "1c362c" + "245a4c": "aa1a58" }, "2": { "795941": "07230a", "d2ab84": "213225", "faeadb": "dfe3e1", - "141214": "141214", "ffd9b2": "4d4e46", "785941": "0a320e", "d98d41": "7f9f1f", @@ -34,7 +28,6 @@ "5c5a5c": "5c0c2e", "bcbebc": "f1a695", "fcfafc": "fff1df", - "245a4c": "800707", - "1c362c": "1c362c" + "245a4c": "800707" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/671-red.json b/public/images/pokemon/variant/exp/back/671-red.json index 46fe34c7d0c..9788c78b8fe 100644 --- a/public/images/pokemon/variant/exp/back/671-red.json +++ b/public/images/pokemon/variant/exp/back/671-red.json @@ -3,7 +3,6 @@ "643e5c": "390614", "a46294": "4e0c38", "fcb2cc": "ff90a2", - "141214": "141214", "dc9ac4": "8e1a55", "842e2c": "390614", "dc4e4c": "95172c", @@ -12,17 +11,12 @@ "247264": "dc5073", "2c826c": "dc5073", "3ca68c": "ff91a4", - "5c5a5c": "5c5a5c", - "bcbebc": "bcbebc", - "fcfafc": "fcfafc", - "245a4c": "aa1a58", - "1c362c": "1c362c" + "245a4c": "aa1a58" }, "2": { "643e5c": "07230a", "a46294": "213225", "fcb2cc": "dfe3e1", - "141214": "141214", "dc9ac4": "4d4e46", "842e2c": "0a320e", "dc4e4c": "7f9f1f", @@ -34,7 +28,6 @@ "5c5a5c": "5c0c2e", "bcbebc": "dca4b2", "fcfafc": "ffd7db", - "245a4c": "710846", - "1c362c": "1c362c" + "245a4c": "710846" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/671-white.json b/public/images/pokemon/variant/exp/back/671-white.json index a4953029afe..b8155ae32bb 100644 --- a/public/images/pokemon/variant/exp/back/671-white.json +++ b/public/images/pokemon/variant/exp/back/671-white.json @@ -3,7 +3,6 @@ "868686": "171a1c", "b4b4b4": "231e32", "f7bcc6": "c2c1c6", - "141214": "141214", "f2f2f2": "353340", "878787": "171a1c", "d9d9d9": "3c3b47", @@ -12,17 +11,12 @@ "247264": "dc5073", "2c826c": "dc5073", "3ca68c": "ff91a4", - "5c5a5c": "5c5a5c", - "bcbebc": "bcbebc", - "fcfafc": "fcfafc", - "245a4c": "aa1a58", - "1c362c": "1c362c" + "245a4c": "aa1a58" }, "2": { "868686": "07230a", "b4b4b4": "213225", "f7bcc6": "dfe3e1", - "141214": "141214", "f2f2f2": "4d4e46", "878787": "0a320e", "d9d9d9": "7f9f1f", @@ -34,7 +28,6 @@ "5c5a5c": "595959", "bcbebc": "bfbfbf", "fcfafc": "f9f9f9", - "245a4c": "1c2d32", - "1c362c": "1c362c" + "245a4c": "1c2d32" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/671-yellow.json b/public/images/pokemon/variant/exp/back/671-yellow.json index 81a74ac231e..63309425d81 100644 --- a/public/images/pokemon/variant/exp/back/671-yellow.json +++ b/public/images/pokemon/variant/exp/back/671-yellow.json @@ -3,7 +3,6 @@ "7c7755": "074034", "d2b98b": "227850", "facea2": "ffe593", - "141214": "141214", "feeabf": "22b14a", "76724b": "074034", "d9cc41": "789c16", @@ -12,17 +11,12 @@ "247264": "dc5073", "2c826c": "dc5073", "3ca68c": "ff91a4", - "5c5a5c": "5c5a5c", - "bcbebc": "bcbebc", - "fcfafc": "fcfafc", - "245a4c": "aa1a58", - "1c362c": "1c362c" + "245a4c": "aa1a58" }, "2": { "7c7755": "07230a", "d2b98b": "213225", "facea2": "dfe3e1", - "141214": "141214", "feeabf": "4d4e46", "76724b": "0a320e", "d9cc41": "7f9f1f", @@ -34,7 +28,6 @@ "5c5a5c": "8e4d0a", "bcbebc": "d4c18f", "fcfafc": "fffde0", - "245a4c": "8e4d0a", - "1c362c": "1c362c" + "245a4c": "8e4d0a" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/6713.json b/public/images/pokemon/variant/exp/back/6713.json index a0ba9eb72ad..721679daf7d 100644 --- a/public/images/pokemon/variant/exp/back/6713.json +++ b/public/images/pokemon/variant/exp/back/6713.json @@ -3,7 +3,6 @@ "737373": "7a993d", "e8e8e8": "cfe68a", "729ac2": "d97389", - "101010": "101010", "bfbfbf": "9dcc3e", "bff4ff": "ffbfda", "6b5442": "732334", @@ -19,7 +18,6 @@ "737373": "641531", "e8e8e8": "bf576b", "729ac2": "cc7b1e", - "101010": "101010", "bfbfbf": "993554", "bff4ff": "fcc95c", "6b5442": "2c7a75", diff --git a/public/images/pokemon/variant/exp/back/672.json b/public/images/pokemon/variant/exp/back/672.json index 7282ef5e693..c118d603d57 100644 --- a/public/images/pokemon/variant/exp/back/672.json +++ b/public/images/pokemon/variant/exp/back/672.json @@ -1,7 +1,6 @@ { "1": { "3d3128": "69112a", - "000000": "000000", "67615b": "9e2c3d", "615140": "89431b", "7e6d5a": "b3743e", @@ -17,7 +16,6 @@ }, "2": { "3d3128": "161526", - "000000": "000000", "67615b": "2d2b40", "615140": "4c7a68", "7e6d5a": "72b692", @@ -31,4 +29,4 @@ "c6b379": "9f5f9b", "a8905c": "854d87" } -} +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/673.json b/public/images/pokemon/variant/exp/back/673.json index 7e5bc69976d..8d5d7d2b76e 100644 --- a/public/images/pokemon/variant/exp/back/673.json +++ b/public/images/pokemon/variant/exp/back/673.json @@ -1,7 +1,6 @@ { "1": { "3d3128": "5a0e24", - "000000": "000000", "554538": "471405", "67615b": "8f2837", "0d835a": "d2af94", @@ -17,7 +16,6 @@ }, "2": { "3d3128": "121123", - "000000": "000000", "554538": "37224d", "67615b": "2d2b40", "0d835a": "6893b6", @@ -31,4 +29,4 @@ "ae492a": "612c6b", "c16a3f": "9f5f9b" } -} +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/677.json b/public/images/pokemon/variant/exp/back/677.json index 9403c5c6e8e..473003c1fd4 100644 --- a/public/images/pokemon/variant/exp/back/677.json +++ b/public/images/pokemon/variant/exp/back/677.json @@ -3,7 +3,6 @@ "565581": "470d28", "8988b6": "943b5d", "999fdc": "bd5c81", - "000000": "000000", "c0c3e5": "e2dfcb", "e8e8ef": "f1f0e4", "8871a2": "601339", @@ -13,7 +12,6 @@ "565581": "193437", "8988b6": "426b62", "999fdc": "6ba78a", - "000000": "000000", "c0c3e5": "5f3656", "e8e8ef": "67415e", "8871a2": "243e41", diff --git a/public/images/pokemon/variant/exp/back/678-female.json b/public/images/pokemon/variant/exp/back/678-female.json index 6639b1e6674..1d4109ac04b 100644 --- a/public/images/pokemon/variant/exp/back/678-female.json +++ b/public/images/pokemon/variant/exp/back/678-female.json @@ -5,8 +5,7 @@ "737373": "947859", "334575": "76264d", "1e2945": "47182e", - "375794": "a5346b", - "000000": "000000" + "375794": "a5346b" }, "2": { "b2afb6": "613d5a", @@ -14,7 +13,6 @@ "737373": "3a1633", "334575": "47946c", "1e2945": "1d3f33", - "375794": "7bd38d", - "000000": "000000" + "375794": "7bd38d" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/678.json b/public/images/pokemon/variant/exp/back/678.json index e194c472468..56684f0503e 100644 --- a/public/images/pokemon/variant/exp/back/678.json +++ b/public/images/pokemon/variant/exp/back/678.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "bfbfbf": "d5c49f", "f8f8f8": "f8f5cd", "737373": "947859", @@ -9,7 +8,6 @@ "17294d": "47182e" }, "2": { - "101010": "101010", "bfbfbf": "613d5a", "f8f8f8": "855577", "737373": "3a1633", diff --git a/public/images/pokemon/variant/exp/back/690.json b/public/images/pokemon/variant/exp/back/690.json index a513e813823..7e4536149f9 100644 --- a/public/images/pokemon/variant/exp/back/690.json +++ b/public/images/pokemon/variant/exp/back/690.json @@ -2,7 +2,6 @@ "1": { "3f6273": "310511", "4d341b": "181243", - "101010": "101010", "a6e1ff": "792a48", "a6703a": "3e44a2", "7ec3e5": "6b1f42", @@ -16,7 +15,6 @@ "2": { "3f6273": "340628", "4d341b": "042431", - "101010": "101010", "a6e1ff": "633060", "a6703a": "2c5d64", "7ec3e5": "481a42", diff --git a/public/images/pokemon/variant/exp/back/691.json b/public/images/pokemon/variant/exp/back/691.json index 5ed68809c44..849dd6a4e5b 100644 --- a/public/images/pokemon/variant/exp/back/691.json +++ b/public/images/pokemon/variant/exp/back/691.json @@ -1,7 +1,6 @@ { "1": { "4d4d2e": "31246d", - "101010": "101010", "b3b36b": "403c94", "80804d": "382f7d", "732230": "310511", @@ -17,7 +16,6 @@ }, "2": { "4d4d2e": "07262e", - "101010": "101010", "b3b36b": "1d4952", "80804d": "0d3338", "732230": "340b33", diff --git a/public/images/pokemon/variant/exp/back/696.json b/public/images/pokemon/variant/exp/back/696.json index b58bfea922f..bc63acb4f9c 100644 --- a/public/images/pokemon/variant/exp/back/696.json +++ b/public/images/pokemon/variant/exp/back/696.json @@ -1,35 +1,30 @@ { "1": { - "734517":"5e0b0b", - "ffa64c":"a50d0d", - "3e1f18":"023425", - "966858":"1b6430", - "404040":"4c3216", - "65483a":"0b4c29", - "101010":"101010", - "f8f8f8":"dfdea7", - "bfbfbf":"cbbe8c", - "8c8c8c":"ad8c63", - "121212":"121212", - "bdbdbd":"c9bd8b", - "f5f5f5":"dbdaa4", - "b73b6b":"77452d" + "734517": "5e0b0b", + "ffa64c": "a50d0d", + "3e1f18": "023425", + "966858": "1b6430", + "404040": "4c3216", + "65483a": "0b4c29", + "f8f8f8": "dfdea7", + "bfbfbf": "cbbe8c", + "8c8c8c": "ad8c63", + "bdbdbd": "c9bd8b", + "f5f5f5": "dbdaa4", + "b73b6b": "77452d" }, "2": { - "734517":"395cb7", - "ffa64c":"d2e9ff", - "3e1f18":"3e1f18", - "966858":"83726e", - "404040":"250860", - "65483a":"644943", - "101010":"101010", - "f8f8f8":"6e46a7", - "bfbfbf":"593097", - "8c8c8c":"411684", - "121212":"decaff", - "bdbdbd":"79c8d3", - "f5f5f5":"cce6ff", - "b73b6b":"385cb5" + "734517": "395cb7", + "ffa64c": "d2e9ff", + "966858": "83726e", + "404040": "250860", + "65483a": "644943", + "f8f8f8": "6e46a7", + "bfbfbf": "593097", + "8c8c8c": "411684", + "121212": "decaff", + "bdbdbd": "79c8d3", + "f5f5f5": "cce6ff", + "b73b6b": "385cb5" } -} - +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/697.json b/public/images/pokemon/variant/exp/back/697.json index 5303995a117..4fffa77a383 100644 --- a/public/images/pokemon/variant/exp/back/697.json +++ b/public/images/pokemon/variant/exp/back/697.json @@ -1,34 +1,30 @@ { - -"1": { -"080808": "080808", -"32252c": "3e1e17", -"50131e": "0b241e", -"722533": "153626", -"54434c": "4c3216", -"964b1c": "5e0b0b", -"963e4e": "285234", -"bf7545": "971c1c", -"f19d5a": "b52424", -"9f9d98": "ad8c63", -"cccccc": "cbbe8c", -"fafafa": "dfdea7", -"53454d":"4c3216" -}, -"2": { -"080808": "080808", -"32252c": "0d0124", -"50131e": "573b36", -"722533": "83726e", -"54434c": "170c25", -"964b1c": "9d5390", -"963e4e": "ab9b97", -"bf7545": "ce7ecc", -"f19d5a": "f4dbf6", -"9f9d98": "26173b", -"cccccc": "33214f", -"fafafa": "4b2e64", -"53454d": "f4dbf6" -} -} - + "1": { + "32252c": "3e1e17", + "50131e": "0b241e", + "722533": "153626", + "54434c": "4c3216", + "964b1c": "5e0b0b", + "963e4e": "285234", + "bf7545": "971c1c", + "f19d5a": "b52424", + "9f9d98": "ad8c63", + "cccccc": "cbbe8c", + "fafafa": "dfdea7", + "53454d": "4c3216" + }, + "2": { + "32252c": "0d0124", + "50131e": "573b36", + "722533": "83726e", + "54434c": "170c25", + "964b1c": "9d5390", + "963e4e": "ab9b97", + "bf7545": "ce7ecc", + "f19d5a": "f4dbf6", + "9f9d98": "26173b", + "cccccc": "33214f", + "fafafa": "4b2e64", + "53454d": "f4dbf6" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/700.json b/public/images/pokemon/variant/exp/back/700.json index 1189d463f2b..2a8ecba3b8f 100644 --- a/public/images/pokemon/variant/exp/back/700.json +++ b/public/images/pokemon/variant/exp/back/700.json @@ -1,32 +1,28 @@ { -"1": { -"101010": "101010", -"8a2843": "452f89", -"235a99": "a63071", -"895c72": "5c6889", -"d85a7a": "996cd2", -"528fcc": "d648b7", -"a88d8c": "8c8fa8", -"f18a78": "b52d27", -"fa8caa": "c7a6ee", -"64c8f3": "e974db", -"d9c3c3": "c3c5d9", -"fff5f5": "f7f5ff", -"65798c": "65798c" -}, -"2": { -"101010": "101010", -"8a2843": "0e6134", -"235a99": "900d1b", -"895c72": "7f5c89", -"d85a7a": "5dae7d", -"528fcc": "dd3d4f", -"a88d8c": "7f5c89", -"f18a78": "d14ea4", -"fa8caa": "7dec9d", -"64c8f3": "ff9a68", -"d9c3c3": "d9c3d6", -"fff5f5": "fff5fc", -"65798c": "65798c" -} + "1": { + "8a2843": "452f89", + "235a99": "a63071", + "895c72": "5c6889", + "d85a7a": "996cd2", + "528fcc": "d648b7", + "a88d8c": "8c8fa8", + "f18a78": "b52d27", + "fa8caa": "c7a6ee", + "64c8f3": "e974db", + "d9c3c3": "c3c5d9", + "fff5f5": "f7f5ff" + }, + "2": { + "8a2843": "0e6134", + "235a99": "900d1b", + "895c72": "7f5c89", + "d85a7a": "5dae7d", + "528fcc": "dd3d4f", + "a88d8c": "7f5c89", + "f18a78": "d14ea4", + "fa8caa": "7dec9d", + "64c8f3": "ff9a68", + "d9c3c3": "d9c3d6", + "fff5f5": "fff5fc" + } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/702.json b/public/images/pokemon/variant/exp/back/702.json index 12feb29a0fd..adea0fb21eb 100644 --- a/public/images/pokemon/variant/exp/back/702.json +++ b/public/images/pokemon/variant/exp/back/702.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "262626": "2a3b5e", "4d4d4d": "6789b3", "bfbf86": "a3d1cc", @@ -10,12 +9,10 @@ "f2c261": "ffd3b6", "bf994c": "e49f84", "1d1d1d": "1a1c45", - "f8f8f8": "f8f8f8", "464646": "424b8f", "d97d21": "7cd6a1" }, "2": { - "101010": "101010", "262626": "072d38", "4d4d4d": "197870", "bfbf86": "aaa8d6", @@ -25,7 +22,6 @@ "f2c261": "5f3662", "bf994c": "432249", "1d1d1d": "02172d", - "f8f8f8": "f8f8f8", "464646": "17646c", "d97d21": "d2fff1" } diff --git a/public/images/pokemon/variant/exp/back/704.json b/public/images/pokemon/variant/exp/back/704.json index 1955f425b26..12f004ad956 100644 --- a/public/images/pokemon/variant/exp/back/704.json +++ b/public/images/pokemon/variant/exp/back/704.json @@ -4,7 +4,6 @@ "f2daf2": "fbb3d2", "bfacbf": "e56ca6", "4d454d": "8a2166", - "101010": "101010", "4d993d": "197497", "66cc52": "3aa8c4", "b8a1e5": "c7a1e5", @@ -18,7 +17,6 @@ "f2daf2": "92d8c8", "bfacbf": "63a99e", "4d454d": "134557", - "101010": "101010", "4d993d": "a34205", "66cc52": "d27e26", "b8a1e5": "4a9699", diff --git a/public/images/pokemon/variant/exp/back/705.json b/public/images/pokemon/variant/exp/back/705.json index 72dd07123ea..3424b46ee03 100644 --- a/public/images/pokemon/variant/exp/back/705.json +++ b/public/images/pokemon/variant/exp/back/705.json @@ -1,26 +1,24 @@ { "1": { - "101010": "101010", - "4d454d": "8a2166", - "647543": "197497", - "98bd51": "3aa8c4", - "665980": "4e4094", - "807380": "b93f84", - "8f7db3": "8b69c3", - "bfacbf": "e56ca6", - "b8a1e5": "c7a1e5", - "f2daf2": "fbb3d2" + "4d454d": "8a2166", + "647543": "197497", + "98bd51": "3aa8c4", + "665980": "4e4094", + "807380": "b93f84", + "8f7db3": "8b69c3", + "bfacbf": "e56ca6", + "b8a1e5": "c7a1e5", + "f2daf2": "fbb3d2" }, "2": { - "101010": "101010", - "4d454d": "194f51", - "647543": "a34205", - "98bd51": "d27e26", - "665980": "274159", - "807380": "2b736f", - "8f7db3": "2f667c", - "bfacbf": "5db6a9", - "b8a1e5": "4a9699", - "f2daf2": "9cead8" + "4d454d": "194f51", + "647543": "a34205", + "98bd51": "d27e26", + "665980": "274159", + "807380": "2b736f", + "8f7db3": "2f667c", + "bfacbf": "5db6a9", + "b8a1e5": "4a9699", + "f2daf2": "9cead8" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/706.json b/public/images/pokemon/variant/exp/back/706.json index c14e7e8a123..eef2e311597 100644 --- a/public/images/pokemon/variant/exp/back/706.json +++ b/public/images/pokemon/variant/exp/back/706.json @@ -4,7 +4,6 @@ "807380": "b24c86", "bfacbf": "cd7aa1", "f2daf2": "f1a4c5", - "101010": "101010", "998a99": "b24c86", "fefefe": "f8f8f8", "4d993d": "197497", @@ -20,7 +19,6 @@ "807380": "194f51", "bfacbf": "559b91", "f2daf2": "9cead8", - "101010": "101010", "998a99": "2b736f", "fefefe": "f8f8f8", "4d993d": "a34205", diff --git a/public/images/pokemon/variant/exp/back/709.json b/public/images/pokemon/variant/exp/back/709.json index 39fdc746e2a..5aa204b7074 100644 --- a/public/images/pokemon/variant/exp/back/709.json +++ b/public/images/pokemon/variant/exp/back/709.json @@ -2,7 +2,6 @@ "1": { "3f2f1f": "262741", "1f3f2f": "361f1b", - "101010": "101010", "cf9f6f": "7c808c", "1f9f5f": "907f76", "2f6f4f": "4d362e", @@ -11,9 +10,7 @@ "33333f": "722023" }, "2": { - "3f2f1f": "3f2f1f", "1f3f2f": "761d52", - "101010": "101010", "cf9f6f": "7e5658", "1f9f5f": "da7ea8", "2f6f4f": "a94079", diff --git a/public/images/pokemon/variant/exp/back/710.json b/public/images/pokemon/variant/exp/back/710.json index 974195f1850..97f07f39af8 100644 --- a/public/images/pokemon/variant/exp/back/710.json +++ b/public/images/pokemon/variant/exp/back/710.json @@ -3,10 +3,7 @@ "392e28": "213a22", "6c5c53": "599752", "594b40": "478243", - "000000": "000000", "4e4137": "478243", - "201a17": "201a17", - "2c241f": "2c241f", "6d5a52": "599752", "41342c": "478243", "cc7571": "404040", @@ -19,10 +16,7 @@ "392e28": "0e2218", "6c5c53": "425947", "594b40": "2a4031", - "000000": "000000", "4e4137": "2a4031", - "201a17": "201a17", - "2c241f": "2c241f", "6d5a52": "425947", "41342c": "2a4031", "cc7571": "ad3b33", diff --git a/public/images/pokemon/variant/exp/back/711.json b/public/images/pokemon/variant/exp/back/711.json index 76b5beb3ad8..5bc30d8e756 100644 --- a/public/images/pokemon/variant/exp/back/711.json +++ b/public/images/pokemon/variant/exp/back/711.json @@ -1,32 +1,26 @@ { "0": { - "101010": "101010", "28211c": "202423", "504338": "593a59", "c6786e": "262626", - "25201b": "25201b", "834037": "171717", "e69586": "404040", "f1ca99": "cea971", "c09a69": "aa7e43" }, "1": { - "101010": "101010", "28211c": "202423", "504338": "353631", "c6786e": "325b34", - "25201b": "25201b", "834037": "153f18", "e69586": "4d7d4b", "f1ca99": "ddcfb1", "c09a69": "baa78d" }, "2": { - "101010": "101010", "28211c": "5e0b09", "504338": "ad3b33", "c6786e": "213c28", - "25201b": "25201b", "834037": "102316", "e69586": "36593d", "f1ca99": "b57d52", diff --git a/public/images/pokemon/variant/exp/back/712.json b/public/images/pokemon/variant/exp/back/712.json index 59ad2436866..6a9f45ffebd 100644 --- a/public/images/pokemon/variant/exp/back/712.json +++ b/public/images/pokemon/variant/exp/back/712.json @@ -4,11 +4,7 @@ "58647b": "bf566d", "b3eaf8": "ffbfda", "a5c4d2": "f29eb3", - "e8f5fe": "ffebf2", - "101010": "101010", - "bfbfbf": "bfbfbf", - "737373": "737373", - "f8f8f8": "f8f8f8" + "e8f5fe": "ffebf2" }, "2": { "719aa9": "cc7b1e", @@ -16,7 +12,6 @@ "b3eaf8": "fcc95c", "a5c4d2": "e69e2b", "e8f5fe": "fff2ad", - "101010": "101010", "bfbfbf": "6cb3ae", "737373": "2c7a75", "f8f8f8": "b9f2ee" diff --git a/public/images/pokemon/variant/exp/back/713.json b/public/images/pokemon/variant/exp/back/713.json index 61977f60470..03f24a2226d 100644 --- a/public/images/pokemon/variant/exp/back/713.json +++ b/public/images/pokemon/variant/exp/back/713.json @@ -6,8 +6,7 @@ "bff4ff": "ffbfda", "335980": "994255", "f2ffff": "ffebf2", - "77b8d9": "d97389", - "101010": "101010" + "77b8d9": "d97389" }, "2": { "608cba": "a8632a", @@ -16,7 +15,6 @@ "bff4ff": "fcc95c", "335980": "824628", "f2ffff": "fff2ad", - "77b8d9": "cc7b1e", - "101010": "101010" + "77b8d9": "cc7b1e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/715.json b/public/images/pokemon/variant/exp/back/715.json index d9b76a01588..25389a3ca71 100644 --- a/public/images/pokemon/variant/exp/back/715.json +++ b/public/images/pokemon/variant/exp/back/715.json @@ -1,7 +1,6 @@ { "1": { "404040": "542f98", - "101010": "101010", "595959": "7a5ccc", "801a1a": "5d173d", "e52e2e": "903b78", @@ -17,10 +16,7 @@ }, "2": { "404040": "b18373", - "101010": "101010", "595959": "e2c7b5", - "801a1a": "801a1a", - "e52e2e": "e52e2e", "8e5499": "5b1922", "737373": "280911", "f8f8f8": "5a2a2b", diff --git a/public/images/pokemon/variant/exp/back/716-active.json b/public/images/pokemon/variant/exp/back/716-active.json index 927ab7f9f0d..c488dc9a8fa 100644 --- a/public/images/pokemon/variant/exp/back/716-active.json +++ b/public/images/pokemon/variant/exp/back/716-active.json @@ -1,9 +1,5 @@ { "1": { - "101010": "101010", - "ccbd8f": "ccbd8f", - "807659": "807659", - "ffecb2": "ffecb2", "345090": "75127d", "7f4a16": "0f735f", "64bfe8": "dd57e8", @@ -16,8 +12,6 @@ "c37732": "3fc199", "547fe9": "b33ccd", "dd3238": "2f75b9", - "5959b3": "5959b3", - "9191f2": "9191f2", "243659": "132b1b", "3d5c99": "1e3824", "262626": "447e48", @@ -26,7 +20,6 @@ "5c8ae5": "324c37" }, "2": { - "101010": "101010", "ccbd8f": "3b2328", "807659": "210f14", "ffecb2": "553639", @@ -42,8 +35,6 @@ "c37732": "824adc", "547fe9": "d75343", "dd3238": "c53fc3", - "5959b3": "5959b3", - "9191f2": "9191f2", "243659": "37134c", "3d5c99": "643071", "262626": "d284b6", diff --git a/public/images/pokemon/variant/exp/back/716-neutral.json b/public/images/pokemon/variant/exp/back/716-neutral.json index 768172915e7..5db424fc423 100644 --- a/public/images/pokemon/variant/exp/back/716-neutral.json +++ b/public/images/pokemon/variant/exp/back/716-neutral.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "84b4ce": "ac8781", "364566": "603f3c", "c0e0ec": "bfa19a", @@ -9,11 +8,9 @@ "2b2a2e": "518554", "1a1a1a": "2c5232", "404040": "7ca376", - "5c8ae5": "324c37", - "1f7a99": "1f7a99" + "5c8ae5": "324c37" }, "2": { - "101010": "101010", "84b4ce": "42283b", "364566": "230d1e", "c0e0ec": "613e56", @@ -22,7 +19,6 @@ "2b2a2e": "d285a7", "1a1a1a": "b2638b", "404040": "f6badb", - "5c8ae5": "884e9f", - "1f7a99": "1f7a99" + "5c8ae5": "884e9f" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/717.json b/public/images/pokemon/variant/exp/back/717.json index 1104b74cf71..615b092ba9c 100644 --- a/public/images/pokemon/variant/exp/back/717.json +++ b/public/images/pokemon/variant/exp/back/717.json @@ -2,7 +2,6 @@ "1": { "4d4d4d": "816450", "b3b3b3": "dbd4cd", - "101010": "101010", "737373": "c1aa9a", "242626": "0f0b2c", "8c8c8c": "cbbfb5", diff --git a/public/images/pokemon/variant/exp/back/720.json b/public/images/pokemon/variant/exp/back/720.json index c4d2c0c70c9..c0bf0e6de76 100644 --- a/public/images/pokemon/variant/exp/back/720.json +++ b/public/images/pokemon/variant/exp/back/720.json @@ -2,7 +2,6 @@ "0": { "8c3f59": "620d00", "ff73a2": "cb5e23", - "101010": "101010", "8a8a99": "684252", "cc5c81": "902c0d", "676773": "3e162b", @@ -16,7 +15,6 @@ "1": { "8c3f59": "280d46", "ff73a2": "753f9b", - "101010": "101010", "8a8a99": "a947b4", "cc5c81": "471c6b", "676773": "632373", @@ -30,7 +28,6 @@ "2": { "8c3f59": "150933", "ff73a2": "35387c", - "101010": "101010", "8a8a99": "304757", "cc5c81": "1d1a4b", "676773": "1c2433", diff --git a/public/images/pokemon/variant/exp/back/728.json b/public/images/pokemon/variant/exp/back/728.json index a9c7155ec91..899ae80c996 100644 --- a/public/images/pokemon/variant/exp/back/728.json +++ b/public/images/pokemon/variant/exp/back/728.json @@ -1,10 +1,8 @@ { "1": { - "101010": "101010", "1e3a66": "363d2f", "243a66": "00473d", "733f50": "a62c20", - "404040": "404040", "b3627d": "e54c41", "2c4f8c": "5a6154", "314f8c": "006355", @@ -13,7 +11,6 @@ "5f9ba6": "b56e76", "639ba6": "858d7d", "6c90d9": "14af82", - "808080": "808080", "bfbfbf": "c2beb4", "9edae5": "f7c1c5", "a1dae5": "92b599", @@ -21,11 +18,9 @@ "fefefe": "fff6e2" }, "2": { - "101010": "101010", "1e3a66": "773f46", "243a66": "54041b", "733f50": "620a33", - "404040": "404040", "b3627d": "a7225c", "2c4f8c": "a45f67", "314f8c": "770f29", @@ -34,7 +29,6 @@ "5f9ba6": "408c62", "639ba6": "b88389", "6c90d9": "be294a", - "808080": "808080", "bfbfbf": "bfb4b9", "9edae5": "91e6a2", "a1dae5": "f7c1c5", diff --git a/public/images/pokemon/variant/exp/back/729.json b/public/images/pokemon/variant/exp/back/729.json index a0e40c36aec..6636e6cfca9 100644 --- a/public/images/pokemon/variant/exp/back/729.json +++ b/public/images/pokemon/variant/exp/back/729.json @@ -1,7 +1,5 @@ { "1": { - "101010": "101010", - "2d2e31": "2d2e31", "733f50": "bb402f", "476d72": "be665d", "b3627d": "fb6051", @@ -10,7 +8,6 @@ "639ba6": "b56e76", "2d8ec4": "009a88", "1eb9ee": "0ccfa2", - "808080": "808080", "8dafaf": "ff989e", "bfbfbf": "c2beb4", "bad8d8": "ffbd98", @@ -19,8 +16,6 @@ "fdfdfd": "fff6e2" }, "2": { - "101010": "101010", - "2d2e31": "2d2e31", "733f50": "620a33", "476d72": "793f5e", "b3627d": "a7225c", @@ -29,7 +24,6 @@ "639ba6": "408c62", "2d8ec4": "952c3f", "1eb9ee": "c6496f", - "808080": "808080", "8dafaf": "b681a6", "bfbfbf": "bfb4b9", "bad8d8": "deabce", diff --git a/public/images/pokemon/variant/exp/back/730.json b/public/images/pokemon/variant/exp/back/730.json index ae6d464dd3f..f8ee7fb709d 100644 --- a/public/images/pokemon/variant/exp/back/730.json +++ b/public/images/pokemon/variant/exp/back/730.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "843843": "a62c20", "8d3f4a": "a62c20", "c46074": "e54c41", @@ -21,11 +20,9 @@ "c0bdc1": "beaac0", "aac7e6": "ea7c5b", "f8f8f8": "fff2d4", - "faf8f8": "f1e8f1", - "fef8f8": "fef8f8" + "faf8f8": "f1e8f1" }, "2": { - "101010": "101010", "843843": "5c2141", "8d3f4a": "1d1638", "c46074": "c17b97", @@ -46,7 +43,6 @@ "c0bdc1": "c0b4a5", "aac7e6": "e9a5c0", "f8f8f8": "f5edee", - "faf8f8": "f5f3e3", - "fef8f8": "fef8f8" + "faf8f8": "f5f3e3" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/734.json b/public/images/pokemon/variant/exp/back/734.json index 03d724ed370..d46c448a6b1 100644 --- a/public/images/pokemon/variant/exp/back/734.json +++ b/public/images/pokemon/variant/exp/back/734.json @@ -2,23 +2,19 @@ "1": { "753933": "03192d", "6b4f27": "523a44", - "070707": "070707", "ba836d": "35576b", "f0cd84": "c1aaaa", "c19462": "907e82", "9c5b50": "2a3f52", - "322f2c": "523716", - "000000": "000000" + "322f2c": "523716" }, "2": { "753933": "26201f", "6b4f27": "241b1b", - "070707": "070707", "ba836d": "a69c98", "f0cd84": "4d4242", "c19462": "362e2e", "9c5b50": "786a66", - "322f2c": "464a4d", - "000000": "000000" + "322f2c": "464a4d" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/735.json b/public/images/pokemon/variant/exp/back/735.json index e647e22d65c..93a57454d38 100644 --- a/public/images/pokemon/variant/exp/back/735.json +++ b/public/images/pokemon/variant/exp/back/735.json @@ -5,7 +5,6 @@ "e8eaa2": "c9b1ab", "c29b49": "7a6a6d", "9c7c5c": "354c6b", - "0f0f0f": "0f0f0f", "805744": "2a3252", "5a3732": "03102d", "282726": "462000", @@ -17,10 +16,8 @@ "e8eaa2": "5c5353", "c29b49": "362e2e", "9c7c5c": "ada5a4", - "0f0f0f": "0f0f0f", "805744": "90827e", "5a3732": "524b4b", - "282726": "282726", "484440": "423d3d" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/748.json b/public/images/pokemon/variant/exp/back/748.json index 7929514bcda..d5e90eed771 100644 --- a/public/images/pokemon/variant/exp/back/748.json +++ b/public/images/pokemon/variant/exp/back/748.json @@ -1,7 +1,6 @@ { "1": { "943732": "5c075b", - "101010": "101010", "f28c4f": "c639bd", "e25025": "a21f90", "93d1d7": "df7b52", @@ -11,12 +10,10 @@ "455b85": "892e20", "525898": "6c3776", "b7429a": "d29784", - "d76fa5": "edd5ca", - "171539": "171539" + "d76fa5": "edd5ca" }, "2": { "943732": "ac063c", - "101010": "101010", "f28c4f": "ff3f5a", "e25025": "e12350", "93d1d7": "5bd97f", @@ -26,7 +23,6 @@ "455b85": "186443", "525898": "d75b3c", "b7429a": "1c524b", - "d76fa5": "2b6157", - "171539": "171539" + "d76fa5": "2b6157" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/751.json b/public/images/pokemon/variant/exp/back/751.json index c28b7065b6a..6af2a3b1c4f 100644 --- a/public/images/pokemon/variant/exp/back/751.json +++ b/public/images/pokemon/variant/exp/back/751.json @@ -4,12 +4,10 @@ "5faecb": "ae504b", "a2d5e6": "d37075", "cfebf7": "ffc8d1", - "f7f7f7": "f7f7f7", "4b5528": "3a112f", "899128": "4e1f42", "47849e": "f1977b", "cfe436": "673252", - "101010": "101010", "49757f": "9e4155", "6a95a3": "d37075", "3c434d": "812b3e", @@ -20,12 +18,10 @@ "5faecb": "b56543", "a2d5e6": "ecaa61", "cfebf7": "f1dcc2", - "f7f7f7": "f7f7f7", "4b5528": "263756", "899128": "4980ac", "47849e": "585b6c", "cfe436": "72add9", - "101010": "101010", "49757f": "c77a4f", "6a95a3": "ecaa61", "3c434d": "ba5c2c", diff --git a/public/images/pokemon/variant/exp/back/752.json b/public/images/pokemon/variant/exp/back/752.json index 4cedfc9ad56..3da662e1086 100644 --- a/public/images/pokemon/variant/exp/back/752.json +++ b/public/images/pokemon/variant/exp/back/752.json @@ -2,13 +2,10 @@ "1": { "648ca2": "7c3b51", "cae1ec": "ffc8d1", - "f7f7f7": "f7f7f7", "a1bcca": "d187a0", "8c9b26": "4e1f42", - "101010": "101010", "434a1c": "3a112f", "cde425": "673252", - "000000": "000000", "262e35": "812b3e", "253f45": "4c152c", "957759": "5ea3b8", @@ -22,13 +19,10 @@ "2": { "648ca2": "55506a", "cae1ec": "dce7ee", - "f7f7f7": "f7f7f7", "a1bcca": "a7a2bc", "8c9b26": "4980ac", - "101010": "101010", "434a1c": "263756", "cde425": "72add9", - "000000": "000000", "262e35": "d49435", "253f45": "834723", "957759": "bc521d", diff --git a/public/images/pokemon/variant/exp/back/753.json b/public/images/pokemon/variant/exp/back/753.json index e4fdc6bb6cc..26e48f43509 100644 --- a/public/images/pokemon/variant/exp/back/753.json +++ b/public/images/pokemon/variant/exp/back/753.json @@ -3,30 +3,24 @@ "234028": "2e1643", "5ba668": "4e2c62", "468050": "3e2253", - "101010": "101010", "315945": "0e2616", "549977": "1b3822", "69bf94": "27452c", "d98d9a": "a55c36", "ffbfca": "b47145", "803340": "682c16", - "f8f8f8": "f8f8f8", - "cc5266": "a55c36", - "bfbfbf": "bfbfbf" + "cc5266": "a55c36" }, "2": { "234028": "531034", "5ba668": "ce54b0", "468050": "9b2d76", - "101010": "101010", "315945": "441342", "549977": "5a215a", "69bf94": "6e3472", "d98d9a": "263b83", "ffbfca": "3454a5", "803340": "0b1d4e", - "f8f8f8": "f8f8f8", - "cc5266": "263b83", - "bfbfbf": "bfbfbf" + "cc5266": "263b83" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/754.json b/public/images/pokemon/variant/exp/back/754.json index f7c71f90a95..5fb99ea57c9 100644 --- a/public/images/pokemon/variant/exp/back/754.json +++ b/public/images/pokemon/variant/exp/back/754.json @@ -1,7 +1,6 @@ { "1": { "803340": "82180e", - "101010": "101010", "ff667f": "c95623", "cc5266": "ac351f", "ffbfca": "f48b49", diff --git a/public/images/pokemon/variant/exp/back/755.json b/public/images/pokemon/variant/exp/back/755.json index 85e1f5b2498..f24a4e444bd 100644 --- a/public/images/pokemon/variant/exp/back/755.json +++ b/public/images/pokemon/variant/exp/back/755.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "7a3f7a": "451233", "edb792": "b08598", "fdff97": "e4c3d0", @@ -21,7 +20,6 @@ "b5cc91": "866eaf" }, "2": { - "101010": "101010", "7a3f7a": "1d225e", "edb792": "99c1bd", "fdff97": "d5f9f2", diff --git a/public/images/pokemon/variant/exp/back/756.json b/public/images/pokemon/variant/exp/back/756.json index 726f32c8955..674a13ce35f 100644 --- a/public/images/pokemon/variant/exp/back/756.json +++ b/public/images/pokemon/variant/exp/back/756.json @@ -10,7 +10,6 @@ "cbd59f": "e5aff3", "dcff44": "e5aff3", "c9e161": "e5aff3", - "101010": "101010", "764b67": "451233", "d08aab": "6c344f", "f5bcd8": "904b66", @@ -30,7 +29,6 @@ "cbd59f": "dffffa", "dcff44": "dffffa", "c9e161": "dffffa", - "101010": "101010", "764b67": "0d7a66", "d08aab": "81e3c9", "f5bcd8": "98f5d1", diff --git a/public/images/pokemon/variant/exp/back/761.json b/public/images/pokemon/variant/exp/back/761.json index be3c472eba7..d320917a94e 100644 --- a/public/images/pokemon/variant/exp/back/761.json +++ b/public/images/pokemon/variant/exp/back/761.json @@ -2,19 +2,14 @@ "1": { "476629": "215e59", "8fcc52": "70d2e1", - "101010": "101010", "6b993d": "398793", "80334d": "251936", "b3476b": "7e5cdb", - "e55c8a": "9f86e4", - "bfbfbf": "bfbfbf", - "737373": "737373", - "f8f8f8": "f8f8f8" + "e55c8a": "9f86e4" }, "2": { "476629": "3e0a11", "8fcc52": "86232e", - "101010": "101010", "6b993d": "5a0a16", "80334d": "0f0f0f", "b3476b": "254536", diff --git a/public/images/pokemon/variant/exp/back/762.json b/public/images/pokemon/variant/exp/back/762.json index 824aed7099b..bd2037e95c5 100644 --- a/public/images/pokemon/variant/exp/back/762.json +++ b/public/images/pokemon/variant/exp/back/762.json @@ -2,12 +2,8 @@ "1": { "446328": "215e59", "96c853": "70d2e1", - "0f0f0f": "0f0f0f", "659344": "398793", "ebe130": "e66556", - "72585f": "72585f", - "fdfdfd": "fdfdfd", - "c7b8c4": "c7b8c4", "962354": "45366e", "f26284": "7e5cdb", "6a1533": "251936", @@ -16,7 +12,6 @@ "2": { "446328": "3e0a11", "96c853": "86232e", - "0f0f0f": "0f0f0f", "659344": "5a0a16", "ebe130": "5c0505", "72585f": "574348", diff --git a/public/images/pokemon/variant/exp/back/763.json b/public/images/pokemon/variant/exp/back/763.json index fffb9c6e439..709b53ce6cd 100644 --- a/public/images/pokemon/variant/exp/back/763.json +++ b/public/images/pokemon/variant/exp/back/763.json @@ -1,6 +1,5 @@ { "1": { - "00131c": "00131c", "c8a848": "af3e31", "c13d76": "674dad", "eaee46": "e66556", @@ -9,15 +8,11 @@ "6d9b62": "398793", "9ce783": "b3f5ff", "84c36f": "70d2e1", - "dac2d5": "dac2d5", - "fefefe": "fefefe", - "6a6274": "6a6274", "ef91aa": "c0abf7", "d75f7f": "9f86e4", "441e2c": "251936" }, "2": { - "00131c": "00131c", "c8a848": "391717", "c13d76": "254536", "eaee46": "5c0505", diff --git a/public/images/pokemon/variant/exp/back/767.json b/public/images/pokemon/variant/exp/back/767.json index 74479ed25ec..405506f716f 100644 --- a/public/images/pokemon/variant/exp/back/767.json +++ b/public/images/pokemon/variant/exp/back/767.json @@ -1,7 +1,6 @@ { "1": { "46334f": "844008", - "080808": "080808", "a65e97": "e8a92a", "713e70": "c86910", "3f5252": "202733", @@ -12,7 +11,6 @@ }, "2": { "46334f": "091b52", - "080808": "080808", "a65e97": "2849ac", "713e70": "1c306d", "3f5252": "3d105f", diff --git a/public/images/pokemon/variant/exp/back/768.json b/public/images/pokemon/variant/exp/back/768.json index 43d48fea203..ab1bd155946 100644 --- a/public/images/pokemon/variant/exp/back/768.json +++ b/public/images/pokemon/variant/exp/back/768.json @@ -4,9 +4,7 @@ "c8e1cd": "6e6d6d", "546b57": "202733", "81b68e": "494950", - "101010": "101010", "842886": "c85710", - "000000": "000000", "cc5fcf": "ff7e2c", "9a6982": "c86910", "7a4952": "844008", @@ -21,16 +19,11 @@ "c8e1cd": "2849ac", "546b57": "091b52", "81b68e": "1c306d", - "101010": "101010", "842886": "5722a6", - "000000": "000000", "cc5fcf": "8b51e1", "9a6982": "452772", "7a4952": "3d105f", - "2f3330": "2f3330", - "404843": "404843", "498f6c": "8cdded", - "bd95a8": "844caf", - "5c635e": "5c635e" + "bd95a8": "844caf" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/771.json b/public/images/pokemon/variant/exp/back/771.json index 9876b7a067f..02b1131f68e 100644 --- a/public/images/pokemon/variant/exp/back/771.json +++ b/public/images/pokemon/variant/exp/back/771.json @@ -2,9 +2,7 @@ "1": { "73223d": "570a00", "d94174": "de884b", - "101010": "101010", "992e52": "c95340", - "1a1a1a": "1a1a1a", "404040": "731b33", "595959": "bd5e49", "f8f8f8": "dec890", @@ -14,9 +12,7 @@ "2": { "73223d": "b94114", "d94174": "ead059", - "101010": "101010", "992e52": "db7b43", - "1a1a1a": "1a1a1a", "404040": "dacece", "595959": "1c1c2d", "f8f8f8": "4d4d65", diff --git a/public/images/pokemon/variant/exp/back/772.json b/public/images/pokemon/variant/exp/back/772.json index d367e8f88f7..972da787a08 100644 --- a/public/images/pokemon/variant/exp/back/772.json +++ b/public/images/pokemon/variant/exp/back/772.json @@ -2,7 +2,6 @@ "1": { "454f55": "232843", "92a6a9": "889db1", - "080808": "080808", "6b777e": "526085", "642515": "7e4f36", "c55e3a": "eed8a1", @@ -23,7 +22,6 @@ "2": { "454f55": "18182a", "92a6a9": "65657c", - "080808": "080808", "6b777e": "3b3b51", "642515": "444961", "c55e3a": "c1cfd8", diff --git a/public/images/pokemon/variant/exp/back/773.json b/public/images/pokemon/variant/exp/back/773.json index b9a89e12871..c331b8800a9 100644 --- a/public/images/pokemon/variant/exp/back/773.json +++ b/public/images/pokemon/variant/exp/back/773.json @@ -7,10 +7,8 @@ "e3e6ec": "bdd1e5", "d3d7df": "98a8be", "bcbbc5": "788fb5", - "080808": "080808", "3f3b50": "1e172a", "aba7bc": "493d55", - "c86741": "c86741", "483c39": "3a2d53", "e9eaf8": "e7ebed", "e64f5e": "f1944a", @@ -31,12 +29,8 @@ "e3e6ec": "444455", "d3d7df": "b4bcc4", "bcbbc5": "242433", - "080808": "080808", - "3f3b50": "3f3b50", "aba7bc": "dbd8e8", - "c86741": "c86741", "483c39": "778894", - "e9eaf8": "e9eaf8", "e64f5e": "98ce58", "1d1845": "41434e", "0073bf": "6a6c75", diff --git a/public/images/pokemon/variant/exp/back/777.json b/public/images/pokemon/variant/exp/back/777.json index eb3a3edb5cc..b3754df1a64 100644 --- a/public/images/pokemon/variant/exp/back/777.json +++ b/public/images/pokemon/variant/exp/back/777.json @@ -1,18 +1,14 @@ { "1": { - "101010": "101010", "ffea80": "dec2f0", "4d4d4d": "362952", "ccb852": "ac8fbb", "b3b3b3": "8e71cd", "808080": "645393", "73593f": "ae428a", - "bfbfbf": "d0dadb", - "f8f8f8": "f8f8f8", - "595959": "595959" + "bfbfbf": "d0dadb" }, "2": { - "101010": "101010", "ffea80": "d65d3c", "4d4d4d": "294127", "ccb852": "7b3c26", diff --git a/public/images/pokemon/variant/exp/back/778-busted.json b/public/images/pokemon/variant/exp/back/778-busted.json index 21f796f0657..d75d3ad86b3 100644 --- a/public/images/pokemon/variant/exp/back/778-busted.json +++ b/public/images/pokemon/variant/exp/back/778-busted.json @@ -1,24 +1,20 @@ { "1": { - "000000": "000000", - "101010": "101010", + "000000": "101010", "404040": "2d1818", "b3a76b": "8d4f3d", "f2e291": "aa6f46", "665f3d": "542c21", - "000000": "101010", "4d361f": "844b20", "b37d47": "fabc5f", "805933": "b97d2c" }, "2": { - "000000": "000000", "101010": "000000", "404040": "0c123a", "b3a76b": "3d2e4f", "f2e291": "5b496b", "665f3d": "1b1031", - "000000": "000000", "4d361f": "3e5075", "b37d47": "8eb5cd", "805933": "6d80a4" diff --git a/public/images/pokemon/variant/exp/back/778-disguised.json b/public/images/pokemon/variant/exp/back/778-disguised.json index 3ebf48117fb..f981ba3fe96 100644 --- a/public/images/pokemon/variant/exp/back/778-disguised.json +++ b/public/images/pokemon/variant/exp/back/778-disguised.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "404040": "2d1818", "b3a76b": "8d4f3d", "f2e291": "aa6f46", @@ -16,9 +15,8 @@ "b3a76b": "3d2e4f", "f2e291": "5b496b", "665f3d": "1b1031", - "000000": "000000", "4d361f": "3e5075", "b37d47": "8eb5cd", "805933": "6d80a4" } -} +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/779.json b/public/images/pokemon/variant/exp/back/779.json index 82cf0169d73..6b59b94e154 100644 --- a/public/images/pokemon/variant/exp/back/779.json +++ b/public/images/pokemon/variant/exp/back/779.json @@ -2,7 +2,6 @@ "1": { "553d72": "a52121", "9967ba": "c62c2c", - "262735": "262735", "729dcd": "667fb2", "a4f2f7": "caefff", "e66aa5": "602b7a", @@ -10,21 +9,17 @@ "f889bb": "84539d", "fae676": "faa28c", "db9957": "d65e5e", - "bbc8fb": "94c5da", - "fcfcfc": "fcfcfc" + "bbc8fb": "94c5da" }, "2": { "553d72": "4545c4", "9967ba": "6666e2", - "262735": "262735", "729dcd": "afafe1", "a4f2f7": "eeeeff", "e66aa5": "dca032", "922755": "935b3b", "f889bb": "ffd166", "fae676": "454457", - "db9957": "2d2c43", - "bbc8fb": "bbc8fb", - "fcfcfc": "fcfcfc" + "db9957": "2d2c43" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/789.json b/public/images/pokemon/variant/exp/back/789.json index 6654144c36e..f1e5ac88c50 100644 --- a/public/images/pokemon/variant/exp/back/789.json +++ b/public/images/pokemon/variant/exp/back/789.json @@ -4,17 +4,10 @@ "404c8e": "7d365a", "129fdc": "6a12dc", "34bdef": "9255f2", - "f8f8f8": "f8f8f8", - "1c242a": "1c242a", - "000000": "000000", "2e377a": "64173e", - "727449": "727449", - "f9f7ba": "f9f7ba", - "efed81": "efed81", "643f8e": "dc48a7", "8e4994": "944976", - "e2639d": "f77247", - "a74f6e": "a74f6e" + "e2639d": "f77247" }, "1": { "2872b0": "f6a42d", diff --git a/public/images/pokemon/variant/exp/back/790.json b/public/images/pokemon/variant/exp/back/790.json index 415b2d26074..e111a9e35b9 100644 --- a/public/images/pokemon/variant/exp/back/790.json +++ b/public/images/pokemon/variant/exp/back/790.json @@ -4,14 +4,9 @@ "faf54e": "e5efff", "c87522": "7b89c4", "e8a61e": "aebde2", - "101010": "101010", - "fdfdfd": "fdfdfd", "169fda": "ffdf49", "1d3e89": "a20b02", - "e2629f": "e2629f", "764394": "eb5b2a", - "1e232b": "1e232b", - "17a6e3": "17a6e3", "2c5fab": "ff4079" }, "2": { @@ -19,14 +14,9 @@ "faf54e": "d4314c", "c87522": "890425", "e8a61e": "ae1a3d", - "101010": "101010", - "fdfdfd": "fdfdfd", - "169fda": "169fda", "1d3e89": "0f2388", "e2629f": "71ffd8", "764394": "7e13bf", - "1e232b": "1e232b", - "17a6e3": "17a6e3", "2c5fab": "3dc7e0" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/792.json b/public/images/pokemon/variant/exp/back/792.json index faa9a7229bf..85cad197450 100644 --- a/public/images/pokemon/variant/exp/back/792.json +++ b/public/images/pokemon/variant/exp/back/792.json @@ -1,7 +1,6 @@ { "1": { "69551f": "675340", - "000000": "000000", "a19263": "afa191", "e3da81": "e6ded2", "fff6ef": "fdfce8", @@ -11,15 +10,10 @@ "edf0ff": "ffd386", "671ace": "eb422a", "494dcc": "dd0e7d", - "7bcece": "ff31e0", - "124027": "124027", - "7a9e67": "7a9e67", - "525841": "525841", - "b6e4cb": "b6e4cb" + "7bcece": "ff31e0" }, "2": { "69551f": "6b0420", - "000000": "000000", "a19263": "980f2a", "e3da81": "c22741", "fff6ef": "ff6d74", @@ -29,10 +23,6 @@ "edf0ff": "ffd1d1", "671ace": "1550a1", "494dcc": "3692d0", - "7bcece": "58cbe9", - "124027": "124027", - "7a9e67": "7a9e67", - "525841": "525841", - "b6e4cb": "b6e4cb" + "7bcece": "58cbe9" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/793.json b/public/images/pokemon/variant/exp/back/793.json index 76e104003d1..bb3d3d8793e 100644 --- a/public/images/pokemon/variant/exp/back/793.json +++ b/public/images/pokemon/variant/exp/back/793.json @@ -2,12 +2,10 @@ "1": { "a9c0c2": "941d20", "f3f8f8": "ffac61", - "fefefe": "fefefe", "66808c": "47090d", "32468d": "098c5d", "57badf": "40ffcc", "ccd9db": "db5930", - "121212": "121212", "3c7ccc": "1ecb76", "becfd1": "c03a25", "43545c": "39030e" @@ -15,13 +13,9 @@ "2": { "a9c0c2": "1f1b9c", "f3f8f8": "bd6ffd", - "fefefe": "fefefe", "66808c": "372983", - "32468d": "32468d", "57badf": "6bebff", "ccd9db": "8542ea", - "121212": "121212", - "3c7ccc": "3c7ccc", "becfd1": "5128c3", "43545c": "35226f" } diff --git a/public/images/pokemon/variant/exp/back/797.json b/public/images/pokemon/variant/exp/back/797.json index 1393cc2bf7d..7daa9fd6b7e 100644 --- a/public/images/pokemon/variant/exp/back/797.json +++ b/public/images/pokemon/variant/exp/back/797.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "135f58": "a65017", "219383": "bb6e1d", "bcc8c0": "f2b97f", @@ -21,7 +20,6 @@ "b3e088": "ffe4b2" }, "2": { - "101010": "101010", "135f58": "77d4a9", "219383": "93d9a7", "bcc8c0": "242733", diff --git a/public/images/pokemon/variant/exp/back/798.json b/public/images/pokemon/variant/exp/back/798.json index 2026ff45058..fc082c5b047 100644 --- a/public/images/pokemon/variant/exp/back/798.json +++ b/public/images/pokemon/variant/exp/back/798.json @@ -1,10 +1,8 @@ { "1": { "707070": "18470e", - "3f3f33": "3f3f33", "c8c8c8": "588720", "686877": "7b4b2b", - "2d2b26": "2d2b26", "959595": "18470e", "f9f9f9": "ddbe79", "bc5b35": "07421f", @@ -13,7 +11,6 @@ "e1921d": "136733", "e5e5e5": "87ab39", "ffffff": "d8e169", - "000000": "000000", "582914": "2c180e", "ad410b": "41281c", "e75303": "614537" @@ -32,7 +29,6 @@ "e1921d": "933940", "e5e5e5": "4a86b8", "ffffff": "87d2da", - "000000": "000000", "582914": "8a482d", "ad410b": "e1a44f", "e75303": "ffeb93" diff --git a/public/images/pokemon/variant/exp/back/80-mega.json b/public/images/pokemon/variant/exp/back/80-mega.json index 1506d6c7c6b..e6b135322da 100644 --- a/public/images/pokemon/variant/exp/back/80-mega.json +++ b/public/images/pokemon/variant/exp/back/80-mega.json @@ -1,11 +1,8 @@ { "1": { "783030": "3f2729", - "181818": "181818", "f89090": "885345", "e06878": "5b3332", - "deded5": "deded5", - "f8f8f8": "f8f8f8", "805820": "9f675f", "e8d080": "e0b69d", "505058": "7c5b40", @@ -15,11 +12,8 @@ }, "2": { "783030": "c08746", - "181818": "181818", "f89090": "eebd6a", "e06878": "de9048", - "deded5": "deded5", - "f8f8f8": "f8f8f8", "805820": "69080f", "e8d080": "d16b34", "505058": "192b32", diff --git a/public/images/pokemon/variant/exp/back/800-dawn-wings.json b/public/images/pokemon/variant/exp/back/800-dawn-wings.json index 8f3b2dd7c17..ff35f12beeb 100644 --- a/public/images/pokemon/variant/exp/back/800-dawn-wings.json +++ b/public/images/pokemon/variant/exp/back/800-dawn-wings.json @@ -4,7 +4,6 @@ "72baf3": "e6ded2", "3695ce": "afa191", "c7e5ff": "fbf5ec", - "1f1d35": "1f1d35", "1b2021": "460019", "5a646c": "890425", "293233": "700023", @@ -13,9 +12,7 @@ "617998": "86102d", "74b2d8": "bc1836", "a6bad9": "e5a355", - "000000": "000000", "b2d7f0": "eb422a", - "101010": "101010", "edf0ff": "ffd386" }, "2": { @@ -23,8 +20,6 @@ "72baf3": "970b22", "3695ce": "5b0318", "c7e5ff": "cf2f40", - "1f1d35": "1f1d35", - "1b2021": "1b2021", "5a646c": "602483", "293233": "3e135f", "434b51": "59109c", @@ -32,9 +27,7 @@ "617998": "b95261", "74b2d8": "1a3186", "a6bad9": "e79093", - "000000": "000000", "b2d7f0": "1550a1", - "101010": "101010", "edf0ff": "ffd1d1" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/800-ultra.json b/public/images/pokemon/variant/exp/back/800-ultra.json index 0906a2418fe..0db88bd2a07 100644 --- a/public/images/pokemon/variant/exp/back/800-ultra.json +++ b/public/images/pokemon/variant/exp/back/800-ultra.json @@ -8,8 +8,7 @@ "f8f8d0": "ff7e75", "d0b868": "bc0125", "7d673b": "770031", - "e8e088": "ee2033", - "282828": "282828" + "e8e088": "ee2033" }, "2": { "b0a080": "e552ec", @@ -20,7 +19,6 @@ "f8f8d0": "ff8ae9", "d0b868": "900090", "7d673b": "33003d", - "e8e088": "d10cc7", - "282828": "282828" + "e8e088": "d10cc7" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/800.json b/public/images/pokemon/variant/exp/back/800.json index b63455df5b9..e789115bb1f 100644 --- a/public/images/pokemon/variant/exp/back/800.json +++ b/public/images/pokemon/variant/exp/back/800.json @@ -5,8 +5,7 @@ "fbfbfb": "e8e7ff", "768188": "c8245d", "424a50": "890425", - "b5bbbf": "a266eb", - "080808": "080808" + "b5bbbf": "a266eb" }, "2": { "2b3233": "3e135f", @@ -14,7 +13,6 @@ "fbfbfb": "ffb8c9", "768188": "b13dc8", "424a50": "602483", - "b5bbbf": "f66fdc", - "080808": "080808" + "b5bbbf": "f66fdc" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/802.json b/public/images/pokemon/variant/exp/back/802.json index a432fd6bca3..0b1cdb6399d 100644 --- a/public/images/pokemon/variant/exp/back/802.json +++ b/public/images/pokemon/variant/exp/back/802.json @@ -2,19 +2,16 @@ "0": { "494949": "3a7e5d", "686868": "76bc8f", - "2f2f2f": "084434", - "101010": "101010" + "2f2f2f": "084434" }, "1": { "494949": "2f3079", "686868": "515aad", - "2f2f2f": "17145e", - "101010": "101010" + "2f2f2f": "17145e" }, "2": { "494949": "97123b", "686868": "ce3e63", - "2f2f2f": "5a0423", - "101010": "101010" + "2f2f2f": "5a0423" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/803.json b/public/images/pokemon/variant/exp/back/803.json index 215130ac568..09cd43296d2 100644 --- a/public/images/pokemon/variant/exp/back/803.json +++ b/public/images/pokemon/variant/exp/back/803.json @@ -1,7 +1,6 @@ { "1": { "78757f": "449e93", - "101010": "101010", "ccc0d8": "e3ffec", "98295e": "27579e", "d13d8f": "3492b9", @@ -13,7 +12,6 @@ }, "2": { "78757f": "cd9b85", - "101010": "101010", "ccc0d8": "ffefe0", "98295e": "a12f63", "d13d8f": "d6487a", diff --git a/public/images/pokemon/variant/exp/back/804.json b/public/images/pokemon/variant/exp/back/804.json index b41cb813bda..624c19a9879 100644 --- a/public/images/pokemon/variant/exp/back/804.json +++ b/public/images/pokemon/variant/exp/back/804.json @@ -5,7 +5,6 @@ "b69aef": "359faf", "9d3478": "c74736", "6b3357": "81262d", - "101010": "101010", "ec74d8": "e88354", "583f87": "212149", "987bcc": "22658d", @@ -22,7 +21,6 @@ "b69aef": "68b363", "9d3478": "dcbb94", "6b3357": "7e4e3d", - "101010": "101010", "ec74d8": "fff8cc", "583f87": "103a47", "987bcc": "2d794e", diff --git a/public/images/pokemon/variant/exp/back/808.json b/public/images/pokemon/variant/exp/back/808.json index 8229e2a6550..8a79e72e90b 100644 --- a/public/images/pokemon/variant/exp/back/808.json +++ b/public/images/pokemon/variant/exp/back/808.json @@ -4,10 +4,8 @@ "ab732b": "ce5a6f", "dea220": "ff7c8e", "ffda45": "ffbeae", - "101010": "101010", "3d3534": "2c4048", "59544e": "38585b", - "f9f9f9": "f9f9f9", "67675f": "426e73", "dcdcda": "c2effc", "8a8d7e": "6a8f97", @@ -20,15 +18,11 @@ "ab732b": "2d2931", "dea220": "64486f", "ffda45": "9b6e98", - "101010": "101010", "3d3534": "780000", "59544e": "9e002e", - "f9f9f9": "f9f9f9", "67675f": "ba2b41", "dcdcda": "ffbe6e", "8a8d7e": "d66352", - "b1b5a6": "f49769", - "741012": "741012", - "c2292e": "c2292e" + "b1b5a6": "f49769" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/809.json b/public/images/pokemon/variant/exp/back/809.json index 96cdbc3d9c3..1f597aa305e 100644 --- a/public/images/pokemon/variant/exp/back/809.json +++ b/public/images/pokemon/variant/exp/back/809.json @@ -4,7 +4,6 @@ "211d1d": "232a2b", "59544e": "38585b", "814f23": "85374d", - "101010": "101010", "ab732b": "ce5a6f", "67675f": "426e73", "ffda45": "ffbeae", @@ -12,23 +11,19 @@ "dea220": "ff7c8e", "b1b5a6": "98d6f0", "dcdcda": "c2effc", - "c2292e": "ffce6b", - "f9f9f9": "f9f9f9" + "c2292e": "ffce6b" }, "2": { "3d3534": "780000", "211d1d": "570000", "59544e": "9e002e", "814f23": "101010", - "101010": "101010", "ab732b": "2d2931", "67675f": "ba2b41", "ffda45": "9b6e98", "8a8d7e": "d66352", "dea220": "64486f", "b1b5a6": "f49769", - "dcdcda": "ffbe6e", - "c2292e": "c2292e", - "f9f9f9": "f9f9f9" + "dcdcda": "ffbe6e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/816.json b/public/images/pokemon/variant/exp/back/816.json index 8153a53decd..2db6adf77dc 100644 --- a/public/images/pokemon/variant/exp/back/816.json +++ b/public/images/pokemon/variant/exp/back/816.json @@ -7,8 +7,7 @@ "425493": "7d292a", "5091c0": "b5464b", "6ab6d2": "e66371", - "add7e7": "e6828e", - "101010": "101010" + "add7e7": "e6828e" }, "2": { "1f2d63": "6e1a4c", @@ -18,7 +17,6 @@ "425493": "813535", "5091c0": "dea26c", "6ab6d2": "ffeeb8", - "add7e7": "fffbec", - "101010": "101010" + "add7e7": "fffbec" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/817.json b/public/images/pokemon/variant/exp/back/817.json index 7c74f55eef9..818b677a356 100644 --- a/public/images/pokemon/variant/exp/back/817.json +++ b/public/images/pokemon/variant/exp/back/817.json @@ -8,12 +8,10 @@ "6c4499": "a1572f", "70cce0": "eb8577", "a278c7": "dd8a4f", - "101010": "101010", "3d6424": "83403e", "6ba01b": "a36d5d", "8cd222": "d99f8d", - "ccc7cd": "c7c1bd", - "fefefe": "fefefe" + "ccc7cd": "c7c1bd" }, "2": { "183569": "731f4e", @@ -24,11 +22,9 @@ "6c4499": "2c5aa8", "70cce0": "ffe5a3", "a278c7": "459dca", - "101010": "101010", "3d6424": "731317", "6ba01b": "ba2c22", "8cd222": "d85633", - "ccc7cd": "becee1", - "fefefe": "fefefe" + "ccc7cd": "becee1" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/818.json b/public/images/pokemon/variant/exp/back/818.json index 5b28c8a556c..8d0c77966e9 100644 --- a/public/images/pokemon/variant/exp/back/818.json +++ b/public/images/pokemon/variant/exp/back/818.json @@ -7,8 +7,6 @@ "e9cd5f": "614432", "549bc3": "a55846", "9cd2e2": "e1926f", - "101010": "101010", - "fdfdfd": "fdfdfd", "ff7c00": "5885a2", "31302f": "251e1c", "646565": "4c4643", @@ -23,8 +21,6 @@ "e9cd5f": "4484c3", "549bc3": "e38544", "9cd2e2": "ffcd57", - "101010": "101010", - "fdfdfd": "fdfdfd", "ff7c00": "a13047", "31302f": "571342", "646565": "be3a7d", diff --git a/public/images/pokemon/variant/exp/back/821.json b/public/images/pokemon/variant/exp/back/821.json index 6101b9d4261..dcbdaf08804 100644 --- a/public/images/pokemon/variant/exp/back/821.json +++ b/public/images/pokemon/variant/exp/back/821.json @@ -1,6 +1,5 @@ { "1": { - "080808": "080808", "201a12": "4b2a5e", "505038": "bc7dc3", "272b47": "6a445c", @@ -13,7 +12,6 @@ "ac9534": "be919e" }, "2": { - "080808": "080808", "201a12": "a46828", "505038": "eaae36", "272b47": "612a0e", diff --git a/public/images/pokemon/variant/exp/back/822.json b/public/images/pokemon/variant/exp/back/822.json index b9307b38f8a..d65996b424d 100644 --- a/public/images/pokemon/variant/exp/back/822.json +++ b/public/images/pokemon/variant/exp/back/822.json @@ -1,29 +1,21 @@ { "1": { "403524": "ad6f83", - "201a12": "201a12", "505038": "e7a6c9", "252d49": "c8658a", - "080808": "080808", "2f4577": "f4a0b9", "426eb2": "ffdeeb", "95a1b6": "57445a", - "e21d22": "e21d22", - "f4f4f4": "f4f4f4", "659aba": "fff6f8", "444f59": "2e262f" }, "2": { "403524": "b95212", - "201a12": "201a12", "505038": "dc7c16", "252d49": "91591e", - "080808": "080808", "2f4577": "eaae36", "426eb2": "edd472", "95a1b6": "743419", - "e21d22": "e21d22", - "f4f4f4": "f4f4f4", "659aba": "fff1b9", "444f59": "541705" } diff --git a/public/images/pokemon/variant/exp/back/823.json b/public/images/pokemon/variant/exp/back/823.json index 50b332400a2..605c1cd8c1b 100644 --- a/public/images/pokemon/variant/exp/back/823.json +++ b/public/images/pokemon/variant/exp/back/823.json @@ -1,27 +1,22 @@ { "1": { - "010101": "010101", "251d4e": "6a445c", "434475": "f4a0b9", "303360": "ad6f83", "646ca8": "ffdeeb", "4d5488": "e7a6c9", "e80000": "df7b10", - "ffa8a8": "ffa8a8", "4e4150": "57445a", - "2e262f": "2e262f", "18173d": "4b2a5e", "2c2b58": "845195", "3e3d6d": "bc7dc3" }, "2": { - "010101": "010101", "251d4e": "612a0e", "434475": "dc7c16", "303360": "b95212", "646ca8": "edd472", "4d5488": "eaae36", - "e80000": "e80000", "ffa8a8": "ff4a4a", "4e4150": "743419", "2e262f": "541705", diff --git a/public/images/pokemon/variant/exp/back/829.json b/public/images/pokemon/variant/exp/back/829.json index 25f91b83ab6..4fa2d435fb0 100644 --- a/public/images/pokemon/variant/exp/back/829.json +++ b/public/images/pokemon/variant/exp/back/829.json @@ -4,8 +4,6 @@ "e09b24": "1da3c2", "f4d626": "4aebe3", "fef54b": "84fff5", - "fef1a7": "fef1a7", - "101010": "101010", "841d1a": "3b0122", "cf301f": "601335", "fb472f": "7b2640", @@ -18,7 +16,6 @@ "f4d626": "bc77ff", "fef54b": "e8aaff", "fef1a7": "f6e6ff", - "101010": "101010", "841d1a": "14103b", "cf301f": "24244b", "fb472f": "2f335d", diff --git a/public/images/pokemon/variant/exp/back/830.json b/public/images/pokemon/variant/exp/back/830.json index 90af6e47db5..5bf8a112cbe 100644 --- a/public/images/pokemon/variant/exp/back/830.json +++ b/public/images/pokemon/variant/exp/back/830.json @@ -6,8 +6,7 @@ "e8d5c6": "a2d2e7", "bab743": "c38ec6", "5c6738": "6f3e7b", - "8a9247": "9d6aa5", - "101010": "101010" + "8a9247": "9d6aa5" }, "2": { "c2aba0": "9471ae", @@ -16,7 +15,6 @@ "e8d5c6": "d5aee9", "bab743": "6a9cbb", "5c6738": "133049", - "8a9247": "3c627e", - "101010": "101010" + "8a9247": "3c627e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/835.json b/public/images/pokemon/variant/exp/back/835.json index 0e4b99223d7..0c68b758f61 100644 --- a/public/images/pokemon/variant/exp/back/835.json +++ b/public/images/pokemon/variant/exp/back/835.json @@ -1,7 +1,6 @@ { "1": { "844840": "051514", - "101010": "101010", "bd8d62": "e0bb76", "a26642": "aa8e5a", "d1cccb": "e7c78d", @@ -15,11 +14,9 @@ }, "2": { "844840": "313e38", - "101010": "101010", "bd8d62": "509468", "a26642": "3d5d59", "d1cccb": "a0bcaa", - "fbfbfb": "fbfbfb", "837a76": "43554d", "9a6229": "2b2042", "f7da11": "776baf", diff --git a/public/images/pokemon/variant/exp/back/836.json b/public/images/pokemon/variant/exp/back/836.json index c12f29903b3..9d71f85d604 100644 --- a/public/images/pokemon/variant/exp/back/836.json +++ b/public/images/pokemon/variant/exp/back/836.json @@ -1,12 +1,9 @@ { "1": { - "a06d21": "a06d21", - "0d0d0d": "0d0d0d", "fad833": "e0bb76", "c8ad25": "aa8e5a", "495043": "28797b", "cfc7c6": "cbcdb4", - "8c7b7a": "8c7b7a", "dec12e": "e0bb76", "f2efef": "fdffe1", "fff665": "e7c78d", @@ -15,7 +12,6 @@ }, "2": { "a06d21": "213d3a", - "0d0d0d": "0d0d0d", "fad833": "509468", "c8ad25": "3d5d59", "495043": "3c2e5b", diff --git a/public/images/pokemon/variant/exp/back/850.json b/public/images/pokemon/variant/exp/back/850.json index b5df39e115c..2f836819132 100644 --- a/public/images/pokemon/variant/exp/back/850.json +++ b/public/images/pokemon/variant/exp/back/850.json @@ -8,7 +8,6 @@ "681607": "065b58", "42221c": "36203c", "2f1610": "24122b", - "101010": "101010", "be5409": "25a96a", "f89e08": "a3ffb9" }, @@ -20,9 +19,6 @@ "804a3e": "7866cb", "681607": "4a1036", "42221c": "222957", - "2f1610": "121439", - "101010": "101010", - "be5409": "be5409", - "f89e08": "f89e08" + "2f1610": "121439" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/851.json b/public/images/pokemon/variant/exp/back/851.json index 9fca14e5e14..7a8cb9718c7 100644 --- a/public/images/pokemon/variant/exp/back/851.json +++ b/public/images/pokemon/variant/exp/back/851.json @@ -12,11 +12,9 @@ "42221c": "36203c", "2f1610": "24122b", "681607": "024f2d", - "101010": "101010", "941528": "005f35" }, "2": { - "be5409": "be5409", "f89e08": "f36d73", "ffd901": "ffc143", "5b2f26": "36426c", @@ -27,8 +25,6 @@ "ff5839": "ff6970", "42221c": "222957", "2f1610": "121439", - "681607": "6e0442", - "101010": "101010", - "941528": "941528" + "681607": "6e0442" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/854.json b/public/images/pokemon/variant/exp/back/854.json index e438e91cb2d..e5edbe9a044 100644 --- a/public/images/pokemon/variant/exp/back/854.json +++ b/public/images/pokemon/variant/exp/back/854.json @@ -9,7 +9,6 @@ "72cfcc": "7c2039", "af63c4": "ffffeb", "9aedea": "b74f6c", - "101010": "101010", "c3bfe0": "f2bbaa" }, "2": { @@ -22,7 +21,6 @@ "72cfcc": "7c7270", "af63c4": "82b183", "9aedea": "c9c0b9", - "101010": "101010", "c3bfe0": "524c4e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/855.json b/public/images/pokemon/variant/exp/back/855.json index 0b9ad0a2b86..9839eb600c6 100644 --- a/public/images/pokemon/variant/exp/back/855.json +++ b/public/images/pokemon/variant/exp/back/855.json @@ -8,7 +8,6 @@ "4bb2af": "531d2b", "9aedea": "b74f6c", "c3bfe0": "c06d66", - "101010": "101010", "f5f9fa": "f2bbaa", "733a87": "ef9e5c", "af63c4": "ffffeb", @@ -23,7 +22,6 @@ "4bb2af": "333231", "9aedea": "fdfdfd", "c3bfe0": "3e383a", - "101010": "101010", "f5f9fa": "524c4e", "733a87": "538c61", "af63c4": "82b183", diff --git a/public/images/pokemon/variant/exp/back/856.json b/public/images/pokemon/variant/exp/back/856.json index 3d245b74324..bfc575d89d7 100644 --- a/public/images/pokemon/variant/exp/back/856.json +++ b/public/images/pokemon/variant/exp/back/856.json @@ -2,7 +2,6 @@ "1": { "727ab1": "1d4a3b", "c8e9ff": "5ec183", - "181818": "181818", "acbfdf": "3b9665", "bb6a99": "043232", "f9d5da": "298675", @@ -13,7 +12,6 @@ "2": { "727ab1": "6b0124", "c8e9ff": "cb304d", - "181818": "181818", "acbfdf": "a11437", "bb6a99": "30163d", "f9d5da": "523f73", diff --git a/public/images/pokemon/variant/exp/back/858.json b/public/images/pokemon/variant/exp/back/858.json index 8bdfcf82426..8b37e152f56 100644 --- a/public/images/pokemon/variant/exp/back/858.json +++ b/public/images/pokemon/variant/exp/back/858.json @@ -2,7 +2,6 @@ "1": { "acbfdf": "3b9665", "948fc2": "287b59", - "101010": "101010", "c8e9ff": "5ec183", "727ab1": "1d4a3b", "d9cedb": "dec1c2", @@ -16,7 +15,6 @@ "2": { "acbfdf": "a11437", "948fc2": "8c0e32", - "101010": "101010", "c8e9ff": "cb304d", "727ab1": "6b0124", "d9cedb": "e4bcde", diff --git a/public/images/pokemon/variant/exp/back/859.json b/public/images/pokemon/variant/exp/back/859.json index 16dcecb181e..a3d7e501811 100644 --- a/public/images/pokemon/variant/exp/back/859.json +++ b/public/images/pokemon/variant/exp/back/859.json @@ -4,7 +4,6 @@ "8d3856": "376b2d", "f589c2": "9aba6d", "ffbff5": "dbe797", - "101010": "101010", "45366d": "5b1d15", "735aac": "a4332d", "947cd8": "cc5836" @@ -14,7 +13,6 @@ "8d3856": "30082d", "f589c2": "6b2b3e", "ffbff5": "904f55", - "101010": "101010", "45366d": "794935", "735aac": "f0c475", "947cd8": "f9e9a4" diff --git a/public/images/pokemon/variant/exp/back/860.json b/public/images/pokemon/variant/exp/back/860.json index fa3ee7f8bc4..939f40b9868 100644 --- a/public/images/pokemon/variant/exp/back/860.json +++ b/public/images/pokemon/variant/exp/back/860.json @@ -6,9 +6,7 @@ "352954": "3b1528", "8872b6": "c45949", "5d4694": "8b332d", - "101010": "101010", "433568": "5a1d27", - "000000": "000000", "409555": "244849", "356a3c": "162a35", "47be62": "366c59" @@ -20,9 +18,7 @@ "352954": "a26458", "8872b6": "f6e8b8", "5d4694": "dfc784", - "101010": "101010", "433568": "c98e63", - "000000": "000000", "409555": "272664", "356a3c": "090d50", "47be62": "3f386f" diff --git a/public/images/pokemon/variant/exp/back/861.json b/public/images/pokemon/variant/exp/back/861.json index acdc2e3c502..cec30107ea8 100644 --- a/public/images/pokemon/variant/exp/back/861.json +++ b/public/images/pokemon/variant/exp/back/861.json @@ -1,7 +1,6 @@ { "1": { "356a3c": "162a35", - "101010": "101010", "47be62": "366c59", "409555": "244849", "433568": "5a1d27", @@ -11,7 +10,6 @@ }, "2": { "356a3c": "090d50", - "101010": "101010", "47be62": "3f386f", "409555": "272664", "433568": "c98e63", diff --git a/public/images/pokemon/variant/exp/back/862.json b/public/images/pokemon/variant/exp/back/862.json index d7d0dd5b874..1a003f25573 100644 --- a/public/images/pokemon/variant/exp/back/862.json +++ b/public/images/pokemon/variant/exp/back/862.json @@ -1,7 +1,5 @@ { "1": { - "010101": "010101", - "1b2627": "1b2627", "474749": "156a66", "303034": "094448", "6f7071": "01473a", @@ -10,11 +8,9 @@ "f5f5f6": "f5ffea", "949496": "1c8155", "9b4f69": "d414dd", - "df84ad": "ff69fa", - "fcfcfc": "fcfcfc" + "df84ad": "ff69fa" }, "2": { - "010101": "010101", "1b2627": "180c46", "474749": "8655e1", "303034": "5a3eb9", @@ -24,7 +20,6 @@ "f5f5f6": "342d4c", "949496": "302e89", "9b4f69": "0099ce", - "df84ad": "54f1ff", - "fcfcfc": "fcfcfc" + "df84ad": "54f1ff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/863.json b/public/images/pokemon/variant/exp/back/863.json index ba6b2a10477..c100f2e1b4c 100644 --- a/public/images/pokemon/variant/exp/back/863.json +++ b/public/images/pokemon/variant/exp/back/863.json @@ -2,29 +2,22 @@ "1": { "66716c": "59879a", "bfc1bf": "b4e0d3", - "010101": "010101", "8f9c95": "85c1c0", - "181a1d": "181a1d", "272d2e": "342b49", "3d4547": "4e385a", "84726f": "9591a7", "5b4e4d": "4e455c", - "ada09a": "d5d0dd", - "b3b6b3": "b3b6b3", - "a4a5a4": "a4a5a4" + "ada09a": "d5d0dd" }, "2": { "66716c": "331a37", "bfc1bf": "92264b", - "010101": "010101", "8f9c95": "6d0b3c", "181a1d": "0f2127", "272d2e": "234a56", "3d4547": "417778", "84726f": "27293c", "5b4e4d": "141626", - "ada09a": "4c4d62", - "b3b6b3": "b3b6b3", - "a4a5a4": "a4a5a4" + "ada09a": "4c4d62" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/864.json b/public/images/pokemon/variant/exp/back/864.json index a9d6199388e..eeefe5b0166 100644 --- a/public/images/pokemon/variant/exp/back/864.json +++ b/public/images/pokemon/variant/exp/back/864.json @@ -8,8 +8,7 @@ "cbc2d1": "d7d2f6", "7f806a": "4d8894", "fbf2ff": "d3ffff", - "c6bbcb": "a7e6e5", - "101010": "101010" + "c6bbcb": "a7e6e5" }, "2": { "bcb9be": "055946", @@ -20,7 +19,6 @@ "cbc2d1": "567f83", "7f806a": "4b1f28", "fbf2ff": "874059", - "c6bbcb": "773050", - "101010": "101010" + "c6bbcb": "773050" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/867.json b/public/images/pokemon/variant/exp/back/867.json index 124ea0d4f66..edfad6a836d 100644 --- a/public/images/pokemon/variant/exp/back/867.json +++ b/public/images/pokemon/variant/exp/back/867.json @@ -1,7 +1,6 @@ { "1": { "393941": "69d9bf", - "101010": "101010", "927e8d": "a46361", "d9d0d1": "d6b8a0", "c5b9bb": "c69981", @@ -10,7 +9,6 @@ }, "2": { "393941": "a4222c", - "101010": "101010", "927e8d": "1f6455", "d9d0d1": "4fb66a", "c5b9bb": "298a61", diff --git a/public/images/pokemon/variant/exp/back/872.json b/public/images/pokemon/variant/exp/back/872.json index c7b73b39012..cac7ab2c540 100644 --- a/public/images/pokemon/variant/exp/back/872.json +++ b/public/images/pokemon/variant/exp/back/872.json @@ -2,9 +2,7 @@ "0": { "7b8b9b": "345f5c", "d8e9f0": "b7f1d6", - "f5fdff": "f5fdff", "acc3cc": "669a8c", - "101010": "101010", "695e77": "275e43", "edeae0": "a6d6a6", "b3a7c2": "73a878" @@ -12,9 +10,7 @@ "1": { "7b8b9b": "22504c", "d8e9f0": "b6e7df", - "f5fdff": "f5fdff", "acc3cc": "548e8f", - "101010": "101010", "695e77": "354b63", "edeae0": "c1ebf3", "b3a7c2": "89a9be" @@ -22,9 +18,7 @@ "2": { "7b8b9b": "5a3993", "d8e9f0": "d5c3ff", - "f5fdff": "f5fdff", "acc3cc": "a66ac2", - "101010": "101010", "695e77": "5f3465", "edeae0": "e5a2da", "b3a7c2": "a060a0" diff --git a/public/images/pokemon/variant/exp/back/873.json b/public/images/pokemon/variant/exp/back/873.json index b4856a86659..c746623d83d 100644 --- a/public/images/pokemon/variant/exp/back/873.json +++ b/public/images/pokemon/variant/exp/back/873.json @@ -4,23 +4,20 @@ "747489": "547b58", "e7e0e6": "a6d6a6", "8f8f9f": "27532f", - "fdfdfd": "b7f1d7", - "101010": "101010" + "fdfdfd": "b7f1d7" }, "1": { "b3b4bd": "92a9b8", "747489": "556b7d", "e7e0e6": "b6e7df", "8f8f9f": "415366", - "fdfdfd": "eefffb", - "101010": "101010" + "fdfdfd": "eefffb" }, "2": { "b3b4bd": "864c86", "747489": "512d52", "e7e0e6": "d78dcb", "8f8f9f": "5f3465", - "fdfdfd": "d5c3ff", - "101010": "101010" + "fdfdfd": "d5c3ff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/876-female.json b/public/images/pokemon/variant/exp/back/876-female.json index 87ee8cb6d13..c33a457c3c0 100644 --- a/public/images/pokemon/variant/exp/back/876-female.json +++ b/public/images/pokemon/variant/exp/back/876-female.json @@ -4,7 +4,6 @@ "7d7493": "5a3736", "2f2642": "2c1419", "564c6c": "4a282a", - "101010": "101010", "6c64a6": "b72e3e", "4d447e": "8c1932", "3d3055": "64102c", @@ -17,7 +16,6 @@ "7d7493": "ecb2c5", "2f2642": "444a8e", "564c6c": "d58da4", - "101010": "101010", "6c64a6": "78aae5", "4d447e": "4c5db1", "3d3055": "4c5db1", diff --git a/public/images/pokemon/variant/exp/back/876.json b/public/images/pokemon/variant/exp/back/876.json index af4f5492efe..024747b2e0b 100644 --- a/public/images/pokemon/variant/exp/back/876.json +++ b/public/images/pokemon/variant/exp/back/876.json @@ -3,7 +3,6 @@ "2e2641": "2c1419", "7d7493": "5a3736", "564c6c": "4a282a", - "101010": "101010", "2f2642": "2c1419", "6c64a6": "b72e3e", "4d447e": "8c1932", @@ -16,7 +15,6 @@ "2e2641": "314c7c", "7d7493": "a3c5e8", "564c6c": "78a5d4", - "101010": "101010", "2f2642": "7a316c", "6c64a6": "f589bb", "4d447e": "d268a7", diff --git a/public/images/pokemon/variant/exp/back/877-hangry.json b/public/images/pokemon/variant/exp/back/877-hangry.json index a4e19c34f67..4ecb7181777 100644 --- a/public/images/pokemon/variant/exp/back/877-hangry.json +++ b/public/images/pokemon/variant/exp/back/877-hangry.json @@ -1,7 +1,6 @@ { "0": { "383634": "3a1010", - "101010": "101010", "4f4b47": "952222", "6c6c6c": "540606", "6b3d96": "967f3d", @@ -9,8 +8,6 @@ "9958ce": "cebb58" }, "1": { - "383634": "383634", - "101010": "101010", "4f4b47": "3a3a3a", "6c6c6c": "212020", "6b3d96": "cb6333", @@ -18,10 +15,6 @@ "9958ce": "cb6333" }, "2": { - "383634": "383634", - "101010": "101010", - "4f4b47": "4f4b47", - "6c6c6c": "6c6c6c", "6b3d96": "568351", "493061": "306135", "9958ce": "7fba7f" diff --git a/public/images/pokemon/variant/exp/back/877.json b/public/images/pokemon/variant/exp/back/877.json index 2a26b83b98f..7bf58e01ba1 100644 --- a/public/images/pokemon/variant/exp/back/877.json +++ b/public/images/pokemon/variant/exp/back/877.json @@ -1,19 +1,13 @@ { "0": { "8a5e48": "383634", - "101010": "101010", - "383634": "383634", "af7044": "4f4b47", - "6c6c6c": "6c6c6c", - "4f4b47": "4f4b47", "cf9c66": "6c6c6c", "d3b351": "8851d3", "f4f489": "b689f4" }, "1": { "8a5e48": "2c439d", - "101010": "101010", - "383634": "383634", "af7044": "86aaff", "6c6c6c": "5c5e6d", "4f4b47": "58666d", @@ -23,11 +17,7 @@ }, "2": { "8a5e48": "4f8a48", - "101010": "101010", - "383634": "383634", "af7044": "71cf66", - "6c6c6c": "6c6c6c", - "4f4b47": "4f4b47", "cf9c66": "a1f38b", "d3b351": "b6b6b6", "f4f489": "ffffff" diff --git a/public/images/pokemon/variant/exp/back/880.json b/public/images/pokemon/variant/exp/back/880.json index 1db9d4f60a3..7470434ac3b 100644 --- a/public/images/pokemon/variant/exp/back/880.json +++ b/public/images/pokemon/variant/exp/back/880.json @@ -1,7 +1,6 @@ { "1": { "8f261b": "1b1829", - "101010": "101010", "ff8d9f": "6a98c4", "ed4e76": "312f47", "975e17": "5b0610", @@ -16,8 +15,6 @@ "025c43": "26253e" }, "2": { - "8f261b": "8f261b", - "101010": "101010", "ff8d9f": "e28854", "ed4e76": "ca5939", "975e17": "211b3d", diff --git a/public/images/pokemon/variant/exp/back/881.json b/public/images/pokemon/variant/exp/back/881.json index 3efad4efe60..580250907bc 100644 --- a/public/images/pokemon/variant/exp/back/881.json +++ b/public/images/pokemon/variant/exp/back/881.json @@ -4,7 +4,6 @@ "975e17": "5b0610", "ffff84": "ee8563", "ead900": "c6362b", - "101010": "101010", "2abbfc": "ceb16f", "09354d": "271014", "9ab8ba": "cea5b9", @@ -24,9 +23,7 @@ "975e17": "211b3d", "ffff84": "dceeeb", "ead900": "636287", - "101010": "101010", "2abbfc": "26c248", - "09354d": "09354d", "9ab8ba": "a3c465", "edf3f2": "fcffe4", "5c7996": "50a751", diff --git a/public/images/pokemon/variant/exp/back/882.json b/public/images/pokemon/variant/exp/back/882.json index bfaf844e6ed..27028180ff4 100644 --- a/public/images/pokemon/variant/exp/back/882.json +++ b/public/images/pokemon/variant/exp/back/882.json @@ -3,7 +3,6 @@ "434c63": "771922", "83bbed": "eaa561", "777ebd": "cc6235", - "101010": "101010", "003319": "1a182b", "005e44": "564e6e", "8f261b": "1d2238", @@ -19,7 +18,6 @@ "434c63": "450940", "83bbed": "8c1f45", "777ebd": "6c1046", - "101010": "101010", "003319": "cc7d3b", "005e44": "f1b45f", "8f261b": "215b68", diff --git a/public/images/pokemon/variant/exp/back/883.json b/public/images/pokemon/variant/exp/back/883.json index 3fb71aaebc6..c28f2eb7f2f 100644 --- a/public/images/pokemon/variant/exp/back/883.json +++ b/public/images/pokemon/variant/exp/back/883.json @@ -1,10 +1,8 @@ { "1": { "434c63": "3a151c", - "ffffff": "ffffff", "83bbed": "eaa561", "172459": "771922", - "101010": "101010", "777ebd": "cc6235", "5c7996": "8c6060", "9ab8ba": "cea5b9", @@ -16,10 +14,8 @@ }, "2": { "434c63": "450940", - "ffffff": "ffffff", "83bbed": "8c1f45", "172459": "320432", - "101010": "101010", "777ebd": "6c1046", "5c7996": "50a751", "9ab8ba": "a3c465", diff --git a/public/images/pokemon/variant/exp/back/884.json b/public/images/pokemon/variant/exp/back/884.json index 4cb8efc516b..e71bc735fdf 100644 --- a/public/images/pokemon/variant/exp/back/884.json +++ b/public/images/pokemon/variant/exp/back/884.json @@ -2,7 +2,6 @@ "1": { "68353c": "871e14", "b96a6a": "cd452b", - "151515": "151515", "a893a8": "a77c69", "e4e5f1": "f8e0cf", "837080": "5d392f", @@ -16,7 +15,6 @@ "2": { "68353c": "062449", "b96a6a": "2077a6", - "151515": "151515", "a893a8": "32234e", "e4e5f1": "65549c", "837080": "1a0e34", diff --git a/public/images/pokemon/variant/exp/back/885.json b/public/images/pokemon/variant/exp/back/885.json index a03ef2a9a01..ba01496a553 100644 --- a/public/images/pokemon/variant/exp/back/885.json +++ b/public/images/pokemon/variant/exp/back/885.json @@ -2,7 +2,6 @@ "0": { "3a583c": "133056", "fa5494": "efa93f", - "101010": "101010", "cc4066": "ac7508", "5f875a": "2f6c89", "476b48": "20486e", @@ -15,7 +14,6 @@ "1": { "3a583c": "2f040d", "fa5494": "4590da", - "101010": "101010", "cc4066": "244f9f", "5f875a": "7d1f2c", "476b48": "2f040d", @@ -28,7 +26,6 @@ "2": { "3a583c": "1f0c2c", "fa5494": "68c7c4", - "101010": "101010", "cc4066": "2a8286", "5f875a": "3c2750", "476b48": "231234", diff --git a/public/images/pokemon/variant/exp/back/886.json b/public/images/pokemon/variant/exp/back/886.json index 9b90d92a77a..3cd9a1fcfe3 100644 --- a/public/images/pokemon/variant/exp/back/886.json +++ b/public/images/pokemon/variant/exp/back/886.json @@ -1,19 +1,16 @@ { "0": { "444e62": "2d365a", - "101010": "101010", "addcbc": "6accd6", "2c323f": "192250", "5f875a": "2f6c89", "566f89": "465272", "fa5494": "efa93f", "5b878c": "4c90a6", - "7fb3b1": "78c3cb", - "d5fffb": "d5fffb" + "7fb3b1": "78c3cb" }, "1": { "444e62": "4a1621", - "101010": "101010", "addcbc": "da6151", "2c323f": "2e080d", "5f875a": "6b242e", @@ -25,7 +22,6 @@ }, "2": { "444e62": "231b45", - "101010": "101010", "addcbc": "927fa1", "2c323f": "251b31", "5f875a": "3c2750", diff --git a/public/images/pokemon/variant/exp/back/887.json b/public/images/pokemon/variant/exp/back/887.json index 46e10fbf747..939363027b1 100644 --- a/public/images/pokemon/variant/exp/back/887.json +++ b/public/images/pokemon/variant/exp/back/887.json @@ -1,6 +1,5 @@ { "0": { - "101010": "101010", "2c323f": "192250", "566f89": "46557b", "444e62": "2c3867", @@ -15,7 +14,6 @@ "48a9b0": "479bb6" }, "1": { - "101010": "101010", "2c323f": "2e080d", "566f89": "6c273d", "444e62": "4a1621", @@ -30,9 +28,7 @@ "48a9b0": "8a212f" }, "2": { - "101010": "101010", "2c323f": "1b163f", - "566f89": "566f89", "444e62": "332a59", "cc4066": "2a666b", "fa5494": "68c7c4", diff --git a/public/images/pokemon/variant/exp/back/888-crowned.json b/public/images/pokemon/variant/exp/back/888-crowned.json index e9fdeccc8f5..74c2ae5645e 100644 --- a/public/images/pokemon/variant/exp/back/888-crowned.json +++ b/public/images/pokemon/variant/exp/back/888-crowned.json @@ -2,45 +2,31 @@ "1": { "8f4e2f": "2f4567", "d79a53": "5a829b", - "101010": "101010", - "111111": "111111", "f2db8a": "a1c9cd", "3471b4": "b74323", "2d4377": "5c1a1d", "4999da": "ec813b", "be3c45": "224d42", "9d6862": "a85f49", - "ffffff": "ffffff", "f45353": "448b48", "d3a79a": "da9772", "fae2c0": "fff8cd", "93262f": "0d2729", - "fff8a9": "c6e5e3", - "454754": "454754", - "121212": "121212", - "3f3736": "3f3736", - "131313": "131313" + "fff8a9": "c6e5e3" }, "2": { "8f4e2f": "692e47", "d79a53": "964c5c", - "101010": "101010", - "111111": "111111", "f2db8a": "c4826b", "3471b4": "9fa7d0", "2d4377": "615c7e", "4999da": "e6ecff", "be3c45": "6c1d59", "9d6862": "1c2238", - "ffffff": "ffffff", "f45353": "902d57", "d3a79a": "243149", "fae2c0": "3d5b72", "93262f": "431042", - "fff8a9": "e5b792", - "454754": "454754", - "121212": "121212", - "3f3736": "3f3736", - "131313": "131313" + "fff8a9": "e5b792" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/888.json b/public/images/pokemon/variant/exp/back/888.json index 84bab51307e..734867645af 100644 --- a/public/images/pokemon/variant/exp/back/888.json +++ b/public/images/pokemon/variant/exp/back/888.json @@ -3,7 +3,6 @@ "2d4377": "5c1a1d", "4999da": "ec813b", "3471b4": "b74323", - "080808": "080808", "93262f": "0d2729", "be3c45": "224d42", "f45353": "448b48", @@ -16,7 +15,6 @@ "2d4377": "615c7e", "4999da": "e6ecff", "3471b4": "9fa7d0", - "080808": "080808", "93262f": "431042", "be3c45": "6c1d59", "f45353": "902d57", diff --git a/public/images/pokemon/variant/exp/back/889-crowned.json b/public/images/pokemon/variant/exp/back/889-crowned.json index cd69c495fff..963684b7306 100644 --- a/public/images/pokemon/variant/exp/back/889-crowned.json +++ b/public/images/pokemon/variant/exp/back/889-crowned.json @@ -1,7 +1,6 @@ { "1": { "2d2f7b": "102c2c", - "080808": "080808", "396dce": "70a757", "2d48a8": "3c6959", "8f4e2f": "2f4567", @@ -17,7 +16,6 @@ }, "2": { "2d2f7b": "244e61", - "080808": "080808", "396dce": "6fc7c1", "2d48a8": "4797a4", "8f4e2f": "692e47", diff --git a/public/images/pokemon/variant/exp/back/889.json b/public/images/pokemon/variant/exp/back/889.json index 8d1334c6172..6d464c3bba8 100644 --- a/public/images/pokemon/variant/exp/back/889.json +++ b/public/images/pokemon/variant/exp/back/889.json @@ -4,7 +4,6 @@ "2d2f7b": "102c2c", "2d48a8": "3c6959", "f2db8a": "a1c9cd", - "080808": "080808", "731a27": "1c163d", "eb363a": "614378", "ae2836": "422b61", @@ -17,7 +16,6 @@ "2d2f7b": "244e61", "2d48a8": "4797a4", "f2db8a": "c4826b", - "080808": "080808", "731a27": "615c7e", "eb363a": "e6ecff", "ae2836": "9fa7d0", diff --git a/public/images/pokemon/variant/exp/back/890.json b/public/images/pokemon/variant/exp/back/890.json index 7c645c633f6..baf741074bc 100644 --- a/public/images/pokemon/variant/exp/back/890.json +++ b/public/images/pokemon/variant/exp/back/890.json @@ -8,11 +8,8 @@ "fb2553": "8cf9ff", "675cc5": "406d89", "b21833": "21779e", - "010101": "010101", "f46d70": "8ef2ff", "f18cd5": "ff7d54", - "fefefe": "fefefe", - "ffbcbc": "ffbcbc", "e22dbc": "ee535a" }, "2": { @@ -24,11 +21,8 @@ "fb2553": "eba32d", "675cc5": "e0ecff", "b21833": "bd5f10", - "010101": "010101", "f46d70": "f1bd4b", "f18cd5": "73e5dc", - "fefefe": "fefefe", - "ffbcbc": "ffbcbc", "e22dbc": "298fb9" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/891.json b/public/images/pokemon/variant/exp/back/891.json index 6a11dfad107..f20000f7a63 100644 --- a/public/images/pokemon/variant/exp/back/891.json +++ b/public/images/pokemon/variant/exp/back/891.json @@ -1,18 +1,13 @@ { "0": { "717674": "6d5755", - "101010": "101010", "d8d1cb": "d1c8ba", "b5ada6": "ad9a8a", - "9194a2": "9194a2", - "fbfbfb": "fbfbfb", - "c9cccd": "c9cccd", "393539": "34302f", "655e65": "5c5653" }, "1": { "717674": "263138", - "101010": "101010", "d8d1cb": "6e8b9b", "b5ada6": "475b68", "9194a2": "181b33", @@ -23,7 +18,6 @@ }, "2": { "717674": "56546b", - "101010": "101010", "d8d1cb": "e8e8ff", "b5ada6": "a4a4bc", "9194a2": "7f1c27", diff --git a/public/images/pokemon/variant/exp/back/892-rapid-strike.json b/public/images/pokemon/variant/exp/back/892-rapid-strike.json index faa8e52bffa..b68fb1aba24 100644 --- a/public/images/pokemon/variant/exp/back/892-rapid-strike.json +++ b/public/images/pokemon/variant/exp/back/892-rapid-strike.json @@ -1,13 +1,10 @@ { "0": { "4f4b58": "4a2e27", - "010101": "010101", "6b6574": "725444", "8d8c8e": "957961", "282d26": "25141f", "605f4d": "513b46", - "fcfcfc": "fcfcfc", - "b9b9b9": "b9b9b9", "9e6225": "8b222f", "42473a": "382334", "fffa60": "ff9736", @@ -15,13 +12,10 @@ }, "1": { "4f4b58": "263138", - "010101": "010101", "6b6574": "4c6877", "8d8c8e": "809ba3", "282d26": "181b33", "605f4d": "444f5b", - "fcfcfc": "fcfcfc", - "b9b9b9": "b9b9b9", "9e6225": "272735", "42473a": "2e3549", "fffa60": "616368", @@ -29,7 +23,6 @@ }, "2": { "4f4b58": "56546b", - "010101": "010101", "6b6574": "a4a4bc", "8d8c8e": "e8e8ff", "282d26": "07073f", diff --git a/public/images/pokemon/variant/exp/back/892.json b/public/images/pokemon/variant/exp/back/892.json index 117ecd51bc6..be0f25cec5d 100644 --- a/public/images/pokemon/variant/exp/back/892.json +++ b/public/images/pokemon/variant/exp/back/892.json @@ -2,21 +2,17 @@ "0": { "282d26": "25141f", "605f4d": "513b46", - "010101": "010101", - "b9b9b9": "b9b9b9", "42473a": "382334", "4f4b58": "4a2e27", "6b6574": "725444", "8d8c8e": "957961", "9e6225": "8b222f", "fffa60": "ff9736", - "fcfcfc": "fcfcfc", "d5a926": "b95826" }, "1": { "282d26": "181b33", "605f4d": "444f5b", - "010101": "010101", "b9b9b9": "768187", "42473a": "2e3549", "4f4b58": "263138", @@ -30,7 +26,6 @@ "2": { "282d26": "3d0015", "605f4d": "870e2a", - "010101": "010101", "b9b9b9": "a52139", "42473a": "51081e", "4f4b58": "56546b", diff --git a/public/images/pokemon/variant/exp/back/896.json b/public/images/pokemon/variant/exp/back/896.json index 48c4828ca18..a88dce32430 100644 --- a/public/images/pokemon/variant/exp/back/896.json +++ b/public/images/pokemon/variant/exp/back/896.json @@ -1,6 +1,5 @@ { "0": { - "000000": "000000", "8cacdd": "8f84c9", "bbd2ff": "b9abea", "4679b7": "5952a1", @@ -10,11 +9,9 @@ "eeeef2": "f6ebf6", "cac0cb": "c9c0d4", "83818f": "6f6982", - "6c6271": "68627a", - "ffffff": "ffffff" + "6c6271": "68627a" }, "1": { - "000000": "000000", "8cacdd": "41d5b3", "bbd2ff": "9dffff", "4679b7": "00816c", @@ -24,11 +21,9 @@ "eeeef2": "93bbf1", "cac0cb": "6f8ec1", "83818f": "506698", - "6c6271": "35486b", - "ffffff": "ffffff" + "6c6271": "35486b" }, "2": { - "000000": "000000", "8cacdd": "bc393b", "bbd2ff": "f68c79", "4679b7": "780024", @@ -38,7 +33,6 @@ "eeeef2": "534444", "cac0cb": "3c2c2f", "83818f": "2b1b1e", - "6c6271": "21161a", - "ffffff": "ffffff" + "6c6271": "21161a" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/897.json b/public/images/pokemon/variant/exp/back/897.json index 3f2c4c62b17..0217835accd 100644 --- a/public/images/pokemon/variant/exp/back/897.json +++ b/public/images/pokemon/variant/exp/back/897.json @@ -1,21 +1,15 @@ { "0": { - "3c3c3c": "3c3c3c", "525852": "5d5458", - "101010": "101010", "49478f": "894061", "7c5bcf": "d05a82", "00285c": "632741", - "d9a4e3": "d9a4e3", - "fcfcfc": "fcfcfc", - "755179": "755179", "504e8e": "80447d", "8776e4": "b862b3" }, "1": { "3c3c3c": "622d51", "525852": "904c75", - "101010": "101010", "49478f": "932f27", "7c5bcf": "cc5837", "00285c": "6e1817", @@ -28,7 +22,6 @@ "2": { "3c3c3c": "3a6965", "525852": "5c8a7b", - "101010": "101010", "49478f": "13312b", "7c5bcf": "254a34", "00285c": "0d2222", diff --git a/public/images/pokemon/variant/exp/back/898-ice.json b/public/images/pokemon/variant/exp/back/898-ice.json index a10a4b38293..f7675955d25 100644 --- a/public/images/pokemon/variant/exp/back/898-ice.json +++ b/public/images/pokemon/variant/exp/back/898-ice.json @@ -1,16 +1,12 @@ { "0": { "004037": "00403c", - "000000": "000000", "8cacdd": "8f84c9", "007766": "00776f", "bbd2ff": "b9abea", "00584b": "005852", "4679b7": "5952a1", "525852": "6a5837", - "101010": "101010", - "c7c8cd": "c7c8cd", - "fcfcfc": "fcfcfc", "9e8f87": "ae8b50", "d1c8be": "d7c881", "003071": "2f104f", @@ -20,22 +16,16 @@ "00285c": "3b2948", "cac0cb": "c9c0d4", "83818f": "6f6982", - "6c6271": "68627a", - "3c3c3c": "3c3c3c", - "ffffff": "ffffff" + "6c6271": "68627a" }, "1": { "004037": "00124d", - "000000": "000000", "8cacdd": "41d5b3", "007766": "345ab5", "bbd2ff": "9dffff", "00584b": "183986", "4679b7": "00816c", "525852": "38255f", - "101010": "101010", - "c7c8cd": "c7c8cd", - "fcfcfc": "fcfcfc", "9e8f87": "927ec4", "d1c8be": "ba9ded", "003071": "014837", @@ -45,20 +35,16 @@ "00285c": "8d075a", "cac0cb": "6f8ec1", "83818f": "506698", - "6c6271": "35486b", - "3c3c3c": "3c3c3c", - "ffffff": "ffffff" + "6c6271": "35486b" }, "2": { "004037": "3c1522", - "000000": "000000", "8cacdd": "bc393b", "007766": "88253e", "bbd2ff": "f68c79", "00584b": "601b35", "4679b7": "780024", "525852": "181935", - "101010": "101010", "c7c8cd": "ccc5bb", "fcfcfc": "fefdeb", "9e8f87": "354d8a", @@ -71,7 +57,6 @@ "cac0cb": "3c2c2f", "83818f": "2b1b1e", "6c6271": "21161a", - "3c3c3c": "181935", - "ffffff": "ffffff" + "3c3c3c": "181935" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/898-shadow.json b/public/images/pokemon/variant/exp/back/898-shadow.json index 6b38f34ae6e..0a1856a466e 100644 --- a/public/images/pokemon/variant/exp/back/898-shadow.json +++ b/public/images/pokemon/variant/exp/back/898-shadow.json @@ -4,20 +4,13 @@ "007766": "00776f", "00584b": "005852", "525752": "6a5837", - "101010": "101010", - "c7c8cd": "c7c8cd", - "fbfbfb": "fbfbfb", - "3c3c3c": "3c3c3c", "525852": "5d5458", "9e8f87": "ae8b50", "d1c8be": "d7c881", "49478f": "894061", "7c5bcf": "d05a82", "00285c": "632741", - "d9a4e3": "d9a4e3", - "fcfcfc": "fcfcfc", "00285b": "3b2948", - "755179": "755179", "504e8e": "80447d", "8776e4": "b862b3" }, @@ -26,9 +19,6 @@ "007766": "345ab5", "00584b": "183986", "525752": "38255f", - "101010": "101010", - "c7c8cd": "c7c8cd", - "fbfbfb": "fbfbfb", "3c3c3c": "622d51", "525852": "904c75", "9e8f87": "927ec4", @@ -48,7 +38,6 @@ "007766": "88253e", "00584b": "601b35", "525752": "181935", - "101010": "101010", "c7c8cd": "ccc5bb", "fbfbfb": "fefdeb", "3c3c3c": "3a6965", diff --git a/public/images/pokemon/variant/exp/back/898.json b/public/images/pokemon/variant/exp/back/898.json index a669e986b97..5e979e6d5d5 100644 --- a/public/images/pokemon/variant/exp/back/898.json +++ b/public/images/pokemon/variant/exp/back/898.json @@ -7,8 +7,6 @@ "003a87": "71517a", "007766": "00776f", "615350": "6a5837", - "101010": "101010", - "fcfcfc": "fcfcfc", "c7c8cd": "ccc6d1", "9e8f87": "ae8b50", "797b8f": "8e778d", @@ -23,8 +21,6 @@ "003a87": "c64883", "007766": "345ab5", "615350": "38255f", - "101010": "101010", - "fcfcfc": "fcfcfc", "c7c8cd": "ccc6d1", "9e8f87": "927ec4", "797b8f": "ec6196", @@ -39,7 +35,6 @@ "003a87": "cc8c49", "007766": "88253e", "615350": "181935", - "101010": "101010", "fcfcfc": "fefdeb", "c7c8cd": "c4bdb3", "9e8f87": "354d8a", diff --git a/public/images/pokemon/variant/exp/back/900.json b/public/images/pokemon/variant/exp/back/900.json index 68558c7931b..835b578b32a 100644 --- a/public/images/pokemon/variant/exp/back/900.json +++ b/public/images/pokemon/variant/exp/back/900.json @@ -1,30 +1,14 @@ { "1": { - "080808": "080808", - "3a2e2f": "3a2e2f", - "6a5856": "6a5856", - "4d3d3e": "4d3d3e", - "96856d": "96856d", - "fcfcfc": "fcfcfc", - "2b1f22": "2b1f22", - "c8bdb7": "c8bdb7", "6b563a": "221a69", "af7845": "354da7", - "e2b561": "4b84d2", - "e3d1ae": "e3d1ae" + "e2b561": "4b84d2" }, "2": { - "080808": "080808", - "3a2e2f": "3a2e2f", "6a5856": "424242", "4d3d3e": "808080", - "96856d": "96856d", - "fcfcfc": "fcfcfc", - "2b1f22": "2b1f22", - "c8bdb7": "c8bdb7", "6b563a": "a54200", "af7845": "e68400", - "e2b561": "ffde00", - "e3d1ae": "e3d1ae" + "e2b561": "ffde00" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/901.json b/public/images/pokemon/variant/exp/back/901.json index da538225735..c3fc4fb00ed 100644 --- a/public/images/pokemon/variant/exp/back/901.json +++ b/public/images/pokemon/variant/exp/back/901.json @@ -1,24 +1,16 @@ { "1": { "382423": "1c2825", - "0f0f0f": "0f0f0f", "502f29": "273b32", "231a18": "0c1515", - "77655b": "77655b", - "9c8d86": "9c8d86", - "4b4236": "4b4236", "63443d": "31563f", "ca8b35": "c48e81", "fec643": "f7eee1", - "fcfcfc": "fcfcfc", "25521f": "557f24", - "fec672": "f2cab8", - "95908a": "95908a", - "b4b4b1": "b4b4b1" + "fec672": "f2cab8" }, "2": { "382423": "1e2249", - "0f0f0f": "0f0f0f", "502f29": "323760", "231a18": "111433", "77655b": "c199ae", @@ -27,10 +19,7 @@ "63443d": "46527a", "ca8b35": "437aff", "fec643": "bfeeff", - "fcfcfc": "fcfcfc", "25521f": "f83259", - "fec672": "96b7ff", - "95908a": "95908a", - "b4b4b1": "b4b4b1" + "fec672": "96b7ff" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/903.json b/public/images/pokemon/variant/exp/back/903.json index 3f39c155f99..4ea8aa57c42 100644 --- a/public/images/pokemon/variant/exp/back/903.json +++ b/public/images/pokemon/variant/exp/back/903.json @@ -4,13 +4,10 @@ "415b81": "3a0f0e", "533662": "136e81", "9ebade": "bd795f", - "0f110d": "0f110d", "718fbe": "9f4c3d", "8e2458": "12968b", "6a56b3": "722738", "36326d": "210609", - "f8feff": "f8feff", - "9b98a9": "9b98a9", "de2f41": "31dabb", "eb357c": "31dabb" }, @@ -19,7 +16,6 @@ "415b81": "152b2f", "533662": "982e33", "9ebade": "256258", - "0f110d": "0f110d", "718fbe": "194648", "8e2458": "cc5427", "6a56b3": "65b571", diff --git a/public/images/pokemon/variant/exp/back/909.json b/public/images/pokemon/variant/exp/back/909.json index 5b1be3cbddd..c12bbaf21db 100644 --- a/public/images/pokemon/variant/exp/back/909.json +++ b/public/images/pokemon/variant/exp/back/909.json @@ -9,12 +9,8 @@ "c3916e": "ade4e4", "dac0af": "a4ba9e", "ff512d": "366565", - "546978": "546978", "fafae2": "ffffff", - "ff817a": "448282", - "000000": "000000", - "3d505e": "3d505e", - "202d35": "202d35" + "ff817a": "448282" }, "2": { "cf5d1b": "2ce455", @@ -26,11 +22,7 @@ "c3916e": "33ff65", "dac0af": "82977c", "ff512d": "38583f", - "546978": "546978", "fafae2": "e5ffec", - "ff817a": "4a7854", - "000000": "000000", - "3d505e": "3d505e", - "202d35": "202d35" + "ff817a": "4a7854" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/911.json b/public/images/pokemon/variant/exp/back/911.json index 38cc5f228aa..b7147736a1f 100644 --- a/public/images/pokemon/variant/exp/back/911.json +++ b/public/images/pokemon/variant/exp/back/911.json @@ -4,51 +4,41 @@ "f45511": "91dada", "ee8b08": "81d5d5", "ffd017": "b4e6e6", - "5b5c5e": "5b5c5e", "fcfcfc": "cccccc", "9fa0a2": "758a70", - "333c36": "333c36", "ba3227": "234141", "741010": "152828", "ff4a3c": "366565", - "0f0f0f": "0f0f0f", "d20300": "3fbcbc", "595d5f": "5b5c5e", "f6520d": "91dada", "fafcf9": "cccccc", "ef8b06": "81d5d5", "ffd00b": "d3dfbe", - "343c38": "343c38", "9ca1a3": "758a70", "bc3126": "234141", "750d0d": "152828", - "ff4539": "366565", - "0e100c": "0e100c" + "ff4539": "366565" }, "2": { "d20000": "0ea631", "f45511": "2fe757", "ee8b08": "08e739", "ffd017": "4ffc75", - "5b5c5e": "5b5c5e", "fcfcfc": "e5ffec", "9fa0a2": "82977c", - "333c36": "333c36", "ba3227": "243929", "741010": "162319", "ff4a3c": "38583f", - "0f0f0f": "0f0f0f", "d20300": "0ea631", "595d5f": "5b5c5e", "f6520d": "2fe757", "fafcf9": "e5ffec", "ef8b06": "08e739", "ffd00b": "aaee60", - "343c38": "343c38", "9ca1a3": "82977c", "bc3126": "243929", "750d0d": "162319", - "ff4539": "38583f", - "0e100c": "0e100c" + "ff4539": "38583f" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/912.json b/public/images/pokemon/variant/exp/back/912.json index fb1f20998dd..a0caf21d8c3 100644 --- a/public/images/pokemon/variant/exp/back/912.json +++ b/public/images/pokemon/variant/exp/back/912.json @@ -3,7 +3,6 @@ "1f5978": "8c3b14", "84d7ff": "f7ca7b", "2fbee8": "e69c51", - "060606": "060606", "3686b1": "d96536", "ffffff": "ffe3b0", "5a82a1": "975432", @@ -17,7 +16,6 @@ "1f5978": "0a3025", "84d7ff": "58d299", "2fbee8": "33b37e", - "060606": "060606", "3686b1": "1c7962", "ffffff": "6767e3", "5a82a1": "2d185d", diff --git a/public/images/pokemon/variant/exp/back/913.json b/public/images/pokemon/variant/exp/back/913.json index e7ab41d58fc..15de2b2502f 100644 --- a/public/images/pokemon/variant/exp/back/913.json +++ b/public/images/pokemon/variant/exp/back/913.json @@ -6,7 +6,6 @@ "13325e": "3f050e", "174b6a": "642b0f", "30b0ba": "f77122", - "0f0f0f": "0f0f0f", "916a44": "3b2e28", "ddc271": "5b5450", "d0c4d3": "d79f63", @@ -23,7 +22,6 @@ "13325e": "072a2b", "174b6a": "541222", "30b0ba": "a22f49", - "0f0f0f": "0f0f0f", "916a44": "4b251b", "ddc271": "c76740", "d0c4d3": "3b188e", diff --git a/public/images/pokemon/variant/exp/back/919.json b/public/images/pokemon/variant/exp/back/919.json index 69546ed1285..0f03b380dd2 100644 --- a/public/images/pokemon/variant/exp/back/919.json +++ b/public/images/pokemon/variant/exp/back/919.json @@ -4,7 +4,6 @@ "63738c": "4b453d", "798aa2": "6c655c", "4b5870": "302d27", - "121212": "121212", "41485b": "23211d", "dde1e4": "cec890", "c0bdc0": "a29d62", @@ -12,7 +11,6 @@ "7b8ca3": "6c655c", "b0acb0": "a29d62", "ffc608": "d02c35", - "0f0f0f": "0f0f0f", "a38215": "962038", "a49dac": "62654e" }, @@ -21,24 +19,16 @@ "63738c": "498f57", "798aa2": "70ba74", "4b5870": "295449", - "121212": "121212", "41485b": "1c3835", - "dde1e4": "dde1e4", - "c0bdc0": "c0bdc0", - "636164": "636164", "7b8ca3": "70ba74", - "b0acb0": "b0acb0", "ffc608": "c54d2d", - "0f0f0f": "0f0f0f", - "a38215": "7f223a", - "a49dac": "a49dac" + "a38215": "7f223a" }, "2": { "2f323c": "340f21", "63738c": "983444", "798aa2": "c74d51", "4b5870": "601c3a", - "121212": "121212", "41485b": "4b132c", "dde1e4": "444444", "c0bdc0": "444444", @@ -46,7 +36,6 @@ "7b8ca3": "c74d51", "b0acb0": "333333", "ffc608": "2977b6", - "0f0f0f": "0f0f0f", "a38215": "293c7d", "a49dac": "222222" } diff --git a/public/images/pokemon/variant/exp/back/920.json b/public/images/pokemon/variant/exp/back/920.json index 6056b008e28..ca8462bbed5 100644 --- a/public/images/pokemon/variant/exp/back/920.json +++ b/public/images/pokemon/variant/exp/back/920.json @@ -1,12 +1,8 @@ { "0": { "292829": "475316", - "0f0f0f": "0f0f0f", "505050": "dbcf15", "3c393c": "8e931a", - "e6ebef": "e6ebef", - "a59aa5": "a59aa5", - "ffffff": "ffffff", "6b6d6b": "f6ea5f", "607381": "444444", "424e59": "292929", @@ -17,12 +13,8 @@ }, "1": { "292829": "1e391b", - "0f0f0f": "0f0f0f", "505050": "529042", "3c393c": "34642c", - "e6ebef": "e6ebef", - "a59aa5": "a59aa5", - "ffffff": "ffffff", "6b6d6b": "6ea25e", "607381": "919191", "424e59": "676974", @@ -33,12 +25,8 @@ }, "2": { "292829": "47132c", - "0f0f0f": "0f0f0f", "505050": "b52828", "3c393c": "791b2d", - "e6ebef": "e6ebef", - "a59aa5": "a59aa5", - "ffffff": "ffffff", "6b6d6b": "df4747", "607381": "858585", "424e59": "525252", diff --git a/public/images/pokemon/variant/exp/back/932.json b/public/images/pokemon/variant/exp/back/932.json index 6c8cd5ccb66..d6ab4a139fd 100644 --- a/public/images/pokemon/variant/exp/back/932.json +++ b/public/images/pokemon/variant/exp/back/932.json @@ -2,7 +2,6 @@ "1": { "717171": "82556e", "ffffff": "f9c2cd", - "121212": "121212", "b4b4b4": "bc8296", "bc8c79": "deeaf3", "875651": "9ba7b0", @@ -13,7 +12,6 @@ "2": { "717171": "383744", "ffffff": "9ba0a0", - "121212": "121212", "b4b4b4": "63636d", "bc8c79": "7cbf7f", "875651": "618c56", diff --git a/public/images/pokemon/variant/exp/back/933.json b/public/images/pokemon/variant/exp/back/933.json index a233b6a1714..6ecaa101e74 100644 --- a/public/images/pokemon/variant/exp/back/933.json +++ b/public/images/pokemon/variant/exp/back/933.json @@ -1,8 +1,5 @@ { "1": { - "636363": "636363", - "121212": "121212", - "b4b4b4": "b4b4b4", "bc8c79": "bc8296", "8a7367": "bc8296", "e8c8b1": "f9c2cd", @@ -10,14 +7,12 @@ "c6876e": "f9c2cd", "875651": "bc8296", "613339": "6d7982", - "ffffff": "ffffff", "42161c": "3a464f", "8c6464": "d8e9f5", "704b50": "90a4b5" }, "2": { "636363": "444251", - "121212": "121212", "b4b4b4": "63636d", "bc8c79": "5d9157", "8a7367": "3d5e47", diff --git a/public/images/pokemon/variant/exp/back/934.json b/public/images/pokemon/variant/exp/back/934.json index e2806483f2d..0bae922f698 100644 --- a/public/images/pokemon/variant/exp/back/934.json +++ b/public/images/pokemon/variant/exp/back/934.json @@ -1,6 +1,5 @@ { "1": { - "121212": "121212", "636363": "77595f", "b4b4b4": "bc808c", "ffffff": "f9c2cd", @@ -14,7 +13,6 @@ "c6876e": "d8e9f5" }, "2": { - "121212": "121212", "636363": "444251", "b4b4b4": "6a6a72", "ffffff": "9ba0a0", diff --git a/public/images/pokemon/variant/exp/back/94-mega.json b/public/images/pokemon/variant/exp/back/94-mega.json index e6ff9747d89..2b070bd521c 100644 --- a/public/images/pokemon/variant/exp/back/94-mega.json +++ b/public/images/pokemon/variant/exp/back/94-mega.json @@ -1,6 +1,5 @@ { "0": { - "101010": "101010", "4d2a4d": "634b63", "503f73": "d1bcd6", "775499": "fcf4fc", @@ -11,18 +10,14 @@ "ff5991": "72e9f2" }, "1": { - "101010": "101010", "4d2a4d": "23131f", "503f73": "511e3b", "775499": "a44c73", "9469bf": "c56f8a", "453159": "3b132c", - "994c99": "994c99", - "cc47a0": "cc47a0", "ff5991": "c1ea61" }, "2": { - "101010": "101010", "4d2a4d": "1a1320", "503f73": "302433", "775499": "3f324a", diff --git a/public/images/pokemon/variant/exp/back/940.json b/public/images/pokemon/variant/exp/back/940.json index 313dbd273ec..c68f4dc3c10 100644 --- a/public/images/pokemon/variant/exp/back/940.json +++ b/public/images/pokemon/variant/exp/back/940.json @@ -2,11 +2,9 @@ "1": { "2f3135": "372b61", "3f424d": "4c4982", - "181a1b": "181a1b", "ffcd37": "7dffc0", "be8f29": "5dd9c8", "91a5c3": "e39fc5", - "f9f9f9": "f9f9f9", "73bbbf": "f7859b", "643c28": "433382", "c27741": "9a5fd9", @@ -17,11 +15,9 @@ "2": { "2f3135": "e099a5", "3f424d": "edc5c8", - "181a1b": "181a1b", "ffcd37": "d9647b", "be8f29": "b3466a", "91a5c3": "ba73b2", - "f9f9f9": "f9f9f9", "73bbbf": "ffcf4a", "643c28": "2b2745", "c27741": "57436e", diff --git a/public/images/pokemon/variant/exp/back/941.json b/public/images/pokemon/variant/exp/back/941.json index 63e5f56449e..5c0793b1eb9 100644 --- a/public/images/pokemon/variant/exp/back/941.json +++ b/public/images/pokemon/variant/exp/back/941.json @@ -1,6 +1,5 @@ { "1": { - "000000": "000000", "825d21": "217991", "34393f": "2b3863", "aa7e24": "3dd1cc", @@ -8,15 +7,11 @@ "26282c": "1f1d54", "6c7177": "354c70", "73bbbf": "de82ff", - "2b1717": "2b1717", "441e21": "d16492", "692a2f": "ff9ec6", - "0f0f0f": "0f0f0f", - "37415a": "55348a", - "1a1c1f": "1a1c1f" + "37415a": "55348a" }, "2": { - "000000": "000000", "825d21": "8a2f62", "34393f": "f7bebe", "aa7e24": "c44f6c", @@ -24,11 +19,8 @@ "26282c": "e394a7", "6c7177": "f7dfdc", "73bbbf": "ffcf4a", - "2b1717": "2b1717", "441e21": "51467a", "692a2f": "776294", - "0f0f0f": "0f0f0f", - "37415a": "55348a", - "1a1c1f": "1a1c1f" + "37415a": "55348a" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/948.json b/public/images/pokemon/variant/exp/back/948.json index 95469041f71..2e4bb9b06ff 100644 --- a/public/images/pokemon/variant/exp/back/948.json +++ b/public/images/pokemon/variant/exp/back/948.json @@ -6,7 +6,6 @@ "f2b69f": "6d6ba4", "976924": "a50927", "ffec37": "ff6237", - "000000": "000000", "eaba2b": "ce271a", "d2bbac": "e2bea6", "fef8f5": "fff4f1", @@ -19,7 +18,6 @@ "f2b69f": "ce4847", "976924": "254087", "ffec37": "4b86bd", - "000000": "000000", "eaba2b": "2e609b", "d2bbac": "d8bdab", "fef8f5": "ffede5", diff --git a/public/images/pokemon/variant/exp/back/949.json b/public/images/pokemon/variant/exp/back/949.json index d8ff34fee1d..15f4ccd2ce7 100644 --- a/public/images/pokemon/variant/exp/back/949.json +++ b/public/images/pokemon/variant/exp/back/949.json @@ -5,13 +5,10 @@ "86433c": "a50927", "ca7268": "d41929", "5f5f5f": "7462ad", - "000000": "000000", - "ffffff": "ffffff", "ede652": "1672a1", "d6938b": "ff4737", "e7bcb8": "ff9d6d", "cdae52": "0c4a83", - "101010": "101010", "c2ae83": "b29785", "94724b": "60473c", "936839": "042259" @@ -22,13 +19,10 @@ "86433c": "401e54", "ca7268": "613a8a", "5f5f5f": "c64d30", - "000000": "000000", - "ffffff": "ffffff", "ede652": "dd7731", "d6938b": "8e65c1", "e7bcb8": "dd9dff", "cdae52": "af3610", - "101010": "101010", "c2ae83": "d9b591", "94724b": "6f492c", "936839": "7e1200" diff --git a/public/images/pokemon/variant/exp/back/951.json b/public/images/pokemon/variant/exp/back/951.json index 3df07b717e6..ca8046b759b 100644 --- a/public/images/pokemon/variant/exp/back/951.json +++ b/public/images/pokemon/variant/exp/back/951.json @@ -6,10 +6,8 @@ "a6b496": "facf81", "3f9a5f": "be8a84", "2f683c": "9d6b5b", - "0f0f0f": "0f0f0f", "ff9115": "ffb676", "5c7c5c": "4c292f", - "2e302f": "2e302f", "79b97b": "704f4f" }, "2": { @@ -19,10 +17,8 @@ "a6b496": "fa95d1", "3f9a5f": "a78bdc", "2f683c": "7456a8", - "0f0f0f": "0f0f0f", "ff9115": "b6dfff", "5c7c5c": "8e7eb1", - "2e302f": "2e302f", "79b97b": "cfbfe6" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/952.json b/public/images/pokemon/variant/exp/back/952.json index 318dd900b93..ad9bc26b330 100644 --- a/public/images/pokemon/variant/exp/back/952.json +++ b/public/images/pokemon/variant/exp/back/952.json @@ -8,7 +8,6 @@ "3f8147": "627bcd", "69ab7b": "c4a4eb", "42804b": "9884d3", - "0f0f0f": "0f0f0f", "262826": "7a6597", "476b51": "f8f3fe", "3c5042": "cfbfe6", diff --git a/public/images/pokemon/variant/exp/back/953.json b/public/images/pokemon/variant/exp/back/953.json index 6c48dfa65f5..6f2c1602306 100644 --- a/public/images/pokemon/variant/exp/back/953.json +++ b/public/images/pokemon/variant/exp/back/953.json @@ -7,7 +7,6 @@ "575244": "18734a", "777463": "199e46", "f38725": "2e8c19", - "000000": "000000", "c5b4aa": "d3e6e6", "a28e86": "c1d8db", "b96c26": "2f7410" @@ -20,7 +19,6 @@ "575244": "5e2d72", "777463": "8358a1", "f38725": "4baecd", - "000000": "000000", "c5b4aa": "39cfbc", "a28e86": "52b0b0", "b96c26": "4792bd" diff --git a/public/images/pokemon/variant/exp/back/954.json b/public/images/pokemon/variant/exp/back/954.json index 56ad50388fd..2f20c5353e4 100644 --- a/public/images/pokemon/variant/exp/back/954.json +++ b/public/images/pokemon/variant/exp/back/954.json @@ -3,7 +3,6 @@ "6f0c76": "4b5173", "e11bff": "e1efff", "aa13b7": "a0a9da", - "000000": "000000", "91263f": "87ceeb", "ce2d6b": "fffd91", "ff4c90": "ffbc00", @@ -19,7 +18,6 @@ "6f0c76": "3e091a", "e11bff": "9b2217", "aa13b7": "6b1111", - "000000": "000000", "91263f": "c85712", "ce2d6b": "ded051", "ff4c90": "141031", diff --git a/public/images/pokemon/variant/exp/back/957.json b/public/images/pokemon/variant/exp/back/957.json index 53a80212ecc..e981138afcd 100644 --- a/public/images/pokemon/variant/exp/back/957.json +++ b/public/images/pokemon/variant/exp/back/957.json @@ -2,10 +2,8 @@ "0": { "7c5569": "91707b", "f0cfe0": "f2d5cb", - "000000": "000000", "ccb2bf": "cf9faf", "af4c7e": "993868", - "661e42": "661e42", "a87b92": "ef7787", "cc9bb4": "ff9ba0", "de589c": "c65f7e", @@ -17,22 +15,16 @@ "1": { "7c5569": "8598ad", "f0cfe0": "fef8e6", - "000000": "000000", "ccb2bf": "aecdcf", "af4c7e": "ee8363", "661e42": "7f3435", "a87b92": "ffb47f", "cc9bb4": "ffd8ad", - "de589c": "f3ad79", - "717278": "717278", - "3d3f45": "3d3f45", - "8e90a0": "8e90a0", - "a7a8b6": "a7a8b6" + "de589c": "f3ad79" }, "2": { "7c5569": "7d7baf", "f0cfe0": "f3e0ff", - "000000": "000000", "ccb2bf": "c0b3e2", "af4c7e": "44306b", "661e42": "201a3d", diff --git a/public/images/pokemon/variant/exp/back/958.json b/public/images/pokemon/variant/exp/back/958.json index d2a699390b1..12cfbea3b4c 100644 --- a/public/images/pokemon/variant/exp/back/958.json +++ b/public/images/pokemon/variant/exp/back/958.json @@ -1,33 +1,26 @@ { "0": { "62575b": "91707b", - "000000": "000000", "d3c5c9": "f2d5cb", "a89a9e": "ddaaaf", "e998b3": "ff9ba0", - "f0f0f0": "f0f0f0", "d95782": "c65f7e", "752842": "63203b", "31273a": "3f2319", - "ab7788": "ab7788", "786987": "8b5745", "9f8faf": "cb836c", "b33b63": "993868", - "db7c9c": "db7c9c", "6b5283": "6a3443", "50405f": "532835" }, "1": { "62575b": "6f848e", - "000000": "000000", "d3c5c9": "fef8e6", "a89a9e": "aecdcf", "e998b3": "f6c58d", - "f0f0f0": "f0f0f0", "d95782": "f3ad79", "752842": "a54344", "31273a": "3f2319", - "ab7788": "ab7788", "786987": "834436", "9f8faf": "bf7754", "b33b63": "ee8363", @@ -37,15 +30,12 @@ }, "2": { "62575b": "6e628c", - "000000": "000000", "d3c5c9": "f3e0ff", "a89a9e": "c0b3e2", "e998b3": "a074b0", - "f0f0f0": "f0f0f0", "d95782": "7a4889", "752842": "201a3d", "31273a": "1e1d30", - "ab7788": "ab7788", "786987": "353549", "9f8faf": "5b5a68", "b33b63": "44306b", diff --git a/public/images/pokemon/variant/exp/back/959.json b/public/images/pokemon/variant/exp/back/959.json index c91083ed06b..be68144ff1b 100644 --- a/public/images/pokemon/variant/exp/back/959.json +++ b/public/images/pokemon/variant/exp/back/959.json @@ -2,7 +2,6 @@ "0": { "664636": "665b52", "e2c793": "e0c9b8", - "000000": "000000", "aa855d": "a58678", "352245": "592740", "4e3662": "77394b", @@ -21,14 +20,12 @@ "1": { "664636": "535d6c", "e2c793": "aeced0", - "000000": "000000", "aa855d": "80959f", "352245": "19374a", "4e3662": "377377", "543f57": "281738", "a593a8": "bf7754", "836b87": "834436", - "5f203f": "5f203f", "d08fae": "f6c58d", "deccd5": "fef8e6", "87757e": "80959f", @@ -40,7 +37,6 @@ "2": { "664636": "685952", "e2c793": "e7dac2", - "000000": "000000", "aa855d": "ad9c8a", "352245": "6a6e77", "4e3662": "aebab6", diff --git a/public/images/pokemon/variant/exp/back/962.json b/public/images/pokemon/variant/exp/back/962.json index 118a0f26768..b6017f80905 100644 --- a/public/images/pokemon/variant/exp/back/962.json +++ b/public/images/pokemon/variant/exp/back/962.json @@ -1,6 +1,5 @@ { "0": { - "0f0f0f": "0f0f0f", "342930": "3e1d26", "4a3942": "60354a", "efe3e1": "f6cbc4", @@ -15,7 +14,6 @@ "a7aba7": "ddcac6" }, "1": { - "0f0f0f": "0f0f0f", "342930": "142e22", "4a3942": "273c31", "efe3e1": "e8e8c0", @@ -31,7 +29,6 @@ }, "2": { "342930": "754156", - "0f0f0f": "0f0f0f", "4a3942": "a5777f", "937d85": "2f2655", "b9aaaf": "453863", @@ -44,4 +41,4 @@ "501d25": "545151", "7b827b": "a96c4b" } -} +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/967.json b/public/images/pokemon/variant/exp/back/967.json index fc531f0de5a..77509a9f98b 100644 --- a/public/images/pokemon/variant/exp/back/967.json +++ b/public/images/pokemon/variant/exp/back/967.json @@ -1,22 +1,15 @@ { "1": { "384a35": "464354", - "0f0f0f": "0f0f0f", "54654e": "67637a", - "b9b7b3": "b9b7b3", - "4b565c": "4b565c", "1c2916": "272431", "f16b32": "bead9d", "34453d": "444a71", "75b07d": "9299c7", - "607d6d": "6e76a9", - "222328": "222328", - "323943": "323943", - "e2e9d7": "e2e9d7" + "607d6d": "6e76a9" }, "2": { "384a35": "5d0c0c", - "0f0f0f": "0f0f0f", "54654e": "942d22", "b9b7b3": "c0ab8b", "4b565c": "815652", diff --git a/public/images/pokemon/variant/exp/back/969.json b/public/images/pokemon/variant/exp/back/969.json index 3f057cf6603..8fe11376246 100644 --- a/public/images/pokemon/variant/exp/back/969.json +++ b/public/images/pokemon/variant/exp/back/969.json @@ -9,7 +9,6 @@ "72fec4": "fbce5d", "5fe3ac": "fbce5d", "41968b": "c57833", - "0f0f0f": "0f0f0f", "453b4d": "2c445a", "635181": "527492", "8475a7": "80aec5", @@ -26,7 +25,6 @@ "72fec4": "df543b", "5fe3ac": "df543b", "41968b": "a51414", - "0f0f0f": "0f0f0f", "453b4d": "0d240f", "635181": "193a1c", "8475a7": "1e5c17", diff --git a/public/images/pokemon/variant/exp/back/970.json b/public/images/pokemon/variant/exp/back/970.json index cc48d2a3f3c..c416ac68851 100644 --- a/public/images/pokemon/variant/exp/back/970.json +++ b/public/images/pokemon/variant/exp/back/970.json @@ -1,6 +1,5 @@ { "1": { - "242737": "242737", "366956": "521d0c", "41968b": "c57833", "5de0aa": "fbce5d", diff --git a/public/images/pokemon/variant/exp/back/973.json b/public/images/pokemon/variant/exp/back/973.json index 267a690cc0b..8efb12eb1aa 100644 --- a/public/images/pokemon/variant/exp/back/973.json +++ b/public/images/pokemon/variant/exp/back/973.json @@ -1,44 +1,26 @@ { "0": { "811f47": "60484a", - "211f28": "211f28", "d43e7c": "988282", "3c3946": "404355", - "2c2936": "2c2936", - "ffffff": "ffffff", "760c38": "7c6364", - "000000": "000000", "ff79b1": "cfbbbc", - "9c174e": "60484a", - "3d3b4e": "3d3b4e", - "c4c1dc": "c4c1dc" + "9c174e": "60484a" }, "1": { "811f47": "430855", - "211f28": "211f28", "d43e7c": "911b92", - "3c3946": "3c3946", - "2c2936": "2c2936", - "ffffff": "ffffff", "760c38": "660f71", - "000000": "000000", "ff79b1": "cb36b9", - "9c174e": "3f0747", - "3d3b4e": "3d3b4e", - "c4c1dc": "c4c1dc" + "9c174e": "3f0747" }, "2": { "811f47": "943615", - "211f28": "211f28", "d43e7c": "d77433", - "3c3946": "3c3946", - "2c2936": "2c2936", "ffffff": "fbf2f4", "760c38": "17167d", - "000000": "000000", "ff79b1": "fabe7d", "9c174e": "2c3ca6", - "3d3b4e": "3d3b4e", "c4c1dc": "978f97" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/974.json b/public/images/pokemon/variant/exp/back/974.json index e6ba5dff1b0..12838b0ecb1 100644 --- a/public/images/pokemon/variant/exp/back/974.json +++ b/public/images/pokemon/variant/exp/back/974.json @@ -3,7 +3,6 @@ "736875": "8c2727", "524951": "661427", "efefef": "ffcc9e", - "0f0f0f": "0f0f0f", "bebaba": "ee9065", "a29793": "c85442", "a44667": "2c7193", @@ -13,7 +12,6 @@ "736875": "1f355e", "524951": "172651", "efefef": "438aa0", - "0f0f0f": "0f0f0f", "bebaba": "2a607f", "a29793": "1c426b", "a44667": "ae664a", diff --git a/public/images/pokemon/variant/exp/back/975.json b/public/images/pokemon/variant/exp/back/975.json index f5ab4ec8a40..aeba260e6cc 100644 --- a/public/images/pokemon/variant/exp/back/975.json +++ b/public/images/pokemon/variant/exp/back/975.json @@ -1,6 +1,5 @@ { "1": { - "000000": "000000", "f7f6f2": "ffcc9e", "c8c4c4": "ee9065", "a44667": "2c7193", @@ -8,7 +7,6 @@ "f493c9": "71e2d3" }, "2": { - "000000": "000000", "f7f6f2": "357489", "c8c4c4": "265777", "a44667": "ae664a", diff --git a/public/images/pokemon/variant/exp/back/978-stretchy.json b/public/images/pokemon/variant/exp/back/978-stretchy.json index d6153da59df..e9acee1c06e 100644 --- a/public/images/pokemon/variant/exp/back/978-stretchy.json +++ b/public/images/pokemon/variant/exp/back/978-stretchy.json @@ -6,7 +6,6 @@ "ce9b24": "485084", "feca2e": "a3a3a3", "ffcf2d": "c1c1c1", - "0f0f0f": "0f0f0f", "adafb8": "dace8e", "626471": "bca353", "fcfcfc": "faf2c4" @@ -18,7 +17,6 @@ "ce9b24": "273f08", "feca2e": "d8d0ad", "ffcf2d": "afa680", - "0f0f0f": "0f0f0f", "adafb8": "91734f", "626471": "604a30", "fcfcfc": "bc996e" diff --git a/public/images/pokemon/variant/exp/back/979.json b/public/images/pokemon/variant/exp/back/979.json index 11de43288e2..4ebcddf7e1c 100644 --- a/public/images/pokemon/variant/exp/back/979.json +++ b/public/images/pokemon/variant/exp/back/979.json @@ -3,21 +3,17 @@ "7b7786": "706394", "c0c1c8": "bbb3d6", "fafafc": "ddd2ff", - "111111": "111111", "a5a6b2": "ada2cd", "8f8d9c": "867ba4", "474958": "38496a", "555c69": "3f5275", "55525c": "625583", - "323132": "323132", - "5d6976": "4d6289", - "464546": "464546" + "5d6976": "4d6289" }, "1": { "7b7786": "c88945", "c0c1c8": "ebd494", "fafafc": "f9e9bd", - "111111": "111111", "a5a6b2": "ddbf6b", "8f8d9c": "d2a357", "474958": "3a302e", @@ -31,7 +27,6 @@ "7b7786": "b12009", "c0c1c8": "f26a3c", "fafafc": "ffa050", - "111111": "111111", "a5a6b2": "f26a3c", "8f8d9c": "d22c10", "474958": "313930", diff --git a/public/images/pokemon/variant/exp/back/981.json b/public/images/pokemon/variant/exp/back/981.json index 30098b9de2d..07d72c394c3 100644 --- a/public/images/pokemon/variant/exp/back/981.json +++ b/public/images/pokemon/variant/exp/back/981.json @@ -1,6 +1,5 @@ { "1": { - "0f0f0f": "0f0f0f", "43341e": "112246", "36383d": "503a2d", "6f5431": "1f4062", @@ -10,11 +9,9 @@ "b4ff68": "ff8f00", "fff42f": "c29925", "6aad21": "dec93d", - "fcfcfc": "fcfcfc", "deb43d": "dec93d", "3d680f": "be6b02", "775c10": "774f10", - "a8abb3": "a8abb3", "513c21": "430b0f", "b1a75c": "7e262d", "fdec8a": "9c3e3e", @@ -27,7 +24,6 @@ "f18d4e": "d8d1ad" }, "2": { - "0f0f0f": "0f0f0f", "43341e": "52ab5f", "36383d": "792e51", "6f5431": "a8e781", @@ -37,11 +33,9 @@ "b4ff68": "dc7346", "fff42f": "ed9233", "6aad21": "d8975d", - "fcfcfc": "fcfcfc", "deb43d": "ebbb72", "3d680f": "953c2f", "775c10": "b35127", - "a8abb3": "a8abb3", "513c21": "1a456c", "b1a75c": "1e7884", "fdec8a": "2a9d8f", diff --git a/public/images/pokemon/variant/exp/back/982-three-segment.json b/public/images/pokemon/variant/exp/back/982-three-segment.json index 967f4a6f4b9..06674c4373c 100644 --- a/public/images/pokemon/variant/exp/back/982-three-segment.json +++ b/public/images/pokemon/variant/exp/back/982-three-segment.json @@ -2,9 +2,7 @@ "1": { "735a41": "53575a", "f6e67b": "f6ffff", - "101010": "101010", "debd39": "aeaeae", - "f6ffff": "f6ffff", "318ba4": "4a6165", "6abdcd": "748da4", "206a83": "2a413f", @@ -16,7 +14,6 @@ "2": { "735a41": "462a3e", "f6e67b": "db4069", - "101010": "101010", "debd39": "a12e55", "f6ffff": "fdffdc", "318ba4": "38a8a6", diff --git a/public/images/pokemon/variant/exp/back/982.json b/public/images/pokemon/variant/exp/back/982.json index fa60db57a7d..330ab0a19a8 100644 --- a/public/images/pokemon/variant/exp/back/982.json +++ b/public/images/pokemon/variant/exp/back/982.json @@ -1,7 +1,5 @@ { "1": { - "101010": "101010", - "f6ffff": "f6ffff", "735a41": "53575a", "f6e67b": "ececec", "debd39": "aeaeae", @@ -14,14 +12,11 @@ "bd8b20": "757575" }, "2": { - "101010": "101010", "f6ffff": "fdffdc", "735a41": "692342", "f6e67b": "db4069", "debd39": "a12e55", - "318ba4": "318ba4", "6abdcd": "73d7d5", - "206a83": "206a83", "c1d1e9": "f4ce91", "fff6c5": "e97798", "5a6273": "5c4a4d", diff --git a/public/images/pokemon/variant/exp/back/987.json b/public/images/pokemon/variant/exp/back/987.json index 5fb59f6979d..9eae5ff8fb1 100644 --- a/public/images/pokemon/variant/exp/back/987.json +++ b/public/images/pokemon/variant/exp/back/987.json @@ -5,7 +5,6 @@ "182941": "132443", "4a83a4": "387fa7", "b36cc1": "d3941a", - "0f0f0f": "0f0f0f", "314a62": "244260", "621841": "71370f", "548e88": "2d60bb", @@ -18,7 +17,6 @@ "182941": "244358", "4a83a4": "a1c8db", "b36cc1": "1dbdb9", - "0f0f0f": "0f0f0f", "314a62": "7396b4", "621841": "7b3c08", "548e88": "a9c0c6", @@ -31,7 +29,6 @@ "182941": "603305", "4a83a4": "e6aa47", "b36cc1": "eece8c", - "0f0f0f": "0f0f0f", "314a62": "b56f2a", "621841": "5a0a05", "548e88": "e0b544", diff --git a/public/images/pokemon/variant/exp/back/988.json b/public/images/pokemon/variant/exp/back/988.json index ca3aa11cfdc..8cae6902168 100644 --- a/public/images/pokemon/variant/exp/back/988.json +++ b/public/images/pokemon/variant/exp/back/988.json @@ -4,14 +4,10 @@ "7b2000": "0b334c", "d8a33f": "56e4ba", "ed7e3d": "28d7bd", - "181820": "181820", "efd165": "66e9c2", "d1fd77": "e2fd77", "7dc536": "d7d346", "f04137": "17b79f", - "35384f": "35384f", - "f1f7f7": "f1f7f7", - "465175": "465175", "a9a9ab": "92c9b9", "359f8f": "23838b" }, @@ -20,13 +16,11 @@ "7b2000": "3d1759", "d8a33f": "9d46a1", "ed7e3d": "b258c9", - "181820": "181820", "efd165": "c273e0", "d1fd77": "71d1fb", "7dc536": "38b9e0", "f04137": "9439c5", "35384f": "123755", - "f1f7f7": "f1f7f7", "465175": "1b233f", "a9a9ab": "8fb8c9", "359f8f": "154e67" diff --git a/public/images/pokemon/variant/exp/back/993.json b/public/images/pokemon/variant/exp/back/993.json index 981f6cf7c61..41f7f39348f 100644 --- a/public/images/pokemon/variant/exp/back/993.json +++ b/public/images/pokemon/variant/exp/back/993.json @@ -2,7 +2,6 @@ "1": { "282828": "292109", "7a787a": "f8f5e2", - "0f0f0f": "0f0f0f", "463741": "754711", "4f4d51": "c59b4b", "4a424a": "533310", @@ -11,14 +10,12 @@ "3a75e6": "543280", "952b7d": "585a5c", "ff4dcb": "b7c6d6", - "fcfcfc": "fcfcfc", "172e57": "160832", "749eed": "b98bd6" }, "2": { "282828": "172220", "7a787a": "a4bfbe", - "0f0f0f": "0f0f0f", "463741": "2a505a", "4f4d51": "467678", "4a424a": "24323e", @@ -27,7 +24,6 @@ "3a75e6": "983b5c", "952b7d": "873954", "ff4dcb": "e3bbd3", - "fcfcfc": "fcfcfc", "172e57": "470e2c", "749eed": "f17ea6" } diff --git a/public/images/pokemon/variant/exp/back/994.json b/public/images/pokemon/variant/exp/back/994.json index 93e19242de6..23be955a78d 100644 --- a/public/images/pokemon/variant/exp/back/994.json +++ b/public/images/pokemon/variant/exp/back/994.json @@ -6,13 +6,11 @@ "f29e42": "00f02c", "fac375": "8bffa0", "626262": "696983", - "090913": "090913", "6a0305": "ae7a24", "dd393e": "fdc263", "a91215": "d79a38", "979797": "9b9bb6", "dddcde": "d9d9ea", - "292933": "292933", "6a8997": "867bc8", "30445a": "3f357c", "96cfd7": "b0a4f8", @@ -24,17 +22,12 @@ "f2dd46": "6bffc9", "f29e42": "00bfe1", "fac375": "a8fbff", - "626262": "626262", - "090913": "090913", "6a0305": "6e2140", "dd393e": "ff5e5e", "a91215": "e72158", - "979797": "979797", "dddcde": "e9dac7", - "292933": "292933", "6a8997": "ff926c", "30445a": "664338", - "96cfd7": "ffc28c", - "fac173": "fac173" + "96cfd7": "ffc28c" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/995.json b/public/images/pokemon/variant/exp/back/995.json index d758c3adfeb..f65c77b5698 100644 --- a/public/images/pokemon/variant/exp/back/995.json +++ b/public/images/pokemon/variant/exp/back/995.json @@ -1,34 +1,22 @@ { "1": { "384800": "4f4528", - "101010": "101010", "687828": "7b6a31", "789828": "8d7f54", "a0d048": "ddcb86", "48b090": "9d3eb9", "78d8a8": "ca72e4", "c8e850": "f6eebd", - "188050": "6a267e", - "202020": "202020", - "fffbff": "fffbff", - "383030": "383030", - "2a2c2e": "2a2c2e", - "504848": "504848" + "188050": "6a267e" }, "2": { "384800": "26292b", - "101010": "101010", "687828": "383c40", "789828": "464b51", "a0d048": "6b737b", "48b090": "9a1f2c", "78d8a8": "d53143", "c8e850": "949ca5", - "188050": "740c18", - "202020": "202020", - "fffbff": "fffbff", - "383030": "383030", - "2a2c2e": "2a2c2e", - "504848": "504848" + "188050": "740c18" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/996.json b/public/images/pokemon/variant/exp/back/996.json index 2891143402e..972620eab18 100644 --- a/public/images/pokemon/variant/exp/back/996.json +++ b/public/images/pokemon/variant/exp/back/996.json @@ -1,6 +1,5 @@ { "1": { - "020202": "020202", "5f5f64": "181f1f", "9ea7af": "293b39", "bec3c7": "325747", @@ -17,7 +16,6 @@ "ffe000": "c5a64d" }, "2": { - "020202": "020202", "5f5f64": "2f2c38", "9ea7af": "ceccef", "bec3c7": "e6e6eb", @@ -25,9 +23,6 @@ "314a5d": "524f60", "c4e9eb": "fcb925", "968201": "2a3064", - "e3e3e3": "e3e3e3", - "bcb7bc": "bcb7bc", - "a39ca1": "a39ca1", "96abac": "ca6d2a", "aecacb": "e38f21", "cab300": "1f46c4", diff --git a/public/images/pokemon/variant/exp/back/997.json b/public/images/pokemon/variant/exp/back/997.json index 40277967be5..965400e70f1 100644 --- a/public/images/pokemon/variant/exp/back/997.json +++ b/public/images/pokemon/variant/exp/back/997.json @@ -1,6 +1,5 @@ { "1": { - "020202": "020202", "516373": "5a3b36", "caefef": "b7926b", "3f6176": "1e2c2f", @@ -15,7 +14,6 @@ "cf9100": "9f7b3e" }, "2": { - "020202": "020202", "516373": "79452f", "caefef": "fcb925", "3f6176": "524f60", @@ -25,8 +23,6 @@ "7b9fb1": "e6e6eb", "4a6b7e": "8a82aa", "ba9e03": "ab324c", - "ffe100": "ff6767", - "feb701": "feb701", - "cf9100": "cf9100" + "ffe100": "ff6767" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/998.json b/public/images/pokemon/variant/exp/back/998.json index 0d4dd6e5dca..841925b0def 100644 --- a/public/images/pokemon/variant/exp/back/998.json +++ b/public/images/pokemon/variant/exp/back/998.json @@ -3,14 +3,12 @@ "5b879b": "5a3b36", "eaf9f9": "e1d4be", "1f3241": "1b2525", - "020202": "020202", "caefef": "b7926b", "416075": "305444", "afc0c7": "8f6049", "314a5d": "293b39", "ffe100": "30d1ff", "837d34": "3b69d3", - "272427": "272427", "bf373e": "c5a64d", "9b2930": "705c39", "8fa7b1": "835344" @@ -19,7 +17,6 @@ "5b879b": "79452f", "eaf9f9": "fff8d3", "1f3241": "524f60", - "020202": "020202", "caefef": "fcb925", "416075": "e6e6eb", "afc0c7": "d3772c", diff --git a/public/images/pokemon/variant/exp/back/999.json b/public/images/pokemon/variant/exp/back/999.json index 6850cf8a578..f5e1913e195 100644 --- a/public/images/pokemon/variant/exp/back/999.json +++ b/public/images/pokemon/variant/exp/back/999.json @@ -3,7 +3,6 @@ "4f4333": "38001c", "ddc126": "d52d70", "836c54": "760040", - "0f0f0f": "0f0f0f", "323437": "142552", "783a52": "492118", "545b6b": "1e2e60", @@ -18,30 +17,24 @@ "4f4333": "131c3b", "ddc126": "65768c", "836c54": "29354e", - "0f0f0f": "0f0f0f", "323437": "1d2c54", "783a52": "4f2e5c", "545b6b": "415073", "ac4454": "794e83", "bfa33e": "485466", - "7a82a9": "7a82a9", "745527": "131c3b", - "a59227": "9c9cbe", - "bac4d8": "bac4d8" + "a59227": "9c9cbe" }, "2": { "4f4333": "0c1b40", "ddc126": "326191", "836c54": "152848", - "0f0f0f": "0f0f0f", "323437": "212857", "783a52": "6d6594", "545b6b": "6467a8", "ac4454": "bcb9d6", "bfa33e": "294f7e", - "7a82a9": "7a82a9", "745527": "0c1b40", - "a59227": "b6d0d7", - "bac4d8": "bac4d8" + "a59227": "b6d0d7" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/female/6215.json b/public/images/pokemon/variant/exp/back/female/6215.json index a66e3780d12..a0485ed67c5 100644 --- a/public/images/pokemon/variant/exp/back/female/6215.json +++ b/public/images/pokemon/variant/exp/back/female/6215.json @@ -6,12 +6,9 @@ "956cbe": "31dabb", "514a80": "402010", "dcdbf7": "d0b3a4", - "080808": "080808", "28234b": "220d0a", "7d6ca4": "672e26", "584d80": "401914", - "f6f6ff": "f6f6ff", - "bdbdc5": "bdbdc5", "c52973": "ea903f" }, "2": { @@ -21,12 +18,9 @@ "956cbe": "cc5427", "514a80": "14273a", "dcdbf7": "60ae7e", - "080808": "080808", "28234b": "0a191e", "7d6ca4": "395962", "584d80": "1c3942", - "f6f6ff": "f6f6ff", - "bdbdc5": "bdbdc5", "c52973": "f49633" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/female/6215.json b/public/images/pokemon/variant/exp/female/6215.json index 3198424563b..56ee351cd66 100644 --- a/public/images/pokemon/variant/exp/female/6215.json +++ b/public/images/pokemon/variant/exp/female/6215.json @@ -1,7 +1,6 @@ { "1": { "503678": "0f5d6d", - "080808": "080808", "514a80": "402010", "956cbe": "31dabb", "9c9bce": "ae8976", @@ -12,14 +11,10 @@ "ffde7b": "a7a7a7", "584d80": "562627", "28234b": "220d0a", - "c52973": "ea903f", - "bdbdc5": "bdbdc5", - "f6f6ff": "f6f6ff", - "000000": "000000" + "c52973": "ea903f" }, "2": { "503678": "601522", - "080808": "080808", "514a80": "14273a", "956cbe": "cc5427", "9c9bce": "3c8775", @@ -30,9 +25,6 @@ "ffde7b": "ffe07e", "584d80": "1c3942", "28234b": "0a191e", - "c52973": "f49633", - "bdbdc5": "bdbdc5", - "f6f6ff": "f6f6ff", - "000000": "000000" + "c52973": "f49633" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/female/111.json b/public/images/pokemon/variant/female/111.json index 3a43aa13e15..b13dc177767 100644 --- a/public/images/pokemon/variant/female/111.json +++ b/public/images/pokemon/variant/female/111.json @@ -1,22 +1,16 @@ { "1": { "5a5a7b": "241e2f", - "101010": "101010", "bdbdce": "6a547a", "e6e6ef": "9781ab", "8484ad": "402f51", - "3a3a52": "261e2d", - "ffffff": "ffffff", - "ad3a29": "ad3a29" + "3a3a52": "261e2d" }, "2": { "5a5a7b": "ab4355", - "101010": "101010", "bdbdce": "e18db3", "e6e6ef": "f7b4d1", "8484ad": "d76688", - "3a3a52": "6d2935", - "ffffff": "ffffff", - "ad3a29": "ad3a29" + "3a3a52": "6d2935" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/female/112.json b/public/images/pokemon/variant/female/112.json index 1c668cf5aa7..427afde596d 100644 --- a/public/images/pokemon/variant/female/112.json +++ b/public/images/pokemon/variant/female/112.json @@ -1,32 +1,22 @@ { "1": { "8c8c94": "523c5c", - "101010": "101010", "c5c5bd": "6a547a", "52525a": "3c2945", "e6e6de": "9781ab", "735a31": "6b6373", "ffefc5": "cecede", "b5a573": "948cad", - "ffffff": "ffffff", - "a53110": "a53110", - "e6523a": "e6523a", - "e6d6ad": "cecede", - "732110": "732110" + "e6d6ad": "cecede" }, "2": { "8c8c94": "ab3f5c", - "101010": "101010", "c5c5bd": "cb568a", "52525a": "642224", "e6e6de": "ef86b5", "735a31": "6d586d", "ffefc5": "dacad3", "b5a573": "be9bb6", - "ffffff": "ffffff", - "a53110": "a53110", - "e6523a": "e6523a", - "e6d6ad": "dacad3", - "732110": "732110" + "e6d6ad": "dacad3" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/female/118.json b/public/images/pokemon/variant/female/118.json index ba5a9377fdb..ca5c26c3671 100644 --- a/public/images/pokemon/variant/female/118.json +++ b/public/images/pokemon/variant/female/118.json @@ -2,7 +2,6 @@ "1": { "52525a": "5b3856", "ffffff": "fff9fc", - "101010": "101010", "8c8c94": "7c4b71", "d6d6de": "bf8cb0", "efefef": "e8c3d9", @@ -19,7 +18,6 @@ "2": { "52525a": "2e5453", "ffffff": "f0fff8", - "101010": "101010", "8c8c94": "4c867a", "d6d6de": "9cd8c4", "efefef": "c3f0dd", diff --git a/public/images/pokemon/variant/female/119.json b/public/images/pokemon/variant/female/119.json index b825cb25034..ab80dbccad5 100644 --- a/public/images/pokemon/variant/female/119.json +++ b/public/images/pokemon/variant/female/119.json @@ -5,8 +5,6 @@ "dedee6": "eac5df", "5a5a63": "482b46", "52525a": "49215e", - "cec5c5": "cec5c5", - "101010": "101010", "943119": "471d64", "e67342": "b169c0", "f79463": "d089d6", @@ -22,8 +20,6 @@ "dedee6": "bae6f4", "5a5a63": "3c6189", "52525a": "20355a", - "cec5c5": "cec5c5", - "101010": "101010", "943119": "0e285a", "e67342": "387db1", "f79463": "56aacb", diff --git a/public/images/pokemon/variant/female/123.json b/public/images/pokemon/variant/female/123.json index 5fbefd72224..0b21a71af27 100644 --- a/public/images/pokemon/variant/female/123.json +++ b/public/images/pokemon/variant/female/123.json @@ -2,43 +2,23 @@ "0": { "425a21": "632929", "bde673": "f76b6b", - "101010": "101010", "9c8c31": "9494a5", "fff7d6": "ffffff", "8cce73": "d63a3a", "e6d6ad": "b5b5ce", - "5a9c4a": "a52929", - "ffffff": "ffffff", - "dedede": "dedede", - "bdbdbd": "bdbdbd", - "737373": "737373" + "5a9c4a": "a52929" }, "1": { "425a21": "484e75", "bde673": "7c9ac5", - "101010": "101010", - "9c8c31": "9c8c31", - "fff7d6": "fff7d6", "8cce73": "92b0db", - "e6d6ad": "e6d6ad", - "5a9c4a": "7b94d6", - "ffffff": "ffffff", - "dedede": "dedede", - "bdbdbd": "bdbdbd", - "737373": "737373" + "5a9c4a": "7b94d6" }, "2": { "425a21": "8f3907", "bde673": "f8f581", - "101010": "101010", - "9c8c31": "9c8c31", - "fff7d6": "fff7d6", "8cce73": "f0c947", - "e6d6ad": "e6d6ad", "5a9c4a": "e6a027", - "ffffff": "ffffff", - "dedede": "f0c947", - "bdbdbd": "bdbdbd", - "737373": "737373" + "dedede": "f0c947" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/female/129.json b/public/images/pokemon/variant/female/129.json index 0189d0d310d..957cdeb4d55 100644 --- a/public/images/pokemon/variant/female/129.json +++ b/public/images/pokemon/variant/female/129.json @@ -7,14 +7,12 @@ "f76319": "8b9bb2", "840042": "22294c", "c5ad73": "c07b3f", - "000000": "000000", "525263": "9b7767", "bd4242": "576582", "ffffff": "fff9f3", "8c8ca5": "be9f8d", "ceced6": "e6d2c4", - "ff9c63": "b4c5d6", - "ffe6c5": "ffe6c5" + "ff9c63": "b4c5d6" }, "2": { "7b6352": "94836f", @@ -24,13 +22,11 @@ "f76319": "a454dc", "840042": "230f55", "c5ad73": "bcaf98", - "000000": "000000", "525263": "74619a", "bd4242": "64309c", "ffffff": "f9efff", "8c8ca5": "af97ce", "ceced6": "d5c7e4", - "ff9c63": "d18bf0", - "ffe6c5": "ffe6c5" + "ff9c63": "d18bf0" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/female/130.json b/public/images/pokemon/variant/female/130.json index d18ded52775..e6cb6c5b023 100644 --- a/public/images/pokemon/variant/female/130.json +++ b/public/images/pokemon/variant/female/130.json @@ -6,7 +6,6 @@ "d6def7": "e3c7ab", "196394": "a23b0c", "194273": "6c1301", - "191919": "191919", "7bd6ef": "ffd076", "42b5ef": "f29745", "f7e6ad": "ebddd5", @@ -23,7 +22,6 @@ "d6def7": "d9b6b9", "196394": "35135f", "194273": "1c0b46", - "191919": "191919", "7bd6ef": "b16cce", "42b5ef": "7f459a", "f7e6ad": "ebddd5", diff --git a/public/images/pokemon/variant/female/185.json b/public/images/pokemon/variant/female/185.json index 493ad0c8286..c26bab91fb1 100644 --- a/public/images/pokemon/variant/female/185.json +++ b/public/images/pokemon/variant/female/185.json @@ -2,7 +2,6 @@ "1": { "635a4a": "303429", "c5a54a": "82847c", - "101010": "101010", "ad845a": "6f7367", "315a19": "39270c", "4ac542": "a48d29", @@ -16,7 +15,6 @@ "2": { "635a4a": "243075", "c5a54a": "648cc6", - "101010": "101010", "ad845a": "4663b1", "315a19": "427ab3", "4ac542": "96e4ed", diff --git a/public/images/pokemon/variant/female/19.json b/public/images/pokemon/variant/female/19.json index 8fcdaf9cf80..1d34184ef53 100644 --- a/public/images/pokemon/variant/female/19.json +++ b/public/images/pokemon/variant/female/19.json @@ -4,33 +4,25 @@ "8c4a8c": "4e5e7e", "d69cd6": "88a0b1", "4a2942": "262f4f", - "101010": "101010", "a57308": "cb9287", "e6ce73": "dcb2a1", "634a08": "ae6b69", "efdeb5": "fae4d8", "a5193a": "2d943d", - "cecece": "cecece", - "ffffff": "ffffff", "e65a73": "62cb5c", - "cead63": "e8beae", - "5a5a5a": "5a5a5a" + "cead63": "e8beae" }, "2": { "b573bd": "efdcd1", "8c4a8c": "d6b2a6", "d69cd6": "fff5eb", "4a2942": "865c54", - "101010": "101010", "a57308": "ba476f", "e6ce73": "c6667d", "634a08": "7e3754", "efdeb5": "efb5c0", "a5193a": "5b7277", - "cecece": "cecece", - "ffffff": "ffffff", "e65a73": "89a3a6", - "cead63": "d98a9f", - "5a5a5a": "5a5a5a" + "cead63": "d98a9f" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/female/190.json b/public/images/pokemon/variant/female/190.json index 8c8837946be..cc2b9f91b29 100644 --- a/public/images/pokemon/variant/female/190.json +++ b/public/images/pokemon/variant/female/190.json @@ -1,28 +1,22 @@ { "1": { "52216b": "701523", - "000000": "000000", "bd7bde": "dea95a", "8442ad": "ad452f", "a55ac5": "c47440", "8c6b42": "8c7457", "bd8c63": "bd9a7e", "c5ad6b": "c4b487", - "ffdea5": "ffeccc", - "ffffff": "ffffff", - "adada5": "adada5" + "ffdea5": "ffeccc" }, "2": { "52216b": "807870", - "000000": "000000", "bd7bde": "e5dfdf", "8442ad": "a6a297", "a55ac5": "bfbeb4", "8c6b42": "632339", "bd8c63": "802d44", "c5ad6b": "99455d", - "ffdea5": "ed8286", - "ffffff": "ffffff", - "adada5": "adada5" + "ffdea5": "ed8286" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/female/20.json b/public/images/pokemon/variant/female/20.json index d6c8eab089e..b59ef580ecd 100644 --- a/public/images/pokemon/variant/female/20.json +++ b/public/images/pokemon/variant/female/20.json @@ -7,7 +7,6 @@ "deb54a": "86766e", "c5943a": "644c47", "6b3a00": "331a1b", - "101010": "101010", "ffffff": "fffaf4", "f7f7a5": "fff1d4", "845a29": "956240", @@ -24,7 +23,6 @@ "deb54a": "fff8ef", "c5943a": "e2cbb9", "6b3a00": "7f645c", - "101010": "101010", "ffffff": "fffaf4", "f7f7a5": "c46771", "845a29": "34171d", diff --git a/public/images/pokemon/variant/female/203.json b/public/images/pokemon/variant/female/203.json index a4391436a20..10e0040644a 100644 --- a/public/images/pokemon/variant/female/203.json +++ b/public/images/pokemon/variant/female/203.json @@ -1,7 +1,6 @@ { "1": { "424a73": "351810", - "ffffff": "ffffff", "adb5d6": "8f6f66", "6b8cb5": "512b21", "4a3a3a": "231117", @@ -9,7 +8,6 @@ "9c7b42": "571522", "efde52": "9c3e3e", "9c3a5a": "ab9d75", - "101010": "101010", "ce6b94": "d8d1ad", "947b6b": "1f4062", "635252": "112246", @@ -18,7 +16,6 @@ }, "2": { "424a73": "27091d", - "ffffff": "ffffff", "adb5d6": "c5b0b7", "6b8cb5": "4a1b33", "4a3a3a": "091225", @@ -26,7 +23,6 @@ "9c7b42": "15545d", "efde52": "2a9d8f", "9c3a5a": "52ab5f", - "101010": "101010", "ce6b94": "a8e781", "947b6b": "1a2e43", "635252": "111d34", diff --git a/public/images/pokemon/variant/female/212.json b/public/images/pokemon/variant/female/212.json index 55fcc0858ac..5240f4f81e3 100644 --- a/public/images/pokemon/variant/female/212.json +++ b/public/images/pokemon/variant/female/212.json @@ -2,24 +2,14 @@ "0": { "632929": "215a2d", "f76b6b": "8cce73", - "101010": "101010", - "3a3a4a": "3a3a4a", - "ffffff": "ffffff", "d63a3a": "4a9c53", - "b5b5ce": "b5b5ce", - "9494a5": "9494a5", - "a52929": "2f794e", - "dec510": "dec510", - "9c6b21": "9c6b21" + "a52929": "2f794e" }, "1": { "632929": "2f2962", "f76b6b": "639cf7", - "101010": "101010", "3a3a4a": "3c3c50", - "ffffff": "ffffff", "d63a3a": "4263ef", - "b5b5ce": "b5b5ce", "9494a5": "6262a4", "a52929": "29429c", "dec510": "10bdde", @@ -28,14 +18,9 @@ "2": { "632929": "645117", "f76b6b": "c59f29", - "101010": "101010", "3a3a4a": "282d2c", - "ffffff": "ffffff", "d63a3a": "ffca2a", - "b5b5ce": "b5b5ce", "9494a5": "3c4543", - "a52929": "b88619", - "dec510": "dec510", - "9c6b21": "9c6b21" + "a52929": "b88619" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/female/215.json b/public/images/pokemon/variant/female/215.json index 970270a1c7d..58805d2bc3d 100644 --- a/public/images/pokemon/variant/female/215.json +++ b/public/images/pokemon/variant/female/215.json @@ -7,7 +7,6 @@ "c52973": "3a5760", "f75273": "637696", "42849c": "902738", - "000000": "000000", "a57b3a": "c3701b", "dece73": "ffcd68", "bdbdc5": "c5a080", @@ -23,12 +22,10 @@ "c52973": "3e7ed2", "f75273": "7ac3f0", "42849c": "eab273", - "000000": "000000", "a57b3a": "d04e6d", "dece73": "ff8ce0", "bdbdc5": "a1a0c3", "4a4a4a": "383d51", - "f7f7ff": "f7f7ff", "8cc5ce": "d1d1ee" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/female/217.json b/public/images/pokemon/variant/female/217.json index e09efa5de60..79f8ebdfd22 100644 --- a/public/images/pokemon/variant/female/217.json +++ b/public/images/pokemon/variant/female/217.json @@ -1,47 +1,30 @@ { "0": { - "7b7b8c": "7b7b8c", - "101010": "101010", "634229": "1d3d26", - "ffffff": "ffffff", "945221": "2f6324", "422919": "112114", - "dedede": "dedede", "bd7342": "6a8a46", "ffef84": "f7ffa5", - "b5b5bd": "b5b5bd", "c59c4a": "ceb552", "f7c563": "f7de7b", "841931": "a52942", "de3a5a": "ef526b" }, "1": { - "7b7b8c": "7b7b8c", - "101010": "101010", "634229": "6b1d38", - "ffffff": "ffffff", "945221": "8c2a37", "422919": "2d0e1f", - "dedede": "dedede", "bd7342": "b74543", "ffef84": "f9eddb", - "b5b5bd": "b5b5bd", "c59c4a": "c48e81", - "f7c563": "f2cab8", - "841931": "841931", - "de3a5a": "de3a5a" + "f7c563": "f2cab8" }, "2": { - "7b7b8c": "7b7b8c", - "101010": "101010", "634229": "1e2249", - "ffffff": "ffffff", "945221": "323760", "422919": "111433", - "dedede": "dedede", "bd7342": "46527a", "ffef84": "adf2f7", - "b5b5bd": "b5b5bd", "c59c4a": "45a2f9", "f7c563": "5ccaf2", "841931": "a52942", diff --git a/public/images/pokemon/variant/female/229.json b/public/images/pokemon/variant/female/229.json index 519ca256ec5..60cf3e98a76 100644 --- a/public/images/pokemon/variant/female/229.json +++ b/public/images/pokemon/variant/female/229.json @@ -6,16 +6,11 @@ "a59cad": "a84244", "192129": "402b41", "4a4a52": "85738c", - "000000": "000000", "a55a4a": "ceb0a5", "f79c84": "f8f1e7", "841021": "3b59a1", "31313a": "5c435d", - "ada5b3": "ada5b3", - "632910": "8c6362", - "f8f9ff": "f8f9ff", - "e2e0e3": "e2e0e3", - "9c293a": "9c293a" + "632910": "8c6362" }, "2": { "84738c": "101028", @@ -24,15 +19,12 @@ "a59cad": "223657", "192129": "43343c", "4a4a52": "f8faf3", - "000000": "000000", "a55a4a": "613762", "f79c84": "844d76", "841021": "fe8d53", "31313a": "b3a5a2", "ada5b3": "101028", "632910": "3f2440", - "f8f9ff": "223657", - "e2e0e3": "e2e0e3", - "9c293a": "9c293a" + "f8f9ff": "223657" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/female/232.json b/public/images/pokemon/variant/female/232.json index cb8ad1e06ff..36772bf3f3a 100644 --- a/public/images/pokemon/variant/female/232.json +++ b/public/images/pokemon/variant/female/232.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "6b7373": "7fa0d7", "4a5252": "5f74c7", "3a3a3a": "333a77", @@ -11,8 +10,6 @@ "d6ded6": "f4f4f4", "3a3737": "444b5e", "738484": "6c7488", - "f9f9f9": "f9f9f9", - "d6d6d6": "d6d6d6", "bdc5c5": "cdd1dc", "707f7f": "b6511d", "424242": "7a330e", @@ -21,7 +18,6 @@ "ffffff": "f2db98" }, "2": { - "101010": "101010", "6b7373": "d17e47", "4a5252": "994e30", "3a3a3a": "6f2219", @@ -32,8 +28,6 @@ "d6ded6": "665263", "3a3737": "2c1f2e", "738484": "1e1225", - "f9f9f9": "f9f9f9", - "d6d6d6": "d6d6d6", "bdc5c5": "584158", "707f7f": "1d2a54", "424242": "12123a", diff --git a/public/images/pokemon/variant/female/255.json b/public/images/pokemon/variant/female/255.json index 4637ce061ca..e2cd456df9f 100644 --- a/public/images/pokemon/variant/female/255.json +++ b/public/images/pokemon/variant/female/255.json @@ -3,26 +3,22 @@ "ad8c00": "782a14", "efbd31": "d36f2b", "f7de6b": "f1a545", - "000000": "000000", "ad4210": "318793", "ff8c31": "6bcdb2", "e65a21": "4cada9", "ffad52": "a7ebe2", "7b4a19": "1c2d5b", - "ffffff": "ffffff", "8c5221": "580c0b" }, "2": { "ad8c00": "550d38", "efbd31": "811c3e", "f7de6b": "ad3342", - "000000": "000000", "ad4210": "b3817d", "ff8c31": "f3e5cf", "e65a21": "d3afa0", "ffad52": "fffef6", "7b4a19": "4b2661", - "ffffff": "ffffff", "8c5221": "43082f" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/female/256.json b/public/images/pokemon/variant/female/256.json index 0895f764700..165e18a8148 100644 --- a/public/images/pokemon/variant/female/256.json +++ b/public/images/pokemon/variant/female/256.json @@ -1,44 +1,36 @@ { "1": { "de5a29": "da8923", - "121212": "121212", "ff7b4a": "f7ca4b", "9c3110": "8e3820", "9c7329": "3a888d", - "191919": "191919", "efde73": "c3f4cd", "efbd4a": "84cfc1", "d63131": "9083aa", "962d0d": "605c8d", - "ffffff": "ffffff", "d05325": "414f7b", "6b6b73": "3e3969", "dedece": "9386b8", "9c8c84": "696098", "645455": "3e3969", "5a4a4a": "2c2a44", - "84736b": "574b6e", - "000000": "000000" + "84736b": "574b6e" }, "2": { "de5a29": "cdb09b", - "121212": "121212", "ff7b4a": "fff7e1", "9c3110": "8a685f", "9c7329": "64163c", - "191919": "191919", "efde73": "c44d52", "efbd4a": "962b4a", "d63131": "d3c3ff", "962d0d": "938bd6", - "ffffff": "ffffff", "d05325": "53346f", "6b6b73": "161c2c", "dedece": "494f67", "9c8c84": "2d2e46", "645455": "211d32", "5a4a4a": "ad662b", - "84736b": "e6a653", - "000000": "000000" + "84736b": "e6a653" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/female/257.json b/public/images/pokemon/variant/female/257.json index 7d1e3988e81..06614aa28dd 100644 --- a/public/images/pokemon/variant/female/257.json +++ b/public/images/pokemon/variant/female/257.json @@ -3,7 +3,6 @@ "bdb594": "a8c7da", "948463": "8095b3", "b93e3e": "46649c", - "000000": "000000", "63524a": "55607d", "dedeb5": "f0fbff", "ee5e5e": "598dc1", @@ -27,7 +26,6 @@ "bdb594": "a43b45", "948463": "772436", "b93e3e": "55153a", - "000000": "000000", "63524a": "5b1832", "dedeb5": "cc6155", "ee5e5e": "772040", diff --git a/public/images/pokemon/variant/female/3.json b/public/images/pokemon/variant/female/3.json index de2c52f6003..a131e48f154 100644 --- a/public/images/pokemon/variant/female/3.json +++ b/public/images/pokemon/variant/female/3.json @@ -8,15 +8,13 @@ "ff7b73": "712f8f", "bd6b31": "168a69", "de4242": "3f1375", - "101010": "101010", "105242": "190038", "107b6b": "9e1976", "2e5519": "38001c", "5a9c3a": "b34952", "5ad6c5": "f062a4", "21b59c": "de3592", - "84de7b": "ff745e", - "ffffff": "ffffff" + "84de7b": "ff745e" }, "2": { "843100": "420514", @@ -27,7 +25,6 @@ "ff7b73": "9db042", "bd6b31": "852a41", "de4242": "3c8227", - "101010": "101010", "105242": "381601", "107b6b": "d15d04", "2e5519": "011c38", @@ -35,7 +32,6 @@ "5ad6c5": "faa405", "21b59c": "fa8405", "84de7b": "80ced9", - "ffffff": "ffffff", "2f561a": "011b34" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/female/307.json b/public/images/pokemon/variant/female/307.json index d3e6a2437f1..2037cf72054 100644 --- a/public/images/pokemon/variant/female/307.json +++ b/public/images/pokemon/variant/female/307.json @@ -1,34 +1,25 @@ { "1": { "7b6b6b": "7a5f5f", - "000000": "000000", "e6dede": "deccc3", "b5adad": "9f8383", - "4a4242": "4a4242", - "ffffff": "ffffff", "3a4a5a": "5a2859", "b5d6ff": "f4a8c8", "6bcee6": "ce7bb0", "d65252": "d65287", - "84424a": "84424a", "3a84b5": "7e4377", - "5aa5ce": "b95ba1", - "d65273": "d65273" + "5aa5ce": "b95ba1" }, "2": { "7b6b6b": "314b76", - "000000": "000000", "e6dede": "c2cfdb", "b5adad": "6f89aa", "4a4242": "1e2f52", - "ffffff": "ffffff", "3a4a5a": "113926", "b5d6ff": "7edfb7", "6bcee6": "66c3a3", "d65252": "c067c7", - "84424a": "84424a", "3a84b5": "375a47", - "5aa5ce": "579578", - "d65273": "d65273" + "5aa5ce": "579578" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/female/308.json b/public/images/pokemon/variant/female/308.json index 02dc68c8d60..e828896b759 100644 --- a/public/images/pokemon/variant/female/308.json +++ b/public/images/pokemon/variant/female/308.json @@ -1,36 +1,30 @@ { "1": { "84424a": "59141d", - "101010": "101010", "e6738c": "8b2e2b", "ef9ca5": "a53835", "ce5a73": "83272c", "52424a": "5a4357", "dedede": "e0cdd9", - "8c848c": "8c848c", "ada5ad": "966f8d", "c5c5c5": "a88da0", "f7de84": "ee9bd5", "efbd5a": "ce5cb6", "b54a5a": "83272c", - "ffffff": "ffffff", "a57329": "722966" }, "2": { "84424a": "461f5d", - "101010": "101010", "e6738c": "7d5187", "ef9ca5": "a37aac", "ce5a73": "71467d", "52424a": "1f344a", "dedede": "cbd0d6", - "8c848c": "8c848c", "ada5ad": "6c7d9e", "c5c5c5": "9faab9", "f7de84": "5abbef", "efbd5a": "3a8dca", "b54a5a": "633971", - "ffffff": "ffffff", "a57329": "205a9e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/female/315.json b/public/images/pokemon/variant/female/315.json index 2e85f36b55f..b05a8cd0379 100644 --- a/public/images/pokemon/variant/female/315.json +++ b/public/images/pokemon/variant/female/315.json @@ -4,7 +4,6 @@ "3a5229": "0b2337", "a5314a": "9c5910", "a5de73": "4d8393", - "000000": "000000", "f75a84": "d28f31", "ffa5bd": "efc754", "73c55a": "215569", @@ -21,7 +20,6 @@ "3a5229": "2f1c52", "a5314a": "1d6970", "a5de73": "9e76bb", - "000000": "000000", "f75a84": "55b9af", "ffa5bd": "83e4d0", "73c55a": "764f9c", diff --git a/public/images/pokemon/variant/female/369.json b/public/images/pokemon/variant/female/369.json index 1c2750e0d0f..4366c16b465 100644 --- a/public/images/pokemon/variant/female/369.json +++ b/public/images/pokemon/variant/female/369.json @@ -3,8 +3,6 @@ "6b5242": "1e2432", "efcea5": "757e99", "ceb594": "4b5368", - "52423a": "52423a", - "000000": "000000", "524242": "91743c", "b59c9c": "fcef8e", "9c847b": "e0cc66", @@ -20,8 +18,6 @@ "6b5242": "3a421e", "efcea5": "96a558", "ceb594": "758745", - "52423a": "52423a", - "000000": "000000", "524242": "32214a", "b59c9c": "6954a2", "9c847b": "543d7d", diff --git a/public/images/pokemon/variant/female/399.json b/public/images/pokemon/variant/female/399.json index 673550a23b9..cb27d48e595 100644 --- a/public/images/pokemon/variant/female/399.json +++ b/public/images/pokemon/variant/female/399.json @@ -1,30 +1,22 @@ { "1": { - "423110": "423110", "9c6331": "d46378", "c58c42": "e5a5bb", "634a31": "70323f", - "101010": "101010", "cebd84": "eba978", "ffefbd": "fff5d1", - "ffffff": "ffffff", "5a4229": "824561", "ef5a4a": "ffa488", - "cec5c5": "b7b9d0", - "848484": "848484" + "cec5c5": "b7b9d0" }, "2": { "423110": "101e42", "9c6331": "3e5ca8", "c58c42": "617dda", "634a31": "313d63", - "101010": "101010", "cebd84": "8497ce", "ffefbd": "bdcfff", - "ffffff": "ffffff", "5a4229": "42295a", - "ef5a4a": "4a9bef", - "cec5c5": "cec5c5", - "848484": "848484" + "ef5a4a": "4a9bef" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/female/400.json b/public/images/pokemon/variant/female/400.json index 80cb090f619..486884150fe 100644 --- a/public/images/pokemon/variant/female/400.json +++ b/public/images/pokemon/variant/female/400.json @@ -1,14 +1,10 @@ { "1": { - "5a3a31": "5a3a31", "bd844a": "dba0ac", - "101010": "101010", "8c5a31": "c46269", "e6d69c": "fff5d1", "ad947b": "bd9171", "c5c5b5": "b7b9d0", - "ffffff": "ffffff", - "3a3129": "3a3129", "63523a": "824561", "de4a4a": "ffa488", "423a31": "3e3040" @@ -16,12 +12,10 @@ "2": { "5a3a31": "313d63", "bd844a": "617dda", - "101010": "101010", "8c5a31": "3e5ca8", "e6d69c": "bdcfff", "ad947b": "8497ce", "c5c5b5": "b5b6c5", - "ffffff": "ffffff", "3a3129": "2c183f", "63523a": "42295a", "de4a4a": "4a9bef", diff --git a/public/images/pokemon/variant/female/401.json b/public/images/pokemon/variant/female/401.json index eea4306d842..8d2a77165c1 100644 --- a/public/images/pokemon/variant/female/401.json +++ b/public/images/pokemon/variant/female/401.json @@ -3,7 +3,6 @@ "524a42": "cf8439", "9c9c94": "ffeea0", "7b7363": "f6bb47", - "101010": "101010", "8c6b08": "272344", "ffefad": "56769d", "e6c56b": "454389", @@ -19,7 +18,6 @@ "524a42": "453565", "9c9c94": "ae85ba", "7b7363": "71558c", - "101010": "101010", "8c6b08": "784341", "ffefad": "ffd47c", "e6c56b": "e59a75", @@ -28,7 +26,6 @@ "6b4221": "853360", "e66b63": "70af85", "b54a3a": "2f9378", - "fff2be": "fff2be", "f3d277": "ffd8ed" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/female/407.json b/public/images/pokemon/variant/female/407.json index c25e377d5de..d6a2535891e 100644 --- a/public/images/pokemon/variant/female/407.json +++ b/public/images/pokemon/variant/female/407.json @@ -4,7 +4,6 @@ "ffffff": "fff1cb", "297b52": "153a51", "d6cede": "e1bf95", - "000000": "000000", "7b3a5a": "9c5910", "bd426b": "d28f31", "ff6384": "efc754", @@ -21,7 +20,6 @@ "ffffff": "fcf8ff", "297b52": "503277", "d6cede": "d6c7e6", - "000000": "000000", "7b3a5a": "18585e", "bd426b": "55b9af", "ff6384": "83e4d0", diff --git a/public/images/pokemon/variant/female/41.json b/public/images/pokemon/variant/female/41.json index 08446ef4908..2660879e7ae 100644 --- a/public/images/pokemon/variant/female/41.json +++ b/public/images/pokemon/variant/female/41.json @@ -1,26 +1,20 @@ { "1": { - "101010": "101010", "637bb5": "37326f", "4a427b": "14093b", "bdceff": "868ecc", "8cb5ef": "4e538f", "b5529c": "cc7b32", "73215a": "aa4c18", - "d673bd": "f0ad57", - "ffffff": "ffffff", - "636363": "636363" + "d673bd": "f0ad57" }, "2": { - "101010": "101010", "637bb5": "916c8b", "4a427b": "4d3259", "bdceff": "e8d2e6", "8cb5ef": "cbabca", "b5529c": "94241c", "73215a": "670f10", - "d673bd": "bc3b1d", - "ffffff": "ffffff", - "636363": "636363" + "d673bd": "bc3b1d" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/female/418.json b/public/images/pokemon/variant/female/418.json index 628252e5296..7100520550d 100644 --- a/public/images/pokemon/variant/female/418.json +++ b/public/images/pokemon/variant/female/418.json @@ -3,12 +3,8 @@ "ad5a21": "7d1e39", "ef7b19": "9c354f", "7b4221": "611b35", - "191919": "191919", "dec584": "cea49d", "f7f7b5": "e8d4cc", - "ffffff": "ffffff", - "6b6b6b": "6b6b6b", - "d6d6ce": "d6d6ce", "ffde00": "d2e5e8", "9c6300": "995e5c", "e6a531": "a0b3ba", @@ -20,12 +16,9 @@ "ad5a21": "cd91aa", "ef7b19": "e8c3ce", "7b4221": "84466b", - "191919": "191919", "dec584": "8a4370", "f7f7b5": "a8688f", - "ffffff": "ffffff", "6b6b6b": "432e38", - "d6d6ce": "d6d6ce", "ffde00": "eda342", "9c6300": "642858", "e6a531": "ca6e26", diff --git a/public/images/pokemon/variant/female/419.json b/public/images/pokemon/variant/female/419.json index 1ea1637ff2c..6572441f99c 100644 --- a/public/images/pokemon/variant/female/419.json +++ b/public/images/pokemon/variant/female/419.json @@ -2,7 +2,6 @@ "2": { "7b4221": "9e6a86", "ef7b19": "debfc8", - "191919": "191919", "ce6b19": "dca5b5", "ad5a21": "cd91aa", "9c6300": "672e5d", @@ -11,7 +10,6 @@ "99693c": "8e410e", "e6a531": "d4812f", "6b6b6b": "726481", - "ffffff": "ffffff", "ffde00": "eda342", "2163a5": "4b2a70", "63bde6": "744d99" diff --git a/public/images/pokemon/variant/female/42.json b/public/images/pokemon/variant/female/42.json index 000e127793e..fbef4154432 100644 --- a/public/images/pokemon/variant/female/42.json +++ b/public/images/pokemon/variant/female/42.json @@ -6,11 +6,7 @@ "631052": "892d03", "ce6bb5": "f1a139", "adceff": "666fb4", - "000000": "000000", "ad52ad": "d5711b", - "636363": "636363", - "ffffff": "ffffff", - "d6d6d6": "d6d6d6", "943a7b": "af4e0c" }, "2": { @@ -20,11 +16,7 @@ "631052": "54070c", "ce6bb5": "bc3b1d", "adceff": "e8d2e6", - "000000": "000000", "ad52ad": "94241c", - "636363": "636363", - "ffffff": "ffffff", - "d6d6d6": "d6d6d6", "943a7b": "6c1314" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/female/424.json b/public/images/pokemon/variant/female/424.json index 4e00c3c1234..eace71f2a3a 100644 --- a/public/images/pokemon/variant/female/424.json +++ b/public/images/pokemon/variant/female/424.json @@ -3,7 +3,6 @@ "734a42": "415c73", "ad5242": "428dad", "ff735a": "5ae9ff", - "101010": "101010", "debd73": "c4b487", "ffefa5": "ffeccc", "8c6b42": "8c7457", @@ -13,15 +12,12 @@ "9c4ac5": "c47440", "bd9473": "bd9a7e", "ab5141": "293b94", - "ffffff": "ffffff", - "fc7158": "3973e5", - "adada5": "adada5" + "fc7158": "3973e5" }, "2": { "734a42": "593802", "ad5242": "946212", "ff735a": "ffb338", - "101010": "101010", "debd73": "99455d", "ffefa5": "ed8286", "8c6b42": "632339", @@ -31,8 +27,6 @@ "9c4ac5": "bfbeb4", "bd9473": "802d44", "ab5141": "8c1c2f", - "ffffff": "ffffff", - "fc7158": "b33636", - "adada5": "adada5" + "fc7158": "b33636" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/female/44.json b/public/images/pokemon/variant/female/44.json index afaf4860bf5..0e017870600 100644 --- a/public/images/pokemon/variant/female/44.json +++ b/public/images/pokemon/variant/female/44.json @@ -1,7 +1,6 @@ { "1": { "5a2900": "162486", - "101010": "101010", "ad523a": "4d75b6", "843a19": "2c489f", "ce734a": "7aa8d2", @@ -17,7 +16,6 @@ }, "2": { "5a2900": "680b10", - "101010": "101010", "ad523a": "bd4e2d", "843a19": "8d1e11", "ce734a": "d98247", diff --git a/public/images/pokemon/variant/female/443.json b/public/images/pokemon/variant/female/443.json index d1de70b1e26..b858d91da50 100644 --- a/public/images/pokemon/variant/female/443.json +++ b/public/images/pokemon/variant/female/443.json @@ -5,15 +5,9 @@ "8cc5d6": "42a5f7", "426b84": "085284", "101010": "101921", - "42d6de": "42d6de", - "c5ced6": "c5ced6", - "3aadc5": "3aadc5", - "ffffff": "ffffff", - "5a6363": "5a6363", "7b1910": "731029", "ad3a10": "a57c10", "de5a29": "e6c529", - "ce7373": "ce7373", "5a1000": "524200" }, "1": { @@ -23,10 +17,7 @@ "426b84": "522521", "101010": "101921", "42d6de": "54b0ff", - "c5ced6": "c5ced6", "3aadc5": "2878e1", - "ffffff": "ffffff", - "5a6363": "5a6363", "7b1910": "811c60", "ad3a10": "92a9b2", "de5a29": "d9f0f1", @@ -40,10 +31,7 @@ "426b84": "223a4a", "101010": "101921", "42d6de": "6fe6a3", - "c5ced6": "c5ced6", "3aadc5": "23b8a8", - "ffffff": "ffffff", - "5a6363": "5a6363", "7b1910": "7b1a43", "ad3a10": "be472f", "de5a29": "dd845e", diff --git a/public/images/pokemon/variant/female/444.json b/public/images/pokemon/variant/female/444.json index c000a06a812..fbfdd2f5b31 100644 --- a/public/images/pokemon/variant/female/444.json +++ b/public/images/pokemon/variant/female/444.json @@ -11,10 +11,7 @@ "de9c19": "e53d3f", "5a1000": "521000", "ad314a": "ad7b08", - "c5ced6": "c5ced6", - "ffffff": "ffffff", - "de5a29": "f7b834", - "737b84": "737b84" + "de5a29": "f7b834" }, "1": { "102952": "3d0a17", @@ -28,10 +25,7 @@ "de9c19": "d9900e", "5a1000": "211e33", "ad314a": "829ca6", - "c5ced6": "c5ced6", - "ffffff": "ffffff", - "de5a29": "c2dedf", - "737b84": "737b84" + "de5a29": "c2dedf" }, "2": { "102952": "092136", @@ -45,9 +39,6 @@ "de9c19": "2c8bf7", "5a1000": "521000", "ad314a": "be472f", - "c5ced6": "c5ced6", - "ffffff": "ffffff", - "de5a29": "ee723e", - "737b84": "737b84" + "de5a29": "ee723e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/female/445.json b/public/images/pokemon/variant/female/445.json index 0dfa20b8d25..936369768de 100644 --- a/public/images/pokemon/variant/female/445.json +++ b/public/images/pokemon/variant/female/445.json @@ -6,12 +6,7 @@ "292952": "091f4e", "5a63ad": "33719e", "ffd619": "42d6de", - "737b84": "737b84", - "101010": "101010", - "ffffff": "ffffff", - "c5ced6": "c5ced6", "6b3a5a": "6b4a29", - "bd737b": "bd737b", "e64a31": "f7ac34", "5a1000": "502209", "bd3a42": "b2630f" @@ -23,12 +18,7 @@ "292952": "3d0a17", "5a63ad": "deae7a", "ffd619": "4caaff", - "737b84": "737b84", - "101010": "101010", - "ffffff": "ffffff", - "c5ced6": "c5ced6", "6b3a5a": "6b4a29", - "bd737b": "bd737b", "e64a31": "dce8e8", "5a1000": "393648", "bd3a42": "9fb6bf" @@ -40,12 +30,7 @@ "292952": "051a2e", "5a63ad": "2f434b", "ffd619": "6fe6a3", - "737b84": "737b84", - "101010": "101010", - "ffffff": "ffffff", - "c5ced6": "c5ced6", "6b3a5a": "6b4a29", - "bd737b": "bd737b", "e64a31": "ee723e", "5a1000": "521000", "bd3a42": "be472f" diff --git a/public/images/pokemon/variant/female/45.json b/public/images/pokemon/variant/female/45.json index 0da9343d254..65f2f6544ff 100644 --- a/public/images/pokemon/variant/female/45.json +++ b/public/images/pokemon/variant/female/45.json @@ -1,6 +1,5 @@ { "1": { - "101010": "101010", "731910": "091d79", "f78c8c": "8cbef7", "f7adb5": "add8f7", @@ -18,7 +17,6 @@ "7384a5": "966fbb" }, "2": { - "101010": "101010", "731910": "97696f", "f78c8c": "ebe8d1", "f7adb5": "51030e", diff --git a/public/images/pokemon/variant/female/456.json b/public/images/pokemon/variant/female/456.json index 68b30fe1a31..d4578b7e865 100644 --- a/public/images/pokemon/variant/female/456.json +++ b/public/images/pokemon/variant/female/456.json @@ -2,7 +2,6 @@ "1": { "526b8c": "966764", "94d6e6": "f3e1c6", - "101010": "101010", "7394ad": "cda38c", "833171": "d3633a", "29293a": "7e2023", @@ -10,14 +9,12 @@ "c5e6f7": "fffbf2", "c54591": "f19e53", "426b84": "e2895d", - "efffff": "efffff", "c54a94": "8bbcd9", "ad8cbd": "f6c37c" }, "2": { "526b8c": "162743", "94d6e6": "27616f", - "101010": "101010", "7394ad": "1c405b", "833171": "349b8b", "29293a": "b66736", @@ -25,7 +22,6 @@ "c5e6f7": "429b91", "c54591": "5fd0a4", "426b84": "fff8b0", - "efffff": "efffff", "c54a94": "7b1615", "ad8cbd": "38a493" } diff --git a/public/images/pokemon/variant/female/457.json b/public/images/pokemon/variant/female/457.json index 158974b5d96..a1b8f7ff5fa 100644 --- a/public/images/pokemon/variant/female/457.json +++ b/public/images/pokemon/variant/female/457.json @@ -1,7 +1,6 @@ { "1": { "526b8c": "966764", - "101010": "101010", "c5e6f7": "fffbf2", "94d6e6": "f3e1c6", "29293a": "a42d2f", @@ -10,12 +9,10 @@ "c54591": "ffc369", "9e357b": "c7703c", "73427b": "6f75a0", - "c54a94": "aadff3", - "efffff": "efffff" + "c54a94": "aadff3" }, "2": { "526b8c": "162743", - "101010": "101010", "c5e6f7": "429b91", "94d6e6": "27616f", "29293a": "ffa849", @@ -24,7 +21,6 @@ "c54591": "50c2a1", "9e357b": "2e9b8f", "73427b": "7b1213", - "c54a94": "983121", - "efffff": "efffff" + "c54a94": "983121" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/female/461.json b/public/images/pokemon/variant/female/461.json index 5ff168f0e65..5c441ed7979 100644 --- a/public/images/pokemon/variant/female/461.json +++ b/public/images/pokemon/variant/female/461.json @@ -4,7 +4,6 @@ "c52973": "3a3d60", "ff94a5": "94a3c5", "f75273": "636896", - "101010": "101010", "424a84": "691043", "7384bd": "ac3755", "6b6bad": "8b274b", @@ -21,12 +20,10 @@ "c52973": "3d81c5", "ff94a5": "78ebfc", "f75273": "5cb0eb", - "101010": "101010", "424a84": "ecaa84", "7384bd": "ffeed4", "6b6bad": "ffd3a7", "293152": "78462e", - "ffffff": "ffffff", "c58c08": "8f1a8d", "ffd642": "e6509f", "c5bdce": "b3cedb", diff --git a/public/images/pokemon/variant/female/464.json b/public/images/pokemon/variant/female/464.json index e97690927a9..adeefb45d27 100644 --- a/public/images/pokemon/variant/female/464.json +++ b/public/images/pokemon/variant/female/464.json @@ -1,25 +1,18 @@ { "1": { - "6b6373": "6b6373", "3a3a4a": "3b2d40", "5a4a63": "514259", - "101010": "101010", - "efefff": "efefff", "29293a": "1f1028", "523100": "3b1f58", "7b6b7b": "6e5d7b", - "948cad": "948cad", "943a00": "4c2f6e", "ef5200": "6f4d9f", - "cecede": "cecede", - "ad2900": "ad2900", "bd4200": "60418a" }, "2": { "6b6373": "b66360", "3a3a4a": "701f38", "5a4a63": "8f2c41", - "101010": "101010", "efefff": "ffdfd1", "29293a": "442339", "523100": "492133", diff --git a/public/images/pokemon/variant/female/592.json b/public/images/pokemon/variant/female/592.json index 7cc683367b9..45c49569a9e 100644 --- a/public/images/pokemon/variant/female/592.json +++ b/public/images/pokemon/variant/female/592.json @@ -1,34 +1,28 @@ { "0": { "7b3a52": "622a1e", - "101010": "101010", "d6b5bd": "f2bba3", "ffdee6": "ffe7df", "bd84a5": "eb8b4d", "ffb5d6": "ffb868", - "ffffff": "ffffff", "ad3142": "de4a29", "5aa5c5": "ffb93c" }, "1": { "7b3a52": "302a85", - "101010": "101010", "d6b5bd": "9d92ce", "ffdee6": "e3deff", "bd84a5": "5052c1", "ffb5d6": "6270e3", - "ffffff": "ffffff", "ad3142": "de4a29", "5aa5c5": "6c00d0" }, "2": { "7b3a52": "4e1b55", - "101010": "101010", "d6b5bd": "703573", "ffdee6": "a65ea3", "bd84a5": "efacd1", "ffb5d6": "ffdbec", - "ffffff": "ffffff", "ad3142": "c04ba4", "5aa5c5": "241098" } diff --git a/public/images/pokemon/variant/female/593.json b/public/images/pokemon/variant/female/593.json index 885e4f12e4d..66366bcfe8e 100644 --- a/public/images/pokemon/variant/female/593.json +++ b/public/images/pokemon/variant/female/593.json @@ -1,35 +1,27 @@ { "0": { "7b3a52": "622a1e", - "101010": "101010", "c5a5bd": "f2bba3", "ffdef7": "ffe7df", "d684b5": "eb8b4d", "ffa5ce": "ffb868", - "de4a29": "de4a29", - "29529c": "622a1e", - "ffffff": "ffffff" + "29529c": "622a1e" }, "1": { "7b3a52": "302a85", - "101010": "101010", "c5a5bd": "9d92ce", "ffdef7": "e3deff", "d684b5": "5052c1", "ffa5ce": "6270e3", - "de4a29": "e267c8", - "29529c": "29529c", - "ffffff": "ffffff" + "de4a29": "e267c8" }, "2": { "7b3a52": "4e1b55", - "101010": "101010", "c5a5bd": "703573", "ffdef7": "a65ea3", "d684b5": "efacd1", "ffa5ce": "ffdbec", "de4a29": "c04ba4", - "29529c": "241098", - "ffffff": "ffffff" + "29529c": "241098" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/female/6215.json b/public/images/pokemon/variant/female/6215.json index 99e0c880142..56ee351cd66 100644 --- a/public/images/pokemon/variant/female/6215.json +++ b/public/images/pokemon/variant/female/6215.json @@ -1,7 +1,6 @@ { "1": { "503678": "0f5d6d", - "080808": "080808", "514a80": "402010", "956cbe": "31dabb", "9c9bce": "ae8976", @@ -12,13 +11,10 @@ "ffde7b": "a7a7a7", "584d80": "562627", "28234b": "220d0a", - "c52973": "ea903f", - "bdbdc5": "bdbdc5", - "f6f6ff": "f6f6ff" + "c52973": "ea903f" }, "2": { "503678": "601522", - "080808": "080808", "514a80": "14273a", "956cbe": "cc5427", "9c9bce": "3c8775", @@ -29,8 +25,6 @@ "ffde7b": "ffe07e", "584d80": "1c3942", "28234b": "0a191e", - "c52973": "f49633", - "bdbdc5": "bdbdc5", - "f6f6ff": "f6f6ff" + "c52973": "f49633" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/female/84.json b/public/images/pokemon/variant/female/84.json index 19da28cb8c1..92ee4e872f8 100644 --- a/public/images/pokemon/variant/female/84.json +++ b/public/images/pokemon/variant/female/84.json @@ -4,9 +4,6 @@ "946b5a": "3a8951", "dead73": "a5e6a0", "bd8c52": "65bf75", - "636363": "636363", - "ffffff": "ffffff", - "101010": "101010", "a5844a": "bba689", "635210": "7a614c", "efdead": "ece4ce", @@ -18,8 +15,6 @@ "dead73": "c35d6a", "bd8c52": "9b374e", "636363": "3a2050", - "ffffff": "ffffff", - "101010": "101010", "a5844a": "af85a2", "635210": "4a2240", "efdead": "e7cedb", @@ -31,8 +26,6 @@ "dead73": "b0ebed", "bd8c52": "7abcc7", "636363": "7a355d", - "ffffff": "ffffff", - "101010": "101010", "a5844a": "4a1e41", "635210": "391436", "efdead": "884b71", diff --git a/public/images/pokemon/variant/female/85.json b/public/images/pokemon/variant/female/85.json index 9f78ce39fae..7a8d643d5ac 100644 --- a/public/images/pokemon/variant/female/85.json +++ b/public/images/pokemon/variant/female/85.json @@ -1,13 +1,8 @@ { "0": { - "424242": "424242", - "848484": "848484", - "000000": "000000", "5a4221": "1b4e31", "ce9c52": "65bf75", "a57b5a": "3a8951", - "ffffff": "ffffff", - "d6cece": "d6cece", "635a42": "7a614c", "efdead": "ece4ce", "b5a57b": "bba689", @@ -19,12 +14,9 @@ "1": { "424242": "1c1d49", "848484": "2e3260", - "000000": "000000", "5a4221": "4e0d2f", "ce9c52": "9b374e", "a57b5a": "762141", - "ffffff": "ffffff", - "d6cece": "d6cece", "635a42": "4a2240", "efdead": "e7cedb", "b5a57b": "af85a2", @@ -36,12 +28,9 @@ "2": { "424242": "621e2a", "848484": "973d41", - "000000": "000000", "5a4221": "2e4c6c", "ce9c52": "94d1db", "a57b5a": "6a9dbf", - "ffffff": "ffffff", - "d6cece": "d6cece", "635a42": "391436", "efdead": "784766", "b5a57b": "54284b", From 3b2753f27c520f893599c0a6e380516fefebfe56 Mon Sep 17 00:00:00 2001 From: Lugiad <2070109+Adri1@users.noreply.github.com> Date: Fri, 23 May 2025 05:14:52 +0200 Subject: [PATCH 158/262] [i18n] Moved Ball "Cancel" label to a different locale file (#5866) --- src/ui/ball-ui-handler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/ball-ui-handler.ts b/src/ui/ball-ui-handler.ts index eb7c208662a..66d7847213f 100644 --- a/src/ui/ball-ui-handler.ts +++ b/src/ui/ball-ui-handler.ts @@ -32,7 +32,7 @@ export default class BallUiHandler extends UiHandler { for (let pb = 0; pb < Object.keys(globalScene.pokeballCounts).length; pb++) { optionsTextContent += `${getPokeballName(pb)}\n`; } - optionsTextContent += i18next.t("pokeball:cancel"); + optionsTextContent += i18next.t("commandUiHandler:ballCancel"); const optionsText = addTextObject(0, 0, optionsTextContent, TextStyle.WINDOW, { align: "right", maxLines: 6 }); const optionsTextWidth = optionsText.displayWidth; this.pokeballSelectContainer = globalScene.add.container( From a0484bbde1cdb81f648703e86af1b93b7d599730 Mon Sep 17 00:00:00 2001 From: Madmadness65 <59298170+Madmadness65@users.noreply.github.com> Date: Fri, 23 May 2025 02:36:30 -0500 Subject: [PATCH 159/262] [Item] Add Deep Sea Scale & Deep Sea Tooth items (#5078) * Add Deep Sea Scale & Tooth items Also changes Clamperl's evolution method from gender-specific to requiring one of the Deep Sea items to be held. * Move Deep Sea items to Great tier Also gives every species stat booster item a `rare` boolean to split these items from the rest of the species stat booster items. Updated the existing tests accordingly to account for the split. * Reduce Great tier species booster item weight * Fix global scene on evolution conditions * Merge branch 'beta' into deep-sea-items * Change how the held item is found in evolution condition It should no longer look through the entire party's modifiers when seeing if Clamperl is eligible to use a Linking Cord. * Fix wrong type being boosted --------- Co-authored-by: damocleas Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> --- src/data/balance/pokemon-evolutions.ts | 11 ++++--- src/modifier/modifier-type.ts | 45 ++++++++++++++++++++------ test/items/light_ball.test.ts | 10 +++--- test/items/metal_powder.test.ts | 10 +++--- test/items/quick_powder.test.ts | 10 +++--- test/items/thick_club.test.ts | 14 ++++---- 6 files changed, 64 insertions(+), 36 deletions(-) diff --git a/src/data/balance/pokemon-evolutions.ts b/src/data/balance/pokemon-evolutions.ts index 64409c3c989..cf1e4061987 100644 --- a/src/data/balance/pokemon-evolutions.ts +++ b/src/data/balance/pokemon-evolutions.ts @@ -9,14 +9,14 @@ import { Nature } from "#enums/nature"; import { Biome } from "#enums/biome"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import { TimeOfDay } from "#enums/time-of-day"; -import { DamageMoneyRewardModifier, ExtraModifierModifier, MoneyMultiplierModifier, TempExtraModifierModifier } from "#app/modifier/modifier"; import { SpeciesFormKey } from "#enums/species-form-key"; +import { TimeOfDay } from "#enums/time-of-day"; +import { DamageMoneyRewardModifier, ExtraModifierModifier, MoneyMultiplierModifier, SpeciesStatBoosterModifier, TempExtraModifierModifier } from "#app/modifier/modifier"; +import type { SpeciesStatBoosterModifierType } from "#app/modifier/modifier-type"; import { speciesStarterCosts } from "./starters"; import i18next from "i18next"; import { initI18n } from "#app/plugins/i18n"; - export enum SpeciesWildEvolutionDelay { NONE, SHORT, @@ -1793,8 +1793,9 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.DUSKNOIR, 1, EvolutionItem.REAPER_CLOTH, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.CLAMPERL]: [ - new SpeciesEvolution(Species.HUNTAIL, 1, EvolutionItem.LINKING_CORD, new GenderEvolutionCondition(Gender.MALE /* Deep Sea Tooth */), SpeciesWildEvolutionDelay.VERY_LONG), - new SpeciesEvolution(Species.GOREBYSS, 1, EvolutionItem.LINKING_CORD, new GenderEvolutionCondition(Gender.FEMALE /* Deep Sea Scale */), SpeciesWildEvolutionDelay.VERY_LONG) + // TODO: Change the SpeciesEvolutionConditions here to use a bespoke HeldItemEvolutionCondition after the modifier rework + new SpeciesEvolution(Species.HUNTAIL, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => p.getHeldItems().some(m => m instanceof SpeciesStatBoosterModifier && (m.type as SpeciesStatBoosterModifierType).key === "DEEP_SEA_TOOTH")), SpeciesWildEvolutionDelay.VERY_LONG), + new SpeciesEvolution(Species.GOREBYSS, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => p.getHeldItems().some(m => m instanceof SpeciesStatBoosterModifier && (m.type as SpeciesStatBoosterModifierType).key === "DEEP_SEA_SCALE")), SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.BOLDORE]: [ new SpeciesEvolution(Species.GIGALITH, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 4c61123eb2d..912e12f19dc 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -873,7 +873,7 @@ export class SpeciesStatBoosterModifierType extends PokemonHeldItemModifierType implements GeneratedPersistentModifierType { - private key: SpeciesStatBoosterItem; + public key: SpeciesStatBoosterItem; constructor(key: SpeciesStatBoosterItem) { const item = SpeciesStatBoosterModifierTypeGenerator.items[key]; @@ -1440,34 +1440,59 @@ class SpeciesStatBoosterModifierTypeGenerator extends ModifierTypeGenerator { stats: [Stat.ATK, Stat.SPATK], multiplier: 2, species: [Species.PIKACHU], + rare: true, }, THICK_CLUB: { stats: [Stat.ATK], multiplier: 2, species: [Species.CUBONE, Species.MAROWAK, Species.ALOLA_MAROWAK], + rare: true, }, METAL_POWDER: { stats: [Stat.DEF], multiplier: 2, species: [Species.DITTO], + rare: true, }, QUICK_POWDER: { stats: [Stat.SPD], multiplier: 2, species: [Species.DITTO], + rare: true, + }, + DEEP_SEA_SCALE: { + stats: [Stat.SPDEF], + multiplier: 2, + species: [Species.CLAMPERL], + rare: false, + }, + DEEP_SEA_TOOTH: { + stats: [Stat.SPATK], + multiplier: 2, + species: [Species.CLAMPERL], + rare: false, }, }; - constructor() { + constructor(rare: boolean) { super((party: Pokemon[], pregenArgs?: any[]) => { const items = SpeciesStatBoosterModifierTypeGenerator.items; if (pregenArgs && pregenArgs.length === 1 && pregenArgs[0] in items) { return new SpeciesStatBoosterModifierType(pregenArgs[0] as SpeciesStatBoosterItem); } - const values = Object.values(items); - const keys = Object.keys(items); - const weights = keys.map(() => 0); + // Get a pool of items based on the rarity. + const keys: (keyof SpeciesStatBoosterItem)[] = []; + const values: (typeof items)[keyof typeof items][] = []; + const weights: number[] = []; + for (const [key, val] of Object.entries(SpeciesStatBoosterModifierTypeGenerator.items)) { + if (val.rare !== rare) { + continue; + } + values.push(val); + keys.push(key as keyof SpeciesStatBoosterItem); + weights.push(0); + } for (const p of party) { const speciesId = p.getSpeciesForm(true).speciesId; @@ -1846,7 +1871,7 @@ export type GeneratorModifierOverride = { count?: number; } & ( | { - name: keyof Pick; + name: keyof Pick; type?: SpeciesStatBoosterItem; } | { @@ -1874,7 +1899,7 @@ export type GeneratorModifierOverride = { type?: EvolutionItem; } | { - name: keyof Pick; + name: keyof Pick; type?: FormChangeItem; } | { @@ -1977,7 +2002,8 @@ export const modifierTypes = { SUPER_LURE: () => new DoubleBattleChanceBoosterModifierType("modifierType:ModifierType.SUPER_LURE", "super_lure", 15), MAX_LURE: () => new DoubleBattleChanceBoosterModifierType("modifierType:ModifierType.MAX_LURE", "max_lure", 30), - SPECIES_STAT_BOOSTER: () => new SpeciesStatBoosterModifierTypeGenerator(), + SPECIES_STAT_BOOSTER: () => new SpeciesStatBoosterModifierTypeGenerator(false), + RARE_SPECIES_STAT_BOOSTER: () => new SpeciesStatBoosterModifierTypeGenerator(true), TEMP_STAT_STAGE_BOOSTER: () => new TempStatStageBoosterModifierTypeGenerator(), @@ -2617,6 +2643,7 @@ const modifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.DIRE_HIT, 4), new WeightedModifierType(modifierTypes.SUPER_LURE, lureWeightFunc(15, 4)), new WeightedModifierType(modifierTypes.NUGGET, skipInLastClassicWaveOrDefault(5)), + new WeightedModifierType(modifierTypes.SPECIES_STAT_BOOSTER, 4), new WeightedModifierType( modifierTypes.EVOLUTION_ITEM, () => { @@ -2713,7 +2740,7 @@ const modifierPool: ModifierPool = { } return 0; }), - new WeightedModifierType(modifierTypes.SPECIES_STAT_BOOSTER, 12), + new WeightedModifierType(modifierTypes.RARE_SPECIES_STAT_BOOSTER, 12), new WeightedModifierType( modifierTypes.LEEK, (party: Pokemon[]) => { diff --git a/test/items/light_ball.test.ts b/test/items/light_ball.test.ts index 91195d0b1e5..cdcffe810fa 100644 --- a/test/items/light_ball.test.ts +++ b/test/items/light_ball.test.ts @@ -29,7 +29,7 @@ describe("Items - Light Ball", () => { }); it("LIGHT_BALL activates in battle correctly", async () => { - game.override.startingHeldItems([{ name: "SPECIES_STAT_BOOSTER", type: "LIGHT_BALL" }]); + game.override.startingHeldItems([{ name: "RARE_SPECIES_STAT_BOOSTER", type: "LIGHT_BALL" }]); const consoleSpy = vi.spyOn(console, "log"); await game.classicMode.startBattle([Species.PIKACHU]); @@ -100,7 +100,7 @@ describe("Items - Light Ball", () => { // Giving Eviolite to party member and testing if it applies await game.scene.addModifier( - modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["LIGHT_BALL"])!.newModifier(partyMember), + modifierTypes.RARE_SPECIES_STAT_BOOSTER().generateType([], ["LIGHT_BALL"])!.newModifier(partyMember), true, ); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); @@ -139,7 +139,7 @@ describe("Items - Light Ball", () => { // Giving Eviolite to party member and testing if it applies await game.scene.addModifier( - modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["LIGHT_BALL"])!.newModifier(partyMember), + modifierTypes.RARE_SPECIES_STAT_BOOSTER().generateType([], ["LIGHT_BALL"])!.newModifier(partyMember), true, ); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); @@ -178,7 +178,7 @@ describe("Items - Light Ball", () => { // Giving Eviolite to party member and testing if it applies await game.scene.addModifier( - modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["LIGHT_BALL"])!.newModifier(partyMember), + modifierTypes.RARE_SPECIES_STAT_BOOSTER().generateType([], ["LIGHT_BALL"])!.newModifier(partyMember), true, ); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); @@ -207,7 +207,7 @@ describe("Items - Light Ball", () => { // Giving Eviolite to party member and testing if it applies await game.scene.addModifier( - modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["LIGHT_BALL"])!.newModifier(partyMember), + modifierTypes.RARE_SPECIES_STAT_BOOSTER().generateType([], ["LIGHT_BALL"])!.newModifier(partyMember), true, ); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); diff --git a/test/items/metal_powder.test.ts b/test/items/metal_powder.test.ts index 6be7655ec70..e924d75fce9 100644 --- a/test/items/metal_powder.test.ts +++ b/test/items/metal_powder.test.ts @@ -29,7 +29,7 @@ describe("Items - Metal Powder", () => { }); it("METAL_POWDER activates in battle correctly", async () => { - game.override.startingHeldItems([{ name: "SPECIES_STAT_BOOSTER", type: "METAL_POWDER" }]); + game.override.startingHeldItems([{ name: "RARE_SPECIES_STAT_BOOSTER", type: "METAL_POWDER" }]); const consoleSpy = vi.spyOn(console, "log"); await game.classicMode.startBattle([Species.DITTO]); @@ -96,7 +96,7 @@ describe("Items - Metal Powder", () => { // Giving Eviolite to party member and testing if it applies await game.scene.addModifier( - modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["METAL_POWDER"])!.newModifier(partyMember), + modifierTypes.RARE_SPECIES_STAT_BOOSTER().generateType([], ["METAL_POWDER"])!.newModifier(partyMember), true, ); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); @@ -129,7 +129,7 @@ describe("Items - Metal Powder", () => { // Giving Eviolite to party member and testing if it applies await game.scene.addModifier( - modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["METAL_POWDER"])!.newModifier(partyMember), + modifierTypes.RARE_SPECIES_STAT_BOOSTER().generateType([], ["METAL_POWDER"])!.newModifier(partyMember), true, ); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); @@ -162,7 +162,7 @@ describe("Items - Metal Powder", () => { // Giving Eviolite to party member and testing if it applies await game.scene.addModifier( - modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["METAL_POWDER"])!.newModifier(partyMember), + modifierTypes.RARE_SPECIES_STAT_BOOSTER().generateType([], ["METAL_POWDER"])!.newModifier(partyMember), true, ); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); @@ -185,7 +185,7 @@ describe("Items - Metal Powder", () => { // Giving Eviolite to party member and testing if it applies await game.scene.addModifier( - modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["METAL_POWDER"])!.newModifier(partyMember), + modifierTypes.RARE_SPECIES_STAT_BOOSTER().generateType([], ["METAL_POWDER"])!.newModifier(partyMember), true, ); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); diff --git a/test/items/quick_powder.test.ts b/test/items/quick_powder.test.ts index d77f981f04d..fb08d6bc71e 100644 --- a/test/items/quick_powder.test.ts +++ b/test/items/quick_powder.test.ts @@ -29,7 +29,7 @@ describe("Items - Quick Powder", () => { }); it("QUICK_POWDER activates in battle correctly", async () => { - game.override.startingHeldItems([{ name: "SPECIES_STAT_BOOSTER", type: "QUICK_POWDER" }]); + game.override.startingHeldItems([{ name: "RARE_SPECIES_STAT_BOOSTER", type: "QUICK_POWDER" }]); const consoleSpy = vi.spyOn(console, "log"); await game.classicMode.startBattle([Species.DITTO]); @@ -96,7 +96,7 @@ describe("Items - Quick Powder", () => { // Giving Eviolite to party member and testing if it applies await game.scene.addModifier( - modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["QUICK_POWDER"])!.newModifier(partyMember), + modifierTypes.RARE_SPECIES_STAT_BOOSTER().generateType([], ["QUICK_POWDER"])!.newModifier(partyMember), true, ); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); @@ -129,7 +129,7 @@ describe("Items - Quick Powder", () => { // Giving Eviolite to party member and testing if it applies await game.scene.addModifier( - modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["QUICK_POWDER"])!.newModifier(partyMember), + modifierTypes.RARE_SPECIES_STAT_BOOSTER().generateType([], ["QUICK_POWDER"])!.newModifier(partyMember), true, ); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); @@ -162,7 +162,7 @@ describe("Items - Quick Powder", () => { // Giving Eviolite to party member and testing if it applies await game.scene.addModifier( - modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["QUICK_POWDER"])!.newModifier(partyMember), + modifierTypes.RARE_SPECIES_STAT_BOOSTER().generateType([], ["QUICK_POWDER"])!.newModifier(partyMember), true, ); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); @@ -185,7 +185,7 @@ describe("Items - Quick Powder", () => { // Giving Eviolite to party member and testing if it applies await game.scene.addModifier( - modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["QUICK_POWDER"])!.newModifier(partyMember), + modifierTypes.RARE_SPECIES_STAT_BOOSTER().generateType([], ["QUICK_POWDER"])!.newModifier(partyMember), true, ); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); diff --git a/test/items/thick_club.test.ts b/test/items/thick_club.test.ts index 2a63a60a0e6..350735a363c 100644 --- a/test/items/thick_club.test.ts +++ b/test/items/thick_club.test.ts @@ -29,7 +29,7 @@ describe("Items - Thick Club", () => { }); it("THICK_CLUB activates in battle correctly", async () => { - game.override.startingHeldItems([{ name: "SPECIES_STAT_BOOSTER", type: "THICK_CLUB" }]); + game.override.startingHeldItems([{ name: "RARE_SPECIES_STAT_BOOSTER", type: "THICK_CLUB" }]); const consoleSpy = vi.spyOn(console, "log"); await game.classicMode.startBattle([Species.CUBONE]); @@ -96,7 +96,7 @@ describe("Items - Thick Club", () => { // Giving Eviolite to party member and testing if it applies await game.scene.addModifier( - modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["THICK_CLUB"])!.newModifier(partyMember), + modifierTypes.RARE_SPECIES_STAT_BOOSTER().generateType([], ["THICK_CLUB"])!.newModifier(partyMember), true, ); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); @@ -119,7 +119,7 @@ describe("Items - Thick Club", () => { // Giving Eviolite to party member and testing if it applies await game.scene.addModifier( - modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["THICK_CLUB"])!.newModifier(partyMember), + modifierTypes.RARE_SPECIES_STAT_BOOSTER().generateType([], ["THICK_CLUB"])!.newModifier(partyMember), true, ); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); @@ -142,7 +142,7 @@ describe("Items - Thick Club", () => { // Giving Eviolite to party member and testing if it applies await game.scene.addModifier( - modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["THICK_CLUB"])!.newModifier(partyMember), + modifierTypes.RARE_SPECIES_STAT_BOOSTER().generateType([], ["THICK_CLUB"])!.newModifier(partyMember), true, ); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); @@ -179,7 +179,7 @@ describe("Items - Thick Club", () => { // Giving Eviolite to party member and testing if it applies await game.scene.addModifier( - modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["THICK_CLUB"])!.newModifier(partyMember), + modifierTypes.RARE_SPECIES_STAT_BOOSTER().generateType([], ["THICK_CLUB"])!.newModifier(partyMember), true, ); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); @@ -216,7 +216,7 @@ describe("Items - Thick Club", () => { // Giving Eviolite to party member and testing if it applies await game.scene.addModifier( - modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["THICK_CLUB"])!.newModifier(partyMember), + modifierTypes.RARE_SPECIES_STAT_BOOSTER().generateType([], ["THICK_CLUB"])!.newModifier(partyMember), true, ); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); @@ -239,7 +239,7 @@ describe("Items - Thick Club", () => { // Giving Eviolite to party member and testing if it applies await game.scene.addModifier( - modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["THICK_CLUB"])!.newModifier(partyMember), + modifierTypes.RARE_SPECIES_STAT_BOOSTER().generateType([], ["THICK_CLUB"])!.newModifier(partyMember), true, ); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); From 8410aee3a1315dac368bb3d6b59ae0caf27d5e84 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Thu, 22 May 2025 15:25:48 -0400 Subject: [PATCH 160/262] [Sprite] Fix Cacturne and Kyurem variants --- public/images/pokemon/332.png | Bin 6892 -> 6886 bytes public/images/pokemon/646.png | Bin 17027 -> 50251 bytes public/images/pokemon/back/332.png | Bin 19460 -> 19467 bytes public/images/pokemon/back/female/332.png | Bin 19460 -> 19467 bytes public/images/pokemon/female/332.png | Bin 6911 -> 6904 bytes public/images/pokemon/variant/332.json | 38 +++++++++--------- public/images/pokemon/variant/back/332.json | 36 ++++++++--------- .../pokemon/variant/back/female/332.json | 36 ++++++++--------- public/images/pokemon/variant/female/332.json | 38 +++++++++--------- 9 files changed, 76 insertions(+), 72 deletions(-) diff --git a/public/images/pokemon/332.png b/public/images/pokemon/332.png index a9979480673646722fc78640e946c91e4e45b676..44e374426b4dd37171447e1c4d155753e44a3cee 100644 GIT binary patch delta 6534 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 diff --git a/public/images/pokemon/646.png b/public/images/pokemon/646.png index 64b0af2d1518727150cbcd49eaa5747ed8f11b80..e54083bfc7318d9a27185f7b948294ba32950d8b 100644 GIT binary patch literal 50251 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 literal 17027 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 P-RnCl*`L%vjAZ>At>jlK literal 19460 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 P-RnCl*`L%vjAZ>At>jlK literal 19460 zcmZU*cQ{+|`}mF6Ga_~nnrNt5qoF9V5=yPA*;-YzwW`z%v3DqnB5GFcP3=wXJzAS; zt0*;Fe))Vq-{<#S&-MI~>s(i^ocB3N&bf2nulsc;N>5jlftHJwgoK0vgH|&jAtBZJ z&x4wh_>7+r8wGJg>S>^fA}Jq*?2?c`Nib?EMm~@C0&e;649>VRWvV1Cu*P&Le8z^~ z{H#)CO3n(ll(m=iG70}j8=c$rGdKMo6(gi3-BKk2qatW=l=TD zYZ->Bzg=zEVO5dmC+*)t_`2nkj8@qWiv?4Fq#dNcH+){cl&9ND{u1;{|9h_lQq;fE zqP@LTR!NkcPE4f!=luvz{{aOSrqL+4uigl74GxV*27bCy_;<1Cv-srdrTpT*=T|`x zMU8YNi|41;>F&F|*!jx&JSiTPZd-RR3jF~E^YQQxC`=NpQ!OOw`f>Zht0emcfjeTr z<)rZ@ML8f#jHvt+v$TS4ouvwR)J28+0}Wio7QeZYqojM!@{89kypqM$*wizf#C&hF z=PdX#Im0y1WwUz)%kFCvT8Wj7diCp)`2e%;3Wku^y#;qP7tMnLPNr_NJq*Ls)+zky zyME6$x6~6RM^LTf&}#JqYq8%mL$`*9iiCBfT`q=%8P{4%68`#M`d;`SQRItqt47*b zK#^i)iLmJ_i}us-ZfZ!IM1O=jUGm$9VZVRo>>Ppkd1c&h{LmM%Bba#dZ5Y&Pl9h3<;1mJx`?I1@ws1s)Hw);*r!5xoB-geg^q4SF@L$( zRU|_xeP^4R3sq0z=Q5*_-wdQ>OPvgJAb6=W$f;vPZEj!?t=jzcCuZ^ehsloeO7frD z#S~%dm0(PMK<<%~mC7Zcc3n-Iiov;>f}5=zy||e=&FHkj3{R=cqa;g;4bgNu3lf=p zF7#oQ3`?fa+Ahq@C8UC6D@50RM>?DsM{ClvrM0(4u2oHZ65 zSN!XZzgx&4&jfyE=&EvwHsMf9&oY(ADWw$BO+u(9-A|$l*_d)Da^avo%3wdi8% za}48rrE&{wF*wjMY%+{OeOay&&8EexlH?OkZb(L6;GFfbcCex;0)CYZppUZd$@2W| z(cH4YH;CZO^Bk9OHPzUhlIobvzSy!1~w8* z$=Gq;Te`dSjLO~jX!~;a;-A-wasES}>nZRq2Xm=A!@=3V(wcL9_MLs+r~);F%w{l0 z10ogfzM2_*AXyd_TDl1YQLUU!HCBx9x|n=4<;LSC;kUU$C3=%qrr;@F@uIz@{Qis2 z+!S1F1{uN*pf{DrCONc9nd>R3;;VYFUA|)P92?ID095A2Yap#-?hW0D9$vFZL0@~v zdd>F?(=S-4{#u5FiAGK>ioJVcfe7fb0w~`|sd`r)@JNo=%AhQ1^qjs=9nN_CVZ~20^-lukm*40%O zt&;c4c*T7AVR&URaox~Wb*D^a(%7S&w9LhX1Zpw`H-+~3FE1X8bOPqmSOc>DDXW7;WDXYL;_f@c%@fQI`K40CE8v%!I!=d_9r zoz*WN;g$BTq!fv!Ef7kD(JSdg^=Bes=z%n*FiN4VR|?Kz+zKY;(qDM?9*-8_cAiZg zuU(ppms^Oal3`q3NA#qTjXj=pNQXwd=z<=7r#;d!X zX10z}%_bJolpp2T_cVeYWiEUA%9(zPj_%e$E5&hq4!G z*NT}u=QBm!R3#l4`Rr_nPSLZV^wFH_vbQce-$iW6D5@V?B}J>c0X@_hEfz2wS69D& zW0hA|IM5hrjR^=!jIX$5$E_-4-1X_N zF-_M>>;iL(0qt8x5UU#r`-NjSTWH9v3*{powLE{u569-8u&@DjAd>Nbxvkhr-=2Pk zMcF{OTcVYf(w&sR@GSTHwdnY1k#@9N_ZFf9upZtghz45mc_k_r>XD(&RXEhLU+2H$Fpl<|>&ht5jvQkBpVW4QM&+k6zn|C$=`5-`O zGC7w)qE!SXLx=_yyX2D(_jhddO5Q<*IB&Kts+W+g+1oH{(>|tL1@LBi6Ix$gOSOwk=FN&7oDg)LFpL-o=t!0+C;*oIe9 z7ZrIsJ9RL&js_>axJstN%X=MWo6CNiN!ky0(Tgv zWgSzKE<^RHa(N~O>AX_1&4ml-H6GV-c4>--J6;nrMJ!;@d zSPQ648j4V-6|$M4uT9&?<-D=v(z^FpbhTr}>u~RH_hm)d!Tb*;BIW$!cx zvXRtpGhfSM2&~j(^BQ8p^AWMys?SGOTVkhU%U$bAvXHqv%kGUA=G;`Zw~XQk-#*np zP=<3Dy3}@tjtHJnHch5+Hmd%if$OOC&6dh+WCQ3XsRmy^egN8H??9RH4Uagqg9fg4)`_asTk(x$5;tj65uK&U!{5-9rAwEtwK5dGN-8JVp9f1 z9_@Cr{|SSHO$!!Rm@Vc0aItx7P_Zqabjv5vMrF7r-y~f(G^E57;i<_4Ydd=pi%g_~ zzGs}#DP}r*G2q}L^C`X9Kp3A@TVB6)8@P)MpQOiR?q;#ML2oE$=9`B1SocJR!hGD+ zkxINh^Ei8msy^IW<&=JbbM&ZHItip8f(^8=QzKMz(E`OE$Lr6in)&oxO9JxXZ+mImqai`*&cu;l`EM!y7>1}9 z>uB3pPeoA44C!HwojI!3mBVAN`&@1bGRGvEEDrF)gM~gS8Q`dyL&J;^D2{{A!56To zU#|a{tXElp%{jBaT5fJ{Y+;b~e<^Lr@45wT_5@(M%h=!UvsQ$ONQg<#w@@%u{86i3 zc*i&iFq&6-T`v=y^>@2@(j*DZuNJEpey|g;Y2$mbciQ>L%u;~k;?jV_AvVNQ)Q;&> zyV;W47eB`qHwrQXk@}F(5o-lAx91vfs`QP-y3x!-iAlLHs@B;-lvkH{6C7GBN?0af zMk5*7UaOpM1;yO0BRecA?Pk2Ut?n0{!h)=6?l9okxq@X3_P% z_iu&obnw5q*#vnu`cVqkD}WM;gZgZE=CATgcwFg*v$lYH1c6Oi>SY5N*&F6d#ak$0 zCjU`^ha{-KLTgA*cY*1X<@O4O7y;B>D(bWfJb>VP_&qRwdY79Hv@A zgD4@<8ZG5#?7+I@6^M&29+%1P07K3UzJNXaB5+bP8`ukHYNTy`|} zGO$=T^Sgo$1eSC0=0r48Zyj5w7V@gRfa^_yD$^9{4PI^ z{9$p@PUDRg80h%Ui-stC%?oLIMeM$0(4*sjB8@QBQgS<4lMRjG}_ zO`}Q36?zYU)pDY6Y{r?Cn~NzodQC-miW(GydEQCb?u6Pz-J^a8FIj&l&em?>`m<5hQ zgS0q~OG~F5gM9fZ`C*{RVtjC}8Ju>m&TuUKN?Z2z3@yAMM_X-1lB3aSdbzQdV>23J z^Db;pK91!J-ZFioc!qlLGy?W_poDn>6&2p*d+OAD;U(2HtFbVUY=}VYg`g+(f4u3# z|4YmNDylZEZ5u4P)0YU6+ytXNPMRoC0*pQRGei{qN|w^w?0|rcWsPB& zl`a9t-dF1HHT~F!eqC%KNQqFRruK!5%B-Vf(?^I(fOV)~uM0d3cZIRDVNf*6un8tA zU4fL0OAxS59luyy(uy|Fb=)Pq8Bj@ntmUNV6>kJKi^_JfF+~v*@WFh}hM0nzcN=n< z2T?-s+CH>2D$28@@)qlwg`;svoA!R@uzBGsziX-Y--1(DQUH6PC^flG?sPqa)Q1$Y zBs?WcolM>bJtsH;#WD z3lIJXL(i`7Ycsd2i}++xiX~`9{@ncCz&`V`^a3yuAV&Yd`?^VU)BZZ(oLmC5ZRkm zB~5qxy@0I1=H^|&E!kZwE;N(R@i!<6wOh?($7SxF1+uvBl1g3qfwrKm`^-FH0><0} z9?CxWHi5z6tgQsJJDsV(I@DWxSA0`{E?d64(j?U%?;F(??Q|Hff1^mqeus-O2P8)f zG`i$_yFGlEW%2HpQ1rU=s*iu$KZSs{^WV;{0x90K+yDGtfn+~X2`1>fFQE6VY$OTN zVT3zX$8rpL!>PTuH(}cY7bo??_nhz2T>(&C4{bT*@pO_#@{%5Q70x($vu4D(oM}B$|Y8$zt90qYd+9aqQ zlAi#rGNI$O4+_YGz6254LK8&Y^TPu^!V@K)NKh|??!79BOX-4XA)KiJ>{OXa^N}1< zBqejx0xH8k`H>+#Bxb)_;_k`(3_Z~_F^7_ViqE+}bvR)iM77JmM$->#m@=Y!s$&fW z(vV!-NdlNBzxfTFB<=BCme5MdeJJ7-8B)71YR4xtDJ*}VxJN*d(Q|EqMq37xoiBW{8;XT0<`nV-W1b?}-+kx6 zp_O*|%!7halgmoQw3w%i{YfGzO5y}os^`ER_KLz6IXojApL~!0dHoA)esSx&_&nz_ zcsCs@9KgU#I#!j`d8)x!=Sp0jR@H%^C}E;{t;7507qY;c)tT?_m8|A>?H$`~86rQU z2roP;ME>?`#^Hm%m;gWVu;^>eE;KW{_h|3-1ptGUf0Qqu=(Ni&hua zOp@2FE3XKP7*5yZm6v_2UW9v%h9(D5Q!g^tRhd{*p z`P=L^E`T`~P8MN(%${n9=7$Xg5r6?EyaP+sR$ppK?Rl%GIQMnkOfgV3@w|@MNa;-t zYL?G@^1^jS=>zpsmz}YkC(rF4pp;suQ2)cornUdD<>-}j(mk@&-9XGP2N?=`tYZB# zlCy4OoQ^&kT_WN%B?+7Q@EKO=^H(U0}+x_a=VV0s2p4 zU7=miN8GJqC&nU54H=zbaBqk+@vcwndta=VVI#y$B@j<;Aplk02B-xE{g-@gy&5VE zn*&X3;tq7a>T!i!Z+D<3>+w73Hl`tTK7Hrs3tsN-=N(oP6=oJ4HTnLLtWt=KE##k#^+# zzqm^WF0CYC`IrTlh{rD8AM3O+HzzM)MYFTjy$dJ5XJ!TQ00$|x8XX>qU;7n%S_a7b z`+xJkzG{;z`>k?=(Tuxf3rU1vy;DUG>^1+K?7fAb)#ya7H;J!OrC1KzH*+Sj38}xKAY6|#yo^5-~9-d zAIO6Gq);Y{`KI?$JZ&S{N>^vkFZ`=B!$7vUsx=|s0oi;N+_}pWFVU#m>L^UfUZ~1L zAKDTmFmn5OZ?X8=0!jL(BuDDME6`g!k-yyzY+ih{UR9FSm%=g<^Hr*XFj(8B&j9yM zmjDa|!l&mAgvHQ>PrIjXhc4V?=L1%)M+!|e<`sk1S3R@Lme5;(3x=E5+h0oMdQS@a z#hzoAmLET8|992qEmRe!ryRDUmFMiyhQFwLgs^;k^n~vPpLL=t1YuNEmL5q?E=+ko z^=B_@y${m(*oi~vG0T|5pz>Jw>84|tHp0_7X~{8ti%R&8gMr9vaf|OF`TmuM_*tvP zvk{HCf)ThtKdLn9{aKWO$v!sDp=G@ZE#P%dj z;10Q*u7_AvJ&_119jfhHWPXaHu^Oy)J--sB|SEBddq$D2sM1UDzxXau#UlM(=*p?693uI zFx&^4BG+mkjl_{8{Ch_)Z3kJFI1q`O^Gd=ly0ECzi;(B{ks6?2`HZ0rQJS5LUbkT0 z_^4o@Qik8EMVr>zdPH|muJdGMYTf2`XxW2|K%4~4Kd~(U`_Q=J;oU!-vf4T_PRXif zOVsYdUGNoxcu! z$pMGle8YGD#)Lc_Hzia?XF6=wVX>M$Q!jNBzz!Z=f|xk`L=92JhmDOoF#9;j={lIE z%!;Av$AV60%3YrdmFj7=7CP%B?@HQGg#3EIB#FLrzk}pj9A#&GL;%`5cLYDwpY!7SNOA*!~`|dCaHpM2+P} zKM{{%r53X{AZ!A-zCS?2P%=nSq0|n39Cp~+VM-@%%4?15c63VFEDU*eCWw)1_)Ilb zGLhIPg;El#S9=XBlwj|+fZ&)BUU85&tbUXH&_pyp3X;Rw6+Jz3$=Z-4GJ zR98n%87s|PYudIdLbzJ}4Z#^DV10|m!40u1Vc?=WG?D@p)PDlVo`^(K@PJPA{8i86G%m%1ox((c`hSh( z>iwL_&kL*)e=IJ0SII`GSo|Ida|nqr>gN>3Fpse@Yl#A#S%-l_uRHl4foDRd(5#rtm#dP**xp8 zRTn>L9w%P|p$6r&t`p?wuW0T61HypI$i(NX0rTU}ZrD&s&Ao)9tBfJzzvg?l%MVvu zMr%hS47`(^ZEmvf1f0^m;c?r;qjsJByb1Xk#-m*1FN5d49av_KU6$JSR)d8;-|pdZ zQ_l1(G8cn5`M;DhHhS%yb*$y`?d2o~;iG=Wuvkg~MMxVaWK5kXRP5~Tm7cU+TZV$2 zJFw&h`O4|YPgiljhU2R8idxHSE%j*f)cd2_ro?^`*v$;Ws*UR3K168Kk^3_GU-z93 zYKumBW>@g5yL_mkg!p_ZG6GkzL9~`AS|x%5jLjLKR_tvbLzb*!O;Sf?YiOS8U`dLB z+JigyJ)?7vA1fK8`!Vz-h7@s$Za`Th!4cLrYfHh8PPF7nO}z_kdKnZptGRHHq>bZqg+*b;wv=0G*mRTehI@EGZW$4*J<;njwPP6qa(?C_zjCF;c_r(JrHXQfr-Hvl z>;>$OZ&Fzg{{3fam;!Wty4I@FBd#qkqE#ko4_)&ov zy*_H3HcUEq{L!?TL@b9*hu@+=N1ct82JK|v_{$PqfPe13-PGu`+>f|LzutLuVM+(v zTb%%iQd_3zKey~*-h8a;po>(do>tMd@8Yf&OF>6RXvznSLmb(TbJW^Wz_T)r12pJb zJTBZ{S2e>?PmNS}H3L2j>~2Jm8;nBERG)B2oZW5gj?;fvRVpr+K zzo&3tb)A#f&6yhijm`T254+u<^KrsG{KQ{6G-c3yOg2Z z$zhn+VvY&J6G%-2xJ86af_Gl#@2g?2Qzle+H$$qc;l7#@N zRb_1meMoHGwsRaHG~#(Bm^ULT2`;Dq;o6|eWYRtLXG`HR$wvnp@wqg5JPuE}pE-4N zs;1%v@$NT^d$8Ty<8qUF@-C&l+JY3X_K~%tX4U5Wk^Iw97Xe~VhP`Y=KFuy9vd4oa zDgQ)EG22dn`1$wL`jz^mtcK=;0SamKyf)vHod+aps0+MEv^gn~0C~csUu2t7E*h|% z8(<3q{}thzsoMZ1-eC7~u(aLHf(y~s7eY7nEfF#(L5c{b?CmRp%G}>_$I`;Mj7ukV z&8d5PO&Q)Vm=oA89+Z+xpE>m}D73!`wDpY5;SV5aJb)Tq z;<>l}CcFvk#;mgLS|oX~5%MuSIo2Jejt%O`Azx8yauPm}7+l|rA6eh(uFZeGk|n?h zZehQwhIq-|Wf#R68yeEj{i%)ZJ@FIgNKbk?mi6rollhNV#smwL|Cy9+Sg}!y=hr#S zPmd)MY2AnjXDFiJqP18rZ_1qQPMqFJy!!sXIk%@-=6u**-0#h;N3U9H?&c0_;bcvs$WqcS0q9ip~{uw0c3D}QRMdbXv@*HFRJ4=i7wHpsi z`&#v_^;+yXLy^03p$y~$EnI=Thq*stE@wx)Z%_PMo@X!c&h@?c#{!@K=am+Sh^aGy z_%ccZ;<`{bz*-2++UF+aT080VA7B6H&{3M*j*vtL&WP_QN5KEp!IC_dzUwOt{bHb- zLcaddt|Q{d2sL||twRluoG_Q(jTU^}-31={dNIbc~DonB>5Y`Sq#shRZ>GW2+Ja+X_t4%bQVA@*c3HAKnl zKl|>pU@``FM+EODxiCZsqa3B^*@0?_qR~(38O=)#8R&VnR*5SpnDrBgU&;|lXDn<) zKGs!$oNm0K`pkdTO#){kw%ROuh&|)okk%k^SFVs{#Go)Qzy}LXx2bdVSMPWV^utqq zJd6G;9B?5mu1*9TKf0WyUS+1xnQy34&w-1o;1N}Vki0l1!!sXE?g~B|N2d6kgrMD6 zUY*~K-;@6;ye?z5k@HKUOkS_GEi@t&sB`Jy^x6lv^PKdG^D9o{Lc*0VIpjNEcyOUt9zd}sqyV-LQ4BGfbW{&15?YL9gsW2ko&E$3(BGreK= z`kxZ@9B4Ql5h0B!PZ;khb*9|kY@{Cs)A2qPgQtG;6oq`gYWOAL;Qx99Fte{MubXL7 zKN?X-X)uV2>b!ktQPEfK%bH;l(uKbf_8J=E-kHx3IP&k-;c0;y{?ju@h_XcB$6o8t zrWz6c#al>A&POju)f^#2cEkFoQzG#CyUP`44os$Zl8Ai19Q|FNIo_)Yop1ZUY)H_( zlBF5br}z5N<*5adq`U5JZ1$P5=?pbAe)}Plc?Y3UZ?OkY2Ty?T$NzPsfxp`juya*O zA?D%8j}z7@9oBLF9Hc$XWF^9=!MM=5oBa4fq!X^1RV9V?sSsp#TS9BCQdTM5Mvg49 zo4P(ym6@RS%y)5+Ayj$38I7OV?&>rSaj@j@x%61GO0}Mi?R4XKqLGlLQHnKUC2VF- z9kZ23-cIqZ=vB6ONo>KTC48PRxyagKJC`7fRJ~}WghbQ86NDXaub=n+3Vi?ggU$u+ z_uum^!M69RHk>iti|;W~&GEg~bp9OiM;+mHYkEcqovM6Or@vnwWx|+h3ikaxtESgU z6zW6NX&KFXNNihrNyuIvjr$Z(0uB13b`Bm&NiH}LC8Xd=br1+UO{>ZXwdv@V5nTf= zMJ&#_19smq$v`w1S~{dUaw3LL3tQfQ89rA}`LFx5Wctjd-hhj0`TFl)m*&Ps|8b4l zo!(cPukKk4g(T+c6_R!K;;(XMr`-VsULu=e_ur3FsG&v7`muSZMq`{^oqt;Tto6+O zc2qGD`cq=)NCyReyk})i(7o1x%P*f8xx{lDXBBsPuy?7tR=-cJbz3+v@jQ4CUpQ5B z@BYr%wcyaK8tN@A`5iG1a9(74drMZM)%uEqf-hg1N-CKE44CCpg&Tuy_z>rMLh&s`3(^=@@wm%gb`kNwKg$qRVt zE6201Tl8h{&eYXKk*^Tmj>W1%Z<}nrQom#G=R-7%6v8z&cu0gQkN>zP>0_Y&s0A)Y z`{VQ}&sjH)P$sIBhT!gHrWnyog^RO|mffSl=OKEi4ycI&{J{iO{SBxkJ_sTt& zHi`&BFE)rRUzX2h!f)TZ^M;kwT`xKF`34~qBs;S`J)honkIE?y8raN9HC>rn)u=bt37+s++HT@{=h7X>Ul}OK1EL>#$?5zm0wLE|$;H@@Ko!*U_g)sipiW-&xFsGATQ|+Onp{xTot5%7Llt zveElo8PTM?N!bO4n0sji^V9e1vrv;UYN&)go3?y@C5l}Mh{sTiGDbS2d2qnV|6|nr zaTI0LJ|rFE@jiS?g-{DLO88vH>~&8pa$AA&YNS_JI8l~v>lBL?cp21sIb+cxea~gU zd(#&Ij4bpZvzDD^FBd1p=^%C-MvLF~4G6Mpi!!2FQr$QTh`v!>k{^RVf*)w6G=5%3 zE)Zck9?eFsY@m}=cqDn^@ECBZFu(BQl7@F)G3RC#ZGkZqr93Ym_nIOvhAV=cx;8Xb zX!Tk(pt|m^mkvFnQqminqQk860r|9ze4}CMbhdNltXz8A`Cj%G>aw6M*`AwP4rIe@ zLLN%a=gJF+_6Xzjoz-Ab*VnKVS?mA>Zdl4eQNt062wDFZeoz-4Y6P(?(HQV7hldn* zMp&~`$&UXGN%1o>J1pB}5T&Bs4Q?u}L?K5jX$BtO24bL;zZihEaWgEdKVX2F5 zx-Dw+H&ehJ4%u+l``H0-nu2j8qS8W^bvWnUv#u?7s^)o>%FI^=}E=rcBYY-(nS=|tA>!S6?AsJTA8I+ z-9XB4eAI#F6AJ+=AqZ-$cmFYgo>Nm7iqh!h=C09qE*398Fk6?K3sEI@Pxw=Tk*Vjv zE_YEP0;c9w{GCx&NWT-UY&-e9`H_p75NqJkRRUX9rhY*_uOmPJ{+gPziq40K$jPKx zGtQgEEN%*srn?S@sk%l?d{8D?!JEwgdS?jrIJBmLAQD$02~|;v4$hEgB8&vt^rzXH z6%rXSv3{gof^GFYp)di_KV~x2%pirFXJ7Hk4h-Fp9cy;3?T9hUMQb=A{QKFXbeQx8%%OBSjDRVY8rqIk&T}@#*8G&&sqtZTwrVdTPpQ;fIx%Zc2{sRscUR+N4+q#{v#;#A!AXMy%J6h)P8EkUbYTg z_j*Z~PUKHJrN`>6pIUS!8bXMdGk^EDFeX5RxN+)|tUyWQ4W-0Qh{sD>arMc_KcdFxgWLZi*U+rc8A3k5w;`0eydgU%eSRp zn)VHc9RC{{Bua6v)2ph+1bQ8-TvbT{>q1T<^WHtW`hcnWi0$OcqIj#}*sYBFa+?o< zr)|B}{<6j7F5?0YFZ)RpLw$i}R$@Io{*hDEP~j!Mx)Y!N`EsTscyeU6mk@4UJ4zJ| zv*gapx90>a(?b|5cv5?a&18Y-ycdsgU)dkT2_L%B%{>#>rX%cM$w(k{!n4jW@A{0- zmE-eXwan8JyV>{-H`dY-9i-tDeI)$4^0hADK@)pVH6>-4JY83L_|)oFy79Th&-ECY znQ8`wDssMR+5+*taFg}ig#(T%>3j6ki}Y^AN^e<0L3U_&&~_bHcVwKf`A%s5-^64V zY09#NUN*M@ffRnMgtO#XL({oSaXsc#;+}Kxm|TDc6^kplaS1>UBA1=j7;IGDVenRx) zr>R*K?1K=pDr2QYq=TS)y#u>>H*w5>lv3e(D*47CJ8J;JajgoG%XtvNHh@wWf?|(=G`u>)fahX+Q5JG-_G%vub5U{E39&r|TCh z8ta1r6;H&i*)7J~!q%$rs#pN4diO~KTvcJ#9@sP=0HkA5l>qJvsQkE zW=qh&fnrcdspl2APP9|o)2MBC;#!u8OCoV$l7NEQ)fKHPON{r852eTwNu!K}J?TmJ9 zyp51R&+*D9dq*Wb7s5B0&9A(f{mssZDSC$_=?Z z5gK(JsMg7ildr9(D{N(2m7lFS@H-+eM_1JYHrd&==r3lYM0sYhVc-(?$4u0o0Y25LYzz!~6cFna9p(sxB$s)1z$sg!i+XrdC&RyMP=k~q?tgv$`F0gOJ539E z7w_GkdCjLO&TL;{az;m016*&V^|v3`DFI8?8{tw7`EKWld2gxr*j7 zAN?t@SI^%9K$4Ar_j(1qO*1d~t6VVLY}~+PiR-Il_lw={_MUlA{wE10jSw}a1+@XW z=OdC@F2Oldd5Y3EQp^)z{&td46Lf5%T)5d{+p+zoeg4m8wGrw#eDpjyhruto-sNlC z#f!}_3_iQ6l2c6_l3SPf>G4WT=rPUH(i7sKR^WgA4ze$)KMZ9<+-#0uOn9by8_fyezZ52uyauoc1(ASY4{X@o8uT@n5I-BV`q6G{y zu?J^=H-GiUuqPZ4YFk*9og&Gzt-HI!dkuOJQK3C5E~X-{_uJ#l4g5@^*@?EtEj;-q zn|c=WUC1enY|Y0+<{LV5CWKTj7>KB-lS$ zU&v=#P=kgLD;Zhm4#h1I9S%NMx$U73ZWU#JR=@)$0mX6Jc)dw;N(%^@-k*e6nXh+g zNW6A_#vrwp-kU!sp}ne~$-y5w_cwbTiWWIIndS0X?S}X1e{8xopCm>T7?Jx#m`q|f zh+|pu?=_Q^mBfc`X#KqxYp2`I6|lcxv26fKsH4_+9??X}+o(3VgUBZht+;%#VoWg?8!fp{$MQz13Q}g#)xCRG<{|(~{d>9yaih?za}mgAlFQPp z)H+Kuf3-(UOy3@Qq+bpCU%CpklQZ9|RmF^mq*W&O+BXXrxOqqb_q+XLSHf0s2&}oap-v@@|tQHEsPb6n(yR!X!I8?-0 ziBtR7w~y1N$sBhh+rWQU_>a9Ii~D_AF}j^|=xbmo67XVUTyaeNvCfLp-N?PnJ1Y<7 z_KPm-^90E~4!%qnViD?DU=igjIn>`5rZ+aFQ)3atx3kFoL)te7Zee1Euz6o(WWK83 zD(WEA`y=JDa2}_@=i!m}KYSp$Tbf#lM2wK{nf-5UxMh~z#?!!|Dmb~bij7do=@hGP zb${X+1G~k9cC?Cf`3R3nIIkWG^IPef~o6j#9E)M(~u!kMTA04=y!VlH-;FF z_Y&%$^sp@ZlEdV$bH?6;NV5#f0&<2)?|Qe#qL~8=a{?$w5H1Fwo?IgEmIXI?>Jb$N zj*+1bqw9ufOf;h}&TP5;vJ$G3q#cO*N5Q9D(7S0tCtCw`gzvk_`z@{$-5Ft>8uX7Y z7Um+(u&QMxKW&meM=$$c`|{^IUISJ( zRV3Nl`Nj;W9Ul!w%_@7bber@2_Z81fWa2$s|Gj!6fXp#)MMcwOci#-PMOywBIw1aj zfhSJWP!E|YRm1qzY1tx+^YbJ5RpOitVr_IR679f9O%`dr-4E)19gTSbOpglgzasux z9y!JRUz%Vsyrb9M%aJxtRlEQHM+$8oTtw5uU4p1%CN|o~wCXy6 z!2#NC1v`uMkDS492vuFogP&-eN(@$;14{e9qferxu7^9!&w+yr;s2el%9P^&Sn4f0 zH!-h9&BUu{uvD(Z(K@%_$>{kuO!-Dgl+s030b6LI1ThWU@wzvMmsd#m{}Km# zG&IHQ>*1fkYIS#$uuoQ4}-)nkZs9GMh ze`Uo|33&f6_q+EJU)1FdsXfAG`SB5G{y*6UBCA-LB(VCga_Jk>?I|lV3lw$9**hK? z3Qv>WI>8tYk$97Cbf>CEnHonv$Eq*L`fT{>dPM&reS=Fto{}=T`;#S;$(MXV{&xbD z7Ic7G)Es?bMVk-28$4Uk+%Bho-8?<{Sbuj=Pu$K9z1+xsHePcmqL6%@nH3IZs?ZDX zQTZ;(Skcf6=)56G-T7n1VswwuS5L=*N8lAPn%mFrC>EFmn{X8|cai-|p0)Mw!mZ^0 zL1g`4@ynUQO*GMWZvq53#lXkcLgCEoq33r+kxVn2E^|#}R3JJQ&zkE?rhQ%-tPaOX z8oOstMCjb7f|x%|jT^kMSo`sfF2*d`CG}5gX1b;%3uB-81Uq2$wNWyaegDfoTKC_V z@up|l@@*J9G0a|7W zT{XpmPqpi$N6GXaB!GAIH%DZw&oOaB zPClbI0B!7FUAxP7Fg?CVF7^goVv_!KYD+rbk@6zVEGK$I!lfj&#}s{L6$5RY=-~=~ zfUqnemO5{0u9YS{{_y3In7{rH6Dg&0MTAt{+|m3quxvAU!^qrCBk9(DvJupEV{o74 ze-0fDcoDlRd5}p?O;0)L1(8i4t-L>$em8{J88#7dh@w!N+$J8j@7GU%HjJa9AXo<@ zMW4;Kc0FiItePX4@Q9Gn36Ai+Hjt)D_>W;>w-=79i8a>{Dz$|dD{XB#<0N_(0` z;?P|`3YQNZz8ltKA~-<(NV?390yUrz3hS);(#cc7!juA%1#?5p1TC}MqN$#Y+OlYy zl>{H1Yl!k+Ef~A%Enw*i;~sSUTBzWA9=qpniHPmk~Fk?K1i|A$FDctM;8^N%hBHa-69W}<5w4OeeBb5Ug${xa5A2IT!T zR`d7^FI!zEm5vc+R^+m>F-LKm&iYVdFb>Y!J+lS`+DFvwWWpH2W^3-8?@tzRpwhMN z?vK5tqjFsOd{nC&dY~*SS}$0z>p4m-P^*-57idQB$`UmW;@vYjtEP3mK6HuByPq^3 z35bIK2@`B<9B}-JYB`yD`68!v>dYw{-iuqJdBt^F!G^&lb--ST9CAo!7O*O1_UDdH zwn~3B1gWGz$vMqM7-g3oPR}?Xusv`&R$XWZTDMY{Qy) zpKWSp+Q@roD=%wCGm(}`k|vRtl%XP&F=JS5vl~fuk4;AO!d^DQGVtqdN^KfXM4;YlYp#*D5RX+F@&#`cOj`-cAzdI&fjPxq#Kv_E7hvgF zDp=Zz{R6=q6^>xp$WUSzk(!k~pMFGNPJ-oQ@#(elFlo~pn8h*bUqQu<8eq&5VM}y8 zPGz@0$7vz7q&Fq7@{ljKfkMxDXcUrUUq0VhuWT7hM3xb8K_z0E?qD9?)JGd$e%Em$ zF{f~_UCXXm`g6P18PAKW!g#f2R?lz{@U7f4Z@6t!H;48tvqp20XW~;7vbV{ruX{wB zT~7U18ijh`@suMq{3x&`{LJ%T_tGa10r$w&yIouq&{psoW|5=IghZowQPTM^@d%ZO4P?p7~B`s8`W9W{0pwG1_&Yw7<0y(>G2Ne6&zWY!%> zyLyj0!d#Rm*y3CYWSRIUy*~ZZtLnddC;w9d8MbdMd%5qKLo6D6;Z@mS* za?xe~pLzyU&CLmyr$|?I@g$f%HdS-P3C}aQbvz&R z2g>D)b%Z7}D;u00^vLQ{8h`$B!$e4UWh-anbKr0ah-zeB4mTw8Md;knjyi7JtoOmi z>pMoV9?IYTxUf9EWU$~?ZU%nu7xtwDsVq3k=y4CF+S>*K*X>?&vv=5P zm+z<$`QSr2up@qa)#-{q=N>n(XJjz&?Rp;~c{Ss`a0l_lus&t1R7rH4yq^Zgz$Yb% zD3?MD!a)W}=d@ZD^w6d6si%wvO+61jaQ?2Xnu)kkfFd0*dW@n-z9P$j1kc8V6wJ1z zcS{TbF2sb7dNyLe{4tfVcnL^B+{;kCyL4g7meBR^rxKmzx?HI_@_OY}4Z!}Y2O}g= zjWc9GX-w!qjMC&61G%}=Joco$C_E5vw1layI&b+*6B51oI3HR?3Yck}Ua~pN7^;Ux zuEa9Z3Jnoc1Dv)9LqBaxEpMyQ&Q>jJPf5NkWk3sq-*@<_%Dy|J1@sDky16|xKd{2z z^0!At!3#t0<3tSKroBrczlOg`N;fo47*Qt<+R36-u#HU@2=hAwT zO92~fB9@4|l$KEUl<#FMt=6RZo)Iy?eEJ6*?IUTHNsF22+P?LNrzynaAZE$##A!#} zw{0bfBLkSzMG=|N`uq5boA=o^0?sGzTtrk;h6dFoY&$V&RA?jdQ)?CMk9lrdpti(1 z>@%EZf6ky&)@0e^q}qQHr||XU&QNshQ1t{Y~}e|gL~-t3i18%)2Hm+K>>Q- z3J6;j4QeKb{@J<;PjmpRWhdFxqq%q^|| zyfQiBQApbPhMzy~Tagg@~1 zMFWs8tse)*=*DwDC0Ak`YkE3)U|(3?0~hYG zr)V!;N3N*#TD2XW(-36{w2rEFHyD#kaaVS)BRIl+m%0QIzMSFE zFn!45+r$d+|UeCJR&KYQbVp|_|Q)n_;w`EbfUFBhDTZva!qfK=xYa45?Bnq z))=!>2dtOv)fpE%?O@Ad85juWp=9`VP`9b~7=khA#oX{32WQ&(O&5hoH7=x_7s1mp zc9AB>8v~2Auf2*w$PrQtV8n5k@vz zrN{86c<$Pxg0L&tEDm4Rbl3=lK4v>yVe~#2zF31MVU*HHch~CuA9>8W zKA&qfbAX z(^?^MA(ONA>dbj`n-A0G+V!|1ZsOYTqtn7e=8g3B7R%zA<&G2o2qP*c#u?3t!%mAL zP#p|G&Sn_19t zRwqz7AfQ+WZerj8ph7}nQVa&TYk<{bpoMu(D<81G0q-c))V+uskz+5~0WfwY$6OM# zD7Xeu2XWvCB(=X4d&Um_9|%mkrR_+lJ3y42*@Acs2d5^p0baTn3mS8SLxi2%tsC z1Bjh}bf|vAA%Nf+mTCdM`~V+m!M3aONtu~QNuTgFxtnkkZOV~j1^5K)wUEwb-1 zCbEVolzmByEJcxb&Ux^dIbC>ob07xVfZw3&(fj7F1G&3`c zxpC@fl9^GSnSY+MbM=kQK0wS%=e%KR-mv$}73RGn^P_7o`S)okZ!;5fz~2AUkV3>P z06@&rP=|EsZu-)b*u;7HL}r*#<#qSU_kVXU_|s*eI66R1Zf&@2wB(Jqut}Z1!M5$x zd2`yE;y;_&YR-*s(R!EZ!+*p~L5Dyo1Q#Su=$F|VB00c_XRb&ZydAjzvIOc_fc4^j`{Wfdl9I_>mB zE=!IG{J=Zo>No=wnq&-UB#?C;@%K(2NVbpmPNDcp%cd$%V_24bjr9fe6UpYeBRn>o z50FvNV0RDbQfMilb7peFo+E4xxW4rv0sCip4+5W16X9d?e3+=-Tf+pA;r4--eH-ru z{sE7T-JmO``?mIwuN}z-*rBpdfA8 zU%fZ(@&5kB`SUn<*rCNFVagD3UhU6vQI;EN)$Q4aa5Yg^=htTt;liVo<=2sV6>H)5NA5pdbuyM;K9NH1BL8)2 z2-AQk_Jl-JhWAE?Zbl4>1?l4Ll)qUesmy$wvSb{#O>OHJ`WJ%#@S?zKFXy4_#ax|> zyp0VqQo`9sU@EQp$Q5CgYayy+?~`pi?}OL1@)-+g%DjnRy;1b~?j+hycrP2%aP4axQ8@F#_afpLL9XBSCM+LZ*;30K zWAFp21|~XBgUs2ONn?kF?s@Q=x-d})8iQ;1G3N8n*J;p-7WI7w)7v}9;u|Ub8#w;$19T_vW)SE-A*azwDvtB7 z@0r5wq~Qfu>~W|sw%-=SbBsr16+3?VUzjXU9~rs#cv!9OX0m)K>XCJJC^dz$tapyL zUavtJ34g6qHw6~*A7Hd`e$>w5Zq9gd328_^>WesZ1{59V_P+9E#LCXoeJ8Zi7Msqd z^o;6gpE&c*KJ+876-O4C!d4&j#g|d6a1^U~$Dps0KQR2)@l=8z&$;_5KD8k*5rODH z$!kX;%A2CUS2`=@Y&qW#54^NpUlaS~Z@>PuGgLx0=;0TcI&=)cmLtSLgK2jhALX1i z(v-Iqycx2QV8_>sb%Q^rH)F33*#~+m&fs@$ri3aup8isCK_I#4)DL#7nQCt{^Q0|D z6yynU*B;dm;c?~fw#EhKT4`(WL_wq|d**L*R@4@;rRA26fX@@}yjQlI@7$88TU5~a zbaWj z)OLS^7jma~o0+yDwr82y5z=TvayzC*X=`Wa&UGblpv)^QKbeB>!>v>I-dluz%tm_v zzZE+=f(tFZ&$LIZ%CgqZL%%gFMR>}?3kMh%Bb7$AimajBAvPN3P;h$q*|(6YdNX(4 z-SXaMyTQ|&XMRlYO-vogcFdRk9sqHK(!|XKE>Uiw-*FCA6DL?CD#nB>ij(oIqNm*W z*kQ-U28{{bKjj$#Z4%jw?oQz+3n|wQM`}lonU+sy04~C95^ITLRHjv^IQV*xmeMW! zcT3zo-XaD%e_Cs~+HPmFQ(M)jRmt&yB{G7L=Ly}pT%BozaTDh}Yn`}U#Pbs|5mr_p zG$7{2OM-MXui=?F-YXZv>+MJ)pfT^LB;A6~K}Kmq zT0)w2Z~8?+NfAg0F5|h1H&8scJ5(|X9O2GO^zVK-itMc%c8)fV42?cKfZ^Y)7oEf3 zJ_C6`wWJ!A33({1HS@({vMp#x+i6YHs83C@G97KLke=~HVY!6m_<(|Nu+ZrF-6?Kc zH*dBd4n1<*XWQTQPRq+1iV%SxOPcCQmh7bI6GBSQ4`ROY4{pb6B6&AQN7fhhQ)uSI zQoe$lSBVCY8m6u#d6MxgvzZ@#yKIq_)mRN6>o%3|$hGbN5;Qct=)(12BnmyEHu6$_+6Hk?Td&=<$9%Wk4z zOHQ+^+>usKhfuM3)Bu_xmMcq_Fo?_w+lUA^XG~gbq-279Qjp^x#-yM|m(z?R&tPLg z*ZC9&4t1{d)C)3O9)6w7vf(WKgmTazUTfY$p4wKMFQVY&^Nz;Lr5=!Z(o%=Lm=cO9 z3r1I-&-k_9#Yvfr z3sgbBjU#b5Wk<8y#t>bB0^-rAHqt=b@aHtIJ6=LV!@pIo|6v_3nd&5&^V$oYlWBkU zAc2_1^-l z-lBQE#-l63J&UVVD8zy|HXvO#D%q{UvWGpm+5Y;W>CT~fa?cZ+gE57aW1awTH$U@5 zZc3m+k)r>P$Irh%m7SVuJ6r}+t(19PLHy+X0b4k7O863H?OEKm7q!uyH&M??XtZ4h zFI1SW{P%k8Z-t_FPaBUnj=hGKQi^|7NSU6scf*TK&G#>4{G8)DrFR!%UM-+i4DK+j zy>mG=yZ`_4r30s^q2AEw&Y_cYlsjG8MsK419K zI-&qDZLDBkwB*6&Yik-PB2Y5`ATIoX-M{xo3}DEO>dIJ_QY0`;1B}*JB#9c~7vHA> zjN~`afg}VD`zn+`NhFewCVUwb*`MQaWXr@-=4^PG$77!e2yh||IruJCTcNU()d6|H zf%`Y3mIY~?qngk%Ho)K*(?H@s4ijJ`qPNW<%!o*UF98k-<^;?DnRCFx>*sKkxefQ} z07n)TApnv`R?<#i2@j2&N3pJYBY#6~-JLpQa4g0k9NN*ObGoR(78gC7%yoYaJ*!7y zItL($A)1p`FnM*DUqfjo>c8{>iJ&U4)0uU}rZ>PQ`+k8LxeCUc$-w)@Fulx=kwB*N zUF53a<6CrRd}duH4y-%(zet03&@a&alVSO1|64Tu!l1(3K;6q2m*Ro9Jn8@3oi&t* z9fOPH!wv?rc{^5d(+}p~*1e=V77w7f{weKO=A>%rH!#9HEKY>_uLfH(C{-^N%IJ~x zHu{0M84_DADwF09e03#DK#=c$fvy}{Bk+|;))DT18sry5qfJkMUq(u~bjal@uLGG|^N%WE9+IQ)jWzl% z8}MX#05SUiu4Qb4(p&LYZ^VA!u?t=rM`6#1<$hm$a~EvMh06KE@@6nqJ8c zW82V=%jfvqpwHskJ?9{|4rz)B%VBS05|Q69_l_54`atNjfNPJ1phl4cbzIPn^f1j& zC&$7k5!c-&PGzRHKe~$QLW%l9XHsjC;ilC9S5wj=4A3s5^Rw@v=@TY~L#vLjiH5-M za?4hgLQOT3QC&Bx!Rb`Hug>LsYE5N?P?$~1CwND}>z1TTTnPA~R(~Wit|#z$t)tF9 z#VcIJE-OkM7#@L)GY)Jd7@$b3Eol))O4-O2_Y0QFxl>B*c1ViMBR zz)4g^c-DKeIYd#U7SeYFh)5CVMaTU>P9yFTyx{4=*JN^%u4;faLJ=ZXySCrBM7rej zMEQYzIG)!+$E|q?iGBxuq6d(xhzg1w{(%obT2u-vyb*2v!HwIm?#1ef<8YAEIqzZS zbFk`u6124y)U{o-3zsJ<0PN2MycRk$!x8NgnYqi+-mk4xobHLwz?gXkFDg$|0<0Pe zju}IIj)i2RKk|0;2DuMkviow-XCezLdLS@L~u+MUt z-)fJ}AO{e|%<1A#w3XG?lPlrWadLP`lIaWJn@l5U>B&MuqOO}ADXhubys{A|y=ViKXH*8+2H`i@ z=jj1X*qeVKY6t@GXB4gJhwwWB8ypFhAdBpJ^J$-(zvPcbO>$_V$Fk zUmpZmKP|Hi5J}K%bsGb^*&Sh2%??G*^XiSo5$D7bmMsIgr2H6fYq$pL^l}@896}79 zQmU2!nkx!}U+2V;T?b-n_EWsJ`QfMY6P)A8Lwp#^%_-j1_+JvPM_RroLr3NU;o}{E ziyy*O^lmm2M)8<*hr0L)y4LSJ;y;Xh>q83ZI~;!T;ZC1E1l{1Z7)^~SIc*+0X%c`; zNS7VEf18c(!5|jZ0_1E0_944NV~;PiO~t={$u3I|@9ii+b@@~*T`_b7i*15mRWKbw z;#G(;R$VndgX>V$(izUAx>W4r_!mT(k>;5tCHbUOs$TK{eC2(rtyqC|$7P2>_w z$x@8=2;h@CXL`?5?Q2IIa=miB;wCt0)m6AaZCgnKzl0_&S9Ei3B^`7)+b} zw(bf;b+!gycQjBU;m<)gJGr+*UHjs}5U~+MZ?#$Rh3V4+bt%jnI=1&SGD7>aXy&|A zk?NMegnNN~1`^!X8?mf${)vK)F!k=~<|iPs-Z4cM1d(T#H;qx)ZkIMyd|?r$>;u-Tga=`C`Fvj``$)W|md_=g@h#EjqXVO@o)_@bc3E8mk+n+xn zeek34oWM^Y>nNsxoj{h9=`mFHtvB75h$;2h-t(XAsSfo-OQ{*I9)lrBNC4lm1hJXj zPkd-Exl;PIXQmd`KtL~#;aCq0w%Nx9y-7F+F8wecke%e;_Y|+gDxkI3Kq>RUe z86O-)Iln3Z^@Jp06mev%6`2CQH`<`bPKyl6O`5fp@Aqs8lhwwafK`?GoUu?Z#NAKu zU%PDz$YvRrxFWX=RVt{c&$TY+E z(lgD=`r_qPR7o70_UZ21MK|m++}S;1Bcz1%I9u!N7pJ8yJU(Xj5qaLleMsvp-_4Z=YjD&f*_@Yl+!wL*~!7TbfWP(8wyEx zPL$awKvkn_Jn@LlN}7Hi>*UL)oTUtDc!pf(*`uAAp5o9~e?7)G^C@2L?**0jz((TJ zm)d16t_349E}MufKwLb=`wOVQ!3qDpj{nKxZ2~uB96%?nW#wYuzx^g-PlwWpNerd4h{S&7uPk&JnX;G69 zZ2Vx9^LS{GBWtDzqoeq+I--W}XyT0EpC9hf1Mv&7#&v~NE{&mC6`B^l-rTftwShM= z^JRjn5Z?f>_$`CWCL!F@g;l%oB8l+F+qn%)jfW9zOT3Fr2gD~AiOtBT47`A-zqmpI zEZYX3==b^6qI7WW(vuTO3FpRGs6y)F8Nr2Hu-|SBW~^D+uOR^R$=2*QWnj7LbkWmS z7CP8yGW6p>w}C_==pa{n9+8!2bIhdm-3nKx_iWlTapi9FGpFtJ_K#%HvHuel8fNUs z3utqMPSYWs#hIN?8s%EZh12sbxP7PR})9fn-q{FMRJAm4^=`qUDW z|2XmY8uYR9KgGDHLO!;C-;PsG-(8N7Qd;Ll)~zHo--}N0Kh{RWgPZyIVq7#JBf7!O zhr?Mo$Ctnqdc@8#{5{^E8NT7W`r1V5NpQ`-AOd7c_g0WwW^cR2QP);wflb%)D&7P& zF%w&D0CYLazDKmn4JHE)4mziC^=elhk#7rZ$+P*Xyvn@u$G%=BYV-qPiY910wZDxQd(_u%`v z2t1D$=ImZ47w6OGEVHklkovHRw`4g8P+;}Q-1v$(w#ZQ6BOdEJt&uK+5ndcZD)}t< zgZxF1v(9Gnl>~xRy=kc6#h5&#;6O4c&4J{vio zDZmANBGdcG+< z>nTT|o-PVBlr%p}wdHn~6#Kzml?USsU4qYq9brD3tpo8+rkpatLXQ>FpUOJO>FPV; zB}*p+BE5sv!dz8yaezci!kfU%&z2R656IDsdnJa@^9o7UL%)P2g)FOapqPXJWp6dpOhK|NiX2Yz{MLiDAkZEhH*zvsk3&6mkx=u*@lP$i^IUY9u6SM4=ptSR^w= zB8Lh&g&a$vQk3x3=kxph@%{h%T-S3wuj_uj?)!cY*YjNO>v~_IoUjmuDZl^#faozY z$rb<*IQp+cK|9Ft3h}_50Y^D*zXJkPYyk)aBCXlmG6bwPf3yj>4}FDL*66E4mz?GIThys@N8VfoAl#)Rjm_@A0>k*$;;P0zvcfpv33 z3?xp1%TkF4l$Yh^pDPn-cKJC^UrMyh^MW_RIJtkm%pRy-Ov&cd(>|?vg@e@J>u_X3 zrSbb7Ck!Q?;&l9e{Br}>#6$+jdcsc&E|flA0ZoiORIEX^JLPfQE5b-AZ0Kp=`veKq zSD~JQx61-fmo$N!c41mW1sWK2!5_MfAy3N-RGUrukUcs)8TKi68ID3I1TVI>w1j;2 z5=d$5O`Mqw-!^qxsA{DGOkOTkZQgEJkvzTdxvg<{U~ziy`w#9QpQ)#CcbP*j5|GIh z#JJbF4ey5M{$E#vVC!G44@hCjzj}Y9lIy~=#61VD{1+K69B{nm7el+5vwppV{-;dTt~s#+Fwy3} z-Rl~7*F=4qKsU})nvtwIX>x9J6IOn~jL z2B|4g_o@%Ye_{^5w(#7pb#E<+CAq!j=@%PVg^La&USSq=q#C)y<6&^WkJ=9&EfQwc zD3QV=5zm?)TrT(MjOlDFbGNBu$+{4OTAoN*%6yi6tNq-W?JDL9uHEV=ynHx&a77C? z6>QT|94$PwRgbhE=A$oH@&1)`UN&z2qx=|~s;Zu1`Tm`{#1n*@O@y#XTtrKR5xhjA zxJ%_j^;Z9O9xUI=soQIiG($A(sb@WI0Z$wq1D^NklD@R;_<3Uc@BOXuD9ecEcUNu5 zw(Qq$9O6D}w}wm9vkh#iQzLY20x}}A zeE1LMo$dIe6LyVuHR=nS$Auq7wfVNL?jJLC)aJH)epth<1{7>af*M(2g}D>1!hcTG zVecD%`MWr5=xNK&t-0xJY4x%cAzfGCmK?QmT2JPJ(4W{cNL6NnU9}Dyx~d(vmfl~w zh|KZ+-K@Us)U)VsY`v&3)?g_$l-!N&CvdHB;c9nTu4-!dO0I=>DgLziNEj}TfY)7}@$;O+yLduYXK^=| zKKpwMiw|FJQamoaLCB4XEIU4MMd(6yvDYv4?qOsPf~rN{#W#T+(FmdR06(cUEAWlT zScJgF?G&Y$YUg=+`ePW#aQW`ts1D`YYd?5yCtER&!m(ARGnP1&G4<>t-M-@UF`?og z$HUJse`UIh_M=ELRKeJ-l5-QL1|G`F8mIXu2ETP+KbS=t_a9qPAA^m3SCKMS%w&{f z>uZ) zGiQ8)Od2tub?ew`A`beFe}jmc)L*@#!x_JBX|;0I_t$LJhbOcvLfgw*g$PkSZLeu9 zs9EwTJCXyuc8w!*u^jR_Q6#RGu0WRBa=q@B;g)41yfN_Nlg`Jhn=@*^5N;(j+m6icIGb-QO_e8hVL zvbM%ZZayUV05~3hM8mxGL*3hOJ^thazjf8~50$^kG2ek=jlWt;mpP%%$BPrrczwTp z;e{C2K;!zD-O`Ih&%(z_QLaQqS9@kXo!k3bPW;9qCXZDcXBSuL8D9R4My*3sro_Jo z&ND5s^V%v#d&G2{=Gm$U(eAX$!34 zi6Yu{ruqfQ)v8C$VD+*l)@08I83Khr;!6B7MU|rXdom3Ompyt)QGXvFUlSWZUdXjT zkg2Jk>+1DuxC1i%8ybD{Lc%pcJ~RvYYY_R@+bTCHF22y{JxKhINA4e*3Yix@ zP+=Tb20m~whw_thDtY&6w?HNDF5Xo9#*kwvSUNiH&dXYlAaIcIwR{&%jYvaC$}zN9 z+@5-qiO|}R`+4<)u{P651?M--#quo|Dm+y&?zhswBZ_@{Eay?w7f*bLm(8JtPn)1i z&yI>I6jp|vLev+zd8z~!+!I6R@=2$s+QWY>TP#(4FKzHWX>uIC8(IZ@031nFV!qg- zv@^fh=0$5=tY?iJRFOTs^zO4K33BZ`2t~PwidJt9usY^DoHFF&yN3O}wdWMmfpbHB ze-1?RUe_GHdGHD6QJzOwcX<4$wG~?*d7r1VN4Ok68~VwyY2f6s(qCh@hQ|%e=@7fh zTxsU_PegeC`kq*W?QCV`zWscyyo#808+F4IjgQ;-QZc6r)-^v~%6o0?&2psdGlNS> zy-Mnupd51mo`JxkttV5x$Qf- zBT&$u^Wa@WmZ*aBU!o%r=Esp@#}d)zVG>RGc!4}hv{mT6WXX&v0s|t5&r%_M{|`qE zOyT2R$tDVSte`kRT#?)?TpXn+j(6||3hZh)37Ut;v%Dh^cxGPu=r>(O68b7b|4w}0 zK6cxN0U^taq)RfKQy)1tFb;ICt5T#CWFc zOX*ML)x zr<}!x$d92r21PO$X)ZviYkOqmI`teu@nmyohdjI=C53&e62FrINHqm%>Sl@8C;CVs z{z=La`}yl4OA;o2jE|#cFZHaYKBxI)(+g_xW@S!tH<{ZC>oz_=&XzrrPk^b(qZQ9- zvk{syeIl0BaTv$2NdITT>#Mm4+0Aa@|7+iDIv_#;eBkqseZ2ER9-Ec zMQP}}Nq|&p0i=Ws-#)-oh^+SAc*8mD45oM3VD&7;Y;jQF1-3^&m7MXCYXF!YUqNiZib;7tKEV}DwZ&|Hfy$qFUnf2$= zOjT8*gTkmOCnPaGp-{w7_rgKdVd0wOnK3knEU2?>k|5_Lo|G-wgt3kTxqRv~gIz z6FL<^f>H%VoEy?lc7HKdumT8oMC<^P7K5~D$$J|vS~~!Uh}SF23|sUm2#xiJIPili z1r5RapbUiKWP&zuqEtZ# zBKHi^!abo^%@J3YqydRZ0S}a3nDyVYj0Ao55 z<$T(d0$tMgWl(B-;nz!GT#(qQD+JX$8Swx#ur; zM)lrEDpar`)+Zsa1sN8bO%yhNvDTK#T- zvw;Hi{-5dpk{H;l9BeEy^GGXoRDeCZKihZm3R08t@X|dM_N-0z?9#bIWq8sM1aj!U zoVoMTVP$FZLSyAV{{H%<;|C%SeYO(bGX71n@l z!3w&{x6RQ*o%Js22@=#XNs%t(Wr)c$K&Gqu=-{!pYJJ>9c+_aJzMsi6V5Y0uD2)6T z)W@9@(#@W&xLS=z=XTa-AyR;%RM*5u*hk+EB+p=nPbmU3+GjPoK9~nhgX@F(6lXf? z&+u?*?LU#vBzh7j@2*@T1v3M*L;Dij-F3I@}A0!4J4!x};JE9T4aS;ZU z@2tVg-~vp3yGe4Z>cscoJUD8O8EbGxUC#?nn{kEWe1>^=W7nab@AVrsmu?u;x5l_Y zAe;`Jx#o~H3q~F zIy~m6!@f>l=M5w1JbH@IFPN*^ovtZs`h*~}fW#Nl2}MFgY9l6HTGv`nhJ+eDg)eEz zzO+O~Pewy=o`#d4rs}Oi*fa49`8zBc-QywNy|`QGZh$)i_W)Tzz|R}IIr)SMI&A82 zt6foAt>2i#h;~9wuTbcQMT%z4{Ow$`cL|=Ru(j)OA9bV&-I$ev?<6I^I-q4I;5HYG zJ9s_3HD(s*e1#>BRkM}_e?P#D0{jM=f}AhLJZ-wWFKI$^fluZJ#^X<@&VstgZz0TR zQAO!NVS3D}WBilyr$S4ks_aaSqM)NCpUio<`0HUnSLN{m+T zg}j-$=FuLslMIhN;L}9W;iQDpq$bgR)G^KTjk|G*mAXDgo8zNgIPO0OQC1w}Uvgdw zcf=9ZHMVcUK!(@7O%aeuzX_ExW7mXP9l(+p2U<;0b<&j6H4JEwt1wey!D~@LAW-#B zrfo`K(UFEtnH-UzF^xX{;7|KuPMn7M((7IVLF{#`ATa&;{#S#dTgtLucGIHw&N~0; z-esVojl${^>sE%h$kNnQ6 zJ~bWSE@zdR%Mi%uYVs}dJHoQ(NLZy#Gxzg?6wc_CN214uHmPbkGD{$^VU^;($ld8} zF<#iOeI_*r$abq8LT(Rso1$4Zt}ahmI*^MYeJ@77y=5Q->9lW11muEV_>Ekx2%(z| zqB|Y{%u{t{`2kh~_9>V=6(THRCK*q>eH4A?Maw%@tNoQep@wNpsJ|=ubT;TvQGiQ9 zKvN}rzvOiN19?3;`b<_z_cVgo^WsChj^Q? zTVh$N+!#E}RO6;x%Uwdfc1rsu9j13;p!CrA)rSkeuHMDP8xE50{kS2P=CtJlV;zIP zfIgyq`c=4j+gc@V*F>Q6TIbjyy1d(lX)aOZpaD!*j7lMCyiITanz(odgHE2eBNW6L z8~d16S-unqOSnrNtw*>f#-#ZiNmvc-IwM_z|7xK>0Ow%Hs#oi;C*npop}WE(?O>5P ze){j8ZtA^o5M;eBrX{E>=;92P@}#)mPi9c}vtF7cytyEFN(;g~+h4EEn!0STR3@c+ zZ^(|j8R9eb13bJ}P`-`^^5Wi3-}oTatzDVVpS_Jg4=Sk0L;G!Aos#SlZhOi|OW*h{ zbz&QAx$C37%c-;-e|m0zZ~N|RaX>p1WyHO}uk2AF-Ng$k&lEIRT96tnl=^ZxYTb0) zZ~#mj6@v;6bE&Y^^+G9;`sKJc7pLtd>u5q=a^BN?40}4tmO~l2P~aC=|CKCpX8Q6W zNb>~YeAL56$@qHOEoxdi{9X+MgH^I@S`7}nCr2A~7i=dd+Mzn`gnpD;<9NvVL{vZ| zQhmP`(ah3(3?Z@63jF7HE=?nKG_{A9Jj<{r2X@~gD29uM>ZuuFA=a(Cm0J@PkvVo8 z0YlBoZDK`I(OHvn9hHn(l^TbgS3QWZ8w2jRhml+LXTHAgh+u3CPP`6r+YGeoIN~rb z>WhAB-~-kyIBS^jq#({DALVsNDqvF|K-~L`+h~Qyibhn-)1@UkiV<-Jb-GzeCHM|} z5C-8>o|9&W`?&$oxV1j_IWhISeXm%qL`N2a|NpBzr)-^ofS^2J`Gnx)r{_Yw13OZ8 zryZULse|u|($Z%3V`h4)?;(a_zo^{G+cNrH8PfJGwC~xIM8m2CUgq7Ka-E(qN7*0q zKQM+B0j}FWAq#5lA2lt^tR-svs#P-XbEs9K!RFs@+Hp28$iXB;TIP@C_s^6bL^X z{H>zxegwi*j7j@fbi6e@vp`uvBP7V-xN}WcTZ}W7M)XNfd^?B$#6?kug3WdFfx@k~ zl_fK7I0s`WAQR?5Ys@9=SE=A5Hs-;J`r2pFcQES+T`^s{doFR1_c+*TIBnu z{5bfaZ20A{AIyE}w$S<5vl}SS9S0n3Y*^~ihBs))MO+IaWUw^|?GU=)jn+FV^^He` z9Xk->S9ImU;s&#{qqb#8#W$I&rbs@1UxYOZ?wRyxq%$n&y0V1!j_ay=)|% z{3|9|dS(ceN7Mm-y7NE{*Bv=o2)CMk5{RI%S))hABz3z6#)Fag`^Fft+EP}OLm4ZvS{FLhBOFGsOjmG_Wc z;!I)t;_`4ubRk~Q8R^lVI=YuY4((>5X8z{rq_>KgIuCI=%my0b4?WimKCY#5zBqZN zOgx6=g-bxQo*V>+|ArhN{FD1w&V=qF=%t)|-!0OJgLy|RySHMd<7tk6(~&JcmO~gx zGCzVl0wX{*hdoYC!KNw7lD=Y&yFZd>2lE{a-F#t@;Gmrh@J8Q;?}murTxHj7qz{SKw(JMK2Ofd- zTWkETHF&l!#Q2k}y|jRSoPf-v4G++kiT~TrCIKwa(=sbI3_#njr2U8XWsuvod3RQV zEOjq$Ig+FEv(j#FOCtllzy~LTgbKEIBaL2*=IeCqthF^jb0>!G^ndM*-L-$iv7;wQRYcFY{{c9)PuBnd diff --git a/public/images/pokemon/variant/332.json b/public/images/pokemon/variant/332.json index e9b487bca25..336ef4a22f3 100644 --- a/public/images/pokemon/variant/332.json +++ b/public/images/pokemon/variant/332.json @@ -1,34 +1,36 @@ { "1": { - "319452": "831a1f", - "4a7310": "982443", - "7ba563": "b44040", - "bdef84": "ec8c8c", "8cbd63": "c54b4b", - "215200": "710f2e", + "a5d670": "df5252", + "4aa552": "9f2f2c", "a5d674": "e16363", - "196b21": "891222", + "7aa953": "c54b4b", + "7ba563": "b44040", + "215200": "710f2e", "f7ce00": "7aa1df", "525252": "123a5a", - "63b56b": "b2332f", - "a5d673": "df5252", "8c6b3a": "448bc3", - "4aa552": "9f2f2c" + "bdef84": "ec8c8c", + "63b56b": "b2332f", + "319452": "831a1f", + "196b21": "891222", + "4a7310": "982443" }, "2": { - "319452": "b08d72", - "4a7310": "4f3956", - "7ba563": "704e7e", - "bdef84": "a779ba", "8cbd63": "e3d7a6", - "215200": "583823", + "a5d670": "d7cda7", + "4aa552": "c5a77f", "a5d674": "8c669b", - "196b21": "78582c", + "7aa953": "704e7e", + "7ba563": "704e7e", + "215200": "583823", "f7ce00": "f2aacd", "525252": "a53b6f", - "63b56b": "cfc191", - "a5d673": "d7cda7", "8c6b3a": "df87bb", - "4aa552": "c5a77f" + "bdef84": "a779ba", + "63b56b": "cfc191", + "319452": "b08d72", + "196b21": "78582c", + "4a7310": "4f3956" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/332.json b/public/images/pokemon/variant/back/332.json index c13c07c34b4..fbfb3705202 100644 --- a/public/images/pokemon/variant/back/332.json +++ b/public/images/pokemon/variant/back/332.json @@ -1,28 +1,28 @@ { "1": { + "196b21": "831a1f", + "7ba563": "b44040", + "215201": "630d28", + "215200": "710f2f", + "a5d674": "df5252", + "8cbd63": "c54b4b", + "63b56b": "b2332f", + "a5d670": "e16363", "319452": "831a1f", "4aa552": "9f2f2c", - "7ba563": "b44040", - "8cbd63": "c54b4b", - "215200": "710f2f", - "196b21": "831a1f", - "a5d674": "df5252", - "4a7310": "982443", - "a5d673": "e16363", - "63b56b": "b2332f", - "215201": "630d28" + "4a7310": "982443" }, "2": { + "196b21": "b08d72", + "7ba563": "704e7e", + "215201": "583823", + "215200": "3f3249", + "a5d674": "d7cda7", + "8cbd63": "e3d7a6", + "63b56b": "cfc191", + "a5d670": "8c669b", "319452": "b08d72", "4aa552": "c5a77f", - "7ba563": "704e7e", - "8cbd63": "e3d7a6", - "215200": "3f3249", - "196b21": "b08d72", - "a5d674": "d7cda7", - "4a7310": "4f3956", - "a5d673": "8c669b", - "63b56b": "cfc191", - "215201": "583823" + "4a7310": "4f3956" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/332.json b/public/images/pokemon/variant/back/female/332.json index 9ec50cb7e92..17f8d3c5f74 100644 --- a/public/images/pokemon/variant/back/female/332.json +++ b/public/images/pokemon/variant/back/female/332.json @@ -1,28 +1,28 @@ { "1": { + "196b21": "780d4a", + "7ba563": "b44040", + "215201": "710f2e", + "215200": "710f2f", + "a5d674": "de5b6f", + "8cbd63": "bf3d64", + "63b56b": "9e2056", + "a5d670": "e16363", "319452": "780d4a", "4aa552": "8a1652", - "7ba563": "b44040", - "8cbd63": "bf3d64", - "215200": "710f2f", - "196b21": "780d4a", - "a5d674": "de5b6f", - "4a7310": "982443", - "a5d673": "e16363", - "63b56b": "9e2056", - "215201": "710f2e" + "4a7310": "982443" }, "2": { + "196b21": "b59c72", + "7ba563": "805a9c", + "215201": "694d37", + "215200": "41334d", + "a5d674": "f6f7df", + "8cbd63": "ebe9ca", + "63b56b": "e3ddb8", + "a5d670": "a473ba", "319452": "b59c72", "4aa552": "c9b991", - "7ba563": "805a9c", - "8cbd63": "ebe9ca", - "215200": "41334d", - "196b21": "b59c72", - "a5d674": "f6f7df", - "4a7310": "4f3956", - "a5d673": "a473ba", - "63b56b": "e3ddb8", - "215201": "694d37" + "4a7310": "4f3956" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/female/332.json b/public/images/pokemon/variant/female/332.json index c86429d13c4..7a1dc0f1457 100644 --- a/public/images/pokemon/variant/female/332.json +++ b/public/images/pokemon/variant/female/332.json @@ -1,34 +1,36 @@ { "1": { - "319452": "780d4a", - "4a7310": "982443", - "7ba563": "b44040", - "bdef84": "ec8c8c", "8cbd63": "bf3d64", - "215200": "710f2e", + "a5d670": "de5b6f", + "4aa552": "8a1652", "a5d674": "e16363", - "196b21": "7d1157", + "7aa953": "bf3d64", + "7ba563": "b44040", + "215200": "710f2e", "f7ce00": "5bcfc3", "525252": "20668c", - "63b56b": "9e2056", - "a5d673": "de5b6f", "8c6b3a": "33a3b0", - "4aa552": "8a1652" + "bdef84": "ec8c8c", + "63b56b": "9e2056", + "319452": "780d4a", + "196b21": "7d1157", + "4a7310": "982443" }, "2": { - "319452": "b59c72", - "4a7310": "4f3956", - "7ba563": "805a9c", - "bdef84": "c193cf", "8cbd63": "f6f7df", - "215200": "694d37", + "a5d670": "ebe9ca", + "4aa552": "c9b991", "a5d674": "a473ba", - "196b21": "9c805f", + "7aa953": "805a9c", + "7ba563": "805a9c", + "215200": "694d37", "f7ce00": "f2aab6", "525252": "983364", - "63b56b": "e3ddb8", - "a5d673": "ebe9ca", "8c6b3a": "df879f", - "4aa552": "c9b991" + "bdef84": "c193cf", + "63b56b": "e3ddb8", + "319452": "b59c72", + "196b21": "9c805f", + "4a7310": "4f3956" } } \ No newline at end of file From e053ead67cbe4c19aeadb9d61ae5bb791c7a0411 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Sun, 25 May 2025 13:37:52 -0500 Subject: [PATCH 161/262] [Bug] Fix crash caused by switching in a transformed pokemon (#5864) * Force reset summon data and load assets prior to switch in * Update src/phases/switch-summon-phase.ts --- src/phases/switch-summon-phase.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/phases/switch-summon-phase.ts b/src/phases/switch-summon-phase.ts index a063b6e6863..3e9cc7718f1 100644 --- a/src/phases/switch-summon-phase.ts +++ b/src/phases/switch-summon-phase.ts @@ -124,6 +124,12 @@ export class SwitchSummonPhase extends SummonPhase { const switchedInPokemon: Pokemon | undefined = party[this.slotIndex]; this.lastPokemon = this.getPokemon(); + // Defensive programming: Overcome the bug where the summon data has somehow not been reset + // prior to switching in a new Pokemon. + // Force the switch to occur and load the assets for the new pokemon, ignoring override. + switchedInPokemon.resetSummonData(); + switchedInPokemon.loadAssets(true); + applyPreSummonAbAttrs(PreSummonAbAttr, switchedInPokemon); applyPreSwitchOutAbAttrs(PreSwitchOutAbAttr, this.lastPokemon); if (!switchedInPokemon) { @@ -131,6 +137,7 @@ export class SwitchSummonPhase extends SummonPhase { return; } + if (this.switchType === SwitchType.BATON_PASS) { // If switching via baton pass, update opposing tags coming from the prior pokemon (this.player ? globalScene.getEnemyField() : globalScene.getPlayerField()).forEach((enemyPokemon: Pokemon) => From b803f6f18a9b7a921dff2910bfd440814032bf5e Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Tue, 27 May 2025 02:38:30 -0700 Subject: [PATCH 162/262] [i18n] Update locales (#5875) --- public/locales | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/locales b/public/locales index 42cd5cf577f..e9ccbadb6ea 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit 42cd5cf577f475c22bc82d55e7ca358eb4f3184f +Subproject commit e9ccbadb6eaa3b797f3dec919745befda2ec74bd From 999cbf911e900723a433a8d949f8cfb2084421d0 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Tue, 27 May 2025 03:56:52 -0700 Subject: [PATCH 163/262] [Bug] Fix Pichu form weights (61.5 -> 2) --- src/data/pokemon-species.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 59167ba47f6..6f05d17db6f 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -1697,8 +1697,8 @@ export function initSpecies() { new PokemonSpecies(Species.CHINCHOU, 2, false, false, false, "Angler Pokémon", PokemonType.WATER, PokemonType.ELECTRIC, 0.5, 12, Abilities.VOLT_ABSORB, Abilities.ILLUMINATE, Abilities.WATER_ABSORB, 330, 75, 38, 38, 56, 56, 67, 190, 50, 66, GrowthRate.SLOW, 50, false), new PokemonSpecies(Species.LANTURN, 2, false, false, false, "Light Pokémon", PokemonType.WATER, PokemonType.ELECTRIC, 1.2, 22.5, Abilities.VOLT_ABSORB, Abilities.ILLUMINATE, Abilities.WATER_ABSORB, 460, 125, 58, 58, 76, 76, 67, 75, 50, 161, GrowthRate.SLOW, 50, false), new PokemonSpecies(Species.PICHU, 2, false, false, false, "Tiny Mouse Pokémon", PokemonType.ELECTRIC, null, 0.3, 2, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 205, 20, 40, 15, 35, 35, 60, 190, 70, 41, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Normal", "", PokemonType.ELECTRIC, null, 1.4, 61.5, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 205, 20, 40, 15, 35, 35, 60, 190, 70, 41, false, null, true), - new PokemonForm("Spiky-Eared", "spiky", PokemonType.ELECTRIC, null, 1.4, 61.5, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 205, 20, 40, 15, 35, 35, 60, 190, 70, 41, false, null, true), + new PokemonForm("Normal", "", PokemonType.ELECTRIC, null, 1.4, 2, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 205, 20, 40, 15, 35, 35, 60, 190, 70, 41, false, null, true), + new PokemonForm("Spiky-Eared", "spiky", PokemonType.ELECTRIC, null, 1.4, 2, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 205, 20, 40, 15, 35, 35, 60, 190, 70, 41, false, null, true), ), new PokemonSpecies(Species.CLEFFA, 2, false, false, false, "Star Shape Pokémon", PokemonType.FAIRY, null, 0.3, 3, Abilities.CUTE_CHARM, Abilities.MAGIC_GUARD, Abilities.FRIEND_GUARD, 218, 50, 25, 28, 45, 55, 15, 150, 140, 44, GrowthRate.FAST, 25, false), new PokemonSpecies(Species.IGGLYBUFF, 2, false, false, false, "Balloon Pokémon", PokemonType.NORMAL, PokemonType.FAIRY, 0.3, 1, Abilities.CUTE_CHARM, Abilities.COMPETITIVE, Abilities.FRIEND_GUARD, 210, 90, 30, 15, 40, 20, 15, 170, 50, 42, GrowthRate.FAST, 25, false), From 65a90a3a8d4204197e975f6b5da1163d5ef0c136 Mon Sep 17 00:00:00 2001 From: Wlowscha <54003515+Wlowscha@users.noreply.github.com> Date: Tue, 27 May 2025 13:12:29 +0200 Subject: [PATCH 164/262] [UI/UX] Party UI handler refactor (part I) (#5821) * Splitting process input for menu into its own function * Making logic for return button more expressive * Breaking up processOptionMenuInput * Extracting filterResult logic from processInput * Inverting order of several conditional checks (if the function always returns after seeing the summary option, may as well check for it straight away...) * Moving edge case for release option into processReleaseOption * Splitting up options for when selectCallback is present * Added some TODOs for later * Extracted setOptionsCursor function * Extracted updateOptionsWindow() * Changing options so that each case is completely separate (almost) * Added some TODOs * Reorganizing option processing * Fixed Baton Pass; logging for testing * Fixed case of switching out by selecting the Pokemon command * Clearing options when switching out * Changed condition on switch for clarity * Updating TODO * Fixed options not clearing after item transfer * Splitting up processing of transfer and move recall mode; ensuring that the cancel option works properly * Breaking up processInput() * Removed some redundant playSelect * Cleaned up some TODOs * Added private to all new methods * Apply suggestions from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/ui/party-ui-handler.ts | 1470 +++++++++++++++++++++--------------- 1 file changed, 845 insertions(+), 625 deletions(-) diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index f6105c51ee3..74d4e5bcb17 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -52,6 +52,7 @@ export enum PartyUiMode { * Indicates that the party UI is open because of a start-of-encounter optional * switch. This type of switch can be cancelled. */ + // TODO: Rename to PRE_BATTLE_SWITCH POST_BATTLE_SWITCH, /** * Indicates that the party UI is open because of the move Revival Blessing. @@ -356,6 +357,522 @@ export default class PartyUiHandler extends MessageUiHandler { return true; } + private processSummaryOption(pokemon: Pokemon): boolean { + const ui = this.getUi(); + ui.playSelect(); + ui.setModeWithoutClear(UiMode.SUMMARY, pokemon).then(() => this.clearOptions()); + return true; + } + + private processPokedexOption(pokemon: Pokemon): boolean { + const ui = this.getUi(); + ui.playSelect(); + const attributes = { + shiny: pokemon.shiny, + variant: pokemon.variant, + form: pokemon.formIndex, + female: pokemon.gender === Gender.FEMALE, + }; + ui.setOverlayMode(UiMode.POKEDEX_PAGE, pokemon.species, attributes).then(() => this.clearOptions()); + return true; + } + + private processUnpauseEvolutionOption(pokemon: Pokemon): boolean { + const ui = this.getUi(); + this.clearOptions(); + ui.playSelect(); + pokemon.pauseEvolutions = !pokemon.pauseEvolutions; + this.showText( + i18next.t(pokemon.pauseEvolutions ? "partyUiHandler:pausedEvolutions" : "partyUiHandler:unpausedEvolutions", { + pokemonName: getPokemonNameWithAffix(pokemon, false), + }), + undefined, + () => this.showText("", 0), + null, + true, + ); + return true; + } + + private processUnspliceOption(pokemon: PlayerPokemon): boolean { + const ui = this.getUi(); + this.clearOptions(); + ui.playSelect(); + this.showText( + i18next.t("partyUiHandler:unspliceConfirmation", { + fusionName: pokemon.fusionSpecies?.name, + pokemonName: pokemon.getName(), + }), + null, + () => { + ui.setModeWithoutClear( + UiMode.CONFIRM, + () => { + const fusionName = pokemon.getName(); + pokemon.unfuse().then(() => { + this.clearPartySlots(); + this.populatePartySlots(); + ui.setMode(UiMode.PARTY); + this.showText( + i18next.t("partyUiHandler:wasReverted", { + fusionName: fusionName, + pokemonName: pokemon.getName(false), + }), + undefined, + () => { + ui.setMode(UiMode.PARTY); + this.showText("", 0); + }, + null, + true, + ); + }); + }, + () => { + ui.setMode(UiMode.PARTY); + this.showText("", 0); + }, + ); + }, + ); + return true; + } + + private processReleaseOption(pokemon: Pokemon): boolean { + const ui = this.getUi(); + this.clearOptions(); + ui.playSelect(); + // In release mode, we do not ask for confirmation when clicking release. + if (this.partyUiMode === PartyUiMode.RELEASE) { + this.doRelease(this.cursor); + return true; + } + if (this.cursor >= globalScene.currentBattle.getBattlerCount() || !pokemon.isAllowedInBattle()) { + this.blockInput = true; + this.showText( + i18next.t("partyUiHandler:releaseConfirmation", { + pokemonName: getPokemonNameWithAffix(pokemon, false), + }), + null, + () => { + this.blockInput = false; + ui.setModeWithoutClear( + UiMode.CONFIRM, + () => { + ui.setMode(UiMode.PARTY); + this.doRelease(this.cursor); + }, + () => { + ui.setMode(UiMode.PARTY); + this.showText("", 0); + }, + ); + }, + ); + } else { + this.showText(i18next.t("partyUiHandler:releaseInBattle"), null, () => this.showText("", 0), null, true); + } + return true; + } + + private processRenameOption(pokemon: Pokemon): boolean { + const ui = this.getUi(); + this.clearOptions(); + ui.playSelect(); + ui.setModeWithoutClear( + UiMode.RENAME_POKEMON, + { + buttonActions: [ + (nickname: string) => { + ui.playSelect(); + pokemon.nickname = nickname; + pokemon.updateInfo(); + this.clearPartySlots(); + this.populatePartySlots(); + ui.setMode(UiMode.PARTY); + }, + () => { + ui.setMode(UiMode.PARTY); + }, + ], + }, + pokemon, + ); + return true; + } + + // TODO: Does this need to check that selectCallback exists? + private processTransferOption(): boolean { + const ui = this.getUi(); + if (this.transferCursor !== this.cursor) { + if (this.transferAll) { + this.getTransferrableItemsFromPokemon(globalScene.getPlayerParty()[this.transferCursor]).forEach( + (_, i, array) => { + const invertedIndex = array.length - 1 - i; + (this.selectCallback as PartyModifierTransferSelectCallback)( + this.transferCursor, + invertedIndex, + this.transferQuantitiesMax[invertedIndex], + this.cursor, + ); + }, + ); + } else { + (this.selectCallback as PartyModifierTransferSelectCallback)( + this.transferCursor, + this.transferOptionCursor, + this.transferQuantities[this.transferOptionCursor], + this.cursor, + ); + } + } + this.clearTransfer(); + this.clearOptions(); + ui.playSelect(); + return true; + } + + // TODO: This will be largely changed with the modifier rework + private processModifierTransferModeInput(pokemon: PlayerPokemon) { + const ui = this.getUi(); + const option = this.options[this.optionsCursor]; + + if (option === PartyOption.TRANSFER) { + return this.processTransferOption(); + } + + // TODO: Revise this condition + if (!this.transferMode) { + this.startTransfer(); + + let ableToTransferText: string; + for (let p = 0; p < globalScene.getPlayerParty().length; p++) { + // this for look goes through each of the party pokemon + const newPokemon = globalScene.getPlayerParty()[p]; + // this next bit checks to see if the the selected item from the original transfer pokemon exists on the new pokemon `p` + // this returns `undefined` if the new pokemon doesn't have the item at all, otherwise it returns the `pokemonHeldItemModifier` for that item + const matchingModifier = globalScene.findModifier( + m => + m instanceof PokemonHeldItemModifier && + m.pokemonId === newPokemon.id && + m.matchType(this.getTransferrableItemsFromPokemon(pokemon)[this.transferOptionCursor]), + ) as PokemonHeldItemModifier; + const partySlot = this.partySlots.filter(m => m.getPokemon() === newPokemon)[0]; // this gets pokemon [p] for us + if (p !== this.transferCursor) { + // this skips adding the able/not able labels on the pokemon doing the transfer + if (matchingModifier) { + // if matchingModifier exists then the item exists on the new pokemon + if (matchingModifier.getMaxStackCount() === matchingModifier.stackCount) { + // checks to see if the stack of items is at max stack; if so, set the description label to "Not able" + ableToTransferText = i18next.t("partyUiHandler:notAble"); + } else { + // if the pokemon isn't at max stack, make the label "Able" + ableToTransferText = i18next.t("partyUiHandler:able"); + } + } else { + // if matchingModifier doesn't exist, that means the pokemon doesn't have any of the item, and we need to show "Able" + ableToTransferText = i18next.t("partyUiHandler:able"); + } + } else { + // this else relates to the transfer pokemon. We set the text to be blank so there's no "Able"/"Not able" text + ableToTransferText = ""; + } + partySlot.slotHpBar.setVisible(false); + partySlot.slotHpOverlay.setVisible(false); + partySlot.slotHpText.setVisible(false); + partySlot.slotDescriptionLabel.setText(ableToTransferText); + partySlot.slotDescriptionLabel.setVisible(true); + } + this.clearOptions(); + ui.playSelect(); + return true; + } + return false; + } + + // TODO: Might need to check here for when this.transferMode is active. + private processModifierTransferModeLeftRightInput(button: Button) { + let success = false; + const option = this.options[this.optionsCursor]; + if (button === Button.LEFT) { + /** Decrease quantity for the current item and update UI */ + if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER) { + this.transferQuantities[option] = + this.transferQuantities[option] === 1 + ? this.transferQuantitiesMax[option] + : this.transferQuantities[option] - 1; + this.updateOptions(); + success = this.setCursor( + this.optionsCursor, + ); /** Place again the cursor at the same position. Necessary, otherwise the cursor disappears */ + } + } + + if (button === Button.RIGHT) { + /** Increase quantity for the current item and update UI */ + if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER) { + this.transferQuantities[option] = + this.transferQuantities[option] === this.transferQuantitiesMax[option] + ? 1 + : this.transferQuantities[option] + 1; + this.updateOptions(); + success = this.setCursor( + this.optionsCursor, + ); /** Place again the cursor at the same position. Necessary, otherwise the cursor disappears */ + } + } + return success; + } + + // TODO: Might need to check here for when this.transferMode is active. + private processModifierTransferModeUpDownInput(button: Button.UP | Button.DOWN) { + let success = false; + const option = this.options[this.optionsCursor]; + + if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER) { + if (option !== PartyOption.ALL) { + this.transferQuantities[option] = this.transferQuantitiesMax[option]; + } + this.updateOptions(); + } + success = this.moveOptionCursor(button); + + return success; + } + + private moveOptionCursor(button: Button.UP | Button.DOWN): boolean { + if (button === Button.UP) { + return this.setCursor(this.optionsCursor ? this.optionsCursor - 1 : this.options.length - 1); + } + return this.setCursor(this.optionsCursor < this.options.length - 1 ? this.optionsCursor + 1 : 0); + } + + private processRememberMoveModeInput(pokemon: PlayerPokemon) { + const ui = this.getUi(); + const option = this.options[this.optionsCursor]; + + // clear overlay on cancel + this.moveInfoOverlay.clear(); + const filterResult = (this.selectFilter as PokemonSelectFilter)(pokemon); + if (filterResult === null) { + this.selectCallback?.(this.cursor, option); + this.clearOptions(); + } else { + this.clearOptions(); + this.showText(filterResult as string, undefined, () => this.showText("", 0), undefined, true); + } + ui.playSelect(); + return true; + } + + private processRememberMoveModeUpDownInput(button: Button.UP | Button.DOWN) { + let success = false; + + success = this.moveOptionCursor(button); + + // show move description + const option = this.options[this.optionsCursor]; + const pokemon = globalScene.getPlayerParty()[this.cursor]; + const move = allMoves[pokemon.getLearnableLevelMoves()[option]]; + if (move) { + this.moveInfoOverlay.show(move); + } else { + // or hide the overlay, in case it's the cancel button + this.moveInfoOverlay.clear(); + } + + return success; + } + + private getTransferrableItemsFromPokemon(pokemon: PlayerPokemon) { + return globalScene.findModifiers( + m => m instanceof PokemonHeldItemModifier && m.isTransferable && m.pokemonId === pokemon.id, + ) as PokemonHeldItemModifier[]; + } + + private getFilterResult(option: number, pokemon: PlayerPokemon): string | null { + let filterResult: string | null; + if (option !== PartyOption.TRANSFER && option !== PartyOption.SPLICE) { + filterResult = (this.selectFilter as PokemonSelectFilter)(pokemon); + if (filterResult === null && (option === PartyOption.SEND_OUT || option === PartyOption.PASS_BATON)) { + filterResult = this.FilterChallengeLegal(pokemon); + } + if (filterResult === null && this.partyUiMode === PartyUiMode.MOVE_MODIFIER) { + filterResult = this.moveSelectFilter(pokemon.moveset[this.optionsCursor]); + } + } else { + filterResult = (this.selectFilter as PokemonModifierTransferSelectFilter)( + pokemon, + this.getTransferrableItemsFromPokemon(globalScene.getPlayerParty()[this.transferCursor])[ + this.transferOptionCursor + ], + ); + } + return filterResult; + } + + private processActionButtonForOptions(option: PartyOption) { + const ui = this.getUi(); + if (option === PartyOption.CANCEL) { + return this.processOptionMenuInput(Button.CANCEL); + } + + // If the input has been already processed we are done, otherwise move on until the correct option is found + const pokemon = globalScene.getPlayerParty()[this.cursor]; + + // TODO: Careful about using success for the return values here. Find a better way + // PartyOption.ALL, and options specific to the mode (held items) + if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER) { + return this.processModifierTransferModeInput(pokemon); + } + + // options specific to the mode (moves) + if (this.partyUiMode === PartyUiMode.REMEMBER_MOVE_MODIFIER) { + return this.processRememberMoveModeInput(pokemon); + } + + // These are the options that do not involve a callback + if (option === PartyOption.SUMMARY) { + return this.processSummaryOption(pokemon); + } + if (option === PartyOption.POKEDEX) { + return this.processPokedexOption(pokemon); + } + if (option === PartyOption.UNPAUSE_EVOLUTION) { + return this.processUnpauseEvolutionOption(pokemon); + } + if (option === PartyOption.UNSPLICE) { + return this.processUnspliceOption(pokemon); + } + if (option === PartyOption.RENAME) { + return this.processRenameOption(pokemon); + } + // This is only relevant for PartyUiMode.CHECK + // TODO: This risks hitting the other options (.MOVE_i and ALL) so does it? Do we need an extra check? + if ( + option >= PartyOption.FORM_CHANGE_ITEM && + globalScene.getCurrentPhase() instanceof SelectModifierPhase && + this.partyUiMode === PartyUiMode.CHECK + ) { + const formChangeItemModifiers = this.getFormChangeItemsModifiers(pokemon); + const modifier = formChangeItemModifiers[option - PartyOption.FORM_CHANGE_ITEM]; + modifier.active = !modifier.active; + globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeItemTrigger, false, true); + } + + // If the pokemon is filtered out for this option, we cannot continue + const filterResult = this.getFilterResult(option, pokemon); + if (filterResult) { + this.clearOptions(); + this.showText(filterResult as string, undefined, () => this.showText("", 0), undefined, true); + return true; + } + + // For what modes is a selectCallback needed? + // PartyUiMode.SELECT (SELECT) + // PartyUiMode.RELEASE (RELEASE) + // PartyUiMode.FAINT_SWITCH (SEND_OUT or PASS_BATON (?)) + // PartyUiMode.REVIVAL_BLESSING (REVIVE) + // PartyUiMode.MODIFIER_TRANSFER (held items, and ALL) + // PartyUiMode.CHECK --- no specific option, only relevant on cancel? + // PartyUiMode.SPLICE (SPLICE) + // PartyUiMode.MOVE_MODIFIER (MOVE_1, MOVE_2, MOVE_3, MOVE_4) + // PartyUiMode.TM_MODIFIER (TEACH) + // PartyUiMode.REMEMBER_MOVE_MODIFIER (no specific option, callback is invoked when selecting a move) + // PartyUiMode.MODIFIER (APPLY option) + // PartyUiMode.POST_BATTLE_SWITCH (SEND_OUT) + + // These are the options that need a callback + if (option === PartyOption.RELEASE) { + return this.processReleaseOption(pokemon); + } + + if (this.partyUiMode === PartyUiMode.SPLICE) { + if (option === PartyOption.SPLICE) { + (this.selectCallback as PartyModifierSpliceSelectCallback)(this.transferCursor, this.cursor); + this.clearTransfer(); + } else if (option === PartyOption.APPLY) { + this.startTransfer(); + } + this.clearOptions(); + ui.playSelect(); + return true; + } + + // This is used when switching out using the Pokemon command (possibly holding a Baton held item). In this case there is no callback. + if ( + (option === PartyOption.PASS_BATON || option === PartyOption.SEND_OUT) && + this.partyUiMode === PartyUiMode.SWITCH + ) { + this.clearOptions(); + (globalScene.getCurrentPhase() as CommandPhase).handleCommand( + Command.POKEMON, + this.cursor, + option === PartyOption.PASS_BATON, + ); + } + + if ( + [ + PartyOption.SEND_OUT, // When sending out at the start of battle, or due to an effect + PartyOption.PASS_BATON, // When passing the baton due to the Baton Pass move + PartyOption.REVIVE, + PartyOption.APPLY, + PartyOption.TEACH, + PartyOption.MOVE_1, + PartyOption.MOVE_2, + PartyOption.MOVE_3, + PartyOption.MOVE_4, + PartyOption.SELECT, + ].includes(option) && + this.selectCallback + ) { + this.clearOptions(); + const selectCallback = this.selectCallback; + this.selectCallback = null; + selectCallback(this.cursor, option); + return true; + } + + return false; + } + + private processOptionMenuInput(button: Button) { + const ui = this.getUi(); + const option = this.options[this.optionsCursor]; + + // Button.CANCEL has no special behavior for any option + if (button === Button.CANCEL) { + this.clearOptions(); + ui.playSelect(); + return true; + } + + if (button === Button.ACTION) { + return this.processActionButtonForOptions(option); + } + + if (button === Button.UP || button === Button.DOWN) { + if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER) { + return this.processModifierTransferModeUpDownInput(button); + } + + if (this.partyUiMode === PartyUiMode.REMEMBER_MOVE_MODIFIER) { + return this.processRememberMoveModeUpDownInput(button); + } + + return this.moveOptionCursor(button); + } + + if (button === Button.LEFT || button === Button.RIGHT) { + if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER) { + return this.processModifierTransferModeLeftRightInput(button); + } + } + + return false; + } + processInput(button: Button): boolean { const ui = this.getUi(); @@ -375,463 +892,120 @@ export default class PartyUiHandler extends MessageUiHandler { return false; } - let success = false; - if (this.optionsMode) { - const option = this.options[this.optionsCursor]; - if (button === Button.ACTION) { - const pokemon = globalScene.getPlayerParty()[this.cursor]; - if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER && !this.transferMode && option !== PartyOption.CANCEL) { - this.startTransfer(); - - let ableToTransfer: string; - for (let p = 0; p < globalScene.getPlayerParty().length; p++) { - // this for look goes through each of the party pokemon - const newPokemon = globalScene.getPlayerParty()[p]; - // this next line gets all of the transferable items from pokemon [p]; it does this by getting all the held modifiers that are transferable and checking to see if they belong to pokemon [p] - const getTransferrableItemsFromPokemon = (newPokemon: PlayerPokemon) => - globalScene.findModifiers( - m => - m instanceof PokemonHeldItemModifier && - (m as PokemonHeldItemModifier).isTransferable && - (m as PokemonHeldItemModifier).pokemonId === newPokemon.id, - ) as PokemonHeldItemModifier[]; - // this next bit checks to see if the the selected item from the original transfer pokemon exists on the new pokemon [p]; this returns undefined if the new pokemon doesn't have the item at all, otherwise it returns the pokemonHeldItemModifier for that item - const matchingModifier = globalScene.findModifier( - m => - m instanceof PokemonHeldItemModifier && - m.pokemonId === newPokemon.id && - m.matchType(getTransferrableItemsFromPokemon(pokemon)[this.transferOptionCursor]), - ) as PokemonHeldItemModifier; - const partySlot = this.partySlots.filter(m => m.getPokemon() === newPokemon)[0]; // this gets pokemon [p] for us - if (p !== this.transferCursor) { - // this skips adding the able/not able labels on the pokemon doing the transfer - if (matchingModifier) { - // if matchingModifier exists then the item exists on the new pokemon - if (matchingModifier.getMaxStackCount() === matchingModifier.stackCount) { - // checks to see if the stack of items is at max stack; if so, set the description label to "Not able" - ableToTransfer = i18next.t("partyUiHandler:notAble"); - } else { - // if the pokemon isn't at max stack, make the label "Able" - ableToTransfer = i18next.t("partyUiHandler:able"); - } - } else { - // if matchingModifier doesn't exist, that means the pokemon doesn't have any of the item, and we need to show "Able" - ableToTransfer = i18next.t("partyUiHandler:able"); - } - } else { - // this else relates to the transfer pokemon. We set the text to be blank so there's no "Able"/"Not able" text - ableToTransfer = ""; - } - partySlot.slotHpBar.setVisible(false); - partySlot.slotHpOverlay.setVisible(false); - partySlot.slotHpText.setVisible(false); - partySlot.slotDescriptionLabel.setText(ableToTransfer); - partySlot.slotDescriptionLabel.setVisible(true); - } - - this.clearOptions(); - ui.playSelect(); - return true; - } - if (this.partyUiMode === PartyUiMode.REMEMBER_MOVE_MODIFIER && option !== PartyOption.CANCEL) { - // clear overlay on cancel - this.moveInfoOverlay.clear(); - const filterResult = (this.selectFilter as PokemonSelectFilter)(pokemon); - if (filterResult === null) { - this.selectCallback?.(this.cursor, option); - this.clearOptions(); - } else { - this.clearOptions(); - this.showText(filterResult as string, undefined, () => this.showText("", 0), undefined, true); - } - ui.playSelect(); - return true; - } - if ( - ![ - PartyOption.SUMMARY, - PartyOption.POKEDEX, - PartyOption.UNPAUSE_EVOLUTION, - PartyOption.UNSPLICE, - PartyOption.RELEASE, - PartyOption.CANCEL, - PartyOption.RENAME, - ].includes(option) || - (option === PartyOption.RELEASE && this.partyUiMode === PartyUiMode.RELEASE) - ) { - let filterResult: string | null; - const getTransferrableItemsFromPokemon = (pokemon: PlayerPokemon) => - globalScene.findModifiers( - m => m instanceof PokemonHeldItemModifier && m.isTransferable && m.pokemonId === pokemon.id, - ) as PokemonHeldItemModifier[]; - if (option !== PartyOption.TRANSFER && option !== PartyOption.SPLICE) { - filterResult = (this.selectFilter as PokemonSelectFilter)(pokemon); - if (filterResult === null && (option === PartyOption.SEND_OUT || option === PartyOption.PASS_BATON)) { - filterResult = this.FilterChallengeLegal(pokemon); - } - if (filterResult === null && this.partyUiMode === PartyUiMode.MOVE_MODIFIER) { - filterResult = this.moveSelectFilter(pokemon.moveset[this.optionsCursor]); - } - } else { - filterResult = (this.selectFilter as PokemonModifierTransferSelectFilter)( - pokemon, - getTransferrableItemsFromPokemon(globalScene.getPlayerParty()[this.transferCursor])[ - this.transferOptionCursor - ], - ); - } - if (filterResult === null) { - if (this.partyUiMode !== PartyUiMode.SPLICE) { - this.clearOptions(); - } - if (this.selectCallback && this.partyUiMode !== PartyUiMode.CHECK) { - if (option === PartyOption.TRANSFER) { - if (this.transferCursor !== this.cursor) { - if (this.transferAll) { - getTransferrableItemsFromPokemon(globalScene.getPlayerParty()[this.transferCursor]).forEach( - (_, i, array) => { - const invertedIndex = array.length - 1 - i; - (this.selectCallback as PartyModifierTransferSelectCallback)( - this.transferCursor, - invertedIndex, - this.transferQuantitiesMax[invertedIndex], - this.cursor, - ); - }, - ); - } else { - (this.selectCallback as PartyModifierTransferSelectCallback)( - this.transferCursor, - this.transferOptionCursor, - this.transferQuantities[this.transferOptionCursor], - this.cursor, - ); - } - } - this.clearTransfer(); - } else if (this.partyUiMode === PartyUiMode.SPLICE) { - if (option === PartyOption.SPLICE) { - (this.selectCallback as PartyModifierSpliceSelectCallback)(this.transferCursor, this.cursor); - this.clearTransfer(); - } else { - this.startTransfer(); - } - this.clearOptions(); - } else if (option === PartyOption.RELEASE) { - this.doRelease(this.cursor); - } else { - const selectCallback = this.selectCallback; - this.selectCallback = null; - selectCallback(this.cursor, option); - } - } else { - if ( - option >= PartyOption.FORM_CHANGE_ITEM && - globalScene.getCurrentPhase() instanceof SelectModifierPhase - ) { - if (this.partyUiMode === PartyUiMode.CHECK) { - const formChangeItemModifiers = this.getFormChangeItemsModifiers(pokemon); - const modifier = formChangeItemModifiers[option - PartyOption.FORM_CHANGE_ITEM]; - modifier.active = !modifier.active; - globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeItemTrigger, false, true); - } - } else if (this.cursor) { - (globalScene.getCurrentPhase() as CommandPhase).handleCommand( - Command.POKEMON, - this.cursor, - option === PartyOption.PASS_BATON, - ); - } - } - if ( - this.partyUiMode !== PartyUiMode.MODIFIER && - this.partyUiMode !== PartyUiMode.TM_MODIFIER && - this.partyUiMode !== PartyUiMode.MOVE_MODIFIER - ) { - ui.playSelect(); - } - return true; - } - this.clearOptions(); - this.showText(filterResult as string, undefined, () => this.showText("", 0), undefined, true); - } else if (option === PartyOption.SUMMARY) { - ui.playSelect(); - ui.setModeWithoutClear(UiMode.SUMMARY, pokemon).then(() => this.clearOptions()); - return true; - } else if (option === PartyOption.POKEDEX) { - ui.playSelect(); - const attributes = { - shiny: pokemon.shiny, - variant: pokemon.variant, - form: pokemon.formIndex, - female: pokemon.gender === Gender.FEMALE, - }; - ui.setOverlayMode(UiMode.POKEDEX_PAGE, pokemon.species, attributes).then(() => this.clearOptions()); - return true; - } else if (option === PartyOption.UNPAUSE_EVOLUTION) { - this.clearOptions(); - ui.playSelect(); - pokemon.pauseEvolutions = !pokemon.pauseEvolutions; - this.showText( - i18next.t( - pokemon.pauseEvolutions ? "partyUiHandler:pausedEvolutions" : "partyUiHandler:unpausedEvolutions", - { pokemonName: getPokemonNameWithAffix(pokemon, false) }, - ), - undefined, - () => this.showText("", 0), - null, - true, - ); - } else if (option === PartyOption.UNSPLICE) { - this.clearOptions(); - ui.playSelect(); - this.showText( - i18next.t("partyUiHandler:unspliceConfirmation", { - fusionName: pokemon.fusionSpecies?.name, - pokemonName: pokemon.getName(), - }), - null, - () => { - ui.setModeWithoutClear( - UiMode.CONFIRM, - () => { - const fusionName = pokemon.getName(); - pokemon.unfuse().then(() => { - this.clearPartySlots(); - this.populatePartySlots(); - ui.setMode(UiMode.PARTY); - this.showText( - i18next.t("partyUiHandler:wasReverted", { - fusionName: fusionName, - pokemonName: pokemon.getName(false), - }), - undefined, - () => { - ui.setMode(UiMode.PARTY); - this.showText("", 0); - }, - null, - true, - ); - }); - }, - () => { - ui.setMode(UiMode.PARTY); - this.showText("", 0); - }, - ); - }, - ); - } else if (option === PartyOption.RELEASE) { - this.clearOptions(); - ui.playSelect(); - if (this.cursor >= globalScene.currentBattle.getBattlerCount() || !pokemon.isAllowedInBattle()) { - this.blockInput = true; - this.showText( - i18next.t("partyUiHandler:releaseConfirmation", { - pokemonName: getPokemonNameWithAffix(pokemon, false), - }), - null, - () => { - this.blockInput = false; - ui.setModeWithoutClear( - UiMode.CONFIRM, - () => { - ui.setMode(UiMode.PARTY); - this.doRelease(this.cursor); - }, - () => { - ui.setMode(UiMode.PARTY); - this.showText("", 0); - }, - ); - }, - ); - } else { - this.showText(i18next.t("partyUiHandler:releaseInBattle"), null, () => this.showText("", 0), null, true); - } - return true; - } else if (option === PartyOption.RENAME) { - this.clearOptions(); - ui.playSelect(); - ui.setModeWithoutClear( - UiMode.RENAME_POKEMON, - { - buttonActions: [ - (nickname: string) => { - ui.playSelect(); - pokemon.nickname = nickname; - pokemon.updateInfo(); - this.clearPartySlots(); - this.populatePartySlots(); - ui.setMode(UiMode.PARTY); - }, - () => { - ui.setMode(UiMode.PARTY); - }, - ], - }, - pokemon, - ); - return true; - } else if (option === PartyOption.CANCEL) { - return this.processInput(Button.CANCEL); - } else if (option === PartyOption.SELECT) { - ui.playSelect(); - return true; - } - } else if (button === Button.CANCEL) { - this.clearOptions(); + let success = false; + success = this.processOptionMenuInput(button); + if (success) { ui.playSelect(); - return true; + } + return success; + } + + if (button === Button.ACTION) { + return this.processPartyActionInput(); + } + + if (button === Button.CANCEL) { + return this.processPartyCancelInput(); + } + + if (button === Button.UP || button === Button.DOWN || button === Button.RIGHT || button === Button.LEFT) { + return this.processPartyDirectionalInput(button); + } + + return false; + } + + private allowCancel(): boolean { + return !(this.partyUiMode === PartyUiMode.FAINT_SWITCH || this.partyUiMode === PartyUiMode.REVIVAL_BLESSING); + } + + private processPartyActionInput(): boolean { + const ui = this.getUi(); + if (this.cursor < 6) { + if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER && !this.transferMode) { + /** Initialize item quantities for the selected Pokemon */ + const itemModifiers = globalScene.findModifiers( + m => + m instanceof PokemonHeldItemModifier && + m.isTransferable && + m.pokemonId === globalScene.getPlayerParty()[this.cursor].id, + ) as PokemonHeldItemModifier[]; + this.transferQuantities = itemModifiers.map(item => item.getStackCount()); + this.transferQuantitiesMax = itemModifiers.map(item => item.getStackCount()); + } + this.showOptions(); + ui.playSelect(); + } + // Pressing return button + if (this.cursor === 6) { + if (!this.allowCancel()) { + ui.playError(); } else { - switch (button) { - case Button.LEFT: - /** Decrease quantity for the current item and update UI */ - if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER) { - this.transferQuantities[option] = - this.transferQuantities[option] === 1 - ? this.transferQuantitiesMax[option] - : this.transferQuantities[option] - 1; - this.updateOptions(); - success = this.setCursor( - this.optionsCursor, - ); /** Place again the cursor at the same position. Necessary, otherwise the cursor disappears */ - } - break; - case Button.RIGHT: - /** Increase quantity for the current item and update UI */ - if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER) { - this.transferQuantities[option] = - this.transferQuantities[option] === this.transferQuantitiesMax[option] - ? 1 - : this.transferQuantities[option] + 1; - this.updateOptions(); - success = this.setCursor( - this.optionsCursor, - ); /** Place again the cursor at the same position. Necessary, otherwise the cursor disappears */ - } - break; - case Button.UP: - /** If currently selecting items to transfer, reset quantity selection */ - if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER) { - if (option !== PartyOption.ALL) { - this.transferQuantities[option] = this.transferQuantitiesMax[option]; - } - this.updateOptions(); - } - success = this.setCursor( - this.optionsCursor ? this.optionsCursor - 1 : this.options.length - 1, - ); /** Move cursor */ - break; - case Button.DOWN: - /** If currently selecting items to transfer, reset quantity selection */ - if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER) { - if (option !== PartyOption.ALL) { - this.transferQuantities[option] = this.transferQuantitiesMax[option]; - } - this.updateOptions(); - } - success = this.setCursor( - this.optionsCursor < this.options.length - 1 ? this.optionsCursor + 1 : 0, - ); /** Move cursor */ - break; - } - - // show move description - if (this.partyUiMode === PartyUiMode.REMEMBER_MOVE_MODIFIER) { - const option = this.options[this.optionsCursor]; - const pokemon = globalScene.getPlayerParty()[this.cursor]; - const move = allMoves[pokemon.getLearnableLevelMoves()[option]]; - if (move) { - this.moveInfoOverlay.show(move); - } else { - // or hide the overlay, in case it's the cancel button - this.moveInfoOverlay.clear(); - } - } + return this.processInput(Button.CANCEL); } - } else { - if (button === Button.ACTION) { - if (this.cursor < 6) { - if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER && !this.transferMode) { - /** Initialize item quantities for the selected Pokemon */ - const itemModifiers = globalScene.findModifiers( - m => - m instanceof PokemonHeldItemModifier && - m.isTransferable && - m.pokemonId === globalScene.getPlayerParty()[this.cursor].id, - ) as PokemonHeldItemModifier[]; - this.transferQuantities = itemModifiers.map(item => item.getStackCount()); - this.transferQuantitiesMax = itemModifiers.map(item => item.getStackCount()); - } - this.showOptions(); - ui.playSelect(); - } else if (this.partyUiMode === PartyUiMode.FAINT_SWITCH || this.partyUiMode === PartyUiMode.REVIVAL_BLESSING) { - ui.playError(); - } else { - return this.processInput(Button.CANCEL); - } - return true; + } + return true; + } + + private processPartyCancelInput(): boolean { + const ui = this.getUi(); + if ( + (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER || this.partyUiMode === PartyUiMode.SPLICE) && + this.transferMode + ) { + this.clearTransfer(); + ui.playSelect(); + } else if (this.allowCancel()) { + if (this.selectCallback) { + const selectCallback = this.selectCallback; + this.selectCallback = null; + selectCallback(6, PartyOption.CANCEL); + ui.playSelect(); + } else { + ui.setMode(UiMode.COMMAND, this.fieldIndex); + ui.playSelect(); } - if (button === Button.CANCEL) { - if ( - (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER || this.partyUiMode === PartyUiMode.SPLICE) && - this.transferMode - ) { - this.clearTransfer(); - ui.playSelect(); - } else if (this.partyUiMode !== PartyUiMode.FAINT_SWITCH && this.partyUiMode !== PartyUiMode.REVIVAL_BLESSING) { - if (this.selectCallback) { - const selectCallback = this.selectCallback; - this.selectCallback = null; - selectCallback(6, PartyOption.CANCEL); - ui.playSelect(); - } else { - ui.setMode(UiMode.COMMAND, this.fieldIndex); - ui.playSelect(); - } + } + return true; + } + + private processPartyDirectionalInput(button: Button.UP | Button.DOWN | Button.LEFT | Button.RIGHT): boolean { + const ui = this.getUi(); + const slotCount = this.partySlots.length; + const battlerCount = globalScene.currentBattle.getBattlerCount(); + + let success = false; + switch (button) { + case Button.UP: + success = this.setCursor(this.cursor ? (this.cursor < 6 ? this.cursor - 1 : slotCount - 1) : 6); + break; + case Button.DOWN: + success = this.setCursor(this.cursor < 6 ? (this.cursor < slotCount - 1 ? this.cursor + 1 : 6) : 0); + break; + case Button.LEFT: + if (this.cursor >= battlerCount && this.cursor <= 6) { + success = this.setCursor(0); } - - return true; - } - - const slotCount = this.partySlots.length; - const battlerCount = globalScene.currentBattle.getBattlerCount(); - - switch (button) { - case Button.UP: - success = this.setCursor(this.cursor ? (this.cursor < 6 ? this.cursor - 1 : slotCount - 1) : 6); + break; + case Button.RIGHT: + if (slotCount === battlerCount) { + success = this.setCursor(6); break; - case Button.DOWN: - success = this.setCursor(this.cursor < 6 ? (this.cursor < slotCount - 1 ? this.cursor + 1 : 6) : 0); + } + if (battlerCount >= 2 && slotCount > battlerCount && this.getCursor() === 0 && this.lastCursor === 1) { + success = this.setCursor(2); break; - case Button.LEFT: - if (this.cursor >= battlerCount && this.cursor <= 6) { - success = this.setCursor(0); - } + } + if (slotCount > battlerCount && this.cursor < battlerCount) { + success = this.setCursor(this.lastCursor < 6 ? this.lastCursor || battlerCount : battlerCount); break; - case Button.RIGHT: - if (slotCount === battlerCount) { - success = this.setCursor(6); - break; - } - if (battlerCount >= 2 && slotCount > battlerCount && this.getCursor() === 0 && this.lastCursor === 1) { - success = this.setCursor(2); - break; - } - if (slotCount > battlerCount && this.cursor < battlerCount) { - success = this.setCursor(this.lastCursor < 6 ? this.lastCursor || battlerCount : battlerCount); - break; - } - } + } } if (success) { ui.playSelect(); } - return success; } @@ -860,64 +1034,66 @@ export default class PartyUiHandler extends MessageUiHandler { } setCursor(cursor: number): boolean { - let changed: boolean; - if (this.optionsMode) { - changed = this.optionsCursor !== cursor; - let isScroll = false; - if (changed && this.optionsScroll) { - if (Math.abs(cursor - this.optionsCursor) === this.options.length - 1) { - this.optionsScrollCursor = cursor ? this.optionsScrollTotal - 8 : 0; - this.updateOptions(); - } else { - const isDown = cursor && cursor > this.optionsCursor; - if (isDown) { - if (this.options[cursor] === PartyOption.SCROLL_DOWN) { - isScroll = true; - this.optionsScrollCursor++; - } - } else { - if (!cursor && this.optionsScrollCursor) { - isScroll = true; - this.optionsScrollCursor--; - } - } - if (isScroll && this.optionsScrollCursor === 1) { - this.optionsScrollCursor += isDown ? 1 : -1; - } - } + return this.setOptionsCursor(cursor); + } + const changed = this.cursor !== cursor; + if (changed) { + this.lastCursor = this.cursor; + this.cursor = cursor; + if (this.lastCursor < 6) { + this.partySlots[this.lastCursor].deselect(); + } else if (this.lastCursor === 6) { + this.partyCancelButton.deselect(); } - if (isScroll) { + if (cursor < 6) { + this.partySlots[cursor].select(); + } else if (cursor === 6) { + this.partyCancelButton.select(); + } + } + return changed; + } + + private setOptionsCursor(cursor: number): boolean { + const changed = this.optionsCursor !== cursor; + let isScroll = false; + if (changed && this.optionsScroll) { + if (Math.abs(cursor - this.optionsCursor) === this.options.length - 1) { + this.optionsScrollCursor = cursor ? this.optionsScrollTotal - 8 : 0; this.updateOptions(); } else { - this.optionsCursor = cursor; - } - if (!this.optionsCursorObj) { - this.optionsCursorObj = globalScene.add.image(0, 0, "cursor"); - this.optionsCursorObj.setOrigin(0, 0); - this.optionsContainer.add(this.optionsCursorObj); - } - this.optionsCursorObj.setPosition( - 8 - this.optionsBg.displayWidth, - -19 - 16 * (this.options.length - 1 - this.optionsCursor), - ); - } else { - changed = this.cursor !== cursor; - if (changed) { - this.lastCursor = this.cursor; - this.cursor = cursor; - if (this.lastCursor < 6) { - this.partySlots[this.lastCursor].deselect(); - } else if (this.lastCursor === 6) { - this.partyCancelButton.deselect(); + const isDown = cursor && cursor > this.optionsCursor; + if (isDown) { + if (this.options[cursor] === PartyOption.SCROLL_DOWN) { + isScroll = true; + this.optionsScrollCursor++; + } + } else { + if (!cursor && this.optionsScrollCursor) { + isScroll = true; + this.optionsScrollCursor--; + } } - if (cursor < 6) { - this.partySlots[cursor].select(); - } else if (cursor === 6) { - this.partyCancelButton.select(); + if (isScroll && this.optionsScrollCursor === 1) { + this.optionsScrollCursor += isDown ? 1 : -1; } } } + if (isScroll) { + this.updateOptions(); + } else { + this.optionsCursor = cursor; + } + if (!this.optionsCursorObj) { + this.optionsCursorObj = globalScene.add.image(0, 0, "cursor"); + this.optionsCursorObj.setOrigin(0, 0); + this.optionsContainer.add(this.optionsCursorObj); + } + this.optionsCursorObj.setPosition( + 8 - this.optionsBg.displayWidth, + -19 - 16 * (this.options.length - 1 - this.optionsCursor), + ); return changed; } @@ -984,149 +1160,81 @@ export default class PartyUiHandler extends MessageUiHandler { this.setCursor(0); } - updateOptions(): void { - const pokemon = globalScene.getPlayerParty()[this.cursor]; + private allowBatonModifierSwitch(): boolean { + return !!( + this.partyUiMode !== PartyUiMode.FAINT_SWITCH && + globalScene.findModifier( + m => + m instanceof SwitchEffectTransferModifier && + m.pokemonId === globalScene.getPlayerField()[this.fieldIndex].id, + ) + ); + } - const learnableLevelMoves = - this.partyUiMode === PartyUiMode.REMEMBER_MOVE_MODIFIER ? pokemon.getLearnableLevelMoves() : []; + // TODO: add FORCED_SWITCH (and perhaps also BATON_PASS_SWITCH) to the modes + private isBatonPassMove(): boolean { + const moveHistory = globalScene.getPlayerField()[this.fieldIndex].getMoveHistory(); + return !!( + this.partyUiMode === PartyUiMode.FAINT_SWITCH && + moveHistory.length && + allMoves[moveHistory[moveHistory.length - 1].move].getAttrs(ForceSwitchOutAttr)[0]?.isBatonPass() && + moveHistory[moveHistory.length - 1].result === MoveResult.SUCCESS + ); + } - if (this.partyUiMode === PartyUiMode.REMEMBER_MOVE_MODIFIER && learnableLevelMoves?.length) { + private getItemModifiers(pokemon: Pokemon): PokemonHeldItemModifier[] { + return ( + (globalScene.findModifiers( + m => m instanceof PokemonHeldItemModifier && m.isTransferable && m.pokemonId === pokemon.id, + ) as PokemonHeldItemModifier[]) ?? [] + ); + } + + private updateOptionsWithRememberMoveModifierMode(pokemon): void { + const learnableMoves = pokemon.getLearnableLevelMoves(); + for (let m = 0; m < learnableMoves.length; m++) { + this.options.push(m); + } + if (learnableMoves?.length) { // show the move overlay with info for the first move - this.moveInfoOverlay.show(allMoves[learnableLevelMoves[0]]); + this.moveInfoOverlay.show(allMoves[learnableMoves[0]]); } + } - const itemModifiers = - this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER - ? (globalScene.findModifiers( - m => m instanceof PokemonHeldItemModifier && m.isTransferable && m.pokemonId === pokemon.id, - ) as PokemonHeldItemModifier[]) - : []; - - if (this.options.length) { - this.options.splice(0, this.options.length); - this.optionsContainer.removeAll(true); - this.eraseOptionsCursor(); + private updateOptionsWithMoveModifierMode(pokemon): void { + // MOVE_1, MOVE_2, MOVE_3, MOVE_4 + for (let m = 0; m < pokemon.moveset.length; m++) { + this.options.push(PartyOption.MOVE_1 + m); } + } - let formChangeItemModifiers: PokemonFormChangeItemModifier[] | undefined; + private updateOptionsWithModifierTransferMode(pokemon): void { + const itemModifiers = this.getItemModifiers(pokemon); + for (let im = 0; im < itemModifiers.length; im++) { + this.options.push(im); + } + if (itemModifiers.length > 1) { + this.options.push(PartyOption.ALL); + } + } + + private addCommonOptions(pokemon): void { + this.options.push(PartyOption.SUMMARY); + this.options.push(PartyOption.POKEDEX); + this.options.push(PartyOption.RENAME); if ( - this.partyUiMode !== PartyUiMode.MOVE_MODIFIER && - this.partyUiMode !== PartyUiMode.REMEMBER_MOVE_MODIFIER && - (this.transferMode || this.partyUiMode !== PartyUiMode.MODIFIER_TRANSFER) + pokemonEvolutions.hasOwnProperty(pokemon.species.speciesId) || + (pokemon.isFusion() && pokemon.fusionSpecies && pokemonEvolutions.hasOwnProperty(pokemon.fusionSpecies.speciesId)) ) { - switch (this.partyUiMode) { - case PartyUiMode.SWITCH: - case PartyUiMode.FAINT_SWITCH: - case PartyUiMode.POST_BATTLE_SWITCH: - if (this.cursor >= globalScene.currentBattle.getBattlerCount()) { - const allowBatonModifierSwitch = - this.partyUiMode !== PartyUiMode.FAINT_SWITCH && - globalScene.findModifier( - m => - m instanceof SwitchEffectTransferModifier && - (m as SwitchEffectTransferModifier).pokemonId === globalScene.getPlayerField()[this.fieldIndex].id, - ); - - const moveHistory = globalScene.getPlayerField()[this.fieldIndex].getMoveHistory(); - const isBatonPassMove = - this.partyUiMode === PartyUiMode.FAINT_SWITCH && - moveHistory.length && - allMoves[moveHistory[moveHistory.length - 1].move].getAttrs(ForceSwitchOutAttr)[0]?.isBatonPass() && - moveHistory[moveHistory.length - 1].result === MoveResult.SUCCESS; - - // isBatonPassMove and allowBatonModifierSwitch shouldn't ever be true - // at the same time, because they both explicitly check for a mutually - // exclusive partyUiMode. But better safe than sorry. - this.options.push( - isBatonPassMove && !allowBatonModifierSwitch ? PartyOption.PASS_BATON : PartyOption.SEND_OUT, - ); - if (allowBatonModifierSwitch && !isBatonPassMove) { - // the BATON modifier gives an extra switch option for - // pokemon-command switches, allowing buffs to be optionally passed - this.options.push(PartyOption.PASS_BATON); - } - } - break; - case PartyUiMode.REVIVAL_BLESSING: - this.options.push(PartyOption.REVIVE); - break; - case PartyUiMode.MODIFIER: - this.options.push(PartyOption.APPLY); - break; - case PartyUiMode.TM_MODIFIER: - this.options.push(PartyOption.TEACH); - break; - case PartyUiMode.MODIFIER_TRANSFER: - this.options.push(PartyOption.TRANSFER); - break; - case PartyUiMode.SPLICE: - if (this.transferMode) { - if (this.cursor !== this.transferCursor) { - this.options.push(PartyOption.SPLICE); - } - } else { - this.options.push(PartyOption.APPLY); - } - break; - case PartyUiMode.RELEASE: - this.options.push(PartyOption.RELEASE); - break; - case PartyUiMode.CHECK: - if (globalScene.getCurrentPhase() instanceof SelectModifierPhase) { - formChangeItemModifiers = this.getFormChangeItemsModifiers(pokemon); - for (let i = 0; i < formChangeItemModifiers.length; i++) { - this.options.push(PartyOption.FORM_CHANGE_ITEM + i); - } - } - break; - case PartyUiMode.SELECT: - this.options.push(PartyOption.SELECT); - break; - } - - this.options.push(PartyOption.SUMMARY); - this.options.push(PartyOption.POKEDEX); - this.options.push(PartyOption.RENAME); - - if ( - pokemonEvolutions.hasOwnProperty(pokemon.species.speciesId) || - (pokemon.isFusion() && - pokemon.fusionSpecies && - pokemonEvolutions.hasOwnProperty(pokemon.fusionSpecies.speciesId)) - ) { - this.options.push(PartyOption.UNPAUSE_EVOLUTION); - } - - if (this.partyUiMode === PartyUiMode.SWITCH) { - if (pokemon.isFusion()) { - this.options.push(PartyOption.UNSPLICE); - } - this.options.push(PartyOption.RELEASE); - } else if (this.partyUiMode === PartyUiMode.SPLICE && pokemon.isFusion()) { - this.options.push(PartyOption.UNSPLICE); - } - } else if (this.partyUiMode === PartyUiMode.MOVE_MODIFIER) { - for (let m = 0; m < pokemon.moveset.length; m++) { - this.options.push(PartyOption.MOVE_1 + m); - } - } else if (this.partyUiMode === PartyUiMode.REMEMBER_MOVE_MODIFIER) { - const learnableMoves = pokemon.getLearnableLevelMoves(); - for (let m = 0; m < learnableMoves.length; m++) { - this.options.push(m); - } - } else { - for (let im = 0; im < itemModifiers.length; im++) { - this.options.push(im); - } - if (itemModifiers.length > 1) { - this.options.push(PartyOption.ALL); - } + this.options.push(PartyOption.UNPAUSE_EVOLUTION); } + } + private addCancelAndScrollOptions(): void { this.optionsScrollTotal = this.options.length; - let optionStartIndex = this.optionsScrollCursor; - let optionEndIndex = Math.min( + const optionStartIndex = this.optionsScrollCursor; + const optionEndIndex = Math.min( this.optionsScrollTotal, optionStartIndex + (!optionStartIndex || this.optionsScrollCursor + 8 >= this.optionsScrollTotal ? 8 : 7), ); @@ -1145,14 +1253,122 @@ export default class PartyUiHandler extends MessageUiHandler { } this.options.push(PartyOption.CANCEL); + } + + updateOptions(): void { + const pokemon = globalScene.getPlayerParty()[this.cursor]; + + if (this.options.length) { + this.options.splice(0, this.options.length); + this.optionsContainer.removeAll(true); + this.eraseOptionsCursor(); + } + + switch (this.partyUiMode) { + case PartyUiMode.MOVE_MODIFIER: + this.updateOptionsWithMoveModifierMode(pokemon); + break; + case PartyUiMode.REMEMBER_MOVE_MODIFIER: + this.updateOptionsWithRememberMoveModifierMode(pokemon); + break; + case PartyUiMode.MODIFIER_TRANSFER: + if (!this.transferMode) { + this.updateOptionsWithModifierTransferMode(pokemon); + } else { + this.options.push(PartyOption.TRANSFER); + this.addCommonOptions(pokemon); + } + break; + // TODO: This still needs to be broken up. + // It could use a rework differentiating different kind of switches + // to treat baton passing separately from switching on faint. + case PartyUiMode.SWITCH: + case PartyUiMode.FAINT_SWITCH: + case PartyUiMode.POST_BATTLE_SWITCH: + if (this.cursor >= globalScene.currentBattle.getBattlerCount()) { + const allowBatonModifierSwitch = this.allowBatonModifierSwitch(); + const isBatonPassMove = this.isBatonPassMove(); + + // isBatonPassMove and allowBatonModifierSwitch shouldn't ever be true + // at the same time, because they both explicitly check for a mutually + // exclusive partyUiMode. But better safe than sorry. + this.options.push( + isBatonPassMove && !allowBatonModifierSwitch ? PartyOption.PASS_BATON : PartyOption.SEND_OUT, + ); + if (allowBatonModifierSwitch && !isBatonPassMove) { + // the BATON modifier gives an extra switch option for + // pokemon-command switches, allowing buffs to be optionally passed + this.options.push(PartyOption.PASS_BATON); + } + } + this.addCommonOptions(pokemon); + if (this.partyUiMode === PartyUiMode.SWITCH) { + if (pokemon.isFusion()) { + this.options.push(PartyOption.UNSPLICE); + } + this.options.push(PartyOption.RELEASE); + } + break; + case PartyUiMode.REVIVAL_BLESSING: + this.options.push(PartyOption.REVIVE); + this.addCommonOptions(pokemon); + break; + case PartyUiMode.MODIFIER: + this.options.push(PartyOption.APPLY); + this.addCommonOptions(pokemon); + break; + case PartyUiMode.TM_MODIFIER: + this.options.push(PartyOption.TEACH); + this.addCommonOptions(pokemon); + break; + case PartyUiMode.SPLICE: + if (this.transferMode) { + if (this.cursor !== this.transferCursor) { + this.options.push(PartyOption.SPLICE); + } + } else { + this.options.push(PartyOption.APPLY); + } + this.addCommonOptions(pokemon); + if (pokemon.isFusion()) { + this.options.push(PartyOption.UNSPLICE); + } + break; + case PartyUiMode.RELEASE: + this.options.push(PartyOption.RELEASE); + this.addCommonOptions(pokemon); + break; + case PartyUiMode.CHECK: + if (globalScene.getCurrentPhase() instanceof SelectModifierPhase) { + const formChangeItemModifiers = this.getFormChangeItemsModifiers(pokemon); + for (let i = 0; i < formChangeItemModifiers.length; i++) { + this.options.push(PartyOption.FORM_CHANGE_ITEM + i); + } + } + this.addCommonOptions(pokemon); + break; + case PartyUiMode.SELECT: + this.options.push(PartyOption.SELECT); + this.addCommonOptions(pokemon); + break; + } + + // Generic, these are applied to all Modes + this.addCancelAndScrollOptions(); + + this.updateOptionsWindow(); + } + + private updateOptionsWindow(): void { + const pokemon = globalScene.getPlayerParty()[this.cursor]; this.optionsBg = addWindow(0, 0, 0, 16 * this.options.length + 13); this.optionsBg.setOrigin(1, 1); this.optionsContainer.add(this.optionsBg); - optionStartIndex = 0; - optionEndIndex = this.options.length; + const optionStartIndex = 0; + const optionEndIndex = this.options.length; let widestOptionWidth = 0; const optionTexts: BBCodeText[] = []; @@ -1185,6 +1401,7 @@ export default class PartyUiHandler extends MessageUiHandler { } break; default: + const formChangeItemModifiers = this.getFormChangeItemsModifiers(pokemon); if (formChangeItemModifiers && option >= PartyOption.FORM_CHANGE_ITEM) { const modifier = formChangeItemModifiers[option - PartyOption.FORM_CHANGE_ITEM]; optionName = `${modifier.active ? i18next.t("partyUiHandler:DEACTIVATE") : i18next.t("partyUiHandler:ACTIVATE")} ${modifier.type.name}`; @@ -1200,6 +1417,7 @@ export default class PartyUiHandler extends MessageUiHandler { break; } } else if (this.partyUiMode === PartyUiMode.REMEMBER_MOVE_MODIFIER) { + const learnableLevelMoves = pokemon.getLearnableLevelMoves(); const move = learnableLevelMoves[option]; optionName = allMoves[move].name; altText = !pokemon @@ -1209,6 +1427,7 @@ export default class PartyUiHandler extends MessageUiHandler { } else if (option === PartyOption.ALL) { optionName = i18next.t("partyUiHandler:ALL"); } else { + const itemModifiers = this.getItemModifiers(pokemon); const itemModifier = itemModifiers[option]; optionName = itemModifier.type.name; } @@ -1222,6 +1441,7 @@ export default class PartyUiHandler extends MessageUiHandler { optionText.setOrigin(0, 0); /** For every item that has stack bigger than 1, display the current quantity selection */ + const itemModifiers = this.getItemModifiers(pokemon); const itemModifier = itemModifiers[option]; if ( this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER && From a98f89759169201b671e1f17c973dce81af28bab Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Tue, 27 May 2025 05:02:39 -0700 Subject: [PATCH 165/262] [Bug] Fix Dipplin's weight (was mistakenly set to the lbs value) --- src/data/pokemon-species.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 6f05d17db6f..5c97f360094 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -3121,7 +3121,7 @@ export function initSpecies() { ), new PokemonSpecies(Species.WALKING_WAKE, 9, false, false, false, "Paradox Pokémon", PokemonType.WATER, PokemonType.DRAGON, 3.5, 280, Abilities.PROTOSYNTHESIS, Abilities.NONE, Abilities.NONE, 590, 99, 83, 91, 125, 83, 109, 10, 0, 295, GrowthRate.SLOW, null, false), //Custom Catchrate, matching Gouging Fire and Raging Bolt new PokemonSpecies(Species.IRON_LEAVES, 9, false, false, false, "Paradox Pokémon", PokemonType.GRASS, PokemonType.PSYCHIC, 1.5, 125, Abilities.QUARK_DRIVE, Abilities.NONE, Abilities.NONE, 590, 90, 130, 88, 70, 108, 104, 10, 0, 295, GrowthRate.SLOW, null, false), //Custom Catchrate, matching Iron Boulder and Iron Crown - new PokemonSpecies(Species.DIPPLIN, 9, false, false, false, "Candy Apple Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 0.4, 9.7, Abilities.SUPERSWEET_SYRUP, Abilities.GLUTTONY, Abilities.STICKY_HOLD, 485, 80, 80, 110, 95, 80, 40, 45, 50, 170, GrowthRate.ERRATIC, 50, false), + new PokemonSpecies(Species.DIPPLIN, 9, false, false, false, "Candy Apple Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 0.4, 4.4, Abilities.SUPERSWEET_SYRUP, Abilities.GLUTTONY, Abilities.STICKY_HOLD, 485, 80, 80, 110, 95, 80, 40, 45, 50, 170, GrowthRate.ERRATIC, 50, false), new PokemonSpecies(Species.POLTCHAGEIST, 9, false, false, false, "Matcha Pokémon", PokemonType.GRASS, PokemonType.GHOST, 0.1, 1.1, Abilities.HOSPITALITY, Abilities.NONE, Abilities.HEATPROOF, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, GrowthRate.SLOW, null, false, false, new PokemonForm("Counterfeit Form", "counterfeit", PokemonType.GRASS, PokemonType.GHOST, 0.1, 1.1, Abilities.HOSPITALITY, Abilities.NONE, Abilities.HEATPROOF, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, null, true), new PokemonForm("Artisan Form", "artisan", PokemonType.GRASS, PokemonType.GHOST, 0.1, 1.1, Abilities.HOSPITALITY, Abilities.NONE, Abilities.HEATPROOF, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, null, false, true), From 68dddbc4246aeedea3c8fdb506263c9c217caf08 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Tue, 27 May 2025 07:50:54 -0700 Subject: [PATCH 166/262] [Dev] Enable Biome checking of `pokemon.ts` (#5720) * [Dev] Enable biome parsing of `pokemon.ts` * Apply unsafe fixes * Add + apply rule disallowing the use of the `integer` type alias * Fix typo in comment; remove unnecessary `!!` * Re-apply Biome after merge * Re-apply Biome "unsafe" fixes after merge * Fix import * Add comment to `getFusionIconAtlasKey` too --- biome.jsonc | 20 +- .../the-pokemon-salesman-encounter.ts | 26 +- src/data/trainers/TrainerPartyTemplate.ts | 18 +- src/field/pokemon.ts | 2765 +++++------------ src/phases/revival-blessing-phase.ts | 2 +- src/ui/login-form-ui-handler.ts | 6 +- 6 files changed, 891 insertions(+), 1946 deletions(-) diff --git a/biome.jsonc b/biome.jsonc index 3385614635c..40301b3e0bc 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -32,7 +32,6 @@ // TODO: these files are too big and complex, ignore them until their respective refactors "src/data/moves/move.ts", "src/data/abilities/ability.ts", - "src/field/pokemon.ts", // this file is just too big: "src/data/balance/tms.ts" @@ -58,7 +57,7 @@ }, "style": { "noVar": "error", - "useEnumInitializers": "off", // large enums like Moves/Species would make this cumbersome + "useEnumInitializers": "off", // large enums like Moves/Species would make this cumbersome "useBlockStatements": "error", "useConst": "error", "useImportType": "error", @@ -73,9 +72,9 @@ }, "suspicious": { "noDoubleEquals": "error", - // While this would be a nice rule to enable, the current structure of the codebase makes this infeasible + // While this would be a nice rule to enable, the current structure of the codebase makes this infeasible // due to being used for move/ability `args` params and save data-related code. - // This can likely be enabled for all non-utils files once these are eventually reworked, but until then we leave it off. + // This can likely be enabled for all non-utils files once these are eventually reworked, but until then we leave it off. "noExplicitAny": "off", "noAssignInExpressions": "off", "noPrototypeBuiltins": "off", @@ -92,6 +91,19 @@ "noUselessSwitchCase": "off", // Explicit > Implicit "noUselessConstructor": "warn", // TODO: Refactor and make this an error "noBannedTypes": "warn" // TODO: Refactor and make this an error + }, + "nursery": { + "noRestrictedTypes": { + "level": "error", + "options": { + "types": { + "integer": { + "message": "This is an alias for 'number' that can provide false impressions of what values can actually be contained in this variable. Use 'number' instead.", + "use": "number" + } + } + } + } } } }, diff --git a/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts b/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts index 25798de3b4a..50b9c2da78c 100644 --- a/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts @@ -3,7 +3,7 @@ import { transitionMysteryEncounterIntroVisuals, updatePlayerMoney, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { isNullOrUndefined, NumberHolder, randSeedInt, randSeedItem } from "#app/utils/common"; +import { isNullOrUndefined, randSeedInt, randSeedItem } from "#app/utils/common"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { globalScene } from "#app/global-scene"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; @@ -88,7 +88,7 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter = MysteryEncounterBui const r = randSeedInt(SHINY_MAGIKARP_WEIGHT); - let validEventEncounters = timedEventManager + const validEventEncounters = timedEventManager .getEventEncounters() .filter( s => @@ -111,22 +111,26 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter = MysteryEncounterBui if ( r === 0 || ((isNullOrUndefined(species.abilityHidden) || species.abilityHidden === Abilities.NONE) && - (validEventEncounters.length === 0)) + validEventEncounters.length === 0) ) { // If you roll 1%, give shiny Magikarp with random variant species = getPokemonSpecies(Species.MAGIKARP); pokemon = new PlayerPokemon(species, 5, 2, undefined, undefined, true); - } - else if ( - (validEventEncounters.length > 0 && (r <= EVENT_THRESHOLD || - (isNullOrUndefined(species.abilityHidden) || species.abilityHidden === Abilities.NONE))) + } else if ( + validEventEncounters.length > 0 && + (r <= EVENT_THRESHOLD || isNullOrUndefined(species.abilityHidden) || species.abilityHidden === Abilities.NONE) ) { tries = 0; do { // If you roll 20%, give event encounter with 3 extra shiny rolls and its HA, if it has one const enc = randSeedItem(validEventEncounters); species = getPokemonSpecies(enc.species); - pokemon = new PlayerPokemon(species, 5, species.abilityHidden === Abilities.NONE ? undefined : 2, enc.formIndex); + pokemon = new PlayerPokemon( + species, + 5, + species.abilityHidden === Abilities.NONE ? undefined : 2, + enc.formIndex, + ); pokemon.trySetShinySeed(); pokemon.trySetShinySeed(); pokemon.trySetShinySeed(); @@ -145,15 +149,13 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter = MysteryEncounterBui pokemon.trySetShinySeed(); pokemon.trySetShinySeed(); pokemon.trySetShinySeed(); - } - else { + } else { // If there's, and this would never happen, no eligible event encounters with a hidden ability, just do Magikarp species = getPokemonSpecies(Species.MAGIKARP); pokemon = new PlayerPokemon(species, 5, 2, undefined, undefined, true); } } - } - else { + } else { pokemon = new PlayerPokemon(species, 5, 2, species.formIndex); } pokemon.generateAndPopulateMoveset(); diff --git a/src/data/trainers/TrainerPartyTemplate.ts b/src/data/trainers/TrainerPartyTemplate.ts index ccc494218e9..86201589276 100644 --- a/src/data/trainers/TrainerPartyTemplate.ts +++ b/src/data/trainers/TrainerPartyTemplate.ts @@ -224,16 +224,16 @@ export const trainerPartyTemplates = { */ export function getEvilGruntPartyTemplate(): TrainerPartyTemplate { const waveIndex = globalScene.currentBattle?.waveIndex; - if (waveIndex <= ClassicFixedBossWaves.EVIL_GRUNT_1){ + if (waveIndex <= ClassicFixedBossWaves.EVIL_GRUNT_1) { return trainerPartyTemplates.TWO_AVG; } - if (waveIndex <= ClassicFixedBossWaves.EVIL_GRUNT_2){ + if (waveIndex <= ClassicFixedBossWaves.EVIL_GRUNT_2) { return trainerPartyTemplates.THREE_AVG; } - if (waveIndex <= ClassicFixedBossWaves.EVIL_GRUNT_3){ + if (waveIndex <= ClassicFixedBossWaves.EVIL_GRUNT_3) { return trainerPartyTemplates.TWO_AVG_ONE_STRONG; } - if (waveIndex <= ClassicFixedBossWaves.EVIL_ADMIN_1){ + if (waveIndex <= ClassicFixedBossWaves.EVIL_ADMIN_1) { return trainerPartyTemplates.GYM_LEADER_4; // 3avg 1 strong 1 stronger } return trainerPartyTemplates.GYM_LEADER_5; // 3 avg 2 strong 1 stronger @@ -251,7 +251,7 @@ export function getGymLeaderPartyTemplate() { switch (gameMode.modeId) { case GameModes.DAILY: if (currentBattle?.waveIndex <= 20) { - return trainerPartyTemplates.GYM_LEADER_2 + return trainerPartyTemplates.GYM_LEADER_2; } return trainerPartyTemplates.GYM_LEADER_3; case GameModes.CHALLENGE: // In the future, there may be a ChallengeType to call here. For now, use classic's. @@ -259,13 +259,15 @@ export function getGymLeaderPartyTemplate() { if (currentBattle?.waveIndex <= 20) { return trainerPartyTemplates.GYM_LEADER_1; // 1 avg 1 strong } - else if (currentBattle?.waveIndex <= 30) { + if (currentBattle?.waveIndex <= 30) { return trainerPartyTemplates.GYM_LEADER_2; // 1 avg 1 strong 1 stronger } - else if (currentBattle?.waveIndex <= 60) { // 50 and 60 + // 50 and 60 + if (currentBattle?.waveIndex <= 60) { return trainerPartyTemplates.GYM_LEADER_3; // 2 avg 1 strong 1 stronger } - else if (currentBattle?.waveIndex <= 90) { // 80 and 90 + // 80 and 90 + if (currentBattle?.waveIndex <= 90) { return trainerPartyTemplates.GYM_LEADER_4; // 3 avg 1 strong 1 stronger } // 110+ diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 62ec8081c5d..85b003517a6 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -5,10 +5,7 @@ import { globalScene } from "#app/global-scene"; import type { Variant } from "#app/sprites/variant"; import { populateVariantColors, variantColorCache } from "#app/sprites/variant"; import { variantData } from "#app/sprites/variant"; -import BattleInfo, { - PlayerBattleInfo, - EnemyBattleInfo, -} from "#app/ui/battle-info"; +import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from "#app/ui/battle-info"; import type Move from "#app/data/moves/move"; import { HighCritAttr, @@ -50,11 +47,26 @@ import { getPokemonSpecies, getPokemonSpeciesForm, } from "#app/data/pokemon-species"; +import { getStarterValueFriendshipCap, speciesStarterCosts } from "#app/data/balance/starters"; import { - getStarterValueFriendshipCap, - speciesStarterCosts, -} from "#app/data/balance/starters"; -import { NumberHolder, randSeedInt, getIvsFromId, BooleanHolder, randSeedItem, isNullOrUndefined, getEnumValues, toDmgValue, fixedInt, rgbaToInt, rgbHexToRgba, rgbToHsv, deltaRgb, isBetween, type nil, type Constructor, randSeedIntRange } from "#app/utils/common"; + NumberHolder, + randSeedInt, + getIvsFromId, + BooleanHolder, + randSeedItem, + isNullOrUndefined, + getEnumValues, + toDmgValue, + fixedInt, + rgbaToInt, + rgbHexToRgba, + rgbToHsv, + deltaRgb, + isBetween, + type nil, + type Constructor, + randSeedIntRange, +} from "#app/utils/common"; import type { TypeDamageMultiplier } from "#app/data/type"; import { getTypeDamageMultiplier, getTypeRgb } from "#app/data/type"; import { PokemonType } from "#enums/pokemon-type"; @@ -92,20 +104,13 @@ import { import { PokeballType } from "#enums/pokeball"; import { Gender } from "#app/data/gender"; import { Status, getRandomStatus } from "#app/data/status-effect"; -import type { - SpeciesFormEvolution, - SpeciesEvolutionCondition, -} from "#app/data/balance/pokemon-evolutions"; +import type { SpeciesFormEvolution, SpeciesEvolutionCondition } from "#app/data/balance/pokemon-evolutions"; import { pokemonEvolutions, pokemonPrevolutions, FusionSpeciesFormEvolution, } from "#app/data/balance/pokemon-evolutions"; -import { - reverseCompatibleTms, - tmSpecies, - tmPoolTiers, -} from "#app/data/balance/tms"; +import { reverseCompatibleTms, tmSpecies, tmPoolTiers } from "#app/data/balance/tms"; import { BattlerTag, BattlerTagLapseType, @@ -128,11 +133,7 @@ import { type GrudgeTag, } from "../data/battler-tags"; import { WeatherType } from "#enums/weather-type"; -import { - ArenaTagSide, - NoCritTag, - WeakenMoveScreenTag, -} from "#app/data/arena-tag"; +import { ArenaTagSide, NoCritTag, WeakenMoveScreenTag } from "#app/data/arena-tag"; import type { SuppressAbilitiesTag } from "#app/data/arena-tag"; import type { Ability } from "#app/data/abilities/ability-class"; import type { AbAttr } from "#app/data/abilities/ab-attrs/ab-attr"; @@ -171,7 +172,8 @@ import { MoveTypeChangeAbAttr, FullHpResistTypeAbAttr, applyCheckTrappedAbAttrs, - CheckTrappedAbAttr, InfiltratorAbAttr, + CheckTrappedAbAttr, + InfiltratorAbAttr, AlliedFieldDamageReductionAbAttr, PostDamageAbAttr, applyPostDamageAbAttrs, @@ -196,25 +198,18 @@ import type { PartyOption } from "#app/ui/party-ui-handler"; import PartyUiHandler, { PartyUiMode } from "#app/ui/party-ui-handler"; import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; import type { LevelMoves } from "#app/data/balance/pokemon-level-moves"; -import { - EVOLVE_MOVE, - RELEARN_MOVE, -} from "#app/data/balance/pokemon-level-moves"; +import { EVOLVE_MOVE, RELEARN_MOVE } from "#app/data/balance/pokemon-level-moves"; import { achvs } from "#app/system/achv"; import type { StarterDataEntry, StarterMoveset } from "#app/system/game-data"; import { DexAttr } from "#app/system/game-data"; -import { - QuantizerCelebi, - argbFromRgba, - rgbaFromArgb, -} from "@material/material-color-utilities"; +import { QuantizerCelebi, argbFromRgba, rgbaFromArgb } from "@material/material-color-utilities"; import { getNatureStatMultiplier } from "#app/data/nature"; import type { SpeciesFormChange } from "#app/data/pokemon-forms"; import { SpeciesFormChangeActiveTrigger, SpeciesFormChangeLapseTeraTrigger, SpeciesFormChangeMoveLearnedTrigger, - SpeciesFormChangePostMoveTrigger + SpeciesFormChangePostMoveTrigger, } from "#app/data/pokemon-forms"; import { TerrainType } from "#app/data/terrain"; import type { TrainerSlot } from "#enums/trainer-slot"; @@ -298,10 +293,10 @@ type damageParams = { simulated?: boolean; /** If defined, used in place of calculated effectiveness values */ effectiveness?: number; -} +}; /** Type for the parameters of {@linkcode Pokemon#getBaseDamage | getBaseDamage} */ -type getBaseDamageParams = Omit +type getBaseDamageParams = Omit; /** Type for the parameters of {@linkcode Pokemon#getAttackDamage | getAttackDamage} */ type getAttackDamageParams = Omit; @@ -413,7 +408,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.pokeball = dataSource?.pokeball || PokeballType.POKEBALL; this.level = level; - this.abilityIndex = abilityIndex ?? this.generateAbilityIndex() + this.abilityIndex = abilityIndex ?? this.generateAbilityIndex(); if (formIndex !== undefined) { this.formIndex = formIndex; @@ -427,8 +422,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (variant !== undefined) { this.variant = variant; } - this.exp = - dataSource?.exp || getLevelTotalExp(this.level, species.growthRate); + this.exp = dataSource?.exp || getLevelTotalExp(this.level, species.growthRate); this.levelExp = dataSource?.levelExp || 0; if (dataSource) { @@ -444,18 +438,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.nickname = dataSource.nickname; this.moveset = dataSource.moveset; this.status = dataSource.status!; // TODO: is this bang correct? - this.friendship = - dataSource.friendship !== undefined - ? dataSource.friendship - : this.species.baseFriendship; + this.friendship = dataSource.friendship ?? this.species.baseFriendship; this.metLevel = dataSource.metLevel || 5; this.luck = dataSource.luck; this.metBiome = dataSource.metBiome; this.metSpecies = - dataSource.metSpecies ?? - (this.metBiome !== -1 - ? this.species.speciesId - : this.species.getRootSpeciesId(true)); + dataSource.metSpecies ?? (this.metBiome !== -1 ? this.species.speciesId : this.species.getRootSpeciesId(true)); this.metWave = dataSource.metWave ?? (this.metBiome === -1 ? -1 : 0); this.pauseEvolutions = dataSource.pauseEvolutions; this.pokerus = !!dataSource.pokerus; @@ -475,9 +463,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.fusionCustomPokemonData = dataSource.fusionCustomPokemonData; this.fusionTeraType = dataSource.fusionTeraType; this.usedTMs = dataSource.usedTMs ?? []; - this.customPokemonData = new CustomPokemonData( - dataSource.customPokemonData, - ); + this.customPokemonData = new CustomPokemonData(dataSource.customPokemonData); this.teraType = dataSource.teraType; this.isTerastallized = dataSource.isTerastallized; this.stellarTypesBoosted = dataSource.stellarTypesBoosted ?? []; @@ -490,12 +476,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } if (this.formIndex === undefined) { - this.formIndex = globalScene.getSpeciesFormIndex( - species, - this.gender, - this.nature, - this.isPlayer(), - ); + this.formIndex = globalScene.getSpeciesFormIndex(species, this.gender, this.nature, this.isPlayer()); } if (this.shiny === undefined) { @@ -514,19 +495,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.friendship = species.baseFriendship; this.metLevel = level; - this.metBiome = globalScene.currentBattle - ? globalScene.arena.biomeType - : -1; + this.metBiome = globalScene.currentBattle ? globalScene.arena.biomeType : -1; this.metSpecies = species.speciesId; - this.metWave = globalScene.currentBattle - ? globalScene.currentBattle.waveIndex - : -1; + this.metWave = globalScene.currentBattle ? globalScene.currentBattle.waveIndex : -1; this.pokerus = false; if (level > 1) { - const fused = new BooleanHolder( - globalScene.gameMode.isSplicedOnly, - ); + const fused = new BooleanHolder(globalScene.gameMode.isSplicedOnly); if (!fused.value && !this.isPlayer() && !this.hasTrainer()) { globalScene.applyModifier(EnemyFusionChanceModifier, false, fused); } @@ -536,9 +511,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.generateFusionSpecies(); } } - this.luck = - (this.shiny ? this.variant + 1 : 0) + - (this.fusionShiny ? this.fusionVariant + 1 : 0); + this.luck = (this.shiny ? this.variant + 1 : 0) + (this.fusionShiny ? this.fusionVariant + 1 : 0); this.fusionLuck = this.luck; this.teraType = randSeedItem(this.getTypes(false, false, true)); @@ -558,15 +531,16 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (!dataSource) { this.calculateStats(); } - } /** - * @param {boolean} useIllusion - Whether we want the fake name or the real name of the Pokemon (for Illusion ability). + * @param useIllusion - Whether we want the fake name or the real name of the Pokemon (for Illusion ability). */ - getNameToRender(useIllusion: boolean = true) { - const name: string = (!useIllusion && this.summonData.illusion) ? this.summonData.illusion.basePokemon.name : this.name; - const nickname: string = (!useIllusion && this.summonData.illusion) ? this.summonData.illusion.basePokemon.nickname : this.nickname; + getNameToRender(useIllusion = true) { + const name: string = + !useIllusion && this.summonData.illusion ? this.summonData.illusion.basePokemon.name : this.name; + const nickname: string = + !useIllusion && this.summonData.illusion ? this.summonData.illusion.basePokemon.nickname : this.nickname; try { if (nickname) { return decodeURIComponent(escape(atob(nickname))); @@ -578,12 +552,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } - getPokeball(useIllusion = false){ - if(useIllusion){ - return this.summonData.illusion?.pokeball ?? this.pokeball - } else { - return this.pokeball + getPokeball(useIllusion = false) { + if (useIllusion) { + return this.summonData.illusion?.pokeball ?? this.pokeball; } + return this.pokeball; } init(): void { @@ -645,10 +618,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @returns `true` if the pokemon is fainted */ public isFainted(checkStatus = false): boolean { - return ( - this.hp <= 0 && - (!checkStatus || this.status?.effect === StatusEffect.FAINT) - ); + return this.hp <= 0 && (!checkStatus || this.status?.effect === StatusEffect.FAINT); } /** @@ -666,11 +636,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { */ public isAllowedInChallenge(): boolean { const challengeAllowed = new BooleanHolder(true); - applyChallenges( - ChallengeType.POKEMON_IN_BATTLE, - this, - challengeAllowed, - ); + applyChallenges(ChallengeType.POKEMON_IN_BATTLE, this, challengeAllowed); return challengeAllowed.value; } @@ -691,12 +657,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { let ret = 0n; ret |= this.gender !== Gender.FEMALE ? DexAttr.MALE : DexAttr.FEMALE; ret |= !this.shiny ? DexAttr.NON_SHINY : DexAttr.SHINY; - ret |= - this.variant >= 2 - ? DexAttr.VARIANT_3 - : this.variant === 1 - ? DexAttr.VARIANT_2 - : DexAttr.DEFAULT_VARIANT; + ret |= this.variant >= 2 ? DexAttr.VARIANT_3 : this.variant === 1 ? DexAttr.VARIANT_2 : DexAttr.DEFAULT_VARIANT; ret |= globalScene.gameData.getFormAttr(this.formIndex); return ret; } @@ -722,17 +683,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** Generate `abilityIndex` based on species and hidden ability if not pre-defined. */ private generateAbilityIndex(): number { - // Roll for hidden ability chance, applying any ability charms for enemy mons - const hiddenAbilityChance = new NumberHolder( - BASE_HIDDEN_ABILITY_CHANCE, - ); + const hiddenAbilityChance = new NumberHolder(BASE_HIDDEN_ABILITY_CHANCE); if (!this.hasTrainer()) { - globalScene.applyModifiers( - HiddenAbilityRateBoosterModifier, - true, - hiddenAbilityChance, - ); + globalScene.applyModifiers(HiddenAbilityRateBoosterModifier, true, hiddenAbilityChance); } // If the roll succeeded and we have one, use HA; otherwise pick a random ability @@ -745,8 +699,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return this.species.ability2 !== this.species.ability1 ? randSeedInt(2) : 0; } - - /** * Generate an illusion of the last pokemon in the party, as other wild pokemon in the area. */ @@ -764,7 +716,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { shiny: this.shiny, variant: this.variant, fusionShiny: this.fusionShiny, - fusionVariant: this.fusionVariant + fusionVariant: this.fusionVariant, }, species: speciesId, formIndex: pokemon.formIndex, @@ -772,7 +724,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { pokeball: pokemon.pokeball, fusionFormIndex: pokemon.fusionFormIndex, fusionSpecies: pokemon.fusionSpecies || undefined, - fusionGender: pokemon.fusionGender + fusionGender: pokemon.fusionGender, }; this.name = pokemon.name; @@ -787,7 +739,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.loadAssets(false, true).then(() => this.playAnim()); this.updateInfo(); } else { - const randomIllusion: PokemonSpecies = globalScene.arena.randomSpecies(globalScene.currentBattle.waveIndex, this.level); + const randomIllusion: PokemonSpecies = globalScene.arena.randomSpecies( + globalScene.currentBattle.waveIndex, + this.level, + ); this.summonData.illusion = { basePokemon: { @@ -796,12 +751,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { shiny: this.shiny, variant: this.variant, fusionShiny: this.fusionShiny, - fusionVariant: this.fusionVariant + fusionVariant: this.fusionVariant, }, species: randomIllusion.speciesId, formIndex: randomIllusion.formIndex, gender: this.gender, - pokeball: this.pokeball + pokeball: this.pokeball, }; this.name = randomIllusion.name; @@ -813,15 +768,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { breakIllusion(): boolean { if (!this.summonData.illusion) { return false; - } else { - this.name = this.summonData.illusion.basePokemon.name; - this.nickname = this.summonData.illusion.basePokemon.nickname; - this.shiny = this.summonData.illusion.basePokemon.shiny; - this.variant = this.summonData.illusion.basePokemon.variant; - this.fusionVariant = this.summonData.illusion.basePokemon.fusionVariant; - this.fusionShiny = this.summonData.illusion.basePokemon.fusionShiny; - this.summonData.illusion = null; } + this.name = this.summonData.illusion.basePokemon.name; + this.nickname = this.summonData.illusion.basePokemon.nickname; + this.shiny = this.summonData.illusion.basePokemon.shiny; + this.variant = this.summonData.illusion.basePokemon.variant; + this.fusionVariant = this.summonData.illusion.basePokemon.fusionVariant; + this.fusionShiny = this.summonData.illusion.basePokemon.fusionShiny; + this.summonData.illusion = null; if (this.isOnField()) { globalScene.playSound("PRSFX- Transform"); } @@ -842,9 +796,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { abstract getBattlerIndex(): BattlerIndex; /** -   * @param useIllusion - Whether we want the illusion or not. -   */ - async loadAssets(ignoreOverride = true, useIllusion: boolean = false): Promise { + * @param useIllusion - Whether we want the illusion or not. + */ + async loadAssets(ignoreOverride = true, useIllusion = false): Promise { /** Promises that are loading assets and can be run concurrently. */ const loadPromises: Promise[] = []; // Assets for moves @@ -857,7 +811,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.getGender(useIllusion) === Gender.FEMALE, formIndex, this.isShiny(useIllusion), - this.getVariant(useIllusion) + this.getVariant(useIllusion), ), ); @@ -868,15 +822,24 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ); } if (this.getFusionSpeciesForm()) { - const fusionFormIndex = useIllusion && this.summonData.illusion ? this.summonData.illusion.fusionFormIndex : this.fusionFormIndex; - const fusionShiny = !useIllusion && this.summonData.illusion?.basePokemon ? this.summonData.illusion.basePokemon.fusionShiny : this.fusionShiny; - const fusionVariant = !useIllusion && this.summonData.illusion?.basePokemon ? this.summonData.illusion.basePokemon.fusionVariant : this.fusionVariant; - loadPromises.push(this.getFusionSpeciesForm(false, useIllusion).loadAssets( - this.getFusionGender(false, useIllusion) === Gender.FEMALE, - fusionFormIndex, - fusionShiny, - fusionVariant - )); + const fusionFormIndex = + useIllusion && this.summonData.illusion ? this.summonData.illusion.fusionFormIndex : this.fusionFormIndex; + const fusionShiny = + !useIllusion && this.summonData.illusion?.basePokemon + ? this.summonData.illusion.basePokemon.fusionShiny + : this.fusionShiny; + const fusionVariant = + !useIllusion && this.summonData.illusion?.basePokemon + ? this.summonData.illusion.basePokemon.fusionVariant + : this.fusionVariant; + loadPromises.push( + this.getFusionSpeciesForm(false, useIllusion).loadAssets( + this.getFusionGender(false, useIllusion) === Gender.FEMALE, + fusionFormIndex, + fusionShiny, + fusionVariant, + ), + ); globalScene.loadPokemonAtlas( this.getFusionBattleSpriteKey(true, ignoreOverride), this.getFusionBattleSpriteAtlasPath(true, ignoreOverride), @@ -884,7 +847,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } if (this.isShiny(true)) { - loadPromises.push(populateVariantColors(this, false, ignoreOverride)) + loadPromises.push(populateVariantColors(this, false, ignoreOverride)); if (this.isPlayer()) { loadPromises.push(populateVariantColors(this, true, ignoreOverride)); } @@ -894,7 +857,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // This must be initiated before we queue loading, otherwise the load could have finished before // we reach the line of code that adds the listener, causing a deadlock. - const waitOnLoadPromise = new Promise(resolve => globalScene.load.once(Phaser.Loader.Events.COMPLETE, resolve)); + const waitOnLoadPromise = new Promise(resolve => + globalScene.load.once(Phaser.Loader.Events.COMPLETE, resolve), + ); if (!globalScene.load.isLoading()) { globalScene.load.start(); @@ -966,11 +931,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param useExpSprite should the experimental sprite be used * @param battleSpritePath the filename of the sprite */ - async populateVariantColorCache( - cacheKey: string, - useExpSprite: boolean, - battleSpritePath: string, - ) { + async populateVariantColorCache(cacheKey: string, useExpSprite: boolean, battleSpritePath: string) { const spritePath = `./images/pokemon/variant/${useExpSprite ? "exp/" : ""}${battleSpritePath}.json`; return globalScene .cachedFetch(spritePath) @@ -989,13 +950,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return res.json(); }) .catch(error => { - return this.fallbackVariantColor( - cacheKey, - spritePath, - useExpSprite, - battleSpritePath, - error, - ); + return this.fallbackVariantColor(cacheKey, spritePath, useExpSprite, battleSpritePath, error); }) .then(c => { if (!isNullOrUndefined(c)) { @@ -1005,10 +960,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } getFormKey(): string { - if ( - !this.species.forms.length || - this.species.forms.length <= this.formIndex - ) { + if (!this.species.forms.length || this.species.forms.length <= this.formIndex) { return ""; } return this.species.forms[this.formIndex].formKey; @@ -1018,10 +970,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (!this.fusionSpecies) { return null; } - if ( - !this.fusionSpecies.forms.length || - this.fusionSpecies.forms.length <= this.fusionFormIndex - ) { + if (!this.fusionSpecies.forms.length || this.fusionSpecies.forms.length <= this.fusionFormIndex) { return ""; } return this.fusionSpecies.forms[this.fusionFormIndex].formKey; @@ -1033,10 +982,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } getBattleSpriteAtlasPath(back?: boolean, ignoreOverride?: boolean): string { - const spriteId = this.getBattleSpriteId(back, ignoreOverride).replace( - /\_{2}/g, - "/", - ); + const spriteId = this.getBattleSpriteId(back, ignoreOverride).replace(/\_{2}/g, "/"); return `${/_[1-3]$/.test(spriteId) ? "variant/" : ""}${spriteId}`; } @@ -1046,7 +992,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.getGender(ignoreOverride, true) === Gender.FEMALE, formIndex, this.shiny, - this.variant + this.variant, ); } @@ -1062,7 +1008,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { formIndex, this.shiny, this.variant, - back + back, ); } @@ -1071,7 +1017,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.getGender(ignoreOverride) === Gender.FEMALE, this.formIndex, this.summonData.illusion?.basePokemon.shiny ?? this.shiny, - this.summonData.illusion?.basePokemon.variant ?? this.variant + this.summonData.illusion?.basePokemon.variant ?? this.variant, ); } @@ -1085,7 +1031,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.getFusionGender(ignoreOverride, true) === Gender.FEMALE, fusionFormIndex, this.fusionShiny, - this.fusionVariant + this.fusionVariant, ); } @@ -1101,7 +1047,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { fusionFormIndex, this.fusionShiny, this.fusionVariant, - back + back, ); } @@ -1109,55 +1055,67 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return `pkmn__${this.getFusionBattleSpriteId(back, ignoreOverride)}`; } - getFusionBattleSpriteAtlasPath( - back?: boolean, - ignoreOverride?: boolean, - ): string { - return this.getFusionBattleSpriteId(back, ignoreOverride).replace( - /\_{2}/g, - "/", - ); + getFusionBattleSpriteAtlasPath(back?: boolean, ignoreOverride?: boolean): string { + return this.getFusionBattleSpriteId(back, ignoreOverride).replace(/\_{2}/g, "/"); } - getIconAtlasKey(ignoreOverride?: boolean, useIllusion: boolean = true): string { - const formIndex = useIllusion && this.summonData.illusion?.formIndex ? this.summonData.illusion?.formIndex : this.formIndex; - const variant = !useIllusion && !!this.summonData.illusion ? this.summonData.illusion?.basePokemon.variant : this.variant; + getIconAtlasKey(ignoreOverride = false, useIllusion = true): string { + // TODO: confirm the correct behavior here (is it intentional that the check fails if `illusion.formIndex` is `0`?) + const formIndex = + useIllusion && this.summonData.illusion?.formIndex ? this.summonData.illusion.formIndex : this.formIndex; + const variant = + !useIllusion && this.summonData.illusion ? this.summonData.illusion.basePokemon.variant : this.variant; return this.getSpeciesForm(ignoreOverride, useIllusion).getIconAtlasKey( formIndex, this.isBaseShiny(useIllusion), - variant + variant, ); } - getFusionIconAtlasKey(ignoreOverride?: boolean, useIllusion: boolean = true): string { - const fusionFormIndex = useIllusion && this.summonData.illusion?.fusionFormIndex ? this.summonData.illusion?.fusionFormIndex : this.fusionFormIndex; - const fusionVariant = !useIllusion && !!this.summonData.illusion ? this.summonData.illusion?.basePokemon.fusionVariant : this.fusionVariant; + getFusionIconAtlasKey(ignoreOverride = false, useIllusion = true): string { + // TODO: confirm the correct behavior here (is it intentional that the check fails if `illusion.fusionFormIndex` is `0`?) + const fusionFormIndex = + useIllusion && this.summonData.illusion?.fusionFormIndex + ? this.summonData.illusion.fusionFormIndex + : this.fusionFormIndex; + const fusionVariant = + !useIllusion && this.summonData.illusion + ? this.summonData.illusion.basePokemon.fusionVariant + : this.fusionVariant; return this.getFusionSpeciesForm(ignoreOverride, useIllusion).getIconAtlasKey( fusionFormIndex, this.isFusionShiny(), - fusionVariant + fusionVariant, ); } - getIconId(ignoreOverride?: boolean, useIllusion: boolean = true): string { - const formIndex = useIllusion && this.summonData.illusion?.formIndex ? this.summonData.illusion?.formIndex : this.formIndex; - const variant = !useIllusion && !!this.summonData.illusion ? this.summonData.illusion?.basePokemon.variant : this.variant; + getIconId(ignoreOverride?: boolean, useIllusion = true): string { + const formIndex = + useIllusion && this.summonData.illusion?.formIndex ? this.summonData.illusion?.formIndex : this.formIndex; + const variant = + !useIllusion && !!this.summonData.illusion ? this.summonData.illusion?.basePokemon.variant : this.variant; return this.getSpeciesForm(ignoreOverride, useIllusion).getIconId( this.getGender(ignoreOverride, useIllusion) === Gender.FEMALE, formIndex, this.isBaseShiny(), - variant + variant, ); } - getFusionIconId(ignoreOverride?: boolean, useIllusion: boolean = true): string { - const fusionFormIndex = useIllusion && this.summonData.illusion?.fusionFormIndex ? this.summonData.illusion?.fusionFormIndex : this.fusionFormIndex; - const fusionVariant = !useIllusion && !!this.summonData.illusion ? this.summonData.illusion?.basePokemon.fusionVariant : this.fusionVariant; + getFusionIconId(ignoreOverride?: boolean, useIllusion = true): string { + const fusionFormIndex = + useIllusion && this.summonData.illusion?.fusionFormIndex + ? this.summonData.illusion?.fusionFormIndex + : this.fusionFormIndex; + const fusionVariant = + !useIllusion && !!this.summonData.illusion + ? this.summonData.illusion?.basePokemon.fusionVariant + : this.fusionVariant; return this.getFusionSpeciesForm(ignoreOverride, useIllusion).getIconId( this.getFusionGender(ignoreOverride, useIllusion) === Gender.FEMALE, fusionFormIndex, this.isFusionShiny(), - fusionVariant + fusionVariant, ); } @@ -1167,12 +1125,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * This overrides `useIllusion` if `true`. * @param useIllusion - `true` to use the speciesForm of the illusion; default `false`. */ - getSpeciesForm(ignoreOverride: boolean = false, useIllusion: boolean = false): PokemonSpeciesForm { + getSpeciesForm(ignoreOverride = false, useIllusion = false): PokemonSpeciesForm { if (!ignoreOverride && this.summonData.speciesForm) { return this.summonData.speciesForm; } - const species: PokemonSpecies = useIllusion && this.summonData.illusion ? getPokemonSpecies(this.summonData.illusion.species) : this.species; + const species: PokemonSpecies = + useIllusion && this.summonData.illusion ? getPokemonSpecies(this.summonData.illusion.species) : this.species; const formIndex = useIllusion && this.summonData.illusion ? this.summonData.illusion.formIndex : this.formIndex; if (species.forms && species.forms.length > 0) { @@ -1185,17 +1144,16 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** * @param {boolean} useIllusion - Whether we want the fusionSpeciesForm of the illusion or not. */ - getFusionSpeciesForm(ignoreOverride?: boolean, useIllusion: boolean = false): PokemonSpeciesForm { - const fusionSpecies: PokemonSpecies = useIllusion && this.summonData.illusion ? this.summonData.illusion.fusionSpecies! : this.fusionSpecies!; - const fusionFormIndex = useIllusion && this.summonData.illusion ? this.summonData.illusion.fusionFormIndex! : this.fusionFormIndex; + getFusionSpeciesForm(ignoreOverride?: boolean, useIllusion = false): PokemonSpeciesForm { + const fusionSpecies: PokemonSpecies = + useIllusion && this.summonData.illusion ? this.summonData.illusion.fusionSpecies! : this.fusionSpecies!; + const fusionFormIndex = + useIllusion && this.summonData.illusion ? this.summonData.illusion.fusionFormIndex! : this.fusionFormIndex; if (!ignoreOverride && this.summonData.fusionSpeciesForm) { return this.summonData.fusionSpeciesForm; } - if ( - !fusionSpecies?.forms?.length || - fusionFormIndex >= fusionSpecies?.forms.length - ) { + if (!fusionSpecies?.forms?.length || fusionFormIndex >= fusionSpecies?.forms.length) { return fusionSpecies; } return fusionSpecies?.forms[fusionFormIndex]; @@ -1206,9 +1164,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } getTintSprite(): Phaser.GameObjects.Sprite | null { - return !this.maskEnabled - ? (this.getAt(1) as Phaser.GameObjects.Sprite) - : this.maskSprite; + return !this.maskEnabled ? (this.getAt(1) as Phaser.GameObjects.Sprite) : this.maskSprite; } getSpriteScale(): number { @@ -1289,20 +1245,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param animConfig {@linkcode String} to pass to {@linkcode Phaser.GameObjects.Sprite.play} * @returns true if the sprite was able to be animated */ - tryPlaySprite( - sprite: Phaser.GameObjects.Sprite, - tintSprite: Phaser.GameObjects.Sprite, - key: string, - ): boolean { + tryPlaySprite(sprite: Phaser.GameObjects.Sprite, tintSprite: Phaser.GameObjects.Sprite, key: string): boolean { // Catch errors when trying to play an animation that doesn't exist try { sprite.play(key); tintSprite.play(key); } catch (error: unknown) { - console.error( - `Couldn't play animation for '${key}'!\nIs the image for this Pokemon missing?\n`, - error, - ); + console.error(`Couldn't play animation for '${key}'!\nIs the image for this Pokemon missing?\n`, error); return false; } @@ -1311,11 +1260,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } playAnim(): void { - this.tryPlaySprite( - this.getSprite(), - this.getTintSprite()!, - this.getBattleSpriteKey(), - ); // TODO: is the bag correct? + this.tryPlaySprite(this.getSprite(), this.getTintSprite()!, this.getBattleSpriteKey()); // TODO: is the bang correct? } getFieldPositionOffset(): [number, number] { @@ -1353,30 +1298,23 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // During the Pokemon's MoveEffect phase, the offset is removed to put the Pokemon "in focus" const currentPhase = globalScene.getCurrentPhase(); - if ( - currentPhase instanceof MoveEffectPhase && - currentPhase.getPokemon() === this - ) { + if (currentPhase instanceof MoveEffectPhase && currentPhase.getPokemon() === this) { return false; } return true; - } else { - return false; } + return false; } /** If this Pokemon has a Substitute on the field, removes its sprite from the field. */ destroySubstitute(): void { const substitute = this.getTag(SubstituteTag); - if (substitute && substitute.sprite) { + if (substitute?.sprite) { substitute.sprite.destroy(); } } - setFieldPosition( - fieldPosition: FieldPosition, - duration?: number, - ): Promise { + setFieldPosition(fieldPosition: FieldPosition, duration?: number): Promise { return new Promise(resolve => { if (fieldPosition === this.fieldPosition) { resolve(); @@ -1441,10 +1379,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @returns the numeric value of the desired {@linkcode Stat} */ getStat(stat: PermanentStat, bypassSummonData = true): number { - if ( - !bypassSummonData && - this.summonData.stats[stat] !== 0 - ) { + if (!bypassSummonData && this.summonData.stats[stat] !== 0) { return this.summonData.stats[stat]; } return this.stats[stat]; @@ -1518,9 +1453,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const critBoostTag = source.getTag(CritBoostTag); if (critBoostTag) { if (critBoostTag instanceof DragonCheerTag) { - critStage.value += critBoostTag.typesOnAdd.includes(PokemonType.DRAGON) - ? 2 - : 1; + critStage.value += critBoostTag.typesOnAdd.includes(PokemonType.DRAGON) ? 2 : 1; } else { critStage.value += 2; } @@ -1571,57 +1504,37 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ): number { const statValue = new NumberHolder(this.getStat(stat, false)); if (!ignoreHeldItems) { - globalScene.applyModifiers( - StatBoosterModifier, - this.isPlayer(), - this, - stat, - statValue, - ); + globalScene.applyModifiers(StatBoosterModifier, this.isPlayer(), this, stat, statValue); } // The Ruin abilities here are never ignored, but they reveal themselves on summon anyway const fieldApplied = new BooleanHolder(false); for (const pokemon of globalScene.getField(true)) { - applyFieldStatMultiplierAbAttrs( - FieldMultiplyStatAbAttr, - pokemon, - stat, - statValue, - this, - fieldApplied, - simulated, - ); + applyFieldStatMultiplierAbAttrs(FieldMultiplyStatAbAttr, pokemon, stat, statValue, this, fieldApplied, simulated); if (fieldApplied.value) { break; } } if (!ignoreAbility) { - applyStatMultiplierAbAttrs( - StatMultiplierAbAttr, - this, - stat, - statValue, - simulated, - ); + applyStatMultiplierAbAttrs(StatMultiplierAbAttr, this, stat, statValue, simulated); } const ally = this.getAlly(); if (!isNullOrUndefined(ally)) { - applyAllyStatMultiplierAbAttrs(AllyStatMultiplierAbAttr, ally, stat, statValue, simulated, this, move?.hasFlag(MoveFlags.IGNORE_ABILITIES) || ignoreAllyAbility); + applyAllyStatMultiplierAbAttrs( + AllyStatMultiplierAbAttr, + ally, + stat, + statValue, + simulated, + this, + move?.hasFlag(MoveFlags.IGNORE_ABILITIES) || ignoreAllyAbility, + ); } let ret = statValue.value * - this.getStatStageMultiplier( - stat, - opponent, - move, - ignoreOppAbility, - isCritical, - simulated, - ignoreHeldItems, - ); + this.getStatStageMultiplier(stat, opponent, move, ignoreOppAbility, isCritical, simulated, ignoreHeldItems); switch (stat) { case Stat.ATK: @@ -1630,31 +1543,23 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } break; case Stat.DEF: - if ( - this.isOfType(PokemonType.ICE) && - globalScene.arena.weather?.weatherType === WeatherType.SNOW - ) { + if (this.isOfType(PokemonType.ICE) && globalScene.arena.weather?.weatherType === WeatherType.SNOW) { ret *= 1.5; } break; case Stat.SPATK: break; case Stat.SPDEF: - if ( - this.isOfType(PokemonType.ROCK) && - globalScene.arena.weather?.weatherType === WeatherType.SANDSTORM - ) { + if (this.isOfType(PokemonType.ROCK) && globalScene.arena.weather?.weatherType === WeatherType.SANDSTORM) { ret *= 1.5; } break; - case Stat.SPD: + case Stat.SPD: { const side = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; if (globalScene.arena.getTagOnSide(ArenaTagType.TAILWIND, side)) { ret *= 2; } - if ( - globalScene.arena.getTagOnSide(ArenaTagType.GRASS_WATER_PLEDGE, side) - ) { + if (globalScene.arena.getTagOnSide(ArenaTagType.GRASS_WATER_PLEDGE, side)) { ret >>= 2; } @@ -1664,19 +1569,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (this.status && this.status.effect === StatusEffect.PARALYSIS) { ret >>= 1; } - if ( - this.getTag(BattlerTagType.UNBURDEN) && - this.hasAbility(Abilities.UNBURDEN) - ) { + if (this.getTag(BattlerTagType.UNBURDEN) && this.hasAbility(Abilities.UNBURDEN)) { ret *= 2; } break; + } } const highestStatBoost = this.findTag( - t => - t instanceof HighestStatBoostTag && - (t as HighestStatBoostTag).stat === stat, + t => t instanceof HighestStatBoostTag && (t as HighestStatBoostTag).stat === stat, ) as HighestStatBoostTag; if (highestStatBoost) { ret *= highestStatBoost.multiplier; @@ -1694,18 +1595,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const baseStats = this.calculateBaseStats(); // Using base stats, calculate and store stats one by one for (const s of PERMANENT_STATS) { - const statHolder = new NumberHolder( - Math.floor((2 * baseStats[s] + this.ivs[s]) * this.level * 0.01), - ); + const statHolder = new NumberHolder(Math.floor((2 * baseStats[s] + this.ivs[s]) * this.level * 0.01)); if (s === Stat.HP) { statHolder.value = statHolder.value + this.level + 10; - globalScene.applyModifier( - PokemonIncrementingStatModifier, - this.isPlayer(), - this, - s, - statHolder, - ); + globalScene.applyModifier(PokemonIncrementingStatModifier, this.isPlayer(), this, s, statHolder); if (this.hasAbility(Abilities.WONDER_GUARD, false, true)) { statHolder.value = 1; } @@ -1719,37 +1612,18 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } else { statHolder.value += 5; - const natureStatMultiplier = new NumberHolder( - getNatureStatMultiplier(this.getNature(), s), - ); - globalScene.applyModifier( - PokemonNatureWeightModifier, - this.isPlayer(), - this, - natureStatMultiplier, - ); + const natureStatMultiplier = new NumberHolder(getNatureStatMultiplier(this.getNature(), s)); + globalScene.applyModifier(PokemonNatureWeightModifier, this.isPlayer(), this, natureStatMultiplier); if (natureStatMultiplier.value !== 1) { statHolder.value = Math.max( - Math[natureStatMultiplier.value > 1 ? "ceil" : "floor"]( - statHolder.value * natureStatMultiplier.value, - ), + Math[natureStatMultiplier.value > 1 ? "ceil" : "floor"](statHolder.value * natureStatMultiplier.value), 1, ); } - globalScene.applyModifier( - PokemonIncrementingStatModifier, - this.isPlayer(), - this, - s, - statHolder, - ); + globalScene.applyModifier(PokemonIncrementingStatModifier, this.isPlayer(), this, s, statHolder); } - statHolder.value = Phaser.Math.Clamp( - statHolder.value, - 1, - Number.MAX_SAFE_INTEGER, - ); + statHolder.value = Phaser.Math.Clamp(statHolder.value, 1, Number.MAX_SAFE_INTEGER); this.setStat(s, statHolder.value); } @@ -1757,32 +1631,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { calculateBaseStats(): number[] { const baseStats = this.getSpeciesForm(true).baseStats.slice(0); - applyChallenges( - ChallengeType.FLIP_STAT, - this, - baseStats, - ); + applyChallenges(ChallengeType.FLIP_STAT, this, baseStats); // Shuckle Juice - globalScene.applyModifiers( - PokemonBaseStatTotalModifier, - this.isPlayer(), - this, - baseStats, - ); + globalScene.applyModifiers(PokemonBaseStatTotalModifier, this.isPlayer(), this, baseStats); // Old Gateau - globalScene.applyModifiers( - PokemonBaseStatFlatModifier, - this.isPlayer(), - this, - baseStats, - ); + globalScene.applyModifiers(PokemonBaseStatFlatModifier, this.isPlayer(), this, baseStats); if (this.isFusion()) { const fusionBaseStats = this.getFusionSpeciesForm(true).baseStats; - applyChallenges( - ChallengeType.FLIP_STAT, - this, - fusionBaseStats, - ); + applyChallenges(ChallengeType.FLIP_STAT, this, fusionBaseStats); for (const s of PERMANENT_STATS) { baseStats[s] = Math.ceil((baseStats[s] + fusionBaseStats[s]) / 2); @@ -1793,20 +1649,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } // Vitamins - globalScene.applyModifiers( - BaseStatModifier, - this.isPlayer(), - this, - baseStats, - ); + globalScene.applyModifiers(BaseStatModifier, this.isPlayer(), this, baseStats); return baseStats; } getNature(): Nature { - return this.customPokemonData.nature !== -1 - ? this.customPokemonData.nature - : this.nature; + return this.customPokemonData.nature !== -1 ? this.customPokemonData.nature : this.nature; } setNature(nature: Nature): void { @@ -1841,9 +1690,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } getHpRatio(precise = false): number { - return precise - ? this.hp / this.getMaxHp() - : Math.round((this.hp / this.getMaxHp()) * 100) / 100; + return precise ? this.hp / this.getMaxHp() : Math.round((this.hp / this.getMaxHp()) * 100) / 100; } generateGender(): void { @@ -1860,54 +1707,56 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } /** - * @param {boolean} useIllusion - Whether we want the fake or real gender (illusion ability). + * @param useIllusion - Whether we want the fake or real gender (illusion ability). */ - getGender(ignoreOverride?: boolean, useIllusion: boolean = false): Gender { + getGender(ignoreOverride?: boolean, useIllusion = false): Gender { if (useIllusion && this.summonData.illusion) { return this.summonData.illusion.gender; - } else if (!ignoreOverride && !isNullOrUndefined(this.summonData.gender)) { + } + if (!ignoreOverride && !isNullOrUndefined(this.summonData.gender)) { return this.summonData.gender; } return this.gender; } /** - * @param {boolean} useIllusion - Whether we want the fake or real gender (illusion ability). + * @param useIllusion - Whether we want the fake or real gender (illusion ability). */ - getFusionGender(ignoreOverride?: boolean, useIllusion: boolean = false): Gender { + getFusionGender(ignoreOverride?: boolean, useIllusion = false): Gender { if (useIllusion && this.summonData.illusion?.fusionGender) { return this.summonData.illusion.fusionGender; - } else if (!ignoreOverride && !isNullOrUndefined(this.summonData.fusionGender)) { + } + if (!ignoreOverride && !isNullOrUndefined(this.summonData.fusionGender)) { return this.summonData.fusionGender; } return this.fusionGender; } /** - * @param {boolean} useIllusion - Whether we want the fake or real shininess (illusion ability). + * @param useIllusion - Whether we want the fake or real shininess (illusion ability). */ - isShiny(useIllusion: boolean = false): boolean { + isShiny(useIllusion = false): boolean { if (!useIllusion && this.summonData.illusion) { - return this.summonData.illusion.basePokemon?.shiny || (this.summonData.illusion.fusionSpecies && this.summonData.illusion.basePokemon?.fusionShiny) || false; - } else { - return this.shiny || (this.isFusion(useIllusion) && this.fusionShiny); + return !!( + this.summonData.illusion.basePokemon?.shiny || + (this.summonData.illusion.fusionSpecies && this.summonData.illusion.basePokemon?.fusionShiny) + ); } + return this.shiny || (this.isFusion(useIllusion) && this.fusionShiny); } - isBaseShiny(useIllusion: boolean = false){ + isBaseShiny(useIllusion = false) { if (!useIllusion && this.summonData.illusion) { return !!this.summonData.illusion.basePokemon?.shiny; - } else { - return this.shiny; } + return this.shiny; } - isFusionShiny(useIllusion: boolean = false){ + isFusionShiny(useIllusion = false) { if (!useIllusion && this.summonData.illusion) { return !!this.summonData.illusion.basePokemon?.fusionShiny; - } else { - return this.isFusion(useIllusion) && this.fusionShiny; } + return this.isFusion(useIllusion) && this.fusionShiny; } /** @@ -1915,34 +1764,33 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param useIllusion - Whether we want the fake or real shininess (illusion ability). * @returns `true` if the {@linkcode Pokemon} is shiny and the fusion is shiny as well, `false` otherwise */ - isDoubleShiny(useIllusion: boolean = false): boolean { + isDoubleShiny(useIllusion = false): boolean { if (!useIllusion && this.summonData.illusion?.basePokemon) { - return this.isFusion(false) && this.summonData.illusion.basePokemon.shiny && this.summonData.illusion.basePokemon.fusionShiny; - } else { - return this.isFusion(useIllusion) && this.shiny && this.fusionShiny; + return ( + this.isFusion(false) && + this.summonData.illusion.basePokemon.shiny && + this.summonData.illusion.basePokemon.fusionShiny + ); } + return this.isFusion(useIllusion) && this.shiny && this.fusionShiny; } /** - * @param {boolean} useIllusion - Whether we want the fake or real variant (illusion ability). + * @param useIllusion - Whether we want the fake or real variant (illusion ability). */ - getVariant(useIllusion: boolean = false): Variant { + getVariant(useIllusion = false): Variant { if (!useIllusion && this.summonData.illusion) { return !this.isFusion(false) - ? this.summonData.illusion.basePokemon!.variant - : Math.max(this.variant, this.fusionVariant) as Variant; - } else { - return !this.isFusion(true) - ? this.variant - : Math.max(this.variant, this.fusionVariant) as Variant; + ? this.summonData.illusion.basePokemon!.variant + : (Math.max(this.variant, this.fusionVariant) as Variant); } + return !this.isFusion(true) ? this.variant : (Math.max(this.variant, this.fusionVariant) as Variant); } getBaseVariant(doubleShiny: boolean): Variant { if (doubleShiny) { return this.summonData.illusion?.basePokemon?.variant ?? this.variant; } - return this.getVariant(); } @@ -1950,7 +1798,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return this.luck + (this.isFusion() ? this.fusionLuck : 0); } - isFusion(useIllusion: boolean = false): boolean { + isFusion(useIllusion = false): boolean { if (useIllusion && this.summonData.illusion) { return !!this.summonData.illusion.fusionSpecies; } @@ -1958,12 +1806,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } /** - * @param {boolean} useIllusion - Whether we want the fake name or the real name of the Pokemon (for Illusion ability). + * @param useIllusion - Whether we want the fake name or the real name of the Pokemon (for Illusion ability). */ - getName(useIllusion: boolean = false): string { - return (!useIllusion && this.summonData.illusion?.basePokemon) - ? this.summonData.illusion.basePokemon.name - : this.name; + getName(useIllusion = false): string { + return !useIllusion && this.summonData.illusion?.basePokemon + ? this.summonData.illusion.basePokemon.name + : this.name; } /** @@ -1983,22 +1831,19 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { */ hasSpecies(species: Species, formKey?: string): boolean { if (isNullOrUndefined(formKey)) { - return ( - this.species.speciesId === species || - this.fusionSpecies?.speciesId === species - ); + return this.species.speciesId === species || this.fusionSpecies?.speciesId === species; } - return (this.species.speciesId === species && this.getFormKey() === formKey) || (this.fusionSpecies?.speciesId === species && this.getFusionFormKey() === formKey); + return ( + (this.species.speciesId === species && this.getFormKey() === formKey) || + (this.fusionSpecies?.speciesId === species && this.getFusionFormKey() === formKey) + ); } abstract isBoss(): boolean; getMoveset(ignoreOverride?: boolean): PokemonMove[] { - const ret = - !ignoreOverride && this.summonData.moveset - ? this.summonData.moveset - : this.moveset; + const ret = !ignoreOverride && this.summonData.moveset ? this.summonData.moveset : this.moveset; // Overrides moveset based on arrays specified in overrides.ts let overrideArray: Moves | Array = this.isPlayer() @@ -2013,10 +1858,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } overrideArray.forEach((move: Moves, index: number) => { const ppUsed = this.moveset[index]?.ppUsed ?? 0; - this.moveset[index] = new PokemonMove( - move, - Math.min(ppUsed, allMoves[move].pp), - ); + this.moveset[index] = new PokemonMove(move, Math.min(ppUsed, allMoves[move].pp)); }); } @@ -2033,9 +1875,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { getUnlockedEggMoves(): Moves[] { const moves: Moves[] = []; const species = - this.metSpecies in speciesEggMoves - ? this.metSpecies - : this.getSpeciesForm(true).getRootSpeciesId(true); + this.metSpecies in speciesEggMoves ? this.metSpecies : this.getSpeciesForm(true).getRootSpeciesId(true); if (species in speciesEggMoves) { for (let i = 0; i < 4; i++) { if (globalScene.gameData.starterData[species].eggMoves & (1 << i)) { @@ -2057,17 +1897,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { */ public getLearnableLevelMoves(): Moves[] { let levelMoves = this.getLevelMoves(1, true, false, true).map(lm => lm[1]); - if ( - this.metBiome === -1 && - !globalScene.gameMode.isFreshStartChallenge() && - !globalScene.gameMode.isDaily - ) { + if (this.metBiome === -1 && !globalScene.gameMode.isFreshStartChallenge() && !globalScene.gameMode.isDaily) { levelMoves = this.getUnlockedEggMoves().concat(levelMoves); } if (Array.isArray(this.usedTMs) && this.usedTMs.length > 0) { - levelMoves = this.usedTMs - .filter(m => !levelMoves.includes(m)) - .concat(levelMoves); + levelMoves = this.usedTMs.filter(m => !levelMoves.includes(m)).concat(levelMoves); } levelMoves = levelMoves.filter(lm => !this.moveset.some(m => m.moveId === lm)); return levelMoves; @@ -2083,9 +1917,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { */ public getTypes( includeTeraType = false, - forDefend: boolean = false, - ignoreOverride: boolean = false, - useIllusion: boolean = false + forDefend = false, + ignoreOverride = false, + useIllusion = false, ): PokemonType[] { const types: PokemonType[] = []; @@ -2100,7 +1934,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } if (!types.length || !includeTeraType) { - if ( !ignoreOverride && this.summonData.types && @@ -2145,10 +1978,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { secondType = fusionType1; } - if ( - secondType === PokemonType.UNKNOWN && - isNullOrUndefined(fusionType2) - ) { + if (secondType === PokemonType.UNKNOWN && isNullOrUndefined(fusionType2)) { // If second pokemon was monotype and shared its primary type secondType = customTypes && @@ -2187,11 +2017,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } // check type added to Pokemon from moves like Forest's Curse or Trick Or Treat - if ( - !ignoreOverride && - this.summonData.addedType && - !types.includes(this.summonData.addedType) - ) { + if (!ignoreOverride && this.summonData.addedType && !types.includes(this.summonData.addedType)) { types.push(this.summonData.addedType); } @@ -2211,15 +2037,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param ignoreOverride - If `true`, ignore ability changing effects; Default: `false` * @returns `true` if the Pokemon's type matches */ - public isOfType( - type: PokemonType, - includeTeraType = true, - forDefend = false, - ignoreOverride = false, - ): boolean { - return this.getTypes(includeTeraType, forDefend, ignoreOverride).some( - t => t === type, - ); + public isOfType(type: PokemonType, includeTeraType = true, forDefend = false, ignoreOverride = false): boolean { + return this.getTypes(includeTeraType, forDefend, ignoreOverride).some(t => t === type); } /** @@ -2241,27 +2060,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return allAbilities[Overrides.OPP_ABILITY_OVERRIDE]; } if (this.isFusion()) { - if ( - !isNullOrUndefined(this.fusionCustomPokemonData?.ability) && - this.fusionCustomPokemonData.ability !== -1 - ) { + if (!isNullOrUndefined(this.fusionCustomPokemonData?.ability) && this.fusionCustomPokemonData.ability !== -1) { return allAbilities[this.fusionCustomPokemonData.ability]; } - return allAbilities[ - this.getFusionSpeciesForm(ignoreOverride).getAbility( - this.fusionAbilityIndex, - ) - ]; + return allAbilities[this.getFusionSpeciesForm(ignoreOverride).getAbility(this.fusionAbilityIndex)]; } - if ( - !isNullOrUndefined(this.customPokemonData.ability) && - this.customPokemonData.ability !== -1 - ) { + if (!isNullOrUndefined(this.customPokemonData.ability) && this.customPokemonData.ability !== -1) { return allAbilities[this.customPokemonData.ability]; } - let abilityId = this.getSpeciesForm(ignoreOverride).getAbility( - this.abilityIndex, - ); + let abilityId = this.getSpeciesForm(ignoreOverride).getAbility(this.abilityIndex); if (abilityId === Abilities.NONE) { abilityId = this.species.ability1; } @@ -2282,10 +2089,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (Overrides.OPP_PASSIVE_ABILITY_OVERRIDE && !this.isPlayer()) { return allAbilities[Overrides.OPP_PASSIVE_ABILITY_OVERRIDE]; } - if ( - !isNullOrUndefined(this.customPokemonData.passive) && - this.customPokemonData.passive !== -1 - ) { + if (!isNullOrUndefined(this.customPokemonData.passive) && this.customPokemonData.passive !== -1) { return allAbilities[this.customPokemonData.passive]; } @@ -2309,9 +2113,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const abilityAttrs: T[] = []; if (!canApply || this.canApplyAbility()) { - abilityAttrs.push( - ...this.getAbility(ignoreOverride).getAttrs(attrType), - ); + abilityAttrs.push(...this.getAbility(ignoreOverride).getAttrs(attrType)); } if (!canApply || this.canApplyAbility(true)) { @@ -2361,11 +2163,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return false; } if ( - ((Overrides.PASSIVE_ABILITY_OVERRIDE !== Abilities.NONE || - Overrides.HAS_PASSIVE_ABILITY_OVERRIDE) && + ((Overrides.PASSIVE_ABILITY_OVERRIDE !== Abilities.NONE || Overrides.HAS_PASSIVE_ABILITY_OVERRIDE) && this.isPlayer()) || - ((Overrides.OPP_PASSIVE_ABILITY_OVERRIDE !== Abilities.NONE || - Overrides.OPP_HAS_PASSIVE_ABILITY_OVERRIDE) && + ((Overrides.OPP_PASSIVE_ABILITY_OVERRIDE !== Abilities.NONE || Overrides.OPP_HAS_PASSIVE_ABILITY_OVERRIDE) && !this.isPlayer()) ) { return true; @@ -2402,35 +2202,17 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return false; } const arena = globalScene?.arena; - if ( - arena.ignoreAbilities && - arena.ignoringEffectSource !== this.getBattlerIndex() && - ability.isIgnorable - ) { + if (arena.ignoreAbilities && arena.ignoringEffectSource !== this.getBattlerIndex() && ability.isIgnorable) { return false; } - if ( - this.summonData.abilitySuppressed && - ability.isSuppressable - ) { + if (this.summonData.abilitySuppressed && ability.isSuppressable) { return false; } - const suppressAbilitiesTag = arena.getTag( - ArenaTagType.NEUTRALIZING_GAS, - ) as SuppressAbilitiesTag; + const suppressAbilitiesTag = arena.getTag(ArenaTagType.NEUTRALIZING_GAS) as SuppressAbilitiesTag; const suppressOffField = ability.hasAttr(PreSummonAbAttr); - if ( - (this.isOnField() || suppressOffField) && - suppressAbilitiesTag && - !suppressAbilitiesTag.isBeingRemoved() - ) { - const thisAbilitySuppressing = ability.hasAttr( - PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr, - ); - const hasSuppressingAbility = this.hasAbilityWithAttr( - PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr, - false, - ); + if ((this.isOnField() || suppressOffField) && suppressAbilitiesTag && !suppressAbilitiesTag.isBeingRemoved()) { + const thisAbilitySuppressing = ability.hasAttr(PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr); + const hasSuppressingAbility = this.hasAbilityWithAttr(PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr, false); // Neutralizing gas is up - suppress abilities unless they are unsuppressable or this pokemon is responsible for the gas // (Balance decided that the other ability of a neutralizing gas pokemon should not be neutralized) // If the ability itself is neutralizing gas, don't suppress it (handled through arena tag) @@ -2442,10 +2224,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return false; } } - return ( - (this.hp > 0 || ability.isBypassFaint) && - !ability.conditions.find(condition => !condition(this)) - ); + return (this.hp > 0 || ability.isBypassFaint) && !ability.conditions.find(condition => !condition(this)); } /** @@ -2457,22 +2236,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param ignoreOverride Whether to ignore ability changing effects; default `false` * @returns `true` if the ability is present and active */ - public hasAbility( - ability: Abilities, - canApply = true, - ignoreOverride = false, - ): boolean { - if ( - this.getAbility(ignoreOverride).id === ability && - (!canApply || this.canApplyAbility()) - ) { + public hasAbility(ability: Abilities, canApply = true, ignoreOverride = false): boolean { + if (this.getAbility(ignoreOverride).id === ability && (!canApply || this.canApplyAbility())) { return true; } - if ( - this.getPassiveAbility().id === ability && - this.hasPassive() && - (!canApply || this.canApplyAbility(true)) - ) { + if (this.getPassiveAbility().id === ability && this.hasPassive() && (!canApply || this.canApplyAbility(true))) { return true; } return false; @@ -2488,22 +2256,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param ignoreOverride Whether to ignore ability changing effects; default `false` * @returns `true` if an ability with the given {@linkcode AbAttr} is present and active */ - public hasAbilityWithAttr( - attrType: Constructor, - canApply = true, - ignoreOverride = false, - ): boolean { - if ( - (!canApply || this.canApplyAbility()) && - this.getAbility(ignoreOverride).hasAttr(attrType) - ) { + public hasAbilityWithAttr(attrType: Constructor, canApply = true, ignoreOverride = false): boolean { + if ((!canApply || this.canApplyAbility()) && this.getAbility(ignoreOverride).hasAttr(attrType)) { return true; } - if ( - this.hasPassive() && - (!canApply || this.canApplyAbility(true)) && - this.getPassiveAbility().hasAttr(attrType) - ) { + if (this.hasPassive() && (!canApply || this.canApplyAbility(true)) && this.getPassiveAbility().hasAttr(attrType)) { return true; } return false; @@ -2536,10 +2293,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return PokemonType.STELLAR; } if (this.hasSpecies(Species.OGERPON)) { - const ogerponForm = - this.species.speciesId === Species.OGERPON - ? this.formIndex - : this.fusionFormIndex; + const ogerponForm = this.species.speciesId === Species.OGERPON ? this.formIndex : this.fusionFormIndex; switch (ogerponForm) { case 0: case 4: @@ -2579,10 +2333,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param simulated - If `true`, applies abilities via simulated calls. * @returns `true` if the pokemon is trapped */ - public isTrapped( - trappedAbMessages: string[] = [], - simulated = true, - ): boolean { + public isTrapped(trappedAbMessages: string[] = [], simulated = true): boolean { const commandedTag = this.getTag(BattlerTagType.COMMANDED); if (commandedTag?.getSourcePokemon()?.isActive(true)) { return true; @@ -2597,22 +2348,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * Contains opposing Pokemon (Enemy/Player Pokemon) depending on perspective * Afterwards, it filters out Pokemon that have been switched out of the field so trapped abilities/moves do not trigger */ - const opposingFieldUnfiltered = this.isPlayer() - ? globalScene.getEnemyField() - : globalScene.getPlayerField(); - const opposingField = opposingFieldUnfiltered.filter( - enemyPkm => enemyPkm.switchOutStatus === false, - ); + const opposingFieldUnfiltered = this.isPlayer() ? globalScene.getEnemyField() : globalScene.getPlayerField(); + const opposingField = opposingFieldUnfiltered.filter(enemyPkm => enemyPkm.switchOutStatus === false); for (const opponent of opposingField) { - applyCheckTrappedAbAttrs( - CheckTrappedAbAttr, - opponent, - trappedByAbility, - this, - trappedAbMessages, - simulated, - ); + applyCheckTrappedAbAttrs(CheckTrappedAbAttr, opponent, trappedByAbility, this, trappedAbMessages, simulated); } const side = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; @@ -2634,26 +2374,19 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const moveTypeHolder = new NumberHolder(move.type); applyMoveAttrs(VariableMoveTypeAttr, this, null, move, moveTypeHolder); - applyPreAttackAbAttrs( - MoveTypeChangeAbAttr, - this, - null, - move, - simulated, - moveTypeHolder - ); + applyPreAttackAbAttrs(MoveTypeChangeAbAttr, this, null, move, simulated, moveTypeHolder); // If the user is terastallized and the move is tera blast, or tera starstorm that is stellar type, // then bypass the check for ion deluge and electrify - if (this.isTerastallized && (move.id === Moves.TERA_BLAST || move.id === Moves.TERA_STARSTORM && moveTypeHolder.value === PokemonType.STELLAR)) { + if ( + this.isTerastallized && + (move.id === Moves.TERA_BLAST || + (move.id === Moves.TERA_STARSTORM && moveTypeHolder.value === PokemonType.STELLAR)) + ) { return moveTypeHolder.value as PokemonType; } - globalScene.arena.applyTags( - ArenaTagType.ION_DELUGE, - simulated, - moveTypeHolder, - ); + globalScene.arena.applyTags(ArenaTagType.ION_DELUGE, simulated, moveTypeHolder); if (this.getTag(BattlerTagType.ELECTRIFIED)) { moveTypeHolder.value = PokemonType.ELECTRIC; } @@ -2678,7 +2411,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ignoreAbility = false, simulated = true, cancelled?: BooleanHolder, - useIllusion: boolean = false + useIllusion = false, ): TypeDamageMultiplier { if (!isNullOrUndefined(this.turnData?.moveEffectiveness)) { return this.turnData?.moveEffectiveness; @@ -2690,28 +2423,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const moveType = source.getMoveType(move); const typeMultiplier = new NumberHolder( - move.category !== MoveCategory.STATUS || - move.hasAttr(RespectAttackTypeImmunityAttr) - ? this.getAttackTypeEffectiveness( - moveType, - source, - false, - simulated, - move, - useIllusion - ) - : 1); - - applyMoveAttrs( - VariableMoveTypeMultiplierAttr, - source, - this, - move, - typeMultiplier, + move.category !== MoveCategory.STATUS || move.hasAttr(RespectAttackTypeImmunityAttr) + ? this.getAttackTypeEffectiveness(moveType, source, false, simulated, move, useIllusion) + : 1, ); - if ( - this.getTypes(true, true).find(t => move.isTypeImmune(source, this, t)) - ) { + + applyMoveAttrs(VariableMoveTypeMultiplierAttr, source, this, move, typeMultiplier); + if (this.getTypes(true, true).find(t => move.isTypeImmune(source, this, t))) { typeMultiplier.value = 0; } @@ -2721,52 +2439,23 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const cancelledHolder = cancelled ?? new BooleanHolder(false); if (!ignoreAbility) { - applyPreDefendAbAttrs( - TypeImmunityAbAttr, - this, - source, - move, - cancelledHolder, - simulated, - typeMultiplier, - ); + applyPreDefendAbAttrs(TypeImmunityAbAttr, this, source, move, cancelledHolder, simulated, typeMultiplier); if (!cancelledHolder.value) { - applyPreDefendAbAttrs( - MoveImmunityAbAttr, - this, - source, - move, - cancelledHolder, - simulated, - typeMultiplier, - ); + applyPreDefendAbAttrs(MoveImmunityAbAttr, this, source, move, cancelledHolder, simulated, typeMultiplier); } if (!cancelledHolder.value) { - const defendingSidePlayField = this.isPlayer() - ? globalScene.getPlayerField() - : globalScene.getEnemyField(); + const defendingSidePlayField = this.isPlayer() ? globalScene.getPlayerField() : globalScene.getEnemyField(); defendingSidePlayField.forEach(p => - applyPreDefendAbAttrs( - FieldPriorityMoveImmunityAbAttr, - p, - source, - move, - cancelledHolder, - ), + applyPreDefendAbAttrs(FieldPriorityMoveImmunityAbAttr, p, source, move, cancelledHolder), ); } } - const immuneTags = this.findTags( - tag => tag instanceof TypeImmuneTag && tag.immuneType === moveType, - ); + const immuneTags = this.findTags(tag => tag instanceof TypeImmuneTag && tag.immuneType === moveType); for (const tag of immuneTags) { - if ( - move && - !move.getAttrs(HitsTagAttr).some(attr => attr.tagType === tag.tagType) - ) { + if (move && !move.getAttrs(HitsTagAttr).some(attr => attr.tagType === tag.tagType)) { typeMultiplier.value = 0; break; } @@ -2774,27 +2463,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // Apply Tera Shell's effect to attacks after all immunities are accounted for if (!ignoreAbility && move.category !== MoveCategory.STATUS) { - applyPreDefendAbAttrs( - FullHpResistTypeAbAttr, - this, - source, - move, - cancelledHolder, - simulated, - typeMultiplier, - ); + applyPreDefendAbAttrs(FullHpResistTypeAbAttr, this, source, move, cancelledHolder, simulated, typeMultiplier); } - if ( - move.category === MoveCategory.STATUS && - move.hitsSubstitute(source, this) - ) { + if (move.category === MoveCategory.STATUS && move.hitsSubstitute(source, this)) { typeMultiplier.value = 0; } - return ( - !cancelledHolder.value ? typeMultiplier.value : 0 - ) as TypeDamageMultiplier; + return (!cancelledHolder.value ? typeMultiplier.value : 0) as TypeDamageMultiplier; } /** @@ -2810,10 +2486,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { getAttackTypeEffectiveness( moveType: PokemonType, source?: Pokemon, - ignoreStrongWinds: boolean = false, - simulated: boolean = true, + ignoreStrongWinds = false, + simulated = true, move?: Move, - useIllusion: boolean = false + useIllusion = false, ): TypeDamageMultiplier { if (moveType === PokemonType.STELLAR) { return this.isTerastallized ? 2 : 1; @@ -2823,10 +2499,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // Handle flying v ground type immunity without removing flying type so effective types are still effective // Related to https://github.com/pagefaultgames/pokerogue/issues/524 - if ( - moveType === PokemonType.GROUND && - (this.isGrounded() || arena.hasTag(ArenaTagType.GRAVITY)) - ) { + if (moveType === PokemonType.GROUND && (this.isGrounded() || arena.hasTag(ArenaTagType.GRAVITY))) { const flyingIndex = types.indexOf(PokemonType.FLYING); if (flyingIndex > -1) { types.splice(flyingIndex, 1); @@ -2835,37 +2508,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { let multiplier = types .map(defType => { - const multiplier = new NumberHolder( - getTypeDamageMultiplier(moveType, defType), - ); - applyChallenges( - ChallengeType.TYPE_EFFECTIVENESS, - multiplier, - ); + const multiplier = new NumberHolder(getTypeDamageMultiplier(moveType, defType)); + applyChallenges(ChallengeType.TYPE_EFFECTIVENESS, multiplier); if (move) { - applyMoveAttrs( - VariableMoveTypeChartAttr, - null, - this, - move, - multiplier, - defType, - ); + applyMoveAttrs(VariableMoveTypeChartAttr, null, this, move, multiplier, defType); } if (source) { const ignoreImmunity = new BooleanHolder(false); - if ( - source.isActive(true) && - source.hasAbilityWithAttr(IgnoreTypeImmunityAbAttr) - ) { - applyAbAttrs( - IgnoreTypeImmunityAbAttr, - source, - ignoreImmunity, - simulated, - moveType, - defType, - ); + if (source.isActive(true) && source.hasAbilityWithAttr(IgnoreTypeImmunityAbAttr)) { + applyAbAttrs(IgnoreTypeImmunityAbAttr, source, ignoreImmunity, simulated, moveType, defType); } if (ignoreImmunity.value) { if (multiplier.value === 0) { @@ -2873,9 +2524,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } - const exposedTags = this.findTags( - tag => tag instanceof ExposedTag, - ) as ExposedTag[]; + const exposedTags = this.findTags(tag => tag instanceof ExposedTag) as ExposedTag[]; if (exposedTags.some(t => t.ignoreImmunity(defType, moveType))) { if (multiplier.value === 0) { return 1; @@ -2886,13 +2535,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { }) .reduce((acc, cur) => acc * cur, 1) as TypeDamageMultiplier; - const typeMultiplierAgainstFlying = new NumberHolder( - getTypeDamageMultiplier(moveType, PokemonType.FLYING), - ); - applyChallenges( - ChallengeType.TYPE_EFFECTIVENESS, - typeMultiplierAgainstFlying, - ); + const typeMultiplierAgainstFlying = new NumberHolder(getTypeDamageMultiplier(moveType, PokemonType.FLYING)); + applyChallenges(ChallengeType.TYPE_EFFECTIVENESS, typeMultiplierAgainstFlying); // Handle strong winds lowering effectiveness of types super effective against pure flying if ( !ignoreStrongWinds && @@ -2921,27 +2565,25 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const enemyTypes = opponent.getTypes(true, true, false, true); /** Is this Pokemon faster than the opponent? */ const outspeed = - (this.isActive(true) - ? this.getEffectiveStat(Stat.SPD, opponent) - : this.getStat(Stat.SPD, false)) >= + (this.isActive(true) ? this.getEffectiveStat(Stat.SPD, opponent) : this.getStat(Stat.SPD, false)) >= opponent.getEffectiveStat(Stat.SPD, this); /** * Based on how effective this Pokemon's types are offensively against the opponent's types. * This score is increased by 25 percent if this Pokemon is faster than the opponent. */ - let atkScore = opponent.getAttackTypeEffectiveness(types[0], this, false, true, undefined, true) * (outspeed ? 1.25 : 1); + let atkScore = + opponent.getAttackTypeEffectiveness(types[0], this, false, true, undefined, true) * (outspeed ? 1.25 : 1); /** * Based on how effectively this Pokemon defends against the opponent's types. * This score cannot be higher than 4. */ - let defScore = - 1 / - Math.max(this.getAttackTypeEffectiveness(enemyTypes[0], opponent), 0.25); + let defScore = 1 / Math.max(this.getAttackTypeEffectiveness(enemyTypes[0], opponent), 0.25); if (types.length > 1) { atkScore *= opponent.getAttackTypeEffectiveness(types[1], this); } if (enemyTypes.length > 1) { - defScore *= (1 / Math.max(this.getAttackTypeEffectiveness(enemyTypes[1], opponent, false, false, undefined, true), 0.25)); + defScore *= + 1 / Math.max(this.getAttackTypeEffectiveness(enemyTypes[1], opponent, false, false, undefined, true), 0.25); } /** * Based on this Pokemon's HP ratio compared to that of the opponent. @@ -2962,38 +2604,26 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if ( !e.item && this.level >= e.level && - (isNullOrUndefined(e.preFormKey) || - this.getFormKey() === e.preFormKey) + (isNullOrUndefined(e.preFormKey) || this.getFormKey() === e.preFormKey) ) { - if ( - e.condition === null || - (e.condition as SpeciesEvolutionCondition).predicate(this) - ) { + if (e.condition === null || (e.condition as SpeciesEvolutionCondition).predicate(this)) { return e; } } } } - if ( - this.isFusion() && - this.fusionSpecies && - pokemonEvolutions.hasOwnProperty(this.fusionSpecies.speciesId) - ) { - const fusionEvolutions = pokemonEvolutions[ - this.fusionSpecies.speciesId - ].map(e => new FusionSpeciesFormEvolution(this.species.speciesId, e)); + if (this.isFusion() && this.fusionSpecies && pokemonEvolutions.hasOwnProperty(this.fusionSpecies.speciesId)) { + const fusionEvolutions = pokemonEvolutions[this.fusionSpecies.speciesId].map( + e => new FusionSpeciesFormEvolution(this.species.speciesId, e), + ); for (const fe of fusionEvolutions) { if ( !fe.item && this.level >= fe.level && - (isNullOrUndefined(fe.preFormKey) || - this.getFusionFormKey() === fe.preFormKey) + (isNullOrUndefined(fe.preFormKey) || this.getFusionFormKey() === fe.preFormKey) ) { - if ( - fe.condition === null || - (fe.condition as SpeciesEvolutionCondition).predicate(this) - ) { + if (fe.condition === null || (fe.condition as SpeciesEvolutionCondition).predicate(this)) { return fe; } } @@ -3023,10 +2653,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (!startingLevel) { startingLevel = this.level; } - if ( - learnSituation === LearnMoveSituation.EVOLUTION_FUSED && - this.fusionSpecies - ) { + if (learnSituation === LearnMoveSituation.EVOLUTION_FUSED && this.fusionSpecies) { // For fusion evolutions, get ONLY the moves of the component mon that evolved levelMoves = this.getFusionSpeciesForm(true) .getLevelMoves() @@ -3046,10 +2673,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ); for (let e = 0; e < evolutionChain.length; e++) { // TODO: Might need to pass specific form index in simulated evolution chain - const speciesLevelMoves = getPokemonSpeciesForm( - evolutionChain[e][0], - this.formIndex, - ).getLevelMoves(); + const speciesLevelMoves = getPokemonSpeciesForm(evolutionChain[e][0], this.formIndex).getLevelMoves(); if (includeRelearnerMoves) { levelMoves.push(...speciesLevelMoves); } else { @@ -3057,9 +2681,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ...speciesLevelMoves.filter( lm => (includeEvolutionMoves && lm[0] === EVOLVE_MOVE) || - ((!e || lm[0] > 1) && - (e === evolutionChain.length - 1 || - lm[0] <= evolutionChain[e + 1][1])), + ((!e || lm[0] > 1) && (e === evolutionChain.length - 1 || lm[0] <= evolutionChain[e + 1][1])), ), ); } @@ -3074,19 +2696,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { lm[0] > 0, ); } - if ( - this.fusionSpecies && - learnSituation !== LearnMoveSituation.EVOLUTION_FUSED_BASE - ) { + if (this.fusionSpecies && learnSituation !== LearnMoveSituation.EVOLUTION_FUSED_BASE) { // For fusion evolutions, get ONLY the moves of the component mon that evolved if (simulateEvolutionChain) { - const fusionEvolutionChain = - this.fusionSpecies.getSimulatedEvolutionChain( - this.level, - this.hasTrainer(), - this.isBoss(), - this.isPlayer(), - ); + const fusionEvolutionChain = this.fusionSpecies.getSimulatedEvolutionChain( + this.level, + this.hasTrainer(), + this.isBoss(), + this.isPlayer(), + ); for (let e = 0; e < fusionEvolutionChain.length; e++) { // TODO: Might need to pass specific form index in simulated evolution chain const speciesLevelMoves = getPokemonSpeciesForm( @@ -3096,9 +2714,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (includeRelearnerMoves) { levelMoves.push( ...speciesLevelMoves.filter( - lm => - (includeEvolutionMoves && lm[0] === EVOLVE_MOVE) || - lm[0] !== EVOLVE_MOVE, + lm => (includeEvolutionMoves && lm[0] === EVOLVE_MOVE) || lm[0] !== EVOLVE_MOVE, ), ); } else { @@ -3107,8 +2723,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { lm => (includeEvolutionMoves && lm[0] === EVOLVE_MOVE) || ((!e || lm[0] > 1) && - (e === fusionEvolutionChain.length - 1 || - lm[0] <= fusionEvolutionChain[e + 1][1])), + (e === fusionEvolutionChain.length - 1 || lm[0] <= fusionEvolutionChain[e + 1][1])), ), ); } @@ -3127,9 +2742,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } } - levelMoves.sort((lma: [number, number], lmb: [number, number]) => - lma[0] > lmb[0] ? 1 : lma[0] < lmb[0] ? -1 : 0, - ); + levelMoves.sort((lma: [number, number], lmb: [number, number]) => (lma[0] > lmb[0] ? 1 : lma[0] < lmb[0] ? -1 : 0)); /** * Filter out moves not within the correct level range(s) @@ -3141,10 +2754,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const isRelearner = level < startingLevel; const allowedEvolutionMove = level === 0 && includeEvolutionMoves; - return ( - !(level > this.level) && - (includeRelearnerMoves || !isRelearner || allowedEvolutionMove) - ); + return !(level > this.level) && (includeRelearnerMoves || !isRelearner || allowedEvolutionMove); }); /** @@ -3210,10 +2820,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { */ trySetShiny(thresholdOverride?: number): boolean { // Shiny Pokemon should not spawn in the end biome in endless - if ( - globalScene.gameMode.isEndless && - globalScene.arena.biomeType === Biome.END - ) { + if (globalScene.gameMode.isEndless && globalScene.arena.biomeType === Biome.END) { return false; } @@ -3233,11 +2840,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } if (!this.hasTrainer()) { - globalScene.applyModifiers( - ShinyRateBoosterModifier, - true, - shinyThreshold, - ); + globalScene.applyModifiers(ShinyRateBoosterModifier, true, shinyThreshold); } } else { shinyThreshold.value = thresholdOverride; @@ -3262,10 +2865,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param applyModifiersToOverride If {@linkcode thresholdOverride} is set and this is true, will apply Shiny Charm and event modifiers to {@linkcode thresholdOverride} * @returns `true` if the Pokemon has been set as a shiny, `false` otherwise */ - public trySetShinySeed( - thresholdOverride?: number, - applyModifiersToOverride?: boolean, - ): boolean { + public trySetShinySeed(thresholdOverride?: number, applyModifiersToOverride?: boolean): boolean { if (!this.shiny) { const shinyThreshold = new NumberHolder(BASE_SHINY_CHANCE); if (thresholdOverride === undefined || applyModifiersToOverride) { @@ -3275,13 +2875,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (timedEventManager.isEventActive()) { shinyThreshold.value *= timedEventManager.getShinyMultiplier(); } - globalScene.applyModifiers( - ShinyRateBoosterModifier, - true, - shinyThreshold, - ); - } - else { + globalScene.applyModifiers(ShinyRateBoosterModifier, true, shinyThreshold); + } else { shinyThreshold.value = thresholdOverride; } @@ -3291,8 +2886,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (this.shiny) { this.variant = this.variant ?? 0; this.variant = Math.max(this.generateShinyVariant(), this.variant) as Variant; // Don't set a variant lower than the current one - this.luck = - this.variant + 1 + (this.fusionShiny ? this.fusionVariant + 1 : 0); + this.luck = this.variant + 1 + (this.fusionShiny ? this.fusionVariant + 1 : 0); this.initShinySparkle(); } @@ -3318,8 +2912,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // Checks if there is no variant data for both the index or index with form if ( !this.shiny || - (!variantData.hasOwnProperty(variantDataIndex) && - !variantData.hasOwnProperty(this.species.speciesId)) + (!variantData.hasOwnProperty(variantDataIndex) && !variantData.hasOwnProperty(this.species.speciesId)) ) { return 0; } @@ -3349,10 +2942,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param applyModifiersToOverride If {@linkcode thresholdOverride} is set and this is true, will apply Ability Charm to {@linkcode thresholdOverride} * @returns `true` if the Pokemon has been set to have its hidden ability, `false` otherwise */ - public tryRerollHiddenAbilitySeed( - thresholdOverride?: number, - applyModifiersToOverride?: boolean, - ): boolean { + public tryRerollHiddenAbilitySeed(thresholdOverride?: number, applyModifiersToOverride?: boolean): boolean { if (!this.species.abilityHidden) { return false; } @@ -3362,11 +2952,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { haThreshold.value = thresholdOverride; } if (!this.hasTrainer()) { - globalScene.applyModifiers( - HiddenAbilityRateBoosterModifier, - true, - haThreshold, - ); + globalScene.applyModifiers(HiddenAbilityRateBoosterModifier, true, haThreshold); } } else { haThreshold.value = thresholdOverride; @@ -3380,15 +2966,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } public generateFusionSpecies(forStarter?: boolean): void { - const hiddenAbilityChance = new NumberHolder( - BASE_HIDDEN_ABILITY_CHANCE, - ); + const hiddenAbilityChance = new NumberHolder(BASE_HIDDEN_ABILITY_CHANCE); if (!this.hasTrainer()) { - globalScene.applyModifiers( - HiddenAbilityRateBoosterModifier, - true, - hiddenAbilityChance, - ); + globalScene.applyModifiers(HiddenAbilityRateBoosterModifier, true, hiddenAbilityChance); } const hasHiddenAbility = !randSeedInt(hiddenAbilityChance.value); @@ -3411,30 +2991,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { let fusionOverride: PokemonSpecies | undefined = undefined; - if ( - forStarter && - this instanceof PlayerPokemon && - Overrides.STARTER_FUSION_SPECIES_OVERRIDE - ) { - fusionOverride = getPokemonSpecies( - Overrides.STARTER_FUSION_SPECIES_OVERRIDE, - ); - } else if ( - this instanceof EnemyPokemon && - Overrides.OPP_FUSION_SPECIES_OVERRIDE - ) { + if (forStarter && this instanceof PlayerPokemon && Overrides.STARTER_FUSION_SPECIES_OVERRIDE) { + fusionOverride = getPokemonSpecies(Overrides.STARTER_FUSION_SPECIES_OVERRIDE); + } else if (this instanceof EnemyPokemon && Overrides.OPP_FUSION_SPECIES_OVERRIDE) { fusionOverride = getPokemonSpecies(Overrides.OPP_FUSION_SPECIES_OVERRIDE); } this.fusionSpecies = fusionOverride ?? - globalScene.randomSpecies( - globalScene.currentBattle?.waveIndex || 0, - this.level, - false, - filter, - true, - ); + globalScene.randomSpecies(globalScene.currentBattle?.waveIndex || 0, this.level, false, filter, true); this.fusionAbilityIndex = this.fusionSpecies.abilityHidden && hasHiddenAbility ? 2 @@ -3486,10 +3051,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { let movePool: [Moves, number][] = []; const allLevelMoves = this.getLevelMoves(1, true, true); if (!allLevelMoves) { - console.warn( - "Error encountered trying to generate moveset for:", - this.species.name, - ); + console.warn("Error encountered trying to generate moveset for:", this.species.name); return; } @@ -3504,13 +3066,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { weight = 50; } // Assume level 1 moves with 80+ BP are "move reminder" moves and bump their weight. Trainers use actual relearn moves. - if (weight === 1 && allMoves[levelMove[1]].power >= 80 || weight === RELEARN_MOVE && this.hasTrainer()) { + if ((weight === 1 && allMoves[levelMove[1]].power >= 80) || (weight === RELEARN_MOVE && this.hasTrainer())) { weight = 40; } - if ( - !movePool.some(m => m[0] === levelMove[1]) && - !allMoves[levelMove[1]].name.endsWith(" (N)") - ) { + if (!movePool.some(m => m[0] === levelMove[1]) && !allMoves[levelMove[1]].name.endsWith(" (N)")) { movePool.push([levelMove[1], weight]); } } @@ -3531,30 +3090,17 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { compatible = true; break; } - } else if ( - p === this.species.speciesId || - (this.fusionSpecies && p === this.fusionSpecies.speciesId) - ) { + } else if (p === this.species.speciesId || (this.fusionSpecies && p === this.fusionSpecies.speciesId)) { compatible = true; break; } } - if ( - compatible && - !movePool.some(m => m[0] === moveId) && - !allMoves[moveId].name.endsWith(" (N)") - ) { + if (compatible && !movePool.some(m => m[0] === moveId) && !allMoves[moveId].name.endsWith(" (N)")) { if (tmPoolTiers[moveId] === ModifierTier.COMMON && this.level >= 15) { movePool.push([moveId, 4]); - } else if ( - tmPoolTiers[moveId] === ModifierTier.GREAT && - this.level >= 30 - ) { + } else if (tmPoolTiers[moveId] === ModifierTier.GREAT && this.level >= 30) { movePool.push([moveId, 8]); - } else if ( - tmPoolTiers[moveId] === ModifierTier.ULTRA && - this.level >= 50 - ) { + } else if (tmPoolTiers[moveId] === ModifierTier.ULTRA && this.level >= 50) { movePool.push([moveId, 14]); } } @@ -3564,10 +3110,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (this.level >= 60) { for (let i = 0; i < 3; i++) { const moveId = speciesEggMoves[this.species.getRootSpeciesId()][i]; - if ( - !movePool.some(m => m[0] === moveId) && - !allMoves[moveId].name.endsWith(" (N)") - ) { + if (!movePool.some(m => m[0] === moveId) && !allMoves[moveId].name.endsWith(" (N)")) { movePool.push([moveId, 40]); } } @@ -3583,17 +3126,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } if (this.fusionSpecies) { for (let i = 0; i < 3; i++) { - const moveId = - speciesEggMoves[this.fusionSpecies.getRootSpeciesId()][i]; - if ( - !movePool.some(m => m[0] === moveId) && - !allMoves[moveId].name.endsWith(" (N)") - ) { + const moveId = speciesEggMoves[this.fusionSpecies.getRootSpeciesId()][i]; + if (!movePool.some(m => m[0] === moveId) && !allMoves[moveId].name.endsWith(" (N)")) { movePool.push([moveId, 40]); } } - const moveId = - speciesEggMoves[this.fusionSpecies.getRootSpeciesId()][3]; + const moveId = speciesEggMoves[this.fusionSpecies.getRootSpeciesId()][3]; // No rare egg moves before e4 if ( this.level >= 170 && @@ -3612,35 +3150,21 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { movePool = movePool.filter(m => !allMoves[m[0]].hasAttr(SacrificialAttr) && !allMoves[m[0]].hasAttr(HpSplitAttr)); } // No one gets Memento or Final Gambit - movePool = movePool.filter( - m => !allMoves[m[0]].hasAttr(SacrificialAttrOnHit), - ); + movePool = movePool.filter(m => !allMoves[m[0]].hasAttr(SacrificialAttrOnHit)); if (this.hasTrainer()) { // Trainers never get OHKO moves movePool = movePool.filter(m => !allMoves[m[0]].hasAttr(OneHitKOAttr)); // Half the weight of self KO moves - movePool = movePool.map(m => [ - m[0], - m[1] * (allMoves[m[0]].hasAttr(SacrificialAttr) ? 0.5 : 1), - ]); + movePool = movePool.map(m => [m[0], m[1] * (allMoves[m[0]].hasAttr(SacrificialAttr) ? 0.5 : 1)]); // Trainers get a weight bump to stat buffing moves movePool = movePool.map(m => [ m[0], - m[1] * - (allMoves[m[0]] - .getAttrs(StatStageChangeAttr) - .some(a => a.stages > 1 && a.selfTarget) - ? 1.25 - : 1), + m[1] * (allMoves[m[0]].getAttrs(StatStageChangeAttr).some(a => a.stages > 1 && a.selfTarget) ? 1.25 : 1), ]); // Trainers get a weight decrease to multiturn moves movePool = movePool.map(m => [ m[0], - m[1] * - (!!allMoves[m[0]].isChargingMove() || - !!allMoves[m[0]].hasAttr(RechargeAttr) - ? 0.7 - : 1), + m[1] * (!!allMoves[m[0]].isChargingMove() || !!allMoves[m[0]].hasAttr(RechargeAttr) ? 0.7 : 1), ]); } @@ -3648,10 +3172,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // Caps max power at 90 to avoid something like hyper beam ruining the stats. // This is a pretty soft weighting factor, although it is scaled with the weight multiplier. const maxPower = Math.min( - movePool.reduce( - (v, m) => Math.max(allMoves[m[0]].calculateEffectivePower(), v), - 40, - ), + movePool.reduce((v, m) => Math.max(allMoves[m[0]].calculateEffectivePower(), v), 40), 90, ); movePool = movePool.map(m => [ @@ -3659,10 +3180,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { m[1] * (allMoves[m[0]].category === MoveCategory.STATUS ? 1 - : Math.max( - Math.min(allMoves[m[0]].calculateEffectivePower() / maxPower, 1), - 0.5, - )), + : Math.max(Math.min(allMoves[m[0]].calculateEffectivePower() / maxPower, 1), 0.5)), ]); // Weight damaging moves against the lower stat. This uses a non-linear relationship. @@ -3670,16 +3188,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // One third weight at ~1.58x higher, one quarter weight at ~1.73x higher, one fifth at ~1.87x, and one tenth at ~2.35x higher. const atk = this.getStat(Stat.ATK); const spAtk = this.getStat(Stat.SPATK); - const worseCategory: MoveCategory = - atk > spAtk ? MoveCategory.SPECIAL : MoveCategory.PHYSICAL; - const statRatio = - worseCategory === MoveCategory.PHYSICAL ? atk / spAtk : spAtk / atk; + const worseCategory: MoveCategory = atk > spAtk ? MoveCategory.SPECIAL : MoveCategory.PHYSICAL; + const statRatio = worseCategory === MoveCategory.PHYSICAL ? atk / spAtk : spAtk / atk; movePool = movePool.map(m => [ m[0], - m[1] * - (allMoves[m[0]].category === worseCategory - ? Math.min(Math.pow(statRatio, 3) * 1.3, 1) - : 1), + m[1] * (allMoves[m[0]].category === worseCategory ? Math.min(Math.pow(statRatio, 3) * 1.3, 1) : 1), ]); /** The higher this is the more the game weights towards higher level moves. At `0` all moves are equal weight. */ @@ -3687,16 +3200,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (this.isBoss()) { weightMultiplier += 0.4; } - const baseWeights: [Moves, number][] = movePool.map(m => [ - m[0], - Math.ceil(Math.pow(m[1], weightMultiplier) * 100), - ]); + const baseWeights: [Moves, number][] = movePool.map(m => [m[0], Math.ceil(Math.pow(m[1], weightMultiplier) * 100)]); // All Pokemon force a STAB move first const stabMovePool = baseWeights.filter( - m => - allMoves[m[0]].category !== MoveCategory.STATUS && - this.isOfType(allMoves[m[0]].type), + m => allMoves[m[0]].category !== MoveCategory.STATUS && this.isOfType(allMoves[m[0]].type), ); if (stabMovePool.length) { @@ -3709,41 +3217,32 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.moveset.push(new PokemonMove(stabMovePool[index][0], 0, 0)); } - while ( - baseWeights.length > this.moveset.length && - this.moveset.length < 4 - ) { + while (baseWeights.length > this.moveset.length && this.moveset.length < 4) { if (this.hasTrainer()) { // Sqrt the weight of any damaging moves with overlapping types. This is about a 0.05 - 0.1 multiplier. // Other damaging moves 2x weight if 0-1 damaging moves, 0.5x if 2, 0.125x if 3. These weights get 20x if STAB. // Status moves remain unchanged on weight, this encourages 1-2 movePool = baseWeights - .filter(m => !this.moveset.some( - mo => - m[0] === mo.moveId || - (allMoves[m[0]].hasAttr(SacrificialAttr) && mo.getMove().hasAttr(SacrificialAttr)) // Only one self-KO move allowed - )) + .filter( + m => + !this.moveset.some( + mo => + m[0] === mo.moveId || + (allMoves[m[0]].hasAttr(SacrificialAttr) && mo.getMove().hasAttr(SacrificialAttr)), // Only one self-KO move allowed + ), + ) .map(m => { let ret: number; if ( this.moveset.some( - mo => - mo.getMove().category !== MoveCategory.STATUS && - mo.getMove().type === allMoves[m[0]].type, + mo => mo.getMove().category !== MoveCategory.STATUS && mo.getMove().type === allMoves[m[0]].type, ) ) { ret = Math.ceil(Math.sqrt(m[1])); } else if (allMoves[m[0]].category !== MoveCategory.STATUS) { ret = Math.ceil( (m[1] / - Math.max( - Math.pow( - 4, - this.moveset.filter(mo => (mo.getMove().power ?? 0) > 1) - .length, - ) / 8, - 0.5, - )) * + Math.max(Math.pow(4, this.moveset.filter(mo => (mo.getMove().power ?? 0) > 1).length) / 8, 0.5)) * (this.isOfType(allMoves[m[0]].type) ? 20 : 1), ); } else { @@ -3753,11 +3252,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { }); } else { // Non-trainer pokemon just use normal weights - movePool = baseWeights.filter(m => !this.moveset.some( - mo => - m[0] === mo.moveId || - (allMoves[m[0]].hasAttr(SacrificialAttr) && mo.getMove().hasAttr(SacrificialAttr)) // Only one self-KO move allowed - )); + movePool = baseWeights.filter( + m => + !this.moveset.some( + mo => + m[0] === mo.moveId || + (allMoves[m[0]].hasAttr(SacrificialAttr) && mo.getMove().hasAttr(SacrificialAttr)), // Only one self-KO move allowed + ), + ); } const totalWeight = movePool.reduce((v, m) => v + m[1], 0); let rand = randSeedInt(totalWeight); @@ -3774,18 +3276,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { !globalScene.currentBattle?.isBattleMysteryEncounter() || !globalScene.currentBattle?.mysteryEncounter ) { - globalScene.triggerPokemonFormChange( - this, - SpeciesFormChangeMoveLearnedTrigger, - ); + globalScene.triggerPokemonFormChange(this, SpeciesFormChangeMoveLearnedTrigger); } } public trySelectMove(moveIndex: number, ignorePp?: boolean): boolean { - const move = - this.getMoveset().length > moveIndex - ? this.getMoveset()[moveIndex] - : null; + const move = this.getMoveset().length > moveIndex ? this.getMoveset()[moveIndex] : null; return move?.isUsable(this, ignorePp) ?? false; } @@ -3794,11 +3290,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const otherBattleInfo = globalScene.fieldUI .getAll() .slice(0, 4) - .filter( - ui => - ui instanceof BattleInfo && - (ui as BattleInfo) instanceof PlayerBattleInfo === this.isPlayer(), - ) + .filter(ui => ui instanceof BattleInfo && (ui as BattleInfo) instanceof PlayerBattleInfo === this.isPlayer()) .find(() => true); if (!otherBattleInfo || !this.getFieldIndex()) { globalScene.fieldUI.sendToBack(this.battleInfo); @@ -3806,10 +3298,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } else { globalScene.fieldUI.moveAbove(this.battleInfo, otherBattleInfo); } - this.battleInfo.setX( - this.battleInfo.x + - (this.isPlayer() ? 150 : !this.isBoss() ? -150 : -198), - ); + this.battleInfo.setX(this.battleInfo.x + (this.isPlayer() ? 150 : !this.isBoss() ? -150 : -198)); this.battleInfo.setVisible(true); if (this.isPlayer()) { this.battleInfo.expMaskRect.x += 150; @@ -3825,7 +3314,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { hideInfo(): Promise { return new Promise(resolve => { - if (this.battleInfo && this.battleInfo.visible) { + if (this.battleInfo?.visible) { globalScene.tweens.add({ targets: [this.battleInfo, this.battleInfo.expMaskRect], x: this.isPlayer() ? "+=150" : `-=${!this.isBoss() ? 150 : 246}`, @@ -3836,10 +3325,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.battleInfo.expMaskRect.x -= 150; } this.battleInfo.setVisible(false); - this.battleInfo.setX( - this.battleInfo.x - - (this.isPlayer() ? 150 : !this.isBoss() ? -150 : -198), - ); + this.battleInfo.setX(this.battleInfo.x - (this.isPlayer() ? 150 : !this.isBoss() ? -150 : -198)); resolve(); }, }); @@ -3886,25 +3372,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const maxExpLevel = globalScene.getMaxExpLevel(ignoreLevelCap); const initialExp = this.exp; this.exp += exp; - while ( - this.level < maxExpLevel && - this.exp >= getLevelTotalExp(this.level + 1, this.species.growthRate) - ) { + while (this.level < maxExpLevel && this.exp >= getLevelTotalExp(this.level + 1, this.species.growthRate)) { this.level++; } if (this.level >= maxExpLevel) { - console.log( - initialExp, - this.exp, - getLevelTotalExp(this.level, this.species.growthRate), - ); - this.exp = Math.max( - getLevelTotalExp(this.level, this.species.growthRate), - initialExp, - ); + console.log(initialExp, this.exp, getLevelTotalExp(this.level, this.species.growthRate)); + this.exp = Math.max(getLevelTotalExp(this.level, this.species.growthRate), initialExp); } - this.levelExp = - this.exp - getLevelTotalExp(this.level, this.species.growthRate); + this.levelExp = this.exp - getLevelTotalExp(this.level, this.species.growthRate); } /** @@ -3918,7 +3393,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { getOpponent(targetIndex: number): Pokemon | null { const ret = this.getOpponents()[targetIndex]; - if (ret.summonData) { // TODO: why does this check for summonData and can we remove it? + // TODO: why does this check for summonData and can we remove it? + if (ret.summonData) { return ret; } return null; @@ -3930,11 +3406,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param onField - whether to also check if the pokemon is currently on the field (defaults to true) */ getOpponents(onField = true): Pokemon[] { - return ( - (this.isPlayer() - ? globalScene.getEnemyField() - : globalScene.getPlayerField()) as Pokemon[] - ).filter(p => p.isActive(onField)); + return ((this.isPlayer() ? globalScene.getEnemyField() : globalScene.getPlayerField()) as Pokemon[]).filter(p => + p.isActive(onField), + ); } getOpponentDescriptor(): string { @@ -3942,17 +3416,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (opponents.length === 1) { return opponents[0].name; } - return this.isPlayer() - ? i18next.t("arenaTag:opposingTeam") - : i18next.t("arenaTag:yourTeam"); + return this.isPlayer() ? i18next.t("arenaTag:opposingTeam") : i18next.t("arenaTag:yourTeam"); } getAlly(): Pokemon | undefined { - return ( - this.isPlayer() - ? globalScene.getPlayerField() - : globalScene.getEnemyField() - )[this.getFieldIndex() ? 0 : 1]; + return (this.isPlayer() ? globalScene.getPlayerField() : globalScene.getEnemyField())[this.getFieldIndex() ? 0 : 1]; } /** @@ -3961,9 +3429,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @returns An array of Pokémon on the allied field. */ getAlliedField(): Pokemon[] { - return this instanceof PlayerPokemon - ? globalScene.getPlayerField() - : globalScene.getEnemyField(); + return this instanceof PlayerPokemon ? globalScene.getPlayerField() : globalScene.getEnemyField(); } /** @@ -4006,37 +3472,17 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } if (!ignoreOppAbility) { - applyAbAttrs( - IgnoreOpponentStatStagesAbAttr, - opponent, - null, - simulated, - stat, - ignoreStatStage, - ); + applyAbAttrs(IgnoreOpponentStatStagesAbAttr, opponent, null, simulated, stat, ignoreStatStage); } if (move) { - applyMoveAttrs( - IgnoreOpponentStatStagesAttr, - this, - opponent, - move, - ignoreStatStage, - ); + applyMoveAttrs(IgnoreOpponentStatStagesAttr, this, opponent, move, ignoreStatStage); } } if (!ignoreStatStage.value) { - const statStageMultiplier = new NumberHolder( - Math.max(2, 2 + statStage.value) / Math.max(2, 2 - statStage.value), - ); + const statStageMultiplier = new NumberHolder(Math.max(2, 2 + statStage.value) / Math.max(2, 2 - statStage.value)); if (!ignoreHeldItems) { - globalScene.applyModifiers( - TempStatStageBoosterModifier, - this.isPlayer(), - stat, - statStageMultiplier, - ); + globalScene.applyModifiers(TempStatStageBoosterModifier, this.isPlayer(), stat, statStageMultiplier); } return Math.min(statStageMultiplier.value, 4); } @@ -4060,47 +3506,18 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } const userAccStage = new NumberHolder(this.getStatStage(Stat.ACC)); - const targetEvaStage = new NumberHolder( - target.getStatStage(Stat.EVA), - ); + const targetEvaStage = new NumberHolder(target.getStatStage(Stat.EVA)); const ignoreAccStatStage = new BooleanHolder(false); const ignoreEvaStatStage = new BooleanHolder(false); - applyAbAttrs( - IgnoreOpponentStatStagesAbAttr, - target, - null, - false, - Stat.ACC, - ignoreAccStatStage, - ); - applyAbAttrs( - IgnoreOpponentStatStagesAbAttr, - this, - null, - false, - Stat.EVA, - ignoreEvaStatStage, - ); - applyMoveAttrs( - IgnoreOpponentStatStagesAttr, - this, - target, - sourceMove, - ignoreEvaStatStage, - ); + applyAbAttrs(IgnoreOpponentStatStagesAbAttr, target, null, false, Stat.ACC, ignoreAccStatStage); + applyAbAttrs(IgnoreOpponentStatStagesAbAttr, this, null, false, Stat.EVA, ignoreEvaStatStage); + applyMoveAttrs(IgnoreOpponentStatStagesAttr, this, target, sourceMove, ignoreEvaStatStage); - globalScene.applyModifiers( - TempStatStageBoosterModifier, - this.isPlayer(), - Stat.ACC, - userAccStage, - ); + globalScene.applyModifiers(TempStatStageBoosterModifier, this.isPlayer(), Stat.ACC, userAccStage); - userAccStage.value = ignoreAccStatStage.value - ? 0 - : Math.min(userAccStage.value, 6); + userAccStage.value = ignoreAccStatStage.value ? 0 : Math.min(userAccStage.value, 6); targetEvaStage.value = ignoreEvaStatStage.value ? 0 : targetEvaStage.value; if (target.findTag(t => t instanceof ExposedTag)) { @@ -4115,22 +3532,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { : 3 / (3 + Math.min(targetEvaStage.value - userAccStage.value, 6)); } - applyStatMultiplierAbAttrs( - StatMultiplierAbAttr, - this, - Stat.ACC, - accuracyMultiplier, - false, - sourceMove, - ); + applyStatMultiplierAbAttrs(StatMultiplierAbAttr, this, Stat.ACC, accuracyMultiplier, false, sourceMove); const evasionMultiplier = new NumberHolder(1); - applyStatMultiplierAbAttrs( - StatMultiplierAbAttr, - target, - Stat.EVA, - evasionMultiplier, - ); + applyStatMultiplierAbAttrs(StatMultiplierAbAttr, target, Stat.EVA, evasionMultiplier); const ally = this.getAlly(); if (!isNullOrUndefined(ally)) { @@ -4156,8 +3561,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param simulated - if `true`, suppresses changes to game state during calculation (defaults to `true`). * @returns The move's base damage against this Pokemon when used by the source Pokemon. */ - getBaseDamage( - { + getBaseDamage({ source, move, moveCategory, @@ -4166,8 +3570,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ignoreAllyAbility = false, ignoreSourceAllyAbility = false, isCritical = false, - simulated = true}: getBaseDamageParams - ): number { + simulated = true, + }: getBaseDamageParams): number { const isPhysical = moveCategory === MoveCategory.PHYSICAL; /** A base damage multiplier based on the source's level */ @@ -4216,25 +3620,16 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * The attack's base damage, as determined by the source's level, move power * and Attack stat as well as this Pokemon's Defense stat */ - const baseDamage = - (levelMultiplier * power * sourceAtk.value) / targetDef.value / 50 + 2; + const baseDamage = (levelMultiplier * power * sourceAtk.value) / targetDef.value / 50 + 2; /** Debug message for non-simulated calls (i.e. when damage is actually dealt) */ if (!simulated) { - console.log( - "base damage", - baseDamage, - move.name, - power, - sourceAtk.value, - targetDef.value, - ); + console.log("base damage", baseDamage, move.name, power, sourceAtk.value, targetDef.value); } return baseDamage; } - /** Determine the STAB multiplier for a move used against this pokemon. * * @param source - The attacking {@linkcode Pokemon} @@ -4258,31 +3653,20 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { stabMultiplier.value += 0.5; } - applyMoveAttrs( - CombinedPledgeStabBoostAttr, - source, - this, - move, - stabMultiplier, - ); + applyMoveAttrs(CombinedPledgeStabBoostAttr, source, this, move, stabMultiplier); if (!ignoreSourceAbility) { applyAbAttrs(StabBoostAbAttr, source, null, simulated, stabMultiplier); } - if ( - source.isTerastallized && - sourceTeraType === moveType && - moveType !== PokemonType.STELLAR - ) { + if (source.isTerastallized && sourceTeraType === moveType && moveType !== PokemonType.STELLAR) { stabMultiplier.value += 0.5; } if ( source.isTerastallized && source.getTeraType() === PokemonType.STELLAR && - (!source.stellarTypesBoosted.includes(moveType) || - source.hasSpecies(Species.TERAPAGOS)) + (!source.stellarTypesBoosted.includes(moveType) || source.hasSpecies(Species.TERAPAGOS)) ) { stabMultiplier.value += matchesSourceType ? 0.5 : 0.2; } @@ -4303,31 +3687,22 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param effectiveness If defined, used in place of calculated effectiveness values * @returns The {@linkcode DamageCalculationResult} */ - getAttackDamage( - { - source, - move, - ignoreAbility = false, - ignoreSourceAbility = false, - ignoreAllyAbility = false, - ignoreSourceAllyAbility = false, - isCritical = false, - simulated = true, - effectiveness}: getAttackDamageParams, - ): DamageCalculationResult { + getAttackDamage({ + source, + move, + ignoreAbility = false, + ignoreSourceAbility = false, + ignoreAllyAbility = false, + ignoreSourceAllyAbility = false, + isCritical = false, + simulated = true, + effectiveness, + }: getAttackDamageParams): DamageCalculationResult { const damage = new NumberHolder(0); - const defendingSide = this.isPlayer() - ? ArenaTagSide.PLAYER - : ArenaTagSide.ENEMY; + const defendingSide = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; const variableCategory = new NumberHolder(move.category); - applyMoveAttrs( - VariableMoveCategoryAttr, - source, - this, - move, - variableCategory, - ); + applyMoveAttrs(VariableMoveCategoryAttr, source, this, move, variableCategory); const moveCategory = variableCategory.value as MoveCategory; /** The move's type after type-changing effects are applied */ @@ -4343,13 +3718,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * * Note that the source's abilities are not ignored here */ - const typeMultiplier = effectiveness ?? this.getMoveEffectiveness( - source, - move, - ignoreAbility, - simulated, - cancelled, - ); + const typeMultiplier = + effectiveness ?? this.getMoveEffectiveness(source, move, ignoreAbility, simulated, cancelled); const isPhysical = moveCategory === MoveCategory.PHYSICAL; @@ -4357,21 +3727,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const arenaAttackTypeMultiplier = new NumberHolder( globalScene.arena.getAttackTypeMultiplier(moveType, source.isGrounded()), ); - applyMoveAttrs( - IgnoreWeatherTypeDebuffAttr, - source, - this, - move, - arenaAttackTypeMultiplier, - ); + applyMoveAttrs(IgnoreWeatherTypeDebuffAttr, source, this, move, arenaAttackTypeMultiplier); const isTypeImmune = typeMultiplier * arenaAttackTypeMultiplier.value === 0; if (cancelled.value || isTypeImmune) { return { cancelled: cancelled.value, - result: - move.id === Moves.SHEER_COLD ? HitResult.IMMUNE : HitResult.NO_EFFECT, + result: move.id === Moves.SHEER_COLD ? HitResult.IMMUNE : HitResult.NO_EFFECT, damage: 0, }; } @@ -4389,9 +3752,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { null, multiLensMultiplier, ); - fixedDamage.value = toDmgValue( - fixedDamage.value * multiLensMultiplier.value, - ); + fixedDamage.value = toDmgValue(fixedDamage.value * multiLensMultiplier.value); return { cancelled: false, @@ -4468,10 +3829,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * A multiplier for random damage spread in the range [0.85, 1] * This is always 1 for simulated calls. */ - const randomMultiplier = simulated - ? 1 - : this.randBattleSeedIntRange(85, 100) / 100; - + const randomMultiplier = simulated ? 1 : this.randBattleSeedIntRange(85, 100) / 100; /** A damage multiplier for when the attack is of the attacker's type and/or Tera type. */ const stabMultiplier = this.calculateStabMultiplier(source, move, ignoreSourceAbility, simulated); @@ -4486,12 +3844,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ) { const burnDamageReductionCancelled = new BooleanHolder(false); if (!ignoreSourceAbility) { - applyAbAttrs( - BypassBurnDamageReductionAbAttr, - source, - burnDamageReductionCancelled, - simulated, - ); + applyAbAttrs(BypassBurnDamageReductionAbAttr, source, burnDamageReductionCancelled, simulated); } if (!burnDamageReductionCancelled.value) { burnMultiplier = 0.5; @@ -4504,13 +3857,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // Critical hits should bypass screens if (!isCritical) { globalScene.arena.applyTagsForSide( - WeakenMoveScreenTag, - defendingSide, - simulated, - source, - moveCategory, - screenMultiplier, - ); + WeakenMoveScreenTag, + defendingSide, + simulated, + source, + moveCategory, + screenMultiplier, + ); } /** @@ -4555,14 +3908,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** Doubles damage if the attacker has Tinted Lens and is using a resisted move */ if (!ignoreSourceAbility) { - applyPreAttackAbAttrs( - DamageBoostAbAttr, - source, - this, - move, - simulated, - damage, - ); + applyPreAttackAbAttrs(DamageBoostAbAttr, source, this, move, simulated, damage); } /** Apply the enemy's Damage and Resistance tokens */ @@ -4575,28 +3921,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** Apply this Pokemon's post-calc defensive modifiers (e.g. Fur Coat) */ if (!ignoreAbility) { - applyPreDefendAbAttrs( - ReceivedMoveDamageMultiplierAbAttr, - this, - source, - move, - cancelled, - simulated, - damage, - ); + applyPreDefendAbAttrs(ReceivedMoveDamageMultiplierAbAttr, this, source, move, cancelled, simulated, damage); const ally = this.getAlly(); /** Additionally apply friend guard damage reduction if ally has it. */ if (globalScene.currentBattle.double && !isNullOrUndefined(ally) && ally.isActive(true)) { - applyPreDefendAbAttrs( - AlliedFieldDamageReductionAbAttr, - ally, - source, - move, - cancelled, - simulated, - damage, - ); + applyPreDefendAbAttrs(AlliedFieldDamageReductionAbAttr, ally, source, move, cancelled, simulated, damage); } } @@ -4604,15 +3934,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { applyMoveAttrs(ModifiedDamageAttr, source, this, move, damage); if (this.isFullHp() && !ignoreAbility) { - applyPreDefendAbAttrs( - PreDefendFullHpEndureAbAttr, - this, - source, - move, - cancelled, - false, - damage, - ); + applyPreDefendAbAttrs(PreDefendFullHpEndureAbAttr, this, source, move, cancelled, false, damage); } // debug message for when damage is applied (i.e. not simulated) @@ -4641,8 +3963,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param move - The {@linkcode Move} being used * @param simulated - If `true`, suppresses changes to game state during calculation (defaults to `true`) * @returns whether the move critically hits the pokemon - */ - getCriticalHitResult(source: Pokemon, move: Move, simulated: boolean = true): boolean { + */ + getCriticalHitResult(source: Pokemon, move: Move, simulated = true): boolean { const defendingSide = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; const noCritTag = globalScene.arena.getTagOnSide(NoCritTag, defendingSide); if (noCritTag || Overrides.NEVER_CRIT_OVERRIDE || move.hasAttr(FixedDamageAttr)) { @@ -4656,16 +3978,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { applyMoveAttrs(CritOnlyAttr, source, this, move, isCritical); applyAbAttrs(ConditionalCritAbAttr, source, null, simulated, isCritical, this, move); if (!isCritical.value) { - const critChance = [24, 8, 2, 1][ - Math.max(0, Math.min(this.getCritStage(source, move), 3)) - ]; + const critChance = [24, 8, 2, 1][Math.max(0, Math.min(this.getCritStage(source, move), 3))]; isCritical.value = critChance === 1 || !globalScene.randBattleSeedInt(critChance); } applyAbAttrs(BlockCritAbAttr, this, null, simulated, isCritical); return isCritical.value; - } /** @@ -4676,12 +3995,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param ignoreFaintPhas flag on whether to add FaintPhase if pokemon after applying damage faints * @returns integer representing damage dealt */ - damage( - damage: number, - _ignoreSegments = false, - preventEndure = false, - ignoreFaintPhase = false, - ): number { + damage(damage: number, _ignoreSegments = false, preventEndure = false, ignoreFaintPhase = false): number { if (this.isFainted()) { return 0; } @@ -4697,12 +4011,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { surviveDamage.value = this.lapseTag(BattlerTagType.ENDURE_TOKEN); } if (!surviveDamage.value) { - globalScene.applyModifiers( - SurviveDamageModifier, - this.isPlayer(), - this, - surviveDamage, - ); + globalScene.applyModifiers(SurviveDamageModifier, this.isPlayer(), this, surviveDamage); } if (surviveDamage.value) { damage = this.hp - 1; @@ -4720,9 +4029,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * Once the MoveEffectPhase is over (and calls it's .end() function, shiftPhase() will reset the PhaseQueueSplice via clearPhaseQueueSplice() ) */ globalScene.setPhaseQueueSplice(); - globalScene.unshiftPhase( - new FaintPhase(this.getBattlerIndex(), preventEndure), - ); + globalScene.unshiftPhase(new FaintPhase(this.getBattlerIndex(), preventEndure)); this.destroySubstitute(); this.lapseTag(BattlerTagType.COMMANDED); } @@ -4741,39 +4048,29 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param ignoreFaintPhase boolean to ignore adding a FaintPhase, passsed to damage() * @returns integer of damage done */ - damageAndUpdate(damage: number, + damageAndUpdate( + damage: number, { result = HitResult.EFFECTIVE, isCritical = false, ignoreSegments = false, ignoreFaintPhase = false, source = undefined, - }: - { - result?: DamageResult, - isCritical?: boolean, - ignoreSegments?: boolean, - ignoreFaintPhase?: boolean, - source?: Pokemon, - } = {} + }: { + result?: DamageResult; + isCritical?: boolean; + ignoreSegments?: boolean; + ignoreFaintPhase?: boolean; + source?: Pokemon; + } = {}, ): number { - const isIndirectDamage = [ HitResult.INDIRECT, HitResult.INDIRECT_KO ].includes(result); - const damagePhase = new DamageAnimPhase( - this.getBattlerIndex(), - damage, - result as DamageResult, - isCritical - ); + const isIndirectDamage = [HitResult.INDIRECT, HitResult.INDIRECT_KO].includes(result); + const damagePhase = new DamageAnimPhase(this.getBattlerIndex(), damage, result as DamageResult, isCritical); globalScene.unshiftPhase(damagePhase); if (this.switchOutStatus && source) { damage = 0; } - damage = this.damage( - damage, - ignoreSegments, - isIndirectDamage, - ignoreFaintPhase, - ); + damage = this.damage(damage, ignoreSegments, isIndirectDamage, ignoreFaintPhase); // Ensure the battle-info bar's HP is updated, though only if the battle info is visible // TODO: When battle-info UI is refactored, make this only update the HP bar if (this.battleInfo.visible) { @@ -4786,15 +4083,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * Multi-hits are handled in move-effect-phase.ts for PostDamageAbAttr */ if (!source || source.turnData.hitCount <= 1) { - applyPostDamageAbAttrs( - PostDamageAbAttr, - this, - damage, - this.hasPassive(), - false, - [], - source, - ); + applyPostDamageAbAttrs(PostDamageAbAttr, this, damage, this.hasPassive(), false, [], source); } return damage; } @@ -4810,13 +4099,28 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } isMax(): boolean { - const maxForms = [ SpeciesFormKey.GIGANTAMAX, SpeciesFormKey.GIGANTAMAX_RAPID, SpeciesFormKey.GIGANTAMAX_SINGLE, SpeciesFormKey.ETERNAMAX ] as string[]; - return maxForms.includes(this.getFormKey()) || (!!this.getFusionFormKey() && maxForms.includes(this.getFusionFormKey()!)); + const maxForms = [ + SpeciesFormKey.GIGANTAMAX, + SpeciesFormKey.GIGANTAMAX_RAPID, + SpeciesFormKey.GIGANTAMAX_SINGLE, + SpeciesFormKey.ETERNAMAX, + ] as string[]; + return ( + maxForms.includes(this.getFormKey()) || (!!this.getFusionFormKey() && maxForms.includes(this.getFusionFormKey()!)) + ); } isMega(): boolean { - const megaForms = [ SpeciesFormKey.MEGA, SpeciesFormKey.MEGA_X, SpeciesFormKey.MEGA_Y, SpeciesFormKey.PRIMAL ] as string[]; - return megaForms.includes(this.getFormKey()) || (!!this.getFusionFormKey() && megaForms.includes(this.getFusionFormKey()!)); + const megaForms = [ + SpeciesFormKey.MEGA, + SpeciesFormKey.MEGA_X, + SpeciesFormKey.MEGA_Y, + SpeciesFormKey.PRIMAL, + ] as string[]; + return ( + megaForms.includes(this.getFormKey()) || + (!!this.getFusionFormKey() && megaForms.includes(this.getFusionFormKey()!)) + ); } canAddTag(tagType: BattlerTagType): boolean { @@ -4827,35 +4131,17 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const stubTag = new BattlerTag(tagType, 0, 0); const cancelled = new BooleanHolder(false); - applyPreApplyBattlerTagAbAttrs( - BattlerTagImmunityAbAttr, - this, - stubTag, - cancelled, - true, - ); + applyPreApplyBattlerTagAbAttrs(BattlerTagImmunityAbAttr, this, stubTag, cancelled, true); const userField = this.getAlliedField(); userField.forEach(pokemon => - applyPreApplyBattlerTagAbAttrs( - UserFieldBattlerTagImmunityAbAttr, - pokemon, - stubTag, - cancelled, - true, - this, - ), + applyPreApplyBattlerTagAbAttrs(UserFieldBattlerTagImmunityAbAttr, pokemon, stubTag, cancelled, true, this), ); return !cancelled.value; } - addTag( - tagType: BattlerTagType, - turnCount = 0, - sourceMove?: Moves, - sourceId?: number, - ): boolean { + addTag(tagType: BattlerTagType, turnCount = 0, sourceMove?: Moves, sourceId?: number): boolean { const existingTag = this.getTag(tagType); if (existingTag) { existingTag.onOverlap(this); @@ -4865,25 +4151,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const newTag = getBattlerTag(tagType, turnCount, sourceMove!, sourceId!); // TODO: are the bangs correct? const cancelled = new BooleanHolder(false); - applyPreApplyBattlerTagAbAttrs( - BattlerTagImmunityAbAttr, - this, - newTag, - cancelled, - ); + applyPreApplyBattlerTagAbAttrs(BattlerTagImmunityAbAttr, this, newTag, cancelled); if (cancelled.value) { return false; } for (const pokemon of this.getAlliedField()) { - applyPreApplyBattlerTagAbAttrs( - UserFieldBattlerTagImmunityAbAttr, - pokemon, - newTag, - cancelled, - false, - this - ); + applyPreApplyBattlerTagAbAttrs(UserFieldBattlerTagImmunityAbAttr, pokemon, newTag, cancelled, false, this); if (cancelled.value) { return false; } @@ -4931,14 +4205,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const tags = this.summonData.tags; const tag = tags.find(t => t.tagType === tagType); if (!tag) { - return false + return false; } if (!tag.lapse(this, BattlerTagLapseType.CUSTOM)) { tag.onRemove(this); tags.splice(tags.indexOf(tag), 1); } - return true + return true; } /** @@ -4952,8 +4226,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { .filter( t => lapseType === BattlerTagLapseType.FAINT || - (t.lapseTypes.some(lType => lType === lapseType) && - !t.lapse(this, lapseType)), + (t.lapseTypes.some(lType => lType === lapseType) && !t.lapse(this, lapseType)), ) .forEach(t => { t.onRemove(this); @@ -4997,7 +4270,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (t.sourceId === sourceId) { t.sourceId = newSourceId; } - }) + }); } /** @@ -5057,21 +4330,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * * @see {@linkcode MoveRestrictionBattlerTag} */ - isMoveTargetRestricted( - moveId: Moves, - user: Pokemon, - target: Pokemon, - ): boolean { - for (const tag of this.findTags( - t => t instanceof MoveRestrictionBattlerTag, - )) { - if ( - (tag as MoveRestrictionBattlerTag).isMoveTargetRestricted( - moveId, - user, - target, - ) - ) { + isMoveTargetRestricted(moveId: Moves, user: Pokemon, target: Pokemon): boolean { + for (const tag of this.findTags(t => t instanceof MoveRestrictionBattlerTag)) { + if ((tag as MoveRestrictionBattlerTag).isMoveTargetRestricted(moveId, user, target)) { return (tag as MoveRestrictionBattlerTag) !== null; } } @@ -5086,26 +4347,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param target - {@linkcode Pokemon} the target of the move, optional and used when the target is a factor in the move's restricted status * @returns The first tag on this Pokemon that restricts the move, or `null` if the move is not restricted. */ - getRestrictingTag( - moveId: Moves, - user?: Pokemon, - target?: Pokemon, - ): MoveRestrictionBattlerTag | null { - for (const tag of this.findTags( - t => t instanceof MoveRestrictionBattlerTag, - )) { + getRestrictingTag(moveId: Moves, user?: Pokemon, target?: Pokemon): MoveRestrictionBattlerTag | null { + for (const tag of this.findTags(t => t instanceof MoveRestrictionBattlerTag)) { if ((tag as MoveRestrictionBattlerTag).isMoveRestricted(moveId, user)) { return tag as MoveRestrictionBattlerTag; } - if ( - user && - target && - (tag as MoveRestrictionBattlerTag).isMoveTargetRestricted( - moveId, - user, - target, - ) - ) { + if (user && target && (tag as MoveRestrictionBattlerTag).isMoveTargetRestricted(moveId, user, target)) { return tag as MoveRestrictionBattlerTag; } } @@ -5135,9 +4382,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { getLastXMoves(moveCount = 1): TurnMove[] { const moveHistory = this.getMoveHistory(); if (moveCount >= 0) { - return moveHistory - .slice(Math.max(moveHistory.length - moveCount, 0)) - .reverse(); + return moveHistory.slice(Math.max(moveHistory.length - moveCount, 0)).reverse(); } return moveHistory.slice(0).reverse(); } @@ -5163,39 +4408,24 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.loadAssets().then(() => { this.calculateStats(); globalScene.updateModifiers(this.isPlayer(), true); - Promise.all([this.updateInfo(), globalScene.updateFieldScale()]).then( - () => resolve(), - ); + Promise.all([this.updateInfo(), globalScene.updateFieldScale()]).then(() => resolve()); }); }); } - cry( - soundConfig?: Phaser.Types.Sound.SoundConfig, - sceneOverride?: BattleScene, - ): AnySound { + cry(soundConfig?: Phaser.Types.Sound.SoundConfig, sceneOverride?: BattleScene): AnySound { const scene = sceneOverride ?? globalScene; // TODO: is `sceneOverride` needed? const cry = this.getSpeciesForm(undefined, true).cry(soundConfig); let duration = cry.totalDuration * 1000; - if ( - this.fusionSpecies && - this.getSpeciesForm(undefined, true) !== this.getFusionSpeciesForm(undefined, true) - ) { + if (this.fusionSpecies && this.getSpeciesForm(undefined, true) !== this.getFusionSpeciesForm(undefined, true)) { let fusionCry = this.getFusionSpeciesForm(undefined, true).cry(soundConfig, true); duration = Math.min(duration, fusionCry.totalDuration * 1000); fusionCry.destroy(); scene.time.delayedCall(fixedInt(Math.ceil(duration * 0.4)), () => { try { - SoundFade.fadeOut( - scene, - cry, - fixedInt(Math.ceil(duration * 0.2)), - ); + SoundFade.fadeOut(scene, cry, fixedInt(Math.ceil(duration * 0.2))); fusionCry = this.getFusionSpeciesForm(undefined, true).cry( - Object.assign( - { seek: Math.max(fusionCry.totalDuration * 0.4, 0) }, - soundConfig, - ), + Object.assign({ seek: Math.max(fusionCry.totalDuration * 0.4, 0) }, soundConfig), ); SoundFade.fadeIn( scene, @@ -5215,10 +4445,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // biome-ignore lint: there are a ton of issues.. faintCry(callback: Function): void { - if ( - this.fusionSpecies && - this.getSpeciesForm() !== this.getFusionSpeciesForm() - ) { + if (this.fusionSpecies && this.getSpeciesForm() !== this.getFusionSpeciesForm()) { return this.fusionFaintCry(callback); } @@ -5238,32 +4465,31 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { sprite.anims.pause(); tintSprite?.anims.pause(); - let faintCryTimer: Phaser.Time.TimerEvent | null = - globalScene.time.addEvent({ - delay: fixedInt(delay), - repeat: -1, - callback: () => { - frameThreshold = sprite.anims.msPerFrame / rate; - frameProgress += delay; - while (frameProgress > frameThreshold) { - if (sprite.anims.duration) { - sprite.anims.nextFrame(); - tintSprite?.anims.nextFrame(); - } - frameProgress -= frameThreshold; + let faintCryTimer: Phaser.Time.TimerEvent | null = globalScene.time.addEvent({ + delay: fixedInt(delay), + repeat: -1, + callback: () => { + frameThreshold = sprite.anims.msPerFrame / rate; + frameProgress += delay; + while (frameProgress > frameThreshold) { + if (sprite.anims.duration) { + sprite.anims.nextFrame(); + tintSprite?.anims.nextFrame(); } - if (cry && !cry.pendingRemove) { - rate *= 0.99; - cry.setRate(rate); - } else { - faintCryTimer?.destroy(); - faintCryTimer = null; - if (callback) { - callback(); - } + frameProgress -= frameThreshold; + } + if (cry && !cry.pendingRemove) { + rate *= 0.99; + cry.setRate(rate); + } else { + faintCryTimer?.destroy(); + faintCryTimer = null; + if (callback) { + callback(); } - }, - }); + } + }, + }); // Failsafe globalScene.time.delayedCall(fixedInt(3000), () => { @@ -5323,61 +4549,53 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { sprite.anims.pause(); tintSprite?.anims.pause(); - let faintCryTimer: Phaser.Time.TimerEvent | null = - globalScene.time.addEvent({ - delay: fixedInt(delay), - repeat: -1, - callback: () => { - ++i; - frameThreshold = sprite.anims.msPerFrame / rate; - frameProgress += delay; - while (frameProgress > frameThreshold) { - if (sprite.anims.duration) { - sprite.anims.nextFrame(); - tintSprite?.anims.nextFrame(); - } - frameProgress -= frameThreshold; + let faintCryTimer: Phaser.Time.TimerEvent | null = globalScene.time.addEvent({ + delay: fixedInt(delay), + repeat: -1, + callback: () => { + ++i; + frameThreshold = sprite.anims.msPerFrame / rate; + frameProgress += delay; + while (frameProgress > frameThreshold) { + if (sprite.anims.duration) { + sprite.anims.nextFrame(); + tintSprite?.anims.nextFrame(); } - if (i === transitionIndex && fusionCryKey) { - SoundFade.fadeOut( - globalScene, - cry, - fixedInt(Math.ceil((duration / rate) * 0.2)), - ); - fusionCry = globalScene.playSound( - fusionCryKey, - Object.assign({ - seek: Math.max(fusionCry.totalDuration * 0.4, 0), - rate: rate, - }), - ); - SoundFade.fadeIn( - globalScene, - fusionCry, - fixedInt(Math.ceil((duration / rate) * 0.2)), - globalScene.masterVolume * globalScene.fieldVolume, - 0, - ); + frameProgress -= frameThreshold; + } + if (i === transitionIndex && fusionCryKey) { + SoundFade.fadeOut(globalScene, cry, fixedInt(Math.ceil((duration / rate) * 0.2))); + fusionCry = globalScene.playSound( + fusionCryKey, + Object.assign({ + seek: Math.max(fusionCry.totalDuration * 0.4, 0), + rate: rate, + }), + ); + SoundFade.fadeIn( + globalScene, + fusionCry, + fixedInt(Math.ceil((duration / rate) * 0.2)), + globalScene.masterVolume * globalScene.fieldVolume, + 0, + ); + } + rate *= 0.99; + if (cry && !cry.pendingRemove) { + cry.setRate(rate); + } + if (fusionCry && !fusionCry.pendingRemove) { + fusionCry.setRate(rate); + } + if ((!cry || cry.pendingRemove) && (!fusionCry || fusionCry.pendingRemove)) { + faintCryTimer?.destroy(); + faintCryTimer = null; + if (callback) { + callback(); } - rate *= 0.99; - if (cry && !cry.pendingRemove) { - cry.setRate(rate); - } - if (fusionCry && !fusionCry.pendingRemove) { - fusionCry.setRate(rate); - } - if ( - (!cry || cry.pendingRemove) && - (!fusionCry || fusionCry.pendingRemove) - ) { - faintCryTimer?.destroy(); - faintCryTimer = null; - if (callback) { - callback(); - } - } - }, - }); + } + }, + }); // Failsafe globalScene.time.delayedCall(fixedInt(3000), () => { @@ -5400,8 +4618,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { isOppositeGender(pokemon: Pokemon): boolean { return ( this.gender !== Gender.GENDERLESS && - pokemon.gender === - (this.gender === Gender.MALE ? Gender.FEMALE : Gender.MALE) + pokemon.gender === (this.gender === Gender.MALE ? Gender.FEMALE : Gender.MALE) ); } @@ -5409,11 +4626,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (!effect || quiet) { return; } - const message = effect && this.status?.effect === effect - ? getStatusEffectOverlapText(effect ?? StatusEffect.NONE, getPokemonNameWithAffix(this)) - : i18next.t("abilityTriggers:moveImmunity", { - pokemonNameWithAffix: getPokemonNameWithAffix(this), - }); + const message = + effect && this.status?.effect === effect + ? getStatusEffectOverlapText(effect ?? StatusEffect.NONE, getPokemonNameWithAffix(this)) + : i18next.t("abilityTriggers:moveImmunity", { + pokemonNameWithAffix: getPokemonNameWithAffix(this), + }); globalScene.queueMessage(message); } @@ -5438,11 +4656,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.queueImmuneMessage(quiet, effect); return false; } - if ( - this.isGrounded() && - !ignoreField && - globalScene.arena.terrain?.terrainType === TerrainType.MISTY - ) { + if (this.isGrounded() && !ignoreField && globalScene.arena.terrain?.terrainType === TerrainType.MISTY) { this.queueImmuneMessage(quiet, effect); return false; } @@ -5452,7 +4666,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { switch (effect) { case StatusEffect.POISON: - case StatusEffect.TOXIC: + case StatusEffect.TOXIC: { // Check if the Pokemon is immune to Poison/Toxic or if the source pokemon is canceling the immunity const poisonImmunity = types.map(defType => { // Check if the Pokemon is not immune to Poison/Toxic @@ -5463,20 +4677,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // Check if the source Pokemon has an ability that cancels the Poison/Toxic immunity const cancelImmunity = new BooleanHolder(false); if (sourcePokemon) { - applyAbAttrs( - IgnoreTypeStatusEffectImmunityAbAttr, - sourcePokemon, - cancelImmunity, - false, - effect, - defType, - ); + applyAbAttrs(IgnoreTypeStatusEffectImmunityAbAttr, sourcePokemon, cancelImmunity, false, effect, defType); if (cancelImmunity.value) { return false; } } - return true; + return true; }); if (this.isOfType(PokemonType.POISON) || this.isOfType(PokemonType.STEEL)) { @@ -5486,6 +4693,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } break; + } case StatusEffect.PARALYSIS: if (this.isOfType(PokemonType.ELECTRIC)) { this.queueImmuneMessage(quiet, effect); @@ -5493,10 +4701,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } break; case StatusEffect.SLEEP: - if ( - this.isGrounded() && - globalScene.arena.terrain?.terrainType === TerrainType.ELECTRIC - ) { + if (this.isGrounded() && globalScene.arena.terrain?.terrainType === TerrainType.ELECTRIC) { this.queueImmuneMessage(quiet, effect); return false; } @@ -5506,9 +4711,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.isOfType(PokemonType.ICE) || (!ignoreField && globalScene?.arena?.weather?.weatherType && - [WeatherType.SUNNY, WeatherType.HARSH_SUN].includes( - globalScene.arena.weather.weatherType, - )) + [WeatherType.SUNNY, WeatherType.HARSH_SUN].includes(globalScene.arena.weather.weatherType)) ) { this.queueImmuneMessage(quiet, effect); return false; @@ -5523,13 +4726,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } const cancelled = new BooleanHolder(false); - applyPreSetStatusAbAttrs( - StatusEffectImmunityAbAttr, - this, - effect, - cancelled, - quiet, - ); + applyPreSetStatusAbAttrs(StatusEffectImmunityAbAttr, this, effect, cancelled, quiet); if (cancelled.value) { return false; } @@ -5540,8 +4737,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { pokemon, effect, cancelled, - quiet, this, sourcePokemon, - ) + quiet, + this, + sourcePokemon, + ); if (cancelled.value) { break; } @@ -5551,15 +4750,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return false; } - if ( - sourcePokemon && - sourcePokemon !== this && - this.isSafeguarded(sourcePokemon) - ) { - if(!quiet){ - globalScene.queueMessage( - i18next.t("moveTriggers:safeguard", { targetName: getPokemonNameWithAffix(this) - })); + if (sourcePokemon && sourcePokemon !== this && this.isSafeguarded(sourcePokemon)) { + if (!quiet) { + globalScene.queueMessage(i18next.t("moveTriggers:safeguard", { targetName: getPokemonNameWithAffix(this) })); } return false; } @@ -5600,13 +4793,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.resetStatus(false); } globalScene.unshiftPhase( - new ObtainStatusEffectPhase( - this.getBattlerIndex(), - effect, - turnsRemaining, - sourceText, - sourcePokemon, - ), + new ObtainStatusEffectPhase(this.getBattlerIndex(), effect, turnsRemaining, sourceText, sourcePokemon), ); return true; } @@ -5692,9 +4879,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @returns `true` if this Pokemon is protected by Safeguard; `false` otherwise. */ isSafeguarded(attacker: Pokemon): boolean { - const defendingSide = this.isPlayer() - ? ArenaTagSide.PLAYER - : ArenaTagSide.ENEMY; + const defendingSide = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; if (globalScene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, defendingSide)) { const bypassed = new BooleanHolder(false); if (attacker) { @@ -5712,18 +4897,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { public fieldSetup(resetSummonData?: boolean): void { this.setSwitchOutStatus(false); if (globalScene) { - globalScene.triggerPokemonFormChange( - this, - SpeciesFormChangePostMoveTrigger, - true, - ); + globalScene.triggerPokemonFormChange(this, SpeciesFormChangePostMoveTrigger, true); } // If this Pokemon has a Substitute when loading in, play an animation to add its sprite if (this.getTag(SubstituteTag)) { - globalScene.triggerPokemonBattleAnim( - this, - PokemonAnimType.SUBSTITUTE_ADD, - ); + globalScene.triggerPokemonBattleAnim(this, PokemonAnimType.SUBSTITUTE_ADD); this.getTag(SubstituteTag)!.sourceInFocus = false; } @@ -5753,7 +4931,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } this.summonData = new PokemonSummonData(); this.tempSummonData = new PokemonTempSummonData(); - this.summonData.illusion = illusion + this.summonData.illusion = illusion; this.updateInfo(); } @@ -5761,7 +4939,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * Reset a {@linkcode Pokemon}'s per-battle {@linkcode PokemonBattleData | battleData}, * as well as any transient {@linkcode PokemonWaveData | waveData} for the current wave. * Should be called once per arena transition (new biome/trainer battle/Mystery Encounter). - */ + */ resetBattleAndWaveData(): void { this.battleData = new PokemonBattleData(); this.resetWaveData(); @@ -5782,10 +4960,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.stellarTypesBoosted = []; if (wasTerastallized) { this.updateSpritePipelineData(); - globalScene.triggerPokemonFormChange( - this, - SpeciesFormChangeLapseTeraTrigger, - ); + globalScene.triggerPokemonFormChange(this, SpeciesFormChangeLapseTeraTrigger); } } @@ -5803,18 +4978,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { try { this.getSprite().play(this.getBattleSpriteKey()); } catch (err: unknown) { - console.error( - `Failed to play animation for ${this.getBattleSpriteKey()}`, - err, - ); + console.error(`Failed to play animation for ${this.getBattleSpriteKey()}`, err); } try { this.getTintSprite()?.play(this.getBattleSpriteKey()); } catch (err: unknown) { - console.error( - `Failed to play animation for ${this.getBattleSpriteKey()}`, - err, - ); + console.error(`Failed to play animation for ${this.getBattleSpriteKey()}`, err); } } @@ -5865,9 +5034,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.x * this.parentContainer.scale + this.parentContainer.x, this.y * this.parentContainer.scale + this.parentContainer.y, ); - this.maskSprite?.setScale( - this.getSpriteScale() * this.parentContainer.scale, - ); + this.maskSprite?.setScale(this.getSpriteScale() * this.parentContainer.scale); this.maskEnabled = true; } } @@ -5893,12 +5060,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { [this.getSprite(), this.getTintSprite()] .filter(s => !!s) .map(s => { - s.pipelineData[ - `spriteColors${ignoreOveride && this.summonData.speciesForm ? "Base" : ""}` - ] = []; - s.pipelineData[ - `fusionSpriteColors${ignoreOveride && this.summonData.speciesForm ? "Base" : ""}` - ] = []; + s.pipelineData[`spriteColors${ignoreOveride && this.summonData.speciesForm ? "Base" : ""}`] = []; + s.pipelineData[`fusionSpriteColors${ignoreOveride && this.summonData.speciesForm ? "Base" : ""}`] = []; }); return; } @@ -5913,12 +5076,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.variant, ); const backSpriteKey = speciesForm - .getSpriteKey( - this.getGender(ignoreOveride) === Gender.FEMALE, - speciesForm.formIndex, - this.shiny, - this.variant, - ) + .getSpriteKey(this.getGender(ignoreOveride) === Gender.FEMALE, speciesForm.formIndex, this.shiny, this.variant) .replace("pkmn__", "pkmn__back__"); const fusionSpriteKey = fusionSpeciesForm.getSpriteKey( this.getFusionGender(ignoreOveride) === Gender.FEMALE, @@ -5961,40 +5119,28 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const spriteColors: number[][] = []; const pixelData: Uint8ClampedArray[] = []; - [canvas, backCanvas, fusionCanvas, fusionBackCanvas].forEach( - (canv: HTMLCanvasElement, c: number) => { - const context = canv.getContext("2d"); - const frame = [ - sourceFrame, - sourceBackFrame, - fusionFrame, - fusionBackFrame, - ][c]; - canv.width = frame.width; - canv.height = frame.height; + [canvas, backCanvas, fusionCanvas, fusionBackCanvas].forEach((canv: HTMLCanvasElement, c: number) => { + const context = canv.getContext("2d"); + const frame = [sourceFrame, sourceBackFrame, fusionFrame, fusionBackFrame][c]; + canv.width = frame.width; + canv.height = frame.height; - if (context) { - context.drawImage( - [sourceImage, sourceBackImage, fusionImage, fusionBackImage][c], - frame.cutX, - frame.cutY, - frame.width, - frame.height, - 0, - 0, - frame.width, - frame.height, - ); - const imageData = context.getImageData( - frame.cutX, - frame.cutY, - frame.width, - frame.height, - ); - pixelData.push(imageData.data); - } - }, - ); + if (context) { + context.drawImage( + [sourceImage, sourceBackImage, fusionImage, fusionBackImage][c], + frame.cutX, + frame.cutY, + frame.width, + frame.height, + 0, + 0, + frame.width, + frame.height, + ); + const imageData = context.getImageData(frame.cutX, frame.cutY, frame.width, frame.height); + pixelData.push(imageData.data); + } + }); for (let f = 0; f < 2; f++) { const variantColors = variantColorCache[!f ? spriteKey : backSpriteKey]; @@ -6003,9 +5149,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { Object.keys(variantColors[this.variant]).forEach(k => { variantColorSet.set( rgbaToInt(Array.from(Object.values(rgbHexToRgba(k)))), - Array.from( - Object.values(rgbHexToRgba(variantColors[this.variant][k])), - ), + Array.from(Object.values(rgbHexToRgba(variantColors[this.variant][k]))), ); }); } @@ -6035,9 +5179,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const pixelColors: number[] = []; for (let f = 0; f < 2; f++) { for (let i = 0; i < pixelData[f].length; i += 4) { - const total = pixelData[f] - .slice(i, i + 3) - .reduce((total: number, value: number) => total + value, 0); + const total = pixelData[f].slice(i, i + 3).reduce((total: number, value: number) => total + value, 0); if (!total) { continue; } @@ -6054,29 +5196,18 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const fusionPixelColors: number[] = []; for (let f = 0; f < 2; f++) { - const variantColors = - variantColorCache[!f ? fusionSpriteKey : fusionBackSpriteKey]; + const variantColors = variantColorCache[!f ? fusionSpriteKey : fusionBackSpriteKey]; const variantColorSet = new Map(); - if ( - this.fusionShiny && - variantColors && - variantColors[this.fusionVariant] - ) { + if (this.fusionShiny && variantColors && variantColors[this.fusionVariant]) { for (const k of Object.keys(variantColors[this.fusionVariant])) { variantColorSet.set( rgbaToInt(Array.from(Object.values(rgbHexToRgba(k)))), - Array.from( - Object.values( - rgbHexToRgba(variantColors[this.fusionVariant][k]), - ), - ), + Array.from(Object.values(rgbHexToRgba(variantColors[this.fusionVariant][k]))), ); } } for (let i = 0; i < pixelData[2 + f].length; i += 4) { - const total = pixelData[2 + f] - .slice(i, i + 3) - .reduce((total: number, value: number) => total + value, 0); + const total = pixelData[2 + f].slice(i, i + 3).reduce((total: number, value: number) => total + value, 0); if (!total) { continue; } @@ -6124,101 +5255,94 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { paletteColors = paletteColors!; // erroneously tell TS compiler that paletteColors is defined! fusionPaletteColors = fusionPaletteColors!; // mischievously misinform TS compiler that fusionPaletteColors is defined! - const [palette, fusionPalette] = [paletteColors, fusionPaletteColors].map( - paletteColors => { - let keys = Array.from(paletteColors.keys()).sort( - (a: number, b: number) => - paletteColors.get(a)! < paletteColors.get(b)! ? 1 : -1, - ); - let rgbaColors: Map; - let hsvColors: Map; + const [palette, fusionPalette] = [paletteColors, fusionPaletteColors].map(paletteColors => { + let keys = Array.from(paletteColors.keys()).sort((a: number, b: number) => + paletteColors.get(a)! < paletteColors.get(b)! ? 1 : -1, + ); + let rgbaColors: Map; + let hsvColors: Map; - const mappedColors = new Map(); + const mappedColors = new Map(); - do { - mappedColors.clear(); + do { + mappedColors.clear(); - rgbaColors = keys.reduce((map: Map, k: number) => { - map.set(k, Object.values(rgbaFromArgb(k))); - return map; - }, new Map()); - hsvColors = Array.from(rgbaColors.keys()).reduce( - (map: Map, k: number) => { - const rgb = rgbaColors.get(k)!.slice(0, 3); - map.set(k, rgbToHsv(rgb[0], rgb[1], rgb[2])); - return map; - }, - new Map(), - ); + rgbaColors = keys.reduce((map: Map, k: number) => { + map.set(k, Object.values(rgbaFromArgb(k))); + return map; + }, new Map()); + hsvColors = Array.from(rgbaColors.keys()).reduce((map: Map, k: number) => { + const rgb = rgbaColors.get(k)!.slice(0, 3); + map.set(k, rgbToHsv(rgb[0], rgb[1], rgb[2])); + return map; + }, new Map()); - for (let c = keys.length - 1; c >= 0; c--) { - const hsv = hsvColors.get(keys[c])!; - for (let c2 = 0; c2 < c; c2++) { - const hsv2 = hsvColors.get(keys[c2])!; - const diff = Math.abs(hsv[0] - hsv2[0]); - if (diff < 30 || diff >= 330) { - if (mappedColors.has(keys[c])) { - mappedColors.get(keys[c])!.push(keys[c2]); - } else { - mappedColors.set(keys[c], [keys[c2]]); - } - break; + for (let c = keys.length - 1; c >= 0; c--) { + const hsv = hsvColors.get(keys[c])!; + for (let c2 = 0; c2 < c; c2++) { + const hsv2 = hsvColors.get(keys[c2])!; + const diff = Math.abs(hsv[0] - hsv2[0]); + if (diff < 30 || diff >= 330) { + if (mappedColors.has(keys[c])) { + mappedColors.get(keys[c])!.push(keys[c2]); + } else { + mappedColors.set(keys[c], [keys[c2]]); } + break; + } + } + } + + mappedColors.forEach((values: number[], key: number) => { + const keyColor = rgbaColors.get(key)!; + const valueColors = values.map(v => rgbaColors.get(v)!); + const color = keyColor.slice(0); + let count = paletteColors.get(key)!; + for (const value of values) { + const valueCount = paletteColors.get(value); + if (!valueCount) { + continue; + } + count += valueCount; + } + + for (let c = 0; c < 3; c++) { + color[c] *= paletteColors.get(key)! / count; + values.forEach((value: number, i: number) => { + if (paletteColors.has(value)) { + const valueCount = paletteColors.get(value)!; + color[c] += valueColors[i][c] * (valueCount / count); + } + }); + color[c] = Math.round(color[c]); + } + + paletteColors.delete(key); + for (const value of values) { + paletteColors.delete(value); + if (mappedColors.has(value)) { + mappedColors.delete(value); } } - mappedColors.forEach((values: number[], key: number) => { - const keyColor = rgbaColors.get(key)!; - const valueColors = values.map(v => rgbaColors.get(v)!); - const color = keyColor.slice(0); - let count = paletteColors.get(key)!; - for (const value of values) { - const valueCount = paletteColors.get(value); - if (!valueCount) { - continue; - } - count += valueCount; - } - - for (let c = 0; c < 3; c++) { - color[c] *= paletteColors.get(key)! / count; - values.forEach((value: number, i: number) => { - if (paletteColors.has(value)) { - const valueCount = paletteColors.get(value)!; - color[c] += valueColors[i][c] * (valueCount / count); - } - }); - color[c] = Math.round(color[c]); - } - - paletteColors.delete(key); - for (const value of values) { - paletteColors.delete(value); - if (mappedColors.has(value)) { - mappedColors.delete(value); - } - } - - paletteColors.set( - argbFromRgba({ - r: color[0], - g: color[1], - b: color[2], - a: color[3], - }), - count, - ); - }); - - keys = Array.from(paletteColors.keys()).sort( - (a: number, b: number) => - paletteColors.get(a)! < paletteColors.get(b)! ? 1 : -1, + paletteColors.set( + argbFromRgba({ + r: color[0], + g: color[1], + b: color[2], + a: color[3], + }), + count, ); - } while (mappedColors.size); + }); - return keys.map(c => Object.values(rgbaFromArgb(c))); - }, - ); + keys = Array.from(paletteColors.keys()).sort((a: number, b: number) => + paletteColors.get(a)! < paletteColors.get(b)! ? 1 : -1, + ); + } while (mappedColors.size); + + return keys.map(c => Object.values(rgbaFromArgb(c))); + }); const paletteDeltas: number[][] = []; @@ -6241,10 +5365,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const ratio = easeFunc(delta / 255); const color = [0, 0, 0, fusionSpriteColors[sc][3]]; for (let c = 0; c < 3; c++) { - color[c] = Math.round( - fusionSpriteColors[sc][c] * ratio + - fusionPalette[paletteIndex][c] * (1 - ratio), - ); + color[c] = Math.round(fusionSpriteColors[sc][c] * ratio + fusionPalette[paletteIndex][c] * (1 - ratio)); } fusionSpriteColors[sc] = color; } @@ -6253,12 +5374,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { [this.getSprite(), this.getTintSprite()] .filter(s => !!s) .map(s => { - s.pipelineData[ - `spriteColors${ignoreOveride && this.summonData.speciesForm ? "Base" : ""}` - ] = spriteColors; - s.pipelineData[ - `fusionSpriteColors${ignoreOveride && this.summonData.speciesForm ? "Base" : ""}` - ] = fusionSpriteColors; + s.pipelineData[`spriteColors${ignoreOveride && this.summonData.speciesForm ? "Base" : ""}`] = spriteColors; + s.pipelineData[`fusionSpriteColors${ignoreOveride && this.summonData.speciesForm ? "Base" : ""}`] = + fusionSpriteColors; }); canvas.remove(); @@ -6278,9 +5396,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @returns A random integer between {@linkcode min} and ({@linkcode min} + {@linkcode range} - 1) */ randBattleSeedInt(range: number, min = 0): number { - return globalScene.currentBattle - ? globalScene.randBattleSeedInt(range, min) - : randSeedInt(range, min); + return globalScene.currentBattle ? globalScene.randBattleSeedInt(range, min) : randSeedInt(range, min); } /** @@ -6290,9 +5406,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @returns a random integer between {@linkcode min} and {@linkcode max} inclusive */ randBattleSeedIntRange(min: number, max: number): number { - return globalScene.currentBattle - ? globalScene.randBattleSeedInt(max - min + 1, min) - : randSeedIntRange(min, max); + return globalScene.currentBattle ? globalScene.randBattleSeedInt(max - min + 1, min) : randSeedIntRange(min, max); } /** @@ -6320,11 +5434,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // Trigger abilities that activate upon leaving the field applyPreLeaveFieldAbAttrs(PreLeaveFieldAbAttr, this); this.setSwitchOutStatus(true); - globalScene.triggerPokemonFormChange( - this, - SpeciesFormChangeActiveTrigger, - true, - ); + globalScene.triggerPokemonFormChange(this, SpeciesFormChangeActiveTrigger, true); globalScene.field.remove(this, destroy); } @@ -6346,10 +5456,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { hasSameAbilityInRootForm(abilityIndex: number): boolean { const currentAbilityIndex = this.abilityIndex; const rootForm = getPokemonSpecies(this.species.getRootSpeciesId()); - return ( - rootForm.getAbility(abilityIndex) === - rootForm.getAbility(currentAbilityIndex) - ); + return rootForm.getAbility(abilityIndex) === rootForm.getAbility(currentAbilityIndex); } /** @@ -6378,23 +5485,20 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param forBattle If `false`, do not trigger in-battle effects (such as Unburden) from losing the item. For example, set this to `false` if the Pokemon is giving away the held item for a Mystery Encounter. Default is `true`. * @returns `true` if the item was removed successfully, `false` otherwise. */ - public loseHeldItem( - heldItem: PokemonHeldItemModifier, - forBattle = true, - ): boolean { + public loseHeldItem(heldItem: PokemonHeldItemModifier, forBattle = true): boolean { if (heldItem.pokemonId !== -1 && heldItem.pokemonId !== this.id) { return false; } - heldItem.stackCount--; - if (heldItem.stackCount <= 0) { - globalScene.removeModifier(heldItem, !this.isPlayer()); - } - if (forBattle) { - applyPostItemLostAbAttrs(PostItemLostAbAttr, this, false); - } + heldItem.stackCount--; + if (heldItem.stackCount <= 0) { + globalScene.removeModifier(heldItem, !this.isPlayer()); + } + if (forBattle) { + applyPostItemLostAbAttrs(PostItemLostAbAttr, this, false); + } - return true; + return true; } /** @@ -6403,11 +5507,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param berryType The type of berry being eaten. * @param updateHarvest Whether to track the berry for harvest; default `true`. */ - public recordEatenBerry(berryType: BerryType, updateHarvest: boolean = true) { + public recordEatenBerry(berryType: BerryType, updateHarvest = true) { this.battleData.hasEatenBerry = true; if (updateHarvest) { // Only track for harvest if we actually consumed the berry - this.battleData.berriesEaten.push(berryType) + this.battleData.berriesEaten.push(berryType); } this.turnData.berriesEaten.push(berryType); } @@ -6428,20 +5532,7 @@ export class PlayerPokemon extends Pokemon { nature?: Nature, dataSource?: Pokemon | PokemonData, ) { - super( - 106, - 148, - species, - level, - abilityIndex, - formIndex, - gender, - shiny, - variant, - ivs, - nature, - dataSource, - ); + super(106, 148, species, level, abilityIndex, formIndex, gender, shiny, variant, ivs, nature, dataSource); if (Overrides.STATUS_OVERRIDE) { this.status = new Status(Overrides.STATUS_OVERRIDE, 0, 4); @@ -6504,17 +5595,13 @@ export class PlayerPokemon extends Pokemon { if (Array.isArray(p)) { const [pkm, form] = p; if ( - (pkm === this.species.speciesId || - (this.fusionSpecies && pkm === this.fusionSpecies.speciesId)) && + (pkm === this.species.speciesId || (this.fusionSpecies && pkm === this.fusionSpecies.speciesId)) && form === this.getFormKey() ) { compatible = true; break; } - } else if ( - p === this.species.speciesId || - (this.fusionSpecies && p === this.fusionSpecies.speciesId) - ) { + } else if (p === this.species.speciesId || (this.fusionSpecies && p === this.fusionSpecies.speciesId)) { compatible = true; break; } @@ -6532,8 +5619,7 @@ export class PlayerPokemon extends Pokemon { if ( !this.getSpeciesForm().validateStarterMoveset( moveset, - globalScene.gameData.starterData[this.species.getRootSpeciesId()] - .eggMoves, + globalScene.gameData.starterData[this.species.getRootSpeciesId()].eggMoves, ) ) { return false; @@ -6559,18 +5645,10 @@ export class PlayerPokemon extends Pokemon { UiMode.PARTY, PartyUiMode.FAINT_SWITCH, this.getFieldIndex(), - (slotIndex: number, option: PartyOption) => { - if ( - slotIndex >= globalScene.currentBattle.getBattlerCount() && - slotIndex < 6 - ) { + (slotIndex: number, _option: PartyOption) => { + if (slotIndex >= globalScene.currentBattle.getBattlerCount() && slotIndex < 6) { globalScene.prependToPhase( - new SwitchSummonPhase( - switchType, - this.getFieldIndex(), - slotIndex, - false, - ), + new SwitchSummonPhase(switchType, this.getFieldIndex(), slotIndex, false), MoveEndPhase, ); } @@ -6584,23 +5662,13 @@ export class PlayerPokemon extends Pokemon { addFriendship(friendship: number): void { if (friendship > 0) { const starterSpeciesId = this.species.getRootSpeciesId(); - const fusionStarterSpeciesId = - this.isFusion() && this.fusionSpecies - ? this.fusionSpecies.getRootSpeciesId() - : 0; + const fusionStarterSpeciesId = this.isFusion() && this.fusionSpecies ? this.fusionSpecies.getRootSpeciesId() : 0; const starterData = [ globalScene.gameData.starterData[starterSpeciesId], - fusionStarterSpeciesId - ? globalScene.gameData.starterData[fusionStarterSpeciesId] - : null, + fusionStarterSpeciesId ? globalScene.gameData.starterData[fusionStarterSpeciesId] : null, ].filter(d => !!d); const amount = new NumberHolder(friendship); - globalScene.applyModifier( - PokemonFriendshipBoosterModifier, - true, - this, - amount, - ); + globalScene.applyModifier(PokemonFriendshipBoosterModifier, true, this, amount); const candyFriendshipMultiplier = globalScene.gameMode.isClassic ? timedEventManager.getClassicFriendshipMultiplier() : 1; @@ -6609,11 +5677,7 @@ export class PlayerPokemon extends Pokemon { ? 1.5 // Divide candy gain for fusions by 1.5 during events : 2 // 2 for fusions outside events : 1; // 1 for non-fused mons - const starterAmount = new NumberHolder( - Math.floor( - (amount.value * candyFriendshipMultiplier) / fusionReduction, - ), - ); + const starterAmount = new NumberHolder(Math.floor((amount.value * candyFriendshipMultiplier) / fusionReduction)); // Add friendship to this PlayerPokemon this.friendship = Math.min(this.friendship + amount.value, 255); @@ -6622,14 +5686,9 @@ export class PlayerPokemon extends Pokemon { } // Add to candy progress for this mon's starter species and its fused species (if it has one) starterData.forEach((sd: StarterDataEntry, i: number) => { - const speciesId = !i - ? starterSpeciesId - : (fusionStarterSpeciesId as Species); + const speciesId = !i ? starterSpeciesId : (fusionStarterSpeciesId as Species); sd.friendship = (sd.friendship || 0) + starterAmount.value; - if ( - sd.friendship >= - getStarterValueFriendshipCap(speciesStarterCosts[speciesId]) - ) { + if (sd.friendship >= getStarterValueFriendshipCap(speciesStarterCosts[speciesId])) { globalScene.gameData.addStarterCandy(getPokemonSpecies(speciesId), 1); sd.friendship = 0; } @@ -6640,9 +5699,7 @@ export class PlayerPokemon extends Pokemon { } } - getPossibleEvolution( - evolution: SpeciesFormEvolution | null, - ): Promise { + getPossibleEvolution(evolution: SpeciesFormEvolution | null): Promise { if (!evolution) { return new Promise(resolve => resolve(this)); } @@ -6657,9 +5714,7 @@ export class PlayerPokemon extends Pokemon { this.fusionFormIndex = evolution.evoFormKey !== null ? Math.max( - evolutionSpecies.forms.findIndex( - f => f.formKey === evolution.evoFormKey, - ), + evolutionSpecies.forms.findIndex(f => f.formKey === evolution.evoFormKey), 0, ) : this.fusionFormIndex; @@ -6681,9 +5736,7 @@ export class PlayerPokemon extends Pokemon { const formIndex = evolution.evoFormKey !== null && !isFusion ? Math.max( - evolutionSpecies.forms.findIndex( - f => f.formKey === evolution.evoFormKey, - ), + evolutionSpecies.forms.findIndex(f => f.formKey === evolution.evoFormKey), 0, ) : this.formIndex; @@ -6704,10 +5757,7 @@ export class PlayerPokemon extends Pokemon { }); } - evolve( - evolution: SpeciesFormEvolution | null, - preEvolution: PokemonSpeciesForm, - ): Promise { + evolve(evolution: SpeciesFormEvolution | null, preEvolution: PokemonSpeciesForm): Promise { if (!evolution) { return new Promise(resolve => resolve()); } @@ -6723,10 +5773,9 @@ export class PlayerPokemon extends Pokemon { } if (evolution.preFormKey !== null) { const formIndex = Math.max( - (!isFusion || !this.fusionSpecies - ? this.species - : this.fusionSpecies - ).forms.findIndex(f => f.formKey === evolution.evoFormKey), + (!isFusion || !this.fusionSpecies ? this.species : this.fusionSpecies).forms.findIndex( + f => f.formKey === evolution.evoFormKey, + ), 0, ); if (!isFusion) { @@ -6741,18 +5790,12 @@ export class PlayerPokemon extends Pokemon { const preEvoAbilityCount = preEvolution.getAbilityCount(); if ([0, 1, 2].includes(this.abilityIndex)) { // Handles cases where a Pokemon with 3 abilities evolves into a Pokemon with 2 abilities (ie: Eevee -> any Eeveelution) - if ( - this.abilityIndex === 2 && - preEvoAbilityCount === 3 && - abilityCount === 2 - ) { + if (this.abilityIndex === 2 && preEvoAbilityCount === 3 && abilityCount === 2) { this.abilityIndex = 1; } } else { // Prevent pokemon with an illegal ability value from breaking things - console.warn( - "this.abilityIndex is somehow an illegal value, please report this", - ); + console.warn("this.abilityIndex is somehow an illegal value, please report this"); console.warn(this.abilityIndex); this.abilityIndex = 0; } @@ -6761,17 +5804,11 @@ export class PlayerPokemon extends Pokemon { const abilityCount = this.getFusionSpeciesForm().getAbilityCount(); const preEvoAbilityCount = preEvolution.getAbilityCount(); if ([0, 1, 2].includes(this.fusionAbilityIndex)) { - if ( - this.fusionAbilityIndex === 2 && - preEvoAbilityCount === 3 && - abilityCount === 2 - ) { + if (this.fusionAbilityIndex === 2 && preEvoAbilityCount === 3 && abilityCount === 2) { this.fusionAbilityIndex = 1; } } else { - console.warn( - "this.fusionAbilityIndex is somehow an illegal value, please report this", - ); + console.warn("this.fusionAbilityIndex is somehow an illegal value, please report this"); console.warn(this.fusionAbilityIndex); this.fusionAbilityIndex = 0; } @@ -6785,22 +5822,15 @@ export class PlayerPokemon extends Pokemon { }); }; if (preEvolution.speciesId === Species.GIMMIGHOUL) { - const evotracker = - this.getHeldItems().filter(m => m instanceof EvoTrackerModifier)[0] ?? - null; + const evotracker = this.getHeldItems().filter(m => m instanceof EvoTrackerModifier)[0] ?? null; if (evotracker) { globalScene.removeModifier(evotracker); } } if (!globalScene.gameMode.isDaily || this.metBiome > -1) { - globalScene.gameData.updateSpeciesDexIvs( - this.species.speciesId, - this.ivs, - ); + globalScene.gameData.updateSpeciesDexIvs(this.species.speciesId, this.ivs); globalScene.gameData.setPokemonSeen(this, false); - globalScene.gameData - .setPokemonCaught(this, false) - .then(() => updateAndResolve()); + globalScene.gameData.setPokemonCaught(this, false).then(() => updateAndResolve()); } else { updateAndResolve(); } @@ -6811,10 +5841,7 @@ export class PlayerPokemon extends Pokemon { const isFusion = evolution instanceof FusionSpeciesFormEvolution; const evoSpecies = !isFusion ? this.species : this.fusionSpecies; - if ( - evoSpecies?.speciesId === Species.NINCADA && - evolution.speciesId === Species.NINJASK - ) { + if (evoSpecies?.speciesId === Species.NINCADA && evolution.speciesId === Species.NINJASK) { const newEvolution = pokemonEvolutions[evoSpecies.speciesId][1]; if (newEvolution.condition?.predicate(this)) { @@ -6850,12 +5877,7 @@ export class PlayerPokemon extends Pokemon { newPokemon.evoCounter = this.evoCounter; globalScene.getPlayerParty().push(newPokemon); - newPokemon.evolve( - !isFusion - ? newEvolution - : new FusionSpeciesFormEvolution(this.id, newEvolution), - evoSpecies, - ); + newPokemon.evolve(!isFusion ? newEvolution : new FusionSpeciesFormEvolution(this.id, newEvolution), evoSpecies); const modifiers = globalScene.findModifiers( m => m instanceof PokemonHeldItemModifier && m.pokemonId === this.id, true, @@ -6916,9 +5938,7 @@ export class PlayerPokemon extends Pokemon { }; if (!globalScene.gameMode.isDaily || this.metBiome > -1) { globalScene.gameData.setPokemonSeen(this, false); - globalScene.gameData - .setPokemonCaught(this, false) - .then(() => updateAndResolve()); + globalScene.gameData.setPokemonCaught(this, false).then(() => updateAndResolve()); } else { updateAndResolve(); } @@ -6953,8 +5973,7 @@ export class PlayerPokemon extends Pokemon { // Store the average HP% that each Pokemon has const maxHp = this.getMaxHp(); - const newHpPercent = - (pokemon.hp / pokemon.getMaxHp() + this.hp / maxHp) / 2; + const newHpPercent = (pokemon.hp / pokemon.getMaxHp() + this.hp / maxHp) / 2; this.generateName(); this.calculateStats(); @@ -6985,15 +6004,7 @@ export class PlayerPokemon extends Pokemon { true, ) as PokemonHeldItemModifier[]; for (const modifier of fusedPartyMemberHeldModifiers) { - globalScene.tryTransferHeldItemModifier( - modifier, - this, - false, - modifier.getStackCount(), - true, - true, - false, - ); + globalScene.tryTransferHeldItemModifier(modifier, this, false, modifier.getStackCount(), true, true, false); } globalScene.updateModifiers(true, true); globalScene.removePartyMemberModifiers(fusedPartyMemberIndex); @@ -7001,11 +6012,7 @@ export class PlayerPokemon extends Pokemon { const newPartyMemberIndex = globalScene.getPlayerParty().indexOf(this); pokemon .getMoveset(true) - .map((m: PokemonMove) => - globalScene.unshiftPhase( - new LearnMovePhase(newPartyMemberIndex, m.getMove().id), - ), - ); + .map((m: PokemonMove) => globalScene.unshiftPhase(new LearnMovePhase(newPartyMemberIndex, m.getMove().id))); pokemon.destroy(); this.updateFusionPalette(); } @@ -7107,17 +6114,13 @@ export class EnemyPokemon extends Pokemon { } } - this.luck = - (this.shiny ? this.variant + 1 : 0) + - (this.fusionShiny ? this.fusionVariant + 1 : 0); + this.luck = (this.shiny ? this.variant + 1 : 0) + (this.fusionShiny ? this.fusionVariant + 1 : 0); let prevolution: Species; let speciesId = species.speciesId; while ((prevolution = pokemonPrevolutions[speciesId])) { const evolution = pokemonEvolutions[prevolution].find( - pe => - pe.speciesId === speciesId && - (!pe.evoFormKey || pe.evoFormKey === this.getFormKey()), + pe => pe.speciesId === speciesId && (!pe.evoFormKey || pe.evoFormKey === this.getFormKey()), ); if (evolution?.condition?.enforceFunc) { evolution.condition.enforceFunc(this); @@ -7135,8 +6138,7 @@ export class EnemyPokemon extends Pokemon { } } - this.aiType = - boss || this.hasTrainer() ? AiType.SMART : AiType.SMART_RANDOM; + this.aiType = boss || this.hasTrainer() ? AiType.SMART : AiType.SMART_RANDOM; } initBattleInfo(): void { @@ -7160,12 +6162,7 @@ export class EnemyPokemon extends Pokemon { if (boss) { this.bossSegments = bossSegments || - globalScene.getEncounterBossSegments( - globalScene.currentBattle.waveIndex, - this.level, - this.species, - true, - ); + globalScene.getEncounterBossSegments(globalScene.currentBattle.waveIndex, this.level, this.species, true); this.bossSegmentIndex = this.bossSegments - 1; } else { this.bossSegments = 0; @@ -7219,12 +6216,14 @@ export class EnemyPokemon extends Pokemon { const queuedMove = moveQueue[0]; if (queuedMove) { const moveIndex = this.getMoveset().findIndex(m => m.moveId === queuedMove.move); - if ((moveIndex > -1 && this.getMoveset()[moveIndex].isUsable(this, queuedMove.ignorePP)) || queuedMove.virtual) { + if ( + (moveIndex > -1 && this.getMoveset()[moveIndex].isUsable(this, queuedMove.ignorePP)) || + queuedMove.virtual + ) { return queuedMove; - } else { - this.getMoveQueue().shift(); - return this.getNextMove(); } + this.getMoveQueue().shift(); + return this.getNextMove(); } } @@ -7248,11 +6247,13 @@ export class EnemyPokemon extends Pokemon { } } switch (this.aiType) { - case AiType.RANDOM: // No enemy should spawn with this AI type in-game + // No enemy should spawn with this AI type in-game + case AiType.RANDOM: { const moveId = movePool[globalScene.randBattleSeedInt(movePool.length)].moveId; return { move: moveId, targets: this.getNextTargets(moveId) }; + } case AiType.SMART_RANDOM: - case AiType.SMART: + case AiType.SMART: { /** * Search this Pokemon's move pool for moves that will KO an opposing target. * If there are any moves that can KO an opponent (i.e. a player Pokemon), @@ -7273,20 +6274,14 @@ export class EnemyPokemon extends Pokemon { .targets.map(ind => fieldPokemon[ind]) .filter(p => this.isPlayer() !== p.isPlayer()); // Only considers critical hits for crit-only moves or when this Pokemon is under the effect of Laser Focus - const isCritical = - move.hasAttr(CritOnlyAttr) || - !!this.getTag(BattlerTagType.ALWAYS_CRIT); + const isCritical = move.hasAttr(CritOnlyAttr) || !!this.getTag(BattlerTagType.ALWAYS_CRIT); return ( move.category !== MoveCategory.STATUS && moveTargets.some(p => { const doesNotFail = move.applyConditions(this, p, move) || - [ - Moves.SUCKER_PUNCH, - Moves.UPPER_HAND, - Moves.THUNDERCLAP, - ].includes(move.id); + [Moves.SUCKER_PUNCH, Moves.UPPER_HAND, Moves.THUNDERCLAP].includes(move.id); return ( doesNotFail && p.getAttackDamage({ @@ -7297,8 +6292,7 @@ export class EnemyPokemon extends Pokemon { ignoreAllyAbility: !p.getAlly()?.waveData.abilityRevealed, ignoreSourceAllyAbility: false, isCritical, - } - ).damage >= p.hp + }).damage >= p.hp ); }) ); @@ -7314,7 +6308,7 @@ export class EnemyPokemon extends Pokemon { * For more information on how benefit scores are calculated, see `docs/enemy-ai.md`. */ const moveScores = movePool.map(() => 0); - const moveTargets = Object.fromEntries(movePool.map(m => [ m.moveId, this.getNextTargets(m.moveId) ])); + const moveTargets = Object.fromEntries(movePool.map(m => [m.moveId, this.getNextTargets(m.moveId)])); for (const m in movePool) { const pokemonMove = movePool[m]; const move = pokemonMove.getMove(); @@ -7335,8 +6329,7 @@ export class EnemyPokemon extends Pokemon { */ let targetScore = move.getUserBenefitScore(this, target, move) + - move.getTargetBenefitScore(this, target, move) * - (mt < BattlerIndex.ENEMY === this.isPlayer() ? 1 : -1); + move.getTargetBenefitScore(this, target, move) * (mt < BattlerIndex.ENEMY === this.isPlayer() ? 1 : -1); if (Number.isNaN(targetScore)) { console.error(`Move ${move.name} returned score of NaN`); targetScore = 0; @@ -7346,27 +6339,23 @@ export class EnemyPokemon extends Pokemon { * target score to -20 */ if ( - (move.name.endsWith(" (N)") || - !move.applyConditions(this, target, move)) && - ![ - Moves.SUCKER_PUNCH, - Moves.UPPER_HAND, - Moves.THUNDERCLAP, - ].includes(move.id) + (move.name.endsWith(" (N)") || !move.applyConditions(this, target, move)) && + ![Moves.SUCKER_PUNCH, Moves.UPPER_HAND, Moves.THUNDERCLAP].includes(move.id) ) { targetScore = -20; } else if (move instanceof AttackMove) { /** * Attack moves are given extra multipliers to their base benefit score based on * the move's type effectiveness against the target and whether the move is a STAB move. - */ + */ const effectiveness = target.getMoveEffectiveness( this, move, !target.waveData.abilityRevealed, undefined, undefined, - true); + true, + ); if (target.isPlayer() !== this.isPlayer()) { targetScore *= effectiveness; @@ -7405,18 +6394,14 @@ export class EnemyPokemon extends Pokemon { let r = 0; if (this.aiType === AiType.SMART_RANDOM) { // Has a 5/8 chance to select the best move, and a 3/8 chance to advance to the next best move (and repeat this roll) - while ( - r < sortedMovePool.length - 1 && - globalScene.randBattleSeedInt(8) >= 5 - ) { + while (r < sortedMovePool.length - 1 && globalScene.randBattleSeedInt(8) >= 5) { r++; } } else if (this.aiType === AiType.SMART) { // The chance to advance to the next best move increases when the compared moves' scores are closer to each other. while ( r < sortedMovePool.length - 1 && - moveScores[movePool.indexOf(sortedMovePool[r + 1])] / - moveScores[movePool.indexOf(sortedMovePool[r])] >= + moveScores[movePool.indexOf(sortedMovePool[r + 1])] / moveScores[movePool.indexOf(sortedMovePool[r])] >= 0 && globalScene.randBattleSeedInt(100) < Math.round( @@ -7428,8 +6413,14 @@ export class EnemyPokemon extends Pokemon { r++; } } - console.log(movePool.map(m => m.getName()), moveScores, r, sortedMovePool.map(m => m.getName())); + console.log( + movePool.map(m => m.getName()), + moveScores, + r, + sortedMovePool.map(m => m.getName()), + ); return { move: sortedMovePool[r]!.moveId, targets: moveTargets[sortedMovePool[r]!.moveId] }; + } } } @@ -7446,9 +6437,7 @@ export class EnemyPokemon extends Pokemon { */ getNextTargets(moveId: Moves): BattlerIndex[] { const moveTargets = getMoveTargets(this, moveId); - const targets = globalScene - .getField(true) - .filter(p => moveTargets.targets.indexOf(p.getBattlerIndex()) > -1); + const targets = globalScene.getField(true).filter(p => moveTargets.targets.indexOf(p.getBattlerIndex()) > -1); // If the move is multi-target, return all targets' indexes if (moveTargets.multiple) { return targets.map(p => p.getBattlerIndex()); @@ -7462,8 +6451,7 @@ export class EnemyPokemon extends Pokemon { */ const benefitScores = targets.map(p => [ p.getBattlerIndex(), - move.getTargetBenefitScore(this, p, move) * - (p.isPlayer() === this.isPlayer() ? 1 : -1), + move.getTargetBenefitScore(this, p, move) * (p.isPlayer() === this.isPlayer() ? 1 : -1), ]); const sortedBenefitScores = benefitScores.slice(0); @@ -7494,9 +6482,7 @@ export class EnemyPokemon extends Pokemon { } // Remove any targets whose weights are less than half the max of the target weights from consideration - const benefitCutoffIndex = targetWeights.findIndex( - s => s < targetWeights[0] / 2, - ); + const benefitCutoffIndex = targetWeights.findIndex(s => s < targetWeights[0] / 2); if (benefitCutoffIndex > -1) { targetWeights = targetWeights.slice(0, benefitCutoffIndex); } @@ -7555,12 +6541,7 @@ export class EnemyPokemon extends Pokemon { return 0; } - damage( - damage: number, - ignoreSegments = false, - preventEndure = false, - ignoreFaintPhase = false, - ): number { + damage(damage: number, ignoreSegments = false, preventEndure = false, ignoreFaintPhase = false): number { if (this.isFainted()) { return 0; } @@ -7579,16 +6560,13 @@ export class EnemyPokemon extends Pokemon { while ( segmentsBypassed < this.bossSegmentIndex && this.canBypassBossSegments(segmentsBypassed + 1) && - damage - hpRemainder >= - Math.round(segmentSize * Math.pow(2, segmentsBypassed + 1)) + damage - hpRemainder >= Math.round(segmentSize * Math.pow(2, segmentsBypassed + 1)) ) { segmentsBypassed++; //console.log('damage', damage, 'segment', segmentsBypassed + 1, 'segment size', segmentSize, 'damage needed', Math.round(segmentSize * Math.pow(2, segmentsBypassed + 1))); } - damage = toDmgValue( - this.hp - hpThreshold + segmentSize * segmentsBypassed, - ); + damage = toDmgValue(this.hp - hpThreshold + segmentSize * segmentsBypassed); clearedBossSegmentIndex = s - segmentsBypassed; } break; @@ -7603,12 +6581,7 @@ export class EnemyPokemon extends Pokemon { } } - const ret = super.damage( - damage, - ignoreSegments, - preventEndure, - ignoreFaintPhase, - ); + const ret = super.damage(damage, ignoreSegments, preventEndure, ignoreFaintPhase); if (this.isBoss()) { if (ignoreSegments) { @@ -7642,17 +6615,10 @@ export class EnemyPokemon extends Pokemon { * @param segmentIndex index of the segment to get down to (0 = no shield left, 1 = 1 shield left, etc.) */ handleBossSegmentCleared(segmentIndex: number): void { - while ( - this.bossSegmentIndex > 0 && - segmentIndex - 1 < this.bossSegmentIndex - ) { + while (this.bossSegmentIndex > 0 && segmentIndex - 1 < this.bossSegmentIndex) { // Filter out already maxed out stat stages and weigh the rest based on existing stats - const leftoverStats = EFFECTIVE_STATS.filter( - (s: EffectiveStat) => this.getStatStage(s) < 6, - ); - const statWeights = leftoverStats.map((s: EffectiveStat) => - this.getStat(s, false), - ); + const leftoverStats = EFFECTIVE_STATS.filter((s: EffectiveStat) => this.getStatStage(s) < 6); + const statWeights = leftoverStats.map((s: EffectiveStat) => this.getStat(s, false)); let boostedStat: EffectiveStat; const statThresholds: number[] = []; @@ -7684,14 +6650,7 @@ export class EnemyPokemon extends Pokemon { } globalScene.unshiftPhase( - new StatStageChangePhase( - this.getBattlerIndex(), - true, - [boostedStat!], - stages, - true, - true, - ), + new StatStageChangePhase(this.getBattlerIndex(), true, [boostedStat!], stages, true, true), ); this.bossSegmentIndex--; } @@ -7745,11 +6704,7 @@ export class EnemyPokemon extends Pokemon { newPokemon.setVisible(false); ret = newPokemon; - globalScene.triggerPokemonFormChange( - newPokemon, - SpeciesFormChangeActiveTrigger, - true, - ); + globalScene.triggerPokemonFormChange(newPokemon, SpeciesFormChangeActiveTrigger, true); } return ret; @@ -7789,7 +6744,7 @@ interface IllusionData { /** The fusionGender of the illusion if it's a fusion */ fusionGender?: Gender; /** The level of the illusion (not used currently) */ - level?: number + level?: number; } export interface TurnMove { @@ -7838,7 +6793,7 @@ export class PokemonSummonData { /** Data pertaining to this pokemon's illusion. */ public illusion: IllusionData | null = null; - public illusionBroken: boolean = false; + public illusionBroken = false; /** Array containing all berries eaten in the last turn; used by {@linkcode Abilities.CUD_CHEW} */ public berriesEatenLast: BerryType[] = []; @@ -7875,15 +6830,15 @@ export class PokemonSummonData { } } - // TODO: Merge this inside `summmonData` but exclude from save if/when a save data serializer is added +// TODO: Merge this inside `summmonData` but exclude from save if/when a save data serializer is added export class PokemonTempSummonData { /** * The number of turns this pokemon has spent without switching out. * Only currently used for positioning the battle cursor. */ - turnCount: number = 1; + turnCount = 1; - /** + /** * The number of turns this pokemon has spent in the active position since the start of the wave * without switching out. * Reset on switch and new wave, but not stored in `SummonData` to avoid being written to the save file. @@ -7892,7 +6847,6 @@ export class PokemonTempSummonData { * {@linkcode Moves.FAKE_OUT | Fake Out} and {@linkcode Moves.FIRST_IMPRESSION | First Impression}). */ waveTurnCount = 1; - } /** @@ -7903,7 +6857,7 @@ export class PokemonBattleData { /** Counter tracking direct hits this Pokemon has received during this battle; used for {@linkcode Moves.RAGE_FIST} */ public hitCount = 0; /** Whether this Pokemon has eaten a berry this battle; used for {@linkcode Moves.BELCH} */ - public hasEatenBerry: boolean = false; + public hasEatenBerry = false; /** Array containing all berries eaten and not yet recovered during this current battle; used by {@linkcode Abilities.HARVEST} */ public berriesEaten: BerryType[] = []; @@ -7927,7 +6881,7 @@ export class PokemonWaveData { * A set of all the abilities this {@linkcode Pokemon} has used in this wave. * Used to track once per battle conditions, as well as (hopefully) by the updated AI for move effectiveness. */ - public abilitiesApplied: Set = new Set; + public abilitiesApplied: Set = new Set(); /** Whether the pokemon's ability has been revealed or not */ public abilityRevealed = false; } @@ -7967,8 +6921,8 @@ export class PokemonTurnData { * All berries eaten by this pokemon in this turn. * Saved into {@linkcode PokemonSummonData | SummonData} by {@linkcode Abilities.CUD_CHEW} on turn end. * @see {@linkcode PokemonSummonData.berriesEatenLast} - */ - public berriesEaten: BerryType[] = [] + */ + public berriesEaten: BerryType[] = []; } export enum AiType { @@ -8045,13 +6999,7 @@ export class PokemonMove { */ public maxPpOverride?: number; - constructor( - moveId: Moves, - ppUsed = 0, - ppUp = 0, - virtual = false, - maxPpOverride?: number, - ) { + constructor(moveId: Moves, ppUsed = 0, ppUp = 0, virtual = false, maxPpOverride?: number) { this.moveId = moveId; this.ppUsed = ppUsed; this.ppUp = ppUp; @@ -8063,21 +7011,13 @@ export class PokemonMove { * Checks whether the move can be selected or performed by a Pokemon, without consideration for the move's targets. * The move is unusable if it is out of PP, restricted by an effect, or unimplemented. * - * @param {Pokemon} pokemon {@linkcode Pokemon} that would be using this move - * @param {boolean} ignorePp If `true`, skips the PP check - * @param {boolean} ignoreRestrictionTags If `true`, skips the check for move restriction tags (see {@link MoveRestrictionBattlerTag}) + * @param pokemon - {@linkcode Pokemon} that would be using this move + * @param ignorePp - If `true`, skips the PP check + * @param ignoreRestrictionTags - If `true`, skips the check for move restriction tags (see {@link MoveRestrictionBattlerTag}) * @returns `true` if the move can be selected and used by the Pokemon, otherwise `false`. */ - isUsable( - pokemon: Pokemon, - ignorePp = false, - ignoreRestrictionTags = false, - ): boolean { - if ( - this.moveId && - !ignoreRestrictionTags && - pokemon.isMoveRestricted(this.moveId, pokemon) - ) { + isUsable(pokemon: Pokemon, ignorePp = false, ignoreRestrictionTags = false): boolean { + if (this.moveId && !ignoreRestrictionTags && pokemon.isMoveRestricted(this.moveId, pokemon)) { return false; } @@ -8085,9 +7025,7 @@ export class PokemonMove { return false; } - return ( - ignorePp || this.ppUsed < this.getMovePp() || this.getMove().pp === -1 - ); + return ignorePp || this.ppUsed < this.getMovePp() || this.getMove().pp === -1; } getMove(): Move { @@ -8098,15 +7036,12 @@ export class PokemonMove { * Sets {@link ppUsed} for this move and ensures the value does not exceed {@link getMovePp} * @param count Amount of PP to use */ - usePp(count: number = 1) { + usePp(count = 1) { this.ppUsed = Math.min(this.ppUsed + count, this.getMovePp()); } getMovePp(): number { - return ( - this.maxPpOverride || - this.getMove().pp + this.ppUp * toDmgValue(this.getMove().pp / 5) - ); + return this.maxPpOverride || this.getMove().pp + this.ppUp * toDmgValue(this.getMove().pp / 5); } getPpRatio(): number { @@ -8123,12 +7058,6 @@ export class PokemonMove { * @returns A valid {@linkcode PokemonMove} object */ static loadMove(source: PokemonMove | any): PokemonMove { - return new PokemonMove( - source.moveId, - source.ppUsed, - source.ppUp, - source.virtual, - source.maxPpOverride, - ); + return new PokemonMove(source.moveId, source.ppUsed, source.ppUp, source.virtual, source.maxPpOverride); } } diff --git a/src/phases/revival-blessing-phase.ts b/src/phases/revival-blessing-phase.ts index 598d9109abc..428acaf9ed4 100644 --- a/src/phases/revival-blessing-phase.ts +++ b/src/phases/revival-blessing-phase.ts @@ -24,7 +24,7 @@ export class RevivalBlessingPhase extends BattlePhase { UiMode.PARTY, PartyUiMode.REVIVAL_BLESSING, this.user.getFieldIndex(), - (slotIndex: integer, _option: PartyOption) => { + (slotIndex: number, _option: PartyOption) => { if (slotIndex >= 0 && slotIndex < 6) { const pokemon = globalScene.getPlayerParty()[slotIndex]; if (!pokemon || !pokemon.isFainted()) { diff --git a/src/ui/login-form-ui-handler.ts b/src/ui/login-form-ui-handler.ts index 714a9b39771..5c48cf55753 100644 --- a/src/ui/login-form-ui-handler.ts +++ b/src/ui/login-form-ui-handler.ts @@ -151,9 +151,9 @@ export default class LoginFormUiHandler extends FormModalUiHandler { // Prevent overlapping overrides on action modification this.submitAction = originalLoginAction; this.sanitizeInputs(); - globalScene.ui.setMode(UiMode.LOADING, { buttonActions: [] }); + globalScene.ui.setMode(UiMode.LOADING, { buttonActions: [] }); const onFail = error => { - globalScene.ui.setMode(UiMode.LOGIN_FORM, Object.assign(config, { errorMessage: error?.trim() })); + globalScene.ui.setMode(UiMode.LOGIN_FORM, Object.assign(config, { errorMessage: error?.trim() })); globalScene.ui.playError(); }; if (!this.inputs[0].text) { @@ -243,7 +243,7 @@ export default class LoginFormUiHandler extends FormModalUiHandler { }, }); } - globalScene.ui.setOverlayMode(UiMode.OPTION_SELECT, { + globalScene.ui.setOverlayMode(UiMode.OPTION_SELECT, { options: options, delay: 1000, }); From 6c676f1f11215a23826432bd552be5cd22c1195e Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Tue, 27 May 2025 15:41:06 -0500 Subject: [PATCH 167/262] [Misc] Add decrypt-save.js utility script (#5731) * Add decrypt-save.js * Update scripts/decrypt-save.js Co-authored-by: Amani H. <109637146+xsn34kzx@users.noreply.github.com> --------- Co-authored-by: Amani H. <109637146+xsn34kzx@users.noreply.github.com> --- scripts/decrypt-save.js | 149 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 scripts/decrypt-save.js diff --git a/scripts/decrypt-save.js b/scripts/decrypt-save.js new file mode 100644 index 00000000000..a7239a40df6 --- /dev/null +++ b/scripts/decrypt-save.js @@ -0,0 +1,149 @@ +import pkg from "crypto-js"; +const { AES, enc } = pkg; +// biome-ignore lint: This is how you import fs from node +import * as fs from "node:fs"; + +const SAVE_KEY = "x0i2O7WRiANTqPmZ"; + +/** + * A map of condensed keynames to their associated full names + * NOTE: Update this if `src/system/game-data#systemShortKeys` ever changes! + */ +const systemShortKeys = { + seenAttr: "$sa", + caughtAttr: "$ca", + natureAttr: "$na", + seenCount: "$s", + caughtCount: "$c", + hatchedCount: "$hc", + ivs: "$i", + moveset: "$m", + eggMoves: "$em", + candyCount: "$x", + friendship: "$f", + abilityAttr: "$a", + passiveAttr: "$pa", + valueReduction: "$vr", + classicWinCount: "$wc", +}; + +/** + * Replace the shortened key names with their full names + * @param {string} dataStr - The string to convert + * @returns {string} The string with shortened keynames replaced with full names + */ +function convertSystemDataStr(dataStr) { + const fromKeys = Object.values(systemShortKeys); + const toKeys = Object.keys(systemShortKeys); + for (const k in fromKeys) { + dataStr = dataStr.replace(new RegExp(`${fromKeys[k].replace("$", "\\$")}`, "g"), toKeys[k]); + } + + return dataStr; +} + +/** + * Decrypt a save + * @param {string} path - The path to the encrypted save file + * @returns {string} The decrypted save data + */ +function decryptSave(path) { + // Check if the file exists + if (!fs.existsSync(path)) { + console.error(`File not found: ${path}`); + process.exit(1); + } + let fileData; + try { + fileData = fs.readFileSync(path, "utf8"); + } catch (e) { + switch (e.code) { + case "ENOENT": + console.error(`File not found: ${path}`); + break; + case "EACCES": + console.error(`Could not open ${path}: Permission denied`); + break; + case "EISDIR": + console.error(`Unable to read ${path} as it is a directory`); + break; + default: + console.error(`Error reading file: ${e.message}`); + } + process.exit(1); + } + return convertSystemDataStr(AES.decrypt(fileData, SAVE_KEY).toString(enc.Utf8)); +} + +/* Print the usage message and exits */ +function printUsage() { + console.log(` +Usage: node decrypt-save.js [save-file] + +Arguments: + file-path Path to the encrypted save file to decrypt. + save-file Path to where the decrypted data should be written. If not provided, the decrypted data will be printed to the console. + +Options: + -h, --help Show this help message and exit. + +Description: + This script decrypts an encrypted pokerogue save file +`); +} + +/** + * Write `data` to `filePath`, gracefully communicating errors that arise + * @param {string} filePath + * @param {string} data + */ +function writeToFile(filePath, data) { + try { + fs.writeFileSync(filePath, data); + } catch (e) { + switch (e.code) { + case "EACCES": + console.error(`Could not open ${filePath}: Permission denied`); + break; + case "EISDIR": + console.error(`Unable to write to ${filePath} as it is a directory`); + break; + default: + console.error(`Error writing file: ${e.message}`); + } + process.exit(1); + } +} + +function main() { + let args = process.argv.slice(2); + // Get options + const options = args.filter(arg => arg.startsWith("-")); + // get args + args = args.filter(arg => !arg.startsWith("-")); + + if (args.length === 0 || options.includes("-h") || options.includes("--help") || args.length > 2) { + printUsage(); + process.exit(0); + } + // If the user provided a second argument, check if the file exists already and refuse to write to it. + if (args.length === 2) { + const destPath = args[1]; + if (fs.existsSync(destPath)) { + console.error(`Refusing to overwrite ${destPath}`); + process.exit(1); + } + } + + // Otherwise, commence decryption. + const decrypt = decryptSave(args[0]); + + if (args.length === 1) { + process.stdout.write(decrypt); + process.exit(0); + } + + writeToFile(destPath, decrypt); +} + +main(); From 2deced5565c92e5f9d99a6cd8fbb683d767ce105 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Tue, 27 May 2025 16:46:56 -0500 Subject: [PATCH 168/262] [Bug][Move] Allow gastro acid to suppress passives if main ability is unsuppressable (#5854) * Allow gastro acid to suppress passives if main ability is unsuppressable * Update gastro_acid.test.ts * Update src/data/moves/move.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Add test to ensure unsuppressable main ability is not suppressed --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/data/moves/move.ts | 2 +- test/moves/gastro_acid.test.ts | 29 ++++++++++++++++++++++++++--- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 31ad3337926..8a0da5f35c2 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -7521,7 +7521,7 @@ export class SuppressAbilitiesAttr extends MoveEffectAttr { /** Causes the effect to fail when the target's ability is unsupressable or already suppressed. */ getCondition(): MoveConditionFunc { - return (user, target, move) => target.getAbility().isSuppressable && !target.summonData.abilitySuppressed; + return (_user, target, _move) => !target.summonData.abilitySuppressed && (target.getAbility().isSuppressable || (target.hasPassive() && target.getPassiveAbility().isSuppressable)); } } diff --git a/test/moves/gastro_acid.test.ts b/test/moves/gastro_acid.test.ts index 8247d29c0a0..333619d16db 100644 --- a/test/moves/gastro_acid.test.ts +++ b/test/moves/gastro_acid.test.ts @@ -25,7 +25,7 @@ describe("Moves - Gastro Acid", () => { game.override.battleStyle("double"); game.override.startingLevel(1); game.override.enemyLevel(100); - game.override.ability(Abilities.NONE); + game.override.ability(Abilities.BALL_FETCH); game.override.moveset([Moves.GASTRO_ACID, Moves.WATER_GUN, Moves.SPLASH, Moves.CORE_ENFORCER]); game.override.enemySpecies(Species.BIDOOF); game.override.enemyMoveset(Moves.SPLASH); @@ -40,7 +40,7 @@ describe("Moves - Gastro Acid", () => { * - player mon 1 should have dealt damage, player mon 2 should have not */ - await game.startBattle(); + await game.classicMode.startBattle(); game.move.select(Moves.GASTRO_ACID, 0, BattlerIndex.ENEMY); game.move.select(Moves.SPLASH, 1); @@ -63,7 +63,7 @@ describe("Moves - Gastro Acid", () => { it("fails if used on an enemy with an already-suppressed ability", async () => { game.override.battleStyle("single"); - await game.startBattle(); + await game.classicMode.startBattle(); game.move.select(Moves.CORE_ENFORCER); // Force player to be slower to enable Core Enforcer to proc its suppression effect @@ -77,4 +77,27 @@ describe("Moves - Gastro Acid", () => { expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); + + it("should suppress the passive of a target even if its main ability is unsuppressable and not suppress main abli", async () => { + game.override + .enemyAbility(Abilities.COMATOSE) + .enemyPassiveAbility(Abilities.WATER_ABSORB) + .moveset([Moves.SPLASH, Moves.GASTRO_ACID, Moves.WATER_GUN]); + await game.classicMode.startBattle([Species.MAGIKARP]); + + const enemyPokemon = game.scene.getEnemyPokemon(); + + game.move.select(Moves.GASTRO_ACID); + await game.toNextTurn(); + expect(enemyPokemon?.summonData.abilitySuppressed).toBe(true); + + game.move.select(Moves.WATER_GUN); + await game.toNextTurn(); + expect(enemyPokemon?.getHpRatio()).toBeLessThan(1); + + game.move.select(Moves.SPORE); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemyPokemon?.status?.effect).toBeFalsy(); + }); }); From c236996a02f581f9fd54c873d4aba5cfd4836eeb Mon Sep 17 00:00:00 2001 From: Lugiad <2070109+Adri1@users.noreply.github.com> Date: Wed, 28 May 2025 00:08:49 +0200 Subject: [PATCH 169/262] [UI/UX] [Localization] starterInfoText adjustments and clean up (#5859) * starterInfoText adjustments and clean up * starterInfoText adjustments and clean up * Update starter-select-ui-handler.ts * Update starter-select-ui-handler.ts --------- Co-authored-by: Wlowscha <54003515+Wlowscha@users.noreply.github.com> --- src/ui/starter-select-ui-handler.ts | 41 +++++++++++++++-------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 80acac6a6b4..a971ba86479 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -108,17 +108,21 @@ const languageSettings: { [key: string]: LanguageSetting } = { instructionTextSize: "38px", }, de: { - starterInfoTextSize: "48px", + starterInfoTextSize: "54px", instructionTextSize: "35px", - starterInfoXPos: 33, + starterInfoXPos: 35, }, "es-ES": { - starterInfoTextSize: "52px", - instructionTextSize: "35px", + starterInfoTextSize: "50px", + instructionTextSize: "38px", + starterInfoYOffset: 0.5, + starterInfoXPos: 38, }, "es-MX": { - starterInfoTextSize: "52px", - instructionTextSize: "35px", + starterInfoTextSize: "50px", + instructionTextSize: "38px", + starterInfoYOffset: 0.5, + starterInfoXPos: 38, }, fr: { starterInfoTextSize: "54px", @@ -128,21 +132,16 @@ const languageSettings: { [key: string]: LanguageSetting } = { starterInfoTextSize: "56px", instructionTextSize: "38px", }, - pt_BR: { - starterInfoTextSize: "47px", - instructionTextSize: "38px", + "pt-BR": { + starterInfoTextSize: "48px", + instructionTextSize: "42px", + starterInfoYOffset: 0.5, starterInfoXPos: 33, }, zh: { - starterInfoTextSize: "47px", - instructionTextSize: "38px", - starterInfoYOffset: 1, - starterInfoXPos: 24, - }, - pt: { - starterInfoTextSize: "48px", - instructionTextSize: "42px", - starterInfoXPos: 33, + starterInfoTextSize: "56px", + instructionTextSize: "36px", + starterInfoXPos: 26, }, ko: { starterInfoTextSize: "60px", @@ -156,9 +155,11 @@ const languageSettings: { [key: string]: LanguageSetting } = { starterInfoYOffset: 0.5, starterInfoXPos: 33, }, - "ca-ES": { - starterInfoTextSize: "52px", + ca: { + starterInfoTextSize: "48px", instructionTextSize: "38px", + starterInfoYOffset: 0.5, + starterInfoXPos: 29, }, }; From d5789105f344abd6b6234d2b14410d03ae91e4bf Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Wed, 28 May 2025 12:29:03 -0500 Subject: [PATCH 170/262] [Refactor][UI/UX] Cleanup battle-info ui code (#5696) * Create battle-info directory and move battle-info.ts to it * Move player and enemy battle info to their own files * Move subclass specific parts of constructor to subclass constructor * Fixup mock gameobject methods to match phaser gameobject returns * Make statOrder specific to subclass * Create getShinyDescriptor function in utils * Move icon construction to its own function * Cleanup enemybattleinfo constructor to use chaining * Make flyout exclusive to EnemyBattleInfo * Move EnemyPokemon specific init Logic to its class * Break up initInfo into different methods * Remove hp bar segment dividers from base battle info * Move setMini to pokemoninfo * Breakup updateInfo into smaller parts * Remove hp info handling from base updateInfo * Use phaser object chaining methods * Add some docs * Add missing chain usage * Use getShinyDescriptor in pokemon-info-container * Minor cleanup of updatePokemonExp * Fixup setSizeToFrame mock * Ensure pokemon hp numbers are not visible during stat display * Update src/utils/common.ts Co-authored-by: Wlowscha <54003515+Wlowscha@users.noreply.github.com> * Make summary-ui-handler use new shinyDescriptor method * Remove `undefined` parameter pass Co-authored-by: Amani H. <109637146+xsn34kzx@users.noreply.github.com> * Address kev's review comments Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Ensure hp number display fades in/out * Ensure ribbon and caught indicator fade with stat display * Update src/ui/battle-info/battle-info.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Move construction of stats and type icons to their own methods * Make setPositionRelative return this * Improve doc comment on paddingX param * Fix mock sprite's setPositionRelative --------- Co-authored-by: Wlowscha <54003515+Wlowscha@users.noreply.github.com> Co-authored-by: Amani H. <109637146+xsn34kzx@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/field/pokemon.ts | 31 +- src/main.ts | 2 +- src/typings/phaser/index.d.ts | 12 +- src/ui-inputs.ts | 2 +- src/ui/battle-flyout.ts | 4 +- src/ui/battle-info.ts | 986 ------------------ src/ui/battle-info/battle-info.ts | 688 ++++++++++++ src/ui/battle-info/enemy-battle-info.ts | 235 +++++ src/ui/battle-info/player-battle-info.ts | 242 +++++ src/ui/fight-ui-handler.ts | 6 +- src/ui/pokemon-info-container.ts | 27 +- src/ui/summary-ui-handler.ts | 26 +- src/utils/common.ts | 16 + test/testUtils/mocks/mockGameObject.ts | 1 + .../mocks/mocksContainer/mockContainer.ts | 187 ++-- .../mocks/mocksContainer/mockGraphics.ts | 53 +- .../mocks/mocksContainer/mockRectangle.ts | 42 +- .../mocks/mocksContainer/mockSprite.ts | 153 +-- .../mocks/mocksContainer/mockText.ts | 104 +- test/testUtils/testFileInitialization.ts | 4 +- 20 files changed, 1602 insertions(+), 1219 deletions(-) delete mode 100644 src/ui/battle-info.ts create mode 100644 src/ui/battle-info/battle-info.ts create mode 100644 src/ui/battle-info/enemy-battle-info.ts create mode 100644 src/ui/battle-info/player-battle-info.ts diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 85b003517a6..329ba06fd09 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -5,7 +5,9 @@ import { globalScene } from "#app/global-scene"; import type { Variant } from "#app/sprites/variant"; import { populateVariantColors, variantColorCache } from "#app/sprites/variant"; import { variantData } from "#app/sprites/variant"; -import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from "#app/ui/battle-info"; +import BattleInfo from "#app/ui/battle-info/battle-info"; +import { EnemyBattleInfo } from "#app/ui/battle-info/enemy-battle-info"; +import { PlayerBattleInfo } from "#app/ui/battle-info/player-battle-info"; import type Move from "#app/data/moves/move"; import { HighCritAttr, @@ -3347,22 +3349,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return this.battleInfo.updateInfo(this, instant); } - /** - * Show or hide the type effectiveness multiplier window - * Passing undefined will hide the window - */ - updateEffectiveness(effectiveness?: string) { - this.battleInfo.updateEffectiveness(effectiveness); - } - toggleStats(visible: boolean): void { this.battleInfo.toggleStats(visible); } - toggleFlyout(visible: boolean): void { - this.battleInfo.toggleFlyout(visible); - } - /** * Adds experience to this PlayerPokemon, subject to wave based level caps. * @param exp The amount of experience to add @@ -5518,6 +5508,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } export class PlayerPokemon extends Pokemon { + protected battleInfo: PlayerBattleInfo; public compatibleTms: Moves[]; constructor( @@ -6038,6 +6029,7 @@ export class PlayerPokemon extends Pokemon { } export class EnemyPokemon extends Pokemon { + protected battleInfo: EnemyBattleInfo; public trainerSlot: TrainerSlot; public aiType: AiType; public bossSegments: number; @@ -6709,6 +6701,19 @@ export class EnemyPokemon extends Pokemon { return ret; } + + + /** + * Show or hide the type effectiveness multiplier window + * Passing undefined will hide the window + */ + updateEffectiveness(effectiveness?: string) { + this.battleInfo.updateEffectiveness(effectiveness); + } + + toggleFlyout(visible: boolean): void { + this.battleInfo.toggleFlyout(visible); + } } /** diff --git a/src/main.ts b/src/main.ts index 7db663d14c7..38bfcbe5636 100644 --- a/src/main.ts +++ b/src/main.ts @@ -29,7 +29,7 @@ window.addEventListener("unhandledrejection", event => { const setPositionRelative = function (guideObject: Phaser.GameObjects.GameObject, x: number, y: number) { const offsetX = guideObject.width * (-0.5 + (0.5 - guideObject.originX)); const offsetY = guideObject.height * (-0.5 + (0.5 - guideObject.originY)); - this.setPosition(guideObject.x + offsetX + x, guideObject.y + offsetY + y); + return this.setPosition(guideObject.x + offsetX + x, guideObject.y + offsetY + y); }; Phaser.GameObjects.Container.prototype.setPositionRelative = setPositionRelative; diff --git a/src/typings/phaser/index.d.ts b/src/typings/phaser/index.d.ts index f3665768cec..26fbcff75bd 100644 --- a/src/typings/phaser/index.d.ts +++ b/src/typings/phaser/index.d.ts @@ -20,37 +20,37 @@ declare module "phaser" { /** * Sets this object's position relative to another object with a given offset */ - setPositionRelative(guideObject: any, x: number, y: number): void; + setPositionRelative(guideObject: any, x: number, y: number): this; } interface Sprite { /** * Sets this object's position relative to another object with a given offset */ - setPositionRelative(guideObject: any, x: number, y: number): void; + setPositionRelative(guideObject: any, x: number, y: number): this; } interface Image { /** * Sets this object's position relative to another object with a given offset */ - setPositionRelative(guideObject: any, x: number, y: number): void; + setPositionRelative(guideObject: any, x: number, y: number): this; } interface NineSlice { /** * Sets this object's position relative to another object with a given offset */ - setPositionRelative(guideObject: any, x: number, y: number): void; + setPositionRelative(guideObject: any, x: number, y: number): this; } interface Text { /** * Sets this object's position relative to another object with a given offset */ - setPositionRelative(guideObject: any, x: number, y: number): void; + setPositionRelative(guideObject: any, x: number, y: number): this; } interface Rectangle { /** * Sets this object's position relative to another object with a given offset */ - setPositionRelative(guideObject: any, x: number, y: number): void; + setPositionRelative(guideObject: any, x: number, y: number): this; } } diff --git a/src/ui-inputs.ts b/src/ui-inputs.ts index 0c13cdb9512..e4f11e1c93c 100644 --- a/src/ui-inputs.ts +++ b/src/ui-inputs.ts @@ -161,7 +161,7 @@ export class UiInputs { buttonInfo(pressed = true): void { if (globalScene.showMovesetFlyout) { - for (const p of globalScene.getField().filter(p => p?.isActive(true))) { + for (const p of globalScene.getEnemyField().filter(p => p?.isActive(true))) { p.toggleFlyout(pressed); } } diff --git a/src/ui/battle-flyout.ts b/src/ui/battle-flyout.ts index e590bebcf5a..f8ef5fc1ec4 100644 --- a/src/ui/battle-flyout.ts +++ b/src/ui/battle-flyout.ts @@ -1,4 +1,4 @@ -import type { default as Pokemon } from "../field/pokemon"; +import type { EnemyPokemon, default as Pokemon } from "../field/pokemon"; import { addTextObject, TextStyle } from "./text"; import { fixedInt } from "#app/utils/common"; import { globalScene } from "#app/global-scene"; @@ -126,7 +126,7 @@ export default class BattleFlyout extends Phaser.GameObjects.Container { * Links the given {@linkcode Pokemon} and subscribes to the {@linkcode BattleSceneEventType.MOVE_USED} event * @param pokemon {@linkcode Pokemon} to link to this flyout */ - initInfo(pokemon: Pokemon) { + initInfo(pokemon: EnemyPokemon) { this.pokemon = pokemon; this.name = `Flyout ${getPokemonNameWithAffix(this.pokemon)}`; diff --git a/src/ui/battle-info.ts b/src/ui/battle-info.ts deleted file mode 100644 index 2822e8364ec..00000000000 --- a/src/ui/battle-info.ts +++ /dev/null @@ -1,986 +0,0 @@ -import type { EnemyPokemon, default as Pokemon } from "../field/pokemon"; -import { getLevelTotalExp, getLevelRelExp } from "../data/exp"; -import { getLocalizedSpriteKey, fixedInt } from "#app/utils/common"; -import { addTextObject, TextStyle } from "./text"; -import { getGenderSymbol, getGenderColor, Gender } from "../data/gender"; -import { StatusEffect } from "#enums/status-effect"; -import { globalScene } from "#app/global-scene"; -import { getTypeRgb } from "#app/data/type"; -import { PokemonType } from "#enums/pokemon-type"; -import { getVariantTint } from "#app/sprites/variant"; -import { Stat } from "#enums/stat"; -import BattleFlyout from "./battle-flyout"; -import { WindowVariant, addWindow } from "./ui-theme"; -import i18next from "i18next"; -import { ExpGainsSpeed } from "#app/enums/exp-gains-speed"; - -export default class BattleInfo extends Phaser.GameObjects.Container { - public static readonly EXP_GAINS_DURATION_BASE = 1650; - - private baseY: number; - - private player: boolean; - private mini: boolean; - private boss: boolean; - private bossSegments: number; - private offset: boolean; - private lastName: string | null; - private lastTeraType: PokemonType; - private lastStatus: StatusEffect; - private lastHp: number; - private lastMaxHp: number; - private lastHpFrame: string | null; - private lastExp: number; - private lastLevelExp: number; - private lastLevel: number; - private lastLevelCapped: boolean; - private lastStats: string; - - private box: Phaser.GameObjects.Sprite; - private nameText: Phaser.GameObjects.Text; - private genderText: Phaser.GameObjects.Text; - private ownedIcon: Phaser.GameObjects.Sprite; - private championRibbon: Phaser.GameObjects.Sprite; - private teraIcon: Phaser.GameObjects.Sprite; - private shinyIcon: Phaser.GameObjects.Sprite; - private fusionShinyIcon: Phaser.GameObjects.Sprite; - private splicedIcon: Phaser.GameObjects.Sprite; - private statusIndicator: Phaser.GameObjects.Sprite; - private levelContainer: Phaser.GameObjects.Container; - private hpBar: Phaser.GameObjects.Image; - private hpBarSegmentDividers: Phaser.GameObjects.Rectangle[]; - private levelNumbersContainer: Phaser.GameObjects.Container; - private hpNumbersContainer: Phaser.GameObjects.Container; - private type1Icon: Phaser.GameObjects.Sprite; - private type2Icon: Phaser.GameObjects.Sprite; - private type3Icon: Phaser.GameObjects.Sprite; - private expBar: Phaser.GameObjects.Image; - - // #region Type effectiveness hint objects - private effectivenessContainer: Phaser.GameObjects.Container; - private effectivenessWindow: Phaser.GameObjects.NineSlice; - private effectivenessText: Phaser.GameObjects.Text; - private currentEffectiveness?: string; - // #endregion - - public expMaskRect: Phaser.GameObjects.Graphics; - - private statsContainer: Phaser.GameObjects.Container; - private statsBox: Phaser.GameObjects.Sprite; - private statValuesContainer: Phaser.GameObjects.Container; - private statNumbers: Phaser.GameObjects.Sprite[]; - - public flyoutMenu?: BattleFlyout; - - private statOrder: Stat[]; - private readonly statOrderPlayer = [Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.ACC, Stat.EVA, Stat.SPD]; - private readonly statOrderEnemy = [Stat.HP, Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.ACC, Stat.EVA, Stat.SPD]; - - constructor(x: number, y: number, player: boolean) { - super(globalScene, x, y); - this.baseY = y; - this.player = player; - this.mini = !player; - this.boss = false; - this.offset = false; - this.lastName = null; - this.lastTeraType = PokemonType.UNKNOWN; - this.lastStatus = StatusEffect.NONE; - this.lastHp = -1; - this.lastMaxHp = -1; - this.lastHpFrame = null; - this.lastExp = -1; - this.lastLevelExp = -1; - this.lastLevel = -1; - - // Initially invisible and shown via Pokemon.showInfo - this.setVisible(false); - - this.box = globalScene.add.sprite(0, 0, this.getTextureName()); - this.box.setName("box"); - this.box.setOrigin(1, 0.5); - this.add(this.box); - - this.nameText = addTextObject(player ? -115 : -124, player ? -15.2 : -11.2, "", TextStyle.BATTLE_INFO); - this.nameText.setName("text_name"); - this.nameText.setOrigin(0, 0); - this.add(this.nameText); - - this.genderText = addTextObject(0, 0, "", TextStyle.BATTLE_INFO); - this.genderText.setName("text_gender"); - this.genderText.setOrigin(0, 0); - this.genderText.setPositionRelative(this.nameText, 0, 2); - this.add(this.genderText); - - if (!this.player) { - this.ownedIcon = globalScene.add.sprite(0, 0, "icon_owned"); - this.ownedIcon.setName("icon_owned"); - this.ownedIcon.setVisible(false); - this.ownedIcon.setOrigin(0, 0); - this.ownedIcon.setPositionRelative(this.nameText, 0, 11.75); - this.add(this.ownedIcon); - - this.championRibbon = globalScene.add.sprite(0, 0, "champion_ribbon"); - this.championRibbon.setName("icon_champion_ribbon"); - this.championRibbon.setVisible(false); - this.championRibbon.setOrigin(0, 0); - this.championRibbon.setPositionRelative(this.nameText, 8, 11.75); - this.add(this.championRibbon); - } - - this.teraIcon = globalScene.add.sprite(0, 0, "icon_tera"); - this.teraIcon.setName("icon_tera"); - this.teraIcon.setVisible(false); - this.teraIcon.setOrigin(0, 0); - this.teraIcon.setScale(0.5); - this.teraIcon.setPositionRelative(this.nameText, 0, 2); - this.teraIcon.setInteractive(new Phaser.Geom.Rectangle(0, 0, 12, 15), Phaser.Geom.Rectangle.Contains); - this.add(this.teraIcon); - - this.shinyIcon = globalScene.add.sprite(0, 0, "shiny_star"); - this.shinyIcon.setName("icon_shiny"); - this.shinyIcon.setVisible(false); - this.shinyIcon.setOrigin(0, 0); - this.shinyIcon.setScale(0.5); - this.shinyIcon.setPositionRelative(this.nameText, 0, 2); - this.shinyIcon.setInteractive(new Phaser.Geom.Rectangle(0, 0, 12, 15), Phaser.Geom.Rectangle.Contains); - this.add(this.shinyIcon); - - this.fusionShinyIcon = globalScene.add.sprite(0, 0, "shiny_star_2"); - this.fusionShinyIcon.setName("icon_fusion_shiny"); - this.fusionShinyIcon.setVisible(false); - this.fusionShinyIcon.setOrigin(0, 0); - this.fusionShinyIcon.setScale(0.5); - this.fusionShinyIcon.setPosition(this.shinyIcon.x, this.shinyIcon.y); - this.add(this.fusionShinyIcon); - - this.splicedIcon = globalScene.add.sprite(0, 0, "icon_spliced"); - this.splicedIcon.setName("icon_spliced"); - this.splicedIcon.setVisible(false); - this.splicedIcon.setOrigin(0, 0); - this.splicedIcon.setScale(0.5); - this.splicedIcon.setPositionRelative(this.nameText, 0, 2); - this.splicedIcon.setInteractive(new Phaser.Geom.Rectangle(0, 0, 12, 15), Phaser.Geom.Rectangle.Contains); - this.add(this.splicedIcon); - - this.statusIndicator = globalScene.add.sprite(0, 0, getLocalizedSpriteKey("statuses")); - this.statusIndicator.setName("icon_status"); - this.statusIndicator.setVisible(false); - this.statusIndicator.setOrigin(0, 0); - this.statusIndicator.setPositionRelative(this.nameText, 0, 11.5); - this.add(this.statusIndicator); - - this.levelContainer = globalScene.add.container(player ? -41 : -50, player ? -10 : -5); - this.levelContainer.setName("container_level"); - this.add(this.levelContainer); - - const levelOverlay = globalScene.add.image(0, 0, "overlay_lv"); - this.levelContainer.add(levelOverlay); - - this.hpBar = globalScene.add.image(player ? -61 : -71, player ? -1 : 4.5, "overlay_hp"); - this.hpBar.setName("hp_bar"); - this.hpBar.setOrigin(0); - this.add(this.hpBar); - - this.hpBarSegmentDividers = []; - - this.levelNumbersContainer = globalScene.add.container(9.5, globalScene.uiTheme ? 0 : -0.5); - this.levelNumbersContainer.setName("container_level"); - this.levelContainer.add(this.levelNumbersContainer); - - if (this.player) { - this.hpNumbersContainer = globalScene.add.container(-15, 10); - this.hpNumbersContainer.setName("container_hp"); - this.add(this.hpNumbersContainer); - - const expBar = globalScene.add.image(-98, 18, "overlay_exp"); - expBar.setName("overlay_exp"); - expBar.setOrigin(0); - this.add(expBar); - - const expMaskRect = globalScene.make.graphics({}); - expMaskRect.setScale(6); - expMaskRect.fillStyle(0xffffff); - expMaskRect.beginPath(); - expMaskRect.fillRect(127, 126, 85, 2); - - const expMask = expMaskRect.createGeometryMask(); - - expBar.setMask(expMask); - - this.expBar = expBar; - this.expMaskRect = expMaskRect; - } - - this.statsContainer = globalScene.add.container(0, 0); - this.statsContainer.setName("container_stats"); - this.statsContainer.setAlpha(0); - this.add(this.statsContainer); - - this.statsBox = globalScene.add.sprite(0, 0, `${this.getTextureName()}_stats`); - this.statsBox.setName("box_stats"); - this.statsBox.setOrigin(1, 0.5); - this.statsContainer.add(this.statsBox); - - const statLabels: Phaser.GameObjects.Sprite[] = []; - this.statNumbers = []; - - this.statValuesContainer = globalScene.add.container(0, 0); - this.statsContainer.add(this.statValuesContainer); - - // this gives us a different starting location from the left of the label and padding between stats for a player vs enemy - // since the player won't have HP to show, it doesn't need to change from the current version - const startingX = this.player ? -this.statsBox.width + 8 : -this.statsBox.width + 5; - const paddingX = this.player ? 4 : 2; - const statOverflow = this.player ? 1 : 0; - this.statOrder = this.player ? this.statOrderPlayer : this.statOrderEnemy; // this tells us whether or not to use the player or enemy battle stat order - - this.statOrder.map((s, i) => { - // we do a check for i > statOverflow to see when the stat labels go onto the next column - // For enemies, we have HP (i=0) by itself then a new column, so we check for i > 0 - // For players, we don't have HP, so we start with i = 0 and i = 1 for our first column, and so need to check for i > 1 - const statX = - i > statOverflow - ? this.statNumbers[Math.max(i - 2, 0)].x + this.statNumbers[Math.max(i - 2, 0)].width + paddingX - : startingX; // we have the Math.max(i - 2, 0) in there so for i===1 to not return a negative number; since this is now based on anything >0 instead of >1, we need to allow for i-2 < 0 - - const baseY = -this.statsBox.height / 2 + 4; // this is the baseline for the y-axis - let statY: number; // this will be the y-axis placement for the labels - if (this.statOrder[i] === Stat.SPD || this.statOrder[i] === Stat.HP) { - statY = baseY + 5; - } else { - statY = baseY + (!!(i % 2) === this.player ? 10 : 0); // we compare i % 2 against this.player to tell us where to place the label; because this.battleStatOrder for enemies has HP, this.battleStatOrder[1]=ATK, but for players this.battleStatOrder[0]=ATK, so this comparing i % 2 to this.player fixes this issue for us - } - - const statLabel = globalScene.add.sprite(statX, statY, "pbinfo_stat", Stat[s]); - statLabel.setName("icon_stat_label_" + i.toString()); - statLabel.setOrigin(0, 0); - statLabels.push(statLabel); - this.statValuesContainer.add(statLabel); - - const statNumber = globalScene.add.sprite( - statX + statLabel.width, - statY, - "pbinfo_stat_numbers", - this.statOrder[i] !== Stat.HP ? "3" : "empty", - ); - statNumber.setName("icon_stat_number_" + i.toString()); - statNumber.setOrigin(0, 0); - this.statNumbers.push(statNumber); - this.statValuesContainer.add(statNumber); - - if (this.statOrder[i] === Stat.HP) { - statLabel.setVisible(false); - statNumber.setVisible(false); - } - }); - - if (!this.player) { - this.flyoutMenu = new BattleFlyout(this.player); - this.add(this.flyoutMenu); - - this.moveBelow(this.flyoutMenu, this.box); - } - - this.type1Icon = globalScene.add.sprite( - player ? -139 : -15, - player ? -17 : -15.5, - `pbinfo_${player ? "player" : "enemy"}_type1`, - ); - this.type1Icon.setName("icon_type_1"); - this.type1Icon.setOrigin(0, 0); - this.add(this.type1Icon); - - this.type2Icon = globalScene.add.sprite( - player ? -139 : -15, - player ? -1 : -2.5, - `pbinfo_${player ? "player" : "enemy"}_type2`, - ); - this.type2Icon.setName("icon_type_2"); - this.type2Icon.setOrigin(0, 0); - this.add(this.type2Icon); - - this.type3Icon = globalScene.add.sprite( - player ? -154 : 0, - player ? -17 : -15.5, - `pbinfo_${player ? "player" : "enemy"}_type`, - ); - this.type3Icon.setName("icon_type_3"); - this.type3Icon.setOrigin(0, 0); - this.add(this.type3Icon); - - if (!this.player) { - this.effectivenessContainer = globalScene.add.container(0, 0); - this.effectivenessContainer.setPositionRelative(this.type1Icon, 22, 4); - this.effectivenessContainer.setVisible(false); - this.add(this.effectivenessContainer); - - this.effectivenessText = addTextObject(5, 4.5, "", TextStyle.BATTLE_INFO); - this.effectivenessWindow = addWindow(0, 0, 0, 20, undefined, false, undefined, undefined, WindowVariant.XTHIN); - - this.effectivenessContainer.add(this.effectivenessWindow); - this.effectivenessContainer.add(this.effectivenessText); - } - } - - getStatsValueContainer(): Phaser.GameObjects.Container { - return this.statValuesContainer; - } - - initInfo(pokemon: Pokemon) { - this.updateNameText(pokemon); - const nameTextWidth = this.nameText.displayWidth; - - this.name = pokemon.getNameToRender(); - this.box.name = pokemon.getNameToRender(); - - this.flyoutMenu?.initInfo(pokemon); - - this.genderText.setText(getGenderSymbol(pokemon.gender)); - this.genderText.setColor(getGenderColor(pokemon.gender)); - this.genderText.setPositionRelative(this.nameText, nameTextWidth, 0); - - this.lastTeraType = pokemon.getTeraType(); - - this.teraIcon.setPositionRelative(this.nameText, nameTextWidth + this.genderText.displayWidth + 1, 2); - this.teraIcon.setVisible(pokemon.isTerastallized); - this.teraIcon.on("pointerover", () => { - if (pokemon.isTerastallized) { - globalScene.ui.showTooltip( - "", - i18next.t("fightUiHandler:teraHover", { - type: i18next.t(`pokemonInfo:Type.${PokemonType[this.lastTeraType]}`), - }), - ); - } - }); - this.teraIcon.on("pointerout", () => globalScene.ui.hideTooltip()); - - const isFusion = pokemon.isFusion(true); - - this.splicedIcon.setPositionRelative( - this.nameText, - nameTextWidth + this.genderText.displayWidth + 1 + (this.teraIcon.visible ? this.teraIcon.displayWidth + 1 : 0), - 2.5, - ); - this.splicedIcon.setVisible(isFusion); - if (this.splicedIcon.visible) { - this.splicedIcon.on("pointerover", () => - globalScene.ui.showTooltip( - "", - `${pokemon.species.getName(pokemon.formIndex)}/${pokemon.fusionSpecies?.getName(pokemon.fusionFormIndex)}`, - ), - ); - this.splicedIcon.on("pointerout", () => globalScene.ui.hideTooltip()); - } - - const doubleShiny = isFusion && pokemon.shiny && pokemon.fusionShiny; - const baseVariant = !doubleShiny ? pokemon.getVariant(true) : pokemon.variant; - - this.shinyIcon.setPositionRelative( - this.nameText, - nameTextWidth + - this.genderText.displayWidth + - 1 + - (this.teraIcon.visible ? this.teraIcon.displayWidth + 1 : 0) + - (this.splicedIcon.visible ? this.splicedIcon.displayWidth + 1 : 0), - 2.5, - ); - this.shinyIcon.setTexture(`shiny_star${doubleShiny ? "_1" : ""}`); - this.shinyIcon.setVisible(pokemon.isShiny()); - this.shinyIcon.setTint(getVariantTint(baseVariant)); - if (this.shinyIcon.visible) { - const shinyDescriptor = - doubleShiny || baseVariant - ? `${baseVariant === 2 ? i18next.t("common:epicShiny") : baseVariant === 1 ? i18next.t("common:rareShiny") : i18next.t("common:commonShiny")}${doubleShiny ? `/${pokemon.fusionVariant === 2 ? i18next.t("common:epicShiny") : pokemon.fusionVariant === 1 ? i18next.t("common:rareShiny") : i18next.t("common:commonShiny")}` : ""}` - : ""; - this.shinyIcon.on("pointerover", () => - globalScene.ui.showTooltip( - "", - `${i18next.t("common:shinyOnHover")}${shinyDescriptor ? ` (${shinyDescriptor})` : ""}`, - ), - ); - this.shinyIcon.on("pointerout", () => globalScene.ui.hideTooltip()); - } - - this.fusionShinyIcon.setPosition(this.shinyIcon.x, this.shinyIcon.y); - this.fusionShinyIcon.setVisible(doubleShiny); - if (isFusion) { - this.fusionShinyIcon.setTint(getVariantTint(pokemon.fusionVariant)); - } - - if (!this.player) { - if (this.nameText.visible) { - this.nameText.on("pointerover", () => - globalScene.ui.showTooltip( - "", - i18next.t("battleInfo:generation", { - generation: i18next.t(`starterSelectUiHandler:gen${pokemon.species.generation}`), - }), - ), - ); - this.nameText.on("pointerout", () => globalScene.ui.hideTooltip()); - } - - const dexEntry = globalScene.gameData.dexData[pokemon.species.speciesId]; - this.ownedIcon.setVisible(!!dexEntry.caughtAttr); - const opponentPokemonDexAttr = pokemon.getDexAttr(); - if (globalScene.gameMode.isClassic) { - if ( - globalScene.gameData.starterData[pokemon.species.getRootSpeciesId()].classicWinCount > 0 && - globalScene.gameData.starterData[pokemon.species.getRootSpeciesId(true)].classicWinCount > 0 - ) { - this.championRibbon.setVisible(true); - } - } - - // Check if Player owns all genders and forms of the Pokemon - const missingDexAttrs = (dexEntry.caughtAttr & opponentPokemonDexAttr) < opponentPokemonDexAttr; - - const ownedAbilityAttrs = globalScene.gameData.starterData[pokemon.species.getRootSpeciesId()].abilityAttr; - - // Check if the player owns ability for the root form - const playerOwnsThisAbility = pokemon.checkIfPlayerHasAbilityOfStarter(ownedAbilityAttrs); - - if (missingDexAttrs || !playerOwnsThisAbility) { - this.ownedIcon.setTint(0x808080); - } - - if (this.boss) { - this.updateBossSegmentDividers(pokemon as EnemyPokemon); - } - } - - this.hpBar.setScale(pokemon.getHpRatio(true), 1); - this.lastHpFrame = this.hpBar.scaleX > 0.5 ? "high" : this.hpBar.scaleX > 0.25 ? "medium" : "low"; - this.hpBar.setFrame(this.lastHpFrame); - if (this.player) { - this.setHpNumbers(pokemon.hp, pokemon.getMaxHp()); - } - this.lastHp = pokemon.hp; - this.lastMaxHp = pokemon.getMaxHp(); - - this.setLevel(pokemon.level); - this.lastLevel = pokemon.level; - - this.shinyIcon.setVisible(pokemon.isShiny()); - - const types = pokemon.getTypes(true, false, undefined, true); - this.type1Icon.setTexture(`pbinfo_${this.player ? "player" : "enemy"}_type${types.length > 1 ? "1" : ""}`); - this.type1Icon.setFrame(PokemonType[types[0]].toLowerCase()); - this.type2Icon.setVisible(types.length > 1); - this.type3Icon.setVisible(types.length > 2); - if (types.length > 1) { - this.type2Icon.setFrame(PokemonType[types[1]].toLowerCase()); - } - if (types.length > 2) { - this.type3Icon.setFrame(PokemonType[types[2]].toLowerCase()); - } - - if (this.player) { - this.expMaskRect.x = (pokemon.levelExp / getLevelTotalExp(pokemon.level, pokemon.species.growthRate)) * 510; - this.lastExp = pokemon.exp; - this.lastLevelExp = pokemon.levelExp; - - this.statValuesContainer.setPosition(8, 7); - } - - const stats = this.statOrder.map(() => 0); - - this.lastStats = stats.join(""); - this.updateStats(stats); - } - - getTextureName(): string { - return `pbinfo_${this.player ? "player" : "enemy"}${!this.player && this.boss ? "_boss" : this.mini ? "_mini" : ""}`; - } - - setMini(mini: boolean): void { - if (this.mini === mini) { - return; - } - - this.mini = mini; - - this.box.setTexture(this.getTextureName()); - this.statsBox.setTexture(`${this.getTextureName()}_stats`); - - if (this.player) { - this.y -= 12 * (mini ? 1 : -1); - this.baseY = this.y; - } - - const offsetElements = [ - this.nameText, - this.genderText, - this.teraIcon, - this.splicedIcon, - this.shinyIcon, - this.statusIndicator, - this.levelContainer, - ]; - offsetElements.forEach(el => (el.y += 1.5 * (mini ? -1 : 1))); - - [this.type1Icon, this.type2Icon, this.type3Icon].forEach(el => { - el.x += 4 * (mini ? 1 : -1); - el.y += -8 * (mini ? 1 : -1); - }); - - this.statValuesContainer.x += 2 * (mini ? 1 : -1); - this.statValuesContainer.y += -7 * (mini ? 1 : -1); - - const toggledElements = [this.hpNumbersContainer, this.expBar]; - toggledElements.forEach(el => el.setVisible(!mini)); - } - - toggleStats(visible: boolean): void { - globalScene.tweens.add({ - targets: this.statsContainer, - duration: fixedInt(125), - ease: "Sine.easeInOut", - alpha: visible ? 1 : 0, - }); - } - - updateBossSegments(pokemon: EnemyPokemon): void { - const boss = !!pokemon.bossSegments; - - if (boss !== this.boss) { - this.boss = boss; - - [ - this.nameText, - this.genderText, - this.teraIcon, - this.splicedIcon, - this.shinyIcon, - this.ownedIcon, - this.championRibbon, - this.statusIndicator, - this.statValuesContainer, - ].map(e => (e.x += 48 * (boss ? -1 : 1))); - this.hpBar.x += 38 * (boss ? -1 : 1); - this.hpBar.y += 2 * (this.boss ? -1 : 1); - this.levelContainer.x += 2 * (boss ? -1 : 1); - this.hpBar.setTexture(`overlay_hp${boss ? "_boss" : ""}`); - this.box.setTexture(this.getTextureName()); - this.statsBox.setTexture(`${this.getTextureName()}_stats`); - } - - this.bossSegments = boss ? pokemon.bossSegments : 0; - this.updateBossSegmentDividers(pokemon); - } - - updateBossSegmentDividers(pokemon: EnemyPokemon): void { - while (this.hpBarSegmentDividers.length) { - this.hpBarSegmentDividers.pop()?.destroy(); - } - - if (this.boss && this.bossSegments > 1) { - const uiTheme = globalScene.uiTheme; - const maxHp = pokemon.getMaxHp(); - for (let s = 1; s < this.bossSegments; s++) { - const dividerX = (Math.round((maxHp / this.bossSegments) * s) / maxHp) * this.hpBar.width; - const divider = globalScene.add.rectangle( - 0, - 0, - 1, - this.hpBar.height - (uiTheme ? 0 : 1), - pokemon.bossSegmentIndex >= s ? 0xffffff : 0x404040, - ); - divider.setOrigin(0.5, 0); - divider.setName("hpBar_divider_" + s.toString()); - this.add(divider); - this.moveBelow(divider as Phaser.GameObjects.GameObject, this.statsContainer); - - divider.setPositionRelative(this.hpBar, dividerX, uiTheme ? 0 : 1); - this.hpBarSegmentDividers.push(divider); - } - } - } - - setOffset(offset: boolean): void { - if (this.offset === offset) { - return; - } - - this.offset = offset; - - this.x += 10 * (this.offset === this.player ? 1 : -1); - this.y += 27 * (this.offset ? 1 : -1); - this.baseY = this.y; - } - - updateInfo(pokemon: Pokemon, instant?: boolean): Promise { - return new Promise(resolve => { - if (!globalScene) { - return resolve(); - } - - const gender = pokemon.summonData.illusion?.gender ?? pokemon.gender; - - this.genderText.setText(getGenderSymbol(gender)); - this.genderText.setColor(getGenderColor(gender)); - - const nameUpdated = this.lastName !== pokemon.getNameToRender(); - - if (nameUpdated) { - this.updateNameText(pokemon); - this.genderText.setPositionRelative(this.nameText, this.nameText.displayWidth, 0); - } - - const teraType = pokemon.isTerastallized ? pokemon.getTeraType() : PokemonType.UNKNOWN; - const teraTypeUpdated = this.lastTeraType !== teraType; - - if (teraTypeUpdated) { - this.teraIcon.setVisible(teraType !== PokemonType.UNKNOWN); - this.teraIcon.setPositionRelative( - this.nameText, - this.nameText.displayWidth + this.genderText.displayWidth + 1, - 2, - ); - this.teraIcon.setTintFill(Phaser.Display.Color.GetColor(...getTypeRgb(teraType))); - this.lastTeraType = teraType; - } - - const isFusion = pokemon.isFusion(true); - - if (nameUpdated || teraTypeUpdated) { - this.splicedIcon.setVisible(isFusion); - - this.teraIcon.setPositionRelative( - this.nameText, - this.nameText.displayWidth + this.genderText.displayWidth + 1, - 2, - ); - this.splicedIcon.setPositionRelative( - this.nameText, - this.nameText.displayWidth + - this.genderText.displayWidth + - 1 + - (this.teraIcon.visible ? this.teraIcon.displayWidth + 1 : 0), - 1.5, - ); - this.shinyIcon.setPositionRelative( - this.nameText, - this.nameText.displayWidth + - this.genderText.displayWidth + - 1 + - (this.teraIcon.visible ? this.teraIcon.displayWidth + 1 : 0) + - (this.splicedIcon.visible ? this.splicedIcon.displayWidth + 1 : 0), - 2.5, - ); - } - - if (this.lastStatus !== (pokemon.status?.effect || StatusEffect.NONE)) { - this.lastStatus = pokemon.status?.effect || StatusEffect.NONE; - - if (this.lastStatus !== StatusEffect.NONE) { - this.statusIndicator.setFrame(StatusEffect[this.lastStatus].toLowerCase()); - } - - const offsetX = !this.player ? (this.ownedIcon.visible ? 8 : 0) + (this.championRibbon.visible ? 8 : 0) : 0; - this.statusIndicator.setPositionRelative(this.nameText, offsetX, 11.5); - - this.statusIndicator.setVisible(!!this.lastStatus); - } - - const types = pokemon.getTypes(true, false, undefined, true); - this.type1Icon.setTexture(`pbinfo_${this.player ? "player" : "enemy"}_type${types.length > 1 ? "1" : ""}`); - this.type1Icon.setFrame(PokemonType[types[0]].toLowerCase()); - this.type2Icon.setVisible(types.length > 1); - this.type3Icon.setVisible(types.length > 2); - if (types.length > 1) { - this.type2Icon.setFrame(PokemonType[types[1]].toLowerCase()); - } - if (types.length > 2) { - this.type3Icon.setFrame(PokemonType[types[2]].toLowerCase()); - } - - const updateHpFrame = () => { - const hpFrame = this.hpBar.scaleX > 0.5 ? "high" : this.hpBar.scaleX > 0.25 ? "medium" : "low"; - if (hpFrame !== this.lastHpFrame) { - this.hpBar.setFrame(hpFrame); - this.lastHpFrame = hpFrame; - } - }; - - const updatePokemonHp = () => { - let duration = !instant ? Phaser.Math.Clamp(Math.abs(this.lastHp - pokemon.hp) * 5, 250, 5000) : 0; - const speed = globalScene.hpBarSpeed; - if (speed) { - duration = speed >= 3 ? 0 : duration / Math.pow(2, speed); - } - globalScene.tweens.add({ - targets: this.hpBar, - ease: "Sine.easeOut", - scaleX: pokemon.getHpRatio(true), - duration: duration, - onUpdate: () => { - if (this.player && this.lastHp !== pokemon.hp) { - const tweenHp = Math.ceil(this.hpBar.scaleX * pokemon.getMaxHp()); - this.setHpNumbers(tweenHp, pokemon.getMaxHp()); - this.lastHp = tweenHp; - } - - updateHpFrame(); - }, - onComplete: () => { - updateHpFrame(); - // If, after tweening, the hp is different from the original (due to rounding), force the hp number display - // to update to the correct value. - if (this.player && this.lastHp !== pokemon.hp) { - this.setHpNumbers(pokemon.hp, pokemon.getMaxHp()); - this.lastHp = pokemon.hp; - } - resolve(); - }, - }); - if (!this.player) { - this.lastHp = pokemon.hp; - } - this.lastMaxHp = pokemon.getMaxHp(); - }; - - if (this.player) { - const isLevelCapped = pokemon.level >= globalScene.getMaxExpLevel(); - - if (this.lastExp !== pokemon.exp || this.lastLevel !== pokemon.level) { - const originalResolve = resolve; - const durationMultipler = Math.max( - Phaser.Tweens.Builders.GetEaseFunction("Cubic.easeIn")( - 1 - Math.min(pokemon.level - this.lastLevel, 10) / 10, - ), - 0.1, - ); - resolve = () => this.updatePokemonExp(pokemon, false, durationMultipler).then(() => originalResolve()); - } else if (isLevelCapped !== this.lastLevelCapped) { - this.setLevel(pokemon.level); - } - - this.lastLevelCapped = isLevelCapped; - } - - if (this.lastHp !== pokemon.hp || this.lastMaxHp !== pokemon.getMaxHp()) { - return updatePokemonHp(); - } - if (!this.player && this.lastLevel !== pokemon.level) { - this.setLevel(pokemon.level); - this.lastLevel = pokemon.level; - } - - const stats = pokemon.getStatStages(); - const statsStr = stats.join(""); - - if (this.lastStats !== statsStr) { - this.updateStats(stats); - this.lastStats = statsStr; - } - - this.shinyIcon.setVisible(pokemon.isShiny(true)); - - const doubleShiny = isFusion && pokemon.shiny && pokemon.fusionShiny; - const baseVariant = !doubleShiny ? pokemon.getVariant(true) : pokemon.variant; - this.shinyIcon.setTint(getVariantTint(baseVariant)); - - this.fusionShinyIcon.setVisible(doubleShiny); - if (isFusion) { - this.fusionShinyIcon.setTint(getVariantTint(pokemon.fusionVariant)); - } - this.fusionShinyIcon.setPosition(this.shinyIcon.x, this.shinyIcon.y); - - resolve(); - }); - } - - updateNameText(pokemon: Pokemon): void { - let displayName = pokemon.getNameToRender().replace(/[♂♀]/g, ""); - let nameTextWidth: number; - - const nameSizeTest = addTextObject(0, 0, displayName, TextStyle.BATTLE_INFO); - nameTextWidth = nameSizeTest.displayWidth; - - const gender = pokemon.summonData.illusion?.gender ?? pokemon.gender; - while ( - nameTextWidth > - (this.player || !this.boss ? 60 : 98) - - ((gender !== Gender.GENDERLESS ? 6 : 0) + - (pokemon.fusionSpecies ? 8 : 0) + - (pokemon.isShiny() ? 8 : 0) + - (Math.min(pokemon.level.toString().length, 3) - 3) * 8) - ) { - displayName = `${displayName.slice(0, displayName.endsWith(".") ? -2 : -1).trimEnd()}.`; - nameSizeTest.setText(displayName); - nameTextWidth = nameSizeTest.displayWidth; - } - - nameSizeTest.destroy(); - - this.nameText.setText(displayName); - this.lastName = pokemon.getNameToRender(); - - if (this.nameText.visible) { - this.nameText.setInteractive( - new Phaser.Geom.Rectangle(0, 0, this.nameText.width, this.nameText.height), - Phaser.Geom.Rectangle.Contains, - ); - } - } - - updatePokemonExp(pokemon: Pokemon, instant?: boolean, levelDurationMultiplier = 1): Promise { - return new Promise(resolve => { - const levelUp = this.lastLevel < pokemon.level; - const relLevelExp = getLevelRelExp(this.lastLevel + 1, pokemon.species.growthRate); - const levelExp = levelUp ? relLevelExp : pokemon.levelExp; - let ratio = relLevelExp ? levelExp / relLevelExp : 0; - if (this.lastLevel >= globalScene.getMaxExpLevel(true)) { - if (levelUp) { - ratio = 1; - } else { - ratio = 0; - } - instant = true; - } - const durationMultiplier = Phaser.Tweens.Builders.GetEaseFunction("Sine.easeIn")( - 1 - Math.max(this.lastLevel - 100, 0) / 150, - ); - let duration = - this.visible && !instant - ? ((levelExp - this.lastLevelExp) / relLevelExp) * - BattleInfo.EXP_GAINS_DURATION_BASE * - durationMultiplier * - levelDurationMultiplier - : 0; - const speed = globalScene.expGainsSpeed; - if (speed && speed >= ExpGainsSpeed.DEFAULT) { - duration = speed >= ExpGainsSpeed.SKIP ? ExpGainsSpeed.DEFAULT : duration / Math.pow(2, speed); - } - if (ratio === 1) { - this.lastLevelExp = 0; - this.lastLevel++; - } else { - this.lastExp = pokemon.exp; - this.lastLevelExp = pokemon.levelExp; - } - if (duration) { - globalScene.playSound("se/exp"); - } - globalScene.tweens.add({ - targets: this.expMaskRect, - ease: "Sine.easeIn", - x: ratio * 510, - duration: duration, - onComplete: () => { - if (!globalScene) { - return resolve(); - } - if (duration) { - globalScene.sound.stopByKey("se/exp"); - } - if (ratio === 1) { - globalScene.playSound("se/level_up"); - this.setLevel(this.lastLevel); - globalScene.time.delayedCall(500 * levelDurationMultiplier, () => { - this.expMaskRect.x = 0; - this.updateInfo(pokemon, instant).then(() => resolve()); - }); - return; - } - resolve(); - }, - }); - }); - } - - setLevel(level: number): void { - const isCapped = level >= globalScene.getMaxExpLevel(); - this.levelNumbersContainer.removeAll(true); - const levelStr = level.toString(); - for (let i = 0; i < levelStr.length; i++) { - this.levelNumbersContainer.add( - globalScene.add.image(i * 8, 0, `numbers${isCapped && this.player ? "_red" : ""}`, levelStr[i]), - ); - } - this.levelContainer.setX((this.player ? -41 : -50) - 8 * Math.max(levelStr.length - 3, 0)); - } - - setHpNumbers(hp: number, maxHp: number): void { - if (!this.player || !globalScene) { - return; - } - this.hpNumbersContainer.removeAll(true); - const hpStr = hp.toString(); - const maxHpStr = maxHp.toString(); - let offset = 0; - for (let i = maxHpStr.length - 1; i >= 0; i--) { - this.hpNumbersContainer.add(globalScene.add.image(offset++ * -8, 0, "numbers", maxHpStr[i])); - } - this.hpNumbersContainer.add(globalScene.add.image(offset++ * -8, 0, "numbers", "/")); - for (let i = hpStr.length - 1; i >= 0; i--) { - this.hpNumbersContainer.add(globalScene.add.image(offset++ * -8, 0, "numbers", hpStr[i])); - } - } - - updateStats(stats: number[]): void { - this.statOrder.map((s, i) => { - if (s !== Stat.HP) { - this.statNumbers[i].setFrame(stats[s - 1].toString()); - } - }); - } - - /** - * Request the flyoutMenu to toggle if available and hides or shows the effectiveness window where necessary - */ - toggleFlyout(visible: boolean): void { - this.flyoutMenu?.toggleFlyout(visible); - - if (visible) { - this.effectivenessContainer?.setVisible(false); - } else { - this.updateEffectiveness(this.currentEffectiveness); - } - } - - /** - * Show or hide the type effectiveness multiplier window - * Passing undefined will hide the window - */ - updateEffectiveness(effectiveness?: string) { - if (this.player) { - return; - } - this.currentEffectiveness = effectiveness; - - if (!globalScene.typeHints || effectiveness === undefined || this.flyoutMenu?.flyoutVisible) { - this.effectivenessContainer.setVisible(false); - return; - } - - this.effectivenessText.setText(effectiveness); - this.effectivenessWindow.width = 10 + this.effectivenessText.displayWidth; - this.effectivenessContainer.setVisible(true); - } - - getBaseY(): number { - return this.baseY; - } - - resetY(): void { - this.y = this.baseY; - } -} - -export class PlayerBattleInfo extends BattleInfo { - constructor() { - super(Math.floor(globalScene.game.canvas.width / 6) - 10, -72, true); - } -} - -export class EnemyBattleInfo extends BattleInfo { - constructor() { - super(140, -141, false); - } - - setMini(_mini: boolean): void {} // Always mini -} diff --git a/src/ui/battle-info/battle-info.ts b/src/ui/battle-info/battle-info.ts new file mode 100644 index 00000000000..71596bf0f43 --- /dev/null +++ b/src/ui/battle-info/battle-info.ts @@ -0,0 +1,688 @@ +import type { default as Pokemon } from "../../field/pokemon"; +import { getLocalizedSpriteKey, fixedInt, getShinyDescriptor } from "#app/utils/common"; +import { addTextObject, TextStyle } from "../text"; +import { getGenderSymbol, getGenderColor, Gender } from "../../data/gender"; +import { StatusEffect } from "#enums/status-effect"; +import { globalScene } from "#app/global-scene"; +import { getTypeRgb } from "#app/data/type"; +import { PokemonType } from "#enums/pokemon-type"; +import { getVariantTint } from "#app/sprites/variant"; +import { Stat } from "#enums/stat"; +import i18next from "i18next"; + +/** + * Parameters influencing the position of elements within the battle info container + */ +export type BattleInfoParamList = { + /** X offset for the name text*/ + nameTextX: number; + /** Y offset for the name text */ + nameTextY: number; + /** X offset for the level container */ + levelContainerX: number; + /** Y offset for the level container */ + levelContainerY: number; + /** X offset for the hp bar */ + hpBarX: number; + /** Y offset for the hp bar */ + hpBarY: number; + /** Parameters for the stat box container */ + statBox: { + /** The starting offset from the left of the label for the entries in the stat box */ + xOffset: number; + /** The X padding between each number column */ + paddingX: number; + /** The index of the stat entries at which paddingX is used instead of startingX */ + statOverflow: number; + }; +}; + +export default abstract class BattleInfo extends Phaser.GameObjects.Container { + public static readonly EXP_GAINS_DURATION_BASE = 1650; + + protected baseY: number; + protected baseLvContainerX: number; + + protected player: boolean; + protected mini: boolean; + protected boss: boolean; + protected bossSegments: number; + protected offset: boolean; + protected lastName: string | null; + protected lastTeraType: PokemonType; + protected lastStatus: StatusEffect; + protected lastHp: number; + protected lastMaxHp: number; + protected lastHpFrame: string | null; + protected lastExp: number; + protected lastLevelExp: number; + protected lastLevel: number; + protected lastLevelCapped: boolean; + protected lastStats: string; + + protected box: Phaser.GameObjects.Sprite; + protected nameText: Phaser.GameObjects.Text; + protected genderText: Phaser.GameObjects.Text; + protected teraIcon: Phaser.GameObjects.Sprite; + protected shinyIcon: Phaser.GameObjects.Sprite; + protected fusionShinyIcon: Phaser.GameObjects.Sprite; + protected splicedIcon: Phaser.GameObjects.Sprite; + protected statusIndicator: Phaser.GameObjects.Sprite; + protected levelContainer: Phaser.GameObjects.Container; + protected hpBar: Phaser.GameObjects.Image; + protected levelNumbersContainer: Phaser.GameObjects.Container; + protected type1Icon: Phaser.GameObjects.Sprite; + protected type2Icon: Phaser.GameObjects.Sprite; + protected type3Icon: Phaser.GameObjects.Sprite; + protected expBar: Phaser.GameObjects.Image; + + public expMaskRect: Phaser.GameObjects.Graphics; + + protected statsContainer: Phaser.GameObjects.Container; + protected statsBox: Phaser.GameObjects.Sprite; + protected statValuesContainer: Phaser.GameObjects.Container; + protected statNumbers: Phaser.GameObjects.Sprite[]; + + get statOrder(): Stat[] { + return []; + } + + /** Helper method used by the constructor to create the tera and shiny icons next to the name */ + private constructIcons() { + const hitArea = new Phaser.Geom.Rectangle(0, 0, 12, 15); + const hitCallback = Phaser.Geom.Rectangle.Contains; + + this.teraIcon = globalScene.add + .sprite(0, 0, "icon_tera") + .setName("icon_tera") + .setVisible(false) + .setOrigin(0) + .setScale(0.5) + .setInteractive(hitArea, hitCallback) + .setPositionRelative(this.nameText, 0, 2); + + this.shinyIcon = globalScene.add + .sprite(0, 0, "shiny_star") + .setName("icon_shiny") + .setVisible(false) + .setOrigin(0) + .setScale(0.5) + .setInteractive(hitArea, hitCallback) + .setPositionRelative(this.nameText, 0, 2); + + this.fusionShinyIcon = globalScene.add + .sprite(0, 0, "shiny_star_2") + .setName("icon_fusion_shiny") + .setVisible(false) + .setOrigin(0) + .setScale(0.5) + .copyPosition(this.shinyIcon); + + this.splicedIcon = globalScene.add + .sprite(0, 0, "icon_spliced") + .setName("icon_spliced") + .setVisible(false) + .setOrigin(0) + .setScale(0.5) + .setInteractive(hitArea, hitCallback) + .setPositionRelative(this.nameText, 0, 2); + + this.add([this.teraIcon, this.shinyIcon, this.fusionShinyIcon, this.splicedIcon]); + } + + /** + * Submethod of the constructor that creates and adds the stats container to the battle info + */ + protected constructStatContainer({ xOffset, paddingX, statOverflow }: BattleInfoParamList["statBox"]): void { + this.statsContainer = globalScene.add.container(0, 0).setName("container_stats").setAlpha(0); + this.add(this.statsContainer); + + this.statsBox = globalScene.add + .sprite(0, 0, `${this.getTextureName()}_stats`) + .setName("box_stats") + .setOrigin(1, 0.5); + this.statsContainer.add(this.statsBox); + + const statLabels: Phaser.GameObjects.Sprite[] = []; + this.statNumbers = []; + + this.statValuesContainer = globalScene.add.container(); + this.statsContainer.add(this.statValuesContainer); + + const startingX = -this.statsBox.width + xOffset; + + // this gives us a different starting location from the left of the label and padding between stats for a player vs enemy + // since the player won't have HP to show, it doesn't need to change from the current version + + for (const [i, s] of this.statOrder.entries()) { + const isHp = s === Stat.HP; + // we do a check for i > statOverflow to see when the stat labels go onto the next column + // For enemies, we have HP (i=0) by itself then a new column, so we check for i > 0 + // For players, we don't have HP, so we start with i = 0 and i = 1 for our first column, and so need to check for i > 1 + const statX = + i > statOverflow + ? this.statNumbers[Math.max(i - 2, 0)].x + this.statNumbers[Math.max(i - 2, 0)].width + paddingX + : startingX; // we have the Math.max(i - 2, 0) in there so for i===1 to not return a negative number; since this is now based on anything >0 instead of >1, we need to allow for i-2 < 0 + + let statY = -this.statsBox.height / 2 + 4; // this is the baseline for the y-axis + if (isHp || s === Stat.SPD) { + statY += 5; + } else if (this.player === !!(i % 2)) { + // we compare i % 2 against this.player to tell us where to place the label + // because this.battleStatOrder for enemies has HP, this.battleStatOrder[1]=ATK, but for players + // this.battleStatOrder[0]=ATK, so this comparing i % 2 to this.player fixes this issue for us + statY += 10; + } + + const statLabel = globalScene.add + .sprite(statX, statY, "pbinfo_stat", Stat[s]) + .setName("icon_stat_label_" + i.toString()) + .setOrigin(0); + statLabels.push(statLabel); + this.statValuesContainer.add(statLabel); + + const statNumber = globalScene.add + .sprite(statX + statLabel.width, statY, "pbinfo_stat_numbers", !isHp ? "3" : "empty") + .setName("icon_stat_number_" + i.toString()) + .setOrigin(0); + this.statNumbers.push(statNumber); + this.statValuesContainer.add(statNumber); + + if (isHp) { + statLabel.setVisible(false); + statNumber.setVisible(false); + } + } + } + + /** + * Submethod of the constructor that creates and adds the pokemon type icons to the battle info + */ + protected abstract constructTypeIcons(): void; + + /** + * @param x - The x position of the battle info container + * @param y - The y position of the battle info container + * @param player - Whether this battle info belongs to a player or an enemy + * @param posParams - The parameters influencing the position of elements within the battle info container + */ + constructor(x: number, y: number, player: boolean, posParams: BattleInfoParamList) { + super(globalScene, x, y); + this.baseY = y; + this.player = player; + this.mini = !player; + this.boss = false; + this.offset = false; + this.lastName = null; + this.lastTeraType = PokemonType.UNKNOWN; + this.lastStatus = StatusEffect.NONE; + this.lastHp = -1; + this.lastMaxHp = -1; + this.lastHpFrame = null; + this.lastExp = -1; + this.lastLevelExp = -1; + this.lastLevel = -1; + this.baseLvContainerX = posParams.levelContainerX; + + // Initially invisible and shown via Pokemon.showInfo + this.setVisible(false); + + this.box = globalScene.add.sprite(0, 0, this.getTextureName()).setName("box").setOrigin(1, 0.5); + this.add(this.box); + + this.nameText = addTextObject(player ? -115 : -124, player ? -15.2 : -11.2, "", TextStyle.BATTLE_INFO) + .setName("text_name") + .setOrigin(0); + this.add(this.nameText); + + this.genderText = addTextObject(0, 0, "", TextStyle.BATTLE_INFO) + .setName("text_gender") + .setOrigin(0) + .setPositionRelative(this.nameText, 0, 2); + this.add(this.genderText); + + this.constructIcons(); + + this.statusIndicator = globalScene.add + .sprite(0, 0, getLocalizedSpriteKey("statuses")) + .setName("icon_status") + .setVisible(false) + .setOrigin(0) + .setPositionRelative(this.nameText, 0, 11.5); + this.add(this.statusIndicator); + + this.levelContainer = globalScene.add + .container(posParams.levelContainerX, posParams.levelContainerY) + .setName("container_level"); + this.add(this.levelContainer); + + const levelOverlay = globalScene.add.image(0, 0, "overlay_lv"); + this.levelContainer.add(levelOverlay); + + this.hpBar = globalScene.add.image(posParams.hpBarX, posParams.hpBarY, "overlay_hp").setName("hp_bar").setOrigin(0); + this.add(this.hpBar); + + this.levelNumbersContainer = globalScene.add + .container(9.5, globalScene.uiTheme ? 0 : -0.5) + .setName("container_level"); + this.levelContainer.add(this.levelNumbersContainer); + + this.constructStatContainer(posParams.statBox); + + this.constructTypeIcons(); + } + + getStatsValueContainer(): Phaser.GameObjects.Container { + return this.statValuesContainer; + } + + //#region Initialization methods + + initSplicedIcon(pokemon: Pokemon, baseWidth: number) { + this.splicedIcon.setPositionRelative( + this.nameText, + baseWidth + this.genderText.displayWidth + 1 + (this.teraIcon.visible ? this.teraIcon.displayWidth + 1 : 0), + 2.5, + ); + this.splicedIcon.setVisible(pokemon.isFusion(true)); + if (!this.splicedIcon.visible) { + return; + } + this.splicedIcon + .on("pointerover", () => + globalScene.ui.showTooltip( + "", + `${pokemon.species.getName(pokemon.formIndex)}/${pokemon.fusionSpecies?.getName(pokemon.fusionFormIndex)}`, + ), + ) + .on("pointerout", () => globalScene.ui.hideTooltip()); + } + + /** + * Called by {@linkcode initInfo} to initialize the shiny icon + * @param pokemon - The pokemon object attached to this battle info + * @param baseXOffset - The x offset to use for the shiny icon + * @param doubleShiny - Whether the pokemon is shiny and its fusion species is also shiny + */ + protected initShinyIcon(pokemon: Pokemon, xOffset: number, doubleShiny: boolean) { + const baseVariant = !doubleShiny ? pokemon.getVariant(true) : pokemon.variant; + + this.shinyIcon.setPositionRelative( + this.nameText, + xOffset + + this.genderText.displayWidth + + 1 + + (this.teraIcon.visible ? this.teraIcon.displayWidth + 1 : 0) + + (this.splicedIcon.visible ? this.splicedIcon.displayWidth + 1 : 0), + 2.5, + ); + this.shinyIcon + .setTexture(`shiny_star${doubleShiny ? "_1" : ""}`) + .setVisible(pokemon.isShiny()) + .setTint(getVariantTint(baseVariant)); + + if (!this.shinyIcon.visible) { + return; + } + + let shinyDescriptor = ""; + if (doubleShiny || baseVariant) { + shinyDescriptor = " (" + getShinyDescriptor(baseVariant); + if (doubleShiny) { + shinyDescriptor += "/" + getShinyDescriptor(pokemon.fusionVariant); + } + shinyDescriptor += ")"; + } + + this.shinyIcon + .on("pointerover", () => globalScene.ui.showTooltip("", i18next.t("common:shinyOnHover") + shinyDescriptor)) + .on("pointerout", () => globalScene.ui.hideTooltip()); + } + + initInfo(pokemon: Pokemon) { + this.updateNameText(pokemon); + const nameTextWidth = this.nameText.displayWidth; + + this.name = pokemon.getNameToRender(); + this.box.name = pokemon.getNameToRender(); + + this.genderText + .setText(getGenderSymbol(pokemon.gender)) + .setColor(getGenderColor(pokemon.gender)) + .setPositionRelative(this.nameText, nameTextWidth, 0); + + this.lastTeraType = pokemon.getTeraType(); + + this.teraIcon + .setVisible(pokemon.isTerastallized) + .on("pointerover", () => { + if (pokemon.isTerastallized) { + globalScene.ui.showTooltip( + "", + i18next.t("fightUiHandler:teraHover", { + type: i18next.t(`pokemonInfo:Type.${PokemonType[this.lastTeraType]}`), + }), + ); + } + }) + .on("pointerout", () => globalScene.ui.hideTooltip()) + .setPositionRelative(this.nameText, nameTextWidth + this.genderText.displayWidth + 1, 2); + + const isFusion = pokemon.isFusion(true); + this.initSplicedIcon(pokemon, nameTextWidth); + + const doubleShiny = isFusion && pokemon.shiny && pokemon.fusionShiny; + this.initShinyIcon(pokemon, nameTextWidth, doubleShiny); + + this.fusionShinyIcon.setVisible(doubleShiny).copyPosition(this.shinyIcon); + if (isFusion) { + this.fusionShinyIcon.setTint(getVariantTint(pokemon.fusionVariant)); + } + + this.hpBar.setScale(pokemon.getHpRatio(true), 1); + this.lastHpFrame = this.hpBar.scaleX > 0.5 ? "high" : this.hpBar.scaleX > 0.25 ? "medium" : "low"; + this.hpBar.setFrame(this.lastHpFrame); + this.lastHp = pokemon.hp; + this.lastMaxHp = pokemon.getMaxHp(); + + this.setLevel(pokemon.level); + this.lastLevel = pokemon.level; + + this.shinyIcon.setVisible(pokemon.isShiny()); + + this.setTypes(pokemon.getTypes(true, false, undefined, true)); + + const stats = this.statOrder.map(() => 0); + + this.lastStats = stats.join(""); + this.updateStats(stats); + } + //#endregion + + /** + * Return the texture name of the battle info box + */ + abstract getTextureName(): string; + + setMini(_mini: boolean): void {} + + toggleStats(visible: boolean): void { + globalScene.tweens.add({ + targets: this.statsContainer, + duration: fixedInt(125), + ease: "Sine.easeInOut", + alpha: visible ? 1 : 0, + }); + } + + setOffset(offset: boolean): void { + if (this.offset === offset) { + return; + } + + this.offset = offset; + + this.x += 10 * (this.offset === this.player ? 1 : -1); + this.y += 27 * (this.offset ? 1 : -1); + this.baseY = this.y; + } + + //#region Update methods and helpers + + /** + * Update the status icon to match the pokemon's current status + * @param pokemon - The pokemon object attached to this battle info + * @param xOffset - The offset from the name text + */ + updateStatusIcon(pokemon: Pokemon, xOffset = 0) { + if (this.lastStatus !== (pokemon.status?.effect || StatusEffect.NONE)) { + this.lastStatus = pokemon.status?.effect || StatusEffect.NONE; + + if (this.lastStatus !== StatusEffect.NONE) { + this.statusIndicator.setFrame(StatusEffect[this.lastStatus].toLowerCase()); + } + + this.statusIndicator.setVisible(!!this.lastStatus).setPositionRelative(this.nameText, xOffset, 11.5); + } + } + + /** Update the pokemon name inside the container */ + protected updateName(name: string): boolean { + if (this.lastName === name) { + return false; + } + this.nameText.setText(name).setPositionRelative(this.box, -this.nameText.displayWidth, 0); + this.lastName = name; + + return true; + } + + protected updateTeraType(ty: PokemonType): boolean { + if (this.lastTeraType === ty) { + return false; + } + + this.teraIcon + .setVisible(ty !== PokemonType.UNKNOWN) + .setTintFill(Phaser.Display.Color.GetColor(...getTypeRgb(ty))) + .setPositionRelative(this.nameText, this.nameText.displayWidth + this.genderText.displayWidth + 1, 2); + this.lastTeraType = ty; + + return true; + } + + /** + * Update the type icons to match the pokemon's types + */ + setTypes(types: PokemonType[]): void { + this.type1Icon + .setTexture(`pbinfo_${this.player ? "player" : "enemy"}_type${types.length > 1 ? "1" : ""}`) + .setFrame(PokemonType[types[0]].toLowerCase()); + this.type2Icon.setVisible(types.length > 1); + this.type3Icon.setVisible(types.length > 2); + if (types.length > 1) { + this.type2Icon.setFrame(PokemonType[types[1]].toLowerCase()); + } + if (types.length > 2) { + this.type3Icon.setFrame(PokemonType[types[2]].toLowerCase()); + } + } + + /** + * Called by {@linkcode updateInfo} to update the position of the tera, spliced, and shiny icons + * @param isFusion - Whether the pokemon is a fusion or not + */ + protected updateIconDisplay(isFusion: boolean): void { + this.teraIcon.setPositionRelative(this.nameText, this.nameText.displayWidth + this.genderText.displayWidth + 1, 2); + this.splicedIcon + .setVisible(isFusion) + .setPositionRelative( + this.nameText, + this.nameText.displayWidth + + this.genderText.displayWidth + + 1 + + (this.teraIcon.visible ? this.teraIcon.displayWidth + 1 : 0), + 1.5, + ); + this.shinyIcon.setPositionRelative( + this.nameText, + this.nameText.displayWidth + + this.genderText.displayWidth + + 1 + + (this.teraIcon.visible ? this.teraIcon.displayWidth + 1 : 0) + + (this.splicedIcon.visible ? this.splicedIcon.displayWidth + 1 : 0), + 2.5, + ); + } + + //#region Hp Bar Display handling + /** + * Called every time the hp frame is updated by the tween + * @param pokemon - The pokemon object attached to this battle info + */ + protected updateHpFrame(): void { + const hpFrame = this.hpBar.scaleX > 0.5 ? "high" : this.hpBar.scaleX > 0.25 ? "medium" : "low"; + if (hpFrame !== this.lastHpFrame) { + this.hpBar.setFrame(hpFrame); + this.lastHpFrame = hpFrame; + } + } + + /** + * Called by every frame in the hp animation tween created in {@linkcode updatePokemonHp} + * @param _pokemon - The pokemon the battle-info bar belongs to + */ + protected onHpTweenUpdate(_pokemon: Pokemon): void { + this.updateHpFrame(); + } + + /** Update the pokemonHp bar */ + protected updatePokemonHp(pokemon: Pokemon, resolve: (r: void | PromiseLike) => void, instant?: boolean): void { + let duration = !instant ? Phaser.Math.Clamp(Math.abs(this.lastHp - pokemon.hp) * 5, 250, 5000) : 0; + const speed = globalScene.hpBarSpeed; + if (speed) { + duration = speed >= 3 ? 0 : duration / Math.pow(2, speed); + } + globalScene.tweens.add({ + targets: this.hpBar, + ease: "Sine.easeOut", + scaleX: pokemon.getHpRatio(true), + duration: duration, + onUpdate: () => { + this.onHpTweenUpdate(pokemon); + }, + onComplete: () => { + this.updateHpFrame(); + resolve(); + }, + }); + this.lastMaxHp = pokemon.getMaxHp(); + } + + //#endregion + + async updateInfo(pokemon: Pokemon, instant?: boolean): Promise { + let resolve: (r: void | PromiseLike) => void = () => {}; + const promise = new Promise(r => (resolve = r)); + if (!globalScene) { + return resolve(); + } + + const gender: Gender = pokemon.summonData?.illusion?.gender ?? pokemon.gender; + + this.genderText.setText(getGenderSymbol(gender)).setColor(getGenderColor(gender)); + + const nameUpdated = this.updateName(pokemon.getNameToRender()); + + const teraTypeUpdated = this.updateTeraType(pokemon.isTerastallized ? pokemon.getTeraType() : PokemonType.UNKNOWN); + + const isFusion = pokemon.isFusion(true); + + if (nameUpdated || teraTypeUpdated) { + this.updateIconDisplay(isFusion); + } + + this.updateStatusIcon(pokemon); + + if (this.lastHp !== pokemon.hp || this.lastMaxHp !== pokemon.getMaxHp()) { + return this.updatePokemonHp(pokemon, resolve, instant); + } + if (!this.player && this.lastLevel !== pokemon.level) { + this.setLevel(pokemon.level); + this.lastLevel = pokemon.level; + } + + const stats = pokemon.getStatStages(); + const statsStr = stats.join(""); + + if (this.lastStats !== statsStr) { + this.updateStats(stats); + this.lastStats = statsStr; + } + + this.shinyIcon.setVisible(pokemon.isShiny(true)); + + const doubleShiny = isFusion && pokemon.shiny && pokemon.fusionShiny; + const baseVariant = !doubleShiny ? pokemon.getVariant(true) : pokemon.variant; + this.shinyIcon.setTint(getVariantTint(baseVariant)); + + this.fusionShinyIcon.setVisible(doubleShiny).setPosition(this.shinyIcon.x, this.shinyIcon.y); + if (isFusion) { + this.fusionShinyIcon.setTint(getVariantTint(pokemon.fusionVariant)); + } + + resolve(); + await promise; + } + //#endregion + + updateNameText(pokemon: Pokemon): void { + let displayName = pokemon.getNameToRender().replace(/[♂♀]/g, ""); + let nameTextWidth: number; + + const nameSizeTest = addTextObject(0, 0, displayName, TextStyle.BATTLE_INFO); + nameTextWidth = nameSizeTest.displayWidth; + + const gender = pokemon.summonData.illusion?.gender ?? pokemon.gender; + while ( + nameTextWidth > + (this.player || !this.boss ? 60 : 98) - + ((gender !== Gender.GENDERLESS ? 6 : 0) + + (pokemon.fusionSpecies ? 8 : 0) + + (pokemon.isShiny() ? 8 : 0) + + (Math.min(pokemon.level.toString().length, 3) - 3) * 8) + ) { + displayName = `${displayName.slice(0, displayName.endsWith(".") ? -2 : -1).trimEnd()}.`; + nameSizeTest.setText(displayName); + nameTextWidth = nameSizeTest.displayWidth; + } + + nameSizeTest.destroy(); + + this.nameText.setText(displayName); + this.lastName = pokemon.getNameToRender(); + + if (this.nameText.visible) { + this.nameText.setInteractive( + new Phaser.Geom.Rectangle(0, 0, this.nameText.width, this.nameText.height), + Phaser.Geom.Rectangle.Contains, + ); + } + } + + /** + * Set the level numbers container to display the provided level + * + * @remarks + * The numbers in the pokemon's level uses images for each number rather than a text object with a special font. + * This method sets the images for each digit of the level number and then positions the level container based + * on the number of digits. + * + * @param level - The level to display + * @param textureKey - The texture key for the level numbers + */ + setLevel(level: number, textureKey: "numbers" | "numbers_red" = "numbers"): void { + this.levelNumbersContainer.removeAll(true); + const levelStr = level.toString(); + for (let i = 0; i < levelStr.length; i++) { + this.levelNumbersContainer.add(globalScene.add.image(i * 8, 0, textureKey, levelStr[i])); + } + this.levelContainer.setX(this.baseLvContainerX - 8 * Math.max(levelStr.length - 3, 0)); + } + + updateStats(stats: number[]): void { + for (const [i, s] of this.statOrder.entries()) { + if (s !== Stat.HP) { + this.statNumbers[i].setFrame(stats[s - 1].toString()); + } + } + } + + getBaseY(): number { + return this.baseY; + } + + resetY(): void { + this.y = this.baseY; + } +} diff --git a/src/ui/battle-info/enemy-battle-info.ts b/src/ui/battle-info/enemy-battle-info.ts new file mode 100644 index 00000000000..e8f5434dcf2 --- /dev/null +++ b/src/ui/battle-info/enemy-battle-info.ts @@ -0,0 +1,235 @@ +import { globalScene } from "#app/global-scene"; +import BattleFlyout from "../battle-flyout"; +import { addTextObject, TextStyle } from "#app/ui/text"; +import { addWindow, WindowVariant } from "#app/ui/ui-theme"; +import { Stat } from "#enums/stat"; +import i18next from "i18next"; +import type { EnemyPokemon } from "#app/field/pokemon"; +import type { GameObjects } from "phaser"; +import BattleInfo from "./battle-info"; +import type { BattleInfoParamList } from "./battle-info"; + +export class EnemyBattleInfo extends BattleInfo { + protected player: false = false; + protected championRibbon: Phaser.GameObjects.Sprite; + protected ownedIcon: Phaser.GameObjects.Sprite; + protected flyoutMenu: BattleFlyout; + + protected hpBarSegmentDividers: GameObjects.Rectangle[] = []; + + // #region Type effectiveness hint objects + protected effectivenessContainer: Phaser.GameObjects.Container; + protected effectivenessWindow: Phaser.GameObjects.NineSlice; + protected effectivenessText: Phaser.GameObjects.Text; + protected currentEffectiveness?: string; + // #endregion + + override get statOrder(): Stat[] { + return [Stat.HP, Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.ACC, Stat.EVA, Stat.SPD]; + } + + override getTextureName(): string { + return this.boss ? "pbinfo_enemy_boss_mini" : "pbinfo_enemy_mini"; + } + + override constructTypeIcons(): void { + this.type1Icon = globalScene.add.sprite(-15, -15.5, "pbinfo_enemy_type1").setName("icon_type_1").setOrigin(0); + this.type2Icon = globalScene.add.sprite(-15, -2.5, "pbinfo_enemy_type2").setName("icon_type_2").setOrigin(0); + this.type3Icon = globalScene.add.sprite(0, 15.5, "pbinfo_enemy_type3").setName("icon_type_3").setOrigin(0); + this.add([this.type1Icon, this.type2Icon, this.type3Icon]); + } + + constructor() { + const posParams: BattleInfoParamList = { + nameTextX: -124, + nameTextY: -11.2, + levelContainerX: -50, + levelContainerY: -5, + hpBarX: -71, + hpBarY: 4.5, + statBox: { + xOffset: 5, + paddingX: 2, + statOverflow: 0, + }, + }; + + super(140, -141, false, posParams); + + this.ownedIcon = globalScene.add + .sprite(0, 0, "icon_owned") + .setName("icon_owned") + .setVisible(false) + .setOrigin(0, 0) + .setPositionRelative(this.nameText, 0, 11.75); + + this.championRibbon = globalScene.add + .sprite(0, 0, "champion_ribbon") + .setName("icon_champion_ribbon") + .setVisible(false) + .setOrigin(0, 0) + .setPositionRelative(this.nameText, 8, 11.75); + // Ensure these two icons are positioned below the stats container + this.addAt([this.ownedIcon, this.championRibbon], this.getIndex(this.statsContainer)); + + this.flyoutMenu = new BattleFlyout(this.player); + this.add(this.flyoutMenu); + + this.moveBelow(this.flyoutMenu, this.box); + + this.effectivenessContainer = globalScene.add + .container(0, 0) + .setVisible(false) + .setPositionRelative(this.type1Icon, 22, 4); + this.add(this.effectivenessContainer); + + this.effectivenessText = addTextObject(5, 4.5, "", TextStyle.BATTLE_INFO); + this.effectivenessWindow = addWindow(0, 0, 0, 20, undefined, false, undefined, undefined, WindowVariant.XTHIN); + + this.effectivenessContainer.add([this.effectivenessWindow, this.effectivenessText]); + } + + override initInfo(pokemon: EnemyPokemon): void { + this.flyoutMenu.initInfo(pokemon); + super.initInfo(pokemon); + + if (this.nameText.visible) { + this.nameText + .on("pointerover", () => + globalScene.ui.showTooltip( + "", + i18next.t("battleInfo:generation", { + generation: i18next.t(`starterSelectUiHandler:gen${pokemon.species.generation}`), + }), + ), + ) + .on("pointerout", () => globalScene.ui.hideTooltip()); + } + + const dexEntry = globalScene.gameData.dexData[pokemon.species.speciesId]; + this.ownedIcon.setVisible(!!dexEntry.caughtAttr); + const opponentPokemonDexAttr = pokemon.getDexAttr(); + if ( + globalScene.gameMode.isClassic && + globalScene.gameData.starterData[pokemon.species.getRootSpeciesId()].classicWinCount > 0 && + globalScene.gameData.starterData[pokemon.species.getRootSpeciesId(true)].classicWinCount > 0 + ) { + this.championRibbon.setVisible(true); + } + + // Check if Player owns all genders and forms of the Pokemon + const missingDexAttrs = (dexEntry.caughtAttr & opponentPokemonDexAttr) < opponentPokemonDexAttr; + + const ownedAbilityAttrs = globalScene.gameData.starterData[pokemon.species.getRootSpeciesId()].abilityAttr; + + // Check if the player owns ability for the root form + const playerOwnsThisAbility = pokemon.checkIfPlayerHasAbilityOfStarter(ownedAbilityAttrs); + + if (missingDexAttrs || !playerOwnsThisAbility) { + this.ownedIcon.setTint(0x808080); + } + + if (this.boss) { + this.updateBossSegmentDividers(pokemon as EnemyPokemon); + } + } + + /** + * Show or hide the type effectiveness multiplier window + * Passing undefined will hide the window + */ + updateEffectiveness(effectiveness?: string) { + this.currentEffectiveness = effectiveness; + + if (!globalScene.typeHints || effectiveness === undefined || this.flyoutMenu.flyoutVisible) { + this.effectivenessContainer.setVisible(false); + return; + } + + this.effectivenessText.setText(effectiveness); + this.effectivenessWindow.width = 10 + this.effectivenessText.displayWidth; + this.effectivenessContainer.setVisible(true); + } + + /** + * Request the flyoutMenu to toggle if available and hides or shows the effectiveness window where necessary + */ + toggleFlyout(visible: boolean): void { + this.flyoutMenu.toggleFlyout(visible); + + if (visible) { + this.effectivenessContainer.setVisible(false); + } else { + this.updateEffectiveness(this.currentEffectiveness); + } + } + + updateBossSegments(pokemon: EnemyPokemon): void { + const boss = !!pokemon.bossSegments; + + if (boss !== this.boss) { + this.boss = boss; + + [ + this.nameText, + this.genderText, + this.teraIcon, + this.splicedIcon, + this.shinyIcon, + this.ownedIcon, + this.championRibbon, + this.statusIndicator, + this.levelContainer, + this.statValuesContainer, + ].map(e => (e.x += 48 * (boss ? -1 : 1))); + this.hpBar.x += 38 * (boss ? -1 : 1); + this.hpBar.y += 2 * (this.boss ? -1 : 1); + this.hpBar.setTexture(`overlay_hp${boss ? "_boss" : ""}`); + this.box.setTexture(this.getTextureName()); + this.statsBox.setTexture(`${this.getTextureName()}_stats`); + } + + this.bossSegments = boss ? pokemon.bossSegments : 0; + this.updateBossSegmentDividers(pokemon); + } + + updateBossSegmentDividers(pokemon: EnemyPokemon): void { + while (this.hpBarSegmentDividers.length) { + this.hpBarSegmentDividers.pop()?.destroy(); + } + + if (this.boss && this.bossSegments > 1) { + const uiTheme = globalScene.uiTheme; + const maxHp = pokemon.getMaxHp(); + for (let s = 1; s < this.bossSegments; s++) { + const dividerX = (Math.round((maxHp / this.bossSegments) * s) / maxHp) * this.hpBar.width; + const divider = globalScene.add.rectangle( + 0, + 0, + 1, + this.hpBar.height - (uiTheme ? 0 : 1), + pokemon.bossSegmentIndex >= s ? 0xffffff : 0x404040, + ); + divider.setOrigin(0.5, 0).setName("hpBar_divider_" + s.toString()); + this.add(divider); + this.moveBelow(divider as Phaser.GameObjects.GameObject, this.statsContainer); + + divider.setPositionRelative(this.hpBar, dividerX, uiTheme ? 0 : 1); + this.hpBarSegmentDividers.push(divider); + } + } + } + + override updateStatusIcon(pokemon: EnemyPokemon): void { + super.updateStatusIcon(pokemon, (this.ownedIcon.visible ? 8 : 0) + (this.championRibbon.visible ? 8 : 0)); + } + + protected override updatePokemonHp( + pokemon: EnemyPokemon, + resolve: (r: void | PromiseLike) => void, + instant?: boolean, + ): void { + super.updatePokemonHp(pokemon, resolve, instant); + this.lastHp = pokemon.hp; + } +} diff --git a/src/ui/battle-info/player-battle-info.ts b/src/ui/battle-info/player-battle-info.ts new file mode 100644 index 00000000000..634f89b7922 --- /dev/null +++ b/src/ui/battle-info/player-battle-info.ts @@ -0,0 +1,242 @@ +import { getLevelRelExp, getLevelTotalExp } from "#app/data/exp"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import { globalScene } from "#app/global-scene"; +import { ExpGainsSpeed } from "#enums/exp-gains-speed"; +import { Stat } from "#enums/stat"; +import BattleInfo from "./battle-info"; +import type { BattleInfoParamList } from "./battle-info"; + +export class PlayerBattleInfo extends BattleInfo { + protected player: true = true; + protected hpNumbersContainer: Phaser.GameObjects.Container; + + override get statOrder(): Stat[] { + return [Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.ACC, Stat.EVA, Stat.SPD]; + } + + override getTextureName(): string { + return this.mini ? "pbinfo_player_mini" : "pbinfo_player"; + } + + override constructTypeIcons(): void { + this.type1Icon = globalScene.add.sprite(-139, -17, "pbinfo_player_type1").setName("icon_type_1").setOrigin(0); + this.type2Icon = globalScene.add.sprite(-139, -1, "pbinfo_player_type2").setName("icon_type_2").setOrigin(0); + this.type3Icon = globalScene.add.sprite(-154, -17, "pbinfo_player_type3").setName("icon_type_3").setOrigin(0); + this.add([this.type1Icon, this.type2Icon, this.type3Icon]); + } + + constructor() { + const posParams: BattleInfoParamList = { + nameTextX: -115, + nameTextY: -15.2, + levelContainerX: -41, + levelContainerY: -10, + hpBarX: -61, + hpBarY: -1, + statBox: { + xOffset: 8, + paddingX: 4, + statOverflow: 1, + }, + }; + super(Math.floor(globalScene.game.canvas.width / 6) - 10, -72, true, posParams); + + this.hpNumbersContainer = globalScene.add.container(-15, 10).setName("container_hp"); + + // hp number container must be beneath the stat container for overlay to display properly + this.addAt(this.hpNumbersContainer, this.getIndex(this.statsContainer)); + + const expBar = globalScene.add.image(-98, 18, "overlay_exp").setName("overlay_exp").setOrigin(0); + this.add(expBar); + + const expMaskRect = globalScene.make + .graphics({}) + .setScale(6) + .fillStyle(0xffffff) + .beginPath() + .fillRect(127, 126, 85, 2); + + const expMask = expMaskRect.createGeometryMask(); + + expBar.setMask(expMask); + + this.expBar = expBar; + this.expMaskRect = expMaskRect; + } + + override initInfo(pokemon: PlayerPokemon): void { + super.initInfo(pokemon); + this.setHpNumbers(pokemon.hp, pokemon.getMaxHp()); + this.expMaskRect.x = (pokemon.levelExp / getLevelTotalExp(pokemon.level, pokemon.species.growthRate)) * 510; + this.lastExp = pokemon.exp; + this.lastLevelExp = pokemon.levelExp; + + this.statValuesContainer.setPosition(8, 7); + } + + override setMini(mini: boolean): void { + if (this.mini === mini) { + return; + } + + this.mini = mini; + + this.box.setTexture(this.getTextureName()); + this.statsBox.setTexture(`${this.getTextureName()}_stats`); + + if (this.player) { + this.y -= 12 * (mini ? 1 : -1); + this.baseY = this.y; + } + + const offsetElements = [ + this.nameText, + this.genderText, + this.teraIcon, + this.splicedIcon, + this.shinyIcon, + this.statusIndicator, + this.levelContainer, + ]; + offsetElements.forEach(el => (el.y += 1.5 * (mini ? -1 : 1))); + + [this.type1Icon, this.type2Icon, this.type3Icon].forEach(el => { + el.x += 4 * (mini ? 1 : -1); + el.y += -8 * (mini ? 1 : -1); + }); + + this.statValuesContainer.x += 2 * (mini ? 1 : -1); + this.statValuesContainer.y += -7 * (mini ? 1 : -1); + + const toggledElements = [this.hpNumbersContainer, this.expBar]; + toggledElements.forEach(el => el.setVisible(!mini)); + } + + /** + * Updates the Hp Number text (that is the "HP/Max HP" text that appears below the player's health bar) + * while the health bar is tweening. + * @param pokemon - The Pokemon the health bar belongs to. + */ + protected override onHpTweenUpdate(pokemon: PlayerPokemon): void { + const tweenHp = Math.ceil(this.hpBar.scaleX * pokemon.getMaxHp()); + this.setHpNumbers(tweenHp, pokemon.getMaxHp()); + this.lastHp = tweenHp; + this.updateHpFrame(); + } + + updatePokemonExp(pokemon: PlayerPokemon, instant?: boolean, levelDurationMultiplier = 1): Promise { + const levelUp = this.lastLevel < pokemon.level; + const relLevelExp = getLevelRelExp(this.lastLevel + 1, pokemon.species.growthRate); + const levelExp = levelUp ? relLevelExp : pokemon.levelExp; + let ratio = relLevelExp ? levelExp / relLevelExp : 0; + if (this.lastLevel >= globalScene.getMaxExpLevel(true)) { + ratio = levelUp ? 1 : 0; + instant = true; + } + const durationMultiplier = Phaser.Tweens.Builders.GetEaseFunction("Sine.easeIn")( + 1 - Math.max(this.lastLevel - 100, 0) / 150, + ); + let duration = + this.visible && !instant + ? ((levelExp - this.lastLevelExp) / relLevelExp) * + BattleInfo.EXP_GAINS_DURATION_BASE * + durationMultiplier * + levelDurationMultiplier + : 0; + const speed = globalScene.expGainsSpeed; + if (speed && speed >= ExpGainsSpeed.DEFAULT) { + duration = speed >= ExpGainsSpeed.SKIP ? ExpGainsSpeed.DEFAULT : duration / Math.pow(2, speed); + } + if (ratio === 1) { + this.lastLevelExp = 0; + this.lastLevel++; + } else { + this.lastExp = pokemon.exp; + this.lastLevelExp = pokemon.levelExp; + } + if (duration) { + globalScene.playSound("se/exp"); + } + return new Promise(resolve => { + globalScene.tweens.add({ + targets: this.expMaskRect, + ease: "Sine.easeIn", + x: ratio * 510, + duration: duration, + onComplete: () => { + if (!globalScene) { + return resolve(); + } + if (duration) { + globalScene.sound.stopByKey("se/exp"); + } + if (ratio === 1) { + globalScene.playSound("se/level_up"); + this.setLevel(this.lastLevel); + globalScene.time.delayedCall(500 * levelDurationMultiplier, () => { + this.expMaskRect.x = 0; + this.updateInfo(pokemon, instant).then(() => resolve()); + }); + return; + } + resolve(); + }, + }); + }); + } + + /** + * Updates the info on the info bar. + * + * In addition to performing all the steps of {@linkcode BattleInfo.updateInfo}, + * it also updates the EXP Bar + */ + override async updateInfo(pokemon: PlayerPokemon, instant?: boolean): Promise { + await super.updateInfo(pokemon, instant); + const isLevelCapped = pokemon.level >= globalScene.getMaxExpLevel(); + const oldLevelCapped = this.lastLevelCapped; + this.lastLevelCapped = isLevelCapped; + + if (this.lastExp !== pokemon.exp || this.lastLevel !== pokemon.level) { + const durationMultipler = Math.max( + Phaser.Tweens.Builders.GetEaseFunction("Cubic.easeIn")(1 - Math.min(pokemon.level - this.lastLevel, 10) / 10), + 0.1, + ); + await this.updatePokemonExp(pokemon, false, durationMultipler); + } else if (isLevelCapped !== oldLevelCapped) { + this.setLevel(pokemon.level); + } + } + + /** + * Set the HP numbers text, that is the "HP/Max HP" text that appears below the player's health bar. + * @param hp - The current HP of the player. + * @param maxHp - The maximum HP of the player. + */ + setHpNumbers(hp: number, maxHp: number): void { + if (!globalScene) { + return; + } + this.hpNumbersContainer.removeAll(true); + const hpStr = hp.toString(); + const maxHpStr = maxHp.toString(); + let offset = 0; + for (let i = maxHpStr.length - 1; i >= 0; i--) { + this.hpNumbersContainer.add(globalScene.add.image(offset++ * -8, 0, "numbers", maxHpStr[i])); + } + this.hpNumbersContainer.add(globalScene.add.image(offset++ * -8, 0, "numbers", "/")); + for (let i = hpStr.length - 1; i >= 0; i--) { + this.hpNumbersContainer.add(globalScene.add.image(offset++ * -8, 0, "numbers", hpStr[i])); + } + } + + /** + * Set the level numbers container to display the provided level + * + * Overrides the default implementation to handle displaying level capped numbers in red. + * @param level - The level to display + */ + override setLevel(level: number): void { + super.setLevel(level, level >= globalScene.getMaxExpLevel() ? "numbers_red" : "numbers"); + } +} diff --git a/src/ui/fight-ui-handler.ts b/src/ui/fight-ui-handler.ts index 5a0978a934d..6dbbcd47300 100644 --- a/src/ui/fight-ui-handler.ts +++ b/src/ui/fight-ui-handler.ts @@ -10,7 +10,7 @@ import { getLocalizedSpriteKey, fixedInt, padInt } from "#app/utils/common"; import { MoveCategory } from "#enums/MoveCategory"; import i18next from "i18next"; import { Button } from "#enums/buttons"; -import type { PokemonMove } from "#app/field/pokemon"; +import type { EnemyPokemon, PokemonMove } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import type { CommandPhase } from "#app/phases/command-phase"; import MoveInfoOverlay from "./move-info-overlay"; @@ -279,7 +279,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { this.moveInfoOverlay.show(pokemonMove.getMove()); pokemon.getOpponents().forEach(opponent => { - opponent.updateEffectiveness(this.getEffectivenessText(pokemon, opponent, pokemonMove)); + (opponent as EnemyPokemon).updateEffectiveness(this.getEffectivenessText(pokemon, opponent, pokemonMove)); }); } @@ -391,7 +391,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { const opponents = (globalScene.getCurrentPhase() as CommandPhase).getPokemon().getOpponents(); opponents.forEach(opponent => { - opponent.updateEffectiveness(undefined); + (opponent as EnemyPokemon).updateEffectiveness(); }); } diff --git a/src/ui/pokemon-info-container.ts b/src/ui/pokemon-info-container.ts index 18b5d2384ef..d8012a58875 100644 --- a/src/ui/pokemon-info-container.ts +++ b/src/ui/pokemon-info-container.ts @@ -8,7 +8,7 @@ import type Pokemon from "../field/pokemon"; import i18next from "i18next"; import type { DexEntry, StarterDataEntry } from "../system/game-data"; import { DexAttr } from "../system/game-data"; -import { fixedInt } from "#app/utils/common"; +import { fixedInt, getShinyDescriptor } from "#app/utils/common"; import ConfirmUiHandler from "./confirm-ui-handler"; import { StatsContainer } from "./stats-container"; import { TextStyle, addBBCodeTextObject, addTextObject, getTextColor } from "./text"; @@ -343,18 +343,19 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { this.pokemonShinyIcon.setVisible(pokemon.isShiny()); this.pokemonShinyIcon.setTint(getVariantTint(baseVariant)); if (this.pokemonShinyIcon.visible) { - const shinyDescriptor = - doubleShiny || baseVariant - ? `${baseVariant === 2 ? i18next.t("common:epicShiny") : baseVariant === 1 ? i18next.t("common:rareShiny") : i18next.t("common:commonShiny")}${doubleShiny ? `/${pokemon.fusionVariant === 2 ? i18next.t("common:epicShiny") : pokemon.fusionVariant === 1 ? i18next.t("common:rareShiny") : i18next.t("common:commonShiny")}` : ""}` - : ""; - this.pokemonShinyIcon.on("pointerover", () => - globalScene.ui.showTooltip( - "", - `${i18next.t("common:shinyOnHover")}${shinyDescriptor ? ` (${shinyDescriptor})` : ""}`, - true, - ), - ); - this.pokemonShinyIcon.on("pointerout", () => globalScene.ui.hideTooltip()); + let shinyDescriptor = ""; + if (doubleShiny || baseVariant) { + shinyDescriptor = " (" + getShinyDescriptor(baseVariant); + if (doubleShiny) { + shinyDescriptor += "/" + getShinyDescriptor(pokemon.fusionVariant); + } + shinyDescriptor += ")"; + } + this.pokemonShinyIcon + .on("pointerover", () => + globalScene.ui.showTooltip("", i18next.t("common:shinyOnHover") + shinyDescriptor, true), + ) + .on("pointerout", () => globalScene.ui.hideTooltip()); const newShiny = BigInt(1 << (pokemon.shiny ? 1 : 0)); const newVariant = BigInt(1 << (pokemon.variant + 4)); diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index f93a1826b3e..24e790f7c61 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -11,6 +11,7 @@ import { isNullOrUndefined, toReadableString, formatStat, + getShinyDescriptor, } from "#app/utils/common"; import type { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; import { getStarterValueFriendshipCap, speciesStarterCosts } from "#app/data/balance/starters"; @@ -444,18 +445,19 @@ export default class SummaryUiHandler extends UiHandler { this.shinyIcon.setVisible(this.pokemon.isShiny(false)); this.shinyIcon.setTint(getVariantTint(baseVariant)); if (this.shinyIcon.visible) { - const shinyDescriptor = - doubleShiny || baseVariant - ? `${baseVariant === 2 ? i18next.t("common:epicShiny") : baseVariant === 1 ? i18next.t("common:rareShiny") : i18next.t("common:commonShiny")}${doubleShiny ? `/${this.pokemon.fusionVariant === 2 ? i18next.t("common:epicShiny") : this.pokemon.fusionVariant === 1 ? i18next.t("common:rareShiny") : i18next.t("common:commonShiny")}` : ""}` - : ""; - this.shinyIcon.on("pointerover", () => - globalScene.ui.showTooltip( - "", - `${i18next.t("common:shinyOnHover")}${shinyDescriptor ? ` (${shinyDescriptor})` : ""}`, - true, - ), - ); - this.shinyIcon.on("pointerout", () => globalScene.ui.hideTooltip()); + let shinyDescriptor = ""; + if (doubleShiny || baseVariant) { + shinyDescriptor = " (" + getShinyDescriptor(baseVariant); + if (doubleShiny) { + shinyDescriptor += "/" + getShinyDescriptor(this.pokemon.fusionVariant); + } + shinyDescriptor += ")"; + } + this.shinyIcon + .on("pointerover", () => + globalScene.ui.showTooltip("", i18next.t("common:shinyOnHover") + shinyDescriptor, true), + ) + .on("pointerout", () => globalScene.ui.hideTooltip()); } this.fusionShinyIcon.setPosition(this.shinyIcon.x, this.shinyIcon.y); diff --git a/src/utils/common.ts b/src/utils/common.ts index b9111578e2f..a018b49da3c 100644 --- a/src/utils/common.ts +++ b/src/utils/common.ts @@ -2,6 +2,7 @@ import { MoneyFormat } from "#enums/money-format"; import { Moves } from "#enums/moves"; import i18next from "i18next"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; +import type { Variant } from "#app/sprites/variant"; export type nil = null | undefined; @@ -576,3 +577,18 @@ export function animationFileName(move: Moves): string { export function camelCaseToKebabCase(str: string): string { return str.replace(/[A-Z]+(?![a-z])|[A-Z]/g, (s, o) => (o ? "-" : "") + s.toLowerCase()); } + +/** Get the localized shiny descriptor for the provided variant + * @param variant - The variant to get the shiny descriptor for + * @returns The localized shiny descriptor + */ +export function getShinyDescriptor(variant: Variant): string { + switch (variant) { + case 2: + return i18next.t("common:epicShiny"); + case 1: + return i18next.t("common:rareShiny"); + case 0: + return i18next.t("common:commonShiny"); + } +} diff --git a/test/testUtils/mocks/mockGameObject.ts b/test/testUtils/mocks/mockGameObject.ts index 4c243ec9ca1..0dff7c48c73 100644 --- a/test/testUtils/mocks/mockGameObject.ts +++ b/test/testUtils/mocks/mockGameObject.ts @@ -1,3 +1,4 @@ export interface MockGameObject { name: string; + destroy?(): void; } diff --git a/test/testUtils/mocks/mocksContainer/mockContainer.ts b/test/testUtils/mocks/mocksContainer/mockContainer.ts index 5e739fbe3cc..e116e7d151a 100644 --- a/test/testUtils/mocks/mocksContainer/mockContainer.ts +++ b/test/testUtils/mocks/mocksContainer/mockContainer.ts @@ -2,199 +2,253 @@ import type MockTextureManager from "#test/testUtils/mocks/mockTextureManager"; import type { MockGameObject } from "../mockGameObject"; export default class MockContainer implements MockGameObject { - protected x; - protected y; + protected x: number; + protected y: number; protected scene; - protected width; - protected height; - protected visible; - private alpha; + protected width: number; + protected height: number; + protected visible: boolean; + private alpha: number; private style; public frame; protected textureManager; public list: MockGameObject[] = []; public name: string; - constructor(textureManager: MockTextureManager, x, y) { + constructor(textureManager: MockTextureManager, x: number, y: number) { this.x = x; this.y = y; this.frame = {}; this.textureManager = textureManager; } - setVisible(visible) { + setVisible(visible: boolean): this { this.visible = visible; + return this; } - once(_event, _callback, _source) {} + once(_event, _callback, _source): this { + return this; + } - off(_event, _callback, _source) {} + off(_event, _callback, _source): this { + return this; + } - removeFromDisplayList() { + removeFromDisplayList(): this { // same as remove or destroy + return this; } - removeBetween(_startIndex, _endIndex, _destroyChild) { + removeBetween(_startIndex, _endIndex, _destroyChild): this { // Removes multiple children across an index range + return this; } addedToScene() { // This callback is invoked when this Game Object is added to a Scene. } - setSize(_width, _height) { + setSize(_width: number, _height: number): this { // Sets the size of this Game Object. + return this; } - setMask() { + setMask(): this { /// Sets the mask that this Game Object will use to render with. + return this; } - setPositionRelative(_source, _x, _y) { + setPositionRelative(_source, _x, _y): this { /// Sets the position of this Game Object to be a relative position from the source Game Object. + return this; } - setInteractive = () => null; + setInteractive(): this { + return this; + } - setOrigin(x, y) { + setOrigin(x = 0.5, y = x): this { this.x = x; this.y = y; + return this; } - setAlpha(alpha) { + setAlpha(alpha = 1): this { this.alpha = alpha; + return this; } - setFrame(_frame, _updateSize?: boolean, _updateOrigin?: boolean) { + setFrame(_frame, _updateSize?: boolean, _updateOrigin?: boolean): this { // Sets the frame this Game Object will use to render with. + return this; } - setScale(_scale) { + setScale(_x = 1, _y = _x): this { // Sets the scale of this Game Object. + return this; } - setPosition(x, y) { + setPosition(x = 0, y = x, _z = 0, _w = 0): this { this.x = x; this.y = y; + return this; } - setX(x) { + setX(x = 0): this { this.x = x; + return this; } - setY(y) { + setY(y = 0): this { this.y = y; + return this; } destroy() { this.list = []; } - setShadow(_shadowXpos, _shadowYpos, _shadowColor) { + setShadow(_shadowXpos, _shadowYpos, _shadowColor): this { // Sets the shadow settings for this Game Object. + return this; } - setLineSpacing(_lineSpacing) { + setLineSpacing(_lineSpacing): this { // Sets the line spacing value of this Game Object. + return this; } - setText(_text) { + setText(_text): this { // Sets the text this Game Object will display. + return this; } - setAngle(_angle) { + setAngle(_angle): this { // Sets the angle of this Game Object. + return this; } - setShadowOffset(_offsetX, _offsetY) { + setShadowOffset(_offsetX, _offsetY): this { // Sets the shadow offset values. + return this; } setWordWrapWidth(_width) { // Sets the width (in pixels) to use for wrapping lines. } - setFontSize(_fontSize) { + setFontSize(_fontSize): this { // Sets the font size of this Game Object. + return this; } getBounds() { return { width: this.width, height: this.height }; } - setColor(_color) { + setColor(_color): this { // Sets the tint of this Game Object. + return this; } - setShadowColor(_color) { + setShadowColor(_color): this { // Sets the shadow color. + return this; } - setTint(_color) { + setTint(_color: this) { // Sets the tint of this Game Object. + return this; } - setStrokeStyle(_thickness, _color) { + setStrokeStyle(_thickness, _color): this { // Sets the stroke style for the graphics. return this; } - setDepth(_depth) { - // Sets the depth of this Game Object. + setDepth(_depth): this { + // Sets the depth of this Game Object.\ + return this; } - setTexture(_texture) { - // Sets the texture this Game Object will use to render with. + setTexture(_texture): this { + // Sets the texture this Game Object will use to render with.\ + return this; } - clearTint() { - // Clears any previously set tint. + clearTint(): this { + // Clears any previously set tint.\ + return this; } - sendToBack() { - // Sends this Game Object to the back of its parent's display list. + sendToBack(): this { + // Sends this Game Object to the back of its parent's display list.\ + return this; } - moveTo(_obj) { - // Moves this Game Object to the given index in the list. + moveTo(_obj): this { + // Moves this Game Object to the given index in the list.\ + return this; } - moveAbove(_obj) { + moveAbove(_obj): this { // Moves this Game Object to be above the given Game Object in the display list. + return this; } - moveBelow(_obj) { + moveBelow(_obj): this { // Moves this Game Object to be below the given Game Object in the display list. + return this; } - setName(name: string) { + setName(name: string): this { this.name = name; + return this; } - bringToTop(_obj) { + bringToTop(_obj): this { // Brings this Game Object to the top of its parents display list. + return this; } - on(_event, _callback, _source) {} + on(_event, _callback, _source): this { + return this; + } - add(obj) { + add(...obj: MockGameObject[]): this { // Adds a child to this Game Object. - this.list.push(obj); + this.list.push(...obj); + return this; } - removeAll() { + removeAll(): this { // Removes all Game Objects from this Container. this.list = []; + return this; } - addAt(obj, index) { + addAt(obj: MockGameObject | MockGameObject[], index = 0): this { // Adds a Game Object to this Container at the given index. - this.list.splice(index, 0, obj); + if (!Array.isArray(obj)) { + obj = [obj]; + } + this.list.splice(index, 0, ...obj); + return this; } - remove(obj) { - const index = this.list.indexOf(obj); - if (index !== -1) { - this.list.splice(index, 1); + remove(obj: MockGameObject | MockGameObject[], destroyChild = false): this { + if (!Array.isArray(obj)) { + obj = [obj]; } + for (const item of obj) { + const index = this.list.indexOf(item); + if (index !== -1) { + this.list.splice(index, 1); + } + if (destroyChild) { + item.destroy?.(); + } + } + return this; } getIndex(obj) { @@ -210,15 +264,28 @@ export default class MockContainer implements MockGameObject { return this.list; } - getByName(key: string) { + getByName(key: string): MockGameObject | null { return this.list.find(v => v.name === key) ?? new MockContainer(this.textureManager, 0, 0); } - disableInteractive = () => null; + disableInteractive(): this { + return this; + } - each(method) { + each(method): this { for (const item of this.list) { method(item); } + return this; + } + + copyPosition(source: { x?: number; y?: number }): this { + if (source.x !== undefined) { + this.x = source.x; + } + if (source.y !== undefined) { + this.y = source.y; + } + return this; } } diff --git a/test/testUtils/mocks/mocksContainer/mockGraphics.ts b/test/testUtils/mocks/mocksContainer/mockGraphics.ts index ebf84e935e3..1650d2f9f60 100644 --- a/test/testUtils/mocks/mocksContainer/mockGraphics.ts +++ b/test/testUtils/mocks/mocksContainer/mockGraphics.ts @@ -8,57 +8,76 @@ export default class MockGraphics implements MockGameObject { this.scene = textureManager.scene; } - fillStyle(_color) { + fillStyle(_color): this { // Sets the fill style to be used by the fill methods. + return this; } - beginPath() { + beginPath(): this { // Starts a new path by emptying the list of sub-paths. Call this method when you want to create a new path. + return this; } - fillRect(_x, _y, _width, _height) { + fillRect(_x, _y, _width, _height): this { // Adds a rectangle shape to the path which is filled when you call fill(). + return this; } - createGeometryMask() { + createGeometryMask(): this { // Creates a geometry mask. + return this; } - setOrigin(_x, _y) {} + setOrigin(_x, _y): this { + return this; + } - setAlpha(_alpha) {} + setAlpha(_alpha): this { + return this; + } - setVisible(_visible) {} + setVisible(_visible): this { + return this; + } - setName(_name) {} + setName(_name) { + return this; + } - once(_event, _callback, _source) {} + once(_event, _callback, _source) { + return this; + } - removeFromDisplayList() { + removeFromDisplayList(): this { // same as remove or destroy + return this; } addedToScene() { // This callback is invoked when this Game Object is added to a Scene. } - setPositionRelative(_source, _x, _y) { + setPositionRelative(_source, _x, _y): this { /// Sets the position of this Game Object to be a relative position from the source Game Object. + return this; } destroy() { this.list = []; } - setScale(_scale) { - // Sets the scale of this Game Object. + setScale(_scale): this { + return this; } - off(_event, _callback, _source) {} + off(_event, _callback, _source): this { + return this; + } - add(obj) { + add(obj): this { // Adds a child to this Game Object. this.list.push(obj); + return this; } removeAll() { @@ -90,4 +109,8 @@ export default class MockGraphics implements MockGameObject { getAll() { return this.list; } + + copyPosition(_source): this { + return this; + } } diff --git a/test/testUtils/mocks/mocksContainer/mockRectangle.ts b/test/testUtils/mocks/mocksContainer/mockRectangle.ts index 7bdf343759d..f9a92c41904 100644 --- a/test/testUtils/mocks/mocksContainer/mockRectangle.ts +++ b/test/testUtils/mocks/mocksContainer/mockRectangle.ts @@ -10,34 +10,47 @@ export default class MockRectangle implements MockGameObject { this.fillColor = fillColor; this.scene = textureManager.scene; } - setOrigin(_x, _y) {} + setOrigin(_x, _y): this { + return this; + } - setAlpha(_alpha) {} - setVisible(_visible) {} + setAlpha(_alpha): this { + return this; + } + setVisible(_visible): this { + return this; + } - setName(_name) {} + setName(_name): this { + return this; + } - once(_event, _callback, _source) {} + once(_event, _callback, _source): this { + return this; + } - removeFromDisplayList() { + removeFromDisplayList(): this { // same as remove or destroy + return this; } addedToScene() { // This callback is invoked when this Game Object is added to a Scene. } - setPositionRelative(_source, _x, _y) { + setPositionRelative(_source, _x, _y): this { /// Sets the position of this Game Object to be a relative position from the source Game Object. + return this; } destroy() { this.list = []; } - add(obj) { + add(obj): this { // Adds a child to this Game Object. this.list.push(obj); + return this; } removeAll() { @@ -45,16 +58,18 @@ export default class MockRectangle implements MockGameObject { this.list = []; } - addAt(obj, index) { + addAt(obj, index): this { // Adds a Game Object to this Container at the given index. this.list.splice(index, 0, obj); + return this; } - remove(obj) { + remove(obj): this { const index = this.list.indexOf(obj); if (index !== -1) { this.list.splice(index, 1); } + return this; } getIndex(obj) { @@ -69,9 +84,12 @@ export default class MockRectangle implements MockGameObject { getAll() { return this.list; } - setScale(_scale) { + setScale(_scale): this { // return this.phaserText.setScale(scale); + return this; } - off() {} + off(): this { + return this; + } } diff --git a/test/testUtils/mocks/mocksContainer/mockSprite.ts b/test/testUtils/mocks/mocksContainer/mockSprite.ts index dcc3588f127..b8ccfcced1f 100644 --- a/test/testUtils/mocks/mocksContainer/mockSprite.ts +++ b/test/testUtils/mocks/mocksContainer/mockSprite.ts @@ -1,6 +1,5 @@ import Phaser from "phaser"; import type { MockGameObject } from "../mockGameObject"; -import Sprite = Phaser.GameObjects.Sprite; import Frame = Phaser.Textures.Frame; export default class MockSprite implements MockGameObject { @@ -21,7 +20,9 @@ export default class MockSprite implements MockGameObject { Phaser.GameObjects.Sprite.prototype.setInteractive = this.setInteractive; // @ts-ignore Phaser.GameObjects.Sprite.prototype.setTexture = this.setTexture; + // @ts-ignore Phaser.GameObjects.Sprite.prototype.setSizeToFrame = this.setSizeToFrame; + // @ts-ignore Phaser.GameObjects.Sprite.prototype.setFrame = this.setFrame; // Phaser.GameObjects.Sprite.prototype.disable = this.disable; @@ -37,46 +38,55 @@ export default class MockSprite implements MockGameObject { }; } - setTexture(_key: string, _frame?: string | number) { + setTexture(_key: string, _frame?: string | number): this { return this; } - setSizeToFrame(_frame?: boolean | Frame): Sprite { - return {} as Sprite; + setSizeToFrame(_frame?: boolean | Frame): this { + return this; } - setPipeline(obj) { + setPipeline(obj): this { // Sets the pipeline of this Game Object. - return this.phaserSprite.setPipeline(obj); + this.phaserSprite.setPipeline(obj); + return this; } - off(_event, _callback, _source) {} + off(_event, _callback, _source): this { + return this; + } - setTintFill(color) { + setTintFill(color): this { // Sets the tint fill color. - return this.phaserSprite.setTintFill(color); + this.phaserSprite.setTintFill(color); + return this; } - setScale(scale) { - return this.phaserSprite.setScale(scale); + setScale(scale = 1): this { + this.phaserSprite.setScale(scale); + return this; } - setOrigin(x, y) { - return this.phaserSprite.setOrigin(x, y); + setOrigin(x = 0.5, y = x): this { + this.phaserSprite.setOrigin(x, y); + return this; } - setSize(width, height) { + setSize(width, height): this { // Sets the size of this Game Object. - return this.phaserSprite.setSize(width, height); + this.phaserSprite.setSize(width, height); + return this; } - once(event, callback, source) { - return this.phaserSprite.once(event, callback, source); + once(event, callback, source): this { + this.phaserSprite.once(event, callback, source); + return this; } - removeFromDisplayList() { + removeFromDisplayList(): this { // same as remove or destroy - return this.phaserSprite.removeFromDisplayList(); + this.phaserSprite.removeFromDisplayList(); + return this; } addedToScene() { @@ -84,97 +94,117 @@ export default class MockSprite implements MockGameObject { return this.phaserSprite.addedToScene(); } - setVisible(visible) { - return this.phaserSprite.setVisible(visible); + setVisible(visible): this { + this.phaserSprite.setVisible(visible); + return this; } - setPosition(x, y) { - return this.phaserSprite.setPosition(x, y); + setPosition(x, y): this { + this.phaserSprite.setPosition(x, y); + return this; } - setRotation(radians) { - return this.phaserSprite.setRotation(radians); + setRotation(radians): this { + this.phaserSprite.setRotation(radians); + return this; } - stop() { - return this.phaserSprite.stop(); + stop(): this { + this.phaserSprite.stop(); + return this; } - setInteractive = () => null; - - on(event, callback, source) { - return this.phaserSprite.on(event, callback, source); + setInteractive(): this { + return this; } - setAlpha(alpha) { - return this.phaserSprite.setAlpha(alpha); + on(event, callback, source): this { + this.phaserSprite.on(event, callback, source); + return this; } - setTint(color) { + setAlpha(alpha): this { + this.phaserSprite.setAlpha(alpha); + return this; + } + + setTint(color): this { // Sets the tint of this Game Object. - return this.phaserSprite.setTint(color); + this.phaserSprite.setTint(color); + return this; } - setFrame(frame, _updateSize?: boolean, _updateOrigin?: boolean) { + setFrame(frame, _updateSize?: boolean, _updateOrigin?: boolean): this { // Sets the frame this Game Object will use to render with. this.frame = frame; - return frame; + return this; } - setPositionRelative(source, x, y) { + setPositionRelative(source, x, y): this { /// Sets the position of this Game Object to be a relative position from the source Game Object. - return this.phaserSprite.setPositionRelative(source, x, y); + this.phaserSprite.setPositionRelative(source, x, y); + return this; } - setY(y) { - return this.phaserSprite.setY(y); + setY(y: number): this { + this.phaserSprite.setY(y); + return this; } - setCrop(x, y, width, height) { + setCrop(x: number, y: number, width: number, height: number): this { // Sets the crop size of this Game Object. - return this.phaserSprite.setCrop(x, y, width, height); + this.phaserSprite.setCrop(x, y, width, height); + return this; } - clearTint() { + clearTint(): this { // Clears any previously set tint. - return this.phaserSprite.clearTint(); + this.phaserSprite.clearTint(); + return this; } - disableInteractive() { + disableInteractive(): this { // Disables Interactive features of this Game Object. - return null; + return this; } apply() { - return this.phaserSprite.apply(); + this.phaserSprite.apply(); + return this; } - play() { + play(): this { // return this.phaserSprite.play(); return this; } - setPipelineData(key, value) { + setPipelineData(key: string, value: any): this { this.pipelineData[key] = value; + return this; } destroy() { return this.phaserSprite.destroy(); } - setName(name) { - return this.phaserSprite.setName(name); + setName(name: string): this { + this.phaserSprite.setName(name); + return this; } - setAngle(angle) { - return this.phaserSprite.setAngle(angle); + setAngle(angle): this { + this.phaserSprite.setAngle(angle); + return this; } - setMask() {} + setMask(): this { + return this; + } - add(obj) { + add(obj): this { // Adds a child to this Game Object. this.list.push(obj); + return this; } removeAll() { @@ -182,16 +212,18 @@ export default class MockSprite implements MockGameObject { this.list = []; } - addAt(obj, index) { + addAt(obj, index): this { // Adds a Game Object to this Container at the given index. this.list.splice(index, 0, obj); + return this; } - remove(obj) { + remove(obj): this { const index = this.list.indexOf(obj); if (index !== -1) { this.list.splice(index, 1); } + return this; } getIndex(obj) { @@ -206,4 +238,9 @@ export default class MockSprite implements MockGameObject { getAll() { return this.list; } + + copyPosition(obj): this { + this.phaserSprite.copyPosition(obj); + return this; + } } diff --git a/test/testUtils/mocks/mocksContainer/mockText.ts b/test/testUtils/mocks/mocksContainer/mockText.ts index 1f3f0ad792f..dc648616fe6 100644 --- a/test/testUtils/mocks/mocksContainer/mockText.ts +++ b/test/testUtils/mocks/mocksContainer/mockText.ts @@ -107,42 +107,51 @@ export default class MockText implements MockGameObject { } } - setScale(_scale) { + setScale(_scale): this { // return this.phaserText.setScale(scale); + return this; } - setShadow(_shadowXpos, _shadowYpos, _shadowColor) { + setShadow(_shadowXpos, _shadowYpos, _shadowColor): this { // Sets the shadow settings for this Game Object. // return this.phaserText.setShadow(shadowXpos, shadowYpos, shadowColor); + return this; } - setLineSpacing(_lineSpacing) { + setLineSpacing(_lineSpacing): this { // Sets the line spacing value of this Game Object. // return this.phaserText.setLineSpacing(lineSpacing); + return this; } - setOrigin(_x, _y) { + setOrigin(_x, _y): this { // return this.phaserText.setOrigin(x, y); + return this; } - once(_event, _callback, _source) { + once(_event, _callback, _source): this { // return this.phaserText.once(event, callback, source); + return this; } off(_event, _callback, _obj) {} removedFromScene() {} - addToDisplayList() {} - - setStroke(_color, _thickness) { - // Sets the stroke color and thickness. - // return this.phaserText.setStroke(color, thickness); + addToDisplayList(): this { + return this; } - removeFromDisplayList() { + setStroke(_color, _thickness): this { + // Sets the stroke color and thickness. + // return this.phaserText.setStroke(color, thickness); + return this; + } + + removeFromDisplayList(): this { // same as remove or destroy // return this.phaserText.removeFromDisplayList(); + return this; } addedToScene() { @@ -154,12 +163,14 @@ export default class MockText implements MockGameObject { // return this.phaserText.setVisible(visible); } - setY(_y) { + setY(_y): this { // return this.phaserText.setY(y); + return this; } - setX(_x) { + setX(_x): this { // return this.phaserText.setX(x); + return this; } /** @@ -169,27 +180,33 @@ export default class MockText implements MockGameObject { * @param z The z position of this Game Object. Default 0. * @param w The w position of this Game Object. Default 0. */ - setPosition(_x?: number, _y?: number, _z?: number, _w?: number) {} + setPosition(_x?: number, _y?: number, _z?: number, _w?: number): this { + return this; + } - setText(text) { + setText(text): this { // Sets the text this Game Object will display. // return this.phaserText.setText\(text); this.text = text; + return this; } - setAngle(_angle) { + setAngle(_angle): this { // Sets the angle of this Game Object. // return this.phaserText.setAngle(angle); + return this; } - setPositionRelative(_source, _x, _y) { + setPositionRelative(_source, _x, _y): this { /// Sets the position of this Game Object to be a relative position from the source Game Object. // return this.phaserText.setPositionRelative(source, x, y); + return this; } - setShadowOffset(_offsetX, _offsetY) { + setShadowOffset(_offsetX, _offsetY): this { // Sets the shadow offset values. // return this.phaserText.setShadowOffset(offsetX, offsetY); + return this; } setWordWrapWidth(width) { @@ -197,9 +214,10 @@ export default class MockText implements MockGameObject { this.wordWrapWidth = width; } - setFontSize(_fontSize) { + setFontSize(_fontSize): this { // Sets the font size of this Game Object. // return this.phaserText.setFontSize(fontSize); + return this; } getBounds() { @@ -209,25 +227,31 @@ export default class MockText implements MockGameObject { }; } - setColor(color: string) { + setColor(color: string): this { this.color = color; + return this; } - setInteractive = () => null; + setInteractive(): this { + return this; + } - setShadowColor(_color) { + setShadowColor(_color): this { // Sets the shadow color. // return this.phaserText.setShadowColor(color); + return this; } - setTint(_color) { + setTint(_color): this { // Sets the tint of this Game Object. // return this.phaserText.setTint(color); + return this; } - setStrokeStyle(_thickness, _color) { + setStrokeStyle(_thickness, _color): this { // Sets the stroke style for the graphics. // return this.phaserText.setStrokeStyle(thickness, color); + return this; } destroy() { @@ -235,20 +259,24 @@ export default class MockText implements MockGameObject { this.list = []; } - setAlpha(_alpha) { + setAlpha(_alpha): this { // return this.phaserText.setAlpha(alpha); + return this; } - setName(name: string) { + setName(name: string): this { this.name = name; + return this; } - setAlign(_align) { + setAlign(_align): this { // return this.phaserText.setAlign(align); + return this; } - setMask() { + setMask(): this { /// Sets the mask that this Game Object will use to render with. + return this; } getBottomLeft() { @@ -265,37 +293,43 @@ export default class MockText implements MockGameObject { }; } - disableInteractive() { + disableInteractive(): this { // Disables interaction with this Game Object. + return this; } - clearTint() { + clearTint(): this { // Clears tint on this Game Object. + return this; } - add(obj) { + add(obj): this { // Adds a child to this Game Object. this.list.push(obj); + return this; } - removeAll() { + removeAll(): this { // Removes all Game Objects from this Container. this.list = []; + return this; } - addAt(obj, index) { + addAt(obj, index): this { // Adds a Game Object to this Container at the given index. this.list.splice(index, 0, obj); + return this; } - remove(obj) { + remove(obj): this { const index = this.list.indexOf(obj); if (index !== -1) { this.list.splice(index, 1); } + return this; } - getIndex(obj) { + getIndex(obj): number { const index = this.list.indexOf(obj); return index || -1; } diff --git a/test/testUtils/testFileInitialization.ts b/test/testUtils/testFileInitialization.ts index 15635289e6f..ba90cba7d5b 100644 --- a/test/testUtils/testFileInitialization.ts +++ b/test/testUtils/testFileInitialization.ts @@ -70,10 +70,10 @@ export function initTestFile() { * @param x The relative x position * @param y The relative y position */ - const setPositionRelative = function (guideObject: any, x: number, y: number) { + const setPositionRelative = function (guideObject: any, x: number, y: number): any { const offsetX = guideObject.width * (-0.5 + (0.5 - guideObject.originX)); const offsetY = guideObject.height * (-0.5 + (0.5 - guideObject.originY)); - this.setPosition(guideObject.x + offsetX + x, guideObject.y + offsetY + y); + return this.setPosition(guideObject.x + offsetX + x, guideObject.y + offsetY + y); }; Phaser.GameObjects.Container.prototype.setPositionRelative = setPositionRelative; From d8c00616fc155fdf5a6b90a48a2cc3bb65c80819 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Wed, 28 May 2025 20:00:54 -0500 Subject: [PATCH 171/262] [Test] Add iterate, fix each method in mock container (#5882) --- .../mocks/mocksContainer/mockContainer.ts | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/test/testUtils/mocks/mocksContainer/mockContainer.ts b/test/testUtils/mocks/mocksContainer/mockContainer.ts index e116e7d151a..b392e61f9f7 100644 --- a/test/testUtils/mocks/mocksContainer/mockContainer.ts +++ b/test/testUtils/mocks/mocksContainer/mockContainer.ts @@ -272,9 +272,24 @@ export default class MockContainer implements MockGameObject { return this; } - each(method): this { + // biome-ignore lint/complexity/noBannedTypes: This matches the signature of the method it mocks + each(callback: Function, context?: object, ...args: any[]): this { + if (context !== undefined) { + callback = callback.bind(context); + } + for (const item of this.list.slice()) { + callback(item, ...args); + } + return this; + } + + // biome-ignore lint/complexity/noBannedTypes: This matches the signature of the method it mocks + iterate(callback: Function, context?: object, ...args: any[]): this { + if (context !== undefined) { + callback = callback.bind(context); + } for (const item of this.list) { - method(item); + callback(item, ...args); } return this; } From 86fa3198fd897b3aafbcba7abf5d4dc6e972738e Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Wed, 28 May 2025 21:47:27 -0500 Subject: [PATCH 172/262] [Test] Fix mock text to make it compatible with method chaining (#5884) --- test/testUtils/mocks/mocksContainer/mockText.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/test/testUtils/mocks/mocksContainer/mockText.ts b/test/testUtils/mocks/mocksContainer/mockText.ts index dc648616fe6..8f72cd0d34f 100644 --- a/test/testUtils/mocks/mocksContainer/mockText.ts +++ b/test/testUtils/mocks/mocksContainer/mockText.ts @@ -159,8 +159,8 @@ export default class MockText implements MockGameObject { // return this.phaserText.addedToScene(); } - setVisible(_visible) { - // return this.phaserText.setVisible(visible); + setVisible(_visible): this { + return this; } setY(_y): this { @@ -209,9 +209,10 @@ export default class MockText implements MockGameObject { return this; } - setWordWrapWidth(width) { + setWordWrapWidth(width): this { // Sets the width (in pixels) to use for wrapping lines. this.wordWrapWidth = width; + return this; } setFontSize(_fontSize): this { @@ -351,5 +352,6 @@ export default class MockText implements MockGameObject { return this.runWordWrap(this.text).split("\n"); } + // biome-ignore lint/complexity/noBannedTypes: This matches the signature of the class this mocks on(_event: string | symbol, _fn: Function, _context?: any) {} } From f9e6785c351d07e7f2a7e11299831aff476c6db4 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Wed, 28 May 2025 22:18:06 -0500 Subject: [PATCH 173/262] [Test] Fix mocks' add method to match phaser signature (#5885) --- test/testUtils/mocks/mocksContainer/mockContainer.ts | 9 ++++++--- test/testUtils/mocks/mocksContainer/mockRectangle.ts | 8 ++++++-- test/testUtils/mocks/mocksContainer/mockSprite.ts | 8 ++++++-- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/test/testUtils/mocks/mocksContainer/mockContainer.ts b/test/testUtils/mocks/mocksContainer/mockContainer.ts index b392e61f9f7..883c3856c26 100644 --- a/test/testUtils/mocks/mocksContainer/mockContainer.ts +++ b/test/testUtils/mocks/mocksContainer/mockContainer.ts @@ -214,9 +214,12 @@ export default class MockContainer implements MockGameObject { return this; } - add(...obj: MockGameObject[]): this { - // Adds a child to this Game Object. - this.list.push(...obj); + add(obj: MockGameObject | MockGameObject[]): this { + if (Array.isArray(obj)) { + this.list.push(...obj); + } else { + this.list.push(obj); + } return this; } diff --git a/test/testUtils/mocks/mocksContainer/mockRectangle.ts b/test/testUtils/mocks/mocksContainer/mockRectangle.ts index f9a92c41904..c11af824c56 100644 --- a/test/testUtils/mocks/mocksContainer/mockRectangle.ts +++ b/test/testUtils/mocks/mocksContainer/mockRectangle.ts @@ -47,9 +47,13 @@ export default class MockRectangle implements MockGameObject { this.list = []; } - add(obj): this { + add(obj: MockGameObject | MockGameObject[]): this { // Adds a child to this Game Object. - this.list.push(obj); + if (Array.isArray(obj)) { + this.list.push(...obj); + } else { + this.list.push(obj); + } return this; } diff --git a/test/testUtils/mocks/mocksContainer/mockSprite.ts b/test/testUtils/mocks/mocksContainer/mockSprite.ts index b8ccfcced1f..ad70b6ced07 100644 --- a/test/testUtils/mocks/mocksContainer/mockSprite.ts +++ b/test/testUtils/mocks/mocksContainer/mockSprite.ts @@ -201,9 +201,13 @@ export default class MockSprite implements MockGameObject { return this; } - add(obj): this { + add(obj: MockGameObject | MockGameObject[]): this { // Adds a child to this Game Object. - this.list.push(obj); + if (Array.isArray(obj)) { + this.list.push(...obj); + } else { + this.list.push(obj); + } return this; } From 8fcb33d11aab3586e452ed02a668774677f65239 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Thu, 29 May 2025 19:11:53 -0500 Subject: [PATCH 174/262] [Bug] Fix improperly named sprite key for enemy boss' battle UI (#5888) --- src/ui/battle-info/battle-info.ts | 2 +- src/ui/battle-info/enemy-battle-info.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/battle-info/battle-info.ts b/src/ui/battle-info/battle-info.ts index 71596bf0f43..7e6cc12bd3d 100644 --- a/src/ui/battle-info/battle-info.ts +++ b/src/ui/battle-info/battle-info.ts @@ -230,7 +230,7 @@ export default abstract class BattleInfo extends Phaser.GameObjects.Container { this.box = globalScene.add.sprite(0, 0, this.getTextureName()).setName("box").setOrigin(1, 0.5); this.add(this.box); - this.nameText = addTextObject(player ? -115 : -124, player ? -15.2 : -11.2, "", TextStyle.BATTLE_INFO) + this.nameText = addTextObject(posParams.nameTextX, posParams.nameTextY, "", TextStyle.BATTLE_INFO) .setName("text_name") .setOrigin(0); this.add(this.nameText); diff --git a/src/ui/battle-info/enemy-battle-info.ts b/src/ui/battle-info/enemy-battle-info.ts index e8f5434dcf2..7c16f01ac38 100644 --- a/src/ui/battle-info/enemy-battle-info.ts +++ b/src/ui/battle-info/enemy-battle-info.ts @@ -29,7 +29,7 @@ export class EnemyBattleInfo extends BattleInfo { } override getTextureName(): string { - return this.boss ? "pbinfo_enemy_boss_mini" : "pbinfo_enemy_mini"; + return this.boss ? "pbinfo_enemy_boss" : "pbinfo_enemy_mini"; } override constructTypeIcons(): void { From 14e01c3da12e1fa6cabdb87259eaef0bec9c8cbb Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Thu, 29 May 2025 22:27:39 -0500 Subject: [PATCH 175/262] [Test] Add missing methods to many mocks (#5891) --- test/testUtils/mocks/mockGameObject.ts | 3 +++ test/testUtils/mocks/mockVideoGameObject.ts | 17 +++++++++++++---- .../mocks/mocksContainer/mockContainer.ts | 6 ++++++ .../mocks/mocksContainer/mockGraphics.ts | 6 ++++++ .../mocks/mocksContainer/mockRectangle.ts | 6 ++++++ .../mocks/mocksContainer/mockSprite.ts | 6 ++++++ test/testUtils/mocks/mocksContainer/mockText.ts | 5 +++++ .../mocks/mocksContainer/mockTexture.ts | 11 +++++++++++ 8 files changed, 56 insertions(+), 4 deletions(-) diff --git a/test/testUtils/mocks/mockGameObject.ts b/test/testUtils/mocks/mockGameObject.ts index 0dff7c48c73..1e156b99d21 100644 --- a/test/testUtils/mocks/mockGameObject.ts +++ b/test/testUtils/mocks/mockGameObject.ts @@ -1,4 +1,7 @@ export interface MockGameObject { name: string; + active: boolean; destroy?(): void; + setActive(active: boolean): this; + setName(name: string): this; } diff --git a/test/testUtils/mocks/mockVideoGameObject.ts b/test/testUtils/mocks/mockVideoGameObject.ts index 65a5c37b244..1789229b1c7 100644 --- a/test/testUtils/mocks/mockVideoGameObject.ts +++ b/test/testUtils/mocks/mockVideoGameObject.ts @@ -3,11 +3,20 @@ import type { MockGameObject } from "./mockGameObject"; /** Mocks video-related stuff */ export class MockVideoGameObject implements MockGameObject { public name: string; + public active = true; public play = () => null; public stop = () => this; - public setOrigin = () => null; - public setScale = () => null; - public setVisible = () => null; - public setLoop = () => null; + public setOrigin = () => this; + public setScale = () => this; + public setVisible = () => this; + public setLoop = () => this; + public setName = (name: string) => { + this.name = name; + return this; + }; + public setActive = (active: boolean) => { + this.active = active; + return this; + }; } diff --git a/test/testUtils/mocks/mocksContainer/mockContainer.ts b/test/testUtils/mocks/mocksContainer/mockContainer.ts index 883c3856c26..f1371643ce3 100644 --- a/test/testUtils/mocks/mocksContainer/mockContainer.ts +++ b/test/testUtils/mocks/mocksContainer/mockContainer.ts @@ -14,6 +14,7 @@ export default class MockContainer implements MockGameObject { protected textureManager; public list: MockGameObject[] = []; public name: string; + public active = true; constructor(textureManager: MockTextureManager, x: number, y: number) { this.x = x; @@ -306,4 +307,9 @@ export default class MockContainer implements MockGameObject { } return this; } + + setActive(active: boolean): this { + this.active = active; + return this; + } } diff --git a/test/testUtils/mocks/mocksContainer/mockGraphics.ts b/test/testUtils/mocks/mocksContainer/mockGraphics.ts index 1650d2f9f60..cd43bb3a877 100644 --- a/test/testUtils/mocks/mocksContainer/mockGraphics.ts +++ b/test/testUtils/mocks/mocksContainer/mockGraphics.ts @@ -4,6 +4,7 @@ export default class MockGraphics implements MockGameObject { private scene; public list: MockGameObject[] = []; public name: string; + public active = true; constructor(textureManager, _config) { this.scene = textureManager.scene; } @@ -113,4 +114,9 @@ export default class MockGraphics implements MockGameObject { copyPosition(_source): this { return this; } + + setActive(active: boolean): this { + this.active = active; + return this; + } } diff --git a/test/testUtils/mocks/mocksContainer/mockRectangle.ts b/test/testUtils/mocks/mocksContainer/mockRectangle.ts index c11af824c56..7f54a0e255f 100644 --- a/test/testUtils/mocks/mocksContainer/mockRectangle.ts +++ b/test/testUtils/mocks/mocksContainer/mockRectangle.ts @@ -5,6 +5,7 @@ export default class MockRectangle implements MockGameObject { private scene; public list: MockGameObject[] = []; public name: string; + public active = true; constructor(textureManager, _x, _y, _width, _height, fillColor) { this.fillColor = fillColor; @@ -96,4 +97,9 @@ export default class MockRectangle implements MockGameObject { off(): this { return this; } + + setActive(active: boolean): this { + this.active = active; + return this; + } } diff --git a/test/testUtils/mocks/mocksContainer/mockSprite.ts b/test/testUtils/mocks/mocksContainer/mockSprite.ts index ad70b6ced07..df36b3a29fd 100644 --- a/test/testUtils/mocks/mocksContainer/mockSprite.ts +++ b/test/testUtils/mocks/mocksContainer/mockSprite.ts @@ -13,6 +13,7 @@ export default class MockSprite implements MockGameObject { public anims; public list: MockGameObject[] = []; public name: string; + public active = true; constructor(textureManager, x, y, texture) { this.textureManager = textureManager; this.scene = textureManager.scene; @@ -247,4 +248,9 @@ export default class MockSprite implements MockGameObject { this.phaserSprite.copyPosition(obj); return this; } + + setActive(active: boolean): this { + this.phaserSprite.setActive(active); + return this; + } } diff --git a/test/testUtils/mocks/mocksContainer/mockText.ts b/test/testUtils/mocks/mocksContainer/mockText.ts index 8f72cd0d34f..2345ff70c0d 100644 --- a/test/testUtils/mocks/mocksContainer/mockText.ts +++ b/test/testUtils/mocks/mocksContainer/mockText.ts @@ -12,6 +12,7 @@ export default class MockText implements MockGameObject { public text = ""; public name: string; public color?: string; + public active = true; constructor(textureManager, _x, _y, _content, _styleOptions) { this.scene = textureManager.scene; @@ -354,4 +355,8 @@ export default class MockText implements MockGameObject { // biome-ignore lint/complexity/noBannedTypes: This matches the signature of the class this mocks on(_event: string | symbol, _fn: Function, _context?: any) {} + + setActive(_active: boolean): this { + return this; + } } diff --git a/test/testUtils/mocks/mocksContainer/mockTexture.ts b/test/testUtils/mocks/mocksContainer/mockTexture.ts index eb8b70902fa..3b01f9ab4ea 100644 --- a/test/testUtils/mocks/mocksContainer/mockTexture.ts +++ b/test/testUtils/mocks/mocksContainer/mockTexture.ts @@ -12,6 +12,7 @@ export default class MockTexture implements MockGameObject { public frames: object; public firstFrame: string; public name: string; + public active: boolean; constructor(manager, key: string, source) { this.manager = manager; @@ -39,4 +40,14 @@ export default class MockTexture implements MockGameObject { getSourceImage() { return null; } + + setActive(active: boolean): this { + this.active = active; + return this; + } + + setName(name: string): this { + this.name = name; + return this; + } } From ff6f9131ae50da6002a7114a721bea1d727a8dde Mon Sep 17 00:00:00 2001 From: Jimmybald1 <122436263+Jimmybald1@users.noreply.github.com> Date: Fri, 30 May 2025 05:39:55 +0200 Subject: [PATCH 176/262] [Dev] Fixed biome override not working for Daily Mode (#5776) --- src/game-mode.ts | 10 +++++++--- src/overrides.ts | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/game-mode.ts b/src/game-mode.ts index ec7171b0024..97398d2b0a9 100644 --- a/src/game-mode.ts +++ b/src/game-mode.ts @@ -7,7 +7,7 @@ import type PokemonSpecies from "./data/pokemon-species"; import { allSpecies } from "./data/pokemon-species"; import type { Arena } from "./field/arena"; import Overrides from "#app/overrides"; -import { randSeedInt, randSeedItem } from "#app/utils/common"; +import { isNullOrUndefined, randSeedInt, randSeedItem } from "#app/utils/common"; import { Biome } from "#enums/biome"; import { Species } from "#enums/species"; import { Challenges } from "./enums/challenges"; @@ -124,16 +124,20 @@ export class GameMode implements GameModeConfig { /** * @returns either: - * - random biome for Daily mode * - override from overrides.ts + * - random biome for Daily mode * - Town */ getStartingBiome(): Biome { + if (!isNullOrUndefined(Overrides.STARTING_BIOME_OVERRIDE)) { + return Overrides.STARTING_BIOME_OVERRIDE; + } + switch (this.modeId) { case GameModes.DAILY: return getDailyStartingBiome(); default: - return Overrides.STARTING_BIOME_OVERRIDE || Biome.TOWN; + return Biome.TOWN; } } diff --git a/src/overrides.ts b/src/overrides.ts index 5bbd29b355f..95c758d7c43 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -73,7 +73,7 @@ class DefaultOverrides { */ readonly BATTLE_STYLE_OVERRIDE: BattleStyle | null = null; readonly STARTING_WAVE_OVERRIDE: number = 0; - readonly STARTING_BIOME_OVERRIDE: Biome = Biome.TOWN; + readonly STARTING_BIOME_OVERRIDE: Biome | null = null; readonly ARENA_TINT_OVERRIDE: TimeOfDay | null = null; /** Multiplies XP gained by this value including 0. Set to null to ignore the override. */ readonly XP_MULTIPLIER_OVERRIDE: number | null = null; From 901ed7324770e7a8d94cd13f78b5d20796b36ed4 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Thu, 29 May 2025 22:51:36 -0500 Subject: [PATCH 177/262] Cleanup evolution scene handler --- src/ui/evolution-scene-handler.ts | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/ui/evolution-scene-handler.ts b/src/ui/evolution-scene-handler.ts index cea91ce4e2c..7372fc6f2b5 100644 --- a/src/ui/evolution-scene-handler.ts +++ b/src/ui/evolution-scene-handler.ts @@ -22,18 +22,12 @@ export default class EvolutionSceneHandler extends MessageUiHandler { const ui = this.getUi(); this.evolutionContainer = globalScene.add.container(0, -globalScene.game.canvas.height / 6); - ui.add(this.evolutionContainer); - const messageBg = globalScene.add.sprite(0, 0, "bg", globalScene.windowType); - messageBg.setOrigin(0, 1); - messageBg.setVisible(false); - ui.add(messageBg); + const messageBg = globalScene.add.sprite(0, 0, "bg", globalScene.windowType).setOrigin(0, 1).setVisible(false); this.messageBg = messageBg; - this.messageContainer = globalScene.add.container(12, -39); - this.messageContainer.setVisible(false); - ui.add(this.messageContainer); + this.messageContainer = globalScene.add.container(12, -39).setVisible(false); const message = addTextObject(0, 0, "", TextStyle.MESSAGE, { maxLines: 2, @@ -43,6 +37,8 @@ export default class EvolutionSceneHandler extends MessageUiHandler { }); this.messageContainer.add(message); + ui.add([this.evolutionContainer, this.messageBg, this.messageContainer]); + this.message = message; this.initPromptSprite(this.messageContainer); @@ -52,10 +48,8 @@ export default class EvolutionSceneHandler extends MessageUiHandler { super.show(_args); globalScene.ui.bringToTop(this.evolutionContainer); - globalScene.ui.bringToTop(this.messageBg); - globalScene.ui.bringToTop(this.messageContainer); - this.messageBg.setVisible(true); - this.messageContainer.setVisible(true); + globalScene.ui.bringToTop(this.messageBg.setVisible(true)); + globalScene.ui.bringToTop(this.messageContainer.setVisible(true)); return true; } From d5f7665b15ef923d102b18c2e812edd73604c372 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Fri, 30 May 2025 12:24:05 -0700 Subject: [PATCH 178/262] [Test] Update test utils (#5848) * [Test] Add/update test utils - Add `FieldHelper` which has methods to mock a pokemon's ability or force a pokemon to be Terastallized - Add `MoveHelper#use` which can be used to remove the need for setting pokemon move overrides by modifying the moveset of the pokemon - Add `MoveHelper#selectEnemyMove` to make an enemy pokemon select a specific move - Add `MoveHelper#forceEnemyMove` which modifies the pokemon's moveset and then uses `selectEnemyMove` - Fix `GameManager#toNextTurn` to work correctly in double battles - Add `GameManager#toEndOfTurn` which advances to the end of the turn * Update some tests - Disable broken Good As Gold test and add `.edgeCase` to Good As Gold - Fix Powder test - Update some tests to demonstrate new methods --- src/data/abilities/ability.ts | 7 +- test/abilities/good_as_gold.test.ts | 32 ++++---- test/moves/alluring_voice.test.ts | 10 +-- test/moves/chloroblast.test.ts | 15 ++-- test/moves/powder.test.ts | 17 ++-- test/testUtils/gameManager.ts | 30 ++++--- test/testUtils/helpers/field-helper.ts | 87 +++++++++++++++++++++ test/testUtils/helpers/moveHelper.ts | 104 ++++++++++++++++++++++++- 8 files changed, 252 insertions(+), 50 deletions(-) create mode 100644 test/testUtils/helpers/field-helper.ts diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index b677dd2bd11..f49863639f0 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -7425,7 +7425,12 @@ export function initAbilities() { .uncopiable() .attr(NoTransformAbilityAbAttr), new Ability(Abilities.GOOD_AS_GOLD, 9) - .attr(MoveImmunityAbAttr, (pokemon, attacker, move) => pokemon !== attacker && move.category === MoveCategory.STATUS && ![ MoveTarget.ENEMY_SIDE, MoveTarget.BOTH_SIDES, MoveTarget.USER_SIDE ].includes(move.moveTarget)) + .attr(MoveImmunityAbAttr, (pokemon, attacker, move) => + pokemon !== attacker + && move.category === MoveCategory.STATUS + && ![ MoveTarget.ENEMY_SIDE, MoveTarget.BOTH_SIDES, MoveTarget.USER_SIDE ].includes(move.moveTarget) + ) + .edgeCase() // Heal Bell should not cure the status of a Pokemon with Good As Gold .ignorable(), new Ability(Abilities.VESSEL_OF_RUIN, 9) .attr(FieldMultiplyStatAbAttr, Stat.SPATK, 0.75) diff --git a/test/abilities/good_as_gold.test.ts b/test/abilities/good_as_gold.test.ts index 09bdaafb11f..9b1d582f64c 100644 --- a/test/abilities/good_as_gold.test.ts +++ b/test/abilities/good_as_gold.test.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; -import { allAbilities } from "#app/data/data-lists"; import { ArenaTagSide } from "#app/data/arena-tag"; +import { allAbilities } from "#app/data/data-lists"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { Stat } from "#app/enums/stat"; @@ -107,35 +107,33 @@ describe("Abilities - Good As Gold", () => { expect(game.scene.getPlayerField()[1].getTag(BattlerTagType.HELPING_HAND)).toBeUndefined(); }); - it("should block the ally's heal bell, but only if the good as gold user is on the field", async () => { - game.override.battleStyle("double"); - game.override.moveset([Moves.HEAL_BELL, Moves.SPLASH]); - game.override.statusEffect(StatusEffect.BURN); - await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS, Species.ABRA]); - const [good_as_gold, ball_fetch] = game.scene.getPlayerField(); - - // Force second pokemon to have ball fetch to isolate to a single mon. - vi.spyOn(ball_fetch, "getAbility").mockReturnValue(allAbilities[Abilities.BALL_FETCH]); + // TODO: re-enable when heal bell is fixed + it.todo("should block the ally's heal bell, but only if the good as gold user is on the field", async () => { + game.override.battleStyle("double").statusEffect(StatusEffect.BURN); + await game.classicMode.startBattle([Species.MILOTIC, Species.FEEBAS, Species.ABRA]); + const [milotic, feebas, abra] = game.scene.getPlayerParty(); + game.field.mockAbility(milotic, Abilities.GOOD_AS_GOLD); + game.field.mockAbility(feebas, Abilities.BALL_FETCH); + game.field.mockAbility(abra, Abilities.BALL_FETCH); // turn 1 - game.move.select(Moves.SPLASH, 0); - game.move.select(Moves.HEAL_BELL, 1); + game.move.use(Moves.SPLASH, 0); + game.move.use(Moves.HEAL_BELL, 1); await game.toNextTurn(); - expect(good_as_gold.status?.effect).toBe(StatusEffect.BURN); + expect(milotic.status?.effect).toBe(StatusEffect.BURN); game.doSwitchPokemon(2); - game.move.select(Moves.HEAL_BELL, 0); + game.move.use(Moves.HEAL_BELL, 1); await game.toNextTurn(); - expect(good_as_gold.status?.effect).toBeUndefined(); + expect(milotic.status?.effect).toBeUndefined(); }); it("should not block field targeted effects like rain dance", async () => { game.override.battleStyle("single"); game.override.enemyMoveset([Moves.RAIN_DANCE]); - game.override.weather(WeatherType.NONE); await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.SPLASH, 0); + game.move.use(Moves.SPLASH, 0); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.RAIN); diff --git a/test/moves/alluring_voice.test.ts b/test/moves/alluring_voice.test.ts index 240e008f311..9265c5f970d 100644 --- a/test/moves/alluring_voice.test.ts +++ b/test/moves/alluring_voice.test.ts @@ -29,20 +29,18 @@ describe("Moves - Alluring Voice", () => { .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.ICE_SCALES) - .enemyMoveset([Moves.HOWL]) + .enemyMoveset(Moves.HOWL) .startingLevel(10) .enemyLevel(10) - .starterSpecies(Species.FEEBAS) - .ability(Abilities.BALL_FETCH) - .moveset([Moves.ALLURING_VOICE]); + .ability(Abilities.BALL_FETCH); }); it("should confuse the opponent if their stat stages were raised", async () => { - await game.classicMode.startBattle(); + await game.classicMode.startBattle([Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.ALLURING_VOICE); + game.move.use(Moves.ALLURING_VOICE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to(BerryPhase); diff --git a/test/moves/chloroblast.test.ts b/test/moves/chloroblast.test.ts index 175227bbd5e..b2130da83eb 100644 --- a/test/moves/chloroblast.test.ts +++ b/test/moves/chloroblast.test.ts @@ -1,3 +1,4 @@ +import { MoveResult } from "#app/field/pokemon"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; @@ -22,21 +23,23 @@ describe("Moves - Chloroblast", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.CHLOROBLAST]) .ability(Abilities.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.PROTECT); + .enemyAbility(Abilities.BALL_FETCH); }); it("should not deal recoil damage if the opponent uses protect", async () => { await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.CHLOROBLAST); - await game.phaseInterceptor.to("BerryPhase"); + game.move.use(Moves.CHLOROBLAST); + await game.move.forceEnemyMove(Moves.PROTECT); + await game.toEndOfTurn(); - expect(game.scene.getPlayerPokemon()!.isFullHp()).toBe(true); + const player = game.field.getPlayerPokemon(); + + expect(player.isFullHp()).toBe(true); + expect(player.getLastXMoves()[0]).toMatchObject({ result: MoveResult.MISS, move: Moves.CHLOROBLAST }); }); }); diff --git a/test/moves/powder.test.ts b/test/moves/powder.test.ts index 457beb60f91..c6114db3ff1 100644 --- a/test/moves/powder.test.ts +++ b/test/moves/powder.test.ts @@ -1,15 +1,15 @@ -import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; -import Phaser from "phaser"; -import GameManager from "#test/testUtils/gameManager"; +import { BattlerIndex } from "#app/battle"; +import { MoveResult, PokemonMove } from "#app/field/pokemon"; +import { BerryPhase } from "#app/phases/berry-phase"; +import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; -import { BerryPhase } from "#app/phases/berry-phase"; -import { MoveResult, PokemonMove } from "#app/field/pokemon"; import { PokemonType } from "#enums/pokemon-type"; -import { MoveEffectPhase } from "#app/phases/move-effect-phase"; +import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; -import { BattlerIndex } from "#app/battle"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; describe("Moves - Powder", () => { let phaserGame: Phaser.Game; @@ -161,7 +161,6 @@ describe("Moves - Powder", () => { game.move.select(Moves.ROAR, 0, BattlerIndex.ENEMY_2); game.move.select(Moves.SPLASH, 1); await game.toNextTurn(); - await game.toNextTurn(); // Requires game.toNextTurn() twice due to double battle // Turn 2: Enemy should activate Powder twice: From using Ember, and from copying Fiery Dance via Dancer playerPokemon.hp = playerPokemon.getMaxHp(); diff --git a/test/testUtils/gameManager.ts b/test/testUtils/gameManager.ts index 8dd90decf1a..07cea3b1328 100644 --- a/test/testUtils/gameManager.ts +++ b/test/testUtils/gameManager.ts @@ -5,6 +5,7 @@ import { getMoveTargets } from "#app/data/moves/move"; import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; import Trainer from "#app/field/trainer"; import { GameModes, getGameMode } from "#app/game-mode"; +import { globalScene } from "#app/global-scene"; import { ModifierTypeOption, modifierTypes } from "#app/modifier/modifier-type"; import overrides from "#app/overrides"; import { CheckSwitchPhase } from "#app/phases/check-switch-phase"; @@ -22,15 +23,13 @@ import { TitlePhase } from "#app/phases/title-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; import { TurnStartPhase } from "#app/phases/turn-start-phase"; -import ErrorInterceptor from "#test/testUtils/errorInterceptor"; -import type InputsHandler from "#test/testUtils/inputsHandler"; import type BallUiHandler from "#app/ui/ball-ui-handler"; import type BattleMessageUiHandler from "#app/ui/battle-message-ui-handler"; import type CommandUiHandler from "#app/ui/command-ui-handler"; import type ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import type PartyUiHandler from "#app/ui/party-ui-handler"; +import type StarterSelectUiHandler from "#app/ui/starter-select-ui-handler"; import type TargetSelectUiHandler from "#app/ui/target-select-ui-handler"; -import { UiMode } from "#enums/ui-mode"; import { isNullOrUndefined } from "#app/utils/common"; import { BattleStyle } from "#enums/battle-style"; import { Button } from "#enums/buttons"; @@ -40,24 +39,26 @@ import type { Moves } from "#enums/moves"; import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { PlayerGender } from "#enums/player-gender"; import type { Species } from "#enums/species"; +import { UiMode } from "#enums/ui-mode"; +import ErrorInterceptor from "#test/testUtils/errorInterceptor"; import { generateStarter, waitUntil } from "#test/testUtils/gameManagerUtils"; import GameWrapper from "#test/testUtils/gameWrapper"; import { ChallengeModeHelper } from "#test/testUtils/helpers/challengeModeHelper"; import { ClassicModeHelper } from "#test/testUtils/helpers/classicModeHelper"; import { DailyModeHelper } from "#test/testUtils/helpers/dailyModeHelper"; +import { FieldHelper } from "#test/testUtils/helpers/field-helper"; import { ModifierHelper } from "#test/testUtils/helpers/modifiersHelper"; import { MoveHelper } from "#test/testUtils/helpers/moveHelper"; import { OverridesHelper } from "#test/testUtils/helpers/overridesHelper"; import { ReloadHelper } from "#test/testUtils/helpers/reloadHelper"; import { SettingsHelper } from "#test/testUtils/helpers/settingsHelper"; +import type InputsHandler from "#test/testUtils/inputsHandler"; +import { MockFetch } from "#test/testUtils/mocks/mockFetch"; import PhaseInterceptor from "#test/testUtils/phaseInterceptor"; import TextInterceptor from "#test/testUtils/TextInterceptor"; import { AES, enc } from "crypto-js"; import fs from "node:fs"; import { expect, vi } from "vitest"; -import { globalScene } from "#app/global-scene"; -import type StarterSelectUiHandler from "#app/ui/starter-select-ui-handler"; -import { MockFetch } from "#test/testUtils/mocks/mockFetch"; /** * Class to manage the game state and transitions between phases. @@ -76,6 +77,7 @@ export default class GameManager { public readonly settings: SettingsHelper; public readonly reload: ReloadHelper; public readonly modifiers: ModifierHelper; + public readonly field: FieldHelper; /** * Creates an instance of GameManager. @@ -123,6 +125,7 @@ export default class GameManager { this.settings = new SettingsHelper(this); this.reload = new ReloadHelper(this); this.modifiers = new ModifierHelper(this); + this.field = new FieldHelper(this); this.override.sanitizeOverrides(); // Disables Mystery Encounters on all tests (can be overridden at test level) @@ -383,6 +386,7 @@ export default class GameManager { * @param moveId - The {@linkcode Moves | move} the enemy will use * @param target - The {@linkcode BattlerIndex} of the target against which the enemy will use the given move; * will use normal target selection priorities if omitted. + * @deprecated Use {@linkcode MoveHelper.forceEnemyMove} or {@linkcode MoveHelper.selectEnemyMove} */ async forceEnemyMove(moveId: Moves, target?: BattlerIndex) { // Wait for the next EnemyCommandPhase to start @@ -417,9 +421,15 @@ export default class GameManager { }; } - /** Transition to the next upcoming {@linkcode CommandPhase} */ + /** Transition to the first {@linkcode CommandPhase} of the next turn. */ async toNextTurn() { - await this.phaseInterceptor.to(CommandPhase); + await this.phaseInterceptor.to("TurnInitPhase"); + await this.phaseInterceptor.to("CommandPhase"); + } + + /** Transition to the {@linkcode TurnEndPhase | end of the current turn}. */ + async toEndOfTurn() { + await this.phaseInterceptor.to("TurnEndPhase"); } /** @@ -541,8 +551,8 @@ export default class GameManager { } /** - * Select a pokemon from the party menu during the given phase. - * Only really handles the basic case of "navigate to party slot and press Action twice" - + * Select a pokemon from the party menu during the given phase. + * Only really handles the basic case of "navigate to party slot and press Action twice" - * any menus that come up afterwards are ignored and must be handled separately by the caller. * @param slot - The 0-indexed position of the pokemon in your party to switch to * @param inPhase - Which phase to expect the selection to occur in. Defaults to `SwitchPhase` diff --git a/test/testUtils/helpers/field-helper.ts b/test/testUtils/helpers/field-helper.ts new file mode 100644 index 00000000000..6d762853cad --- /dev/null +++ b/test/testUtils/helpers/field-helper.ts @@ -0,0 +1,87 @@ +// -- start tsdoc imports -- +// biome-ignore lint/correctness/noUnusedImports: TSDoc import +import type { globalScene } from "#app/global-scene"; +// -- end tsdoc imports -- + +import type { BattlerIndex } from "#app/battle"; +import type { Ability } from "#app/data/abilities/ability-class"; +import { allAbilities } from "#app/data/data-lists"; +import type Pokemon from "#app/field/pokemon"; +import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; +import type { Abilities } from "#enums/abilities"; +import type { PokemonType } from "#enums/pokemon-type"; +import { Stat } from "#enums/stat"; +import { GameManagerHelper } from "#test/testUtils/helpers/gameManagerHelper"; +import { expect, type MockInstance, vi } from "vitest"; + +/** Helper to manage pokemon */ +export class FieldHelper extends GameManagerHelper { + /** + * Passthrough for {@linkcode globalScene.getPlayerPokemon} that adds an `undefined` check for + * the Pokemon so that the return type for the function doesn't have `undefined`. + * This removes the need to add a `!` like when calling `game.scene.getPlayerPokemon()!`. + * @param includeSwitching Whether a pokemon that is currently switching out is valid, default `true` + * @returns The first {@linkcode PlayerPokemon} that is {@linkcode globalScene.getPlayerField on the field} + * and {@linkcode PlayerPokemon.isActive is active} + * (aka {@linkcode PlayerPokemon.isAllowedInBattle is allowed in battle}). + */ + public getPlayerPokemon(includeSwitching = true): PlayerPokemon { + const pokemon = this.game.scene.getPlayerPokemon(includeSwitching); + expect(pokemon).toBeDefined(); + return pokemon!; + } + + /** + * Passthrough for {@linkcode globalScene.getEnemyPokemon} that adds an `undefined` check for + * the Pokemon so that the return type for the function doesn't have `undefined`. + * This removes the need to add a `!` like when calling `game.scene.getEnemyPokemon()!`. + * @param includeSwitching Whether a pokemon that is currently switching out is valid, default `true` + * @returns The first {@linkcode EnemyPokemon} that is {@linkcode globalScene.getEnemyField on the field} + * and {@linkcode EnemyPokemon.isActive is active} + * (aka {@linkcode EnemyPokemon.isAllowedInBattle is allowed in battle}). + */ + public getEnemyPokemon(includeSwitching = true): EnemyPokemon { + const pokemon = this.game.scene.getEnemyPokemon(includeSwitching); + expect(pokemon).toBeDefined(); + return pokemon!; + } + + /** + * @returns The {@linkcode BattlerIndex | indexes} of Pokemon on the field in order of decreasing Speed. + * Speed ties are returned in increasing order of index. + * + * Note: Trick Room does not modify the speed of Pokemon on the field. + */ + public getSpeedOrder(): BattlerIndex[] { + return this.game.scene + .getField(true) + .sort((pA, pB) => pB.getEffectiveStat(Stat.SPD) - pA.getEffectiveStat(Stat.SPD)) + .map(p => p.getBattlerIndex()); + } + + /** + * Mocks a pokemon's ability, overriding its existing ability (takes precedence over global overrides) + * @param pokemon - The pokemon to mock the ability of + * @param ability - The ability to be mocked + * @returns A {@linkcode MockInstance} object + * @see {@linkcode vi.spyOn} + * @see https://vitest.dev/api/mock#mockreturnvalue + */ + public mockAbility(pokemon: Pokemon, ability: Abilities): MockInstance<(baseOnly?: boolean) => Ability> { + return vi.spyOn(pokemon, "getAbility").mockReturnValue(allAbilities[ability]); + } + + /** + * Forces a pokemon to be terastallized. Defaults to the pokemon's primary type if not specified. + * + * This function only mocks the Pokemon's tera-related variables; it does NOT activate any tera-related abilities. + * + * @param pokemon - The pokemon to terastallize. + * @param teraType - (optional) The {@linkcode PokemonType} to terastallize it as. + */ + public forceTera(pokemon: Pokemon, teraType?: PokemonType): void { + vi.spyOn(pokemon, "isTerastallized", "get").mockReturnValue(true); + teraType ??= pokemon.getSpeciesForm(true).type1; + vi.spyOn(pokemon, "teraType", "get").mockReturnValue(teraType); + } +} diff --git a/test/testUtils/helpers/moveHelper.ts b/test/testUtils/helpers/moveHelper.ts index 269cf65ea56..ab10486867d 100644 --- a/test/testUtils/helpers/moveHelper.ts +++ b/test/testUtils/helpers/moveHelper.ts @@ -1,14 +1,16 @@ import type { BattlerIndex } from "#app/battle"; +import { getMoveTargets } from "#app/data/moves/move"; import { Button } from "#app/enums/buttons"; import type Pokemon from "#app/field/pokemon"; import { PokemonMove } from "#app/field/pokemon"; import Overrides from "#app/overrides"; import type { CommandPhase } from "#app/phases/command-phase"; +import type { EnemyCommandPhase } from "#app/phases/enemy-command-phase"; import { LearnMovePhase } from "#app/phases/learn-move-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Command } from "#app/ui/command-ui-handler"; -import { UiMode } from "#enums/ui-mode"; import { Moves } from "#enums/moves"; +import { UiMode } from "#enums/ui-mode"; import { getMovePosition } from "#test/testUtils/gameManagerUtils"; import { GameManagerHelper } from "#test/testUtils/helpers/gameManagerHelper"; import { vi } from "vitest"; @@ -92,6 +94,35 @@ export class MoveHelper extends GameManagerHelper { } } + /** + * Modifies a player pokemon's moveset to contain only the selected move and then + * selects it to be used during the next {@linkcode CommandPhase}. + * + * Warning: Will disable the player moveset override if it is enabled! + * + * Note: If you need to check for changes in the player's moveset as part of the test, it may be + * best to use {@linkcode changeMoveset} and {@linkcode select} instead. + * @param moveId - the move to use + * @param pkmIndex - the pokemon index. Relevant for double-battles only (defaults to 0) + * @param targetIndex - (optional) The {@linkcode BattlerIndex} of the Pokemon to target for single-target moves, or `null` if a manual call to `selectTarget()` is required + * @param useTera - If `true`, the Pokemon also chooses to Terastallize. This does not require a Tera Orb. Default: `false`. + */ + public use(moveId: Moves, pkmIndex: 0 | 1 = 0, targetIndex?: BattlerIndex | null, useTera = false): void { + if ([Overrides.MOVESET_OVERRIDE].flat().length > 0) { + vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([]); + console.warn("Warning: `use` overwrites the Pokemon's moveset and disables the player moveset override!"); + } + + const pokemon = this.game.scene.getPlayerField()[pkmIndex]; + pokemon.moveset = [new PokemonMove(moveId)]; + + if (useTera) { + this.selectWithTera(moveId, pkmIndex, targetIndex); + return; + } + this.select(moveId, pkmIndex, targetIndex); + } + /** * Forces the Paralysis or Freeze status to activate on the next move by temporarily mocking {@linkcode Overrides.STATUS_ACTIVATION_OVERRIDE}, * advancing to the next `MovePhase`, and then resetting the override to `null` @@ -132,6 +163,77 @@ export class MoveHelper extends GameManagerHelper { console.log(`Pokemon ${pokemon.species.name}'s moveset manually set to ${movesetStr} (=[${moveset.join(", ")}])!`); } + /** + * Forces the next enemy selecting a move to use the given move in its moveset + * against the given target (if applicable). + * @param moveId The {@linkcode MoveId | move} the enemy will use + * @param target (Optional) the {@linkcode BattlerIndex | target} which the enemy will use the given move against + */ + public async selectEnemyMove(moveId: Moves, target?: BattlerIndex) { + // Wait for the next EnemyCommandPhase to start + await this.game.phaseInterceptor.to("EnemyCommandPhase", false); + const enemy = + this.game.scene.getEnemyField()[(this.game.scene.getCurrentPhase() as EnemyCommandPhase).getFieldIndex()]; + const legalTargets = getMoveTargets(enemy, moveId); + + vi.spyOn(enemy, "getNextMove").mockReturnValueOnce({ + move: moveId, + targets: + target !== undefined && !legalTargets.multiple && legalTargets.targets.includes(target) + ? [target] + : enemy.getNextTargets(moveId), + }); + + /** + * Run the EnemyCommandPhase to completion. + * This allows this function to be called consecutively to + * force a move for each enemy in a double battle. + */ + await this.game.phaseInterceptor.to("EnemyCommandPhase"); + } + + /** + * Forces the next enemy selecting a move to use the given move against the given target (if applicable). + * + * Warning: Overwrites the pokemon's moveset and disables the moveset override! + * + * Note: If you need to check for changes in the enemy's moveset as part of the test, it may be + * best to use {@linkcode changeMoveset} and {@linkcode selectEnemyMove} instead. + * @param moveId The {@linkcode MoveId | move} the enemy will use + * @param target (Optional) the {@linkcode BattlerIndex | target} which the enemy will use the given move against + */ + public async forceEnemyMove(moveId: Moves, target?: BattlerIndex) { + // Wait for the next EnemyCommandPhase to start + await this.game.phaseInterceptor.to("EnemyCommandPhase", false); + + const enemy = + this.game.scene.getEnemyField()[(this.game.scene.getCurrentPhase() as EnemyCommandPhase).getFieldIndex()]; + + if ([Overrides.OPP_MOVESET_OVERRIDE].flat().length > 0) { + vi.spyOn(Overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([]); + console.warn( + "Warning: `forceEnemyMove` overwrites the Pokemon's moveset and disables the enemy moveset override!", + ); + } + enemy.moveset = [new PokemonMove(moveId)]; + const legalTargets = getMoveTargets(enemy, moveId); + + vi.spyOn(enemy, "getNextMove").mockReturnValueOnce({ + move: moveId, + targets: + target !== undefined && !legalTargets.multiple && legalTargets.targets.includes(target) + ? [target] + : enemy.getNextTargets(moveId), + }); + + /** + * Run the EnemyCommandPhase to completion. + * This allows this function to be called consecutively to + * force a move for each enemy in a double battle. + */ + await this.game.phaseInterceptor.to("EnemyCommandPhase"); + } + /** * Simulates learning a move for a player pokemon. * @param move The {@linkcode Moves} being learnt From 5eeff184071cd28bc522355e6c330c9ffe116a22 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Fri, 30 May 2025 14:35:38 -0500 Subject: [PATCH 179/262] [GitHub] Fix gh action path filter (#5904) * Fix test workflow syntax to use negation properly * Add missing id and comparison check in tests.yml * Fix missing curly brace --- .github/test-filters.yml | 14 +++++--------- .github/workflows/tests.yml | 3 ++- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/.github/test-filters.yml b/.github/test-filters.yml index 89f4322adea..fc52e85082c 100644 --- a/.github/test-filters.yml +++ b/.github/test-filters.yml @@ -1,7 +1,8 @@ all: - - "src/**" - - "test/**" - - "public/**" + # Negations syntax from https://github.com/dorny/paths-filter/issues/184#issuecomment-2786521554 + - "src/**/!(*.{md,py,sh,gitkeep,gitignore})" + - "test/**/!(*.{md,py,sh,gitkeep,gitignore})" + - "public/**/!(*.{md,py,sh,gitkeep,gitignore})" # Workflows that can impact tests - ".github/workflows/test*.yml" - ".github/test-filters.yml" @@ -11,9 +12,4 @@ all: - "vite*" # vite.config.ts, vite.vitest.config.ts, vitest.workspace.ts - "tsconfig*.json" # tsconfig.json tweaking can impact compilation - "global.d.ts" - - ".env*" - # Blanket negations for files that cannot impact tests - - "!**/*.py" # No .py files - - "!**/*.sh" # No .sh files - - "!**/*.md" # No .md files - - "!**/.git*" # .gitkeep and family + - ".env*" \ No newline at end of file diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index f04a1987eff..f9d26b5568a 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -25,6 +25,7 @@ jobs: - name: checkout uses: actions/checkout@v4 - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 + id: filter with: filters: .github/test-filters.yml @@ -39,4 +40,4 @@ jobs: project: main shard: ${{ matrix.shard }} totalShards: 10 - skip: ${{ needs.check-path-change-filter.outputs.all == 'false'}} + skip: ${{ needs.check-path-change-filter.outputs.all != 'true'}} From e1be360e74467fa3ec7804580228891fb8c16b25 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Fri, 30 May 2025 16:42:12 -0500 Subject: [PATCH 180/262] [GitHub] Change total shard numbers and change job name (#5905) --- .github/workflows/test-shard-template.yml | 9 +++++---- .github/workflows/tests.yml | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.github/workflows/test-shard-template.yml b/.github/workflows/test-shard-template.yml index a1146cb3497..98836bd335a 100644 --- a/.github/workflows/test-shard-template.yml +++ b/.github/workflows/test-shard-template.yml @@ -19,19 +19,20 @@ on: jobs: test: - name: Shard ${{ inputs.shard }} of ${{ inputs.totalShards }} + # We can't use dynmically named jobs until https://github.com/orgs/community/discussions/13261 is implemented + name: Shard runs-on: ubuntu-latest if: ${{ !inputs.skip }} steps: - name: Check out Git repository uses: actions/checkout@v4.2.2 with: - submodules: 'recursive' + submodules: "recursive" - name: Set up Node.js uses: actions/setup-node@v4 with: - node-version-file: '.nvmrc' - cache: 'npm' + node-version-file: ".nvmrc" + cache: "npm" - name: Install Node.js dependencies run: npm ci - name: Run tests diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index f9d26b5568a..c3b9666caa9 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -34,10 +34,10 @@ jobs: needs: check-path-change-filter strategy: matrix: - shard: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + shard: [1, 2, 3, 4, 5] uses: ./.github/workflows/test-shard-template.yml with: project: main shard: ${{ matrix.shard }} - totalShards: 10 + totalShards: 5 skip: ${{ needs.check-path-change-filter.outputs.all != 'true'}} From ed0251ea9055cd0c321cbe2d1865cc22f6993100 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Fri, 30 May 2025 18:08:52 -0500 Subject: [PATCH 181/262] [Refactor] Cleanup egg-counter-container (#5892) --- src/ui/egg-counter-container.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/ui/egg-counter-container.ts b/src/ui/egg-counter-container.ts index 7bec7c97480..7bb32189681 100644 --- a/src/ui/egg-counter-container.ts +++ b/src/ui/egg-counter-container.ts @@ -43,14 +43,13 @@ export default class EggCounterContainer extends Phaser.GameObjects.Container { this.add(this.eggCountWindow); - const eggSprite = globalScene.add.sprite(19, 18, "egg", "egg_0"); - eggSprite.setScale(0.32); + const eggSprite = globalScene.add.sprite(19, 18, "egg", "egg_0").setScale(0.32); - this.eggCountText = addTextObject(28, 13, `${this.eggCount}`, TextStyle.MESSAGE, { fontSize: "66px" }); - this.eggCountText.setName("text-egg-count"); + this.eggCountText = addTextObject(28, 13, `${this.eggCount}`, TextStyle.MESSAGE, { fontSize: "66px" }).setName( + "text-egg-count", + ); - this.add(eggSprite); - this.add(this.eggCountText); + this.add([eggSprite, this.eggCountText]); } /** From 9a60cc9c716b043764270f6b160d5302663f521e Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Fri, 30 May 2025 18:12:35 -0500 Subject: [PATCH 182/262] [Refactor] Cleanup filter bar (#5896) * Cleanup filter bar * Move DropDownColumn to its own file --------- Co-authored-by: Amani H. <109637146+xsn34kzx@users.noreply.github.com> --- src/enums/drop-down-column.ts | 9 +++++++++ src/ui/filter-bar.ts | 19 +++---------------- src/ui/pokedex-ui-handler.ts | 3 ++- src/ui/starter-select-ui-handler.ts | 3 ++- test/ui/pokedex.test.ts | 2 +- 5 files changed, 17 insertions(+), 19 deletions(-) create mode 100644 src/enums/drop-down-column.ts diff --git a/src/enums/drop-down-column.ts b/src/enums/drop-down-column.ts new file mode 100644 index 00000000000..b413d1f0bf4 --- /dev/null +++ b/src/enums/drop-down-column.ts @@ -0,0 +1,9 @@ +export enum DropDownColumn { + GEN, + TYPES, + BIOME, + CAUGHT, + UNLOCKS, + MISC, + SORT +} diff --git a/src/ui/filter-bar.ts b/src/ui/filter-bar.ts index 2aade130ed1..622488c04cd 100644 --- a/src/ui/filter-bar.ts +++ b/src/ui/filter-bar.ts @@ -5,16 +5,7 @@ import { addTextObject, getTextColor, TextStyle } from "./text"; import type { UiTheme } from "#enums/ui-theme"; import { addWindow, WindowVariant } from "./ui-theme"; import { globalScene } from "#app/global-scene"; - -export enum DropDownColumn { - GEN, - TYPES, - BIOME, - CAUGHT, - UNLOCKS, - MISC, - SORT, -} +import type { DropDownColumn } from "#enums/drop-down-column"; export class FilterBar extends Phaser.GameObjects.Container { private window: Phaser.GameObjects.NineSlice; @@ -49,13 +40,9 @@ export class FilterBar extends Phaser.GameObjects.Container { this.cursorOffset = cursorOffset; this.window = addWindow(0, 0, width, height, false, false, undefined, undefined, WindowVariant.THIN); - this.add(this.window); - this.cursorObj = globalScene.add.image(1, 1, "cursor"); - this.cursorObj.setScale(0.5); - this.cursorObj.setVisible(false); - this.cursorObj.setOrigin(0, 0); - this.add(this.cursorObj); + this.cursorObj = globalScene.add.image(1, 1, "cursor").setScale(0.5).setVisible(false).setOrigin(0); + this.add([this.window, this.cursorObj]); } /** diff --git a/src/ui/pokedex-ui-handler.ts b/src/ui/pokedex-ui-handler.ts index 08fe5d7442f..179d5b4664b 100644 --- a/src/ui/pokedex-ui-handler.ts +++ b/src/ui/pokedex-ui-handler.ts @@ -23,7 +23,8 @@ import type { Species } from "#enums/species"; import { Button } from "#enums/buttons"; import { DropDown, DropDownLabel, DropDownOption, DropDownState, DropDownType, SortCriteria } from "#app/ui/dropdown"; import { PokedexMonContainer } from "#app/ui/pokedex-mon-container"; -import { DropDownColumn, FilterBar } from "#app/ui/filter-bar"; +import { FilterBar } from "#app/ui/filter-bar"; +import { DropDownColumn } from "#enums/drop-down-column"; import { ScrollBar } from "#app/ui/scroll-bar"; import { Abilities } from "#enums/abilities"; import { diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index a971ba86479..ff2298f268d 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -53,7 +53,8 @@ import { Button } from "#enums/buttons"; import { EggSourceType } from "#enums/egg-source-types"; import { DropDown, DropDownLabel, DropDownOption, DropDownState, DropDownType, SortCriteria } from "#app/ui/dropdown"; import { StarterContainer } from "#app/ui/starter-container"; -import { DropDownColumn, FilterBar } from "#app/ui/filter-bar"; +import { FilterBar } from "#app/ui/filter-bar"; +import { DropDownColumn } from "#enums/drop-down-column"; import { ScrollBar } from "#app/ui/scroll-bar"; import { SelectChallengePhase } from "#app/phases/select-challenge-phase"; import { EncounterPhase } from "#app/phases/encounter-phase"; diff --git a/test/ui/pokedex.test.ts b/test/ui/pokedex.test.ts index ff5ca116ba8..007fc43c3b9 100644 --- a/test/ui/pokedex.test.ts +++ b/test/ui/pokedex.test.ts @@ -8,7 +8,7 @@ import { Abilities } from "#enums/abilities"; import { Species } from "#enums/species"; import { allSpecies, getPokemonSpecies, type PokemonForm } from "#app/data/pokemon-species"; import { Button } from "#enums/buttons"; -import { DropDownColumn } from "#app/ui/filter-bar"; +import { DropDownColumn } from "#enums/drop-down-column"; import type PokemonSpecies from "#app/data/pokemon-species"; import { PokemonType } from "#enums/pokemon-type"; import { UiMode } from "#enums/ui-mode"; From a33638a7a36b01935e40ea876532c770b53f0994 Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Fri, 30 May 2025 19:50:25 -0400 Subject: [PATCH 183/262] [Test] Remove deprecated test funcs (#5906) * Removed `game.startBattle` * Removed `game.forceEnemyMove` * Removed near-unused learn move macro --- test/abilities/aroma_veil.test.ts | 6 +-- test/abilities/battery.test.ts | 6 +-- test/abilities/commander.test.ts | 12 ++--- test/abilities/costar.test.ts | 4 +- test/abilities/cud_chew.test.ts | 4 +- test/abilities/dancer.test.ts | 4 +- test/abilities/desolate-land.test.ts | 12 ++--- test/abilities/flower_gift.test.ts | 8 +-- test/abilities/flower_veil.test.ts | 14 ++--- test/abilities/forecast.test.ts | 14 ++--- test/abilities/friend_guard.test.ts | 24 ++++----- test/abilities/good_as_gold.test.ts | 4 +- test/abilities/gorilla_tactics.test.ts | 6 +-- test/abilities/gulp_missile.test.ts | 4 +- test/abilities/harvest.test.ts | 24 ++++----- test/abilities/heatproof.test.ts | 4 +- test/abilities/hyper_cutter.test.ts | 2 +- test/abilities/libero.test.ts | 30 +++++------ test/abilities/magic_bounce.test.ts | 12 ++--- test/abilities/magic_guard.test.ts | 38 +++++++------- test/abilities/mimicry.test.ts | 8 +-- test/abilities/mirror_armor.test.ts | 42 +++++++-------- test/abilities/moxie.test.ts | 4 +- test/abilities/mycelium_might.test.ts | 6 +-- test/abilities/neutralizing_gas.test.ts | 8 +-- test/abilities/pastel_veil.test.ts | 4 +- test/abilities/perish_body.test.ts | 10 ++-- test/abilities/power_spot.test.ts | 6 +-- test/abilities/protean.test.ts | 30 +++++------ test/abilities/quick_draw.test.ts | 6 +-- test/abilities/sand_veil.test.ts | 2 +- test/abilities/schooling.test.ts | 2 +- test/abilities/screen_cleaner.test.ts | 6 +-- test/abilities/shields_down.test.ts | 12 ++--- test/abilities/simple.test.ts | 2 +- test/abilities/stakeout.test.ts | 8 +-- test/abilities/stall.test.ts | 6 +-- test/abilities/sturdy.test.ts | 8 +-- test/abilities/supreme_overlord.test.ts | 2 +- test/abilities/sweet_veil.test.ts | 8 +-- test/abilities/unburden.test.ts | 16 +++--- test/abilities/wimp_out.test.ts | 4 +- test/abilities/wind_power.test.ts | 8 +-- test/abilities/wonder_skin.test.ts | 4 +- test/abilities/zero_to_hero.test.ts | 8 +-- test/arena/weather_fog.test.ts | 2 +- test/battle/battle-order.test.ts | 10 ++-- test/battle/battle.test.ts | 22 ++++---- test/battle/double_battle.test.ts | 2 +- test/battle/special_battle.test.ts | 18 +++---- test/daily_mode.test.ts | 2 +- test/evolution.test.ts | 6 +-- test/items/dire_hit.test.ts | 4 +- test/items/exp_booster.test.ts | 2 +- test/items/leek.test.ts | 12 ++--- test/items/leftovers.test.ts | 2 +- test/items/light_ball.test.ts | 4 +- test/items/metal_powder.test.ts | 8 +-- test/items/scope_lens.test.ts | 2 +- test/moves/astonish.test.ts | 2 +- test/moves/beat_up.test.ts | 4 +- test/moves/belly_drum.test.ts | 8 +-- test/moves/chilly_reception.test.ts | 2 +- test/moves/clangorous_soul.test.ts | 8 +-- test/moves/crafty_shield.test.ts | 8 +-- test/moves/defog.test.ts | 6 +-- test/moves/disable.test.ts | 4 +- test/moves/double_team.test.ts | 2 +- test/moves/dragon_tail.test.ts | 10 ++-- test/moves/dynamax_cannon.test.ts | 16 +++--- test/moves/encore.test.ts | 2 +- test/moves/fairy_lock.test.ts | 32 +++++------ test/moves/fillet_away.test.ts | 8 +-- test/moves/flame_burst.test.ts | 8 +-- test/moves/flower_shield.test.ts | 8 +-- test/moves/fly.test.ts | 4 +- test/moves/follow_me.test.ts | 16 +++--- test/moves/foresight.test.ts | 4 +- test/moves/fusion_bolt.test.ts | 2 +- test/moves/fusion_flare.test.ts | 2 +- test/moves/fusion_flare_bolt.test.ts | 2 +- test/moves/growth.test.ts | 2 +- test/moves/grudge.test.ts | 8 +-- test/moves/guard_split.test.ts | 4 +- test/moves/hard_press.test.ts | 8 +-- test/moves/haze.test.ts | 2 +- test/moves/hyper_beam.test.ts | 2 +- test/moves/imprison.test.ts | 12 ++--- test/moves/instruct.test.ts | 60 ++++++++++----------- test/moves/jaw_lock.test.ts | 10 ++-- test/moves/last-resort.test.ts | 8 +-- test/moves/lucky_chant.test.ts | 6 +-- test/moves/lunar_blessing.test.ts | 4 +- test/moves/magic_coat.test.ts | 18 +++---- test/moves/magnet_rise.test.ts | 4 +- test/moves/make_it_rain.test.ts | 8 +-- test/moves/mat_block.test.ts | 6 +-- test/moves/metal_burst.test.ts | 8 +-- test/moves/mirror_move.test.ts | 4 +- test/moves/multi_target.test.ts | 4 +- test/moves/parting_shot.test.ts | 20 ++++--- test/moves/plasma_fists.test.ts | 4 +- test/moves/pledge_moves.test.ts | 8 +-- test/moves/powder.test.ts | 12 ++--- test/moves/power_split.test.ts | 4 +- test/moves/purify.test.ts | 4 +- test/moves/quash.test.ts | 16 +++--- test/moves/rage_fist.test.ts | 8 +-- test/moves/rage_powder.test.ts | 8 +-- test/moves/reflect_type.test.ts | 6 +-- test/moves/retaliate.test.ts | 2 +- test/moves/revival_blessing.test.ts | 4 +- test/moves/rollout.test.ts | 2 +- test/moves/round.test.ts | 4 +- test/moves/secret_power.test.ts | 4 +- test/moves/shell_trap.test.ts | 10 ++-- test/moves/speed_swap.test.ts | 2 +- test/moves/spikes.test.ts | 6 +-- test/moves/spit_up.test.ts | 12 ++--- test/moves/spotlight.test.ts | 8 +-- test/moves/stockpile.test.ts | 4 +- test/moves/swallow.test.ts | 12 ++--- test/moves/tackle.test.ts | 4 +- test/moves/tail_whip.test.ts | 2 +- test/moves/taunt.test.ts | 4 +- test/moves/telekinesis.test.ts | 4 +- test/moves/thousand_arrows.test.ts | 6 +-- test/moves/thunder_wave.test.ts | 10 ++-- test/moves/torment.test.ts | 6 +-- test/moves/whirlwind.test.ts | 26 ++++----- test/moves/wide_guard.test.ts | 8 +-- test/phases/learn-move-phase.test.ts | 68 +----------------------- test/testUtils/gameManager.ts | 70 ------------------------- test/testUtils/helpers/moveHelper.ts | 37 ------------- test/ui/type-hints.test.ts | 4 +- 135 files changed, 563 insertions(+), 730 deletions(-) diff --git a/test/abilities/aroma_veil.test.ts b/test/abilities/aroma_veil.test.ts index 38683bcb1e3..aeec33eccf7 100644 --- a/test/abilities/aroma_veil.test.ts +++ b/test/abilities/aroma_veil.test.ts @@ -40,7 +40,7 @@ describe("Moves - Aroma Veil", () => { game.move.select(Moves.GROWL); game.move.select(Moves.GROWL); - await game.forceEnemyMove(Moves.HEAL_BLOCK); + await game.move.selectEnemyMove(Moves.HEAL_BLOCK); await game.toNextTurn(); party.forEach(p => { expect(p.getTag(BattlerTagType.HEAL_BLOCK)).toBeUndefined(); @@ -54,8 +54,8 @@ describe("Moves - Aroma Veil", () => { game.move.select(Moves.GROWL); game.move.select(Moves.GROWL, 1); - await game.forceEnemyMove(Moves.IMPRISON, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.IMPRISON, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); expect(game.scene.arena.getTag(ArenaTagType.IMPRISON)).toBeDefined(); party.forEach(p => { diff --git a/test/abilities/battery.test.ts b/test/abilities/battery.test.ts index 251ca6ccf16..123889c24af 100644 --- a/test/abilities/battery.test.ts +++ b/test/abilities/battery.test.ts @@ -39,7 +39,7 @@ describe("Abilities - Battery", () => { vi.spyOn(moveToCheck, "calculateBattlePower"); - await game.startBattle([Species.PIKACHU, Species.CHARJABUG]); + await game.classicMode.startBattle([Species.PIKACHU, Species.CHARJABUG]); game.move.select(Moves.DAZZLING_GLEAM); game.move.select(Moves.SPLASH, 1); @@ -54,7 +54,7 @@ describe("Abilities - Battery", () => { vi.spyOn(moveToCheck, "calculateBattlePower"); - await game.startBattle([Species.PIKACHU, Species.CHARJABUG]); + await game.classicMode.startBattle([Species.PIKACHU, Species.CHARJABUG]); game.move.select(Moves.BREAKING_SWIPE); game.move.select(Moves.SPLASH, 1); @@ -69,7 +69,7 @@ describe("Abilities - Battery", () => { vi.spyOn(moveToCheck, "calculateBattlePower"); - await game.startBattle([Species.CHARJABUG, Species.PIKACHU]); + await game.classicMode.startBattle([Species.CHARJABUG, Species.PIKACHU]); game.move.select(Moves.DAZZLING_GLEAM); game.move.select(Moves.SPLASH, 1); diff --git a/test/abilities/commander.test.ts b/test/abilities/commander.test.ts index 0e6cb1b9208..0fddb8e9bf6 100644 --- a/test/abilities/commander.test.ts +++ b/test/abilities/commander.test.ts @@ -59,8 +59,8 @@ describe("Abilities - Commander", () => { expect(game.scene.currentBattle.turnCommands[0]?.skip).toBeTruthy(); // Force both enemies to target the Tatsugiri - await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); await game.phaseInterceptor.to("BerryPhase", false); game.scene.getEnemyField().forEach(enemy => expect(enemy.getLastXMoves(1)[0].result).toBe(MoveResult.MISS)); @@ -100,8 +100,8 @@ describe("Abilities - Commander", () => { expect(game.scene.currentBattle.turnCommands[0]?.skip).toBeTruthy(); - await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER]); @@ -183,8 +183,8 @@ describe("Abilities - Commander", () => { expect(game.scene.currentBattle.turnCommands[0]?.skip).toBeTruthy(); - await game.forceEnemyMove(Moves.WHIRLWIND, BattlerIndex.PLAYER_2); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.WHIRLWIND, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(Moves.SPLASH); // Test may time out here if Whirlwind forced out a Pokemon await game.phaseInterceptor.to("TurnEndPhase"); diff --git a/test/abilities/costar.test.ts b/test/abilities/costar.test.ts index 7b1e362689d..02d607c2e9f 100644 --- a/test/abilities/costar.test.ts +++ b/test/abilities/costar.test.ts @@ -33,7 +33,7 @@ describe("Abilities - COSTAR", () => { test("ability copies positive stat stages", async () => { game.override.enemyAbility(Abilities.BALL_FETCH); - await game.startBattle([Species.MAGIKARP, Species.MAGIKARP, Species.FLAMIGO]); + await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP, Species.FLAMIGO]); let [leftPokemon, rightPokemon] = game.scene.getPlayerField(); @@ -58,7 +58,7 @@ describe("Abilities - COSTAR", () => { test("ability copies negative stat stages", async () => { game.override.enemyAbility(Abilities.INTIMIDATE); - await game.startBattle([Species.MAGIKARP, Species.MAGIKARP, Species.FLAMIGO]); + await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP, Species.FLAMIGO]); let [leftPokemon, rightPokemon] = game.scene.getPlayerField(); diff --git a/test/abilities/cud_chew.test.ts b/test/abilities/cud_chew.test.ts index 2f65ac5fd97..60205b62b70 100644 --- a/test/abilities/cud_chew.test.ts +++ b/test/abilities/cud_chew.test.ts @@ -76,7 +76,7 @@ describe("Abilities - Cud Chew", () => { farigiraf.hp = farigiraf.getMaxHp() / 2 - 1; game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); // doesn't trigger since cud chew hasn't eaten berry yet @@ -86,7 +86,7 @@ describe("Abilities - Cud Chew", () => { // get heal pulsed back to full before the cud chew proc game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.HEAL_PULSE); + await game.move.selectEnemyMove(Moves.HEAL_PULSE); await game.phaseInterceptor.to("TurnEndPhase"); // globalScene.queueAbilityDisplay should be called twice: diff --git a/test/abilities/dancer.test.ts b/test/abilities/dancer.test.ts index cdd1e3221e9..b85fc7bdcd4 100644 --- a/test/abilities/dancer.test.ts +++ b/test/abilities/dancer.test.ts @@ -77,8 +77,8 @@ describe("Abilities - Dancer", () => { game.move.select(Moves.REVELATION_DANCE, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2); game.move.select(Moves.FIERY_DANCE, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY_2); - await game.forceEnemyMove(Moves.INSTRUCT, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.MIRROR_MOVE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.INSTRUCT, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.MIRROR_MOVE, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY_2, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MovePhase"); // Oricorio rev dance await game.phaseInterceptor.to("MovePhase"); // Feebas fiery dance diff --git a/test/abilities/desolate-land.test.ts b/test/abilities/desolate-land.test.ts index 697bd0a4c48..da2c285e38f 100644 --- a/test/abilities/desolate-land.test.ts +++ b/test/abilities/desolate-land.test.ts @@ -50,8 +50,8 @@ describe("Abilities - Desolate Land", () => { game.move.select(Moves.SPLASH, 0, 2); game.move.select(Moves.SPLASH, 1, 2); - await game.forceEnemyMove(Moves.ROAR, 0); - await game.forceEnemyMove(Moves.SPLASH, 1); + await game.move.selectEnemyMove(Moves.ROAR, 0); + await game.move.selectEnemyMove(Moves.SPLASH, 1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -66,8 +66,8 @@ describe("Abilities - Desolate Land", () => { game.move.select(Moves.SPLASH, 0, 2); game.move.select(Moves.SPLASH, 1, 2); - await game.forceEnemyMove(Moves.ROAR, 1); - await game.forceEnemyMove(Moves.SPLASH, 0); + await game.move.selectEnemyMove(Moves.ROAR, 1); + await game.move.selectEnemyMove(Moves.SPLASH, 0); await game.phaseInterceptor.to("TurnEndPhase"); @@ -103,8 +103,8 @@ describe("Abilities - Desolate Land", () => { game.move.select(Moves.SPLASH, 0, 2); game.move.select(Moves.SPLASH, 1, 2); - await game.forceEnemyMove(Moves.MEMENTO, 0); - await game.forceEnemyMove(Moves.MEMENTO, 1); + await game.move.selectEnemyMove(Moves.MEMENTO, 0); + await game.move.selectEnemyMove(Moves.MEMENTO, 1); await game.phaseInterceptor.to("TurnEndPhase"); diff --git a/test/abilities/flower_gift.test.ts b/test/abilities/flower_gift.test.ts index f2b32dc4c80..df8830bca6d 100644 --- a/test/abilities/flower_gift.test.ts +++ b/test/abilities/flower_gift.test.ts @@ -67,8 +67,8 @@ describe("Abilities - Flower Gift", () => { // turn 1 game.move.select(Moves.SUNNY_DAY, 0); game.move.select(ally_move, 1, ally_target); - await game.forceEnemyMove(enemy_move, BattlerIndex.PLAYER_2); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(enemy_move, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(Moves.SPLASH); // Ensure sunny day is used last. await game.setTurnOrder([attacker_index, target_index, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER]); await game.phaseInterceptor.to(TurnEndPhase); @@ -79,8 +79,8 @@ describe("Abilities - Flower Gift", () => { // turn 2. Make target use recover to reset hp calculation. game.move.select(Moves.SPLASH, 0, target_index); game.move.select(ally_move, 1, ally_target); - await game.forceEnemyMove(enemy_move, BattlerIndex.PLAYER_2); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(enemy_move, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(Moves.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, target_index, attacker_index]); await game.phaseInterceptor.to(TurnEndPhase); const damageWithGift = initialHp - target.hp; diff --git a/test/abilities/flower_veil.test.ts b/test/abilities/flower_veil.test.ts index ce45906c4a9..7f51414d8a5 100644 --- a/test/abilities/flower_veil.test.ts +++ b/test/abilities/flower_veil.test.ts @@ -49,7 +49,7 @@ describe("Abilities - Flower Veil", () => { await game.classicMode.startBattle([Species.BULBASAUR]); const user = game.scene.getPlayerPokemon()!; game.move.select(Moves.REST); - await game.forceEnemyMove(Moves.TACKLE); + await game.move.selectEnemyMove(Moves.TACKLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); expect(user.status?.effect).toBe(StatusEffect.SLEEP); @@ -57,7 +57,7 @@ describe("Abilities - Flower Veil", () => { // remove sleep status so we can get burn from the orb user.resetStatus(); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); expect(user.status?.effect).toBe(StatusEffect.BURN); }); @@ -71,8 +71,8 @@ describe("Abilities - Flower Veil", () => { vi.spyOn(ally, "getAbility").mockReturnValue(allAbilities[Abilities.BALL_FETCH]); game.move.select(Moves.SPLASH); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.YAWN, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.YAWN, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(Moves.YAWN, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.YAWN, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase"); const user = game.scene.getPlayerPokemon()!; @@ -86,7 +86,7 @@ describe("Abilities - Flower Veil", () => { await game.classicMode.startBattle([Species.BULBASAUR]); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.THUNDER_WAVE); + await game.move.selectEnemyMove(Moves.THUNDER_WAVE); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); vi.spyOn(allMoves[Moves.THUNDER_WAVE], "accuracy", "get").mockClear(); @@ -101,8 +101,8 @@ describe("Abilities - Flower Veil", () => { vi.spyOn(ally, "getAbility").mockReturnValue(allAbilities[Abilities.BALL_FETCH]); game.move.select(Moves.SPLASH); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.THUNDER_WAVE, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.THUNDER_WAVE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(Moves.THUNDER_WAVE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.THUNDER_WAVE, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase"); expect(user.status?.effect).toBe(StatusEffect.PARALYSIS); expect(ally.status?.effect).toBe(StatusEffect.PARALYSIS); diff --git a/test/abilities/forecast.test.ts b/test/abilities/forecast.test.ts index 03b5d993a54..f2aa350ef37 100644 --- a/test/abilities/forecast.test.ts +++ b/test/abilities/forecast.test.ts @@ -30,7 +30,7 @@ describe("Abilities - Forecast", () => { */ const testWeatherFormChange = async (game: GameManager, weather: WeatherType, form: number, initialForm?: number) => { game.override.weather(weather).starterForms({ [Species.CASTFORM]: initialForm }); - await game.startBattle([Species.CASTFORM]); + await game.classicMode.startBattle([Species.CASTFORM]); game.move.select(Moves.SPLASH); @@ -44,7 +44,7 @@ describe("Abilities - Forecast", () => { */ const testRevertFormAgainstAbility = async (game: GameManager, ability: Abilities) => { game.override.starterForms({ [Species.CASTFORM]: SUNNY_FORM }).enemyAbility(ability); - await game.startBattle([Species.CASTFORM]); + await game.classicMode.startBattle([Species.CASTFORM]); game.move.select(Moves.SPLASH); @@ -81,7 +81,7 @@ describe("Abilities - Forecast", () => { [Species.GROUDON]: 1, [Species.RAYQUAZA]: 1, }); - await game.startBattle([ + await game.classicMode.startBattle([ Species.CASTFORM, Species.FEEBAS, Species.KYOGRE, @@ -201,7 +201,7 @@ describe("Abilities - Forecast", () => { it("has no effect on Pokémon other than Castform", async () => { game.override.enemyAbility(Abilities.FORECAST).enemySpecies(Species.SHUCKLE); - await game.startBattle([Species.CASTFORM]); + await game.classicMode.startBattle([Species.CASTFORM]); game.move.select(Moves.RAIN_DANCE); await game.phaseInterceptor.to(TurnEndPhase); @@ -212,7 +212,7 @@ describe("Abilities - Forecast", () => { it("reverts to Normal Form when Forecast is suppressed, changes form to match the weather when it regains it", async () => { game.override.enemyMoveset([Moves.GASTRO_ACID]).weather(WeatherType.RAIN); - await game.startBattle([Species.CASTFORM, Species.PIKACHU]); + await game.classicMode.startBattle([Species.CASTFORM, Species.PIKACHU]); const castform = game.scene.getPlayerPokemon()!; expect(castform.formIndex).toBe(RAINY_FORM); @@ -243,7 +243,7 @@ describe("Abilities - Forecast", () => { it("does not change Castform's form until after Stealth Rock deals damage", async () => { game.override.weather(WeatherType.RAIN).enemyMoveset([Moves.STEALTH_ROCK]); - await game.startBattle([Species.PIKACHU, Species.CASTFORM]); + await game.classicMode.startBattle([Species.PIKACHU, Species.CASTFORM]); // First turn - set up stealth rock game.move.select(Moves.SPLASH); @@ -267,7 +267,7 @@ describe("Abilities - Forecast", () => { it("should be in Normal Form after the user is switched out", async () => { game.override.weather(WeatherType.RAIN); - await game.startBattle([Species.CASTFORM, Species.MAGIKARP]); + await game.classicMode.startBattle([Species.CASTFORM, Species.MAGIKARP]); const castform = game.scene.getPlayerPokemon()!; expect(castform.formIndex).toBe(RAINY_FORM); diff --git a/test/abilities/friend_guard.test.ts b/test/abilities/friend_guard.test.ts index 0afe678b175..350ff737c58 100644 --- a/test/abilities/friend_guard.test.ts +++ b/test/abilities/friend_guard.test.ts @@ -43,8 +43,8 @@ describe("Moves - Friend Guard", () => { game.move.select(Moves.SPLASH); game.move.select(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); // Get the last return value from `getAttackDamage` @@ -60,8 +60,8 @@ describe("Moves - Friend Guard", () => { game.move.select(Moves.SPLASH); game.move.select(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); // Get the last return value from `getAttackDamage` @@ -83,8 +83,8 @@ describe("Moves - Friend Guard", () => { game.move.select(Moves.SPLASH); game.move.select(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); const turn1Damage = spy.mock.results[spy.mock.results.length - 1].value.damage; @@ -93,8 +93,8 @@ describe("Moves - Friend Guard", () => { game.move.select(Moves.SPLASH); game.move.select(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); const turn2Damage = spy.mock.results[spy.mock.results.length - 1].value.damage; @@ -109,8 +109,8 @@ describe("Moves - Friend Guard", () => { game.move.select(Moves.SPLASH); game.move.select(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.DRAGON_RAGE, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.DRAGON_RAGE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); const turn1Damage = spy.mock.results[spy.mock.results.length - 1].value.damage; @@ -120,8 +120,8 @@ describe("Moves - Friend Guard", () => { game.move.select(Moves.SPLASH); game.move.select(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.DRAGON_RAGE, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.DRAGON_RAGE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); const turn2Damage = spy.mock.results[spy.mock.results.length - 1].value.damage; diff --git a/test/abilities/good_as_gold.test.ts b/test/abilities/good_as_gold.test.ts index 9b1d582f64c..adb54810381 100644 --- a/test/abilities/good_as_gold.test.ts +++ b/test/abilities/good_as_gold.test.ts @@ -74,8 +74,8 @@ describe("Abilities - Good As Gold", () => { game.move.select(Moves.SWORDS_DANCE, 0); game.move.select(Moves.SAFEGUARD, 1); - await game.forceEnemyMove(Moves.STEALTH_ROCK); - await game.forceEnemyMove(Moves.HAZE); + await game.move.selectEnemyMove(Moves.STEALTH_ROCK); + await game.move.selectEnemyMove(Moves.HAZE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("BerryPhase"); expect(good_as_gold.getAbility().id).toBe(Abilities.GOOD_AS_GOLD); diff --git a/test/abilities/gorilla_tactics.test.ts b/test/abilities/gorilla_tactics.test.ts index edaf1669809..06f0c1d0e3d 100644 --- a/test/abilities/gorilla_tactics.test.ts +++ b/test/abilities/gorilla_tactics.test.ts @@ -39,7 +39,7 @@ describe("Abilities - Gorilla Tactics", () => { const initialAtkStat = darmanitan.getStat(Stat.ATK); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); @@ -57,13 +57,13 @@ describe("Abilities - Gorilla Tactics", () => { // First turn, lock move to Growl game.move.select(Moves.GROWL); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); // Second turn, Growl is interrupted by Disable await game.toNextTurn(); game.move.select(Moves.GROWL); - await game.forceEnemyMove(Moves.DISABLE); + await game.move.selectEnemyMove(Moves.DISABLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); diff --git a/test/abilities/gulp_missile.test.ts b/test/abilities/gulp_missile.test.ts index 4db2ae4190d..64cd106cc5e 100644 --- a/test/abilities/gulp_missile.test.ts +++ b/test/abilities/gulp_missile.test.ts @@ -241,13 +241,13 @@ describe("Abilities - Gulp Missile", () => { await game.classicMode.startBattle([Species.CRAMORANT]); game.move.select(Moves.SURF); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!.formIndex).toBe(GULPING_FORM); game.move.select(Moves.SUBSTITUTE); - await game.forceEnemyMove(Moves.POWER_TRIP); + await game.move.selectEnemyMove(Moves.POWER_TRIP); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); diff --git a/test/abilities/harvest.test.ts b/test/abilities/harvest.test.ts index 23c0ed9088c..36b1b879598 100644 --- a/test/abilities/harvest.test.ts +++ b/test/abilities/harvest.test.ts @@ -61,7 +61,7 @@ describe("Abilities - Harvest", () => { await game.classicMode.startBattle([Species.FEEBAS]); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.NUZZLE); + await game.move.selectEnemyMove(Moves.NUZZLE); await game.phaseInterceptor.to("BerryPhase"); expect(getPlayerBerries()).toHaveLength(0); expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toHaveLength(1); @@ -87,7 +87,7 @@ describe("Abilities - Harvest", () => { // Chug a few berries without harvest (should get tracked) game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.NUZZLE); + await game.move.selectEnemyMove(Moves.NUZZLE); await game.toNextTurn(); expect(milotic.battleData.berriesEaten).toEqual(expect.arrayContaining([BerryType.ENIGMA, BerryType.LUM])); @@ -98,7 +98,7 @@ describe("Abilities - Harvest", () => { vi.spyOn(PostTurnRestoreBerryAbAttr.prototype, "canApplyPostTurn").mockReturnValueOnce(false); game.override.ability(Abilities.HARVEST); game.move.select(Moves.GASTRO_ACID); - await game.forceEnemyMove(Moves.NUZZLE); + await game.move.selectEnemyMove(Moves.NUZZLE); await game.toNextTurn(); @@ -109,7 +109,7 @@ describe("Abilities - Harvest", () => { // proc a high roll and we _should_ get a berry back! game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); expect(milotic.battleData.berriesEaten).toHaveLength(3); @@ -126,7 +126,7 @@ describe("Abilities - Harvest", () => { regieleki.hp = 1; game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to("TurnEndPhase"); @@ -154,7 +154,7 @@ describe("Abilities - Harvest", () => { regieleki.hp = regieleki.getMaxHp() / 4 + 1; game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.SUPER_FANG); + await game.move.selectEnemyMove(Moves.SUPER_FANG); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); @@ -165,7 +165,7 @@ describe("Abilities - Harvest", () => { // heal up so harvest doesn't proc and kill enemy game.move.select(Moves.EARTHQUAKE); - await game.forceEnemyMove(Moves.HEAL_PULSE); + await game.move.selectEnemyMove(Moves.HEAL_PULSE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextWave(); @@ -191,7 +191,7 @@ describe("Abilities - Harvest", () => { feebas.battleData.berriesEaten = [BerryType.LUM, BerryType.STARF]; game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.phaseInterceptor.to("BerryPhase"); // Force RNG roll to hit the first berry we find that matches. @@ -219,7 +219,7 @@ describe("Abilities - Harvest", () => { player.battleData.berriesEaten = [BerryType.LUM, BerryType.STARF]; game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expectBerriesContaining(...initBerries); @@ -231,7 +231,7 @@ describe("Abilities - Harvest", () => { await game.classicMode.startBattle([Species.FEEBAS]); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.INCINERATE); + await game.move.selectEnemyMove(Moves.INCINERATE); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toEqual([]); @@ -242,7 +242,7 @@ describe("Abilities - Harvest", () => { await game.classicMode.startBattle([Species.FEEBAS]); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.KNOCK_OFF); + await game.move.selectEnemyMove(Moves.KNOCK_OFF); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toEqual([]); @@ -308,7 +308,7 @@ describe("Abilities - Harvest", () => { // steal a sitrus and immediately consume it game.move.select(Moves.FALSE_SWIPE); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(player.battleData.berriesEaten).toEqual([BerryType.SITRUS]); diff --git a/test/abilities/heatproof.test.ts b/test/abilities/heatproof.test.ts index 016237bb02f..0bec7e4a3db 100644 --- a/test/abilities/heatproof.test.ts +++ b/test/abilities/heatproof.test.ts @@ -38,7 +38,7 @@ describe("Abilities - Heatproof", () => { }); it("reduces Fire type damage by half", async () => { - await game.startBattle(); + await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; const initialHP = 1000; @@ -61,7 +61,7 @@ describe("Abilities - Heatproof", () => { it("reduces Burn damage by half", async () => { game.override.enemyStatusEffect(StatusEffect.BURN).enemySpecies(Species.ABRA); - await game.startBattle(); + await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; diff --git a/test/abilities/hyper_cutter.test.ts b/test/abilities/hyper_cutter.test.ts index 99a9db28025..76b66c2990e 100644 --- a/test/abilities/hyper_cutter.test.ts +++ b/test/abilities/hyper_cutter.test.ts @@ -34,7 +34,7 @@ describe("Abilities - Hyper Cutter", () => { // Reference Link: https://bulbapedia.bulbagarden.net/wiki/Hyper_Cutter_(Ability) it("only prevents ATK drops", async () => { - await game.startBattle(); + await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; diff --git a/test/abilities/libero.test.ts b/test/abilities/libero.test.ts index a6942b18aad..ea4e288bdb0 100644 --- a/test/abilities/libero.test.ts +++ b/test/abilities/libero.test.ts @@ -39,7 +39,7 @@ describe("Abilities - Libero", () => { test("ability applies and changes a pokemon's type", async () => { game.override.moveset([Moves.SPLASH]); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -54,7 +54,7 @@ describe("Abilities - Libero", () => { test.skip("ability applies only once per switch in", async () => { game.override.moveset([Moves.SPLASH, Moves.AGILITY]); - await game.startBattle([Species.MAGIKARP, Species.BULBASAUR]); + await game.classicMode.startBattle([Species.MAGIKARP, Species.BULBASAUR]); let leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -90,7 +90,7 @@ describe("Abilities - Libero", () => { test("ability applies correctly even if the pokemon's move has a variable type", async () => { game.override.moveset([Moves.WEATHER_BALL]); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -110,7 +110,7 @@ describe("Abilities - Libero", () => { game.override.moveset([Moves.TACKLE]); game.override.passiveAbility(Abilities.REFRIGERATE); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -128,7 +128,7 @@ describe("Abilities - Libero", () => { test("ability applies correctly even if the pokemon's move calls another move", async () => { game.override.moveset([Moves.NATURE_POWER]); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -143,7 +143,7 @@ describe("Abilities - Libero", () => { test("ability applies correctly even if the pokemon's move is delayed / charging", async () => { game.override.moveset([Moves.DIG]); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -158,7 +158,7 @@ describe("Abilities - Libero", () => { game.override.moveset([Moves.TACKLE]); game.override.enemyMoveset(Moves.SPLASH); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -176,7 +176,7 @@ describe("Abilities - Libero", () => { game.override.moveset([Moves.TACKLE]); game.override.enemyMoveset([Moves.PROTECT, Moves.PROTECT, Moves.PROTECT, Moves.PROTECT]); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -191,7 +191,7 @@ describe("Abilities - Libero", () => { game.override.moveset([Moves.TACKLE]); game.override.enemySpecies(Species.GASTLY); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -205,7 +205,7 @@ describe("Abilities - Libero", () => { test("ability is not applied if pokemon's type is the same as the move's type", async () => { game.override.moveset([Moves.SPLASH]); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -220,7 +220,7 @@ describe("Abilities - Libero", () => { test("ability is not applied if pokemon is terastallized", async () => { game.override.moveset([Moves.SPLASH]); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -236,7 +236,7 @@ describe("Abilities - Libero", () => { test("ability is not applied if pokemon uses struggle", async () => { game.override.moveset([Moves.STRUGGLE]); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -250,7 +250,7 @@ describe("Abilities - Libero", () => { test("ability is not applied if the pokemon's move fails", async () => { game.override.moveset([Moves.BURN_UP]); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -265,7 +265,7 @@ describe("Abilities - Libero", () => { game.override.moveset([Moves.TRICK_OR_TREAT]); game.override.enemySpecies(Species.GASTLY); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -279,7 +279,7 @@ describe("Abilities - Libero", () => { test("ability applies correctly and the pokemon curses itself", async () => { game.override.moveset([Moves.CURSE]); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); diff --git a/test/abilities/magic_bounce.test.ts b/test/abilities/magic_bounce.test.ts index 78e4114724c..be1ad2b413a 100644 --- a/test/abilities/magic_bounce.test.ts +++ b/test/abilities/magic_bounce.test.ts @@ -52,7 +52,7 @@ describe("Abilities - Magic Bounce", () => { game.override.enemyMoveset([Moves.FLY]); game.move.select(Moves.GROWL); - await game.forceEnemyMove(Moves.FLY); + await game.move.selectEnemyMove(Moves.FLY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); @@ -183,7 +183,7 @@ describe("Abilities - Magic Bounce", () => { // turn 1 game.move.select(Moves.ENCORE); - await game.forceEnemyMove(Moves.TACKLE); + await game.move.selectEnemyMove(Moves.TACKLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); expect(enemyPokemon.getTag(BattlerTagType.ENCORE)!["moveId"]).toBe(Moves.TACKLE); @@ -209,7 +209,7 @@ describe("Abilities - Magic Bounce", () => { // turn 1 game.move.select(Moves.GROWL); - await game.forceEnemyMove(Moves.TACKLE); + await game.move.selectEnemyMove(Moves.TACKLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); @@ -218,7 +218,7 @@ describe("Abilities - Magic Bounce", () => { // turn 2 game.move.select(Moves.ENCORE); - await game.forceEnemyMove(Moves.TACKLE); + await game.move.selectEnemyMove(Moves.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase"); expect(enemyPokemon.getTag(BattlerTagType.ENCORE)!["moveId"]).toBe(Moves.TACKLE); @@ -254,7 +254,7 @@ describe("Abilities - Magic Bounce", () => { vi.spyOn(stomping_tantrum, "calculateBattlePower"); game.move.select(Moves.SPORE); - await game.forceEnemyMove(Moves.CHARM); + await game.move.selectEnemyMove(Moves.CHARM); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.getLastXMoves(1)[0].result).toBe("success"); @@ -346,7 +346,7 @@ describe("Abilities - Magic Bounce", () => { game.override.moveset([Moves.TOXIC, Moves.CHARM]); await game.classicMode.startBattle([Species.BULBASAUR]); game.move.select(Moves.TOXIC); - await game.forceEnemyMove(Moves.FLY); + await game.move.selectEnemyMove(Moves.FLY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.status?.effect).toBe(StatusEffect.TOXIC); diff --git a/test/abilities/magic_guard.test.ts b/test/abilities/magic_guard.test.ts index 96a9f4dab74..61d06a74c58 100644 --- a/test/abilities/magic_guard.test.ts +++ b/test/abilities/magic_guard.test.ts @@ -46,7 +46,7 @@ describe("Abilities - Magic Guard", () => { it("ability should prevent damage caused by weather", async () => { game.override.weather(WeatherType.SANDSTORM); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -70,7 +70,7 @@ describe("Abilities - Magic Guard", () => { //Toxic keeps track of the turn counters -> important that Magic Guard keeps track of post-Toxic turns game.override.statusEffect(StatusEffect.POISON); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -91,7 +91,7 @@ describe("Abilities - Magic Guard", () => { game.override.enemyMoveset([Moves.WORRY_SEED, Moves.WORRY_SEED, Moves.WORRY_SEED, Moves.WORRY_SEED]); game.override.statusEffect(StatusEffect.POISON); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -110,7 +110,7 @@ describe("Abilities - Magic Guard", () => { game.override.enemyStatusEffect(StatusEffect.BURN); game.override.enemyAbility(Abilities.MAGIC_GUARD); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); game.move.select(Moves.SPLASH); @@ -132,7 +132,7 @@ describe("Abilities - Magic Guard", () => { game.override.enemyStatusEffect(StatusEffect.TOXIC); game.override.enemyAbility(Abilities.MAGIC_GUARD); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); game.move.select(Moves.SPLASH); @@ -159,7 +159,7 @@ describe("Abilities - Magic Guard", () => { const newTag = getArenaTag(ArenaTagType.SPIKES, 5, Moves.SPIKES, 0, 0, ArenaTagSide.BOTH)!; game.scene.arena.tags.push(newTag); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; game.move.select(Moves.SPLASH); @@ -184,7 +184,7 @@ describe("Abilities - Magic Guard", () => { game.scene.arena.tags.push(playerTag); game.scene.arena.tags.push(enemyTag); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; game.move.select(Moves.SPLASH); @@ -206,7 +206,7 @@ describe("Abilities - Magic Guard", () => { }); it("Magic Guard prevents against damage from volatile status effects", async () => { - await game.startBattle([Species.DUSKULL]); + await game.classicMode.startBattle([Species.DUSKULL]); game.override.moveset([Moves.CURSE]); game.override.enemyAbility(Abilities.MAGIC_GUARD); @@ -231,7 +231,7 @@ describe("Abilities - Magic Guard", () => { it("Magic Guard prevents crash damage", async () => { game.override.moveset([Moves.HIGH_JUMP_KICK]); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -249,7 +249,7 @@ describe("Abilities - Magic Guard", () => { it("Magic Guard prevents damage from recoil", async () => { game.override.moveset([Moves.TAKE_DOWN]); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -266,7 +266,7 @@ describe("Abilities - Magic Guard", () => { it("Magic Guard does not prevent damage from Struggle's recoil", async () => { game.override.moveset([Moves.STRUGGLE]); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -284,7 +284,7 @@ describe("Abilities - Magic Guard", () => { //This tests different move attributes than the recoil tests above it("Magic Guard prevents self-damage from attacking moves", async () => { game.override.moveset([Moves.STEEL_BEAM]); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -301,7 +301,7 @@ describe("Abilities - Magic Guard", () => { /* it("Magic Guard does not prevent self-damage from confusion", async () => { - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); game.move.select(Moves.CHARM); @@ -311,7 +311,7 @@ describe("Abilities - Magic Guard", () => { it("Magic Guard does not prevent self-damage from non-attacking moves", async () => { game.override.moveset([Moves.BELLY_DRUM]); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -333,7 +333,7 @@ describe("Abilities - Magic Guard", () => { game.override.enemyMoveset([Moves.SPORE, Moves.SPORE, Moves.SPORE, Moves.SPORE]); game.override.enemyAbility(Abilities.BAD_DREAMS); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -355,7 +355,7 @@ describe("Abilities - Magic Guard", () => { game.override.moveset([Moves.TACKLE]); game.override.enemyAbility(Abilities.AFTERMATH); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -379,7 +379,7 @@ describe("Abilities - Magic Guard", () => { game.override.moveset([Moves.TACKLE]); game.override.enemyAbility(Abilities.IRON_BARBS); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -402,7 +402,7 @@ describe("Abilities - Magic Guard", () => { game.override.moveset([Moves.ABSORB]); game.override.enemyAbility(Abilities.LIQUID_OOZE); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -425,7 +425,7 @@ describe("Abilities - Magic Guard", () => { game.override.passiveAbility(Abilities.SOLAR_POWER); game.override.weather(WeatherType.SUNNY); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; game.move.select(Moves.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); diff --git a/test/abilities/mimicry.test.ts b/test/abilities/mimicry.test.ts index 598f5790aa8..de196ffc939 100644 --- a/test/abilities/mimicry.test.ts +++ b/test/abilities/mimicry.test.ts @@ -55,7 +55,7 @@ describe("Abilities - Mimicry", () => { const playerPokemon = game.scene.getPlayerPokemon(); game.move.select(Moves.TRANSFORM); - await game.forceEnemyMove(Moves.PSYCHIC_TERRAIN); + await game.move.selectEnemyMove(Moves.PSYCHIC_TERRAIN); await game.toNextTurn(); expect(playerPokemon?.getTypes().includes(PokemonType.PSYCHIC)).toBe(true); @@ -64,7 +64,7 @@ describe("Abilities - Mimicry", () => { } game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); expect(playerPokemon?.getTypes().includes(PokemonType.ELECTRIC)).toBe(true); }); @@ -75,13 +75,13 @@ describe("Abilities - Mimicry", () => { const playerPokemon = game.scene.getPlayerPokemon(); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.FORESTS_CURSE); + await game.move.selectEnemyMove(Moves.FORESTS_CURSE); await game.toNextTurn(); expect(playerPokemon?.summonData.addedType).toBe(PokemonType.GRASS); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.GRASSY_TERRAIN); + await game.move.selectEnemyMove(Moves.GRASSY_TERRAIN); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon?.summonData.addedType).toBeNull(); diff --git a/test/abilities/mirror_armor.test.ts b/test/abilities/mirror_armor.test.ts index bd61f39ba75..5f9c63531d4 100644 --- a/test/abilities/mirror_armor.test.ts +++ b/test/abilities/mirror_armor.test.ts @@ -46,7 +46,7 @@ describe("Ability - Mirror Armor", () => { // Enemy has intimidate, enemy should lose -1 atk game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); await game.toNextTurn(); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(-1); @@ -63,7 +63,7 @@ describe("Ability - Mirror Armor", () => { // Enemy has intimidate, enemy should lose -1 atk game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); await game.toNextTurn(); expect(userPokemon.getStatStage(Stat.ATK)).toBe(-1); @@ -82,8 +82,8 @@ describe("Ability - Mirror Armor", () => { // Enemy has intimidate, enemy should lose -2 atk each game.move.select(Moves.SPLASH); game.move.select(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER_2); await game.toNextTurn(); expect(enemy1.getStatStage(Stat.ATK)).toBe(-2); @@ -104,8 +104,8 @@ describe("Ability - Mirror Armor", () => { // Enemy has intimidate, enemy should lose -1 atk game.move.select(Moves.SPLASH); game.move.select(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER_2); await game.toNextTurn(); expect(enemy1.getStatStage(Stat.ATK)).toBe(0); @@ -124,7 +124,7 @@ describe("Ability - Mirror Armor", () => { // Enemy has intimidate and uses tickle, enemy receives -2 atk and -1 defense game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.TICKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.TICKLE, BattlerIndex.PLAYER); await game.toNextTurn(); expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(-1); @@ -144,8 +144,8 @@ describe("Ability - Mirror Armor", () => { game.move.select(Moves.SPLASH); game.move.select(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.TICKLE, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.TICKLE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(Moves.TICKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.TICKLE, BattlerIndex.PLAYER_2); await game.toNextTurn(); expect(player1.getStatStage(Stat.ATK)).toBe(0); @@ -168,7 +168,7 @@ describe("Ability - Mirror Armor", () => { // Enemy has intimidate and uses tickle, enemy receives -2 atk and -1 defense game.move.select(Moves.TICKLE); - await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); await game.toNextTurn(); expect(userPokemon.getStatStage(Stat.DEF)).toBe(-1); @@ -187,7 +187,7 @@ describe("Ability - Mirror Armor", () => { // Enemy has intimidate and uses tickle, enemy has white smoke, no one loses stats game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.TICKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.TICKLE, BattlerIndex.PLAYER); await game.toNextTurn(); expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(0); @@ -206,7 +206,7 @@ describe("Ability - Mirror Armor", () => { // Enemy has intimidate and uses tickle, enemy has white smoke, no one loses stats game.move.select(Moves.TICKLE); - await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); await game.toNextTurn(); expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(0); @@ -224,7 +224,7 @@ describe("Ability - Mirror Armor", () => { // Enemy uses octolock, player loses stats at end of turn game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.OCTOLOCK, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.OCTOLOCK, BattlerIndex.PLAYER); await game.toNextTurn(); expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(0); @@ -242,7 +242,7 @@ describe("Ability - Mirror Armor", () => { // Player uses octolock, enemy loses stats at end of turn game.move.select(Moves.OCTOLOCK); - await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); await game.toNextTurn(); expect(userPokemon.getStatStage(Stat.DEF)).toBe(0); @@ -261,7 +261,7 @@ describe("Ability - Mirror Armor", () => { const userPokemon = game.scene.getPlayerPokemon()!; game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); await game.toNextTurn(); expect(userPokemon.getStatStage(Stat.ATK)).toBe(-1); @@ -276,11 +276,11 @@ describe("Ability - Mirror Armor", () => { const userPokemon = game.scene.getPlayerPokemon()!; game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.STICKY_WEB, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.STICKY_WEB, BattlerIndex.PLAYER); await game.toNextTurn(); game.doSwitchPokemon(1); - await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); await game.toNextTurn(); expect(userPokemon.getStatStage(Stat.SPD)).toBe(0); @@ -297,14 +297,14 @@ describe("Ability - Mirror Armor", () => { game.move.select(Moves.SPLASH); game.move.select(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.STICKY_WEB, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(Moves.STICKY_WEB, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER_2); await game.toNextTurn(); game.doSwitchPokemon(2); game.move.select(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER_2); await game.toNextTurn(); expect(enemy1.getStatStage(Stat.SPD)).toBe(-1); diff --git a/test/abilities/moxie.test.ts b/test/abilities/moxie.test.ts index bccdeda2b93..d4e1927e077 100644 --- a/test/abilities/moxie.test.ts +++ b/test/abilities/moxie.test.ts @@ -38,7 +38,7 @@ describe("Abilities - Moxie", () => { it("should raise ATK stat stage by 1 when winning a battle", async () => { const moveToUse = Moves.AERIAL_ACE; - await game.startBattle([Species.MIGHTYENA, Species.MIGHTYENA]); + await game.classicMode.startBattle([Species.MIGHTYENA, Species.MIGHTYENA]); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -56,7 +56,7 @@ describe("Abilities - Moxie", () => { async () => { game.override.battleStyle("double"); const moveToUse = Moves.AERIAL_ACE; - await game.startBattle([Species.MIGHTYENA, Species.MIGHTYENA]); + await game.classicMode.startBattle([Species.MIGHTYENA, Species.MIGHTYENA]); const [firstPokemon, secondPokemon] = game.scene.getPlayerField(); diff --git a/test/abilities/mycelium_might.test.ts b/test/abilities/mycelium_might.test.ts index 4a5700045fa..18465f9b64e 100644 --- a/test/abilities/mycelium_might.test.ts +++ b/test/abilities/mycelium_might.test.ts @@ -41,7 +41,7 @@ describe("Abilities - Mycelium Might", () => { **/ it("will move last in its priority bracket and ignore protective abilities", async () => { - await game.startBattle([Species.REGIELEKI]); + await game.classicMode.startBattle([Species.REGIELEKI]); const enemyPokemon = game.scene.getEnemyPokemon(); const playerIndex = game.scene.getPlayerPokemon()?.getBattlerIndex(); @@ -65,7 +65,7 @@ describe("Abilities - Mycelium Might", () => { it("will still go first if a status move that is in a higher priority bracket than the opponent's move is used", async () => { game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); - await game.startBattle([Species.REGIELEKI]); + await game.classicMode.startBattle([Species.REGIELEKI]); const enemyPokemon = game.scene.getEnemyPokemon(); const playerIndex = game.scene.getPlayerPokemon()?.getBattlerIndex(); @@ -87,7 +87,7 @@ describe("Abilities - Mycelium Might", () => { }, 20000); it("will not affect non-status moves", async () => { - await game.startBattle([Species.REGIELEKI]); + await game.classicMode.startBattle([Species.REGIELEKI]); const playerIndex = game.scene.getPlayerPokemon()!.getBattlerIndex(); const enemyIndex = game.scene.getEnemyPokemon()!.getBattlerIndex(); diff --git a/test/abilities/neutralizing_gas.test.ts b/test/abilities/neutralizing_gas.test.ts index 979583b7d97..cf19f36c9d0 100644 --- a/test/abilities/neutralizing_gas.test.ts +++ b/test/abilities/neutralizing_gas.test.ts @@ -110,16 +110,16 @@ describe("Abilities - Neutralizing Gas", () => { await game.classicMode.startBattle([Species.ACCELGOR, Species.ACCELGOR]); game.move.select(Moves.SPLASH, 0); game.move.select(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.ENTRAINMENT, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.ENTRAINMENT, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeDefined(); // Now one neut gas user is left game.move.select(Moves.SPLASH, 0); game.move.select(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.ENTRAINMENT, BattlerIndex.PLAYER_2); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.ENTRAINMENT, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(Moves.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeUndefined(); // No neut gas users are left diff --git a/test/abilities/pastel_veil.test.ts b/test/abilities/pastel_veil.test.ts index 4ae9763c4a6..21da1d1353d 100644 --- a/test/abilities/pastel_veil.test.ts +++ b/test/abilities/pastel_veil.test.ts @@ -34,7 +34,7 @@ describe("Abilities - Pastel Veil", () => { }); it("prevents the user and its allies from being afflicted by poison", async () => { - await game.startBattle([Species.MAGIKARP, Species.GALAR_PONYTA]); + await game.classicMode.startBattle([Species.MAGIKARP, Species.GALAR_PONYTA]); const ponyta = game.scene.getPlayerField()[1]; const magikarp = game.scene.getPlayerField()[0]; ponyta.abilityIndex = 1; @@ -50,7 +50,7 @@ describe("Abilities - Pastel Veil", () => { }); it("it heals the poisoned status condition of allies if user is sent out into battle", async () => { - await game.startBattle([Species.MAGIKARP, Species.FEEBAS, Species.GALAR_PONYTA]); + await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS, Species.GALAR_PONYTA]); const ponyta = game.scene.getPlayerParty()[2]; const magikarp = game.scene.getPlayerField()[0]; ponyta.abilityIndex = 1; diff --git a/test/abilities/perish_body.test.ts b/test/abilities/perish_body.test.ts index 27e76cb52ad..140e087843c 100644 --- a/test/abilities/perish_body.test.ts +++ b/test/abilities/perish_body.test.ts @@ -64,14 +64,14 @@ describe("Abilities - Perish Song", () => { const magikarp = game.scene.getEnemyPokemon(); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.PERISH_SONG); + await game.move.selectEnemyMove(Moves.PERISH_SONG); await game.toNextTurn(); expect(feebas?.summonData.tags[0].turnCount).toBe(3); expect(magikarp?.summonData.tags[0].turnCount).toBe(3); game.doSwitchPokemon(1); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); const cursola = game.scene.getPlayerPokemon(); @@ -79,7 +79,7 @@ describe("Abilities - Perish Song", () => { expect(magikarp?.summonData.tags[0].turnCount).toBe(2); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.AQUA_JET); + await game.move.selectEnemyMove(Moves.AQUA_JET); await game.toNextTurn(); expect(cursola?.summonData.tags.length).toBe(0); @@ -94,7 +94,7 @@ describe("Abilities - Perish Song", () => { const cursola = game.scene.getPlayerPokemon(); game.move.select(Moves.WHIRLWIND); - await game.forceEnemyMove(Moves.PERISH_SONG); + await game.move.selectEnemyMove(Moves.PERISH_SONG); await game.toNextTurn(); const magikarp = game.scene.getEnemyPokemon(); @@ -102,7 +102,7 @@ describe("Abilities - Perish Song", () => { expect(magikarp?.summonData.tags.length).toBe(0); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.AQUA_JET); + await game.move.selectEnemyMove(Moves.AQUA_JET); await game.toNextTurn(); expect(cursola?.summonData.tags[0].turnCount).toBe(2); diff --git a/test/abilities/power_spot.test.ts b/test/abilities/power_spot.test.ts index c3accdb04f8..0a062537202 100644 --- a/test/abilities/power_spot.test.ts +++ b/test/abilities/power_spot.test.ts @@ -39,7 +39,7 @@ describe("Abilities - Power Spot", () => { vi.spyOn(moveToCheck, "calculateBattlePower"); - await game.startBattle([Species.REGIELEKI, Species.STONJOURNER]); + await game.classicMode.startBattle([Species.REGIELEKI, Species.STONJOURNER]); game.move.select(Moves.DAZZLING_GLEAM); game.move.select(Moves.SPLASH, 1); await game.phaseInterceptor.to(MoveEffectPhase); @@ -53,7 +53,7 @@ describe("Abilities - Power Spot", () => { vi.spyOn(moveToCheck, "calculateBattlePower"); - await game.startBattle([Species.REGIELEKI, Species.STONJOURNER]); + await game.classicMode.startBattle([Species.REGIELEKI, Species.STONJOURNER]); game.move.select(Moves.BREAKING_SWIPE); game.move.select(Moves.SPLASH, 1); await game.phaseInterceptor.to(MoveEffectPhase); @@ -67,7 +67,7 @@ describe("Abilities - Power Spot", () => { vi.spyOn(moveToCheck, "calculateBattlePower"); - await game.startBattle([Species.STONJOURNER, Species.REGIELEKI]); + await game.classicMode.startBattle([Species.STONJOURNER, Species.REGIELEKI]); game.move.select(Moves.BREAKING_SWIPE); game.move.select(Moves.SPLASH, 1); await game.phaseInterceptor.to(TurnEndPhase); diff --git a/test/abilities/protean.test.ts b/test/abilities/protean.test.ts index 8e6b69dabd6..bfe6dd32282 100644 --- a/test/abilities/protean.test.ts +++ b/test/abilities/protean.test.ts @@ -39,7 +39,7 @@ describe("Abilities - Protean", () => { test("ability applies and changes a pokemon's type", async () => { game.override.moveset([Moves.SPLASH]); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -54,7 +54,7 @@ describe("Abilities - Protean", () => { test.skip("ability applies only once per switch in", async () => { game.override.moveset([Moves.SPLASH, Moves.AGILITY]); - await game.startBattle([Species.MAGIKARP, Species.BULBASAUR]); + await game.classicMode.startBattle([Species.MAGIKARP, Species.BULBASAUR]); let leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -90,7 +90,7 @@ describe("Abilities - Protean", () => { test("ability applies correctly even if the pokemon's move has a variable type", async () => { game.override.moveset([Moves.WEATHER_BALL]); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -110,7 +110,7 @@ describe("Abilities - Protean", () => { game.override.moveset([Moves.TACKLE]); game.override.passiveAbility(Abilities.REFRIGERATE); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -128,7 +128,7 @@ describe("Abilities - Protean", () => { test("ability applies correctly even if the pokemon's move calls another move", async () => { game.override.moveset([Moves.NATURE_POWER]); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -143,7 +143,7 @@ describe("Abilities - Protean", () => { test("ability applies correctly even if the pokemon's move is delayed / charging", async () => { game.override.moveset([Moves.DIG]); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -158,7 +158,7 @@ describe("Abilities - Protean", () => { game.override.moveset([Moves.TACKLE]); game.override.enemyMoveset(Moves.SPLASH); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -176,7 +176,7 @@ describe("Abilities - Protean", () => { game.override.moveset([Moves.TACKLE]); game.override.enemyMoveset([Moves.PROTECT, Moves.PROTECT, Moves.PROTECT, Moves.PROTECT]); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -191,7 +191,7 @@ describe("Abilities - Protean", () => { game.override.moveset([Moves.TACKLE]); game.override.enemySpecies(Species.GASTLY); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -205,7 +205,7 @@ describe("Abilities - Protean", () => { test("ability is not applied if pokemon's type is the same as the move's type", async () => { game.override.moveset([Moves.SPLASH]); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -220,7 +220,7 @@ describe("Abilities - Protean", () => { test("ability is not applied if pokemon is terastallized", async () => { game.override.moveset([Moves.SPLASH]); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -236,7 +236,7 @@ describe("Abilities - Protean", () => { test("ability is not applied if pokemon uses struggle", async () => { game.override.moveset([Moves.STRUGGLE]); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -250,7 +250,7 @@ describe("Abilities - Protean", () => { test("ability is not applied if the pokemon's move fails", async () => { game.override.moveset([Moves.BURN_UP]); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -265,7 +265,7 @@ describe("Abilities - Protean", () => { game.override.moveset([Moves.TRICK_OR_TREAT]); game.override.enemySpecies(Species.GASTLY); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -279,7 +279,7 @@ describe("Abilities - Protean", () => { test("ability applies correctly and the pokemon curses itself", async () => { game.override.moveset([Moves.CURSE]); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); diff --git a/test/abilities/quick_draw.test.ts b/test/abilities/quick_draw.test.ts index 79a29b0ce77..e761d236a93 100644 --- a/test/abilities/quick_draw.test.ts +++ b/test/abilities/quick_draw.test.ts @@ -41,7 +41,7 @@ describe("Abilities - Quick Draw", () => { }); test("makes pokemon going first in its priority bracket", async () => { - await game.startBattle(); + await game.classicMode.startBattle(); const pokemon = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -63,7 +63,7 @@ describe("Abilities - Quick Draw", () => { retry: 5, }, async () => { - await game.startBattle(); + await game.classicMode.startBattle(); const pokemon = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -83,7 +83,7 @@ describe("Abilities - Quick Draw", () => { test("does not increase priority", async () => { game.override.enemyMoveset([Moves.EXTREME_SPEED]); - await game.startBattle(); + await game.classicMode.startBattle(); const pokemon = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; diff --git a/test/abilities/sand_veil.test.ts b/test/abilities/sand_veil.test.ts index b82c79c681b..116850e1e5a 100644 --- a/test/abilities/sand_veil.test.ts +++ b/test/abilities/sand_veil.test.ts @@ -38,7 +38,7 @@ describe("Abilities - Sand Veil", () => { }); test("ability should increase the evasiveness of the source", async () => { - await game.startBattle([Species.SNORLAX, Species.BLISSEY]); + await game.classicMode.startBattle([Species.SNORLAX, Species.BLISSEY]); const leadPokemon = game.scene.getPlayerField(); diff --git a/test/abilities/schooling.test.ts b/test/abilities/schooling.test.ts index 803b4d2062a..ac4e3c837c5 100644 --- a/test/abilities/schooling.test.ts +++ b/test/abilities/schooling.test.ts @@ -39,7 +39,7 @@ describe("Abilities - SCHOOLING", () => { [Species.WISHIWASHI]: schoolForm, }); - await game.startBattle([Species.MAGIKARP, Species.WISHIWASHI]); + await game.classicMode.startBattle([Species.MAGIKARP, Species.WISHIWASHI]); const wishiwashi = game.scene.getPlayerParty().find(p => p.species.speciesId === Species.WISHIWASHI)!; expect(wishiwashi).not.toBe(undefined); diff --git a/test/abilities/screen_cleaner.test.ts b/test/abilities/screen_cleaner.test.ts index 840291f6420..ea99ba00f87 100644 --- a/test/abilities/screen_cleaner.test.ts +++ b/test/abilities/screen_cleaner.test.ts @@ -33,7 +33,7 @@ describe("Abilities - Screen Cleaner", () => { game.override.moveset([Moves.HAIL]); game.override.enemyMoveset([Moves.AURORA_VEIL, Moves.AURORA_VEIL, Moves.AURORA_VEIL, Moves.AURORA_VEIL]); - await game.startBattle([Species.MAGIKARP, Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); game.move.select(Moves.HAIL); await game.phaseInterceptor.to(TurnEndPhase); @@ -50,7 +50,7 @@ describe("Abilities - Screen Cleaner", () => { it("removes Light Screen", async () => { game.override.enemyMoveset([Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN]); - await game.startBattle([Species.MAGIKARP, Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); game.move.select(Moves.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); @@ -67,7 +67,7 @@ describe("Abilities - Screen Cleaner", () => { it("removes Reflect", async () => { game.override.enemyMoveset([Moves.REFLECT, Moves.REFLECT, Moves.REFLECT, Moves.REFLECT]); - await game.startBattle([Species.MAGIKARP, Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); game.move.select(Moves.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); diff --git a/test/abilities/shields_down.test.ts b/test/abilities/shields_down.test.ts index 2f9d2fb1f97..444b1fabf73 100644 --- a/test/abilities/shields_down.test.ts +++ b/test/abilities/shields_down.test.ts @@ -76,7 +76,7 @@ describe("Abilities - SHIELDS DOWN", () => { await game.classicMode.startBattle([Species.MINIOR]); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.SPORE); + await game.move.selectEnemyMove(Moves.SPORE); await game.phaseInterceptor.to(TurnEndPhase); expect(game.scene.getPlayerPokemon()!.status).toBe(undefined); @@ -115,12 +115,12 @@ describe("Abilities - SHIELDS DOWN", () => { // turn 1 game.move.select(Moves.GRAVITY); - await game.forceEnemyMove(Moves.TOXIC_SPIKES); + await game.move.selectEnemyMove(Moves.TOXIC_SPIKES); await game.toNextTurn(); // turn 2 game.doSwitchPokemon(1); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(Species.MINIOR); @@ -134,7 +134,7 @@ describe("Abilities - SHIELDS DOWN", () => { await game.classicMode.startBattle([Species.MAGIKARP, Species.MINIOR]); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.YAWN); + await game.move.selectEnemyMove(Moves.YAWN); await game.phaseInterceptor.to(TurnEndPhase); expect(game.scene.getPlayerPokemon()!.findTag(tag => tag.tagType === BattlerTagType.DROWSY)).toBe(undefined); @@ -146,7 +146,7 @@ describe("Abilities - SHIELDS DOWN", () => { await game.classicMode.startBattle([Species.MINIOR]); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.CONFUSE_RAY); + await game.move.selectEnemyMove(Moves.CONFUSE_RAY); await game.phaseInterceptor.to(TurnEndPhase); @@ -162,7 +162,7 @@ describe("Abilities - SHIELDS DOWN", () => { await game.classicMode.startBattle([Species.MINIOR]); game.move.select(Moves.SPORE); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); expect(game.scene.getEnemyPokemon()!.status?.effect).toBe(StatusEffect.SLEEP); diff --git a/test/abilities/simple.test.ts b/test/abilities/simple.test.ts index 1f084b1bf4c..cf3a692a7b0 100644 --- a/test/abilities/simple.test.ts +++ b/test/abilities/simple.test.ts @@ -31,7 +31,7 @@ describe("Abilities - Simple", () => { }); it("should double stat changes when applied", async () => { - await game.startBattle([Species.SLOWBRO]); + await game.classicMode.startBattle([Species.SLOWBRO]); const enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/test/abilities/stakeout.test.ts b/test/abilities/stakeout.test.ts index 8a2231bba0b..d986046a7e1 100644 --- a/test/abilities/stakeout.test.ts +++ b/test/abilities/stakeout.test.ts @@ -42,7 +42,7 @@ describe("Abilities - Stakeout", () => { const [enemy1] = game.scene.getEnemyParty(); game.move.select(Moves.SURF); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); const damage1 = enemy1.getInverseHp(); enemy1.hp = enemy1.getMaxHp(); @@ -65,17 +65,17 @@ describe("Abilities - Stakeout", () => { const [enemy1] = game.scene.getEnemyParty(); game.move.select(Moves.SURF); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); const damage1 = enemy1.getInverseHp(); enemy1.hp = enemy1.getMaxHp(); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.FLIP_TURN); + await game.move.selectEnemyMove(Moves.FLIP_TURN); await game.toNextTurn(); game.move.select(Moves.SURF); - await game.forceEnemyMove(Moves.FLIP_TURN); + await game.move.selectEnemyMove(Moves.FLIP_TURN); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); diff --git a/test/abilities/stall.test.ts b/test/abilities/stall.test.ts index 68b3fdedcd8..5c17f71c48d 100644 --- a/test/abilities/stall.test.ts +++ b/test/abilities/stall.test.ts @@ -37,7 +37,7 @@ describe("Abilities - Stall", () => { **/ it("Pokemon with Stall should move last in its priority bracket regardless of speed", async () => { - await game.startBattle([Species.SHUCKLE]); + await game.classicMode.startBattle([Species.SHUCKLE]); const playerIndex = game.scene.getPlayerPokemon()!.getBattlerIndex(); const enemyIndex = game.scene.getEnemyPokemon()!.getBattlerIndex(); @@ -55,7 +55,7 @@ describe("Abilities - Stall", () => { }, 20000); it("Pokemon with Stall will go first if a move that is in a higher priority bracket than the opponent's move is used", async () => { - await game.startBattle([Species.SHUCKLE]); + await game.classicMode.startBattle([Species.SHUCKLE]); const playerIndex = game.scene.getPlayerPokemon()!.getBattlerIndex(); const enemyIndex = game.scene.getEnemyPokemon()!.getBattlerIndex(); @@ -74,7 +74,7 @@ describe("Abilities - Stall", () => { it("If both Pokemon have stall and use the same move, speed is used to determine who goes first.", async () => { game.override.ability(Abilities.STALL); - await game.startBattle([Species.SHUCKLE]); + await game.classicMode.startBattle([Species.SHUCKLE]); const playerIndex = game.scene.getPlayerPokemon()!.getBattlerIndex(); const enemyIndex = game.scene.getEnemyPokemon()!.getBattlerIndex(); diff --git a/test/abilities/sturdy.test.ts b/test/abilities/sturdy.test.ts index bda8c6d1e35..dbdd1b4570e 100644 --- a/test/abilities/sturdy.test.ts +++ b/test/abilities/sturdy.test.ts @@ -36,14 +36,14 @@ describe("Abilities - Sturdy", () => { }); test("Sturdy activates when user is at full HP", async () => { - await game.startBattle(); + await game.classicMode.startBattle(); game.move.select(Moves.CLOSE_COMBAT); await game.phaseInterceptor.to(MoveEndPhase); expect(game.scene.getEnemyParty()[0].hp).toBe(1); }); test("Sturdy doesn't activate when user is not at full HP", async () => { - await game.startBattle(); + await game.classicMode.startBattle(); const enemyPokemon: EnemyPokemon = game.scene.getEnemyParty()[0]; enemyPokemon.hp = enemyPokemon.getMaxHp() - 1; @@ -56,7 +56,7 @@ describe("Abilities - Sturdy", () => { }); test("Sturdy pokemon should be immune to OHKO moves", async () => { - await game.startBattle(); + await game.classicMode.startBattle(); game.move.select(Moves.FISSURE); await game.phaseInterceptor.to(MoveEndPhase); @@ -67,7 +67,7 @@ describe("Abilities - Sturdy", () => { test("Sturdy is ignored by pokemon with `Abilities.MOLD_BREAKER`", async () => { game.override.ability(Abilities.MOLD_BREAKER); - await game.startBattle(); + await game.classicMode.startBattle(); game.move.select(Moves.CLOSE_COMBAT); await game.phaseInterceptor.to(DamageAnimPhase); diff --git a/test/abilities/supreme_overlord.test.ts b/test/abilities/supreme_overlord.test.ts index 6cc52de64bf..4c0be80daea 100644 --- a/test/abilities/supreme_overlord.test.ts +++ b/test/abilities/supreme_overlord.test.ts @@ -44,7 +44,7 @@ describe("Abilities - Supreme Overlord", () => { }); it("should increase Power by 20% if 2 Pokemon are fainted in the party", async () => { - await game.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); + await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); game.move.select(Moves.EXPLOSION); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); diff --git a/test/abilities/sweet_veil.test.ts b/test/abilities/sweet_veil.test.ts index e609aa6e7d2..80d7165619f 100644 --- a/test/abilities/sweet_veil.test.ts +++ b/test/abilities/sweet_veil.test.ts @@ -33,7 +33,7 @@ describe("Abilities - Sweet Veil", () => { }); it("prevents the user and its allies from falling asleep", async () => { - await game.startBattle([Species.SWIRLIX, Species.MAGIKARP]); + await game.classicMode.startBattle([Species.SWIRLIX, Species.MAGIKARP]); game.move.select(Moves.SPLASH); game.move.select(Moves.SPLASH, 1); @@ -45,7 +45,7 @@ describe("Abilities - Sweet Veil", () => { it("causes Rest to fail when used by the user or its allies", async () => { game.override.enemyMoveset(Moves.SPLASH); - await game.startBattle([Species.SWIRLIX, Species.MAGIKARP]); + await game.classicMode.startBattle([Species.SWIRLIX, Species.MAGIKARP]); game.move.select(Moves.SPLASH); game.move.select(Moves.REST, 1); @@ -57,7 +57,7 @@ describe("Abilities - Sweet Veil", () => { it("causes Yawn to fail if used on the user or its allies", async () => { game.override.enemyMoveset([Moves.YAWN, Moves.YAWN, Moves.YAWN, Moves.YAWN]); - await game.startBattle([Species.SWIRLIX, Species.MAGIKARP]); + await game.classicMode.startBattle([Species.SWIRLIX, Species.MAGIKARP]); game.move.select(Moves.SPLASH); game.move.select(Moves.SPLASH, 1); @@ -73,7 +73,7 @@ describe("Abilities - Sweet Veil", () => { game.override.startingLevel(5); game.override.enemyMoveset(Moves.SPLASH); - await game.startBattle([Species.SHUCKLE, Species.SHUCKLE, Species.SWIRLIX]); + await game.classicMode.startBattle([Species.SHUCKLE, Species.SHUCKLE, Species.SWIRLIX]); game.move.select(Moves.SPLASH); game.move.select(Moves.YAWN, 1, BattlerIndex.PLAYER); diff --git a/test/abilities/unburden.test.ts b/test/abilities/unburden.test.ts index ff28c3b6a09..ea4f84545aa 100644 --- a/test/abilities/unburden.test.ts +++ b/test/abilities/unburden.test.ts @@ -244,8 +244,8 @@ describe("Abilities - Unburden", () => { // Turn 1: Treecko gets hit by False Swipe and eats Sitrus Berry, activating Unburden game.move.select(Moves.SPLASH); game.move.select(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.FALSE_SWIPE, 0); - await game.forceEnemyMove(Moves.FALSE_SWIPE, 0); + await game.move.selectEnemyMove(Moves.FALSE_SWIPE, 0); + await game.move.selectEnemyMove(Moves.FALSE_SWIPE, 0); await game.phaseInterceptor.to("TurnEndPhase"); expect(getHeldItemCount(treecko)).toBeLessThan(playerHeldItems); @@ -302,7 +302,7 @@ describe("Abilities - Unburden", () => { // Turn 1: Get hit by False Swipe and eat Sitrus Berry, activating Unburden game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.FALSE_SWIPE); + await game.move.selectEnemyMove(Moves.FALSE_SWIPE); await game.toNextTurn(); expect(getHeldItemCount(playerPokemon)).toBeLessThan(playerHeldItems); @@ -310,7 +310,7 @@ describe("Abilities - Unburden", () => { // Turn 2: Get hit by Worry Seed, deactivating Unburden game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.WORRY_SEED); + await game.move.selectEnemyMove(Moves.WORRY_SEED); await game.toNextTurn(); expect(getHeldItemCount(playerPokemon)).toBeLessThan(playerHeldItems); @@ -343,13 +343,13 @@ describe("Abilities - Unburden", () => { const initialSpeed = treecko.getStat(Stat.SPD); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.THIEF); + await game.move.selectEnemyMove(Moves.THIEF); game.doSelectPartyPokemon(1); await game.toNextTurn(); game.doRevivePokemon(1); game.doSwitchPokemon(1); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!).toBe(treecko); @@ -372,8 +372,8 @@ describe("Abilities - Unburden", () => { game.move.select(Moves.SPLASH); game.move.select(Moves.REVIVAL_BLESSING, 1); - await game.forceEnemyMove(Moves.THIEF, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.THIEF, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2]); game.doSelectPartyPokemon(0, "RevivalBlessingPhase"); await game.toNextTurn(); diff --git a/test/abilities/wimp_out.test.ts b/test/abilities/wimp_out.test.ts index 67885a82163..32a627f20f9 100644 --- a/test/abilities/wimp_out.test.ts +++ b/test/abilities/wimp_out.test.ts @@ -544,8 +544,8 @@ describe("Abilities - Wimp Out", () => { // turn 1 game.move.select(Moves.DRAGON_ENERGY, 0); game.move.select(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.SPLASH); - await game.forceEnemyMove(Moves.ENDURE); + await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.ENDURE); await game.phaseInterceptor.to("SelectModifierPhase"); expect(game.scene.currentBattle.waveIndex).toBe(wave + 1); diff --git a/test/abilities/wind_power.test.ts b/test/abilities/wind_power.test.ts index 66c72d454ab..11585520c73 100644 --- a/test/abilities/wind_power.test.ts +++ b/test/abilities/wind_power.test.ts @@ -31,7 +31,7 @@ describe("Abilities - Wind Power", () => { }); it("it becomes charged when hit by wind moves", async () => { - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const shiftry = game.scene.getEnemyPokemon()!; expect(shiftry.getTag(BattlerTagType.CHARGED)).toBeUndefined(); @@ -46,7 +46,7 @@ describe("Abilities - Wind Power", () => { game.override.ability(Abilities.WIND_POWER); game.override.enemySpecies(Species.MAGIKARP); - await game.startBattle([Species.SHIFTRY]); + await game.classicMode.startBattle([Species.SHIFTRY]); const shiftry = game.scene.getPlayerPokemon()!; expect(shiftry.getTag(BattlerTagType.CHARGED)).toBeUndefined(); @@ -61,7 +61,7 @@ describe("Abilities - Wind Power", () => { game.override.enemySpecies(Species.MAGIKARP); game.override.ability(Abilities.WIND_POWER); - await game.startBattle([Species.SHIFTRY]); + await game.classicMode.startBattle([Species.SHIFTRY]); const magikarp = game.scene.getEnemyPokemon()!; const shiftry = game.scene.getPlayerPokemon()!; @@ -79,7 +79,7 @@ describe("Abilities - Wind Power", () => { it("does not interact with Sandstorm", async () => { game.override.enemySpecies(Species.MAGIKARP); - await game.startBattle([Species.SHIFTRY]); + await game.classicMode.startBattle([Species.SHIFTRY]); const shiftry = game.scene.getPlayerPokemon()!; expect(shiftry.getTag(BattlerTagType.CHARGED)).toBeUndefined(); diff --git a/test/abilities/wonder_skin.test.ts b/test/abilities/wonder_skin.test.ts index fd4cc77bd1c..cb5dd4e117f 100644 --- a/test/abilities/wonder_skin.test.ts +++ b/test/abilities/wonder_skin.test.ts @@ -36,7 +36,7 @@ describe("Abilities - Wonder Skin", () => { vi.spyOn(moveToCheck, "calculateBattleAccuracy"); - await game.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([Species.PIKACHU]); game.move.select(Moves.CHARM); await game.phaseInterceptor.to(MoveEffectPhase); @@ -48,7 +48,7 @@ describe("Abilities - Wonder Skin", () => { vi.spyOn(moveToCheck, "calculateBattleAccuracy"); - await game.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([Species.PIKACHU]); game.move.select(Moves.TACKLE); await game.phaseInterceptor.to(MoveEffectPhase); diff --git a/test/abilities/zero_to_hero.test.ts b/test/abilities/zero_to_hero.test.ts index 2cdc516dc6b..c159d007765 100644 --- a/test/abilities/zero_to_hero.test.ts +++ b/test/abilities/zero_to_hero.test.ts @@ -39,7 +39,7 @@ describe("Abilities - ZERO TO HERO", () => { [Species.PALAFIN]: heroForm, }); - await game.startBattle([Species.FEEBAS, Species.PALAFIN, Species.PALAFIN]); + await game.classicMode.startBattle([Species.FEEBAS, Species.PALAFIN, Species.PALAFIN]); const palafin1 = game.scene.getPlayerParty()[1]; const palafin2 = game.scene.getPlayerParty()[2]; @@ -61,7 +61,7 @@ describe("Abilities - ZERO TO HERO", () => { }); it("should swap to Hero form when switching out during a battle", async () => { - await game.startBattle([Species.PALAFIN, Species.FEEBAS]); + await game.classicMode.startBattle([Species.PALAFIN, Species.FEEBAS]); const palafin = game.scene.getPlayerPokemon()!; expect(palafin.formIndex).toBe(baseForm); @@ -72,7 +72,7 @@ describe("Abilities - ZERO TO HERO", () => { }); it("should not swap to Hero form if switching due to faint", async () => { - await game.startBattle([Species.PALAFIN, Species.FEEBAS]); + await game.classicMode.startBattle([Species.PALAFIN, Species.FEEBAS]); const palafin = game.scene.getPlayerPokemon()!; expect(palafin.formIndex).toBe(baseForm); @@ -89,7 +89,7 @@ describe("Abilities - ZERO TO HERO", () => { [Species.PALAFIN]: heroForm, }); - await game.startBattle([Species.PALAFIN, Species.FEEBAS]); + await game.classicMode.startBattle([Species.PALAFIN, Species.FEEBAS]); const palafin = game.scene.getPlayerPokemon()!; expect(palafin.formIndex).toBe(heroForm); diff --git a/test/arena/weather_fog.test.ts b/test/arena/weather_fog.test.ts index ae41c9d14e8..69f167b8cf1 100644 --- a/test/arena/weather_fog.test.ts +++ b/test/arena/weather_fog.test.ts @@ -37,7 +37,7 @@ describe("Weather - Fog", () => { vi.spyOn(moveToCheck, "calculateBattleAccuracy"); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); game.move.select(Moves.TACKLE); await game.phaseInterceptor.to(MoveEffectPhase); diff --git a/test/battle/battle-order.test.ts b/test/battle/battle-order.test.ts index 43fa1e59c14..876730169f9 100644 --- a/test/battle/battle-order.test.ts +++ b/test/battle/battle-order.test.ts @@ -32,7 +32,7 @@ describe("Battle order", () => { }); it("opponent faster than player 50 vs 150", async () => { - await game.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([Species.BULBASAUR]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -51,7 +51,7 @@ describe("Battle order", () => { }, 20000); it("Player faster than opponent 150 vs 50", async () => { - await game.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([Species.BULBASAUR]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -71,7 +71,7 @@ describe("Battle order", () => { it("double - both opponents faster than player 50/50 vs 150/150", async () => { game.override.battleStyle("double"); - await game.startBattle([Species.BULBASAUR, Species.BLASTOISE]); + await game.classicMode.startBattle([Species.BULBASAUR, Species.BLASTOISE]); const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); @@ -95,7 +95,7 @@ describe("Battle order", () => { it("double - speed tie except 1 - 100/100 vs 100/150", async () => { game.override.battleStyle("double"); - await game.startBattle([Species.BULBASAUR, Species.BLASTOISE]); + await game.classicMode.startBattle([Species.BULBASAUR, Species.BLASTOISE]); const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); @@ -119,7 +119,7 @@ describe("Battle order", () => { it("double - speed tie 100/150 vs 100/150", async () => { game.override.battleStyle("double"); - await game.startBattle([Species.BULBASAUR, Species.BLASTOISE]); + await game.classicMode.startBattle([Species.BULBASAUR, Species.BLASTOISE]); const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); diff --git a/test/battle/battle.test.ts b/test/battle/battle.test.ts index e980984580e..8c4315dcabc 100644 --- a/test/battle/battle.test.ts +++ b/test/battle/battle.test.ts @@ -85,7 +85,7 @@ describe("Test Battle Phase", () => { }, 20000); it("newGame one-liner", async () => { - await game.startBattle(); + await game.classicMode.startBattle(); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); @@ -98,7 +98,7 @@ describe("Test Battle Phase", () => { game.override.moveset([Moves.TACKLE]); game.override.enemyAbility(Abilities.HYDRATION); game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); - await game.startBattle(); + await game.classicMode.startBattle(); game.move.select(Moves.TACKLE); await game.phaseInterceptor.runFrom(EnemyCommandPhase).to(SelectModifierPhase, false); }, 20000); @@ -112,7 +112,7 @@ describe("Test Battle Phase", () => { game.override.enemyAbility(Abilities.HYDRATION); game.override.enemyMoveset([Moves.TAIL_WHIP, Moves.TAIL_WHIP, Moves.TAIL_WHIP, Moves.TAIL_WHIP]); game.override.battleStyle("single"); - await game.startBattle(); + await game.classicMode.startBattle(); game.move.select(Moves.TACKLE); await game.phaseInterceptor.runFrom(EnemyCommandPhase).to(TurnInitPhase, false); }, 20000); @@ -127,7 +127,7 @@ describe("Test Battle Phase", () => { }, 20000); it("start battle with selected team", async () => { - await game.startBattle([Species.CHARIZARD, Species.CHANSEY, Species.MEW]); + await game.classicMode.startBattle([Species.CHARIZARD, Species.CHANSEY, Species.MEW]); expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(Species.CHARIZARD); expect(game.scene.getPlayerParty()[1].species.speciesId).toBe(Species.CHANSEY); expect(game.scene.getPlayerParty()[2].species.speciesId).toBe(Species.MEW); @@ -207,7 +207,7 @@ describe("Test Battle Phase", () => { game.override.enemySpecies(Species.MIGHTYENA); game.override.enemyAbility(Abilities.HYDRATION); game.override.ability(Abilities.HYDRATION); - await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); @@ -217,7 +217,7 @@ describe("Test Battle Phase", () => { game.override.enemySpecies(Species.MIGHTYENA); game.override.enemyAbility(Abilities.HYDRATION); game.override.ability(Abilities.HYDRATION); - await game.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([Species.BLASTOISE]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); @@ -228,7 +228,7 @@ describe("Test Battle Phase", () => { game.override.enemyAbility(Abilities.HYDRATION); game.override.ability(Abilities.HYDRATION); game.override.startingWave(3); - await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); @@ -239,7 +239,7 @@ describe("Test Battle Phase", () => { game.override.enemyAbility(Abilities.HYDRATION); game.override.ability(Abilities.HYDRATION); game.override.startingWave(3); - await game.startBattle([Species.BLASTOISE, Species.CHARIZARD, Species.DARKRAI, Species.GABITE]); + await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD, Species.DARKRAI, Species.GABITE]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); @@ -255,7 +255,7 @@ describe("Test Battle Phase", () => { game.override.startingWave(3); game.override.moveset([moveToUse]); game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); - await game.startBattle([Species.DARMANITAN, Species.CHARIZARD]); + await game.classicMode.startBattle([Species.DARMANITAN, Species.CHARIZARD]); game.move.select(moveToUse); await game.phaseInterceptor.to(DamageAnimPhase, false); @@ -275,7 +275,7 @@ describe("Test Battle Phase", () => { game.override.startingWave(3); game.override.moveset([moveToUse]); game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); - await game.startBattle(); + await game.classicMode.startBattle(); const turn = game.scene.currentBattle.turn; game.move.select(moveToUse); await game.toNextTurn(); @@ -318,7 +318,7 @@ describe("Test Battle Phase", () => { .enemyMoveset(Moves.SPLASH) .startingHeldItems([{ name: "TEMP_STAT_STAGE_BOOSTER", type: Stat.ACC }]); - await game.startBattle(); + await game.classicMode.startBattle(); game.scene.getPlayerPokemon()!.hp = 1; game.move.select(moveToUse); diff --git a/test/battle/double_battle.test.ts b/test/battle/double_battle.test.ts index a30d55aac3d..99c52ea5add 100644 --- a/test/battle/double_battle.test.ts +++ b/test/battle/double_battle.test.ts @@ -34,7 +34,7 @@ describe("Double Battles", () => { // (There were bugs that either only summon one when can summon two, player stuck in switchPhase etc) it("3v2 edge case: player summons 2 pokemon on the next battle after being fainted and revived", async () => { game.override.battleStyle("double").enemyMoveset(Moves.SPLASH).moveset(Moves.SPLASH); - await game.startBattle([Species.BULBASAUR, Species.CHARIZARD, Species.SQUIRTLE]); + await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARIZARD, Species.SQUIRTLE]); game.move.select(Moves.SPLASH); game.move.select(Moves.SPLASH, 1); diff --git a/test/battle/special_battle.test.ts b/test/battle/special_battle.test.ts index 163f23e488d..6f4034cd8cd 100644 --- a/test/battle/special_battle.test.ts +++ b/test/battle/special_battle.test.ts @@ -33,63 +33,63 @@ describe("Test Battle Phase", () => { it("startBattle 2vs1 boss", async () => { game.override.battleStyle("single").startingWave(10); - await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs2 boss", async () => { game.override.battleStyle("double").startingWave(10); - await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs2 trainer", async () => { game.override.battleStyle("double").startingWave(5); - await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs1 trainer", async () => { game.override.battleStyle("single").startingWave(5); - await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs1 rival", async () => { game.override.battleStyle("single").startingWave(8); - await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs2 rival", async () => { game.override.battleStyle("double").startingWave(8); - await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 1vs1 trainer", async () => { game.override.battleStyle("single").startingWave(5); - await game.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([Species.BLASTOISE]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs2 trainer", async () => { game.override.battleStyle("double").startingWave(5); - await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 4vs2 trainer", async () => { game.override.battleStyle("double").startingWave(5); - await game.startBattle([Species.BLASTOISE, Species.CHARIZARD, Species.DARKRAI, Species.GABITE]); + await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD, Species.DARKRAI, Species.GABITE]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); diff --git a/test/daily_mode.test.ts b/test/daily_mode.test.ts index a7f5784087a..a5901da4821 100644 --- a/test/daily_mode.test.ts +++ b/test/daily_mode.test.ts @@ -30,7 +30,7 @@ describe("Daily Mode", () => { }); it("should initialize properly", async () => { - await game.dailyMode.runToSummon(); + await game.dailyMode.startBattle(); const party = game.scene.getPlayerParty(); expect(party).toHaveLength(3); diff --git a/test/evolution.test.ts b/test/evolution.test.ts index 4f91cd99382..a453d744da8 100644 --- a/test/evolution.test.ts +++ b/test/evolution.test.ts @@ -110,7 +110,7 @@ describe("Evolution", () => { .startingLevel(16) .enemyLevel(50); - await game.startBattle([Species.TOTODILE]); + await game.classicMode.startBattle([Species.TOTODILE]); const totodile = game.scene.getPlayerPokemon()!; const hpBefore = totodile.hp; @@ -138,7 +138,7 @@ describe("Evolution", () => { .startingLevel(13) .enemyLevel(30); - await game.startBattle([Species.CYNDAQUIL]); + await game.classicMode.startBattle([Species.CYNDAQUIL]); const cyndaquil = game.scene.getPlayerPokemon()!; cyndaquil.hp = Math.floor(cyndaquil.getMaxHp() / 2); @@ -171,7 +171,7 @@ describe("Evolution", () => { * If the value is 0, it's a 3 family maushold, whereas if the value is * 1, 2 or 3, it's a 4 family maushold */ - await game.startBattle([Species.TANDEMAUS]); // starts us off with a tandemaus + await game.classicMode.startBattle([Species.TANDEMAUS]); // starts us off with a tandemaus const playerPokemon = game.scene.getPlayerPokemon()!; playerPokemon.level = 25; // tandemaus evolves at level 25 vi.spyOn(Utils, "randSeedInt").mockReturnValue(0); // setting the random generator to be 0 to force a three family maushold diff --git a/test/items/dire_hit.test.ts b/test/items/dire_hit.test.ts index 6e20bc723e5..e848bceb514 100644 --- a/test/items/dire_hit.test.ts +++ b/test/items/dire_hit.test.ts @@ -40,7 +40,7 @@ describe("Items - Dire Hit", () => { }, 20000); it("should raise CRIT stage by 1", async () => { - await game.startBattle([Species.GASTLY]); + await game.classicMode.startBattle([Species.GASTLY]); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -56,7 +56,7 @@ describe("Items - Dire Hit", () => { it("should renew how many battles are left of existing DIRE_HIT when picking up new DIRE_HIT", async () => { game.override.itemRewards([{ name: "DIRE_HIT" }]); - await game.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([Species.PIKACHU]); game.move.select(Moves.SPLASH); diff --git a/test/items/exp_booster.test.ts b/test/items/exp_booster.test.ts index ec7528c3b23..106574b6849 100644 --- a/test/items/exp_booster.test.ts +++ b/test/items/exp_booster.test.ts @@ -29,7 +29,7 @@ describe("EXP Modifier Items", () => { it("EXP booster items stack multiplicatively", async () => { game.override.startingHeldItems([{ name: "LUCKY_EGG", count: 3 }, { name: "GOLDEN_EGG" }]); - await game.startBattle(); + await game.classicMode.startBattle(); const partyMember = game.scene.getPlayerPokemon()!; partyMember.exp = 100; diff --git a/test/items/leek.test.ts b/test/items/leek.test.ts index 9bde2c86339..7a6975f6dae 100644 --- a/test/items/leek.test.ts +++ b/test/items/leek.test.ts @@ -32,7 +32,7 @@ describe("Items - Leek", () => { }); it("should raise CRIT stage by 2 when held by FARFETCHD", async () => { - await game.startBattle([Species.FARFETCHD]); + await game.classicMode.startBattle([Species.FARFETCHD]); const enemyMember = game.scene.getEnemyPokemon()!; @@ -46,7 +46,7 @@ describe("Items - Leek", () => { }, 20000); it("should raise CRIT stage by 2 when held by GALAR_FARFETCHD", async () => { - await game.startBattle([Species.GALAR_FARFETCHD]); + await game.classicMode.startBattle([Species.GALAR_FARFETCHD]); const enemyMember = game.scene.getEnemyPokemon()!; @@ -60,7 +60,7 @@ describe("Items - Leek", () => { }, 20000); it("should raise CRIT stage by 2 when held by SIRFETCHD", async () => { - await game.startBattle([Species.SIRFETCHD]); + await game.classicMode.startBattle([Species.SIRFETCHD]); const enemyMember = game.scene.getEnemyPokemon()!; @@ -77,7 +77,7 @@ describe("Items - Leek", () => { // Randomly choose from the Farfetch'd line const species = [Species.FARFETCHD, Species.GALAR_FARFETCHD, Species.SIRFETCHD]; - await game.startBattle([species[randInt(species.length)], Species.PIKACHU]); + await game.classicMode.startBattle([species[randInt(species.length)], Species.PIKACHU]); const [partyMember, ally] = game.scene.getPlayerParty(); @@ -105,7 +105,7 @@ describe("Items - Leek", () => { // Randomly choose from the Farfetch'd line const species = [Species.FARFETCHD, Species.GALAR_FARFETCHD, Species.SIRFETCHD]; - await game.startBattle([Species.PIKACHU, species[randInt(species.length)]]); + await game.classicMode.startBattle([Species.PIKACHU, species[randInt(species.length)]]); const [partyMember, ally] = game.scene.getPlayerParty(); @@ -130,7 +130,7 @@ describe("Items - Leek", () => { }, 20000); it("should not raise CRIT stage when held by a Pokemon outside of FARFETCHD line", async () => { - await game.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([Species.PIKACHU]); const enemyMember = game.scene.getEnemyPokemon()!; diff --git a/test/items/leftovers.test.ts b/test/items/leftovers.test.ts index 19739703f19..f4825c2b721 100644 --- a/test/items/leftovers.test.ts +++ b/test/items/leftovers.test.ts @@ -34,7 +34,7 @@ describe("Items - Leftovers", () => { }); it("leftovers works", async () => { - await game.startBattle([Species.ARCANINE]); + await game.classicMode.startBattle([Species.ARCANINE]); // Make sure leftovers are there expect(game.scene.modifiers[0].type.id).toBe("LEFTOVERS"); diff --git a/test/items/light_ball.test.ts b/test/items/light_ball.test.ts index cdcffe810fa..214f6f624e6 100644 --- a/test/items/light_ball.test.ts +++ b/test/items/light_ball.test.ts @@ -150,7 +150,7 @@ describe("Items - Light Ball", () => { }, 20000); it("LIGHT_BALL held by fused PIKACHU (part)", async () => { - await game.startBattle([Species.MAROWAK, Species.PIKACHU]); + await game.classicMode.startBattle([Species.MAROWAK, Species.PIKACHU]); const partyMember = game.scene.getPlayerParty()[0]; const ally = game.scene.getPlayerParty()[1]; @@ -189,7 +189,7 @@ describe("Items - Light Ball", () => { }, 20000); it("LIGHT_BALL not held by PIKACHU", async () => { - await game.startBattle([Species.MAROWAK]); + await game.classicMode.startBattle([Species.MAROWAK]); const partyMember = game.scene.getPlayerParty()[0]; diff --git a/test/items/metal_powder.test.ts b/test/items/metal_powder.test.ts index e924d75fce9..a9a81072622 100644 --- a/test/items/metal_powder.test.ts +++ b/test/items/metal_powder.test.ts @@ -82,7 +82,7 @@ describe("Items - Metal Powder", () => { }); it("METAL_POWDER held by DITTO", async () => { - await game.startBattle([Species.DITTO]); + await game.classicMode.startBattle([Species.DITTO]); const partyMember = game.scene.getPlayerParty()[0]; @@ -105,7 +105,7 @@ describe("Items - Metal Powder", () => { }, 20000); it("METAL_POWDER held by fused DITTO (base)", async () => { - await game.startBattle([Species.DITTO, Species.MAROWAK]); + await game.classicMode.startBattle([Species.DITTO, Species.MAROWAK]); const partyMember = game.scene.getPlayerParty()[0]; const ally = game.scene.getPlayerParty()[1]; @@ -138,7 +138,7 @@ describe("Items - Metal Powder", () => { }, 20000); it("METAL_POWDER held by fused DITTO (part)", async () => { - await game.startBattle([Species.MAROWAK, Species.DITTO]); + await game.classicMode.startBattle([Species.MAROWAK, Species.DITTO]); const partyMember = game.scene.getPlayerParty()[0]; const ally = game.scene.getPlayerParty()[1]; @@ -171,7 +171,7 @@ describe("Items - Metal Powder", () => { }, 20000); it("METAL_POWDER not held by DITTO", async () => { - await game.startBattle([Species.MAROWAK]); + await game.classicMode.startBattle([Species.MAROWAK]); const partyMember = game.scene.getPlayerParty()[0]; diff --git a/test/items/scope_lens.test.ts b/test/items/scope_lens.test.ts index f67966ea3c9..c8061ea3696 100644 --- a/test/items/scope_lens.test.ts +++ b/test/items/scope_lens.test.ts @@ -31,7 +31,7 @@ describe("Items - Scope Lens", () => { }, 20000); it("should raise CRIT stage by 1", async () => { - await game.startBattle([Species.GASTLY]); + await game.classicMode.startBattle([Species.GASTLY]); const enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/test/moves/astonish.test.ts b/test/moves/astonish.test.ts index accddcd545d..daa9b0bb878 100644 --- a/test/moves/astonish.test.ts +++ b/test/moves/astonish.test.ts @@ -39,7 +39,7 @@ describe("Moves - Astonish", () => { }); test("move effect should cancel the target's move on the turn it applies", async () => { - await game.startBattle([Species.MEOWSCARADA]); + await game.classicMode.startBattle([Species.MEOWSCARADA]); const leadPokemon = game.scene.getPlayerPokemon()!; diff --git a/test/moves/beat_up.test.ts b/test/moves/beat_up.test.ts index ad6cad40d32..09166dafb9d 100644 --- a/test/moves/beat_up.test.ts +++ b/test/moves/beat_up.test.ts @@ -35,7 +35,7 @@ describe("Moves - Beat Up", () => { }); it("should hit once for each healthy player Pokemon", async () => { - await game.startBattle([ + await game.classicMode.startBattle([ Species.MAGIKARP, Species.BULBASAUR, Species.CHARMANDER, @@ -63,7 +63,7 @@ describe("Moves - Beat Up", () => { }); it("should not count player Pokemon with status effects towards hit count", async () => { - await game.startBattle([ + await game.classicMode.startBattle([ Species.MAGIKARP, Species.BULBASAUR, Species.CHARMANDER, diff --git a/test/moves/belly_drum.test.ts b/test/moves/belly_drum.test.ts index 8ee1026bf20..9deff207446 100644 --- a/test/moves/belly_drum.test.ts +++ b/test/moves/belly_drum.test.ts @@ -42,7 +42,7 @@ describe("Moves - BELLY DRUM", () => { // Bulbapedia Reference: https://bulbapedia.bulbagarden.net/wiki/Belly_Drum_(move) test("raises the user's ATK stat stage to its max, at the cost of 1/2 of its maximum HP", async () => { - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = toDmgValue(leadPokemon.getMaxHp() / RATIO); @@ -55,7 +55,7 @@ describe("Moves - BELLY DRUM", () => { }); test("will still take effect if an uninvolved stat stage is at max", async () => { - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = toDmgValue(leadPokemon.getMaxHp() / RATIO); @@ -73,7 +73,7 @@ describe("Moves - BELLY DRUM", () => { }); test("fails if the pokemon's ATK stat stage is at its maximum", async () => { - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -87,7 +87,7 @@ describe("Moves - BELLY DRUM", () => { }); test("fails if the user's health is less than 1/2", async () => { - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = toDmgValue(leadPokemon.getMaxHp() / RATIO); diff --git a/test/moves/chilly_reception.test.ts b/test/moves/chilly_reception.test.ts index 56da5dd400c..1c6c5ce127e 100644 --- a/test/moves/chilly_reception.test.ts +++ b/test/moves/chilly_reception.test.ts @@ -77,7 +77,7 @@ describe("Moves - Chilly Reception", () => { await game.classicMode.startBattle([Species.SLOWKING, Species.MEOWTH]); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.TACKLE); + await game.move.selectEnemyMove(Moves.TACKLE); await game.phaseInterceptor.to("BerryPhase", false); expect(game.scene.arena.weather?.weatherType).toBe(undefined); diff --git a/test/moves/clangorous_soul.test.ts b/test/moves/clangorous_soul.test.ts index 56f19a0e088..c7165a0a881 100644 --- a/test/moves/clangorous_soul.test.ts +++ b/test/moves/clangorous_soul.test.ts @@ -38,7 +38,7 @@ describe("Moves - Clangorous Soul", () => { //Bulbapedia Reference: https://bulbapedia.bulbagarden.net/wiki/Clangorous_Soul_(move) it("raises the user's ATK, DEF, SPATK, SPDEF, and SPD stat stages by 1 each at the cost of 1/3 of its maximum HP", async () => { - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = Math.floor(leadPokemon.getMaxHp() / RATIO); @@ -55,7 +55,7 @@ describe("Moves - Clangorous Soul", () => { }); it("will still take effect if one or more of the involved stat stages are not at max", async () => { - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = Math.floor(leadPokemon.getMaxHp() / RATIO); @@ -78,7 +78,7 @@ describe("Moves - Clangorous Soul", () => { }); it("fails if all stat stages involved are at max", async () => { - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -100,7 +100,7 @@ describe("Moves - Clangorous Soul", () => { }); it("fails if the user's health is less than 1/3", async () => { - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = Math.floor(leadPokemon.getMaxHp() / RATIO); diff --git a/test/moves/crafty_shield.test.ts b/test/moves/crafty_shield.test.ts index c61e6d3848a..ec4c87fa060 100644 --- a/test/moves/crafty_shield.test.ts +++ b/test/moves/crafty_shield.test.ts @@ -39,7 +39,7 @@ describe("Moves - Crafty Shield", () => { }); test("should protect the user and allies from status moves", async () => { - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerField(); @@ -57,7 +57,7 @@ describe("Moves - Crafty Shield", () => { test("should not protect the user and allies from attack moves", async () => { game.override.enemyMoveset([Moves.TACKLE]); - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerField(); @@ -76,7 +76,7 @@ describe("Moves - Crafty Shield", () => { game.override.enemySpecies(Species.DUSCLOPS); game.override.enemyMoveset([Moves.CURSE]); - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerField(); @@ -92,7 +92,7 @@ describe("Moves - Crafty Shield", () => { }); test("should not block allies' self-targeted moves", async () => { - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerField(); diff --git a/test/moves/defog.test.ts b/test/moves/defog.test.ts index 58631150b6f..87c3845d55c 100644 --- a/test/moves/defog.test.ts +++ b/test/moves/defog.test.ts @@ -39,7 +39,7 @@ describe("Moves - Defog", () => { const enemyPokemon = game.scene.getEnemyField(); game.move.select(Moves.SAFEGUARD); - await game.forceEnemyMove(Moves.DEFOG); + await game.move.selectEnemyMove(Moves.DEFOG); await game.phaseInterceptor.to("BerryPhase"); expect(playerPokemon[0].isSafeguarded(enemyPokemon[0])).toBe(false); @@ -53,12 +53,12 @@ describe("Moves - Defog", () => { const playerPokemon = game.scene.getPlayerField(); game.move.select(Moves.MIST); - await game.forceEnemyMove(Moves.DEFOG); + await game.move.selectEnemyMove(Moves.DEFOG); await game.toNextTurn(); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.GROWL); + await game.move.selectEnemyMove(Moves.GROWL); await game.phaseInterceptor.to("BerryPhase"); diff --git a/test/moves/disable.test.ts b/test/moves/disable.test.ts index d21716145a4..5b2b687bd5d 100644 --- a/test/moves/disable.test.ts +++ b/test/moves/disable.test.ts @@ -139,12 +139,12 @@ describe("Moves - Disable", () => { const enemyMon = game.scene.getEnemyPokemon()!; game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); game.move.select(Moves.DISABLE); - await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); diff --git a/test/moves/double_team.test.ts b/test/moves/double_team.test.ts index 8eac6be11f4..b97fb1a338e 100644 --- a/test/moves/double_team.test.ts +++ b/test/moves/double_team.test.ts @@ -33,7 +33,7 @@ describe("Moves - Double Team", () => { }); it("raises the user's EVA stat stage by 1", async () => { - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const ally = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; diff --git a/test/moves/dragon_tail.test.ts b/test/moves/dragon_tail.test.ts index 0e7cd04d078..409ce7e28f8 100644 --- a/test/moves/dragon_tail.test.ts +++ b/test/moves/dragon_tail.test.ts @@ -206,7 +206,7 @@ describe("Moves - Dragon Tail", () => { return min; }); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.DRAGON_TAIL); + await game.move.selectEnemyMove(Moves.DRAGON_TAIL); await game.toNextTurn(); expect(bulbasaur.isOnField()).toBe(false); @@ -260,7 +260,7 @@ describe("Moves - Dragon Tail", () => { eevee.status = new Status(StatusEffect.FAINT); expect(eevee.isFainted()).toBe(true); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); // Turn 2: Mock an RNG call that would normally call for switching to Eevee, but it is fainted @@ -268,7 +268,7 @@ describe("Moves - Dragon Tail", () => { return min; }); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.DRAGON_TAIL); + await game.move.selectEnemyMove(Moves.DRAGON_TAIL); await game.toNextTurn(); expect(lapras.isOnField()).toBe(false); @@ -289,7 +289,7 @@ describe("Moves - Dragon Tail", () => { eevee.status = new Status(StatusEffect.FAINT); expect(eevee.isFainted()).toBe(true); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); // Turn 2: Mock an RNG call that would normally call for switching to Eevee, but it is fainted @@ -297,7 +297,7 @@ describe("Moves - Dragon Tail", () => { return min; }); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.DRAGON_TAIL); + await game.move.selectEnemyMove(Moves.DRAGON_TAIL); await game.toNextTurn(); expect(lapras.isOnField()).toBe(true); diff --git a/test/moves/dynamax_cannon.test.ts b/test/moves/dynamax_cannon.test.ts index 6c4f1a321e3..62004e62778 100644 --- a/test/moves/dynamax_cannon.test.ts +++ b/test/moves/dynamax_cannon.test.ts @@ -45,7 +45,7 @@ describe("Moves - Dynamax Cannon", () => { it("should return 100 power against an enemy below level cap", async () => { game.override.enemyLevel(1); - await game.startBattle([Species.ETERNATUS]); + await game.classicMode.startBattle([Species.ETERNATUS]); game.move.select(dynamaxCannon.id); @@ -57,7 +57,7 @@ describe("Moves - Dynamax Cannon", () => { it("should return 100 power against an enemy at level cap", async () => { game.override.enemyLevel(10); - await game.startBattle([Species.ETERNATUS]); + await game.classicMode.startBattle([Species.ETERNATUS]); game.move.select(dynamaxCannon.id); @@ -69,7 +69,7 @@ describe("Moves - Dynamax Cannon", () => { it("should return 120 power against an enemy 1% above level cap", async () => { game.override.enemyLevel(101); - await game.startBattle([Species.ETERNATUS]); + await game.classicMode.startBattle([Species.ETERNATUS]); game.move.select(dynamaxCannon.id); @@ -84,7 +84,7 @@ describe("Moves - Dynamax Cannon", () => { it("should return 140 power against an enemy 2% above level capp", async () => { game.override.enemyLevel(102); - await game.startBattle([Species.ETERNATUS]); + await game.classicMode.startBattle([Species.ETERNATUS]); game.move.select(dynamaxCannon.id); @@ -99,7 +99,7 @@ describe("Moves - Dynamax Cannon", () => { it("should return 160 power against an enemy 3% above level cap", async () => { game.override.enemyLevel(103); - await game.startBattle([Species.ETERNATUS]); + await game.classicMode.startBattle([Species.ETERNATUS]); game.move.select(dynamaxCannon.id); @@ -114,7 +114,7 @@ describe("Moves - Dynamax Cannon", () => { it("should return 180 power against an enemy 4% above level cap", async () => { game.override.enemyLevel(104); - await game.startBattle([Species.ETERNATUS]); + await game.classicMode.startBattle([Species.ETERNATUS]); game.move.select(dynamaxCannon.id); @@ -129,7 +129,7 @@ describe("Moves - Dynamax Cannon", () => { it("should return 200 power against an enemy 5% above level cap", async () => { game.override.enemyLevel(105); - await game.startBattle([Species.ETERNATUS]); + await game.classicMode.startBattle([Species.ETERNATUS]); game.move.select(dynamaxCannon.id); @@ -144,7 +144,7 @@ describe("Moves - Dynamax Cannon", () => { it("should return 200 power against an enemy way above level cap", async () => { game.override.enemyLevel(999); - await game.startBattle([Species.ETERNATUS]); + await game.classicMode.startBattle([Species.ETERNATUS]); game.move.select(dynamaxCannon.id); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); diff --git a/test/moves/encore.test.ts b/test/moves/encore.test.ts index 519e7860c04..f941328fc90 100644 --- a/test/moves/encore.test.ts +++ b/test/moves/encore.test.ts @@ -42,7 +42,7 @@ describe("Moves - Encore", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; game.move.select(Moves.ENCORE); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); expect(enemyPokemon.getTag(BattlerTagType.ENCORE)).toBeDefined(); diff --git a/test/moves/fairy_lock.test.ts b/test/moves/fairy_lock.test.ts index e967221bcae..faffdee2304 100644 --- a/test/moves/fairy_lock.test.ts +++ b/test/moves/fairy_lock.test.ts @@ -40,8 +40,8 @@ describe("Moves - Fairy Lock", () => { game.move.select(Moves.FAIRY_LOCK); game.move.select(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.SPLASH, 1); + await game.move.selectEnemyMove(Moves.SPLASH, 1); + await game.move.selectEnemyMove(Moves.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.PLAYER)).toBeDefined(); expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.ENEMY)).toBeDefined(); @@ -50,8 +50,8 @@ describe("Moves - Fairy Lock", () => { game.move.select(Moves.SPLASH); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.SPLASH, 1); + await game.move.selectEnemyMove(Moves.SPLASH, 1); + await game.move.selectEnemyMove(Moves.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); expect(playerPokemon[0].isTrapped()).toEqual(true); expect(playerPokemon[1].isTrapped()).toEqual(true); @@ -70,8 +70,8 @@ describe("Moves - Fairy Lock", () => { game.move.select(Moves.FAIRY_LOCK); game.move.select(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.SPLASH, 1); + await game.move.selectEnemyMove(Moves.SPLASH, 1); + await game.move.selectEnemyMove(Moves.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.PLAYER)).toBeDefined(); @@ -84,8 +84,8 @@ describe("Moves - Fairy Lock", () => { game.move.select(Moves.SPLASH); game.doSwitchPokemon(2); - await game.forceEnemyMove(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.SPLASH, 1); + await game.move.selectEnemyMove(Moves.SPLASH, 1); + await game.move.selectEnemyMove(Moves.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); await game.toNextTurn(); @@ -98,8 +98,8 @@ describe("Moves - Fairy Lock", () => { game.move.select(Moves.FAIRY_LOCK); game.move.select(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.SPLASH, 1); + await game.move.selectEnemyMove(Moves.SPLASH, 1); + await game.move.selectEnemyMove(Moves.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.PLAYER)).toBeDefined(); @@ -108,9 +108,9 @@ describe("Moves - Fairy Lock", () => { await game.toNextTurn(); game.move.select(Moves.SPLASH); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.WHIRLWIND, 0); + await game.move.selectEnemyMove(Moves.WHIRLWIND, 0); game.doSelectPartyPokemon(2); - await game.forceEnemyMove(Moves.WHIRLWIND, 1); + await game.move.selectEnemyMove(Moves.WHIRLWIND, 1); game.doSelectPartyPokemon(2); await game.phaseInterceptor.to("BerryPhase"); await game.toNextTurn(); @@ -126,8 +126,8 @@ describe("Moves - Fairy Lock", () => { game.move.select(Moves.FAIRY_LOCK); game.move.select(Moves.MEMENTO, 1); game.doSelectPartyPokemon(2); - await game.forceEnemyMove(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.SPLASH, 1); + await game.move.selectEnemyMove(Moves.SPLASH, 1); + await game.move.selectEnemyMove(Moves.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.PLAYER)).toBeDefined(); expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.ENEMY)).toBeDefined(); @@ -135,8 +135,8 @@ describe("Moves - Fairy Lock", () => { await game.toNextTurn(); game.move.select(Moves.SPLASH); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.SPLASH, 1); + await game.move.selectEnemyMove(Moves.SPLASH, 1); + await game.move.selectEnemyMove(Moves.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerField()[0].isTrapped()).toEqual(true); expect(game.scene.getPlayerField()[1].isTrapped()).toEqual(true); diff --git a/test/moves/fillet_away.test.ts b/test/moves/fillet_away.test.ts index 477cdf76fc7..9de237b28a1 100644 --- a/test/moves/fillet_away.test.ts +++ b/test/moves/fillet_away.test.ts @@ -39,7 +39,7 @@ describe("Moves - FILLET AWAY", () => { //Bulbapedia Reference: https://bulbapedia.bulbagarden.net/wiki/fillet_away_(move) test("raises the user's ATK, SPATK, and SPD stat stages by 2 each, at the cost of 1/2 of its maximum HP", async () => { - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = toDmgValue(leadPokemon.getMaxHp() / RATIO); @@ -54,7 +54,7 @@ describe("Moves - FILLET AWAY", () => { }); test("still takes effect if one or more of the involved stat stages are not at max", async () => { - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = toDmgValue(leadPokemon.getMaxHp() / RATIO); @@ -73,7 +73,7 @@ describe("Moves - FILLET AWAY", () => { }); test("fails if all stat stages involved are at max", async () => { - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -91,7 +91,7 @@ describe("Moves - FILLET AWAY", () => { }); test("fails if the user's health is less than 1/2", async () => { - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = toDmgValue(leadPokemon.getMaxHp() / RATIO); diff --git a/test/moves/flame_burst.test.ts b/test/moves/flame_burst.test.ts index fb92537a238..963b0f04a9a 100644 --- a/test/moves/flame_burst.test.ts +++ b/test/moves/flame_burst.test.ts @@ -46,7 +46,7 @@ describe("Moves - Flame Burst", () => { }); it("inflicts damage to the target's ally equal to 1/16 of its max HP", async () => { - await game.startBattle([Species.PIKACHU, Species.PIKACHU]); + await game.classicMode.startBattle([Species.PIKACHU, Species.PIKACHU]); const [leftEnemy, rightEnemy] = game.scene.getEnemyField(); game.move.select(Moves.FLAME_BURST, 0, leftEnemy.getBattlerIndex()); @@ -60,7 +60,7 @@ describe("Moves - Flame Burst", () => { it("does not inflict damage to the target's ally if the target was not affected by Flame Burst", async () => { game.override.enemyAbility(Abilities.FLASH_FIRE); - await game.startBattle([Species.PIKACHU, Species.PIKACHU]); + await game.classicMode.startBattle([Species.PIKACHU, Species.PIKACHU]); const [leftEnemy, rightEnemy] = game.scene.getEnemyField(); game.move.select(Moves.FLAME_BURST, 0, leftEnemy.getBattlerIndex()); @@ -72,7 +72,7 @@ describe("Moves - Flame Burst", () => { }); it("does not interact with the target ally's abilities", async () => { - await game.startBattle([Species.PIKACHU, Species.PIKACHU]); + await game.classicMode.startBattle([Species.PIKACHU, Species.PIKACHU]); const [leftEnemy, rightEnemy] = game.scene.getEnemyField(); vi.spyOn(rightEnemy, "getAbility").mockReturnValue(allAbilities[Abilities.FLASH_FIRE]); @@ -86,7 +86,7 @@ describe("Moves - Flame Burst", () => { }); it("effect damage is prevented by Magic Guard", async () => { - await game.startBattle([Species.PIKACHU, Species.PIKACHU]); + await game.classicMode.startBattle([Species.PIKACHU, Species.PIKACHU]); const [leftEnemy, rightEnemy] = game.scene.getEnemyField(); vi.spyOn(rightEnemy, "getAbility").mockReturnValue(allAbilities[Abilities.MAGIC_GUARD]); diff --git a/test/moves/flower_shield.test.ts b/test/moves/flower_shield.test.ts index 4840c6f018f..d95ef6299b7 100644 --- a/test/moves/flower_shield.test.ts +++ b/test/moves/flower_shield.test.ts @@ -36,7 +36,7 @@ describe("Moves - Flower Shield", () => { it("raises DEF stat stage by 1 for all Grass-type Pokemon on the field by one stage - single battle", async () => { game.override.enemySpecies(Species.CHERRIM); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const cherrim = game.scene.getEnemyPokemon()!; const magikarp = game.scene.getPlayerPokemon()!; @@ -53,7 +53,7 @@ describe("Moves - Flower Shield", () => { it("raises DEF stat stage by 1 for all Grass-type Pokemon on the field by one stage - double battle", async () => { game.override.enemySpecies(Species.MAGIKARP).startingBiome(Biome.GRASS).battleStyle("double"); - await game.startBattle([Species.CHERRIM, Species.MAGIKARP]); + await game.classicMode.startBattle([Species.CHERRIM, Species.MAGIKARP]); const field = game.scene.getField(true); const grassPokemons = field.filter(p => p.getTypes().includes(PokemonType.GRASS)); @@ -78,7 +78,7 @@ describe("Moves - Flower Shield", () => { game.override.enemyMoveset([Moves.DIG, Moves.DIG, Moves.DIG, Moves.DIG]); game.override.enemyLevel(50); - await game.startBattle([Species.CHERRIM]); + await game.classicMode.startBattle([Species.CHERRIM]); const paras = game.scene.getEnemyPokemon()!; const cherrim = game.scene.getPlayerPokemon()!; @@ -97,7 +97,7 @@ describe("Moves - Flower Shield", () => { it("does nothing if there are no Grass-type Pokemon on the field", async () => { game.override.enemySpecies(Species.MAGIKARP); - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const enemy = game.scene.getEnemyPokemon()!; const ally = game.scene.getPlayerPokemon()!; diff --git a/test/moves/fly.test.ts b/test/moves/fly.test.ts index 74f8bc4a770..81d04f53ff8 100644 --- a/test/moves/fly.test.ts +++ b/test/moves/fly.test.ts @@ -104,10 +104,10 @@ describe("Moves - Fly", () => { game.move.select(Moves.FLY); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); - await game.forceEnemyMove(Moves.GRAVITY); + await game.move.selectEnemyMove(Moves.GRAVITY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); diff --git a/test/moves/follow_me.test.ts b/test/moves/follow_me.test.ts index 68c4f111bb1..228a835b17d 100644 --- a/test/moves/follow_me.test.ts +++ b/test/moves/follow_me.test.ts @@ -43,8 +43,8 @@ describe("Moves - Follow Me", () => { game.move.select(Moves.QUICK_ATTACK, 1, BattlerIndex.ENEMY); // Force both enemies to target the player Pokemon that did not use Follow Me - await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); - await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to(TurnEndPhase, false); @@ -61,8 +61,8 @@ describe("Moves - Follow Me", () => { game.move.select(Moves.FOLLOW_ME, 1); // Each player is targeted by an enemy - await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to(TurnEndPhase, false); @@ -84,8 +84,8 @@ describe("Moves - Follow Me", () => { game.move.select(Moves.QUICK_ATTACK, 1, BattlerIndex.ENEMY_2); // Target doesn't need to be specified if the move is self-targeted - await game.forceEnemyMove(Moves.FOLLOW_ME); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.FOLLOW_ME); + await game.move.selectEnemyMove(Moves.SPLASH); await game.phaseInterceptor.to(TurnEndPhase, false); @@ -104,8 +104,8 @@ describe("Moves - Follow Me", () => { game.move.select(Moves.SNIPE_SHOT, 0, BattlerIndex.ENEMY); game.move.select(Moves.SNIPE_SHOT, 1, BattlerIndex.ENEMY_2); - await game.forceEnemyMove(Moves.FOLLOW_ME); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.FOLLOW_ME); + await game.move.selectEnemyMove(Moves.SPLASH); await game.phaseInterceptor.to(TurnEndPhase, false); diff --git a/test/moves/foresight.test.ts b/test/moves/foresight.test.ts index d33a00bf136..82a39eceae5 100644 --- a/test/moves/foresight.test.ts +++ b/test/moves/foresight.test.ts @@ -31,7 +31,7 @@ describe("Moves - Foresight", () => { }); it("should allow Normal and Fighting moves to hit Ghost types", async () => { - await game.startBattle(); + await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; @@ -55,7 +55,7 @@ describe("Moves - Foresight", () => { it("should ignore target's evasiveness boosts", async () => { game.override.enemyMoveset([Moves.MINIMIZE]); - await game.startBattle(); + await game.classicMode.startBattle(); const pokemon = game.scene.getPlayerPokemon()!; vi.spyOn(pokemon, "getAccuracyMultiplier"); diff --git a/test/moves/fusion_bolt.test.ts b/test/moves/fusion_bolt.test.ts index 33498a857a9..5e515a3bc47 100644 --- a/test/moves/fusion_bolt.test.ts +++ b/test/moves/fusion_bolt.test.ts @@ -36,7 +36,7 @@ describe("Moves - Fusion Bolt", () => { }); it("should not make contact", async () => { - await game.startBattle([Species.ZEKROM]); + await game.classicMode.startBattle([Species.ZEKROM]); const partyMember = game.scene.getPlayerPokemon()!; const initialHp = partyMember.hp; diff --git a/test/moves/fusion_flare.test.ts b/test/moves/fusion_flare.test.ts index 61bb126a75a..b947b9e7f7e 100644 --- a/test/moves/fusion_flare.test.ts +++ b/test/moves/fusion_flare.test.ts @@ -36,7 +36,7 @@ describe("Moves - Fusion Flare", () => { }); it("should thaw freeze status condition", async () => { - await game.startBattle([Species.RESHIRAM]); + await game.classicMode.startBattle([Species.RESHIRAM]); const partyMember = game.scene.getPlayerPokemon()!; diff --git a/test/moves/fusion_flare_bolt.test.ts b/test/moves/fusion_flare_bolt.test.ts index da2d48a7cdb..1d248e09510 100644 --- a/test/moves/fusion_flare_bolt.test.ts +++ b/test/moves/fusion_flare_bolt.test.ts @@ -138,7 +138,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { }, 20000); it("FUSION_FLARE should double power of subsequent FUSION_BOLT if moves are aimed at allies", async () => { - await game.startBattle([Species.ZEKROM, Species.RESHIRAM]); + await game.classicMode.startBattle([Species.ZEKROM, Species.RESHIRAM]); game.move.select(fusionBolt.id, 0, BattlerIndex.PLAYER_2); game.move.select(fusionFlare.id, 1, BattlerIndex.PLAYER); diff --git a/test/moves/growth.test.ts b/test/moves/growth.test.ts index 37cd84638ba..2e3ebfcde52 100644 --- a/test/moves/growth.test.ts +++ b/test/moves/growth.test.ts @@ -32,7 +32,7 @@ describe("Moves - Growth", () => { }); it("should raise SPATK stat stage by 1", async () => { - await game.startBattle([Species.MIGHTYENA]); + await game.classicMode.startBattle([Species.MIGHTYENA]); const playerPokemon = game.scene.getPlayerPokemon()!; diff --git a/test/moves/grudge.test.ts b/test/moves/grudge.test.ts index ecde5351d6d..48bb79c5f02 100644 --- a/test/moves/grudge.test.ts +++ b/test/moves/grudge.test.ts @@ -37,7 +37,7 @@ describe("Moves - Grudge", () => { const playerPokemon = game.scene.getPlayerPokemon(); game.move.select(Moves.EMBER); - await game.forceEnemyMove(Moves.GRUDGE); + await game.move.selectEnemyMove(Moves.GRUDGE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); @@ -51,12 +51,12 @@ describe("Moves - Grudge", () => { const playerPokemon = game.scene.getPlayerPokemon(); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.GRUDGE); + await game.move.selectEnemyMove(Moves.GRUDGE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); game.move.select(Moves.EMBER); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase"); @@ -78,7 +78,7 @@ describe("Moves - Grudge", () => { const playerPokemon = game.scene.getPlayerPokemon(); game.move.select(Moves.FALSE_SWIPE); - await game.forceEnemyMove(Moves.GRUDGE); + await game.move.selectEnemyMove(Moves.GRUDGE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); diff --git a/test/moves/guard_split.test.ts b/test/moves/guard_split.test.ts index d182e94b203..0f5c69c7d85 100644 --- a/test/moves/guard_split.test.ts +++ b/test/moves/guard_split.test.ts @@ -34,7 +34,7 @@ describe("Moves - Guard Split", () => { it("should average the user's DEF and SPDEF stats with those of the target", async () => { game.override.enemyMoveset(Moves.SPLASH); - await game.startBattle([Species.INDEEDEE]); + await game.classicMode.startBattle([Species.INDEEDEE]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -54,7 +54,7 @@ describe("Moves - Guard Split", () => { it("should be idempotent", async () => { game.override.enemyMoveset([Moves.GUARD_SPLIT]); - await game.startBattle([Species.INDEEDEE]); + await game.classicMode.startBattle([Species.INDEEDEE]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; diff --git a/test/moves/hard_press.test.ts b/test/moves/hard_press.test.ts index e1a01c0109d..12cf049a022 100644 --- a/test/moves/hard_press.test.ts +++ b/test/moves/hard_press.test.ts @@ -37,7 +37,7 @@ describe("Moves - Hard Press", () => { }); it("should return 100 power if target HP ratio is at 100%", async () => { - await game.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([Species.PIKACHU]); game.move.select(Moves.HARD_PRESS); await game.phaseInterceptor.to(MoveEffectPhase); @@ -46,7 +46,7 @@ describe("Moves - Hard Press", () => { }); it("should return 50 power if target HP ratio is at 50%", async () => { - await game.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([Species.PIKACHU]); const targetHpRatio = 0.5; const enemy = game.scene.getEnemyPokemon()!; @@ -59,7 +59,7 @@ describe("Moves - Hard Press", () => { }); it("should return 1 power if target HP ratio is at 1%", async () => { - await game.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([Species.PIKACHU]); const targetHpRatio = 0.01; const enemy = game.scene.getEnemyPokemon()!; @@ -72,7 +72,7 @@ describe("Moves - Hard Press", () => { }); it("should return 1 power if target HP ratio is less than 1%", async () => { - await game.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([Species.PIKACHU]); const targetHpRatio = 0.005; const enemy = game.scene.getEnemyPokemon()!; diff --git a/test/moves/haze.test.ts b/test/moves/haze.test.ts index 4ddb6d1c7c5..33d4fe2dfda 100644 --- a/test/moves/haze.test.ts +++ b/test/moves/haze.test.ts @@ -36,7 +36,7 @@ describe("Moves - Haze", () => { }); it("should reset all stat changes of all Pokemon on field", async () => { - await game.startBattle([Species.RATTATA]); + await game.classicMode.startBattle([Species.RATTATA]); const user = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; diff --git a/test/moves/hyper_beam.test.ts b/test/moves/hyper_beam.test.ts index e6b3955ef0d..a4cbf7d9245 100644 --- a/test/moves/hyper_beam.test.ts +++ b/test/moves/hyper_beam.test.ts @@ -38,7 +38,7 @@ describe("Moves - Hyper Beam", () => { }); it("should force the user to recharge on the next turn (and only that turn)", async () => { - await game.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/test/moves/imprison.test.ts b/test/moves/imprison.test.ts index cefbaa52cad..dfa3b3ad757 100644 --- a/test/moves/imprison.test.ts +++ b/test/moves/imprison.test.ts @@ -36,7 +36,7 @@ describe("Moves - Imprison", () => { const playerPokemon = game.scene.getPlayerPokemon()!; game.move.select(Moves.TRANSFORM); - await game.forceEnemyMove(Moves.IMPRISON); + await game.move.selectEnemyMove(Moves.IMPRISON); await game.toNextTurn(); const playerMoveset = playerPokemon.getMoveset().map(x => x?.moveId); const enemyMoveset = game.scene @@ -51,7 +51,7 @@ describe("Moves - Imprison", () => { // Second turn, Imprison forces Struggle to occur game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); const move1 = playerPokemon.getLastXMoves(1)[0]!; expect(move1.move).toBe(Moves.STRUGGLE); @@ -63,7 +63,7 @@ describe("Moves - Imprison", () => { const playerPokemon1 = game.scene.getPlayerPokemon()!; game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.IMPRISON); + await game.move.selectEnemyMove(Moves.IMPRISON); await game.toNextTurn(); const imprisonArenaTag = game.scene.arena.getTag(ArenaTagType.IMPRISON); const imprisonBattlerTag1 = playerPokemon1.getTag(BattlerTagType.IMPRISON); @@ -72,7 +72,7 @@ describe("Moves - Imprison", () => { // Second turn, Imprison forces Struggle to occur game.doSwitchPokemon(1); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); const playerPokemon2 = game.scene.getPlayerPokemon()!; const imprisonBattlerTag2 = playerPokemon2.getTag(BattlerTagType.IMPRISON); @@ -87,12 +87,12 @@ describe("Moves - Imprison", () => { const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; game.move.select(Moves.IMPRISON); - await game.forceEnemyMove(Moves.GROWL); + await game.move.selectEnemyMove(Moves.GROWL); await game.toNextTurn(); expect(game.scene.arena.getTag(ArenaTagType.IMPRISON)).toBeDefined(); expect(enemyPokemon.getTag(BattlerTagType.IMPRISON)).toBeDefined(); game.doSwitchPokemon(1); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); expect(playerPokemon.isActive(true)).toBeFalsy(); expect(game.scene.arena.getTag(ArenaTagType.IMPRISON)).toBeUndefined(); diff --git a/test/moves/instruct.test.ts b/test/moves/instruct.test.ts index dd25db4ec90..719349760dc 100644 --- a/test/moves/instruct.test.ts +++ b/test/moves/instruct.test.ts @@ -48,7 +48,7 @@ describe("Moves - Instruct", () => { game.move.changeMoveset(enemy, Moves.SONIC_BOOM); game.move.select(Moves.INSTRUCT); - await game.forceEnemyMove(Moves.SONIC_BOOM); + await game.move.selectEnemyMove(Moves.SONIC_BOOM); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("MovePhase"); // enemy attacks us @@ -75,12 +75,12 @@ describe("Moves - Instruct", () => { game.move.changeMoveset(enemy, [Moves.SONIC_BOOM, Moves.SUBSTITUTE]); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.SUBSTITUTE); + await game.move.selectEnemyMove(Moves.SUBSTITUTE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); game.move.select(Moves.INSTRUCT); - await game.forceEnemyMove(Moves.SONIC_BOOM); + await game.move.selectEnemyMove(Moves.SONIC_BOOM); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase", false); @@ -169,7 +169,7 @@ describe("Moves - Instruct", () => { moveUsed.ppUsed = moveUsed.getMovePp() - 1; game.move.select(Moves.INSTRUCT); - await game.forceEnemyMove(Moves.HIDDEN_POWER); + await game.move.selectEnemyMove(Moves.HIDDEN_POWER); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase", false); @@ -210,8 +210,8 @@ describe("Moves - Instruct", () => { game.move.select(Moves.SPLASH, BattlerIndex.PLAYER); game.move.select(Moves.FIERY_DANCE, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); - await game.forceEnemyMove(Moves.INSTRUCT, BattlerIndex.PLAYER_2); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.INSTRUCT, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(Moves.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("BerryPhase"); @@ -248,7 +248,7 @@ describe("Moves - Instruct", () => { await game.classicMode.startBattle([Species.AMOONGUSS]); game.move.select(Moves.INSTRUCT); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("TurnEndPhase", false); @@ -265,7 +265,7 @@ describe("Moves - Instruct", () => { game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.ENEMY); game.move.select(Moves.DISABLE, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); - await game.forceEnemyMove(Moves.SONIC_BOOM, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.SONIC_BOOM, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("TurnEndPhase", false); @@ -311,7 +311,7 @@ describe("Moves - Instruct", () => { ]; game.move.select(Moves.INSTRUCT); - await game.forceEnemyMove(Moves.HYPER_BEAM); + await game.move.selectEnemyMove(Moves.HYPER_BEAM); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); @@ -326,23 +326,21 @@ describe("Moves - Instruct", () => { }); it("should not repeat move since forgotten by target", async () => { - game.override.enemyLevel(5).xpMultiplier(0).enemySpecies(Species.WURMPLE).enemyMoveset(Moves.INSTRUCT); + game.override.enemyMoveset(Moves.INSTRUCT); await game.classicMode.startBattle([Species.REGIELEKI]); const regieleki = game.scene.getPlayerPokemon()!; - // fill out moveset with random moves - game.move.changeMoveset(regieleki, [Moves.ELECTRO_DRIFT, Moves.SPLASH, Moves.ICE_BEAM, Moves.ANCIENT_POWER]); - - game.move.select(Moves.ELECTRO_DRIFT); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); - await game.phaseInterceptor.to("FaintPhase"); - await game.move.learnMove(Moves.ELECTROWEB); - await game.toNextWave(); + regieleki.pushMoveHistory({ + move: Moves.ELECTRO_DRIFT, + targets: [BattlerIndex.PLAYER], + result: MoveResult.SUCCESS, + virtual: false, + }); game.move.select(Moves.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); - await game.phaseInterceptor.to("TurnEndPhase", false); - expect(game.scene.getEnemyField()[0].getLastXMoves()[0].result).toBe(MoveResult.FAIL); + await game.toEndOfTurn(); + expect(game.field.getEnemyPokemon().getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); it("should disregard priority of instructed move on use", async () => { @@ -360,7 +358,7 @@ describe("Moves - Instruct", () => { ]; game.move.select(Moves.INSTRUCT); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.phaseInterceptor.to("TurnEndPhase", false); // lucario instructed enemy whirlwind at 0 priority to switch itself out @@ -379,8 +377,8 @@ describe("Moves - Instruct", () => { game.move.select(Moves.QUICK_ATTACK, BattlerIndex.PLAYER, BattlerIndex.ENEMY); // succeeds due to terrain no game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); - await game.forceEnemyMove(Moves.SPLASH); - await game.forceEnemyMove(Moves.PSYCHIC_TERRAIN); + await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.PSYCHIC_TERRAIN); await game.toNextTurn(); game.move.select(Moves.SPLASH, BattlerIndex.PLAYER); @@ -404,8 +402,8 @@ describe("Moves - Instruct", () => { game.move.select(Moves.VINE_WHIP, BattlerIndex.PLAYER, BattlerIndex.ENEMY); game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); - await game.forceEnemyMove(Moves.SPLASH); - await game.forceEnemyMove(Moves.PSYCHIC_TERRAIN); + await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.PSYCHIC_TERRAIN); await game.toNextTurn(); game.move.select(Moves.SPLASH, BattlerIndex.PLAYER); @@ -515,14 +513,14 @@ describe("Moves - Instruct", () => { game.move.select(Moves.SPLASH, BattlerIndex.PLAYER); game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); - await game.forceEnemyMove(Moves.BULLET_SEED, BattlerIndex.PLAYER_2); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.BULLET_SEED, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.ENEMY); game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); - await game.forceEnemyMove(Moves.BULLET_SEED, BattlerIndex.PLAYER_2); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.BULLET_SEED, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(Moves.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("BerryPhase"); @@ -531,8 +529,8 @@ describe("Moves - Instruct", () => { await game.toNextTurn(); game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.ENEMY); game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); - await game.forceEnemyMove(Moves.BULLET_SEED, BattlerIndex.PLAYER_2); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.BULLET_SEED, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(Moves.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2]); await game.phaseInterceptor.to("BerryPhase"); diff --git a/test/moves/jaw_lock.test.ts b/test/moves/jaw_lock.test.ts index 71896dc3b62..85750b6efda 100644 --- a/test/moves/jaw_lock.test.ts +++ b/test/moves/jaw_lock.test.ts @@ -40,7 +40,7 @@ describe("Moves - Jaw Lock", () => { }); it("should trap the move's user and target", async () => { - await game.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([Species.BULBASAUR]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -61,7 +61,7 @@ describe("Moves - Jaw Lock", () => { it("should not trap either pokemon if the target faints", async () => { game.override.enemyLevel(1); - await game.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([Species.BULBASAUR]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -86,7 +86,7 @@ describe("Moves - Jaw Lock", () => { }); it("should only trap the user until the target faints", async () => { - await game.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([Species.BULBASAUR]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -109,7 +109,7 @@ describe("Moves - Jaw Lock", () => { it("should not trap other targets after the first target is trapped", async () => { game.override.battleStyle("double"); - await game.startBattle([Species.CHARMANDER, Species.BULBASAUR]); + await game.classicMode.startBattle([Species.CHARMANDER, Species.BULBASAUR]); const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); @@ -138,7 +138,7 @@ describe("Moves - Jaw Lock", () => { it("should not trap either pokemon if the target is protected", async () => { game.override.enemyMoveset([Moves.PROTECT]); - await game.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([Species.BULBASAUR]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/test/moves/last-resort.test.ts b/test/moves/last-resort.test.ts index a7b462f3ca4..65b50bc4e89 100644 --- a/test/moves/last-resort.test.ts +++ b/test/moves/last-resort.test.ts @@ -86,11 +86,11 @@ describe("Moves - Last Resort", () => { // use mirror move normally to trigger absorb virtually game.move.select(Moves.MIRROR_MOVE); - await game.forceEnemyMove(Moves.ABSORB); + await game.move.selectEnemyMove(Moves.ABSORB); await game.toNextTurn(); game.move.select(Moves.LAST_RESORT); - await game.forceEnemyMove(Moves.SWORDS_DANCE); // goes first to proc dancer ahead of time + await game.move.selectEnemyMove(Moves.SWORDS_DANCE); // goes first to proc dancer ahead of time await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); expectLastResortFail(); @@ -154,10 +154,10 @@ describe("Moves - Last Resort", () => { // ensure enemy last resort succeeds game.move.select(Moves.MIRROR_MOVE); - await game.forceEnemyMove(Moves.ABSORB); + await game.move.selectEnemyMove(Moves.ABSORB); await game.phaseInterceptor.to("TurnEndPhase"); game.move.select(Moves.MIRROR_MOVE); - await game.forceEnemyMove(Moves.LAST_RESORT); + await game.move.selectEnemyMove(Moves.LAST_RESORT); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); diff --git a/test/moves/lucky_chant.test.ts b/test/moves/lucky_chant.test.ts index e2a28a7bbe3..9fa6ff43eab 100644 --- a/test/moves/lucky_chant.test.ts +++ b/test/moves/lucky_chant.test.ts @@ -35,7 +35,7 @@ describe("Moves - Lucky Chant", () => { }); it("should prevent critical hits from moves", async () => { - await game.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([Species.CHARIZARD]); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -56,7 +56,7 @@ describe("Moves - Lucky Chant", () => { it("should prevent critical hits against the user's ally", async () => { game.override.battleStyle("double"); - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); const playerPokemon = game.scene.getPlayerField(); @@ -79,7 +79,7 @@ describe("Moves - Lucky Chant", () => { it("should prevent critical hits from field effects", async () => { game.override.enemyMoveset([Moves.TACKLE]); - await game.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([Species.CHARIZARD]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/test/moves/lunar_blessing.test.ts b/test/moves/lunar_blessing.test.ts index ee35107fccd..5021a47ff7f 100644 --- a/test/moves/lunar_blessing.test.ts +++ b/test/moves/lunar_blessing.test.ts @@ -33,7 +33,7 @@ describe("Moves - Lunar Blessing", () => { }); it("should restore 25% HP of the user and its ally", async () => { - await game.startBattle([Species.RATTATA, Species.RATTATA]); + await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA]); const [leftPlayer, rightPlayer] = game.scene.getPlayerField(); vi.spyOn(leftPlayer, "getMaxHp").mockReturnValue(100); @@ -61,7 +61,7 @@ describe("Moves - Lunar Blessing", () => { it("should cure status effect of the user and its ally", async () => { game.override.statusEffect(StatusEffect.BURN); - await game.startBattle([Species.RATTATA, Species.RATTATA]); + await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA]); const [leftPlayer, rightPlayer] = game.scene.getPlayerField(); vi.spyOn(leftPlayer, "resetStatus"); diff --git a/test/moves/magic_coat.test.ts b/test/moves/magic_coat.test.ts index 4e0bd7f0a98..ad0bd47d7cf 100644 --- a/test/moves/magic_coat.test.ts +++ b/test/moves/magic_coat.test.ts @@ -62,12 +62,12 @@ describe("Moves - Magic Coat", () => { // turn 1 game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.MAGIC_COAT); + await game.move.selectEnemyMove(Moves.MAGIC_COAT); await game.toNextTurn(); // turn 2 game.move.select(Moves.GROWL); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-1); }); @@ -102,8 +102,8 @@ describe("Moves - Magic Coat", () => { game.move.select(Moves.GROWL, 0); game.move.select(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.SPLASH); - await game.forceEnemyMove(Moves.MAGIC_COAT); + await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.MAGIC_COAT); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerField().every(p => p.getStatStage(Stat.ATK) === -1)).toBeTruthy(); @@ -129,8 +129,8 @@ describe("Moves - Magic Coat", () => { game.move.select(Moves.MAGIC_COAT, 0); game.move.select(Moves.GROWL, 1); - await game.forceEnemyMove(Moves.MAGIC_COAT); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.MAGIC_COAT); + await game.move.selectEnemyMove(Moves.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyField()[0].getStatStage(Stat.ATK)).toBe(0); @@ -192,12 +192,12 @@ describe("Moves - Magic Coat", () => { // turn 1 game.move.select(Moves.GROWL); - await game.forceEnemyMove(Moves.MAGIC_COAT); + await game.move.selectEnemyMove(Moves.MAGIC_COAT); await game.toNextTurn(); // turn 2 game.move.select(Moves.ENCORE); - await game.forceEnemyMove(Moves.TACKLE); + await game.move.selectEnemyMove(Moves.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase"); expect(enemyPokemon.getTag(BattlerTagType.ENCORE)!["moveId"]).toBe(Moves.TACKLE); @@ -233,7 +233,7 @@ describe("Moves - Magic Coat", () => { vi.spyOn(stomping_tantrum, "calculateBattlePower"); game.move.select(Moves.SPORE); - await game.forceEnemyMove(Moves.CHARM); + await game.move.selectEnemyMove(Moves.CHARM); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.getLastXMoves(1)[0].result).toBe("success"); diff --git a/test/moves/magnet_rise.test.ts b/test/moves/magnet_rise.test.ts index 62ad0c88091..3f15a109f11 100644 --- a/test/moves/magnet_rise.test.ts +++ b/test/moves/magnet_rise.test.ts @@ -33,7 +33,7 @@ describe("Moves - Magnet Rise", () => { }); it("MAGNET RISE", async () => { - await game.startBattle(); + await game.classicMode.startBattle(); const startingHp = game.scene.getPlayerParty()[0].hp; game.move.select(moveToUse); @@ -44,7 +44,7 @@ describe("Moves - Magnet Rise", () => { }, 20000); it("MAGNET RISE - Gravity", async () => { - await game.startBattle(); + await game.classicMode.startBattle(); const startingHp = game.scene.getPlayerParty()[0].hp; game.move.select(moveToUse); diff --git a/test/moves/make_it_rain.test.ts b/test/moves/make_it_rain.test.ts index 4d94537bcec..b897304662d 100644 --- a/test/moves/make_it_rain.test.ts +++ b/test/moves/make_it_rain.test.ts @@ -34,7 +34,7 @@ describe("Moves - Make It Rain", () => { }); it("should only lower SPATK stat stage by 1 once in a double battle", async () => { - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -50,7 +50,7 @@ describe("Moves - Make It Rain", () => { game.override.enemyLevel(1); // ensures the enemy will faint game.override.battleStyle("single"); - await game.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([Species.CHARIZARD]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -66,7 +66,7 @@ describe("Moves - Make It Rain", () => { it("should reduce Sp. Atk. once after KOing two enemies", async () => { game.override.enemyLevel(1); // ensures the enemy will faint - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyField(); @@ -81,7 +81,7 @@ describe("Moves - Make It Rain", () => { }); it("should lower SPATK stat stage by 1 if it only hits the second target", async () => { - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); const playerPokemon = game.scene.getPlayerPokemon()!; diff --git a/test/moves/mat_block.test.ts b/test/moves/mat_block.test.ts index 9ed0f497af9..3e7958d665b 100644 --- a/test/moves/mat_block.test.ts +++ b/test/moves/mat_block.test.ts @@ -39,7 +39,7 @@ describe("Moves - Mat Block", () => { }); test("should protect the user and allies from attack moves", async () => { - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerField(); @@ -57,7 +57,7 @@ describe("Moves - Mat Block", () => { test("should not protect the user and allies from status moves", async () => { game.override.enemyMoveset([Moves.GROWL]); - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerField(); @@ -73,7 +73,7 @@ describe("Moves - Mat Block", () => { }); test("should fail when used after the first turn", async () => { - await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); const leadPokemon = game.scene.getPlayerField(); diff --git a/test/moves/metal_burst.test.ts b/test/moves/metal_burst.test.ts index 7fa5434dc58..cadcbe07a0d 100644 --- a/test/moves/metal_burst.test.ts +++ b/test/moves/metal_burst.test.ts @@ -42,8 +42,8 @@ describe("Moves - Metal Burst", () => { game.move.select(Moves.METAL_BURST); game.move.select(Moves.FISSURE, 1, BattlerIndex.ENEMY); - await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2]); @@ -63,8 +63,8 @@ describe("Moves - Metal Burst", () => { game.move.select(Moves.METAL_BURST); game.move.select(Moves.PRECIPICE_BLADES, 1); - await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2]); diff --git a/test/moves/mirror_move.test.ts b/test/moves/mirror_move.test.ts index 438c594d839..6a73e3a1f05 100644 --- a/test/moves/mirror_move.test.ts +++ b/test/moves/mirror_move.test.ts @@ -40,8 +40,8 @@ describe("Moves - Mirror Move", () => { game.move.select(Moves.MIRROR_MOVE, 0, BattlerIndex.ENEMY); // target's last move is Tackle, enemy should receive damage from Mirror Move copying Tackle game.move.select(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); - await game.forceEnemyMove(Moves.GROWL, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(Moves.GROWL, BattlerIndex.PLAYER_2); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER]); await game.toNextTurn(); diff --git a/test/moves/multi_target.test.ts b/test/moves/multi_target.test.ts index ad47d540a14..af98c9a89f4 100644 --- a/test/moves/multi_target.test.ts +++ b/test/moves/multi_target.test.ts @@ -36,7 +36,7 @@ describe("Multi-target damage reduction", () => { }); it("should reduce d.gleam damage when multiple enemies but not tackle", async () => { - await game.startBattle([Species.MAGIKARP, Species.FEEBAS]); + await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); const [enemy1, enemy2] = game.scene.getEnemyField(); @@ -76,7 +76,7 @@ describe("Multi-target damage reduction", () => { }); it("should reduce earthquake when more than one pokemon other than user is not fainted", async () => { - await game.startBattle([Species.MAGIKARP, Species.FEEBAS]); + await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); const player2 = game.scene.getPlayerParty()[1]; const [enemy1, enemy2] = game.scene.getEnemyField(); diff --git a/test/moves/parting_shot.test.ts b/test/moves/parting_shot.test.ts index a65c1a5b3a5..26f8790d3b9 100644 --- a/test/moves/parting_shot.test.ts +++ b/test/moves/parting_shot.test.ts @@ -35,7 +35,7 @@ describe("Moves - Parting Shot", () => { test("Parting Shot when buffed by prankster should fail against dark types", async () => { game.override.enemySpecies(Species.POOCHYENA).ability(Abilities.PRANKSTER); - await game.startBattle([Species.MURKROW, Species.MEOWTH]); + await game.classicMode.startBattle([Species.MURKROW, Species.MEOWTH]); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon).toBeDefined(); @@ -50,7 +50,7 @@ describe("Moves - Parting Shot", () => { test("Parting shot should fail against good as gold ability", async () => { game.override.enemySpecies(Species.GHOLDENGO).enemyAbility(Abilities.GOOD_AS_GOLD); - await game.startBattle([Species.MURKROW, Species.MEOWTH]); + await game.classicMode.startBattle([Species.MURKROW, Species.MEOWTH]); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon).toBeDefined(); @@ -68,7 +68,13 @@ describe("Moves - Parting Shot", () => { "Parting shot should fail if target is -6/-6 de-buffed", async () => { game.override.moveset([Moves.PARTING_SHOT, Moves.MEMENTO, Moves.SPLASH]); - await game.startBattle([Species.MEOWTH, Species.MEOWTH, Species.MEOWTH, Species.MURKROW, Species.ABRA]); + await game.classicMode.startBattle([ + Species.MEOWTH, + Species.MEOWTH, + Species.MEOWTH, + Species.MURKROW, + Species.ABRA, + ]); // use Memento 3 times to debuff enemy game.move.select(Moves.MEMENTO); @@ -111,7 +117,7 @@ describe("Moves - Parting Shot", () => { "Parting shot shouldn't allow switch out when mist is active", async () => { game.override.enemySpecies(Species.ALTARIA).enemyAbility(Abilities.NONE).enemyMoveset([Moves.MIST]); - await game.startBattle([Species.SNORLAX, Species.MEOWTH]); + await game.classicMode.startBattle([Species.SNORLAX, Species.MEOWTH]); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon).toBeDefined(); @@ -130,7 +136,7 @@ describe("Moves - Parting Shot", () => { "Parting shot shouldn't allow switch out against clear body ability", async () => { game.override.enemySpecies(Species.TENTACOOL).enemyAbility(Abilities.CLEAR_BODY); - await game.startBattle([Species.SNORLAX, Species.MEOWTH]); + await game.classicMode.startBattle([Species.SNORLAX, Species.MEOWTH]); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon).toBeDefined(); @@ -148,7 +154,7 @@ describe("Moves - Parting Shot", () => { // TODO: fix this bug to pass the test! "Parting shot should de-buff and not fail if no party available to switch - party size 1", async () => { - await game.startBattle([Species.MURKROW]); + await game.classicMode.startBattle([Species.MURKROW]); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon).toBeDefined(); @@ -166,7 +172,7 @@ describe("Moves - Parting Shot", () => { // TODO: fix this bug to pass the test! "Parting shot regularly not fail if no party available to switch - party fainted", async () => { - await game.startBattle([Species.MURKROW, Species.MEOWTH]); + await game.classicMode.startBattle([Species.MURKROW, Species.MEOWTH]); game.move.select(Moves.SPLASH); // intentionally kill party pokemon, switch to second slot (now 1 party mon is fainted) diff --git a/test/moves/plasma_fists.test.ts b/test/moves/plasma_fists.test.ts index b6a5ceaed68..0c3412d8e60 100644 --- a/test/moves/plasma_fists.test.ts +++ b/test/moves/plasma_fists.test.ts @@ -42,8 +42,8 @@ describe("Moves - Plasma Fists", () => { game.move.select(Moves.PLASMA_FISTS, 0, BattlerIndex.ENEMY); game.move.select(Moves.TACKLE, 1, BattlerIndex.ENEMY_2); - await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); diff --git a/test/moves/pledge_moves.test.ts b/test/moves/pledge_moves.test.ts index 9dbf2b4cb02..6c66c4bbe2d 100644 --- a/test/moves/pledge_moves.test.ts +++ b/test/moves/pledge_moves.test.ts @@ -256,8 +256,8 @@ describe("Moves - Pledge Moves", () => { game.move.select(Moves.FIRE_PLEDGE, 0, BattlerIndex.ENEMY); game.move.select(Moves.GRASS_PLEDGE, 1, BattlerIndex.ENEMY_2); - await game.forceEnemyMove(Moves.SPORE, BattlerIndex.PLAYER_2); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPORE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(Moves.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY_2]); @@ -290,8 +290,8 @@ describe("Moves - Pledge Moves", () => { game.move.select(Moves.WATER_PLEDGE, 0, BattlerIndex.ENEMY); game.move.select(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.SPLASH); - await game.forceEnemyMove(Moves.FOLLOW_ME); + await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.FOLLOW_ME); await game.phaseInterceptor.to("BerryPhase", false); diff --git a/test/moves/powder.test.ts b/test/moves/powder.test.ts index c6114db3ff1..b65525109ad 100644 --- a/test/moves/powder.test.ts +++ b/test/moves/powder.test.ts @@ -233,8 +233,8 @@ describe("Moves - Powder", () => { game.move.select(Moves.POWDER, 0, BattlerIndex.ENEMY); game.move.select(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.GRASS_PLEDGE, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.FIRE_PLEDGE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.GRASS_PLEDGE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.FIRE_PLEDGE, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY_2, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(BerryPhase, false); @@ -250,8 +250,8 @@ describe("Moves - Powder", () => { game.move.select(Moves.POWDER, 0, BattlerIndex.ENEMY); game.move.select(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.FIRE_PLEDGE, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.WATER_PLEDGE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.FIRE_PLEDGE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.WATER_PLEDGE, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to(BerryPhase, false); @@ -267,8 +267,8 @@ describe("Moves - Powder", () => { game.move.select(Moves.POWDER, 0, BattlerIndex.ENEMY); game.move.select(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.FIRE_PLEDGE, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.WATER_PLEDGE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.FIRE_PLEDGE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.WATER_PLEDGE, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY_2, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(BerryPhase, false); diff --git a/test/moves/power_split.test.ts b/test/moves/power_split.test.ts index f15275fce9e..ca712f0a64e 100644 --- a/test/moves/power_split.test.ts +++ b/test/moves/power_split.test.ts @@ -34,7 +34,7 @@ describe("Moves - Power Split", () => { it("should average the user's ATK and SPATK stats with those of the target", async () => { game.override.enemyMoveset(Moves.SPLASH); - await game.startBattle([Species.INDEEDEE]); + await game.classicMode.startBattle([Species.INDEEDEE]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -54,7 +54,7 @@ describe("Moves - Power Split", () => { it("should be idempotent", async () => { game.override.enemyMoveset([Moves.POWER_SPLIT]); - await game.startBattle([Species.INDEEDEE]); + await game.classicMode.startBattle([Species.INDEEDEE]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; diff --git a/test/moves/purify.test.ts b/test/moves/purify.test.ts index 191539d8cec..0439ba39108 100644 --- a/test/moves/purify.test.ts +++ b/test/moves/purify.test.ts @@ -37,7 +37,7 @@ describe("Moves - Purify", () => { }); test("Purify heals opponent status effect and restores user hp", async () => { - await game.startBattle(); + await game.classicMode.startBattle(); const enemyPokemon: EnemyPokemon = game.scene.getEnemyPokemon()!; const playerPokemon: PlayerPokemon = game.scene.getPlayerPokemon()!; @@ -54,7 +54,7 @@ describe("Moves - Purify", () => { }); test("Purify does not heal if opponent doesnt have any status effect", async () => { - await game.startBattle(); + await game.classicMode.startBattle(); const playerPokemon: PlayerPokemon = game.scene.getPlayerPokemon()!; diff --git a/test/moves/quash.test.ts b/test/moves/quash.test.ts index 5bf8271320b..f242dafe365 100644 --- a/test/moves/quash.test.ts +++ b/test/moves/quash.test.ts @@ -39,8 +39,8 @@ describe("Moves - Quash", () => { game.move.select(Moves.QUASH, 0, BattlerIndex.PLAYER_2); game.move.select(Moves.SUNNY_DAY, 1); - await game.forceEnemyMove(Moves.SPLASH); - await game.forceEnemyMove(Moves.RAIN_DANCE); + await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.RAIN_DANCE); await game.phaseInterceptor.to("TurnEndPhase", false); // will be sunny if player_2 moved last because of quash, rainy otherwise @@ -67,8 +67,8 @@ describe("Moves - Quash", () => { game.move.select(Moves.RAIN_DANCE, 0); game.move.select(Moves.SUNNY_DAY, 1); - await game.forceEnemyMove(Moves.QUASH, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.QUASH, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(Moves.QUASH, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.QUASH, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("TurnEndPhase", false); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SUNNY); @@ -81,15 +81,15 @@ describe("Moves - Quash", () => { game.move.select(Moves.SPLASH, 0); game.move.select(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.TRICK_ROOM); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.TRICK_ROOM); + await game.move.selectEnemyMove(Moves.SPLASH); await game.phaseInterceptor.to("TurnInitPhase"); // both users are quashed - accelgor should move last w/ TR so rain should be up at end of turn game.move.select(Moves.RAIN_DANCE, 0); game.move.select(Moves.SUNNY_DAY, 1); - await game.forceEnemyMove(Moves.QUASH, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.QUASH, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(Moves.QUASH, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.QUASH, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("TurnEndPhase", false); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.RAIN); diff --git a/test/moves/rage_fist.test.ts b/test/moves/rage_fist.test.ts index 0aabb717f1b..9e5810039a8 100644 --- a/test/moves/rage_fist.test.ts +++ b/test/moves/rage_fist.test.ts @@ -75,7 +75,7 @@ describe("Moves - Rage Fist", () => { await game.classicMode.startBattle([Species.REGIROCK]); game.move.select(Moves.SUBSTITUTE); - await game.forceEnemyMove(Moves.DOUBLE_KICK); + await game.move.selectEnemyMove(Moves.DOUBLE_KICK); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); @@ -84,12 +84,12 @@ describe("Moves - Rage Fist", () => { // remove substitute and get confused game.move.select(Moves.TIDY_UP); - await game.forceEnemyMove(Moves.CONFUSE_RAY); + await game.move.selectEnemyMove(Moves.CONFUSE_RAY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); game.move.select(Moves.RAGE_FIST); - await game.forceEnemyMove(Moves.CONFUSE_RAY); + await game.move.selectEnemyMove(Moves.CONFUSE_RAY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceConfusionActivation(true); await game.toNextTurn(); @@ -123,7 +123,7 @@ describe("Moves - Rage Fist", () => { // beat up a magikarp game.move.select(Moves.RAGE_FIST); - await game.forceEnemyMove(Moves.DOUBLE_KICK); + await game.move.selectEnemyMove(Moves.DOUBLE_KICK); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); diff --git a/test/moves/rage_powder.test.ts b/test/moves/rage_powder.test.ts index 284b558f842..206fd590896 100644 --- a/test/moves/rage_powder.test.ts +++ b/test/moves/rage_powder.test.ts @@ -38,8 +38,8 @@ describe("Moves - Rage Powder", () => { game.move.select(Moves.QUICK_ATTACK, 0, BattlerIndex.ENEMY); game.move.select(Moves.QUICK_ATTACK, 1, BattlerIndex.ENEMY_2); - await game.forceEnemyMove(Moves.RAGE_POWDER); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.RAGE_POWDER); + await game.move.selectEnemyMove(Moves.SPLASH); await game.phaseInterceptor.to("BerryPhase", false); @@ -61,8 +61,8 @@ describe("Moves - Rage Powder", () => { game.move.select(Moves.QUICK_ATTACK, 0, BattlerIndex.ENEMY); game.move.select(Moves.QUICK_ATTACK, 1, BattlerIndex.ENEMY_2); - await game.forceEnemyMove(Moves.RAGE_POWDER); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.RAGE_POWDER); + await game.move.selectEnemyMove(Moves.SPLASH); await game.phaseInterceptor.to("BerryPhase", false); diff --git a/test/moves/reflect_type.test.ts b/test/moves/reflect_type.test.ts index efd58bfeadf..63772aa746f 100644 --- a/test/moves/reflect_type.test.ts +++ b/test/moves/reflect_type.test.ts @@ -37,17 +37,17 @@ describe("Moves - Reflect Type", () => { const enemyPokemon = game.scene.getEnemyPokemon(); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.BURN_UP); + await game.move.selectEnemyMove(Moves.BURN_UP); await game.toNextTurn(); game.move.select(Moves.FORESTS_CURSE); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); expect(enemyPokemon?.getTypes().includes(PokemonType.UNKNOWN)).toBe(true); expect(enemyPokemon?.getTypes().includes(PokemonType.GRASS)).toBe(true); game.move.select(Moves.REFLECT_TYPE); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon?.getTypes()[0]).toBe(PokemonType.NORMAL); expect(playerPokemon?.getTypes().includes(PokemonType.GRASS)).toBe(true); diff --git a/test/moves/retaliate.test.ts b/test/moves/retaliate.test.ts index 81ea353a120..40f31635d9b 100644 --- a/test/moves/retaliate.test.ts +++ b/test/moves/retaliate.test.ts @@ -37,7 +37,7 @@ describe("Moves - Retaliate", () => { it("increases power if ally died previous turn", async () => { vi.spyOn(retaliate, "calculateBattlePower"); - await game.startBattle([Species.ABRA, Species.COBALION]); + await game.classicMode.startBattle([Species.ABRA, Species.COBALION]); game.move.select(Moves.RETALIATE); await game.phaseInterceptor.to("TurnEndPhase"); expect(retaliate.calculateBattlePower).toHaveLastReturnedWith(70); diff --git a/test/moves/revival_blessing.test.ts b/test/moves/revival_blessing.test.ts index b36cd43eb83..ded18e3ffb8 100644 --- a/test/moves/revival_blessing.test.ts +++ b/test/moves/revival_blessing.test.ts @@ -98,8 +98,8 @@ describe("Moves - Revival Blessing", () => { game.move.select(Moves.SPLASH); game.move.select(Moves.REVIVAL_BLESSING, 1); - await game.forceEnemyMove(Moves.FISSURE, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.FISSURE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2]); await game.phaseInterceptor.to("MoveEndPhase"); diff --git a/test/moves/rollout.test.ts b/test/moves/rollout.test.ts index dab9ef67596..dafa72dd5fa 100644 --- a/test/moves/rollout.test.ts +++ b/test/moves/rollout.test.ts @@ -42,7 +42,7 @@ describe("Moves - Rollout", () => { const turns = 6; const dmgHistory: number[] = []; - await game.startBattle(); + await game.classicMode.startBattle(); const playerPkm = game.scene.getPlayerParty()[0]; vi.spyOn(playerPkm, "stats", "get").mockReturnValue([500000, 1, 1, 1, 1, 1]); // HP, ATK, DEF, SPATK, SPDEF, SPD diff --git a/test/moves/round.test.ts b/test/moves/round.test.ts index 43e505705ae..ccdf4cbf089 100644 --- a/test/moves/round.test.ts +++ b/test/moves/round.test.ts @@ -45,8 +45,8 @@ describe("Moves - Round", () => { game.move.select(Moves.ROUND, 0, BattlerIndex.ENEMY); game.move.select(Moves.ROUND, 1, BattlerIndex.ENEMY_2); - await game.forceEnemyMove(Moves.ROUND, BattlerIndex.PLAYER); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.ROUND, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(Moves.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY]); diff --git a/test/moves/secret_power.test.ts b/test/moves/secret_power.test.ts index f6870c5ed1d..99945002b8d 100644 --- a/test/moves/secret_power.test.ts +++ b/test/moves/secret_power.test.ts @@ -49,13 +49,13 @@ describe("Moves - Secret Power", () => { // No Terrain + Biome.VOLCANO --> Burn game.move.select(Moves.SECRET_POWER); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyPokemon.status?.effect).toBe(StatusEffect.BURN); // Misty Terrain --> SpAtk -1 game.move.select(Moves.SECRET_POWER); - await game.forceEnemyMove(Moves.MISTY_TERRAIN); + await game.move.selectEnemyMove(Moves.MISTY_TERRAIN); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyPokemon.getStatStage(Stat.SPATK)).toBe(-1); }); diff --git a/test/moves/shell_trap.test.ts b/test/moves/shell_trap.test.ts index 313d02b4d73..2aa4712152d 100644 --- a/test/moves/shell_trap.test.ts +++ b/test/moves/shell_trap.test.ts @@ -38,7 +38,7 @@ describe("Moves - Shell Trap", () => { }); it("should activate after the user is hit by a physical attack", async () => { - await game.startBattle([Species.CHARIZARD, Species.TURTONATOR]); + await game.classicMode.startBattle([Species.CHARIZARD, Species.TURTONATOR]); const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); @@ -61,7 +61,7 @@ describe("Moves - Shell Trap", () => { it("should fail if the user is only hit by special attacks", async () => { game.override.enemyMoveset([Moves.SWIFT]); - await game.startBattle([Species.CHARIZARD, Species.TURTONATOR]); + await game.classicMode.startBattle([Species.CHARIZARD, Species.TURTONATOR]); const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); @@ -84,7 +84,7 @@ describe("Moves - Shell Trap", () => { it("should fail if the user isn't hit with any attack", async () => { game.override.enemyMoveset(Moves.SPLASH); - await game.startBattle([Species.CHARIZARD, Species.TURTONATOR]); + await game.classicMode.startBattle([Species.CHARIZARD, Species.TURTONATOR]); const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); @@ -107,7 +107,7 @@ describe("Moves - Shell Trap", () => { it("should not activate from an ally's attack", async () => { game.override.enemyMoveset(Moves.SPLASH); - await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); @@ -131,7 +131,7 @@ describe("Moves - Shell Trap", () => { game.override.battleStyle("single"); vi.spyOn(allMoves[Moves.RAZOR_LEAF], "priority", "get").mockReturnValue(-4); - await game.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([Species.CHARIZARD]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/test/moves/speed_swap.test.ts b/test/moves/speed_swap.test.ts index 2b010885e34..f2be761b64e 100644 --- a/test/moves/speed_swap.test.ts +++ b/test/moves/speed_swap.test.ts @@ -34,7 +34,7 @@ describe("Moves - Speed Swap", () => { }); it("should swap the user's SPD and the target's SPD stats", async () => { - await game.startBattle([Species.INDEEDEE]); + await game.classicMode.startBattle([Species.INDEEDEE]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; diff --git a/test/moves/spikes.test.ts b/test/moves/spikes.test.ts index 3dfa398d7d6..f37b54a2904 100644 --- a/test/moves/spikes.test.ts +++ b/test/moves/spikes.test.ts @@ -32,7 +32,7 @@ describe("Moves - Spikes", () => { }); it("should not damage the team that set them", async () => { - await game.startBattle([Species.MIGHTYENA, Species.POOCHYENA]); + await game.classicMode.startBattle([Species.MIGHTYENA, Species.POOCHYENA]); game.move.select(Moves.SPIKES); await game.toNextTurn(); @@ -52,7 +52,7 @@ describe("Moves - Spikes", () => { it("should damage opposing pokemon that are forced to switch in", async () => { game.override.startingWave(5); - await game.startBattle([Species.MIGHTYENA, Species.POOCHYENA]); + await game.classicMode.startBattle([Species.MIGHTYENA, Species.POOCHYENA]); game.move.select(Moves.SPIKES); await game.toNextTurn(); @@ -66,7 +66,7 @@ describe("Moves - Spikes", () => { it("should damage opposing pokemon that choose to switch in", async () => { game.override.startingWave(5); - await game.startBattle([Species.MIGHTYENA, Species.POOCHYENA]); + await game.classicMode.startBattle([Species.MIGHTYENA, Species.POOCHYENA]); game.move.select(Moves.SPIKES); await game.toNextTurn(); diff --git a/test/moves/spit_up.test.ts b/test/moves/spit_up.test.ts index 7197d9b75c3..b11d74da64a 100644 --- a/test/moves/spit_up.test.ts +++ b/test/moves/spit_up.test.ts @@ -50,7 +50,7 @@ describe("Moves - Spit Up", () => { const stacksToSetup = 1; const expectedPower = 100; - await game.startBattle([Species.ABOMASNOW]); + await game.classicMode.startBattle([Species.ABOMASNOW]); const pokemon = game.scene.getPlayerPokemon()!; pokemon.addTag(BattlerTagType.STOCKPILING); @@ -72,7 +72,7 @@ describe("Moves - Spit Up", () => { const stacksToSetup = 2; const expectedPower = 200; - await game.startBattle([Species.ABOMASNOW]); + await game.classicMode.startBattle([Species.ABOMASNOW]); const pokemon = game.scene.getPlayerPokemon()!; pokemon.addTag(BattlerTagType.STOCKPILING); @@ -95,7 +95,7 @@ describe("Moves - Spit Up", () => { const stacksToSetup = 3; const expectedPower = 300; - await game.startBattle([Species.ABOMASNOW]); + await game.classicMode.startBattle([Species.ABOMASNOW]); const pokemon = game.scene.getPlayerPokemon()!; pokemon.addTag(BattlerTagType.STOCKPILING); @@ -117,7 +117,7 @@ describe("Moves - Spit Up", () => { }); it("fails without stacks", async () => { - await game.startBattle([Species.ABOMASNOW]); + await game.classicMode.startBattle([Species.ABOMASNOW]); const pokemon = game.scene.getPlayerPokemon()!; @@ -138,7 +138,7 @@ describe("Moves - Spit Up", () => { describe("restores stat boosts granted by stacks", () => { it("decreases stats based on stored values (both boosts equal)", async () => { - await game.startBattle([Species.ABOMASNOW]); + await game.classicMode.startBattle([Species.ABOMASNOW]); const pokemon = game.scene.getPlayerPokemon()!; pokemon.addTag(BattlerTagType.STOCKPILING); @@ -169,7 +169,7 @@ describe("Moves - Spit Up", () => { }); it("decreases stats based on stored values (different boosts)", async () => { - await game.startBattle([Species.ABOMASNOW]); + await game.classicMode.startBattle([Species.ABOMASNOW]); const pokemon = game.scene.getPlayerPokemon()!; pokemon.addTag(BattlerTagType.STOCKPILING); diff --git a/test/moves/spotlight.test.ts b/test/moves/spotlight.test.ts index 2c4f652e408..e617682bdd5 100644 --- a/test/moves/spotlight.test.ts +++ b/test/moves/spotlight.test.ts @@ -39,8 +39,8 @@ describe("Moves - Spotlight", () => { game.move.select(Moves.SPOTLIGHT, 0, BattlerIndex.ENEMY); game.move.select(Moves.QUICK_ATTACK, 1, BattlerIndex.ENEMY_2); - await game.forceEnemyMove(Moves.SPLASH); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.phaseInterceptor.to(TurnEndPhase, false); @@ -56,8 +56,8 @@ describe("Moves - Spotlight", () => { game.move.select(Moves.SPOTLIGHT, 0, BattlerIndex.ENEMY); game.move.select(Moves.QUICK_ATTACK, 1, BattlerIndex.ENEMY_2); - await game.forceEnemyMove(Moves.SPLASH); - await game.forceEnemyMove(Moves.FOLLOW_ME); + await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.FOLLOW_ME); await game.phaseInterceptor.to("BerryPhase", false); diff --git a/test/moves/stockpile.test.ts b/test/moves/stockpile.test.ts index 4b8f51c32b2..196a1d8ca9a 100644 --- a/test/moves/stockpile.test.ts +++ b/test/moves/stockpile.test.ts @@ -39,7 +39,7 @@ describe("Moves - Stockpile", () => { }); it("gains a stockpile stack and raises user's DEF and SPDEF stat stages by 1 on each use, fails at max stacks (3)", async () => { - await game.startBattle([Species.ABOMASNOW]); + await game.classicMode.startBattle([Species.ABOMASNOW]); const user = game.scene.getPlayerPokemon()!; @@ -83,7 +83,7 @@ describe("Moves - Stockpile", () => { }); it("gains a stockpile stack even if user's DEF and SPDEF stat stages are at +6", async () => { - await game.startBattle([Species.ABOMASNOW]); + await game.classicMode.startBattle([Species.ABOMASNOW]); const user = game.scene.getPlayerPokemon()!; diff --git a/test/moves/swallow.test.ts b/test/moves/swallow.test.ts index d548522068b..cff9daaf97a 100644 --- a/test/moves/swallow.test.ts +++ b/test/moves/swallow.test.ts @@ -43,7 +43,7 @@ describe("Moves - Swallow", () => { const stacksToSetup = 1; const expectedHeal = 25; - await game.startBattle([Species.ABOMASNOW]); + await game.classicMode.startBattle([Species.ABOMASNOW]); const pokemon = game.scene.getPlayerPokemon()!; vi.spyOn(pokemon, "getMaxHp").mockReturnValue(100); @@ -70,7 +70,7 @@ describe("Moves - Swallow", () => { const stacksToSetup = 2; const expectedHeal = 50; - await game.startBattle([Species.ABOMASNOW]); + await game.classicMode.startBattle([Species.ABOMASNOW]); const pokemon = game.scene.getPlayerPokemon()!; vi.spyOn(pokemon, "getMaxHp").mockReturnValue(100); @@ -98,7 +98,7 @@ describe("Moves - Swallow", () => { const stacksToSetup = 3; const expectedHeal = 100; - await game.startBattle([Species.ABOMASNOW]); + await game.classicMode.startBattle([Species.ABOMASNOW]); const pokemon = game.scene.getPlayerPokemon()!; vi.spyOn(pokemon, "getMaxHp").mockReturnValue(100); @@ -125,7 +125,7 @@ describe("Moves - Swallow", () => { }); it("fails without stacks", async () => { - await game.startBattle([Species.ABOMASNOW]); + await game.classicMode.startBattle([Species.ABOMASNOW]); const pokemon = game.scene.getPlayerPokemon()!; @@ -144,7 +144,7 @@ describe("Moves - Swallow", () => { describe("restores stat stage boosts granted by stacks", () => { it("decreases stats based on stored values (both boosts equal)", async () => { - await game.startBattle([Species.ABOMASNOW]); + await game.classicMode.startBattle([Species.ABOMASNOW]); const pokemon = game.scene.getPlayerPokemon()!; pokemon.addTag(BattlerTagType.STOCKPILING); @@ -173,7 +173,7 @@ describe("Moves - Swallow", () => { }); it("lower stat stages based on stored values (different boosts)", async () => { - await game.startBattle([Species.ABOMASNOW]); + await game.classicMode.startBattle([Species.ABOMASNOW]); const pokemon = game.scene.getPlayerPokemon()!; pokemon.addTag(BattlerTagType.STOCKPILING); diff --git a/test/moves/tackle.test.ts b/test/moves/tackle.test.ts index 162836cd181..5fd8ba589fc 100644 --- a/test/moves/tackle.test.ts +++ b/test/moves/tackle.test.ts @@ -36,7 +36,7 @@ describe("Moves - Tackle", () => { it("TACKLE against ghost", async () => { const moveToUse = Moves.TACKLE; game.override.enemySpecies(Species.GENGAR); - await game.startBattle([Species.MIGHTYENA]); + await game.classicMode.startBattle([Species.MIGHTYENA]); const hpOpponent = game.scene.currentBattle.enemyParty[0].hp; game.move.select(moveToUse); await game.phaseInterceptor.runFrom(EnemyCommandPhase).to(TurnEndPhase); @@ -46,7 +46,7 @@ describe("Moves - Tackle", () => { it("TACKLE against not resistant", async () => { const moveToUse = Moves.TACKLE; - await game.startBattle([Species.MIGHTYENA]); + await game.classicMode.startBattle([Species.MIGHTYENA]); game.scene.currentBattle.enemyParty[0].stats[Stat.DEF] = 50; game.scene.getPlayerParty()[0].stats[Stat.ATK] = 50; diff --git a/test/moves/tail_whip.test.ts b/test/moves/tail_whip.test.ts index 2d3ade2691d..d15864dd671 100644 --- a/test/moves/tail_whip.test.ts +++ b/test/moves/tail_whip.test.ts @@ -36,7 +36,7 @@ describe("Moves - Tail whip", () => { it("should lower DEF stat stage by 1", async () => { const moveToUse = Moves.TAIL_WHIP; - await game.startBattle([Species.MIGHTYENA, Species.MIGHTYENA]); + await game.classicMode.startBattle([Species.MIGHTYENA, Species.MIGHTYENA]); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(0); diff --git a/test/moves/taunt.test.ts b/test/moves/taunt.test.ts index e0bb13c61fb..bcb4789f888 100644 --- a/test/moves/taunt.test.ts +++ b/test/moves/taunt.test.ts @@ -37,7 +37,7 @@ describe("Moves - Taunt", () => { // First turn, Player Pokemon succeeds using Growl without Taunt game.move.select(Moves.GROWL); - await game.forceEnemyMove(Moves.TAUNT); + await game.move.selectEnemyMove(Moves.TAUNT); await game.toNextTurn(); const move1 = playerPokemon.getLastXMoves(1)[0]!; expect(move1.move).toBe(Moves.GROWL); @@ -46,7 +46,7 @@ describe("Moves - Taunt", () => { // Second turn, Taunt forces Struggle to occur game.move.select(Moves.GROWL); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); const move2 = playerPokemon.getLastXMoves(1)[0]!; expect(move2.move).toBe(Moves.STRUGGLE); diff --git a/test/moves/telekinesis.test.ts b/test/moves/telekinesis.test.ts index e889926b5c8..e5a21e915fa 100644 --- a/test/moves/telekinesis.test.ts +++ b/test/moves/telekinesis.test.ts @@ -106,7 +106,7 @@ describe("Moves - Telekinesis", () => { const enemyOpponent = game.scene.getEnemyPokemon()!; game.move.select(Moves.TELEKINESIS); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyOpponent.getTag(BattlerTagType.TELEKINESIS)).toBeDefined(); expect(enemyOpponent.getTag(BattlerTagType.FLOATING)).toBeDefined(); @@ -114,7 +114,7 @@ describe("Moves - Telekinesis", () => { await game.toNextTurn(); vi.spyOn(allMoves[Moves.MUD_SHOT], "accuracy", "get").mockReturnValue(0); game.move.select(Moves.MUD_SHOT); - await game.forceEnemyMove(Moves.INGRAIN); + await game.move.selectEnemyMove(Moves.INGRAIN); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyOpponent.getTag(BattlerTagType.TELEKINESIS)).toBeDefined(); expect(enemyOpponent.getTag(BattlerTagType.INGRAIN)).toBeDefined(); diff --git a/test/moves/thousand_arrows.test.ts b/test/moves/thousand_arrows.test.ts index 7259fda8560..39bc8617767 100644 --- a/test/moves/thousand_arrows.test.ts +++ b/test/moves/thousand_arrows.test.ts @@ -33,7 +33,7 @@ describe("Moves - Thousand Arrows", () => { }); it("move should hit and ground Flying-type targets", async () => { - await game.startBattle([Species.ILLUMISE]); + await game.classicMode.startBattle([Species.ILLUMISE]); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -53,7 +53,7 @@ describe("Moves - Thousand Arrows", () => { game.override.enemySpecies(Species.SNORLAX); game.override.enemyAbility(Abilities.LEVITATE); - await game.startBattle([Species.ILLUMISE]); + await game.classicMode.startBattle([Species.ILLUMISE]); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -72,7 +72,7 @@ describe("Moves - Thousand Arrows", () => { it("move should hit and ground targets under the effects of Magnet Rise", async () => { game.override.enemySpecies(Species.SNORLAX); - await game.startBattle([Species.ILLUMISE]); + await game.classicMode.startBattle([Species.ILLUMISE]); const enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/test/moves/thunder_wave.test.ts b/test/moves/thunder_wave.test.ts index abfb5828d3b..326d7ecbdc0 100644 --- a/test/moves/thunder_wave.test.ts +++ b/test/moves/thunder_wave.test.ts @@ -34,7 +34,7 @@ describe("Moves - Thunder Wave", () => { it("paralyzes non-statused Pokemon that are not Ground types", async () => { game.override.enemySpecies(Species.MAGIKARP); - await game.startBattle(); + await game.classicMode.startBattle(); const enemyPokemon: EnemyPokemon = game.scene.getEnemyPokemon()!; @@ -47,7 +47,7 @@ describe("Moves - Thunder Wave", () => { it("does not paralyze if the Pokemon is a Ground-type", async () => { game.override.enemySpecies(Species.DIGLETT); - await game.startBattle(); + await game.classicMode.startBattle(); const enemyPokemon: EnemyPokemon = game.scene.getEnemyPokemon()!; @@ -60,7 +60,7 @@ describe("Moves - Thunder Wave", () => { it("does not paralyze if the Pokemon already has a status effect", async () => { game.override.enemySpecies(Species.MAGIKARP).enemyStatusEffect(StatusEffect.BURN); - await game.startBattle(); + await game.classicMode.startBattle(); const enemyPokemon: EnemyPokemon = game.scene.getEnemyPokemon()!; @@ -73,7 +73,7 @@ describe("Moves - Thunder Wave", () => { it("affects Ground types if the user has Normalize", async () => { game.override.ability(Abilities.NORMALIZE).enemySpecies(Species.DIGLETT); - await game.startBattle(); + await game.classicMode.startBattle(); const enemyPokemon: EnemyPokemon = game.scene.getEnemyPokemon()!; @@ -86,7 +86,7 @@ describe("Moves - Thunder Wave", () => { it("does not affect Ghost types if the user has Normalize", async () => { game.override.ability(Abilities.NORMALIZE).enemySpecies(Species.HAUNTER); - await game.startBattle(); + await game.classicMode.startBattle(); const enemyPokemon: EnemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/test/moves/torment.test.ts b/test/moves/torment.test.ts index d06837d2806..d11de46bf10 100644 --- a/test/moves/torment.test.ts +++ b/test/moves/torment.test.ts @@ -40,7 +40,7 @@ describe("Moves - Torment", () => { // First turn, Player Pokemon uses Tackle successfully game.move.select(Moves.TACKLE); - await game.forceEnemyMove(Moves.TORMENT); + await game.move.selectEnemyMove(Moves.TORMENT); await game.toNextTurn(); const move1 = playerPokemon.getLastXMoves(1)[0]!; expect(move1.move).toBe(Moves.TACKLE); @@ -49,14 +49,14 @@ describe("Moves - Torment", () => { // Second turn, Torment forces Struggle to occur game.move.select(Moves.TACKLE); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); const move2 = playerPokemon.getLastXMoves(1)[0]!; expect(move2.move).toBe(Moves.STRUGGLE); // Third turn, Tackle can be used. game.move.select(Moves.TACKLE); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); const move3 = playerPokemon.getLastXMoves(1)[0]!; expect(move3.move).toBe(Moves.TACKLE); diff --git a/test/moves/whirlwind.test.ts b/test/moves/whirlwind.test.ts index 67ffb77612c..3558f968c66 100644 --- a/test/moves/whirlwind.test.ts +++ b/test/moves/whirlwind.test.ts @@ -51,7 +51,7 @@ describe("Moves - Whirlwind", () => { const staraptor = game.scene.getPlayerPokemon()!; game.move.select(move); - await game.forceEnemyMove(Moves.WHIRLWIND); + await game.move.selectEnemyMove(Moves.WHIRLWIND); await game.phaseInterceptor.to("BerryPhase", false); @@ -69,7 +69,7 @@ describe("Moves - Whirlwind", () => { return min; }); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.WHIRLWIND); + await game.move.selectEnemyMove(Moves.WHIRLWIND); await game.toNextTurn(); expect(bulbasaur.isOnField()).toBe(false); @@ -81,7 +81,7 @@ describe("Moves - Whirlwind", () => { return min + 1; }); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.WHIRLWIND); + await game.move.selectEnemyMove(Moves.WHIRLWIND); await game.toNextTurn(); expect(bulbasaur.isOnField()).toBe(false); @@ -101,7 +101,7 @@ describe("Moves - Whirlwind", () => { return min; }); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.WHIRLWIND); + await game.move.selectEnemyMove(Moves.WHIRLWIND); await game.toNextTurn(); expect(lapras.isOnField()).toBe(false); @@ -120,7 +120,7 @@ describe("Moves - Whirlwind", () => { eevee.status = new Status(StatusEffect.FAINT); expect(eevee.isFainted()).toBe(true); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); // Turn 2: Mock an RNG call that would normally call for switching to Eevee, but it is fainted @@ -128,7 +128,7 @@ describe("Moves - Whirlwind", () => { return min; }); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.WHIRLWIND); + await game.move.selectEnemyMove(Moves.WHIRLWIND); await game.toNextTurn(); expect(lapras.isOnField()).toBe(false); @@ -147,7 +147,7 @@ describe("Moves - Whirlwind", () => { eevee.status = new Status(StatusEffect.FAINT); expect(eevee.isFainted()).toBe(true); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); // Turn 2: Mock an RNG call that would normally call for switching to Eevee, but it is fainted @@ -155,7 +155,7 @@ describe("Moves - Whirlwind", () => { return min; }); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.WHIRLWIND); + await game.move.selectEnemyMove(Moves.WHIRLWIND); await game.toNextTurn(); expect(lapras.isOnField()).toBe(true); @@ -184,7 +184,7 @@ describe("Moves - Whirlwind", () => { // Player uses Whirlwind; opponent uses Splash game.move.select(Moves.WHIRLWIND); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); // Verify that the failure message is displayed for Whirlwind @@ -214,8 +214,8 @@ describe("Moves - Whirlwind", () => { game.move.select(Moves.SPLASH); game.move.select(Moves.SPLASH); - await game.forceEnemyMove(Moves.MEMENTO); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.MEMENTO); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); // Get the enemy pokemon id so we can check if is the same after switch. @@ -225,8 +225,8 @@ describe("Moves - Whirlwind", () => { game.move.select(Moves.WHIRLWIND, 0, BattlerIndex.ENEMY); game.move.select(Moves.SPLASH, 1); - await game.forceEnemyMove(Moves.SPLASH); - await game.forceEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.SPLASH); await game.toNextTurn(); diff --git a/test/moves/wide_guard.test.ts b/test/moves/wide_guard.test.ts index 85ebad806d7..08357476e5e 100644 --- a/test/moves/wide_guard.test.ts +++ b/test/moves/wide_guard.test.ts @@ -38,7 +38,7 @@ describe("Moves - Wide Guard", () => { }); test("should protect the user and allies from multi-target attack moves", async () => { - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerField(); @@ -56,7 +56,7 @@ describe("Moves - Wide Guard", () => { test("should protect the user and allies from multi-target status moves", async () => { game.override.enemyMoveset([Moves.GROWL]); - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerField(); @@ -74,7 +74,7 @@ describe("Moves - Wide Guard", () => { test("should not protect the user and allies from single-target moves", async () => { game.override.enemyMoveset([Moves.TACKLE]); - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerField(); @@ -92,7 +92,7 @@ describe("Moves - Wide Guard", () => { test("should protect the user from its ally's multi-target move", async () => { game.override.enemyMoveset([Moves.SPLASH]); - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); diff --git a/test/phases/learn-move-phase.test.ts b/test/phases/learn-move-phase.test.ts index 019b833d386..b8b718a9669 100644 --- a/test/phases/learn-move-phase.test.ts +++ b/test/phases/learn-move-phase.test.ts @@ -56,9 +56,7 @@ describe("Learn Move Phase", () => { game.scene.ui.processInput(Button.ACTION); }); game.onNextPrompt("LearnMovePhase", UiMode.SUMMARY, () => { - for (let x = 0; x < moveSlotNum; x++) { - game.scene.ui.processInput(Button.DOWN); - } + game.scene.ui.setCursor(moveSlotNum); game.scene.ui.processInput(Button.ACTION); }); await game.phaseInterceptor.to(LearnMovePhase); @@ -88,9 +86,7 @@ describe("Learn Move Phase", () => { game.scene.ui.processInput(Button.ACTION); }); game.onNextPrompt("LearnMovePhase", UiMode.SUMMARY, () => { - for (let x = 0; x < 4; x++) { - game.scene.ui.processInput(Button.DOWN); // moves down 4 times to the 5th move slot - } + game.scene.ui.setCursor(4); game.scene.ui.processInput(Button.ACTION); }); game.onNextPrompt("LearnMovePhase", UiMode.CONFIRM, () => { @@ -102,64 +98,4 @@ describe("Learn Move Phase", () => { expect(bulbasaur.level).toBeGreaterThanOrEqual(levelReq); expect(bulbasaur.getMoveset().map(m => m?.moveId)).toEqual(prevMoveset); }); - - it("macro should add moves in free slots normally", async () => { - await game.classicMode.startBattle([Species.BULBASAUR]); - const bulbasaur = game.scene.getPlayerPokemon()!; - - game.move.changeMoveset(bulbasaur, [Moves.SPLASH, Moves.ABSORB, Moves.ACID]); - game.move.select(Moves.SPLASH); - await game.move.learnMove(Moves.SACRED_FIRE, 0, 1); - expect(bulbasaur.getMoveset().map(m => m?.moveId)).toEqual([ - Moves.SPLASH, - Moves.ABSORB, - Moves.ACID, - Moves.SACRED_FIRE, - ]); - }); - - it("macro should replace moves", async () => { - await game.classicMode.startBattle([Species.BULBASAUR]); - const bulbasaur = game.scene.getPlayerPokemon()!; - - game.move.changeMoveset(bulbasaur, [Moves.SPLASH, Moves.ABSORB, Moves.ACID, Moves.VINE_WHIP]); - game.move.select(Moves.SPLASH); - await game.move.learnMove(Moves.SACRED_FIRE, 0, 1); - expect(bulbasaur.getMoveset().map(m => m?.moveId)).toEqual([ - Moves.SPLASH, - Moves.SACRED_FIRE, - Moves.ACID, - Moves.VINE_WHIP, - ]); - }); - - it("macro should allow for cancelling move learning", async () => { - await game.classicMode.startBattle([Species.BULBASAUR]); - const bulbasaur = game.scene.getPlayerPokemon()!; - - game.move.changeMoveset(bulbasaur, [Moves.SPLASH, Moves.ABSORB, Moves.ACID, Moves.VINE_WHIP]); - game.move.select(Moves.SPLASH); - await game.move.learnMove(Moves.SACRED_FIRE, 0, 4); - expect(bulbasaur.getMoveset().map(m => m?.moveId)).toEqual([ - Moves.SPLASH, - Moves.ABSORB, - Moves.ACID, - Moves.VINE_WHIP, - ]); - }); - - it("macro works on off-field party members", async () => { - await game.classicMode.startBattle([Species.BULBASAUR, Species.SQUIRTLE]); - const squirtle = game.scene.getPlayerParty()[1]!; - - game.move.changeMoveset(squirtle, [Moves.SPLASH, Moves.WATER_GUN, Moves.FREEZE_DRY, Moves.GROWL]); - game.move.select(Moves.TACKLE); - await game.move.learnMove(Moves.SHELL_SMASH, 1, 0); - expect(squirtle.getMoveset().map(m => m?.moveId)).toEqual([ - Moves.SHELL_SMASH, - Moves.WATER_GUN, - Moves.FREEZE_DRY, - Moves.GROWL, - ]); - }); }); diff --git a/test/testUtils/gameManager.ts b/test/testUtils/gameManager.ts index 07cea3b1328..39b6000e308 100644 --- a/test/testUtils/gameManager.ts +++ b/test/testUtils/gameManager.ts @@ -1,7 +1,6 @@ import { updateUserInfo } from "#app/account"; import { BattlerIndex } from "#app/battle"; import BattleScene from "#app/battle-scene"; -import { getMoveTargets } from "#app/data/moves/move"; import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; import Trainer from "#app/field/trainer"; import { GameModes, getGameMode } from "#app/game-mode"; @@ -11,7 +10,6 @@ import overrides from "#app/overrides"; import { CheckSwitchPhase } from "#app/phases/check-switch-phase"; import { CommandPhase } from "#app/phases/command-phase"; import { EncounterPhase } from "#app/phases/encounter-phase"; -import { EnemyCommandPhase } from "#app/phases/enemy-command-phase"; import { FaintPhase } from "#app/phases/faint-phase"; import { LoginPhase } from "#app/phases/login-phase"; import { MovePhase } from "#app/phases/move-phase"; @@ -31,11 +29,9 @@ import type PartyUiHandler from "#app/ui/party-ui-handler"; import type StarterSelectUiHandler from "#app/ui/starter-select-ui-handler"; import type TargetSelectUiHandler from "#app/ui/target-select-ui-handler"; import { isNullOrUndefined } from "#app/utils/common"; -import { BattleStyle } from "#enums/battle-style"; import { Button } from "#enums/buttons"; import { ExpGainsSpeed } from "#enums/exp-gains-speed"; import { ExpNotification } from "#enums/exp-notification"; -import type { Moves } from "#enums/moves"; import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { PlayerGender } from "#enums/player-gender"; import type { Species } from "#enums/species"; @@ -274,42 +270,6 @@ export default class GameManager { } } - /** - * @deprecated Use `game.classicMode.startBattle()` or `game.dailyMode.startBattle()` instead - * - * Transitions to the start of a battle. - * @param species - Optional array of species to start the battle with. - * @returns A promise that resolves when the battle is started. - */ - async startBattle(species?: Species[]) { - await this.classicMode.runToSummon(species); - - if (this.scene.battleStyle === BattleStyle.SWITCH) { - this.onNextPrompt( - "CheckSwitchPhase", - UiMode.CONFIRM, - () => { - this.setMode(UiMode.MESSAGE); - this.endPhase(); - }, - () => this.isCurrentPhase(CommandPhase) || this.isCurrentPhase(TurnInitPhase), - ); - - this.onNextPrompt( - "CheckSwitchPhase", - UiMode.CONFIRM, - () => { - this.setMode(UiMode.MESSAGE); - this.endPhase(); - }, - () => this.isCurrentPhase(CommandPhase) || this.isCurrentPhase(TurnInitPhase), - ); - } - - await this.phaseInterceptor.to(CommandPhase); - console.log("==================[New Turn]=================="); - } - /** * Emulate a player's target selection after a move is chosen, usually called automatically by {@linkcode MoveHelper.select}. * Will trigger during the next {@linkcode SelectTargetPhase} @@ -380,36 +340,6 @@ export default class GameManager { ); } - /** - * Forces the next enemy selecting a move to use the given move in its moveset against the - * given target (if applicable). - * @param moveId - The {@linkcode Moves | move} the enemy will use - * @param target - The {@linkcode BattlerIndex} of the target against which the enemy will use the given move; - * will use normal target selection priorities if omitted. - * @deprecated Use {@linkcode MoveHelper.forceEnemyMove} or {@linkcode MoveHelper.selectEnemyMove} - */ - async forceEnemyMove(moveId: Moves, target?: BattlerIndex) { - // Wait for the next EnemyCommandPhase to start - await this.phaseInterceptor.to(EnemyCommandPhase, false); - const enemy = this.scene.getEnemyField()[(this.scene.getCurrentPhase() as EnemyCommandPhase).getFieldIndex()]; - const legalTargets = getMoveTargets(enemy, moveId); - - vi.spyOn(enemy, "getNextMove").mockReturnValueOnce({ - move: moveId, - targets: - target !== undefined && !legalTargets.multiple && legalTargets.targets.includes(target) - ? [target] - : enemy.getNextTargets(moveId), - }); - - /** - * Run the EnemyCommandPhase to completion. - * This allows this function to be called consecutively to - * force a move for each enemy in a double battle. - */ - await this.phaseInterceptor.to(EnemyCommandPhase); - } - forceEnemyToSwitch() { const originalMatchupScore = Trainer.prototype.getPartyMemberMatchupScores; Trainer.prototype.getPartyMemberMatchupScores = () => { diff --git a/test/testUtils/helpers/moveHelper.ts b/test/testUtils/helpers/moveHelper.ts index ab10486867d..b3cdffeb636 100644 --- a/test/testUtils/helpers/moveHelper.ts +++ b/test/testUtils/helpers/moveHelper.ts @@ -1,12 +1,10 @@ import type { BattlerIndex } from "#app/battle"; import { getMoveTargets } from "#app/data/moves/move"; -import { Button } from "#app/enums/buttons"; import type Pokemon from "#app/field/pokemon"; import { PokemonMove } from "#app/field/pokemon"; import Overrides from "#app/overrides"; import type { CommandPhase } from "#app/phases/command-phase"; import type { EnemyCommandPhase } from "#app/phases/enemy-command-phase"; -import { LearnMovePhase } from "#app/phases/learn-move-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Command } from "#app/ui/command-ui-handler"; import { Moves } from "#enums/moves"; @@ -233,39 +231,4 @@ export class MoveHelper extends GameManagerHelper { */ await this.game.phaseInterceptor.to("EnemyCommandPhase"); } - - /** - * Simulates learning a move for a player pokemon. - * @param move The {@linkcode Moves} being learnt - * @param partyIndex The party position of the {@linkcode PlayerPokemon} learning the move (defaults to 0) - * @param moveSlotIndex The INDEX (0-4) of the move slot to replace if existent move slots are full; - * defaults to 0 (first slot) and 4 aborts the procedure - * @returns a promise that resolves once the move has been successfully learnt - */ - public async learnMove(move: Moves | number, partyIndex = 0, moveSlotIndex = 0) { - return new Promise(async (resolve, reject) => { - this.game.scene.pushPhase(new LearnMovePhase(partyIndex, move)); - - // if slots are full, queue up inputs to replace existing moves - if (this.game.scene.getPlayerParty()[partyIndex].moveset.filter(m => m).length === 4) { - this.game.onNextPrompt("LearnMovePhase", UiMode.CONFIRM, () => { - this.game.scene.ui.processInput(Button.ACTION); // "Should a move be forgotten and replaced with XXX?" - }); - this.game.onNextPrompt("LearnMovePhase", UiMode.SUMMARY, () => { - for (let x = 0; x < (moveSlotIndex ?? 0); x++) { - this.game.scene.ui.processInput(Button.DOWN); // Scrolling in summary pane to move position - } - this.game.scene.ui.processInput(Button.ACTION); - if (moveSlotIndex === 4) { - this.game.onNextPrompt("LearnMovePhase", UiMode.CONFIRM, () => { - this.game.scene.ui.processInput(Button.ACTION); // "Give up on learning XXX?" - }); - } - }); - } - - await this.game.phaseInterceptor.to(LearnMovePhase).catch(e => reject(e)); - resolve(); - }); - } } diff --git a/test/ui/type-hints.test.ts b/test/ui/type-hints.test.ts index 2051af76754..b32f5ed9b88 100644 --- a/test/ui/type-hints.test.ts +++ b/test/ui/type-hints.test.ts @@ -99,8 +99,8 @@ describe("UI - Type Hints", () => { // Use soak to change type of remaining abra to water game.move.select(Moves.SOAK, 1); - await game.forceEnemyMove(Moves.SPLASH); - await game.forceEnemyMove(Moves.TELEPORT); + await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(Moves.TELEPORT); await game.toNextTurn(); game.onNextPrompt("CommandPhase", UiMode.COMMAND, () => { From ccd9480240ea26285683fb997fcb1af67e3d4a9b Mon Sep 17 00:00:00 2001 From: Lugiad <2070109+Adri1@users.noreply.github.com> Date: Sat, 31 May 2025 01:54:17 +0200 Subject: [PATCH 184/262] [Localization] Secondary pending languages inclusion (#5903) * Add files via upload * Add files via upload * Add files via upload * Add files via upload * Add files via upload * Add files via upload * Add files via upload * Update mysterious-chest-dialogue.json * Update mysterious-chest-dialogue.json * Add files via upload * Add files via upload * Add files via upload * Add files via upload * Add files via upload * Add files via upload * Update i18n.ts * Update settings.ts * Update settings-display-ui-handler.ts * Update starter-select-ui-handler.ts * Update i18n.ts * Update i18n.ts * Update settings.ts * Update settings-display-ui-handler.ts * Update i18n.ts * Update starter-select-ui-handler.ts * Update utils.ts * Update utils.ts * Add files via upload * Rename statuses_dk.json to statuses_da.json * Update statuses_da.json * Update and rename types_dk.json to types_da.json * Rename statuses_dk.png to statuses_da.png * Rename types_dk.png to types_da.png * Delete src/locales/dk directory * Add files via upload * Apply suggestions from code review * Delete src/locales/da directory * Delete src/locales/tr directory * Update i18n.ts * Update i18n.ts * Update utils.ts * Main -> Beta (1.1.6) (#4751) * Comment out startGame call on manifest fetch failure * [Hotfix] Fix status damage triggering before berry usage (#4732) * [Hotfix] Fix Eternatus egg tier (#4734) * [Hotfix] Fix manifest getting loaded before the game is initialized (#4739) * fix locales path for offline builds (#4739) * [Sprite] Hotfix cut off Binacle sprite (#4741) * [Sprite][hotfix] Fixed cropping on 658 static greninja and ash greninja (#4743) * [Sprite][hotfix] Fixed cropping on static greninja and ash greninja * [Hotfix] Fix crash when Mist would block a stat drop (#4746) --------- Co-authored-by: Frederico Santos Co-authored-by: innerthunder <168692175+innerthunder@users.noreply.github.com> Co-authored-by: PigeonBar <56974298+PigeonBar@users.noreply.github.com> Co-authored-by: chaosgrimmon <31082757+chaosgrimmon@users.noreply.github.com> Co-authored-by: pom-eranian * Update settings-display-ui-handler.ts * Delete src/utils.ts * Update common.ts * Delete src/utils.ts * Update common.ts * Romanian workspace (#25) * Russian workspace (#26) * Update settings-display-ui-handler.ts * Update settings-display-ui-handler.ts * Update settings.ts * Update settings-display-ui-handler.ts * Update i18n.ts * Update settings.ts * Update settings-display-ui-handler.ts * Update common.ts * Update and rename statuses_ca-ES.json to statuses_ca.json * Update and rename types_ca-ES.json to types_ca.json * Add files via upload * Delete public/images/statuses_ca-ES.png * Delete public/images/types_ca-ES.png * Update locales submodule --------- Co-authored-by: Moka <54149968+MokaStitcher@users.noreply.github.com> Co-authored-by: Frederico Santos Co-authored-by: innerthunder <168692175+innerthunder@users.noreply.github.com> Co-authored-by: PigeonBar <56974298+PigeonBar@users.noreply.github.com> Co-authored-by: chaosgrimmon <31082757+chaosgrimmon@users.noreply.github.com> Co-authored-by: pom-eranian Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- .../{statuses_ca-ES.json => statuses_ca.json} | 2 +- .../{statuses_ca-ES.png => statuses_ca.png} | Bin public/images/statuses_da.json | 188 ++++++++ public/images/statuses_da.png | Bin 0 -> 2355 bytes public/images/statuses_ro.json | 188 ++++++++ public/images/statuses_ro.png | Bin 0 -> 2111 bytes public/images/statuses_ru.json | 188 ++++++++ public/images/statuses_ru.png | Bin 0 -> 2091 bytes public/images/statuses_tr.json | 188 ++++++++ public/images/statuses_tr.png | Bin 0 -> 441 bytes .../{types_ca-ES.json => types_ca.json} | 2 +- .../images/{types_ca-ES.png => types_ca.png} | Bin public/images/types_da.json | 440 ++++++++++++++++++ public/images/types_da.png | Bin 0 -> 6247 bytes public/images/types_ro.json | 440 ++++++++++++++++++ public/images/types_ro.png | Bin 0 -> 6536 bytes public/images/types_ru.json | 440 ++++++++++++++++++ public/images/types_ru.png | Bin 0 -> 7570 bytes public/images/types_tr.json | 440 ++++++++++++++++++ public/images/types_tr.png | Bin 0 -> 4467 bytes public/locales | 2 +- src/plugins/i18n.ts | 6 +- src/system/settings/settings.ts | 44 +- .../settings/settings-display-ui-handler.ts | 64 ++- src/ui/starter-select-ui-handler.ts | 18 + src/utils/common.ts | 6 +- 26 files changed, 2615 insertions(+), 41 deletions(-) rename public/images/{statuses_ca-ES.json => statuses_ca.json} (98%) rename public/images/{statuses_ca-ES.png => statuses_ca.png} (100%) create mode 100644 public/images/statuses_da.json create mode 100644 public/images/statuses_da.png create mode 100644 public/images/statuses_ro.json create mode 100644 public/images/statuses_ro.png create mode 100644 public/images/statuses_ru.json create mode 100644 public/images/statuses_ru.png create mode 100644 public/images/statuses_tr.json create mode 100644 public/images/statuses_tr.png rename public/images/{types_ca-ES.json => types_ca.json} (99%) rename public/images/{types_ca-ES.png => types_ca.png} (100%) create mode 100644 public/images/types_da.json create mode 100644 public/images/types_da.png create mode 100644 public/images/types_ro.json create mode 100644 public/images/types_ro.png create mode 100644 public/images/types_ru.json create mode 100644 public/images/types_ru.png create mode 100644 public/images/types_tr.json create mode 100644 public/images/types_tr.png diff --git a/public/images/statuses_ca-ES.json b/public/images/statuses_ca.json similarity index 98% rename from public/images/statuses_ca-ES.json rename to public/images/statuses_ca.json index be1b78e0e41..6ff0f74a73b 100644 --- a/public/images/statuses_ca-ES.json +++ b/public/images/statuses_ca.json @@ -1,7 +1,7 @@ { "textures": [ { - "image": "statuses_ca_ES.png", + "image": "statuses_ca.png", "format": "RGBA8888", "size": { "w": 22, diff --git a/public/images/statuses_ca-ES.png b/public/images/statuses_ca.png similarity index 100% rename from public/images/statuses_ca-ES.png rename to public/images/statuses_ca.png diff --git a/public/images/statuses_da.json b/public/images/statuses_da.json new file mode 100644 index 00000000000..b9bf56324de --- /dev/null +++ b/public/images/statuses_da.json @@ -0,0 +1,188 @@ +{ + "textures": [ + { + "image": "statuses_da.png", + "format": "RGBA8888", + "size": { + "w": 22, + "h": 64 + }, + "scale": 1, + "frames": [ + { + "filename": "pokerus", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 22, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + } + }, + { + "filename": "burn", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 8, + "w": 20, + "h": 8 + } + }, + { + "filename": "faint", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 16, + "w": 20, + "h": 8 + } + }, + { + "filename": "freeze", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 24, + "w": 20, + "h": 8 + } + }, + { + "filename": "paralysis", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 32, + "w": 20, + "h": 8 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 40, + "w": 20, + "h": 8 + } + }, + { + "filename": "sleep", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 48, + "w": 20, + "h": 8 + } + }, + { + "filename": "toxic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 56, + "w": 20, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$" + } +} diff --git a/public/images/statuses_da.png b/public/images/statuses_da.png new file mode 100644 index 0000000000000000000000000000000000000000..02780bddd98699e74c276fb44903db9426131710 GIT binary patch literal 2355 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 BAo>6R literal 0 HcmV?d00001 diff --git a/public/images/statuses_ru.json b/public/images/statuses_ru.json new file mode 100644 index 00000000000..5e4790b2874 --- /dev/null +++ b/public/images/statuses_ru.json @@ -0,0 +1,188 @@ +{ + "textures": [ + { + "image": "statuses_ru.png", + "format": "RGBA8888", + "size": { + "w": 22, + "h": 64 + }, + "scale": 1, + "frames": [ + { + "filename": "pokerus", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 22, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + } + }, + { + "filename": "burn", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 8, + "w": 20, + "h": 8 + } + }, + { + "filename": "faint", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 16, + "w": 20, + "h": 8 + } + }, + { + "filename": "freeze", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 24, + "w": 20, + "h": 8 + } + }, + { + "filename": "paralysis", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 32, + "w": 20, + "h": 8 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 40, + "w": 20, + "h": 8 + } + }, + { + "filename": "sleep", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 48, + "w": 20, + "h": 8 + } + }, + { + "filename": "toxic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 56, + "w": 20, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$" + } +} diff --git a/public/images/statuses_ru.png b/public/images/statuses_ru.png new file mode 100644 index 0000000000000000000000000000000000000000..1da8b66a4f8be4867fe00ade4eed9bbd67e0e449 GIT binary patch literal 2091 zcmbVN2~ZPP7~ZHwjp7L6fmU5Z#RHPv4G_peB1c4UNI;GOkE+XNlkAW^OcoNninfX( z$XF1m7ebL*McYE7RjgPnU=g)C7AjD+BI1p8s@PiFZa6a9(Q)dVdHb&KegFM-V~l2w zvv9l+008I62vsaUj^TUo5GVdS3D3O14@23A`DOqZHp<=w!1kTv0ANr%8K1-@siRPw zp(L1=NhTy#isjJ&5H!omVt5L{fysoPq!psBs%jBPY89eHKQ*jo!w3TzvD`$&E!V{3 z%TsW}%xg3I}kW?z>5n^*X&0$tCZT9GAP!VR_M6w*o(4d_WOJ-6zg^1U* z*93}n(9-5UH}MXGtQZR+64-814^WFcaBQl{*dttvLxho_2%0nVSj2&44GhPa4a{q( z9mg*T;9aX$J7m047m9L-Fmtohcr*GO@=CNhKAk0?Si;Ptns8!v8n32@-5M4RGZ7fa znBp16*dM5vewD$nFmQSzNoyI4dBzKHLWOaJLL`NyzG7G|M*QPpDT*Lo{1=9MacV|O z>e63@llr56@JmoWTeKL5y%DU%Q5|EVFy2;@!t?~h(s~i-@E{t-7#R~Um{-lGM+>zY zjik*SM&m@JN+IISm5`(s^_O7;=I;lK310*kYcXFRu^dMN#ByCgKyorJ*JX)OkVCw*P4dogB4$5}8F5u)c^^@cQpc)cNe_4S$n{nxslvllA0AI_J* zed>63_=V%;B53}(GV$-yG(liC01S8#sS1ftT6eZ^3ioO7$n_ssH*EFVa{BoGxvF03qP;Oii?^mEN;9sIKOL0$yZ-;MU!feg=MnBnz83y zqGxWm)l^>oJWs8Q0!I|%(UcG@Z%3-p<;4Obl;T z6|DElY9AN3`I@c6Z|h`lc%`+JscdBv3rE~x-N(%hJhi9wuRCWuKXbmdf6|kN%K6Bo z<^!WIJ?OrM5A{oT%G0M6L!N8W8k6)#L)VsZ6O;ve3u8+Yy%tVbJO@1tg{RJHvDyZ} zi;6zXUFTD56W z33t11H3wz1E6+C{$$9K)8g=f^`IDb<`>!q>uKX!DeC9k2wbHiB>q?We@Tkp`wIb(kbvSJLmK4Z=-oxl+~les_s^V{&~YJjfp_P! zWlj5XJ4(#9)AS>iGDjC=W6RwZZE0#~TCcAtb!&4M01_x7%KzeP1y+B2_I7G_xHE-s8-)5{aFy1?zvW;$NS#fE(5J*QH>;TO# zqj-;m3y@V^jDKUiXB4T~am+que5?h|bD2QvJlYc8%_G~aG}z~@!Q2dSmt873PQXLU zg+O|T!QM`p^A|K=@Suc&?b@)04> jC;!H^NCF;OJ`4N>xriuwM360I00000NkvXXu0mjf67avU literal 0 HcmV?d00001 diff --git a/public/images/types_ca-ES.json b/public/images/types_ca.json similarity index 99% rename from public/images/types_ca-ES.json rename to public/images/types_ca.json index fa3abaaf259..aaa04fbad36 100644 --- a/public/images/types_ca-ES.json +++ b/public/images/types_ca.json @@ -1,7 +1,7 @@ { "textures": [ { - "image": "types_ca-ES.png", + "image": "types_ca.png", "format": "RGBA8888", "size": { "w": 32, diff --git a/public/images/types_ca-ES.png b/public/images/types_ca.png similarity index 100% rename from public/images/types_ca-ES.png rename to public/images/types_ca.png diff --git a/public/images/types_da.json b/public/images/types_da.json new file mode 100644 index 00000000000..d1c01de1e0e --- /dev/null +++ b/public/images/types_da.json @@ -0,0 +1,440 @@ +{ + "textures": [ + { + "image": "types_da.png", + "format": "RGBA8888", + "size": { + "w": 32, + "h": 280 + }, + "scale": 1, + "frames": [ + { + "filename": "unknown", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + } + }, + { + "filename": "bug", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 14, + "w": 32, + "h": 14 + } + }, + { + "filename": "dark", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 28, + "w": 32, + "h": 14 + } + }, + { + "filename": "dragon", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 42, + "w": 32, + "h": 14 + } + }, + { + "filename": "electric", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 56, + "w": 32, + "h": 14 + } + }, + { + "filename": "fairy", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 70, + "w": 32, + "h": 14 + } + }, + { + "filename": "fighting", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 84, + "w": 32, + "h": 14 + } + }, + { + "filename": "fire", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 98, + "w": 32, + "h": 14 + } + }, + { + "filename": "flying", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 112, + "w": 32, + "h": 14 + } + }, + { + "filename": "ghost", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 126, + "w": 32, + "h": 14 + } + }, + { + "filename": "grass", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 140, + "w": 32, + "h": 14 + } + }, + { + "filename": "ground", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 154, + "w": 32, + "h": 14 + } + }, + { + "filename": "ice", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 168, + "w": 32, + "h": 14 + } + }, + { + "filename": "normal", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 182, + "w": 32, + "h": 14 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 196, + "w": 32, + "h": 14 + } + }, + { + "filename": "psychic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 210, + "w": 32, + "h": 14 + } + }, + { + "filename": "rock", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 224, + "w": 32, + "h": 14 + } + }, + { + "filename": "steel", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 238, + "w": 32, + "h": 14 + } + }, + { + "filename": "water", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 252, + "w": 32, + "h": 14 + } + }, + { + "filename": "stellar", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 266, + "w": 32, + "h": 14 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:f14cf47d9a8f1d40c8e03aa6ba00fff3:6fc4227b57a95d429a1faad4280f7ec8:5961efbfbf4c56b8745347e7a663a32f$" + } +} diff --git a/public/images/types_da.png b/public/images/types_da.png new file mode 100644 index 0000000000000000000000000000000000000000..f2b7af8967aef2e29fa68d2dd0cecfaf99562458 GIT binary patch literal 6247 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 literal 0 HcmV?d00001 diff --git a/public/images/types_ro.json b/public/images/types_ro.json new file mode 100644 index 00000000000..efdbeba38a0 --- /dev/null +++ b/public/images/types_ro.json @@ -0,0 +1,440 @@ +{ + "textures": [ + { + "image": "types_ro.png", + "format": "RGBA8888", + "size": { + "w": 32, + "h": 280 + }, + "scale": 1, + "frames": [ + { + "filename": "unknown", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + } + }, + { + "filename": "bug", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 14, + "w": 32, + "h": 14 + } + }, + { + "filename": "dark", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 28, + "w": 32, + "h": 14 + } + }, + { + "filename": "dragon", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 42, + "w": 32, + "h": 14 + } + }, + { + "filename": "electric", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 56, + "w": 32, + "h": 14 + } + }, + { + "filename": "fairy", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 70, + "w": 32, + "h": 14 + } + }, + { + "filename": "fighting", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 84, + "w": 32, + "h": 14 + } + }, + { + "filename": "fire", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 98, + "w": 32, + "h": 14 + } + }, + { + "filename": "flying", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 112, + "w": 32, + "h": 14 + } + }, + { + "filename": "ghost", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 126, + "w": 32, + "h": 14 + } + }, + { + "filename": "grass", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 140, + "w": 32, + "h": 14 + } + }, + { + "filename": "ground", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 154, + "w": 32, + "h": 14 + } + }, + { + "filename": "ice", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 168, + "w": 32, + "h": 14 + } + }, + { + "filename": "normal", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 182, + "w": 32, + "h": 14 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 196, + "w": 32, + "h": 14 + } + }, + { + "filename": "psychic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 210, + "w": 32, + "h": 14 + } + }, + { + "filename": "rock", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 224, + "w": 32, + "h": 14 + } + }, + { + "filename": "steel", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 238, + "w": 32, + "h": 14 + } + }, + { + "filename": "water", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 252, + "w": 32, + "h": 14 + } + }, + { + "filename": "stellar", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 266, + "w": 32, + "h": 14 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:f14cf47d9a8f1d40c8e03aa6ba00fff3:6fc4227b57a95d429a1faad4280f7ec8:5961efbfbf4c56b8745347e7a663a32f$" + } +} diff --git a/public/images/types_ro.png b/public/images/types_ro.png new file mode 100644 index 0000000000000000000000000000000000000000..35b09a37035c42476115e2bbf166650358cc5a92 GIT binary patch literal 6536 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 LBtrK7-_HFH=U70Y literal 0 HcmV?d00001 diff --git a/public/images/types_ru.json b/public/images/types_ru.json new file mode 100644 index 00000000000..536a0e31929 --- /dev/null +++ b/public/images/types_ru.json @@ -0,0 +1,440 @@ +{ + "textures": [ + { + "image": "types_ru.png", + "format": "RGBA8888", + "size": { + "w": 32, + "h": 280 + }, + "scale": 1, + "frames": [ + { + "filename": "unknown", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + } + }, + { + "filename": "bug", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 14, + "w": 32, + "h": 14 + } + }, + { + "filename": "dark", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 28, + "w": 32, + "h": 14 + } + }, + { + "filename": "dragon", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 42, + "w": 32, + "h": 14 + } + }, + { + "filename": "electric", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 56, + "w": 32, + "h": 14 + } + }, + { + "filename": "fairy", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 70, + "w": 32, + "h": 14 + } + }, + { + "filename": "fighting", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 84, + "w": 32, + "h": 14 + } + }, + { + "filename": "fire", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 98, + "w": 32, + "h": 14 + } + }, + { + "filename": "flying", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 112, + "w": 32, + "h": 14 + } + }, + { + "filename": "ghost", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 126, + "w": 32, + "h": 14 + } + }, + { + "filename": "grass", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 140, + "w": 32, + "h": 14 + } + }, + { + "filename": "ground", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 154, + "w": 32, + "h": 14 + } + }, + { + "filename": "ice", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 168, + "w": 32, + "h": 14 + } + }, + { + "filename": "normal", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 182, + "w": 32, + "h": 14 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 196, + "w": 32, + "h": 14 + } + }, + { + "filename": "psychic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 210, + "w": 32, + "h": 14 + } + }, + { + "filename": "rock", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 224, + "w": 32, + "h": 14 + } + }, + { + "filename": "steel", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 238, + "w": 32, + "h": 14 + } + }, + { + "filename": "water", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 252, + "w": 32, + "h": 14 + } + }, + { + "filename": "stellar", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 266, + "w": 32, + "h": 14 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:f14cf47d9a8f1d40c8e03aa6ba00fff3:6fc4227b57a95d429a1faad4280f7ec8:5961efbfbf4c56b8745347e7a663a32f$" + } +} diff --git a/public/images/types_ru.png b/public/images/types_ru.png new file mode 100644 index 0000000000000000000000000000000000000000..571e162e8dc9f3da298566982b2634402f9ff570 GIT binary patch literal 7570 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

      4oN6_d$h(=No=`(HwA?WO-Ub)vY~UtQ(D G`@aB6|Ab5c literal 0 HcmV?d00001 diff --git a/public/images/types_tr.json b/public/images/types_tr.json new file mode 100644 index 00000000000..ee82cce3fb4 --- /dev/null +++ b/public/images/types_tr.json @@ -0,0 +1,440 @@ +{ + "textures": [ + { + "image": "types_tr.png", + "format": "RGBA8888", + "size": { + "w": 32, + "h": 280 + }, + "scale": 1, + "frames": [ + { + "filename": "unknown", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + } + }, + { + "filename": "bug", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 14, + "w": 32, + "h": 14 + } + }, + { + "filename": "dark", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 28, + "w": 32, + "h": 14 + } + }, + { + "filename": "dragon", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 42, + "w": 32, + "h": 14 + } + }, + { + "filename": "electric", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 56, + "w": 32, + "h": 14 + } + }, + { + "filename": "fairy", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 70, + "w": 32, + "h": 14 + } + }, + { + "filename": "fighting", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 84, + "w": 32, + "h": 14 + } + }, + { + "filename": "fire", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 98, + "w": 32, + "h": 14 + } + }, + { + "filename": "flying", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 112, + "w": 32, + "h": 14 + } + }, + { + "filename": "ghost", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 126, + "w": 32, + "h": 14 + } + }, + { + "filename": "grass", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 140, + "w": 32, + "h": 14 + } + }, + { + "filename": "ground", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 154, + "w": 32, + "h": 14 + } + }, + { + "filename": "ice", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 168, + "w": 32, + "h": 14 + } + }, + { + "filename": "normal", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 182, + "w": 32, + "h": 14 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 196, + "w": 32, + "h": 14 + } + }, + { + "filename": "psychic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 210, + "w": 32, + "h": 14 + } + }, + { + "filename": "rock", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 224, + "w": 32, + "h": 14 + } + }, + { + "filename": "steel", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 238, + "w": 32, + "h": 14 + } + }, + { + "filename": "water", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 252, + "w": 32, + "h": 14 + } + }, + { + "filename": "stellar", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 266, + "w": 32, + "h": 14 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:f14cf47d9a8f1d40c8e03aa6ba00fff3:6fc4227b57a95d429a1faad4280f7ec8:5961efbfbf4c56b8745347e7a663a32f$" + } +} diff --git a/public/images/types_tr.png b/public/images/types_tr.png new file mode 100644 index 0000000000000000000000000000000000000000..8b644f1041c4236c9e729b30c529149e209a286c GIT binary patch literal 4467 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 = [ unicodeRange: rangesByLanguage.chinese, }), extraOptions: { sizeAdjust: "70%", format: "woff2" }, - only: ["en", "es", "fr", "it", "de", "zh", "pt", "ko", "ca"], + only: ["en", "es", "fr", "it", "de", "zh", "pt", "ko", "ca", "da", "tr", "ro", "ru"], }, { face: new FontFace("pkmnems", "url(./fonts/unifont-15.1.05.subset.woff2)", { unicodeRange: rangesByLanguage.chinese, }), extraOptions: { format: "woff2" }, - only: ["en", "es", "fr", "it", "de", "zh", "pt", "ko", "ca"], + only: ["en", "es", "fr", "it", "de", "zh", "pt", "ko", "ca", "da", "tr", "ro", "ru"], }, // japanese { @@ -174,7 +174,7 @@ export async function initI18n(): Promise { "es-MX": ["es-ES", "en"], default: ["en"], }, - supportedLngs: ["en", "es-ES", "es-MX", "fr", "it", "de", "zh-CN", "zh-TW", "pt-BR", "ko", "ja", "ca-ES"], + supportedLngs: ["en", "es-ES", "es-MX", "fr", "it", "de", "zh-CN", "zh-TW", "pt-BR", "ko", "ja", "ca", "da", "tr", "ro", "ru"], backend: { loadPath(lng: string, [ns]: string[]) { let fileName: string; diff --git a/src/system/settings/settings.ts b/src/system/settings/settings.ts index 8bbba267bd6..8a0e4f8cdc0 100644 --- a/src/system/settings/settings.ts +++ b/src/system/settings/settings.ts @@ -921,10 +921,6 @@ export function setSetting(setting: string, value: number): boolean { label: "Español (LATAM)", handler: () => changeLocaleHandler("es-MX"), }, - { - label: "Italiano", - handler: () => changeLocaleHandler("it"), - }, { label: "Français", handler: () => changeLocaleHandler("fr"), @@ -933,18 +929,14 @@ export function setSetting(setting: string, value: number): boolean { label: "Deutsch", handler: () => changeLocaleHandler("de"), }, + { + label: "Italiano", + handler: () => changeLocaleHandler("it"), + }, { label: "Português (BR)", handler: () => changeLocaleHandler("pt-BR"), }, - { - label: "简体中文", - handler: () => changeLocaleHandler("zh-CN"), - }, - { - label: "繁體中文", - handler: () => changeLocaleHandler("zh-TW"), - }, { label: "한국어", handler: () => changeLocaleHandler("ko"), @@ -954,8 +946,32 @@ export function setSetting(setting: string, value: number): boolean { handler: () => changeLocaleHandler("ja"), }, { - label: "Català", - handler: () => changeLocaleHandler("ca-ES"), + label: "简体中文", + handler: () => changeLocaleHandler("zh-CN"), + }, + { + label: "繁體中文", + handler: () => changeLocaleHandler("zh-TW"), + }, + { + label: "Català (Needs Help)", + handler: () => changeLocaleHandler("ca"), + }, + { + label: "Türkçe (Needs Help)", + handler: () => changeLocaleHandler("tr") + }, + { + label: "Русский (Needs Help)", + handler: () => changeLocaleHandler("ru"), + }, + { + label: "Dansk (Needs Help)", + handler: () => changeLocaleHandler("da") + }, + { + label: "Română (Needs Help)", + handler: () => changeLocaleHandler("ro") }, { label: i18next.t("settings:back"), diff --git a/src/ui/settings/settings-display-ui-handler.ts b/src/ui/settings/settings-display-ui-handler.ts index 4878bae72cb..0636bd25567 100644 --- a/src/ui/settings/settings-display-ui-handler.ts +++ b/src/ui/settings/settings-display-ui-handler.ts @@ -39,12 +39,6 @@ export default class SettingsDisplayUiHandler extends AbstractSettingsUiHandler label: "Español (LATAM)", }; break; - case "it": - this.settings[languageIndex].options[0] = { - value: "Italiano", - label: "Italiano", - }; - break; case "fr": this.settings[languageIndex].options[0] = { value: "Français", @@ -57,24 +51,18 @@ export default class SettingsDisplayUiHandler extends AbstractSettingsUiHandler label: "Deutsch", }; break; + case "it": + this.settings[languageIndex].options[0] = { + value: "Italiano", + label: "Italiano", + }; + break; case "pt-BR": this.settings[languageIndex].options[0] = { value: "Português (BR)", label: "Português (BR)", }; break; - case "zh-CN": - this.settings[languageIndex].options[0] = { - value: "简体中文", - label: "简体中文", - }; - break; - case "zh-TW": - this.settings[languageIndex].options[0] = { - value: "繁體中文", - label: "繁體中文", - }; - break; case "ko": case "ko-KR": this.settings[languageIndex].options[0] = { @@ -88,10 +76,46 @@ export default class SettingsDisplayUiHandler extends AbstractSettingsUiHandler label: "日本語", }; break; - case "ca-ES": + case "zh-CN": + this.settings[languageIndex].options[0] = { + value: "简体中文", + label: "简体中文", + }; + break; + case "zh-TW": + this.settings[languageIndex].options[0] = { + value: "繁體中文", + label: "繁體中文", + }; + break; + case "ca": this.settings[languageIndex].options[0] = { value: "Català", - label: "Català", + label: "Català (Needs Help)", + }; + break; + case "tr": + this.settings[languageIndex].options[0] = { + value: "Türkçe", + label: "Türkçe (Needs Help)", + }; + break; + case "ru": + this.settings[languageIndex].options[0] = { + value: "Русский", + label: "Русский (Needs Help)", + }; + break; + case "da": + this.settings[languageIndex].options[0] = { + value: "Dansk", + label: "Dansk (Needs Help)", + }; + break; + case "ro": + this.settings[languageIndex].options[0] = { + value: "Română", + label: "Română (Needs Help)", }; break; default: diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index ff2298f268d..945ddaa6ed4 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -162,6 +162,24 @@ const languageSettings: { [key: string]: LanguageSetting } = { starterInfoYOffset: 0.5, starterInfoXPos: 29, }, + da:{ + starterInfoTextSize: "56px", + instructionTextSize: "38px", + }, + tr:{ + starterInfoTextSize: "56px", + instructionTextSize: "38px", + }, + ro:{ + starterInfoTextSize: "56px", + instructionTextSize: "38px", + }, + ru: { + starterInfoTextSize: "46px", + instructionTextSize: "38px", + starterInfoYOffset: 0.5, + starterInfoXPos: 26, + }, }; const valueReductionMax = 2; diff --git a/src/utils/common.ts b/src/utils/common.ts index a018b49da3c..1c7ea60da16 100644 --- a/src/utils/common.ts +++ b/src/utils/common.ts @@ -435,14 +435,18 @@ export function hasAllLocalizedSprites(lang?: string): boolean { case "es-ES": case "es-MX": case "fr": + case "da": case "de": case "it": case "zh-CN": case "zh-TW": case "pt-BR": + case "ro": + case "tr": case "ko": case "ja": - case "ca-ES": + case "ca": + case "ru": return true; default: return false; From 831381e4ce7adf712cb6cf5b0854893e5775fc1d Mon Sep 17 00:00:00 2001 From: SmhMyHead <191356399+SmhMyHead@users.noreply.github.com> Date: Sat, 31 May 2025 17:54:02 +0200 Subject: [PATCH 185/262] [UI/UIX] Default cursor to new move when learning a move (#5908) --- src/ui/summary-ui-handler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index 24e790f7c61..a6f640b436f 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -1239,7 +1239,7 @@ export default class SummaryUiHandler extends UiHandler { this.moveSelect = true; this.extraMoveRowContainer.setVisible(true); this.selectedMoveIndex = -1; - this.setCursor(0); + this.setCursor(this.summaryUiMode === SummaryUiMode.LEARN_MOVE ? 4 : 0); this.showMoveEffect(); } From 7859fea26b77cc9e93ffbc879da3439928c4367c Mon Sep 17 00:00:00 2001 From: Lugiad <2070109+Adri1@users.noreply.github.com> Date: Sun, 1 Jun 2025 21:37:47 +0200 Subject: [PATCH 186/262] [i18n] Translatable Game Speed values (#5916) --- public/locales | 2 +- src/system/settings/settings.ts | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/public/locales b/public/locales index 88c60b6f8d5..4dab23d6a78 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit 88c60b6f8d5babfb0c157b31ceff22486712295c +Subproject commit 4dab23d6a78b6cf32db43c9953e3c2000f448007 diff --git a/src/system/settings/settings.ts b/src/system/settings/settings.ts index 8a0e4f8cdc0..69abc669870 100644 --- a/src/system/settings/settings.ts +++ b/src/system/settings/settings.ts @@ -193,35 +193,35 @@ export const Setting: Array = [ options: [ { value: "1", - label: "1x", + label: i18next.t("settings:gameSpeed1x"), }, { value: "1.25", - label: "1.25x", + label: i18next.t("settings:gameSpeed1_25x"), }, { value: "1.5", - label: "1.5x", + label: i18next.t("settings:gameSpeed1_5x"), }, { value: "2", - label: "2x", + label: i18next.t("settings:gameSpeed2x"), }, { value: "2.5", - label: "2.5x", + label: i18next.t("settings:gameSpeed2_5x"), }, { value: "3", - label: "3x", + label: i18next.t("settings:gameSpeed3x"), }, { value: "4", - label: "4x", + label: i18next.t("settings:gameSpeed4x"), }, { value: "5", - label: "5x", + label: i18next.t("settings:gameSpeed5x"), }, ], default: 3, From 369b3307cdc46317a65a4ad1707399090a29ed2c Mon Sep 17 00:00:00 2001 From: Lugiad <2070109+Adri1@users.noreply.github.com> Date: Mon, 2 Jun 2025 00:40:57 +0200 Subject: [PATCH 187/262] [UI/UX] Moves menu position adjustments (#5917) --- src/ui/fight-ui-handler.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/fight-ui-handler.ts b/src/ui/fight-ui-handler.ts index 6dbbcd47300..208e627023b 100644 --- a/src/ui/fight-ui-handler.ts +++ b/src/ui/fight-ui-handler.ts @@ -292,7 +292,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { this.accuracyText.setVisible(hasMove); this.moveCategoryIcon.setVisible(hasMove); - this.cursorObj.setPosition(13 + (cursor % 2 === 1 ? 100 : 0), -31 + (cursor >= 2 ? 15 : 0)); + this.cursorObj.setPosition(13 + (cursor % 2 === 1 ? 114 : 0), -31 + (cursor >= 2 ? 15 : 0)); return changed; } @@ -322,7 +322,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { const moveset = pokemon.getMoveset(); for (let moveIndex = 0; moveIndex < 4; moveIndex++) { - const moveText = addTextObject(moveIndex % 2 === 0 ? 0 : 100, moveIndex < 2 ? 0 : 16, "-", TextStyle.WINDOW); + const moveText = addTextObject(moveIndex % 2 === 0 ? 0 : 114, moveIndex < 2 ? 0 : 16, "-", TextStyle.WINDOW); moveText.setName("text-empty-move"); if (moveIndex < moveset.length) { From cdda539ac5609c1f0fa5da0114ee51d5bff82bf5 Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Sun, 1 Jun 2025 18:45:30 -0400 Subject: [PATCH 188/262] [Test] Remove redundant entries and `Array.fill()` in moveset overrides (#5907) * Removed unneeded duplicate entries from movesets * Removed `array.fill` in moveset overrides * Reverted accidental changes --- test/abilities/aura_break.test.ts | 11 ++++++----- test/abilities/contrary.test.ts | 5 +---- test/abilities/ice_face.test.ts | 11 ++++------- test/abilities/libero.test.ts | 14 +++++++------- test/abilities/mycelium_might.test.ts | 18 ++++++++++-------- test/abilities/power_construct.test.ts | 9 +++++---- test/abilities/protean.test.ts | 14 +++++++------- test/abilities/sand_veil.test.ts | 16 +++++++++------- test/abilities/schooling.test.ts | 5 +---- test/abilities/screen_cleaner.test.ts | 7 +++---- test/abilities/stall.test.ts | 13 +++++++------ test/abilities/sweet_veil.test.ts | 13 +++++++------ test/abilities/synchronize.test.ts | 5 +---- test/abilities/unseen_fist.test.ts | 16 ++++++++-------- test/battle/inverse_battle.test.ts | 4 +--- test/battle/special_battle.test.ts | 13 +++++++------ test/items/leek.test.ts | 2 +- test/items/leftovers.test.ts | 17 +++++++++-------- test/moves/astonish.test.ts | 15 ++++++++------- test/moves/aurora_veil.test.ts | 17 +++++++++-------- test/moves/chilly_reception.test.ts | 9 +++------ test/moves/double_team.test.ts | 15 ++++++++------- test/moves/dynamax_cannon.test.ts | 10 ++++++++-- test/moves/flower_shield.test.ts | 4 +--- test/moves/freezy_frost.test.ts | 4 ++-- test/moves/fusion_bolt.test.ts | 19 +++++++++---------- test/moves/fusion_flare.test.ts | 17 ++++++++--------- test/moves/fusion_flare_bolt.test.ts | 23 +++++++++++------------ test/moves/light_screen.test.ts | 15 ++++++++------- test/moves/magnet_rise.test.ts | 15 ++++++++------- test/moves/powder.test.ts | 6 +++--- test/moves/reflect.test.ts | 15 ++++++++------- test/moves/retaliate.test.ts | 2 +- test/moves/swallow.test.ts | 17 ++++++++--------- test/moves/tackle.test.ts | 15 ++++++++------- test/moves/throat_chop.test.ts | 4 ++-- test/moves/tidy_up.test.ts | 15 +++++---------- 37 files changed, 212 insertions(+), 218 deletions(-) diff --git a/test/abilities/aura_break.test.ts b/test/abilities/aura_break.test.ts index f88d7d875bf..5b2211d7b3c 100644 --- a/test/abilities/aura_break.test.ts +++ b/test/abilities/aura_break.test.ts @@ -24,11 +24,12 @@ describe("Abilities - Aura Break", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.moveset([Moves.MOONBLAST, Moves.DARK_PULSE, Moves.MOONBLAST, Moves.DARK_PULSE]); - game.override.enemyMoveset(Moves.SPLASH); - game.override.enemyAbility(Abilities.AURA_BREAK); - game.override.enemySpecies(Species.SHUCKLE); + game.override + .battleStyle("single") + .moveset([Moves.MOONBLAST, Moves.DARK_PULSE]) + .enemyMoveset(Moves.SPLASH) + .enemyAbility(Abilities.AURA_BREAK) + .enemySpecies(Species.SHUCKLE); }); it("reverses the effect of Fairy Aura", async () => { diff --git a/test/abilities/contrary.test.ts b/test/abilities/contrary.test.ts index 929d620c232..99c5208f561 100644 --- a/test/abilities/contrary.test.ts +++ b/test/abilities/contrary.test.ts @@ -54,10 +54,7 @@ describe("Abilities - Contrary", () => { }); it("should block negative effects", async () => { - game.override - .enemyPassiveAbility(Abilities.CLEAR_BODY) - .enemyMoveset([Moves.HOWL, Moves.HOWL, Moves.HOWL, Moves.HOWL]) - .moveset([Moves.SPLASH]); + game.override.enemyPassiveAbility(Abilities.CLEAR_BODY).enemyMoveset(Moves.HOWL).moveset([Moves.SPLASH]); await game.classicMode.startBattle([Species.SLOWBRO]); const enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/test/abilities/ice_face.test.ts b/test/abilities/ice_face.test.ts index 38269c29af1..cb9530fe355 100644 --- a/test/abilities/ice_face.test.ts +++ b/test/abilities/ice_face.test.ts @@ -106,8 +106,7 @@ describe("Abilities - Ice Face", () => { }); it("transforms to Ice Face when Hail or Snow starts", async () => { - game.override.moveset([Moves.QUICK_ATTACK]); - game.override.enemyMoveset([Moves.HAIL, Moves.HAIL, Moves.HAIL, Moves.HAIL]); + game.override.moveset([Moves.QUICK_ATTACK]).enemyMoveset(Moves.HAIL); await game.classicMode.startBattle([Species.MAGIKARP]); @@ -128,8 +127,7 @@ describe("Abilities - Ice Face", () => { }); it("transforms to Ice Face when summoned on arena with active Snow or Hail", async () => { - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); - game.override.moveset([Moves.SNOWSCAPE]); + game.override.enemyMoveset(Moves.TACKLE).moveset([Moves.SNOWSCAPE]); await game.classicMode.startBattle([Species.EISCUE, Species.NINJASK]); @@ -155,8 +153,7 @@ describe("Abilities - Ice Face", () => { }); it("will not revert to its Ice Face if there is already Hail when it changes into Noice", async () => { - game.override.enemySpecies(Species.SHUCKLE); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.enemySpecies(Species.SHUCKLE).enemyMoveset(Moves.TACKLE); await game.classicMode.startBattle([Species.EISCUE]); @@ -175,7 +172,7 @@ describe("Abilities - Ice Face", () => { }); it("persists form change when switched out", async () => { - game.override.enemyMoveset([Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK]); + game.override.enemyMoveset(Moves.QUICK_ATTACK); await game.classicMode.startBattle([Species.EISCUE, Species.MAGIKARP]); diff --git a/test/abilities/libero.test.ts b/test/abilities/libero.test.ts index ea4e288bdb0..a099e6ff047 100644 --- a/test/abilities/libero.test.ts +++ b/test/abilities/libero.test.ts @@ -29,11 +29,12 @@ describe("Abilities - Libero", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.ability(Abilities.LIBERO); - game.override.startingLevel(100); - game.override.enemySpecies(Species.RATTATA); - game.override.enemyMoveset([Moves.ENDURE, Moves.ENDURE, Moves.ENDURE, Moves.ENDURE]); + game.override + .battleStyle("single") + .ability(Abilities.LIBERO) + .startingLevel(100) + .enemySpecies(Species.RATTATA) + .enemyMoveset(Moves.ENDURE); }); test("ability applies and changes a pokemon's type", async () => { @@ -173,8 +174,7 @@ describe("Abilities - Libero", () => { }); test("ability applies correctly even if the pokemon's move is protected against", async () => { - game.override.moveset([Moves.TACKLE]); - game.override.enemyMoveset([Moves.PROTECT, Moves.PROTECT, Moves.PROTECT, Moves.PROTECT]); + game.override.moveset([Moves.TACKLE]).enemyMoveset(Moves.PROTECT); await game.classicMode.startBattle([Species.MAGIKARP]); diff --git a/test/abilities/mycelium_might.test.ts b/test/abilities/mycelium_might.test.ts index 18465f9b64e..9c898063201 100644 --- a/test/abilities/mycelium_might.test.ts +++ b/test/abilities/mycelium_might.test.ts @@ -24,13 +24,15 @@ describe("Abilities - Mycelium Might", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.disableCrits(); - game.override.enemySpecies(Species.SHUCKLE); - game.override.enemyAbility(Abilities.CLEAR_BODY); - game.override.enemyMoveset([Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK]); - game.override.ability(Abilities.MYCELIUM_MIGHT); - game.override.moveset([Moves.QUICK_ATTACK, Moves.BABY_DOLL_EYES]); + game.override + .battleStyle("single") + .disableCrits() + .enemySpecies(Species.SHUCKLE) + .enemyAbility(Abilities.CLEAR_BODY) + + .enemyMoveset(Moves.QUICK_ATTACK) + .ability(Abilities.MYCELIUM_MIGHT) + .moveset([Moves.QUICK_ATTACK, Moves.BABY_DOLL_EYES]); }); /** @@ -64,7 +66,7 @@ describe("Abilities - Mycelium Might", () => { }, 20000); it("will still go first if a status move that is in a higher priority bracket than the opponent's move is used", async () => { - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.enemyMoveset(Moves.TACKLE); await game.classicMode.startBattle([Species.REGIELEKI]); const enemyPokemon = game.scene.getEnemyPokemon(); diff --git a/test/abilities/power_construct.test.ts b/test/abilities/power_construct.test.ts index 0ff90a2c0df..67005f5c87e 100644 --- a/test/abilities/power_construct.test.ts +++ b/test/abilities/power_construct.test.ts @@ -25,10 +25,11 @@ describe("Abilities - POWER CONSTRUCT", () => { beforeEach(() => { game = new GameManager(phaserGame); const moveToUse = Moves.SPLASH; - game.override.battleStyle("single"); - game.override.ability(Abilities.POWER_CONSTRUCT); - game.override.moveset([moveToUse]); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override + .battleStyle("single") + .ability(Abilities.POWER_CONSTRUCT) + .moveset([moveToUse]) + .enemyMoveset(Moves.TACKLE); }); test("check if fainted 50% Power Construct Pokemon switches to base form on arena reset", async () => { diff --git a/test/abilities/protean.test.ts b/test/abilities/protean.test.ts index bfe6dd32282..e868be8e231 100644 --- a/test/abilities/protean.test.ts +++ b/test/abilities/protean.test.ts @@ -29,11 +29,12 @@ describe("Abilities - Protean", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.ability(Abilities.PROTEAN); - game.override.startingLevel(100); - game.override.enemySpecies(Species.RATTATA); - game.override.enemyMoveset([Moves.ENDURE, Moves.ENDURE, Moves.ENDURE, Moves.ENDURE]); + game.override + .battleStyle("single") + .ability(Abilities.PROTEAN) + .startingLevel(100) + .enemySpecies(Species.RATTATA) + .enemyMoveset(Moves.ENDURE); }); test("ability applies and changes a pokemon's type", async () => { @@ -173,8 +174,7 @@ describe("Abilities - Protean", () => { }); test("ability applies correctly even if the pokemon's move is protected against", async () => { - game.override.moveset([Moves.TACKLE]); - game.override.enemyMoveset([Moves.PROTECT, Moves.PROTECT, Moves.PROTECT, Moves.PROTECT]); + game.override.moveset([Moves.TACKLE]).enemyMoveset(Moves.PROTECT); await game.classicMode.startBattle([Species.MAGIKARP]); diff --git a/test/abilities/sand_veil.test.ts b/test/abilities/sand_veil.test.ts index 116850e1e5a..a74538fef16 100644 --- a/test/abilities/sand_veil.test.ts +++ b/test/abilities/sand_veil.test.ts @@ -28,13 +28,15 @@ describe("Abilities - Sand Veil", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.moveset([Moves.SPLASH]); - game.override.enemySpecies(Species.MEOWSCARADA); - game.override.enemyAbility(Abilities.INSOMNIA); - game.override.enemyMoveset([Moves.TWISTER, Moves.TWISTER, Moves.TWISTER, Moves.TWISTER]); - game.override.startingLevel(100); - game.override.enemyLevel(100); - game.override.weather(WeatherType.SANDSTORM).battleStyle("double"); + game.override + .moveset([Moves.SPLASH]) + .enemySpecies(Species.MEOWSCARADA) + .enemyAbility(Abilities.INSOMNIA) + .enemyMoveset(Moves.TWISTER) + .startingLevel(100) + .enemyLevel(100) + .weather(WeatherType.SANDSTORM) + .battleStyle("double"); }); test("ability should increase the evasiveness of the source", async () => { diff --git a/test/abilities/schooling.test.ts b/test/abilities/schooling.test.ts index ac4e3c837c5..a94b76e38ff 100644 --- a/test/abilities/schooling.test.ts +++ b/test/abilities/schooling.test.ts @@ -25,10 +25,7 @@ describe("Abilities - SCHOOLING", () => { beforeEach(() => { game = new GameManager(phaserGame); const moveToUse = Moves.SPLASH; - game.override.battleStyle("single"); - game.override.ability(Abilities.SCHOOLING); - game.override.moveset([moveToUse]); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.battleStyle("single").ability(Abilities.SCHOOLING).moveset([moveToUse]).enemyMoveset(Moves.TACKLE); }); test("check if fainted pokemon switches to base form on arena reset", async () => { diff --git a/test/abilities/screen_cleaner.test.ts b/test/abilities/screen_cleaner.test.ts index ea99ba00f87..f96f7bf99e2 100644 --- a/test/abilities/screen_cleaner.test.ts +++ b/test/abilities/screen_cleaner.test.ts @@ -30,8 +30,7 @@ describe("Abilities - Screen Cleaner", () => { }); it("removes Aurora Veil", async () => { - game.override.moveset([Moves.HAIL]); - game.override.enemyMoveset([Moves.AURORA_VEIL, Moves.AURORA_VEIL, Moves.AURORA_VEIL, Moves.AURORA_VEIL]); + game.override.moveset([Moves.HAIL]).enemyMoveset(Moves.AURORA_VEIL); await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); @@ -48,7 +47,7 @@ describe("Abilities - Screen Cleaner", () => { }); it("removes Light Screen", async () => { - game.override.enemyMoveset([Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN]); + game.override.enemyMoveset(Moves.LIGHT_SCREEN); await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); @@ -65,7 +64,7 @@ describe("Abilities - Screen Cleaner", () => { }); it("removes Reflect", async () => { - game.override.enemyMoveset([Moves.REFLECT, Moves.REFLECT, Moves.REFLECT, Moves.REFLECT]); + game.override.enemyMoveset(Moves.REFLECT); await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); diff --git a/test/abilities/stall.test.ts b/test/abilities/stall.test.ts index 5c17f71c48d..6e6fe04a183 100644 --- a/test/abilities/stall.test.ts +++ b/test/abilities/stall.test.ts @@ -22,12 +22,13 @@ describe("Abilities - Stall", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.disableCrits(); - game.override.enemySpecies(Species.REGIELEKI); - game.override.enemyAbility(Abilities.STALL); - game.override.enemyMoveset([Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK]); - game.override.moveset([Moves.QUICK_ATTACK, Moves.TACKLE]); + game.override + .battleStyle("single") + .disableCrits() + .enemySpecies(Species.REGIELEKI) + .enemyAbility(Abilities.STALL) + .enemyMoveset(Moves.QUICK_ATTACK) + .moveset([Moves.QUICK_ATTACK, Moves.TACKLE]); }); /** diff --git a/test/abilities/sweet_veil.test.ts b/test/abilities/sweet_veil.test.ts index 80d7165619f..e294938acd4 100644 --- a/test/abilities/sweet_veil.test.ts +++ b/test/abilities/sweet_veil.test.ts @@ -25,11 +25,12 @@ describe("Abilities - Sweet Veil", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("double"); - game.override.moveset([Moves.SPLASH, Moves.REST, Moves.YAWN]); - game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyAbility(Abilities.BALL_FETCH); - game.override.enemyMoveset([Moves.POWDER, Moves.POWDER, Moves.POWDER, Moves.POWDER]); + game.override + .battleStyle("double") + .moveset([Moves.SPLASH, Moves.REST, Moves.YAWN]) + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.POWDER); }); it("prevents the user and its allies from falling asleep", async () => { @@ -56,7 +57,7 @@ describe("Abilities - Sweet Veil", () => { }); it("causes Yawn to fail if used on the user or its allies", async () => { - game.override.enemyMoveset([Moves.YAWN, Moves.YAWN, Moves.YAWN, Moves.YAWN]); + game.override.enemyMoveset(Moves.YAWN); await game.classicMode.startBattle([Species.SWIRLIX, Species.MAGIKARP]); game.move.select(Moves.SPLASH); diff --git a/test/abilities/synchronize.test.ts b/test/abilities/synchronize.test.ts index 783201d7a5b..e781d55fe10 100644 --- a/test/abilities/synchronize.test.ts +++ b/test/abilities/synchronize.test.ts @@ -66,10 +66,7 @@ describe("Abilities - Synchronize", () => { }); it("does not trigger when Pokemon is statused by Toxic Spikes", async () => { - game.override - .ability(Abilities.SYNCHRONIZE) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Array(4).fill(Moves.TOXIC_SPIKES)); + game.override.ability(Abilities.SYNCHRONIZE).enemyAbility(Abilities.BALL_FETCH).enemyMoveset(Moves.TOXIC_SPIKES); await game.classicMode.startBattle([Species.FEEBAS, Species.MILOTIC]); diff --git a/test/abilities/unseen_fist.test.ts b/test/abilities/unseen_fist.test.ts index 6c14e82fc39..d78ce8c5bbf 100644 --- a/test/abilities/unseen_fist.test.ts +++ b/test/abilities/unseen_fist.test.ts @@ -24,12 +24,13 @@ describe("Abilities - Unseen Fist", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.starterSpecies(Species.URSHIFU); - game.override.enemySpecies(Species.SNORLAX); - game.override.enemyMoveset([Moves.PROTECT, Moves.PROTECT, Moves.PROTECT, Moves.PROTECT]); - game.override.startingLevel(100); - game.override.enemyLevel(100); + game.override + .battleStyle("single") + .starterSpecies(Species.URSHIFU) + .enemySpecies(Species.SNORLAX) + .enemyMoveset(Moves.PROTECT) + .startingLevel(100) + .enemyLevel(100); }); it("should cause a contact move to ignore Protect", async () => @@ -73,8 +74,7 @@ async function testUnseenFistHitResult( protectMove: Moves, shouldSucceed = true, ): Promise { - game.override.moveset([attackMove]); - game.override.enemyMoveset([protectMove, protectMove, protectMove, protectMove]); + game.override.moveset([attackMove]).enemyMoveset(protectMove); await game.classicMode.startBattle(); diff --git a/test/battle/inverse_battle.test.ts b/test/battle/inverse_battle.test.ts index 799442bb603..168df0b9505 100644 --- a/test/battle/inverse_battle.test.ts +++ b/test/battle/inverse_battle.test.ts @@ -188,9 +188,7 @@ describe("Inverse Battle", () => { }); it("Conversion 2 should change the type to the resistive type - Conversion 2 against Dragonite", async () => { - game.override - .moveset([Moves.CONVERSION_2]) - .enemyMoveset([Moves.DRAGON_CLAW, Moves.DRAGON_CLAW, Moves.DRAGON_CLAW, Moves.DRAGON_CLAW]); + game.override.moveset([Moves.CONVERSION_2]).enemyMoveset(Moves.DRAGON_CLAW); await game.challengeMode.startBattle(); diff --git a/test/battle/special_battle.test.ts b/test/battle/special_battle.test.ts index 6f4034cd8cd..8d75e530ca6 100644 --- a/test/battle/special_battle.test.ts +++ b/test/battle/special_battle.test.ts @@ -23,12 +23,13 @@ describe("Test Battle Phase", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.enemySpecies(Species.RATTATA); - game.override.startingLevel(2000); - game.override.moveset([Moves.TACKLE]); - game.override.enemyAbility(Abilities.HYDRATION); - game.override.ability(Abilities.HYDRATION); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override + .enemySpecies(Species.RATTATA) + .startingLevel(2000) + .moveset([Moves.TACKLE]) + .enemyAbility(Abilities.HYDRATION) + .ability(Abilities.HYDRATION) + .enemyMoveset(Moves.TACKLE); }); it("startBattle 2vs1 boss", async () => { diff --git a/test/items/leek.test.ts b/test/items/leek.test.ts index 7a6975f6dae..be2aa73299c 100644 --- a/test/items/leek.test.ts +++ b/test/items/leek.test.ts @@ -25,7 +25,7 @@ describe("Items - Leek", () => { game.override .enemySpecies(Species.MAGIKARP) - .enemyMoveset([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]) + .enemyMoveset(Moves.SPLASH) .startingHeldItems([{ name: "LEEK" }]) .moveset([Moves.TACKLE]) .battleStyle("single"); diff --git a/test/items/leftovers.test.ts b/test/items/leftovers.test.ts index f4825c2b721..a31b711eb63 100644 --- a/test/items/leftovers.test.ts +++ b/test/items/leftovers.test.ts @@ -23,14 +23,15 @@ describe("Items - Leftovers", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.startingLevel(2000); - game.override.ability(Abilities.UNNERVE); - game.override.moveset([Moves.SPLASH]); - game.override.enemySpecies(Species.SHUCKLE); - game.override.enemyAbility(Abilities.UNNERVE); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); - game.override.startingHeldItems([{ name: "LEFTOVERS", count: 1 }]); + game.override + .battleStyle("single") + .startingLevel(2000) + .ability(Abilities.UNNERVE) + .moveset([Moves.SPLASH]) + .enemySpecies(Species.SHUCKLE) + .enemyAbility(Abilities.UNNERVE) + .enemyMoveset(Moves.TACKLE) + .startingHeldItems([{ name: "LEFTOVERS", count: 1 }]); }); it("leftovers works", async () => { diff --git a/test/moves/astonish.test.ts b/test/moves/astonish.test.ts index daa9b0bb878..c07b0d7d2c5 100644 --- a/test/moves/astonish.test.ts +++ b/test/moves/astonish.test.ts @@ -27,13 +27,14 @@ describe("Moves - Astonish", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.moveset([Moves.ASTONISH, Moves.SPLASH]); - game.override.enemySpecies(Species.BLASTOISE); - game.override.enemyAbility(Abilities.INSOMNIA); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); - game.override.startingLevel(100); - game.override.enemyLevel(100); + game.override + .battleStyle("single") + .moveset([Moves.ASTONISH, Moves.SPLASH]) + .enemySpecies(Species.BLASTOISE) + .enemyAbility(Abilities.INSOMNIA) + .enemyMoveset(Moves.TACKLE) + .startingLevel(100) + .enemyLevel(100); vi.spyOn(allMoves[Moves.ASTONISH], "chance", "get").mockReturnValue(100); }); diff --git a/test/moves/aurora_veil.test.ts b/test/moves/aurora_veil.test.ts index 96e74ec5a9e..76569ac4a0e 100644 --- a/test/moves/aurora_veil.test.ts +++ b/test/moves/aurora_veil.test.ts @@ -36,14 +36,15 @@ describe("Moves - Aurora Veil", () => { beforeEach(() => { game = new GameManager(phaserGame); globalScene = game.scene; - game.override.battleStyle("single"); - game.override.ability(Abilities.NONE); - game.override.moveset([Moves.ABSORB, Moves.ROCK_SLIDE, Moves.TACKLE]); - game.override.enemyLevel(100); - game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyMoveset([Moves.AURORA_VEIL, Moves.AURORA_VEIL, Moves.AURORA_VEIL, Moves.AURORA_VEIL]); - game.override.disableCrits(); - game.override.weather(WeatherType.HAIL); + game.override + .battleStyle("single") + .ability(Abilities.BALL_FETCH) + .moveset([Moves.ABSORB, Moves.ROCK_SLIDE, Moves.TACKLE]) + .enemyLevel(100) + .enemySpecies(Species.MAGIKARP) + .enemyMoveset(Moves.AURORA_VEIL) + .disableCrits() + .weather(WeatherType.HAIL); }); it("reduces damage of physical attacks by half in a single battle", async () => { diff --git a/test/moves/chilly_reception.test.ts b/test/moves/chilly_reception.test.ts index 1c6c5ce127e..2c04e0e7313 100644 --- a/test/moves/chilly_reception.test.ts +++ b/test/moves/chilly_reception.test.ts @@ -26,7 +26,7 @@ describe("Moves - Chilly Reception", () => { game.override .battleStyle("single") .moveset([Moves.CHILLY_RECEPTION, Moves.SNOWSCAPE]) - .enemyMoveset(Array(4).fill(Moves.SPLASH)) + .enemyMoveset(Moves.SPLASH) .enemyAbility(Abilities.BALL_FETCH) .ability(Abilities.BALL_FETCH); }); @@ -69,10 +69,7 @@ describe("Moves - Chilly Reception", () => { // enemy uses another move and weather doesn't change it("check case - enemy not selecting chilly reception doesn't change weather ", async () => { - game.override - .battleStyle("single") - .enemyMoveset([Moves.CHILLY_RECEPTION, Moves.TACKLE]) - .moveset(Array(4).fill(Moves.SPLASH)); + game.override.battleStyle("single").enemyMoveset([Moves.CHILLY_RECEPTION, Moves.TACKLE]).moveset(Moves.SPLASH); await game.classicMode.startBattle([Species.SLOWKING, Species.MEOWTH]); @@ -87,7 +84,7 @@ describe("Moves - Chilly Reception", () => { game.override .battleStyle("single") .startingWave(8) - .enemyMoveset(Array(4).fill(Moves.CHILLY_RECEPTION)) + .enemyMoveset(Moves.CHILLY_RECEPTION) .enemySpecies(Species.MAGIKARP) .moveset([Moves.SPLASH, Moves.THUNDERBOLT]); diff --git a/test/moves/double_team.test.ts b/test/moves/double_team.test.ts index b97fb1a338e..aa07ee5f688 100644 --- a/test/moves/double_team.test.ts +++ b/test/moves/double_team.test.ts @@ -23,13 +23,14 @@ describe("Moves - Double Team", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.moveset([Moves.DOUBLE_TEAM]); - game.override.disableCrits(); - game.override.ability(Abilities.BALL_FETCH); - game.override.enemySpecies(Species.SHUCKLE); - game.override.enemyAbility(Abilities.BALL_FETCH); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override + .battleStyle("single") + .moveset([Moves.DOUBLE_TEAM]) + .disableCrits() + .ability(Abilities.BALL_FETCH) + .enemySpecies(Species.SHUCKLE) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.TACKLE); }); it("raises the user's EVA stat stage by 1", async () => { diff --git a/test/moves/dynamax_cannon.test.ts b/test/moves/dynamax_cannon.test.ts index 62004e62778..19a15225653 100644 --- a/test/moves/dynamax_cannon.test.ts +++ b/test/moves/dynamax_cannon.test.ts @@ -29,8 +29,14 @@ describe("Moves - Dynamax Cannon", () => { dynamaxCannon = allMoves[Moves.DYNAMAX_CANNON]; game = new GameManager(phaserGame); - game.override.moveset([dynamaxCannon.id]); - game.override.startingLevel(200); + game.override + .moveset(Moves.DYNAMAX_CANNON) + .startingLevel(200) + .levelCap(10) + .battleStyle("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyMoveset(Moves.SPLASH); // Note that, for Waves 1-10, the level cap is 10 game.override.startingWave(1); diff --git a/test/moves/flower_shield.test.ts b/test/moves/flower_shield.test.ts index d95ef6299b7..30a367f873d 100644 --- a/test/moves/flower_shield.test.ts +++ b/test/moves/flower_shield.test.ts @@ -74,9 +74,7 @@ describe("Moves - Flower Shield", () => { * See semi-vulnerable state tags. {@linkcode SemiInvulnerableTag} */ it("does not raise DEF stat stage for a Pokemon in semi-vulnerable state", async () => { - game.override.enemySpecies(Species.PARAS); - game.override.enemyMoveset([Moves.DIG, Moves.DIG, Moves.DIG, Moves.DIG]); - game.override.enemyLevel(50); + game.override.enemySpecies(Species.PARAS).enemyMoveset(Moves.DIG).enemyLevel(50); await game.classicMode.startBattle([Species.CHERRIM]); const paras = game.scene.getEnemyPokemon()!; diff --git a/test/moves/freezy_frost.test.ts b/test/moves/freezy_frost.test.ts index 7cee9bfb372..2b2e06bfe74 100644 --- a/test/moves/freezy_frost.test.ts +++ b/test/moves/freezy_frost.test.ts @@ -27,7 +27,7 @@ describe("Moves - Freezy Frost", () => { .battleStyle("single") .enemySpecies(Species.RATTATA) .enemyLevel(100) - .enemyMoveset([Moves.HOWL, Moves.HOWL, Moves.HOWL, Moves.HOWL]) + .enemyMoveset(Moves.HOWL) .enemyAbility(Abilities.BALL_FETCH) .startingLevel(100) .moveset([Moves.FREEZY_FROST, Moves.HOWL, Moves.SPLASH]) @@ -55,7 +55,7 @@ describe("Moves - Freezy Frost", () => { }); it("should clear all stat changes even when enemy uses the move", async () => { - game.override.enemyMoveset([Moves.FREEZY_FROST, Moves.FREEZY_FROST, Moves.FREEZY_FROST, Moves.FREEZY_FROST]); + game.override.enemyMoveset(Moves.FREEZY_FROST); await game.classicMode.startBattle([Species.SHUCKLE]); // Shuckle for slower Howl on first turn so Freezy Frost doesn't affect it. const user = game.scene.getPlayerPokemon()!; diff --git a/test/moves/fusion_bolt.test.ts b/test/moves/fusion_bolt.test.ts index 5e515a3bc47..3fc8dae1b85 100644 --- a/test/moves/fusion_bolt.test.ts +++ b/test/moves/fusion_bolt.test.ts @@ -23,16 +23,15 @@ describe("Moves - Fusion Bolt", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.moveset([fusionBolt]); - game.override.startingLevel(1); - - game.override.enemySpecies(Species.RESHIRAM); - game.override.enemyAbility(Abilities.ROUGH_SKIN); - game.override.enemyMoveset([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); - - game.override.battleStyle("single"); - game.override.startingWave(97); - game.override.disableCrits(); + game.override + .moveset([fusionBolt]) + .startingLevel(1) + .enemySpecies(Species.RESHIRAM) + .enemyAbility(Abilities.ROUGH_SKIN) + .enemyMoveset(Moves.SPLASH) + .battleStyle("single") + .startingWave(97) + .disableCrits(); }); it("should not make contact", async () => { diff --git a/test/moves/fusion_flare.test.ts b/test/moves/fusion_flare.test.ts index b947b9e7f7e..9f16b94da5c 100644 --- a/test/moves/fusion_flare.test.ts +++ b/test/moves/fusion_flare.test.ts @@ -24,15 +24,14 @@ describe("Moves - Fusion Flare", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.moveset([fusionFlare]); - game.override.startingLevel(1); - - game.override.enemySpecies(Species.RATTATA); - game.override.enemyMoveset([Moves.REST, Moves.REST, Moves.REST, Moves.REST]); - - game.override.battleStyle("single"); - game.override.startingWave(97); - game.override.disableCrits(); + game.override + .moveset([fusionFlare]) + .startingLevel(1) + .enemySpecies(Species.RATTATA) + .enemyMoveset(Moves.REST) + .battleStyle("single") + .startingWave(97) + .disableCrits(); }); it("should thaw freeze status condition", async () => { diff --git a/test/moves/fusion_flare_bolt.test.ts b/test/moves/fusion_flare_bolt.test.ts index 1d248e09510..2b66a1a6d2f 100644 --- a/test/moves/fusion_flare_bolt.test.ts +++ b/test/moves/fusion_flare_bolt.test.ts @@ -33,15 +33,14 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { fusionFlare = allMoves[Moves.FUSION_FLARE]; fusionBolt = allMoves[Moves.FUSION_BOLT]; game = new GameManager(phaserGame); - game.override.moveset([fusionFlare.id, fusionBolt.id]); - game.override.startingLevel(1); - - game.override.enemySpecies(Species.RESHIRAM); - game.override.enemyMoveset([Moves.REST, Moves.REST, Moves.REST, Moves.REST]); - - game.override.battleStyle("double"); - game.override.startingWave(97); - game.override.disableCrits(); + game.override + .moveset([fusionFlare.id, fusionBolt.id]) + .startingLevel(1) + .enemySpecies(Species.RESHIRAM) + .enemyMoveset(Moves.REST) + .battleStyle("double") + .startingWave(97) + .disableCrits(); vi.spyOn(fusionFlare, "calculateBattlePower"); vi.spyOn(fusionBolt, "calculateBattlePower"); @@ -113,7 +112,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { }, 20000); it("FUSION_FLARE should not double power of subsequent FUSION_BOLT if a move succeeded in between", async () => { - game.override.enemyMoveset([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); + game.override.enemyMoveset(Moves.SPLASH); await game.classicMode.startBattle([Species.ZEKROM, Species.ZEKROM]); game.move.select(fusionFlare.id, 0, BattlerIndex.ENEMY); @@ -158,7 +157,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { }, 20000); it("FUSION_FLARE and FUSION_BOLT alternating throughout turn should double power of subsequent moves", async () => { - game.override.enemyMoveset([fusionFlare.id, fusionFlare.id, fusionFlare.id, fusionFlare.id]); + game.override.enemyMoveset(fusionFlare.id); await game.classicMode.startBattle([Species.ZEKROM, Species.ZEKROM]); const party = game.scene.getPlayerParty(); @@ -212,7 +211,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { }, 20000); it("FUSION_FLARE and FUSION_BOLT alternating throughout turn should double power of subsequent moves if moves are aimed at allies", async () => { - game.override.enemyMoveset([fusionFlare.id, fusionFlare.id, fusionFlare.id, fusionFlare.id]); + game.override.enemyMoveset(fusionFlare.id); await game.classicMode.startBattle([Species.ZEKROM, Species.ZEKROM]); const party = game.scene.getPlayerParty(); diff --git a/test/moves/light_screen.test.ts b/test/moves/light_screen.test.ts index 93d51ad7372..6ce51da68cd 100644 --- a/test/moves/light_screen.test.ts +++ b/test/moves/light_screen.test.ts @@ -35,13 +35,14 @@ describe("Moves - Light Screen", () => { beforeEach(() => { game = new GameManager(phaserGame); globalScene = game.scene; - game.override.battleStyle("single"); - game.override.ability(Abilities.NONE); - game.override.moveset([Moves.ABSORB, Moves.DAZZLING_GLEAM, Moves.TACKLE]); - game.override.enemyLevel(100); - game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyMoveset([Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN]); - game.override.disableCrits(); + game.override + .battleStyle("single") + .ability(Abilities.BALL_FETCH) + .moveset([Moves.ABSORB, Moves.DAZZLING_GLEAM, Moves.TACKLE]) + .enemyLevel(100) + .enemySpecies(Species.MAGIKARP) + .enemyMoveset(Moves.LIGHT_SCREEN) + .disableCrits(); }); it("reduces damage of special attacks by half in a single battle", async () => { diff --git a/test/moves/magnet_rise.test.ts b/test/moves/magnet_rise.test.ts index 3f15a109f11..5d5ae91c4fe 100644 --- a/test/moves/magnet_rise.test.ts +++ b/test/moves/magnet_rise.test.ts @@ -23,13 +23,14 @@ describe("Moves - Magnet Rise", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.starterSpecies(Species.MAGNEZONE); - game.override.enemySpecies(Species.RATTATA); - game.override.enemyMoveset([Moves.DRILL_RUN, Moves.DRILL_RUN, Moves.DRILL_RUN, Moves.DRILL_RUN]); - game.override.disableCrits(); - game.override.enemyLevel(1); - game.override.moveset([moveToUse, Moves.SPLASH, Moves.GRAVITY, Moves.BATON_PASS]); + game.override + .battleStyle("single") + .starterSpecies(Species.MAGNEZONE) + .enemySpecies(Species.RATTATA) + .enemyMoveset(Moves.DRILL_RUN) + .disableCrits() + .enemyLevel(1) + .moveset([moveToUse, Moves.SPLASH, Moves.GRAVITY, Moves.BATON_PASS]); }); it("MAGNET RISE", async () => { diff --git a/test/moves/powder.test.ts b/test/moves/powder.test.ts index b65525109ad..f076923d746 100644 --- a/test/moves/powder.test.ts +++ b/test/moves/powder.test.ts @@ -120,7 +120,7 @@ describe("Moves - Powder", () => { }); it("should not prevent the target from thawing out with Flame Wheel", async () => { - game.override.enemyMoveset(Array(4).fill(Moves.FLAME_WHEEL)).enemyStatusEffect(StatusEffect.FREEZE); + game.override.enemyMoveset(Moves.FLAME_WHEEL).enemyStatusEffect(StatusEffect.FREEZE); await game.classicMode.startBattle([Species.CHARIZARD]); @@ -198,7 +198,7 @@ describe("Moves - Powder", () => { }); it("should cancel Revelation Dance if it becomes a Fire-type move", async () => { - game.override.enemySpecies(Species.CHARIZARD).enemyMoveset(Array(4).fill(Moves.REVELATION_DANCE)); + game.override.enemySpecies(Species.CHARIZARD).enemyMoveset(Moves.REVELATION_DANCE); await game.classicMode.startBattle([Species.CHARIZARD]); @@ -212,7 +212,7 @@ describe("Moves - Powder", () => { }); it("should cancel Shell Trap and damage the target, even if the move would fail", async () => { - game.override.enemyMoveset(Array(4).fill(Moves.SHELL_TRAP)); + game.override.enemyMoveset(Moves.SHELL_TRAP); await game.classicMode.startBattle([Species.CHARIZARD]); diff --git a/test/moves/reflect.test.ts b/test/moves/reflect.test.ts index 268d9ebb71b..191a1a45a09 100644 --- a/test/moves/reflect.test.ts +++ b/test/moves/reflect.test.ts @@ -35,13 +35,14 @@ describe("Moves - Reflect", () => { beforeEach(() => { game = new GameManager(phaserGame); globalScene = game.scene; - game.override.battleStyle("single"); - game.override.ability(Abilities.NONE); - game.override.moveset([Moves.ABSORB, Moves.ROCK_SLIDE, Moves.TACKLE]); - game.override.enemyLevel(100); - game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyMoveset([Moves.REFLECT, Moves.REFLECT, Moves.REFLECT, Moves.REFLECT]); - game.override.disableCrits(); + game.override + .battleStyle("single") + .ability(Abilities.NONE) + .moveset([Moves.ABSORB, Moves.ROCK_SLIDE, Moves.TACKLE]) + .enemyLevel(100) + .enemySpecies(Species.MAGIKARP) + .enemyMoveset(Moves.REFLECT) + .disableCrits(); }); it("reduces damage of physical attacks by half in a single battle", async () => { diff --git a/test/moves/retaliate.test.ts b/test/moves/retaliate.test.ts index 40f31635d9b..24d0cd542cb 100644 --- a/test/moves/retaliate.test.ts +++ b/test/moves/retaliate.test.ts @@ -28,7 +28,7 @@ describe("Moves - Retaliate", () => { game.override .battleStyle("single") .enemySpecies(Species.SNORLAX) - .enemyMoveset([Moves.RETALIATE, Moves.RETALIATE, Moves.RETALIATE, Moves.RETALIATE]) + .enemyMoveset(Moves.RETALIATE) .enemyLevel(100) .moveset([Moves.RETALIATE, Moves.SPLASH]) .startingLevel(80) diff --git a/test/moves/swallow.test.ts b/test/moves/swallow.test.ts index cff9daaf97a..6a2fa8840ea 100644 --- a/test/moves/swallow.test.ts +++ b/test/moves/swallow.test.ts @@ -27,15 +27,14 @@ describe("Moves - Swallow", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - - game.override.enemySpecies(Species.RATTATA); - game.override.enemyMoveset(Moves.SPLASH); - game.override.enemyAbility(Abilities.NONE); - game.override.enemyLevel(2000); - - game.override.moveset([Moves.SWALLOW, Moves.SWALLOW, Moves.SWALLOW, Moves.SWALLOW]); - game.override.ability(Abilities.NONE); + game.override + .battleStyle("single") + .enemySpecies(Species.RATTATA) + .enemyMoveset(Moves.SPLASH) + .enemyAbility(Abilities.NONE) + .enemyLevel(2000) + .moveset(Moves.SWALLOW) + .ability(Abilities.NONE); }); describe("consumes all stockpile stacks to heal (scaling with stacks)", () => { diff --git a/test/moves/tackle.test.ts b/test/moves/tackle.test.ts index 5fd8ba589fc..ecd8750d17f 100644 --- a/test/moves/tackle.test.ts +++ b/test/moves/tackle.test.ts @@ -24,13 +24,14 @@ describe("Moves - Tackle", () => { beforeEach(() => { game = new GameManager(phaserGame); const moveToUse = Moves.TACKLE; - game.override.battleStyle("single"); - game.override.enemySpecies(Species.MAGIKARP); - game.override.startingLevel(1); - game.override.startingWave(97); - game.override.moveset([moveToUse]); - game.override.enemyMoveset([Moves.GROWTH, Moves.GROWTH, Moves.GROWTH, Moves.GROWTH]); - game.override.disableCrits(); + game.override + .battleStyle("single") + .enemySpecies(Species.MAGIKARP) + .startingLevel(1) + .startingWave(97) + .moveset([moveToUse]) + .enemyMoveset(Moves.GROWTH) + .disableCrits(); }); it("TACKLE against ghost", async () => { diff --git a/test/moves/throat_chop.test.ts b/test/moves/throat_chop.test.ts index aaae9c0f5bb..8e504633707 100644 --- a/test/moves/throat_chop.test.ts +++ b/test/moves/throat_chop.test.ts @@ -23,11 +23,11 @@ describe("Moves - Throat Chop", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Array(4).fill(Moves.GROWL)) + .moveset(Moves.GROWL) .battleStyle("single") .ability(Abilities.BALL_FETCH) .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Array(4).fill(Moves.THROAT_CHOP)) + .enemyMoveset(Moves.THROAT_CHOP) .enemySpecies(Species.MAGIKARP); }); diff --git a/test/moves/tidy_up.test.ts b/test/moves/tidy_up.test.ts index ba7a1e07959..103b2d0a1c5 100644 --- a/test/moves/tidy_up.test.ts +++ b/test/moves/tidy_up.test.ts @@ -37,8 +37,7 @@ describe("Moves - Tidy Up", () => { }); it("spikes are cleared", async () => { - game.override.moveset([Moves.SPIKES, Moves.TIDY_UP]); - game.override.enemyMoveset([Moves.SPIKES, Moves.SPIKES, Moves.SPIKES, Moves.SPIKES]); + game.override.moveset([Moves.SPIKES, Moves.TIDY_UP]).enemyMoveset(Moves.SPIKES); await game.classicMode.startBattle(); game.move.select(Moves.SPIKES); @@ -49,8 +48,7 @@ describe("Moves - Tidy Up", () => { }, 20000); it("stealth rocks are cleared", async () => { - game.override.moveset([Moves.STEALTH_ROCK, Moves.TIDY_UP]); - game.override.enemyMoveset([Moves.STEALTH_ROCK, Moves.STEALTH_ROCK, Moves.STEALTH_ROCK, Moves.STEALTH_ROCK]); + game.override.moveset([Moves.STEALTH_ROCK, Moves.TIDY_UP]).enemyMoveset(Moves.STEALTH_ROCK); await game.classicMode.startBattle(); game.move.select(Moves.STEALTH_ROCK); @@ -61,8 +59,7 @@ describe("Moves - Tidy Up", () => { }, 20000); it("toxic spikes are cleared", async () => { - game.override.moveset([Moves.TOXIC_SPIKES, Moves.TIDY_UP]); - game.override.enemyMoveset([Moves.TOXIC_SPIKES, Moves.TOXIC_SPIKES, Moves.TOXIC_SPIKES, Moves.TOXIC_SPIKES]); + game.override.moveset([Moves.TOXIC_SPIKES, Moves.TIDY_UP]).enemyMoveset(Moves.TOXIC_SPIKES); await game.classicMode.startBattle(); game.move.select(Moves.TOXIC_SPIKES); @@ -73,8 +70,7 @@ describe("Moves - Tidy Up", () => { }, 20000); it("sticky webs are cleared", async () => { - game.override.moveset([Moves.STICKY_WEB, Moves.TIDY_UP]); - game.override.enemyMoveset([Moves.STICKY_WEB, Moves.STICKY_WEB, Moves.STICKY_WEB, Moves.STICKY_WEB]); + game.override.moveset([Moves.STICKY_WEB, Moves.TIDY_UP]).enemyMoveset(Moves.STICKY_WEB); await game.classicMode.startBattle(); @@ -86,8 +82,7 @@ describe("Moves - Tidy Up", () => { }, 20000); it("substitutes are cleared", async () => { - game.override.moveset([Moves.SUBSTITUTE, Moves.TIDY_UP]); - game.override.enemyMoveset([Moves.SUBSTITUTE, Moves.SUBSTITUTE, Moves.SUBSTITUTE, Moves.SUBSTITUTE]); + game.override.moveset([Moves.SUBSTITUTE, Moves.TIDY_UP]).enemyMoveset(Moves.SUBSTITUTE); await game.classicMode.startBattle(); From 88b8e05ee82c286bc5cdd55ed6d06cbb71a461a9 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Sun, 1 Jun 2025 16:18:15 -0700 Subject: [PATCH 189/262] [Test] Add extra logging to flaky Last Respects test --- test/moves/last_respects.test.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/moves/last_respects.test.ts b/test/moves/last_respects.test.ts index 89c4896ae56..b9b958869fb 100644 --- a/test/moves/last_respects.test.ts +++ b/test/moves/last_respects.test.ts @@ -167,7 +167,10 @@ describe("Moves - Last Respects", () => { game.move.select(Moves.LAST_RESPECTS); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("MoveEndPhase"); - expect(move.calculateBattlePower).toHaveLastReturnedWith(basePower); + expect( + move.calculateBattlePower, + `Enemy: ${game.field.getEnemyPokemon()}\nPlayer: ${game.field.getPlayerPokemon()}`, + ).toHaveLastReturnedWith(basePower); }); it("should reset playerFaints count if we enter new trainer battle", async () => { From 9f892b906ca6020d3e9c21cfdbe3e6242732a994 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Mon, 2 Jun 2025 07:59:10 -0500 Subject: [PATCH 190/262] [Beta][Bug][UI/UX] Fix name position and types not being updated in battle info (#5913) Fix name position and types not being updated in battle info --- src/ui/battle-info/battle-info.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/ui/battle-info/battle-info.ts b/src/ui/battle-info/battle-info.ts index 7e6cc12bd3d..e67000bb243 100644 --- a/src/ui/battle-info/battle-info.ts +++ b/src/ui/battle-info/battle-info.ts @@ -447,12 +447,14 @@ export default abstract class BattleInfo extends Phaser.GameObjects.Container { } /** Update the pokemon name inside the container */ - protected updateName(name: string): boolean { + protected updateName(pokemon: Pokemon): boolean { + const name = pokemon.getNameToRender(); if (this.lastName === name) { return false; } - this.nameText.setText(name).setPositionRelative(this.box, -this.nameText.displayWidth, 0); - this.lastName = name; + + this.updateNameText(pokemon); + this.genderText.setPositionRelative(this.nameText, this.nameText.displayWidth, 0); return true; } @@ -572,7 +574,7 @@ export default abstract class BattleInfo extends Phaser.GameObjects.Container { this.genderText.setText(getGenderSymbol(gender)).setColor(getGenderColor(gender)); - const nameUpdated = this.updateName(pokemon.getNameToRender()); + const nameUpdated = this.updateName(pokemon); const teraTypeUpdated = this.updateTeraType(pokemon.isTerastallized ? pokemon.getTeraType() : PokemonType.UNKNOWN); @@ -584,6 +586,8 @@ export default abstract class BattleInfo extends Phaser.GameObjects.Container { this.updateStatusIcon(pokemon); + this.setTypes(pokemon.getTypes(true, false, undefined, true)); + if (this.lastHp !== pokemon.hp || this.lastMaxHp !== pokemon.getMaxHp()) { return this.updatePokemonHp(pokemon, resolve, instant); } From ea64024e0992198400b6f30d7753cc77184ffec3 Mon Sep 17 00:00:00 2001 From: Madmadness65 <59298170+Madmadness65@users.noreply.github.com> Date: Mon, 2 Jun 2025 09:32:34 -0500 Subject: [PATCH 191/262] [P3 Bug] Remove Expert Breeder trainer type from ME egg source (#5893) Remove Expert Breeder trainer type from ME eggs It effectively duplicated the text in the egg source text box, and overflowed the visual text box as a result. --- .../encounters/the-expert-pokemon-breeder-encounter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts index 15063bc2763..74cda6fd205 100644 --- a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts @@ -581,7 +581,7 @@ function calculateEggRewardsForPokemon(pokemon: PlayerPokemon): [number, number] } function getEggOptions(commonEggs: number, rareEggs: number) { - const eggDescription = i18next.t(`${namespace}:title`) + ":\n" + i18next.t(trainerNameKey); + const eggDescription = i18next.t(`${namespace}:title`); const eggOptions: IEggOptions[] = []; if (commonEggs > 0) { From 7cd89cd4f7f7d70b4fc665ad954b9719a6278ceb Mon Sep 17 00:00:00 2001 From: damocleas Date: Mon, 2 Jun 2025 14:33:39 -0400 Subject: [PATCH 192/262] Update Discord Invite Link --- src/ui/menu-ui-handler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/menu-ui-handler.ts b/src/ui/menu-ui-handler.ts index 7f0cd4d6a78..cc684111617 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -33,7 +33,7 @@ enum MenuOptions { } let wikiUrl = "https://wiki.pokerogue.net/start"; -const discordUrl = "https://discord.gg/uWpTfdKG49"; +const discordUrl = "https://discord.gg/pokerogue"; const githubUrl = "https://github.com/pagefaultgames/pokerogue"; const redditUrl = "https://www.reddit.com/r/pokerogue"; const donateUrl = "https://github.com/sponsors/pagefaultgames"; From 1b038c5a11180adc2b868132e2c47be72c2fc272 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Mon, 2 Jun 2025 14:16:06 -0700 Subject: [PATCH 193/262] [Test] Fix flaky test logging --- test/moves/last_respects.test.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/test/moves/last_respects.test.ts b/test/moves/last_respects.test.ts index b9b958869fb..4fe9864546e 100644 --- a/test/moves/last_respects.test.ts +++ b/test/moves/last_respects.test.ts @@ -167,10 +167,12 @@ describe("Moves - Last Respects", () => { game.move.select(Moves.LAST_RESPECTS); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("MoveEndPhase"); - expect( - move.calculateBattlePower, - `Enemy: ${game.field.getEnemyPokemon()}\nPlayer: ${game.field.getPlayerPokemon()}`, - ).toHaveLastReturnedWith(basePower); + + const enemy = game.field.getEnemyPokemon(); + const player = game.field.getPlayerPokemon(); + const items = `Player items: ${player.getHeldItems()} | Enemy Items: ${enemy.getHeldItems()} |`; + + expect(move.calculateBattlePower, items).toHaveLastReturnedWith(1); }); it("should reset playerFaints count if we enter new trainer battle", async () => { From 6586790768e507c14995f564d6f1e9b7aef67417 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Mon, 2 Jun 2025 16:12:45 -0700 Subject: [PATCH 194/262] [Test] Fix Last Respects test --- test/moves/last_respects.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/moves/last_respects.test.ts b/test/moves/last_respects.test.ts index 4fe9864546e..e271a5dec62 100644 --- a/test/moves/last_respects.test.ts +++ b/test/moves/last_respects.test.ts @@ -172,7 +172,7 @@ describe("Moves - Last Respects", () => { const player = game.field.getPlayerPokemon(); const items = `Player items: ${player.getHeldItems()} | Enemy Items: ${enemy.getHeldItems()} |`; - expect(move.calculateBattlePower, items).toHaveLastReturnedWith(1); + expect(move.calculateBattlePower, items).toHaveLastReturnedWith(50); }); it("should reset playerFaints count if we enter new trainer battle", async () => { From a26a93098059597e779e932e636061f75a680206 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Mon, 2 Jun 2025 17:00:23 -0700 Subject: [PATCH 195/262] Fix Version Number 1.9.4 -> 1.9.5 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 66400b14459..3e82c45af62 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pokemon-rogue-battle", - "version": "1.9.4", + "version": "1.9.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pokemon-rogue-battle", - "version": "1.9.4", + "version": "1.9.5", "hasInstallScript": true, "dependencies": { "@material/material-color-utilities": "^0.2.7", diff --git a/package.json b/package.json index 7d1ba35154a..ce41dfc2a05 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.9.4", + "version": "1.9.5", "type": "module", "scripts": { "start": "vite", From 9dcb904649474b9ccec52b7d1251ee731b5edabf Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Wed, 4 Jun 2025 14:54:27 -0700 Subject: [PATCH 196/262] [Misc] Improve enum naming (#5933) * Rename `Abilities` to `AbilityId` * Rename `abilities.ts` to `ability-id.ts` * Rename `Moves` to `MoveId` * Rename `moves.ts` to `move-id.ts` * Rename `Species` to `SpeciesId` * Rename `species.ts` to `species-id.ts` * Rename `Biome` to `BiomeId` * Rename `biome.ts` to `biome-id.ts` * Replace `Abilities` with `AbilityId` in comments * Replace `Biome` with `BiomeId` in comments * Replace `Moves` with `MoveId` in comments * Replace `Species` with `SpeciesId` in comments --- src/battle-scene.ts | 120 +- src/battle.ts | 184 +- src/data/abilities/ability-class.ts | 8 +- src/data/abilities/ability.ts | 784 +- src/data/arena-tag.ts | 108 +- src/data/balance/biomes.ts | 8172 +- src/data/balance/egg-moves.ts | 1154 +- src/data/balance/passives.ts | 2170 +- src/data/balance/pokemon-evolutions.ts | 2118 +- src/data/balance/pokemon-level-moves.ts | 39722 ++--- src/data/balance/signature-species.ts | 152 +- src/data/balance/special-species-groups.ts | 64 +- src/data/balance/species-egg-tiers.ts | 1140 +- src/data/balance/starters.ts | 1142 +- src/data/balance/tms.ts | 136096 +++++++-------- src/data/battle-anims.ts | 32 +- src/data/battler-tags.ts | 354 +- src/data/challenge.ts | 34 +- src/data/custom-pokemon-data.ts | 6 +- src/data/daily-run.ts | 82 +- src/data/egg.ts | 38 +- src/data/moves/invalid-moves.ts | 482 +- src/data/moves/move.ts | 2596 +- .../encounters/a-trainers-test-encounter.ts | 12 +- .../encounters/absolute-avarice-encounter.ts | 26 +- .../an-offer-you-cant-refuse-encounter.ts | 8 +- .../encounters/bug-type-superfan-encounter.ts | 186 +- .../encounters/clowning-around-encounter.ts | 58 +- .../encounters/dancing-lessons-encounter.ts | 76 +- .../encounters/dark-deal-encounter.ts | 126 +- .../encounters/delibirdy-encounter.ts | 10 +- .../department-store-sale-encounter.ts | 4 +- .../encounters/fiery-fallout-encounter.ts | 26 +- .../encounters/fun-and-games-encounter.ts | 6 +- .../global-trade-system-encounter.ts | 60 +- .../encounters/lost-at-sea-encounter.ts | 10 +- .../encounters/mysterious-chest-encounter.ts | 10 +- .../shady-vitamin-dealer-encounter.ts | 4 +- .../slumbering-snorlax-encounter.ts | 30 +- .../teleporting-hijinks-encounter.ts | 13 +- .../the-expert-pokemon-breeder-encounter.ts | 112 +- .../the-pokemon-salesman-encounter.ts | 16 +- .../encounters/the-strong-stuff-encounter.ts | 18 +- .../the-winstrate-challenge-encounter.ts | 62 +- .../encounters/trash-to-treasure-encounter.ts | 16 +- .../encounters/uncommon-breed-encounter.ts | 8 +- .../encounters/weird-dream-encounter.ts | 98 +- .../mystery-encounter-option.ts | 4 +- .../mystery-encounter-requirements.ts | 31 +- .../mystery-encounters/mystery-encounters.ts | 228 +- .../can-learn-move-requirement.ts | 12 +- .../requirements/requirement-groups.ts | 175 +- .../utils/encounter-phase-utils.ts | 40 +- .../utils/encounter-pokemon-utils.ts | 74 +- src/data/pokemon-forms.ts | 856 +- src/data/pokemon-species.ts | 3718 +- src/data/trainers/evil-admin-trainer-pools.ts | 659 +- src/data/trainers/trainer-config.ts | 2962 +- src/data/trainers/typedefs.ts | 4 +- src/data/weather.ts | 38 +- src/enums/MoveFlags.ts | 24 +- src/enums/{abilities.ts => ability-id.ts} | 2 +- src/enums/{biome.ts => biome-id.ts} | 2 +- src/enums/{moves.ts => move-id.ts} | 2 +- src/enums/{species.ts => species-id.ts} | 2 +- src/field/arena.ts | 282 +- src/field/mystery-encounter-intro.ts | 6 +- src/field/pokemon.ts | 198 +- src/field/trainer.ts | 16 +- src/game-mode.ts | 16 +- src/loading-scene.ts | 6 +- src/modifier/modifier-type.ts | 137 +- src/modifier/modifier.ts | 44 +- src/overrides.ts | 42 +- src/phases/berry-phase.ts | 2 +- src/phases/command-phase.ts | 22 +- src/phases/encounter-phase.ts | 10 +- src/phases/enemy-command-phase.ts | 4 +- src/phases/learn-move-phase.ts | 8 +- src/phases/load-move-anim-phase.ts | 4 +- src/phases/move-effect-phase.ts | 20 +- src/phases/move-phase.ts | 34 +- src/phases/pokemon-anim-phase.ts | 4 +- src/phases/pokemon-transform-phase.ts | 4 +- src/phases/select-biome-phase.ts | 14 +- src/phases/select-starter-phase.ts | 4 +- src/phases/switch-biome-phase.ts | 6 +- src/phases/trainer-victory-phase.ts | 4 +- src/phases/turn-start-phase.ts | 4 +- src/sprites/pokemon-asset-loader.ts | 4 +- src/system/arena-data.ts | 4 +- src/system/egg-data.ts | 4 +- src/system/game-data.ts | 82 +- src/system/pokemon-data.ts | 16 +- .../version_migration/versions/v1_8_3.ts | 4 +- .../version_migration/versions/v1_9_0.ts | 4 +- src/timed-event-manager.ts | 300 +- src/ui/battle-flyout.ts | 4 +- src/ui/candy-bar.ts | 6 +- src/ui/command-ui-handler.ts | 4 +- src/ui/party-ui-handler.ts | 17 +- src/ui/pokedex-page-ui-handler.ts | 60 +- src/ui/pokedex-ui-handler.ts | 20 +- src/ui/pokemon-hatch-info-container.ts | 4 +- src/ui/run-info-ui-handler.ts | 4 +- src/ui/starter-select-ui-handler.ts | 28 +- src/ui/target-select-ui-handler.ts | 6 +- src/ui/title-ui-handler.ts | 4 +- src/utils/common.ts | 6 +- test/abilities/ability_duplication.test.ts | 22 +- test/abilities/ability_timing.test.ts | 12 +- test/abilities/analytic.test.ts | 36 +- test/abilities/arena_trap.test.ts | 40 +- test/abilities/aroma_veil.test.ts | 34 +- test/abilities/aura_break.test.ts | 38 +- test/abilities/battery.test.ts | 38 +- test/abilities/battle_bond.test.ts | 28 +- test/abilities/beast_boost.test.ts | 30 +- test/abilities/commander.test.ts | 76 +- test/abilities/competitive.test.ts | 28 +- test/abilities/contrary.test.ts | 28 +- test/abilities/corrosion.test.ts | 20 +- test/abilities/costar.test.ts | 28 +- test/abilities/cud_chew.test.ts | 92 +- test/abilities/dancer.test.ts | 44 +- test/abilities/defiant.test.ts | 28 +- test/abilities/desolate-land.test.ts | 77 +- test/abilities/disguise.test.ts | 64 +- test/abilities/dry_skin.test.ts | 48 +- test/abilities/early_bird.test.ts | 36 +- test/abilities/flash_fire.test.ts | 64 +- test/abilities/flower_gift.test.ts | 87 +- test/abilities/flower_veil.test.ts | 110 +- test/abilities/forecast.test.ts | 116 +- test/abilities/friend_guard.test.ts | 78 +- test/abilities/good_as_gold.test.ts | 82 +- test/abilities/gorilla_tactics.test.ts | 38 +- test/abilities/gulp_missile.test.ts | 110 +- test/abilities/harvest.test.ts | 122 +- test/abilities/healer.test.ts | 44 +- test/abilities/heatproof.test.ts | 28 +- test/abilities/honey_gather.test.ts | 28 +- test/abilities/hustle.test.ts | 36 +- test/abilities/hyper_cutter.test.ts | 28 +- test/abilities/ice_face.test.ts | 88 +- test/abilities/illuminate.test.ts | 14 +- test/abilities/illusion.test.ts | 64 +- test/abilities/immunity.test.ts | 28 +- test/abilities/imposter.test.ts | 58 +- test/abilities/infiltrator.test.ts | 52 +- test/abilities/insomnia.test.ts | 28 +- test/abilities/intimidate.test.ts | 38 +- test/abilities/intrepid_sword.test.ts | 12 +- test/abilities/libero.test.ts | 160 +- test/abilities/lightningrod.test.ts | 62 +- test/abilities/limber.test.ts | 28 +- test/abilities/magic_bounce.test.ts | 216 +- test/abilities/magic_guard.test.ts | 136 +- test/abilities/magma_armor.test.ts | 28 +- test/abilities/mimicry.test.ts | 48 +- test/abilities/mirror_armor.test.ts | 174 +- test/abilities/mold_breaker.test.ts | 26 +- test/abilities/moody.test.ts | 22 +- test/abilities/moxie.test.ts | 24 +- test/abilities/mummy.test.ts | 30 +- test/abilities/mycelium_might.test.ts | 30 +- test/abilities/neutralizing_gas.test.ts | 96 +- test/abilities/no_guard.test.ts | 20 +- .../abilities/normal-move-type-change.test.ts | 64 +- test/abilities/normalize.test.ts | 60 +- test/abilities/oblivious.test.ts | 42 +- test/abilities/own_tempo.test.ts | 28 +- test/abilities/parental_bond.test.ts | 158 +- test/abilities/pastel_veil.test.ts | 32 +- test/abilities/perish_body.test.ts | 54 +- test/abilities/power_construct.test.ts | 28 +- test/abilities/power_spot.test.ts | 38 +- test/abilities/protean.test.ts | 160 +- test/abilities/protosynthesis.test.ts | 24 +- test/abilities/quick_draw.test.ts | 34 +- test/abilities/sand_spit.test.ts | 30 +- test/abilities/sand_veil.test.ts | 28 +- test/abilities/sap_sipper.test.ts | 50 +- test/abilities/schooling.test.ts | 18 +- test/abilities/screen_cleaner.test.ts | 28 +- test/abilities/seed_sower.test.ts | 30 +- test/abilities/serene_grace.test.ts | 22 +- test/abilities/sheer_force.test.ts | 68 +- test/abilities/shield_dust.test.ts | 20 +- test/abilities/shields_down.test.ts | 102 +- test/abilities/simple.test.ts | 16 +- test/abilities/speed_boost.test.ts | 40 +- test/abilities/stakeout.test.ts | 40 +- test/abilities/stall.test.ts | 28 +- test/abilities/steely_spirit.test.ts | 48 +- test/abilities/storm_drain.test.ts | 62 +- test/abilities/sturdy.test.ts | 26 +- test/abilities/super_luck.test.ts | 20 +- test/abilities/supreme_overlord.test.ts | 66 +- test/abilities/sweet_veil.test.ts | 48 +- test/abilities/synchronize.test.ts | 34 +- test/abilities/tera_shell.test.ts | 46 +- test/abilities/thermal_exchange.test.ts | 28 +- test/abilities/trace.test.ts | 28 +- test/abilities/unburden.test.ts | 138 +- test/abilities/unseen_fist.test.ts | 34 +- test/abilities/victory_star.test.ts | 26 +- test/abilities/vital_spirit.test.ts | 28 +- test/abilities/volt_absorb.test.ts | 36 +- test/abilities/wandering_spirit.test.ts | 40 +- test/abilities/water_bubble.test.ts | 28 +- test/abilities/water_veil.test.ts | 28 +- test/abilities/wimp_out.test.ts | 264 +- test/abilities/wind_power.test.ts | 40 +- test/abilities/wind_rider.test.ts | 42 +- test/abilities/wonder_skin.test.ts | 40 +- test/abilities/zen_mode.test.ts | 36 +- test/abilities/zero_to_hero.test.ts | 30 +- test/arena/arena_gravity.test.ts | 58 +- test/arena/grassy_terrain.test.ts | 34 +- test/arena/weather_fog.test.ts | 22 +- test/arena/weather_hail.test.ts | 24 +- test/arena/weather_sandstorm.test.ts | 36 +- test/arena/weather_strong_winds.test.ts | 42 +- test/battle/ability_swap.test.ts | 44 +- test/battle/battle-order.test.ts | 40 +- test/battle/battle.test.ts | 120 +- test/battle/damage_calculation.test.ts | 54 +- test/battle/double_battle.test.ts | 28 +- test/battle/inverse_battle.test.ts | 74 +- test/battle/special_battle.test.ts | 34 +- test/battlerTags/substitute.test.ts | 26 +- test/boss-pokemon.test.ts | 50 +- test/daily_mode.test.ts | 18 +- test/data/status_effect.test.ts | 52 +- test/eggs/egg.test.ts | 36 +- test/eggs/manaphy-egg.test.ts | 18 +- test/endless_boss.test.ts | 34 +- test/enemy_command.test.ts | 22 +- test/escape-calculations.test.ts | 18 +- test/evolution.test.ts | 54 +- test/field/pokemon.test.ts | 50 +- test/final_boss.test.ts | 58 +- test/imports.test.ts | 2 +- test/internals.test.ts | 14 +- test/items/dire_hit.test.ts | 18 +- .../double_battle_chance_booster.test.ts | 10 +- test/items/eviolite.test.ts | 24 +- test/items/exp_booster.test.ts | 6 +- test/items/grip_claw.test.ts | 36 +- test/items/leek.test.ts | 38 +- test/items/leftovers.test.ts | 20 +- test/items/light_ball.test.ts | 12 +- test/items/lock_capsule.test.ts | 8 +- test/items/metal_powder.test.ts | 12 +- test/items/multi_lens.test.ts | 96 +- test/items/mystical_rock.test.ts | 22 +- test/items/quick_powder.test.ts | 12 +- test/items/reviver_seed.test.ts | 88 +- test/items/scope_lens.test.ts | 14 +- test/items/temp_stat_stage_booster.test.ts | 40 +- test/items/thick_club.test.ts | 20 +- test/items/toxic_orb.test.ts | 20 +- test/moves/after_you.test.ts | 30 +- test/moves/alluring_voice.test.ts | 18 +- test/moves/aromatherapy.test.ts | 32 +- test/moves/assist.test.ts | 60 +- test/moves/astonish.test.ts | 22 +- test/moves/aurora_veil.test.ts | 46 +- test/moves/autotomize.test.ts | 38 +- test/moves/baddy_bad.test.ts | 22 +- test/moves/baneful_bunker.test.ts | 28 +- test/moves/baton_pass.test.ts | 48 +- test/moves/beak_blast.test.ts | 54 +- test/moves/beat_up.test.ts | 42 +- test/moves/belly_drum.test.ts | 32 +- test/moves/burning_jealousy.test.ts | 40 +- test/moves/camouflage.test.ts | 20 +- test/moves/ceaseless_edge.test.ts | 32 +- test/moves/chilly_reception.test.ts | 56 +- test/moves/chloroblast.test.ts | 20 +- test/moves/clangorous_soul.test.ts | 28 +- test/moves/copycat.test.ts | 42 +- test/moves/crafty_shield.test.ts | 44 +- test/moves/defog.test.ts | 32 +- test/moves/destiny_bond.test.ts | 58 +- test/moves/diamond_storm.test.ts | 20 +- test/moves/dig.test.ts | 44 +- test/moves/disable.test.ts | 70 +- test/moves/dive.test.ts | 52 +- test/moves/doodle.test.ts | 40 +- test/moves/double_team.test.ts | 20 +- test/moves/dragon_cheer.test.ts | 34 +- test/moves/dragon_rage.test.ts | 36 +- test/moves/dragon_tail.test.ts | 104 +- test/moves/dynamax_cannon.test.ts | 32 +- test/moves/effectiveness.test.ts | 48 +- test/moves/electrify.test.ts | 24 +- test/moves/electro_shot.test.ts | 30 +- test/moves/encore.test.ts | 54 +- test/moves/endure.test.ts | 44 +- test/moves/entrainment.test.ts | 28 +- test/moves/fairy_lock.test.ts | 96 +- test/moves/fake_out.test.ts | 34 +- test/moves/false_swipe.test.ts | 24 +- test/moves/fell_stinger.test.ts | 78 +- test/moves/fillet_away.test.ts | 28 +- test/moves/fissure.test.ts | 28 +- test/moves/flame_burst.test.ts | 46 +- test/moves/flower_shield.test.ts | 42 +- test/moves/fly.test.ts | 50 +- test/moves/focus_punch.test.ts | 42 +- test/moves/follow_me.test.ts | 62 +- test/moves/foresight.test.ts | 26 +- test/moves/forests_curse.test.ts | 22 +- test/moves/freeze_dry.test.ts | 104 +- test/moves/freezy_frost.test.ts | 42 +- test/moves/fusion_bolt.test.ts | 16 +- test/moves/fusion_flare.test.ts | 12 +- test/moves/fusion_flare_bolt.test.ts | 28 +- test/moves/future_sight.test.ts | 20 +- test/moves/gastro_acid.test.ts | 42 +- test/moves/geomancy.test.ts | 26 +- test/moves/gigaton_hammer.test.ts | 20 +- test/moves/glaive_rush.test.ts | 62 +- test/moves/growth.test.ts | 18 +- test/moves/grudge.test.ts | 50 +- test/moves/guard_split.test.ts | 28 +- test/moves/guard_swap.test.ts | 20 +- test/moves/hard_press.test.ts | 34 +- test/moves/haze.test.ts | 24 +- test/moves/heal_bell.test.ts | 32 +- test/moves/heal_block.test.ts | 52 +- test/moves/heart_swap.test.ts | 20 +- test/moves/hyper_beam.test.ts | 24 +- test/moves/imprison.test.ts | 44 +- test/moves/instruct.test.ts | 328 +- test/moves/jaw_lock.test.ts | 42 +- test/moves/lash_out.test.ts | 24 +- test/moves/last-resort.test.ts | 90 +- test/moves/last_respects.test.ts | 82 +- test/moves/light_screen.test.ts | 36 +- test/moves/lucky_chant.test.ts | 40 +- test/moves/lunar_blessing.test.ts | 28 +- test/moves/lunar_dance.test.ts | 32 +- test/moves/magic_coat.test.ts | 182 +- test/moves/magnet_rise.test.ts | 16 +- test/moves/make_it_rain.test.ts | 36 +- test/moves/mat_block.test.ts | 38 +- test/moves/metal_burst.test.ts | 36 +- test/moves/metronome.test.ts | 44 +- test/moves/miracle_eye.test.ts | 18 +- test/moves/mirror_move.test.ts | 44 +- test/moves/mist.test.ts | 22 +- test/moves/moongeist_beam.test.ts | 30 +- test/moves/multi_target.test.ts | 38 +- test/moves/nightmare.test.ts | 20 +- test/moves/obstruct.test.ts | 34 +- test/moves/octolock.test.ts | 56 +- test/moves/order_up.test.ts | 30 +- test/moves/parting_shot.test.ts | 78 +- test/moves/plasma_fists.test.ts | 36 +- test/moves/pledge_moves.test.ts | 120 +- test/moves/pollen_puff.test.ts | 30 +- test/moves/powder.test.ts | 126 +- test/moves/power_shift.test.ts | 20 +- test/moves/power_split.test.ts | 28 +- test/moves/power_swap.test.ts | 20 +- test/moves/power_trick.test.ts | 38 +- test/moves/protect.test.ts | 44 +- test/moves/psycho_shift.test.ts | 20 +- test/moves/purify.test.ts | 16 +- test/moves/quash.test.ts | 64 +- test/moves/quick_guard.test.ts | 44 +- test/moves/rage_fist.test.ts | 78 +- test/moves/rage_powder.test.ts | 34 +- test/moves/reflect.test.ts | 40 +- test/moves/reflect_type.test.ts | 28 +- test/moves/relic_song.test.ts | 30 +- test/moves/retaliate.test.ts | 18 +- test/moves/revival_blessing.test.ts | 62 +- test/moves/role_play.test.ts | 28 +- test/moves/rollout.test.ts | 22 +- test/moves/roost.test.ts | 54 +- test/moves/round.test.ts | 28 +- test/moves/safeguard.test.ts | 52 +- test/moves/scale_shot.test.ts | 28 +- test/moves/secret_power.test.ts | 50 +- test/moves/shed_tail.test.ts | 22 +- test/moves/shell_side_arm.test.ts | 34 +- test/moves/shell_trap.test.ts | 48 +- test/moves/simple_beam.test.ts | 22 +- test/moves/sketch.test.ts | 56 +- test/moves/skill_swap.test.ts | 32 +- test/moves/sleep_talk.test.ts | 36 +- test/moves/solar_beam.test.ts | 32 +- test/moves/sparkly_swirl.test.ts | 30 +- test/moves/spectral_thief.test.ts | 52 +- test/moves/speed_swap.test.ts | 20 +- test/moves/spikes.test.ts | 42 +- test/moves/spit_up.test.ts | 46 +- test/moves/spotlight.test.ts | 32 +- test/moves/steamroller.test.ts | 18 +- test/moves/stockpile.test.ts | 28 +- test/moves/struggle.test.ts | 28 +- test/moves/substitute.test.ts | 224 +- test/moves/swallow.test.ts | 46 +- test/moves/synchronoise.test.ts | 20 +- test/moves/syrup_bomb.test.ts | 34 +- test/moves/tackle.test.ts | 20 +- test/moves/tail_whip.test.ts | 20 +- test/moves/tailwind.test.ts | 34 +- test/moves/tar_shot.test.ts | 44 +- test/moves/taunt.test.ts | 28 +- test/moves/telekinesis.test.ts | 68 +- test/moves/tera_blast.test.ts | 68 +- test/moves/tera_starstorm.test.ts | 38 +- test/moves/thousand_arrows.test.ts | 32 +- test/moves/throat_chop.test.ts | 22 +- test/moves/thunder_wave.test.ts | 32 +- test/moves/tidy_up.test.ts | 50 +- test/moves/torment.test.ts | 36 +- test/moves/toxic.test.ts | 46 +- test/moves/toxic_spikes.test.ts | 54 +- test/moves/transform.test.ts | 62 +- test/moves/trick_or_treat.test.ts | 22 +- test/moves/triple_arrows.test.ts | 28 +- test/moves/u_turn.test.ts | 42 +- test/moves/upper_hand.test.ts | 40 +- test/moves/whirlwind.test.ts | 98 +- test/moves/wide_guard.test.ts | 44 +- test/moves/will_o_wisp.test.ts | 22 +- .../a-trainers-test-encounter.test.ts | 12 +- .../absolute-avarice-encounter.test.ts | 28 +- ...an-offer-you-cant-refuse-encounter.test.ts | 36 +- .../berries-abound-encounter.test.ts | 16 +- .../bug-type-superfan-encounter.test.ts | 225 +- .../clowning-around-encounter.test.ts | 82 +- .../dancing-lessons-encounter.test.ts | 36 +- .../encounters/delibirdy-encounter.test.ts | 10 +- .../department-store-sale-encounter.test.ts | 14 +- .../encounters/field-trip-encounter.test.ts | 14 +- .../fiery-fallout-encounter.test.ts | 40 +- .../fight-or-flight-encounter.test.ts | 14 +- .../fun-and-games-encounter.test.ts | 26 +- .../global-trade-system-encounter.test.ts | 16 +- .../encounters/lost-at-sea-encounter.test.ts | 28 +- .../mysterious-challengers-encounter.test.ts | 14 +- .../encounters/part-timer-encounter.test.ts | 18 +- .../encounters/safari-zone.test.ts | 20 +- .../teleporting-hijinks-encounter.test.ts | 35 +- .../the-expert-breeder-encounter.test.ts | 14 +- .../the-pokemon-salesman-encounter.test.ts | 14 +- .../the-strong-stuff-encounter.test.ts | 42 +- .../the-winstrate-challenge-encounter.test.ts | 68 +- .../trash-to-treasure-encounter.test.ts | 30 +- .../uncommon-breed-encounter.test.ts | 24 +- .../encounters/weird-dream-encounter.test.ts | 10 +- .../mystery-encounter-utils.test.ts | 58 +- .../mystery-encounter.test.ts | 6 +- test/phases/form-change-phase.test.ts | 20 +- test/phases/frenzy-move-reset.test.ts | 18 +- test/phases/game-over-phase.test.ts | 28 +- test/phases/learn-move-phase.test.ts | 26 +- test/phases/mystery-encounter-phase.test.ts | 14 +- test/phases/select-modifier-phase.test.ts | 46 +- test/reload.test.ts | 22 +- test/system/game_data.test.ts | 10 +- test/testUtils/gameManager.ts | 6 +- test/testUtils/gameManagerUtils.ts | 16 +- test/testUtils/helpers/challengeModeHelper.ts | 6 +- test/testUtils/helpers/classicModeHelper.ts | 6 +- test/testUtils/helpers/field-helper.ts | 4 +- test/testUtils/helpers/moveHelper.ts | 18 +- test/testUtils/helpers/overridesHelper.ts | 94 +- test/ui/battle_info.test.ts | 18 +- test/ui/pokedex.test.ts | 106 +- test/ui/starter-select.test.ts | 26 +- test/ui/transfer-item.test.ts | 14 +- test/ui/type-hints.test.ts | 34 +- 480 files changed, 112129 insertions(+), 111981 deletions(-) rename src/enums/{abilities.ts => ability-id.ts} (99%) rename src/enums/{biome.ts => biome-id.ts} (95%) rename src/enums/{moves.ts => move-id.ts} (99%) rename src/enums/{species.ts => species-id.ts} (99%) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index cbaf07d579c..34d26b3975c 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -129,12 +129,12 @@ import { ArenaFlyout } from "#app/ui/arena-flyout"; import { EaseType } from "#enums/ease-type"; import { BattleSpec } from "#enums/battle-spec"; import { BattleStyle } from "#enums/battle-style"; -import { Biome } from "#enums/biome"; +import { BiomeId } from "#enums/biome-id"; import type { ExpNotification } from "#enums/exp-notification"; import { MoneyFormat } from "#enums/money-format"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { PlayerGender } from "#enums/player-gender"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { UiTheme } from "#enums/ui-theme"; import { TimedEventManager } from "#app/timed-event-manager"; import type { PokemonAnimType } from "#enums/pokemon-anim-type"; @@ -707,14 +707,14 @@ export default class BattleScene extends SceneBase { ui.setup(); - const defaultMoves = [Moves.TACKLE, Moves.TAIL_WHIP, Moves.FOCUS_ENERGY, Moves.STRUGGLE]; + const defaultMoves = [MoveId.TACKLE, MoveId.TAIL_WHIP, MoveId.FOCUS_ENERGY, MoveId.STRUGGLE]; Promise.all([ Promise.all(loadPokemonAssets), initCommonAnims().then(() => loadCommonAnimAssets(true)), - Promise.all([Moves.TACKLE, Moves.TAIL_WHIP, Moves.FOCUS_ENERGY, Moves.STRUGGLE].map(m => initMoveAnim(m))).then( - () => loadMoveAnimAssets(defaultMoves, true), - ), + Promise.all( + [MoveId.TACKLE, MoveId.TAIL_WHIP, MoveId.FOCUS_ENERGY, MoveId.STRUGGLE].map(m => initMoveAnim(m)), + ).then(() => loadMoveAnimAssets(defaultMoves, true)), this.initStarterColors(), ]).then(() => { this.pushPhase(new LoginPhase()); @@ -1225,7 +1225,7 @@ export default class BattleScene extends SceneBase { [this.luckLabelText, this.luckText].map(t => t.setVisible(false)); - this.newArena(Overrides.STARTING_BIOME_OVERRIDE || Biome.TOWN); + this.newArena(Overrides.STARTING_BIOME_OVERRIDE || BiomeId.TOWN); this.field.setVisible(true); @@ -1501,7 +1501,7 @@ export default class BattleScene extends SceneBase { pokemon.resetTera(); applyPostBattleInitAbAttrs(PostBattleInitAbAttr, pokemon); if ( - pokemon.hasSpecies(Species.TERAPAGOS) || + pokemon.hasSpecies(SpeciesId.TERAPAGOS) || (this.gameMode.isClassic && this.currentBattle.waveIndex > 180 && this.currentBattle.waveIndex <= 190) ) { this.arena.playerTerasUsed = 0; @@ -1532,8 +1532,8 @@ export default class BattleScene extends SceneBase { return this.currentBattle; } - newArena(biome: Biome, playerFaints?: number): Arena { - this.arena = new Arena(biome, Biome[biome].toLowerCase(), playerFaints); + newArena(biome: BiomeId, playerFaints?: number): Arena { + this.arena = new Arena(biome, BiomeId[biome].toLowerCase(), playerFaints); this.eventTarget.dispatchEvent(new NewArenaEvent()); this.arenaBg.pipelineData = { @@ -1599,7 +1599,7 @@ export default class BattleScene extends SceneBase { !isNullOrUndefined(this.currentBattle.trainer) && this.currentBattle.trainer.config.hasSpecialtyType() ) { - if (species.speciesId === Species.WORMADAM) { + if (species.speciesId === SpeciesId.WORMADAM) { switch (this.currentBattle.trainer.config.specialtyType) { case PokemonType.GROUND: return 1; // Sandy Cloak @@ -1609,7 +1609,7 @@ export default class BattleScene extends SceneBase { return 0; // Plant Cloak } } - if (species.speciesId === Species.ROTOM) { + if (species.speciesId === SpeciesId.ROTOM) { switch (this.currentBattle.trainer.config.specialtyType) { case PokemonType.FLYING: return 4; // Fan Rotom @@ -1625,7 +1625,7 @@ export default class BattleScene extends SceneBase { return 3; // Frost Rotom } } - if (species.speciesId === Species.ORICORIO) { + if (species.speciesId === SpeciesId.ORICORIO) { switch (this.currentBattle.trainer.config.specialtyType) { case PokemonType.GHOST: return 3; // Sensu Style @@ -1637,7 +1637,7 @@ export default class BattleScene extends SceneBase { return 2; // Pa'u Style } } - if (species.speciesId === Species.PALDEA_TAUROS) { + if (species.speciesId === SpeciesId.PALDEA_TAUROS) { switch (this.currentBattle.trainer.config.specialtyType) { case PokemonType.FIRE: return 1; // Blaze Breed @@ -1645,41 +1645,41 @@ export default class BattleScene extends SceneBase { return 2; // Aqua Breed } } - if (species.speciesId === Species.SILVALLY || species.speciesId === Species.ARCEUS) { + if (species.speciesId === SpeciesId.SILVALLY || species.speciesId === SpeciesId.ARCEUS) { // Would probably never happen, but might as well return this.currentBattle.trainer.config.specialtyType; } } switch (species.speciesId) { - case Species.UNOWN: - case Species.SHELLOS: - case Species.GASTRODON: - case Species.BASCULIN: - case Species.DEERLING: - case Species.SAWSBUCK: - case Species.SCATTERBUG: - case Species.SPEWPA: - case Species.VIVILLON: - case Species.FLABEBE: - case Species.FLOETTE: - case Species.FLORGES: - case Species.FURFROU: - case Species.PUMPKABOO: - case Species.GOURGEIST: - case Species.ORICORIO: - case Species.MAGEARNA: - case Species.ZARUDE: - case Species.SQUAWKABILLY: - case Species.TATSUGIRI: - case Species.PALDEA_TAUROS: + case SpeciesId.UNOWN: + case SpeciesId.SHELLOS: + case SpeciesId.GASTRODON: + case SpeciesId.BASCULIN: + case SpeciesId.DEERLING: + case SpeciesId.SAWSBUCK: + case SpeciesId.SCATTERBUG: + case SpeciesId.SPEWPA: + case SpeciesId.VIVILLON: + case SpeciesId.FLABEBE: + case SpeciesId.FLOETTE: + case SpeciesId.FLORGES: + case SpeciesId.FURFROU: + case SpeciesId.PUMPKABOO: + case SpeciesId.GOURGEIST: + case SpeciesId.ORICORIO: + case SpeciesId.MAGEARNA: + case SpeciesId.ZARUDE: + case SpeciesId.SQUAWKABILLY: + case SpeciesId.TATSUGIRI: + case SpeciesId.PALDEA_TAUROS: return randSeedInt(species.forms.length); - case Species.PIKACHU: + case SpeciesId.PIKACHU: if (this.currentBattle?.battleType === BattleType.TRAINER && this.currentBattle?.waveIndex < 30) { return 0; // Ban Cosplay and Partner Pika from Trainers before wave 30 } return randSeedInt(8); - case Species.EEVEE: + case SpeciesId.EEVEE: if ( this.currentBattle?.battleType === BattleType.TRAINER && this.currentBattle?.waveIndex < 30 && @@ -1688,27 +1688,27 @@ export default class BattleScene extends SceneBase { return 0; // No Partner Eevee for Wave 12 Preschoolers } return randSeedInt(2); - case Species.FROAKIE: - case Species.FROGADIER: - case Species.GRENINJA: + case SpeciesId.FROAKIE: + case SpeciesId.FROGADIER: + case SpeciesId.GRENINJA: if (this.currentBattle?.battleType === BattleType.TRAINER && !isEggPhase) { return 0; // Don't give trainers Battle Bond Greninja, Froakie or Frogadier } return randSeedInt(2); - case Species.URSHIFU: + case SpeciesId.URSHIFU: return randSeedInt(2); - case Species.ZYGARDE: + case SpeciesId.ZYGARDE: return randSeedInt(4); - case Species.MINIOR: + case SpeciesId.MINIOR: return randSeedInt(7); - case Species.ALCREMIE: + case SpeciesId.ALCREMIE: return randSeedInt(9); - case Species.MEOWSTIC: - case Species.INDEEDEE: - case Species.BASCULEGION: - case Species.OINKOLOGNE: + case SpeciesId.MEOWSTIC: + case SpeciesId.INDEEDEE: + case SpeciesId.BASCULEGION: + case SpeciesId.OINKOLOGNE: return gender === Gender.FEMALE ? 1 : 0; - case Species.TOXTRICITY: { + case SpeciesId.TOXTRICITY: { const lowkeyNatures = [ Nature.LONELY, Nature.BOLD, @@ -1728,7 +1728,7 @@ export default class BattleScene extends SceneBase { } return 0; } - case Species.GIMMIGHOUL: + case SpeciesId.GIMMIGHOUL: // Chest form can only be found in Mysterious Chest Encounter, if this is a game mode with MEs if (this.gameMode.hasMysteryEncounters && !isEggPhase) { return 1; // Wandering form @@ -1738,10 +1738,10 @@ export default class BattleScene extends SceneBase { if (ignoreArena) { switch (species.speciesId) { - case Species.BURMY: - case Species.WORMADAM: - case Species.ROTOM: - case Species.LYCANROC: + case SpeciesId.BURMY: + case SpeciesId.WORMADAM: + case SpeciesId.ROTOM: + case SpeciesId.LYCANROC: return randSeedInt(species.forms.length); } return 0; @@ -2172,10 +2172,10 @@ export default class BattleScene extends SceneBase { return filteredSpecies[randSeedInt(filteredSpecies.length)]; } - generateRandomBiome(waveIndex: number): Biome { + generateRandomBiome(waveIndex: number): BiomeId { const relWave = waveIndex % 250; - const biomes = getEnumValues(Biome).filter(b => b !== Biome.TOWN && b !== Biome.END); - const maxDepth = biomeDepths[Biome.END][0] - 2; + const biomes = getEnumValues(BiomeId).filter(b => b !== BiomeId.TOWN && b !== BiomeId.END); + const maxDepth = biomeDepths[BiomeId.END][0] - 2; const depthWeights = new Array(maxDepth + 1) .fill(null) .map((_, i: number) => ((1 - Math.min(Math.abs(i / (maxDepth - 1) - relWave / 250) + 0.25, 1)) / 0.75) * 250); @@ -3475,7 +3475,7 @@ export default class BattleScene extends SceneBase { fc => fc.findTrigger(formChangeTriggerType) && fc.canChange(pokemon), ); let matchingFormChange: SpeciesFormChange | null; - if (pokemon.species.speciesId === Species.NECROZMA && matchingFormChangeOpts.length > 1) { + if (pokemon.species.speciesId === SpeciesId.NECROZMA && matchingFormChangeOpts.length > 1) { // Ultra Necrozma is changing its form back, so we need to figure out into which form it devolves. const formChangeItemModifiers = ( this.findModifiers( diff --git a/src/battle.ts b/src/battle.ts index 07e520d6bc0..8e63a680c06 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -19,10 +19,10 @@ import type { EnemyPokemon, PlayerPokemon, TurnMove } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattleSpec } from "#enums/battle-spec"; -import type { Moves } from "#enums/moves"; +import type { MoveId } from "#enums/move-id"; import { PlayerGender } from "#enums/player-gender"; import { MusicPreference } from "#app/system/settings/settings"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { TrainerType } from "#enums/trainer-type"; import i18next from "#app/plugins/i18n"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; @@ -78,7 +78,7 @@ export default class Battle { public battleScore = 0; public postBattleLoot: PokemonHeldItemModifier[] = []; public escapeAttempts = 0; - public lastMove: Moves; + public lastMove: MoveId; public battleSeed: string = randomString(16, true); private battleSeedState: string | null = null; public moneyScattered = 0; @@ -264,14 +264,14 @@ export default class Battle { if (pokemon.species.legendary || pokemon.species.subLegendary || pokemon.species.mythical) { if (globalScene.musicPreference === MusicPreference.GENFIVE) { switch (pokemon.species.speciesId) { - case Species.REGIROCK: - case Species.REGICE: - case Species.REGISTEEL: - case Species.REGIGIGAS: - case Species.REGIDRAGO: - case Species.REGIELEKI: + case SpeciesId.REGIROCK: + case SpeciesId.REGICE: + case SpeciesId.REGISTEEL: + case SpeciesId.REGIGIGAS: + case SpeciesId.REGIDRAGO: + case SpeciesId.REGIELEKI: return "battle_legendary_regis_g5"; - case Species.KYUREM: + case SpeciesId.KYUREM: return "battle_legendary_kyurem"; default: if (pokemon.species.legendary) { @@ -282,80 +282,80 @@ export default class Battle { } if (globalScene.musicPreference === MusicPreference.ALLGENS) { switch (pokemon.species.speciesId) { - case Species.ARTICUNO: - case Species.ZAPDOS: - case Species.MOLTRES: - case Species.MEWTWO: - case Species.MEW: + case SpeciesId.ARTICUNO: + case SpeciesId.ZAPDOS: + case SpeciesId.MOLTRES: + case SpeciesId.MEWTWO: + case SpeciesId.MEW: return "battle_legendary_kanto"; - case Species.RAIKOU: + case SpeciesId.RAIKOU: return "battle_legendary_raikou"; - case Species.ENTEI: + case SpeciesId.ENTEI: return "battle_legendary_entei"; - case Species.SUICUNE: + case SpeciesId.SUICUNE: return "battle_legendary_suicune"; - case Species.LUGIA: + case SpeciesId.LUGIA: return "battle_legendary_lugia"; - case Species.HO_OH: + case SpeciesId.HO_OH: return "battle_legendary_ho_oh"; - case Species.REGIROCK: - case Species.REGICE: - case Species.REGISTEEL: - case Species.REGIGIGAS: - case Species.REGIDRAGO: - case Species.REGIELEKI: + case SpeciesId.REGIROCK: + case SpeciesId.REGICE: + case SpeciesId.REGISTEEL: + case SpeciesId.REGIGIGAS: + case SpeciesId.REGIDRAGO: + case SpeciesId.REGIELEKI: return "battle_legendary_regis_g6"; - case Species.GROUDON: - case Species.KYOGRE: + case SpeciesId.GROUDON: + case SpeciesId.KYOGRE: return "battle_legendary_gro_kyo"; - case Species.RAYQUAZA: + case SpeciesId.RAYQUAZA: return "battle_legendary_rayquaza"; - case Species.DEOXYS: + case SpeciesId.DEOXYS: return "battle_legendary_deoxys"; - case Species.UXIE: - case Species.MESPRIT: - case Species.AZELF: + case SpeciesId.UXIE: + case SpeciesId.MESPRIT: + case SpeciesId.AZELF: return "battle_legendary_lake_trio"; - case Species.HEATRAN: - case Species.CRESSELIA: - case Species.DARKRAI: - case Species.SHAYMIN: + case SpeciesId.HEATRAN: + case SpeciesId.CRESSELIA: + case SpeciesId.DARKRAI: + case SpeciesId.SHAYMIN: return "battle_legendary_sinnoh"; - case Species.DIALGA: - case Species.PALKIA: + case SpeciesId.DIALGA: + case SpeciesId.PALKIA: if (pokemon.species.getFormSpriteKey(pokemon.formIndex) === SpeciesFormKey.ORIGIN) { return "battle_legendary_origin_forme"; } return "battle_legendary_dia_pal"; - case Species.GIRATINA: + case SpeciesId.GIRATINA: return "battle_legendary_giratina"; - case Species.ARCEUS: + case SpeciesId.ARCEUS: return "battle_legendary_arceus"; - case Species.COBALION: - case Species.TERRAKION: - case Species.VIRIZION: - case Species.KELDEO: - case Species.TORNADUS: - case Species.LANDORUS: - case Species.THUNDURUS: - case Species.MELOETTA: - case Species.GENESECT: + case SpeciesId.COBALION: + case SpeciesId.TERRAKION: + case SpeciesId.VIRIZION: + case SpeciesId.KELDEO: + case SpeciesId.TORNADUS: + case SpeciesId.LANDORUS: + case SpeciesId.THUNDURUS: + case SpeciesId.MELOETTA: + case SpeciesId.GENESECT: return "battle_legendary_unova"; - case Species.KYUREM: + case SpeciesId.KYUREM: return "battle_legendary_kyurem"; - case Species.XERNEAS: - case Species.YVELTAL: - case Species.ZYGARDE: + case SpeciesId.XERNEAS: + case SpeciesId.YVELTAL: + case SpeciesId.ZYGARDE: return "battle_legendary_xern_yvel"; - case Species.TAPU_KOKO: - case Species.TAPU_LELE: - case Species.TAPU_BULU: - case Species.TAPU_FINI: + case SpeciesId.TAPU_KOKO: + case SpeciesId.TAPU_LELE: + case SpeciesId.TAPU_BULU: + case SpeciesId.TAPU_FINI: return "battle_legendary_tapu"; - case Species.SOLGALEO: - case Species.LUNALA: + case SpeciesId.SOLGALEO: + case SpeciesId.LUNALA: return "battle_legendary_sol_lun"; - case Species.NECROZMA: + case SpeciesId.NECROZMA: switch (pokemon.getFormKey()) { case "dusk-mane": case "dawn-wings": @@ -365,50 +365,50 @@ export default class Battle { default: return "battle_legendary_sol_lun"; } - case Species.NIHILEGO: - case Species.PHEROMOSA: - case Species.BUZZWOLE: - case Species.XURKITREE: - case Species.CELESTEELA: - case Species.KARTANA: - case Species.GUZZLORD: - case Species.POIPOLE: - case Species.NAGANADEL: - case Species.STAKATAKA: - case Species.BLACEPHALON: + case SpeciesId.NIHILEGO: + case SpeciesId.PHEROMOSA: + case SpeciesId.BUZZWOLE: + case SpeciesId.XURKITREE: + case SpeciesId.CELESTEELA: + case SpeciesId.KARTANA: + case SpeciesId.GUZZLORD: + case SpeciesId.POIPOLE: + case SpeciesId.NAGANADEL: + case SpeciesId.STAKATAKA: + case SpeciesId.BLACEPHALON: return "battle_legendary_ub"; - case Species.ZACIAN: - case Species.ZAMAZENTA: + case SpeciesId.ZACIAN: + case SpeciesId.ZAMAZENTA: return "battle_legendary_zac_zam"; - case Species.GLASTRIER: - case Species.SPECTRIER: + case SpeciesId.GLASTRIER: + case SpeciesId.SPECTRIER: return "battle_legendary_glas_spec"; - case Species.CALYREX: + case SpeciesId.CALYREX: if (pokemon.getFormKey() === "ice" || pokemon.getFormKey() === "shadow") { return "battle_legendary_riders"; } return "battle_legendary_calyrex"; - case Species.GALAR_ARTICUNO: - case Species.GALAR_ZAPDOS: - case Species.GALAR_MOLTRES: + case SpeciesId.GALAR_ARTICUNO: + case SpeciesId.GALAR_ZAPDOS: + case SpeciesId.GALAR_MOLTRES: return "battle_legendary_birds_galar"; - case Species.WO_CHIEN: - case Species.CHIEN_PAO: - case Species.TING_LU: - case Species.CHI_YU: + case SpeciesId.WO_CHIEN: + case SpeciesId.CHIEN_PAO: + case SpeciesId.TING_LU: + case SpeciesId.CHI_YU: return "battle_legendary_ruinous"; - case Species.KORAIDON: - case Species.MIRAIDON: + case SpeciesId.KORAIDON: + case SpeciesId.MIRAIDON: return "battle_legendary_kor_mir"; - case Species.OKIDOGI: - case Species.MUNKIDORI: - case Species.FEZANDIPITI: + case SpeciesId.OKIDOGI: + case SpeciesId.MUNKIDORI: + case SpeciesId.FEZANDIPITI: return "battle_legendary_loyal_three"; - case Species.OGERPON: + case SpeciesId.OGERPON: return "battle_legendary_ogerpon"; - case Species.TERAPAGOS: + case SpeciesId.TERAPAGOS: return "battle_legendary_terapagos"; - case Species.PECHARUNT: + case SpeciesId.PECHARUNT: return "battle_legendary_pecharunt"; default: if (pokemon.species.legendary) { diff --git a/src/data/abilities/ability-class.ts b/src/data/abilities/ability-class.ts index 387c5fb328b..9da83a32c4d 100644 --- a/src/data/abilities/ability-class.ts +++ b/src/data/abilities/ability-class.ts @@ -1,4 +1,4 @@ -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import type { AbAttrCondition } from "#app/@types/ability-types"; import type { AbAttr } from "#app/data/abilities/ab-attrs/ab-attr"; import i18next from "i18next"; @@ -6,7 +6,7 @@ import type { Localizable } from "#app/interfaces/locales"; import type { Constructor } from "#app/utils/common"; export class Ability implements Localizable { - public id: Abilities; + public id: AbilityId; private nameAppend: string; public name: string; @@ -20,7 +20,7 @@ export class Ability implements Localizable { public attrs: AbAttr[]; public conditions: AbAttrCondition[]; - constructor(id: Abilities, generation: number) { + constructor(id: AbilityId, generation: number) { this.id = id; this.nameAppend = ""; @@ -39,7 +39,7 @@ export class Ability implements Localizable { return this.isCopiable && this.isReplaceable; } localize(): void { - const i18nKey = Abilities[this.id] + const i18nKey = AbilityId[this.id] .split("_") .filter(f => f) .map((f, i) => (i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase())) diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index f49863639f0..8f5f267f7ef 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -50,11 +50,11 @@ import { PokemonType } from "#enums/pokemon-type"; import { PokemonAnimType } from "#enums/pokemon-anim-type"; import { StatusEffect } from "#enums/status-effect"; import { WeatherType } from "#enums/weather-type"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { SwitchType } from "#enums/switch-type"; import { MoveFlags } from "#enums/MoveFlags"; import { MoveTarget } from "#enums/MoveTarget"; @@ -868,7 +868,7 @@ export class EffectSporeAbAttr extends PostDefendContactApplyStatusEffectAbAttr } override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - return !(attacker.hasAbility(Abilities.OVERCOAT) || attacker.isOfType(PokemonType.GRASS)) + return !(attacker.hasAbility(AbilityId.OVERCOAT) || attacker.isOfType(PokemonType.GRASS)) && super.canApplyPostDefend(pokemon, passive, simulated, attacker, move, hitResult, args); } @@ -1029,9 +1029,9 @@ export class PostDefendAbilitySwapAbAttr extends PostDefendAbAttr { } export class PostDefendAbilityGiveAbAttr extends PostDefendAbAttr { - private ability: Abilities; + private ability: AbilityId; - constructor(ability: Abilities) { + constructor(ability: AbilityId) { super(); this.ability = ability; } @@ -1139,13 +1139,13 @@ export class MoveEffectChanceMultiplierAbAttr extends AbAttr { } override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - const exceptMoves = [ Moves.ORDER_UP, Moves.ELECTRO_SHOT ]; + const exceptMoves = [ MoveId.ORDER_UP, MoveId.ELECTRO_SHOT ]; return !((args[0] as NumberHolder).value <= 0 || exceptMoves.includes((args[1] as Move).id)); } /** * @param args [0]: {@linkcode NumberHolder} Move additional effect chance. Has to be higher than or equal to 0. - * [1]: {@linkcode Moves } Move used by the ability user. + * [1]: {@linkcode MoveId } Move used by the ability user. */ override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { (args[0] as NumberHolder).value *= this.chanceMultiplier; @@ -1249,7 +1249,7 @@ export class MoveTypeChangeAbAttr extends PreAttackAbAttr { * * Can be applied if: * - The ability's condition is met, e.g. pixilate only boosts normal moves, - * - The move is not forbidden from having its type changed by an ability, e.g. {@linkcode Moves.MULTI_ATTACK} + * - The move is not forbidden from having its type changed by an ability, e.g. {@linkcode MoveId.MULTI_ATTACK} * - The user is not terastallized and using tera blast * - The user is not a terastallized terapagos with tera stellar using tera starstorm * @param pokemon - The pokemon that has the move type changing ability and is using the attacking move @@ -1264,8 +1264,8 @@ export class MoveTypeChangeAbAttr extends PreAttackAbAttr { return (!this.condition || this.condition(pokemon, _defender, move)) && !noAbilityTypeOverrideMoves.has(move.id) && (!pokemon.isTerastallized || - (move.id !== Moves.TERA_BLAST && - (move.id !== Moves.TERA_STARSTORM || pokemon.getTeraType() !== PokemonType.STELLAR || !pokemon.hasSpecies(Species.TERAPAGOS)))); + (move.id !== MoveId.TERA_BLAST && + (move.id !== MoveId.TERA_STARSTORM || pokemon.getTeraType() !== PokemonType.STELLAR || !pokemon.hasSpecies(SpeciesId.TERAPAGOS)))); } /** @@ -1296,7 +1296,7 @@ export class PokemonTypeChangeAbAttr extends PreAttackAbAttr { override canApplyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon | null, move: Move, args: any[]): boolean { if (!pokemon.isTerastallized && - move.id !== Moves.STRUGGLE && + move.id !== MoveId.STRUGGLE && /** * Skip moves that call other moves because these moves generate a following move that will trigger this ability attribute * @see {@link https://bulbapedia.bulbagarden.net/wiki/Category:Moves_that_call_other_moves} @@ -2574,7 +2574,7 @@ export class PostSummonCopyAbilityAbAttr extends PostSummonAbAttr { if ( !target!.getAbility().isCopiable && // Wonder Guard is normally uncopiable so has the attribute, but Trace specifically can copy it - !(pokemon.hasAbility(Abilities.TRACE) && target!.getAbility().id === Abilities.WONDER_GUARD) + !(pokemon.hasAbility(AbilityId.TRACE) && target!.getAbility().id === AbilityId.WONDER_GUARD) ) { return false; } @@ -2679,7 +2679,7 @@ export class PostSummonCopyAllyStatsAbAttr extends PostSummonAbAttr { } /** - * Attribute used by {@linkcode Abilities.IMPOSTER} to transform into a random opposing pokemon on entry. + * Attribute used by {@linkcode AbilityId.IMPOSTER} to transform into a random opposing pokemon on entry. */ export class PostSummonTransformAbAttr extends PostSummonAbAttr { constructor() { @@ -2767,17 +2767,17 @@ export class PostSummonWeatherSuppressedFormChangeAbAttr extends PostSummonAbAtt * @extends PostSummonAbAttr */ export class PostSummonFormChangeByWeatherAbAttr extends PostSummonAbAttr { - private ability: Abilities; + private ability: AbilityId; - constructor(ability: Abilities) { + constructor(ability: AbilityId) { super(true); this.ability = ability; } override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - const isCastformWithForecast = (pokemon.species.speciesId === Species.CASTFORM && this.ability === Abilities.FORECAST); - const isCherrimWithFlowerGift = (pokemon.species.speciesId === Species.CHERRIM && this.ability === Abilities.FLOWER_GIFT); + const isCastformWithForecast = (pokemon.species.speciesId === SpeciesId.CASTFORM && this.ability === AbilityId.FORECAST); + const isCherrimWithFlowerGift = (pokemon.species.speciesId === SpeciesId.CHERRIM && this.ability === AbilityId.FLOWER_GIFT); return isCastformWithForecast || isCherrimWithFlowerGift; } @@ -2815,7 +2815,7 @@ export class CommanderAbAttr extends AbAttr { // TODO: Should this work with X + Dondozo fusions? const ally = pokemon.getAlly(); - return globalScene.currentBattle?.double && !isNullOrUndefined(ally) && ally.species.speciesId === Species.DONDOZO + return globalScene.currentBattle?.double && !isNullOrUndefined(ally) && ally.species.speciesId === SpeciesId.DONDOZO && !(ally.isFainted() || ally.getTag(BattlerTagType.COMMANDED)); } @@ -2826,7 +2826,7 @@ export class CommanderAbAttr extends AbAttr { // Play an animation of the source jumping into the ally Dondozo's mouth globalScene.triggerPokemonBattleAnim(pokemon, PokemonAnimType.COMMANDER_APPLY); // Apply boosts from this effect to the ally Dondozo - pokemon.getAlly()?.addTag(BattlerTagType.COMMANDED, 0, Moves.NONE, pokemon.id); + pokemon.getAlly()?.addTag(BattlerTagType.COMMANDED, 0, MoveId.NONE, pokemon.id); // Cancel the source Pokemon's next move (if a move is queued) globalScene.tryRemovePhase((phase) => phase instanceof MovePhase && phase.pokemon === pokemon); } @@ -2880,33 +2880,33 @@ export class PreSwitchOutClearWeatherAbAttr extends PreSwitchOutAbAttr { switch (weatherType) { case WeatherType.HARSH_SUN: if ( - pokemon.hasAbility(Abilities.DESOLATE_LAND) && + pokemon.hasAbility(AbilityId.DESOLATE_LAND) && globalScene .getField(true) .filter((p) => p !== pokemon) - .filter((p) => p.hasAbility(Abilities.DESOLATE_LAND)).length === 0 + .filter((p) => p.hasAbility(AbilityId.DESOLATE_LAND)).length === 0 ) { turnOffWeather = true; } break; case WeatherType.HEAVY_RAIN: if ( - pokemon.hasAbility(Abilities.PRIMORDIAL_SEA) && + pokemon.hasAbility(AbilityId.PRIMORDIAL_SEA) && globalScene .getField(true) .filter((p) => p !== pokemon) - .filter((p) => p.hasAbility(Abilities.PRIMORDIAL_SEA)).length === 0 + .filter((p) => p.hasAbility(AbilityId.PRIMORDIAL_SEA)).length === 0 ) { turnOffWeather = true; } break; case WeatherType.STRONG_WINDS: if ( - pokemon.hasAbility(Abilities.DELTA_STREAM) && + pokemon.hasAbility(AbilityId.DELTA_STREAM) && globalScene .getField(true) .filter((p) => p !== pokemon) - .filter((p) => p.hasAbility(Abilities.DELTA_STREAM)).length === 0 + .filter((p) => p.hasAbility(AbilityId.DELTA_STREAM)).length === 0 ) { turnOffWeather = true; } @@ -2990,20 +2990,20 @@ export class PreLeaveFieldClearWeatherAbAttr extends PreLeaveFieldAbAttr { // Clear weather only if user's ability matches the weather and no other pokemon has the ability. switch (weatherType) { case (WeatherType.HARSH_SUN): - if (pokemon.hasAbility(Abilities.DESOLATE_LAND) - && globalScene.getField(true).filter(p => p !== pokemon).filter(p => p.hasAbility(Abilities.DESOLATE_LAND)).length === 0) { + if (pokemon.hasAbility(AbilityId.DESOLATE_LAND) + && globalScene.getField(true).filter(p => p !== pokemon).filter(p => p.hasAbility(AbilityId.DESOLATE_LAND)).length === 0) { return true; } break; case (WeatherType.HEAVY_RAIN): - if (pokemon.hasAbility(Abilities.PRIMORDIAL_SEA) - && globalScene.getField(true).filter(p => p !== pokemon).filter(p => p.hasAbility(Abilities.PRIMORDIAL_SEA)).length === 0) { + if (pokemon.hasAbility(AbilityId.PRIMORDIAL_SEA) + && globalScene.getField(true).filter(p => p !== pokemon).filter(p => p.hasAbility(AbilityId.PRIMORDIAL_SEA)).length === 0) { return true; } break; case (WeatherType.STRONG_WINDS): - if (pokemon.hasAbility(Abilities.DELTA_STREAM) - && globalScene.getField(true).filter(p => p !== pokemon).filter(p => p.hasAbility(Abilities.DELTA_STREAM)).length === 0) { + if (pokemon.hasAbility(AbilityId.DELTA_STREAM) + && globalScene.getField(true).filter(p => p !== pokemon).filter(p => p.hasAbility(AbilityId.DELTA_STREAM)).length === 0) { return true; } break; @@ -3024,7 +3024,7 @@ export class PreLeaveFieldClearWeatherAbAttr extends PreLeaveFieldAbAttr { } /** - * Updates the active {@linkcode SuppressAbilitiesTag} when a pokemon with {@linkcode Abilities.NEUTRALIZING_GAS} leaves the field + * Updates the active {@linkcode SuppressAbilitiesTag} when a pokemon with {@linkcode AbilityId.NEUTRALIZING_GAS} leaves the field */ export class PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr extends PreLeaveFieldAbAttr { constructor() { @@ -3261,7 +3261,7 @@ export class UserFieldStatusEffectImmunityAbAttr extends PreSetStatusEffectImmun /** * Conditionally provides immunity to status effects to the user's field. * - * Used by {@linkcode Abilities.FLOWER_VEIL | Flower Veil}. + * Used by {@linkcode AbilityId.FLOWER_VEIL | Flower Veil}. * @extends UserFieldStatusEffectImmunityAbAttr * */ @@ -3297,7 +3297,7 @@ export class ConditionalUserFieldStatusEffectImmunityAbAttr extends UserFieldSta /** * Conditionally provides immunity to stat drop effects to the user's field. * - * Used by {@linkcode Abilities.FLOWER_VEIL | Flower Veil}. + * Used by {@linkcode AbilityId.FLOWER_VEIL | Flower Veil}. */ export class ConditionalUserFieldProtectStatAbAttr extends PreStatStageChangeAbAttr { /** {@linkcode BattleStat} to protect or `undefined` if **all** {@linkcode BattleStat} are protected */ @@ -3676,7 +3676,7 @@ function getSheerForceHitDisableAbCondition(): AbAttrCondition { } /** `true` if the last move's chance is above 0 and the last attacker's ability is sheer force */ - const SheerForceAffected = allMoves[lastReceivedAttack.move].chance >= 0 && lastAttacker.hasAbility(Abilities.SHEER_FORCE); + const SheerForceAffected = allMoves[lastReceivedAttack.move].chance >= 0 && lastAttacker.hasAbility(AbilityId.SHEER_FORCE); return !SheerForceAffected; }; @@ -3712,7 +3712,7 @@ function getAnticipationCondition(): AbAttrCondition { return true; } // edge case for hidden power, type is computed - if (move.getMove().id === Moves.HIDDEN_POWER) { + if (move.getMove().id === MoveId.HIDDEN_POWER) { const iv_val = Math.floor(((opponent.ivs[Stat.HP] & 1) + (opponent.ivs[Stat.ATK] & 1) * 2 + (opponent.ivs[Stat.DEF] & 1) * 4 @@ -3740,10 +3740,10 @@ function getAnticipationCondition(): AbAttrCondition { * Creates an ability condition that causes the ability to fail if that ability * has already been used by that pokemon that battle. It requires an ability to * be specified due to current limitations in how conditions on abilities work. - * @param {Abilities} ability The ability to check if it's already been applied + * @param {AbilityId} ability The ability to check if it's already been applied * @returns {AbAttrCondition} The condition */ -function getOncePerBattleCondition(ability: Abilities): AbAttrCondition { +function getOncePerBattleCondition(ability: AbilityId): AbAttrCondition { return (pokemon: Pokemon) => { return !pokemon.waveData.abilitiesApplied.has(ability); }; @@ -3764,7 +3764,7 @@ export class ForewarnAbAttr extends PostSummonAbAttr { movePower = 1; } else if (move?.getMove().hasAttr(OneHitKOAttr)) { movePower = 150; - } else if (move?.getMove().id === Moves.COUNTER || move?.getMove().id === Moves.MIRROR_COAT || move?.getMove().id === Moves.METAL_BURST) { + } else if (move?.getMove().id === MoveId.COUNTER || move?.getMove().id === MoveId.MIRROR_COAT || move?.getMove().id === MoveId.METAL_BURST) { movePower = 120; } else if (move?.getMove().power === -1) { movePower = 80; @@ -3813,10 +3813,10 @@ export class PostWeatherChangeAbAttr extends AbAttr { * @extends PostWeatherChangeAbAttr */ export class PostWeatherChangeFormChangeAbAttr extends PostWeatherChangeAbAttr { - private ability: Abilities; + private ability: AbilityId; private formRevertingWeathers: WeatherType[]; - constructor(ability: Abilities, formRevertingWeathers: WeatherType[]) { + constructor(ability: AbilityId, formRevertingWeathers: WeatherType[]) { super(false); this.ability = ability; @@ -3824,8 +3824,8 @@ export class PostWeatherChangeFormChangeAbAttr extends PostWeatherChangeAbAttr { } override canApplyPostWeatherChange(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: WeatherType, args: any[]): boolean { - const isCastformWithForecast = (pokemon.species.speciesId === Species.CASTFORM && this.ability === Abilities.FORECAST); - const isCherrimWithFlowerGift = (pokemon.species.speciesId === Species.CHERRIM && this.ability === Abilities.FLOWER_GIFT); + const isCastformWithForecast = (pokemon.species.speciesId === SpeciesId.CASTFORM && this.ability === AbilityId.FORECAST); + const isCherrimWithFlowerGift = (pokemon.species.speciesId === SpeciesId.CHERRIM && this.ability === AbilityId.FLOWER_GIFT); return isCastformWithForecast || isCherrimWithFlowerGift; } @@ -4067,7 +4067,7 @@ export class PostTurnResetStatusAbAttr extends PostTurnAbAttr { /** * Attribute to try and restore eaten berries after the turn ends. - * Used by {@linkcode Abilities.HARVEST}. + * Used by {@linkcode AbilityId.HARVEST}. */ export class PostTurnRestoreBerryAbAttr extends PostTurnAbAttr { /** @@ -4150,7 +4150,7 @@ export class PostTurnRestoreBerryAbAttr extends PostTurnAbAttr { /** * Attribute to track and re-trigger last turn's berries at the end of the `BerryPhase`. - * Used by {@linkcode Abilities.CUD_CHEW}. + * Used by {@linkcode AbilityId.CUD_CHEW}. */ export class RepeatBerryNextTurnAbAttr extends PostTurnAbAttr { /** @@ -4212,7 +4212,7 @@ export class RepeatBerryNextTurnAbAttr extends PostTurnAbAttr { } /** - * Attribute used for {@linkcode Abilities.MOODY} to randomly raise and lower stats at turn end. + * Attribute used for {@linkcode AbilityId.MOODY} to randomly raise and lower stats at turn end. */ export class MoodyAbAttr extends PostTurnAbAttr { constructor() { @@ -4302,7 +4302,7 @@ export class PostTurnFormChangeAbAttr extends PostTurnAbAttr { */ export class PostTurnHurtIfSleepingAbAttr extends PostTurnAbAttr { override canApplyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - return pokemon.getOpponents().some(opp => (opp.status?.effect === StatusEffect.SLEEP || opp.hasAbility(Abilities.COMATOSE)) && !opp.hasAbilityWithAttr(BlockNonDirectDamageAbAttr) && !opp.switchOutStatus); + return pokemon.getOpponents().some(opp => (opp.status?.effect === StatusEffect.SLEEP || opp.hasAbility(AbilityId.COMATOSE)) && !opp.hasAbilityWithAttr(BlockNonDirectDamageAbAttr) && !opp.switchOutStatus); } /** * Deals damage to all sleeping opponents equal to 1/8 of their max hp (min 1) @@ -4313,7 +4313,7 @@ export class PostTurnHurtIfSleepingAbAttr extends PostTurnAbAttr { */ override applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { for (const opp of pokemon.getOpponents()) { - if ((opp.status?.effect === StatusEffect.SLEEP || opp.hasAbility(Abilities.COMATOSE)) && !opp.hasAbilityWithAttr(BlockNonDirectDamageAbAttr) && !opp.switchOutStatus) { + if ((opp.status?.effect === StatusEffect.SLEEP || opp.hasAbility(AbilityId.COMATOSE)) && !opp.hasAbilityWithAttr(BlockNonDirectDamageAbAttr) && !opp.switchOutStatus) { if (!simulated) { opp.damageAndUpdate(toDmgValue(opp.getMaxHp() / 8), { result: HitResult.INDIRECT }); globalScene.queueMessage(i18next.t("abilityTriggers:badDreams", { pokemonName: getPokemonNameWithAffix(opp) })); @@ -4579,7 +4579,7 @@ export class DoubleBerryEffectAbAttr extends AbAttr { /** * Attribute to prevent opposing berry use while on the field. - * Used by {@linkcode Abilities.UNNERVE}, {@linkcode Abilities.AS_ONE_GLASTRIER} and {@linkcode Abilities.AS_ONE_SPECTRIER} + * Used by {@linkcode AbilityId.UNNERVE}, {@linkcode AbilityId.AS_ONE_GLASTRIER} and {@linkcode AbilityId.AS_ONE_SPECTRIER} */ export class PreventBerryUseAbAttr extends AbAttr { /** @@ -4680,7 +4680,7 @@ export class ArenaTrapAbAttr extends CheckTrappedAbAttr { override canApplyCheckTrapped(pokemon: Pokemon, passive: boolean, simulated: boolean, trapped: BooleanHolder, otherPokemon: Pokemon, args: any[]): boolean { return this.arenaTrapCondition(pokemon, otherPokemon) && !(otherPokemon.getTypes(true).includes(PokemonType.GHOST) || (otherPokemon.getTypes(true).includes(PokemonType.STELLAR) && otherPokemon.getTypes().includes(PokemonType.GHOST))) - && !otherPokemon.hasAbility(Abilities.RUN_AWAY); + && !otherPokemon.hasAbility(AbilityId.RUN_AWAY); } /** @@ -4856,7 +4856,7 @@ export class RedirectMoveAbAttr extends AbAttr { */ override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - if (!this.canRedirect(args[0] as Moves, args[2] as Pokemon)) { + if (!this.canRedirect(args[0] as MoveId, args[2] as Pokemon)) { return false; } const target = args[1] as NumberHolder; @@ -4870,7 +4870,7 @@ export class RedirectMoveAbAttr extends AbAttr { target.value = newTarget; } - canRedirect(moveId: Moves, user: Pokemon): boolean { + canRedirect(moveId: MoveId, user: Pokemon): boolean { const move = allMoves[moveId]; return !![ MoveTarget.NEAR_OTHER, MoveTarget.OTHER ].find(t => move.moveTarget === t); } @@ -4884,7 +4884,7 @@ export class RedirectTypeMoveAbAttr extends RedirectMoveAbAttr { this.type = type; } - canRedirect(moveId: Moves, user: Pokemon): boolean { + canRedirect(moveId: MoveId, user: Pokemon): boolean { return super.canRedirect(moveId, user) && user.getMoveType(allMoves[moveId]) === this.type; } } @@ -5050,7 +5050,7 @@ export class InfiltratorAbAttr extends AbAttr { /** * Attribute implementing the effects of {@link https://bulbapedia.bulbagarden.net/wiki/Magic_Bounce_(ability) | Magic Bounce}. * Allows the source to bounce back {@linkcode MoveFlags.REFLECTABLE | Reflectable} - * moves as if the user had used {@linkcode Moves.MAGIC_COAT | Magic Coat}. + * moves as if the user had used {@linkcode MoveId.MAGIC_COAT | Magic Coat}. */ export class ReflectStatusMoveAbAttr extends AbAttr { } @@ -5273,7 +5273,7 @@ export class IllusionPreSummonAbAttr extends PreSummonAbAttr { // Illusion will also not activate if the Pokémon with Illusion is Terastallized and the last Pokémon in the party is Ogerpon or Terapagos. if ( lastPokemon === pokemon || - ((speciesId === Species.OGERPON || speciesId === Species.TERAPAGOS) && (lastPokemon.isTerastallized || pokemon.isTerastallized)) + ((speciesId === SpeciesId.OGERPON || speciesId === SpeciesId.TERAPAGOS) && (lastPokemon.isTerastallized || pokemon.isTerastallized)) ) { return false; } @@ -5731,7 +5731,7 @@ export class PostDamageForceSwitchAbAttr extends PostDamageAbAttr { source?: Pokemon): boolean { const moveHistory = pokemon.getMoveHistory(); // Will not activate when the Pokémon's HP is lowered by cutting its own HP - const fordbiddenAttackingMoves = [ Moves.BELLY_DRUM, Moves.SUBSTITUTE, Moves.CURSE, Moves.PAIN_SPLIT ]; + const fordbiddenAttackingMoves = [ MoveId.BELLY_DRUM, MoveId.SUBSTITUTE, MoveId.CURSE, MoveId.PAIN_SPLIT ]; if (moveHistory.length > 0) { const lastMoveUsed = moveHistory[moveHistory.length - 1]; if (fordbiddenAttackingMoves.includes(lastMoveUsed.move)) { @@ -5740,17 +5740,17 @@ export class PostDamageForceSwitchAbAttr extends PostDamageAbAttr { } // Dragon Tail and Circle Throw switch out Pokémon before the Ability activates. - const fordbiddenDefendingMoves = [ Moves.DRAGON_TAIL, Moves.CIRCLE_THROW ]; + const fordbiddenDefendingMoves = [ MoveId.DRAGON_TAIL, MoveId.CIRCLE_THROW ]; if (source) { const enemyMoveHistory = source.getMoveHistory(); if (enemyMoveHistory.length > 0) { const enemyLastMoveUsed = enemyMoveHistory[enemyMoveHistory.length - 1]; // Will not activate if the Pokémon's HP falls below half while it is in the air during Sky Drop. - if (fordbiddenDefendingMoves.includes(enemyLastMoveUsed.move) || enemyLastMoveUsed.move === Moves.SKY_DROP && enemyLastMoveUsed.result === MoveResult.OTHER) { + if (fordbiddenDefendingMoves.includes(enemyLastMoveUsed.move) || enemyLastMoveUsed.move === MoveId.SKY_DROP && enemyLastMoveUsed.result === MoveResult.OTHER) { return false; // Will not activate if the Pokémon's HP falls below half by a move affected by Sheer Force. // TODO: Make this use the sheer force disable condition - } else if (allMoves[enemyLastMoveUsed.move].chance >= 0 && source.hasAbility(Abilities.SHEER_FORCE)) { + } else if (allMoves[enemyLastMoveUsed.move].chance >= 0 && source.hasAbility(AbilityId.SHEER_FORCE)) { return false; // Activate only after the last hit of multistrike moves } else if (source.turnData.hitsLeft > 1) { @@ -6423,237 +6423,237 @@ function setAbilityRevealed(pokemon: Pokemon): void { */ function getPokemonWithWeatherBasedForms() { return globalScene.getField(true).filter(p => - (p.hasAbility(Abilities.FORECAST) && p.species.speciesId === Species.CASTFORM) - || (p.hasAbility(Abilities.FLOWER_GIFT) && p.species.speciesId === Species.CHERRIM) + (p.hasAbility(AbilityId.FORECAST) && p.species.speciesId === SpeciesId.CASTFORM) + || (p.hasAbility(AbilityId.FLOWER_GIFT) && p.species.speciesId === SpeciesId.CHERRIM) ); } export function initAbilities() { allAbilities.push( - new Ability(Abilities.NONE, 3), - new Ability(Abilities.STENCH, 3) + new Ability(AbilityId.NONE, 3), + new Ability(AbilityId.STENCH, 3) .attr(PostAttackApplyBattlerTagAbAttr, false, (user, target, move) => !move.hasAttr(FlinchAttr) && !move.hitsSubstitute(user, target) ? 10 : 0, BattlerTagType.FLINCHED), - new Ability(Abilities.DRIZZLE, 3) + new Ability(AbilityId.DRIZZLE, 3) .attr(PostSummonWeatherChangeAbAttr, WeatherType.RAIN) .attr(PostBiomeChangeWeatherChangeAbAttr, WeatherType.RAIN), - new Ability(Abilities.SPEED_BOOST, 3) + new Ability(AbilityId.SPEED_BOOST, 3) .attr(SpeedBoostAbAttr), - new Ability(Abilities.BATTLE_ARMOR, 3) + new Ability(AbilityId.BATTLE_ARMOR, 3) .attr(BlockCritAbAttr) .ignorable(), - new Ability(Abilities.STURDY, 3) + new Ability(AbilityId.STURDY, 3) .attr(PreDefendFullHpEndureAbAttr) .attr(BlockOneHitKOAbAttr) .ignorable(), - new Ability(Abilities.DAMP, 3) + new Ability(AbilityId.DAMP, 3) .attr(FieldPreventExplosiveMovesAbAttr) .ignorable(), - new Ability(Abilities.LIMBER, 3) + new Ability(AbilityId.LIMBER, 3) .attr(StatusEffectImmunityAbAttr, StatusEffect.PARALYSIS) .attr(PostSummonHealStatusAbAttr, StatusEffect.PARALYSIS) .ignorable(), - new Ability(Abilities.SAND_VEIL, 3) + new Ability(AbilityId.SAND_VEIL, 3) .attr(StatMultiplierAbAttr, Stat.EVA, 1.2) .attr(BlockWeatherDamageAttr, WeatherType.SANDSTORM) .condition(getWeatherCondition(WeatherType.SANDSTORM)) .ignorable(), - new Ability(Abilities.STATIC, 3) + new Ability(AbilityId.STATIC, 3) .attr(PostDefendContactApplyStatusEffectAbAttr, 30, StatusEffect.PARALYSIS) .bypassFaint(), - new Ability(Abilities.VOLT_ABSORB, 3) + new Ability(AbilityId.VOLT_ABSORB, 3) .attr(TypeImmunityHealAbAttr, PokemonType.ELECTRIC) .ignorable(), - new Ability(Abilities.WATER_ABSORB, 3) + new Ability(AbilityId.WATER_ABSORB, 3) .attr(TypeImmunityHealAbAttr, PokemonType.WATER) .ignorable(), - new Ability(Abilities.OBLIVIOUS, 3) + new Ability(AbilityId.OBLIVIOUS, 3) .attr(BattlerTagImmunityAbAttr, [ BattlerTagType.INFATUATED, BattlerTagType.TAUNT ]) .attr(PostSummonRemoveBattlerTagAbAttr, BattlerTagType.INFATUATED, BattlerTagType.TAUNT) .attr(IntimidateImmunityAbAttr) .ignorable(), - new Ability(Abilities.CLOUD_NINE, 3) + new Ability(AbilityId.CLOUD_NINE, 3) .attr(SuppressWeatherEffectAbAttr, true) .attr(PostSummonUnnamedMessageAbAttr, i18next.t("abilityTriggers:weatherEffectDisappeared")) .attr(PostSummonWeatherSuppressedFormChangeAbAttr) .attr(PostFaintUnsuppressedWeatherFormChangeAbAttr) .bypassFaint(), - new Ability(Abilities.COMPOUND_EYES, 3) + new Ability(AbilityId.COMPOUND_EYES, 3) .attr(StatMultiplierAbAttr, Stat.ACC, 1.3), - new Ability(Abilities.INSOMNIA, 3) + new Ability(AbilityId.INSOMNIA, 3) .attr(StatusEffectImmunityAbAttr, StatusEffect.SLEEP) .attr(PostSummonHealStatusAbAttr, StatusEffect.SLEEP) .attr(BattlerTagImmunityAbAttr, BattlerTagType.DROWSY) .ignorable(), - new Ability(Abilities.COLOR_CHANGE, 3) + new Ability(AbilityId.COLOR_CHANGE, 3) .attr(PostDefendTypeChangeAbAttr) .condition(getSheerForceHitDisableAbCondition()), - new Ability(Abilities.IMMUNITY, 3) + new Ability(AbilityId.IMMUNITY, 3) .attr(StatusEffectImmunityAbAttr, StatusEffect.POISON, StatusEffect.TOXIC) .attr(PostSummonHealStatusAbAttr, StatusEffect.POISON, StatusEffect.TOXIC) .ignorable(), - new Ability(Abilities.FLASH_FIRE, 3) + new Ability(AbilityId.FLASH_FIRE, 3) .attr(TypeImmunityAddBattlerTagAbAttr, PokemonType.FIRE, BattlerTagType.FIRE_BOOST, 1) .ignorable(), - new Ability(Abilities.SHIELD_DUST, 3) + new Ability(AbilityId.SHIELD_DUST, 3) .attr(IgnoreMoveEffectsAbAttr) .ignorable(), - new Ability(Abilities.OWN_TEMPO, 3) + new Ability(AbilityId.OWN_TEMPO, 3) .attr(BattlerTagImmunityAbAttr, BattlerTagType.CONFUSED) .attr(PostSummonRemoveBattlerTagAbAttr, BattlerTagType.CONFUSED) .attr(IntimidateImmunityAbAttr) .ignorable(), - new Ability(Abilities.SUCTION_CUPS, 3) + new Ability(AbilityId.SUCTION_CUPS, 3) .attr(ForceSwitchOutImmunityAbAttr) .ignorable(), - new Ability(Abilities.INTIMIDATE, 3) + new Ability(AbilityId.INTIMIDATE, 3) .attr(PostSummonStatStageChangeAbAttr, [ Stat.ATK ], -1, false, true), - new Ability(Abilities.SHADOW_TAG, 3) + new Ability(AbilityId.SHADOW_TAG, 3) .attr(ArenaTrapAbAttr, (user, target) => { - if (target.hasAbility(Abilities.SHADOW_TAG)) { + if (target.hasAbility(AbilityId.SHADOW_TAG)) { return false; } return true; }), - new Ability(Abilities.ROUGH_SKIN, 3) + new Ability(AbilityId.ROUGH_SKIN, 3) .attr(PostDefendContactDamageAbAttr, 8) .bypassFaint(), - new Ability(Abilities.WONDER_GUARD, 3) + new Ability(AbilityId.WONDER_GUARD, 3) .attr(NonSuperEffectiveImmunityAbAttr) .uncopiable() .ignorable(), - new Ability(Abilities.LEVITATE, 3) + new Ability(AbilityId.LEVITATE, 3) .attr(AttackTypeImmunityAbAttr, PokemonType.GROUND, (pokemon: Pokemon) => !pokemon.getTag(GroundedTag) && !globalScene.arena.getTag(ArenaTagType.GRAVITY)) .ignorable(), - new Ability(Abilities.EFFECT_SPORE, 3) + new Ability(AbilityId.EFFECT_SPORE, 3) .attr(EffectSporeAbAttr), - new Ability(Abilities.SYNCHRONIZE, 3) + new Ability(AbilityId.SYNCHRONIZE, 3) .attr(SyncEncounterNatureAbAttr) .attr(SynchronizeStatusAbAttr), - new Ability(Abilities.CLEAR_BODY, 3) + new Ability(AbilityId.CLEAR_BODY, 3) .attr(ProtectStatAbAttr) .ignorable(), - new Ability(Abilities.NATURAL_CURE, 3) + new Ability(AbilityId.NATURAL_CURE, 3) .attr(PreSwitchOutResetStatusAbAttr), - new Ability(Abilities.LIGHTNING_ROD, 3) + new Ability(AbilityId.LIGHTNING_ROD, 3) .attr(RedirectTypeMoveAbAttr, PokemonType.ELECTRIC) .attr(TypeImmunityStatStageChangeAbAttr, PokemonType.ELECTRIC, Stat.SPATK, 1) .ignorable(), - new Ability(Abilities.SERENE_GRACE, 3) + new Ability(AbilityId.SERENE_GRACE, 3) .attr(MoveEffectChanceMultiplierAbAttr, 2), - new Ability(Abilities.SWIFT_SWIM, 3) + new Ability(AbilityId.SWIFT_SWIM, 3) .attr(StatMultiplierAbAttr, Stat.SPD, 2) .condition(getWeatherCondition(WeatherType.RAIN, WeatherType.HEAVY_RAIN)), - new Ability(Abilities.CHLOROPHYLL, 3) + new Ability(AbilityId.CHLOROPHYLL, 3) .attr(StatMultiplierAbAttr, Stat.SPD, 2) .condition(getWeatherCondition(WeatherType.SUNNY, WeatherType.HARSH_SUN)), - new Ability(Abilities.ILLUMINATE, 3) + new Ability(AbilityId.ILLUMINATE, 3) .attr(ProtectStatAbAttr, Stat.ACC) .attr(DoubleBattleChanceAbAttr) .attr(IgnoreOpponentStatStagesAbAttr, [ Stat.EVA ]) .ignorable(), - new Ability(Abilities.TRACE, 3) + new Ability(AbilityId.TRACE, 3) .attr(PostSummonCopyAbilityAbAttr) .uncopiable(), - new Ability(Abilities.HUGE_POWER, 3) + new Ability(AbilityId.HUGE_POWER, 3) .attr(StatMultiplierAbAttr, Stat.ATK, 2), - new Ability(Abilities.POISON_POINT, 3) + new Ability(AbilityId.POISON_POINT, 3) .attr(PostDefendContactApplyStatusEffectAbAttr, 30, StatusEffect.POISON) .bypassFaint(), - new Ability(Abilities.INNER_FOCUS, 3) + new Ability(AbilityId.INNER_FOCUS, 3) .attr(BattlerTagImmunityAbAttr, BattlerTagType.FLINCHED) .attr(IntimidateImmunityAbAttr) .ignorable(), - new Ability(Abilities.MAGMA_ARMOR, 3) + new Ability(AbilityId.MAGMA_ARMOR, 3) .attr(StatusEffectImmunityAbAttr, StatusEffect.FREEZE) .attr(PostSummonHealStatusAbAttr, StatusEffect.FREEZE) .ignorable(), - new Ability(Abilities.WATER_VEIL, 3) + new Ability(AbilityId.WATER_VEIL, 3) .attr(StatusEffectImmunityAbAttr, StatusEffect.BURN) .attr(PostSummonHealStatusAbAttr, StatusEffect.BURN) .ignorable(), - new Ability(Abilities.MAGNET_PULL, 3) + new Ability(AbilityId.MAGNET_PULL, 3) .attr(ArenaTrapAbAttr, (user, target) => { if (target.getTypes(true).includes(PokemonType.STEEL) || (target.getTypes(true).includes(PokemonType.STELLAR) && target.getTypes().includes(PokemonType.STEEL))) { return true; } return false; }), - new Ability(Abilities.SOUNDPROOF, 3) + new Ability(AbilityId.SOUNDPROOF, 3) .attr(MoveImmunityAbAttr, (pokemon, attacker, move) => pokemon !== attacker && move.hasFlag(MoveFlags.SOUND_BASED)) .ignorable(), - new Ability(Abilities.RAIN_DISH, 3) + new Ability(AbilityId.RAIN_DISH, 3) .attr(PostWeatherLapseHealAbAttr, 1, WeatherType.RAIN, WeatherType.HEAVY_RAIN), - new Ability(Abilities.SAND_STREAM, 3) + new Ability(AbilityId.SAND_STREAM, 3) .attr(PostSummonWeatherChangeAbAttr, WeatherType.SANDSTORM) .attr(PostBiomeChangeWeatherChangeAbAttr, WeatherType.SANDSTORM), - new Ability(Abilities.PRESSURE, 3) + new Ability(AbilityId.PRESSURE, 3) .attr(IncreasePpAbAttr) .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonPressure", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })), - new Ability(Abilities.THICK_FAT, 3) + new Ability(AbilityId.THICK_FAT, 3) .attr(ReceivedTypeDamageMultiplierAbAttr, PokemonType.FIRE, 0.5) .attr(ReceivedTypeDamageMultiplierAbAttr, PokemonType.ICE, 0.5) .ignorable(), - new Ability(Abilities.EARLY_BIRD, 3) + new Ability(AbilityId.EARLY_BIRD, 3) .attr(ReduceStatusEffectDurationAbAttr, StatusEffect.SLEEP), - new Ability(Abilities.FLAME_BODY, 3) + new Ability(AbilityId.FLAME_BODY, 3) .attr(PostDefendContactApplyStatusEffectAbAttr, 30, StatusEffect.BURN) .bypassFaint(), - new Ability(Abilities.RUN_AWAY, 3) + new Ability(AbilityId.RUN_AWAY, 3) .attr(RunSuccessAbAttr), - new Ability(Abilities.KEEN_EYE, 3) + new Ability(AbilityId.KEEN_EYE, 3) .attr(ProtectStatAbAttr, Stat.ACC) .ignorable(), - new Ability(Abilities.HYPER_CUTTER, 3) + new Ability(AbilityId.HYPER_CUTTER, 3) .attr(ProtectStatAbAttr, Stat.ATK) .ignorable(), - new Ability(Abilities.PICKUP, 3) + new Ability(AbilityId.PICKUP, 3) .attr(PostBattleLootAbAttr) .unsuppressable(), - new Ability(Abilities.TRUANT, 3) + new Ability(AbilityId.TRUANT, 3) .attr(PostSummonAddBattlerTagAbAttr, BattlerTagType.TRUANT, 1, false), - new Ability(Abilities.HUSTLE, 3) + new Ability(AbilityId.HUSTLE, 3) .attr(StatMultiplierAbAttr, Stat.ATK, 1.5) .attr(StatMultiplierAbAttr, Stat.ACC, 0.8, (_user, _target, move) => move.category === MoveCategory.PHYSICAL), - new Ability(Abilities.CUTE_CHARM, 3) + new Ability(AbilityId.CUTE_CHARM, 3) .attr(PostDefendContactApplyTagChanceAbAttr, 30, BattlerTagType.INFATUATED), - new Ability(Abilities.PLUS, 3) - .conditionalAttr(p => globalScene.currentBattle.double && [ Abilities.PLUS, Abilities.MINUS ].some(a => (p.getAlly()?.hasAbility(a) ?? false)), StatMultiplierAbAttr, Stat.SPATK, 1.5), - new Ability(Abilities.MINUS, 3) - .conditionalAttr(p => globalScene.currentBattle.double && [ Abilities.PLUS, Abilities.MINUS ].some(a => (p.getAlly()?.hasAbility(a) ?? false)), StatMultiplierAbAttr, Stat.SPATK, 1.5), - new Ability(Abilities.FORECAST, 3) + new Ability(AbilityId.PLUS, 3) + .conditionalAttr(p => globalScene.currentBattle.double && [ AbilityId.PLUS, AbilityId.MINUS ].some(a => (p.getAlly()?.hasAbility(a) ?? false)), StatMultiplierAbAttr, Stat.SPATK, 1.5), + new Ability(AbilityId.MINUS, 3) + .conditionalAttr(p => globalScene.currentBattle.double && [ AbilityId.PLUS, AbilityId.MINUS ].some(a => (p.getAlly()?.hasAbility(a) ?? false)), StatMultiplierAbAttr, Stat.SPATK, 1.5), + new Ability(AbilityId.FORECAST, 3) .uncopiable() .unreplaceable() .attr(NoFusionAbilityAbAttr) - .attr(PostSummonFormChangeByWeatherAbAttr, Abilities.FORECAST) - .attr(PostWeatherChangeFormChangeAbAttr, Abilities.FORECAST, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG ]), - new Ability(Abilities.STICKY_HOLD, 3) + .attr(PostSummonFormChangeByWeatherAbAttr, AbilityId.FORECAST) + .attr(PostWeatherChangeFormChangeAbAttr, AbilityId.FORECAST, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG ]), + new Ability(AbilityId.STICKY_HOLD, 3) .attr(BlockItemTheftAbAttr) .bypassFaint() .ignorable(), - new Ability(Abilities.SHED_SKIN, 3) + new Ability(AbilityId.SHED_SKIN, 3) .conditionalAttr(pokemon => !randSeedInt(3), PostTurnResetStatusAbAttr), - new Ability(Abilities.GUTS, 3) + new Ability(AbilityId.GUTS, 3) .attr(BypassBurnDamageReductionAbAttr) - .conditionalAttr(pokemon => !!pokemon.status || pokemon.hasAbility(Abilities.COMATOSE), StatMultiplierAbAttr, Stat.ATK, 1.5), - new Ability(Abilities.MARVEL_SCALE, 3) - .conditionalAttr(pokemon => !!pokemon.status || pokemon.hasAbility(Abilities.COMATOSE), StatMultiplierAbAttr, Stat.DEF, 1.5) + .conditionalAttr(pokemon => !!pokemon.status || pokemon.hasAbility(AbilityId.COMATOSE), StatMultiplierAbAttr, Stat.ATK, 1.5), + new Ability(AbilityId.MARVEL_SCALE, 3) + .conditionalAttr(pokemon => !!pokemon.status || pokemon.hasAbility(AbilityId.COMATOSE), StatMultiplierAbAttr, Stat.DEF, 1.5) .ignorable(), - new Ability(Abilities.LIQUID_OOZE, 3) + new Ability(AbilityId.LIQUID_OOZE, 3) .attr(ReverseDrainAbAttr), - new Ability(Abilities.OVERGROW, 3) + new Ability(AbilityId.OVERGROW, 3) .attr(LowHpMoveTypePowerBoostAbAttr, PokemonType.GRASS), - new Ability(Abilities.BLAZE, 3) + new Ability(AbilityId.BLAZE, 3) .attr(LowHpMoveTypePowerBoostAbAttr, PokemonType.FIRE), - new Ability(Abilities.TORRENT, 3) + new Ability(AbilityId.TORRENT, 3) .attr(LowHpMoveTypePowerBoostAbAttr, PokemonType.WATER), - new Ability(Abilities.SWARM, 3) + new Ability(AbilityId.SWARM, 3) .attr(LowHpMoveTypePowerBoostAbAttr, PokemonType.BUG), - new Ability(Abilities.ROCK_HEAD, 3) + new Ability(AbilityId.ROCK_HEAD, 3) .attr(BlockRecoilDamageAttr), - new Ability(Abilities.DROUGHT, 3) + new Ability(AbilityId.DROUGHT, 3) .attr(PostSummonWeatherChangeAbAttr, WeatherType.SUNNY) .attr(PostBiomeChangeWeatherChangeAbAttr, WeatherType.SUNNY), - new Ability(Abilities.ARENA_TRAP, 3) + new Ability(AbilityId.ARENA_TRAP, 3) .attr(ArenaTrapAbAttr, (user, target) => { if (target.isGrounded()) { return true; @@ -6661,246 +6661,246 @@ export function initAbilities() { return false; }) .attr(DoubleBattleChanceAbAttr), - new Ability(Abilities.VITAL_SPIRIT, 3) + new Ability(AbilityId.VITAL_SPIRIT, 3) .attr(StatusEffectImmunityAbAttr, StatusEffect.SLEEP) .attr(PostSummonHealStatusAbAttr, StatusEffect.SLEEP) .attr(BattlerTagImmunityAbAttr, BattlerTagType.DROWSY) .ignorable(), - new Ability(Abilities.WHITE_SMOKE, 3) + new Ability(AbilityId.WHITE_SMOKE, 3) .attr(ProtectStatAbAttr) .ignorable(), - new Ability(Abilities.PURE_POWER, 3) + new Ability(AbilityId.PURE_POWER, 3) .attr(StatMultiplierAbAttr, Stat.ATK, 2), - new Ability(Abilities.SHELL_ARMOR, 3) + new Ability(AbilityId.SHELL_ARMOR, 3) .attr(BlockCritAbAttr) .ignorable(), - new Ability(Abilities.AIR_LOCK, 3) + new Ability(AbilityId.AIR_LOCK, 3) .attr(SuppressWeatherEffectAbAttr, true) .attr(PostSummonUnnamedMessageAbAttr, i18next.t("abilityTriggers:weatherEffectDisappeared")) .attr(PostSummonWeatherSuppressedFormChangeAbAttr) .attr(PostFaintUnsuppressedWeatherFormChangeAbAttr) .bypassFaint(), - new Ability(Abilities.TANGLED_FEET, 4) + new Ability(AbilityId.TANGLED_FEET, 4) .conditionalAttr(pokemon => !!pokemon.getTag(BattlerTagType.CONFUSED), StatMultiplierAbAttr, Stat.EVA, 2) .ignorable(), - new Ability(Abilities.MOTOR_DRIVE, 4) + new Ability(AbilityId.MOTOR_DRIVE, 4) .attr(TypeImmunityStatStageChangeAbAttr, PokemonType.ELECTRIC, Stat.SPD, 1) .ignorable(), - new Ability(Abilities.RIVALRY, 4) + new Ability(AbilityId.RIVALRY, 4) .attr(MovePowerBoostAbAttr, (user, target, move) => user?.gender !== Gender.GENDERLESS && target?.gender !== Gender.GENDERLESS && user?.gender === target?.gender, 1.25, true) .attr(MovePowerBoostAbAttr, (user, target, move) => user?.gender !== Gender.GENDERLESS && target?.gender !== Gender.GENDERLESS && user?.gender !== target?.gender, 0.75), - new Ability(Abilities.STEADFAST, 4) + new Ability(AbilityId.STEADFAST, 4) .attr(FlinchStatStageChangeAbAttr, [ Stat.SPD ], 1), - new Ability(Abilities.SNOW_CLOAK, 4) + new Ability(AbilityId.SNOW_CLOAK, 4) .attr(StatMultiplierAbAttr, Stat.EVA, 1.2) .attr(BlockWeatherDamageAttr, WeatherType.HAIL) .condition(getWeatherCondition(WeatherType.HAIL, WeatherType.SNOW)) .ignorable(), - new Ability(Abilities.GLUTTONY, 4) + new Ability(AbilityId.GLUTTONY, 4) .attr(ReduceBerryUseThresholdAbAttr), - new Ability(Abilities.ANGER_POINT, 4) + new Ability(AbilityId.ANGER_POINT, 4) .attr(PostDefendCritStatStageChangeAbAttr, Stat.ATK, 6), - new Ability(Abilities.UNBURDEN, 4) + new Ability(AbilityId.UNBURDEN, 4) .attr(PostItemLostApplyBattlerTagAbAttr, BattlerTagType.UNBURDEN) .bypassFaint() // Allows reviver seed to activate Unburden .edgeCase(), // Should not restore Unburden boost if Pokemon loses then regains Unburden ability - new Ability(Abilities.HEATPROOF, 4) + new Ability(AbilityId.HEATPROOF, 4) .attr(ReceivedTypeDamageMultiplierAbAttr, PokemonType.FIRE, 0.5) .attr(ReduceBurnDamageAbAttr, 0.5) .ignorable(), - new Ability(Abilities.SIMPLE, 4) + new Ability(AbilityId.SIMPLE, 4) .attr(StatStageChangeMultiplierAbAttr, 2) .ignorable(), - new Ability(Abilities.DRY_SKIN, 4) + new Ability(AbilityId.DRY_SKIN, 4) .attr(PostWeatherLapseDamageAbAttr, 2, WeatherType.SUNNY, WeatherType.HARSH_SUN) .attr(PostWeatherLapseHealAbAttr, 2, WeatherType.RAIN, WeatherType.HEAVY_RAIN) .attr(ReceivedTypeDamageMultiplierAbAttr, PokemonType.FIRE, 1.25) .attr(TypeImmunityHealAbAttr, PokemonType.WATER) .ignorable(), - new Ability(Abilities.DOWNLOAD, 4) + new Ability(AbilityId.DOWNLOAD, 4) .attr(DownloadAbAttr), - new Ability(Abilities.IRON_FIST, 4) + new Ability(AbilityId.IRON_FIST, 4) .attr(MovePowerBoostAbAttr, (user, target, move) => move.hasFlag(MoveFlags.PUNCHING_MOVE), 1.2), - new Ability(Abilities.POISON_HEAL, 4) + new Ability(AbilityId.POISON_HEAL, 4) .attr(PostTurnStatusHealAbAttr, StatusEffect.TOXIC, StatusEffect.POISON) .attr(BlockStatusDamageAbAttr, StatusEffect.TOXIC, StatusEffect.POISON), - new Ability(Abilities.ADAPTABILITY, 4) + new Ability(AbilityId.ADAPTABILITY, 4) .attr(StabBoostAbAttr), - new Ability(Abilities.SKILL_LINK, 4) + new Ability(AbilityId.SKILL_LINK, 4) .attr(MaxMultiHitAbAttr), - new Ability(Abilities.HYDRATION, 4) + new Ability(AbilityId.HYDRATION, 4) .attr(PostTurnResetStatusAbAttr) .condition(getWeatherCondition(WeatherType.RAIN, WeatherType.HEAVY_RAIN)), - new Ability(Abilities.SOLAR_POWER, 4) + new Ability(AbilityId.SOLAR_POWER, 4) .attr(PostWeatherLapseDamageAbAttr, 2, WeatherType.SUNNY, WeatherType.HARSH_SUN) .attr(StatMultiplierAbAttr, Stat.SPATK, 1.5) .condition(getWeatherCondition(WeatherType.SUNNY, WeatherType.HARSH_SUN)), - new Ability(Abilities.QUICK_FEET, 4) + new Ability(AbilityId.QUICK_FEET, 4) .conditionalAttr(pokemon => pokemon.status ? pokemon.status.effect === StatusEffect.PARALYSIS : false, StatMultiplierAbAttr, Stat.SPD, 2) - .conditionalAttr(pokemon => !!pokemon.status || pokemon.hasAbility(Abilities.COMATOSE), StatMultiplierAbAttr, Stat.SPD, 1.5), - new Ability(Abilities.NORMALIZE, 4) + .conditionalAttr(pokemon => !!pokemon.status || pokemon.hasAbility(AbilityId.COMATOSE), StatMultiplierAbAttr, Stat.SPD, 1.5), + new Ability(AbilityId.NORMALIZE, 4) .attr(MoveTypeChangeAbAttr, PokemonType.NORMAL, 1.2), - new Ability(Abilities.SNIPER, 4) + new Ability(AbilityId.SNIPER, 4) .attr(MultCritAbAttr, 1.5), - new Ability(Abilities.MAGIC_GUARD, 4) + new Ability(AbilityId.MAGIC_GUARD, 4) .attr(BlockNonDirectDamageAbAttr), - new Ability(Abilities.NO_GUARD, 4) + new Ability(AbilityId.NO_GUARD, 4) .attr(AlwaysHitAbAttr) .attr(DoubleBattleChanceAbAttr), - new Ability(Abilities.STALL, 4) + new Ability(AbilityId.STALL, 4) .attr(ChangeMovePriorityAbAttr, (pokemon, move: Move) => true, -0.2), - new Ability(Abilities.TECHNICIAN, 4) + new Ability(AbilityId.TECHNICIAN, 4) .attr(MovePowerBoostAbAttr, (user, target, move) => { const power = new NumberHolder(move.power); applyMoveAttrs(VariablePowerAttr, user, target, move, power); return power.value <= 60; }, 1.5), - new Ability(Abilities.LEAF_GUARD, 4) + new Ability(AbilityId.LEAF_GUARD, 4) .attr(StatusEffectImmunityAbAttr) .condition(getWeatherCondition(WeatherType.SUNNY, WeatherType.HARSH_SUN)) .ignorable(), - new Ability(Abilities.KLUTZ, 4) + new Ability(AbilityId.KLUTZ, 4) .unimplemented(), - new Ability(Abilities.MOLD_BREAKER, 4) + new Ability(AbilityId.MOLD_BREAKER, 4) .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonMoldBreaker", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) .attr(MoveAbilityBypassAbAttr), - new Ability(Abilities.SUPER_LUCK, 4) + new Ability(AbilityId.SUPER_LUCK, 4) .attr(BonusCritAbAttr), - new Ability(Abilities.AFTERMATH, 4) + new Ability(AbilityId.AFTERMATH, 4) .attr(PostFaintContactDamageAbAttr, 4) .bypassFaint(), - new Ability(Abilities.ANTICIPATION, 4) + new Ability(AbilityId.ANTICIPATION, 4) .conditionalAttr(getAnticipationCondition(), PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonAnticipation", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })), - new Ability(Abilities.FOREWARN, 4) + new Ability(AbilityId.FOREWARN, 4) .attr(ForewarnAbAttr), - new Ability(Abilities.UNAWARE, 4) + new Ability(AbilityId.UNAWARE, 4) .attr(IgnoreOpponentStatStagesAbAttr, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.ACC, Stat.EVA ]) .ignorable(), - new Ability(Abilities.TINTED_LENS, 4) + new Ability(AbilityId.TINTED_LENS, 4) .attr(DamageBoostAbAttr, 2, (user, target, move) => (target?.getMoveEffectiveness(user!, move) ?? 1) <= 0.5), - new Ability(Abilities.FILTER, 4) + new Ability(AbilityId.FILTER, 4) .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => target.getMoveEffectiveness(user, move) >= 2, 0.75) .ignorable(), - new Ability(Abilities.SLOW_START, 4) + new Ability(AbilityId.SLOW_START, 4) .attr(PostSummonAddBattlerTagAbAttr, BattlerTagType.SLOW_START, 5), - new Ability(Abilities.SCRAPPY, 4) + new Ability(AbilityId.SCRAPPY, 4) .attr(IgnoreTypeImmunityAbAttr, PokemonType.GHOST, [ PokemonType.NORMAL, PokemonType.FIGHTING ]) .attr(IntimidateImmunityAbAttr), - new Ability(Abilities.STORM_DRAIN, 4) + new Ability(AbilityId.STORM_DRAIN, 4) .attr(RedirectTypeMoveAbAttr, PokemonType.WATER) .attr(TypeImmunityStatStageChangeAbAttr, PokemonType.WATER, Stat.SPATK, 1) .ignorable(), - new Ability(Abilities.ICE_BODY, 4) + new Ability(AbilityId.ICE_BODY, 4) .attr(BlockWeatherDamageAttr, WeatherType.HAIL) .attr(PostWeatherLapseHealAbAttr, 1, WeatherType.HAIL, WeatherType.SNOW), - new Ability(Abilities.SOLID_ROCK, 4) + new Ability(AbilityId.SOLID_ROCK, 4) .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => target.getMoveEffectiveness(user, move) >= 2, 0.75) .ignorable(), - new Ability(Abilities.SNOW_WARNING, 4) + new Ability(AbilityId.SNOW_WARNING, 4) .attr(PostSummonWeatherChangeAbAttr, WeatherType.SNOW) .attr(PostBiomeChangeWeatherChangeAbAttr, WeatherType.SNOW), - new Ability(Abilities.HONEY_GATHER, 4) + new Ability(AbilityId.HONEY_GATHER, 4) .attr(MoneyAbAttr) .unsuppressable(), - new Ability(Abilities.FRISK, 4) + new Ability(AbilityId.FRISK, 4) .attr(FriskAbAttr), - new Ability(Abilities.RECKLESS, 4) + new Ability(AbilityId.RECKLESS, 4) .attr(MovePowerBoostAbAttr, (user, target, move) => move.hasFlag(MoveFlags.RECKLESS_MOVE), 1.2), - new Ability(Abilities.MULTITYPE, 4) + new Ability(AbilityId.MULTITYPE, 4) .attr(NoFusionAbilityAbAttr) .uncopiable() .unsuppressable() .unreplaceable(), - new Ability(Abilities.FLOWER_GIFT, 4) + new Ability(AbilityId.FLOWER_GIFT, 4) .conditionalAttr(getWeatherCondition(WeatherType.SUNNY || WeatherType.HARSH_SUN), StatMultiplierAbAttr, Stat.ATK, 1.5) .conditionalAttr(getWeatherCondition(WeatherType.SUNNY || WeatherType.HARSH_SUN), StatMultiplierAbAttr, Stat.SPDEF, 1.5) .conditionalAttr(getWeatherCondition(WeatherType.SUNNY || WeatherType.HARSH_SUN), AllyStatMultiplierAbAttr, Stat.ATK, 1.5) .conditionalAttr(getWeatherCondition(WeatherType.SUNNY || WeatherType.HARSH_SUN), AllyStatMultiplierAbAttr, Stat.SPDEF, 1.5) .attr(NoFusionAbilityAbAttr) - .attr(PostSummonFormChangeByWeatherAbAttr, Abilities.FLOWER_GIFT) - .attr(PostWeatherChangeFormChangeAbAttr, Abilities.FLOWER_GIFT, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG, WeatherType.HAIL, WeatherType.HEAVY_RAIN, WeatherType.SNOW, WeatherType.RAIN ]) + .attr(PostSummonFormChangeByWeatherAbAttr, AbilityId.FLOWER_GIFT) + .attr(PostWeatherChangeFormChangeAbAttr, AbilityId.FLOWER_GIFT, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG, WeatherType.HAIL, WeatherType.HEAVY_RAIN, WeatherType.SNOW, WeatherType.RAIN ]) .uncopiable() .unreplaceable() .ignorable(), - new Ability(Abilities.BAD_DREAMS, 4) + new Ability(AbilityId.BAD_DREAMS, 4) .attr(PostTurnHurtIfSleepingAbAttr), - new Ability(Abilities.PICKPOCKET, 5) + new Ability(AbilityId.PICKPOCKET, 5) .attr(PostDefendStealHeldItemAbAttr, (target, user, move) => move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user, target})) .condition(getSheerForceHitDisableAbCondition()), - new Ability(Abilities.SHEER_FORCE, 5) + new Ability(AbilityId.SHEER_FORCE, 5) .attr(MovePowerBoostAbAttr, (user, target, move) => move.chance >= 1, 1.3) .attr(MoveEffectChanceMultiplierAbAttr, 0), // This attribute does not seem to function - Should disable life orb, eject button, red card, kee/maranga berry if they get implemented - new Ability(Abilities.CONTRARY, 5) + new Ability(AbilityId.CONTRARY, 5) .attr(StatStageChangeMultiplierAbAttr, -1) .ignorable(), - new Ability(Abilities.UNNERVE, 5) + new Ability(AbilityId.UNNERVE, 5) .attr(PreventBerryUseAbAttr), - new Ability(Abilities.DEFIANT, 5) + new Ability(AbilityId.DEFIANT, 5) .attr(PostStatStageChangeStatStageChangeAbAttr, (target, statsChanged, stages) => stages < 0, [ Stat.ATK ], 2), - new Ability(Abilities.DEFEATIST, 5) + new Ability(AbilityId.DEFEATIST, 5) .attr(StatMultiplierAbAttr, Stat.ATK, 0.5) .attr(StatMultiplierAbAttr, Stat.SPATK, 0.5) .condition((pokemon) => pokemon.getHpRatio() <= 0.5), - new Ability(Abilities.CURSED_BODY, 5) + new Ability(AbilityId.CURSED_BODY, 5) .attr(PostDefendMoveDisableAbAttr, 30) .bypassFaint(), - new Ability(Abilities.HEALER, 5) + new Ability(AbilityId.HEALER, 5) .conditionalAttr(pokemon => !isNullOrUndefined(pokemon.getAlly()) && randSeedInt(10) < 3, PostTurnResetStatusAbAttr, true), - new Ability(Abilities.FRIEND_GUARD, 5) + new Ability(AbilityId.FRIEND_GUARD, 5) .attr(AlliedFieldDamageReductionAbAttr, 0.75) .ignorable(), - new Ability(Abilities.WEAK_ARMOR, 5) + new Ability(AbilityId.WEAK_ARMOR, 5) .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => move.category === MoveCategory.PHYSICAL, Stat.DEF, -1) .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => move.category === MoveCategory.PHYSICAL, Stat.SPD, 2), - new Ability(Abilities.HEAVY_METAL, 5) + new Ability(AbilityId.HEAVY_METAL, 5) .attr(WeightMultiplierAbAttr, 2) .ignorable(), - new Ability(Abilities.LIGHT_METAL, 5) + new Ability(AbilityId.LIGHT_METAL, 5) .attr(WeightMultiplierAbAttr, 0.5) .ignorable(), - new Ability(Abilities.MULTISCALE, 5) + new Ability(AbilityId.MULTISCALE, 5) .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => target.isFullHp(), 0.5) .ignorable(), - new Ability(Abilities.TOXIC_BOOST, 5) + new Ability(AbilityId.TOXIC_BOOST, 5) .attr(MovePowerBoostAbAttr, (user, target, move) => move.category === MoveCategory.PHYSICAL && (user?.status?.effect === StatusEffect.POISON || user?.status?.effect === StatusEffect.TOXIC), 1.5), - new Ability(Abilities.FLARE_BOOST, 5) + new Ability(AbilityId.FLARE_BOOST, 5) .attr(MovePowerBoostAbAttr, (user, target, move) => move.category === MoveCategory.SPECIAL && user?.status?.effect === StatusEffect.BURN, 1.5), - new Ability(Abilities.HARVEST, 5) + new Ability(AbilityId.HARVEST, 5) .attr( PostTurnRestoreBerryAbAttr, /** Rate is doubled when under sun {@link https://dex.pokemonshowdown.com/abilities/harvest} */ (pokemon) => 0.5 * (getWeatherCondition(WeatherType.SUNNY, WeatherType.HARSH_SUN)(pokemon) ? 2 : 1) ) .edgeCase(), // Cannot recover berries used up by fling or natural gift (unimplemented) - new Ability(Abilities.TELEPATHY, 5) + new Ability(AbilityId.TELEPATHY, 5) .attr(MoveImmunityAbAttr, (pokemon, attacker, move) => pokemon.getAlly() === attacker && move instanceof AttackMove) .ignorable(), - new Ability(Abilities.MOODY, 5) + new Ability(AbilityId.MOODY, 5) .attr(MoodyAbAttr), - new Ability(Abilities.OVERCOAT, 5) + new Ability(AbilityId.OVERCOAT, 5) .attr(BlockWeatherDamageAttr) .attr(MoveImmunityAbAttr, (pokemon, attacker, move) => pokemon !== attacker && move.hasFlag(MoveFlags.POWDER_MOVE)) .ignorable(), - new Ability(Abilities.POISON_TOUCH, 5) + new Ability(AbilityId.POISON_TOUCH, 5) .attr(PostAttackContactApplyStatusEffectAbAttr, 30, StatusEffect.POISON), - new Ability(Abilities.REGENERATOR, 5) + new Ability(AbilityId.REGENERATOR, 5) .attr(PreSwitchOutHealAbAttr), - new Ability(Abilities.BIG_PECKS, 5) + new Ability(AbilityId.BIG_PECKS, 5) .attr(ProtectStatAbAttr, Stat.DEF) .ignorable(), - new Ability(Abilities.SAND_RUSH, 5) + new Ability(AbilityId.SAND_RUSH, 5) .attr(StatMultiplierAbAttr, Stat.SPD, 2) .attr(BlockWeatherDamageAttr, WeatherType.SANDSTORM) .condition(getWeatherCondition(WeatherType.SANDSTORM)), - new Ability(Abilities.WONDER_SKIN, 5) + new Ability(AbilityId.WONDER_SKIN, 5) .attr(WonderSkinAbAttr) .ignorable(), - new Ability(Abilities.ANALYTIC, 5) + new Ability(AbilityId.ANALYTIC, 5) .attr(MovePowerBoostAbAttr, (user, target, move) => { const movePhase = globalScene.findPhase((phase) => phase instanceof MovePhase && phase.pokemon.id !== user?.id); return isNullOrUndefined(movePhase); }, 1.3), - new Ability(Abilities.ILLUSION, 5) + new Ability(AbilityId.ILLUSION, 5) // The Pokemon generate an illusion if it's available .attr(IllusionPreSummonAbAttr, false) .attr(IllusionBreakAbAttr) @@ -6912,47 +6912,47 @@ export function initAbilities() { .conditionalAttr((pokemon) => pokemon.isAllowedInBattle(), IllusionPostBattleAbAttr, false) .uncopiable() .bypassFaint(), - new Ability(Abilities.IMPOSTER, 5) + new Ability(AbilityId.IMPOSTER, 5) .attr(PostSummonTransformAbAttr) .uncopiable(), - new Ability(Abilities.INFILTRATOR, 5) + new Ability(AbilityId.INFILTRATOR, 5) .attr(InfiltratorAbAttr) .partial(), // does not bypass Mist - new Ability(Abilities.MUMMY, 5) - .attr(PostDefendAbilityGiveAbAttr, Abilities.MUMMY) + new Ability(AbilityId.MUMMY, 5) + .attr(PostDefendAbilityGiveAbAttr, AbilityId.MUMMY) .bypassFaint(), - new Ability(Abilities.MOXIE, 5) + new Ability(AbilityId.MOXIE, 5) .attr(PostVictoryStatStageChangeAbAttr, Stat.ATK, 1), - new Ability(Abilities.JUSTIFIED, 5) + new Ability(AbilityId.JUSTIFIED, 5) .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => user.getMoveType(move) === PokemonType.DARK && move.category !== MoveCategory.STATUS, Stat.ATK, 1), - new Ability(Abilities.RATTLED, 5) + new Ability(AbilityId.RATTLED, 5) .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => { const moveType = user.getMoveType(move); return move.category !== MoveCategory.STATUS && (moveType === PokemonType.DARK || moveType === PokemonType.BUG || moveType === PokemonType.GHOST); }, Stat.SPD, 1) .attr(PostIntimidateStatStageChangeAbAttr, [ Stat.SPD ], 1), - new Ability(Abilities.MAGIC_BOUNCE, 5) + new Ability(AbilityId.MAGIC_BOUNCE, 5) .attr(ReflectStatusMoveAbAttr) .ignorable() // Interactions with stomping tantrum, instruct, encore, and probably other moves that // rely on move history .edgeCase(), - new Ability(Abilities.SAP_SIPPER, 5) + new Ability(AbilityId.SAP_SIPPER, 5) .attr(TypeImmunityStatStageChangeAbAttr, PokemonType.GRASS, Stat.ATK, 1) .ignorable(), - new Ability(Abilities.PRANKSTER, 5) + new Ability(AbilityId.PRANKSTER, 5) .attr(ChangeMovePriorityAbAttr, (pokemon, move: Move) => move.category === MoveCategory.STATUS, 1), - new Ability(Abilities.SAND_FORCE, 5) + new Ability(AbilityId.SAND_FORCE, 5) .attr(MoveTypePowerBoostAbAttr, PokemonType.ROCK, 1.3) .attr(MoveTypePowerBoostAbAttr, PokemonType.GROUND, 1.3) .attr(MoveTypePowerBoostAbAttr, PokemonType.STEEL, 1.3) .attr(BlockWeatherDamageAttr, WeatherType.SANDSTORM) .condition(getWeatherCondition(WeatherType.SANDSTORM)), - new Ability(Abilities.IRON_BARBS, 5) + new Ability(AbilityId.IRON_BARBS, 5) .attr(PostDefendContactDamageAbAttr, 8) .bypassFaint(), - new Ability(Abilities.ZEN_MODE, 5) + new Ability(AbilityId.ZEN_MODE, 5) .attr(PostBattleInitFormChangeAbAttr, () => 0) .attr(PostSummonFormChangeAbAttr, p => p.getHpRatio() <= 0.5 ? 1 : 0) .attr(PostTurnFormChangeAbAttr, p => p.getHpRatio() <= 0.5 ? 1 : 0) @@ -6961,19 +6961,19 @@ export function initAbilities() { .unreplaceable() .unsuppressable() .bypassFaint(), - new Ability(Abilities.VICTORY_STAR, 5) + new Ability(AbilityId.VICTORY_STAR, 5) .attr(StatMultiplierAbAttr, Stat.ACC, 1.1) .attr(AllyStatMultiplierAbAttr, Stat.ACC, 1.1, false), - new Ability(Abilities.TURBOBLAZE, 5) + new Ability(AbilityId.TURBOBLAZE, 5) .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonTurboblaze", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) .attr(MoveAbilityBypassAbAttr), - new Ability(Abilities.TERAVOLT, 5) + new Ability(AbilityId.TERAVOLT, 5) .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonTeravolt", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) .attr(MoveAbilityBypassAbAttr), - new Ability(Abilities.AROMA_VEIL, 6) + new Ability(AbilityId.AROMA_VEIL, 6) .attr(UserFieldBattlerTagImmunityAbAttr, [ BattlerTagType.INFATUATED, BattlerTagType.TAUNT, BattlerTagType.DISABLED, BattlerTagType.TORMENT, BattlerTagType.HEAL_BLOCK ]) .ignorable(), - new Ability(Abilities.FLOWER_VEIL, 6) + new Ability(AbilityId.FLOWER_VEIL, 6) .attr(ConditionalUserFieldStatusEffectImmunityAbAttr, (target: Pokemon, source: Pokemon | null) => { return source ? target.getTypes().includes(PokemonType.GRASS) && target.id !== source.id : false; }) @@ -6987,95 +6987,95 @@ export function initAbilities() { return target.getTypes().includes(PokemonType.GRASS); }) .ignorable(), - new Ability(Abilities.CHEEK_POUCH, 6) + new Ability(AbilityId.CHEEK_POUCH, 6) .attr(HealFromBerryUseAbAttr, 1 / 3), - new Ability(Abilities.PROTEAN, 6) + new Ability(AbilityId.PROTEAN, 6) .attr(PokemonTypeChangeAbAttr), - //.condition((p) => !p.summonData.abilitiesApplied.includes(Abilities.PROTEAN)), //Gen 9 Implementation - new Ability(Abilities.FUR_COAT, 6) + //.condition((p) => !p.summonData.abilitiesApplied.includes(AbilityId.PROTEAN)), //Gen 9 Implementation + new Ability(AbilityId.FUR_COAT, 6) .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => move.category === MoveCategory.PHYSICAL, 0.5) .ignorable(), - new Ability(Abilities.MAGICIAN, 6) + new Ability(AbilityId.MAGICIAN, 6) .attr(PostAttackStealHeldItemAbAttr), - new Ability(Abilities.BULLETPROOF, 6) + new Ability(AbilityId.BULLETPROOF, 6) .attr(MoveImmunityAbAttr, (pokemon, attacker, move) => pokemon !== attacker && move.hasFlag(MoveFlags.BALLBOMB_MOVE)) .ignorable(), - new Ability(Abilities.COMPETITIVE, 6) + new Ability(AbilityId.COMPETITIVE, 6) .attr(PostStatStageChangeStatStageChangeAbAttr, (target, statsChanged, stages) => stages < 0, [ Stat.SPATK ], 2), - new Ability(Abilities.STRONG_JAW, 6) + new Ability(AbilityId.STRONG_JAW, 6) .attr(MovePowerBoostAbAttr, (user, target, move) => move.hasFlag(MoveFlags.BITING_MOVE), 1.5), - new Ability(Abilities.REFRIGERATE, 6) + new Ability(AbilityId.REFRIGERATE, 6) .attr(MoveTypeChangeAbAttr, PokemonType.ICE, 1.2, (user, target, move) => move.type === PokemonType.NORMAL), - new Ability(Abilities.SWEET_VEIL, 6) + new Ability(AbilityId.SWEET_VEIL, 6) .attr(UserFieldStatusEffectImmunityAbAttr, StatusEffect.SLEEP) .attr(PostSummonUserFieldRemoveStatusEffectAbAttr, StatusEffect.SLEEP) .attr(UserFieldBattlerTagImmunityAbAttr, BattlerTagType.DROWSY) .ignorable() .partial(), // Mold Breaker ally should not be affected by Sweet Veil - new Ability(Abilities.STANCE_CHANGE, 6) + new Ability(AbilityId.STANCE_CHANGE, 6) .attr(NoFusionAbilityAbAttr) .uncopiable() .unreplaceable() .unsuppressable(), - new Ability(Abilities.GALE_WINGS, 6) + new Ability(AbilityId.GALE_WINGS, 6) .attr(ChangeMovePriorityAbAttr, (pokemon, move) => pokemon.isFullHp() && pokemon.getMoveType(move) === PokemonType.FLYING, 1), - new Ability(Abilities.MEGA_LAUNCHER, 6) + new Ability(AbilityId.MEGA_LAUNCHER, 6) .attr(MovePowerBoostAbAttr, (user, target, move) => move.hasFlag(MoveFlags.PULSE_MOVE), 1.5), - new Ability(Abilities.GRASS_PELT, 6) + new Ability(AbilityId.GRASS_PELT, 6) .conditionalAttr(getTerrainCondition(TerrainType.GRASSY), StatMultiplierAbAttr, Stat.DEF, 1.5) .ignorable(), - new Ability(Abilities.SYMBIOSIS, 6) + new Ability(AbilityId.SYMBIOSIS, 6) .unimplemented(), - new Ability(Abilities.TOUGH_CLAWS, 6) + new Ability(AbilityId.TOUGH_CLAWS, 6) .attr(MovePowerBoostAbAttr, (user, target, move) => move.hasFlag(MoveFlags.MAKES_CONTACT), 1.3), - new Ability(Abilities.PIXILATE, 6) + new Ability(AbilityId.PIXILATE, 6) .attr(MoveTypeChangeAbAttr, PokemonType.FAIRY, 1.2, (user, target, move) => move.type === PokemonType.NORMAL), - new Ability(Abilities.GOOEY, 6) + new Ability(AbilityId.GOOEY, 6) .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => move.hasFlag(MoveFlags.MAKES_CONTACT), Stat.SPD, -1, false), - new Ability(Abilities.AERILATE, 6) + new Ability(AbilityId.AERILATE, 6) .attr(MoveTypeChangeAbAttr, PokemonType.FLYING, 1.2, (user, target, move) => move.type === PokemonType.NORMAL), - new Ability(Abilities.PARENTAL_BOND, 6) + new Ability(AbilityId.PARENTAL_BOND, 6) .attr(AddSecondStrikeAbAttr, 0.25), - new Ability(Abilities.DARK_AURA, 6) + new Ability(AbilityId.DARK_AURA, 6) .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonDarkAura", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) .attr(FieldMoveTypePowerBoostAbAttr, PokemonType.DARK, 4 / 3), - new Ability(Abilities.FAIRY_AURA, 6) + new Ability(AbilityId.FAIRY_AURA, 6) .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonFairyAura", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) .attr(FieldMoveTypePowerBoostAbAttr, PokemonType.FAIRY, 4 / 3), - new Ability(Abilities.AURA_BREAK, 6) + new Ability(AbilityId.AURA_BREAK, 6) .ignorable() - .conditionalAttr(pokemon => globalScene.getField(true).some(p => p.hasAbility(Abilities.DARK_AURA)), FieldMoveTypePowerBoostAbAttr, PokemonType.DARK, 9 / 16) - .conditionalAttr(pokemon => globalScene.getField(true).some(p => p.hasAbility(Abilities.FAIRY_AURA)), FieldMoveTypePowerBoostAbAttr, PokemonType.FAIRY, 9 / 16) - .conditionalAttr(pokemon => globalScene.getField(true).some(p => p.hasAbility(Abilities.DARK_AURA) || p.hasAbility(Abilities.FAIRY_AURA)), + .conditionalAttr(pokemon => globalScene.getField(true).some(p => p.hasAbility(AbilityId.DARK_AURA)), FieldMoveTypePowerBoostAbAttr, PokemonType.DARK, 9 / 16) + .conditionalAttr(pokemon => globalScene.getField(true).some(p => p.hasAbility(AbilityId.FAIRY_AURA)), FieldMoveTypePowerBoostAbAttr, PokemonType.FAIRY, 9 / 16) + .conditionalAttr(pokemon => globalScene.getField(true).some(p => p.hasAbility(AbilityId.DARK_AURA) || p.hasAbility(AbilityId.FAIRY_AURA)), PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonAuraBreak", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })), - new Ability(Abilities.PRIMORDIAL_SEA, 6) + new Ability(AbilityId.PRIMORDIAL_SEA, 6) .attr(PostSummonWeatherChangeAbAttr, WeatherType.HEAVY_RAIN) .attr(PostBiomeChangeWeatherChangeAbAttr, WeatherType.HEAVY_RAIN) .attr(PreLeaveFieldClearWeatherAbAttr) .bypassFaint(), - new Ability(Abilities.DESOLATE_LAND, 6) + new Ability(AbilityId.DESOLATE_LAND, 6) .attr(PostSummonWeatherChangeAbAttr, WeatherType.HARSH_SUN) .attr(PostBiomeChangeWeatherChangeAbAttr, WeatherType.HARSH_SUN) .attr(PreLeaveFieldClearWeatherAbAttr) .bypassFaint(), - new Ability(Abilities.DELTA_STREAM, 6) + new Ability(AbilityId.DELTA_STREAM, 6) .attr(PostSummonWeatherChangeAbAttr, WeatherType.STRONG_WINDS) .attr(PostBiomeChangeWeatherChangeAbAttr, WeatherType.STRONG_WINDS) .attr(PreLeaveFieldClearWeatherAbAttr) .bypassFaint(), - new Ability(Abilities.STAMINA, 7) + new Ability(AbilityId.STAMINA, 7) .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, Stat.DEF, 1), - new Ability(Abilities.WIMP_OUT, 7) + new Ability(AbilityId.WIMP_OUT, 7) .attr(PostDamageForceSwitchAbAttr) .edgeCase(), // Should not trigger when hurting itself in confusion, causes Fake Out to fail turn 1 and succeed turn 2 if pokemon is switched out before battle start via playing in Switch Mode - new Ability(Abilities.EMERGENCY_EXIT, 7) + new Ability(AbilityId.EMERGENCY_EXIT, 7) .attr(PostDamageForceSwitchAbAttr) .edgeCase(), // Should not trigger when hurting itself in confusion, causes Fake Out to fail turn 1 and succeed turn 2 if pokemon is switched out before battle start via playing in Switch Mode - new Ability(Abilities.WATER_COMPACTION, 7) + new Ability(AbilityId.WATER_COMPACTION, 7) .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => user.getMoveType(move) === PokemonType.WATER && move.category !== MoveCategory.STATUS, Stat.DEF, 2), - new Ability(Abilities.MERCILESS, 7) + new Ability(AbilityId.MERCILESS, 7) .attr(ConditionalCritAbAttr, (user, target, move) => target?.status?.effect === StatusEffect.TOXIC || target?.status?.effect === StatusEffect.POISON), - new Ability(Abilities.SHIELDS_DOWN, 7) + new Ability(AbilityId.SHIELDS_DOWN, 7) .attr(PostBattleInitFormChangeAbAttr, () => 0) .attr(PostSummonFormChangeAbAttr, p => p.formIndex % 7 + (p.getHpRatio() <= 0.5 ? 7 : 0)) .attr(PostTurnFormChangeAbAttr, p => p.formIndex % 7 + (p.getHpRatio() <= 0.5 ? 7 : 0)) @@ -7087,33 +7087,33 @@ export function initAbilities() { .unreplaceable() .unsuppressable() .bypassFaint(), - new Ability(Abilities.STAKEOUT, 7) + new Ability(AbilityId.STAKEOUT, 7) .attr(MovePowerBoostAbAttr, (user, target, move) => !!target?.turnData.switchedInThisTurn, 2), - new Ability(Abilities.WATER_BUBBLE, 7) + new Ability(AbilityId.WATER_BUBBLE, 7) .attr(ReceivedTypeDamageMultiplierAbAttr, PokemonType.FIRE, 0.5) .attr(MoveTypePowerBoostAbAttr, PokemonType.WATER, 2) .attr(StatusEffectImmunityAbAttr, StatusEffect.BURN) .attr(PostSummonHealStatusAbAttr, StatusEffect.BURN) .ignorable(), - new Ability(Abilities.STEELWORKER, 7) + new Ability(AbilityId.STEELWORKER, 7) .attr(MoveTypePowerBoostAbAttr, PokemonType.STEEL), - new Ability(Abilities.BERSERK, 7) + new Ability(AbilityId.BERSERK, 7) .attr(PostDefendHpGatedStatStageChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, 0.5, [ Stat.SPATK ], 1) .condition(getSheerForceHitDisableAbCondition()), - new Ability(Abilities.SLUSH_RUSH, 7) + new Ability(AbilityId.SLUSH_RUSH, 7) .attr(StatMultiplierAbAttr, Stat.SPD, 2) .condition(getWeatherCondition(WeatherType.HAIL, WeatherType.SNOW)), - new Ability(Abilities.LONG_REACH, 7) + new Ability(AbilityId.LONG_REACH, 7) .attr(IgnoreContactAbAttr), - new Ability(Abilities.LIQUID_VOICE, 7) + new Ability(AbilityId.LIQUID_VOICE, 7) .attr(MoveTypeChangeAbAttr, PokemonType.WATER, 1, (user, target, move) => move.hasFlag(MoveFlags.SOUND_BASED)), - new Ability(Abilities.TRIAGE, 7) + new Ability(AbilityId.TRIAGE, 7) .attr(ChangeMovePriorityAbAttr, (pokemon, move) => move.hasFlag(MoveFlags.TRIAGE_MOVE), 3), - new Ability(Abilities.GALVANIZE, 7) + new Ability(AbilityId.GALVANIZE, 7) .attr(MoveTypeChangeAbAttr, PokemonType.ELECTRIC, 1.2, (_user, _target, move) => move.type === PokemonType.NORMAL), - new Ability(Abilities.SURGE_SURFER, 7) + new Ability(AbilityId.SURGE_SURFER, 7) .conditionalAttr(getTerrainCondition(TerrainType.ELECTRIC), StatMultiplierAbAttr, Stat.SPD, 2), - new Ability(Abilities.SCHOOLING, 7) + new Ability(AbilityId.SCHOOLING, 7) .attr(PostBattleInitFormChangeAbAttr, () => 0) .attr(PostSummonFormChangeAbAttr, p => p.level < 20 || p.getHpRatio() <= 0.25 ? 0 : 1) .attr(PostTurnFormChangeAbAttr, p => p.level < 20 || p.getHpRatio() <= 0.25 ? 0 : 1) @@ -7122,7 +7122,7 @@ export function initAbilities() { .unreplaceable() .unsuppressable() .bypassFaint(), - new Ability(Abilities.DISGUISE, 7) + new Ability(AbilityId.DISGUISE, 7) .attr(NoTransformAbilityAbAttr) .attr(NoFusionAbilityAbAttr) // Add BattlerTagType.DISGUISE if the pokemon is in its disguised form @@ -7137,7 +7137,7 @@ export function initAbilities() { .unsuppressable() .bypassFaint() .ignorable(), - new Ability(Abilities.BATTLE_BOND, 7) + new Ability(AbilityId.BATTLE_BOND, 7) .attr(PostVictoryFormChangeAbAttr, () => 2) .attr(PostBattleInitFormChangeAbAttr, () => 1) .attr(NoFusionAbilityAbAttr) @@ -7145,7 +7145,7 @@ export function initAbilities() { .unreplaceable() .unsuppressable() .bypassFaint(), - new Ability(Abilities.POWER_CONSTRUCT, 7) + new Ability(AbilityId.POWER_CONSTRUCT, 7) .conditionalAttr(pokemon => pokemon.formIndex === 2 || pokemon.formIndex === 4, PostBattleInitFormChangeAbAttr, () => 2) .conditionalAttr(pokemon => pokemon.formIndex === 3 || pokemon.formIndex === 5, PostBattleInitFormChangeAbAttr, () => 3) .conditionalAttr(pokemon => pokemon.formIndex === 2 || pokemon.formIndex === 4, PostSummonFormChangeAbAttr, p => p.getHpRatio() <= 0.5 || p.getFormKey() === "complete" ? 4 : 2) @@ -7157,43 +7157,43 @@ export function initAbilities() { .unreplaceable() .unsuppressable() .bypassFaint(), - new Ability(Abilities.CORROSION, 7) + new Ability(AbilityId.CORROSION, 7) .attr(IgnoreTypeStatusEffectImmunityAbAttr, [ StatusEffect.POISON, StatusEffect.TOXIC ], [ PokemonType.STEEL, PokemonType.POISON ]) .edgeCase(), // Should poison itself with toxic orb. - new Ability(Abilities.COMATOSE, 7) + new Ability(AbilityId.COMATOSE, 7) .attr(StatusEffectImmunityAbAttr, ...getNonVolatileStatusEffects()) .attr(BattlerTagImmunityAbAttr, BattlerTagType.DROWSY) .uncopiable() .unreplaceable() .unsuppressable(), - new Ability(Abilities.QUEENLY_MAJESTY, 7) + new Ability(AbilityId.QUEENLY_MAJESTY, 7) .attr(FieldPriorityMoveImmunityAbAttr) .ignorable(), - new Ability(Abilities.INNARDS_OUT, 7) + new Ability(AbilityId.INNARDS_OUT, 7) .attr(PostFaintHPDamageAbAttr) .bypassFaint(), - new Ability(Abilities.DANCER, 7) + new Ability(AbilityId.DANCER, 7) .attr(PostDancingMoveAbAttr), - new Ability(Abilities.BATTERY, 7) + new Ability(AbilityId.BATTERY, 7) .attr(AllyMoveCategoryPowerBoostAbAttr, [ MoveCategory.SPECIAL ], 1.3), - new Ability(Abilities.FLUFFY, 7) + new Ability(AbilityId.FLUFFY, 7) .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user, target}), 0.5) .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => user.getMoveType(move) === PokemonType.FIRE, 2) .ignorable(), - new Ability(Abilities.DAZZLING, 7) + new Ability(AbilityId.DAZZLING, 7) .attr(FieldPriorityMoveImmunityAbAttr) .ignorable(), - new Ability(Abilities.SOUL_HEART, 7) + new Ability(AbilityId.SOUL_HEART, 7) .attr(PostKnockOutStatStageChangeAbAttr, Stat.SPATK, 1), - new Ability(Abilities.TANGLING_HAIR, 7) + new Ability(AbilityId.TANGLING_HAIR, 7) .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user, target}), Stat.SPD, -1, false), - new Ability(Abilities.RECEIVER, 7) + new Ability(AbilityId.RECEIVER, 7) .attr(CopyFaintedAllyAbilityAbAttr) .uncopiable(), - new Ability(Abilities.POWER_OF_ALCHEMY, 7) + new Ability(AbilityId.POWER_OF_ALCHEMY, 7) .attr(CopyFaintedAllyAbilityAbAttr) .uncopiable(), - new Ability(Abilities.BEAST_BOOST, 7) + new Ability(AbilityId.BEAST_BOOST, 7) .attr(PostVictoryStatStageChangeAbAttr, p => { let highestStat: EffectiveStat; let highestValue = 0; @@ -7206,47 +7206,47 @@ export function initAbilities() { } return highestStat!; }, 1), - new Ability(Abilities.RKS_SYSTEM, 7) + new Ability(AbilityId.RKS_SYSTEM, 7) .attr(NoFusionAbilityAbAttr) .uncopiable() .unreplaceable() .unsuppressable(), - new Ability(Abilities.ELECTRIC_SURGE, 7) + new Ability(AbilityId.ELECTRIC_SURGE, 7) .attr(PostSummonTerrainChangeAbAttr, TerrainType.ELECTRIC) .attr(PostBiomeChangeTerrainChangeAbAttr, TerrainType.ELECTRIC), - new Ability(Abilities.PSYCHIC_SURGE, 7) + new Ability(AbilityId.PSYCHIC_SURGE, 7) .attr(PostSummonTerrainChangeAbAttr, TerrainType.PSYCHIC) .attr(PostBiomeChangeTerrainChangeAbAttr, TerrainType.PSYCHIC), - new Ability(Abilities.MISTY_SURGE, 7) + new Ability(AbilityId.MISTY_SURGE, 7) .attr(PostSummonTerrainChangeAbAttr, TerrainType.MISTY) .attr(PostBiomeChangeTerrainChangeAbAttr, TerrainType.MISTY), - new Ability(Abilities.GRASSY_SURGE, 7) + new Ability(AbilityId.GRASSY_SURGE, 7) .attr(PostSummonTerrainChangeAbAttr, TerrainType.GRASSY) .attr(PostBiomeChangeTerrainChangeAbAttr, TerrainType.GRASSY), - new Ability(Abilities.FULL_METAL_BODY, 7) + new Ability(AbilityId.FULL_METAL_BODY, 7) .attr(ProtectStatAbAttr), - new Ability(Abilities.SHADOW_SHIELD, 7) + new Ability(AbilityId.SHADOW_SHIELD, 7) .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => target.isFullHp(), 0.5), - new Ability(Abilities.PRISM_ARMOR, 7) + new Ability(AbilityId.PRISM_ARMOR, 7) .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => target.getMoveEffectiveness(user, move) >= 2, 0.75), - new Ability(Abilities.NEUROFORCE, 7) + new Ability(AbilityId.NEUROFORCE, 7) .attr(MovePowerBoostAbAttr, (user, target, move) => (target?.getMoveEffectiveness(user!, move) ?? 1) >= 2, 1.25), - new Ability(Abilities.INTREPID_SWORD, 8) + new Ability(AbilityId.INTREPID_SWORD, 8) .attr(PostSummonStatStageChangeAbAttr, [ Stat.ATK ], 1, true), - new Ability(Abilities.DAUNTLESS_SHIELD, 8) + new Ability(AbilityId.DAUNTLESS_SHIELD, 8) .attr(PostSummonStatStageChangeAbAttr, [ Stat.DEF ], 1, true), - new Ability(Abilities.LIBERO, 8) + new Ability(AbilityId.LIBERO, 8) .attr(PokemonTypeChangeAbAttr), - //.condition((p) => !p.summonData.abilitiesApplied.includes(Abilities.LIBERO)), //Gen 9 Implementation - new Ability(Abilities.BALL_FETCH, 8) + //.condition((p) => !p.summonData.abilitiesApplied.includes(AbilityId.LIBERO)), //Gen 9 Implementation + new Ability(AbilityId.BALL_FETCH, 8) .attr(FetchBallAbAttr) - .condition(getOncePerBattleCondition(Abilities.BALL_FETCH)), - new Ability(Abilities.COTTON_DOWN, 8) + .condition(getOncePerBattleCondition(AbilityId.BALL_FETCH)), + new Ability(AbilityId.COTTON_DOWN, 8) .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, Stat.SPD, -1, false, true) .bypassFaint(), - new Ability(Abilities.PROPELLER_TAIL, 8) + new Ability(AbilityId.PROPELLER_TAIL, 8) .attr(BlockRedirectAbAttr), - new Ability(Abilities.MIRROR_ARMOR, 8) + new Ability(AbilityId.MIRROR_ARMOR, 8) .attr(ReflectStatStageChangeAbAttr) .ignorable(), /** @@ -7255,34 +7255,34 @@ export function initAbilities() { * where Cramorant is fainted. * @see {@linkcode GulpMissileTagAttr} and {@linkcode GulpMissileTag} for Gulp Missile implementation */ - new Ability(Abilities.GULP_MISSILE, 8) + new Ability(AbilityId.GULP_MISSILE, 8) .attr(NoTransformAbilityAbAttr) .attr(NoFusionAbilityAbAttr) .unsuppressable() .uncopiable() .unreplaceable() .bypassFaint(), - new Ability(Abilities.STALWART, 8) + new Ability(AbilityId.STALWART, 8) .attr(BlockRedirectAbAttr), - new Ability(Abilities.STEAM_ENGINE, 8) + new Ability(AbilityId.STEAM_ENGINE, 8) .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => { const moveType = user.getMoveType(move); return move.category !== MoveCategory.STATUS && (moveType === PokemonType.FIRE || moveType === PokemonType.WATER); }, Stat.SPD, 6), - new Ability(Abilities.PUNK_ROCK, 8) + new Ability(AbilityId.PUNK_ROCK, 8) .attr(MovePowerBoostAbAttr, (user, target, move) => move.hasFlag(MoveFlags.SOUND_BASED), 1.3) .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => move.hasFlag(MoveFlags.SOUND_BASED), 0.5) .ignorable(), - new Ability(Abilities.SAND_SPIT, 8) + new Ability(AbilityId.SAND_SPIT, 8) .attr(PostDefendWeatherChangeAbAttr, WeatherType.SANDSTORM, (target, user, move) => move.category !== MoveCategory.STATUS) .bypassFaint(), - new Ability(Abilities.ICE_SCALES, 8) + new Ability(AbilityId.ICE_SCALES, 8) .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => move.category === MoveCategory.SPECIAL, 0.5) .ignorable(), - new Ability(Abilities.RIPEN, 8) + new Ability(AbilityId.RIPEN, 8) .attr(DoubleBerryEffectAbAttr), - new Ability(Abilities.ICE_FACE, 8) + new Ability(AbilityId.ICE_FACE, 8) .attr(NoTransformAbilityAbAttr) .attr(NoFusionAbilityAbAttr) // Add BattlerTagType.ICE_FACE if the pokemon is in ice face form @@ -7300,34 +7300,34 @@ export function initAbilities() { .unsuppressable() .bypassFaint() .ignorable(), - new Ability(Abilities.POWER_SPOT, 8) + new Ability(AbilityId.POWER_SPOT, 8) .attr(AllyMoveCategoryPowerBoostAbAttr, [ MoveCategory.SPECIAL, MoveCategory.PHYSICAL ], 1.3), - new Ability(Abilities.MIMICRY, 8) + new Ability(AbilityId.MIMICRY, 8) .attr(TerrainEventTypeChangeAbAttr), - new Ability(Abilities.SCREEN_CLEANER, 8) + new Ability(AbilityId.SCREEN_CLEANER, 8) .attr(PostSummonRemoveArenaTagAbAttr, [ ArenaTagType.AURORA_VEIL, ArenaTagType.LIGHT_SCREEN, ArenaTagType.REFLECT ]), - new Ability(Abilities.STEELY_SPIRIT, 8) + new Ability(AbilityId.STEELY_SPIRIT, 8) .attr(UserFieldMoveTypePowerBoostAbAttr, PokemonType.STEEL), - new Ability(Abilities.PERISH_BODY, 8) + new Ability(AbilityId.PERISH_BODY, 8) .attr(PostDefendPerishSongAbAttr, 4) .bypassFaint(), - new Ability(Abilities.WANDERING_SPIRIT, 8) + new Ability(AbilityId.WANDERING_SPIRIT, 8) .attr(PostDefendAbilitySwapAbAttr) .bypassFaint() .edgeCase(), // interacts incorrectly with rock head. It's meant to switch abilities before recoil would apply so that a pokemon with rock head would lose rock head first and still take the recoil - new Ability(Abilities.GORILLA_TACTICS, 8) + new Ability(AbilityId.GORILLA_TACTICS, 8) .attr(GorillaTacticsAbAttr), - new Ability(Abilities.NEUTRALIZING_GAS, 8) + new Ability(AbilityId.NEUTRALIZING_GAS, 8) .attr(PostSummonAddArenaTagAbAttr, true, ArenaTagType.NEUTRALIZING_GAS, 0) .attr(PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr) .uncopiable() .attr(NoTransformAbilityAbAttr) .bypassFaint(), - new Ability(Abilities.PASTEL_VEIL, 8) + new Ability(AbilityId.PASTEL_VEIL, 8) .attr(PostSummonUserFieldRemoveStatusEffectAbAttr, StatusEffect.POISON, StatusEffect.TOXIC) .attr(UserFieldStatusEffectImmunityAbAttr, StatusEffect.POISON, StatusEffect.TOXIC) .ignorable(), - new Ability(Abilities.HUNGER_SWITCH, 8) + new Ability(AbilityId.HUNGER_SWITCH, 8) .attr(PostTurnFormChangeAbAttr, p => p.getFormKey() ? 0 : 1) .attr(PostTurnFormChangeAbAttr, p => p.getFormKey() ? 1 : 0) .attr(NoTransformAbilityAbAttr) @@ -7335,69 +7335,69 @@ export function initAbilities() { .condition((pokemon) => !pokemon.isTerastallized) .uncopiable() .unreplaceable(), - new Ability(Abilities.QUICK_DRAW, 8) + new Ability(AbilityId.QUICK_DRAW, 8) .attr(BypassSpeedChanceAbAttr, 30), - new Ability(Abilities.UNSEEN_FIST, 8) + new Ability(AbilityId.UNSEEN_FIST, 8) .attr(IgnoreProtectOnContactAbAttr), - new Ability(Abilities.CURIOUS_MEDICINE, 8) + new Ability(AbilityId.CURIOUS_MEDICINE, 8) .attr(PostSummonClearAllyStatStagesAbAttr), - new Ability(Abilities.TRANSISTOR, 8) + new Ability(AbilityId.TRANSISTOR, 8) .attr(MoveTypePowerBoostAbAttr, PokemonType.ELECTRIC, 1.3), - new Ability(Abilities.DRAGONS_MAW, 8) + new Ability(AbilityId.DRAGONS_MAW, 8) .attr(MoveTypePowerBoostAbAttr, PokemonType.DRAGON), - new Ability(Abilities.CHILLING_NEIGH, 8) + new Ability(AbilityId.CHILLING_NEIGH, 8) .attr(PostVictoryStatStageChangeAbAttr, Stat.ATK, 1), - new Ability(Abilities.GRIM_NEIGH, 8) + new Ability(AbilityId.GRIM_NEIGH, 8) .attr(PostVictoryStatStageChangeAbAttr, Stat.SPATK, 1), - new Ability(Abilities.AS_ONE_GLASTRIER, 8) + new Ability(AbilityId.AS_ONE_GLASTRIER, 8) .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonAsOneGlastrier", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) .attr(PreventBerryUseAbAttr) .attr(PostVictoryStatStageChangeAbAttr, Stat.ATK, 1) .uncopiable() .unreplaceable() .unsuppressable(), - new Ability(Abilities.AS_ONE_SPECTRIER, 8) + new Ability(AbilityId.AS_ONE_SPECTRIER, 8) .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonAsOneSpectrier", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) .attr(PreventBerryUseAbAttr) .attr(PostVictoryStatStageChangeAbAttr, Stat.SPATK, 1) .uncopiable() .unreplaceable() .unsuppressable(), - new Ability(Abilities.LINGERING_AROMA, 9) - .attr(PostDefendAbilityGiveAbAttr, Abilities.LINGERING_AROMA) + new Ability(AbilityId.LINGERING_AROMA, 9) + .attr(PostDefendAbilityGiveAbAttr, AbilityId.LINGERING_AROMA) .bypassFaint(), - new Ability(Abilities.SEED_SOWER, 9) + new Ability(AbilityId.SEED_SOWER, 9) .attr(PostDefendTerrainChangeAbAttr, TerrainType.GRASSY) .bypassFaint(), - new Ability(Abilities.THERMAL_EXCHANGE, 9) + new Ability(AbilityId.THERMAL_EXCHANGE, 9) .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => user.getMoveType(move) === PokemonType.FIRE && move.category !== MoveCategory.STATUS, Stat.ATK, 1) .attr(StatusEffectImmunityAbAttr, StatusEffect.BURN) .attr(PostSummonHealStatusAbAttr, StatusEffect.BURN) .ignorable(), - new Ability(Abilities.ANGER_SHELL, 9) + new Ability(AbilityId.ANGER_SHELL, 9) .attr(PostDefendHpGatedStatStageChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, 0.5, [ Stat.ATK, Stat.SPATK, Stat.SPD ], 1) .attr(PostDefendHpGatedStatStageChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, 0.5, [ Stat.DEF, Stat.SPDEF ], -1) .condition(getSheerForceHitDisableAbCondition()), - new Ability(Abilities.PURIFYING_SALT, 9) + new Ability(AbilityId.PURIFYING_SALT, 9) .attr(StatusEffectImmunityAbAttr) .attr(ReceivedTypeDamageMultiplierAbAttr, PokemonType.GHOST, 0.5) .ignorable(), - new Ability(Abilities.WELL_BAKED_BODY, 9) + new Ability(AbilityId.WELL_BAKED_BODY, 9) .attr(TypeImmunityStatStageChangeAbAttr, PokemonType.FIRE, Stat.DEF, 2) .ignorable(), - new Ability(Abilities.WIND_RIDER, 9) + new Ability(AbilityId.WIND_RIDER, 9) .attr(MoveImmunityStatStageChangeAbAttr, (pokemon, attacker, move) => pokemon !== attacker && move.hasFlag(MoveFlags.WIND_MOVE) && move.category !== MoveCategory.STATUS, Stat.ATK, 1) .attr(PostSummonStatStageChangeOnArenaAbAttr, ArenaTagType.TAILWIND) .ignorable(), - new Ability(Abilities.GUARD_DOG, 9) + new Ability(AbilityId.GUARD_DOG, 9) .attr(PostIntimidateStatStageChangeAbAttr, [ Stat.ATK ], 1, true) .attr(ForceSwitchOutImmunityAbAttr) .ignorable(), - new Ability(Abilities.ROCKY_PAYLOAD, 9) + new Ability(AbilityId.ROCKY_PAYLOAD, 9) .attr(MoveTypePowerBoostAbAttr, PokemonType.ROCK), - new Ability(Abilities.WIND_POWER, 9) + new Ability(AbilityId.WIND_POWER, 9) .attr(PostDefendApplyBattlerTagAbAttr, (target, user, move) => move.hasFlag(MoveFlags.WIND_MOVE), BattlerTagType.CHARGED), - new Ability(Abilities.ZERO_TO_HERO, 9) + new Ability(AbilityId.ZERO_TO_HERO, 9) .uncopiable() .unreplaceable() .unsuppressable() @@ -7406,25 +7406,25 @@ export function initAbilities() { .attr(PostBattleInitFormChangeAbAttr, () => 0) .attr(PreSwitchOutFormChangeAbAttr, (pokemon) => !pokemon.isFainted() ? 1 : pokemon.formIndex) .bypassFaint(), - new Ability(Abilities.COMMANDER, 9) + new Ability(AbilityId.COMMANDER, 9) .attr(CommanderAbAttr) .attr(DoubleBattleChanceAbAttr) .uncopiable() .unreplaceable() .edgeCase(), // Encore, Frenzy, and other non-`TURN_END` tags don't lapse correctly on the commanding Pokemon. - new Ability(Abilities.ELECTROMORPHOSIS, 9) + new Ability(AbilityId.ELECTROMORPHOSIS, 9) .attr(PostDefendApplyBattlerTagAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, BattlerTagType.CHARGED), - new Ability(Abilities.PROTOSYNTHESIS, 9) + new Ability(AbilityId.PROTOSYNTHESIS, 9) .conditionalAttr(getWeatherCondition(WeatherType.SUNNY, WeatherType.HARSH_SUN), PostSummonAddBattlerTagAbAttr, BattlerTagType.PROTOSYNTHESIS, 0, true) .attr(PostWeatherChangeAddBattlerTagAttr, BattlerTagType.PROTOSYNTHESIS, 0, WeatherType.SUNNY, WeatherType.HARSH_SUN) .uncopiable() .attr(NoTransformAbilityAbAttr), - new Ability(Abilities.QUARK_DRIVE, 9) + new Ability(AbilityId.QUARK_DRIVE, 9) .conditionalAttr(getTerrainCondition(TerrainType.ELECTRIC), PostSummonAddBattlerTagAbAttr, BattlerTagType.QUARK_DRIVE, 0, true) .attr(PostTerrainChangeAddBattlerTagAttr, BattlerTagType.QUARK_DRIVE, 0, TerrainType.ELECTRIC) .uncopiable() .attr(NoTransformAbilityAbAttr), - new Ability(Abilities.GOOD_AS_GOLD, 9) + new Ability(AbilityId.GOOD_AS_GOLD, 9) .attr(MoveImmunityAbAttr, (pokemon, attacker, move) => pokemon !== attacker && move.category === MoveCategory.STATUS @@ -7432,102 +7432,102 @@ export function initAbilities() { ) .edgeCase() // Heal Bell should not cure the status of a Pokemon with Good As Gold .ignorable(), - new Ability(Abilities.VESSEL_OF_RUIN, 9) + new Ability(AbilityId.VESSEL_OF_RUIN, 9) .attr(FieldMultiplyStatAbAttr, Stat.SPATK, 0.75) .attr(PostSummonMessageAbAttr, (user) => i18next.t("abilityTriggers:postSummonVesselOfRuin", { pokemonNameWithAffix: getPokemonNameWithAffix(user), statName: i18next.t(getStatKey(Stat.SPATK)) })) .ignorable(), - new Ability(Abilities.SWORD_OF_RUIN, 9) + new Ability(AbilityId.SWORD_OF_RUIN, 9) .attr(FieldMultiplyStatAbAttr, Stat.DEF, 0.75) .attr(PostSummonMessageAbAttr, (user) => i18next.t("abilityTriggers:postSummonSwordOfRuin", { pokemonNameWithAffix: getPokemonNameWithAffix(user), statName: i18next.t(getStatKey(Stat.DEF)) })), - new Ability(Abilities.TABLETS_OF_RUIN, 9) + new Ability(AbilityId.TABLETS_OF_RUIN, 9) .attr(FieldMultiplyStatAbAttr, Stat.ATK, 0.75) .attr(PostSummonMessageAbAttr, (user) => i18next.t("abilityTriggers:postSummonTabletsOfRuin", { pokemonNameWithAffix: getPokemonNameWithAffix(user), statName: i18next.t(getStatKey(Stat.ATK)) })) .ignorable(), - new Ability(Abilities.BEADS_OF_RUIN, 9) + new Ability(AbilityId.BEADS_OF_RUIN, 9) .attr(FieldMultiplyStatAbAttr, Stat.SPDEF, 0.75) .attr(PostSummonMessageAbAttr, (user) => i18next.t("abilityTriggers:postSummonBeadsOfRuin", { pokemonNameWithAffix: getPokemonNameWithAffix(user), statName: i18next.t(getStatKey(Stat.SPDEF)) })), - new Ability(Abilities.ORICHALCUM_PULSE, 9) + new Ability(AbilityId.ORICHALCUM_PULSE, 9) .attr(PostSummonWeatherChangeAbAttr, WeatherType.SUNNY) .attr(PostBiomeChangeWeatherChangeAbAttr, WeatherType.SUNNY) .conditionalAttr(getWeatherCondition(WeatherType.SUNNY, WeatherType.HARSH_SUN), StatMultiplierAbAttr, Stat.ATK, 4 / 3), - new Ability(Abilities.HADRON_ENGINE, 9) + new Ability(AbilityId.HADRON_ENGINE, 9) .attr(PostSummonTerrainChangeAbAttr, TerrainType.ELECTRIC) .attr(PostBiomeChangeTerrainChangeAbAttr, TerrainType.ELECTRIC) .conditionalAttr(getTerrainCondition(TerrainType.ELECTRIC), StatMultiplierAbAttr, Stat.SPATK, 4 / 3), - new Ability(Abilities.OPPORTUNIST, 9) + new Ability(AbilityId.OPPORTUNIST, 9) .attr(StatStageChangeCopyAbAttr), - new Ability(Abilities.CUD_CHEW, 9) + new Ability(AbilityId.CUD_CHEW, 9) .attr(RepeatBerryNextTurnAbAttr), - new Ability(Abilities.SHARPNESS, 9) + new Ability(AbilityId.SHARPNESS, 9) .attr(MovePowerBoostAbAttr, (user, target, move) => move.hasFlag(MoveFlags.SLICING_MOVE), 1.5), - new Ability(Abilities.SUPREME_OVERLORD, 9) + new Ability(AbilityId.SUPREME_OVERLORD, 9) .attr(VariableMovePowerBoostAbAttr, (user, target, move) => 1 + 0.1 * Math.min(user.isPlayer() ? globalScene.arena.playerFaints : globalScene.currentBattle.enemyFaints, 5)) .partial(), // Should only boost once, on summon - new Ability(Abilities.COSTAR, 9) + new Ability(AbilityId.COSTAR, 9) .attr(PostSummonCopyAllyStatsAbAttr), - new Ability(Abilities.TOXIC_DEBRIS, 9) + new Ability(AbilityId.TOXIC_DEBRIS, 9) .attr(PostDefendApplyArenaTrapTagAbAttr, (target, user, move) => move.category === MoveCategory.PHYSICAL, ArenaTagType.TOXIC_SPIKES) .bypassFaint(), - new Ability(Abilities.ARMOR_TAIL, 9) + new Ability(AbilityId.ARMOR_TAIL, 9) .attr(FieldPriorityMoveImmunityAbAttr) .ignorable(), - new Ability(Abilities.EARTH_EATER, 9) + new Ability(AbilityId.EARTH_EATER, 9) .attr(TypeImmunityHealAbAttr, PokemonType.GROUND) .ignorable(), - new Ability(Abilities.MYCELIUM_MIGHT, 9) + new Ability(AbilityId.MYCELIUM_MIGHT, 9) .attr(ChangeMovePriorityAbAttr, (pokemon, move) => move.category === MoveCategory.STATUS, -0.2) .attr(PreventBypassSpeedChanceAbAttr, (pokemon, move) => move.category === MoveCategory.STATUS) .attr(MoveAbilityBypassAbAttr, (pokemon, move: Move) => move.category === MoveCategory.STATUS), - new Ability(Abilities.MINDS_EYE, 9) + new Ability(AbilityId.MINDS_EYE, 9) .attr(IgnoreTypeImmunityAbAttr, PokemonType.GHOST, [ PokemonType.NORMAL, PokemonType.FIGHTING ]) .attr(ProtectStatAbAttr, Stat.ACC) .attr(IgnoreOpponentStatStagesAbAttr, [ Stat.EVA ]) .ignorable(), - new Ability(Abilities.SUPERSWEET_SYRUP, 9) + new Ability(AbilityId.SUPERSWEET_SYRUP, 9) .attr(PostSummonStatStageChangeAbAttr, [ Stat.EVA ], -1), - new Ability(Abilities.HOSPITALITY, 9) + new Ability(AbilityId.HOSPITALITY, 9) .attr(PostSummonAllyHealAbAttr, 4, true), - new Ability(Abilities.TOXIC_CHAIN, 9) + new Ability(AbilityId.TOXIC_CHAIN, 9) .attr(PostAttackApplyStatusEffectAbAttr, false, 30, StatusEffect.TOXIC), - new Ability(Abilities.EMBODY_ASPECT_TEAL, 9) + new Ability(AbilityId.EMBODY_ASPECT_TEAL, 9) .attr(PostTeraFormChangeStatChangeAbAttr, [ Stat.SPD ], 1) .uncopiable() .unreplaceable() // TODO is this true? .attr(NoTransformAbilityAbAttr), - new Ability(Abilities.EMBODY_ASPECT_WELLSPRING, 9) + new Ability(AbilityId.EMBODY_ASPECT_WELLSPRING, 9) .attr(PostTeraFormChangeStatChangeAbAttr, [ Stat.SPDEF ], 1) .uncopiable() .unreplaceable() .attr(NoTransformAbilityAbAttr), - new Ability(Abilities.EMBODY_ASPECT_HEARTHFLAME, 9) + new Ability(AbilityId.EMBODY_ASPECT_HEARTHFLAME, 9) .attr(PostTeraFormChangeStatChangeAbAttr, [ Stat.ATK ], 1) .uncopiable() .unreplaceable() .attr(NoTransformAbilityAbAttr), - new Ability(Abilities.EMBODY_ASPECT_CORNERSTONE, 9) + new Ability(AbilityId.EMBODY_ASPECT_CORNERSTONE, 9) .attr(PostTeraFormChangeStatChangeAbAttr, [ Stat.DEF ], 1) .uncopiable() .unreplaceable() .attr(NoTransformAbilityAbAttr), - new Ability(Abilities.TERA_SHIFT, 9) + new Ability(AbilityId.TERA_SHIFT, 9) .attr(PostSummonFormChangeAbAttr, p => p.getFormKey() ? 0 : 1) .uncopiable() .unreplaceable() .unsuppressable() .attr(NoTransformAbilityAbAttr) .attr(NoFusionAbilityAbAttr), - new Ability(Abilities.TERA_SHELL, 9) + new Ability(AbilityId.TERA_SHELL, 9) .attr(FullHpResistTypeAbAttr) .uncopiable() .unreplaceable() .ignorable(), - new Ability(Abilities.TERAFORM_ZERO, 9) + new Ability(AbilityId.TERAFORM_ZERO, 9) .attr(ClearWeatherAbAttr, [ WeatherType.SUNNY, WeatherType.RAIN, WeatherType.SANDSTORM, WeatherType.HAIL, WeatherType.SNOW, WeatherType.FOG, WeatherType.HEAVY_RAIN, WeatherType.HARSH_SUN, WeatherType.STRONG_WINDS ]) .attr(ClearTerrainAbAttr, [ TerrainType.MISTY, TerrainType.ELECTRIC, TerrainType.GRASSY, TerrainType.PSYCHIC ]) .uncopiable() .unreplaceable() - .condition(getOncePerBattleCondition(Abilities.TERAFORM_ZERO)), - new Ability(Abilities.POISON_PUPPETEER, 9) + .condition(getOncePerBattleCondition(AbilityId.TERAFORM_ZERO)), + new Ability(AbilityId.POISON_PUPPETEER, 9) .uncopiable() .unreplaceable() // TODO is this true? .attr(ConfusionOnStatusEffectAbAttr, StatusEffect.POISON, StatusEffect.TOXIC) diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index 1955b51e8e0..590319a01c0 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -22,10 +22,10 @@ import { import { Stat } from "#enums/stat"; import { CommonAnim, CommonBattleAnim } from "#app/data/battle-anims"; import i18next from "i18next"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; @@ -41,7 +41,7 @@ export abstract class ArenaTag { constructor( public tagType: ArenaTagType, public turnCount: number, - public sourceMove?: Moves, + public sourceMove?: MoveId, public sourceId?: number, public side: ArenaTagSide = ArenaTagSide.BOTH, ) {} @@ -116,7 +116,7 @@ export abstract class ArenaTag { */ export class MistTag extends ArenaTag { constructor(turnCount: number, sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.MIST, turnCount, Moves.MIST, sourceId, side); + super(ArenaTagType.MIST, turnCount, MoveId.MIST, sourceId, side); } onAdd(arena: Arena, quiet = false): void { @@ -188,7 +188,7 @@ export class WeakenMoveScreenTag extends ArenaTag { constructor( tagType: ArenaTagType, turnCount: number, - sourceMove: Moves, + sourceMove: MoveId, sourceId: number, side: ArenaTagSide, weakenedCategories: MoveCategory[], @@ -230,11 +230,11 @@ export class WeakenMoveScreenTag extends ArenaTag { /** * Reduces the damage of physical moves. - * Used by {@linkcode Moves.REFLECT} + * Used by {@linkcode MoveId.REFLECT} */ class ReflectTag extends WeakenMoveScreenTag { constructor(turnCount: number, sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.REFLECT, turnCount, Moves.REFLECT, sourceId, side, [MoveCategory.PHYSICAL]); + super(ArenaTagType.REFLECT, turnCount, MoveId.REFLECT, sourceId, side, [MoveCategory.PHYSICAL]); } onAdd(_arena: Arena, quiet = false): void { @@ -250,11 +250,11 @@ class ReflectTag extends WeakenMoveScreenTag { /** * Reduces the damage of special moves. - * Used by {@linkcode Moves.LIGHT_SCREEN} + * Used by {@linkcode MoveId.LIGHT_SCREEN} */ class LightScreenTag extends WeakenMoveScreenTag { constructor(turnCount: number, sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.LIGHT_SCREEN, turnCount, Moves.LIGHT_SCREEN, sourceId, side, [MoveCategory.SPECIAL]); + super(ArenaTagType.LIGHT_SCREEN, turnCount, MoveId.LIGHT_SCREEN, sourceId, side, [MoveCategory.SPECIAL]); } onAdd(_arena: Arena, quiet = false): void { @@ -270,11 +270,11 @@ class LightScreenTag extends WeakenMoveScreenTag { /** * Reduces the damage of physical and special moves. - * Used by {@linkcode Moves.AURORA_VEIL} + * Used by {@linkcode MoveId.AURORA_VEIL} */ class AuroraVeilTag extends WeakenMoveScreenTag { constructor(turnCount: number, sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.AURORA_VEIL, turnCount, Moves.AURORA_VEIL, sourceId, side, [ + super(ArenaTagType.AURORA_VEIL, turnCount, MoveId.AURORA_VEIL, sourceId, side, [ MoveCategory.SPECIAL, MoveCategory.PHYSICAL, ]); @@ -291,7 +291,7 @@ class AuroraVeilTag extends WeakenMoveScreenTag { } } -type ProtectConditionFunc = (arena: Arena, moveId: Moves) => boolean; +type ProtectConditionFunc = (arena: Arena, moveId: MoveId) => boolean; /** * Class to implement conditional team protection @@ -305,7 +305,7 @@ export class ConditionalProtectTag extends ArenaTag { constructor( tagType: ArenaTagType, - sourceMove: Moves, + sourceMove: MoveId, sourceId: number, side: ArenaTagSide, condition: ProtectConditionFunc, @@ -337,7 +337,7 @@ export class ConditionalProtectTag extends ArenaTag { * @param isProtected a {@linkcode BooleanHolder} used to flag if the move is protected against * @param _attacker the attacking {@linkcode Pokemon} * @param defender the defending {@linkcode Pokemon} - * @param moveId the {@linkcode Moves | identifier} for the move being used + * @param moveId the {@linkcode MoveId | identifier} for the move being used * @param ignoresProtectBypass a {@linkcode BooleanHolder} used to flag if a protection effect supercedes effects that ignore protection * @returns `true` if this tag protected against the attack; `false` otherwise */ @@ -347,7 +347,7 @@ export class ConditionalProtectTag extends ArenaTag { isProtected: BooleanHolder, _attacker: Pokemon, defender: Pokemon, - moveId: Moves, + moveId: MoveId, ignoresProtectBypass: BooleanHolder, ): boolean { if ((this.side === ArenaTagSide.PLAYER) === defender.isPlayer() && this.protectConditionFunc(arena, moveId)) { @@ -375,7 +375,7 @@ export class ConditionalProtectTag extends ArenaTag { * Condition function for {@link https://bulbapedia.bulbagarden.net/wiki/Quick_Guard_(move) Quick Guard's} * protection effect. * @param _arena {@linkcode Arena} The arena containing the protection effect - * @param moveId {@linkcode Moves} The move to check against this condition + * @param moveId {@linkcode MoveId} The move to check against this condition * @returns `true` if the incoming move's priority is greater than 0. * This includes moves with modified priorities from abilities (e.g. Prankster) */ @@ -398,7 +398,7 @@ const QuickGuardConditionFunc: ProtectConditionFunc = (_arena, moveId) => { */ class QuickGuardTag extends ConditionalProtectTag { constructor(sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.QUICK_GUARD, Moves.QUICK_GUARD, sourceId, side, QuickGuardConditionFunc); + super(ArenaTagType.QUICK_GUARD, MoveId.QUICK_GUARD, sourceId, side, QuickGuardConditionFunc); } } @@ -406,7 +406,7 @@ class QuickGuardTag extends ConditionalProtectTag { * Condition function for {@link https://bulbapedia.bulbagarden.net/wiki/Wide_Guard_(move) Wide Guard's} * protection effect. * @param _arena {@linkcode Arena} The arena containing the protection effect - * @param moveId {@linkcode Moves} The move to check against this condition + * @param moveId {@linkcode MoveId} The move to check against this condition * @returns `true` if the incoming move is multi-targeted (even if it's only used against one Pokemon). */ const WideGuardConditionFunc: ProtectConditionFunc = (_arena, moveId): boolean => { @@ -429,7 +429,7 @@ const WideGuardConditionFunc: ProtectConditionFunc = (_arena, moveId): boolean = */ class WideGuardTag extends ConditionalProtectTag { constructor(sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.WIDE_GUARD, Moves.WIDE_GUARD, sourceId, side, WideGuardConditionFunc); + super(ArenaTagType.WIDE_GUARD, MoveId.WIDE_GUARD, sourceId, side, WideGuardConditionFunc); } } @@ -437,7 +437,7 @@ class WideGuardTag extends ConditionalProtectTag { * Condition function for {@link https://bulbapedia.bulbagarden.net/wiki/Mat_Block_(move) Mat Block's} * protection effect. * @param _arena {@linkcode Arena} The arena containing the protection effect. - * @param moveId {@linkcode Moves} The move to check against this condition. + * @param moveId {@linkcode MoveId} The move to check against this condition. * @returns `true` if the incoming move is not a Status move. */ const MatBlockConditionFunc: ProtectConditionFunc = (_arena, moveId): boolean => { @@ -451,7 +451,7 @@ const MatBlockConditionFunc: ProtectConditionFunc = (_arena, moveId): boolean => */ class MatBlockTag extends ConditionalProtectTag { constructor(sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.MAT_BLOCK, Moves.MAT_BLOCK, sourceId, side, MatBlockConditionFunc); + super(ArenaTagType.MAT_BLOCK, MoveId.MAT_BLOCK, sourceId, side, MatBlockConditionFunc); } onAdd(_arena: Arena) { @@ -474,7 +474,7 @@ class MatBlockTag extends ConditionalProtectTag { * Condition function for {@link https://bulbapedia.bulbagarden.net/wiki/Crafty_Shield_(move) Crafty Shield's} * protection effect. * @param _arena {@linkcode Arena} The arena containing the protection effect - * @param moveId {@linkcode Moves} The move to check against this condition + * @param moveId {@linkcode MoveId} The move to check against this condition * @returns `true` if the incoming move is a Status move, is not a hazard, and does not target all * Pokemon or sides of the field. */ @@ -495,7 +495,7 @@ const CraftyShieldConditionFunc: ProtectConditionFunc = (_arena, moveId) => { */ class CraftyShieldTag extends ConditionalProtectTag { constructor(sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.CRAFTY_SHIELD, Moves.CRAFTY_SHIELD, sourceId, side, CraftyShieldConditionFunc, true); + super(ArenaTagType.CRAFTY_SHIELD, MoveId.CRAFTY_SHIELD, sourceId, side, CraftyShieldConditionFunc, true); } } @@ -507,11 +507,11 @@ export class NoCritTag extends ArenaTag { /** * Constructor method for the NoCritTag class * @param turnCount `number` the number of turns this effect lasts - * @param sourceMove {@linkcode Moves} the move that created this effect + * @param sourceMove {@linkcode MoveId} the move that created this effect * @param sourceId `number` the ID of the {@linkcode Pokemon} that created this effect * @param side {@linkcode ArenaTagSide} the side to which this effect belongs */ - constructor(turnCount: number, sourceMove: Moves, sourceId: number, side: ArenaTagSide) { + constructor(turnCount: number, sourceMove: MoveId, sourceId: number, side: ArenaTagSide) { super(ArenaTagType.NO_CRIT, turnCount, sourceMove, sourceId, side); } @@ -546,7 +546,7 @@ class WishTag extends ArenaTag { private healHp: number; constructor(turnCount: number, sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.WISH, turnCount, Moves.WISH, sourceId, side); + super(ArenaTagType.WISH, turnCount, MoveId.WISH, sourceId, side); } onAdd(_arena: Arena): void { @@ -588,7 +588,7 @@ export class WeakenMoveTypeTag extends ArenaTag { * @param sourceMove - The move that created the tag. * @param sourceId - The ID of the source of the tag. */ - constructor(tagType: ArenaTagType, turnCount: number, type: PokemonType, sourceMove: Moves, sourceId: number) { + constructor(tagType: ArenaTagType, turnCount: number, type: PokemonType, sourceMove: MoveId, sourceId: number) { super(tagType, turnCount, sourceMove, sourceId); this.weakenedType = type; @@ -617,7 +617,7 @@ export class WeakenMoveTypeTag extends ArenaTag { */ class MudSportTag extends WeakenMoveTypeTag { constructor(turnCount: number, sourceId: number) { - super(ArenaTagType.MUD_SPORT, turnCount, PokemonType.ELECTRIC, Moves.MUD_SPORT, sourceId); + super(ArenaTagType.MUD_SPORT, turnCount, PokemonType.ELECTRIC, MoveId.MUD_SPORT, sourceId); } onAdd(_arena: Arena): void { @@ -635,7 +635,7 @@ class MudSportTag extends WeakenMoveTypeTag { */ class WaterSportTag extends WeakenMoveTypeTag { constructor(turnCount: number, sourceId: number) { - super(ArenaTagType.WATER_SPORT, turnCount, PokemonType.FIRE, Moves.WATER_SPORT, sourceId); + super(ArenaTagType.WATER_SPORT, turnCount, PokemonType.FIRE, MoveId.WATER_SPORT, sourceId); } onAdd(_arena: Arena): void { @@ -653,7 +653,7 @@ class WaterSportTag extends WeakenMoveTypeTag { * Converts Normal-type moves to Electric type for the rest of the turn. */ export class IonDelugeTag extends ArenaTag { - constructor(sourceMove?: Moves) { + constructor(sourceMove?: MoveId) { super(ArenaTagType.ION_DELUGE, 1, sourceMove); } @@ -696,7 +696,7 @@ export class ArenaTrapTag extends ArenaTag { * @param side - The side (player or enemy) the tag affects. * @param maxLayers - The maximum amount of layers this tag can have. */ - constructor(tagType: ArenaTagType, sourceMove: Moves, sourceId: number, side: ArenaTagSide, maxLayers: number) { + constructor(tagType: ArenaTagType, sourceMove: MoveId, sourceId: number, side: ArenaTagSide, maxLayers: number) { super(tagType, 0, sourceMove, sourceId, side); this.layers = 1; @@ -750,7 +750,7 @@ export class ArenaTrapTag extends ArenaTag { */ class SpikesTag extends ArenaTrapTag { constructor(sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.SPIKES, Moves.SPIKES, sourceId, side, 3); + super(ArenaTagType.SPIKES, MoveId.SPIKES, sourceId, side, 3); } onAdd(arena: Arena, quiet = false): void { @@ -802,7 +802,7 @@ class ToxicSpikesTag extends ArenaTrapTag { private neutralized: boolean; constructor(sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.TOXIC_SPIKES, Moves.TOXIC_SPIKES, sourceId, side, 2); + super(ArenaTagType.TOXIC_SPIKES, MoveId.TOXIC_SPIKES, sourceId, side, 2); this.neutralized = false; } @@ -867,7 +867,7 @@ class ToxicSpikesTag extends ArenaTrapTag { } /** - * Arena Tag class for delayed attacks, such as {@linkcode Moves.FUTURE_SIGHT} or {@linkcode Moves.DOOM_DESIRE}. + * Arena Tag class for delayed attacks, such as {@linkcode MoveId.FUTURE_SIGHT} or {@linkcode MoveId.DOOM_DESIRE}. * Delays the attack's effect by a set amount of turns, usually 3 (including the turn the move is used), * and deals damage after the turn count is reached. */ @@ -876,7 +876,7 @@ export class DelayedAttackTag extends ArenaTag { constructor( tagType: ArenaTagType, - sourceMove: Moves | undefined, + sourceMove: MoveId | undefined, sourceId: number, targetIndex: BattlerIndex, side: ArenaTagSide = ArenaTagSide.BOTH, @@ -909,7 +909,7 @@ export class DelayedAttackTag extends ArenaTag { */ class StealthRockTag extends ArenaTrapTag { constructor(sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.STEALTH_ROCK, Moves.STEALTH_ROCK, sourceId, side, 1); + super(ArenaTagType.STEALTH_ROCK, MoveId.STEALTH_ROCK, sourceId, side, 1); } onAdd(arena: Arena, quiet = false): void { @@ -994,7 +994,7 @@ class StealthRockTag extends ArenaTrapTag { */ class StickyWebTag extends ArenaTrapTag { constructor(sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.STICKY_WEB, Moves.STICKY_WEB, sourceId, side, 1); + super(ArenaTagType.STICKY_WEB, MoveId.STICKY_WEB, sourceId, side, 1); } onAdd(arena: Arena, quiet = false): void { @@ -1055,7 +1055,7 @@ class StickyWebTag extends ArenaTrapTag { */ export class TrickRoomTag extends ArenaTag { constructor(turnCount: number, sourceId: number) { - super(ArenaTagType.TRICK_ROOM, turnCount, Moves.TRICK_ROOM, sourceId); + super(ArenaTagType.TRICK_ROOM, turnCount, MoveId.TRICK_ROOM, sourceId); } /** @@ -1090,11 +1090,11 @@ export class TrickRoomTag extends ArenaTag { /** * Arena Tag class for {@link https://bulbapedia.bulbagarden.net/wiki/Gravity_(move) Gravity}. * Grounds all Pokémon on the field, including Flying-types and those with - * {@linkcode Abilities.LEVITATE} for the duration of the arena tag, usually 5 turns. + * {@linkcode AbilityId.LEVITATE} for the duration of the arena tag, usually 5 turns. */ export class GravityTag extends ArenaTag { constructor(turnCount: number) { - super(ArenaTagType.GRAVITY, turnCount, Moves.GRAVITY); + super(ArenaTagType.GRAVITY, turnCount, MoveId.GRAVITY); } onAdd(_arena: Arena): void { @@ -1122,7 +1122,7 @@ export class GravityTag extends ArenaTag { */ class TailwindTag extends ArenaTag { constructor(turnCount: number, sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.TAILWIND, turnCount, Moves.TAILWIND, sourceId, side); + super(ArenaTagType.TAILWIND, turnCount, MoveId.TAILWIND, sourceId, side); } onAdd(_arena: Arena, quiet = false): void { @@ -1139,7 +1139,7 @@ class TailwindTag extends ArenaTag { for (const pokemon of party) { // Apply the CHARGED tag to party members with the WIND_POWER ability - if (pokemon.hasAbility(Abilities.WIND_POWER) && !pokemon.getTag(BattlerTagType.CHARGED)) { + if (pokemon.hasAbility(AbilityId.WIND_POWER) && !pokemon.getTag(BattlerTagType.CHARGED)) { pokemon.addTag(BattlerTagType.CHARGED); globalScene.queueMessage( i18next.t("abilityTriggers:windPowerCharged", { @@ -1150,7 +1150,7 @@ class TailwindTag extends ArenaTag { } // Raise attack by one stage if party member has WIND_RIDER ability // TODO: Ability displays should be handled by the ability - if (pokemon.hasAbility(Abilities.WIND_RIDER)) { + if (pokemon.hasAbility(AbilityId.WIND_RIDER)) { globalScene.queueAbilityDisplay(pokemon, false, true); globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [Stat.ATK], 1, true)); globalScene.queueAbilityDisplay(pokemon, false, false); @@ -1171,11 +1171,11 @@ class TailwindTag extends ArenaTag { /** * Arena Tag class for {@link https://bulbapedia.bulbagarden.net/wiki/Happy_Hour_(move) Happy Hour}. - * Doubles the prize money from trainers and money moves like {@linkcode Moves.PAY_DAY} and {@linkcode Moves.MAKE_IT_RAIN}. + * Doubles the prize money from trainers and money moves like {@linkcode MoveId.PAY_DAY} and {@linkcode MoveId.MAKE_IT_RAIN}. */ class HappyHourTag extends ArenaTag { constructor(turnCount: number, sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.HAPPY_HOUR, turnCount, Moves.HAPPY_HOUR, sourceId, side); + super(ArenaTagType.HAPPY_HOUR, turnCount, MoveId.HAPPY_HOUR, sourceId, side); } onAdd(_arena: Arena): void { @@ -1189,7 +1189,7 @@ class HappyHourTag extends ArenaTag { class SafeguardTag extends ArenaTag { constructor(turnCount: number, sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.SAFEGUARD, turnCount, Moves.SAFEGUARD, sourceId, side); + super(ArenaTagType.SAFEGUARD, turnCount, MoveId.SAFEGUARD, sourceId, side); } onAdd(_arena: Arena): void { @@ -1221,7 +1221,7 @@ class NoneTag extends ArenaTag { */ class ImprisonTag extends ArenaTrapTag { constructor(sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.IMPRISON, Moves.IMPRISON, sourceId, side, 1); + super(ArenaTagType.IMPRISON, MoveId.IMPRISON, sourceId, side, 1); } /** @@ -1234,7 +1234,7 @@ class ImprisonTag extends ArenaTrapTag { const party = this.getAffectedPokemon(); party?.forEach((p: Pokemon) => { if (p.isAllowedInBattle()) { - p.addTag(BattlerTagType.IMPRISON, 1, Moves.IMPRISON, this.sourceId); + p.addTag(BattlerTagType.IMPRISON, 1, MoveId.IMPRISON, this.sourceId); } }); globalScene.queueMessage( @@ -1263,7 +1263,7 @@ class ImprisonTag extends ArenaTrapTag { override activateTrap(pokemon: Pokemon): boolean { const source = this.getSourcePokemon(); if (source?.isActive(true) && pokemon.isAllowedInBattle()) { - pokemon.addTag(BattlerTagType.IMPRISON, 1, Moves.IMPRISON, this.sourceId); + pokemon.addTag(BattlerTagType.IMPRISON, 1, MoveId.IMPRISON, this.sourceId); } return true; } @@ -1289,7 +1289,7 @@ class ImprisonTag extends ArenaTrapTag { */ class FireGrassPledgeTag extends ArenaTag { constructor(sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.FIRE_GRASS_PLEDGE, 4, Moves.FIRE_PLEDGE, sourceId, side); + super(ArenaTagType.FIRE_GRASS_PLEDGE, 4, MoveId.FIRE_PLEDGE, sourceId, side); } override onAdd(_arena: Arena): void { @@ -1334,7 +1334,7 @@ class FireGrassPledgeTag extends ArenaTag { */ class WaterFirePledgeTag extends ArenaTag { constructor(sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.WATER_FIRE_PLEDGE, 4, Moves.WATER_PLEDGE, sourceId, side); + super(ArenaTagType.WATER_FIRE_PLEDGE, 4, MoveId.WATER_PLEDGE, sourceId, side); } override onAdd(_arena: Arena): void { @@ -1368,7 +1368,7 @@ class WaterFirePledgeTag extends ArenaTag { */ class GrassWaterPledgeTag extends ArenaTag { constructor(sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.GRASS_WATER_PLEDGE, 4, Moves.GRASS_PLEDGE, sourceId, side); + super(ArenaTagType.GRASS_WATER_PLEDGE, 4, MoveId.GRASS_PLEDGE, sourceId, side); } override onAdd(_arena: Arena): void { @@ -1390,7 +1390,7 @@ class GrassWaterPledgeTag extends ArenaTag { */ export class FairyLockTag extends ArenaTag { constructor(turnCount: number, sourceId: number) { - super(ArenaTagType.FAIRY_LOCK, turnCount, Moves.FAIRY_LOCK, sourceId); + super(ArenaTagType.FAIRY_LOCK, turnCount, MoveId.FAIRY_LOCK, sourceId); } onAdd(_arena: Arena): void { @@ -1485,7 +1485,7 @@ export class SuppressAbilitiesTag extends ArenaTag { export function getArenaTag( tagType: ArenaTagType, turnCount: number, - sourceMove: Moves | undefined, + sourceMove: MoveId | undefined, sourceId: number, targetIndex?: BattlerIndex, side: ArenaTagSide = ArenaTagSide.BOTH, diff --git a/src/data/balance/biomes.ts b/src/data/balance/biomes.ts index 968164c7902..713ab9637ab 100644 --- a/src/data/balance/biomes.ts +++ b/src/data/balance/biomes.ts @@ -3,30 +3,30 @@ import { randSeedInt, getEnumValues } from "#app/utils/common"; import type { SpeciesFormEvolution } from "#app/data/balance/pokemon-evolutions"; import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import i18next from "i18next"; -import { Biome } from "#enums/biome"; -import { Species } from "#enums/species"; +import { BiomeId } from "#enums/biome-id"; +import { SpeciesId } from "#enums/species-id"; import { TimeOfDay } from "#enums/time-of-day"; import { TrainerType } from "#enums/trainer-type"; // import beautify from "json-beautify"; -export function getBiomeName(biome: Biome | -1) { +export function getBiomeName(biome: BiomeId | -1) { if (biome === -1) { return i18next.t("biome:unknownLocation"); } switch (biome) { - case Biome.GRASS: + case BiomeId.GRASS: return i18next.t("biome:GRASS"); - case Biome.RUINS: + case BiomeId.RUINS: return i18next.t("biome:RUINS"); - case Biome.END: + case BiomeId.END: return i18next.t("biome:END"); default: - return i18next.t(`biome:${Biome[biome].toUpperCase()}`); + return i18next.t(`biome:${BiomeId[biome].toUpperCase()}`); } } interface BiomeLinks { - [key: number]: Biome | (Biome | [Biome, number])[] + [key: number]: BiomeId | (BiomeId | [BiomeId, number])[] } interface BiomeDepths { @@ -34,40 +34,40 @@ interface BiomeDepths { } export const biomeLinks: BiomeLinks = { - [Biome.TOWN]: Biome.PLAINS, - [Biome.PLAINS]: [ Biome.GRASS, Biome.METROPOLIS, Biome.LAKE ], - [Biome.GRASS]: Biome.TALL_GRASS, - [Biome.TALL_GRASS]: [ Biome.FOREST, Biome.CAVE ], - [Biome.SLUM]: [ Biome.CONSTRUCTION_SITE, [ Biome.SWAMP, 2 ]], - [Biome.FOREST]: [ Biome.JUNGLE, Biome.MEADOW ], - [Biome.SEA]: [ Biome.SEABED, Biome.ICE_CAVE ], - [Biome.SWAMP]: [ Biome.GRAVEYARD, Biome.TALL_GRASS ], - [Biome.BEACH]: [ Biome.SEA, [ Biome.ISLAND, 2 ]], - [Biome.LAKE]: [ Biome.BEACH, Biome.SWAMP, Biome.CONSTRUCTION_SITE ], - [Biome.SEABED]: [ Biome.CAVE, [ Biome.VOLCANO, 3 ]], - [Biome.MOUNTAIN]: [ Biome.VOLCANO, [ Biome.WASTELAND, 2 ], [ Biome.SPACE, 3 ]], - [Biome.BADLANDS]: [ Biome.DESERT, Biome.MOUNTAIN ], - [Biome.CAVE]: [ Biome.BADLANDS, Biome.LAKE, [ Biome.LABORATORY, 2 ]], - [Biome.DESERT]: [ Biome.RUINS, [ Biome.CONSTRUCTION_SITE, 2 ]], - [Biome.ICE_CAVE]: Biome.SNOWY_FOREST, - [Biome.MEADOW]: [ Biome.PLAINS, Biome.FAIRY_CAVE ], - [Biome.POWER_PLANT]: Biome.FACTORY, - [Biome.VOLCANO]: [ Biome.BEACH, [ Biome.ICE_CAVE, 3 ]], - [Biome.GRAVEYARD]: Biome.ABYSS, - [Biome.DOJO]: [ Biome.PLAINS, [ Biome.JUNGLE, 2 ], [ Biome.TEMPLE, 2 ]], - [Biome.FACTORY]: [ Biome.PLAINS, [ Biome.LABORATORY, 2 ]], - [Biome.RUINS]: [ Biome.MOUNTAIN, [ Biome.FOREST, 2 ]], - [Biome.WASTELAND]: Biome.BADLANDS, - [Biome.ABYSS]: [ Biome.CAVE, [ Biome.SPACE, 2 ], [ Biome.WASTELAND, 2 ]], - [Biome.SPACE]: Biome.RUINS, - [Biome.CONSTRUCTION_SITE]: [ Biome.POWER_PLANT, [ Biome.DOJO, 2 ]], - [Biome.JUNGLE]: [ Biome.TEMPLE ], - [Biome.FAIRY_CAVE]: [ Biome.ICE_CAVE, [ Biome.SPACE, 2 ]], - [Biome.TEMPLE]: [ Biome.DESERT, [ Biome.SWAMP, 2 ], [ Biome.RUINS, 2 ]], - [Biome.METROPOLIS]: Biome.SLUM, - [Biome.SNOWY_FOREST]: [ Biome.FOREST, [ Biome.MOUNTAIN, 2 ], [ Biome.LAKE, 2 ]], - [Biome.ISLAND]: Biome.SEA, - [Biome.LABORATORY]: Biome.CONSTRUCTION_SITE + [BiomeId.TOWN]: BiomeId.PLAINS, + [BiomeId.PLAINS]: [ BiomeId.GRASS, BiomeId.METROPOLIS, BiomeId.LAKE ], + [BiomeId.GRASS]: BiomeId.TALL_GRASS, + [BiomeId.TALL_GRASS]: [ BiomeId.FOREST, BiomeId.CAVE ], + [BiomeId.SLUM]: [ BiomeId.CONSTRUCTION_SITE, [ BiomeId.SWAMP, 2 ]], + [BiomeId.FOREST]: [ BiomeId.JUNGLE, BiomeId.MEADOW ], + [BiomeId.SEA]: [ BiomeId.SEABED, BiomeId.ICE_CAVE ], + [BiomeId.SWAMP]: [ BiomeId.GRAVEYARD, BiomeId.TALL_GRASS ], + [BiomeId.BEACH]: [ BiomeId.SEA, [ BiomeId.ISLAND, 2 ]], + [BiomeId.LAKE]: [ BiomeId.BEACH, BiomeId.SWAMP, BiomeId.CONSTRUCTION_SITE ], + [BiomeId.SEABED]: [ BiomeId.CAVE, [ BiomeId.VOLCANO, 3 ]], + [BiomeId.MOUNTAIN]: [ BiomeId.VOLCANO, [ BiomeId.WASTELAND, 2 ], [ BiomeId.SPACE, 3 ]], + [BiomeId.BADLANDS]: [ BiomeId.DESERT, BiomeId.MOUNTAIN ], + [BiomeId.CAVE]: [ BiomeId.BADLANDS, BiomeId.LAKE, [ BiomeId.LABORATORY, 2 ]], + [BiomeId.DESERT]: [ BiomeId.RUINS, [ BiomeId.CONSTRUCTION_SITE, 2 ]], + [BiomeId.ICE_CAVE]: BiomeId.SNOWY_FOREST, + [BiomeId.MEADOW]: [ BiomeId.PLAINS, BiomeId.FAIRY_CAVE ], + [BiomeId.POWER_PLANT]: BiomeId.FACTORY, + [BiomeId.VOLCANO]: [ BiomeId.BEACH, [ BiomeId.ICE_CAVE, 3 ]], + [BiomeId.GRAVEYARD]: BiomeId.ABYSS, + [BiomeId.DOJO]: [ BiomeId.PLAINS, [ BiomeId.JUNGLE, 2 ], [ BiomeId.TEMPLE, 2 ]], + [BiomeId.FACTORY]: [ BiomeId.PLAINS, [ BiomeId.LABORATORY, 2 ]], + [BiomeId.RUINS]: [ BiomeId.MOUNTAIN, [ BiomeId.FOREST, 2 ]], + [BiomeId.WASTELAND]: BiomeId.BADLANDS, + [BiomeId.ABYSS]: [ BiomeId.CAVE, [ BiomeId.SPACE, 2 ], [ BiomeId.WASTELAND, 2 ]], + [BiomeId.SPACE]: BiomeId.RUINS, + [BiomeId.CONSTRUCTION_SITE]: [ BiomeId.POWER_PLANT, [ BiomeId.DOJO, 2 ]], + [BiomeId.JUNGLE]: [ BiomeId.TEMPLE ], + [BiomeId.FAIRY_CAVE]: [ BiomeId.ICE_CAVE, [ BiomeId.SPACE, 2 ]], + [BiomeId.TEMPLE]: [ BiomeId.DESERT, [ BiomeId.SWAMP, 2 ], [ BiomeId.RUINS, 2 ]], + [BiomeId.METROPOLIS]: BiomeId.SLUM, + [BiomeId.SNOWY_FOREST]: [ BiomeId.FOREST, [ BiomeId.MOUNTAIN, 2 ], [ BiomeId.LAKE, 2 ]], + [BiomeId.ISLAND]: BiomeId.SEA, + [BiomeId.LABORATORY]: BiomeId.CONSTRUCTION_SITE }; export const biomeDepths: BiomeDepths = {}; @@ -84,14 +84,14 @@ export enum BiomePoolTier { BOSS_ULTRA_RARE } -export const uncatchableSpecies: Species[] = []; +export const uncatchableSpecies: SpeciesId[] = []; export interface SpeciesTree { - [key: number]: Species[] + [key: number]: SpeciesId[] } export interface PokemonPools { - [key: number]: (Species | SpeciesTree)[] + [key: number]: (SpeciesId | SpeciesTree)[] } export interface BiomeTierPokemonPools { @@ -103,7 +103,7 @@ export interface BiomePokemonPools { } export interface BiomeTierTod { - biome: Biome, + biome: BiomeId, tier: BiomePoolTier, tod: TimeOfDay[] } @@ -123,125 +123,125 @@ export interface BiomeTrainerPools { } export const biomePokemonPools: BiomePokemonPools = { - [Biome.TOWN]: { + [BiomeId.TOWN]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [ - { 1: [ Species.CATERPIE ], 7: [ Species.METAPOD ]}, - Species.SENTRET, - Species.LEDYBA, - Species.HOPPIP, - Species.SUNKERN, - Species.STARLY, - Species.PIDOVE, - Species.COTTONEE, - { 1: [ Species.SCATTERBUG ], 9: [ Species.SPEWPA ]}, - Species.YUNGOOS, - Species.SKWOVET + { 1: [ SpeciesId.CATERPIE ], 7: [ SpeciesId.METAPOD ]}, + SpeciesId.SENTRET, + SpeciesId.LEDYBA, + SpeciesId.HOPPIP, + SpeciesId.SUNKERN, + SpeciesId.STARLY, + SpeciesId.PIDOVE, + SpeciesId.COTTONEE, + { 1: [ SpeciesId.SCATTERBUG ], 9: [ SpeciesId.SPEWPA ]}, + SpeciesId.YUNGOOS, + SpeciesId.SKWOVET ], [TimeOfDay.DAY]: [ - { 1: [ Species.CATERPIE ], 7: [ Species.METAPOD ]}, - Species.SENTRET, - Species.HOPPIP, - Species.SUNKERN, - Species.SILCOON, - Species.STARLY, - Species.PIDOVE, - Species.COTTONEE, - { 1: [ Species.SCATTERBUG ], 9: [ Species.SPEWPA ]}, - Species.YUNGOOS, - Species.SKWOVET + { 1: [ SpeciesId.CATERPIE ], 7: [ SpeciesId.METAPOD ]}, + SpeciesId.SENTRET, + SpeciesId.HOPPIP, + SpeciesId.SUNKERN, + SpeciesId.SILCOON, + SpeciesId.STARLY, + SpeciesId.PIDOVE, + SpeciesId.COTTONEE, + { 1: [ SpeciesId.SCATTERBUG ], 9: [ SpeciesId.SPEWPA ]}, + SpeciesId.YUNGOOS, + SpeciesId.SKWOVET ], - [TimeOfDay.DUSK]: [{ 1: [ Species.WEEDLE ], 7: [ Species.KAKUNA ]}, Species.POOCHYENA, Species.PATRAT, Species.PURRLOIN, Species.BLIPBUG ], - [TimeOfDay.NIGHT]: [{ 1: [ Species.WEEDLE ], 7: [ Species.KAKUNA ]}, Species.HOOTHOOT, Species.SPINARAK, Species.POOCHYENA, Species.CASCOON, Species.PATRAT, Species.PURRLOIN, Species.BLIPBUG ], - [TimeOfDay.ALL]: [ Species.PIDGEY, Species.RATTATA, Species.SPEAROW, Species.ZIGZAGOON, Species.WURMPLE, Species.TAILLOW, Species.BIDOOF, Species.LILLIPUP, Species.FLETCHLING, Species.WOOLOO, Species.LECHONK ] + [TimeOfDay.DUSK]: [{ 1: [ SpeciesId.WEEDLE ], 7: [ SpeciesId.KAKUNA ]}, SpeciesId.POOCHYENA, SpeciesId.PATRAT, SpeciesId.PURRLOIN, SpeciesId.BLIPBUG ], + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.WEEDLE ], 7: [ SpeciesId.KAKUNA ]}, SpeciesId.HOOTHOOT, SpeciesId.SPINARAK, SpeciesId.POOCHYENA, SpeciesId.CASCOON, SpeciesId.PATRAT, SpeciesId.PURRLOIN, SpeciesId.BLIPBUG ], + [TimeOfDay.ALL]: [ SpeciesId.PIDGEY, SpeciesId.RATTATA, SpeciesId.SPEAROW, SpeciesId.ZIGZAGOON, SpeciesId.WURMPLE, SpeciesId.TAILLOW, SpeciesId.BIDOOF, SpeciesId.LILLIPUP, SpeciesId.FLETCHLING, SpeciesId.WOOLOO, SpeciesId.LECHONK ] }, [BiomePoolTier.UNCOMMON]: { - [TimeOfDay.DAWN]: [ Species.BELLSPROUT, Species.POOCHYENA, Species.LOTAD, Species.SKITTY, Species.COMBEE, Species.CHERUBI, Species.PATRAT, Species.MINCCINO, Species.PAWMI ], - [TimeOfDay.DAY]: [ Species.NIDORAN_F, Species.NIDORAN_M, Species.BELLSPROUT, Species.POOCHYENA, Species.LOTAD, Species.SKITTY, Species.COMBEE, Species.CHERUBI, Species.PATRAT, Species.MINCCINO, Species.PAWMI ], - [TimeOfDay.DUSK]: [ Species.EKANS, Species.ODDISH, Species.MEOWTH, Species.SPINARAK, Species.SEEDOT, Species.SHROOMISH, Species.KRICKETOT, Species.VENIPEDE ], - [TimeOfDay.NIGHT]: [ Species.EKANS, Species.ODDISH, Species.PARAS, Species.VENONAT, Species.MEOWTH, Species.SEEDOT, Species.SHROOMISH, Species.KRICKETOT, Species.VENIPEDE ], - [TimeOfDay.ALL]: [ Species.NINCADA, Species.WHISMUR, Species.FIDOUGH ] + [TimeOfDay.DAWN]: [ SpeciesId.BELLSPROUT, SpeciesId.POOCHYENA, SpeciesId.LOTAD, SpeciesId.SKITTY, SpeciesId.COMBEE, SpeciesId.CHERUBI, SpeciesId.PATRAT, SpeciesId.MINCCINO, SpeciesId.PAWMI ], + [TimeOfDay.DAY]: [ SpeciesId.NIDORAN_F, SpeciesId.NIDORAN_M, SpeciesId.BELLSPROUT, SpeciesId.POOCHYENA, SpeciesId.LOTAD, SpeciesId.SKITTY, SpeciesId.COMBEE, SpeciesId.CHERUBI, SpeciesId.PATRAT, SpeciesId.MINCCINO, SpeciesId.PAWMI ], + [TimeOfDay.DUSK]: [ SpeciesId.EKANS, SpeciesId.ODDISH, SpeciesId.MEOWTH, SpeciesId.SPINARAK, SpeciesId.SEEDOT, SpeciesId.SHROOMISH, SpeciesId.KRICKETOT, SpeciesId.VENIPEDE ], + [TimeOfDay.NIGHT]: [ SpeciesId.EKANS, SpeciesId.ODDISH, SpeciesId.PARAS, SpeciesId.VENONAT, SpeciesId.MEOWTH, SpeciesId.SEEDOT, SpeciesId.SHROOMISH, SpeciesId.KRICKETOT, SpeciesId.VENIPEDE ], + [TimeOfDay.ALL]: [ SpeciesId.NINCADA, SpeciesId.WHISMUR, SpeciesId.FIDOUGH ] }, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [ Species.TANDEMAUS ], [TimeOfDay.DAY]: [ Species.TANDEMAUS ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ABRA, Species.SURSKIT, Species.ROOKIDEE ]}, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.EEVEE, Species.RALTS ]}, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DITTO ]}, + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [ SpeciesId.TANDEMAUS ], [TimeOfDay.DAY]: [ SpeciesId.TANDEMAUS ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.ABRA, SpeciesId.SURSKIT, SpeciesId.ROOKIDEE ]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.EEVEE, SpeciesId.RALTS ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.DITTO ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []} }, - [Biome.PLAINS]: { + [BiomeId.PLAINS]: { [BiomePoolTier.COMMON]: { - [TimeOfDay.DAWN]: [{ 1: [ Species.SENTRET ], 15: [ Species.FURRET ]}, { 1: [ Species.YUNGOOS ], 30: [ Species.GUMSHOOS ]}, { 1: [ Species.SKWOVET ], 24: [ Species.GREEDENT ]}], - [TimeOfDay.DAY]: [{ 1: [ Species.SENTRET ], 15: [ Species.FURRET ]}, { 1: [ Species.YUNGOOS ], 30: [ Species.GUMSHOOS ]}, { 1: [ Species.SKWOVET ], 24: [ Species.GREEDENT ]}], - [TimeOfDay.DUSK]: [{ 1: [ Species.MEOWTH ], 28: [ Species.PERSIAN ]}, { 1: [ Species.POOCHYENA ], 18: [ Species.MIGHTYENA ]}], - [TimeOfDay.NIGHT]: [{ 1: [ Species.ZUBAT ], 22: [ Species.GOLBAT ]}, { 1: [ Species.MEOWTH ], 28: [ Species.PERSIAN ]}, { 1: [ Species.POOCHYENA ], 18: [ Species.MIGHTYENA ]}], - [TimeOfDay.ALL]: [{ 1: [ Species.ZIGZAGOON ], 20: [ Species.LINOONE ]}, { 1: [ Species.BIDOOF ], 15: [ Species.BIBAREL ]}, { 1: [ Species.LECHONK ], 18: [ Species.OINKOLOGNE ]}] + [TimeOfDay.DAWN]: [{ 1: [ SpeciesId.SENTRET ], 15: [ SpeciesId.FURRET ]}, { 1: [ SpeciesId.YUNGOOS ], 30: [ SpeciesId.GUMSHOOS ]}, { 1: [ SpeciesId.SKWOVET ], 24: [ SpeciesId.GREEDENT ]}], + [TimeOfDay.DAY]: [{ 1: [ SpeciesId.SENTRET ], 15: [ SpeciesId.FURRET ]}, { 1: [ SpeciesId.YUNGOOS ], 30: [ SpeciesId.GUMSHOOS ]}, { 1: [ SpeciesId.SKWOVET ], 24: [ SpeciesId.GREEDENT ]}], + [TimeOfDay.DUSK]: [{ 1: [ SpeciesId.MEOWTH ], 28: [ SpeciesId.PERSIAN ]}, { 1: [ SpeciesId.POOCHYENA ], 18: [ SpeciesId.MIGHTYENA ]}], + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.ZUBAT ], 22: [ SpeciesId.GOLBAT ]}, { 1: [ SpeciesId.MEOWTH ], 28: [ SpeciesId.PERSIAN ]}, { 1: [ SpeciesId.POOCHYENA ], 18: [ SpeciesId.MIGHTYENA ]}], + [TimeOfDay.ALL]: [{ 1: [ SpeciesId.ZIGZAGOON ], 20: [ SpeciesId.LINOONE ]}, { 1: [ SpeciesId.BIDOOF ], 15: [ SpeciesId.BIBAREL ]}, { 1: [ SpeciesId.LECHONK ], 18: [ SpeciesId.OINKOLOGNE ]}] }, [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [ - { 1: [ Species.DODUO ], 31: [ Species.DODRIO ]}, - { 1: [ Species.POOCHYENA ], 18: [ Species.MIGHTYENA ]}, - { 1: [ Species.STARLY ], 14: [ Species.STARAVIA ], 34: [ Species.STARAPTOR ]}, - { 1: [ Species.PIDOVE ], 21: [ Species.TRANQUILL ], 32: [ Species.UNFEZANT ]}, - { 1: [ Species.PAWMI ], 18: [ Species.PAWMO ], 32: [ Species.PAWMOT ]} + { 1: [ SpeciesId.DODUO ], 31: [ SpeciesId.DODRIO ]}, + { 1: [ SpeciesId.POOCHYENA ], 18: [ SpeciesId.MIGHTYENA ]}, + { 1: [ SpeciesId.STARLY ], 14: [ SpeciesId.STARAVIA ], 34: [ SpeciesId.STARAPTOR ]}, + { 1: [ SpeciesId.PIDOVE ], 21: [ SpeciesId.TRANQUILL ], 32: [ SpeciesId.UNFEZANT ]}, + { 1: [ SpeciesId.PAWMI ], 18: [ SpeciesId.PAWMO ], 32: [ SpeciesId.PAWMOT ]} ], [TimeOfDay.DAY]: [ - { 1: [ Species.DODUO ], 31: [ Species.DODRIO ]}, - { 1: [ Species.POOCHYENA ], 18: [ Species.MIGHTYENA ]}, - { 1: [ Species.STARLY ], 14: [ Species.STARAVIA ], 34: [ Species.STARAPTOR ]}, - { 1: [ Species.PIDOVE ], 21: [ Species.TRANQUILL ], 32: [ Species.UNFEZANT ]}, - { 1: [ Species.ROCKRUFF ], 25: [ Species.LYCANROC ]}, - { 1: [ Species.PAWMI ], 18: [ Species.PAWMO ], 32: [ Species.PAWMOT ]} + { 1: [ SpeciesId.DODUO ], 31: [ SpeciesId.DODRIO ]}, + { 1: [ SpeciesId.POOCHYENA ], 18: [ SpeciesId.MIGHTYENA ]}, + { 1: [ SpeciesId.STARLY ], 14: [ SpeciesId.STARAVIA ], 34: [ SpeciesId.STARAPTOR ]}, + { 1: [ SpeciesId.PIDOVE ], 21: [ SpeciesId.TRANQUILL ], 32: [ SpeciesId.UNFEZANT ]}, + { 1: [ SpeciesId.ROCKRUFF ], 25: [ SpeciesId.LYCANROC ]}, + { 1: [ SpeciesId.PAWMI ], 18: [ SpeciesId.PAWMO ], 32: [ SpeciesId.PAWMOT ]} ], - [TimeOfDay.DUSK]: [{ 1: [ Species.MANKEY ], 28: [ Species.PRIMEAPE ], 75: [ Species.ANNIHILAPE ]}], - [TimeOfDay.NIGHT]: [{ 1: [ Species.MANKEY ], 28: [ Species.PRIMEAPE ], 75: [ Species.ANNIHILAPE ]}], + [TimeOfDay.DUSK]: [{ 1: [ SpeciesId.MANKEY ], 28: [ SpeciesId.PRIMEAPE ], 75: [ SpeciesId.ANNIHILAPE ]}], + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.MANKEY ], 28: [ SpeciesId.PRIMEAPE ], 75: [ SpeciesId.ANNIHILAPE ]}], [TimeOfDay.ALL]: [ - { 1: [ Species.PIDGEY ], 18: [ Species.PIDGEOTTO ], 36: [ Species.PIDGEOT ]}, - { 1: [ Species.SPEAROW ], 20: [ Species.FEAROW ]}, - Species.PIKACHU, - { 1: [ Species.FLETCHLING ], 17: [ Species.FLETCHINDER ], 35: [ Species.TALONFLAME ]} + { 1: [ SpeciesId.PIDGEY ], 18: [ SpeciesId.PIDGEOTTO ], 36: [ SpeciesId.PIDGEOT ]}, + { 1: [ SpeciesId.SPEAROW ], 20: [ SpeciesId.FEAROW ]}, + SpeciesId.PIKACHU, + { 1: [ SpeciesId.FLETCHLING ], 17: [ SpeciesId.FLETCHINDER ], 35: [ SpeciesId.TALONFLAME ]} ] }, [BiomePoolTier.RARE]: { - [TimeOfDay.DAWN]: [ Species.PALDEA_TAUROS ], - [TimeOfDay.DAY]: [ Species.PALDEA_TAUROS ], - [TimeOfDay.DUSK]: [{ 1: [ Species.SHINX ], 15: [ Species.LUXIO ], 30: [ Species.LUXRAY ]}], - [TimeOfDay.NIGHT]: [{ 1: [ Species.SHINX ], 15: [ Species.LUXIO ], 30: [ Species.LUXRAY ]}], - [TimeOfDay.ALL]: [{ 1: [ Species.ABRA ], 16: [ Species.KADABRA ]}, { 1: [ Species.BUNEARY ], 20: [ Species.LOPUNNY ]}, { 1: [ Species.ROOKIDEE ], 18: [ Species.CORVISQUIRE ], 38: [ Species.CORVIKNIGHT ]}] + [TimeOfDay.DAWN]: [ SpeciesId.PALDEA_TAUROS ], + [TimeOfDay.DAY]: [ SpeciesId.PALDEA_TAUROS ], + [TimeOfDay.DUSK]: [{ 1: [ SpeciesId.SHINX ], 15: [ SpeciesId.LUXIO ], 30: [ SpeciesId.LUXRAY ]}], + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.SHINX ], 15: [ SpeciesId.LUXIO ], 30: [ SpeciesId.LUXRAY ]}], + [TimeOfDay.ALL]: [{ 1: [ SpeciesId.ABRA ], 16: [ SpeciesId.KADABRA ]}, { 1: [ SpeciesId.BUNEARY ], 20: [ SpeciesId.LOPUNNY ]}, { 1: [ SpeciesId.ROOKIDEE ], 18: [ SpeciesId.CORVISQUIRE ], 38: [ SpeciesId.CORVIKNIGHT ]}] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.FARFETCHD, Species.LICKITUNG, Species.CHANSEY, Species.EEVEE, Species.SNORLAX, { 1: [ Species.DUNSPARCE ], 62: [ Species.DUDUNSPARCE ]}]}, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DITTO, Species.LATIAS, Species.LATIOS ]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.FARFETCHD, SpeciesId.LICKITUNG, SpeciesId.CHANSEY, SpeciesId.EEVEE, SpeciesId.SNORLAX, { 1: [ SpeciesId.DUNSPARCE ], 62: [ SpeciesId.DUDUNSPARCE ]}]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.DITTO, SpeciesId.LATIAS, SpeciesId.LATIOS ]}, [BiomePoolTier.BOSS]: { - [TimeOfDay.DAWN]: [ Species.DODRIO, Species.FURRET, Species.GUMSHOOS, Species.GREEDENT ], - [TimeOfDay.DAY]: [ Species.DODRIO, Species.FURRET, Species.GUMSHOOS, Species.GREEDENT ], - [TimeOfDay.DUSK]: [ Species.PERSIAN, Species.MIGHTYENA ], - [TimeOfDay.NIGHT]: [ Species.PERSIAN, Species.MIGHTYENA ], - [TimeOfDay.ALL]: [ Species.LINOONE, Species.BIBAREL, Species.LOPUNNY, Species.OINKOLOGNE ] + [TimeOfDay.DAWN]: [ SpeciesId.DODRIO, SpeciesId.FURRET, SpeciesId.GUMSHOOS, SpeciesId.GREEDENT ], + [TimeOfDay.DAY]: [ SpeciesId.DODRIO, SpeciesId.FURRET, SpeciesId.GUMSHOOS, SpeciesId.GREEDENT ], + [TimeOfDay.DUSK]: [ SpeciesId.PERSIAN, SpeciesId.MIGHTYENA ], + [TimeOfDay.NIGHT]: [ SpeciesId.PERSIAN, SpeciesId.MIGHTYENA ], + [TimeOfDay.ALL]: [ SpeciesId.LINOONE, SpeciesId.BIBAREL, SpeciesId.LOPUNNY, SpeciesId.OINKOLOGNE ] }, [BiomePoolTier.BOSS_RARE]: { - [TimeOfDay.DAWN]: [ Species.PAWMOT, Species.PALDEA_TAUROS ], - [TimeOfDay.DAY]: [ Species.LYCANROC, Species.PAWMOT, Species.PALDEA_TAUROS ], + [TimeOfDay.DAWN]: [ SpeciesId.PAWMOT, SpeciesId.PALDEA_TAUROS ], + [TimeOfDay.DAY]: [ SpeciesId.LYCANROC, SpeciesId.PAWMOT, SpeciesId.PALDEA_TAUROS ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.FARFETCHD, Species.SNORLAX, Species.LICKILICKY, Species.DUDUNSPARCE ] + [TimeOfDay.ALL]: [ SpeciesId.FARFETCHD, SpeciesId.SNORLAX, SpeciesId.LICKILICKY, SpeciesId.DUDUNSPARCE ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.LATIAS, Species.LATIOS ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.LATIAS, SpeciesId.LATIOS ]}, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []} }, - [Biome.GRASS]: { + [BiomeId.GRASS]: { [BiomePoolTier.COMMON]: { - [TimeOfDay.DAWN]: [{ 1: [ Species.HOPPIP ], 18: [ Species.SKIPLOOM ]}, Species.SUNKERN, Species.COTTONEE, Species.PETILIL ], - [TimeOfDay.DAY]: [{ 1: [ Species.HOPPIP ], 18: [ Species.SKIPLOOM ]}, Species.SUNKERN, Species.COTTONEE, Species.PETILIL ], - [TimeOfDay.DUSK]: [{ 1: [ Species.SEEDOT ], 14: [ Species.NUZLEAF ]}, { 1: [ Species.SHROOMISH ], 23: [ Species.BRELOOM ]}], - [TimeOfDay.NIGHT]: [{ 1: [ Species.SEEDOT ], 14: [ Species.NUZLEAF ]}, { 1: [ Species.SHROOMISH ], 23: [ Species.BRELOOM ]}], + [TimeOfDay.DAWN]: [{ 1: [ SpeciesId.HOPPIP ], 18: [ SpeciesId.SKIPLOOM ]}, SpeciesId.SUNKERN, SpeciesId.COTTONEE, SpeciesId.PETILIL ], + [TimeOfDay.DAY]: [{ 1: [ SpeciesId.HOPPIP ], 18: [ SpeciesId.SKIPLOOM ]}, SpeciesId.SUNKERN, SpeciesId.COTTONEE, SpeciesId.PETILIL ], + [TimeOfDay.DUSK]: [{ 1: [ SpeciesId.SEEDOT ], 14: [ SpeciesId.NUZLEAF ]}, { 1: [ SpeciesId.SHROOMISH ], 23: [ SpeciesId.BRELOOM ]}], + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.SEEDOT ], 14: [ SpeciesId.NUZLEAF ]}, { 1: [ SpeciesId.SHROOMISH ], 23: [ SpeciesId.BRELOOM ]}], [TimeOfDay.ALL]: [] }, [BiomePoolTier.UNCOMMON]: { - [TimeOfDay.DAWN]: [{ 1: [ Species.COMBEE ], 21: [ Species.VESPIQUEN ]}, { 1: [ Species.CHERUBI ], 25: [ Species.CHERRIM ]}], - [TimeOfDay.DAY]: [{ 1: [ Species.COMBEE ], 21: [ Species.VESPIQUEN ]}, { 1: [ Species.CHERUBI ], 25: [ Species.CHERRIM ]}], - [TimeOfDay.DUSK]: [{ 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ]}], - [TimeOfDay.NIGHT]: [{ 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ]}], + [TimeOfDay.DAWN]: [{ 1: [ SpeciesId.COMBEE ], 21: [ SpeciesId.VESPIQUEN ]}, { 1: [ SpeciesId.CHERUBI ], 25: [ SpeciesId.CHERRIM ]}], + [TimeOfDay.DAY]: [{ 1: [ SpeciesId.COMBEE ], 21: [ SpeciesId.VESPIQUEN ]}, { 1: [ SpeciesId.CHERUBI ], 25: [ SpeciesId.CHERRIM ]}], + [TimeOfDay.DUSK]: [{ 1: [ SpeciesId.FOONGUS ], 39: [ SpeciesId.AMOONGUSS ]}], + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.FOONGUS ], 39: [ SpeciesId.AMOONGUSS ]}], [TimeOfDay.ALL]: [] }, [BiomePoolTier.RARE]: { @@ -249,185 +249,185 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [{ 1: [ Species.BULBASAUR ], 16: [ Species.IVYSAUR ], 32: [ Species.VENUSAUR ]}, Species.GROWLITHE, { 1: [ Species.TURTWIG ], 18: [ Species.GROTLE ], 32: [ Species.TORTERRA ]}] + [TimeOfDay.ALL]: [{ 1: [ SpeciesId.BULBASAUR ], 16: [ SpeciesId.IVYSAUR ], 32: [ SpeciesId.VENUSAUR ]}, SpeciesId.GROWLITHE, { 1: [ SpeciesId.TURTWIG ], 18: [ SpeciesId.GROTLE ], 32: [ SpeciesId.TORTERRA ]}] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SUDOWOODO ]}, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VIRIZION ]}, - [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.JUMPLUFF, Species.SUNFLORA, Species.WHIMSICOTT ], [TimeOfDay.DAY]: [ Species.JUMPLUFF, Species.SUNFLORA, Species.WHIMSICOTT ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VENUSAUR, Species.SUDOWOODO, Species.TORTERRA ]}, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VIRIZION ]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.SUDOWOODO ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.VIRIZION ]}, + [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ SpeciesId.JUMPLUFF, SpeciesId.SUNFLORA, SpeciesId.WHIMSICOTT ], [TimeOfDay.DAY]: [ SpeciesId.JUMPLUFF, SpeciesId.SUNFLORA, SpeciesId.WHIMSICOTT ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.VENUSAUR, SpeciesId.SUDOWOODO, SpeciesId.TORTERRA ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.VIRIZION ]}, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []} }, - [Biome.TALL_GRASS]: { + [BiomeId.TALL_GRASS]: { [BiomePoolTier.COMMON]: { - [TimeOfDay.DAWN]: [{ 1: [ Species.BOUNSWEET ], 18: [ Species.STEENEE ], 58: [ Species.TSAREENA ]}], - [TimeOfDay.DAY]: [{ 1: [ Species.NIDORAN_F ], 16: [ Species.NIDORINA ]}, { 1: [ Species.NIDORAN_M ], 16: [ Species.NIDORINO ]}, { 1: [ Species.BOUNSWEET ], 18: [ Species.STEENEE ], 58: [ Species.TSAREENA ]}], - [TimeOfDay.DUSK]: [{ 1: [ Species.ODDISH ], 21: [ Species.GLOOM ]}, { 1: [ Species.KRICKETOT ], 10: [ Species.KRICKETUNE ]}], - [TimeOfDay.NIGHT]: [{ 1: [ Species.ODDISH ], 21: [ Species.GLOOM ]}, { 1: [ Species.KRICKETOT ], 10: [ Species.KRICKETUNE ]}], - [TimeOfDay.ALL]: [{ 1: [ Species.NINCADA ], 20: [ Species.NINJASK ]}, { 1: [ Species.FOMANTIS ], 44: [ Species.LURANTIS ]}, { 1: [ Species.NYMBLE ], 24: [ Species.LOKIX ]}] + [TimeOfDay.DAWN]: [{ 1: [ SpeciesId.BOUNSWEET ], 18: [ SpeciesId.STEENEE ], 58: [ SpeciesId.TSAREENA ]}], + [TimeOfDay.DAY]: [{ 1: [ SpeciesId.NIDORAN_F ], 16: [ SpeciesId.NIDORINA ]}, { 1: [ SpeciesId.NIDORAN_M ], 16: [ SpeciesId.NIDORINO ]}, { 1: [ SpeciesId.BOUNSWEET ], 18: [ SpeciesId.STEENEE ], 58: [ SpeciesId.TSAREENA ]}], + [TimeOfDay.DUSK]: [{ 1: [ SpeciesId.ODDISH ], 21: [ SpeciesId.GLOOM ]}, { 1: [ SpeciesId.KRICKETOT ], 10: [ SpeciesId.KRICKETUNE ]}], + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.ODDISH ], 21: [ SpeciesId.GLOOM ]}, { 1: [ SpeciesId.KRICKETOT ], 10: [ SpeciesId.KRICKETUNE ]}], + [TimeOfDay.ALL]: [{ 1: [ SpeciesId.NINCADA ], 20: [ SpeciesId.NINJASK ]}, { 1: [ SpeciesId.FOMANTIS ], 44: [ SpeciesId.LURANTIS ]}, { 1: [ SpeciesId.NYMBLE ], 24: [ SpeciesId.LOKIX ]}] }, [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], - [TimeOfDay.NIGHT]: [{ 1: [ Species.PARAS ], 24: [ Species.PARASECT ]}, { 1: [ Species.VENONAT ], 31: [ Species.VENOMOTH ]}, { 1: [ Species.SPINARAK ], 22: [ Species.ARIADOS ]}], - [TimeOfDay.ALL]: [ Species.VULPIX ] + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.PARAS ], 24: [ SpeciesId.PARASECT ]}, { 1: [ SpeciesId.VENONAT ], 31: [ SpeciesId.VENOMOTH ]}, { 1: [ SpeciesId.SPINARAK ], 22: [ SpeciesId.ARIADOS ]}], + [TimeOfDay.ALL]: [ SpeciesId.VULPIX ] }, [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.PINSIR, { 1: [ Species.CHIKORITA ], 16: [ Species.BAYLEEF ], 32: [ Species.MEGANIUM ]}, { 1: [ Species.GIRAFARIG ], 62: [ Species.FARIGIRAF ]}, Species.ZANGOOSE, Species.KECLEON, Species.TROPIUS ] + [TimeOfDay.ALL]: [ SpeciesId.PINSIR, { 1: [ SpeciesId.CHIKORITA ], 16: [ SpeciesId.BAYLEEF ], 32: [ SpeciesId.MEGANIUM ]}, { 1: [ SpeciesId.GIRAFARIG ], 62: [ SpeciesId.FARIGIRAF ]}, SpeciesId.ZANGOOSE, SpeciesId.KECLEON, SpeciesId.TROPIUS ] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SCYTHER, Species.SHEDINJA, Species.ROTOM ]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.SCYTHER, SpeciesId.SHEDINJA, SpeciesId.ROTOM ]}, [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, [BiomePoolTier.BOSS]: { - [TimeOfDay.DAWN]: [ Species.TSAREENA ], - [TimeOfDay.DAY]: [ Species.NIDOQUEEN, Species.NIDOKING, Species.TSAREENA ], - [TimeOfDay.DUSK]: [ Species.VILEPLUME, Species.KRICKETUNE ], - [TimeOfDay.NIGHT]: [ Species.VILEPLUME, Species.KRICKETUNE ], - [TimeOfDay.ALL]: [ Species.NINJASK, Species.ZANGOOSE, Species.KECLEON, Species.LURANTIS, Species.LOKIX ] + [TimeOfDay.DAWN]: [ SpeciesId.TSAREENA ], + [TimeOfDay.DAY]: [ SpeciesId.NIDOQUEEN, SpeciesId.NIDOKING, SpeciesId.TSAREENA ], + [TimeOfDay.DUSK]: [ SpeciesId.VILEPLUME, SpeciesId.KRICKETUNE ], + [TimeOfDay.NIGHT]: [ SpeciesId.VILEPLUME, SpeciesId.KRICKETUNE ], + [TimeOfDay.ALL]: [ SpeciesId.NINJASK, SpeciesId.ZANGOOSE, SpeciesId.KECLEON, SpeciesId.LURANTIS, SpeciesId.LOKIX ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [ Species.BELLOSSOM ], [TimeOfDay.DAY]: [ Species.BELLOSSOM ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.PINSIR, Species.MEGANIUM, Species.FARIGIRAF ]}, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ROTOM ]}, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [ SpeciesId.BELLOSSOM ], [TimeOfDay.DAY]: [ SpeciesId.BELLOSSOM ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.PINSIR, SpeciesId.MEGANIUM, SpeciesId.FARIGIRAF ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.ROTOM ]}, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []} }, - [Biome.METROPOLIS]: { + [BiomeId.METROPOLIS]: { [BiomePoolTier.COMMON]: { - [TimeOfDay.DAWN]: [{ 1: [ Species.YAMPER ], 25: [ Species.BOLTUND ]}], - [TimeOfDay.DAY]: [{ 1: [ Species.YAMPER ], 25: [ Species.BOLTUND ]}], - [TimeOfDay.DUSK]: [{ 1: [ Species.PATRAT ], 20: [ Species.WATCHOG ]}], - [TimeOfDay.NIGHT]: [{ 1: [ Species.HOUNDOUR ], 24: [ Species.HOUNDOOM ]}, { 1: [ Species.PATRAT ], 20: [ Species.WATCHOG ]}], - [TimeOfDay.ALL]: [{ 1: [ Species.RATTATA ], 20: [ Species.RATICATE ]}, { 1: [ Species.ZIGZAGOON ], 20: [ Species.LINOONE ]}, { 1: [ Species.LILLIPUP ], 16: [ Species.HERDIER ], 32: [ Species.STOUTLAND ]}] + [TimeOfDay.DAWN]: [{ 1: [ SpeciesId.YAMPER ], 25: [ SpeciesId.BOLTUND ]}], + [TimeOfDay.DAY]: [{ 1: [ SpeciesId.YAMPER ], 25: [ SpeciesId.BOLTUND ]}], + [TimeOfDay.DUSK]: [{ 1: [ SpeciesId.PATRAT ], 20: [ SpeciesId.WATCHOG ]}], + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.HOUNDOUR ], 24: [ SpeciesId.HOUNDOOM ]}, { 1: [ SpeciesId.PATRAT ], 20: [ SpeciesId.WATCHOG ]}], + [TimeOfDay.ALL]: [{ 1: [ SpeciesId.RATTATA ], 20: [ SpeciesId.RATICATE ]}, { 1: [ SpeciesId.ZIGZAGOON ], 20: [ SpeciesId.LINOONE ]}, { 1: [ SpeciesId.LILLIPUP ], 16: [ SpeciesId.HERDIER ], 32: [ SpeciesId.STOUTLAND ]}] }, [BiomePoolTier.UNCOMMON]: { - [TimeOfDay.DAWN]: [{ 1: [ Species.PATRAT ], 20: [ Species.WATCHOG ]}, Species.INDEEDEE ], - [TimeOfDay.DAY]: [{ 1: [ Species.PATRAT ], 20: [ Species.WATCHOG ]}, Species.INDEEDEE ], - [TimeOfDay.DUSK]: [{ 1: [ Species.ESPURR ], 25: [ Species.MEOWSTIC ]}], - [TimeOfDay.NIGHT]: [{ 1: [ Species.ESPURR ], 25: [ Species.MEOWSTIC ]}], - [TimeOfDay.ALL]: [ Species.PIKACHU, { 1: [ Species.GLAMEOW ], 38: [ Species.PURUGLY ]}, Species.FURFROU, { 1: [ Species.FIDOUGH ], 26: [ Species.DACHSBUN ]}, Species.SQUAWKABILLY ] + [TimeOfDay.DAWN]: [{ 1: [ SpeciesId.PATRAT ], 20: [ SpeciesId.WATCHOG ]}, SpeciesId.INDEEDEE ], + [TimeOfDay.DAY]: [{ 1: [ SpeciesId.PATRAT ], 20: [ SpeciesId.WATCHOG ]}, SpeciesId.INDEEDEE ], + [TimeOfDay.DUSK]: [{ 1: [ SpeciesId.ESPURR ], 25: [ SpeciesId.MEOWSTIC ]}], + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.ESPURR ], 25: [ SpeciesId.MEOWSTIC ]}], + [TimeOfDay.ALL]: [ SpeciesId.PIKACHU, { 1: [ SpeciesId.GLAMEOW ], 38: [ SpeciesId.PURUGLY ]}, SpeciesId.FURFROU, { 1: [ SpeciesId.FIDOUGH ], 26: [ SpeciesId.DACHSBUN ]}, SpeciesId.SQUAWKABILLY ] }, [BiomePoolTier.RARE]: { - [TimeOfDay.DAWN]: [{ 1: [ Species.TANDEMAUS ], 25: [ Species.MAUSHOLD ]}], - [TimeOfDay.DAY]: [{ 1: [ Species.TANDEMAUS ], 25: [ Species.MAUSHOLD ]}], - [TimeOfDay.DUSK]: [ Species.MORPEKO ], - [TimeOfDay.NIGHT]: [ Species.MORPEKO ], - [TimeOfDay.ALL]: [{ 1: [ Species.VAROOM ], 40: [ Species.REVAVROOM ]}] + [TimeOfDay.DAWN]: [{ 1: [ SpeciesId.TANDEMAUS ], 25: [ SpeciesId.MAUSHOLD ]}], + [TimeOfDay.DAY]: [{ 1: [ SpeciesId.TANDEMAUS ], 25: [ SpeciesId.MAUSHOLD ]}], + [TimeOfDay.DUSK]: [ SpeciesId.MORPEKO ], + [TimeOfDay.NIGHT]: [ SpeciesId.MORPEKO ], + [TimeOfDay.ALL]: [{ 1: [ SpeciesId.VAROOM ], 40: [ SpeciesId.REVAVROOM ]}] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DITTO, Species.EEVEE, Species.SMEARGLE ]}, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CASTFORM ]}, - [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.BOLTUND ], [TimeOfDay.DAY]: [ Species.BOLTUND ], [TimeOfDay.DUSK]: [ Species.MEOWSTIC ], [TimeOfDay.NIGHT]: [ Species.MEOWSTIC ], [TimeOfDay.ALL]: [ Species.STOUTLAND, Species.FURFROU, Species.DACHSBUN ]}, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [ Species.MAUSHOLD ], [TimeOfDay.DAY]: [ Species.MAUSHOLD ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CASTFORM, Species.REVAVROOM ]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.DITTO, SpeciesId.EEVEE, SpeciesId.SMEARGLE ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.CASTFORM ]}, + [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ SpeciesId.BOLTUND ], [TimeOfDay.DAY]: [ SpeciesId.BOLTUND ], [TimeOfDay.DUSK]: [ SpeciesId.MEOWSTIC ], [TimeOfDay.NIGHT]: [ SpeciesId.MEOWSTIC ], [TimeOfDay.ALL]: [ SpeciesId.STOUTLAND, SpeciesId.FURFROU, SpeciesId.DACHSBUN ]}, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [ SpeciesId.MAUSHOLD ], [TimeOfDay.DAY]: [ SpeciesId.MAUSHOLD ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.CASTFORM, SpeciesId.REVAVROOM ]}, [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []} }, - [Biome.FOREST]: { + [BiomeId.FOREST]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [ - Species.BUTTERFREE, - { 1: [ Species.BELLSPROUT ], 21: [ Species.WEEPINBELL ]}, - { 1: [ Species.COMBEE ], 21: [ Species.VESPIQUEN ]}, - Species.PETILIL, - { 1: [ Species.DEERLING ], 34: [ Species.SAWSBUCK ]}, - Species.VIVILLON + SpeciesId.BUTTERFREE, + { 1: [ SpeciesId.BELLSPROUT ], 21: [ SpeciesId.WEEPINBELL ]}, + { 1: [ SpeciesId.COMBEE ], 21: [ SpeciesId.VESPIQUEN ]}, + SpeciesId.PETILIL, + { 1: [ SpeciesId.DEERLING ], 34: [ SpeciesId.SAWSBUCK ]}, + SpeciesId.VIVILLON ], [TimeOfDay.DAY]: [ - Species.BUTTERFREE, - { 1: [ Species.BELLSPROUT ], 21: [ Species.WEEPINBELL ]}, - Species.BEAUTIFLY, - { 1: [ Species.COMBEE ], 21: [ Species.VESPIQUEN ]}, - Species.PETILIL, - { 1: [ Species.DEERLING ], 34: [ Species.SAWSBUCK ]}, - Species.VIVILLON + SpeciesId.BUTTERFREE, + { 1: [ SpeciesId.BELLSPROUT ], 21: [ SpeciesId.WEEPINBELL ]}, + SpeciesId.BEAUTIFLY, + { 1: [ SpeciesId.COMBEE ], 21: [ SpeciesId.VESPIQUEN ]}, + SpeciesId.PETILIL, + { 1: [ SpeciesId.DEERLING ], 34: [ SpeciesId.SAWSBUCK ]}, + SpeciesId.VIVILLON ], [TimeOfDay.DUSK]: [ - Species.BEEDRILL, - { 1: [ Species.PINECO ], 31: [ Species.FORRETRESS ]}, - { 1: [ Species.SEEDOT ], 14: [ Species.NUZLEAF ]}, - { 1: [ Species.SHROOMISH ], 23: [ Species.BRELOOM ]}, - { 1: [ Species.VENIPEDE ], 22: [ Species.WHIRLIPEDE ], 30: [ Species.SCOLIPEDE ]} + SpeciesId.BEEDRILL, + { 1: [ SpeciesId.PINECO ], 31: [ SpeciesId.FORRETRESS ]}, + { 1: [ SpeciesId.SEEDOT ], 14: [ SpeciesId.NUZLEAF ]}, + { 1: [ SpeciesId.SHROOMISH ], 23: [ SpeciesId.BRELOOM ]}, + { 1: [ SpeciesId.VENIPEDE ], 22: [ SpeciesId.WHIRLIPEDE ], 30: [ SpeciesId.SCOLIPEDE ]} ], [TimeOfDay.NIGHT]: [ - Species.BEEDRILL, - { 1: [ Species.VENONAT ], 31: [ Species.VENOMOTH ]}, - { 1: [ Species.SPINARAK ], 22: [ Species.ARIADOS ]}, - { 1: [ Species.PINECO ], 31: [ Species.FORRETRESS ]}, - Species.DUSTOX, - { 1: [ Species.SEEDOT ], 14: [ Species.NUZLEAF ]}, - { 1: [ Species.SHROOMISH ], 23: [ Species.BRELOOM ]}, - { 1: [ Species.VENIPEDE ], 22: [ Species.WHIRLIPEDE ], 30: [ Species.SCOLIPEDE ]} + SpeciesId.BEEDRILL, + { 1: [ SpeciesId.VENONAT ], 31: [ SpeciesId.VENOMOTH ]}, + { 1: [ SpeciesId.SPINARAK ], 22: [ SpeciesId.ARIADOS ]}, + { 1: [ SpeciesId.PINECO ], 31: [ SpeciesId.FORRETRESS ]}, + SpeciesId.DUSTOX, + { 1: [ SpeciesId.SEEDOT ], 14: [ SpeciesId.NUZLEAF ]}, + { 1: [ SpeciesId.SHROOMISH ], 23: [ SpeciesId.BRELOOM ]}, + { 1: [ SpeciesId.VENIPEDE ], 22: [ SpeciesId.WHIRLIPEDE ], 30: [ SpeciesId.SCOLIPEDE ]} ], - [TimeOfDay.ALL]: [{ 1: [ Species.TAROUNTULA ], 15: [ Species.SPIDOPS ]}, { 1: [ Species.NYMBLE ], 24: [ Species.LOKIX ]}, { 1: [ Species.SHROODLE ], 28: [ Species.GRAFAIAI ]}] + [TimeOfDay.ALL]: [{ 1: [ SpeciesId.TAROUNTULA ], 15: [ SpeciesId.SPIDOPS ]}, { 1: [ SpeciesId.NYMBLE ], 24: [ SpeciesId.LOKIX ]}, { 1: [ SpeciesId.SHROODLE ], 28: [ SpeciesId.GRAFAIAI ]}] }, [BiomePoolTier.UNCOMMON]: { - [TimeOfDay.DAWN]: [ Species.ROSELIA, Species.MOTHIM, { 1: [ Species.SEWADDLE ], 20: [ Species.SWADLOON ], 30: [ Species.LEAVANNY ]}], - [TimeOfDay.DAY]: [ Species.ROSELIA, Species.MOTHIM, { 1: [ Species.SEWADDLE ], 20: [ Species.SWADLOON ], 30: [ Species.LEAVANNY ]}], - [TimeOfDay.DUSK]: [{ 1: [ Species.SPINARAK ], 22: [ Species.ARIADOS ]}, { 1: [ Species.DOTTLER ], 30: [ Species.ORBEETLE ]}], - [TimeOfDay.NIGHT]: [{ 1: [ Species.HOOTHOOT ], 20: [ Species.NOCTOWL ]}, { 1: [ Species.ROCKRUFF ], 25: [ Species.LYCANROC ]}, { 1: [ Species.DOTTLER ], 30: [ Species.ORBEETLE ]}], + [TimeOfDay.DAWN]: [ SpeciesId.ROSELIA, SpeciesId.MOTHIM, { 1: [ SpeciesId.SEWADDLE ], 20: [ SpeciesId.SWADLOON ], 30: [ SpeciesId.LEAVANNY ]}], + [TimeOfDay.DAY]: [ SpeciesId.ROSELIA, SpeciesId.MOTHIM, { 1: [ SpeciesId.SEWADDLE ], 20: [ SpeciesId.SWADLOON ], 30: [ SpeciesId.LEAVANNY ]}], + [TimeOfDay.DUSK]: [{ 1: [ SpeciesId.SPINARAK ], 22: [ SpeciesId.ARIADOS ]}, { 1: [ SpeciesId.DOTTLER ], 30: [ SpeciesId.ORBEETLE ]}], + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.HOOTHOOT ], 20: [ SpeciesId.NOCTOWL ]}, { 1: [ SpeciesId.ROCKRUFF ], 25: [ SpeciesId.LYCANROC ]}, { 1: [ SpeciesId.DOTTLER ], 30: [ SpeciesId.ORBEETLE ]}], [TimeOfDay.ALL]: [ - { 1: [ Species.EKANS ], 22: [ Species.ARBOK ]}, - { 1: [ Species.TEDDIURSA ], 30: [ Species.URSARING ]}, - { 1: [ Species.BURMY ], 20: [ Species.WORMADAM ]}, - { 1: [ Species.PANSAGE ], 30: [ Species.SIMISAGE ]} + { 1: [ SpeciesId.EKANS ], 22: [ SpeciesId.ARBOK ]}, + { 1: [ SpeciesId.TEDDIURSA ], 30: [ SpeciesId.URSARING ]}, + { 1: [ SpeciesId.BURMY ], 20: [ SpeciesId.WORMADAM ]}, + { 1: [ SpeciesId.PANSAGE ], 30: [ SpeciesId.SIMISAGE ]} ] }, [BiomePoolTier.RARE]: { - [TimeOfDay.DAWN]: [ Species.EXEGGCUTE, Species.STANTLER ], - [TimeOfDay.DAY]: [ Species.EXEGGCUTE, Species.STANTLER ], - [TimeOfDay.DUSK]: [ Species.SCYTHER ], - [TimeOfDay.NIGHT]: [ Species.SCYTHER ], + [TimeOfDay.DAWN]: [ SpeciesId.EXEGGCUTE, SpeciesId.STANTLER ], + [TimeOfDay.DAY]: [ SpeciesId.EXEGGCUTE, SpeciesId.STANTLER ], + [TimeOfDay.DUSK]: [ SpeciesId.SCYTHER ], + [TimeOfDay.NIGHT]: [ SpeciesId.SCYTHER ], [TimeOfDay.ALL]: [ - Species.HERACROSS, - { 1: [ Species.TREECKO ], 16: [ Species.GROVYLE ], 36: [ Species.SCEPTILE ]}, - Species.TROPIUS, - Species.KARRABLAST, - Species.SHELMET, - { 1: [ Species.CHESPIN ], 16: [ Species.QUILLADIN ], 36: [ Species.CHESNAUGHT ]}, - { 1: [ Species.ROWLET ], 17: [ Species.DARTRIX ], 34: [ Species.DECIDUEYE ]}, - Species.SQUAWKABILLY, - { 1: [ Species.TOEDSCOOL ], 30: [ Species.TOEDSCRUEL ]} + SpeciesId.HERACROSS, + { 1: [ SpeciesId.TREECKO ], 16: [ SpeciesId.GROVYLE ], 36: [ SpeciesId.SCEPTILE ]}, + SpeciesId.TROPIUS, + SpeciesId.KARRABLAST, + SpeciesId.SHELMET, + { 1: [ SpeciesId.CHESPIN ], 16: [ SpeciesId.QUILLADIN ], 36: [ SpeciesId.CHESNAUGHT ]}, + { 1: [ SpeciesId.ROWLET ], 17: [ SpeciesId.DARTRIX ], 34: [ SpeciesId.DECIDUEYE ]}, + SpeciesId.SQUAWKABILLY, + { 1: [ SpeciesId.TOEDSCOOL ], 30: [ SpeciesId.TOEDSCRUEL ]} ] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [ Species.BLOODMOON_URSALUNA ], [TimeOfDay.ALL]: [ Species.DURANT ]}, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KARTANA, Species.WO_CHIEN ]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [ SpeciesId.BLOODMOON_URSALUNA ], [TimeOfDay.ALL]: [ SpeciesId.DURANT ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.KARTANA, SpeciesId.WO_CHIEN ]}, [BiomePoolTier.BOSS]: { - [TimeOfDay.DAWN]: [ Species.VICTREEBEL, Species.MOTHIM, Species.VESPIQUEN, Species.LILLIGANT, Species.SAWSBUCK ], - [TimeOfDay.DAY]: [ Species.VICTREEBEL, Species.BEAUTIFLY, Species.MOTHIM, Species.VESPIQUEN, Species.LILLIGANT, Species.SAWSBUCK ], - [TimeOfDay.DUSK]: [ Species.ARIADOS, Species.FORRETRESS, Species.SHIFTRY, Species.BRELOOM, Species.SCOLIPEDE, Species.ORBEETLE ], - [TimeOfDay.NIGHT]: [ Species.VENOMOTH, Species.NOCTOWL, Species.ARIADOS, Species.FORRETRESS, Species.DUSTOX, Species.SHIFTRY, Species.BRELOOM, Species.SCOLIPEDE, Species.ORBEETLE ], - [TimeOfDay.ALL]: [ Species.WORMADAM, Species.SIMISAGE, Species.SPIDOPS, Species.LOKIX, Species.GRAFAIAI ] + [TimeOfDay.DAWN]: [ SpeciesId.VICTREEBEL, SpeciesId.MOTHIM, SpeciesId.VESPIQUEN, SpeciesId.LILLIGANT, SpeciesId.SAWSBUCK ], + [TimeOfDay.DAY]: [ SpeciesId.VICTREEBEL, SpeciesId.BEAUTIFLY, SpeciesId.MOTHIM, SpeciesId.VESPIQUEN, SpeciesId.LILLIGANT, SpeciesId.SAWSBUCK ], + [TimeOfDay.DUSK]: [ SpeciesId.ARIADOS, SpeciesId.FORRETRESS, SpeciesId.SHIFTRY, SpeciesId.BRELOOM, SpeciesId.SCOLIPEDE, SpeciesId.ORBEETLE ], + [TimeOfDay.NIGHT]: [ SpeciesId.VENOMOTH, SpeciesId.NOCTOWL, SpeciesId.ARIADOS, SpeciesId.FORRETRESS, SpeciesId.DUSTOX, SpeciesId.SHIFTRY, SpeciesId.BRELOOM, SpeciesId.SCOLIPEDE, SpeciesId.ORBEETLE ], + [TimeOfDay.ALL]: [ SpeciesId.WORMADAM, SpeciesId.SIMISAGE, SpeciesId.SPIDOPS, SpeciesId.LOKIX, SpeciesId.GRAFAIAI ] }, [BiomePoolTier.BOSS_RARE]: { - [TimeOfDay.DAWN]: [ Species.STANTLER ], - [TimeOfDay.DAY]: [ Species.STANTLER ], + [TimeOfDay.DAWN]: [ SpeciesId.STANTLER ], + [TimeOfDay.DAY]: [ SpeciesId.STANTLER ], [TimeOfDay.DUSK]: [], - [TimeOfDay.NIGHT]: [ Species.LYCANROC, Species.BLOODMOON_URSALUNA ], - [TimeOfDay.ALL]: [ Species.HERACROSS, Species.SCEPTILE, Species.ESCAVALIER, Species.ACCELGOR, Species.DURANT, Species.CHESNAUGHT, Species.DECIDUEYE, Species.TOEDSCRUEL ] + [TimeOfDay.NIGHT]: [ SpeciesId.LYCANROC, SpeciesId.BLOODMOON_URSALUNA ], + [TimeOfDay.ALL]: [ SpeciesId.HERACROSS, SpeciesId.SCEPTILE, SpeciesId.ESCAVALIER, SpeciesId.ACCELGOR, SpeciesId.DURANT, SpeciesId.CHESNAUGHT, SpeciesId.DECIDUEYE, SpeciesId.TOEDSCRUEL ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KARTANA, Species.WO_CHIEN ]}, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CALYREX ]} + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.KARTANA, SpeciesId.WO_CHIEN ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.CALYREX ]} }, - [Biome.SEA]: { + [BiomeId.SEA]: { [BiomePoolTier.COMMON]: { - [TimeOfDay.DAWN]: [{ 1: [ Species.SLOWPOKE ], 37: [ Species.SLOWBRO ]}, { 1: [ Species.WINGULL ], 25: [ Species.PELIPPER ]}, Species.CRAMORANT, { 1: [ Species.FINIZEN ], 38: [ Species.PALAFIN ]}], - [TimeOfDay.DAY]: [{ 1: [ Species.SLOWPOKE ], 37: [ Species.SLOWBRO ]}, { 1: [ Species.WINGULL ], 25: [ Species.PELIPPER ]}, Species.CRAMORANT, { 1: [ Species.FINIZEN ], 38: [ Species.PALAFIN ]}], - [TimeOfDay.DUSK]: [{ 1: [ Species.INKAY ], 30: [ Species.MALAMAR ]}], - [TimeOfDay.NIGHT]: [{ 1: [ Species.FINNEON ], 31: [ Species.LUMINEON ]}, { 1: [ Species.INKAY ], 30: [ Species.MALAMAR ]}], - [TimeOfDay.ALL]: [{ 1: [ Species.TENTACOOL ], 30: [ Species.TENTACRUEL ]}, { 1: [ Species.MAGIKARP ], 20: [ Species.GYARADOS ]}, { 1: [ Species.BUIZEL ], 26: [ Species.FLOATZEL ]}] + [TimeOfDay.DAWN]: [{ 1: [ SpeciesId.SLOWPOKE ], 37: [ SpeciesId.SLOWBRO ]}, { 1: [ SpeciesId.WINGULL ], 25: [ SpeciesId.PELIPPER ]}, SpeciesId.CRAMORANT, { 1: [ SpeciesId.FINIZEN ], 38: [ SpeciesId.PALAFIN ]}], + [TimeOfDay.DAY]: [{ 1: [ SpeciesId.SLOWPOKE ], 37: [ SpeciesId.SLOWBRO ]}, { 1: [ SpeciesId.WINGULL ], 25: [ SpeciesId.PELIPPER ]}, SpeciesId.CRAMORANT, { 1: [ SpeciesId.FINIZEN ], 38: [ SpeciesId.PALAFIN ]}], + [TimeOfDay.DUSK]: [{ 1: [ SpeciesId.INKAY ], 30: [ SpeciesId.MALAMAR ]}], + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.FINNEON ], 31: [ SpeciesId.LUMINEON ]}, { 1: [ SpeciesId.INKAY ], 30: [ SpeciesId.MALAMAR ]}], + [TimeOfDay.ALL]: [{ 1: [ SpeciesId.TENTACOOL ], 30: [ SpeciesId.TENTACRUEL ]}, { 1: [ SpeciesId.MAGIKARP ], 20: [ SpeciesId.GYARADOS ]}, { 1: [ SpeciesId.BUIZEL ], 26: [ SpeciesId.FLOATZEL ]}] }, [BiomePoolTier.UNCOMMON]: { - [TimeOfDay.DAWN]: [{ 1: [ Species.STARYU ], 30: [ Species.STARMIE ]}], - [TimeOfDay.DAY]: [{ 1: [ Species.STARYU ], 30: [ Species.STARMIE ]}], - [TimeOfDay.DUSK]: [{ 1: [ Species.SLOWPOKE ], 37: [ Species.SLOWBRO ]}, Species.SHELLDER, { 1: [ Species.CARVANHA ], 30: [ Species.SHARPEDO ]}], - [TimeOfDay.NIGHT]: [{ 1: [ Species.SLOWPOKE ], 37: [ Species.SLOWBRO ]}, Species.SHELLDER, { 1: [ Species.CHINCHOU ], 27: [ Species.LANTURN ]}, { 1: [ Species.CARVANHA ], 30: [ Species.SHARPEDO ]}], + [TimeOfDay.DAWN]: [{ 1: [ SpeciesId.STARYU ], 30: [ SpeciesId.STARMIE ]}], + [TimeOfDay.DAY]: [{ 1: [ SpeciesId.STARYU ], 30: [ SpeciesId.STARMIE ]}], + [TimeOfDay.DUSK]: [{ 1: [ SpeciesId.SLOWPOKE ], 37: [ SpeciesId.SLOWBRO ]}, SpeciesId.SHELLDER, { 1: [ SpeciesId.CARVANHA ], 30: [ SpeciesId.SHARPEDO ]}], + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.SLOWPOKE ], 37: [ SpeciesId.SLOWBRO ]}, SpeciesId.SHELLDER, { 1: [ SpeciesId.CHINCHOU ], 27: [ SpeciesId.LANTURN ]}, { 1: [ SpeciesId.CARVANHA ], 30: [ SpeciesId.SHARPEDO ]}], [TimeOfDay.ALL]: [ - { 1: [ Species.POLIWAG ], 25: [ Species.POLIWHIRL ]}, - { 1: [ Species.HORSEA ], 32: [ Species.SEADRA ]}, - { 1: [ Species.GOLDEEN ], 33: [ Species.SEAKING ]}, - { 1: [ Species.WAILMER ], 40: [ Species.WAILORD ]}, - { 1: [ Species.PANPOUR ], 30: [ Species.SIMIPOUR ]}, - { 1: [ Species.WATTREL ], 25: [ Species.KILOWATTREL ]} + { 1: [ SpeciesId.POLIWAG ], 25: [ SpeciesId.POLIWHIRL ]}, + { 1: [ SpeciesId.HORSEA ], 32: [ SpeciesId.SEADRA ]}, + { 1: [ SpeciesId.GOLDEEN ], 33: [ SpeciesId.SEAKING ]}, + { 1: [ SpeciesId.WAILMER ], 40: [ SpeciesId.WAILORD ]}, + { 1: [ SpeciesId.PANPOUR ], 30: [ SpeciesId.SIMIPOUR ]}, + { 1: [ SpeciesId.WATTREL ], 25: [ SpeciesId.KILOWATTREL ]} ] }, [BiomePoolTier.RARE]: { @@ -435,45 +435,45 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.LAPRAS, { 1: [ Species.PIPLUP ], 16: [ Species.PRINPLUP ], 36: [ Species.EMPOLEON ]}, { 1: [ Species.POPPLIO ], 17: [ Species.BRIONNE ], 34: [ Species.PRIMARINA ]}] + [TimeOfDay.ALL]: [ SpeciesId.LAPRAS, { 1: [ SpeciesId.PIPLUP ], 16: [ SpeciesId.PRINPLUP ], 36: [ SpeciesId.EMPOLEON ]}, { 1: [ SpeciesId.POPPLIO ], 17: [ SpeciesId.BRIONNE ], 34: [ SpeciesId.PRIMARINA ]}] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KINGDRA, Species.ROTOM, { 1: [ Species.TIRTOUGA ], 37: [ Species.CARRACOSTA ]}]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.KINGDRA, SpeciesId.ROTOM, { 1: [ SpeciesId.TIRTOUGA ], 37: [ SpeciesId.CARRACOSTA ]}]}, [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, [BiomePoolTier.BOSS]: { - [TimeOfDay.DAWN]: [ Species.PELIPPER, Species.CRAMORANT, Species.PALAFIN ], - [TimeOfDay.DAY]: [ Species.PELIPPER, Species.CRAMORANT, Species.PALAFIN ], - [TimeOfDay.DUSK]: [ Species.SHARPEDO, Species.MALAMAR ], - [TimeOfDay.NIGHT]: [ Species.SHARPEDO, Species.LUMINEON, Species.MALAMAR ], - [TimeOfDay.ALL]: [ Species.TENTACRUEL, Species.FLOATZEL, Species.SIMIPOUR, Species.KILOWATTREL ] + [TimeOfDay.DAWN]: [ SpeciesId.PELIPPER, SpeciesId.CRAMORANT, SpeciesId.PALAFIN ], + [TimeOfDay.DAY]: [ SpeciesId.PELIPPER, SpeciesId.CRAMORANT, SpeciesId.PALAFIN ], + [TimeOfDay.DUSK]: [ SpeciesId.SHARPEDO, SpeciesId.MALAMAR ], + [TimeOfDay.NIGHT]: [ SpeciesId.SHARPEDO, SpeciesId.LUMINEON, SpeciesId.MALAMAR ], + [TimeOfDay.ALL]: [ SpeciesId.TENTACRUEL, SpeciesId.FLOATZEL, SpeciesId.SIMIPOUR, SpeciesId.KILOWATTREL ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KINGDRA, Species.EMPOLEON, Species.PRIMARINA ]}, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ROTOM ]}, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.LUGIA ]} + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.KINGDRA, SpeciesId.EMPOLEON, SpeciesId.PRIMARINA ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.ROTOM ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.LUGIA ]} }, - [Biome.SWAMP]: { + [BiomeId.SWAMP]: { [BiomePoolTier.COMMON]: { - [TimeOfDay.DAWN]: [{ 1: [ Species.WOOPER ], 20: [ Species.QUAGSIRE ]}, { 1: [ Species.LOTAD ], 14: [ Species.LOMBRE ]}], - [TimeOfDay.DAY]: [{ 1: [ Species.WOOPER ], 20: [ Species.QUAGSIRE ]}, { 1: [ Species.LOTAD ], 14: [ Species.LOMBRE ]}], - [TimeOfDay.DUSK]: [{ 1: [ Species.EKANS ], 22: [ Species.ARBOK ]}, { 1: [ Species.PALDEA_WOOPER ], 20: [ Species.CLODSIRE ]}], - [TimeOfDay.NIGHT]: [{ 1: [ Species.EKANS ], 22: [ Species.ARBOK ]}, { 1: [ Species.PALDEA_WOOPER ], 20: [ Species.CLODSIRE ]}], + [TimeOfDay.DAWN]: [{ 1: [ SpeciesId.WOOPER ], 20: [ SpeciesId.QUAGSIRE ]}, { 1: [ SpeciesId.LOTAD ], 14: [ SpeciesId.LOMBRE ]}], + [TimeOfDay.DAY]: [{ 1: [ SpeciesId.WOOPER ], 20: [ SpeciesId.QUAGSIRE ]}, { 1: [ SpeciesId.LOTAD ], 14: [ SpeciesId.LOMBRE ]}], + [TimeOfDay.DUSK]: [{ 1: [ SpeciesId.EKANS ], 22: [ SpeciesId.ARBOK ]}, { 1: [ SpeciesId.PALDEA_WOOPER ], 20: [ SpeciesId.CLODSIRE ]}], + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.EKANS ], 22: [ SpeciesId.ARBOK ]}, { 1: [ SpeciesId.PALDEA_WOOPER ], 20: [ SpeciesId.CLODSIRE ]}], [TimeOfDay.ALL]: [ - { 1: [ Species.POLIWAG ], 25: [ Species.POLIWHIRL ]}, - { 1: [ Species.GULPIN ], 26: [ Species.SWALOT ]}, - { 1: [ Species.SHELLOS ], 30: [ Species.GASTRODON ]}, - { 1: [ Species.TYMPOLE ], 25: [ Species.PALPITOAD ], 36: [ Species.SEISMITOAD ]} + { 1: [ SpeciesId.POLIWAG ], 25: [ SpeciesId.POLIWHIRL ]}, + { 1: [ SpeciesId.GULPIN ], 26: [ SpeciesId.SWALOT ]}, + { 1: [ SpeciesId.SHELLOS ], 30: [ SpeciesId.GASTRODON ]}, + { 1: [ SpeciesId.TYMPOLE ], 25: [ SpeciesId.PALPITOAD ], 36: [ SpeciesId.SEISMITOAD ]} ] }, [BiomePoolTier.UNCOMMON]: { - [TimeOfDay.DAWN]: [{ 1: [ Species.EKANS ], 22: [ Species.ARBOK ]}], - [TimeOfDay.DAY]: [{ 1: [ Species.EKANS ], 22: [ Species.ARBOK ]}], - [TimeOfDay.DUSK]: [{ 1: [ Species.CROAGUNK ], 37: [ Species.TOXICROAK ]}], - [TimeOfDay.NIGHT]: [{ 1: [ Species.CROAGUNK ], 37: [ Species.TOXICROAK ]}], + [TimeOfDay.DAWN]: [{ 1: [ SpeciesId.EKANS ], 22: [ SpeciesId.ARBOK ]}], + [TimeOfDay.DAY]: [{ 1: [ SpeciesId.EKANS ], 22: [ SpeciesId.ARBOK ]}], + [TimeOfDay.DUSK]: [{ 1: [ SpeciesId.CROAGUNK ], 37: [ SpeciesId.TOXICROAK ]}], + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.CROAGUNK ], 37: [ SpeciesId.TOXICROAK ]}], [TimeOfDay.ALL]: [ - { 1: [ Species.PSYDUCK ], 33: [ Species.GOLDUCK ]}, - { 1: [ Species.BARBOACH ], 30: [ Species.WHISCASH ]}, - { 1: [ Species.SKORUPI ], 40: [ Species.DRAPION ]}, - Species.STUNFISK, - { 1: [ Species.MAREANIE ], 38: [ Species.TOXAPEX ]} + { 1: [ SpeciesId.PSYDUCK ], 33: [ SpeciesId.GOLDUCK ]}, + { 1: [ SpeciesId.BARBOACH ], 30: [ SpeciesId.WHISCASH ]}, + { 1: [ SpeciesId.SKORUPI ], 40: [ SpeciesId.DRAPION ]}, + SpeciesId.STUNFISK, + { 1: [ SpeciesId.MAREANIE ], 38: [ SpeciesId.TOXAPEX ]} ] }, [BiomePoolTier.RARE]: { @@ -481,46 +481,46 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [{ 1: [ Species.TOTODILE ], 18: [ Species.CROCONAW ], 30: [ Species.FERALIGATR ]}, { 1: [ Species.MUDKIP ], 16: [ Species.MARSHTOMP ], 36: [ Species.SWAMPERT ]}] + [TimeOfDay.ALL]: [{ 1: [ SpeciesId.TOTODILE ], 18: [ SpeciesId.CROCONAW ], 30: [ SpeciesId.FERALIGATR ]}, { 1: [ SpeciesId.MUDKIP ], 16: [ SpeciesId.MARSHTOMP ], 36: [ SpeciesId.SWAMPERT ]}] }, [BiomePoolTier.SUPER_RARE]: { - [TimeOfDay.DAWN]: [{ 1: [ Species.GALAR_SLOWPOKE ], 40: [ Species.GALAR_SLOWBRO ]}, { 1: [ Species.HISUI_SLIGGOO ], 80: [ Species.HISUI_GOODRA ]}], - [TimeOfDay.DAY]: [{ 1: [ Species.GALAR_SLOWPOKE ], 40: [ Species.GALAR_SLOWBRO ]}, { 1: [ Species.HISUI_SLIGGOO ], 80: [ Species.HISUI_GOODRA ]}], + [TimeOfDay.DAWN]: [{ 1: [ SpeciesId.GALAR_SLOWPOKE ], 40: [ SpeciesId.GALAR_SLOWBRO ]}, { 1: [ SpeciesId.HISUI_SLIGGOO ], 80: [ SpeciesId.HISUI_GOODRA ]}], + [TimeOfDay.DAY]: [{ 1: [ SpeciesId.GALAR_SLOWPOKE ], 40: [ SpeciesId.GALAR_SLOWBRO ]}, { 1: [ SpeciesId.HISUI_SLIGGOO ], 80: [ SpeciesId.HISUI_GOODRA ]}], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.POLITOED, Species.GALAR_STUNFISK ] + [TimeOfDay.ALL]: [ SpeciesId.POLITOED, SpeciesId.GALAR_STUNFISK ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.AZELF, Species.POIPOLE ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.AZELF, SpeciesId.POIPOLE ]}, [BiomePoolTier.BOSS]: { - [TimeOfDay.DAWN]: [ Species.QUAGSIRE, Species.LUDICOLO ], - [TimeOfDay.DAY]: [ Species.QUAGSIRE, Species.LUDICOLO ], - [TimeOfDay.DUSK]: [ Species.ARBOK, Species.CLODSIRE ], - [TimeOfDay.NIGHT]: [ Species.ARBOK, Species.CLODSIRE ], - [TimeOfDay.ALL]: [ Species.POLIWRATH, Species.SWALOT, Species.WHISCASH, Species.GASTRODON, Species.SEISMITOAD, Species.STUNFISK, Species.TOXAPEX ] + [TimeOfDay.DAWN]: [ SpeciesId.QUAGSIRE, SpeciesId.LUDICOLO ], + [TimeOfDay.DAY]: [ SpeciesId.QUAGSIRE, SpeciesId.LUDICOLO ], + [TimeOfDay.DUSK]: [ SpeciesId.ARBOK, SpeciesId.CLODSIRE ], + [TimeOfDay.NIGHT]: [ SpeciesId.ARBOK, SpeciesId.CLODSIRE ], + [TimeOfDay.ALL]: [ SpeciesId.POLIWRATH, SpeciesId.SWALOT, SpeciesId.WHISCASH, SpeciesId.GASTRODON, SpeciesId.SEISMITOAD, SpeciesId.STUNFISK, SpeciesId.TOXAPEX ] }, [BiomePoolTier.BOSS_RARE]: { - [TimeOfDay.DAWN]: [ Species.GALAR_SLOWBRO, Species.GALAR_SLOWKING, Species.HISUI_GOODRA ], - [TimeOfDay.DAY]: [ Species.GALAR_SLOWBRO, Species.GALAR_SLOWKING, Species.HISUI_GOODRA ], + [TimeOfDay.DAWN]: [ SpeciesId.GALAR_SLOWBRO, SpeciesId.GALAR_SLOWKING, SpeciesId.HISUI_GOODRA ], + [TimeOfDay.DAY]: [ SpeciesId.GALAR_SLOWBRO, SpeciesId.GALAR_SLOWKING, SpeciesId.HISUI_GOODRA ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.FERALIGATR, Species.POLITOED, Species.SWAMPERT, Species.GALAR_STUNFISK ] + [TimeOfDay.ALL]: [ SpeciesId.FERALIGATR, SpeciesId.POLITOED, SpeciesId.SWAMPERT, SpeciesId.GALAR_STUNFISK ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.AZELF, Species.NAGANADEL ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.AZELF, SpeciesId.NAGANADEL ]}, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []} }, - [Biome.BEACH]: { + [BiomeId.BEACH]: { [BiomePoolTier.COMMON]: { - [TimeOfDay.DAWN]: [{ 1: [ Species.STARYU ], 30: [ Species.STARMIE ]}], - [TimeOfDay.DAY]: [{ 1: [ Species.STARYU ], 30: [ Species.STARMIE ]}], - [TimeOfDay.DUSK]: [ Species.SHELLDER ], - [TimeOfDay.NIGHT]: [ Species.SHELLDER ], + [TimeOfDay.DAWN]: [{ 1: [ SpeciesId.STARYU ], 30: [ SpeciesId.STARMIE ]}], + [TimeOfDay.DAY]: [{ 1: [ SpeciesId.STARYU ], 30: [ SpeciesId.STARMIE ]}], + [TimeOfDay.DUSK]: [ SpeciesId.SHELLDER ], + [TimeOfDay.NIGHT]: [ SpeciesId.SHELLDER ], [TimeOfDay.ALL]: [ - { 1: [ Species.KRABBY ], 28: [ Species.KINGLER ]}, - { 1: [ Species.CORPHISH ], 30: [ Species.CRAWDAUNT ]}, - { 1: [ Species.DWEBBLE ], 34: [ Species.CRUSTLE ]}, - { 1: [ Species.BINACLE ], 39: [ Species.BARBARACLE ]}, - { 1: [ Species.MAREANIE ], 38: [ Species.TOXAPEX ]}, - { 1: [ Species.WIGLETT ], 26: [ Species.WUGTRIO ]} + { 1: [ SpeciesId.KRABBY ], 28: [ SpeciesId.KINGLER ]}, + { 1: [ SpeciesId.CORPHISH ], 30: [ SpeciesId.CRAWDAUNT ]}, + { 1: [ SpeciesId.DWEBBLE ], 34: [ SpeciesId.CRUSTLE ]}, + { 1: [ SpeciesId.BINACLE ], 39: [ SpeciesId.BARBARACLE ]}, + { 1: [ SpeciesId.MAREANIE ], 38: [ SpeciesId.TOXAPEX ]}, + { 1: [ SpeciesId.WIGLETT ], 26: [ SpeciesId.WUGTRIO ]} ] }, [BiomePoolTier.UNCOMMON]: { @@ -528,41 +528,41 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [{ 1: [ Species.BURMY ], 20: [ Species.WORMADAM ]}, { 1: [ Species.CLAUNCHER ], 37: [ Species.CLAWITZER ]}, { 1: [ Species.SANDYGAST ], 42: [ Species.PALOSSAND ]}] + [TimeOfDay.ALL]: [{ 1: [ SpeciesId.BURMY ], 20: [ SpeciesId.WORMADAM ]}, { 1: [ SpeciesId.CLAUNCHER ], 37: [ SpeciesId.CLAWITZER ]}, { 1: [ SpeciesId.SANDYGAST ], 42: [ SpeciesId.PALOSSAND ]}] }, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ Species.QUAXLY ], 16: [ Species.QUAXWELL ], 36: [ Species.QUAQUAVAL ]}, Species.TATSUGIRI ]}, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ Species.TIRTOUGA ], 37: [ Species.CARRACOSTA ]}]}, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRESSELIA, Species.KELDEO, Species.TAPU_FINI ]}, + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ SpeciesId.QUAXLY ], 16: [ SpeciesId.QUAXWELL ], 36: [ SpeciesId.QUAQUAVAL ]}, SpeciesId.TATSUGIRI ]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ SpeciesId.TIRTOUGA ], 37: [ SpeciesId.CARRACOSTA ]}]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.CRESSELIA, SpeciesId.KELDEO, SpeciesId.TAPU_FINI ]}, [BiomePoolTier.BOSS]: { - [TimeOfDay.DAWN]: [ Species.STARMIE ], - [TimeOfDay.DAY]: [ Species.STARMIE ], - [TimeOfDay.DUSK]: [ Species.CLOYSTER ], - [TimeOfDay.NIGHT]: [ Species.CLOYSTER ], - [TimeOfDay.ALL]: [ Species.KINGLER, Species.CRAWDAUNT, Species.WORMADAM, Species.CRUSTLE, Species.BARBARACLE, Species.CLAWITZER, Species.TOXAPEX, Species.PALOSSAND ] + [TimeOfDay.DAWN]: [ SpeciesId.STARMIE ], + [TimeOfDay.DAY]: [ SpeciesId.STARMIE ], + [TimeOfDay.DUSK]: [ SpeciesId.CLOYSTER ], + [TimeOfDay.NIGHT]: [ SpeciesId.CLOYSTER ], + [TimeOfDay.ALL]: [ SpeciesId.KINGLER, SpeciesId.CRAWDAUNT, SpeciesId.WORMADAM, SpeciesId.CRUSTLE, SpeciesId.BARBARACLE, SpeciesId.CLAWITZER, SpeciesId.TOXAPEX, SpeciesId.PALOSSAND ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CARRACOSTA, Species.QUAQUAVAL ]}, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRESSELIA, Species.KELDEO, Species.TAPU_FINI ]}, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.CARRACOSTA, SpeciesId.QUAQUAVAL ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.CRESSELIA, SpeciesId.KELDEO, SpeciesId.TAPU_FINI ]}, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []} }, - [Biome.LAKE]: { + [BiomeId.LAKE]: { [BiomePoolTier.COMMON]: { - [TimeOfDay.DAWN]: [{ 1: [ Species.LOTAD ], 14: [ Species.LOMBRE ]}, { 1: [ Species.DUCKLETT ], 35: [ Species.SWANNA ]}], - [TimeOfDay.DAY]: [{ 1: [ Species.LOTAD ], 14: [ Species.LOMBRE ]}, { 1: [ Species.DUCKLETT ], 35: [ Species.SWANNA ]}], - [TimeOfDay.DUSK]: [{ 1: [ Species.MARILL ], 18: [ Species.AZUMARILL ]}], - [TimeOfDay.NIGHT]: [{ 1: [ Species.MARILL ], 18: [ Species.AZUMARILL ]}], + [TimeOfDay.DAWN]: [{ 1: [ SpeciesId.LOTAD ], 14: [ SpeciesId.LOMBRE ]}, { 1: [ SpeciesId.DUCKLETT ], 35: [ SpeciesId.SWANNA ]}], + [TimeOfDay.DAY]: [{ 1: [ SpeciesId.LOTAD ], 14: [ SpeciesId.LOMBRE ]}, { 1: [ SpeciesId.DUCKLETT ], 35: [ SpeciesId.SWANNA ]}], + [TimeOfDay.DUSK]: [{ 1: [ SpeciesId.MARILL ], 18: [ SpeciesId.AZUMARILL ]}], + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.MARILL ], 18: [ SpeciesId.AZUMARILL ]}], [TimeOfDay.ALL]: [ - { 1: [ Species.PSYDUCK ], 33: [ Species.GOLDUCK ]}, - { 1: [ Species.GOLDEEN ], 33: [ Species.SEAKING ]}, - { 1: [ Species.MAGIKARP ], 20: [ Species.GYARADOS ]}, - { 1: [ Species.CHEWTLE ], 22: [ Species.DREDNAW ]} + { 1: [ SpeciesId.PSYDUCK ], 33: [ SpeciesId.GOLDUCK ]}, + { 1: [ SpeciesId.GOLDEEN ], 33: [ SpeciesId.SEAKING ]}, + { 1: [ SpeciesId.MAGIKARP ], 20: [ SpeciesId.GYARADOS ]}, + { 1: [ SpeciesId.CHEWTLE ], 22: [ SpeciesId.DREDNAW ]} ] }, [BiomePoolTier.UNCOMMON]: { - [TimeOfDay.DAWN]: [{ 1: [ Species.DEWPIDER ], 22: [ Species.ARAQUANID ]}], - [TimeOfDay.DAY]: [{ 1: [ Species.DEWPIDER ], 22: [ Species.ARAQUANID ]}], + [TimeOfDay.DAWN]: [{ 1: [ SpeciesId.DEWPIDER ], 22: [ SpeciesId.ARAQUANID ]}], + [TimeOfDay.DAY]: [{ 1: [ SpeciesId.DEWPIDER ], 22: [ SpeciesId.ARAQUANID ]}], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [{ 1: [ Species.SLOWPOKE ], 37: [ Species.SLOWBRO ]}, { 1: [ Species.WOOPER ], 20: [ Species.QUAGSIRE ]}, { 1: [ Species.SURSKIT ], 22: [ Species.MASQUERAIN ]}, Species.WISHIWASHI, Species.FLAMIGO ] + [TimeOfDay.ALL]: [{ 1: [ SpeciesId.SLOWPOKE ], 37: [ SpeciesId.SLOWBRO ]}, { 1: [ SpeciesId.WOOPER ], 20: [ SpeciesId.QUAGSIRE ]}, { 1: [ SpeciesId.SURSKIT ], 22: [ SpeciesId.MASQUERAIN ]}, SpeciesId.WISHIWASHI, SpeciesId.FLAMIGO ] }, [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], @@ -570,39 +570,39 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.SQUIRTLE ], 16: [ Species.WARTORTLE ], 36: [ Species.BLASTOISE ]}, - { 1: [ Species.OSHAWOTT ], 17: [ Species.DEWOTT ], 36: [ Species.SAMUROTT ]}, - { 1: [ Species.FROAKIE ], 16: [ Species.FROGADIER ], 36: [ Species.GRENINJA ]}, - { 1: [ Species.SOBBLE ], 16: [ Species.DRIZZILE ], 35: [ Species.INTELEON ]} + { 1: [ SpeciesId.SQUIRTLE ], 16: [ SpeciesId.WARTORTLE ], 36: [ SpeciesId.BLASTOISE ]}, + { 1: [ SpeciesId.OSHAWOTT ], 17: [ SpeciesId.DEWOTT ], 36: [ SpeciesId.SAMUROTT ]}, + { 1: [ SpeciesId.FROAKIE ], 16: [ SpeciesId.FROGADIER ], 36: [ SpeciesId.GRENINJA ]}, + { 1: [ SpeciesId.SOBBLE ], 16: [ SpeciesId.DRIZZILE ], 35: [ SpeciesId.INTELEON ]} ] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VAPOREON, Species.SLOWKING ]}, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SUICUNE, Species.MESPRIT ]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.VAPOREON, SpeciesId.SLOWKING ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.SUICUNE, SpeciesId.MESPRIT ]}, [BiomePoolTier.BOSS]: { - [TimeOfDay.DAWN]: [ Species.SWANNA, Species.ARAQUANID ], - [TimeOfDay.DAY]: [ Species.SWANNA, Species.ARAQUANID ], - [TimeOfDay.DUSK]: [ Species.AZUMARILL ], - [TimeOfDay.NIGHT]: [ Species.AZUMARILL ], - [TimeOfDay.ALL]: [ Species.GOLDUCK, Species.SLOWBRO, Species.SEAKING, Species.GYARADOS, Species.MASQUERAIN, Species.WISHIWASHI, Species.DREDNAW ] + [TimeOfDay.DAWN]: [ SpeciesId.SWANNA, SpeciesId.ARAQUANID ], + [TimeOfDay.DAY]: [ SpeciesId.SWANNA, SpeciesId.ARAQUANID ], + [TimeOfDay.DUSK]: [ SpeciesId.AZUMARILL ], + [TimeOfDay.NIGHT]: [ SpeciesId.AZUMARILL ], + [TimeOfDay.ALL]: [ SpeciesId.GOLDUCK, SpeciesId.SLOWBRO, SpeciesId.SEAKING, SpeciesId.GYARADOS, SpeciesId.MASQUERAIN, SpeciesId.WISHIWASHI, SpeciesId.DREDNAW ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLASTOISE, Species.VAPOREON, Species.SLOWKING, Species.SAMUROTT, Species.GRENINJA, Species.INTELEON ]}, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SUICUNE, Species.MESPRIT ]}, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.BLASTOISE, SpeciesId.VAPOREON, SpeciesId.SLOWKING, SpeciesId.SAMUROTT, SpeciesId.GRENINJA, SpeciesId.INTELEON ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.SUICUNE, SpeciesId.MESPRIT ]}, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []} }, - [Biome.SEABED]: { + [BiomeId.SEABED]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.CHINCHOU ], 27: [ Species.LANTURN ]}, - Species.REMORAID, - Species.CLAMPERL, - Species.BASCULIN, - { 1: [ Species.FRILLISH ], 40: [ Species.JELLICENT ]}, - { 1: [ Species.ARROKUDA ], 26: [ Species.BARRASKEWDA ]}, - Species.VELUZA + { 1: [ SpeciesId.CHINCHOU ], 27: [ SpeciesId.LANTURN ]}, + SpeciesId.REMORAID, + SpeciesId.CLAMPERL, + SpeciesId.BASCULIN, + { 1: [ SpeciesId.FRILLISH ], 40: [ SpeciesId.JELLICENT ]}, + { 1: [ SpeciesId.ARROKUDA ], 26: [ SpeciesId.BARRASKEWDA ]}, + SpeciesId.VELUZA ] }, [BiomePoolTier.UNCOMMON]: { @@ -611,14 +611,14 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.TENTACOOL ], 30: [ Species.TENTACRUEL ]}, - Species.SHELLDER, - { 1: [ Species.WAILMER ], 40: [ Species.WAILORD ]}, - Species.LUVDISC, - { 1: [ Species.SHELLOS ], 30: [ Species.GASTRODON ]}, - { 1: [ Species.SKRELP ], 48: [ Species.DRAGALGE ]}, - Species.PINCURCHIN, - Species.DONDOZO + { 1: [ SpeciesId.TENTACOOL ], 30: [ SpeciesId.TENTACRUEL ]}, + SpeciesId.SHELLDER, + { 1: [ SpeciesId.WAILMER ], 40: [ SpeciesId.WAILORD ]}, + SpeciesId.LUVDISC, + { 1: [ SpeciesId.SHELLOS ], 30: [ SpeciesId.GASTRODON ]}, + { 1: [ SpeciesId.SKRELP ], 48: [ SpeciesId.DRAGALGE ]}, + SpeciesId.PINCURCHIN, + SpeciesId.DONDOZO ] }, [BiomePoolTier.RARE]: { @@ -626,7 +626,7 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.QWILFISH, Species.CORSOLA, Species.OCTILLERY, { 1: [ Species.MANTYKE ], 52: [ Species.MANTINE ]}, Species.ALOMOMOLA, { 1: [ Species.TYNAMO ], 39: [ Species.EELEKTRIK ]}, Species.DHELMISE ] + [TimeOfDay.ALL]: [ SpeciesId.QWILFISH, SpeciesId.CORSOLA, SpeciesId.OCTILLERY, { 1: [ SpeciesId.MANTYKE ], 52: [ SpeciesId.MANTINE ]}, SpeciesId.ALOMOMOLA, { 1: [ SpeciesId.TYNAMO ], 39: [ SpeciesId.EELEKTRIK ]}, SpeciesId.DHELMISE ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], @@ -634,88 +634,88 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.OMANYTE ], 40: [ Species.OMASTAR ]}, - { 1: [ Species.KABUTO ], 40: [ Species.KABUTOPS ]}, - Species.RELICANTH, - Species.PYUKUMUKU, - { 1: [ Species.GALAR_CORSOLA ], 38: [ Species.CURSOLA ]}, - Species.ARCTOVISH, - Species.HISUI_QWILFISH + { 1: [ SpeciesId.OMANYTE ], 40: [ SpeciesId.OMASTAR ]}, + { 1: [ SpeciesId.KABUTO ], 40: [ SpeciesId.KABUTOPS ]}, + SpeciesId.RELICANTH, + SpeciesId.PYUKUMUKU, + { 1: [ SpeciesId.GALAR_CORSOLA ], 38: [ SpeciesId.CURSOLA ]}, + SpeciesId.ARCTOVISH, + SpeciesId.HISUI_QWILFISH ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.FEEBAS, Species.NIHILEGO ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.FEEBAS, SpeciesId.NIHILEGO ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.LANTURN, Species.QWILFISH, Species.CORSOLA, Species.OCTILLERY, Species.MANTINE, Species.WAILORD, Species.HUNTAIL, Species.GOREBYSS, Species.LUVDISC, Species.JELLICENT, Species.ALOMOMOLA, Species.DRAGALGE, Species.BARRASKEWDA, Species.DONDOZO ] + [TimeOfDay.ALL]: [ SpeciesId.LANTURN, SpeciesId.QWILFISH, SpeciesId.CORSOLA, SpeciesId.OCTILLERY, SpeciesId.MANTINE, SpeciesId.WAILORD, SpeciesId.HUNTAIL, SpeciesId.GOREBYSS, SpeciesId.LUVDISC, SpeciesId.JELLICENT, SpeciesId.ALOMOMOLA, SpeciesId.DRAGALGE, SpeciesId.BARRASKEWDA, SpeciesId.DONDOZO ] }, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.OMASTAR, Species.KABUTOPS, Species.RELICANTH, Species.EELEKTROSS, Species.PYUKUMUKU, Species.DHELMISE, Species.CURSOLA, Species.ARCTOVISH, Species.BASCULEGION, Species.OVERQWIL ] + [TimeOfDay.ALL]: [ SpeciesId.OMASTAR, SpeciesId.KABUTOPS, SpeciesId.RELICANTH, SpeciesId.EELEKTROSS, SpeciesId.PYUKUMUKU, SpeciesId.DHELMISE, SpeciesId.CURSOLA, SpeciesId.ARCTOVISH, SpeciesId.BASCULEGION, SpeciesId.OVERQWIL ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MILOTIC, Species.NIHILEGO ]}, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KYOGRE ]} + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.MILOTIC, SpeciesId.NIHILEGO ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.KYOGRE ]} }, - [Biome.MOUNTAIN]: { + [BiomeId.MOUNTAIN]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [ - { 1: [ Species.TAILLOW ], 22: [ Species.SWELLOW ]}, - { 1: [ Species.SWABLU ], 35: [ Species.ALTARIA ]}, - { 1: [ Species.STARLY ], 14: [ Species.STARAVIA ], 34: [ Species.STARAPTOR ]}, - { 1: [ Species.PIDOVE ], 21: [ Species.TRANQUILL ], 32: [ Species.UNFEZANT ]}, - { 1: [ Species.FLETCHLING ], 17: [ Species.FLETCHINDER ], 35: [ Species.TALONFLAME ]} + { 1: [ SpeciesId.TAILLOW ], 22: [ SpeciesId.SWELLOW ]}, + { 1: [ SpeciesId.SWABLU ], 35: [ SpeciesId.ALTARIA ]}, + { 1: [ SpeciesId.STARLY ], 14: [ SpeciesId.STARAVIA ], 34: [ SpeciesId.STARAPTOR ]}, + { 1: [ SpeciesId.PIDOVE ], 21: [ SpeciesId.TRANQUILL ], 32: [ SpeciesId.UNFEZANT ]}, + { 1: [ SpeciesId.FLETCHLING ], 17: [ SpeciesId.FLETCHINDER ], 35: [ SpeciesId.TALONFLAME ]} ], [TimeOfDay.DAY]: [ - { 1: [ Species.TAILLOW ], 22: [ Species.SWELLOW ]}, - { 1: [ Species.SWABLU ], 35: [ Species.ALTARIA ]}, - { 1: [ Species.STARLY ], 14: [ Species.STARAVIA ], 34: [ Species.STARAPTOR ]}, - { 1: [ Species.PIDOVE ], 21: [ Species.TRANQUILL ], 32: [ Species.UNFEZANT ]}, - { 1: [ Species.FLETCHLING ], 17: [ Species.FLETCHINDER ], 35: [ Species.TALONFLAME ]} + { 1: [ SpeciesId.TAILLOW ], 22: [ SpeciesId.SWELLOW ]}, + { 1: [ SpeciesId.SWABLU ], 35: [ SpeciesId.ALTARIA ]}, + { 1: [ SpeciesId.STARLY ], 14: [ SpeciesId.STARAVIA ], 34: [ SpeciesId.STARAPTOR ]}, + { 1: [ SpeciesId.PIDOVE ], 21: [ SpeciesId.TRANQUILL ], 32: [ SpeciesId.UNFEZANT ]}, + { 1: [ SpeciesId.FLETCHLING ], 17: [ SpeciesId.FLETCHINDER ], 35: [ SpeciesId.TALONFLAME ]} ], - [TimeOfDay.DUSK]: [{ 1: [ Species.RHYHORN ], 42: [ Species.RHYDON ]}, { 1: [ Species.ARON ], 32: [ Species.LAIRON ], 42: [ Species.AGGRON ]}, { 1: [ Species.ROGGENROLA ], 25: [ Species.BOLDORE ]}], - [TimeOfDay.NIGHT]: [{ 1: [ Species.RHYHORN ], 42: [ Species.RHYDON ]}, { 1: [ Species.ARON ], 32: [ Species.LAIRON ], 42: [ Species.AGGRON ]}, { 1: [ Species.ROGGENROLA ], 25: [ Species.BOLDORE ]}], - [TimeOfDay.ALL]: [{ 1: [ Species.PIDGEY ], 18: [ Species.PIDGEOTTO ], 36: [ Species.PIDGEOT ]}, { 1: [ Species.SPEAROW ], 20: [ Species.FEAROW ]}, { 1: [ Species.SKIDDO ], 32: [ Species.GOGOAT ]}] + [TimeOfDay.DUSK]: [{ 1: [ SpeciesId.RHYHORN ], 42: [ SpeciesId.RHYDON ]}, { 1: [ SpeciesId.ARON ], 32: [ SpeciesId.LAIRON ], 42: [ SpeciesId.AGGRON ]}, { 1: [ SpeciesId.ROGGENROLA ], 25: [ SpeciesId.BOLDORE ]}], + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.RHYHORN ], 42: [ SpeciesId.RHYDON ]}, { 1: [ SpeciesId.ARON ], 32: [ SpeciesId.LAIRON ], 42: [ SpeciesId.AGGRON ]}, { 1: [ SpeciesId.ROGGENROLA ], 25: [ SpeciesId.BOLDORE ]}], + [TimeOfDay.ALL]: [{ 1: [ SpeciesId.PIDGEY ], 18: [ SpeciesId.PIDGEOTTO ], 36: [ SpeciesId.PIDGEOT ]}, { 1: [ SpeciesId.SPEAROW ], 20: [ SpeciesId.FEAROW ]}, { 1: [ SpeciesId.SKIDDO ], 32: [ SpeciesId.GOGOAT ]}] }, [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [ - { 1: [ Species.RHYHORN ], 42: [ Species.RHYDON ]}, - { 1: [ Species.ARON ], 32: [ Species.LAIRON ], 42: [ Species.AGGRON ]}, - { 1: [ Species.ROGGENROLA ], 25: [ Species.BOLDORE ]}, - { 1: [ Species.RUFFLET ], 54: [ Species.BRAVIARY ]}, - { 1: [ Species.ROOKIDEE ], 18: [ Species.CORVISQUIRE ], 38: [ Species.CORVIKNIGHT ]}, - { 1: [ Species.FLITTLE ], 35: [ Species.ESPATHRA ]}, - Species.BOMBIRDIER + { 1: [ SpeciesId.RHYHORN ], 42: [ SpeciesId.RHYDON ]}, + { 1: [ SpeciesId.ARON ], 32: [ SpeciesId.LAIRON ], 42: [ SpeciesId.AGGRON ]}, + { 1: [ SpeciesId.ROGGENROLA ], 25: [ SpeciesId.BOLDORE ]}, + { 1: [ SpeciesId.RUFFLET ], 54: [ SpeciesId.BRAVIARY ]}, + { 1: [ SpeciesId.ROOKIDEE ], 18: [ SpeciesId.CORVISQUIRE ], 38: [ SpeciesId.CORVIKNIGHT ]}, + { 1: [ SpeciesId.FLITTLE ], 35: [ SpeciesId.ESPATHRA ]}, + SpeciesId.BOMBIRDIER ], [TimeOfDay.DAY]: [ - { 1: [ Species.RHYHORN ], 42: [ Species.RHYDON ]}, - { 1: [ Species.ARON ], 32: [ Species.LAIRON ], 42: [ Species.AGGRON ]}, - { 1: [ Species.ROGGENROLA ], 25: [ Species.BOLDORE ]}, - { 1: [ Species.RUFFLET ], 54: [ Species.BRAVIARY ]}, - { 1: [ Species.ROOKIDEE ], 18: [ Species.CORVISQUIRE ], 38: [ Species.CORVIKNIGHT ]}, - { 1: [ Species.FLITTLE ], 35: [ Species.ESPATHRA ]}, - Species.BOMBIRDIER + { 1: [ SpeciesId.RHYHORN ], 42: [ SpeciesId.RHYDON ]}, + { 1: [ SpeciesId.ARON ], 32: [ SpeciesId.LAIRON ], 42: [ SpeciesId.AGGRON ]}, + { 1: [ SpeciesId.ROGGENROLA ], 25: [ SpeciesId.BOLDORE ]}, + { 1: [ SpeciesId.RUFFLET ], 54: [ SpeciesId.BRAVIARY ]}, + { 1: [ SpeciesId.ROOKIDEE ], 18: [ SpeciesId.CORVISQUIRE ], 38: [ SpeciesId.CORVIKNIGHT ]}, + { 1: [ SpeciesId.FLITTLE ], 35: [ SpeciesId.ESPATHRA ]}, + SpeciesId.BOMBIRDIER ], - [TimeOfDay.DUSK]: [{ 1: [ Species.VULLABY ], 54: [ Species.MANDIBUZZ ]}], - [TimeOfDay.NIGHT]: [{ 1: [ Species.VULLABY ], 54: [ Species.MANDIBUZZ ]}], + [TimeOfDay.DUSK]: [{ 1: [ SpeciesId.VULLABY ], 54: [ SpeciesId.MANDIBUZZ ]}], + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.VULLABY ], 54: [ SpeciesId.MANDIBUZZ ]}], [TimeOfDay.ALL]: [ - { 1: [ Species.MACHOP ], 28: [ Species.MACHOKE ]}, - { 1: [ Species.GEODUDE ], 25: [ Species.GRAVELER ]}, - { 1: [ Species.NATU ], 25: [ Species.XATU ]}, - { 1: [ Species.SLUGMA ], 38: [ Species.MAGCARGO ]}, - { 1: [ Species.NACLI ], 24: [ Species.NACLSTACK ], 38: [ Species.GARGANACL ]} + { 1: [ SpeciesId.MACHOP ], 28: [ SpeciesId.MACHOKE ]}, + { 1: [ SpeciesId.GEODUDE ], 25: [ SpeciesId.GRAVELER ]}, + { 1: [ SpeciesId.NATU ], 25: [ SpeciesId.XATU ]}, + { 1: [ SpeciesId.SLUGMA ], 38: [ SpeciesId.MAGCARGO ]}, + { 1: [ SpeciesId.NACLI ], 24: [ SpeciesId.NACLSTACK ], 38: [ SpeciesId.GARGANACL ]} ] }, [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], - [TimeOfDay.NIGHT]: [ Species.MURKROW ], - [TimeOfDay.ALL]: [ Species.SKARMORY, { 1: [ Species.TORCHIC ], 16: [ Species.COMBUSKEN ], 36: [ Species.BLAZIKEN ]}, { 1: [ Species.SPOINK ], 32: [ Species.GRUMPIG ]}, Species.HAWLUCHA, Species.KLAWF ] + [TimeOfDay.NIGHT]: [ SpeciesId.MURKROW ], + [TimeOfDay.ALL]: [ SpeciesId.SKARMORY, { 1: [ SpeciesId.TORCHIC ], 16: [ SpeciesId.COMBUSKEN ], 36: [ SpeciesId.BLAZIKEN ]}, { 1: [ SpeciesId.SPOINK ], 32: [ SpeciesId.GRUMPIG ]}, SpeciesId.HAWLUCHA, SpeciesId.KLAWF ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], @@ -723,95 +723,95 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.LARVITAR ], 30: [ Species.PUPITAR ]}, - { 1: [ Species.CRANIDOS ], 30: [ Species.RAMPARDOS ]}, - { 1: [ Species.SHIELDON ], 30: [ Species.BASTIODON ]}, - { 1: [ Species.GIBLE ], 24: [ Species.GABITE ], 48: [ Species.GARCHOMP ]}, - Species.ROTOM, - Species.ARCHEOPS, - { 1: [ Species.AXEW ], 38: [ Species.FRAXURE ]} + { 1: [ SpeciesId.LARVITAR ], 30: [ SpeciesId.PUPITAR ]}, + { 1: [ SpeciesId.CRANIDOS ], 30: [ SpeciesId.RAMPARDOS ]}, + { 1: [ SpeciesId.SHIELDON ], 30: [ SpeciesId.BASTIODON ]}, + { 1: [ SpeciesId.GIBLE ], 24: [ SpeciesId.GABITE ], 48: [ SpeciesId.GARCHOMP ]}, + SpeciesId.ROTOM, + SpeciesId.ARCHEOPS, + { 1: [ SpeciesId.AXEW ], 38: [ SpeciesId.FRAXURE ]} ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TORNADUS, Species.TING_LU, Species.OGERPON ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.TORNADUS, SpeciesId.TING_LU, SpeciesId.OGERPON ]}, [BiomePoolTier.BOSS]: { - [TimeOfDay.DAWN]: [ Species.SWELLOW, Species.ALTARIA, Species.STARAPTOR, Species.UNFEZANT, Species.BRAVIARY, Species.TALONFLAME, Species.CORVIKNIGHT, Species.ESPATHRA ], - [TimeOfDay.DAY]: [ Species.SWELLOW, Species.ALTARIA, Species.STARAPTOR, Species.UNFEZANT, Species.BRAVIARY, Species.TALONFLAME, Species.CORVIKNIGHT, Species.ESPATHRA ], - [TimeOfDay.DUSK]: [ Species.MANDIBUZZ ], - [TimeOfDay.NIGHT]: [ Species.MANDIBUZZ ], - [TimeOfDay.ALL]: [ Species.PIDGEOT, Species.FEAROW, Species.SKARMORY, Species.AGGRON, Species.GOGOAT, Species.GARGANACL ] + [TimeOfDay.DAWN]: [ SpeciesId.SWELLOW, SpeciesId.ALTARIA, SpeciesId.STARAPTOR, SpeciesId.UNFEZANT, SpeciesId.BRAVIARY, SpeciesId.TALONFLAME, SpeciesId.CORVIKNIGHT, SpeciesId.ESPATHRA ], + [TimeOfDay.DAY]: [ SpeciesId.SWELLOW, SpeciesId.ALTARIA, SpeciesId.STARAPTOR, SpeciesId.UNFEZANT, SpeciesId.BRAVIARY, SpeciesId.TALONFLAME, SpeciesId.CORVIKNIGHT, SpeciesId.ESPATHRA ], + [TimeOfDay.DUSK]: [ SpeciesId.MANDIBUZZ ], + [TimeOfDay.NIGHT]: [ SpeciesId.MANDIBUZZ ], + [TimeOfDay.ALL]: [ SpeciesId.PIDGEOT, SpeciesId.FEAROW, SpeciesId.SKARMORY, SpeciesId.AGGRON, SpeciesId.GOGOAT, SpeciesId.GARGANACL ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [ Species.HISUI_BRAVIARY ], [TimeOfDay.DAY]: [ Species.HISUI_BRAVIARY ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLAZIKEN, Species.RAMPARDOS, Species.BASTIODON, Species.HAWLUCHA ]}, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ROTOM, Species.TORNADUS, Species.TING_LU, Species.OGERPON ]}, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HO_OH ]} + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [ SpeciesId.HISUI_BRAVIARY ], [TimeOfDay.DAY]: [ SpeciesId.HISUI_BRAVIARY ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.BLAZIKEN, SpeciesId.RAMPARDOS, SpeciesId.BASTIODON, SpeciesId.HAWLUCHA ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.ROTOM, SpeciesId.TORNADUS, SpeciesId.TING_LU, SpeciesId.OGERPON ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.HO_OH ]} }, - [Biome.BADLANDS]: { + [BiomeId.BADLANDS]: { [BiomePoolTier.COMMON]: { - [TimeOfDay.DAWN]: [{ 1: [ Species.PHANPY ], 25: [ Species.DONPHAN ]}], - [TimeOfDay.DAY]: [{ 1: [ Species.PHANPY ], 25: [ Species.DONPHAN ]}], + [TimeOfDay.DAWN]: [{ 1: [ SpeciesId.PHANPY ], 25: [ SpeciesId.DONPHAN ]}], + [TimeOfDay.DAY]: [{ 1: [ SpeciesId.PHANPY ], 25: [ SpeciesId.DONPHAN ]}], [TimeOfDay.DUSK]: [], - [TimeOfDay.NIGHT]: [{ 1: [ Species.CUBONE ], 28: [ Species.MAROWAK ]}], + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.CUBONE ], 28: [ SpeciesId.MAROWAK ]}], [TimeOfDay.ALL]: [ - { 1: [ Species.DIGLETT ], 26: [ Species.DUGTRIO ]}, - { 1: [ Species.GEODUDE ], 25: [ Species.GRAVELER ]}, - { 1: [ Species.RHYHORN ], 42: [ Species.RHYDON ]}, - { 1: [ Species.DRILBUR ], 31: [ Species.EXCADRILL ]}, - { 1: [ Species.MUDBRAY ], 30: [ Species.MUDSDALE ]} + { 1: [ SpeciesId.DIGLETT ], 26: [ SpeciesId.DUGTRIO ]}, + { 1: [ SpeciesId.GEODUDE ], 25: [ SpeciesId.GRAVELER ]}, + { 1: [ SpeciesId.RHYHORN ], 42: [ SpeciesId.RHYDON ]}, + { 1: [ SpeciesId.DRILBUR ], 31: [ SpeciesId.EXCADRILL ]}, + { 1: [ SpeciesId.MUDBRAY ], 30: [ SpeciesId.MUDSDALE ]} ] }, [BiomePoolTier.UNCOMMON]: { - [TimeOfDay.DAWN]: [{ 1: [ Species.SIZZLIPEDE ], 28: [ Species.CENTISKORCH ]}, { 1: [ Species.CAPSAKID ], 30: [ Species.SCOVILLAIN ]}], - [TimeOfDay.DAY]: [{ 1: [ Species.SIZZLIPEDE ], 28: [ Species.CENTISKORCH ]}, { 1: [ Species.CAPSAKID ], 30: [ Species.SCOVILLAIN ]}], + [TimeOfDay.DAWN]: [{ 1: [ SpeciesId.SIZZLIPEDE ], 28: [ SpeciesId.CENTISKORCH ]}, { 1: [ SpeciesId.CAPSAKID ], 30: [ SpeciesId.SCOVILLAIN ]}], + [TimeOfDay.DAY]: [{ 1: [ SpeciesId.SIZZLIPEDE ], 28: [ SpeciesId.CENTISKORCH ]}, { 1: [ SpeciesId.CAPSAKID ], 30: [ SpeciesId.SCOVILLAIN ]}], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.SANDSHREW ], 22: [ Species.SANDSLASH ]}, - { 1: [ Species.NUMEL ], 33: [ Species.CAMERUPT ]}, - { 1: [ Species.ROGGENROLA ], 25: [ Species.BOLDORE ]}, - { 1: [ Species.CUFANT ], 34: [ Species.COPPERAJAH ]} + { 1: [ SpeciesId.SANDSHREW ], 22: [ SpeciesId.SANDSLASH ]}, + { 1: [ SpeciesId.NUMEL ], 33: [ SpeciesId.CAMERUPT ]}, + { 1: [ SpeciesId.ROGGENROLA ], 25: [ SpeciesId.BOLDORE ]}, + { 1: [ SpeciesId.CUFANT ], 34: [ SpeciesId.COPPERAJAH ]} ] }, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ONIX, Species.GLIGAR, { 1: [ Species.POLTCHAGEIST ], 30: [ Species.SINISTCHA ]}]}, + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.ONIX, SpeciesId.GLIGAR, { 1: [ SpeciesId.POLTCHAGEIST ], 30: [ SpeciesId.SINISTCHA ]}]}, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.LANDORUS, Species.OKIDOGI ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.LANDORUS, SpeciesId.OKIDOGI ]}, [BiomePoolTier.BOSS]: { - [TimeOfDay.DAWN]: [ Species.DONPHAN, Species.CENTISKORCH, Species.SCOVILLAIN ], - [TimeOfDay.DAY]: [ Species.DONPHAN, Species.CENTISKORCH, Species.SCOVILLAIN ], + [TimeOfDay.DAWN]: [ SpeciesId.DONPHAN, SpeciesId.CENTISKORCH, SpeciesId.SCOVILLAIN ], + [TimeOfDay.DAY]: [ SpeciesId.DONPHAN, SpeciesId.CENTISKORCH, SpeciesId.SCOVILLAIN ], [TimeOfDay.DUSK]: [], - [TimeOfDay.NIGHT]: [ Species.MAROWAK ], - [TimeOfDay.ALL]: [ Species.DUGTRIO, Species.GOLEM, Species.RHYPERIOR, Species.GLISCOR, Species.EXCADRILL, Species.MUDSDALE, Species.COPPERAJAH ] + [TimeOfDay.NIGHT]: [ SpeciesId.MAROWAK ], + [TimeOfDay.ALL]: [ SpeciesId.DUGTRIO, SpeciesId.GOLEM, SpeciesId.RHYPERIOR, SpeciesId.GLISCOR, SpeciesId.EXCADRILL, SpeciesId.MUDSDALE, SpeciesId.COPPERAJAH ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.STEELIX, Species.SINISTCHA ]}, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.LANDORUS, Species.OKIDOGI ]}, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GROUDON ]} + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.STEELIX, SpeciesId.SINISTCHA ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.LANDORUS, SpeciesId.OKIDOGI ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.GROUDON ]} }, - [Biome.CAVE]: { + [BiomeId.CAVE]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.ZUBAT ], 22: [ Species.GOLBAT ]}, - { 1: [ Species.PARAS ], 24: [ Species.PARASECT ]}, - { 1: [ Species.TEDDIURSA ], 30: [ Species.URSARING ]}, - { 1: [ Species.WHISMUR ], 20: [ Species.LOUDRED ], 40: [ Species.EXPLOUD ]}, - { 1: [ Species.ROGGENROLA ], 25: [ Species.BOLDORE ]}, - { 1: [ Species.WOOBAT ], 20: [ Species.SWOOBAT ]}, - { 1: [ Species.BUNNELBY ], 20: [ Species.DIGGERSBY ]}, - { 1: [ Species.NACLI ], 24: [ Species.NACLSTACK ], 38: [ Species.GARGANACL ]} + { 1: [ SpeciesId.ZUBAT ], 22: [ SpeciesId.GOLBAT ]}, + { 1: [ SpeciesId.PARAS ], 24: [ SpeciesId.PARASECT ]}, + { 1: [ SpeciesId.TEDDIURSA ], 30: [ SpeciesId.URSARING ]}, + { 1: [ SpeciesId.WHISMUR ], 20: [ SpeciesId.LOUDRED ], 40: [ SpeciesId.EXPLOUD ]}, + { 1: [ SpeciesId.ROGGENROLA ], 25: [ SpeciesId.BOLDORE ]}, + { 1: [ SpeciesId.WOOBAT ], 20: [ SpeciesId.SWOOBAT ]}, + { 1: [ SpeciesId.BUNNELBY ], 20: [ SpeciesId.DIGGERSBY ]}, + { 1: [ SpeciesId.NACLI ], 24: [ SpeciesId.NACLSTACK ], 38: [ SpeciesId.GARGANACL ]} ] }, [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], - [TimeOfDay.DUSK]: [{ 1: [ Species.ROCKRUFF ], 25: [ Species.LYCANROC ]}], + [TimeOfDay.DUSK]: [{ 1: [ SpeciesId.ROCKRUFF ], 25: [ SpeciesId.LYCANROC ]}], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.GEODUDE ], 25: [ Species.GRAVELER ]}, - { 1: [ Species.MAKUHITA ], 24: [ Species.HARIYAMA ]}, - Species.NOSEPASS, - { 1: [ Species.NOIBAT ], 48: [ Species.NOIVERN ]}, - { 1: [ Species.WIMPOD ], 30: [ Species.GOLISOPOD ]} + { 1: [ SpeciesId.GEODUDE ], 25: [ SpeciesId.GRAVELER ]}, + { 1: [ SpeciesId.MAKUHITA ], 24: [ SpeciesId.HARIYAMA ]}, + SpeciesId.NOSEPASS, + { 1: [ SpeciesId.NOIBAT ], 48: [ SpeciesId.NOIVERN ]}, + { 1: [ SpeciesId.WIMPOD ], 30: [ SpeciesId.GOLISOPOD ]} ] }, [BiomePoolTier.RARE]: { @@ -819,71 +819,71 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.ONIX, { 1: [ Species.FERROSEED ], 40: [ Species.FERROTHORN ]}, Species.CARBINK, { 1: [ Species.GLIMMET ], 35: [ Species.GLIMMORA ]}] + [TimeOfDay.ALL]: [ SpeciesId.ONIX, { 1: [ SpeciesId.FERROSEED ], 40: [ SpeciesId.FERROTHORN ]}, SpeciesId.CARBINK, { 1: [ SpeciesId.GLIMMET ], 35: [ SpeciesId.GLIMMORA ]}] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SHUCKLE ]}, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.UXIE ]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.SHUCKLE ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.UXIE ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.PARASECT, Species.ONIX, Species.CROBAT, Species.URSARING, Species.EXPLOUD, Species.PROBOPASS, Species.GIGALITH, Species.SWOOBAT, Species.DIGGERSBY, Species.NOIVERN, Species.GOLISOPOD, Species.GARGANACL ] + [TimeOfDay.ALL]: [ SpeciesId.PARASECT, SpeciesId.ONIX, SpeciesId.CROBAT, SpeciesId.URSARING, SpeciesId.EXPLOUD, SpeciesId.PROBOPASS, SpeciesId.GIGALITH, SpeciesId.SWOOBAT, SpeciesId.DIGGERSBY, SpeciesId.NOIVERN, SpeciesId.GOLISOPOD, SpeciesId.GARGANACL ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.LYCANROC ], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SHUCKLE, Species.FERROTHORN, Species.GLIMMORA ]}, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.UXIE ]}, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TERAPAGOS ]} + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ SpeciesId.LYCANROC ], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.SHUCKLE, SpeciesId.FERROTHORN, SpeciesId.GLIMMORA ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.UXIE ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.TERAPAGOS ]} }, - [Biome.DESERT]: { + [BiomeId.DESERT]: { [BiomePoolTier.COMMON]: { - [TimeOfDay.DAWN]: [ Species.TRAPINCH, { 1: [ Species.HIPPOPOTAS ], 34: [ Species.HIPPOWDON ]}, { 1: [ Species.RELLOR ], 29: [ Species.RABSCA ]}], - [TimeOfDay.DAY]: [ Species.TRAPINCH, { 1: [ Species.HIPPOPOTAS ], 34: [ Species.HIPPOWDON ]}, { 1: [ Species.RELLOR ], 29: [ Species.RABSCA ]}], - [TimeOfDay.DUSK]: [{ 1: [ Species.CACNEA ], 32: [ Species.CACTURNE ]}, { 1: [ Species.SANDILE ], 29: [ Species.KROKOROK ], 40: [ Species.KROOKODILE ]}], - [TimeOfDay.NIGHT]: [{ 1: [ Species.CACNEA ], 32: [ Species.CACTURNE ]}, { 1: [ Species.SANDILE ], 29: [ Species.KROKOROK ], 40: [ Species.KROOKODILE ]}], - [TimeOfDay.ALL]: [{ 1: [ Species.SANDSHREW ], 22: [ Species.SANDSLASH ]}, { 1: [ Species.SKORUPI ], 40: [ Species.DRAPION ]}, { 1: [ Species.SILICOBRA ], 36: [ Species.SANDACONDA ]}] + [TimeOfDay.DAWN]: [ SpeciesId.TRAPINCH, { 1: [ SpeciesId.HIPPOPOTAS ], 34: [ SpeciesId.HIPPOWDON ]}, { 1: [ SpeciesId.RELLOR ], 29: [ SpeciesId.RABSCA ]}], + [TimeOfDay.DAY]: [ SpeciesId.TRAPINCH, { 1: [ SpeciesId.HIPPOPOTAS ], 34: [ SpeciesId.HIPPOWDON ]}, { 1: [ SpeciesId.RELLOR ], 29: [ SpeciesId.RABSCA ]}], + [TimeOfDay.DUSK]: [{ 1: [ SpeciesId.CACNEA ], 32: [ SpeciesId.CACTURNE ]}, { 1: [ SpeciesId.SANDILE ], 29: [ SpeciesId.KROKOROK ], 40: [ SpeciesId.KROOKODILE ]}], + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.CACNEA ], 32: [ SpeciesId.CACTURNE ]}, { 1: [ SpeciesId.SANDILE ], 29: [ SpeciesId.KROKOROK ], 40: [ SpeciesId.KROOKODILE ]}], + [TimeOfDay.ALL]: [{ 1: [ SpeciesId.SANDSHREW ], 22: [ SpeciesId.SANDSLASH ]}, { 1: [ SpeciesId.SKORUPI ], 40: [ SpeciesId.DRAPION ]}, { 1: [ SpeciesId.SILICOBRA ], 36: [ SpeciesId.SANDACONDA ]}] }, [BiomePoolTier.UNCOMMON]: { - [TimeOfDay.DAWN]: [{ 1: [ Species.SANDILE ], 29: [ Species.KROKOROK ], 40: [ Species.KROOKODILE ]}, Species.HELIOPTILE ], - [TimeOfDay.DAY]: [{ 1: [ Species.SANDILE ], 29: [ Species.KROKOROK ], 40: [ Species.KROOKODILE ]}, Species.HELIOPTILE ], + [TimeOfDay.DAWN]: [{ 1: [ SpeciesId.SANDILE ], 29: [ SpeciesId.KROKOROK ], 40: [ SpeciesId.KROOKODILE ]}, SpeciesId.HELIOPTILE ], + [TimeOfDay.DAY]: [{ 1: [ SpeciesId.SANDILE ], 29: [ SpeciesId.KROKOROK ], 40: [ SpeciesId.KROOKODILE ]}, SpeciesId.HELIOPTILE ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.MARACTUS, { 1: [ Species.BRAMBLIN ], 30: [ Species.BRAMBLEGHAST ]}, Species.ORTHWORM ] + [TimeOfDay.ALL]: [ SpeciesId.MARACTUS, { 1: [ SpeciesId.BRAMBLIN ], 30: [ SpeciesId.BRAMBLEGHAST ]}, SpeciesId.ORTHWORM ] }, [BiomePoolTier.RARE]: { - [TimeOfDay.DAWN]: [{ 1: [ Species.VIBRAVA ], 45: [ Species.FLYGON ]}], - [TimeOfDay.DAY]: [{ 1: [ Species.VIBRAVA ], 45: [ Species.FLYGON ]}], + [TimeOfDay.DAWN]: [{ 1: [ SpeciesId.VIBRAVA ], 45: [ SpeciesId.FLYGON ]}], + [TimeOfDay.DAY]: [{ 1: [ SpeciesId.VIBRAVA ], 45: [ SpeciesId.FLYGON ]}], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [{ 1: [ Species.DARUMAKA ], 35: [ Species.DARMANITAN ]}] + [TimeOfDay.ALL]: [{ 1: [ SpeciesId.DARUMAKA ], 35: [ SpeciesId.DARMANITAN ]}] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ Species.LILEEP ], 40: [ Species.CRADILY ]}, { 1: [ Species.ANORITH ], 40: [ Species.ARMALDO ]}]}, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIROCK, Species.TAPU_BULU, Species.PHEROMOSA ]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ SpeciesId.LILEEP ], 40: [ SpeciesId.CRADILY ]}, { 1: [ SpeciesId.ANORITH ], 40: [ SpeciesId.ARMALDO ]}]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.REGIROCK, SpeciesId.TAPU_BULU, SpeciesId.PHEROMOSA ]}, [BiomePoolTier.BOSS]: { - [TimeOfDay.DAWN]: [ Species.HIPPOWDON, Species.HELIOLISK, Species.RABSCA ], - [TimeOfDay.DAY]: [ Species.HIPPOWDON, Species.HELIOLISK, Species.RABSCA ], - [TimeOfDay.DUSK]: [ Species.CACTURNE, Species.KROOKODILE ], - [TimeOfDay.NIGHT]: [ Species.CACTURNE, Species.KROOKODILE ], - [TimeOfDay.ALL]: [ Species.SANDSLASH, Species.DRAPION, Species.DARMANITAN, Species.MARACTUS, Species.SANDACONDA, Species.BRAMBLEGHAST ] + [TimeOfDay.DAWN]: [ SpeciesId.HIPPOWDON, SpeciesId.HELIOLISK, SpeciesId.RABSCA ], + [TimeOfDay.DAY]: [ SpeciesId.HIPPOWDON, SpeciesId.HELIOLISK, SpeciesId.RABSCA ], + [TimeOfDay.DUSK]: [ SpeciesId.CACTURNE, SpeciesId.KROOKODILE ], + [TimeOfDay.NIGHT]: [ SpeciesId.CACTURNE, SpeciesId.KROOKODILE ], + [TimeOfDay.ALL]: [ SpeciesId.SANDSLASH, SpeciesId.DRAPION, SpeciesId.DARMANITAN, SpeciesId.MARACTUS, SpeciesId.SANDACONDA, SpeciesId.BRAMBLEGHAST ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRADILY, Species.ARMALDO ]}, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIROCK, Species.TAPU_BULU, Species.PHEROMOSA ]}, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.CRADILY, SpeciesId.ARMALDO ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.REGIROCK, SpeciesId.TAPU_BULU, SpeciesId.PHEROMOSA ]}, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []} }, - [Biome.ICE_CAVE]: { + [BiomeId.ICE_CAVE]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.SEEL ], 34: [ Species.DEWGONG ]}, - { 1: [ Species.SWINUB ], 33: [ Species.PILOSWINE ]}, - { 1: [ Species.SNOVER ], 40: [ Species.ABOMASNOW ]}, - { 1: [ Species.VANILLITE ], 35: [ Species.VANILLISH ], 47: [ Species.VANILLUXE ]}, - { 1: [ Species.CUBCHOO ], 37: [ Species.BEARTIC ]}, - { 1: [ Species.BERGMITE ], 37: [ Species.AVALUGG ]}, - Species.CRABRAWLER, - { 1: [ Species.SNOM ], 20: [ Species.FROSMOTH ]} + { 1: [ SpeciesId.SEEL ], 34: [ SpeciesId.DEWGONG ]}, + { 1: [ SpeciesId.SWINUB ], 33: [ SpeciesId.PILOSWINE ]}, + { 1: [ SpeciesId.SNOVER ], 40: [ SpeciesId.ABOMASNOW ]}, + { 1: [ SpeciesId.VANILLITE ], 35: [ SpeciesId.VANILLISH ], 47: [ SpeciesId.VANILLUXE ]}, + { 1: [ SpeciesId.CUBCHOO ], 37: [ SpeciesId.BEARTIC ]}, + { 1: [ SpeciesId.BERGMITE ], 37: [ SpeciesId.AVALUGG ]}, + SpeciesId.CRABRAWLER, + { 1: [ SpeciesId.SNOM ], 20: [ SpeciesId.FROSMOTH ]} ] }, [BiomePoolTier.UNCOMMON]: { @@ -892,186 +892,186 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - Species.SNEASEL, - { 1: [ Species.SNORUNT ], 42: [ Species.GLALIE ]}, - { 1: [ Species.SPHEAL ], 32: [ Species.SEALEO ], 44: [ Species.WALREIN ]}, - Species.EISCUE, - { 1: [ Species.CETODDLE ], 30: [ Species.CETITAN ]} + SpeciesId.SNEASEL, + { 1: [ SpeciesId.SNORUNT ], 42: [ SpeciesId.GLALIE ]}, + { 1: [ SpeciesId.SPHEAL ], 32: [ SpeciesId.SEALEO ], 44: [ SpeciesId.WALREIN ]}, + SpeciesId.EISCUE, + { 1: [ SpeciesId.CETODDLE ], 30: [ SpeciesId.CETITAN ]} ] }, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.JYNX, Species.LAPRAS, Species.FROSLASS, Species.CRYOGONAL ]}, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DELIBIRD, Species.ROTOM, { 1: [ Species.AMAURA ], 59: [ Species.AURORUS ]}]}, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ARTICUNO, Species.REGICE ]}, + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.JYNX, SpeciesId.LAPRAS, SpeciesId.FROSLASS, SpeciesId.CRYOGONAL ]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.DELIBIRD, SpeciesId.ROTOM, { 1: [ SpeciesId.AMAURA ], 59: [ SpeciesId.AURORUS ]}]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.ARTICUNO, SpeciesId.REGICE ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.DEWGONG, Species.GLALIE, Species.WALREIN, Species.WEAVILE, Species.MAMOSWINE, Species.FROSLASS, Species.VANILLUXE, Species.BEARTIC, Species.CRYOGONAL, Species.AVALUGG, Species.CRABOMINABLE, Species.CETITAN ] + [TimeOfDay.ALL]: [ SpeciesId.DEWGONG, SpeciesId.GLALIE, SpeciesId.WALREIN, SpeciesId.WEAVILE, SpeciesId.MAMOSWINE, SpeciesId.FROSLASS, SpeciesId.VANILLUXE, SpeciesId.BEARTIC, SpeciesId.CRYOGONAL, SpeciesId.AVALUGG, SpeciesId.CRABOMINABLE, SpeciesId.CETITAN ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.JYNX, Species.LAPRAS, Species.GLACEON, Species.AURORUS ]}, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ARTICUNO, Species.REGICE, Species.ROTOM ]}, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KYUREM ]} + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.JYNX, SpeciesId.LAPRAS, SpeciesId.GLACEON, SpeciesId.AURORUS ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.ARTICUNO, SpeciesId.REGICE, SpeciesId.ROTOM ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.KYUREM ]} }, - [Biome.MEADOW]: { + [BiomeId.MEADOW]: { [BiomePoolTier.COMMON]: { - [TimeOfDay.DAWN]: [{ 1: [ Species.LEDYBA ], 18: [ Species.LEDIAN ]}, Species.ROSELIA, Species.COTTONEE, Species.MINCCINO ], - [TimeOfDay.DAY]: [ Species.ROSELIA, Species.COTTONEE, Species.MINCCINO ], + [TimeOfDay.DAWN]: [{ 1: [ SpeciesId.LEDYBA ], 18: [ SpeciesId.LEDIAN ]}, SpeciesId.ROSELIA, SpeciesId.COTTONEE, SpeciesId.MINCCINO ], + [TimeOfDay.DAY]: [ SpeciesId.ROSELIA, SpeciesId.COTTONEE, SpeciesId.MINCCINO ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.BLITZLE ], 27: [ Species.ZEBSTRIKA ]}, - { 1: [ Species.FLABEBE ], 19: [ Species.FLOETTE ]}, - { 1: [ Species.CUTIEFLY ], 25: [ Species.RIBOMBEE ]}, - { 1: [ Species.GOSSIFLEUR ], 20: [ Species.ELDEGOSS ]}, - { 1: [ Species.WOOLOO ], 24: [ Species.DUBWOOL ]} + { 1: [ SpeciesId.BLITZLE ], 27: [ SpeciesId.ZEBSTRIKA ]}, + { 1: [ SpeciesId.FLABEBE ], 19: [ SpeciesId.FLOETTE ]}, + { 1: [ SpeciesId.CUTIEFLY ], 25: [ SpeciesId.RIBOMBEE ]}, + { 1: [ SpeciesId.GOSSIFLEUR ], 20: [ SpeciesId.ELDEGOSS ]}, + { 1: [ SpeciesId.WOOLOO ], 24: [ SpeciesId.DUBWOOL ]} ] }, [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [ - { 1: [ Species.PONYTA ], 40: [ Species.RAPIDASH ]}, - { 1: [ Species.SNUBBULL ], 23: [ Species.GRANBULL ]}, - { 1: [ Species.SKITTY ], 30: [ Species.DELCATTY ]}, - Species.BOUFFALANT, - { 1: [ Species.SMOLIV ], 25: [ Species.DOLLIV ], 35: [ Species.ARBOLIVA ]} + { 1: [ SpeciesId.PONYTA ], 40: [ SpeciesId.RAPIDASH ]}, + { 1: [ SpeciesId.SNUBBULL ], 23: [ SpeciesId.GRANBULL ]}, + { 1: [ SpeciesId.SKITTY ], 30: [ SpeciesId.DELCATTY ]}, + SpeciesId.BOUFFALANT, + { 1: [ SpeciesId.SMOLIV ], 25: [ SpeciesId.DOLLIV ], 35: [ SpeciesId.ARBOLIVA ]} ], [TimeOfDay.DAY]: [ - { 1: [ Species.PONYTA ], 40: [ Species.RAPIDASH ]}, - { 1: [ Species.SNUBBULL ], 23: [ Species.GRANBULL ]}, - { 1: [ Species.SKITTY ], 30: [ Species.DELCATTY ]}, - Species.BOUFFALANT, - { 1: [ Species.SMOLIV ], 25: [ Species.DOLLIV ], 35: [ Species.ARBOLIVA ]} + { 1: [ SpeciesId.PONYTA ], 40: [ SpeciesId.RAPIDASH ]}, + { 1: [ SpeciesId.SNUBBULL ], 23: [ SpeciesId.GRANBULL ]}, + { 1: [ SpeciesId.SKITTY ], 30: [ SpeciesId.DELCATTY ]}, + SpeciesId.BOUFFALANT, + { 1: [ SpeciesId.SMOLIV ], 25: [ SpeciesId.DOLLIV ], 35: [ SpeciesId.ARBOLIVA ]} ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.JIGGLYPUFF ], 30: [ Species.WIGGLYTUFF ]}, - { 1: [ Species.MAREEP ], 15: [ Species.FLAAFFY ], 30: [ Species.AMPHAROS ]}, - { 1: [ Species.RALTS ], 20: [ Species.KIRLIA ], 30: [ Species.GARDEVOIR ]}, - { 1: [ Species.GLAMEOW ], 38: [ Species.PURUGLY ]}, - Species.ORICORIO + { 1: [ SpeciesId.JIGGLYPUFF ], 30: [ SpeciesId.WIGGLYTUFF ]}, + { 1: [ SpeciesId.MAREEP ], 15: [ SpeciesId.FLAAFFY ], 30: [ SpeciesId.AMPHAROS ]}, + { 1: [ SpeciesId.RALTS ], 20: [ SpeciesId.KIRLIA ], 30: [ SpeciesId.GARDEVOIR ]}, + { 1: [ SpeciesId.GLAMEOW ], 38: [ SpeciesId.PURUGLY ]}, + SpeciesId.ORICORIO ] }, [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], - [TimeOfDay.NIGHT]: [ Species.VOLBEAT, Species.ILLUMISE ], - [TimeOfDay.ALL]: [ Species.TAUROS, Species.EEVEE, Species.MILTANK, Species.SPINDA, { 1: [ Species.APPLIN ], 30: [ Species.DIPPLIN ]}, { 1: [ Species.SPRIGATITO ], 16: [ Species.FLORAGATO ], 36: [ Species.MEOWSCARADA ]}] + [TimeOfDay.NIGHT]: [ SpeciesId.VOLBEAT, SpeciesId.ILLUMISE ], + [TimeOfDay.ALL]: [ SpeciesId.TAUROS, SpeciesId.EEVEE, SpeciesId.MILTANK, SpeciesId.SPINDA, { 1: [ SpeciesId.APPLIN ], 30: [ SpeciesId.DIPPLIN ]}, { 1: [ SpeciesId.SPRIGATITO ], 16: [ SpeciesId.FLORAGATO ], 36: [ SpeciesId.MEOWSCARADA ]}] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CHANSEY, Species.SYLVEON ]}, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MELOETTA ]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.CHANSEY, SpeciesId.SYLVEON ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.MELOETTA ]}, [BiomePoolTier.BOSS]: { - [TimeOfDay.DAWN]: [ Species.LEDIAN, Species.GRANBULL, Species.DELCATTY, Species.ROSERADE, Species.CINCCINO, Species.BOUFFALANT, Species.ARBOLIVA ], - [TimeOfDay.DAY]: [ Species.GRANBULL, Species.DELCATTY, Species.ROSERADE, Species.CINCCINO, Species.BOUFFALANT, Species.ARBOLIVA ], + [TimeOfDay.DAWN]: [ SpeciesId.LEDIAN, SpeciesId.GRANBULL, SpeciesId.DELCATTY, SpeciesId.ROSERADE, SpeciesId.CINCCINO, SpeciesId.BOUFFALANT, SpeciesId.ARBOLIVA ], + [TimeOfDay.DAY]: [ SpeciesId.GRANBULL, SpeciesId.DELCATTY, SpeciesId.ROSERADE, SpeciesId.CINCCINO, SpeciesId.BOUFFALANT, SpeciesId.ARBOLIVA ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.TAUROS, Species.MILTANK, Species.GARDEVOIR, Species.PURUGLY, Species.ZEBSTRIKA, Species.FLORGES, Species.RIBOMBEE, Species.DUBWOOL ] + [TimeOfDay.ALL]: [ SpeciesId.TAUROS, SpeciesId.MILTANK, SpeciesId.GARDEVOIR, SpeciesId.PURUGLY, SpeciesId.ZEBSTRIKA, SpeciesId.FLORGES, SpeciesId.RIBOMBEE, SpeciesId.DUBWOOL ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [ Species.HISUI_LILLIGANT ], [TimeOfDay.DAY]: [ Species.HISUI_LILLIGANT ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLISSEY, Species.SYLVEON, Species.FLAPPLE, Species.APPLETUN, Species.MEOWSCARADA, Species.HYDRAPPLE ]}, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MELOETTA ]}, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SHAYMIN ]} + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [ SpeciesId.HISUI_LILLIGANT ], [TimeOfDay.DAY]: [ SpeciesId.HISUI_LILLIGANT ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.BLISSEY, SpeciesId.SYLVEON, SpeciesId.FLAPPLE, SpeciesId.APPLETUN, SpeciesId.MEOWSCARADA, SpeciesId.HYDRAPPLE ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.MELOETTA ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.SHAYMIN ]} }, - [Biome.POWER_PLANT]: { + [BiomeId.POWER_PLANT]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - Species.PIKACHU, - { 1: [ Species.MAGNEMITE ], 30: [ Species.MAGNETON ]}, - { 1: [ Species.VOLTORB ], 30: [ Species.ELECTRODE ]}, - { 1: [ Species.ELECTRIKE ], 26: [ Species.MANECTRIC ]}, - { 1: [ Species.SHINX ], 15: [ Species.LUXIO ], 30: [ Species.LUXRAY ]}, - Species.DEDENNE, - { 1: [ Species.GRUBBIN ], 20: [ Species.CHARJABUG ]}, - { 1: [ Species.PAWMI ], 18: [ Species.PAWMO ], 32: [ Species.PAWMOT ]}, - { 1: [ Species.TADBULB ], 30: [ Species.BELLIBOLT ]} + SpeciesId.PIKACHU, + { 1: [ SpeciesId.MAGNEMITE ], 30: [ SpeciesId.MAGNETON ]}, + { 1: [ SpeciesId.VOLTORB ], 30: [ SpeciesId.ELECTRODE ]}, + { 1: [ SpeciesId.ELECTRIKE ], 26: [ SpeciesId.MANECTRIC ]}, + { 1: [ SpeciesId.SHINX ], 15: [ SpeciesId.LUXIO ], 30: [ SpeciesId.LUXRAY ]}, + SpeciesId.DEDENNE, + { 1: [ SpeciesId.GRUBBIN ], 20: [ SpeciesId.CHARJABUG ]}, + { 1: [ SpeciesId.PAWMI ], 18: [ SpeciesId.PAWMO ], 32: [ SpeciesId.PAWMOT ]}, + { 1: [ SpeciesId.TADBULB ], 30: [ SpeciesId.BELLIBOLT ]} ] }, - [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ELECTABUZZ, Species.PLUSLE, Species.MINUN, Species.PACHIRISU, Species.EMOLGA, Species.TOGEDEMARU ]}, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ Species.MAREEP ], 15: [ Species.FLAAFFY ]}]}, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.JOLTEON, Species.HISUI_VOLTORB ]}, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.RAIKOU, Species.THUNDURUS, Species.XURKITREE, Species.ZERAORA, Species.REGIELEKI ]}, + [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.ELECTABUZZ, SpeciesId.PLUSLE, SpeciesId.MINUN, SpeciesId.PACHIRISU, SpeciesId.EMOLGA, SpeciesId.TOGEDEMARU ]}, + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ SpeciesId.MAREEP ], 15: [ SpeciesId.FLAAFFY ]}]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.JOLTEON, SpeciesId.HISUI_VOLTORB ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.RAIKOU, SpeciesId.THUNDURUS, SpeciesId.XURKITREE, SpeciesId.ZERAORA, SpeciesId.REGIELEKI ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.RAICHU, Species.MANECTRIC, Species.LUXRAY, Species.MAGNEZONE, Species.ELECTIVIRE, Species.DEDENNE, Species.VIKAVOLT, Species.TOGEDEMARU, Species.PAWMOT, Species.BELLIBOLT ] + [TimeOfDay.ALL]: [ SpeciesId.RAICHU, SpeciesId.MANECTRIC, SpeciesId.LUXRAY, SpeciesId.MAGNEZONE, SpeciesId.ELECTIVIRE, SpeciesId.DEDENNE, SpeciesId.VIKAVOLT, SpeciesId.TOGEDEMARU, SpeciesId.PAWMOT, SpeciesId.BELLIBOLT ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.JOLTEON, Species.AMPHAROS, Species.HISUI_ELECTRODE ]}, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZAPDOS, Species.RAIKOU, Species.THUNDURUS, Species.XURKITREE, Species.ZERAORA, Species.REGIELEKI ]}, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZEKROM ]} + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.JOLTEON, SpeciesId.AMPHAROS, SpeciesId.HISUI_ELECTRODE ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.ZAPDOS, SpeciesId.RAIKOU, SpeciesId.THUNDURUS, SpeciesId.XURKITREE, SpeciesId.ZERAORA, SpeciesId.REGIELEKI ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.ZEKROM ]} }, - [Biome.VOLCANO]: { + [BiomeId.VOLCANO]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - Species.VULPIX, - Species.GROWLITHE, - { 1: [ Species.PONYTA ], 40: [ Species.RAPIDASH ]}, - { 1: [ Species.SLUGMA ], 38: [ Species.MAGCARGO ]}, - { 1: [ Species.NUMEL ], 33: [ Species.CAMERUPT ]}, - { 1: [ Species.SALANDIT ], 33: [ Species.SALAZZLE ]}, - { 1: [ Species.ROLYCOLY ], 18: [ Species.CARKOL ], 34: [ Species.COALOSSAL ]} + SpeciesId.VULPIX, + SpeciesId.GROWLITHE, + { 1: [ SpeciesId.PONYTA ], 40: [ SpeciesId.RAPIDASH ]}, + { 1: [ SpeciesId.SLUGMA ], 38: [ SpeciesId.MAGCARGO ]}, + { 1: [ SpeciesId.NUMEL ], 33: [ SpeciesId.CAMERUPT ]}, + { 1: [ SpeciesId.SALANDIT ], 33: [ SpeciesId.SALAZZLE ]}, + { 1: [ SpeciesId.ROLYCOLY ], 18: [ SpeciesId.CARKOL ], 34: [ SpeciesId.COALOSSAL ]} ] }, - [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MAGMAR, Species.TORKOAL, { 1: [ Species.PANSEAR ], 30: [ Species.SIMISEAR ]}, Species.HEATMOR, Species.TURTONATOR ]}, + [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.MAGMAR, SpeciesId.TORKOAL, { 1: [ SpeciesId.PANSEAR ], 30: [ SpeciesId.SIMISEAR ]}, SpeciesId.HEATMOR, SpeciesId.TURTONATOR ]}, [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.CHARMANDER ], 16: [ Species.CHARMELEON ], 36: [ Species.CHARIZARD ]}, - { 1: [ Species.CYNDAQUIL ], 14: [ Species.QUILAVA ], 36: [ Species.TYPHLOSION ]}, - { 1: [ Species.CHIMCHAR ], 14: [ Species.MONFERNO ], 36: [ Species.INFERNAPE ]}, - { 1: [ Species.TEPIG ], 17: [ Species.PIGNITE ], 36: [ Species.EMBOAR ]}, - { 1: [ Species.FENNEKIN ], 16: [ Species.BRAIXEN ], 36: [ Species.DELPHOX ]}, - { 1: [ Species.LITTEN ], 17: [ Species.TORRACAT ], 34: [ Species.INCINEROAR ]}, - { 1: [ Species.SCORBUNNY ], 16: [ Species.RABOOT ], 35: [ Species.CINDERACE ]}, - { 1: [ Species.CHARCADET ], 30: [ Species.ARMAROUGE ]} + { 1: [ SpeciesId.CHARMANDER ], 16: [ SpeciesId.CHARMELEON ], 36: [ SpeciesId.CHARIZARD ]}, + { 1: [ SpeciesId.CYNDAQUIL ], 14: [ SpeciesId.QUILAVA ], 36: [ SpeciesId.TYPHLOSION ]}, + { 1: [ SpeciesId.CHIMCHAR ], 14: [ SpeciesId.MONFERNO ], 36: [ SpeciesId.INFERNAPE ]}, + { 1: [ SpeciesId.TEPIG ], 17: [ SpeciesId.PIGNITE ], 36: [ SpeciesId.EMBOAR ]}, + { 1: [ SpeciesId.FENNEKIN ], 16: [ SpeciesId.BRAIXEN ], 36: [ SpeciesId.DELPHOX ]}, + { 1: [ SpeciesId.LITTEN ], 17: [ SpeciesId.TORRACAT ], 34: [ SpeciesId.INCINEROAR ]}, + { 1: [ SpeciesId.SCORBUNNY ], 16: [ SpeciesId.RABOOT ], 35: [ SpeciesId.CINDERACE ]}, + { 1: [ SpeciesId.CHARCADET ], 30: [ SpeciesId.ARMAROUGE ]} ] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.FLAREON, Species.ROTOM, { 1: [ Species.LARVESTA ], 59: [ Species.VOLCARONA ]}, Species.HISUI_GROWLITHE ]}, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ENTEI, Species.HEATRAN, Species.VOLCANION, Species.CHI_YU ]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.FLAREON, SpeciesId.ROTOM, { 1: [ SpeciesId.LARVESTA ], 59: [ SpeciesId.VOLCARONA ]}, SpeciesId.HISUI_GROWLITHE ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.ENTEI, SpeciesId.HEATRAN, SpeciesId.VOLCANION, SpeciesId.CHI_YU ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.NINETALES, Species.ARCANINE, Species.RAPIDASH, Species.MAGCARGO, Species.CAMERUPT, Species.TORKOAL, Species.MAGMORTAR, Species.SIMISEAR, Species.HEATMOR, Species.SALAZZLE, Species.TURTONATOR, Species.COALOSSAL ] + [TimeOfDay.ALL]: [ SpeciesId.NINETALES, SpeciesId.ARCANINE, SpeciesId.RAPIDASH, SpeciesId.MAGCARGO, SpeciesId.CAMERUPT, SpeciesId.TORKOAL, SpeciesId.MAGMORTAR, SpeciesId.SIMISEAR, SpeciesId.HEATMOR, SpeciesId.SALAZZLE, SpeciesId.TURTONATOR, SpeciesId.COALOSSAL ] }, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.CHARIZARD, Species.FLAREON, Species.TYPHLOSION, Species.INFERNAPE, Species.EMBOAR, Species.VOLCARONA, Species.DELPHOX, Species.INCINEROAR, Species.CINDERACE, Species.ARMAROUGE, Species.HISUI_ARCANINE ] + [TimeOfDay.ALL]: [ SpeciesId.CHARIZARD, SpeciesId.FLAREON, SpeciesId.TYPHLOSION, SpeciesId.INFERNAPE, SpeciesId.EMBOAR, SpeciesId.VOLCARONA, SpeciesId.DELPHOX, SpeciesId.INCINEROAR, SpeciesId.CINDERACE, SpeciesId.ARMAROUGE, SpeciesId.HISUI_ARCANINE ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MOLTRES, Species.ENTEI, Species.ROTOM, Species.HEATRAN, Species.VOLCANION, Species.CHI_YU ]}, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.RESHIRAM ]} + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.MOLTRES, SpeciesId.ENTEI, SpeciesId.ROTOM, SpeciesId.HEATRAN, SpeciesId.VOLCANION, SpeciesId.CHI_YU ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.RESHIRAM ]} }, - [Biome.GRAVEYARD]: { + [BiomeId.GRAVEYARD]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.GASTLY ], 25: [ Species.HAUNTER ]}, - { 1: [ Species.SHUPPET ], 37: [ Species.BANETTE ]}, - { 1: [ Species.DUSKULL ], 37: [ Species.DUSCLOPS ]}, - { 1: [ Species.DRIFLOON ], 28: [ Species.DRIFBLIM ]}, - { 1: [ Species.LITWICK ], 41: [ Species.LAMPENT ]}, - Species.PHANTUMP, - Species.PUMPKABOO, - { 1: [ Species.GREAVARD ], 60: [ Species.HOUNDSTONE ]} + { 1: [ SpeciesId.GASTLY ], 25: [ SpeciesId.HAUNTER ]}, + { 1: [ SpeciesId.SHUPPET ], 37: [ SpeciesId.BANETTE ]}, + { 1: [ SpeciesId.DUSKULL ], 37: [ SpeciesId.DUSCLOPS ]}, + { 1: [ SpeciesId.DRIFLOON ], 28: [ SpeciesId.DRIFBLIM ]}, + { 1: [ SpeciesId.LITWICK ], 41: [ SpeciesId.LAMPENT ]}, + SpeciesId.PHANTUMP, + SpeciesId.PUMPKABOO, + { 1: [ SpeciesId.GREAVARD ], 60: [ SpeciesId.HOUNDSTONE ]} ] }, [BiomePoolTier.UNCOMMON]: { @@ -1079,34 +1079,34 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [{ 1: [ Species.CUBONE ], 28: [ Species.MAROWAK ]}, { 1: [ Species.YAMASK ], 34: [ Species.COFAGRIGUS ]}, { 1: [ Species.SINISTEA ], 30: [ Species.POLTEAGEIST ]}] + [TimeOfDay.ALL]: [{ 1: [ SpeciesId.CUBONE ], 28: [ SpeciesId.MAROWAK ]}, { 1: [ SpeciesId.YAMASK ], 34: [ SpeciesId.COFAGRIGUS ]}, { 1: [ SpeciesId.SINISTEA ], 30: [ SpeciesId.POLTEAGEIST ]}] }, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MISDREAVUS, Species.MIMIKYU, { 1: [ Species.FUECOCO ], 16: [ Species.CROCALOR ], 36: [ Species.SKELEDIRGE ]}, Species.CERULEDGE ]}, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SPIRITOMB ]}, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MARSHADOW, Species.SPECTRIER ]}, + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.MISDREAVUS, SpeciesId.MIMIKYU, { 1: [ SpeciesId.FUECOCO ], 16: [ SpeciesId.CROCALOR ], 36: [ SpeciesId.SKELEDIRGE ]}, SpeciesId.CERULEDGE ]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.SPIRITOMB ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.MARSHADOW, SpeciesId.SPECTRIER ]}, [BiomePoolTier.BOSS]: { - [TimeOfDay.DAWN]: [ Species.MAROWAK ], - [TimeOfDay.DAY]: [ Species.MAROWAK ], - [TimeOfDay.DUSK]: [ Species.MAROWAK ], + [TimeOfDay.DAWN]: [ SpeciesId.MAROWAK ], + [TimeOfDay.DAY]: [ SpeciesId.MAROWAK ], + [TimeOfDay.DUSK]: [ SpeciesId.MAROWAK ], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.GENGAR, Species.BANETTE, Species.DRIFBLIM, Species.MISMAGIUS, Species.DUSKNOIR, Species.CHANDELURE, Species.TREVENANT, Species.GOURGEIST, Species.MIMIKYU, Species.POLTEAGEIST, Species.HOUNDSTONE ] + [TimeOfDay.ALL]: [ SpeciesId.GENGAR, SpeciesId.BANETTE, SpeciesId.DRIFBLIM, SpeciesId.MISMAGIUS, SpeciesId.DUSKNOIR, SpeciesId.CHANDELURE, SpeciesId.TREVENANT, SpeciesId.GOURGEIST, SpeciesId.MIMIKYU, SpeciesId.POLTEAGEIST, SpeciesId.HOUNDSTONE ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SKELEDIRGE, Species.CERULEDGE, Species.HISUI_TYPHLOSION ]}, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MARSHADOW, Species.SPECTRIER ]}, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GIRATINA ]} + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.SKELEDIRGE, SpeciesId.CERULEDGE, SpeciesId.HISUI_TYPHLOSION ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.MARSHADOW, SpeciesId.SPECTRIER ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.GIRATINA ]} }, - [Biome.DOJO]: { + [BiomeId.DOJO]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.MANKEY ], 28: [ Species.PRIMEAPE ], 75: [ Species.ANNIHILAPE ]}, - { 1: [ Species.MAKUHITA ], 24: [ Species.HARIYAMA ]}, - { 1: [ Species.MEDITITE ], 37: [ Species.MEDICHAM ]}, - { 1: [ Species.STUFFUL ], 27: [ Species.BEWEAR ]}, - { 1: [ Species.CLOBBOPUS ], 55: [ Species.GRAPPLOCT ]} + { 1: [ SpeciesId.MANKEY ], 28: [ SpeciesId.PRIMEAPE ], 75: [ SpeciesId.ANNIHILAPE ]}, + { 1: [ SpeciesId.MAKUHITA ], 24: [ SpeciesId.HARIYAMA ]}, + { 1: [ SpeciesId.MEDITITE ], 37: [ SpeciesId.MEDICHAM ]}, + { 1: [ SpeciesId.STUFFUL ], 27: [ SpeciesId.BEWEAR ]}, + { 1: [ SpeciesId.CLOBBOPUS ], 55: [ SpeciesId.GRAPPLOCT ]} ] }, [BiomePoolTier.UNCOMMON]: { @@ -1114,58 +1114,58 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [{ 1: [ Species.CROAGUNK ], 37: [ Species.TOXICROAK ]}, { 1: [ Species.SCRAGGY ], 39: [ Species.SCRAFTY ]}, { 1: [ Species.MIENFOO ], 50: [ Species.MIENSHAO ]}] + [TimeOfDay.ALL]: [{ 1: [ SpeciesId.CROAGUNK ], 37: [ SpeciesId.TOXICROAK ]}, { 1: [ SpeciesId.SCRAGGY ], 39: [ SpeciesId.SCRAFTY ]}, { 1: [ SpeciesId.MIENFOO ], 50: [ SpeciesId.MIENSHAO ]}] }, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HITMONLEE, Species.HITMONCHAN, Species.LUCARIO, Species.THROH, Species.SAWK, { 1: [ Species.PANCHAM ], 52: [ Species.PANGORO ]}]}, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HITMONTOP, Species.GALLADE, Species.GALAR_FARFETCHD ]}, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TERRAKION, Species.KUBFU, Species.GALAR_ZAPDOS ]}, + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.HITMONLEE, SpeciesId.HITMONCHAN, SpeciesId.LUCARIO, SpeciesId.THROH, SpeciesId.SAWK, { 1: [ SpeciesId.PANCHAM ], 52: [ SpeciesId.PANGORO ]}]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.HITMONTOP, SpeciesId.GALLADE, SpeciesId.GALAR_FARFETCHD ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.TERRAKION, SpeciesId.KUBFU, SpeciesId.GALAR_ZAPDOS ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.HITMONLEE, Species.HITMONCHAN, Species.HARIYAMA, Species.MEDICHAM, Species.LUCARIO, Species.TOXICROAK, Species.THROH, Species.SAWK, Species.SCRAFTY, Species.MIENSHAO, Species.BEWEAR, Species.GRAPPLOCT, Species.ANNIHILAPE ] + [TimeOfDay.ALL]: [ SpeciesId.HITMONLEE, SpeciesId.HITMONCHAN, SpeciesId.HARIYAMA, SpeciesId.MEDICHAM, SpeciesId.LUCARIO, SpeciesId.TOXICROAK, SpeciesId.THROH, SpeciesId.SAWK, SpeciesId.SCRAFTY, SpeciesId.MIENSHAO, SpeciesId.BEWEAR, SpeciesId.GRAPPLOCT, SpeciesId.ANNIHILAPE ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HITMONTOP, Species.GALLADE, Species.PANGORO, Species.SIRFETCHD, Species.HISUI_DECIDUEYE ]}, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TERRAKION, Species.URSHIFU ]}, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZAMAZENTA, Species.GALAR_ZAPDOS ]} + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.HITMONTOP, SpeciesId.GALLADE, SpeciesId.PANGORO, SpeciesId.SIRFETCHD, SpeciesId.HISUI_DECIDUEYE ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.TERRAKION, SpeciesId.URSHIFU ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.ZAMAZENTA, SpeciesId.GALAR_ZAPDOS ]} }, - [Biome.FACTORY]: { + [BiomeId.FACTORY]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.MACHOP ], 28: [ Species.MACHOKE ]}, - { 1: [ Species.MAGNEMITE ], 30: [ Species.MAGNETON ]}, - { 1: [ Species.VOLTORB ], 30: [ Species.ELECTRODE ]}, - { 1: [ Species.TIMBURR ], 25: [ Species.GURDURR ]}, - { 1: [ Species.KLINK ], 38: [ Species.KLANG ], 49: [ Species.KLINKLANG ]} + { 1: [ SpeciesId.MACHOP ], 28: [ SpeciesId.MACHOKE ]}, + { 1: [ SpeciesId.MAGNEMITE ], 30: [ SpeciesId.MAGNETON ]}, + { 1: [ SpeciesId.VOLTORB ], 30: [ SpeciesId.ELECTRODE ]}, + { 1: [ SpeciesId.TIMBURR ], 25: [ SpeciesId.GURDURR ]}, + { 1: [ SpeciesId.KLINK ], 38: [ SpeciesId.KLANG ], 49: [ SpeciesId.KLINKLANG ]} ] }, - [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ Species.BRONZOR ], 33: [ Species.BRONZONG ]}, Species.KLEFKI ]}, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ Species.PORYGON ], 30: [ Species.PORYGON2 ]}]}, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ Species.BELDUM ], 20: [ Species.METANG ], 45: [ Species.METAGROSS ]}]}, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GENESECT, Species.MAGEARNA ]}, - [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KLINKLANG, Species.KLEFKI ]}, + [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ SpeciesId.BRONZOR ], 33: [ SpeciesId.BRONZONG ]}, SpeciesId.KLEFKI ]}, + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ SpeciesId.PORYGON ], 30: [ SpeciesId.PORYGON2 ]}]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ SpeciesId.BELDUM ], 20: [ SpeciesId.METANG ], 45: [ SpeciesId.METAGROSS ]}]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.GENESECT, SpeciesId.MAGEARNA ]}, + [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.KLINKLANG, SpeciesId.KLEFKI ]}, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GENESECT, Species.MAGEARNA ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.GENESECT, SpeciesId.MAGEARNA ]}, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []} }, - [Biome.RUINS]: { + [BiomeId.RUINS]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.DROWZEE ], 26: [ Species.HYPNO ]}, - { 1: [ Species.NATU ], 25: [ Species.XATU ]}, - Species.UNOWN, - { 1: [ Species.SPOINK ], 32: [ Species.GRUMPIG ]}, - { 1: [ Species.BALTOY ], 36: [ Species.CLAYDOL ]}, - { 1: [ Species.ELGYEM ], 42: [ Species.BEHEEYEM ]} + { 1: [ SpeciesId.DROWZEE ], 26: [ SpeciesId.HYPNO ]}, + { 1: [ SpeciesId.NATU ], 25: [ SpeciesId.XATU ]}, + SpeciesId.UNOWN, + { 1: [ SpeciesId.SPOINK ], 32: [ SpeciesId.GRUMPIG ]}, + { 1: [ SpeciesId.BALTOY ], 36: [ SpeciesId.CLAYDOL ]}, + { 1: [ SpeciesId.ELGYEM ], 42: [ SpeciesId.BEHEEYEM ]} ] }, [BiomePoolTier.UNCOMMON]: { @@ -1173,84 +1173,84 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [{ 1: [ Species.ABRA ], 16: [ Species.KADABRA ]}, Species.SIGILYPH, { 1: [ Species.TINKATINK ], 24: [ Species.TINKATUFF ], 38: [ Species.TINKATON ]}] + [TimeOfDay.ALL]: [{ 1: [ SpeciesId.ABRA ], 16: [ SpeciesId.KADABRA ]}, SpeciesId.SIGILYPH, { 1: [ SpeciesId.TINKATINK ], 24: [ SpeciesId.TINKATUFF ], 38: [ SpeciesId.TINKATON ]}] }, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MR_MIME, Species.WOBBUFFET, { 1: [ Species.GOTHITA ], 32: [ Species.GOTHORITA ], 41: [ Species.GOTHITELLE ]}, Species.STONJOURNER ]}, + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.MR_MIME, SpeciesId.WOBBUFFET, { 1: [ SpeciesId.GOTHITA ], 32: [ SpeciesId.GOTHORITA ], 41: [ SpeciesId.GOTHITELLE ]}, SpeciesId.STONJOURNER ]}, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], - [TimeOfDay.DAY]: [ Species.ESPEON ], - [TimeOfDay.DUSK]: [{ 1: [ Species.GALAR_YAMASK ], 34: [ Species.RUNERIGUS ]}], - [TimeOfDay.NIGHT]: [{ 1: [ Species.GALAR_YAMASK ], 34: [ Species.RUNERIGUS ]}], - [TimeOfDay.ALL]: [{ 1: [ Species.ARCHEN ], 37: [ Species.ARCHEOPS ]}] + [TimeOfDay.DAY]: [ SpeciesId.ESPEON ], + [TimeOfDay.DUSK]: [{ 1: [ SpeciesId.GALAR_YAMASK ], 34: [ SpeciesId.RUNERIGUS ]}], + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.GALAR_YAMASK ], 34: [ SpeciesId.RUNERIGUS ]}], + [TimeOfDay.ALL]: [{ 1: [ SpeciesId.ARCHEN ], 37: [ SpeciesId.ARCHEOPS ]}] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGISTEEL, Species.FEZANDIPITI ]}, - [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ALAKAZAM, Species.HYPNO, Species.XATU, Species.GRUMPIG, Species.CLAYDOL, Species.SIGILYPH, Species.GOTHITELLE, Species.BEHEEYEM, Species.TINKATON ]}, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ Species.ESPEON ], [TimeOfDay.DUSK]: [ Species.RUNERIGUS ], [TimeOfDay.NIGHT]: [ Species.RUNERIGUS ], [TimeOfDay.ALL]: [ Species.MR_MIME, Species.WOBBUFFET, Species.ARCHEOPS ]}, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGISTEEL, Species.FEZANDIPITI ]}, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KORAIDON ]} + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.REGISTEEL, SpeciesId.FEZANDIPITI ]}, + [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.ALAKAZAM, SpeciesId.HYPNO, SpeciesId.XATU, SpeciesId.GRUMPIG, SpeciesId.CLAYDOL, SpeciesId.SIGILYPH, SpeciesId.GOTHITELLE, SpeciesId.BEHEEYEM, SpeciesId.TINKATON ]}, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ SpeciesId.ESPEON ], [TimeOfDay.DUSK]: [ SpeciesId.RUNERIGUS ], [TimeOfDay.NIGHT]: [ SpeciesId.RUNERIGUS ], [TimeOfDay.ALL]: [ SpeciesId.MR_MIME, SpeciesId.WOBBUFFET, SpeciesId.ARCHEOPS ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.REGISTEEL, SpeciesId.FEZANDIPITI ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.KORAIDON ]} }, - [Biome.WASTELAND]: { + [BiomeId.WASTELAND]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [ - { 1: [ Species.BAGON ], 30: [ Species.SHELGON ], 50: [ Species.SALAMENCE ]}, - { 1: [ Species.GOOMY ], 40: [ Species.SLIGGOO ], 80: [ Species.GOODRA ]}, - { 1: [ Species.JANGMO_O ], 35: [ Species.HAKAMO_O ], 45: [ Species.KOMMO_O ]} + { 1: [ SpeciesId.BAGON ], 30: [ SpeciesId.SHELGON ], 50: [ SpeciesId.SALAMENCE ]}, + { 1: [ SpeciesId.GOOMY ], 40: [ SpeciesId.SLIGGOO ], 80: [ SpeciesId.GOODRA ]}, + { 1: [ SpeciesId.JANGMO_O ], 35: [ SpeciesId.HAKAMO_O ], 45: [ SpeciesId.KOMMO_O ]} ], [TimeOfDay.DAY]: [ - { 1: [ Species.BAGON ], 30: [ Species.SHELGON ], 50: [ Species.SALAMENCE ]}, - { 1: [ Species.GOOMY ], 40: [ Species.SLIGGOO ], 80: [ Species.GOODRA ]}, - { 1: [ Species.JANGMO_O ], 35: [ Species.HAKAMO_O ], 45: [ Species.KOMMO_O ]} + { 1: [ SpeciesId.BAGON ], 30: [ SpeciesId.SHELGON ], 50: [ SpeciesId.SALAMENCE ]}, + { 1: [ SpeciesId.GOOMY ], 40: [ SpeciesId.SLIGGOO ], 80: [ SpeciesId.GOODRA ]}, + { 1: [ SpeciesId.JANGMO_O ], 35: [ SpeciesId.HAKAMO_O ], 45: [ SpeciesId.KOMMO_O ]} ], - [TimeOfDay.DUSK]: [{ 1: [ Species.LARVITAR ], 30: [ Species.PUPITAR ], 55: [ Species.TYRANITAR ]}], - [TimeOfDay.NIGHT]: [{ 1: [ Species.LARVITAR ], 30: [ Species.PUPITAR ], 55: [ Species.TYRANITAR ]}], + [TimeOfDay.DUSK]: [{ 1: [ SpeciesId.LARVITAR ], 30: [ SpeciesId.PUPITAR ], 55: [ SpeciesId.TYRANITAR ]}], + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.LARVITAR ], 30: [ SpeciesId.PUPITAR ], 55: [ SpeciesId.TYRANITAR ]}], [TimeOfDay.ALL]: [ - { 1: [ Species.VIBRAVA ], 45: [ Species.FLYGON ]}, - { 1: [ Species.GIBLE ], 24: [ Species.GABITE ], 48: [ Species.GARCHOMP ]}, - { 1: [ Species.AXEW ], 38: [ Species.FRAXURE ], 48: [ Species.HAXORUS ]} + { 1: [ SpeciesId.VIBRAVA ], 45: [ SpeciesId.FLYGON ]}, + { 1: [ SpeciesId.GIBLE ], 24: [ SpeciesId.GABITE ], 48: [ SpeciesId.GARCHOMP ]}, + { 1: [ SpeciesId.AXEW ], 38: [ SpeciesId.FRAXURE ], 48: [ SpeciesId.HAXORUS ]} ] }, [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], - [TimeOfDay.DUSK]: [{ 1: [ Species.DEINO ], 50: [ Species.ZWEILOUS ], 64: [ Species.HYDREIGON ]}], - [TimeOfDay.NIGHT]: [{ 1: [ Species.DEINO ], 50: [ Species.ZWEILOUS ], 64: [ Species.HYDREIGON ]}], - [TimeOfDay.ALL]: [{ 1: [ Species.SWABLU ], 35: [ Species.ALTARIA ]}, Species.DRAMPA, Species.CYCLIZAR ] + [TimeOfDay.DUSK]: [{ 1: [ SpeciesId.DEINO ], 50: [ SpeciesId.ZWEILOUS ], 64: [ SpeciesId.HYDREIGON ]}], + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.DEINO ], 50: [ SpeciesId.ZWEILOUS ], 64: [ SpeciesId.HYDREIGON ]}], + [TimeOfDay.ALL]: [{ 1: [ SpeciesId.SWABLU ], 35: [ SpeciesId.ALTARIA ]}, SpeciesId.DRAMPA, SpeciesId.CYCLIZAR ] }, [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], - [TimeOfDay.DUSK]: [{ 1: [ Species.DREEPY ], 50: [ Species.DRAKLOAK ], 60: [ Species.DRAGAPULT ]}], - [TimeOfDay.NIGHT]: [{ 1: [ Species.DREEPY ], 50: [ Species.DRAKLOAK ], 60: [ Species.DRAGAPULT ]}], - [TimeOfDay.ALL]: [{ 1: [ Species.DRATINI ], 30: [ Species.DRAGONAIR ], 55: [ Species.DRAGONITE ]}, { 1: [ Species.FRIGIBAX ], 35: [ Species.ARCTIBAX ], 54: [ Species.BAXCALIBUR ]}] + [TimeOfDay.DUSK]: [{ 1: [ SpeciesId.DREEPY ], 50: [ SpeciesId.DRAKLOAK ], 60: [ SpeciesId.DRAGAPULT ]}], + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.DREEPY ], 50: [ SpeciesId.DRAKLOAK ], 60: [ SpeciesId.DRAGAPULT ]}], + [TimeOfDay.ALL]: [{ 1: [ SpeciesId.DRATINI ], 30: [ SpeciesId.DRAGONAIR ], 55: [ SpeciesId.DRAGONITE ]}, { 1: [ SpeciesId.FRIGIBAX ], 35: [ SpeciesId.ARCTIBAX ], 54: [ SpeciesId.BAXCALIBUR ]}] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.AERODACTYL, Species.DRUDDIGON, { 1: [ Species.TYRUNT ], 59: [ Species.TYRANTRUM ]}, Species.DRACOZOLT, Species.DRACOVISH ]}, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIDRAGO ]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.AERODACTYL, SpeciesId.DRUDDIGON, { 1: [ SpeciesId.TYRUNT ], 59: [ SpeciesId.TYRANTRUM ]}, SpeciesId.DRACOZOLT, SpeciesId.DRACOVISH ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.REGIDRAGO ]}, [BiomePoolTier.BOSS]: { - [TimeOfDay.DAWN]: [ Species.SALAMENCE, Species.GOODRA, Species.KOMMO_O ], - [TimeOfDay.DAY]: [ Species.SALAMENCE, Species.GOODRA, Species.KOMMO_O ], - [TimeOfDay.DUSK]: [ Species.TYRANITAR, Species.DRAGAPULT ], - [TimeOfDay.NIGHT]: [ Species.TYRANITAR, Species.DRAGAPULT ], - [TimeOfDay.ALL]: [ Species.DRAGONITE, Species.FLYGON, Species.GARCHOMP, Species.HAXORUS, Species.DRAMPA, Species.BAXCALIBUR ] + [TimeOfDay.DAWN]: [ SpeciesId.SALAMENCE, SpeciesId.GOODRA, SpeciesId.KOMMO_O ], + [TimeOfDay.DAY]: [ SpeciesId.SALAMENCE, SpeciesId.GOODRA, SpeciesId.KOMMO_O ], + [TimeOfDay.DUSK]: [ SpeciesId.TYRANITAR, SpeciesId.DRAGAPULT ], + [TimeOfDay.NIGHT]: [ SpeciesId.TYRANITAR, SpeciesId.DRAGAPULT ], + [TimeOfDay.ALL]: [ SpeciesId.DRAGONITE, SpeciesId.FLYGON, SpeciesId.GARCHOMP, SpeciesId.HAXORUS, SpeciesId.DRAMPA, SpeciesId.BAXCALIBUR ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.AERODACTYL, Species.DRUDDIGON, Species.TYRANTRUM, Species.DRACOZOLT, Species.DRACOVISH ]}, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIDRAGO ]}, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DIALGA ]} + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.AERODACTYL, SpeciesId.DRUDDIGON, SpeciesId.TYRANTRUM, SpeciesId.DRACOZOLT, SpeciesId.DRACOVISH ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.REGIDRAGO ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.DIALGA ]} }, - [Biome.ABYSS]: { + [BiomeId.ABYSS]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - Species.MURKROW, - { 1: [ Species.HOUNDOUR ], 24: [ Species.HOUNDOOM ]}, - Species.SABLEYE, - { 1: [ Species.PURRLOIN ], 20: [ Species.LIEPARD ]}, - { 1: [ Species.PAWNIARD ], 52: [ Species.BISHARP ], 64: [ Species.KINGAMBIT ]}, - { 1: [ Species.NICKIT ], 18: [ Species.THIEVUL ]}, - { 1: [ Species.IMPIDIMP ], 32: [ Species.MORGREM ], 42: [ Species.GRIMMSNARL ]}, - { 1: [ Species.MASCHIFF ], 30: [ Species.MABOSSTIFF ]} + SpeciesId.MURKROW, + { 1: [ SpeciesId.HOUNDOUR ], 24: [ SpeciesId.HOUNDOOM ]}, + SpeciesId.SABLEYE, + { 1: [ SpeciesId.PURRLOIN ], 20: [ SpeciesId.LIEPARD ]}, + { 1: [ SpeciesId.PAWNIARD ], 52: [ SpeciesId.BISHARP ], 64: [ SpeciesId.KINGAMBIT ]}, + { 1: [ SpeciesId.NICKIT ], 18: [ SpeciesId.THIEVUL ]}, + { 1: [ SpeciesId.IMPIDIMP ], 32: [ SpeciesId.MORGREM ], 42: [ SpeciesId.GRIMMSNARL ]}, + { 1: [ SpeciesId.MASCHIFF ], 30: [ SpeciesId.MABOSSTIFF ]} ] }, [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, @@ -1259,55 +1259,55 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.ABSOL, Species.SPIRITOMB, { 1: [ Species.ZORUA ], 30: [ Species.ZOROARK ]}, { 1: [ Species.DEINO ], 50: [ Species.ZWEILOUS ], 64: [ Species.HYDREIGON ]}] + [TimeOfDay.ALL]: [ SpeciesId.ABSOL, SpeciesId.SPIRITOMB, { 1: [ SpeciesId.ZORUA ], 30: [ SpeciesId.ZOROARK ]}, { 1: [ SpeciesId.DEINO ], 50: [ SpeciesId.ZWEILOUS ], 64: [ SpeciesId.HYDREIGON ]}] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.UMBREON ]}, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DARKRAI, Species.GALAR_MOLTRES ]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.UMBREON ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.DARKRAI, SpeciesId.GALAR_MOLTRES ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.HOUNDOOM, Species.SABLEYE, Species.ABSOL, Species.HONCHKROW, Species.SPIRITOMB, Species.LIEPARD, Species.ZOROARK, Species.HYDREIGON, Species.THIEVUL, Species.GRIMMSNARL, Species.MABOSSTIFF, Species.KINGAMBIT ] + [TimeOfDay.ALL]: [ SpeciesId.HOUNDOOM, SpeciesId.SABLEYE, SpeciesId.ABSOL, SpeciesId.HONCHKROW, SpeciesId.SPIRITOMB, SpeciesId.LIEPARD, SpeciesId.ZOROARK, SpeciesId.HYDREIGON, SpeciesId.THIEVUL, SpeciesId.GRIMMSNARL, SpeciesId.MABOSSTIFF, SpeciesId.KINGAMBIT ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.UMBREON, Species.HISUI_SAMUROTT ]}, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DARKRAI ]}, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.PALKIA, Species.YVELTAL, Species.GALAR_MOLTRES ]} + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.UMBREON, SpeciesId.HISUI_SAMUROTT ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.DARKRAI ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.PALKIA, SpeciesId.YVELTAL, SpeciesId.GALAR_MOLTRES ]} }, - [Biome.SPACE]: { + [BiomeId.SPACE]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [], - [TimeOfDay.DAY]: [ Species.SOLROCK ], + [TimeOfDay.DAY]: [ SpeciesId.SOLROCK ], [TimeOfDay.DUSK]: [], - [TimeOfDay.NIGHT]: [ Species.LUNATONE ], - [TimeOfDay.ALL]: [ Species.CLEFAIRY, { 1: [ Species.BRONZOR ], 33: [ Species.BRONZONG ]}, { 1: [ Species.MUNNA ], 30: [ Species.MUSHARNA ]}, Species.MINIOR ] + [TimeOfDay.NIGHT]: [ SpeciesId.LUNATONE ], + [TimeOfDay.ALL]: [ SpeciesId.CLEFAIRY, { 1: [ SpeciesId.BRONZOR ], 33: [ SpeciesId.BRONZONG ]}, { 1: [ SpeciesId.MUNNA ], 30: [ SpeciesId.MUSHARNA ]}, SpeciesId.MINIOR ] }, - [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ Species.BALTOY ], 36: [ Species.CLAYDOL ]}, { 1: [ Species.ELGYEM ], 42: [ Species.BEHEEYEM ]}]}, + [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ SpeciesId.BALTOY ], 36: [ SpeciesId.CLAYDOL ]}, { 1: [ SpeciesId.ELGYEM ], 42: [ SpeciesId.BEHEEYEM ]}]}, [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [{ 1: [ Species.BELDUM ], 20: [ Species.METANG ], 45: [ Species.METAGROSS ]}, Species.SIGILYPH, { 1: [ Species.SOLOSIS ], 32: [ Species.DUOSION ], 41: [ Species.REUNICLUS ]}] + [TimeOfDay.ALL]: [{ 1: [ SpeciesId.BELDUM ], 20: [ SpeciesId.METANG ], 45: [ SpeciesId.METAGROSS ]}, SpeciesId.SIGILYPH, { 1: [ SpeciesId.SOLOSIS ], 32: [ SpeciesId.DUOSION ], 41: [ SpeciesId.REUNICLUS ]}] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ Species.PORYGON ], 30: [ Species.PORYGON2 ]}]}, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ Species.COSMOG ], 43: [ Species.COSMOEM ]}, Species.CELESTEELA ]}, - [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ Species.SOLROCK ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [ Species.LUNATONE ], [TimeOfDay.ALL]: [ Species.CLEFABLE, Species.BRONZONG, Species.MUSHARNA, Species.REUNICLUS, Species.MINIOR ]}, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.METAGROSS, Species.PORYGON_Z ]}, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CELESTEELA ]}, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ Species.SOLGALEO ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [ Species.LUNALA ], [TimeOfDay.ALL]: [ Species.RAYQUAZA, Species.NECROZMA ]} + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ SpeciesId.PORYGON ], 30: [ SpeciesId.PORYGON2 ]}]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ SpeciesId.COSMOG ], 43: [ SpeciesId.COSMOEM ]}, SpeciesId.CELESTEELA ]}, + [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ SpeciesId.SOLROCK ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [ SpeciesId.LUNATONE ], [TimeOfDay.ALL]: [ SpeciesId.CLEFABLE, SpeciesId.BRONZONG, SpeciesId.MUSHARNA, SpeciesId.REUNICLUS, SpeciesId.MINIOR ]}, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.METAGROSS, SpeciesId.PORYGON_Z ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.CELESTEELA ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ SpeciesId.SOLGALEO ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [ SpeciesId.LUNALA ], [TimeOfDay.ALL]: [ SpeciesId.RAYQUAZA, SpeciesId.NECROZMA ]} }, - [Biome.CONSTRUCTION_SITE]: { + [BiomeId.CONSTRUCTION_SITE]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.MACHOP ], 28: [ Species.MACHOKE ]}, - { 1: [ Species.MAGNEMITE ], 30: [ Species.MAGNETON ]}, - { 1: [ Species.DRILBUR ], 31: [ Species.EXCADRILL ]}, - { 1: [ Species.TIMBURR ], 25: [ Species.GURDURR ]} + { 1: [ SpeciesId.MACHOP ], 28: [ SpeciesId.MACHOKE ]}, + { 1: [ SpeciesId.MAGNEMITE ], 30: [ SpeciesId.MAGNETON ]}, + { 1: [ SpeciesId.DRILBUR ], 31: [ SpeciesId.EXCADRILL ]}, + { 1: [ SpeciesId.TIMBURR ], 25: [ SpeciesId.GURDURR ]} ] }, [BiomePoolTier.UNCOMMON]: { @@ -1316,92 +1316,92 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.GRIMER ], 38: [ Species.MUK ]}, - { 1: [ Species.KOFFING ], 35: [ Species.WEEZING ]}, - { 1: [ Species.RHYHORN ], 42: [ Species.RHYDON ]}, - { 1: [ Species.SCRAGGY ], 39: [ Species.SCRAFTY ]} + { 1: [ SpeciesId.GRIMER ], 38: [ SpeciesId.MUK ]}, + { 1: [ SpeciesId.KOFFING ], 35: [ SpeciesId.WEEZING ]}, + { 1: [ SpeciesId.RHYHORN ], 42: [ SpeciesId.RHYDON ]}, + { 1: [ SpeciesId.SCRAGGY ], 39: [ SpeciesId.SCRAFTY ]} ] }, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [{ 1: [ Species.GALAR_MEOWTH ], 28: [ Species.PERRSERKER ]}], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ONIX, Species.HITMONLEE, Species.HITMONCHAN, Species.DURALUDON ]}, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DITTO, Species.HITMONTOP ]}, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.COBALION, Species.STAKATAKA ]}, - [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MACHAMP, Species.CONKELDURR ]}, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.PERRSERKER ], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ARCHALUDON ]}, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.COBALION, Species.STAKATAKA ]}, + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [{ 1: [ SpeciesId.GALAR_MEOWTH ], 28: [ SpeciesId.PERRSERKER ]}], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.ONIX, SpeciesId.HITMONLEE, SpeciesId.HITMONCHAN, SpeciesId.DURALUDON ]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.DITTO, SpeciesId.HITMONTOP ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.COBALION, SpeciesId.STAKATAKA ]}, + [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.MACHAMP, SpeciesId.CONKELDURR ]}, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ SpeciesId.PERRSERKER ], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.ARCHALUDON ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.COBALION, SpeciesId.STAKATAKA ]}, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []} }, - [Biome.JUNGLE]: { + [BiomeId.JUNGLE]: { [BiomePoolTier.COMMON]: { - [TimeOfDay.DAWN]: [ Species.VESPIQUEN, { 1: [ Species.CHERUBI ], 25: [ Species.CHERRIM ]}, { 1: [ Species.SEWADDLE ], 20: [ Species.SWADLOON ], 30: [ Species.LEAVANNY ]}], - [TimeOfDay.DAY]: [ Species.VESPIQUEN, { 1: [ Species.CHERUBI ], 25: [ Species.CHERRIM ]}, { 1: [ Species.SEWADDLE ], 20: [ Species.SWADLOON ], 30: [ Species.LEAVANNY ]}], - [TimeOfDay.DUSK]: [ Species.SHROOMISH, { 1: [ Species.PURRLOIN ], 20: [ Species.LIEPARD ]}, { 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ]}], - [TimeOfDay.NIGHT]: [{ 1: [ Species.SPINARAK ], 22: [ Species.ARIADOS ]}, Species.SHROOMISH, { 1: [ Species.PURRLOIN ], 20: [ Species.LIEPARD ]}, { 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ]}], - [TimeOfDay.ALL]: [ Species.AIPOM, { 1: [ Species.BLITZLE ], 27: [ Species.ZEBSTRIKA ]}, { 1: [ Species.PIKIPEK ], 14: [ Species.TRUMBEAK ], 28: [ Species.TOUCANNON ]}] + [TimeOfDay.DAWN]: [ SpeciesId.VESPIQUEN, { 1: [ SpeciesId.CHERUBI ], 25: [ SpeciesId.CHERRIM ]}, { 1: [ SpeciesId.SEWADDLE ], 20: [ SpeciesId.SWADLOON ], 30: [ SpeciesId.LEAVANNY ]}], + [TimeOfDay.DAY]: [ SpeciesId.VESPIQUEN, { 1: [ SpeciesId.CHERUBI ], 25: [ SpeciesId.CHERRIM ]}, { 1: [ SpeciesId.SEWADDLE ], 20: [ SpeciesId.SWADLOON ], 30: [ SpeciesId.LEAVANNY ]}], + [TimeOfDay.DUSK]: [ SpeciesId.SHROOMISH, { 1: [ SpeciesId.PURRLOIN ], 20: [ SpeciesId.LIEPARD ]}, { 1: [ SpeciesId.FOONGUS ], 39: [ SpeciesId.AMOONGUSS ]}], + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.SPINARAK ], 22: [ SpeciesId.ARIADOS ]}, SpeciesId.SHROOMISH, { 1: [ SpeciesId.PURRLOIN ], 20: [ SpeciesId.LIEPARD ]}, { 1: [ SpeciesId.FOONGUS ], 39: [ SpeciesId.AMOONGUSS ]}], + [TimeOfDay.ALL]: [ SpeciesId.AIPOM, { 1: [ SpeciesId.BLITZLE ], 27: [ SpeciesId.ZEBSTRIKA ]}, { 1: [ SpeciesId.PIKIPEK ], 14: [ SpeciesId.TRUMBEAK ], 28: [ SpeciesId.TOUCANNON ]}] }, [BiomePoolTier.UNCOMMON]: { - [TimeOfDay.DAWN]: [ Species.EXEGGCUTE, Species.TROPIUS, Species.COMBEE, Species.KOMALA ], - [TimeOfDay.DAY]: [ Species.EXEGGCUTE, Species.TROPIUS, Species.COMBEE, Species.KOMALA ], - [TimeOfDay.DUSK]: [ Species.TANGELA, { 1: [ Species.SPINARAK ], 22: [ Species.ARIADOS ]}, { 1: [ Species.PANCHAM ], 52: [ Species.PANGORO ]}], - [TimeOfDay.NIGHT]: [ Species.TANGELA, { 1: [ Species.PANCHAM ], 52: [ Species.PANGORO ]}], + [TimeOfDay.DAWN]: [ SpeciesId.EXEGGCUTE, SpeciesId.TROPIUS, SpeciesId.COMBEE, SpeciesId.KOMALA ], + [TimeOfDay.DAY]: [ SpeciesId.EXEGGCUTE, SpeciesId.TROPIUS, SpeciesId.COMBEE, SpeciesId.KOMALA ], + [TimeOfDay.DUSK]: [ SpeciesId.TANGELA, { 1: [ SpeciesId.SPINARAK ], 22: [ SpeciesId.ARIADOS ]}, { 1: [ SpeciesId.PANCHAM ], 52: [ SpeciesId.PANGORO ]}], + [TimeOfDay.NIGHT]: [ SpeciesId.TANGELA, { 1: [ SpeciesId.PANCHAM ], 52: [ SpeciesId.PANGORO ]}], [TimeOfDay.ALL]: [ - { 1: [ Species.PANSAGE ], 30: [ Species.SIMISAGE ]}, - { 1: [ Species.PANSEAR ], 30: [ Species.SIMISEAR ]}, - { 1: [ Species.PANPOUR ], 30: [ Species.SIMIPOUR ]}, - { 1: [ Species.JOLTIK ], 36: [ Species.GALVANTULA ]}, - { 1: [ Species.LITLEO ], 35: [ Species.PYROAR ]}, - { 1: [ Species.FOMANTIS ], 44: [ Species.LURANTIS ]}, - Species.FALINKS + { 1: [ SpeciesId.PANSAGE ], 30: [ SpeciesId.SIMISAGE ]}, + { 1: [ SpeciesId.PANSEAR ], 30: [ SpeciesId.SIMISEAR ]}, + { 1: [ SpeciesId.PANPOUR ], 30: [ SpeciesId.SIMIPOUR ]}, + { 1: [ SpeciesId.JOLTIK ], 36: [ SpeciesId.GALVANTULA ]}, + { 1: [ SpeciesId.LITLEO ], 35: [ SpeciesId.PYROAR ]}, + { 1: [ SpeciesId.FOMANTIS ], 44: [ SpeciesId.LURANTIS ]}, + SpeciesId.FALINKS ] }, [BiomePoolTier.RARE]: { - [TimeOfDay.DAWN]: [{ 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ]}, Species.PASSIMIAN, { 1: [ Species.GALAR_PONYTA ], 40: [ Species.GALAR_RAPIDASH ]}], - [TimeOfDay.DAY]: [{ 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ]}, Species.PASSIMIAN ], - [TimeOfDay.DUSK]: [ Species.ORANGURU ], - [TimeOfDay.NIGHT]: [ Species.ORANGURU ], + [TimeOfDay.DAWN]: [{ 1: [ SpeciesId.FOONGUS ], 39: [ SpeciesId.AMOONGUSS ]}, SpeciesId.PASSIMIAN, { 1: [ SpeciesId.GALAR_PONYTA ], 40: [ SpeciesId.GALAR_RAPIDASH ]}], + [TimeOfDay.DAY]: [{ 1: [ SpeciesId.FOONGUS ], 39: [ SpeciesId.AMOONGUSS ]}, SpeciesId.PASSIMIAN ], + [TimeOfDay.DUSK]: [ SpeciesId.ORANGURU ], + [TimeOfDay.NIGHT]: [ SpeciesId.ORANGURU ], [TimeOfDay.ALL]: [ - Species.SCYTHER, - Species.YANMA, - { 1: [ Species.SLAKOTH ], 18: [ Species.VIGOROTH ], 36: [ Species.SLAKING ]}, - Species.SEVIPER, - Species.CARNIVINE, - { 1: [ Species.SNIVY ], 17: [ Species.SERVINE ], 36: [ Species.SERPERIOR ]}, - { 1: [ Species.GROOKEY ], 16: [ Species.THWACKEY ], 35: [ Species.RILLABOOM ]} + SpeciesId.SCYTHER, + SpeciesId.YANMA, + { 1: [ SpeciesId.SLAKOTH ], 18: [ SpeciesId.VIGOROTH ], 36: [ SpeciesId.SLAKING ]}, + SpeciesId.SEVIPER, + SpeciesId.CARNIVINE, + { 1: [ SpeciesId.SNIVY ], 17: [ SpeciesId.SERVINE ], 36: [ SpeciesId.SERPERIOR ]}, + { 1: [ SpeciesId.GROOKEY ], 16: [ SpeciesId.THWACKEY ], 35: [ SpeciesId.RILLABOOM ]} ] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KANGASKHAN, Species.CHATOT, Species.KLEAVOR ]}, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TAPU_LELE, Species.BUZZWOLE, Species.ZARUDE, Species.MUNKIDORI ]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.KANGASKHAN, SpeciesId.CHATOT, SpeciesId.KLEAVOR ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.TAPU_LELE, SpeciesId.BUZZWOLE, SpeciesId.ZARUDE, SpeciesId.MUNKIDORI ]}, [BiomePoolTier.BOSS]: { - [TimeOfDay.DAWN]: [ Species.EXEGGUTOR, Species.TROPIUS, Species.CHERRIM, Species.LEAVANNY, Species.KOMALA ], - [TimeOfDay.DAY]: [ Species.EXEGGUTOR, Species.TROPIUS, Species.CHERRIM, Species.LEAVANNY, Species.KOMALA ], - [TimeOfDay.DUSK]: [ Species.BRELOOM, Species.TANGROWTH, Species.AMOONGUSS, Species.PANGORO ], - [TimeOfDay.NIGHT]: [ Species.BRELOOM, Species.TANGROWTH, Species.AMOONGUSS, Species.PANGORO ], - [TimeOfDay.ALL]: [ Species.SEVIPER, Species.AMBIPOM, Species.CARNIVINE, Species.YANMEGA, Species.GALVANTULA, Species.PYROAR, Species.TOUCANNON, Species.LURANTIS, Species.FALINKS ] + [TimeOfDay.DAWN]: [ SpeciesId.EXEGGUTOR, SpeciesId.TROPIUS, SpeciesId.CHERRIM, SpeciesId.LEAVANNY, SpeciesId.KOMALA ], + [TimeOfDay.DAY]: [ SpeciesId.EXEGGUTOR, SpeciesId.TROPIUS, SpeciesId.CHERRIM, SpeciesId.LEAVANNY, SpeciesId.KOMALA ], + [TimeOfDay.DUSK]: [ SpeciesId.BRELOOM, SpeciesId.TANGROWTH, SpeciesId.AMOONGUSS, SpeciesId.PANGORO ], + [TimeOfDay.NIGHT]: [ SpeciesId.BRELOOM, SpeciesId.TANGROWTH, SpeciesId.AMOONGUSS, SpeciesId.PANGORO ], + [TimeOfDay.ALL]: [ SpeciesId.SEVIPER, SpeciesId.AMBIPOM, SpeciesId.CARNIVINE, SpeciesId.YANMEGA, SpeciesId.GALVANTULA, SpeciesId.PYROAR, SpeciesId.TOUCANNON, SpeciesId.LURANTIS, SpeciesId.FALINKS ] }, [BiomePoolTier.BOSS_RARE]: { - [TimeOfDay.DAWN]: [ Species.AMOONGUSS, Species.GALAR_RAPIDASH ], - [TimeOfDay.DAY]: [ Species.AMOONGUSS ], + [TimeOfDay.DAWN]: [ SpeciesId.AMOONGUSS, SpeciesId.GALAR_RAPIDASH ], + [TimeOfDay.DAY]: [ SpeciesId.AMOONGUSS ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.KANGASKHAN, Species.SCIZOR, Species.SLAKING, Species.LEAFEON, Species.SERPERIOR, Species.RILLABOOM ] + [TimeOfDay.ALL]: [ SpeciesId.KANGASKHAN, SpeciesId.SCIZOR, SpeciesId.SLAKING, SpeciesId.LEAFEON, SpeciesId.SERPERIOR, SpeciesId.RILLABOOM ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TAPU_LELE, Species.BUZZWOLE, Species.ZARUDE, Species.MUNKIDORI ]}, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KLEAVOR ]} + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.TAPU_LELE, SpeciesId.BUZZWOLE, SpeciesId.ZARUDE, SpeciesId.MUNKIDORI ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.KLEAVOR ]} }, - [Biome.FAIRY_CAVE]: { + [BiomeId.FAIRY_CAVE]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.JIGGLYPUFF ], 30: [ Species.WIGGLYTUFF ]}, - { 1: [ Species.MARILL ], 18: [ Species.AZUMARILL ]}, - Species.MAWILE, - { 1: [ Species.SPRITZEE ], 40: [ Species.AROMATISSE ]}, - { 1: [ Species.SWIRLIX ], 40: [ Species.SLURPUFF ]}, - { 1: [ Species.CUTIEFLY ], 25: [ Species.RIBOMBEE ]}, - { 1: [ Species.MORELULL ], 24: [ Species.SHIINOTIC ]}, - { 1: [ Species.MILCERY ], 30: [ Species.ALCREMIE ]} + { 1: [ SpeciesId.JIGGLYPUFF ], 30: [ SpeciesId.WIGGLYTUFF ]}, + { 1: [ SpeciesId.MARILL ], 18: [ SpeciesId.AZUMARILL ]}, + SpeciesId.MAWILE, + { 1: [ SpeciesId.SPRITZEE ], 40: [ SpeciesId.AROMATISSE ]}, + { 1: [ SpeciesId.SWIRLIX ], 40: [ SpeciesId.SLURPUFF ]}, + { 1: [ SpeciesId.CUTIEFLY ], 25: [ SpeciesId.RIBOMBEE ]}, + { 1: [ SpeciesId.MORELULL ], 24: [ SpeciesId.SHIINOTIC ]}, + { 1: [ SpeciesId.MILCERY ], 30: [ SpeciesId.ALCREMIE ]} ] }, [BiomePoolTier.UNCOMMON]: { @@ -1410,41 +1410,41 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - Species.CLEFAIRY, - Species.TOGETIC, - { 1: [ Species.RALTS ], 20: [ Species.KIRLIA ], 30: [ Species.GARDEVOIR ]}, - Species.CARBINK, - Species.COMFEY, - { 1: [ Species.HATENNA ], 32: [ Species.HATTREM ], 42: [ Species.HATTERENE ]} + SpeciesId.CLEFAIRY, + SpeciesId.TOGETIC, + { 1: [ SpeciesId.RALTS ], 20: [ SpeciesId.KIRLIA ], 30: [ SpeciesId.GARDEVOIR ]}, + SpeciesId.CARBINK, + SpeciesId.COMFEY, + { 1: [ SpeciesId.HATENNA ], 32: [ SpeciesId.HATTREM ], 42: [ SpeciesId.HATTERENE ]} ] }, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.AUDINO, Species.ETERNAL_FLOETTE ]}, + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.AUDINO, SpeciesId.ETERNAL_FLOETTE ]}, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DIANCIE, Species.ENAMORUS ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.DIANCIE, SpeciesId.ENAMORUS ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.WIGGLYTUFF, Species.MAWILE, Species.TOGEKISS, Species.AUDINO, Species.AROMATISSE, Species.SLURPUFF, Species.CARBINK, Species.RIBOMBEE, Species.SHIINOTIC, Species.COMFEY, Species.HATTERENE, Species.ALCREMIE ] + [TimeOfDay.ALL]: [ SpeciesId.WIGGLYTUFF, SpeciesId.MAWILE, SpeciesId.TOGEKISS, SpeciesId.AUDINO, SpeciesId.AROMATISSE, SpeciesId.SLURPUFF, SpeciesId.CARBINK, SpeciesId.RIBOMBEE, SpeciesId.SHIINOTIC, SpeciesId.COMFEY, SpeciesId.HATTERENE, SpeciesId.ALCREMIE ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ETERNAL_FLOETTE ]}, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DIANCIE, Species.ENAMORUS ]}, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.XERNEAS ]} + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.ETERNAL_FLOETTE ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.DIANCIE, SpeciesId.ENAMORUS ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.XERNEAS ]} }, - [Biome.TEMPLE]: { + [BiomeId.TEMPLE]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.GASTLY ], 25: [ Species.HAUNTER ]}, - { 1: [ Species.NATU ], 25: [ Species.XATU ]}, - { 1: [ Species.DUSKULL ], 37: [ Species.DUSCLOPS ]}, - { 1: [ Species.YAMASK ], 34: [ Species.COFAGRIGUS ]}, - { 1: [ Species.GOLETT ], 43: [ Species.GOLURK ]}, - { 1: [ Species.HONEDGE ], 35: [ Species.DOUBLADE ]} + { 1: [ SpeciesId.GASTLY ], 25: [ SpeciesId.HAUNTER ]}, + { 1: [ SpeciesId.NATU ], 25: [ SpeciesId.XATU ]}, + { 1: [ SpeciesId.DUSKULL ], 37: [ SpeciesId.DUSCLOPS ]}, + { 1: [ SpeciesId.YAMASK ], 34: [ SpeciesId.COFAGRIGUS ]}, + { 1: [ SpeciesId.GOLETT ], 43: [ SpeciesId.GOLURK ]}, + { 1: [ SpeciesId.HONEDGE ], 35: [ SpeciesId.DOUBLADE ]} ] }, [BiomePoolTier.UNCOMMON]: { @@ -1453,181 +1453,181 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.CUBONE ], 28: [ Species.MAROWAK ]}, - { 1: [ Species.BALTOY ], 36: [ Species.CLAYDOL ]}, - { 1: [ Species.CHINGLING ], 20: [ Species.CHIMECHO ]}, - { 1: [ Species.SKORUPI ], 40: [ Species.DRAPION ]}, - { 1: [ Species.LITWICK ], 41: [ Species.LAMPENT ]} + { 1: [ SpeciesId.CUBONE ], 28: [ SpeciesId.MAROWAK ]}, + { 1: [ SpeciesId.BALTOY ], 36: [ SpeciesId.CLAYDOL ]}, + { 1: [ SpeciesId.CHINGLING ], 20: [ SpeciesId.CHIMECHO ]}, + { 1: [ SpeciesId.SKORUPI ], 40: [ SpeciesId.DRAPION ]}, + { 1: [ SpeciesId.LITWICK ], 41: [ SpeciesId.LAMPENT ]} ] }, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ Species.GIMMIGHOUL ], 40: [ Species.GHOLDENGO ]}]}, + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ SpeciesId.GIMMIGHOUL ], 40: [ SpeciesId.GHOLDENGO ]}]}, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HOOPA, Species.TAPU_KOKO ]}, - [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CHIMECHO, Species.COFAGRIGUS, Species.GOLURK, Species.AEGISLASH ]}, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GHOLDENGO ]}, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HOOPA, Species.TAPU_KOKO ]}, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIGIGAS ]} + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.HOOPA, SpeciesId.TAPU_KOKO ]}, + [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.CHIMECHO, SpeciesId.COFAGRIGUS, SpeciesId.GOLURK, SpeciesId.AEGISLASH ]}, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.GHOLDENGO ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.HOOPA, SpeciesId.TAPU_KOKO ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.REGIGIGAS ]} }, - [Biome.SLUM]: { + [BiomeId.SLUM]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], - [TimeOfDay.DUSK]: [{ 1: [ Species.PATRAT ], 20: [ Species.WATCHOG ]}], - [TimeOfDay.NIGHT]: [{ 1: [ Species.PATRAT ], 20: [ Species.WATCHOG ]}], + [TimeOfDay.DUSK]: [{ 1: [ SpeciesId.PATRAT ], 20: [ SpeciesId.WATCHOG ]}], + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.PATRAT ], 20: [ SpeciesId.WATCHOG ]}], [TimeOfDay.ALL]: [ - { 1: [ Species.RATTATA ], 20: [ Species.RATICATE ]}, - { 1: [ Species.GRIMER ], 38: [ Species.MUK ]}, - { 1: [ Species.KOFFING ], 35: [ Species.WEEZING ]}, - { 1: [ Species.TRUBBISH ], 36: [ Species.GARBODOR ]} + { 1: [ SpeciesId.RATTATA ], 20: [ SpeciesId.RATICATE ]}, + { 1: [ SpeciesId.GRIMER ], 38: [ SpeciesId.MUK ]}, + { 1: [ SpeciesId.KOFFING ], 35: [ SpeciesId.WEEZING ]}, + { 1: [ SpeciesId.TRUBBISH ], 36: [ SpeciesId.GARBODOR ]} ] }, [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], - [TimeOfDay.DUSK]: [{ 1: [ Species.STUNKY ], 34: [ Species.SKUNTANK ]}], - [TimeOfDay.NIGHT]: [{ 1: [ Species.STUNKY ], 34: [ Species.SKUNTANK ]}], - [TimeOfDay.ALL]: [{ 1: [ Species.BURMY ], 20: [ Species.WORMADAM ]}] + [TimeOfDay.DUSK]: [{ 1: [ SpeciesId.STUNKY ], 34: [ SpeciesId.SKUNTANK ]}], + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.STUNKY ], 34: [ SpeciesId.SKUNTANK ]}], + [TimeOfDay.ALL]: [{ 1: [ SpeciesId.BURMY ], 20: [ SpeciesId.WORMADAM ]}] }, [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], - [TimeOfDay.DUSK]: [ Species.TOXTRICITY, { 1: [ Species.GALAR_LINOONE ], 65: [ Species.OBSTAGOON ]}, Species.GALAR_ZIGZAGOON ], - [TimeOfDay.NIGHT]: [ Species.TOXTRICITY, { 1: [ Species.GALAR_LINOONE ], 65: [ Species.OBSTAGOON ]}, Species.GALAR_ZIGZAGOON ], - [TimeOfDay.ALL]: [{ 1: [ Species.VAROOM ], 40: [ Species.REVAVROOM ]}] + [TimeOfDay.DUSK]: [ SpeciesId.TOXTRICITY, { 1: [ SpeciesId.GALAR_LINOONE ], 65: [ SpeciesId.OBSTAGOON ]}, SpeciesId.GALAR_ZIGZAGOON ], + [TimeOfDay.NIGHT]: [ SpeciesId.TOXTRICITY, { 1: [ SpeciesId.GALAR_LINOONE ], 65: [ SpeciesId.OBSTAGOON ]}, SpeciesId.GALAR_ZIGZAGOON ], + [TimeOfDay.ALL]: [{ 1: [ SpeciesId.VAROOM ], 40: [ SpeciesId.REVAVROOM ]}] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GUZZLORD ]}, - [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.SKUNTANK, Species.WATCHOG ], [TimeOfDay.NIGHT]: [ Species.SKUNTANK, Species.WATCHOG ], [TimeOfDay.ALL]: [ Species.MUK, Species.WEEZING, Species.WORMADAM, Species.GARBODOR ]}, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.TOXTRICITY, Species.OBSTAGOON ], [TimeOfDay.NIGHT]: [ Species.TOXTRICITY, Species.OBSTAGOON ], [TimeOfDay.ALL]: [ Species.REVAVROOM, Species.GALAR_WEEZING ]}, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GUZZLORD ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.GUZZLORD ]}, + [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ SpeciesId.SKUNTANK, SpeciesId.WATCHOG ], [TimeOfDay.NIGHT]: [ SpeciesId.SKUNTANK, SpeciesId.WATCHOG ], [TimeOfDay.ALL]: [ SpeciesId.MUK, SpeciesId.WEEZING, SpeciesId.WORMADAM, SpeciesId.GARBODOR ]}, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ SpeciesId.TOXTRICITY, SpeciesId.OBSTAGOON ], [TimeOfDay.NIGHT]: [ SpeciesId.TOXTRICITY, SpeciesId.OBSTAGOON ], [TimeOfDay.ALL]: [ SpeciesId.REVAVROOM, SpeciesId.GALAR_WEEZING ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.GUZZLORD ]}, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []} }, - [Biome.SNOWY_FOREST]: { + [BiomeId.SNOWY_FOREST]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], - [TimeOfDay.DUSK]: [ Species.SNEASEL, { 1: [ Species.TEDDIURSA ], 30: [ Species.URSARING ]}, { 1: [ Species.SNOM ], 20: [ Species.FROSMOTH ]}], - [TimeOfDay.NIGHT]: [ Species.SNEASEL, { 1: [ Species.TEDDIURSA ], 30: [ Species.URSARING ]}, { 1: [ Species.SNOM ], 20: [ Species.FROSMOTH ]}], - [TimeOfDay.ALL]: [{ 1: [ Species.SWINUB ], 33: [ Species.PILOSWINE ]}, { 1: [ Species.SNOVER ], 40: [ Species.ABOMASNOW ]}, Species.EISCUE ] + [TimeOfDay.DUSK]: [ SpeciesId.SNEASEL, { 1: [ SpeciesId.TEDDIURSA ], 30: [ SpeciesId.URSARING ]}, { 1: [ SpeciesId.SNOM ], 20: [ SpeciesId.FROSMOTH ]}], + [TimeOfDay.NIGHT]: [ SpeciesId.SNEASEL, { 1: [ SpeciesId.TEDDIURSA ], 30: [ SpeciesId.URSARING ]}, { 1: [ SpeciesId.SNOM ], 20: [ SpeciesId.FROSMOTH ]}], + [TimeOfDay.ALL]: [{ 1: [ SpeciesId.SWINUB ], 33: [ SpeciesId.PILOSWINE ]}, { 1: [ SpeciesId.SNOVER ], 40: [ SpeciesId.ABOMASNOW ]}, SpeciesId.EISCUE ] }, [BiomePoolTier.UNCOMMON]: { - [TimeOfDay.DAWN]: [ Species.SNEASEL, { 1: [ Species.TEDDIURSA ], 30: [ Species.URSARING ]}, Species.STANTLER ], - [TimeOfDay.DAY]: [ Species.SNEASEL, { 1: [ Species.TEDDIURSA ], 30: [ Species.URSARING ]}, Species.STANTLER ], + [TimeOfDay.DAWN]: [ SpeciesId.SNEASEL, { 1: [ SpeciesId.TEDDIURSA ], 30: [ SpeciesId.URSARING ]}, SpeciesId.STANTLER ], + [TimeOfDay.DAY]: [ SpeciesId.SNEASEL, { 1: [ SpeciesId.TEDDIURSA ], 30: [ SpeciesId.URSARING ]}, SpeciesId.STANTLER ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, [BiomePoolTier.RARE]: { - [TimeOfDay.DAWN]: [{ 1: [ Species.GALAR_DARUMAKA ], 30: [ Species.GALAR_DARMANITAN ]}], - [TimeOfDay.DAY]: [{ 1: [ Species.GALAR_DARUMAKA ], 30: [ Species.GALAR_DARMANITAN ]}], + [TimeOfDay.DAWN]: [{ 1: [ SpeciesId.GALAR_DARUMAKA ], 30: [ SpeciesId.GALAR_DARMANITAN ]}], + [TimeOfDay.DAY]: [{ 1: [ SpeciesId.GALAR_DARUMAKA ], 30: [ SpeciesId.GALAR_DARMANITAN ]}], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.DELIBIRD, { 1: [ Species.ALOLA_SANDSHREW ], 30: [ Species.ALOLA_SANDSLASH ]}, { 1: [ Species.ALOLA_VULPIX ], 30: [ Species.ALOLA_NINETALES ]}] + [TimeOfDay.ALL]: [ SpeciesId.DELIBIRD, { 1: [ SpeciesId.ALOLA_SANDSHREW ], 30: [ SpeciesId.ALOLA_SANDSLASH ]}, { 1: [ SpeciesId.ALOLA_VULPIX ], 30: [ SpeciesId.ALOLA_NINETALES ]}] }, [BiomePoolTier.SUPER_RARE]: { - [TimeOfDay.DAWN]: [ Species.HISUI_SNEASEL ], - [TimeOfDay.DAY]: [ Species.HISUI_SNEASEL ], - [TimeOfDay.DUSK]: [{ 1: [ Species.HISUI_ZORUA ], 30: [ Species.HISUI_ZOROARK ]}], - [TimeOfDay.NIGHT]: [{ 1: [ Species.HISUI_ZORUA ], 30: [ Species.HISUI_ZOROARK ]}], - [TimeOfDay.ALL]: [{ 1: [ Species.GALAR_MR_MIME ], 42: [ Species.MR_RIME ]}, Species.ARCTOZOLT, Species.HISUI_AVALUGG ] + [TimeOfDay.DAWN]: [ SpeciesId.HISUI_SNEASEL ], + [TimeOfDay.DAY]: [ SpeciesId.HISUI_SNEASEL ], + [TimeOfDay.DUSK]: [{ 1: [ SpeciesId.HISUI_ZORUA ], 30: [ SpeciesId.HISUI_ZOROARK ]}], + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.HISUI_ZORUA ], 30: [ SpeciesId.HISUI_ZOROARK ]}], + [TimeOfDay.ALL]: [{ 1: [ SpeciesId.GALAR_MR_MIME ], 42: [ SpeciesId.MR_RIME ]}, SpeciesId.ARCTOZOLT, SpeciesId.HISUI_AVALUGG ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GLASTRIER, Species.CHIEN_PAO, Species.GALAR_ARTICUNO ]}, - [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.WYRDEER ], [TimeOfDay.DAY]: [ Species.WYRDEER ], [TimeOfDay.DUSK]: [ Species.FROSMOTH ], [TimeOfDay.NIGHT]: [ Species.FROSMOTH ], [TimeOfDay.ALL]: [ Species.ABOMASNOW, Species.URSALUNA ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.GLASTRIER, SpeciesId.CHIEN_PAO, SpeciesId.GALAR_ARTICUNO ]}, + [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ SpeciesId.WYRDEER ], [TimeOfDay.DAY]: [ SpeciesId.WYRDEER ], [TimeOfDay.DUSK]: [ SpeciesId.FROSMOTH ], [TimeOfDay.NIGHT]: [ SpeciesId.FROSMOTH ], [TimeOfDay.ALL]: [ SpeciesId.ABOMASNOW, SpeciesId.URSALUNA ]}, [BiomePoolTier.BOSS_RARE]: { - [TimeOfDay.DAWN]: [ Species.SNEASLER, Species.GALAR_DARMANITAN ], - [TimeOfDay.DAY]: [ Species.SNEASLER, Species.GALAR_DARMANITAN ], - [TimeOfDay.DUSK]: [ Species.HISUI_ZOROARK ], - [TimeOfDay.NIGHT]: [ Species.HISUI_ZOROARK ], - [TimeOfDay.ALL]: [ Species.MR_RIME, Species.ARCTOZOLT, Species.ALOLA_SANDSLASH, Species.ALOLA_NINETALES ] + [TimeOfDay.DAWN]: [ SpeciesId.SNEASLER, SpeciesId.GALAR_DARMANITAN ], + [TimeOfDay.DAY]: [ SpeciesId.SNEASLER, SpeciesId.GALAR_DARMANITAN ], + [TimeOfDay.DUSK]: [ SpeciesId.HISUI_ZOROARK ], + [TimeOfDay.NIGHT]: [ SpeciesId.HISUI_ZOROARK ], + [TimeOfDay.ALL]: [ SpeciesId.MR_RIME, SpeciesId.ARCTOZOLT, SpeciesId.ALOLA_SANDSLASH, SpeciesId.ALOLA_NINETALES ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GLASTRIER, Species.CHIEN_PAO ]}, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZACIAN, Species.GALAR_ARTICUNO ]} + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.GLASTRIER, SpeciesId.CHIEN_PAO ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.ZACIAN, SpeciesId.GALAR_ARTICUNO ]} }, - [Biome.ISLAND]: { + [BiomeId.ISLAND]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], - [TimeOfDay.DUSK]: [{ 1: [ Species.ALOLA_RATTATA ], 30: [ Species.ALOLA_RATICATE ]}, { 1: [ Species.ALOLA_MEOWTH ], 30: [ Species.ALOLA_PERSIAN ]}], - [TimeOfDay.NIGHT]: [{ 1: [ Species.ALOLA_RATTATA ], 30: [ Species.ALOLA_RATICATE ]}, { 1: [ Species.ALOLA_MEOWTH ], 30: [ Species.ALOLA_PERSIAN ]}], + [TimeOfDay.DUSK]: [{ 1: [ SpeciesId.ALOLA_RATTATA ], 30: [ SpeciesId.ALOLA_RATICATE ]}, { 1: [ SpeciesId.ALOLA_MEOWTH ], 30: [ SpeciesId.ALOLA_PERSIAN ]}], + [TimeOfDay.NIGHT]: [{ 1: [ SpeciesId.ALOLA_RATTATA ], 30: [ SpeciesId.ALOLA_RATICATE ]}, { 1: [ SpeciesId.ALOLA_MEOWTH ], 30: [ SpeciesId.ALOLA_PERSIAN ]}], [TimeOfDay.ALL]: [ - Species.ORICORIO, - { 1: [ Species.ALOLA_SANDSHREW ], 30: [ Species.ALOLA_SANDSLASH ]}, - { 1: [ Species.ALOLA_VULPIX ], 30: [ Species.ALOLA_NINETALES ]}, - { 1: [ Species.ALOLA_DIGLETT ], 26: [ Species.ALOLA_DUGTRIO ]}, - { 1: [ Species.ALOLA_GEODUDE ], 25: [ Species.ALOLA_GRAVELER ], 40: [ Species.ALOLA_GOLEM ]}, - { 1: [ Species.ALOLA_GRIMER ], 38: [ Species.ALOLA_MUK ]} + SpeciesId.ORICORIO, + { 1: [ SpeciesId.ALOLA_SANDSHREW ], 30: [ SpeciesId.ALOLA_SANDSLASH ]}, + { 1: [ SpeciesId.ALOLA_VULPIX ], 30: [ SpeciesId.ALOLA_NINETALES ]}, + { 1: [ SpeciesId.ALOLA_DIGLETT ], 26: [ SpeciesId.ALOLA_DUGTRIO ]}, + { 1: [ SpeciesId.ALOLA_GEODUDE ], 25: [ SpeciesId.ALOLA_GRAVELER ], 40: [ SpeciesId.ALOLA_GOLEM ]}, + { 1: [ SpeciesId.ALOLA_GRIMER ], 38: [ SpeciesId.ALOLA_MUK ]} ] }, [BiomePoolTier.UNCOMMON]: { - [TimeOfDay.DAWN]: [ Species.ALOLA_RAICHU, Species.ALOLA_EXEGGUTOR ], - [TimeOfDay.DAY]: [ Species.ALOLA_RAICHU, Species.ALOLA_EXEGGUTOR ], - [TimeOfDay.DUSK]: [ Species.ALOLA_MAROWAK ], - [TimeOfDay.NIGHT]: [ Species.ALOLA_MAROWAK ], - [TimeOfDay.ALL]: [ Species.BRUXISH ] + [TimeOfDay.DAWN]: [ SpeciesId.ALOLA_RAICHU, SpeciesId.ALOLA_EXEGGUTOR ], + [TimeOfDay.DAY]: [ SpeciesId.ALOLA_RAICHU, SpeciesId.ALOLA_EXEGGUTOR ], + [TimeOfDay.DUSK]: [ SpeciesId.ALOLA_MAROWAK ], + [TimeOfDay.NIGHT]: [ SpeciesId.ALOLA_MAROWAK ], + [TimeOfDay.ALL]: [ SpeciesId.BRUXISH ] }, [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLACEPHALON ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.BLACEPHALON ]}, [BiomePoolTier.BOSS]: { - [TimeOfDay.DAWN]: [ Species.ALOLA_RAICHU, Species.ALOLA_EXEGGUTOR ], - [TimeOfDay.DAY]: [ Species.ALOLA_RAICHU, Species.ALOLA_EXEGGUTOR ], - [TimeOfDay.DUSK]: [ Species.ALOLA_RATICATE, Species.ALOLA_PERSIAN, Species.ALOLA_MAROWAK ], - [TimeOfDay.NIGHT]: [ Species.ALOLA_RATICATE, Species.ALOLA_PERSIAN, Species.ALOLA_MAROWAK ], - [TimeOfDay.ALL]: [ Species.ORICORIO, Species.BRUXISH, Species.ALOLA_SANDSLASH, Species.ALOLA_NINETALES, Species.ALOLA_DUGTRIO, Species.ALOLA_GOLEM, Species.ALOLA_MUK ] + [TimeOfDay.DAWN]: [ SpeciesId.ALOLA_RAICHU, SpeciesId.ALOLA_EXEGGUTOR ], + [TimeOfDay.DAY]: [ SpeciesId.ALOLA_RAICHU, SpeciesId.ALOLA_EXEGGUTOR ], + [TimeOfDay.DUSK]: [ SpeciesId.ALOLA_RATICATE, SpeciesId.ALOLA_PERSIAN, SpeciesId.ALOLA_MAROWAK ], + [TimeOfDay.NIGHT]: [ SpeciesId.ALOLA_RATICATE, SpeciesId.ALOLA_PERSIAN, SpeciesId.ALOLA_MAROWAK ], + [TimeOfDay.ALL]: [ SpeciesId.ORICORIO, SpeciesId.BRUXISH, SpeciesId.ALOLA_SANDSLASH, SpeciesId.ALOLA_NINETALES, SpeciesId.ALOLA_DUGTRIO, SpeciesId.ALOLA_GOLEM, SpeciesId.ALOLA_MUK ] }, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLACEPHALON ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.BLACEPHALON ]}, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []} }, - [Biome.LABORATORY]: { + [BiomeId.LABORATORY]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.MAGNEMITE ], 30: [ Species.MAGNETON ]}, - { 1: [ Species.GRIMER ], 38: [ Species.MUK ]}, - { 1: [ Species.VOLTORB ], 30: [ Species.ELECTRODE ]}, - { 1: [ Species.BRONZOR ], 33: [ Species.BRONZONG ]}, - { 1: [ Species.KLINK ], 38: [ Species.KLANG ], 49: [ Species.KLINKLANG ]} + { 1: [ SpeciesId.MAGNEMITE ], 30: [ SpeciesId.MAGNETON ]}, + { 1: [ SpeciesId.GRIMER ], 38: [ SpeciesId.MUK ]}, + { 1: [ SpeciesId.VOLTORB ], 30: [ SpeciesId.ELECTRODE ]}, + { 1: [ SpeciesId.BRONZOR ], 33: [ SpeciesId.BRONZONG ]}, + { 1: [ SpeciesId.KLINK ], 38: [ SpeciesId.KLANG ], 49: [ SpeciesId.KLINKLANG ]} ] }, - [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ Species.SOLOSIS ], 32: [ Species.DUOSION ], 41: [ Species.REUNICLUS ]}]}, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DITTO, { 1: [ Species.PORYGON ], 30: [ Species.PORYGON2 ]}]}, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ROTOM ]}, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TYPE_NULL ]}, - [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MUK, Species.ELECTRODE, Species.BRONZONG, Species.MAGNEZONE, Species.PORYGON_Z, Species.REUNICLUS, Species.KLINKLANG ]}, + [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ SpeciesId.SOLOSIS ], 32: [ SpeciesId.DUOSION ], 41: [ SpeciesId.REUNICLUS ]}]}, + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.DITTO, { 1: [ SpeciesId.PORYGON ], 30: [ SpeciesId.PORYGON2 ]}]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.ROTOM ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.TYPE_NULL ]}, + [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.MUK, SpeciesId.ELECTRODE, SpeciesId.BRONZONG, SpeciesId.MAGNEZONE, SpeciesId.PORYGON_Z, SpeciesId.REUNICLUS, SpeciesId.KLINKLANG ]}, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ROTOM, Species.ZYGARDE, Species.SILVALLY ]}, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MEWTWO, Species.MIRAIDON ]} + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.ROTOM, SpeciesId.ZYGARDE, SpeciesId.SILVALLY ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.MEWTWO, SpeciesId.MIRAIDON ]} }, - [Biome.END]: { + [BiomeId.END]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.BRUTE_BONNET, - Species.FLUTTER_MANE, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_BUNDLE, - Species.IRON_HANDS, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.IRON_THORNS + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.BRUTE_BONNET, + SpeciesId.FLUTTER_MANE, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_THORNS ] }, - [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ROARING_MOON, Species.IRON_VALIANT ]}, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.WALKING_WAKE, Species.IRON_LEAVES, Species.GOUGING_FIRE, Species.RAGING_BOLT, Species.IRON_BOULDER, Species.IRON_CROWN ]}, + [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.ROARING_MOON, SpeciesId.IRON_VALIANT ]}, + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.WALKING_WAKE, SpeciesId.IRON_LEAVES, SpeciesId.GOUGING_FIRE, SpeciesId.RAGING_BOLT, SpeciesId.IRON_BOULDER, SpeciesId.IRON_CROWN ]}, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, - [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ETERNATUS ]}, + [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ SpeciesId.ETERNATUS ]}, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []} @@ -1635,7 +1635,7 @@ export const biomePokemonPools: BiomePokemonPools = { }; export const biomeTrainerPools: BiomeTrainerPools = { - [Biome.TOWN]: { + [BiomeId.TOWN]: { [BiomePoolTier.COMMON]: [ TrainerType.YOUNGSTER ], [BiomePoolTier.UNCOMMON]: [], [BiomePoolTier.RARE]: [], @@ -1646,7 +1646,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.PLAINS]: { + [BiomeId.PLAINS]: { [BiomePoolTier.COMMON]: [ TrainerType.BREEDER, TrainerType.TWINS ], [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER, TrainerType.CYCLIST ], [BiomePoolTier.RARE]: [ TrainerType.BLACK_BELT ], @@ -1657,7 +1657,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.GRASS]: { + [BiomeId.GRASS]: { [BiomePoolTier.COMMON]: [ TrainerType.BREEDER, TrainerType.SCHOOL_KID ], [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER, TrainerType.POKEFAN ], [BiomePoolTier.RARE]: [ TrainerType.BLACK_BELT ], @@ -1668,7 +1668,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.TALL_GRASS]: { + [BiomeId.TALL_GRASS]: { [BiomePoolTier.COMMON]: [], [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER, TrainerType.BREEDER, TrainerType.RANGER ], [BiomePoolTier.RARE]: [], @@ -1679,7 +1679,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.METROPOLIS]: { + [BiomeId.METROPOLIS]: { [BiomePoolTier.COMMON]: [ TrainerType.BEAUTY, TrainerType.CLERK, TrainerType.CYCLIST, TrainerType.OFFICER, TrainerType.WAITER ], [BiomePoolTier.UNCOMMON]: [ TrainerType.BREEDER, TrainerType.DEPOT_AGENT, TrainerType.GUITARIST ], [BiomePoolTier.RARE]: [ TrainerType.ARTIST, TrainerType.RICH_KID ], @@ -1690,7 +1690,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.FOREST]: { + [BiomeId.FOREST]: { [BiomePoolTier.COMMON]: [ TrainerType.RANGER ], [BiomePoolTier.UNCOMMON]: [], [BiomePoolTier.RARE]: [], @@ -1701,7 +1701,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.SEA]: { + [BiomeId.SEA]: { [BiomePoolTier.COMMON]: [ TrainerType.SAILOR, TrainerType.SWIMMER ], [BiomePoolTier.UNCOMMON]: [], [BiomePoolTier.RARE]: [], @@ -1712,7 +1712,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.SWAMP]: { + [BiomeId.SWAMP]: { [BiomePoolTier.COMMON]: [ TrainerType.PARASOL_LADY ], [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER ], [BiomePoolTier.RARE]: [ TrainerType.BLACK_BELT ], @@ -1723,7 +1723,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.BEACH]: { + [BiomeId.BEACH]: { [BiomePoolTier.COMMON]: [ TrainerType.FISHERMAN, TrainerType.SAILOR ], [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER, TrainerType.BREEDER ], [BiomePoolTier.RARE]: [ TrainerType.BLACK_BELT ], @@ -1734,7 +1734,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.LAKE]: { + [BiomeId.LAKE]: { [BiomePoolTier.COMMON]: [ TrainerType.BREEDER, TrainerType.FISHERMAN, TrainerType.PARASOL_LADY ], [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER ], [BiomePoolTier.RARE]: [ TrainerType.BLACK_BELT ], @@ -1745,7 +1745,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.SEABED]: { + [BiomeId.SEABED]: { [BiomePoolTier.COMMON]: [], [BiomePoolTier.UNCOMMON]: [], [BiomePoolTier.RARE]: [], @@ -1756,7 +1756,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.MOUNTAIN]: { + [BiomeId.MOUNTAIN]: { [BiomePoolTier.COMMON]: [ TrainerType.BACKPACKER, TrainerType.BLACK_BELT, TrainerType.HIKER ], [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER, TrainerType.PILOT ], [BiomePoolTier.RARE]: [], @@ -1767,7 +1767,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.BADLANDS]: { + [BiomeId.BADLANDS]: { [BiomePoolTier.COMMON]: [ TrainerType.BACKPACKER, TrainerType.HIKER ], [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER ], [BiomePoolTier.RARE]: [], @@ -1778,7 +1778,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.CAVE]: { + [BiomeId.CAVE]: { [BiomePoolTier.COMMON]: [ TrainerType.BACKPACKER, TrainerType.HIKER ], [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER, TrainerType.BLACK_BELT ], [BiomePoolTier.RARE]: [], @@ -1789,7 +1789,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.DESERT]: { + [BiomeId.DESERT]: { [BiomePoolTier.COMMON]: [ TrainerType.BACKPACKER, TrainerType.SCIENTIST ], [BiomePoolTier.UNCOMMON]: [], [BiomePoolTier.RARE]: [], @@ -1800,7 +1800,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.ICE_CAVE]: { + [BiomeId.ICE_CAVE]: { [BiomePoolTier.COMMON]: [ TrainerType.SNOW_WORKER ], [BiomePoolTier.UNCOMMON]: [], [BiomePoolTier.RARE]: [], @@ -1811,7 +1811,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.MEADOW]: { + [BiomeId.MEADOW]: { [BiomePoolTier.COMMON]: [ TrainerType.BEAUTY, TrainerType.MUSICIAN, TrainerType.PARASOL_LADY ], [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER, TrainerType.BAKER, TrainerType.BREEDER, TrainerType.POKEFAN ], [BiomePoolTier.RARE]: [], @@ -1822,7 +1822,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.POWER_PLANT]: { + [BiomeId.POWER_PLANT]: { [BiomePoolTier.COMMON]: [ TrainerType.GUITARIST, TrainerType.WORKER ], [BiomePoolTier.UNCOMMON]: [], [BiomePoolTier.RARE]: [], @@ -1833,7 +1833,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.VOLCANO]: { + [BiomeId.VOLCANO]: { [BiomePoolTier.COMMON]: [ TrainerType.FIREBREATHER ], [BiomePoolTier.UNCOMMON]: [], [BiomePoolTier.RARE]: [], @@ -1844,7 +1844,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.GRAVEYARD]: { + [BiomeId.GRAVEYARD]: { [BiomePoolTier.COMMON]: [ TrainerType.PSYCHIC ], [BiomePoolTier.UNCOMMON]: [ TrainerType.HEX_MANIAC ], [BiomePoolTier.RARE]: [], @@ -1855,7 +1855,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.DOJO]: { + [BiomeId.DOJO]: { [BiomePoolTier.COMMON]: [ TrainerType.BLACK_BELT ], [BiomePoolTier.UNCOMMON]: [], [BiomePoolTier.RARE]: [], @@ -1866,7 +1866,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.FACTORY]: { + [BiomeId.FACTORY]: { [BiomePoolTier.COMMON]: [ TrainerType.WORKER ], [BiomePoolTier.UNCOMMON]: [], [BiomePoolTier.RARE]: [], @@ -1877,7 +1877,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.RUINS]: { + [BiomeId.RUINS]: { [BiomePoolTier.COMMON]: [ TrainerType.PSYCHIC, TrainerType.SCIENTIST ], [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER, TrainerType.BLACK_BELT, TrainerType.HEX_MANIAC ], [BiomePoolTier.RARE]: [], @@ -1888,7 +1888,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.WASTELAND]: { + [BiomeId.WASTELAND]: { [BiomePoolTier.COMMON]: [ TrainerType.VETERAN ], [BiomePoolTier.UNCOMMON]: [], [BiomePoolTier.RARE]: [], @@ -1899,7 +1899,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.ABYSS]: { + [BiomeId.ABYSS]: { [BiomePoolTier.COMMON]: [], [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER ], [BiomePoolTier.RARE]: [], @@ -1910,7 +1910,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.SPACE]: { + [BiomeId.SPACE]: { [BiomePoolTier.COMMON]: [], [BiomePoolTier.UNCOMMON]: [], [BiomePoolTier.RARE]: [], @@ -1921,7 +1921,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.CONSTRUCTION_SITE]: { + [BiomeId.CONSTRUCTION_SITE]: { [BiomePoolTier.COMMON]: [ TrainerType.OFFICER, TrainerType.WORKER ], [BiomePoolTier.UNCOMMON]: [], [BiomePoolTier.RARE]: [], @@ -1932,7 +1932,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.JUNGLE]: { + [BiomeId.JUNGLE]: { [BiomePoolTier.COMMON]: [ TrainerType.BACKPACKER, TrainerType.RANGER ], [BiomePoolTier.UNCOMMON]: [], [BiomePoolTier.RARE]: [], @@ -1943,7 +1943,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.FAIRY_CAVE]: { + [BiomeId.FAIRY_CAVE]: { [BiomePoolTier.COMMON]: [ TrainerType.BEAUTY ], [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER, TrainerType.BREEDER ], [BiomePoolTier.RARE]: [], @@ -1954,7 +1954,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.TEMPLE]: { + [BiomeId.TEMPLE]: { [BiomePoolTier.COMMON]: [], [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER ], [BiomePoolTier.RARE]: [], @@ -1965,7 +1965,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.SLUM]: { + [BiomeId.SLUM]: { [BiomePoolTier.COMMON]: [ TrainerType.BIKER, TrainerType.OFFICER, TrainerType.ROUGHNECK ], [BiomePoolTier.UNCOMMON]: [ TrainerType.BAKER, TrainerType.HOOLIGANS ], [BiomePoolTier.RARE]: [], @@ -1976,7 +1976,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.SNOWY_FOREST]: { + [BiomeId.SNOWY_FOREST]: { [BiomePoolTier.COMMON]: [ TrainerType.SNOW_WORKER ], [BiomePoolTier.UNCOMMON]: [], [BiomePoolTier.RARE]: [], @@ -1987,7 +1987,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.ISLAND]: { + [BiomeId.ISLAND]: { [BiomePoolTier.COMMON]: [ TrainerType.RICH_KID ], [BiomePoolTier.UNCOMMON]: [ TrainerType.RICH ], [BiomePoolTier.RARE]: [], @@ -1998,7 +1998,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.LABORATORY]: { + [BiomeId.LABORATORY]: { [BiomePoolTier.COMMON]: [], [BiomePoolTier.UNCOMMON]: [], [BiomePoolTier.RARE]: [], @@ -2009,7 +2009,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, - [Biome.END]: { + [BiomeId.END]: { [BiomePoolTier.COMMON]: [], [BiomePoolTier.UNCOMMON]: [], [BiomePoolTier.RARE]: [], @@ -2025,5226 +2025,5226 @@ export const biomeTrainerPools: BiomeTrainerPools = { // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: init methods are expected to have many lines. export function initBiomes() { const pokemonBiomes = [ - [ Species.BULBASAUR, PokemonType.GRASS, PokemonType.POISON, [ - [ Biome.GRASS, BiomePoolTier.RARE ] + [ SpeciesId.BULBASAUR, PokemonType.GRASS, PokemonType.POISON, [ + [ BiomeId.GRASS, BiomePoolTier.RARE ] ] ], - [ Species.IVYSAUR, PokemonType.GRASS, PokemonType.POISON, [ - [ Biome.GRASS, BiomePoolTier.RARE ] + [ SpeciesId.IVYSAUR, PokemonType.GRASS, PokemonType.POISON, [ + [ BiomeId.GRASS, BiomePoolTier.RARE ] ] ], - [ Species.VENUSAUR, PokemonType.GRASS, PokemonType.POISON, [ - [ Biome.GRASS, BiomePoolTier.RARE ], - [ Biome.GRASS, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.VENUSAUR, PokemonType.GRASS, PokemonType.POISON, [ + [ BiomeId.GRASS, BiomePoolTier.RARE ], + [ BiomeId.GRASS, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.CHARMANDER, PokemonType.FIRE, -1, [ - [ Biome.VOLCANO, BiomePoolTier.RARE ] + [ SpeciesId.CHARMANDER, PokemonType.FIRE, -1, [ + [ BiomeId.VOLCANO, BiomePoolTier.RARE ] ] ], - [ Species.CHARMELEON, PokemonType.FIRE, -1, [ - [ Biome.VOLCANO, BiomePoolTier.RARE ] + [ SpeciesId.CHARMELEON, PokemonType.FIRE, -1, [ + [ BiomeId.VOLCANO, BiomePoolTier.RARE ] ] ], - [ Species.CHARIZARD, PokemonType.FIRE, PokemonType.FLYING, [ - [ Biome.VOLCANO, BiomePoolTier.RARE ], - [ Biome.VOLCANO, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.CHARIZARD, PokemonType.FIRE, PokemonType.FLYING, [ + [ BiomeId.VOLCANO, BiomePoolTier.RARE ], + [ BiomeId.VOLCANO, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.SQUIRTLE, PokemonType.WATER, -1, [ - [ Biome.LAKE, BiomePoolTier.RARE ] + [ SpeciesId.SQUIRTLE, PokemonType.WATER, -1, [ + [ BiomeId.LAKE, BiomePoolTier.RARE ] ] ], - [ Species.WARTORTLE, PokemonType.WATER, -1, [ - [ Biome.LAKE, BiomePoolTier.RARE ] + [ SpeciesId.WARTORTLE, PokemonType.WATER, -1, [ + [ BiomeId.LAKE, BiomePoolTier.RARE ] ] ], - [ Species.BLASTOISE, PokemonType.WATER, -1, [ - [ Biome.LAKE, BiomePoolTier.RARE ], - [ Biome.LAKE, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.BLASTOISE, PokemonType.WATER, -1, [ + [ BiomeId.LAKE, BiomePoolTier.RARE ], + [ BiomeId.LAKE, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.CATERPIE, PokemonType.BUG, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.CATERPIE, PokemonType.BUG, -1, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.METAPOD, PokemonType.BUG, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.METAPOD, PokemonType.BUG, -1, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.BUTTERFREE, PokemonType.BUG, PokemonType.FLYING, [ - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.BUTTERFREE, PokemonType.BUG, PokemonType.FLYING, [ + [ BiomeId.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.WEEDLE, PokemonType.BUG, PokemonType.POISON, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.WEEDLE, PokemonType.BUG, PokemonType.POISON, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.KAKUNA, PokemonType.BUG, PokemonType.POISON, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.KAKUNA, PokemonType.BUG, PokemonType.POISON, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.BEEDRILL, PokemonType.BUG, PokemonType.POISON, [ - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.BEEDRILL, PokemonType.BUG, PokemonType.POISON, [ + [ BiomeId.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.PIDGEY, PokemonType.NORMAL, PokemonType.FLYING, [ - [ Biome.TOWN, BiomePoolTier.COMMON ], - [ Biome.PLAINS, BiomePoolTier.UNCOMMON ], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON ] + [ SpeciesId.PIDGEY, PokemonType.NORMAL, PokemonType.FLYING, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON ], + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON ], + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON ] ] ], - [ Species.PIDGEOTTO, PokemonType.NORMAL, PokemonType.FLYING, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON ], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON ] + [ SpeciesId.PIDGEOTTO, PokemonType.NORMAL, PokemonType.FLYING, [ + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON ], + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON ] ] ], - [ Species.PIDGEOT, PokemonType.NORMAL, PokemonType.FLYING, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON ], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON ], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS ] + [ SpeciesId.PIDGEOT, PokemonType.NORMAL, PokemonType.FLYING, [ + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON ], + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON ], + [ BiomeId.MOUNTAIN, BiomePoolTier.BOSS ] ] ], - [ Species.RATTATA, PokemonType.NORMAL, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON ], - [ Biome.METROPOLIS, BiomePoolTier.COMMON ], - [ Biome.SLUM, BiomePoolTier.COMMON ] + [ SpeciesId.RATTATA, PokemonType.NORMAL, -1, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON ], + [ BiomeId.METROPOLIS, BiomePoolTier.COMMON ], + [ BiomeId.SLUM, BiomePoolTier.COMMON ] ] ], - [ Species.RATICATE, PokemonType.NORMAL, -1, [ - [ Biome.METROPOLIS, BiomePoolTier.COMMON ], - [ Biome.SLUM, BiomePoolTier.COMMON ] + [ SpeciesId.RATICATE, PokemonType.NORMAL, -1, [ + [ BiomeId.METROPOLIS, BiomePoolTier.COMMON ], + [ BiomeId.SLUM, BiomePoolTier.COMMON ] ] ], - [ Species.SPEAROW, PokemonType.NORMAL, PokemonType.FLYING, [ - [ Biome.TOWN, BiomePoolTier.COMMON ], - [ Biome.PLAINS, BiomePoolTier.UNCOMMON ], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON ] + [ SpeciesId.SPEAROW, PokemonType.NORMAL, PokemonType.FLYING, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON ], + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON ], + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON ] ] ], - [ Species.FEAROW, PokemonType.NORMAL, PokemonType.FLYING, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON ], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON ], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS ] + [ SpeciesId.FEAROW, PokemonType.NORMAL, PokemonType.FLYING, [ + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON ], + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON ], + [ BiomeId.MOUNTAIN, BiomePoolTier.BOSS ] ] ], - [ Species.EKANS, PokemonType.POISON, -1, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.FOREST, BiomePoolTier.UNCOMMON ], - [ Biome.SWAMP, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.EKANS, PokemonType.POISON, -1, [ + [ BiomeId.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.FOREST, BiomePoolTier.UNCOMMON ], + [ BiomeId.SWAMP, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.ARBOK, PokemonType.POISON, -1, [ - [ Biome.FOREST, BiomePoolTier.UNCOMMON ], - [ Biome.SWAMP, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.SWAMP, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.ARBOK, PokemonType.POISON, -1, [ + [ BiomeId.FOREST, BiomePoolTier.UNCOMMON ], + [ BiomeId.SWAMP, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.SWAMP, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.PIKACHU, PokemonType.ELECTRIC, -1, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON ], - [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON ], - [ Biome.POWER_PLANT, BiomePoolTier.COMMON ] + [ SpeciesId.PIKACHU, PokemonType.ELECTRIC, -1, [ + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON ], + [ BiomeId.METROPOLIS, BiomePoolTier.UNCOMMON ], + [ BiomeId.POWER_PLANT, BiomePoolTier.COMMON ] ] ], - [ Species.RAICHU, PokemonType.ELECTRIC, -1, [ - [ Biome.POWER_PLANT, BiomePoolTier.BOSS ] + [ SpeciesId.RAICHU, PokemonType.ELECTRIC, -1, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.BOSS ] ] ], - [ Species.SANDSHREW, PokemonType.GROUND, -1, [ - [ Biome.BADLANDS, BiomePoolTier.UNCOMMON ], - [ Biome.DESERT, BiomePoolTier.COMMON ] + [ SpeciesId.SANDSHREW, PokemonType.GROUND, -1, [ + [ BiomeId.BADLANDS, BiomePoolTier.UNCOMMON ], + [ BiomeId.DESERT, BiomePoolTier.COMMON ] ] ], - [ Species.SANDSLASH, PokemonType.GROUND, -1, [ - [ Biome.BADLANDS, BiomePoolTier.UNCOMMON ], - [ Biome.DESERT, BiomePoolTier.COMMON ], - [ Biome.DESERT, BiomePoolTier.BOSS ] + [ SpeciesId.SANDSLASH, PokemonType.GROUND, -1, [ + [ BiomeId.BADLANDS, BiomePoolTier.UNCOMMON ], + [ BiomeId.DESERT, BiomePoolTier.COMMON ], + [ BiomeId.DESERT, BiomePoolTier.BOSS ] ] ], - [ Species.NIDORAN_F, PokemonType.POISON, -1, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, TimeOfDay.DAY ], - [ Biome.TALL_GRASS, BiomePoolTier.COMMON, TimeOfDay.DAY ] + [ SpeciesId.NIDORAN_F, PokemonType.POISON, -1, [ + [ BiomeId.TOWN, BiomePoolTier.UNCOMMON, TimeOfDay.DAY ], + [ BiomeId.TALL_GRASS, BiomePoolTier.COMMON, TimeOfDay.DAY ] ] ], - [ Species.NIDORINA, PokemonType.POISON, -1, [ - [ Biome.TALL_GRASS, BiomePoolTier.COMMON, TimeOfDay.DAY ] + [ SpeciesId.NIDORINA, PokemonType.POISON, -1, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.COMMON, TimeOfDay.DAY ] ] ], - [ Species.NIDOQUEEN, PokemonType.POISON, PokemonType.GROUND, [ - [ Biome.TALL_GRASS, BiomePoolTier.BOSS, TimeOfDay.DAY ] + [ SpeciesId.NIDOQUEEN, PokemonType.POISON, PokemonType.GROUND, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.BOSS, TimeOfDay.DAY ] ] ], - [ Species.NIDORAN_M, PokemonType.POISON, -1, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, TimeOfDay.DAY ], - [ Biome.TALL_GRASS, BiomePoolTier.COMMON, TimeOfDay.DAY ] + [ SpeciesId.NIDORAN_M, PokemonType.POISON, -1, [ + [ BiomeId.TOWN, BiomePoolTier.UNCOMMON, TimeOfDay.DAY ], + [ BiomeId.TALL_GRASS, BiomePoolTier.COMMON, TimeOfDay.DAY ] ] ], - [ Species.NIDORINO, PokemonType.POISON, -1, [ - [ Biome.TALL_GRASS, BiomePoolTier.COMMON, TimeOfDay.DAY ] + [ SpeciesId.NIDORINO, PokemonType.POISON, -1, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.COMMON, TimeOfDay.DAY ] ] ], - [ Species.NIDOKING, PokemonType.POISON, PokemonType.GROUND, [ - [ Biome.TALL_GRASS, BiomePoolTier.BOSS, TimeOfDay.DAY ] + [ SpeciesId.NIDOKING, PokemonType.POISON, PokemonType.GROUND, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.BOSS, TimeOfDay.DAY ] ] ], - [ Species.CLEFAIRY, PokemonType.FAIRY, -1, [ - [ Biome.FAIRY_CAVE, BiomePoolTier.UNCOMMON ], - [ Biome.SPACE, BiomePoolTier.COMMON ] + [ SpeciesId.CLEFAIRY, PokemonType.FAIRY, -1, [ + [ BiomeId.FAIRY_CAVE, BiomePoolTier.UNCOMMON ], + [ BiomeId.SPACE, BiomePoolTier.COMMON ] ] ], - [ Species.CLEFABLE, PokemonType.FAIRY, -1, [ - [ Biome.SPACE, BiomePoolTier.BOSS ] + [ SpeciesId.CLEFABLE, PokemonType.FAIRY, -1, [ + [ BiomeId.SPACE, BiomePoolTier.BOSS ] ] ], - [ Species.VULPIX, PokemonType.FIRE, -1, [ - [ Biome.TALL_GRASS, BiomePoolTier.UNCOMMON ], - [ Biome.VOLCANO, BiomePoolTier.COMMON ] + [ SpeciesId.VULPIX, PokemonType.FIRE, -1, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.UNCOMMON ], + [ BiomeId.VOLCANO, BiomePoolTier.COMMON ] ] ], - [ Species.NINETALES, PokemonType.FIRE, -1, [ - [ Biome.VOLCANO, BiomePoolTier.BOSS ] + [ SpeciesId.NINETALES, PokemonType.FIRE, -1, [ + [ BiomeId.VOLCANO, BiomePoolTier.BOSS ] ] ], - [ Species.JIGGLYPUFF, PokemonType.NORMAL, PokemonType.FAIRY, [ - [ Biome.MEADOW, BiomePoolTier.UNCOMMON ], - [ Biome.FAIRY_CAVE, BiomePoolTier.COMMON ] + [ SpeciesId.JIGGLYPUFF, PokemonType.NORMAL, PokemonType.FAIRY, [ + [ BiomeId.MEADOW, BiomePoolTier.UNCOMMON ], + [ BiomeId.FAIRY_CAVE, BiomePoolTier.COMMON ] ] ], - [ Species.WIGGLYTUFF, PokemonType.NORMAL, PokemonType.FAIRY, [ - [ Biome.MEADOW, BiomePoolTier.UNCOMMON ], - [ Biome.FAIRY_CAVE, BiomePoolTier.COMMON ], - [ Biome.FAIRY_CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.WIGGLYTUFF, PokemonType.NORMAL, PokemonType.FAIRY, [ + [ BiomeId.MEADOW, BiomePoolTier.UNCOMMON ], + [ BiomeId.FAIRY_CAVE, BiomePoolTier.COMMON ], + [ BiomeId.FAIRY_CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.ZUBAT, PokemonType.POISON, PokemonType.FLYING, [ - [ Biome.PLAINS, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], - [ Biome.CAVE, BiomePoolTier.COMMON ] + [ SpeciesId.ZUBAT, PokemonType.POISON, PokemonType.FLYING, [ + [ BiomeId.PLAINS, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], + [ BiomeId.CAVE, BiomePoolTier.COMMON ] ] ], - [ Species.GOLBAT, PokemonType.POISON, PokemonType.FLYING, [ - [ Biome.PLAINS, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], - [ Biome.CAVE, BiomePoolTier.COMMON ] + [ SpeciesId.GOLBAT, PokemonType.POISON, PokemonType.FLYING, [ + [ BiomeId.PLAINS, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], + [ BiomeId.CAVE, BiomePoolTier.COMMON ] ] ], - [ Species.ODDISH, PokemonType.GRASS, PokemonType.POISON, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.TALL_GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.ODDISH, PokemonType.GRASS, PokemonType.POISON, [ + [ BiomeId.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.TALL_GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.GLOOM, PokemonType.GRASS, PokemonType.POISON, [ - [ Biome.TALL_GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.GLOOM, PokemonType.GRASS, PokemonType.POISON, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.VILEPLUME, PokemonType.GRASS, PokemonType.POISON, [ - [ Biome.TALL_GRASS, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.VILEPLUME, PokemonType.GRASS, PokemonType.POISON, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.PARAS, PokemonType.BUG, PokemonType.GRASS, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ], - [ Biome.TALL_GRASS, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ], - [ Biome.CAVE, BiomePoolTier.COMMON ] + [ SpeciesId.PARAS, PokemonType.BUG, PokemonType.GRASS, [ + [ BiomeId.TOWN, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ], + [ BiomeId.TALL_GRASS, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ], + [ BiomeId.CAVE, BiomePoolTier.COMMON ] ] ], - [ Species.PARASECT, PokemonType.BUG, PokemonType.GRASS, [ - [ Biome.TALL_GRASS, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ], - [ Biome.CAVE, BiomePoolTier.COMMON ], - [ Biome.CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.PARASECT, PokemonType.BUG, PokemonType.GRASS, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ], + [ BiomeId.CAVE, BiomePoolTier.COMMON ], + [ BiomeId.CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.VENONAT, PokemonType.BUG, PokemonType.POISON, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ], - [ Biome.TALL_GRASS, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ], - [ Biome.FOREST, BiomePoolTier.COMMON, TimeOfDay.NIGHT ] + [ SpeciesId.VENONAT, PokemonType.BUG, PokemonType.POISON, [ + [ BiomeId.TOWN, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ], + [ BiomeId.TALL_GRASS, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ], + [ BiomeId.FOREST, BiomePoolTier.COMMON, TimeOfDay.NIGHT ] ] ], - [ Species.VENOMOTH, PokemonType.BUG, PokemonType.POISON, [ - [ Biome.TALL_GRASS, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ], - [ Biome.FOREST, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], - [ Biome.FOREST, BiomePoolTier.BOSS, TimeOfDay.NIGHT ] + [ SpeciesId.VENOMOTH, PokemonType.BUG, PokemonType.POISON, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ], + [ BiomeId.FOREST, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], + [ BiomeId.FOREST, BiomePoolTier.BOSS, TimeOfDay.NIGHT ] ] ], - [ Species.DIGLETT, PokemonType.GROUND, -1, [ - [ Biome.BADLANDS, BiomePoolTier.COMMON ] + [ SpeciesId.DIGLETT, PokemonType.GROUND, -1, [ + [ BiomeId.BADLANDS, BiomePoolTier.COMMON ] ] ], - [ Species.DUGTRIO, PokemonType.GROUND, -1, [ - [ Biome.BADLANDS, BiomePoolTier.COMMON ], - [ Biome.BADLANDS, BiomePoolTier.BOSS ] + [ SpeciesId.DUGTRIO, PokemonType.GROUND, -1, [ + [ BiomeId.BADLANDS, BiomePoolTier.COMMON ], + [ BiomeId.BADLANDS, BiomePoolTier.BOSS ] ] ], - [ Species.MEOWTH, PokemonType.NORMAL, -1, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.MEOWTH, PokemonType.NORMAL, -1, [ + [ BiomeId.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.PERSIAN, PokemonType.NORMAL, -1, [ - [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.PLAINS, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.PERSIAN, PokemonType.NORMAL, -1, [ + [ BiomeId.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.PLAINS, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.PSYDUCK, PokemonType.WATER, -1, [ - [ Biome.SWAMP, BiomePoolTier.UNCOMMON ], - [ Biome.LAKE, BiomePoolTier.COMMON ] + [ SpeciesId.PSYDUCK, PokemonType.WATER, -1, [ + [ BiomeId.SWAMP, BiomePoolTier.UNCOMMON ], + [ BiomeId.LAKE, BiomePoolTier.COMMON ] ] ], - [ Species.GOLDUCK, PokemonType.WATER, -1, [ - [ Biome.SWAMP, BiomePoolTier.UNCOMMON ], - [ Biome.LAKE, BiomePoolTier.COMMON ], - [ Biome.LAKE, BiomePoolTier.BOSS ] + [ SpeciesId.GOLDUCK, PokemonType.WATER, -1, [ + [ BiomeId.SWAMP, BiomePoolTier.UNCOMMON ], + [ BiomeId.LAKE, BiomePoolTier.COMMON ], + [ BiomeId.LAKE, BiomePoolTier.BOSS ] ] ], - [ Species.MANKEY, PokemonType.FIGHTING, -1, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.DOJO, BiomePoolTier.COMMON ] + [ SpeciesId.MANKEY, PokemonType.FIGHTING, -1, [ + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.DOJO, BiomePoolTier.COMMON ] ] ], - [ Species.PRIMEAPE, PokemonType.FIGHTING, -1, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.DOJO, BiomePoolTier.COMMON ] + [ SpeciesId.PRIMEAPE, PokemonType.FIGHTING, -1, [ + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.DOJO, BiomePoolTier.COMMON ] ] ], - [ Species.GROWLITHE, PokemonType.FIRE, -1, [ - [ Biome.GRASS, BiomePoolTier.RARE ], - [ Biome.VOLCANO, BiomePoolTier.COMMON ] + [ SpeciesId.GROWLITHE, PokemonType.FIRE, -1, [ + [ BiomeId.GRASS, BiomePoolTier.RARE ], + [ BiomeId.VOLCANO, BiomePoolTier.COMMON ] ] ], - [ Species.ARCANINE, PokemonType.FIRE, -1, [ - [ Biome.VOLCANO, BiomePoolTier.BOSS ] + [ SpeciesId.ARCANINE, PokemonType.FIRE, -1, [ + [ BiomeId.VOLCANO, BiomePoolTier.BOSS ] ] ], - [ Species.POLIWAG, PokemonType.WATER, -1, [ - [ Biome.SEA, BiomePoolTier.UNCOMMON ], - [ Biome.SWAMP, BiomePoolTier.COMMON ] + [ SpeciesId.POLIWAG, PokemonType.WATER, -1, [ + [ BiomeId.SEA, BiomePoolTier.UNCOMMON ], + [ BiomeId.SWAMP, BiomePoolTier.COMMON ] ] ], - [ Species.POLIWHIRL, PokemonType.WATER, -1, [ - [ Biome.SEA, BiomePoolTier.UNCOMMON ], - [ Biome.SWAMP, BiomePoolTier.COMMON ] + [ SpeciesId.POLIWHIRL, PokemonType.WATER, -1, [ + [ BiomeId.SEA, BiomePoolTier.UNCOMMON ], + [ BiomeId.SWAMP, BiomePoolTier.COMMON ] ] ], - [ Species.POLIWRATH, PokemonType.WATER, PokemonType.FIGHTING, [ - [ Biome.SWAMP, BiomePoolTier.BOSS ] + [ SpeciesId.POLIWRATH, PokemonType.WATER, PokemonType.FIGHTING, [ + [ BiomeId.SWAMP, BiomePoolTier.BOSS ] ] ], - [ Species.ABRA, PokemonType.PSYCHIC, -1, [ - [ Biome.TOWN, BiomePoolTier.RARE ], - [ Biome.PLAINS, BiomePoolTier.RARE ], - [ Biome.RUINS, BiomePoolTier.UNCOMMON ] + [ SpeciesId.ABRA, PokemonType.PSYCHIC, -1, [ + [ BiomeId.TOWN, BiomePoolTier.RARE ], + [ BiomeId.PLAINS, BiomePoolTier.RARE ], + [ BiomeId.RUINS, BiomePoolTier.UNCOMMON ] ] ], - [ Species.KADABRA, PokemonType.PSYCHIC, -1, [ - [ Biome.PLAINS, BiomePoolTier.RARE ], - [ Biome.RUINS, BiomePoolTier.UNCOMMON ] + [ SpeciesId.KADABRA, PokemonType.PSYCHIC, -1, [ + [ BiomeId.PLAINS, BiomePoolTier.RARE ], + [ BiomeId.RUINS, BiomePoolTier.UNCOMMON ] ] ], - [ Species.ALAKAZAM, PokemonType.PSYCHIC, -1, [ - [ Biome.RUINS, BiomePoolTier.BOSS ] + [ SpeciesId.ALAKAZAM, PokemonType.PSYCHIC, -1, [ + [ BiomeId.RUINS, BiomePoolTier.BOSS ] ] ], - [ Species.MACHOP, PokemonType.FIGHTING, -1, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON ], - [ Biome.FACTORY, BiomePoolTier.COMMON ], - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.COMMON ] + [ SpeciesId.MACHOP, PokemonType.FIGHTING, -1, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON ], + [ BiomeId.FACTORY, BiomePoolTier.COMMON ], + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.COMMON ] ] ], - [ Species.MACHOKE, PokemonType.FIGHTING, -1, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON ], - [ Biome.FACTORY, BiomePoolTier.COMMON ], - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.COMMON ] + [ SpeciesId.MACHOKE, PokemonType.FIGHTING, -1, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON ], + [ BiomeId.FACTORY, BiomePoolTier.COMMON ], + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.COMMON ] ] ], - [ Species.MACHAMP, PokemonType.FIGHTING, -1, [ - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.BOSS ] + [ SpeciesId.MACHAMP, PokemonType.FIGHTING, -1, [ + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.BOSS ] ] ], - [ Species.BELLSPROUT, PokemonType.GRASS, PokemonType.POISON, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.BELLSPROUT, PokemonType.GRASS, PokemonType.POISON, [ + [ BiomeId.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.WEEPINBELL, PokemonType.GRASS, PokemonType.POISON, [ - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.WEEPINBELL, PokemonType.GRASS, PokemonType.POISON, [ + [ BiomeId.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.VICTREEBEL, PokemonType.GRASS, PokemonType.POISON, [ - [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.VICTREEBEL, PokemonType.GRASS, PokemonType.POISON, [ + [ BiomeId.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.TENTACOOL, PokemonType.WATER, PokemonType.POISON, [ - [ Biome.SEA, BiomePoolTier.COMMON ], - [ Biome.SEABED, BiomePoolTier.UNCOMMON ] + [ SpeciesId.TENTACOOL, PokemonType.WATER, PokemonType.POISON, [ + [ BiomeId.SEA, BiomePoolTier.COMMON ], + [ BiomeId.SEABED, BiomePoolTier.UNCOMMON ] ] ], - [ Species.TENTACRUEL, PokemonType.WATER, PokemonType.POISON, [ - [ Biome.SEA, BiomePoolTier.COMMON ], - [ Biome.SEA, BiomePoolTier.BOSS ], - [ Biome.SEABED, BiomePoolTier.UNCOMMON ] + [ SpeciesId.TENTACRUEL, PokemonType.WATER, PokemonType.POISON, [ + [ BiomeId.SEA, BiomePoolTier.COMMON ], + [ BiomeId.SEA, BiomePoolTier.BOSS ], + [ BiomeId.SEABED, BiomePoolTier.UNCOMMON ] ] ], - [ Species.GEODUDE, PokemonType.ROCK, PokemonType.GROUND, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON ], - [ Biome.BADLANDS, BiomePoolTier.COMMON ], - [ Biome.CAVE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.GEODUDE, PokemonType.ROCK, PokemonType.GROUND, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON ], + [ BiomeId.BADLANDS, BiomePoolTier.COMMON ], + [ BiomeId.CAVE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.GRAVELER, PokemonType.ROCK, PokemonType.GROUND, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON ], - [ Biome.BADLANDS, BiomePoolTier.COMMON ], - [ Biome.CAVE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.GRAVELER, PokemonType.ROCK, PokemonType.GROUND, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON ], + [ BiomeId.BADLANDS, BiomePoolTier.COMMON ], + [ BiomeId.CAVE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.GOLEM, PokemonType.ROCK, PokemonType.GROUND, [ - [ Biome.BADLANDS, BiomePoolTier.BOSS ] + [ SpeciesId.GOLEM, PokemonType.ROCK, PokemonType.GROUND, [ + [ BiomeId.BADLANDS, BiomePoolTier.BOSS ] ] ], - [ Species.PONYTA, PokemonType.FIRE, -1, [ - [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.VOLCANO, BiomePoolTier.COMMON ] + [ SpeciesId.PONYTA, PokemonType.FIRE, -1, [ + [ BiomeId.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.VOLCANO, BiomePoolTier.COMMON ] ] ], - [ Species.RAPIDASH, PokemonType.FIRE, -1, [ - [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.VOLCANO, BiomePoolTier.COMMON ], - [ Biome.VOLCANO, BiomePoolTier.BOSS ] + [ SpeciesId.RAPIDASH, PokemonType.FIRE, -1, [ + [ BiomeId.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.VOLCANO, BiomePoolTier.COMMON ], + [ BiomeId.VOLCANO, BiomePoolTier.BOSS ] ] ], - [ Species.SLOWPOKE, PokemonType.WATER, PokemonType.PSYCHIC, [ - [ Biome.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.SEA, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.LAKE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.SLOWPOKE, PokemonType.WATER, PokemonType.PSYCHIC, [ + [ BiomeId.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.SEA, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.LAKE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.SLOWBRO, PokemonType.WATER, PokemonType.PSYCHIC, [ - [ Biome.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.SEA, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.LAKE, BiomePoolTier.UNCOMMON ], - [ Biome.LAKE, BiomePoolTier.BOSS ] + [ SpeciesId.SLOWBRO, PokemonType.WATER, PokemonType.PSYCHIC, [ + [ BiomeId.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.SEA, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.LAKE, BiomePoolTier.UNCOMMON ], + [ BiomeId.LAKE, BiomePoolTier.BOSS ] ] ], - [ Species.MAGNEMITE, PokemonType.ELECTRIC, PokemonType.STEEL, [ - [ Biome.POWER_PLANT, BiomePoolTier.COMMON ], - [ Biome.FACTORY, BiomePoolTier.COMMON ], - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.COMMON ], - [ Biome.LABORATORY, BiomePoolTier.COMMON ] + [ SpeciesId.MAGNEMITE, PokemonType.ELECTRIC, PokemonType.STEEL, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.COMMON ], + [ BiomeId.FACTORY, BiomePoolTier.COMMON ], + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.COMMON ], + [ BiomeId.LABORATORY, BiomePoolTier.COMMON ] ] ], - [ Species.MAGNETON, PokemonType.ELECTRIC, PokemonType.STEEL, [ - [ Biome.POWER_PLANT, BiomePoolTier.COMMON ], - [ Biome.FACTORY, BiomePoolTier.COMMON ], - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.COMMON ], - [ Biome.LABORATORY, BiomePoolTier.COMMON ] + [ SpeciesId.MAGNETON, PokemonType.ELECTRIC, PokemonType.STEEL, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.COMMON ], + [ BiomeId.FACTORY, BiomePoolTier.COMMON ], + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.COMMON ], + [ BiomeId.LABORATORY, BiomePoolTier.COMMON ] ] ], - [ Species.FARFETCHD, PokemonType.NORMAL, PokemonType.FLYING, [ - [ Biome.PLAINS, BiomePoolTier.SUPER_RARE ], - [ Biome.PLAINS, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.FARFETCHD, PokemonType.NORMAL, PokemonType.FLYING, [ + [ BiomeId.PLAINS, BiomePoolTier.SUPER_RARE ], + [ BiomeId.PLAINS, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.DODUO, PokemonType.NORMAL, PokemonType.FLYING, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.DODUO, PokemonType.NORMAL, PokemonType.FLYING, [ + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.DODRIO, PokemonType.NORMAL, PokemonType.FLYING, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.PLAINS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.DODRIO, PokemonType.NORMAL, PokemonType.FLYING, [ + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.PLAINS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.SEEL, PokemonType.WATER, -1, [ - [ Biome.ICE_CAVE, BiomePoolTier.COMMON ] + [ SpeciesId.SEEL, PokemonType.WATER, -1, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.COMMON ] ] ], - [ Species.DEWGONG, PokemonType.WATER, PokemonType.ICE, [ - [ Biome.ICE_CAVE, BiomePoolTier.COMMON ], - [ Biome.ICE_CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.DEWGONG, PokemonType.WATER, PokemonType.ICE, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.COMMON ], + [ BiomeId.ICE_CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.GRIMER, PokemonType.POISON, -1, [ - [ Biome.SLUM, BiomePoolTier.COMMON ], - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.UNCOMMON ], - [ Biome.LABORATORY, BiomePoolTier.COMMON ] + [ SpeciesId.GRIMER, PokemonType.POISON, -1, [ + [ BiomeId.SLUM, BiomePoolTier.COMMON ], + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.UNCOMMON ], + [ BiomeId.LABORATORY, BiomePoolTier.COMMON ] ] ], - [ Species.MUK, PokemonType.POISON, -1, [ - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.UNCOMMON ], - [ Biome.SLUM, BiomePoolTier.COMMON ], - [ Biome.SLUM, BiomePoolTier.BOSS ], - [ Biome.LABORATORY, BiomePoolTier.COMMON ], - [ Biome.LABORATORY, BiomePoolTier.BOSS ] + [ SpeciesId.MUK, PokemonType.POISON, -1, [ + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.UNCOMMON ], + [ BiomeId.SLUM, BiomePoolTier.COMMON ], + [ BiomeId.SLUM, BiomePoolTier.BOSS ], + [ BiomeId.LABORATORY, BiomePoolTier.COMMON ], + [ BiomeId.LABORATORY, BiomePoolTier.BOSS ] ] ], - [ Species.SHELLDER, PokemonType.WATER, -1, [ - [ Biome.SEA, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.BEACH, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.SEABED, BiomePoolTier.UNCOMMON ] + [ SpeciesId.SHELLDER, PokemonType.WATER, -1, [ + [ BiomeId.SEA, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.BEACH, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.SEABED, BiomePoolTier.UNCOMMON ] ] ], - [ Species.CLOYSTER, PokemonType.WATER, PokemonType.ICE, [ - [ Biome.BEACH, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.CLOYSTER, PokemonType.WATER, PokemonType.ICE, [ + [ BiomeId.BEACH, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.GASTLY, PokemonType.GHOST, PokemonType.POISON, [ - [ Biome.GRAVEYARD, BiomePoolTier.COMMON ], - [ Biome.TEMPLE, BiomePoolTier.COMMON ] + [ SpeciesId.GASTLY, PokemonType.GHOST, PokemonType.POISON, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.COMMON ], + [ BiomeId.TEMPLE, BiomePoolTier.COMMON ] ] ], - [ Species.HAUNTER, PokemonType.GHOST, PokemonType.POISON, [ - [ Biome.GRAVEYARD, BiomePoolTier.COMMON ], - [ Biome.TEMPLE, BiomePoolTier.COMMON ] + [ SpeciesId.HAUNTER, PokemonType.GHOST, PokemonType.POISON, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.COMMON ], + [ BiomeId.TEMPLE, BiomePoolTier.COMMON ] ] ], - [ Species.GENGAR, PokemonType.GHOST, PokemonType.POISON, [ - [ Biome.GRAVEYARD, BiomePoolTier.BOSS ] + [ SpeciesId.GENGAR, PokemonType.GHOST, PokemonType.POISON, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.BOSS ] ] ], - [ Species.ONIX, PokemonType.ROCK, PokemonType.GROUND, [ - [ Biome.BADLANDS, BiomePoolTier.RARE ], - [ Biome.CAVE, BiomePoolTier.RARE ], - [ Biome.CAVE, BiomePoolTier.BOSS ], - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.RARE ] + [ SpeciesId.ONIX, PokemonType.ROCK, PokemonType.GROUND, [ + [ BiomeId.BADLANDS, BiomePoolTier.RARE ], + [ BiomeId.CAVE, BiomePoolTier.RARE ], + [ BiomeId.CAVE, BiomePoolTier.BOSS ], + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.RARE ] ] ], - [ Species.DROWZEE, PokemonType.PSYCHIC, -1, [ - [ Biome.RUINS, BiomePoolTier.COMMON ] + [ SpeciesId.DROWZEE, PokemonType.PSYCHIC, -1, [ + [ BiomeId.RUINS, BiomePoolTier.COMMON ] ] ], - [ Species.HYPNO, PokemonType.PSYCHIC, -1, [ - [ Biome.RUINS, BiomePoolTier.COMMON ], - [ Biome.RUINS, BiomePoolTier.BOSS ] + [ SpeciesId.HYPNO, PokemonType.PSYCHIC, -1, [ + [ BiomeId.RUINS, BiomePoolTier.COMMON ], + [ BiomeId.RUINS, BiomePoolTier.BOSS ] ] ], - [ Species.KRABBY, PokemonType.WATER, -1, [ - [ Biome.BEACH, BiomePoolTier.COMMON ] + [ SpeciesId.KRABBY, PokemonType.WATER, -1, [ + [ BiomeId.BEACH, BiomePoolTier.COMMON ] ] ], - [ Species.KINGLER, PokemonType.WATER, -1, [ - [ Biome.BEACH, BiomePoolTier.COMMON ], - [ Biome.BEACH, BiomePoolTier.BOSS ] + [ SpeciesId.KINGLER, PokemonType.WATER, -1, [ + [ BiomeId.BEACH, BiomePoolTier.COMMON ], + [ BiomeId.BEACH, BiomePoolTier.BOSS ] ] ], - [ Species.VOLTORB, PokemonType.ELECTRIC, -1, [ - [ Biome.POWER_PLANT, BiomePoolTier.COMMON ], - [ Biome.FACTORY, BiomePoolTier.COMMON ], - [ Biome.LABORATORY, BiomePoolTier.COMMON ] + [ SpeciesId.VOLTORB, PokemonType.ELECTRIC, -1, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.COMMON ], + [ BiomeId.FACTORY, BiomePoolTier.COMMON ], + [ BiomeId.LABORATORY, BiomePoolTier.COMMON ] ] ], - [ Species.ELECTRODE, PokemonType.ELECTRIC, -1, [ - [ Biome.POWER_PLANT, BiomePoolTier.COMMON ], - [ Biome.FACTORY, BiomePoolTier.COMMON ], - [ Biome.LABORATORY, BiomePoolTier.COMMON ], - [ Biome.LABORATORY, BiomePoolTier.BOSS ] + [ SpeciesId.ELECTRODE, PokemonType.ELECTRIC, -1, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.COMMON ], + [ BiomeId.FACTORY, BiomePoolTier.COMMON ], + [ BiomeId.LABORATORY, BiomePoolTier.COMMON ], + [ BiomeId.LABORATORY, BiomePoolTier.BOSS ] ] ], - [ Species.EXEGGCUTE, PokemonType.GRASS, PokemonType.PSYCHIC, [ - [ Biome.FOREST, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.EXEGGCUTE, PokemonType.GRASS, PokemonType.PSYCHIC, [ + [ BiomeId.FOREST, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.JUNGLE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.EXEGGUTOR, PokemonType.GRASS, PokemonType.PSYCHIC, [ - [ Biome.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.EXEGGUTOR, PokemonType.GRASS, PokemonType.PSYCHIC, [ + [ BiomeId.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.CUBONE, PokemonType.GROUND, -1, [ - [ Biome.BADLANDS, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], - [ Biome.GRAVEYARD, BiomePoolTier.UNCOMMON ], - [ Biome.TEMPLE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.CUBONE, PokemonType.GROUND, -1, [ + [ BiomeId.BADLANDS, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], + [ BiomeId.GRAVEYARD, BiomePoolTier.UNCOMMON ], + [ BiomeId.TEMPLE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.MAROWAK, PokemonType.GROUND, -1, [ - [ Biome.BADLANDS, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], - [ Biome.GRAVEYARD, BiomePoolTier.UNCOMMON ], - [ Biome.TEMPLE, BiomePoolTier.UNCOMMON ], - [ Biome.BADLANDS, BiomePoolTier.BOSS, TimeOfDay.NIGHT ], - [ Biome.GRAVEYARD, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY, TimeOfDay.DUSK ]] + [ SpeciesId.MAROWAK, PokemonType.GROUND, -1, [ + [ BiomeId.BADLANDS, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], + [ BiomeId.GRAVEYARD, BiomePoolTier.UNCOMMON ], + [ BiomeId.TEMPLE, BiomePoolTier.UNCOMMON ], + [ BiomeId.BADLANDS, BiomePoolTier.BOSS, TimeOfDay.NIGHT ], + [ BiomeId.GRAVEYARD, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY, TimeOfDay.DUSK ]] ] ], - [ Species.HITMONLEE, PokemonType.FIGHTING, -1, [ - [ Biome.DOJO, BiomePoolTier.RARE ], - [ Biome.DOJO, BiomePoolTier.BOSS ], - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.RARE ] + [ SpeciesId.HITMONLEE, PokemonType.FIGHTING, -1, [ + [ BiomeId.DOJO, BiomePoolTier.RARE ], + [ BiomeId.DOJO, BiomePoolTier.BOSS ], + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.RARE ] ] ], - [ Species.HITMONCHAN, PokemonType.FIGHTING, -1, [ - [ Biome.DOJO, BiomePoolTier.RARE ], - [ Biome.DOJO, BiomePoolTier.BOSS ], - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.RARE ] + [ SpeciesId.HITMONCHAN, PokemonType.FIGHTING, -1, [ + [ BiomeId.DOJO, BiomePoolTier.RARE ], + [ BiomeId.DOJO, BiomePoolTier.BOSS ], + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.RARE ] ] ], - [ Species.LICKITUNG, PokemonType.NORMAL, -1, [ - [ Biome.PLAINS, BiomePoolTier.SUPER_RARE ] + [ SpeciesId.LICKITUNG, PokemonType.NORMAL, -1, [ + [ BiomeId.PLAINS, BiomePoolTier.SUPER_RARE ] ] ], - [ Species.KOFFING, PokemonType.POISON, -1, [ - [ Biome.SLUM, BiomePoolTier.COMMON ], - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.KOFFING, PokemonType.POISON, -1, [ + [ BiomeId.SLUM, BiomePoolTier.COMMON ], + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.WEEZING, PokemonType.POISON, -1, [ - [ Biome.SLUM, BiomePoolTier.COMMON ], - [ Biome.SLUM, BiomePoolTier.BOSS ], - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.WEEZING, PokemonType.POISON, -1, [ + [ BiomeId.SLUM, BiomePoolTier.COMMON ], + [ BiomeId.SLUM, BiomePoolTier.BOSS ], + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.RHYHORN, PokemonType.GROUND, PokemonType.ROCK, [ - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.BADLANDS, BiomePoolTier.COMMON ], - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.RHYHORN, PokemonType.GROUND, PokemonType.ROCK, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.BADLANDS, BiomePoolTier.COMMON ], + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.RHYDON, PokemonType.GROUND, PokemonType.ROCK, [ - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.BADLANDS, BiomePoolTier.COMMON ], - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.RHYDON, PokemonType.GROUND, PokemonType.ROCK, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.BADLANDS, BiomePoolTier.COMMON ], + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.CHANSEY, PokemonType.NORMAL, -1, [ - [ Biome.PLAINS, BiomePoolTier.SUPER_RARE ], - [ Biome.MEADOW, BiomePoolTier.SUPER_RARE ] + [ SpeciesId.CHANSEY, PokemonType.NORMAL, -1, [ + [ BiomeId.PLAINS, BiomePoolTier.SUPER_RARE ], + [ BiomeId.MEADOW, BiomePoolTier.SUPER_RARE ] ] ], - [ Species.TANGELA, PokemonType.GRASS, -1, [ - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.TANGELA, PokemonType.GRASS, -1, [ + [ BiomeId.JUNGLE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.KANGASKHAN, PokemonType.NORMAL, -1, [ - [ Biome.JUNGLE, BiomePoolTier.SUPER_RARE ], - [ Biome.JUNGLE, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.KANGASKHAN, PokemonType.NORMAL, -1, [ + [ BiomeId.JUNGLE, BiomePoolTier.SUPER_RARE ], + [ BiomeId.JUNGLE, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.HORSEA, PokemonType.WATER, -1, [ - [ Biome.SEA, BiomePoolTier.UNCOMMON ] + [ SpeciesId.HORSEA, PokemonType.WATER, -1, [ + [ BiomeId.SEA, BiomePoolTier.UNCOMMON ] ] ], - [ Species.SEADRA, PokemonType.WATER, -1, [ - [ Biome.SEA, BiomePoolTier.UNCOMMON ] + [ SpeciesId.SEADRA, PokemonType.WATER, -1, [ + [ BiomeId.SEA, BiomePoolTier.UNCOMMON ] ] ], - [ Species.GOLDEEN, PokemonType.WATER, -1, [ - [ Biome.LAKE, BiomePoolTier.COMMON ], - [ Biome.SEA, BiomePoolTier.UNCOMMON ] + [ SpeciesId.GOLDEEN, PokemonType.WATER, -1, [ + [ BiomeId.LAKE, BiomePoolTier.COMMON ], + [ BiomeId.SEA, BiomePoolTier.UNCOMMON ] ] ], - [ Species.SEAKING, PokemonType.WATER, -1, [ - [ Biome.LAKE, BiomePoolTier.COMMON ], - [ Biome.LAKE, BiomePoolTier.BOSS ], - [ Biome.SEA, BiomePoolTier.UNCOMMON ] + [ SpeciesId.SEAKING, PokemonType.WATER, -1, [ + [ BiomeId.LAKE, BiomePoolTier.COMMON ], + [ BiomeId.LAKE, BiomePoolTier.BOSS ], + [ BiomeId.SEA, BiomePoolTier.UNCOMMON ] ] ], - [ Species.STARYU, PokemonType.WATER, -1, [ - [ Biome.BEACH, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.SEA, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.STARYU, PokemonType.WATER, -1, [ + [ BiomeId.BEACH, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.SEA, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.STARMIE, PokemonType.WATER, PokemonType.PSYCHIC, [ - [ Biome.BEACH, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.BEACH, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.SEA, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.STARMIE, PokemonType.WATER, PokemonType.PSYCHIC, [ + [ BiomeId.BEACH, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.BEACH, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.SEA, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.MR_MIME, PokemonType.PSYCHIC, PokemonType.FAIRY, [ - [ Biome.RUINS, BiomePoolTier.RARE ], - [ Biome.RUINS, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.MR_MIME, PokemonType.PSYCHIC, PokemonType.FAIRY, [ + [ BiomeId.RUINS, BiomePoolTier.RARE ], + [ BiomeId.RUINS, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.SCYTHER, PokemonType.BUG, PokemonType.FLYING, [ - [ Biome.TALL_GRASS, BiomePoolTier.SUPER_RARE ], - [ Biome.FOREST, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.JUNGLE, BiomePoolTier.RARE ] + [ SpeciesId.SCYTHER, PokemonType.BUG, PokemonType.FLYING, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.SUPER_RARE ], + [ BiomeId.FOREST, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.JUNGLE, BiomePoolTier.RARE ] ] ], - [ Species.JYNX, PokemonType.ICE, PokemonType.PSYCHIC, [ - [ Biome.ICE_CAVE, BiomePoolTier.RARE ], - [ Biome.ICE_CAVE, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.JYNX, PokemonType.ICE, PokemonType.PSYCHIC, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.RARE ], + [ BiomeId.ICE_CAVE, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.ELECTABUZZ, PokemonType.ELECTRIC, -1, [ - [ Biome.POWER_PLANT, BiomePoolTier.UNCOMMON ] + [ SpeciesId.ELECTABUZZ, PokemonType.ELECTRIC, -1, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.UNCOMMON ] ] ], - [ Species.MAGMAR, PokemonType.FIRE, -1, [ - [ Biome.VOLCANO, BiomePoolTier.UNCOMMON ] + [ SpeciesId.MAGMAR, PokemonType.FIRE, -1, [ + [ BiomeId.VOLCANO, BiomePoolTier.UNCOMMON ] ] ], - [ Species.PINSIR, PokemonType.BUG, -1, [ - [ Biome.TALL_GRASS, BiomePoolTier.RARE ], - [ Biome.TALL_GRASS, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.PINSIR, PokemonType.BUG, -1, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.RARE ], + [ BiomeId.TALL_GRASS, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.TAUROS, PokemonType.NORMAL, -1, [ - [ Biome.MEADOW, BiomePoolTier.RARE ], - [ Biome.MEADOW, BiomePoolTier.BOSS ] + [ SpeciesId.TAUROS, PokemonType.NORMAL, -1, [ + [ BiomeId.MEADOW, BiomePoolTier.RARE ], + [ BiomeId.MEADOW, BiomePoolTier.BOSS ] ] ], - [ Species.MAGIKARP, PokemonType.WATER, -1, [ - [ Biome.SEA, BiomePoolTier.COMMON ], - [ Biome.LAKE, BiomePoolTier.COMMON ] + [ SpeciesId.MAGIKARP, PokemonType.WATER, -1, [ + [ BiomeId.SEA, BiomePoolTier.COMMON ], + [ BiomeId.LAKE, BiomePoolTier.COMMON ] ] ], - [ Species.GYARADOS, PokemonType.WATER, PokemonType.FLYING, [ - [ Biome.SEA, BiomePoolTier.COMMON ], - [ Biome.LAKE, BiomePoolTier.COMMON ], - [ Biome.LAKE, BiomePoolTier.BOSS ] + [ SpeciesId.GYARADOS, PokemonType.WATER, PokemonType.FLYING, [ + [ BiomeId.SEA, BiomePoolTier.COMMON ], + [ BiomeId.LAKE, BiomePoolTier.COMMON ], + [ BiomeId.LAKE, BiomePoolTier.BOSS ] ] ], - [ Species.LAPRAS, PokemonType.WATER, PokemonType.ICE, [ - [ Biome.SEA, BiomePoolTier.RARE ], - [ Biome.ICE_CAVE, BiomePoolTier.RARE ], - [ Biome.ICE_CAVE, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.LAPRAS, PokemonType.WATER, PokemonType.ICE, [ + [ BiomeId.SEA, BiomePoolTier.RARE ], + [ BiomeId.ICE_CAVE, BiomePoolTier.RARE ], + [ BiomeId.ICE_CAVE, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.DITTO, PokemonType.NORMAL, -1, [ - [ Biome.TOWN, BiomePoolTier.ULTRA_RARE ], - [ Biome.PLAINS, BiomePoolTier.ULTRA_RARE ], - [ Biome.METROPOLIS, BiomePoolTier.SUPER_RARE ], - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.SUPER_RARE ], - [ Biome.LABORATORY, BiomePoolTier.RARE ] + [ SpeciesId.DITTO, PokemonType.NORMAL, -1, [ + [ BiomeId.TOWN, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.PLAINS, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.METROPOLIS, BiomePoolTier.SUPER_RARE ], + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.SUPER_RARE ], + [ BiomeId.LABORATORY, BiomePoolTier.RARE ] ] ], - [ Species.EEVEE, PokemonType.NORMAL, -1, [ - [ Biome.TOWN, BiomePoolTier.SUPER_RARE ], - [ Biome.PLAINS, BiomePoolTier.SUPER_RARE ], - [ Biome.METROPOLIS, BiomePoolTier.SUPER_RARE ], - [ Biome.MEADOW, BiomePoolTier.RARE ] + [ SpeciesId.EEVEE, PokemonType.NORMAL, -1, [ + [ BiomeId.TOWN, BiomePoolTier.SUPER_RARE ], + [ BiomeId.PLAINS, BiomePoolTier.SUPER_RARE ], + [ BiomeId.METROPOLIS, BiomePoolTier.SUPER_RARE ], + [ BiomeId.MEADOW, BiomePoolTier.RARE ] ] ], - [ Species.VAPOREON, PokemonType.WATER, -1, [ - [ Biome.LAKE, BiomePoolTier.SUPER_RARE ], - [ Biome.LAKE, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.VAPOREON, PokemonType.WATER, -1, [ + [ BiomeId.LAKE, BiomePoolTier.SUPER_RARE ], + [ BiomeId.LAKE, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.JOLTEON, PokemonType.ELECTRIC, -1, [ - [ Biome.POWER_PLANT, BiomePoolTier.SUPER_RARE ], - [ Biome.POWER_PLANT, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.JOLTEON, PokemonType.ELECTRIC, -1, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.SUPER_RARE ], + [ BiomeId.POWER_PLANT, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.FLAREON, PokemonType.FIRE, -1, [ - [ Biome.VOLCANO, BiomePoolTier.SUPER_RARE ], - [ Biome.VOLCANO, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.FLAREON, PokemonType.FIRE, -1, [ + [ BiomeId.VOLCANO, BiomePoolTier.SUPER_RARE ], + [ BiomeId.VOLCANO, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.PORYGON, PokemonType.NORMAL, -1, [ - [ Biome.FACTORY, BiomePoolTier.RARE ], - [ Biome.SPACE, BiomePoolTier.SUPER_RARE ], - [ Biome.LABORATORY, BiomePoolTier.RARE ] + [ SpeciesId.PORYGON, PokemonType.NORMAL, -1, [ + [ BiomeId.FACTORY, BiomePoolTier.RARE ], + [ BiomeId.SPACE, BiomePoolTier.SUPER_RARE ], + [ BiomeId.LABORATORY, BiomePoolTier.RARE ] ] ], - [ Species.OMANYTE, PokemonType.ROCK, PokemonType.WATER, [ - [ Biome.SEABED, BiomePoolTier.SUPER_RARE ] + [ SpeciesId.OMANYTE, PokemonType.ROCK, PokemonType.WATER, [ + [ BiomeId.SEABED, BiomePoolTier.SUPER_RARE ] ] ], - [ Species.OMASTAR, PokemonType.ROCK, PokemonType.WATER, [ - [ Biome.SEABED, BiomePoolTier.SUPER_RARE ], - [ Biome.SEABED, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.OMASTAR, PokemonType.ROCK, PokemonType.WATER, [ + [ BiomeId.SEABED, BiomePoolTier.SUPER_RARE ], + [ BiomeId.SEABED, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.KABUTO, PokemonType.ROCK, PokemonType.WATER, [ - [ Biome.SEABED, BiomePoolTier.SUPER_RARE ] + [ SpeciesId.KABUTO, PokemonType.ROCK, PokemonType.WATER, [ + [ BiomeId.SEABED, BiomePoolTier.SUPER_RARE ] ] ], - [ Species.KABUTOPS, PokemonType.ROCK, PokemonType.WATER, [ - [ Biome.SEABED, BiomePoolTier.SUPER_RARE ], - [ Biome.SEABED, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.KABUTOPS, PokemonType.ROCK, PokemonType.WATER, [ + [ BiomeId.SEABED, BiomePoolTier.SUPER_RARE ], + [ BiomeId.SEABED, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.AERODACTYL, PokemonType.ROCK, PokemonType.FLYING, [ - [ Biome.WASTELAND, BiomePoolTier.SUPER_RARE ], - [ Biome.WASTELAND, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.AERODACTYL, PokemonType.ROCK, PokemonType.FLYING, [ + [ BiomeId.WASTELAND, BiomePoolTier.SUPER_RARE ], + [ BiomeId.WASTELAND, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.SNORLAX, PokemonType.NORMAL, -1, [ - [ Biome.PLAINS, BiomePoolTier.SUPER_RARE ], - [ Biome.PLAINS, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.SNORLAX, PokemonType.NORMAL, -1, [ + [ BiomeId.PLAINS, BiomePoolTier.SUPER_RARE ], + [ BiomeId.PLAINS, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.ARTICUNO, PokemonType.ICE, PokemonType.FLYING, [ - [ Biome.ICE_CAVE, BiomePoolTier.ULTRA_RARE ], - [ Biome.ICE_CAVE, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.ARTICUNO, PokemonType.ICE, PokemonType.FLYING, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.ICE_CAVE, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.ZAPDOS, PokemonType.ELECTRIC, PokemonType.FLYING, [ - [ Biome.POWER_PLANT, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.ZAPDOS, PokemonType.ELECTRIC, PokemonType.FLYING, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.MOLTRES, PokemonType.FIRE, PokemonType.FLYING, [ - [ Biome.VOLCANO, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.MOLTRES, PokemonType.FIRE, PokemonType.FLYING, [ + [ BiomeId.VOLCANO, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.DRATINI, PokemonType.DRAGON, -1, [ - [ Biome.WASTELAND, BiomePoolTier.RARE ] + [ SpeciesId.DRATINI, PokemonType.DRAGON, -1, [ + [ BiomeId.WASTELAND, BiomePoolTier.RARE ] ] ], - [ Species.DRAGONAIR, PokemonType.DRAGON, -1, [ - [ Biome.WASTELAND, BiomePoolTier.RARE ] + [ SpeciesId.DRAGONAIR, PokemonType.DRAGON, -1, [ + [ BiomeId.WASTELAND, BiomePoolTier.RARE ] ] ], - [ Species.DRAGONITE, PokemonType.DRAGON, PokemonType.FLYING, [ - [ Biome.WASTELAND, BiomePoolTier.RARE ], - [ Biome.WASTELAND, BiomePoolTier.BOSS ] + [ SpeciesId.DRAGONITE, PokemonType.DRAGON, PokemonType.FLYING, [ + [ BiomeId.WASTELAND, BiomePoolTier.RARE ], + [ BiomeId.WASTELAND, BiomePoolTier.BOSS ] ] ], - [ Species.MEWTWO, PokemonType.PSYCHIC, -1, [ - [ Biome.LABORATORY, BiomePoolTier.BOSS_ULTRA_RARE ] + [ SpeciesId.MEWTWO, PokemonType.PSYCHIC, -1, [ + [ BiomeId.LABORATORY, BiomePoolTier.BOSS_ULTRA_RARE ] ] ], - [ Species.MEW, PokemonType.PSYCHIC, -1, [ ] + [ SpeciesId.MEW, PokemonType.PSYCHIC, -1, [ ] ], - [ Species.CHIKORITA, PokemonType.GRASS, -1, [ - [ Biome.TALL_GRASS, BiomePoolTier.RARE ] + [ SpeciesId.CHIKORITA, PokemonType.GRASS, -1, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.RARE ] ] ], - [ Species.BAYLEEF, PokemonType.GRASS, -1, [ - [ Biome.TALL_GRASS, BiomePoolTier.RARE ] + [ SpeciesId.BAYLEEF, PokemonType.GRASS, -1, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.RARE ] ] ], - [ Species.MEGANIUM, PokemonType.GRASS, -1, [ - [ Biome.TALL_GRASS, BiomePoolTier.RARE ], - [ Biome.TALL_GRASS, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.MEGANIUM, PokemonType.GRASS, -1, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.RARE ], + [ BiomeId.TALL_GRASS, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.CYNDAQUIL, PokemonType.FIRE, -1, [ - [ Biome.VOLCANO, BiomePoolTier.RARE ] + [ SpeciesId.CYNDAQUIL, PokemonType.FIRE, -1, [ + [ BiomeId.VOLCANO, BiomePoolTier.RARE ] ] ], - [ Species.QUILAVA, PokemonType.FIRE, -1, [ - [ Biome.VOLCANO, BiomePoolTier.RARE ] + [ SpeciesId.QUILAVA, PokemonType.FIRE, -1, [ + [ BiomeId.VOLCANO, BiomePoolTier.RARE ] ] ], - [ Species.TYPHLOSION, PokemonType.FIRE, -1, [ - [ Biome.VOLCANO, BiomePoolTier.RARE ], - [ Biome.VOLCANO, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.TYPHLOSION, PokemonType.FIRE, -1, [ + [ BiomeId.VOLCANO, BiomePoolTier.RARE ], + [ BiomeId.VOLCANO, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.TOTODILE, PokemonType.WATER, -1, [ - [ Biome.SWAMP, BiomePoolTier.RARE ] + [ SpeciesId.TOTODILE, PokemonType.WATER, -1, [ + [ BiomeId.SWAMP, BiomePoolTier.RARE ] ] ], - [ Species.CROCONAW, PokemonType.WATER, -1, [ - [ Biome.SWAMP, BiomePoolTier.RARE ] + [ SpeciesId.CROCONAW, PokemonType.WATER, -1, [ + [ BiomeId.SWAMP, BiomePoolTier.RARE ] ] ], - [ Species.FERALIGATR, PokemonType.WATER, -1, [ - [ Biome.SWAMP, BiomePoolTier.RARE ], - [ Biome.SWAMP, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.FERALIGATR, PokemonType.WATER, -1, [ + [ BiomeId.SWAMP, BiomePoolTier.RARE ], + [ BiomeId.SWAMP, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.SENTRET, PokemonType.NORMAL, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.SENTRET, PokemonType.NORMAL, -1, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.FURRET, PokemonType.NORMAL, -1, [ - [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.PLAINS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.FURRET, PokemonType.NORMAL, -1, [ + [ BiomeId.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.PLAINS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.HOOTHOOT, PokemonType.NORMAL, PokemonType.FLYING, [ - [ Biome.TOWN, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], - [ Biome.FOREST, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ] + [ SpeciesId.HOOTHOOT, PokemonType.NORMAL, PokemonType.FLYING, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], + [ BiomeId.FOREST, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ] ] ], - [ Species.NOCTOWL, PokemonType.NORMAL, PokemonType.FLYING, [ - [ Biome.FOREST, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ], - [ Biome.FOREST, BiomePoolTier.BOSS, TimeOfDay.NIGHT ] + [ SpeciesId.NOCTOWL, PokemonType.NORMAL, PokemonType.FLYING, [ + [ BiomeId.FOREST, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ], + [ BiomeId.FOREST, BiomePoolTier.BOSS, TimeOfDay.NIGHT ] ] ], - [ Species.LEDYBA, PokemonType.BUG, PokemonType.FLYING, [ - [ Biome.TOWN, BiomePoolTier.COMMON, TimeOfDay.DAWN ], - [ Biome.MEADOW, BiomePoolTier.COMMON, TimeOfDay.DAWN ] + [ SpeciesId.LEDYBA, PokemonType.BUG, PokemonType.FLYING, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON, TimeOfDay.DAWN ], + [ BiomeId.MEADOW, BiomePoolTier.COMMON, TimeOfDay.DAWN ] ] ], - [ Species.LEDIAN, PokemonType.BUG, PokemonType.FLYING, [ - [ Biome.MEADOW, BiomePoolTier.COMMON, TimeOfDay.DAWN ], - [ Biome.MEADOW, BiomePoolTier.BOSS, TimeOfDay.DAWN ] + [ SpeciesId.LEDIAN, PokemonType.BUG, PokemonType.FLYING, [ + [ BiomeId.MEADOW, BiomePoolTier.COMMON, TimeOfDay.DAWN ], + [ BiomeId.MEADOW, BiomePoolTier.BOSS, TimeOfDay.DAWN ] ] ], - [ Species.SPINARAK, PokemonType.BUG, PokemonType.POISON, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, TimeOfDay.DUSK ], - [ Biome.TOWN, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], - [ Biome.TALL_GRASS, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ], - [ Biome.FOREST, BiomePoolTier.UNCOMMON, TimeOfDay.DUSK ], - [ Biome.FOREST, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON, TimeOfDay.DUSK ], - [ Biome.JUNGLE, BiomePoolTier.COMMON, TimeOfDay.NIGHT ] + [ SpeciesId.SPINARAK, PokemonType.BUG, PokemonType.POISON, [ + [ BiomeId.TOWN, BiomePoolTier.UNCOMMON, TimeOfDay.DUSK ], + [ BiomeId.TOWN, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], + [ BiomeId.TALL_GRASS, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ], + [ BiomeId.FOREST, BiomePoolTier.UNCOMMON, TimeOfDay.DUSK ], + [ BiomeId.FOREST, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], + [ BiomeId.JUNGLE, BiomePoolTier.UNCOMMON, TimeOfDay.DUSK ], + [ BiomeId.JUNGLE, BiomePoolTier.COMMON, TimeOfDay.NIGHT ] ] ], - [ Species.ARIADOS, PokemonType.BUG, PokemonType.POISON, [ - [ Biome.TALL_GRASS, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ], - [ Biome.FOREST, BiomePoolTier.UNCOMMON, TimeOfDay.DUSK ], - [ Biome.FOREST, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], - [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON, TimeOfDay.DUSK ], - [ Biome.JUNGLE, BiomePoolTier.COMMON, TimeOfDay.NIGHT ] + [ SpeciesId.ARIADOS, PokemonType.BUG, PokemonType.POISON, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ], + [ BiomeId.FOREST, BiomePoolTier.UNCOMMON, TimeOfDay.DUSK ], + [ BiomeId.FOREST, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], + [ BiomeId.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.JUNGLE, BiomePoolTier.UNCOMMON, TimeOfDay.DUSK ], + [ BiomeId.JUNGLE, BiomePoolTier.COMMON, TimeOfDay.NIGHT ] ] ], - [ Species.CROBAT, PokemonType.POISON, PokemonType.FLYING, [ - [ Biome.CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.CROBAT, PokemonType.POISON, PokemonType.FLYING, [ + [ BiomeId.CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.CHINCHOU, PokemonType.WATER, PokemonType.ELECTRIC, [ - [ Biome.SEA, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ], - [ Biome.SEABED, BiomePoolTier.COMMON ] + [ SpeciesId.CHINCHOU, PokemonType.WATER, PokemonType.ELECTRIC, [ + [ BiomeId.SEA, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ], + [ BiomeId.SEABED, BiomePoolTier.COMMON ] ] ], - [ Species.LANTURN, PokemonType.WATER, PokemonType.ELECTRIC, [ - [ Biome.SEA, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ], - [ Biome.SEABED, BiomePoolTier.COMMON ], - [ Biome.SEABED, BiomePoolTier.BOSS ] + [ SpeciesId.LANTURN, PokemonType.WATER, PokemonType.ELECTRIC, [ + [ BiomeId.SEA, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ], + [ BiomeId.SEABED, BiomePoolTier.COMMON ], + [ BiomeId.SEABED, BiomePoolTier.BOSS ] ] ], - [ Species.PICHU, PokemonType.ELECTRIC, -1, [ ] + [ SpeciesId.PICHU, PokemonType.ELECTRIC, -1, [ ] ], - [ Species.CLEFFA, PokemonType.FAIRY, -1, [ ] + [ SpeciesId.CLEFFA, PokemonType.FAIRY, -1, [ ] ], - [ Species.IGGLYBUFF, PokemonType.NORMAL, PokemonType.FAIRY, [ ] + [ SpeciesId.IGGLYBUFF, PokemonType.NORMAL, PokemonType.FAIRY, [ ] ], - [ Species.TOGEPI, PokemonType.FAIRY, -1, [ ] + [ SpeciesId.TOGEPI, PokemonType.FAIRY, -1, [ ] ], - [ Species.TOGETIC, PokemonType.FAIRY, PokemonType.FLYING, [ - [ Biome.FAIRY_CAVE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.TOGETIC, PokemonType.FAIRY, PokemonType.FLYING, [ + [ BiomeId.FAIRY_CAVE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.NATU, PokemonType.PSYCHIC, PokemonType.FLYING, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON ], - [ Biome.RUINS, BiomePoolTier.COMMON ], - [ Biome.TEMPLE, BiomePoolTier.COMMON ] + [ SpeciesId.NATU, PokemonType.PSYCHIC, PokemonType.FLYING, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON ], + [ BiomeId.RUINS, BiomePoolTier.COMMON ], + [ BiomeId.TEMPLE, BiomePoolTier.COMMON ] ] ], - [ Species.XATU, PokemonType.PSYCHIC, PokemonType.FLYING, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON ], - [ Biome.RUINS, BiomePoolTier.COMMON ], - [ Biome.RUINS, BiomePoolTier.BOSS ], - [ Biome.TEMPLE, BiomePoolTier.COMMON ] + [ SpeciesId.XATU, PokemonType.PSYCHIC, PokemonType.FLYING, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON ], + [ BiomeId.RUINS, BiomePoolTier.COMMON ], + [ BiomeId.RUINS, BiomePoolTier.BOSS ], + [ BiomeId.TEMPLE, BiomePoolTier.COMMON ] ] ], - [ Species.MAREEP, PokemonType.ELECTRIC, -1, [ - [ Biome.MEADOW, BiomePoolTier.UNCOMMON ], - [ Biome.POWER_PLANT, BiomePoolTier.RARE ] + [ SpeciesId.MAREEP, PokemonType.ELECTRIC, -1, [ + [ BiomeId.MEADOW, BiomePoolTier.UNCOMMON ], + [ BiomeId.POWER_PLANT, BiomePoolTier.RARE ] ] ], - [ Species.FLAAFFY, PokemonType.ELECTRIC, -1, [ - [ Biome.MEADOW, BiomePoolTier.UNCOMMON ], - [ Biome.POWER_PLANT, BiomePoolTier.RARE ] + [ SpeciesId.FLAAFFY, PokemonType.ELECTRIC, -1, [ + [ BiomeId.MEADOW, BiomePoolTier.UNCOMMON ], + [ BiomeId.POWER_PLANT, BiomePoolTier.RARE ] ] ], - [ Species.AMPHAROS, PokemonType.ELECTRIC, -1, [ - [ Biome.MEADOW, BiomePoolTier.UNCOMMON ], - [ Biome.POWER_PLANT, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.AMPHAROS, PokemonType.ELECTRIC, -1, [ + [ BiomeId.MEADOW, BiomePoolTier.UNCOMMON ], + [ BiomeId.POWER_PLANT, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.BELLOSSOM, PokemonType.GRASS, -1, [ - [ Biome.TALL_GRASS, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.BELLOSSOM, PokemonType.GRASS, -1, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.MARILL, PokemonType.WATER, PokemonType.FAIRY, [ - [ Biome.LAKE, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.FAIRY_CAVE, BiomePoolTier.COMMON ] + [ SpeciesId.MARILL, PokemonType.WATER, PokemonType.FAIRY, [ + [ BiomeId.LAKE, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.FAIRY_CAVE, BiomePoolTier.COMMON ] ] ], - [ Species.AZUMARILL, PokemonType.WATER, PokemonType.FAIRY, [ - [ Biome.LAKE, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.LAKE, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.FAIRY_CAVE, BiomePoolTier.COMMON ] + [ SpeciesId.AZUMARILL, PokemonType.WATER, PokemonType.FAIRY, [ + [ BiomeId.LAKE, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.LAKE, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.FAIRY_CAVE, BiomePoolTier.COMMON ] ] ], - [ Species.SUDOWOODO, PokemonType.ROCK, -1, [ - [ Biome.GRASS, BiomePoolTier.SUPER_RARE ], - [ Biome.GRASS, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.SUDOWOODO, PokemonType.ROCK, -1, [ + [ BiomeId.GRASS, BiomePoolTier.SUPER_RARE ], + [ BiomeId.GRASS, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.POLITOED, PokemonType.WATER, -1, [ - [ Biome.SWAMP, BiomePoolTier.SUPER_RARE ], - [ Biome.SWAMP, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.POLITOED, PokemonType.WATER, -1, [ + [ BiomeId.SWAMP, BiomePoolTier.SUPER_RARE ], + [ BiomeId.SWAMP, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.HOPPIP, PokemonType.GRASS, PokemonType.FLYING, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.HOPPIP, PokemonType.GRASS, PokemonType.FLYING, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.SKIPLOOM, PokemonType.GRASS, PokemonType.FLYING, [ - [ Biome.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.SKIPLOOM, PokemonType.GRASS, PokemonType.FLYING, [ + [ BiomeId.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.JUMPLUFF, PokemonType.GRASS, PokemonType.FLYING, [ - [ Biome.GRASS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.JUMPLUFF, PokemonType.GRASS, PokemonType.FLYING, [ + [ BiomeId.GRASS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.AIPOM, PokemonType.NORMAL, -1, [ - [ Biome.JUNGLE, BiomePoolTier.COMMON ] + [ SpeciesId.AIPOM, PokemonType.NORMAL, -1, [ + [ BiomeId.JUNGLE, BiomePoolTier.COMMON ] ] ], - [ Species.SUNKERN, PokemonType.GRASS, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.SUNKERN, PokemonType.GRASS, -1, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.SUNFLORA, PokemonType.GRASS, -1, [ - [ Biome.GRASS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.SUNFLORA, PokemonType.GRASS, -1, [ + [ BiomeId.GRASS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.YANMA, PokemonType.BUG, PokemonType.FLYING, [ - [ Biome.JUNGLE, BiomePoolTier.RARE ] + [ SpeciesId.YANMA, PokemonType.BUG, PokemonType.FLYING, [ + [ BiomeId.JUNGLE, BiomePoolTier.RARE ] ] ], - [ Species.WOOPER, PokemonType.WATER, PokemonType.GROUND, [ - [ Biome.LAKE, BiomePoolTier.UNCOMMON ], - [ Biome.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.WOOPER, PokemonType.WATER, PokemonType.GROUND, [ + [ BiomeId.LAKE, BiomePoolTier.UNCOMMON ], + [ BiomeId.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.QUAGSIRE, PokemonType.WATER, PokemonType.GROUND, [ - [ Biome.LAKE, BiomePoolTier.UNCOMMON ], - [ Biome.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.SWAMP, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.QUAGSIRE, PokemonType.WATER, PokemonType.GROUND, [ + [ BiomeId.LAKE, BiomePoolTier.UNCOMMON ], + [ BiomeId.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.SWAMP, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.ESPEON, PokemonType.PSYCHIC, -1, [ - [ Biome.RUINS, BiomePoolTier.SUPER_RARE, TimeOfDay.DAY ], - [ Biome.RUINS, BiomePoolTier.BOSS_RARE, TimeOfDay.DAY ] + [ SpeciesId.ESPEON, PokemonType.PSYCHIC, -1, [ + [ BiomeId.RUINS, BiomePoolTier.SUPER_RARE, TimeOfDay.DAY ], + [ BiomeId.RUINS, BiomePoolTier.BOSS_RARE, TimeOfDay.DAY ] ] ], - [ Species.UMBREON, PokemonType.DARK, -1, [ - [ Biome.ABYSS, BiomePoolTier.SUPER_RARE ], - [ Biome.ABYSS, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.UMBREON, PokemonType.DARK, -1, [ + [ BiomeId.ABYSS, BiomePoolTier.SUPER_RARE ], + [ BiomeId.ABYSS, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.MURKROW, PokemonType.DARK, PokemonType.FLYING, [ - [ Biome.MOUNTAIN, BiomePoolTier.RARE, TimeOfDay.NIGHT ], - [ Biome.ABYSS, BiomePoolTier.COMMON ] + [ SpeciesId.MURKROW, PokemonType.DARK, PokemonType.FLYING, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.RARE, TimeOfDay.NIGHT ], + [ BiomeId.ABYSS, BiomePoolTier.COMMON ] ] ], - [ Species.SLOWKING, PokemonType.WATER, PokemonType.PSYCHIC, [ - [ Biome.LAKE, BiomePoolTier.SUPER_RARE ], - [ Biome.LAKE, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.SLOWKING, PokemonType.WATER, PokemonType.PSYCHIC, [ + [ BiomeId.LAKE, BiomePoolTier.SUPER_RARE ], + [ BiomeId.LAKE, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.MISDREAVUS, PokemonType.GHOST, -1, [ - [ Biome.GRAVEYARD, BiomePoolTier.RARE ] + [ SpeciesId.MISDREAVUS, PokemonType.GHOST, -1, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.RARE ] ] ], - [ Species.UNOWN, PokemonType.PSYCHIC, -1, [ - [ Biome.RUINS, BiomePoolTier.COMMON ] + [ SpeciesId.UNOWN, PokemonType.PSYCHIC, -1, [ + [ BiomeId.RUINS, BiomePoolTier.COMMON ] ] ], - [ Species.WOBBUFFET, PokemonType.PSYCHIC, -1, [ - [ Biome.RUINS, BiomePoolTier.RARE ], - [ Biome.RUINS, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.WOBBUFFET, PokemonType.PSYCHIC, -1, [ + [ BiomeId.RUINS, BiomePoolTier.RARE ], + [ BiomeId.RUINS, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.GIRAFARIG, PokemonType.NORMAL, PokemonType.PSYCHIC, [ - [ Biome.TALL_GRASS, BiomePoolTier.RARE ] + [ SpeciesId.GIRAFARIG, PokemonType.NORMAL, PokemonType.PSYCHIC, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.RARE ] ] ], - [ Species.PINECO, PokemonType.BUG, -1, [ - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.PINECO, PokemonType.BUG, -1, [ + [ BiomeId.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.FORRETRESS, PokemonType.BUG, PokemonType.STEEL, [ - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.FORRETRESS, PokemonType.BUG, PokemonType.STEEL, [ + [ BiomeId.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.DUNSPARCE, PokemonType.NORMAL, -1, [ - [ Biome.PLAINS, BiomePoolTier.SUPER_RARE ] + [ SpeciesId.DUNSPARCE, PokemonType.NORMAL, -1, [ + [ BiomeId.PLAINS, BiomePoolTier.SUPER_RARE ] ] ], - [ Species.GLIGAR, PokemonType.GROUND, PokemonType.FLYING, [ - [ Biome.BADLANDS, BiomePoolTier.RARE ] + [ SpeciesId.GLIGAR, PokemonType.GROUND, PokemonType.FLYING, [ + [ BiomeId.BADLANDS, BiomePoolTier.RARE ] ] ], - [ Species.STEELIX, PokemonType.STEEL, PokemonType.GROUND, [ - [ Biome.BADLANDS, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.STEELIX, PokemonType.STEEL, PokemonType.GROUND, [ + [ BiomeId.BADLANDS, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.SNUBBULL, PokemonType.FAIRY, -1, [ - [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.SNUBBULL, PokemonType.FAIRY, -1, [ + [ BiomeId.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.GRANBULL, PokemonType.FAIRY, -1, [ - [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.MEADOW, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.GRANBULL, PokemonType.FAIRY, -1, [ + [ BiomeId.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.MEADOW, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.QWILFISH, PokemonType.WATER, PokemonType.POISON, [ - [ Biome.SEABED, BiomePoolTier.RARE ], - [ Biome.SEABED, BiomePoolTier.BOSS ] + [ SpeciesId.QWILFISH, PokemonType.WATER, PokemonType.POISON, [ + [ BiomeId.SEABED, BiomePoolTier.RARE ], + [ BiomeId.SEABED, BiomePoolTier.BOSS ] ] ], - [ Species.SCIZOR, PokemonType.BUG, PokemonType.STEEL, [ - [ Biome.JUNGLE, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.SCIZOR, PokemonType.BUG, PokemonType.STEEL, [ + [ BiomeId.JUNGLE, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.SHUCKLE, PokemonType.BUG, PokemonType.ROCK, [ - [ Biome.CAVE, BiomePoolTier.SUPER_RARE ], - [ Biome.CAVE, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.SHUCKLE, PokemonType.BUG, PokemonType.ROCK, [ + [ BiomeId.CAVE, BiomePoolTier.SUPER_RARE ], + [ BiomeId.CAVE, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.HERACROSS, PokemonType.BUG, PokemonType.FIGHTING, [ - [ Biome.FOREST, BiomePoolTier.RARE ], - [ Biome.FOREST, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.HERACROSS, PokemonType.BUG, PokemonType.FIGHTING, [ + [ BiomeId.FOREST, BiomePoolTier.RARE ], + [ BiomeId.FOREST, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.SNEASEL, PokemonType.DARK, PokemonType.ICE, [ - [ Biome.ICE_CAVE, BiomePoolTier.UNCOMMON ], - [ Biome.SNOWY_FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.SNOWY_FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.SNEASEL, PokemonType.DARK, PokemonType.ICE, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.UNCOMMON ], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.TEDDIURSA, PokemonType.NORMAL, -1, [ - [ Biome.FOREST, BiomePoolTier.UNCOMMON ], - [ Biome.CAVE, BiomePoolTier.COMMON ], - [ Biome.SNOWY_FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.SNOWY_FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.TEDDIURSA, PokemonType.NORMAL, -1, [ + [ BiomeId.FOREST, BiomePoolTier.UNCOMMON ], + [ BiomeId.CAVE, BiomePoolTier.COMMON ], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.URSARING, PokemonType.NORMAL, -1, [ - [ Biome.FOREST, BiomePoolTier.UNCOMMON ], - [ Biome.CAVE, BiomePoolTier.COMMON ], - [ Biome.CAVE, BiomePoolTier.BOSS ], - [ Biome.SNOWY_FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.SNOWY_FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.URSARING, PokemonType.NORMAL, -1, [ + [ BiomeId.FOREST, BiomePoolTier.UNCOMMON ], + [ BiomeId.CAVE, BiomePoolTier.COMMON ], + [ BiomeId.CAVE, BiomePoolTier.BOSS ], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.SLUGMA, PokemonType.FIRE, -1, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON ], - [ Biome.VOLCANO, BiomePoolTier.COMMON ] + [ SpeciesId.SLUGMA, PokemonType.FIRE, -1, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON ], + [ BiomeId.VOLCANO, BiomePoolTier.COMMON ] ] ], - [ Species.MAGCARGO, PokemonType.FIRE, PokemonType.ROCK, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON ], - [ Biome.VOLCANO, BiomePoolTier.COMMON ], - [ Biome.VOLCANO, BiomePoolTier.BOSS ] + [ SpeciesId.MAGCARGO, PokemonType.FIRE, PokemonType.ROCK, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON ], + [ BiomeId.VOLCANO, BiomePoolTier.COMMON ], + [ BiomeId.VOLCANO, BiomePoolTier.BOSS ] ] ], - [ Species.SWINUB, PokemonType.ICE, PokemonType.GROUND, [ - [ Biome.ICE_CAVE, BiomePoolTier.COMMON ], - [ Biome.SNOWY_FOREST, BiomePoolTier.COMMON ] + [ SpeciesId.SWINUB, PokemonType.ICE, PokemonType.GROUND, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.COMMON ], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.COMMON ] ] ], - [ Species.PILOSWINE, PokemonType.ICE, PokemonType.GROUND, [ - [ Biome.ICE_CAVE, BiomePoolTier.COMMON ], - [ Biome.SNOWY_FOREST, BiomePoolTier.COMMON ] + [ SpeciesId.PILOSWINE, PokemonType.ICE, PokemonType.GROUND, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.COMMON ], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.COMMON ] ] ], - [ Species.CORSOLA, PokemonType.WATER, PokemonType.ROCK, [ - [ Biome.SEABED, BiomePoolTier.RARE ], - [ Biome.SEABED, BiomePoolTier.BOSS ] + [ SpeciesId.CORSOLA, PokemonType.WATER, PokemonType.ROCK, [ + [ BiomeId.SEABED, BiomePoolTier.RARE ], + [ BiomeId.SEABED, BiomePoolTier.BOSS ] ] ], - [ Species.REMORAID, PokemonType.WATER, -1, [ - [ Biome.SEABED, BiomePoolTier.COMMON ] + [ SpeciesId.REMORAID, PokemonType.WATER, -1, [ + [ BiomeId.SEABED, BiomePoolTier.COMMON ] ] ], - [ Species.OCTILLERY, PokemonType.WATER, -1, [ - [ Biome.SEABED, BiomePoolTier.RARE ], - [ Biome.SEABED, BiomePoolTier.BOSS ] + [ SpeciesId.OCTILLERY, PokemonType.WATER, -1, [ + [ BiomeId.SEABED, BiomePoolTier.RARE ], + [ BiomeId.SEABED, BiomePoolTier.BOSS ] ] ], - [ Species.DELIBIRD, PokemonType.ICE, PokemonType.FLYING, [ - [ Biome.ICE_CAVE, BiomePoolTier.SUPER_RARE ], - [ Biome.SNOWY_FOREST, BiomePoolTier.RARE ] + [ SpeciesId.DELIBIRD, PokemonType.ICE, PokemonType.FLYING, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.SUPER_RARE ], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.RARE ] ] ], - [ Species.MANTINE, PokemonType.WATER, PokemonType.FLYING, [ - [ Biome.SEABED, BiomePoolTier.RARE ], - [ Biome.SEABED, BiomePoolTier.BOSS ] + [ SpeciesId.MANTINE, PokemonType.WATER, PokemonType.FLYING, [ + [ BiomeId.SEABED, BiomePoolTier.RARE ], + [ BiomeId.SEABED, BiomePoolTier.BOSS ] ] ], - [ Species.SKARMORY, PokemonType.STEEL, PokemonType.FLYING, [ - [ Biome.MOUNTAIN, BiomePoolTier.RARE ], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS ] + [ SpeciesId.SKARMORY, PokemonType.STEEL, PokemonType.FLYING, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.RARE ], + [ BiomeId.MOUNTAIN, BiomePoolTier.BOSS ] ] ], - [ Species.HOUNDOUR, PokemonType.DARK, PokemonType.FIRE, [ - [ Biome.METROPOLIS, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], - [ Biome.ABYSS, BiomePoolTier.COMMON ] + [ SpeciesId.HOUNDOUR, PokemonType.DARK, PokemonType.FIRE, [ + [ BiomeId.METROPOLIS, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], + [ BiomeId.ABYSS, BiomePoolTier.COMMON ] ] ], - [ Species.HOUNDOOM, PokemonType.DARK, PokemonType.FIRE, [ - [ Biome.METROPOLIS, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], - [ Biome.ABYSS, BiomePoolTier.COMMON ], - [ Biome.ABYSS, BiomePoolTier.BOSS ] + [ SpeciesId.HOUNDOOM, PokemonType.DARK, PokemonType.FIRE, [ + [ BiomeId.METROPOLIS, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], + [ BiomeId.ABYSS, BiomePoolTier.COMMON ], + [ BiomeId.ABYSS, BiomePoolTier.BOSS ] ] ], - [ Species.KINGDRA, PokemonType.WATER, PokemonType.DRAGON, [ - [ Biome.SEA, BiomePoolTier.SUPER_RARE ], - [ Biome.SEA, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.KINGDRA, PokemonType.WATER, PokemonType.DRAGON, [ + [ BiomeId.SEA, BiomePoolTier.SUPER_RARE ], + [ BiomeId.SEA, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.PHANPY, PokemonType.GROUND, -1, [ - [ Biome.BADLANDS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.PHANPY, PokemonType.GROUND, -1, [ + [ BiomeId.BADLANDS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.DONPHAN, PokemonType.GROUND, -1, [ - [ Biome.BADLANDS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.BADLANDS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.DONPHAN, PokemonType.GROUND, -1, [ + [ BiomeId.BADLANDS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.BADLANDS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.PORYGON2, PokemonType.NORMAL, -1, [ - [ Biome.FACTORY, BiomePoolTier.RARE ], - [ Biome.SPACE, BiomePoolTier.SUPER_RARE ], - [ Biome.LABORATORY, BiomePoolTier.RARE ] + [ SpeciesId.PORYGON2, PokemonType.NORMAL, -1, [ + [ BiomeId.FACTORY, BiomePoolTier.RARE ], + [ BiomeId.SPACE, BiomePoolTier.SUPER_RARE ], + [ BiomeId.LABORATORY, BiomePoolTier.RARE ] ] ], - [ Species.STANTLER, PokemonType.NORMAL, -1, [ - [ Biome.FOREST, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.FOREST, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.SNOWY_FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.STANTLER, PokemonType.NORMAL, -1, [ + [ BiomeId.FOREST, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.FOREST, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.SMEARGLE, PokemonType.NORMAL, -1, [ - [ Biome.METROPOLIS, BiomePoolTier.SUPER_RARE ] + [ SpeciesId.SMEARGLE, PokemonType.NORMAL, -1, [ + [ BiomeId.METROPOLIS, BiomePoolTier.SUPER_RARE ] ] ], - [ Species.TYROGUE, PokemonType.FIGHTING, -1, [ ] + [ SpeciesId.TYROGUE, PokemonType.FIGHTING, -1, [ ] ], - [ Species.HITMONTOP, PokemonType.FIGHTING, -1, [ - [ Biome.DOJO, BiomePoolTier.SUPER_RARE ], - [ Biome.DOJO, BiomePoolTier.BOSS_RARE ], - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.SUPER_RARE ] + [ SpeciesId.HITMONTOP, PokemonType.FIGHTING, -1, [ + [ BiomeId.DOJO, BiomePoolTier.SUPER_RARE ], + [ BiomeId.DOJO, BiomePoolTier.BOSS_RARE ], + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.SUPER_RARE ] ] ], - [ Species.SMOOCHUM, PokemonType.ICE, PokemonType.PSYCHIC, [ ] + [ SpeciesId.SMOOCHUM, PokemonType.ICE, PokemonType.PSYCHIC, [ ] ], - [ Species.ELEKID, PokemonType.ELECTRIC, -1, [ ] + [ SpeciesId.ELEKID, PokemonType.ELECTRIC, -1, [ ] ], - [ Species.MAGBY, PokemonType.FIRE, -1, [ ] + [ SpeciesId.MAGBY, PokemonType.FIRE, -1, [ ] ], - [ Species.MILTANK, PokemonType.NORMAL, -1, [ - [ Biome.MEADOW, BiomePoolTier.RARE ], - [ Biome.MEADOW, BiomePoolTier.BOSS ] + [ SpeciesId.MILTANK, PokemonType.NORMAL, -1, [ + [ BiomeId.MEADOW, BiomePoolTier.RARE ], + [ BiomeId.MEADOW, BiomePoolTier.BOSS ] ] ], - [ Species.BLISSEY, PokemonType.NORMAL, -1, [ - [ Biome.MEADOW, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.BLISSEY, PokemonType.NORMAL, -1, [ + [ BiomeId.MEADOW, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.RAIKOU, PokemonType.ELECTRIC, -1, [ - [ Biome.POWER_PLANT, BiomePoolTier.ULTRA_RARE ], - [ Biome.POWER_PLANT, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.RAIKOU, PokemonType.ELECTRIC, -1, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.POWER_PLANT, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.ENTEI, PokemonType.FIRE, -1, [ - [ Biome.VOLCANO, BiomePoolTier.ULTRA_RARE ], - [ Biome.VOLCANO, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.ENTEI, PokemonType.FIRE, -1, [ + [ BiomeId.VOLCANO, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.VOLCANO, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.SUICUNE, PokemonType.WATER, -1, [ - [ Biome.LAKE, BiomePoolTier.ULTRA_RARE ], - [ Biome.LAKE, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.SUICUNE, PokemonType.WATER, -1, [ + [ BiomeId.LAKE, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.LAKE, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.LARVITAR, PokemonType.ROCK, PokemonType.GROUND, [ - [ Biome.MOUNTAIN, BiomePoolTier.SUPER_RARE ], - [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.LARVITAR, PokemonType.ROCK, PokemonType.GROUND, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.SUPER_RARE ], + [ BiomeId.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.PUPITAR, PokemonType.ROCK, PokemonType.GROUND, [ - [ Biome.MOUNTAIN, BiomePoolTier.SUPER_RARE ], - [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.PUPITAR, PokemonType.ROCK, PokemonType.GROUND, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.SUPER_RARE ], + [ BiomeId.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.TYRANITAR, PokemonType.ROCK, PokemonType.DARK, [ - [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.WASTELAND, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.TYRANITAR, PokemonType.ROCK, PokemonType.DARK, [ + [ BiomeId.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.WASTELAND, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.LUGIA, PokemonType.PSYCHIC, PokemonType.FLYING, [ - [ Biome.SEA, BiomePoolTier.BOSS_ULTRA_RARE ] + [ SpeciesId.LUGIA, PokemonType.PSYCHIC, PokemonType.FLYING, [ + [ BiomeId.SEA, BiomePoolTier.BOSS_ULTRA_RARE ] ] ], - [ Species.HO_OH, PokemonType.FIRE, PokemonType.FLYING, [ - [ Biome.MOUNTAIN, BiomePoolTier.BOSS_ULTRA_RARE ] + [ SpeciesId.HO_OH, PokemonType.FIRE, PokemonType.FLYING, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.BOSS_ULTRA_RARE ] ] ], - [ Species.CELEBI, PokemonType.PSYCHIC, PokemonType.GRASS, [ ] + [ SpeciesId.CELEBI, PokemonType.PSYCHIC, PokemonType.GRASS, [ ] ], - [ Species.TREECKO, PokemonType.GRASS, -1, [ - [ Biome.FOREST, BiomePoolTier.RARE ] + [ SpeciesId.TREECKO, PokemonType.GRASS, -1, [ + [ BiomeId.FOREST, BiomePoolTier.RARE ] ] ], - [ Species.GROVYLE, PokemonType.GRASS, -1, [ - [ Biome.FOREST, BiomePoolTier.RARE ] + [ SpeciesId.GROVYLE, PokemonType.GRASS, -1, [ + [ BiomeId.FOREST, BiomePoolTier.RARE ] ] ], - [ Species.SCEPTILE, PokemonType.GRASS, -1, [ - [ Biome.FOREST, BiomePoolTier.RARE ], - [ Biome.FOREST, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.SCEPTILE, PokemonType.GRASS, -1, [ + [ BiomeId.FOREST, BiomePoolTier.RARE ], + [ BiomeId.FOREST, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.TORCHIC, PokemonType.FIRE, -1, [ - [ Biome.MOUNTAIN, BiomePoolTier.RARE ] + [ SpeciesId.TORCHIC, PokemonType.FIRE, -1, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.RARE ] ] ], - [ Species.COMBUSKEN, PokemonType.FIRE, PokemonType.FIGHTING, [ - [ Biome.MOUNTAIN, BiomePoolTier.RARE ] + [ SpeciesId.COMBUSKEN, PokemonType.FIRE, PokemonType.FIGHTING, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.RARE ] ] ], - [ Species.BLAZIKEN, PokemonType.FIRE, PokemonType.FIGHTING, [ - [ Biome.MOUNTAIN, BiomePoolTier.RARE ], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.BLAZIKEN, PokemonType.FIRE, PokemonType.FIGHTING, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.RARE ], + [ BiomeId.MOUNTAIN, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.MUDKIP, PokemonType.WATER, -1, [ - [ Biome.SWAMP, BiomePoolTier.RARE ] + [ SpeciesId.MUDKIP, PokemonType.WATER, -1, [ + [ BiomeId.SWAMP, BiomePoolTier.RARE ] ] ], - [ Species.MARSHTOMP, PokemonType.WATER, PokemonType.GROUND, [ - [ Biome.SWAMP, BiomePoolTier.RARE ] + [ SpeciesId.MARSHTOMP, PokemonType.WATER, PokemonType.GROUND, [ + [ BiomeId.SWAMP, BiomePoolTier.RARE ] ] ], - [ Species.SWAMPERT, PokemonType.WATER, PokemonType.GROUND, [ - [ Biome.SWAMP, BiomePoolTier.RARE ], - [ Biome.SWAMP, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.SWAMPERT, PokemonType.WATER, PokemonType.GROUND, [ + [ BiomeId.SWAMP, BiomePoolTier.RARE ], + [ BiomeId.SWAMP, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.POOCHYENA, PokemonType.DARK, -1, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.POOCHYENA, PokemonType.DARK, -1, [ + [ BiomeId.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.MIGHTYENA, PokemonType.DARK, -1, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.PLAINS, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.MIGHTYENA, PokemonType.DARK, -1, [ + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.PLAINS, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.ZIGZAGOON, PokemonType.NORMAL, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON ], - [ Biome.PLAINS, BiomePoolTier.COMMON ], - [ Biome.METROPOLIS, BiomePoolTier.COMMON ] + [ SpeciesId.ZIGZAGOON, PokemonType.NORMAL, -1, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON ], + [ BiomeId.PLAINS, BiomePoolTier.COMMON ], + [ BiomeId.METROPOLIS, BiomePoolTier.COMMON ] ] ], - [ Species.LINOONE, PokemonType.NORMAL, -1, [ - [ Biome.PLAINS, BiomePoolTier.COMMON ], - [ Biome.PLAINS, BiomePoolTier.BOSS ], - [ Biome.METROPOLIS, BiomePoolTier.COMMON ] + [ SpeciesId.LINOONE, PokemonType.NORMAL, -1, [ + [ BiomeId.PLAINS, BiomePoolTier.COMMON ], + [ BiomeId.PLAINS, BiomePoolTier.BOSS ], + [ BiomeId.METROPOLIS, BiomePoolTier.COMMON ] ] ], - [ Species.WURMPLE, PokemonType.BUG, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON ] + [ SpeciesId.WURMPLE, PokemonType.BUG, -1, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON ] ] ], - [ Species.SILCOON, PokemonType.BUG, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON, TimeOfDay.DAY ] + [ SpeciesId.SILCOON, PokemonType.BUG, -1, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON, TimeOfDay.DAY ] ] ], - [ Species.BEAUTIFLY, PokemonType.BUG, PokemonType.FLYING, [ - [ Biome.FOREST, BiomePoolTier.COMMON, TimeOfDay.DAY ], - [ Biome.FOREST, BiomePoolTier.BOSS, TimeOfDay.DAY ] + [ SpeciesId.BEAUTIFLY, PokemonType.BUG, PokemonType.FLYING, [ + [ BiomeId.FOREST, BiomePoolTier.COMMON, TimeOfDay.DAY ], + [ BiomeId.FOREST, BiomePoolTier.BOSS, TimeOfDay.DAY ] ] ], - [ Species.CASCOON, PokemonType.BUG, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON, TimeOfDay.NIGHT ] + [ SpeciesId.CASCOON, PokemonType.BUG, -1, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON, TimeOfDay.NIGHT ] ] ], - [ Species.DUSTOX, PokemonType.BUG, PokemonType.POISON, [ - [ Biome.FOREST, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], - [ Biome.FOREST, BiomePoolTier.BOSS, TimeOfDay.NIGHT ] + [ SpeciesId.DUSTOX, PokemonType.BUG, PokemonType.POISON, [ + [ BiomeId.FOREST, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], + [ BiomeId.FOREST, BiomePoolTier.BOSS, TimeOfDay.NIGHT ] ] ], - [ Species.LOTAD, PokemonType.WATER, PokemonType.GRASS, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.LAKE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.LOTAD, PokemonType.WATER, PokemonType.GRASS, [ + [ BiomeId.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.LAKE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.LOMBRE, PokemonType.WATER, PokemonType.GRASS, [ - [ Biome.LAKE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.LOMBRE, PokemonType.WATER, PokemonType.GRASS, [ + [ BiomeId.LAKE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.LUDICOLO, PokemonType.WATER, PokemonType.GRASS, [ - [ Biome.SWAMP, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.LUDICOLO, PokemonType.WATER, PokemonType.GRASS, [ + [ BiomeId.SWAMP, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.SEEDOT, PokemonType.GRASS, -1, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.SEEDOT, PokemonType.GRASS, -1, [ + [ BiomeId.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.NUZLEAF, PokemonType.GRASS, PokemonType.DARK, [ - [ Biome.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.NUZLEAF, PokemonType.GRASS, PokemonType.DARK, [ + [ BiomeId.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.SHIFTRY, PokemonType.GRASS, PokemonType.DARK, [ - [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.SHIFTRY, PokemonType.GRASS, PokemonType.DARK, [ + [ BiomeId.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.TAILLOW, PokemonType.NORMAL, PokemonType.FLYING, [ - [ Biome.TOWN, BiomePoolTier.COMMON ], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.TAILLOW, PokemonType.NORMAL, PokemonType.FLYING, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON ], + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.SWELLOW, PokemonType.NORMAL, PokemonType.FLYING, [ - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.SWELLOW, PokemonType.NORMAL, PokemonType.FLYING, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.WINGULL, PokemonType.WATER, PokemonType.FLYING, [ - [ Biome.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.WINGULL, PokemonType.WATER, PokemonType.FLYING, [ + [ BiomeId.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.PELIPPER, PokemonType.WATER, PokemonType.FLYING, [ - [ Biome.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.SEA, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.PELIPPER, PokemonType.WATER, PokemonType.FLYING, [ + [ BiomeId.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.SEA, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.RALTS, PokemonType.PSYCHIC, PokemonType.FAIRY, [ - [ Biome.TOWN, BiomePoolTier.SUPER_RARE ], - [ Biome.MEADOW, BiomePoolTier.UNCOMMON ], - [ Biome.FAIRY_CAVE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.RALTS, PokemonType.PSYCHIC, PokemonType.FAIRY, [ + [ BiomeId.TOWN, BiomePoolTier.SUPER_RARE ], + [ BiomeId.MEADOW, BiomePoolTier.UNCOMMON ], + [ BiomeId.FAIRY_CAVE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.KIRLIA, PokemonType.PSYCHIC, PokemonType.FAIRY, [ - [ Biome.MEADOW, BiomePoolTier.UNCOMMON ], - [ Biome.FAIRY_CAVE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.KIRLIA, PokemonType.PSYCHIC, PokemonType.FAIRY, [ + [ BiomeId.MEADOW, BiomePoolTier.UNCOMMON ], + [ BiomeId.FAIRY_CAVE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.GARDEVOIR, PokemonType.PSYCHIC, PokemonType.FAIRY, [ - [ Biome.MEADOW, BiomePoolTier.UNCOMMON ], - [ Biome.MEADOW, BiomePoolTier.BOSS ], - [ Biome.FAIRY_CAVE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.GARDEVOIR, PokemonType.PSYCHIC, PokemonType.FAIRY, [ + [ BiomeId.MEADOW, BiomePoolTier.UNCOMMON ], + [ BiomeId.MEADOW, BiomePoolTier.BOSS ], + [ BiomeId.FAIRY_CAVE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.SURSKIT, PokemonType.BUG, PokemonType.WATER, [ - [ Biome.TOWN, BiomePoolTier.RARE ], - [ Biome.LAKE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.SURSKIT, PokemonType.BUG, PokemonType.WATER, [ + [ BiomeId.TOWN, BiomePoolTier.RARE ], + [ BiomeId.LAKE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.MASQUERAIN, PokemonType.BUG, PokemonType.FLYING, [ - [ Biome.LAKE, BiomePoolTier.UNCOMMON ], - [ Biome.LAKE, BiomePoolTier.BOSS ] + [ SpeciesId.MASQUERAIN, PokemonType.BUG, PokemonType.FLYING, [ + [ BiomeId.LAKE, BiomePoolTier.UNCOMMON ], + [ BiomeId.LAKE, BiomePoolTier.BOSS ] ] ], - [ Species.SHROOMISH, PokemonType.GRASS, -1, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.SHROOMISH, PokemonType.GRASS, -1, [ + [ BiomeId.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.BRELOOM, PokemonType.GRASS, PokemonType.FIGHTING, [ - [ Biome.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.BRELOOM, PokemonType.GRASS, PokemonType.FIGHTING, [ + [ BiomeId.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.SLAKOTH, PokemonType.NORMAL, -1, [ - [ Biome.JUNGLE, BiomePoolTier.RARE ] + [ SpeciesId.SLAKOTH, PokemonType.NORMAL, -1, [ + [ BiomeId.JUNGLE, BiomePoolTier.RARE ] ] ], - [ Species.VIGOROTH, PokemonType.NORMAL, -1, [ - [ Biome.JUNGLE, BiomePoolTier.RARE ] + [ SpeciesId.VIGOROTH, PokemonType.NORMAL, -1, [ + [ BiomeId.JUNGLE, BiomePoolTier.RARE ] ] ], - [ Species.SLAKING, PokemonType.NORMAL, -1, [ - [ Biome.JUNGLE, BiomePoolTier.RARE ], - [ Biome.JUNGLE, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.SLAKING, PokemonType.NORMAL, -1, [ + [ BiomeId.JUNGLE, BiomePoolTier.RARE ], + [ BiomeId.JUNGLE, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.NINCADA, PokemonType.BUG, PokemonType.GROUND, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON ], - [ Biome.TALL_GRASS, BiomePoolTier.COMMON ] + [ SpeciesId.NINCADA, PokemonType.BUG, PokemonType.GROUND, [ + [ BiomeId.TOWN, BiomePoolTier.UNCOMMON ], + [ BiomeId.TALL_GRASS, BiomePoolTier.COMMON ] ] ], - [ Species.NINJASK, PokemonType.BUG, PokemonType.FLYING, [ - [ Biome.TALL_GRASS, BiomePoolTier.COMMON ], - [ Biome.TALL_GRASS, BiomePoolTier.BOSS ] + [ SpeciesId.NINJASK, PokemonType.BUG, PokemonType.FLYING, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.COMMON ], + [ BiomeId.TALL_GRASS, BiomePoolTier.BOSS ] ] ], - [ Species.SHEDINJA, PokemonType.BUG, PokemonType.GHOST, [ - [ Biome.TALL_GRASS, BiomePoolTier.SUPER_RARE ] + [ SpeciesId.SHEDINJA, PokemonType.BUG, PokemonType.GHOST, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.SUPER_RARE ] ] ], - [ Species.WHISMUR, PokemonType.NORMAL, -1, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON ], - [ Biome.CAVE, BiomePoolTier.COMMON ] + [ SpeciesId.WHISMUR, PokemonType.NORMAL, -1, [ + [ BiomeId.TOWN, BiomePoolTier.UNCOMMON ], + [ BiomeId.CAVE, BiomePoolTier.COMMON ] ] ], - [ Species.LOUDRED, PokemonType.NORMAL, -1, [ - [ Biome.CAVE, BiomePoolTier.COMMON ] + [ SpeciesId.LOUDRED, PokemonType.NORMAL, -1, [ + [ BiomeId.CAVE, BiomePoolTier.COMMON ] ] ], - [ Species.EXPLOUD, PokemonType.NORMAL, -1, [ - [ Biome.CAVE, BiomePoolTier.COMMON ], - [ Biome.CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.EXPLOUD, PokemonType.NORMAL, -1, [ + [ BiomeId.CAVE, BiomePoolTier.COMMON ], + [ BiomeId.CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.MAKUHITA, PokemonType.FIGHTING, -1, [ - [ Biome.CAVE, BiomePoolTier.UNCOMMON ], - [ Biome.DOJO, BiomePoolTier.COMMON ] + [ SpeciesId.MAKUHITA, PokemonType.FIGHTING, -1, [ + [ BiomeId.CAVE, BiomePoolTier.UNCOMMON ], + [ BiomeId.DOJO, BiomePoolTier.COMMON ] ] ], - [ Species.HARIYAMA, PokemonType.FIGHTING, -1, [ - [ Biome.CAVE, BiomePoolTier.UNCOMMON ], - [ Biome.DOJO, BiomePoolTier.COMMON ], - [ Biome.DOJO, BiomePoolTier.BOSS ] + [ SpeciesId.HARIYAMA, PokemonType.FIGHTING, -1, [ + [ BiomeId.CAVE, BiomePoolTier.UNCOMMON ], + [ BiomeId.DOJO, BiomePoolTier.COMMON ], + [ BiomeId.DOJO, BiomePoolTier.BOSS ] ] ], - [ Species.AZURILL, PokemonType.NORMAL, PokemonType.FAIRY, [ ] + [ SpeciesId.AZURILL, PokemonType.NORMAL, PokemonType.FAIRY, [ ] ], - [ Species.NOSEPASS, PokemonType.ROCK, -1, [ - [ Biome.CAVE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.NOSEPASS, PokemonType.ROCK, -1, [ + [ BiomeId.CAVE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.SKITTY, PokemonType.NORMAL, -1, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.SKITTY, PokemonType.NORMAL, -1, [ + [ BiomeId.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.DELCATTY, PokemonType.NORMAL, -1, [ - [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.MEADOW, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.DELCATTY, PokemonType.NORMAL, -1, [ + [ BiomeId.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.MEADOW, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.SABLEYE, PokemonType.DARK, PokemonType.GHOST, [ - [ Biome.ABYSS, BiomePoolTier.COMMON ], - [ Biome.ABYSS, BiomePoolTier.BOSS ] + [ SpeciesId.SABLEYE, PokemonType.DARK, PokemonType.GHOST, [ + [ BiomeId.ABYSS, BiomePoolTier.COMMON ], + [ BiomeId.ABYSS, BiomePoolTier.BOSS ] ] ], - [ Species.MAWILE, PokemonType.STEEL, PokemonType.FAIRY, [ - [ Biome.FAIRY_CAVE, BiomePoolTier.COMMON ], - [ Biome.FAIRY_CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.MAWILE, PokemonType.STEEL, PokemonType.FAIRY, [ + [ BiomeId.FAIRY_CAVE, BiomePoolTier.COMMON ], + [ BiomeId.FAIRY_CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.ARON, PokemonType.STEEL, PokemonType.ROCK, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.ARON, PokemonType.STEEL, PokemonType.ROCK, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.LAIRON, PokemonType.STEEL, PokemonType.ROCK, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.LAIRON, PokemonType.STEEL, PokemonType.ROCK, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.AGGRON, PokemonType.STEEL, PokemonType.ROCK, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS ] + [ SpeciesId.AGGRON, PokemonType.STEEL, PokemonType.ROCK, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.MOUNTAIN, BiomePoolTier.BOSS ] ] ], - [ Species.MEDITITE, PokemonType.FIGHTING, PokemonType.PSYCHIC, [ - [ Biome.DOJO, BiomePoolTier.COMMON ] + [ SpeciesId.MEDITITE, PokemonType.FIGHTING, PokemonType.PSYCHIC, [ + [ BiomeId.DOJO, BiomePoolTier.COMMON ] ] ], - [ Species.MEDICHAM, PokemonType.FIGHTING, PokemonType.PSYCHIC, [ - [ Biome.DOJO, BiomePoolTier.COMMON ], - [ Biome.DOJO, BiomePoolTier.BOSS ] + [ SpeciesId.MEDICHAM, PokemonType.FIGHTING, PokemonType.PSYCHIC, [ + [ BiomeId.DOJO, BiomePoolTier.COMMON ], + [ BiomeId.DOJO, BiomePoolTier.BOSS ] ] ], - [ Species.ELECTRIKE, PokemonType.ELECTRIC, -1, [ - [ Biome.POWER_PLANT, BiomePoolTier.COMMON ] + [ SpeciesId.ELECTRIKE, PokemonType.ELECTRIC, -1, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.COMMON ] ] ], - [ Species.MANECTRIC, PokemonType.ELECTRIC, -1, [ - [ Biome.POWER_PLANT, BiomePoolTier.COMMON ], - [ Biome.POWER_PLANT, BiomePoolTier.BOSS ] + [ SpeciesId.MANECTRIC, PokemonType.ELECTRIC, -1, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.COMMON ], + [ BiomeId.POWER_PLANT, BiomePoolTier.BOSS ] ] ], - [ Species.PLUSLE, PokemonType.ELECTRIC, -1, [ - [ Biome.POWER_PLANT, BiomePoolTier.UNCOMMON ] + [ SpeciesId.PLUSLE, PokemonType.ELECTRIC, -1, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.UNCOMMON ] ] ], - [ Species.MINUN, PokemonType.ELECTRIC, -1, [ - [ Biome.POWER_PLANT, BiomePoolTier.UNCOMMON ] + [ SpeciesId.MINUN, PokemonType.ELECTRIC, -1, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.UNCOMMON ] ] ], - [ Species.VOLBEAT, PokemonType.BUG, -1, [ - [ Biome.MEADOW, BiomePoolTier.RARE, TimeOfDay.NIGHT ] + [ SpeciesId.VOLBEAT, PokemonType.BUG, -1, [ + [ BiomeId.MEADOW, BiomePoolTier.RARE, TimeOfDay.NIGHT ] ] ], - [ Species.ILLUMISE, PokemonType.BUG, -1, [ - [ Biome.MEADOW, BiomePoolTier.RARE, TimeOfDay.NIGHT ] + [ SpeciesId.ILLUMISE, PokemonType.BUG, -1, [ + [ BiomeId.MEADOW, BiomePoolTier.RARE, TimeOfDay.NIGHT ] ] ], - [ Species.ROSELIA, PokemonType.GRASS, PokemonType.POISON, [ - [ Biome.FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.MEADOW, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.ROSELIA, PokemonType.GRASS, PokemonType.POISON, [ + [ BiomeId.FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.MEADOW, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.GULPIN, PokemonType.POISON, -1, [ - [ Biome.SWAMP, BiomePoolTier.COMMON ] + [ SpeciesId.GULPIN, PokemonType.POISON, -1, [ + [ BiomeId.SWAMP, BiomePoolTier.COMMON ] ] ], - [ Species.SWALOT, PokemonType.POISON, -1, [ - [ Biome.SWAMP, BiomePoolTier.COMMON ], - [ Biome.SWAMP, BiomePoolTier.BOSS ] + [ SpeciesId.SWALOT, PokemonType.POISON, -1, [ + [ BiomeId.SWAMP, BiomePoolTier.COMMON ], + [ BiomeId.SWAMP, BiomePoolTier.BOSS ] ] ], - [ Species.CARVANHA, PokemonType.WATER, PokemonType.DARK, [ - [ Biome.SEA, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.CARVANHA, PokemonType.WATER, PokemonType.DARK, [ + [ BiomeId.SEA, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.SHARPEDO, PokemonType.WATER, PokemonType.DARK, [ - [ Biome.SEA, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.SEA, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.SHARPEDO, PokemonType.WATER, PokemonType.DARK, [ + [ BiomeId.SEA, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.SEA, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.WAILMER, PokemonType.WATER, -1, [ - [ Biome.SEA, BiomePoolTier.UNCOMMON ], - [ Biome.SEABED, BiomePoolTier.UNCOMMON ] + [ SpeciesId.WAILMER, PokemonType.WATER, -1, [ + [ BiomeId.SEA, BiomePoolTier.UNCOMMON ], + [ BiomeId.SEABED, BiomePoolTier.UNCOMMON ] ] ], - [ Species.WAILORD, PokemonType.WATER, -1, [ - [ Biome.SEA, BiomePoolTier.UNCOMMON ], - [ Biome.SEABED, BiomePoolTier.UNCOMMON ], - [ Biome.SEABED, BiomePoolTier.BOSS ] + [ SpeciesId.WAILORD, PokemonType.WATER, -1, [ + [ BiomeId.SEA, BiomePoolTier.UNCOMMON ], + [ BiomeId.SEABED, BiomePoolTier.UNCOMMON ], + [ BiomeId.SEABED, BiomePoolTier.BOSS ] ] ], - [ Species.NUMEL, PokemonType.FIRE, PokemonType.GROUND, [ - [ Biome.BADLANDS, BiomePoolTier.UNCOMMON ], - [ Biome.VOLCANO, BiomePoolTier.COMMON ] + [ SpeciesId.NUMEL, PokemonType.FIRE, PokemonType.GROUND, [ + [ BiomeId.BADLANDS, BiomePoolTier.UNCOMMON ], + [ BiomeId.VOLCANO, BiomePoolTier.COMMON ] ] ], - [ Species.CAMERUPT, PokemonType.FIRE, PokemonType.GROUND, [ - [ Biome.BADLANDS, BiomePoolTier.UNCOMMON ], - [ Biome.VOLCANO, BiomePoolTier.COMMON ], - [ Biome.VOLCANO, BiomePoolTier.BOSS ] + [ SpeciesId.CAMERUPT, PokemonType.FIRE, PokemonType.GROUND, [ + [ BiomeId.BADLANDS, BiomePoolTier.UNCOMMON ], + [ BiomeId.VOLCANO, BiomePoolTier.COMMON ], + [ BiomeId.VOLCANO, BiomePoolTier.BOSS ] ] ], - [ Species.TORKOAL, PokemonType.FIRE, -1, [ - [ Biome.VOLCANO, BiomePoolTier.UNCOMMON ], - [ Biome.VOLCANO, BiomePoolTier.BOSS ] + [ SpeciesId.TORKOAL, PokemonType.FIRE, -1, [ + [ BiomeId.VOLCANO, BiomePoolTier.UNCOMMON ], + [ BiomeId.VOLCANO, BiomePoolTier.BOSS ] ] ], - [ Species.SPOINK, PokemonType.PSYCHIC, -1, [ - [ Biome.MOUNTAIN, BiomePoolTier.RARE ], - [ Biome.RUINS, BiomePoolTier.COMMON ] + [ SpeciesId.SPOINK, PokemonType.PSYCHIC, -1, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.RARE ], + [ BiomeId.RUINS, BiomePoolTier.COMMON ] ] ], - [ Species.GRUMPIG, PokemonType.PSYCHIC, -1, [ - [ Biome.MOUNTAIN, BiomePoolTier.RARE ], - [ Biome.RUINS, BiomePoolTier.COMMON ], - [ Biome.RUINS, BiomePoolTier.BOSS ] + [ SpeciesId.GRUMPIG, PokemonType.PSYCHIC, -1, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.RARE ], + [ BiomeId.RUINS, BiomePoolTier.COMMON ], + [ BiomeId.RUINS, BiomePoolTier.BOSS ] ] ], - [ Species.SPINDA, PokemonType.NORMAL, -1, [ - [ Biome.MEADOW, BiomePoolTier.RARE ] + [ SpeciesId.SPINDA, PokemonType.NORMAL, -1, [ + [ BiomeId.MEADOW, BiomePoolTier.RARE ] ] ], - [ Species.TRAPINCH, PokemonType.GROUND, -1, [ - [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.TRAPINCH, PokemonType.GROUND, -1, [ + [ BiomeId.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.VIBRAVA, PokemonType.GROUND, PokemonType.DRAGON, [ - [ Biome.DESERT, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.WASTELAND, BiomePoolTier.COMMON ] + [ SpeciesId.VIBRAVA, PokemonType.GROUND, PokemonType.DRAGON, [ + [ BiomeId.DESERT, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.WASTELAND, BiomePoolTier.COMMON ] ] ], - [ Species.FLYGON, PokemonType.GROUND, PokemonType.DRAGON, [ - [ Biome.DESERT, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.WASTELAND, BiomePoolTier.COMMON ], - [ Biome.WASTELAND, BiomePoolTier.BOSS ] + [ SpeciesId.FLYGON, PokemonType.GROUND, PokemonType.DRAGON, [ + [ BiomeId.DESERT, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.WASTELAND, BiomePoolTier.COMMON ], + [ BiomeId.WASTELAND, BiomePoolTier.BOSS ] ] ], - [ Species.CACNEA, PokemonType.GRASS, -1, [ - [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.CACNEA, PokemonType.GRASS, -1, [ + [ BiomeId.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.CACTURNE, PokemonType.GRASS, PokemonType.DARK, [ - [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.DESERT, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.CACTURNE, PokemonType.GRASS, PokemonType.DARK, [ + [ BiomeId.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.DESERT, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.SWABLU, PokemonType.NORMAL, PokemonType.FLYING, [ - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.WASTELAND, BiomePoolTier.UNCOMMON ] + [ SpeciesId.SWABLU, PokemonType.NORMAL, PokemonType.FLYING, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.WASTELAND, BiomePoolTier.UNCOMMON ] ] ], - [ Species.ALTARIA, PokemonType.DRAGON, PokemonType.FLYING, [ - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.WASTELAND, BiomePoolTier.UNCOMMON ] + [ SpeciesId.ALTARIA, PokemonType.DRAGON, PokemonType.FLYING, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.WASTELAND, BiomePoolTier.UNCOMMON ] ] ], - [ Species.ZANGOOSE, PokemonType.NORMAL, -1, [ - [ Biome.TALL_GRASS, BiomePoolTier.RARE ], - [ Biome.TALL_GRASS, BiomePoolTier.BOSS ] + [ SpeciesId.ZANGOOSE, PokemonType.NORMAL, -1, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.RARE ], + [ BiomeId.TALL_GRASS, BiomePoolTier.BOSS ] ] ], - [ Species.SEVIPER, PokemonType.POISON, -1, [ - [ Biome.JUNGLE, BiomePoolTier.RARE ], - [ Biome.JUNGLE, BiomePoolTier.BOSS ] + [ SpeciesId.SEVIPER, PokemonType.POISON, -1, [ + [ BiomeId.JUNGLE, BiomePoolTier.RARE ], + [ BiomeId.JUNGLE, BiomePoolTier.BOSS ] ] ], - [ Species.LUNATONE, PokemonType.ROCK, PokemonType.PSYCHIC, [ - [ Biome.SPACE, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], - [ Biome.SPACE, BiomePoolTier.BOSS, TimeOfDay.NIGHT ] + [ SpeciesId.LUNATONE, PokemonType.ROCK, PokemonType.PSYCHIC, [ + [ BiomeId.SPACE, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], + [ BiomeId.SPACE, BiomePoolTier.BOSS, TimeOfDay.NIGHT ] ] ], - [ Species.SOLROCK, PokemonType.ROCK, PokemonType.PSYCHIC, [ - [ Biome.SPACE, BiomePoolTier.COMMON, TimeOfDay.DAY ], - [ Biome.SPACE, BiomePoolTier.BOSS, TimeOfDay.DAY ] + [ SpeciesId.SOLROCK, PokemonType.ROCK, PokemonType.PSYCHIC, [ + [ BiomeId.SPACE, BiomePoolTier.COMMON, TimeOfDay.DAY ], + [ BiomeId.SPACE, BiomePoolTier.BOSS, TimeOfDay.DAY ] ] ], - [ Species.BARBOACH, PokemonType.WATER, PokemonType.GROUND, [ - [ Biome.SWAMP, BiomePoolTier.UNCOMMON ] + [ SpeciesId.BARBOACH, PokemonType.WATER, PokemonType.GROUND, [ + [ BiomeId.SWAMP, BiomePoolTier.UNCOMMON ] ] ], - [ Species.WHISCASH, PokemonType.WATER, PokemonType.GROUND, [ - [ Biome.SWAMP, BiomePoolTier.UNCOMMON ], - [ Biome.SWAMP, BiomePoolTier.BOSS ] + [ SpeciesId.WHISCASH, PokemonType.WATER, PokemonType.GROUND, [ + [ BiomeId.SWAMP, BiomePoolTier.UNCOMMON ], + [ BiomeId.SWAMP, BiomePoolTier.BOSS ] ] ], - [ Species.CORPHISH, PokemonType.WATER, -1, [ - [ Biome.BEACH, BiomePoolTier.COMMON ] + [ SpeciesId.CORPHISH, PokemonType.WATER, -1, [ + [ BiomeId.BEACH, BiomePoolTier.COMMON ] ] ], - [ Species.CRAWDAUNT, PokemonType.WATER, PokemonType.DARK, [ - [ Biome.BEACH, BiomePoolTier.COMMON ], - [ Biome.BEACH, BiomePoolTier.BOSS ] + [ SpeciesId.CRAWDAUNT, PokemonType.WATER, PokemonType.DARK, [ + [ BiomeId.BEACH, BiomePoolTier.COMMON ], + [ BiomeId.BEACH, BiomePoolTier.BOSS ] ] ], - [ Species.BALTOY, PokemonType.GROUND, PokemonType.PSYCHIC, [ - [ Biome.RUINS, BiomePoolTier.COMMON ], - [ Biome.SPACE, BiomePoolTier.UNCOMMON ], - [ Biome.TEMPLE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.BALTOY, PokemonType.GROUND, PokemonType.PSYCHIC, [ + [ BiomeId.RUINS, BiomePoolTier.COMMON ], + [ BiomeId.SPACE, BiomePoolTier.UNCOMMON ], + [ BiomeId.TEMPLE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.CLAYDOL, PokemonType.GROUND, PokemonType.PSYCHIC, [ - [ Biome.RUINS, BiomePoolTier.COMMON ], - [ Biome.RUINS, BiomePoolTier.BOSS ], - [ Biome.SPACE, BiomePoolTier.UNCOMMON ], - [ Biome.TEMPLE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.CLAYDOL, PokemonType.GROUND, PokemonType.PSYCHIC, [ + [ BiomeId.RUINS, BiomePoolTier.COMMON ], + [ BiomeId.RUINS, BiomePoolTier.BOSS ], + [ BiomeId.SPACE, BiomePoolTier.UNCOMMON ], + [ BiomeId.TEMPLE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.LILEEP, PokemonType.ROCK, PokemonType.GRASS, [ - [ Biome.DESERT, BiomePoolTier.SUPER_RARE ] + [ SpeciesId.LILEEP, PokemonType.ROCK, PokemonType.GRASS, [ + [ BiomeId.DESERT, BiomePoolTier.SUPER_RARE ] ] ], - [ Species.CRADILY, PokemonType.ROCK, PokemonType.GRASS, [ - [ Biome.DESERT, BiomePoolTier.SUPER_RARE ], - [ Biome.DESERT, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.CRADILY, PokemonType.ROCK, PokemonType.GRASS, [ + [ BiomeId.DESERT, BiomePoolTier.SUPER_RARE ], + [ BiomeId.DESERT, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.ANORITH, PokemonType.ROCK, PokemonType.BUG, [ - [ Biome.DESERT, BiomePoolTier.SUPER_RARE ] + [ SpeciesId.ANORITH, PokemonType.ROCK, PokemonType.BUG, [ + [ BiomeId.DESERT, BiomePoolTier.SUPER_RARE ] ] ], - [ Species.ARMALDO, PokemonType.ROCK, PokemonType.BUG, [ - [ Biome.DESERT, BiomePoolTier.SUPER_RARE ], - [ Biome.DESERT, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.ARMALDO, PokemonType.ROCK, PokemonType.BUG, [ + [ BiomeId.DESERT, BiomePoolTier.SUPER_RARE ], + [ BiomeId.DESERT, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.FEEBAS, PokemonType.WATER, -1, [ - [ Biome.SEABED, BiomePoolTier.ULTRA_RARE ] + [ SpeciesId.FEEBAS, PokemonType.WATER, -1, [ + [ BiomeId.SEABED, BiomePoolTier.ULTRA_RARE ] ] ], - [ Species.MILOTIC, PokemonType.WATER, -1, [ - [ Biome.SEABED, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.MILOTIC, PokemonType.WATER, -1, [ + [ BiomeId.SEABED, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.CASTFORM, PokemonType.NORMAL, -1, [ - [ Biome.METROPOLIS, BiomePoolTier.ULTRA_RARE ], - [ Biome.METROPOLIS, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.CASTFORM, PokemonType.NORMAL, -1, [ + [ BiomeId.METROPOLIS, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.METROPOLIS, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.KECLEON, PokemonType.NORMAL, -1, [ - [ Biome.TALL_GRASS, BiomePoolTier.RARE ], - [ Biome.TALL_GRASS, BiomePoolTier.BOSS ] + [ SpeciesId.KECLEON, PokemonType.NORMAL, -1, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.RARE ], + [ BiomeId.TALL_GRASS, BiomePoolTier.BOSS ] ] ], - [ Species.SHUPPET, PokemonType.GHOST, -1, [ - [ Biome.GRAVEYARD, BiomePoolTier.COMMON ] + [ SpeciesId.SHUPPET, PokemonType.GHOST, -1, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.COMMON ] ] ], - [ Species.BANETTE, PokemonType.GHOST, -1, [ - [ Biome.GRAVEYARD, BiomePoolTier.COMMON ], - [ Biome.GRAVEYARD, BiomePoolTier.BOSS ] + [ SpeciesId.BANETTE, PokemonType.GHOST, -1, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.COMMON ], + [ BiomeId.GRAVEYARD, BiomePoolTier.BOSS ] ] ], - [ Species.DUSKULL, PokemonType.GHOST, -1, [ - [ Biome.GRAVEYARD, BiomePoolTier.COMMON ], - [ Biome.TEMPLE, BiomePoolTier.COMMON ] + [ SpeciesId.DUSKULL, PokemonType.GHOST, -1, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.COMMON ], + [ BiomeId.TEMPLE, BiomePoolTier.COMMON ] ] ], - [ Species.DUSCLOPS, PokemonType.GHOST, -1, [ - [ Biome.GRAVEYARD, BiomePoolTier.COMMON ], - [ Biome.TEMPLE, BiomePoolTier.COMMON ] + [ SpeciesId.DUSCLOPS, PokemonType.GHOST, -1, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.COMMON ], + [ BiomeId.TEMPLE, BiomePoolTier.COMMON ] ] ], - [ Species.TROPIUS, PokemonType.GRASS, PokemonType.FLYING, [ - [ Biome.TALL_GRASS, BiomePoolTier.RARE ], - [ Biome.FOREST, BiomePoolTier.RARE ], - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.TROPIUS, PokemonType.GRASS, PokemonType.FLYING, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.RARE ], + [ BiomeId.FOREST, BiomePoolTier.RARE ], + [ BiomeId.JUNGLE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.CHIMECHO, PokemonType.PSYCHIC, -1, [ - [ Biome.TEMPLE, BiomePoolTier.UNCOMMON ], - [ Biome.TEMPLE, BiomePoolTier.BOSS ] + [ SpeciesId.CHIMECHO, PokemonType.PSYCHIC, -1, [ + [ BiomeId.TEMPLE, BiomePoolTier.UNCOMMON ], + [ BiomeId.TEMPLE, BiomePoolTier.BOSS ] ] ], - [ Species.ABSOL, PokemonType.DARK, -1, [ - [ Biome.ABYSS, BiomePoolTier.RARE ], - [ Biome.ABYSS, BiomePoolTier.BOSS ] + [ SpeciesId.ABSOL, PokemonType.DARK, -1, [ + [ BiomeId.ABYSS, BiomePoolTier.RARE ], + [ BiomeId.ABYSS, BiomePoolTier.BOSS ] ] ], - [ Species.WYNAUT, PokemonType.PSYCHIC, -1, [ ] + [ SpeciesId.WYNAUT, PokemonType.PSYCHIC, -1, [ ] ], - [ Species.SNORUNT, PokemonType.ICE, -1, [ - [ Biome.ICE_CAVE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.SNORUNT, PokemonType.ICE, -1, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.GLALIE, PokemonType.ICE, -1, [ - [ Biome.ICE_CAVE, BiomePoolTier.UNCOMMON ], - [ Biome.ICE_CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.GLALIE, PokemonType.ICE, -1, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.UNCOMMON ], + [ BiomeId.ICE_CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.SPHEAL, PokemonType.ICE, PokemonType.WATER, [ - [ Biome.ICE_CAVE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.SPHEAL, PokemonType.ICE, PokemonType.WATER, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.SEALEO, PokemonType.ICE, PokemonType.WATER, [ - [ Biome.ICE_CAVE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.SEALEO, PokemonType.ICE, PokemonType.WATER, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.WALREIN, PokemonType.ICE, PokemonType.WATER, [ - [ Biome.ICE_CAVE, BiomePoolTier.UNCOMMON ], - [ Biome.ICE_CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.WALREIN, PokemonType.ICE, PokemonType.WATER, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.UNCOMMON ], + [ BiomeId.ICE_CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.CLAMPERL, PokemonType.WATER, -1, [ - [ Biome.SEABED, BiomePoolTier.COMMON ] + [ SpeciesId.CLAMPERL, PokemonType.WATER, -1, [ + [ BiomeId.SEABED, BiomePoolTier.COMMON ] ] ], - [ Species.HUNTAIL, PokemonType.WATER, -1, [ - [ Biome.SEABED, BiomePoolTier.BOSS ] + [ SpeciesId.HUNTAIL, PokemonType.WATER, -1, [ + [ BiomeId.SEABED, BiomePoolTier.BOSS ] ] ], - [ Species.GOREBYSS, PokemonType.WATER, -1, [ - [ Biome.SEABED, BiomePoolTier.BOSS ] + [ SpeciesId.GOREBYSS, PokemonType.WATER, -1, [ + [ BiomeId.SEABED, BiomePoolTier.BOSS ] ] ], - [ Species.RELICANTH, PokemonType.WATER, PokemonType.ROCK, [ - [ Biome.SEABED, BiomePoolTier.SUPER_RARE ], - [ Biome.SEABED, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.RELICANTH, PokemonType.WATER, PokemonType.ROCK, [ + [ BiomeId.SEABED, BiomePoolTier.SUPER_RARE ], + [ BiomeId.SEABED, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.LUVDISC, PokemonType.WATER, -1, [ - [ Biome.SEABED, BiomePoolTier.UNCOMMON ], - [ Biome.SEABED, BiomePoolTier.BOSS ] + [ SpeciesId.LUVDISC, PokemonType.WATER, -1, [ + [ BiomeId.SEABED, BiomePoolTier.UNCOMMON ], + [ BiomeId.SEABED, BiomePoolTier.BOSS ] ] ], - [ Species.BAGON, PokemonType.DRAGON, -1, [ - [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.BAGON, PokemonType.DRAGON, -1, [ + [ BiomeId.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.SHELGON, PokemonType.DRAGON, -1, [ - [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.SHELGON, PokemonType.DRAGON, -1, [ + [ BiomeId.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.SALAMENCE, PokemonType.DRAGON, PokemonType.FLYING, [ - [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.WASTELAND, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.SALAMENCE, PokemonType.DRAGON, PokemonType.FLYING, [ + [ BiomeId.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.WASTELAND, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.BELDUM, PokemonType.STEEL, PokemonType.PSYCHIC, [ - [ Biome.FACTORY, BiomePoolTier.SUPER_RARE ], - [ Biome.SPACE, BiomePoolTier.RARE ] + [ SpeciesId.BELDUM, PokemonType.STEEL, PokemonType.PSYCHIC, [ + [ BiomeId.FACTORY, BiomePoolTier.SUPER_RARE ], + [ BiomeId.SPACE, BiomePoolTier.RARE ] ] ], - [ Species.METANG, PokemonType.STEEL, PokemonType.PSYCHIC, [ - [ Biome.FACTORY, BiomePoolTier.SUPER_RARE ], - [ Biome.SPACE, BiomePoolTier.RARE ] + [ SpeciesId.METANG, PokemonType.STEEL, PokemonType.PSYCHIC, [ + [ BiomeId.FACTORY, BiomePoolTier.SUPER_RARE ], + [ BiomeId.SPACE, BiomePoolTier.RARE ] ] ], - [ Species.METAGROSS, PokemonType.STEEL, PokemonType.PSYCHIC, [ - [ Biome.FACTORY, BiomePoolTier.SUPER_RARE ], - [ Biome.SPACE, BiomePoolTier.RARE ], - [ Biome.SPACE, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.METAGROSS, PokemonType.STEEL, PokemonType.PSYCHIC, [ + [ BiomeId.FACTORY, BiomePoolTier.SUPER_RARE ], + [ BiomeId.SPACE, BiomePoolTier.RARE ], + [ BiomeId.SPACE, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.REGIROCK, PokemonType.ROCK, -1, [ - [ Biome.DESERT, BiomePoolTier.ULTRA_RARE ], - [ Biome.DESERT, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.REGIROCK, PokemonType.ROCK, -1, [ + [ BiomeId.DESERT, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.DESERT, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.REGICE, PokemonType.ICE, -1, [ - [ Biome.ICE_CAVE, BiomePoolTier.ULTRA_RARE ], - [ Biome.ICE_CAVE, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.REGICE, PokemonType.ICE, -1, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.ICE_CAVE, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.REGISTEEL, PokemonType.STEEL, -1, [ - [ Biome.RUINS, BiomePoolTier.ULTRA_RARE ], - [ Biome.RUINS, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.REGISTEEL, PokemonType.STEEL, -1, [ + [ BiomeId.RUINS, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.RUINS, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.LATIAS, PokemonType.DRAGON, PokemonType.PSYCHIC, [ - [ Biome.PLAINS, BiomePoolTier.ULTRA_RARE ], - [ Biome.PLAINS, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.LATIAS, PokemonType.DRAGON, PokemonType.PSYCHIC, [ + [ BiomeId.PLAINS, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.PLAINS, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.LATIOS, PokemonType.DRAGON, PokemonType.PSYCHIC, [ - [ Biome.PLAINS, BiomePoolTier.ULTRA_RARE ], - [ Biome.PLAINS, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.LATIOS, PokemonType.DRAGON, PokemonType.PSYCHIC, [ + [ BiomeId.PLAINS, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.PLAINS, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.KYOGRE, PokemonType.WATER, -1, [ - [ Biome.SEABED, BiomePoolTier.BOSS_ULTRA_RARE ] + [ SpeciesId.KYOGRE, PokemonType.WATER, -1, [ + [ BiomeId.SEABED, BiomePoolTier.BOSS_ULTRA_RARE ] ] ], - [ Species.GROUDON, PokemonType.GROUND, -1, [ - [ Biome.BADLANDS, BiomePoolTier.BOSS_ULTRA_RARE ] + [ SpeciesId.GROUDON, PokemonType.GROUND, -1, [ + [ BiomeId.BADLANDS, BiomePoolTier.BOSS_ULTRA_RARE ] ] ], - [ Species.RAYQUAZA, PokemonType.DRAGON, PokemonType.FLYING, [ - [ Biome.SPACE, BiomePoolTier.BOSS_ULTRA_RARE ] + [ SpeciesId.RAYQUAZA, PokemonType.DRAGON, PokemonType.FLYING, [ + [ BiomeId.SPACE, BiomePoolTier.BOSS_ULTRA_RARE ] ] ], - [ Species.JIRACHI, PokemonType.STEEL, PokemonType.PSYCHIC, [ ] + [ SpeciesId.JIRACHI, PokemonType.STEEL, PokemonType.PSYCHIC, [ ] ], - [ Species.DEOXYS, PokemonType.PSYCHIC, -1, [ ] + [ SpeciesId.DEOXYS, PokemonType.PSYCHIC, -1, [ ] ], - [ Species.TURTWIG, PokemonType.GRASS, -1, [ - [ Biome.GRASS, BiomePoolTier.RARE ] + [ SpeciesId.TURTWIG, PokemonType.GRASS, -1, [ + [ BiomeId.GRASS, BiomePoolTier.RARE ] ] ], - [ Species.GROTLE, PokemonType.GRASS, -1, [ - [ Biome.GRASS, BiomePoolTier.RARE ] + [ SpeciesId.GROTLE, PokemonType.GRASS, -1, [ + [ BiomeId.GRASS, BiomePoolTier.RARE ] ] ], - [ Species.TORTERRA, PokemonType.GRASS, PokemonType.GROUND, [ - [ Biome.GRASS, BiomePoolTier.RARE ], - [ Biome.GRASS, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.TORTERRA, PokemonType.GRASS, PokemonType.GROUND, [ + [ BiomeId.GRASS, BiomePoolTier.RARE ], + [ BiomeId.GRASS, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.CHIMCHAR, PokemonType.FIRE, -1, [ - [ Biome.VOLCANO, BiomePoolTier.RARE ] + [ SpeciesId.CHIMCHAR, PokemonType.FIRE, -1, [ + [ BiomeId.VOLCANO, BiomePoolTier.RARE ] ] ], - [ Species.MONFERNO, PokemonType.FIRE, PokemonType.FIGHTING, [ - [ Biome.VOLCANO, BiomePoolTier.RARE ] + [ SpeciesId.MONFERNO, PokemonType.FIRE, PokemonType.FIGHTING, [ + [ BiomeId.VOLCANO, BiomePoolTier.RARE ] ] ], - [ Species.INFERNAPE, PokemonType.FIRE, PokemonType.FIGHTING, [ - [ Biome.VOLCANO, BiomePoolTier.RARE ], - [ Biome.VOLCANO, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.INFERNAPE, PokemonType.FIRE, PokemonType.FIGHTING, [ + [ BiomeId.VOLCANO, BiomePoolTier.RARE ], + [ BiomeId.VOLCANO, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.PIPLUP, PokemonType.WATER, -1, [ - [ Biome.SEA, BiomePoolTier.RARE ] + [ SpeciesId.PIPLUP, PokemonType.WATER, -1, [ + [ BiomeId.SEA, BiomePoolTier.RARE ] ] ], - [ Species.PRINPLUP, PokemonType.WATER, -1, [ - [ Biome.SEA, BiomePoolTier.RARE ] + [ SpeciesId.PRINPLUP, PokemonType.WATER, -1, [ + [ BiomeId.SEA, BiomePoolTier.RARE ] ] ], - [ Species.EMPOLEON, PokemonType.WATER, PokemonType.STEEL, [ - [ Biome.SEA, BiomePoolTier.RARE ], - [ Biome.SEA, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.EMPOLEON, PokemonType.WATER, PokemonType.STEEL, [ + [ BiomeId.SEA, BiomePoolTier.RARE ], + [ BiomeId.SEA, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.STARLY, PokemonType.NORMAL, PokemonType.FLYING, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.STARLY, PokemonType.NORMAL, PokemonType.FLYING, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.STARAVIA, PokemonType.NORMAL, PokemonType.FLYING, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.STARAVIA, PokemonType.NORMAL, PokemonType.FLYING, [ + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.STARAPTOR, PokemonType.NORMAL, PokemonType.FLYING, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.STARAPTOR, PokemonType.NORMAL, PokemonType.FLYING, [ + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.BIDOOF, PokemonType.NORMAL, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON ], - [ Biome.PLAINS, BiomePoolTier.COMMON ] + [ SpeciesId.BIDOOF, PokemonType.NORMAL, -1, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON ], + [ BiomeId.PLAINS, BiomePoolTier.COMMON ] ] ], - [ Species.BIBAREL, PokemonType.NORMAL, PokemonType.WATER, [ - [ Biome.PLAINS, BiomePoolTier.COMMON ], - [ Biome.PLAINS, BiomePoolTier.BOSS ] + [ SpeciesId.BIBAREL, PokemonType.NORMAL, PokemonType.WATER, [ + [ BiomeId.PLAINS, BiomePoolTier.COMMON ], + [ BiomeId.PLAINS, BiomePoolTier.BOSS ] ] ], - [ Species.KRICKETOT, PokemonType.BUG, -1, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.TALL_GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.KRICKETOT, PokemonType.BUG, -1, [ + [ BiomeId.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.TALL_GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.KRICKETUNE, PokemonType.BUG, -1, [ - [ Biome.TALL_GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.TALL_GRASS, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.KRICKETUNE, PokemonType.BUG, -1, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.TALL_GRASS, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.SHINX, PokemonType.ELECTRIC, -1, [ - [ Biome.PLAINS, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.POWER_PLANT, BiomePoolTier.COMMON ] + [ SpeciesId.SHINX, PokemonType.ELECTRIC, -1, [ + [ BiomeId.PLAINS, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.POWER_PLANT, BiomePoolTier.COMMON ] ] ], - [ Species.LUXIO, PokemonType.ELECTRIC, -1, [ - [ Biome.PLAINS, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.POWER_PLANT, BiomePoolTier.COMMON ] + [ SpeciesId.LUXIO, PokemonType.ELECTRIC, -1, [ + [ BiomeId.PLAINS, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.POWER_PLANT, BiomePoolTier.COMMON ] ] ], - [ Species.LUXRAY, PokemonType.ELECTRIC, -1, [ - [ Biome.PLAINS, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.POWER_PLANT, BiomePoolTier.COMMON ], - [ Biome.POWER_PLANT, BiomePoolTier.BOSS ] + [ SpeciesId.LUXRAY, PokemonType.ELECTRIC, -1, [ + [ BiomeId.PLAINS, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.POWER_PLANT, BiomePoolTier.COMMON ], + [ BiomeId.POWER_PLANT, BiomePoolTier.BOSS ] ] ], - [ Species.BUDEW, PokemonType.GRASS, PokemonType.POISON, [ ] + [ SpeciesId.BUDEW, PokemonType.GRASS, PokemonType.POISON, [ ] ], - [ Species.ROSERADE, PokemonType.GRASS, PokemonType.POISON, [ - [ Biome.MEADOW, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.ROSERADE, PokemonType.GRASS, PokemonType.POISON, [ + [ BiomeId.MEADOW, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.CRANIDOS, PokemonType.ROCK, -1, [ - [ Biome.MOUNTAIN, BiomePoolTier.SUPER_RARE ] + [ SpeciesId.CRANIDOS, PokemonType.ROCK, -1, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.SUPER_RARE ] ] ], - [ Species.RAMPARDOS, PokemonType.ROCK, -1, [ - [ Biome.MOUNTAIN, BiomePoolTier.SUPER_RARE ], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.RAMPARDOS, PokemonType.ROCK, -1, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.SUPER_RARE ], + [ BiomeId.MOUNTAIN, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.SHIELDON, PokemonType.ROCK, PokemonType.STEEL, [ - [ Biome.MOUNTAIN, BiomePoolTier.SUPER_RARE ] + [ SpeciesId.SHIELDON, PokemonType.ROCK, PokemonType.STEEL, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.SUPER_RARE ] ] ], - [ Species.BASTIODON, PokemonType.ROCK, PokemonType.STEEL, [ - [ Biome.MOUNTAIN, BiomePoolTier.SUPER_RARE ], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.BASTIODON, PokemonType.ROCK, PokemonType.STEEL, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.SUPER_RARE ], + [ BiomeId.MOUNTAIN, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.BURMY, PokemonType.BUG, -1, [ - [ Biome.FOREST, BiomePoolTier.UNCOMMON ], - [ Biome.BEACH, BiomePoolTier.UNCOMMON ], - [ Biome.SLUM, BiomePoolTier.UNCOMMON ] + [ SpeciesId.BURMY, PokemonType.BUG, -1, [ + [ BiomeId.FOREST, BiomePoolTier.UNCOMMON ], + [ BiomeId.BEACH, BiomePoolTier.UNCOMMON ], + [ BiomeId.SLUM, BiomePoolTier.UNCOMMON ] ] ], - [ Species.WORMADAM, PokemonType.BUG, PokemonType.GRASS, [ - [ Biome.FOREST, BiomePoolTier.UNCOMMON ], - [ Biome.FOREST, BiomePoolTier.BOSS ], - [ Biome.BEACH, BiomePoolTier.UNCOMMON ], - [ Biome.BEACH, BiomePoolTier.BOSS ], - [ Biome.SLUM, BiomePoolTier.UNCOMMON ], - [ Biome.SLUM, BiomePoolTier.BOSS ] + [ SpeciesId.WORMADAM, PokemonType.BUG, PokemonType.GRASS, [ + [ BiomeId.FOREST, BiomePoolTier.UNCOMMON ], + [ BiomeId.FOREST, BiomePoolTier.BOSS ], + [ BiomeId.BEACH, BiomePoolTier.UNCOMMON ], + [ BiomeId.BEACH, BiomePoolTier.BOSS ], + [ BiomeId.SLUM, BiomePoolTier.UNCOMMON ], + [ BiomeId.SLUM, BiomePoolTier.BOSS ] ] ], - [ Species.MOTHIM, PokemonType.BUG, PokemonType.FLYING, [ - [ Biome.FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.MOTHIM, PokemonType.BUG, PokemonType.FLYING, [ + [ BiomeId.FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.COMBEE, PokemonType.BUG, PokemonType.FLYING, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.GRASS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.COMBEE, PokemonType.BUG, PokemonType.FLYING, [ + [ BiomeId.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.GRASS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.JUNGLE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.VESPIQUEN, PokemonType.BUG, PokemonType.FLYING, [ - [ Biome.GRASS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.VESPIQUEN, PokemonType.BUG, PokemonType.FLYING, [ + [ BiomeId.GRASS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.PACHIRISU, PokemonType.ELECTRIC, -1, [ - [ Biome.POWER_PLANT, BiomePoolTier.UNCOMMON ] + [ SpeciesId.PACHIRISU, PokemonType.ELECTRIC, -1, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.UNCOMMON ] ] ], - [ Species.BUIZEL, PokemonType.WATER, -1, [ - [ Biome.SEA, BiomePoolTier.COMMON ] + [ SpeciesId.BUIZEL, PokemonType.WATER, -1, [ + [ BiomeId.SEA, BiomePoolTier.COMMON ] ] ], - [ Species.FLOATZEL, PokemonType.WATER, -1, [ - [ Biome.SEA, BiomePoolTier.COMMON ], - [ Biome.SEA, BiomePoolTier.BOSS ] + [ SpeciesId.FLOATZEL, PokemonType.WATER, -1, [ + [ BiomeId.SEA, BiomePoolTier.COMMON ], + [ BiomeId.SEA, BiomePoolTier.BOSS ] ] ], - [ Species.CHERUBI, PokemonType.GRASS, -1, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.GRASS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.CHERUBI, PokemonType.GRASS, -1, [ + [ BiomeId.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.GRASS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.CHERRIM, PokemonType.GRASS, -1, [ - [ Biome.GRASS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.CHERRIM, PokemonType.GRASS, -1, [ + [ BiomeId.GRASS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.SHELLOS, PokemonType.WATER, -1, [ - [ Biome.SWAMP, BiomePoolTier.COMMON ], - [ Biome.SEABED, BiomePoolTier.UNCOMMON ] + [ SpeciesId.SHELLOS, PokemonType.WATER, -1, [ + [ BiomeId.SWAMP, BiomePoolTier.COMMON ], + [ BiomeId.SEABED, BiomePoolTier.UNCOMMON ] ] ], - [ Species.GASTRODON, PokemonType.WATER, PokemonType.GROUND, [ - [ Biome.SWAMP, BiomePoolTier.COMMON ], - [ Biome.SWAMP, BiomePoolTier.BOSS ], - [ Biome.SEABED, BiomePoolTier.UNCOMMON ] + [ SpeciesId.GASTRODON, PokemonType.WATER, PokemonType.GROUND, [ + [ BiomeId.SWAMP, BiomePoolTier.COMMON ], + [ BiomeId.SWAMP, BiomePoolTier.BOSS ], + [ BiomeId.SEABED, BiomePoolTier.UNCOMMON ] ] ], - [ Species.AMBIPOM, PokemonType.NORMAL, -1, [ - [ Biome.JUNGLE, BiomePoolTier.BOSS ] + [ SpeciesId.AMBIPOM, PokemonType.NORMAL, -1, [ + [ BiomeId.JUNGLE, BiomePoolTier.BOSS ] ] ], - [ Species.DRIFLOON, PokemonType.GHOST, PokemonType.FLYING, [ - [ Biome.GRAVEYARD, BiomePoolTier.COMMON ] + [ SpeciesId.DRIFLOON, PokemonType.GHOST, PokemonType.FLYING, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.COMMON ] ] ], - [ Species.DRIFBLIM, PokemonType.GHOST, PokemonType.FLYING, [ - [ Biome.GRAVEYARD, BiomePoolTier.COMMON ], - [ Biome.GRAVEYARD, BiomePoolTier.BOSS ] + [ SpeciesId.DRIFBLIM, PokemonType.GHOST, PokemonType.FLYING, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.COMMON ], + [ BiomeId.GRAVEYARD, BiomePoolTier.BOSS ] ] ], - [ Species.BUNEARY, PokemonType.NORMAL, -1, [ - [ Biome.PLAINS, BiomePoolTier.RARE ] + [ SpeciesId.BUNEARY, PokemonType.NORMAL, -1, [ + [ BiomeId.PLAINS, BiomePoolTier.RARE ] ] ], - [ Species.LOPUNNY, PokemonType.NORMAL, -1, [ - [ Biome.PLAINS, BiomePoolTier.RARE ], - [ Biome.PLAINS, BiomePoolTier.BOSS ] + [ SpeciesId.LOPUNNY, PokemonType.NORMAL, -1, [ + [ BiomeId.PLAINS, BiomePoolTier.RARE ], + [ BiomeId.PLAINS, BiomePoolTier.BOSS ] ] ], - [ Species.MISMAGIUS, PokemonType.GHOST, -1, [ - [ Biome.GRAVEYARD, BiomePoolTier.BOSS ] + [ SpeciesId.MISMAGIUS, PokemonType.GHOST, -1, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.BOSS ] ] ], - [ Species.HONCHKROW, PokemonType.DARK, PokemonType.FLYING, [ - [ Biome.ABYSS, BiomePoolTier.BOSS ] + [ SpeciesId.HONCHKROW, PokemonType.DARK, PokemonType.FLYING, [ + [ BiomeId.ABYSS, BiomePoolTier.BOSS ] ] ], - [ Species.GLAMEOW, PokemonType.NORMAL, -1, [ - [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON ], - [ Biome.MEADOW, BiomePoolTier.UNCOMMON ] + [ SpeciesId.GLAMEOW, PokemonType.NORMAL, -1, [ + [ BiomeId.METROPOLIS, BiomePoolTier.UNCOMMON ], + [ BiomeId.MEADOW, BiomePoolTier.UNCOMMON ] ] ], - [ Species.PURUGLY, PokemonType.NORMAL, -1, [ - [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON ], - [ Biome.MEADOW, BiomePoolTier.UNCOMMON ], - [ Biome.MEADOW, BiomePoolTier.BOSS ] + [ SpeciesId.PURUGLY, PokemonType.NORMAL, -1, [ + [ BiomeId.METROPOLIS, BiomePoolTier.UNCOMMON ], + [ BiomeId.MEADOW, BiomePoolTier.UNCOMMON ], + [ BiomeId.MEADOW, BiomePoolTier.BOSS ] ] ], - [ Species.CHINGLING, PokemonType.PSYCHIC, -1, [ - [ Biome.TEMPLE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.CHINGLING, PokemonType.PSYCHIC, -1, [ + [ BiomeId.TEMPLE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.STUNKY, PokemonType.POISON, PokemonType.DARK, [ - [ Biome.SLUM, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.STUNKY, PokemonType.POISON, PokemonType.DARK, [ + [ BiomeId.SLUM, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.SKUNTANK, PokemonType.POISON, PokemonType.DARK, [ - [ Biome.SLUM, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.SLUM, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.SKUNTANK, PokemonType.POISON, PokemonType.DARK, [ + [ BiomeId.SLUM, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.SLUM, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.BRONZOR, PokemonType.STEEL, PokemonType.PSYCHIC, [ - [ Biome.FACTORY, BiomePoolTier.UNCOMMON ], - [ Biome.SPACE, BiomePoolTier.COMMON ], - [ Biome.LABORATORY, BiomePoolTier.COMMON ] + [ SpeciesId.BRONZOR, PokemonType.STEEL, PokemonType.PSYCHIC, [ + [ BiomeId.FACTORY, BiomePoolTier.UNCOMMON ], + [ BiomeId.SPACE, BiomePoolTier.COMMON ], + [ BiomeId.LABORATORY, BiomePoolTier.COMMON ] ] ], - [ Species.BRONZONG, PokemonType.STEEL, PokemonType.PSYCHIC, [ - [ Biome.FACTORY, BiomePoolTier.UNCOMMON ], - [ Biome.SPACE, BiomePoolTier.COMMON ], - [ Biome.SPACE, BiomePoolTier.BOSS ], - [ Biome.LABORATORY, BiomePoolTier.COMMON ], - [ Biome.LABORATORY, BiomePoolTier.BOSS ] + [ SpeciesId.BRONZONG, PokemonType.STEEL, PokemonType.PSYCHIC, [ + [ BiomeId.FACTORY, BiomePoolTier.UNCOMMON ], + [ BiomeId.SPACE, BiomePoolTier.COMMON ], + [ BiomeId.SPACE, BiomePoolTier.BOSS ], + [ BiomeId.LABORATORY, BiomePoolTier.COMMON ], + [ BiomeId.LABORATORY, BiomePoolTier.BOSS ] ] ], - [ Species.BONSLY, PokemonType.ROCK, -1, [ ] + [ SpeciesId.BONSLY, PokemonType.ROCK, -1, [ ] ], - [ Species.MIME_JR, PokemonType.PSYCHIC, PokemonType.FAIRY, [ ] + [ SpeciesId.MIME_JR, PokemonType.PSYCHIC, PokemonType.FAIRY, [ ] ], - [ Species.HAPPINY, PokemonType.NORMAL, -1, [ ] + [ SpeciesId.HAPPINY, PokemonType.NORMAL, -1, [ ] ], - [ Species.CHATOT, PokemonType.NORMAL, PokemonType.FLYING, [ - [ Biome.JUNGLE, BiomePoolTier.SUPER_RARE ] + [ SpeciesId.CHATOT, PokemonType.NORMAL, PokemonType.FLYING, [ + [ BiomeId.JUNGLE, BiomePoolTier.SUPER_RARE ] ] ], - [ Species.SPIRITOMB, PokemonType.GHOST, PokemonType.DARK, [ - [ Biome.GRAVEYARD, BiomePoolTier.SUPER_RARE ], - [ Biome.ABYSS, BiomePoolTier.RARE ], - [ Biome.ABYSS, BiomePoolTier.BOSS ] + [ SpeciesId.SPIRITOMB, PokemonType.GHOST, PokemonType.DARK, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.SUPER_RARE ], + [ BiomeId.ABYSS, BiomePoolTier.RARE ], + [ BiomeId.ABYSS, BiomePoolTier.BOSS ] ] ], - [ Species.GIBLE, PokemonType.DRAGON, PokemonType.GROUND, [ - [ Biome.MOUNTAIN, BiomePoolTier.SUPER_RARE ], - [ Biome.WASTELAND, BiomePoolTier.COMMON ] + [ SpeciesId.GIBLE, PokemonType.DRAGON, PokemonType.GROUND, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.SUPER_RARE ], + [ BiomeId.WASTELAND, BiomePoolTier.COMMON ] ] ], - [ Species.GABITE, PokemonType.DRAGON, PokemonType.GROUND, [ - [ Biome.MOUNTAIN, BiomePoolTier.SUPER_RARE ], - [ Biome.WASTELAND, BiomePoolTier.COMMON ] + [ SpeciesId.GABITE, PokemonType.DRAGON, PokemonType.GROUND, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.SUPER_RARE ], + [ BiomeId.WASTELAND, BiomePoolTier.COMMON ] ] ], - [ Species.GARCHOMP, PokemonType.DRAGON, PokemonType.GROUND, [ - [ Biome.MOUNTAIN, BiomePoolTier.SUPER_RARE ], - [ Biome.WASTELAND, BiomePoolTier.COMMON ], - [ Biome.WASTELAND, BiomePoolTier.BOSS ] + [ SpeciesId.GARCHOMP, PokemonType.DRAGON, PokemonType.GROUND, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.SUPER_RARE ], + [ BiomeId.WASTELAND, BiomePoolTier.COMMON ], + [ BiomeId.WASTELAND, BiomePoolTier.BOSS ] ] ], - [ Species.MUNCHLAX, PokemonType.NORMAL, -1, [ ] + [ SpeciesId.MUNCHLAX, PokemonType.NORMAL, -1, [ ] ], - [ Species.RIOLU, PokemonType.FIGHTING, -1, [ ] + [ SpeciesId.RIOLU, PokemonType.FIGHTING, -1, [ ] ], - [ Species.LUCARIO, PokemonType.FIGHTING, PokemonType.STEEL, [ - [ Biome.DOJO, BiomePoolTier.RARE ], - [ Biome.DOJO, BiomePoolTier.BOSS ] + [ SpeciesId.LUCARIO, PokemonType.FIGHTING, PokemonType.STEEL, [ + [ BiomeId.DOJO, BiomePoolTier.RARE ], + [ BiomeId.DOJO, BiomePoolTier.BOSS ] ] ], - [ Species.HIPPOPOTAS, PokemonType.GROUND, -1, [ - [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.HIPPOPOTAS, PokemonType.GROUND, -1, [ + [ BiomeId.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.HIPPOWDON, PokemonType.GROUND, -1, [ - [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.DESERT, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.HIPPOWDON, PokemonType.GROUND, -1, [ + [ BiomeId.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.DESERT, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.SKORUPI, PokemonType.POISON, PokemonType.BUG, [ - [ Biome.SWAMP, BiomePoolTier.UNCOMMON ], - [ Biome.DESERT, BiomePoolTier.COMMON ], - [ Biome.TEMPLE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.SKORUPI, PokemonType.POISON, PokemonType.BUG, [ + [ BiomeId.SWAMP, BiomePoolTier.UNCOMMON ], + [ BiomeId.DESERT, BiomePoolTier.COMMON ], + [ BiomeId.TEMPLE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.DRAPION, PokemonType.POISON, PokemonType.DARK, [ - [ Biome.SWAMP, BiomePoolTier.UNCOMMON ], - [ Biome.DESERT, BiomePoolTier.COMMON ], - [ Biome.DESERT, BiomePoolTier.BOSS ], - [ Biome.TEMPLE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.DRAPION, PokemonType.POISON, PokemonType.DARK, [ + [ BiomeId.SWAMP, BiomePoolTier.UNCOMMON ], + [ BiomeId.DESERT, BiomePoolTier.COMMON ], + [ BiomeId.DESERT, BiomePoolTier.BOSS ], + [ BiomeId.TEMPLE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.CROAGUNK, PokemonType.POISON, PokemonType.FIGHTING, [ - [ Biome.SWAMP, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.DOJO, BiomePoolTier.UNCOMMON ] + [ SpeciesId.CROAGUNK, PokemonType.POISON, PokemonType.FIGHTING, [ + [ BiomeId.SWAMP, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.DOJO, BiomePoolTier.UNCOMMON ] ] ], - [ Species.TOXICROAK, PokemonType.POISON, PokemonType.FIGHTING, [ - [ Biome.SWAMP, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.DOJO, BiomePoolTier.UNCOMMON ], - [ Biome.DOJO, BiomePoolTier.BOSS ] + [ SpeciesId.TOXICROAK, PokemonType.POISON, PokemonType.FIGHTING, [ + [ BiomeId.SWAMP, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.DOJO, BiomePoolTier.UNCOMMON ], + [ BiomeId.DOJO, BiomePoolTier.BOSS ] ] ], - [ Species.CARNIVINE, PokemonType.GRASS, -1, [ - [ Biome.JUNGLE, BiomePoolTier.RARE ], - [ Biome.JUNGLE, BiomePoolTier.BOSS ] + [ SpeciesId.CARNIVINE, PokemonType.GRASS, -1, [ + [ BiomeId.JUNGLE, BiomePoolTier.RARE ], + [ BiomeId.JUNGLE, BiomePoolTier.BOSS ] ] ], - [ Species.FINNEON, PokemonType.WATER, -1, [ - [ Biome.SEA, BiomePoolTier.COMMON, TimeOfDay.NIGHT ] + [ SpeciesId.FINNEON, PokemonType.WATER, -1, [ + [ BiomeId.SEA, BiomePoolTier.COMMON, TimeOfDay.NIGHT ] ] ], - [ Species.LUMINEON, PokemonType.WATER, -1, [ - [ Biome.SEA, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], - [ Biome.SEA, BiomePoolTier.BOSS, TimeOfDay.NIGHT ] + [ SpeciesId.LUMINEON, PokemonType.WATER, -1, [ + [ BiomeId.SEA, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], + [ BiomeId.SEA, BiomePoolTier.BOSS, TimeOfDay.NIGHT ] ] ], - [ Species.MANTYKE, PokemonType.WATER, PokemonType.FLYING, [ - [ Biome.SEABED, BiomePoolTier.RARE ] + [ SpeciesId.MANTYKE, PokemonType.WATER, PokemonType.FLYING, [ + [ BiomeId.SEABED, BiomePoolTier.RARE ] ] ], - [ Species.SNOVER, PokemonType.GRASS, PokemonType.ICE, [ - [ Biome.ICE_CAVE, BiomePoolTier.COMMON ], - [ Biome.SNOWY_FOREST, BiomePoolTier.COMMON ] + [ SpeciesId.SNOVER, PokemonType.GRASS, PokemonType.ICE, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.COMMON ], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.COMMON ] ] ], - [ Species.ABOMASNOW, PokemonType.GRASS, PokemonType.ICE, [ - [ Biome.ICE_CAVE, BiomePoolTier.COMMON ], - [ Biome.SNOWY_FOREST, BiomePoolTier.COMMON ], - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS ] + [ SpeciesId.ABOMASNOW, PokemonType.GRASS, PokemonType.ICE, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.COMMON ], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.COMMON ], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.BOSS ] ] ], - [ Species.WEAVILE, PokemonType.DARK, PokemonType.ICE, [ - [ Biome.ICE_CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.WEAVILE, PokemonType.DARK, PokemonType.ICE, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.MAGNEZONE, PokemonType.ELECTRIC, PokemonType.STEEL, [ - [ Biome.POWER_PLANT, BiomePoolTier.BOSS ], - [ Biome.LABORATORY, BiomePoolTier.BOSS ] + [ SpeciesId.MAGNEZONE, PokemonType.ELECTRIC, PokemonType.STEEL, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.BOSS ], + [ BiomeId.LABORATORY, BiomePoolTier.BOSS ] ] ], - [ Species.LICKILICKY, PokemonType.NORMAL, -1, [ - [ Biome.PLAINS, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.LICKILICKY, PokemonType.NORMAL, -1, [ + [ BiomeId.PLAINS, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.RHYPERIOR, PokemonType.GROUND, PokemonType.ROCK, [ - [ Biome.BADLANDS, BiomePoolTier.BOSS ] + [ SpeciesId.RHYPERIOR, PokemonType.GROUND, PokemonType.ROCK, [ + [ BiomeId.BADLANDS, BiomePoolTier.BOSS ] ] ], - [ Species.TANGROWTH, PokemonType.GRASS, -1, [ - [ Biome.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.TANGROWTH, PokemonType.GRASS, -1, [ + [ BiomeId.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.ELECTIVIRE, PokemonType.ELECTRIC, -1, [ - [ Biome.POWER_PLANT, BiomePoolTier.BOSS ] + [ SpeciesId.ELECTIVIRE, PokemonType.ELECTRIC, -1, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.BOSS ] ] ], - [ Species.MAGMORTAR, PokemonType.FIRE, -1, [ - [ Biome.VOLCANO, BiomePoolTier.BOSS ] + [ SpeciesId.MAGMORTAR, PokemonType.FIRE, -1, [ + [ BiomeId.VOLCANO, BiomePoolTier.BOSS ] ] ], - [ Species.TOGEKISS, PokemonType.FAIRY, PokemonType.FLYING, [ - [ Biome.FAIRY_CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.TOGEKISS, PokemonType.FAIRY, PokemonType.FLYING, [ + [ BiomeId.FAIRY_CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.YANMEGA, PokemonType.BUG, PokemonType.FLYING, [ - [ Biome.JUNGLE, BiomePoolTier.BOSS ] + [ SpeciesId.YANMEGA, PokemonType.BUG, PokemonType.FLYING, [ + [ BiomeId.JUNGLE, BiomePoolTier.BOSS ] ] ], - [ Species.LEAFEON, PokemonType.GRASS, -1, [ - [ Biome.JUNGLE, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.LEAFEON, PokemonType.GRASS, -1, [ + [ BiomeId.JUNGLE, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.GLACEON, PokemonType.ICE, -1, [ - [ Biome.ICE_CAVE, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.GLACEON, PokemonType.ICE, -1, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.GLISCOR, PokemonType.GROUND, PokemonType.FLYING, [ - [ Biome.BADLANDS, BiomePoolTier.BOSS ] + [ SpeciesId.GLISCOR, PokemonType.GROUND, PokemonType.FLYING, [ + [ BiomeId.BADLANDS, BiomePoolTier.BOSS ] ] ], - [ Species.MAMOSWINE, PokemonType.ICE, PokemonType.GROUND, [ - [ Biome.ICE_CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.MAMOSWINE, PokemonType.ICE, PokemonType.GROUND, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.PORYGON_Z, PokemonType.NORMAL, -1, [ - [ Biome.SPACE, BiomePoolTier.BOSS_RARE ], - [ Biome.LABORATORY, BiomePoolTier.BOSS ] + [ SpeciesId.PORYGON_Z, PokemonType.NORMAL, -1, [ + [ BiomeId.SPACE, BiomePoolTier.BOSS_RARE ], + [ BiomeId.LABORATORY, BiomePoolTier.BOSS ] ] ], - [ Species.GALLADE, PokemonType.PSYCHIC, PokemonType.FIGHTING, [ - [ Biome.DOJO, BiomePoolTier.SUPER_RARE ], - [ Biome.DOJO, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.GALLADE, PokemonType.PSYCHIC, PokemonType.FIGHTING, [ + [ BiomeId.DOJO, BiomePoolTier.SUPER_RARE ], + [ BiomeId.DOJO, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.PROBOPASS, PokemonType.ROCK, PokemonType.STEEL, [ - [ Biome.CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.PROBOPASS, PokemonType.ROCK, PokemonType.STEEL, [ + [ BiomeId.CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.DUSKNOIR, PokemonType.GHOST, -1, [ - [ Biome.GRAVEYARD, BiomePoolTier.BOSS ] + [ SpeciesId.DUSKNOIR, PokemonType.GHOST, -1, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.BOSS ] ] ], - [ Species.FROSLASS, PokemonType.ICE, PokemonType.GHOST, [ - [ Biome.ICE_CAVE, BiomePoolTier.RARE ], - [ Biome.ICE_CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.FROSLASS, PokemonType.ICE, PokemonType.GHOST, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.RARE ], + [ BiomeId.ICE_CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.ROTOM, PokemonType.ELECTRIC, PokemonType.GHOST, [ - [ Biome.LABORATORY, BiomePoolTier.SUPER_RARE ], - [ Biome.LABORATORY, BiomePoolTier.BOSS_SUPER_RARE ], - [ Biome.VOLCANO, BiomePoolTier.SUPER_RARE ], - [ Biome.VOLCANO, BiomePoolTier.BOSS_SUPER_RARE ], - [ Biome.SEA, BiomePoolTier.SUPER_RARE ], - [ Biome.SEA, BiomePoolTier.BOSS_SUPER_RARE ], - [ Biome.ICE_CAVE, BiomePoolTier.SUPER_RARE ], - [ Biome.ICE_CAVE, BiomePoolTier.BOSS_SUPER_RARE ], - [ Biome.MOUNTAIN, BiomePoolTier.SUPER_RARE ], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS_SUPER_RARE ], - [ Biome.TALL_GRASS, BiomePoolTier.SUPER_RARE ], - [ Biome.TALL_GRASS, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.ROTOM, PokemonType.ELECTRIC, PokemonType.GHOST, [ + [ BiomeId.LABORATORY, BiomePoolTier.SUPER_RARE ], + [ BiomeId.LABORATORY, BiomePoolTier.BOSS_SUPER_RARE ], + [ BiomeId.VOLCANO, BiomePoolTier.SUPER_RARE ], + [ BiomeId.VOLCANO, BiomePoolTier.BOSS_SUPER_RARE ], + [ BiomeId.SEA, BiomePoolTier.SUPER_RARE ], + [ BiomeId.SEA, BiomePoolTier.BOSS_SUPER_RARE ], + [ BiomeId.ICE_CAVE, BiomePoolTier.SUPER_RARE ], + [ BiomeId.ICE_CAVE, BiomePoolTier.BOSS_SUPER_RARE ], + [ BiomeId.MOUNTAIN, BiomePoolTier.SUPER_RARE ], + [ BiomeId.MOUNTAIN, BiomePoolTier.BOSS_SUPER_RARE ], + [ BiomeId.TALL_GRASS, BiomePoolTier.SUPER_RARE ], + [ BiomeId.TALL_GRASS, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.UXIE, PokemonType.PSYCHIC, -1, [ - [ Biome.CAVE, BiomePoolTier.ULTRA_RARE ], - [ Biome.CAVE, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.UXIE, PokemonType.PSYCHIC, -1, [ + [ BiomeId.CAVE, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.CAVE, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.MESPRIT, PokemonType.PSYCHIC, -1, [ - [ Biome.LAKE, BiomePoolTier.ULTRA_RARE ], - [ Biome.LAKE, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.MESPRIT, PokemonType.PSYCHIC, -1, [ + [ BiomeId.LAKE, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.LAKE, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.AZELF, PokemonType.PSYCHIC, -1, [ - [ Biome.SWAMP, BiomePoolTier.ULTRA_RARE ], - [ Biome.SWAMP, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.AZELF, PokemonType.PSYCHIC, -1, [ + [ BiomeId.SWAMP, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.SWAMP, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.DIALGA, PokemonType.STEEL, PokemonType.DRAGON, [ - [ Biome.WASTELAND, BiomePoolTier.BOSS_ULTRA_RARE ] + [ SpeciesId.DIALGA, PokemonType.STEEL, PokemonType.DRAGON, [ + [ BiomeId.WASTELAND, BiomePoolTier.BOSS_ULTRA_RARE ] ] ], - [ Species.PALKIA, PokemonType.WATER, PokemonType.DRAGON, [ - [ Biome.ABYSS, BiomePoolTier.BOSS_ULTRA_RARE ] + [ SpeciesId.PALKIA, PokemonType.WATER, PokemonType.DRAGON, [ + [ BiomeId.ABYSS, BiomePoolTier.BOSS_ULTRA_RARE ] ] ], - [ Species.HEATRAN, PokemonType.FIRE, PokemonType.STEEL, [ - [ Biome.VOLCANO, BiomePoolTier.ULTRA_RARE ], - [ Biome.VOLCANO, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.HEATRAN, PokemonType.FIRE, PokemonType.STEEL, [ + [ BiomeId.VOLCANO, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.VOLCANO, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.REGIGIGAS, PokemonType.NORMAL, -1, [ - [ Biome.TEMPLE, BiomePoolTier.BOSS_ULTRA_RARE ] + [ SpeciesId.REGIGIGAS, PokemonType.NORMAL, -1, [ + [ BiomeId.TEMPLE, BiomePoolTier.BOSS_ULTRA_RARE ] ] ], - [ Species.GIRATINA, PokemonType.GHOST, PokemonType.DRAGON, [ - [ Biome.GRAVEYARD, BiomePoolTier.BOSS_ULTRA_RARE ] + [ SpeciesId.GIRATINA, PokemonType.GHOST, PokemonType.DRAGON, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.BOSS_ULTRA_RARE ] ] ], - [ Species.CRESSELIA, PokemonType.PSYCHIC, -1, [ - [ Biome.BEACH, BiomePoolTier.ULTRA_RARE ], - [ Biome.BEACH, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.CRESSELIA, PokemonType.PSYCHIC, -1, [ + [ BiomeId.BEACH, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.BEACH, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.PHIONE, PokemonType.WATER, -1, [ ] + [ SpeciesId.PHIONE, PokemonType.WATER, -1, [ ] ], - [ Species.MANAPHY, PokemonType.WATER, -1, [ ] + [ SpeciesId.MANAPHY, PokemonType.WATER, -1, [ ] ], - [ Species.DARKRAI, PokemonType.DARK, -1, [ - [ Biome.ABYSS, BiomePoolTier.ULTRA_RARE ], - [ Biome.ABYSS, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.DARKRAI, PokemonType.DARK, -1, [ + [ BiomeId.ABYSS, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.ABYSS, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.SHAYMIN, PokemonType.GRASS, -1, [ - [ Biome.MEADOW, BiomePoolTier.BOSS_ULTRA_RARE ] + [ SpeciesId.SHAYMIN, PokemonType.GRASS, -1, [ + [ BiomeId.MEADOW, BiomePoolTier.BOSS_ULTRA_RARE ] ] ], - [ Species.ARCEUS, PokemonType.NORMAL, -1, [ ] + [ SpeciesId.ARCEUS, PokemonType.NORMAL, -1, [ ] ], - [ Species.VICTINI, PokemonType.PSYCHIC, PokemonType.FIRE, [ ] + [ SpeciesId.VICTINI, PokemonType.PSYCHIC, PokemonType.FIRE, [ ] ], - [ Species.SNIVY, PokemonType.GRASS, -1, [ - [ Biome.JUNGLE, BiomePoolTier.RARE ] + [ SpeciesId.SNIVY, PokemonType.GRASS, -1, [ + [ BiomeId.JUNGLE, BiomePoolTier.RARE ] ] ], - [ Species.SERVINE, PokemonType.GRASS, -1, [ - [ Biome.JUNGLE, BiomePoolTier.RARE ] + [ SpeciesId.SERVINE, PokemonType.GRASS, -1, [ + [ BiomeId.JUNGLE, BiomePoolTier.RARE ] ] ], - [ Species.SERPERIOR, PokemonType.GRASS, -1, [ - [ Biome.JUNGLE, BiomePoolTier.RARE ], - [ Biome.JUNGLE, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.SERPERIOR, PokemonType.GRASS, -1, [ + [ BiomeId.JUNGLE, BiomePoolTier.RARE ], + [ BiomeId.JUNGLE, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.TEPIG, PokemonType.FIRE, -1, [ - [ Biome.VOLCANO, BiomePoolTier.RARE ] + [ SpeciesId.TEPIG, PokemonType.FIRE, -1, [ + [ BiomeId.VOLCANO, BiomePoolTier.RARE ] ] ], - [ Species.PIGNITE, PokemonType.FIRE, PokemonType.FIGHTING, [ - [ Biome.VOLCANO, BiomePoolTier.RARE ] + [ SpeciesId.PIGNITE, PokemonType.FIRE, PokemonType.FIGHTING, [ + [ BiomeId.VOLCANO, BiomePoolTier.RARE ] ] ], - [ Species.EMBOAR, PokemonType.FIRE, PokemonType.FIGHTING, [ - [ Biome.VOLCANO, BiomePoolTier.RARE ], - [ Biome.VOLCANO, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.EMBOAR, PokemonType.FIRE, PokemonType.FIGHTING, [ + [ BiomeId.VOLCANO, BiomePoolTier.RARE ], + [ BiomeId.VOLCANO, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.OSHAWOTT, PokemonType.WATER, -1, [ - [ Biome.LAKE, BiomePoolTier.RARE ] + [ SpeciesId.OSHAWOTT, PokemonType.WATER, -1, [ + [ BiomeId.LAKE, BiomePoolTier.RARE ] ] ], - [ Species.DEWOTT, PokemonType.WATER, -1, [ - [ Biome.LAKE, BiomePoolTier.RARE ] + [ SpeciesId.DEWOTT, PokemonType.WATER, -1, [ + [ BiomeId.LAKE, BiomePoolTier.RARE ] ] ], - [ Species.SAMUROTT, PokemonType.WATER, -1, [ - [ Biome.LAKE, BiomePoolTier.RARE ], - [ Biome.LAKE, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.SAMUROTT, PokemonType.WATER, -1, [ + [ BiomeId.LAKE, BiomePoolTier.RARE ], + [ BiomeId.LAKE, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.PATRAT, PokemonType.NORMAL, -1, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.METROPOLIS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.SLUM, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.PATRAT, PokemonType.NORMAL, -1, [ + [ BiomeId.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.METROPOLIS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.METROPOLIS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.SLUM, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.WATCHOG, PokemonType.NORMAL, -1, [ - [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.METROPOLIS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.SLUM, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.SLUM, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.WATCHOG, PokemonType.NORMAL, -1, [ + [ BiomeId.METROPOLIS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.METROPOLIS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.SLUM, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.SLUM, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.LILLIPUP, PokemonType.NORMAL, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON ], - [ Biome.METROPOLIS, BiomePoolTier.COMMON ] + [ SpeciesId.LILLIPUP, PokemonType.NORMAL, -1, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON ], + [ BiomeId.METROPOLIS, BiomePoolTier.COMMON ] ] ], - [ Species.HERDIER, PokemonType.NORMAL, -1, [ - [ Biome.METROPOLIS, BiomePoolTier.COMMON ] + [ SpeciesId.HERDIER, PokemonType.NORMAL, -1, [ + [ BiomeId.METROPOLIS, BiomePoolTier.COMMON ] ] ], - [ Species.STOUTLAND, PokemonType.NORMAL, -1, [ - [ Biome.METROPOLIS, BiomePoolTier.COMMON ], - [ Biome.METROPOLIS, BiomePoolTier.BOSS ] + [ SpeciesId.STOUTLAND, PokemonType.NORMAL, -1, [ + [ BiomeId.METROPOLIS, BiomePoolTier.COMMON ], + [ BiomeId.METROPOLIS, BiomePoolTier.BOSS ] ] ], - [ Species.PURRLOIN, PokemonType.DARK, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.ABYSS, BiomePoolTier.COMMON ], - [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.PURRLOIN, PokemonType.DARK, -1, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.ABYSS, BiomePoolTier.COMMON ], + [ BiomeId.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.LIEPARD, PokemonType.DARK, -1, [ - [ Biome.ABYSS, BiomePoolTier.COMMON ], - [ Biome.ABYSS, BiomePoolTier.BOSS ], - [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.LIEPARD, PokemonType.DARK, -1, [ + [ BiomeId.ABYSS, BiomePoolTier.COMMON ], + [ BiomeId.ABYSS, BiomePoolTier.BOSS ], + [ BiomeId.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.PANSAGE, PokemonType.GRASS, -1, [ - [ Biome.FOREST, BiomePoolTier.UNCOMMON ], - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.PANSAGE, PokemonType.GRASS, -1, [ + [ BiomeId.FOREST, BiomePoolTier.UNCOMMON ], + [ BiomeId.JUNGLE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.SIMISAGE, PokemonType.GRASS, -1, [ - [ Biome.FOREST, BiomePoolTier.UNCOMMON ], - [ Biome.FOREST, BiomePoolTier.BOSS ], - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.SIMISAGE, PokemonType.GRASS, -1, [ + [ BiomeId.FOREST, BiomePoolTier.UNCOMMON ], + [ BiomeId.FOREST, BiomePoolTier.BOSS ], + [ BiomeId.JUNGLE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.PANSEAR, PokemonType.FIRE, -1, [ - [ Biome.VOLCANO, BiomePoolTier.UNCOMMON ], - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.PANSEAR, PokemonType.FIRE, -1, [ + [ BiomeId.VOLCANO, BiomePoolTier.UNCOMMON ], + [ BiomeId.JUNGLE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.SIMISEAR, PokemonType.FIRE, -1, [ - [ Biome.VOLCANO, BiomePoolTier.UNCOMMON ], - [ Biome.VOLCANO, BiomePoolTier.BOSS ], - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.SIMISEAR, PokemonType.FIRE, -1, [ + [ BiomeId.VOLCANO, BiomePoolTier.UNCOMMON ], + [ BiomeId.VOLCANO, BiomePoolTier.BOSS ], + [ BiomeId.JUNGLE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.PANPOUR, PokemonType.WATER, -1, [ - [ Biome.SEA, BiomePoolTier.UNCOMMON ], - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.PANPOUR, PokemonType.WATER, -1, [ + [ BiomeId.SEA, BiomePoolTier.UNCOMMON ], + [ BiomeId.JUNGLE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.SIMIPOUR, PokemonType.WATER, -1, [ - [ Biome.SEA, BiomePoolTier.UNCOMMON ], - [ Biome.SEA, BiomePoolTier.BOSS ], - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.SIMIPOUR, PokemonType.WATER, -1, [ + [ BiomeId.SEA, BiomePoolTier.UNCOMMON ], + [ BiomeId.SEA, BiomePoolTier.BOSS ], + [ BiomeId.JUNGLE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.MUNNA, PokemonType.PSYCHIC, -1, [ - [ Biome.SPACE, BiomePoolTier.COMMON ] + [ SpeciesId.MUNNA, PokemonType.PSYCHIC, -1, [ + [ BiomeId.SPACE, BiomePoolTier.COMMON ] ] ], - [ Species.MUSHARNA, PokemonType.PSYCHIC, -1, [ - [ Biome.SPACE, BiomePoolTier.COMMON ], - [ Biome.SPACE, BiomePoolTier.BOSS ] + [ SpeciesId.MUSHARNA, PokemonType.PSYCHIC, -1, [ + [ BiomeId.SPACE, BiomePoolTier.COMMON ], + [ BiomeId.SPACE, BiomePoolTier.BOSS ] ] ], - [ Species.PIDOVE, PokemonType.NORMAL, PokemonType.FLYING, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.PIDOVE, PokemonType.NORMAL, PokemonType.FLYING, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.TRANQUILL, PokemonType.NORMAL, PokemonType.FLYING, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.TRANQUILL, PokemonType.NORMAL, PokemonType.FLYING, [ + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.UNFEZANT, PokemonType.NORMAL, PokemonType.FLYING, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.UNFEZANT, PokemonType.NORMAL, PokemonType.FLYING, [ + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.BLITZLE, PokemonType.ELECTRIC, -1, [ - [ Biome.MEADOW, BiomePoolTier.COMMON ], - [ Biome.JUNGLE, BiomePoolTier.COMMON ] + [ SpeciesId.BLITZLE, PokemonType.ELECTRIC, -1, [ + [ BiomeId.MEADOW, BiomePoolTier.COMMON ], + [ BiomeId.JUNGLE, BiomePoolTier.COMMON ] ] ], - [ Species.ZEBSTRIKA, PokemonType.ELECTRIC, -1, [ - [ Biome.MEADOW, BiomePoolTier.COMMON ], - [ Biome.MEADOW, BiomePoolTier.BOSS ], - [ Biome.JUNGLE, BiomePoolTier.COMMON ] + [ SpeciesId.ZEBSTRIKA, PokemonType.ELECTRIC, -1, [ + [ BiomeId.MEADOW, BiomePoolTier.COMMON ], + [ BiomeId.MEADOW, BiomePoolTier.BOSS ], + [ BiomeId.JUNGLE, BiomePoolTier.COMMON ] ] ], - [ Species.ROGGENROLA, PokemonType.ROCK, -1, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.BADLANDS, BiomePoolTier.UNCOMMON ], - [ Biome.CAVE, BiomePoolTier.COMMON ] + [ SpeciesId.ROGGENROLA, PokemonType.ROCK, -1, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.BADLANDS, BiomePoolTier.UNCOMMON ], + [ BiomeId.CAVE, BiomePoolTier.COMMON ] ] ], - [ Species.BOLDORE, PokemonType.ROCK, -1, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.BADLANDS, BiomePoolTier.UNCOMMON ], - [ Biome.CAVE, BiomePoolTier.COMMON ] + [ SpeciesId.BOLDORE, PokemonType.ROCK, -1, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.BADLANDS, BiomePoolTier.UNCOMMON ], + [ BiomeId.CAVE, BiomePoolTier.COMMON ] ] ], - [ Species.GIGALITH, PokemonType.ROCK, -1, [ - [ Biome.CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.GIGALITH, PokemonType.ROCK, -1, [ + [ BiomeId.CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.WOOBAT, PokemonType.PSYCHIC, PokemonType.FLYING, [ - [ Biome.CAVE, BiomePoolTier.COMMON ] + [ SpeciesId.WOOBAT, PokemonType.PSYCHIC, PokemonType.FLYING, [ + [ BiomeId.CAVE, BiomePoolTier.COMMON ] ] ], - [ Species.SWOOBAT, PokemonType.PSYCHIC, PokemonType.FLYING, [ - [ Biome.CAVE, BiomePoolTier.COMMON ], - [ Biome.CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.SWOOBAT, PokemonType.PSYCHIC, PokemonType.FLYING, [ + [ BiomeId.CAVE, BiomePoolTier.COMMON ], + [ BiomeId.CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.DRILBUR, PokemonType.GROUND, -1, [ - [ Biome.BADLANDS, BiomePoolTier.COMMON ], - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.COMMON ] + [ SpeciesId.DRILBUR, PokemonType.GROUND, -1, [ + [ BiomeId.BADLANDS, BiomePoolTier.COMMON ], + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.COMMON ] ] ], - [ Species.EXCADRILL, PokemonType.GROUND, PokemonType.STEEL, [ - [ Biome.BADLANDS, BiomePoolTier.COMMON ], - [ Biome.BADLANDS, BiomePoolTier.BOSS ], - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.COMMON ] + [ SpeciesId.EXCADRILL, PokemonType.GROUND, PokemonType.STEEL, [ + [ BiomeId.BADLANDS, BiomePoolTier.COMMON ], + [ BiomeId.BADLANDS, BiomePoolTier.BOSS ], + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.COMMON ] ] ], - [ Species.AUDINO, PokemonType.NORMAL, -1, [ - [ Biome.FAIRY_CAVE, BiomePoolTier.RARE ], - [ Biome.FAIRY_CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.AUDINO, PokemonType.NORMAL, -1, [ + [ BiomeId.FAIRY_CAVE, BiomePoolTier.RARE ], + [ BiomeId.FAIRY_CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.TIMBURR, PokemonType.FIGHTING, -1, [ - [ Biome.FACTORY, BiomePoolTier.COMMON ], - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.COMMON ] + [ SpeciesId.TIMBURR, PokemonType.FIGHTING, -1, [ + [ BiomeId.FACTORY, BiomePoolTier.COMMON ], + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.COMMON ] ] ], - [ Species.GURDURR, PokemonType.FIGHTING, -1, [ - [ Biome.FACTORY, BiomePoolTier.COMMON ], - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.COMMON ] + [ SpeciesId.GURDURR, PokemonType.FIGHTING, -1, [ + [ BiomeId.FACTORY, BiomePoolTier.COMMON ], + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.COMMON ] ] ], - [ Species.CONKELDURR, PokemonType.FIGHTING, -1, [ - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.BOSS ] + [ SpeciesId.CONKELDURR, PokemonType.FIGHTING, -1, [ + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.BOSS ] ] ], - [ Species.TYMPOLE, PokemonType.WATER, -1, [ - [ Biome.SWAMP, BiomePoolTier.COMMON ] + [ SpeciesId.TYMPOLE, PokemonType.WATER, -1, [ + [ BiomeId.SWAMP, BiomePoolTier.COMMON ] ] ], - [ Species.PALPITOAD, PokemonType.WATER, PokemonType.GROUND, [ - [ Biome.SWAMP, BiomePoolTier.COMMON ] + [ SpeciesId.PALPITOAD, PokemonType.WATER, PokemonType.GROUND, [ + [ BiomeId.SWAMP, BiomePoolTier.COMMON ] ] ], - [ Species.SEISMITOAD, PokemonType.WATER, PokemonType.GROUND, [ - [ Biome.SWAMP, BiomePoolTier.COMMON ], - [ Biome.SWAMP, BiomePoolTier.BOSS ] + [ SpeciesId.SEISMITOAD, PokemonType.WATER, PokemonType.GROUND, [ + [ BiomeId.SWAMP, BiomePoolTier.COMMON ], + [ BiomeId.SWAMP, BiomePoolTier.BOSS ] ] ], - [ Species.THROH, PokemonType.FIGHTING, -1, [ - [ Biome.DOJO, BiomePoolTier.RARE ], - [ Biome.DOJO, BiomePoolTier.BOSS ] + [ SpeciesId.THROH, PokemonType.FIGHTING, -1, [ + [ BiomeId.DOJO, BiomePoolTier.RARE ], + [ BiomeId.DOJO, BiomePoolTier.BOSS ] ] ], - [ Species.SAWK, PokemonType.FIGHTING, -1, [ - [ Biome.DOJO, BiomePoolTier.RARE ], - [ Biome.DOJO, BiomePoolTier.BOSS ] + [ SpeciesId.SAWK, PokemonType.FIGHTING, -1, [ + [ BiomeId.DOJO, BiomePoolTier.RARE ], + [ BiomeId.DOJO, BiomePoolTier.BOSS ] ] ], - [ Species.SEWADDLE, PokemonType.BUG, PokemonType.GRASS, [ - [ Biome.FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.SEWADDLE, PokemonType.BUG, PokemonType.GRASS, [ + [ BiomeId.FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.SWADLOON, PokemonType.BUG, PokemonType.GRASS, [ - [ Biome.FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.SWADLOON, PokemonType.BUG, PokemonType.GRASS, [ + [ BiomeId.FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.LEAVANNY, PokemonType.BUG, PokemonType.GRASS, [ - [ Biome.FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.LEAVANNY, PokemonType.BUG, PokemonType.GRASS, [ + [ BiomeId.FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.VENIPEDE, PokemonType.BUG, PokemonType.POISON, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.VENIPEDE, PokemonType.BUG, PokemonType.POISON, [ + [ BiomeId.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.WHIRLIPEDE, PokemonType.BUG, PokemonType.POISON, [ - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.WHIRLIPEDE, PokemonType.BUG, PokemonType.POISON, [ + [ BiomeId.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.SCOLIPEDE, PokemonType.BUG, PokemonType.POISON, [ - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.SCOLIPEDE, PokemonType.BUG, PokemonType.POISON, [ + [ BiomeId.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.COTTONEE, PokemonType.GRASS, PokemonType.FAIRY, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.MEADOW, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.COTTONEE, PokemonType.GRASS, PokemonType.FAIRY, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.MEADOW, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.WHIMSICOTT, PokemonType.GRASS, PokemonType.FAIRY, [ - [ Biome.GRASS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.WHIMSICOTT, PokemonType.GRASS, PokemonType.FAIRY, [ + [ BiomeId.GRASS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.PETILIL, PokemonType.GRASS, -1, [ - [ Biome.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.PETILIL, PokemonType.GRASS, -1, [ + [ BiomeId.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.LILLIGANT, PokemonType.GRASS, -1, [ - [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.LILLIGANT, PokemonType.GRASS, -1, [ + [ BiomeId.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.BASCULIN, PokemonType.WATER, -1, [ - [ Biome.SEABED, BiomePoolTier.COMMON ] + [ SpeciesId.BASCULIN, PokemonType.WATER, -1, [ + [ BiomeId.SEABED, BiomePoolTier.COMMON ] ] ], - [ Species.SANDILE, PokemonType.GROUND, PokemonType.DARK, [ - [ Biome.DESERT, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.SANDILE, PokemonType.GROUND, PokemonType.DARK, [ + [ BiomeId.DESERT, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.KROKOROK, PokemonType.GROUND, PokemonType.DARK, [ - [ Biome.DESERT, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.KROKOROK, PokemonType.GROUND, PokemonType.DARK, [ + [ BiomeId.DESERT, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.KROOKODILE, PokemonType.GROUND, PokemonType.DARK, [ - [ Biome.DESERT, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.DESERT, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.KROOKODILE, PokemonType.GROUND, PokemonType.DARK, [ + [ BiomeId.DESERT, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.DESERT, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.DARUMAKA, PokemonType.FIRE, -1, [ - [ Biome.DESERT, BiomePoolTier.RARE ] + [ SpeciesId.DARUMAKA, PokemonType.FIRE, -1, [ + [ BiomeId.DESERT, BiomePoolTier.RARE ] ] ], - [ Species.DARMANITAN, PokemonType.FIRE, -1, [ - [ Biome.DESERT, BiomePoolTier.RARE ], - [ Biome.DESERT, BiomePoolTier.BOSS ] + [ SpeciesId.DARMANITAN, PokemonType.FIRE, -1, [ + [ BiomeId.DESERT, BiomePoolTier.RARE ], + [ BiomeId.DESERT, BiomePoolTier.BOSS ] ] ], - [ Species.MARACTUS, PokemonType.GRASS, -1, [ - [ Biome.DESERT, BiomePoolTier.UNCOMMON ], - [ Biome.DESERT, BiomePoolTier.BOSS ] + [ SpeciesId.MARACTUS, PokemonType.GRASS, -1, [ + [ BiomeId.DESERT, BiomePoolTier.UNCOMMON ], + [ BiomeId.DESERT, BiomePoolTier.BOSS ] ] ], - [ Species.DWEBBLE, PokemonType.BUG, PokemonType.ROCK, [ - [ Biome.BEACH, BiomePoolTier.COMMON ] + [ SpeciesId.DWEBBLE, PokemonType.BUG, PokemonType.ROCK, [ + [ BiomeId.BEACH, BiomePoolTier.COMMON ] ] ], - [ Species.CRUSTLE, PokemonType.BUG, PokemonType.ROCK, [ - [ Biome.BEACH, BiomePoolTier.COMMON ], - [ Biome.BEACH, BiomePoolTier.BOSS ] + [ SpeciesId.CRUSTLE, PokemonType.BUG, PokemonType.ROCK, [ + [ BiomeId.BEACH, BiomePoolTier.COMMON ], + [ BiomeId.BEACH, BiomePoolTier.BOSS ] ] ], - [ Species.SCRAGGY, PokemonType.DARK, PokemonType.FIGHTING, [ - [ Biome.DOJO, BiomePoolTier.UNCOMMON ], - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.SCRAGGY, PokemonType.DARK, PokemonType.FIGHTING, [ + [ BiomeId.DOJO, BiomePoolTier.UNCOMMON ], + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.SCRAFTY, PokemonType.DARK, PokemonType.FIGHTING, [ - [ Biome.DOJO, BiomePoolTier.UNCOMMON ], - [ Biome.DOJO, BiomePoolTier.BOSS ], - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.SCRAFTY, PokemonType.DARK, PokemonType.FIGHTING, [ + [ BiomeId.DOJO, BiomePoolTier.UNCOMMON ], + [ BiomeId.DOJO, BiomePoolTier.BOSS ], + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.SIGILYPH, PokemonType.PSYCHIC, PokemonType.FLYING, [ - [ Biome.RUINS, BiomePoolTier.UNCOMMON ], - [ Biome.RUINS, BiomePoolTier.BOSS ], - [ Biome.SPACE, BiomePoolTier.RARE ] + [ SpeciesId.SIGILYPH, PokemonType.PSYCHIC, PokemonType.FLYING, [ + [ BiomeId.RUINS, BiomePoolTier.UNCOMMON ], + [ BiomeId.RUINS, BiomePoolTier.BOSS ], + [ BiomeId.SPACE, BiomePoolTier.RARE ] ] ], - [ Species.YAMASK, PokemonType.GHOST, -1, [ - [ Biome.GRAVEYARD, BiomePoolTier.UNCOMMON ], - [ Biome.TEMPLE, BiomePoolTier.COMMON ] + [ SpeciesId.YAMASK, PokemonType.GHOST, -1, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.UNCOMMON ], + [ BiomeId.TEMPLE, BiomePoolTier.COMMON ] ] ], - [ Species.COFAGRIGUS, PokemonType.GHOST, -1, [ - [ Biome.GRAVEYARD, BiomePoolTier.UNCOMMON ], - [ Biome.TEMPLE, BiomePoolTier.COMMON ], - [ Biome.TEMPLE, BiomePoolTier.BOSS ] + [ SpeciesId.COFAGRIGUS, PokemonType.GHOST, -1, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.UNCOMMON ], + [ BiomeId.TEMPLE, BiomePoolTier.COMMON ], + [ BiomeId.TEMPLE, BiomePoolTier.BOSS ] ] ], - [ Species.TIRTOUGA, PokemonType.WATER, PokemonType.ROCK, [ - [ Biome.SEA, BiomePoolTier.SUPER_RARE ], - [ Biome.BEACH, BiomePoolTier.SUPER_RARE ] + [ SpeciesId.TIRTOUGA, PokemonType.WATER, PokemonType.ROCK, [ + [ BiomeId.SEA, BiomePoolTier.SUPER_RARE ], + [ BiomeId.BEACH, BiomePoolTier.SUPER_RARE ] ] ], - [ Species.CARRACOSTA, PokemonType.WATER, PokemonType.ROCK, [ - [ Biome.SEA, BiomePoolTier.SUPER_RARE ], - [ Biome.BEACH, BiomePoolTier.SUPER_RARE ], - [ Biome.BEACH, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.CARRACOSTA, PokemonType.WATER, PokemonType.ROCK, [ + [ BiomeId.SEA, BiomePoolTier.SUPER_RARE ], + [ BiomeId.BEACH, BiomePoolTier.SUPER_RARE ], + [ BiomeId.BEACH, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.ARCHEN, PokemonType.ROCK, PokemonType.FLYING, [ - [ Biome.RUINS, BiomePoolTier.SUPER_RARE ] + [ SpeciesId.ARCHEN, PokemonType.ROCK, PokemonType.FLYING, [ + [ BiomeId.RUINS, BiomePoolTier.SUPER_RARE ] ] ], - [ Species.ARCHEOPS, PokemonType.ROCK, PokemonType.FLYING, [ - [ Biome.MOUNTAIN, BiomePoolTier.SUPER_RARE ], - [ Biome.RUINS, BiomePoolTier.SUPER_RARE ], - [ Biome.RUINS, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.ARCHEOPS, PokemonType.ROCK, PokemonType.FLYING, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.SUPER_RARE ], + [ BiomeId.RUINS, BiomePoolTier.SUPER_RARE ], + [ BiomeId.RUINS, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.TRUBBISH, PokemonType.POISON, -1, [ - [ Biome.SLUM, BiomePoolTier.COMMON ] + [ SpeciesId.TRUBBISH, PokemonType.POISON, -1, [ + [ BiomeId.SLUM, BiomePoolTier.COMMON ] ] ], - [ Species.GARBODOR, PokemonType.POISON, -1, [ - [ Biome.SLUM, BiomePoolTier.COMMON ], - [ Biome.SLUM, BiomePoolTier.BOSS ] + [ SpeciesId.GARBODOR, PokemonType.POISON, -1, [ + [ BiomeId.SLUM, BiomePoolTier.COMMON ], + [ BiomeId.SLUM, BiomePoolTier.BOSS ] ] ], - [ Species.ZORUA, PokemonType.DARK, -1, [ - [ Biome.ABYSS, BiomePoolTier.RARE ] + [ SpeciesId.ZORUA, PokemonType.DARK, -1, [ + [ BiomeId.ABYSS, BiomePoolTier.RARE ] ] ], - [ Species.ZOROARK, PokemonType.DARK, -1, [ - [ Biome.ABYSS, BiomePoolTier.RARE ], - [ Biome.ABYSS, BiomePoolTier.BOSS ] + [ SpeciesId.ZOROARK, PokemonType.DARK, -1, [ + [ BiomeId.ABYSS, BiomePoolTier.RARE ], + [ BiomeId.ABYSS, BiomePoolTier.BOSS ] ] ], - [ Species.MINCCINO, PokemonType.NORMAL, -1, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.MEADOW, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.MINCCINO, PokemonType.NORMAL, -1, [ + [ BiomeId.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.MEADOW, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.CINCCINO, PokemonType.NORMAL, -1, [ - [ Biome.MEADOW, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.CINCCINO, PokemonType.NORMAL, -1, [ + [ BiomeId.MEADOW, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.GOTHITA, PokemonType.PSYCHIC, -1, [ - [ Biome.RUINS, BiomePoolTier.RARE ] + [ SpeciesId.GOTHITA, PokemonType.PSYCHIC, -1, [ + [ BiomeId.RUINS, BiomePoolTier.RARE ] ] ], - [ Species.GOTHORITA, PokemonType.PSYCHIC, -1, [ - [ Biome.RUINS, BiomePoolTier.RARE ] + [ SpeciesId.GOTHORITA, PokemonType.PSYCHIC, -1, [ + [ BiomeId.RUINS, BiomePoolTier.RARE ] ] ], - [ Species.GOTHITELLE, PokemonType.PSYCHIC, -1, [ - [ Biome.RUINS, BiomePoolTier.RARE ], - [ Biome.RUINS, BiomePoolTier.BOSS ] + [ SpeciesId.GOTHITELLE, PokemonType.PSYCHIC, -1, [ + [ BiomeId.RUINS, BiomePoolTier.RARE ], + [ BiomeId.RUINS, BiomePoolTier.BOSS ] ] ], - [ Species.SOLOSIS, PokemonType.PSYCHIC, -1, [ - [ Biome.SPACE, BiomePoolTier.RARE ], - [ Biome.LABORATORY, BiomePoolTier.UNCOMMON ] + [ SpeciesId.SOLOSIS, PokemonType.PSYCHIC, -1, [ + [ BiomeId.SPACE, BiomePoolTier.RARE ], + [ BiomeId.LABORATORY, BiomePoolTier.UNCOMMON ] ] ], - [ Species.DUOSION, PokemonType.PSYCHIC, -1, [ - [ Biome.SPACE, BiomePoolTier.RARE ], - [ Biome.LABORATORY, BiomePoolTier.UNCOMMON ] + [ SpeciesId.DUOSION, PokemonType.PSYCHIC, -1, [ + [ BiomeId.SPACE, BiomePoolTier.RARE ], + [ BiomeId.LABORATORY, BiomePoolTier.UNCOMMON ] ] ], - [ Species.REUNICLUS, PokemonType.PSYCHIC, -1, [ - [ Biome.SPACE, BiomePoolTier.RARE ], - [ Biome.SPACE, BiomePoolTier.BOSS ], - [ Biome.LABORATORY, BiomePoolTier.UNCOMMON ], - [ Biome.LABORATORY, BiomePoolTier.BOSS ] + [ SpeciesId.REUNICLUS, PokemonType.PSYCHIC, -1, [ + [ BiomeId.SPACE, BiomePoolTier.RARE ], + [ BiomeId.SPACE, BiomePoolTier.BOSS ], + [ BiomeId.LABORATORY, BiomePoolTier.UNCOMMON ], + [ BiomeId.LABORATORY, BiomePoolTier.BOSS ] ] ], - [ Species.DUCKLETT, PokemonType.WATER, PokemonType.FLYING, [ - [ Biome.LAKE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.DUCKLETT, PokemonType.WATER, PokemonType.FLYING, [ + [ BiomeId.LAKE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.SWANNA, PokemonType.WATER, PokemonType.FLYING, [ - [ Biome.LAKE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.LAKE, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.SWANNA, PokemonType.WATER, PokemonType.FLYING, [ + [ BiomeId.LAKE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.LAKE, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.VANILLITE, PokemonType.ICE, -1, [ - [ Biome.ICE_CAVE, BiomePoolTier.COMMON ] + [ SpeciesId.VANILLITE, PokemonType.ICE, -1, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.COMMON ] ] ], - [ Species.VANILLISH, PokemonType.ICE, -1, [ - [ Biome.ICE_CAVE, BiomePoolTier.COMMON ] + [ SpeciesId.VANILLISH, PokemonType.ICE, -1, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.COMMON ] ] ], - [ Species.VANILLUXE, PokemonType.ICE, -1, [ - [ Biome.ICE_CAVE, BiomePoolTier.COMMON ], - [ Biome.ICE_CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.VANILLUXE, PokemonType.ICE, -1, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.COMMON ], + [ BiomeId.ICE_CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.DEERLING, PokemonType.NORMAL, PokemonType.GRASS, [ - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.DEERLING, PokemonType.NORMAL, PokemonType.GRASS, [ + [ BiomeId.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.SAWSBUCK, PokemonType.NORMAL, PokemonType.GRASS, [ - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.SAWSBUCK, PokemonType.NORMAL, PokemonType.GRASS, [ + [ BiomeId.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.EMOLGA, PokemonType.ELECTRIC, PokemonType.FLYING, [ - [ Biome.POWER_PLANT, BiomePoolTier.UNCOMMON ] + [ SpeciesId.EMOLGA, PokemonType.ELECTRIC, PokemonType.FLYING, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.UNCOMMON ] ] ], - [ Species.KARRABLAST, PokemonType.BUG, -1, [ - [ Biome.FOREST, BiomePoolTier.RARE ] + [ SpeciesId.KARRABLAST, PokemonType.BUG, -1, [ + [ BiomeId.FOREST, BiomePoolTier.RARE ] ] ], - [ Species.ESCAVALIER, PokemonType.BUG, PokemonType.STEEL, [ - [ Biome.FOREST, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.ESCAVALIER, PokemonType.BUG, PokemonType.STEEL, [ + [ BiomeId.FOREST, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.FOONGUS, PokemonType.GRASS, PokemonType.POISON, [ - [ Biome.GRASS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.JUNGLE, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.FOONGUS, PokemonType.GRASS, PokemonType.POISON, [ + [ BiomeId.GRASS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.JUNGLE, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.AMOONGUSS, PokemonType.GRASS, PokemonType.POISON, [ - [ Biome.GRASS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.JUNGLE, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.JUNGLE, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.AMOONGUSS, PokemonType.GRASS, PokemonType.POISON, [ + [ BiomeId.GRASS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.JUNGLE, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.JUNGLE, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.FRILLISH, PokemonType.WATER, PokemonType.GHOST, [ - [ Biome.SEABED, BiomePoolTier.COMMON ] + [ SpeciesId.FRILLISH, PokemonType.WATER, PokemonType.GHOST, [ + [ BiomeId.SEABED, BiomePoolTier.COMMON ] ] ], - [ Species.JELLICENT, PokemonType.WATER, PokemonType.GHOST, [ - [ Biome.SEABED, BiomePoolTier.COMMON ], - [ Biome.SEABED, BiomePoolTier.BOSS ] + [ SpeciesId.JELLICENT, PokemonType.WATER, PokemonType.GHOST, [ + [ BiomeId.SEABED, BiomePoolTier.COMMON ], + [ BiomeId.SEABED, BiomePoolTier.BOSS ] ] ], - [ Species.ALOMOMOLA, PokemonType.WATER, -1, [ - [ Biome.SEABED, BiomePoolTier.RARE ], - [ Biome.SEABED, BiomePoolTier.BOSS ] + [ SpeciesId.ALOMOMOLA, PokemonType.WATER, -1, [ + [ BiomeId.SEABED, BiomePoolTier.RARE ], + [ BiomeId.SEABED, BiomePoolTier.BOSS ] ] ], - [ Species.JOLTIK, PokemonType.BUG, PokemonType.ELECTRIC, [ - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.JOLTIK, PokemonType.BUG, PokemonType.ELECTRIC, [ + [ BiomeId.JUNGLE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.GALVANTULA, PokemonType.BUG, PokemonType.ELECTRIC, [ - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON ], - [ Biome.JUNGLE, BiomePoolTier.BOSS ] + [ SpeciesId.GALVANTULA, PokemonType.BUG, PokemonType.ELECTRIC, [ + [ BiomeId.JUNGLE, BiomePoolTier.UNCOMMON ], + [ BiomeId.JUNGLE, BiomePoolTier.BOSS ] ] ], - [ Species.FERROSEED, PokemonType.GRASS, PokemonType.STEEL, [ - [ Biome.CAVE, BiomePoolTier.RARE ] + [ SpeciesId.FERROSEED, PokemonType.GRASS, PokemonType.STEEL, [ + [ BiomeId.CAVE, BiomePoolTier.RARE ] ] ], - [ Species.FERROTHORN, PokemonType.GRASS, PokemonType.STEEL, [ - [ Biome.CAVE, BiomePoolTier.RARE ], - [ Biome.CAVE, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.FERROTHORN, PokemonType.GRASS, PokemonType.STEEL, [ + [ BiomeId.CAVE, BiomePoolTier.RARE ], + [ BiomeId.CAVE, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.KLINK, PokemonType.STEEL, -1, [ - [ Biome.FACTORY, BiomePoolTier.COMMON ], - [ Biome.LABORATORY, BiomePoolTier.COMMON ] + [ SpeciesId.KLINK, PokemonType.STEEL, -1, [ + [ BiomeId.FACTORY, BiomePoolTier.COMMON ], + [ BiomeId.LABORATORY, BiomePoolTier.COMMON ] ] ], - [ Species.KLANG, PokemonType.STEEL, -1, [ - [ Biome.FACTORY, BiomePoolTier.COMMON ], - [ Biome.LABORATORY, BiomePoolTier.COMMON ] + [ SpeciesId.KLANG, PokemonType.STEEL, -1, [ + [ BiomeId.FACTORY, BiomePoolTier.COMMON ], + [ BiomeId.LABORATORY, BiomePoolTier.COMMON ] ] ], - [ Species.KLINKLANG, PokemonType.STEEL, -1, [ - [ Biome.FACTORY, BiomePoolTier.COMMON ], - [ Biome.FACTORY, BiomePoolTier.BOSS ], - [ Biome.LABORATORY, BiomePoolTier.COMMON ], - [ Biome.LABORATORY, BiomePoolTier.BOSS ] + [ SpeciesId.KLINKLANG, PokemonType.STEEL, -1, [ + [ BiomeId.FACTORY, BiomePoolTier.COMMON ], + [ BiomeId.FACTORY, BiomePoolTier.BOSS ], + [ BiomeId.LABORATORY, BiomePoolTier.COMMON ], + [ BiomeId.LABORATORY, BiomePoolTier.BOSS ] ] ], - [ Species.TYNAMO, PokemonType.ELECTRIC, -1, [ - [ Biome.SEABED, BiomePoolTier.RARE ] + [ SpeciesId.TYNAMO, PokemonType.ELECTRIC, -1, [ + [ BiomeId.SEABED, BiomePoolTier.RARE ] ] ], - [ Species.EELEKTRIK, PokemonType.ELECTRIC, -1, [ - [ Biome.SEABED, BiomePoolTier.RARE ] + [ SpeciesId.EELEKTRIK, PokemonType.ELECTRIC, -1, [ + [ BiomeId.SEABED, BiomePoolTier.RARE ] ] ], - [ Species.EELEKTROSS, PokemonType.ELECTRIC, -1, [ - [ Biome.SEABED, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.EELEKTROSS, PokemonType.ELECTRIC, -1, [ + [ BiomeId.SEABED, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.ELGYEM, PokemonType.PSYCHIC, -1, [ - [ Biome.RUINS, BiomePoolTier.COMMON ], - [ Biome.SPACE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.ELGYEM, PokemonType.PSYCHIC, -1, [ + [ BiomeId.RUINS, BiomePoolTier.COMMON ], + [ BiomeId.SPACE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.BEHEEYEM, PokemonType.PSYCHIC, -1, [ - [ Biome.RUINS, BiomePoolTier.COMMON ], - [ Biome.RUINS, BiomePoolTier.BOSS ], - [ Biome.SPACE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.BEHEEYEM, PokemonType.PSYCHIC, -1, [ + [ BiomeId.RUINS, BiomePoolTier.COMMON ], + [ BiomeId.RUINS, BiomePoolTier.BOSS ], + [ BiomeId.SPACE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.LITWICK, PokemonType.GHOST, PokemonType.FIRE, [ - [ Biome.GRAVEYARD, BiomePoolTier.COMMON ], - [ Biome.TEMPLE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.LITWICK, PokemonType.GHOST, PokemonType.FIRE, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.COMMON ], + [ BiomeId.TEMPLE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.LAMPENT, PokemonType.GHOST, PokemonType.FIRE, [ - [ Biome.GRAVEYARD, BiomePoolTier.COMMON ], - [ Biome.TEMPLE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.LAMPENT, PokemonType.GHOST, PokemonType.FIRE, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.COMMON ], + [ BiomeId.TEMPLE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.CHANDELURE, PokemonType.GHOST, PokemonType.FIRE, [ - [ Biome.GRAVEYARD, BiomePoolTier.BOSS ] + [ SpeciesId.CHANDELURE, PokemonType.GHOST, PokemonType.FIRE, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.BOSS ] ] ], - [ Species.AXEW, PokemonType.DRAGON, -1, [ - [ Biome.MOUNTAIN, BiomePoolTier.SUPER_RARE ], - [ Biome.WASTELAND, BiomePoolTier.COMMON ] + [ SpeciesId.AXEW, PokemonType.DRAGON, -1, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.SUPER_RARE ], + [ BiomeId.WASTELAND, BiomePoolTier.COMMON ] ] ], - [ Species.FRAXURE, PokemonType.DRAGON, -1, [ - [ Biome.MOUNTAIN, BiomePoolTier.SUPER_RARE ], - [ Biome.WASTELAND, BiomePoolTier.COMMON ] + [ SpeciesId.FRAXURE, PokemonType.DRAGON, -1, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.SUPER_RARE ], + [ BiomeId.WASTELAND, BiomePoolTier.COMMON ] ] ], - [ Species.HAXORUS, PokemonType.DRAGON, -1, [ - [ Biome.WASTELAND, BiomePoolTier.COMMON ], - [ Biome.WASTELAND, BiomePoolTier.BOSS ] + [ SpeciesId.HAXORUS, PokemonType.DRAGON, -1, [ + [ BiomeId.WASTELAND, BiomePoolTier.COMMON ], + [ BiomeId.WASTELAND, BiomePoolTier.BOSS ] ] ], - [ Species.CUBCHOO, PokemonType.ICE, -1, [ - [ Biome.ICE_CAVE, BiomePoolTier.COMMON ] + [ SpeciesId.CUBCHOO, PokemonType.ICE, -1, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.COMMON ] ] ], - [ Species.BEARTIC, PokemonType.ICE, -1, [ - [ Biome.ICE_CAVE, BiomePoolTier.COMMON ], - [ Biome.ICE_CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.BEARTIC, PokemonType.ICE, -1, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.COMMON ], + [ BiomeId.ICE_CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.CRYOGONAL, PokemonType.ICE, -1, [ - [ Biome.ICE_CAVE, BiomePoolTier.RARE ], - [ Biome.ICE_CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.CRYOGONAL, PokemonType.ICE, -1, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.RARE ], + [ BiomeId.ICE_CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.SHELMET, PokemonType.BUG, -1, [ - [ Biome.FOREST, BiomePoolTier.RARE ] + [ SpeciesId.SHELMET, PokemonType.BUG, -1, [ + [ BiomeId.FOREST, BiomePoolTier.RARE ] ] ], - [ Species.ACCELGOR, PokemonType.BUG, -1, [ - [ Biome.FOREST, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.ACCELGOR, PokemonType.BUG, -1, [ + [ BiomeId.FOREST, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.STUNFISK, PokemonType.GROUND, PokemonType.ELECTRIC, [ - [ Biome.SWAMP, BiomePoolTier.UNCOMMON ], - [ Biome.SWAMP, BiomePoolTier.BOSS ] + [ SpeciesId.STUNFISK, PokemonType.GROUND, PokemonType.ELECTRIC, [ + [ BiomeId.SWAMP, BiomePoolTier.UNCOMMON ], + [ BiomeId.SWAMP, BiomePoolTier.BOSS ] ] ], - [ Species.MIENFOO, PokemonType.FIGHTING, -1, [ - [ Biome.DOJO, BiomePoolTier.UNCOMMON ] + [ SpeciesId.MIENFOO, PokemonType.FIGHTING, -1, [ + [ BiomeId.DOJO, BiomePoolTier.UNCOMMON ] ] ], - [ Species.MIENSHAO, PokemonType.FIGHTING, -1, [ - [ Biome.DOJO, BiomePoolTier.UNCOMMON ], - [ Biome.DOJO, BiomePoolTier.BOSS ] + [ SpeciesId.MIENSHAO, PokemonType.FIGHTING, -1, [ + [ BiomeId.DOJO, BiomePoolTier.UNCOMMON ], + [ BiomeId.DOJO, BiomePoolTier.BOSS ] ] ], - [ Species.DRUDDIGON, PokemonType.DRAGON, -1, [ - [ Biome.WASTELAND, BiomePoolTier.SUPER_RARE ], - [ Biome.WASTELAND, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.DRUDDIGON, PokemonType.DRAGON, -1, [ + [ BiomeId.WASTELAND, BiomePoolTier.SUPER_RARE ], + [ BiomeId.WASTELAND, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.GOLETT, PokemonType.GROUND, PokemonType.GHOST, [ - [ Biome.TEMPLE, BiomePoolTier.COMMON ] + [ SpeciesId.GOLETT, PokemonType.GROUND, PokemonType.GHOST, [ + [ BiomeId.TEMPLE, BiomePoolTier.COMMON ] ] ], - [ Species.GOLURK, PokemonType.GROUND, PokemonType.GHOST, [ - [ Biome.TEMPLE, BiomePoolTier.COMMON ], - [ Biome.TEMPLE, BiomePoolTier.BOSS ] + [ SpeciesId.GOLURK, PokemonType.GROUND, PokemonType.GHOST, [ + [ BiomeId.TEMPLE, BiomePoolTier.COMMON ], + [ BiomeId.TEMPLE, BiomePoolTier.BOSS ] ] ], - [ Species.PAWNIARD, PokemonType.DARK, PokemonType.STEEL, [ - [ Biome.ABYSS, BiomePoolTier.COMMON ] + [ SpeciesId.PAWNIARD, PokemonType.DARK, PokemonType.STEEL, [ + [ BiomeId.ABYSS, BiomePoolTier.COMMON ] ] ], - [ Species.BISHARP, PokemonType.DARK, PokemonType.STEEL, [ - [ Biome.ABYSS, BiomePoolTier.COMMON ] + [ SpeciesId.BISHARP, PokemonType.DARK, PokemonType.STEEL, [ + [ BiomeId.ABYSS, BiomePoolTier.COMMON ] ] ], - [ Species.BOUFFALANT, PokemonType.NORMAL, -1, [ - [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.MEADOW, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.BOUFFALANT, PokemonType.NORMAL, -1, [ + [ BiomeId.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.MEADOW, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.RUFFLET, PokemonType.NORMAL, PokemonType.FLYING, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.RUFFLET, PokemonType.NORMAL, PokemonType.FLYING, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.BRAVIARY, PokemonType.NORMAL, PokemonType.FLYING, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.BRAVIARY, PokemonType.NORMAL, PokemonType.FLYING, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.VULLABY, PokemonType.DARK, PokemonType.FLYING, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.VULLABY, PokemonType.DARK, PokemonType.FLYING, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.MANDIBUZZ, PokemonType.DARK, PokemonType.FLYING, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.MANDIBUZZ, PokemonType.DARK, PokemonType.FLYING, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.HEATMOR, PokemonType.FIRE, -1, [ - [ Biome.VOLCANO, BiomePoolTier.UNCOMMON ], - [ Biome.VOLCANO, BiomePoolTier.BOSS ] + [ SpeciesId.HEATMOR, PokemonType.FIRE, -1, [ + [ BiomeId.VOLCANO, BiomePoolTier.UNCOMMON ], + [ BiomeId.VOLCANO, BiomePoolTier.BOSS ] ] ], - [ Species.DURANT, PokemonType.BUG, PokemonType.STEEL, [ - [ Biome.FOREST, BiomePoolTier.SUPER_RARE ], - [ Biome.FOREST, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.DURANT, PokemonType.BUG, PokemonType.STEEL, [ + [ BiomeId.FOREST, BiomePoolTier.SUPER_RARE ], + [ BiomeId.FOREST, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.DEINO, PokemonType.DARK, PokemonType.DRAGON, [ - [ Biome.WASTELAND, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.ABYSS, BiomePoolTier.RARE ] + [ SpeciesId.DEINO, PokemonType.DARK, PokemonType.DRAGON, [ + [ BiomeId.WASTELAND, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.ABYSS, BiomePoolTier.RARE ] ] ], - [ Species.ZWEILOUS, PokemonType.DARK, PokemonType.DRAGON, [ - [ Biome.WASTELAND, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.ABYSS, BiomePoolTier.RARE ] + [ SpeciesId.ZWEILOUS, PokemonType.DARK, PokemonType.DRAGON, [ + [ BiomeId.WASTELAND, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.ABYSS, BiomePoolTier.RARE ] ] ], - [ Species.HYDREIGON, PokemonType.DARK, PokemonType.DRAGON, [ - [ Biome.WASTELAND, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.ABYSS, BiomePoolTier.RARE ], - [ Biome.ABYSS, BiomePoolTier.BOSS ] + [ SpeciesId.HYDREIGON, PokemonType.DARK, PokemonType.DRAGON, [ + [ BiomeId.WASTELAND, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.ABYSS, BiomePoolTier.RARE ], + [ BiomeId.ABYSS, BiomePoolTier.BOSS ] ] ], - [ Species.LARVESTA, PokemonType.BUG, PokemonType.FIRE, [ - [ Biome.VOLCANO, BiomePoolTier.SUPER_RARE ] + [ SpeciesId.LARVESTA, PokemonType.BUG, PokemonType.FIRE, [ + [ BiomeId.VOLCANO, BiomePoolTier.SUPER_RARE ] ] ], - [ Species.VOLCARONA, PokemonType.BUG, PokemonType.FIRE, [ - [ Biome.VOLCANO, BiomePoolTier.SUPER_RARE ], - [ Biome.VOLCANO, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.VOLCARONA, PokemonType.BUG, PokemonType.FIRE, [ + [ BiomeId.VOLCANO, BiomePoolTier.SUPER_RARE ], + [ BiomeId.VOLCANO, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.COBALION, PokemonType.STEEL, PokemonType.FIGHTING, [ - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.ULTRA_RARE ], - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.COBALION, PokemonType.STEEL, PokemonType.FIGHTING, [ + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.TERRAKION, PokemonType.ROCK, PokemonType.FIGHTING, [ - [ Biome.DOJO, BiomePoolTier.ULTRA_RARE ], - [ Biome.DOJO, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.TERRAKION, PokemonType.ROCK, PokemonType.FIGHTING, [ + [ BiomeId.DOJO, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.DOJO, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.VIRIZION, PokemonType.GRASS, PokemonType.FIGHTING, [ - [ Biome.GRASS, BiomePoolTier.ULTRA_RARE ], - [ Biome.GRASS, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.VIRIZION, PokemonType.GRASS, PokemonType.FIGHTING, [ + [ BiomeId.GRASS, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.GRASS, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.TORNADUS, PokemonType.FLYING, -1, [ - [ Biome.MOUNTAIN, BiomePoolTier.ULTRA_RARE ], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.TORNADUS, PokemonType.FLYING, -1, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.MOUNTAIN, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.THUNDURUS, PokemonType.ELECTRIC, PokemonType.FLYING, [ - [ Biome.POWER_PLANT, BiomePoolTier.ULTRA_RARE ], - [ Biome.POWER_PLANT, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.THUNDURUS, PokemonType.ELECTRIC, PokemonType.FLYING, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.POWER_PLANT, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.RESHIRAM, PokemonType.DRAGON, PokemonType.FIRE, [ - [ Biome.VOLCANO, BiomePoolTier.BOSS_ULTRA_RARE ] + [ SpeciesId.RESHIRAM, PokemonType.DRAGON, PokemonType.FIRE, [ + [ BiomeId.VOLCANO, BiomePoolTier.BOSS_ULTRA_RARE ] ] ], - [ Species.ZEKROM, PokemonType.DRAGON, PokemonType.ELECTRIC, [ - [ Biome.POWER_PLANT, BiomePoolTier.BOSS_ULTRA_RARE ] + [ SpeciesId.ZEKROM, PokemonType.DRAGON, PokemonType.ELECTRIC, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.BOSS_ULTRA_RARE ] ] ], - [ Species.LANDORUS, PokemonType.GROUND, PokemonType.FLYING, [ - [ Biome.BADLANDS, BiomePoolTier.ULTRA_RARE ], - [ Biome.BADLANDS, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.LANDORUS, PokemonType.GROUND, PokemonType.FLYING, [ + [ BiomeId.BADLANDS, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.BADLANDS, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.KYUREM, PokemonType.DRAGON, PokemonType.ICE, [ - [ Biome.ICE_CAVE, BiomePoolTier.BOSS_ULTRA_RARE ] + [ SpeciesId.KYUREM, PokemonType.DRAGON, PokemonType.ICE, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.BOSS_ULTRA_RARE ] ] ], - [ Species.KELDEO, PokemonType.WATER, PokemonType.FIGHTING, [ - [ Biome.BEACH, BiomePoolTier.ULTRA_RARE ], - [ Biome.BEACH, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.KELDEO, PokemonType.WATER, PokemonType.FIGHTING, [ + [ BiomeId.BEACH, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.BEACH, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.MELOETTA, PokemonType.NORMAL, PokemonType.PSYCHIC, [ - [ Biome.MEADOW, BiomePoolTier.ULTRA_RARE ], - [ Biome.MEADOW, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.MELOETTA, PokemonType.NORMAL, PokemonType.PSYCHIC, [ + [ BiomeId.MEADOW, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.MEADOW, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.GENESECT, PokemonType.BUG, PokemonType.STEEL, [ - [ Biome.FACTORY, BiomePoolTier.ULTRA_RARE ], - [ Biome.FACTORY, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.GENESECT, PokemonType.BUG, PokemonType.STEEL, [ + [ BiomeId.FACTORY, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.FACTORY, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.CHESPIN, PokemonType.GRASS, -1, [ - [ Biome.FOREST, BiomePoolTier.RARE ] + [ SpeciesId.CHESPIN, PokemonType.GRASS, -1, [ + [ BiomeId.FOREST, BiomePoolTier.RARE ] ] ], - [ Species.QUILLADIN, PokemonType.GRASS, -1, [ - [ Biome.FOREST, BiomePoolTier.RARE ] + [ SpeciesId.QUILLADIN, PokemonType.GRASS, -1, [ + [ BiomeId.FOREST, BiomePoolTier.RARE ] ] ], - [ Species.CHESNAUGHT, PokemonType.GRASS, PokemonType.FIGHTING, [ - [ Biome.FOREST, BiomePoolTier.RARE ], - [ Biome.FOREST, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.CHESNAUGHT, PokemonType.GRASS, PokemonType.FIGHTING, [ + [ BiomeId.FOREST, BiomePoolTier.RARE ], + [ BiomeId.FOREST, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.FENNEKIN, PokemonType.FIRE, -1, [ - [ Biome.VOLCANO, BiomePoolTier.RARE ] + [ SpeciesId.FENNEKIN, PokemonType.FIRE, -1, [ + [ BiomeId.VOLCANO, BiomePoolTier.RARE ] ] ], - [ Species.BRAIXEN, PokemonType.FIRE, -1, [ - [ Biome.VOLCANO, BiomePoolTier.RARE ] + [ SpeciesId.BRAIXEN, PokemonType.FIRE, -1, [ + [ BiomeId.VOLCANO, BiomePoolTier.RARE ] ] ], - [ Species.DELPHOX, PokemonType.FIRE, PokemonType.PSYCHIC, [ - [ Biome.VOLCANO, BiomePoolTier.RARE ], - [ Biome.VOLCANO, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.DELPHOX, PokemonType.FIRE, PokemonType.PSYCHIC, [ + [ BiomeId.VOLCANO, BiomePoolTier.RARE ], + [ BiomeId.VOLCANO, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.FROAKIE, PokemonType.WATER, -1, [ - [ Biome.LAKE, BiomePoolTier.RARE ] + [ SpeciesId.FROAKIE, PokemonType.WATER, -1, [ + [ BiomeId.LAKE, BiomePoolTier.RARE ] ] ], - [ Species.FROGADIER, PokemonType.WATER, -1, [ - [ Biome.LAKE, BiomePoolTier.RARE ] + [ SpeciesId.FROGADIER, PokemonType.WATER, -1, [ + [ BiomeId.LAKE, BiomePoolTier.RARE ] ] ], - [ Species.GRENINJA, PokemonType.WATER, PokemonType.DARK, [ - [ Biome.LAKE, BiomePoolTier.RARE ], - [ Biome.LAKE, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.GRENINJA, PokemonType.WATER, PokemonType.DARK, [ + [ BiomeId.LAKE, BiomePoolTier.RARE ], + [ BiomeId.LAKE, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.BUNNELBY, PokemonType.NORMAL, -1, [ - [ Biome.CAVE, BiomePoolTier.COMMON ] + [ SpeciesId.BUNNELBY, PokemonType.NORMAL, -1, [ + [ BiomeId.CAVE, BiomePoolTier.COMMON ] ] ], - [ Species.DIGGERSBY, PokemonType.NORMAL, PokemonType.GROUND, [ - [ Biome.CAVE, BiomePoolTier.COMMON ], - [ Biome.CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.DIGGERSBY, PokemonType.NORMAL, PokemonType.GROUND, [ + [ BiomeId.CAVE, BiomePoolTier.COMMON ], + [ BiomeId.CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.FLETCHLING, PokemonType.NORMAL, PokemonType.FLYING, [ - [ Biome.TOWN, BiomePoolTier.COMMON ], - [ Biome.PLAINS, BiomePoolTier.UNCOMMON ], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.FLETCHLING, PokemonType.NORMAL, PokemonType.FLYING, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON ], + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON ], + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.FLETCHINDER, PokemonType.FIRE, PokemonType.FLYING, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON ], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.FLETCHINDER, PokemonType.FIRE, PokemonType.FLYING, [ + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON ], + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.TALONFLAME, PokemonType.FIRE, PokemonType.FLYING, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON ], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.TALONFLAME, PokemonType.FIRE, PokemonType.FLYING, [ + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON ], + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.SCATTERBUG, PokemonType.BUG, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.SCATTERBUG, PokemonType.BUG, -1, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.SPEWPA, PokemonType.BUG, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.SPEWPA, PokemonType.BUG, -1, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.VIVILLON, PokemonType.BUG, PokemonType.FLYING, [ - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.VIVILLON, PokemonType.BUG, PokemonType.FLYING, [ + [ BiomeId.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.LITLEO, PokemonType.FIRE, PokemonType.NORMAL, [ - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.LITLEO, PokemonType.FIRE, PokemonType.NORMAL, [ + [ BiomeId.JUNGLE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.PYROAR, PokemonType.FIRE, PokemonType.NORMAL, [ - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON ], - [ Biome.JUNGLE, BiomePoolTier.BOSS ] + [ SpeciesId.PYROAR, PokemonType.FIRE, PokemonType.NORMAL, [ + [ BiomeId.JUNGLE, BiomePoolTier.UNCOMMON ], + [ BiomeId.JUNGLE, BiomePoolTier.BOSS ] ] ], - [ Species.FLABEBE, PokemonType.FAIRY, -1, [ - [ Biome.MEADOW, BiomePoolTier.COMMON ] + [ SpeciesId.FLABEBE, PokemonType.FAIRY, -1, [ + [ BiomeId.MEADOW, BiomePoolTier.COMMON ] ] ], - [ Species.FLOETTE, PokemonType.FAIRY, -1, [ - [ Biome.MEADOW, BiomePoolTier.COMMON ] + [ SpeciesId.FLOETTE, PokemonType.FAIRY, -1, [ + [ BiomeId.MEADOW, BiomePoolTier.COMMON ] ] ], - [ Species.FLORGES, PokemonType.FAIRY, -1, [ - [ Biome.MEADOW, BiomePoolTier.BOSS ] + [ SpeciesId.FLORGES, PokemonType.FAIRY, -1, [ + [ BiomeId.MEADOW, BiomePoolTier.BOSS ] ] ], - [ Species.SKIDDO, PokemonType.GRASS, -1, [ - [ Biome.MOUNTAIN, BiomePoolTier.COMMON ] + [ SpeciesId.SKIDDO, PokemonType.GRASS, -1, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON ] ] ], - [ Species.GOGOAT, PokemonType.GRASS, -1, [ - [ Biome.MOUNTAIN, BiomePoolTier.COMMON ], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS ] + [ SpeciesId.GOGOAT, PokemonType.GRASS, -1, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON ], + [ BiomeId.MOUNTAIN, BiomePoolTier.BOSS ] ] ], - [ Species.PANCHAM, PokemonType.FIGHTING, -1, [ - [ Biome.DOJO, BiomePoolTier.RARE ], - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.PANCHAM, PokemonType.FIGHTING, -1, [ + [ BiomeId.DOJO, BiomePoolTier.RARE ], + [ BiomeId.JUNGLE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.PANGORO, PokemonType.FIGHTING, PokemonType.DARK, [ - [ Biome.DOJO, BiomePoolTier.RARE ], - [ Biome.DOJO, BiomePoolTier.BOSS_RARE ], - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.PANGORO, PokemonType.FIGHTING, PokemonType.DARK, [ + [ BiomeId.DOJO, BiomePoolTier.RARE ], + [ BiomeId.DOJO, BiomePoolTier.BOSS_RARE ], + [ BiomeId.JUNGLE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.FURFROU, PokemonType.NORMAL, -1, [ - [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON ], - [ Biome.METROPOLIS, BiomePoolTier.BOSS ] + [ SpeciesId.FURFROU, PokemonType.NORMAL, -1, [ + [ BiomeId.METROPOLIS, BiomePoolTier.UNCOMMON ], + [ BiomeId.METROPOLIS, BiomePoolTier.BOSS ] ] ], - [ Species.ESPURR, PokemonType.PSYCHIC, -1, [ - [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.ESPURR, PokemonType.PSYCHIC, -1, [ + [ BiomeId.METROPOLIS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.MEOWSTIC, PokemonType.PSYCHIC, -1, [ - [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.METROPOLIS, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.MEOWSTIC, PokemonType.PSYCHIC, -1, [ + [ BiomeId.METROPOLIS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.METROPOLIS, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.HONEDGE, PokemonType.STEEL, PokemonType.GHOST, [ - [ Biome.TEMPLE, BiomePoolTier.COMMON ] + [ SpeciesId.HONEDGE, PokemonType.STEEL, PokemonType.GHOST, [ + [ BiomeId.TEMPLE, BiomePoolTier.COMMON ] ] ], - [ Species.DOUBLADE, PokemonType.STEEL, PokemonType.GHOST, [ - [ Biome.TEMPLE, BiomePoolTier.COMMON ] + [ SpeciesId.DOUBLADE, PokemonType.STEEL, PokemonType.GHOST, [ + [ BiomeId.TEMPLE, BiomePoolTier.COMMON ] ] ], - [ Species.AEGISLASH, PokemonType.STEEL, PokemonType.GHOST, [ - [ Biome.TEMPLE, BiomePoolTier.BOSS ] + [ SpeciesId.AEGISLASH, PokemonType.STEEL, PokemonType.GHOST, [ + [ BiomeId.TEMPLE, BiomePoolTier.BOSS ] ] ], - [ Species.SPRITZEE, PokemonType.FAIRY, -1, [ - [ Biome.FAIRY_CAVE, BiomePoolTier.COMMON ] + [ SpeciesId.SPRITZEE, PokemonType.FAIRY, -1, [ + [ BiomeId.FAIRY_CAVE, BiomePoolTier.COMMON ] ] ], - [ Species.AROMATISSE, PokemonType.FAIRY, -1, [ - [ Biome.FAIRY_CAVE, BiomePoolTier.COMMON ], - [ Biome.FAIRY_CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.AROMATISSE, PokemonType.FAIRY, -1, [ + [ BiomeId.FAIRY_CAVE, BiomePoolTier.COMMON ], + [ BiomeId.FAIRY_CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.SWIRLIX, PokemonType.FAIRY, -1, [ - [ Biome.FAIRY_CAVE, BiomePoolTier.COMMON ] + [ SpeciesId.SWIRLIX, PokemonType.FAIRY, -1, [ + [ BiomeId.FAIRY_CAVE, BiomePoolTier.COMMON ] ] ], - [ Species.SLURPUFF, PokemonType.FAIRY, -1, [ - [ Biome.FAIRY_CAVE, BiomePoolTier.COMMON ], - [ Biome.FAIRY_CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.SLURPUFF, PokemonType.FAIRY, -1, [ + [ BiomeId.FAIRY_CAVE, BiomePoolTier.COMMON ], + [ BiomeId.FAIRY_CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.INKAY, PokemonType.DARK, PokemonType.PSYCHIC, [ - [ Biome.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.INKAY, PokemonType.DARK, PokemonType.PSYCHIC, [ + [ BiomeId.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.MALAMAR, PokemonType.DARK, PokemonType.PSYCHIC, [ - [ Biome.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.SEA, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.MALAMAR, PokemonType.DARK, PokemonType.PSYCHIC, [ + [ BiomeId.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.SEA, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.BINACLE, PokemonType.ROCK, PokemonType.WATER, [ - [ Biome.BEACH, BiomePoolTier.COMMON ] + [ SpeciesId.BINACLE, PokemonType.ROCK, PokemonType.WATER, [ + [ BiomeId.BEACH, BiomePoolTier.COMMON ] ] ], - [ Species.BARBARACLE, PokemonType.ROCK, PokemonType.WATER, [ - [ Biome.BEACH, BiomePoolTier.COMMON ], - [ Biome.BEACH, BiomePoolTier.BOSS ] + [ SpeciesId.BARBARACLE, PokemonType.ROCK, PokemonType.WATER, [ + [ BiomeId.BEACH, BiomePoolTier.COMMON ], + [ BiomeId.BEACH, BiomePoolTier.BOSS ] ] ], - [ Species.SKRELP, PokemonType.POISON, PokemonType.WATER, [ - [ Biome.SEABED, BiomePoolTier.UNCOMMON ] + [ SpeciesId.SKRELP, PokemonType.POISON, PokemonType.WATER, [ + [ BiomeId.SEABED, BiomePoolTier.UNCOMMON ] ] ], - [ Species.DRAGALGE, PokemonType.POISON, PokemonType.DRAGON, [ - [ Biome.SEABED, BiomePoolTier.UNCOMMON ], - [ Biome.SEABED, BiomePoolTier.BOSS ] + [ SpeciesId.DRAGALGE, PokemonType.POISON, PokemonType.DRAGON, [ + [ BiomeId.SEABED, BiomePoolTier.UNCOMMON ], + [ BiomeId.SEABED, BiomePoolTier.BOSS ] ] ], - [ Species.CLAUNCHER, PokemonType.WATER, -1, [ - [ Biome.BEACH, BiomePoolTier.UNCOMMON ] + [ SpeciesId.CLAUNCHER, PokemonType.WATER, -1, [ + [ BiomeId.BEACH, BiomePoolTier.UNCOMMON ] ] ], - [ Species.CLAWITZER, PokemonType.WATER, -1, [ - [ Biome.BEACH, BiomePoolTier.UNCOMMON ], - [ Biome.BEACH, BiomePoolTier.BOSS ] + [ SpeciesId.CLAWITZER, PokemonType.WATER, -1, [ + [ BiomeId.BEACH, BiomePoolTier.UNCOMMON ], + [ BiomeId.BEACH, BiomePoolTier.BOSS ] ] ], - [ Species.HELIOPTILE, PokemonType.ELECTRIC, PokemonType.NORMAL, [ - [ Biome.DESERT, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.HELIOPTILE, PokemonType.ELECTRIC, PokemonType.NORMAL, [ + [ BiomeId.DESERT, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.HELIOLISK, PokemonType.ELECTRIC, PokemonType.NORMAL, [ - [ Biome.DESERT, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.HELIOLISK, PokemonType.ELECTRIC, PokemonType.NORMAL, [ + [ BiomeId.DESERT, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.TYRUNT, PokemonType.ROCK, PokemonType.DRAGON, [ - [ Biome.WASTELAND, BiomePoolTier.SUPER_RARE ] + [ SpeciesId.TYRUNT, PokemonType.ROCK, PokemonType.DRAGON, [ + [ BiomeId.WASTELAND, BiomePoolTier.SUPER_RARE ] ] ], - [ Species.TYRANTRUM, PokemonType.ROCK, PokemonType.DRAGON, [ - [ Biome.WASTELAND, BiomePoolTier.SUPER_RARE ], - [ Biome.WASTELAND, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.TYRANTRUM, PokemonType.ROCK, PokemonType.DRAGON, [ + [ BiomeId.WASTELAND, BiomePoolTier.SUPER_RARE ], + [ BiomeId.WASTELAND, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.AMAURA, PokemonType.ROCK, PokemonType.ICE, [ - [ Biome.ICE_CAVE, BiomePoolTier.SUPER_RARE ] + [ SpeciesId.AMAURA, PokemonType.ROCK, PokemonType.ICE, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.SUPER_RARE ] ] ], - [ Species.AURORUS, PokemonType.ROCK, PokemonType.ICE, [ - [ Biome.ICE_CAVE, BiomePoolTier.SUPER_RARE ], - [ Biome.ICE_CAVE, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.AURORUS, PokemonType.ROCK, PokemonType.ICE, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.SUPER_RARE ], + [ BiomeId.ICE_CAVE, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.SYLVEON, PokemonType.FAIRY, -1, [ - [ Biome.MEADOW, BiomePoolTier.SUPER_RARE ], - [ Biome.MEADOW, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.SYLVEON, PokemonType.FAIRY, -1, [ + [ BiomeId.MEADOW, BiomePoolTier.SUPER_RARE ], + [ BiomeId.MEADOW, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.HAWLUCHA, PokemonType.FIGHTING, PokemonType.FLYING, [ - [ Biome.MOUNTAIN, BiomePoolTier.RARE ], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.HAWLUCHA, PokemonType.FIGHTING, PokemonType.FLYING, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.RARE ], + [ BiomeId.MOUNTAIN, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.DEDENNE, PokemonType.ELECTRIC, PokemonType.FAIRY, [ - [ Biome.POWER_PLANT, BiomePoolTier.COMMON ], - [ Biome.POWER_PLANT, BiomePoolTier.BOSS ] + [ SpeciesId.DEDENNE, PokemonType.ELECTRIC, PokemonType.FAIRY, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.COMMON ], + [ BiomeId.POWER_PLANT, BiomePoolTier.BOSS ] ] ], - [ Species.CARBINK, PokemonType.ROCK, PokemonType.FAIRY, [ - [ Biome.CAVE, BiomePoolTier.RARE ], - [ Biome.FAIRY_CAVE, BiomePoolTier.UNCOMMON ], - [ Biome.FAIRY_CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.CARBINK, PokemonType.ROCK, PokemonType.FAIRY, [ + [ BiomeId.CAVE, BiomePoolTier.RARE ], + [ BiomeId.FAIRY_CAVE, BiomePoolTier.UNCOMMON ], + [ BiomeId.FAIRY_CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.GOOMY, PokemonType.DRAGON, -1, [ - [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.GOOMY, PokemonType.DRAGON, -1, [ + [ BiomeId.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.SLIGGOO, PokemonType.DRAGON, -1, [ - [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.SLIGGOO, PokemonType.DRAGON, -1, [ + [ BiomeId.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.GOODRA, PokemonType.DRAGON, -1, [ - [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.WASTELAND, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.GOODRA, PokemonType.DRAGON, -1, [ + [ BiomeId.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.WASTELAND, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.KLEFKI, PokemonType.STEEL, PokemonType.FAIRY, [ - [ Biome.FACTORY, BiomePoolTier.UNCOMMON ], - [ Biome.FACTORY, BiomePoolTier.BOSS ] + [ SpeciesId.KLEFKI, PokemonType.STEEL, PokemonType.FAIRY, [ + [ BiomeId.FACTORY, BiomePoolTier.UNCOMMON ], + [ BiomeId.FACTORY, BiomePoolTier.BOSS ] ] ], - [ Species.PHANTUMP, PokemonType.GHOST, PokemonType.GRASS, [ - [ Biome.GRAVEYARD, BiomePoolTier.COMMON ] + [ SpeciesId.PHANTUMP, PokemonType.GHOST, PokemonType.GRASS, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.COMMON ] ] ], - [ Species.TREVENANT, PokemonType.GHOST, PokemonType.GRASS, [ - [ Biome.GRAVEYARD, BiomePoolTier.BOSS ] + [ SpeciesId.TREVENANT, PokemonType.GHOST, PokemonType.GRASS, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.BOSS ] ] ], - [ Species.PUMPKABOO, PokemonType.GHOST, PokemonType.GRASS, [ - [ Biome.GRAVEYARD, BiomePoolTier.COMMON ] + [ SpeciesId.PUMPKABOO, PokemonType.GHOST, PokemonType.GRASS, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.COMMON ] ] ], - [ Species.GOURGEIST, PokemonType.GHOST, PokemonType.GRASS, [ - [ Biome.GRAVEYARD, BiomePoolTier.BOSS ] + [ SpeciesId.GOURGEIST, PokemonType.GHOST, PokemonType.GRASS, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.BOSS ] ] ], - [ Species.BERGMITE, PokemonType.ICE, -1, [ - [ Biome.ICE_CAVE, BiomePoolTier.COMMON ] + [ SpeciesId.BERGMITE, PokemonType.ICE, -1, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.COMMON ] ] ], - [ Species.AVALUGG, PokemonType.ICE, -1, [ - [ Biome.ICE_CAVE, BiomePoolTier.COMMON ], - [ Biome.ICE_CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.AVALUGG, PokemonType.ICE, -1, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.COMMON ], + [ BiomeId.ICE_CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.NOIBAT, PokemonType.FLYING, PokemonType.DRAGON, [ - [ Biome.CAVE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.NOIBAT, PokemonType.FLYING, PokemonType.DRAGON, [ + [ BiomeId.CAVE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.NOIVERN, PokemonType.FLYING, PokemonType.DRAGON, [ - [ Biome.CAVE, BiomePoolTier.UNCOMMON ], - [ Biome.CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.NOIVERN, PokemonType.FLYING, PokemonType.DRAGON, [ + [ BiomeId.CAVE, BiomePoolTier.UNCOMMON ], + [ BiomeId.CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.XERNEAS, PokemonType.FAIRY, -1, [ - [ Biome.FAIRY_CAVE, BiomePoolTier.BOSS_ULTRA_RARE ] + [ SpeciesId.XERNEAS, PokemonType.FAIRY, -1, [ + [ BiomeId.FAIRY_CAVE, BiomePoolTier.BOSS_ULTRA_RARE ] ] ], - [ Species.YVELTAL, PokemonType.DARK, PokemonType.FLYING, [ - [ Biome.ABYSS, BiomePoolTier.BOSS_ULTRA_RARE ] + [ SpeciesId.YVELTAL, PokemonType.DARK, PokemonType.FLYING, [ + [ BiomeId.ABYSS, BiomePoolTier.BOSS_ULTRA_RARE ] ] ], - [ Species.ZYGARDE, PokemonType.DRAGON, PokemonType.GROUND, [ - [ Biome.LABORATORY, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.ZYGARDE, PokemonType.DRAGON, PokemonType.GROUND, [ + [ BiomeId.LABORATORY, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.DIANCIE, PokemonType.ROCK, PokemonType.FAIRY, [ - [ Biome.FAIRY_CAVE, BiomePoolTier.ULTRA_RARE ], - [ Biome.FAIRY_CAVE, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.DIANCIE, PokemonType.ROCK, PokemonType.FAIRY, [ + [ BiomeId.FAIRY_CAVE, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.FAIRY_CAVE, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.HOOPA, PokemonType.PSYCHIC, PokemonType.GHOST, [ - [ Biome.TEMPLE, BiomePoolTier.ULTRA_RARE ], - [ Biome.TEMPLE, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.HOOPA, PokemonType.PSYCHIC, PokemonType.GHOST, [ + [ BiomeId.TEMPLE, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.TEMPLE, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.VOLCANION, PokemonType.FIRE, PokemonType.WATER, [ - [ Biome.VOLCANO, BiomePoolTier.ULTRA_RARE ], - [ Biome.VOLCANO, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.VOLCANION, PokemonType.FIRE, PokemonType.WATER, [ + [ BiomeId.VOLCANO, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.VOLCANO, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.ROWLET, PokemonType.GRASS, PokemonType.FLYING, [ - [ Biome.FOREST, BiomePoolTier.RARE ] + [ SpeciesId.ROWLET, PokemonType.GRASS, PokemonType.FLYING, [ + [ BiomeId.FOREST, BiomePoolTier.RARE ] ] ], - [ Species.DARTRIX, PokemonType.GRASS, PokemonType.FLYING, [ - [ Biome.FOREST, BiomePoolTier.RARE ] + [ SpeciesId.DARTRIX, PokemonType.GRASS, PokemonType.FLYING, [ + [ BiomeId.FOREST, BiomePoolTier.RARE ] ] ], - [ Species.DECIDUEYE, PokemonType.GRASS, PokemonType.GHOST, [ - [ Biome.FOREST, BiomePoolTier.RARE ], - [ Biome.FOREST, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.DECIDUEYE, PokemonType.GRASS, PokemonType.GHOST, [ + [ BiomeId.FOREST, BiomePoolTier.RARE ], + [ BiomeId.FOREST, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.LITTEN, PokemonType.FIRE, -1, [ - [ Biome.VOLCANO, BiomePoolTier.RARE ] + [ SpeciesId.LITTEN, PokemonType.FIRE, -1, [ + [ BiomeId.VOLCANO, BiomePoolTier.RARE ] ] ], - [ Species.TORRACAT, PokemonType.FIRE, -1, [ - [ Biome.VOLCANO, BiomePoolTier.RARE ] + [ SpeciesId.TORRACAT, PokemonType.FIRE, -1, [ + [ BiomeId.VOLCANO, BiomePoolTier.RARE ] ] ], - [ Species.INCINEROAR, PokemonType.FIRE, PokemonType.DARK, [ - [ Biome.VOLCANO, BiomePoolTier.RARE ], - [ Biome.VOLCANO, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.INCINEROAR, PokemonType.FIRE, PokemonType.DARK, [ + [ BiomeId.VOLCANO, BiomePoolTier.RARE ], + [ BiomeId.VOLCANO, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.POPPLIO, PokemonType.WATER, -1, [ - [ Biome.SEA, BiomePoolTier.RARE ] + [ SpeciesId.POPPLIO, PokemonType.WATER, -1, [ + [ BiomeId.SEA, BiomePoolTier.RARE ] ] ], - [ Species.BRIONNE, PokemonType.WATER, -1, [ - [ Biome.SEA, BiomePoolTier.RARE ] + [ SpeciesId.BRIONNE, PokemonType.WATER, -1, [ + [ BiomeId.SEA, BiomePoolTier.RARE ] ] ], - [ Species.PRIMARINA, PokemonType.WATER, PokemonType.FAIRY, [ - [ Biome.SEA, BiomePoolTier.RARE ], - [ Biome.SEA, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.PRIMARINA, PokemonType.WATER, PokemonType.FAIRY, [ + [ BiomeId.SEA, BiomePoolTier.RARE ], + [ BiomeId.SEA, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.PIKIPEK, PokemonType.NORMAL, PokemonType.FLYING, [ - [ Biome.JUNGLE, BiomePoolTier.COMMON ] + [ SpeciesId.PIKIPEK, PokemonType.NORMAL, PokemonType.FLYING, [ + [ BiomeId.JUNGLE, BiomePoolTier.COMMON ] ] ], - [ Species.TRUMBEAK, PokemonType.NORMAL, PokemonType.FLYING, [ - [ Biome.JUNGLE, BiomePoolTier.COMMON ] + [ SpeciesId.TRUMBEAK, PokemonType.NORMAL, PokemonType.FLYING, [ + [ BiomeId.JUNGLE, BiomePoolTier.COMMON ] ] ], - [ Species.TOUCANNON, PokemonType.NORMAL, PokemonType.FLYING, [ - [ Biome.JUNGLE, BiomePoolTier.COMMON ], - [ Biome.JUNGLE, BiomePoolTier.BOSS ] + [ SpeciesId.TOUCANNON, PokemonType.NORMAL, PokemonType.FLYING, [ + [ BiomeId.JUNGLE, BiomePoolTier.COMMON ], + [ BiomeId.JUNGLE, BiomePoolTier.BOSS ] ] ], - [ Species.YUNGOOS, PokemonType.NORMAL, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.YUNGOOS, PokemonType.NORMAL, -1, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.GUMSHOOS, PokemonType.NORMAL, -1, [ - [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.PLAINS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.GUMSHOOS, PokemonType.NORMAL, -1, [ + [ BiomeId.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.PLAINS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.GRUBBIN, PokemonType.BUG, -1, [ - [ Biome.POWER_PLANT, BiomePoolTier.COMMON ] + [ SpeciesId.GRUBBIN, PokemonType.BUG, -1, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.COMMON ] ] ], - [ Species.CHARJABUG, PokemonType.BUG, PokemonType.ELECTRIC, [ - [ Biome.POWER_PLANT, BiomePoolTier.COMMON ] + [ SpeciesId.CHARJABUG, PokemonType.BUG, PokemonType.ELECTRIC, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.COMMON ] ] ], - [ Species.VIKAVOLT, PokemonType.BUG, PokemonType.ELECTRIC, [ - [ Biome.POWER_PLANT, BiomePoolTier.BOSS ] + [ SpeciesId.VIKAVOLT, PokemonType.BUG, PokemonType.ELECTRIC, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.BOSS ] ] ], - [ Species.CRABRAWLER, PokemonType.FIGHTING, -1, [ - [ Biome.ICE_CAVE, BiomePoolTier.COMMON ] + [ SpeciesId.CRABRAWLER, PokemonType.FIGHTING, -1, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.COMMON ] ] ], - [ Species.CRABOMINABLE, PokemonType.FIGHTING, PokemonType.ICE, [ - [ Biome.ICE_CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.CRABOMINABLE, PokemonType.FIGHTING, PokemonType.ICE, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.ORICORIO, PokemonType.FIRE, PokemonType.FLYING, [ - [ Biome.MEADOW, BiomePoolTier.UNCOMMON ], - [ Biome.ISLAND, BiomePoolTier.COMMON ], - [ Biome.ISLAND, BiomePoolTier.BOSS ] + [ SpeciesId.ORICORIO, PokemonType.FIRE, PokemonType.FLYING, [ + [ BiomeId.MEADOW, BiomePoolTier.UNCOMMON ], + [ BiomeId.ISLAND, BiomePoolTier.COMMON ], + [ BiomeId.ISLAND, BiomePoolTier.BOSS ] ] ], - [ Species.CUTIEFLY, PokemonType.BUG, PokemonType.FAIRY, [ - [ Biome.MEADOW, BiomePoolTier.COMMON ], - [ Biome.FAIRY_CAVE, BiomePoolTier.COMMON ] + [ SpeciesId.CUTIEFLY, PokemonType.BUG, PokemonType.FAIRY, [ + [ BiomeId.MEADOW, BiomePoolTier.COMMON ], + [ BiomeId.FAIRY_CAVE, BiomePoolTier.COMMON ] ] ], - [ Species.RIBOMBEE, PokemonType.BUG, PokemonType.FAIRY, [ - [ Biome.MEADOW, BiomePoolTier.COMMON ], - [ Biome.MEADOW, BiomePoolTier.BOSS ], - [ Biome.FAIRY_CAVE, BiomePoolTier.COMMON ], - [ Biome.FAIRY_CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.RIBOMBEE, PokemonType.BUG, PokemonType.FAIRY, [ + [ BiomeId.MEADOW, BiomePoolTier.COMMON ], + [ BiomeId.MEADOW, BiomePoolTier.BOSS ], + [ BiomeId.FAIRY_CAVE, BiomePoolTier.COMMON ], + [ BiomeId.FAIRY_CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.ROCKRUFF, PokemonType.ROCK, -1, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, TimeOfDay.DAY ], - [ Biome.FOREST, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ], - [ Biome.CAVE, BiomePoolTier.UNCOMMON, TimeOfDay.DUSK ] + [ SpeciesId.ROCKRUFF, PokemonType.ROCK, -1, [ + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON, TimeOfDay.DAY ], + [ BiomeId.FOREST, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ], + [ BiomeId.CAVE, BiomePoolTier.UNCOMMON, TimeOfDay.DUSK ] ] ], - [ Species.LYCANROC, PokemonType.ROCK, -1, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, TimeOfDay.DAY ], - [ Biome.PLAINS, BiomePoolTier.BOSS_RARE, TimeOfDay.DAY ], - [ Biome.FOREST, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ], - [ Biome.FOREST, BiomePoolTier.BOSS_RARE, TimeOfDay.NIGHT ], - [ Biome.CAVE, BiomePoolTier.UNCOMMON, TimeOfDay.DUSK ], - [ Biome.CAVE, BiomePoolTier.BOSS_RARE, TimeOfDay.DUSK ] + [ SpeciesId.LYCANROC, PokemonType.ROCK, -1, [ + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON, TimeOfDay.DAY ], + [ BiomeId.PLAINS, BiomePoolTier.BOSS_RARE, TimeOfDay.DAY ], + [ BiomeId.FOREST, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ], + [ BiomeId.FOREST, BiomePoolTier.BOSS_RARE, TimeOfDay.NIGHT ], + [ BiomeId.CAVE, BiomePoolTier.UNCOMMON, TimeOfDay.DUSK ], + [ BiomeId.CAVE, BiomePoolTier.BOSS_RARE, TimeOfDay.DUSK ] ] ], - [ Species.WISHIWASHI, PokemonType.WATER, -1, [ - [ Biome.LAKE, BiomePoolTier.UNCOMMON ], - [ Biome.LAKE, BiomePoolTier.BOSS ] + [ SpeciesId.WISHIWASHI, PokemonType.WATER, -1, [ + [ BiomeId.LAKE, BiomePoolTier.UNCOMMON ], + [ BiomeId.LAKE, BiomePoolTier.BOSS ] ] ], - [ Species.MAREANIE, PokemonType.POISON, PokemonType.WATER, [ - [ Biome.BEACH, BiomePoolTier.COMMON ], - [ Biome.SWAMP, BiomePoolTier.UNCOMMON ] + [ SpeciesId.MAREANIE, PokemonType.POISON, PokemonType.WATER, [ + [ BiomeId.BEACH, BiomePoolTier.COMMON ], + [ BiomeId.SWAMP, BiomePoolTier.UNCOMMON ] ] ], - [ Species.TOXAPEX, PokemonType.POISON, PokemonType.WATER, [ - [ Biome.BEACH, BiomePoolTier.COMMON ], - [ Biome.BEACH, BiomePoolTier.BOSS ], - [ Biome.SWAMP, BiomePoolTier.UNCOMMON ], - [ Biome.SWAMP, BiomePoolTier.BOSS ] + [ SpeciesId.TOXAPEX, PokemonType.POISON, PokemonType.WATER, [ + [ BiomeId.BEACH, BiomePoolTier.COMMON ], + [ BiomeId.BEACH, BiomePoolTier.BOSS ], + [ BiomeId.SWAMP, BiomePoolTier.UNCOMMON ], + [ BiomeId.SWAMP, BiomePoolTier.BOSS ] ] ], - [ Species.MUDBRAY, PokemonType.GROUND, -1, [ - [ Biome.BADLANDS, BiomePoolTier.COMMON ] + [ SpeciesId.MUDBRAY, PokemonType.GROUND, -1, [ + [ BiomeId.BADLANDS, BiomePoolTier.COMMON ] ] ], - [ Species.MUDSDALE, PokemonType.GROUND, -1, [ - [ Biome.BADLANDS, BiomePoolTier.COMMON ], - [ Biome.BADLANDS, BiomePoolTier.BOSS ] + [ SpeciesId.MUDSDALE, PokemonType.GROUND, -1, [ + [ BiomeId.BADLANDS, BiomePoolTier.COMMON ], + [ BiomeId.BADLANDS, BiomePoolTier.BOSS ] ] ], - [ Species.DEWPIDER, PokemonType.WATER, PokemonType.BUG, [ - [ Biome.LAKE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.DEWPIDER, PokemonType.WATER, PokemonType.BUG, [ + [ BiomeId.LAKE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.ARAQUANID, PokemonType.WATER, PokemonType.BUG, [ - [ Biome.LAKE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.LAKE, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.ARAQUANID, PokemonType.WATER, PokemonType.BUG, [ + [ BiomeId.LAKE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.LAKE, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.FOMANTIS, PokemonType.GRASS, -1, [ - [ Biome.TALL_GRASS, BiomePoolTier.COMMON ], - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.FOMANTIS, PokemonType.GRASS, -1, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.COMMON ], + [ BiomeId.JUNGLE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.LURANTIS, PokemonType.GRASS, -1, [ - [ Biome.TALL_GRASS, BiomePoolTier.COMMON ], - [ Biome.TALL_GRASS, BiomePoolTier.BOSS ], - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON ], - [ Biome.JUNGLE, BiomePoolTier.BOSS ] + [ SpeciesId.LURANTIS, PokemonType.GRASS, -1, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.COMMON ], + [ BiomeId.TALL_GRASS, BiomePoolTier.BOSS ], + [ BiomeId.JUNGLE, BiomePoolTier.UNCOMMON ], + [ BiomeId.JUNGLE, BiomePoolTier.BOSS ] ] ], - [ Species.MORELULL, PokemonType.GRASS, PokemonType.FAIRY, [ - [ Biome.FAIRY_CAVE, BiomePoolTier.COMMON ] + [ SpeciesId.MORELULL, PokemonType.GRASS, PokemonType.FAIRY, [ + [ BiomeId.FAIRY_CAVE, BiomePoolTier.COMMON ] ] ], - [ Species.SHIINOTIC, PokemonType.GRASS, PokemonType.FAIRY, [ - [ Biome.FAIRY_CAVE, BiomePoolTier.COMMON ], - [ Biome.FAIRY_CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.SHIINOTIC, PokemonType.GRASS, PokemonType.FAIRY, [ + [ BiomeId.FAIRY_CAVE, BiomePoolTier.COMMON ], + [ BiomeId.FAIRY_CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.SALANDIT, PokemonType.POISON, PokemonType.FIRE, [ - [ Biome.VOLCANO, BiomePoolTier.COMMON ] + [ SpeciesId.SALANDIT, PokemonType.POISON, PokemonType.FIRE, [ + [ BiomeId.VOLCANO, BiomePoolTier.COMMON ] ] ], - [ Species.SALAZZLE, PokemonType.POISON, PokemonType.FIRE, [ - [ Biome.VOLCANO, BiomePoolTier.COMMON ], - [ Biome.VOLCANO, BiomePoolTier.BOSS ] + [ SpeciesId.SALAZZLE, PokemonType.POISON, PokemonType.FIRE, [ + [ BiomeId.VOLCANO, BiomePoolTier.COMMON ], + [ BiomeId.VOLCANO, BiomePoolTier.BOSS ] ] ], - [ Species.STUFFUL, PokemonType.NORMAL, PokemonType.FIGHTING, [ - [ Biome.DOJO, BiomePoolTier.COMMON ] + [ SpeciesId.STUFFUL, PokemonType.NORMAL, PokemonType.FIGHTING, [ + [ BiomeId.DOJO, BiomePoolTier.COMMON ] ] ], - [ Species.BEWEAR, PokemonType.NORMAL, PokemonType.FIGHTING, [ - [ Biome.DOJO, BiomePoolTier.COMMON ], - [ Biome.DOJO, BiomePoolTier.BOSS ] + [ SpeciesId.BEWEAR, PokemonType.NORMAL, PokemonType.FIGHTING, [ + [ BiomeId.DOJO, BiomePoolTier.COMMON ], + [ BiomeId.DOJO, BiomePoolTier.BOSS ] ] ], - [ Species.BOUNSWEET, PokemonType.GRASS, -1, [ - [ Biome.TALL_GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.BOUNSWEET, PokemonType.GRASS, -1, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.STEENEE, PokemonType.GRASS, -1, [ - [ Biome.TALL_GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.STEENEE, PokemonType.GRASS, -1, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.TSAREENA, PokemonType.GRASS, -1, [ - [ Biome.TALL_GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.TALL_GRASS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.TSAREENA, PokemonType.GRASS, -1, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.TALL_GRASS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.COMFEY, PokemonType.FAIRY, -1, [ - [ Biome.FAIRY_CAVE, BiomePoolTier.UNCOMMON ], - [ Biome.FAIRY_CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.COMFEY, PokemonType.FAIRY, -1, [ + [ BiomeId.FAIRY_CAVE, BiomePoolTier.UNCOMMON ], + [ BiomeId.FAIRY_CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.ORANGURU, PokemonType.NORMAL, PokemonType.PSYCHIC, [ - [ Biome.JUNGLE, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.ORANGURU, PokemonType.NORMAL, PokemonType.PSYCHIC, [ + [ BiomeId.JUNGLE, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.PASSIMIAN, PokemonType.FIGHTING, -1, [ - [ Biome.JUNGLE, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.PASSIMIAN, PokemonType.FIGHTING, -1, [ + [ BiomeId.JUNGLE, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.WIMPOD, PokemonType.BUG, PokemonType.WATER, [ - [ Biome.CAVE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.WIMPOD, PokemonType.BUG, PokemonType.WATER, [ + [ BiomeId.CAVE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.GOLISOPOD, PokemonType.BUG, PokemonType.WATER, [ - [ Biome.CAVE, BiomePoolTier.UNCOMMON ], - [ Biome.CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.GOLISOPOD, PokemonType.BUG, PokemonType.WATER, [ + [ BiomeId.CAVE, BiomePoolTier.UNCOMMON ], + [ BiomeId.CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.SANDYGAST, PokemonType.GHOST, PokemonType.GROUND, [ - [ Biome.BEACH, BiomePoolTier.UNCOMMON ] + [ SpeciesId.SANDYGAST, PokemonType.GHOST, PokemonType.GROUND, [ + [ BiomeId.BEACH, BiomePoolTier.UNCOMMON ] ] ], - [ Species.PALOSSAND, PokemonType.GHOST, PokemonType.GROUND, [ - [ Biome.BEACH, BiomePoolTier.UNCOMMON ], - [ Biome.BEACH, BiomePoolTier.BOSS ] + [ SpeciesId.PALOSSAND, PokemonType.GHOST, PokemonType.GROUND, [ + [ BiomeId.BEACH, BiomePoolTier.UNCOMMON ], + [ BiomeId.BEACH, BiomePoolTier.BOSS ] ] ], - [ Species.PYUKUMUKU, PokemonType.WATER, -1, [ - [ Biome.SEABED, BiomePoolTier.SUPER_RARE ], - [ Biome.SEABED, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.PYUKUMUKU, PokemonType.WATER, -1, [ + [ BiomeId.SEABED, BiomePoolTier.SUPER_RARE ], + [ BiomeId.SEABED, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.TYPE_NULL, PokemonType.NORMAL, -1, [ - [ Biome.LABORATORY, BiomePoolTier.ULTRA_RARE ] + [ SpeciesId.TYPE_NULL, PokemonType.NORMAL, -1, [ + [ BiomeId.LABORATORY, BiomePoolTier.ULTRA_RARE ] ] ], - [ Species.SILVALLY, PokemonType.NORMAL, -1, [ - [ Biome.LABORATORY, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.SILVALLY, PokemonType.NORMAL, -1, [ + [ BiomeId.LABORATORY, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.MINIOR, PokemonType.ROCK, PokemonType.FLYING, [ - [ Biome.SPACE, BiomePoolTier.COMMON ], - [ Biome.SPACE, BiomePoolTier.BOSS ] + [ SpeciesId.MINIOR, PokemonType.ROCK, PokemonType.FLYING, [ + [ BiomeId.SPACE, BiomePoolTier.COMMON ], + [ BiomeId.SPACE, BiomePoolTier.BOSS ] ] ], - [ Species.KOMALA, PokemonType.NORMAL, -1, [ - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.KOMALA, PokemonType.NORMAL, -1, [ + [ BiomeId.JUNGLE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.TURTONATOR, PokemonType.FIRE, PokemonType.DRAGON, [ - [ Biome.VOLCANO, BiomePoolTier.UNCOMMON ], - [ Biome.VOLCANO, BiomePoolTier.BOSS ] + [ SpeciesId.TURTONATOR, PokemonType.FIRE, PokemonType.DRAGON, [ + [ BiomeId.VOLCANO, BiomePoolTier.UNCOMMON ], + [ BiomeId.VOLCANO, BiomePoolTier.BOSS ] ] ], - [ Species.TOGEDEMARU, PokemonType.ELECTRIC, PokemonType.STEEL, [ - [ Biome.POWER_PLANT, BiomePoolTier.UNCOMMON ], - [ Biome.POWER_PLANT, BiomePoolTier.BOSS ] + [ SpeciesId.TOGEDEMARU, PokemonType.ELECTRIC, PokemonType.STEEL, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.UNCOMMON ], + [ BiomeId.POWER_PLANT, BiomePoolTier.BOSS ] ] ], - [ Species.MIMIKYU, PokemonType.GHOST, PokemonType.FAIRY, [ - [ Biome.GRAVEYARD, BiomePoolTier.RARE ], - [ Biome.GRAVEYARD, BiomePoolTier.BOSS ] + [ SpeciesId.MIMIKYU, PokemonType.GHOST, PokemonType.FAIRY, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.RARE ], + [ BiomeId.GRAVEYARD, BiomePoolTier.BOSS ] ] ], - [ Species.BRUXISH, PokemonType.WATER, PokemonType.PSYCHIC, [ - [ Biome.ISLAND, BiomePoolTier.UNCOMMON ], - [ Biome.ISLAND, BiomePoolTier.BOSS ] + [ SpeciesId.BRUXISH, PokemonType.WATER, PokemonType.PSYCHIC, [ + [ BiomeId.ISLAND, BiomePoolTier.UNCOMMON ], + [ BiomeId.ISLAND, BiomePoolTier.BOSS ] ] ], - [ Species.DRAMPA, PokemonType.NORMAL, PokemonType.DRAGON, [ - [ Biome.WASTELAND, BiomePoolTier.UNCOMMON ], - [ Biome.WASTELAND, BiomePoolTier.BOSS ] + [ SpeciesId.DRAMPA, PokemonType.NORMAL, PokemonType.DRAGON, [ + [ BiomeId.WASTELAND, BiomePoolTier.UNCOMMON ], + [ BiomeId.WASTELAND, BiomePoolTier.BOSS ] ] ], - [ Species.DHELMISE, PokemonType.GHOST, PokemonType.GRASS, [ - [ Biome.SEABED, BiomePoolTier.RARE ], - [ Biome.SEABED, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.DHELMISE, PokemonType.GHOST, PokemonType.GRASS, [ + [ BiomeId.SEABED, BiomePoolTier.RARE ], + [ BiomeId.SEABED, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.JANGMO_O, PokemonType.DRAGON, -1, [ - [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.JANGMO_O, PokemonType.DRAGON, -1, [ + [ BiomeId.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.HAKAMO_O, PokemonType.DRAGON, PokemonType.FIGHTING, [ - [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.HAKAMO_O, PokemonType.DRAGON, PokemonType.FIGHTING, [ + [ BiomeId.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.KOMMO_O, PokemonType.DRAGON, PokemonType.FIGHTING, [ - [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.WASTELAND, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.KOMMO_O, PokemonType.DRAGON, PokemonType.FIGHTING, [ + [ BiomeId.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.WASTELAND, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.TAPU_KOKO, PokemonType.ELECTRIC, PokemonType.FAIRY, [ - [ Biome.TEMPLE, BiomePoolTier.ULTRA_RARE ], - [ Biome.TEMPLE, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.TAPU_KOKO, PokemonType.ELECTRIC, PokemonType.FAIRY, [ + [ BiomeId.TEMPLE, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.TEMPLE, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.TAPU_LELE, PokemonType.PSYCHIC, PokemonType.FAIRY, [ - [ Biome.JUNGLE, BiomePoolTier.ULTRA_RARE ], - [ Biome.JUNGLE, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.TAPU_LELE, PokemonType.PSYCHIC, PokemonType.FAIRY, [ + [ BiomeId.JUNGLE, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.JUNGLE, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.TAPU_BULU, PokemonType.GRASS, PokemonType.FAIRY, [ - [ Biome.DESERT, BiomePoolTier.ULTRA_RARE ], - [ Biome.DESERT, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.TAPU_BULU, PokemonType.GRASS, PokemonType.FAIRY, [ + [ BiomeId.DESERT, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.DESERT, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.TAPU_FINI, PokemonType.WATER, PokemonType.FAIRY, [ - [ Biome.BEACH, BiomePoolTier.ULTRA_RARE ], - [ Biome.BEACH, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.TAPU_FINI, PokemonType.WATER, PokemonType.FAIRY, [ + [ BiomeId.BEACH, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.BEACH, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.COSMOG, PokemonType.PSYCHIC, -1, [ - [ Biome.SPACE, BiomePoolTier.ULTRA_RARE ] + [ SpeciesId.COSMOG, PokemonType.PSYCHIC, -1, [ + [ BiomeId.SPACE, BiomePoolTier.ULTRA_RARE ] ] ], - [ Species.COSMOEM, PokemonType.PSYCHIC, -1, [ - [ Biome.SPACE, BiomePoolTier.ULTRA_RARE ] + [ SpeciesId.COSMOEM, PokemonType.PSYCHIC, -1, [ + [ BiomeId.SPACE, BiomePoolTier.ULTRA_RARE ] ] ], - [ Species.SOLGALEO, PokemonType.PSYCHIC, PokemonType.STEEL, [ - [ Biome.SPACE, BiomePoolTier.BOSS_ULTRA_RARE, TimeOfDay.DAY ] + [ SpeciesId.SOLGALEO, PokemonType.PSYCHIC, PokemonType.STEEL, [ + [ BiomeId.SPACE, BiomePoolTier.BOSS_ULTRA_RARE, TimeOfDay.DAY ] ] ], - [ Species.LUNALA, PokemonType.PSYCHIC, PokemonType.GHOST, [ - [ Biome.SPACE, BiomePoolTier.BOSS_ULTRA_RARE, TimeOfDay.NIGHT ] + [ SpeciesId.LUNALA, PokemonType.PSYCHIC, PokemonType.GHOST, [ + [ BiomeId.SPACE, BiomePoolTier.BOSS_ULTRA_RARE, TimeOfDay.NIGHT ] ] ], - [ Species.NIHILEGO, PokemonType.ROCK, PokemonType.POISON, [ - [ Biome.SEABED, BiomePoolTier.ULTRA_RARE ], - [ Biome.SEABED, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.NIHILEGO, PokemonType.ROCK, PokemonType.POISON, [ + [ BiomeId.SEABED, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.SEABED, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.BUZZWOLE, PokemonType.BUG, PokemonType.FIGHTING, [ - [ Biome.JUNGLE, BiomePoolTier.ULTRA_RARE ], - [ Biome.JUNGLE, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.BUZZWOLE, PokemonType.BUG, PokemonType.FIGHTING, [ + [ BiomeId.JUNGLE, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.JUNGLE, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.PHEROMOSA, PokemonType.BUG, PokemonType.FIGHTING, [ - [ Biome.DESERT, BiomePoolTier.ULTRA_RARE ], - [ Biome.DESERT, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.PHEROMOSA, PokemonType.BUG, PokemonType.FIGHTING, [ + [ BiomeId.DESERT, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.DESERT, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.XURKITREE, PokemonType.ELECTRIC, -1, [ - [ Biome.POWER_PLANT, BiomePoolTier.ULTRA_RARE ], - [ Biome.POWER_PLANT, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.XURKITREE, PokemonType.ELECTRIC, -1, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.POWER_PLANT, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.CELESTEELA, PokemonType.STEEL, PokemonType.FLYING, [ - [ Biome.SPACE, BiomePoolTier.ULTRA_RARE ], - [ Biome.SPACE, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.CELESTEELA, PokemonType.STEEL, PokemonType.FLYING, [ + [ BiomeId.SPACE, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.SPACE, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.KARTANA, PokemonType.GRASS, PokemonType.STEEL, [ - [ Biome.FOREST, BiomePoolTier.ULTRA_RARE ], - [ Biome.FOREST, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.KARTANA, PokemonType.GRASS, PokemonType.STEEL, [ + [ BiomeId.FOREST, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.FOREST, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.GUZZLORD, PokemonType.DARK, PokemonType.DRAGON, [ - [ Biome.SLUM, BiomePoolTier.ULTRA_RARE ], - [ Biome.SLUM, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.GUZZLORD, PokemonType.DARK, PokemonType.DRAGON, [ + [ BiomeId.SLUM, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.SLUM, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.NECROZMA, PokemonType.PSYCHIC, -1, [ - [ Biome.SPACE, BiomePoolTier.BOSS_ULTRA_RARE ] + [ SpeciesId.NECROZMA, PokemonType.PSYCHIC, -1, [ + [ BiomeId.SPACE, BiomePoolTier.BOSS_ULTRA_RARE ] ] ], - [ Species.MAGEARNA, PokemonType.STEEL, PokemonType.FAIRY, [ - [ Biome.FACTORY, BiomePoolTier.ULTRA_RARE ], - [ Biome.FACTORY, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.MAGEARNA, PokemonType.STEEL, PokemonType.FAIRY, [ + [ BiomeId.FACTORY, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.FACTORY, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.MARSHADOW, PokemonType.FIGHTING, PokemonType.GHOST, [ - [ Biome.GRAVEYARD, BiomePoolTier.ULTRA_RARE ], - [ Biome.GRAVEYARD, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.MARSHADOW, PokemonType.FIGHTING, PokemonType.GHOST, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.GRAVEYARD, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.POIPOLE, PokemonType.POISON, -1, [ - [ Biome.SWAMP, BiomePoolTier.ULTRA_RARE ] + [ SpeciesId.POIPOLE, PokemonType.POISON, -1, [ + [ BiomeId.SWAMP, BiomePoolTier.ULTRA_RARE ] ] ], - [ Species.NAGANADEL, PokemonType.POISON, PokemonType.DRAGON, [ - [ Biome.SWAMP, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.NAGANADEL, PokemonType.POISON, PokemonType.DRAGON, [ + [ BiomeId.SWAMP, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.STAKATAKA, PokemonType.ROCK, PokemonType.STEEL, [ - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.ULTRA_RARE ], - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.STAKATAKA, PokemonType.ROCK, PokemonType.STEEL, [ + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.BLACEPHALON, PokemonType.FIRE, PokemonType.GHOST, [ - [ Biome.ISLAND, BiomePoolTier.ULTRA_RARE ], - [ Biome.ISLAND, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.BLACEPHALON, PokemonType.FIRE, PokemonType.GHOST, [ + [ BiomeId.ISLAND, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.ISLAND, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.ZERAORA, PokemonType.ELECTRIC, -1, [ - [ Biome.POWER_PLANT, BiomePoolTier.ULTRA_RARE ], - [ Biome.POWER_PLANT, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.ZERAORA, PokemonType.ELECTRIC, -1, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.POWER_PLANT, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.MELTAN, PokemonType.STEEL, -1, [ ] + [ SpeciesId.MELTAN, PokemonType.STEEL, -1, [ ] ], - [ Species.MELMETAL, PokemonType.STEEL, -1, [ ] + [ SpeciesId.MELMETAL, PokemonType.STEEL, -1, [ ] ], - [ Species.GROOKEY, PokemonType.GRASS, -1, [ - [ Biome.JUNGLE, BiomePoolTier.RARE ] + [ SpeciesId.GROOKEY, PokemonType.GRASS, -1, [ + [ BiomeId.JUNGLE, BiomePoolTier.RARE ] ] ], - [ Species.THWACKEY, PokemonType.GRASS, -1, [ - [ Biome.JUNGLE, BiomePoolTier.RARE ] + [ SpeciesId.THWACKEY, PokemonType.GRASS, -1, [ + [ BiomeId.JUNGLE, BiomePoolTier.RARE ] ] ], - [ Species.RILLABOOM, PokemonType.GRASS, -1, [ - [ Biome.JUNGLE, BiomePoolTier.RARE ], - [ Biome.JUNGLE, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.RILLABOOM, PokemonType.GRASS, -1, [ + [ BiomeId.JUNGLE, BiomePoolTier.RARE ], + [ BiomeId.JUNGLE, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.SCORBUNNY, PokemonType.FIRE, -1, [ - [ Biome.VOLCANO, BiomePoolTier.RARE ] + [ SpeciesId.SCORBUNNY, PokemonType.FIRE, -1, [ + [ BiomeId.VOLCANO, BiomePoolTier.RARE ] ] ], - [ Species.RABOOT, PokemonType.FIRE, -1, [ - [ Biome.VOLCANO, BiomePoolTier.RARE ] + [ SpeciesId.RABOOT, PokemonType.FIRE, -1, [ + [ BiomeId.VOLCANO, BiomePoolTier.RARE ] ] ], - [ Species.CINDERACE, PokemonType.FIRE, -1, [ - [ Biome.VOLCANO, BiomePoolTier.RARE ], - [ Biome.VOLCANO, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.CINDERACE, PokemonType.FIRE, -1, [ + [ BiomeId.VOLCANO, BiomePoolTier.RARE ], + [ BiomeId.VOLCANO, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.SOBBLE, PokemonType.WATER, -1, [ - [ Biome.LAKE, BiomePoolTier.RARE ] + [ SpeciesId.SOBBLE, PokemonType.WATER, -1, [ + [ BiomeId.LAKE, BiomePoolTier.RARE ] ] ], - [ Species.DRIZZILE, PokemonType.WATER, -1, [ - [ Biome.LAKE, BiomePoolTier.RARE ] + [ SpeciesId.DRIZZILE, PokemonType.WATER, -1, [ + [ BiomeId.LAKE, BiomePoolTier.RARE ] ] ], - [ Species.INTELEON, PokemonType.WATER, -1, [ - [ Biome.LAKE, BiomePoolTier.RARE ], - [ Biome.LAKE, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.INTELEON, PokemonType.WATER, -1, [ + [ BiomeId.LAKE, BiomePoolTier.RARE ], + [ BiomeId.LAKE, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.SKWOVET, PokemonType.NORMAL, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.SKWOVET, PokemonType.NORMAL, -1, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.GREEDENT, PokemonType.NORMAL, -1, [ - [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.PLAINS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.GREEDENT, PokemonType.NORMAL, -1, [ + [ BiomeId.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.PLAINS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.ROOKIDEE, PokemonType.FLYING, -1, [ - [ Biome.TOWN, BiomePoolTier.RARE ], - [ Biome.PLAINS, BiomePoolTier.RARE ], - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.ROOKIDEE, PokemonType.FLYING, -1, [ + [ BiomeId.TOWN, BiomePoolTier.RARE ], + [ BiomeId.PLAINS, BiomePoolTier.RARE ], + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.CORVISQUIRE, PokemonType.FLYING, -1, [ - [ Biome.PLAINS, BiomePoolTier.RARE ], - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.CORVISQUIRE, PokemonType.FLYING, -1, [ + [ BiomeId.PLAINS, BiomePoolTier.RARE ], + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.CORVIKNIGHT, PokemonType.FLYING, PokemonType.STEEL, [ - [ Biome.PLAINS, BiomePoolTier.RARE ], - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.CORVIKNIGHT, PokemonType.FLYING, PokemonType.STEEL, [ + [ BiomeId.PLAINS, BiomePoolTier.RARE ], + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.BLIPBUG, PokemonType.BUG, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.BLIPBUG, PokemonType.BUG, -1, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.DOTTLER, PokemonType.BUG, PokemonType.PSYCHIC, [ - [ Biome.FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.DOTTLER, PokemonType.BUG, PokemonType.PSYCHIC, [ + [ BiomeId.FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.ORBEETLE, PokemonType.BUG, PokemonType.PSYCHIC, [ - [ Biome.FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.ORBEETLE, PokemonType.BUG, PokemonType.PSYCHIC, [ + [ BiomeId.FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.NICKIT, PokemonType.DARK, -1, [ - [ Biome.ABYSS, BiomePoolTier.COMMON ] + [ SpeciesId.NICKIT, PokemonType.DARK, -1, [ + [ BiomeId.ABYSS, BiomePoolTier.COMMON ] ] ], - [ Species.THIEVUL, PokemonType.DARK, -1, [ - [ Biome.ABYSS, BiomePoolTier.COMMON ], - [ Biome.ABYSS, BiomePoolTier.BOSS ] + [ SpeciesId.THIEVUL, PokemonType.DARK, -1, [ + [ BiomeId.ABYSS, BiomePoolTier.COMMON ], + [ BiomeId.ABYSS, BiomePoolTier.BOSS ] ] ], - [ Species.GOSSIFLEUR, PokemonType.GRASS, -1, [ - [ Biome.MEADOW, BiomePoolTier.COMMON ] + [ SpeciesId.GOSSIFLEUR, PokemonType.GRASS, -1, [ + [ BiomeId.MEADOW, BiomePoolTier.COMMON ] ] ], - [ Species.ELDEGOSS, PokemonType.GRASS, -1, [ - [ Biome.MEADOW, BiomePoolTier.COMMON ] + [ SpeciesId.ELDEGOSS, PokemonType.GRASS, -1, [ + [ BiomeId.MEADOW, BiomePoolTier.COMMON ] ] ], - [ Species.WOOLOO, PokemonType.NORMAL, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON ], - [ Biome.MEADOW, BiomePoolTier.COMMON ] + [ SpeciesId.WOOLOO, PokemonType.NORMAL, -1, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON ], + [ BiomeId.MEADOW, BiomePoolTier.COMMON ] ] ], - [ Species.DUBWOOL, PokemonType.NORMAL, -1, [ - [ Biome.MEADOW, BiomePoolTier.COMMON ], - [ Biome.MEADOW, BiomePoolTier.BOSS ] + [ SpeciesId.DUBWOOL, PokemonType.NORMAL, -1, [ + [ BiomeId.MEADOW, BiomePoolTier.COMMON ], + [ BiomeId.MEADOW, BiomePoolTier.BOSS ] ] ], - [ Species.CHEWTLE, PokemonType.WATER, -1, [ - [ Biome.LAKE, BiomePoolTier.COMMON ] + [ SpeciesId.CHEWTLE, PokemonType.WATER, -1, [ + [ BiomeId.LAKE, BiomePoolTier.COMMON ] ] ], - [ Species.DREDNAW, PokemonType.WATER, PokemonType.ROCK, [ - [ Biome.LAKE, BiomePoolTier.COMMON ], - [ Biome.LAKE, BiomePoolTier.BOSS ] + [ SpeciesId.DREDNAW, PokemonType.WATER, PokemonType.ROCK, [ + [ BiomeId.LAKE, BiomePoolTier.COMMON ], + [ BiomeId.LAKE, BiomePoolTier.BOSS ] ] ], - [ Species.YAMPER, PokemonType.ELECTRIC, -1, [ - [ Biome.METROPOLIS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.YAMPER, PokemonType.ELECTRIC, -1, [ + [ BiomeId.METROPOLIS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.BOLTUND, PokemonType.ELECTRIC, -1, [ - [ Biome.METROPOLIS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.METROPOLIS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.BOLTUND, PokemonType.ELECTRIC, -1, [ + [ BiomeId.METROPOLIS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.METROPOLIS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.ROLYCOLY, PokemonType.ROCK, -1, [ - [ Biome.VOLCANO, BiomePoolTier.COMMON ] + [ SpeciesId.ROLYCOLY, PokemonType.ROCK, -1, [ + [ BiomeId.VOLCANO, BiomePoolTier.COMMON ] ] ], - [ Species.CARKOL, PokemonType.ROCK, PokemonType.FIRE, [ - [ Biome.VOLCANO, BiomePoolTier.COMMON ] + [ SpeciesId.CARKOL, PokemonType.ROCK, PokemonType.FIRE, [ + [ BiomeId.VOLCANO, BiomePoolTier.COMMON ] ] ], - [ Species.COALOSSAL, PokemonType.ROCK, PokemonType.FIRE, [ - [ Biome.VOLCANO, BiomePoolTier.COMMON ], - [ Biome.VOLCANO, BiomePoolTier.BOSS ] + [ SpeciesId.COALOSSAL, PokemonType.ROCK, PokemonType.FIRE, [ + [ BiomeId.VOLCANO, BiomePoolTier.COMMON ], + [ BiomeId.VOLCANO, BiomePoolTier.BOSS ] ] ], - [ Species.APPLIN, PokemonType.GRASS, PokemonType.DRAGON, [ - [ Biome.MEADOW, BiomePoolTier.RARE ] + [ SpeciesId.APPLIN, PokemonType.GRASS, PokemonType.DRAGON, [ + [ BiomeId.MEADOW, BiomePoolTier.RARE ] ] ], - [ Species.FLAPPLE, PokemonType.GRASS, PokemonType.DRAGON, [ - [ Biome.MEADOW, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.FLAPPLE, PokemonType.GRASS, PokemonType.DRAGON, [ + [ BiomeId.MEADOW, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.APPLETUN, PokemonType.GRASS, PokemonType.DRAGON, [ - [ Biome.MEADOW, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.APPLETUN, PokemonType.GRASS, PokemonType.DRAGON, [ + [ BiomeId.MEADOW, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.SILICOBRA, PokemonType.GROUND, -1, [ - [ Biome.DESERT, BiomePoolTier.COMMON ] + [ SpeciesId.SILICOBRA, PokemonType.GROUND, -1, [ + [ BiomeId.DESERT, BiomePoolTier.COMMON ] ] ], - [ Species.SANDACONDA, PokemonType.GROUND, -1, [ - [ Biome.DESERT, BiomePoolTier.COMMON ], - [ Biome.DESERT, BiomePoolTier.BOSS ] + [ SpeciesId.SANDACONDA, PokemonType.GROUND, -1, [ + [ BiomeId.DESERT, BiomePoolTier.COMMON ], + [ BiomeId.DESERT, BiomePoolTier.BOSS ] ] ], - [ Species.CRAMORANT, PokemonType.FLYING, PokemonType.WATER, [ - [ Biome.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.SEA, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.CRAMORANT, PokemonType.FLYING, PokemonType.WATER, [ + [ BiomeId.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.SEA, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.ARROKUDA, PokemonType.WATER, -1, [ - [ Biome.SEABED, BiomePoolTier.COMMON ] + [ SpeciesId.ARROKUDA, PokemonType.WATER, -1, [ + [ BiomeId.SEABED, BiomePoolTier.COMMON ] ] ], - [ Species.BARRASKEWDA, PokemonType.WATER, -1, [ - [ Biome.SEABED, BiomePoolTier.COMMON ], - [ Biome.SEABED, BiomePoolTier.BOSS ] + [ SpeciesId.BARRASKEWDA, PokemonType.WATER, -1, [ + [ BiomeId.SEABED, BiomePoolTier.COMMON ], + [ BiomeId.SEABED, BiomePoolTier.BOSS ] ] ], - [ Species.TOXEL, PokemonType.ELECTRIC, PokemonType.POISON, [ ] + [ SpeciesId.TOXEL, PokemonType.ELECTRIC, PokemonType.POISON, [ ] ], - [ Species.TOXTRICITY, PokemonType.ELECTRIC, PokemonType.POISON, [ - [ Biome.SLUM, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.SLUM, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.TOXTRICITY, PokemonType.ELECTRIC, PokemonType.POISON, [ + [ BiomeId.SLUM, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.SLUM, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.SIZZLIPEDE, PokemonType.FIRE, PokemonType.BUG, [ - [ Biome.BADLANDS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.SIZZLIPEDE, PokemonType.FIRE, PokemonType.BUG, [ + [ BiomeId.BADLANDS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.CENTISKORCH, PokemonType.FIRE, PokemonType.BUG, [ - [ Biome.BADLANDS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.BADLANDS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.CENTISKORCH, PokemonType.FIRE, PokemonType.BUG, [ + [ BiomeId.BADLANDS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.BADLANDS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.CLOBBOPUS, PokemonType.FIGHTING, -1, [ - [ Biome.DOJO, BiomePoolTier.COMMON ] + [ SpeciesId.CLOBBOPUS, PokemonType.FIGHTING, -1, [ + [ BiomeId.DOJO, BiomePoolTier.COMMON ] ] ], - [ Species.GRAPPLOCT, PokemonType.FIGHTING, -1, [ - [ Biome.DOJO, BiomePoolTier.COMMON ], - [ Biome.DOJO, BiomePoolTier.BOSS ] + [ SpeciesId.GRAPPLOCT, PokemonType.FIGHTING, -1, [ + [ BiomeId.DOJO, BiomePoolTier.COMMON ], + [ BiomeId.DOJO, BiomePoolTier.BOSS ] ] ], - [ Species.SINISTEA, PokemonType.GHOST, -1, [ - [ Biome.GRAVEYARD, BiomePoolTier.UNCOMMON ] + [ SpeciesId.SINISTEA, PokemonType.GHOST, -1, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.UNCOMMON ] ] ], - [ Species.POLTEAGEIST, PokemonType.GHOST, -1, [ - [ Biome.GRAVEYARD, BiomePoolTier.UNCOMMON ], - [ Biome.GRAVEYARD, BiomePoolTier.BOSS ] + [ SpeciesId.POLTEAGEIST, PokemonType.GHOST, -1, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.UNCOMMON ], + [ BiomeId.GRAVEYARD, BiomePoolTier.BOSS ] ] ], - [ Species.HATENNA, PokemonType.PSYCHIC, -1, [ - [ Biome.FAIRY_CAVE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.HATENNA, PokemonType.PSYCHIC, -1, [ + [ BiomeId.FAIRY_CAVE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.HATTREM, PokemonType.PSYCHIC, -1, [ - [ Biome.FAIRY_CAVE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.HATTREM, PokemonType.PSYCHIC, -1, [ + [ BiomeId.FAIRY_CAVE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.HATTERENE, PokemonType.PSYCHIC, PokemonType.FAIRY, [ - [ Biome.FAIRY_CAVE, BiomePoolTier.UNCOMMON ], - [ Biome.FAIRY_CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.HATTERENE, PokemonType.PSYCHIC, PokemonType.FAIRY, [ + [ BiomeId.FAIRY_CAVE, BiomePoolTier.UNCOMMON ], + [ BiomeId.FAIRY_CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.IMPIDIMP, PokemonType.DARK, PokemonType.FAIRY, [ - [ Biome.ABYSS, BiomePoolTier.COMMON ] + [ SpeciesId.IMPIDIMP, PokemonType.DARK, PokemonType.FAIRY, [ + [ BiomeId.ABYSS, BiomePoolTier.COMMON ] ] ], - [ Species.MORGREM, PokemonType.DARK, PokemonType.FAIRY, [ - [ Biome.ABYSS, BiomePoolTier.COMMON ] + [ SpeciesId.MORGREM, PokemonType.DARK, PokemonType.FAIRY, [ + [ BiomeId.ABYSS, BiomePoolTier.COMMON ] ] ], - [ Species.GRIMMSNARL, PokemonType.DARK, PokemonType.FAIRY, [ - [ Biome.ABYSS, BiomePoolTier.COMMON ], - [ Biome.ABYSS, BiomePoolTier.BOSS ] + [ SpeciesId.GRIMMSNARL, PokemonType.DARK, PokemonType.FAIRY, [ + [ BiomeId.ABYSS, BiomePoolTier.COMMON ], + [ BiomeId.ABYSS, BiomePoolTier.BOSS ] ] ], - [ Species.OBSTAGOON, PokemonType.DARK, PokemonType.NORMAL, [ - [ Biome.SLUM, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.SLUM, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.OBSTAGOON, PokemonType.DARK, PokemonType.NORMAL, [ + [ BiomeId.SLUM, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.SLUM, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.PERRSERKER, PokemonType.STEEL, -1, [ - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.RARE, TimeOfDay.DUSK ], - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.BOSS_RARE, TimeOfDay.DUSK ] + [ SpeciesId.PERRSERKER, PokemonType.STEEL, -1, [ + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.RARE, TimeOfDay.DUSK ], + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.BOSS_RARE, TimeOfDay.DUSK ] ] ], - [ Species.CURSOLA, PokemonType.GHOST, -1, [ - [ Biome.SEABED, BiomePoolTier.SUPER_RARE ], - [ Biome.SEABED, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.CURSOLA, PokemonType.GHOST, -1, [ + [ BiomeId.SEABED, BiomePoolTier.SUPER_RARE ], + [ BiomeId.SEABED, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.SIRFETCHD, PokemonType.FIGHTING, -1, [ - [ Biome.DOJO, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.SIRFETCHD, PokemonType.FIGHTING, -1, [ + [ BiomeId.DOJO, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.MR_RIME, PokemonType.ICE, PokemonType.PSYCHIC, [ - [ Biome.SNOWY_FOREST, BiomePoolTier.SUPER_RARE ], - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.MR_RIME, PokemonType.ICE, PokemonType.PSYCHIC, [ + [ BiomeId.SNOWY_FOREST, BiomePoolTier.SUPER_RARE ], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.RUNERIGUS, PokemonType.GROUND, PokemonType.GHOST, [ - [ Biome.RUINS, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.RUINS, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.RUNERIGUS, PokemonType.GROUND, PokemonType.GHOST, [ + [ BiomeId.RUINS, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.RUINS, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.MILCERY, PokemonType.FAIRY, -1, [ - [ Biome.FAIRY_CAVE, BiomePoolTier.COMMON ] + [ SpeciesId.MILCERY, PokemonType.FAIRY, -1, [ + [ BiomeId.FAIRY_CAVE, BiomePoolTier.COMMON ] ] ], - [ Species.ALCREMIE, PokemonType.FAIRY, -1, [ - [ Biome.FAIRY_CAVE, BiomePoolTier.COMMON ], - [ Biome.FAIRY_CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.ALCREMIE, PokemonType.FAIRY, -1, [ + [ BiomeId.FAIRY_CAVE, BiomePoolTier.COMMON ], + [ BiomeId.FAIRY_CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.FALINKS, PokemonType.FIGHTING, -1, [ - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON ], - [ Biome.JUNGLE, BiomePoolTier.BOSS ] + [ SpeciesId.FALINKS, PokemonType.FIGHTING, -1, [ + [ BiomeId.JUNGLE, BiomePoolTier.UNCOMMON ], + [ BiomeId.JUNGLE, BiomePoolTier.BOSS ] ] ], - [ Species.PINCURCHIN, PokemonType.ELECTRIC, -1, [ - [ Biome.SEABED, BiomePoolTier.UNCOMMON ] + [ SpeciesId.PINCURCHIN, PokemonType.ELECTRIC, -1, [ + [ BiomeId.SEABED, BiomePoolTier.UNCOMMON ] ] ], - [ Species.SNOM, PokemonType.ICE, PokemonType.BUG, [ - [ Biome.ICE_CAVE, BiomePoolTier.COMMON ], - [ Biome.SNOWY_FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.SNOM, PokemonType.ICE, PokemonType.BUG, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.COMMON ], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.FROSMOTH, PokemonType.ICE, PokemonType.BUG, [ - [ Biome.ICE_CAVE, BiomePoolTier.COMMON ], - [ Biome.SNOWY_FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.FROSMOTH, PokemonType.ICE, PokemonType.BUG, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.COMMON ], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.STONJOURNER, PokemonType.ROCK, -1, [ - [ Biome.RUINS, BiomePoolTier.RARE ] + [ SpeciesId.STONJOURNER, PokemonType.ROCK, -1, [ + [ BiomeId.RUINS, BiomePoolTier.RARE ] ] ], - [ Species.EISCUE, PokemonType.ICE, -1, [ - [ Biome.ICE_CAVE, BiomePoolTier.UNCOMMON ], - [ Biome.SNOWY_FOREST, BiomePoolTier.COMMON ] + [ SpeciesId.EISCUE, PokemonType.ICE, -1, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.UNCOMMON ], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.COMMON ] ] ], - [ Species.INDEEDEE, PokemonType.PSYCHIC, PokemonType.NORMAL, [ - [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.INDEEDEE, PokemonType.PSYCHIC, PokemonType.NORMAL, [ + [ BiomeId.METROPOLIS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.MORPEKO, PokemonType.ELECTRIC, PokemonType.DARK, [ - [ Biome.METROPOLIS, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.MORPEKO, PokemonType.ELECTRIC, PokemonType.DARK, [ + [ BiomeId.METROPOLIS, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.CUFANT, PokemonType.STEEL, -1, [ - [ Biome.BADLANDS, BiomePoolTier.UNCOMMON ] + [ SpeciesId.CUFANT, PokemonType.STEEL, -1, [ + [ BiomeId.BADLANDS, BiomePoolTier.UNCOMMON ] ] ], - [ Species.COPPERAJAH, PokemonType.STEEL, -1, [ - [ Biome.BADLANDS, BiomePoolTier.UNCOMMON ], - [ Biome.BADLANDS, BiomePoolTier.BOSS ] + [ SpeciesId.COPPERAJAH, PokemonType.STEEL, -1, [ + [ BiomeId.BADLANDS, BiomePoolTier.UNCOMMON ], + [ BiomeId.BADLANDS, BiomePoolTier.BOSS ] ] ], - [ Species.DRACOZOLT, PokemonType.ELECTRIC, PokemonType.DRAGON, [ - [ Biome.WASTELAND, BiomePoolTier.SUPER_RARE ], - [ Biome.WASTELAND, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.DRACOZOLT, PokemonType.ELECTRIC, PokemonType.DRAGON, [ + [ BiomeId.WASTELAND, BiomePoolTier.SUPER_RARE ], + [ BiomeId.WASTELAND, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.ARCTOZOLT, PokemonType.ELECTRIC, PokemonType.ICE, [ - [ Biome.SNOWY_FOREST, BiomePoolTier.SUPER_RARE ], - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.ARCTOZOLT, PokemonType.ELECTRIC, PokemonType.ICE, [ + [ BiomeId.SNOWY_FOREST, BiomePoolTier.SUPER_RARE ], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.DRACOVISH, PokemonType.WATER, PokemonType.DRAGON, [ - [ Biome.WASTELAND, BiomePoolTier.SUPER_RARE ], - [ Biome.WASTELAND, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.DRACOVISH, PokemonType.WATER, PokemonType.DRAGON, [ + [ BiomeId.WASTELAND, BiomePoolTier.SUPER_RARE ], + [ BiomeId.WASTELAND, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.ARCTOVISH, PokemonType.WATER, PokemonType.ICE, [ - [ Biome.SEABED, BiomePoolTier.SUPER_RARE ], - [ Biome.SEABED, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.ARCTOVISH, PokemonType.WATER, PokemonType.ICE, [ + [ BiomeId.SEABED, BiomePoolTier.SUPER_RARE ], + [ BiomeId.SEABED, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.DURALUDON, PokemonType.STEEL, PokemonType.DRAGON, [ - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.RARE ] + [ SpeciesId.DURALUDON, PokemonType.STEEL, PokemonType.DRAGON, [ + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.RARE ] ] ], - [ Species.DREEPY, PokemonType.DRAGON, PokemonType.GHOST, [ - [ Biome.WASTELAND, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.DREEPY, PokemonType.DRAGON, PokemonType.GHOST, [ + [ BiomeId.WASTELAND, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.DRAKLOAK, PokemonType.DRAGON, PokemonType.GHOST, [ - [ Biome.WASTELAND, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.DRAKLOAK, PokemonType.DRAGON, PokemonType.GHOST, [ + [ BiomeId.WASTELAND, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.DRAGAPULT, PokemonType.DRAGON, PokemonType.GHOST, [ - [ Biome.WASTELAND, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.WASTELAND, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.DRAGAPULT, PokemonType.DRAGON, PokemonType.GHOST, [ + [ BiomeId.WASTELAND, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.WASTELAND, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.ZACIAN, PokemonType.FAIRY, -1, [ - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_ULTRA_RARE ] + [ SpeciesId.ZACIAN, PokemonType.FAIRY, -1, [ + [ BiomeId.SNOWY_FOREST, BiomePoolTier.BOSS_ULTRA_RARE ] ] ], - [ Species.ZAMAZENTA, PokemonType.FIGHTING, -1, [ - [ Biome.DOJO, BiomePoolTier.BOSS_ULTRA_RARE ] + [ SpeciesId.ZAMAZENTA, PokemonType.FIGHTING, -1, [ + [ BiomeId.DOJO, BiomePoolTier.BOSS_ULTRA_RARE ] ] ], - [ Species.ETERNATUS, PokemonType.POISON, PokemonType.DRAGON, [ - [ Biome.END, BiomePoolTier.BOSS ] + [ SpeciesId.ETERNATUS, PokemonType.POISON, PokemonType.DRAGON, [ + [ BiomeId.END, BiomePoolTier.BOSS ] ] ], - [ Species.KUBFU, PokemonType.FIGHTING, -1, [ - [ Biome.DOJO, BiomePoolTier.ULTRA_RARE ] + [ SpeciesId.KUBFU, PokemonType.FIGHTING, -1, [ + [ BiomeId.DOJO, BiomePoolTier.ULTRA_RARE ] ] ], - [ Species.URSHIFU, PokemonType.FIGHTING, PokemonType.DARK, [ - [ Biome.DOJO, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.URSHIFU, PokemonType.FIGHTING, PokemonType.DARK, [ + [ BiomeId.DOJO, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.ZARUDE, PokemonType.DARK, PokemonType.GRASS, [ - [ Biome.JUNGLE, BiomePoolTier.ULTRA_RARE ], - [ Biome.JUNGLE, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.ZARUDE, PokemonType.DARK, PokemonType.GRASS, [ + [ BiomeId.JUNGLE, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.JUNGLE, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.REGIELEKI, PokemonType.ELECTRIC, -1, [ - [ Biome.POWER_PLANT, BiomePoolTier.ULTRA_RARE ], - [ Biome.POWER_PLANT, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.REGIELEKI, PokemonType.ELECTRIC, -1, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.POWER_PLANT, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.REGIDRAGO, PokemonType.DRAGON, -1, [ - [ Biome.WASTELAND, BiomePoolTier.ULTRA_RARE ], - [ Biome.WASTELAND, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.REGIDRAGO, PokemonType.DRAGON, -1, [ + [ BiomeId.WASTELAND, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.WASTELAND, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.GLASTRIER, PokemonType.ICE, -1, [ - [ Biome.SNOWY_FOREST, BiomePoolTier.ULTRA_RARE ], - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.GLASTRIER, PokemonType.ICE, -1, [ + [ BiomeId.SNOWY_FOREST, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.SPECTRIER, PokemonType.GHOST, -1, [ - [ Biome.GRAVEYARD, BiomePoolTier.ULTRA_RARE ], - [ Biome.GRAVEYARD, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.SPECTRIER, PokemonType.GHOST, -1, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.GRAVEYARD, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.CALYREX, PokemonType.PSYCHIC, PokemonType.GRASS, [ - [ Biome.FOREST, BiomePoolTier.BOSS_ULTRA_RARE ] + [ SpeciesId.CALYREX, PokemonType.PSYCHIC, PokemonType.GRASS, [ + [ BiomeId.FOREST, BiomePoolTier.BOSS_ULTRA_RARE ] ] ], - [ Species.WYRDEER, PokemonType.NORMAL, PokemonType.PSYCHIC, [ - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.WYRDEER, PokemonType.NORMAL, PokemonType.PSYCHIC, [ + [ BiomeId.SNOWY_FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.KLEAVOR, PokemonType.BUG, PokemonType.ROCK, [ - [ Biome.JUNGLE, BiomePoolTier.SUPER_RARE ], - [ Biome.JUNGLE, BiomePoolTier.BOSS_ULTRA_RARE ] + [ SpeciesId.KLEAVOR, PokemonType.BUG, PokemonType.ROCK, [ + [ BiomeId.JUNGLE, BiomePoolTier.SUPER_RARE ], + [ BiomeId.JUNGLE, BiomePoolTier.BOSS_ULTRA_RARE ] ] ], - [ Species.URSALUNA, PokemonType.GROUND, PokemonType.NORMAL, [ - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS ] + [ SpeciesId.URSALUNA, PokemonType.GROUND, PokemonType.NORMAL, [ + [ BiomeId.SNOWY_FOREST, BiomePoolTier.BOSS ] ] ], - [ Species.BASCULEGION, PokemonType.WATER, PokemonType.GHOST, [ - [ Biome.SEABED, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.BASCULEGION, PokemonType.WATER, PokemonType.GHOST, [ + [ BiomeId.SEABED, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.SNEASLER, PokemonType.FIGHTING, PokemonType.POISON, [ - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.SNEASLER, PokemonType.FIGHTING, PokemonType.POISON, [ + [ BiomeId.SNOWY_FOREST, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.OVERQWIL, PokemonType.DARK, PokemonType.POISON, [ - [ Biome.SEABED, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.OVERQWIL, PokemonType.DARK, PokemonType.POISON, [ + [ BiomeId.SEABED, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.ENAMORUS, PokemonType.FAIRY, PokemonType.FLYING, [ - [ Biome.FAIRY_CAVE, BiomePoolTier.ULTRA_RARE ], - [ Biome.FAIRY_CAVE, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.ENAMORUS, PokemonType.FAIRY, PokemonType.FLYING, [ + [ BiomeId.FAIRY_CAVE, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.FAIRY_CAVE, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.SPRIGATITO, PokemonType.GRASS, -1, [ - [ Biome.MEADOW, BiomePoolTier.RARE ] + [ SpeciesId.SPRIGATITO, PokemonType.GRASS, -1, [ + [ BiomeId.MEADOW, BiomePoolTier.RARE ] ] ], - [ Species.FLORAGATO, PokemonType.GRASS, -1, [ - [ Biome.MEADOW, BiomePoolTier.RARE ] + [ SpeciesId.FLORAGATO, PokemonType.GRASS, -1, [ + [ BiomeId.MEADOW, BiomePoolTier.RARE ] ] ], - [ Species.MEOWSCARADA, PokemonType.GRASS, PokemonType.DARK, [ - [ Biome.MEADOW, BiomePoolTier.RARE ], - [ Biome.MEADOW, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.MEOWSCARADA, PokemonType.GRASS, PokemonType.DARK, [ + [ BiomeId.MEADOW, BiomePoolTier.RARE ], + [ BiomeId.MEADOW, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.FUECOCO, PokemonType.FIRE, -1, [ - [ Biome.GRAVEYARD, BiomePoolTier.RARE ] + [ SpeciesId.FUECOCO, PokemonType.FIRE, -1, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.RARE ] ] ], - [ Species.CROCALOR, PokemonType.FIRE, -1, [ - [ Biome.GRAVEYARD, BiomePoolTier.RARE ] + [ SpeciesId.CROCALOR, PokemonType.FIRE, -1, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.RARE ] ] ], - [ Species.SKELEDIRGE, PokemonType.FIRE, PokemonType.GHOST, [ - [ Biome.GRAVEYARD, BiomePoolTier.RARE ], - [ Biome.GRAVEYARD, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.SKELEDIRGE, PokemonType.FIRE, PokemonType.GHOST, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.RARE ], + [ BiomeId.GRAVEYARD, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.QUAXLY, PokemonType.WATER, -1, [ - [ Biome.BEACH, BiomePoolTier.RARE ] + [ SpeciesId.QUAXLY, PokemonType.WATER, -1, [ + [ BiomeId.BEACH, BiomePoolTier.RARE ] ] ], - [ Species.QUAXWELL, PokemonType.WATER, -1, [ - [ Biome.BEACH, BiomePoolTier.RARE ] + [ SpeciesId.QUAXWELL, PokemonType.WATER, -1, [ + [ BiomeId.BEACH, BiomePoolTier.RARE ] ] ], - [ Species.QUAQUAVAL, PokemonType.WATER, PokemonType.FIGHTING, [ - [ Biome.BEACH, BiomePoolTier.RARE ], - [ Biome.BEACH, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.QUAQUAVAL, PokemonType.WATER, PokemonType.FIGHTING, [ + [ BiomeId.BEACH, BiomePoolTier.RARE ], + [ BiomeId.BEACH, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.LECHONK, PokemonType.NORMAL, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON ], - [ Biome.PLAINS, BiomePoolTier.COMMON ] + [ SpeciesId.LECHONK, PokemonType.NORMAL, -1, [ + [ BiomeId.TOWN, BiomePoolTier.COMMON ], + [ BiomeId.PLAINS, BiomePoolTier.COMMON ] ] ], - [ Species.OINKOLOGNE, PokemonType.NORMAL, -1, [ - [ Biome.PLAINS, BiomePoolTier.COMMON ], - [ Biome.PLAINS, BiomePoolTier.BOSS ] + [ SpeciesId.OINKOLOGNE, PokemonType.NORMAL, -1, [ + [ BiomeId.PLAINS, BiomePoolTier.COMMON ], + [ BiomeId.PLAINS, BiomePoolTier.BOSS ] ] ], - [ Species.TAROUNTULA, PokemonType.BUG, -1, [ - [ Biome.FOREST, BiomePoolTier.COMMON ] + [ SpeciesId.TAROUNTULA, PokemonType.BUG, -1, [ + [ BiomeId.FOREST, BiomePoolTier.COMMON ] ] ], - [ Species.SPIDOPS, PokemonType.BUG, -1, [ - [ Biome.FOREST, BiomePoolTier.COMMON ], - [ Biome.FOREST, BiomePoolTier.BOSS ] + [ SpeciesId.SPIDOPS, PokemonType.BUG, -1, [ + [ BiomeId.FOREST, BiomePoolTier.COMMON ], + [ BiomeId.FOREST, BiomePoolTier.BOSS ] ] ], - [ Species.NYMBLE, PokemonType.BUG, -1, [ - [ Biome.TALL_GRASS, BiomePoolTier.COMMON ], - [ Biome.FOREST, BiomePoolTier.COMMON ] + [ SpeciesId.NYMBLE, PokemonType.BUG, -1, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.COMMON ], + [ BiomeId.FOREST, BiomePoolTier.COMMON ] ] ], - [ Species.LOKIX, PokemonType.BUG, PokemonType.DARK, [ - [ Biome.TALL_GRASS, BiomePoolTier.COMMON ], - [ Biome.TALL_GRASS, BiomePoolTier.BOSS ], - [ Biome.FOREST, BiomePoolTier.COMMON ], - [ Biome.FOREST, BiomePoolTier.BOSS ] + [ SpeciesId.LOKIX, PokemonType.BUG, PokemonType.DARK, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.COMMON ], + [ BiomeId.TALL_GRASS, BiomePoolTier.BOSS ], + [ BiomeId.FOREST, BiomePoolTier.COMMON ], + [ BiomeId.FOREST, BiomePoolTier.BOSS ] ] ], - [ Species.PAWMI, PokemonType.ELECTRIC, -1, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.POWER_PLANT, BiomePoolTier.COMMON ] + [ SpeciesId.PAWMI, PokemonType.ELECTRIC, -1, [ + [ BiomeId.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.POWER_PLANT, BiomePoolTier.COMMON ] ] ], - [ Species.PAWMO, PokemonType.ELECTRIC, PokemonType.FIGHTING, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.POWER_PLANT, BiomePoolTier.COMMON ] + [ SpeciesId.PAWMO, PokemonType.ELECTRIC, PokemonType.FIGHTING, [ + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.POWER_PLANT, BiomePoolTier.COMMON ] ] ], - [ Species.PAWMOT, PokemonType.ELECTRIC, PokemonType.FIGHTING, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.PLAINS, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.POWER_PLANT, BiomePoolTier.COMMON ], - [ Biome.POWER_PLANT, BiomePoolTier.BOSS ] + [ SpeciesId.PAWMOT, PokemonType.ELECTRIC, PokemonType.FIGHTING, [ + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.PLAINS, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.POWER_PLANT, BiomePoolTier.COMMON ], + [ BiomeId.POWER_PLANT, BiomePoolTier.BOSS ] ] ], - [ Species.TANDEMAUS, PokemonType.NORMAL, -1, [ - [ Biome.TOWN, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.METROPOLIS, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.TANDEMAUS, PokemonType.NORMAL, -1, [ + [ BiomeId.TOWN, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.METROPOLIS, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.MAUSHOLD, PokemonType.NORMAL, -1, [ - [ Biome.METROPOLIS, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.METROPOLIS, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.MAUSHOLD, PokemonType.NORMAL, -1, [ + [ BiomeId.METROPOLIS, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.METROPOLIS, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.FIDOUGH, PokemonType.FAIRY, -1, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON ], - [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON ] + [ SpeciesId.FIDOUGH, PokemonType.FAIRY, -1, [ + [ BiomeId.TOWN, BiomePoolTier.UNCOMMON ], + [ BiomeId.METROPOLIS, BiomePoolTier.UNCOMMON ] ] ], - [ Species.DACHSBUN, PokemonType.FAIRY, -1, [ - [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON ], - [ Biome.METROPOLIS, BiomePoolTier.BOSS ] + [ SpeciesId.DACHSBUN, PokemonType.FAIRY, -1, [ + [ BiomeId.METROPOLIS, BiomePoolTier.UNCOMMON ], + [ BiomeId.METROPOLIS, BiomePoolTier.BOSS ] ] ], - [ Species.SMOLIV, PokemonType.GRASS, PokemonType.NORMAL, [ - [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.SMOLIV, PokemonType.GRASS, PokemonType.NORMAL, [ + [ BiomeId.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.DOLLIV, PokemonType.GRASS, PokemonType.NORMAL, [ - [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.DOLLIV, PokemonType.GRASS, PokemonType.NORMAL, [ + [ BiomeId.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.ARBOLIVA, PokemonType.GRASS, PokemonType.NORMAL, [ - [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.MEADOW, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.ARBOLIVA, PokemonType.GRASS, PokemonType.NORMAL, [ + [ BiomeId.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.MEADOW, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.SQUAWKABILLY, PokemonType.NORMAL, PokemonType.FLYING, [ - [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON ], - [ Biome.FOREST, BiomePoolTier.RARE ] + [ SpeciesId.SQUAWKABILLY, PokemonType.NORMAL, PokemonType.FLYING, [ + [ BiomeId.METROPOLIS, BiomePoolTier.UNCOMMON ], + [ BiomeId.FOREST, BiomePoolTier.RARE ] ] ], - [ Species.NACLI, PokemonType.ROCK, -1, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON ], - [ Biome.CAVE, BiomePoolTier.COMMON ] + [ SpeciesId.NACLI, PokemonType.ROCK, -1, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON ], + [ BiomeId.CAVE, BiomePoolTier.COMMON ] ] ], - [ Species.NACLSTACK, PokemonType.ROCK, -1, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON ], - [ Biome.CAVE, BiomePoolTier.COMMON ] + [ SpeciesId.NACLSTACK, PokemonType.ROCK, -1, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON ], + [ BiomeId.CAVE, BiomePoolTier.COMMON ] ] ], - [ Species.GARGANACL, PokemonType.ROCK, -1, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON ], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS ], - [ Biome.CAVE, BiomePoolTier.COMMON ], - [ Biome.CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.GARGANACL, PokemonType.ROCK, -1, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON ], + [ BiomeId.MOUNTAIN, BiomePoolTier.BOSS ], + [ BiomeId.CAVE, BiomePoolTier.COMMON ], + [ BiomeId.CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.CHARCADET, PokemonType.FIRE, -1, [ - [ Biome.VOLCANO, BiomePoolTier.RARE ] + [ SpeciesId.CHARCADET, PokemonType.FIRE, -1, [ + [ BiomeId.VOLCANO, BiomePoolTier.RARE ] ] ], - [ Species.ARMAROUGE, PokemonType.FIRE, PokemonType.PSYCHIC, [ - [ Biome.VOLCANO, BiomePoolTier.RARE ], - [ Biome.VOLCANO, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.ARMAROUGE, PokemonType.FIRE, PokemonType.PSYCHIC, [ + [ BiomeId.VOLCANO, BiomePoolTier.RARE ], + [ BiomeId.VOLCANO, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.CERULEDGE, PokemonType.FIRE, PokemonType.GHOST, [ - [ Biome.GRAVEYARD, BiomePoolTier.RARE ], - [ Biome.GRAVEYARD, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.CERULEDGE, PokemonType.FIRE, PokemonType.GHOST, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.RARE ], + [ BiomeId.GRAVEYARD, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.TADBULB, PokemonType.ELECTRIC, -1, [ - [ Biome.POWER_PLANT, BiomePoolTier.COMMON ] + [ SpeciesId.TADBULB, PokemonType.ELECTRIC, -1, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.COMMON ] ] ], - [ Species.BELLIBOLT, PokemonType.ELECTRIC, -1, [ - [ Biome.POWER_PLANT, BiomePoolTier.COMMON ], - [ Biome.POWER_PLANT, BiomePoolTier.BOSS ] + [ SpeciesId.BELLIBOLT, PokemonType.ELECTRIC, -1, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.COMMON ], + [ BiomeId.POWER_PLANT, BiomePoolTier.BOSS ] ] ], - [ Species.WATTREL, PokemonType.ELECTRIC, PokemonType.FLYING, [ - [ Biome.SEA, BiomePoolTier.UNCOMMON ] + [ SpeciesId.WATTREL, PokemonType.ELECTRIC, PokemonType.FLYING, [ + [ BiomeId.SEA, BiomePoolTier.UNCOMMON ] ] ], - [ Species.KILOWATTREL, PokemonType.ELECTRIC, PokemonType.FLYING, [ - [ Biome.SEA, BiomePoolTier.UNCOMMON ], - [ Biome.SEA, BiomePoolTier.BOSS ] + [ SpeciesId.KILOWATTREL, PokemonType.ELECTRIC, PokemonType.FLYING, [ + [ BiomeId.SEA, BiomePoolTier.UNCOMMON ], + [ BiomeId.SEA, BiomePoolTier.BOSS ] ] ], - [ Species.MASCHIFF, PokemonType.DARK, -1, [ - [ Biome.ABYSS, BiomePoolTier.COMMON ] + [ SpeciesId.MASCHIFF, PokemonType.DARK, -1, [ + [ BiomeId.ABYSS, BiomePoolTier.COMMON ] ] ], - [ Species.MABOSSTIFF, PokemonType.DARK, -1, [ - [ Biome.ABYSS, BiomePoolTier.COMMON ], - [ Biome.ABYSS, BiomePoolTier.BOSS ] + [ SpeciesId.MABOSSTIFF, PokemonType.DARK, -1, [ + [ BiomeId.ABYSS, BiomePoolTier.COMMON ], + [ BiomeId.ABYSS, BiomePoolTier.BOSS ] ] ], - [ Species.SHROODLE, PokemonType.POISON, PokemonType.NORMAL, [ - [ Biome.FOREST, BiomePoolTier.COMMON ] + [ SpeciesId.SHROODLE, PokemonType.POISON, PokemonType.NORMAL, [ + [ BiomeId.FOREST, BiomePoolTier.COMMON ] ] ], - [ Species.GRAFAIAI, PokemonType.POISON, PokemonType.NORMAL, [ - [ Biome.FOREST, BiomePoolTier.COMMON ], - [ Biome.FOREST, BiomePoolTier.BOSS ] + [ SpeciesId.GRAFAIAI, PokemonType.POISON, PokemonType.NORMAL, [ + [ BiomeId.FOREST, BiomePoolTier.COMMON ], + [ BiomeId.FOREST, BiomePoolTier.BOSS ] ] ], - [ Species.BRAMBLIN, PokemonType.GRASS, PokemonType.GHOST, [ - [ Biome.DESERT, BiomePoolTier.UNCOMMON ] + [ SpeciesId.BRAMBLIN, PokemonType.GRASS, PokemonType.GHOST, [ + [ BiomeId.DESERT, BiomePoolTier.UNCOMMON ] ] ], - [ Species.BRAMBLEGHAST, PokemonType.GRASS, PokemonType.GHOST, [ - [ Biome.DESERT, BiomePoolTier.UNCOMMON ], - [ Biome.DESERT, BiomePoolTier.BOSS ] + [ SpeciesId.BRAMBLEGHAST, PokemonType.GRASS, PokemonType.GHOST, [ + [ BiomeId.DESERT, BiomePoolTier.UNCOMMON ], + [ BiomeId.DESERT, BiomePoolTier.BOSS ] ] ], - [ Species.TOEDSCOOL, PokemonType.GROUND, PokemonType.GRASS, [ - [ Biome.FOREST, BiomePoolTier.RARE ] + [ SpeciesId.TOEDSCOOL, PokemonType.GROUND, PokemonType.GRASS, [ + [ BiomeId.FOREST, BiomePoolTier.RARE ] ] ], - [ Species.TOEDSCRUEL, PokemonType.GROUND, PokemonType.GRASS, [ - [ Biome.FOREST, BiomePoolTier.RARE ], - [ Biome.FOREST, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.TOEDSCRUEL, PokemonType.GROUND, PokemonType.GRASS, [ + [ BiomeId.FOREST, BiomePoolTier.RARE ], + [ BiomeId.FOREST, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.KLAWF, PokemonType.ROCK, -1, [ - [ Biome.MOUNTAIN, BiomePoolTier.RARE ] + [ SpeciesId.KLAWF, PokemonType.ROCK, -1, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.RARE ] ] ], - [ Species.CAPSAKID, PokemonType.GRASS, -1, [ - [ Biome.BADLANDS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.CAPSAKID, PokemonType.GRASS, -1, [ + [ BiomeId.BADLANDS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.SCOVILLAIN, PokemonType.GRASS, PokemonType.FIRE, [ - [ Biome.BADLANDS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.BADLANDS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.SCOVILLAIN, PokemonType.GRASS, PokemonType.FIRE, [ + [ BiomeId.BADLANDS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.BADLANDS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.RELLOR, PokemonType.BUG, -1, [ - [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.RELLOR, PokemonType.BUG, -1, [ + [ BiomeId.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.RABSCA, PokemonType.BUG, PokemonType.PSYCHIC, [ - [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.DESERT, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.RABSCA, PokemonType.BUG, PokemonType.PSYCHIC, [ + [ BiomeId.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.DESERT, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.FLITTLE, PokemonType.PSYCHIC, -1, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.FLITTLE, PokemonType.PSYCHIC, -1, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.ESPATHRA, PokemonType.PSYCHIC, -1, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.ESPATHRA, PokemonType.PSYCHIC, -1, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.TINKATINK, PokemonType.FAIRY, PokemonType.STEEL, [ - [ Biome.RUINS, BiomePoolTier.UNCOMMON ] + [ SpeciesId.TINKATINK, PokemonType.FAIRY, PokemonType.STEEL, [ + [ BiomeId.RUINS, BiomePoolTier.UNCOMMON ] ] ], - [ Species.TINKATUFF, PokemonType.FAIRY, PokemonType.STEEL, [ - [ Biome.RUINS, BiomePoolTier.UNCOMMON ] + [ SpeciesId.TINKATUFF, PokemonType.FAIRY, PokemonType.STEEL, [ + [ BiomeId.RUINS, BiomePoolTier.UNCOMMON ] ] ], - [ Species.TINKATON, PokemonType.FAIRY, PokemonType.STEEL, [ - [ Biome.RUINS, BiomePoolTier.UNCOMMON ], - [ Biome.RUINS, BiomePoolTier.BOSS ] + [ SpeciesId.TINKATON, PokemonType.FAIRY, PokemonType.STEEL, [ + [ BiomeId.RUINS, BiomePoolTier.UNCOMMON ], + [ BiomeId.RUINS, BiomePoolTier.BOSS ] ] ], - [ Species.WIGLETT, PokemonType.WATER, -1, [ - [ Biome.BEACH, BiomePoolTier.COMMON ] + [ SpeciesId.WIGLETT, PokemonType.WATER, -1, [ + [ BiomeId.BEACH, BiomePoolTier.COMMON ] ] ], - [ Species.WUGTRIO, PokemonType.WATER, -1, [ - [ Biome.BEACH, BiomePoolTier.COMMON ] + [ SpeciesId.WUGTRIO, PokemonType.WATER, -1, [ + [ BiomeId.BEACH, BiomePoolTier.COMMON ] ] ], - [ Species.BOMBIRDIER, PokemonType.FLYING, PokemonType.DARK, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.BOMBIRDIER, PokemonType.FLYING, PokemonType.DARK, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.FINIZEN, PokemonType.WATER, -1, [ - [ Biome.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.FINIZEN, PokemonType.WATER, -1, [ + [ BiomeId.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.PALAFIN, PokemonType.WATER, -1, [ - [ Biome.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.SEA, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.PALAFIN, PokemonType.WATER, -1, [ + [ BiomeId.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.SEA, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.VAROOM, PokemonType.STEEL, PokemonType.POISON, [ - [ Biome.METROPOLIS, BiomePoolTier.RARE ], - [ Biome.SLUM, BiomePoolTier.RARE ] + [ SpeciesId.VAROOM, PokemonType.STEEL, PokemonType.POISON, [ + [ BiomeId.METROPOLIS, BiomePoolTier.RARE ], + [ BiomeId.SLUM, BiomePoolTier.RARE ] ] ], - [ Species.REVAVROOM, PokemonType.STEEL, PokemonType.POISON, [ - [ Biome.METROPOLIS, BiomePoolTier.RARE ], - [ Biome.METROPOLIS, BiomePoolTier.BOSS_RARE ], - [ Biome.SLUM, BiomePoolTier.RARE ], - [ Biome.SLUM, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.REVAVROOM, PokemonType.STEEL, PokemonType.POISON, [ + [ BiomeId.METROPOLIS, BiomePoolTier.RARE ], + [ BiomeId.METROPOLIS, BiomePoolTier.BOSS_RARE ], + [ BiomeId.SLUM, BiomePoolTier.RARE ], + [ BiomeId.SLUM, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.CYCLIZAR, PokemonType.DRAGON, PokemonType.NORMAL, [ - [ Biome.WASTELAND, BiomePoolTier.UNCOMMON ] + [ SpeciesId.CYCLIZAR, PokemonType.DRAGON, PokemonType.NORMAL, [ + [ BiomeId.WASTELAND, BiomePoolTier.UNCOMMON ] ] ], - [ Species.ORTHWORM, PokemonType.STEEL, -1, [ - [ Biome.DESERT, BiomePoolTier.UNCOMMON ] + [ SpeciesId.ORTHWORM, PokemonType.STEEL, -1, [ + [ BiomeId.DESERT, BiomePoolTier.UNCOMMON ] ] ], - [ Species.GLIMMET, PokemonType.ROCK, PokemonType.POISON, [ - [ Biome.CAVE, BiomePoolTier.RARE ] + [ SpeciesId.GLIMMET, PokemonType.ROCK, PokemonType.POISON, [ + [ BiomeId.CAVE, BiomePoolTier.RARE ] ] ], - [ Species.GLIMMORA, PokemonType.ROCK, PokemonType.POISON, [ - [ Biome.CAVE, BiomePoolTier.RARE ], - [ Biome.CAVE, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.GLIMMORA, PokemonType.ROCK, PokemonType.POISON, [ + [ BiomeId.CAVE, BiomePoolTier.RARE ], + [ BiomeId.CAVE, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.GREAVARD, PokemonType.GHOST, -1, [ - [ Biome.GRAVEYARD, BiomePoolTier.COMMON ] + [ SpeciesId.GREAVARD, PokemonType.GHOST, -1, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.COMMON ] ] ], - [ Species.HOUNDSTONE, PokemonType.GHOST, -1, [ - [ Biome.GRAVEYARD, BiomePoolTier.COMMON ], - [ Biome.GRAVEYARD, BiomePoolTier.BOSS ] + [ SpeciesId.HOUNDSTONE, PokemonType.GHOST, -1, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.COMMON ], + [ BiomeId.GRAVEYARD, BiomePoolTier.BOSS ] ] ], - [ Species.FLAMIGO, PokemonType.FLYING, PokemonType.FIGHTING, [ - [ Biome.LAKE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.FLAMIGO, PokemonType.FLYING, PokemonType.FIGHTING, [ + [ BiomeId.LAKE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.CETODDLE, PokemonType.ICE, -1, [ - [ Biome.ICE_CAVE, BiomePoolTier.UNCOMMON ] + [ SpeciesId.CETODDLE, PokemonType.ICE, -1, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.UNCOMMON ] ] ], - [ Species.CETITAN, PokemonType.ICE, -1, [ - [ Biome.ICE_CAVE, BiomePoolTier.UNCOMMON ], - [ Biome.ICE_CAVE, BiomePoolTier.BOSS ] + [ SpeciesId.CETITAN, PokemonType.ICE, -1, [ + [ BiomeId.ICE_CAVE, BiomePoolTier.UNCOMMON ], + [ BiomeId.ICE_CAVE, BiomePoolTier.BOSS ] ] ], - [ Species.VELUZA, PokemonType.WATER, PokemonType.PSYCHIC, [ - [ Biome.SEABED, BiomePoolTier.COMMON ] + [ SpeciesId.VELUZA, PokemonType.WATER, PokemonType.PSYCHIC, [ + [ BiomeId.SEABED, BiomePoolTier.COMMON ] ] ], - [ Species.DONDOZO, PokemonType.WATER, -1, [ - [ Biome.SEABED, BiomePoolTier.UNCOMMON ], - [ Biome.SEABED, BiomePoolTier.BOSS ] + [ SpeciesId.DONDOZO, PokemonType.WATER, -1, [ + [ BiomeId.SEABED, BiomePoolTier.UNCOMMON ], + [ BiomeId.SEABED, BiomePoolTier.BOSS ] ] ], - [ Species.TATSUGIRI, PokemonType.DRAGON, PokemonType.WATER, [ - [ Biome.BEACH, BiomePoolTier.RARE ] + [ SpeciesId.TATSUGIRI, PokemonType.DRAGON, PokemonType.WATER, [ + [ BiomeId.BEACH, BiomePoolTier.RARE ] ] ], - [ Species.ANNIHILAPE, PokemonType.FIGHTING, PokemonType.GHOST, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.DOJO, BiomePoolTier.COMMON ], - [ Biome.DOJO, BiomePoolTier.BOSS ] + [ SpeciesId.ANNIHILAPE, PokemonType.FIGHTING, PokemonType.GHOST, [ + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.DOJO, BiomePoolTier.COMMON ], + [ BiomeId.DOJO, BiomePoolTier.BOSS ] ] ], - [ Species.CLODSIRE, PokemonType.POISON, PokemonType.GROUND, [ - [ Biome.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.SWAMP, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.CLODSIRE, PokemonType.POISON, PokemonType.GROUND, [ + [ BiomeId.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.SWAMP, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.FARIGIRAF, PokemonType.NORMAL, PokemonType.PSYCHIC, [ - [ Biome.TALL_GRASS, BiomePoolTier.RARE ], - [ Biome.TALL_GRASS, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.FARIGIRAF, PokemonType.NORMAL, PokemonType.PSYCHIC, [ + [ BiomeId.TALL_GRASS, BiomePoolTier.RARE ], + [ BiomeId.TALL_GRASS, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.DUDUNSPARCE, PokemonType.NORMAL, -1, [ - [ Biome.PLAINS, BiomePoolTier.SUPER_RARE ], - [ Biome.PLAINS, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.DUDUNSPARCE, PokemonType.NORMAL, -1, [ + [ BiomeId.PLAINS, BiomePoolTier.SUPER_RARE ], + [ BiomeId.PLAINS, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.KINGAMBIT, PokemonType.DARK, PokemonType.STEEL, [ - [ Biome.ABYSS, BiomePoolTier.COMMON ], - [ Biome.ABYSS, BiomePoolTier.BOSS ] + [ SpeciesId.KINGAMBIT, PokemonType.DARK, PokemonType.STEEL, [ + [ BiomeId.ABYSS, BiomePoolTier.COMMON ], + [ BiomeId.ABYSS, BiomePoolTier.BOSS ] ] ], - [ Species.GREAT_TUSK, PokemonType.GROUND, PokemonType.FIGHTING, [ - [ Biome.END, BiomePoolTier.COMMON ] + [ SpeciesId.GREAT_TUSK, PokemonType.GROUND, PokemonType.FIGHTING, [ + [ BiomeId.END, BiomePoolTier.COMMON ] ] ], - [ Species.SCREAM_TAIL, PokemonType.FAIRY, PokemonType.PSYCHIC, [ - [ Biome.END, BiomePoolTier.COMMON ] + [ SpeciesId.SCREAM_TAIL, PokemonType.FAIRY, PokemonType.PSYCHIC, [ + [ BiomeId.END, BiomePoolTier.COMMON ] ] ], - [ Species.BRUTE_BONNET, PokemonType.GRASS, PokemonType.DARK, [ - [ Biome.END, BiomePoolTier.COMMON ] + [ SpeciesId.BRUTE_BONNET, PokemonType.GRASS, PokemonType.DARK, [ + [ BiomeId.END, BiomePoolTier.COMMON ] ] ], - [ Species.FLUTTER_MANE, PokemonType.GHOST, PokemonType.FAIRY, [ - [ Biome.END, BiomePoolTier.COMMON ] + [ SpeciesId.FLUTTER_MANE, PokemonType.GHOST, PokemonType.FAIRY, [ + [ BiomeId.END, BiomePoolTier.COMMON ] ] ], - [ Species.SLITHER_WING, PokemonType.BUG, PokemonType.FIGHTING, [ - [ Biome.END, BiomePoolTier.COMMON ] + [ SpeciesId.SLITHER_WING, PokemonType.BUG, PokemonType.FIGHTING, [ + [ BiomeId.END, BiomePoolTier.COMMON ] ] ], - [ Species.SANDY_SHOCKS, PokemonType.ELECTRIC, PokemonType.GROUND, [ - [ Biome.END, BiomePoolTier.COMMON ] + [ SpeciesId.SANDY_SHOCKS, PokemonType.ELECTRIC, PokemonType.GROUND, [ + [ BiomeId.END, BiomePoolTier.COMMON ] ] ], - [ Species.IRON_TREADS, PokemonType.GROUND, PokemonType.STEEL, [ - [ Biome.END, BiomePoolTier.COMMON ] + [ SpeciesId.IRON_TREADS, PokemonType.GROUND, PokemonType.STEEL, [ + [ BiomeId.END, BiomePoolTier.COMMON ] ] ], - [ Species.IRON_BUNDLE, PokemonType.ICE, PokemonType.WATER, [ - [ Biome.END, BiomePoolTier.COMMON ] + [ SpeciesId.IRON_BUNDLE, PokemonType.ICE, PokemonType.WATER, [ + [ BiomeId.END, BiomePoolTier.COMMON ] ] ], - [ Species.IRON_HANDS, PokemonType.FIGHTING, PokemonType.ELECTRIC, [ - [ Biome.END, BiomePoolTier.COMMON ] + [ SpeciesId.IRON_HANDS, PokemonType.FIGHTING, PokemonType.ELECTRIC, [ + [ BiomeId.END, BiomePoolTier.COMMON ] ] ], - [ Species.IRON_JUGULIS, PokemonType.DARK, PokemonType.FLYING, [ - [ Biome.END, BiomePoolTier.COMMON ] + [ SpeciesId.IRON_JUGULIS, PokemonType.DARK, PokemonType.FLYING, [ + [ BiomeId.END, BiomePoolTier.COMMON ] ] ], - [ Species.IRON_MOTH, PokemonType.FIRE, PokemonType.POISON, [ - [ Biome.END, BiomePoolTier.COMMON ] + [ SpeciesId.IRON_MOTH, PokemonType.FIRE, PokemonType.POISON, [ + [ BiomeId.END, BiomePoolTier.COMMON ] ] ], - [ Species.IRON_THORNS, PokemonType.ROCK, PokemonType.ELECTRIC, [ - [ Biome.END, BiomePoolTier.COMMON ] + [ SpeciesId.IRON_THORNS, PokemonType.ROCK, PokemonType.ELECTRIC, [ + [ BiomeId.END, BiomePoolTier.COMMON ] ] ], - [ Species.FRIGIBAX, PokemonType.DRAGON, PokemonType.ICE, [ - [ Biome.WASTELAND, BiomePoolTier.RARE ] + [ SpeciesId.FRIGIBAX, PokemonType.DRAGON, PokemonType.ICE, [ + [ BiomeId.WASTELAND, BiomePoolTier.RARE ] ] ], - [ Species.ARCTIBAX, PokemonType.DRAGON, PokemonType.ICE, [ - [ Biome.WASTELAND, BiomePoolTier.RARE ] + [ SpeciesId.ARCTIBAX, PokemonType.DRAGON, PokemonType.ICE, [ + [ BiomeId.WASTELAND, BiomePoolTier.RARE ] ] ], - [ Species.BAXCALIBUR, PokemonType.DRAGON, PokemonType.ICE, [ - [ Biome.WASTELAND, BiomePoolTier.RARE ], - [ Biome.WASTELAND, BiomePoolTier.BOSS ] + [ SpeciesId.BAXCALIBUR, PokemonType.DRAGON, PokemonType.ICE, [ + [ BiomeId.WASTELAND, BiomePoolTier.RARE ], + [ BiomeId.WASTELAND, BiomePoolTier.BOSS ] ] ], - [ Species.GIMMIGHOUL, PokemonType.GHOST, -1, [ - [ Biome.TEMPLE, BiomePoolTier.RARE ] + [ SpeciesId.GIMMIGHOUL, PokemonType.GHOST, -1, [ + [ BiomeId.TEMPLE, BiomePoolTier.RARE ] ] ], - [ Species.GHOLDENGO, PokemonType.STEEL, PokemonType.GHOST, [ - [ Biome.TEMPLE, BiomePoolTier.RARE ], - [ Biome.TEMPLE, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.GHOLDENGO, PokemonType.STEEL, PokemonType.GHOST, [ + [ BiomeId.TEMPLE, BiomePoolTier.RARE ], + [ BiomeId.TEMPLE, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.WO_CHIEN, PokemonType.DARK, PokemonType.GRASS, [ - [ Biome.FOREST, BiomePoolTier.ULTRA_RARE ], - [ Biome.FOREST, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.WO_CHIEN, PokemonType.DARK, PokemonType.GRASS, [ + [ BiomeId.FOREST, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.FOREST, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.CHIEN_PAO, PokemonType.DARK, PokemonType.ICE, [ - [ Biome.SNOWY_FOREST, BiomePoolTier.ULTRA_RARE ], - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.CHIEN_PAO, PokemonType.DARK, PokemonType.ICE, [ + [ BiomeId.SNOWY_FOREST, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.TING_LU, PokemonType.DARK, PokemonType.GROUND, [ - [ Biome.MOUNTAIN, BiomePoolTier.ULTRA_RARE ], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.TING_LU, PokemonType.DARK, PokemonType.GROUND, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.MOUNTAIN, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.CHI_YU, PokemonType.DARK, PokemonType.FIRE, [ - [ Biome.VOLCANO, BiomePoolTier.ULTRA_RARE ], - [ Biome.VOLCANO, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.CHI_YU, PokemonType.DARK, PokemonType.FIRE, [ + [ BiomeId.VOLCANO, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.VOLCANO, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.ROARING_MOON, PokemonType.DRAGON, PokemonType.DARK, [ - [ Biome.END, BiomePoolTier.UNCOMMON ] + [ SpeciesId.ROARING_MOON, PokemonType.DRAGON, PokemonType.DARK, [ + [ BiomeId.END, BiomePoolTier.UNCOMMON ] ] ], - [ Species.IRON_VALIANT, PokemonType.FAIRY, PokemonType.FIGHTING, [ - [ Biome.END, BiomePoolTier.UNCOMMON ] + [ SpeciesId.IRON_VALIANT, PokemonType.FAIRY, PokemonType.FIGHTING, [ + [ BiomeId.END, BiomePoolTier.UNCOMMON ] ] ], - [ Species.KORAIDON, PokemonType.FIGHTING, PokemonType.DRAGON, [ - [ Biome.RUINS, BiomePoolTier.BOSS_ULTRA_RARE ] + [ SpeciesId.KORAIDON, PokemonType.FIGHTING, PokemonType.DRAGON, [ + [ BiomeId.RUINS, BiomePoolTier.BOSS_ULTRA_RARE ] ] ], - [ Species.MIRAIDON, PokemonType.ELECTRIC, PokemonType.DRAGON, [ - [ Biome.LABORATORY, BiomePoolTier.BOSS_ULTRA_RARE ] + [ SpeciesId.MIRAIDON, PokemonType.ELECTRIC, PokemonType.DRAGON, [ + [ BiomeId.LABORATORY, BiomePoolTier.BOSS_ULTRA_RARE ] ] ], - [ Species.WALKING_WAKE, PokemonType.WATER, PokemonType.DRAGON, [ - [ Biome.END, BiomePoolTier.RARE ] + [ SpeciesId.WALKING_WAKE, PokemonType.WATER, PokemonType.DRAGON, [ + [ BiomeId.END, BiomePoolTier.RARE ] ] ], - [ Species.IRON_LEAVES, PokemonType.GRASS, PokemonType.PSYCHIC, [ - [ Biome.END, BiomePoolTier.RARE ] + [ SpeciesId.IRON_LEAVES, PokemonType.GRASS, PokemonType.PSYCHIC, [ + [ BiomeId.END, BiomePoolTier.RARE ] ] ], - [ Species.DIPPLIN, PokemonType.GRASS, PokemonType.DRAGON, [ - [ Biome.MEADOW, BiomePoolTier.RARE ] + [ SpeciesId.DIPPLIN, PokemonType.GRASS, PokemonType.DRAGON, [ + [ BiomeId.MEADOW, BiomePoolTier.RARE ] ] ], - [ Species.POLTCHAGEIST, PokemonType.GRASS, PokemonType.GHOST, [ - [ Biome.BADLANDS, BiomePoolTier.RARE ] + [ SpeciesId.POLTCHAGEIST, PokemonType.GRASS, PokemonType.GHOST, [ + [ BiomeId.BADLANDS, BiomePoolTier.RARE ] ] ], - [ Species.SINISTCHA, PokemonType.GRASS, PokemonType.GHOST, [ - [ Biome.BADLANDS, BiomePoolTier.RARE ], - [ Biome.BADLANDS, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.SINISTCHA, PokemonType.GRASS, PokemonType.GHOST, [ + [ BiomeId.BADLANDS, BiomePoolTier.RARE ], + [ BiomeId.BADLANDS, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.OKIDOGI, PokemonType.POISON, PokemonType.FIGHTING, [ - [ Biome.BADLANDS, BiomePoolTier.ULTRA_RARE ], - [ Biome.BADLANDS, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.OKIDOGI, PokemonType.POISON, PokemonType.FIGHTING, [ + [ BiomeId.BADLANDS, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.BADLANDS, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.MUNKIDORI, PokemonType.POISON, PokemonType.PSYCHIC, [ - [ Biome.JUNGLE, BiomePoolTier.ULTRA_RARE ], - [ Biome.JUNGLE, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.MUNKIDORI, PokemonType.POISON, PokemonType.PSYCHIC, [ + [ BiomeId.JUNGLE, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.JUNGLE, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.FEZANDIPITI, PokemonType.POISON, PokemonType.FAIRY, [ - [ Biome.RUINS, BiomePoolTier.ULTRA_RARE ], - [ Biome.RUINS, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.FEZANDIPITI, PokemonType.POISON, PokemonType.FAIRY, [ + [ BiomeId.RUINS, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.RUINS, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.OGERPON, PokemonType.GRASS, -1, [ - [ Biome.MOUNTAIN, BiomePoolTier.ULTRA_RARE ], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS_SUPER_RARE ] + [ SpeciesId.OGERPON, PokemonType.GRASS, -1, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.MOUNTAIN, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.ARCHALUDON, PokemonType.STEEL, PokemonType.DRAGON, [ - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.ARCHALUDON, PokemonType.STEEL, PokemonType.DRAGON, [ + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.HYDRAPPLE, PokemonType.GRASS, PokemonType.DRAGON, [ - [ Biome.MEADOW, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.HYDRAPPLE, PokemonType.GRASS, PokemonType.DRAGON, [ + [ BiomeId.MEADOW, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.GOUGING_FIRE, PokemonType.FIRE, PokemonType.DRAGON, [ - [ Biome.END, BiomePoolTier.RARE ] + [ SpeciesId.GOUGING_FIRE, PokemonType.FIRE, PokemonType.DRAGON, [ + [ BiomeId.END, BiomePoolTier.RARE ] ] ], - [ Species.RAGING_BOLT, PokemonType.ELECTRIC, PokemonType.DRAGON, [ - [ Biome.END, BiomePoolTier.RARE ] + [ SpeciesId.RAGING_BOLT, PokemonType.ELECTRIC, PokemonType.DRAGON, [ + [ BiomeId.END, BiomePoolTier.RARE ] ] ], - [ Species.IRON_BOULDER, PokemonType.ROCK, PokemonType.PSYCHIC, [ - [ Biome.END, BiomePoolTier.RARE ] + [ SpeciesId.IRON_BOULDER, PokemonType.ROCK, PokemonType.PSYCHIC, [ + [ BiomeId.END, BiomePoolTier.RARE ] ] ], - [ Species.IRON_CROWN, PokemonType.STEEL, PokemonType.PSYCHIC, [ - [ Biome.END, BiomePoolTier.RARE ] + [ SpeciesId.IRON_CROWN, PokemonType.STEEL, PokemonType.PSYCHIC, [ + [ BiomeId.END, BiomePoolTier.RARE ] ] ], - [ Species.TERAPAGOS, PokemonType.NORMAL, -1, [ - [ Biome.CAVE, BiomePoolTier.BOSS_ULTRA_RARE ] + [ SpeciesId.TERAPAGOS, PokemonType.NORMAL, -1, [ + [ BiomeId.CAVE, BiomePoolTier.BOSS_ULTRA_RARE ] ] ], - [ Species.PECHARUNT, PokemonType.POISON, PokemonType.GHOST, [ ] + [ SpeciesId.PECHARUNT, PokemonType.POISON, PokemonType.GHOST, [ ] ], - [ Species.ALOLA_RATTATA, PokemonType.DARK, PokemonType.NORMAL, [ - [ Biome.ISLAND, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.ALOLA_RATTATA, PokemonType.DARK, PokemonType.NORMAL, [ + [ BiomeId.ISLAND, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.ALOLA_RATICATE, PokemonType.DARK, PokemonType.NORMAL, [ - [ Biome.ISLAND, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.ISLAND, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.ALOLA_RATICATE, PokemonType.DARK, PokemonType.NORMAL, [ + [ BiomeId.ISLAND, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.ISLAND, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.ALOLA_RAICHU, PokemonType.ELECTRIC, PokemonType.PSYCHIC, [ - [ Biome.ISLAND, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.ISLAND, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.ALOLA_RAICHU, PokemonType.ELECTRIC, PokemonType.PSYCHIC, [ + [ BiomeId.ISLAND, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.ISLAND, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.ALOLA_SANDSHREW, PokemonType.ICE, PokemonType.STEEL, [ - [ Biome.ISLAND, BiomePoolTier.COMMON ], - [ Biome.SNOWY_FOREST, BiomePoolTier.RARE ] + [ SpeciesId.ALOLA_SANDSHREW, PokemonType.ICE, PokemonType.STEEL, [ + [ BiomeId.ISLAND, BiomePoolTier.COMMON ], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.RARE ] ] ], - [ Species.ALOLA_SANDSLASH, PokemonType.ICE, PokemonType.STEEL, [ - [ Biome.ISLAND, BiomePoolTier.COMMON ], - [ Biome.ISLAND, BiomePoolTier.BOSS ], - [ Biome.SNOWY_FOREST, BiomePoolTier.RARE ], - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.ALOLA_SANDSLASH, PokemonType.ICE, PokemonType.STEEL, [ + [ BiomeId.ISLAND, BiomePoolTier.COMMON ], + [ BiomeId.ISLAND, BiomePoolTier.BOSS ], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.RARE ], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.ALOLA_VULPIX, PokemonType.ICE, -1, [ - [ Biome.ISLAND, BiomePoolTier.COMMON ], - [ Biome.SNOWY_FOREST, BiomePoolTier.RARE ] + [ SpeciesId.ALOLA_VULPIX, PokemonType.ICE, -1, [ + [ BiomeId.ISLAND, BiomePoolTier.COMMON ], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.RARE ] ] ], - [ Species.ALOLA_NINETALES, PokemonType.ICE, PokemonType.FAIRY, [ - [ Biome.ISLAND, BiomePoolTier.COMMON ], - [ Biome.ISLAND, BiomePoolTier.BOSS ], - [ Biome.SNOWY_FOREST, BiomePoolTier.RARE ], - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.ALOLA_NINETALES, PokemonType.ICE, PokemonType.FAIRY, [ + [ BiomeId.ISLAND, BiomePoolTier.COMMON ], + [ BiomeId.ISLAND, BiomePoolTier.BOSS ], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.RARE ], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.ALOLA_DIGLETT, PokemonType.GROUND, PokemonType.STEEL, [ - [ Biome.ISLAND, BiomePoolTier.COMMON ] + [ SpeciesId.ALOLA_DIGLETT, PokemonType.GROUND, PokemonType.STEEL, [ + [ BiomeId.ISLAND, BiomePoolTier.COMMON ] ] ], - [ Species.ALOLA_DUGTRIO, PokemonType.GROUND, PokemonType.STEEL, [ - [ Biome.ISLAND, BiomePoolTier.COMMON ], - [ Biome.ISLAND, BiomePoolTier.BOSS ] + [ SpeciesId.ALOLA_DUGTRIO, PokemonType.GROUND, PokemonType.STEEL, [ + [ BiomeId.ISLAND, BiomePoolTier.COMMON ], + [ BiomeId.ISLAND, BiomePoolTier.BOSS ] ] ], - [ Species.ALOLA_MEOWTH, PokemonType.DARK, -1, [ - [ Biome.ISLAND, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.ALOLA_MEOWTH, PokemonType.DARK, -1, [ + [ BiomeId.ISLAND, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.ALOLA_PERSIAN, PokemonType.DARK, -1, [ - [ Biome.ISLAND, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.ISLAND, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.ALOLA_PERSIAN, PokemonType.DARK, -1, [ + [ BiomeId.ISLAND, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.ISLAND, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.ALOLA_GEODUDE, PokemonType.ROCK, PokemonType.ELECTRIC, [ - [ Biome.ISLAND, BiomePoolTier.COMMON ] + [ SpeciesId.ALOLA_GEODUDE, PokemonType.ROCK, PokemonType.ELECTRIC, [ + [ BiomeId.ISLAND, BiomePoolTier.COMMON ] ] ], - [ Species.ALOLA_GRAVELER, PokemonType.ROCK, PokemonType.ELECTRIC, [ - [ Biome.ISLAND, BiomePoolTier.COMMON ] + [ SpeciesId.ALOLA_GRAVELER, PokemonType.ROCK, PokemonType.ELECTRIC, [ + [ BiomeId.ISLAND, BiomePoolTier.COMMON ] ] ], - [ Species.ALOLA_GOLEM, PokemonType.ROCK, PokemonType.ELECTRIC, [ - [ Biome.ISLAND, BiomePoolTier.COMMON ], - [ Biome.ISLAND, BiomePoolTier.BOSS ] + [ SpeciesId.ALOLA_GOLEM, PokemonType.ROCK, PokemonType.ELECTRIC, [ + [ BiomeId.ISLAND, BiomePoolTier.COMMON ], + [ BiomeId.ISLAND, BiomePoolTier.BOSS ] ] ], - [ Species.ALOLA_GRIMER, PokemonType.POISON, PokemonType.DARK, [ - [ Biome.ISLAND, BiomePoolTier.COMMON ] + [ SpeciesId.ALOLA_GRIMER, PokemonType.POISON, PokemonType.DARK, [ + [ BiomeId.ISLAND, BiomePoolTier.COMMON ] ] ], - [ Species.ALOLA_MUK, PokemonType.POISON, PokemonType.DARK, [ - [ Biome.ISLAND, BiomePoolTier.COMMON ], - [ Biome.ISLAND, BiomePoolTier.BOSS ] + [ SpeciesId.ALOLA_MUK, PokemonType.POISON, PokemonType.DARK, [ + [ BiomeId.ISLAND, BiomePoolTier.COMMON ], + [ BiomeId.ISLAND, BiomePoolTier.BOSS ] ] ], - [ Species.ALOLA_EXEGGUTOR, PokemonType.GRASS, PokemonType.DRAGON, [ - [ Biome.ISLAND, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.ISLAND, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.ALOLA_EXEGGUTOR, PokemonType.GRASS, PokemonType.DRAGON, [ + [ BiomeId.ISLAND, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.ISLAND, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.ALOLA_MAROWAK, PokemonType.FIRE, PokemonType.GHOST, [ - [ Biome.ISLAND, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.ISLAND, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.ALOLA_MAROWAK, PokemonType.FIRE, PokemonType.GHOST, [ + [ BiomeId.ISLAND, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.ISLAND, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.ETERNAL_FLOETTE, PokemonType.FAIRY, -1, [ - [ Biome.FAIRY_CAVE, BiomePoolTier.RARE ], - [ Biome.FAIRY_CAVE, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.ETERNAL_FLOETTE, PokemonType.FAIRY, -1, [ + [ BiomeId.FAIRY_CAVE, BiomePoolTier.RARE ], + [ BiomeId.FAIRY_CAVE, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.GALAR_MEOWTH, PokemonType.STEEL, -1, [ - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.RARE, TimeOfDay.DUSK ] + [ SpeciesId.GALAR_MEOWTH, PokemonType.STEEL, -1, [ + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.RARE, TimeOfDay.DUSK ] ] ], - [ Species.GALAR_PONYTA, PokemonType.PSYCHIC, -1, [ - [ Biome.JUNGLE, BiomePoolTier.RARE, TimeOfDay.DAWN ] + [ SpeciesId.GALAR_PONYTA, PokemonType.PSYCHIC, -1, [ + [ BiomeId.JUNGLE, BiomePoolTier.RARE, TimeOfDay.DAWN ] ] ], - [ Species.GALAR_RAPIDASH, PokemonType.PSYCHIC, PokemonType.FAIRY, [ - [ Biome.JUNGLE, BiomePoolTier.RARE, TimeOfDay.DAWN ], - [ Biome.JUNGLE, BiomePoolTier.BOSS_RARE, TimeOfDay.DAWN ] + [ SpeciesId.GALAR_RAPIDASH, PokemonType.PSYCHIC, PokemonType.FAIRY, [ + [ BiomeId.JUNGLE, BiomePoolTier.RARE, TimeOfDay.DAWN ], + [ BiomeId.JUNGLE, BiomePoolTier.BOSS_RARE, TimeOfDay.DAWN ] ] ], - [ Species.GALAR_SLOWPOKE, PokemonType.PSYCHIC, -1, [ - [ Biome.SWAMP, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.GALAR_SLOWPOKE, PokemonType.PSYCHIC, -1, [ + [ BiomeId.SWAMP, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.GALAR_SLOWBRO, PokemonType.POISON, PokemonType.PSYCHIC, [ - [ Biome.SWAMP, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.SWAMP, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.GALAR_SLOWBRO, PokemonType.POISON, PokemonType.PSYCHIC, [ + [ BiomeId.SWAMP, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.SWAMP, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.GALAR_FARFETCHD, PokemonType.FIGHTING, -1, [ - [ Biome.DOJO, BiomePoolTier.SUPER_RARE ] + [ SpeciesId.GALAR_FARFETCHD, PokemonType.FIGHTING, -1, [ + [ BiomeId.DOJO, BiomePoolTier.SUPER_RARE ] ] ], - [ Species.GALAR_WEEZING, PokemonType.POISON, PokemonType.FAIRY, [ - [ Biome.SLUM, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.GALAR_WEEZING, PokemonType.POISON, PokemonType.FAIRY, [ + [ BiomeId.SLUM, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.GALAR_MR_MIME, PokemonType.ICE, PokemonType.PSYCHIC, [ - [ Biome.SNOWY_FOREST, BiomePoolTier.SUPER_RARE ] + [ SpeciesId.GALAR_MR_MIME, PokemonType.ICE, PokemonType.PSYCHIC, [ + [ BiomeId.SNOWY_FOREST, BiomePoolTier.SUPER_RARE ] ] ], - [ Species.GALAR_ARTICUNO, PokemonType.PSYCHIC, PokemonType.FLYING, [ - [ Biome.SNOWY_FOREST, BiomePoolTier.ULTRA_RARE ], - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_ULTRA_RARE ] + [ SpeciesId.GALAR_ARTICUNO, PokemonType.PSYCHIC, PokemonType.FLYING, [ + [ BiomeId.SNOWY_FOREST, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.BOSS_ULTRA_RARE ] ] ], - [ Species.GALAR_ZAPDOS, PokemonType.FIGHTING, PokemonType.FLYING, [ - [ Biome.DOJO, BiomePoolTier.ULTRA_RARE ], - [ Biome.DOJO, BiomePoolTier.BOSS_ULTRA_RARE ] + [ SpeciesId.GALAR_ZAPDOS, PokemonType.FIGHTING, PokemonType.FLYING, [ + [ BiomeId.DOJO, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.DOJO, BiomePoolTier.BOSS_ULTRA_RARE ] ] ], - [ Species.GALAR_MOLTRES, PokemonType.DARK, PokemonType.FLYING, [ - [ Biome.ABYSS, BiomePoolTier.ULTRA_RARE ], - [ Biome.ABYSS, BiomePoolTier.BOSS_ULTRA_RARE ] + [ SpeciesId.GALAR_MOLTRES, PokemonType.DARK, PokemonType.FLYING, [ + [ BiomeId.ABYSS, BiomePoolTier.ULTRA_RARE ], + [ BiomeId.ABYSS, BiomePoolTier.BOSS_ULTRA_RARE ] ] ], - [ Species.GALAR_SLOWKING, PokemonType.POISON, PokemonType.PSYCHIC, [ - [ Biome.SWAMP, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.GALAR_SLOWKING, PokemonType.POISON, PokemonType.PSYCHIC, [ + [ BiomeId.SWAMP, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.GALAR_CORSOLA, PokemonType.GHOST, -1, [ - [ Biome.SEABED, BiomePoolTier.SUPER_RARE ] + [ SpeciesId.GALAR_CORSOLA, PokemonType.GHOST, -1, [ + [ BiomeId.SEABED, BiomePoolTier.SUPER_RARE ] ] ], - [ Species.GALAR_ZIGZAGOON, PokemonType.DARK, PokemonType.NORMAL, [ - [ Biome.SLUM, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.GALAR_ZIGZAGOON, PokemonType.DARK, PokemonType.NORMAL, [ + [ BiomeId.SLUM, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.GALAR_LINOONE, PokemonType.DARK, PokemonType.NORMAL, [ - [ Biome.SLUM, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.GALAR_LINOONE, PokemonType.DARK, PokemonType.NORMAL, [ + [ BiomeId.SLUM, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.GALAR_DARUMAKA, PokemonType.ICE, -1, [ - [ Biome.SNOWY_FOREST, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.GALAR_DARUMAKA, PokemonType.ICE, -1, [ + [ BiomeId.SNOWY_FOREST, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.GALAR_DARMANITAN, PokemonType.ICE, -1, [ - [ Biome.SNOWY_FOREST, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.GALAR_DARMANITAN, PokemonType.ICE, -1, [ + [ BiomeId.SNOWY_FOREST, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.GALAR_YAMASK, PokemonType.GROUND, PokemonType.GHOST, [ - [ Biome.RUINS, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.GALAR_YAMASK, PokemonType.GROUND, PokemonType.GHOST, [ + [ BiomeId.RUINS, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.GALAR_STUNFISK, PokemonType.GROUND, PokemonType.STEEL, [ - [ Biome.SWAMP, BiomePoolTier.SUPER_RARE ], - [ Biome.SWAMP, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.GALAR_STUNFISK, PokemonType.GROUND, PokemonType.STEEL, [ + [ BiomeId.SWAMP, BiomePoolTier.SUPER_RARE ], + [ BiomeId.SWAMP, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.HISUI_GROWLITHE, PokemonType.FIRE, PokemonType.ROCK, [ - [ Biome.VOLCANO, BiomePoolTier.SUPER_RARE ] + [ SpeciesId.HISUI_GROWLITHE, PokemonType.FIRE, PokemonType.ROCK, [ + [ BiomeId.VOLCANO, BiomePoolTier.SUPER_RARE ] ] ], - [ Species.HISUI_ARCANINE, PokemonType.FIRE, PokemonType.ROCK, [ - [ Biome.VOLCANO, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.HISUI_ARCANINE, PokemonType.FIRE, PokemonType.ROCK, [ + [ BiomeId.VOLCANO, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.HISUI_VOLTORB, PokemonType.ELECTRIC, PokemonType.GRASS, [ - [ Biome.POWER_PLANT, BiomePoolTier.SUPER_RARE ] + [ SpeciesId.HISUI_VOLTORB, PokemonType.ELECTRIC, PokemonType.GRASS, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.SUPER_RARE ] ] ], - [ Species.HISUI_ELECTRODE, PokemonType.ELECTRIC, PokemonType.GRASS, [ - [ Biome.POWER_PLANT, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.HISUI_ELECTRODE, PokemonType.ELECTRIC, PokemonType.GRASS, [ + [ BiomeId.POWER_PLANT, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.HISUI_TYPHLOSION, PokemonType.FIRE, PokemonType.GHOST, [ - [ Biome.GRAVEYARD, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.HISUI_TYPHLOSION, PokemonType.FIRE, PokemonType.GHOST, [ + [ BiomeId.GRAVEYARD, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.HISUI_QWILFISH, PokemonType.DARK, PokemonType.POISON, [ - [ Biome.SEABED, BiomePoolTier.SUPER_RARE ] + [ SpeciesId.HISUI_QWILFISH, PokemonType.DARK, PokemonType.POISON, [ + [ BiomeId.SEABED, BiomePoolTier.SUPER_RARE ] ] ], - [ Species.HISUI_SNEASEL, PokemonType.FIGHTING, PokemonType.POISON, [ - [ Biome.SNOWY_FOREST, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.HISUI_SNEASEL, PokemonType.FIGHTING, PokemonType.POISON, [ + [ BiomeId.SNOWY_FOREST, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.HISUI_SAMUROTT, PokemonType.WATER, PokemonType.DARK, [ - [ Biome.ABYSS, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.HISUI_SAMUROTT, PokemonType.WATER, PokemonType.DARK, [ + [ BiomeId.ABYSS, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.HISUI_LILLIGANT, PokemonType.GRASS, PokemonType.FIGHTING, [ - [ Biome.MEADOW, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.HISUI_LILLIGANT, PokemonType.GRASS, PokemonType.FIGHTING, [ + [ BiomeId.MEADOW, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.HISUI_ZORUA, PokemonType.NORMAL, PokemonType.GHOST, [ - [ Biome.SNOWY_FOREST, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.HISUI_ZORUA, PokemonType.NORMAL, PokemonType.GHOST, [ + [ BiomeId.SNOWY_FOREST, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.HISUI_ZOROARK, PokemonType.NORMAL, PokemonType.GHOST, [ - [ Biome.SNOWY_FOREST, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.HISUI_ZOROARK, PokemonType.NORMAL, PokemonType.GHOST, [ + [ BiomeId.SNOWY_FOREST, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.HISUI_BRAVIARY, PokemonType.PSYCHIC, PokemonType.FLYING, [ - [ Biome.MOUNTAIN, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.HISUI_BRAVIARY, PokemonType.PSYCHIC, PokemonType.FLYING, [ + [ BiomeId.MOUNTAIN, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.HISUI_SLIGGOO, PokemonType.STEEL, PokemonType.DRAGON, [ - [ Biome.SWAMP, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.HISUI_SLIGGOO, PokemonType.STEEL, PokemonType.DRAGON, [ + [ BiomeId.SWAMP, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.HISUI_GOODRA, PokemonType.STEEL, PokemonType.DRAGON, [ - [ Biome.SWAMP, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.SWAMP, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.HISUI_GOODRA, PokemonType.STEEL, PokemonType.DRAGON, [ + [ BiomeId.SWAMP, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.SWAMP, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.HISUI_AVALUGG, PokemonType.ICE, PokemonType.ROCK, [ - [ Biome.SNOWY_FOREST, BiomePoolTier.SUPER_RARE ] + [ SpeciesId.HISUI_AVALUGG, PokemonType.ICE, PokemonType.ROCK, [ + [ BiomeId.SNOWY_FOREST, BiomePoolTier.SUPER_RARE ] ] ], - [ Species.HISUI_DECIDUEYE, PokemonType.GRASS, PokemonType.FIGHTING, [ - [ Biome.DOJO, BiomePoolTier.BOSS_RARE ] + [ SpeciesId.HISUI_DECIDUEYE, PokemonType.GRASS, PokemonType.FIGHTING, [ + [ BiomeId.DOJO, BiomePoolTier.BOSS_RARE ] ] ], - [ Species.PALDEA_TAUROS, PokemonType.FIGHTING, -1, [ - [ Biome.PLAINS, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], - [ Biome.PLAINS, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] + [ SpeciesId.PALDEA_TAUROS, PokemonType.FIGHTING, -1, [ + [ BiomeId.PLAINS, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ BiomeId.PLAINS, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], - [ Species.PALDEA_WOOPER, PokemonType.POISON, PokemonType.GROUND, [ - [ Biome.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] + [ SpeciesId.PALDEA_WOOPER, PokemonType.POISON, PokemonType.GROUND, [ + [ BiomeId.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], - [ Species.BLOODMOON_URSALUNA, PokemonType.GROUND, PokemonType.NORMAL, [ - [ Biome.FOREST, BiomePoolTier.SUPER_RARE, TimeOfDay.NIGHT ], - [ Biome.FOREST, BiomePoolTier.BOSS_RARE, TimeOfDay.NIGHT ] + [ SpeciesId.BLOODMOON_URSALUNA, PokemonType.GROUND, PokemonType.NORMAL, [ + [ BiomeId.FOREST, BiomePoolTier.SUPER_RARE, TimeOfDay.NIGHT ], + [ BiomeId.FOREST, BiomePoolTier.BOSS_RARE, TimeOfDay.NIGHT ] ] ] ]; const trainerBiomes = [ [ TrainerType.ACE_TRAINER, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON ], - [ Biome.GRASS, BiomePoolTier.UNCOMMON ], - [ Biome.TALL_GRASS, BiomePoolTier.UNCOMMON ], - [ Biome.SWAMP, BiomePoolTier.UNCOMMON ], - [ Biome.BEACH, BiomePoolTier.UNCOMMON ], - [ Biome.LAKE, BiomePoolTier.UNCOMMON ], - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON ], - [ Biome.BADLANDS, BiomePoolTier.UNCOMMON ], - [ Biome.CAVE, BiomePoolTier.UNCOMMON ], - [ Biome.MEADOW, BiomePoolTier.UNCOMMON ], - [ Biome.RUINS, BiomePoolTier.UNCOMMON ], - [ Biome.ABYSS, BiomePoolTier.UNCOMMON ], - [ Biome.FAIRY_CAVE, BiomePoolTier.UNCOMMON ], - [ Biome.TEMPLE, BiomePoolTier.UNCOMMON ] + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON ], + [ BiomeId.GRASS, BiomePoolTier.UNCOMMON ], + [ BiomeId.TALL_GRASS, BiomePoolTier.UNCOMMON ], + [ BiomeId.SWAMP, BiomePoolTier.UNCOMMON ], + [ BiomeId.BEACH, BiomePoolTier.UNCOMMON ], + [ BiomeId.LAKE, BiomePoolTier.UNCOMMON ], + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON ], + [ BiomeId.BADLANDS, BiomePoolTier.UNCOMMON ], + [ BiomeId.CAVE, BiomePoolTier.UNCOMMON ], + [ BiomeId.MEADOW, BiomePoolTier.UNCOMMON ], + [ BiomeId.RUINS, BiomePoolTier.UNCOMMON ], + [ BiomeId.ABYSS, BiomePoolTier.UNCOMMON ], + [ BiomeId.FAIRY_CAVE, BiomePoolTier.UNCOMMON ], + [ BiomeId.TEMPLE, BiomePoolTier.UNCOMMON ] ] ], [ TrainerType.ARTIST, [ - [ Biome.METROPOLIS, BiomePoolTier.RARE ] + [ BiomeId.METROPOLIS, BiomePoolTier.RARE ] ] ], [ TrainerType.BACKERS, []], [ TrainerType.BACKPACKER, [ - [ Biome.MOUNTAIN, BiomePoolTier.COMMON ], - [ Biome.CAVE, BiomePoolTier.COMMON ], - [ Biome.BADLANDS, BiomePoolTier.COMMON ], - [ Biome.JUNGLE, BiomePoolTier.COMMON ], - [ Biome.DESERT, BiomePoolTier.COMMON ] + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON ], + [ BiomeId.CAVE, BiomePoolTier.COMMON ], + [ BiomeId.BADLANDS, BiomePoolTier.COMMON ], + [ BiomeId.JUNGLE, BiomePoolTier.COMMON ], + [ BiomeId.DESERT, BiomePoolTier.COMMON ] ] ], [ TrainerType.BAKER, [ - [ Biome.SLUM, BiomePoolTier.UNCOMMON ], - [ Biome.MEADOW, BiomePoolTier.UNCOMMON ] + [ BiomeId.SLUM, BiomePoolTier.UNCOMMON ], + [ BiomeId.MEADOW, BiomePoolTier.UNCOMMON ] ] ], [ TrainerType.BEAUTY, [ - [ Biome.METROPOLIS, BiomePoolTier.COMMON ], - [ Biome.MEADOW, BiomePoolTier.COMMON ], - [ Biome.FAIRY_CAVE, BiomePoolTier.COMMON ] + [ BiomeId.METROPOLIS, BiomePoolTier.COMMON ], + [ BiomeId.MEADOW, BiomePoolTier.COMMON ], + [ BiomeId.FAIRY_CAVE, BiomePoolTier.COMMON ] ] ], [ TrainerType.BIKER, [ - [ Biome.SLUM, BiomePoolTier.COMMON ] + [ BiomeId.SLUM, BiomePoolTier.COMMON ] ] ], [ TrainerType.BLACK_BELT, [ - [ Biome.DOJO, BiomePoolTier.COMMON ], - [ Biome.PLAINS, BiomePoolTier.RARE ], - [ Biome.GRASS, BiomePoolTier.RARE ], - [ Biome.SWAMP, BiomePoolTier.RARE ], - [ Biome.BEACH, BiomePoolTier.RARE ], - [ Biome.LAKE, BiomePoolTier.RARE ], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON ], - [ Biome.CAVE, BiomePoolTier.UNCOMMON ], - [ Biome.RUINS, BiomePoolTier.UNCOMMON ] + [ BiomeId.DOJO, BiomePoolTier.COMMON ], + [ BiomeId.PLAINS, BiomePoolTier.RARE ], + [ BiomeId.GRASS, BiomePoolTier.RARE ], + [ BiomeId.SWAMP, BiomePoolTier.RARE ], + [ BiomeId.BEACH, BiomePoolTier.RARE ], + [ BiomeId.LAKE, BiomePoolTier.RARE ], + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON ], + [ BiomeId.CAVE, BiomePoolTier.UNCOMMON ], + [ BiomeId.RUINS, BiomePoolTier.UNCOMMON ] ] ], [ TrainerType.BREEDER, [ - [ Biome.PLAINS, BiomePoolTier.COMMON ], - [ Biome.GRASS, BiomePoolTier.COMMON ], - [ Biome.TALL_GRASS, BiomePoolTier.UNCOMMON ], - [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON ], - [ Biome.BEACH, BiomePoolTier.UNCOMMON ], - [ Biome.LAKE, BiomePoolTier.COMMON ], - [ Biome.MEADOW, BiomePoolTier.UNCOMMON ], - [ Biome.FAIRY_CAVE, BiomePoolTier.UNCOMMON ] + [ BiomeId.PLAINS, BiomePoolTier.COMMON ], + [ BiomeId.GRASS, BiomePoolTier.COMMON ], + [ BiomeId.TALL_GRASS, BiomePoolTier.UNCOMMON ], + [ BiomeId.METROPOLIS, BiomePoolTier.UNCOMMON ], + [ BiomeId.BEACH, BiomePoolTier.UNCOMMON ], + [ BiomeId.LAKE, BiomePoolTier.COMMON ], + [ BiomeId.MEADOW, BiomePoolTier.UNCOMMON ], + [ BiomeId.FAIRY_CAVE, BiomePoolTier.UNCOMMON ] ] ], [ TrainerType.CLERK, [ - [ Biome.METROPOLIS, BiomePoolTier.COMMON ] + [ BiomeId.METROPOLIS, BiomePoolTier.COMMON ] ] ], [ TrainerType.CYCLIST, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON ], - [ Biome.METROPOLIS, BiomePoolTier.COMMON ] + [ BiomeId.PLAINS, BiomePoolTier.UNCOMMON ], + [ BiomeId.METROPOLIS, BiomePoolTier.COMMON ] ] ], [ TrainerType.DANCER, []], [ TrainerType.DEPOT_AGENT, [ - [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON ] + [ BiomeId.METROPOLIS, BiomePoolTier.UNCOMMON ] ] ], [ TrainerType.DOCTOR, []], [ TrainerType.FIREBREATHER, [ - [ Biome.VOLCANO, BiomePoolTier.COMMON ] + [ BiomeId.VOLCANO, BiomePoolTier.COMMON ] ] ], [ TrainerType.FISHERMAN, [ - [ Biome.LAKE, BiomePoolTier.COMMON ], - [ Biome.BEACH, BiomePoolTier.COMMON ] + [ BiomeId.LAKE, BiomePoolTier.COMMON ], + [ BiomeId.BEACH, BiomePoolTier.COMMON ] ] ], [ TrainerType.GUITARIST, [ - [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON ], - [ Biome.POWER_PLANT, BiomePoolTier.COMMON ] + [ BiomeId.METROPOLIS, BiomePoolTier.UNCOMMON ], + [ BiomeId.POWER_PLANT, BiomePoolTier.COMMON ] ] ], [ TrainerType.HARLEQUIN, []], [ TrainerType.HIKER, [ - [ Biome.MOUNTAIN, BiomePoolTier.COMMON ], - [ Biome.CAVE, BiomePoolTier.COMMON ], - [ Biome.BADLANDS, BiomePoolTier.COMMON ] + [ BiomeId.MOUNTAIN, BiomePoolTier.COMMON ], + [ BiomeId.CAVE, BiomePoolTier.COMMON ], + [ BiomeId.BADLANDS, BiomePoolTier.COMMON ] ] ], [ TrainerType.HOOLIGANS, [ - [ Biome.SLUM, BiomePoolTier.UNCOMMON ] + [ BiomeId.SLUM, BiomePoolTier.UNCOMMON ] ] ], [ TrainerType.HOOPSTER, []], @@ -7253,402 +7253,402 @@ export function initBiomes() { [ TrainerType.LINEBACKER, []], [ TrainerType.MAID, []], [ TrainerType.MUSICIAN, [ - [ Biome.MEADOW, BiomePoolTier.COMMON ] + [ BiomeId.MEADOW, BiomePoolTier.COMMON ] ] ], [ TrainerType.HEX_MANIAC, [ - [ Biome.RUINS, BiomePoolTier.UNCOMMON ], - [ Biome.GRAVEYARD, BiomePoolTier.UNCOMMON ] + [ BiomeId.RUINS, BiomePoolTier.UNCOMMON ], + [ BiomeId.GRAVEYARD, BiomePoolTier.UNCOMMON ] ] ], [ TrainerType.NURSERY_AIDE, []], [ TrainerType.OFFICER, [ - [ Biome.METROPOLIS, BiomePoolTier.COMMON ], - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.COMMON ], - [ Biome.SLUM, BiomePoolTier.COMMON ] + [ BiomeId.METROPOLIS, BiomePoolTier.COMMON ], + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.COMMON ], + [ BiomeId.SLUM, BiomePoolTier.COMMON ] ] ], [ TrainerType.PARASOL_LADY, [ - [ Biome.SWAMP, BiomePoolTier.COMMON ], - [ Biome.LAKE, BiomePoolTier.COMMON ], - [ Biome.MEADOW, BiomePoolTier.COMMON ] + [ BiomeId.SWAMP, BiomePoolTier.COMMON ], + [ BiomeId.LAKE, BiomePoolTier.COMMON ], + [ BiomeId.MEADOW, BiomePoolTier.COMMON ] ] ], [ TrainerType.PILOT, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON ] + [ BiomeId.MOUNTAIN, BiomePoolTier.UNCOMMON ] ] ], [ TrainerType.POKEFAN, [ - [ Biome.GRASS, BiomePoolTier.UNCOMMON ], - [ Biome.MEADOW, BiomePoolTier.UNCOMMON ] + [ BiomeId.GRASS, BiomePoolTier.UNCOMMON ], + [ BiomeId.MEADOW, BiomePoolTier.UNCOMMON ] ] ], [ TrainerType.PRESCHOOLER, []], [ TrainerType.PSYCHIC, [ - [ Biome.GRAVEYARD, BiomePoolTier.COMMON ], - [ Biome.RUINS, BiomePoolTier.COMMON ] + [ BiomeId.GRAVEYARD, BiomePoolTier.COMMON ], + [ BiomeId.RUINS, BiomePoolTier.COMMON ] ] ], [ TrainerType.RANGER, [ - [ Biome.TALL_GRASS, BiomePoolTier.UNCOMMON ], - [ Biome.FOREST, BiomePoolTier.COMMON ], - [ Biome.JUNGLE, BiomePoolTier.COMMON ] + [ BiomeId.TALL_GRASS, BiomePoolTier.UNCOMMON ], + [ BiomeId.FOREST, BiomePoolTier.COMMON ], + [ BiomeId.JUNGLE, BiomePoolTier.COMMON ] ] ], [ TrainerType.RICH, [ - [ Biome.ISLAND, BiomePoolTier.UNCOMMON ] + [ BiomeId.ISLAND, BiomePoolTier.UNCOMMON ] ] ], [ TrainerType.RICH_KID, [ - [ Biome.METROPOLIS, BiomePoolTier.RARE ], - [ Biome.ISLAND, BiomePoolTier.COMMON ] + [ BiomeId.METROPOLIS, BiomePoolTier.RARE ], + [ BiomeId.ISLAND, BiomePoolTier.COMMON ] ] ], [ TrainerType.ROUGHNECK, [ - [ Biome.SLUM, BiomePoolTier.COMMON ] + [ BiomeId.SLUM, BiomePoolTier.COMMON ] ] ], [ TrainerType.SAILOR, [ - [ Biome.SEA, BiomePoolTier.COMMON ], - [ Biome.BEACH, BiomePoolTier.COMMON ] + [ BiomeId.SEA, BiomePoolTier.COMMON ], + [ BiomeId.BEACH, BiomePoolTier.COMMON ] ] ], [ TrainerType.SCIENTIST, [ - [ Biome.DESERT, BiomePoolTier.COMMON ], - [ Biome.RUINS, BiomePoolTier.COMMON ] + [ BiomeId.DESERT, BiomePoolTier.COMMON ], + [ BiomeId.RUINS, BiomePoolTier.COMMON ] ] ], [ TrainerType.SMASHER, []], [ TrainerType.SNOW_WORKER, [ - [ Biome.ICE_CAVE, BiomePoolTier.COMMON ], - [ Biome.SNOWY_FOREST, BiomePoolTier.COMMON ] + [ BiomeId.ICE_CAVE, BiomePoolTier.COMMON ], + [ BiomeId.SNOWY_FOREST, BiomePoolTier.COMMON ] ] ], [ TrainerType.STRIKER, []], [ TrainerType.SCHOOL_KID, [ - [ Biome.GRASS, BiomePoolTier.COMMON ] + [ BiomeId.GRASS, BiomePoolTier.COMMON ] ] ], [ TrainerType.SWIMMER, [ - [ Biome.SEA, BiomePoolTier.COMMON ] + [ BiomeId.SEA, BiomePoolTier.COMMON ] ] ], [ TrainerType.TWINS, [ - [ Biome.PLAINS, BiomePoolTier.COMMON ] + [ BiomeId.PLAINS, BiomePoolTier.COMMON ] ] ], [ TrainerType.VETERAN, [ - [ Biome.WASTELAND, BiomePoolTier.COMMON ] + [ BiomeId.WASTELAND, BiomePoolTier.COMMON ] ] ], [ TrainerType.WAITER, [ - [ Biome.METROPOLIS, BiomePoolTier.COMMON ] + [ BiomeId.METROPOLIS, BiomePoolTier.COMMON ] ] ], [ TrainerType.WORKER, [ - [ Biome.POWER_PLANT, BiomePoolTier.COMMON ], - [ Biome.FACTORY, BiomePoolTier.COMMON ], - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.COMMON ] + [ BiomeId.POWER_PLANT, BiomePoolTier.COMMON ], + [ BiomeId.FACTORY, BiomePoolTier.COMMON ], + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.COMMON ] ] ], [ TrainerType.YOUNGSTER, [ - [ Biome.TOWN, BiomePoolTier.COMMON ] + [ BiomeId.TOWN, BiomePoolTier.COMMON ] ] ], [ TrainerType.BROCK, [ - [ Biome.CAVE, BiomePoolTier.BOSS ] + [ BiomeId.CAVE, BiomePoolTier.BOSS ] ] ], [ TrainerType.MISTY, [ - [ Biome.BEACH, BiomePoolTier.BOSS ] + [ BiomeId.BEACH, BiomePoolTier.BOSS ] ] ], [ TrainerType.LT_SURGE, [ - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.BOSS ] + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.BOSS ] ] ], [ TrainerType.ERIKA, [ - [ Biome.GRASS, BiomePoolTier.BOSS ] + [ BiomeId.GRASS, BiomePoolTier.BOSS ] ] ], [ TrainerType.JANINE, [ - [ Biome.SWAMP, BiomePoolTier.BOSS ] + [ BiomeId.SWAMP, BiomePoolTier.BOSS ] ] ], [ TrainerType.SABRINA, [ - [ Biome.RUINS, BiomePoolTier.BOSS ] + [ BiomeId.RUINS, BiomePoolTier.BOSS ] ] ], [ TrainerType.GIOVANNI, [ - [ Biome.LABORATORY, BiomePoolTier.BOSS ] + [ BiomeId.LABORATORY, BiomePoolTier.BOSS ] ] ], [ TrainerType.BLAINE, [ - [ Biome.VOLCANO, BiomePoolTier.BOSS ] + [ BiomeId.VOLCANO, BiomePoolTier.BOSS ] ] ], [ TrainerType.FALKNER, [ - [ Biome.MOUNTAIN, BiomePoolTier.BOSS ] + [ BiomeId.MOUNTAIN, BiomePoolTier.BOSS ] ] ], [ TrainerType.BUGSY, [ - [ Biome.FOREST, BiomePoolTier.BOSS ] + [ BiomeId.FOREST, BiomePoolTier.BOSS ] ] ], [ TrainerType.WHITNEY, [ - [ Biome.METROPOLIS, BiomePoolTier.BOSS ] + [ BiomeId.METROPOLIS, BiomePoolTier.BOSS ] ] ], [ TrainerType.MORTY, [ - [ Biome.GRAVEYARD, BiomePoolTier.BOSS ] + [ BiomeId.GRAVEYARD, BiomePoolTier.BOSS ] ] ], [ TrainerType.CHUCK, [ - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.BOSS ] + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.BOSS ] ] ], [ TrainerType.JASMINE, [ - [ Biome.FACTORY, BiomePoolTier.BOSS ] + [ BiomeId.FACTORY, BiomePoolTier.BOSS ] ] ], [ TrainerType.PRYCE, [ - [ Biome.ICE_CAVE, BiomePoolTier.BOSS ] + [ BiomeId.ICE_CAVE, BiomePoolTier.BOSS ] ] ], [ TrainerType.CLAIR, [ - [ Biome.WASTELAND, BiomePoolTier.BOSS ] + [ BiomeId.WASTELAND, BiomePoolTier.BOSS ] ] ], [ TrainerType.ROXANNE, [ - [ Biome.CAVE, BiomePoolTier.BOSS ] + [ BiomeId.CAVE, BiomePoolTier.BOSS ] ] ], [ TrainerType.BRAWLY, [ - [ Biome.DOJO, BiomePoolTier.BOSS ] + [ BiomeId.DOJO, BiomePoolTier.BOSS ] ] ], [ TrainerType.WATTSON, [ - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.BOSS ] + [ BiomeId.CONSTRUCTION_SITE, BiomePoolTier.BOSS ] ] ], [ TrainerType.FLANNERY, [ - [ Biome.VOLCANO, BiomePoolTier.BOSS ] + [ BiomeId.VOLCANO, BiomePoolTier.BOSS ] ] ], [ TrainerType.NORMAN, [ - [ Biome.METROPOLIS, BiomePoolTier.BOSS ] + [ BiomeId.METROPOLIS, BiomePoolTier.BOSS ] ] ], [ TrainerType.WINONA, [ - [ Biome.MOUNTAIN, BiomePoolTier.BOSS ] + [ BiomeId.MOUNTAIN, BiomePoolTier.BOSS ] ] ], [ TrainerType.TATE, [ - [ Biome.RUINS, BiomePoolTier.BOSS ] + [ BiomeId.RUINS, BiomePoolTier.BOSS ] ] ], [ TrainerType.LIZA, [ - [ Biome.RUINS, BiomePoolTier.BOSS ] + [ BiomeId.RUINS, BiomePoolTier.BOSS ] ] ], [ TrainerType.JUAN, [ - [ Biome.SEABED, BiomePoolTier.BOSS ] + [ BiomeId.SEABED, BiomePoolTier.BOSS ] ] ], [ TrainerType.ROARK, [ - [ Biome.CAVE, BiomePoolTier.BOSS ] + [ BiomeId.CAVE, BiomePoolTier.BOSS ] ] ], [ TrainerType.GARDENIA, [ - [ Biome.TALL_GRASS, BiomePoolTier.BOSS ] + [ BiomeId.TALL_GRASS, BiomePoolTier.BOSS ] ] ], [ TrainerType.CRASHER_WAKE, [ - [ Biome.LAKE, BiomePoolTier.BOSS ] + [ BiomeId.LAKE, BiomePoolTier.BOSS ] ] ], [ TrainerType.MAYLENE, [ - [ Biome.DOJO, BiomePoolTier.BOSS ] + [ BiomeId.DOJO, BiomePoolTier.BOSS ] ] ], [ TrainerType.FANTINA, [ - [ Biome.TEMPLE, BiomePoolTier.BOSS ] + [ BiomeId.TEMPLE, BiomePoolTier.BOSS ] ] ], [ TrainerType.BYRON, [ - [ Biome.FACTORY, BiomePoolTier.BOSS ] + [ BiomeId.FACTORY, BiomePoolTier.BOSS ] ] ], [ TrainerType.CANDICE, [ - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS ] + [ BiomeId.SNOWY_FOREST, BiomePoolTier.BOSS ] ] ], [ TrainerType.VOLKNER, [ - [ Biome.POWER_PLANT, BiomePoolTier.BOSS ] + [ BiomeId.POWER_PLANT, BiomePoolTier.BOSS ] ] ], [ TrainerType.CILAN, [ - [ Biome.PLAINS, BiomePoolTier.BOSS ] + [ BiomeId.PLAINS, BiomePoolTier.BOSS ] ] ], [ TrainerType.CHILI, [ - [ Biome.PLAINS, BiomePoolTier.BOSS ] + [ BiomeId.PLAINS, BiomePoolTier.BOSS ] ] ], [ TrainerType.CRESS, [ - [ Biome.PLAINS, BiomePoolTier.BOSS ] + [ BiomeId.PLAINS, BiomePoolTier.BOSS ] ] ], [ TrainerType.CHEREN, [ - [ Biome.PLAINS, BiomePoolTier.BOSS ] + [ BiomeId.PLAINS, BiomePoolTier.BOSS ] ] ], [ TrainerType.LENORA, [ - [ Biome.MEADOW, BiomePoolTier.BOSS ] + [ BiomeId.MEADOW, BiomePoolTier.BOSS ] ] ], [ TrainerType.ROXIE, [ - [ Biome.SWAMP, BiomePoolTier.BOSS ] + [ BiomeId.SWAMP, BiomePoolTier.BOSS ] ] ], [ TrainerType.BURGH, [ - [ Biome.FOREST, BiomePoolTier.BOSS ] + [ BiomeId.FOREST, BiomePoolTier.BOSS ] ] ], [ TrainerType.ELESA, [ - [ Biome.POWER_PLANT, BiomePoolTier.BOSS ] + [ BiomeId.POWER_PLANT, BiomePoolTier.BOSS ] ] ], [ TrainerType.CLAY, [ - [ Biome.BADLANDS, BiomePoolTier.BOSS ] + [ BiomeId.BADLANDS, BiomePoolTier.BOSS ] ] ], [ TrainerType.SKYLA, [ - [ Biome.MOUNTAIN, BiomePoolTier.BOSS ] + [ BiomeId.MOUNTAIN, BiomePoolTier.BOSS ] ] ], [ TrainerType.BRYCEN, [ - [ Biome.ICE_CAVE, BiomePoolTier.BOSS ] + [ BiomeId.ICE_CAVE, BiomePoolTier.BOSS ] ] ], [ TrainerType.DRAYDEN, [ - [ Biome.WASTELAND, BiomePoolTier.BOSS ] + [ BiomeId.WASTELAND, BiomePoolTier.BOSS ] ] ], [ TrainerType.MARLON, [ - [ Biome.SEA, BiomePoolTier.BOSS ] + [ BiomeId.SEA, BiomePoolTier.BOSS ] ] ], [ TrainerType.VIOLA, [ - [ Biome.TALL_GRASS, BiomePoolTier.BOSS ] + [ BiomeId.TALL_GRASS, BiomePoolTier.BOSS ] ] ], [ TrainerType.GRANT, [ - [ Biome.BADLANDS, BiomePoolTier.BOSS ] + [ BiomeId.BADLANDS, BiomePoolTier.BOSS ] ] ], [ TrainerType.KORRINA, [ - [ Biome.DOJO, BiomePoolTier.BOSS ] + [ BiomeId.DOJO, BiomePoolTier.BOSS ] ] ], [ TrainerType.RAMOS, [ - [ Biome.JUNGLE, BiomePoolTier.BOSS ] + [ BiomeId.JUNGLE, BiomePoolTier.BOSS ] ] ], [ TrainerType.CLEMONT, [ - [ Biome.POWER_PLANT, BiomePoolTier.BOSS ] + [ BiomeId.POWER_PLANT, BiomePoolTier.BOSS ] ] ], [ TrainerType.VALERIE, [ - [ Biome.FAIRY_CAVE, BiomePoolTier.BOSS ] + [ BiomeId.FAIRY_CAVE, BiomePoolTier.BOSS ] ] ], [ TrainerType.OLYMPIA, [ - [ Biome.SPACE, BiomePoolTier.BOSS ] + [ BiomeId.SPACE, BiomePoolTier.BOSS ] ] ], [ TrainerType.WULFRIC, [ - [ Biome.ICE_CAVE, BiomePoolTier.BOSS ] + [ BiomeId.ICE_CAVE, BiomePoolTier.BOSS ] ] ], [ TrainerType.MILO, [ - [ Biome.MEADOW, BiomePoolTier.BOSS ] + [ BiomeId.MEADOW, BiomePoolTier.BOSS ] ] ], [ TrainerType.NESSA, [ - [ Biome.ISLAND, BiomePoolTier.BOSS ] + [ BiomeId.ISLAND, BiomePoolTier.BOSS ] ] ], [ TrainerType.KABU, [ - [ Biome.VOLCANO, BiomePoolTier.BOSS ] + [ BiomeId.VOLCANO, BiomePoolTier.BOSS ] ] ], [ TrainerType.BEA, [ - [ Biome.DOJO, BiomePoolTier.BOSS ] + [ BiomeId.DOJO, BiomePoolTier.BOSS ] ] ], [ TrainerType.ALLISTER, [ - [ Biome.GRAVEYARD, BiomePoolTier.BOSS ] + [ BiomeId.GRAVEYARD, BiomePoolTier.BOSS ] ] ], [ TrainerType.OPAL, [ - [ Biome.FAIRY_CAVE, BiomePoolTier.BOSS ] + [ BiomeId.FAIRY_CAVE, BiomePoolTier.BOSS ] ] ], [ TrainerType.BEDE, [ - [ Biome.FAIRY_CAVE, BiomePoolTier.BOSS ] + [ BiomeId.FAIRY_CAVE, BiomePoolTier.BOSS ] ] ], [ TrainerType.GORDIE, [ - [ Biome.DESERT, BiomePoolTier.BOSS ] + [ BiomeId.DESERT, BiomePoolTier.BOSS ] ] ], [ TrainerType.MELONY, [ - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS ] + [ BiomeId.SNOWY_FOREST, BiomePoolTier.BOSS ] ] ], [ TrainerType.PIERS, [ - [ Biome.SLUM, BiomePoolTier.BOSS ] + [ BiomeId.SLUM, BiomePoolTier.BOSS ] ] ], [ TrainerType.MARNIE, [ - [ Biome.ABYSS, BiomePoolTier.BOSS ] + [ BiomeId.ABYSS, BiomePoolTier.BOSS ] ] ], [ TrainerType.RAIHAN, [ - [ Biome.WASTELAND, BiomePoolTier.BOSS ] + [ BiomeId.WASTELAND, BiomePoolTier.BOSS ] ] ], [ TrainerType.KATY, [ - [ Biome.FOREST, BiomePoolTier.BOSS ] + [ BiomeId.FOREST, BiomePoolTier.BOSS ] ] ], [ TrainerType.BRASSIUS, [ - [ Biome.TALL_GRASS, BiomePoolTier.BOSS ] + [ BiomeId.TALL_GRASS, BiomePoolTier.BOSS ] ] ], [ TrainerType.IONO, [ - [ Biome.METROPOLIS, BiomePoolTier.BOSS ] + [ BiomeId.METROPOLIS, BiomePoolTier.BOSS ] ] ], [ TrainerType.KOFU, [ - [ Biome.BEACH, BiomePoolTier.BOSS ] + [ BiomeId.BEACH, BiomePoolTier.BOSS ] ] ], [ TrainerType.LARRY, [ - [ Biome.METROPOLIS, BiomePoolTier.BOSS ] + [ BiomeId.METROPOLIS, BiomePoolTier.BOSS ] ] ], [ TrainerType.RYME, [ - [ Biome.GRAVEYARD, BiomePoolTier.BOSS ] + [ BiomeId.GRAVEYARD, BiomePoolTier.BOSS ] ] ], [ TrainerType.TULIP, [ - [ Biome.RUINS, BiomePoolTier.BOSS ] + [ BiomeId.RUINS, BiomePoolTier.BOSS ] ] ], [ TrainerType.GRUSHA, [ - [ Biome.ICE_CAVE, BiomePoolTier.BOSS ] + [ BiomeId.ICE_CAVE, BiomePoolTier.BOSS ] ] ], [ TrainerType.LORELEI, []], @@ -7704,21 +7704,21 @@ export function initBiomes() { [ TrainerType.RIVAL, []] ]; - biomeDepths[Biome.TOWN] = [ 0, 1 ]; + biomeDepths[BiomeId.TOWN] = [ 0, 1 ]; - const traverseBiome = (biome: Biome, depth: number) => { - if (biome === Biome.END) { - const biomeList = Object.keys(Biome).filter(key => !Number.isNaN(Number(key))); - biomeList.pop(); // Removes Biome.END from the list - const randIndex = randSeedInt(biomeList.length, 1); // Will never be Biome.TOWN - biome = Biome[biomeList[randIndex]]; + const traverseBiome = (biome: BiomeId, depth: number) => { + if (biome === BiomeId.END) { + const biomeList = Object.keys(BiomeId).filter(key => !Number.isNaN(Number(key))); + biomeList.pop(); // Removes BiomeId.END from the list + const randIndex = randSeedInt(biomeList.length, 1); // Will never be BiomeId.TOWN + biome = BiomeId[biomeList[randIndex]]; } - const linkedBiomes: (Biome | [ Biome, number ])[] = Array.isArray(biomeLinks[biome]) - ? biomeLinks[biome] as (Biome | [ Biome, number ])[] - : [ biomeLinks[biome] as Biome ]; + const linkedBiomes: (BiomeId | [ BiomeId, number ])[] = Array.isArray(biomeLinks[biome]) + ? biomeLinks[biome] as (BiomeId | [ BiomeId, number ])[] + : [ biomeLinks[biome] as BiomeId ]; for (const linkedBiomeEntry of linkedBiomes) { const linkedBiome = !Array.isArray(linkedBiomeEntry) - ? linkedBiomeEntry as Biome + ? linkedBiomeEntry as BiomeId : linkedBiomeEntry[0]; const biomeChance = !Array.isArray(linkedBiomeEntry) ? 1 @@ -7730,10 +7730,10 @@ export function initBiomes() { } }; - traverseBiome(Biome.TOWN, 0); - biomeDepths[Biome.END] = [ Object.values(biomeDepths).map(d => d[0]).reduce((max: number, value: number) => Math.max(max, value), 0) + 1, 1 ]; + traverseBiome(BiomeId.TOWN, 0); + biomeDepths[BiomeId.END] = [ Object.values(biomeDepths).map(d => d[0]).reduce((max: number, value: number) => Math.max(max, value), 0) + 1, 1 ]; - for (const biome of getEnumValues(Biome)) { + for (const biome of getEnumValues(BiomeId)) { biomePokemonPools[biome] = {}; biomeTrainerPools[biome] = {}; @@ -7748,14 +7748,14 @@ export function initBiomes() { } for (const pb of pokemonBiomes) { - const speciesId = pb[0] as Species; - const biomeEntries = pb[3] as (Biome | BiomePoolTier)[][]; + const speciesId = pb[0] as SpeciesId; + const biomeEntries = pb[3] as (BiomeId | BiomePoolTier)[][]; const speciesEvolutions: SpeciesFormEvolution[] = pokemonEvolutions.hasOwnProperty(speciesId) ? pokemonEvolutions[speciesId] : []; - if (!biomeEntries.filter(b => b[0] !== Biome.END).length && !speciesEvolutions.filter(es => !!((pokemonBiomes.find(p => p[0] === es.speciesId)!)[3] as any[]).filter(b => b[0] !== Biome.END).length).length) { // TODO: is the bang on the `find()` correct? + if (!biomeEntries.filter(b => b[0] !== BiomeId.END).length && !speciesEvolutions.filter(es => !!((pokemonBiomes.find(p => p[0] === es.speciesId)!)[3] as any[]).filter(b => b[0] !== BiomeId.END).length).length) { // TODO: is the bang on the `find()` correct? uncatchableSpecies.push(speciesId); } @@ -7772,7 +7772,7 @@ export function initBiomes() { : [ TimeOfDay.ALL ]; catchableSpecies[speciesId].push({ - biome: biome as Biome, + biome: biome as BiomeId, tier: tier as BiomePoolTier, tod: timesOfDay as TimeOfDay[] }); @@ -7788,7 +7788,7 @@ export function initBiomes() { let arrayIndex = 0; for (let t = 0; t < biomeTierPool.length; t++) { - const existingSpeciesIds = biomeTierPool[t] as unknown as Species[]; + const existingSpeciesIds = biomeTierPool[t] as unknown as SpeciesId[]; for (let es = 0; es < existingSpeciesIds.length; es++) { const existingSpeciesId = existingSpeciesIds[es]; if (pokemonEvolutions.hasOwnProperty(existingSpeciesId) && (pokemonEvolutions[existingSpeciesId] as SpeciesFormEvolution[]).find(ese => ese.speciesId === speciesId)) { @@ -7808,9 +7808,9 @@ export function initBiomes() { } if (treeIndex > -1) { - (biomeTierPool[treeIndex] as unknown as Species[]).splice(arrayIndex, 0, speciesId); + (biomeTierPool[treeIndex] as unknown as SpeciesId[]).splice(arrayIndex, 0, speciesId); } else { - (biomeTierPool as unknown as Species[][]).push([ speciesId ]); + (biomeTierPool as unknown as SpeciesId[][]).push([ speciesId ]); } } } @@ -7913,12 +7913,12 @@ export function initBiomes() { // } // } - // console.log(beautify(pokemonOutput, null, 2, 180).replace(/( | (?:\{ "\d+": \[ )?| "(?:.*?)": \[ |(?:,|\[) (?:"\w+": \[ |(?:\{ )?"\d+": \[ )?)"(\w+)"(?= |,|\n)/g, "$1Species.$2").replace(/"(\d+)": /g, "$1: ").replace(/((?: )|(?:(?!\n) "(?:.*?)": \{) |\[(?: .*? )?\], )"(\w+)"/g, "$1[TimeOfDay.$2]").replace(/( )"(.*?)"/g, "$1[BiomePoolTier.$2]").replace(/( )"(.*?)"/g, "$1[Biome.$2]")); - // console.log(beautify(trainerOutput, null, 2, 120).replace(/( | (?:\{ "\d+": \[ )?| "(?:.*?)": \[ |, (?:(?:\{ )?"\d+": \[ )?)"(.*?)"/g, "$1TrainerType.$2").replace(/"(\d+)": /g, "$1: ").replace(/( )"(.*?)"/g, "$1[BiomePoolTier.$2]").replace(/( )"(.*?)"/g, "$1[Biome.$2]")); + // console.log(beautify(pokemonOutput, null, 2, 180).replace(/( | (?:\{ "\d+": \[ )?| "(?:.*?)": \[ |(?:,|\[) (?:"\w+": \[ |(?:\{ )?"\d+": \[ )?)"(\w+)"(?= |,|\n)/g, "$1SpeciesId.$2").replace(/"(\d+)": /g, "$1: ").replace(/((?: )|(?:(?!\n) "(?:.*?)": \{) |\[(?: .*? )?\], )"(\w+)"/g, "$1[TimeOfDay.$2]").replace(/( )"(.*?)"/g, "$1[BiomePoolTier.$2]").replace(/( )"(.*?)"/g, "$1[BiomeId.$2]")); + // console.log(beautify(trainerOutput, null, 2, 120).replace(/( | (?:\{ "\d+": \[ )?| "(?:.*?)": \[ |, (?:(?:\{ )?"\d+": \[ )?)"(.*?)"/g, "$1TrainerType.$2").replace(/"(\d+)": /g, "$1: ").replace(/( )"(.*?)"/g, "$1[BiomePoolTier.$2]").replace(/( )"(.*?)"/g, "$1[BiomeId.$2]")); // } /*for (let pokemon of allSpecies) { - if (pokemon.speciesId >= Species.XERNEAS) + if (pokemon.speciesId >= SpeciesId.XERNEAS) break; pokemonBiomes[pokemon.speciesId - 1][0] = Species[pokemonBiomes[pokemon.speciesId - 1][0]]; pokemonBiomes[pokemon.speciesId - 1][1] = Type[pokemonBiomes[pokemon.speciesId - 1][1]]; diff --git a/src/data/balance/egg-moves.ts b/src/data/balance/egg-moves.ts index 73c6300166b..436e6bc6e76 100644 --- a/src/data/balance/egg-moves.ts +++ b/src/data/balance/egg-moves.ts @@ -1,594 +1,594 @@ import { allMoves } from "../data-lists"; import { getEnumKeys, getEnumValues } from "#app/utils/common"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; export const speciesEggMoves = { - [Species.BULBASAUR]: [ Moves.SAPPY_SEED, Moves.MALIGNANT_CHAIN, Moves.EARTH_POWER, Moves.MATCHA_GOTCHA ], - [Species.CHARMANDER]: [ Moves.DRAGON_DANCE, Moves.BITTER_BLADE, Moves.EARTH_POWER, Moves.OBLIVION_WING ], - [Species.SQUIRTLE]: [ Moves.FREEZE_DRY, Moves.ARMOR_CANNON, Moves.SHORE_UP, Moves.ORIGIN_PULSE ], - [Species.CATERPIE]: [ Moves.SANDSEAR_STORM, Moves.SILK_TRAP, Moves.TWIN_BEAM, Moves.BLEAKWIND_STORM ], - [Species.WEEDLE]: [ Moves.THOUSAND_ARROWS, Moves.NOXIOUS_TORQUE, Moves.ATTACK_ORDER, Moves.VICTORY_DANCE ], - [Species.PIDGEY]: [ Moves.BLEAKWIND_STORM, Moves.SANDSEAR_STORM, Moves.CALM_MIND, Moves.BOOMBURST ], - [Species.RATTATA]: [ Moves.HYPER_FANG, Moves.PSYCHIC_FANGS, Moves.FIRE_FANG, Moves.EXTREME_SPEED ], - [Species.SPEAROW]: [ Moves.FLOATY_FALL, Moves.EXTREME_SPEED, Moves.KNOCK_OFF, Moves.TRIPLE_ARROWS ], - [Species.EKANS]: [ Moves.NOXIOUS_TORQUE, Moves.DRAGON_DANCE, Moves.SLACK_OFF, Moves.SHED_TAIL ], - [Species.SANDSHREW]: [ Moves.HIGH_HORSEPOWER, Moves.DIRE_CLAW, Moves.SHORE_UP, Moves.MIGHTY_CLEAVE ], - [Species.NIDORAN_F]: [ Moves.CALM_MIND, Moves.MOONLIGHT, Moves.MALIGNANT_CHAIN, Moves.SANDSEAR_STORM ], - [Species.NIDORAN_M]: [ Moves.DRAGON_DANCE, Moves.MOUNTAIN_GALE, Moves.NOXIOUS_TORQUE, Moves.PRECIPICE_BLADES ], - [Species.VULPIX]: [ Moves.MOONBLAST, Moves.INFERNAL_PARADE, Moves.MORNING_SUN, Moves.TAIL_GLOW ], - [Species.ZUBAT]: [ Moves.FLOATY_FALL, Moves.DIRE_CLAW, Moves.SWORDS_DANCE, Moves.COLLISION_COURSE ], - [Species.ODDISH]: [ Moves.SLUDGE_BOMB, Moves.FIERY_DANCE, Moves.STRENGTH_SAP, Moves.SPORE ], - [Species.PARAS]: [ Moves.LEECH_LIFE, Moves.HORN_LEECH, Moves.CRABHAMMER, Moves.SAPPY_SEED ], - [Species.VENONAT]: [ Moves.SLUDGE_BOMB, Moves.TOXIC_THREAD, Moves.EARTH_POWER, Moves.STORED_POWER ], - [Species.DIGLETT]: [ Moves.TRIPLE_DIVE, Moves.SWORDS_DANCE, Moves.TRIPLE_AXEL, Moves.HEADLONG_RUSH ], - [Species.MEOWTH]: [ Moves.HEART_STAMP, Moves.SWORDS_DANCE, Moves.SIZZLY_SLIDE, Moves.TAIL_SLAP ], - [Species.PSYDUCK]: [ Moves.FROST_BREATH, Moves.AQUA_STEP, Moves.MYSTICAL_POWER, Moves.BOUNCY_BUBBLE ], - [Species.MANKEY]: [ Moves.DRAIN_PUNCH, Moves.SLACK_OFF, Moves.METEOR_MASH, Moves.NO_RETREAT ], - [Species.GROWLITHE]: [ Moves.ZING_ZAP, Moves.PARTING_SHOT, Moves.MORNING_SUN, Moves.SACRED_FIRE ], - [Species.POLIWAG]: [ Moves.SLACK_OFF, Moves.WILDBOLT_STORM, Moves.DRAIN_PUNCH, Moves.SURGING_STRIKES ], - [Species.ABRA]: [ Moves.AURA_SPHERE, Moves.BADDY_BAD, Moves.ICE_BEAM, Moves.PSYSTRIKE ], - [Species.MACHOP]: [ Moves.COMBAT_TORQUE, Moves.METEOR_MASH, Moves.MOUNTAIN_GALE, Moves.FISSURE ], - [Species.BELLSPROUT]: [ Moves.SOLAR_BLADE, Moves.STRENGTH_SAP, Moves.FIRE_LASH, Moves.VICTORY_DANCE ], - [Species.TENTACOOL]: [ Moves.BANEFUL_BUNKER, Moves.MALIGNANT_CHAIN, Moves.BOUNCY_BUBBLE, Moves.STRENGTH_SAP ], - [Species.GEODUDE]: [ Moves.FLARE_BLITZ, Moves.HEAD_SMASH, Moves.SHORE_UP, Moves.SHELL_SMASH ], - [Species.PONYTA]: [ Moves.HEADLONG_RUSH, Moves.FIRE_LASH, Moves.SWORDS_DANCE, Moves.VOLT_TACKLE ], - [Species.SLOWPOKE]: [ Moves.SPLISHY_SPLASH, Moves.FROST_BREATH, Moves.SHED_TAIL, Moves.MYSTICAL_POWER ], - [Species.MAGNEMITE]: [ Moves.PARABOLIC_CHARGE, Moves.FLAMETHROWER, Moves.ICE_BEAM, Moves.THUNDERCLAP ], - [Species.FARFETCHD]: [ Moves.IVY_CUDGEL, Moves.TRIPLE_ARROWS, Moves.DRILL_RUN, Moves.VICTORY_DANCE ], - [Species.DODUO]: [ Moves.TRIPLE_AXEL, Moves.HYPER_DRILL, Moves.FLOATY_FALL, Moves.TRIPLE_ARROWS ], - [Species.SEEL]: [ Moves.FREEZE_DRY, Moves.BOUNCY_BUBBLE, Moves.SLACK_OFF, Moves.STEAM_ERUPTION ], - [Species.GRIMER]: [ Moves.SUCKER_PUNCH, Moves.CURSE, Moves.NOXIOUS_TORQUE, Moves.STRENGTH_SAP ], - [Species.SHELLDER]: [ Moves.ROCK_BLAST, Moves.WATER_SHURIKEN, Moves.BANEFUL_BUNKER, Moves.BONE_RUSH ], - [Species.GASTLY]: [ Moves.MALIGNANT_CHAIN, Moves.AURA_SPHERE, Moves.PARTING_SHOT, Moves.DARK_VOID ], - [Species.ONIX]: [ Moves.SHORE_UP, Moves.THOUSAND_WAVES, Moves.COIL, Moves.DIAMOND_STORM ], - [Species.DROWZEE]: [ Moves.BADDY_BAD, Moves.STRENGTH_SAP, Moves.LUMINA_CRASH, Moves.DARK_VOID ], - [Species.KRABBY]: [ Moves.DIRE_CLAW, Moves.DRAGON_HAMMER, Moves.IVY_CUDGEL, Moves.JET_PUNCH ], - [Species.VOLTORB]: [ Moves.NASTY_PLOT, Moves.FUSION_FLARE, Moves.FROST_BREATH, Moves.ELECTRO_DRIFT ], - [Species.EXEGGCUTE]: [ Moves.FICKLE_BEAM, Moves.APPLE_ACID, Moves.HEAT_WAVE, Moves.LUMINA_CRASH ], - [Species.CUBONE]: [ Moves.HEAD_SMASH, Moves.WOOD_HAMMER, Moves.SHADOW_SNEAK, Moves.BITTER_BLADE ], - [Species.LICKITUNG]: [ Moves.CRUSH_GRIP, Moves.FIRE_LASH, Moves.SLACK_OFF, Moves.MAGICAL_TORQUE ], - [Species.KOFFING]: [ Moves.SCALD, Moves.RECOVER, Moves.BODY_PRESS, Moves.MALIGNANT_CHAIN ], - [Species.RHYHORN]: [ Moves.SHORE_UP, Moves.ICE_HAMMER, Moves.ACCELEROCK, Moves.HEAD_SMASH ], - [Species.TANGELA]: [ Moves.NATURES_MADNESS, Moves.SNAP_TRAP, Moves.PARTING_SHOT, Moves.SAPPY_SEED ], - [Species.KANGASKHAN]: [ Moves.POWER_UP_PUNCH, Moves.TRAILBLAZE, Moves.COVET, Moves.SEISMIC_TOSS ], - [Species.HORSEA]: [ Moves.SNIPE_SHOT, Moves.TAKE_HEART, Moves.SHELL_SIDE_ARM, Moves.DRAGON_ENERGY ], - [Species.GOLDEEN]: [ Moves.GLACIAL_LANCE, Moves.SUPERCELL_SLAM, Moves.DRAGON_DANCE, Moves.FISHIOUS_REND ], - [Species.STARYU]: [ Moves.CALM_MIND, Moves.BOUNCY_BUBBLE, Moves.MOONBLAST, Moves.MYSTICAL_POWER ], - [Species.SCYTHER]: [ Moves.MIGHTY_CLEAVE, Moves.GEAR_GRIND, Moves.STORM_THROW, Moves.BITTER_BLADE ], - [Species.PINSIR]: [ Moves.HEADLONG_RUSH, Moves.LEECH_LIFE, Moves.CRUSH_GRIP, Moves.EXTREME_SPEED ], - [Species.TAUROS]: [ Moves.SWORDS_DANCE, Moves.FIRE_LASH, Moves.WICKED_TORQUE, Moves.COLLISION_COURSE ], - [Species.MAGIKARP]: [ Moves.FLIP_TURN, Moves.ICE_SPINNER, Moves.KNOCK_OFF, Moves.DRAGON_ASCENT ], - [Species.LAPRAS]: [ Moves.RECOVER, Moves.FREEZE_DRY, Moves.SCALD, Moves.SHELL_SMASH ], - [Species.DITTO]: [ Moves.MIMIC, Moves.SKETCH, Moves.METRONOME, Moves.IMPRISON ], - [Species.EEVEE]: [ Moves.WISH, Moves.NO_RETREAT, Moves.ZIPPY_ZAP, Moves.BOOMBURST ], - [Species.PORYGON]: [ Moves.THUNDERCLAP, Moves.AURA_SPHERE, Moves.FLAMETHROWER, Moves.TECHNO_BLAST ], - [Species.OMANYTE]: [ Moves.FREEZE_DRY, Moves.GIGA_DRAIN, Moves.POWER_GEM, Moves.STEAM_ERUPTION ], - [Species.KABUTO]: [ Moves.CEASELESS_EDGE, Moves.HIGH_HORSEPOWER, Moves.CRABHAMMER, Moves.MIGHTY_CLEAVE ], - [Species.AERODACTYL]: [ Moves.FLOATY_FALL, Moves.HIGH_HORSEPOWER, Moves.STONE_AXE, Moves.SWORDS_DANCE ], - [Species.ARTICUNO]: [ Moves.EARTH_POWER, Moves.CALM_MIND, Moves.AURORA_VEIL, Moves.AEROBLAST ], - [Species.ZAPDOS]: [ Moves.BLEAKWIND_STORM, Moves.CALM_MIND, Moves.SANDSEAR_STORM, Moves.ELECTRO_SHOT ], - [Species.MOLTRES]: [ Moves.EARTH_POWER, Moves.CALM_MIND, Moves.AEROBLAST, Moves.TORCH_SONG ], - [Species.DRATINI]: [ Moves.DRAGON_HAMMER, Moves.CRUSH_GRIP, Moves.FIRE_LASH, Moves.GIGATON_HAMMER ], - [Species.MEWTWO]: [ Moves.METEOR_MASH, Moves.MOONBLAST, Moves.THUNDEROUS_KICK, Moves.PHOTON_GEYSER ], - [Species.MEW]: [ Moves.PHOTON_GEYSER, Moves.MOONBLAST, Moves.ASTRAL_BARRAGE, Moves.SHELL_SMASH ], + [SpeciesId.BULBASAUR]: [ MoveId.SAPPY_SEED, MoveId.MALIGNANT_CHAIN, MoveId.EARTH_POWER, MoveId.MATCHA_GOTCHA ], + [SpeciesId.CHARMANDER]: [ MoveId.DRAGON_DANCE, MoveId.BITTER_BLADE, MoveId.EARTH_POWER, MoveId.OBLIVION_WING ], + [SpeciesId.SQUIRTLE]: [ MoveId.FREEZE_DRY, MoveId.ARMOR_CANNON, MoveId.SHORE_UP, MoveId.ORIGIN_PULSE ], + [SpeciesId.CATERPIE]: [ MoveId.SANDSEAR_STORM, MoveId.SILK_TRAP, MoveId.TWIN_BEAM, MoveId.BLEAKWIND_STORM ], + [SpeciesId.WEEDLE]: [ MoveId.THOUSAND_ARROWS, MoveId.NOXIOUS_TORQUE, MoveId.ATTACK_ORDER, MoveId.VICTORY_DANCE ], + [SpeciesId.PIDGEY]: [ MoveId.BLEAKWIND_STORM, MoveId.SANDSEAR_STORM, MoveId.CALM_MIND, MoveId.BOOMBURST ], + [SpeciesId.RATTATA]: [ MoveId.HYPER_FANG, MoveId.PSYCHIC_FANGS, MoveId.FIRE_FANG, MoveId.EXTREME_SPEED ], + [SpeciesId.SPEAROW]: [ MoveId.FLOATY_FALL, MoveId.EXTREME_SPEED, MoveId.KNOCK_OFF, MoveId.TRIPLE_ARROWS ], + [SpeciesId.EKANS]: [ MoveId.NOXIOUS_TORQUE, MoveId.DRAGON_DANCE, MoveId.SLACK_OFF, MoveId.SHED_TAIL ], + [SpeciesId.SANDSHREW]: [ MoveId.HIGH_HORSEPOWER, MoveId.DIRE_CLAW, MoveId.SHORE_UP, MoveId.MIGHTY_CLEAVE ], + [SpeciesId.NIDORAN_F]: [ MoveId.CALM_MIND, MoveId.MOONLIGHT, MoveId.MALIGNANT_CHAIN, MoveId.SANDSEAR_STORM ], + [SpeciesId.NIDORAN_M]: [ MoveId.DRAGON_DANCE, MoveId.MOUNTAIN_GALE, MoveId.NOXIOUS_TORQUE, MoveId.PRECIPICE_BLADES ], + [SpeciesId.VULPIX]: [ MoveId.MOONBLAST, MoveId.INFERNAL_PARADE, MoveId.MORNING_SUN, MoveId.TAIL_GLOW ], + [SpeciesId.ZUBAT]: [ MoveId.FLOATY_FALL, MoveId.DIRE_CLAW, MoveId.SWORDS_DANCE, MoveId.COLLISION_COURSE ], + [SpeciesId.ODDISH]: [ MoveId.SLUDGE_BOMB, MoveId.FIERY_DANCE, MoveId.STRENGTH_SAP, MoveId.SPORE ], + [SpeciesId.PARAS]: [ MoveId.LEECH_LIFE, MoveId.HORN_LEECH, MoveId.CRABHAMMER, MoveId.SAPPY_SEED ], + [SpeciesId.VENONAT]: [ MoveId.SLUDGE_BOMB, MoveId.TOXIC_THREAD, MoveId.EARTH_POWER, MoveId.STORED_POWER ], + [SpeciesId.DIGLETT]: [ MoveId.TRIPLE_DIVE, MoveId.SWORDS_DANCE, MoveId.TRIPLE_AXEL, MoveId.HEADLONG_RUSH ], + [SpeciesId.MEOWTH]: [ MoveId.HEART_STAMP, MoveId.SWORDS_DANCE, MoveId.SIZZLY_SLIDE, MoveId.TAIL_SLAP ], + [SpeciesId.PSYDUCK]: [ MoveId.FROST_BREATH, MoveId.AQUA_STEP, MoveId.MYSTICAL_POWER, MoveId.BOUNCY_BUBBLE ], + [SpeciesId.MANKEY]: [ MoveId.DRAIN_PUNCH, MoveId.SLACK_OFF, MoveId.METEOR_MASH, MoveId.NO_RETREAT ], + [SpeciesId.GROWLITHE]: [ MoveId.ZING_ZAP, MoveId.PARTING_SHOT, MoveId.MORNING_SUN, MoveId.SACRED_FIRE ], + [SpeciesId.POLIWAG]: [ MoveId.SLACK_OFF, MoveId.WILDBOLT_STORM, MoveId.DRAIN_PUNCH, MoveId.SURGING_STRIKES ], + [SpeciesId.ABRA]: [ MoveId.AURA_SPHERE, MoveId.BADDY_BAD, MoveId.ICE_BEAM, MoveId.PSYSTRIKE ], + [SpeciesId.MACHOP]: [ MoveId.COMBAT_TORQUE, MoveId.METEOR_MASH, MoveId.MOUNTAIN_GALE, MoveId.FISSURE ], + [SpeciesId.BELLSPROUT]: [ MoveId.SOLAR_BLADE, MoveId.STRENGTH_SAP, MoveId.FIRE_LASH, MoveId.VICTORY_DANCE ], + [SpeciesId.TENTACOOL]: [ MoveId.BANEFUL_BUNKER, MoveId.MALIGNANT_CHAIN, MoveId.BOUNCY_BUBBLE, MoveId.STRENGTH_SAP ], + [SpeciesId.GEODUDE]: [ MoveId.FLARE_BLITZ, MoveId.HEAD_SMASH, MoveId.SHORE_UP, MoveId.SHELL_SMASH ], + [SpeciesId.PONYTA]: [ MoveId.HEADLONG_RUSH, MoveId.FIRE_LASH, MoveId.SWORDS_DANCE, MoveId.VOLT_TACKLE ], + [SpeciesId.SLOWPOKE]: [ MoveId.SPLISHY_SPLASH, MoveId.FROST_BREATH, MoveId.SHED_TAIL, MoveId.MYSTICAL_POWER ], + [SpeciesId.MAGNEMITE]: [ MoveId.PARABOLIC_CHARGE, MoveId.FLAMETHROWER, MoveId.ICE_BEAM, MoveId.THUNDERCLAP ], + [SpeciesId.FARFETCHD]: [ MoveId.IVY_CUDGEL, MoveId.TRIPLE_ARROWS, MoveId.DRILL_RUN, MoveId.VICTORY_DANCE ], + [SpeciesId.DODUO]: [ MoveId.TRIPLE_AXEL, MoveId.HYPER_DRILL, MoveId.FLOATY_FALL, MoveId.TRIPLE_ARROWS ], + [SpeciesId.SEEL]: [ MoveId.FREEZE_DRY, MoveId.BOUNCY_BUBBLE, MoveId.SLACK_OFF, MoveId.STEAM_ERUPTION ], + [SpeciesId.GRIMER]: [ MoveId.SUCKER_PUNCH, MoveId.CURSE, MoveId.NOXIOUS_TORQUE, MoveId.STRENGTH_SAP ], + [SpeciesId.SHELLDER]: [ MoveId.ROCK_BLAST, MoveId.WATER_SHURIKEN, MoveId.BANEFUL_BUNKER, MoveId.BONE_RUSH ], + [SpeciesId.GASTLY]: [ MoveId.MALIGNANT_CHAIN, MoveId.AURA_SPHERE, MoveId.PARTING_SHOT, MoveId.DARK_VOID ], + [SpeciesId.ONIX]: [ MoveId.SHORE_UP, MoveId.THOUSAND_WAVES, MoveId.COIL, MoveId.DIAMOND_STORM ], + [SpeciesId.DROWZEE]: [ MoveId.BADDY_BAD, MoveId.STRENGTH_SAP, MoveId.LUMINA_CRASH, MoveId.DARK_VOID ], + [SpeciesId.KRABBY]: [ MoveId.DIRE_CLAW, MoveId.DRAGON_HAMMER, MoveId.IVY_CUDGEL, MoveId.JET_PUNCH ], + [SpeciesId.VOLTORB]: [ MoveId.NASTY_PLOT, MoveId.FUSION_FLARE, MoveId.FROST_BREATH, MoveId.ELECTRO_DRIFT ], + [SpeciesId.EXEGGCUTE]: [ MoveId.FICKLE_BEAM, MoveId.APPLE_ACID, MoveId.HEAT_WAVE, MoveId.LUMINA_CRASH ], + [SpeciesId.CUBONE]: [ MoveId.HEAD_SMASH, MoveId.WOOD_HAMMER, MoveId.SHADOW_SNEAK, MoveId.BITTER_BLADE ], + [SpeciesId.LICKITUNG]: [ MoveId.CRUSH_GRIP, MoveId.FIRE_LASH, MoveId.SLACK_OFF, MoveId.MAGICAL_TORQUE ], + [SpeciesId.KOFFING]: [ MoveId.SCALD, MoveId.RECOVER, MoveId.BODY_PRESS, MoveId.MALIGNANT_CHAIN ], + [SpeciesId.RHYHORN]: [ MoveId.SHORE_UP, MoveId.ICE_HAMMER, MoveId.ACCELEROCK, MoveId.HEAD_SMASH ], + [SpeciesId.TANGELA]: [ MoveId.NATURES_MADNESS, MoveId.SNAP_TRAP, MoveId.PARTING_SHOT, MoveId.SAPPY_SEED ], + [SpeciesId.KANGASKHAN]: [ MoveId.POWER_UP_PUNCH, MoveId.TRAILBLAZE, MoveId.COVET, MoveId.SEISMIC_TOSS ], + [SpeciesId.HORSEA]: [ MoveId.SNIPE_SHOT, MoveId.TAKE_HEART, MoveId.SHELL_SIDE_ARM, MoveId.DRAGON_ENERGY ], + [SpeciesId.GOLDEEN]: [ MoveId.GLACIAL_LANCE, MoveId.SUPERCELL_SLAM, MoveId.DRAGON_DANCE, MoveId.FISHIOUS_REND ], + [SpeciesId.STARYU]: [ MoveId.CALM_MIND, MoveId.BOUNCY_BUBBLE, MoveId.MOONBLAST, MoveId.MYSTICAL_POWER ], + [SpeciesId.SCYTHER]: [ MoveId.MIGHTY_CLEAVE, MoveId.GEAR_GRIND, MoveId.STORM_THROW, MoveId.BITTER_BLADE ], + [SpeciesId.PINSIR]: [ MoveId.HEADLONG_RUSH, MoveId.LEECH_LIFE, MoveId.CRUSH_GRIP, MoveId.EXTREME_SPEED ], + [SpeciesId.TAUROS]: [ MoveId.SWORDS_DANCE, MoveId.FIRE_LASH, MoveId.WICKED_TORQUE, MoveId.COLLISION_COURSE ], + [SpeciesId.MAGIKARP]: [ MoveId.FLIP_TURN, MoveId.ICE_SPINNER, MoveId.KNOCK_OFF, MoveId.DRAGON_ASCENT ], + [SpeciesId.LAPRAS]: [ MoveId.RECOVER, MoveId.FREEZE_DRY, MoveId.SCALD, MoveId.SHELL_SMASH ], + [SpeciesId.DITTO]: [ MoveId.MIMIC, MoveId.SKETCH, MoveId.METRONOME, MoveId.IMPRISON ], + [SpeciesId.EEVEE]: [ MoveId.WISH, MoveId.NO_RETREAT, MoveId.ZIPPY_ZAP, MoveId.BOOMBURST ], + [SpeciesId.PORYGON]: [ MoveId.THUNDERCLAP, MoveId.AURA_SPHERE, MoveId.FLAMETHROWER, MoveId.TECHNO_BLAST ], + [SpeciesId.OMANYTE]: [ MoveId.FREEZE_DRY, MoveId.GIGA_DRAIN, MoveId.POWER_GEM, MoveId.STEAM_ERUPTION ], + [SpeciesId.KABUTO]: [ MoveId.CEASELESS_EDGE, MoveId.HIGH_HORSEPOWER, MoveId.CRABHAMMER, MoveId.MIGHTY_CLEAVE ], + [SpeciesId.AERODACTYL]: [ MoveId.FLOATY_FALL, MoveId.HIGH_HORSEPOWER, MoveId.STONE_AXE, MoveId.SWORDS_DANCE ], + [SpeciesId.ARTICUNO]: [ MoveId.EARTH_POWER, MoveId.CALM_MIND, MoveId.AURORA_VEIL, MoveId.AEROBLAST ], + [SpeciesId.ZAPDOS]: [ MoveId.BLEAKWIND_STORM, MoveId.CALM_MIND, MoveId.SANDSEAR_STORM, MoveId.ELECTRO_SHOT ], + [SpeciesId.MOLTRES]: [ MoveId.EARTH_POWER, MoveId.CALM_MIND, MoveId.AEROBLAST, MoveId.TORCH_SONG ], + [SpeciesId.DRATINI]: [ MoveId.DRAGON_HAMMER, MoveId.CRUSH_GRIP, MoveId.FIRE_LASH, MoveId.GIGATON_HAMMER ], + [SpeciesId.MEWTWO]: [ MoveId.METEOR_MASH, MoveId.MOONBLAST, MoveId.THUNDEROUS_KICK, MoveId.PHOTON_GEYSER ], + [SpeciesId.MEW]: [ MoveId.PHOTON_GEYSER, MoveId.MOONBLAST, MoveId.ASTRAL_BARRAGE, MoveId.SHELL_SMASH ], - [Species.CHIKORITA]: [ Moves.SAPPY_SEED, Moves.STONE_AXE, Moves.DRAGON_DANCE, Moves.SPORE ], - [Species.CYNDAQUIL]: [ Moves.NASTY_PLOT, Moves.EARTH_POWER, Moves.FIERY_DANCE, Moves.ELECTRO_DRIFT ], - [Species.TOTODILE]: [ Moves.THUNDER_PUNCH, Moves.DRAGON_DANCE, Moves.PLAY_ROUGH, Moves.SURGING_STRIKES ], - [Species.SENTRET]: [ Moves.TIDY_UP, Moves.FAKE_OUT, Moves.NUZZLE, Moves.EXTREME_SPEED ], - [Species.HOOTHOOT]: [ Moves.TAKE_HEART, Moves.ESPER_WING, Moves.AEROBLAST, Moves.BOOMBURST ], - [Species.LEDYBA]: [ Moves.POLLEN_PUFF, Moves.MAT_BLOCK, Moves.PARTING_SHOT, Moves.SPORE ], - [Species.SPINARAK]: [ Moves.PARTING_SHOT, Moves.ATTACK_ORDER, Moves.GASTRO_ACID, Moves.STRENGTH_SAP ], - [Species.CHINCHOU]: [ Moves.THUNDERCLAP, Moves.BOUNCY_BUBBLE, Moves.THUNDER_CAGE, Moves.TAIL_GLOW ], - [Species.PICHU]: [ Moves.MOONBLAST, Moves.TRIPLE_AXEL, Moves.FIERY_DANCE, Moves.AURA_WHEEL ], - [Species.CLEFFA]: [ Moves.CALM_MIND, Moves.EARTH_POWER, Moves.WISH, Moves.LIGHT_OF_RUIN ], - [Species.IGGLYBUFF]: [ Moves.DRAIN_PUNCH, Moves.GRAV_APPLE, Moves.SOFT_BOILED, Moves.EXTREME_SPEED ], - [Species.TOGEPI]: [ Moves.SCORCHING_SANDS, Moves.SPLISHY_SPLASH, Moves.RELIC_SONG, Moves.FIERY_DANCE ], - [Species.NATU]: [ Moves.REVIVAL_BLESSING, Moves.NASTY_PLOT, Moves.MOONBLAST, Moves.OBLIVION_WING ], - [Species.MAREEP]: [ Moves.ICE_BEAM, Moves.PARABOLIC_CHARGE, Moves.CORE_ENFORCER, Moves.TAIL_GLOW ], - [Species.HOPPIP]: [ Moves.FLOATY_FALL, Moves.STRENGTH_SAP, Moves.SAPPY_SEED, Moves.SPORE ], - [Species.AIPOM]: [ Moves.ROCK_BLAST, Moves.STORM_THROW, Moves.FAKE_OUT, Moves.SWORDS_DANCE ], - [Species.SUNKERN]: [ Moves.SPORE, Moves.QUIVER_DANCE, Moves.FIERY_DANCE, Moves.HYDRO_STEAM ], - [Species.YANMA]: [ Moves.NASTY_PLOT, Moves.EARTH_POWER, Moves.HEAT_WAVE, Moves.BLEAKWIND_STORM ], - [Species.WOOPER]: [ Moves.SIZZLY_SLIDE, Moves.RECOVER, Moves.SHED_TAIL, Moves.SURGING_STRIKES ], - [Species.MURKROW]: [ Moves.TRIPLE_ARROWS, Moves.FLOATY_FALL, Moves.TIDY_UP, Moves.WICKED_BLOW ], - [Species.MISDREAVUS]: [ Moves.TAKE_HEART, Moves.MOONBLAST, Moves.AURA_SPHERE, Moves.MOONGEIST_BEAM ], - [Species.UNOWN]: [ Moves.NATURE_POWER, Moves.COSMIC_POWER, Moves.ANCIENT_POWER, Moves.MYSTICAL_POWER ], - [Species.GIRAFARIG]: [ Moves.MYSTICAL_POWER, Moves.NIGHT_DAZE, Moves.RECOVER, Moves.BOOMBURST ], - [Species.PINECO]: [ Moves.METAL_BURST, Moves.SHORE_UP, Moves.BODY_PRESS, Moves.DIAMOND_STORM ], - [Species.DUNSPARCE]: [ Moves.WICKED_TORQUE, Moves.MAGICAL_TORQUE, Moves.BLAZING_TORQUE, Moves.EXTREME_SPEED ], - [Species.GLIGAR]: [ Moves.FLOATY_FALL, Moves.THOUSAND_WAVES, Moves.SPIKY_SHIELD, Moves.MIGHTY_CLEAVE ], - [Species.SNUBBULL]: [ Moves.FACADE, Moves.HIGH_HORSEPOWER, Moves.SWORDS_DANCE, Moves.EXTREME_SPEED ], - [Species.QWILFISH]: [ Moves.BARB_BARRAGE, Moves.BANEFUL_BUNKER, Moves.RECOVER, Moves.FISHIOUS_REND ], - [Species.SHUCKLE]: [ Moves.STUFF_CHEEKS, Moves.HEAL_ORDER, Moves.BODY_PRESS, Moves.SALT_CURE ], - [Species.HERACROSS]: [ Moves.ROCK_BLAST, Moves.STORM_THROW, Moves.ICICLE_SPEAR, Moves.SCALE_SHOT ], - [Species.SNEASEL]: [ Moves.DIRE_CLAW, Moves.DARKEST_LARIAT, Moves.TRIPLE_AXEL, Moves.CLOSE_COMBAT ], - [Species.TEDDIURSA]: [ Moves.MOUNTAIN_GALE, Moves.FAKE_OUT, Moves.SLACK_OFF, Moves.PRECIPICE_BLADES ], - [Species.SLUGMA]: [ Moves.BURNING_BULWARK, Moves.POWER_GEM, Moves.SOLAR_BEAM, Moves.MAGMA_STORM ], - [Species.SWINUB]: [ Moves.SLACK_OFF, Moves.MOUNTAIN_GALE, Moves.STONE_AXE, Moves.PRECIPICE_BLADES ], - [Species.CORSOLA]: [ Moves.SCALD, Moves.FREEZE_DRY, Moves.STRENGTH_SAP, Moves.SALT_CURE ], - [Species.REMORAID]: [ Moves.WATER_SHURIKEN, Moves.TAKE_HEART, Moves.SHELL_SIDE_ARM, Moves.BOUNCY_BUBBLE ], - [Species.DELIBIRD]: [ Moves.BONEMERANG, Moves.FLOATY_FALL, Moves.VICTORY_DANCE, Moves.GLACIAL_LANCE ], - [Species.SKARMORY]: [ Moves.ROOST, Moves.BODY_PRESS, Moves.SPIKY_SHIELD, Moves.BEAK_BLAST ], - [Species.HOUNDOUR]: [ Moves.FIERY_WRATH, Moves.THUNDERBOLT, Moves.MOONBLAST, Moves.ARMOR_CANNON ], - [Species.PHANPY]: [ Moves.SHORE_UP, Moves.SWORDS_DANCE, Moves.MOUNTAIN_GALE, Moves.COLLISION_COURSE ], - [Species.STANTLER]: [ Moves.THUNDEROUS_KICK, Moves.PHOTON_GEYSER, Moves.SWORDS_DANCE, Moves.BOOMBURST ], - [Species.SMEARGLE]: [ Moves.CONVERSION, Moves.BURNING_BULWARK, Moves.SALT_CURE, Moves.DARK_VOID ], - [Species.TYROGUE]: [ Moves.VICTORY_DANCE, Moves.THUNDEROUS_KICK, Moves.METEOR_MASH, Moves.WICKED_BLOW ], - [Species.SMOOCHUM]: [ Moves.LUSTER_PURGE, Moves.AURA_SPHERE, Moves.FREEZE_DRY, Moves.QUIVER_DANCE ], - [Species.ELEKID]: [ Moves.FIRE_LASH, Moves.ZING_ZAP, Moves.MOUNTAIN_GALE, Moves.SHIFT_GEAR ], - [Species.MAGBY]: [ Moves.THUNDERCLAP, Moves.EARTH_POWER, Moves.ENERGY_BALL, Moves.BLUE_FLARE ], - [Species.MILTANK]: [ Moves.BODY_PRESS, Moves.BULK_UP, Moves.KNOCK_OFF, Moves.SIZZLY_SLIDE ], - [Species.RAIKOU]: [ Moves.PARABOLIC_CHARGE, Moves.NASTY_PLOT, Moves.FROST_BREATH, Moves.ELECTRO_DRIFT ], - [Species.ENTEI]: [ Moves.BURNING_BULWARK, Moves.DRAGON_DANCE, Moves.EARTHQUAKE, Moves.PYRO_BALL ], - [Species.SUICUNE]: [ Moves.RECOVER, Moves.NASTY_PLOT, Moves.FREEZE_DRY, Moves.STEAM_ERUPTION ], - [Species.LARVITAR]: [ Moves.DRAGON_DANCE, Moves.MOUNTAIN_GALE, Moves.SHORE_UP, Moves.DIAMOND_STORM ], - [Species.LUGIA]: [ Moves.NASTY_PLOT, Moves.LUMINA_CRASH, Moves.AURA_SPHERE, Moves.OBLIVION_WING ], - [Species.HO_OH]: [ Moves.BRAVE_BIRD, Moves.DRAGON_DANCE, Moves.REVIVAL_BLESSING, Moves.BOLT_BEAK ], - [Species.CELEBI]: [ Moves.PHOTON_GEYSER, Moves.MATCHA_GOTCHA, Moves.REVIVAL_BLESSING, Moves.QUIVER_DANCE ], + [SpeciesId.CHIKORITA]: [ MoveId.SAPPY_SEED, MoveId.STONE_AXE, MoveId.DRAGON_DANCE, MoveId.SPORE ], + [SpeciesId.CYNDAQUIL]: [ MoveId.NASTY_PLOT, MoveId.EARTH_POWER, MoveId.FIERY_DANCE, MoveId.ELECTRO_DRIFT ], + [SpeciesId.TOTODILE]: [ MoveId.THUNDER_PUNCH, MoveId.DRAGON_DANCE, MoveId.PLAY_ROUGH, MoveId.SURGING_STRIKES ], + [SpeciesId.SENTRET]: [ MoveId.TIDY_UP, MoveId.FAKE_OUT, MoveId.NUZZLE, MoveId.EXTREME_SPEED ], + [SpeciesId.HOOTHOOT]: [ MoveId.TAKE_HEART, MoveId.ESPER_WING, MoveId.AEROBLAST, MoveId.BOOMBURST ], + [SpeciesId.LEDYBA]: [ MoveId.POLLEN_PUFF, MoveId.MAT_BLOCK, MoveId.PARTING_SHOT, MoveId.SPORE ], + [SpeciesId.SPINARAK]: [ MoveId.PARTING_SHOT, MoveId.ATTACK_ORDER, MoveId.GASTRO_ACID, MoveId.STRENGTH_SAP ], + [SpeciesId.CHINCHOU]: [ MoveId.THUNDERCLAP, MoveId.BOUNCY_BUBBLE, MoveId.THUNDER_CAGE, MoveId.TAIL_GLOW ], + [SpeciesId.PICHU]: [ MoveId.MOONBLAST, MoveId.TRIPLE_AXEL, MoveId.FIERY_DANCE, MoveId.AURA_WHEEL ], + [SpeciesId.CLEFFA]: [ MoveId.CALM_MIND, MoveId.EARTH_POWER, MoveId.WISH, MoveId.LIGHT_OF_RUIN ], + [SpeciesId.IGGLYBUFF]: [ MoveId.DRAIN_PUNCH, MoveId.GRAV_APPLE, MoveId.SOFT_BOILED, MoveId.EXTREME_SPEED ], + [SpeciesId.TOGEPI]: [ MoveId.SCORCHING_SANDS, MoveId.SPLISHY_SPLASH, MoveId.RELIC_SONG, MoveId.FIERY_DANCE ], + [SpeciesId.NATU]: [ MoveId.REVIVAL_BLESSING, MoveId.NASTY_PLOT, MoveId.MOONBLAST, MoveId.OBLIVION_WING ], + [SpeciesId.MAREEP]: [ MoveId.ICE_BEAM, MoveId.PARABOLIC_CHARGE, MoveId.CORE_ENFORCER, MoveId.TAIL_GLOW ], + [SpeciesId.HOPPIP]: [ MoveId.FLOATY_FALL, MoveId.STRENGTH_SAP, MoveId.SAPPY_SEED, MoveId.SPORE ], + [SpeciesId.AIPOM]: [ MoveId.ROCK_BLAST, MoveId.STORM_THROW, MoveId.FAKE_OUT, MoveId.SWORDS_DANCE ], + [SpeciesId.SUNKERN]: [ MoveId.SPORE, MoveId.QUIVER_DANCE, MoveId.FIERY_DANCE, MoveId.HYDRO_STEAM ], + [SpeciesId.YANMA]: [ MoveId.NASTY_PLOT, MoveId.EARTH_POWER, MoveId.HEAT_WAVE, MoveId.BLEAKWIND_STORM ], + [SpeciesId.WOOPER]: [ MoveId.SIZZLY_SLIDE, MoveId.RECOVER, MoveId.SHED_TAIL, MoveId.SURGING_STRIKES ], + [SpeciesId.MURKROW]: [ MoveId.TRIPLE_ARROWS, MoveId.FLOATY_FALL, MoveId.TIDY_UP, MoveId.WICKED_BLOW ], + [SpeciesId.MISDREAVUS]: [ MoveId.TAKE_HEART, MoveId.MOONBLAST, MoveId.AURA_SPHERE, MoveId.MOONGEIST_BEAM ], + [SpeciesId.UNOWN]: [ MoveId.NATURE_POWER, MoveId.COSMIC_POWER, MoveId.ANCIENT_POWER, MoveId.MYSTICAL_POWER ], + [SpeciesId.GIRAFARIG]: [ MoveId.MYSTICAL_POWER, MoveId.NIGHT_DAZE, MoveId.RECOVER, MoveId.BOOMBURST ], + [SpeciesId.PINECO]: [ MoveId.METAL_BURST, MoveId.SHORE_UP, MoveId.BODY_PRESS, MoveId.DIAMOND_STORM ], + [SpeciesId.DUNSPARCE]: [ MoveId.WICKED_TORQUE, MoveId.MAGICAL_TORQUE, MoveId.BLAZING_TORQUE, MoveId.EXTREME_SPEED ], + [SpeciesId.GLIGAR]: [ MoveId.FLOATY_FALL, MoveId.THOUSAND_WAVES, MoveId.SPIKY_SHIELD, MoveId.MIGHTY_CLEAVE ], + [SpeciesId.SNUBBULL]: [ MoveId.FACADE, MoveId.HIGH_HORSEPOWER, MoveId.SWORDS_DANCE, MoveId.EXTREME_SPEED ], + [SpeciesId.QWILFISH]: [ MoveId.BARB_BARRAGE, MoveId.BANEFUL_BUNKER, MoveId.RECOVER, MoveId.FISHIOUS_REND ], + [SpeciesId.SHUCKLE]: [ MoveId.STUFF_CHEEKS, MoveId.HEAL_ORDER, MoveId.BODY_PRESS, MoveId.SALT_CURE ], + [SpeciesId.HERACROSS]: [ MoveId.ROCK_BLAST, MoveId.STORM_THROW, MoveId.ICICLE_SPEAR, MoveId.SCALE_SHOT ], + [SpeciesId.SNEASEL]: [ MoveId.DIRE_CLAW, MoveId.DARKEST_LARIAT, MoveId.TRIPLE_AXEL, MoveId.CLOSE_COMBAT ], + [SpeciesId.TEDDIURSA]: [ MoveId.MOUNTAIN_GALE, MoveId.FAKE_OUT, MoveId.SLACK_OFF, MoveId.PRECIPICE_BLADES ], + [SpeciesId.SLUGMA]: [ MoveId.BURNING_BULWARK, MoveId.POWER_GEM, MoveId.SOLAR_BEAM, MoveId.MAGMA_STORM ], + [SpeciesId.SWINUB]: [ MoveId.SLACK_OFF, MoveId.MOUNTAIN_GALE, MoveId.STONE_AXE, MoveId.PRECIPICE_BLADES ], + [SpeciesId.CORSOLA]: [ MoveId.SCALD, MoveId.FREEZE_DRY, MoveId.STRENGTH_SAP, MoveId.SALT_CURE ], + [SpeciesId.REMORAID]: [ MoveId.WATER_SHURIKEN, MoveId.TAKE_HEART, MoveId.SHELL_SIDE_ARM, MoveId.BOUNCY_BUBBLE ], + [SpeciesId.DELIBIRD]: [ MoveId.BONEMERANG, MoveId.FLOATY_FALL, MoveId.VICTORY_DANCE, MoveId.GLACIAL_LANCE ], + [SpeciesId.SKARMORY]: [ MoveId.ROOST, MoveId.BODY_PRESS, MoveId.SPIKY_SHIELD, MoveId.BEAK_BLAST ], + [SpeciesId.HOUNDOUR]: [ MoveId.FIERY_WRATH, MoveId.THUNDERBOLT, MoveId.MOONBLAST, MoveId.ARMOR_CANNON ], + [SpeciesId.PHANPY]: [ MoveId.SHORE_UP, MoveId.SWORDS_DANCE, MoveId.MOUNTAIN_GALE, MoveId.COLLISION_COURSE ], + [SpeciesId.STANTLER]: [ MoveId.THUNDEROUS_KICK, MoveId.PHOTON_GEYSER, MoveId.SWORDS_DANCE, MoveId.BOOMBURST ], + [SpeciesId.SMEARGLE]: [ MoveId.CONVERSION, MoveId.BURNING_BULWARK, MoveId.SALT_CURE, MoveId.DARK_VOID ], + [SpeciesId.TYROGUE]: [ MoveId.VICTORY_DANCE, MoveId.THUNDEROUS_KICK, MoveId.METEOR_MASH, MoveId.WICKED_BLOW ], + [SpeciesId.SMOOCHUM]: [ MoveId.LUSTER_PURGE, MoveId.AURA_SPHERE, MoveId.FREEZE_DRY, MoveId.QUIVER_DANCE ], + [SpeciesId.ELEKID]: [ MoveId.FIRE_LASH, MoveId.ZING_ZAP, MoveId.MOUNTAIN_GALE, MoveId.SHIFT_GEAR ], + [SpeciesId.MAGBY]: [ MoveId.THUNDERCLAP, MoveId.EARTH_POWER, MoveId.ENERGY_BALL, MoveId.BLUE_FLARE ], + [SpeciesId.MILTANK]: [ MoveId.BODY_PRESS, MoveId.BULK_UP, MoveId.KNOCK_OFF, MoveId.SIZZLY_SLIDE ], + [SpeciesId.RAIKOU]: [ MoveId.PARABOLIC_CHARGE, MoveId.NASTY_PLOT, MoveId.FROST_BREATH, MoveId.ELECTRO_DRIFT ], + [SpeciesId.ENTEI]: [ MoveId.BURNING_BULWARK, MoveId.DRAGON_DANCE, MoveId.EARTHQUAKE, MoveId.PYRO_BALL ], + [SpeciesId.SUICUNE]: [ MoveId.RECOVER, MoveId.NASTY_PLOT, MoveId.FREEZE_DRY, MoveId.STEAM_ERUPTION ], + [SpeciesId.LARVITAR]: [ MoveId.DRAGON_DANCE, MoveId.MOUNTAIN_GALE, MoveId.SHORE_UP, MoveId.DIAMOND_STORM ], + [SpeciesId.LUGIA]: [ MoveId.NASTY_PLOT, MoveId.LUMINA_CRASH, MoveId.AURA_SPHERE, MoveId.OBLIVION_WING ], + [SpeciesId.HO_OH]: [ MoveId.BRAVE_BIRD, MoveId.DRAGON_DANCE, MoveId.REVIVAL_BLESSING, MoveId.BOLT_BEAK ], + [SpeciesId.CELEBI]: [ MoveId.PHOTON_GEYSER, MoveId.MATCHA_GOTCHA, MoveId.REVIVAL_BLESSING, MoveId.QUIVER_DANCE ], - [Species.TREECKO]: [ Moves.NASTY_PLOT, Moves.CORE_ENFORCER, Moves.FLAMETHROWER, Moves.SEED_FLARE ], - [Species.TORCHIC]: [ Moves.THUNDEROUS_KICK, Moves.ZING_ZAP, Moves.BURNING_BULWARK, Moves.PYRO_BALL ], - [Species.MUDKIP]: [ Moves.SHORE_UP, Moves.MOUNTAIN_GALE, Moves.AQUA_STEP, Moves.PRECIPICE_BLADES ], - [Species.POOCHYENA]: [ Moves.KNOCK_OFF, Moves.CLOSE_COMBAT, Moves.DIRE_CLAW, Moves.VICTORY_DANCE ], - [Species.ZIGZAGOON]: [ Moves.EXTREME_SPEED, Moves.NUZZLE, Moves.HIGH_HORSEPOWER, Moves.TIDY_UP ], - [Species.WURMPLE]: [ Moves.BATON_PASS, Moves.BLEAKWIND_STORM, Moves.STORED_POWER, Moves.MALIGNANT_CHAIN ], - [Species.LOTAD]: [ Moves.REVELATION_DANCE, Moves.APPLE_ACID, Moves.ICE_BEAM, Moves.QUIVER_DANCE ], - [Species.SEEDOT]: [ Moves.SWORDS_DANCE, Moves.SACRED_SWORD, Moves.KOWTOW_CLEAVE, Moves.BITTER_BLADE ], - [Species.TAILLOW]: [ Moves.BOOMBURST, Moves.FACADE, Moves.HEADLONG_RUSH, Moves.NO_RETREAT ], - [Species.WINGULL]: [ Moves.THUNDER, Moves.FLIP_TURN, Moves.CALM_MIND, Moves.STEAM_ERUPTION ], - [Species.RALTS]: [ Moves.PSYBLADE, Moves.BITTER_BLADE, Moves.NO_RETREAT, Moves.BOOMBURST ], - [Species.SURSKIT]: [ Moves.POLLEN_PUFF, Moves.FIERY_DANCE, Moves.BOUNCY_BUBBLE, Moves.AEROBLAST ], - [Species.SHROOMISH]: [ Moves.ACCELEROCK, Moves.TRAILBLAZE, Moves.STORM_THROW, Moves.SAPPY_SEED ], - [Species.SLAKOTH]: [ Moves.FACADE, Moves.DRAIN_PUNCH, Moves.KNOCK_OFF, Moves.SKILL_SWAP ], - [Species.NINCADA]: [ Moves.BULLDOZE, Moves.STICKY_WEB, Moves.SHADOW_BONE, Moves.SHELL_SMASH ], - [Species.WHISMUR]: [ Moves.ALLURING_VOICE, Moves.SHIFT_GEAR, Moves.SPARKLING_ARIA, Moves.TORCH_SONG ], - [Species.MAKUHITA]: [ Moves.COMBAT_TORQUE, Moves.SLACK_OFF, Moves.HEAT_CRASH, Moves.DOUBLE_IRON_BASH ], - [Species.AZURILL]: [ Moves.JET_PUNCH, Moves.MAGICAL_TORQUE, Moves.SWORDS_DANCE, Moves.SURGING_STRIKES ], - [Species.NOSEPASS]: [ Moves.SHORE_UP, Moves.BODY_PRESS, Moves.CALM_MIND, Moves.TACHYON_CUTTER ], - [Species.SKITTY]: [ Moves.THUNDEROUS_KICK, Moves.ENTRAINMENT, Moves.TIDY_UP, Moves.V_CREATE ], - [Species.SABLEYE]: [ Moves.RECOVER, Moves.TOPSY_TURVY, Moves.CURSE, Moves.SALT_CURE ], - [Species.MAWILE]: [ Moves.BULLET_PUNCH, Moves.HORN_LEECH, Moves.EARTHQUAKE, Moves.MAGICAL_TORQUE ], - [Species.ARON]: [ Moves.HEAD_SMASH, Moves.BODY_PRESS, Moves.SHORE_UP, Moves.SALT_CURE ], - [Species.MEDITITE]: [ Moves.THUNDEROUS_KICK, Moves.SUCKER_PUNCH, Moves.BULLET_PUNCH, Moves.PHOTON_GEYSER ], - [Species.ELECTRIKE]: [ Moves.FROST_BREATH, Moves.HEAT_WAVE, Moves.NASTY_PLOT, Moves.ELECTRO_DRIFT ], - [Species.PLUSLE]: [ Moves.FLAMETHROWER, Moves.GLITZY_GLOW, Moves.SPLISHY_SPLASH, Moves.TAIL_GLOW ], - [Species.MINUN]: [ Moves.ICE_BEAM, Moves.BADDY_BAD, Moves.SPARKLY_SWIRL, Moves.TAIL_GLOW ], - [Species.VOLBEAT]: [ Moves.BATON_PASS, Moves.STICKY_WEB, Moves.DECORATE, Moves.VICTORY_DANCE ], - [Species.ILLUMISE]: [ Moves.PARTING_SHOT, Moves.GLITZY_GLOW, Moves.POWDER, Moves.QUIVER_DANCE ], - [Species.GULPIN]: [ Moves.MALIGNANT_CHAIN, Moves.EARTH_POWER, Moves.CALM_MIND, Moves.STRENGTH_SAP ], - [Species.CARVANHA]: [ Moves.THUNDER_FANG, Moves.GUNK_SHOT, Moves.OBSTRUCT, Moves.SURGING_STRIKES ], - [Species.WAILMER]: [ Moves.TAKE_HEART, Moves.COMEUPPANCE, Moves.SLACK_OFF, Moves.STEAM_ERUPTION ], - [Species.NUMEL]: [ Moves.TRICK_ROOM, Moves.ENERGY_BALL, Moves.SLACK_OFF, Moves.BLUE_FLARE ], - [Species.TORKOAL]: [ Moves.MORNING_SUN, Moves.BURNING_BULWARK, Moves.BODY_PRESS, Moves.HYDRO_STEAM ], - [Species.SPOINK]: [ Moves.AURA_SPHERE, Moves.MILK_DRINK, Moves.EXPANDING_FORCE, Moves.TAIL_GLOW ], - [Species.SPINDA]: [ Moves.SUPERPOWER, Moves.SLACK_OFF, Moves.FLEUR_CANNON, Moves.V_CREATE ], - [Species.TRAPINCH]: [ Moves.FIRE_LASH, Moves.DRAGON_DARTS, Moves.THOUSAND_ARROWS, Moves.DRAGON_ENERGY ], - [Species.CACNEA]: [ Moves.EARTH_POWER, Moves.CEASELESS_EDGE, Moves.NIGHT_DAZE, Moves.IVY_CUDGEL ], - [Species.SWABLU]: [ Moves.ROOST, Moves.NASTY_PLOT, Moves.FLOATY_FALL, Moves.BOOMBURST ], - [Species.ZANGOOSE]: [ Moves.FACADE, Moves.HIGH_HORSEPOWER, Moves.EXTREME_SPEED, Moves.TIDY_UP ], - [Species.SEVIPER]: [ Moves.ICE_BEAM, Moves.BITTER_BLADE, Moves.SUCKER_PUNCH, Moves.NO_RETREAT ], - [Species.LUNATONE]: [ Moves.REVELATION_DANCE, Moves.MOONGEIST_BEAM, Moves.SHELL_SMASH, Moves.LUMINA_CRASH ], - [Species.SOLROCK]: [ Moves.MIGHTY_CLEAVE, Moves.PHOTON_GEYSER, Moves.SHELL_SMASH, Moves.SACRED_FIRE ], - [Species.BARBOACH]: [ Moves.DRAGON_DANCE, Moves.ZING_ZAP, Moves.ICE_SPINNER, Moves.SURGING_STRIKES ], - [Species.CORPHISH]: [ Moves.CEASELESS_EDGE, Moves.SHELL_SIDE_ARM, Moves.SUCKER_PUNCH, Moves.JET_PUNCH ], - [Species.BALTOY]: [ Moves.RECOVER, Moves.GLARE, Moves.RUINATION, Moves.MYSTICAL_POWER ], - [Species.LILEEP]: [ Moves.POWER_GEM, Moves.SCALD, Moves.STRENGTH_SAP, Moves.SAPPY_SEED ], - [Species.ANORITH]: [ Moves.FIRST_IMPRESSION, Moves.LEECH_LIFE, Moves.DRAGON_DANCE, Moves.MIGHTY_CLEAVE ], - [Species.FEEBAS]: [ Moves.CALM_MIND, Moves.FREEZE_DRY, Moves.MOONBLAST, Moves.STEAM_ERUPTION ], - [Species.CASTFORM]: [ Moves.BOOMBURST, Moves.HYDRO_STEAM, Moves.ERUPTION, Moves.QUIVER_DANCE ], - [Species.KECLEON]: [ Moves.ZIPPY_ZAP, Moves.COIL, Moves.EXTREME_SPEED, Moves.MULTI_ATTACK ], - [Species.SHUPPET]: [ Moves.STORM_THROW, Moves.TIDY_UP, Moves.PARTING_SHOT, Moves.SPECTRAL_THIEF ], - [Species.DUSKULL]: [ Moves.BULK_UP, Moves.DRAIN_PUNCH, Moves.RECOVER, Moves.RAGE_FIST ], - [Species.TROPIUS]: [ Moves.STUFF_CHEEKS, Moves.EARTH_POWER, Moves.APPLE_ACID, Moves.SAPPY_SEED ], - [Species.ABSOL]: [ Moves.KOWTOW_CLEAVE, Moves.SACRED_SWORD, Moves.PSYBLADE, Moves.BITTER_BLADE ], - [Species.WYNAUT]: [ Moves.RECOVER, Moves.SHED_TAIL, Moves.TAUNT, Moves.COMEUPPANCE ], - [Species.SNORUNT]: [ Moves.SPARKLY_SWIRL, Moves.NASTY_PLOT, Moves.EARTH_POWER, Moves.BLOOD_MOON ], - [Species.SPHEAL]: [ Moves.FLIP_TURN, Moves.FREEZE_DRY, Moves.SLACK_OFF, Moves.STEAM_ERUPTION ], - [Species.CLAMPERL]: [ Moves.SHELL_SIDE_ARM, Moves.BOUNCY_BUBBLE, Moves.FREEZE_DRY, Moves.STEAM_ERUPTION ], - [Species.RELICANTH]: [ Moves.DRAGON_DANCE, Moves.SHORE_UP, Moves.WAVE_CRASH, Moves.DIAMOND_STORM ], - [Species.LUVDISC]: [ Moves.BATON_PASS, Moves.HEART_SWAP, Moves.GLITZY_GLOW, Moves.REVIVAL_BLESSING ], - [Species.BAGON]: [ Moves.HEADLONG_RUSH, Moves.FIRE_LASH, Moves.DRAGON_DANCE, Moves.DRAGON_DARTS ], - [Species.BELDUM]: [ Moves.HEADLONG_RUSH, Moves.DRAIN_PUNCH, Moves.ICE_SPINNER, Moves.SHIFT_GEAR ], - [Species.REGIROCK]: [ Moves.STONE_AXE, Moves.BODY_PRESS, Moves.SHORE_UP, Moves.SALT_CURE ], - [Species.REGICE]: [ Moves.EARTH_POWER, Moves.TAKE_HEART, Moves.RECOVER, Moves.FREEZE_DRY ], - [Species.REGISTEEL]: [ Moves.BODY_PRESS, Moves.SIZZLY_SLIDE, Moves.RECOVER, Moves.GIGATON_HAMMER ], - [Species.LATIAS]: [ Moves.CORE_ENFORCER, Moves.FUSION_FLARE, Moves.SPARKLY_SWIRL, Moves.MYSTICAL_POWER ], - [Species.LATIOS]: [ Moves.CORE_ENFORCER, Moves.BLUE_FLARE, Moves.NASTY_PLOT, Moves.TACHYON_CUTTER ], - [Species.KYOGRE]: [ Moves.RECOVER, Moves.HURRICANE, Moves.FREEZY_FROST, Moves.WILDBOLT_STORM ], - [Species.GROUDON]: [ Moves.STONE_AXE, Moves.SOLAR_BLADE, Moves.MORNING_SUN, Moves.SACRED_FIRE ], - [Species.RAYQUAZA]: [ Moves.V_CREATE, Moves.DRAGON_DARTS, Moves.CORE_ENFORCER, Moves.OBLIVION_WING ], - [Species.JIRACHI]: [ Moves.TACHYON_CUTTER, Moves.TRIPLE_ARROWS, Moves.ROCK_SLIDE, Moves.SHELL_SMASH ], - [Species.DEOXYS]: [ Moves.COLLISION_COURSE, Moves.FUSION_FLARE, Moves.PARTING_SHOT, Moves.LUMINA_CRASH ], + [SpeciesId.TREECKO]: [ MoveId.NASTY_PLOT, MoveId.CORE_ENFORCER, MoveId.FLAMETHROWER, MoveId.SEED_FLARE ], + [SpeciesId.TORCHIC]: [ MoveId.THUNDEROUS_KICK, MoveId.ZING_ZAP, MoveId.BURNING_BULWARK, MoveId.PYRO_BALL ], + [SpeciesId.MUDKIP]: [ MoveId.SHORE_UP, MoveId.MOUNTAIN_GALE, MoveId.AQUA_STEP, MoveId.PRECIPICE_BLADES ], + [SpeciesId.POOCHYENA]: [ MoveId.KNOCK_OFF, MoveId.CLOSE_COMBAT, MoveId.DIRE_CLAW, MoveId.VICTORY_DANCE ], + [SpeciesId.ZIGZAGOON]: [ MoveId.EXTREME_SPEED, MoveId.NUZZLE, MoveId.HIGH_HORSEPOWER, MoveId.TIDY_UP ], + [SpeciesId.WURMPLE]: [ MoveId.BATON_PASS, MoveId.BLEAKWIND_STORM, MoveId.STORED_POWER, MoveId.MALIGNANT_CHAIN ], + [SpeciesId.LOTAD]: [ MoveId.REVELATION_DANCE, MoveId.APPLE_ACID, MoveId.ICE_BEAM, MoveId.QUIVER_DANCE ], + [SpeciesId.SEEDOT]: [ MoveId.SWORDS_DANCE, MoveId.SACRED_SWORD, MoveId.KOWTOW_CLEAVE, MoveId.BITTER_BLADE ], + [SpeciesId.TAILLOW]: [ MoveId.BOOMBURST, MoveId.FACADE, MoveId.HEADLONG_RUSH, MoveId.NO_RETREAT ], + [SpeciesId.WINGULL]: [ MoveId.THUNDER, MoveId.FLIP_TURN, MoveId.CALM_MIND, MoveId.STEAM_ERUPTION ], + [SpeciesId.RALTS]: [ MoveId.PSYBLADE, MoveId.BITTER_BLADE, MoveId.NO_RETREAT, MoveId.BOOMBURST ], + [SpeciesId.SURSKIT]: [ MoveId.POLLEN_PUFF, MoveId.FIERY_DANCE, MoveId.BOUNCY_BUBBLE, MoveId.AEROBLAST ], + [SpeciesId.SHROOMISH]: [ MoveId.ACCELEROCK, MoveId.TRAILBLAZE, MoveId.STORM_THROW, MoveId.SAPPY_SEED ], + [SpeciesId.SLAKOTH]: [ MoveId.FACADE, MoveId.DRAIN_PUNCH, MoveId.KNOCK_OFF, MoveId.SKILL_SWAP ], + [SpeciesId.NINCADA]: [ MoveId.BULLDOZE, MoveId.STICKY_WEB, MoveId.SHADOW_BONE, MoveId.SHELL_SMASH ], + [SpeciesId.WHISMUR]: [ MoveId.ALLURING_VOICE, MoveId.SHIFT_GEAR, MoveId.SPARKLING_ARIA, MoveId.TORCH_SONG ], + [SpeciesId.MAKUHITA]: [ MoveId.COMBAT_TORQUE, MoveId.SLACK_OFF, MoveId.HEAT_CRASH, MoveId.DOUBLE_IRON_BASH ], + [SpeciesId.AZURILL]: [ MoveId.JET_PUNCH, MoveId.MAGICAL_TORQUE, MoveId.SWORDS_DANCE, MoveId.SURGING_STRIKES ], + [SpeciesId.NOSEPASS]: [ MoveId.SHORE_UP, MoveId.BODY_PRESS, MoveId.CALM_MIND, MoveId.TACHYON_CUTTER ], + [SpeciesId.SKITTY]: [ MoveId.THUNDEROUS_KICK, MoveId.ENTRAINMENT, MoveId.TIDY_UP, MoveId.V_CREATE ], + [SpeciesId.SABLEYE]: [ MoveId.RECOVER, MoveId.TOPSY_TURVY, MoveId.CURSE, MoveId.SALT_CURE ], + [SpeciesId.MAWILE]: [ MoveId.BULLET_PUNCH, MoveId.HORN_LEECH, MoveId.EARTHQUAKE, MoveId.MAGICAL_TORQUE ], + [SpeciesId.ARON]: [ MoveId.HEAD_SMASH, MoveId.BODY_PRESS, MoveId.SHORE_UP, MoveId.SALT_CURE ], + [SpeciesId.MEDITITE]: [ MoveId.THUNDEROUS_KICK, MoveId.SUCKER_PUNCH, MoveId.BULLET_PUNCH, MoveId.PHOTON_GEYSER ], + [SpeciesId.ELECTRIKE]: [ MoveId.FROST_BREATH, MoveId.HEAT_WAVE, MoveId.NASTY_PLOT, MoveId.ELECTRO_DRIFT ], + [SpeciesId.PLUSLE]: [ MoveId.FLAMETHROWER, MoveId.GLITZY_GLOW, MoveId.SPLISHY_SPLASH, MoveId.TAIL_GLOW ], + [SpeciesId.MINUN]: [ MoveId.ICE_BEAM, MoveId.BADDY_BAD, MoveId.SPARKLY_SWIRL, MoveId.TAIL_GLOW ], + [SpeciesId.VOLBEAT]: [ MoveId.BATON_PASS, MoveId.STICKY_WEB, MoveId.DECORATE, MoveId.VICTORY_DANCE ], + [SpeciesId.ILLUMISE]: [ MoveId.PARTING_SHOT, MoveId.GLITZY_GLOW, MoveId.POWDER, MoveId.QUIVER_DANCE ], + [SpeciesId.GULPIN]: [ MoveId.MALIGNANT_CHAIN, MoveId.EARTH_POWER, MoveId.CALM_MIND, MoveId.STRENGTH_SAP ], + [SpeciesId.CARVANHA]: [ MoveId.THUNDER_FANG, MoveId.GUNK_SHOT, MoveId.OBSTRUCT, MoveId.SURGING_STRIKES ], + [SpeciesId.WAILMER]: [ MoveId.TAKE_HEART, MoveId.COMEUPPANCE, MoveId.SLACK_OFF, MoveId.STEAM_ERUPTION ], + [SpeciesId.NUMEL]: [ MoveId.TRICK_ROOM, MoveId.ENERGY_BALL, MoveId.SLACK_OFF, MoveId.BLUE_FLARE ], + [SpeciesId.TORKOAL]: [ MoveId.MORNING_SUN, MoveId.BURNING_BULWARK, MoveId.BODY_PRESS, MoveId.HYDRO_STEAM ], + [SpeciesId.SPOINK]: [ MoveId.AURA_SPHERE, MoveId.MILK_DRINK, MoveId.EXPANDING_FORCE, MoveId.TAIL_GLOW ], + [SpeciesId.SPINDA]: [ MoveId.SUPERPOWER, MoveId.SLACK_OFF, MoveId.FLEUR_CANNON, MoveId.V_CREATE ], + [SpeciesId.TRAPINCH]: [ MoveId.FIRE_LASH, MoveId.DRAGON_DARTS, MoveId.THOUSAND_ARROWS, MoveId.DRAGON_ENERGY ], + [SpeciesId.CACNEA]: [ MoveId.EARTH_POWER, MoveId.CEASELESS_EDGE, MoveId.NIGHT_DAZE, MoveId.IVY_CUDGEL ], + [SpeciesId.SWABLU]: [ MoveId.ROOST, MoveId.NASTY_PLOT, MoveId.FLOATY_FALL, MoveId.BOOMBURST ], + [SpeciesId.ZANGOOSE]: [ MoveId.FACADE, MoveId.HIGH_HORSEPOWER, MoveId.EXTREME_SPEED, MoveId.TIDY_UP ], + [SpeciesId.SEVIPER]: [ MoveId.ICE_BEAM, MoveId.BITTER_BLADE, MoveId.SUCKER_PUNCH, MoveId.NO_RETREAT ], + [SpeciesId.LUNATONE]: [ MoveId.REVELATION_DANCE, MoveId.MOONGEIST_BEAM, MoveId.SHELL_SMASH, MoveId.LUMINA_CRASH ], + [SpeciesId.SOLROCK]: [ MoveId.MIGHTY_CLEAVE, MoveId.PHOTON_GEYSER, MoveId.SHELL_SMASH, MoveId.SACRED_FIRE ], + [SpeciesId.BARBOACH]: [ MoveId.DRAGON_DANCE, MoveId.ZING_ZAP, MoveId.ICE_SPINNER, MoveId.SURGING_STRIKES ], + [SpeciesId.CORPHISH]: [ MoveId.CEASELESS_EDGE, MoveId.SHELL_SIDE_ARM, MoveId.SUCKER_PUNCH, MoveId.JET_PUNCH ], + [SpeciesId.BALTOY]: [ MoveId.RECOVER, MoveId.GLARE, MoveId.RUINATION, MoveId.MYSTICAL_POWER ], + [SpeciesId.LILEEP]: [ MoveId.POWER_GEM, MoveId.SCALD, MoveId.STRENGTH_SAP, MoveId.SAPPY_SEED ], + [SpeciesId.ANORITH]: [ MoveId.FIRST_IMPRESSION, MoveId.LEECH_LIFE, MoveId.DRAGON_DANCE, MoveId.MIGHTY_CLEAVE ], + [SpeciesId.FEEBAS]: [ MoveId.CALM_MIND, MoveId.FREEZE_DRY, MoveId.MOONBLAST, MoveId.STEAM_ERUPTION ], + [SpeciesId.CASTFORM]: [ MoveId.BOOMBURST, MoveId.HYDRO_STEAM, MoveId.ERUPTION, MoveId.QUIVER_DANCE ], + [SpeciesId.KECLEON]: [ MoveId.ZIPPY_ZAP, MoveId.COIL, MoveId.EXTREME_SPEED, MoveId.MULTI_ATTACK ], + [SpeciesId.SHUPPET]: [ MoveId.STORM_THROW, MoveId.TIDY_UP, MoveId.PARTING_SHOT, MoveId.SPECTRAL_THIEF ], + [SpeciesId.DUSKULL]: [ MoveId.BULK_UP, MoveId.DRAIN_PUNCH, MoveId.RECOVER, MoveId.RAGE_FIST ], + [SpeciesId.TROPIUS]: [ MoveId.STUFF_CHEEKS, MoveId.EARTH_POWER, MoveId.APPLE_ACID, MoveId.SAPPY_SEED ], + [SpeciesId.ABSOL]: [ MoveId.KOWTOW_CLEAVE, MoveId.SACRED_SWORD, MoveId.PSYBLADE, MoveId.BITTER_BLADE ], + [SpeciesId.WYNAUT]: [ MoveId.RECOVER, MoveId.SHED_TAIL, MoveId.TAUNT, MoveId.COMEUPPANCE ], + [SpeciesId.SNORUNT]: [ MoveId.SPARKLY_SWIRL, MoveId.NASTY_PLOT, MoveId.EARTH_POWER, MoveId.BLOOD_MOON ], + [SpeciesId.SPHEAL]: [ MoveId.FLIP_TURN, MoveId.FREEZE_DRY, MoveId.SLACK_OFF, MoveId.STEAM_ERUPTION ], + [SpeciesId.CLAMPERL]: [ MoveId.SHELL_SIDE_ARM, MoveId.BOUNCY_BUBBLE, MoveId.FREEZE_DRY, MoveId.STEAM_ERUPTION ], + [SpeciesId.RELICANTH]: [ MoveId.DRAGON_DANCE, MoveId.SHORE_UP, MoveId.WAVE_CRASH, MoveId.DIAMOND_STORM ], + [SpeciesId.LUVDISC]: [ MoveId.BATON_PASS, MoveId.HEART_SWAP, MoveId.GLITZY_GLOW, MoveId.REVIVAL_BLESSING ], + [SpeciesId.BAGON]: [ MoveId.HEADLONG_RUSH, MoveId.FIRE_LASH, MoveId.DRAGON_DANCE, MoveId.DRAGON_DARTS ], + [SpeciesId.BELDUM]: [ MoveId.HEADLONG_RUSH, MoveId.DRAIN_PUNCH, MoveId.ICE_SPINNER, MoveId.SHIFT_GEAR ], + [SpeciesId.REGIROCK]: [ MoveId.STONE_AXE, MoveId.BODY_PRESS, MoveId.SHORE_UP, MoveId.SALT_CURE ], + [SpeciesId.REGICE]: [ MoveId.EARTH_POWER, MoveId.TAKE_HEART, MoveId.RECOVER, MoveId.FREEZE_DRY ], + [SpeciesId.REGISTEEL]: [ MoveId.BODY_PRESS, MoveId.SIZZLY_SLIDE, MoveId.RECOVER, MoveId.GIGATON_HAMMER ], + [SpeciesId.LATIAS]: [ MoveId.CORE_ENFORCER, MoveId.FUSION_FLARE, MoveId.SPARKLY_SWIRL, MoveId.MYSTICAL_POWER ], + [SpeciesId.LATIOS]: [ MoveId.CORE_ENFORCER, MoveId.BLUE_FLARE, MoveId.NASTY_PLOT, MoveId.TACHYON_CUTTER ], + [SpeciesId.KYOGRE]: [ MoveId.RECOVER, MoveId.HURRICANE, MoveId.FREEZY_FROST, MoveId.WILDBOLT_STORM ], + [SpeciesId.GROUDON]: [ MoveId.STONE_AXE, MoveId.SOLAR_BLADE, MoveId.MORNING_SUN, MoveId.SACRED_FIRE ], + [SpeciesId.RAYQUAZA]: [ MoveId.V_CREATE, MoveId.DRAGON_DARTS, MoveId.CORE_ENFORCER, MoveId.OBLIVION_WING ], + [SpeciesId.JIRACHI]: [ MoveId.TACHYON_CUTTER, MoveId.TRIPLE_ARROWS, MoveId.ROCK_SLIDE, MoveId.SHELL_SMASH ], + [SpeciesId.DEOXYS]: [ MoveId.COLLISION_COURSE, MoveId.FUSION_FLARE, MoveId.PARTING_SHOT, MoveId.LUMINA_CRASH ], - [Species.TURTWIG]: [ Moves.SHELL_SMASH, Moves.MIGHTY_CLEAVE, Moves.ICE_SPINNER, Moves.SAPPY_SEED ], - [Species.CHIMCHAR]: [ Moves.THUNDERBOLT, Moves.SECRET_SWORD, Moves.TRIPLE_AXEL, Moves.SACRED_FIRE ], - [Species.PIPLUP]: [ Moves.KINGS_SHIELD, Moves.TACHYON_CUTTER, Moves.FREEZE_DRY, Moves.STEAM_ERUPTION ], - [Species.STARLY]: [ Moves.SWORDS_DANCE, Moves.HEAD_CHARGE, Moves.FLARE_BLITZ, Moves.EXTREME_SPEED ], - [Species.BIDOOF]: [ Moves.EXTREME_SPEED, Moves.COSMIC_POWER, Moves.POWER_TRIP, Moves.AQUA_STEP ], - [Species.KRICKETOT]: [ Moves.BONEMERANG, Moves.VICTORY_DANCE, Moves.STONE_AXE, Moves.POPULATION_BOMB ], - [Species.SHINX]: [ Moves.FIRE_LASH, Moves.TRIPLE_AXEL, Moves.ZIPPY_ZAP, Moves.BOLT_STRIKE ], - [Species.BUDEW]: [ Moves.FIERY_DANCE, Moves.ACID_SPRAY, Moves.BOUNCY_BUBBLE, Moves.QUIVER_DANCE ], - [Species.CRANIDOS]: [ Moves.VOLT_TACKLE, Moves.ACCELEROCK, Moves.FLARE_BLITZ, Moves.SHIFT_GEAR ], - [Species.SHIELDON]: [ Moves.SHORE_UP, Moves.BODY_PRESS, Moves.KINGS_SHIELD, Moves.DIAMOND_STORM ], - [Species.BURMY]: [ Moves.FIERY_DANCE, Moves.DEFEND_ORDER, Moves.HEAL_ORDER, Moves.SAPPY_SEED ], - [Species.COMBEE]: [ Moves.SPORE, Moves.FLOATY_FALL, Moves.KINGS_SHIELD, Moves.VICTORY_DANCE ], - [Species.PACHIRISU]: [ Moves.FREEZY_FROST, Moves.SIZZLY_SLIDE, Moves.SLACK_OFF, Moves.THUNDER_CAGE ], - [Species.BUIZEL]: [ Moves.JET_PUNCH, Moves.TRIPLE_AXEL, Moves.SUPERCELL_SLAM, Moves.SURGING_STRIKES ], - [Species.CHERUBI]: [ Moves.SLEEP_POWDER, Moves.STRENGTH_SAP, Moves.FIRE_LASH, Moves.FLOWER_TRICK ], - [Species.SHELLOS]: [ Moves.BOUNCY_BUBBLE, Moves.SCORCHING_SANDS, Moves.FREEZE_DRY, Moves.STEAM_ERUPTION ], - [Species.DRIFLOON]: [ Moves.PSYCHO_SHIFT, Moves.MIND_BLOWN, Moves.CALM_MIND, Moves.OBLIVION_WING ], - [Species.BUNEARY]: [ Moves.TRIPLE_AXEL, Moves.EXTREME_SPEED, Moves.THUNDEROUS_KICK, Moves.SWORDS_DANCE ], - [Species.GLAMEOW]: [ Moves.PARTING_SHOT, Moves.HIGH_HORSEPOWER, Moves.SWORDS_DANCE, Moves.EXTREME_SPEED ], - [Species.CHINGLING]: [ Moves.ALLURING_VOICE, Moves.EERIE_SPELL, Moves.TORCH_SONG, Moves.BOOMBURST ], - [Species.STUNKY]: [ Moves.CEASELESS_EDGE, Moves.FIRE_LASH, Moves.RECOVER, Moves.DIRE_CLAW ], - [Species.BRONZOR]: [ Moves.RECOVER, Moves.TACHYON_CUTTER, Moves.GLARE, Moves.LUMINA_CRASH ], - [Species.BONSLY]: [ Moves.ACCELEROCK, Moves.SWORDS_DANCE, Moves.STRENGTH_SAP, Moves.SAPPY_SEED ], - [Species.MIME_JR]: [ Moves.CHILLY_RECEPTION, Moves.MOONBLAST, Moves.FROST_BREATH, Moves.LUMINA_CRASH ], - [Species.HAPPINY]: [ Moves.COTTON_GUARD, Moves.SEISMIC_TOSS, Moves.SIZZLY_SLIDE, Moves.REVIVAL_BLESSING ], - [Species.CHATOT]: [ Moves.SPARKLING_ARIA, Moves.BOOMBURST, Moves.BATON_PASS, Moves.TORCH_SONG ], - [Species.SPIRITOMB]: [ Moves.PARTING_SHOT, Moves.BADDY_BAD, Moves.STRENGTH_SAP, Moves.SPECTRAL_THIEF ], - [Species.GIBLE]: [ Moves.METEOR_MASH, Moves.BITTER_BLADE, Moves.LANDS_WRATH, Moves.DRAGON_DANCE ], - [Species.MUNCHLAX]: [ Moves.STUFF_CHEEKS, Moves.GRAV_APPLE, Moves.SLACK_OFF, Moves.EXTREME_SPEED ], - [Species.RIOLU]: [ Moves.THUNDEROUS_KICK, Moves.TACHYON_CUTTER, Moves.TRIPLE_AXEL, Moves.SUNSTEEL_STRIKE ], - [Species.HIPPOPOTAS]: [ Moves.SHORE_UP, Moves.STONE_AXE, Moves.BULK_UP, Moves.SALT_CURE ], - [Species.SKORUPI]: [ Moves.COIL, Moves.DIRE_CLAW, Moves.CRABHAMMER, Moves.WICKED_BLOW ], - [Species.CROAGUNK]: [ Moves.DIRE_CLAW, Moves.TRIPLE_AXEL, Moves.THUNDEROUS_KICK, Moves.VICTORY_DANCE ], - [Species.CARNIVINE]: [ Moves.STRENGTH_SAP, Moves.FIRE_LASH, Moves.COIL, Moves.SAPPY_SEED ], - [Species.FINNEON]: [ Moves.QUIVER_DANCE, Moves.SPLISHY_SPLASH, Moves.FREEZE_DRY, Moves.OBLIVION_WING ], - [Species.MANTYKE]: [ Moves.SPLISHY_SPLASH, Moves.FREEZY_FROST, Moves.NASTY_PLOT, Moves.OBLIVION_WING ], - [Species.SNOVER]: [ Moves.LANDS_WRATH, Moves.POWDER, Moves.CALM_MIND, Moves.MATCHA_GOTCHA ], - [Species.ROTOM]: [ Moves.STRENGTH_SAP, Moves.FIERY_DANCE, Moves.SPLISHY_SPLASH, Moves.ELECTRO_DRIFT ], - [Species.UXIE]: [ Moves.LUMINA_CRASH, Moves.AURA_SPHERE, Moves.RECOVER, Moves.TAIL_GLOW ], - [Species.MESPRIT]: [ Moves.PHOTON_GEYSER, Moves.AURA_SPHERE, Moves.RECOVER, Moves.TAIL_GLOW ], - [Species.AZELF]: [ Moves.PSYSTRIKE, Moves.AURA_SPHERE, Moves.ICE_BEAM, Moves.TAIL_GLOW ], - [Species.DIALGA]: [ Moves.CORE_ENFORCER, Moves.TAKE_HEART, Moves.RECOVER, Moves.MAKE_IT_RAIN ], - [Species.PALKIA]: [ Moves.MALIGNANT_CHAIN, Moves.TAKE_HEART, Moves.RECOVER, Moves.ORIGIN_PULSE ], - [Species.HEATRAN]: [ Moves.ENERGY_BALL, Moves.RECOVER, Moves.ERUPTION, Moves.TACHYON_CUTTER ], - [Species.REGIGIGAS]: [ Moves.SKILL_SWAP, Moves.RECOVER, Moves.EXTREME_SPEED, Moves.GIGATON_HAMMER ], - [Species.GIRATINA]: [ Moves.DRAGON_DANCE, Moves.SPECTRAL_THIEF, Moves.RECOVER, Moves.COLLISION_COURSE ], - [Species.CRESSELIA]: [ Moves.COSMIC_POWER, Moves.BODY_PRESS, Moves.SIZZLY_SLIDE, Moves.LUMINA_CRASH ], - [Species.PHIONE]: [ Moves.BOUNCY_BUBBLE, Moves.FREEZE_DRY, Moves.STORED_POWER, Moves.ORIGIN_PULSE ], - [Species.MANAPHY]: [ Moves.BOUNCY_BUBBLE, Moves.FROST_BREATH, Moves.WILDBOLT_STORM, Moves.ORIGIN_PULSE ], - [Species.DARKRAI]: [ Moves.FIERY_WRATH, Moves.MOONBLAST, Moves.FIERY_DANCE, Moves.MAKE_IT_RAIN ], - [Species.SHAYMIN]: [ Moves.MATCHA_GOTCHA, Moves.FIERY_DANCE, Moves.AEROBLAST, Moves.QUIVER_DANCE ], - [Species.ARCEUS]: [ Moves.NO_RETREAT, Moves.COLLISION_COURSE, Moves.ASTRAL_BARRAGE, Moves.MULTI_ATTACK ], + [SpeciesId.TURTWIG]: [ MoveId.SHELL_SMASH, MoveId.MIGHTY_CLEAVE, MoveId.ICE_SPINNER, MoveId.SAPPY_SEED ], + [SpeciesId.CHIMCHAR]: [ MoveId.THUNDERBOLT, MoveId.SECRET_SWORD, MoveId.TRIPLE_AXEL, MoveId.SACRED_FIRE ], + [SpeciesId.PIPLUP]: [ MoveId.KINGS_SHIELD, MoveId.TACHYON_CUTTER, MoveId.FREEZE_DRY, MoveId.STEAM_ERUPTION ], + [SpeciesId.STARLY]: [ MoveId.SWORDS_DANCE, MoveId.HEAD_CHARGE, MoveId.FLARE_BLITZ, MoveId.EXTREME_SPEED ], + [SpeciesId.BIDOOF]: [ MoveId.EXTREME_SPEED, MoveId.COSMIC_POWER, MoveId.POWER_TRIP, MoveId.AQUA_STEP ], + [SpeciesId.KRICKETOT]: [ MoveId.BONEMERANG, MoveId.VICTORY_DANCE, MoveId.STONE_AXE, MoveId.POPULATION_BOMB ], + [SpeciesId.SHINX]: [ MoveId.FIRE_LASH, MoveId.TRIPLE_AXEL, MoveId.ZIPPY_ZAP, MoveId.BOLT_STRIKE ], + [SpeciesId.BUDEW]: [ MoveId.FIERY_DANCE, MoveId.ACID_SPRAY, MoveId.BOUNCY_BUBBLE, MoveId.QUIVER_DANCE ], + [SpeciesId.CRANIDOS]: [ MoveId.VOLT_TACKLE, MoveId.ACCELEROCK, MoveId.FLARE_BLITZ, MoveId.SHIFT_GEAR ], + [SpeciesId.SHIELDON]: [ MoveId.SHORE_UP, MoveId.BODY_PRESS, MoveId.KINGS_SHIELD, MoveId.DIAMOND_STORM ], + [SpeciesId.BURMY]: [ MoveId.FIERY_DANCE, MoveId.DEFEND_ORDER, MoveId.HEAL_ORDER, MoveId.SAPPY_SEED ], + [SpeciesId.COMBEE]: [ MoveId.SPORE, MoveId.FLOATY_FALL, MoveId.KINGS_SHIELD, MoveId.VICTORY_DANCE ], + [SpeciesId.PACHIRISU]: [ MoveId.FREEZY_FROST, MoveId.SIZZLY_SLIDE, MoveId.SLACK_OFF, MoveId.THUNDER_CAGE ], + [SpeciesId.BUIZEL]: [ MoveId.JET_PUNCH, MoveId.TRIPLE_AXEL, MoveId.SUPERCELL_SLAM, MoveId.SURGING_STRIKES ], + [SpeciesId.CHERUBI]: [ MoveId.SLEEP_POWDER, MoveId.STRENGTH_SAP, MoveId.FIRE_LASH, MoveId.FLOWER_TRICK ], + [SpeciesId.SHELLOS]: [ MoveId.BOUNCY_BUBBLE, MoveId.SCORCHING_SANDS, MoveId.FREEZE_DRY, MoveId.STEAM_ERUPTION ], + [SpeciesId.DRIFLOON]: [ MoveId.PSYCHO_SHIFT, MoveId.MIND_BLOWN, MoveId.CALM_MIND, MoveId.OBLIVION_WING ], + [SpeciesId.BUNEARY]: [ MoveId.TRIPLE_AXEL, MoveId.EXTREME_SPEED, MoveId.THUNDEROUS_KICK, MoveId.SWORDS_DANCE ], + [SpeciesId.GLAMEOW]: [ MoveId.PARTING_SHOT, MoveId.HIGH_HORSEPOWER, MoveId.SWORDS_DANCE, MoveId.EXTREME_SPEED ], + [SpeciesId.CHINGLING]: [ MoveId.ALLURING_VOICE, MoveId.EERIE_SPELL, MoveId.TORCH_SONG, MoveId.BOOMBURST ], + [SpeciesId.STUNKY]: [ MoveId.CEASELESS_EDGE, MoveId.FIRE_LASH, MoveId.RECOVER, MoveId.DIRE_CLAW ], + [SpeciesId.BRONZOR]: [ MoveId.RECOVER, MoveId.TACHYON_CUTTER, MoveId.GLARE, MoveId.LUMINA_CRASH ], + [SpeciesId.BONSLY]: [ MoveId.ACCELEROCK, MoveId.SWORDS_DANCE, MoveId.STRENGTH_SAP, MoveId.SAPPY_SEED ], + [SpeciesId.MIME_JR]: [ MoveId.CHILLY_RECEPTION, MoveId.MOONBLAST, MoveId.FROST_BREATH, MoveId.LUMINA_CRASH ], + [SpeciesId.HAPPINY]: [ MoveId.COTTON_GUARD, MoveId.SEISMIC_TOSS, MoveId.SIZZLY_SLIDE, MoveId.REVIVAL_BLESSING ], + [SpeciesId.CHATOT]: [ MoveId.SPARKLING_ARIA, MoveId.BOOMBURST, MoveId.BATON_PASS, MoveId.TORCH_SONG ], + [SpeciesId.SPIRITOMB]: [ MoveId.PARTING_SHOT, MoveId.BADDY_BAD, MoveId.STRENGTH_SAP, MoveId.SPECTRAL_THIEF ], + [SpeciesId.GIBLE]: [ MoveId.METEOR_MASH, MoveId.BITTER_BLADE, MoveId.LANDS_WRATH, MoveId.DRAGON_DANCE ], + [SpeciesId.MUNCHLAX]: [ MoveId.STUFF_CHEEKS, MoveId.GRAV_APPLE, MoveId.SLACK_OFF, MoveId.EXTREME_SPEED ], + [SpeciesId.RIOLU]: [ MoveId.THUNDEROUS_KICK, MoveId.TACHYON_CUTTER, MoveId.TRIPLE_AXEL, MoveId.SUNSTEEL_STRIKE ], + [SpeciesId.HIPPOPOTAS]: [ MoveId.SHORE_UP, MoveId.STONE_AXE, MoveId.BULK_UP, MoveId.SALT_CURE ], + [SpeciesId.SKORUPI]: [ MoveId.COIL, MoveId.DIRE_CLAW, MoveId.CRABHAMMER, MoveId.WICKED_BLOW ], + [SpeciesId.CROAGUNK]: [ MoveId.DIRE_CLAW, MoveId.TRIPLE_AXEL, MoveId.THUNDEROUS_KICK, MoveId.VICTORY_DANCE ], + [SpeciesId.CARNIVINE]: [ MoveId.STRENGTH_SAP, MoveId.FIRE_LASH, MoveId.COIL, MoveId.SAPPY_SEED ], + [SpeciesId.FINNEON]: [ MoveId.QUIVER_DANCE, MoveId.SPLISHY_SPLASH, MoveId.FREEZE_DRY, MoveId.OBLIVION_WING ], + [SpeciesId.MANTYKE]: [ MoveId.SPLISHY_SPLASH, MoveId.FREEZY_FROST, MoveId.NASTY_PLOT, MoveId.OBLIVION_WING ], + [SpeciesId.SNOVER]: [ MoveId.LANDS_WRATH, MoveId.POWDER, MoveId.CALM_MIND, MoveId.MATCHA_GOTCHA ], + [SpeciesId.ROTOM]: [ MoveId.STRENGTH_SAP, MoveId.FIERY_DANCE, MoveId.SPLISHY_SPLASH, MoveId.ELECTRO_DRIFT ], + [SpeciesId.UXIE]: [ MoveId.LUMINA_CRASH, MoveId.AURA_SPHERE, MoveId.RECOVER, MoveId.TAIL_GLOW ], + [SpeciesId.MESPRIT]: [ MoveId.PHOTON_GEYSER, MoveId.AURA_SPHERE, MoveId.RECOVER, MoveId.TAIL_GLOW ], + [SpeciesId.AZELF]: [ MoveId.PSYSTRIKE, MoveId.AURA_SPHERE, MoveId.ICE_BEAM, MoveId.TAIL_GLOW ], + [SpeciesId.DIALGA]: [ MoveId.CORE_ENFORCER, MoveId.TAKE_HEART, MoveId.RECOVER, MoveId.MAKE_IT_RAIN ], + [SpeciesId.PALKIA]: [ MoveId.MALIGNANT_CHAIN, MoveId.TAKE_HEART, MoveId.RECOVER, MoveId.ORIGIN_PULSE ], + [SpeciesId.HEATRAN]: [ MoveId.ENERGY_BALL, MoveId.RECOVER, MoveId.ERUPTION, MoveId.TACHYON_CUTTER ], + [SpeciesId.REGIGIGAS]: [ MoveId.SKILL_SWAP, MoveId.RECOVER, MoveId.EXTREME_SPEED, MoveId.GIGATON_HAMMER ], + [SpeciesId.GIRATINA]: [ MoveId.DRAGON_DANCE, MoveId.SPECTRAL_THIEF, MoveId.RECOVER, MoveId.COLLISION_COURSE ], + [SpeciesId.CRESSELIA]: [ MoveId.COSMIC_POWER, MoveId.BODY_PRESS, MoveId.SIZZLY_SLIDE, MoveId.LUMINA_CRASH ], + [SpeciesId.PHIONE]: [ MoveId.BOUNCY_BUBBLE, MoveId.FREEZE_DRY, MoveId.STORED_POWER, MoveId.ORIGIN_PULSE ], + [SpeciesId.MANAPHY]: [ MoveId.BOUNCY_BUBBLE, MoveId.FROST_BREATH, MoveId.WILDBOLT_STORM, MoveId.ORIGIN_PULSE ], + [SpeciesId.DARKRAI]: [ MoveId.FIERY_WRATH, MoveId.MOONBLAST, MoveId.FIERY_DANCE, MoveId.MAKE_IT_RAIN ], + [SpeciesId.SHAYMIN]: [ MoveId.MATCHA_GOTCHA, MoveId.FIERY_DANCE, MoveId.AEROBLAST, MoveId.QUIVER_DANCE ], + [SpeciesId.ARCEUS]: [ MoveId.NO_RETREAT, MoveId.COLLISION_COURSE, MoveId.ASTRAL_BARRAGE, MoveId.MULTI_ATTACK ], - [Species.VICTINI]: [ Moves.BLUE_FLARE, Moves.BOLT_STRIKE, Moves.LUSTER_PURGE, Moves.VICTORY_DANCE ], - [Species.SNIVY]: [ Moves.FLAMETHROWER, Moves.CLANGING_SCALES, Moves.MAKE_IT_RAIN, Moves.FLEUR_CANNON ], - [Species.TEPIG]: [ Moves.WAVE_CRASH, Moves.VOLT_TACKLE, Moves.AXE_KICK, Moves.VICTORY_DANCE ], - [Species.OSHAWOTT]: [ Moves.FREEZE_DRY, Moves.SHELL_SIDE_ARM, Moves.SACRED_SWORD, Moves.SHELL_SMASH ], - [Species.PATRAT]: [ Moves.FAKE_OUT, Moves.SWORDS_DANCE, Moves.DYNAMIC_PUNCH, Moves.EXTREME_SPEED ], - [Species.LILLIPUP]: [ Moves.CLOSE_COMBAT, Moves.BODY_SLAM, Moves.HIGH_HORSEPOWER, Moves.LAST_RESPECTS ], - [Species.PURRLOIN]: [ Moves.ENCORE, Moves.OBSTRUCT, Moves.PARTING_SHOT, Moves.WICKED_BLOW ], - [Species.PANSAGE]: [ Moves.SWORDS_DANCE, Moves.FIRE_LASH, Moves.EARTHQUAKE, Moves.IVY_CUDGEL ], - [Species.PANSEAR]: [ Moves.NASTY_PLOT, Moves.HYDRO_STEAM, Moves.EARTH_POWER, Moves.ERUPTION ], - [Species.PANPOUR]: [ Moves.NASTY_PLOT, Moves.ENERGY_BALL, Moves.EARTH_POWER, Moves.WATER_SPOUT ], - [Species.MUNNA]: [ Moves.COSMIC_POWER, Moves.AURA_SPHERE, Moves.LUNAR_BLESSING, Moves.MYSTICAL_POWER ], - [Species.PIDOVE]: [ Moves.SLASH, Moves.TIDY_UP, Moves.FLOATY_FALL, Moves.TRIPLE_ARROWS ], - [Species.BLITZLE]: [ Moves.HORN_LEECH, Moves.SWORDS_DANCE, Moves.FLARE_BLITZ, Moves.BOLT_STRIKE ], - [Species.ROGGENROLA]: [ Moves.BODY_PRESS, Moves.CURSE, Moves.SHORE_UP, Moves.DIAMOND_STORM ], - [Species.WOOBAT]: [ Moves.ESPER_WING, Moves.STORED_POWER, Moves.MYSTICAL_FIRE, Moves.OBLIVION_WING ], - [Species.DRILBUR]: [ Moves.METEOR_MASH, Moves.ICE_SPINNER, Moves.SHIFT_GEAR, Moves.THOUSAND_ARROWS ], - [Species.AUDINO]: [ Moves.TAKE_HEART, Moves.MOONBLAST, Moves.WISH, Moves.MATCHA_GOTCHA ], - [Species.TIMBURR]: [ Moves.MACH_PUNCH, Moves.DRAIN_PUNCH, Moves.ICE_HAMMER, Moves.DOUBLE_IRON_BASH ], - [Species.TYMPOLE]: [ Moves.JET_PUNCH, Moves.HIGH_HORSEPOWER, Moves.BULK_UP, Moves.SURGING_STRIKES ], - [Species.THROH]: [ Moves.MACH_PUNCH, Moves.SLACK_OFF, Moves.METEOR_MASH, Moves.RAGE_FIST ], - [Species.SAWK]: [ Moves.DRAIN_PUNCH, Moves.SUCKER_PUNCH, Moves.METEOR_MASH, Moves.VICTORY_DANCE ], - [Species.SEWADDLE]: [ Moves.STONE_AXE, Moves.PSYCHO_CUT, Moves.BITTER_BLADE, Moves.VICTORY_DANCE ], - [Species.VENIPEDE]: [ Moves.BANEFUL_BUNKER, Moves.LEECH_LIFE, Moves.NOXIOUS_TORQUE, Moves.POWER_TRIP ], - [Species.COTTONEE]: [ Moves.POLLEN_PUFF, Moves.PARTING_SHOT, Moves.SLEEP_POWDER, Moves.SEED_FLARE ], - [Species.PETILIL]: [ Moves.THUNDEROUS_KICK, Moves.SPARKLING_ARIA, Moves.FIERY_DANCE, Moves.FLOWER_TRICK ], - [Species.BASCULIN]: [ Moves.LAST_RESPECTS, Moves.CLOSE_COMBAT, Moves.SPLISHY_SPLASH, Moves.NO_RETREAT ], - [Species.SANDILE]: [ Moves.DIRE_CLAW, Moves.SUCKER_PUNCH, Moves.FIRE_LASH, Moves.HEADLONG_RUSH ], - [Species.DARUMAKA]: [ Moves.DRAIN_PUNCH, Moves.ZIPPY_ZAP, Moves.HEADLONG_RUSH, Moves.PYRO_BALL ], - [Species.MARACTUS]: [ Moves.EARTH_POWER, Moves.SIZZLY_SLIDE, Moves.FIERY_DANCE, Moves.QUIVER_DANCE ], - [Species.DWEBBLE]: [ Moves.CRABHAMMER, Moves.STONE_AXE, Moves.LEECH_LIFE, Moves.MIGHTY_CLEAVE ], - [Species.SCRAGGY]: [ Moves.SUCKER_PUNCH, Moves.BULLET_PUNCH, Moves.NOXIOUS_TORQUE, Moves.VICTORY_DANCE ], - [Species.SIGILYPH]: [ Moves.MOONBLAST, Moves.PSYCHO_SHIFT, Moves.ESPER_WING, Moves.OBLIVION_WING ], - [Species.YAMASK]: [ Moves.STRENGTH_SAP, Moves.GLARE, Moves.AURA_SPHERE, Moves.ASTRAL_BARRAGE ], - [Species.TIRTOUGA]: [ Moves.ICE_SPINNER, Moves.AQUA_STEP, Moves.SHORE_UP, Moves.MIGHTY_CLEAVE ], - [Species.ARCHEN]: [ Moves.ROOST, Moves.EARTHQUAKE, Moves.FLOATY_FALL, Moves.MIGHTY_CLEAVE ], - [Species.TRUBBISH]: [ Moves.COIL, Moves.RECOVER, Moves.DIRE_CLAW, Moves.GIGATON_HAMMER ], - [Species.ZORUA]: [ Moves.MALIGNANT_CHAIN, Moves.MOONBLAST, Moves.SECRET_SWORD, Moves.FIERY_WRATH ], - [Species.MINCCINO]: [ Moves.ICICLE_SPEAR, Moves.TIDY_UP, Moves.KNOCK_OFF, Moves.POPULATION_BOMB ], - [Species.GOTHITA]: [ Moves.RECOVER, Moves.MOONBLAST, Moves.AURA_SPHERE, Moves.LUMINA_CRASH ], - [Species.SOLOSIS]: [ Moves.MIST_BALL, Moves.SPEED_SWAP, Moves.FLAMETHROWER, Moves.LIGHT_OF_RUIN ], - [Species.DUCKLETT]: [ Moves.SPLISHY_SPLASH, Moves.SANDSEAR_STORM, Moves.WILDBOLT_STORM, Moves.QUIVER_DANCE ], - [Species.VANILLITE]: [ Moves.EARTH_POWER, Moves.AURORA_VEIL, Moves.CALM_MIND, Moves.SPARKLY_SWIRL ], - [Species.DEERLING]: [ Moves.TIDY_UP, Moves.HEADBUTT, Moves.COMBAT_TORQUE, Moves.FLOWER_TRICK ], - [Species.EMOLGA]: [ Moves.ICICLE_CRASH, Moves.ZING_ZAP, Moves.FLOATY_FALL, Moves.ELECTRIFY ], - [Species.KARRABLAST]: [ Moves.LEECH_LIFE, Moves.BITTER_BLADE, Moves.OBSTRUCT, Moves.DOUBLE_IRON_BASH ], - [Species.FOONGUS]: [ Moves.POLLEN_PUFF, Moves.PARTING_SHOT, Moves.FOUL_PLAY, Moves.SAPPY_SEED ], - [Species.FRILLISH]: [ Moves.CALM_MIND, Moves.BUZZY_BUZZ, Moves.FREEZE_DRY, Moves.STEAM_ERUPTION ], - [Species.ALOMOMOLA]: [ Moves.FLIP_TURN, Moves.HEART_SWAP, Moves.GLITZY_GLOW, Moves.REVIVAL_BLESSING ], - [Species.JOLTIK]: [ Moves.WILDBOLT_STORM, Moves.PARABOLIC_CHARGE, Moves.EARTH_POWER, Moves.QUIVER_DANCE ], - [Species.FERROSEED]: [ Moves.SYNTHESIS, Moves.CEASELESS_EDGE, Moves.SPIKY_SHIELD, Moves.SAPPY_SEED ], - [Species.KLINK]: [ Moves.TRIPLE_AXEL, Moves.HIGH_HORSEPOWER, Moves.RECOVER, Moves.AURA_WHEEL ], - [Species.TYNAMO]: [ Moves.SCALD, Moves.STRENGTH_SAP, Moves.FIRE_LASH, Moves.AURA_WHEEL ], - [Species.ELGYEM]: [ Moves.THUNDERCLAP, Moves.BADDY_BAD, Moves.AURA_SPHERE, Moves.PHOTON_GEYSER ], - [Species.LITWICK]: [ Moves.GIGA_DRAIN, Moves.EARTH_POWER, Moves.MOONBLAST, Moves.TORCH_SONG ], - [Species.AXEW]: [ Moves.STONE_AXE, Moves.DIRE_CLAW, Moves.BITTER_BLADE, Moves.GLAIVE_RUSH ], - [Species.CUBCHOO]: [ Moves.MOUNTAIN_GALE, Moves.AQUA_STEP, Moves.ICE_SHARD, Moves.COLLISION_COURSE ], - [Species.CRYOGONAL]: [ Moves.FREEZING_GLARE, Moves.AURORA_VEIL, Moves.NASTY_PLOT, Moves.ORIGIN_PULSE ], - [Species.SHELMET]: [ Moves.POWER_GEM, Moves.NASTY_PLOT, Moves.EARTH_POWER, Moves.STEAM_ERUPTION ], - [Species.STUNFISK]: [ Moves.THUNDERCLAP, Moves.SANDSEAR_STORM, Moves.STRENGTH_SAP, Moves.THUNDER_CAGE ], - [Species.MIENFOO]: [ Moves.GUNK_SHOT, Moves.SUPERCELL_SLAM, Moves.MOUNTAIN_GALE, Moves.WICKED_BLOW ], - [Species.DRUDDIGON]: [ Moves.FIRE_LASH, Moves.MORNING_SUN, Moves.DRAGON_DARTS, Moves.CLANGOROUS_SOUL ], - [Species.GOLETT]: [ Moves.SHIFT_GEAR, Moves.DRAIN_PUNCH, Moves.HEADLONG_RUSH, Moves.RAGE_FIST ], - [Species.PAWNIARD]: [ Moves.SUCKER_PUNCH, Moves.CEASELESS_EDGE, Moves.BITTER_BLADE, Moves.LAST_RESPECTS ], - [Species.BOUFFALANT]: [ Moves.HORN_LEECH, Moves.HIGH_JUMP_KICK, Moves.HEAD_SMASH, Moves.FLARE_BLITZ ], - [Species.RUFFLET]: [ Moves.FLOATY_FALL, Moves.AURA_SPHERE, Moves.NO_RETREAT, Moves.BOLT_BEAK ], - [Species.VULLABY]: [ Moves.FOUL_PLAY, Moves.BODY_PRESS, Moves.ROOST, Moves.RUINATION ], - [Species.HEATMOR]: [ Moves.EARTH_POWER, Moves.OVERHEAT, Moves.THUNDERBOLT, Moves.V_CREATE ], - [Species.DURANT]: [ Moves.HIGH_HORSEPOWER, Moves.FIRST_IMPRESSION, Moves.SWORDS_DANCE, Moves.BEHEMOTH_BASH ], - [Species.DEINO]: [ Moves.FIERY_WRATH, Moves.ESPER_WING, Moves.SLUDGE_BOMB, Moves.FICKLE_BEAM ], - [Species.LARVESTA]: [ Moves.THUNDERBOLT, Moves.DAZZLING_GLEAM, Moves.EARTH_POWER, Moves.HYDRO_STEAM ], - [Species.COBALION]: [ Moves.BEHEMOTH_BLADE, Moves.MIGHTY_CLEAVE, Moves.CEASELESS_EDGE, Moves.VICTORY_DANCE ], - [Species.TERRAKION]: [ Moves.MIGHTY_CLEAVE, Moves.HEADLONG_RUSH, Moves.KNOCK_OFF, Moves.VICTORY_DANCE ], - [Species.VIRIZION]: [ Moves.SAPPY_SEED, Moves.PSYBLADE, Moves.STONE_AXE, Moves.VICTORY_DANCE ], - [Species.TORNADUS]: [ Moves.SANDSEAR_STORM, Moves.PARTING_SHOT, Moves.SPLISHY_SPLASH, Moves.OBLIVION_WING ], - [Species.THUNDURUS]: [ Moves.SANDSEAR_STORM, Moves.HURRICANE, Moves.FROST_BREATH, Moves.ELECTRO_SHOT ], - [Species.RESHIRAM]: [ Moves.ENERGY_BALL, Moves.TAKE_HEART, Moves.FICKLE_BEAM, Moves.ERUPTION ], - [Species.ZEKROM]: [ Moves.TRIPLE_AXEL, Moves.THUNDEROUS_KICK, Moves.DRAGON_HAMMER, Moves.DRAGON_ENERGY ], - [Species.LANDORUS]: [ Moves.STONE_AXE, Moves.FLOATY_FALL, Moves.ROOST, Moves.BLEAKWIND_STORM ], - [Species.KYUREM]: [ Moves.DRAGON_DARTS, Moves.GLACIAL_LANCE, Moves.NO_RETREAT, Moves.DRAGON_ENERGY ], - [Species.KELDEO]: [ Moves.BOUNCY_BUBBLE, Moves.THUNDERBOLT, Moves.ICE_BEAM, Moves.STEAM_ERUPTION ], - [Species.MELOETTA]: [ Moves.BODY_SLAM, Moves.PSYCHIC_NOISE, Moves.TRIPLE_ARROWS, Moves.TORCH_SONG ], - [Species.GENESECT]: [ Moves.EXTREME_SPEED, Moves.SHIFT_GEAR, Moves.BEHEMOTH_BASH, Moves.TACHYON_CUTTER ], + [SpeciesId.VICTINI]: [ MoveId.BLUE_FLARE, MoveId.BOLT_STRIKE, MoveId.LUSTER_PURGE, MoveId.VICTORY_DANCE ], + [SpeciesId.SNIVY]: [ MoveId.FLAMETHROWER, MoveId.CLANGING_SCALES, MoveId.MAKE_IT_RAIN, MoveId.FLEUR_CANNON ], + [SpeciesId.TEPIG]: [ MoveId.WAVE_CRASH, MoveId.VOLT_TACKLE, MoveId.AXE_KICK, MoveId.VICTORY_DANCE ], + [SpeciesId.OSHAWOTT]: [ MoveId.FREEZE_DRY, MoveId.SHELL_SIDE_ARM, MoveId.SACRED_SWORD, MoveId.SHELL_SMASH ], + [SpeciesId.PATRAT]: [ MoveId.FAKE_OUT, MoveId.SWORDS_DANCE, MoveId.DYNAMIC_PUNCH, MoveId.EXTREME_SPEED ], + [SpeciesId.LILLIPUP]: [ MoveId.CLOSE_COMBAT, MoveId.BODY_SLAM, MoveId.HIGH_HORSEPOWER, MoveId.LAST_RESPECTS ], + [SpeciesId.PURRLOIN]: [ MoveId.ENCORE, MoveId.OBSTRUCT, MoveId.PARTING_SHOT, MoveId.WICKED_BLOW ], + [SpeciesId.PANSAGE]: [ MoveId.SWORDS_DANCE, MoveId.FIRE_LASH, MoveId.EARTHQUAKE, MoveId.IVY_CUDGEL ], + [SpeciesId.PANSEAR]: [ MoveId.NASTY_PLOT, MoveId.HYDRO_STEAM, MoveId.EARTH_POWER, MoveId.ERUPTION ], + [SpeciesId.PANPOUR]: [ MoveId.NASTY_PLOT, MoveId.ENERGY_BALL, MoveId.EARTH_POWER, MoveId.WATER_SPOUT ], + [SpeciesId.MUNNA]: [ MoveId.COSMIC_POWER, MoveId.AURA_SPHERE, MoveId.LUNAR_BLESSING, MoveId.MYSTICAL_POWER ], + [SpeciesId.PIDOVE]: [ MoveId.SLASH, MoveId.TIDY_UP, MoveId.FLOATY_FALL, MoveId.TRIPLE_ARROWS ], + [SpeciesId.BLITZLE]: [ MoveId.HORN_LEECH, MoveId.SWORDS_DANCE, MoveId.FLARE_BLITZ, MoveId.BOLT_STRIKE ], + [SpeciesId.ROGGENROLA]: [ MoveId.BODY_PRESS, MoveId.CURSE, MoveId.SHORE_UP, MoveId.DIAMOND_STORM ], + [SpeciesId.WOOBAT]: [ MoveId.ESPER_WING, MoveId.STORED_POWER, MoveId.MYSTICAL_FIRE, MoveId.OBLIVION_WING ], + [SpeciesId.DRILBUR]: [ MoveId.METEOR_MASH, MoveId.ICE_SPINNER, MoveId.SHIFT_GEAR, MoveId.THOUSAND_ARROWS ], + [SpeciesId.AUDINO]: [ MoveId.TAKE_HEART, MoveId.MOONBLAST, MoveId.WISH, MoveId.MATCHA_GOTCHA ], + [SpeciesId.TIMBURR]: [ MoveId.MACH_PUNCH, MoveId.DRAIN_PUNCH, MoveId.ICE_HAMMER, MoveId.DOUBLE_IRON_BASH ], + [SpeciesId.TYMPOLE]: [ MoveId.JET_PUNCH, MoveId.HIGH_HORSEPOWER, MoveId.BULK_UP, MoveId.SURGING_STRIKES ], + [SpeciesId.THROH]: [ MoveId.MACH_PUNCH, MoveId.SLACK_OFF, MoveId.METEOR_MASH, MoveId.RAGE_FIST ], + [SpeciesId.SAWK]: [ MoveId.DRAIN_PUNCH, MoveId.SUCKER_PUNCH, MoveId.METEOR_MASH, MoveId.VICTORY_DANCE ], + [SpeciesId.SEWADDLE]: [ MoveId.STONE_AXE, MoveId.PSYCHO_CUT, MoveId.BITTER_BLADE, MoveId.VICTORY_DANCE ], + [SpeciesId.VENIPEDE]: [ MoveId.BANEFUL_BUNKER, MoveId.LEECH_LIFE, MoveId.NOXIOUS_TORQUE, MoveId.POWER_TRIP ], + [SpeciesId.COTTONEE]: [ MoveId.POLLEN_PUFF, MoveId.PARTING_SHOT, MoveId.SLEEP_POWDER, MoveId.SEED_FLARE ], + [SpeciesId.PETILIL]: [ MoveId.THUNDEROUS_KICK, MoveId.SPARKLING_ARIA, MoveId.FIERY_DANCE, MoveId.FLOWER_TRICK ], + [SpeciesId.BASCULIN]: [ MoveId.LAST_RESPECTS, MoveId.CLOSE_COMBAT, MoveId.SPLISHY_SPLASH, MoveId.NO_RETREAT ], + [SpeciesId.SANDILE]: [ MoveId.DIRE_CLAW, MoveId.SUCKER_PUNCH, MoveId.FIRE_LASH, MoveId.HEADLONG_RUSH ], + [SpeciesId.DARUMAKA]: [ MoveId.DRAIN_PUNCH, MoveId.ZIPPY_ZAP, MoveId.HEADLONG_RUSH, MoveId.PYRO_BALL ], + [SpeciesId.MARACTUS]: [ MoveId.EARTH_POWER, MoveId.SIZZLY_SLIDE, MoveId.FIERY_DANCE, MoveId.QUIVER_DANCE ], + [SpeciesId.DWEBBLE]: [ MoveId.CRABHAMMER, MoveId.STONE_AXE, MoveId.LEECH_LIFE, MoveId.MIGHTY_CLEAVE ], + [SpeciesId.SCRAGGY]: [ MoveId.SUCKER_PUNCH, MoveId.BULLET_PUNCH, MoveId.NOXIOUS_TORQUE, MoveId.VICTORY_DANCE ], + [SpeciesId.SIGILYPH]: [ MoveId.MOONBLAST, MoveId.PSYCHO_SHIFT, MoveId.ESPER_WING, MoveId.OBLIVION_WING ], + [SpeciesId.YAMASK]: [ MoveId.STRENGTH_SAP, MoveId.GLARE, MoveId.AURA_SPHERE, MoveId.ASTRAL_BARRAGE ], + [SpeciesId.TIRTOUGA]: [ MoveId.ICE_SPINNER, MoveId.AQUA_STEP, MoveId.SHORE_UP, MoveId.MIGHTY_CLEAVE ], + [SpeciesId.ARCHEN]: [ MoveId.ROOST, MoveId.EARTHQUAKE, MoveId.FLOATY_FALL, MoveId.MIGHTY_CLEAVE ], + [SpeciesId.TRUBBISH]: [ MoveId.COIL, MoveId.RECOVER, MoveId.DIRE_CLAW, MoveId.GIGATON_HAMMER ], + [SpeciesId.ZORUA]: [ MoveId.MALIGNANT_CHAIN, MoveId.MOONBLAST, MoveId.SECRET_SWORD, MoveId.FIERY_WRATH ], + [SpeciesId.MINCCINO]: [ MoveId.ICICLE_SPEAR, MoveId.TIDY_UP, MoveId.KNOCK_OFF, MoveId.POPULATION_BOMB ], + [SpeciesId.GOTHITA]: [ MoveId.RECOVER, MoveId.MOONBLAST, MoveId.AURA_SPHERE, MoveId.LUMINA_CRASH ], + [SpeciesId.SOLOSIS]: [ MoveId.MIST_BALL, MoveId.SPEED_SWAP, MoveId.FLAMETHROWER, MoveId.LIGHT_OF_RUIN ], + [SpeciesId.DUCKLETT]: [ MoveId.SPLISHY_SPLASH, MoveId.SANDSEAR_STORM, MoveId.WILDBOLT_STORM, MoveId.QUIVER_DANCE ], + [SpeciesId.VANILLITE]: [ MoveId.EARTH_POWER, MoveId.AURORA_VEIL, MoveId.CALM_MIND, MoveId.SPARKLY_SWIRL ], + [SpeciesId.DEERLING]: [ MoveId.TIDY_UP, MoveId.HEADBUTT, MoveId.COMBAT_TORQUE, MoveId.FLOWER_TRICK ], + [SpeciesId.EMOLGA]: [ MoveId.ICICLE_CRASH, MoveId.ZING_ZAP, MoveId.FLOATY_FALL, MoveId.ELECTRIFY ], + [SpeciesId.KARRABLAST]: [ MoveId.LEECH_LIFE, MoveId.BITTER_BLADE, MoveId.OBSTRUCT, MoveId.DOUBLE_IRON_BASH ], + [SpeciesId.FOONGUS]: [ MoveId.POLLEN_PUFF, MoveId.PARTING_SHOT, MoveId.FOUL_PLAY, MoveId.SAPPY_SEED ], + [SpeciesId.FRILLISH]: [ MoveId.CALM_MIND, MoveId.BUZZY_BUZZ, MoveId.FREEZE_DRY, MoveId.STEAM_ERUPTION ], + [SpeciesId.ALOMOMOLA]: [ MoveId.FLIP_TURN, MoveId.HEART_SWAP, MoveId.GLITZY_GLOW, MoveId.REVIVAL_BLESSING ], + [SpeciesId.JOLTIK]: [ MoveId.WILDBOLT_STORM, MoveId.PARABOLIC_CHARGE, MoveId.EARTH_POWER, MoveId.QUIVER_DANCE ], + [SpeciesId.FERROSEED]: [ MoveId.SYNTHESIS, MoveId.CEASELESS_EDGE, MoveId.SPIKY_SHIELD, MoveId.SAPPY_SEED ], + [SpeciesId.KLINK]: [ MoveId.TRIPLE_AXEL, MoveId.HIGH_HORSEPOWER, MoveId.RECOVER, MoveId.AURA_WHEEL ], + [SpeciesId.TYNAMO]: [ MoveId.SCALD, MoveId.STRENGTH_SAP, MoveId.FIRE_LASH, MoveId.AURA_WHEEL ], + [SpeciesId.ELGYEM]: [ MoveId.THUNDERCLAP, MoveId.BADDY_BAD, MoveId.AURA_SPHERE, MoveId.PHOTON_GEYSER ], + [SpeciesId.LITWICK]: [ MoveId.GIGA_DRAIN, MoveId.EARTH_POWER, MoveId.MOONBLAST, MoveId.TORCH_SONG ], + [SpeciesId.AXEW]: [ MoveId.STONE_AXE, MoveId.DIRE_CLAW, MoveId.BITTER_BLADE, MoveId.GLAIVE_RUSH ], + [SpeciesId.CUBCHOO]: [ MoveId.MOUNTAIN_GALE, MoveId.AQUA_STEP, MoveId.ICE_SHARD, MoveId.COLLISION_COURSE ], + [SpeciesId.CRYOGONAL]: [ MoveId.FREEZING_GLARE, MoveId.AURORA_VEIL, MoveId.NASTY_PLOT, MoveId.ORIGIN_PULSE ], + [SpeciesId.SHELMET]: [ MoveId.POWER_GEM, MoveId.NASTY_PLOT, MoveId.EARTH_POWER, MoveId.STEAM_ERUPTION ], + [SpeciesId.STUNFISK]: [ MoveId.THUNDERCLAP, MoveId.SANDSEAR_STORM, MoveId.STRENGTH_SAP, MoveId.THUNDER_CAGE ], + [SpeciesId.MIENFOO]: [ MoveId.GUNK_SHOT, MoveId.SUPERCELL_SLAM, MoveId.MOUNTAIN_GALE, MoveId.WICKED_BLOW ], + [SpeciesId.DRUDDIGON]: [ MoveId.FIRE_LASH, MoveId.MORNING_SUN, MoveId.DRAGON_DARTS, MoveId.CLANGOROUS_SOUL ], + [SpeciesId.GOLETT]: [ MoveId.SHIFT_GEAR, MoveId.DRAIN_PUNCH, MoveId.HEADLONG_RUSH, MoveId.RAGE_FIST ], + [SpeciesId.PAWNIARD]: [ MoveId.SUCKER_PUNCH, MoveId.CEASELESS_EDGE, MoveId.BITTER_BLADE, MoveId.LAST_RESPECTS ], + [SpeciesId.BOUFFALANT]: [ MoveId.HORN_LEECH, MoveId.HIGH_JUMP_KICK, MoveId.HEAD_SMASH, MoveId.FLARE_BLITZ ], + [SpeciesId.RUFFLET]: [ MoveId.FLOATY_FALL, MoveId.AURA_SPHERE, MoveId.NO_RETREAT, MoveId.BOLT_BEAK ], + [SpeciesId.VULLABY]: [ MoveId.FOUL_PLAY, MoveId.BODY_PRESS, MoveId.ROOST, MoveId.RUINATION ], + [SpeciesId.HEATMOR]: [ MoveId.EARTH_POWER, MoveId.OVERHEAT, MoveId.THUNDERBOLT, MoveId.V_CREATE ], + [SpeciesId.DURANT]: [ MoveId.HIGH_HORSEPOWER, MoveId.FIRST_IMPRESSION, MoveId.SWORDS_DANCE, MoveId.BEHEMOTH_BASH ], + [SpeciesId.DEINO]: [ MoveId.FIERY_WRATH, MoveId.ESPER_WING, MoveId.SLUDGE_BOMB, MoveId.FICKLE_BEAM ], + [SpeciesId.LARVESTA]: [ MoveId.THUNDERBOLT, MoveId.DAZZLING_GLEAM, MoveId.EARTH_POWER, MoveId.HYDRO_STEAM ], + [SpeciesId.COBALION]: [ MoveId.BEHEMOTH_BLADE, MoveId.MIGHTY_CLEAVE, MoveId.CEASELESS_EDGE, MoveId.VICTORY_DANCE ], + [SpeciesId.TERRAKION]: [ MoveId.MIGHTY_CLEAVE, MoveId.HEADLONG_RUSH, MoveId.KNOCK_OFF, MoveId.VICTORY_DANCE ], + [SpeciesId.VIRIZION]: [ MoveId.SAPPY_SEED, MoveId.PSYBLADE, MoveId.STONE_AXE, MoveId.VICTORY_DANCE ], + [SpeciesId.TORNADUS]: [ MoveId.SANDSEAR_STORM, MoveId.PARTING_SHOT, MoveId.SPLISHY_SPLASH, MoveId.OBLIVION_WING ], + [SpeciesId.THUNDURUS]: [ MoveId.SANDSEAR_STORM, MoveId.HURRICANE, MoveId.FROST_BREATH, MoveId.ELECTRO_SHOT ], + [SpeciesId.RESHIRAM]: [ MoveId.ENERGY_BALL, MoveId.TAKE_HEART, MoveId.FICKLE_BEAM, MoveId.ERUPTION ], + [SpeciesId.ZEKROM]: [ MoveId.TRIPLE_AXEL, MoveId.THUNDEROUS_KICK, MoveId.DRAGON_HAMMER, MoveId.DRAGON_ENERGY ], + [SpeciesId.LANDORUS]: [ MoveId.STONE_AXE, MoveId.FLOATY_FALL, MoveId.ROOST, MoveId.BLEAKWIND_STORM ], + [SpeciesId.KYUREM]: [ MoveId.DRAGON_DARTS, MoveId.GLACIAL_LANCE, MoveId.NO_RETREAT, MoveId.DRAGON_ENERGY ], + [SpeciesId.KELDEO]: [ MoveId.BOUNCY_BUBBLE, MoveId.THUNDERBOLT, MoveId.ICE_BEAM, MoveId.STEAM_ERUPTION ], + [SpeciesId.MELOETTA]: [ MoveId.BODY_SLAM, MoveId.PSYCHIC_NOISE, MoveId.TRIPLE_ARROWS, MoveId.TORCH_SONG ], + [SpeciesId.GENESECT]: [ MoveId.EXTREME_SPEED, MoveId.SHIFT_GEAR, MoveId.BEHEMOTH_BASH, MoveId.TACHYON_CUTTER ], - [Species.CHESPIN]: [ Moves.COMBAT_TORQUE, Moves.SYNTHESIS, Moves.CEASELESS_EDGE, Moves.SAPPY_SEED ], - [Species.FENNEKIN]: [ Moves.TWIN_BEAM, Moves.FIERY_DANCE, Moves.THUNDERBOLT, Moves.SPARKLY_SWIRL ], - [Species.FROAKIE]: [ Moves.MOONBLAST, Moves.SHELL_SIDE_ARM, Moves.FIERY_WRATH, Moves.STEAM_ERUPTION ], - [Species.BUNNELBY]: [ Moves.DRAIN_PUNCH, Moves.TIDY_UP, Moves.LANDS_WRATH, Moves.EXTREME_SPEED ], - [Species.FLETCHLING]: [ Moves.DRILL_RUN, Moves.BURNING_BULWARK, Moves.HEAD_SMASH, Moves.VOLT_TACKLE ], - [Species.SCATTERBUG]: [ Moves.FOCUS_BLAST, Moves.AFTER_YOU, Moves.DECORATE, Moves.BLIZZARD ], - [Species.LITLEO]: [ Moves.EARTH_POWER, Moves.NASTY_PLOT, Moves.BURNING_BULWARK, Moves.BLUE_FLARE ], - [Species.FLABEBE]: [ Moves.GLITZY_GLOW, Moves.MYSTICAL_FIRE, Moves.TAKE_HEART, Moves.SEED_FLARE ], - [Species.SKIDDO]: [ Moves.HIGH_HORSEPOWER, Moves.GRASSY_GLIDE, Moves.STONE_AXE, Moves.SAPPY_SEED ], - [Species.PANCHAM]: [ Moves.DRAIN_PUNCH, Moves.SUCKER_PUNCH, Moves.METEOR_MASH, Moves.WICKED_BLOW ], - [Species.FURFROU]: [ Moves.TIDY_UP, Moves.SLACK_OFF, Moves.COMBAT_TORQUE, Moves.MULTI_ATTACK ], - [Species.ESPURR]: [ Moves.LUSTER_PURGE, Moves.MOONBLAST, Moves.AURA_SPHERE, Moves.DARK_VOID ], - [Species.HONEDGE]: [ Moves.TACHYON_CUTTER, Moves.SHADOW_BONE, Moves.BITTER_BLADE, Moves.BEHEMOTH_BLADE ], - [Species.SPRITZEE]: [ Moves.SPEED_SWAP, Moves.REVIVAL_BLESSING, Moves.ROOST, Moves.TORCH_SONG ], - [Species.SWIRLIX]: [ Moves.BELLY_DRUM, Moves.HEADLONG_RUSH, Moves.MAGICAL_TORQUE, Moves.REVIVAL_BLESSING ], - [Species.INKAY]: [ Moves.POWER_TRIP, Moves.SPIN_OUT, Moves.RECOVER, Moves.PSYCHO_BOOST ], - [Species.BINACLE]: [ Moves.TRIPLE_AXEL, Moves.CRABHAMMER, Moves.DIRE_CLAW, Moves.MIGHTY_CLEAVE ], - [Species.SKRELP]: [ Moves.STRENGTH_SAP, Moves.TRICK_ROOM, Moves.CALM_MIND, Moves.CORE_ENFORCER ], - [Species.CLAUNCHER]: [ Moves.SHELL_SMASH, Moves.ARMOR_CANNON, Moves.ENERGY_BALL, Moves.ORIGIN_PULSE ], - [Species.HELIOPTILE]: [ Moves.WEATHER_BALL, Moves.HYDRO_STEAM, Moves.EARTH_POWER, Moves.BOOMBURST ], - [Species.TYRUNT]: [ Moves.DRAGON_HAMMER, Moves.FLARE_BLITZ, Moves.VOLT_TACKLE, Moves.SHIFT_GEAR ], - [Species.AMAURA]: [ Moves.RECOVER, Moves.TERA_STARSTORM, Moves.POWER_GEM, Moves.GEOMANCY ], - [Species.HAWLUCHA]: [ Moves.TRIPLE_AXEL, Moves.HIGH_HORSEPOWER, Moves.FLOATY_FALL, Moves.WICKED_BLOW ], - [Species.DEDENNE]: [ Moves.BOOMBURST, Moves.FAKE_OUT, Moves.NASTY_PLOT, Moves.REVIVAL_BLESSING ], - [Species.CARBINK]: [ Moves.BODY_PRESS, Moves.SHORE_UP, Moves.SPARKLY_SWIRL, Moves.DIAMOND_STORM ], - [Species.GOOMY]: [ Moves.DRAGON_HAMMER, Moves.RECOVER, Moves.CALM_MIND, Moves.MAKE_IT_RAIN ], - [Species.KLEFKI]: [ Moves.HEAL_BELL, Moves.ENCORE, Moves.INSTRUCT, Moves.TOPSY_TURVY ], - [Species.PHANTUMP]: [ Moves.RAGE_FIST, Moves.SLEEP_POWDER, Moves.BULK_UP, Moves.SAPPY_SEED ], - [Species.PUMPKABOO]: [ Moves.SPIRIT_SHACKLE, Moves.FIRE_LASH, Moves.DIRE_CLAW, Moves.SAPPY_SEED ], - [Species.BERGMITE]: [ Moves.STONE_AXE, Moves.METAL_BURST, Moves.BODY_PRESS, Moves.GLACIAL_LANCE ], - [Species.NOIBAT]: [ Moves.AEROBLAST, Moves.OVERDRIVE, Moves.NASTY_PLOT, Moves.CLANGING_SCALES ], - [Species.XERNEAS]: [ Moves.EARTH_POWER, Moves.SPRINGTIDE_STORM, Moves.STORED_POWER, Moves.STRENGTH_SAP ], - [Species.YVELTAL]: [ Moves.SLUDGE_WAVE, Moves.POWER_TRIP, Moves.FIERY_WRATH, Moves.CLANGOROUS_SOUL ], - [Species.ZYGARDE]: [ Moves.DRAGON_DARTS, Moves.V_CREATE, Moves.CLANGOROUS_SOUL, Moves.HEAL_ORDER ], - [Species.DIANCIE]: [ Moves.MAGICAL_TORQUE, Moves.FIERY_DANCE, Moves.SHORE_UP, Moves.GEOMANCY ], - [Species.HOOPA]: [ Moves.PHOTON_GEYSER, Moves.SECRET_SWORD, Moves.FIERY_WRATH, Moves.SHELL_SMASH ], - [Species.VOLCANION]: [ Moves.HYDRO_STEAM, Moves.CALM_MIND, Moves.SEARING_SHOT, Moves.THUNDERCLAP ], - [Species.ETERNAL_FLOETTE]: [ Moves.MIND_BLOWN, Moves.CHLOROBLAST, Moves.LUSTER_PURGE, Moves.QUIVER_DANCE ], + [SpeciesId.CHESPIN]: [ MoveId.COMBAT_TORQUE, MoveId.SYNTHESIS, MoveId.CEASELESS_EDGE, MoveId.SAPPY_SEED ], + [SpeciesId.FENNEKIN]: [ MoveId.TWIN_BEAM, MoveId.FIERY_DANCE, MoveId.THUNDERBOLT, MoveId.SPARKLY_SWIRL ], + [SpeciesId.FROAKIE]: [ MoveId.MOONBLAST, MoveId.SHELL_SIDE_ARM, MoveId.FIERY_WRATH, MoveId.STEAM_ERUPTION ], + [SpeciesId.BUNNELBY]: [ MoveId.DRAIN_PUNCH, MoveId.TIDY_UP, MoveId.LANDS_WRATH, MoveId.EXTREME_SPEED ], + [SpeciesId.FLETCHLING]: [ MoveId.DRILL_RUN, MoveId.BURNING_BULWARK, MoveId.HEAD_SMASH, MoveId.VOLT_TACKLE ], + [SpeciesId.SCATTERBUG]: [ MoveId.FOCUS_BLAST, MoveId.AFTER_YOU, MoveId.DECORATE, MoveId.BLIZZARD ], + [SpeciesId.LITLEO]: [ MoveId.EARTH_POWER, MoveId.NASTY_PLOT, MoveId.BURNING_BULWARK, MoveId.BLUE_FLARE ], + [SpeciesId.FLABEBE]: [ MoveId.GLITZY_GLOW, MoveId.MYSTICAL_FIRE, MoveId.TAKE_HEART, MoveId.SEED_FLARE ], + [SpeciesId.SKIDDO]: [ MoveId.HIGH_HORSEPOWER, MoveId.GRASSY_GLIDE, MoveId.STONE_AXE, MoveId.SAPPY_SEED ], + [SpeciesId.PANCHAM]: [ MoveId.DRAIN_PUNCH, MoveId.SUCKER_PUNCH, MoveId.METEOR_MASH, MoveId.WICKED_BLOW ], + [SpeciesId.FURFROU]: [ MoveId.TIDY_UP, MoveId.SLACK_OFF, MoveId.COMBAT_TORQUE, MoveId.MULTI_ATTACK ], + [SpeciesId.ESPURR]: [ MoveId.LUSTER_PURGE, MoveId.MOONBLAST, MoveId.AURA_SPHERE, MoveId.DARK_VOID ], + [SpeciesId.HONEDGE]: [ MoveId.TACHYON_CUTTER, MoveId.SHADOW_BONE, MoveId.BITTER_BLADE, MoveId.BEHEMOTH_BLADE ], + [SpeciesId.SPRITZEE]: [ MoveId.SPEED_SWAP, MoveId.REVIVAL_BLESSING, MoveId.ROOST, MoveId.TORCH_SONG ], + [SpeciesId.SWIRLIX]: [ MoveId.BELLY_DRUM, MoveId.HEADLONG_RUSH, MoveId.MAGICAL_TORQUE, MoveId.REVIVAL_BLESSING ], + [SpeciesId.INKAY]: [ MoveId.POWER_TRIP, MoveId.SPIN_OUT, MoveId.RECOVER, MoveId.PSYCHO_BOOST ], + [SpeciesId.BINACLE]: [ MoveId.TRIPLE_AXEL, MoveId.CRABHAMMER, MoveId.DIRE_CLAW, MoveId.MIGHTY_CLEAVE ], + [SpeciesId.SKRELP]: [ MoveId.STRENGTH_SAP, MoveId.TRICK_ROOM, MoveId.CALM_MIND, MoveId.CORE_ENFORCER ], + [SpeciesId.CLAUNCHER]: [ MoveId.SHELL_SMASH, MoveId.ARMOR_CANNON, MoveId.ENERGY_BALL, MoveId.ORIGIN_PULSE ], + [SpeciesId.HELIOPTILE]: [ MoveId.WEATHER_BALL, MoveId.HYDRO_STEAM, MoveId.EARTH_POWER, MoveId.BOOMBURST ], + [SpeciesId.TYRUNT]: [ MoveId.DRAGON_HAMMER, MoveId.FLARE_BLITZ, MoveId.VOLT_TACKLE, MoveId.SHIFT_GEAR ], + [SpeciesId.AMAURA]: [ MoveId.RECOVER, MoveId.TERA_STARSTORM, MoveId.POWER_GEM, MoveId.GEOMANCY ], + [SpeciesId.HAWLUCHA]: [ MoveId.TRIPLE_AXEL, MoveId.HIGH_HORSEPOWER, MoveId.FLOATY_FALL, MoveId.WICKED_BLOW ], + [SpeciesId.DEDENNE]: [ MoveId.BOOMBURST, MoveId.FAKE_OUT, MoveId.NASTY_PLOT, MoveId.REVIVAL_BLESSING ], + [SpeciesId.CARBINK]: [ MoveId.BODY_PRESS, MoveId.SHORE_UP, MoveId.SPARKLY_SWIRL, MoveId.DIAMOND_STORM ], + [SpeciesId.GOOMY]: [ MoveId.DRAGON_HAMMER, MoveId.RECOVER, MoveId.CALM_MIND, MoveId.MAKE_IT_RAIN ], + [SpeciesId.KLEFKI]: [ MoveId.HEAL_BELL, MoveId.ENCORE, MoveId.INSTRUCT, MoveId.TOPSY_TURVY ], + [SpeciesId.PHANTUMP]: [ MoveId.RAGE_FIST, MoveId.SLEEP_POWDER, MoveId.BULK_UP, MoveId.SAPPY_SEED ], + [SpeciesId.PUMPKABOO]: [ MoveId.SPIRIT_SHACKLE, MoveId.FIRE_LASH, MoveId.DIRE_CLAW, MoveId.SAPPY_SEED ], + [SpeciesId.BERGMITE]: [ MoveId.STONE_AXE, MoveId.METAL_BURST, MoveId.BODY_PRESS, MoveId.GLACIAL_LANCE ], + [SpeciesId.NOIBAT]: [ MoveId.AEROBLAST, MoveId.OVERDRIVE, MoveId.NASTY_PLOT, MoveId.CLANGING_SCALES ], + [SpeciesId.XERNEAS]: [ MoveId.EARTH_POWER, MoveId.SPRINGTIDE_STORM, MoveId.STORED_POWER, MoveId.STRENGTH_SAP ], + [SpeciesId.YVELTAL]: [ MoveId.SLUDGE_WAVE, MoveId.POWER_TRIP, MoveId.FIERY_WRATH, MoveId.CLANGOROUS_SOUL ], + [SpeciesId.ZYGARDE]: [ MoveId.DRAGON_DARTS, MoveId.V_CREATE, MoveId.CLANGOROUS_SOUL, MoveId.HEAL_ORDER ], + [SpeciesId.DIANCIE]: [ MoveId.MAGICAL_TORQUE, MoveId.FIERY_DANCE, MoveId.SHORE_UP, MoveId.GEOMANCY ], + [SpeciesId.HOOPA]: [ MoveId.PHOTON_GEYSER, MoveId.SECRET_SWORD, MoveId.FIERY_WRATH, MoveId.SHELL_SMASH ], + [SpeciesId.VOLCANION]: [ MoveId.HYDRO_STEAM, MoveId.CALM_MIND, MoveId.SEARING_SHOT, MoveId.THUNDERCLAP ], + [SpeciesId.ETERNAL_FLOETTE]: [ MoveId.MIND_BLOWN, MoveId.CHLOROBLAST, MoveId.LUSTER_PURGE, MoveId.QUIVER_DANCE ], - [Species.ROWLET]: [ Moves.THOUSAND_ARROWS, Moves.SHADOW_BONE, Moves.FIRST_IMPRESSION, Moves.VICTORY_DANCE ], - [Species.LITTEN]: [ Moves.SUCKER_PUNCH, Moves.PARTING_SHOT, Moves.SLACK_OFF, Moves.SACRED_FIRE ], - [Species.POPPLIO]: [ Moves.PSYCHIC_NOISE, Moves.MOONLIGHT, Moves.OVERDRIVE, Moves.TORCH_SONG ], - [Species.PIKIPEK]: [ Moves.DUAL_WINGBEAT, Moves.BONE_RUSH, Moves.BURNING_BULWARK, Moves.POPULATION_BOMB ], - [Species.YUNGOOS]: [ Moves.EXTREME_SPEED, Moves.KNOCK_OFF, Moves.TIDY_UP, Moves.MULTI_ATTACK ], - [Species.GRUBBIN]: [ Moves.ICE_BEAM, Moves.EARTH_POWER, Moves.CALM_MIND, Moves.THUNDERCLAP ], - [Species.CRABRAWLER]: [ Moves.JET_PUNCH, Moves.SHORE_UP, Moves.MACH_PUNCH, Moves.SURGING_STRIKES ], - [Species.ORICORIO]: [ Moves.QUIVER_DANCE, Moves.FIERY_DANCE, Moves.THUNDERCLAP, Moves.OBLIVION_WING ], - [Species.CUTIEFLY]: [ Moves.STICKY_WEB, Moves.SLEEP_POWDER, Moves.HEAT_WAVE, Moves.SPARKLY_SWIRL ], - [Species.ROCKRUFF]: [ Moves.HIGH_HORSEPOWER, Moves.TIDY_UP, Moves.ICE_SPINNER, Moves.MIGHTY_CLEAVE ], - [Species.WISHIWASHI]: [ Moves.HEAL_ORDER, Moves.FREEZE_DRY, Moves.WATER_SHURIKEN, Moves.TAIL_GLOW ], - [Species.MAREANIE]: [ Moves.CEASELESS_EDGE, Moves.SIZZLY_SLIDE, Moves.BODY_PRESS, Moves.LEECH_SEED ], - [Species.MUDBRAY]: [ Moves.BODY_PRESS, Moves.YAWN, Moves.SHORE_UP, Moves.THOUSAND_WAVES ], - [Species.DEWPIDER]: [ Moves.AQUA_STEP, Moves.SILK_TRAP, Moves.SWORDS_DANCE, Moves.JET_PUNCH ], - [Species.FOMANTIS]: [ Moves.SUPERPOWER, Moves.HEADLONG_RUSH, Moves.ICE_HAMMER, Moves.BITTER_BLADE ], - [Species.MORELULL]: [ Moves.CALM_MIND, Moves.SAPPY_SEED, Moves.DRAINING_KISS, Moves.MATCHA_GOTCHA ], - [Species.SALANDIT]: [ Moves.SCALD, Moves.MALIGNANT_CHAIN, Moves.CORE_ENFORCER, Moves.ERUPTION ], - [Species.STUFFUL]: [ Moves.DRAIN_PUNCH, Moves.METEOR_MASH, Moves.TRIPLE_AXEL, Moves.RAGE_FIST ], - [Species.BOUNSWEET]: [ Moves.TRIPLE_AXEL, Moves.AQUA_STEP, Moves.THUNDEROUS_KICK, Moves.SAPPY_SEED ], - [Species.COMFEY]: [ Moves.REVIVAL_BLESSING, Moves.TAKE_HEART, Moves.STRENGTH_SAP, Moves.MATCHA_GOTCHA ], - [Species.ORANGURU]: [ Moves.JUNGLE_HEALING, Moves.YAWN, Moves.FOLLOW_ME, Moves.LUMINA_CRASH ], - [Species.PASSIMIAN]: [ Moves.PYRO_BALL, Moves.SUCKER_PUNCH, Moves.ZING_ZAP, Moves.VICTORY_DANCE ], - [Species.WIMPOD]: [ Moves.TRIPLE_AXEL, Moves.OBSTRUCT, Moves.JET_PUNCH, Moves.SURGING_STRIKES ], - [Species.SANDYGAST]: [ Moves.BITTER_MALICE, Moves.SPLISHY_SPLASH, Moves.TAKE_HEART, Moves.SALT_CURE ], - [Species.PYUKUMUKU]: [ Moves.COMEUPPANCE, Moves.BANEFUL_BUNKER, Moves.TOXIC_SPIKES, Moves.SALT_CURE ], - [Species.TYPE_NULL]: [ Moves.DIRE_CLAW, Moves.RECOVER, Moves.COMBAT_TORQUE, Moves.NO_RETREAT ], - [Species.MINIOR]: [ Moves.EARTH_POWER, Moves.FLOATY_FALL, Moves.TRI_ATTACK, Moves.DIAMOND_STORM ], - [Species.KOMALA]: [ Moves.SLACK_OFF, Moves.EXTREME_SPEED, Moves.KNOCK_OFF, Moves.COLLISION_COURSE ], - [Species.TURTONATOR]: [ Moves.BURNING_BULWARK, Moves.MORNING_SUN, Moves.BODY_PRESS, Moves.CORE_ENFORCER ], - [Species.TOGEDEMARU]: [ Moves.FAKE_OUT, Moves.METAL_BURST, Moves.METEOR_MASH, Moves.AURA_WHEEL ], - [Species.MIMIKYU]: [ Moves.SPIRIT_BREAK, Moves.TIDY_UP, Moves.FIRE_LASH, Moves.SPECTRAL_THIEF ], - [Species.BRUXISH]: [ Moves.PLAY_ROUGH, Moves.FIRE_FANG, Moves.DRAGON_DANCE, Moves.SURGING_STRIKES ], - [Species.DRAMPA]: [ Moves.SLACK_OFF, Moves.TRICK_ROOM, Moves.CORE_ENFORCER, Moves.BOOMBURST ], - [Species.DHELMISE]: [ Moves.SHADOW_BONE, Moves.IVY_CUDGEL, Moves.TRIPLE_DIVE, Moves.STRENGTH_SAP ], - [Species.JANGMO_O]: [ Moves.BODY_PRESS, Moves.SHELL_SIDE_ARM, Moves.SECRET_SWORD, Moves.GLAIVE_RUSH ], - [Species.TAPU_KOKO]: [ Moves.MAGICAL_TORQUE, Moves.TRIPLE_AXEL, Moves.SWORDS_DANCE, Moves.BOLT_STRIKE ], - [Species.TAPU_LELE]: [ Moves.MOONLIGHT, Moves.NASTY_PLOT, Moves.HEAT_WAVE, Moves.EXPANDING_FORCE ], - [Species.TAPU_BULU]: [ Moves.SAPPY_SEED, Moves.LANDS_WRATH, Moves.MAGICAL_TORQUE, Moves.VICTORY_DANCE ], - [Species.TAPU_FINI]: [ Moves.SPRINGTIDE_STORM, Moves.EARTH_POWER, Moves.RECOVER, Moves.QUIVER_DANCE ], - [Species.COSMOG]: [ Moves.PHOTON_GEYSER, Moves.PRECIPICE_BLADES, Moves.SACRED_FIRE, Moves.ASTRAL_BARRAGE ], - [Species.NIHILEGO]: [ Moves.STRENGTH_SAP, Moves.MALIGNANT_CHAIN, Moves.EARTH_POWER, Moves.QUIVER_DANCE ], - [Species.BUZZWOLE]: [ Moves.FIRST_IMPRESSION, Moves.COMBAT_TORQUE, Moves.ROCK_BLAST, Moves.DOUBLE_IRON_BASH ], - [Species.PHEROMOSA]: [ Moves.SECRET_SWORD, Moves.MAKE_IT_RAIN, Moves.ATTACK_ORDER, Moves.DIAMOND_STORM ], - [Species.XURKITREE]: [ Moves.FLAMETHROWER, Moves.GIGA_DRAIN, Moves.TAIL_GLOW, Moves.THUNDERCLAP ], - [Species.CELESTEELA]: [ Moves.RECOVER, Moves.BUZZY_BUZZ, Moves.EARTH_POWER, Moves.OBLIVION_WING ], - [Species.KARTANA]: [ Moves.MIGHTY_CLEAVE, Moves.DUAL_CHOP, Moves.BITTER_BLADE, Moves.BEHEMOTH_BLADE ], - [Species.GUZZLORD]: [ Moves.SUCKER_PUNCH, Moves.COMEUPPANCE, Moves.SLACK_OFF, Moves.SHED_TAIL ], - [Species.NECROZMA]: [ Moves.DYNAMAX_CANNON, Moves.SACRED_FIRE, Moves.ASTRAL_BARRAGE, Moves.CLANGOROUS_SOUL ], - [Species.MAGEARNA]: [ Moves.STRENGTH_SAP, Moves.EARTH_POWER, Moves.MOONBLAST, Moves.MAKE_IT_RAIN ], - [Species.MARSHADOW]: [ Moves.POWER_UP_PUNCH, Moves.BONEMERANG, Moves.METEOR_MASH, Moves.TRIPLE_AXEL ], - [Species.POIPOLE]: [ Moves.MALIGNANT_CHAIN, Moves.ICE_BEAM, Moves.ARMOR_CANNON, Moves.CLANGING_SCALES ], - [Species.STAKATAKA]: [ Moves.HEAVY_SLAM, Moves.SHORE_UP, Moves.CURSE, Moves.SALT_CURE ], - [Species.BLACEPHALON]: [ Moves.STEEL_BEAM, Moves.MOONBLAST, Moves.CHLOROBLAST, Moves.MOONGEIST_BEAM ], - [Species.ZERAORA]: [ Moves.SWORDS_DANCE, Moves.U_TURN, Moves.COLLISION_COURSE, Moves.TRIPLE_AXEL ], - [Species.MELTAN]: [ Moves.BULLET_PUNCH, Moves.DRAIN_PUNCH, Moves.BULK_UP, Moves.PLASMA_FISTS ], - [Species.ALOLA_RATTATA]: [ Moves.FALSE_SURRENDER, Moves.PSYCHIC_FANGS, Moves.COIL, Moves.EXTREME_SPEED ], - [Species.ALOLA_SANDSHREW]: [ Moves.SPIKY_SHIELD, Moves.LIQUIDATION, Moves.SHIFT_GEAR, Moves.GLACIAL_LANCE ], - [Species.ALOLA_VULPIX]: [ Moves.MOONBLAST, Moves.GLARE, Moves.MYSTICAL_FIRE, Moves.REVIVAL_BLESSING ], - [Species.ALOLA_DIGLETT]: [ Moves.THOUSAND_WAVES, Moves.SWORDS_DANCE, Moves.TRIPLE_DIVE, Moves.PYRO_BALL ], - [Species.ALOLA_MEOWTH]: [ Moves.BADDY_BAD, Moves.BUZZY_BUZZ, Moves.PARTING_SHOT, Moves.MAKE_IT_RAIN ], - [Species.ALOLA_GEODUDE]: [ Moves.THOUSAND_WAVES, Moves.BULK_UP, Moves.STONE_AXE, Moves.EXTREME_SPEED ], - [Species.ALOLA_GRIMER]: [ Moves.SUCKER_PUNCH, Moves.BARB_BARRAGE, Moves.RECOVER, Moves.SURGING_STRIKES ], + [SpeciesId.ROWLET]: [ MoveId.THOUSAND_ARROWS, MoveId.SHADOW_BONE, MoveId.FIRST_IMPRESSION, MoveId.VICTORY_DANCE ], + [SpeciesId.LITTEN]: [ MoveId.SUCKER_PUNCH, MoveId.PARTING_SHOT, MoveId.SLACK_OFF, MoveId.SACRED_FIRE ], + [SpeciesId.POPPLIO]: [ MoveId.PSYCHIC_NOISE, MoveId.MOONLIGHT, MoveId.OVERDRIVE, MoveId.TORCH_SONG ], + [SpeciesId.PIKIPEK]: [ MoveId.DUAL_WINGBEAT, MoveId.BONE_RUSH, MoveId.BURNING_BULWARK, MoveId.POPULATION_BOMB ], + [SpeciesId.YUNGOOS]: [ MoveId.EXTREME_SPEED, MoveId.KNOCK_OFF, MoveId.TIDY_UP, MoveId.MULTI_ATTACK ], + [SpeciesId.GRUBBIN]: [ MoveId.ICE_BEAM, MoveId.EARTH_POWER, MoveId.CALM_MIND, MoveId.THUNDERCLAP ], + [SpeciesId.CRABRAWLER]: [ MoveId.JET_PUNCH, MoveId.SHORE_UP, MoveId.MACH_PUNCH, MoveId.SURGING_STRIKES ], + [SpeciesId.ORICORIO]: [ MoveId.QUIVER_DANCE, MoveId.FIERY_DANCE, MoveId.THUNDERCLAP, MoveId.OBLIVION_WING ], + [SpeciesId.CUTIEFLY]: [ MoveId.STICKY_WEB, MoveId.SLEEP_POWDER, MoveId.HEAT_WAVE, MoveId.SPARKLY_SWIRL ], + [SpeciesId.ROCKRUFF]: [ MoveId.HIGH_HORSEPOWER, MoveId.TIDY_UP, MoveId.ICE_SPINNER, MoveId.MIGHTY_CLEAVE ], + [SpeciesId.WISHIWASHI]: [ MoveId.HEAL_ORDER, MoveId.FREEZE_DRY, MoveId.WATER_SHURIKEN, MoveId.TAIL_GLOW ], + [SpeciesId.MAREANIE]: [ MoveId.CEASELESS_EDGE, MoveId.SIZZLY_SLIDE, MoveId.BODY_PRESS, MoveId.LEECH_SEED ], + [SpeciesId.MUDBRAY]: [ MoveId.BODY_PRESS, MoveId.YAWN, MoveId.SHORE_UP, MoveId.THOUSAND_WAVES ], + [SpeciesId.DEWPIDER]: [ MoveId.AQUA_STEP, MoveId.SILK_TRAP, MoveId.SWORDS_DANCE, MoveId.JET_PUNCH ], + [SpeciesId.FOMANTIS]: [ MoveId.SUPERPOWER, MoveId.HEADLONG_RUSH, MoveId.ICE_HAMMER, MoveId.BITTER_BLADE ], + [SpeciesId.MORELULL]: [ MoveId.CALM_MIND, MoveId.SAPPY_SEED, MoveId.DRAINING_KISS, MoveId.MATCHA_GOTCHA ], + [SpeciesId.SALANDIT]: [ MoveId.SCALD, MoveId.MALIGNANT_CHAIN, MoveId.CORE_ENFORCER, MoveId.ERUPTION ], + [SpeciesId.STUFFUL]: [ MoveId.DRAIN_PUNCH, MoveId.METEOR_MASH, MoveId.TRIPLE_AXEL, MoveId.RAGE_FIST ], + [SpeciesId.BOUNSWEET]: [ MoveId.TRIPLE_AXEL, MoveId.AQUA_STEP, MoveId.THUNDEROUS_KICK, MoveId.SAPPY_SEED ], + [SpeciesId.COMFEY]: [ MoveId.REVIVAL_BLESSING, MoveId.TAKE_HEART, MoveId.STRENGTH_SAP, MoveId.MATCHA_GOTCHA ], + [SpeciesId.ORANGURU]: [ MoveId.JUNGLE_HEALING, MoveId.YAWN, MoveId.FOLLOW_ME, MoveId.LUMINA_CRASH ], + [SpeciesId.PASSIMIAN]: [ MoveId.PYRO_BALL, MoveId.SUCKER_PUNCH, MoveId.ZING_ZAP, MoveId.VICTORY_DANCE ], + [SpeciesId.WIMPOD]: [ MoveId.TRIPLE_AXEL, MoveId.OBSTRUCT, MoveId.JET_PUNCH, MoveId.SURGING_STRIKES ], + [SpeciesId.SANDYGAST]: [ MoveId.BITTER_MALICE, MoveId.SPLISHY_SPLASH, MoveId.TAKE_HEART, MoveId.SALT_CURE ], + [SpeciesId.PYUKUMUKU]: [ MoveId.COMEUPPANCE, MoveId.BANEFUL_BUNKER, MoveId.TOXIC_SPIKES, MoveId.SALT_CURE ], + [SpeciesId.TYPE_NULL]: [ MoveId.DIRE_CLAW, MoveId.RECOVER, MoveId.COMBAT_TORQUE, MoveId.NO_RETREAT ], + [SpeciesId.MINIOR]: [ MoveId.EARTH_POWER, MoveId.FLOATY_FALL, MoveId.TRI_ATTACK, MoveId.DIAMOND_STORM ], + [SpeciesId.KOMALA]: [ MoveId.SLACK_OFF, MoveId.EXTREME_SPEED, MoveId.KNOCK_OFF, MoveId.COLLISION_COURSE ], + [SpeciesId.TURTONATOR]: [ MoveId.BURNING_BULWARK, MoveId.MORNING_SUN, MoveId.BODY_PRESS, MoveId.CORE_ENFORCER ], + [SpeciesId.TOGEDEMARU]: [ MoveId.FAKE_OUT, MoveId.METAL_BURST, MoveId.METEOR_MASH, MoveId.AURA_WHEEL ], + [SpeciesId.MIMIKYU]: [ MoveId.SPIRIT_BREAK, MoveId.TIDY_UP, MoveId.FIRE_LASH, MoveId.SPECTRAL_THIEF ], + [SpeciesId.BRUXISH]: [ MoveId.PLAY_ROUGH, MoveId.FIRE_FANG, MoveId.DRAGON_DANCE, MoveId.SURGING_STRIKES ], + [SpeciesId.DRAMPA]: [ MoveId.SLACK_OFF, MoveId.TRICK_ROOM, MoveId.CORE_ENFORCER, MoveId.BOOMBURST ], + [SpeciesId.DHELMISE]: [ MoveId.SHADOW_BONE, MoveId.IVY_CUDGEL, MoveId.TRIPLE_DIVE, MoveId.STRENGTH_SAP ], + [SpeciesId.JANGMO_O]: [ MoveId.BODY_PRESS, MoveId.SHELL_SIDE_ARM, MoveId.SECRET_SWORD, MoveId.GLAIVE_RUSH ], + [SpeciesId.TAPU_KOKO]: [ MoveId.MAGICAL_TORQUE, MoveId.TRIPLE_AXEL, MoveId.SWORDS_DANCE, MoveId.BOLT_STRIKE ], + [SpeciesId.TAPU_LELE]: [ MoveId.MOONLIGHT, MoveId.NASTY_PLOT, MoveId.HEAT_WAVE, MoveId.EXPANDING_FORCE ], + [SpeciesId.TAPU_BULU]: [ MoveId.SAPPY_SEED, MoveId.LANDS_WRATH, MoveId.MAGICAL_TORQUE, MoveId.VICTORY_DANCE ], + [SpeciesId.TAPU_FINI]: [ MoveId.SPRINGTIDE_STORM, MoveId.EARTH_POWER, MoveId.RECOVER, MoveId.QUIVER_DANCE ], + [SpeciesId.COSMOG]: [ MoveId.PHOTON_GEYSER, MoveId.PRECIPICE_BLADES, MoveId.SACRED_FIRE, MoveId.ASTRAL_BARRAGE ], + [SpeciesId.NIHILEGO]: [ MoveId.STRENGTH_SAP, MoveId.MALIGNANT_CHAIN, MoveId.EARTH_POWER, MoveId.QUIVER_DANCE ], + [SpeciesId.BUZZWOLE]: [ MoveId.FIRST_IMPRESSION, MoveId.COMBAT_TORQUE, MoveId.ROCK_BLAST, MoveId.DOUBLE_IRON_BASH ], + [SpeciesId.PHEROMOSA]: [ MoveId.SECRET_SWORD, MoveId.MAKE_IT_RAIN, MoveId.ATTACK_ORDER, MoveId.DIAMOND_STORM ], + [SpeciesId.XURKITREE]: [ MoveId.FLAMETHROWER, MoveId.GIGA_DRAIN, MoveId.TAIL_GLOW, MoveId.THUNDERCLAP ], + [SpeciesId.CELESTEELA]: [ MoveId.RECOVER, MoveId.BUZZY_BUZZ, MoveId.EARTH_POWER, MoveId.OBLIVION_WING ], + [SpeciesId.KARTANA]: [ MoveId.MIGHTY_CLEAVE, MoveId.DUAL_CHOP, MoveId.BITTER_BLADE, MoveId.BEHEMOTH_BLADE ], + [SpeciesId.GUZZLORD]: [ MoveId.SUCKER_PUNCH, MoveId.COMEUPPANCE, MoveId.SLACK_OFF, MoveId.SHED_TAIL ], + [SpeciesId.NECROZMA]: [ MoveId.DYNAMAX_CANNON, MoveId.SACRED_FIRE, MoveId.ASTRAL_BARRAGE, MoveId.CLANGOROUS_SOUL ], + [SpeciesId.MAGEARNA]: [ MoveId.STRENGTH_SAP, MoveId.EARTH_POWER, MoveId.MOONBLAST, MoveId.MAKE_IT_RAIN ], + [SpeciesId.MARSHADOW]: [ MoveId.POWER_UP_PUNCH, MoveId.BONEMERANG, MoveId.METEOR_MASH, MoveId.TRIPLE_AXEL ], + [SpeciesId.POIPOLE]: [ MoveId.MALIGNANT_CHAIN, MoveId.ICE_BEAM, MoveId.ARMOR_CANNON, MoveId.CLANGING_SCALES ], + [SpeciesId.STAKATAKA]: [ MoveId.HEAVY_SLAM, MoveId.SHORE_UP, MoveId.CURSE, MoveId.SALT_CURE ], + [SpeciesId.BLACEPHALON]: [ MoveId.STEEL_BEAM, MoveId.MOONBLAST, MoveId.CHLOROBLAST, MoveId.MOONGEIST_BEAM ], + [SpeciesId.ZERAORA]: [ MoveId.SWORDS_DANCE, MoveId.U_TURN, MoveId.COLLISION_COURSE, MoveId.TRIPLE_AXEL ], + [SpeciesId.MELTAN]: [ MoveId.BULLET_PUNCH, MoveId.DRAIN_PUNCH, MoveId.BULK_UP, MoveId.PLASMA_FISTS ], + [SpeciesId.ALOLA_RATTATA]: [ MoveId.FALSE_SURRENDER, MoveId.PSYCHIC_FANGS, MoveId.COIL, MoveId.EXTREME_SPEED ], + [SpeciesId.ALOLA_SANDSHREW]: [ MoveId.SPIKY_SHIELD, MoveId.LIQUIDATION, MoveId.SHIFT_GEAR, MoveId.GLACIAL_LANCE ], + [SpeciesId.ALOLA_VULPIX]: [ MoveId.MOONBLAST, MoveId.GLARE, MoveId.MYSTICAL_FIRE, MoveId.REVIVAL_BLESSING ], + [SpeciesId.ALOLA_DIGLETT]: [ MoveId.THOUSAND_WAVES, MoveId.SWORDS_DANCE, MoveId.TRIPLE_DIVE, MoveId.PYRO_BALL ], + [SpeciesId.ALOLA_MEOWTH]: [ MoveId.BADDY_BAD, MoveId.BUZZY_BUZZ, MoveId.PARTING_SHOT, MoveId.MAKE_IT_RAIN ], + [SpeciesId.ALOLA_GEODUDE]: [ MoveId.THOUSAND_WAVES, MoveId.BULK_UP, MoveId.STONE_AXE, MoveId.EXTREME_SPEED ], + [SpeciesId.ALOLA_GRIMER]: [ MoveId.SUCKER_PUNCH, MoveId.BARB_BARRAGE, MoveId.RECOVER, MoveId.SURGING_STRIKES ], - [Species.GROOKEY]: [ Moves.ROCK_SLIDE, Moves.PLAY_ROUGH, Moves.GRASSY_GLIDE, Moves.CLANGOROUS_SOUL ], - [Species.SCORBUNNY]: [ Moves.EXTREME_SPEED, Moves.HIGH_JUMP_KICK, Moves.TRIPLE_AXEL, Moves.BOLT_STRIKE ], - [Species.SOBBLE]: [ Moves.AEROBLAST, Moves.FROST_BREATH, Moves.ENERGY_BALL, Moves.NASTY_PLOT ], - [Species.SKWOVET]: [ Moves.SUCKER_PUNCH, Moves.SLACK_OFF, Moves.COIL, Moves.POPULATION_BOMB ], - [Species.ROOKIDEE]: [ Moves.ROOST, Moves.BODY_PRESS, Moves.KINGS_SHIELD, Moves.BEHEMOTH_BASH ], - [Species.BLIPBUG]: [ Moves.HEAL_ORDER, Moves.LUSTER_PURGE, Moves.SLEEP_POWDER, Moves.TAIL_GLOW ], - [Species.NICKIT]: [ Moves.BADDY_BAD, Moves.FLAMETHROWER, Moves.SPARKLY_SWIRL, Moves.MAKE_IT_RAIN ], - [Species.GOSSIFLEUR]: [ Moves.PARTING_SHOT, Moves.STRENGTH_SAP, Moves.SAPPY_SEED, Moves.SEED_FLARE ], - [Species.WOOLOO]: [ Moves.NUZZLE, Moves.MILK_DRINK, Moves.BODY_PRESS, Moves.MULTI_ATTACK ], - [Species.CHEWTLE]: [ Moves.ICE_FANG, Moves.PSYCHIC_FANGS, Moves.SHELL_SMASH, Moves.MIGHTY_CLEAVE ], - [Species.YAMPER]: [ Moves.ICE_FANG, Moves.SWORDS_DANCE, Moves.THUNDER_FANG, Moves.BOLT_STRIKE ], - [Species.ROLYCOLY]: [ Moves.BITTER_BLADE, Moves.BODY_PRESS, Moves.BULK_UP, Moves.DIAMOND_STORM ], - [Species.APPLIN]: [ Moves.CORE_ENFORCER, Moves.COMBAT_TORQUE, Moves.SAPPY_SEED, Moves.MATCHA_GOTCHA ], - [Species.SILICOBRA]: [ Moves.SHORE_UP, Moves.SHED_TAIL, Moves.MOUNTAIN_GALE, Moves.THOUSAND_ARROWS ], - [Species.CRAMORANT]: [ Moves.APPLE_ACID, Moves.SURF, Moves.BOLT_BEAK, Moves.OBLIVION_WING ], - [Species.ARROKUDA]: [ Moves.SUPERCELL_SLAM, Moves.TRIPLE_DIVE, Moves.ICE_SPINNER, Moves.SWORDS_DANCE ], - [Species.TOXEL]: [ Moves.BUZZY_BUZZ, Moves.BUG_BUZZ, Moves.SPARKLING_ARIA, Moves.TORCH_SONG ], - [Species.SIZZLIPEDE]: [ Moves.BURNING_BULWARK, Moves.ZING_ZAP, Moves.FIRST_IMPRESSION, Moves.BITTER_BLADE ], - [Species.CLOBBOPUS]: [ Moves.STORM_THROW, Moves.JET_PUNCH, Moves.MACH_PUNCH, Moves.SURGING_STRIKES ], - [Species.SINISTEA]: [ Moves.SPLISHY_SPLASH, Moves.MATCHA_GOTCHA, Moves.DRAINING_KISS, Moves.MOONGEIST_BEAM ], - [Species.HATENNA]: [ Moves.RECOVER, Moves.MOONBLAST, Moves.BUZZY_BUZZ, Moves.TORCH_SONG ], - [Species.IMPIDIMP]: [ Moves.SLACK_OFF, Moves.PARTING_SHOT, Moves.OCTOLOCK, Moves.WICKED_BLOW ], - [Species.MILCERY]: [ Moves.MOONBLAST, Moves.CHILLY_RECEPTION, Moves.EARTH_POWER, Moves.GEOMANCY ], - [Species.FALINKS]: [ Moves.BATON_PASS, Moves.POWER_TRIP, Moves.COMBAT_TORQUE, Moves.HEAL_ORDER ], - [Species.PINCURCHIN]: [ Moves.TRICK_ROOM, Moves.VOLT_SWITCH, Moves.STRENGTH_SAP, Moves.THUNDERCLAP ], - [Species.SNOM]: [ Moves.FROST_BREATH, Moves.HEAL_ORDER, Moves.EARTH_POWER, Moves.SPORE ], - [Species.STONJOURNER]: [ Moves.BODY_PRESS, Moves.HELPING_HAND, Moves.ACCELEROCK, Moves.DIAMOND_STORM ], - [Species.EISCUE]: [ Moves.TRIPLE_AXEL, Moves.AQUA_STEP, Moves.AXE_KICK, Moves.SHELL_SMASH ], - [Species.INDEEDEE]: [ Moves.MATCHA_GOTCHA, Moves.EXPANDING_FORCE, Moves.MOONBLAST, Moves.REVIVAL_BLESSING ], - [Species.MORPEKO]: [ Moves.TRIPLE_AXEL, Moves.OBSTRUCT, Moves.SWORDS_DANCE, Moves.COLLISION_COURSE ], - [Species.CUFANT]: [ Moves.LIQUIDATION, Moves.CURSE, Moves.COMBAT_TORQUE, Moves.GIGATON_HAMMER ], - [Species.DRACOZOLT]: [ Moves.TRIPLE_AXEL, Moves.GUNK_SHOT, Moves.FIRE_LASH, Moves.DRAGON_DANCE ], - [Species.ARCTOZOLT]: [ Moves.MOUNTAIN_GALE, Moves.AQUA_STEP, Moves.HIGH_HORSEPOWER, Moves.SHIFT_GEAR ], - [Species.DRACOVISH]: [ Moves.TRIPLE_AXEL, Moves.DRAGON_HAMMER, Moves.THUNDER_FANG, Moves.DRAGON_DANCE ], - [Species.ARCTOVISH]: [ Moves.ICE_FANG, Moves.THUNDER_FANG, Moves.HIGH_HORSEPOWER, Moves.SHIFT_GEAR ], - [Species.DURALUDON]: [ Moves.CORE_ENFORCER, Moves.BODY_PRESS, Moves.RECOVER, Moves.TACHYON_CUTTER ], - [Species.DREEPY]: [ Moves.SHADOW_BONE, Moves.POWER_UP_PUNCH, Moves.FIRE_LASH, Moves.DIRE_CLAW ], - [Species.ZACIAN]: [ Moves.MAGICAL_TORQUE, Moves.MIGHTY_CLEAVE, Moves.BITTER_BLADE, Moves.PRECIPICE_BLADES ], - [Species.ZAMAZENTA]: [ Moves.BULK_UP, Moves.BODY_PRESS, Moves.SLACK_OFF, Moves.DIAMOND_STORM ], - [Species.ETERNATUS]: [ Moves.BODY_PRESS, Moves.NASTY_PLOT, Moves.MALIGNANT_CHAIN, Moves.DRAGON_ENERGY ], - [Species.KUBFU]: [ Moves.METEOR_MASH, Moves.DRAIN_PUNCH, Moves.JET_PUNCH, Moves.DRAGON_DANCE ], - [Species.ZARUDE]: [ Moves.SAPPY_SEED, Moves.MIGHTY_CLEAVE, Moves.WICKED_BLOW, Moves.VICTORY_DANCE ], - [Species.REGIELEKI]: [ Moves.NASTY_PLOT, Moves.ICE_BEAM, Moves.EARTH_POWER, Moves.ELECTRO_DRIFT ], - [Species.REGIDRAGO]: [ Moves.SHELL_SIDE_ARM, Moves.FLAMETHROWER, Moves.TAKE_HEART, Moves.DRAGON_DARTS ], - [Species.GLASTRIER]: [ Moves.SPEED_SWAP, Moves.SLACK_OFF, Moves.HIGH_HORSEPOWER, Moves.GLACIAL_LANCE ], - [Species.SPECTRIER]: [ Moves.EARTH_POWER, Moves.MOONLIGHT, Moves.AURA_SPHERE, Moves.ASTRAL_BARRAGE ], - [Species.CALYREX]: [ Moves.SAPPY_SEED, Moves.RECOVER, Moves.SECRET_SWORD, Moves.PHOTON_GEYSER ], - [Species.ENAMORUS]: [ Moves.AEROBLAST, Moves.THOUSAND_ARROWS, Moves.STORED_POWER, Moves.FLEUR_CANNON ], - [Species.GALAR_MEOWTH]: [ Moves.LIQUIDATION, Moves.HORN_LEECH, Moves.BULLET_PUNCH, Moves.BEHEMOTH_BASH ], - [Species.GALAR_PONYTA]: [ Moves.MAGICAL_TORQUE, Moves.EXTREME_SPEED, Moves.FLARE_BLITZ, Moves.PHOTON_GEYSER ], - [Species.GALAR_SLOWPOKE]: [ Moves.SHED_TAIL, Moves.BADDY_BAD, Moves.MOONBLAST, Moves.PHOTON_GEYSER ], - [Species.GALAR_FARFETCHD]: [ Moves.ROOST, Moves.SACRED_SWORD, Moves.KINGS_SHIELD, Moves.BEHEMOTH_BLADE ], - [Species.GALAR_ARTICUNO]: [ Moves.SECRET_SWORD, Moves.NIGHT_DAZE, Moves.ICE_BEAM, Moves.OBLIVION_WING ], - [Species.GALAR_ZAPDOS]: [ Moves.POISON_JAB, Moves.FLOATY_FALL, Moves.ROOST, Moves.BOLT_BEAK ], - [Species.GALAR_MOLTRES]: [ Moves.ROOST, Moves.SLUDGE_BOMB, Moves.FLAMETHROWER, Moves.OBLIVION_WING ], - [Species.GALAR_CORSOLA]: [ Moves.SHELL_SMASH, Moves.AURA_SPHERE, Moves.INFERNAL_PARADE, Moves.ASTRAL_BARRAGE ], - [Species.GALAR_ZIGZAGOON]: [ Moves.CEASELESS_EDGE, Moves.FACADE, Moves.PARTING_SHOT, Moves.EXTREME_SPEED ], - [Species.GALAR_DARUMAKA]: [ Moves.ICE_SPINNER, Moves.ZING_ZAP, Moves.DRAIN_PUNCH, Moves.PYRO_BALL ], - [Species.GALAR_YAMASK]: [ Moves.STRENGTH_SAP, Moves.DIRE_CLAW, Moves.THOUSAND_WAVES, Moves.SPECTRAL_THIEF ], - [Species.GALAR_STUNFISK]: [ Moves.SPIKY_SHIELD, Moves.THOUSAND_ARROWS, Moves.STRENGTH_SAP, Moves.DOUBLE_IRON_BASH ], - [Species.HISUI_GROWLITHE]: [ Moves.WAVE_CRASH, Moves.HEAD_SMASH, Moves.VOLT_TACKLE, Moves.DRAGON_DANCE ], - [Species.HISUI_VOLTORB]: [ Moves.FROST_BREATH, Moves.NASTY_PLOT, Moves.APPLE_ACID, Moves.ELECTRO_DRIFT ], - [Species.HISUI_QWILFISH]: [ Moves.CEASELESS_EDGE, Moves.BANEFUL_BUNKER, Moves.RECOVER, Moves.FISHIOUS_REND ], - [Species.HISUI_SNEASEL]: [ Moves.DRAIN_PUNCH, Moves.KNOCK_OFF, Moves.PSYCHIC_FANGS, Moves.TRIPLE_AXEL ], - [Species.HISUI_ZORUA]: [ Moves.MOONBLAST, Moves.SECRET_SWORD, Moves.PARTING_SHOT, Moves.BLOOD_MOON ], + [SpeciesId.GROOKEY]: [ MoveId.ROCK_SLIDE, MoveId.PLAY_ROUGH, MoveId.GRASSY_GLIDE, MoveId.CLANGOROUS_SOUL ], + [SpeciesId.SCORBUNNY]: [ MoveId.EXTREME_SPEED, MoveId.HIGH_JUMP_KICK, MoveId.TRIPLE_AXEL, MoveId.BOLT_STRIKE ], + [SpeciesId.SOBBLE]: [ MoveId.AEROBLAST, MoveId.FROST_BREATH, MoveId.ENERGY_BALL, MoveId.NASTY_PLOT ], + [SpeciesId.SKWOVET]: [ MoveId.SUCKER_PUNCH, MoveId.SLACK_OFF, MoveId.COIL, MoveId.POPULATION_BOMB ], + [SpeciesId.ROOKIDEE]: [ MoveId.ROOST, MoveId.BODY_PRESS, MoveId.KINGS_SHIELD, MoveId.BEHEMOTH_BASH ], + [SpeciesId.BLIPBUG]: [ MoveId.HEAL_ORDER, MoveId.LUSTER_PURGE, MoveId.SLEEP_POWDER, MoveId.TAIL_GLOW ], + [SpeciesId.NICKIT]: [ MoveId.BADDY_BAD, MoveId.FLAMETHROWER, MoveId.SPARKLY_SWIRL, MoveId.MAKE_IT_RAIN ], + [SpeciesId.GOSSIFLEUR]: [ MoveId.PARTING_SHOT, MoveId.STRENGTH_SAP, MoveId.SAPPY_SEED, MoveId.SEED_FLARE ], + [SpeciesId.WOOLOO]: [ MoveId.NUZZLE, MoveId.MILK_DRINK, MoveId.BODY_PRESS, MoveId.MULTI_ATTACK ], + [SpeciesId.CHEWTLE]: [ MoveId.ICE_FANG, MoveId.PSYCHIC_FANGS, MoveId.SHELL_SMASH, MoveId.MIGHTY_CLEAVE ], + [SpeciesId.YAMPER]: [ MoveId.ICE_FANG, MoveId.SWORDS_DANCE, MoveId.THUNDER_FANG, MoveId.BOLT_STRIKE ], + [SpeciesId.ROLYCOLY]: [ MoveId.BITTER_BLADE, MoveId.BODY_PRESS, MoveId.BULK_UP, MoveId.DIAMOND_STORM ], + [SpeciesId.APPLIN]: [ MoveId.CORE_ENFORCER, MoveId.COMBAT_TORQUE, MoveId.SAPPY_SEED, MoveId.MATCHA_GOTCHA ], + [SpeciesId.SILICOBRA]: [ MoveId.SHORE_UP, MoveId.SHED_TAIL, MoveId.MOUNTAIN_GALE, MoveId.THOUSAND_ARROWS ], + [SpeciesId.CRAMORANT]: [ MoveId.APPLE_ACID, MoveId.SURF, MoveId.BOLT_BEAK, MoveId.OBLIVION_WING ], + [SpeciesId.ARROKUDA]: [ MoveId.SUPERCELL_SLAM, MoveId.TRIPLE_DIVE, MoveId.ICE_SPINNER, MoveId.SWORDS_DANCE ], + [SpeciesId.TOXEL]: [ MoveId.BUZZY_BUZZ, MoveId.BUG_BUZZ, MoveId.SPARKLING_ARIA, MoveId.TORCH_SONG ], + [SpeciesId.SIZZLIPEDE]: [ MoveId.BURNING_BULWARK, MoveId.ZING_ZAP, MoveId.FIRST_IMPRESSION, MoveId.BITTER_BLADE ], + [SpeciesId.CLOBBOPUS]: [ MoveId.STORM_THROW, MoveId.JET_PUNCH, MoveId.MACH_PUNCH, MoveId.SURGING_STRIKES ], + [SpeciesId.SINISTEA]: [ MoveId.SPLISHY_SPLASH, MoveId.MATCHA_GOTCHA, MoveId.DRAINING_KISS, MoveId.MOONGEIST_BEAM ], + [SpeciesId.HATENNA]: [ MoveId.RECOVER, MoveId.MOONBLAST, MoveId.BUZZY_BUZZ, MoveId.TORCH_SONG ], + [SpeciesId.IMPIDIMP]: [ MoveId.SLACK_OFF, MoveId.PARTING_SHOT, MoveId.OCTOLOCK, MoveId.WICKED_BLOW ], + [SpeciesId.MILCERY]: [ MoveId.MOONBLAST, MoveId.CHILLY_RECEPTION, MoveId.EARTH_POWER, MoveId.GEOMANCY ], + [SpeciesId.FALINKS]: [ MoveId.BATON_PASS, MoveId.POWER_TRIP, MoveId.COMBAT_TORQUE, MoveId.HEAL_ORDER ], + [SpeciesId.PINCURCHIN]: [ MoveId.TRICK_ROOM, MoveId.VOLT_SWITCH, MoveId.STRENGTH_SAP, MoveId.THUNDERCLAP ], + [SpeciesId.SNOM]: [ MoveId.FROST_BREATH, MoveId.HEAL_ORDER, MoveId.EARTH_POWER, MoveId.SPORE ], + [SpeciesId.STONJOURNER]: [ MoveId.BODY_PRESS, MoveId.HELPING_HAND, MoveId.ACCELEROCK, MoveId.DIAMOND_STORM ], + [SpeciesId.EISCUE]: [ MoveId.TRIPLE_AXEL, MoveId.AQUA_STEP, MoveId.AXE_KICK, MoveId.SHELL_SMASH ], + [SpeciesId.INDEEDEE]: [ MoveId.MATCHA_GOTCHA, MoveId.EXPANDING_FORCE, MoveId.MOONBLAST, MoveId.REVIVAL_BLESSING ], + [SpeciesId.MORPEKO]: [ MoveId.TRIPLE_AXEL, MoveId.OBSTRUCT, MoveId.SWORDS_DANCE, MoveId.COLLISION_COURSE ], + [SpeciesId.CUFANT]: [ MoveId.LIQUIDATION, MoveId.CURSE, MoveId.COMBAT_TORQUE, MoveId.GIGATON_HAMMER ], + [SpeciesId.DRACOZOLT]: [ MoveId.TRIPLE_AXEL, MoveId.GUNK_SHOT, MoveId.FIRE_LASH, MoveId.DRAGON_DANCE ], + [SpeciesId.ARCTOZOLT]: [ MoveId.MOUNTAIN_GALE, MoveId.AQUA_STEP, MoveId.HIGH_HORSEPOWER, MoveId.SHIFT_GEAR ], + [SpeciesId.DRACOVISH]: [ MoveId.TRIPLE_AXEL, MoveId.DRAGON_HAMMER, MoveId.THUNDER_FANG, MoveId.DRAGON_DANCE ], + [SpeciesId.ARCTOVISH]: [ MoveId.ICE_FANG, MoveId.THUNDER_FANG, MoveId.HIGH_HORSEPOWER, MoveId.SHIFT_GEAR ], + [SpeciesId.DURALUDON]: [ MoveId.CORE_ENFORCER, MoveId.BODY_PRESS, MoveId.RECOVER, MoveId.TACHYON_CUTTER ], + [SpeciesId.DREEPY]: [ MoveId.SHADOW_BONE, MoveId.POWER_UP_PUNCH, MoveId.FIRE_LASH, MoveId.DIRE_CLAW ], + [SpeciesId.ZACIAN]: [ MoveId.MAGICAL_TORQUE, MoveId.MIGHTY_CLEAVE, MoveId.BITTER_BLADE, MoveId.PRECIPICE_BLADES ], + [SpeciesId.ZAMAZENTA]: [ MoveId.BULK_UP, MoveId.BODY_PRESS, MoveId.SLACK_OFF, MoveId.DIAMOND_STORM ], + [SpeciesId.ETERNATUS]: [ MoveId.BODY_PRESS, MoveId.NASTY_PLOT, MoveId.MALIGNANT_CHAIN, MoveId.DRAGON_ENERGY ], + [SpeciesId.KUBFU]: [ MoveId.METEOR_MASH, MoveId.DRAIN_PUNCH, MoveId.JET_PUNCH, MoveId.DRAGON_DANCE ], + [SpeciesId.ZARUDE]: [ MoveId.SAPPY_SEED, MoveId.MIGHTY_CLEAVE, MoveId.WICKED_BLOW, MoveId.VICTORY_DANCE ], + [SpeciesId.REGIELEKI]: [ MoveId.NASTY_PLOT, MoveId.ICE_BEAM, MoveId.EARTH_POWER, MoveId.ELECTRO_DRIFT ], + [SpeciesId.REGIDRAGO]: [ MoveId.SHELL_SIDE_ARM, MoveId.FLAMETHROWER, MoveId.TAKE_HEART, MoveId.DRAGON_DARTS ], + [SpeciesId.GLASTRIER]: [ MoveId.SPEED_SWAP, MoveId.SLACK_OFF, MoveId.HIGH_HORSEPOWER, MoveId.GLACIAL_LANCE ], + [SpeciesId.SPECTRIER]: [ MoveId.EARTH_POWER, MoveId.MOONLIGHT, MoveId.AURA_SPHERE, MoveId.ASTRAL_BARRAGE ], + [SpeciesId.CALYREX]: [ MoveId.SAPPY_SEED, MoveId.RECOVER, MoveId.SECRET_SWORD, MoveId.PHOTON_GEYSER ], + [SpeciesId.ENAMORUS]: [ MoveId.AEROBLAST, MoveId.THOUSAND_ARROWS, MoveId.STORED_POWER, MoveId.FLEUR_CANNON ], + [SpeciesId.GALAR_MEOWTH]: [ MoveId.LIQUIDATION, MoveId.HORN_LEECH, MoveId.BULLET_PUNCH, MoveId.BEHEMOTH_BASH ], + [SpeciesId.GALAR_PONYTA]: [ MoveId.MAGICAL_TORQUE, MoveId.EXTREME_SPEED, MoveId.FLARE_BLITZ, MoveId.PHOTON_GEYSER ], + [SpeciesId.GALAR_SLOWPOKE]: [ MoveId.SHED_TAIL, MoveId.BADDY_BAD, MoveId.MOONBLAST, MoveId.PHOTON_GEYSER ], + [SpeciesId.GALAR_FARFETCHD]: [ MoveId.ROOST, MoveId.SACRED_SWORD, MoveId.KINGS_SHIELD, MoveId.BEHEMOTH_BLADE ], + [SpeciesId.GALAR_ARTICUNO]: [ MoveId.SECRET_SWORD, MoveId.NIGHT_DAZE, MoveId.ICE_BEAM, MoveId.OBLIVION_WING ], + [SpeciesId.GALAR_ZAPDOS]: [ MoveId.POISON_JAB, MoveId.FLOATY_FALL, MoveId.ROOST, MoveId.BOLT_BEAK ], + [SpeciesId.GALAR_MOLTRES]: [ MoveId.ROOST, MoveId.SLUDGE_BOMB, MoveId.FLAMETHROWER, MoveId.OBLIVION_WING ], + [SpeciesId.GALAR_CORSOLA]: [ MoveId.SHELL_SMASH, MoveId.AURA_SPHERE, MoveId.INFERNAL_PARADE, MoveId.ASTRAL_BARRAGE ], + [SpeciesId.GALAR_ZIGZAGOON]: [ MoveId.CEASELESS_EDGE, MoveId.FACADE, MoveId.PARTING_SHOT, MoveId.EXTREME_SPEED ], + [SpeciesId.GALAR_DARUMAKA]: [ MoveId.ICE_SPINNER, MoveId.ZING_ZAP, MoveId.DRAIN_PUNCH, MoveId.PYRO_BALL ], + [SpeciesId.GALAR_YAMASK]: [ MoveId.STRENGTH_SAP, MoveId.DIRE_CLAW, MoveId.THOUSAND_WAVES, MoveId.SPECTRAL_THIEF ], + [SpeciesId.GALAR_STUNFISK]: [ MoveId.SPIKY_SHIELD, MoveId.THOUSAND_ARROWS, MoveId.STRENGTH_SAP, MoveId.DOUBLE_IRON_BASH ], + [SpeciesId.HISUI_GROWLITHE]: [ MoveId.WAVE_CRASH, MoveId.HEAD_SMASH, MoveId.VOLT_TACKLE, MoveId.DRAGON_DANCE ], + [SpeciesId.HISUI_VOLTORB]: [ MoveId.FROST_BREATH, MoveId.NASTY_PLOT, MoveId.APPLE_ACID, MoveId.ELECTRO_DRIFT ], + [SpeciesId.HISUI_QWILFISH]: [ MoveId.CEASELESS_EDGE, MoveId.BANEFUL_BUNKER, MoveId.RECOVER, MoveId.FISHIOUS_REND ], + [SpeciesId.HISUI_SNEASEL]: [ MoveId.DRAIN_PUNCH, MoveId.KNOCK_OFF, MoveId.PSYCHIC_FANGS, MoveId.TRIPLE_AXEL ], + [SpeciesId.HISUI_ZORUA]: [ MoveId.MOONBLAST, MoveId.SECRET_SWORD, MoveId.PARTING_SHOT, MoveId.BLOOD_MOON ], - [Species.SPRIGATITO]: [ Moves.FIRE_LASH, Moves.TRIPLE_AXEL, Moves.SUCKER_PUNCH, Moves.WICKED_BLOW ], - [Species.FUECOCO]: [ Moves.ALLURING_VOICE, Moves.SLACK_OFF, Moves.OVERDRIVE, Moves.MOONGEIST_BEAM ], - [Species.QUAXLY]: [ Moves.DRAGON_DANCE, Moves.TRIPLE_AXEL, Moves.POWER_TRIP, Moves.THUNDEROUS_KICK ], - [Species.LECHONK]: [ Moves.MILK_DRINK, Moves.PSYSHIELD_BASH, Moves.BLAZING_TORQUE, Moves.FILLET_AWAY ], - [Species.TAROUNTULA]: [ Moves.STONE_AXE, Moves.LEECH_LIFE, Moves.THIEF, Moves.SPORE ], - [Species.NYMBLE]: [ Moves.KNOCK_OFF, Moves.FELL_STINGER, Moves.ATTACK_ORDER, Moves.WICKED_BLOW ], - [Species.PAWMI]: [ Moves.DRAIN_PUNCH, Moves.METEOR_MASH, Moves.JET_PUNCH, Moves.PLASMA_FISTS ], - [Species.TANDEMAUS]: [ Moves.BATON_PASS, Moves.COVET, Moves.SIZZLY_SLIDE, Moves.REVIVAL_BLESSING ], - [Species.FIDOUGH]: [ Moves.SOFT_BOILED, Moves.HIGH_HORSEPOWER, Moves.SIZZLY_SLIDE, Moves.TIDY_UP ], - [Species.SMOLIV]: [ Moves.STRENGTH_SAP, Moves.EARTH_POWER, Moves.CALM_MIND, Moves.BOOMBURST ], - [Species.SQUAWKABILLY]: [ Moves.PARTING_SHOT, Moves.EARTHQUAKE, Moves.FLARE_BLITZ, Moves.EXTREME_SPEED ], - [Species.NACLI]: [ Moves.BODY_PRESS, Moves.TOXIC, Moves.CURSE, Moves.DIAMOND_STORM ], - [Species.CHARCADET]: [ Moves.SACRED_SWORD, Moves.PHOTON_GEYSER, Moves.MOONBLAST, Moves.SPECTRAL_THIEF ], - [Species.TADBULB]: [ Moves.PARABOLIC_CHARGE, Moves.SCALD, Moves.EARTH_POWER, Moves.ELECTRO_SHOT ], - [Species.WATTREL]: [ Moves.NASTY_PLOT, Moves.SPLISHY_SPLASH, Moves.SANDSEAR_STORM, Moves.WILDBOLT_STORM ], - [Species.MASCHIFF]: [ Moves.PARTING_SHOT, Moves.COMBAT_TORQUE, Moves.PSYCHIC_FANGS, Moves.NO_RETREAT ], - [Species.SHROODLE]: [ Moves.GASTRO_ACID, Moves.PARTING_SHOT, Moves.TOXIC, Moves.SKETCH ], - [Species.BRAMBLIN]: [ Moves.TAILWIND, Moves.STRENGTH_SAP, Moves.FLOWER_TRICK, Moves.LAST_RESPECTS ], - [Species.TOEDSCOOL]: [ Moves.STRENGTH_SAP, Moves.TOPSY_TURVY, Moves.SAPPY_SEED, Moves.TAIL_GLOW ], - [Species.KLAWF]: [ Moves.CRABHAMMER, Moves.SHORE_UP, Moves.MIGHTY_CLEAVE, Moves.SHELL_SMASH ], - [Species.CAPSAKID]: [ Moves.STRENGTH_SAP, Moves.APPLE_ACID, Moves.FROST_BREATH, Moves.TORCH_SONG ], - [Species.RELLOR]: [ Moves.HEAL_BLOCK, Moves.RECOVER, Moves.MAGIC_POWDER, Moves.LUMINA_CRASH ], - [Species.FLITTLE]: [ Moves.COSMIC_POWER, Moves.AURA_SPHERE, Moves.ROOST, Moves.FIERY_DANCE ], - [Species.TINKATINK]: [ Moves.MAGICAL_TORQUE, Moves.PYRO_BALL, Moves.IVY_CUDGEL, Moves.SHIFT_GEAR ], - [Species.WIGLETT]: [ Moves.SHELL_SMASH, Moves.ICICLE_CRASH, Moves.SEED_BOMB, Moves.SURGING_STRIKES ], - [Species.BOMBIRDIER]: [ Moves.FLOATY_FALL, Moves.SWORDS_DANCE, Moves.SUCKER_PUNCH, Moves.MIGHTY_CLEAVE ], - [Species.FINIZEN]: [ Moves.TRIPLE_AXEL, Moves.DRAIN_PUNCH, Moves.HEADLONG_RUSH, Moves.SURGING_STRIKES ], - [Species.VAROOM]: [ Moves.COMBAT_TORQUE, Moves.U_TURN, Moves.BLAZING_TORQUE, Moves.NOXIOUS_TORQUE ], - [Species.CYCLIZAR]: [ Moves.PARTING_SHOT, Moves.FIRE_LASH, Moves.MAGICAL_TORQUE, Moves.GLAIVE_RUSH ], - [Species.ORTHWORM]: [ Moves.SIZZLY_SLIDE, Moves.COIL, Moves.BODY_PRESS, Moves.SHORE_UP ], - [Species.GLIMMET]: [ Moves.CALM_MIND, Moves.GIGA_DRAIN, Moves.FIERY_DANCE, Moves.MALIGNANT_CHAIN ], - [Species.GREAVARD]: [ Moves.SHADOW_BONE, Moves.SIZZLY_SLIDE, Moves.SHORE_UP, Moves.COLLISION_COURSE ], - [Species.FLAMIGO]: [ Moves.THUNDEROUS_KICK, Moves.TRIPLE_AXEL, Moves.FLOATY_FALL, Moves.VICTORY_DANCE ], - [Species.CETODDLE]: [ Moves.ZING_ZAP, Moves.HIGH_HORSEPOWER, Moves.SLACK_OFF, Moves.DRAGON_DANCE ], - [Species.VELUZA]: [ Moves.PSYBLADE, Moves.LEAF_BLADE, Moves.CEASELESS_EDGE, Moves.BITTER_BLADE ], - [Species.DONDOZO]: [ Moves.SOFT_BOILED, Moves.SIZZLY_SLIDE, Moves.BREAKING_SWIPE, Moves.SALT_CURE ], - [Species.TATSUGIRI]: [ Moves.SLUDGE_BOMB, Moves.FILLET_AWAY, Moves.CORE_ENFORCER, Moves.STEAM_ERUPTION ], - [Species.GREAT_TUSK]: [ Moves.STONE_AXE, Moves.MORNING_SUN, Moves.COLLISION_COURSE, Moves.SHIFT_GEAR ], - [Species.SCREAM_TAIL]: [ Moves.TORCH_SONG, Moves.GLITZY_GLOW, Moves.MOONLIGHT, Moves.SPARKLY_SWIRL ], - [Species.BRUTE_BONNET]: [ Moves.SAPPY_SEED, Moves.STRENGTH_SAP, Moves.EARTHQUAKE, Moves.WICKED_BLOW ], - [Species.FLUTTER_MANE]: [ Moves.MOONLIGHT, Moves.NASTY_PLOT, Moves.EARTH_POWER, Moves.MOONGEIST_BEAM ], - [Species.SLITHER_WING]: [ Moves.MIGHTY_CLEAVE, Moves.THUNDEROUS_KICK, Moves.FIRE_LASH, Moves.VICTORY_DANCE ], - [Species.SANDY_SHOCKS]: [ Moves.MORNING_SUN, Moves.ICE_BEAM, Moves.NASTY_PLOT, Moves.THUNDERCLAP ], - [Species.IRON_TREADS]: [ Moves.FUSION_BOLT, Moves.SHIFT_GEAR, Moves.SHORE_UP, Moves.SUNSTEEL_STRIKE ], - [Species.IRON_BUNDLE]: [ Moves.EARTH_POWER, Moves.SPLISHY_SPLASH, Moves.VOLT_SWITCH, Moves.NASTY_PLOT ], - [Species.IRON_HANDS]: [ Moves.DRAIN_PUNCH, Moves.BULK_UP, Moves.PLASMA_FISTS, Moves.ICE_HAMMER ], - [Species.IRON_JUGULIS]: [ Moves.FIERY_WRATH, Moves.ROOST, Moves.NASTY_PLOT, Moves.OBLIVION_WING ], - [Species.IRON_MOTH]: [ Moves.EARTH_POWER, Moves.SEARING_SHOT, Moves.MALIGNANT_CHAIN, Moves.QUIVER_DANCE ], - [Species.IRON_THORNS]: [ Moves.DIAMOND_STORM, Moves.SHORE_UP, Moves.SHIFT_GEAR, Moves.PLASMA_FISTS ], - [Species.FRIGIBAX]: [ Moves.BEHEMOTH_BLADE, Moves.DRAGON_DANCE, Moves.MOUNTAIN_GALE, Moves.PRECIPICE_BLADES ], - [Species.GIMMIGHOUL]: [ Moves.HAPPY_HOUR, Moves.AURA_SPHERE, Moves.SURF, Moves.ASTRAL_BARRAGE ], - [Species.WO_CHIEN]: [ Moves.SPORE, Moves.FIERY_WRATH, Moves.SAPPY_SEED, Moves.STRENGTH_SAP ], - [Species.CHIEN_PAO]: [ Moves.KNOCK_OFF, Moves.PARTING_SHOT, Moves.TRIPLE_AXEL, Moves.BITTER_BLADE ], - [Species.TING_LU]: [ Moves.SHORE_UP, Moves.CEASELESS_EDGE, Moves.SAPPY_SEED, Moves.PRECIPICE_BLADES ], - [Species.CHI_YU]: [ Moves.FIERY_WRATH, Moves.HYDRO_STEAM, Moves.MORNING_SUN, Moves.BLUE_FLARE ], - [Species.ROARING_MOON]: [ Moves.FIRE_LASH, Moves.DRAGON_HAMMER, Moves.METEOR_MASH, Moves.DRAGON_ASCENT ], - [Species.IRON_VALIANT]: [ Moves.PLASMA_FISTS, Moves.NO_RETREAT, Moves.SECRET_SWORD, Moves.MAGICAL_TORQUE ], - [Species.KORAIDON]: [ Moves.SUNSTEEL_STRIKE, Moves.SOLAR_BLADE, Moves.DRAGON_DARTS, Moves.BITTER_BLADE ], - [Species.MIRAIDON]: [ Moves.FROST_BREATH, Moves.WILDBOLT_STORM, Moves.SPACIAL_REND, Moves.RISING_VOLTAGE ], - [Species.WALKING_WAKE]: [ Moves.BOUNCY_BUBBLE, Moves.FUSION_FLARE, Moves.SLUDGE_WAVE, Moves.CORE_ENFORCER ], - [Species.IRON_LEAVES]: [ Moves.BITTER_BLADE, Moves.U_TURN, Moves.MIGHTY_CLEAVE, Moves.VICTORY_DANCE ], - [Species.POLTCHAGEIST]: [ Moves.PARABOLIC_CHARGE, Moves.BOUNCY_BUBBLE, Moves.LEECH_SEED, Moves.SPARKLY_SWIRL ], - [Species.OKIDOGI]: [ Moves.COMBAT_TORQUE, Moves.TIDY_UP, Moves.DIRE_CLAW, Moves.WICKED_BLOW ], - [Species.MUNKIDORI]: [ Moves.TWIN_BEAM, Moves.HEAT_WAVE, Moves.EARTH_POWER, Moves.MALIGNANT_CHAIN ], - [Species.FEZANDIPITI]: [ Moves.BARB_BARRAGE, Moves.BONEMERANG, Moves.TRIPLE_AXEL, Moves.VICTORY_DANCE ], - [Species.OGERPON]: [ Moves.SLEEP_POWDER, Moves.BONEMERANG, Moves.TRIPLE_AXEL, Moves.FLOWER_TRICK ], - [Species.GOUGING_FIRE]: [ Moves.EXTREME_SPEED, Moves.BULK_UP, Moves.SACRED_FIRE, Moves.GLAIVE_RUSH ], - [Species.RAGING_BOLT]: [ Moves.NASTY_PLOT, Moves.FLAMETHROWER, Moves.MORNING_SUN, Moves.ELECTRO_DRIFT ], - [Species.IRON_BOULDER]: [ Moves.PSYBLADE, Moves.KOWTOW_CLEAVE, Moves.STONE_AXE, Moves.BITTER_BLADE ], - [Species.IRON_CROWN]: [ Moves.NASTY_PLOT, Moves.SECRET_SWORD, Moves.PSYSTRIKE, Moves.ELECTRO_DRIFT ], - [Species.TERAPAGOS]: [ Moves.MOONBLAST, Moves.NASTY_PLOT, Moves.ASTRAL_BARRAGE, Moves.RECOVER ], - [Species.PECHARUNT]: [ Moves.TAKE_HEART, Moves.BODY_PRESS, Moves.SAPPY_SEED, Moves.ASTRAL_BARRAGE ], - [Species.PALDEA_TAUROS]: [ Moves.NO_RETREAT, Moves.BLAZING_TORQUE, Moves.AQUA_STEP, Moves.THUNDEROUS_KICK ], - [Species.PALDEA_WOOPER]: [ Moves.STONE_AXE, Moves.RECOVER, Moves.BANEFUL_BUNKER, Moves.BARB_BARRAGE ], - [Species.BLOODMOON_URSALUNA]: [ Moves.NASTY_PLOT, Moves.ROCK_POLISH, Moves.SANDSEAR_STORM, Moves.BOOMBURST ] + [SpeciesId.SPRIGATITO]: [ MoveId.FIRE_LASH, MoveId.TRIPLE_AXEL, MoveId.SUCKER_PUNCH, MoveId.WICKED_BLOW ], + [SpeciesId.FUECOCO]: [ MoveId.ALLURING_VOICE, MoveId.SLACK_OFF, MoveId.OVERDRIVE, MoveId.MOONGEIST_BEAM ], + [SpeciesId.QUAXLY]: [ MoveId.DRAGON_DANCE, MoveId.TRIPLE_AXEL, MoveId.POWER_TRIP, MoveId.THUNDEROUS_KICK ], + [SpeciesId.LECHONK]: [ MoveId.MILK_DRINK, MoveId.PSYSHIELD_BASH, MoveId.BLAZING_TORQUE, MoveId.FILLET_AWAY ], + [SpeciesId.TAROUNTULA]: [ MoveId.STONE_AXE, MoveId.LEECH_LIFE, MoveId.THIEF, MoveId.SPORE ], + [SpeciesId.NYMBLE]: [ MoveId.KNOCK_OFF, MoveId.FELL_STINGER, MoveId.ATTACK_ORDER, MoveId.WICKED_BLOW ], + [SpeciesId.PAWMI]: [ MoveId.DRAIN_PUNCH, MoveId.METEOR_MASH, MoveId.JET_PUNCH, MoveId.PLASMA_FISTS ], + [SpeciesId.TANDEMAUS]: [ MoveId.BATON_PASS, MoveId.COVET, MoveId.SIZZLY_SLIDE, MoveId.REVIVAL_BLESSING ], + [SpeciesId.FIDOUGH]: [ MoveId.SOFT_BOILED, MoveId.HIGH_HORSEPOWER, MoveId.SIZZLY_SLIDE, MoveId.TIDY_UP ], + [SpeciesId.SMOLIV]: [ MoveId.STRENGTH_SAP, MoveId.EARTH_POWER, MoveId.CALM_MIND, MoveId.BOOMBURST ], + [SpeciesId.SQUAWKABILLY]: [ MoveId.PARTING_SHOT, MoveId.EARTHQUAKE, MoveId.FLARE_BLITZ, MoveId.EXTREME_SPEED ], + [SpeciesId.NACLI]: [ MoveId.BODY_PRESS, MoveId.TOXIC, MoveId.CURSE, MoveId.DIAMOND_STORM ], + [SpeciesId.CHARCADET]: [ MoveId.SACRED_SWORD, MoveId.PHOTON_GEYSER, MoveId.MOONBLAST, MoveId.SPECTRAL_THIEF ], + [SpeciesId.TADBULB]: [ MoveId.PARABOLIC_CHARGE, MoveId.SCALD, MoveId.EARTH_POWER, MoveId.ELECTRO_SHOT ], + [SpeciesId.WATTREL]: [ MoveId.NASTY_PLOT, MoveId.SPLISHY_SPLASH, MoveId.SANDSEAR_STORM, MoveId.WILDBOLT_STORM ], + [SpeciesId.MASCHIFF]: [ MoveId.PARTING_SHOT, MoveId.COMBAT_TORQUE, MoveId.PSYCHIC_FANGS, MoveId.NO_RETREAT ], + [SpeciesId.SHROODLE]: [ MoveId.GASTRO_ACID, MoveId.PARTING_SHOT, MoveId.TOXIC, MoveId.SKETCH ], + [SpeciesId.BRAMBLIN]: [ MoveId.TAILWIND, MoveId.STRENGTH_SAP, MoveId.FLOWER_TRICK, MoveId.LAST_RESPECTS ], + [SpeciesId.TOEDSCOOL]: [ MoveId.STRENGTH_SAP, MoveId.TOPSY_TURVY, MoveId.SAPPY_SEED, MoveId.TAIL_GLOW ], + [SpeciesId.KLAWF]: [ MoveId.CRABHAMMER, MoveId.SHORE_UP, MoveId.MIGHTY_CLEAVE, MoveId.SHELL_SMASH ], + [SpeciesId.CAPSAKID]: [ MoveId.STRENGTH_SAP, MoveId.APPLE_ACID, MoveId.FROST_BREATH, MoveId.TORCH_SONG ], + [SpeciesId.RELLOR]: [ MoveId.HEAL_BLOCK, MoveId.RECOVER, MoveId.MAGIC_POWDER, MoveId.LUMINA_CRASH ], + [SpeciesId.FLITTLE]: [ MoveId.COSMIC_POWER, MoveId.AURA_SPHERE, MoveId.ROOST, MoveId.FIERY_DANCE ], + [SpeciesId.TINKATINK]: [ MoveId.MAGICAL_TORQUE, MoveId.PYRO_BALL, MoveId.IVY_CUDGEL, MoveId.SHIFT_GEAR ], + [SpeciesId.WIGLETT]: [ MoveId.SHELL_SMASH, MoveId.ICICLE_CRASH, MoveId.SEED_BOMB, MoveId.SURGING_STRIKES ], + [SpeciesId.BOMBIRDIER]: [ MoveId.FLOATY_FALL, MoveId.SWORDS_DANCE, MoveId.SUCKER_PUNCH, MoveId.MIGHTY_CLEAVE ], + [SpeciesId.FINIZEN]: [ MoveId.TRIPLE_AXEL, MoveId.DRAIN_PUNCH, MoveId.HEADLONG_RUSH, MoveId.SURGING_STRIKES ], + [SpeciesId.VAROOM]: [ MoveId.COMBAT_TORQUE, MoveId.U_TURN, MoveId.BLAZING_TORQUE, MoveId.NOXIOUS_TORQUE ], + [SpeciesId.CYCLIZAR]: [ MoveId.PARTING_SHOT, MoveId.FIRE_LASH, MoveId.MAGICAL_TORQUE, MoveId.GLAIVE_RUSH ], + [SpeciesId.ORTHWORM]: [ MoveId.SIZZLY_SLIDE, MoveId.COIL, MoveId.BODY_PRESS, MoveId.SHORE_UP ], + [SpeciesId.GLIMMET]: [ MoveId.CALM_MIND, MoveId.GIGA_DRAIN, MoveId.FIERY_DANCE, MoveId.MALIGNANT_CHAIN ], + [SpeciesId.GREAVARD]: [ MoveId.SHADOW_BONE, MoveId.SIZZLY_SLIDE, MoveId.SHORE_UP, MoveId.COLLISION_COURSE ], + [SpeciesId.FLAMIGO]: [ MoveId.THUNDEROUS_KICK, MoveId.TRIPLE_AXEL, MoveId.FLOATY_FALL, MoveId.VICTORY_DANCE ], + [SpeciesId.CETODDLE]: [ MoveId.ZING_ZAP, MoveId.HIGH_HORSEPOWER, MoveId.SLACK_OFF, MoveId.DRAGON_DANCE ], + [SpeciesId.VELUZA]: [ MoveId.PSYBLADE, MoveId.LEAF_BLADE, MoveId.CEASELESS_EDGE, MoveId.BITTER_BLADE ], + [SpeciesId.DONDOZO]: [ MoveId.SOFT_BOILED, MoveId.SIZZLY_SLIDE, MoveId.BREAKING_SWIPE, MoveId.SALT_CURE ], + [SpeciesId.TATSUGIRI]: [ MoveId.SLUDGE_BOMB, MoveId.FILLET_AWAY, MoveId.CORE_ENFORCER, MoveId.STEAM_ERUPTION ], + [SpeciesId.GREAT_TUSK]: [ MoveId.STONE_AXE, MoveId.MORNING_SUN, MoveId.COLLISION_COURSE, MoveId.SHIFT_GEAR ], + [SpeciesId.SCREAM_TAIL]: [ MoveId.TORCH_SONG, MoveId.GLITZY_GLOW, MoveId.MOONLIGHT, MoveId.SPARKLY_SWIRL ], + [SpeciesId.BRUTE_BONNET]: [ MoveId.SAPPY_SEED, MoveId.STRENGTH_SAP, MoveId.EARTHQUAKE, MoveId.WICKED_BLOW ], + [SpeciesId.FLUTTER_MANE]: [ MoveId.MOONLIGHT, MoveId.NASTY_PLOT, MoveId.EARTH_POWER, MoveId.MOONGEIST_BEAM ], + [SpeciesId.SLITHER_WING]: [ MoveId.MIGHTY_CLEAVE, MoveId.THUNDEROUS_KICK, MoveId.FIRE_LASH, MoveId.VICTORY_DANCE ], + [SpeciesId.SANDY_SHOCKS]: [ MoveId.MORNING_SUN, MoveId.ICE_BEAM, MoveId.NASTY_PLOT, MoveId.THUNDERCLAP ], + [SpeciesId.IRON_TREADS]: [ MoveId.FUSION_BOLT, MoveId.SHIFT_GEAR, MoveId.SHORE_UP, MoveId.SUNSTEEL_STRIKE ], + [SpeciesId.IRON_BUNDLE]: [ MoveId.EARTH_POWER, MoveId.SPLISHY_SPLASH, MoveId.VOLT_SWITCH, MoveId.NASTY_PLOT ], + [SpeciesId.IRON_HANDS]: [ MoveId.DRAIN_PUNCH, MoveId.BULK_UP, MoveId.PLASMA_FISTS, MoveId.ICE_HAMMER ], + [SpeciesId.IRON_JUGULIS]: [ MoveId.FIERY_WRATH, MoveId.ROOST, MoveId.NASTY_PLOT, MoveId.OBLIVION_WING ], + [SpeciesId.IRON_MOTH]: [ MoveId.EARTH_POWER, MoveId.SEARING_SHOT, MoveId.MALIGNANT_CHAIN, MoveId.QUIVER_DANCE ], + [SpeciesId.IRON_THORNS]: [ MoveId.DIAMOND_STORM, MoveId.SHORE_UP, MoveId.SHIFT_GEAR, MoveId.PLASMA_FISTS ], + [SpeciesId.FRIGIBAX]: [ MoveId.BEHEMOTH_BLADE, MoveId.DRAGON_DANCE, MoveId.MOUNTAIN_GALE, MoveId.PRECIPICE_BLADES ], + [SpeciesId.GIMMIGHOUL]: [ MoveId.HAPPY_HOUR, MoveId.AURA_SPHERE, MoveId.SURF, MoveId.ASTRAL_BARRAGE ], + [SpeciesId.WO_CHIEN]: [ MoveId.SPORE, MoveId.FIERY_WRATH, MoveId.SAPPY_SEED, MoveId.STRENGTH_SAP ], + [SpeciesId.CHIEN_PAO]: [ MoveId.KNOCK_OFF, MoveId.PARTING_SHOT, MoveId.TRIPLE_AXEL, MoveId.BITTER_BLADE ], + [SpeciesId.TING_LU]: [ MoveId.SHORE_UP, MoveId.CEASELESS_EDGE, MoveId.SAPPY_SEED, MoveId.PRECIPICE_BLADES ], + [SpeciesId.CHI_YU]: [ MoveId.FIERY_WRATH, MoveId.HYDRO_STEAM, MoveId.MORNING_SUN, MoveId.BLUE_FLARE ], + [SpeciesId.ROARING_MOON]: [ MoveId.FIRE_LASH, MoveId.DRAGON_HAMMER, MoveId.METEOR_MASH, MoveId.DRAGON_ASCENT ], + [SpeciesId.IRON_VALIANT]: [ MoveId.PLASMA_FISTS, MoveId.NO_RETREAT, MoveId.SECRET_SWORD, MoveId.MAGICAL_TORQUE ], + [SpeciesId.KORAIDON]: [ MoveId.SUNSTEEL_STRIKE, MoveId.SOLAR_BLADE, MoveId.DRAGON_DARTS, MoveId.BITTER_BLADE ], + [SpeciesId.MIRAIDON]: [ MoveId.FROST_BREATH, MoveId.WILDBOLT_STORM, MoveId.SPACIAL_REND, MoveId.RISING_VOLTAGE ], + [SpeciesId.WALKING_WAKE]: [ MoveId.BOUNCY_BUBBLE, MoveId.FUSION_FLARE, MoveId.SLUDGE_WAVE, MoveId.CORE_ENFORCER ], + [SpeciesId.IRON_LEAVES]: [ MoveId.BITTER_BLADE, MoveId.U_TURN, MoveId.MIGHTY_CLEAVE, MoveId.VICTORY_DANCE ], + [SpeciesId.POLTCHAGEIST]: [ MoveId.PARABOLIC_CHARGE, MoveId.BOUNCY_BUBBLE, MoveId.LEECH_SEED, MoveId.SPARKLY_SWIRL ], + [SpeciesId.OKIDOGI]: [ MoveId.COMBAT_TORQUE, MoveId.TIDY_UP, MoveId.DIRE_CLAW, MoveId.WICKED_BLOW ], + [SpeciesId.MUNKIDORI]: [ MoveId.TWIN_BEAM, MoveId.HEAT_WAVE, MoveId.EARTH_POWER, MoveId.MALIGNANT_CHAIN ], + [SpeciesId.FEZANDIPITI]: [ MoveId.BARB_BARRAGE, MoveId.BONEMERANG, MoveId.TRIPLE_AXEL, MoveId.VICTORY_DANCE ], + [SpeciesId.OGERPON]: [ MoveId.SLEEP_POWDER, MoveId.BONEMERANG, MoveId.TRIPLE_AXEL, MoveId.FLOWER_TRICK ], + [SpeciesId.GOUGING_FIRE]: [ MoveId.EXTREME_SPEED, MoveId.BULK_UP, MoveId.SACRED_FIRE, MoveId.GLAIVE_RUSH ], + [SpeciesId.RAGING_BOLT]: [ MoveId.NASTY_PLOT, MoveId.FLAMETHROWER, MoveId.MORNING_SUN, MoveId.ELECTRO_DRIFT ], + [SpeciesId.IRON_BOULDER]: [ MoveId.PSYBLADE, MoveId.KOWTOW_CLEAVE, MoveId.STONE_AXE, MoveId.BITTER_BLADE ], + [SpeciesId.IRON_CROWN]: [ MoveId.NASTY_PLOT, MoveId.SECRET_SWORD, MoveId.PSYSTRIKE, MoveId.ELECTRO_DRIFT ], + [SpeciesId.TERAPAGOS]: [ MoveId.MOONBLAST, MoveId.NASTY_PLOT, MoveId.ASTRAL_BARRAGE, MoveId.RECOVER ], + [SpeciesId.PECHARUNT]: [ MoveId.TAKE_HEART, MoveId.BODY_PRESS, MoveId.SAPPY_SEED, MoveId.ASTRAL_BARRAGE ], + [SpeciesId.PALDEA_TAUROS]: [ MoveId.NO_RETREAT, MoveId.BLAZING_TORQUE, MoveId.AQUA_STEP, MoveId.THUNDEROUS_KICK ], + [SpeciesId.PALDEA_WOOPER]: [ MoveId.STONE_AXE, MoveId.RECOVER, MoveId.BANEFUL_BUNKER, MoveId.BARB_BARRAGE ], + [SpeciesId.BLOODMOON_URSALUNA]: [ MoveId.NASTY_PLOT, MoveId.ROCK_POLISH, MoveId.SANDSEAR_STORM, MoveId.BOOMBURST ] }; function parseEggMoves(content: string): void { let output = ""; - const speciesNames = getEnumKeys(Species); - const speciesValues = getEnumValues(Species); + const speciesNames = getEnumKeys(SpeciesId); + const speciesValues = getEnumValues(SpeciesId); const lines = content.split(/\n/g); for (const line of lines) { @@ -597,20 +597,20 @@ function parseEggMoves(content: string): void { const enumSpeciesName = cols[0].toUpperCase().replace(/[ -]/g, "_"); const species = speciesValues[speciesNames.findIndex(s => s === enumSpeciesName)]; - const eggMoves: Moves[] = []; + const eggMoves: MoveId[] = []; for (let m = 0; m < 4; m++) { const moveName = cols[m + 1].trim(); const moveIndex = moveName !== "N/A" ? moveNames.findIndex(mn => mn === moveName.toLowerCase()) : -1; - eggMoves.push(moveIndex > -1 ? moveIndex as Moves : Moves.NONE); + eggMoves.push(moveIndex > -1 ? moveIndex as MoveId : MoveId.NONE); if (moveIndex === -1) { console.warn(moveName, "could not be parsed"); } } - if (eggMoves.find(m => m !== Moves.NONE)) { - output += `[Species.${Species[species]}]: [ ${eggMoves.map(m => `Moves.${Moves[m]}`).join(", ")} ],\n`; + if (eggMoves.find(m => m !== MoveId.NONE)) { + output += `[SpeciesId.${SpeciesId[species]}]: [ ${eggMoves.map(m => `MoveId.${MoveId[m]}`).join(", ")} ],\n`; } } diff --git a/src/data/balance/passives.ts b/src/data/balance/passives.ts index 73310cc2116..80790b44735 100644 --- a/src/data/balance/passives.ts +++ b/src/data/balance/passives.ts @@ -1,8 +1,8 @@ -import { Abilities } from "#app/enums/abilities"; -import { Species } from "#app/enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { SpeciesId } from "#enums/species-id"; export interface PassiveAbilities { - [key: number]: Abilities + [key: number]: AbilityId } interface StarterPassiveAbilities { @@ -10,1094 +10,1094 @@ interface StarterPassiveAbilities { } export const starterPassiveAbilities: StarterPassiveAbilities = { - [Species.BULBASAUR]: { 0: Abilities.GRASSY_SURGE }, - [Species.IVYSAUR]: { 0: Abilities.GRASSY_SURGE }, - [Species.VENUSAUR]: { 0: Abilities.GRASSY_SURGE, 1: Abilities.SEED_SOWER, 2: Abilities.FLOWER_VEIL }, - [Species.CHARMANDER]: { 0: Abilities.SHEER_FORCE }, - [Species.CHARMELEON]: { 0: Abilities.BEAST_BOOST }, - [Species.CHARIZARD]: { 0: Abilities.BEAST_BOOST, 1: Abilities.LEVITATE, 2: Abilities.TURBOBLAZE, 3: Abilities.UNNERVE }, - [Species.SQUIRTLE]: { 0: Abilities.DAUNTLESS_SHIELD }, - [Species.WARTORTLE]: { 0: Abilities.DAUNTLESS_SHIELD }, - [Species.BLASTOISE]: { 0: Abilities.DAUNTLESS_SHIELD, 1: Abilities.BULLETPROOF, 2: Abilities.BULLETPROOF }, - [Species.CATERPIE]: { 0: Abilities.GLUTTONY }, - [Species.METAPOD]: { 0: Abilities.STURDY }, - [Species.BUTTERFREE]: { 0: Abilities.MAGICIAN, 1: Abilities.MAGICIAN }, - [Species.WEEDLE]: { 0: Abilities.POISON_TOUCH }, - [Species.KAKUNA]: { 0: Abilities.STURDY }, - [Species.BEEDRILL]: { 0: Abilities.ADAPTABILITY, 1: Abilities.TINTED_LENS }, - [Species.PIDGEY]: { 0: Abilities.SHEER_FORCE }, - [Species.PIDGEOTTO]: { 0: Abilities.SHEER_FORCE }, - [Species.PIDGEOT]: { 0: Abilities.SHEER_FORCE, 1: Abilities.SHEER_FORCE }, - [Species.RATTATA]: { 0: Abilities.STRONG_JAW }, - [Species.RATICATE]: { 0: Abilities.STRONG_JAW }, - [Species.SPEAROW]: { 0: Abilities.MOXIE }, - [Species.FEAROW]: { 0: Abilities.MOXIE }, - [Species.EKANS]: { 0: Abilities.REGENERATOR }, - [Species.ARBOK]: { 0: Abilities.REGENERATOR }, - [Species.SANDSHREW]: { 0: Abilities.TOUGH_CLAWS }, - [Species.SANDSLASH]: { 0: Abilities.TOUGH_CLAWS }, - [Species.NIDORAN_F]: { 0: Abilities.FLARE_BOOST }, - [Species.NIDORINA]: { 0: Abilities.FLARE_BOOST }, - [Species.NIDOQUEEN]: { 0: Abilities.FLARE_BOOST }, - [Species.NIDORAN_M]: { 0: Abilities.GUTS }, - [Species.NIDORINO]: { 0: Abilities.GUTS }, - [Species.NIDOKING]: { 0: Abilities.GUTS }, - [Species.VULPIX]: { 0: Abilities.FUR_COAT }, - [Species.NINETALES]: { 0: Abilities.FUR_COAT }, - [Species.ZUBAT]: { 0: Abilities.INTIMIDATE }, - [Species.GOLBAT]: { 0: Abilities.INTIMIDATE }, - [Species.CROBAT]: { 0: Abilities.INTIMIDATE }, - [Species.ODDISH]: { 0: Abilities.TRIAGE }, - [Species.GLOOM]: { 0: Abilities.TRIAGE }, - [Species.VILEPLUME]: { 0: Abilities.TRIAGE }, - [Species.BELLOSSOM]: { 0: Abilities.TRIAGE }, - [Species.PARAS]: { 0: Abilities.TRIAGE }, - [Species.PARASECT]: { 0: Abilities.TRIAGE }, - [Species.VENONAT]: { 0: Abilities.FLUFFY }, - [Species.VENOMOTH]: { 0: Abilities.SIMPLE }, - [Species.DIGLETT]: { 0: Abilities.STURDY }, - [Species.DUGTRIO]: { 0: Abilities.STURDY }, - [Species.MEOWTH]: { 0: Abilities.TOUGH_CLAWS, 1: Abilities.TOUGH_CLAWS }, - [Species.PERSIAN]: { 0: Abilities.TOUGH_CLAWS }, - [Species.PSYDUCK]: { 0: Abilities.SIMPLE }, - [Species.GOLDUCK]: { 0: Abilities.SIMPLE }, - [Species.MANKEY]: { 0: Abilities.IRON_FIST }, - [Species.PRIMEAPE]: { 0: Abilities.IRON_FIST }, - [Species.ANNIHILAPE]: { 0: Abilities.IRON_FIST }, - [Species.GROWLITHE]: { 0: Abilities.FLUFFY }, - [Species.ARCANINE]: { 0: Abilities.FLUFFY }, - [Species.POLIWAG]: { 0: Abilities.NO_GUARD }, - [Species.POLIWHIRL]: { 0: Abilities.NO_GUARD }, - [Species.POLIWRATH]: { 0: Abilities.NO_GUARD }, - [Species.POLITOED]: { 0: Abilities.NO_GUARD }, - [Species.ABRA]: { 0: Abilities.COMATOSE }, - [Species.KADABRA]: { 0: Abilities.MAGICIAN }, - [Species.ALAKAZAM]: { 0: Abilities.MAGICIAN, 1: Abilities.MAGICIAN }, - [Species.MACHOP]: { 0: Abilities.QUICK_FEET }, - [Species.MACHOKE]: { 0: Abilities.QUICK_FEET }, - [Species.MACHAMP]: { 0: Abilities.QUICK_FEET, 1: Abilities.QUICK_FEET }, - [Species.BELLSPROUT]: { 0: Abilities.FLOWER_GIFT }, - [Species.WEEPINBELL]: { 0: Abilities.FLOWER_GIFT }, - [Species.VICTREEBEL]: { 0: Abilities.FLOWER_GIFT }, - [Species.TENTACOOL]: { 0: Abilities.TOXIC_CHAIN }, - [Species.TENTACRUEL]: { 0: Abilities.TOXIC_CHAIN }, - [Species.GEODUDE]: { 0: Abilities.DRY_SKIN }, - [Species.GRAVELER]: { 0: Abilities.DRY_SKIN }, - [Species.GOLEM]: { 0: Abilities.DRY_SKIN }, - [Species.PONYTA]: { 0: Abilities.MAGIC_GUARD }, - [Species.RAPIDASH]: { 0: Abilities.MAGIC_GUARD }, - [Species.SLOWPOKE]: { 0: Abilities.UNAWARE }, - [Species.SLOWBRO]: { 0: Abilities.UNAWARE, 1: Abilities.REGENERATOR }, - [Species.SLOWKING]: { 0: Abilities.UNAWARE }, - [Species.MAGNEMITE]: { 0: Abilities.LEVITATE }, - [Species.MAGNETON]: { 0: Abilities.LEVITATE }, - [Species.MAGNEZONE]: { 0: Abilities.LEVITATE }, - [Species.FARFETCHD]: { 0: Abilities.SNIPER }, - [Species.DODUO]: { 0: Abilities.PARENTAL_BOND }, - [Species.DODRIO]: { 0: Abilities.PARENTAL_BOND }, - [Species.SEEL]: { 0: Abilities.WATER_BUBBLE }, - [Species.DEWGONG]: { 0: Abilities.WATER_BUBBLE }, - [Species.GRIMER]: { 0: Abilities.WATER_ABSORB }, - [Species.MUK]: { 0: Abilities.WATER_ABSORB }, - [Species.SHELLDER]: { 0: Abilities.STURDY }, - [Species.CLOYSTER]: { 0: Abilities.ICE_SCALES }, - [Species.GASTLY]: { 0: Abilities.SHADOW_SHIELD }, - [Species.HAUNTER]: { 0: Abilities.SHADOW_SHIELD }, - [Species.GENGAR]: { 0: Abilities.SHADOW_SHIELD, 1: Abilities.UNNERVE, 2: Abilities.GLUTTONY }, - [Species.ONIX]: { 0: Abilities.ROCKY_PAYLOAD }, - [Species.STEELIX]: { 0: Abilities.ROCKY_PAYLOAD, 1: Abilities.SAND_SPIT }, - [Species.DROWZEE]: { 0: Abilities.MAGICIAN }, - [Species.HYPNO]: { 0: Abilities.MAGICIAN }, - [Species.KRABBY]: { 0: Abilities.UNBURDEN }, - [Species.KINGLER]: { 0: Abilities.UNBURDEN, 1: Abilities.UNBURDEN }, - [Species.VOLTORB]: { 0: Abilities.TRANSISTOR }, - [Species.ELECTRODE]: { 0: Abilities.TRANSISTOR }, - [Species.EXEGGCUTE]: { 0: Abilities.RIPEN }, - [Species.EXEGGUTOR]: { 0: Abilities.RIPEN }, - [Species.ALOLA_EXEGGUTOR]: { 0: Abilities.UNBURDEN }, - [Species.CUBONE]: { 0: Abilities.PARENTAL_BOND }, - [Species.MAROWAK]: { 0: Abilities.PARENTAL_BOND }, - [Species.ALOLA_MAROWAK]: { 0: Abilities.PARENTAL_BOND }, - [Species.LICKITUNG]: { 0: Abilities.CHEEK_POUCH }, - [Species.LICKILICKY]: { 0: Abilities.CHEEK_POUCH }, - [Species.KOFFING]: { 0: Abilities.WHITE_SMOKE }, - [Species.WEEZING]: { 0: Abilities.PARENTAL_BOND }, - [Species.GALAR_WEEZING]: { 0: Abilities.PARENTAL_BOND }, - [Species.RHYHORN]: { 0: Abilities.SOLID_ROCK }, - [Species.RHYDON]: { 0: Abilities.SOLID_ROCK }, - [Species.RHYPERIOR]: { 0: Abilities.FILTER }, - [Species.TANGELA]: { 0: Abilities.SEED_SOWER }, - [Species.TANGROWTH]: { 0: Abilities.SEED_SOWER }, - [Species.KANGASKHAN]: { 0: Abilities.TECHNICIAN, 1: Abilities.TECHNICIAN }, - [Species.HORSEA]: { 0: Abilities.DRAGONS_MAW }, - [Species.SEADRA]: { 0: Abilities.DRAGONS_MAW }, - [Species.KINGDRA]: { 0: Abilities.MULTISCALE }, - [Species.GOLDEEN]: { 0: Abilities.MULTISCALE }, - [Species.SEAKING]: { 0: Abilities.MULTISCALE }, - [Species.STARYU]: { 0: Abilities.REGENERATOR }, - [Species.STARMIE]: { 0: Abilities.REGENERATOR }, - [Species.SCYTHER]: { 0: Abilities.TINTED_LENS }, - [Species.SCIZOR]: { 0: Abilities.TOUGH_CLAWS, 1: Abilities.TOUGH_CLAWS }, - [Species.KLEAVOR]: { 0: Abilities.WEAK_ARMOR }, - [Species.PINSIR]: { 0: Abilities.TINTED_LENS, 1: Abilities.MOLD_BREAKER }, - [Species.TAUROS]: { 0: Abilities.STAMINA }, - [Species.MAGIKARP]: { 0: Abilities.MULTISCALE }, - [Species.GYARADOS]: { 0: Abilities.MULTISCALE, 1: Abilities.MULTISCALE }, - [Species.LAPRAS]: { 0: Abilities.FILTER, 1: Abilities.FILTER }, - [Species.DITTO]: { 0: Abilities.ADAPTABILITY }, - [Species.EEVEE]: { 0: Abilities.PICKUP, 1: Abilities.PICKUP, 2: Abilities.FLUFFY }, - [Species.VAPOREON]: { 0: Abilities.REGENERATOR }, - [Species.JOLTEON]: { 0: Abilities.TRANSISTOR }, - [Species.FLAREON]: { 0: Abilities.FUR_COAT }, - [Species.ESPEON]: { 0: Abilities.MAGICIAN }, - [Species.UMBREON]: { 0: Abilities.TOXIC_CHAIN }, - [Species.LEAFEON]: { 0: Abilities.GRASSY_SURGE }, - [Species.GLACEON]: { 0: Abilities.SNOW_WARNING }, - [Species.SYLVEON]: { 0: Abilities.COMPETITIVE }, - [Species.PORYGON]: { 0: Abilities.TRANSISTOR }, - [Species.PORYGON2]: { 0: Abilities.TRANSISTOR }, - [Species.PORYGON_Z]: { 0: Abilities.PROTEAN }, - [Species.OMANYTE]: { 0: Abilities.STURDY }, - [Species.OMASTAR]: { 0: Abilities.STURDY }, - [Species.KABUTO]: { 0: Abilities.TOUGH_CLAWS }, - [Species.KABUTOPS]: { 0: Abilities.TOUGH_CLAWS }, - [Species.AERODACTYL]: { 0: Abilities.INTIMIDATE, 1: Abilities.ROCKY_PAYLOAD }, - [Species.ARTICUNO]: { 0: Abilities.SNOW_WARNING }, - [Species.ZAPDOS]: { 0: Abilities.DRIZZLE }, - [Species.MOLTRES]: { 0: Abilities.DROUGHT }, - [Species.DRATINI]: { 0: Abilities.MULTISCALE }, - [Species.DRAGONAIR]: { 0: Abilities.MULTISCALE }, - [Species.DRAGONITE]: { 0: Abilities.AERILATE }, - [Species.MEWTWO]: { 0: Abilities.NEUROFORCE, 1: Abilities.NEUROFORCE, 2: Abilities.NEUROFORCE }, - [Species.MEW]: { 0: Abilities.PROTEAN }, + [SpeciesId.BULBASAUR]: { 0: AbilityId.GRASSY_SURGE }, + [SpeciesId.IVYSAUR]: { 0: AbilityId.GRASSY_SURGE }, + [SpeciesId.VENUSAUR]: { 0: AbilityId.GRASSY_SURGE, 1: AbilityId.SEED_SOWER, 2: AbilityId.FLOWER_VEIL }, + [SpeciesId.CHARMANDER]: { 0: AbilityId.SHEER_FORCE }, + [SpeciesId.CHARMELEON]: { 0: AbilityId.BEAST_BOOST }, + [SpeciesId.CHARIZARD]: { 0: AbilityId.BEAST_BOOST, 1: AbilityId.LEVITATE, 2: AbilityId.TURBOBLAZE, 3: AbilityId.UNNERVE }, + [SpeciesId.SQUIRTLE]: { 0: AbilityId.DAUNTLESS_SHIELD }, + [SpeciesId.WARTORTLE]: { 0: AbilityId.DAUNTLESS_SHIELD }, + [SpeciesId.BLASTOISE]: { 0: AbilityId.DAUNTLESS_SHIELD, 1: AbilityId.BULLETPROOF, 2: AbilityId.BULLETPROOF }, + [SpeciesId.CATERPIE]: { 0: AbilityId.GLUTTONY }, + [SpeciesId.METAPOD]: { 0: AbilityId.STURDY }, + [SpeciesId.BUTTERFREE]: { 0: AbilityId.MAGICIAN, 1: AbilityId.MAGICIAN }, + [SpeciesId.WEEDLE]: { 0: AbilityId.POISON_TOUCH }, + [SpeciesId.KAKUNA]: { 0: AbilityId.STURDY }, + [SpeciesId.BEEDRILL]: { 0: AbilityId.ADAPTABILITY, 1: AbilityId.TINTED_LENS }, + [SpeciesId.PIDGEY]: { 0: AbilityId.SHEER_FORCE }, + [SpeciesId.PIDGEOTTO]: { 0: AbilityId.SHEER_FORCE }, + [SpeciesId.PIDGEOT]: { 0: AbilityId.SHEER_FORCE, 1: AbilityId.SHEER_FORCE }, + [SpeciesId.RATTATA]: { 0: AbilityId.STRONG_JAW }, + [SpeciesId.RATICATE]: { 0: AbilityId.STRONG_JAW }, + [SpeciesId.SPEAROW]: { 0: AbilityId.MOXIE }, + [SpeciesId.FEAROW]: { 0: AbilityId.MOXIE }, + [SpeciesId.EKANS]: { 0: AbilityId.REGENERATOR }, + [SpeciesId.ARBOK]: { 0: AbilityId.REGENERATOR }, + [SpeciesId.SANDSHREW]: { 0: AbilityId.TOUGH_CLAWS }, + [SpeciesId.SANDSLASH]: { 0: AbilityId.TOUGH_CLAWS }, + [SpeciesId.NIDORAN_F]: { 0: AbilityId.FLARE_BOOST }, + [SpeciesId.NIDORINA]: { 0: AbilityId.FLARE_BOOST }, + [SpeciesId.NIDOQUEEN]: { 0: AbilityId.FLARE_BOOST }, + [SpeciesId.NIDORAN_M]: { 0: AbilityId.GUTS }, + [SpeciesId.NIDORINO]: { 0: AbilityId.GUTS }, + [SpeciesId.NIDOKING]: { 0: AbilityId.GUTS }, + [SpeciesId.VULPIX]: { 0: AbilityId.FUR_COAT }, + [SpeciesId.NINETALES]: { 0: AbilityId.FUR_COAT }, + [SpeciesId.ZUBAT]: { 0: AbilityId.INTIMIDATE }, + [SpeciesId.GOLBAT]: { 0: AbilityId.INTIMIDATE }, + [SpeciesId.CROBAT]: { 0: AbilityId.INTIMIDATE }, + [SpeciesId.ODDISH]: { 0: AbilityId.TRIAGE }, + [SpeciesId.GLOOM]: { 0: AbilityId.TRIAGE }, + [SpeciesId.VILEPLUME]: { 0: AbilityId.TRIAGE }, + [SpeciesId.BELLOSSOM]: { 0: AbilityId.TRIAGE }, + [SpeciesId.PARAS]: { 0: AbilityId.TRIAGE }, + [SpeciesId.PARASECT]: { 0: AbilityId.TRIAGE }, + [SpeciesId.VENONAT]: { 0: AbilityId.FLUFFY }, + [SpeciesId.VENOMOTH]: { 0: AbilityId.SIMPLE }, + [SpeciesId.DIGLETT]: { 0: AbilityId.STURDY }, + [SpeciesId.DUGTRIO]: { 0: AbilityId.STURDY }, + [SpeciesId.MEOWTH]: { 0: AbilityId.TOUGH_CLAWS, 1: AbilityId.TOUGH_CLAWS }, + [SpeciesId.PERSIAN]: { 0: AbilityId.TOUGH_CLAWS }, + [SpeciesId.PSYDUCK]: { 0: AbilityId.SIMPLE }, + [SpeciesId.GOLDUCK]: { 0: AbilityId.SIMPLE }, + [SpeciesId.MANKEY]: { 0: AbilityId.IRON_FIST }, + [SpeciesId.PRIMEAPE]: { 0: AbilityId.IRON_FIST }, + [SpeciesId.ANNIHILAPE]: { 0: AbilityId.IRON_FIST }, + [SpeciesId.GROWLITHE]: { 0: AbilityId.FLUFFY }, + [SpeciesId.ARCANINE]: { 0: AbilityId.FLUFFY }, + [SpeciesId.POLIWAG]: { 0: AbilityId.NO_GUARD }, + [SpeciesId.POLIWHIRL]: { 0: AbilityId.NO_GUARD }, + [SpeciesId.POLIWRATH]: { 0: AbilityId.NO_GUARD }, + [SpeciesId.POLITOED]: { 0: AbilityId.NO_GUARD }, + [SpeciesId.ABRA]: { 0: AbilityId.COMATOSE }, + [SpeciesId.KADABRA]: { 0: AbilityId.MAGICIAN }, + [SpeciesId.ALAKAZAM]: { 0: AbilityId.MAGICIAN, 1: AbilityId.MAGICIAN }, + [SpeciesId.MACHOP]: { 0: AbilityId.QUICK_FEET }, + [SpeciesId.MACHOKE]: { 0: AbilityId.QUICK_FEET }, + [SpeciesId.MACHAMP]: { 0: AbilityId.QUICK_FEET, 1: AbilityId.QUICK_FEET }, + [SpeciesId.BELLSPROUT]: { 0: AbilityId.FLOWER_GIFT }, + [SpeciesId.WEEPINBELL]: { 0: AbilityId.FLOWER_GIFT }, + [SpeciesId.VICTREEBEL]: { 0: AbilityId.FLOWER_GIFT }, + [SpeciesId.TENTACOOL]: { 0: AbilityId.TOXIC_CHAIN }, + [SpeciesId.TENTACRUEL]: { 0: AbilityId.TOXIC_CHAIN }, + [SpeciesId.GEODUDE]: { 0: AbilityId.DRY_SKIN }, + [SpeciesId.GRAVELER]: { 0: AbilityId.DRY_SKIN }, + [SpeciesId.GOLEM]: { 0: AbilityId.DRY_SKIN }, + [SpeciesId.PONYTA]: { 0: AbilityId.MAGIC_GUARD }, + [SpeciesId.RAPIDASH]: { 0: AbilityId.MAGIC_GUARD }, + [SpeciesId.SLOWPOKE]: { 0: AbilityId.UNAWARE }, + [SpeciesId.SLOWBRO]: { 0: AbilityId.UNAWARE, 1: AbilityId.REGENERATOR }, + [SpeciesId.SLOWKING]: { 0: AbilityId.UNAWARE }, + [SpeciesId.MAGNEMITE]: { 0: AbilityId.LEVITATE }, + [SpeciesId.MAGNETON]: { 0: AbilityId.LEVITATE }, + [SpeciesId.MAGNEZONE]: { 0: AbilityId.LEVITATE }, + [SpeciesId.FARFETCHD]: { 0: AbilityId.SNIPER }, + [SpeciesId.DODUO]: { 0: AbilityId.PARENTAL_BOND }, + [SpeciesId.DODRIO]: { 0: AbilityId.PARENTAL_BOND }, + [SpeciesId.SEEL]: { 0: AbilityId.WATER_BUBBLE }, + [SpeciesId.DEWGONG]: { 0: AbilityId.WATER_BUBBLE }, + [SpeciesId.GRIMER]: { 0: AbilityId.WATER_ABSORB }, + [SpeciesId.MUK]: { 0: AbilityId.WATER_ABSORB }, + [SpeciesId.SHELLDER]: { 0: AbilityId.STURDY }, + [SpeciesId.CLOYSTER]: { 0: AbilityId.ICE_SCALES }, + [SpeciesId.GASTLY]: { 0: AbilityId.SHADOW_SHIELD }, + [SpeciesId.HAUNTER]: { 0: AbilityId.SHADOW_SHIELD }, + [SpeciesId.GENGAR]: { 0: AbilityId.SHADOW_SHIELD, 1: AbilityId.UNNERVE, 2: AbilityId.GLUTTONY }, + [SpeciesId.ONIX]: { 0: AbilityId.ROCKY_PAYLOAD }, + [SpeciesId.STEELIX]: { 0: AbilityId.ROCKY_PAYLOAD, 1: AbilityId.SAND_SPIT }, + [SpeciesId.DROWZEE]: { 0: AbilityId.MAGICIAN }, + [SpeciesId.HYPNO]: { 0: AbilityId.MAGICIAN }, + [SpeciesId.KRABBY]: { 0: AbilityId.UNBURDEN }, + [SpeciesId.KINGLER]: { 0: AbilityId.UNBURDEN, 1: AbilityId.UNBURDEN }, + [SpeciesId.VOLTORB]: { 0: AbilityId.TRANSISTOR }, + [SpeciesId.ELECTRODE]: { 0: AbilityId.TRANSISTOR }, + [SpeciesId.EXEGGCUTE]: { 0: AbilityId.RIPEN }, + [SpeciesId.EXEGGUTOR]: { 0: AbilityId.RIPEN }, + [SpeciesId.ALOLA_EXEGGUTOR]: { 0: AbilityId.UNBURDEN }, + [SpeciesId.CUBONE]: { 0: AbilityId.PARENTAL_BOND }, + [SpeciesId.MAROWAK]: { 0: AbilityId.PARENTAL_BOND }, + [SpeciesId.ALOLA_MAROWAK]: { 0: AbilityId.PARENTAL_BOND }, + [SpeciesId.LICKITUNG]: { 0: AbilityId.CHEEK_POUCH }, + [SpeciesId.LICKILICKY]: { 0: AbilityId.CHEEK_POUCH }, + [SpeciesId.KOFFING]: { 0: AbilityId.WHITE_SMOKE }, + [SpeciesId.WEEZING]: { 0: AbilityId.PARENTAL_BOND }, + [SpeciesId.GALAR_WEEZING]: { 0: AbilityId.PARENTAL_BOND }, + [SpeciesId.RHYHORN]: { 0: AbilityId.SOLID_ROCK }, + [SpeciesId.RHYDON]: { 0: AbilityId.SOLID_ROCK }, + [SpeciesId.RHYPERIOR]: { 0: AbilityId.FILTER }, + [SpeciesId.TANGELA]: { 0: AbilityId.SEED_SOWER }, + [SpeciesId.TANGROWTH]: { 0: AbilityId.SEED_SOWER }, + [SpeciesId.KANGASKHAN]: { 0: AbilityId.TECHNICIAN, 1: AbilityId.TECHNICIAN }, + [SpeciesId.HORSEA]: { 0: AbilityId.DRAGONS_MAW }, + [SpeciesId.SEADRA]: { 0: AbilityId.DRAGONS_MAW }, + [SpeciesId.KINGDRA]: { 0: AbilityId.MULTISCALE }, + [SpeciesId.GOLDEEN]: { 0: AbilityId.MULTISCALE }, + [SpeciesId.SEAKING]: { 0: AbilityId.MULTISCALE }, + [SpeciesId.STARYU]: { 0: AbilityId.REGENERATOR }, + [SpeciesId.STARMIE]: { 0: AbilityId.REGENERATOR }, + [SpeciesId.SCYTHER]: { 0: AbilityId.TINTED_LENS }, + [SpeciesId.SCIZOR]: { 0: AbilityId.TOUGH_CLAWS, 1: AbilityId.TOUGH_CLAWS }, + [SpeciesId.KLEAVOR]: { 0: AbilityId.WEAK_ARMOR }, + [SpeciesId.PINSIR]: { 0: AbilityId.TINTED_LENS, 1: AbilityId.MOLD_BREAKER }, + [SpeciesId.TAUROS]: { 0: AbilityId.STAMINA }, + [SpeciesId.MAGIKARP]: { 0: AbilityId.MULTISCALE }, + [SpeciesId.GYARADOS]: { 0: AbilityId.MULTISCALE, 1: AbilityId.MULTISCALE }, + [SpeciesId.LAPRAS]: { 0: AbilityId.FILTER, 1: AbilityId.FILTER }, + [SpeciesId.DITTO]: { 0: AbilityId.ADAPTABILITY }, + [SpeciesId.EEVEE]: { 0: AbilityId.PICKUP, 1: AbilityId.PICKUP, 2: AbilityId.FLUFFY }, + [SpeciesId.VAPOREON]: { 0: AbilityId.REGENERATOR }, + [SpeciesId.JOLTEON]: { 0: AbilityId.TRANSISTOR }, + [SpeciesId.FLAREON]: { 0: AbilityId.FUR_COAT }, + [SpeciesId.ESPEON]: { 0: AbilityId.MAGICIAN }, + [SpeciesId.UMBREON]: { 0: AbilityId.TOXIC_CHAIN }, + [SpeciesId.LEAFEON]: { 0: AbilityId.GRASSY_SURGE }, + [SpeciesId.GLACEON]: { 0: AbilityId.SNOW_WARNING }, + [SpeciesId.SYLVEON]: { 0: AbilityId.COMPETITIVE }, + [SpeciesId.PORYGON]: { 0: AbilityId.TRANSISTOR }, + [SpeciesId.PORYGON2]: { 0: AbilityId.TRANSISTOR }, + [SpeciesId.PORYGON_Z]: { 0: AbilityId.PROTEAN }, + [SpeciesId.OMANYTE]: { 0: AbilityId.STURDY }, + [SpeciesId.OMASTAR]: { 0: AbilityId.STURDY }, + [SpeciesId.KABUTO]: { 0: AbilityId.TOUGH_CLAWS }, + [SpeciesId.KABUTOPS]: { 0: AbilityId.TOUGH_CLAWS }, + [SpeciesId.AERODACTYL]: { 0: AbilityId.INTIMIDATE, 1: AbilityId.ROCKY_PAYLOAD }, + [SpeciesId.ARTICUNO]: { 0: AbilityId.SNOW_WARNING }, + [SpeciesId.ZAPDOS]: { 0: AbilityId.DRIZZLE }, + [SpeciesId.MOLTRES]: { 0: AbilityId.DROUGHT }, + [SpeciesId.DRATINI]: { 0: AbilityId.MULTISCALE }, + [SpeciesId.DRAGONAIR]: { 0: AbilityId.MULTISCALE }, + [SpeciesId.DRAGONITE]: { 0: AbilityId.AERILATE }, + [SpeciesId.MEWTWO]: { 0: AbilityId.NEUROFORCE, 1: AbilityId.NEUROFORCE, 2: AbilityId.NEUROFORCE }, + [SpeciesId.MEW]: { 0: AbilityId.PROTEAN }, - [Species.CHIKORITA]: { 0: Abilities.CUTE_CHARM }, - [Species.BAYLEEF]: { 0: Abilities.THICK_FAT }, - [Species.MEGANIUM]: { 0: Abilities.THICK_FAT }, - [Species.CYNDAQUIL]: { 0: Abilities.WHITE_SMOKE }, - [Species.QUILAVA]: { 0: Abilities.DROUGHT }, - [Species.TYPHLOSION]: { 0: Abilities.DROUGHT }, - [Species.HISUI_TYPHLOSION]: { 0: Abilities.DROUGHT }, - [Species.TOTODILE]: { 0: Abilities.TOUGH_CLAWS }, - [Species.CROCONAW]: { 0: Abilities.TOUGH_CLAWS }, - [Species.FERALIGATR]: { 0: Abilities.TOUGH_CLAWS }, - [Species.SENTRET]: { 0: Abilities.PICKUP }, - [Species.FURRET]: { 0: Abilities.PICKUP }, - [Species.HOOTHOOT]: { 0: Abilities.AERILATE }, - [Species.NOCTOWL]: { 0: Abilities.AERILATE }, - [Species.LEDYBA]: { 0: Abilities.PRANKSTER }, - [Species.LEDIAN]: { 0: Abilities.PRANKSTER }, - [Species.SPINARAK]: { 0: Abilities.PRANKSTER }, - [Species.ARIADOS]: { 0: Abilities.PRANKSTER }, - [Species.CHINCHOU]: { 0: Abilities.REGENERATOR }, - [Species.LANTURN]: { 0: Abilities.REGENERATOR }, - [Species.PICHU]: { 0: Abilities.ELECTRIC_SURGE, 1: Abilities.STURDY }, - [Species.PIKACHU]: { 0: Abilities.ELECTRIC_SURGE, 1: Abilities.STURDY, 2: Abilities.COSTAR, 3: Abilities.IRON_FIST, 4: Abilities.QUEENLY_MAJESTY, 5: Abilities.MISTY_SURGE, 6: Abilities.TINTED_LENS, 7: Abilities.LIBERO, 8: Abilities.THICK_FAT }, - [Species.RAICHU]: { 0: Abilities.ELECTRIC_SURGE }, - [Species.ALOLA_RAICHU]: { 0: Abilities.ELECTRIC_SURGE }, - [Species.CLEFFA]: { 0: Abilities.PRANKSTER }, - [Species.CLEFAIRY]: { 0: Abilities.PRANKSTER }, - [Species.CLEFABLE]: { 0: Abilities.ANALYTIC }, - [Species.IGGLYBUFF]: { 0: Abilities.HUGE_POWER }, - [Species.JIGGLYPUFF]: { 0: Abilities.HUGE_POWER }, - [Species.WIGGLYTUFF]: { 0: Abilities.HUGE_POWER }, - [Species.TOGEPI]: { 0: Abilities.PIXILATE }, - [Species.TOGETIC]: { 0: Abilities.PIXILATE }, - [Species.TOGEKISS]: { 0: Abilities.PIXILATE }, - [Species.NATU]: { 0: Abilities.TINTED_LENS }, - [Species.XATU]: { 0: Abilities.SHEER_FORCE }, - [Species.MAREEP]: { 0: Abilities.ELECTROMORPHOSIS }, - [Species.FLAAFFY]: { 0: Abilities.ELECTROMORPHOSIS }, - [Species.AMPHAROS]: { 0: Abilities.ELECTROMORPHOSIS, 1: Abilities.ELECTROMORPHOSIS }, - [Species.HOPPIP]: { 0: Abilities.WIND_RIDER }, - [Species.SKIPLOOM]: { 0: Abilities.WIND_RIDER }, - [Species.JUMPLUFF]: { 0: Abilities.FLUFFY }, - [Species.AIPOM]: { 0: Abilities.SCRAPPY }, - [Species.AMBIPOM]: { 0: Abilities.SCRAPPY }, - [Species.SUNKERN]: { 0: Abilities.DROUGHT }, - [Species.SUNFLORA]: { 0: Abilities.DROUGHT }, - [Species.YANMA]: { 0: Abilities.TECHNICIAN }, - [Species.YANMEGA]: { 0: Abilities.SHEER_FORCE }, - [Species.WOOPER]: { 0: Abilities.WATER_VEIL }, - [Species.QUAGSIRE]: { 0: Abilities.COMATOSE }, - [Species.MURKROW]: { 0: Abilities.DARK_AURA }, - [Species.HONCHKROW]: { 0: Abilities.DARK_AURA }, - [Species.MISDREAVUS]: { 0: Abilities.BEADS_OF_RUIN }, - [Species.MISMAGIUS]: { 0: Abilities.BEADS_OF_RUIN }, - [Species.UNOWN]: { 0: Abilities.ADAPTABILITY, 1: Abilities.BEAST_BOOST, 2: Abilities.CONTRARY, 3: Abilities.DAZZLING, 4: Abilities.EMERGENCY_EXIT, 5: Abilities.FRIEND_GUARD, 6: Abilities.GOOD_AS_GOLD, 7: Abilities.HONEY_GATHER, 8: Abilities.IMPOSTER, 9: Abilities.JUSTIFIED, 10: Abilities.KLUTZ, 11: Abilities.LIBERO, 12: Abilities.MOODY, 13: Abilities.NEUTRALIZING_GAS, 14: Abilities.OPPORTUNIST, 15: Abilities.PICKUP, 16: Abilities.QUICK_DRAW, 17: Abilities.RUN_AWAY, 18: Abilities.SIMPLE, 19: Abilities.TRACE, 20: Abilities.UNNERVE, 21: Abilities.VICTORY_STAR, 22: Abilities.WANDERING_SPIRIT, 23: Abilities.FAIRY_AURA, 24: Abilities.DARK_AURA, 25: Abilities.AURA_BREAK, 26: Abilities.PURE_POWER, 27: Abilities.UNAWARE }, - [Species.GIRAFARIG]: { 0: Abilities.PARENTAL_BOND }, - [Species.FARIGIRAF]: { 0: Abilities.PARENTAL_BOND }, - [Species.PINECO]: { 0: Abilities.ROUGH_SKIN }, - [Species.FORRETRESS]: { 0: Abilities.IRON_BARBS }, - [Species.DUNSPARCE]: { 0: Abilities.UNAWARE }, - [Species.DUDUNSPARCE]: { 0: Abilities.UNAWARE, 1: Abilities.UNAWARE }, - [Species.GLIGAR]: { 0: Abilities.POISON_TOUCH }, - [Species.GLISCOR]: { 0: Abilities.TOXIC_BOOST }, - [Species.SNUBBULL]: { 0: Abilities.PIXILATE }, - [Species.GRANBULL]: { 0: Abilities.PIXILATE }, - [Species.QWILFISH]: { 0: Abilities.TOXIC_DEBRIS }, - [Species.SHUCKLE]: { 0: Abilities.HARVEST }, - [Species.HERACROSS]: { 0: Abilities.TECHNICIAN, 1: Abilities.TECHNICIAN }, - [Species.SNEASEL]: { 0: Abilities.TOUGH_CLAWS }, - [Species.WEAVILE]: { 0: Abilities.TOUGH_CLAWS }, - [Species.TEDDIURSA]: { 0: Abilities.RUN_AWAY }, - [Species.URSARING]: { 0: Abilities.THICK_FAT }, - [Species.URSALUNA]: { 0: Abilities.THICK_FAT }, - [Species.SLUGMA]: { 0: Abilities.DROUGHT }, - [Species.MAGCARGO]: { 0: Abilities.DESOLATE_LAND }, - [Species.SWINUB]: { 0: Abilities.UNAWARE }, - [Species.PILOSWINE]: { 0: Abilities.UNAWARE }, - [Species.MAMOSWINE]: { 0: Abilities.SLUSH_RUSH }, - [Species.CORSOLA]: { 0: Abilities.STORM_DRAIN }, - [Species.REMORAID]: { 0: Abilities.SIMPLE }, - [Species.OCTILLERY]: { 0: Abilities.SIMPLE }, - [Species.DELIBIRD]: { 0: Abilities.HUGE_POWER }, - [Species.SKARMORY]: { 0: Abilities.LIGHTNING_ROD }, - [Species.HOUNDOUR]: { 0: Abilities.BALL_FETCH }, - [Species.HOUNDOOM]: { 0: Abilities.LIGHTNING_ROD, 1: Abilities.LIGHTNING_ROD }, - [Species.PHANPY]: { 0: Abilities.STURDY }, - [Species.DONPHAN]: { 0: Abilities.SPEED_BOOST }, - [Species.STANTLER]: { 0: Abilities.SPEED_BOOST }, - [Species.WYRDEER]: { 0: Abilities.SPEED_BOOST }, - [Species.SMEARGLE]: { 0: Abilities.PRANKSTER }, - [Species.TYROGUE]: { 0: Abilities.DEFIANT }, - [Species.HITMONLEE]: { 0: Abilities.SHEER_FORCE }, - [Species.HITMONCHAN]: { 0: Abilities.MOXIE }, - [Species.HITMONTOP]: { 0: Abilities.SPEED_BOOST }, - [Species.SMOOCHUM]: { 0: Abilities.PSYCHIC_SURGE }, - [Species.JYNX]: { 0: Abilities.PSYCHIC_SURGE }, - [Species.ELEKID]: { 0: Abilities.SHEER_FORCE }, - [Species.ELECTABUZZ]: { 0: Abilities.SHEER_FORCE }, - [Species.ELECTIVIRE]: { 0: Abilities.SHEER_FORCE }, - [Species.MAGBY]: { 0: Abilities.SHEER_FORCE }, - [Species.MAGMAR]: { 0: Abilities.SHEER_FORCE }, - [Species.MAGMORTAR]: { 0: Abilities.SHEER_FORCE }, - [Species.MILTANK]: { 0: Abilities.STAMINA }, - [Species.RAIKOU]: { 0: Abilities.BEAST_BOOST }, - [Species.ENTEI]: { 0: Abilities.BEAST_BOOST }, - [Species.SUICUNE]: { 0: Abilities.BEAST_BOOST }, - [Species.LARVITAR]: { 0: Abilities.SOLID_ROCK }, - [Species.PUPITAR]: { 0: Abilities.SOLID_ROCK }, - [Species.TYRANITAR]: { 0: Abilities.SOLID_ROCK, 1: Abilities.SOLID_ROCK }, - [Species.LUGIA]: { 0: Abilities.DELTA_STREAM }, - [Species.HO_OH]: { 0: Abilities.MAGIC_GUARD }, - [Species.CELEBI]: { 0: Abilities.PSYCHIC_SURGE }, + [SpeciesId.CHIKORITA]: { 0: AbilityId.CUTE_CHARM }, + [SpeciesId.BAYLEEF]: { 0: AbilityId.THICK_FAT }, + [SpeciesId.MEGANIUM]: { 0: AbilityId.THICK_FAT }, + [SpeciesId.CYNDAQUIL]: { 0: AbilityId.WHITE_SMOKE }, + [SpeciesId.QUILAVA]: { 0: AbilityId.DROUGHT }, + [SpeciesId.TYPHLOSION]: { 0: AbilityId.DROUGHT }, + [SpeciesId.HISUI_TYPHLOSION]: { 0: AbilityId.DROUGHT }, + [SpeciesId.TOTODILE]: { 0: AbilityId.TOUGH_CLAWS }, + [SpeciesId.CROCONAW]: { 0: AbilityId.TOUGH_CLAWS }, + [SpeciesId.FERALIGATR]: { 0: AbilityId.TOUGH_CLAWS }, + [SpeciesId.SENTRET]: { 0: AbilityId.PICKUP }, + [SpeciesId.FURRET]: { 0: AbilityId.PICKUP }, + [SpeciesId.HOOTHOOT]: { 0: AbilityId.AERILATE }, + [SpeciesId.NOCTOWL]: { 0: AbilityId.AERILATE }, + [SpeciesId.LEDYBA]: { 0: AbilityId.PRANKSTER }, + [SpeciesId.LEDIAN]: { 0: AbilityId.PRANKSTER }, + [SpeciesId.SPINARAK]: { 0: AbilityId.PRANKSTER }, + [SpeciesId.ARIADOS]: { 0: AbilityId.PRANKSTER }, + [SpeciesId.CHINCHOU]: { 0: AbilityId.REGENERATOR }, + [SpeciesId.LANTURN]: { 0: AbilityId.REGENERATOR }, + [SpeciesId.PICHU]: { 0: AbilityId.ELECTRIC_SURGE, 1: AbilityId.STURDY }, + [SpeciesId.PIKACHU]: { 0: AbilityId.ELECTRIC_SURGE, 1: AbilityId.STURDY, 2: AbilityId.COSTAR, 3: AbilityId.IRON_FIST, 4: AbilityId.QUEENLY_MAJESTY, 5: AbilityId.MISTY_SURGE, 6: AbilityId.TINTED_LENS, 7: AbilityId.LIBERO, 8: AbilityId.THICK_FAT }, + [SpeciesId.RAICHU]: { 0: AbilityId.ELECTRIC_SURGE }, + [SpeciesId.ALOLA_RAICHU]: { 0: AbilityId.ELECTRIC_SURGE }, + [SpeciesId.CLEFFA]: { 0: AbilityId.PRANKSTER }, + [SpeciesId.CLEFAIRY]: { 0: AbilityId.PRANKSTER }, + [SpeciesId.CLEFABLE]: { 0: AbilityId.ANALYTIC }, + [SpeciesId.IGGLYBUFF]: { 0: AbilityId.HUGE_POWER }, + [SpeciesId.JIGGLYPUFF]: { 0: AbilityId.HUGE_POWER }, + [SpeciesId.WIGGLYTUFF]: { 0: AbilityId.HUGE_POWER }, + [SpeciesId.TOGEPI]: { 0: AbilityId.PIXILATE }, + [SpeciesId.TOGETIC]: { 0: AbilityId.PIXILATE }, + [SpeciesId.TOGEKISS]: { 0: AbilityId.PIXILATE }, + [SpeciesId.NATU]: { 0: AbilityId.TINTED_LENS }, + [SpeciesId.XATU]: { 0: AbilityId.SHEER_FORCE }, + [SpeciesId.MAREEP]: { 0: AbilityId.ELECTROMORPHOSIS }, + [SpeciesId.FLAAFFY]: { 0: AbilityId.ELECTROMORPHOSIS }, + [SpeciesId.AMPHAROS]: { 0: AbilityId.ELECTROMORPHOSIS, 1: AbilityId.ELECTROMORPHOSIS }, + [SpeciesId.HOPPIP]: { 0: AbilityId.WIND_RIDER }, + [SpeciesId.SKIPLOOM]: { 0: AbilityId.WIND_RIDER }, + [SpeciesId.JUMPLUFF]: { 0: AbilityId.FLUFFY }, + [SpeciesId.AIPOM]: { 0: AbilityId.SCRAPPY }, + [SpeciesId.AMBIPOM]: { 0: AbilityId.SCRAPPY }, + [SpeciesId.SUNKERN]: { 0: AbilityId.DROUGHT }, + [SpeciesId.SUNFLORA]: { 0: AbilityId.DROUGHT }, + [SpeciesId.YANMA]: { 0: AbilityId.TECHNICIAN }, + [SpeciesId.YANMEGA]: { 0: AbilityId.SHEER_FORCE }, + [SpeciesId.WOOPER]: { 0: AbilityId.WATER_VEIL }, + [SpeciesId.QUAGSIRE]: { 0: AbilityId.COMATOSE }, + [SpeciesId.MURKROW]: { 0: AbilityId.DARK_AURA }, + [SpeciesId.HONCHKROW]: { 0: AbilityId.DARK_AURA }, + [SpeciesId.MISDREAVUS]: { 0: AbilityId.BEADS_OF_RUIN }, + [SpeciesId.MISMAGIUS]: { 0: AbilityId.BEADS_OF_RUIN }, + [SpeciesId.UNOWN]: { 0: AbilityId.ADAPTABILITY, 1: AbilityId.BEAST_BOOST, 2: AbilityId.CONTRARY, 3: AbilityId.DAZZLING, 4: AbilityId.EMERGENCY_EXIT, 5: AbilityId.FRIEND_GUARD, 6: AbilityId.GOOD_AS_GOLD, 7: AbilityId.HONEY_GATHER, 8: AbilityId.IMPOSTER, 9: AbilityId.JUSTIFIED, 10: AbilityId.KLUTZ, 11: AbilityId.LIBERO, 12: AbilityId.MOODY, 13: AbilityId.NEUTRALIZING_GAS, 14: AbilityId.OPPORTUNIST, 15: AbilityId.PICKUP, 16: AbilityId.QUICK_DRAW, 17: AbilityId.RUN_AWAY, 18: AbilityId.SIMPLE, 19: AbilityId.TRACE, 20: AbilityId.UNNERVE, 21: AbilityId.VICTORY_STAR, 22: AbilityId.WANDERING_SPIRIT, 23: AbilityId.FAIRY_AURA, 24: AbilityId.DARK_AURA, 25: AbilityId.AURA_BREAK, 26: AbilityId.PURE_POWER, 27: AbilityId.UNAWARE }, + [SpeciesId.GIRAFARIG]: { 0: AbilityId.PARENTAL_BOND }, + [SpeciesId.FARIGIRAF]: { 0: AbilityId.PARENTAL_BOND }, + [SpeciesId.PINECO]: { 0: AbilityId.ROUGH_SKIN }, + [SpeciesId.FORRETRESS]: { 0: AbilityId.IRON_BARBS }, + [SpeciesId.DUNSPARCE]: { 0: AbilityId.UNAWARE }, + [SpeciesId.DUDUNSPARCE]: { 0: AbilityId.UNAWARE, 1: AbilityId.UNAWARE }, + [SpeciesId.GLIGAR]: { 0: AbilityId.POISON_TOUCH }, + [SpeciesId.GLISCOR]: { 0: AbilityId.TOXIC_BOOST }, + [SpeciesId.SNUBBULL]: { 0: AbilityId.PIXILATE }, + [SpeciesId.GRANBULL]: { 0: AbilityId.PIXILATE }, + [SpeciesId.QWILFISH]: { 0: AbilityId.TOXIC_DEBRIS }, + [SpeciesId.SHUCKLE]: { 0: AbilityId.HARVEST }, + [SpeciesId.HERACROSS]: { 0: AbilityId.TECHNICIAN, 1: AbilityId.TECHNICIAN }, + [SpeciesId.SNEASEL]: { 0: AbilityId.TOUGH_CLAWS }, + [SpeciesId.WEAVILE]: { 0: AbilityId.TOUGH_CLAWS }, + [SpeciesId.TEDDIURSA]: { 0: AbilityId.RUN_AWAY }, + [SpeciesId.URSARING]: { 0: AbilityId.THICK_FAT }, + [SpeciesId.URSALUNA]: { 0: AbilityId.THICK_FAT }, + [SpeciesId.SLUGMA]: { 0: AbilityId.DROUGHT }, + [SpeciesId.MAGCARGO]: { 0: AbilityId.DESOLATE_LAND }, + [SpeciesId.SWINUB]: { 0: AbilityId.UNAWARE }, + [SpeciesId.PILOSWINE]: { 0: AbilityId.UNAWARE }, + [SpeciesId.MAMOSWINE]: { 0: AbilityId.SLUSH_RUSH }, + [SpeciesId.CORSOLA]: { 0: AbilityId.STORM_DRAIN }, + [SpeciesId.REMORAID]: { 0: AbilityId.SIMPLE }, + [SpeciesId.OCTILLERY]: { 0: AbilityId.SIMPLE }, + [SpeciesId.DELIBIRD]: { 0: AbilityId.HUGE_POWER }, + [SpeciesId.SKARMORY]: { 0: AbilityId.LIGHTNING_ROD }, + [SpeciesId.HOUNDOUR]: { 0: AbilityId.BALL_FETCH }, + [SpeciesId.HOUNDOOM]: { 0: AbilityId.LIGHTNING_ROD, 1: AbilityId.LIGHTNING_ROD }, + [SpeciesId.PHANPY]: { 0: AbilityId.STURDY }, + [SpeciesId.DONPHAN]: { 0: AbilityId.SPEED_BOOST }, + [SpeciesId.STANTLER]: { 0: AbilityId.SPEED_BOOST }, + [SpeciesId.WYRDEER]: { 0: AbilityId.SPEED_BOOST }, + [SpeciesId.SMEARGLE]: { 0: AbilityId.PRANKSTER }, + [SpeciesId.TYROGUE]: { 0: AbilityId.DEFIANT }, + [SpeciesId.HITMONLEE]: { 0: AbilityId.SHEER_FORCE }, + [SpeciesId.HITMONCHAN]: { 0: AbilityId.MOXIE }, + [SpeciesId.HITMONTOP]: { 0: AbilityId.SPEED_BOOST }, + [SpeciesId.SMOOCHUM]: { 0: AbilityId.PSYCHIC_SURGE }, + [SpeciesId.JYNX]: { 0: AbilityId.PSYCHIC_SURGE }, + [SpeciesId.ELEKID]: { 0: AbilityId.SHEER_FORCE }, + [SpeciesId.ELECTABUZZ]: { 0: AbilityId.SHEER_FORCE }, + [SpeciesId.ELECTIVIRE]: { 0: AbilityId.SHEER_FORCE }, + [SpeciesId.MAGBY]: { 0: AbilityId.SHEER_FORCE }, + [SpeciesId.MAGMAR]: { 0: AbilityId.SHEER_FORCE }, + [SpeciesId.MAGMORTAR]: { 0: AbilityId.SHEER_FORCE }, + [SpeciesId.MILTANK]: { 0: AbilityId.STAMINA }, + [SpeciesId.RAIKOU]: { 0: AbilityId.BEAST_BOOST }, + [SpeciesId.ENTEI]: { 0: AbilityId.BEAST_BOOST }, + [SpeciesId.SUICUNE]: { 0: AbilityId.BEAST_BOOST }, + [SpeciesId.LARVITAR]: { 0: AbilityId.SOLID_ROCK }, + [SpeciesId.PUPITAR]: { 0: AbilityId.SOLID_ROCK }, + [SpeciesId.TYRANITAR]: { 0: AbilityId.SOLID_ROCK, 1: AbilityId.SOLID_ROCK }, + [SpeciesId.LUGIA]: { 0: AbilityId.DELTA_STREAM }, + [SpeciesId.HO_OH]: { 0: AbilityId.MAGIC_GUARD }, + [SpeciesId.CELEBI]: { 0: AbilityId.PSYCHIC_SURGE }, - [Species.TREECKO]: { 0: Abilities.TINTED_LENS }, - [Species.GROVYLE]: { 0: Abilities.TINTED_LENS }, - [Species.SCEPTILE]: { 0: Abilities.TINTED_LENS, 1: Abilities.TINTED_LENS }, - [Species.TORCHIC]: { 0: Abilities.DEFIANT }, - [Species.COMBUSKEN]: { 0: Abilities.DEFIANT }, - [Species.BLAZIKEN]: { 0: Abilities.DEFIANT, 1: Abilities.DEFIANT }, - [Species.MUDKIP]: { 0: Abilities.REGENERATOR }, - [Species.MARSHTOMP]: { 0: Abilities.REGENERATOR }, - [Species.SWAMPERT]: { 0: Abilities.REGENERATOR, 1: Abilities.DRIZZLE }, - [Species.POOCHYENA]: { 0: Abilities.TOUGH_CLAWS }, - [Species.MIGHTYENA]: { 0: Abilities.TOUGH_CLAWS }, - [Species.ZIGZAGOON]: { 0: Abilities.RUN_AWAY }, - [Species.LINOONE]: { 0: Abilities.RUN_AWAY }, - [Species.WURMPLE]: { 0: Abilities.GLUTTONY }, - [Species.SILCOON]: { 0: Abilities.STURDY }, - [Species.BEAUTIFLY]: { 0: Abilities.SIMPLE }, - [Species.CASCOON]: { 0: Abilities.STURDY }, - [Species.DUSTOX]: { 0: Abilities.SIMPLE }, - [Species.LOTAD]: { 0: Abilities.DRIZZLE }, - [Species.LOMBRE]: { 0: Abilities.DRIZZLE }, - [Species.LUDICOLO]: { 0: Abilities.DRIZZLE }, - [Species.SEEDOT]: { 0: Abilities.STURDY }, - [Species.NUZLEAF]: { 0: Abilities.SHARPNESS }, - [Species.SHIFTRY]: { 0: Abilities.SHARPNESS }, - [Species.TAILLOW]: { 0: Abilities.AERILATE }, - [Species.SWELLOW]: { 0: Abilities.AERILATE }, - [Species.WINGULL]: { 0: Abilities.WATER_ABSORB }, - [Species.PELIPPER]: { 0: Abilities.SWIFT_SWIM }, - [Species.RALTS]: { 0: Abilities.NEUROFORCE }, - [Species.KIRLIA]: { 0: Abilities.NEUROFORCE }, - [Species.GARDEVOIR]: { 0: Abilities.NEUROFORCE, 1: Abilities.PSYCHIC_SURGE }, - [Species.GALLADE]: { 0: Abilities.NEUROFORCE, 1: Abilities.SHARPNESS }, - [Species.SURSKIT]: { 0: Abilities.WATER_BUBBLE }, - [Species.MASQUERAIN]: { 0: Abilities.WATER_BUBBLE }, - [Species.SHROOMISH]: { 0: Abilities.GUTS }, - [Species.BRELOOM]: { 0: Abilities.GUTS }, - [Species.SLAKOTH]: { 0: Abilities.GUTS }, - [Species.VIGOROTH]: { 0: Abilities.GUTS }, - [Species.SLAKING]: { 0: Abilities.GUTS }, - [Species.NINCADA]: { 0: Abilities.TECHNICIAN }, - [Species.NINJASK]: { 0: Abilities.TECHNICIAN }, - [Species.SHEDINJA]: { 0: Abilities.MAGIC_GUARD }, - [Species.WHISMUR]: { 0: Abilities.PUNK_ROCK }, - [Species.LOUDRED]: { 0: Abilities.PUNK_ROCK }, - [Species.EXPLOUD]: { 0: Abilities.PUNK_ROCK }, - [Species.MAKUHITA]: { 0: Abilities.STAMINA }, - [Species.HARIYAMA]: { 0: Abilities.STAMINA }, - [Species.AZURILL]: { 0: Abilities.MISTY_SURGE }, - [Species.MARILL]: { 0: Abilities.MISTY_SURGE }, - [Species.AZUMARILL]: { 0: Abilities.MISTY_SURGE }, - [Species.NOSEPASS]: { 0: Abilities.SOLID_ROCK }, - [Species.PROBOPASS]: { 0: Abilities.LEVITATE }, - [Species.SKITTY]: { 0: Abilities.SCRAPPY }, - [Species.DELCATTY]: { 0: Abilities.SCRAPPY }, - [Species.SABLEYE]: { 0: Abilities.UNNERVE, 1: Abilities.UNNERVE }, - [Species.MAWILE]: { 0: Abilities.ADAPTABILITY, 1: Abilities.INTIMIDATE }, - [Species.ARON]: { 0: Abilities.EARTH_EATER }, - [Species.LAIRON]: { 0: Abilities.EARTH_EATER }, - [Species.AGGRON]: { 0: Abilities.EARTH_EATER, 1: Abilities.ROCKY_PAYLOAD }, - [Species.MEDITITE]: { 0: Abilities.MINDS_EYE }, - [Species.MEDICHAM]: { 0: Abilities.MINDS_EYE, 1: Abilities.MINDS_EYE }, - [Species.ELECTRIKE]: { 0: Abilities.BALL_FETCH }, - [Species.MANECTRIC]: { 0: Abilities.FLASH_FIRE, 1: Abilities.FLASH_FIRE }, - [Species.PLUSLE]: { 0: Abilities.POWER_SPOT }, - [Species.MINUN]: { 0: Abilities.POWER_SPOT }, - [Species.VOLBEAT]: { 0: Abilities.HONEY_GATHER }, - [Species.ILLUMISE]: { 0: Abilities.HONEY_GATHER }, - [Species.GULPIN]: { 0: Abilities.EARTH_EATER }, - [Species.SWALOT]: { 0: Abilities.EARTH_EATER }, - [Species.CARVANHA]: { 0: Abilities.SHEER_FORCE }, - [Species.SHARPEDO]: { 0: Abilities.SHEER_FORCE, 1: Abilities.SPEED_BOOST }, - [Species.WAILMER]: { 0: Abilities.LEVITATE }, - [Species.WAILORD]: { 0: Abilities.LEVITATE }, - [Species.NUMEL]: { 0: Abilities.SOLID_ROCK }, - [Species.CAMERUPT]: { 0: Abilities.FUR_COAT, 1: Abilities.STAMINA }, - [Species.TORKOAL]: { 0: Abilities.ANALYTIC }, - [Species.SPOINK]: { 0: Abilities.PSYCHIC_SURGE }, - [Species.GRUMPIG]: { 0: Abilities.PSYCHIC_SURGE }, - [Species.SPINDA]: { 0: Abilities.SIMPLE }, - [Species.TRAPINCH]: { 0: Abilities.ADAPTABILITY }, - [Species.VIBRAVA]: { 0: Abilities.ADAPTABILITY }, - [Species.FLYGON]: { 0: Abilities.ADAPTABILITY }, - [Species.CACNEA]: { 0: Abilities.SAND_RUSH }, - [Species.CACTURNE]: { 0: Abilities.SAND_RUSH }, - [Species.SWABLU]: { 0: Abilities.FLUFFY }, - [Species.ALTARIA]: { 0: Abilities.FLUFFY, 1: Abilities.FLUFFY }, - [Species.ZANGOOSE]: { 0: Abilities.POISON_HEAL }, - [Species.SEVIPER]: { 0: Abilities.MULTISCALE }, - [Species.LUNATONE]: { 0: Abilities.SHADOW_SHIELD }, - [Species.SOLROCK]: { 0: Abilities.DROUGHT }, - [Species.BARBOACH]: { 0: Abilities.SIMPLE }, - [Species.WHISCASH]: { 0: Abilities.SIMPLE }, - [Species.CORPHISH]: { 0: Abilities.TOUGH_CLAWS }, - [Species.CRAWDAUNT]: { 0: Abilities.TOUGH_CLAWS }, - [Species.BALTOY]: { 0: Abilities.WELL_BAKED_BODY }, - [Species.CLAYDOL]: { 0: Abilities.WELL_BAKED_BODY }, - [Species.LILEEP]: { 0: Abilities.SEED_SOWER }, - [Species.CRADILY]: { 0: Abilities.SEED_SOWER }, - [Species.ANORITH]: { 0: Abilities.WATER_ABSORB }, - [Species.ARMALDO]: { 0: Abilities.WATER_ABSORB }, - [Species.FEEBAS]: { 0: Abilities.MULTISCALE }, - [Species.MILOTIC]: { 0: Abilities.MAGIC_GUARD }, - [Species.CASTFORM]: { 0: Abilities.ADAPTABILITY, 1: Abilities.ADAPTABILITY, 2: Abilities.ADAPTABILITY, 3: Abilities.ADAPTABILITY }, - [Species.KECLEON]: { 0: Abilities.ADAPTABILITY }, - [Species.SHUPPET]: { 0: Abilities.SHADOW_SHIELD }, - [Species.BANETTE]: { 0: Abilities.SHADOW_SHIELD, 1: Abilities.SHADOW_SHIELD }, - [Species.DUSKULL]: { 0: Abilities.UNNERVE }, - [Species.DUSCLOPS]: { 0: Abilities.UNNERVE }, - [Species.DUSKNOIR]: { 0: Abilities.UNNERVE }, - [Species.TROPIUS]: { 0: Abilities.RIPEN }, - [Species.ABSOL]: { 0: Abilities.SHARPNESS, 1: Abilities.SHARPNESS }, - [Species.WYNAUT]: { 0: Abilities.STURDY }, - [Species.WOBBUFFET]: { 0: Abilities.STURDY }, - [Species.SNORUNT]: { 0: Abilities.SNOW_WARNING }, - [Species.GLALIE]: { 0: Abilities.SNOW_WARNING, 1: Abilities.SNOW_WARNING }, - [Species.FROSLASS]: { 0: Abilities.SNOW_WARNING }, - [Species.SPHEAL]: { 0: Abilities.UNAWARE }, - [Species.SEALEO]: { 0: Abilities.UNAWARE }, - [Species.WALREIN]: { 0: Abilities.UNAWARE }, - [Species.CLAMPERL]: { 0: Abilities.DAUNTLESS_SHIELD }, - [Species.GOREBYSS]: { 0: Abilities.ARENA_TRAP }, - [Species.HUNTAIL]: { 0: Abilities.ARENA_TRAP }, - [Species.RELICANTH]: { 0: Abilities.PRIMORDIAL_SEA }, - [Species.LUVDISC]: { 0: Abilities.MULTISCALE }, - [Species.BAGON]: { 0: Abilities.INTIMIDATE }, - [Species.SHELGON]: { 0: Abilities.ANGER_SHELL }, - [Species.SALAMENCE]: { 0: Abilities.GALE_WINGS, 1: Abilities.ROCK_HEAD }, - [Species.BELDUM]: { 0: Abilities.LEVITATE }, - [Species.METANG]: { 0: Abilities.LEVITATE }, - [Species.METAGROSS]: { 0: Abilities.LEVITATE, 1: Abilities.FULL_METAL_BODY }, - [Species.REGIROCK]: { 0: Abilities.SAND_STREAM }, - [Species.REGICE]: { 0: Abilities.SNOW_WARNING }, - [Species.REGISTEEL]: { 0: Abilities.STEELY_SPIRIT }, - [Species.LATIAS]: { 0: Abilities.SPEED_BOOST, 1: Abilities.PRISM_ARMOR }, - [Species.LATIOS]: { 0: Abilities.SPEED_BOOST, 1: Abilities.TINTED_LENS }, - [Species.KYOGRE]: { 0: Abilities.MOLD_BREAKER, 1: Abilities.TERAVOLT }, - [Species.GROUDON]: { 0: Abilities.MOLD_BREAKER, 1: Abilities.TURBOBLAZE }, - [Species.RAYQUAZA]: { 0: Abilities.UNNERVE, 1: Abilities.UNNERVE }, - [Species.JIRACHI]: { 0: Abilities.COMATOSE }, - [Species.DEOXYS]: { 0: Abilities.PROTEAN, 1: Abilities.ADAPTABILITY, 2: Abilities.REGENERATOR, 3: Abilities.SHADOW_SHIELD }, + [SpeciesId.TREECKO]: { 0: AbilityId.TINTED_LENS }, + [SpeciesId.GROVYLE]: { 0: AbilityId.TINTED_LENS }, + [SpeciesId.SCEPTILE]: { 0: AbilityId.TINTED_LENS, 1: AbilityId.TINTED_LENS }, + [SpeciesId.TORCHIC]: { 0: AbilityId.DEFIANT }, + [SpeciesId.COMBUSKEN]: { 0: AbilityId.DEFIANT }, + [SpeciesId.BLAZIKEN]: { 0: AbilityId.DEFIANT, 1: AbilityId.DEFIANT }, + [SpeciesId.MUDKIP]: { 0: AbilityId.REGENERATOR }, + [SpeciesId.MARSHTOMP]: { 0: AbilityId.REGENERATOR }, + [SpeciesId.SWAMPERT]: { 0: AbilityId.REGENERATOR, 1: AbilityId.DRIZZLE }, + [SpeciesId.POOCHYENA]: { 0: AbilityId.TOUGH_CLAWS }, + [SpeciesId.MIGHTYENA]: { 0: AbilityId.TOUGH_CLAWS }, + [SpeciesId.ZIGZAGOON]: { 0: AbilityId.RUN_AWAY }, + [SpeciesId.LINOONE]: { 0: AbilityId.RUN_AWAY }, + [SpeciesId.WURMPLE]: { 0: AbilityId.GLUTTONY }, + [SpeciesId.SILCOON]: { 0: AbilityId.STURDY }, + [SpeciesId.BEAUTIFLY]: { 0: AbilityId.SIMPLE }, + [SpeciesId.CASCOON]: { 0: AbilityId.STURDY }, + [SpeciesId.DUSTOX]: { 0: AbilityId.SIMPLE }, + [SpeciesId.LOTAD]: { 0: AbilityId.DRIZZLE }, + [SpeciesId.LOMBRE]: { 0: AbilityId.DRIZZLE }, + [SpeciesId.LUDICOLO]: { 0: AbilityId.DRIZZLE }, + [SpeciesId.SEEDOT]: { 0: AbilityId.STURDY }, + [SpeciesId.NUZLEAF]: { 0: AbilityId.SHARPNESS }, + [SpeciesId.SHIFTRY]: { 0: AbilityId.SHARPNESS }, + [SpeciesId.TAILLOW]: { 0: AbilityId.AERILATE }, + [SpeciesId.SWELLOW]: { 0: AbilityId.AERILATE }, + [SpeciesId.WINGULL]: { 0: AbilityId.WATER_ABSORB }, + [SpeciesId.PELIPPER]: { 0: AbilityId.SWIFT_SWIM }, + [SpeciesId.RALTS]: { 0: AbilityId.NEUROFORCE }, + [SpeciesId.KIRLIA]: { 0: AbilityId.NEUROFORCE }, + [SpeciesId.GARDEVOIR]: { 0: AbilityId.NEUROFORCE, 1: AbilityId.PSYCHIC_SURGE }, + [SpeciesId.GALLADE]: { 0: AbilityId.NEUROFORCE, 1: AbilityId.SHARPNESS }, + [SpeciesId.SURSKIT]: { 0: AbilityId.WATER_BUBBLE }, + [SpeciesId.MASQUERAIN]: { 0: AbilityId.WATER_BUBBLE }, + [SpeciesId.SHROOMISH]: { 0: AbilityId.GUTS }, + [SpeciesId.BRELOOM]: { 0: AbilityId.GUTS }, + [SpeciesId.SLAKOTH]: { 0: AbilityId.GUTS }, + [SpeciesId.VIGOROTH]: { 0: AbilityId.GUTS }, + [SpeciesId.SLAKING]: { 0: AbilityId.GUTS }, + [SpeciesId.NINCADA]: { 0: AbilityId.TECHNICIAN }, + [SpeciesId.NINJASK]: { 0: AbilityId.TECHNICIAN }, + [SpeciesId.SHEDINJA]: { 0: AbilityId.MAGIC_GUARD }, + [SpeciesId.WHISMUR]: { 0: AbilityId.PUNK_ROCK }, + [SpeciesId.LOUDRED]: { 0: AbilityId.PUNK_ROCK }, + [SpeciesId.EXPLOUD]: { 0: AbilityId.PUNK_ROCK }, + [SpeciesId.MAKUHITA]: { 0: AbilityId.STAMINA }, + [SpeciesId.HARIYAMA]: { 0: AbilityId.STAMINA }, + [SpeciesId.AZURILL]: { 0: AbilityId.MISTY_SURGE }, + [SpeciesId.MARILL]: { 0: AbilityId.MISTY_SURGE }, + [SpeciesId.AZUMARILL]: { 0: AbilityId.MISTY_SURGE }, + [SpeciesId.NOSEPASS]: { 0: AbilityId.SOLID_ROCK }, + [SpeciesId.PROBOPASS]: { 0: AbilityId.LEVITATE }, + [SpeciesId.SKITTY]: { 0: AbilityId.SCRAPPY }, + [SpeciesId.DELCATTY]: { 0: AbilityId.SCRAPPY }, + [SpeciesId.SABLEYE]: { 0: AbilityId.UNNERVE, 1: AbilityId.UNNERVE }, + [SpeciesId.MAWILE]: { 0: AbilityId.ADAPTABILITY, 1: AbilityId.INTIMIDATE }, + [SpeciesId.ARON]: { 0: AbilityId.EARTH_EATER }, + [SpeciesId.LAIRON]: { 0: AbilityId.EARTH_EATER }, + [SpeciesId.AGGRON]: { 0: AbilityId.EARTH_EATER, 1: AbilityId.ROCKY_PAYLOAD }, + [SpeciesId.MEDITITE]: { 0: AbilityId.MINDS_EYE }, + [SpeciesId.MEDICHAM]: { 0: AbilityId.MINDS_EYE, 1: AbilityId.MINDS_EYE }, + [SpeciesId.ELECTRIKE]: { 0: AbilityId.BALL_FETCH }, + [SpeciesId.MANECTRIC]: { 0: AbilityId.FLASH_FIRE, 1: AbilityId.FLASH_FIRE }, + [SpeciesId.PLUSLE]: { 0: AbilityId.POWER_SPOT }, + [SpeciesId.MINUN]: { 0: AbilityId.POWER_SPOT }, + [SpeciesId.VOLBEAT]: { 0: AbilityId.HONEY_GATHER }, + [SpeciesId.ILLUMISE]: { 0: AbilityId.HONEY_GATHER }, + [SpeciesId.GULPIN]: { 0: AbilityId.EARTH_EATER }, + [SpeciesId.SWALOT]: { 0: AbilityId.EARTH_EATER }, + [SpeciesId.CARVANHA]: { 0: AbilityId.SHEER_FORCE }, + [SpeciesId.SHARPEDO]: { 0: AbilityId.SHEER_FORCE, 1: AbilityId.SPEED_BOOST }, + [SpeciesId.WAILMER]: { 0: AbilityId.LEVITATE }, + [SpeciesId.WAILORD]: { 0: AbilityId.LEVITATE }, + [SpeciesId.NUMEL]: { 0: AbilityId.SOLID_ROCK }, + [SpeciesId.CAMERUPT]: { 0: AbilityId.FUR_COAT, 1: AbilityId.STAMINA }, + [SpeciesId.TORKOAL]: { 0: AbilityId.ANALYTIC }, + [SpeciesId.SPOINK]: { 0: AbilityId.PSYCHIC_SURGE }, + [SpeciesId.GRUMPIG]: { 0: AbilityId.PSYCHIC_SURGE }, + [SpeciesId.SPINDA]: { 0: AbilityId.SIMPLE }, + [SpeciesId.TRAPINCH]: { 0: AbilityId.ADAPTABILITY }, + [SpeciesId.VIBRAVA]: { 0: AbilityId.ADAPTABILITY }, + [SpeciesId.FLYGON]: { 0: AbilityId.ADAPTABILITY }, + [SpeciesId.CACNEA]: { 0: AbilityId.SAND_RUSH }, + [SpeciesId.CACTURNE]: { 0: AbilityId.SAND_RUSH }, + [SpeciesId.SWABLU]: { 0: AbilityId.FLUFFY }, + [SpeciesId.ALTARIA]: { 0: AbilityId.FLUFFY, 1: AbilityId.FLUFFY }, + [SpeciesId.ZANGOOSE]: { 0: AbilityId.POISON_HEAL }, + [SpeciesId.SEVIPER]: { 0: AbilityId.MULTISCALE }, + [SpeciesId.LUNATONE]: { 0: AbilityId.SHADOW_SHIELD }, + [SpeciesId.SOLROCK]: { 0: AbilityId.DROUGHT }, + [SpeciesId.BARBOACH]: { 0: AbilityId.SIMPLE }, + [SpeciesId.WHISCASH]: { 0: AbilityId.SIMPLE }, + [SpeciesId.CORPHISH]: { 0: AbilityId.TOUGH_CLAWS }, + [SpeciesId.CRAWDAUNT]: { 0: AbilityId.TOUGH_CLAWS }, + [SpeciesId.BALTOY]: { 0: AbilityId.WELL_BAKED_BODY }, + [SpeciesId.CLAYDOL]: { 0: AbilityId.WELL_BAKED_BODY }, + [SpeciesId.LILEEP]: { 0: AbilityId.SEED_SOWER }, + [SpeciesId.CRADILY]: { 0: AbilityId.SEED_SOWER }, + [SpeciesId.ANORITH]: { 0: AbilityId.WATER_ABSORB }, + [SpeciesId.ARMALDO]: { 0: AbilityId.WATER_ABSORB }, + [SpeciesId.FEEBAS]: { 0: AbilityId.MULTISCALE }, + [SpeciesId.MILOTIC]: { 0: AbilityId.MAGIC_GUARD }, + [SpeciesId.CASTFORM]: { 0: AbilityId.ADAPTABILITY, 1: AbilityId.ADAPTABILITY, 2: AbilityId.ADAPTABILITY, 3: AbilityId.ADAPTABILITY }, + [SpeciesId.KECLEON]: { 0: AbilityId.ADAPTABILITY }, + [SpeciesId.SHUPPET]: { 0: AbilityId.SHADOW_SHIELD }, + [SpeciesId.BANETTE]: { 0: AbilityId.SHADOW_SHIELD, 1: AbilityId.SHADOW_SHIELD }, + [SpeciesId.DUSKULL]: { 0: AbilityId.UNNERVE }, + [SpeciesId.DUSCLOPS]: { 0: AbilityId.UNNERVE }, + [SpeciesId.DUSKNOIR]: { 0: AbilityId.UNNERVE }, + [SpeciesId.TROPIUS]: { 0: AbilityId.RIPEN }, + [SpeciesId.ABSOL]: { 0: AbilityId.SHARPNESS, 1: AbilityId.SHARPNESS }, + [SpeciesId.WYNAUT]: { 0: AbilityId.STURDY }, + [SpeciesId.WOBBUFFET]: { 0: AbilityId.STURDY }, + [SpeciesId.SNORUNT]: { 0: AbilityId.SNOW_WARNING }, + [SpeciesId.GLALIE]: { 0: AbilityId.SNOW_WARNING, 1: AbilityId.SNOW_WARNING }, + [SpeciesId.FROSLASS]: { 0: AbilityId.SNOW_WARNING }, + [SpeciesId.SPHEAL]: { 0: AbilityId.UNAWARE }, + [SpeciesId.SEALEO]: { 0: AbilityId.UNAWARE }, + [SpeciesId.WALREIN]: { 0: AbilityId.UNAWARE }, + [SpeciesId.CLAMPERL]: { 0: AbilityId.DAUNTLESS_SHIELD }, + [SpeciesId.GOREBYSS]: { 0: AbilityId.ARENA_TRAP }, + [SpeciesId.HUNTAIL]: { 0: AbilityId.ARENA_TRAP }, + [SpeciesId.RELICANTH]: { 0: AbilityId.PRIMORDIAL_SEA }, + [SpeciesId.LUVDISC]: { 0: AbilityId.MULTISCALE }, + [SpeciesId.BAGON]: { 0: AbilityId.INTIMIDATE }, + [SpeciesId.SHELGON]: { 0: AbilityId.ANGER_SHELL }, + [SpeciesId.SALAMENCE]: { 0: AbilityId.GALE_WINGS, 1: AbilityId.ROCK_HEAD }, + [SpeciesId.BELDUM]: { 0: AbilityId.LEVITATE }, + [SpeciesId.METANG]: { 0: AbilityId.LEVITATE }, + [SpeciesId.METAGROSS]: { 0: AbilityId.LEVITATE, 1: AbilityId.FULL_METAL_BODY }, + [SpeciesId.REGIROCK]: { 0: AbilityId.SAND_STREAM }, + [SpeciesId.REGICE]: { 0: AbilityId.SNOW_WARNING }, + [SpeciesId.REGISTEEL]: { 0: AbilityId.STEELY_SPIRIT }, + [SpeciesId.LATIAS]: { 0: AbilityId.SPEED_BOOST, 1: AbilityId.PRISM_ARMOR }, + [SpeciesId.LATIOS]: { 0: AbilityId.SPEED_BOOST, 1: AbilityId.TINTED_LENS }, + [SpeciesId.KYOGRE]: { 0: AbilityId.MOLD_BREAKER, 1: AbilityId.TERAVOLT }, + [SpeciesId.GROUDON]: { 0: AbilityId.MOLD_BREAKER, 1: AbilityId.TURBOBLAZE }, + [SpeciesId.RAYQUAZA]: { 0: AbilityId.UNNERVE, 1: AbilityId.UNNERVE }, + [SpeciesId.JIRACHI]: { 0: AbilityId.COMATOSE }, + [SpeciesId.DEOXYS]: { 0: AbilityId.PROTEAN, 1: AbilityId.ADAPTABILITY, 2: AbilityId.REGENERATOR, 3: AbilityId.SHADOW_SHIELD }, - [Species.TURTWIG]: { 0: Abilities.SOLID_ROCK }, - [Species.GROTLE]: { 0: Abilities.SOLID_ROCK }, - [Species.TORTERRA]: { 0: Abilities.THICK_FAT }, - [Species.CHIMCHAR]: { 0: Abilities.UNNERVE }, - [Species.MONFERNO]: { 0: Abilities.BEAST_BOOST }, - [Species.INFERNAPE]: { 0: Abilities.BEAST_BOOST }, - [Species.PIPLUP]: { 0: Abilities.CUTE_CHARM }, - [Species.PRINPLUP]: { 0: Abilities.DRIZZLE }, - [Species.EMPOLEON]: { 0: Abilities.DRIZZLE }, - [Species.STARLY]: { 0: Abilities.INTIMIDATE }, - [Species.STARAVIA]: { 0: Abilities.ROCK_HEAD }, - [Species.STARAPTOR]: { 0: Abilities.ROCK_HEAD }, - [Species.BIDOOF]: { 0: Abilities.SAP_SIPPER }, - [Species.BIBAREL]: { 0: Abilities.SAP_SIPPER }, - [Species.KRICKETOT]: { 0: Abilities.HONEY_GATHER }, - [Species.KRICKETUNE]: { 0: Abilities.SHARPNESS }, - [Species.SHINX]: { 0: Abilities.SPEED_BOOST }, - [Species.LUXIO]: { 0: Abilities.SPEED_BOOST }, - [Species.LUXRAY]: { 0: Abilities.SPEED_BOOST }, - [Species.BUDEW]: { 0: Abilities.SEED_SOWER }, - [Species.ROSELIA]: { 0: Abilities.GRASSY_SURGE }, - [Species.ROSERADE]: { 0: Abilities.GRASSY_SURGE }, - [Species.CRANIDOS]: { 0: Abilities.ROCK_HEAD }, - [Species.RAMPARDOS]: { 0: Abilities.ROCK_HEAD }, - [Species.SHIELDON]: { 0: Abilities.EARTH_EATER }, - [Species.BASTIODON]: { 0: Abilities.EARTH_EATER }, - [Species.BURMY]: { 0: Abilities.STURDY, 1: Abilities.STURDY, 2: Abilities.STURDY }, - [Species.WORMADAM]: { 0: Abilities.STURDY, 1: Abilities.STURDY, 2: Abilities.STURDY }, - [Species.MOTHIM]: { 0: Abilities.SPEED_BOOST }, - [Species.COMBEE]: { 0: Abilities.RUN_AWAY }, - [Species.VESPIQUEN]: { 0: Abilities.INTIMIDATE }, - [Species.PACHIRISU]: { 0: Abilities.HONEY_GATHER }, - [Species.BUIZEL]: { 0: Abilities.MOXIE }, - [Species.FLOATZEL]: { 0: Abilities.MOXIE }, - [Species.CHERUBI]: { 0: Abilities.DROUGHT }, - [Species.CHERRIM]: { 0: Abilities.ORICHALCUM_PULSE, 1: Abilities.ORICHALCUM_PULSE }, - [Species.SHELLOS]: { 0: Abilities.REGENERATOR, 1: Abilities.REGENERATOR }, - [Species.GASTRODON]: { 0: Abilities.REGENERATOR, 1: Abilities.REGENERATOR }, - [Species.DRIFLOON]: { 0: Abilities.MAGIC_GUARD }, - [Species.DRIFBLIM]: { 0: Abilities.MAGIC_GUARD }, - [Species.BUNEARY]: { 0: Abilities.ADAPTABILITY }, - [Species.LOPUNNY]: { 0: Abilities.ADAPTABILITY, 1: Abilities.ADAPTABILITY }, - [Species.GLAMEOW]: { 0: Abilities.INTIMIDATE }, - [Species.PURUGLY]: { 0: Abilities.INTIMIDATE }, - [Species.CHINGLING]: { 0: Abilities.PUNK_ROCK }, - [Species.CHIMECHO]: { 0: Abilities.PUNK_ROCK }, - [Species.STUNKY]: { 0: Abilities.NEUTRALIZING_GAS }, - [Species.SKUNTANK]: { 0: Abilities.NEUTRALIZING_GAS }, - [Species.BRONZOR]: { 0: Abilities.MIRROR_ARMOR }, - [Species.BRONZONG]: { 0: Abilities.MIRROR_ARMOR }, - [Species.BONSLY]: { 0: Abilities.SAP_SIPPER }, - [Species.SUDOWOODO]: { 0: Abilities.SAP_SIPPER }, - [Species.MIME_JR]: { 0: Abilities.PRANKSTER }, - [Species.MR_MIME]: { 0: Abilities.PRANKSTER }, - [Species.GALAR_MR_MIME]: { 0: Abilities.PRANKSTER }, - [Species.MR_RIME]: { 0: Abilities.PRANKSTER }, - [Species.HAPPINY]: { 0: Abilities.HOSPITALITY }, - [Species.CHANSEY]: { 0: Abilities.FRIEND_GUARD }, - [Species.BLISSEY]: { 0: Abilities.FUR_COAT }, - [Species.CHATOT]: { 0: Abilities.PUNK_ROCK }, - [Species.SPIRITOMB]: { 0: Abilities.VESSEL_OF_RUIN }, - [Species.GIBLE]: { 0: Abilities.ARENA_TRAP }, - [Species.GABITE]: { 0: Abilities.ARENA_TRAP }, - [Species.GARCHOMP]: { 0: Abilities.ARENA_TRAP, 1: Abilities.SAND_RUSH }, - [Species.MUNCHLAX]: { 0: Abilities.CHEEK_POUCH }, - [Species.SNORLAX]: { 0: Abilities.CHEEK_POUCH, 1: Abilities.RIPEN }, - [Species.RIOLU]: { 0: Abilities.MINDS_EYE }, - [Species.LUCARIO]: { 0: Abilities.MINDS_EYE, 1: Abilities.MINDS_EYE }, - [Species.HIPPOPOTAS]: { 0: Abilities.UNAWARE }, - [Species.HIPPOWDON]: { 0: Abilities.UNAWARE }, - [Species.SKORUPI]: { 0: Abilities.SUPER_LUCK }, - [Species.DRAPION]: { 0: Abilities.SUPER_LUCK }, - [Species.CROAGUNK]: { 0: Abilities.MOXIE }, - [Species.TOXICROAK]: { 0: Abilities.MOXIE }, - [Species.CARNIVINE]: { 0: Abilities.ARENA_TRAP }, - [Species.FINNEON]: { 0: Abilities.WATER_BUBBLE }, - [Species.LUMINEON]: { 0: Abilities.WATER_BUBBLE }, - [Species.MANTYKE]: { 0: Abilities.UNAWARE }, - [Species.MANTINE]: { 0: Abilities.UNAWARE }, - [Species.SNOVER]: { 0: Abilities.SLUSH_RUSH }, - [Species.ABOMASNOW]: { 0: Abilities.SLUSH_RUSH, 1: Abilities.SEED_SOWER }, - [Species.ROTOM]: { 0: Abilities.HADRON_ENGINE, 1: Abilities.HADRON_ENGINE, 2: Abilities.HADRON_ENGINE, 3: Abilities.HADRON_ENGINE, 4: Abilities.HADRON_ENGINE, 5: Abilities.HADRON_ENGINE }, - [Species.UXIE]: { 0: Abilities.ILLUSION }, - [Species.MESPRIT]: { 0: Abilities.MOODY }, - [Species.AZELF]: { 0: Abilities.NEUROFORCE }, - [Species.DIALGA]: { 0: Abilities.BERSERK, 1: Abilities.BERSERK }, - [Species.PALKIA]: { 0: Abilities.BERSERK, 1: Abilities.BERSERK }, - [Species.HEATRAN]: { 0: Abilities.EARTH_EATER }, - [Species.REGIGIGAS]: { 0: Abilities.SCRAPPY }, - [Species.GIRATINA]: { 0: Abilities.SHADOW_SHIELD, 1: Abilities.SHADOW_SHIELD }, - [Species.CRESSELIA]: { 0: Abilities.SHADOW_SHIELD }, - [Species.PHIONE]: { 0: Abilities.SIMPLE }, - [Species.MANAPHY]: { 0: Abilities.PRIMORDIAL_SEA }, - [Species.DARKRAI]: { 0: Abilities.UNNERVE }, - [Species.SHAYMIN]: { 0: Abilities.GRASSY_SURGE, 1: Abilities.DELTA_STREAM }, - [Species.ARCEUS]: { 0: Abilities.ADAPTABILITY, 1: Abilities.ADAPTABILITY, 2: Abilities.ADAPTABILITY, 3: Abilities.ADAPTABILITY, 4: Abilities.ADAPTABILITY, 5: Abilities.ADAPTABILITY, 6: Abilities.ADAPTABILITY, 7: Abilities.ADAPTABILITY, 8: Abilities.ADAPTABILITY, 9: Abilities.ADAPTABILITY, 10: Abilities.ADAPTABILITY, 11: Abilities.ADAPTABILITY, 12: Abilities.ADAPTABILITY, 13: Abilities.ADAPTABILITY, 14: Abilities.ADAPTABILITY, 15: Abilities.ADAPTABILITY, 16: Abilities.ADAPTABILITY, 17: Abilities.ADAPTABILITY }, + [SpeciesId.TURTWIG]: { 0: AbilityId.SOLID_ROCK }, + [SpeciesId.GROTLE]: { 0: AbilityId.SOLID_ROCK }, + [SpeciesId.TORTERRA]: { 0: AbilityId.THICK_FAT }, + [SpeciesId.CHIMCHAR]: { 0: AbilityId.UNNERVE }, + [SpeciesId.MONFERNO]: { 0: AbilityId.BEAST_BOOST }, + [SpeciesId.INFERNAPE]: { 0: AbilityId.BEAST_BOOST }, + [SpeciesId.PIPLUP]: { 0: AbilityId.CUTE_CHARM }, + [SpeciesId.PRINPLUP]: { 0: AbilityId.DRIZZLE }, + [SpeciesId.EMPOLEON]: { 0: AbilityId.DRIZZLE }, + [SpeciesId.STARLY]: { 0: AbilityId.INTIMIDATE }, + [SpeciesId.STARAVIA]: { 0: AbilityId.ROCK_HEAD }, + [SpeciesId.STARAPTOR]: { 0: AbilityId.ROCK_HEAD }, + [SpeciesId.BIDOOF]: { 0: AbilityId.SAP_SIPPER }, + [SpeciesId.BIBAREL]: { 0: AbilityId.SAP_SIPPER }, + [SpeciesId.KRICKETOT]: { 0: AbilityId.HONEY_GATHER }, + [SpeciesId.KRICKETUNE]: { 0: AbilityId.SHARPNESS }, + [SpeciesId.SHINX]: { 0: AbilityId.SPEED_BOOST }, + [SpeciesId.LUXIO]: { 0: AbilityId.SPEED_BOOST }, + [SpeciesId.LUXRAY]: { 0: AbilityId.SPEED_BOOST }, + [SpeciesId.BUDEW]: { 0: AbilityId.SEED_SOWER }, + [SpeciesId.ROSELIA]: { 0: AbilityId.GRASSY_SURGE }, + [SpeciesId.ROSERADE]: { 0: AbilityId.GRASSY_SURGE }, + [SpeciesId.CRANIDOS]: { 0: AbilityId.ROCK_HEAD }, + [SpeciesId.RAMPARDOS]: { 0: AbilityId.ROCK_HEAD }, + [SpeciesId.SHIELDON]: { 0: AbilityId.EARTH_EATER }, + [SpeciesId.BASTIODON]: { 0: AbilityId.EARTH_EATER }, + [SpeciesId.BURMY]: { 0: AbilityId.STURDY, 1: AbilityId.STURDY, 2: AbilityId.STURDY }, + [SpeciesId.WORMADAM]: { 0: AbilityId.STURDY, 1: AbilityId.STURDY, 2: AbilityId.STURDY }, + [SpeciesId.MOTHIM]: { 0: AbilityId.SPEED_BOOST }, + [SpeciesId.COMBEE]: { 0: AbilityId.RUN_AWAY }, + [SpeciesId.VESPIQUEN]: { 0: AbilityId.INTIMIDATE }, + [SpeciesId.PACHIRISU]: { 0: AbilityId.HONEY_GATHER }, + [SpeciesId.BUIZEL]: { 0: AbilityId.MOXIE }, + [SpeciesId.FLOATZEL]: { 0: AbilityId.MOXIE }, + [SpeciesId.CHERUBI]: { 0: AbilityId.DROUGHT }, + [SpeciesId.CHERRIM]: { 0: AbilityId.ORICHALCUM_PULSE, 1: AbilityId.ORICHALCUM_PULSE }, + [SpeciesId.SHELLOS]: { 0: AbilityId.REGENERATOR, 1: AbilityId.REGENERATOR }, + [SpeciesId.GASTRODON]: { 0: AbilityId.REGENERATOR, 1: AbilityId.REGENERATOR }, + [SpeciesId.DRIFLOON]: { 0: AbilityId.MAGIC_GUARD }, + [SpeciesId.DRIFBLIM]: { 0: AbilityId.MAGIC_GUARD }, + [SpeciesId.BUNEARY]: { 0: AbilityId.ADAPTABILITY }, + [SpeciesId.LOPUNNY]: { 0: AbilityId.ADAPTABILITY, 1: AbilityId.ADAPTABILITY }, + [SpeciesId.GLAMEOW]: { 0: AbilityId.INTIMIDATE }, + [SpeciesId.PURUGLY]: { 0: AbilityId.INTIMIDATE }, + [SpeciesId.CHINGLING]: { 0: AbilityId.PUNK_ROCK }, + [SpeciesId.CHIMECHO]: { 0: AbilityId.PUNK_ROCK }, + [SpeciesId.STUNKY]: { 0: AbilityId.NEUTRALIZING_GAS }, + [SpeciesId.SKUNTANK]: { 0: AbilityId.NEUTRALIZING_GAS }, + [SpeciesId.BRONZOR]: { 0: AbilityId.MIRROR_ARMOR }, + [SpeciesId.BRONZONG]: { 0: AbilityId.MIRROR_ARMOR }, + [SpeciesId.BONSLY]: { 0: AbilityId.SAP_SIPPER }, + [SpeciesId.SUDOWOODO]: { 0: AbilityId.SAP_SIPPER }, + [SpeciesId.MIME_JR]: { 0: AbilityId.PRANKSTER }, + [SpeciesId.MR_MIME]: { 0: AbilityId.PRANKSTER }, + [SpeciesId.GALAR_MR_MIME]: { 0: AbilityId.PRANKSTER }, + [SpeciesId.MR_RIME]: { 0: AbilityId.PRANKSTER }, + [SpeciesId.HAPPINY]: { 0: AbilityId.HOSPITALITY }, + [SpeciesId.CHANSEY]: { 0: AbilityId.FRIEND_GUARD }, + [SpeciesId.BLISSEY]: { 0: AbilityId.FUR_COAT }, + [SpeciesId.CHATOT]: { 0: AbilityId.PUNK_ROCK }, + [SpeciesId.SPIRITOMB]: { 0: AbilityId.VESSEL_OF_RUIN }, + [SpeciesId.GIBLE]: { 0: AbilityId.ARENA_TRAP }, + [SpeciesId.GABITE]: { 0: AbilityId.ARENA_TRAP }, + [SpeciesId.GARCHOMP]: { 0: AbilityId.ARENA_TRAP, 1: AbilityId.SAND_RUSH }, + [SpeciesId.MUNCHLAX]: { 0: AbilityId.CHEEK_POUCH }, + [SpeciesId.SNORLAX]: { 0: AbilityId.CHEEK_POUCH, 1: AbilityId.RIPEN }, + [SpeciesId.RIOLU]: { 0: AbilityId.MINDS_EYE }, + [SpeciesId.LUCARIO]: { 0: AbilityId.MINDS_EYE, 1: AbilityId.MINDS_EYE }, + [SpeciesId.HIPPOPOTAS]: { 0: AbilityId.UNAWARE }, + [SpeciesId.HIPPOWDON]: { 0: AbilityId.UNAWARE }, + [SpeciesId.SKORUPI]: { 0: AbilityId.SUPER_LUCK }, + [SpeciesId.DRAPION]: { 0: AbilityId.SUPER_LUCK }, + [SpeciesId.CROAGUNK]: { 0: AbilityId.MOXIE }, + [SpeciesId.TOXICROAK]: { 0: AbilityId.MOXIE }, + [SpeciesId.CARNIVINE]: { 0: AbilityId.ARENA_TRAP }, + [SpeciesId.FINNEON]: { 0: AbilityId.WATER_BUBBLE }, + [SpeciesId.LUMINEON]: { 0: AbilityId.WATER_BUBBLE }, + [SpeciesId.MANTYKE]: { 0: AbilityId.UNAWARE }, + [SpeciesId.MANTINE]: { 0: AbilityId.UNAWARE }, + [SpeciesId.SNOVER]: { 0: AbilityId.SLUSH_RUSH }, + [SpeciesId.ABOMASNOW]: { 0: AbilityId.SLUSH_RUSH, 1: AbilityId.SEED_SOWER }, + [SpeciesId.ROTOM]: { 0: AbilityId.HADRON_ENGINE, 1: AbilityId.HADRON_ENGINE, 2: AbilityId.HADRON_ENGINE, 3: AbilityId.HADRON_ENGINE, 4: AbilityId.HADRON_ENGINE, 5: AbilityId.HADRON_ENGINE }, + [SpeciesId.UXIE]: { 0: AbilityId.ILLUSION }, + [SpeciesId.MESPRIT]: { 0: AbilityId.MOODY }, + [SpeciesId.AZELF]: { 0: AbilityId.NEUROFORCE }, + [SpeciesId.DIALGA]: { 0: AbilityId.BERSERK, 1: AbilityId.BERSERK }, + [SpeciesId.PALKIA]: { 0: AbilityId.BERSERK, 1: AbilityId.BERSERK }, + [SpeciesId.HEATRAN]: { 0: AbilityId.EARTH_EATER }, + [SpeciesId.REGIGIGAS]: { 0: AbilityId.SCRAPPY }, + [SpeciesId.GIRATINA]: { 0: AbilityId.SHADOW_SHIELD, 1: AbilityId.SHADOW_SHIELD }, + [SpeciesId.CRESSELIA]: { 0: AbilityId.SHADOW_SHIELD }, + [SpeciesId.PHIONE]: { 0: AbilityId.SIMPLE }, + [SpeciesId.MANAPHY]: { 0: AbilityId.PRIMORDIAL_SEA }, + [SpeciesId.DARKRAI]: { 0: AbilityId.UNNERVE }, + [SpeciesId.SHAYMIN]: { 0: AbilityId.GRASSY_SURGE, 1: AbilityId.DELTA_STREAM }, + [SpeciesId.ARCEUS]: { 0: AbilityId.ADAPTABILITY, 1: AbilityId.ADAPTABILITY, 2: AbilityId.ADAPTABILITY, 3: AbilityId.ADAPTABILITY, 4: AbilityId.ADAPTABILITY, 5: AbilityId.ADAPTABILITY, 6: AbilityId.ADAPTABILITY, 7: AbilityId.ADAPTABILITY, 8: AbilityId.ADAPTABILITY, 9: AbilityId.ADAPTABILITY, 10: AbilityId.ADAPTABILITY, 11: AbilityId.ADAPTABILITY, 12: AbilityId.ADAPTABILITY, 13: AbilityId.ADAPTABILITY, 14: AbilityId.ADAPTABILITY, 15: AbilityId.ADAPTABILITY, 16: AbilityId.ADAPTABILITY, 17: AbilityId.ADAPTABILITY }, - [Species.VICTINI]: { 0: Abilities.SHEER_FORCE }, - [Species.SNIVY]: { 0: Abilities.MULTISCALE }, - [Species.SERVINE]: { 0: Abilities.MULTISCALE }, - [Species.SERPERIOR]: { 0: Abilities.MULTISCALE }, - [Species.TEPIG]: { 0: Abilities.GLUTTONY }, - [Species.PIGNITE]: { 0: Abilities.ROCK_HEAD }, - [Species.EMBOAR]: { 0: Abilities.ROCK_HEAD }, - [Species.OSHAWOTT]: { 0: Abilities.MOLD_BREAKER }, - [Species.DEWOTT]: { 0: Abilities.MOLD_BREAKER }, - [Species.SAMUROTT]: { 0: Abilities.LIGHTNING_ROD }, - [Species.HISUI_SAMUROTT]: { 0: Abilities.MOLD_BREAKER }, - [Species.PATRAT]: { 0: Abilities.NO_GUARD }, - [Species.WATCHOG]: { 0: Abilities.NO_GUARD }, - [Species.LILLIPUP]: { 0: Abilities.BALL_FETCH }, - [Species.HERDIER]: { 0: Abilities.FUR_COAT }, - [Species.STOUTLAND]: { 0: Abilities.FUR_COAT }, - [Species.PURRLOIN]: { 0: Abilities.PICKUP }, - [Species.LIEPARD]: { 0: Abilities.PICKUP }, - [Species.PANSAGE]: { 0: Abilities.WELL_BAKED_BODY }, - [Species.SIMISAGE]: { 0: Abilities.WELL_BAKED_BODY }, - [Species.PANSEAR]: { 0: Abilities.WATER_ABSORB }, - [Species.SIMISEAR]: { 0: Abilities.WATER_ABSORB }, - [Species.PANPOUR]: { 0: Abilities.SAP_SIPPER }, - [Species.SIMIPOUR]: { 0: Abilities.SAP_SIPPER }, - [Species.MUNNA]: { 0: Abilities.NEUTRALIZING_GAS }, - [Species.MUSHARNA]: { 0: Abilities.NEUTRALIZING_GAS }, - [Species.PIDOVE]: { 0: Abilities.SNIPER }, - [Species.TRANQUILL]: { 0: Abilities.SNIPER }, - [Species.UNFEZANT]: { 0: Abilities.SNIPER }, - [Species.BLITZLE]: { 0: Abilities.ELECTRIC_SURGE }, - [Species.ZEBSTRIKA]: { 0: Abilities.ELECTRIC_SURGE }, - [Species.ROGGENROLA]: { 0: Abilities.SOLID_ROCK }, - [Species.BOLDORE]: { 0: Abilities.SOLID_ROCK }, - [Species.GIGALITH]: { 0: Abilities.SOLID_ROCK }, - [Species.WOOBAT]: { 0: Abilities.OPPORTUNIST }, - [Species.SWOOBAT]: { 0: Abilities.OPPORTUNIST }, - [Species.DRILBUR]: { 0: Abilities.STURDY }, - [Species.EXCADRILL]: { 0: Abilities.STURDY }, - [Species.AUDINO]: { 0: Abilities.FRIEND_GUARD, 1: Abilities.FAIRY_AURA }, - [Species.TIMBURR]: { 0: Abilities.ROCKY_PAYLOAD }, - [Species.GURDURR]: { 0: Abilities.ROCKY_PAYLOAD }, - [Species.CONKELDURR]: { 0: Abilities.ROCKY_PAYLOAD }, - [Species.TYMPOLE]: { 0: Abilities.POISON_HEAL }, - [Species.PALPITOAD]: { 0: Abilities.POISON_HEAL }, - [Species.SEISMITOAD]: { 0: Abilities.POISON_HEAL }, - [Species.THROH]: { 0: Abilities.STAMINA }, - [Species.SAWK]: { 0: Abilities.SCRAPPY }, - [Species.SEWADDLE]: { 0: Abilities.SHIELD_DUST }, - [Species.SWADLOON]: { 0: Abilities.SHIELD_DUST }, - [Species.LEAVANNY]: { 0: Abilities.SHARPNESS }, - [Species.VENIPEDE]: { 0: Abilities.STAMINA }, - [Species.WHIRLIPEDE]: { 0: Abilities.STAMINA }, - [Species.SCOLIPEDE]: { 0: Abilities.STAMINA }, - [Species.COTTONEE]: { 0: Abilities.FLUFFY }, - [Species.WHIMSICOTT]: { 0: Abilities.FLUFFY }, - [Species.PETILIL]: { 0: Abilities.FLOWER_VEIL }, - [Species.LILLIGANT]: { 0: Abilities.GRASSY_SURGE }, - [Species.HISUI_LILLIGANT]: { 0: Abilities.FLOWER_VEIL }, - [Species.BASCULIN]: { 0: Abilities.ROCK_HEAD, 1: Abilities.RECKLESS, 2: Abilities.SUPREME_OVERLORD }, - [Species.BASCULEGION]: { 0: Abilities.SUPREME_OVERLORD, 1: Abilities.SUPREME_OVERLORD }, - [Species.SANDILE]: { 0: Abilities.TOUGH_CLAWS }, - [Species.KROKOROK]: { 0: Abilities.TOUGH_CLAWS }, - [Species.KROOKODILE]: { 0: Abilities.TOUGH_CLAWS }, - [Species.DARUMAKA]: { 0: Abilities.GORILLA_TACTICS }, - [Species.DARMANITAN]: { 0: Abilities.GORILLA_TACTICS, 1: Abilities.SOLID_ROCK }, - [Species.MARACTUS]: { 0: Abilities.WELL_BAKED_BODY }, - [Species.DWEBBLE]: { 0: Abilities.ROCKY_PAYLOAD }, - [Species.CRUSTLE]: { 0: Abilities.ROCKY_PAYLOAD }, - [Species.SCRAGGY]: { 0: Abilities.PROTEAN }, - [Species.SCRAFTY]: { 0: Abilities.PROTEAN }, - [Species.SIGILYPH]: { 0: Abilities.FLARE_BOOST }, - [Species.YAMASK]: { 0: Abilities.PURIFYING_SALT }, - [Species.COFAGRIGUS]: { 0: Abilities.PURIFYING_SALT }, - [Species.TIRTOUGA]: { 0: Abilities.WATER_ABSORB }, - [Species.CARRACOSTA]: { 0: Abilities.WATER_ABSORB }, - [Species.ARCHEN]: { 0: Abilities.MULTISCALE }, - [Species.ARCHEOPS]: { 0: Abilities.MULTISCALE }, - [Species.TRUBBISH]: { 0: Abilities.NEUTRALIZING_GAS }, - [Species.GARBODOR]: { 0: Abilities.NEUTRALIZING_GAS, 1: Abilities.NEUTRALIZING_GAS }, - [Species.ZORUA]: { 0: Abilities.ADAPTABILITY }, - [Species.ZOROARK]: { 0: Abilities.ADAPTABILITY }, - [Species.MINCCINO]: { 0: Abilities.FUR_COAT }, - [Species.CINCCINO]: { 0: Abilities.FUR_COAT }, - [Species.GOTHITA]: { 0: Abilities.UNNERVE }, - [Species.GOTHORITA]: { 0: Abilities.UNNERVE }, - [Species.GOTHITELLE]: { 0: Abilities.UNNERVE }, - [Species.SOLOSIS]: { 0: Abilities.PSYCHIC_SURGE }, - [Species.DUOSION]: { 0: Abilities.PSYCHIC_SURGE }, - [Species.REUNICLUS]: { 0: Abilities.PSYCHIC_SURGE }, - [Species.DUCKLETT]: { 0: Abilities.DRIZZLE }, - [Species.SWANNA]: { 0: Abilities.DRIZZLE }, - [Species.VANILLITE]: { 0: Abilities.REFRIGERATE }, - [Species.VANILLISH]: { 0: Abilities.REFRIGERATE }, - [Species.VANILLUXE]: { 0: Abilities.SLUSH_RUSH }, - [Species.DEERLING]: { 0: Abilities.FLOWER_VEIL, 1: Abilities.CUD_CHEW, 2: Abilities.HARVEST, 3: Abilities.FUR_COAT }, - [Species.SAWSBUCK]: { 0: Abilities.FLOWER_VEIL, 1: Abilities.CUD_CHEW, 2: Abilities.HARVEST, 3: Abilities.FUR_COAT }, - [Species.EMOLGA]: { 0: Abilities.SERENE_GRACE }, - [Species.KARRABLAST]: { 0: Abilities.QUICK_DRAW }, - [Species.ESCAVALIER]: { 0: Abilities.QUICK_DRAW }, - [Species.FOONGUS]: { 0: Abilities.MYCELIUM_MIGHT }, - [Species.AMOONGUSS]: { 0: Abilities.THICK_FAT }, - [Species.FRILLISH]: { 0: Abilities.POISON_HEAL }, - [Species.JELLICENT]: { 0: Abilities.POISON_HEAL }, - [Species.ALOMOMOLA]: { 0: Abilities.MULTISCALE }, - [Species.JOLTIK]: { 0: Abilities.TRANSISTOR }, - [Species.GALVANTULA]: { 0: Abilities.TRANSISTOR }, - [Species.FERROSEED]: { 0: Abilities.ROUGH_SKIN }, - [Species.FERROTHORN]: { 0: Abilities.ROUGH_SKIN }, - [Species.KLINK]: { 0: Abilities.STEELY_SPIRIT }, - [Species.KLANG]: { 0: Abilities.STEELY_SPIRIT }, - [Species.KLINKLANG]: { 0: Abilities.STEELY_SPIRIT }, - [Species.TYNAMO]: { 0: Abilities.POISON_HEAL }, - [Species.EELEKTRIK]: { 0: Abilities.POISON_HEAL }, - [Species.EELEKTROSS]: { 0: Abilities.POISON_HEAL }, - [Species.ELGYEM]: { 0: Abilities.BEADS_OF_RUIN }, - [Species.BEHEEYEM]: { 0: Abilities.BEADS_OF_RUIN }, - [Species.LITWICK]: { 0: Abilities.SHADOW_TAG }, - [Species.LAMPENT]: { 0: Abilities.SHADOW_TAG }, - [Species.CHANDELURE]: { 0: Abilities.SHADOW_TAG }, - [Species.AXEW]: { 0: Abilities.DRAGONS_MAW }, - [Species.FRAXURE]: { 0: Abilities.DRAGONS_MAW }, - [Species.HAXORUS]: { 0: Abilities.DRAGONS_MAW }, - [Species.CUBCHOO]: { 0: Abilities.FUR_COAT }, - [Species.BEARTIC]: { 0: Abilities.FUR_COAT }, - [Species.CRYOGONAL]: { 0: Abilities.SNOW_WARNING }, - [Species.SHELMET]: { 0: Abilities.STAMINA }, - [Species.ACCELGOR]: { 0: Abilities.PROTEAN }, - [Species.STUNFISK]: { 0: Abilities.STORM_DRAIN }, - [Species.MIENFOO]: { 0: Abilities.NO_GUARD }, - [Species.MIENSHAO]: { 0: Abilities.NO_GUARD }, - [Species.DRUDDIGON]: { 0: Abilities.INTIMIDATE }, - [Species.GOLETT]: { 0: Abilities.SHADOW_SHIELD }, - [Species.GOLURK]: { 0: Abilities.SHADOW_SHIELD }, - [Species.PAWNIARD]: { 0: Abilities.SWORD_OF_RUIN }, - [Species.BISHARP]: { 0: Abilities.SWORD_OF_RUIN }, - [Species.KINGAMBIT]: { 0: Abilities.SWORD_OF_RUIN }, - [Species.BOUFFALANT]: { 0: Abilities.ROCK_HEAD }, - [Species.RUFFLET]: { 0: Abilities.SPEED_BOOST }, - [Species.BRAVIARY]: { 0: Abilities.SPEED_BOOST }, - [Species.HISUI_BRAVIARY]: { 0: Abilities.SPEED_BOOST }, - [Species.VULLABY]: { 0: Abilities.THICK_FAT }, - [Species.MANDIBUZZ]: { 0: Abilities.THICK_FAT }, - [Species.HEATMOR]: { 0: Abilities.CONTRARY }, - [Species.DURANT]: { 0: Abilities.COMPOUND_EYES }, - [Species.DEINO]: { 0: Abilities.NO_GUARD }, - [Species.ZWEILOUS]: { 0: Abilities.NO_GUARD }, - [Species.HYDREIGON]: { 0: Abilities.PARENTAL_BOND }, - [Species.LARVESTA]: { 0: Abilities.FLASH_FIRE }, - [Species.VOLCARONA]: { 0: Abilities.DROUGHT }, - [Species.COBALION]: { 0: Abilities.INTREPID_SWORD }, - [Species.TERRAKION]: { 0: Abilities.ROCKY_PAYLOAD }, - [Species.VIRIZION]: { 0: Abilities.SHARPNESS }, - [Species.TORNADUS]: { 0: Abilities.DRIZZLE, 1: Abilities.DRIZZLE }, - [Species.THUNDURUS]: { 0: Abilities.DRIZZLE, 1: Abilities.DRIZZLE }, - [Species.RESHIRAM]: { 0: Abilities.ORICHALCUM_PULSE }, - [Species.ZEKROM]: { 0: Abilities.HADRON_ENGINE }, - [Species.LANDORUS]: { 0: Abilities.STORM_DRAIN, 1: Abilities.STORM_DRAIN }, - [Species.KYUREM]: { 0: Abilities.SNOW_WARNING, 1: Abilities.HADRON_ENGINE, 2: Abilities.ORICHALCUM_PULSE }, - [Species.KELDEO]: { 0: Abilities.GRIM_NEIGH, 1: Abilities.GRIM_NEIGH }, - [Species.MELOETTA]: { 0: Abilities.PUNK_ROCK, 1: Abilities.SCRAPPY }, - [Species.GENESECT]: { 0: Abilities.PROTEAN, 1: Abilities.PROTEAN, 2: Abilities.PROTEAN, 3: Abilities.PROTEAN, 4: Abilities.PROTEAN }, + [SpeciesId.VICTINI]: { 0: AbilityId.SHEER_FORCE }, + [SpeciesId.SNIVY]: { 0: AbilityId.MULTISCALE }, + [SpeciesId.SERVINE]: { 0: AbilityId.MULTISCALE }, + [SpeciesId.SERPERIOR]: { 0: AbilityId.MULTISCALE }, + [SpeciesId.TEPIG]: { 0: AbilityId.GLUTTONY }, + [SpeciesId.PIGNITE]: { 0: AbilityId.ROCK_HEAD }, + [SpeciesId.EMBOAR]: { 0: AbilityId.ROCK_HEAD }, + [SpeciesId.OSHAWOTT]: { 0: AbilityId.MOLD_BREAKER }, + [SpeciesId.DEWOTT]: { 0: AbilityId.MOLD_BREAKER }, + [SpeciesId.SAMUROTT]: { 0: AbilityId.LIGHTNING_ROD }, + [SpeciesId.HISUI_SAMUROTT]: { 0: AbilityId.MOLD_BREAKER }, + [SpeciesId.PATRAT]: { 0: AbilityId.NO_GUARD }, + [SpeciesId.WATCHOG]: { 0: AbilityId.NO_GUARD }, + [SpeciesId.LILLIPUP]: { 0: AbilityId.BALL_FETCH }, + [SpeciesId.HERDIER]: { 0: AbilityId.FUR_COAT }, + [SpeciesId.STOUTLAND]: { 0: AbilityId.FUR_COAT }, + [SpeciesId.PURRLOIN]: { 0: AbilityId.PICKUP }, + [SpeciesId.LIEPARD]: { 0: AbilityId.PICKUP }, + [SpeciesId.PANSAGE]: { 0: AbilityId.WELL_BAKED_BODY }, + [SpeciesId.SIMISAGE]: { 0: AbilityId.WELL_BAKED_BODY }, + [SpeciesId.PANSEAR]: { 0: AbilityId.WATER_ABSORB }, + [SpeciesId.SIMISEAR]: { 0: AbilityId.WATER_ABSORB }, + [SpeciesId.PANPOUR]: { 0: AbilityId.SAP_SIPPER }, + [SpeciesId.SIMIPOUR]: { 0: AbilityId.SAP_SIPPER }, + [SpeciesId.MUNNA]: { 0: AbilityId.NEUTRALIZING_GAS }, + [SpeciesId.MUSHARNA]: { 0: AbilityId.NEUTRALIZING_GAS }, + [SpeciesId.PIDOVE]: { 0: AbilityId.SNIPER }, + [SpeciesId.TRANQUILL]: { 0: AbilityId.SNIPER }, + [SpeciesId.UNFEZANT]: { 0: AbilityId.SNIPER }, + [SpeciesId.BLITZLE]: { 0: AbilityId.ELECTRIC_SURGE }, + [SpeciesId.ZEBSTRIKA]: { 0: AbilityId.ELECTRIC_SURGE }, + [SpeciesId.ROGGENROLA]: { 0: AbilityId.SOLID_ROCK }, + [SpeciesId.BOLDORE]: { 0: AbilityId.SOLID_ROCK }, + [SpeciesId.GIGALITH]: { 0: AbilityId.SOLID_ROCK }, + [SpeciesId.WOOBAT]: { 0: AbilityId.OPPORTUNIST }, + [SpeciesId.SWOOBAT]: { 0: AbilityId.OPPORTUNIST }, + [SpeciesId.DRILBUR]: { 0: AbilityId.STURDY }, + [SpeciesId.EXCADRILL]: { 0: AbilityId.STURDY }, + [SpeciesId.AUDINO]: { 0: AbilityId.FRIEND_GUARD, 1: AbilityId.FAIRY_AURA }, + [SpeciesId.TIMBURR]: { 0: AbilityId.ROCKY_PAYLOAD }, + [SpeciesId.GURDURR]: { 0: AbilityId.ROCKY_PAYLOAD }, + [SpeciesId.CONKELDURR]: { 0: AbilityId.ROCKY_PAYLOAD }, + [SpeciesId.TYMPOLE]: { 0: AbilityId.POISON_HEAL }, + [SpeciesId.PALPITOAD]: { 0: AbilityId.POISON_HEAL }, + [SpeciesId.SEISMITOAD]: { 0: AbilityId.POISON_HEAL }, + [SpeciesId.THROH]: { 0: AbilityId.STAMINA }, + [SpeciesId.SAWK]: { 0: AbilityId.SCRAPPY }, + [SpeciesId.SEWADDLE]: { 0: AbilityId.SHIELD_DUST }, + [SpeciesId.SWADLOON]: { 0: AbilityId.SHIELD_DUST }, + [SpeciesId.LEAVANNY]: { 0: AbilityId.SHARPNESS }, + [SpeciesId.VENIPEDE]: { 0: AbilityId.STAMINA }, + [SpeciesId.WHIRLIPEDE]: { 0: AbilityId.STAMINA }, + [SpeciesId.SCOLIPEDE]: { 0: AbilityId.STAMINA }, + [SpeciesId.COTTONEE]: { 0: AbilityId.FLUFFY }, + [SpeciesId.WHIMSICOTT]: { 0: AbilityId.FLUFFY }, + [SpeciesId.PETILIL]: { 0: AbilityId.FLOWER_VEIL }, + [SpeciesId.LILLIGANT]: { 0: AbilityId.GRASSY_SURGE }, + [SpeciesId.HISUI_LILLIGANT]: { 0: AbilityId.FLOWER_VEIL }, + [SpeciesId.BASCULIN]: { 0: AbilityId.ROCK_HEAD, 1: AbilityId.RECKLESS, 2: AbilityId.SUPREME_OVERLORD }, + [SpeciesId.BASCULEGION]: { 0: AbilityId.SUPREME_OVERLORD, 1: AbilityId.SUPREME_OVERLORD }, + [SpeciesId.SANDILE]: { 0: AbilityId.TOUGH_CLAWS }, + [SpeciesId.KROKOROK]: { 0: AbilityId.TOUGH_CLAWS }, + [SpeciesId.KROOKODILE]: { 0: AbilityId.TOUGH_CLAWS }, + [SpeciesId.DARUMAKA]: { 0: AbilityId.GORILLA_TACTICS }, + [SpeciesId.DARMANITAN]: { 0: AbilityId.GORILLA_TACTICS, 1: AbilityId.SOLID_ROCK }, + [SpeciesId.MARACTUS]: { 0: AbilityId.WELL_BAKED_BODY }, + [SpeciesId.DWEBBLE]: { 0: AbilityId.ROCKY_PAYLOAD }, + [SpeciesId.CRUSTLE]: { 0: AbilityId.ROCKY_PAYLOAD }, + [SpeciesId.SCRAGGY]: { 0: AbilityId.PROTEAN }, + [SpeciesId.SCRAFTY]: { 0: AbilityId.PROTEAN }, + [SpeciesId.SIGILYPH]: { 0: AbilityId.FLARE_BOOST }, + [SpeciesId.YAMASK]: { 0: AbilityId.PURIFYING_SALT }, + [SpeciesId.COFAGRIGUS]: { 0: AbilityId.PURIFYING_SALT }, + [SpeciesId.TIRTOUGA]: { 0: AbilityId.WATER_ABSORB }, + [SpeciesId.CARRACOSTA]: { 0: AbilityId.WATER_ABSORB }, + [SpeciesId.ARCHEN]: { 0: AbilityId.MULTISCALE }, + [SpeciesId.ARCHEOPS]: { 0: AbilityId.MULTISCALE }, + [SpeciesId.TRUBBISH]: { 0: AbilityId.NEUTRALIZING_GAS }, + [SpeciesId.GARBODOR]: { 0: AbilityId.NEUTRALIZING_GAS, 1: AbilityId.NEUTRALIZING_GAS }, + [SpeciesId.ZORUA]: { 0: AbilityId.ADAPTABILITY }, + [SpeciesId.ZOROARK]: { 0: AbilityId.ADAPTABILITY }, + [SpeciesId.MINCCINO]: { 0: AbilityId.FUR_COAT }, + [SpeciesId.CINCCINO]: { 0: AbilityId.FUR_COAT }, + [SpeciesId.GOTHITA]: { 0: AbilityId.UNNERVE }, + [SpeciesId.GOTHORITA]: { 0: AbilityId.UNNERVE }, + [SpeciesId.GOTHITELLE]: { 0: AbilityId.UNNERVE }, + [SpeciesId.SOLOSIS]: { 0: AbilityId.PSYCHIC_SURGE }, + [SpeciesId.DUOSION]: { 0: AbilityId.PSYCHIC_SURGE }, + [SpeciesId.REUNICLUS]: { 0: AbilityId.PSYCHIC_SURGE }, + [SpeciesId.DUCKLETT]: { 0: AbilityId.DRIZZLE }, + [SpeciesId.SWANNA]: { 0: AbilityId.DRIZZLE }, + [SpeciesId.VANILLITE]: { 0: AbilityId.REFRIGERATE }, + [SpeciesId.VANILLISH]: { 0: AbilityId.REFRIGERATE }, + [SpeciesId.VANILLUXE]: { 0: AbilityId.SLUSH_RUSH }, + [SpeciesId.DEERLING]: { 0: AbilityId.FLOWER_VEIL, 1: AbilityId.CUD_CHEW, 2: AbilityId.HARVEST, 3: AbilityId.FUR_COAT }, + [SpeciesId.SAWSBUCK]: { 0: AbilityId.FLOWER_VEIL, 1: AbilityId.CUD_CHEW, 2: AbilityId.HARVEST, 3: AbilityId.FUR_COAT }, + [SpeciesId.EMOLGA]: { 0: AbilityId.SERENE_GRACE }, + [SpeciesId.KARRABLAST]: { 0: AbilityId.QUICK_DRAW }, + [SpeciesId.ESCAVALIER]: { 0: AbilityId.QUICK_DRAW }, + [SpeciesId.FOONGUS]: { 0: AbilityId.MYCELIUM_MIGHT }, + [SpeciesId.AMOONGUSS]: { 0: AbilityId.THICK_FAT }, + [SpeciesId.FRILLISH]: { 0: AbilityId.POISON_HEAL }, + [SpeciesId.JELLICENT]: { 0: AbilityId.POISON_HEAL }, + [SpeciesId.ALOMOMOLA]: { 0: AbilityId.MULTISCALE }, + [SpeciesId.JOLTIK]: { 0: AbilityId.TRANSISTOR }, + [SpeciesId.GALVANTULA]: { 0: AbilityId.TRANSISTOR }, + [SpeciesId.FERROSEED]: { 0: AbilityId.ROUGH_SKIN }, + [SpeciesId.FERROTHORN]: { 0: AbilityId.ROUGH_SKIN }, + [SpeciesId.KLINK]: { 0: AbilityId.STEELY_SPIRIT }, + [SpeciesId.KLANG]: { 0: AbilityId.STEELY_SPIRIT }, + [SpeciesId.KLINKLANG]: { 0: AbilityId.STEELY_SPIRIT }, + [SpeciesId.TYNAMO]: { 0: AbilityId.POISON_HEAL }, + [SpeciesId.EELEKTRIK]: { 0: AbilityId.POISON_HEAL }, + [SpeciesId.EELEKTROSS]: { 0: AbilityId.POISON_HEAL }, + [SpeciesId.ELGYEM]: { 0: AbilityId.BEADS_OF_RUIN }, + [SpeciesId.BEHEEYEM]: { 0: AbilityId.BEADS_OF_RUIN }, + [SpeciesId.LITWICK]: { 0: AbilityId.SHADOW_TAG }, + [SpeciesId.LAMPENT]: { 0: AbilityId.SHADOW_TAG }, + [SpeciesId.CHANDELURE]: { 0: AbilityId.SHADOW_TAG }, + [SpeciesId.AXEW]: { 0: AbilityId.DRAGONS_MAW }, + [SpeciesId.FRAXURE]: { 0: AbilityId.DRAGONS_MAW }, + [SpeciesId.HAXORUS]: { 0: AbilityId.DRAGONS_MAW }, + [SpeciesId.CUBCHOO]: { 0: AbilityId.FUR_COAT }, + [SpeciesId.BEARTIC]: { 0: AbilityId.FUR_COAT }, + [SpeciesId.CRYOGONAL]: { 0: AbilityId.SNOW_WARNING }, + [SpeciesId.SHELMET]: { 0: AbilityId.STAMINA }, + [SpeciesId.ACCELGOR]: { 0: AbilityId.PROTEAN }, + [SpeciesId.STUNFISK]: { 0: AbilityId.STORM_DRAIN }, + [SpeciesId.MIENFOO]: { 0: AbilityId.NO_GUARD }, + [SpeciesId.MIENSHAO]: { 0: AbilityId.NO_GUARD }, + [SpeciesId.DRUDDIGON]: { 0: AbilityId.INTIMIDATE }, + [SpeciesId.GOLETT]: { 0: AbilityId.SHADOW_SHIELD }, + [SpeciesId.GOLURK]: { 0: AbilityId.SHADOW_SHIELD }, + [SpeciesId.PAWNIARD]: { 0: AbilityId.SWORD_OF_RUIN }, + [SpeciesId.BISHARP]: { 0: AbilityId.SWORD_OF_RUIN }, + [SpeciesId.KINGAMBIT]: { 0: AbilityId.SWORD_OF_RUIN }, + [SpeciesId.BOUFFALANT]: { 0: AbilityId.ROCK_HEAD }, + [SpeciesId.RUFFLET]: { 0: AbilityId.SPEED_BOOST }, + [SpeciesId.BRAVIARY]: { 0: AbilityId.SPEED_BOOST }, + [SpeciesId.HISUI_BRAVIARY]: { 0: AbilityId.SPEED_BOOST }, + [SpeciesId.VULLABY]: { 0: AbilityId.THICK_FAT }, + [SpeciesId.MANDIBUZZ]: { 0: AbilityId.THICK_FAT }, + [SpeciesId.HEATMOR]: { 0: AbilityId.CONTRARY }, + [SpeciesId.DURANT]: { 0: AbilityId.COMPOUND_EYES }, + [SpeciesId.DEINO]: { 0: AbilityId.NO_GUARD }, + [SpeciesId.ZWEILOUS]: { 0: AbilityId.NO_GUARD }, + [SpeciesId.HYDREIGON]: { 0: AbilityId.PARENTAL_BOND }, + [SpeciesId.LARVESTA]: { 0: AbilityId.FLASH_FIRE }, + [SpeciesId.VOLCARONA]: { 0: AbilityId.DROUGHT }, + [SpeciesId.COBALION]: { 0: AbilityId.INTREPID_SWORD }, + [SpeciesId.TERRAKION]: { 0: AbilityId.ROCKY_PAYLOAD }, + [SpeciesId.VIRIZION]: { 0: AbilityId.SHARPNESS }, + [SpeciesId.TORNADUS]: { 0: AbilityId.DRIZZLE, 1: AbilityId.DRIZZLE }, + [SpeciesId.THUNDURUS]: { 0: AbilityId.DRIZZLE, 1: AbilityId.DRIZZLE }, + [SpeciesId.RESHIRAM]: { 0: AbilityId.ORICHALCUM_PULSE }, + [SpeciesId.ZEKROM]: { 0: AbilityId.HADRON_ENGINE }, + [SpeciesId.LANDORUS]: { 0: AbilityId.STORM_DRAIN, 1: AbilityId.STORM_DRAIN }, + [SpeciesId.KYUREM]: { 0: AbilityId.SNOW_WARNING, 1: AbilityId.HADRON_ENGINE, 2: AbilityId.ORICHALCUM_PULSE }, + [SpeciesId.KELDEO]: { 0: AbilityId.GRIM_NEIGH, 1: AbilityId.GRIM_NEIGH }, + [SpeciesId.MELOETTA]: { 0: AbilityId.PUNK_ROCK, 1: AbilityId.SCRAPPY }, + [SpeciesId.GENESECT]: { 0: AbilityId.PROTEAN, 1: AbilityId.PROTEAN, 2: AbilityId.PROTEAN, 3: AbilityId.PROTEAN, 4: AbilityId.PROTEAN }, - [Species.CHESPIN]: { 0: Abilities.ROUGH_SKIN }, - [Species.QUILLADIN]: { 0: Abilities.DAUNTLESS_SHIELD }, - [Species.CHESNAUGHT]: { 0: Abilities.DAUNTLESS_SHIELD }, - [Species.FENNEKIN]: { 0: Abilities.FLUFFY }, - [Species.BRAIXEN]: { 0: Abilities.PSYCHIC_SURGE }, - [Species.DELPHOX]: { 0: Abilities.PSYCHIC_SURGE }, - [Species.FROAKIE]: { 0: Abilities.STAKEOUT, 1: Abilities.STAKEOUT }, - [Species.FROGADIER]: { 0: Abilities.STAKEOUT, 1: Abilities.STAKEOUT }, - [Species.GRENINJA]: { 0: Abilities.STAKEOUT, 1: Abilities.STAKEOUT, 2: Abilities.STAKEOUT }, - [Species.BUNNELBY]: { 0: Abilities.INNER_FOCUS }, - [Species.DIGGERSBY]: { 0: Abilities.THICK_FAT }, - [Species.FLETCHLING]: { 0: Abilities.FLAME_BODY }, - [Species.FLETCHINDER]: { 0: Abilities.MAGIC_GUARD }, - [Species.TALONFLAME]: { 0: Abilities.MAGIC_GUARD }, - [Species.SCATTERBUG]: { 0: Abilities.RUN_AWAY, 1: Abilities.RUN_AWAY, 2: Abilities.RUN_AWAY, 3: Abilities.RUN_AWAY, 4: Abilities.RUN_AWAY, 5: Abilities.RUN_AWAY, 6: Abilities.RUN_AWAY, 7: Abilities.RUN_AWAY, 8: Abilities.RUN_AWAY, 9: Abilities.RUN_AWAY, 10: Abilities.RUN_AWAY, 11: Abilities.RUN_AWAY, 12: Abilities.RUN_AWAY, 13: Abilities.RUN_AWAY, 14: Abilities.RUN_AWAY, 15: Abilities.RUN_AWAY, 16: Abilities.RUN_AWAY, 17: Abilities.RUN_AWAY, 18: Abilities.RUN_AWAY, 19: Abilities.RUN_AWAY }, - [Species.SPEWPA]: { 0: Abilities.COMPOUND_EYES, 1: Abilities.COMPOUND_EYES, 2: Abilities.COMPOUND_EYES, 3: Abilities.COMPOUND_EYES, 4: Abilities.COMPOUND_EYES, 5: Abilities.COMPOUND_EYES, 6: Abilities.COMPOUND_EYES, 7: Abilities.COMPOUND_EYES, 8: Abilities.COMPOUND_EYES, 9: Abilities.COMPOUND_EYES, 10: Abilities.COMPOUND_EYES, 11: Abilities.COMPOUND_EYES, 12: Abilities.COMPOUND_EYES, 13: Abilities.COMPOUND_EYES, 14: Abilities.COMPOUND_EYES, 15: Abilities.COMPOUND_EYES, 16: Abilities.COMPOUND_EYES, 17: Abilities.COMPOUND_EYES, 18: Abilities.COMPOUND_EYES, 19: Abilities.COMPOUND_EYES }, - [Species.VIVILLON]: { 0: Abilities.PRANKSTER, 1: Abilities.PRANKSTER, 2: Abilities.PRANKSTER, 3: Abilities.PRANKSTER, 4: Abilities.PRANKSTER, 5: Abilities.PRANKSTER, 6: Abilities.PRANKSTER, 7: Abilities.PRANKSTER, 8: Abilities.PRANKSTER, 9: Abilities.PRANKSTER, 10: Abilities.PRANKSTER, 11: Abilities.PRANKSTER, 12: Abilities.PRANKSTER, 13: Abilities.PRANKSTER, 14: Abilities.PRANKSTER, 15: Abilities.PRANKSTER, 16: Abilities.PRANKSTER, 17: Abilities.PRANKSTER, 18: Abilities.PRANKSTER, 19: Abilities.PRANKSTER }, - [Species.LITLEO]: { 0: Abilities.BEAST_BOOST }, - [Species.PYROAR]: { 0: Abilities.BEAST_BOOST }, - [Species.FLABEBE]: { 0: Abilities.GRASSY_SURGE, 1: Abilities.GRASSY_SURGE, 2: Abilities.GRASSY_SURGE, 3: Abilities.GRASSY_SURGE, 4: Abilities.GRASSY_SURGE }, - [Species.FLOETTE]: { 0: Abilities.GRASSY_SURGE, 1: Abilities.GRASSY_SURGE, 2: Abilities.GRASSY_SURGE, 3: Abilities.GRASSY_SURGE, 4: Abilities.GRASSY_SURGE }, - [Species.FLORGES]: { 0: Abilities.GRASSY_SURGE, 1: Abilities.GRASSY_SURGE, 2: Abilities.GRASSY_SURGE, 3: Abilities.GRASSY_SURGE, 4: Abilities.GRASSY_SURGE }, - [Species.SKIDDO]: { 0: Abilities.SEED_SOWER }, - [Species.GOGOAT]: { 0: Abilities.SEED_SOWER }, - [Species.PANCHAM]: { 0: Abilities.TECHNICIAN }, - [Species.PANGORO]: { 0: Abilities.FUR_COAT }, - [Species.FURFROU]: { 0: Abilities.FLUFFY, 1: Abilities.FLUFFY, 2: Abilities.FLUFFY, 3: Abilities.FLUFFY, 4: Abilities.FLUFFY, 5: Abilities.FLUFFY, 6: Abilities.FLUFFY, 7: Abilities.FLUFFY, 8: Abilities.FLUFFY, 9: Abilities.FLUFFY }, - [Species.ESPURR]: { 0: Abilities.PRANKSTER }, - [Species.MEOWSTIC]: { 0: Abilities.FUR_COAT, 1: Abilities.NEUROFORCE }, - [Species.HONEDGE]: { 0: Abilities.SHARPNESS }, - [Species.DOUBLADE]: { 0: Abilities.SHARPNESS }, - [Species.AEGISLASH]: { 0: Abilities.SHARPNESS, 1: Abilities.SHARPNESS }, - [Species.SPRITZEE]: { 0: Abilities.FUR_COAT }, - [Species.AROMATISSE]: { 0: Abilities.FUR_COAT }, - [Species.SWIRLIX]: { 0: Abilities.RIPEN }, - [Species.SLURPUFF]: { 0: Abilities.RIPEN }, - [Species.INKAY]: { 0: Abilities.SHADOW_SHIELD }, - [Species.MALAMAR]: { 0: Abilities.SHADOW_SHIELD }, - [Species.BINACLE]: { 0: Abilities.SAP_SIPPER }, - [Species.BARBARACLE]: { 0: Abilities.SAP_SIPPER }, - [Species.SKRELP]: { 0: Abilities.WATER_BUBBLE }, - [Species.DRAGALGE]: { 0: Abilities.DRAGONS_MAW }, - [Species.CLAUNCHER]: { 0: Abilities.PROTEAN }, - [Species.CLAWITZER]: { 0: Abilities.PROTEAN }, - [Species.HELIOPTILE]: { 0: Abilities.PROTEAN }, - [Species.HELIOLISK]: { 0: Abilities.PROTEAN }, - [Species.TYRUNT]: { 0: Abilities.SHEER_FORCE }, - [Species.TYRANTRUM]: { 0: Abilities.SHEER_FORCE }, - [Species.AMAURA]: { 0: Abilities.ICE_SCALES }, - [Species.AURORUS]: { 0: Abilities.ICE_SCALES }, - [Species.HAWLUCHA]: { 0: Abilities.MOXIE }, - [Species.DEDENNE]: { 0: Abilities.PIXILATE }, - [Species.CARBINK]: { 0: Abilities.SOLID_ROCK }, - [Species.GOOMY]: { 0: Abilities.REGENERATOR }, - [Species.SLIGGOO]: { 0: Abilities.POISON_HEAL }, - [Species.GOODRA]: { 0: Abilities.POISON_HEAL }, - [Species.HISUI_SLIGGOO]: { 0: Abilities.REGENERATOR }, - [Species.HISUI_GOODRA]: { 0: Abilities.REGENERATOR }, - [Species.KLEFKI]: { 0: Abilities.LEVITATE }, - [Species.PHANTUMP]: { 0: Abilities.SHADOW_TAG }, - [Species.TREVENANT]: { 0: Abilities.SHADOW_TAG }, - [Species.PUMPKABOO]: { 0: Abilities.ILLUMINATE, 1: Abilities.ADAPTABILITY, 2: Abilities.WELL_BAKED_BODY, 3: Abilities.SEED_SOWER }, - [Species.GOURGEIST]: { 0: Abilities.ILLUMINATE, 1: Abilities.ADAPTABILITY, 2: Abilities.WELL_BAKED_BODY, 3: Abilities.SEED_SOWER }, - [Species.BERGMITE]: { 0: Abilities.ICE_SCALES }, - [Species.AVALUGG]: { 0: Abilities.ICE_SCALES }, - [Species.HISUI_AVALUGG]: { 0: Abilities.ICE_SCALES }, - [Species.NOIBAT]: { 0: Abilities.CHEEK_POUCH }, - [Species.NOIVERN]: { 0: Abilities.PUNK_ROCK }, - [Species.XERNEAS]: { 0: Abilities.HARVEST, 1: Abilities.HARVEST }, - [Species.YVELTAL]: { 0: Abilities.SOUL_HEART }, - [Species.ZYGARDE]: { 0: Abilities.UNNERVE, 1: Abilities.MOXIE, 2: Abilities.UNNERVE, 3: Abilities.MOXIE, 4: Abilities.ADAPTABILITY, 5: Abilities.ADAPTABILITY }, - [Species.DIANCIE]: { 0: Abilities.SOLID_ROCK, 1: Abilities.PRISM_ARMOR }, - [Species.HOOPA]: { 0: Abilities.OPPORTUNIST, 1: Abilities.OPPORTUNIST }, - [Species.VOLCANION]: { 0: Abilities.NEUTRALIZING_GAS }, - [Species.ETERNAL_FLOETTE]: { 0: Abilities.MAGIC_GUARD }, + [SpeciesId.CHESPIN]: { 0: AbilityId.ROUGH_SKIN }, + [SpeciesId.QUILLADIN]: { 0: AbilityId.DAUNTLESS_SHIELD }, + [SpeciesId.CHESNAUGHT]: { 0: AbilityId.DAUNTLESS_SHIELD }, + [SpeciesId.FENNEKIN]: { 0: AbilityId.FLUFFY }, + [SpeciesId.BRAIXEN]: { 0: AbilityId.PSYCHIC_SURGE }, + [SpeciesId.DELPHOX]: { 0: AbilityId.PSYCHIC_SURGE }, + [SpeciesId.FROAKIE]: { 0: AbilityId.STAKEOUT, 1: AbilityId.STAKEOUT }, + [SpeciesId.FROGADIER]: { 0: AbilityId.STAKEOUT, 1: AbilityId.STAKEOUT }, + [SpeciesId.GRENINJA]: { 0: AbilityId.STAKEOUT, 1: AbilityId.STAKEOUT, 2: AbilityId.STAKEOUT }, + [SpeciesId.BUNNELBY]: { 0: AbilityId.INNER_FOCUS }, + [SpeciesId.DIGGERSBY]: { 0: AbilityId.THICK_FAT }, + [SpeciesId.FLETCHLING]: { 0: AbilityId.FLAME_BODY }, + [SpeciesId.FLETCHINDER]: { 0: AbilityId.MAGIC_GUARD }, + [SpeciesId.TALONFLAME]: { 0: AbilityId.MAGIC_GUARD }, + [SpeciesId.SCATTERBUG]: { 0: AbilityId.RUN_AWAY, 1: AbilityId.RUN_AWAY, 2: AbilityId.RUN_AWAY, 3: AbilityId.RUN_AWAY, 4: AbilityId.RUN_AWAY, 5: AbilityId.RUN_AWAY, 6: AbilityId.RUN_AWAY, 7: AbilityId.RUN_AWAY, 8: AbilityId.RUN_AWAY, 9: AbilityId.RUN_AWAY, 10: AbilityId.RUN_AWAY, 11: AbilityId.RUN_AWAY, 12: AbilityId.RUN_AWAY, 13: AbilityId.RUN_AWAY, 14: AbilityId.RUN_AWAY, 15: AbilityId.RUN_AWAY, 16: AbilityId.RUN_AWAY, 17: AbilityId.RUN_AWAY, 18: AbilityId.RUN_AWAY, 19: AbilityId.RUN_AWAY }, + [SpeciesId.SPEWPA]: { 0: AbilityId.COMPOUND_EYES, 1: AbilityId.COMPOUND_EYES, 2: AbilityId.COMPOUND_EYES, 3: AbilityId.COMPOUND_EYES, 4: AbilityId.COMPOUND_EYES, 5: AbilityId.COMPOUND_EYES, 6: AbilityId.COMPOUND_EYES, 7: AbilityId.COMPOUND_EYES, 8: AbilityId.COMPOUND_EYES, 9: AbilityId.COMPOUND_EYES, 10: AbilityId.COMPOUND_EYES, 11: AbilityId.COMPOUND_EYES, 12: AbilityId.COMPOUND_EYES, 13: AbilityId.COMPOUND_EYES, 14: AbilityId.COMPOUND_EYES, 15: AbilityId.COMPOUND_EYES, 16: AbilityId.COMPOUND_EYES, 17: AbilityId.COMPOUND_EYES, 18: AbilityId.COMPOUND_EYES, 19: AbilityId.COMPOUND_EYES }, + [SpeciesId.VIVILLON]: { 0: AbilityId.PRANKSTER, 1: AbilityId.PRANKSTER, 2: AbilityId.PRANKSTER, 3: AbilityId.PRANKSTER, 4: AbilityId.PRANKSTER, 5: AbilityId.PRANKSTER, 6: AbilityId.PRANKSTER, 7: AbilityId.PRANKSTER, 8: AbilityId.PRANKSTER, 9: AbilityId.PRANKSTER, 10: AbilityId.PRANKSTER, 11: AbilityId.PRANKSTER, 12: AbilityId.PRANKSTER, 13: AbilityId.PRANKSTER, 14: AbilityId.PRANKSTER, 15: AbilityId.PRANKSTER, 16: AbilityId.PRANKSTER, 17: AbilityId.PRANKSTER, 18: AbilityId.PRANKSTER, 19: AbilityId.PRANKSTER }, + [SpeciesId.LITLEO]: { 0: AbilityId.BEAST_BOOST }, + [SpeciesId.PYROAR]: { 0: AbilityId.BEAST_BOOST }, + [SpeciesId.FLABEBE]: { 0: AbilityId.GRASSY_SURGE, 1: AbilityId.GRASSY_SURGE, 2: AbilityId.GRASSY_SURGE, 3: AbilityId.GRASSY_SURGE, 4: AbilityId.GRASSY_SURGE }, + [SpeciesId.FLOETTE]: { 0: AbilityId.GRASSY_SURGE, 1: AbilityId.GRASSY_SURGE, 2: AbilityId.GRASSY_SURGE, 3: AbilityId.GRASSY_SURGE, 4: AbilityId.GRASSY_SURGE }, + [SpeciesId.FLORGES]: { 0: AbilityId.GRASSY_SURGE, 1: AbilityId.GRASSY_SURGE, 2: AbilityId.GRASSY_SURGE, 3: AbilityId.GRASSY_SURGE, 4: AbilityId.GRASSY_SURGE }, + [SpeciesId.SKIDDO]: { 0: AbilityId.SEED_SOWER }, + [SpeciesId.GOGOAT]: { 0: AbilityId.SEED_SOWER }, + [SpeciesId.PANCHAM]: { 0: AbilityId.TECHNICIAN }, + [SpeciesId.PANGORO]: { 0: AbilityId.FUR_COAT }, + [SpeciesId.FURFROU]: { 0: AbilityId.FLUFFY, 1: AbilityId.FLUFFY, 2: AbilityId.FLUFFY, 3: AbilityId.FLUFFY, 4: AbilityId.FLUFFY, 5: AbilityId.FLUFFY, 6: AbilityId.FLUFFY, 7: AbilityId.FLUFFY, 8: AbilityId.FLUFFY, 9: AbilityId.FLUFFY }, + [SpeciesId.ESPURR]: { 0: AbilityId.PRANKSTER }, + [SpeciesId.MEOWSTIC]: { 0: AbilityId.FUR_COAT, 1: AbilityId.NEUROFORCE }, + [SpeciesId.HONEDGE]: { 0: AbilityId.SHARPNESS }, + [SpeciesId.DOUBLADE]: { 0: AbilityId.SHARPNESS }, + [SpeciesId.AEGISLASH]: { 0: AbilityId.SHARPNESS, 1: AbilityId.SHARPNESS }, + [SpeciesId.SPRITZEE]: { 0: AbilityId.FUR_COAT }, + [SpeciesId.AROMATISSE]: { 0: AbilityId.FUR_COAT }, + [SpeciesId.SWIRLIX]: { 0: AbilityId.RIPEN }, + [SpeciesId.SLURPUFF]: { 0: AbilityId.RIPEN }, + [SpeciesId.INKAY]: { 0: AbilityId.SHADOW_SHIELD }, + [SpeciesId.MALAMAR]: { 0: AbilityId.SHADOW_SHIELD }, + [SpeciesId.BINACLE]: { 0: AbilityId.SAP_SIPPER }, + [SpeciesId.BARBARACLE]: { 0: AbilityId.SAP_SIPPER }, + [SpeciesId.SKRELP]: { 0: AbilityId.WATER_BUBBLE }, + [SpeciesId.DRAGALGE]: { 0: AbilityId.DRAGONS_MAW }, + [SpeciesId.CLAUNCHER]: { 0: AbilityId.PROTEAN }, + [SpeciesId.CLAWITZER]: { 0: AbilityId.PROTEAN }, + [SpeciesId.HELIOPTILE]: { 0: AbilityId.PROTEAN }, + [SpeciesId.HELIOLISK]: { 0: AbilityId.PROTEAN }, + [SpeciesId.TYRUNT]: { 0: AbilityId.SHEER_FORCE }, + [SpeciesId.TYRANTRUM]: { 0: AbilityId.SHEER_FORCE }, + [SpeciesId.AMAURA]: { 0: AbilityId.ICE_SCALES }, + [SpeciesId.AURORUS]: { 0: AbilityId.ICE_SCALES }, + [SpeciesId.HAWLUCHA]: { 0: AbilityId.MOXIE }, + [SpeciesId.DEDENNE]: { 0: AbilityId.PIXILATE }, + [SpeciesId.CARBINK]: { 0: AbilityId.SOLID_ROCK }, + [SpeciesId.GOOMY]: { 0: AbilityId.REGENERATOR }, + [SpeciesId.SLIGGOO]: { 0: AbilityId.POISON_HEAL }, + [SpeciesId.GOODRA]: { 0: AbilityId.POISON_HEAL }, + [SpeciesId.HISUI_SLIGGOO]: { 0: AbilityId.REGENERATOR }, + [SpeciesId.HISUI_GOODRA]: { 0: AbilityId.REGENERATOR }, + [SpeciesId.KLEFKI]: { 0: AbilityId.LEVITATE }, + [SpeciesId.PHANTUMP]: { 0: AbilityId.SHADOW_TAG }, + [SpeciesId.TREVENANT]: { 0: AbilityId.SHADOW_TAG }, + [SpeciesId.PUMPKABOO]: { 0: AbilityId.ILLUMINATE, 1: AbilityId.ADAPTABILITY, 2: AbilityId.WELL_BAKED_BODY, 3: AbilityId.SEED_SOWER }, + [SpeciesId.GOURGEIST]: { 0: AbilityId.ILLUMINATE, 1: AbilityId.ADAPTABILITY, 2: AbilityId.WELL_BAKED_BODY, 3: AbilityId.SEED_SOWER }, + [SpeciesId.BERGMITE]: { 0: AbilityId.ICE_SCALES }, + [SpeciesId.AVALUGG]: { 0: AbilityId.ICE_SCALES }, + [SpeciesId.HISUI_AVALUGG]: { 0: AbilityId.ICE_SCALES }, + [SpeciesId.NOIBAT]: { 0: AbilityId.CHEEK_POUCH }, + [SpeciesId.NOIVERN]: { 0: AbilityId.PUNK_ROCK }, + [SpeciesId.XERNEAS]: { 0: AbilityId.HARVEST, 1: AbilityId.HARVEST }, + [SpeciesId.YVELTAL]: { 0: AbilityId.SOUL_HEART }, + [SpeciesId.ZYGARDE]: { 0: AbilityId.UNNERVE, 1: AbilityId.MOXIE, 2: AbilityId.UNNERVE, 3: AbilityId.MOXIE, 4: AbilityId.ADAPTABILITY, 5: AbilityId.ADAPTABILITY }, + [SpeciesId.DIANCIE]: { 0: AbilityId.SOLID_ROCK, 1: AbilityId.PRISM_ARMOR }, + [SpeciesId.HOOPA]: { 0: AbilityId.OPPORTUNIST, 1: AbilityId.OPPORTUNIST }, + [SpeciesId.VOLCANION]: { 0: AbilityId.NEUTRALIZING_GAS }, + [SpeciesId.ETERNAL_FLOETTE]: { 0: AbilityId.MAGIC_GUARD }, - [Species.ROWLET]: { 0: Abilities.WIND_RIDER }, - [Species.DARTRIX]: { 0: Abilities.WIND_RIDER }, - [Species.DECIDUEYE]: { 0: Abilities.SNIPER }, - [Species.HISUI_DECIDUEYE]: { 0: Abilities.SNIPER }, - [Species.LITTEN]: { 0: Abilities.OPPORTUNIST }, - [Species.TORRACAT]: { 0: Abilities.OPPORTUNIST }, - [Species.INCINEROAR]: { 0: Abilities.OPPORTUNIST }, - [Species.POPPLIO]: { 0: Abilities.PUNK_ROCK }, - [Species.BRIONNE]: { 0: Abilities.PUNK_ROCK }, - [Species.PRIMARINA]: { 0: Abilities.PUNK_ROCK }, - [Species.PIKIPEK]: { 0: Abilities.TECHNICIAN }, - [Species.TRUMBEAK]: { 0: Abilities.TECHNICIAN }, - [Species.TOUCANNON]: { 0: Abilities.TECHNICIAN }, - [Species.YUNGOOS]: { 0: Abilities.TOUGH_CLAWS }, - [Species.GUMSHOOS]: { 0: Abilities.TOUGH_CLAWS }, - [Species.GRUBBIN]: { 0: Abilities.SHIELD_DUST }, - [Species.CHARJABUG]: { 0: Abilities.POWER_SPOT }, - [Species.VIKAVOLT]: { 0: Abilities.SPEED_BOOST }, - [Species.CRABRAWLER]: { 0: Abilities.WATER_BUBBLE }, - [Species.CRABOMINABLE]: { 0: Abilities.WATER_BUBBLE }, - [Species.ORICORIO]: { 0: Abilities.ADAPTABILITY, 1: Abilities.ADAPTABILITY, 2: Abilities.ADAPTABILITY, 3: Abilities.ADAPTABILITY }, - [Species.CUTIEFLY]: { 0: Abilities.PICKUP }, - [Species.RIBOMBEE]: { 0: Abilities.PICKUP }, - [Species.ROCKRUFF]: { 0: Abilities.PICKUP, 1: Abilities.PICKUP }, - [Species.LYCANROC]: { 0: Abilities.STURDY, 1: Abilities.INTIMIDATE, 2: Abilities.STAKEOUT }, - [Species.WISHIWASHI]: { 0: Abilities.REGENERATOR, 1: Abilities.REGENERATOR }, - [Species.MAREANIE]: { 0: Abilities.TOXIC_DEBRIS }, - [Species.TOXAPEX]: { 0: Abilities.TOXIC_DEBRIS }, - [Species.MUDBRAY]: { 0: Abilities.SAP_SIPPER }, - [Species.MUDSDALE]: { 0: Abilities.SAP_SIPPER }, - [Species.DEWPIDER]: { 0: Abilities.TINTED_LENS }, - [Species.ARAQUANID]: { 0: Abilities.TINTED_LENS }, - [Species.FOMANTIS]: { 0: Abilities.SHARPNESS }, - [Species.LURANTIS]: { 0: Abilities.SHARPNESS }, - [Species.MORELULL]: { 0: Abilities.TRIAGE }, - [Species.SHIINOTIC]: { 0: Abilities.TRIAGE }, - [Species.SALANDIT]: { 0: Abilities.PICKUP }, - [Species.SALAZZLE]: { 0: Abilities.DRAGONS_MAW }, - [Species.STUFFUL]: { 0: Abilities.SCRAPPY }, - [Species.BEWEAR]: { 0: Abilities.SCRAPPY }, - [Species.BOUNSWEET]: { 0: Abilities.SIMPLE }, - [Species.STEENEE]: { 0: Abilities.SIMPLE }, - [Species.TSAREENA]: { 0: Abilities.MOXIE }, - [Species.COMFEY]: { 0: Abilities.FRIEND_GUARD }, - [Species.ORANGURU]: { 0: Abilities.POWER_SPOT }, - [Species.PASSIMIAN]: { 0: Abilities.LIBERO }, - [Species.WIMPOD]: { 0: Abilities.REGENERATOR }, - [Species.GOLISOPOD]: { 0: Abilities.REGENERATOR }, - [Species.SANDYGAST]: { 0: Abilities.SAND_SPIT }, - [Species.PALOSSAND]: { 0: Abilities.SAND_SPIT }, - [Species.PYUKUMUKU]: { 0: Abilities.PURIFYING_SALT }, - [Species.TYPE_NULL]: { 0: Abilities.CLEAR_BODY }, - [Species.SILVALLY]: { 0: Abilities.ADAPTABILITY, 1: Abilities.ADAPTABILITY, 2: Abilities.ADAPTABILITY, 3: Abilities.ADAPTABILITY, 4: Abilities.ADAPTABILITY, 5: Abilities.ADAPTABILITY, 6: Abilities.ADAPTABILITY, 7: Abilities.ADAPTABILITY, 8: Abilities.ADAPTABILITY, 9: Abilities.ADAPTABILITY, 10: Abilities.ADAPTABILITY, 11: Abilities.ADAPTABILITY, 12: Abilities.ADAPTABILITY, 13: Abilities.ADAPTABILITY, 14: Abilities.ADAPTABILITY, 15: Abilities.ADAPTABILITY, 16: Abilities.ADAPTABILITY, 17: Abilities.ADAPTABILITY }, - [Species.MINIOR]: { 0: Abilities.STURDY, 1: Abilities.STURDY, 2: Abilities.STURDY, 3: Abilities.STURDY, 4: Abilities.STURDY, 5: Abilities.STURDY, 6: Abilities.STURDY, 7: Abilities.AERILATE, 8: Abilities.AERILATE, 9: Abilities.AERILATE, 10: Abilities.AERILATE, 11: Abilities.AERILATE, 12: Abilities.AERILATE, 13: Abilities.AERILATE }, - [Species.KOMALA]: { 0: Abilities.GUTS }, - [Species.TURTONATOR]: { 0: Abilities.DAUNTLESS_SHIELD }, - [Species.TOGEDEMARU]: { 0: Abilities.ROUGH_SKIN }, - [Species.MIMIKYU]: { 0: Abilities.TOUGH_CLAWS, 1: Abilities.TOUGH_CLAWS }, - [Species.BRUXISH]: { 0: Abilities.MULTISCALE }, - [Species.DRAMPA]: { 0: Abilities.THICK_FAT }, - [Species.DHELMISE]: { 0: Abilities.WATER_BUBBLE }, - [Species.JANGMO_O]: { 0: Abilities.DAUNTLESS_SHIELD }, - [Species.HAKAMO_O]: { 0: Abilities.DAUNTLESS_SHIELD }, - [Species.KOMMO_O]: { 0: Abilities.DAUNTLESS_SHIELD }, - [Species.TAPU_KOKO]: { 0: Abilities.DAUNTLESS_SHIELD }, - [Species.TAPU_LELE]: { 0: Abilities.BERSERK }, - [Species.TAPU_BULU]: { 0: Abilities.FLOWER_VEIL }, - [Species.TAPU_FINI]: { 0: Abilities.FAIRY_AURA }, - [Species.COSMOG]: { 0: Abilities.PICKUP }, - [Species.COSMOEM]: { 0: Abilities.POWER_SPOT }, - [Species.SOLGALEO]: { 0: Abilities.BEAST_BOOST }, - [Species.LUNALA]: { 0: Abilities.BEAST_BOOST }, - [Species.NIHILEGO]: { 0: Abilities.LEVITATE }, - [Species.BUZZWOLE]: { 0: Abilities.MOXIE }, - [Species.PHEROMOSA]: { 0: Abilities.TINTED_LENS }, - [Species.XURKITREE]: { 0: Abilities.TRANSISTOR }, - [Species.CELESTEELA]: { 0: Abilities.HEATPROOF }, - [Species.KARTANA]: { 0: Abilities.TECHNICIAN }, - [Species.GUZZLORD]: { 0: Abilities.POISON_HEAL }, - [Species.NECROZMA]: { 0: Abilities.BEAST_BOOST, 1: Abilities.FULL_METAL_BODY, 2: Abilities.SHADOW_SHIELD, 3: Abilities.UNNERVE }, - [Species.MAGEARNA]: { 0: Abilities.STEELY_SPIRIT, 1: Abilities.STEELY_SPIRIT }, - [Species.MARSHADOW]: { 0: Abilities.IRON_FIST }, - [Species.POIPOLE]: { 0: Abilities.LEVITATE }, - [Species.NAGANADEL]: { 0: Abilities.LEVITATE }, - [Species.STAKATAKA]: { 0: Abilities.SOLID_ROCK }, - [Species.BLACEPHALON]: { 0: Abilities.MAGIC_GUARD }, - [Species.ZERAORA]: { 0: Abilities.TOUGH_CLAWS }, - [Species.MELTAN]: { 0: Abilities.HEATPROOF }, - [Species.MELMETAL]: { 0: Abilities.HEATPROOF, 1: Abilities.FULL_METAL_BODY }, - [Species.ALOLA_RATTATA]: { 0: Abilities.ADAPTABILITY }, - [Species.ALOLA_RATICATE]: { 0: Abilities.ADAPTABILITY }, - [Species.ALOLA_SANDSHREW]: { 0: Abilities.ICE_SCALES }, - [Species.ALOLA_SANDSLASH]: { 0: Abilities.ICE_SCALES }, - [Species.ALOLA_VULPIX]: { 0: Abilities.ICE_BODY }, - [Species.ALOLA_NINETALES]: { 0: Abilities.ICE_BODY }, - [Species.ALOLA_DIGLETT]: { 0: Abilities.STURDY }, - [Species.ALOLA_DUGTRIO]: { 0: Abilities.STURDY }, - [Species.ALOLA_MEOWTH]: { 0: Abilities.DARK_AURA }, - [Species.ALOLA_PERSIAN]: { 0: Abilities.DARK_AURA }, - [Species.ALOLA_GEODUDE]: { 0: Abilities.DRY_SKIN }, - [Species.ALOLA_GRAVELER]: { 0: Abilities.DRY_SKIN }, - [Species.ALOLA_GOLEM]: { 0: Abilities.DRY_SKIN }, - [Species.ALOLA_GRIMER]: { 0: Abilities.TOXIC_DEBRIS }, - [Species.ALOLA_MUK]: { 0: Abilities.TOXIC_DEBRIS }, + [SpeciesId.ROWLET]: { 0: AbilityId.WIND_RIDER }, + [SpeciesId.DARTRIX]: { 0: AbilityId.WIND_RIDER }, + [SpeciesId.DECIDUEYE]: { 0: AbilityId.SNIPER }, + [SpeciesId.HISUI_DECIDUEYE]: { 0: AbilityId.SNIPER }, + [SpeciesId.LITTEN]: { 0: AbilityId.OPPORTUNIST }, + [SpeciesId.TORRACAT]: { 0: AbilityId.OPPORTUNIST }, + [SpeciesId.INCINEROAR]: { 0: AbilityId.OPPORTUNIST }, + [SpeciesId.POPPLIO]: { 0: AbilityId.PUNK_ROCK }, + [SpeciesId.BRIONNE]: { 0: AbilityId.PUNK_ROCK }, + [SpeciesId.PRIMARINA]: { 0: AbilityId.PUNK_ROCK }, + [SpeciesId.PIKIPEK]: { 0: AbilityId.TECHNICIAN }, + [SpeciesId.TRUMBEAK]: { 0: AbilityId.TECHNICIAN }, + [SpeciesId.TOUCANNON]: { 0: AbilityId.TECHNICIAN }, + [SpeciesId.YUNGOOS]: { 0: AbilityId.TOUGH_CLAWS }, + [SpeciesId.GUMSHOOS]: { 0: AbilityId.TOUGH_CLAWS }, + [SpeciesId.GRUBBIN]: { 0: AbilityId.SHIELD_DUST }, + [SpeciesId.CHARJABUG]: { 0: AbilityId.POWER_SPOT }, + [SpeciesId.VIKAVOLT]: { 0: AbilityId.SPEED_BOOST }, + [SpeciesId.CRABRAWLER]: { 0: AbilityId.WATER_BUBBLE }, + [SpeciesId.CRABOMINABLE]: { 0: AbilityId.WATER_BUBBLE }, + [SpeciesId.ORICORIO]: { 0: AbilityId.ADAPTABILITY, 1: AbilityId.ADAPTABILITY, 2: AbilityId.ADAPTABILITY, 3: AbilityId.ADAPTABILITY }, + [SpeciesId.CUTIEFLY]: { 0: AbilityId.PICKUP }, + [SpeciesId.RIBOMBEE]: { 0: AbilityId.PICKUP }, + [SpeciesId.ROCKRUFF]: { 0: AbilityId.PICKUP, 1: AbilityId.PICKUP }, + [SpeciesId.LYCANROC]: { 0: AbilityId.STURDY, 1: AbilityId.INTIMIDATE, 2: AbilityId.STAKEOUT }, + [SpeciesId.WISHIWASHI]: { 0: AbilityId.REGENERATOR, 1: AbilityId.REGENERATOR }, + [SpeciesId.MAREANIE]: { 0: AbilityId.TOXIC_DEBRIS }, + [SpeciesId.TOXAPEX]: { 0: AbilityId.TOXIC_DEBRIS }, + [SpeciesId.MUDBRAY]: { 0: AbilityId.SAP_SIPPER }, + [SpeciesId.MUDSDALE]: { 0: AbilityId.SAP_SIPPER }, + [SpeciesId.DEWPIDER]: { 0: AbilityId.TINTED_LENS }, + [SpeciesId.ARAQUANID]: { 0: AbilityId.TINTED_LENS }, + [SpeciesId.FOMANTIS]: { 0: AbilityId.SHARPNESS }, + [SpeciesId.LURANTIS]: { 0: AbilityId.SHARPNESS }, + [SpeciesId.MORELULL]: { 0: AbilityId.TRIAGE }, + [SpeciesId.SHIINOTIC]: { 0: AbilityId.TRIAGE }, + [SpeciesId.SALANDIT]: { 0: AbilityId.PICKUP }, + [SpeciesId.SALAZZLE]: { 0: AbilityId.DRAGONS_MAW }, + [SpeciesId.STUFFUL]: { 0: AbilityId.SCRAPPY }, + [SpeciesId.BEWEAR]: { 0: AbilityId.SCRAPPY }, + [SpeciesId.BOUNSWEET]: { 0: AbilityId.SIMPLE }, + [SpeciesId.STEENEE]: { 0: AbilityId.SIMPLE }, + [SpeciesId.TSAREENA]: { 0: AbilityId.MOXIE }, + [SpeciesId.COMFEY]: { 0: AbilityId.FRIEND_GUARD }, + [SpeciesId.ORANGURU]: { 0: AbilityId.POWER_SPOT }, + [SpeciesId.PASSIMIAN]: { 0: AbilityId.LIBERO }, + [SpeciesId.WIMPOD]: { 0: AbilityId.REGENERATOR }, + [SpeciesId.GOLISOPOD]: { 0: AbilityId.REGENERATOR }, + [SpeciesId.SANDYGAST]: { 0: AbilityId.SAND_SPIT }, + [SpeciesId.PALOSSAND]: { 0: AbilityId.SAND_SPIT }, + [SpeciesId.PYUKUMUKU]: { 0: AbilityId.PURIFYING_SALT }, + [SpeciesId.TYPE_NULL]: { 0: AbilityId.CLEAR_BODY }, + [SpeciesId.SILVALLY]: { 0: AbilityId.ADAPTABILITY, 1: AbilityId.ADAPTABILITY, 2: AbilityId.ADAPTABILITY, 3: AbilityId.ADAPTABILITY, 4: AbilityId.ADAPTABILITY, 5: AbilityId.ADAPTABILITY, 6: AbilityId.ADAPTABILITY, 7: AbilityId.ADAPTABILITY, 8: AbilityId.ADAPTABILITY, 9: AbilityId.ADAPTABILITY, 10: AbilityId.ADAPTABILITY, 11: AbilityId.ADAPTABILITY, 12: AbilityId.ADAPTABILITY, 13: AbilityId.ADAPTABILITY, 14: AbilityId.ADAPTABILITY, 15: AbilityId.ADAPTABILITY, 16: AbilityId.ADAPTABILITY, 17: AbilityId.ADAPTABILITY }, + [SpeciesId.MINIOR]: { 0: AbilityId.STURDY, 1: AbilityId.STURDY, 2: AbilityId.STURDY, 3: AbilityId.STURDY, 4: AbilityId.STURDY, 5: AbilityId.STURDY, 6: AbilityId.STURDY, 7: AbilityId.AERILATE, 8: AbilityId.AERILATE, 9: AbilityId.AERILATE, 10: AbilityId.AERILATE, 11: AbilityId.AERILATE, 12: AbilityId.AERILATE, 13: AbilityId.AERILATE }, + [SpeciesId.KOMALA]: { 0: AbilityId.GUTS }, + [SpeciesId.TURTONATOR]: { 0: AbilityId.DAUNTLESS_SHIELD }, + [SpeciesId.TOGEDEMARU]: { 0: AbilityId.ROUGH_SKIN }, + [SpeciesId.MIMIKYU]: { 0: AbilityId.TOUGH_CLAWS, 1: AbilityId.TOUGH_CLAWS }, + [SpeciesId.BRUXISH]: { 0: AbilityId.MULTISCALE }, + [SpeciesId.DRAMPA]: { 0: AbilityId.THICK_FAT }, + [SpeciesId.DHELMISE]: { 0: AbilityId.WATER_BUBBLE }, + [SpeciesId.JANGMO_O]: { 0: AbilityId.DAUNTLESS_SHIELD }, + [SpeciesId.HAKAMO_O]: { 0: AbilityId.DAUNTLESS_SHIELD }, + [SpeciesId.KOMMO_O]: { 0: AbilityId.DAUNTLESS_SHIELD }, + [SpeciesId.TAPU_KOKO]: { 0: AbilityId.DAUNTLESS_SHIELD }, + [SpeciesId.TAPU_LELE]: { 0: AbilityId.BERSERK }, + [SpeciesId.TAPU_BULU]: { 0: AbilityId.FLOWER_VEIL }, + [SpeciesId.TAPU_FINI]: { 0: AbilityId.FAIRY_AURA }, + [SpeciesId.COSMOG]: { 0: AbilityId.PICKUP }, + [SpeciesId.COSMOEM]: { 0: AbilityId.POWER_SPOT }, + [SpeciesId.SOLGALEO]: { 0: AbilityId.BEAST_BOOST }, + [SpeciesId.LUNALA]: { 0: AbilityId.BEAST_BOOST }, + [SpeciesId.NIHILEGO]: { 0: AbilityId.LEVITATE }, + [SpeciesId.BUZZWOLE]: { 0: AbilityId.MOXIE }, + [SpeciesId.PHEROMOSA]: { 0: AbilityId.TINTED_LENS }, + [SpeciesId.XURKITREE]: { 0: AbilityId.TRANSISTOR }, + [SpeciesId.CELESTEELA]: { 0: AbilityId.HEATPROOF }, + [SpeciesId.KARTANA]: { 0: AbilityId.TECHNICIAN }, + [SpeciesId.GUZZLORD]: { 0: AbilityId.POISON_HEAL }, + [SpeciesId.NECROZMA]: { 0: AbilityId.BEAST_BOOST, 1: AbilityId.FULL_METAL_BODY, 2: AbilityId.SHADOW_SHIELD, 3: AbilityId.UNNERVE }, + [SpeciesId.MAGEARNA]: { 0: AbilityId.STEELY_SPIRIT, 1: AbilityId.STEELY_SPIRIT }, + [SpeciesId.MARSHADOW]: { 0: AbilityId.IRON_FIST }, + [SpeciesId.POIPOLE]: { 0: AbilityId.LEVITATE }, + [SpeciesId.NAGANADEL]: { 0: AbilityId.LEVITATE }, + [SpeciesId.STAKATAKA]: { 0: AbilityId.SOLID_ROCK }, + [SpeciesId.BLACEPHALON]: { 0: AbilityId.MAGIC_GUARD }, + [SpeciesId.ZERAORA]: { 0: AbilityId.TOUGH_CLAWS }, + [SpeciesId.MELTAN]: { 0: AbilityId.HEATPROOF }, + [SpeciesId.MELMETAL]: { 0: AbilityId.HEATPROOF, 1: AbilityId.FULL_METAL_BODY }, + [SpeciesId.ALOLA_RATTATA]: { 0: AbilityId.ADAPTABILITY }, + [SpeciesId.ALOLA_RATICATE]: { 0: AbilityId.ADAPTABILITY }, + [SpeciesId.ALOLA_SANDSHREW]: { 0: AbilityId.ICE_SCALES }, + [SpeciesId.ALOLA_SANDSLASH]: { 0: AbilityId.ICE_SCALES }, + [SpeciesId.ALOLA_VULPIX]: { 0: AbilityId.ICE_BODY }, + [SpeciesId.ALOLA_NINETALES]: { 0: AbilityId.ICE_BODY }, + [SpeciesId.ALOLA_DIGLETT]: { 0: AbilityId.STURDY }, + [SpeciesId.ALOLA_DUGTRIO]: { 0: AbilityId.STURDY }, + [SpeciesId.ALOLA_MEOWTH]: { 0: AbilityId.DARK_AURA }, + [SpeciesId.ALOLA_PERSIAN]: { 0: AbilityId.DARK_AURA }, + [SpeciesId.ALOLA_GEODUDE]: { 0: AbilityId.DRY_SKIN }, + [SpeciesId.ALOLA_GRAVELER]: { 0: AbilityId.DRY_SKIN }, + [SpeciesId.ALOLA_GOLEM]: { 0: AbilityId.DRY_SKIN }, + [SpeciesId.ALOLA_GRIMER]: { 0: AbilityId.TOXIC_DEBRIS }, + [SpeciesId.ALOLA_MUK]: { 0: AbilityId.TOXIC_DEBRIS }, - [Species.GROOKEY]: { 0: Abilities.PICKPOCKET }, - [Species.THWACKEY]: { 0: Abilities.PICKPOCKET }, - [Species.RILLABOOM]: { 0: Abilities.GRASS_PELT, 1: Abilities.GRASS_PELT }, - [Species.SCORBUNNY]: { 0: Abilities.SHEER_FORCE }, - [Species.RABOOT]: { 0: Abilities.SHEER_FORCE }, - [Species.CINDERACE]: { 0: Abilities.NO_GUARD, 1: Abilities.NO_GUARD }, - [Species.SOBBLE]: { 0: Abilities.SUPER_LUCK }, - [Species.DRIZZILE]: { 0: Abilities.SUPER_LUCK }, - [Species.INTELEON]: { 0: Abilities.SUPER_LUCK, 1: Abilities.SUPER_LUCK }, - [Species.SKWOVET]: { 0: Abilities.HARVEST }, - [Species.GREEDENT]: { 0: Abilities.HARVEST }, - [Species.ROOKIDEE]: { 0: Abilities.GALE_WINGS }, - [Species.CORVISQUIRE]: { 0: Abilities.GALE_WINGS }, - [Species.CORVIKNIGHT]: { 0: Abilities.IRON_BARBS, 1: Abilities.IRON_BARBS }, - [Species.BLIPBUG]: { 0: Abilities.RUN_AWAY }, - [Species.DOTTLER]: { 0: Abilities.PSYCHIC_SURGE }, - [Species.ORBEETLE]: { 0: Abilities.PSYCHIC_SURGE, 1: Abilities.PSYCHIC_SURGE }, - [Species.NICKIT]: { 0: Abilities.MAGICIAN }, - [Species.THIEVUL]: { 0: Abilities.MAGICIAN }, - [Species.GOSSIFLEUR]: { 0: Abilities.SEED_SOWER }, - [Species.ELDEGOSS]: { 0: Abilities.GRASSY_SURGE }, - [Species.WOOLOO]: { 0: Abilities.SCRAPPY }, - [Species.DUBWOOL]: { 0: Abilities.SCRAPPY }, - [Species.CHEWTLE]: { 0: Abilities.SOLID_ROCK }, - [Species.DREDNAW]: { 0: Abilities.SOLID_ROCK, 1: Abilities.SOLID_ROCK }, - [Species.YAMPER]: { 0: Abilities.PICKUP }, - [Species.BOLTUND]: { 0: Abilities.SHEER_FORCE }, - [Species.ROLYCOLY]: { 0: Abilities.SOLID_ROCK }, - [Species.CARKOL]: { 0: Abilities.SOLID_ROCK }, - [Species.COALOSSAL]: { 0: Abilities.SOLID_ROCK, 1: Abilities.SOLID_ROCK }, - [Species.APPLIN]: { 0: Abilities.STURDY }, - [Species.FLAPPLE]: { 0: Abilities.NO_GUARD, 1: Abilities.NO_GUARD }, - [Species.APPLETUN]: { 0: Abilities.WELL_BAKED_BODY, 1: Abilities.WELL_BAKED_BODY }, - [Species.DIPPLIN]: { 0: Abilities.PARENTAL_BOND }, - [Species.HYDRAPPLE]: { 0: Abilities.PARENTAL_BOND }, - [Species.SILICOBRA]: { 0: Abilities.SAND_RUSH }, - [Species.SANDACONDA]: { 0: Abilities.SAND_RUSH, 1: Abilities.SAND_RUSH }, - [Species.CRAMORANT]: { 0: Abilities.LIGHTNING_ROD, 1: Abilities.LIGHTNING_ROD, 2: Abilities.LIGHTNING_ROD }, - [Species.ARROKUDA]: { 0: Abilities.SPEED_BOOST }, - [Species.BARRASKEWDA]: { 0: Abilities.INTIMIDATE }, - [Species.TOXEL]: { 0: Abilities.ELECTRIC_SURGE }, - [Species.TOXTRICITY]: { 0: Abilities.ELECTRIC_SURGE, 1: Abilities.ELECTRIC_SURGE, 2: Abilities.ELECTRIC_SURGE }, - [Species.SIZZLIPEDE]: { 0: Abilities.HUSTLE }, - [Species.CENTISKORCH]: { 0: Abilities.HUSTLE, 1: Abilities.HUSTLE }, - [Species.CLOBBOPUS]: { 0: Abilities.WATER_BUBBLE }, - [Species.GRAPPLOCT]: { 0: Abilities.WATER_BUBBLE }, - [Species.SINISTEA]: { 0: Abilities.SHADOW_SHIELD, 1: Abilities.SHADOW_SHIELD }, - [Species.POLTEAGEIST]: { 0: Abilities.SHADOW_SHIELD, 1: Abilities.SHADOW_SHIELD }, - [Species.HATENNA]: { 0: Abilities.FAIRY_AURA }, - [Species.HATTREM]: { 0: Abilities.FAIRY_AURA }, - [Species.HATTERENE]: { 0: Abilities.FAIRY_AURA, 1: Abilities.FAIRY_AURA }, - [Species.IMPIDIMP]: { 0: Abilities.INTIMIDATE }, - [Species.MORGREM]: { 0: Abilities.INTIMIDATE }, - [Species.GRIMMSNARL]: { 0: Abilities.INTIMIDATE, 1: Abilities.INTIMIDATE }, - [Species.MILCERY]: { 0: Abilities.REGENERATOR }, - [Species.ALCREMIE]: { 0: Abilities.REGENERATOR, 1: Abilities.REGENERATOR, 2: Abilities.REGENERATOR, 3: Abilities.REGENERATOR, 4: Abilities.REGENERATOR, 5: Abilities.REGENERATOR, 6: Abilities.REGENERATOR, 7: Abilities.REGENERATOR, 8: Abilities.REGENERATOR, 9: Abilities.REGENERATOR }, - [Species.FALINKS]: { 0: Abilities.DAUNTLESS_SHIELD }, - [Species.PINCURCHIN]: { 0: Abilities.ELECTROMORPHOSIS }, - [Species.SNOM]: { 0: Abilities.SNOW_WARNING }, - [Species.FROSMOTH]: { 0: Abilities.SNOW_WARNING }, - [Species.STONJOURNER]: { 0: Abilities.STURDY }, - [Species.EISCUE]: { 0: Abilities.ICE_SCALES, 1: Abilities.ICE_SCALES }, - [Species.INDEEDEE]: { 0: Abilities.HOSPITALITY, 1: Abilities.FRIEND_GUARD }, - [Species.MORPEKO]: { 0: Abilities.MOODY, 1: Abilities.MOODY }, - [Species.CUFANT]: { 0: Abilities.EARTH_EATER }, - [Species.COPPERAJAH]: { 0: Abilities.EARTH_EATER, 1: Abilities.EARTH_EATER }, - [Species.DRACOZOLT]: { 0: Abilities.NO_GUARD }, - [Species.ARCTOZOLT]: { 0: Abilities.WATER_ABSORB }, - [Species.DRACOVISH]: { 0: Abilities.THERMAL_EXCHANGE }, - [Species.ARCTOVISH]: { 0: Abilities.STRONG_JAW }, - [Species.DURALUDON]: { 0: Abilities.FILTER, 1: Abilities.UNAWARE }, - [Species.ARCHALUDON]: { 0: Abilities.TRANSISTOR }, - [Species.DREEPY]: { 0: Abilities.TECHNICIAN }, - [Species.DRAKLOAK]: { 0: Abilities.PARENTAL_BOND }, - [Species.DRAGAPULT]: { 0: Abilities.PARENTAL_BOND }, - [Species.ZACIAN]: { 0: Abilities.UNNERVE, 1: Abilities.UNNERVE }, - [Species.ZAMAZENTA]: { 0: Abilities.UNNERVE, 1: Abilities.UNNERVE }, - [Species.ETERNATUS]: { 0: Abilities.NEUTRALIZING_GAS, 1: Abilities.NEUTRALIZING_GAS }, - [Species.KUBFU]: { 0: Abilities.IRON_FIST }, - [Species.URSHIFU]: { 0: Abilities.IRON_FIST, 1: Abilities.IRON_FIST, 2: Abilities.IRON_FIST, 3: Abilities.IRON_FIST }, - [Species.ZARUDE]: { 0: Abilities.TOUGH_CLAWS, 1: Abilities.TOUGH_CLAWS }, - [Species.REGIELEKI]: { 0: Abilities.ELECTRIC_SURGE }, - [Species.REGIDRAGO]: { 0: Abilities.MULTISCALE }, - [Species.GLASTRIER]: { 0: Abilities.FILTER }, - [Species.SPECTRIER]: { 0: Abilities.DAZZLING }, - [Species.CALYREX]: { 0: Abilities.HARVEST, 1: Abilities.FILTER, 2: Abilities.DAZZLING }, - [Species.ENAMORUS]: { 0: Abilities.FAIRY_AURA, 1: Abilities.FAIRY_AURA }, - [Species.GALAR_MEOWTH]: { 0: Abilities.UNBURDEN }, - [Species.PERRSERKER]: { 0: Abilities.UNBURDEN }, - [Species.GALAR_PONYTA]: { 0: Abilities.CHILLING_NEIGH }, - [Species.GALAR_RAPIDASH]: { 0: Abilities.CHILLING_NEIGH }, - [Species.GALAR_SLOWPOKE]: { 0: Abilities.OBLIVIOUS }, - [Species.GALAR_SLOWBRO]: { 0: Abilities.NEUROFORCE }, - [Species.GALAR_SLOWKING]: { 0: Abilities.INTIMIDATE }, - [Species.GALAR_FARFETCHD]: { 0: Abilities.STAKEOUT }, - [Species.SIRFETCHD]: { 0: Abilities.INTREPID_SWORD }, - [Species.GALAR_ARTICUNO]: { 0: Abilities.SERENE_GRACE }, - [Species.GALAR_ZAPDOS]: { 0: Abilities.TOUGH_CLAWS }, - [Species.GALAR_MOLTRES]: { 0: Abilities.DARK_AURA }, - [Species.GALAR_CORSOLA]: { 0: Abilities.SHADOW_SHIELD }, - [Species.CURSOLA]: { 0: Abilities.SHADOW_SHIELD }, - [Species.GALAR_ZIGZAGOON]: { 0: Abilities.POISON_HEAL }, - [Species.GALAR_LINOONE]: { 0: Abilities.POISON_HEAL }, - [Species.OBSTAGOON]: { 0: Abilities.POISON_HEAL }, - [Species.GALAR_DARUMAKA]: { 0: Abilities.FLASH_FIRE }, - [Species.GALAR_DARMANITAN]: { 0: Abilities.FLASH_FIRE, 1: Abilities.FLASH_FIRE }, - [Species.GALAR_YAMASK]: { 0: Abilities.TABLETS_OF_RUIN }, - [Species.RUNERIGUS]: { 0: Abilities.TABLETS_OF_RUIN }, - [Species.GALAR_STUNFISK]: { 0: Abilities.ARENA_TRAP }, - [Species.HISUI_GROWLITHE]: { 0: Abilities.RECKLESS }, - [Species.HISUI_ARCANINE]: { 0: Abilities.RECKLESS }, - [Species.HISUI_VOLTORB]: { 0: Abilities.TRANSISTOR }, - [Species.HISUI_ELECTRODE]: { 0: Abilities.TRANSISTOR }, - [Species.HISUI_QWILFISH]: { 0: Abilities.MERCILESS }, - [Species.OVERQWIL]: { 0: Abilities.MERCILESS }, - [Species.HISUI_SNEASEL]: { 0: Abilities.SCRAPPY }, - [Species.SNEASLER]: { 0: Abilities.SCRAPPY }, - [Species.HISUI_ZORUA]: { 0: Abilities.SHADOW_SHIELD }, - [Species.HISUI_ZOROARK]: { 0: Abilities.SHADOW_SHIELD }, + [SpeciesId.GROOKEY]: { 0: AbilityId.PICKPOCKET }, + [SpeciesId.THWACKEY]: { 0: AbilityId.PICKPOCKET }, + [SpeciesId.RILLABOOM]: { 0: AbilityId.GRASS_PELT, 1: AbilityId.GRASS_PELT }, + [SpeciesId.SCORBUNNY]: { 0: AbilityId.SHEER_FORCE }, + [SpeciesId.RABOOT]: { 0: AbilityId.SHEER_FORCE }, + [SpeciesId.CINDERACE]: { 0: AbilityId.NO_GUARD, 1: AbilityId.NO_GUARD }, + [SpeciesId.SOBBLE]: { 0: AbilityId.SUPER_LUCK }, + [SpeciesId.DRIZZILE]: { 0: AbilityId.SUPER_LUCK }, + [SpeciesId.INTELEON]: { 0: AbilityId.SUPER_LUCK, 1: AbilityId.SUPER_LUCK }, + [SpeciesId.SKWOVET]: { 0: AbilityId.HARVEST }, + [SpeciesId.GREEDENT]: { 0: AbilityId.HARVEST }, + [SpeciesId.ROOKIDEE]: { 0: AbilityId.GALE_WINGS }, + [SpeciesId.CORVISQUIRE]: { 0: AbilityId.GALE_WINGS }, + [SpeciesId.CORVIKNIGHT]: { 0: AbilityId.IRON_BARBS, 1: AbilityId.IRON_BARBS }, + [SpeciesId.BLIPBUG]: { 0: AbilityId.RUN_AWAY }, + [SpeciesId.DOTTLER]: { 0: AbilityId.PSYCHIC_SURGE }, + [SpeciesId.ORBEETLE]: { 0: AbilityId.PSYCHIC_SURGE, 1: AbilityId.PSYCHIC_SURGE }, + [SpeciesId.NICKIT]: { 0: AbilityId.MAGICIAN }, + [SpeciesId.THIEVUL]: { 0: AbilityId.MAGICIAN }, + [SpeciesId.GOSSIFLEUR]: { 0: AbilityId.SEED_SOWER }, + [SpeciesId.ELDEGOSS]: { 0: AbilityId.GRASSY_SURGE }, + [SpeciesId.WOOLOO]: { 0: AbilityId.SCRAPPY }, + [SpeciesId.DUBWOOL]: { 0: AbilityId.SCRAPPY }, + [SpeciesId.CHEWTLE]: { 0: AbilityId.SOLID_ROCK }, + [SpeciesId.DREDNAW]: { 0: AbilityId.SOLID_ROCK, 1: AbilityId.SOLID_ROCK }, + [SpeciesId.YAMPER]: { 0: AbilityId.PICKUP }, + [SpeciesId.BOLTUND]: { 0: AbilityId.SHEER_FORCE }, + [SpeciesId.ROLYCOLY]: { 0: AbilityId.SOLID_ROCK }, + [SpeciesId.CARKOL]: { 0: AbilityId.SOLID_ROCK }, + [SpeciesId.COALOSSAL]: { 0: AbilityId.SOLID_ROCK, 1: AbilityId.SOLID_ROCK }, + [SpeciesId.APPLIN]: { 0: AbilityId.STURDY }, + [SpeciesId.FLAPPLE]: { 0: AbilityId.NO_GUARD, 1: AbilityId.NO_GUARD }, + [SpeciesId.APPLETUN]: { 0: AbilityId.WELL_BAKED_BODY, 1: AbilityId.WELL_BAKED_BODY }, + [SpeciesId.DIPPLIN]: { 0: AbilityId.PARENTAL_BOND }, + [SpeciesId.HYDRAPPLE]: { 0: AbilityId.PARENTAL_BOND }, + [SpeciesId.SILICOBRA]: { 0: AbilityId.SAND_RUSH }, + [SpeciesId.SANDACONDA]: { 0: AbilityId.SAND_RUSH, 1: AbilityId.SAND_RUSH }, + [SpeciesId.CRAMORANT]: { 0: AbilityId.LIGHTNING_ROD, 1: AbilityId.LIGHTNING_ROD, 2: AbilityId.LIGHTNING_ROD }, + [SpeciesId.ARROKUDA]: { 0: AbilityId.SPEED_BOOST }, + [SpeciesId.BARRASKEWDA]: { 0: AbilityId.INTIMIDATE }, + [SpeciesId.TOXEL]: { 0: AbilityId.ELECTRIC_SURGE }, + [SpeciesId.TOXTRICITY]: { 0: AbilityId.ELECTRIC_SURGE, 1: AbilityId.ELECTRIC_SURGE, 2: AbilityId.ELECTRIC_SURGE }, + [SpeciesId.SIZZLIPEDE]: { 0: AbilityId.HUSTLE }, + [SpeciesId.CENTISKORCH]: { 0: AbilityId.HUSTLE, 1: AbilityId.HUSTLE }, + [SpeciesId.CLOBBOPUS]: { 0: AbilityId.WATER_BUBBLE }, + [SpeciesId.GRAPPLOCT]: { 0: AbilityId.WATER_BUBBLE }, + [SpeciesId.SINISTEA]: { 0: AbilityId.SHADOW_SHIELD, 1: AbilityId.SHADOW_SHIELD }, + [SpeciesId.POLTEAGEIST]: { 0: AbilityId.SHADOW_SHIELD, 1: AbilityId.SHADOW_SHIELD }, + [SpeciesId.HATENNA]: { 0: AbilityId.FAIRY_AURA }, + [SpeciesId.HATTREM]: { 0: AbilityId.FAIRY_AURA }, + [SpeciesId.HATTERENE]: { 0: AbilityId.FAIRY_AURA, 1: AbilityId.FAIRY_AURA }, + [SpeciesId.IMPIDIMP]: { 0: AbilityId.INTIMIDATE }, + [SpeciesId.MORGREM]: { 0: AbilityId.INTIMIDATE }, + [SpeciesId.GRIMMSNARL]: { 0: AbilityId.INTIMIDATE, 1: AbilityId.INTIMIDATE }, + [SpeciesId.MILCERY]: { 0: AbilityId.REGENERATOR }, + [SpeciesId.ALCREMIE]: { 0: AbilityId.REGENERATOR, 1: AbilityId.REGENERATOR, 2: AbilityId.REGENERATOR, 3: AbilityId.REGENERATOR, 4: AbilityId.REGENERATOR, 5: AbilityId.REGENERATOR, 6: AbilityId.REGENERATOR, 7: AbilityId.REGENERATOR, 8: AbilityId.REGENERATOR, 9: AbilityId.REGENERATOR }, + [SpeciesId.FALINKS]: { 0: AbilityId.DAUNTLESS_SHIELD }, + [SpeciesId.PINCURCHIN]: { 0: AbilityId.ELECTROMORPHOSIS }, + [SpeciesId.SNOM]: { 0: AbilityId.SNOW_WARNING }, + [SpeciesId.FROSMOTH]: { 0: AbilityId.SNOW_WARNING }, + [SpeciesId.STONJOURNER]: { 0: AbilityId.STURDY }, + [SpeciesId.EISCUE]: { 0: AbilityId.ICE_SCALES, 1: AbilityId.ICE_SCALES }, + [SpeciesId.INDEEDEE]: { 0: AbilityId.HOSPITALITY, 1: AbilityId.FRIEND_GUARD }, + [SpeciesId.MORPEKO]: { 0: AbilityId.MOODY, 1: AbilityId.MOODY }, + [SpeciesId.CUFANT]: { 0: AbilityId.EARTH_EATER }, + [SpeciesId.COPPERAJAH]: { 0: AbilityId.EARTH_EATER, 1: AbilityId.EARTH_EATER }, + [SpeciesId.DRACOZOLT]: { 0: AbilityId.NO_GUARD }, + [SpeciesId.ARCTOZOLT]: { 0: AbilityId.WATER_ABSORB }, + [SpeciesId.DRACOVISH]: { 0: AbilityId.THERMAL_EXCHANGE }, + [SpeciesId.ARCTOVISH]: { 0: AbilityId.STRONG_JAW }, + [SpeciesId.DURALUDON]: { 0: AbilityId.FILTER, 1: AbilityId.UNAWARE }, + [SpeciesId.ARCHALUDON]: { 0: AbilityId.TRANSISTOR }, + [SpeciesId.DREEPY]: { 0: AbilityId.TECHNICIAN }, + [SpeciesId.DRAKLOAK]: { 0: AbilityId.PARENTAL_BOND }, + [SpeciesId.DRAGAPULT]: { 0: AbilityId.PARENTAL_BOND }, + [SpeciesId.ZACIAN]: { 0: AbilityId.UNNERVE, 1: AbilityId.UNNERVE }, + [SpeciesId.ZAMAZENTA]: { 0: AbilityId.UNNERVE, 1: AbilityId.UNNERVE }, + [SpeciesId.ETERNATUS]: { 0: AbilityId.NEUTRALIZING_GAS, 1: AbilityId.NEUTRALIZING_GAS }, + [SpeciesId.KUBFU]: { 0: AbilityId.IRON_FIST }, + [SpeciesId.URSHIFU]: { 0: AbilityId.IRON_FIST, 1: AbilityId.IRON_FIST, 2: AbilityId.IRON_FIST, 3: AbilityId.IRON_FIST }, + [SpeciesId.ZARUDE]: { 0: AbilityId.TOUGH_CLAWS, 1: AbilityId.TOUGH_CLAWS }, + [SpeciesId.REGIELEKI]: { 0: AbilityId.ELECTRIC_SURGE }, + [SpeciesId.REGIDRAGO]: { 0: AbilityId.MULTISCALE }, + [SpeciesId.GLASTRIER]: { 0: AbilityId.FILTER }, + [SpeciesId.SPECTRIER]: { 0: AbilityId.DAZZLING }, + [SpeciesId.CALYREX]: { 0: AbilityId.HARVEST, 1: AbilityId.FILTER, 2: AbilityId.DAZZLING }, + [SpeciesId.ENAMORUS]: { 0: AbilityId.FAIRY_AURA, 1: AbilityId.FAIRY_AURA }, + [SpeciesId.GALAR_MEOWTH]: { 0: AbilityId.UNBURDEN }, + [SpeciesId.PERRSERKER]: { 0: AbilityId.UNBURDEN }, + [SpeciesId.GALAR_PONYTA]: { 0: AbilityId.CHILLING_NEIGH }, + [SpeciesId.GALAR_RAPIDASH]: { 0: AbilityId.CHILLING_NEIGH }, + [SpeciesId.GALAR_SLOWPOKE]: { 0: AbilityId.OBLIVIOUS }, + [SpeciesId.GALAR_SLOWBRO]: { 0: AbilityId.NEUROFORCE }, + [SpeciesId.GALAR_SLOWKING]: { 0: AbilityId.INTIMIDATE }, + [SpeciesId.GALAR_FARFETCHD]: { 0: AbilityId.STAKEOUT }, + [SpeciesId.SIRFETCHD]: { 0: AbilityId.INTREPID_SWORD }, + [SpeciesId.GALAR_ARTICUNO]: { 0: AbilityId.SERENE_GRACE }, + [SpeciesId.GALAR_ZAPDOS]: { 0: AbilityId.TOUGH_CLAWS }, + [SpeciesId.GALAR_MOLTRES]: { 0: AbilityId.DARK_AURA }, + [SpeciesId.GALAR_CORSOLA]: { 0: AbilityId.SHADOW_SHIELD }, + [SpeciesId.CURSOLA]: { 0: AbilityId.SHADOW_SHIELD }, + [SpeciesId.GALAR_ZIGZAGOON]: { 0: AbilityId.POISON_HEAL }, + [SpeciesId.GALAR_LINOONE]: { 0: AbilityId.POISON_HEAL }, + [SpeciesId.OBSTAGOON]: { 0: AbilityId.POISON_HEAL }, + [SpeciesId.GALAR_DARUMAKA]: { 0: AbilityId.FLASH_FIRE }, + [SpeciesId.GALAR_DARMANITAN]: { 0: AbilityId.FLASH_FIRE, 1: AbilityId.FLASH_FIRE }, + [SpeciesId.GALAR_YAMASK]: { 0: AbilityId.TABLETS_OF_RUIN }, + [SpeciesId.RUNERIGUS]: { 0: AbilityId.TABLETS_OF_RUIN }, + [SpeciesId.GALAR_STUNFISK]: { 0: AbilityId.ARENA_TRAP }, + [SpeciesId.HISUI_GROWLITHE]: { 0: AbilityId.RECKLESS }, + [SpeciesId.HISUI_ARCANINE]: { 0: AbilityId.RECKLESS }, + [SpeciesId.HISUI_VOLTORB]: { 0: AbilityId.TRANSISTOR }, + [SpeciesId.HISUI_ELECTRODE]: { 0: AbilityId.TRANSISTOR }, + [SpeciesId.HISUI_QWILFISH]: { 0: AbilityId.MERCILESS }, + [SpeciesId.OVERQWIL]: { 0: AbilityId.MERCILESS }, + [SpeciesId.HISUI_SNEASEL]: { 0: AbilityId.SCRAPPY }, + [SpeciesId.SNEASLER]: { 0: AbilityId.SCRAPPY }, + [SpeciesId.HISUI_ZORUA]: { 0: AbilityId.SHADOW_SHIELD }, + [SpeciesId.HISUI_ZOROARK]: { 0: AbilityId.SHADOW_SHIELD }, - [Species.SPRIGATITO]: { 0: Abilities.PICKUP }, - [Species.FLORAGATO]: { 0: Abilities.MAGICIAN }, - [Species.MEOWSCARADA]: { 0: Abilities.MAGICIAN }, - [Species.FUECOCO]: { 0: Abilities.GLUTTONY }, - [Species.CROCALOR]: { 0: Abilities.PUNK_ROCK }, - [Species.SKELEDIRGE]: { 0: Abilities.PUNK_ROCK }, - [Species.QUAXLY]: { 0: Abilities.OPPORTUNIST }, - [Species.QUAXWELL]: { 0: Abilities.OPPORTUNIST }, - [Species.QUAQUAVAL]: { 0: Abilities.OPPORTUNIST }, - [Species.LECHONK]: { 0: Abilities.SIMPLE }, - [Species.OINKOLOGNE]: { 0: Abilities.SIMPLE, 1: Abilities.SIMPLE }, - [Species.TAROUNTULA]: { 0: Abilities.HONEY_GATHER }, - [Species.SPIDOPS]: { 0: Abilities.HONEY_GATHER }, - [Species.NYMBLE]: { 0: Abilities.TECHNICIAN }, - [Species.LOKIX]: { 0: Abilities.GUTS }, - [Species.PAWMI]: { 0: Abilities.TRANSISTOR }, - [Species.PAWMO]: { 0: Abilities.TRANSISTOR }, - [Species.PAWMOT]: { 0: Abilities.TRANSISTOR }, - [Species.TANDEMAUS]: { 0: Abilities.FRIEND_GUARD }, - [Species.MAUSHOLD]: { 0: Abilities.SCRAPPY, 1: Abilities.SCRAPPY }, - [Species.FIDOUGH]: { 0: Abilities.WATER_ABSORB }, - [Species.DACHSBUN]: { 0: Abilities.WATER_ABSORB }, - [Species.SMOLIV]: { 0: Abilities.RIPEN }, - [Species.DOLLIV]: { 0: Abilities.RIPEN }, - [Species.ARBOLIVA]: { 0: Abilities.RIPEN }, - [Species.SQUAWKABILLY]: { 0: Abilities.MOXIE, 1: Abilities.MOXIE, 2: Abilities.MOXIE, 3: Abilities.MOXIE }, - [Species.NACLI]: { 0: Abilities.SOLID_ROCK }, - [Species.NACLSTACK]: { 0: Abilities.SOLID_ROCK }, - [Species.GARGANACL]: { 0: Abilities.SOLID_ROCK }, - [Species.CHARCADET]: { 0: Abilities.BATTLE_ARMOR }, - [Species.ARMAROUGE]: { 0: Abilities.PRISM_ARMOR }, - [Species.CERULEDGE]: { 0: Abilities.PRISM_ARMOR }, - [Species.TADBULB]: { 0: Abilities.LEVITATE }, - [Species.BELLIBOLT]: { 0: Abilities.STAMINA }, - [Species.WATTREL]: { 0: Abilities.SHEER_FORCE }, - [Species.KILOWATTREL]: { 0: Abilities.SHEER_FORCE }, - [Species.MASCHIFF]: { 0: Abilities.STRONG_JAW }, - [Species.MABOSSTIFF]: { 0: Abilities.STRONG_JAW }, - [Species.SHROODLE]: { 0: Abilities.CORROSION }, - [Species.GRAFAIAI]: { 0: Abilities.CORROSION }, - [Species.BRAMBLIN]: { 0: Abilities.WANDERING_SPIRIT }, - [Species.BRAMBLEGHAST]: { 0: Abilities.SHADOW_SHIELD }, - [Species.TOEDSCOOL]: { 0: Abilities.RUN_AWAY }, - [Species.TOEDSCRUEL]: { 0: Abilities.PRANKSTER }, - [Species.KLAWF]: { 0: Abilities.WATER_ABSORB }, - [Species.CAPSAKID]: { 0: Abilities.FLOWER_GIFT }, - [Species.SCOVILLAIN]: { 0: Abilities.PARENTAL_BOND }, - [Species.RELLOR]: { 0: Abilities.PRANKSTER }, - [Species.RABSCA]: { 0: Abilities.PRANKSTER }, - [Species.FLITTLE]: { 0: Abilities.DAZZLING }, - [Species.ESPATHRA]: { 0: Abilities.DAZZLING }, - [Species.TINKATINK]: { 0: Abilities.STEELWORKER }, - [Species.TINKATUFF]: { 0: Abilities.STEELWORKER }, - [Species.TINKATON]: { 0: Abilities.STEELWORKER }, - [Species.WIGLETT]: { 0: Abilities.STURDY }, - [Species.WUGTRIO]: { 0: Abilities.STURDY }, - [Species.BOMBIRDIER]: { 0: Abilities.UNBURDEN }, - [Species.FINIZEN]: { 0: Abilities.SWIFT_SWIM }, - [Species.PALAFIN]: { 0: Abilities.EMERGENCY_EXIT, 1: Abilities.IRON_FIST }, - [Species.VAROOM]: { 0: Abilities.LEVITATE }, - [Species.REVAVROOM]: { 0: Abilities.LEVITATE, 1: Abilities.DARK_AURA, 2: Abilities.FLASH_FIRE, 3: Abilities.MERCILESS, 4: Abilities.FILTER, 5: Abilities.SCRAPPY }, - [Species.CYCLIZAR]: { 0: Abilities.PROTEAN }, - [Species.ORTHWORM]: { 0: Abilities.REGENERATOR }, - [Species.GLIMMET]: { 0: Abilities.STURDY }, - [Species.GLIMMORA]: { 0: Abilities.TERA_SHELL }, - [Species.GREAVARD]: { 0: Abilities.UNAWARE }, - [Species.HOUNDSTONE]: { 0: Abilities.UNAWARE }, - [Species.FLAMIGO]: { 0: Abilities.MOXIE }, - [Species.CETODDLE]: { 0: Abilities.REFRIGERATE }, - [Species.CETITAN]: { 0: Abilities.REFRIGERATE }, - [Species.VELUZA]: { 0: Abilities.SUPER_LUCK }, - [Species.DONDOZO]: { 0: Abilities.DRAGONS_MAW }, - [Species.TATSUGIRI]: { 0: Abilities.FLUFFY, 1: Abilities.FLUFFY, 2: Abilities.FLUFFY }, - [Species.GREAT_TUSK]: { 0: Abilities.INTIMIDATE }, - [Species.SCREAM_TAIL]: { 0: Abilities.UNAWARE }, - [Species.BRUTE_BONNET]: { 0: Abilities.CHLOROPHYLL }, - [Species.FLUTTER_MANE]: { 0: Abilities.DAZZLING }, - [Species.SLITHER_WING]: { 0: Abilities.SCRAPPY }, - [Species.SANDY_SHOCKS]: { 0: Abilities.ELECTRIC_SURGE }, - [Species.IRON_TREADS]: { 0: Abilities.DAUNTLESS_SHIELD }, - [Species.IRON_BUNDLE]: { 0: Abilities.SNOW_WARNING }, - [Species.IRON_HANDS]: { 0: Abilities.IRON_FIST }, - [Species.IRON_JUGULIS]: { 0: Abilities.LIGHTNING_ROD }, - [Species.IRON_MOTH]: { 0: Abilities.LEVITATE }, - [Species.IRON_THORNS]: { 0: Abilities.SAND_STREAM }, - [Species.FRIGIBAX]: { 0: Abilities.INTIMIDATE }, - [Species.ARCTIBAX]: { 0: Abilities.INTIMIDATE }, - [Species.BAXCALIBUR]: { 0: Abilities.INTIMIDATE }, - [Species.GIMMIGHOUL]: { 0: Abilities.HONEY_GATHER, 1: Abilities.HONEY_GATHER }, - [Species.GHOLDENGO]: { 0: Abilities.HONEY_GATHER }, - [Species.WO_CHIEN]: { 0: Abilities.VESSEL_OF_RUIN }, - [Species.CHIEN_PAO]: { 0: Abilities.INTIMIDATE }, - [Species.TING_LU]: { 0: Abilities.STAMINA }, - [Species.CHI_YU]: { 0: Abilities.BERSERK }, - [Species.ROARING_MOON]: { 0: Abilities.INTIMIDATE }, - [Species.IRON_VALIANT]: { 0: Abilities.NEUROFORCE }, - [Species.KORAIDON]: { 0: Abilities.THERMAL_EXCHANGE }, - [Species.MIRAIDON]: { 0: Abilities.COMPOUND_EYES }, - [Species.WALKING_WAKE]: { 0: Abilities.BEAST_BOOST }, - [Species.IRON_LEAVES]: { 0: Abilities.SHARPNESS }, - [Species.POLTCHAGEIST]: { 0: Abilities.TRIAGE, 1: Abilities.TRIAGE }, - [Species.SINISTCHA]: { 0: Abilities.TRIAGE, 1: Abilities.TRIAGE }, - [Species.OKIDOGI]: { 0: Abilities.DARK_AURA }, - [Species.MUNKIDORI]: { 0: Abilities.MAGICIAN }, - [Species.FEZANDIPITI]: { 0: Abilities.PIXILATE }, - [Species.OGERPON]: { 0: Abilities.OPPORTUNIST, 1: Abilities.SUPER_LUCK, 2: Abilities.FLASH_FIRE, 3: Abilities.MAGIC_GUARD, 4: Abilities.OPPORTUNIST, 5: Abilities.SUPER_LUCK, 6: Abilities.FLASH_FIRE, 7: Abilities.MAGIC_GUARD }, - [Species.GOUGING_FIRE]: { 0: Abilities.BEAST_BOOST }, - [Species.RAGING_BOLT]: { 0: Abilities.BEAST_BOOST }, - [Species.IRON_BOULDER]: { 0: Abilities.SHARPNESS }, - [Species.IRON_CROWN]: { 0: Abilities.SHARPNESS }, - [Species.TERAPAGOS]: { 0: Abilities.SHIELD_DUST, 1: Abilities.SHIELD_DUST, 2: Abilities.SHIELD_DUST }, - [Species.PECHARUNT]: { 0: Abilities.TOXIC_CHAIN }, - [Species.PALDEA_TAUROS]: { 0: Abilities.STAMINA, 1: Abilities.ADAPTABILITY, 2: Abilities.ADAPTABILITY }, - [Species.PALDEA_WOOPER]: { 0: Abilities.POISON_TOUCH }, - [Species.CLODSIRE]: { 0: Abilities.THICK_FAT }, - [Species.BLOODMOON_URSALUNA]: { 0: Abilities.BERSERK } + [SpeciesId.SPRIGATITO]: { 0: AbilityId.PICKUP }, + [SpeciesId.FLORAGATO]: { 0: AbilityId.MAGICIAN }, + [SpeciesId.MEOWSCARADA]: { 0: AbilityId.MAGICIAN }, + [SpeciesId.FUECOCO]: { 0: AbilityId.GLUTTONY }, + [SpeciesId.CROCALOR]: { 0: AbilityId.PUNK_ROCK }, + [SpeciesId.SKELEDIRGE]: { 0: AbilityId.PUNK_ROCK }, + [SpeciesId.QUAXLY]: { 0: AbilityId.OPPORTUNIST }, + [SpeciesId.QUAXWELL]: { 0: AbilityId.OPPORTUNIST }, + [SpeciesId.QUAQUAVAL]: { 0: AbilityId.OPPORTUNIST }, + [SpeciesId.LECHONK]: { 0: AbilityId.SIMPLE }, + [SpeciesId.OINKOLOGNE]: { 0: AbilityId.SIMPLE, 1: AbilityId.SIMPLE }, + [SpeciesId.TAROUNTULA]: { 0: AbilityId.HONEY_GATHER }, + [SpeciesId.SPIDOPS]: { 0: AbilityId.HONEY_GATHER }, + [SpeciesId.NYMBLE]: { 0: AbilityId.TECHNICIAN }, + [SpeciesId.LOKIX]: { 0: AbilityId.GUTS }, + [SpeciesId.PAWMI]: { 0: AbilityId.TRANSISTOR }, + [SpeciesId.PAWMO]: { 0: AbilityId.TRANSISTOR }, + [SpeciesId.PAWMOT]: { 0: AbilityId.TRANSISTOR }, + [SpeciesId.TANDEMAUS]: { 0: AbilityId.FRIEND_GUARD }, + [SpeciesId.MAUSHOLD]: { 0: AbilityId.SCRAPPY, 1: AbilityId.SCRAPPY }, + [SpeciesId.FIDOUGH]: { 0: AbilityId.WATER_ABSORB }, + [SpeciesId.DACHSBUN]: { 0: AbilityId.WATER_ABSORB }, + [SpeciesId.SMOLIV]: { 0: AbilityId.RIPEN }, + [SpeciesId.DOLLIV]: { 0: AbilityId.RIPEN }, + [SpeciesId.ARBOLIVA]: { 0: AbilityId.RIPEN }, + [SpeciesId.SQUAWKABILLY]: { 0: AbilityId.MOXIE, 1: AbilityId.MOXIE, 2: AbilityId.MOXIE, 3: AbilityId.MOXIE }, + [SpeciesId.NACLI]: { 0: AbilityId.SOLID_ROCK }, + [SpeciesId.NACLSTACK]: { 0: AbilityId.SOLID_ROCK }, + [SpeciesId.GARGANACL]: { 0: AbilityId.SOLID_ROCK }, + [SpeciesId.CHARCADET]: { 0: AbilityId.BATTLE_ARMOR }, + [SpeciesId.ARMAROUGE]: { 0: AbilityId.PRISM_ARMOR }, + [SpeciesId.CERULEDGE]: { 0: AbilityId.PRISM_ARMOR }, + [SpeciesId.TADBULB]: { 0: AbilityId.LEVITATE }, + [SpeciesId.BELLIBOLT]: { 0: AbilityId.STAMINA }, + [SpeciesId.WATTREL]: { 0: AbilityId.SHEER_FORCE }, + [SpeciesId.KILOWATTREL]: { 0: AbilityId.SHEER_FORCE }, + [SpeciesId.MASCHIFF]: { 0: AbilityId.STRONG_JAW }, + [SpeciesId.MABOSSTIFF]: { 0: AbilityId.STRONG_JAW }, + [SpeciesId.SHROODLE]: { 0: AbilityId.CORROSION }, + [SpeciesId.GRAFAIAI]: { 0: AbilityId.CORROSION }, + [SpeciesId.BRAMBLIN]: { 0: AbilityId.WANDERING_SPIRIT }, + [SpeciesId.BRAMBLEGHAST]: { 0: AbilityId.SHADOW_SHIELD }, + [SpeciesId.TOEDSCOOL]: { 0: AbilityId.RUN_AWAY }, + [SpeciesId.TOEDSCRUEL]: { 0: AbilityId.PRANKSTER }, + [SpeciesId.KLAWF]: { 0: AbilityId.WATER_ABSORB }, + [SpeciesId.CAPSAKID]: { 0: AbilityId.FLOWER_GIFT }, + [SpeciesId.SCOVILLAIN]: { 0: AbilityId.PARENTAL_BOND }, + [SpeciesId.RELLOR]: { 0: AbilityId.PRANKSTER }, + [SpeciesId.RABSCA]: { 0: AbilityId.PRANKSTER }, + [SpeciesId.FLITTLE]: { 0: AbilityId.DAZZLING }, + [SpeciesId.ESPATHRA]: { 0: AbilityId.DAZZLING }, + [SpeciesId.TINKATINK]: { 0: AbilityId.STEELWORKER }, + [SpeciesId.TINKATUFF]: { 0: AbilityId.STEELWORKER }, + [SpeciesId.TINKATON]: { 0: AbilityId.STEELWORKER }, + [SpeciesId.WIGLETT]: { 0: AbilityId.STURDY }, + [SpeciesId.WUGTRIO]: { 0: AbilityId.STURDY }, + [SpeciesId.BOMBIRDIER]: { 0: AbilityId.UNBURDEN }, + [SpeciesId.FINIZEN]: { 0: AbilityId.SWIFT_SWIM }, + [SpeciesId.PALAFIN]: { 0: AbilityId.EMERGENCY_EXIT, 1: AbilityId.IRON_FIST }, + [SpeciesId.VAROOM]: { 0: AbilityId.LEVITATE }, + [SpeciesId.REVAVROOM]: { 0: AbilityId.LEVITATE, 1: AbilityId.DARK_AURA, 2: AbilityId.FLASH_FIRE, 3: AbilityId.MERCILESS, 4: AbilityId.FILTER, 5: AbilityId.SCRAPPY }, + [SpeciesId.CYCLIZAR]: { 0: AbilityId.PROTEAN }, + [SpeciesId.ORTHWORM]: { 0: AbilityId.REGENERATOR }, + [SpeciesId.GLIMMET]: { 0: AbilityId.STURDY }, + [SpeciesId.GLIMMORA]: { 0: AbilityId.TERA_SHELL }, + [SpeciesId.GREAVARD]: { 0: AbilityId.UNAWARE }, + [SpeciesId.HOUNDSTONE]: { 0: AbilityId.UNAWARE }, + [SpeciesId.FLAMIGO]: { 0: AbilityId.MOXIE }, + [SpeciesId.CETODDLE]: { 0: AbilityId.REFRIGERATE }, + [SpeciesId.CETITAN]: { 0: AbilityId.REFRIGERATE }, + [SpeciesId.VELUZA]: { 0: AbilityId.SUPER_LUCK }, + [SpeciesId.DONDOZO]: { 0: AbilityId.DRAGONS_MAW }, + [SpeciesId.TATSUGIRI]: { 0: AbilityId.FLUFFY, 1: AbilityId.FLUFFY, 2: AbilityId.FLUFFY }, + [SpeciesId.GREAT_TUSK]: { 0: AbilityId.INTIMIDATE }, + [SpeciesId.SCREAM_TAIL]: { 0: AbilityId.UNAWARE }, + [SpeciesId.BRUTE_BONNET]: { 0: AbilityId.CHLOROPHYLL }, + [SpeciesId.FLUTTER_MANE]: { 0: AbilityId.DAZZLING }, + [SpeciesId.SLITHER_WING]: { 0: AbilityId.SCRAPPY }, + [SpeciesId.SANDY_SHOCKS]: { 0: AbilityId.ELECTRIC_SURGE }, + [SpeciesId.IRON_TREADS]: { 0: AbilityId.DAUNTLESS_SHIELD }, + [SpeciesId.IRON_BUNDLE]: { 0: AbilityId.SNOW_WARNING }, + [SpeciesId.IRON_HANDS]: { 0: AbilityId.IRON_FIST }, + [SpeciesId.IRON_JUGULIS]: { 0: AbilityId.LIGHTNING_ROD }, + [SpeciesId.IRON_MOTH]: { 0: AbilityId.LEVITATE }, + [SpeciesId.IRON_THORNS]: { 0: AbilityId.SAND_STREAM }, + [SpeciesId.FRIGIBAX]: { 0: AbilityId.INTIMIDATE }, + [SpeciesId.ARCTIBAX]: { 0: AbilityId.INTIMIDATE }, + [SpeciesId.BAXCALIBUR]: { 0: AbilityId.INTIMIDATE }, + [SpeciesId.GIMMIGHOUL]: { 0: AbilityId.HONEY_GATHER, 1: AbilityId.HONEY_GATHER }, + [SpeciesId.GHOLDENGO]: { 0: AbilityId.HONEY_GATHER }, + [SpeciesId.WO_CHIEN]: { 0: AbilityId.VESSEL_OF_RUIN }, + [SpeciesId.CHIEN_PAO]: { 0: AbilityId.INTIMIDATE }, + [SpeciesId.TING_LU]: { 0: AbilityId.STAMINA }, + [SpeciesId.CHI_YU]: { 0: AbilityId.BERSERK }, + [SpeciesId.ROARING_MOON]: { 0: AbilityId.INTIMIDATE }, + [SpeciesId.IRON_VALIANT]: { 0: AbilityId.NEUROFORCE }, + [SpeciesId.KORAIDON]: { 0: AbilityId.THERMAL_EXCHANGE }, + [SpeciesId.MIRAIDON]: { 0: AbilityId.COMPOUND_EYES }, + [SpeciesId.WALKING_WAKE]: { 0: AbilityId.BEAST_BOOST }, + [SpeciesId.IRON_LEAVES]: { 0: AbilityId.SHARPNESS }, + [SpeciesId.POLTCHAGEIST]: { 0: AbilityId.TRIAGE, 1: AbilityId.TRIAGE }, + [SpeciesId.SINISTCHA]: { 0: AbilityId.TRIAGE, 1: AbilityId.TRIAGE }, + [SpeciesId.OKIDOGI]: { 0: AbilityId.DARK_AURA }, + [SpeciesId.MUNKIDORI]: { 0: AbilityId.MAGICIAN }, + [SpeciesId.FEZANDIPITI]: { 0: AbilityId.PIXILATE }, + [SpeciesId.OGERPON]: { 0: AbilityId.OPPORTUNIST, 1: AbilityId.SUPER_LUCK, 2: AbilityId.FLASH_FIRE, 3: AbilityId.MAGIC_GUARD, 4: AbilityId.OPPORTUNIST, 5: AbilityId.SUPER_LUCK, 6: AbilityId.FLASH_FIRE, 7: AbilityId.MAGIC_GUARD }, + [SpeciesId.GOUGING_FIRE]: { 0: AbilityId.BEAST_BOOST }, + [SpeciesId.RAGING_BOLT]: { 0: AbilityId.BEAST_BOOST }, + [SpeciesId.IRON_BOULDER]: { 0: AbilityId.SHARPNESS }, + [SpeciesId.IRON_CROWN]: { 0: AbilityId.SHARPNESS }, + [SpeciesId.TERAPAGOS]: { 0: AbilityId.SHIELD_DUST, 1: AbilityId.SHIELD_DUST, 2: AbilityId.SHIELD_DUST }, + [SpeciesId.PECHARUNT]: { 0: AbilityId.TOXIC_CHAIN }, + [SpeciesId.PALDEA_TAUROS]: { 0: AbilityId.STAMINA, 1: AbilityId.ADAPTABILITY, 2: AbilityId.ADAPTABILITY }, + [SpeciesId.PALDEA_WOOPER]: { 0: AbilityId.POISON_TOUCH }, + [SpeciesId.CLODSIRE]: { 0: AbilityId.THICK_FAT }, + [SpeciesId.BLOODMOON_URSALUNA]: { 0: AbilityId.BERSERK } }; diff --git a/src/data/balance/pokemon-evolutions.ts b/src/data/balance/pokemon-evolutions.ts index cf1e4061987..298cf2d0719 100644 --- a/src/data/balance/pokemon-evolutions.ts +++ b/src/data/balance/pokemon-evolutions.ts @@ -6,9 +6,9 @@ import { PokemonType } from "#enums/pokemon-type"; import { randSeedInt } from "#app/utils/common"; import { WeatherType } from "#enums/weather-type"; import { Nature } from "#enums/nature"; -import { Biome } from "#enums/biome"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { BiomeId } from "#enums/biome-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { SpeciesFormKey } from "#enums/species-form-key"; import { TimeOfDay } from "#enums/time-of-day"; import { DamageMoneyRewardModifier, ExtraModifierModifier, MoneyMultiplierModifier, SpeciesStatBoosterModifier, TempExtraModifierModifier } from "#app/modifier/modifier"; @@ -77,16 +77,16 @@ export enum EvolutionItem { /** * Pokemon Evolution tuple type consisting of: - * @property 0 {@linkcode Species} The species of the Pokemon. + * @property 0 {@linkcode SpeciesId} The species of the Pokemon. * @property 1 {@linkcode number} The level at which the Pokemon evolves. */ -export type EvolutionLevel = [species: Species, level: number]; +export type EvolutionLevel = [species: SpeciesId, level: number]; export type EvolutionConditionPredicate = (p: Pokemon) => boolean; export type EvolutionConditionEnforceFunc = (p: Pokemon) => void; export class SpeciesFormEvolution { - public speciesId: Species; + public speciesId: SpeciesId; public preFormKey: string | null; public evoFormKey: string | null; public level: number; @@ -95,7 +95,7 @@ export class SpeciesFormEvolution { public wildDelay: SpeciesWildEvolutionDelay; public description = ""; - constructor(speciesId: Species, preFormKey: string | null, evoFormKey: string | null, level: number, item: EvolutionItem | null, condition: SpeciesEvolutionCondition | null, wildDelay?: SpeciesWildEvolutionDelay) { + constructor(speciesId: SpeciesId, preFormKey: string | null, evoFormKey: string | null, level: number, item: EvolutionItem | null, condition: SpeciesEvolutionCondition | null, wildDelay?: SpeciesWildEvolutionDelay) { if (!i18next.isInitialized) { initI18n(); } @@ -127,15 +127,15 @@ export class SpeciesFormEvolution { } export class SpeciesEvolution extends SpeciesFormEvolution { - constructor(speciesId: Species, level: number, item: EvolutionItem | null, condition: SpeciesEvolutionCondition | null, wildDelay?: SpeciesWildEvolutionDelay) { + constructor(speciesId: SpeciesId, level: number, item: EvolutionItem | null, condition: SpeciesEvolutionCondition | null, wildDelay?: SpeciesWildEvolutionDelay) { super(speciesId, null, null, level, item, condition, wildDelay); } } export class FusionSpeciesFormEvolution extends SpeciesFormEvolution { - public primarySpeciesId: Species; + public primarySpeciesId: SpeciesId; - constructor(primarySpeciesId: Species, evolution: SpeciesFormEvolution) { + constructor(primarySpeciesId: SpeciesId, evolution: SpeciesFormEvolution) { super(evolution.speciesId, evolution.preFormKey, evolution.evoFormKey, evolution.level, evolution.item, evolution.condition, evolution.wildDelay); this.primarySpeciesId = primarySpeciesId; @@ -181,11 +181,11 @@ class TimeOfDayEvolutionCondition extends SpeciesEvolutionCondition { } class MoveEvolutionCondition extends SpeciesEvolutionCondition { - public move: Moves; - constructor(move: Moves) { + public move: MoveId; + constructor(move: MoveId) { super(p => p.moveset.filter(m => m.moveId === move).length > 0); this.move = move; - const moveKey = Moves[this.move].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); + const moveKey = MoveId[this.move].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); this.description = i18next.t("pokemonEvolutions:move", { move: i18next.t(`move:${moveKey}.name`) }); } } @@ -246,11 +246,11 @@ class PartyTypeEvolutionCondition extends SpeciesEvolutionCondition { } class CaughtEvolutionCondition extends SpeciesEvolutionCondition { - public species: Species; - constructor(species: Species) { + public species: SpeciesId; + constructor(species: SpeciesId) { super(() => !!globalScene.gameData.dexData[species].caughtAttr); this.species = species; - this.description = i18next.t("pokemonEvolutions:caught", { species: i18next.t(`pokemon:${Species[this.species].toLowerCase()}`) }); + this.description = i18next.t("pokemonEvolutions:caught", { species: i18next.t(`pokemon:${SpeciesId[this.species].toLowerCase()}`) }); } } @@ -283,12 +283,12 @@ class TreasureEvolutionCondition extends SpeciesEvolutionCondition { } class TyrogueEvolutionCondition extends SpeciesEvolutionCondition { - public move: Moves; - constructor(move: Moves) { + public move: MoveId; + constructor(move: MoveId) { super(p => - p.getMoveset(true).find(m => m && [ Moves.LOW_SWEEP, Moves.MACH_PUNCH, Moves.RAPID_SPIN ].includes(m.moveId))?.moveId === move); + p.getMoveset(true).find(m => m && [ MoveId.LOW_SWEEP, MoveId.MACH_PUNCH, MoveId.RAPID_SPIN ].includes(m.moveId))?.moveId === move); this.move = move; - const moveKey = Moves[this.move].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); + const moveKey = MoveId[this.move].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); this.description = i18next.t("pokemonEvolutions:move", { move: i18next.t(`move:${moveKey}.name`) }); } } @@ -303,9 +303,9 @@ class NatureEvolutionCondition extends SpeciesEvolutionCondition { } class MoveTimeOfDayEvolutionCondition extends SpeciesEvolutionCondition { - public move: Moves; + public move: MoveId; public timesOfDay: TimeOfDay[]; - constructor(move: Moves, tod: "day" | "night") { + constructor(move: MoveId, tod: "day" | "night") { if (tod === "day") { super(p => p.moveset.filter(m => m.moveId === move).length > 0 && (globalScene.arena.getTimeOfDay() === TimeOfDay.DAWN || globalScene.arena.getTimeOfDay() === TimeOfDay.DAY)); this.move = move; @@ -318,14 +318,14 @@ class MoveTimeOfDayEvolutionCondition extends SpeciesEvolutionCondition { super(() => false); this.timesOfDay = []; } - const moveKey = Moves[this.move].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); + const moveKey = MoveId[this.move].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); this.description = i18next.t("pokemonEvolutions:moveTimeOfDay", { move: i18next.t(`move:${moveKey}.name`), tod: i18next.t(`pokemonEvolutions:${tod}`) }); } } class BiomeEvolutionCondition extends SpeciesEvolutionCondition { - public biomes: Biome[]; - constructor(biomes: Biome[]) { + public biomes: BiomeId[]; + constructor(biomes: BiomeId[]) { super(() => biomes.filter(b => b === globalScene.arena.biomeType).length > 0); this.biomes = biomes; this.description = i18next.t("pokemonEvolutions:biome"); @@ -336,12 +336,12 @@ class DunsparceEvolutionCondition extends SpeciesEvolutionCondition { constructor() { super(p => { let ret = false; - if (p.moveset.filter(m => m.moveId === Moves.HYPER_DRILL).length > 0) { + if (p.moveset.filter(m => m.moveId === MoveId.HYPER_DRILL).length > 0) { globalScene.executeWithSeedOffset(() => ret = !randSeedInt(4), p.id); } return ret; }); - const moveKey = Moves[Moves.HYPER_DRILL].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); + const moveKey = MoveId[MoveId.HYPER_DRILL].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); this.description = i18next.t("pokemonEvolutions:move", { move: i18next.t(`move:${moveKey}.name`) }); } } @@ -361,1535 +361,1535 @@ interface PokemonEvolutions { } export const pokemonEvolutions: PokemonEvolutions = { - [Species.BULBASAUR]: [ - new SpeciesEvolution(Species.IVYSAUR, 16, null, null) + [SpeciesId.BULBASAUR]: [ + new SpeciesEvolution(SpeciesId.IVYSAUR, 16, null, null) ], - [Species.IVYSAUR]: [ - new SpeciesEvolution(Species.VENUSAUR, 32, null, null) + [SpeciesId.IVYSAUR]: [ + new SpeciesEvolution(SpeciesId.VENUSAUR, 32, null, null) ], - [Species.CHARMANDER]: [ - new SpeciesEvolution(Species.CHARMELEON, 16, null, null) + [SpeciesId.CHARMANDER]: [ + new SpeciesEvolution(SpeciesId.CHARMELEON, 16, null, null) ], - [Species.CHARMELEON]: [ - new SpeciesEvolution(Species.CHARIZARD, 36, null, null) + [SpeciesId.CHARMELEON]: [ + new SpeciesEvolution(SpeciesId.CHARIZARD, 36, null, null) ], - [Species.SQUIRTLE]: [ - new SpeciesEvolution(Species.WARTORTLE, 16, null, null) + [SpeciesId.SQUIRTLE]: [ + new SpeciesEvolution(SpeciesId.WARTORTLE, 16, null, null) ], - [Species.WARTORTLE]: [ - new SpeciesEvolution(Species.BLASTOISE, 36, null, null) + [SpeciesId.WARTORTLE]: [ + new SpeciesEvolution(SpeciesId.BLASTOISE, 36, null, null) ], - [Species.CATERPIE]: [ - new SpeciesEvolution(Species.METAPOD, 7, null, null) + [SpeciesId.CATERPIE]: [ + new SpeciesEvolution(SpeciesId.METAPOD, 7, null, null) ], - [Species.METAPOD]: [ - new SpeciesEvolution(Species.BUTTERFREE, 10, null, null) + [SpeciesId.METAPOD]: [ + new SpeciesEvolution(SpeciesId.BUTTERFREE, 10, null, null) ], - [Species.WEEDLE]: [ - new SpeciesEvolution(Species.KAKUNA, 7, null, null) + [SpeciesId.WEEDLE]: [ + new SpeciesEvolution(SpeciesId.KAKUNA, 7, null, null) ], - [Species.KAKUNA]: [ - new SpeciesEvolution(Species.BEEDRILL, 10, null, null) + [SpeciesId.KAKUNA]: [ + new SpeciesEvolution(SpeciesId.BEEDRILL, 10, null, null) ], - [Species.PIDGEY]: [ - new SpeciesEvolution(Species.PIDGEOTTO, 18, null, null) + [SpeciesId.PIDGEY]: [ + new SpeciesEvolution(SpeciesId.PIDGEOTTO, 18, null, null) ], - [Species.PIDGEOTTO]: [ - new SpeciesEvolution(Species.PIDGEOT, 36, null, null) + [SpeciesId.PIDGEOTTO]: [ + new SpeciesEvolution(SpeciesId.PIDGEOT, 36, null, null) ], - [Species.RATTATA]: [ - new SpeciesEvolution(Species.RATICATE, 20, null, null) + [SpeciesId.RATTATA]: [ + new SpeciesEvolution(SpeciesId.RATICATE, 20, null, null) ], - [Species.SPEAROW]: [ - new SpeciesEvolution(Species.FEAROW, 20, null, null) + [SpeciesId.SPEAROW]: [ + new SpeciesEvolution(SpeciesId.FEAROW, 20, null, null) ], - [Species.EKANS]: [ - new SpeciesEvolution(Species.ARBOK, 22, null, null) + [SpeciesId.EKANS]: [ + new SpeciesEvolution(SpeciesId.ARBOK, 22, null, null) ], - [Species.SANDSHREW]: [ - new SpeciesEvolution(Species.SANDSLASH, 22, null, null) + [SpeciesId.SANDSHREW]: [ + new SpeciesEvolution(SpeciesId.SANDSLASH, 22, null, null) ], - [Species.NIDORAN_F]: [ - new SpeciesEvolution(Species.NIDORINA, 16, null, null) + [SpeciesId.NIDORAN_F]: [ + new SpeciesEvolution(SpeciesId.NIDORINA, 16, null, null) ], - [Species.NIDORAN_M]: [ - new SpeciesEvolution(Species.NIDORINO, 16, null, null) + [SpeciesId.NIDORAN_M]: [ + new SpeciesEvolution(SpeciesId.NIDORINO, 16, null, null) ], - [Species.ZUBAT]: [ - new SpeciesEvolution(Species.GOLBAT, 22, null, null) + [SpeciesId.ZUBAT]: [ + new SpeciesEvolution(SpeciesId.GOLBAT, 22, null, null) ], - [Species.ODDISH]: [ - new SpeciesEvolution(Species.GLOOM, 21, null, null) + [SpeciesId.ODDISH]: [ + new SpeciesEvolution(SpeciesId.GLOOM, 21, null, null) ], - [Species.PARAS]: [ - new SpeciesEvolution(Species.PARASECT, 24, null, null) + [SpeciesId.PARAS]: [ + new SpeciesEvolution(SpeciesId.PARASECT, 24, null, null) ], - [Species.VENONAT]: [ - new SpeciesEvolution(Species.VENOMOTH, 31, null, null) + [SpeciesId.VENONAT]: [ + new SpeciesEvolution(SpeciesId.VENOMOTH, 31, null, null) ], - [Species.DIGLETT]: [ - new SpeciesEvolution(Species.DUGTRIO, 26, null, null) + [SpeciesId.DIGLETT]: [ + new SpeciesEvolution(SpeciesId.DUGTRIO, 26, null, null) ], - [Species.MEOWTH]: [ - new SpeciesFormEvolution(Species.PERSIAN, "", "", 28, null, null) + [SpeciesId.MEOWTH]: [ + new SpeciesFormEvolution(SpeciesId.PERSIAN, "", "", 28, null, null) ], - [Species.PSYDUCK]: [ - new SpeciesEvolution(Species.GOLDUCK, 33, null, null) + [SpeciesId.PSYDUCK]: [ + new SpeciesEvolution(SpeciesId.GOLDUCK, 33, null, null) ], - [Species.MANKEY]: [ - new SpeciesEvolution(Species.PRIMEAPE, 28, null, null) + [SpeciesId.MANKEY]: [ + new SpeciesEvolution(SpeciesId.PRIMEAPE, 28, null, null) ], - [Species.POLIWAG]: [ - new SpeciesEvolution(Species.POLIWHIRL, 25, null, null) + [SpeciesId.POLIWAG]: [ + new SpeciesEvolution(SpeciesId.POLIWHIRL, 25, null, null) ], - [Species.ABRA]: [ - new SpeciesEvolution(Species.KADABRA, 16, null, null) + [SpeciesId.ABRA]: [ + new SpeciesEvolution(SpeciesId.KADABRA, 16, null, null) ], - [Species.MACHOP]: [ - new SpeciesEvolution(Species.MACHOKE, 28, null, null) + [SpeciesId.MACHOP]: [ + new SpeciesEvolution(SpeciesId.MACHOKE, 28, null, null) ], - [Species.BELLSPROUT]: [ - new SpeciesEvolution(Species.WEEPINBELL, 21, null, null) + [SpeciesId.BELLSPROUT]: [ + new SpeciesEvolution(SpeciesId.WEEPINBELL, 21, null, null) ], - [Species.TENTACOOL]: [ - new SpeciesEvolution(Species.TENTACRUEL, 30, null, null) + [SpeciesId.TENTACOOL]: [ + new SpeciesEvolution(SpeciesId.TENTACRUEL, 30, null, null) ], - [Species.GEODUDE]: [ - new SpeciesEvolution(Species.GRAVELER, 25, null, null) + [SpeciesId.GEODUDE]: [ + new SpeciesEvolution(SpeciesId.GRAVELER, 25, null, null) ], - [Species.PONYTA]: [ - new SpeciesEvolution(Species.RAPIDASH, 40, null, null) + [SpeciesId.PONYTA]: [ + new SpeciesEvolution(SpeciesId.RAPIDASH, 40, null, null) ], - [Species.SLOWPOKE]: [ - new SpeciesEvolution(Species.SLOWBRO, 37, null, null), - new SpeciesEvolution(Species.SLOWKING, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.SLOWPOKE]: [ + new SpeciesEvolution(SpeciesId.SLOWBRO, 37, null, null), + new SpeciesEvolution(SpeciesId.SLOWKING, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.MAGNEMITE]: [ - new SpeciesEvolution(Species.MAGNETON, 30, null, null) + [SpeciesId.MAGNEMITE]: [ + new SpeciesEvolution(SpeciesId.MAGNETON, 30, null, null) ], - [Species.DODUO]: [ - new SpeciesEvolution(Species.DODRIO, 31, null, null) + [SpeciesId.DODUO]: [ + new SpeciesEvolution(SpeciesId.DODRIO, 31, null, null) ], - [Species.SEEL]: [ - new SpeciesEvolution(Species.DEWGONG, 34, null, null) + [SpeciesId.SEEL]: [ + new SpeciesEvolution(SpeciesId.DEWGONG, 34, null, null) ], - [Species.GRIMER]: [ - new SpeciesEvolution(Species.MUK, 38, null, null) + [SpeciesId.GRIMER]: [ + new SpeciesEvolution(SpeciesId.MUK, 38, null, null) ], - [Species.GASTLY]: [ - new SpeciesEvolution(Species.HAUNTER, 25, null, null) + [SpeciesId.GASTLY]: [ + new SpeciesEvolution(SpeciesId.HAUNTER, 25, null, null) ], - [Species.DROWZEE]: [ - new SpeciesEvolution(Species.HYPNO, 26, null, null) + [SpeciesId.DROWZEE]: [ + new SpeciesEvolution(SpeciesId.HYPNO, 26, null, null) ], - [Species.KRABBY]: [ - new SpeciesEvolution(Species.KINGLER, 28, null, null) + [SpeciesId.KRABBY]: [ + new SpeciesEvolution(SpeciesId.KINGLER, 28, null, null) ], - [Species.VOLTORB]: [ - new SpeciesEvolution(Species.ELECTRODE, 30, null, null) + [SpeciesId.VOLTORB]: [ + new SpeciesEvolution(SpeciesId.ELECTRODE, 30, null, null) ], - [Species.CUBONE]: [ - new SpeciesEvolution(Species.ALOLA_MAROWAK, 28, null, new TimeOfDayEvolutionCondition("night")), - new SpeciesEvolution(Species.MAROWAK, 28, null, new TimeOfDayEvolutionCondition("day")) + [SpeciesId.CUBONE]: [ + new SpeciesEvolution(SpeciesId.ALOLA_MAROWAK, 28, null, new TimeOfDayEvolutionCondition("night")), + new SpeciesEvolution(SpeciesId.MAROWAK, 28, null, new TimeOfDayEvolutionCondition("day")) ], - [Species.TYROGUE]: [ + [SpeciesId.TYROGUE]: [ /** * Custom: Evolves into Hitmonlee, Hitmonchan or Hitmontop at level 20 * if it knows Low Sweep, Mach Punch, or Rapid Spin, respectively. * If Tyrogue knows multiple of these moves, its evolution is based on * the first qualifying move in its moveset. */ - new SpeciesEvolution(Species.HITMONLEE, 20, null, new TyrogueEvolutionCondition(Moves.LOW_SWEEP)), - new SpeciesEvolution(Species.HITMONCHAN, 20, null, new TyrogueEvolutionCondition(Moves.MACH_PUNCH)), - new SpeciesEvolution(Species.HITMONTOP, 20, null, new TyrogueEvolutionCondition(Moves.RAPID_SPIN)), + new SpeciesEvolution(SpeciesId.HITMONLEE, 20, null, new TyrogueEvolutionCondition(MoveId.LOW_SWEEP)), + new SpeciesEvolution(SpeciesId.HITMONCHAN, 20, null, new TyrogueEvolutionCondition(MoveId.MACH_PUNCH)), + new SpeciesEvolution(SpeciesId.HITMONTOP, 20, null, new TyrogueEvolutionCondition(MoveId.RAPID_SPIN)), ], - [Species.KOFFING]: [ - new SpeciesEvolution(Species.GALAR_WEEZING, 35, null, new TimeOfDayEvolutionCondition("night")), - new SpeciesEvolution(Species.WEEZING, 35, null, new TimeOfDayEvolutionCondition("day")) + [SpeciesId.KOFFING]: [ + new SpeciesEvolution(SpeciesId.GALAR_WEEZING, 35, null, new TimeOfDayEvolutionCondition("night")), + new SpeciesEvolution(SpeciesId.WEEZING, 35, null, new TimeOfDayEvolutionCondition("day")) ], - [Species.RHYHORN]: [ - new SpeciesEvolution(Species.RHYDON, 42, null, null) + [SpeciesId.RHYHORN]: [ + new SpeciesEvolution(SpeciesId.RHYDON, 42, null, null) ], - [Species.HORSEA]: [ - new SpeciesEvolution(Species.SEADRA, 32, null, null) + [SpeciesId.HORSEA]: [ + new SpeciesEvolution(SpeciesId.SEADRA, 32, null, null) ], - [Species.GOLDEEN]: [ - new SpeciesEvolution(Species.SEAKING, 33, null, null) + [SpeciesId.GOLDEEN]: [ + new SpeciesEvolution(SpeciesId.SEAKING, 33, null, null) ], - [Species.SMOOCHUM]: [ - new SpeciesEvolution(Species.JYNX, 30, null, null) + [SpeciesId.SMOOCHUM]: [ + new SpeciesEvolution(SpeciesId.JYNX, 30, null, null) ], - [Species.ELEKID]: [ - new SpeciesEvolution(Species.ELECTABUZZ, 30, null, null) + [SpeciesId.ELEKID]: [ + new SpeciesEvolution(SpeciesId.ELECTABUZZ, 30, null, null) ], - [Species.MAGBY]: [ - new SpeciesEvolution(Species.MAGMAR, 30, null, null) + [SpeciesId.MAGBY]: [ + new SpeciesEvolution(SpeciesId.MAGMAR, 30, null, null) ], - [Species.MAGIKARP]: [ - new SpeciesEvolution(Species.GYARADOS, 20, null, null) + [SpeciesId.MAGIKARP]: [ + new SpeciesEvolution(SpeciesId.GYARADOS, 20, null, null) ], - [Species.OMANYTE]: [ - new SpeciesEvolution(Species.OMASTAR, 40, null, null) + [SpeciesId.OMANYTE]: [ + new SpeciesEvolution(SpeciesId.OMASTAR, 40, null, null) ], - [Species.KABUTO]: [ - new SpeciesEvolution(Species.KABUTOPS, 40, null, null) + [SpeciesId.KABUTO]: [ + new SpeciesEvolution(SpeciesId.KABUTOPS, 40, null, null) ], - [Species.DRATINI]: [ - new SpeciesEvolution(Species.DRAGONAIR, 30, null, null) + [SpeciesId.DRATINI]: [ + new SpeciesEvolution(SpeciesId.DRAGONAIR, 30, null, null) ], - [Species.DRAGONAIR]: [ - new SpeciesEvolution(Species.DRAGONITE, 55, null, null) + [SpeciesId.DRAGONAIR]: [ + new SpeciesEvolution(SpeciesId.DRAGONITE, 55, null, null) ], - [Species.CHIKORITA]: [ - new SpeciesEvolution(Species.BAYLEEF, 16, null, null) + [SpeciesId.CHIKORITA]: [ + new SpeciesEvolution(SpeciesId.BAYLEEF, 16, null, null) ], - [Species.BAYLEEF]: [ - new SpeciesEvolution(Species.MEGANIUM, 32, null, null) + [SpeciesId.BAYLEEF]: [ + new SpeciesEvolution(SpeciesId.MEGANIUM, 32, null, null) ], - [Species.CYNDAQUIL]: [ - new SpeciesEvolution(Species.QUILAVA, 14, null, null) + [SpeciesId.CYNDAQUIL]: [ + new SpeciesEvolution(SpeciesId.QUILAVA, 14, null, null) ], - [Species.QUILAVA]: [ - new SpeciesEvolution(Species.HISUI_TYPHLOSION, 36, null, new TimeOfDayEvolutionCondition("night")), - new SpeciesEvolution(Species.TYPHLOSION, 36, null, new TimeOfDayEvolutionCondition("day")) + [SpeciesId.QUILAVA]: [ + new SpeciesEvolution(SpeciesId.HISUI_TYPHLOSION, 36, null, new TimeOfDayEvolutionCondition("night")), + new SpeciesEvolution(SpeciesId.TYPHLOSION, 36, null, new TimeOfDayEvolutionCondition("day")) ], - [Species.TOTODILE]: [ - new SpeciesEvolution(Species.CROCONAW, 18, null, null) + [SpeciesId.TOTODILE]: [ + new SpeciesEvolution(SpeciesId.CROCONAW, 18, null, null) ], - [Species.CROCONAW]: [ - new SpeciesEvolution(Species.FERALIGATR, 30, null, null) + [SpeciesId.CROCONAW]: [ + new SpeciesEvolution(SpeciesId.FERALIGATR, 30, null, null) ], - [Species.SENTRET]: [ - new SpeciesEvolution(Species.FURRET, 15, null, null) + [SpeciesId.SENTRET]: [ + new SpeciesEvolution(SpeciesId.FURRET, 15, null, null) ], - [Species.HOOTHOOT]: [ - new SpeciesEvolution(Species.NOCTOWL, 20, null, null) + [SpeciesId.HOOTHOOT]: [ + new SpeciesEvolution(SpeciesId.NOCTOWL, 20, null, null) ], - [Species.LEDYBA]: [ - new SpeciesEvolution(Species.LEDIAN, 18, null, null) + [SpeciesId.LEDYBA]: [ + new SpeciesEvolution(SpeciesId.LEDIAN, 18, null, null) ], - [Species.SPINARAK]: [ - new SpeciesEvolution(Species.ARIADOS, 22, null, null) + [SpeciesId.SPINARAK]: [ + new SpeciesEvolution(SpeciesId.ARIADOS, 22, null, null) ], - [Species.CHINCHOU]: [ - new SpeciesEvolution(Species.LANTURN, 27, null, null) + [SpeciesId.CHINCHOU]: [ + new SpeciesEvolution(SpeciesId.LANTURN, 27, null, null) ], - [Species.NATU]: [ - new SpeciesEvolution(Species.XATU, 25, null, null) + [SpeciesId.NATU]: [ + new SpeciesEvolution(SpeciesId.XATU, 25, null, null) ], - [Species.MAREEP]: [ - new SpeciesEvolution(Species.FLAAFFY, 15, null, null) + [SpeciesId.MAREEP]: [ + new SpeciesEvolution(SpeciesId.FLAAFFY, 15, null, null) ], - [Species.FLAAFFY]: [ - new SpeciesEvolution(Species.AMPHAROS, 30, null, null) + [SpeciesId.FLAAFFY]: [ + new SpeciesEvolution(SpeciesId.AMPHAROS, 30, null, null) ], - [Species.MARILL]: [ - new SpeciesEvolution(Species.AZUMARILL, 18, null, null) + [SpeciesId.MARILL]: [ + new SpeciesEvolution(SpeciesId.AZUMARILL, 18, null, null) ], - [Species.HOPPIP]: [ - new SpeciesEvolution(Species.SKIPLOOM, 18, null, null) + [SpeciesId.HOPPIP]: [ + new SpeciesEvolution(SpeciesId.SKIPLOOM, 18, null, null) ], - [Species.SKIPLOOM]: [ - new SpeciesEvolution(Species.JUMPLUFF, 27, null, null) + [SpeciesId.SKIPLOOM]: [ + new SpeciesEvolution(SpeciesId.JUMPLUFF, 27, null, null) ], - [Species.WOOPER]: [ - new SpeciesEvolution(Species.QUAGSIRE, 20, null, null) + [SpeciesId.WOOPER]: [ + new SpeciesEvolution(SpeciesId.QUAGSIRE, 20, null, null) ], - [Species.WYNAUT]: [ - new SpeciesEvolution(Species.WOBBUFFET, 15, null, null) + [SpeciesId.WYNAUT]: [ + new SpeciesEvolution(SpeciesId.WOBBUFFET, 15, null, null) ], - [Species.PINECO]: [ - new SpeciesEvolution(Species.FORRETRESS, 31, null, null) + [SpeciesId.PINECO]: [ + new SpeciesEvolution(SpeciesId.FORRETRESS, 31, null, null) ], - [Species.SNUBBULL]: [ - new SpeciesEvolution(Species.GRANBULL, 23, null, null) + [SpeciesId.SNUBBULL]: [ + new SpeciesEvolution(SpeciesId.GRANBULL, 23, null, null) ], - [Species.TEDDIURSA]: [ - new SpeciesEvolution(Species.URSARING, 30, null, null) + [SpeciesId.TEDDIURSA]: [ + new SpeciesEvolution(SpeciesId.URSARING, 30, null, null) ], - [Species.SLUGMA]: [ - new SpeciesEvolution(Species.MAGCARGO, 38, null, null) + [SpeciesId.SLUGMA]: [ + new SpeciesEvolution(SpeciesId.MAGCARGO, 38, null, null) ], - [Species.SWINUB]: [ - new SpeciesEvolution(Species.PILOSWINE, 33, null, null) + [SpeciesId.SWINUB]: [ + new SpeciesEvolution(SpeciesId.PILOSWINE, 33, null, null) ], - [Species.REMORAID]: [ - new SpeciesEvolution(Species.OCTILLERY, 25, null, null) + [SpeciesId.REMORAID]: [ + new SpeciesEvolution(SpeciesId.OCTILLERY, 25, null, null) ], - [Species.HOUNDOUR]: [ - new SpeciesEvolution(Species.HOUNDOOM, 24, null, null) + [SpeciesId.HOUNDOUR]: [ + new SpeciesEvolution(SpeciesId.HOUNDOOM, 24, null, null) ], - [Species.PHANPY]: [ - new SpeciesEvolution(Species.DONPHAN, 25, null, null) + [SpeciesId.PHANPY]: [ + new SpeciesEvolution(SpeciesId.DONPHAN, 25, null, null) ], - [Species.LARVITAR]: [ - new SpeciesEvolution(Species.PUPITAR, 30, null, null) + [SpeciesId.LARVITAR]: [ + new SpeciesEvolution(SpeciesId.PUPITAR, 30, null, null) ], - [Species.PUPITAR]: [ - new SpeciesEvolution(Species.TYRANITAR, 55, null, null) + [SpeciesId.PUPITAR]: [ + new SpeciesEvolution(SpeciesId.TYRANITAR, 55, null, null) ], - [Species.TREECKO]: [ - new SpeciesEvolution(Species.GROVYLE, 16, null, null) + [SpeciesId.TREECKO]: [ + new SpeciesEvolution(SpeciesId.GROVYLE, 16, null, null) ], - [Species.GROVYLE]: [ - new SpeciesEvolution(Species.SCEPTILE, 36, null, null) + [SpeciesId.GROVYLE]: [ + new SpeciesEvolution(SpeciesId.SCEPTILE, 36, null, null) ], - [Species.TORCHIC]: [ - new SpeciesEvolution(Species.COMBUSKEN, 16, null, null) + [SpeciesId.TORCHIC]: [ + new SpeciesEvolution(SpeciesId.COMBUSKEN, 16, null, null) ], - [Species.COMBUSKEN]: [ - new SpeciesEvolution(Species.BLAZIKEN, 36, null, null) + [SpeciesId.COMBUSKEN]: [ + new SpeciesEvolution(SpeciesId.BLAZIKEN, 36, null, null) ], - [Species.MUDKIP]: [ - new SpeciesEvolution(Species.MARSHTOMP, 16, null, null) + [SpeciesId.MUDKIP]: [ + new SpeciesEvolution(SpeciesId.MARSHTOMP, 16, null, null) ], - [Species.MARSHTOMP]: [ - new SpeciesEvolution(Species.SWAMPERT, 36, null, null) + [SpeciesId.MARSHTOMP]: [ + new SpeciesEvolution(SpeciesId.SWAMPERT, 36, null, null) ], - [Species.POOCHYENA]: [ - new SpeciesEvolution(Species.MIGHTYENA, 18, null, null) + [SpeciesId.POOCHYENA]: [ + new SpeciesEvolution(SpeciesId.MIGHTYENA, 18, null, null) ], - [Species.ZIGZAGOON]: [ - new SpeciesEvolution(Species.LINOONE, 20, null, null) + [SpeciesId.ZIGZAGOON]: [ + new SpeciesEvolution(SpeciesId.LINOONE, 20, null, null) ], - [Species.WURMPLE]: [ - new SpeciesEvolution(Species.SILCOON, 7, null, new TimeOfDayEvolutionCondition("day")), - new SpeciesEvolution(Species.CASCOON, 7, null, new TimeOfDayEvolutionCondition("night")) + [SpeciesId.WURMPLE]: [ + new SpeciesEvolution(SpeciesId.SILCOON, 7, null, new TimeOfDayEvolutionCondition("day")), + new SpeciesEvolution(SpeciesId.CASCOON, 7, null, new TimeOfDayEvolutionCondition("night")) ], - [Species.SILCOON]: [ - new SpeciesEvolution(Species.BEAUTIFLY, 10, null, null) + [SpeciesId.SILCOON]: [ + new SpeciesEvolution(SpeciesId.BEAUTIFLY, 10, null, null) ], - [Species.CASCOON]: [ - new SpeciesEvolution(Species.DUSTOX, 10, null, null) + [SpeciesId.CASCOON]: [ + new SpeciesEvolution(SpeciesId.DUSTOX, 10, null, null) ], - [Species.LOTAD]: [ - new SpeciesEvolution(Species.LOMBRE, 14, null, null) + [SpeciesId.LOTAD]: [ + new SpeciesEvolution(SpeciesId.LOMBRE, 14, null, null) ], - [Species.SEEDOT]: [ - new SpeciesEvolution(Species.NUZLEAF, 14, null, null) + [SpeciesId.SEEDOT]: [ + new SpeciesEvolution(SpeciesId.NUZLEAF, 14, null, null) ], - [Species.TAILLOW]: [ - new SpeciesEvolution(Species.SWELLOW, 22, null, null) + [SpeciesId.TAILLOW]: [ + new SpeciesEvolution(SpeciesId.SWELLOW, 22, null, null) ], - [Species.WINGULL]: [ - new SpeciesEvolution(Species.PELIPPER, 25, null, null) + [SpeciesId.WINGULL]: [ + new SpeciesEvolution(SpeciesId.PELIPPER, 25, null, null) ], - [Species.RALTS]: [ - new SpeciesEvolution(Species.KIRLIA, 20, null, null) + [SpeciesId.RALTS]: [ + new SpeciesEvolution(SpeciesId.KIRLIA, 20, null, null) ], - [Species.KIRLIA]: [ - new SpeciesEvolution(Species.GARDEVOIR, 30, null, new GenderEvolutionCondition(Gender.FEMALE)), - new SpeciesEvolution(Species.GALLADE, 30, null, new GenderEvolutionCondition(Gender.MALE)) + [SpeciesId.KIRLIA]: [ + new SpeciesEvolution(SpeciesId.GARDEVOIR, 30, null, new GenderEvolutionCondition(Gender.FEMALE)), + new SpeciesEvolution(SpeciesId.GALLADE, 30, null, new GenderEvolutionCondition(Gender.MALE)) ], - [Species.SURSKIT]: [ - new SpeciesEvolution(Species.MASQUERAIN, 22, null, null) + [SpeciesId.SURSKIT]: [ + new SpeciesEvolution(SpeciesId.MASQUERAIN, 22, null, null) ], - [Species.SHROOMISH]: [ - new SpeciesEvolution(Species.BRELOOM, 23, null, null) + [SpeciesId.SHROOMISH]: [ + new SpeciesEvolution(SpeciesId.BRELOOM, 23, null, null) ], - [Species.SLAKOTH]: [ - new SpeciesEvolution(Species.VIGOROTH, 18, null, null) + [SpeciesId.SLAKOTH]: [ + new SpeciesEvolution(SpeciesId.VIGOROTH, 18, null, null) ], - [Species.VIGOROTH]: [ - new SpeciesEvolution(Species.SLAKING, 36, null, null) + [SpeciesId.VIGOROTH]: [ + new SpeciesEvolution(SpeciesId.SLAKING, 36, null, null) ], - [Species.NINCADA]: [ - new SpeciesEvolution(Species.NINJASK, 20, null, null), - new SpeciesEvolution(Species.SHEDINJA, 20, null, new ShedinjaEvolutionCondition()) + [SpeciesId.NINCADA]: [ + new SpeciesEvolution(SpeciesId.NINJASK, 20, null, null), + new SpeciesEvolution(SpeciesId.SHEDINJA, 20, null, new ShedinjaEvolutionCondition()) ], - [Species.WHISMUR]: [ - new SpeciesEvolution(Species.LOUDRED, 20, null, null) + [SpeciesId.WHISMUR]: [ + new SpeciesEvolution(SpeciesId.LOUDRED, 20, null, null) ], - [Species.LOUDRED]: [ - new SpeciesEvolution(Species.EXPLOUD, 40, null, null) + [SpeciesId.LOUDRED]: [ + new SpeciesEvolution(SpeciesId.EXPLOUD, 40, null, null) ], - [Species.MAKUHITA]: [ - new SpeciesEvolution(Species.HARIYAMA, 24, null, null) + [SpeciesId.MAKUHITA]: [ + new SpeciesEvolution(SpeciesId.HARIYAMA, 24, null, null) ], - [Species.ARON]: [ - new SpeciesEvolution(Species.LAIRON, 32, null, null) + [SpeciesId.ARON]: [ + new SpeciesEvolution(SpeciesId.LAIRON, 32, null, null) ], - [Species.LAIRON]: [ - new SpeciesEvolution(Species.AGGRON, 42, null, null) + [SpeciesId.LAIRON]: [ + new SpeciesEvolution(SpeciesId.AGGRON, 42, null, null) ], - [Species.MEDITITE]: [ - new SpeciesEvolution(Species.MEDICHAM, 37, null, null) + [SpeciesId.MEDITITE]: [ + new SpeciesEvolution(SpeciesId.MEDICHAM, 37, null, null) ], - [Species.ELECTRIKE]: [ - new SpeciesEvolution(Species.MANECTRIC, 26, null, null) + [SpeciesId.ELECTRIKE]: [ + new SpeciesEvolution(SpeciesId.MANECTRIC, 26, null, null) ], - [Species.GULPIN]: [ - new SpeciesEvolution(Species.SWALOT, 26, null, null) + [SpeciesId.GULPIN]: [ + new SpeciesEvolution(SpeciesId.SWALOT, 26, null, null) ], - [Species.CARVANHA]: [ - new SpeciesEvolution(Species.SHARPEDO, 30, null, null) + [SpeciesId.CARVANHA]: [ + new SpeciesEvolution(SpeciesId.SHARPEDO, 30, null, null) ], - [Species.WAILMER]: [ - new SpeciesEvolution(Species.WAILORD, 40, null, null) + [SpeciesId.WAILMER]: [ + new SpeciesEvolution(SpeciesId.WAILORD, 40, null, null) ], - [Species.NUMEL]: [ - new SpeciesEvolution(Species.CAMERUPT, 33, null, null) + [SpeciesId.NUMEL]: [ + new SpeciesEvolution(SpeciesId.CAMERUPT, 33, null, null) ], - [Species.SPOINK]: [ - new SpeciesEvolution(Species.GRUMPIG, 32, null, null) + [SpeciesId.SPOINK]: [ + new SpeciesEvolution(SpeciesId.GRUMPIG, 32, null, null) ], - [Species.TRAPINCH]: [ - new SpeciesEvolution(Species.VIBRAVA, 35, null, null) + [SpeciesId.TRAPINCH]: [ + new SpeciesEvolution(SpeciesId.VIBRAVA, 35, null, null) ], - [Species.VIBRAVA]: [ - new SpeciesEvolution(Species.FLYGON, 45, null, null) + [SpeciesId.VIBRAVA]: [ + new SpeciesEvolution(SpeciesId.FLYGON, 45, null, null) ], - [Species.CACNEA]: [ - new SpeciesEvolution(Species.CACTURNE, 32, null, null) + [SpeciesId.CACNEA]: [ + new SpeciesEvolution(SpeciesId.CACTURNE, 32, null, null) ], - [Species.SWABLU]: [ - new SpeciesEvolution(Species.ALTARIA, 35, null, null) + [SpeciesId.SWABLU]: [ + new SpeciesEvolution(SpeciesId.ALTARIA, 35, null, null) ], - [Species.BARBOACH]: [ - new SpeciesEvolution(Species.WHISCASH, 30, null, null) + [SpeciesId.BARBOACH]: [ + new SpeciesEvolution(SpeciesId.WHISCASH, 30, null, null) ], - [Species.CORPHISH]: [ - new SpeciesEvolution(Species.CRAWDAUNT, 30, null, null) + [SpeciesId.CORPHISH]: [ + new SpeciesEvolution(SpeciesId.CRAWDAUNT, 30, null, null) ], - [Species.BALTOY]: [ - new SpeciesEvolution(Species.CLAYDOL, 36, null, null) + [SpeciesId.BALTOY]: [ + new SpeciesEvolution(SpeciesId.CLAYDOL, 36, null, null) ], - [Species.LILEEP]: [ - new SpeciesEvolution(Species.CRADILY, 40, null, null) + [SpeciesId.LILEEP]: [ + new SpeciesEvolution(SpeciesId.CRADILY, 40, null, null) ], - [Species.ANORITH]: [ - new SpeciesEvolution(Species.ARMALDO, 40, null, null) + [SpeciesId.ANORITH]: [ + new SpeciesEvolution(SpeciesId.ARMALDO, 40, null, null) ], - [Species.SHUPPET]: [ - new SpeciesEvolution(Species.BANETTE, 37, null, null) + [SpeciesId.SHUPPET]: [ + new SpeciesEvolution(SpeciesId.BANETTE, 37, null, null) ], - [Species.DUSKULL]: [ - new SpeciesEvolution(Species.DUSCLOPS, 37, null, null) + [SpeciesId.DUSKULL]: [ + new SpeciesEvolution(SpeciesId.DUSCLOPS, 37, null, null) ], - [Species.SNORUNT]: [ - new SpeciesEvolution(Species.GLALIE, 42, null, new GenderEvolutionCondition(Gender.MALE)), - new SpeciesEvolution(Species.FROSLASS, 42, null, new GenderEvolutionCondition(Gender.FEMALE)) + [SpeciesId.SNORUNT]: [ + new SpeciesEvolution(SpeciesId.GLALIE, 42, null, new GenderEvolutionCondition(Gender.MALE)), + new SpeciesEvolution(SpeciesId.FROSLASS, 42, null, new GenderEvolutionCondition(Gender.FEMALE)) ], - [Species.SPHEAL]: [ - new SpeciesEvolution(Species.SEALEO, 32, null, null) + [SpeciesId.SPHEAL]: [ + new SpeciesEvolution(SpeciesId.SEALEO, 32, null, null) ], - [Species.SEALEO]: [ - new SpeciesEvolution(Species.WALREIN, 44, null, null) + [SpeciesId.SEALEO]: [ + new SpeciesEvolution(SpeciesId.WALREIN, 44, null, null) ], - [Species.BAGON]: [ - new SpeciesEvolution(Species.SHELGON, 30, null, null) + [SpeciesId.BAGON]: [ + new SpeciesEvolution(SpeciesId.SHELGON, 30, null, null) ], - [Species.SHELGON]: [ - new SpeciesEvolution(Species.SALAMENCE, 50, null, null) + [SpeciesId.SHELGON]: [ + new SpeciesEvolution(SpeciesId.SALAMENCE, 50, null, null) ], - [Species.BELDUM]: [ - new SpeciesEvolution(Species.METANG, 20, null, null) + [SpeciesId.BELDUM]: [ + new SpeciesEvolution(SpeciesId.METANG, 20, null, null) ], - [Species.METANG]: [ - new SpeciesEvolution(Species.METAGROSS, 45, null, null) + [SpeciesId.METANG]: [ + new SpeciesEvolution(SpeciesId.METAGROSS, 45, null, null) ], - [Species.TURTWIG]: [ - new SpeciesEvolution(Species.GROTLE, 18, null, null) + [SpeciesId.TURTWIG]: [ + new SpeciesEvolution(SpeciesId.GROTLE, 18, null, null) ], - [Species.GROTLE]: [ - new SpeciesEvolution(Species.TORTERRA, 32, null, null) + [SpeciesId.GROTLE]: [ + new SpeciesEvolution(SpeciesId.TORTERRA, 32, null, null) ], - [Species.CHIMCHAR]: [ - new SpeciesEvolution(Species.MONFERNO, 14, null, null) + [SpeciesId.CHIMCHAR]: [ + new SpeciesEvolution(SpeciesId.MONFERNO, 14, null, null) ], - [Species.MONFERNO]: [ - new SpeciesEvolution(Species.INFERNAPE, 36, null, null) + [SpeciesId.MONFERNO]: [ + new SpeciesEvolution(SpeciesId.INFERNAPE, 36, null, null) ], - [Species.PIPLUP]: [ - new SpeciesEvolution(Species.PRINPLUP, 16, null, null) + [SpeciesId.PIPLUP]: [ + new SpeciesEvolution(SpeciesId.PRINPLUP, 16, null, null) ], - [Species.PRINPLUP]: [ - new SpeciesEvolution(Species.EMPOLEON, 36, null, null) + [SpeciesId.PRINPLUP]: [ + new SpeciesEvolution(SpeciesId.EMPOLEON, 36, null, null) ], - [Species.STARLY]: [ - new SpeciesEvolution(Species.STARAVIA, 14, null, null) + [SpeciesId.STARLY]: [ + new SpeciesEvolution(SpeciesId.STARAVIA, 14, null, null) ], - [Species.STARAVIA]: [ - new SpeciesEvolution(Species.STARAPTOR, 34, null, null) + [SpeciesId.STARAVIA]: [ + new SpeciesEvolution(SpeciesId.STARAPTOR, 34, null, null) ], - [Species.BIDOOF]: [ - new SpeciesEvolution(Species.BIBAREL, 15, null, null) + [SpeciesId.BIDOOF]: [ + new SpeciesEvolution(SpeciesId.BIBAREL, 15, null, null) ], - [Species.KRICKETOT]: [ - new SpeciesEvolution(Species.KRICKETUNE, 10, null, null) + [SpeciesId.KRICKETOT]: [ + new SpeciesEvolution(SpeciesId.KRICKETUNE, 10, null, null) ], - [Species.SHINX]: [ - new SpeciesEvolution(Species.LUXIO, 15, null, null) + [SpeciesId.SHINX]: [ + new SpeciesEvolution(SpeciesId.LUXIO, 15, null, null) ], - [Species.LUXIO]: [ - new SpeciesEvolution(Species.LUXRAY, 30, null, null) + [SpeciesId.LUXIO]: [ + new SpeciesEvolution(SpeciesId.LUXRAY, 30, null, null) ], - [Species.CRANIDOS]: [ - new SpeciesEvolution(Species.RAMPARDOS, 30, null, null) + [SpeciesId.CRANIDOS]: [ + new SpeciesEvolution(SpeciesId.RAMPARDOS, 30, null, null) ], - [Species.SHIELDON]: [ - new SpeciesEvolution(Species.BASTIODON, 30, null, null) + [SpeciesId.SHIELDON]: [ + new SpeciesEvolution(SpeciesId.BASTIODON, 30, null, null) ], - [Species.BURMY]: [ - new SpeciesEvolution(Species.MOTHIM, 20, null, new GenderEvolutionCondition(Gender.MALE)), - new SpeciesEvolution(Species.WORMADAM, 20, null, new GenderEvolutionCondition(Gender.FEMALE)) + [SpeciesId.BURMY]: [ + new SpeciesEvolution(SpeciesId.MOTHIM, 20, null, new GenderEvolutionCondition(Gender.MALE)), + new SpeciesEvolution(SpeciesId.WORMADAM, 20, null, new GenderEvolutionCondition(Gender.FEMALE)) ], - [Species.COMBEE]: [ - new SpeciesEvolution(Species.VESPIQUEN, 21, null, new GenderEvolutionCondition(Gender.FEMALE)) + [SpeciesId.COMBEE]: [ + new SpeciesEvolution(SpeciesId.VESPIQUEN, 21, null, new GenderEvolutionCondition(Gender.FEMALE)) ], - [Species.BUIZEL]: [ - new SpeciesEvolution(Species.FLOATZEL, 26, null, null) + [SpeciesId.BUIZEL]: [ + new SpeciesEvolution(SpeciesId.FLOATZEL, 26, null, null) ], - [Species.CHERUBI]: [ - new SpeciesEvolution(Species.CHERRIM, 25, null, null) + [SpeciesId.CHERUBI]: [ + new SpeciesEvolution(SpeciesId.CHERRIM, 25, null, null) ], - [Species.SHELLOS]: [ - new SpeciesEvolution(Species.GASTRODON, 30, null, null) + [SpeciesId.SHELLOS]: [ + new SpeciesEvolution(SpeciesId.GASTRODON, 30, null, null) ], - [Species.DRIFLOON]: [ - new SpeciesEvolution(Species.DRIFBLIM, 28, null, null) + [SpeciesId.DRIFLOON]: [ + new SpeciesEvolution(SpeciesId.DRIFBLIM, 28, null, null) ], - [Species.GLAMEOW]: [ - new SpeciesEvolution(Species.PURUGLY, 38, null, null) + [SpeciesId.GLAMEOW]: [ + new SpeciesEvolution(SpeciesId.PURUGLY, 38, null, null) ], - [Species.STUNKY]: [ - new SpeciesEvolution(Species.SKUNTANK, 34, null, null) + [SpeciesId.STUNKY]: [ + new SpeciesEvolution(SpeciesId.SKUNTANK, 34, null, null) ], - [Species.BRONZOR]: [ - new SpeciesEvolution(Species.BRONZONG, 33, null, null) + [SpeciesId.BRONZOR]: [ + new SpeciesEvolution(SpeciesId.BRONZONG, 33, null, null) ], - [Species.GIBLE]: [ - new SpeciesEvolution(Species.GABITE, 24, null, null) + [SpeciesId.GIBLE]: [ + new SpeciesEvolution(SpeciesId.GABITE, 24, null, null) ], - [Species.GABITE]: [ - new SpeciesEvolution(Species.GARCHOMP, 48, null, null) + [SpeciesId.GABITE]: [ + new SpeciesEvolution(SpeciesId.GARCHOMP, 48, null, null) ], - [Species.HIPPOPOTAS]: [ - new SpeciesEvolution(Species.HIPPOWDON, 34, null, null) + [SpeciesId.HIPPOPOTAS]: [ + new SpeciesEvolution(SpeciesId.HIPPOWDON, 34, null, null) ], - [Species.SKORUPI]: [ - new SpeciesEvolution(Species.DRAPION, 40, null, null) + [SpeciesId.SKORUPI]: [ + new SpeciesEvolution(SpeciesId.DRAPION, 40, null, null) ], - [Species.CROAGUNK]: [ - new SpeciesEvolution(Species.TOXICROAK, 37, null, null) + [SpeciesId.CROAGUNK]: [ + new SpeciesEvolution(SpeciesId.TOXICROAK, 37, null, null) ], - [Species.FINNEON]: [ - new SpeciesEvolution(Species.LUMINEON, 31, null, null) + [SpeciesId.FINNEON]: [ + new SpeciesEvolution(SpeciesId.LUMINEON, 31, null, null) ], - [Species.MANTYKE]: [ - new SpeciesEvolution(Species.MANTINE, 32, null, new CaughtEvolutionCondition(Species.REMORAID), SpeciesWildEvolutionDelay.MEDIUM) + [SpeciesId.MANTYKE]: [ + new SpeciesEvolution(SpeciesId.MANTINE, 32, null, new CaughtEvolutionCondition(SpeciesId.REMORAID), SpeciesWildEvolutionDelay.MEDIUM) ], - [Species.SNOVER]: [ - new SpeciesEvolution(Species.ABOMASNOW, 40, null, null) + [SpeciesId.SNOVER]: [ + new SpeciesEvolution(SpeciesId.ABOMASNOW, 40, null, null) ], - [Species.SNIVY]: [ - new SpeciesEvolution(Species.SERVINE, 17, null, null) + [SpeciesId.SNIVY]: [ + new SpeciesEvolution(SpeciesId.SERVINE, 17, null, null) ], - [Species.SERVINE]: [ - new SpeciesEvolution(Species.SERPERIOR, 36, null, null) + [SpeciesId.SERVINE]: [ + new SpeciesEvolution(SpeciesId.SERPERIOR, 36, null, null) ], - [Species.TEPIG]: [ - new SpeciesEvolution(Species.PIGNITE, 17, null, null) + [SpeciesId.TEPIG]: [ + new SpeciesEvolution(SpeciesId.PIGNITE, 17, null, null) ], - [Species.PIGNITE]: [ - new SpeciesEvolution(Species.EMBOAR, 36, null, null) + [SpeciesId.PIGNITE]: [ + new SpeciesEvolution(SpeciesId.EMBOAR, 36, null, null) ], - [Species.OSHAWOTT]: [ - new SpeciesEvolution(Species.DEWOTT, 17, null, null) + [SpeciesId.OSHAWOTT]: [ + new SpeciesEvolution(SpeciesId.DEWOTT, 17, null, null) ], - [Species.DEWOTT]: [ - new SpeciesEvolution(Species.HISUI_SAMUROTT, 36, null, new TimeOfDayEvolutionCondition("night")), - new SpeciesEvolution(Species.SAMUROTT, 36, null, new TimeOfDayEvolutionCondition("day")) + [SpeciesId.DEWOTT]: [ + new SpeciesEvolution(SpeciesId.HISUI_SAMUROTT, 36, null, new TimeOfDayEvolutionCondition("night")), + new SpeciesEvolution(SpeciesId.SAMUROTT, 36, null, new TimeOfDayEvolutionCondition("day")) ], - [Species.PATRAT]: [ - new SpeciesEvolution(Species.WATCHOG, 20, null, null) + [SpeciesId.PATRAT]: [ + new SpeciesEvolution(SpeciesId.WATCHOG, 20, null, null) ], - [Species.LILLIPUP]: [ - new SpeciesEvolution(Species.HERDIER, 16, null, null) + [SpeciesId.LILLIPUP]: [ + new SpeciesEvolution(SpeciesId.HERDIER, 16, null, null) ], - [Species.HERDIER]: [ - new SpeciesEvolution(Species.STOUTLAND, 32, null, null) + [SpeciesId.HERDIER]: [ + new SpeciesEvolution(SpeciesId.STOUTLAND, 32, null, null) ], - [Species.PURRLOIN]: [ - new SpeciesEvolution(Species.LIEPARD, 20, null, null) + [SpeciesId.PURRLOIN]: [ + new SpeciesEvolution(SpeciesId.LIEPARD, 20, null, null) ], - [Species.PIDOVE]: [ - new SpeciesEvolution(Species.TRANQUILL, 21, null, null) + [SpeciesId.PIDOVE]: [ + new SpeciesEvolution(SpeciesId.TRANQUILL, 21, null, null) ], - [Species.TRANQUILL]: [ - new SpeciesEvolution(Species.UNFEZANT, 32, null, null) + [SpeciesId.TRANQUILL]: [ + new SpeciesEvolution(SpeciesId.UNFEZANT, 32, null, null) ], - [Species.BLITZLE]: [ - new SpeciesEvolution(Species.ZEBSTRIKA, 27, null, null) + [SpeciesId.BLITZLE]: [ + new SpeciesEvolution(SpeciesId.ZEBSTRIKA, 27, null, null) ], - [Species.ROGGENROLA]: [ - new SpeciesEvolution(Species.BOLDORE, 25, null, null) + [SpeciesId.ROGGENROLA]: [ + new SpeciesEvolution(SpeciesId.BOLDORE, 25, null, null) ], - [Species.DRILBUR]: [ - new SpeciesEvolution(Species.EXCADRILL, 31, null, null) + [SpeciesId.DRILBUR]: [ + new SpeciesEvolution(SpeciesId.EXCADRILL, 31, null, null) ], - [Species.TIMBURR]: [ - new SpeciesEvolution(Species.GURDURR, 25, null, null) + [SpeciesId.TIMBURR]: [ + new SpeciesEvolution(SpeciesId.GURDURR, 25, null, null) ], - [Species.TYMPOLE]: [ - new SpeciesEvolution(Species.PALPITOAD, 25, null, null) + [SpeciesId.TYMPOLE]: [ + new SpeciesEvolution(SpeciesId.PALPITOAD, 25, null, null) ], - [Species.PALPITOAD]: [ - new SpeciesEvolution(Species.SEISMITOAD, 36, null, null) + [SpeciesId.PALPITOAD]: [ + new SpeciesEvolution(SpeciesId.SEISMITOAD, 36, null, null) ], - [Species.SEWADDLE]: [ - new SpeciesEvolution(Species.SWADLOON, 20, null, null) + [SpeciesId.SEWADDLE]: [ + new SpeciesEvolution(SpeciesId.SWADLOON, 20, null, null) ], - [Species.VENIPEDE]: [ - new SpeciesEvolution(Species.WHIRLIPEDE, 22, null, null) + [SpeciesId.VENIPEDE]: [ + new SpeciesEvolution(SpeciesId.WHIRLIPEDE, 22, null, null) ], - [Species.WHIRLIPEDE]: [ - new SpeciesEvolution(Species.SCOLIPEDE, 30, null, null) + [SpeciesId.WHIRLIPEDE]: [ + new SpeciesEvolution(SpeciesId.SCOLIPEDE, 30, null, null) ], - [Species.SANDILE]: [ - new SpeciesEvolution(Species.KROKOROK, 29, null, null) + [SpeciesId.SANDILE]: [ + new SpeciesEvolution(SpeciesId.KROKOROK, 29, null, null) ], - [Species.KROKOROK]: [ - new SpeciesEvolution(Species.KROOKODILE, 40, null, null) + [SpeciesId.KROKOROK]: [ + new SpeciesEvolution(SpeciesId.KROOKODILE, 40, null, null) ], - [Species.DARUMAKA]: [ - new SpeciesEvolution(Species.DARMANITAN, 35, null, null) + [SpeciesId.DARUMAKA]: [ + new SpeciesEvolution(SpeciesId.DARMANITAN, 35, null, null) ], - [Species.DWEBBLE]: [ - new SpeciesEvolution(Species.CRUSTLE, 34, null, null) + [SpeciesId.DWEBBLE]: [ + new SpeciesEvolution(SpeciesId.CRUSTLE, 34, null, null) ], - [Species.SCRAGGY]: [ - new SpeciesEvolution(Species.SCRAFTY, 39, null, null) + [SpeciesId.SCRAGGY]: [ + new SpeciesEvolution(SpeciesId.SCRAFTY, 39, null, null) ], - [Species.YAMASK]: [ - new SpeciesEvolution(Species.COFAGRIGUS, 34, null, null) + [SpeciesId.YAMASK]: [ + new SpeciesEvolution(SpeciesId.COFAGRIGUS, 34, null, null) ], - [Species.TIRTOUGA]: [ - new SpeciesEvolution(Species.CARRACOSTA, 37, null, null) + [SpeciesId.TIRTOUGA]: [ + new SpeciesEvolution(SpeciesId.CARRACOSTA, 37, null, null) ], - [Species.ARCHEN]: [ - new SpeciesEvolution(Species.ARCHEOPS, 37, null, null) + [SpeciesId.ARCHEN]: [ + new SpeciesEvolution(SpeciesId.ARCHEOPS, 37, null, null) ], - [Species.TRUBBISH]: [ - new SpeciesEvolution(Species.GARBODOR, 36, null, null) + [SpeciesId.TRUBBISH]: [ + new SpeciesEvolution(SpeciesId.GARBODOR, 36, null, null) ], - [Species.ZORUA]: [ - new SpeciesEvolution(Species.ZOROARK, 30, null, null) + [SpeciesId.ZORUA]: [ + new SpeciesEvolution(SpeciesId.ZOROARK, 30, null, null) ], - [Species.GOTHITA]: [ - new SpeciesEvolution(Species.GOTHORITA, 32, null, null) + [SpeciesId.GOTHITA]: [ + new SpeciesEvolution(SpeciesId.GOTHORITA, 32, null, null) ], - [Species.GOTHORITA]: [ - new SpeciesEvolution(Species.GOTHITELLE, 41, null, null) + [SpeciesId.GOTHORITA]: [ + new SpeciesEvolution(SpeciesId.GOTHITELLE, 41, null, null) ], - [Species.SOLOSIS]: [ - new SpeciesEvolution(Species.DUOSION, 32, null, null) + [SpeciesId.SOLOSIS]: [ + new SpeciesEvolution(SpeciesId.DUOSION, 32, null, null) ], - [Species.DUOSION]: [ - new SpeciesEvolution(Species.REUNICLUS, 41, null, null) + [SpeciesId.DUOSION]: [ + new SpeciesEvolution(SpeciesId.REUNICLUS, 41, null, null) ], - [Species.DUCKLETT]: [ - new SpeciesEvolution(Species.SWANNA, 35, null, null) + [SpeciesId.DUCKLETT]: [ + new SpeciesEvolution(SpeciesId.SWANNA, 35, null, null) ], - [Species.VANILLITE]: [ - new SpeciesEvolution(Species.VANILLISH, 35, null, null) + [SpeciesId.VANILLITE]: [ + new SpeciesEvolution(SpeciesId.VANILLISH, 35, null, null) ], - [Species.VANILLISH]: [ - new SpeciesEvolution(Species.VANILLUXE, 47, null, null) + [SpeciesId.VANILLISH]: [ + new SpeciesEvolution(SpeciesId.VANILLUXE, 47, null, null) ], - [Species.DEERLING]: [ - new SpeciesEvolution(Species.SAWSBUCK, 34, null, null) + [SpeciesId.DEERLING]: [ + new SpeciesEvolution(SpeciesId.SAWSBUCK, 34, null, null) ], - [Species.FOONGUS]: [ - new SpeciesEvolution(Species.AMOONGUSS, 39, null, null) + [SpeciesId.FOONGUS]: [ + new SpeciesEvolution(SpeciesId.AMOONGUSS, 39, null, null) ], - [Species.FRILLISH]: [ - new SpeciesEvolution(Species.JELLICENT, 40, null, null) + [SpeciesId.FRILLISH]: [ + new SpeciesEvolution(SpeciesId.JELLICENT, 40, null, null) ], - [Species.JOLTIK]: [ - new SpeciesEvolution(Species.GALVANTULA, 36, null, null) + [SpeciesId.JOLTIK]: [ + new SpeciesEvolution(SpeciesId.GALVANTULA, 36, null, null) ], - [Species.FERROSEED]: [ - new SpeciesEvolution(Species.FERROTHORN, 40, null, null) + [SpeciesId.FERROSEED]: [ + new SpeciesEvolution(SpeciesId.FERROTHORN, 40, null, null) ], - [Species.KLINK]: [ - new SpeciesEvolution(Species.KLANG, 38, null, null) + [SpeciesId.KLINK]: [ + new SpeciesEvolution(SpeciesId.KLANG, 38, null, null) ], - [Species.KLANG]: [ - new SpeciesEvolution(Species.KLINKLANG, 49, null, null) + [SpeciesId.KLANG]: [ + new SpeciesEvolution(SpeciesId.KLINKLANG, 49, null, null) ], - [Species.TYNAMO]: [ - new SpeciesEvolution(Species.EELEKTRIK, 39, null, null) + [SpeciesId.TYNAMO]: [ + new SpeciesEvolution(SpeciesId.EELEKTRIK, 39, null, null) ], - [Species.ELGYEM]: [ - new SpeciesEvolution(Species.BEHEEYEM, 42, null, null) + [SpeciesId.ELGYEM]: [ + new SpeciesEvolution(SpeciesId.BEHEEYEM, 42, null, null) ], - [Species.LITWICK]: [ - new SpeciesEvolution(Species.LAMPENT, 41, null, null) + [SpeciesId.LITWICK]: [ + new SpeciesEvolution(SpeciesId.LAMPENT, 41, null, null) ], - [Species.AXEW]: [ - new SpeciesEvolution(Species.FRAXURE, 38, null, null) + [SpeciesId.AXEW]: [ + new SpeciesEvolution(SpeciesId.FRAXURE, 38, null, null) ], - [Species.FRAXURE]: [ - new SpeciesEvolution(Species.HAXORUS, 48, null, null) + [SpeciesId.FRAXURE]: [ + new SpeciesEvolution(SpeciesId.HAXORUS, 48, null, null) ], - [Species.CUBCHOO]: [ - new SpeciesEvolution(Species.BEARTIC, 37, null, null) + [SpeciesId.CUBCHOO]: [ + new SpeciesEvolution(SpeciesId.BEARTIC, 37, null, null) ], - [Species.MIENFOO]: [ - new SpeciesEvolution(Species.MIENSHAO, 50, null, null) + [SpeciesId.MIENFOO]: [ + new SpeciesEvolution(SpeciesId.MIENSHAO, 50, null, null) ], - [Species.GOLETT]: [ - new SpeciesEvolution(Species.GOLURK, 43, null, null) + [SpeciesId.GOLETT]: [ + new SpeciesEvolution(SpeciesId.GOLURK, 43, null, null) ], - [Species.PAWNIARD]: [ - new SpeciesEvolution(Species.BISHARP, 52, null, null) + [SpeciesId.PAWNIARD]: [ + new SpeciesEvolution(SpeciesId.BISHARP, 52, null, null) ], - [Species.BISHARP]: [ - new SpeciesEvolution(Species.KINGAMBIT, 1, EvolutionItem.LEADERS_CREST, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.BISHARP]: [ + new SpeciesEvolution(SpeciesId.KINGAMBIT, 1, EvolutionItem.LEADERS_CREST, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.RUFFLET]: [ - new SpeciesEvolution(Species.HISUI_BRAVIARY, 54, null, new TimeOfDayEvolutionCondition("night")), - new SpeciesEvolution(Species.BRAVIARY, 54, null, new TimeOfDayEvolutionCondition("day")) + [SpeciesId.RUFFLET]: [ + new SpeciesEvolution(SpeciesId.HISUI_BRAVIARY, 54, null, new TimeOfDayEvolutionCondition("night")), + new SpeciesEvolution(SpeciesId.BRAVIARY, 54, null, new TimeOfDayEvolutionCondition("day")) ], - [Species.VULLABY]: [ - new SpeciesEvolution(Species.MANDIBUZZ, 54, null, null) + [SpeciesId.VULLABY]: [ + new SpeciesEvolution(SpeciesId.MANDIBUZZ, 54, null, null) ], - [Species.DEINO]: [ - new SpeciesEvolution(Species.ZWEILOUS, 50, null, null) + [SpeciesId.DEINO]: [ + new SpeciesEvolution(SpeciesId.ZWEILOUS, 50, null, null) ], - [Species.ZWEILOUS]: [ - new SpeciesEvolution(Species.HYDREIGON, 64, null, null) + [SpeciesId.ZWEILOUS]: [ + new SpeciesEvolution(SpeciesId.HYDREIGON, 64, null, null) ], - [Species.LARVESTA]: [ - new SpeciesEvolution(Species.VOLCARONA, 59, null, null) + [SpeciesId.LARVESTA]: [ + new SpeciesEvolution(SpeciesId.VOLCARONA, 59, null, null) ], - [Species.CHESPIN]: [ - new SpeciesEvolution(Species.QUILLADIN, 16, null, null) + [SpeciesId.CHESPIN]: [ + new SpeciesEvolution(SpeciesId.QUILLADIN, 16, null, null) ], - [Species.QUILLADIN]: [ - new SpeciesEvolution(Species.CHESNAUGHT, 36, null, null) + [SpeciesId.QUILLADIN]: [ + new SpeciesEvolution(SpeciesId.CHESNAUGHT, 36, null, null) ], - [Species.FENNEKIN]: [ - new SpeciesEvolution(Species.BRAIXEN, 16, null, null) + [SpeciesId.FENNEKIN]: [ + new SpeciesEvolution(SpeciesId.BRAIXEN, 16, null, null) ], - [Species.BRAIXEN]: [ - new SpeciesEvolution(Species.DELPHOX, 36, null, null) + [SpeciesId.BRAIXEN]: [ + new SpeciesEvolution(SpeciesId.DELPHOX, 36, null, null) ], - [Species.FROAKIE]: [ - new SpeciesEvolution(Species.FROGADIER, 16, null, null) + [SpeciesId.FROAKIE]: [ + new SpeciesEvolution(SpeciesId.FROGADIER, 16, null, null) ], - [Species.FROGADIER]: [ - new SpeciesEvolution(Species.GRENINJA, 36, null, null) + [SpeciesId.FROGADIER]: [ + new SpeciesEvolution(SpeciesId.GRENINJA, 36, null, null) ], - [Species.BUNNELBY]: [ - new SpeciesEvolution(Species.DIGGERSBY, 20, null, null) + [SpeciesId.BUNNELBY]: [ + new SpeciesEvolution(SpeciesId.DIGGERSBY, 20, null, null) ], - [Species.FLETCHLING]: [ - new SpeciesEvolution(Species.FLETCHINDER, 17, null, null) + [SpeciesId.FLETCHLING]: [ + new SpeciesEvolution(SpeciesId.FLETCHINDER, 17, null, null) ], - [Species.FLETCHINDER]: [ - new SpeciesEvolution(Species.TALONFLAME, 35, null, null) + [SpeciesId.FLETCHINDER]: [ + new SpeciesEvolution(SpeciesId.TALONFLAME, 35, null, null) ], - [Species.SCATTERBUG]: [ - new SpeciesEvolution(Species.SPEWPA, 9, null, null) + [SpeciesId.SCATTERBUG]: [ + new SpeciesEvolution(SpeciesId.SPEWPA, 9, null, null) ], - [Species.SPEWPA]: [ - new SpeciesEvolution(Species.VIVILLON, 12, null, null) + [SpeciesId.SPEWPA]: [ + new SpeciesEvolution(SpeciesId.VIVILLON, 12, null, null) ], - [Species.LITLEO]: [ - new SpeciesEvolution(Species.PYROAR, 35, null, null) + [SpeciesId.LITLEO]: [ + new SpeciesEvolution(SpeciesId.PYROAR, 35, null, null) ], - [Species.FLABEBE]: [ - new SpeciesEvolution(Species.FLOETTE, 19, null, null) + [SpeciesId.FLABEBE]: [ + new SpeciesEvolution(SpeciesId.FLOETTE, 19, null, null) ], - [Species.SKIDDO]: [ - new SpeciesEvolution(Species.GOGOAT, 32, null, null) + [SpeciesId.SKIDDO]: [ + new SpeciesEvolution(SpeciesId.GOGOAT, 32, null, null) ], - [Species.PANCHAM]: [ - new SpeciesEvolution(Species.PANGORO, 32, null, new PartyTypeEvolutionCondition(PokemonType.DARK), SpeciesWildEvolutionDelay.MEDIUM) + [SpeciesId.PANCHAM]: [ + new SpeciesEvolution(SpeciesId.PANGORO, 32, null, new PartyTypeEvolutionCondition(PokemonType.DARK), SpeciesWildEvolutionDelay.MEDIUM) ], - [Species.ESPURR]: [ - new SpeciesFormEvolution(Species.MEOWSTIC, "", "female", 25, null, new GenderEvolutionCondition(Gender.FEMALE)), - new SpeciesFormEvolution(Species.MEOWSTIC, "", "", 25, null, new GenderEvolutionCondition(Gender.MALE)) + [SpeciesId.ESPURR]: [ + new SpeciesFormEvolution(SpeciesId.MEOWSTIC, "", "female", 25, null, new GenderEvolutionCondition(Gender.FEMALE)), + new SpeciesFormEvolution(SpeciesId.MEOWSTIC, "", "", 25, null, new GenderEvolutionCondition(Gender.MALE)) ], - [Species.HONEDGE]: [ - new SpeciesEvolution(Species.DOUBLADE, 35, null, null) + [SpeciesId.HONEDGE]: [ + new SpeciesEvolution(SpeciesId.DOUBLADE, 35, null, null) ], - [Species.INKAY]: [ - new SpeciesEvolution(Species.MALAMAR, 30, null, null) + [SpeciesId.INKAY]: [ + new SpeciesEvolution(SpeciesId.MALAMAR, 30, null, null) ], - [Species.BINACLE]: [ - new SpeciesEvolution(Species.BARBARACLE, 39, null, null) + [SpeciesId.BINACLE]: [ + new SpeciesEvolution(SpeciesId.BARBARACLE, 39, null, null) ], - [Species.SKRELP]: [ - new SpeciesEvolution(Species.DRAGALGE, 48, null, null) + [SpeciesId.SKRELP]: [ + new SpeciesEvolution(SpeciesId.DRAGALGE, 48, null, null) ], - [Species.CLAUNCHER]: [ - new SpeciesEvolution(Species.CLAWITZER, 37, null, null) + [SpeciesId.CLAUNCHER]: [ + new SpeciesEvolution(SpeciesId.CLAWITZER, 37, null, null) ], - [Species.TYRUNT]: [ - new SpeciesEvolution(Species.TYRANTRUM, 39, null, new TimeOfDayEvolutionCondition("day")) + [SpeciesId.TYRUNT]: [ + new SpeciesEvolution(SpeciesId.TYRANTRUM, 39, null, new TimeOfDayEvolutionCondition("day")) ], - [Species.AMAURA]: [ - new SpeciesEvolution(Species.AURORUS, 39, null, new TimeOfDayEvolutionCondition("night")) + [SpeciesId.AMAURA]: [ + new SpeciesEvolution(SpeciesId.AURORUS, 39, null, new TimeOfDayEvolutionCondition("night")) ], - [Species.GOOMY]: [ - new SpeciesEvolution(Species.HISUI_SLIGGOO, 40, null, new TimeOfDayEvolutionCondition("night")), - new SpeciesEvolution(Species.SLIGGOO, 40, null, new TimeOfDayEvolutionCondition("day")) + [SpeciesId.GOOMY]: [ + new SpeciesEvolution(SpeciesId.HISUI_SLIGGOO, 40, null, new TimeOfDayEvolutionCondition("night")), + new SpeciesEvolution(SpeciesId.SLIGGOO, 40, null, new TimeOfDayEvolutionCondition("day")) ], - [Species.SLIGGOO]: [ - new SpeciesEvolution(Species.GOODRA, 50, null, new WeatherEvolutionCondition([ WeatherType.RAIN, WeatherType.FOG, WeatherType.HEAVY_RAIN ]), SpeciesWildEvolutionDelay.LONG) + [SpeciesId.SLIGGOO]: [ + new SpeciesEvolution(SpeciesId.GOODRA, 50, null, new WeatherEvolutionCondition([ WeatherType.RAIN, WeatherType.FOG, WeatherType.HEAVY_RAIN ]), SpeciesWildEvolutionDelay.LONG) ], - [Species.BERGMITE]: [ - new SpeciesEvolution(Species.HISUI_AVALUGG, 37, null, new TimeOfDayEvolutionCondition("night")), - new SpeciesEvolution(Species.AVALUGG, 37, null, new TimeOfDayEvolutionCondition("day")) + [SpeciesId.BERGMITE]: [ + new SpeciesEvolution(SpeciesId.HISUI_AVALUGG, 37, null, new TimeOfDayEvolutionCondition("night")), + new SpeciesEvolution(SpeciesId.AVALUGG, 37, null, new TimeOfDayEvolutionCondition("day")) ], - [Species.NOIBAT]: [ - new SpeciesEvolution(Species.NOIVERN, 48, null, null) + [SpeciesId.NOIBAT]: [ + new SpeciesEvolution(SpeciesId.NOIVERN, 48, null, null) ], - [Species.ROWLET]: [ - new SpeciesEvolution(Species.DARTRIX, 17, null, null) + [SpeciesId.ROWLET]: [ + new SpeciesEvolution(SpeciesId.DARTRIX, 17, null, null) ], - [Species.DARTRIX]: [ - new SpeciesEvolution(Species.HISUI_DECIDUEYE, 36, null, new TimeOfDayEvolutionCondition("night")), - new SpeciesEvolution(Species.DECIDUEYE, 34, null, new TimeOfDayEvolutionCondition("day")) + [SpeciesId.DARTRIX]: [ + new SpeciesEvolution(SpeciesId.HISUI_DECIDUEYE, 36, null, new TimeOfDayEvolutionCondition("night")), + new SpeciesEvolution(SpeciesId.DECIDUEYE, 34, null, new TimeOfDayEvolutionCondition("day")) ], - [Species.LITTEN]: [ - new SpeciesEvolution(Species.TORRACAT, 17, null, null) + [SpeciesId.LITTEN]: [ + new SpeciesEvolution(SpeciesId.TORRACAT, 17, null, null) ], - [Species.TORRACAT]: [ - new SpeciesEvolution(Species.INCINEROAR, 34, null, null) + [SpeciesId.TORRACAT]: [ + new SpeciesEvolution(SpeciesId.INCINEROAR, 34, null, null) ], - [Species.POPPLIO]: [ - new SpeciesEvolution(Species.BRIONNE, 17, null, null) + [SpeciesId.POPPLIO]: [ + new SpeciesEvolution(SpeciesId.BRIONNE, 17, null, null) ], - [Species.BRIONNE]: [ - new SpeciesEvolution(Species.PRIMARINA, 34, null, null) + [SpeciesId.BRIONNE]: [ + new SpeciesEvolution(SpeciesId.PRIMARINA, 34, null, null) ], - [Species.PIKIPEK]: [ - new SpeciesEvolution(Species.TRUMBEAK, 14, null, null) + [SpeciesId.PIKIPEK]: [ + new SpeciesEvolution(SpeciesId.TRUMBEAK, 14, null, null) ], - [Species.TRUMBEAK]: [ - new SpeciesEvolution(Species.TOUCANNON, 28, null, null) + [SpeciesId.TRUMBEAK]: [ + new SpeciesEvolution(SpeciesId.TOUCANNON, 28, null, null) ], - [Species.YUNGOOS]: [ - new SpeciesEvolution(Species.GUMSHOOS, 20, null, new TimeOfDayEvolutionCondition("day")) + [SpeciesId.YUNGOOS]: [ + new SpeciesEvolution(SpeciesId.GUMSHOOS, 20, null, new TimeOfDayEvolutionCondition("day")) ], - [Species.GRUBBIN]: [ - new SpeciesEvolution(Species.CHARJABUG, 20, null, null) + [SpeciesId.GRUBBIN]: [ + new SpeciesEvolution(SpeciesId.CHARJABUG, 20, null, null) ], - [Species.CUTIEFLY]: [ - new SpeciesEvolution(Species.RIBOMBEE, 25, null, null) + [SpeciesId.CUTIEFLY]: [ + new SpeciesEvolution(SpeciesId.RIBOMBEE, 25, null, null) ], - [Species.MAREANIE]: [ - new SpeciesEvolution(Species.TOXAPEX, 38, null, null) + [SpeciesId.MAREANIE]: [ + new SpeciesEvolution(SpeciesId.TOXAPEX, 38, null, null) ], - [Species.MUDBRAY]: [ - new SpeciesEvolution(Species.MUDSDALE, 30, null, null) + [SpeciesId.MUDBRAY]: [ + new SpeciesEvolution(SpeciesId.MUDSDALE, 30, null, null) ], - [Species.DEWPIDER]: [ - new SpeciesEvolution(Species.ARAQUANID, 22, null, null) + [SpeciesId.DEWPIDER]: [ + new SpeciesEvolution(SpeciesId.ARAQUANID, 22, null, null) ], - [Species.FOMANTIS]: [ - new SpeciesEvolution(Species.LURANTIS, 34, null, new TimeOfDayEvolutionCondition("day")) + [SpeciesId.FOMANTIS]: [ + new SpeciesEvolution(SpeciesId.LURANTIS, 34, null, new TimeOfDayEvolutionCondition("day")) ], - [Species.MORELULL]: [ - new SpeciesEvolution(Species.SHIINOTIC, 24, null, null) + [SpeciesId.MORELULL]: [ + new SpeciesEvolution(SpeciesId.SHIINOTIC, 24, null, null) ], - [Species.SALANDIT]: [ - new SpeciesEvolution(Species.SALAZZLE, 33, null, new GenderEvolutionCondition(Gender.FEMALE)) + [SpeciesId.SALANDIT]: [ + new SpeciesEvolution(SpeciesId.SALAZZLE, 33, null, new GenderEvolutionCondition(Gender.FEMALE)) ], - [Species.STUFFUL]: [ - new SpeciesEvolution(Species.BEWEAR, 27, null, null) + [SpeciesId.STUFFUL]: [ + new SpeciesEvolution(SpeciesId.BEWEAR, 27, null, null) ], - [Species.BOUNSWEET]: [ - new SpeciesEvolution(Species.STEENEE, 18, null, null) + [SpeciesId.BOUNSWEET]: [ + new SpeciesEvolution(SpeciesId.STEENEE, 18, null, null) ], - [Species.WIMPOD]: [ - new SpeciesEvolution(Species.GOLISOPOD, 30, null, null) + [SpeciesId.WIMPOD]: [ + new SpeciesEvolution(SpeciesId.GOLISOPOD, 30, null, null) ], - [Species.SANDYGAST]: [ - new SpeciesEvolution(Species.PALOSSAND, 42, null, null) + [SpeciesId.SANDYGAST]: [ + new SpeciesEvolution(SpeciesId.PALOSSAND, 42, null, null) ], - [Species.JANGMO_O]: [ - new SpeciesEvolution(Species.HAKAMO_O, 35, null, null) + [SpeciesId.JANGMO_O]: [ + new SpeciesEvolution(SpeciesId.HAKAMO_O, 35, null, null) ], - [Species.HAKAMO_O]: [ - new SpeciesEvolution(Species.KOMMO_O, 45, null, null) + [SpeciesId.HAKAMO_O]: [ + new SpeciesEvolution(SpeciesId.KOMMO_O, 45, null, null) ], - [Species.COSMOG]: [ - new SpeciesEvolution(Species.COSMOEM, 23, null, null) + [SpeciesId.COSMOG]: [ + new SpeciesEvolution(SpeciesId.COSMOEM, 23, null, null) ], - [Species.COSMOEM]: [ - new SpeciesEvolution(Species.SOLGALEO, 1, EvolutionItem.SUN_FLUTE, null, SpeciesWildEvolutionDelay.VERY_LONG), - new SpeciesEvolution(Species.LUNALA, 1, EvolutionItem.MOON_FLUTE, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.COSMOEM]: [ + new SpeciesEvolution(SpeciesId.SOLGALEO, 1, EvolutionItem.SUN_FLUTE, null, SpeciesWildEvolutionDelay.VERY_LONG), + new SpeciesEvolution(SpeciesId.LUNALA, 1, EvolutionItem.MOON_FLUTE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.MELTAN]: [ - new SpeciesEvolution(Species.MELMETAL, 48, null, null) + [SpeciesId.MELTAN]: [ + new SpeciesEvolution(SpeciesId.MELMETAL, 48, null, null) ], - [Species.ALOLA_RATTATA]: [ - new SpeciesEvolution(Species.ALOLA_RATICATE, 20, null, new TimeOfDayEvolutionCondition("night")) + [SpeciesId.ALOLA_RATTATA]: [ + new SpeciesEvolution(SpeciesId.ALOLA_RATICATE, 20, null, new TimeOfDayEvolutionCondition("night")) ], - [Species.ALOLA_DIGLETT]: [ - new SpeciesEvolution(Species.ALOLA_DUGTRIO, 26, null, null) + [SpeciesId.ALOLA_DIGLETT]: [ + new SpeciesEvolution(SpeciesId.ALOLA_DUGTRIO, 26, null, null) ], - [Species.ALOLA_GEODUDE]: [ - new SpeciesEvolution(Species.ALOLA_GRAVELER, 25, null, null) + [SpeciesId.ALOLA_GEODUDE]: [ + new SpeciesEvolution(SpeciesId.ALOLA_GRAVELER, 25, null, null) ], - [Species.ALOLA_GRIMER]: [ - new SpeciesEvolution(Species.ALOLA_MUK, 38, null, null) + [SpeciesId.ALOLA_GRIMER]: [ + new SpeciesEvolution(SpeciesId.ALOLA_MUK, 38, null, null) ], - [Species.GROOKEY]: [ - new SpeciesEvolution(Species.THWACKEY, 16, null, null) + [SpeciesId.GROOKEY]: [ + new SpeciesEvolution(SpeciesId.THWACKEY, 16, null, null) ], - [Species.THWACKEY]: [ - new SpeciesEvolution(Species.RILLABOOM, 35, null, null) + [SpeciesId.THWACKEY]: [ + new SpeciesEvolution(SpeciesId.RILLABOOM, 35, null, null) ], - [Species.SCORBUNNY]: [ - new SpeciesEvolution(Species.RABOOT, 16, null, null) + [SpeciesId.SCORBUNNY]: [ + new SpeciesEvolution(SpeciesId.RABOOT, 16, null, null) ], - [Species.RABOOT]: [ - new SpeciesEvolution(Species.CINDERACE, 35, null, null) + [SpeciesId.RABOOT]: [ + new SpeciesEvolution(SpeciesId.CINDERACE, 35, null, null) ], - [Species.SOBBLE]: [ - new SpeciesEvolution(Species.DRIZZILE, 16, null, null) + [SpeciesId.SOBBLE]: [ + new SpeciesEvolution(SpeciesId.DRIZZILE, 16, null, null) ], - [Species.DRIZZILE]: [ - new SpeciesEvolution(Species.INTELEON, 35, null, null) + [SpeciesId.DRIZZILE]: [ + new SpeciesEvolution(SpeciesId.INTELEON, 35, null, null) ], - [Species.SKWOVET]: [ - new SpeciesEvolution(Species.GREEDENT, 24, null, null) + [SpeciesId.SKWOVET]: [ + new SpeciesEvolution(SpeciesId.GREEDENT, 24, null, null) ], - [Species.ROOKIDEE]: [ - new SpeciesEvolution(Species.CORVISQUIRE, 18, null, null) + [SpeciesId.ROOKIDEE]: [ + new SpeciesEvolution(SpeciesId.CORVISQUIRE, 18, null, null) ], - [Species.CORVISQUIRE]: [ - new SpeciesEvolution(Species.CORVIKNIGHT, 38, null, null) + [SpeciesId.CORVISQUIRE]: [ + new SpeciesEvolution(SpeciesId.CORVIKNIGHT, 38, null, null) ], - [Species.BLIPBUG]: [ - new SpeciesEvolution(Species.DOTTLER, 10, null, null) + [SpeciesId.BLIPBUG]: [ + new SpeciesEvolution(SpeciesId.DOTTLER, 10, null, null) ], - [Species.DOTTLER]: [ - new SpeciesEvolution(Species.ORBEETLE, 30, null, null) + [SpeciesId.DOTTLER]: [ + new SpeciesEvolution(SpeciesId.ORBEETLE, 30, null, null) ], - [Species.NICKIT]: [ - new SpeciesEvolution(Species.THIEVUL, 18, null, null) + [SpeciesId.NICKIT]: [ + new SpeciesEvolution(SpeciesId.THIEVUL, 18, null, null) ], - [Species.GOSSIFLEUR]: [ - new SpeciesEvolution(Species.ELDEGOSS, 20, null, null) + [SpeciesId.GOSSIFLEUR]: [ + new SpeciesEvolution(SpeciesId.ELDEGOSS, 20, null, null) ], - [Species.WOOLOO]: [ - new SpeciesEvolution(Species.DUBWOOL, 24, null, null) + [SpeciesId.WOOLOO]: [ + new SpeciesEvolution(SpeciesId.DUBWOOL, 24, null, null) ], - [Species.CHEWTLE]: [ - new SpeciesEvolution(Species.DREDNAW, 22, null, null) + [SpeciesId.CHEWTLE]: [ + new SpeciesEvolution(SpeciesId.DREDNAW, 22, null, null) ], - [Species.YAMPER]: [ - new SpeciesEvolution(Species.BOLTUND, 25, null, null) + [SpeciesId.YAMPER]: [ + new SpeciesEvolution(SpeciesId.BOLTUND, 25, null, null) ], - [Species.ROLYCOLY]: [ - new SpeciesEvolution(Species.CARKOL, 18, null, null) + [SpeciesId.ROLYCOLY]: [ + new SpeciesEvolution(SpeciesId.CARKOL, 18, null, null) ], - [Species.CARKOL]: [ - new SpeciesEvolution(Species.COALOSSAL, 34, null, null) + [SpeciesId.CARKOL]: [ + new SpeciesEvolution(SpeciesId.COALOSSAL, 34, null, null) ], - [Species.SILICOBRA]: [ - new SpeciesEvolution(Species.SANDACONDA, 36, null, null) + [SpeciesId.SILICOBRA]: [ + new SpeciesEvolution(SpeciesId.SANDACONDA, 36, null, null) ], - [Species.ARROKUDA]: [ - new SpeciesEvolution(Species.BARRASKEWDA, 26, null, null) + [SpeciesId.ARROKUDA]: [ + new SpeciesEvolution(SpeciesId.BARRASKEWDA, 26, null, null) ], - [Species.TOXEL]: [ - new SpeciesFormEvolution(Species.TOXTRICITY, "", "lowkey", 30, null, + [SpeciesId.TOXEL]: [ + new SpeciesFormEvolution(SpeciesId.TOXTRICITY, "", "lowkey", 30, null, new NatureEvolutionCondition([ Nature.LONELY, Nature.BOLD, Nature.RELAXED, Nature.TIMID, Nature.SERIOUS, Nature.MODEST, Nature.MILD, Nature.QUIET, Nature.BASHFUL, Nature.CALM, Nature.GENTLE, Nature.CAREFUL ]) ), - new SpeciesFormEvolution(Species.TOXTRICITY, "", "amped", 30, null, null) + new SpeciesFormEvolution(SpeciesId.TOXTRICITY, "", "amped", 30, null, null) ], - [Species.SIZZLIPEDE]: [ - new SpeciesEvolution(Species.CENTISKORCH, 28, null, null) + [SpeciesId.SIZZLIPEDE]: [ + new SpeciesEvolution(SpeciesId.CENTISKORCH, 28, null, null) ], - [Species.HATENNA]: [ - new SpeciesEvolution(Species.HATTREM, 32, null, null) + [SpeciesId.HATENNA]: [ + new SpeciesEvolution(SpeciesId.HATTREM, 32, null, null) ], - [Species.HATTREM]: [ - new SpeciesEvolution(Species.HATTERENE, 42, null, null) + [SpeciesId.HATTREM]: [ + new SpeciesEvolution(SpeciesId.HATTERENE, 42, null, null) ], - [Species.IMPIDIMP]: [ - new SpeciesEvolution(Species.MORGREM, 32, null, null) + [SpeciesId.IMPIDIMP]: [ + new SpeciesEvolution(SpeciesId.MORGREM, 32, null, null) ], - [Species.MORGREM]: [ - new SpeciesEvolution(Species.GRIMMSNARL, 42, null, null) + [SpeciesId.MORGREM]: [ + new SpeciesEvolution(SpeciesId.GRIMMSNARL, 42, null, null) ], - [Species.CUFANT]: [ - new SpeciesEvolution(Species.COPPERAJAH, 34, null, null) + [SpeciesId.CUFANT]: [ + new SpeciesEvolution(SpeciesId.COPPERAJAH, 34, null, null) ], - [Species.DREEPY]: [ - new SpeciesEvolution(Species.DRAKLOAK, 50, null, null) + [SpeciesId.DREEPY]: [ + new SpeciesEvolution(SpeciesId.DRAKLOAK, 50, null, null) ], - [Species.DRAKLOAK]: [ - new SpeciesEvolution(Species.DRAGAPULT, 60, null, null) + [SpeciesId.DRAKLOAK]: [ + new SpeciesEvolution(SpeciesId.DRAGAPULT, 60, null, null) ], - [Species.GALAR_MEOWTH]: [ - new SpeciesEvolution(Species.PERRSERKER, 28, null, null) + [SpeciesId.GALAR_MEOWTH]: [ + new SpeciesEvolution(SpeciesId.PERRSERKER, 28, null, null) ], - [Species.GALAR_PONYTA]: [ - new SpeciesEvolution(Species.GALAR_RAPIDASH, 40, null, null) + [SpeciesId.GALAR_PONYTA]: [ + new SpeciesEvolution(SpeciesId.GALAR_RAPIDASH, 40, null, null) ], - [Species.GALAR_FARFETCHD]: [ - new SpeciesEvolution(Species.SIRFETCHD, 30, null, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.GALAR_FARFETCHD]: [ + new SpeciesEvolution(SpeciesId.SIRFETCHD, 30, null, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.GALAR_SLOWPOKE]: [ - new SpeciesEvolution(Species.GALAR_SLOWBRO, 1, EvolutionItem.GALARICA_CUFF, null, SpeciesWildEvolutionDelay.VERY_LONG), - new SpeciesEvolution(Species.GALAR_SLOWKING, 1, EvolutionItem.GALARICA_WREATH, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.GALAR_SLOWPOKE]: [ + new SpeciesEvolution(SpeciesId.GALAR_SLOWBRO, 1, EvolutionItem.GALARICA_CUFF, null, SpeciesWildEvolutionDelay.VERY_LONG), + new SpeciesEvolution(SpeciesId.GALAR_SLOWKING, 1, EvolutionItem.GALARICA_WREATH, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.GALAR_MR_MIME]: [ - new SpeciesEvolution(Species.MR_RIME, 42, null, null) + [SpeciesId.GALAR_MR_MIME]: [ + new SpeciesEvolution(SpeciesId.MR_RIME, 42, null, null) ], - [Species.GALAR_CORSOLA]: [ - new SpeciesEvolution(Species.CURSOLA, 38, null, null) + [SpeciesId.GALAR_CORSOLA]: [ + new SpeciesEvolution(SpeciesId.CURSOLA, 38, null, null) ], - [Species.GALAR_ZIGZAGOON]: [ - new SpeciesEvolution(Species.GALAR_LINOONE, 20, null, null) + [SpeciesId.GALAR_ZIGZAGOON]: [ + new SpeciesEvolution(SpeciesId.GALAR_LINOONE, 20, null, null) ], - [Species.GALAR_LINOONE]: [ - new SpeciesEvolution(Species.OBSTAGOON, 35, null, new TimeOfDayEvolutionCondition("night")) + [SpeciesId.GALAR_LINOONE]: [ + new SpeciesEvolution(SpeciesId.OBSTAGOON, 35, null, new TimeOfDayEvolutionCondition("night")) ], - [Species.GALAR_YAMASK]: [ - new SpeciesEvolution(Species.RUNERIGUS, 34, null, null) + [SpeciesId.GALAR_YAMASK]: [ + new SpeciesEvolution(SpeciesId.RUNERIGUS, 34, null, null) ], - [Species.HISUI_ZORUA]: [ - new SpeciesEvolution(Species.HISUI_ZOROARK, 30, null, null) + [SpeciesId.HISUI_ZORUA]: [ + new SpeciesEvolution(SpeciesId.HISUI_ZOROARK, 30, null, null) ], - [Species.HISUI_SLIGGOO]: [ - new SpeciesEvolution(Species.HISUI_GOODRA, 50, null, new WeatherEvolutionCondition([ WeatherType.RAIN, WeatherType.FOG, WeatherType.HEAVY_RAIN ]), SpeciesWildEvolutionDelay.LONG) + [SpeciesId.HISUI_SLIGGOO]: [ + new SpeciesEvolution(SpeciesId.HISUI_GOODRA, 50, null, new WeatherEvolutionCondition([ WeatherType.RAIN, WeatherType.FOG, WeatherType.HEAVY_RAIN ]), SpeciesWildEvolutionDelay.LONG) ], - [Species.SPRIGATITO]: [ - new SpeciesEvolution(Species.FLORAGATO, 16, null, null) + [SpeciesId.SPRIGATITO]: [ + new SpeciesEvolution(SpeciesId.FLORAGATO, 16, null, null) ], - [Species.FLORAGATO]: [ - new SpeciesEvolution(Species.MEOWSCARADA, 36, null, null) + [SpeciesId.FLORAGATO]: [ + new SpeciesEvolution(SpeciesId.MEOWSCARADA, 36, null, null) ], - [Species.FUECOCO]: [ - new SpeciesEvolution(Species.CROCALOR, 16, null, null) + [SpeciesId.FUECOCO]: [ + new SpeciesEvolution(SpeciesId.CROCALOR, 16, null, null) ], - [Species.CROCALOR]: [ - new SpeciesEvolution(Species.SKELEDIRGE, 36, null, null) + [SpeciesId.CROCALOR]: [ + new SpeciesEvolution(SpeciesId.SKELEDIRGE, 36, null, null) ], - [Species.QUAXLY]: [ - new SpeciesEvolution(Species.QUAXWELL, 16, null, null) + [SpeciesId.QUAXLY]: [ + new SpeciesEvolution(SpeciesId.QUAXWELL, 16, null, null) ], - [Species.QUAXWELL]: [ - new SpeciesEvolution(Species.QUAQUAVAL, 36, null, null) + [SpeciesId.QUAXWELL]: [ + new SpeciesEvolution(SpeciesId.QUAQUAVAL, 36, null, null) ], - [Species.LECHONK]: [ - new SpeciesFormEvolution(Species.OINKOLOGNE, "", "female", 18, null, new GenderEvolutionCondition(Gender.FEMALE)), - new SpeciesFormEvolution(Species.OINKOLOGNE, "", "", 18, null, new GenderEvolutionCondition(Gender.MALE)) + [SpeciesId.LECHONK]: [ + new SpeciesFormEvolution(SpeciesId.OINKOLOGNE, "", "female", 18, null, new GenderEvolutionCondition(Gender.FEMALE)), + new SpeciesFormEvolution(SpeciesId.OINKOLOGNE, "", "", 18, null, new GenderEvolutionCondition(Gender.MALE)) ], - [Species.TAROUNTULA]: [ - new SpeciesEvolution(Species.SPIDOPS, 15, null, null) + [SpeciesId.TAROUNTULA]: [ + new SpeciesEvolution(SpeciesId.SPIDOPS, 15, null, null) ], - [Species.NYMBLE]: [ - new SpeciesEvolution(Species.LOKIX, 24, null, null) + [SpeciesId.NYMBLE]: [ + new SpeciesEvolution(SpeciesId.LOKIX, 24, null, null) ], - [Species.PAWMI]: [ - new SpeciesEvolution(Species.PAWMO, 18, null, null) + [SpeciesId.PAWMI]: [ + new SpeciesEvolution(SpeciesId.PAWMO, 18, null, null) ], - [Species.PAWMO]: [ - new SpeciesEvolution(Species.PAWMOT, 32, null, null) + [SpeciesId.PAWMO]: [ + new SpeciesEvolution(SpeciesId.PAWMOT, 32, null, null) ], - [Species.TANDEMAUS]: [ - new SpeciesFormEvolution(Species.MAUSHOLD, "", "three", 25, null, new TandemausEvolutionCondition()), - new SpeciesFormEvolution(Species.MAUSHOLD, "", "four", 25, null, null) + [SpeciesId.TANDEMAUS]: [ + new SpeciesFormEvolution(SpeciesId.MAUSHOLD, "", "three", 25, null, new TandemausEvolutionCondition()), + new SpeciesFormEvolution(SpeciesId.MAUSHOLD, "", "four", 25, null, null) ], - [Species.FIDOUGH]: [ - new SpeciesEvolution(Species.DACHSBUN, 26, null, null) + [SpeciesId.FIDOUGH]: [ + new SpeciesEvolution(SpeciesId.DACHSBUN, 26, null, null) ], - [Species.SMOLIV]: [ - new SpeciesEvolution(Species.DOLLIV, 25, null, null) + [SpeciesId.SMOLIV]: [ + new SpeciesEvolution(SpeciesId.DOLLIV, 25, null, null) ], - [Species.DOLLIV]: [ - new SpeciesEvolution(Species.ARBOLIVA, 35, null, null) + [SpeciesId.DOLLIV]: [ + new SpeciesEvolution(SpeciesId.ARBOLIVA, 35, null, null) ], - [Species.NACLI]: [ - new SpeciesEvolution(Species.NACLSTACK, 24, null, null) + [SpeciesId.NACLI]: [ + new SpeciesEvolution(SpeciesId.NACLSTACK, 24, null, null) ], - [Species.NACLSTACK]: [ - new SpeciesEvolution(Species.GARGANACL, 38, null, null) + [SpeciesId.NACLSTACK]: [ + new SpeciesEvolution(SpeciesId.GARGANACL, 38, null, null) ], - [Species.WATTREL]: [ - new SpeciesEvolution(Species.KILOWATTREL, 25, null, null) + [SpeciesId.WATTREL]: [ + new SpeciesEvolution(SpeciesId.KILOWATTREL, 25, null, null) ], - [Species.MASCHIFF]: [ - new SpeciesEvolution(Species.MABOSSTIFF, 30, null, null) + [SpeciesId.MASCHIFF]: [ + new SpeciesEvolution(SpeciesId.MABOSSTIFF, 30, null, null) ], - [Species.SHROODLE]: [ - new SpeciesEvolution(Species.GRAFAIAI, 28, null, null) + [SpeciesId.SHROODLE]: [ + new SpeciesEvolution(SpeciesId.GRAFAIAI, 28, null, null) ], - [Species.BRAMBLIN]: [ - new SpeciesEvolution(Species.BRAMBLEGHAST, 30, null, null) + [SpeciesId.BRAMBLIN]: [ + new SpeciesEvolution(SpeciesId.BRAMBLEGHAST, 30, null, null) ], - [Species.TOEDSCOOL]: [ - new SpeciesEvolution(Species.TOEDSCRUEL, 30, null, null) + [SpeciesId.TOEDSCOOL]: [ + new SpeciesEvolution(SpeciesId.TOEDSCRUEL, 30, null, null) ], - [Species.RELLOR]: [ - new SpeciesEvolution(Species.RABSCA, 29, null, null) + [SpeciesId.RELLOR]: [ + new SpeciesEvolution(SpeciesId.RABSCA, 29, null, null) ], - [Species.FLITTLE]: [ - new SpeciesEvolution(Species.ESPATHRA, 35, null, null) + [SpeciesId.FLITTLE]: [ + new SpeciesEvolution(SpeciesId.ESPATHRA, 35, null, null) ], - [Species.TINKATINK]: [ - new SpeciesEvolution(Species.TINKATUFF, 24, null, null) + [SpeciesId.TINKATINK]: [ + new SpeciesEvolution(SpeciesId.TINKATUFF, 24, null, null) ], - [Species.TINKATUFF]: [ - new SpeciesEvolution(Species.TINKATON, 38, null, null) + [SpeciesId.TINKATUFF]: [ + new SpeciesEvolution(SpeciesId.TINKATON, 38, null, null) ], - [Species.WIGLETT]: [ - new SpeciesEvolution(Species.WUGTRIO, 26, null, null) + [SpeciesId.WIGLETT]: [ + new SpeciesEvolution(SpeciesId.WUGTRIO, 26, null, null) ], - [Species.FINIZEN]: [ - new SpeciesEvolution(Species.PALAFIN, 38, null, null) + [SpeciesId.FINIZEN]: [ + new SpeciesEvolution(SpeciesId.PALAFIN, 38, null, null) ], - [Species.VAROOM]: [ - new SpeciesEvolution(Species.REVAVROOM, 40, null, null) + [SpeciesId.VAROOM]: [ + new SpeciesEvolution(SpeciesId.REVAVROOM, 40, null, null) ], - [Species.GLIMMET]: [ - new SpeciesEvolution(Species.GLIMMORA, 35, null, null) + [SpeciesId.GLIMMET]: [ + new SpeciesEvolution(SpeciesId.GLIMMORA, 35, null, null) ], - [Species.GREAVARD]: [ - new SpeciesEvolution(Species.HOUNDSTONE, 30, null, new TimeOfDayEvolutionCondition("night")) + [SpeciesId.GREAVARD]: [ + new SpeciesEvolution(SpeciesId.HOUNDSTONE, 30, null, new TimeOfDayEvolutionCondition("night")) ], - [Species.FRIGIBAX]: [ - new SpeciesEvolution(Species.ARCTIBAX, 35, null, null) + [SpeciesId.FRIGIBAX]: [ + new SpeciesEvolution(SpeciesId.ARCTIBAX, 35, null, null) ], - [Species.ARCTIBAX]: [ - new SpeciesEvolution(Species.BAXCALIBUR, 54, null, null) + [SpeciesId.ARCTIBAX]: [ + new SpeciesEvolution(SpeciesId.BAXCALIBUR, 54, null, null) ], - [Species.PALDEA_WOOPER]: [ - new SpeciesEvolution(Species.CLODSIRE, 20, null, null) + [SpeciesId.PALDEA_WOOPER]: [ + new SpeciesEvolution(SpeciesId.CLODSIRE, 20, null, null) ], - [Species.PIKACHU]: [ - new SpeciesFormEvolution(Species.ALOLA_RAICHU, "", "", 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.ALOLA_RAICHU, "partner", "", 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.RAICHU, "", "", 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.RAICHU, "partner", "", 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.PIKACHU]: [ + new SpeciesFormEvolution(SpeciesId.ALOLA_RAICHU, "", "", 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(SpeciesId.ALOLA_RAICHU, "partner", "", 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(SpeciesId.RAICHU, "", "", 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(SpeciesId.RAICHU, "partner", "", 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.NIDORINA]: [ - new SpeciesEvolution(Species.NIDOQUEEN, 1, EvolutionItem.MOON_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.NIDORINA]: [ + new SpeciesEvolution(SpeciesId.NIDOQUEEN, 1, EvolutionItem.MOON_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.NIDORINO]: [ - new SpeciesEvolution(Species.NIDOKING, 1, EvolutionItem.MOON_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.NIDORINO]: [ + new SpeciesEvolution(SpeciesId.NIDOKING, 1, EvolutionItem.MOON_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.CLEFAIRY]: [ - new SpeciesEvolution(Species.CLEFABLE, 1, EvolutionItem.MOON_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.CLEFAIRY]: [ + new SpeciesEvolution(SpeciesId.CLEFABLE, 1, EvolutionItem.MOON_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.VULPIX]: [ - new SpeciesEvolution(Species.NINETALES, 1, EvolutionItem.FIRE_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.VULPIX]: [ + new SpeciesEvolution(SpeciesId.NINETALES, 1, EvolutionItem.FIRE_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.JIGGLYPUFF]: [ - new SpeciesEvolution(Species.WIGGLYTUFF, 1, EvolutionItem.MOON_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.JIGGLYPUFF]: [ + new SpeciesEvolution(SpeciesId.WIGGLYTUFF, 1, EvolutionItem.MOON_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.GLOOM]: [ - new SpeciesEvolution(Species.VILEPLUME, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG), - new SpeciesEvolution(Species.BELLOSSOM, 1, EvolutionItem.SUN_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.GLOOM]: [ + new SpeciesEvolution(SpeciesId.VILEPLUME, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG), + new SpeciesEvolution(SpeciesId.BELLOSSOM, 1, EvolutionItem.SUN_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.GROWLITHE]: [ - new SpeciesEvolution(Species.ARCANINE, 1, EvolutionItem.FIRE_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.GROWLITHE]: [ + new SpeciesEvolution(SpeciesId.ARCANINE, 1, EvolutionItem.FIRE_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.POLIWHIRL]: [ - new SpeciesEvolution(Species.POLIWRATH, 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG), - new SpeciesEvolution(Species.POLITOED, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.POLIWHIRL]: [ + new SpeciesEvolution(SpeciesId.POLIWRATH, 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG), + new SpeciesEvolution(SpeciesId.POLITOED, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.WEEPINBELL]: [ - new SpeciesEvolution(Species.VICTREEBEL, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.WEEPINBELL]: [ + new SpeciesEvolution(SpeciesId.VICTREEBEL, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.MAGNETON]: [ - new SpeciesEvolution(Species.MAGNEZONE, 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.MAGNETON]: [ + new SpeciesEvolution(SpeciesId.MAGNEZONE, 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.SHELLDER]: [ - new SpeciesEvolution(Species.CLOYSTER, 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.SHELLDER]: [ + new SpeciesEvolution(SpeciesId.CLOYSTER, 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.EXEGGCUTE]: [ - new SpeciesEvolution(Species.ALOLA_EXEGGUTOR, 1, EvolutionItem.SUN_STONE, null, SpeciesWildEvolutionDelay.LONG), - new SpeciesEvolution(Species.EXEGGUTOR, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.EXEGGCUTE]: [ + new SpeciesEvolution(SpeciesId.ALOLA_EXEGGUTOR, 1, EvolutionItem.SUN_STONE, null, SpeciesWildEvolutionDelay.LONG), + new SpeciesEvolution(SpeciesId.EXEGGUTOR, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.TANGELA]: [ - new SpeciesEvolution(Species.TANGROWTH, 34, null, new MoveEvolutionCondition(Moves.ANCIENT_POWER), SpeciesWildEvolutionDelay.LONG) + [SpeciesId.TANGELA]: [ + new SpeciesEvolution(SpeciesId.TANGROWTH, 34, null, new MoveEvolutionCondition(MoveId.ANCIENT_POWER), SpeciesWildEvolutionDelay.LONG) ], - [Species.LICKITUNG]: [ - new SpeciesEvolution(Species.LICKILICKY, 32, null, new MoveEvolutionCondition(Moves.ROLLOUT), SpeciesWildEvolutionDelay.LONG) + [SpeciesId.LICKITUNG]: [ + new SpeciesEvolution(SpeciesId.LICKILICKY, 32, null, new MoveEvolutionCondition(MoveId.ROLLOUT), SpeciesWildEvolutionDelay.LONG) ], - [Species.STARYU]: [ - new SpeciesEvolution(Species.STARMIE, 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.STARYU]: [ + new SpeciesEvolution(SpeciesId.STARMIE, 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.EEVEE]: [ - new SpeciesFormEvolution(Species.SYLVEON, "", "", 1, null, new FriendshipMoveTypeEvolutionCondition(120, PokemonType.FAIRY), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.SYLVEON, "partner", "", 1, null, new FriendshipMoveTypeEvolutionCondition(120, PokemonType.FAIRY), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.ESPEON, "", "", 1, null, new FriendshipTimeOfDayEvolutionCondition(120, "day"), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.ESPEON, "partner", "", 1, null, new FriendshipTimeOfDayEvolutionCondition(120, "day"), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.UMBREON, "", "", 1, null, new FriendshipTimeOfDayEvolutionCondition(120, "night"), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.UMBREON, "partner", "", 1, null, new FriendshipTimeOfDayEvolutionCondition(120, "night"), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.VAPOREON, "", "", 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.VAPOREON, "partner", "", 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.JOLTEON, "", "", 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.JOLTEON, "partner", "", 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.FLAREON, "", "", 1, EvolutionItem.FIRE_STONE, null, SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.FLAREON, "partner", "", 1, EvolutionItem.FIRE_STONE, null, SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.LEAFEON, "", "", 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.LEAFEON, "partner", "", 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.GLACEON, "", "", 1, EvolutionItem.ICE_STONE, null, SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.GLACEON, "partner", "", 1, EvolutionItem.ICE_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.EEVEE]: [ + new SpeciesFormEvolution(SpeciesId.SYLVEON, "", "", 1, null, new FriendshipMoveTypeEvolutionCondition(120, PokemonType.FAIRY), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(SpeciesId.SYLVEON, "partner", "", 1, null, new FriendshipMoveTypeEvolutionCondition(120, PokemonType.FAIRY), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(SpeciesId.ESPEON, "", "", 1, null, new FriendshipTimeOfDayEvolutionCondition(120, "day"), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(SpeciesId.ESPEON, "partner", "", 1, null, new FriendshipTimeOfDayEvolutionCondition(120, "day"), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(SpeciesId.UMBREON, "", "", 1, null, new FriendshipTimeOfDayEvolutionCondition(120, "night"), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(SpeciesId.UMBREON, "partner", "", 1, null, new FriendshipTimeOfDayEvolutionCondition(120, "night"), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(SpeciesId.VAPOREON, "", "", 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(SpeciesId.VAPOREON, "partner", "", 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(SpeciesId.JOLTEON, "", "", 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(SpeciesId.JOLTEON, "partner", "", 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(SpeciesId.FLAREON, "", "", 1, EvolutionItem.FIRE_STONE, null, SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(SpeciesId.FLAREON, "partner", "", 1, EvolutionItem.FIRE_STONE, null, SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(SpeciesId.LEAFEON, "", "", 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(SpeciesId.LEAFEON, "partner", "", 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(SpeciesId.GLACEON, "", "", 1, EvolutionItem.ICE_STONE, null, SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(SpeciesId.GLACEON, "partner", "", 1, EvolutionItem.ICE_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.TOGETIC]: [ - new SpeciesEvolution(Species.TOGEKISS, 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.TOGETIC]: [ + new SpeciesEvolution(SpeciesId.TOGEKISS, 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.AIPOM]: [ - new SpeciesEvolution(Species.AMBIPOM, 32, null, new MoveEvolutionCondition(Moves.DOUBLE_HIT), SpeciesWildEvolutionDelay.LONG) + [SpeciesId.AIPOM]: [ + new SpeciesEvolution(SpeciesId.AMBIPOM, 32, null, new MoveEvolutionCondition(MoveId.DOUBLE_HIT), SpeciesWildEvolutionDelay.LONG) ], - [Species.SUNKERN]: [ - new SpeciesEvolution(Species.SUNFLORA, 1, EvolutionItem.SUN_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.SUNKERN]: [ + new SpeciesEvolution(SpeciesId.SUNFLORA, 1, EvolutionItem.SUN_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.YANMA]: [ - new SpeciesEvolution(Species.YANMEGA, 33, null, new MoveEvolutionCondition(Moves.ANCIENT_POWER), SpeciesWildEvolutionDelay.LONG) + [SpeciesId.YANMA]: [ + new SpeciesEvolution(SpeciesId.YANMEGA, 33, null, new MoveEvolutionCondition(MoveId.ANCIENT_POWER), SpeciesWildEvolutionDelay.LONG) ], - [Species.MURKROW]: [ - new SpeciesEvolution(Species.HONCHKROW, 1, EvolutionItem.DUSK_STONE, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.MURKROW]: [ + new SpeciesEvolution(SpeciesId.HONCHKROW, 1, EvolutionItem.DUSK_STONE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.MISDREAVUS]: [ - new SpeciesEvolution(Species.MISMAGIUS, 1, EvolutionItem.DUSK_STONE, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.MISDREAVUS]: [ + new SpeciesEvolution(SpeciesId.MISMAGIUS, 1, EvolutionItem.DUSK_STONE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.GIRAFARIG]: [ - new SpeciesEvolution(Species.FARIGIRAF, 32, null, new MoveEvolutionCondition(Moves.TWIN_BEAM), SpeciesWildEvolutionDelay.LONG) + [SpeciesId.GIRAFARIG]: [ + new SpeciesEvolution(SpeciesId.FARIGIRAF, 32, null, new MoveEvolutionCondition(MoveId.TWIN_BEAM), SpeciesWildEvolutionDelay.LONG) ], - [Species.DUNSPARCE]: [ - new SpeciesFormEvolution(Species.DUDUNSPARCE, "", "three-segment", 32, null, new DunsparceEvolutionCondition(), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.DUDUNSPARCE, "", "two-segment", 32, null, new MoveEvolutionCondition(Moves.HYPER_DRILL), SpeciesWildEvolutionDelay.LONG) + [SpeciesId.DUNSPARCE]: [ + new SpeciesFormEvolution(SpeciesId.DUDUNSPARCE, "", "three-segment", 32, null, new DunsparceEvolutionCondition(), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(SpeciesId.DUDUNSPARCE, "", "two-segment", 32, null, new MoveEvolutionCondition(MoveId.HYPER_DRILL), SpeciesWildEvolutionDelay.LONG) ], - [Species.GLIGAR]: [ - new SpeciesEvolution(Species.GLISCOR, 1, EvolutionItem.RAZOR_FANG, new TimeOfDayEvolutionCondition("night") /* Razor fang at night*/, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.GLIGAR]: [ + new SpeciesEvolution(SpeciesId.GLISCOR, 1, EvolutionItem.RAZOR_FANG, new TimeOfDayEvolutionCondition("night") /* Razor fang at night*/, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.SNEASEL]: [ - new SpeciesEvolution(Species.WEAVILE, 1, EvolutionItem.RAZOR_CLAW, new TimeOfDayEvolutionCondition("night") /* Razor claw at night*/, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.SNEASEL]: [ + new SpeciesEvolution(SpeciesId.WEAVILE, 1, EvolutionItem.RAZOR_CLAW, new TimeOfDayEvolutionCondition("night") /* Razor claw at night*/, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.URSARING]: [ - new SpeciesEvolution(Species.URSALUNA, 1, EvolutionItem.PEAT_BLOCK, null, SpeciesWildEvolutionDelay.VERY_LONG) //Ursaring does not evolve into Bloodmoon Ursaluna + [SpeciesId.URSARING]: [ + new SpeciesEvolution(SpeciesId.URSALUNA, 1, EvolutionItem.PEAT_BLOCK, null, SpeciesWildEvolutionDelay.VERY_LONG) //Ursaring does not evolve into Bloodmoon Ursaluna ], - [Species.PILOSWINE]: [ - new SpeciesEvolution(Species.MAMOSWINE, 1, null, new MoveEvolutionCondition(Moves.ANCIENT_POWER), SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.PILOSWINE]: [ + new SpeciesEvolution(SpeciesId.MAMOSWINE, 1, null, new MoveEvolutionCondition(MoveId.ANCIENT_POWER), SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.STANTLER]: [ - new SpeciesEvolution(Species.WYRDEER, 25, null, new MoveEvolutionCondition(Moves.PSYSHIELD_BASH), SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.STANTLER]: [ + new SpeciesEvolution(SpeciesId.WYRDEER, 25, null, new MoveEvolutionCondition(MoveId.PSYSHIELD_BASH), SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.LOMBRE]: [ - new SpeciesEvolution(Species.LUDICOLO, 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.LOMBRE]: [ + new SpeciesEvolution(SpeciesId.LUDICOLO, 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.NUZLEAF]: [ - new SpeciesEvolution(Species.SHIFTRY, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.NUZLEAF]: [ + new SpeciesEvolution(SpeciesId.SHIFTRY, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.NOSEPASS]: [ - new SpeciesEvolution(Species.PROBOPASS, 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.NOSEPASS]: [ + new SpeciesEvolution(SpeciesId.PROBOPASS, 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.SKITTY]: [ - new SpeciesEvolution(Species.DELCATTY, 1, EvolutionItem.MOON_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.SKITTY]: [ + new SpeciesEvolution(SpeciesId.DELCATTY, 1, EvolutionItem.MOON_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.ROSELIA]: [ - new SpeciesEvolution(Species.ROSERADE, 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.ROSELIA]: [ + new SpeciesEvolution(SpeciesId.ROSERADE, 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.BONSLY]: [ - new SpeciesEvolution(Species.SUDOWOODO, 1, null, new MoveEvolutionCondition(Moves.MIMIC), SpeciesWildEvolutionDelay.MEDIUM) + [SpeciesId.BONSLY]: [ + new SpeciesEvolution(SpeciesId.SUDOWOODO, 1, null, new MoveEvolutionCondition(MoveId.MIMIC), SpeciesWildEvolutionDelay.MEDIUM) ], - [Species.MIME_JR]: [ - new SpeciesEvolution(Species.GALAR_MR_MIME, 1, null, new MoveTimeOfDayEvolutionCondition(Moves.MIMIC, "night"), SpeciesWildEvolutionDelay.MEDIUM), - new SpeciesEvolution(Species.MR_MIME, 1, null, new MoveTimeOfDayEvolutionCondition(Moves.MIMIC, "day"), SpeciesWildEvolutionDelay.MEDIUM) + [SpeciesId.MIME_JR]: [ + new SpeciesEvolution(SpeciesId.GALAR_MR_MIME, 1, null, new MoveTimeOfDayEvolutionCondition(MoveId.MIMIC, "night"), SpeciesWildEvolutionDelay.MEDIUM), + new SpeciesEvolution(SpeciesId.MR_MIME, 1, null, new MoveTimeOfDayEvolutionCondition(MoveId.MIMIC, "day"), SpeciesWildEvolutionDelay.MEDIUM) ], - [Species.PANSAGE]: [ - new SpeciesEvolution(Species.SIMISAGE, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.PANSAGE]: [ + new SpeciesEvolution(SpeciesId.SIMISAGE, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.PANSEAR]: [ - new SpeciesEvolution(Species.SIMISEAR, 1, EvolutionItem.FIRE_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.PANSEAR]: [ + new SpeciesEvolution(SpeciesId.SIMISEAR, 1, EvolutionItem.FIRE_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.PANPOUR]: [ - new SpeciesEvolution(Species.SIMIPOUR, 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.PANPOUR]: [ + new SpeciesEvolution(SpeciesId.SIMIPOUR, 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.MUNNA]: [ - new SpeciesEvolution(Species.MUSHARNA, 1, EvolutionItem.MOON_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.MUNNA]: [ + new SpeciesEvolution(SpeciesId.MUSHARNA, 1, EvolutionItem.MOON_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.COTTONEE]: [ - new SpeciesEvolution(Species.WHIMSICOTT, 1, EvolutionItem.SUN_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.COTTONEE]: [ + new SpeciesEvolution(SpeciesId.WHIMSICOTT, 1, EvolutionItem.SUN_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.PETILIL]: [ - new SpeciesEvolution(Species.HISUI_LILLIGANT, 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.LONG), - new SpeciesEvolution(Species.LILLIGANT, 1, EvolutionItem.SUN_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.PETILIL]: [ + new SpeciesEvolution(SpeciesId.HISUI_LILLIGANT, 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.LONG), + new SpeciesEvolution(SpeciesId.LILLIGANT, 1, EvolutionItem.SUN_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.BASCULIN]: [ - new SpeciesFormEvolution(Species.BASCULEGION, "white-striped", "female", 40, null, new GenderEvolutionCondition(Gender.FEMALE), SpeciesWildEvolutionDelay.VERY_LONG), - new SpeciesFormEvolution(Species.BASCULEGION, "white-striped", "male", 40, null, new GenderEvolutionCondition(Gender.MALE), SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.BASCULIN]: [ + new SpeciesFormEvolution(SpeciesId.BASCULEGION, "white-striped", "female", 40, null, new GenderEvolutionCondition(Gender.FEMALE), SpeciesWildEvolutionDelay.VERY_LONG), + new SpeciesFormEvolution(SpeciesId.BASCULEGION, "white-striped", "male", 40, null, new GenderEvolutionCondition(Gender.MALE), SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.MINCCINO]: [ - new SpeciesEvolution(Species.CINCCINO, 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.MINCCINO]: [ + new SpeciesEvolution(SpeciesId.CINCCINO, 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.EELEKTRIK]: [ - new SpeciesEvolution(Species.EELEKTROSS, 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.EELEKTRIK]: [ + new SpeciesEvolution(SpeciesId.EELEKTROSS, 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.LAMPENT]: [ - new SpeciesEvolution(Species.CHANDELURE, 1, EvolutionItem.DUSK_STONE, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.LAMPENT]: [ + new SpeciesEvolution(SpeciesId.CHANDELURE, 1, EvolutionItem.DUSK_STONE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.FLOETTE]: [ - new SpeciesEvolution(Species.FLORGES, 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.FLOETTE]: [ + new SpeciesEvolution(SpeciesId.FLORGES, 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.DOUBLADE]: [ - new SpeciesEvolution(Species.AEGISLASH, 1, EvolutionItem.DUSK_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.DOUBLADE]: [ + new SpeciesEvolution(SpeciesId.AEGISLASH, 1, EvolutionItem.DUSK_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.HELIOPTILE]: [ - new SpeciesEvolution(Species.HELIOLISK, 1, EvolutionItem.SUN_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.HELIOPTILE]: [ + new SpeciesEvolution(SpeciesId.HELIOLISK, 1, EvolutionItem.SUN_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.CHARJABUG]: [ - new SpeciesEvolution(Species.VIKAVOLT, 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.CHARJABUG]: [ + new SpeciesEvolution(SpeciesId.VIKAVOLT, 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.CRABRAWLER]: [ - new SpeciesEvolution(Species.CRABOMINABLE, 1, EvolutionItem.ICE_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.CRABRAWLER]: [ + new SpeciesEvolution(SpeciesId.CRABOMINABLE, 1, EvolutionItem.ICE_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.ROCKRUFF]: [ - new SpeciesFormEvolution(Species.LYCANROC, "own-tempo", "dusk", 25, null, null), - new SpeciesFormEvolution(Species.LYCANROC, "", "midday", 25, null, new TimeOfDayEvolutionCondition("day")), - new SpeciesFormEvolution(Species.LYCANROC, "", "midnight", 25, null, new TimeOfDayEvolutionCondition("night")) + [SpeciesId.ROCKRUFF]: [ + new SpeciesFormEvolution(SpeciesId.LYCANROC, "own-tempo", "dusk", 25, null, null), + new SpeciesFormEvolution(SpeciesId.LYCANROC, "", "midday", 25, null, new TimeOfDayEvolutionCondition("day")), + new SpeciesFormEvolution(SpeciesId.LYCANROC, "", "midnight", 25, null, new TimeOfDayEvolutionCondition("night")) ], - [Species.STEENEE]: [ - new SpeciesEvolution(Species.TSAREENA, 28, null, new MoveEvolutionCondition(Moves.STOMP), SpeciesWildEvolutionDelay.LONG) + [SpeciesId.STEENEE]: [ + new SpeciesEvolution(SpeciesId.TSAREENA, 28, null, new MoveEvolutionCondition(MoveId.STOMP), SpeciesWildEvolutionDelay.LONG) ], - [Species.POIPOLE]: [ - new SpeciesEvolution(Species.NAGANADEL, 1, null, new MoveEvolutionCondition(Moves.DRAGON_PULSE), SpeciesWildEvolutionDelay.LONG) + [SpeciesId.POIPOLE]: [ + new SpeciesEvolution(SpeciesId.NAGANADEL, 1, null, new MoveEvolutionCondition(MoveId.DRAGON_PULSE), SpeciesWildEvolutionDelay.LONG) ], - [Species.ALOLA_SANDSHREW]: [ - new SpeciesEvolution(Species.ALOLA_SANDSLASH, 1, EvolutionItem.ICE_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.ALOLA_SANDSHREW]: [ + new SpeciesEvolution(SpeciesId.ALOLA_SANDSLASH, 1, EvolutionItem.ICE_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.ALOLA_VULPIX]: [ - new SpeciesEvolution(Species.ALOLA_NINETALES, 1, EvolutionItem.ICE_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.ALOLA_VULPIX]: [ + new SpeciesEvolution(SpeciesId.ALOLA_NINETALES, 1, EvolutionItem.ICE_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.APPLIN]: [ - new SpeciesEvolution(Species.DIPPLIN, 1, EvolutionItem.SYRUPY_APPLE, null, SpeciesWildEvolutionDelay.LONG), - new SpeciesEvolution(Species.FLAPPLE, 1, EvolutionItem.TART_APPLE, null, SpeciesWildEvolutionDelay.LONG), - new SpeciesEvolution(Species.APPLETUN, 1, EvolutionItem.SWEET_APPLE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.APPLIN]: [ + new SpeciesEvolution(SpeciesId.DIPPLIN, 1, EvolutionItem.SYRUPY_APPLE, null, SpeciesWildEvolutionDelay.LONG), + new SpeciesEvolution(SpeciesId.FLAPPLE, 1, EvolutionItem.TART_APPLE, null, SpeciesWildEvolutionDelay.LONG), + new SpeciesEvolution(SpeciesId.APPLETUN, 1, EvolutionItem.SWEET_APPLE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.CLOBBOPUS]: [ - new SpeciesEvolution(Species.GRAPPLOCT, 35, null, new MoveEvolutionCondition(Moves.TAUNT)/*Once Taunt is implemented, change evo level to 1 and delay to LONG*/) + [SpeciesId.CLOBBOPUS]: [ + new SpeciesEvolution(SpeciesId.GRAPPLOCT, 35, null, new MoveEvolutionCondition(MoveId.TAUNT)/*Once Taunt is implemented, change evo level to 1 and delay to LONG*/) ], - [Species.SINISTEA]: [ - new SpeciesFormEvolution(Species.POLTEAGEIST, "phony", "phony", 1, EvolutionItem.CRACKED_POT, null, SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.POLTEAGEIST, "antique", "antique", 1, EvolutionItem.CHIPPED_POT, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.SINISTEA]: [ + new SpeciesFormEvolution(SpeciesId.POLTEAGEIST, "phony", "phony", 1, EvolutionItem.CRACKED_POT, null, SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(SpeciesId.POLTEAGEIST, "antique", "antique", 1, EvolutionItem.CHIPPED_POT, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.MILCERY]: [ - new SpeciesFormEvolution(Species.ALCREMIE, "", "vanilla-cream", 1, EvolutionItem.STRAWBERRY_SWEET, - new BiomeEvolutionCondition([ Biome.TOWN, Biome.PLAINS, Biome.GRASS, Biome.TALL_GRASS, Biome.METROPOLIS ]), + [SpeciesId.MILCERY]: [ + new SpeciesFormEvolution(SpeciesId.ALCREMIE, "", "vanilla-cream", 1, EvolutionItem.STRAWBERRY_SWEET, + new BiomeEvolutionCondition([ BiomeId.TOWN, BiomeId.PLAINS, BiomeId.GRASS, BiomeId.TALL_GRASS, BiomeId.METROPOLIS ]), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.ALCREMIE, "", "ruby-cream", 1, EvolutionItem.STRAWBERRY_SWEET, - new BiomeEvolutionCondition([ Biome.BADLANDS, Biome.VOLCANO, Biome.GRAVEYARD, Biome.FACTORY, Biome.SLUM ]), + new SpeciesFormEvolution(SpeciesId.ALCREMIE, "", "ruby-cream", 1, EvolutionItem.STRAWBERRY_SWEET, + new BiomeEvolutionCondition([ BiomeId.BADLANDS, BiomeId.VOLCANO, BiomeId.GRAVEYARD, BiomeId.FACTORY, BiomeId.SLUM ]), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.ALCREMIE, "", "matcha-cream", 1, EvolutionItem.STRAWBERRY_SWEET, - new BiomeEvolutionCondition([ Biome.FOREST, Biome.SWAMP, Biome.MEADOW, Biome.JUNGLE ]), + new SpeciesFormEvolution(SpeciesId.ALCREMIE, "", "matcha-cream", 1, EvolutionItem.STRAWBERRY_SWEET, + new BiomeEvolutionCondition([ BiomeId.FOREST, BiomeId.SWAMP, BiomeId.MEADOW, BiomeId.JUNGLE ]), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.ALCREMIE, "", "mint-cream", 1, EvolutionItem.STRAWBERRY_SWEET, - new BiomeEvolutionCondition([ Biome.SEA, Biome.BEACH, Biome.LAKE, Biome.SEABED ]), + new SpeciesFormEvolution(SpeciesId.ALCREMIE, "", "mint-cream", 1, EvolutionItem.STRAWBERRY_SWEET, + new BiomeEvolutionCondition([ BiomeId.SEA, BiomeId.BEACH, BiomeId.LAKE, BiomeId.SEABED ]), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.ALCREMIE, "", "lemon-cream", 1, EvolutionItem.STRAWBERRY_SWEET, - new BiomeEvolutionCondition([ Biome.DESERT, Biome.POWER_PLANT, Biome.DOJO, Biome.RUINS, Biome.CONSTRUCTION_SITE ]), + new SpeciesFormEvolution(SpeciesId.ALCREMIE, "", "lemon-cream", 1, EvolutionItem.STRAWBERRY_SWEET, + new BiomeEvolutionCondition([ BiomeId.DESERT, BiomeId.POWER_PLANT, BiomeId.DOJO, BiomeId.RUINS, BiomeId.CONSTRUCTION_SITE ]), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.ALCREMIE, "", "salted-cream", 1, EvolutionItem.STRAWBERRY_SWEET, - new BiomeEvolutionCondition([ Biome.MOUNTAIN, Biome.CAVE, Biome.ICE_CAVE, Biome.FAIRY_CAVE, Biome.SNOWY_FOREST ]), + new SpeciesFormEvolution(SpeciesId.ALCREMIE, "", "salted-cream", 1, EvolutionItem.STRAWBERRY_SWEET, + new BiomeEvolutionCondition([ BiomeId.MOUNTAIN, BiomeId.CAVE, BiomeId.ICE_CAVE, BiomeId.FAIRY_CAVE, BiomeId.SNOWY_FOREST ]), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.ALCREMIE, "", "ruby-swirl", 1, EvolutionItem.STRAWBERRY_SWEET, - new BiomeEvolutionCondition([ Biome.WASTELAND, Biome.LABORATORY ]), + new SpeciesFormEvolution(SpeciesId.ALCREMIE, "", "ruby-swirl", 1, EvolutionItem.STRAWBERRY_SWEET, + new BiomeEvolutionCondition([ BiomeId.WASTELAND, BiomeId.LABORATORY ]), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.ALCREMIE, "", "caramel-swirl", 1, EvolutionItem.STRAWBERRY_SWEET, - new BiomeEvolutionCondition([ Biome.TEMPLE, Biome.ISLAND ]), + new SpeciesFormEvolution(SpeciesId.ALCREMIE, "", "caramel-swirl", 1, EvolutionItem.STRAWBERRY_SWEET, + new BiomeEvolutionCondition([ BiomeId.TEMPLE, BiomeId.ISLAND ]), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.ALCREMIE, "", "rainbow-swirl", 1, EvolutionItem.STRAWBERRY_SWEET, - new BiomeEvolutionCondition([ Biome.ABYSS, Biome.SPACE, Biome.END ]), + new SpeciesFormEvolution(SpeciesId.ALCREMIE, "", "rainbow-swirl", 1, EvolutionItem.STRAWBERRY_SWEET, + new BiomeEvolutionCondition([ BiomeId.ABYSS, BiomeId.SPACE, BiomeId.END ]), SpeciesWildEvolutionDelay.LONG) ], - [Species.DURALUDON]: [ - new SpeciesFormEvolution(Species.ARCHALUDON, "", "", 1, EvolutionItem.METAL_ALLOY, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.DURALUDON]: [ + new SpeciesFormEvolution(SpeciesId.ARCHALUDON, "", "", 1, EvolutionItem.METAL_ALLOY, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.KUBFU]: [ - new SpeciesFormEvolution(Species.URSHIFU, "", "single-strike", 1, EvolutionItem.SCROLL_OF_DARKNESS, null, SpeciesWildEvolutionDelay.VERY_LONG), - new SpeciesFormEvolution(Species.URSHIFU, "", "rapid-strike", 1, EvolutionItem.SCROLL_OF_WATERS, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.KUBFU]: [ + new SpeciesFormEvolution(SpeciesId.URSHIFU, "", "single-strike", 1, EvolutionItem.SCROLL_OF_DARKNESS, null, SpeciesWildEvolutionDelay.VERY_LONG), + new SpeciesFormEvolution(SpeciesId.URSHIFU, "", "rapid-strike", 1, EvolutionItem.SCROLL_OF_WATERS, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.GALAR_DARUMAKA]: [ - new SpeciesEvolution(Species.GALAR_DARMANITAN, 1, EvolutionItem.ICE_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.GALAR_DARUMAKA]: [ + new SpeciesEvolution(SpeciesId.GALAR_DARMANITAN, 1, EvolutionItem.ICE_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.HISUI_GROWLITHE]: [ - new SpeciesEvolution(Species.HISUI_ARCANINE, 1, EvolutionItem.FIRE_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.HISUI_GROWLITHE]: [ + new SpeciesEvolution(SpeciesId.HISUI_ARCANINE, 1, EvolutionItem.FIRE_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.HISUI_VOLTORB]: [ - new SpeciesEvolution(Species.HISUI_ELECTRODE, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.HISUI_VOLTORB]: [ + new SpeciesEvolution(SpeciesId.HISUI_ELECTRODE, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.HISUI_QWILFISH]: [ - new SpeciesEvolution(Species.OVERQWIL, 28, null, new MoveEvolutionCondition(Moves.BARB_BARRAGE), SpeciesWildEvolutionDelay.LONG) + [SpeciesId.HISUI_QWILFISH]: [ + new SpeciesEvolution(SpeciesId.OVERQWIL, 28, null, new MoveEvolutionCondition(MoveId.BARB_BARRAGE), SpeciesWildEvolutionDelay.LONG) ], - [Species.HISUI_SNEASEL]: [ - new SpeciesEvolution(Species.SNEASLER, 1, EvolutionItem.RAZOR_CLAW, new TimeOfDayEvolutionCondition("day") /* Razor claw at day*/, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.HISUI_SNEASEL]: [ + new SpeciesEvolution(SpeciesId.SNEASLER, 1, EvolutionItem.RAZOR_CLAW, new TimeOfDayEvolutionCondition("day") /* Razor claw at day*/, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.CHARCADET]: [ - new SpeciesEvolution(Species.ARMAROUGE, 1, EvolutionItem.AUSPICIOUS_ARMOR, null, SpeciesWildEvolutionDelay.LONG), - new SpeciesEvolution(Species.CERULEDGE, 1, EvolutionItem.MALICIOUS_ARMOR, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.CHARCADET]: [ + new SpeciesEvolution(SpeciesId.ARMAROUGE, 1, EvolutionItem.AUSPICIOUS_ARMOR, null, SpeciesWildEvolutionDelay.LONG), + new SpeciesEvolution(SpeciesId.CERULEDGE, 1, EvolutionItem.MALICIOUS_ARMOR, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.TADBULB]: [ - new SpeciesEvolution(Species.BELLIBOLT, 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.TADBULB]: [ + new SpeciesEvolution(SpeciesId.BELLIBOLT, 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.CAPSAKID]: [ - new SpeciesEvolution(Species.SCOVILLAIN, 1, EvolutionItem.FIRE_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.CAPSAKID]: [ + new SpeciesEvolution(SpeciesId.SCOVILLAIN, 1, EvolutionItem.FIRE_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.CETODDLE]: [ - new SpeciesEvolution(Species.CETITAN, 1, EvolutionItem.ICE_STONE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.CETODDLE]: [ + new SpeciesEvolution(SpeciesId.CETITAN, 1, EvolutionItem.ICE_STONE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.POLTCHAGEIST]: [ - new SpeciesFormEvolution(Species.SINISTCHA, "counterfeit", "unremarkable", 1, EvolutionItem.UNREMARKABLE_TEACUP, null, SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.SINISTCHA, "artisan", "masterpiece", 1, EvolutionItem.MASTERPIECE_TEACUP, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.POLTCHAGEIST]: [ + new SpeciesFormEvolution(SpeciesId.SINISTCHA, "counterfeit", "unremarkable", 1, EvolutionItem.UNREMARKABLE_TEACUP, null, SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(SpeciesId.SINISTCHA, "artisan", "masterpiece", 1, EvolutionItem.MASTERPIECE_TEACUP, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.DIPPLIN]: [ - new SpeciesEvolution(Species.HYDRAPPLE, 1, null, new MoveEvolutionCondition(Moves.DRAGON_CHEER), SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.DIPPLIN]: [ + new SpeciesEvolution(SpeciesId.HYDRAPPLE, 1, null, new MoveEvolutionCondition(MoveId.DRAGON_CHEER), SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.KADABRA]: [ - new SpeciesEvolution(Species.ALAKAZAM, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.KADABRA]: [ + new SpeciesEvolution(SpeciesId.ALAKAZAM, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.MACHOKE]: [ - new SpeciesEvolution(Species.MACHAMP, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.MACHOKE]: [ + new SpeciesEvolution(SpeciesId.MACHAMP, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.GRAVELER]: [ - new SpeciesEvolution(Species.GOLEM, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.GRAVELER]: [ + new SpeciesEvolution(SpeciesId.GOLEM, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.HAUNTER]: [ - new SpeciesEvolution(Species.GENGAR, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.HAUNTER]: [ + new SpeciesEvolution(SpeciesId.GENGAR, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.ONIX]: [ - new SpeciesEvolution(Species.STEELIX, 1, EvolutionItem.LINKING_CORD, new MoveTypeEvolutionCondition(PokemonType.STEEL), SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.ONIX]: [ + new SpeciesEvolution(SpeciesId.STEELIX, 1, EvolutionItem.LINKING_CORD, new MoveTypeEvolutionCondition(PokemonType.STEEL), SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.RHYDON]: [ - new SpeciesEvolution(Species.RHYPERIOR, 1, EvolutionItem.PROTECTOR, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.RHYDON]: [ + new SpeciesEvolution(SpeciesId.RHYPERIOR, 1, EvolutionItem.PROTECTOR, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.SEADRA]: [ - new SpeciesEvolution(Species.KINGDRA, 1, EvolutionItem.DRAGON_SCALE, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.SEADRA]: [ + new SpeciesEvolution(SpeciesId.KINGDRA, 1, EvolutionItem.DRAGON_SCALE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.SCYTHER]: [ - new SpeciesEvolution(Species.SCIZOR, 1, EvolutionItem.LINKING_CORD, new MoveTypeEvolutionCondition(PokemonType.STEEL), SpeciesWildEvolutionDelay.VERY_LONG), - new SpeciesEvolution(Species.KLEAVOR, 1, EvolutionItem.BLACK_AUGURITE, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.SCYTHER]: [ + new SpeciesEvolution(SpeciesId.SCIZOR, 1, EvolutionItem.LINKING_CORD, new MoveTypeEvolutionCondition(PokemonType.STEEL), SpeciesWildEvolutionDelay.VERY_LONG), + new SpeciesEvolution(SpeciesId.KLEAVOR, 1, EvolutionItem.BLACK_AUGURITE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.ELECTABUZZ]: [ - new SpeciesEvolution(Species.ELECTIVIRE, 1, EvolutionItem.ELECTIRIZER, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.ELECTABUZZ]: [ + new SpeciesEvolution(SpeciesId.ELECTIVIRE, 1, EvolutionItem.ELECTIRIZER, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.MAGMAR]: [ - new SpeciesEvolution(Species.MAGMORTAR, 1, EvolutionItem.MAGMARIZER, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.MAGMAR]: [ + new SpeciesEvolution(SpeciesId.MAGMORTAR, 1, EvolutionItem.MAGMARIZER, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.PORYGON]: [ - new SpeciesEvolution(Species.PORYGON2, 1, EvolutionItem.UPGRADE, null, SpeciesWildEvolutionDelay.LONG) + [SpeciesId.PORYGON]: [ + new SpeciesEvolution(SpeciesId.PORYGON2, 1, EvolutionItem.UPGRADE, null, SpeciesWildEvolutionDelay.LONG) ], - [Species.PORYGON2]: [ - new SpeciesEvolution(Species.PORYGON_Z, 1, EvolutionItem.DUBIOUS_DISC, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.PORYGON2]: [ + new SpeciesEvolution(SpeciesId.PORYGON_Z, 1, EvolutionItem.DUBIOUS_DISC, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.FEEBAS]: [ - new SpeciesEvolution(Species.MILOTIC, 1, EvolutionItem.PRISM_SCALE, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.FEEBAS]: [ + new SpeciesEvolution(SpeciesId.MILOTIC, 1, EvolutionItem.PRISM_SCALE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.DUSCLOPS]: [ - new SpeciesEvolution(Species.DUSKNOIR, 1, EvolutionItem.REAPER_CLOTH, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.DUSCLOPS]: [ + new SpeciesEvolution(SpeciesId.DUSKNOIR, 1, EvolutionItem.REAPER_CLOTH, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.CLAMPERL]: [ + [SpeciesId.CLAMPERL]: [ // TODO: Change the SpeciesEvolutionConditions here to use a bespoke HeldItemEvolutionCondition after the modifier rework - new SpeciesEvolution(Species.HUNTAIL, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => p.getHeldItems().some(m => m instanceof SpeciesStatBoosterModifier && (m.type as SpeciesStatBoosterModifierType).key === "DEEP_SEA_TOOTH")), SpeciesWildEvolutionDelay.VERY_LONG), - new SpeciesEvolution(Species.GOREBYSS, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => p.getHeldItems().some(m => m instanceof SpeciesStatBoosterModifier && (m.type as SpeciesStatBoosterModifierType).key === "DEEP_SEA_SCALE")), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(SpeciesId.HUNTAIL, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => p.getHeldItems().some(m => m instanceof SpeciesStatBoosterModifier && (m.type as SpeciesStatBoosterModifierType).key === "DEEP_SEA_TOOTH")), SpeciesWildEvolutionDelay.VERY_LONG), + new SpeciesEvolution(SpeciesId.GOREBYSS, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => p.getHeldItems().some(m => m instanceof SpeciesStatBoosterModifier && (m.type as SpeciesStatBoosterModifierType).key === "DEEP_SEA_SCALE")), SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.BOLDORE]: [ - new SpeciesEvolution(Species.GIGALITH, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.BOLDORE]: [ + new SpeciesEvolution(SpeciesId.GIGALITH, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.GURDURR]: [ - new SpeciesEvolution(Species.CONKELDURR, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.GURDURR]: [ + new SpeciesEvolution(SpeciesId.CONKELDURR, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.KARRABLAST]: [ - new SpeciesEvolution(Species.ESCAVALIER, 1, EvolutionItem.LINKING_CORD, new CaughtEvolutionCondition(Species.SHELMET), SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.KARRABLAST]: [ + new SpeciesEvolution(SpeciesId.ESCAVALIER, 1, EvolutionItem.LINKING_CORD, new CaughtEvolutionCondition(SpeciesId.SHELMET), SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.SHELMET]: [ - new SpeciesEvolution(Species.ACCELGOR, 1, EvolutionItem.LINKING_CORD, new CaughtEvolutionCondition(Species.KARRABLAST), SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.SHELMET]: [ + new SpeciesEvolution(SpeciesId.ACCELGOR, 1, EvolutionItem.LINKING_CORD, new CaughtEvolutionCondition(SpeciesId.KARRABLAST), SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.SPRITZEE]: [ - new SpeciesEvolution(Species.AROMATISSE, 1, EvolutionItem.SACHET, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.SPRITZEE]: [ + new SpeciesEvolution(SpeciesId.AROMATISSE, 1, EvolutionItem.SACHET, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.SWIRLIX]: [ - new SpeciesEvolution(Species.SLURPUFF, 1, EvolutionItem.WHIPPED_DREAM, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.SWIRLIX]: [ + new SpeciesEvolution(SpeciesId.SLURPUFF, 1, EvolutionItem.WHIPPED_DREAM, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.PHANTUMP]: [ - new SpeciesEvolution(Species.TREVENANT, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.PHANTUMP]: [ + new SpeciesEvolution(SpeciesId.TREVENANT, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.PUMPKABOO]: [ - new SpeciesEvolution(Species.GOURGEIST, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.PUMPKABOO]: [ + new SpeciesEvolution(SpeciesId.GOURGEIST, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.ALOLA_GRAVELER]: [ - new SpeciesEvolution(Species.ALOLA_GOLEM, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.ALOLA_GRAVELER]: [ + new SpeciesEvolution(SpeciesId.ALOLA_GOLEM, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.PRIMEAPE]: [ - new SpeciesEvolution(Species.ANNIHILAPE, 35, null, new MoveEvolutionCondition(Moves.RAGE_FIST), SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.PRIMEAPE]: [ + new SpeciesEvolution(SpeciesId.ANNIHILAPE, 35, null, new MoveEvolutionCondition(MoveId.RAGE_FIST), SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.GOLBAT]: [ - new SpeciesEvolution(Species.CROBAT, 1, null, new FriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.GOLBAT]: [ + new SpeciesEvolution(SpeciesId.CROBAT, 1, null, new FriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.VERY_LONG) ], - [Species.CHANSEY]: [ - new SpeciesEvolution(Species.BLISSEY, 1, null, new FriendshipEvolutionCondition(200), SpeciesWildEvolutionDelay.LONG) + [SpeciesId.CHANSEY]: [ + new SpeciesEvolution(SpeciesId.BLISSEY, 1, null, new FriendshipEvolutionCondition(200), SpeciesWildEvolutionDelay.LONG) ], - [Species.PICHU]: [ - new SpeciesFormEvolution(Species.PIKACHU, "spiky", "partner", 1, null, new FriendshipEvolutionCondition(90), SpeciesWildEvolutionDelay.SHORT), - new SpeciesFormEvolution(Species.PIKACHU, "", "", 1, null, new FriendshipEvolutionCondition(90), SpeciesWildEvolutionDelay.SHORT), + [SpeciesId.PICHU]: [ + new SpeciesFormEvolution(SpeciesId.PIKACHU, "spiky", "partner", 1, null, new FriendshipEvolutionCondition(90), SpeciesWildEvolutionDelay.SHORT), + new SpeciesFormEvolution(SpeciesId.PIKACHU, "", "", 1, null, new FriendshipEvolutionCondition(90), SpeciesWildEvolutionDelay.SHORT), ], - [Species.CLEFFA]: [ - new SpeciesEvolution(Species.CLEFAIRY, 1, null, new FriendshipEvolutionCondition(160), SpeciesWildEvolutionDelay.SHORT) + [SpeciesId.CLEFFA]: [ + new SpeciesEvolution(SpeciesId.CLEFAIRY, 1, null, new FriendshipEvolutionCondition(160), SpeciesWildEvolutionDelay.SHORT) ], - [Species.IGGLYBUFF]: [ - new SpeciesEvolution(Species.JIGGLYPUFF, 1, null, new FriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.SHORT) + [SpeciesId.IGGLYBUFF]: [ + new SpeciesEvolution(SpeciesId.JIGGLYPUFF, 1, null, new FriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.SHORT) ], - [Species.TOGEPI]: [ - new SpeciesEvolution(Species.TOGETIC, 1, null, new FriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.SHORT) + [SpeciesId.TOGEPI]: [ + new SpeciesEvolution(SpeciesId.TOGETIC, 1, null, new FriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.SHORT) ], - [Species.AZURILL]: [ - new SpeciesEvolution(Species.MARILL, 1, null, new FriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.SHORT) + [SpeciesId.AZURILL]: [ + new SpeciesEvolution(SpeciesId.MARILL, 1, null, new FriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.SHORT) ], - [Species.BUDEW]: [ - new SpeciesEvolution(Species.ROSELIA, 1, null, new FriendshipTimeOfDayEvolutionCondition(70, "day"), SpeciesWildEvolutionDelay.SHORT) + [SpeciesId.BUDEW]: [ + new SpeciesEvolution(SpeciesId.ROSELIA, 1, null, new FriendshipTimeOfDayEvolutionCondition(70, "day"), SpeciesWildEvolutionDelay.SHORT) ], - [Species.BUNEARY]: [ - new SpeciesEvolution(Species.LOPUNNY, 1, null, new FriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.MEDIUM) + [SpeciesId.BUNEARY]: [ + new SpeciesEvolution(SpeciesId.LOPUNNY, 1, null, new FriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.MEDIUM) ], - [Species.CHINGLING]: [ - new SpeciesEvolution(Species.CHIMECHO, 1, null, new FriendshipTimeOfDayEvolutionCondition(90, "night"), SpeciesWildEvolutionDelay.MEDIUM) + [SpeciesId.CHINGLING]: [ + new SpeciesEvolution(SpeciesId.CHIMECHO, 1, null, new FriendshipTimeOfDayEvolutionCondition(90, "night"), SpeciesWildEvolutionDelay.MEDIUM) ], - [Species.HAPPINY]: [ - new SpeciesEvolution(Species.CHANSEY, 1, null, new FriendshipEvolutionCondition(160), SpeciesWildEvolutionDelay.SHORT) + [SpeciesId.HAPPINY]: [ + new SpeciesEvolution(SpeciesId.CHANSEY, 1, null, new FriendshipEvolutionCondition(160), SpeciesWildEvolutionDelay.SHORT) ], - [Species.MUNCHLAX]: [ - new SpeciesEvolution(Species.SNORLAX, 1, null, new FriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.LONG) + [SpeciesId.MUNCHLAX]: [ + new SpeciesEvolution(SpeciesId.SNORLAX, 1, null, new FriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.LONG) ], - [Species.RIOLU]: [ - new SpeciesEvolution(Species.LUCARIO, 1, null, new FriendshipTimeOfDayEvolutionCondition(120, "day"), SpeciesWildEvolutionDelay.LONG) + [SpeciesId.RIOLU]: [ + new SpeciesEvolution(SpeciesId.LUCARIO, 1, null, new FriendshipTimeOfDayEvolutionCondition(120, "day"), SpeciesWildEvolutionDelay.LONG) ], - [Species.WOOBAT]: [ - new SpeciesEvolution(Species.SWOOBAT, 1, null, new FriendshipEvolutionCondition(90), SpeciesWildEvolutionDelay.MEDIUM) + [SpeciesId.WOOBAT]: [ + new SpeciesEvolution(SpeciesId.SWOOBAT, 1, null, new FriendshipEvolutionCondition(90), SpeciesWildEvolutionDelay.MEDIUM) ], - [Species.SWADLOON]: [ - new SpeciesEvolution(Species.LEAVANNY, 1, null, new FriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.LONG) + [SpeciesId.SWADLOON]: [ + new SpeciesEvolution(SpeciesId.LEAVANNY, 1, null, new FriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.LONG) ], - [Species.TYPE_NULL]: [ - new SpeciesEvolution(Species.SILVALLY, 1, null, new FriendshipEvolutionCondition(100), SpeciesWildEvolutionDelay.LONG) + [SpeciesId.TYPE_NULL]: [ + new SpeciesEvolution(SpeciesId.SILVALLY, 1, null, new FriendshipEvolutionCondition(100), SpeciesWildEvolutionDelay.LONG) ], - [Species.ALOLA_MEOWTH]: [ - new SpeciesEvolution(Species.ALOLA_PERSIAN, 1, null, new FriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.LONG) + [SpeciesId.ALOLA_MEOWTH]: [ + new SpeciesEvolution(SpeciesId.ALOLA_PERSIAN, 1, null, new FriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.LONG) ], - [Species.SNOM]: [ - new SpeciesEvolution(Species.FROSMOTH, 1, null, new FriendshipTimeOfDayEvolutionCondition(90, "night"), SpeciesWildEvolutionDelay.MEDIUM) + [SpeciesId.SNOM]: [ + new SpeciesEvolution(SpeciesId.FROSMOTH, 1, null, new FriendshipTimeOfDayEvolutionCondition(90, "night"), SpeciesWildEvolutionDelay.MEDIUM) ], - [Species.GIMMIGHOUL]: [ - new SpeciesFormEvolution(Species.GHOLDENGO, "chest", "", 1, null, new TreasureEvolutionCondition(), SpeciesWildEvolutionDelay.VERY_LONG), - new SpeciesFormEvolution(Species.GHOLDENGO, "roaming", "", 1, null, new TreasureEvolutionCondition(), SpeciesWildEvolutionDelay.VERY_LONG) + [SpeciesId.GIMMIGHOUL]: [ + new SpeciesFormEvolution(SpeciesId.GHOLDENGO, "chest", "", 1, null, new TreasureEvolutionCondition(), SpeciesWildEvolutionDelay.VERY_LONG), + new SpeciesFormEvolution(SpeciesId.GHOLDENGO, "roaming", "", 1, null, new TreasureEvolutionCondition(), SpeciesWildEvolutionDelay.VERY_LONG) ] }; interface PokemonPrevolutions { - [key: string]: Species + [key: string]: SpeciesId } export const pokemonPrevolutions: PokemonPrevolutions = {}; @@ -1903,7 +1903,7 @@ export function initPokemonPrevolutions(): void { if (ev.evoFormKey && megaFormKeys.indexOf(ev.evoFormKey) > -1) { continue; } - pokemonPrevolutions[ev.speciesId] = Number.parseInt(pk) as Species; + pokemonPrevolutions[ev.speciesId] = Number.parseInt(pk) as SpeciesId; } }); } diff --git a/src/data/balance/pokemon-level-moves.ts b/src/data/balance/pokemon-level-moves.ts index 0b0ba1b5f71..e8a0052da48 100644 --- a/src/data/balance/pokemon-level-moves.ts +++ b/src/data/balance/pokemon-level-moves.ts @@ -1,7 +1,7 @@ -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; -export type LevelMoves = ([number, Moves])[]; +export type LevelMoves = ([number, MoveId])[]; interface PokemonSpeciesLevelMoves { [key: number]: LevelMoves @@ -21,20001 +21,20001 @@ export const RELEARN_MOVE = -1; export const EVOLVE_MOVE = 0; export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { - [Species.BULBASAUR]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 3, Moves.VINE_WHIP ], - [ 6, Moves.GROWTH ], - [ 9, Moves.LEECH_SEED ], - [ 12, Moves.RAZOR_LEAF ], - [ 15, Moves.POISON_POWDER ], - [ 15, Moves.SLEEP_POWDER ], - [ 18, Moves.SEED_BOMB ], - [ 21, Moves.TAKE_DOWN ], - [ 24, Moves.SWEET_SCENT ], - [ 27, Moves.SYNTHESIS ], - [ 30, Moves.WORRY_SEED ], - [ 33, Moves.POWER_WHIP ], - [ 36, Moves.SOLAR_BEAM ], - ], - [Species.IVYSAUR]: [ - [ 1, Moves.VINE_WHIP ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.GROWTH ], - [ 9, Moves.LEECH_SEED ], - [ 12, Moves.RAZOR_LEAF ], - [ 15, Moves.POISON_POWDER ], - [ 15, Moves.SLEEP_POWDER ], - [ 20, Moves.SEED_BOMB ], - [ 25, Moves.TAKE_DOWN ], - [ 30, Moves.SWEET_SCENT ], - [ 35, Moves.SYNTHESIS ], - [ 40, Moves.WORRY_SEED ], - [ 45, Moves.POWER_WHIP ], - [ 50, Moves.SOLAR_BEAM ], - ], - [Species.VENUSAUR]: [ - [ EVOLVE_MOVE, Moves.PETAL_BLIZZARD ], - [ 1, Moves.GROWTH ], - [ 1, Moves.PETAL_DANCE ], - [ 1, Moves.VINE_WHIP ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 9, Moves.LEECH_SEED ], - [ 12, Moves.RAZOR_LEAF ], - [ 15, Moves.POISON_POWDER ], - [ 15, Moves.SLEEP_POWDER ], - [ 20, Moves.SEED_BOMB ], - [ 25, Moves.TAKE_DOWN ], - [ 30, Moves.SWEET_SCENT ], - [ 37, Moves.SYNTHESIS ], - [ 44, Moves.WORRY_SEED ], - [ 51, Moves.POWER_WHIP ], - [ 58, Moves.SOLAR_BEAM ], - ], - [Species.CHARMANDER]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 4, Moves.EMBER ], - [ 8, Moves.SMOKESCREEN ], - [ 12, Moves.DRAGON_BREATH ], - [ 17, Moves.FIRE_FANG ], - [ 20, Moves.SLASH ], - [ 24, Moves.FLAMETHROWER ], - [ 28, Moves.SCARY_FACE ], - [ 32, Moves.FIRE_SPIN ], - [ 36, Moves.INFERNO ], - [ 40, Moves.FLARE_BLITZ ], - ], - [Species.CHARMELEON]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 1, Moves.EMBER ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.FIRE_SPIN ], // Previous Stage Move - [ 12, Moves.DRAGON_BREATH ], - [ 19, Moves.FIRE_FANG ], - [ 24, Moves.SLASH ], - [ 30, Moves.FLAMETHROWER ], - [ 37, Moves.SCARY_FACE ], - [ 48, Moves.INFERNO ], - [ 54, Moves.FLARE_BLITZ ], - ], - [Species.CHARIZARD]: [ - [ EVOLVE_MOVE, Moves.AIR_SLASH ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 1, Moves.EMBER ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.HEAT_WAVE ], - [ 1, Moves.DRAGON_CLAW ], - [ 12, Moves.DRAGON_BREATH ], - [ 19, Moves.FIRE_FANG ], - [ 24, Moves.SLASH ], - [ 30, Moves.FLAMETHROWER ], - [ 39, Moves.SCARY_FACE ], - [ 46, Moves.FIRE_SPIN ], - [ 54, Moves.INFERNO ], - [ 62, Moves.FLARE_BLITZ ], - ], - [Species.SQUIRTLE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 3, Moves.WATER_GUN ], - [ 6, Moves.WITHDRAW ], - [ 9, Moves.RAPID_SPIN ], - [ 12, Moves.BITE ], - [ 15, Moves.WATER_PULSE ], - [ 18, Moves.PROTECT ], - [ 21, Moves.RAIN_DANCE ], - [ 24, Moves.AQUA_TAIL ], - [ 27, Moves.SHELL_SMASH ], - [ 30, Moves.IRON_DEFENSE ], - [ 33, Moves.HYDRO_PUMP ], - [ 36, Moves.WAVE_CRASH ], - ], - [Species.WARTORTLE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.WITHDRAW ], - [ 9, Moves.RAPID_SPIN ], - [ 12, Moves.BITE ], - [ 15, Moves.WATER_PULSE ], - [ 20, Moves.PROTECT ], - [ 25, Moves.RAIN_DANCE ], - [ 30, Moves.AQUA_TAIL ], - [ 35, Moves.SHELL_SMASH ], - [ 40, Moves.IRON_DEFENSE ], - [ 45, Moves.HYDRO_PUMP ], - [ 50, Moves.WAVE_CRASH ], - ], - [Species.BLASTOISE]: [ - [ EVOLVE_MOVE, Moves.FLASH_CANNON ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.WITHDRAW ], - [ 9, Moves.RAPID_SPIN ], - [ 12, Moves.BITE ], - [ 15, Moves.WATER_PULSE ], - [ 20, Moves.PROTECT ], - [ 25, Moves.RAIN_DANCE ], - [ 30, Moves.AQUA_TAIL ], - [ 35, Moves.SHELL_SMASH ], - [ 42, Moves.IRON_DEFENSE ], - [ 49, Moves.HYDRO_PUMP ], - [ 56, Moves.WAVE_CRASH ], - ], - [Species.CATERPIE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.STRING_SHOT ], - [ 9, Moves.BUG_BITE ], - ], - [Species.METAPOD]: [ - [ EVOLVE_MOVE, Moves.HARDEN ], - [ RELEARN_MOVE, Moves.TACKLE ], // Previous Stage Move - [ RELEARN_MOVE, Moves.STRING_SHOT ], // Previous Stage Move - [ RELEARN_MOVE, Moves.BUG_BITE ], // Previous Stage Move - [ 1, Moves.HARDEN ], - ], - [Species.BUTTERFREE]: [ - [ EVOLVE_MOVE, Moves.GUST ], - [ 1, Moves.TACKLE ], - [ 1, Moves.STRING_SHOT ], - [ 1, Moves.HARDEN ], - [ 1, Moves.BUG_BITE ], - [ 4, Moves.SUPERSONIC ], - [ 8, Moves.CONFUSION ], - [ 12, Moves.POISON_POWDER ], - [ 12, Moves.STUN_SPORE ], - [ 12, Moves.SLEEP_POWDER ], - [ 16, Moves.PSYBEAM ], - [ 20, Moves.WHIRLWIND ], - [ 24, Moves.AIR_SLASH ], - [ 28, Moves.SAFEGUARD ], - [ 32, Moves.BUG_BUZZ ], - [ 36, Moves.TAILWIND ], - [ 40, Moves.RAGE_POWDER ], - [ 44, Moves.QUIVER_DANCE ], - ], - [Species.WEEDLE]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.STRING_SHOT ], - [ 9, Moves.BUG_BITE ], - ], - [Species.KAKUNA]: [ - [ EVOLVE_MOVE, Moves.HARDEN ], - [ RELEARN_MOVE, Moves.POISON_STING ], // Previous Stage Move - [ RELEARN_MOVE, Moves.STRING_SHOT ], // Previous Stage Move - [ RELEARN_MOVE, Moves.BUG_BITE ], // Previous Stage Move - [ 1, Moves.HARDEN ], - ], - [Species.BEEDRILL]: [ - [ EVOLVE_MOVE, Moves.TWINEEDLE ], - [ 1, Moves.POISON_STING ], // Previous Stage Move - [ 1, Moves.STRING_SHOT ], // Previous Stage Move - [ 1, Moves.HARDEN ], // Previous Stage Move - [ 1, Moves.BUG_BITE ], // Previous Stage Move - [ 1, Moves.FURY_ATTACK ], - [ 11, Moves.FURY_CUTTER ], - [ 14, Moves.RAGE ], - [ 17, Moves.PURSUIT ], - [ 20, Moves.FOCUS_ENERGY ], - [ 23, Moves.VENOSHOCK ], - [ 26, Moves.ASSURANCE ], - [ 29, Moves.TOXIC_SPIKES ], - [ 32, Moves.PIN_MISSILE ], - [ 35, Moves.POISON_JAB ], - [ 38, Moves.AGILITY ], - [ 41, Moves.ENDEAVOR ], - [ 44, Moves.FELL_STINGER ], - ], - [Species.PIDGEY]: [ - [ 1, Moves.TACKLE ], - [ 5, Moves.SAND_ATTACK ], - [ 9, Moves.GUST ], - [ 13, Moves.QUICK_ATTACK ], - [ 17, Moves.WHIRLWIND ], - [ 21, Moves.TWISTER ], - [ 25, Moves.FEATHER_DANCE ], - [ 29, Moves.AGILITY ], - [ 33, Moves.WING_ATTACK ], - [ 37, Moves.ROOST ], - [ 41, Moves.TAILWIND ], - [ 45, Moves.AERIAL_ACE ], - [ 49, Moves.AIR_SLASH ], - [ 53, Moves.HURRICANE ], - ], - [Species.PIDGEOTTO]: [ - [ 1, Moves.GUST ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 5, Moves.SAND_ATTACK ], - [ 9, Moves.GUST ], - [ 13, Moves.QUICK_ATTACK ], - [ 17, Moves.WHIRLWIND ], - [ 22, Moves.TWISTER ], - [ 27, Moves.FEATHER_DANCE ], - [ 32, Moves.AGILITY ], - [ 37, Moves.WING_ATTACK ], - [ 42, Moves.ROOST ], - [ 47, Moves.TAILWIND ], - [ 52, Moves.AERIAL_ACE ], - [ 57, Moves.AIR_SLASH ], - [ 62, Moves.HURRICANE ], - ], - [Species.PIDGEOT]: [ - [ 1, Moves.GUST ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.HURRICANE ], - [ 5, Moves.SAND_ATTACK ], - [ 9, Moves.GUST ], - [ 17, Moves.WHIRLWIND ], - [ 22, Moves.TWISTER ], - [ 27, Moves.FEATHER_DANCE ], - [ 32, Moves.AGILITY ], - [ 38, Moves.WING_ATTACK ], - [ 44, Moves.ROOST ], - [ 50, Moves.TAILWIND ], - [ 56, Moves.AERIAL_ACE ], - [ 62, Moves.AIR_SLASH ], - [ 68, Moves.HURRICANE ], - ], - [Species.RATTATA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 4, Moves.QUICK_ATTACK ], - [ 7, Moves.FOCUS_ENERGY ], - [ 10, Moves.BITE ], - [ 13, Moves.LASER_FOCUS ], - [ 16, Moves.TAKE_DOWN ], - [ 19, Moves.ASSURANCE ], - [ 22, Moves.CRUNCH ], - [ 25, Moves.SUCKER_PUNCH ], - [ 28, Moves.SUPER_FANG ], - [ 31, Moves.DOUBLE_EDGE ], - [ 34, Moves.ENDEAVOR ], - ], - [Species.RATICATE]: [ - [ EVOLVE_MOVE, Moves.SCARY_FACE ], - [ 1, Moves.SWORDS_DANCE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.FOCUS_ENERGY ], - [ 10, Moves.BITE ], - [ 13, Moves.LASER_FOCUS ], - [ 16, Moves.TAKE_DOWN ], - [ 19, Moves.ASSURANCE ], - [ 24, Moves.CRUNCH ], - [ 29, Moves.SUCKER_PUNCH ], - [ 34, Moves.SUPER_FANG ], - [ 39, Moves.DOUBLE_EDGE ], - [ 44, Moves.ENDEAVOR ], - ], - [Species.SPEAROW]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 4, Moves.LEER ], - [ 8, Moves.ASSURANCE ], - [ 11, Moves.FURY_ATTACK ], - [ 15, Moves.AERIAL_ACE ], - [ 18, Moves.WING_ATTACK ], - [ 22, Moves.TAKE_DOWN ], - [ 25, Moves.AGILITY ], - [ 29, Moves.FOCUS_ENERGY ], - [ 32, Moves.ROOST ], - [ 36, Moves.DRILL_PECK ], - ], - [Species.FEAROW]: [ - [ 1, Moves.LEER ], - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 1, Moves.ASSURANCE ], - [ 1, Moves.PLUCK ], - [ 1, Moves.DRILL_RUN ], - [ 1, Moves.PURSUIT ], - [ 4, Moves.LEER ], - [ 8, Moves.ASSURANCE ], - [ 11, Moves.FURY_ATTACK ], - [ 15, Moves.AERIAL_ACE ], - [ 18, Moves.WING_ATTACK ], - [ 23, Moves.TAKE_DOWN ], - [ 27, Moves.AGILITY ], - [ 32, Moves.FOCUS_ENERGY ], - [ 36, Moves.ROOST ], - [ 41, Moves.DRILL_PECK ], - ], - [Species.EKANS]: [ - [ 1, Moves.WRAP ], - [ 1, Moves.LEER ], - [ 4, Moves.POISON_STING ], - [ 9, Moves.BITE ], - [ 12, Moves.GLARE ], - [ 17, Moves.SCREECH ], - [ 20, Moves.ACID ], - [ 25, Moves.SWALLOW ], - [ 25, Moves.STOCKPILE ], - [ 25, Moves.SPIT_UP ], - [ 28, Moves.ACID_SPRAY ], - [ 33, Moves.SLUDGE_BOMB ], - [ 36, Moves.GASTRO_ACID ], - [ 38, Moves.BELCH ], - [ 41, Moves.HAZE ], - [ 44, Moves.COIL ], - [ 49, Moves.GUNK_SHOT ], - ], - [Species.ARBOK]: [ - [ EVOLVE_MOVE, Moves.CRUNCH ], - [ 1, Moves.WRAP ], - [ 1, Moves.POISON_STING ], - [ 1, Moves.LEER ], - [ 1, Moves.BITE ], - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.FIRE_FANG ], - [ 12, Moves.GLARE ], - [ 17, Moves.SCREECH ], - [ 20, Moves.ACID ], - [ 27, Moves.STOCKPILE ], - [ 27, Moves.SPIT_UP ], - [ 27, Moves.SWALLOW ], - [ 32, Moves.ACID_SPRAY ], - [ 39, Moves.SLUDGE_BOMB ], - [ 44, Moves.GASTRO_ACID ], - [ 48, Moves.BELCH ], - [ 51, Moves.HAZE ], - [ 56, Moves.COIL ], - [ 63, Moves.GUNK_SHOT ], - ], - [Species.PIKACHU]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.NUZZLE ], - [ 4, Moves.THUNDER_WAVE ], - [ 8, Moves.DOUBLE_TEAM ], - [ 12, Moves.ELECTRO_BALL ], - [ 16, Moves.FEINT ], - [ 20, Moves.SPARK ], - [ 24, Moves.AGILITY ], - [ 28, Moves.IRON_TAIL ], - [ 32, Moves.DISCHARGE ], - [ 36, Moves.THUNDERBOLT ], - [ 40, Moves.LIGHT_SCREEN ], - [ 44, Moves.THUNDER ], - [ 48, Moves.PIKA_PAPOW ], - ], - [Species.RAICHU]: [ - [ EVOLVE_MOVE, Moves.ZIPPY_ZAP ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.THUNDER ], - [ 1, Moves.AGILITY ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.LIGHT_SCREEN ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.SPARK ], - [ 1, Moves.IRON_TAIL ], - [ 1, Moves.FEINT ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.DISCHARGE ], - [ 1, Moves.ELECTRO_BALL ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.NUZZLE ], - [ 1, Moves.THUNDER_PUNCH ], - [ 5, Moves.THUNDERBOLT ], - [ 50, Moves.PIKA_PAPOW ], - ], - [Species.SANDSHREW]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.DEFENSE_CURL ], - [ 3, Moves.POISON_STING ], - [ 6, Moves.SAND_ATTACK ], - [ 9, Moves.ROLLOUT ], - [ 12, Moves.FURY_CUTTER ], - [ 15, Moves.RAPID_SPIN ], - [ 18, Moves.BULLDOZE ], - [ 21, Moves.SWIFT ], - [ 24, Moves.FURY_SWIPES ], - [ 27, Moves.AGILITY ], - [ 30, Moves.SLASH ], - [ 33, Moves.DIG ], - [ 36, Moves.GYRO_BALL ], - [ 39, Moves.SWORDS_DANCE ], - [ 42, Moves.SANDSTORM ], - [ 45, Moves.EARTHQUAKE ], - ], - [Species.SANDSLASH]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.POISON_STING ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.CRUSH_CLAW ], - [ 1, Moves.AGILITY ], // Previous Stage Move - [ 9, Moves.ROLLOUT ], - [ 12, Moves.FURY_CUTTER ], - [ 15, Moves.RAPID_SPIN ], - [ 18, Moves.BULLDOZE ], - [ 21, Moves.SWIFT ], - [ 26, Moves.FURY_SWIPES ], - [ 31, Moves.SAND_TOMB ], - [ 36, Moves.SLASH ], - [ 41, Moves.DIG ], - [ 46, Moves.GYRO_BALL ], - [ 51, Moves.SWORDS_DANCE ], - [ 56, Moves.SANDSTORM ], - [ 61, Moves.EARTHQUAKE ], - ], - [Species.NIDORAN_F]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.GROWL ], - [ 5, Moves.SCRATCH ], - [ 10, Moves.TAIL_WHIP ], - [ 15, Moves.FURY_SWIPES ], - [ 20, Moves.TOXIC_SPIKES ], - [ 25, Moves.DOUBLE_KICK ], - [ 30, Moves.BITE ], - [ 35, Moves.HELPING_HAND ], - [ 40, Moves.TOXIC ], - [ 45, Moves.FLATTER ], - [ 50, Moves.CRUNCH ], - [ 55, Moves.EARTH_POWER ], - ], - [Species.NIDORINA]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.POISON_STING ], - [ 1, Moves.GROWL ], - [ 15, Moves.FURY_SWIPES ], - [ 22, Moves.TOXIC_SPIKES ], - [ 29, Moves.DOUBLE_KICK ], - [ 36, Moves.BITE ], - [ 43, Moves.HELPING_HAND ], - [ 50, Moves.TOXIC ], - [ 57, Moves.FLATTER ], - [ 64, Moves.CRUNCH ], - [ 71, Moves.EARTH_POWER ], - ], - [Species.NIDOQUEEN]: [ - [ EVOLVE_MOVE, Moves.SUPERPOWER ], - [ 1, Moves.SLUDGE_WAVE ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.DOUBLE_KICK ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.POISON_STING ], - [ 1, Moves.BITE ], - [ 1, Moves.GROWL ], - [ 1, Moves.TOXIC ], - [ 1, Moves.FURY_SWIPES ], - [ 1, Moves.CRUNCH ], - [ 1, Moves.FLATTER ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.TOXIC_SPIKES ], - [ 1, Moves.EARTH_POWER ], - ], - [Species.NIDORAN_M]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.LEER ], - [ 5, Moves.PECK ], - [ 10, Moves.FOCUS_ENERGY ], - [ 15, Moves.FURY_ATTACK ], - [ 20, Moves.TOXIC_SPIKES ], - [ 25, Moves.DOUBLE_KICK ], - [ 30, Moves.HORN_ATTACK ], - [ 35, Moves.HELPING_HAND ], - [ 40, Moves.TOXIC ], - [ 45, Moves.FLATTER ], - [ 50, Moves.POISON_JAB ], - [ 55, Moves.EARTH_POWER ], - ], - [Species.NIDORINO]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 1, Moves.FOCUS_ENERGY ], - [ 15, Moves.FURY_ATTACK ], - [ 22, Moves.TOXIC_SPIKES ], - [ 29, Moves.DOUBLE_KICK ], - [ 36, Moves.HORN_ATTACK ], - [ 43, Moves.HELPING_HAND ], - [ 50, Moves.TOXIC ], - [ 57, Moves.FLATTER ], - [ 64, Moves.POISON_JAB ], - [ 71, Moves.EARTH_POWER ], - ], - [Species.NIDOKING]: [ - [ EVOLVE_MOVE, Moves.MEGAHORN ], - [ 1, Moves.SLUDGE_WAVE ], - [ 1, Moves.DOUBLE_KICK ], - [ 1, Moves.HORN_ATTACK ], - [ 1, Moves.FURY_ATTACK ], - [ 1, Moves.POISON_STING ], - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 1, Moves.TOXIC ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.FLATTER ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.TOXIC_SPIKES ], - [ 1, Moves.POISON_JAB ], - [ 1, Moves.EARTH_POWER ], - ], - [Species.CLEFAIRY]: [ - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 1, Moves.SING ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.SPLASH ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.DISARMING_VOICE ], - [ 1, Moves.SPOTLIGHT ], - [ 4, Moves.STORED_POWER ], - [ 8, Moves.ENCORE ], - [ 12, Moves.AFTER_YOU ], - [ 16, Moves.LIFE_DEW ], - [ 20, Moves.METRONOME ], - [ 24, Moves.MOONLIGHT ], - [ 28, Moves.GRAVITY ], - [ 32, Moves.METEOR_MASH ], - [ 36, Moves.FOLLOW_ME ], - [ 40, Moves.COSMIC_POWER ], - [ 44, Moves.MOONBLAST ], - [ 48, Moves.HEALING_WISH ], - ], - [Species.CLEFABLE]: [ - [ RELEARN_MOVE, Moves.POUND ], - [ RELEARN_MOVE, Moves.GROWL ], - [ RELEARN_MOVE, Moves.SING ], - [ RELEARN_MOVE, Moves.DEFENSE_CURL ], - [ RELEARN_MOVE, Moves.SPLASH ], - [ RELEARN_MOVE, Moves.SWEET_KISS ], - [ RELEARN_MOVE, Moves.CHARM ], - [ RELEARN_MOVE, Moves.ENCORE ], - [ RELEARN_MOVE, Moves.MOONLIGHT ], - [ RELEARN_MOVE, Moves.FOLLOW_ME ], - [ RELEARN_MOVE, Moves.COSMIC_POWER ], - [ RELEARN_MOVE, Moves.GRAVITY ], - [ RELEARN_MOVE, Moves.HEALING_WISH ], - [ RELEARN_MOVE, Moves.COPYCAT ], - [ RELEARN_MOVE, Moves.AFTER_YOU ], - [ RELEARN_MOVE, Moves.STORED_POWER ], - [ RELEARN_MOVE, Moves.DISARMING_VOICE ], - [ 1, Moves.METRONOME ], - [ 1, Moves.METEOR_MASH ], - [ 1, Moves.MOONBLAST ], - [ 1, Moves.LIFE_DEW ], - [ 1, Moves.SPOTLIGHT ], - ], - [Species.VULPIX]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.EMBER ], - [ 4, Moves.DISABLE ], - [ 8, Moves.QUICK_ATTACK ], - [ 12, Moves.SPITE ], - [ 16, Moves.INCINERATE ], - [ 20, Moves.CONFUSE_RAY ], - [ 24, Moves.WILL_O_WISP ], - [ 28, Moves.EXTRASENSORY ], - [ 32, Moves.FLAMETHROWER ], - [ 36, Moves.IMPRISON ], - [ 40, Moves.FIRE_SPIN ], - [ 44, Moves.SAFEGUARD ], - [ 48, Moves.INFERNO ], - [ 52, Moves.FIRE_BLAST ], - ], - [Species.NINETALES]: [ - [ RELEARN_MOVE, Moves.DISABLE ], - [ RELEARN_MOVE, Moves.EMBER ], - [ RELEARN_MOVE, Moves.FIRE_SPIN ], - [ RELEARN_MOVE, Moves.CONFUSE_RAY ], - [ RELEARN_MOVE, Moves.FIRE_BLAST ], - [ RELEARN_MOVE, Moves.SPITE ], - [ RELEARN_MOVE, Moves.SAFEGUARD ], - [ RELEARN_MOVE, Moves.WILL_O_WISP ], - [ RELEARN_MOVE, Moves.IMPRISON ], - [ RELEARN_MOVE, Moves.EXTRASENSORY ], - [ RELEARN_MOVE, Moves.NASTY_PLOT ], - [ RELEARN_MOVE, Moves.INCINERATE ], - [ RELEARN_MOVE, Moves.INFERNO ], - [ 1, Moves.FLAMETHROWER ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.QUICK_ATTACK ], - ], - [Species.JIGGLYPUFF]: [ - [ 1, Moves.POUND ], - [ 1, Moves.SING ], - [ 1, Moves.DISABLE ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.DISARMING_VOICE ], - [ 4, Moves.ECHOED_VOICE ], - [ 8, Moves.COVET ], - [ 12, Moves.STOCKPILE ], - [ 12, Moves.SPIT_UP ], - [ 12, Moves.SWALLOW ], - [ 16, Moves.ROUND ], - [ 20, Moves.REST ], - [ 24, Moves.BODY_SLAM ], - [ 28, Moves.MIMIC ], - [ 32, Moves.GYRO_BALL ], - [ 36, Moves.HYPER_VOICE ], - [ 44, Moves.DOUBLE_EDGE ], - ], - [Species.WIGGLYTUFF]: [ - [ 1, Moves.POUND ], - [ 1, Moves.BODY_SLAM ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.SING ], - [ 1, Moves.DISABLE ], - [ 1, Moves.MIMIC ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.REST ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.STOCKPILE ], - [ 1, Moves.SPIT_UP ], - [ 1, Moves.SWALLOW ], - [ 1, Moves.HYPER_VOICE ], - [ 1, Moves.COVET ], - [ 1, Moves.GYRO_BALL ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.ROUND ], - [ 1, Moves.ECHOED_VOICE ], - [ 1, Moves.DISARMING_VOICE ], - [ 5, Moves.PLAY_ROUGH ], - ], - [Species.ZUBAT]: [ - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.ABSORB ], - [ 5, Moves.ASTONISH ], - [ 10, Moves.MEAN_LOOK ], - [ 15, Moves.POISON_FANG ], - [ 20, Moves.QUICK_GUARD ], - [ 25, Moves.AIR_CUTTER ], - [ 30, Moves.BITE ], - [ 35, Moves.HAZE ], - [ 40, Moves.VENOSHOCK ], - [ 45, Moves.CONFUSE_RAY ], - [ 50, Moves.AIR_SLASH ], - [ 55, Moves.LEECH_LIFE ], - ], - [Species.GOLBAT]: [ - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.ABSORB ], - [ 1, Moves.SCREECH ], - [ 1, Moves.MEAN_LOOK ], - [ 1, Moves.ASTONISH ], - [ 15, Moves.POISON_FANG ], - [ 20, Moves.QUICK_GUARD ], - [ 27, Moves.AIR_CUTTER ], - [ 34, Moves.BITE ], - [ 41, Moves.HAZE ], - [ 48, Moves.VENOSHOCK ], - [ 55, Moves.CONFUSE_RAY ], - [ 62, Moves.AIR_SLASH ], - [ 69, Moves.LEECH_LIFE ], - ], - [Species.ODDISH]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.GROWTH ], - [ 4, Moves.ACID ], - [ 8, Moves.SWEET_SCENT ], - [ 12, Moves.MEGA_DRAIN ], - [ 14, Moves.POISON_POWDER ], - [ 16, Moves.STUN_SPORE ], - [ 18, Moves.SLEEP_POWDER ], - [ 20, Moves.GIGA_DRAIN ], - [ 24, Moves.TOXIC ], - [ 28, Moves.MOONBLAST ], - [ 32, Moves.GRASSY_TERRAIN ], - [ 36, Moves.MOONLIGHT ], - [ 40, Moves.PETAL_DANCE ], - ], - [Species.GLOOM]: [ - [ 1, Moves.ACID ], - [ 1, Moves.ABSORB ], - [ 1, Moves.GROWTH ], - [ 1, Moves.SWEET_SCENT ], - [ 12, Moves.MEGA_DRAIN ], - [ 14, Moves.POISON_POWDER ], - [ 16, Moves.STUN_SPORE ], - [ 18, Moves.SLEEP_POWDER ], - [ 20, Moves.GIGA_DRAIN ], - [ 26, Moves.TOXIC ], - [ 32, Moves.MOONBLAST ], - [ 38, Moves.GRASSY_TERRAIN ], - [ 44, Moves.MOONLIGHT ], - [ 50, Moves.PETAL_DANCE ], - ], - [Species.VILEPLUME]: [ - [ EVOLVE_MOVE, Moves.PETAL_BLIZZARD ], - [ 1, Moves.ACID ], - [ 1, Moves.ABSORB ], - [ 1, Moves.MEGA_DRAIN ], - [ 1, Moves.GROWTH ], - [ 1, Moves.POISON_POWDER ], - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.SLEEP_POWDER ], - [ 1, Moves.PETAL_DANCE ], - [ 1, Moves.TOXIC ], - [ 1, Moves.GIGA_DRAIN ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.MOONLIGHT ], - [ 1, Moves.AROMATHERAPY ], - [ 1, Moves.GRASSY_TERRAIN ], - [ 1, Moves.MOONBLAST ], - ], - [Species.PARAS]: [ - [ 1, Moves.SCRATCH ], - [ 6, Moves.POISON_POWDER ], - [ 6, Moves.STUN_SPORE ], - [ 11, Moves.ABSORB ], - [ 17, Moves.FURY_CUTTER ], - [ 22, Moves.SPORE ], - [ 27, Moves.SLASH ], - [ 33, Moves.GROWTH ], - [ 38, Moves.GIGA_DRAIN ], - [ 43, Moves.AROMATHERAPY ], - [ 49, Moves.RAGE_POWDER ], - [ 54, Moves.X_SCISSOR ], - ], - [Species.PARASECT]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.ABSORB ], - [ 1, Moves.POISON_POWDER ], - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.CROSS_POISON ], - [ 6, Moves.POISON_POWDER ], - [ 6, Moves.STUN_SPORE ], - [ 11, Moves.ABSORB ], - [ 17, Moves.FURY_CUTTER ], - [ 22, Moves.SPORE ], - [ 29, Moves.SLASH ], - [ 37, Moves.GROWTH ], - [ 44, Moves.GIGA_DRAIN ], - [ 51, Moves.AROMATHERAPY ], - [ 59, Moves.RAGE_POWDER ], - [ 66, Moves.X_SCISSOR ], - ], - [Species.VENONAT]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.DISABLE ], - [ 5, Moves.SUPERSONIC ], - [ 11, Moves.CONFUSION ], - [ 13, Moves.POISON_POWDER ], - [ 17, Moves.PSYBEAM ], - [ 23, Moves.STUN_SPORE ], - [ 25, Moves.BUG_BUZZ ], - [ 29, Moves.SLEEP_POWDER ], - [ 35, Moves.LEECH_LIFE ], - [ 37, Moves.ZEN_HEADBUTT ], - [ 41, Moves.POISON_FANG ], - [ 47, Moves.PSYCHIC ], - ], - [Species.VENOMOTH]: [ - [ EVOLVE_MOVE, Moves.AIR_SLASH ], - [ 1, Moves.TACKLE ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.DISABLE ], - [ 1, Moves.QUIVER_DANCE ], - [ 1, Moves.SILVER_WIND ], - [ 11, Moves.CONFUSION ], - [ 13, Moves.POISON_POWDER ], - [ 17, Moves.PSYBEAM ], - [ 23, Moves.STUN_SPORE ], - [ 25, Moves.BUG_BUZZ ], - [ 29, Moves.SLEEP_POWDER ], - [ 37, Moves.LEECH_LIFE ], - [ 41, Moves.ZEN_HEADBUTT ], - [ 47, Moves.POISON_FANG ], - [ 55, Moves.PSYCHIC ], - ], - [Species.DIGLETT]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.SAND_ATTACK ], - [ 4, Moves.GROWL ], - [ 8, Moves.ASTONISH ], - [ 12, Moves.MUD_SLAP ], - [ 16, Moves.BULLDOZE ], - [ 20, Moves.SUCKER_PUNCH ], - [ 24, Moves.SLASH ], - [ 28, Moves.SANDSTORM ], - [ 32, Moves.DIG ], - [ 36, Moves.EARTH_POWER ], - [ 40, Moves.EARTHQUAKE ], - [ 44, Moves.FISSURE ], - ], - [Species.DUGTRIO]: [ - [ EVOLVE_MOVE, Moves.SAND_TOMB ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.GROWL ], - [ 1, Moves.TRI_ATTACK ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.NIGHT_SLASH ], - [ 1, Moves.ROTOTILLER ], - [ 12, Moves.MUD_SLAP ], - [ 16, Moves.BULLDOZE ], - [ 20, Moves.SUCKER_PUNCH ], - [ 24, Moves.SLASH ], - [ 30, Moves.SANDSTORM ], - [ 36, Moves.DIG ], - [ 42, Moves.EARTH_POWER ], - [ 48, Moves.EARTHQUAKE ], - [ 54, Moves.FISSURE ], - ], - [Species.MEOWTH]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.FAKE_OUT ], - [ 4, Moves.FEINT ], - [ 8, Moves.SCRATCH ], - [ 12, Moves.PAY_DAY ], - [ 16, Moves.BITE ], - [ 20, Moves.TAUNT ], - [ 24, Moves.ASSURANCE ], - [ 29, Moves.FURY_SWIPES ], - [ 32, Moves.SCREECH ], - [ 36, Moves.SLASH ], - [ 40, Moves.NASTY_PLOT ], - [ 44, Moves.PLAY_ROUGH ], - ], - [Species.PERSIAN]: [ - [ EVOLVE_MOVE, Moves.POWER_GEM ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.FEINT ], - [ 1, Moves.SWITCHEROO ], - [ 12, Moves.PAY_DAY ], - [ 16, Moves.BITE ], - [ 20, Moves.TAUNT ], - [ 24, Moves.ASSURANCE ], - [ 31, Moves.FURY_SWIPES ], - [ 36, Moves.SCREECH ], - [ 42, Moves.SLASH ], - [ 48, Moves.NASTY_PLOT ], - [ 54, Moves.PLAY_ROUGH ], - ], - [Species.PSYDUCK]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_SPORT ], - [ 3, Moves.WATER_GUN ], - [ 6, Moves.CONFUSION ], - [ 9, Moves.FURY_SWIPES ], - [ 12, Moves.WATER_PULSE ], - [ 15, Moves.DISABLE ], - [ 18, Moves.ZEN_HEADBUTT ], - [ 21, Moves.SCREECH ], - [ 24, Moves.AQUA_TAIL ], - [ 27, Moves.SOAK ], - [ 30, Moves.PSYCH_UP ], - [ 34, Moves.AMNESIA ], - [ 39, Moves.WONDER_ROOM ], - ], - [Species.GOLDUCK]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.AQUA_JET ], - [ 1, Moves.WATER_SPORT ], - [ 1, Moves.ME_FIRST ], - [ 9, Moves.FURY_SWIPES ], - [ 12, Moves.WATER_PULSE ], - [ 15, Moves.DISABLE ], - [ 18, Moves.ZEN_HEADBUTT ], - [ 21, Moves.SCREECH ], - [ 24, Moves.AQUA_TAIL ], - [ 27, Moves.SOAK ], - [ 30, Moves.PSYCH_UP ], - [ 36, Moves.AMNESIA ], - [ 40, Moves.HYDRO_PUMP ], - [ 45, Moves.WONDER_ROOM ], - ], - [Species.MANKEY]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.COVET ], - [ 5, Moves.FURY_SWIPES ], - [ 8, Moves.LOW_KICK ], - [ 12, Moves.SEISMIC_TOSS ], - [ 17, Moves.SWAGGER ], - [ 22, Moves.CROSS_CHOP ], - [ 26, Moves.ASSURANCE ], - [ 29, Moves.THRASH ], - [ 33, Moves.CLOSE_COMBAT ], - [ 36, Moves.SCREECH ], - [ 40, Moves.STOMPING_TANTRUM ], - [ 44, Moves.OUTRAGE ], - [ 48, Moves.FINAL_GAMBIT ], - ], - [Species.PRIMEAPE]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.COVET ], // Previous Stage Move - [ 1, Moves.FLING ], - [ 5, Moves.FURY_SWIPES ], - [ 8, Moves.LOW_KICK ], - [ 15, Moves.SEISMIC_TOSS ], - [ 17, Moves.SWAGGER ], - [ 22, Moves.CROSS_CHOP ], - [ 26, Moves.ASSURANCE ], - [ 30, Moves.THRASH ], - [ 35, Moves.RAGE_FIST ], - [ 39, Moves.CLOSE_COMBAT ], - [ 44, Moves.SCREECH ], - [ 48, Moves.STOMPING_TANTRUM ], - [ 53, Moves.OUTRAGE ], - [ 57, Moves.FINAL_GAMBIT ], - ], - [Species.GROWLITHE]: [ - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 4, Moves.HOWL ], - [ 8, Moves.BITE ], - [ 12, Moves.FLAME_WHEEL ], - [ 16, Moves.HELPING_HAND ], - [ 20, Moves.AGILITY ], - [ 24, Moves.FIRE_FANG ], - [ 28, Moves.RETALIATE ], - [ 32, Moves.CRUNCH ], - [ 36, Moves.TAKE_DOWN ], - [ 40, Moves.FLAMETHROWER ], - [ 44, Moves.ROAR ], - [ 48, Moves.PLAY_ROUGH ], - [ 52, Moves.REVERSAL ], - [ 56, Moves.FLARE_BLITZ ], - ], - [Species.ARCANINE]: [ - [ EVOLVE_MOVE, Moves.EXTREME_SPEED ], - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.LEER ], - [ 1, Moves.BITE ], - [ 1, Moves.ROAR ], - [ 1, Moves.EMBER ], - [ 1, Moves.AGILITY ], - [ 1, Moves.FLAME_WHEEL ], - [ 1, Moves.REVERSAL ], - [ 1, Moves.CRUNCH ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.ODOR_SLEUTH ], - [ 1, Moves.HOWL ], - [ 1, Moves.FLARE_BLITZ ], - [ 1, Moves.FIRE_FANG ], - [ 1, Moves.RETALIATE ], - [ 1, Moves.PLAY_ROUGH ], - [ 5, Moves.FLAMETHROWER ], - ], - [Species.POLIWAG]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.HYPNOSIS ], - [ 1, Moves.WATER_SPORT ], - [ 6, Moves.POUND ], - [ 12, Moves.MUD_SHOT ], - [ 18, Moves.BUBBLE_BEAM ], - [ 24, Moves.RAIN_DANCE ], - [ 30, Moves.BODY_SLAM ], - [ 36, Moves.EARTH_POWER ], - [ 42, Moves.HYDRO_PUMP ], - [ 48, Moves.BELLY_DRUM ], - [ 54, Moves.DOUBLE_EDGE ], - ], - [Species.POLIWHIRL]: [ - [ 1, Moves.POUND ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.HYPNOSIS ], - [ 1, Moves.WATER_SPORT ], - [ 1, Moves.MUD_SHOT ], - [ 18, Moves.BUBBLE_BEAM ], - [ 24, Moves.RAIN_DANCE ], - [ 32, Moves.BODY_SLAM ], - [ 40, Moves.EARTH_POWER ], - [ 48, Moves.HYDRO_PUMP ], - [ 56, Moves.BELLY_DRUM ], - [ 66, Moves.DOUBLE_EDGE ], - ], - [Species.POLIWRATH]: [ - [ EVOLVE_MOVE, Moves.DYNAMIC_PUNCH ], - [ RELEARN_MOVE, Moves.POUND ], - [ RELEARN_MOVE, Moves.DOUBLE_EDGE ], - [ RELEARN_MOVE, Moves.WATER_GUN ], - [ RELEARN_MOVE, Moves.HYDRO_PUMP ], - [ RELEARN_MOVE, Moves.BELLY_DRUM ], - [ RELEARN_MOVE, Moves.RAIN_DANCE ], - [ RELEARN_MOVE, Moves.MUD_SHOT ], - [ RELEARN_MOVE, Moves.EARTH_POWER ], - [ RELEARN_MOVE, Moves.CIRCLE_THROW ], - [ 1, Moves.BUBBLE_BEAM ], - [ 1, Moves.BODY_SLAM ], - [ 1, Moves.HYPNOSIS ], - [ 1, Moves.WATER_SPORT ], - ], - [Species.ABRA]: [ - [ 1, Moves.TELEPORT ], - [ 1, Moves.CONFUSION ], // Custom - ], - [Species.KADABRA]: [ - [ EVOLVE_MOVE, Moves.PSYBEAM ], // LGPE - [ 1, Moves.CONFUSION ], // Previous Stage Move, Custom - [ 1, Moves.DISABLE ], - [ 1, Moves.TELEPORT ], - [ 1, Moves.KINESIS ], - [ 10, Moves.REFLECT ], - [ 15, Moves.ALLY_SWITCH ], - [ 20, Moves.PSYCHO_CUT ], - [ 25, Moves.RECOVER ], - [ 30, Moves.PSYSHOCK ], - [ 35, Moves.PSYCHIC ], - [ 40, Moves.ROLE_PLAY ], - [ 45, Moves.FUTURE_SIGHT ], - [ 50, Moves.CALM_MIND ], - ], - [Species.ALAKAZAM]: [ - [ 1, Moves.DISABLE ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.TELEPORT ], - [ 1, Moves.KINESIS ], - [ 5, Moves.PSYBEAM ], - [ 10, Moves.REFLECT ], - [ 15, Moves.ALLY_SWITCH ], - [ 20, Moves.PSYCHO_CUT ], - [ 25, Moves.RECOVER ], - [ 30, Moves.PSYSHOCK ], - [ 35, Moves.PSYCHIC ], - [ 40, Moves.ROLE_PLAY ], - [ 45, Moves.FUTURE_SIGHT ], - [ 50, Moves.CALM_MIND ], - ], - [Species.MACHOP]: [ - [ 1, Moves.LEER ], - [ 1, Moves.LOW_KICK ], - [ 4, Moves.FOCUS_ENERGY ], - [ 8, Moves.REVENGE ], - [ 12, Moves.LOW_SWEEP ], - [ 16, Moves.KNOCK_OFF ], - [ 20, Moves.SCARY_FACE ], - [ 24, Moves.VITAL_THROW ], - [ 29, Moves.STRENGTH ], - [ 32, Moves.DUAL_CHOP ], - [ 36, Moves.BULK_UP ], - [ 40, Moves.SEISMIC_TOSS ], - [ 44, Moves.DYNAMIC_PUNCH ], - [ 48, Moves.CROSS_CHOP ], - [ 52, Moves.DOUBLE_EDGE ], - ], - [Species.MACHOKE]: [ - [ 1, Moves.LEER ], - [ 1, Moves.LOW_KICK ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.REVENGE ], - [ 1, Moves.KARATE_CHOP ], - [ 12, Moves.LOW_SWEEP ], - [ 16, Moves.KNOCK_OFF ], - [ 20, Moves.SCARY_FACE ], - [ 24, Moves.VITAL_THROW ], - [ 31, Moves.STRENGTH ], - [ 36, Moves.DUAL_CHOP ], - [ 42, Moves.BULK_UP ], - [ 48, Moves.SEISMIC_TOSS ], - [ 54, Moves.DYNAMIC_PUNCH ], - [ 60, Moves.CROSS_CHOP ], - [ 66, Moves.DOUBLE_EDGE ], - ], - [Species.MACHAMP]: [ - [ 1, Moves.LEER ], - [ 1, Moves.LOW_KICK ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.REVENGE ], - [ 1, Moves.WIDE_GUARD ], - [ 1, Moves.KARATE_CHOP ], - [ 12, Moves.LOW_SWEEP ], - [ 16, Moves.KNOCK_OFF ], - [ 20, Moves.SCARY_FACE ], - [ 24, Moves.VITAL_THROW ], - [ 31, Moves.STRENGTH ], - [ 36, Moves.DUAL_CHOP ], - [ 42, Moves.BULK_UP ], - [ 48, Moves.SEISMIC_TOSS ], - [ 54, Moves.DYNAMIC_PUNCH ], - [ 60, Moves.CROSS_CHOP ], - [ 66, Moves.DOUBLE_EDGE ], - ], - [Species.BELLSPROUT]: [ - [ 1, Moves.VINE_WHIP ], - [ 7, Moves.GROWTH ], - [ 11, Moves.WRAP ], - [ 13, Moves.SLEEP_POWDER ], - [ 15, Moves.POISON_POWDER ], - [ 17, Moves.STUN_SPORE ], - [ 23, Moves.ACID ], - [ 27, Moves.KNOCK_OFF ], - [ 29, Moves.SWEET_SCENT ], - [ 35, Moves.GASTRO_ACID ], - [ 39, Moves.RAZOR_LEAF ], - [ 41, Moves.POISON_JAB ], - [ 47, Moves.SLAM ], - [ 52, Moves.POWER_WHIP ], - ], - [Species.WEEPINBELL]: [ - [ 1, Moves.VINE_WHIP ], - [ 1, Moves.WRAP ], - [ 1, Moves.GROWTH ], - [ 13, Moves.SLEEP_POWDER ], - [ 15, Moves.POISON_POWDER ], - [ 17, Moves.STUN_SPORE ], - [ 24, Moves.ACID ], - [ 29, Moves.KNOCK_OFF ], - [ 32, Moves.SWEET_SCENT ], - [ 39, Moves.GASTRO_ACID ], - [ 44, Moves.RAZOR_LEAF ], - [ 47, Moves.POISON_JAB ], - [ 54, Moves.SLAM ], - [ 58, Moves.POWER_WHIP ], - ], - [Species.VICTREEBEL]: [ - [ EVOLVE_MOVE, Moves.LEAF_STORM ], - [ RELEARN_MOVE, Moves.STOCKPILE ], - [ RELEARN_MOVE, Moves.SWALLOW ], - [ RELEARN_MOVE, Moves.SPIT_UP ], - [ RELEARN_MOVE, Moves.WRAP ], // Previous Stage Move - [ RELEARN_MOVE, Moves.GROWTH ], // Previous Stage Move - [ RELEARN_MOVE, Moves.ACID ], // Previous Stage Move - [ RELEARN_MOVE, Moves.KNOCK_OFF ], // Previous Stage Move - [ RELEARN_MOVE, Moves.GASTRO_ACID ], - [ RELEARN_MOVE, Moves.POISON_JAB ], // Previous Stage Move - [ RELEARN_MOVE, Moves.SLAM ], // Previous Stage Move - [ RELEARN_MOVE, Moves.POWER_WHIP ], - [ 1, Moves.VINE_WHIP ], - [ 1, Moves.SLEEP_POWDER ], - [ 1, Moves.POISON_POWDER ], // Previous Stage Move - [ 1, Moves.STUN_SPORE ], // Previous Stage Move - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.RAZOR_LEAF ], - [ 44, Moves.LEAF_BLADE ], - ], - [Species.TENTACOOL]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.WATER_GUN ], - [ 4, Moves.ACID ], - [ 8, Moves.WRAP ], - [ 12, Moves.SUPERSONIC ], - [ 16, Moves.WATER_PULSE ], - [ 20, Moves.SCREECH ], - [ 24, Moves.BUBBLE_BEAM ], - [ 28, Moves.HEX ], - [ 32, Moves.ACID_ARMOR ], - [ 36, Moves.POISON_JAB ], - [ 40, Moves.SURF ], - [ 44, Moves.SLUDGE_WAVE ], - [ 48, Moves.HYDRO_PUMP ], - ], - [Species.TENTACRUEL]: [ - [ 1, Moves.WRAP ], - [ 1, Moves.POISON_STING ], - [ 1, Moves.ACID ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.REFLECT_TYPE ], - [ 1, Moves.WRING_OUT ], - [ 12, Moves.SUPERSONIC ], - [ 16, Moves.WATER_PULSE ], - [ 20, Moves.SCREECH ], - [ 24, Moves.BUBBLE_BEAM ], - [ 28, Moves.HEX ], - [ 34, Moves.ACID_ARMOR ], - [ 40, Moves.POISON_JAB ], - [ 46, Moves.SURF ], - [ 52, Moves.SLUDGE_WAVE ], - [ 58, Moves.HYDRO_PUMP ], - ], - [Species.GEODUDE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.DEFENSE_CURL ], - [ 6, Moves.ROCK_POLISH ], - [ 10, Moves.ROLLOUT ], - [ 12, Moves.BULLDOZE ], - [ 16, Moves.ROCK_THROW ], - [ 18, Moves.SMACK_DOWN ], - [ 24, Moves.SELF_DESTRUCT ], - [ 28, Moves.STEALTH_ROCK ], - [ 30, Moves.ROCK_BLAST ], - [ 34, Moves.EARTHQUAKE ], - [ 36, Moves.EXPLOSION ], - [ 40, Moves.DOUBLE_EDGE ], - [ 42, Moves.STONE_EDGE ], - ], - [Species.GRAVELER]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.ROCK_POLISH ], - [ 10, Moves.ROLLOUT ], - [ 12, Moves.BULLDOZE ], - [ 16, Moves.ROCK_THROW ], - [ 18, Moves.SMACK_DOWN ], - [ 24, Moves.SELF_DESTRUCT ], - [ 30, Moves.STEALTH_ROCK ], - [ 34, Moves.ROCK_BLAST ], - [ 40, Moves.EARTHQUAKE ], - [ 44, Moves.EXPLOSION ], - [ 50, Moves.DOUBLE_EDGE ], - [ 54, Moves.STONE_EDGE ], - ], - [Species.GOLEM]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.ROCK_POLISH ], - [ 1, Moves.ROLLOUT ], // Previous Stage Move - [ 1, Moves.HEAVY_SLAM ], - [ 16, Moves.ROCK_THROW ], - [ 18, Moves.SMACK_DOWN ], - [ 22, Moves.BULLDOZE ], - [ 24, Moves.SELF_DESTRUCT ], - [ 30, Moves.STEALTH_ROCK ], - [ 34, Moves.ROCK_BLAST ], - [ 40, Moves.EARTHQUAKE ], - [ 44, Moves.EXPLOSION ], - [ 50, Moves.DOUBLE_EDGE ], - [ 54, Moves.STONE_EDGE ], - ], - [Species.PONYTA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 5, Moves.TAIL_WHIP ], - [ 10, Moves.EMBER ], - [ 15, Moves.FLAME_CHARGE ], - [ 20, Moves.AGILITY ], - [ 25, Moves.FLAME_WHEEL ], - [ 30, Moves.STOMP ], - [ 35, Moves.FIRE_SPIN ], - [ 41, Moves.TAKE_DOWN ], - [ 45, Moves.INFERNO ], - [ 50, Moves.FIRE_BLAST ], - [ 55, Moves.FLARE_BLITZ ], - ], - [Species.RAPIDASH]: [ - [ EVOLVE_MOVE, Moves.SMART_STRIKE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.EMBER ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.MEGAHORN ], - [ 1, Moves.POISON_JAB ], - [ 15, Moves.FLAME_CHARGE ], - [ 20, Moves.AGILITY ], - [ 25, Moves.FLAME_WHEEL ], - [ 30, Moves.STOMP ], - [ 35, Moves.FIRE_SPIN ], - [ 43, Moves.TAKE_DOWN ], - [ 49, Moves.INFERNO ], - [ 56, Moves.FIRE_BLAST ], - [ 63, Moves.FLARE_BLITZ ], - ], - [Species.SLOWPOKE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.CURSE ], - [ 3, Moves.GROWL ], - [ 6, Moves.WATER_GUN ], - [ 9, Moves.YAWN ], - [ 12, Moves.CONFUSION ], - [ 15, Moves.DISABLE ], - [ 18, Moves.WATER_PULSE ], - [ 21, Moves.HEADBUTT ], - [ 24, Moves.ZEN_HEADBUTT ], - [ 27, Moves.AMNESIA ], - [ 30, Moves.SURF ], - [ 33, Moves.SLACK_OFF ], - [ 36, Moves.PSYCHIC ], - [ 39, Moves.PSYCH_UP ], - [ 42, Moves.RAIN_DANCE ], - [ 45, Moves.HEAL_PULSE ], - ], - [Species.SLOWBRO]: [ - [ RELEARN_MOVE, Moves.FUTURE_SIGHT ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.CURSE ], - [ 9, Moves.YAWN ], - [ 12, Moves.CONFUSION ], - [ 15, Moves.DISABLE ], - [ 18, Moves.WATER_PULSE ], - [ 21, Moves.HEADBUTT ], - [ 24, Moves.ZEN_HEADBUTT ], - [ 27, Moves.AMNESIA ], - [ 30, Moves.SURF ], - [ 33, Moves.SLACK_OFF ], - [ 36, Moves.PSYCHIC ], - [ 41, Moves.PSYCH_UP ], - [ 46, Moves.RAIN_DANCE ], - [ 51, Moves.HEAL_PULSE ], - ], - [Species.MAGNEMITE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.THUNDER_SHOCK ], - [ 4, Moves.SUPERSONIC ], - [ 8, Moves.THUNDER_WAVE ], - [ 12, Moves.ELECTRO_BALL ], - [ 16, Moves.GYRO_BALL ], - [ 20, Moves.SPARK ], - [ 24, Moves.SCREECH ], - [ 28, Moves.MAGNET_RISE ], - [ 32, Moves.FLASH_CANNON ], - [ 36, Moves.DISCHARGE ], - [ 40, Moves.METAL_SOUND ], - [ 44, Moves.LIGHT_SCREEN ], - [ 48, Moves.LOCK_ON ], - [ 52, Moves.ZAP_CANNON ], - ], - [Species.MAGNETON]: [ - [ EVOLVE_MOVE, Moves.TRI_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.ELECTRIC_TERRAIN ], - [ 12, Moves.ELECTRO_BALL ], - [ 16, Moves.GYRO_BALL ], - [ 20, Moves.SPARK ], - [ 24, Moves.SCREECH ], - [ 28, Moves.MAGNET_RISE ], - [ 34, Moves.FLASH_CANNON ], - [ 40, Moves.DISCHARGE ], - [ 46, Moves.METAL_SOUND ], - [ 52, Moves.LIGHT_SCREEN ], - [ 58, Moves.LOCK_ON ], - [ 64, Moves.ZAP_CANNON ], - ], - [Species.FARFETCHD]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.PECK ], - [ 5, Moves.LEER ], - [ 10, Moves.FURY_CUTTER ], - [ 15, Moves.CUT ], - [ 20, Moves.AERIAL_ACE ], - [ 25, Moves.AIR_CUTTER ], - [ 30, Moves.KNOCK_OFF ], - [ 35, Moves.FALSE_SWIPE ], - [ 40, Moves.SLASH ], - [ 45, Moves.SWORDS_DANCE ], - [ 50, Moves.AIR_SLASH ], - [ 55, Moves.LEAF_BLADE ], - [ 60, Moves.AGILITY ], - [ 65, Moves.BRAVE_BIRD ], - ], - [Species.DODUO]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 5, Moves.QUICK_ATTACK ], - [ 9, Moves.FURY_ATTACK ], - [ 14, Moves.PLUCK ], - [ 19, Moves.DOUBLE_HIT ], - [ 23, Moves.AGILITY ], - [ 27, Moves.UPROAR ], - [ 30, Moves.ACUPRESSURE ], - [ 33, Moves.SWORDS_DANCE ], - [ 36, Moves.DRILL_PECK ], - [ 39, Moves.ENDEAVOR ], - [ 43, Moves.THRASH ], - ], - [Species.DODRIO]: [ - [ EVOLVE_MOVE, Moves.TRI_ATTACK ], - [ 1, Moves.TRI_ATTACK ], - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 5, Moves.QUICK_ATTACK ], - [ 12, Moves.FURY_ATTACK ], - [ 15, Moves.PLUCK ], - [ 19, Moves.DOUBLE_HIT ], - [ 23, Moves.AGILITY ], - [ 26, Moves.UPROAR ], - [ 30, Moves.ACUPRESSURE ], - [ 34, Moves.SWORDS_DANCE ], - [ 38, Moves.DRILL_PECK ], - [ 43, Moves.ENDEAVOR ], - [ 50, Moves.THRASH ], - ], - [Species.SEEL]: [ - [ 1, Moves.HEADBUTT ], - [ 3, Moves.GROWL ], - [ 7, Moves.CHARM ], - [ 11, Moves.ICY_WIND ], - [ 13, Moves.ENCORE ], - [ 17, Moves.ICE_SHARD ], - [ 21, Moves.REST ], - [ 23, Moves.AQUA_RING ], - [ 27, Moves.AURORA_BEAM ], - [ 31, Moves.AQUA_JET ], - [ 33, Moves.BRINE ], - [ 37, Moves.TAKE_DOWN ], - [ 41, Moves.DIVE ], - [ 43, Moves.AQUA_TAIL ], - [ 47, Moves.ICE_BEAM ], - [ 51, Moves.SAFEGUARD ], - [ 53, Moves.SNOWSCAPE ], - ], - [Species.DEWGONG]: [ - [ EVOLVE_MOVE, Moves.SHEER_COLD ], - [ 1, Moves.HEADBUTT ], - [ 1, Moves.GROWL ], - [ 1, Moves.ICY_WIND ], - [ 1, Moves.CHARM ], - [ 1, Moves.SIGNAL_BEAM ], - [ 13, Moves.ENCORE ], - [ 17, Moves.ICE_SHARD ], - [ 21, Moves.REST ], - [ 23, Moves.AQUA_RING ], - [ 27, Moves.AURORA_BEAM ], - [ 31, Moves.AQUA_JET ], - [ 33, Moves.BRINE ], - [ 39, Moves.TAKE_DOWN ], - [ 45, Moves.DIVE ], - [ 49, Moves.AQUA_TAIL ], - [ 55, Moves.ICE_BEAM ], - [ 61, Moves.SAFEGUARD ], - [ 65, Moves.SNOWSCAPE ], - ], - [Species.GRIMER]: [ - [ 1, Moves.POUND ], - [ 1, Moves.POISON_GAS ], - [ 4, Moves.HARDEN ], - [ 7, Moves.MUD_SLAP ], - [ 12, Moves.DISABLE ], - [ 15, Moves.SLUDGE ], - [ 18, Moves.MUD_SHOT ], - [ 21, Moves.MINIMIZE ], - [ 26, Moves.TOXIC ], - [ 29, Moves.SLUDGE_BOMB ], - [ 32, Moves.SLUDGE_WAVE ], - [ 37, Moves.SCREECH ], - [ 40, Moves.GUNK_SHOT ], - [ 43, Moves.ACID_ARMOR ], - [ 46, Moves.BELCH ], - [ 48, Moves.MEMENTO ], - ], - [Species.MUK]: [ - [ 1, Moves.POUND ], - [ 1, Moves.HARDEN ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.MUD_SLAP ], - [ 12, Moves.DISABLE ], - [ 15, Moves.SLUDGE ], - [ 18, Moves.MUD_SHOT ], - [ 21, Moves.MINIMIZE ], - [ 26, Moves.TOXIC ], - [ 29, Moves.SLUDGE_BOMB ], - [ 32, Moves.SLUDGE_WAVE ], - [ 37, Moves.SCREECH ], - [ 40, Moves.GUNK_SHOT ], - [ 46, Moves.ACID_ARMOR ], - [ 52, Moves.BELCH ], - [ 57, Moves.MEMENTO ], - ], - [Species.SHELLDER]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.WATER_GUN ], - [ 4, Moves.WITHDRAW ], - [ 8, Moves.ICE_SHARD ], - [ 12, Moves.LEER ], - [ 16, Moves.WHIRLPOOL ], - [ 20, Moves.SUPERSONIC ], - [ 24, Moves.AURORA_BEAM ], - [ 28, Moves.PROTECT ], - [ 32, Moves.RAZOR_SHELL ], - [ 36, Moves.IRON_DEFENSE ], - [ 40, Moves.ICE_BEAM ], - [ 44, Moves.SHELL_SMASH ], - [ 48, Moves.HYDRO_PUMP ], - ], - [Species.CLOYSTER]: [ - [ EVOLVE_MOVE, Moves.ICICLE_SPEAR ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.HYDRO_PUMP ], - [ 1, Moves.ICE_BEAM ], - [ 1, Moves.AURORA_BEAM ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.PROTECT ], - [ 1, Moves.SPIKES ], - [ 1, Moves.WHIRLPOOL ], - [ 1, Moves.IRON_DEFENSE ], - [ 1, Moves.TOXIC_SPIKES ], - [ 1, Moves.ICE_SHARD ], - [ 1, Moves.SHELL_SMASH ], - [ 1, Moves.ICICLE_CRASH ], - [ 5, Moves.RAZOR_SHELL ], - ], - [Species.GASTLY]: [ - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.LICK ], - [ 1, Moves.ACID ], // Custom - [ 4, Moves.HYPNOSIS ], - [ 8, Moves.MEAN_LOOK ], - [ 12, Moves.PAYBACK ], - [ 16, Moves.SPITE ], - [ 20, Moves.CURSE ], - [ 24, Moves.HEX ], - [ 28, Moves.NIGHT_SHADE ], - [ 32, Moves.SUCKER_PUNCH ], - [ 36, Moves.DARK_PULSE ], - [ 40, Moves.SHADOW_BALL ], - [ 44, Moves.DESTINY_BOND ], - [ 48, Moves.DREAM_EATER ], - ], - [Species.HAUNTER]: [ - [ EVOLVE_MOVE, Moves.SHADOW_PUNCH ], - [ 1, Moves.HYPNOSIS ], - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.LICK ], - [ 1, Moves.ACID ], // Previous Stage Move, Custom - [ 1, Moves.MEAN_LOOK ], - [ 12, Moves.PAYBACK ], - [ 16, Moves.SPITE ], - [ 20, Moves.CURSE ], - [ 24, Moves.HEX ], - [ 30, Moves.NIGHT_SHADE ], - [ 36, Moves.SUCKER_PUNCH ], - [ 42, Moves.DARK_PULSE ], - [ 48, Moves.SHADOW_BALL ], - [ 54, Moves.DESTINY_BOND ], - [ 60, Moves.DREAM_EATER ], - ], - [Species.GENGAR]: [ - [ 1, Moves.HYPNOSIS ], - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.LICK ], - [ 1, Moves.ACID ], // Previous Stage Move, Custom - [ 1, Moves.PERISH_SONG ], - [ 1, Moves.MEAN_LOOK ], - [ 1, Moves.SHADOW_PUNCH ], - [ 1, Moves.REFLECT_TYPE ], - [ 12, Moves.PAYBACK ], - [ 16, Moves.SPITE ], - [ 20, Moves.CURSE ], - [ 24, Moves.HEX ], - [ 30, Moves.NIGHT_SHADE ], - [ 36, Moves.SUCKER_PUNCH ], - [ 42, Moves.DARK_PULSE ], - [ 48, Moves.SHADOW_BALL ], - [ 54, Moves.DESTINY_BOND ], - [ 60, Moves.DREAM_EATER ], - ], - [Species.ONIX]: [ - [ 1, Moves.BIND ], - [ 1, Moves.TACKLE ], - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.HARDEN ], - [ 1, Moves.MUD_SPORT ], - [ 4, Moves.SMACK_DOWN ], - [ 8, Moves.ROCK_POLISH ], - [ 12, Moves.DRAGON_BREATH ], - [ 16, Moves.CURSE ], - [ 20, Moves.ROCK_SLIDE ], - [ 22, Moves.GYRO_BALL ], // Custom, from USUM - [ 24, Moves.SCREECH ], - [ 28, Moves.SAND_TOMB ], - [ 32, Moves.STEALTH_ROCK ], - [ 36, Moves.SLAM ], - [ 40, Moves.SANDSTORM ], - [ 44, Moves.DIG ], - [ 48, Moves.IRON_TAIL ], - [ 52, Moves.STONE_EDGE ], - [ 56, Moves.DOUBLE_EDGE ], - ], - [Species.DROWZEE]: [ - [ 1, Moves.POUND ], - [ 1, Moves.HYPNOSIS ], - [ 5, Moves.DISABLE ], - [ 9, Moves.CONFUSION ], - [ 13, Moves.HEADBUTT ], - [ 17, Moves.POISON_GAS ], - [ 21, Moves.PSYBEAM ], - [ 25, Moves.PSYCH_UP ], - [ 29, Moves.ZEN_HEADBUTT ], - [ 33, Moves.SWAGGER ], - [ 37, Moves.PSYCHIC ], - [ 41, Moves.NASTY_PLOT ], - [ 45, Moves.PSYSHOCK ], - [ 49, Moves.FUTURE_SIGHT ], - ], - [Species.HYPNO]: [ - [ 1, Moves.POUND ], - [ 1, Moves.DISABLE ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.HYPNOSIS ], - [ 1, Moves.SWITCHEROO ], - [ 1, Moves.NIGHTMARE ], - [ 13, Moves.HEADBUTT ], - [ 17, Moves.POISON_GAS ], - [ 21, Moves.PSYBEAM ], - [ 25, Moves.PSYCH_UP ], - [ 32, Moves.ZEN_HEADBUTT ], - [ 37, Moves.SWAGGER ], - [ 42, Moves.PSYCHIC ], - [ 47, Moves.NASTY_PLOT ], - [ 51, Moves.PSYSHOCK ], - [ 56, Moves.FUTURE_SIGHT ], - ], - [Species.KRABBY]: [ - [ 1, Moves.LEER ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.MUD_SPORT ], - [ 4, Moves.HARDEN ], - [ 8, Moves.METAL_CLAW ], - [ 12, Moves.MUD_SHOT ], - [ 16, Moves.PROTECT ], - [ 20, Moves.BUBBLE_BEAM ], - [ 24, Moves.STOMP ], - [ 29, Moves.FLAIL ], - [ 32, Moves.RAZOR_SHELL ], - [ 36, Moves.SLAM ], - [ 40, Moves.SWORDS_DANCE ], - [ 44, Moves.CRABHAMMER ], - [ 48, Moves.GUILLOTINE ], - ], - [Species.KINGLER]: [ - [ 1, Moves.LEER ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.HARDEN ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.HAMMER_ARM ], - [ 1, Moves.WIDE_GUARD ], - [ 1, Moves.MUD_SPORT ], - [ 12, Moves.MUD_SHOT ], - [ 16, Moves.PROTECT ], - [ 20, Moves.BUBBLE_BEAM ], - [ 24, Moves.STOMP ], - [ 31, Moves.FLAIL ], - [ 36, Moves.RAZOR_SHELL ], - [ 42, Moves.SLAM ], - [ 48, Moves.SWORDS_DANCE ], - [ 54, Moves.CRABHAMMER ], - [ 60, Moves.GUILLOTINE ], - ], - [Species.VOLTORB]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.CHARGE ], - [ 4, Moves.THUNDER_SHOCK ], - [ 6, Moves.EERIE_IMPULSE ], - [ 9, Moves.SPARK ], - [ 11, Moves.ROLLOUT ], - [ 13, Moves.SCREECH ], - [ 16, Moves.CHARGE_BEAM ], - [ 20, Moves.SWIFT ], - [ 22, Moves.ELECTRO_BALL ], - [ 26, Moves.SELF_DESTRUCT ], - [ 29, Moves.LIGHT_SCREEN ], - [ 34, Moves.MAGNET_RISE ], - [ 37, Moves.DISCHARGE ], - [ 41, Moves.EXPLOSION ], - [ 46, Moves.GYRO_BALL ], - [ 50, Moves.MIRROR_COAT ], - ], - [Species.ELECTRODE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.CHARGE ], - [ 1, Moves.EERIE_IMPULSE ], - [ 1, Moves.MAGNETIC_FLUX ], - [ 9, Moves.SPARK ], - [ 11, Moves.ROLLOUT ], - [ 13, Moves.SCREECH ], - [ 16, Moves.CHARGE_BEAM ], - [ 20, Moves.SWIFT ], - [ 22, Moves.ELECTRO_BALL ], - [ 26, Moves.SELF_DESTRUCT ], - [ 29, Moves.LIGHT_SCREEN ], - [ 36, Moves.MAGNET_RISE ], - [ 41, Moves.DISCHARGE ], - [ 47, Moves.EXPLOSION ], - [ 54, Moves.GYRO_BALL ], - [ 58, Moves.MIRROR_COAT ], - ], - [Species.EXEGGCUTE]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.HYPNOSIS ], - [ 1, Moves.BARRAGE ], - [ 5, Moves.REFLECT ], - [ 10, Moves.LEECH_SEED ], - [ 15, Moves.MEGA_DRAIN ], - [ 20, Moves.CONFUSION ], - [ 25, Moves.SYNTHESIS ], - [ 30, Moves.BULLET_SEED ], - [ 35, Moves.GIGA_DRAIN ], - [ 40, Moves.EXTRASENSORY ], - [ 45, Moves.UPROAR ], - [ 50, Moves.WORRY_SEED ], - [ 55, Moves.SOLAR_BEAM ], - ], - [Species.EXEGGUTOR]: [ - [ EVOLVE_MOVE, Moves.STOMP ], - [ RELEARN_MOVE, Moves.GROWTH ], - [ 1, Moves.BARRAGE ], - [ 1, Moves.SEED_BOMB ], - [ 1, Moves.PSYSHOCK ], - [ 1, Moves.WOOD_HAMMER ], - [ 1, Moves.LEAF_STORM ], - [ 1, Moves.MEGA_DRAIN ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.SYNTHESIS ], - [ 1, Moves.BULLET_SEED ], - [ 1, Moves.GIGA_DRAIN ], - [ 1, Moves.EXTRASENSORY ], - [ 1, Moves.UPROAR ], - [ 1, Moves.WORRY_SEED ], - [ 1, Moves.SOLAR_BEAM ], - [ 1, Moves.ABSORB ], - [ 1, Moves.HYPNOSIS ], - [ 1, Moves.REFLECT ], - [ 1, Moves.LEECH_SEED ], - ], - [Species.CUBONE]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.MUD_SLAP ], - [ 4, Moves.TAIL_WHIP ], - [ 8, Moves.FALSE_SWIPE ], - [ 12, Moves.HEADBUTT ], - [ 16, Moves.RETALIATE ], - [ 20, Moves.FLING ], - [ 24, Moves.STOMPING_TANTRUM ], - [ 29, Moves.BONE_RUSH ], - [ 32, Moves.FOCUS_ENERGY ], - [ 36, Moves.ENDEAVOR ], - [ 40, Moves.BONEMERANG ], - [ 44, Moves.THRASH ], - [ 48, Moves.DOUBLE_EDGE ], - ], - [Species.MAROWAK]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.FALSE_SWIPE ], - [ 1, Moves.BONE_CLUB ], - [ 12, Moves.HEADBUTT ], - [ 16, Moves.RETALIATE ], - [ 20, Moves.FLING ], - [ 24, Moves.STOMPING_TANTRUM ], - [ 31, Moves.BONE_RUSH ], - [ 36, Moves.FOCUS_ENERGY ], - [ 42, Moves.ENDEAVOR ], - [ 48, Moves.BONEMERANG ], - [ 54, Moves.THRASH ], - [ 60, Moves.DOUBLE_EDGE ], - ], - [Species.HITMONLEE]: [ - [ EVOLVE_MOVE, Moves.BRICK_BREAK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.FEINT ], - [ 1, Moves.LOW_SWEEP ], - [ 1, Moves.JUMP_KICK ], - [ 1, Moves.ROLLING_KICK ], - [ 1, Moves.MACH_PUNCH ], // Previous Stage Move, Custom - [ 1, Moves.RAPID_SPIN ], // Previous Stage Move, Custom - [ 4, Moves.DOUBLE_KICK ], - [ 8, Moves.LOW_KICK ], - [ 12, Moves.ENDURE ], - [ 16, Moves.SUCKER_PUNCH ], - [ 21, Moves.WIDE_GUARD ], - [ 24, Moves.BLAZE_KICK ], - [ 28, Moves.FEINT ], - [ 32, Moves.MEGA_KICK ], - [ 36, Moves.CLOSE_COMBAT ], - [ 40, Moves.REVERSAL ], - [ 44, Moves.HIGH_JUMP_KICK ], - [ 50, Moves.AXE_KICK ], - ], - [Species.HITMONCHAN]: [ - [ EVOLVE_MOVE, Moves.DRAIN_PUNCH ], - [ 1, Moves.TACKLE ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.FEINT ], - [ 1, Moves.PURSUIT ], - [ 1, Moves.COMET_PUNCH ], - [ 1, Moves.LOW_SWEEP ], // Previous Stage Move, Custom - [ 1, Moves.RAPID_SPIN ], // Previous Stage Move, Custom - [ 4, Moves.MACH_PUNCH ], - [ 8, Moves.VACUUM_WAVE ], - [ 12, Moves.DETECT ], - [ 16, Moves.BULLET_PUNCH ], - [ 21, Moves.QUICK_GUARD ], - [ 24, Moves.THUNDER_PUNCH ], - [ 24, Moves.ICE_PUNCH ], - [ 24, Moves.FIRE_PUNCH ], - [ 28, Moves.AGILITY ], - [ 32, Moves.MEGA_PUNCH ], - [ 36, Moves.CLOSE_COMBAT ], - [ 40, Moves.COUNTER ], - [ 44, Moves.FOCUS_PUNCH ], - ], - [Species.LICKITUNG]: [ - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.LICK ], - [ 1, Moves.TACKLE ], // Custom - [ 6, Moves.REST ], - [ 12, Moves.SUPERSONIC ], - [ 18, Moves.WRAP ], - [ 24, Moves.DISABLE ], - [ 30, Moves.STOMP ], - [ 32, Moves.ROLLOUT ], - [ 36, Moves.KNOCK_OFF ], - [ 42, Moves.SCREECH ], - [ 48, Moves.SLAM ], - [ 54, Moves.POWER_WHIP ], - [ 60, Moves.BELLY_DRUM ], - ], - [Species.KOFFING]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.POISON_GAS ], - [ 4, Moves.SMOG ], - [ 8, Moves.SMOKESCREEN ], - [ 12, Moves.CLEAR_SMOG ], - [ 16, Moves.ASSURANCE ], - [ 20, Moves.SLUDGE ], - [ 24, Moves.HAZE ], - [ 28, Moves.SELF_DESTRUCT ], - [ 32, Moves.SLUDGE_BOMB ], - [ 36, Moves.TOXIC ], - [ 40, Moves.BELCH ], - [ 44, Moves.EXPLOSION ], - [ 48, Moves.MEMENTO ], - [ 52, Moves.DESTINY_BOND ], - ], - [Species.WEEZING]: [ - [ EVOLVE_MOVE, Moves.DOUBLE_HIT ], - [ 1, Moves.TACKLE ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.SMOG ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.HEAT_WAVE ], - [ 12, Moves.CLEAR_SMOG ], - [ 16, Moves.ASSURANCE ], - [ 20, Moves.SLUDGE ], - [ 24, Moves.HAZE ], - [ 28, Moves.SELF_DESTRUCT ], - [ 32, Moves.SLUDGE_BOMB ], - [ 38, Moves.TOXIC ], - [ 44, Moves.BELCH ], - [ 50, Moves.EXPLOSION ], - [ 56, Moves.MEMENTO ], - [ 62, Moves.DESTINY_BOND ], - ], - [Species.RHYHORN]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 5, Moves.SMACK_DOWN ], - [ 10, Moves.BULLDOZE ], - [ 15, Moves.HORN_ATTACK ], - [ 20, Moves.SCARY_FACE ], - [ 25, Moves.STOMP ], - [ 30, Moves.ROCK_BLAST ], - [ 35, Moves.DRILL_RUN ], - [ 40, Moves.TAKE_DOWN ], - [ 45, Moves.EARTHQUAKE ], - [ 50, Moves.STONE_EDGE ], - [ 55, Moves.MEGAHORN ], - [ 60, Moves.HORN_DRILL ], - ], - [Species.RHYDON]: [ - [ EVOLVE_MOVE, Moves.HAMMER_ARM ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.SMACK_DOWN ], - [ 1, Moves.BULLDOZE ], - [ 15, Moves.HORN_ATTACK ], - [ 20, Moves.SCARY_FACE ], - [ 25, Moves.STOMP ], - [ 30, Moves.ROCK_BLAST ], - [ 35, Moves.DRILL_RUN ], - [ 40, Moves.TAKE_DOWN ], - [ 47, Moves.EARTHQUAKE ], - [ 54, Moves.STONE_EDGE ], - [ 61, Moves.MEGAHORN ], - [ 68, Moves.HORN_DRILL ], - ], - [Species.CHANSEY]: [ - [ 1, Moves.POUND ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.COVET ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.DISARMING_VOICE ], - [ 4, Moves.TAIL_WHIP ], - [ 8, Moves.ECHOED_VOICE ], - [ 12, Moves.LIFE_DEW ], - [ 16, Moves.SING ], - [ 20, Moves.FLING ], - [ 24, Moves.TAKE_DOWN ], - [ 28, Moves.HEAL_PULSE ], - [ 32, Moves.HELPING_HAND ], - [ 36, Moves.LIGHT_SCREEN ], - [ 40, Moves.DOUBLE_EDGE ], - [ 44, Moves.SOFT_BOILED ], - [ 48, Moves.LAST_RESORT ], - [ 52, Moves.HEALING_WISH ], - ], - [Species.TANGELA]: [ - [ 1, Moves.BIND ], - [ 1, Moves.ABSORB ], - [ 1, Moves.CONSTRICT ], - [ 4, Moves.STUN_SPORE ], - [ 8, Moves.GROWTH ], - [ 12, Moves.MEGA_DRAIN ], - [ 16, Moves.VINE_WHIP ], - [ 20, Moves.POISON_POWDER ], - [ 24, Moves.DOUBLE_HIT ], - [ 28, Moves.KNOCK_OFF ], - [ 32, Moves.GIGA_DRAIN ], - [ 34, Moves.ANCIENT_POWER ], - [ 36, Moves.SLEEP_POWDER ], - [ 40, Moves.SLAM ], - [ 44, Moves.TICKLE ], - [ 48, Moves.POWER_WHIP ], - [ 52, Moves.INGRAIN ], - [ 56, Moves.GRASSY_TERRAIN ], - ], - [Species.KANGASKHAN]: [ - [ 1, Moves.POUND ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.COMET_PUNCH ], - [ 4, Moves.GROWL ], - [ 8, Moves.FAKE_OUT ], - [ 12, Moves.BITE ], - [ 16, Moves.STOMP ], - [ 20, Moves.FOCUS_ENERGY ], - [ 24, Moves.HEADBUTT ], - [ 28, Moves.SUCKER_PUNCH ], - [ 32, Moves.DOUBLE_HIT ], - [ 36, Moves.CRUNCH ], - [ 40, Moves.ENDURE ], - [ 44, Moves.REVERSAL ], - [ 48, Moves.OUTRAGE ], - [ 52, Moves.LAST_RESORT ], - ], - [Species.HORSEA]: [ - [ 1, Moves.LEER ], - [ 1, Moves.WATER_GUN ], - [ 5, Moves.SMOKESCREEN ], - [ 10, Moves.TWISTER ], - [ 15, Moves.FOCUS_ENERGY ], - [ 20, Moves.DRAGON_BREATH ], - [ 25, Moves.BUBBLE_BEAM ], - [ 30, Moves.AGILITY ], - [ 35, Moves.LASER_FOCUS ], - [ 40, Moves.DRAGON_PULSE ], - [ 45, Moves.HYDRO_PUMP ], - [ 50, Moves.DRAGON_DANCE ], - [ 55, Moves.RAIN_DANCE ], - ], - [Species.SEADRA]: [ - [ 1, Moves.LEER ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.TWISTER ], - [ 15, Moves.FOCUS_ENERGY ], - [ 20, Moves.DRAGON_BREATH ], - [ 25, Moves.BUBBLE_BEAM ], - [ 30, Moves.AGILITY ], - [ 37, Moves.LASER_FOCUS ], - [ 44, Moves.DRAGON_PULSE ], - [ 51, Moves.HYDRO_PUMP ], - [ 58, Moves.DRAGON_DANCE ], - [ 65, Moves.RAIN_DANCE ], - ], - [Species.GOLDEEN]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.PECK ], - [ 1, Moves.WATER_SPORT ], - [ 5, Moves.SUPERSONIC ], - [ 10, Moves.WATER_PULSE ], - [ 15, Moves.HORN_ATTACK ], - [ 20, Moves.AGILITY ], - [ 25, Moves.AQUA_RING ], - [ 30, Moves.FLAIL ], - [ 35, Moves.WATERFALL ], - [ 40, Moves.SOAK ], - [ 45, Moves.MEGAHORN ], - [ 50, Moves.HORN_DRILL ], - ], - [Species.SEAKING]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.WATER_SPORT ], - [ 1, Moves.PECK ], - [ 1, Moves.WATER_PULSE ], - [ 15, Moves.HORN_ATTACK ], - [ 20, Moves.AGILITY ], - [ 25, Moves.AQUA_RING ], - [ 30, Moves.FLAIL ], - [ 37, Moves.WATERFALL ], - [ 44, Moves.SOAK ], - [ 51, Moves.MEGAHORN ], - [ 58, Moves.HORN_DRILL ], - ], - [Species.STARYU]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 4, Moves.WATER_GUN ], - [ 8, Moves.CONFUSE_RAY ], - [ 12, Moves.RAPID_SPIN ], - [ 16, Moves.MINIMIZE ], - [ 20, Moves.SWIFT ], - [ 24, Moves.PSYBEAM ], - [ 28, Moves.BRINE ], - [ 32, Moves.LIGHT_SCREEN ], - [ 36, Moves.POWER_GEM ], - [ 40, Moves.PSYCHIC ], - [ 44, Moves.SURF ], - [ 48, Moves.RECOVER ], - [ 52, Moves.COSMIC_POWER ], - [ 56, Moves.HYDRO_PUMP ], - ], - [Species.STARMIE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.HYDRO_PUMP ], - [ 1, Moves.SURF ], - [ 1, Moves.PSYBEAM ], - [ 1, Moves.PSYCHIC ], - [ 1, Moves.RECOVER ], - [ 1, Moves.HARDEN ], - [ 1, Moves.MINIMIZE ], - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.LIGHT_SCREEN ], - [ 1, Moves.SWIFT ], - [ 1, Moves.SPOTLIGHT ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.COSMIC_POWER ], - [ 1, Moves.BRINE ], - [ 1, Moves.POWER_GEM ], - ], - [Species.MR_MIME]: [ - [ 1, Moves.POUND ], - [ 1, Moves.TICKLE ], // Previous Stage Move - [ 1, Moves.BATON_PASS ], - [ 1, Moves.ENCORE ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.POWER_SWAP ], - [ 1, Moves.GUARD_SWAP ], - [ 1, Moves.WIDE_GUARD ], - [ 1, Moves.QUICK_GUARD ], - [ 1, Moves.BARRIER ], - [ 12, Moves.CONFUSION ], - [ 16, Moves.ROLE_PLAY ], - [ 20, Moves.PROTECT ], - [ 24, Moves.RECYCLE ], - [ 28, Moves.PSYBEAM ], - [ 32, Moves.MIMIC ], - [ 36, Moves.LIGHT_SCREEN ], - [ 36, Moves.REFLECT ], - [ 36, Moves.SAFEGUARD ], - [ 40, Moves.SUCKER_PUNCH ], - [ 44, Moves.DAZZLING_GLEAM ], - [ 48, Moves.PSYCHIC ], - [ 52, Moves.TEETER_DANCE ], - ], - [Species.SCYTHER]: [ - [ 1, Moves.LEER ], - [ 1, Moves.QUICK_ATTACK ], - [ 4, Moves.FURY_CUTTER ], - [ 8, Moves.FALSE_SWIPE ], - [ 12, Moves.WING_ATTACK ], - [ 16, Moves.DOUBLE_TEAM ], - [ 20, Moves.DOUBLE_HIT ], - [ 24, Moves.SLASH ], - [ 28, Moves.FOCUS_ENERGY ], - [ 30, Moves.STEEL_WING ], // Custom - [ 32, Moves.AGILITY ], - [ 36, Moves.AIR_SLASH ], - [ 40, Moves.X_SCISSOR ], - [ 44, Moves.SWORDS_DANCE ], - ], - [Species.JYNX]: [ - [ 1, Moves.POUND ], - [ 1, Moves.LICK ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.COPYCAT ], - [ 12, Moves.CONFUSION ], - [ 16, Moves.COVET ], - [ 20, Moves.SING ], - [ 24, Moves.FAKE_TEARS ], - [ 28, Moves.ICE_PUNCH ], - [ 34, Moves.PSYCHIC ], - [ 40, Moves.LOVELY_KISS ], - [ 46, Moves.MEAN_LOOK ], - [ 52, Moves.PERISH_SONG ], - [ 58, Moves.BLIZZARD ], - ], - [Species.ELECTABUZZ]: [ - [ 1, Moves.LEER ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.CHARGE ], - [ 12, Moves.SWIFT ], - [ 16, Moves.SHOCK_WAVE ], - [ 20, Moves.THUNDER_WAVE ], - [ 24, Moves.SCREECH ], - [ 28, Moves.THUNDER_PUNCH ], - [ 34, Moves.DISCHARGE ], - [ 40, Moves.LOW_KICK ], - [ 46, Moves.THUNDERBOLT ], - [ 52, Moves.LIGHT_SCREEN ], - [ 58, Moves.THUNDER ], - [ 64, Moves.GIGA_IMPACT ], - ], - [Species.MAGMAR]: [ - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.SMOG ], - [ 12, Moves.CLEAR_SMOG ], - [ 16, Moves.FLAME_WHEEL ], - [ 20, Moves.CONFUSE_RAY ], - [ 24, Moves.SCARY_FACE ], - [ 28, Moves.FIRE_PUNCH ], - [ 34, Moves.LAVA_PLUME ], - [ 40, Moves.LOW_KICK ], - [ 46, Moves.FLAMETHROWER ], - [ 52, Moves.SUNNY_DAY ], - [ 58, Moves.FIRE_BLAST ], - [ 64, Moves.HYPER_BEAM ], - ], - [Species.PINSIR]: [ - [ 1, Moves.VISE_GRIP ], - [ 1, Moves.HARDEN ], - [ 4, Moves.FOCUS_ENERGY ], - [ 8, Moves.BIND ], - [ 12, Moves.SEISMIC_TOSS ], - [ 16, Moves.BUG_BITE ], - [ 20, Moves.STORM_THROW ], - [ 24, Moves.DOUBLE_HIT ], - [ 28, Moves.VITAL_THROW ], - [ 32, Moves.X_SCISSOR ], - [ 36, Moves.STRENGTH ], - [ 40, Moves.SWORDS_DANCE ], - [ 44, Moves.SUBMISSION ], - [ 48, Moves.GUILLOTINE ], - [ 52, Moves.SUPERPOWER ], - ], - [Species.TAUROS]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 5, Moves.WORK_UP ], - [ 10, Moves.PAYBACK ], - [ 15, Moves.ASSURANCE ], - [ 20, Moves.HORN_ATTACK ], - [ 25, Moves.SCARY_FACE ], - [ 30, Moves.ZEN_HEADBUTT ], - [ 35, Moves.RAGING_BULL ], - [ 40, Moves.REST ], - [ 45, Moves.SWAGGER ], - [ 50, Moves.THRASH ], - [ 55, Moves.DOUBLE_EDGE ], - [ 60, Moves.GIGA_IMPACT ], - ], - [Species.MAGIKARP]: [ - [ 1, Moves.SPLASH ], - [ 15, Moves.TACKLE ], - [ 25, Moves.FLAIL ], - ], - [Species.GYARADOS]: [ - [ EVOLVE_MOVE, Moves.BITE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.SPLASH ], - [ 1, Moves.FLAIL ], - [ 1, Moves.TWISTER ], - [ 4, Moves.WHIRLPOOL ], - [ 8, Moves.ICE_FANG ], - [ 12, Moves.BRINE ], - [ 16, Moves.SCARY_FACE ], - [ 21, Moves.WATERFALL ], - [ 24, Moves.CRUNCH ], - [ 28, Moves.RAIN_DANCE ], - [ 32, Moves.AQUA_TAIL ], - [ 36, Moves.DRAGON_DANCE ], - [ 40, Moves.HYDRO_PUMP ], - [ 44, Moves.HURRICANE ], - [ 48, Moves.THRASH ], - [ 52, Moves.HYPER_BEAM ], - ], - [Species.LAPRAS]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 5, Moves.SING ], - [ 10, Moves.MIST ], - [ 15, Moves.LIFE_DEW ], - [ 20, Moves.ICE_SHARD ], - [ 25, Moves.CONFUSE_RAY ], - [ 30, Moves.WATER_PULSE ], - [ 35, Moves.BRINE ], - [ 40, Moves.BODY_SLAM ], - [ 45, Moves.ICE_BEAM ], - [ 50, Moves.RAIN_DANCE ], - [ 55, Moves.HYDRO_PUMP ], - [ 60, Moves.PERISH_SONG ], - [ 65, Moves.SHEER_COLD ], - ], - [Species.DITTO]: [ - [ 1, Moves.TRANSFORM ], - ], - [Species.EEVEE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.COVET ], - [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.QUICK_ATTACK ], - [ 15, Moves.BABY_DOLL_EYES ], - [ 20, Moves.SWIFT ], - [ 25, Moves.BITE ], - [ 30, Moves.COPYCAT ], - [ 35, Moves.BATON_PASS ], - [ 40, Moves.TAKE_DOWN ], - [ 45, Moves.CHARM ], - [ 50, Moves.DOUBLE_EDGE ], - [ 55, Moves.LAST_RESORT ], - [ 60, Moves.VEEVEE_VOLLEY ], - ], - [Species.VAPOREON]: [ - [ EVOLVE_MOVE, Moves.BOUNCY_BUBBLE ], - [ RELEARN_MOVE, Moves.VEEVEE_VOLLEY ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.BITE ], - [ 1, Moves.GROWL ], - [ 1, Moves.SWIFT ], - [ 1, Moves.CHARM ], - [ 1, Moves.BATON_PASS ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.COVET ], - [ 1, Moves.COPYCAT ], - [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.WATER_GUN ], - [ 15, Moves.QUICK_ATTACK ], - [ 20, Moves.BABY_DOLL_EYES ], - [ 25, Moves.HAZE ], - [ 30, Moves.WATER_PULSE ], - [ 35, Moves.AURORA_BEAM ], - [ 40, Moves.AQUA_RING ], - [ 45, Moves.MUDDY_WATER ], - [ 50, Moves.ACID_ARMOR ], - [ 55, Moves.HYDRO_PUMP ], - [ 60, Moves.LAST_RESORT ], - ], - [Species.JOLTEON]: [ - [ EVOLVE_MOVE, Moves.BUZZY_BUZZ ], - [ RELEARN_MOVE, Moves.VEEVEE_VOLLEY ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.BITE ], - [ 1, Moves.GROWL ], - [ 1, Moves.SWIFT ], - [ 1, Moves.CHARM ], - [ 1, Moves.BATON_PASS ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.COVET ], - [ 1, Moves.COPYCAT ], - [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.THUNDER_SHOCK ], - [ 15, Moves.QUICK_ATTACK ], - [ 20, Moves.BABY_DOLL_EYES ], - [ 25, Moves.THUNDER_WAVE ], - [ 30, Moves.DOUBLE_KICK ], - [ 35, Moves.THUNDER_FANG ], - [ 40, Moves.PIN_MISSILE ], - [ 45, Moves.DISCHARGE ], - [ 50, Moves.AGILITY ], - [ 55, Moves.THUNDER ], - [ 60, Moves.LAST_RESORT ], - ], - [Species.FLAREON]: [ - [ EVOLVE_MOVE, Moves.SIZZLY_SLIDE ], - [ RELEARN_MOVE, Moves.VEEVEE_VOLLEY ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.SWIFT ], - [ 1, Moves.CHARM ], - [ 1, Moves.BATON_PASS ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.COVET ], - [ 1, Moves.COPYCAT ], - [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.EMBER ], - [ 15, Moves.QUICK_ATTACK ], - [ 20, Moves.BABY_DOLL_EYES ], - [ 25, Moves.SMOG ], - [ 30, Moves.BITE ], - [ 35, Moves.FIRE_FANG ], - [ 40, Moves.FIRE_SPIN ], - [ 45, Moves.LAVA_PLUME ], - [ 50, Moves.SCARY_FACE ], - [ 55, Moves.FLARE_BLITZ ], - [ 60, Moves.LAST_RESORT ], - ], - [Species.PORYGON]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.CONVERSION ], - [ 5, Moves.RECYCLE ], - [ 10, Moves.MAGNET_RISE ], - [ 15, Moves.THUNDER_SHOCK ], - [ 20, Moves.PSYBEAM ], - [ 25, Moves.CONVERSION_2 ], - [ 30, Moves.AGILITY ], - [ 35, Moves.RECOVER ], - [ 40, Moves.DISCHARGE ], - [ 45, Moves.TRI_ATTACK ], - [ 50, Moves.MAGIC_COAT ], - [ 55, Moves.LOCK_ON ], - [ 60, Moves.ZAP_CANNON ], - ], - [Species.OMANYTE]: [ - [ 1, Moves.BIND ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.CONSTRICT ], - [ 5, Moves.ROLLOUT ], - [ 10, Moves.SAND_ATTACK ], - [ 15, Moves.WATER_GUN ], - [ 20, Moves.LEER ], - [ 25, Moves.MUD_SHOT ], - [ 30, Moves.ANCIENT_POWER ], - [ 35, Moves.BRINE ], - [ 41, Moves.PROTECT ], - [ 45, Moves.ROCK_BLAST ], - [ 50, Moves.SURF ], - [ 55, Moves.SHELL_SMASH ], - [ 60, Moves.HYDRO_PUMP ], - ], - [Species.OMASTAR]: [ - [ EVOLVE_MOVE, Moves.CRUNCH ], - [ 1, Moves.BIND ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.CONSTRICT ], - [ 1, Moves.SPIKE_CANNON ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.ROLLOUT ], - [ 15, Moves.WATER_GUN ], - [ 20, Moves.LEER ], - [ 25, Moves.MUD_SHOT ], - [ 30, Moves.ANCIENT_POWER ], - [ 35, Moves.BRINE ], - [ 43, Moves.PROTECT ], - [ 49, Moves.ROCK_BLAST ], - [ 56, Moves.SURF ], - [ 63, Moves.SHELL_SMASH ], - [ 70, Moves.HYDRO_PUMP ], - ], - [Species.KABUTO]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.HARDEN ], - [ 5, Moves.SCRATCH ], - [ 10, Moves.SAND_ATTACK ], - [ 15, Moves.AQUA_JET ], - [ 20, Moves.LEER ], - [ 25, Moves.MUD_SHOT ], - [ 30, Moves.ANCIENT_POWER ], - [ 35, Moves.BRINE ], - [ 41, Moves.PROTECT ], - [ 45, Moves.LEECH_LIFE ], - [ 50, Moves.LIQUIDATION ], - [ 55, Moves.METAL_SOUND ], - [ 60, Moves.STONE_EDGE ], - ], - [Species.KABUTOPS]: [ - [ EVOLVE_MOVE, Moves.SLASH ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.ABSORB ], - [ 1, Moves.HARDEN ], - [ 1, Moves.FEINT ], - [ 1, Moves.NIGHT_SLASH ], - [ 15, Moves.AQUA_JET ], - [ 20, Moves.LEER ], - [ 25, Moves.MUD_SHOT ], - [ 30, Moves.ANCIENT_POWER ], - [ 35, Moves.BRINE ], - [ 43, Moves.PROTECT ], - [ 49, Moves.LEECH_LIFE ], - [ 56, Moves.LIQUIDATION ], - [ 63, Moves.METAL_SOUND ], - [ 70, Moves.STONE_EDGE ], - ], - [Species.AERODACTYL]: [ - [ 1, Moves.BITE ], - [ 1, Moves.ANCIENT_POWER ], - [ 5, Moves.SUPERSONIC ], - [ 10, Moves.WING_ATTACK ], - [ 15, Moves.SCARY_FACE ], - [ 20, Moves.ROCK_SLIDE ], - [ 25, Moves.ROAR ], - [ 30, Moves.CRUNCH ], - [ 35, Moves.IRON_HEAD ], - [ 40, Moves.TAKE_DOWN ], - [ 45, Moves.STONE_EDGE ], - [ 50, Moves.AGILITY ], - [ 55, Moves.HYPER_BEAM ], - [ 60, Moves.GIGA_IMPACT ], - ], - [Species.SNORLAX]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.SCREECH ], - [ 1, Moves.ODOR_SLEUTH ], // Previous Stage Move - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.METRONOME ], - [ 1, Moves.LICK ], - [ 1, Moves.FLAIL ], - [ 1, Moves.STOCKPILE ], - [ 1, Moves.SWALLOW ], - [ 1, Moves.RECYCLE ], - [ 1, Moves.BLOCK ], - [ 1, Moves.COVET ], - [ 1, Moves.FLING ], - [ 1, Moves.LAST_RESORT ], - [ 12, Moves.YAWN ], - [ 16, Moves.BITE ], - [ 20, Moves.REST ], - [ 20, Moves.SNORE ], - [ 20, Moves.SLEEP_TALK ], - [ 24, Moves.CRUNCH ], - [ 28, Moves.BODY_SLAM ], - [ 32, Moves.HEAVY_SLAM ], - [ 36, Moves.AMNESIA ], - [ 40, Moves.HIGH_HORSEPOWER ], - [ 44, Moves.HAMMER_ARM ], - [ 48, Moves.BELLY_DRUM ], - [ 52, Moves.BELCH ], - [ 56, Moves.GIGA_IMPACT ], - ], - [Species.ARTICUNO]: [ - [ 1, Moves.GUST ], - [ 1, Moves.MIST ], - [ 5, Moves.POWDER_SNOW ], - [ 10, Moves.REFLECT ], - [ 15, Moves.ICE_SHARD ], - [ 20, Moves.AGILITY ], - [ 25, Moves.ANCIENT_POWER ], - [ 30, Moves.TAILWIND ], - [ 35, Moves.FREEZE_DRY ], - [ 40, Moves.ROOST ], - [ 45, Moves.ICE_BEAM ], - [ 50, Moves.SNOWSCAPE ], - [ 55, Moves.HURRICANE ], - [ 60, Moves.HAZE ], - [ 65, Moves.BLIZZARD ], - [ 70, Moves.SHEER_COLD ], - ], - [Species.ZAPDOS]: [ - [ 1, Moves.PECK ], - [ 1, Moves.THUNDER_WAVE ], - [ 5, Moves.THUNDER_SHOCK ], - [ 10, Moves.LIGHT_SCREEN ], - [ 15, Moves.PLUCK ], - [ 20, Moves.AGILITY ], - [ 25, Moves.ANCIENT_POWER ], - [ 30, Moves.CHARGE ], - [ 35, Moves.DRILL_PECK ], - [ 40, Moves.ROOST ], - [ 45, Moves.DISCHARGE ], - [ 50, Moves.RAIN_DANCE ], - [ 55, Moves.THUNDER ], - [ 60, Moves.DETECT ], - [ 65, Moves.MAGNETIC_FLUX ], - [ 70, Moves.ZAP_CANNON ], - ], - [Species.MOLTRES]: [ - [ 1, Moves.GUST ], - [ 1, Moves.LEER ], - [ 5, Moves.EMBER ], - [ 10, Moves.SAFEGUARD ], - [ 15, Moves.WING_ATTACK ], - [ 20, Moves.AGILITY ], - [ 25, Moves.ANCIENT_POWER ], - [ 30, Moves.INCINERATE ], - [ 35, Moves.AIR_SLASH ], - [ 40, Moves.ROOST ], - [ 45, Moves.HEAT_WAVE ], - [ 50, Moves.SUNNY_DAY ], - [ 55, Moves.HURRICANE ], - [ 60, Moves.ENDURE ], - [ 65, Moves.OVERHEAT ], - [ 70, Moves.SKY_ATTACK ], - ], - [Species.DRATINI]: [ - [ 1, Moves.WRAP ], - [ 1, Moves.LEER ], - [ 5, Moves.TWISTER ], - [ 10, Moves.THUNDER_WAVE ], - [ 15, Moves.DRAGON_TAIL ], - [ 20, Moves.AGILITY ], - [ 25, Moves.SLAM ], - [ 31, Moves.AQUA_TAIL ], - [ 35, Moves.DRAGON_RUSH ], - [ 40, Moves.SAFEGUARD ], - [ 45, Moves.RAIN_DANCE ], - [ 50, Moves.DRAGON_DANCE ], - [ 55, Moves.OUTRAGE ], - [ 60, Moves.HYPER_BEAM ], - ], - [Species.DRAGONAIR]: [ - [ 1, Moves.WRAP ], - [ 1, Moves.LEER ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.TWISTER ], - [ 15, Moves.DRAGON_TAIL ], - [ 20, Moves.AGILITY ], - [ 25, Moves.SLAM ], - [ 33, Moves.AQUA_TAIL ], - [ 39, Moves.DRAGON_RUSH ], - [ 46, Moves.SAFEGUARD ], - [ 53, Moves.RAIN_DANCE ], - [ 60, Moves.DRAGON_DANCE ], - [ 67, Moves.OUTRAGE ], - [ 74, Moves.HYPER_BEAM ], - ], - [Species.DRAGONITE]: [ - [ EVOLVE_MOVE, Moves.HURRICANE ], - [ 1, Moves.FIRE_PUNCH ], - [ 1, Moves.THUNDER_PUNCH ], - [ 1, Moves.WING_ATTACK ], - [ 1, Moves.WRAP ], - [ 1, Moves.LEER ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.TWISTER ], - [ 1, Moves.EXTREME_SPEED ], - [ 1, Moves.ROOST ], - [ 15, Moves.DRAGON_TAIL ], - [ 20, Moves.AGILITY ], - [ 25, Moves.SLAM ], - [ 33, Moves.AQUA_TAIL ], - [ 39, Moves.DRAGON_RUSH ], - [ 41, Moves.OUTRAGE ], - [ 46, Moves.SAFEGUARD ], - [ 53, Moves.RAIN_DANCE ], - [ 62, Moves.DRAGON_DANCE ], - [ 80, Moves.HYPER_BEAM ], - ], - [Species.MEWTWO]: [ - [ 1, Moves.DISABLE ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.SWIFT ], - [ 1, Moves.LIFE_DEW ], - [ 8, Moves.ANCIENT_POWER ], - [ 16, Moves.PSYCHO_CUT ], - [ 24, Moves.SAFEGUARD ], - [ 32, Moves.AMNESIA ], - [ 40, Moves.AURA_SPHERE ], - [ 48, Moves.PSYCHIC ], - [ 56, Moves.POWER_SWAP ], - [ 56, Moves.GUARD_SWAP ], - [ 64, Moves.MIST ], - [ 72, Moves.PSYSTRIKE ], - [ 80, Moves.RECOVER ], - [ 88, Moves.FUTURE_SIGHT ], - ], - [Species.MEW]: [ - [ 1, Moves.POUND ], - [ 1, Moves.REFLECT_TYPE ], - [ 10, Moves.AMNESIA ], - [ 20, Moves.BATON_PASS ], - [ 30, Moves.ANCIENT_POWER ], - [ 40, Moves.LIFE_DEW ], - [ 50, Moves.NASTY_PLOT ], - [ 60, Moves.METRONOME ], - [ 70, Moves.IMPRISON ], - [ 80, Moves.TRANSFORM ], - [ 90, Moves.AURA_SPHERE ], - [ 100, Moves.PSYCHIC ], - ], - [Species.CHIKORITA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 5, Moves.RAZOR_LEAF ], // Custom, moved from 6 to 5 - [ 9, Moves.POISON_POWDER ], - [ 12, Moves.SYNTHESIS ], - [ 17, Moves.REFLECT ], - [ 20, Moves.MAGICAL_LEAF ], - [ 23, Moves.LEECH_SEED ], - [ 28, Moves.SWEET_SCENT ], - [ 31, Moves.LIGHT_SCREEN ], - [ 34, Moves.BODY_SLAM ], - [ 39, Moves.SAFEGUARD ], - [ 42, Moves.GIGA_DRAIN ], - [ 45, Moves.SOLAR_BEAM ], - ], - [Species.BAYLEEF]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.RAZOR_LEAF ], - [ 1, Moves.POISON_POWDER ], - [ 12, Moves.SYNTHESIS ], - [ 18, Moves.REFLECT ], - [ 22, Moves.MAGICAL_LEAF ], - [ 26, Moves.LEECH_SEED ], - [ 32, Moves.SWEET_SCENT ], - [ 36, Moves.LIGHT_SCREEN ], - [ 40, Moves.BODY_SLAM ], - [ 46, Moves.SAFEGUARD ], - [ 50, Moves.GIGA_DRAIN ], - [ 54, Moves.SOLAR_BEAM ], - ], - [Species.MEGANIUM]: [ - [ EVOLVE_MOVE, Moves.PETAL_DANCE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.RAZOR_LEAF ], - [ 1, Moves.POISON_POWDER ], - [ 1, Moves.PETAL_BLIZZARD ], - [ 12, Moves.SYNTHESIS ], - [ 18, Moves.REFLECT ], - [ 22, Moves.MAGICAL_LEAF ], - [ 26, Moves.LEECH_SEED ], - [ 34, Moves.SWEET_SCENT ], - [ 40, Moves.LIGHT_SCREEN ], - [ 46, Moves.BODY_SLAM ], - [ 54, Moves.SAFEGUARD ], - [ 60, Moves.GIGA_DRAIN ], - [ 65, Moves.SOLAR_BEAM ], - ], - [Species.CYNDAQUIL]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 5, Moves.EMBER ], // Custom, moved from 10 to 5 - [ 10, Moves.SMOKESCREEN ], // Custom, moved from 6 to 10 - [ 13, Moves.QUICK_ATTACK ], - [ 19, Moves.FLAME_WHEEL ], - [ 22, Moves.DEFENSE_CURL ], - [ 28, Moves.FLAME_CHARGE ], - [ 31, Moves.SWIFT ], - [ 37, Moves.LAVA_PLUME ], - [ 40, Moves.FLAMETHROWER ], - [ 46, Moves.INFERNO ], - [ 49, Moves.ROLLOUT ], - [ 55, Moves.DOUBLE_EDGE ], - [ 58, Moves.OVERHEAT ], - [ 64, Moves.ERUPTION ], - ], - [Species.QUILAVA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.SMOKESCREEN ], - [ 10, Moves.EMBER ], - [ 13, Moves.QUICK_ATTACK ], - [ 20, Moves.FLAME_WHEEL ], - [ 24, Moves.DEFENSE_CURL ], - [ 31, Moves.SWIFT ], - [ 35, Moves.FLAME_CHARGE ], - [ 42, Moves.LAVA_PLUME ], - [ 46, Moves.FLAMETHROWER ], - [ 53, Moves.INFERNO ], - [ 57, Moves.ROLLOUT ], - [ 64, Moves.DOUBLE_EDGE ], - [ 68, Moves.OVERHEAT ], - [ 75, Moves.ERUPTION ], - ], - [Species.TYPHLOSION]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.ERUPTION ], - [ 1, Moves.GYRO_BALL ], - [ 13, Moves.QUICK_ATTACK ], - [ 20, Moves.FLAME_WHEEL ], - [ 24, Moves.DEFENSE_CURL ], - [ 31, Moves.SWIFT ], - [ 35, Moves.FLAME_CHARGE ], - [ 43, Moves.LAVA_PLUME ], - [ 48, Moves.FLAMETHROWER ], - [ 56, Moves.INFERNO ], - [ 61, Moves.ROLLOUT ], - [ 74, Moves.OVERHEAT ], - ], - [Species.TOTODILE]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 5, Moves.WATER_GUN ], // Custom, moved from 6 to 5 - [ 9, Moves.BITE ], - [ 13, Moves.SCARY_FACE ], - [ 19, Moves.ICE_FANG ], - [ 22, Moves.FLAIL ], - [ 27, Moves.CRUNCH ], - [ 30, Moves.SLASH ], - [ 33, Moves.SCREECH ], - [ 37, Moves.THRASH ], - [ 41, Moves.AQUA_TAIL ], - [ 45, Moves.SUPERPOWER ], - [ 50, Moves.HYDRO_PUMP ], - ], - [Species.CROCONAW]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.WATER_GUN ], - [ 13, Moves.BITE ], - [ 15, Moves.SCARY_FACE ], - [ 21, Moves.ICE_FANG ], - [ 24, Moves.FLAIL ], - [ 30, Moves.CRUNCH ], - [ 34, Moves.SLASH ], - [ 37, Moves.SCREECH ], - [ 42, Moves.THRASH ], - [ 47, Moves.AQUA_TAIL ], - [ 50, Moves.SUPERPOWER ], - [ 55, Moves.HYDRO_PUMP ], - ], - [Species.FERALIGATR]: [ - [ 1, Moves.AGILITY ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.WATER_GUN ], - [ 13, Moves.BITE ], - [ 15, Moves.SCARY_FACE ], - [ 21, Moves.ICE_FANG ], - [ 24, Moves.FLAIL ], - [ 32, Moves.CRUNCH ], - [ 37, Moves.SLASH ], - [ 44, Moves.SCREECH ], - [ 51, Moves.THRASH ], - [ 59, Moves.AQUA_TAIL ], - [ 65, Moves.SUPERPOWER ], - [ 70, Moves.HYDRO_PUMP ], - ], - [Species.SENTRET]: [ - [ 1, Moves.SCRATCH ], - [ 4, Moves.DEFENSE_CURL ], - [ 7, Moves.QUICK_ATTACK ], - [ 13, Moves.FURY_SWIPES ], - [ 16, Moves.HELPING_HAND ], - [ 19, Moves.FOLLOW_ME ], - [ 25, Moves.SLAM ], - [ 28, Moves.REST ], - [ 31, Moves.SUCKER_PUNCH ], - [ 36, Moves.AMNESIA ], - [ 39, Moves.BATON_PASS ], - [ 42, Moves.DOUBLE_EDGE ], - [ 47, Moves.HYPER_VOICE ], - ], - [Species.FURRET]: [ - [ EVOLVE_MOVE, Moves.AGILITY ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.COIL ], - [ 13, Moves.FURY_SWIPES ], - [ 17, Moves.HELPING_HAND ], - [ 21, Moves.FOLLOW_ME ], - [ 28, Moves.SLAM ], - [ 32, Moves.REST ], - [ 36, Moves.SUCKER_PUNCH ], - [ 42, Moves.AMNESIA ], - [ 46, Moves.BATON_PASS ], - [ 50, Moves.DOUBLE_EDGE ], - [ 56, Moves.HYPER_VOICE ], - ], - [Species.HOOTHOOT]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 3, Moves.TACKLE ], - [ 6, Moves.ECHOED_VOICE ], - [ 9, Moves.CONFUSION ], - [ 12, Moves.REFLECT ], - [ 15, Moves.DEFOG ], - [ 18, Moves.AIR_SLASH ], - [ 21, Moves.EXTRASENSORY ], - [ 24, Moves.TAKE_DOWN ], - [ 27, Moves.UPROAR ], - [ 30, Moves.ROOST ], - [ 33, Moves.MOONBLAST ], - [ 36, Moves.HYPNOSIS ], - [ 39, Moves.DREAM_EATER ], - ], - [Species.NOCTOWL]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 1, Moves.SKY_ATTACK ], - [ 1, Moves.ECHOED_VOICE ], - [ 9, Moves.CONFUSION ], - [ 12, Moves.REFLECT ], - [ 15, Moves.DEFOG ], - [ 18, Moves.AIR_SLASH ], - [ 23, Moves.EXTRASENSORY ], - [ 28, Moves.TAKE_DOWN ], - [ 33, Moves.UPROAR ], - [ 38, Moves.ROOST ], - [ 43, Moves.MOONBLAST ], - [ 48, Moves.HYPNOSIS ], - [ 53, Moves.DREAM_EATER ], - ], - [Species.LEDYBA]: [ - [ 1, Moves.TACKLE ], - [ 5, Moves.SUPERSONIC ], - [ 8, Moves.SWIFT ], - [ 12, Moves.LIGHT_SCREEN ], - [ 12, Moves.REFLECT ], - [ 12, Moves.SAFEGUARD ], - [ 15, Moves.MACH_PUNCH ], - [ 19, Moves.ROOST ], - [ 22, Moves.STRUGGLE_BUG ], - [ 26, Moves.BATON_PASS ], - [ 29, Moves.AGILITY ], - [ 33, Moves.BUG_BUZZ ], - [ 36, Moves.AIR_SLASH ], - [ 40, Moves.DOUBLE_EDGE ], - ], - [Species.LEDIAN]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.SWIFT ], - [ 5, Moves.SUPERSONIC ], - [ 12, Moves.LIGHT_SCREEN ], - [ 12, Moves.REFLECT ], - [ 12, Moves.SAFEGUARD ], - [ 15, Moves.MACH_PUNCH ], - [ 20, Moves.ROOST ], - [ 24, Moves.STRUGGLE_BUG ], - [ 29, Moves.BATON_PASS ], - [ 33, Moves.AGILITY ], - [ 38, Moves.BUG_BUZZ ], - [ 42, Moves.AIR_SLASH ], - [ 47, Moves.DOUBLE_EDGE ], - ], - [Species.SPINARAK]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.STRING_SHOT ], - [ 1, Moves.CONSTRICT ], - [ 5, Moves.ABSORB ], - [ 8, Moves.INFESTATION ], - [ 12, Moves.SCARY_FACE ], - [ 15, Moves.NIGHT_SHADE ], - [ 19, Moves.SHADOW_SNEAK ], - [ 22, Moves.FURY_SWIPES ], - [ 26, Moves.SUCKER_PUNCH ], - [ 29, Moves.AGILITY ], - [ 33, Moves.PIN_MISSILE ], - [ 36, Moves.PSYCHIC ], - [ 40, Moves.POISON_JAB ], - [ 44, Moves.CROSS_POISON ], - [ 47, Moves.STICKY_WEB ], - [ 51, Moves.TOXIC_THREAD ], - ], - [Species.ARIADOS]: [ - [ EVOLVE_MOVE, Moves.SWORDS_DANCE ], - [ 1, Moves.POISON_STING ], - [ 1, Moves.ABSORB ], - [ 1, Moves.STRING_SHOT ], - [ 1, Moves.CONSTRICT ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.BUG_BITE ], - [ 1, Moves.FELL_STINGER ], - [ 8, Moves.INFESTATION ], - [ 12, Moves.SCARY_FACE ], - [ 15, Moves.NIGHT_SHADE ], - [ 19, Moves.SHADOW_SNEAK ], - [ 23, Moves.FURY_SWIPES ], - [ 28, Moves.SUCKER_PUNCH ], - [ 31, Moves.AGILITY ], - [ 35, Moves.PIN_MISSILE ], - [ 41, Moves.PSYCHIC ], - [ 46, Moves.POISON_JAB ], - [ 50, Moves.CROSS_POISON ], - [ 54, Moves.STICKY_WEB ], - [ 59, Moves.TOXIC_THREAD ], - ], - [Species.CROBAT]: [ - [ EVOLVE_MOVE, Moves.CROSS_POISON ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.ABSORB ], - [ 1, Moves.TOXIC ], - [ 1, Moves.SCREECH ], - [ 1, Moves.MEAN_LOOK ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.TAILWIND ], - [ 15, Moves.POISON_FANG ], - [ 20, Moves.QUICK_GUARD ], - [ 27, Moves.AIR_CUTTER ], - [ 34, Moves.BITE ], - [ 41, Moves.HAZE ], - [ 48, Moves.VENOSHOCK ], - [ 55, Moves.CONFUSE_RAY ], - [ 62, Moves.AIR_SLASH ], - [ 69, Moves.LEECH_LIFE ], - ], - [Species.CHINCHOU]: [ - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.WATER_GUN ], - [ 4, Moves.ELECTRO_BALL ], - [ 8, Moves.THUNDER_WAVE ], - [ 12, Moves.BUBBLE_BEAM ], - [ 16, Moves.CONFUSE_RAY ], - [ 20, Moves.SPARK ], - [ 24, Moves.CHARGE ], - [ 28, Moves.DISCHARGE ], - [ 32, Moves.AQUA_RING ], - [ 36, Moves.FLAIL ], - [ 40, Moves.TAKE_DOWN ], - [ 44, Moves.HYDRO_PUMP ], - ], - [Species.LANTURN]: [ - [ EVOLVE_MOVE, Moves.STOCKPILE ], - [ EVOLVE_MOVE, Moves.SPIT_UP ], - [ EVOLVE_MOVE, Moves.SWALLOW ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.SPOTLIGHT ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.ELECTRO_BALL ], - [ 1, Moves.EERIE_IMPULSE ], - [ 12, Moves.BUBBLE_BEAM ], - [ 16, Moves.CONFUSE_RAY ], - [ 20, Moves.SPARK ], - [ 24, Moves.CHARGE ], - [ 30, Moves.DISCHARGE ], - [ 36, Moves.AQUA_RING ], - [ 42, Moves.FLAIL ], - [ 48, Moves.TAKE_DOWN ], - [ 54, Moves.HYDRO_PUMP ], - ], - [Species.PICHU]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.THUNDER_SHOCK ], - [ 4, Moves.PLAY_NICE ], - [ 8, Moves.SWEET_KISS ], - [ 12, Moves.NUZZLE ], - [ 16, Moves.NASTY_PLOT ], - [ 20, Moves.CHARM ], - ], - [Species.CLEFFA]: [ - [ 1, Moves.POUND ], - [ 1, Moves.SPLASH ], - [ 1, Moves.COPYCAT ], - [ 4, Moves.SING ], - [ 8, Moves.SWEET_KISS ], - [ 12, Moves.DISARMING_VOICE ], - [ 16, Moves.ENCORE ], - [ 20, Moves.CHARM ], - ], - [Species.IGGLYBUFF]: [ - [ 1, Moves.POUND ], - [ 1, Moves.SING ], - [ 1, Moves.COPYCAT ], - [ 4, Moves.DEFENSE_CURL ], - [ 8, Moves.SWEET_KISS ], - [ 12, Moves.DISARMING_VOICE ], - [ 16, Moves.DISABLE ], - [ 20, Moves.CHARM ], - ], - [Species.TOGEPI]: [ - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 4, Moves.SWEET_KISS ], - [ 8, Moves.LIFE_DEW ], - [ 12, Moves.CHARM ], - [ 16, Moves.ANCIENT_POWER ], - [ 20, Moves.YAWN ], - [ 24, Moves.METRONOME ], - [ 28, Moves.AFTER_YOU ], - [ 32, Moves.DOUBLE_EDGE ], - [ 36, Moves.SAFEGUARD ], - [ 40, Moves.FOLLOW_ME ], - [ 44, Moves.BATON_PASS ], - [ 48, Moves.LAST_RESORT ], - [ 52, Moves.WISH ], - ], - [Species.TOGETIC]: [ - [ EVOLVE_MOVE, Moves.FAIRY_WIND ], - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.LIFE_DEW ], - [ 12, Moves.CHARM ], - [ 16, Moves.ANCIENT_POWER ], - [ 20, Moves.YAWN ], - [ 24, Moves.METRONOME ], - [ 28, Moves.AFTER_YOU ], - [ 32, Moves.DOUBLE_EDGE ], - [ 36, Moves.SAFEGUARD ], - [ 40, Moves.FOLLOW_ME ], - [ 44, Moves.BATON_PASS ], - [ 48, Moves.LAST_RESORT ], - [ 52, Moves.WISH ], - ], - [Species.NATU]: [ - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 5, Moves.STORED_POWER ], - [ 10, Moves.TELEPORT ], - [ 15, Moves.CONFUSE_RAY ], - [ 20, Moves.NIGHT_SHADE ], - [ 26, Moves.PSYCHO_SHIFT ], - [ 30, Moves.POWER_SWAP ], - [ 35, Moves.PSYCHIC ], - [ 35, Moves.GUARD_SWAP ], - [ 40, Moves.WISH ], - [ 45, Moves.FUTURE_SIGHT ], - ], - [Species.XATU]: [ - [ EVOLVE_MOVE, Moves.AIR_SLASH ], - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 1, Moves.TELEPORT ], - [ 1, Moves.TAILWIND ], - [ 1, Moves.STORED_POWER ], - [ 15, Moves.CONFUSE_RAY ], - [ 20, Moves.NIGHT_SHADE ], - [ 28, Moves.PSYCHO_SHIFT ], - [ 34, Moves.POWER_SWAP ], - [ 34, Moves.GUARD_SWAP ], - [ 41, Moves.PSYCHIC ], - [ 48, Moves.WISH ], - [ 55, Moves.FUTURE_SIGHT ], - ], - [Species.MAREEP]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 4, Moves.THUNDER_WAVE ], - [ 8, Moves.THUNDER_SHOCK ], - [ 11, Moves.COTTON_SPORE ], - [ 15, Moves.CHARGE ], - [ 18, Moves.TAKE_DOWN ], - [ 22, Moves.ELECTRO_BALL ], - [ 25, Moves.CONFUSE_RAY ], - [ 29, Moves.POWER_GEM ], - [ 32, Moves.DISCHARGE ], - [ 36, Moves.COTTON_GUARD ], - [ 39, Moves.DAZZLING_GLEAM ], - [ 43, Moves.LIGHT_SCREEN ], - [ 46, Moves.THUNDER ], - ], - [Species.FLAAFFY]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 6, Moves.THUNDER_SHOCK ], - [ 9, Moves.THUNDER_WAVE ], - [ 11, Moves.COTTON_SPORE ], - [ 16, Moves.CHARGE ], - [ 20, Moves.TAKE_DOWN ], - [ 25, Moves.ELECTRO_BALL ], - [ 29, Moves.CONFUSE_RAY ], - [ 34, Moves.POWER_GEM ], - [ 38, Moves.DISCHARGE ], - [ 43, Moves.COTTON_GUARD ], - [ 47, Moves.DAZZLING_GLEAM ], - [ 52, Moves.LIGHT_SCREEN ], - [ 56, Moves.THUNDER ], - ], - [Species.AMPHAROS]: [ - [ EVOLVE_MOVE, Moves.THUNDER_PUNCH ], - [ 1, Moves.FIRE_PUNCH ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.ZAP_CANNON ], - [ 1, Moves.DRAGON_PULSE ], - [ 1, Moves.MAGNETIC_FLUX ], - [ 1, Moves.ION_DELUGE ], - [ 11, Moves.COTTON_SPORE ], - [ 16, Moves.CHARGE ], - [ 20, Moves.TAKE_DOWN ], - [ 25, Moves.ELECTRO_BALL ], - [ 29, Moves.CONFUSE_RAY ], - [ 35, Moves.POWER_GEM ], - [ 40, Moves.DISCHARGE ], - [ 46, Moves.COTTON_GUARD ], - [ 51, Moves.DAZZLING_GLEAM ], - [ 57, Moves.LIGHT_SCREEN ], - [ 62, Moves.THUNDER ], - ], - [Species.BELLOSSOM]: [ - [ EVOLVE_MOVE, Moves.PETAL_BLIZZARD ], - [ 1, Moves.ACID ], - [ 1, Moves.ABSORB ], - [ 1, Moves.MEGA_DRAIN ], - [ 1, Moves.GROWTH ], - [ 1, Moves.POISON_POWDER ], - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.SLEEP_POWDER ], - [ 1, Moves.PETAL_DANCE ], - [ 1, Moves.TOXIC ], - [ 1, Moves.GIGA_DRAIN ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.MOONLIGHT ], - [ 1, Moves.QUIVER_DANCE ], - [ 1, Moves.GRASSY_TERRAIN ], - [ 1, Moves.MOONBLAST ], - ], - [Species.MARILL]: [ - [ 1, Moves.SPLASH ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.ROLLOUT ], - [ 1, Moves.HELPING_HAND ], - [ 6, Moves.BUBBLE_BEAM ], - [ 9, Moves.CHARM ], - [ 12, Moves.SLAM ], - [ 15, Moves.BOUNCE ], - [ 19, Moves.AQUA_TAIL ], - [ 21, Moves.PLAY_ROUGH ], - [ 24, Moves.AQUA_RING ], - [ 27, Moves.RAIN_DANCE ], - [ 30, Moves.HYDRO_PUMP ], - [ 33, Moves.DOUBLE_EDGE ], - [ 36, Moves.SUPERPOWER ], - ], - [Species.AZUMARILL]: [ - [ 1, Moves.SPLASH ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.ROLLOUT ], - [ 1, Moves.HELPING_HAND ], - [ 6, Moves.BUBBLE_BEAM ], - [ 9, Moves.CHARM ], - [ 12, Moves.SLAM ], - [ 15, Moves.BOUNCE ], - [ 21, Moves.AQUA_TAIL ], - [ 25, Moves.PLAY_ROUGH ], - [ 30, Moves.AQUA_RING ], - [ 35, Moves.RAIN_DANCE ], - [ 40, Moves.HYDRO_PUMP ], - [ 45, Moves.DOUBLE_EDGE ], - [ 50, Moves.SUPERPOWER ], - ], - [Species.SUDOWOODO]: [ - [ EVOLVE_MOVE, Moves.SLAM ], - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.TACKLE ], // Previous Stage Move, Custom - [ 1, Moves.FLAIL ], - [ 1, Moves.FAKE_TEARS ], - [ 1, Moves.HAMMER_ARM ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.STONE_EDGE ], - [ 1, Moves.WOOD_HAMMER ], - [ 12, Moves.BLOCK ], - [ 16, Moves.MIMIC ], - [ 20, Moves.ROCK_TOMB ], - [ 24, Moves.TEARFUL_LOOK ], - [ 28, Moves.SUCKER_PUNCH ], - [ 32, Moves.ROCK_SLIDE ], - [ 36, Moves.LOW_KICK ], - [ 40, Moves.COUNTER ], - [ 44, Moves.DOUBLE_EDGE ], - [ 48, Moves.HEAD_SMASH ], - ], - [Species.POLITOED]: [ - [ EVOLVE_MOVE, Moves.BOUNCE ], - [ RELEARN_MOVE, Moves.BODY_SLAM ], - [ RELEARN_MOVE, Moves.DOUBLE_EDGE ], - [ RELEARN_MOVE, Moves.WATER_GUN ], - [ RELEARN_MOVE, Moves.BUBBLE_BEAM ], - [ RELEARN_MOVE, Moves.HYPNOSIS ], - [ RELEARN_MOVE, Moves.PERISH_SONG ], - [ RELEARN_MOVE, Moves.SWAGGER ], - [ RELEARN_MOVE, Moves.HYPER_VOICE ], - [ RELEARN_MOVE, Moves.MUD_SHOT ], - [ RELEARN_MOVE, Moves.EARTH_POWER ], - [ 1, Moves.RAIN_DANCE ], - [ 1, Moves.HYDRO_PUMP ], - [ 1, Moves.BELLY_DRUM ], - [ 1, Moves.POUND ], - [ 1, Moves.WATER_SPORT ], // Previous Stage Move - ], - [Species.HOPPIP]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.SPLASH ], - [ 4, Moves.TAIL_WHIP ], - [ 6, Moves.ABSORB ], - [ 8, Moves.FAIRY_WIND ], - [ 10, Moves.POISON_POWDER ], - [ 10, Moves.STUN_SPORE ], - [ 10, Moves.SLEEP_POWDER ], - [ 12, Moves.BULLET_SEED ], - [ 15, Moves.SYNTHESIS ], - [ 19, Moves.LEECH_SEED ], - [ 22, Moves.MEGA_DRAIN ], - [ 24, Moves.ACROBATICS ], - [ 27, Moves.COTTON_SPORE ], - [ 29, Moves.U_TURN ], - [ 32, Moves.GIGA_DRAIN ], - [ 35, Moves.BOUNCE ], - [ 38, Moves.MEMENTO ], - ], - [Species.SKIPLOOM]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.ABSORB ], - [ 1, Moves.SPLASH ], - [ 1, Moves.SYNTHESIS ], - [ 8, Moves.TACKLE ], - [ 10, Moves.FAIRY_WIND ], - [ 12, Moves.POISON_POWDER ], - [ 12, Moves.STUN_SPORE ], - [ 12, Moves.SLEEP_POWDER ], - [ 15, Moves.BULLET_SEED ], - [ 20, Moves.LEECH_SEED ], - [ 24, Moves.MEGA_DRAIN ], - [ 28, Moves.ACROBATICS ], - [ 31, Moves.COTTON_SPORE ], - [ 34, Moves.U_TURN ], - [ 37, Moves.GIGA_DRAIN ], - [ 41, Moves.BOUNCE ], - [ 44, Moves.MEMENTO ], - ], - [Species.JUMPLUFF]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.ABSORB ], - [ 1, Moves.SPLASH ], - [ 1, Moves.SYNTHESIS ], - [ 8, Moves.TACKLE ], - [ 10, Moves.FAIRY_WIND ], - [ 12, Moves.POISON_POWDER ], - [ 12, Moves.STUN_SPORE ], - [ 12, Moves.SLEEP_POWDER ], - [ 15, Moves.BULLET_SEED ], - [ 20, Moves.LEECH_SEED ], - [ 24, Moves.MEGA_DRAIN ], - [ 30, Moves.ACROBATICS ], - [ 35, Moves.COTTON_SPORE ], - [ 39, Moves.U_TURN ], - [ 43, Moves.GIGA_DRAIN ], - [ 49, Moves.BOUNCE ], - [ 55, Moves.MEMENTO ], - ], - [Species.AIPOM]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.TAIL_WHIP ], - [ 4, Moves.SAND_ATTACK ], - [ 8, Moves.ASTONISH ], - [ 11, Moves.BATON_PASS ], - [ 15, Moves.TICKLE ], - [ 18, Moves.FURY_SWIPES ], - [ 22, Moves.SWIFT ], - [ 25, Moves.SCREECH ], - [ 29, Moves.AGILITY ], - [ 32, Moves.DOUBLE_HIT ], - [ 36, Moves.FLING ], - [ 39, Moves.NASTY_PLOT ], - [ 43, Moves.LAST_RESORT ], - ], - [Species.SUNKERN]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWTH ], - [ 7, Moves.ABSORB ], - [ 10, Moves.MEGA_DRAIN ], - [ 16, Moves.RAZOR_LEAF ], - [ 19, Moves.WORRY_SEED ], - [ 22, Moves.GIGA_DRAIN ], - [ 25, Moves.ENDEAVOR ], - [ 28, Moves.SYNTHESIS ], - [ 31, Moves.SOLAR_BEAM ], - [ 34, Moves.DOUBLE_EDGE ], - [ 36, Moves.SUNNY_DAY ], - [ 39, Moves.SEED_BOMB ], - ], - [Species.SUNFLORA]: [ - [ RELEARN_MOVE, Moves.SEED_BOMB ], // Previous Stage Move - [ 1, Moves.POUND ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWTH ], - [ 1, Moves.ENDEAVOR ], // Previous Stage Move - [ 1, Moves.SYNTHESIS ], // Previous Stage Move - [ 4, Moves.INGRAIN ], - [ 7, Moves.ABSORB ], - [ 10, Moves.MEGA_DRAIN ], - [ 13, Moves.LEECH_SEED ], - [ 16, Moves.RAZOR_LEAF ], - [ 19, Moves.WORRY_SEED ], - [ 22, Moves.GIGA_DRAIN ], - [ 25, Moves.BULLET_SEED ], - [ 28, Moves.PETAL_DANCE ], - [ 31, Moves.SOLAR_BEAM ], - [ 34, Moves.DOUBLE_EDGE ], - [ 39, Moves.SUNNY_DAY ], - [ 43, Moves.LEAF_STORM ], - [ 50, Moves.PETAL_BLIZZARD ], - ], - [Species.YANMA]: [ - [ 1, Moves.TACKLE ], - [ 6, Moves.QUICK_ATTACK ], - [ 11, Moves.DOUBLE_TEAM ], - [ 14, Moves.AIR_CUTTER ], - [ 17, Moves.DETECT ], - [ 22, Moves.SUPERSONIC ], - [ 27, Moves.UPROAR ], - [ 30, Moves.BUG_BITE ], - [ 33, Moves.ANCIENT_POWER ], - [ 38, Moves.HYPNOSIS ], - [ 43, Moves.WING_ATTACK ], - [ 46, Moves.SCREECH ], - [ 49, Moves.U_TURN ], - [ 54, Moves.AIR_SLASH ], - [ 57, Moves.BUG_BUZZ ], - ], - [Species.WOOPER]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], - [ 4, Moves.RAIN_DANCE ], - [ 8, Moves.MUD_SHOT ], - [ 12, Moves.MIST ], - [ 12, Moves.HAZE ], - [ 16, Moves.SLAM ], - [ 21, Moves.YAWN ], - [ 24, Moves.AQUA_TAIL ], - [ 28, Moves.MUDDY_WATER ], - [ 32, Moves.AMNESIA ], - [ 36, Moves.TOXIC ], - [ 40, Moves.EARTHQUAKE ], - ], - [Species.QUAGSIRE]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.RAIN_DANCE ], - [ 1, Moves.MUD_SHOT ], - [ 12, Moves.MIST ], - [ 12, Moves.HAZE ], - [ 16, Moves.SLAM ], - [ 23, Moves.YAWN ], - [ 28, Moves.AQUA_TAIL ], - [ 34, Moves.MUDDY_WATER ], - [ 40, Moves.AMNESIA ], - [ 46, Moves.TOXIC ], - [ 52, Moves.EARTHQUAKE ], - ], - [Species.ESPEON]: [ - [ EVOLVE_MOVE, Moves.GLITZY_GLOW ], - [ RELEARN_MOVE, Moves.VEEVEE_VOLLEY ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.BITE ], - [ 1, Moves.GROWL ], - [ 1, Moves.CHARM ], - [ 1, Moves.BATON_PASS ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.COVET ], - [ 1, Moves.COPYCAT ], - [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.CONFUSION ], - [ 15, Moves.QUICK_ATTACK ], - [ 20, Moves.BABY_DOLL_EYES ], - [ 25, Moves.SWIFT ], - [ 30, Moves.PSYBEAM ], - [ 35, Moves.MORNING_SUN ], - [ 40, Moves.POWER_SWAP ], - [ 45, Moves.PSYCHIC ], - [ 50, Moves.PSYCH_UP ], - [ 55, Moves.FUTURE_SIGHT ], - [ 60, Moves.LAST_RESORT ], - ], - [Species.UMBREON]: [ - [ EVOLVE_MOVE, Moves.BADDY_BAD ], - [ RELEARN_MOVE, Moves.VEEVEE_VOLLEY ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.BITE ], - [ 1, Moves.GROWL ], - [ 1, Moves.SWIFT ], - [ 1, Moves.CHARM ], - [ 1, Moves.BATON_PASS ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.COVET ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.PURSUIT ], - [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.SNARL ], - [ 15, Moves.QUICK_ATTACK ], - [ 20, Moves.BABY_DOLL_EYES ], - [ 25, Moves.CONFUSE_RAY ], - [ 30, Moves.ASSURANCE ], - [ 35, Moves.MOONLIGHT ], - [ 40, Moves.GUARD_SWAP ], - [ 45, Moves.DARK_PULSE ], - [ 50, Moves.SCREECH ], - [ 55, Moves.MEAN_LOOK ], - [ 60, Moves.LAST_RESORT ], - ], - [Species.MURKROW]: [ - [ 1, Moves.PECK ], - [ 1, Moves.ASTONISH ], - [ 5, Moves.GUST ], - [ 11, Moves.HAZE ], - [ 15, Moves.WING_ATTACK ], - [ 21, Moves.NIGHT_SHADE ], - [ 25, Moves.ASSURANCE ], - [ 31, Moves.TAUNT ], - [ 35, Moves.MEAN_LOOK ], - [ 40, Moves.FOUL_PLAY ], - [ 50, Moves.SUCKER_PUNCH ], - [ 55, Moves.TORMENT ], - [ 60, Moves.QUASH ], - ], - [Species.SLOWKING]: [ - [ RELEARN_MOVE, Moves.FUTURE_SIGHT ], - [ RELEARN_MOVE, Moves.CHILLY_RECEPTION ], - [ 1, Moves.POWER_GEM ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.SWAGGER ], - [ 1, Moves.TACKLE ], - [ 1, Moves.CURSE ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 9, Moves.YAWN ], - [ 12, Moves.CONFUSION ], - [ 15, Moves.DISABLE ], - [ 18, Moves.WATER_PULSE ], - [ 21, Moves.HEADBUTT ], - [ 24, Moves.ZEN_HEADBUTT ], // Previous Stage Move, Galar Slowking Level - [ 27, Moves.AMNESIA ], - [ 30, Moves.SURF ], - [ 33, Moves.SLACK_OFF ], - [ 36, Moves.PSYCHIC ], - [ 39, Moves.PSYCH_UP ], - [ 42, Moves.RAIN_DANCE ], - [ 45, Moves.HEAL_PULSE ], - ], - [Species.MISDREAVUS]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.PSYWAVE ], - [ 10, Moves.ASTONISH ], - [ 14, Moves.CONFUSE_RAY ], - [ 19, Moves.MEAN_LOOK ], - [ 23, Moves.HEX ], - [ 28, Moves.PSYBEAM ], - [ 32, Moves.PAIN_SPLIT ], - [ 37, Moves.PAYBACK ], - [ 41, Moves.SHADOW_BALL ], - [ 46, Moves.PERISH_SONG ], - [ 50, Moves.POWER_GEM ], - ], - [Species.UNOWN]: [ - [ 1, Moves.HIDDEN_POWER ], - ], - [Species.WOBBUFFET]: [ - [ EVOLVE_MOVE, Moves.COUNTER ], - [ EVOLVE_MOVE, Moves.DESTINY_BOND ], - [ EVOLVE_MOVE, Moves.SAFEGUARD ], - [ EVOLVE_MOVE, Moves.MIRROR_COAT ], - [ 1, Moves.COUNTER ], - [ 1, Moves.DESTINY_BOND ], - [ 1, Moves.SAFEGUARD ], - [ 1, Moves.MIRROR_COAT ], - [ 1, Moves.AMNESIA ], - [ 1, Moves.SPLASH ], - [ 1, Moves.CHARM ], - [ 1, Moves.ENCORE ], - ], - [Species.GIRAFARIG]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.POWER_SWAP ], - [ 1, Moves.GUARD_SWAP ], - [ 5, Moves.CONFUSION ], - [ 10, Moves.ASSURANCE ], - [ 14, Moves.STOMP ], - [ 19, Moves.PSYBEAM ], - [ 23, Moves.AGILITY ], - [ 28, Moves.DOUBLE_HIT ], - [ 32, Moves.TWIN_BEAM ], - [ 37, Moves.CRUNCH ], - [ 41, Moves.BATON_PASS ], - [ 46, Moves.NASTY_PLOT ], - [ 50, Moves.PSYCHIC ], - ], - [Species.PINECO]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.PROTECT ], - [ 6, Moves.SELF_DESTRUCT ], - [ 9, Moves.BUG_BITE ], - [ 12, Moves.TAKE_DOWN ], - [ 17, Moves.RAPID_SPIN ], - [ 20, Moves.ROLLOUT ], - [ 23, Moves.CURSE ], - [ 28, Moves.SPIKES ], - [ 31, Moves.PAYBACK ], - [ 34, Moves.EXPLOSION ], - [ 39, Moves.IRON_DEFENSE ], - [ 42, Moves.GYRO_BALL ], - [ 45, Moves.DOUBLE_EDGE ], - ], - [Species.FORRETRESS]: [ - [ EVOLVE_MOVE, Moves.HEAVY_SLAM ], - [ 1, Moves.TACKLE ], - [ 1, Moves.SELF_DESTRUCT ], - [ 1, Moves.PROTECT ], - [ 1, Moves.ZAP_CANNON ], - [ 1, Moves.TOXIC_SPIKES ], - [ 1, Moves.MAGNET_RISE ], - [ 1, Moves.BUG_BITE ], - [ 1, Moves.MIRROR_SHOT ], - [ 12, Moves.TAKE_DOWN ], - [ 17, Moves.RAPID_SPIN ], - [ 20, Moves.ROLLOUT ], - [ 23, Moves.CURSE ], - [ 28, Moves.SPIKES ], - [ 32, Moves.PAYBACK ], - [ 36, Moves.EXPLOSION ], - [ 42, Moves.IRON_DEFENSE ], - [ 46, Moves.GYRO_BALL ], - [ 50, Moves.DOUBLE_EDGE ], - ], - [Species.DUNSPARCE]: [ - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.FLAIL ], - [ 1, Moves.TACKLE ], // Custom - [ 4, Moves.MUD_SLAP ], - [ 8, Moves.ROLLOUT ], - [ 12, Moves.GLARE ], - [ 16, Moves.SCREECH ], - [ 20, Moves.ANCIENT_POWER ], - [ 24, Moves.DRILL_RUN ], - [ 28, Moves.YAWN ], - [ 32, Moves.HYPER_DRILL ], - [ 36, Moves.ROOST ], - [ 40, Moves.DRAGON_RUSH ], - [ 44, Moves.COIL ], - [ 48, Moves.DOUBLE_EDGE ], - [ 52, Moves.ENDEAVOR ], - ], - [Species.GLIGAR]: [ - [ 1, Moves.POISON_STING ], - [ 4, Moves.SAND_ATTACK ], - [ 7, Moves.HARDEN ], - [ 10, Moves.KNOCK_OFF ], - [ 13, Moves.QUICK_ATTACK ], - [ 16, Moves.FURY_CUTTER ], - [ 19, Moves.POISON_TAIL ], - [ 22, Moves.ACROBATICS ], - [ 27, Moves.SLASH ], - [ 30, Moves.U_TURN ], - [ 35, Moves.SCREECH ], - [ 40, Moves.X_SCISSOR ], - [ 45, Moves.CRABHAMMER ], - [ 50, Moves.SWORDS_DANCE ], - ], - [Species.STEELIX]: [ - [ 1, Moves.BIND ], - [ 1, Moves.TACKLE ], - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.HARDEN ], - [ 1, Moves.MUD_SPORT ], - [ 1, Moves.CRUNCH ], - [ 1, Moves.ROCK_POLISH ], - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.FIRE_FANG ], - [ 4, Moves.SMACK_DOWN ], - [ 8, Moves.AUTOTOMIZE ], - [ 12, Moves.DRAGON_BREATH ], - [ 16, Moves.CURSE ], - [ 20, Moves.ROCK_SLIDE ], - [ 22, Moves.GYRO_BALL ], // Custom from USUM - [ 24, Moves.SCREECH ], - [ 28, Moves.SAND_TOMB ], - [ 32, Moves.STEALTH_ROCK ], - [ 36, Moves.SLAM ], - [ 40, Moves.SANDSTORM ], - [ 44, Moves.DIG ], - [ 48, Moves.IRON_TAIL ], - [ 52, Moves.STONE_EDGE ], - [ 56, Moves.DOUBLE_EDGE ], - [ 60, Moves.MAGNET_RISE ], - ], - [Species.SNUBBULL]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.SCARY_FACE ], - [ 1, Moves.CHARM ], - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.FIRE_FANG ], - [ 7, Moves.BITE ], - [ 13, Moves.LICK ], - [ 19, Moves.HEADBUTT ], - [ 25, Moves.ROAR ], - [ 31, Moves.LAST_RESORT ], - [ 37, Moves.PLAY_ROUGH ], - [ 43, Moves.PAYBACK ], - [ 49, Moves.CRUNCH ], - ], - [Species.GRANBULL]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.SCARY_FACE ], - [ 1, Moves.OUTRAGE ], - [ 1, Moves.CHARM ], - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.FIRE_FANG ], - [ 7, Moves.BITE ], - [ 13, Moves.LICK ], - [ 19, Moves.HEADBUTT ], - [ 27, Moves.ROAR ], - [ 35, Moves.LAST_RESORT ], - [ 43, Moves.PLAY_ROUGH ], - [ 51, Moves.PAYBACK ], - [ 59, Moves.CRUNCH ], - ], - [Species.QWILFISH]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.POISON_STING ], - [ 4, Moves.HARDEN ], - [ 8, Moves.WATER_GUN ], - [ 12, Moves.FELL_STINGER ], - [ 16, Moves.MINIMIZE ], - [ 20, Moves.SPIKES ], - [ 24, Moves.BRINE ], - [ 28, Moves.POISON_JAB ], - [ 32, Moves.PIN_MISSILE ], - [ 36, Moves.TOXIC_SPIKES ], - [ 40, Moves.STOCKPILE ], - [ 40, Moves.SPIT_UP ], - [ 44, Moves.TOXIC ], - [ 48, Moves.AQUA_TAIL ], - [ 52, Moves.ACUPRESSURE ], - [ 56, Moves.DESTINY_BOND ], - ], - [Species.SCIZOR]: [ - [ EVOLVE_MOVE, Moves.BULLET_PUNCH ], - [ 1, Moves.WING_ATTACK ], - [ 1, Moves.LEER ], - [ 1, Moves.AGILITY ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.FALSE_SWIPE ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.AIR_SLASH ], - [ 12, Moves.METAL_CLAW ], - [ 16, Moves.DOUBLE_TEAM ], - [ 20, Moves.DOUBLE_HIT ], - [ 24, Moves.SLASH ], - [ 28, Moves.FOCUS_ENERGY ], - [ 30, Moves.STEEL_WING ], // Custom - [ 32, Moves.IRON_DEFENSE ], - [ 36, Moves.IRON_HEAD ], - [ 40, Moves.X_SCISSOR ], - [ 44, Moves.SWORDS_DANCE ], - ], - [Species.SHUCKLE]: [ - [ 1, Moves.WRAP ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.BIDE ], - [ 1, Moves.CONSTRICT ], - [ 5, Moves.ROLLOUT ], - [ 10, Moves.STRUGGLE_BUG ], - [ 15, Moves.ROCK_THROW ], - [ 20, Moves.SAFEGUARD ], - [ 25, Moves.REST ], - [ 30, Moves.BUG_BITE ], - [ 35, Moves.GUARD_SPLIT ], - [ 35, Moves.POWER_SPLIT ], - [ 40, Moves.ROCK_SLIDE ], - [ 45, Moves.GASTRO_ACID ], - [ 50, Moves.STICKY_WEB ], - [ 55, Moves.POWER_TRICK ], - [ 60, Moves.STONE_EDGE ], - [ 65, Moves.SHELL_SMASH ], - ], - [Species.HERACROSS]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.ARM_THRUST ], - [ 5, Moves.FURY_ATTACK ], - [ 10, Moves.ENDURE ], - [ 15, Moves.AERIAL_ACE ], - [ 20, Moves.HORN_ATTACK ], - [ 25, Moves.COUNTER ], - [ 30, Moves.BRICK_BREAK ], - [ 35, Moves.PIN_MISSILE ], - [ 40, Moves.THROAT_CHOP ], - [ 45, Moves.THRASH ], - [ 50, Moves.SWORDS_DANCE ], - [ 55, Moves.MEGAHORN ], - [ 60, Moves.CLOSE_COMBAT ], - ], - [Species.SNEASEL]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 6, Moves.TAUNT ], - [ 12, Moves.QUICK_ATTACK ], - [ 18, Moves.METAL_CLAW ], - [ 24, Moves.ICY_WIND ], - [ 30, Moves.FURY_SWIPES ], - [ 36, Moves.HONE_CLAWS ], - [ 42, Moves.BEAT_UP ], - [ 48, Moves.AGILITY ], - [ 54, Moves.SCREECH ], - [ 60, Moves.SLASH ], - ], - [Species.TEDDIURSA]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LICK ], - [ 1, Moves.COVET ], - [ 1, Moves.FLING ], - [ 1, Moves.BABY_DOLL_EYES ], - [ 8, Moves.FURY_SWIPES ], - [ 13, Moves.PAYBACK ], - [ 17, Moves.SWEET_SCENT ], - [ 22, Moves.SLASH ], - [ 25, Moves.PLAY_NICE ], - [ 29, Moves.PLAY_ROUGH ], - [ 33, Moves.CHARM ], - [ 37, Moves.REST ], - [ 37, Moves.SNORE ], - [ 41, Moves.THRASH ], - ], - [Species.URSARING]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.LICK ], - [ 1, Moves.COVET ], - [ 1, Moves.FLING ], // Previous Stage Move - [ 1, Moves.BABY_DOLL_EYES ], // Previous Stage Move - [ 1, Moves.FAKE_TEARS ], - [ 1, Moves.CHARM ], // Previous Stage Move - [ 8, Moves.FURY_SWIPES ], - [ 13, Moves.PAYBACK ], - [ 17, Moves.SWEET_SCENT ], - [ 22, Moves.SLASH ], - [ 25, Moves.PLAY_NICE ], - [ 29, Moves.PLAY_ROUGH ], - [ 35, Moves.SCARY_FACE ], - [ 41, Moves.REST ], - [ 41, Moves.SNORE ], - [ 48, Moves.HIGH_HORSEPOWER ], - [ 56, Moves.THRASH ], - [ 64, Moves.HAMMER_ARM ], - ], - [Species.SLUGMA]: [ - [ 1, Moves.SMOG ], - [ 1, Moves.YAWN ], - [ 5, Moves.EMBER ], // Custom, Moved from Level 6 to 5 - [ 8, Moves.ROCK_THROW ], - [ 13, Moves.HARDEN ], - [ 20, Moves.CLEAR_SMOG ], - [ 22, Moves.ANCIENT_POWER ], - [ 27, Moves.INCINERATE ], - [ 29, Moves.ROCK_SLIDE ], - [ 34, Moves.LAVA_PLUME ], - [ 36, Moves.AMNESIA ], - [ 41, Moves.BODY_SLAM ], - [ 43, Moves.RECOVER ], - [ 48, Moves.FLAMETHROWER ], - [ 50, Moves.EARTH_POWER ], - ], - [Species.MAGCARGO]: [ - [ EVOLVE_MOVE, Moves.SHELL_SMASH ], - [ 1, Moves.EMBER ], - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.SMOG ], - [ 1, Moves.YAWN ], - [ 1, Moves.EARTH_POWER ], - [ 13, Moves.HARDEN ], - [ 20, Moves.CLEAR_SMOG ], - [ 22, Moves.ANCIENT_POWER ], - [ 27, Moves.INCINERATE ], - [ 29, Moves.ROCK_SLIDE ], - [ 34, Moves.LAVA_PLUME ], - [ 36, Moves.AMNESIA ], - [ 43, Moves.BODY_SLAM ], - [ 47, Moves.RECOVER ], - [ 54, Moves.FLAMETHROWER ], - ], - [Species.SWINUB]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.ODOR_SLEUTH ], - [ 5, Moves.POWDER_SNOW ], - [ 10, Moves.FLAIL ], - [ 15, Moves.ICE_SHARD ], - [ 20, Moves.MIST ], - [ 25, Moves.ENDURE ], - [ 30, Moves.ICY_WIND ], - [ 35, Moves.AMNESIA ], - [ 40, Moves.TAKE_DOWN ], - [ 45, Moves.EARTHQUAKE ], - [ 50, Moves.BLIZZARD ], - ], - [Species.PILOSWINE]: [ - [ EVOLVE_MOVE, Moves.ICE_FANG ], - [ 1, Moves.TACKLE ], - [ 1, Moves.FLAIL ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.ODOR_SLEUTH ], - [ 1, Moves.ANCIENT_POWER ], - [ 15, Moves.ICE_SHARD ], - [ 20, Moves.MIST ], - [ 25, Moves.ENDURE ], - [ 30, Moves.ICY_WIND ], - [ 37, Moves.AMNESIA ], - [ 44, Moves.TAKE_DOWN ], - [ 51, Moves.EARTHQUAKE ], - [ 58, Moves.BLIZZARD ], - [ 65, Moves.THRASH ], - ], - [Species.CORSOLA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 5, Moves.WATER_GUN ], - [ 10, Moves.AQUA_RING ], - [ 15, Moves.ENDURE ], - [ 20, Moves.ANCIENT_POWER ], - [ 25, Moves.BUBBLE_BEAM ], - [ 30, Moves.FLAIL ], - [ 35, Moves.LIFE_DEW ], - [ 40, Moves.POWER_GEM ], - [ 45, Moves.EARTH_POWER ], - [ 50, Moves.RECOVER ], - [ 55, Moves.MIRROR_COAT ], - ], - [Species.REMORAID]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.HELPING_HAND ], - [ 4, Moves.WATER_PULSE ], - [ 8, Moves.FOCUS_ENERGY ], - [ 12, Moves.PSYBEAM ], - [ 16, Moves.AURORA_BEAM ], - [ 20, Moves.BUBBLE_BEAM ], - [ 24, Moves.LOCK_ON ], - [ 28, Moves.BULLET_SEED ], - [ 32, Moves.ICE_BEAM ], - [ 36, Moves.HYDRO_PUMP ], - [ 40, Moves.SOAK ], - [ 44, Moves.HYPER_BEAM ], - ], - [Species.OCTILLERY]: [ - [ EVOLVE_MOVE, Moves.OCTAZOOKA ], - [ 1, Moves.WRAP ], - [ 1, Moves.CONSTRICT ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.ROCK_BLAST ], - [ 1, Moves.WATER_PULSE ], - [ 1, Moves.GUNK_SHOT ], - [ 12, Moves.PSYBEAM ], - [ 16, Moves.AURORA_BEAM ], - [ 20, Moves.BUBBLE_BEAM ], - [ 24, Moves.LOCK_ON ], - [ 30, Moves.BULLET_SEED ], - [ 36, Moves.ICE_BEAM ], - [ 42, Moves.HYDRO_PUMP ], - [ 48, Moves.SOAK ], - [ 54, Moves.HYPER_BEAM ], - ], - [Species.DELIBIRD]: [ // Given a custom level up learnset - [ 1, Moves.PRESENT ], - [ 1, Moves.METRONOME ], - [ 5, Moves.FAKE_OUT ], - [ 5, Moves.POWDER_SNOW ], - [ 6, Moves.MIST ], - [ 10, Moves.ICE_SHARD ], - [ 15, Moves.AERIAL_ACE ], - [ 20, Moves.ICY_WIND ], - [ 25, Moves.DRILL_PECK ], - [ 30, Moves.ICE_PUNCH ], - [ 35, Moves.HAZE ], - [ 40, Moves.AIR_SLASH ], - [ 45, Moves.TAILWIND ], - [ 50, Moves.SNOWSCAPE ], - [ 55, Moves.BLIZZARD ], - [ 60, Moves.BRAVE_BIRD ], - ], - [Species.MANTINE]: [ - [ 1, Moves.WING_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.PSYBEAM ], - [ 1, Moves.SIGNAL_BEAM ], - [ 1, Moves.BULLET_SEED ], - [ 1, Moves.ROOST ], - [ 12, Moves.WATER_PULSE ], - [ 16, Moves.WIDE_GUARD ], - [ 20, Moves.AGILITY ], - [ 24, Moves.BUBBLE_BEAM ], - [ 28, Moves.HEADBUTT ], - [ 32, Moves.AIR_SLASH ], - [ 36, Moves.AQUA_RING ], - [ 40, Moves.BOUNCE ], - [ 44, Moves.TAKE_DOWN ], - [ 48, Moves.HYDRO_PUMP ], - ], - [Species.SKARMORY]: [ - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 4, Moves.SAND_ATTACK ], - [ 8, Moves.FURY_ATTACK ], - [ 12, Moves.METAL_CLAW ], - [ 16, Moves.AGILITY ], - [ 20, Moves.WING_ATTACK ], - [ 24, Moves.SLASH ], - [ 28, Moves.STEEL_WING ], - [ 32, Moves.PAYBACK ], - [ 36, Moves.DRILL_PECK ], - [ 40, Moves.METAL_SOUND ], - [ 44, Moves.SPIKES ], - [ 48, Moves.IRON_DEFENSE ], - [ 52, Moves.BRAVE_BIRD ], - ], - [Species.HOUNDOUR]: [ - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 4, Moves.HOWL ], - [ 8, Moves.SMOG ], - [ 13, Moves.ROAR ], - [ 16, Moves.BITE ], - [ 20, Moves.INCINERATE ], - [ 25, Moves.BEAT_UP ], - [ 28, Moves.FIRE_FANG ], - [ 32, Moves.TORMENT ], - [ 37, Moves.COMEUPPANCE ], - [ 40, Moves.FOUL_PLAY ], - [ 44, Moves.FLAMETHROWER ], - [ 49, Moves.CRUNCH ], - [ 52, Moves.NASTY_PLOT ], - [ 56, Moves.INFERNO ], - ], - [Species.HOUNDOOM]: [ - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 1, Moves.SMOG ], - [ 1, Moves.HOWL ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.THUNDER_FANG ], - [ 13, Moves.ROAR ], - [ 16, Moves.BITE ], - [ 20, Moves.INCINERATE ], - [ 26, Moves.BEAT_UP ], - [ 30, Moves.FIRE_FANG ], - [ 35, Moves.TORMENT ], - [ 41, Moves.COMEUPPANCE ], - [ 45, Moves.FOUL_PLAY ], - [ 50, Moves.FLAMETHROWER ], - [ 56, Moves.CRUNCH ], - [ 62, Moves.INFERNO ], - ], - [Species.KINGDRA]: [ - [ RELEARN_MOVE, Moves.LASER_FOCUS ], // Previous Stage Move - [ 1, Moves.LEER ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.TWISTER ], - [ 1, Moves.WHIRLPOOL ], - [ 1, Moves.YAWN ], - [ 15, Moves.FOCUS_ENERGY ], - [ 20, Moves.DRAGON_BREATH ], - [ 25, Moves.BUBBLE_BEAM ], - [ 30, Moves.AGILITY ], - [ 37, Moves.WATER_PULSE ], - [ 44, Moves.DRAGON_PULSE ], - [ 51, Moves.HYDRO_PUMP ], - [ 58, Moves.DRAGON_DANCE ], - [ 65, Moves.RAIN_DANCE ], - [ 72, Moves.WAVE_CRASH ], - ], - [Species.PHANPY]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.ODOR_SLEUTH ], - [ 6, Moves.FLAIL ], - [ 10, Moves.ROLLOUT ], - [ 15, Moves.BULLDOZE ], - [ 19, Moves.ENDURE ], - [ 24, Moves.SLAM ], - [ 28, Moves.TAKE_DOWN ], - [ 33, Moves.CHARM ], - [ 37, Moves.LAST_RESORT ], - [ 42, Moves.DOUBLE_EDGE ], - ], - [Species.DONPHAN]: [ - [ EVOLVE_MOVE, Moves.FURY_ATTACK ], - [ 1, Moves.TACKLE ], // Previous Stage Move - [ 1, Moves.GROWL ], - [ 1, Moves.HORN_ATTACK ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.ODOR_SLEUTH ], // Previous Stage Move - [ 1, Moves.FLAIL ], // Previous Stage Move - [ 1, Moves.ENDURE ], // Previous Stage Move - [ 1, Moves.TAKE_DOWN ], // Previous Stage Move - [ 1, Moves.CHARM ], // Previous Stage Move - [ 1, Moves.LAST_RESORT ], // Previous Stage Move - [ 1, Moves.DOUBLE_EDGE ], // Previous Stage Move - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.FIRE_FANG ], - [ 1, Moves.BULLDOZE ], - [ 6, Moves.RAPID_SPIN ], - [ 10, Moves.ROLLOUT ], - [ 15, Moves.ASSURANCE ], - [ 19, Moves.KNOCK_OFF ], - [ 24, Moves.SLAM ], - [ 30, Moves.STOMPING_TANTRUM ], - [ 37, Moves.SCARY_FACE ], - [ 43, Moves.EARTHQUAKE ], - [ 50, Moves.GIGA_IMPACT ], - ], - [Species.PORYGON2]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.CONVERSION ], - [ 1, Moves.RECYCLE ], - [ 1, Moves.MAGNET_RISE ], - [ 1, Moves.MAGIC_COAT ], // Previous Stage Move - [ 15, Moves.THUNDER_SHOCK ], - [ 20, Moves.PSYBEAM ], - [ 25, Moves.CONVERSION_2 ], - [ 30, Moves.AGILITY ], - [ 35, Moves.RECOVER ], - [ 40, Moves.DISCHARGE ], - [ 45, Moves.TRI_ATTACK ], - [ 50, Moves.LOCK_ON ], - [ 55, Moves.ZAP_CANNON ], - [ 60, Moves.HYPER_BEAM ], - ], - [Species.STANTLER]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.ME_FIRST ], - [ 3, Moves.LEER ], - [ 7, Moves.ASTONISH ], - [ 10, Moves.HYPNOSIS ], - [ 13, Moves.STOMP ], - [ 16, Moves.SAND_ATTACK ], - [ 21, Moves.TAKE_DOWN ], - [ 23, Moves.CONFUSE_RAY ], - [ 25, Moves.PSYSHIELD_BASH ], - [ 27, Moves.CALM_MIND ], - [ 32, Moves.ROLE_PLAY ], - [ 37, Moves.ZEN_HEADBUTT ], - [ 49, Moves.IMPRISON ], - [ 55, Moves.DOUBLE_EDGE ], + [SpeciesId.BULBASAUR]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 3, MoveId.VINE_WHIP ], + [ 6, MoveId.GROWTH ], + [ 9, MoveId.LEECH_SEED ], + [ 12, MoveId.RAZOR_LEAF ], + [ 15, MoveId.POISON_POWDER ], + [ 15, MoveId.SLEEP_POWDER ], + [ 18, MoveId.SEED_BOMB ], + [ 21, MoveId.TAKE_DOWN ], + [ 24, MoveId.SWEET_SCENT ], + [ 27, MoveId.SYNTHESIS ], + [ 30, MoveId.WORRY_SEED ], + [ 33, MoveId.POWER_WHIP ], + [ 36, MoveId.SOLAR_BEAM ], + ], + [SpeciesId.IVYSAUR]: [ + [ 1, MoveId.VINE_WHIP ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.GROWTH ], + [ 9, MoveId.LEECH_SEED ], + [ 12, MoveId.RAZOR_LEAF ], + [ 15, MoveId.POISON_POWDER ], + [ 15, MoveId.SLEEP_POWDER ], + [ 20, MoveId.SEED_BOMB ], + [ 25, MoveId.TAKE_DOWN ], + [ 30, MoveId.SWEET_SCENT ], + [ 35, MoveId.SYNTHESIS ], + [ 40, MoveId.WORRY_SEED ], + [ 45, MoveId.POWER_WHIP ], + [ 50, MoveId.SOLAR_BEAM ], + ], + [SpeciesId.VENUSAUR]: [ + [ EVOLVE_MOVE, MoveId.PETAL_BLIZZARD ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.PETAL_DANCE ], + [ 1, MoveId.VINE_WHIP ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 9, MoveId.LEECH_SEED ], + [ 12, MoveId.RAZOR_LEAF ], + [ 15, MoveId.POISON_POWDER ], + [ 15, MoveId.SLEEP_POWDER ], + [ 20, MoveId.SEED_BOMB ], + [ 25, MoveId.TAKE_DOWN ], + [ 30, MoveId.SWEET_SCENT ], + [ 37, MoveId.SYNTHESIS ], + [ 44, MoveId.WORRY_SEED ], + [ 51, MoveId.POWER_WHIP ], + [ 58, MoveId.SOLAR_BEAM ], + ], + [SpeciesId.CHARMANDER]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 4, MoveId.EMBER ], + [ 8, MoveId.SMOKESCREEN ], + [ 12, MoveId.DRAGON_BREATH ], + [ 17, MoveId.FIRE_FANG ], + [ 20, MoveId.SLASH ], + [ 24, MoveId.FLAMETHROWER ], + [ 28, MoveId.SCARY_FACE ], + [ 32, MoveId.FIRE_SPIN ], + [ 36, MoveId.INFERNO ], + [ 40, MoveId.FLARE_BLITZ ], + ], + [SpeciesId.CHARMELEON]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.FIRE_SPIN ], // Previous Stage Move + [ 12, MoveId.DRAGON_BREATH ], + [ 19, MoveId.FIRE_FANG ], + [ 24, MoveId.SLASH ], + [ 30, MoveId.FLAMETHROWER ], + [ 37, MoveId.SCARY_FACE ], + [ 48, MoveId.INFERNO ], + [ 54, MoveId.FLARE_BLITZ ], + ], + [SpeciesId.CHARIZARD]: [ + [ EVOLVE_MOVE, MoveId.AIR_SLASH ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.HEAT_WAVE ], + [ 1, MoveId.DRAGON_CLAW ], + [ 12, MoveId.DRAGON_BREATH ], + [ 19, MoveId.FIRE_FANG ], + [ 24, MoveId.SLASH ], + [ 30, MoveId.FLAMETHROWER ], + [ 39, MoveId.SCARY_FACE ], + [ 46, MoveId.FIRE_SPIN ], + [ 54, MoveId.INFERNO ], + [ 62, MoveId.FLARE_BLITZ ], + ], + [SpeciesId.SQUIRTLE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 3, MoveId.WATER_GUN ], + [ 6, MoveId.WITHDRAW ], + [ 9, MoveId.RAPID_SPIN ], + [ 12, MoveId.BITE ], + [ 15, MoveId.WATER_PULSE ], + [ 18, MoveId.PROTECT ], + [ 21, MoveId.RAIN_DANCE ], + [ 24, MoveId.AQUA_TAIL ], + [ 27, MoveId.SHELL_SMASH ], + [ 30, MoveId.IRON_DEFENSE ], + [ 33, MoveId.HYDRO_PUMP ], + [ 36, MoveId.WAVE_CRASH ], + ], + [SpeciesId.WARTORTLE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.WITHDRAW ], + [ 9, MoveId.RAPID_SPIN ], + [ 12, MoveId.BITE ], + [ 15, MoveId.WATER_PULSE ], + [ 20, MoveId.PROTECT ], + [ 25, MoveId.RAIN_DANCE ], + [ 30, MoveId.AQUA_TAIL ], + [ 35, MoveId.SHELL_SMASH ], + [ 40, MoveId.IRON_DEFENSE ], + [ 45, MoveId.HYDRO_PUMP ], + [ 50, MoveId.WAVE_CRASH ], + ], + [SpeciesId.BLASTOISE]: [ + [ EVOLVE_MOVE, MoveId.FLASH_CANNON ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.WITHDRAW ], + [ 9, MoveId.RAPID_SPIN ], + [ 12, MoveId.BITE ], + [ 15, MoveId.WATER_PULSE ], + [ 20, MoveId.PROTECT ], + [ 25, MoveId.RAIN_DANCE ], + [ 30, MoveId.AQUA_TAIL ], + [ 35, MoveId.SHELL_SMASH ], + [ 42, MoveId.IRON_DEFENSE ], + [ 49, MoveId.HYDRO_PUMP ], + [ 56, MoveId.WAVE_CRASH ], + ], + [SpeciesId.CATERPIE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.STRING_SHOT ], + [ 9, MoveId.BUG_BITE ], + ], + [SpeciesId.METAPOD]: [ + [ EVOLVE_MOVE, MoveId.HARDEN ], + [ RELEARN_MOVE, MoveId.TACKLE ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.STRING_SHOT ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.BUG_BITE ], // Previous Stage Move + [ 1, MoveId.HARDEN ], + ], + [SpeciesId.BUTTERFREE]: [ + [ EVOLVE_MOVE, MoveId.GUST ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.STRING_SHOT ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.BUG_BITE ], + [ 4, MoveId.SUPERSONIC ], + [ 8, MoveId.CONFUSION ], + [ 12, MoveId.POISON_POWDER ], + [ 12, MoveId.STUN_SPORE ], + [ 12, MoveId.SLEEP_POWDER ], + [ 16, MoveId.PSYBEAM ], + [ 20, MoveId.WHIRLWIND ], + [ 24, MoveId.AIR_SLASH ], + [ 28, MoveId.SAFEGUARD ], + [ 32, MoveId.BUG_BUZZ ], + [ 36, MoveId.TAILWIND ], + [ 40, MoveId.RAGE_POWDER ], + [ 44, MoveId.QUIVER_DANCE ], + ], + [SpeciesId.WEEDLE]: [ + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.STRING_SHOT ], + [ 9, MoveId.BUG_BITE ], + ], + [SpeciesId.KAKUNA]: [ + [ EVOLVE_MOVE, MoveId.HARDEN ], + [ RELEARN_MOVE, MoveId.POISON_STING ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.STRING_SHOT ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.BUG_BITE ], // Previous Stage Move + [ 1, MoveId.HARDEN ], + ], + [SpeciesId.BEEDRILL]: [ + [ EVOLVE_MOVE, MoveId.TWINEEDLE ], + [ 1, MoveId.POISON_STING ], // Previous Stage Move + [ 1, MoveId.STRING_SHOT ], // Previous Stage Move + [ 1, MoveId.HARDEN ], // Previous Stage Move + [ 1, MoveId.BUG_BITE ], // Previous Stage Move + [ 1, MoveId.FURY_ATTACK ], + [ 11, MoveId.FURY_CUTTER ], + [ 14, MoveId.RAGE ], + [ 17, MoveId.PURSUIT ], + [ 20, MoveId.FOCUS_ENERGY ], + [ 23, MoveId.VENOSHOCK ], + [ 26, MoveId.ASSURANCE ], + [ 29, MoveId.TOXIC_SPIKES ], + [ 32, MoveId.PIN_MISSILE ], + [ 35, MoveId.POISON_JAB ], + [ 38, MoveId.AGILITY ], + [ 41, MoveId.ENDEAVOR ], + [ 44, MoveId.FELL_STINGER ], + ], + [SpeciesId.PIDGEY]: [ + [ 1, MoveId.TACKLE ], + [ 5, MoveId.SAND_ATTACK ], + [ 9, MoveId.GUST ], + [ 13, MoveId.QUICK_ATTACK ], + [ 17, MoveId.WHIRLWIND ], + [ 21, MoveId.TWISTER ], + [ 25, MoveId.FEATHER_DANCE ], + [ 29, MoveId.AGILITY ], + [ 33, MoveId.WING_ATTACK ], + [ 37, MoveId.ROOST ], + [ 41, MoveId.TAILWIND ], + [ 45, MoveId.AERIAL_ACE ], + [ 49, MoveId.AIR_SLASH ], + [ 53, MoveId.HURRICANE ], + ], + [SpeciesId.PIDGEOTTO]: [ + [ 1, MoveId.GUST ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 5, MoveId.SAND_ATTACK ], + [ 9, MoveId.GUST ], + [ 13, MoveId.QUICK_ATTACK ], + [ 17, MoveId.WHIRLWIND ], + [ 22, MoveId.TWISTER ], + [ 27, MoveId.FEATHER_DANCE ], + [ 32, MoveId.AGILITY ], + [ 37, MoveId.WING_ATTACK ], + [ 42, MoveId.ROOST ], + [ 47, MoveId.TAILWIND ], + [ 52, MoveId.AERIAL_ACE ], + [ 57, MoveId.AIR_SLASH ], + [ 62, MoveId.HURRICANE ], + ], + [SpeciesId.PIDGEOT]: [ + [ 1, MoveId.GUST ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.HURRICANE ], + [ 5, MoveId.SAND_ATTACK ], + [ 9, MoveId.GUST ], + [ 17, MoveId.WHIRLWIND ], + [ 22, MoveId.TWISTER ], + [ 27, MoveId.FEATHER_DANCE ], + [ 32, MoveId.AGILITY ], + [ 38, MoveId.WING_ATTACK ], + [ 44, MoveId.ROOST ], + [ 50, MoveId.TAILWIND ], + [ 56, MoveId.AERIAL_ACE ], + [ 62, MoveId.AIR_SLASH ], + [ 68, MoveId.HURRICANE ], + ], + [SpeciesId.RATTATA]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 4, MoveId.QUICK_ATTACK ], + [ 7, MoveId.FOCUS_ENERGY ], + [ 10, MoveId.BITE ], + [ 13, MoveId.LASER_FOCUS ], + [ 16, MoveId.TAKE_DOWN ], + [ 19, MoveId.ASSURANCE ], + [ 22, MoveId.CRUNCH ], + [ 25, MoveId.SUCKER_PUNCH ], + [ 28, MoveId.SUPER_FANG ], + [ 31, MoveId.DOUBLE_EDGE ], + [ 34, MoveId.ENDEAVOR ], + ], + [SpeciesId.RATICATE]: [ + [ EVOLVE_MOVE, MoveId.SCARY_FACE ], + [ 1, MoveId.SWORDS_DANCE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 10, MoveId.BITE ], + [ 13, MoveId.LASER_FOCUS ], + [ 16, MoveId.TAKE_DOWN ], + [ 19, MoveId.ASSURANCE ], + [ 24, MoveId.CRUNCH ], + [ 29, MoveId.SUCKER_PUNCH ], + [ 34, MoveId.SUPER_FANG ], + [ 39, MoveId.DOUBLE_EDGE ], + [ 44, MoveId.ENDEAVOR ], + ], + [SpeciesId.SPEAROW]: [ + [ 1, MoveId.GROWL ], + [ 1, MoveId.PECK ], + [ 4, MoveId.LEER ], + [ 8, MoveId.ASSURANCE ], + [ 11, MoveId.FURY_ATTACK ], + [ 15, MoveId.AERIAL_ACE ], + [ 18, MoveId.WING_ATTACK ], + [ 22, MoveId.TAKE_DOWN ], + [ 25, MoveId.AGILITY ], + [ 29, MoveId.FOCUS_ENERGY ], + [ 32, MoveId.ROOST ], + [ 36, MoveId.DRILL_PECK ], + ], + [SpeciesId.FEAROW]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.PECK ], + [ 1, MoveId.ASSURANCE ], + [ 1, MoveId.PLUCK ], + [ 1, MoveId.DRILL_RUN ], + [ 1, MoveId.PURSUIT ], + [ 4, MoveId.LEER ], + [ 8, MoveId.ASSURANCE ], + [ 11, MoveId.FURY_ATTACK ], + [ 15, MoveId.AERIAL_ACE ], + [ 18, MoveId.WING_ATTACK ], + [ 23, MoveId.TAKE_DOWN ], + [ 27, MoveId.AGILITY ], + [ 32, MoveId.FOCUS_ENERGY ], + [ 36, MoveId.ROOST ], + [ 41, MoveId.DRILL_PECK ], + ], + [SpeciesId.EKANS]: [ + [ 1, MoveId.WRAP ], + [ 1, MoveId.LEER ], + [ 4, MoveId.POISON_STING ], + [ 9, MoveId.BITE ], + [ 12, MoveId.GLARE ], + [ 17, MoveId.SCREECH ], + [ 20, MoveId.ACID ], + [ 25, MoveId.SWALLOW ], + [ 25, MoveId.STOCKPILE ], + [ 25, MoveId.SPIT_UP ], + [ 28, MoveId.ACID_SPRAY ], + [ 33, MoveId.SLUDGE_BOMB ], + [ 36, MoveId.GASTRO_ACID ], + [ 38, MoveId.BELCH ], + [ 41, MoveId.HAZE ], + [ 44, MoveId.COIL ], + [ 49, MoveId.GUNK_SHOT ], + ], + [SpeciesId.ARBOK]: [ + [ EVOLVE_MOVE, MoveId.CRUNCH ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.LEER ], + [ 1, MoveId.BITE ], + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.FIRE_FANG ], + [ 12, MoveId.GLARE ], + [ 17, MoveId.SCREECH ], + [ 20, MoveId.ACID ], + [ 27, MoveId.STOCKPILE ], + [ 27, MoveId.SPIT_UP ], + [ 27, MoveId.SWALLOW ], + [ 32, MoveId.ACID_SPRAY ], + [ 39, MoveId.SLUDGE_BOMB ], + [ 44, MoveId.GASTRO_ACID ], + [ 48, MoveId.BELCH ], + [ 51, MoveId.HAZE ], + [ 56, MoveId.COIL ], + [ 63, MoveId.GUNK_SHOT ], + ], + [SpeciesId.PIKACHU]: [ + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.NUZZLE ], + [ 4, MoveId.THUNDER_WAVE ], + [ 8, MoveId.DOUBLE_TEAM ], + [ 12, MoveId.ELECTRO_BALL ], + [ 16, MoveId.FEINT ], + [ 20, MoveId.SPARK ], + [ 24, MoveId.AGILITY ], + [ 28, MoveId.IRON_TAIL ], + [ 32, MoveId.DISCHARGE ], + [ 36, MoveId.THUNDERBOLT ], + [ 40, MoveId.LIGHT_SCREEN ], + [ 44, MoveId.THUNDER ], + [ 48, MoveId.PIKA_PAPOW ], + ], + [SpeciesId.RAICHU]: [ + [ EVOLVE_MOVE, MoveId.ZIPPY_ZAP ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.THUNDER ], + [ 1, MoveId.AGILITY ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.LIGHT_SCREEN ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.SPARK ], + [ 1, MoveId.IRON_TAIL ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.DISCHARGE ], + [ 1, MoveId.ELECTRO_BALL ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.NUZZLE ], + [ 1, MoveId.THUNDER_PUNCH ], + [ 5, MoveId.THUNDERBOLT ], + [ 50, MoveId.PIKA_PAPOW ], + ], + [SpeciesId.SANDSHREW]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.DEFENSE_CURL ], + [ 3, MoveId.POISON_STING ], + [ 6, MoveId.SAND_ATTACK ], + [ 9, MoveId.ROLLOUT ], + [ 12, MoveId.FURY_CUTTER ], + [ 15, MoveId.RAPID_SPIN ], + [ 18, MoveId.BULLDOZE ], + [ 21, MoveId.SWIFT ], + [ 24, MoveId.FURY_SWIPES ], + [ 27, MoveId.AGILITY ], + [ 30, MoveId.SLASH ], + [ 33, MoveId.DIG ], + [ 36, MoveId.GYRO_BALL ], + [ 39, MoveId.SWORDS_DANCE ], + [ 42, MoveId.SANDSTORM ], + [ 45, MoveId.EARTHQUAKE ], + ], + [SpeciesId.SANDSLASH]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.CRUSH_CLAW ], + [ 1, MoveId.AGILITY ], // Previous Stage Move + [ 9, MoveId.ROLLOUT ], + [ 12, MoveId.FURY_CUTTER ], + [ 15, MoveId.RAPID_SPIN ], + [ 18, MoveId.BULLDOZE ], + [ 21, MoveId.SWIFT ], + [ 26, MoveId.FURY_SWIPES ], + [ 31, MoveId.SAND_TOMB ], + [ 36, MoveId.SLASH ], + [ 41, MoveId.DIG ], + [ 46, MoveId.GYRO_BALL ], + [ 51, MoveId.SWORDS_DANCE ], + [ 56, MoveId.SANDSTORM ], + [ 61, MoveId.EARTHQUAKE ], + ], + [SpeciesId.NIDORAN_F]: [ + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.GROWL ], + [ 5, MoveId.SCRATCH ], + [ 10, MoveId.TAIL_WHIP ], + [ 15, MoveId.FURY_SWIPES ], + [ 20, MoveId.TOXIC_SPIKES ], + [ 25, MoveId.DOUBLE_KICK ], + [ 30, MoveId.BITE ], + [ 35, MoveId.HELPING_HAND ], + [ 40, MoveId.TOXIC ], + [ 45, MoveId.FLATTER ], + [ 50, MoveId.CRUNCH ], + [ 55, MoveId.EARTH_POWER ], + ], + [SpeciesId.NIDORINA]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.GROWL ], + [ 15, MoveId.FURY_SWIPES ], + [ 22, MoveId.TOXIC_SPIKES ], + [ 29, MoveId.DOUBLE_KICK ], + [ 36, MoveId.BITE ], + [ 43, MoveId.HELPING_HAND ], + [ 50, MoveId.TOXIC ], + [ 57, MoveId.FLATTER ], + [ 64, MoveId.CRUNCH ], + [ 71, MoveId.EARTH_POWER ], + ], + [SpeciesId.NIDOQUEEN]: [ + [ EVOLVE_MOVE, MoveId.SUPERPOWER ], + [ 1, MoveId.SLUDGE_WAVE ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.DOUBLE_KICK ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.BITE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.TOXIC ], + [ 1, MoveId.FURY_SWIPES ], + [ 1, MoveId.CRUNCH ], + [ 1, MoveId.FLATTER ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.TOXIC_SPIKES ], + [ 1, MoveId.EARTH_POWER ], + ], + [SpeciesId.NIDORAN_M]: [ + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.LEER ], + [ 5, MoveId.PECK ], + [ 10, MoveId.FOCUS_ENERGY ], + [ 15, MoveId.FURY_ATTACK ], + [ 20, MoveId.TOXIC_SPIKES ], + [ 25, MoveId.DOUBLE_KICK ], + [ 30, MoveId.HORN_ATTACK ], + [ 35, MoveId.HELPING_HAND ], + [ 40, MoveId.TOXIC ], + [ 45, MoveId.FLATTER ], + [ 50, MoveId.POISON_JAB ], + [ 55, MoveId.EARTH_POWER ], + ], + [SpeciesId.NIDORINO]: [ + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 15, MoveId.FURY_ATTACK ], + [ 22, MoveId.TOXIC_SPIKES ], + [ 29, MoveId.DOUBLE_KICK ], + [ 36, MoveId.HORN_ATTACK ], + [ 43, MoveId.HELPING_HAND ], + [ 50, MoveId.TOXIC ], + [ 57, MoveId.FLATTER ], + [ 64, MoveId.POISON_JAB ], + [ 71, MoveId.EARTH_POWER ], + ], + [SpeciesId.NIDOKING]: [ + [ EVOLVE_MOVE, MoveId.MEGAHORN ], + [ 1, MoveId.SLUDGE_WAVE ], + [ 1, MoveId.DOUBLE_KICK ], + [ 1, MoveId.HORN_ATTACK ], + [ 1, MoveId.FURY_ATTACK ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 1, MoveId.TOXIC ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.FLATTER ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.TOXIC_SPIKES ], + [ 1, MoveId.POISON_JAB ], + [ 1, MoveId.EARTH_POWER ], + ], + [SpeciesId.CLEFAIRY]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.SING ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.DISARMING_VOICE ], + [ 1, MoveId.SPOTLIGHT ], + [ 4, MoveId.STORED_POWER ], + [ 8, MoveId.ENCORE ], + [ 12, MoveId.AFTER_YOU ], + [ 16, MoveId.LIFE_DEW ], + [ 20, MoveId.METRONOME ], + [ 24, MoveId.MOONLIGHT ], + [ 28, MoveId.GRAVITY ], + [ 32, MoveId.METEOR_MASH ], + [ 36, MoveId.FOLLOW_ME ], + [ 40, MoveId.COSMIC_POWER ], + [ 44, MoveId.MOONBLAST ], + [ 48, MoveId.HEALING_WISH ], + ], + [SpeciesId.CLEFABLE]: [ + [ RELEARN_MOVE, MoveId.POUND ], + [ RELEARN_MOVE, MoveId.GROWL ], + [ RELEARN_MOVE, MoveId.SING ], + [ RELEARN_MOVE, MoveId.DEFENSE_CURL ], + [ RELEARN_MOVE, MoveId.SPLASH ], + [ RELEARN_MOVE, MoveId.SWEET_KISS ], + [ RELEARN_MOVE, MoveId.CHARM ], + [ RELEARN_MOVE, MoveId.ENCORE ], + [ RELEARN_MOVE, MoveId.MOONLIGHT ], + [ RELEARN_MOVE, MoveId.FOLLOW_ME ], + [ RELEARN_MOVE, MoveId.COSMIC_POWER ], + [ RELEARN_MOVE, MoveId.GRAVITY ], + [ RELEARN_MOVE, MoveId.HEALING_WISH ], + [ RELEARN_MOVE, MoveId.COPYCAT ], + [ RELEARN_MOVE, MoveId.AFTER_YOU ], + [ RELEARN_MOVE, MoveId.STORED_POWER ], + [ RELEARN_MOVE, MoveId.DISARMING_VOICE ], + [ 1, MoveId.METRONOME ], + [ 1, MoveId.METEOR_MASH ], + [ 1, MoveId.MOONBLAST ], + [ 1, MoveId.LIFE_DEW ], + [ 1, MoveId.SPOTLIGHT ], + ], + [SpeciesId.VULPIX]: [ + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.EMBER ], + [ 4, MoveId.DISABLE ], + [ 8, MoveId.QUICK_ATTACK ], + [ 12, MoveId.SPITE ], + [ 16, MoveId.INCINERATE ], + [ 20, MoveId.CONFUSE_RAY ], + [ 24, MoveId.WILL_O_WISP ], + [ 28, MoveId.EXTRASENSORY ], + [ 32, MoveId.FLAMETHROWER ], + [ 36, MoveId.IMPRISON ], + [ 40, MoveId.FIRE_SPIN ], + [ 44, MoveId.SAFEGUARD ], + [ 48, MoveId.INFERNO ], + [ 52, MoveId.FIRE_BLAST ], + ], + [SpeciesId.NINETALES]: [ + [ RELEARN_MOVE, MoveId.DISABLE ], + [ RELEARN_MOVE, MoveId.EMBER ], + [ RELEARN_MOVE, MoveId.FIRE_SPIN ], + [ RELEARN_MOVE, MoveId.CONFUSE_RAY ], + [ RELEARN_MOVE, MoveId.FIRE_BLAST ], + [ RELEARN_MOVE, MoveId.SPITE ], + [ RELEARN_MOVE, MoveId.SAFEGUARD ], + [ RELEARN_MOVE, MoveId.WILL_O_WISP ], + [ RELEARN_MOVE, MoveId.IMPRISON ], + [ RELEARN_MOVE, MoveId.EXTRASENSORY ], + [ RELEARN_MOVE, MoveId.NASTY_PLOT ], + [ RELEARN_MOVE, MoveId.INCINERATE ], + [ RELEARN_MOVE, MoveId.INFERNO ], + [ 1, MoveId.FLAMETHROWER ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.QUICK_ATTACK ], + ], + [SpeciesId.JIGGLYPUFF]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.SING ], + [ 1, MoveId.DISABLE ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.DISARMING_VOICE ], + [ 4, MoveId.ECHOED_VOICE ], + [ 8, MoveId.COVET ], + [ 12, MoveId.STOCKPILE ], + [ 12, MoveId.SPIT_UP ], + [ 12, MoveId.SWALLOW ], + [ 16, MoveId.ROUND ], + [ 20, MoveId.REST ], + [ 24, MoveId.BODY_SLAM ], + [ 28, MoveId.MIMIC ], + [ 32, MoveId.GYRO_BALL ], + [ 36, MoveId.HYPER_VOICE ], + [ 44, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.WIGGLYTUFF]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.BODY_SLAM ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.SING ], + [ 1, MoveId.DISABLE ], + [ 1, MoveId.MIMIC ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.REST ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.STOCKPILE ], + [ 1, MoveId.SPIT_UP ], + [ 1, MoveId.SWALLOW ], + [ 1, MoveId.HYPER_VOICE ], + [ 1, MoveId.COVET ], + [ 1, MoveId.GYRO_BALL ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.ROUND ], + [ 1, MoveId.ECHOED_VOICE ], + [ 1, MoveId.DISARMING_VOICE ], + [ 5, MoveId.PLAY_ROUGH ], + ], + [SpeciesId.ZUBAT]: [ + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.ABSORB ], + [ 5, MoveId.ASTONISH ], + [ 10, MoveId.MEAN_LOOK ], + [ 15, MoveId.POISON_FANG ], + [ 20, MoveId.QUICK_GUARD ], + [ 25, MoveId.AIR_CUTTER ], + [ 30, MoveId.BITE ], + [ 35, MoveId.HAZE ], + [ 40, MoveId.VENOSHOCK ], + [ 45, MoveId.CONFUSE_RAY ], + [ 50, MoveId.AIR_SLASH ], + [ 55, MoveId.LEECH_LIFE ], + ], + [SpeciesId.GOLBAT]: [ + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.SCREECH ], + [ 1, MoveId.MEAN_LOOK ], + [ 1, MoveId.ASTONISH ], + [ 15, MoveId.POISON_FANG ], + [ 20, MoveId.QUICK_GUARD ], + [ 27, MoveId.AIR_CUTTER ], + [ 34, MoveId.BITE ], + [ 41, MoveId.HAZE ], + [ 48, MoveId.VENOSHOCK ], + [ 55, MoveId.CONFUSE_RAY ], + [ 62, MoveId.AIR_SLASH ], + [ 69, MoveId.LEECH_LIFE ], + ], + [SpeciesId.ODDISH]: [ + [ 1, MoveId.ABSORB ], + [ 1, MoveId.GROWTH ], + [ 4, MoveId.ACID ], + [ 8, MoveId.SWEET_SCENT ], + [ 12, MoveId.MEGA_DRAIN ], + [ 14, MoveId.POISON_POWDER ], + [ 16, MoveId.STUN_SPORE ], + [ 18, MoveId.SLEEP_POWDER ], + [ 20, MoveId.GIGA_DRAIN ], + [ 24, MoveId.TOXIC ], + [ 28, MoveId.MOONBLAST ], + [ 32, MoveId.GRASSY_TERRAIN ], + [ 36, MoveId.MOONLIGHT ], + [ 40, MoveId.PETAL_DANCE ], + ], + [SpeciesId.GLOOM]: [ + [ 1, MoveId.ACID ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.SWEET_SCENT ], + [ 12, MoveId.MEGA_DRAIN ], + [ 14, MoveId.POISON_POWDER ], + [ 16, MoveId.STUN_SPORE ], + [ 18, MoveId.SLEEP_POWDER ], + [ 20, MoveId.GIGA_DRAIN ], + [ 26, MoveId.TOXIC ], + [ 32, MoveId.MOONBLAST ], + [ 38, MoveId.GRASSY_TERRAIN ], + [ 44, MoveId.MOONLIGHT ], + [ 50, MoveId.PETAL_DANCE ], + ], + [SpeciesId.VILEPLUME]: [ + [ EVOLVE_MOVE, MoveId.PETAL_BLIZZARD ], + [ 1, MoveId.ACID ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.MEGA_DRAIN ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.POISON_POWDER ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.SLEEP_POWDER ], + [ 1, MoveId.PETAL_DANCE ], + [ 1, MoveId.TOXIC ], + [ 1, MoveId.GIGA_DRAIN ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.MOONLIGHT ], + [ 1, MoveId.AROMATHERAPY ], + [ 1, MoveId.GRASSY_TERRAIN ], + [ 1, MoveId.MOONBLAST ], + ], + [SpeciesId.PARAS]: [ + [ 1, MoveId.SCRATCH ], + [ 6, MoveId.POISON_POWDER ], + [ 6, MoveId.STUN_SPORE ], + [ 11, MoveId.ABSORB ], + [ 17, MoveId.FURY_CUTTER ], + [ 22, MoveId.SPORE ], + [ 27, MoveId.SLASH ], + [ 33, MoveId.GROWTH ], + [ 38, MoveId.GIGA_DRAIN ], + [ 43, MoveId.AROMATHERAPY ], + [ 49, MoveId.RAGE_POWDER ], + [ 54, MoveId.X_SCISSOR ], + ], + [SpeciesId.PARASECT]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.POISON_POWDER ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.CROSS_POISON ], + [ 6, MoveId.POISON_POWDER ], + [ 6, MoveId.STUN_SPORE ], + [ 11, MoveId.ABSORB ], + [ 17, MoveId.FURY_CUTTER ], + [ 22, MoveId.SPORE ], + [ 29, MoveId.SLASH ], + [ 37, MoveId.GROWTH ], + [ 44, MoveId.GIGA_DRAIN ], + [ 51, MoveId.AROMATHERAPY ], + [ 59, MoveId.RAGE_POWDER ], + [ 66, MoveId.X_SCISSOR ], + ], + [SpeciesId.VENONAT]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DISABLE ], + [ 5, MoveId.SUPERSONIC ], + [ 11, MoveId.CONFUSION ], + [ 13, MoveId.POISON_POWDER ], + [ 17, MoveId.PSYBEAM ], + [ 23, MoveId.STUN_SPORE ], + [ 25, MoveId.BUG_BUZZ ], + [ 29, MoveId.SLEEP_POWDER ], + [ 35, MoveId.LEECH_LIFE ], + [ 37, MoveId.ZEN_HEADBUTT ], + [ 41, MoveId.POISON_FANG ], + [ 47, MoveId.PSYCHIC ], + ], + [SpeciesId.VENOMOTH]: [ + [ EVOLVE_MOVE, MoveId.AIR_SLASH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.DISABLE ], + [ 1, MoveId.QUIVER_DANCE ], + [ 1, MoveId.SILVER_WIND ], + [ 11, MoveId.CONFUSION ], + [ 13, MoveId.POISON_POWDER ], + [ 17, MoveId.PSYBEAM ], + [ 23, MoveId.STUN_SPORE ], + [ 25, MoveId.BUG_BUZZ ], + [ 29, MoveId.SLEEP_POWDER ], + [ 37, MoveId.LEECH_LIFE ], + [ 41, MoveId.ZEN_HEADBUTT ], + [ 47, MoveId.POISON_FANG ], + [ 55, MoveId.PSYCHIC ], + ], + [SpeciesId.DIGLETT]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.SAND_ATTACK ], + [ 4, MoveId.GROWL ], + [ 8, MoveId.ASTONISH ], + [ 12, MoveId.MUD_SLAP ], + [ 16, MoveId.BULLDOZE ], + [ 20, MoveId.SUCKER_PUNCH ], + [ 24, MoveId.SLASH ], + [ 28, MoveId.SANDSTORM ], + [ 32, MoveId.DIG ], + [ 36, MoveId.EARTH_POWER ], + [ 40, MoveId.EARTHQUAKE ], + [ 44, MoveId.FISSURE ], + ], + [SpeciesId.DUGTRIO]: [ + [ EVOLVE_MOVE, MoveId.SAND_TOMB ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.TRI_ATTACK ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.NIGHT_SLASH ], + [ 1, MoveId.ROTOTILLER ], + [ 12, MoveId.MUD_SLAP ], + [ 16, MoveId.BULLDOZE ], + [ 20, MoveId.SUCKER_PUNCH ], + [ 24, MoveId.SLASH ], + [ 30, MoveId.SANDSTORM ], + [ 36, MoveId.DIG ], + [ 42, MoveId.EARTH_POWER ], + [ 48, MoveId.EARTHQUAKE ], + [ 54, MoveId.FISSURE ], + ], + [SpeciesId.MEOWTH]: [ + [ 1, MoveId.GROWL ], + [ 1, MoveId.FAKE_OUT ], + [ 4, MoveId.FEINT ], + [ 8, MoveId.SCRATCH ], + [ 12, MoveId.PAY_DAY ], + [ 16, MoveId.BITE ], + [ 20, MoveId.TAUNT ], + [ 24, MoveId.ASSURANCE ], + [ 29, MoveId.FURY_SWIPES ], + [ 32, MoveId.SCREECH ], + [ 36, MoveId.SLASH ], + [ 40, MoveId.NASTY_PLOT ], + [ 44, MoveId.PLAY_ROUGH ], + ], + [SpeciesId.PERSIAN]: [ + [ EVOLVE_MOVE, MoveId.POWER_GEM ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.SWITCHEROO ], + [ 12, MoveId.PAY_DAY ], + [ 16, MoveId.BITE ], + [ 20, MoveId.TAUNT ], + [ 24, MoveId.ASSURANCE ], + [ 31, MoveId.FURY_SWIPES ], + [ 36, MoveId.SCREECH ], + [ 42, MoveId.SLASH ], + [ 48, MoveId.NASTY_PLOT ], + [ 54, MoveId.PLAY_ROUGH ], + ], + [SpeciesId.PSYDUCK]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_SPORT ], + [ 3, MoveId.WATER_GUN ], + [ 6, MoveId.CONFUSION ], + [ 9, MoveId.FURY_SWIPES ], + [ 12, MoveId.WATER_PULSE ], + [ 15, MoveId.DISABLE ], + [ 18, MoveId.ZEN_HEADBUTT ], + [ 21, MoveId.SCREECH ], + [ 24, MoveId.AQUA_TAIL ], + [ 27, MoveId.SOAK ], + [ 30, MoveId.PSYCH_UP ], + [ 34, MoveId.AMNESIA ], + [ 39, MoveId.WONDER_ROOM ], + ], + [SpeciesId.GOLDUCK]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.AQUA_JET ], + [ 1, MoveId.WATER_SPORT ], + [ 1, MoveId.ME_FIRST ], + [ 9, MoveId.FURY_SWIPES ], + [ 12, MoveId.WATER_PULSE ], + [ 15, MoveId.DISABLE ], + [ 18, MoveId.ZEN_HEADBUTT ], + [ 21, MoveId.SCREECH ], + [ 24, MoveId.AQUA_TAIL ], + [ 27, MoveId.SOAK ], + [ 30, MoveId.PSYCH_UP ], + [ 36, MoveId.AMNESIA ], + [ 40, MoveId.HYDRO_PUMP ], + [ 45, MoveId.WONDER_ROOM ], + ], + [SpeciesId.MANKEY]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.COVET ], + [ 5, MoveId.FURY_SWIPES ], + [ 8, MoveId.LOW_KICK ], + [ 12, MoveId.SEISMIC_TOSS ], + [ 17, MoveId.SWAGGER ], + [ 22, MoveId.CROSS_CHOP ], + [ 26, MoveId.ASSURANCE ], + [ 29, MoveId.THRASH ], + [ 33, MoveId.CLOSE_COMBAT ], + [ 36, MoveId.SCREECH ], + [ 40, MoveId.STOMPING_TANTRUM ], + [ 44, MoveId.OUTRAGE ], + [ 48, MoveId.FINAL_GAMBIT ], + ], + [SpeciesId.PRIMEAPE]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.COVET ], // Previous Stage Move + [ 1, MoveId.FLING ], + [ 5, MoveId.FURY_SWIPES ], + [ 8, MoveId.LOW_KICK ], + [ 15, MoveId.SEISMIC_TOSS ], + [ 17, MoveId.SWAGGER ], + [ 22, MoveId.CROSS_CHOP ], + [ 26, MoveId.ASSURANCE ], + [ 30, MoveId.THRASH ], + [ 35, MoveId.RAGE_FIST ], + [ 39, MoveId.CLOSE_COMBAT ], + [ 44, MoveId.SCREECH ], + [ 48, MoveId.STOMPING_TANTRUM ], + [ 53, MoveId.OUTRAGE ], + [ 57, MoveId.FINAL_GAMBIT ], + ], + [SpeciesId.GROWLITHE]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 4, MoveId.HOWL ], + [ 8, MoveId.BITE ], + [ 12, MoveId.FLAME_WHEEL ], + [ 16, MoveId.HELPING_HAND ], + [ 20, MoveId.AGILITY ], + [ 24, MoveId.FIRE_FANG ], + [ 28, MoveId.RETALIATE ], + [ 32, MoveId.CRUNCH ], + [ 36, MoveId.TAKE_DOWN ], + [ 40, MoveId.FLAMETHROWER ], + [ 44, MoveId.ROAR ], + [ 48, MoveId.PLAY_ROUGH ], + [ 52, MoveId.REVERSAL ], + [ 56, MoveId.FLARE_BLITZ ], + ], + [SpeciesId.ARCANINE]: [ + [ EVOLVE_MOVE, MoveId.EXTREME_SPEED ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.LEER ], + [ 1, MoveId.BITE ], + [ 1, MoveId.ROAR ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.AGILITY ], + [ 1, MoveId.FLAME_WHEEL ], + [ 1, MoveId.REVERSAL ], + [ 1, MoveId.CRUNCH ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.ODOR_SLEUTH ], + [ 1, MoveId.HOWL ], + [ 1, MoveId.FLARE_BLITZ ], + [ 1, MoveId.FIRE_FANG ], + [ 1, MoveId.RETALIATE ], + [ 1, MoveId.PLAY_ROUGH ], + [ 5, MoveId.FLAMETHROWER ], + ], + [SpeciesId.POLIWAG]: [ + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.HYPNOSIS ], + [ 1, MoveId.WATER_SPORT ], + [ 6, MoveId.POUND ], + [ 12, MoveId.MUD_SHOT ], + [ 18, MoveId.BUBBLE_BEAM ], + [ 24, MoveId.RAIN_DANCE ], + [ 30, MoveId.BODY_SLAM ], + [ 36, MoveId.EARTH_POWER ], + [ 42, MoveId.HYDRO_PUMP ], + [ 48, MoveId.BELLY_DRUM ], + [ 54, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.POLIWHIRL]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.HYPNOSIS ], + [ 1, MoveId.WATER_SPORT ], + [ 1, MoveId.MUD_SHOT ], + [ 18, MoveId.BUBBLE_BEAM ], + [ 24, MoveId.RAIN_DANCE ], + [ 32, MoveId.BODY_SLAM ], + [ 40, MoveId.EARTH_POWER ], + [ 48, MoveId.HYDRO_PUMP ], + [ 56, MoveId.BELLY_DRUM ], + [ 66, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.POLIWRATH]: [ + [ EVOLVE_MOVE, MoveId.DYNAMIC_PUNCH ], + [ RELEARN_MOVE, MoveId.POUND ], + [ RELEARN_MOVE, MoveId.DOUBLE_EDGE ], + [ RELEARN_MOVE, MoveId.WATER_GUN ], + [ RELEARN_MOVE, MoveId.HYDRO_PUMP ], + [ RELEARN_MOVE, MoveId.BELLY_DRUM ], + [ RELEARN_MOVE, MoveId.RAIN_DANCE ], + [ RELEARN_MOVE, MoveId.MUD_SHOT ], + [ RELEARN_MOVE, MoveId.EARTH_POWER ], + [ RELEARN_MOVE, MoveId.CIRCLE_THROW ], + [ 1, MoveId.BUBBLE_BEAM ], + [ 1, MoveId.BODY_SLAM ], + [ 1, MoveId.HYPNOSIS ], + [ 1, MoveId.WATER_SPORT ], + ], + [SpeciesId.ABRA]: [ + [ 1, MoveId.TELEPORT ], + [ 1, MoveId.CONFUSION ], // Custom + ], + [SpeciesId.KADABRA]: [ + [ EVOLVE_MOVE, MoveId.PSYBEAM ], // LGPE + [ 1, MoveId.CONFUSION ], // Previous Stage Move, Custom + [ 1, MoveId.DISABLE ], + [ 1, MoveId.TELEPORT ], + [ 1, MoveId.KINESIS ], + [ 10, MoveId.REFLECT ], + [ 15, MoveId.ALLY_SWITCH ], + [ 20, MoveId.PSYCHO_CUT ], + [ 25, MoveId.RECOVER ], + [ 30, MoveId.PSYSHOCK ], + [ 35, MoveId.PSYCHIC ], + [ 40, MoveId.ROLE_PLAY ], + [ 45, MoveId.FUTURE_SIGHT ], + [ 50, MoveId.CALM_MIND ], + ], + [SpeciesId.ALAKAZAM]: [ + [ 1, MoveId.DISABLE ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.TELEPORT ], + [ 1, MoveId.KINESIS ], + [ 5, MoveId.PSYBEAM ], + [ 10, MoveId.REFLECT ], + [ 15, MoveId.ALLY_SWITCH ], + [ 20, MoveId.PSYCHO_CUT ], + [ 25, MoveId.RECOVER ], + [ 30, MoveId.PSYSHOCK ], + [ 35, MoveId.PSYCHIC ], + [ 40, MoveId.ROLE_PLAY ], + [ 45, MoveId.FUTURE_SIGHT ], + [ 50, MoveId.CALM_MIND ], + ], + [SpeciesId.MACHOP]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.LOW_KICK ], + [ 4, MoveId.FOCUS_ENERGY ], + [ 8, MoveId.REVENGE ], + [ 12, MoveId.LOW_SWEEP ], + [ 16, MoveId.KNOCK_OFF ], + [ 20, MoveId.SCARY_FACE ], + [ 24, MoveId.VITAL_THROW ], + [ 29, MoveId.STRENGTH ], + [ 32, MoveId.DUAL_CHOP ], + [ 36, MoveId.BULK_UP ], + [ 40, MoveId.SEISMIC_TOSS ], + [ 44, MoveId.DYNAMIC_PUNCH ], + [ 48, MoveId.CROSS_CHOP ], + [ 52, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.MACHOKE]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.LOW_KICK ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.REVENGE ], + [ 1, MoveId.KARATE_CHOP ], + [ 12, MoveId.LOW_SWEEP ], + [ 16, MoveId.KNOCK_OFF ], + [ 20, MoveId.SCARY_FACE ], + [ 24, MoveId.VITAL_THROW ], + [ 31, MoveId.STRENGTH ], + [ 36, MoveId.DUAL_CHOP ], + [ 42, MoveId.BULK_UP ], + [ 48, MoveId.SEISMIC_TOSS ], + [ 54, MoveId.DYNAMIC_PUNCH ], + [ 60, MoveId.CROSS_CHOP ], + [ 66, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.MACHAMP]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.LOW_KICK ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.REVENGE ], + [ 1, MoveId.WIDE_GUARD ], + [ 1, MoveId.KARATE_CHOP ], + [ 12, MoveId.LOW_SWEEP ], + [ 16, MoveId.KNOCK_OFF ], + [ 20, MoveId.SCARY_FACE ], + [ 24, MoveId.VITAL_THROW ], + [ 31, MoveId.STRENGTH ], + [ 36, MoveId.DUAL_CHOP ], + [ 42, MoveId.BULK_UP ], + [ 48, MoveId.SEISMIC_TOSS ], + [ 54, MoveId.DYNAMIC_PUNCH ], + [ 60, MoveId.CROSS_CHOP ], + [ 66, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.BELLSPROUT]: [ + [ 1, MoveId.VINE_WHIP ], + [ 7, MoveId.GROWTH ], + [ 11, MoveId.WRAP ], + [ 13, MoveId.SLEEP_POWDER ], + [ 15, MoveId.POISON_POWDER ], + [ 17, MoveId.STUN_SPORE ], + [ 23, MoveId.ACID ], + [ 27, MoveId.KNOCK_OFF ], + [ 29, MoveId.SWEET_SCENT ], + [ 35, MoveId.GASTRO_ACID ], + [ 39, MoveId.RAZOR_LEAF ], + [ 41, MoveId.POISON_JAB ], + [ 47, MoveId.SLAM ], + [ 52, MoveId.POWER_WHIP ], + ], + [SpeciesId.WEEPINBELL]: [ + [ 1, MoveId.VINE_WHIP ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.GROWTH ], + [ 13, MoveId.SLEEP_POWDER ], + [ 15, MoveId.POISON_POWDER ], + [ 17, MoveId.STUN_SPORE ], + [ 24, MoveId.ACID ], + [ 29, MoveId.KNOCK_OFF ], + [ 32, MoveId.SWEET_SCENT ], + [ 39, MoveId.GASTRO_ACID ], + [ 44, MoveId.RAZOR_LEAF ], + [ 47, MoveId.POISON_JAB ], + [ 54, MoveId.SLAM ], + [ 58, MoveId.POWER_WHIP ], + ], + [SpeciesId.VICTREEBEL]: [ + [ EVOLVE_MOVE, MoveId.LEAF_STORM ], + [ RELEARN_MOVE, MoveId.STOCKPILE ], + [ RELEARN_MOVE, MoveId.SWALLOW ], + [ RELEARN_MOVE, MoveId.SPIT_UP ], + [ RELEARN_MOVE, MoveId.WRAP ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.GROWTH ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.ACID ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.KNOCK_OFF ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.GASTRO_ACID ], + [ RELEARN_MOVE, MoveId.POISON_JAB ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.SLAM ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.POWER_WHIP ], + [ 1, MoveId.VINE_WHIP ], + [ 1, MoveId.SLEEP_POWDER ], + [ 1, MoveId.POISON_POWDER ], // Previous Stage Move + [ 1, MoveId.STUN_SPORE ], // Previous Stage Move + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.RAZOR_LEAF ], + [ 44, MoveId.LEAF_BLADE ], + ], + [SpeciesId.TENTACOOL]: [ + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.WATER_GUN ], + [ 4, MoveId.ACID ], + [ 8, MoveId.WRAP ], + [ 12, MoveId.SUPERSONIC ], + [ 16, MoveId.WATER_PULSE ], + [ 20, MoveId.SCREECH ], + [ 24, MoveId.BUBBLE_BEAM ], + [ 28, MoveId.HEX ], + [ 32, MoveId.ACID_ARMOR ], + [ 36, MoveId.POISON_JAB ], + [ 40, MoveId.SURF ], + [ 44, MoveId.SLUDGE_WAVE ], + [ 48, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.TENTACRUEL]: [ + [ 1, MoveId.WRAP ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.ACID ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.REFLECT_TYPE ], + [ 1, MoveId.WRING_OUT ], + [ 12, MoveId.SUPERSONIC ], + [ 16, MoveId.WATER_PULSE ], + [ 20, MoveId.SCREECH ], + [ 24, MoveId.BUBBLE_BEAM ], + [ 28, MoveId.HEX ], + [ 34, MoveId.ACID_ARMOR ], + [ 40, MoveId.POISON_JAB ], + [ 46, MoveId.SURF ], + [ 52, MoveId.SLUDGE_WAVE ], + [ 58, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.GEODUDE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DEFENSE_CURL ], + [ 6, MoveId.ROCK_POLISH ], + [ 10, MoveId.ROLLOUT ], + [ 12, MoveId.BULLDOZE ], + [ 16, MoveId.ROCK_THROW ], + [ 18, MoveId.SMACK_DOWN ], + [ 24, MoveId.SELF_DESTRUCT ], + [ 28, MoveId.STEALTH_ROCK ], + [ 30, MoveId.ROCK_BLAST ], + [ 34, MoveId.EARTHQUAKE ], + [ 36, MoveId.EXPLOSION ], + [ 40, MoveId.DOUBLE_EDGE ], + [ 42, MoveId.STONE_EDGE ], + ], + [SpeciesId.GRAVELER]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.ROCK_POLISH ], + [ 10, MoveId.ROLLOUT ], + [ 12, MoveId.BULLDOZE ], + [ 16, MoveId.ROCK_THROW ], + [ 18, MoveId.SMACK_DOWN ], + [ 24, MoveId.SELF_DESTRUCT ], + [ 30, MoveId.STEALTH_ROCK ], + [ 34, MoveId.ROCK_BLAST ], + [ 40, MoveId.EARTHQUAKE ], + [ 44, MoveId.EXPLOSION ], + [ 50, MoveId.DOUBLE_EDGE ], + [ 54, MoveId.STONE_EDGE ], + ], + [SpeciesId.GOLEM]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.ROCK_POLISH ], + [ 1, MoveId.ROLLOUT ], // Previous Stage Move + [ 1, MoveId.HEAVY_SLAM ], + [ 16, MoveId.ROCK_THROW ], + [ 18, MoveId.SMACK_DOWN ], + [ 22, MoveId.BULLDOZE ], + [ 24, MoveId.SELF_DESTRUCT ], + [ 30, MoveId.STEALTH_ROCK ], + [ 34, MoveId.ROCK_BLAST ], + [ 40, MoveId.EARTHQUAKE ], + [ 44, MoveId.EXPLOSION ], + [ 50, MoveId.DOUBLE_EDGE ], + [ 54, MoveId.STONE_EDGE ], + ], + [SpeciesId.PONYTA]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 5, MoveId.TAIL_WHIP ], + [ 10, MoveId.EMBER ], + [ 15, MoveId.FLAME_CHARGE ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.FLAME_WHEEL ], + [ 30, MoveId.STOMP ], + [ 35, MoveId.FIRE_SPIN ], + [ 41, MoveId.TAKE_DOWN ], + [ 45, MoveId.INFERNO ], + [ 50, MoveId.FIRE_BLAST ], + [ 55, MoveId.FLARE_BLITZ ], + ], + [SpeciesId.RAPIDASH]: [ + [ EVOLVE_MOVE, MoveId.SMART_STRIKE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.MEGAHORN ], + [ 1, MoveId.POISON_JAB ], + [ 15, MoveId.FLAME_CHARGE ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.FLAME_WHEEL ], + [ 30, MoveId.STOMP ], + [ 35, MoveId.FIRE_SPIN ], + [ 43, MoveId.TAKE_DOWN ], + [ 49, MoveId.INFERNO ], + [ 56, MoveId.FIRE_BLAST ], + [ 63, MoveId.FLARE_BLITZ ], + ], + [SpeciesId.SLOWPOKE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.CURSE ], + [ 3, MoveId.GROWL ], + [ 6, MoveId.WATER_GUN ], + [ 9, MoveId.YAWN ], + [ 12, MoveId.CONFUSION ], + [ 15, MoveId.DISABLE ], + [ 18, MoveId.WATER_PULSE ], + [ 21, MoveId.HEADBUTT ], + [ 24, MoveId.ZEN_HEADBUTT ], + [ 27, MoveId.AMNESIA ], + [ 30, MoveId.SURF ], + [ 33, MoveId.SLACK_OFF ], + [ 36, MoveId.PSYCHIC ], + [ 39, MoveId.PSYCH_UP ], + [ 42, MoveId.RAIN_DANCE ], + [ 45, MoveId.HEAL_PULSE ], + ], + [SpeciesId.SLOWBRO]: [ + [ RELEARN_MOVE, MoveId.FUTURE_SIGHT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.CURSE ], + [ 9, MoveId.YAWN ], + [ 12, MoveId.CONFUSION ], + [ 15, MoveId.DISABLE ], + [ 18, MoveId.WATER_PULSE ], + [ 21, MoveId.HEADBUTT ], + [ 24, MoveId.ZEN_HEADBUTT ], + [ 27, MoveId.AMNESIA ], + [ 30, MoveId.SURF ], + [ 33, MoveId.SLACK_OFF ], + [ 36, MoveId.PSYCHIC ], + [ 41, MoveId.PSYCH_UP ], + [ 46, MoveId.RAIN_DANCE ], + [ 51, MoveId.HEAL_PULSE ], + ], + [SpeciesId.MAGNEMITE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 4, MoveId.SUPERSONIC ], + [ 8, MoveId.THUNDER_WAVE ], + [ 12, MoveId.ELECTRO_BALL ], + [ 16, MoveId.GYRO_BALL ], + [ 20, MoveId.SPARK ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.MAGNET_RISE ], + [ 32, MoveId.FLASH_CANNON ], + [ 36, MoveId.DISCHARGE ], + [ 40, MoveId.METAL_SOUND ], + [ 44, MoveId.LIGHT_SCREEN ], + [ 48, MoveId.LOCK_ON ], + [ 52, MoveId.ZAP_CANNON ], + ], + [SpeciesId.MAGNETON]: [ + [ EVOLVE_MOVE, MoveId.TRI_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.ELECTRIC_TERRAIN ], + [ 12, MoveId.ELECTRO_BALL ], + [ 16, MoveId.GYRO_BALL ], + [ 20, MoveId.SPARK ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.MAGNET_RISE ], + [ 34, MoveId.FLASH_CANNON ], + [ 40, MoveId.DISCHARGE ], + [ 46, MoveId.METAL_SOUND ], + [ 52, MoveId.LIGHT_SCREEN ], + [ 58, MoveId.LOCK_ON ], + [ 64, MoveId.ZAP_CANNON ], + ], + [SpeciesId.FARFETCHD]: [ + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.PECK ], + [ 5, MoveId.LEER ], + [ 10, MoveId.FURY_CUTTER ], + [ 15, MoveId.CUT ], + [ 20, MoveId.AERIAL_ACE ], + [ 25, MoveId.AIR_CUTTER ], + [ 30, MoveId.KNOCK_OFF ], + [ 35, MoveId.FALSE_SWIPE ], + [ 40, MoveId.SLASH ], + [ 45, MoveId.SWORDS_DANCE ], + [ 50, MoveId.AIR_SLASH ], + [ 55, MoveId.LEAF_BLADE ], + [ 60, MoveId.AGILITY ], + [ 65, MoveId.BRAVE_BIRD ], + ], + [SpeciesId.DODUO]: [ + [ 1, MoveId.GROWL ], + [ 1, MoveId.PECK ], + [ 5, MoveId.QUICK_ATTACK ], + [ 9, MoveId.FURY_ATTACK ], + [ 14, MoveId.PLUCK ], + [ 19, MoveId.DOUBLE_HIT ], + [ 23, MoveId.AGILITY ], + [ 27, MoveId.UPROAR ], + [ 30, MoveId.ACUPRESSURE ], + [ 33, MoveId.SWORDS_DANCE ], + [ 36, MoveId.DRILL_PECK ], + [ 39, MoveId.ENDEAVOR ], + [ 43, MoveId.THRASH ], + ], + [SpeciesId.DODRIO]: [ + [ EVOLVE_MOVE, MoveId.TRI_ATTACK ], + [ 1, MoveId.TRI_ATTACK ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.PECK ], + [ 5, MoveId.QUICK_ATTACK ], + [ 12, MoveId.FURY_ATTACK ], + [ 15, MoveId.PLUCK ], + [ 19, MoveId.DOUBLE_HIT ], + [ 23, MoveId.AGILITY ], + [ 26, MoveId.UPROAR ], + [ 30, MoveId.ACUPRESSURE ], + [ 34, MoveId.SWORDS_DANCE ], + [ 38, MoveId.DRILL_PECK ], + [ 43, MoveId.ENDEAVOR ], + [ 50, MoveId.THRASH ], + ], + [SpeciesId.SEEL]: [ + [ 1, MoveId.HEADBUTT ], + [ 3, MoveId.GROWL ], + [ 7, MoveId.CHARM ], + [ 11, MoveId.ICY_WIND ], + [ 13, MoveId.ENCORE ], + [ 17, MoveId.ICE_SHARD ], + [ 21, MoveId.REST ], + [ 23, MoveId.AQUA_RING ], + [ 27, MoveId.AURORA_BEAM ], + [ 31, MoveId.AQUA_JET ], + [ 33, MoveId.BRINE ], + [ 37, MoveId.TAKE_DOWN ], + [ 41, MoveId.DIVE ], + [ 43, MoveId.AQUA_TAIL ], + [ 47, MoveId.ICE_BEAM ], + [ 51, MoveId.SAFEGUARD ], + [ 53, MoveId.SNOWSCAPE ], + ], + [SpeciesId.DEWGONG]: [ + [ EVOLVE_MOVE, MoveId.SHEER_COLD ], + [ 1, MoveId.HEADBUTT ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.ICY_WIND ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.SIGNAL_BEAM ], + [ 13, MoveId.ENCORE ], + [ 17, MoveId.ICE_SHARD ], + [ 21, MoveId.REST ], + [ 23, MoveId.AQUA_RING ], + [ 27, MoveId.AURORA_BEAM ], + [ 31, MoveId.AQUA_JET ], + [ 33, MoveId.BRINE ], + [ 39, MoveId.TAKE_DOWN ], + [ 45, MoveId.DIVE ], + [ 49, MoveId.AQUA_TAIL ], + [ 55, MoveId.ICE_BEAM ], + [ 61, MoveId.SAFEGUARD ], + [ 65, MoveId.SNOWSCAPE ], + ], + [SpeciesId.GRIMER]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.POISON_GAS ], + [ 4, MoveId.HARDEN ], + [ 7, MoveId.MUD_SLAP ], + [ 12, MoveId.DISABLE ], + [ 15, MoveId.SLUDGE ], + [ 18, MoveId.MUD_SHOT ], + [ 21, MoveId.MINIMIZE ], + [ 26, MoveId.TOXIC ], + [ 29, MoveId.SLUDGE_BOMB ], + [ 32, MoveId.SLUDGE_WAVE ], + [ 37, MoveId.SCREECH ], + [ 40, MoveId.GUNK_SHOT ], + [ 43, MoveId.ACID_ARMOR ], + [ 46, MoveId.BELCH ], + [ 48, MoveId.MEMENTO ], + ], + [SpeciesId.MUK]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.MUD_SLAP ], + [ 12, MoveId.DISABLE ], + [ 15, MoveId.SLUDGE ], + [ 18, MoveId.MUD_SHOT ], + [ 21, MoveId.MINIMIZE ], + [ 26, MoveId.TOXIC ], + [ 29, MoveId.SLUDGE_BOMB ], + [ 32, MoveId.SLUDGE_WAVE ], + [ 37, MoveId.SCREECH ], + [ 40, MoveId.GUNK_SHOT ], + [ 46, MoveId.ACID_ARMOR ], + [ 52, MoveId.BELCH ], + [ 57, MoveId.MEMENTO ], + ], + [SpeciesId.SHELLDER]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WATER_GUN ], + [ 4, MoveId.WITHDRAW ], + [ 8, MoveId.ICE_SHARD ], + [ 12, MoveId.LEER ], + [ 16, MoveId.WHIRLPOOL ], + [ 20, MoveId.SUPERSONIC ], + [ 24, MoveId.AURORA_BEAM ], + [ 28, MoveId.PROTECT ], + [ 32, MoveId.RAZOR_SHELL ], + [ 36, MoveId.IRON_DEFENSE ], + [ 40, MoveId.ICE_BEAM ], + [ 44, MoveId.SHELL_SMASH ], + [ 48, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.CLOYSTER]: [ + [ EVOLVE_MOVE, MoveId.ICICLE_SPEAR ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.HYDRO_PUMP ], + [ 1, MoveId.ICE_BEAM ], + [ 1, MoveId.AURORA_BEAM ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.SPIKES ], + [ 1, MoveId.WHIRLPOOL ], + [ 1, MoveId.IRON_DEFENSE ], + [ 1, MoveId.TOXIC_SPIKES ], + [ 1, MoveId.ICE_SHARD ], + [ 1, MoveId.SHELL_SMASH ], + [ 1, MoveId.ICICLE_CRASH ], + [ 5, MoveId.RAZOR_SHELL ], + ], + [SpeciesId.GASTLY]: [ + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.LICK ], + [ 1, MoveId.ACID ], // Custom + [ 4, MoveId.HYPNOSIS ], + [ 8, MoveId.MEAN_LOOK ], + [ 12, MoveId.PAYBACK ], + [ 16, MoveId.SPITE ], + [ 20, MoveId.CURSE ], + [ 24, MoveId.HEX ], + [ 28, MoveId.NIGHT_SHADE ], + [ 32, MoveId.SUCKER_PUNCH ], + [ 36, MoveId.DARK_PULSE ], + [ 40, MoveId.SHADOW_BALL ], + [ 44, MoveId.DESTINY_BOND ], + [ 48, MoveId.DREAM_EATER ], + ], + [SpeciesId.HAUNTER]: [ + [ EVOLVE_MOVE, MoveId.SHADOW_PUNCH ], + [ 1, MoveId.HYPNOSIS ], + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.LICK ], + [ 1, MoveId.ACID ], // Previous Stage Move, Custom + [ 1, MoveId.MEAN_LOOK ], + [ 12, MoveId.PAYBACK ], + [ 16, MoveId.SPITE ], + [ 20, MoveId.CURSE ], + [ 24, MoveId.HEX ], + [ 30, MoveId.NIGHT_SHADE ], + [ 36, MoveId.SUCKER_PUNCH ], + [ 42, MoveId.DARK_PULSE ], + [ 48, MoveId.SHADOW_BALL ], + [ 54, MoveId.DESTINY_BOND ], + [ 60, MoveId.DREAM_EATER ], + ], + [SpeciesId.GENGAR]: [ + [ 1, MoveId.HYPNOSIS ], + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.LICK ], + [ 1, MoveId.ACID ], // Previous Stage Move, Custom + [ 1, MoveId.PERISH_SONG ], + [ 1, MoveId.MEAN_LOOK ], + [ 1, MoveId.SHADOW_PUNCH ], + [ 1, MoveId.REFLECT_TYPE ], + [ 12, MoveId.PAYBACK ], + [ 16, MoveId.SPITE ], + [ 20, MoveId.CURSE ], + [ 24, MoveId.HEX ], + [ 30, MoveId.NIGHT_SHADE ], + [ 36, MoveId.SUCKER_PUNCH ], + [ 42, MoveId.DARK_PULSE ], + [ 48, MoveId.SHADOW_BALL ], + [ 54, MoveId.DESTINY_BOND ], + [ 60, MoveId.DREAM_EATER ], + ], + [SpeciesId.ONIX]: [ + [ 1, MoveId.BIND ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.MUD_SPORT ], + [ 4, MoveId.SMACK_DOWN ], + [ 8, MoveId.ROCK_POLISH ], + [ 12, MoveId.DRAGON_BREATH ], + [ 16, MoveId.CURSE ], + [ 20, MoveId.ROCK_SLIDE ], + [ 22, MoveId.GYRO_BALL ], // Custom, from USUM + [ 24, MoveId.SCREECH ], + [ 28, MoveId.SAND_TOMB ], + [ 32, MoveId.STEALTH_ROCK ], + [ 36, MoveId.SLAM ], + [ 40, MoveId.SANDSTORM ], + [ 44, MoveId.DIG ], + [ 48, MoveId.IRON_TAIL ], + [ 52, MoveId.STONE_EDGE ], + [ 56, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.DROWZEE]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.HYPNOSIS ], + [ 5, MoveId.DISABLE ], + [ 9, MoveId.CONFUSION ], + [ 13, MoveId.HEADBUTT ], + [ 17, MoveId.POISON_GAS ], + [ 21, MoveId.PSYBEAM ], + [ 25, MoveId.PSYCH_UP ], + [ 29, MoveId.ZEN_HEADBUTT ], + [ 33, MoveId.SWAGGER ], + [ 37, MoveId.PSYCHIC ], + [ 41, MoveId.NASTY_PLOT ], + [ 45, MoveId.PSYSHOCK ], + [ 49, MoveId.FUTURE_SIGHT ], + ], + [SpeciesId.HYPNO]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.DISABLE ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.HYPNOSIS ], + [ 1, MoveId.SWITCHEROO ], + [ 1, MoveId.NIGHTMARE ], + [ 13, MoveId.HEADBUTT ], + [ 17, MoveId.POISON_GAS ], + [ 21, MoveId.PSYBEAM ], + [ 25, MoveId.PSYCH_UP ], + [ 32, MoveId.ZEN_HEADBUTT ], + [ 37, MoveId.SWAGGER ], + [ 42, MoveId.PSYCHIC ], + [ 47, MoveId.NASTY_PLOT ], + [ 51, MoveId.PSYSHOCK ], + [ 56, MoveId.FUTURE_SIGHT ], + ], + [SpeciesId.KRABBY]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.MUD_SPORT ], + [ 4, MoveId.HARDEN ], + [ 8, MoveId.METAL_CLAW ], + [ 12, MoveId.MUD_SHOT ], + [ 16, MoveId.PROTECT ], + [ 20, MoveId.BUBBLE_BEAM ], + [ 24, MoveId.STOMP ], + [ 29, MoveId.FLAIL ], + [ 32, MoveId.RAZOR_SHELL ], + [ 36, MoveId.SLAM ], + [ 40, MoveId.SWORDS_DANCE ], + [ 44, MoveId.CRABHAMMER ], + [ 48, MoveId.GUILLOTINE ], + ], + [SpeciesId.KINGLER]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.HAMMER_ARM ], + [ 1, MoveId.WIDE_GUARD ], + [ 1, MoveId.MUD_SPORT ], + [ 12, MoveId.MUD_SHOT ], + [ 16, MoveId.PROTECT ], + [ 20, MoveId.BUBBLE_BEAM ], + [ 24, MoveId.STOMP ], + [ 31, MoveId.FLAIL ], + [ 36, MoveId.RAZOR_SHELL ], + [ 42, MoveId.SLAM ], + [ 48, MoveId.SWORDS_DANCE ], + [ 54, MoveId.CRABHAMMER ], + [ 60, MoveId.GUILLOTINE ], + ], + [SpeciesId.VOLTORB]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.CHARGE ], + [ 4, MoveId.THUNDER_SHOCK ], + [ 6, MoveId.EERIE_IMPULSE ], + [ 9, MoveId.SPARK ], + [ 11, MoveId.ROLLOUT ], + [ 13, MoveId.SCREECH ], + [ 16, MoveId.CHARGE_BEAM ], + [ 20, MoveId.SWIFT ], + [ 22, MoveId.ELECTRO_BALL ], + [ 26, MoveId.SELF_DESTRUCT ], + [ 29, MoveId.LIGHT_SCREEN ], + [ 34, MoveId.MAGNET_RISE ], + [ 37, MoveId.DISCHARGE ], + [ 41, MoveId.EXPLOSION ], + [ 46, MoveId.GYRO_BALL ], + [ 50, MoveId.MIRROR_COAT ], + ], + [SpeciesId.ELECTRODE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.CHARGE ], + [ 1, MoveId.EERIE_IMPULSE ], + [ 1, MoveId.MAGNETIC_FLUX ], + [ 9, MoveId.SPARK ], + [ 11, MoveId.ROLLOUT ], + [ 13, MoveId.SCREECH ], + [ 16, MoveId.CHARGE_BEAM ], + [ 20, MoveId.SWIFT ], + [ 22, MoveId.ELECTRO_BALL ], + [ 26, MoveId.SELF_DESTRUCT ], + [ 29, MoveId.LIGHT_SCREEN ], + [ 36, MoveId.MAGNET_RISE ], + [ 41, MoveId.DISCHARGE ], + [ 47, MoveId.EXPLOSION ], + [ 54, MoveId.GYRO_BALL ], + [ 58, MoveId.MIRROR_COAT ], + ], + [SpeciesId.EXEGGCUTE]: [ + [ 1, MoveId.ABSORB ], + [ 1, MoveId.HYPNOSIS ], + [ 1, MoveId.BARRAGE ], + [ 5, MoveId.REFLECT ], + [ 10, MoveId.LEECH_SEED ], + [ 15, MoveId.MEGA_DRAIN ], + [ 20, MoveId.CONFUSION ], + [ 25, MoveId.SYNTHESIS ], + [ 30, MoveId.BULLET_SEED ], + [ 35, MoveId.GIGA_DRAIN ], + [ 40, MoveId.EXTRASENSORY ], + [ 45, MoveId.UPROAR ], + [ 50, MoveId.WORRY_SEED ], + [ 55, MoveId.SOLAR_BEAM ], + ], + [SpeciesId.EXEGGUTOR]: [ + [ EVOLVE_MOVE, MoveId.STOMP ], + [ RELEARN_MOVE, MoveId.GROWTH ], + [ 1, MoveId.BARRAGE ], + [ 1, MoveId.SEED_BOMB ], + [ 1, MoveId.PSYSHOCK ], + [ 1, MoveId.WOOD_HAMMER ], + [ 1, MoveId.LEAF_STORM ], + [ 1, MoveId.MEGA_DRAIN ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.SYNTHESIS ], + [ 1, MoveId.BULLET_SEED ], + [ 1, MoveId.GIGA_DRAIN ], + [ 1, MoveId.EXTRASENSORY ], + [ 1, MoveId.UPROAR ], + [ 1, MoveId.WORRY_SEED ], + [ 1, MoveId.SOLAR_BEAM ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.HYPNOSIS ], + [ 1, MoveId.REFLECT ], + [ 1, MoveId.LEECH_SEED ], + ], + [SpeciesId.CUBONE]: [ + [ 1, MoveId.GROWL ], + [ 1, MoveId.MUD_SLAP ], + [ 4, MoveId.TAIL_WHIP ], + [ 8, MoveId.FALSE_SWIPE ], + [ 12, MoveId.HEADBUTT ], + [ 16, MoveId.RETALIATE ], + [ 20, MoveId.FLING ], + [ 24, MoveId.STOMPING_TANTRUM ], + [ 29, MoveId.BONE_RUSH ], + [ 32, MoveId.FOCUS_ENERGY ], + [ 36, MoveId.ENDEAVOR ], + [ 40, MoveId.BONEMERANG ], + [ 44, MoveId.THRASH ], + [ 48, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.MAROWAK]: [ + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.FALSE_SWIPE ], + [ 1, MoveId.BONE_CLUB ], + [ 12, MoveId.HEADBUTT ], + [ 16, MoveId.RETALIATE ], + [ 20, MoveId.FLING ], + [ 24, MoveId.STOMPING_TANTRUM ], + [ 31, MoveId.BONE_RUSH ], + [ 36, MoveId.FOCUS_ENERGY ], + [ 42, MoveId.ENDEAVOR ], + [ 48, MoveId.BONEMERANG ], + [ 54, MoveId.THRASH ], + [ 60, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.HITMONLEE]: [ + [ EVOLVE_MOVE, MoveId.BRICK_BREAK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.LOW_SWEEP ], + [ 1, MoveId.JUMP_KICK ], + [ 1, MoveId.ROLLING_KICK ], + [ 1, MoveId.MACH_PUNCH ], // Previous Stage Move, Custom + [ 1, MoveId.RAPID_SPIN ], // Previous Stage Move, Custom + [ 4, MoveId.DOUBLE_KICK ], + [ 8, MoveId.LOW_KICK ], + [ 12, MoveId.ENDURE ], + [ 16, MoveId.SUCKER_PUNCH ], + [ 21, MoveId.WIDE_GUARD ], + [ 24, MoveId.BLAZE_KICK ], + [ 28, MoveId.FEINT ], + [ 32, MoveId.MEGA_KICK ], + [ 36, MoveId.CLOSE_COMBAT ], + [ 40, MoveId.REVERSAL ], + [ 44, MoveId.HIGH_JUMP_KICK ], + [ 50, MoveId.AXE_KICK ], + ], + [SpeciesId.HITMONCHAN]: [ + [ EVOLVE_MOVE, MoveId.DRAIN_PUNCH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.PURSUIT ], + [ 1, MoveId.COMET_PUNCH ], + [ 1, MoveId.LOW_SWEEP ], // Previous Stage Move, Custom + [ 1, MoveId.RAPID_SPIN ], // Previous Stage Move, Custom + [ 4, MoveId.MACH_PUNCH ], + [ 8, MoveId.VACUUM_WAVE ], + [ 12, MoveId.DETECT ], + [ 16, MoveId.BULLET_PUNCH ], + [ 21, MoveId.QUICK_GUARD ], + [ 24, MoveId.THUNDER_PUNCH ], + [ 24, MoveId.ICE_PUNCH ], + [ 24, MoveId.FIRE_PUNCH ], + [ 28, MoveId.AGILITY ], + [ 32, MoveId.MEGA_PUNCH ], + [ 36, MoveId.CLOSE_COMBAT ], + [ 40, MoveId.COUNTER ], + [ 44, MoveId.FOCUS_PUNCH ], + ], + [SpeciesId.LICKITUNG]: [ + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.LICK ], + [ 1, MoveId.TACKLE ], // Custom + [ 6, MoveId.REST ], + [ 12, MoveId.SUPERSONIC ], + [ 18, MoveId.WRAP ], + [ 24, MoveId.DISABLE ], + [ 30, MoveId.STOMP ], + [ 32, MoveId.ROLLOUT ], + [ 36, MoveId.KNOCK_OFF ], + [ 42, MoveId.SCREECH ], + [ 48, MoveId.SLAM ], + [ 54, MoveId.POWER_WHIP ], + [ 60, MoveId.BELLY_DRUM ], + ], + [SpeciesId.KOFFING]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.POISON_GAS ], + [ 4, MoveId.SMOG ], + [ 8, MoveId.SMOKESCREEN ], + [ 12, MoveId.CLEAR_SMOG ], + [ 16, MoveId.ASSURANCE ], + [ 20, MoveId.SLUDGE ], + [ 24, MoveId.HAZE ], + [ 28, MoveId.SELF_DESTRUCT ], + [ 32, MoveId.SLUDGE_BOMB ], + [ 36, MoveId.TOXIC ], + [ 40, MoveId.BELCH ], + [ 44, MoveId.EXPLOSION ], + [ 48, MoveId.MEMENTO ], + [ 52, MoveId.DESTINY_BOND ], + ], + [SpeciesId.WEEZING]: [ + [ EVOLVE_MOVE, MoveId.DOUBLE_HIT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.SMOG ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.HEAT_WAVE ], + [ 12, MoveId.CLEAR_SMOG ], + [ 16, MoveId.ASSURANCE ], + [ 20, MoveId.SLUDGE ], + [ 24, MoveId.HAZE ], + [ 28, MoveId.SELF_DESTRUCT ], + [ 32, MoveId.SLUDGE_BOMB ], + [ 38, MoveId.TOXIC ], + [ 44, MoveId.BELCH ], + [ 50, MoveId.EXPLOSION ], + [ 56, MoveId.MEMENTO ], + [ 62, MoveId.DESTINY_BOND ], + ], + [SpeciesId.RHYHORN]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 5, MoveId.SMACK_DOWN ], + [ 10, MoveId.BULLDOZE ], + [ 15, MoveId.HORN_ATTACK ], + [ 20, MoveId.SCARY_FACE ], + [ 25, MoveId.STOMP ], + [ 30, MoveId.ROCK_BLAST ], + [ 35, MoveId.DRILL_RUN ], + [ 40, MoveId.TAKE_DOWN ], + [ 45, MoveId.EARTHQUAKE ], + [ 50, MoveId.STONE_EDGE ], + [ 55, MoveId.MEGAHORN ], + [ 60, MoveId.HORN_DRILL ], + ], + [SpeciesId.RHYDON]: [ + [ EVOLVE_MOVE, MoveId.HAMMER_ARM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.SMACK_DOWN ], + [ 1, MoveId.BULLDOZE ], + [ 15, MoveId.HORN_ATTACK ], + [ 20, MoveId.SCARY_FACE ], + [ 25, MoveId.STOMP ], + [ 30, MoveId.ROCK_BLAST ], + [ 35, MoveId.DRILL_RUN ], + [ 40, MoveId.TAKE_DOWN ], + [ 47, MoveId.EARTHQUAKE ], + [ 54, MoveId.STONE_EDGE ], + [ 61, MoveId.MEGAHORN ], + [ 68, MoveId.HORN_DRILL ], + ], + [SpeciesId.CHANSEY]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.COVET ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.DISARMING_VOICE ], + [ 4, MoveId.TAIL_WHIP ], + [ 8, MoveId.ECHOED_VOICE ], + [ 12, MoveId.LIFE_DEW ], + [ 16, MoveId.SING ], + [ 20, MoveId.FLING ], + [ 24, MoveId.TAKE_DOWN ], + [ 28, MoveId.HEAL_PULSE ], + [ 32, MoveId.HELPING_HAND ], + [ 36, MoveId.LIGHT_SCREEN ], + [ 40, MoveId.DOUBLE_EDGE ], + [ 44, MoveId.SOFT_BOILED ], + [ 48, MoveId.LAST_RESORT ], + [ 52, MoveId.HEALING_WISH ], + ], + [SpeciesId.TANGELA]: [ + [ 1, MoveId.BIND ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.CONSTRICT ], + [ 4, MoveId.STUN_SPORE ], + [ 8, MoveId.GROWTH ], + [ 12, MoveId.MEGA_DRAIN ], + [ 16, MoveId.VINE_WHIP ], + [ 20, MoveId.POISON_POWDER ], + [ 24, MoveId.DOUBLE_HIT ], + [ 28, MoveId.KNOCK_OFF ], + [ 32, MoveId.GIGA_DRAIN ], + [ 34, MoveId.ANCIENT_POWER ], + [ 36, MoveId.SLEEP_POWDER ], + [ 40, MoveId.SLAM ], + [ 44, MoveId.TICKLE ], + [ 48, MoveId.POWER_WHIP ], + [ 52, MoveId.INGRAIN ], + [ 56, MoveId.GRASSY_TERRAIN ], + ], + [SpeciesId.KANGASKHAN]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.COMET_PUNCH ], + [ 4, MoveId.GROWL ], + [ 8, MoveId.FAKE_OUT ], + [ 12, MoveId.BITE ], + [ 16, MoveId.STOMP ], + [ 20, MoveId.FOCUS_ENERGY ], + [ 24, MoveId.HEADBUTT ], + [ 28, MoveId.SUCKER_PUNCH ], + [ 32, MoveId.DOUBLE_HIT ], + [ 36, MoveId.CRUNCH ], + [ 40, MoveId.ENDURE ], + [ 44, MoveId.REVERSAL ], + [ 48, MoveId.OUTRAGE ], + [ 52, MoveId.LAST_RESORT ], + ], + [SpeciesId.HORSEA]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.WATER_GUN ], + [ 5, MoveId.SMOKESCREEN ], + [ 10, MoveId.TWISTER ], + [ 15, MoveId.FOCUS_ENERGY ], + [ 20, MoveId.DRAGON_BREATH ], + [ 25, MoveId.BUBBLE_BEAM ], + [ 30, MoveId.AGILITY ], + [ 35, MoveId.LASER_FOCUS ], + [ 40, MoveId.DRAGON_PULSE ], + [ 45, MoveId.HYDRO_PUMP ], + [ 50, MoveId.DRAGON_DANCE ], + [ 55, MoveId.RAIN_DANCE ], + ], + [SpeciesId.SEADRA]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.TWISTER ], + [ 15, MoveId.FOCUS_ENERGY ], + [ 20, MoveId.DRAGON_BREATH ], + [ 25, MoveId.BUBBLE_BEAM ], + [ 30, MoveId.AGILITY ], + [ 37, MoveId.LASER_FOCUS ], + [ 44, MoveId.DRAGON_PULSE ], + [ 51, MoveId.HYDRO_PUMP ], + [ 58, MoveId.DRAGON_DANCE ], + [ 65, MoveId.RAIN_DANCE ], + ], + [SpeciesId.GOLDEEN]: [ + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.PECK ], + [ 1, MoveId.WATER_SPORT ], + [ 5, MoveId.SUPERSONIC ], + [ 10, MoveId.WATER_PULSE ], + [ 15, MoveId.HORN_ATTACK ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.AQUA_RING ], + [ 30, MoveId.FLAIL ], + [ 35, MoveId.WATERFALL ], + [ 40, MoveId.SOAK ], + [ 45, MoveId.MEGAHORN ], + [ 50, MoveId.HORN_DRILL ], + ], + [SpeciesId.SEAKING]: [ + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.WATER_SPORT ], + [ 1, MoveId.PECK ], + [ 1, MoveId.WATER_PULSE ], + [ 15, MoveId.HORN_ATTACK ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.AQUA_RING ], + [ 30, MoveId.FLAIL ], + [ 37, MoveId.WATERFALL ], + [ 44, MoveId.SOAK ], + [ 51, MoveId.MEGAHORN ], + [ 58, MoveId.HORN_DRILL ], + ], + [SpeciesId.STARYU]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 4, MoveId.WATER_GUN ], + [ 8, MoveId.CONFUSE_RAY ], + [ 12, MoveId.RAPID_SPIN ], + [ 16, MoveId.MINIMIZE ], + [ 20, MoveId.SWIFT ], + [ 24, MoveId.PSYBEAM ], + [ 28, MoveId.BRINE ], + [ 32, MoveId.LIGHT_SCREEN ], + [ 36, MoveId.POWER_GEM ], + [ 40, MoveId.PSYCHIC ], + [ 44, MoveId.SURF ], + [ 48, MoveId.RECOVER ], + [ 52, MoveId.COSMIC_POWER ], + [ 56, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.STARMIE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.HYDRO_PUMP ], + [ 1, MoveId.SURF ], + [ 1, MoveId.PSYBEAM ], + [ 1, MoveId.PSYCHIC ], + [ 1, MoveId.RECOVER ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.MINIMIZE ], + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.LIGHT_SCREEN ], + [ 1, MoveId.SWIFT ], + [ 1, MoveId.SPOTLIGHT ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.COSMIC_POWER ], + [ 1, MoveId.BRINE ], + [ 1, MoveId.POWER_GEM ], + ], + [SpeciesId.MR_MIME]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.TICKLE ], // Previous Stage Move + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.ENCORE ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.POWER_SWAP ], + [ 1, MoveId.GUARD_SWAP ], + [ 1, MoveId.WIDE_GUARD ], + [ 1, MoveId.QUICK_GUARD ], + [ 1, MoveId.BARRIER ], + [ 12, MoveId.CONFUSION ], + [ 16, MoveId.ROLE_PLAY ], + [ 20, MoveId.PROTECT ], + [ 24, MoveId.RECYCLE ], + [ 28, MoveId.PSYBEAM ], + [ 32, MoveId.MIMIC ], + [ 36, MoveId.LIGHT_SCREEN ], + [ 36, MoveId.REFLECT ], + [ 36, MoveId.SAFEGUARD ], + [ 40, MoveId.SUCKER_PUNCH ], + [ 44, MoveId.DAZZLING_GLEAM ], + [ 48, MoveId.PSYCHIC ], + [ 52, MoveId.TEETER_DANCE ], + ], + [SpeciesId.SCYTHER]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 4, MoveId.FURY_CUTTER ], + [ 8, MoveId.FALSE_SWIPE ], + [ 12, MoveId.WING_ATTACK ], + [ 16, MoveId.DOUBLE_TEAM ], + [ 20, MoveId.DOUBLE_HIT ], + [ 24, MoveId.SLASH ], + [ 28, MoveId.FOCUS_ENERGY ], + [ 30, MoveId.STEEL_WING ], // Custom + [ 32, MoveId.AGILITY ], + [ 36, MoveId.AIR_SLASH ], + [ 40, MoveId.X_SCISSOR ], + [ 44, MoveId.SWORDS_DANCE ], + ], + [SpeciesId.JYNX]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.LICK ], + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.COPYCAT ], + [ 12, MoveId.CONFUSION ], + [ 16, MoveId.COVET ], + [ 20, MoveId.SING ], + [ 24, MoveId.FAKE_TEARS ], + [ 28, MoveId.ICE_PUNCH ], + [ 34, MoveId.PSYCHIC ], + [ 40, MoveId.LOVELY_KISS ], + [ 46, MoveId.MEAN_LOOK ], + [ 52, MoveId.PERISH_SONG ], + [ 58, MoveId.BLIZZARD ], + ], + [SpeciesId.ELECTABUZZ]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.CHARGE ], + [ 12, MoveId.SWIFT ], + [ 16, MoveId.SHOCK_WAVE ], + [ 20, MoveId.THUNDER_WAVE ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.THUNDER_PUNCH ], + [ 34, MoveId.DISCHARGE ], + [ 40, MoveId.LOW_KICK ], + [ 46, MoveId.THUNDERBOLT ], + [ 52, MoveId.LIGHT_SCREEN ], + [ 58, MoveId.THUNDER ], + [ 64, MoveId.GIGA_IMPACT ], + ], + [SpeciesId.MAGMAR]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.SMOG ], + [ 12, MoveId.CLEAR_SMOG ], + [ 16, MoveId.FLAME_WHEEL ], + [ 20, MoveId.CONFUSE_RAY ], + [ 24, MoveId.SCARY_FACE ], + [ 28, MoveId.FIRE_PUNCH ], + [ 34, MoveId.LAVA_PLUME ], + [ 40, MoveId.LOW_KICK ], + [ 46, MoveId.FLAMETHROWER ], + [ 52, MoveId.SUNNY_DAY ], + [ 58, MoveId.FIRE_BLAST ], + [ 64, MoveId.HYPER_BEAM ], + ], + [SpeciesId.PINSIR]: [ + [ 1, MoveId.VISE_GRIP ], + [ 1, MoveId.HARDEN ], + [ 4, MoveId.FOCUS_ENERGY ], + [ 8, MoveId.BIND ], + [ 12, MoveId.SEISMIC_TOSS ], + [ 16, MoveId.BUG_BITE ], + [ 20, MoveId.STORM_THROW ], + [ 24, MoveId.DOUBLE_HIT ], + [ 28, MoveId.VITAL_THROW ], + [ 32, MoveId.X_SCISSOR ], + [ 36, MoveId.STRENGTH ], + [ 40, MoveId.SWORDS_DANCE ], + [ 44, MoveId.SUBMISSION ], + [ 48, MoveId.GUILLOTINE ], + [ 52, MoveId.SUPERPOWER ], + ], + [SpeciesId.TAUROS]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 5, MoveId.WORK_UP ], + [ 10, MoveId.PAYBACK ], + [ 15, MoveId.ASSURANCE ], + [ 20, MoveId.HORN_ATTACK ], + [ 25, MoveId.SCARY_FACE ], + [ 30, MoveId.ZEN_HEADBUTT ], + [ 35, MoveId.RAGING_BULL ], + [ 40, MoveId.REST ], + [ 45, MoveId.SWAGGER ], + [ 50, MoveId.THRASH ], + [ 55, MoveId.DOUBLE_EDGE ], + [ 60, MoveId.GIGA_IMPACT ], + ], + [SpeciesId.MAGIKARP]: [ + [ 1, MoveId.SPLASH ], + [ 15, MoveId.TACKLE ], + [ 25, MoveId.FLAIL ], + ], + [SpeciesId.GYARADOS]: [ + [ EVOLVE_MOVE, MoveId.BITE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.TWISTER ], + [ 4, MoveId.WHIRLPOOL ], + [ 8, MoveId.ICE_FANG ], + [ 12, MoveId.BRINE ], + [ 16, MoveId.SCARY_FACE ], + [ 21, MoveId.WATERFALL ], + [ 24, MoveId.CRUNCH ], + [ 28, MoveId.RAIN_DANCE ], + [ 32, MoveId.AQUA_TAIL ], + [ 36, MoveId.DRAGON_DANCE ], + [ 40, MoveId.HYDRO_PUMP ], + [ 44, MoveId.HURRICANE ], + [ 48, MoveId.THRASH ], + [ 52, MoveId.HYPER_BEAM ], + ], + [SpeciesId.LAPRAS]: [ + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 5, MoveId.SING ], + [ 10, MoveId.MIST ], + [ 15, MoveId.LIFE_DEW ], + [ 20, MoveId.ICE_SHARD ], + [ 25, MoveId.CONFUSE_RAY ], + [ 30, MoveId.WATER_PULSE ], + [ 35, MoveId.BRINE ], + [ 40, MoveId.BODY_SLAM ], + [ 45, MoveId.ICE_BEAM ], + [ 50, MoveId.RAIN_DANCE ], + [ 55, MoveId.HYDRO_PUMP ], + [ 60, MoveId.PERISH_SONG ], + [ 65, MoveId.SHEER_COLD ], + ], + [SpeciesId.DITTO]: [ + [ 1, MoveId.TRANSFORM ], + ], + [SpeciesId.EEVEE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.COVET ], + [ 5, MoveId.SAND_ATTACK ], + [ 10, MoveId.QUICK_ATTACK ], + [ 15, MoveId.BABY_DOLL_EYES ], + [ 20, MoveId.SWIFT ], + [ 25, MoveId.BITE ], + [ 30, MoveId.COPYCAT ], + [ 35, MoveId.BATON_PASS ], + [ 40, MoveId.TAKE_DOWN ], + [ 45, MoveId.CHARM ], + [ 50, MoveId.DOUBLE_EDGE ], + [ 55, MoveId.LAST_RESORT ], + [ 60, MoveId.VEEVEE_VOLLEY ], + ], + [SpeciesId.VAPOREON]: [ + [ EVOLVE_MOVE, MoveId.BOUNCY_BUBBLE ], + [ RELEARN_MOVE, MoveId.VEEVEE_VOLLEY ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.BITE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.SWIFT ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.COVET ], + [ 1, MoveId.COPYCAT ], + [ 5, MoveId.SAND_ATTACK ], + [ 10, MoveId.WATER_GUN ], + [ 15, MoveId.QUICK_ATTACK ], + [ 20, MoveId.BABY_DOLL_EYES ], + [ 25, MoveId.HAZE ], + [ 30, MoveId.WATER_PULSE ], + [ 35, MoveId.AURORA_BEAM ], + [ 40, MoveId.AQUA_RING ], + [ 45, MoveId.MUDDY_WATER ], + [ 50, MoveId.ACID_ARMOR ], + [ 55, MoveId.HYDRO_PUMP ], + [ 60, MoveId.LAST_RESORT ], + ], + [SpeciesId.JOLTEON]: [ + [ EVOLVE_MOVE, MoveId.BUZZY_BUZZ ], + [ RELEARN_MOVE, MoveId.VEEVEE_VOLLEY ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.BITE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.SWIFT ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.COVET ], + [ 1, MoveId.COPYCAT ], + [ 5, MoveId.SAND_ATTACK ], + [ 10, MoveId.THUNDER_SHOCK ], + [ 15, MoveId.QUICK_ATTACK ], + [ 20, MoveId.BABY_DOLL_EYES ], + [ 25, MoveId.THUNDER_WAVE ], + [ 30, MoveId.DOUBLE_KICK ], + [ 35, MoveId.THUNDER_FANG ], + [ 40, MoveId.PIN_MISSILE ], + [ 45, MoveId.DISCHARGE ], + [ 50, MoveId.AGILITY ], + [ 55, MoveId.THUNDER ], + [ 60, MoveId.LAST_RESORT ], + ], + [SpeciesId.FLAREON]: [ + [ EVOLVE_MOVE, MoveId.SIZZLY_SLIDE ], + [ RELEARN_MOVE, MoveId.VEEVEE_VOLLEY ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.SWIFT ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.COVET ], + [ 1, MoveId.COPYCAT ], + [ 5, MoveId.SAND_ATTACK ], + [ 10, MoveId.EMBER ], + [ 15, MoveId.QUICK_ATTACK ], + [ 20, MoveId.BABY_DOLL_EYES ], + [ 25, MoveId.SMOG ], + [ 30, MoveId.BITE ], + [ 35, MoveId.FIRE_FANG ], + [ 40, MoveId.FIRE_SPIN ], + [ 45, MoveId.LAVA_PLUME ], + [ 50, MoveId.SCARY_FACE ], + [ 55, MoveId.FLARE_BLITZ ], + [ 60, MoveId.LAST_RESORT ], + ], + [SpeciesId.PORYGON]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.CONVERSION ], + [ 5, MoveId.RECYCLE ], + [ 10, MoveId.MAGNET_RISE ], + [ 15, MoveId.THUNDER_SHOCK ], + [ 20, MoveId.PSYBEAM ], + [ 25, MoveId.CONVERSION_2 ], + [ 30, MoveId.AGILITY ], + [ 35, MoveId.RECOVER ], + [ 40, MoveId.DISCHARGE ], + [ 45, MoveId.TRI_ATTACK ], + [ 50, MoveId.MAGIC_COAT ], + [ 55, MoveId.LOCK_ON ], + [ 60, MoveId.ZAP_CANNON ], + ], + [SpeciesId.OMANYTE]: [ + [ 1, MoveId.BIND ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.CONSTRICT ], + [ 5, MoveId.ROLLOUT ], + [ 10, MoveId.SAND_ATTACK ], + [ 15, MoveId.WATER_GUN ], + [ 20, MoveId.LEER ], + [ 25, MoveId.MUD_SHOT ], + [ 30, MoveId.ANCIENT_POWER ], + [ 35, MoveId.BRINE ], + [ 41, MoveId.PROTECT ], + [ 45, MoveId.ROCK_BLAST ], + [ 50, MoveId.SURF ], + [ 55, MoveId.SHELL_SMASH ], + [ 60, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.OMASTAR]: [ + [ EVOLVE_MOVE, MoveId.CRUNCH ], + [ 1, MoveId.BIND ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.CONSTRICT ], + [ 1, MoveId.SPIKE_CANNON ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.ROLLOUT ], + [ 15, MoveId.WATER_GUN ], + [ 20, MoveId.LEER ], + [ 25, MoveId.MUD_SHOT ], + [ 30, MoveId.ANCIENT_POWER ], + [ 35, MoveId.BRINE ], + [ 43, MoveId.PROTECT ], + [ 49, MoveId.ROCK_BLAST ], + [ 56, MoveId.SURF ], + [ 63, MoveId.SHELL_SMASH ], + [ 70, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.KABUTO]: [ + [ 1, MoveId.ABSORB ], + [ 1, MoveId.HARDEN ], + [ 5, MoveId.SCRATCH ], + [ 10, MoveId.SAND_ATTACK ], + [ 15, MoveId.AQUA_JET ], + [ 20, MoveId.LEER ], + [ 25, MoveId.MUD_SHOT ], + [ 30, MoveId.ANCIENT_POWER ], + [ 35, MoveId.BRINE ], + [ 41, MoveId.PROTECT ], + [ 45, MoveId.LEECH_LIFE ], + [ 50, MoveId.LIQUIDATION ], + [ 55, MoveId.METAL_SOUND ], + [ 60, MoveId.STONE_EDGE ], + ], + [SpeciesId.KABUTOPS]: [ + [ EVOLVE_MOVE, MoveId.SLASH ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.NIGHT_SLASH ], + [ 15, MoveId.AQUA_JET ], + [ 20, MoveId.LEER ], + [ 25, MoveId.MUD_SHOT ], + [ 30, MoveId.ANCIENT_POWER ], + [ 35, MoveId.BRINE ], + [ 43, MoveId.PROTECT ], + [ 49, MoveId.LEECH_LIFE ], + [ 56, MoveId.LIQUIDATION ], + [ 63, MoveId.METAL_SOUND ], + [ 70, MoveId.STONE_EDGE ], + ], + [SpeciesId.AERODACTYL]: [ + [ 1, MoveId.BITE ], + [ 1, MoveId.ANCIENT_POWER ], + [ 5, MoveId.SUPERSONIC ], + [ 10, MoveId.WING_ATTACK ], + [ 15, MoveId.SCARY_FACE ], + [ 20, MoveId.ROCK_SLIDE ], + [ 25, MoveId.ROAR ], + [ 30, MoveId.CRUNCH ], + [ 35, MoveId.IRON_HEAD ], + [ 40, MoveId.TAKE_DOWN ], + [ 45, MoveId.STONE_EDGE ], + [ 50, MoveId.AGILITY ], + [ 55, MoveId.HYPER_BEAM ], + [ 60, MoveId.GIGA_IMPACT ], + ], + [SpeciesId.SNORLAX]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SCREECH ], + [ 1, MoveId.ODOR_SLEUTH ], // Previous Stage Move + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.METRONOME ], + [ 1, MoveId.LICK ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.STOCKPILE ], + [ 1, MoveId.SWALLOW ], + [ 1, MoveId.RECYCLE ], + [ 1, MoveId.BLOCK ], + [ 1, MoveId.COVET ], + [ 1, MoveId.FLING ], + [ 1, MoveId.LAST_RESORT ], + [ 12, MoveId.YAWN ], + [ 16, MoveId.BITE ], + [ 20, MoveId.REST ], + [ 20, MoveId.SNORE ], + [ 20, MoveId.SLEEP_TALK ], + [ 24, MoveId.CRUNCH ], + [ 28, MoveId.BODY_SLAM ], + [ 32, MoveId.HEAVY_SLAM ], + [ 36, MoveId.AMNESIA ], + [ 40, MoveId.HIGH_HORSEPOWER ], + [ 44, MoveId.HAMMER_ARM ], + [ 48, MoveId.BELLY_DRUM ], + [ 52, MoveId.BELCH ], + [ 56, MoveId.GIGA_IMPACT ], + ], + [SpeciesId.ARTICUNO]: [ + [ 1, MoveId.GUST ], + [ 1, MoveId.MIST ], + [ 5, MoveId.POWDER_SNOW ], + [ 10, MoveId.REFLECT ], + [ 15, MoveId.ICE_SHARD ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.ANCIENT_POWER ], + [ 30, MoveId.TAILWIND ], + [ 35, MoveId.FREEZE_DRY ], + [ 40, MoveId.ROOST ], + [ 45, MoveId.ICE_BEAM ], + [ 50, MoveId.SNOWSCAPE ], + [ 55, MoveId.HURRICANE ], + [ 60, MoveId.HAZE ], + [ 65, MoveId.BLIZZARD ], + [ 70, MoveId.SHEER_COLD ], + ], + [SpeciesId.ZAPDOS]: [ + [ 1, MoveId.PECK ], + [ 1, MoveId.THUNDER_WAVE ], + [ 5, MoveId.THUNDER_SHOCK ], + [ 10, MoveId.LIGHT_SCREEN ], + [ 15, MoveId.PLUCK ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.ANCIENT_POWER ], + [ 30, MoveId.CHARGE ], + [ 35, MoveId.DRILL_PECK ], + [ 40, MoveId.ROOST ], + [ 45, MoveId.DISCHARGE ], + [ 50, MoveId.RAIN_DANCE ], + [ 55, MoveId.THUNDER ], + [ 60, MoveId.DETECT ], + [ 65, MoveId.MAGNETIC_FLUX ], + [ 70, MoveId.ZAP_CANNON ], + ], + [SpeciesId.MOLTRES]: [ + [ 1, MoveId.GUST ], + [ 1, MoveId.LEER ], + [ 5, MoveId.EMBER ], + [ 10, MoveId.SAFEGUARD ], + [ 15, MoveId.WING_ATTACK ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.ANCIENT_POWER ], + [ 30, MoveId.INCINERATE ], + [ 35, MoveId.AIR_SLASH ], + [ 40, MoveId.ROOST ], + [ 45, MoveId.HEAT_WAVE ], + [ 50, MoveId.SUNNY_DAY ], + [ 55, MoveId.HURRICANE ], + [ 60, MoveId.ENDURE ], + [ 65, MoveId.OVERHEAT ], + [ 70, MoveId.SKY_ATTACK ], + ], + [SpeciesId.DRATINI]: [ + [ 1, MoveId.WRAP ], + [ 1, MoveId.LEER ], + [ 5, MoveId.TWISTER ], + [ 10, MoveId.THUNDER_WAVE ], + [ 15, MoveId.DRAGON_TAIL ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.SLAM ], + [ 31, MoveId.AQUA_TAIL ], + [ 35, MoveId.DRAGON_RUSH ], + [ 40, MoveId.SAFEGUARD ], + [ 45, MoveId.RAIN_DANCE ], + [ 50, MoveId.DRAGON_DANCE ], + [ 55, MoveId.OUTRAGE ], + [ 60, MoveId.HYPER_BEAM ], + ], + [SpeciesId.DRAGONAIR]: [ + [ 1, MoveId.WRAP ], + [ 1, MoveId.LEER ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.TWISTER ], + [ 15, MoveId.DRAGON_TAIL ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.SLAM ], + [ 33, MoveId.AQUA_TAIL ], + [ 39, MoveId.DRAGON_RUSH ], + [ 46, MoveId.SAFEGUARD ], + [ 53, MoveId.RAIN_DANCE ], + [ 60, MoveId.DRAGON_DANCE ], + [ 67, MoveId.OUTRAGE ], + [ 74, MoveId.HYPER_BEAM ], + ], + [SpeciesId.DRAGONITE]: [ + [ EVOLVE_MOVE, MoveId.HURRICANE ], + [ 1, MoveId.FIRE_PUNCH ], + [ 1, MoveId.THUNDER_PUNCH ], + [ 1, MoveId.WING_ATTACK ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.LEER ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.TWISTER ], + [ 1, MoveId.EXTREME_SPEED ], + [ 1, MoveId.ROOST ], + [ 15, MoveId.DRAGON_TAIL ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.SLAM ], + [ 33, MoveId.AQUA_TAIL ], + [ 39, MoveId.DRAGON_RUSH ], + [ 41, MoveId.OUTRAGE ], + [ 46, MoveId.SAFEGUARD ], + [ 53, MoveId.RAIN_DANCE ], + [ 62, MoveId.DRAGON_DANCE ], + [ 80, MoveId.HYPER_BEAM ], + ], + [SpeciesId.MEWTWO]: [ + [ 1, MoveId.DISABLE ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.SWIFT ], + [ 1, MoveId.LIFE_DEW ], + [ 8, MoveId.ANCIENT_POWER ], + [ 16, MoveId.PSYCHO_CUT ], + [ 24, MoveId.SAFEGUARD ], + [ 32, MoveId.AMNESIA ], + [ 40, MoveId.AURA_SPHERE ], + [ 48, MoveId.PSYCHIC ], + [ 56, MoveId.POWER_SWAP ], + [ 56, MoveId.GUARD_SWAP ], + [ 64, MoveId.MIST ], + [ 72, MoveId.PSYSTRIKE ], + [ 80, MoveId.RECOVER ], + [ 88, MoveId.FUTURE_SIGHT ], + ], + [SpeciesId.MEW]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.REFLECT_TYPE ], + [ 10, MoveId.AMNESIA ], + [ 20, MoveId.BATON_PASS ], + [ 30, MoveId.ANCIENT_POWER ], + [ 40, MoveId.LIFE_DEW ], + [ 50, MoveId.NASTY_PLOT ], + [ 60, MoveId.METRONOME ], + [ 70, MoveId.IMPRISON ], + [ 80, MoveId.TRANSFORM ], + [ 90, MoveId.AURA_SPHERE ], + [ 100, MoveId.PSYCHIC ], + ], + [SpeciesId.CHIKORITA]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 5, MoveId.RAZOR_LEAF ], // Custom, moved from 6 to 5 + [ 9, MoveId.POISON_POWDER ], + [ 12, MoveId.SYNTHESIS ], + [ 17, MoveId.REFLECT ], + [ 20, MoveId.MAGICAL_LEAF ], + [ 23, MoveId.LEECH_SEED ], + [ 28, MoveId.SWEET_SCENT ], + [ 31, MoveId.LIGHT_SCREEN ], + [ 34, MoveId.BODY_SLAM ], + [ 39, MoveId.SAFEGUARD ], + [ 42, MoveId.GIGA_DRAIN ], + [ 45, MoveId.SOLAR_BEAM ], + ], + [SpeciesId.BAYLEEF]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.RAZOR_LEAF ], + [ 1, MoveId.POISON_POWDER ], + [ 12, MoveId.SYNTHESIS ], + [ 18, MoveId.REFLECT ], + [ 22, MoveId.MAGICAL_LEAF ], + [ 26, MoveId.LEECH_SEED ], + [ 32, MoveId.SWEET_SCENT ], + [ 36, MoveId.LIGHT_SCREEN ], + [ 40, MoveId.BODY_SLAM ], + [ 46, MoveId.SAFEGUARD ], + [ 50, MoveId.GIGA_DRAIN ], + [ 54, MoveId.SOLAR_BEAM ], + ], + [SpeciesId.MEGANIUM]: [ + [ EVOLVE_MOVE, MoveId.PETAL_DANCE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.RAZOR_LEAF ], + [ 1, MoveId.POISON_POWDER ], + [ 1, MoveId.PETAL_BLIZZARD ], + [ 12, MoveId.SYNTHESIS ], + [ 18, MoveId.REFLECT ], + [ 22, MoveId.MAGICAL_LEAF ], + [ 26, MoveId.LEECH_SEED ], + [ 34, MoveId.SWEET_SCENT ], + [ 40, MoveId.LIGHT_SCREEN ], + [ 46, MoveId.BODY_SLAM ], + [ 54, MoveId.SAFEGUARD ], + [ 60, MoveId.GIGA_DRAIN ], + [ 65, MoveId.SOLAR_BEAM ], + ], + [SpeciesId.CYNDAQUIL]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 5, MoveId.EMBER ], // Custom, moved from 10 to 5 + [ 10, MoveId.SMOKESCREEN ], // Custom, moved from 6 to 10 + [ 13, MoveId.QUICK_ATTACK ], + [ 19, MoveId.FLAME_WHEEL ], + [ 22, MoveId.DEFENSE_CURL ], + [ 28, MoveId.FLAME_CHARGE ], + [ 31, MoveId.SWIFT ], + [ 37, MoveId.LAVA_PLUME ], + [ 40, MoveId.FLAMETHROWER ], + [ 46, MoveId.INFERNO ], + [ 49, MoveId.ROLLOUT ], + [ 55, MoveId.DOUBLE_EDGE ], + [ 58, MoveId.OVERHEAT ], + [ 64, MoveId.ERUPTION ], + ], + [SpeciesId.QUILAVA]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.SMOKESCREEN ], + [ 10, MoveId.EMBER ], + [ 13, MoveId.QUICK_ATTACK ], + [ 20, MoveId.FLAME_WHEEL ], + [ 24, MoveId.DEFENSE_CURL ], + [ 31, MoveId.SWIFT ], + [ 35, MoveId.FLAME_CHARGE ], + [ 42, MoveId.LAVA_PLUME ], + [ 46, MoveId.FLAMETHROWER ], + [ 53, MoveId.INFERNO ], + [ 57, MoveId.ROLLOUT ], + [ 64, MoveId.DOUBLE_EDGE ], + [ 68, MoveId.OVERHEAT ], + [ 75, MoveId.ERUPTION ], + ], + [SpeciesId.TYPHLOSION]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.ERUPTION ], + [ 1, MoveId.GYRO_BALL ], + [ 13, MoveId.QUICK_ATTACK ], + [ 20, MoveId.FLAME_WHEEL ], + [ 24, MoveId.DEFENSE_CURL ], + [ 31, MoveId.SWIFT ], + [ 35, MoveId.FLAME_CHARGE ], + [ 43, MoveId.LAVA_PLUME ], + [ 48, MoveId.FLAMETHROWER ], + [ 56, MoveId.INFERNO ], + [ 61, MoveId.ROLLOUT ], + [ 74, MoveId.OVERHEAT ], + ], + [SpeciesId.TOTODILE]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 5, MoveId.WATER_GUN ], // Custom, moved from 6 to 5 + [ 9, MoveId.BITE ], + [ 13, MoveId.SCARY_FACE ], + [ 19, MoveId.ICE_FANG ], + [ 22, MoveId.FLAIL ], + [ 27, MoveId.CRUNCH ], + [ 30, MoveId.SLASH ], + [ 33, MoveId.SCREECH ], + [ 37, MoveId.THRASH ], + [ 41, MoveId.AQUA_TAIL ], + [ 45, MoveId.SUPERPOWER ], + [ 50, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.CROCONAW]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.WATER_GUN ], + [ 13, MoveId.BITE ], + [ 15, MoveId.SCARY_FACE ], + [ 21, MoveId.ICE_FANG ], + [ 24, MoveId.FLAIL ], + [ 30, MoveId.CRUNCH ], + [ 34, MoveId.SLASH ], + [ 37, MoveId.SCREECH ], + [ 42, MoveId.THRASH ], + [ 47, MoveId.AQUA_TAIL ], + [ 50, MoveId.SUPERPOWER ], + [ 55, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.FERALIGATR]: [ + [ 1, MoveId.AGILITY ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.WATER_GUN ], + [ 13, MoveId.BITE ], + [ 15, MoveId.SCARY_FACE ], + [ 21, MoveId.ICE_FANG ], + [ 24, MoveId.FLAIL ], + [ 32, MoveId.CRUNCH ], + [ 37, MoveId.SLASH ], + [ 44, MoveId.SCREECH ], + [ 51, MoveId.THRASH ], + [ 59, MoveId.AQUA_TAIL ], + [ 65, MoveId.SUPERPOWER ], + [ 70, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.SENTRET]: [ + [ 1, MoveId.SCRATCH ], + [ 4, MoveId.DEFENSE_CURL ], + [ 7, MoveId.QUICK_ATTACK ], + [ 13, MoveId.FURY_SWIPES ], + [ 16, MoveId.HELPING_HAND ], + [ 19, MoveId.FOLLOW_ME ], + [ 25, MoveId.SLAM ], + [ 28, MoveId.REST ], + [ 31, MoveId.SUCKER_PUNCH ], + [ 36, MoveId.AMNESIA ], + [ 39, MoveId.BATON_PASS ], + [ 42, MoveId.DOUBLE_EDGE ], + [ 47, MoveId.HYPER_VOICE ], + ], + [SpeciesId.FURRET]: [ + [ EVOLVE_MOVE, MoveId.AGILITY ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.COIL ], + [ 13, MoveId.FURY_SWIPES ], + [ 17, MoveId.HELPING_HAND ], + [ 21, MoveId.FOLLOW_ME ], + [ 28, MoveId.SLAM ], + [ 32, MoveId.REST ], + [ 36, MoveId.SUCKER_PUNCH ], + [ 42, MoveId.AMNESIA ], + [ 46, MoveId.BATON_PASS ], + [ 50, MoveId.DOUBLE_EDGE ], + [ 56, MoveId.HYPER_VOICE ], + ], + [SpeciesId.HOOTHOOT]: [ + [ 1, MoveId.GROWL ], + [ 1, MoveId.PECK ], + [ 3, MoveId.TACKLE ], + [ 6, MoveId.ECHOED_VOICE ], + [ 9, MoveId.CONFUSION ], + [ 12, MoveId.REFLECT ], + [ 15, MoveId.DEFOG ], + [ 18, MoveId.AIR_SLASH ], + [ 21, MoveId.EXTRASENSORY ], + [ 24, MoveId.TAKE_DOWN ], + [ 27, MoveId.UPROAR ], + [ 30, MoveId.ROOST ], + [ 33, MoveId.MOONBLAST ], + [ 36, MoveId.HYPNOSIS ], + [ 39, MoveId.DREAM_EATER ], + ], + [SpeciesId.NOCTOWL]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.PECK ], + [ 1, MoveId.SKY_ATTACK ], + [ 1, MoveId.ECHOED_VOICE ], + [ 9, MoveId.CONFUSION ], + [ 12, MoveId.REFLECT ], + [ 15, MoveId.DEFOG ], + [ 18, MoveId.AIR_SLASH ], + [ 23, MoveId.EXTRASENSORY ], + [ 28, MoveId.TAKE_DOWN ], + [ 33, MoveId.UPROAR ], + [ 38, MoveId.ROOST ], + [ 43, MoveId.MOONBLAST ], + [ 48, MoveId.HYPNOSIS ], + [ 53, MoveId.DREAM_EATER ], + ], + [SpeciesId.LEDYBA]: [ + [ 1, MoveId.TACKLE ], + [ 5, MoveId.SUPERSONIC ], + [ 8, MoveId.SWIFT ], + [ 12, MoveId.LIGHT_SCREEN ], + [ 12, MoveId.REFLECT ], + [ 12, MoveId.SAFEGUARD ], + [ 15, MoveId.MACH_PUNCH ], + [ 19, MoveId.ROOST ], + [ 22, MoveId.STRUGGLE_BUG ], + [ 26, MoveId.BATON_PASS ], + [ 29, MoveId.AGILITY ], + [ 33, MoveId.BUG_BUZZ ], + [ 36, MoveId.AIR_SLASH ], + [ 40, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.LEDIAN]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.SWIFT ], + [ 5, MoveId.SUPERSONIC ], + [ 12, MoveId.LIGHT_SCREEN ], + [ 12, MoveId.REFLECT ], + [ 12, MoveId.SAFEGUARD ], + [ 15, MoveId.MACH_PUNCH ], + [ 20, MoveId.ROOST ], + [ 24, MoveId.STRUGGLE_BUG ], + [ 29, MoveId.BATON_PASS ], + [ 33, MoveId.AGILITY ], + [ 38, MoveId.BUG_BUZZ ], + [ 42, MoveId.AIR_SLASH ], + [ 47, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.SPINARAK]: [ + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.STRING_SHOT ], + [ 1, MoveId.CONSTRICT ], + [ 5, MoveId.ABSORB ], + [ 8, MoveId.INFESTATION ], + [ 12, MoveId.SCARY_FACE ], + [ 15, MoveId.NIGHT_SHADE ], + [ 19, MoveId.SHADOW_SNEAK ], + [ 22, MoveId.FURY_SWIPES ], + [ 26, MoveId.SUCKER_PUNCH ], + [ 29, MoveId.AGILITY ], + [ 33, MoveId.PIN_MISSILE ], + [ 36, MoveId.PSYCHIC ], + [ 40, MoveId.POISON_JAB ], + [ 44, MoveId.CROSS_POISON ], + [ 47, MoveId.STICKY_WEB ], + [ 51, MoveId.TOXIC_THREAD ], + ], + [SpeciesId.ARIADOS]: [ + [ EVOLVE_MOVE, MoveId.SWORDS_DANCE ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.STRING_SHOT ], + [ 1, MoveId.CONSTRICT ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.BUG_BITE ], + [ 1, MoveId.FELL_STINGER ], + [ 8, MoveId.INFESTATION ], + [ 12, MoveId.SCARY_FACE ], + [ 15, MoveId.NIGHT_SHADE ], + [ 19, MoveId.SHADOW_SNEAK ], + [ 23, MoveId.FURY_SWIPES ], + [ 28, MoveId.SUCKER_PUNCH ], + [ 31, MoveId.AGILITY ], + [ 35, MoveId.PIN_MISSILE ], + [ 41, MoveId.PSYCHIC ], + [ 46, MoveId.POISON_JAB ], + [ 50, MoveId.CROSS_POISON ], + [ 54, MoveId.STICKY_WEB ], + [ 59, MoveId.TOXIC_THREAD ], + ], + [SpeciesId.CROBAT]: [ + [ EVOLVE_MOVE, MoveId.CROSS_POISON ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.TOXIC ], + [ 1, MoveId.SCREECH ], + [ 1, MoveId.MEAN_LOOK ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.TAILWIND ], + [ 15, MoveId.POISON_FANG ], + [ 20, MoveId.QUICK_GUARD ], + [ 27, MoveId.AIR_CUTTER ], + [ 34, MoveId.BITE ], + [ 41, MoveId.HAZE ], + [ 48, MoveId.VENOSHOCK ], + [ 55, MoveId.CONFUSE_RAY ], + [ 62, MoveId.AIR_SLASH ], + [ 69, MoveId.LEECH_LIFE ], + ], + [SpeciesId.CHINCHOU]: [ + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.WATER_GUN ], + [ 4, MoveId.ELECTRO_BALL ], + [ 8, MoveId.THUNDER_WAVE ], + [ 12, MoveId.BUBBLE_BEAM ], + [ 16, MoveId.CONFUSE_RAY ], + [ 20, MoveId.SPARK ], + [ 24, MoveId.CHARGE ], + [ 28, MoveId.DISCHARGE ], + [ 32, MoveId.AQUA_RING ], + [ 36, MoveId.FLAIL ], + [ 40, MoveId.TAKE_DOWN ], + [ 44, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.LANTURN]: [ + [ EVOLVE_MOVE, MoveId.STOCKPILE ], + [ EVOLVE_MOVE, MoveId.SPIT_UP ], + [ EVOLVE_MOVE, MoveId.SWALLOW ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.SPOTLIGHT ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.ELECTRO_BALL ], + [ 1, MoveId.EERIE_IMPULSE ], + [ 12, MoveId.BUBBLE_BEAM ], + [ 16, MoveId.CONFUSE_RAY ], + [ 20, MoveId.SPARK ], + [ 24, MoveId.CHARGE ], + [ 30, MoveId.DISCHARGE ], + [ 36, MoveId.AQUA_RING ], + [ 42, MoveId.FLAIL ], + [ 48, MoveId.TAKE_DOWN ], + [ 54, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.PICHU]: [ + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 4, MoveId.PLAY_NICE ], + [ 8, MoveId.SWEET_KISS ], + [ 12, MoveId.NUZZLE ], + [ 16, MoveId.NASTY_PLOT ], + [ 20, MoveId.CHARM ], + ], + [SpeciesId.CLEFFA]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.COPYCAT ], + [ 4, MoveId.SING ], + [ 8, MoveId.SWEET_KISS ], + [ 12, MoveId.DISARMING_VOICE ], + [ 16, MoveId.ENCORE ], + [ 20, MoveId.CHARM ], + ], + [SpeciesId.IGGLYBUFF]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.SING ], + [ 1, MoveId.COPYCAT ], + [ 4, MoveId.DEFENSE_CURL ], + [ 8, MoveId.SWEET_KISS ], + [ 12, MoveId.DISARMING_VOICE ], + [ 16, MoveId.DISABLE ], + [ 20, MoveId.CHARM ], + ], + [SpeciesId.TOGEPI]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.GROWL ], + [ 4, MoveId.SWEET_KISS ], + [ 8, MoveId.LIFE_DEW ], + [ 12, MoveId.CHARM ], + [ 16, MoveId.ANCIENT_POWER ], + [ 20, MoveId.YAWN ], + [ 24, MoveId.METRONOME ], + [ 28, MoveId.AFTER_YOU ], + [ 32, MoveId.DOUBLE_EDGE ], + [ 36, MoveId.SAFEGUARD ], + [ 40, MoveId.FOLLOW_ME ], + [ 44, MoveId.BATON_PASS ], + [ 48, MoveId.LAST_RESORT ], + [ 52, MoveId.WISH ], + ], + [SpeciesId.TOGETIC]: [ + [ EVOLVE_MOVE, MoveId.FAIRY_WIND ], + [ 1, MoveId.POUND ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.LIFE_DEW ], + [ 12, MoveId.CHARM ], + [ 16, MoveId.ANCIENT_POWER ], + [ 20, MoveId.YAWN ], + [ 24, MoveId.METRONOME ], + [ 28, MoveId.AFTER_YOU ], + [ 32, MoveId.DOUBLE_EDGE ], + [ 36, MoveId.SAFEGUARD ], + [ 40, MoveId.FOLLOW_ME ], + [ 44, MoveId.BATON_PASS ], + [ 48, MoveId.LAST_RESORT ], + [ 52, MoveId.WISH ], + ], + [SpeciesId.NATU]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 5, MoveId.STORED_POWER ], + [ 10, MoveId.TELEPORT ], + [ 15, MoveId.CONFUSE_RAY ], + [ 20, MoveId.NIGHT_SHADE ], + [ 26, MoveId.PSYCHO_SHIFT ], + [ 30, MoveId.POWER_SWAP ], + [ 35, MoveId.PSYCHIC ], + [ 35, MoveId.GUARD_SWAP ], + [ 40, MoveId.WISH ], + [ 45, MoveId.FUTURE_SIGHT ], + ], + [SpeciesId.XATU]: [ + [ EVOLVE_MOVE, MoveId.AIR_SLASH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 1, MoveId.TELEPORT ], + [ 1, MoveId.TAILWIND ], + [ 1, MoveId.STORED_POWER ], + [ 15, MoveId.CONFUSE_RAY ], + [ 20, MoveId.NIGHT_SHADE ], + [ 28, MoveId.PSYCHO_SHIFT ], + [ 34, MoveId.POWER_SWAP ], + [ 34, MoveId.GUARD_SWAP ], + [ 41, MoveId.PSYCHIC ], + [ 48, MoveId.WISH ], + [ 55, MoveId.FUTURE_SIGHT ], + ], + [SpeciesId.MAREEP]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 4, MoveId.THUNDER_WAVE ], + [ 8, MoveId.THUNDER_SHOCK ], + [ 11, MoveId.COTTON_SPORE ], + [ 15, MoveId.CHARGE ], + [ 18, MoveId.TAKE_DOWN ], + [ 22, MoveId.ELECTRO_BALL ], + [ 25, MoveId.CONFUSE_RAY ], + [ 29, MoveId.POWER_GEM ], + [ 32, MoveId.DISCHARGE ], + [ 36, MoveId.COTTON_GUARD ], + [ 39, MoveId.DAZZLING_GLEAM ], + [ 43, MoveId.LIGHT_SCREEN ], + [ 46, MoveId.THUNDER ], + ], + [SpeciesId.FLAAFFY]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 6, MoveId.THUNDER_SHOCK ], + [ 9, MoveId.THUNDER_WAVE ], + [ 11, MoveId.COTTON_SPORE ], + [ 16, MoveId.CHARGE ], + [ 20, MoveId.TAKE_DOWN ], + [ 25, MoveId.ELECTRO_BALL ], + [ 29, MoveId.CONFUSE_RAY ], + [ 34, MoveId.POWER_GEM ], + [ 38, MoveId.DISCHARGE ], + [ 43, MoveId.COTTON_GUARD ], + [ 47, MoveId.DAZZLING_GLEAM ], + [ 52, MoveId.LIGHT_SCREEN ], + [ 56, MoveId.THUNDER ], + ], + [SpeciesId.AMPHAROS]: [ + [ EVOLVE_MOVE, MoveId.THUNDER_PUNCH ], + [ 1, MoveId.FIRE_PUNCH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.ZAP_CANNON ], + [ 1, MoveId.DRAGON_PULSE ], + [ 1, MoveId.MAGNETIC_FLUX ], + [ 1, MoveId.ION_DELUGE ], + [ 11, MoveId.COTTON_SPORE ], + [ 16, MoveId.CHARGE ], + [ 20, MoveId.TAKE_DOWN ], + [ 25, MoveId.ELECTRO_BALL ], + [ 29, MoveId.CONFUSE_RAY ], + [ 35, MoveId.POWER_GEM ], + [ 40, MoveId.DISCHARGE ], + [ 46, MoveId.COTTON_GUARD ], + [ 51, MoveId.DAZZLING_GLEAM ], + [ 57, MoveId.LIGHT_SCREEN ], + [ 62, MoveId.THUNDER ], + ], + [SpeciesId.BELLOSSOM]: [ + [ EVOLVE_MOVE, MoveId.PETAL_BLIZZARD ], + [ 1, MoveId.ACID ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.MEGA_DRAIN ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.POISON_POWDER ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.SLEEP_POWDER ], + [ 1, MoveId.PETAL_DANCE ], + [ 1, MoveId.TOXIC ], + [ 1, MoveId.GIGA_DRAIN ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.MOONLIGHT ], + [ 1, MoveId.QUIVER_DANCE ], + [ 1, MoveId.GRASSY_TERRAIN ], + [ 1, MoveId.MOONBLAST ], + ], + [SpeciesId.MARILL]: [ + [ 1, MoveId.SPLASH ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.ROLLOUT ], + [ 1, MoveId.HELPING_HAND ], + [ 6, MoveId.BUBBLE_BEAM ], + [ 9, MoveId.CHARM ], + [ 12, MoveId.SLAM ], + [ 15, MoveId.BOUNCE ], + [ 19, MoveId.AQUA_TAIL ], + [ 21, MoveId.PLAY_ROUGH ], + [ 24, MoveId.AQUA_RING ], + [ 27, MoveId.RAIN_DANCE ], + [ 30, MoveId.HYDRO_PUMP ], + [ 33, MoveId.DOUBLE_EDGE ], + [ 36, MoveId.SUPERPOWER ], + ], + [SpeciesId.AZUMARILL]: [ + [ 1, MoveId.SPLASH ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.ROLLOUT ], + [ 1, MoveId.HELPING_HAND ], + [ 6, MoveId.BUBBLE_BEAM ], + [ 9, MoveId.CHARM ], + [ 12, MoveId.SLAM ], + [ 15, MoveId.BOUNCE ], + [ 21, MoveId.AQUA_TAIL ], + [ 25, MoveId.PLAY_ROUGH ], + [ 30, MoveId.AQUA_RING ], + [ 35, MoveId.RAIN_DANCE ], + [ 40, MoveId.HYDRO_PUMP ], + [ 45, MoveId.DOUBLE_EDGE ], + [ 50, MoveId.SUPERPOWER ], + ], + [SpeciesId.SUDOWOODO]: [ + [ EVOLVE_MOVE, MoveId.SLAM ], + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.TACKLE ], // Previous Stage Move, Custom + [ 1, MoveId.FLAIL ], + [ 1, MoveId.FAKE_TEARS ], + [ 1, MoveId.HAMMER_ARM ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.STONE_EDGE ], + [ 1, MoveId.WOOD_HAMMER ], + [ 12, MoveId.BLOCK ], + [ 16, MoveId.MIMIC ], + [ 20, MoveId.ROCK_TOMB ], + [ 24, MoveId.TEARFUL_LOOK ], + [ 28, MoveId.SUCKER_PUNCH ], + [ 32, MoveId.ROCK_SLIDE ], + [ 36, MoveId.LOW_KICK ], + [ 40, MoveId.COUNTER ], + [ 44, MoveId.DOUBLE_EDGE ], + [ 48, MoveId.HEAD_SMASH ], + ], + [SpeciesId.POLITOED]: [ + [ EVOLVE_MOVE, MoveId.BOUNCE ], + [ RELEARN_MOVE, MoveId.BODY_SLAM ], + [ RELEARN_MOVE, MoveId.DOUBLE_EDGE ], + [ RELEARN_MOVE, MoveId.WATER_GUN ], + [ RELEARN_MOVE, MoveId.BUBBLE_BEAM ], + [ RELEARN_MOVE, MoveId.HYPNOSIS ], + [ RELEARN_MOVE, MoveId.PERISH_SONG ], + [ RELEARN_MOVE, MoveId.SWAGGER ], + [ RELEARN_MOVE, MoveId.HYPER_VOICE ], + [ RELEARN_MOVE, MoveId.MUD_SHOT ], + [ RELEARN_MOVE, MoveId.EARTH_POWER ], + [ 1, MoveId.RAIN_DANCE ], + [ 1, MoveId.HYDRO_PUMP ], + [ 1, MoveId.BELLY_DRUM ], + [ 1, MoveId.POUND ], + [ 1, MoveId.WATER_SPORT ], // Previous Stage Move + ], + [SpeciesId.HOPPIP]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SPLASH ], + [ 4, MoveId.TAIL_WHIP ], + [ 6, MoveId.ABSORB ], + [ 8, MoveId.FAIRY_WIND ], + [ 10, MoveId.POISON_POWDER ], + [ 10, MoveId.STUN_SPORE ], + [ 10, MoveId.SLEEP_POWDER ], + [ 12, MoveId.BULLET_SEED ], + [ 15, MoveId.SYNTHESIS ], + [ 19, MoveId.LEECH_SEED ], + [ 22, MoveId.MEGA_DRAIN ], + [ 24, MoveId.ACROBATICS ], + [ 27, MoveId.COTTON_SPORE ], + [ 29, MoveId.U_TURN ], + [ 32, MoveId.GIGA_DRAIN ], + [ 35, MoveId.BOUNCE ], + [ 38, MoveId.MEMENTO ], + ], + [SpeciesId.SKIPLOOM]: [ + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.SYNTHESIS ], + [ 8, MoveId.TACKLE ], + [ 10, MoveId.FAIRY_WIND ], + [ 12, MoveId.POISON_POWDER ], + [ 12, MoveId.STUN_SPORE ], + [ 12, MoveId.SLEEP_POWDER ], + [ 15, MoveId.BULLET_SEED ], + [ 20, MoveId.LEECH_SEED ], + [ 24, MoveId.MEGA_DRAIN ], + [ 28, MoveId.ACROBATICS ], + [ 31, MoveId.COTTON_SPORE ], + [ 34, MoveId.U_TURN ], + [ 37, MoveId.GIGA_DRAIN ], + [ 41, MoveId.BOUNCE ], + [ 44, MoveId.MEMENTO ], + ], + [SpeciesId.JUMPLUFF]: [ + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.SYNTHESIS ], + [ 8, MoveId.TACKLE ], + [ 10, MoveId.FAIRY_WIND ], + [ 12, MoveId.POISON_POWDER ], + [ 12, MoveId.STUN_SPORE ], + [ 12, MoveId.SLEEP_POWDER ], + [ 15, MoveId.BULLET_SEED ], + [ 20, MoveId.LEECH_SEED ], + [ 24, MoveId.MEGA_DRAIN ], + [ 30, MoveId.ACROBATICS ], + [ 35, MoveId.COTTON_SPORE ], + [ 39, MoveId.U_TURN ], + [ 43, MoveId.GIGA_DRAIN ], + [ 49, MoveId.BOUNCE ], + [ 55, MoveId.MEMENTO ], + ], + [SpeciesId.AIPOM]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.TAIL_WHIP ], + [ 4, MoveId.SAND_ATTACK ], + [ 8, MoveId.ASTONISH ], + [ 11, MoveId.BATON_PASS ], + [ 15, MoveId.TICKLE ], + [ 18, MoveId.FURY_SWIPES ], + [ 22, MoveId.SWIFT ], + [ 25, MoveId.SCREECH ], + [ 29, MoveId.AGILITY ], + [ 32, MoveId.DOUBLE_HIT ], + [ 36, MoveId.FLING ], + [ 39, MoveId.NASTY_PLOT ], + [ 43, MoveId.LAST_RESORT ], + ], + [SpeciesId.SUNKERN]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWTH ], + [ 7, MoveId.ABSORB ], + [ 10, MoveId.MEGA_DRAIN ], + [ 16, MoveId.RAZOR_LEAF ], + [ 19, MoveId.WORRY_SEED ], + [ 22, MoveId.GIGA_DRAIN ], + [ 25, MoveId.ENDEAVOR ], + [ 28, MoveId.SYNTHESIS ], + [ 31, MoveId.SOLAR_BEAM ], + [ 34, MoveId.DOUBLE_EDGE ], + [ 36, MoveId.SUNNY_DAY ], + [ 39, MoveId.SEED_BOMB ], + ], + [SpeciesId.SUNFLORA]: [ + [ RELEARN_MOVE, MoveId.SEED_BOMB ], // Previous Stage Move + [ 1, MoveId.POUND ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.ENDEAVOR ], // Previous Stage Move + [ 1, MoveId.SYNTHESIS ], // Previous Stage Move + [ 4, MoveId.INGRAIN ], + [ 7, MoveId.ABSORB ], + [ 10, MoveId.MEGA_DRAIN ], + [ 13, MoveId.LEECH_SEED ], + [ 16, MoveId.RAZOR_LEAF ], + [ 19, MoveId.WORRY_SEED ], + [ 22, MoveId.GIGA_DRAIN ], + [ 25, MoveId.BULLET_SEED ], + [ 28, MoveId.PETAL_DANCE ], + [ 31, MoveId.SOLAR_BEAM ], + [ 34, MoveId.DOUBLE_EDGE ], + [ 39, MoveId.SUNNY_DAY ], + [ 43, MoveId.LEAF_STORM ], + [ 50, MoveId.PETAL_BLIZZARD ], + ], + [SpeciesId.YANMA]: [ + [ 1, MoveId.TACKLE ], + [ 6, MoveId.QUICK_ATTACK ], + [ 11, MoveId.DOUBLE_TEAM ], + [ 14, MoveId.AIR_CUTTER ], + [ 17, MoveId.DETECT ], + [ 22, MoveId.SUPERSONIC ], + [ 27, MoveId.UPROAR ], + [ 30, MoveId.BUG_BITE ], + [ 33, MoveId.ANCIENT_POWER ], + [ 38, MoveId.HYPNOSIS ], + [ 43, MoveId.WING_ATTACK ], + [ 46, MoveId.SCREECH ], + [ 49, MoveId.U_TURN ], + [ 54, MoveId.AIR_SLASH ], + [ 57, MoveId.BUG_BUZZ ], + ], + [SpeciesId.WOOPER]: [ + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_GUN ], + [ 4, MoveId.RAIN_DANCE ], + [ 8, MoveId.MUD_SHOT ], + [ 12, MoveId.MIST ], + [ 12, MoveId.HAZE ], + [ 16, MoveId.SLAM ], + [ 21, MoveId.YAWN ], + [ 24, MoveId.AQUA_TAIL ], + [ 28, MoveId.MUDDY_WATER ], + [ 32, MoveId.AMNESIA ], + [ 36, MoveId.TOXIC ], + [ 40, MoveId.EARTHQUAKE ], + ], + [SpeciesId.QUAGSIRE]: [ + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.RAIN_DANCE ], + [ 1, MoveId.MUD_SHOT ], + [ 12, MoveId.MIST ], + [ 12, MoveId.HAZE ], + [ 16, MoveId.SLAM ], + [ 23, MoveId.YAWN ], + [ 28, MoveId.AQUA_TAIL ], + [ 34, MoveId.MUDDY_WATER ], + [ 40, MoveId.AMNESIA ], + [ 46, MoveId.TOXIC ], + [ 52, MoveId.EARTHQUAKE ], + ], + [SpeciesId.ESPEON]: [ + [ EVOLVE_MOVE, MoveId.GLITZY_GLOW ], + [ RELEARN_MOVE, MoveId.VEEVEE_VOLLEY ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.BITE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.COVET ], + [ 1, MoveId.COPYCAT ], + [ 5, MoveId.SAND_ATTACK ], + [ 10, MoveId.CONFUSION ], + [ 15, MoveId.QUICK_ATTACK ], + [ 20, MoveId.BABY_DOLL_EYES ], + [ 25, MoveId.SWIFT ], + [ 30, MoveId.PSYBEAM ], + [ 35, MoveId.MORNING_SUN ], + [ 40, MoveId.POWER_SWAP ], + [ 45, MoveId.PSYCHIC ], + [ 50, MoveId.PSYCH_UP ], + [ 55, MoveId.FUTURE_SIGHT ], + [ 60, MoveId.LAST_RESORT ], + ], + [SpeciesId.UMBREON]: [ + [ EVOLVE_MOVE, MoveId.BADDY_BAD ], + [ RELEARN_MOVE, MoveId.VEEVEE_VOLLEY ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.BITE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.SWIFT ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.COVET ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.PURSUIT ], + [ 5, MoveId.SAND_ATTACK ], + [ 10, MoveId.SNARL ], + [ 15, MoveId.QUICK_ATTACK ], + [ 20, MoveId.BABY_DOLL_EYES ], + [ 25, MoveId.CONFUSE_RAY ], + [ 30, MoveId.ASSURANCE ], + [ 35, MoveId.MOONLIGHT ], + [ 40, MoveId.GUARD_SWAP ], + [ 45, MoveId.DARK_PULSE ], + [ 50, MoveId.SCREECH ], + [ 55, MoveId.MEAN_LOOK ], + [ 60, MoveId.LAST_RESORT ], + ], + [SpeciesId.MURKROW]: [ + [ 1, MoveId.PECK ], + [ 1, MoveId.ASTONISH ], + [ 5, MoveId.GUST ], + [ 11, MoveId.HAZE ], + [ 15, MoveId.WING_ATTACK ], + [ 21, MoveId.NIGHT_SHADE ], + [ 25, MoveId.ASSURANCE ], + [ 31, MoveId.TAUNT ], + [ 35, MoveId.MEAN_LOOK ], + [ 40, MoveId.FOUL_PLAY ], + [ 50, MoveId.SUCKER_PUNCH ], + [ 55, MoveId.TORMENT ], + [ 60, MoveId.QUASH ], + ], + [SpeciesId.SLOWKING]: [ + [ RELEARN_MOVE, MoveId.FUTURE_SIGHT ], + [ RELEARN_MOVE, MoveId.CHILLY_RECEPTION ], + [ 1, MoveId.POWER_GEM ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.SWAGGER ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.CURSE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 9, MoveId.YAWN ], + [ 12, MoveId.CONFUSION ], + [ 15, MoveId.DISABLE ], + [ 18, MoveId.WATER_PULSE ], + [ 21, MoveId.HEADBUTT ], + [ 24, MoveId.ZEN_HEADBUTT ], // Previous Stage Move, Galar Slowking Level + [ 27, MoveId.AMNESIA ], + [ 30, MoveId.SURF ], + [ 33, MoveId.SLACK_OFF ], + [ 36, MoveId.PSYCHIC ], + [ 39, MoveId.PSYCH_UP ], + [ 42, MoveId.RAIN_DANCE ], + [ 45, MoveId.HEAL_PULSE ], + ], + [SpeciesId.MISDREAVUS]: [ + [ 1, MoveId.GROWL ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.PSYWAVE ], + [ 10, MoveId.ASTONISH ], + [ 14, MoveId.CONFUSE_RAY ], + [ 19, MoveId.MEAN_LOOK ], + [ 23, MoveId.HEX ], + [ 28, MoveId.PSYBEAM ], + [ 32, MoveId.PAIN_SPLIT ], + [ 37, MoveId.PAYBACK ], + [ 41, MoveId.SHADOW_BALL ], + [ 46, MoveId.PERISH_SONG ], + [ 50, MoveId.POWER_GEM ], + ], + [SpeciesId.UNOWN]: [ + [ 1, MoveId.HIDDEN_POWER ], + ], + [SpeciesId.WOBBUFFET]: [ + [ EVOLVE_MOVE, MoveId.COUNTER ], + [ EVOLVE_MOVE, MoveId.DESTINY_BOND ], + [ EVOLVE_MOVE, MoveId.SAFEGUARD ], + [ EVOLVE_MOVE, MoveId.MIRROR_COAT ], + [ 1, MoveId.COUNTER ], + [ 1, MoveId.DESTINY_BOND ], + [ 1, MoveId.SAFEGUARD ], + [ 1, MoveId.MIRROR_COAT ], + [ 1, MoveId.AMNESIA ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.ENCORE ], + ], + [SpeciesId.GIRAFARIG]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.POWER_SWAP ], + [ 1, MoveId.GUARD_SWAP ], + [ 5, MoveId.CONFUSION ], + [ 10, MoveId.ASSURANCE ], + [ 14, MoveId.STOMP ], + [ 19, MoveId.PSYBEAM ], + [ 23, MoveId.AGILITY ], + [ 28, MoveId.DOUBLE_HIT ], + [ 32, MoveId.TWIN_BEAM ], + [ 37, MoveId.CRUNCH ], + [ 41, MoveId.BATON_PASS ], + [ 46, MoveId.NASTY_PLOT ], + [ 50, MoveId.PSYCHIC ], + ], + [SpeciesId.PINECO]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.PROTECT ], + [ 6, MoveId.SELF_DESTRUCT ], + [ 9, MoveId.BUG_BITE ], + [ 12, MoveId.TAKE_DOWN ], + [ 17, MoveId.RAPID_SPIN ], + [ 20, MoveId.ROLLOUT ], + [ 23, MoveId.CURSE ], + [ 28, MoveId.SPIKES ], + [ 31, MoveId.PAYBACK ], + [ 34, MoveId.EXPLOSION ], + [ 39, MoveId.IRON_DEFENSE ], + [ 42, MoveId.GYRO_BALL ], + [ 45, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.FORRETRESS]: [ + [ EVOLVE_MOVE, MoveId.HEAVY_SLAM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SELF_DESTRUCT ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.ZAP_CANNON ], + [ 1, MoveId.TOXIC_SPIKES ], + [ 1, MoveId.MAGNET_RISE ], + [ 1, MoveId.BUG_BITE ], + [ 1, MoveId.MIRROR_SHOT ], + [ 12, MoveId.TAKE_DOWN ], + [ 17, MoveId.RAPID_SPIN ], + [ 20, MoveId.ROLLOUT ], + [ 23, MoveId.CURSE ], + [ 28, MoveId.SPIKES ], + [ 32, MoveId.PAYBACK ], + [ 36, MoveId.EXPLOSION ], + [ 42, MoveId.IRON_DEFENSE ], + [ 46, MoveId.GYRO_BALL ], + [ 50, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.DUNSPARCE]: [ + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.TACKLE ], // Custom + [ 4, MoveId.MUD_SLAP ], + [ 8, MoveId.ROLLOUT ], + [ 12, MoveId.GLARE ], + [ 16, MoveId.SCREECH ], + [ 20, MoveId.ANCIENT_POWER ], + [ 24, MoveId.DRILL_RUN ], + [ 28, MoveId.YAWN ], + [ 32, MoveId.HYPER_DRILL ], + [ 36, MoveId.ROOST ], + [ 40, MoveId.DRAGON_RUSH ], + [ 44, MoveId.COIL ], + [ 48, MoveId.DOUBLE_EDGE ], + [ 52, MoveId.ENDEAVOR ], + ], + [SpeciesId.GLIGAR]: [ + [ 1, MoveId.POISON_STING ], + [ 4, MoveId.SAND_ATTACK ], + [ 7, MoveId.HARDEN ], + [ 10, MoveId.KNOCK_OFF ], + [ 13, MoveId.QUICK_ATTACK ], + [ 16, MoveId.FURY_CUTTER ], + [ 19, MoveId.POISON_TAIL ], + [ 22, MoveId.ACROBATICS ], + [ 27, MoveId.SLASH ], + [ 30, MoveId.U_TURN ], + [ 35, MoveId.SCREECH ], + [ 40, MoveId.X_SCISSOR ], + [ 45, MoveId.CRABHAMMER ], + [ 50, MoveId.SWORDS_DANCE ], + ], + [SpeciesId.STEELIX]: [ + [ 1, MoveId.BIND ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.MUD_SPORT ], + [ 1, MoveId.CRUNCH ], + [ 1, MoveId.ROCK_POLISH ], + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.FIRE_FANG ], + [ 4, MoveId.SMACK_DOWN ], + [ 8, MoveId.AUTOTOMIZE ], + [ 12, MoveId.DRAGON_BREATH ], + [ 16, MoveId.CURSE ], + [ 20, MoveId.ROCK_SLIDE ], + [ 22, MoveId.GYRO_BALL ], // Custom from USUM + [ 24, MoveId.SCREECH ], + [ 28, MoveId.SAND_TOMB ], + [ 32, MoveId.STEALTH_ROCK ], + [ 36, MoveId.SLAM ], + [ 40, MoveId.SANDSTORM ], + [ 44, MoveId.DIG ], + [ 48, MoveId.IRON_TAIL ], + [ 52, MoveId.STONE_EDGE ], + [ 56, MoveId.DOUBLE_EDGE ], + [ 60, MoveId.MAGNET_RISE ], + ], + [SpeciesId.SNUBBULL]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.SCARY_FACE ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.FIRE_FANG ], + [ 7, MoveId.BITE ], + [ 13, MoveId.LICK ], + [ 19, MoveId.HEADBUTT ], + [ 25, MoveId.ROAR ], + [ 31, MoveId.LAST_RESORT ], + [ 37, MoveId.PLAY_ROUGH ], + [ 43, MoveId.PAYBACK ], + [ 49, MoveId.CRUNCH ], + ], + [SpeciesId.GRANBULL]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.SCARY_FACE ], + [ 1, MoveId.OUTRAGE ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.FIRE_FANG ], + [ 7, MoveId.BITE ], + [ 13, MoveId.LICK ], + [ 19, MoveId.HEADBUTT ], + [ 27, MoveId.ROAR ], + [ 35, MoveId.LAST_RESORT ], + [ 43, MoveId.PLAY_ROUGH ], + [ 51, MoveId.PAYBACK ], + [ 59, MoveId.CRUNCH ], + ], + [SpeciesId.QWILFISH]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.POISON_STING ], + [ 4, MoveId.HARDEN ], + [ 8, MoveId.WATER_GUN ], + [ 12, MoveId.FELL_STINGER ], + [ 16, MoveId.MINIMIZE ], + [ 20, MoveId.SPIKES ], + [ 24, MoveId.BRINE ], + [ 28, MoveId.POISON_JAB ], + [ 32, MoveId.PIN_MISSILE ], + [ 36, MoveId.TOXIC_SPIKES ], + [ 40, MoveId.STOCKPILE ], + [ 40, MoveId.SPIT_UP ], + [ 44, MoveId.TOXIC ], + [ 48, MoveId.AQUA_TAIL ], + [ 52, MoveId.ACUPRESSURE ], + [ 56, MoveId.DESTINY_BOND ], + ], + [SpeciesId.SCIZOR]: [ + [ EVOLVE_MOVE, MoveId.BULLET_PUNCH ], + [ 1, MoveId.WING_ATTACK ], + [ 1, MoveId.LEER ], + [ 1, MoveId.AGILITY ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.FALSE_SWIPE ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.AIR_SLASH ], + [ 12, MoveId.METAL_CLAW ], + [ 16, MoveId.DOUBLE_TEAM ], + [ 20, MoveId.DOUBLE_HIT ], + [ 24, MoveId.SLASH ], + [ 28, MoveId.FOCUS_ENERGY ], + [ 30, MoveId.STEEL_WING ], // Custom + [ 32, MoveId.IRON_DEFENSE ], + [ 36, MoveId.IRON_HEAD ], + [ 40, MoveId.X_SCISSOR ], + [ 44, MoveId.SWORDS_DANCE ], + ], + [SpeciesId.SHUCKLE]: [ + [ 1, MoveId.WRAP ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.BIDE ], + [ 1, MoveId.CONSTRICT ], + [ 5, MoveId.ROLLOUT ], + [ 10, MoveId.STRUGGLE_BUG ], + [ 15, MoveId.ROCK_THROW ], + [ 20, MoveId.SAFEGUARD ], + [ 25, MoveId.REST ], + [ 30, MoveId.BUG_BITE ], + [ 35, MoveId.GUARD_SPLIT ], + [ 35, MoveId.POWER_SPLIT ], + [ 40, MoveId.ROCK_SLIDE ], + [ 45, MoveId.GASTRO_ACID ], + [ 50, MoveId.STICKY_WEB ], + [ 55, MoveId.POWER_TRICK ], + [ 60, MoveId.STONE_EDGE ], + [ 65, MoveId.SHELL_SMASH ], + ], + [SpeciesId.HERACROSS]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.ARM_THRUST ], + [ 5, MoveId.FURY_ATTACK ], + [ 10, MoveId.ENDURE ], + [ 15, MoveId.AERIAL_ACE ], + [ 20, MoveId.HORN_ATTACK ], + [ 25, MoveId.COUNTER ], + [ 30, MoveId.BRICK_BREAK ], + [ 35, MoveId.PIN_MISSILE ], + [ 40, MoveId.THROAT_CHOP ], + [ 45, MoveId.THRASH ], + [ 50, MoveId.SWORDS_DANCE ], + [ 55, MoveId.MEGAHORN ], + [ 60, MoveId.CLOSE_COMBAT ], + ], + [SpeciesId.SNEASEL]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 6, MoveId.TAUNT ], + [ 12, MoveId.QUICK_ATTACK ], + [ 18, MoveId.METAL_CLAW ], + [ 24, MoveId.ICY_WIND ], + [ 30, MoveId.FURY_SWIPES ], + [ 36, MoveId.HONE_CLAWS ], + [ 42, MoveId.BEAT_UP ], + [ 48, MoveId.AGILITY ], + [ 54, MoveId.SCREECH ], + [ 60, MoveId.SLASH ], + ], + [SpeciesId.TEDDIURSA]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LICK ], + [ 1, MoveId.COVET ], + [ 1, MoveId.FLING ], + [ 1, MoveId.BABY_DOLL_EYES ], + [ 8, MoveId.FURY_SWIPES ], + [ 13, MoveId.PAYBACK ], + [ 17, MoveId.SWEET_SCENT ], + [ 22, MoveId.SLASH ], + [ 25, MoveId.PLAY_NICE ], + [ 29, MoveId.PLAY_ROUGH ], + [ 33, MoveId.CHARM ], + [ 37, MoveId.REST ], + [ 37, MoveId.SNORE ], + [ 41, MoveId.THRASH ], + ], + [SpeciesId.URSARING]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LICK ], + [ 1, MoveId.COVET ], + [ 1, MoveId.FLING ], // Previous Stage Move + [ 1, MoveId.BABY_DOLL_EYES ], // Previous Stage Move + [ 1, MoveId.FAKE_TEARS ], + [ 1, MoveId.CHARM ], // Previous Stage Move + [ 8, MoveId.FURY_SWIPES ], + [ 13, MoveId.PAYBACK ], + [ 17, MoveId.SWEET_SCENT ], + [ 22, MoveId.SLASH ], + [ 25, MoveId.PLAY_NICE ], + [ 29, MoveId.PLAY_ROUGH ], + [ 35, MoveId.SCARY_FACE ], + [ 41, MoveId.REST ], + [ 41, MoveId.SNORE ], + [ 48, MoveId.HIGH_HORSEPOWER ], + [ 56, MoveId.THRASH ], + [ 64, MoveId.HAMMER_ARM ], + ], + [SpeciesId.SLUGMA]: [ + [ 1, MoveId.SMOG ], + [ 1, MoveId.YAWN ], + [ 5, MoveId.EMBER ], // Custom, Moved from Level 6 to 5 + [ 8, MoveId.ROCK_THROW ], + [ 13, MoveId.HARDEN ], + [ 20, MoveId.CLEAR_SMOG ], + [ 22, MoveId.ANCIENT_POWER ], + [ 27, MoveId.INCINERATE ], + [ 29, MoveId.ROCK_SLIDE ], + [ 34, MoveId.LAVA_PLUME ], + [ 36, MoveId.AMNESIA ], + [ 41, MoveId.BODY_SLAM ], + [ 43, MoveId.RECOVER ], + [ 48, MoveId.FLAMETHROWER ], + [ 50, MoveId.EARTH_POWER ], + ], + [SpeciesId.MAGCARGO]: [ + [ EVOLVE_MOVE, MoveId.SHELL_SMASH ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.SMOG ], + [ 1, MoveId.YAWN ], + [ 1, MoveId.EARTH_POWER ], + [ 13, MoveId.HARDEN ], + [ 20, MoveId.CLEAR_SMOG ], + [ 22, MoveId.ANCIENT_POWER ], + [ 27, MoveId.INCINERATE ], + [ 29, MoveId.ROCK_SLIDE ], + [ 34, MoveId.LAVA_PLUME ], + [ 36, MoveId.AMNESIA ], + [ 43, MoveId.BODY_SLAM ], + [ 47, MoveId.RECOVER ], + [ 54, MoveId.FLAMETHROWER ], + ], + [SpeciesId.SWINUB]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.ODOR_SLEUTH ], + [ 5, MoveId.POWDER_SNOW ], + [ 10, MoveId.FLAIL ], + [ 15, MoveId.ICE_SHARD ], + [ 20, MoveId.MIST ], + [ 25, MoveId.ENDURE ], + [ 30, MoveId.ICY_WIND ], + [ 35, MoveId.AMNESIA ], + [ 40, MoveId.TAKE_DOWN ], + [ 45, MoveId.EARTHQUAKE ], + [ 50, MoveId.BLIZZARD ], + ], + [SpeciesId.PILOSWINE]: [ + [ EVOLVE_MOVE, MoveId.ICE_FANG ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.ODOR_SLEUTH ], + [ 1, MoveId.ANCIENT_POWER ], + [ 15, MoveId.ICE_SHARD ], + [ 20, MoveId.MIST ], + [ 25, MoveId.ENDURE ], + [ 30, MoveId.ICY_WIND ], + [ 37, MoveId.AMNESIA ], + [ 44, MoveId.TAKE_DOWN ], + [ 51, MoveId.EARTHQUAKE ], + [ 58, MoveId.BLIZZARD ], + [ 65, MoveId.THRASH ], + ], + [SpeciesId.CORSOLA]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 5, MoveId.WATER_GUN ], + [ 10, MoveId.AQUA_RING ], + [ 15, MoveId.ENDURE ], + [ 20, MoveId.ANCIENT_POWER ], + [ 25, MoveId.BUBBLE_BEAM ], + [ 30, MoveId.FLAIL ], + [ 35, MoveId.LIFE_DEW ], + [ 40, MoveId.POWER_GEM ], + [ 45, MoveId.EARTH_POWER ], + [ 50, MoveId.RECOVER ], + [ 55, MoveId.MIRROR_COAT ], + ], + [SpeciesId.REMORAID]: [ + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.HELPING_HAND ], + [ 4, MoveId.WATER_PULSE ], + [ 8, MoveId.FOCUS_ENERGY ], + [ 12, MoveId.PSYBEAM ], + [ 16, MoveId.AURORA_BEAM ], + [ 20, MoveId.BUBBLE_BEAM ], + [ 24, MoveId.LOCK_ON ], + [ 28, MoveId.BULLET_SEED ], + [ 32, MoveId.ICE_BEAM ], + [ 36, MoveId.HYDRO_PUMP ], + [ 40, MoveId.SOAK ], + [ 44, MoveId.HYPER_BEAM ], + ], + [SpeciesId.OCTILLERY]: [ + [ EVOLVE_MOVE, MoveId.OCTAZOOKA ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.CONSTRICT ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.ROCK_BLAST ], + [ 1, MoveId.WATER_PULSE ], + [ 1, MoveId.GUNK_SHOT ], + [ 12, MoveId.PSYBEAM ], + [ 16, MoveId.AURORA_BEAM ], + [ 20, MoveId.BUBBLE_BEAM ], + [ 24, MoveId.LOCK_ON ], + [ 30, MoveId.BULLET_SEED ], + [ 36, MoveId.ICE_BEAM ], + [ 42, MoveId.HYDRO_PUMP ], + [ 48, MoveId.SOAK ], + [ 54, MoveId.HYPER_BEAM ], + ], + [SpeciesId.DELIBIRD]: [ // Given a custom level up learnset + [ 1, MoveId.PRESENT ], + [ 1, MoveId.METRONOME ], + [ 5, MoveId.FAKE_OUT ], + [ 5, MoveId.POWDER_SNOW ], + [ 6, MoveId.MIST ], + [ 10, MoveId.ICE_SHARD ], + [ 15, MoveId.AERIAL_ACE ], + [ 20, MoveId.ICY_WIND ], + [ 25, MoveId.DRILL_PECK ], + [ 30, MoveId.ICE_PUNCH ], + [ 35, MoveId.HAZE ], + [ 40, MoveId.AIR_SLASH ], + [ 45, MoveId.TAILWIND ], + [ 50, MoveId.SNOWSCAPE ], + [ 55, MoveId.BLIZZARD ], + [ 60, MoveId.BRAVE_BIRD ], + ], + [SpeciesId.MANTINE]: [ + [ 1, MoveId.WING_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.PSYBEAM ], + [ 1, MoveId.SIGNAL_BEAM ], + [ 1, MoveId.BULLET_SEED ], + [ 1, MoveId.ROOST ], + [ 12, MoveId.WATER_PULSE ], + [ 16, MoveId.WIDE_GUARD ], + [ 20, MoveId.AGILITY ], + [ 24, MoveId.BUBBLE_BEAM ], + [ 28, MoveId.HEADBUTT ], + [ 32, MoveId.AIR_SLASH ], + [ 36, MoveId.AQUA_RING ], + [ 40, MoveId.BOUNCE ], + [ 44, MoveId.TAKE_DOWN ], + [ 48, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.SKARMORY]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 4, MoveId.SAND_ATTACK ], + [ 8, MoveId.FURY_ATTACK ], + [ 12, MoveId.METAL_CLAW ], + [ 16, MoveId.AGILITY ], + [ 20, MoveId.WING_ATTACK ], + [ 24, MoveId.SLASH ], + [ 28, MoveId.STEEL_WING ], + [ 32, MoveId.PAYBACK ], + [ 36, MoveId.DRILL_PECK ], + [ 40, MoveId.METAL_SOUND ], + [ 44, MoveId.SPIKES ], + [ 48, MoveId.IRON_DEFENSE ], + [ 52, MoveId.BRAVE_BIRD ], + ], + [SpeciesId.HOUNDOUR]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 4, MoveId.HOWL ], + [ 8, MoveId.SMOG ], + [ 13, MoveId.ROAR ], + [ 16, MoveId.BITE ], + [ 20, MoveId.INCINERATE ], + [ 25, MoveId.BEAT_UP ], + [ 28, MoveId.FIRE_FANG ], + [ 32, MoveId.TORMENT ], + [ 37, MoveId.COMEUPPANCE ], + [ 40, MoveId.FOUL_PLAY ], + [ 44, MoveId.FLAMETHROWER ], + [ 49, MoveId.CRUNCH ], + [ 52, MoveId.NASTY_PLOT ], + [ 56, MoveId.INFERNO ], + ], + [SpeciesId.HOUNDOOM]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.SMOG ], + [ 1, MoveId.HOWL ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.THUNDER_FANG ], + [ 13, MoveId.ROAR ], + [ 16, MoveId.BITE ], + [ 20, MoveId.INCINERATE ], + [ 26, MoveId.BEAT_UP ], + [ 30, MoveId.FIRE_FANG ], + [ 35, MoveId.TORMENT ], + [ 41, MoveId.COMEUPPANCE ], + [ 45, MoveId.FOUL_PLAY ], + [ 50, MoveId.FLAMETHROWER ], + [ 56, MoveId.CRUNCH ], + [ 62, MoveId.INFERNO ], + ], + [SpeciesId.KINGDRA]: [ + [ RELEARN_MOVE, MoveId.LASER_FOCUS ], // Previous Stage Move + [ 1, MoveId.LEER ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.TWISTER ], + [ 1, MoveId.WHIRLPOOL ], + [ 1, MoveId.YAWN ], + [ 15, MoveId.FOCUS_ENERGY ], + [ 20, MoveId.DRAGON_BREATH ], + [ 25, MoveId.BUBBLE_BEAM ], + [ 30, MoveId.AGILITY ], + [ 37, MoveId.WATER_PULSE ], + [ 44, MoveId.DRAGON_PULSE ], + [ 51, MoveId.HYDRO_PUMP ], + [ 58, MoveId.DRAGON_DANCE ], + [ 65, MoveId.RAIN_DANCE ], + [ 72, MoveId.WAVE_CRASH ], + ], + [SpeciesId.PHANPY]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.ODOR_SLEUTH ], + [ 6, MoveId.FLAIL ], + [ 10, MoveId.ROLLOUT ], + [ 15, MoveId.BULLDOZE ], + [ 19, MoveId.ENDURE ], + [ 24, MoveId.SLAM ], + [ 28, MoveId.TAKE_DOWN ], + [ 33, MoveId.CHARM ], + [ 37, MoveId.LAST_RESORT ], + [ 42, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.DONPHAN]: [ + [ EVOLVE_MOVE, MoveId.FURY_ATTACK ], + [ 1, MoveId.TACKLE ], // Previous Stage Move + [ 1, MoveId.GROWL ], + [ 1, MoveId.HORN_ATTACK ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.ODOR_SLEUTH ], // Previous Stage Move + [ 1, MoveId.FLAIL ], // Previous Stage Move + [ 1, MoveId.ENDURE ], // Previous Stage Move + [ 1, MoveId.TAKE_DOWN ], // Previous Stage Move + [ 1, MoveId.CHARM ], // Previous Stage Move + [ 1, MoveId.LAST_RESORT ], // Previous Stage Move + [ 1, MoveId.DOUBLE_EDGE ], // Previous Stage Move + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.FIRE_FANG ], + [ 1, MoveId.BULLDOZE ], + [ 6, MoveId.RAPID_SPIN ], + [ 10, MoveId.ROLLOUT ], + [ 15, MoveId.ASSURANCE ], + [ 19, MoveId.KNOCK_OFF ], + [ 24, MoveId.SLAM ], + [ 30, MoveId.STOMPING_TANTRUM ], + [ 37, MoveId.SCARY_FACE ], + [ 43, MoveId.EARTHQUAKE ], + [ 50, MoveId.GIGA_IMPACT ], + ], + [SpeciesId.PORYGON2]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.CONVERSION ], + [ 1, MoveId.RECYCLE ], + [ 1, MoveId.MAGNET_RISE ], + [ 1, MoveId.MAGIC_COAT ], // Previous Stage Move + [ 15, MoveId.THUNDER_SHOCK ], + [ 20, MoveId.PSYBEAM ], + [ 25, MoveId.CONVERSION_2 ], + [ 30, MoveId.AGILITY ], + [ 35, MoveId.RECOVER ], + [ 40, MoveId.DISCHARGE ], + [ 45, MoveId.TRI_ATTACK ], + [ 50, MoveId.LOCK_ON ], + [ 55, MoveId.ZAP_CANNON ], + [ 60, MoveId.HYPER_BEAM ], + ], + [SpeciesId.STANTLER]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.ME_FIRST ], + [ 3, MoveId.LEER ], + [ 7, MoveId.ASTONISH ], + [ 10, MoveId.HYPNOSIS ], + [ 13, MoveId.STOMP ], + [ 16, MoveId.SAND_ATTACK ], + [ 21, MoveId.TAKE_DOWN ], + [ 23, MoveId.CONFUSE_RAY ], + [ 25, MoveId.PSYSHIELD_BASH ], + [ 27, MoveId.CALM_MIND ], + [ 32, MoveId.ROLE_PLAY ], + [ 37, MoveId.ZEN_HEADBUTT ], + [ 49, MoveId.IMPRISON ], + [ 55, MoveId.DOUBLE_EDGE ], ], // Reverting Smeargle back to pre gen9 implementation, to make it less dependent on access to Memory Mushrooms - [Species.SMEARGLE]: [ - [ 1, Moves.SKETCH ], - [ 11, Moves.SKETCH ], - [ 21, Moves.SKETCH ], - [ 31, Moves.SKETCH ], - [ 41, Moves.SKETCH ], - [ 51, Moves.SKETCH ], - [ 61, Moves.SKETCH ], - [ 71, Moves.SKETCH ], - [ 81, Moves.SKETCH ], - [ 91, Moves.SKETCH ], - ], - [Species.TYROGUE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.HELPING_HAND ], - [ 10, Moves.LOW_SWEEP ], // Custom - [ 10, Moves.MACH_PUNCH ], // Custom - [ 10, Moves.RAPID_SPIN ], // Custom - ], - [Species.HITMONTOP]: [ - [ EVOLVE_MOVE, Moves.TRIPLE_KICK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.FEINT ], - [ 1, Moves.PURSUIT ], - [ 1, Moves.ROLLING_KICK ], - [ 1, Moves.LOW_SWEEP ], // Previous Stage Move, Custom - [ 1, Moves.MACH_PUNCH ], // Previous Stage Move, Custom - [ 4, Moves.QUICK_ATTACK ], - [ 8, Moves.GYRO_BALL ], - [ 12, Moves.DETECT ], - [ 16, Moves.REVENGE ], - [ 21, Moves.WIDE_GUARD ], - [ 21, Moves.QUICK_GUARD ], - [ 24, Moves.SUCKER_PUNCH ], - [ 28, Moves.AGILITY ], - [ 32, Moves.DIG ], - [ 36, Moves.CLOSE_COMBAT ], - [ 40, Moves.COUNTER ], - [ 44, Moves.ENDEAVOR ], - ], - [Species.SMOOCHUM]: [ - [ 1, Moves.POUND ], - [ 1, Moves.LICK ], - [ 4, Moves.POWDER_SNOW ], - [ 8, Moves.COPYCAT ], - [ 12, Moves.CONFUSION ], - [ 16, Moves.COVET ], - [ 20, Moves.SING ], - [ 24, Moves.FAKE_TEARS ], - [ 28, Moves.ICE_PUNCH ], - [ 32, Moves.PSYCHIC ], - [ 36, Moves.SWEET_KISS ], - [ 40, Moves.MEAN_LOOK ], - [ 44, Moves.PERISH_SONG ], - [ 48, Moves.BLIZZARD ], - ], - [Species.ELEKID]: [ - [ 1, Moves.LEER ], - [ 1, Moves.QUICK_ATTACK ], - [ 4, Moves.THUNDER_SHOCK ], - [ 8, Moves.CHARGE ], - [ 12, Moves.SWIFT ], - [ 16, Moves.SHOCK_WAVE ], - [ 20, Moves.THUNDER_WAVE ], - [ 24, Moves.SCREECH ], - [ 28, Moves.THUNDER_PUNCH ], - [ 32, Moves.DISCHARGE ], - [ 36, Moves.LOW_KICK ], - [ 40, Moves.THUNDERBOLT ], - [ 44, Moves.LIGHT_SCREEN ], - [ 48, Moves.THUNDER ], - ], - [Species.MAGBY]: [ - [ 1, Moves.LEER ], - [ 1, Moves.SMOG ], - [ 4, Moves.EMBER ], - [ 8, Moves.SMOKESCREEN ], - [ 12, Moves.CLEAR_SMOG ], - [ 16, Moves.FLAME_WHEEL ], - [ 20, Moves.CONFUSE_RAY ], - [ 24, Moves.SCARY_FACE ], - [ 28, Moves.FIRE_PUNCH ], - [ 32, Moves.LAVA_PLUME ], - [ 36, Moves.LOW_KICK ], - [ 40, Moves.FLAMETHROWER ], - [ 44, Moves.SUNNY_DAY ], - [ 48, Moves.FIRE_BLAST ], - ], - [Species.MILTANK]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 5, Moves.ROLLOUT ], - [ 10, Moves.DEFENSE_CURL ], - [ 15, Moves.STOMP ], - [ 20, Moves.HEAL_BELL ], - [ 25, Moves.HEADBUTT ], - [ 30, Moves.ZEN_HEADBUTT ], - [ 35, Moves.MILK_DRINK ], - [ 40, Moves.BODY_SLAM ], - [ 45, Moves.PLAY_ROUGH ], - [ 50, Moves.CHARM ], - [ 55, Moves.HIGH_HORSEPOWER ], - ], - [Species.BLISSEY]: [ - [ 1, Moves.POUND ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.COVET ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.DISARMING_VOICE ], - [ 4, Moves.TAIL_WHIP ], - [ 8, Moves.ECHOED_VOICE ], - [ 12, Moves.LIFE_DEW ], - [ 16, Moves.SING ], - [ 20, Moves.FLING ], - [ 24, Moves.TAKE_DOWN ], - [ 28, Moves.HEAL_PULSE ], - [ 32, Moves.HELPING_HAND ], - [ 36, Moves.LIGHT_SCREEN ], - [ 40, Moves.DOUBLE_EDGE ], - [ 44, Moves.SOFT_BOILED ], - [ 48, Moves.LAST_RESORT ], - [ 52, Moves.HEALING_WISH ], - ], - [Species.RAIKOU]: [ - [ 1, Moves.LEER ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.EXTREME_SPEED ], - [ 1, Moves.CHARGE ], - [ 6, Moves.SPARK ], - [ 12, Moves.BITE ], - [ 18, Moves.CALM_MIND ], - [ 24, Moves.ROAR ], - [ 30, Moves.THUNDER_FANG ], - [ 36, Moves.HOWL ], - [ 42, Moves.CRUNCH ], - [ 48, Moves.EXTRASENSORY ], - [ 54, Moves.DISCHARGE ], - [ 60, Moves.REFLECT ], - [ 66, Moves.RAIN_DANCE ], - [ 72, Moves.THUNDER ], - [ 78, Moves.ZAP_CANNON ], - ], - [Species.ENTEI]: [ - [ RELEARN_MOVE, Moves.SACRED_FIRE ], - [ RELEARN_MOVE, Moves.EXTREME_SPEED ], - [ 1, Moves.STOMP ], - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 1, Moves.SMOKESCREEN ], - [ 6, Moves.FLAME_WHEEL ], - [ 12, Moves.BITE ], - [ 18, Moves.CALM_MIND ], - [ 24, Moves.ROAR ], - [ 30, Moves.FIRE_FANG ], - [ 36, Moves.SCARY_FACE ], - [ 42, Moves.CRUNCH ], - [ 48, Moves.EXTRASENSORY ], - [ 54, Moves.LAVA_PLUME ], - [ 60, Moves.SWAGGER ], - [ 66, Moves.SUNNY_DAY ], - [ 72, Moves.FIRE_BLAST ], - [ 78, Moves.ERUPTION ], - ], - [Species.SUICUNE]: [ - [ RELEARN_MOVE, Moves.EXTREME_SPEED ], - [ RELEARN_MOVE, Moves.SHEER_COLD ], - [ 1, Moves.GUST ], - [ 1, Moves.LEER ], - [ 1, Moves.MIST ], - [ 1, Moves.WATER_GUN ], - [ 6, Moves.WATER_PULSE ], - [ 12, Moves.BITE ], - [ 18, Moves.CALM_MIND ], - [ 24, Moves.ROAR ], - [ 30, Moves.ICE_FANG ], - [ 36, Moves.TAILWIND ], - [ 42, Moves.CRUNCH ], - [ 48, Moves.EXTRASENSORY ], - [ 54, Moves.SURF ], - [ 60, Moves.MIRROR_COAT ], - [ 66, Moves.RAIN_DANCE ], - [ 72, Moves.HYDRO_PUMP ], - [ 78, Moves.BLIZZARD ], - ], - [Species.LARVITAR]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 3, Moves.ROCK_THROW ], - [ 6, Moves.PAYBACK ], - [ 9, Moves.BITE ], - [ 12, Moves.SCARY_FACE ], - [ 15, Moves.ROCK_SLIDE ], - [ 18, Moves.STOMPING_TANTRUM ], - [ 21, Moves.SCREECH ], - [ 24, Moves.SMACK_DOWN ], - [ 27, Moves.CRUNCH ], - [ 31, Moves.EARTHQUAKE ], - [ 33, Moves.STONE_EDGE ], - [ 36, Moves.THRASH ], - [ 39, Moves.SANDSTORM ], - [ 42, Moves.HYPER_BEAM ], - ], - [Species.PUPITAR]: [ - [ EVOLVE_MOVE, Moves.IRON_DEFENSE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.PAYBACK ], - [ 9, Moves.BITE ], - [ 12, Moves.SCARY_FACE ], - [ 15, Moves.ROCK_SLIDE ], - [ 18, Moves.STOMPING_TANTRUM ], - [ 21, Moves.SCREECH ], - [ 24, Moves.SMACK_DOWN ], - [ 27, Moves.CRUNCH ], - [ 33, Moves.EARTHQUAKE ], - [ 37, Moves.STONE_EDGE ], - [ 42, Moves.THRASH ], - [ 47, Moves.SANDSTORM ], - [ 52, Moves.HYPER_BEAM ], - ], - [Species.TYRANITAR]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.IRON_DEFENSE ], - [ 1, Moves.PAYBACK ], - [ 1, Moves.DARK_PULSE ], - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.FIRE_FANG ], - [ 9, Moves.BITE ], - [ 12, Moves.SCARY_FACE ], - [ 15, Moves.ROCK_SLIDE ], - [ 18, Moves.STOMPING_TANTRUM ], - [ 21, Moves.SCREECH ], - [ 24, Moves.SMACK_DOWN ], - [ 27, Moves.CRUNCH ], - [ 33, Moves.EARTHQUAKE ], - [ 37, Moves.STONE_EDGE ], - [ 42, Moves.THRASH ], - [ 47, Moves.SANDSTORM ], - [ 52, Moves.HYPER_BEAM ], - [ 59, Moves.GIGA_IMPACT ], - ], - [Species.LUGIA]: [ - [ RELEARN_MOVE, Moves.DRAGON_RUSH ], - [ 1, Moves.GUST ], - [ 1, Moves.WHIRLWIND ], - [ 1, Moves.ANCIENT_POWER ], - [ 1, Moves.WEATHER_BALL ], - [ 9, Moves.MIST ], - [ 18, Moves.SAFEGUARD ], - [ 27, Moves.CALM_MIND ], - [ 36, Moves.EXTRASENSORY ], - [ 45, Moves.RECOVER ], - [ 54, Moves.AEROBLAST ], - [ 63, Moves.RAIN_DANCE ], - [ 72, Moves.HYDRO_PUMP ], - [ 81, Moves.FUTURE_SIGHT ], - [ 90, Moves.SKY_ATTACK ], - ], - [Species.HO_OH]: [ - [ 1, Moves.GUST ], - [ 1, Moves.WHIRLWIND ], - [ 1, Moves.ANCIENT_POWER ], - [ 1, Moves.WEATHER_BALL ], - [ 9, Moves.LIFE_DEW ], - [ 18, Moves.SAFEGUARD ], - [ 27, Moves.CALM_MIND ], - [ 36, Moves.EXTRASENSORY ], - [ 45, Moves.RECOVER ], - [ 54, Moves.SACRED_FIRE ], - [ 63, Moves.SUNNY_DAY ], - [ 72, Moves.FIRE_BLAST ], - [ 81, Moves.FUTURE_SIGHT ], - [ 90, Moves.SKY_ATTACK ], - [ 99, Moves.OVERHEAT ], - ], - [Species.CELEBI]: [ - [ 1, Moves.CONFUSION ], - [ 1, Moves.HEAL_BELL ], - [ 10, Moves.MAGICAL_LEAF ], - [ 20, Moves.BATON_PASS ], - [ 30, Moves.ANCIENT_POWER ], - [ 40, Moves.LIFE_DEW ], - [ 50, Moves.LEECH_SEED ], - [ 55, Moves.HEAL_BLOCK ], - [ 60, Moves.RECOVER ], - [ 70, Moves.FUTURE_SIGHT ], - [ 80, Moves.HEALING_WISH ], - [ 90, Moves.LEAF_STORM ], - [ 100, Moves.PERISH_SONG ], - ], - [Species.TREECKO]: [ - [ 1, Moves.POUND ], - [ 1, Moves.LEER ], - [ 3, Moves.LEAFAGE ], - [ 6, Moves.QUICK_ATTACK ], - [ 9, Moves.MEGA_DRAIN ], - [ 12, Moves.DETECT ], - [ 15, Moves.QUICK_GUARD ], - [ 18, Moves.ASSURANCE ], - [ 21, Moves.GIGA_DRAIN ], - [ 24, Moves.SLAM ], - [ 27, Moves.DOUBLE_TEAM ], - [ 30, Moves.ENERGY_BALL ], - [ 33, Moves.SCREECH ], - [ 36, Moves.ENDEAVOR ], - [ 39, Moves.LEAF_STORM ], - ], - [Species.GROVYLE]: [ - [ RELEARN_MOVE, Moves.FALSE_SWIPE ], - [ RELEARN_MOVE, Moves.FURY_CUTTER ], - [ RELEARN_MOVE, Moves.X_SCISSOR ], - [ RELEARN_MOVE, Moves.ENERGY_BALL ], - [ 1, Moves.POUND ], - [ 1, Moves.LEER ], - [ 1, Moves.LEAFAGE ], - [ 1, Moves.QUICK_ATTACK ], - [ 9, Moves.MEGA_DRAIN ], - [ 12, Moves.DETECT ], - [ 15, Moves.QUICK_GUARD ], - [ 20, Moves.ASSURANCE ], - [ 25, Moves.GIGA_DRAIN ], - [ 30, Moves.SLAM ], - [ 35, Moves.DOUBLE_TEAM ], - [ 40, Moves.LEAF_BLADE ], - [ 45, Moves.SCREECH ], - [ 50, Moves.ENDEAVOR ], - [ 55, Moves.LEAF_STORM ], - ], - [Species.SCEPTILE]: [ - [ EVOLVE_MOVE, Moves.LEAF_BLADE ], - [ RELEARN_MOVE, Moves.FALSE_SWIPE ], - [ RELEARN_MOVE, Moves.FURY_CUTTER ], - [ RELEARN_MOVE, Moves.X_SCISSOR ], - [ RELEARN_MOVE, Moves.ENERGY_BALL ], - [ RELEARN_MOVE, Moves.SHED_TAIL ], - [ 1, Moves.POUND ], - [ 1, Moves.LEER ], - [ 1, Moves.LEAFAGE ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.DUAL_CHOP ], - [ 5, Moves.MEGA_DRAIN ], - [ 12, Moves.DETECT ], - [ 15, Moves.QUICK_GUARD ], - [ 20, Moves.ASSURANCE ], - [ 25, Moves.GIGA_DRAIN ], - [ 30, Moves.SLAM ], - [ 35, Moves.DOUBLE_TEAM ], - [ 42, Moves.SCREECH ], - [ 49, Moves.ENDEAVOR ], - [ 56, Moves.LEAF_STORM ], - ], - [Species.TORCHIC]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 3, Moves.EMBER ], - [ 6, Moves.QUICK_ATTACK ], - [ 9, Moves.FLAME_CHARGE ], - [ 12, Moves.DETECT ], - [ 15, Moves.SAND_ATTACK ], - [ 18, Moves.AERIAL_ACE ], - [ 21, Moves.SLASH ], - [ 24, Moves.BOUNCE ], - [ 27, Moves.FOCUS_ENERGY ], - [ 30, Moves.FLAMETHROWER ], - [ 33, Moves.FEATHER_DANCE ], - [ 36, Moves.REVERSAL ], - [ 39, Moves.FLARE_BLITZ ], - ], - [Species.COMBUSKEN]: [ - [ EVOLVE_MOVE, Moves.DOUBLE_KICK ], - [ RELEARN_MOVE, Moves.FLAMETHROWER ], - [ RELEARN_MOVE, Moves.FEATHER_DANCE ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 1, Moves.EMBER ], - [ 1, Moves.QUICK_ATTACK ], - [ 9, Moves.FLAME_CHARGE ], - [ 12, Moves.DETECT ], - [ 15, Moves.SAND_ATTACK ], - [ 20, Moves.AERIAL_ACE ], - [ 25, Moves.SLASH ], - [ 30, Moves.BOUNCE ], - [ 35, Moves.FOCUS_ENERGY ], - [ 40, Moves.BLAZE_KICK ], - [ 45, Moves.BULK_UP ], - [ 50, Moves.REVERSAL ], - [ 55, Moves.FLARE_BLITZ ], - ], - [Species.BLAZIKEN]: [ - [ EVOLVE_MOVE, Moves.BLAZE_KICK ], - [ RELEARN_MOVE, Moves.FIRE_PUNCH ], - [ RELEARN_MOVE, Moves.EMBER ], - [ RELEARN_MOVE, Moves.FLAMETHROWER ], - [ RELEARN_MOVE, Moves.FEATHER_DANCE ], - [ 1, Moves.DOUBLE_KICK ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 1, Moves.QUICK_ATTACK ], - [ 9, Moves.FLAME_CHARGE ], - [ 12, Moves.DETECT ], - [ 15, Moves.SAND_ATTACK ], - [ 20, Moves.AERIAL_ACE ], - [ 25, Moves.SLASH ], - [ 30, Moves.BOUNCE ], - [ 35, Moves.FOCUS_ENERGY ], - [ 42, Moves.BULK_UP ], - [ 49, Moves.REVERSAL ], - [ 56, Moves.FLARE_BLITZ ], - [ 63, Moves.BRAVE_BIRD ], - ], - [Species.MUDKIP]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 3, Moves.WATER_GUN ], - [ 6, Moves.ROCK_SMASH ], - [ 9, Moves.ROCK_THROW ], - [ 12, Moves.PROTECT ], - [ 15, Moves.SUPERSONIC ], - [ 18, Moves.WATER_PULSE ], - [ 21, Moves.ROCK_SLIDE ], - [ 24, Moves.TAKE_DOWN ], - [ 27, Moves.AMNESIA ], - [ 30, Moves.SURF ], - [ 33, Moves.SCREECH ], - [ 36, Moves.ENDEAVOR ], - [ 39, Moves.HYDRO_PUMP ], - ], - [Species.MARSHTOMP]: [ - [ EVOLVE_MOVE, Moves.MUD_SHOT ], - [ RELEARN_MOVE, Moves.SURF ], // Previous Stage Move - [ RELEARN_MOVE, Moves.ROCK_SMASH ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 9, Moves.ROCK_THROW ], - [ 12, Moves.PROTECT ], - [ 15, Moves.SUPERSONIC ], - [ 20, Moves.WATER_PULSE ], - [ 25, Moves.ROCK_SLIDE ], - [ 30, Moves.TAKE_DOWN ], - [ 35, Moves.AMNESIA ], - [ 40, Moves.MUDDY_WATER ], - [ 45, Moves.SCREECH ], - [ 50, Moves.ENDEAVOR ], - [ 55, Moves.HYDRO_PUMP ], - ], - [Species.SWAMPERT]: [ - [ RELEARN_MOVE, Moves.SURF ], - [ RELEARN_MOVE, Moves.EARTHQUAKE ], - [ RELEARN_MOVE, Moves.ROCK_SMASH ], - [ RELEARN_MOVE, Moves.HAMMER_ARM ], - [ 1, Moves.MUD_SHOT ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 9, Moves.ROCK_THROW ], - [ 12, Moves.PROTECT ], - [ 15, Moves.SUPERSONIC ], - [ 20, Moves.WATER_PULSE ], - [ 25, Moves.ROCK_SLIDE ], - [ 30, Moves.TAKE_DOWN ], - [ 35, Moves.AMNESIA ], - [ 42, Moves.MUDDY_WATER ], - [ 49, Moves.SCREECH ], - [ 56, Moves.ENDEAVOR ], - [ 63, Moves.HYDRO_PUMP ], - ], - [Species.POOCHYENA]: [ - [ 1, Moves.TACKLE ], - [ 4, Moves.HOWL ], - [ 7, Moves.SAND_ATTACK ], - [ 10, Moves.BITE ], - [ 13, Moves.LEER ], - [ 16, Moves.ROAR ], - [ 19, Moves.SWAGGER ], - [ 22, Moves.ASSURANCE ], - [ 25, Moves.SCARY_FACE ], - [ 28, Moves.TAUNT ], - [ 31, Moves.CRUNCH ], - [ 34, Moves.YAWN ], - [ 36, Moves.TAKE_DOWN ], - [ 40, Moves.SUCKER_PUNCH ], - [ 44, Moves.PLAY_ROUGH ], - ], - [Species.MIGHTYENA]: [ - [ EVOLVE_MOVE, Moves.SNARL ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.BITE ], - [ 1, Moves.THIEF ], - [ 1, Moves.CRUNCH ], - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.FIRE_FANG ], - [ 13, Moves.LEER ], - [ 13, Moves.HOWL ], - [ 16, Moves.ROAR ], - [ 20, Moves.SWAGGER ], - [ 24, Moves.ASSURANCE ], - [ 28, Moves.SCARY_FACE ], - [ 36, Moves.TAUNT ], - [ 44, Moves.YAWN ], - [ 48, Moves.TAKE_DOWN ], - [ 52, Moves.SUCKER_PUNCH ], - [ 56, Moves.PLAY_ROUGH ], - ], - [Species.ZIGZAGOON]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 3, Moves.SAND_ATTACK ], - [ 6, Moves.TAIL_WHIP ], - [ 9, Moves.COVET ], - [ 12, Moves.HEADBUTT ], - [ 15, Moves.BABY_DOLL_EYES ], - [ 18, Moves.PIN_MISSILE ], - [ 21, Moves.REST ], - [ 24, Moves.TAKE_DOWN ], - [ 27, Moves.FLING ], - [ 30, Moves.FLAIL ], - [ 33, Moves.BELLY_DRUM ], - [ 36, Moves.DOUBLE_EDGE ], - ], - [Species.LINOONE]: [ - [ EVOLVE_MOVE, Moves.SLASH ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.PIN_MISSILE ], - [ 1, Moves.GROWL ], - [ 1, Moves.SWITCHEROO ], - [ 1, Moves.BABY_DOLL_EYES ], - [ 1, Moves.ROTOTILLER ], - [ 9, Moves.COVET ], - [ 12, Moves.HEADBUTT ], - [ 15, Moves.HONE_CLAWS ], - [ 18, Moves.FURY_SWIPES ], - [ 23, Moves.REST ], - [ 28, Moves.TAKE_DOWN ], - [ 33, Moves.FLING ], - [ 38, Moves.FLAIL ], - [ 43, Moves.BELLY_DRUM ], - [ 48, Moves.DOUBLE_EDGE ], - ], - [Species.WURMPLE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.STRING_SHOT ], - [ 5, Moves.POISON_STING ], - [ 15, Moves.BUG_BITE ], - ], - [Species.SILCOON]: [ - [ EVOLVE_MOVE, Moves.HARDEN ], - [ RELEARN_MOVE, Moves.TACKLE ], // Previous Stage Move - [ RELEARN_MOVE, Moves.STRING_SHOT ], // Previous Stage Move - [ RELEARN_MOVE, Moves.POISON_STING ], // Previous Stage Move - [ RELEARN_MOVE, Moves.BUG_BITE ], // Previous Stage Move - [ 1, Moves.HARDEN ], - ], - [Species.BEAUTIFLY]: [ - [ EVOLVE_MOVE, Moves.GUST ], - [ 1, Moves.TACKLE ], // Previous Stage Move - [ 1, Moves.BUG_BITE ], - [ 1, Moves.GUST ], - [ 1, Moves.HARDEN ], - [ 1, Moves.STRING_SHOT ], - [ 1, Moves.POISON_STING ], - [ 12, Moves.ABSORB ], - [ 15, Moves.STUN_SPORE ], - [ 17, Moves.MORNING_SUN ], - [ 20, Moves.AIR_CUTTER ], - [ 22, Moves.MEGA_DRAIN ], - [ 25, Moves.LEECH_LIFE ], - [ 27, Moves.ATTRACT ], - [ 30, Moves.WHIRLWIND ], - [ 32, Moves.GIGA_DRAIN ], - [ 35, Moves.BUG_BUZZ ], - [ 37, Moves.PROTECT ], - [ 40, Moves.QUIVER_DANCE ], - ], - [Species.CASCOON]: [ - [ EVOLVE_MOVE, Moves.HARDEN ], - [ RELEARN_MOVE, Moves.TACKLE ], // Previous Stage Move - [ RELEARN_MOVE, Moves.STRING_SHOT ], // Previous Stage Move - [ RELEARN_MOVE, Moves.POISON_STING ], // Previous Stage Move - [ RELEARN_MOVE, Moves.BUG_BITE ], // Previous Stage Move - [ 1, Moves.HARDEN ], - ], - [Species.DUSTOX]: [ - [ EVOLVE_MOVE, Moves.GUST ], - [ 1, Moves.TACKLE ], // Previous Stage Move - [ 1, Moves.BUG_BITE ], - [ 1, Moves.GUST ], - [ 1, Moves.HARDEN ], - [ 1, Moves.STRING_SHOT ], - [ 1, Moves.POISON_STING ], - [ 12, Moves.CONFUSION ], - [ 15, Moves.POISON_POWDER ], - [ 17, Moves.MOONLIGHT ], - [ 20, Moves.VENOSHOCK ], - [ 22, Moves.PSYBEAM ], - [ 25, Moves.LEECH_LIFE ], - [ 27, Moves.LIGHT_SCREEN ], - [ 30, Moves.WHIRLWIND ], - [ 32, Moves.TOXIC ], - [ 35, Moves.BUG_BUZZ ], - [ 37, Moves.PROTECT ], - [ 40, Moves.QUIVER_DANCE ], - ], - [Species.LOTAD]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.ASTONISH ], - [ 3, Moves.ABSORB ], - [ 6, Moves.WATER_GUN ], - [ 9, Moves.MIST ], - [ 12, Moves.MEGA_DRAIN ], - [ 16, Moves.FLAIL ], - [ 20, Moves.BUBBLE_BEAM ], - [ 24, Moves.LEECH_SEED ], - [ 28, Moves.GIGA_DRAIN ], - [ 33, Moves.RAIN_DANCE ], - [ 38, Moves.ZEN_HEADBUTT ], - [ 43, Moves.ENERGY_BALL ], - ], - [Species.LOMBRE]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.ABSORB ], - [ 1, Moves.FLAIL ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.RAIN_DANCE ], // Previous Stage Move - [ 1, Moves.KNOCK_OFF ], - [ 1, Moves.TEETER_DANCE ], - [ 1, Moves.ASTONISH ], - [ 9, Moves.MIST ], - [ 12, Moves.MEGA_DRAIN ], - [ 18, Moves.FURY_SWIPES ], - [ 24, Moves.BUBBLE_BEAM ], - [ 30, Moves.LEECH_SEED ], - [ 36, Moves.GIGA_DRAIN ], - [ 50, Moves.ZEN_HEADBUTT ], - [ 57, Moves.ENERGY_BALL ], - [ 64, Moves.HYDRO_PUMP ], - ], - [Species.LUDICOLO]: [ - [ RELEARN_MOVE, Moves.GROWL ], - [ RELEARN_MOVE, Moves.MIST ], - [ RELEARN_MOVE, Moves.WATER_GUN ], - [ RELEARN_MOVE, Moves.HYDRO_PUMP ], - [ RELEARN_MOVE, Moves.ABSORB ], - [ RELEARN_MOVE, Moves.MEGA_DRAIN ], - [ RELEARN_MOVE, Moves.FURY_SWIPES ], - [ RELEARN_MOVE, Moves.FLAIL ], - [ RELEARN_MOVE, Moves.KNOCK_OFF ], - [ RELEARN_MOVE, Moves.TEETER_DANCE ], - [ RELEARN_MOVE, Moves.ASTONISH ], - [ RELEARN_MOVE, Moves.ENERGY_BALL ], - [ RELEARN_MOVE, Moves.ZEN_HEADBUTT ], - [ RELEARN_MOVE, Moves.LEECH_SEED ], // Previous Stage Move - [ RELEARN_MOVE, Moves.GIGA_DRAIN ], // Previous Stage Move - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.BUBBLE_BEAM ], - [ 1, Moves.RAIN_DANCE ], - ], - [Species.SEEDOT]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.BIDE ], - [ 3, Moves.ABSORB ], - [ 6, Moves.ASTONISH ], - [ 9, Moves.GROWTH ], - [ 12, Moves.ROLLOUT ], - [ 15, Moves.MEGA_DRAIN ], - [ 18, Moves.PAYBACK ], - [ 21, Moves.HEADBUTT ], - [ 24, Moves.SUNNY_DAY ], - [ 27, Moves.SYNTHESIS ], - [ 30, Moves.SUCKER_PUNCH ], - [ 33, Moves.EXPLOSION ], - ], - [Species.NUZLEAF]: [ - [ EVOLVE_MOVE, Moves.RAZOR_LEAF ], - [ 1, Moves.AIR_CUTTER ], - [ 1, Moves.TORMENT ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.SWAGGER ], - [ 1, Moves.EXPLOSION ], - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.BIDE ], // Previous Stage Move - [ 1, Moves.ABSORB ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.HEADBUTT ], // Previous Stage Move - [ 9, Moves.GROWTH ], - [ 12, Moves.ROLLOUT ], - [ 18, Moves.MEGA_DRAIN ], - [ 24, Moves.PAYBACK ], - [ 30, Moves.SYNTHESIS ], - [ 36, Moves.SUNNY_DAY ], - [ 43, Moves.EXTRASENSORY ], - [ 50, Moves.SUCKER_PUNCH ], - [ 57, Moves.LEAF_BLADE ], - ], - [Species.SHIFTRY]: [ - [ EVOLVE_MOVE, Moves.LEAF_BLADE ], - [ RELEARN_MOVE, Moves.WHIRLWIND ], - [ RELEARN_MOVE, Moves.TACKLE ], - [ RELEARN_MOVE, Moves.BIDE ], // Previous Stage Move - [ RELEARN_MOVE, Moves.ABSORB ], - [ RELEARN_MOVE, Moves.MEGA_DRAIN ], - [ RELEARN_MOVE, Moves.GROWTH ], - [ RELEARN_MOVE, Moves.RAZOR_LEAF ], - [ RELEARN_MOVE, Moves.HARDEN ], - [ RELEARN_MOVE, Moves.HEADBUTT ], // Previous Stage Move - [ RELEARN_MOVE, Moves.EXPLOSION ], - [ RELEARN_MOVE, Moves.ROLLOUT ], - [ RELEARN_MOVE, Moves.SWAGGER ], - [ RELEARN_MOVE, Moves.SYNTHESIS ], - [ RELEARN_MOVE, Moves.BEAT_UP ], - [ RELEARN_MOVE, Moves.FAKE_OUT ], - [ RELEARN_MOVE, Moves.TORMENT ], - [ RELEARN_MOVE, Moves.ASTONISH ], - [ RELEARN_MOVE, Moves.EXTRASENSORY ], - [ RELEARN_MOVE, Moves.SUCKER_PUNCH ], - [ 1, Moves.AIR_CUTTER ], - [ 1, Moves.HURRICANE ], - [ 1, Moves.PAYBACK ], - [ 1, Moves.SUNNY_DAY ], - ], - [Species.TAILLOW]: [ - [ 1, Moves.PECK ], - [ 1, Moves.GROWL ], - [ 5, Moves.FOCUS_ENERGY ], - [ 9, Moves.QUICK_ATTACK ], - [ 13, Moves.WING_ATTACK ], - [ 17, Moves.DOUBLE_TEAM ], - [ 21, Moves.AERIAL_ACE ], - [ 25, Moves.QUICK_GUARD ], - [ 29, Moves.AGILITY ], - [ 33, Moves.AIR_SLASH ], - [ 37, Moves.ENDEAVOR ], - [ 41, Moves.BRAVE_BIRD ], - [ 45, Moves.REVERSAL ], - ], - [Species.SWELLOW]: [ - [ 1, Moves.BRAVE_BIRD ], - [ 1, Moves.AIR_SLASH ], - [ 1, Moves.PLUCK ], - [ 1, Moves.PECK ], - [ 1, Moves.GROWL ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.QUICK_ATTACK ], - [ 13, Moves.WING_ATTACK ], - [ 17, Moves.DOUBLE_TEAM ], - [ 21, Moves.AERIAL_ACE ], - [ 27, Moves.QUICK_GUARD ], - [ 33, Moves.AGILITY ], - [ 45, Moves.ENDEAVOR ], - [ 51, Moves.BRAVE_BIRD ], - [ 57, Moves.REVERSAL ], - ], - [Species.WINGULL]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 5, Moves.QUICK_ATTACK ], - [ 10, Moves.SUPERSONIC ], - [ 15, Moves.WING_ATTACK ], - [ 20, Moves.WATER_PULSE ], - [ 26, Moves.AGILITY ], - [ 30, Moves.AIR_SLASH ], - [ 35, Moves.MIST ], - [ 40, Moves.ROOST ], - [ 45, Moves.HURRICANE ], - ], - [Species.PELIPPER]: [ - [ 1, Moves.PROTECT ], - [ 1, Moves.SOAK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.AGILITY ], - [ 1, Moves.AIR_SLASH ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.TAILWIND ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.WATER_SPORT ], - [ 15, Moves.WING_ATTACK ], - [ 20, Moves.WATER_PULSE ], - [ 28, Moves.STOCKPILE ], - [ 28, Moves.SPIT_UP ], - [ 28, Moves.SWALLOW ], - [ 34, Moves.FLING ], - [ 41, Moves.MIST ], - [ 48, Moves.ROOST ], - [ 55, Moves.HURRICANE ], - [ 62, Moves.HYDRO_PUMP ], - ], - [Species.RALTS]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.DISARMING_VOICE ], - [ 3, Moves.DOUBLE_TEAM ], - [ 6, Moves.CONFUSION ], - [ 9, Moves.HYPNOSIS ], - [ 12, Moves.DRAINING_KISS ], - [ 15, Moves.TELEPORT ], - [ 18, Moves.PSYBEAM ], - [ 21, Moves.LIFE_DEW ], - [ 24, Moves.CHARM ], - [ 27, Moves.CALM_MIND ], - [ 30, Moves.PSYCHIC ], - [ 33, Moves.HEAL_PULSE ], - [ 36, Moves.DREAM_EATER ], - [ 39, Moves.FUTURE_SIGHT ], - ], - [Species.KIRLIA]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.DISARMING_VOICE ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.CONFUSION ], - [ 9, Moves.HYPNOSIS ], - [ 12, Moves.DRAINING_KISS ], - [ 15, Moves.TELEPORT ], - [ 18, Moves.PSYBEAM ], - [ 23, Moves.LIFE_DEW ], - [ 28, Moves.CHARM ], - [ 33, Moves.CALM_MIND ], - [ 38, Moves.PSYCHIC ], - [ 43, Moves.HEAL_PULSE ], - [ 48, Moves.DREAM_EATER ], - [ 53, Moves.FUTURE_SIGHT ], - ], - [Species.GARDEVOIR]: [ - [ EVOLVE_MOVE, Moves.DAZZLING_GLEAM ], - [ 1, Moves.MISTY_TERRAIN ], - [ 1, Moves.HEALING_WISH ], - [ 1, Moves.CHARM ], - [ 1, Moves.MYSTICAL_FIRE ], - [ 1, Moves.HEAL_PULSE ], - [ 1, Moves.GROWL ], - [ 1, Moves.DISARMING_VOICE ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.CONFUSION ], - [ 9, Moves.HYPNOSIS ], - [ 12, Moves.DRAINING_KISS ], - [ 15, Moves.TELEPORT ], - [ 18, Moves.PSYBEAM ], - [ 23, Moves.LIFE_DEW ], - [ 28, Moves.WISH ], - [ 35, Moves.CALM_MIND ], - [ 42, Moves.PSYCHIC ], - [ 49, Moves.MOONBLAST ], - [ 56, Moves.DREAM_EATER ], - [ 63, Moves.FUTURE_SIGHT ], - ], - [Species.SURSKIT]: [ - [ 1, Moves.WATER_GUN ], - [ 6, Moves.QUICK_ATTACK ], - [ 9, Moves.SWEET_SCENT ], - [ 14, Moves.SOAK ], - [ 17, Moves.BUBBLE_BEAM ], - [ 22, Moves.AGILITY ], - [ 25, Moves.MIST ], - [ 25, Moves.HAZE ], - [ 35, Moves.BATON_PASS ], - [ 38, Moves.STICKY_WEB ], - ], - [Species.MASQUERAIN]: [ - [ RELEARN_MOVE, Moves.BATON_PASS ], // Previous Stage Move - [ RELEARN_MOVE, Moves.STICKY_WEB ], // Previous Stage Move - [ 1, Moves.WHIRLWIND ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.SOAK ], - [ 1, Moves.BUBBLE_BEAM ], // Previous Stage Move - [ 1, Moves.AGILITY ], // Previous Stage Move - [ 1, Moves.MIST ], // Previous Stage Move - [ 1, Moves.HAZE ], // Previous Stage Move - [ 1, Moves.OMINOUS_WIND ], - [ 17, Moves.GUST ], - [ 22, Moves.SCARY_FACE ], - [ 22, Moves.AIR_CUTTER ], - [ 26, Moves.STUN_SPORE ], - [ 32, Moves.AIR_SLASH ], - [ 38, Moves.GIGA_DRAIN ], - [ 44, Moves.BUG_BUZZ ], - [ 52, Moves.QUIVER_DANCE ], - ], - [Species.SHROOMISH]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.TACKLE ], - [ 5, Moves.STUN_SPORE ], - [ 8, Moves.LEECH_SEED ], - [ 12, Moves.MEGA_DRAIN ], - [ 15, Moves.HEADBUTT ], - [ 19, Moves.POISON_POWDER ], - [ 26, Moves.GIGA_DRAIN ], - [ 29, Moves.GROWTH ], - [ 33, Moves.TOXIC ], - [ 36, Moves.SEED_BOMB ], - [ 40, Moves.SPORE ], - ], - [Species.BRELOOM]: [ - [ EVOLVE_MOVE, Moves.MACH_PUNCH ], - [ RELEARN_MOVE, Moves.SPORE ], - [ 1, Moves.POISON_POWDER ], - [ 1, Moves.GIGA_DRAIN ], // Previous Stage Move - [ 1, Moves.GROWTH ], - [ 1, Moves.TOXIC ], - [ 1, Moves.ABSORB ], - [ 1, Moves.TACKLE ], - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.LEECH_SEED ], - [ 12, Moves.MEGA_DRAIN ], - [ 15, Moves.HEADBUTT ], - [ 19, Moves.FEINT ], - [ 22, Moves.COUNTER ], - [ 28, Moves.FORCE_PALM ], - [ 33, Moves.WORRY_SEED ], - [ 39, Moves.BRICK_BREAK ], - [ 44, Moves.SEED_BOMB ], - [ 50, Moves.DYNAMIC_PUNCH ], - [ 55, Moves.FOCUS_PUNCH ], - ], - [Species.SLAKOTH]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.YAWN ], - [ 6, Moves.ENCORE ], - [ 9, Moves.SLACK_OFF ], - [ 14, Moves.HEADBUTT ], - [ 17, Moves.AMNESIA ], - [ 22, Moves.COVET ], - [ 25, Moves.THROAT_CHOP ], - [ 30, Moves.COUNTER ], - [ 33, Moves.FLAIL ], - [ 38, Moves.PLAY_ROUGH ], - ], - [Species.VIGOROTH]: [ - [ RELEARN_MOVE, Moves.PLAY_ROUGH ], // Previous Stage Move - [ 1, Moves.SCRATCH ], - [ 1, Moves.YAWN ], // Previous Stage Move - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.SLACK_OFF ], // Previous Stage Move - [ 1, Moves.ENCORE ], - [ 1, Moves.HEADBUTT ], // Previous Stage Move - [ 1, Moves.AMNESIA ], // Previous Stage Move - [ 1, Moves.COVET ], // Previous Stage Move - [ 1, Moves.FLAIL ], // Previous Stage Move - [ 1, Moves.UPROAR ], - [ 14, Moves.FURY_SWIPES ], - [ 17, Moves.ENDURE ], - [ 23, Moves.SLASH ], - [ 27, Moves.THROAT_CHOP ], - [ 33, Moves.COUNTER ], - [ 37, Moves.FOCUS_PUNCH ], - [ 43, Moves.REVERSAL ], - ], - [Species.SLAKING]: [ - [ EVOLVE_MOVE, Moves.SWAGGER ], - [ RELEARN_MOVE, Moves.PLAY_ROUGH ], // Previous Stage Move - [ RELEARN_MOVE, Moves.FOCUS_PUNCH ], // Previous Stage Move - [ 1, Moves.SUCKER_PUNCH ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.YAWN ], - [ 1, Moves.FOCUS_ENERGY ], // Previous Stage Move - [ 1, Moves.ENCORE ], - [ 1, Moves.SLACK_OFF ], - [ 1, Moves.UPROAR ], // Previous Stage Move - [ 1, Moves.FURY_SWIPES ], // Previous Stage Move - [ 1, Moves.ENDURE ], // Previous Stage Move - [ 1, Moves.HEADBUTT ], // Previous Stage Move - [ 1, Moves.SLASH ], // Previous Stage Move - [ 1, Moves.REVERSAL ], // Previous Stage Move - [ 17, Moves.AMNESIA ], - [ 23, Moves.COVET ], - [ 27, Moves.THROAT_CHOP ], - [ 33, Moves.COUNTER ], - [ 39, Moves.FLAIL ], - [ 45, Moves.FLING ], - [ 52, Moves.MEGA_KICK ], - [ 63, Moves.HAMMER_ARM ], - ], - [Species.NINCADA]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.SAND_ATTACK ], - [ 5, Moves.HARDEN ], - [ 10, Moves.FALSE_SWIPE ], - [ 15, Moves.MUD_SLAP ], - [ 21, Moves.ABSORB ], - [ 25, Moves.METAL_CLAW ], - [ 30, Moves.FURY_SWIPES ], - [ 35, Moves.MIND_READER ], - [ 40, Moves.DIG ], - ], - [Species.NINJASK]: [ - [ EVOLVE_MOVE, Moves.DOUBLE_TEAM ], - [ EVOLVE_MOVE, Moves.SCREECH ], - [ EVOLVE_MOVE, Moves.FURY_CUTTER ], - [ 1, Moves.BATON_PASS ], - [ 1, Moves.AERIAL_ACE ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.DIG ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.HARDEN ], - [ 1, Moves.FALSE_SWIPE ], - [ 15, Moves.AGILITY ], - [ 23, Moves.ABSORB ], - [ 29, Moves.BUG_BITE ], - [ 36, Moves.FURY_SWIPES ], - [ 43, Moves.MIND_READER ], - [ 50, Moves.SLASH ], - [ 57, Moves.SWORDS_DANCE ], - [ 64, Moves.X_SCISSOR ], - ], - [Species.SHEDINJA]: [ - [ 1, Moves.SHADOW_CLAW ], - [ 1, Moves.GRUDGE ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.DIG ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.HARDEN ], - [ 1, Moves.FALSE_SWIPE ], - [ 15, Moves.CONFUSE_RAY ], - [ 23, Moves.ABSORB ], - [ 29, Moves.SHADOW_SNEAK ], - [ 36, Moves.FURY_SWIPES ], - [ 43, Moves.MIND_READER ], - [ 50, Moves.SHADOW_BALL ], - [ 57, Moves.SPITE ], - [ 64, Moves.PHANTOM_FORCE ], - ], - [Species.WHISMUR]: [ - [ 1, Moves.ASTONISH ], - [ 1, Moves.POUND ], - [ 5, Moves.ECHOED_VOICE ], - [ 10, Moves.HOWL ], - [ 15, Moves.REST ], - [ 15, Moves.SLEEP_TALK ], - [ 21, Moves.STOMP ], - [ 25, Moves.ROAR ], - [ 30, Moves.SUPERSONIC ], - [ 35, Moves.UPROAR ], - [ 40, Moves.SCREECH ], - [ 45, Moves.HYPER_VOICE ], - ], - [Species.LOUDRED]: [ - [ EVOLVE_MOVE, Moves.BITE ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.POUND ], - [ 1, Moves.ECHOED_VOICE ], - [ 1, Moves.HOWL ], - [ 15, Moves.REST ], - [ 15, Moves.SLEEP_TALK ], - [ 23, Moves.STOMP ], - [ 29, Moves.ROAR ], - [ 36, Moves.SUPERSONIC ], - [ 43, Moves.UPROAR ], - [ 50, Moves.SCREECH ], - [ 57, Moves.HYPER_VOICE ], - ], - [Species.EXPLOUD]: [ - [ EVOLVE_MOVE, Moves.CRUNCH ], - [ 1, Moves.BITE ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.FIRE_FANG ], - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.POUND ], - [ 1, Moves.ECHOED_VOICE ], - [ 1, Moves.HOWL ], - [ 15, Moves.REST ], - [ 15, Moves.SLEEP_TALK ], - [ 23, Moves.STOMP ], - [ 29, Moves.ROAR ], - [ 36, Moves.SUPERSONIC ], - [ 45, Moves.UPROAR ], - [ 54, Moves.SCREECH ], - [ 63, Moves.HYPER_VOICE ], - [ 72, Moves.BOOMBURST ], - [ 81, Moves.HYPER_BEAM ], - ], - [Species.MAKUHITA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.FOCUS_ENERGY ], - [ 4, Moves.SAND_ATTACK ], - [ 7, Moves.ARM_THRUST ], - [ 10, Moves.FAKE_OUT ], - [ 13, Moves.FORCE_PALM ], - [ 16, Moves.WHIRLWIND ], - [ 19, Moves.KNOCK_OFF ], - [ 22, Moves.BULK_UP ], - [ 25, Moves.BELLY_DRUM ], - [ 28, Moves.DETECT ], - [ 31, Moves.SEISMIC_TOSS ], - [ 34, Moves.FOCUS_PUNCH ], - [ 37, Moves.ENDURE ], - [ 40, Moves.CLOSE_COMBAT ], - [ 43, Moves.REVERSAL ], - [ 46, Moves.HEAVY_SLAM ], - ], - [Species.HARIYAMA]: [ - [ 1, Moves.BRINE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.SAND_ATTACK ], // Previous Stage Move - [ 1, Moves.ARM_THRUST ], - [ 10, Moves.FAKE_OUT ], - [ 13, Moves.FORCE_PALM ], - [ 16, Moves.WHIRLWIND ], - [ 19, Moves.KNOCK_OFF ], - [ 22, Moves.BULK_UP ], - [ 26, Moves.BELLY_DRUM ], - [ 30, Moves.DETECT ], - [ 34, Moves.SEISMIC_TOSS ], - [ 38, Moves.FOCUS_PUNCH ], - [ 42, Moves.ENDURE ], - [ 46, Moves.CLOSE_COMBAT ], - [ 50, Moves.REVERSAL ], - [ 54, Moves.HEAVY_SLAM ], - [ 60, Moves.HEADLONG_RUSH ], - ], - [Species.AZURILL]: [ - [ 1, Moves.SPLASH ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.TAIL_WHIP ], - [ 3, Moves.HELPING_HAND ], - [ 6, Moves.BUBBLE_BEAM ], - [ 9, Moves.CHARM ], - [ 12, Moves.SLAM ], - [ 15, Moves.BOUNCE ], - ], - [Species.NOSEPASS]: [ - [ 1, Moves.TACKLE ], - [ 4, Moves.HARDEN ], - [ 7, Moves.BLOCK ], - [ 10, Moves.ROCK_THROW ], - [ 13, Moves.THUNDER_WAVE ], - [ 16, Moves.REST ], - [ 19, Moves.SPARK ], - [ 22, Moves.ROCK_SLIDE ], - [ 25, Moves.POWER_GEM ], - [ 28, Moves.ROCK_BLAST ], - [ 31, Moves.DISCHARGE ], - [ 34, Moves.SANDSTORM ], - [ 37, Moves.EARTH_POWER ], - [ 40, Moves.STONE_EDGE ], - [ 43, Moves.LOCK_ON ], - [ 43, Moves.ZAP_CANNON ], - ], - [Species.SKITTY]: [ - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.GROWL ], - [ 1, Moves.TAIL_WHIP ], - [ 4, Moves.TACKLE ], - [ 7, Moves.SING ], - [ 10, Moves.ATTRACT ], - [ 13, Moves.DISARMING_VOICE ], - [ 16, Moves.FURY_SWIPES ], - [ 19, Moves.COPYCAT ], - [ 22, Moves.PAYBACK ], - [ 25, Moves.CHARM ], - [ 31, Moves.FACADE ], - [ 34, Moves.COVET ], - [ 37, Moves.HEAL_BELL ], - [ 40, Moves.DOUBLE_EDGE ], - [ 43, Moves.BABY_DOLL_EYES ], - [ 46, Moves.PLAY_ROUGH ], - ], - [Species.DELCATTY]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.TACKLE ], - [ 1, Moves.SING ], - [ 1, Moves.ATTRACT ], - [ 1, Moves.DISARMING_VOICE ], - [ 1, Moves.FURY_SWIPES ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.PAYBACK ], - [ 1, Moves.CHARM ], - [ 1, Moves.FACADE ], - [ 1, Moves.COVET ], - [ 1, Moves.HEAL_BELL ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.BABY_DOLL_EYES ], - [ 1, Moves.PLAY_ROUGH ], - ], - [Species.SABLEYE]: [ - [ 1, Moves.LEER ], - [ 1, Moves.SCRATCH ], - [ 3, Moves.ASTONISH ], - [ 9, Moves.SHADOW_SNEAK ], - [ 12, Moves.FAKE_OUT ], - [ 15, Moves.DISABLE ], - [ 18, Moves.DETECT ], - [ 21, Moves.NIGHT_SHADE ], - [ 24, Moves.FURY_SWIPES ], - [ 27, Moves.KNOCK_OFF ], - [ 30, Moves.QUASH ], - [ 33, Moves.SHADOW_CLAW ], - [ 36, Moves.MEAN_LOOK ], - [ 39, Moves.POWER_GEM ], - [ 42, Moves.ZEN_HEADBUTT ], - [ 45, Moves.SHADOW_BALL ], - [ 48, Moves.FOUL_PLAY ], - ], - [Species.MAWILE]: [ - [ 1, Moves.ASTONISH ], - [ 1, Moves.GROWL ], - [ 4, Moves.FAIRY_WIND ], - [ 8, Moves.BATON_PASS ], - [ 12, Moves.BITE ], - [ 16, Moves.STOCKPILE ], - [ 16, Moves.SPIT_UP ], - [ 16, Moves.SWALLOW ], - [ 20, Moves.SUCKER_PUNCH ], - [ 24, Moves.IRON_DEFENSE ], - [ 28, Moves.CRUNCH ], - [ 32, Moves.SWEET_SCENT ], - [ 36, Moves.IRON_HEAD ], - [ 40, Moves.TAUNT ], - [ 44, Moves.FAKE_TEARS ], - [ 48, Moves.PLAY_ROUGH ], - ], - [Species.ARON]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 4, Moves.METAL_CLAW ], - [ 8, Moves.ROCK_TOMB ], - [ 12, Moves.ROAR ], - [ 16, Moves.HEADBUTT ], - [ 20, Moves.PROTECT ], - [ 24, Moves.ROCK_SLIDE ], - [ 28, Moves.IRON_HEAD ], - [ 33, Moves.METAL_SOUND ], - [ 36, Moves.TAKE_DOWN ], - [ 40, Moves.AUTOTOMIZE ], - [ 44, Moves.IRON_TAIL ], - [ 48, Moves.IRON_DEFENSE ], - [ 52, Moves.HEAVY_SLAM ], - [ 56, Moves.DOUBLE_EDGE ], - [ 60, Moves.METAL_BURST ], - ], - [Species.LAIRON]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.ROCK_TOMB ], - [ 12, Moves.ROAR ], - [ 16, Moves.HEADBUTT ], - [ 20, Moves.PROTECT ], - [ 24, Moves.ROCK_SLIDE ], - [ 28, Moves.IRON_HEAD ], - [ 35, Moves.METAL_SOUND ], - [ 40, Moves.TAKE_DOWN ], - [ 46, Moves.AUTOTOMIZE ], - [ 52, Moves.IRON_TAIL ], - [ 58, Moves.IRON_DEFENSE ], - [ 64, Moves.HEAVY_SLAM ], - [ 70, Moves.DOUBLE_EDGE ], - [ 76, Moves.METAL_BURST ], - ], - [Species.AGGRON]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.ROCK_TOMB ], - [ 12, Moves.ROAR ], - [ 16, Moves.HEADBUTT ], - [ 20, Moves.PROTECT ], - [ 24, Moves.ROCK_SLIDE ], - [ 28, Moves.IRON_HEAD ], - [ 35, Moves.METAL_SOUND ], - [ 40, Moves.TAKE_DOWN ], - [ 48, Moves.AUTOTOMIZE ], - [ 56, Moves.IRON_TAIL ], - [ 64, Moves.IRON_DEFENSE ], - [ 72, Moves.HEAVY_SLAM ], - [ 80, Moves.DOUBLE_EDGE ], - [ 88, Moves.METAL_BURST ], - ], - [Species.MEDITITE]: [ - [ 1, Moves.CONFUSION ], - [ 1, Moves.WORK_UP ], - [ 1, Moves.BIDE ], - [ 9, Moves.DETECT ], - [ 12, Moves.ENDURE ], - [ 15, Moves.FEINT ], - [ 17, Moves.FORCE_PALM ], - [ 20, Moves.PSYBEAM ], - [ 23, Moves.CALM_MIND ], - [ 25, Moves.ZEN_HEADBUTT ], - [ 28, Moves.HIGH_JUMP_KICK ], - [ 31, Moves.PSYCH_UP ], - [ 33, Moves.ACUPRESSURE ], - [ 36, Moves.POWER_TRICK ], - [ 39, Moves.REVERSAL ], - [ 41, Moves.RECOVER ], - [ 44, Moves.COUNTER ], - ], - [Species.MEDICHAM]: [ - [ 1, Moves.FIRE_PUNCH ], - [ 1, Moves.ICE_PUNCH ], - [ 1, Moves.THUNDER_PUNCH ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.DETECT ], - [ 1, Moves.WORK_UP ], - [ 1, Moves.BIDE ], - [ 1, Moves.REVERSAL ], // Previous Stage Move - [ 12, Moves.ENDURE ], - [ 15, Moves.FEINT ], - [ 17, Moves.FORCE_PALM ], - [ 20, Moves.PSYBEAM ], - [ 23, Moves.CALM_MIND ], - [ 25, Moves.ZEN_HEADBUTT ], - [ 28, Moves.HIGH_JUMP_KICK ], - [ 31, Moves.PSYCH_UP ], - [ 33, Moves.ACUPRESSURE ], - [ 36, Moves.POWER_TRICK ], - [ 47, Moves.RECOVER ], - [ 53, Moves.COUNTER ], - [ 53, Moves.AXE_KICK ], - ], - [Species.ELECTRIKE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.THUNDER_WAVE ], - [ 4, Moves.LEER ], - [ 8, Moves.HOWL ], - [ 12, Moves.QUICK_ATTACK ], - [ 16, Moves.SHOCK_WAVE ], - [ 20, Moves.BITE ], - [ 24, Moves.THUNDER_FANG ], - [ 28, Moves.ROAR ], - [ 32, Moves.DISCHARGE ], - [ 36, Moves.CHARGE ], - [ 40, Moves.WILD_CHARGE ], - [ 44, Moves.THUNDER ], - ], - [Species.MANECTRIC]: [ - [ 1, Moves.FIRE_FANG ], - [ 1, Moves.TACKLE ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.LEER ], - [ 1, Moves.HOWL ], - [ 12, Moves.QUICK_ATTACK ], - [ 16, Moves.SHOCK_WAVE ], - [ 20, Moves.BITE ], - [ 24, Moves.THUNDER_FANG ], - [ 30, Moves.ROAR ], - [ 36, Moves.DISCHARGE ], - [ 42, Moves.CHARGE ], - [ 48, Moves.WILD_CHARGE ], - [ 54, Moves.THUNDER ], - [ 60, Moves.ELECTRIC_TERRAIN ], - ], - [Species.PLUSLE]: [ - [ RELEARN_MOVE, Moves.NUZZLE ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.QUICK_ATTACK ], - [ 4, Moves.HELPING_HAND ], - [ 7, Moves.SPARK ], - [ 10, Moves.ENCORE ], - [ 13, Moves.SWITCHEROO ], - [ 16, Moves.SWIFT ], - [ 19, Moves.ELECTRO_BALL ], - [ 22, Moves.COPYCAT ], - [ 26, Moves.CHARGE ], - [ 31, Moves.DISCHARGE ], - [ 34, Moves.BATON_PASS ], - [ 37, Moves.AGILITY ], - [ 40, Moves.LAST_RESORT ], - [ 43, Moves.THUNDER ], - [ 46, Moves.NASTY_PLOT ], - [ 49, Moves.ENTRAINMENT ], - ], - [Species.MINUN]: [ - [ RELEARN_MOVE, Moves.NUZZLE ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.QUICK_ATTACK ], - [ 4, Moves.HELPING_HAND ], - [ 7, Moves.SPARK ], - [ 10, Moves.ENCORE ], - [ 13, Moves.SWITCHEROO ], - [ 16, Moves.SWIFT ], - [ 19, Moves.ELECTRO_BALL ], - [ 22, Moves.COPYCAT ], - [ 26, Moves.CHARGE ], - [ 31, Moves.DISCHARGE ], - [ 34, Moves.BATON_PASS ], - [ 37, Moves.AGILITY ], - [ 40, Moves.LAST_RESORT ], - [ 43, Moves.THUNDER ], - [ 46, Moves.NASTY_PLOT ], - [ 49, Moves.ENTRAINMENT ], - ], - [Species.VOLBEAT]: [ - [ 1, Moves.FLASH ], - [ 1, Moves.TACKLE ], - [ 5, Moves.DOUBLE_TEAM ], - [ 8, Moves.CONFUSE_RAY ], - [ 12, Moves.QUICK_ATTACK ], - [ 15, Moves.STRUGGLE_BUG ], - [ 19, Moves.MOONLIGHT ], - [ 22, Moves.TAIL_GLOW ], - [ 26, Moves.PROTECT ], - [ 29, Moves.ZEN_HEADBUTT ], - [ 33, Moves.HELPING_HAND ], - [ 36, Moves.BUG_BUZZ ], - [ 40, Moves.PLAY_ROUGH ], - [ 43, Moves.DOUBLE_EDGE ], - [ 47, Moves.INFESTATION ], - ], - [Species.ILLUMISE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.PLAY_NICE ], - [ 5, Moves.SWEET_SCENT ], - [ 9, Moves.CHARM ], - [ 12, Moves.QUICK_ATTACK ], - [ 15, Moves.STRUGGLE_BUG ], - [ 19, Moves.MOONLIGHT ], - [ 22, Moves.WISH ], - [ 26, Moves.ENCORE ], - [ 29, Moves.FLATTER ], - [ 33, Moves.ZEN_HEADBUTT ], - [ 36, Moves.HELPING_HAND ], - [ 40, Moves.BUG_BUZZ ], - [ 43, Moves.PLAY_ROUGH ], - [ 47, Moves.INFESTATION ], - ], - [Species.ROSELIA]: [ - [ EVOLVE_MOVE, Moves.POISON_STING ], - [ 1, Moves.ABSORB ], - [ 1, Moves.GROWTH ], - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.WORRY_SEED ], - [ 5, Moves.MEGA_DRAIN ], - [ 10, Moves.LEECH_SEED ], - [ 15, Moves.MAGICAL_LEAF ], - [ 20, Moves.TOXIC_SPIKES ], - [ 25, Moves.SWEET_SCENT ], - [ 30, Moves.GIGA_DRAIN ], - [ 35, Moves.SYNTHESIS ], - [ 40, Moves.TOXIC ], - [ 45, Moves.PETAL_BLIZZARD ], - [ 50, Moves.AROMATHERAPY ], - [ 55, Moves.INGRAIN ], - [ 60, Moves.PETAL_DANCE ], - ], - [Species.GULPIN]: [ - [ 1, Moves.POUND ], - [ 5, Moves.YAWN ], - [ 8, Moves.POISON_GAS ], - [ 10, Moves.SLUDGE ], - [ 12, Moves.AMNESIA ], - [ 17, Moves.ACID_SPRAY ], - [ 20, Moves.ENCORE ], - [ 25, Moves.TOXIC ], - [ 28, Moves.STOCKPILE ], - [ 28, Moves.SPIT_UP ], - [ 28, Moves.SWALLOW ], - [ 33, Moves.SLUDGE_BOMB ], - [ 36, Moves.GASTRO_ACID ], - [ 41, Moves.BELCH ], - [ 44, Moves.PAIN_SPLIT ], - [ 49, Moves.GUNK_SHOT ], - ], - [Species.SWALOT]: [ - [ EVOLVE_MOVE, Moves.BODY_SLAM ], - [ 1, Moves.GUNK_SHOT ], - [ 1, Moves.POUND ], - [ 1, Moves.YAWN ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.WRING_OUT ], - [ 1, Moves.SLUDGE ], - [ 1, Moves.PAIN_SPLIT ], // Previous Stage Move - [ 12, Moves.AMNESIA ], - [ 17, Moves.ACID_SPRAY ], - [ 20, Moves.ENCORE ], - [ 25, Moves.TOXIC ], - [ 30, Moves.STOCKPILE ], - [ 30, Moves.SPIT_UP ], - [ 30, Moves.SWALLOW ], - [ 37, Moves.SLUDGE_BOMB ], - [ 42, Moves.GASTRO_ACID ], - [ 49, Moves.BELCH ], - ], - [Species.CARVANHA]: [ - [ 1, Moves.AQUA_JET ], - [ 1, Moves.LEER ], - [ 4, Moves.POISON_FANG ], - [ 8, Moves.FOCUS_ENERGY ], - [ 12, Moves.SCARY_FACE ], - [ 16, Moves.BITE ], - [ 20, Moves.ICE_FANG ], - [ 24, Moves.SCREECH ], - [ 28, Moves.SWAGGER ], - [ 32, Moves.CRUNCH ], - [ 36, Moves.AGILITY ], - [ 40, Moves.LIQUIDATION ], - [ 44, Moves.TAKE_DOWN ], - ], - [Species.SHARPEDO]: [ - [ EVOLVE_MOVE, Moves.SLASH ], - [ 1, Moves.NIGHT_SLASH ], - [ 1, Moves.AQUA_JET ], - [ 1, Moves.LEER ], - [ 1, Moves.POISON_FANG ], - [ 1, Moves.FOCUS_ENERGY ], - [ 12, Moves.SCARY_FACE ], - [ 16, Moves.BITE ], - [ 20, Moves.ICE_FANG ], - [ 24, Moves.SCREECH ], - [ 28, Moves.SWAGGER ], - [ 34, Moves.CRUNCH ], - [ 40, Moves.AGILITY ], - [ 46, Moves.LIQUIDATION ], - [ 52, Moves.TAKE_DOWN ], - ], - [Species.WAILMER]: [ - [ 1, Moves.SPLASH ], - [ 1, Moves.TACKLE ], // Custom - [ 3, Moves.GROWL ], - [ 6, Moves.ASTONISH ], - [ 12, Moves.WATER_GUN ], - [ 15, Moves.MIST ], - [ 18, Moves.WATER_PULSE ], - [ 21, Moves.HEAVY_SLAM ], - [ 24, Moves.BRINE ], - [ 27, Moves.WHIRLPOOL ], - [ 30, Moves.DIVE ], - [ 33, Moves.BOUNCE ], - [ 36, Moves.BODY_SLAM ], - [ 39, Moves.REST ], - [ 42, Moves.AMNESIA ], - [ 45, Moves.HYDRO_PUMP ], - [ 48, Moves.WATER_SPOUT ], - ], - [Species.WAILORD]: [ - [ 1, Moves.SOAK ], - [ 1, Moves.NOBLE_ROAR ], - [ 1, Moves.SPLASH ], - [ 1, Moves.TACKLE ], // Previous Stage Move, Custom - [ 1, Moves.GROWL ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.WATER_GUN ], - [ 15, Moves.MIST ], - [ 18, Moves.WATER_PULSE ], - [ 21, Moves.HEAVY_SLAM ], - [ 24, Moves.BRINE ], - [ 27, Moves.WHIRLPOOL ], - [ 30, Moves.DIVE ], - [ 33, Moves.BOUNCE ], - [ 36, Moves.BODY_SLAM ], - [ 39, Moves.REST ], - [ 44, Moves.AMNESIA ], - [ 49, Moves.HYDRO_PUMP ], - [ 54, Moves.WATER_SPOUT ], - ], - [Species.NUMEL]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.TACKLE ], - [ 5, Moves.EMBER ], - [ 8, Moves.FOCUS_ENERGY ], - [ 12, Moves.BULLDOZE ], - [ 15, Moves.INCINERATE ], - [ 19, Moves.AMNESIA ], - [ 22, Moves.LAVA_PLUME ], - [ 26, Moves.EARTH_POWER ], - [ 29, Moves.CURSE ], - [ 31, Moves.TAKE_DOWN ], - [ 40, Moves.EARTHQUAKE ], - [ 43, Moves.FLAMETHROWER ], - [ 47, Moves.DOUBLE_EDGE ], - ], - [Species.CAMERUPT]: [ - [ EVOLVE_MOVE, Moves.ROCK_SLIDE ], - [ RELEARN_MOVE, Moves.FLAMETHROWER ], // Previous Stage Move - [ RELEARN_MOVE, Moves.DOUBLE_EDGE ], // Previous Stage Move - [ 1, Moves.FISSURE ], - [ 1, Moves.ERUPTION ], - [ 1, Moves.GROWL ], - [ 1, Moves.TACKLE ], - [ 1, Moves.EMBER ], - [ 1, Moves.FOCUS_ENERGY ], - [ 12, Moves.BULLDOZE ], - [ 15, Moves.INCINERATE ], - [ 19, Moves.AMNESIA ], - [ 22, Moves.LAVA_PLUME ], - [ 26, Moves.EARTH_POWER ], - [ 29, Moves.CURSE ], - [ 31, Moves.TAKE_DOWN ], - [ 39, Moves.YAWN ], - [ 46, Moves.EARTHQUAKE ], - ], - [Species.TORKOAL]: [ - [ 1, Moves.SMOG ], - [ 1, Moves.EMBER ], - [ 4, Moves.WITHDRAW ], - [ 8, Moves.RAPID_SPIN ], - [ 12, Moves.SMOKESCREEN ], - [ 16, Moves.CLEAR_SMOG ], - [ 20, Moves.FLAME_WHEEL ], - [ 24, Moves.PROTECT ], - [ 28, Moves.LAVA_PLUME ], - [ 32, Moves.BODY_SLAM ], - [ 36, Moves.IRON_DEFENSE ], - [ 40, Moves.FLAMETHROWER ], - [ 44, Moves.CURSE ], - [ 48, Moves.HEAT_WAVE ], - [ 52, Moves.AMNESIA ], - [ 56, Moves.INFERNO ], - [ 60, Moves.SHELL_SMASH ], - [ 64, Moves.ERUPTION ], - ], - [Species.SPOINK]: [ - [ 1, Moves.SPLASH ], - [ 5, Moves.CONFUSION ], // Custom, Moved from Level 7 to 5 - [ 10, Moves.GROWL ], - [ 14, Moves.PSYBEAM ], - [ 18, Moves.PSYCH_UP ], - [ 22, Moves.CONFUSE_RAY ], - [ 29, Moves.REST ], - [ 29, Moves.POWER_GEM ], - [ 33, Moves.SNORE ], - [ 38, Moves.PSYSHOCK ], - [ 40, Moves.PAYBACK ], - [ 44, Moves.PSYCHIC ], - [ 50, Moves.BOUNCE ], - ], - [Species.GRUMPIG]: [ - [ EVOLVE_MOVE, Moves.TEETER_DANCE ], - [ 1, Moves.BELCH ], - [ 1, Moves.SPLASH ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.GROWL ], // Previous Stage Move - [ 1, Moves.PSYBEAM ], - [ 18, Moves.PSYCH_UP ], - [ 22, Moves.CONFUSE_RAY ], - [ 26, Moves.ZEN_HEADBUTT ], - [ 29, Moves.POWER_GEM ], - [ 35, Moves.REST ], - [ 35, Moves.SNORE ], - [ 42, Moves.PSYSHOCK ], - [ 46, Moves.PAYBACK ], - [ 52, Moves.PSYCHIC ], - [ 60, Moves.BOUNCE ], - ], - [Species.SPINDA]: [ - [ 1, Moves.TACKLE ], - [ 5, Moves.COPYCAT ], - [ 10, Moves.DIZZY_PUNCH ], - [ 14, Moves.PSYBEAM ], - [ 19, Moves.HYPNOSIS ], - [ 23, Moves.BODY_SLAM ], - [ 28, Moves.SUCKER_PUNCH ], - [ 32, Moves.TEETER_DANCE ], - [ 37, Moves.UPROAR ], - [ 41, Moves.PSYCH_UP ], - [ 46, Moves.DOUBLE_EDGE ], - [ 50, Moves.FLAIL ], - [ 55, Moves.THRASH ], - ], - [Species.TRAPINCH]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.BIDE ], - [ 1, Moves.FEINT_ATTACK ], - [ 8, Moves.BITE ], - [ 12, Moves.MUD_SLAP ], - [ 16, Moves.SAND_TOMB ], - [ 20, Moves.BULLDOZE ], - [ 24, Moves.DIG ], - [ 28, Moves.CRUNCH ], - [ 32, Moves.SANDSTORM ], - [ 36, Moves.EARTH_POWER ], - [ 40, Moves.EARTHQUAKE ], - [ 44, Moves.SUPERPOWER ], - [ 48, Moves.FISSURE ], - ], - [Species.VIBRAVA]: [ - [ EVOLVE_MOVE, Moves.DRAGON_BREATH ], - [ RELEARN_MOVE, Moves.SUPERSONIC ], - [ RELEARN_MOVE, Moves.FISSURE ], - [ RELEARN_MOVE, Moves.CRUNCH ], - [ RELEARN_MOVE, Moves.SUPERPOWER ], - [ RELEARN_MOVE, Moves.ASTONISH ], - [ RELEARN_MOVE, Moves.BULLDOZE ], - [ 1, Moves.DIG ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.BITE ], - [ 1, Moves.BIDE ], - [ 1, Moves.FEINT_ATTACK ], - [ 12, Moves.MUD_SLAP ], - [ 16, Moves.SAND_TOMB ], - [ 20, Moves.DRAGON_TAIL ], - [ 24, Moves.SCREECH ], - [ 28, Moves.BUG_BUZZ ], - [ 32, Moves.SANDSTORM ], - [ 38, Moves.EARTH_POWER ], - [ 44, Moves.EARTHQUAKE ], - [ 50, Moves.UPROAR ], - [ 56, Moves.DRAGON_RUSH ], - [ 62, Moves.BOOMBURST ], - ], - [Species.FLYGON]: [ - [ EVOLVE_MOVE, Moves.DRAGON_CLAW ], - [ RELEARN_MOVE, Moves.BITE ], - [ RELEARN_MOVE, Moves.FISSURE ], - [ RELEARN_MOVE, Moves.DIG ], - [ RELEARN_MOVE, Moves.CRUNCH ], - [ RELEARN_MOVE, Moves.SUPERPOWER ], - [ RELEARN_MOVE, Moves.ASTONISH ], - [ RELEARN_MOVE, Moves.DRAGON_DANCE ], - [ RELEARN_MOVE, Moves.FEINT ], - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.BULLDOZE ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.BIDE ], - [ 1, Moves.FEINT_ATTACK ], - [ 12, Moves.MUD_SLAP ], - [ 16, Moves.SAND_TOMB ], - [ 20, Moves.DRAGON_TAIL ], - [ 24, Moves.SCREECH ], - [ 28, Moves.BUG_BUZZ ], - [ 32, Moves.SANDSTORM ], - [ 38, Moves.EARTH_POWER ], - [ 44, Moves.EARTHQUAKE ], - [ 52, Moves.UPROAR ], - [ 60, Moves.DRAGON_RUSH ], - [ 68, Moves.BOOMBURST ], - ], - [Species.CACNEA]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.LEER ], - [ 4, Moves.ABSORB ], - [ 7, Moves.GROWTH ], - [ 10, Moves.LEECH_SEED ], - [ 13, Moves.SAND_ATTACK ], - [ 16, Moves.BULLET_SEED ], - [ 19, Moves.POWER_TRIP ], - [ 22, Moves.INGRAIN ], - [ 26, Moves.PAYBACK ], - [ 30, Moves.SPIKES ], - [ 34, Moves.SUCKER_PUNCH ], - [ 38, Moves.PIN_MISSILE ], - [ 42, Moves.ENERGY_BALL ], - [ 46, Moves.COTTON_SPORE ], - [ 50, Moves.SANDSTORM ], - [ 54, Moves.DESTINY_BOND ], - ], - [Species.CACTURNE]: [ - [ EVOLVE_MOVE, Moves.SPIKY_SHIELD ], - [ 1, Moves.DESTINY_BOND ], - [ 1, Moves.POISON_STING ], - [ 1, Moves.LEER ], - [ 1, Moves.ABSORB ], - [ 1, Moves.GROWTH ], - [ 10, Moves.LEECH_SEED ], - [ 13, Moves.SAND_ATTACK ], - [ 16, Moves.BULLET_SEED ], - [ 19, Moves.POWER_TRIP ], - [ 22, Moves.INGRAIN ], - [ 26, Moves.PAYBACK ], - [ 30, Moves.SPIKES ], - [ 35, Moves.SUCKER_PUNCH ], - [ 38, Moves.PIN_MISSILE ], - [ 44, Moves.ENERGY_BALL ], - [ 49, Moves.COTTON_SPORE ], - [ 54, Moves.SANDSTORM ], - ], - [Species.SWABLU]: [ - [ 1, Moves.PECK ], - [ 1, Moves.GROWL ], - [ 4, Moves.DISARMING_VOICE ], - [ 8, Moves.MIST ], - [ 12, Moves.FURY_ATTACK ], - [ 16, Moves.ROUND ], - [ 20, Moves.DRAGON_BREATH ], - [ 24, Moves.SAFEGUARD ], - [ 28, Moves.SING ], - [ 32, Moves.COTTON_GUARD ], - [ 36, Moves.TAKE_DOWN ], - [ 40, Moves.MOONBLAST ], - [ 44, Moves.PERISH_SONG ], - ], - [Species.ALTARIA]: [ - [ EVOLVE_MOVE, Moves.DRAGON_PULSE ], - [ 1, Moves.PLUCK ], - [ 1, Moves.PECK ], - [ 1, Moves.GROWL ], - [ 1, Moves.DISARMING_VOICE ], - [ 1, Moves.MIST ], - [ 12, Moves.FURY_ATTACK ], - [ 16, Moves.ROUND ], - [ 20, Moves.DRAGON_BREATH ], - [ 24, Moves.SAFEGUARD ], - [ 28, Moves.SING ], - [ 32, Moves.COTTON_GUARD ], - [ 38, Moves.TAKE_DOWN ], - [ 44, Moves.MOONBLAST ], - [ 50, Moves.PERISH_SONG ], - [ 56, Moves.SKY_ATTACK ], - ], - [Species.ZANGOOSE]: [ - [ RELEARN_MOVE, Moves.DOUBLE_KICK ], - [ RELEARN_MOVE, Moves.DISABLE ], - [ RELEARN_MOVE, Moves.COUNTER ], - [ RELEARN_MOVE, Moves.FURY_SWIPES ], - [ RELEARN_MOVE, Moves.CURSE ], - [ RELEARN_MOVE, Moves.FLAIL ], - [ RELEARN_MOVE, Moves.BELLY_DRUM ], - [ RELEARN_MOVE, Moves.FEINT ], - [ RELEARN_MOVE, Moves.NIGHT_SLASH ], - [ RELEARN_MOVE, Moves.DOUBLE_HIT ], - [ RELEARN_MOVE, Moves.QUICK_GUARD ], - [ RELEARN_MOVE, Moves.FINAL_GAMBIT ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 5, Moves.QUICK_ATTACK ], - [ 8, Moves.FURY_CUTTER ], - [ 12, Moves.METAL_CLAW ], - [ 15, Moves.HONE_CLAWS ], - [ 19, Moves.SLASH ], - [ 22, Moves.POWER_TRIP ], - [ 26, Moves.CRUSH_CLAW ], - [ 29, Moves.FALSE_SWIPE ], - [ 33, Moves.SWITCHEROO ], - [ 36, Moves.DETECT ], - [ 40, Moves.X_SCISSOR ], - [ 43, Moves.TAUNT ], - [ 47, Moves.SWORDS_DANCE ], - [ 50, Moves.CLOSE_COMBAT ], - ], - [Species.SEVIPER]: [ - [ 1, Moves.WRAP ], - [ 1, Moves.SWAGGER ], - [ 4, Moves.BITE ], - [ 6, Moves.LICK ], - [ 9, Moves.POISON_TAIL ], - [ 11, Moves.FEINT ], - [ 14, Moves.SCREECH ], - [ 19, Moves.GLARE ], - [ 21, Moves.POISON_FANG ], - [ 24, Moves.VENOSHOCK ], - [ 29, Moves.GASTRO_ACID ], - [ 31, Moves.POISON_JAB ], - [ 34, Moves.HAZE ], - [ 39, Moves.CRUNCH ], - [ 41, Moves.BELCH ], - [ 44, Moves.COIL ], - [ 46, Moves.SLUDGE_BOMB ], - ], - [Species.LUNATONE]: [ - [ 1, Moves.MOONBLAST ], - [ 1, Moves.MOONLIGHT ], - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.ROCK_THROW ], - [ 5, Moves.HYPNOSIS ], - [ 10, Moves.ROCK_POLISH ], - [ 15, Moves.ROCK_SLIDE ], - [ 20, Moves.PSYSHOCK ], - [ 25, Moves.COSMIC_POWER ], - [ 30, Moves.PSYCHIC ], - [ 35, Moves.STONE_EDGE ], - [ 40, Moves.FUTURE_SIGHT ], - [ 45, Moves.MAGIC_ROOM ], - [ 50, Moves.EXPLOSION ], - ], - [Species.SOLROCK]: [ - [ 1, Moves.FLARE_BLITZ ], - [ 1, Moves.MORNING_SUN ], - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.ROCK_THROW ], - [ 5, Moves.HYPNOSIS ], - [ 10, Moves.ROCK_POLISH ], - [ 15, Moves.ROCK_SLIDE ], - [ 20, Moves.ZEN_HEADBUTT ], - [ 25, Moves.COSMIC_POWER ], - [ 30, Moves.PSYCHIC ], - [ 35, Moves.STONE_EDGE ], - [ 40, Moves.SOLAR_BEAM ], - [ 45, Moves.WONDER_ROOM ], - [ 50, Moves.EXPLOSION ], - ], - [Species.BARBOACH]: [ - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.WATER_GUN ], - [ 6, Moves.REST ], - [ 6, Moves.SNORE ], - [ 12, Moves.WATER_PULSE ], - [ 18, Moves.AMNESIA ], - [ 24, Moves.AQUA_TAIL ], - [ 31, Moves.MUDDY_WATER ], - [ 36, Moves.EARTHQUAKE ], - [ 42, Moves.FUTURE_SIGHT ], - [ 48, Moves.FISSURE ], - ], - [Species.WHISCASH]: [ - [ EVOLVE_MOVE, Moves.THRASH ], - [ 1, Moves.BELCH ], - [ 1, Moves.ZEN_HEADBUTT ], - [ 1, Moves.TICKLE ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.REST ], - [ 1, Moves.SNORE ], - [ 12, Moves.WATER_PULSE ], - [ 18, Moves.AMNESIA ], - [ 24, Moves.AQUA_TAIL ], - [ 33, Moves.MUDDY_WATER ], - [ 40, Moves.EARTHQUAKE ], - [ 48, Moves.FUTURE_SIGHT ], - [ 56, Moves.FISSURE ], - ], - [Species.CORPHISH]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.HARDEN ], - [ 4, Moves.LEER ], - [ 8, Moves.TAUNT ], - [ 12, Moves.BUBBLE_BEAM ], - [ 16, Moves.KNOCK_OFF ], - [ 20, Moves.DOUBLE_HIT ], - [ 24, Moves.PROTECT ], - [ 28, Moves.NIGHT_SLASH ], - [ 32, Moves.RAZOR_SHELL ], - [ 36, Moves.SWORDS_DANCE ], - [ 40, Moves.CRUNCH ], - [ 44, Moves.CRABHAMMER ], - [ 48, Moves.ENDEAVOR ], - [ 52, Moves.GUILLOTINE ], - ], - [Species.CRAWDAUNT]: [ - [ EVOLVE_MOVE, Moves.SWIFT ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.HARDEN ], - [ 1, Moves.LEER ], - [ 1, Moves.TAUNT ], - [ 12, Moves.BUBBLE_BEAM ], - [ 16, Moves.KNOCK_OFF ], - [ 20, Moves.DOUBLE_HIT ], - [ 24, Moves.PROTECT ], - [ 28, Moves.NIGHT_SLASH ], - [ 34, Moves.RAZOR_SHELL ], - [ 40, Moves.SWORDS_DANCE ], - [ 46, Moves.CRUNCH ], - [ 52, Moves.CRABHAMMER ], - [ 58, Moves.ENDEAVOR ], - [ 64, Moves.GUILLOTINE ], - ], - [Species.BALTOY]: [ - [ 1, Moves.HARDEN ], - [ 1, Moves.MUD_SLAP ], - [ 3, Moves.RAPID_SPIN ], - [ 6, Moves.CONFUSION ], - [ 9, Moves.ROCK_TOMB ], - [ 12, Moves.POWER_TRICK ], - [ 15, Moves.PSYBEAM ], - [ 18, Moves.ANCIENT_POWER ], - [ 21, Moves.IMPRISON ], - [ 24, Moves.COSMIC_POWER ], - [ 27, Moves.EXTRASENSORY ], - [ 30, Moves.EARTH_POWER ], - [ 33, Moves.SELF_DESTRUCT ], - [ 36, Moves.GUARD_SPLIT ], - [ 36, Moves.POWER_SPLIT ], - [ 39, Moves.SANDSTORM ], - [ 42, Moves.EXPLOSION ], - ], - [Species.CLAYDOL]: [ - [ EVOLVE_MOVE, Moves.HYPER_BEAM ], - [ 1, Moves.TELEPORT ], - [ 1, Moves.HARDEN ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.CONFUSION ], - [ 9, Moves.ROCK_TOMB ], - [ 12, Moves.POWER_TRICK ], - [ 15, Moves.PSYBEAM ], - [ 18, Moves.ANCIENT_POWER ], - [ 21, Moves.IMPRISON ], - [ 24, Moves.COSMIC_POWER ], - [ 27, Moves.EXTRASENSORY ], - [ 30, Moves.EARTH_POWER ], - [ 33, Moves.SELF_DESTRUCT ], - [ 38, Moves.GUARD_SPLIT ], - [ 38, Moves.POWER_SPLIT ], - [ 43, Moves.SANDSTORM ], - [ 48, Moves.EXPLOSION ], - ], - [Species.LILEEP]: [ - [ 1, Moves.WRAP ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.CONSTRICT ], - [ 4, Moves.ACID ], - [ 8, Moves.CONFUSE_RAY ], - [ 12, Moves.INGRAIN ], - [ 16, Moves.ANCIENT_POWER ], - [ 20, Moves.MEGA_DRAIN ], - [ 24, Moves.BRINE ], - [ 28, Moves.AMNESIA ], - [ 32, Moves.GASTRO_ACID ], - [ 36, Moves.GIGA_DRAIN ], - [ 41, Moves.STOCKPILE ], - [ 41, Moves.SPIT_UP ], - [ 41, Moves.SWALLOW ], - [ 44, Moves.ENERGY_BALL ], - ], - [Species.CRADILY]: [ - [ 1, Moves.LEECH_SEED ], - [ 1, Moves.WRAP ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.CONSTRICT ], - [ 1, Moves.ACID ], - [ 1, Moves.CONFUSE_RAY ], - [ 12, Moves.INGRAIN ], - [ 16, Moves.ANCIENT_POWER ], - [ 20, Moves.MEGA_DRAIN ], - [ 24, Moves.BRINE ], - [ 28, Moves.AMNESIA ], - [ 32, Moves.GASTRO_ACID ], - [ 36, Moves.GIGA_DRAIN ], - [ 43, Moves.STOCKPILE ], - [ 43, Moves.SPIT_UP ], - [ 43, Moves.SWALLOW ], - [ 48, Moves.ENERGY_BALL ], - ], - [Species.ANORITH]: [ - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.HARDEN ], - [ 4, Moves.WATER_GUN ], - [ 8, Moves.SMACK_DOWN ], - [ 12, Moves.METAL_CLAW ], - [ 16, Moves.ANCIENT_POWER ], - [ 20, Moves.BUG_BITE ], - [ 24, Moves.BRINE ], - [ 28, Moves.SLASH ], - [ 32, Moves.CRUSH_CLAW ], - [ 36, Moves.ROCK_BLAST ], - [ 41, Moves.PROTECT ], - [ 44, Moves.X_SCISSOR ], - ], - [Species.ARMALDO]: [ - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.HARDEN ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.SMACK_DOWN ], - [ 12, Moves.METAL_CLAW ], - [ 16, Moves.ANCIENT_POWER ], - [ 20, Moves.BUG_BITE ], - [ 24, Moves.BRINE ], - [ 28, Moves.SLASH ], - [ 32, Moves.CRUSH_CLAW ], - [ 36, Moves.ROCK_BLAST ], - [ 43, Moves.PROTECT ], - [ 48, Moves.X_SCISSOR ], - ], - [Species.FEEBAS]: [ - [ 1, Moves.SPLASH ], - [ 15, Moves.TACKLE ], - [ 25, Moves.FLAIL ], - ], - [Species.MILOTIC]: [ - [ EVOLVE_MOVE, Moves.WATER_PULSE ], - [ 1, Moves.FLAIL ], - [ 1, Moves.SPLASH ], - [ 1, Moves.TACKLE ], - [ 1, Moves.WRAP ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.WATER_SPORT ], - [ 4, Moves.DISARMING_VOICE ], - [ 8, Moves.TWISTER ], - [ 12, Moves.AQUA_RING ], - [ 16, Moves.ATTRACT ], - [ 20, Moves.LIFE_DEW ], - [ 24, Moves.DRAGON_TAIL ], - [ 28, Moves.RECOVER ], - [ 32, Moves.AQUA_TAIL ], - [ 36, Moves.SAFEGUARD ], - [ 40, Moves.SURF ], - [ 44, Moves.RAIN_DANCE ], - [ 48, Moves.COIL ], - [ 52, Moves.HYDRO_PUMP ], - ], - [Species.CASTFORM]: [ - [ 1, Moves.TACKLE ], - [ 10, Moves.WATER_GUN ], - [ 10, Moves.EMBER ], - [ 10, Moves.POWDER_SNOW ], - [ 15, Moves.HEADBUTT ], - [ 20, Moves.RAIN_DANCE ], - [ 20, Moves.SUNNY_DAY ], - [ 20, Moves.HAIL ], - [ 25, Moves.WEATHER_BALL ], - [ 35, Moves.HYDRO_PUMP ], - [ 35, Moves.FIRE_BLAST ], - [ 35, Moves.BLIZZARD ], - [ 45, Moves.HURRICANE ], - ], - [Species.KECLEON]: [ - [ 1, Moves.THIEF ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.LICK ], - [ 1, Moves.SCRATCH ], - [ 4, Moves.BIND ], - [ 7, Moves.SHADOW_SNEAK ], - [ 10, Moves.FEINT ], - [ 13, Moves.FURY_SWIPES ], - [ 16, Moves.DISABLE ], - [ 18, Moves.PSYBEAM ], - [ 21, Moves.ANCIENT_POWER ], - [ 25, Moves.SLASH ], - [ 30, Moves.DETECT ], - [ 33, Moves.SHADOW_CLAW ], - [ 38, Moves.SCREECH ], - [ 42, Moves.SUBSTITUTE ], - [ 46, Moves.SUCKER_PUNCH ], - [ 50, Moves.FOUL_PLAY ], - ], - [Species.SHUPPET]: [ - [ 1, Moves.ASTONISH ], - [ 1, Moves.PURSUIT ], // Custom - [ 4, Moves.SCREECH ], - [ 7, Moves.NIGHT_SHADE ], - [ 10, Moves.SPITE ], - [ 16, Moves.WILL_O_WISP ], - [ 19, Moves.SHADOW_SNEAK ], - [ 22, Moves.HEX ], - [ 26, Moves.CURSE ], - [ 30, Moves.SHADOW_BALL ], - [ 34, Moves.ROLE_PLAY ], - [ 38, Moves.SUCKER_PUNCH ], - [ 42, Moves.TRICK ], - [ 48, Moves.PHANTOM_FORCE ], - ], - [Species.BANETTE]: [ - [ EVOLVE_MOVE, Moves.KNOCK_OFF ], - [ 1, Moves.ASTONISH ], // Previous Stage Move - [ 1, Moves.PURSUIT ], // Previous Stage Move, Custom - [ 1, Moves.SCREECH ], - [ 1, Moves.NIGHT_SHADE ], - [ 1, Moves.SPITE ], - [ 16, Moves.WILL_O_WISP ], - [ 19, Moves.SHADOW_SNEAK ], - [ 22, Moves.HEX ], - [ 26, Moves.CURSE ], - [ 30, Moves.SHADOW_BALL ], - [ 34, Moves.ROLE_PLAY ], - [ 40, Moves.SUCKER_PUNCH ], - [ 46, Moves.TRICK ], - [ 53, Moves.PHANTOM_FORCE ], - ], - [Species.DUSKULL]: [ - [ 1, Moves.ASTONISH ], - [ 1, Moves.LEER ], - [ 1, Moves.PURSUIT ], // Custom - [ 4, Moves.DISABLE ], - [ 8, Moves.SHADOW_SNEAK ], - [ 12, Moves.CONFUSE_RAY ], - [ 16, Moves.NIGHT_SHADE ], - [ 20, Moves.PAYBACK ], - [ 24, Moves.WILL_O_WISP ], - [ 28, Moves.MEAN_LOOK ], - [ 32, Moves.HEX ], - [ 36, Moves.CURSE ], - [ 40, Moves.SHADOW_BALL ], - [ 44, Moves.FUTURE_SIGHT ], - ], - [Species.DUSCLOPS]: [ - [ EVOLVE_MOVE, Moves.SHADOW_PUNCH ], - [ 1, Moves.FIRE_PUNCH ], - [ 1, Moves.ICE_PUNCH ], - [ 1, Moves.THUNDER_PUNCH ], - [ 1, Moves.GRAVITY ], - [ 1, Moves.BIND ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.LEER ], - [ 1, Moves.PURSUIT ], // Previous Stage Move, Custom - [ 1, Moves.DISABLE ], - [ 1, Moves.SHADOW_SNEAK ], - [ 12, Moves.CONFUSE_RAY ], - [ 16, Moves.NIGHT_SHADE ], - [ 20, Moves.PAYBACK ], - [ 24, Moves.WILL_O_WISP ], - [ 28, Moves.MEAN_LOOK ], - [ 32, Moves.HEX ], - [ 36, Moves.CURSE ], - [ 42, Moves.SHADOW_BALL ], - [ 48, Moves.FUTURE_SIGHT ], - ], - [Species.TROPIUS]: [ - [ 1, Moves.LEAF_STORM ], - [ 1, Moves.GUST ], - [ 1, Moves.LEER ], - [ 1, Moves.GROWTH ], - [ 1, Moves.RAZOR_LEAF ], - [ 6, Moves.SWEET_SCENT ], - [ 10, Moves.STOMP ], - [ 16, Moves.MAGICAL_LEAF ], - [ 21, Moves.WHIRLWIND ], - [ 30, Moves.WIDE_GUARD ], - [ 36, Moves.AIR_SLASH ], - [ 41, Moves.BODY_SLAM ], - [ 46, Moves.OUTRAGE ], - [ 50, Moves.SYNTHESIS ], - [ 56, Moves.SOLAR_BEAM ], - ], - [Species.CHIMECHO]: [ - [ 1, Moves.HEALING_WISH ], - [ 1, Moves.LAST_RESORT ], // Previous Stage Move - [ 1, Moves.ENTRAINMENT ], // Previous Stage Move - [ 1, Moves.WRAP ], - [ 1, Moves.PSYWAVE ], // Previous Stage Move, Custom - [ 1, Moves.GROWL ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.SYNCHRONOISE ], - [ 13, Moves.YAWN ], - [ 16, Moves.STORED_POWER ], - [ 19, Moves.TAKE_DOWN ], - [ 22, Moves.EXTRASENSORY ], - [ 27, Moves.HEAL_BELL ], - [ 32, Moves.UPROAR ], - [ 37, Moves.SAFEGUARD ], - [ 42, Moves.DOUBLE_EDGE ], - [ 47, Moves.HEAL_PULSE ], - ], - [Species.ABSOL]: [ - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.LEER ], - [ 5, Moves.DOUBLE_TEAM ], - [ 10, Moves.KNOCK_OFF ], - [ 15, Moves.DETECT ], - [ 20, Moves.TAUNT ], - [ 25, Moves.SLASH ], - [ 30, Moves.NIGHT_SLASH ], - [ 35, Moves.FOCUS_ENERGY ], - [ 40, Moves.SUCKER_PUNCH ], - [ 45, Moves.SWORDS_DANCE ], - [ 50, Moves.FUTURE_SIGHT ], - [ 55, Moves.PERISH_SONG ], - ], - [Species.WYNAUT]: [ - [ 1, Moves.COUNTER ], - [ 1, Moves.MIRROR_COAT ], - [ 1, Moves.SAFEGUARD ], - [ 1, Moves.DESTINY_BOND ], - [ 1, Moves.SPLASH ], - [ 1, Moves.CHARM ], - [ 1, Moves.ENCORE ], - [ 1, Moves.AMNESIA ], - ], - [Species.SNORUNT]: [ - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.HEADBUTT ], - [ 5, Moves.LEER ], - [ 10, Moves.DOUBLE_TEAM ], - [ 15, Moves.ICE_SHARD ], - [ 20, Moves.PROTECT ], - [ 25, Moves.ICY_WIND ], - [ 30, Moves.FROST_BREATH ], - [ 35, Moves.BITE ], - [ 40, Moves.ICE_FANG ], - [ 45, Moves.SNOWSCAPE ], - [ 50, Moves.WEATHER_BALL ], - [ 55, Moves.CRUNCH ], - [ 60, Moves.BLIZZARD ], - ], - [Species.GLALIE]: [ - [ EVOLVE_MOVE, Moves.FREEZE_DRY ], - [ 1, Moves.SHEER_COLD ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.HEADBUTT ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.LEER ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.ICE_BALL ], - [ 15, Moves.ICE_SHARD ], - [ 20, Moves.PROTECT ], - [ 25, Moves.ICY_WIND ], - [ 30, Moves.FROST_BREATH ], - [ 35, Moves.BITE ], - [ 40, Moves.ICE_FANG ], - [ 47, Moves.SNOWSCAPE ], - [ 54, Moves.WEATHER_BALL ], - [ 61, Moves.CRUNCH ], - [ 68, Moves.BLIZZARD ], - ], - [Species.SPHEAL]: [ - [ 1, Moves.ROLLOUT ], - [ 1, Moves.DEFENSE_CURL ], - [ 4, Moves.GROWL ], - [ 8, Moves.WATER_GUN ], - [ 12, Moves.POWDER_SNOW ], - [ 16, Moves.REST ], - [ 20, Moves.SNORE ], - [ 24, Moves.BRINE ], - [ 28, Moves.AURORA_BEAM ], - [ 33, Moves.ENCORE ], - [ 36, Moves.BODY_SLAM ], - [ 40, Moves.SURF ], - [ 44, Moves.BLIZZARD ], - [ 48, Moves.HAIL ], - [ 52, Moves.SHEER_COLD ], - ], - [Species.SEALEO]: [ - [ EVOLVE_MOVE, Moves.SWAGGER ], - [ 1, Moves.ROLLOUT ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 12, Moves.POWDER_SNOW ], - [ 16, Moves.REST ], - [ 20, Moves.SNORE ], - [ 24, Moves.BRINE ], - [ 28, Moves.AURORA_BEAM ], - [ 35, Moves.ENCORE ], - [ 40, Moves.BODY_SLAM ], - [ 46, Moves.SURF ], - [ 52, Moves.BLIZZARD ], - [ 58, Moves.HAIL ], - [ 64, Moves.SHEER_COLD ], - ], - [Species.WALREIN]: [ - [ 1, Moves.SWAGGER ], - [ 1, Moves.CRUNCH ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.ROLLOUT ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 12, Moves.POWDER_SNOW ], - [ 16, Moves.REST ], - [ 20, Moves.SNORE ], - [ 24, Moves.BRINE ], - [ 28, Moves.AURORA_BEAM ], - [ 35, Moves.ENCORE ], - [ 40, Moves.BODY_SLAM ], - [ 48, Moves.SURF ], - [ 56, Moves.BLIZZARD ], - [ 64, Moves.HAIL ], - [ 72, Moves.SHEER_COLD ], - ], - [Species.CLAMPERL]: [ - [ 1, Moves.CLAMP ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.WHIRLPOOL ], - [ 1, Moves.IRON_DEFENSE ], - [ 50, Moves.SHELL_SMASH ], - ], - [Species.HUNTAIL]: [ - [ 1, Moves.CLAMP ], // Previous Stage Move - [ 1, Moves.WATER_GUN ], - [ 1, Moves.IRON_DEFENSE ], - [ 1, Moves.SHELL_SMASH ], - [ 1, Moves.WHIRLPOOL ], - [ 1, Moves.BITE ], - [ 5, Moves.SCREECH ], - [ 9, Moves.SCARY_FACE ], - [ 11, Moves.RAIN_DANCE ], - [ 14, Moves.WATER_PULSE ], - [ 16, Moves.ICE_FANG ], - [ 19, Moves.BRINE ], - [ 23, Moves.SUCKER_PUNCH ], - [ 26, Moves.DIVE ], - [ 29, Moves.BATON_PASS ], - [ 34, Moves.CRUNCH ], - [ 39, Moves.AQUA_TAIL ], - [ 45, Moves.COIL ], - [ 50, Moves.HYDRO_PUMP ], - ], - [Species.GOREBYSS]: [ - [ 1, Moves.CLAMP ], // Previous Stage Move - [ 1, Moves.WATER_GUN ], - [ 1, Moves.IRON_DEFENSE ], - [ 1, Moves.SHELL_SMASH ], - [ 1, Moves.WHIRLPOOL ], - [ 1, Moves.CONFUSION ], - [ 5, Moves.RAIN_DANCE ], - [ 9, Moves.AGILITY ], - [ 11, Moves.DRAINING_KISS ], - [ 14, Moves.WATER_PULSE ], - [ 16, Moves.AMNESIA ], - [ 19, Moves.AQUA_RING ], - [ 23, Moves.SAFEGUARD ], - [ 26, Moves.DIVE ], - [ 29, Moves.BATON_PASS ], - [ 34, Moves.PSYCHIC ], - [ 39, Moves.AQUA_TAIL ], - [ 45, Moves.COIL ], - [ 50, Moves.HYDRO_PUMP ], - ], - [Species.RELICANTH]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 5, Moves.WATER_GUN ], - [ 10, Moves.ANCIENT_POWER ], - [ 15, Moves.YAWN ], - [ 20, Moves.DIVE ], - [ 25, Moves.TAKE_DOWN ], - [ 30, Moves.AQUA_TAIL ], - [ 35, Moves.REST ], - [ 40, Moves.FLAIL ], - [ 45, Moves.HYDRO_PUMP ], - [ 50, Moves.DOUBLE_EDGE ], - [ 55, Moves.HEAD_SMASH ], - ], - [Species.LUVDISC]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.CHARM ], - [ 4, Moves.WATER_GUN ], - [ 7, Moves.AGILITY ], - [ 13, Moves.WISH ], - [ 17, Moves.WATER_PULSE ], - [ 20, Moves.ATTRACT ], - [ 22, Moves.DRAINING_KISS ], - [ 26, Moves.FLAIL ], - [ 31, Moves.SWEET_KISS ], - [ 34, Moves.TAKE_DOWN ], - [ 37, Moves.BABY_DOLL_EYES ], - [ 40, Moves.AQUA_RING ], - [ 42, Moves.SOAK ], - [ 46, Moves.HYDRO_PUMP ], - [ 49, Moves.SAFEGUARD ], - ], - [Species.BAGON]: [ - [ 1, Moves.EMBER ], - [ 1, Moves.LEER ], - [ 5, Moves.BITE ], - [ 10, Moves.DRAGON_BREATH ], - [ 15, Moves.HEADBUTT ], - [ 20, Moves.SCARY_FACE ], - [ 25, Moves.CRUNCH ], - [ 31, Moves.DRAGON_CLAW ], - [ 35, Moves.ZEN_HEADBUTT ], - [ 40, Moves.FOCUS_ENERGY ], - [ 45, Moves.FLAMETHROWER ], - [ 50, Moves.OUTRAGE ], - [ 55, Moves.DOUBLE_EDGE ], - ], - [Species.SHELGON]: [ - [ EVOLVE_MOVE, Moves.PROTECT ], - [ 1, Moves.EMBER ], - [ 1, Moves.LEER ], - [ 1, Moves.BITE ], - [ 1, Moves.DRAGON_BREATH ], - [ 15, Moves.HEADBUTT ], - [ 20, Moves.SCARY_FACE ], - [ 25, Moves.CRUNCH ], - [ 33, Moves.DRAGON_CLAW ], - [ 39, Moves.ZEN_HEADBUTT ], - [ 46, Moves.FOCUS_ENERGY ], - [ 53, Moves.FLAMETHROWER ], - [ 60, Moves.OUTRAGE ], - [ 67, Moves.DOUBLE_EDGE ], - ], - [Species.SALAMENCE]: [ - [ EVOLVE_MOVE, Moves.FLY ], - [ RELEARN_MOVE, Moves.OUTRAGE ], // Previous Stage Move - [ 1, Moves.PROTECT ], - [ 1, Moves.DRAGON_TAIL ], - [ 1, Moves.DUAL_WINGBEAT ], - [ 1, Moves.ROOST ], - [ 1, Moves.EMBER ], - [ 1, Moves.LEER ], - [ 1, Moves.BITE ], - [ 1, Moves.DRAGON_BREATH ], - [ 15, Moves.HEADBUTT ], - [ 20, Moves.SCARY_FACE ], - [ 25, Moves.CRUNCH ], - [ 33, Moves.DRAGON_CLAW ], - [ 39, Moves.ZEN_HEADBUTT ], - [ 46, Moves.FOCUS_ENERGY ], - [ 55, Moves.FLAMETHROWER ], - [ 73, Moves.DOUBLE_EDGE ], - ], - [Species.BELDUM]: [ - [ 1, Moves.TACKLE ], - ], - [Species.METANG]: [ - [ EVOLVE_MOVE, Moves.CONFUSION ], - [ EVOLVE_MOVE, Moves.METAL_CLAW ], - [ 1, Moves.TACKLE ], - [ 1, Moves.BULLET_PUNCH ], - [ 1, Moves.HONE_CLAWS ], - [ 6, Moves.ZEN_HEADBUTT ], - [ 12, Moves.MAGNET_RISE ], - [ 18, Moves.FLASH_CANNON ], - [ 26, Moves.TAKE_DOWN ], - [ 34, Moves.PSYCHIC ], - [ 42, Moves.SCARY_FACE ], - [ 50, Moves.METEOR_MASH ], - [ 58, Moves.IRON_DEFENSE ], - [ 66, Moves.AGILITY ], - [ 74, Moves.HYPER_BEAM ], - ], - [Species.METAGROSS]: [ - [ EVOLVE_MOVE, Moves.HAMMER_ARM ], - [ RELEARN_MOVE, Moves.EXPLOSION ], - [ RELEARN_MOVE, Moves.HONE_CLAWS ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.BULLET_PUNCH ], - [ 1, Moves.TACKLE ], - [ 6, Moves.ZEN_HEADBUTT ], - [ 12, Moves.MAGNET_RISE ], - [ 16, Moves.FLASH_CANNON ], - [ 26, Moves.TAKE_DOWN ], - [ 34, Moves.PSYCHIC ], - [ 42, Moves.SCARY_FACE ], - [ 52, Moves.METEOR_MASH ], - [ 62, Moves.IRON_DEFENSE ], - [ 72, Moves.AGILITY ], - [ 82, Moves.HYPER_BEAM ], - ], - [Species.REGIROCK]: [ - [ 1, Moves.CHARGE_BEAM ], - [ 1, Moves.ROCK_THROW ], - [ 6, Moves.BULLDOZE ], - [ 12, Moves.ANCIENT_POWER ], - [ 18, Moves.STOMP ], - [ 24, Moves.ROCK_SLIDE ], - [ 30, Moves.CURSE ], - [ 36, Moves.IRON_DEFENSE ], - [ 42, Moves.HAMMER_ARM ], - [ 48, Moves.STONE_EDGE ], - [ 54, Moves.SUPERPOWER ], - [ 60, Moves.LOCK_ON ], - [ 66, Moves.ZAP_CANNON ], - [ 72, Moves.HYPER_BEAM ], - [ 78, Moves.EXPLOSION ], - ], - [Species.REGICE]: [ - [ 1, Moves.CHARGE_BEAM ], - [ 1, Moves.ICY_WIND ], - [ 6, Moves.BULLDOZE ], - [ 12, Moves.ANCIENT_POWER ], - [ 18, Moves.STOMP ], - [ 24, Moves.ICE_BEAM ], - [ 30, Moves.CURSE ], - [ 36, Moves.AMNESIA ], - [ 42, Moves.HAMMER_ARM ], - [ 48, Moves.BLIZZARD ], - [ 54, Moves.SUPERPOWER ], - [ 60, Moves.LOCK_ON ], - [ 66, Moves.ZAP_CANNON ], - [ 72, Moves.HYPER_BEAM ], - [ 78, Moves.EXPLOSION ], - ], - [Species.REGISTEEL]: [ - [ 1, Moves.CHARGE_BEAM ], - [ 1, Moves.METAL_CLAW ], - [ 6, Moves.BULLDOZE ], - [ 12, Moves.ANCIENT_POWER ], - [ 18, Moves.STOMP ], - [ 24, Moves.IRON_HEAD ], - [ 24, Moves.FLASH_CANNON ], - [ 30, Moves.CURSE ], - [ 36, Moves.AMNESIA ], - [ 36, Moves.IRON_DEFENSE ], - [ 42, Moves.HAMMER_ARM ], - [ 48, Moves.HEAVY_SLAM ], - [ 54, Moves.SUPERPOWER ], - [ 60, Moves.LOCK_ON ], - [ 66, Moves.ZAP_CANNON ], - [ 72, Moves.HYPER_BEAM ], - [ 78, Moves.EXPLOSION ], - ], - [Species.LATIAS]: [ - [ 1, Moves.STORED_POWER ], - [ 1, Moves.CHARM ], - [ 1, Moves.PSYWAVE ], - [ 5, Moves.HELPING_HAND ], - [ 10, Moves.RECOVER ], - [ 15, Moves.CONFUSION ], - [ 20, Moves.TAILWIND ], - [ 25, Moves.DRAGON_BREATH ], - [ 30, Moves.WISH ], - [ 35, Moves.MIST_BALL ], - [ 40, Moves.ZEN_HEADBUTT ], - [ 45, Moves.DRAGON_PULSE ], - [ 50, Moves.HEAL_PULSE ], - [ 55, Moves.REFLECT_TYPE ], - [ 60, Moves.PSYCHIC ], - [ 65, Moves.GUARD_SPLIT ], - [ 70, Moves.HEALING_WISH ], - ], - [Species.LATIOS]: [ - [ 1, Moves.STORED_POWER ], - [ 1, Moves.DRAGON_DANCE ], - [ 1, Moves.HEAL_BLOCK ], - [ 1, Moves.PSYWAVE ], - [ 5, Moves.HELPING_HAND ], - [ 10, Moves.RECOVER ], - [ 15, Moves.CONFUSION ], - [ 20, Moves.TAILWIND ], - [ 25, Moves.DRAGON_BREATH ], - [ 30, Moves.ALLY_SWITCH ], - [ 35, Moves.LUSTER_PURGE ], - [ 40, Moves.ZEN_HEADBUTT ], - [ 45, Moves.DRAGON_PULSE ], - [ 50, Moves.HEAL_PULSE ], - [ 55, Moves.SIMPLE_BEAM ], - [ 60, Moves.PSYCHIC ], - [ 65, Moves.POWER_SPLIT ], - [ 70, Moves.MEMENTO ], - ], - [Species.KYOGRE]: [ - [ 1, Moves.ORIGIN_PULSE ], - [ 1, Moves.WATER_PULSE ], - [ 1, Moves.ANCIENT_POWER ], - [ 1, Moves.BODY_SLAM ], - [ 1, Moves.SCARY_FACE ], - [ 9, Moves.AQUA_TAIL ], - [ 18, Moves.CALM_MIND ], - [ 27, Moves.MUDDY_WATER ], - [ 36, Moves.ICE_BEAM ], - [ 45, Moves.SHEER_COLD ], - [ 54, Moves.AQUA_RING ], - [ 72, Moves.HYDRO_PUMP ], - [ 81, Moves.DOUBLE_EDGE ], - [ 90, Moves.WATER_SPOUT ], - ], - [Species.GROUDON]: [ - [ 1, Moves.PRECIPICE_BLADES ], - [ 1, Moves.MUD_SHOT ], - [ 1, Moves.ANCIENT_POWER ], - [ 1, Moves.LAVA_PLUME ], - [ 1, Moves.SCARY_FACE ], - [ 9, Moves.EARTH_POWER ], - [ 18, Moves.BULK_UP ], - [ 27, Moves.EARTHQUAKE ], - [ 36, Moves.HAMMER_ARM ], - [ 45, Moves.FISSURE ], - [ 54, Moves.REST ], - [ 72, Moves.FIRE_BLAST ], - [ 81, Moves.SOLAR_BEAM ], - [ 90, Moves.ERUPTION ], - ], - [Species.RAYQUAZA]: [ - [ 1, Moves.DRAGON_ASCENT ], - [ 1, Moves.TWISTER ], - [ 1, Moves.ANCIENT_POWER ], - [ 1, Moves.AIR_SLASH ], - [ 1, Moves.SCARY_FACE ], - [ 9, Moves.CRUNCH ], - [ 18, Moves.DRAGON_DANCE ], - [ 27, Moves.EXTREME_SPEED ], - [ 36, Moves.DRAGON_PULSE ], - [ 45, Moves.HYPER_VOICE ], - [ 54, Moves.REST ], - [ 63, Moves.FLY ], - [ 72, Moves.HURRICANE ], - [ 81, Moves.OUTRAGE ], - [ 90, Moves.HYPER_BEAM ], - ], - [Species.JIRACHI]: [ - [ 1, Moves.CONFUSION ], - [ 1, Moves.WISH ], - [ 7, Moves.SWIFT ], - [ 21, Moves.LIFE_DEW ], - [ 28, Moves.ZEN_HEADBUTT ], - [ 35, Moves.GRAVITY ], - [ 42, Moves.PSYCHIC ], - [ 49, Moves.METEOR_MASH ], - [ 56, Moves.HEALING_WISH ], - [ 63, Moves.REST ], - [ 70, Moves.FUTURE_SIGHT ], - [ 77, Moves.DOUBLE_EDGE ], - [ 84, Moves.COSMIC_POWER ], - [ 91, Moves.LAST_RESORT ], - [ 98, Moves.DOOM_DESIRE ], - ], - [Species.DEOXYS]: [ - [ 1, Moves.CONFUSION ], // Custom - [ 1, Moves.LEER ], - [ 1, Moves.WRAP ], - [ 7, Moves.NIGHT_SHADE ], - [ 13, Moves.TELEPORT ], - [ 19, Moves.KNOCK_OFF ], - [ 25, Moves.PSYSHOCK ], - [ 31, Moves.PSYCHIC ], - [ 37, Moves.GRAVITY ], - [ 43, Moves.SKILL_SWAP ], - [ 49, Moves.ZEN_HEADBUTT ], - [ 55, Moves.COSMIC_POWER ], - [ 61, Moves.RECOVER ], - [ 67, Moves.PSYCHO_BOOST ], - [ 73, Moves.HYPER_BEAM ], - ], - [Species.TURTWIG]: [ - [ 1, Moves.TACKLE ], - [ 5, Moves.WITHDRAW ], - [ 5, Moves.LEAFAGE ], // Custom, moved from 10 to 5, BDSP - [ 9, Moves.GROWTH ], // Fill empty moveslot, from BDSP level 6 - [ 13, Moves.RAZOR_LEAF ], - [ 17, Moves.CURSE ], - [ 21, Moves.BITE ], - [ 25, Moves.MEGA_DRAIN ], - [ 29, Moves.LEECH_SEED ], - [ 33, Moves.SYNTHESIS ], - [ 37, Moves.CRUNCH ], - [ 41, Moves.GIGA_DRAIN ], - [ 45, Moves.LEAF_STORM ], - ], - [Species.GROTLE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.ABSORB ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.LEAFAGE ], - [ 1, Moves.GROWTH ], // Previous Stage Move - [ 13, Moves.RAZOR_LEAF ], - [ 17, Moves.CURSE ], - [ 22, Moves.BITE ], - [ 27, Moves.MEGA_DRAIN ], - [ 32, Moves.LEECH_SEED ], - [ 37, Moves.SYNTHESIS ], - [ 42, Moves.CRUNCH ], - [ 47, Moves.GIGA_DRAIN ], - [ 52, Moves.LEAF_STORM ], - ], - [Species.TORTERRA]: [ - [ EVOLVE_MOVE, Moves.EARTHQUAKE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.ABSORB ], - [ 1, Moves.LEAFAGE ], - [ 1, Moves.GROWTH ], // Previous Stage Move - [ 1, Moves.RAZOR_LEAF ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.WOOD_HAMMER ], - [ 17, Moves.CURSE ], - [ 22, Moves.BITE ], - [ 27, Moves.MEGA_DRAIN ], - [ 33, Moves.LEECH_SEED ], - [ 39, Moves.SYNTHESIS ], - [ 45, Moves.CRUNCH ], - [ 51, Moves.GIGA_DRAIN ], - [ 57, Moves.LEAF_STORM ], - [ 63, Moves.HEADLONG_RUSH ], - ], - [Species.CHIMCHAR]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 5, Moves.EMBER ], // Custom, moved from 7 to 5 - [ 9, Moves.TAUNT ], - [ 15, Moves.FURY_SWIPES ], - [ 17, Moves.FLAME_WHEEL ], - [ 23, Moves.NASTY_PLOT ], - [ 25, Moves.TORMENT ], - [ 31, Moves.FACADE ], - [ 33, Moves.FIRE_SPIN ], - [ 39, Moves.ACROBATICS ], - [ 41, Moves.SLACK_OFF ], - [ 47, Moves.FLAMETHROWER ], - ], - [Species.MONFERNO]: [ - [ EVOLVE_MOVE, Moves.MACH_PUNCH ], - [ RELEARN_MOVE, Moves.NASTY_PLOT ], // Previous Stage Move - [ RELEARN_MOVE, Moves.FACADE ], // Previous Stage Move - [ RELEARN_MOVE, Moves.FLAMETHROWER ], // Previous Stage Move - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 9, Moves.TAUNT ], - [ 16, Moves.FURY_SWIPES ], - [ 19, Moves.FLAME_WHEEL ], - [ 26, Moves.FEINT ], - [ 29, Moves.TORMENT ], - [ 36, Moves.CLOSE_COMBAT ], - [ 39, Moves.FIRE_SPIN ], - [ 46, Moves.ACROBATICS ], - [ 49, Moves.SLACK_OFF ], - [ 56, Moves.FLARE_BLITZ ], - ], - [Species.INFERNAPE]: [ - [ EVOLVE_MOVE, Moves.CLOSE_COMBAT ], - [ RELEARN_MOVE, Moves.TAUNT ], - [ RELEARN_MOVE, Moves.NASTY_PLOT ], // Previous Stage Move - [ RELEARN_MOVE, Moves.FACADE ], // Previous Stage Move - [ RELEARN_MOVE, Moves.SLACK_OFF ], - [ RELEARN_MOVE, Moves.FLAMETHROWER ], // Previous Stage Move - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 1, Moves.MACH_PUNCH ], - [ 16, Moves.FURY_SWIPES ], - [ 19, Moves.FLAME_WHEEL ], - [ 26, Moves.FEINT ], - [ 29, Moves.TORMENT ], - [ 42, Moves.FIRE_SPIN ], - [ 47, Moves.FLARE_BLITZ ], - [ 52, Moves.ACROBATICS ], - [ 58, Moves.CALM_MIND ], - [ 65, Moves.RAGING_FURY ], - ], - [Species.PIPLUP]: [ - [ 1, Moves.POUND ], - [ 4, Moves.GROWL ], - [ 5, Moves.WATER_GUN ], // Custom, moved from 8 to 5 - [ 11, Moves.CHARM ], - [ 15, Moves.PECK ], - [ 18, Moves.BUBBLE_BEAM ], - [ 22, Moves.SWAGGER ], - [ 25, Moves.FURY_ATTACK ], - [ 29, Moves.BRINE ], - [ 32, Moves.WHIRLPOOL ], - [ 36, Moves.MIST ], - [ 39, Moves.DRILL_PECK ], - [ 43, Moves.HYDRO_PUMP ], - ], - [Species.PRINPLUP]: [ - [ EVOLVE_MOVE, Moves.METAL_CLAW ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.CHARM ], // Previous Stage Move - [ 15, Moves.PECK ], - [ 19, Moves.BUBBLE_BEAM ], - [ 24, Moves.SWAGGER ], - [ 28, Moves.FURY_ATTACK ], - [ 33, Moves.BRINE ], - [ 37, Moves.WHIRLPOOL ], - [ 42, Moves.MIST ], - [ 46, Moves.DRILL_PECK ], - [ 50, Moves.HYDRO_PUMP ], - ], - [Species.EMPOLEON]: [ - [ EVOLVE_MOVE, Moves.AQUA_JET ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.CHARM ], // Previous Stage Move - [ 1, Moves.METAL_CLAW ], - [ 11, Moves.SWORDS_DANCE ], - [ 15, Moves.PECK ], - [ 19, Moves.BUBBLE_BEAM ], - [ 24, Moves.SWAGGER ], - [ 28, Moves.FURY_ATTACK ], - [ 33, Moves.BRINE ], - [ 39, Moves.WHIRLPOOL ], - [ 46, Moves.MIST ], - [ 52, Moves.DRILL_PECK ], - [ 59, Moves.HYDRO_PUMP ], - [ 66, Moves.WAVE_CRASH ], - ], - [Species.STARLY]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 5, Moves.QUICK_ATTACK ], - [ 9, Moves.WING_ATTACK ], - [ 13, Moves.DOUBLE_TEAM ], - [ 17, Moves.ENDEAVOR ], - [ 21, Moves.WHIRLWIND ], - [ 25, Moves.AERIAL_ACE ], - [ 29, Moves.TAKE_DOWN ], - [ 33, Moves.AGILITY ], - [ 37, Moves.BRAVE_BIRD ], - [ 41, Moves.FINAL_GAMBIT ], - ], - [Species.STARAVIA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.QUICK_ATTACK ], - [ 9, Moves.WING_ATTACK ], - [ 13, Moves.DOUBLE_TEAM ], - [ 18, Moves.ENDEAVOR ], - [ 23, Moves.WHIRLWIND ], - [ 28, Moves.AERIAL_ACE ], - [ 33, Moves.TAKE_DOWN ], - [ 38, Moves.AGILITY ], - [ 43, Moves.BRAVE_BIRD ], - [ 48, Moves.FINAL_GAMBIT ], - ], - [Species.STARAPTOR]: [ - [ EVOLVE_MOVE, Moves.CLOSE_COMBAT ], - [ 1, Moves.WING_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.QUICK_ATTACK ], - [ 13, Moves.DOUBLE_TEAM ], - [ 18, Moves.ENDEAVOR ], - [ 23, Moves.WHIRLWIND ], - [ 28, Moves.AERIAL_ACE ], - [ 33, Moves.TAKE_DOWN ], - [ 41, Moves.AGILITY ], - [ 49, Moves.BRAVE_BIRD ], - [ 57, Moves.FINAL_GAMBIT ], - ], - [Species.BIDOOF]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 5, Moves.DEFENSE_CURL ], - [ 9, Moves.ROLLOUT ], - [ 13, Moves.HEADBUTT ], - [ 17, Moves.HYPER_FANG ], - [ 21, Moves.YAWN ], - [ 25, Moves.CRUNCH ], - [ 29, Moves.TAKE_DOWN ], - [ 33, Moves.SUPER_FANG ], - [ 37, Moves.SWORDS_DANCE ], - [ 41, Moves.AMNESIA ], - [ 45, Moves.SUPERPOWER ], - [ 49, Moves.CURSE ], - ], - [Species.BIBAREL]: [ - [ EVOLVE_MOVE, Moves.WATER_GUN ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.AQUA_JET ], - [ 1, Moves.ROTOTILLER ], - [ 5, Moves.DEFENSE_CURL ], - [ 9, Moves.ROLLOUT ], - [ 13, Moves.HEADBUTT ], - [ 18, Moves.HYPER_FANG ], - [ 23, Moves.YAWN ], - [ 28, Moves.CRUNCH ], - [ 33, Moves.TAKE_DOWN ], - [ 38, Moves.SUPER_FANG ], - [ 43, Moves.SWORDS_DANCE ], - [ 48, Moves.AMNESIA ], - [ 53, Moves.SUPERPOWER ], - [ 58, Moves.CURSE ], - ], - [Species.KRICKETOT]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.BIDE ], - [ 6, Moves.STRUGGLE_BUG ], - [ 16, Moves.BUG_BITE ], - ], - [Species.KRICKETUNE]: [ - [ EVOLVE_MOVE, Moves.FURY_CUTTER ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.BIDE ], - [ 1, Moves.STRUGGLE_BUG ], // Previous Stage Move - [ 1, Moves.BUG_BITE ], // Previous Stage Move - [ 14, Moves.ABSORB ], - [ 18, Moves.SING ], - [ 22, Moves.FOCUS_ENERGY ], - [ 26, Moves.SLASH ], - [ 30, Moves.X_SCISSOR ], - [ 34, Moves.SCREECH ], - [ 36, Moves.FELL_STINGER ], - [ 38, Moves.TAUNT ], - [ 42, Moves.NIGHT_SLASH ], - [ 44, Moves.STICKY_WEB ], - [ 46, Moves.BUG_BUZZ ], - [ 50, Moves.PERISH_SONG ], - ], - [Species.SHINX]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 4, Moves.THUNDER_SHOCK ], - [ 8, Moves.CHARGE ], - [ 12, Moves.BITE ], - [ 16, Moves.SPARK ], - [ 20, Moves.ROAR ], - [ 24, Moves.VOLT_SWITCH ], - [ 28, Moves.SCARY_FACE ], - [ 32, Moves.THUNDER_WAVE ], - [ 36, Moves.CRUNCH ], - [ 40, Moves.DISCHARGE ], - [ 44, Moves.SWAGGER ], - [ 48, Moves.WILD_CHARGE ], - ], - [Species.LUXIO]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.CHARGE ], - [ 12, Moves.BITE ], - [ 18, Moves.SPARK ], - [ 24, Moves.ROAR ], - [ 31, Moves.VOLT_SWITCH ], - [ 36, Moves.SCARY_FACE ], - [ 42, Moves.THUNDER_WAVE ], - [ 48, Moves.CRUNCH ], - [ 54, Moves.DISCHARGE ], - [ 60, Moves.SWAGGER ], - [ 68, Moves.WILD_CHARGE ], - ], - [Species.LUXRAY]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.CHARGE ], - [ 1, Moves.ELECTRIC_TERRAIN ], - [ 12, Moves.BITE ], - [ 18, Moves.SPARK ], - [ 24, Moves.ROAR ], - [ 33, Moves.VOLT_SWITCH ], - [ 40, Moves.SCARY_FACE ], - [ 48, Moves.THUNDER_WAVE ], - [ 56, Moves.CRUNCH ], - [ 64, Moves.DISCHARGE ], - [ 72, Moves.SWAGGER ], - [ 80, Moves.WILD_CHARGE ], - ], - [Species.BUDEW]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.GROWTH ], - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.WORRY_SEED ], - ], - [Species.ROSERADE]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.ABSORB ], - [ 1, Moves.MEGA_DRAIN ], - [ 1, Moves.LEECH_SEED ], - [ 1, Moves.GROWTH ], - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.PETAL_DANCE ], - [ 1, Moves.TOXIC ], - [ 1, Moves.GIGA_DRAIN ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.SYNTHESIS ], - [ 1, Moves.INGRAIN ], - [ 1, Moves.AROMATHERAPY ], - [ 1, Moves.MAGICAL_LEAF ], - [ 1, Moves.WORRY_SEED ], - [ 1, Moves.TOXIC_SPIKES ], - [ 1, Moves.PETAL_BLIZZARD ], - [ 1, Moves.GRASSY_TERRAIN ], - [ 1, Moves.VENOM_DRENCH ], - ], - [Species.CRANIDOS]: [ - [ 1, Moves.HEADBUTT ], - [ 1, Moves.LEER ], - [ 6, Moves.FOCUS_ENERGY ], - [ 10, Moves.PURSUIT ], - [ 15, Moves.TAKE_DOWN ], - [ 19, Moves.SCARY_FACE ], - [ 24, Moves.ASSURANCE ], - [ 28, Moves.CHIP_AWAY ], - [ 33, Moves.ANCIENT_POWER ], - [ 37, Moves.ZEN_HEADBUTT ], - [ 42, Moves.SCREECH ], - [ 46, Moves.HEAD_SMASH ], - ], - [Species.RAMPARDOS]: [ - [ EVOLVE_MOVE, Moves.ENDEAVOR ], - [ 1, Moves.HEADBUTT ], - [ 1, Moves.LEER ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.PURSUIT ], - [ 15, Moves.TAKE_DOWN ], - [ 19, Moves.SCARY_FACE ], - [ 24, Moves.ASSURANCE ], - [ 28, Moves.CHIP_AWAY ], - [ 36, Moves.ANCIENT_POWER ], - [ 43, Moves.ZEN_HEADBUTT ], - [ 51, Moves.SCREECH ], - [ 58, Moves.HEAD_SMASH ], - ], - [Species.SHIELDON]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.PROTECT ], - [ 6, Moves.TAUNT ], - [ 10, Moves.METAL_SOUND ], - [ 15, Moves.TAKE_DOWN ], - [ 19, Moves.IRON_DEFENSE ], - [ 24, Moves.SWAGGER ], - [ 28, Moves.ANCIENT_POWER ], - [ 33, Moves.ENDURE ], - [ 37, Moves.METAL_BURST ], - [ 42, Moves.IRON_HEAD ], - [ 46, Moves.HEAVY_SLAM ], - ], - [Species.BASTIODON]: [ - [ EVOLVE_MOVE, Moves.BLOCK ], - [ RELEARN_MOVE, Moves.WIDE_GUARD ], - [ 1, Moves.TACKLE ], - [ 1, Moves.PROTECT ], - [ 1, Moves.TAUNT ], - [ 1, Moves.METAL_SOUND ], - [ 15, Moves.TAKE_DOWN ], - [ 19, Moves.IRON_DEFENSE ], - [ 24, Moves.SWAGGER ], - [ 28, Moves.ANCIENT_POWER ], - [ 36, Moves.ENDURE ], - [ 43, Moves.METAL_BURST ], - [ 51, Moves.IRON_HEAD ], - [ 58, Moves.HEAVY_SLAM ], - ], - [Species.BURMY]: [ - [ 1, Moves.PROTECT ], - [ 1, Moves.STRUGGLE_BUG ], // Custom - [ 10, Moves.TACKLE ], - [ 15, Moves.BUG_BITE ], - [ 20, Moves.STRING_SHOT ], - ], - [Species.WORMADAM]: [ - [ EVOLVE_MOVE, Moves.QUIVER_DANCE ], - [ 1, Moves.STRUGGLE_BUG ], // Previous Stage Move, Custom - [ 1, Moves.TACKLE ], - [ 1, Moves.PROTECT ], - [ 1, Moves.SUCKER_PUNCH ], - [ 1, Moves.BUG_BITE ], - [ 1, Moves.PROTECT ], - [ 10, Moves.TACKLE ], - [ 20, Moves.STRING_SHOT ], - [ 23, Moves.CONFUSION ], - [ 26, Moves.RAZOR_LEAF ], - [ 29, Moves.GROWTH ], - [ 32, Moves.PSYBEAM ], - [ 35, Moves.INFESTATION ], - [ 38, Moves.FLAIL ], - [ 41, Moves.ATTRACT ], - [ 44, Moves.PSYCHIC ], - [ 47, Moves.LEAF_STORM ], - [ 50, Moves.BUG_BUZZ ], - ], - [Species.MOTHIM]: [ - [ EVOLVE_MOVE, Moves.QUIVER_DANCE ], - [ 1, Moves.STRUGGLE_BUG ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.PROTECT ], - [ 1, Moves.BUG_BITE ], - [ 10, Moves.PROTECT ], - [ 15, Moves.BUG_BITE ], - [ 20, Moves.STRING_SHOT ], - [ 23, Moves.CONFUSION ], - [ 26, Moves.GUST ], - [ 29, Moves.POISON_POWDER ], - [ 32, Moves.PSYBEAM ], - [ 35, Moves.ROOST ], - [ 38, Moves.STRUGGLE_BUG ], - [ 41, Moves.AIR_SLASH ], - [ 44, Moves.PSYCHIC ], - [ 47, Moves.LUNGE ], - [ 50, Moves.BUG_BUZZ ], - ], - [Species.COMBEE]: [ - [ 1, Moves.GUST ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.BUG_BITE ], - [ 1, Moves.STRUGGLE_BUG ], - ], - [Species.VESPIQUEN]: [ - [ EVOLVE_MOVE, Moves.SLASH ], - [ 1, Moves.GUST ], - [ 1, Moves.POISON_STING ], - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.BUG_BITE ], - [ 1, Moves.STRUGGLE_BUG ], - [ 4, Moves.FURY_CUTTER ], - [ 8, Moves.AROMATIC_MIST ], - [ 12, Moves.FELL_STINGER ], - [ 16, Moves.FURY_SWIPES ], - [ 20, Moves.SWAGGER ], - [ 24, Moves.ROOST ], - [ 28, Moves.AIR_SLASH ], - [ 32, Moves.POWER_GEM ], - [ 36, Moves.TOXIC ], - [ 40, Moves.ATTACK_ORDER ], - [ 40, Moves.DEFEND_ORDER ], - [ 40, Moves.HEAL_ORDER ], - [ 44, Moves.DESTINY_BOND ], - ], - [Species.PACHIRISU]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.BIDE ], - [ 5, Moves.QUICK_ATTACK ], - [ 9, Moves.CHARM ], - [ 13, Moves.SPARK ], - [ 17, Moves.ENDURE ], - [ 19, Moves.NUZZLE ], - [ 21, Moves.SWIFT ], - [ 25, Moves.ELECTRO_BALL ], - [ 29, Moves.SWEET_KISS ], - [ 33, Moves.THUNDER_WAVE ], - [ 37, Moves.SUPER_FANG ], - [ 41, Moves.DISCHARGE ], - [ 45, Moves.LAST_RESORT ], - [ 49, Moves.THUNDER ], - ], - [Species.BUIZEL]: [ - [ 1, Moves.TACKLE ], - [ 4, Moves.GROWL ], - [ 7, Moves.SOAK ], - [ 11, Moves.QUICK_ATTACK ], - [ 15, Moves.WATER_GUN ], - [ 18, Moves.BITE ], - [ 21, Moves.SWIFT ], - [ 24, Moves.AQUA_JET ], - [ 27, Moves.DOUBLE_HIT ], - [ 31, Moves.WHIRLPOOL ], - [ 35, Moves.LIQUIDATION ], - [ 38, Moves.AQUA_TAIL ], - [ 41, Moves.AGILITY ], - [ 45, Moves.HYDRO_PUMP ], - [ 49, Moves.WAVE_CRASH ], - ], - [Species.FLOATZEL]: [ - [ 1, Moves.TACKLE ], // Previous Stage Move - [ 1, Moves.GROWL ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.CRUNCH ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.SOAK ], - [ 15, Moves.WATER_GUN ], - [ 18, Moves.BITE ], - [ 21, Moves.SWIFT ], - [ 24, Moves.AQUA_JET ], - [ 29, Moves.DOUBLE_HIT ], - [ 35, Moves.WHIRLPOOL ], - [ 41, Moves.LIQUIDATION ], - [ 46, Moves.AQUA_TAIL ], - [ 51, Moves.AGILITY ], - [ 57, Moves.HYDRO_PUMP ], - [ 62, Moves.WAVE_CRASH ], - ], - [Species.CHERUBI]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.MORNING_SUN ], - [ 5, Moves.LEAFAGE ], - [ 10, Moves.GROWTH ], - [ 15, Moves.HELPING_HAND ], - [ 20, Moves.MAGICAL_LEAF ], - [ 26, Moves.LEECH_SEED ], - [ 30, Moves.TAKE_DOWN ], - [ 35, Moves.PETAL_BLIZZARD ], - [ 40, Moves.WORRY_SEED ], - [ 45, Moves.SOLAR_BEAM ], - ], - [Species.CHERRIM]: [ - [ EVOLVE_MOVE, Moves.SUNNY_DAY ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWTH ], - [ 1, Moves.MORNING_SUN ], - [ 1, Moves.FLOWER_SHIELD ], - [ 1, Moves.LEAFAGE ], - [ 15, Moves.HELPING_HAND ], - [ 20, Moves.MAGICAL_LEAF ], - [ 28, Moves.LEECH_SEED ], - [ 34, Moves.TAKE_DOWN ], - [ 41, Moves.PETAL_BLIZZARD ], - [ 48, Moves.WORRY_SEED ], - [ 55, Moves.SOLAR_BEAM ], - [ 62, Moves.PETAL_DANCE ], - ], - [Species.SHELLOS]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.MUD_SLAP ], - [ 5, Moves.HARDEN ], - [ 10, Moves.RECOVER ], - [ 15, Moves.WATER_PULSE ], - [ 20, Moves.ANCIENT_POWER ], - [ 25, Moves.BODY_SLAM ], - [ 31, Moves.MUDDY_WATER ], - [ 35, Moves.EARTH_POWER ], - [ 40, Moves.RAIN_DANCE ], - [ 45, Moves.MEMENTO ], - ], - [Species.GASTRODON]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.RECOVER ], - [ 1, Moves.HARDEN ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.MUD_SPORT ], - [ 15, Moves.WATER_PULSE ], - [ 20, Moves.ANCIENT_POWER ], - [ 25, Moves.BODY_SLAM ], - [ 33, Moves.MUDDY_WATER ], - [ 39, Moves.EARTH_POWER ], - [ 46, Moves.RAIN_DANCE ], - [ 53, Moves.MEMENTO ], - ], - [Species.AMBIPOM]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.ASTONISH ], - [ 11, Moves.BATON_PASS ], - [ 15, Moves.TICKLE ], - [ 18, Moves.FURY_SWIPES ], - [ 22, Moves.SWIFT ], - [ 25, Moves.SCREECH ], - [ 29, Moves.AGILITY ], - [ 32, Moves.DOUBLE_HIT ], - [ 36, Moves.FLING ], - [ 39, Moves.NASTY_PLOT ], - [ 43, Moves.LAST_RESORT ], - ], - [Species.DRIFLOON]: [ - [ 1, Moves.MINIMIZE ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.CONSTRICT ], - [ 4, Moves.GUST ], - [ 8, Moves.FOCUS_ENERGY ], - [ 12, Moves.PAYBACK ], - [ 16, Moves.HEX ], - [ 20, Moves.SHADOW_BALL ], - [ 24, Moves.STOCKPILE ], - [ 24, Moves.SPIT_UP ], - [ 24, Moves.SWALLOW ], - [ 29, Moves.SELF_DESTRUCT ], - [ 32, Moves.DESTINY_BOND ], - [ 36, Moves.BATON_PASS ], - [ 40, Moves.TAILWIND ], - [ 44, Moves.EXPLOSION ], - ], - [Species.DRIFBLIM]: [ - [ EVOLVE_MOVE, Moves.PHANTOM_FORCE ], - [ 1, Moves.GUST ], - [ 1, Moves.MINIMIZE ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.CONSTRICT ], - [ 1, Moves.STRENGTH_SAP ], - [ 12, Moves.PAYBACK ], - [ 16, Moves.HEX ], - [ 20, Moves.SHADOW_BALL ], - [ 24, Moves.STOCKPILE ], - [ 24, Moves.SPIT_UP ], - [ 24, Moves.SWALLOW ], - [ 31, Moves.SELF_DESTRUCT ], - [ 36, Moves.DESTINY_BOND ], - [ 42, Moves.BATON_PASS ], - [ 48, Moves.TAILWIND ], - [ 54, Moves.EXPLOSION ], - ], - [Species.BUNEARY]: [ - [ 1, Moves.FRUSTRATION ], - [ 1, Moves.POUND ], - [ 1, Moves.SPLASH ], - [ 4, Moves.DEFENSE_CURL ], - [ 8, Moves.BABY_DOLL_EYES ], - [ 12, Moves.AFTER_YOU ], - [ 16, Moves.QUICK_ATTACK ], - [ 20, Moves.DOUBLE_KICK ], - [ 24, Moves.CHARM ], - [ 28, Moves.BATON_PASS ], - [ 32, Moves.HEADBUTT ], - [ 36, Moves.AGILITY ], - [ 40, Moves.ENTRAINMENT ], - [ 44, Moves.FLATTER ], - [ 48, Moves.BOUNCE ], - [ 52, Moves.HEALING_WISH ], - ], - [Species.LOPUNNY]: [ - [ EVOLVE_MOVE, Moves.RETURN ], - [ 1, Moves.FRUSTRATION ], // Previous Stage Move - [ 1, Moves.POUND ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.SPLASH ], - [ 1, Moves.MIRROR_COAT ], - [ 1, Moves.MAGIC_COAT ], - [ 1, Moves.BABY_DOLL_EYES ], - [ 1, Moves.ROTOTILLER ], - [ 12, Moves.AFTER_YOU ], - [ 16, Moves.QUICK_ATTACK ], - [ 20, Moves.DOUBLE_KICK ], - [ 24, Moves.CHARM ], - [ 28, Moves.BATON_PASS ], - [ 32, Moves.HEADBUTT ], - [ 36, Moves.AGILITY ], - [ 40, Moves.ENTRAINMENT ], - [ 44, Moves.FLATTER ], - [ 48, Moves.BOUNCE ], - [ 52, Moves.HEALING_WISH ], - [ 56, Moves.HIGH_JUMP_KICK ], - ], - [Species.MISMAGIUS]: [ + [SpeciesId.SMEARGLE]: [ + [ 1, MoveId.SKETCH ], + [ 11, MoveId.SKETCH ], + [ 21, MoveId.SKETCH ], + [ 31, MoveId.SKETCH ], + [ 41, MoveId.SKETCH ], + [ 51, MoveId.SKETCH ], + [ 61, MoveId.SKETCH ], + [ 71, MoveId.SKETCH ], + [ 81, MoveId.SKETCH ], + [ 91, MoveId.SKETCH ], + ], + [SpeciesId.TYROGUE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.HELPING_HAND ], + [ 10, MoveId.LOW_SWEEP ], // Custom + [ 10, MoveId.MACH_PUNCH ], // Custom + [ 10, MoveId.RAPID_SPIN ], // Custom + ], + [SpeciesId.HITMONTOP]: [ + [ EVOLVE_MOVE, MoveId.TRIPLE_KICK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.PURSUIT ], + [ 1, MoveId.ROLLING_KICK ], + [ 1, MoveId.LOW_SWEEP ], // Previous Stage Move, Custom + [ 1, MoveId.MACH_PUNCH ], // Previous Stage Move, Custom + [ 4, MoveId.QUICK_ATTACK ], + [ 8, MoveId.GYRO_BALL ], + [ 12, MoveId.DETECT ], + [ 16, MoveId.REVENGE ], + [ 21, MoveId.WIDE_GUARD ], + [ 21, MoveId.QUICK_GUARD ], + [ 24, MoveId.SUCKER_PUNCH ], + [ 28, MoveId.AGILITY ], + [ 32, MoveId.DIG ], + [ 36, MoveId.CLOSE_COMBAT ], + [ 40, MoveId.COUNTER ], + [ 44, MoveId.ENDEAVOR ], + ], + [SpeciesId.SMOOCHUM]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.LICK ], + [ 4, MoveId.POWDER_SNOW ], + [ 8, MoveId.COPYCAT ], + [ 12, MoveId.CONFUSION ], + [ 16, MoveId.COVET ], + [ 20, MoveId.SING ], + [ 24, MoveId.FAKE_TEARS ], + [ 28, MoveId.ICE_PUNCH ], + [ 32, MoveId.PSYCHIC ], + [ 36, MoveId.SWEET_KISS ], + [ 40, MoveId.MEAN_LOOK ], + [ 44, MoveId.PERISH_SONG ], + [ 48, MoveId.BLIZZARD ], + ], + [SpeciesId.ELEKID]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 4, MoveId.THUNDER_SHOCK ], + [ 8, MoveId.CHARGE ], + [ 12, MoveId.SWIFT ], + [ 16, MoveId.SHOCK_WAVE ], + [ 20, MoveId.THUNDER_WAVE ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.THUNDER_PUNCH ], + [ 32, MoveId.DISCHARGE ], + [ 36, MoveId.LOW_KICK ], + [ 40, MoveId.THUNDERBOLT ], + [ 44, MoveId.LIGHT_SCREEN ], + [ 48, MoveId.THUNDER ], + ], + [SpeciesId.MAGBY]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.SMOG ], + [ 4, MoveId.EMBER ], + [ 8, MoveId.SMOKESCREEN ], + [ 12, MoveId.CLEAR_SMOG ], + [ 16, MoveId.FLAME_WHEEL ], + [ 20, MoveId.CONFUSE_RAY ], + [ 24, MoveId.SCARY_FACE ], + [ 28, MoveId.FIRE_PUNCH ], + [ 32, MoveId.LAVA_PLUME ], + [ 36, MoveId.LOW_KICK ], + [ 40, MoveId.FLAMETHROWER ], + [ 44, MoveId.SUNNY_DAY ], + [ 48, MoveId.FIRE_BLAST ], + ], + [SpeciesId.MILTANK]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 5, MoveId.ROLLOUT ], + [ 10, MoveId.DEFENSE_CURL ], + [ 15, MoveId.STOMP ], + [ 20, MoveId.HEAL_BELL ], + [ 25, MoveId.HEADBUTT ], + [ 30, MoveId.ZEN_HEADBUTT ], + [ 35, MoveId.MILK_DRINK ], + [ 40, MoveId.BODY_SLAM ], + [ 45, MoveId.PLAY_ROUGH ], + [ 50, MoveId.CHARM ], + [ 55, MoveId.HIGH_HORSEPOWER ], + ], + [SpeciesId.BLISSEY]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.COVET ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.DISARMING_VOICE ], + [ 4, MoveId.TAIL_WHIP ], + [ 8, MoveId.ECHOED_VOICE ], + [ 12, MoveId.LIFE_DEW ], + [ 16, MoveId.SING ], + [ 20, MoveId.FLING ], + [ 24, MoveId.TAKE_DOWN ], + [ 28, MoveId.HEAL_PULSE ], + [ 32, MoveId.HELPING_HAND ], + [ 36, MoveId.LIGHT_SCREEN ], + [ 40, MoveId.DOUBLE_EDGE ], + [ 44, MoveId.SOFT_BOILED ], + [ 48, MoveId.LAST_RESORT ], + [ 52, MoveId.HEALING_WISH ], + ], + [SpeciesId.RAIKOU]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.EXTREME_SPEED ], + [ 1, MoveId.CHARGE ], + [ 6, MoveId.SPARK ], + [ 12, MoveId.BITE ], + [ 18, MoveId.CALM_MIND ], + [ 24, MoveId.ROAR ], + [ 30, MoveId.THUNDER_FANG ], + [ 36, MoveId.HOWL ], + [ 42, MoveId.CRUNCH ], + [ 48, MoveId.EXTRASENSORY ], + [ 54, MoveId.DISCHARGE ], + [ 60, MoveId.REFLECT ], + [ 66, MoveId.RAIN_DANCE ], + [ 72, MoveId.THUNDER ], + [ 78, MoveId.ZAP_CANNON ], + ], + [SpeciesId.ENTEI]: [ + [ RELEARN_MOVE, MoveId.SACRED_FIRE ], + [ RELEARN_MOVE, MoveId.EXTREME_SPEED ], + [ 1, MoveId.STOMP ], + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.SMOKESCREEN ], + [ 6, MoveId.FLAME_WHEEL ], + [ 12, MoveId.BITE ], + [ 18, MoveId.CALM_MIND ], + [ 24, MoveId.ROAR ], + [ 30, MoveId.FIRE_FANG ], + [ 36, MoveId.SCARY_FACE ], + [ 42, MoveId.CRUNCH ], + [ 48, MoveId.EXTRASENSORY ], + [ 54, MoveId.LAVA_PLUME ], + [ 60, MoveId.SWAGGER ], + [ 66, MoveId.SUNNY_DAY ], + [ 72, MoveId.FIRE_BLAST ], + [ 78, MoveId.ERUPTION ], + ], + [SpeciesId.SUICUNE]: [ + [ RELEARN_MOVE, MoveId.EXTREME_SPEED ], + [ RELEARN_MOVE, MoveId.SHEER_COLD ], + [ 1, MoveId.GUST ], + [ 1, MoveId.LEER ], + [ 1, MoveId.MIST ], + [ 1, MoveId.WATER_GUN ], + [ 6, MoveId.WATER_PULSE ], + [ 12, MoveId.BITE ], + [ 18, MoveId.CALM_MIND ], + [ 24, MoveId.ROAR ], + [ 30, MoveId.ICE_FANG ], + [ 36, MoveId.TAILWIND ], + [ 42, MoveId.CRUNCH ], + [ 48, MoveId.EXTRASENSORY ], + [ 54, MoveId.SURF ], + [ 60, MoveId.MIRROR_COAT ], + [ 66, MoveId.RAIN_DANCE ], + [ 72, MoveId.HYDRO_PUMP ], + [ 78, MoveId.BLIZZARD ], + ], + [SpeciesId.LARVITAR]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 3, MoveId.ROCK_THROW ], + [ 6, MoveId.PAYBACK ], + [ 9, MoveId.BITE ], + [ 12, MoveId.SCARY_FACE ], + [ 15, MoveId.ROCK_SLIDE ], + [ 18, MoveId.STOMPING_TANTRUM ], + [ 21, MoveId.SCREECH ], + [ 24, MoveId.SMACK_DOWN ], + [ 27, MoveId.CRUNCH ], + [ 31, MoveId.EARTHQUAKE ], + [ 33, MoveId.STONE_EDGE ], + [ 36, MoveId.THRASH ], + [ 39, MoveId.SANDSTORM ], + [ 42, MoveId.HYPER_BEAM ], + ], + [SpeciesId.PUPITAR]: [ + [ EVOLVE_MOVE, MoveId.IRON_DEFENSE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.PAYBACK ], + [ 9, MoveId.BITE ], + [ 12, MoveId.SCARY_FACE ], + [ 15, MoveId.ROCK_SLIDE ], + [ 18, MoveId.STOMPING_TANTRUM ], + [ 21, MoveId.SCREECH ], + [ 24, MoveId.SMACK_DOWN ], + [ 27, MoveId.CRUNCH ], + [ 33, MoveId.EARTHQUAKE ], + [ 37, MoveId.STONE_EDGE ], + [ 42, MoveId.THRASH ], + [ 47, MoveId.SANDSTORM ], + [ 52, MoveId.HYPER_BEAM ], + ], + [SpeciesId.TYRANITAR]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.IRON_DEFENSE ], + [ 1, MoveId.PAYBACK ], + [ 1, MoveId.DARK_PULSE ], + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.FIRE_FANG ], + [ 9, MoveId.BITE ], + [ 12, MoveId.SCARY_FACE ], + [ 15, MoveId.ROCK_SLIDE ], + [ 18, MoveId.STOMPING_TANTRUM ], + [ 21, MoveId.SCREECH ], + [ 24, MoveId.SMACK_DOWN ], + [ 27, MoveId.CRUNCH ], + [ 33, MoveId.EARTHQUAKE ], + [ 37, MoveId.STONE_EDGE ], + [ 42, MoveId.THRASH ], + [ 47, MoveId.SANDSTORM ], + [ 52, MoveId.HYPER_BEAM ], + [ 59, MoveId.GIGA_IMPACT ], + ], + [SpeciesId.LUGIA]: [ + [ RELEARN_MOVE, MoveId.DRAGON_RUSH ], + [ 1, MoveId.GUST ], + [ 1, MoveId.WHIRLWIND ], + [ 1, MoveId.ANCIENT_POWER ], + [ 1, MoveId.WEATHER_BALL ], + [ 9, MoveId.MIST ], + [ 18, MoveId.SAFEGUARD ], + [ 27, MoveId.CALM_MIND ], + [ 36, MoveId.EXTRASENSORY ], + [ 45, MoveId.RECOVER ], + [ 54, MoveId.AEROBLAST ], + [ 63, MoveId.RAIN_DANCE ], + [ 72, MoveId.HYDRO_PUMP ], + [ 81, MoveId.FUTURE_SIGHT ], + [ 90, MoveId.SKY_ATTACK ], + ], + [SpeciesId.HO_OH]: [ + [ 1, MoveId.GUST ], + [ 1, MoveId.WHIRLWIND ], + [ 1, MoveId.ANCIENT_POWER ], + [ 1, MoveId.WEATHER_BALL ], + [ 9, MoveId.LIFE_DEW ], + [ 18, MoveId.SAFEGUARD ], + [ 27, MoveId.CALM_MIND ], + [ 36, MoveId.EXTRASENSORY ], + [ 45, MoveId.RECOVER ], + [ 54, MoveId.SACRED_FIRE ], + [ 63, MoveId.SUNNY_DAY ], + [ 72, MoveId.FIRE_BLAST ], + [ 81, MoveId.FUTURE_SIGHT ], + [ 90, MoveId.SKY_ATTACK ], + [ 99, MoveId.OVERHEAT ], + ], + [SpeciesId.CELEBI]: [ + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.HEAL_BELL ], + [ 10, MoveId.MAGICAL_LEAF ], + [ 20, MoveId.BATON_PASS ], + [ 30, MoveId.ANCIENT_POWER ], + [ 40, MoveId.LIFE_DEW ], + [ 50, MoveId.LEECH_SEED ], + [ 55, MoveId.HEAL_BLOCK ], + [ 60, MoveId.RECOVER ], + [ 70, MoveId.FUTURE_SIGHT ], + [ 80, MoveId.HEALING_WISH ], + [ 90, MoveId.LEAF_STORM ], + [ 100, MoveId.PERISH_SONG ], + ], + [SpeciesId.TREECKO]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.LEER ], + [ 3, MoveId.LEAFAGE ], + [ 6, MoveId.QUICK_ATTACK ], + [ 9, MoveId.MEGA_DRAIN ], + [ 12, MoveId.DETECT ], + [ 15, MoveId.QUICK_GUARD ], + [ 18, MoveId.ASSURANCE ], + [ 21, MoveId.GIGA_DRAIN ], + [ 24, MoveId.SLAM ], + [ 27, MoveId.DOUBLE_TEAM ], + [ 30, MoveId.ENERGY_BALL ], + [ 33, MoveId.SCREECH ], + [ 36, MoveId.ENDEAVOR ], + [ 39, MoveId.LEAF_STORM ], + ], + [SpeciesId.GROVYLE]: [ + [ RELEARN_MOVE, MoveId.FALSE_SWIPE ], + [ RELEARN_MOVE, MoveId.FURY_CUTTER ], + [ RELEARN_MOVE, MoveId.X_SCISSOR ], + [ RELEARN_MOVE, MoveId.ENERGY_BALL ], + [ 1, MoveId.POUND ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LEAFAGE ], + [ 1, MoveId.QUICK_ATTACK ], + [ 9, MoveId.MEGA_DRAIN ], + [ 12, MoveId.DETECT ], + [ 15, MoveId.QUICK_GUARD ], + [ 20, MoveId.ASSURANCE ], + [ 25, MoveId.GIGA_DRAIN ], + [ 30, MoveId.SLAM ], + [ 35, MoveId.DOUBLE_TEAM ], + [ 40, MoveId.LEAF_BLADE ], + [ 45, MoveId.SCREECH ], + [ 50, MoveId.ENDEAVOR ], + [ 55, MoveId.LEAF_STORM ], + ], + [SpeciesId.SCEPTILE]: [ + [ EVOLVE_MOVE, MoveId.LEAF_BLADE ], + [ RELEARN_MOVE, MoveId.FALSE_SWIPE ], + [ RELEARN_MOVE, MoveId.FURY_CUTTER ], + [ RELEARN_MOVE, MoveId.X_SCISSOR ], + [ RELEARN_MOVE, MoveId.ENERGY_BALL ], + [ RELEARN_MOVE, MoveId.SHED_TAIL ], + [ 1, MoveId.POUND ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LEAFAGE ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.DUAL_CHOP ], + [ 5, MoveId.MEGA_DRAIN ], + [ 12, MoveId.DETECT ], + [ 15, MoveId.QUICK_GUARD ], + [ 20, MoveId.ASSURANCE ], + [ 25, MoveId.GIGA_DRAIN ], + [ 30, MoveId.SLAM ], + [ 35, MoveId.DOUBLE_TEAM ], + [ 42, MoveId.SCREECH ], + [ 49, MoveId.ENDEAVOR ], + [ 56, MoveId.LEAF_STORM ], + ], + [SpeciesId.TORCHIC]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 3, MoveId.EMBER ], + [ 6, MoveId.QUICK_ATTACK ], + [ 9, MoveId.FLAME_CHARGE ], + [ 12, MoveId.DETECT ], + [ 15, MoveId.SAND_ATTACK ], + [ 18, MoveId.AERIAL_ACE ], + [ 21, MoveId.SLASH ], + [ 24, MoveId.BOUNCE ], + [ 27, MoveId.FOCUS_ENERGY ], + [ 30, MoveId.FLAMETHROWER ], + [ 33, MoveId.FEATHER_DANCE ], + [ 36, MoveId.REVERSAL ], + [ 39, MoveId.FLARE_BLITZ ], + ], + [SpeciesId.COMBUSKEN]: [ + [ EVOLVE_MOVE, MoveId.DOUBLE_KICK ], + [ RELEARN_MOVE, MoveId.FLAMETHROWER ], + [ RELEARN_MOVE, MoveId.FEATHER_DANCE ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 9, MoveId.FLAME_CHARGE ], + [ 12, MoveId.DETECT ], + [ 15, MoveId.SAND_ATTACK ], + [ 20, MoveId.AERIAL_ACE ], + [ 25, MoveId.SLASH ], + [ 30, MoveId.BOUNCE ], + [ 35, MoveId.FOCUS_ENERGY ], + [ 40, MoveId.BLAZE_KICK ], + [ 45, MoveId.BULK_UP ], + [ 50, MoveId.REVERSAL ], + [ 55, MoveId.FLARE_BLITZ ], + ], + [SpeciesId.BLAZIKEN]: [ + [ EVOLVE_MOVE, MoveId.BLAZE_KICK ], + [ RELEARN_MOVE, MoveId.FIRE_PUNCH ], + [ RELEARN_MOVE, MoveId.EMBER ], + [ RELEARN_MOVE, MoveId.FLAMETHROWER ], + [ RELEARN_MOVE, MoveId.FEATHER_DANCE ], + [ 1, MoveId.DOUBLE_KICK ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.QUICK_ATTACK ], + [ 9, MoveId.FLAME_CHARGE ], + [ 12, MoveId.DETECT ], + [ 15, MoveId.SAND_ATTACK ], + [ 20, MoveId.AERIAL_ACE ], + [ 25, MoveId.SLASH ], + [ 30, MoveId.BOUNCE ], + [ 35, MoveId.FOCUS_ENERGY ], + [ 42, MoveId.BULK_UP ], + [ 49, MoveId.REVERSAL ], + [ 56, MoveId.FLARE_BLITZ ], + [ 63, MoveId.BRAVE_BIRD ], + ], + [SpeciesId.MUDKIP]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 3, MoveId.WATER_GUN ], + [ 6, MoveId.ROCK_SMASH ], + [ 9, MoveId.ROCK_THROW ], + [ 12, MoveId.PROTECT ], + [ 15, MoveId.SUPERSONIC ], + [ 18, MoveId.WATER_PULSE ], + [ 21, MoveId.ROCK_SLIDE ], + [ 24, MoveId.TAKE_DOWN ], + [ 27, MoveId.AMNESIA ], + [ 30, MoveId.SURF ], + [ 33, MoveId.SCREECH ], + [ 36, MoveId.ENDEAVOR ], + [ 39, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.MARSHTOMP]: [ + [ EVOLVE_MOVE, MoveId.MUD_SHOT ], + [ RELEARN_MOVE, MoveId.SURF ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.ROCK_SMASH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 9, MoveId.ROCK_THROW ], + [ 12, MoveId.PROTECT ], + [ 15, MoveId.SUPERSONIC ], + [ 20, MoveId.WATER_PULSE ], + [ 25, MoveId.ROCK_SLIDE ], + [ 30, MoveId.TAKE_DOWN ], + [ 35, MoveId.AMNESIA ], + [ 40, MoveId.MUDDY_WATER ], + [ 45, MoveId.SCREECH ], + [ 50, MoveId.ENDEAVOR ], + [ 55, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.SWAMPERT]: [ + [ RELEARN_MOVE, MoveId.SURF ], + [ RELEARN_MOVE, MoveId.EARTHQUAKE ], + [ RELEARN_MOVE, MoveId.ROCK_SMASH ], + [ RELEARN_MOVE, MoveId.HAMMER_ARM ], + [ 1, MoveId.MUD_SHOT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 9, MoveId.ROCK_THROW ], + [ 12, MoveId.PROTECT ], + [ 15, MoveId.SUPERSONIC ], + [ 20, MoveId.WATER_PULSE ], + [ 25, MoveId.ROCK_SLIDE ], + [ 30, MoveId.TAKE_DOWN ], + [ 35, MoveId.AMNESIA ], + [ 42, MoveId.MUDDY_WATER ], + [ 49, MoveId.SCREECH ], + [ 56, MoveId.ENDEAVOR ], + [ 63, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.POOCHYENA]: [ + [ 1, MoveId.TACKLE ], + [ 4, MoveId.HOWL ], + [ 7, MoveId.SAND_ATTACK ], + [ 10, MoveId.BITE ], + [ 13, MoveId.LEER ], + [ 16, MoveId.ROAR ], + [ 19, MoveId.SWAGGER ], + [ 22, MoveId.ASSURANCE ], + [ 25, MoveId.SCARY_FACE ], + [ 28, MoveId.TAUNT ], + [ 31, MoveId.CRUNCH ], + [ 34, MoveId.YAWN ], + [ 36, MoveId.TAKE_DOWN ], + [ 40, MoveId.SUCKER_PUNCH ], + [ 44, MoveId.PLAY_ROUGH ], + ], + [SpeciesId.MIGHTYENA]: [ + [ EVOLVE_MOVE, MoveId.SNARL ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.BITE ], + [ 1, MoveId.THIEF ], + [ 1, MoveId.CRUNCH ], + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.FIRE_FANG ], + [ 13, MoveId.LEER ], + [ 13, MoveId.HOWL ], + [ 16, MoveId.ROAR ], + [ 20, MoveId.SWAGGER ], + [ 24, MoveId.ASSURANCE ], + [ 28, MoveId.SCARY_FACE ], + [ 36, MoveId.TAUNT ], + [ 44, MoveId.YAWN ], + [ 48, MoveId.TAKE_DOWN ], + [ 52, MoveId.SUCKER_PUNCH ], + [ 56, MoveId.PLAY_ROUGH ], + ], + [SpeciesId.ZIGZAGOON]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 3, MoveId.SAND_ATTACK ], + [ 6, MoveId.TAIL_WHIP ], + [ 9, MoveId.COVET ], + [ 12, MoveId.HEADBUTT ], + [ 15, MoveId.BABY_DOLL_EYES ], + [ 18, MoveId.PIN_MISSILE ], + [ 21, MoveId.REST ], + [ 24, MoveId.TAKE_DOWN ], + [ 27, MoveId.FLING ], + [ 30, MoveId.FLAIL ], + [ 33, MoveId.BELLY_DRUM ], + [ 36, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.LINOONE]: [ + [ EVOLVE_MOVE, MoveId.SLASH ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.PIN_MISSILE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.SWITCHEROO ], + [ 1, MoveId.BABY_DOLL_EYES ], + [ 1, MoveId.ROTOTILLER ], + [ 9, MoveId.COVET ], + [ 12, MoveId.HEADBUTT ], + [ 15, MoveId.HONE_CLAWS ], + [ 18, MoveId.FURY_SWIPES ], + [ 23, MoveId.REST ], + [ 28, MoveId.TAKE_DOWN ], + [ 33, MoveId.FLING ], + [ 38, MoveId.FLAIL ], + [ 43, MoveId.BELLY_DRUM ], + [ 48, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.WURMPLE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.STRING_SHOT ], + [ 5, MoveId.POISON_STING ], + [ 15, MoveId.BUG_BITE ], + ], + [SpeciesId.SILCOON]: [ + [ EVOLVE_MOVE, MoveId.HARDEN ], + [ RELEARN_MOVE, MoveId.TACKLE ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.STRING_SHOT ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.POISON_STING ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.BUG_BITE ], // Previous Stage Move + [ 1, MoveId.HARDEN ], + ], + [SpeciesId.BEAUTIFLY]: [ + [ EVOLVE_MOVE, MoveId.GUST ], + [ 1, MoveId.TACKLE ], // Previous Stage Move + [ 1, MoveId.BUG_BITE ], + [ 1, MoveId.GUST ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.STRING_SHOT ], + [ 1, MoveId.POISON_STING ], + [ 12, MoveId.ABSORB ], + [ 15, MoveId.STUN_SPORE ], + [ 17, MoveId.MORNING_SUN ], + [ 20, MoveId.AIR_CUTTER ], + [ 22, MoveId.MEGA_DRAIN ], + [ 25, MoveId.LEECH_LIFE ], + [ 27, MoveId.ATTRACT ], + [ 30, MoveId.WHIRLWIND ], + [ 32, MoveId.GIGA_DRAIN ], + [ 35, MoveId.BUG_BUZZ ], + [ 37, MoveId.PROTECT ], + [ 40, MoveId.QUIVER_DANCE ], + ], + [SpeciesId.CASCOON]: [ + [ EVOLVE_MOVE, MoveId.HARDEN ], + [ RELEARN_MOVE, MoveId.TACKLE ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.STRING_SHOT ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.POISON_STING ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.BUG_BITE ], // Previous Stage Move + [ 1, MoveId.HARDEN ], + ], + [SpeciesId.DUSTOX]: [ + [ EVOLVE_MOVE, MoveId.GUST ], + [ 1, MoveId.TACKLE ], // Previous Stage Move + [ 1, MoveId.BUG_BITE ], + [ 1, MoveId.GUST ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.STRING_SHOT ], + [ 1, MoveId.POISON_STING ], + [ 12, MoveId.CONFUSION ], + [ 15, MoveId.POISON_POWDER ], + [ 17, MoveId.MOONLIGHT ], + [ 20, MoveId.VENOSHOCK ], + [ 22, MoveId.PSYBEAM ], + [ 25, MoveId.LEECH_LIFE ], + [ 27, MoveId.LIGHT_SCREEN ], + [ 30, MoveId.WHIRLWIND ], + [ 32, MoveId.TOXIC ], + [ 35, MoveId.BUG_BUZZ ], + [ 37, MoveId.PROTECT ], + [ 40, MoveId.QUIVER_DANCE ], + ], + [SpeciesId.LOTAD]: [ + [ 1, MoveId.GROWL ], + [ 1, MoveId.ASTONISH ], + [ 3, MoveId.ABSORB ], + [ 6, MoveId.WATER_GUN ], + [ 9, MoveId.MIST ], + [ 12, MoveId.MEGA_DRAIN ], + [ 16, MoveId.FLAIL ], + [ 20, MoveId.BUBBLE_BEAM ], + [ 24, MoveId.LEECH_SEED ], + [ 28, MoveId.GIGA_DRAIN ], + [ 33, MoveId.RAIN_DANCE ], + [ 38, MoveId.ZEN_HEADBUTT ], + [ 43, MoveId.ENERGY_BALL ], + ], + [SpeciesId.LOMBRE]: [ + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.RAIN_DANCE ], // Previous Stage Move + [ 1, MoveId.KNOCK_OFF ], + [ 1, MoveId.TEETER_DANCE ], + [ 1, MoveId.ASTONISH ], + [ 9, MoveId.MIST ], + [ 12, MoveId.MEGA_DRAIN ], + [ 18, MoveId.FURY_SWIPES ], + [ 24, MoveId.BUBBLE_BEAM ], + [ 30, MoveId.LEECH_SEED ], + [ 36, MoveId.GIGA_DRAIN ], + [ 50, MoveId.ZEN_HEADBUTT ], + [ 57, MoveId.ENERGY_BALL ], + [ 64, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.LUDICOLO]: [ + [ RELEARN_MOVE, MoveId.GROWL ], + [ RELEARN_MOVE, MoveId.MIST ], + [ RELEARN_MOVE, MoveId.WATER_GUN ], + [ RELEARN_MOVE, MoveId.HYDRO_PUMP ], + [ RELEARN_MOVE, MoveId.ABSORB ], + [ RELEARN_MOVE, MoveId.MEGA_DRAIN ], + [ RELEARN_MOVE, MoveId.FURY_SWIPES ], + [ RELEARN_MOVE, MoveId.FLAIL ], + [ RELEARN_MOVE, MoveId.KNOCK_OFF ], + [ RELEARN_MOVE, MoveId.TEETER_DANCE ], + [ RELEARN_MOVE, MoveId.ASTONISH ], + [ RELEARN_MOVE, MoveId.ENERGY_BALL ], + [ RELEARN_MOVE, MoveId.ZEN_HEADBUTT ], + [ RELEARN_MOVE, MoveId.LEECH_SEED ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.GIGA_DRAIN ], // Previous Stage Move + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.BUBBLE_BEAM ], + [ 1, MoveId.RAIN_DANCE ], + ], + [SpeciesId.SEEDOT]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.BIDE ], + [ 3, MoveId.ABSORB ], + [ 6, MoveId.ASTONISH ], + [ 9, MoveId.GROWTH ], + [ 12, MoveId.ROLLOUT ], + [ 15, MoveId.MEGA_DRAIN ], + [ 18, MoveId.PAYBACK ], + [ 21, MoveId.HEADBUTT ], + [ 24, MoveId.SUNNY_DAY ], + [ 27, MoveId.SYNTHESIS ], + [ 30, MoveId.SUCKER_PUNCH ], + [ 33, MoveId.EXPLOSION ], + ], + [SpeciesId.NUZLEAF]: [ + [ EVOLVE_MOVE, MoveId.RAZOR_LEAF ], + [ 1, MoveId.AIR_CUTTER ], + [ 1, MoveId.TORMENT ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.SWAGGER ], + [ 1, MoveId.EXPLOSION ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.BIDE ], // Previous Stage Move + [ 1, MoveId.ABSORB ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.HEADBUTT ], // Previous Stage Move + [ 9, MoveId.GROWTH ], + [ 12, MoveId.ROLLOUT ], + [ 18, MoveId.MEGA_DRAIN ], + [ 24, MoveId.PAYBACK ], + [ 30, MoveId.SYNTHESIS ], + [ 36, MoveId.SUNNY_DAY ], + [ 43, MoveId.EXTRASENSORY ], + [ 50, MoveId.SUCKER_PUNCH ], + [ 57, MoveId.LEAF_BLADE ], + ], + [SpeciesId.SHIFTRY]: [ + [ EVOLVE_MOVE, MoveId.LEAF_BLADE ], + [ RELEARN_MOVE, MoveId.WHIRLWIND ], + [ RELEARN_MOVE, MoveId.TACKLE ], + [ RELEARN_MOVE, MoveId.BIDE ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.ABSORB ], + [ RELEARN_MOVE, MoveId.MEGA_DRAIN ], + [ RELEARN_MOVE, MoveId.GROWTH ], + [ RELEARN_MOVE, MoveId.RAZOR_LEAF ], + [ RELEARN_MOVE, MoveId.HARDEN ], + [ RELEARN_MOVE, MoveId.HEADBUTT ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.EXPLOSION ], + [ RELEARN_MOVE, MoveId.ROLLOUT ], + [ RELEARN_MOVE, MoveId.SWAGGER ], + [ RELEARN_MOVE, MoveId.SYNTHESIS ], + [ RELEARN_MOVE, MoveId.BEAT_UP ], + [ RELEARN_MOVE, MoveId.FAKE_OUT ], + [ RELEARN_MOVE, MoveId.TORMENT ], + [ RELEARN_MOVE, MoveId.ASTONISH ], + [ RELEARN_MOVE, MoveId.EXTRASENSORY ], + [ RELEARN_MOVE, MoveId.SUCKER_PUNCH ], + [ 1, MoveId.AIR_CUTTER ], + [ 1, MoveId.HURRICANE ], + [ 1, MoveId.PAYBACK ], + [ 1, MoveId.SUNNY_DAY ], + ], + [SpeciesId.TAILLOW]: [ + [ 1, MoveId.PECK ], + [ 1, MoveId.GROWL ], + [ 5, MoveId.FOCUS_ENERGY ], + [ 9, MoveId.QUICK_ATTACK ], + [ 13, MoveId.WING_ATTACK ], + [ 17, MoveId.DOUBLE_TEAM ], + [ 21, MoveId.AERIAL_ACE ], + [ 25, MoveId.QUICK_GUARD ], + [ 29, MoveId.AGILITY ], + [ 33, MoveId.AIR_SLASH ], + [ 37, MoveId.ENDEAVOR ], + [ 41, MoveId.BRAVE_BIRD ], + [ 45, MoveId.REVERSAL ], + ], + [SpeciesId.SWELLOW]: [ + [ 1, MoveId.BRAVE_BIRD ], + [ 1, MoveId.AIR_SLASH ], + [ 1, MoveId.PLUCK ], + [ 1, MoveId.PECK ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.QUICK_ATTACK ], + [ 13, MoveId.WING_ATTACK ], + [ 17, MoveId.DOUBLE_TEAM ], + [ 21, MoveId.AERIAL_ACE ], + [ 27, MoveId.QUICK_GUARD ], + [ 33, MoveId.AGILITY ], + [ 45, MoveId.ENDEAVOR ], + [ 51, MoveId.BRAVE_BIRD ], + [ 57, MoveId.REVERSAL ], + ], + [SpeciesId.WINGULL]: [ + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 5, MoveId.QUICK_ATTACK ], + [ 10, MoveId.SUPERSONIC ], + [ 15, MoveId.WING_ATTACK ], + [ 20, MoveId.WATER_PULSE ], + [ 26, MoveId.AGILITY ], + [ 30, MoveId.AIR_SLASH ], + [ 35, MoveId.MIST ], + [ 40, MoveId.ROOST ], + [ 45, MoveId.HURRICANE ], + ], + [SpeciesId.PELIPPER]: [ + [ 1, MoveId.PROTECT ], + [ 1, MoveId.SOAK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.AGILITY ], + [ 1, MoveId.AIR_SLASH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.TAILWIND ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.WATER_SPORT ], + [ 15, MoveId.WING_ATTACK ], + [ 20, MoveId.WATER_PULSE ], + [ 28, MoveId.STOCKPILE ], + [ 28, MoveId.SPIT_UP ], + [ 28, MoveId.SWALLOW ], + [ 34, MoveId.FLING ], + [ 41, MoveId.MIST ], + [ 48, MoveId.ROOST ], + [ 55, MoveId.HURRICANE ], + [ 62, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.RALTS]: [ + [ 1, MoveId.GROWL ], + [ 1, MoveId.DISARMING_VOICE ], + [ 3, MoveId.DOUBLE_TEAM ], + [ 6, MoveId.CONFUSION ], + [ 9, MoveId.HYPNOSIS ], + [ 12, MoveId.DRAINING_KISS ], + [ 15, MoveId.TELEPORT ], + [ 18, MoveId.PSYBEAM ], + [ 21, MoveId.LIFE_DEW ], + [ 24, MoveId.CHARM ], + [ 27, MoveId.CALM_MIND ], + [ 30, MoveId.PSYCHIC ], + [ 33, MoveId.HEAL_PULSE ], + [ 36, MoveId.DREAM_EATER ], + [ 39, MoveId.FUTURE_SIGHT ], + ], + [SpeciesId.KIRLIA]: [ + [ 1, MoveId.GROWL ], + [ 1, MoveId.DISARMING_VOICE ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.CONFUSION ], + [ 9, MoveId.HYPNOSIS ], + [ 12, MoveId.DRAINING_KISS ], + [ 15, MoveId.TELEPORT ], + [ 18, MoveId.PSYBEAM ], + [ 23, MoveId.LIFE_DEW ], + [ 28, MoveId.CHARM ], + [ 33, MoveId.CALM_MIND ], + [ 38, MoveId.PSYCHIC ], + [ 43, MoveId.HEAL_PULSE ], + [ 48, MoveId.DREAM_EATER ], + [ 53, MoveId.FUTURE_SIGHT ], + ], + [SpeciesId.GARDEVOIR]: [ + [ EVOLVE_MOVE, MoveId.DAZZLING_GLEAM ], + [ 1, MoveId.MISTY_TERRAIN ], + [ 1, MoveId.HEALING_WISH ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.MYSTICAL_FIRE ], + [ 1, MoveId.HEAL_PULSE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.DISARMING_VOICE ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.CONFUSION ], + [ 9, MoveId.HYPNOSIS ], + [ 12, MoveId.DRAINING_KISS ], + [ 15, MoveId.TELEPORT ], + [ 18, MoveId.PSYBEAM ], + [ 23, MoveId.LIFE_DEW ], + [ 28, MoveId.WISH ], + [ 35, MoveId.CALM_MIND ], + [ 42, MoveId.PSYCHIC ], + [ 49, MoveId.MOONBLAST ], + [ 56, MoveId.DREAM_EATER ], + [ 63, MoveId.FUTURE_SIGHT ], + ], + [SpeciesId.SURSKIT]: [ + [ 1, MoveId.WATER_GUN ], + [ 6, MoveId.QUICK_ATTACK ], + [ 9, MoveId.SWEET_SCENT ], + [ 14, MoveId.SOAK ], + [ 17, MoveId.BUBBLE_BEAM ], + [ 22, MoveId.AGILITY ], + [ 25, MoveId.MIST ], + [ 25, MoveId.HAZE ], + [ 35, MoveId.BATON_PASS ], + [ 38, MoveId.STICKY_WEB ], + ], + [SpeciesId.MASQUERAIN]: [ + [ RELEARN_MOVE, MoveId.BATON_PASS ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.STICKY_WEB ], // Previous Stage Move + [ 1, MoveId.WHIRLWIND ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.SOAK ], + [ 1, MoveId.BUBBLE_BEAM ], // Previous Stage Move + [ 1, MoveId.AGILITY ], // Previous Stage Move + [ 1, MoveId.MIST ], // Previous Stage Move + [ 1, MoveId.HAZE ], // Previous Stage Move + [ 1, MoveId.OMINOUS_WIND ], + [ 17, MoveId.GUST ], + [ 22, MoveId.SCARY_FACE ], + [ 22, MoveId.AIR_CUTTER ], + [ 26, MoveId.STUN_SPORE ], + [ 32, MoveId.AIR_SLASH ], + [ 38, MoveId.GIGA_DRAIN ], + [ 44, MoveId.BUG_BUZZ ], + [ 52, MoveId.QUIVER_DANCE ], + ], + [SpeciesId.SHROOMISH]: [ + [ 1, MoveId.ABSORB ], + [ 1, MoveId.TACKLE ], + [ 5, MoveId.STUN_SPORE ], + [ 8, MoveId.LEECH_SEED ], + [ 12, MoveId.MEGA_DRAIN ], + [ 15, MoveId.HEADBUTT ], + [ 19, MoveId.POISON_POWDER ], + [ 26, MoveId.GIGA_DRAIN ], + [ 29, MoveId.GROWTH ], + [ 33, MoveId.TOXIC ], + [ 36, MoveId.SEED_BOMB ], + [ 40, MoveId.SPORE ], + ], + [SpeciesId.BRELOOM]: [ + [ EVOLVE_MOVE, MoveId.MACH_PUNCH ], + [ RELEARN_MOVE, MoveId.SPORE ], + [ 1, MoveId.POISON_POWDER ], + [ 1, MoveId.GIGA_DRAIN ], // Previous Stage Move + [ 1, MoveId.GROWTH ], + [ 1, MoveId.TOXIC ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.LEECH_SEED ], + [ 12, MoveId.MEGA_DRAIN ], + [ 15, MoveId.HEADBUTT ], + [ 19, MoveId.FEINT ], + [ 22, MoveId.COUNTER ], + [ 28, MoveId.FORCE_PALM ], + [ 33, MoveId.WORRY_SEED ], + [ 39, MoveId.BRICK_BREAK ], + [ 44, MoveId.SEED_BOMB ], + [ 50, MoveId.DYNAMIC_PUNCH ], + [ 55, MoveId.FOCUS_PUNCH ], + ], + [SpeciesId.SLAKOTH]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.YAWN ], + [ 6, MoveId.ENCORE ], + [ 9, MoveId.SLACK_OFF ], + [ 14, MoveId.HEADBUTT ], + [ 17, MoveId.AMNESIA ], + [ 22, MoveId.COVET ], + [ 25, MoveId.THROAT_CHOP ], + [ 30, MoveId.COUNTER ], + [ 33, MoveId.FLAIL ], + [ 38, MoveId.PLAY_ROUGH ], + ], + [SpeciesId.VIGOROTH]: [ + [ RELEARN_MOVE, MoveId.PLAY_ROUGH ], // Previous Stage Move + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.YAWN ], // Previous Stage Move + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.SLACK_OFF ], // Previous Stage Move + [ 1, MoveId.ENCORE ], + [ 1, MoveId.HEADBUTT ], // Previous Stage Move + [ 1, MoveId.AMNESIA ], // Previous Stage Move + [ 1, MoveId.COVET ], // Previous Stage Move + [ 1, MoveId.FLAIL ], // Previous Stage Move + [ 1, MoveId.UPROAR ], + [ 14, MoveId.FURY_SWIPES ], + [ 17, MoveId.ENDURE ], + [ 23, MoveId.SLASH ], + [ 27, MoveId.THROAT_CHOP ], + [ 33, MoveId.COUNTER ], + [ 37, MoveId.FOCUS_PUNCH ], + [ 43, MoveId.REVERSAL ], + ], + [SpeciesId.SLAKING]: [ + [ EVOLVE_MOVE, MoveId.SWAGGER ], + [ RELEARN_MOVE, MoveId.PLAY_ROUGH ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.FOCUS_PUNCH ], // Previous Stage Move + [ 1, MoveId.SUCKER_PUNCH ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.YAWN ], + [ 1, MoveId.FOCUS_ENERGY ], // Previous Stage Move + [ 1, MoveId.ENCORE ], + [ 1, MoveId.SLACK_OFF ], + [ 1, MoveId.UPROAR ], // Previous Stage Move + [ 1, MoveId.FURY_SWIPES ], // Previous Stage Move + [ 1, MoveId.ENDURE ], // Previous Stage Move + [ 1, MoveId.HEADBUTT ], // Previous Stage Move + [ 1, MoveId.SLASH ], // Previous Stage Move + [ 1, MoveId.REVERSAL ], // Previous Stage Move + [ 17, MoveId.AMNESIA ], + [ 23, MoveId.COVET ], + [ 27, MoveId.THROAT_CHOP ], + [ 33, MoveId.COUNTER ], + [ 39, MoveId.FLAIL ], + [ 45, MoveId.FLING ], + [ 52, MoveId.MEGA_KICK ], + [ 63, MoveId.HAMMER_ARM ], + ], + [SpeciesId.NINCADA]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.SAND_ATTACK ], + [ 5, MoveId.HARDEN ], + [ 10, MoveId.FALSE_SWIPE ], + [ 15, MoveId.MUD_SLAP ], + [ 21, MoveId.ABSORB ], + [ 25, MoveId.METAL_CLAW ], + [ 30, MoveId.FURY_SWIPES ], + [ 35, MoveId.MIND_READER ], + [ 40, MoveId.DIG ], + ], + [SpeciesId.NINJASK]: [ + [ EVOLVE_MOVE, MoveId.DOUBLE_TEAM ], + [ EVOLVE_MOVE, MoveId.SCREECH ], + [ EVOLVE_MOVE, MoveId.FURY_CUTTER ], + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.AERIAL_ACE ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.DIG ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.FALSE_SWIPE ], + [ 15, MoveId.AGILITY ], + [ 23, MoveId.ABSORB ], + [ 29, MoveId.BUG_BITE ], + [ 36, MoveId.FURY_SWIPES ], + [ 43, MoveId.MIND_READER ], + [ 50, MoveId.SLASH ], + [ 57, MoveId.SWORDS_DANCE ], + [ 64, MoveId.X_SCISSOR ], + ], + [SpeciesId.SHEDINJA]: [ + [ 1, MoveId.SHADOW_CLAW ], + [ 1, MoveId.GRUDGE ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.DIG ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.FALSE_SWIPE ], + [ 15, MoveId.CONFUSE_RAY ], + [ 23, MoveId.ABSORB ], + [ 29, MoveId.SHADOW_SNEAK ], + [ 36, MoveId.FURY_SWIPES ], + [ 43, MoveId.MIND_READER ], + [ 50, MoveId.SHADOW_BALL ], + [ 57, MoveId.SPITE ], + [ 64, MoveId.PHANTOM_FORCE ], + ], + [SpeciesId.WHISMUR]: [ + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.POUND ], + [ 5, MoveId.ECHOED_VOICE ], + [ 10, MoveId.HOWL ], + [ 15, MoveId.REST ], + [ 15, MoveId.SLEEP_TALK ], + [ 21, MoveId.STOMP ], + [ 25, MoveId.ROAR ], + [ 30, MoveId.SUPERSONIC ], + [ 35, MoveId.UPROAR ], + [ 40, MoveId.SCREECH ], + [ 45, MoveId.HYPER_VOICE ], + ], + [SpeciesId.LOUDRED]: [ + [ EVOLVE_MOVE, MoveId.BITE ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.POUND ], + [ 1, MoveId.ECHOED_VOICE ], + [ 1, MoveId.HOWL ], + [ 15, MoveId.REST ], + [ 15, MoveId.SLEEP_TALK ], + [ 23, MoveId.STOMP ], + [ 29, MoveId.ROAR ], + [ 36, MoveId.SUPERSONIC ], + [ 43, MoveId.UPROAR ], + [ 50, MoveId.SCREECH ], + [ 57, MoveId.HYPER_VOICE ], + ], + [SpeciesId.EXPLOUD]: [ + [ EVOLVE_MOVE, MoveId.CRUNCH ], + [ 1, MoveId.BITE ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.FIRE_FANG ], + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.POUND ], + [ 1, MoveId.ECHOED_VOICE ], + [ 1, MoveId.HOWL ], + [ 15, MoveId.REST ], + [ 15, MoveId.SLEEP_TALK ], + [ 23, MoveId.STOMP ], + [ 29, MoveId.ROAR ], + [ 36, MoveId.SUPERSONIC ], + [ 45, MoveId.UPROAR ], + [ 54, MoveId.SCREECH ], + [ 63, MoveId.HYPER_VOICE ], + [ 72, MoveId.BOOMBURST ], + [ 81, MoveId.HYPER_BEAM ], + ], + [SpeciesId.MAKUHITA]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 4, MoveId.SAND_ATTACK ], + [ 7, MoveId.ARM_THRUST ], + [ 10, MoveId.FAKE_OUT ], + [ 13, MoveId.FORCE_PALM ], + [ 16, MoveId.WHIRLWIND ], + [ 19, MoveId.KNOCK_OFF ], + [ 22, MoveId.BULK_UP ], + [ 25, MoveId.BELLY_DRUM ], + [ 28, MoveId.DETECT ], + [ 31, MoveId.SEISMIC_TOSS ], + [ 34, MoveId.FOCUS_PUNCH ], + [ 37, MoveId.ENDURE ], + [ 40, MoveId.CLOSE_COMBAT ], + [ 43, MoveId.REVERSAL ], + [ 46, MoveId.HEAVY_SLAM ], + ], + [SpeciesId.HARIYAMA]: [ + [ 1, MoveId.BRINE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.SAND_ATTACK ], // Previous Stage Move + [ 1, MoveId.ARM_THRUST ], + [ 10, MoveId.FAKE_OUT ], + [ 13, MoveId.FORCE_PALM ], + [ 16, MoveId.WHIRLWIND ], + [ 19, MoveId.KNOCK_OFF ], + [ 22, MoveId.BULK_UP ], + [ 26, MoveId.BELLY_DRUM ], + [ 30, MoveId.DETECT ], + [ 34, MoveId.SEISMIC_TOSS ], + [ 38, MoveId.FOCUS_PUNCH ], + [ 42, MoveId.ENDURE ], + [ 46, MoveId.CLOSE_COMBAT ], + [ 50, MoveId.REVERSAL ], + [ 54, MoveId.HEAVY_SLAM ], + [ 60, MoveId.HEADLONG_RUSH ], + ], + [SpeciesId.AZURILL]: [ + [ 1, MoveId.SPLASH ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.TAIL_WHIP ], + [ 3, MoveId.HELPING_HAND ], + [ 6, MoveId.BUBBLE_BEAM ], + [ 9, MoveId.CHARM ], + [ 12, MoveId.SLAM ], + [ 15, MoveId.BOUNCE ], + ], + [SpeciesId.NOSEPASS]: [ + [ 1, MoveId.TACKLE ], + [ 4, MoveId.HARDEN ], + [ 7, MoveId.BLOCK ], + [ 10, MoveId.ROCK_THROW ], + [ 13, MoveId.THUNDER_WAVE ], + [ 16, MoveId.REST ], + [ 19, MoveId.SPARK ], + [ 22, MoveId.ROCK_SLIDE ], + [ 25, MoveId.POWER_GEM ], + [ 28, MoveId.ROCK_BLAST ], + [ 31, MoveId.DISCHARGE ], + [ 34, MoveId.SANDSTORM ], + [ 37, MoveId.EARTH_POWER ], + [ 40, MoveId.STONE_EDGE ], + [ 43, MoveId.LOCK_ON ], + [ 43, MoveId.ZAP_CANNON ], + ], + [SpeciesId.SKITTY]: [ + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.TAIL_WHIP ], + [ 4, MoveId.TACKLE ], + [ 7, MoveId.SING ], + [ 10, MoveId.ATTRACT ], + [ 13, MoveId.DISARMING_VOICE ], + [ 16, MoveId.FURY_SWIPES ], + [ 19, MoveId.COPYCAT ], + [ 22, MoveId.PAYBACK ], + [ 25, MoveId.CHARM ], + [ 31, MoveId.FACADE ], + [ 34, MoveId.COVET ], + [ 37, MoveId.HEAL_BELL ], + [ 40, MoveId.DOUBLE_EDGE ], + [ 43, MoveId.BABY_DOLL_EYES ], + [ 46, MoveId.PLAY_ROUGH ], + ], + [SpeciesId.DELCATTY]: [ + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SING ], + [ 1, MoveId.ATTRACT ], + [ 1, MoveId.DISARMING_VOICE ], + [ 1, MoveId.FURY_SWIPES ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.PAYBACK ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.FACADE ], + [ 1, MoveId.COVET ], + [ 1, MoveId.HEAL_BELL ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.BABY_DOLL_EYES ], + [ 1, MoveId.PLAY_ROUGH ], + ], + [SpeciesId.SABLEYE]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.SCRATCH ], + [ 3, MoveId.ASTONISH ], + [ 9, MoveId.SHADOW_SNEAK ], + [ 12, MoveId.FAKE_OUT ], + [ 15, MoveId.DISABLE ], + [ 18, MoveId.DETECT ], + [ 21, MoveId.NIGHT_SHADE ], + [ 24, MoveId.FURY_SWIPES ], + [ 27, MoveId.KNOCK_OFF ], + [ 30, MoveId.QUASH ], + [ 33, MoveId.SHADOW_CLAW ], + [ 36, MoveId.MEAN_LOOK ], + [ 39, MoveId.POWER_GEM ], + [ 42, MoveId.ZEN_HEADBUTT ], + [ 45, MoveId.SHADOW_BALL ], + [ 48, MoveId.FOUL_PLAY ], + ], + [SpeciesId.MAWILE]: [ + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.GROWL ], + [ 4, MoveId.FAIRY_WIND ], + [ 8, MoveId.BATON_PASS ], + [ 12, MoveId.BITE ], + [ 16, MoveId.STOCKPILE ], + [ 16, MoveId.SPIT_UP ], + [ 16, MoveId.SWALLOW ], + [ 20, MoveId.SUCKER_PUNCH ], + [ 24, MoveId.IRON_DEFENSE ], + [ 28, MoveId.CRUNCH ], + [ 32, MoveId.SWEET_SCENT ], + [ 36, MoveId.IRON_HEAD ], + [ 40, MoveId.TAUNT ], + [ 44, MoveId.FAKE_TEARS ], + [ 48, MoveId.PLAY_ROUGH ], + ], + [SpeciesId.ARON]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 4, MoveId.METAL_CLAW ], + [ 8, MoveId.ROCK_TOMB ], + [ 12, MoveId.ROAR ], + [ 16, MoveId.HEADBUTT ], + [ 20, MoveId.PROTECT ], + [ 24, MoveId.ROCK_SLIDE ], + [ 28, MoveId.IRON_HEAD ], + [ 33, MoveId.METAL_SOUND ], + [ 36, MoveId.TAKE_DOWN ], + [ 40, MoveId.AUTOTOMIZE ], + [ 44, MoveId.IRON_TAIL ], + [ 48, MoveId.IRON_DEFENSE ], + [ 52, MoveId.HEAVY_SLAM ], + [ 56, MoveId.DOUBLE_EDGE ], + [ 60, MoveId.METAL_BURST ], + ], + [SpeciesId.LAIRON]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.ROCK_TOMB ], + [ 12, MoveId.ROAR ], + [ 16, MoveId.HEADBUTT ], + [ 20, MoveId.PROTECT ], + [ 24, MoveId.ROCK_SLIDE ], + [ 28, MoveId.IRON_HEAD ], + [ 35, MoveId.METAL_SOUND ], + [ 40, MoveId.TAKE_DOWN ], + [ 46, MoveId.AUTOTOMIZE ], + [ 52, MoveId.IRON_TAIL ], + [ 58, MoveId.IRON_DEFENSE ], + [ 64, MoveId.HEAVY_SLAM ], + [ 70, MoveId.DOUBLE_EDGE ], + [ 76, MoveId.METAL_BURST ], + ], + [SpeciesId.AGGRON]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.ROCK_TOMB ], + [ 12, MoveId.ROAR ], + [ 16, MoveId.HEADBUTT ], + [ 20, MoveId.PROTECT ], + [ 24, MoveId.ROCK_SLIDE ], + [ 28, MoveId.IRON_HEAD ], + [ 35, MoveId.METAL_SOUND ], + [ 40, MoveId.TAKE_DOWN ], + [ 48, MoveId.AUTOTOMIZE ], + [ 56, MoveId.IRON_TAIL ], + [ 64, MoveId.IRON_DEFENSE ], + [ 72, MoveId.HEAVY_SLAM ], + [ 80, MoveId.DOUBLE_EDGE ], + [ 88, MoveId.METAL_BURST ], + ], + [SpeciesId.MEDITITE]: [ + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.WORK_UP ], + [ 1, MoveId.BIDE ], + [ 9, MoveId.DETECT ], + [ 12, MoveId.ENDURE ], + [ 15, MoveId.FEINT ], + [ 17, MoveId.FORCE_PALM ], + [ 20, MoveId.PSYBEAM ], + [ 23, MoveId.CALM_MIND ], + [ 25, MoveId.ZEN_HEADBUTT ], + [ 28, MoveId.HIGH_JUMP_KICK ], + [ 31, MoveId.PSYCH_UP ], + [ 33, MoveId.ACUPRESSURE ], + [ 36, MoveId.POWER_TRICK ], + [ 39, MoveId.REVERSAL ], + [ 41, MoveId.RECOVER ], + [ 44, MoveId.COUNTER ], + ], + [SpeciesId.MEDICHAM]: [ + [ 1, MoveId.FIRE_PUNCH ], + [ 1, MoveId.ICE_PUNCH ], + [ 1, MoveId.THUNDER_PUNCH ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.DETECT ], + [ 1, MoveId.WORK_UP ], + [ 1, MoveId.BIDE ], + [ 1, MoveId.REVERSAL ], // Previous Stage Move + [ 12, MoveId.ENDURE ], + [ 15, MoveId.FEINT ], + [ 17, MoveId.FORCE_PALM ], + [ 20, MoveId.PSYBEAM ], + [ 23, MoveId.CALM_MIND ], + [ 25, MoveId.ZEN_HEADBUTT ], + [ 28, MoveId.HIGH_JUMP_KICK ], + [ 31, MoveId.PSYCH_UP ], + [ 33, MoveId.ACUPRESSURE ], + [ 36, MoveId.POWER_TRICK ], + [ 47, MoveId.RECOVER ], + [ 53, MoveId.COUNTER ], + [ 53, MoveId.AXE_KICK ], + ], + [SpeciesId.ELECTRIKE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.THUNDER_WAVE ], + [ 4, MoveId.LEER ], + [ 8, MoveId.HOWL ], + [ 12, MoveId.QUICK_ATTACK ], + [ 16, MoveId.SHOCK_WAVE ], + [ 20, MoveId.BITE ], + [ 24, MoveId.THUNDER_FANG ], + [ 28, MoveId.ROAR ], + [ 32, MoveId.DISCHARGE ], + [ 36, MoveId.CHARGE ], + [ 40, MoveId.WILD_CHARGE ], + [ 44, MoveId.THUNDER ], + ], + [SpeciesId.MANECTRIC]: [ + [ 1, MoveId.FIRE_FANG ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.HOWL ], + [ 12, MoveId.QUICK_ATTACK ], + [ 16, MoveId.SHOCK_WAVE ], + [ 20, MoveId.BITE ], + [ 24, MoveId.THUNDER_FANG ], + [ 30, MoveId.ROAR ], + [ 36, MoveId.DISCHARGE ], + [ 42, MoveId.CHARGE ], + [ 48, MoveId.WILD_CHARGE ], + [ 54, MoveId.THUNDER ], + [ 60, MoveId.ELECTRIC_TERRAIN ], + ], + [SpeciesId.PLUSLE]: [ + [ RELEARN_MOVE, MoveId.NUZZLE ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.QUICK_ATTACK ], + [ 4, MoveId.HELPING_HAND ], + [ 7, MoveId.SPARK ], + [ 10, MoveId.ENCORE ], + [ 13, MoveId.SWITCHEROO ], + [ 16, MoveId.SWIFT ], + [ 19, MoveId.ELECTRO_BALL ], + [ 22, MoveId.COPYCAT ], + [ 26, MoveId.CHARGE ], + [ 31, MoveId.DISCHARGE ], + [ 34, MoveId.BATON_PASS ], + [ 37, MoveId.AGILITY ], + [ 40, MoveId.LAST_RESORT ], + [ 43, MoveId.THUNDER ], + [ 46, MoveId.NASTY_PLOT ], + [ 49, MoveId.ENTRAINMENT ], + ], + [SpeciesId.MINUN]: [ + [ RELEARN_MOVE, MoveId.NUZZLE ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.QUICK_ATTACK ], + [ 4, MoveId.HELPING_HAND ], + [ 7, MoveId.SPARK ], + [ 10, MoveId.ENCORE ], + [ 13, MoveId.SWITCHEROO ], + [ 16, MoveId.SWIFT ], + [ 19, MoveId.ELECTRO_BALL ], + [ 22, MoveId.COPYCAT ], + [ 26, MoveId.CHARGE ], + [ 31, MoveId.DISCHARGE ], + [ 34, MoveId.BATON_PASS ], + [ 37, MoveId.AGILITY ], + [ 40, MoveId.LAST_RESORT ], + [ 43, MoveId.THUNDER ], + [ 46, MoveId.NASTY_PLOT ], + [ 49, MoveId.ENTRAINMENT ], + ], + [SpeciesId.VOLBEAT]: [ + [ 1, MoveId.FLASH ], + [ 1, MoveId.TACKLE ], + [ 5, MoveId.DOUBLE_TEAM ], + [ 8, MoveId.CONFUSE_RAY ], + [ 12, MoveId.QUICK_ATTACK ], + [ 15, MoveId.STRUGGLE_BUG ], + [ 19, MoveId.MOONLIGHT ], + [ 22, MoveId.TAIL_GLOW ], + [ 26, MoveId.PROTECT ], + [ 29, MoveId.ZEN_HEADBUTT ], + [ 33, MoveId.HELPING_HAND ], + [ 36, MoveId.BUG_BUZZ ], + [ 40, MoveId.PLAY_ROUGH ], + [ 43, MoveId.DOUBLE_EDGE ], + [ 47, MoveId.INFESTATION ], + ], + [SpeciesId.ILLUMISE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.PLAY_NICE ], + [ 5, MoveId.SWEET_SCENT ], + [ 9, MoveId.CHARM ], + [ 12, MoveId.QUICK_ATTACK ], + [ 15, MoveId.STRUGGLE_BUG ], + [ 19, MoveId.MOONLIGHT ], + [ 22, MoveId.WISH ], + [ 26, MoveId.ENCORE ], + [ 29, MoveId.FLATTER ], + [ 33, MoveId.ZEN_HEADBUTT ], + [ 36, MoveId.HELPING_HAND ], + [ 40, MoveId.BUG_BUZZ ], + [ 43, MoveId.PLAY_ROUGH ], + [ 47, MoveId.INFESTATION ], + ], + [SpeciesId.ROSELIA]: [ + [ EVOLVE_MOVE, MoveId.POISON_STING ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.WORRY_SEED ], + [ 5, MoveId.MEGA_DRAIN ], + [ 10, MoveId.LEECH_SEED ], + [ 15, MoveId.MAGICAL_LEAF ], + [ 20, MoveId.TOXIC_SPIKES ], + [ 25, MoveId.SWEET_SCENT ], + [ 30, MoveId.GIGA_DRAIN ], + [ 35, MoveId.SYNTHESIS ], + [ 40, MoveId.TOXIC ], + [ 45, MoveId.PETAL_BLIZZARD ], + [ 50, MoveId.AROMATHERAPY ], + [ 55, MoveId.INGRAIN ], + [ 60, MoveId.PETAL_DANCE ], + ], + [SpeciesId.GULPIN]: [ + [ 1, MoveId.POUND ], + [ 5, MoveId.YAWN ], + [ 8, MoveId.POISON_GAS ], + [ 10, MoveId.SLUDGE ], + [ 12, MoveId.AMNESIA ], + [ 17, MoveId.ACID_SPRAY ], + [ 20, MoveId.ENCORE ], + [ 25, MoveId.TOXIC ], + [ 28, MoveId.STOCKPILE ], + [ 28, MoveId.SPIT_UP ], + [ 28, MoveId.SWALLOW ], + [ 33, MoveId.SLUDGE_BOMB ], + [ 36, MoveId.GASTRO_ACID ], + [ 41, MoveId.BELCH ], + [ 44, MoveId.PAIN_SPLIT ], + [ 49, MoveId.GUNK_SHOT ], + ], + [SpeciesId.SWALOT]: [ + [ EVOLVE_MOVE, MoveId.BODY_SLAM ], + [ 1, MoveId.GUNK_SHOT ], + [ 1, MoveId.POUND ], + [ 1, MoveId.YAWN ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.WRING_OUT ], + [ 1, MoveId.SLUDGE ], + [ 1, MoveId.PAIN_SPLIT ], // Previous Stage Move + [ 12, MoveId.AMNESIA ], + [ 17, MoveId.ACID_SPRAY ], + [ 20, MoveId.ENCORE ], + [ 25, MoveId.TOXIC ], + [ 30, MoveId.STOCKPILE ], + [ 30, MoveId.SPIT_UP ], + [ 30, MoveId.SWALLOW ], + [ 37, MoveId.SLUDGE_BOMB ], + [ 42, MoveId.GASTRO_ACID ], + [ 49, MoveId.BELCH ], + ], + [SpeciesId.CARVANHA]: [ + [ 1, MoveId.AQUA_JET ], + [ 1, MoveId.LEER ], + [ 4, MoveId.POISON_FANG ], + [ 8, MoveId.FOCUS_ENERGY ], + [ 12, MoveId.SCARY_FACE ], + [ 16, MoveId.BITE ], + [ 20, MoveId.ICE_FANG ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.SWAGGER ], + [ 32, MoveId.CRUNCH ], + [ 36, MoveId.AGILITY ], + [ 40, MoveId.LIQUIDATION ], + [ 44, MoveId.TAKE_DOWN ], + ], + [SpeciesId.SHARPEDO]: [ + [ EVOLVE_MOVE, MoveId.SLASH ], + [ 1, MoveId.NIGHT_SLASH ], + [ 1, MoveId.AQUA_JET ], + [ 1, MoveId.LEER ], + [ 1, MoveId.POISON_FANG ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 12, MoveId.SCARY_FACE ], + [ 16, MoveId.BITE ], + [ 20, MoveId.ICE_FANG ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.SWAGGER ], + [ 34, MoveId.CRUNCH ], + [ 40, MoveId.AGILITY ], + [ 46, MoveId.LIQUIDATION ], + [ 52, MoveId.TAKE_DOWN ], + ], + [SpeciesId.WAILMER]: [ + [ 1, MoveId.SPLASH ], + [ 1, MoveId.TACKLE ], // Custom + [ 3, MoveId.GROWL ], + [ 6, MoveId.ASTONISH ], + [ 12, MoveId.WATER_GUN ], + [ 15, MoveId.MIST ], + [ 18, MoveId.WATER_PULSE ], + [ 21, MoveId.HEAVY_SLAM ], + [ 24, MoveId.BRINE ], + [ 27, MoveId.WHIRLPOOL ], + [ 30, MoveId.DIVE ], + [ 33, MoveId.BOUNCE ], + [ 36, MoveId.BODY_SLAM ], + [ 39, MoveId.REST ], + [ 42, MoveId.AMNESIA ], + [ 45, MoveId.HYDRO_PUMP ], + [ 48, MoveId.WATER_SPOUT ], + ], + [SpeciesId.WAILORD]: [ + [ 1, MoveId.SOAK ], + [ 1, MoveId.NOBLE_ROAR ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.TACKLE ], // Previous Stage Move, Custom + [ 1, MoveId.GROWL ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.WATER_GUN ], + [ 15, MoveId.MIST ], + [ 18, MoveId.WATER_PULSE ], + [ 21, MoveId.HEAVY_SLAM ], + [ 24, MoveId.BRINE ], + [ 27, MoveId.WHIRLPOOL ], + [ 30, MoveId.DIVE ], + [ 33, MoveId.BOUNCE ], + [ 36, MoveId.BODY_SLAM ], + [ 39, MoveId.REST ], + [ 44, MoveId.AMNESIA ], + [ 49, MoveId.HYDRO_PUMP ], + [ 54, MoveId.WATER_SPOUT ], + ], + [SpeciesId.NUMEL]: [ + [ 1, MoveId.GROWL ], + [ 1, MoveId.TACKLE ], + [ 5, MoveId.EMBER ], + [ 8, MoveId.FOCUS_ENERGY ], + [ 12, MoveId.BULLDOZE ], + [ 15, MoveId.INCINERATE ], + [ 19, MoveId.AMNESIA ], + [ 22, MoveId.LAVA_PLUME ], + [ 26, MoveId.EARTH_POWER ], + [ 29, MoveId.CURSE ], + [ 31, MoveId.TAKE_DOWN ], + [ 40, MoveId.EARTHQUAKE ], + [ 43, MoveId.FLAMETHROWER ], + [ 47, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.CAMERUPT]: [ + [ EVOLVE_MOVE, MoveId.ROCK_SLIDE ], + [ RELEARN_MOVE, MoveId.FLAMETHROWER ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.DOUBLE_EDGE ], // Previous Stage Move + [ 1, MoveId.FISSURE ], + [ 1, MoveId.ERUPTION ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 12, MoveId.BULLDOZE ], + [ 15, MoveId.INCINERATE ], + [ 19, MoveId.AMNESIA ], + [ 22, MoveId.LAVA_PLUME ], + [ 26, MoveId.EARTH_POWER ], + [ 29, MoveId.CURSE ], + [ 31, MoveId.TAKE_DOWN ], + [ 39, MoveId.YAWN ], + [ 46, MoveId.EARTHQUAKE ], + ], + [SpeciesId.TORKOAL]: [ + [ 1, MoveId.SMOG ], + [ 1, MoveId.EMBER ], + [ 4, MoveId.WITHDRAW ], + [ 8, MoveId.RAPID_SPIN ], + [ 12, MoveId.SMOKESCREEN ], + [ 16, MoveId.CLEAR_SMOG ], + [ 20, MoveId.FLAME_WHEEL ], + [ 24, MoveId.PROTECT ], + [ 28, MoveId.LAVA_PLUME ], + [ 32, MoveId.BODY_SLAM ], + [ 36, MoveId.IRON_DEFENSE ], + [ 40, MoveId.FLAMETHROWER ], + [ 44, MoveId.CURSE ], + [ 48, MoveId.HEAT_WAVE ], + [ 52, MoveId.AMNESIA ], + [ 56, MoveId.INFERNO ], + [ 60, MoveId.SHELL_SMASH ], + [ 64, MoveId.ERUPTION ], + ], + [SpeciesId.SPOINK]: [ + [ 1, MoveId.SPLASH ], + [ 5, MoveId.CONFUSION ], // Custom, Moved from Level 7 to 5 + [ 10, MoveId.GROWL ], + [ 14, MoveId.PSYBEAM ], + [ 18, MoveId.PSYCH_UP ], + [ 22, MoveId.CONFUSE_RAY ], + [ 29, MoveId.REST ], + [ 29, MoveId.POWER_GEM ], + [ 33, MoveId.SNORE ], + [ 38, MoveId.PSYSHOCK ], + [ 40, MoveId.PAYBACK ], + [ 44, MoveId.PSYCHIC ], + [ 50, MoveId.BOUNCE ], + ], + [SpeciesId.GRUMPIG]: [ + [ EVOLVE_MOVE, MoveId.TEETER_DANCE ], + [ 1, MoveId.BELCH ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.GROWL ], // Previous Stage Move + [ 1, MoveId.PSYBEAM ], + [ 18, MoveId.PSYCH_UP ], + [ 22, MoveId.CONFUSE_RAY ], + [ 26, MoveId.ZEN_HEADBUTT ], + [ 29, MoveId.POWER_GEM ], + [ 35, MoveId.REST ], + [ 35, MoveId.SNORE ], + [ 42, MoveId.PSYSHOCK ], + [ 46, MoveId.PAYBACK ], + [ 52, MoveId.PSYCHIC ], + [ 60, MoveId.BOUNCE ], + ], + [SpeciesId.SPINDA]: [ + [ 1, MoveId.TACKLE ], + [ 5, MoveId.COPYCAT ], + [ 10, MoveId.DIZZY_PUNCH ], + [ 14, MoveId.PSYBEAM ], + [ 19, MoveId.HYPNOSIS ], + [ 23, MoveId.BODY_SLAM ], + [ 28, MoveId.SUCKER_PUNCH ], + [ 32, MoveId.TEETER_DANCE ], + [ 37, MoveId.UPROAR ], + [ 41, MoveId.PSYCH_UP ], + [ 46, MoveId.DOUBLE_EDGE ], + [ 50, MoveId.FLAIL ], + [ 55, MoveId.THRASH ], + ], + [SpeciesId.TRAPINCH]: [ + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.BIDE ], + [ 1, MoveId.FEINT_ATTACK ], + [ 8, MoveId.BITE ], + [ 12, MoveId.MUD_SLAP ], + [ 16, MoveId.SAND_TOMB ], + [ 20, MoveId.BULLDOZE ], + [ 24, MoveId.DIG ], + [ 28, MoveId.CRUNCH ], + [ 32, MoveId.SANDSTORM ], + [ 36, MoveId.EARTH_POWER ], + [ 40, MoveId.EARTHQUAKE ], + [ 44, MoveId.SUPERPOWER ], + [ 48, MoveId.FISSURE ], + ], + [SpeciesId.VIBRAVA]: [ + [ EVOLVE_MOVE, MoveId.DRAGON_BREATH ], + [ RELEARN_MOVE, MoveId.SUPERSONIC ], + [ RELEARN_MOVE, MoveId.FISSURE ], + [ RELEARN_MOVE, MoveId.CRUNCH ], + [ RELEARN_MOVE, MoveId.SUPERPOWER ], + [ RELEARN_MOVE, MoveId.ASTONISH ], + [ RELEARN_MOVE, MoveId.BULLDOZE ], + [ 1, MoveId.DIG ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.BITE ], + [ 1, MoveId.BIDE ], + [ 1, MoveId.FEINT_ATTACK ], + [ 12, MoveId.MUD_SLAP ], + [ 16, MoveId.SAND_TOMB ], + [ 20, MoveId.DRAGON_TAIL ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.BUG_BUZZ ], + [ 32, MoveId.SANDSTORM ], + [ 38, MoveId.EARTH_POWER ], + [ 44, MoveId.EARTHQUAKE ], + [ 50, MoveId.UPROAR ], + [ 56, MoveId.DRAGON_RUSH ], + [ 62, MoveId.BOOMBURST ], + ], + [SpeciesId.FLYGON]: [ + [ EVOLVE_MOVE, MoveId.DRAGON_CLAW ], + [ RELEARN_MOVE, MoveId.BITE ], + [ RELEARN_MOVE, MoveId.FISSURE ], + [ RELEARN_MOVE, MoveId.DIG ], + [ RELEARN_MOVE, MoveId.CRUNCH ], + [ RELEARN_MOVE, MoveId.SUPERPOWER ], + [ RELEARN_MOVE, MoveId.ASTONISH ], + [ RELEARN_MOVE, MoveId.DRAGON_DANCE ], + [ RELEARN_MOVE, MoveId.FEINT ], + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.BULLDOZE ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.BIDE ], + [ 1, MoveId.FEINT_ATTACK ], + [ 12, MoveId.MUD_SLAP ], + [ 16, MoveId.SAND_TOMB ], + [ 20, MoveId.DRAGON_TAIL ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.BUG_BUZZ ], + [ 32, MoveId.SANDSTORM ], + [ 38, MoveId.EARTH_POWER ], + [ 44, MoveId.EARTHQUAKE ], + [ 52, MoveId.UPROAR ], + [ 60, MoveId.DRAGON_RUSH ], + [ 68, MoveId.BOOMBURST ], + ], + [SpeciesId.CACNEA]: [ + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.LEER ], + [ 4, MoveId.ABSORB ], + [ 7, MoveId.GROWTH ], + [ 10, MoveId.LEECH_SEED ], + [ 13, MoveId.SAND_ATTACK ], + [ 16, MoveId.BULLET_SEED ], + [ 19, MoveId.POWER_TRIP ], + [ 22, MoveId.INGRAIN ], + [ 26, MoveId.PAYBACK ], + [ 30, MoveId.SPIKES ], + [ 34, MoveId.SUCKER_PUNCH ], + [ 38, MoveId.PIN_MISSILE ], + [ 42, MoveId.ENERGY_BALL ], + [ 46, MoveId.COTTON_SPORE ], + [ 50, MoveId.SANDSTORM ], + [ 54, MoveId.DESTINY_BOND ], + ], + [SpeciesId.CACTURNE]: [ + [ EVOLVE_MOVE, MoveId.SPIKY_SHIELD ], + [ 1, MoveId.DESTINY_BOND ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.LEER ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.GROWTH ], + [ 10, MoveId.LEECH_SEED ], + [ 13, MoveId.SAND_ATTACK ], + [ 16, MoveId.BULLET_SEED ], + [ 19, MoveId.POWER_TRIP ], + [ 22, MoveId.INGRAIN ], + [ 26, MoveId.PAYBACK ], + [ 30, MoveId.SPIKES ], + [ 35, MoveId.SUCKER_PUNCH ], + [ 38, MoveId.PIN_MISSILE ], + [ 44, MoveId.ENERGY_BALL ], + [ 49, MoveId.COTTON_SPORE ], + [ 54, MoveId.SANDSTORM ], + ], + [SpeciesId.SWABLU]: [ + [ 1, MoveId.PECK ], + [ 1, MoveId.GROWL ], + [ 4, MoveId.DISARMING_VOICE ], + [ 8, MoveId.MIST ], + [ 12, MoveId.FURY_ATTACK ], + [ 16, MoveId.ROUND ], + [ 20, MoveId.DRAGON_BREATH ], + [ 24, MoveId.SAFEGUARD ], + [ 28, MoveId.SING ], + [ 32, MoveId.COTTON_GUARD ], + [ 36, MoveId.TAKE_DOWN ], + [ 40, MoveId.MOONBLAST ], + [ 44, MoveId.PERISH_SONG ], + ], + [SpeciesId.ALTARIA]: [ + [ EVOLVE_MOVE, MoveId.DRAGON_PULSE ], + [ 1, MoveId.PLUCK ], + [ 1, MoveId.PECK ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.DISARMING_VOICE ], + [ 1, MoveId.MIST ], + [ 12, MoveId.FURY_ATTACK ], + [ 16, MoveId.ROUND ], + [ 20, MoveId.DRAGON_BREATH ], + [ 24, MoveId.SAFEGUARD ], + [ 28, MoveId.SING ], + [ 32, MoveId.COTTON_GUARD ], + [ 38, MoveId.TAKE_DOWN ], + [ 44, MoveId.MOONBLAST ], + [ 50, MoveId.PERISH_SONG ], + [ 56, MoveId.SKY_ATTACK ], + ], + [SpeciesId.ZANGOOSE]: [ + [ RELEARN_MOVE, MoveId.DOUBLE_KICK ], + [ RELEARN_MOVE, MoveId.DISABLE ], + [ RELEARN_MOVE, MoveId.COUNTER ], + [ RELEARN_MOVE, MoveId.FURY_SWIPES ], + [ RELEARN_MOVE, MoveId.CURSE ], + [ RELEARN_MOVE, MoveId.FLAIL ], + [ RELEARN_MOVE, MoveId.BELLY_DRUM ], + [ RELEARN_MOVE, MoveId.FEINT ], + [ RELEARN_MOVE, MoveId.NIGHT_SLASH ], + [ RELEARN_MOVE, MoveId.DOUBLE_HIT ], + [ RELEARN_MOVE, MoveId.QUICK_GUARD ], + [ RELEARN_MOVE, MoveId.FINAL_GAMBIT ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 5, MoveId.QUICK_ATTACK ], + [ 8, MoveId.FURY_CUTTER ], + [ 12, MoveId.METAL_CLAW ], + [ 15, MoveId.HONE_CLAWS ], + [ 19, MoveId.SLASH ], + [ 22, MoveId.POWER_TRIP ], + [ 26, MoveId.CRUSH_CLAW ], + [ 29, MoveId.FALSE_SWIPE ], + [ 33, MoveId.SWITCHEROO ], + [ 36, MoveId.DETECT ], + [ 40, MoveId.X_SCISSOR ], + [ 43, MoveId.TAUNT ], + [ 47, MoveId.SWORDS_DANCE ], + [ 50, MoveId.CLOSE_COMBAT ], + ], + [SpeciesId.SEVIPER]: [ + [ 1, MoveId.WRAP ], + [ 1, MoveId.SWAGGER ], + [ 4, MoveId.BITE ], + [ 6, MoveId.LICK ], + [ 9, MoveId.POISON_TAIL ], + [ 11, MoveId.FEINT ], + [ 14, MoveId.SCREECH ], + [ 19, MoveId.GLARE ], + [ 21, MoveId.POISON_FANG ], + [ 24, MoveId.VENOSHOCK ], + [ 29, MoveId.GASTRO_ACID ], + [ 31, MoveId.POISON_JAB ], + [ 34, MoveId.HAZE ], + [ 39, MoveId.CRUNCH ], + [ 41, MoveId.BELCH ], + [ 44, MoveId.COIL ], + [ 46, MoveId.SLUDGE_BOMB ], + ], + [SpeciesId.LUNATONE]: [ + [ 1, MoveId.MOONBLAST ], + [ 1, MoveId.MOONLIGHT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.ROCK_THROW ], + [ 5, MoveId.HYPNOSIS ], + [ 10, MoveId.ROCK_POLISH ], + [ 15, MoveId.ROCK_SLIDE ], + [ 20, MoveId.PSYSHOCK ], + [ 25, MoveId.COSMIC_POWER ], + [ 30, MoveId.PSYCHIC ], + [ 35, MoveId.STONE_EDGE ], + [ 40, MoveId.FUTURE_SIGHT ], + [ 45, MoveId.MAGIC_ROOM ], + [ 50, MoveId.EXPLOSION ], + ], + [SpeciesId.SOLROCK]: [ + [ 1, MoveId.FLARE_BLITZ ], + [ 1, MoveId.MORNING_SUN ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.ROCK_THROW ], + [ 5, MoveId.HYPNOSIS ], + [ 10, MoveId.ROCK_POLISH ], + [ 15, MoveId.ROCK_SLIDE ], + [ 20, MoveId.ZEN_HEADBUTT ], + [ 25, MoveId.COSMIC_POWER ], + [ 30, MoveId.PSYCHIC ], + [ 35, MoveId.STONE_EDGE ], + [ 40, MoveId.SOLAR_BEAM ], + [ 45, MoveId.WONDER_ROOM ], + [ 50, MoveId.EXPLOSION ], + ], + [SpeciesId.BARBOACH]: [ + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.WATER_GUN ], + [ 6, MoveId.REST ], + [ 6, MoveId.SNORE ], + [ 12, MoveId.WATER_PULSE ], + [ 18, MoveId.AMNESIA ], + [ 24, MoveId.AQUA_TAIL ], + [ 31, MoveId.MUDDY_WATER ], + [ 36, MoveId.EARTHQUAKE ], + [ 42, MoveId.FUTURE_SIGHT ], + [ 48, MoveId.FISSURE ], + ], + [SpeciesId.WHISCASH]: [ + [ EVOLVE_MOVE, MoveId.THRASH ], + [ 1, MoveId.BELCH ], + [ 1, MoveId.ZEN_HEADBUTT ], + [ 1, MoveId.TICKLE ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.REST ], + [ 1, MoveId.SNORE ], + [ 12, MoveId.WATER_PULSE ], + [ 18, MoveId.AMNESIA ], + [ 24, MoveId.AQUA_TAIL ], + [ 33, MoveId.MUDDY_WATER ], + [ 40, MoveId.EARTHQUAKE ], + [ 48, MoveId.FUTURE_SIGHT ], + [ 56, MoveId.FISSURE ], + ], + [SpeciesId.CORPHISH]: [ + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.HARDEN ], + [ 4, MoveId.LEER ], + [ 8, MoveId.TAUNT ], + [ 12, MoveId.BUBBLE_BEAM ], + [ 16, MoveId.KNOCK_OFF ], + [ 20, MoveId.DOUBLE_HIT ], + [ 24, MoveId.PROTECT ], + [ 28, MoveId.NIGHT_SLASH ], + [ 32, MoveId.RAZOR_SHELL ], + [ 36, MoveId.SWORDS_DANCE ], + [ 40, MoveId.CRUNCH ], + [ 44, MoveId.CRABHAMMER ], + [ 48, MoveId.ENDEAVOR ], + [ 52, MoveId.GUILLOTINE ], + ], + [SpeciesId.CRAWDAUNT]: [ + [ EVOLVE_MOVE, MoveId.SWIFT ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.LEER ], + [ 1, MoveId.TAUNT ], + [ 12, MoveId.BUBBLE_BEAM ], + [ 16, MoveId.KNOCK_OFF ], + [ 20, MoveId.DOUBLE_HIT ], + [ 24, MoveId.PROTECT ], + [ 28, MoveId.NIGHT_SLASH ], + [ 34, MoveId.RAZOR_SHELL ], + [ 40, MoveId.SWORDS_DANCE ], + [ 46, MoveId.CRUNCH ], + [ 52, MoveId.CRABHAMMER ], + [ 58, MoveId.ENDEAVOR ], + [ 64, MoveId.GUILLOTINE ], + ], + [SpeciesId.BALTOY]: [ + [ 1, MoveId.HARDEN ], + [ 1, MoveId.MUD_SLAP ], + [ 3, MoveId.RAPID_SPIN ], + [ 6, MoveId.CONFUSION ], + [ 9, MoveId.ROCK_TOMB ], + [ 12, MoveId.POWER_TRICK ], + [ 15, MoveId.PSYBEAM ], + [ 18, MoveId.ANCIENT_POWER ], + [ 21, MoveId.IMPRISON ], + [ 24, MoveId.COSMIC_POWER ], + [ 27, MoveId.EXTRASENSORY ], + [ 30, MoveId.EARTH_POWER ], + [ 33, MoveId.SELF_DESTRUCT ], + [ 36, MoveId.GUARD_SPLIT ], + [ 36, MoveId.POWER_SPLIT ], + [ 39, MoveId.SANDSTORM ], + [ 42, MoveId.EXPLOSION ], + ], + [SpeciesId.CLAYDOL]: [ + [ EVOLVE_MOVE, MoveId.HYPER_BEAM ], + [ 1, MoveId.TELEPORT ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.CONFUSION ], + [ 9, MoveId.ROCK_TOMB ], + [ 12, MoveId.POWER_TRICK ], + [ 15, MoveId.PSYBEAM ], + [ 18, MoveId.ANCIENT_POWER ], + [ 21, MoveId.IMPRISON ], + [ 24, MoveId.COSMIC_POWER ], + [ 27, MoveId.EXTRASENSORY ], + [ 30, MoveId.EARTH_POWER ], + [ 33, MoveId.SELF_DESTRUCT ], + [ 38, MoveId.GUARD_SPLIT ], + [ 38, MoveId.POWER_SPLIT ], + [ 43, MoveId.SANDSTORM ], + [ 48, MoveId.EXPLOSION ], + ], + [SpeciesId.LILEEP]: [ + [ 1, MoveId.WRAP ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.CONSTRICT ], + [ 4, MoveId.ACID ], + [ 8, MoveId.CONFUSE_RAY ], + [ 12, MoveId.INGRAIN ], + [ 16, MoveId.ANCIENT_POWER ], + [ 20, MoveId.MEGA_DRAIN ], + [ 24, MoveId.BRINE ], + [ 28, MoveId.AMNESIA ], + [ 32, MoveId.GASTRO_ACID ], + [ 36, MoveId.GIGA_DRAIN ], + [ 41, MoveId.STOCKPILE ], + [ 41, MoveId.SPIT_UP ], + [ 41, MoveId.SWALLOW ], + [ 44, MoveId.ENERGY_BALL ], + ], + [SpeciesId.CRADILY]: [ + [ 1, MoveId.LEECH_SEED ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.CONSTRICT ], + [ 1, MoveId.ACID ], + [ 1, MoveId.CONFUSE_RAY ], + [ 12, MoveId.INGRAIN ], + [ 16, MoveId.ANCIENT_POWER ], + [ 20, MoveId.MEGA_DRAIN ], + [ 24, MoveId.BRINE ], + [ 28, MoveId.AMNESIA ], + [ 32, MoveId.GASTRO_ACID ], + [ 36, MoveId.GIGA_DRAIN ], + [ 43, MoveId.STOCKPILE ], + [ 43, MoveId.SPIT_UP ], + [ 43, MoveId.SWALLOW ], + [ 48, MoveId.ENERGY_BALL ], + ], + [SpeciesId.ANORITH]: [ + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.HARDEN ], + [ 4, MoveId.WATER_GUN ], + [ 8, MoveId.SMACK_DOWN ], + [ 12, MoveId.METAL_CLAW ], + [ 16, MoveId.ANCIENT_POWER ], + [ 20, MoveId.BUG_BITE ], + [ 24, MoveId.BRINE ], + [ 28, MoveId.SLASH ], + [ 32, MoveId.CRUSH_CLAW ], + [ 36, MoveId.ROCK_BLAST ], + [ 41, MoveId.PROTECT ], + [ 44, MoveId.X_SCISSOR ], + ], + [SpeciesId.ARMALDO]: [ + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.SMACK_DOWN ], + [ 12, MoveId.METAL_CLAW ], + [ 16, MoveId.ANCIENT_POWER ], + [ 20, MoveId.BUG_BITE ], + [ 24, MoveId.BRINE ], + [ 28, MoveId.SLASH ], + [ 32, MoveId.CRUSH_CLAW ], + [ 36, MoveId.ROCK_BLAST ], + [ 43, MoveId.PROTECT ], + [ 48, MoveId.X_SCISSOR ], + ], + [SpeciesId.FEEBAS]: [ + [ 1, MoveId.SPLASH ], + [ 15, MoveId.TACKLE ], + [ 25, MoveId.FLAIL ], + ], + [SpeciesId.MILOTIC]: [ + [ EVOLVE_MOVE, MoveId.WATER_PULSE ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.WATER_SPORT ], + [ 4, MoveId.DISARMING_VOICE ], + [ 8, MoveId.TWISTER ], + [ 12, MoveId.AQUA_RING ], + [ 16, MoveId.ATTRACT ], + [ 20, MoveId.LIFE_DEW ], + [ 24, MoveId.DRAGON_TAIL ], + [ 28, MoveId.RECOVER ], + [ 32, MoveId.AQUA_TAIL ], + [ 36, MoveId.SAFEGUARD ], + [ 40, MoveId.SURF ], + [ 44, MoveId.RAIN_DANCE ], + [ 48, MoveId.COIL ], + [ 52, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.CASTFORM]: [ + [ 1, MoveId.TACKLE ], + [ 10, MoveId.WATER_GUN ], + [ 10, MoveId.EMBER ], + [ 10, MoveId.POWDER_SNOW ], + [ 15, MoveId.HEADBUTT ], + [ 20, MoveId.RAIN_DANCE ], + [ 20, MoveId.SUNNY_DAY ], + [ 20, MoveId.HAIL ], + [ 25, MoveId.WEATHER_BALL ], + [ 35, MoveId.HYDRO_PUMP ], + [ 35, MoveId.FIRE_BLAST ], + [ 35, MoveId.BLIZZARD ], + [ 45, MoveId.HURRICANE ], + ], + [SpeciesId.KECLEON]: [ + [ 1, MoveId.THIEF ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.LICK ], + [ 1, MoveId.SCRATCH ], + [ 4, MoveId.BIND ], + [ 7, MoveId.SHADOW_SNEAK ], + [ 10, MoveId.FEINT ], + [ 13, MoveId.FURY_SWIPES ], + [ 16, MoveId.DISABLE ], + [ 18, MoveId.PSYBEAM ], + [ 21, MoveId.ANCIENT_POWER ], + [ 25, MoveId.SLASH ], + [ 30, MoveId.DETECT ], + [ 33, MoveId.SHADOW_CLAW ], + [ 38, MoveId.SCREECH ], + [ 42, MoveId.SUBSTITUTE ], + [ 46, MoveId.SUCKER_PUNCH ], + [ 50, MoveId.FOUL_PLAY ], + ], + [SpeciesId.SHUPPET]: [ + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.PURSUIT ], // Custom + [ 4, MoveId.SCREECH ], + [ 7, MoveId.NIGHT_SHADE ], + [ 10, MoveId.SPITE ], + [ 16, MoveId.WILL_O_WISP ], + [ 19, MoveId.SHADOW_SNEAK ], + [ 22, MoveId.HEX ], + [ 26, MoveId.CURSE ], + [ 30, MoveId.SHADOW_BALL ], + [ 34, MoveId.ROLE_PLAY ], + [ 38, MoveId.SUCKER_PUNCH ], + [ 42, MoveId.TRICK ], + [ 48, MoveId.PHANTOM_FORCE ], + ], + [SpeciesId.BANETTE]: [ + [ EVOLVE_MOVE, MoveId.KNOCK_OFF ], + [ 1, MoveId.ASTONISH ], // Previous Stage Move + [ 1, MoveId.PURSUIT ], // Previous Stage Move, Custom + [ 1, MoveId.SCREECH ], + [ 1, MoveId.NIGHT_SHADE ], + [ 1, MoveId.SPITE ], + [ 16, MoveId.WILL_O_WISP ], + [ 19, MoveId.SHADOW_SNEAK ], + [ 22, MoveId.HEX ], + [ 26, MoveId.CURSE ], + [ 30, MoveId.SHADOW_BALL ], + [ 34, MoveId.ROLE_PLAY ], + [ 40, MoveId.SUCKER_PUNCH ], + [ 46, MoveId.TRICK ], + [ 53, MoveId.PHANTOM_FORCE ], + ], + [SpeciesId.DUSKULL]: [ + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PURSUIT ], // Custom + [ 4, MoveId.DISABLE ], + [ 8, MoveId.SHADOW_SNEAK ], + [ 12, MoveId.CONFUSE_RAY ], + [ 16, MoveId.NIGHT_SHADE ], + [ 20, MoveId.PAYBACK ], + [ 24, MoveId.WILL_O_WISP ], + [ 28, MoveId.MEAN_LOOK ], + [ 32, MoveId.HEX ], + [ 36, MoveId.CURSE ], + [ 40, MoveId.SHADOW_BALL ], + [ 44, MoveId.FUTURE_SIGHT ], + ], + [SpeciesId.DUSCLOPS]: [ + [ EVOLVE_MOVE, MoveId.SHADOW_PUNCH ], + [ 1, MoveId.FIRE_PUNCH ], + [ 1, MoveId.ICE_PUNCH ], + [ 1, MoveId.THUNDER_PUNCH ], + [ 1, MoveId.GRAVITY ], + [ 1, MoveId.BIND ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PURSUIT ], // Previous Stage Move, Custom + [ 1, MoveId.DISABLE ], + [ 1, MoveId.SHADOW_SNEAK ], + [ 12, MoveId.CONFUSE_RAY ], + [ 16, MoveId.NIGHT_SHADE ], + [ 20, MoveId.PAYBACK ], + [ 24, MoveId.WILL_O_WISP ], + [ 28, MoveId.MEAN_LOOK ], + [ 32, MoveId.HEX ], + [ 36, MoveId.CURSE ], + [ 42, MoveId.SHADOW_BALL ], + [ 48, MoveId.FUTURE_SIGHT ], + ], + [SpeciesId.TROPIUS]: [ + [ 1, MoveId.LEAF_STORM ], + [ 1, MoveId.GUST ], + [ 1, MoveId.LEER ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.RAZOR_LEAF ], + [ 6, MoveId.SWEET_SCENT ], + [ 10, MoveId.STOMP ], + [ 16, MoveId.MAGICAL_LEAF ], + [ 21, MoveId.WHIRLWIND ], + [ 30, MoveId.WIDE_GUARD ], + [ 36, MoveId.AIR_SLASH ], + [ 41, MoveId.BODY_SLAM ], + [ 46, MoveId.OUTRAGE ], + [ 50, MoveId.SYNTHESIS ], + [ 56, MoveId.SOLAR_BEAM ], + ], + [SpeciesId.CHIMECHO]: [ + [ 1, MoveId.HEALING_WISH ], + [ 1, MoveId.LAST_RESORT ], // Previous Stage Move + [ 1, MoveId.ENTRAINMENT ], // Previous Stage Move + [ 1, MoveId.WRAP ], + [ 1, MoveId.PSYWAVE ], // Previous Stage Move, Custom + [ 1, MoveId.GROWL ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.SYNCHRONOISE ], + [ 13, MoveId.YAWN ], + [ 16, MoveId.STORED_POWER ], + [ 19, MoveId.TAKE_DOWN ], + [ 22, MoveId.EXTRASENSORY ], + [ 27, MoveId.HEAL_BELL ], + [ 32, MoveId.UPROAR ], + [ 37, MoveId.SAFEGUARD ], + [ 42, MoveId.DOUBLE_EDGE ], + [ 47, MoveId.HEAL_PULSE ], + ], + [SpeciesId.ABSOL]: [ + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.LEER ], + [ 5, MoveId.DOUBLE_TEAM ], + [ 10, MoveId.KNOCK_OFF ], + [ 15, MoveId.DETECT ], + [ 20, MoveId.TAUNT ], + [ 25, MoveId.SLASH ], + [ 30, MoveId.NIGHT_SLASH ], + [ 35, MoveId.FOCUS_ENERGY ], + [ 40, MoveId.SUCKER_PUNCH ], + [ 45, MoveId.SWORDS_DANCE ], + [ 50, MoveId.FUTURE_SIGHT ], + [ 55, MoveId.PERISH_SONG ], + ], + [SpeciesId.WYNAUT]: [ + [ 1, MoveId.COUNTER ], + [ 1, MoveId.MIRROR_COAT ], + [ 1, MoveId.SAFEGUARD ], + [ 1, MoveId.DESTINY_BOND ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.ENCORE ], + [ 1, MoveId.AMNESIA ], + ], + [SpeciesId.SNORUNT]: [ + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.HEADBUTT ], + [ 5, MoveId.LEER ], + [ 10, MoveId.DOUBLE_TEAM ], + [ 15, MoveId.ICE_SHARD ], + [ 20, MoveId.PROTECT ], + [ 25, MoveId.ICY_WIND ], + [ 30, MoveId.FROST_BREATH ], + [ 35, MoveId.BITE ], + [ 40, MoveId.ICE_FANG ], + [ 45, MoveId.SNOWSCAPE ], + [ 50, MoveId.WEATHER_BALL ], + [ 55, MoveId.CRUNCH ], + [ 60, MoveId.BLIZZARD ], + ], + [SpeciesId.GLALIE]: [ + [ EVOLVE_MOVE, MoveId.FREEZE_DRY ], + [ 1, MoveId.SHEER_COLD ], + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.HEADBUTT ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.ICE_BALL ], + [ 15, MoveId.ICE_SHARD ], + [ 20, MoveId.PROTECT ], + [ 25, MoveId.ICY_WIND ], + [ 30, MoveId.FROST_BREATH ], + [ 35, MoveId.BITE ], + [ 40, MoveId.ICE_FANG ], + [ 47, MoveId.SNOWSCAPE ], + [ 54, MoveId.WEATHER_BALL ], + [ 61, MoveId.CRUNCH ], + [ 68, MoveId.BLIZZARD ], + ], + [SpeciesId.SPHEAL]: [ + [ 1, MoveId.ROLLOUT ], + [ 1, MoveId.DEFENSE_CURL ], + [ 4, MoveId.GROWL ], + [ 8, MoveId.WATER_GUN ], + [ 12, MoveId.POWDER_SNOW ], + [ 16, MoveId.REST ], + [ 20, MoveId.SNORE ], + [ 24, MoveId.BRINE ], + [ 28, MoveId.AURORA_BEAM ], + [ 33, MoveId.ENCORE ], + [ 36, MoveId.BODY_SLAM ], + [ 40, MoveId.SURF ], + [ 44, MoveId.BLIZZARD ], + [ 48, MoveId.HAIL ], + [ 52, MoveId.SHEER_COLD ], + ], + [SpeciesId.SEALEO]: [ + [ EVOLVE_MOVE, MoveId.SWAGGER ], + [ 1, MoveId.ROLLOUT ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 12, MoveId.POWDER_SNOW ], + [ 16, MoveId.REST ], + [ 20, MoveId.SNORE ], + [ 24, MoveId.BRINE ], + [ 28, MoveId.AURORA_BEAM ], + [ 35, MoveId.ENCORE ], + [ 40, MoveId.BODY_SLAM ], + [ 46, MoveId.SURF ], + [ 52, MoveId.BLIZZARD ], + [ 58, MoveId.HAIL ], + [ 64, MoveId.SHEER_COLD ], + ], + [SpeciesId.WALREIN]: [ + [ 1, MoveId.SWAGGER ], + [ 1, MoveId.CRUNCH ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.ROLLOUT ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 12, MoveId.POWDER_SNOW ], + [ 16, MoveId.REST ], + [ 20, MoveId.SNORE ], + [ 24, MoveId.BRINE ], + [ 28, MoveId.AURORA_BEAM ], + [ 35, MoveId.ENCORE ], + [ 40, MoveId.BODY_SLAM ], + [ 48, MoveId.SURF ], + [ 56, MoveId.BLIZZARD ], + [ 64, MoveId.HAIL ], + [ 72, MoveId.SHEER_COLD ], + ], + [SpeciesId.CLAMPERL]: [ + [ 1, MoveId.CLAMP ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.WHIRLPOOL ], + [ 1, MoveId.IRON_DEFENSE ], + [ 50, MoveId.SHELL_SMASH ], + ], + [SpeciesId.HUNTAIL]: [ + [ 1, MoveId.CLAMP ], // Previous Stage Move + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.IRON_DEFENSE ], + [ 1, MoveId.SHELL_SMASH ], + [ 1, MoveId.WHIRLPOOL ], + [ 1, MoveId.BITE ], + [ 5, MoveId.SCREECH ], + [ 9, MoveId.SCARY_FACE ], + [ 11, MoveId.RAIN_DANCE ], + [ 14, MoveId.WATER_PULSE ], + [ 16, MoveId.ICE_FANG ], + [ 19, MoveId.BRINE ], + [ 23, MoveId.SUCKER_PUNCH ], + [ 26, MoveId.DIVE ], + [ 29, MoveId.BATON_PASS ], + [ 34, MoveId.CRUNCH ], + [ 39, MoveId.AQUA_TAIL ], + [ 45, MoveId.COIL ], + [ 50, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.GOREBYSS]: [ + [ 1, MoveId.CLAMP ], // Previous Stage Move + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.IRON_DEFENSE ], + [ 1, MoveId.SHELL_SMASH ], + [ 1, MoveId.WHIRLPOOL ], + [ 1, MoveId.CONFUSION ], + [ 5, MoveId.RAIN_DANCE ], + [ 9, MoveId.AGILITY ], + [ 11, MoveId.DRAINING_KISS ], + [ 14, MoveId.WATER_PULSE ], + [ 16, MoveId.AMNESIA ], + [ 19, MoveId.AQUA_RING ], + [ 23, MoveId.SAFEGUARD ], + [ 26, MoveId.DIVE ], + [ 29, MoveId.BATON_PASS ], + [ 34, MoveId.PSYCHIC ], + [ 39, MoveId.AQUA_TAIL ], + [ 45, MoveId.COIL ], + [ 50, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.RELICANTH]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 5, MoveId.WATER_GUN ], + [ 10, MoveId.ANCIENT_POWER ], + [ 15, MoveId.YAWN ], + [ 20, MoveId.DIVE ], + [ 25, MoveId.TAKE_DOWN ], + [ 30, MoveId.AQUA_TAIL ], + [ 35, MoveId.REST ], + [ 40, MoveId.FLAIL ], + [ 45, MoveId.HYDRO_PUMP ], + [ 50, MoveId.DOUBLE_EDGE ], + [ 55, MoveId.HEAD_SMASH ], + ], + [SpeciesId.LUVDISC]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.CHARM ], + [ 4, MoveId.WATER_GUN ], + [ 7, MoveId.AGILITY ], + [ 13, MoveId.WISH ], + [ 17, MoveId.WATER_PULSE ], + [ 20, MoveId.ATTRACT ], + [ 22, MoveId.DRAINING_KISS ], + [ 26, MoveId.FLAIL ], + [ 31, MoveId.SWEET_KISS ], + [ 34, MoveId.TAKE_DOWN ], + [ 37, MoveId.BABY_DOLL_EYES ], + [ 40, MoveId.AQUA_RING ], + [ 42, MoveId.SOAK ], + [ 46, MoveId.HYDRO_PUMP ], + [ 49, MoveId.SAFEGUARD ], + ], + [SpeciesId.BAGON]: [ + [ 1, MoveId.EMBER ], + [ 1, MoveId.LEER ], + [ 5, MoveId.BITE ], + [ 10, MoveId.DRAGON_BREATH ], + [ 15, MoveId.HEADBUTT ], + [ 20, MoveId.SCARY_FACE ], + [ 25, MoveId.CRUNCH ], + [ 31, MoveId.DRAGON_CLAW ], + [ 35, MoveId.ZEN_HEADBUTT ], + [ 40, MoveId.FOCUS_ENERGY ], + [ 45, MoveId.FLAMETHROWER ], + [ 50, MoveId.OUTRAGE ], + [ 55, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.SHELGON]: [ + [ EVOLVE_MOVE, MoveId.PROTECT ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.LEER ], + [ 1, MoveId.BITE ], + [ 1, MoveId.DRAGON_BREATH ], + [ 15, MoveId.HEADBUTT ], + [ 20, MoveId.SCARY_FACE ], + [ 25, MoveId.CRUNCH ], + [ 33, MoveId.DRAGON_CLAW ], + [ 39, MoveId.ZEN_HEADBUTT ], + [ 46, MoveId.FOCUS_ENERGY ], + [ 53, MoveId.FLAMETHROWER ], + [ 60, MoveId.OUTRAGE ], + [ 67, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.SALAMENCE]: [ + [ EVOLVE_MOVE, MoveId.FLY ], + [ RELEARN_MOVE, MoveId.OUTRAGE ], // Previous Stage Move + [ 1, MoveId.PROTECT ], + [ 1, MoveId.DRAGON_TAIL ], + [ 1, MoveId.DUAL_WINGBEAT ], + [ 1, MoveId.ROOST ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.LEER ], + [ 1, MoveId.BITE ], + [ 1, MoveId.DRAGON_BREATH ], + [ 15, MoveId.HEADBUTT ], + [ 20, MoveId.SCARY_FACE ], + [ 25, MoveId.CRUNCH ], + [ 33, MoveId.DRAGON_CLAW ], + [ 39, MoveId.ZEN_HEADBUTT ], + [ 46, MoveId.FOCUS_ENERGY ], + [ 55, MoveId.FLAMETHROWER ], + [ 73, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.BELDUM]: [ + [ 1, MoveId.TACKLE ], + ], + [SpeciesId.METANG]: [ + [ EVOLVE_MOVE, MoveId.CONFUSION ], + [ EVOLVE_MOVE, MoveId.METAL_CLAW ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.BULLET_PUNCH ], + [ 1, MoveId.HONE_CLAWS ], + [ 6, MoveId.ZEN_HEADBUTT ], + [ 12, MoveId.MAGNET_RISE ], + [ 18, MoveId.FLASH_CANNON ], + [ 26, MoveId.TAKE_DOWN ], + [ 34, MoveId.PSYCHIC ], + [ 42, MoveId.SCARY_FACE ], + [ 50, MoveId.METEOR_MASH ], + [ 58, MoveId.IRON_DEFENSE ], + [ 66, MoveId.AGILITY ], + [ 74, MoveId.HYPER_BEAM ], + ], + [SpeciesId.METAGROSS]: [ + [ EVOLVE_MOVE, MoveId.HAMMER_ARM ], + [ RELEARN_MOVE, MoveId.EXPLOSION ], + [ RELEARN_MOVE, MoveId.HONE_CLAWS ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.BULLET_PUNCH ], + [ 1, MoveId.TACKLE ], + [ 6, MoveId.ZEN_HEADBUTT ], + [ 12, MoveId.MAGNET_RISE ], + [ 16, MoveId.FLASH_CANNON ], + [ 26, MoveId.TAKE_DOWN ], + [ 34, MoveId.PSYCHIC ], + [ 42, MoveId.SCARY_FACE ], + [ 52, MoveId.METEOR_MASH ], + [ 62, MoveId.IRON_DEFENSE ], + [ 72, MoveId.AGILITY ], + [ 82, MoveId.HYPER_BEAM ], + ], + [SpeciesId.REGIROCK]: [ + [ 1, MoveId.CHARGE_BEAM ], + [ 1, MoveId.ROCK_THROW ], + [ 6, MoveId.BULLDOZE ], + [ 12, MoveId.ANCIENT_POWER ], + [ 18, MoveId.STOMP ], + [ 24, MoveId.ROCK_SLIDE ], + [ 30, MoveId.CURSE ], + [ 36, MoveId.IRON_DEFENSE ], + [ 42, MoveId.HAMMER_ARM ], + [ 48, MoveId.STONE_EDGE ], + [ 54, MoveId.SUPERPOWER ], + [ 60, MoveId.LOCK_ON ], + [ 66, MoveId.ZAP_CANNON ], + [ 72, MoveId.HYPER_BEAM ], + [ 78, MoveId.EXPLOSION ], + ], + [SpeciesId.REGICE]: [ + [ 1, MoveId.CHARGE_BEAM ], + [ 1, MoveId.ICY_WIND ], + [ 6, MoveId.BULLDOZE ], + [ 12, MoveId.ANCIENT_POWER ], + [ 18, MoveId.STOMP ], + [ 24, MoveId.ICE_BEAM ], + [ 30, MoveId.CURSE ], + [ 36, MoveId.AMNESIA ], + [ 42, MoveId.HAMMER_ARM ], + [ 48, MoveId.BLIZZARD ], + [ 54, MoveId.SUPERPOWER ], + [ 60, MoveId.LOCK_ON ], + [ 66, MoveId.ZAP_CANNON ], + [ 72, MoveId.HYPER_BEAM ], + [ 78, MoveId.EXPLOSION ], + ], + [SpeciesId.REGISTEEL]: [ + [ 1, MoveId.CHARGE_BEAM ], + [ 1, MoveId.METAL_CLAW ], + [ 6, MoveId.BULLDOZE ], + [ 12, MoveId.ANCIENT_POWER ], + [ 18, MoveId.STOMP ], + [ 24, MoveId.IRON_HEAD ], + [ 24, MoveId.FLASH_CANNON ], + [ 30, MoveId.CURSE ], + [ 36, MoveId.AMNESIA ], + [ 36, MoveId.IRON_DEFENSE ], + [ 42, MoveId.HAMMER_ARM ], + [ 48, MoveId.HEAVY_SLAM ], + [ 54, MoveId.SUPERPOWER ], + [ 60, MoveId.LOCK_ON ], + [ 66, MoveId.ZAP_CANNON ], + [ 72, MoveId.HYPER_BEAM ], + [ 78, MoveId.EXPLOSION ], + ], + [SpeciesId.LATIAS]: [ + [ 1, MoveId.STORED_POWER ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.PSYWAVE ], + [ 5, MoveId.HELPING_HAND ], + [ 10, MoveId.RECOVER ], + [ 15, MoveId.CONFUSION ], + [ 20, MoveId.TAILWIND ], + [ 25, MoveId.DRAGON_BREATH ], + [ 30, MoveId.WISH ], + [ 35, MoveId.MIST_BALL ], + [ 40, MoveId.ZEN_HEADBUTT ], + [ 45, MoveId.DRAGON_PULSE ], + [ 50, MoveId.HEAL_PULSE ], + [ 55, MoveId.REFLECT_TYPE ], + [ 60, MoveId.PSYCHIC ], + [ 65, MoveId.GUARD_SPLIT ], + [ 70, MoveId.HEALING_WISH ], + ], + [SpeciesId.LATIOS]: [ + [ 1, MoveId.STORED_POWER ], + [ 1, MoveId.DRAGON_DANCE ], + [ 1, MoveId.HEAL_BLOCK ], + [ 1, MoveId.PSYWAVE ], + [ 5, MoveId.HELPING_HAND ], + [ 10, MoveId.RECOVER ], + [ 15, MoveId.CONFUSION ], + [ 20, MoveId.TAILWIND ], + [ 25, MoveId.DRAGON_BREATH ], + [ 30, MoveId.ALLY_SWITCH ], + [ 35, MoveId.LUSTER_PURGE ], + [ 40, MoveId.ZEN_HEADBUTT ], + [ 45, MoveId.DRAGON_PULSE ], + [ 50, MoveId.HEAL_PULSE ], + [ 55, MoveId.SIMPLE_BEAM ], + [ 60, MoveId.PSYCHIC ], + [ 65, MoveId.POWER_SPLIT ], + [ 70, MoveId.MEMENTO ], + ], + [SpeciesId.KYOGRE]: [ + [ 1, MoveId.ORIGIN_PULSE ], + [ 1, MoveId.WATER_PULSE ], + [ 1, MoveId.ANCIENT_POWER ], + [ 1, MoveId.BODY_SLAM ], + [ 1, MoveId.SCARY_FACE ], + [ 9, MoveId.AQUA_TAIL ], + [ 18, MoveId.CALM_MIND ], + [ 27, MoveId.MUDDY_WATER ], + [ 36, MoveId.ICE_BEAM ], + [ 45, MoveId.SHEER_COLD ], + [ 54, MoveId.AQUA_RING ], + [ 72, MoveId.HYDRO_PUMP ], + [ 81, MoveId.DOUBLE_EDGE ], + [ 90, MoveId.WATER_SPOUT ], + ], + [SpeciesId.GROUDON]: [ + [ 1, MoveId.PRECIPICE_BLADES ], + [ 1, MoveId.MUD_SHOT ], + [ 1, MoveId.ANCIENT_POWER ], + [ 1, MoveId.LAVA_PLUME ], + [ 1, MoveId.SCARY_FACE ], + [ 9, MoveId.EARTH_POWER ], + [ 18, MoveId.BULK_UP ], + [ 27, MoveId.EARTHQUAKE ], + [ 36, MoveId.HAMMER_ARM ], + [ 45, MoveId.FISSURE ], + [ 54, MoveId.REST ], + [ 72, MoveId.FIRE_BLAST ], + [ 81, MoveId.SOLAR_BEAM ], + [ 90, MoveId.ERUPTION ], + ], + [SpeciesId.RAYQUAZA]: [ + [ 1, MoveId.DRAGON_ASCENT ], + [ 1, MoveId.TWISTER ], + [ 1, MoveId.ANCIENT_POWER ], + [ 1, MoveId.AIR_SLASH ], + [ 1, MoveId.SCARY_FACE ], + [ 9, MoveId.CRUNCH ], + [ 18, MoveId.DRAGON_DANCE ], + [ 27, MoveId.EXTREME_SPEED ], + [ 36, MoveId.DRAGON_PULSE ], + [ 45, MoveId.HYPER_VOICE ], + [ 54, MoveId.REST ], + [ 63, MoveId.FLY ], + [ 72, MoveId.HURRICANE ], + [ 81, MoveId.OUTRAGE ], + [ 90, MoveId.HYPER_BEAM ], + ], + [SpeciesId.JIRACHI]: [ + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.WISH ], + [ 7, MoveId.SWIFT ], + [ 21, MoveId.LIFE_DEW ], + [ 28, MoveId.ZEN_HEADBUTT ], + [ 35, MoveId.GRAVITY ], + [ 42, MoveId.PSYCHIC ], + [ 49, MoveId.METEOR_MASH ], + [ 56, MoveId.HEALING_WISH ], + [ 63, MoveId.REST ], + [ 70, MoveId.FUTURE_SIGHT ], + [ 77, MoveId.DOUBLE_EDGE ], + [ 84, MoveId.COSMIC_POWER ], + [ 91, MoveId.LAST_RESORT ], + [ 98, MoveId.DOOM_DESIRE ], + ], + [SpeciesId.DEOXYS]: [ + [ 1, MoveId.CONFUSION ], // Custom + [ 1, MoveId.LEER ], + [ 1, MoveId.WRAP ], + [ 7, MoveId.NIGHT_SHADE ], + [ 13, MoveId.TELEPORT ], + [ 19, MoveId.KNOCK_OFF ], + [ 25, MoveId.PSYSHOCK ], + [ 31, MoveId.PSYCHIC ], + [ 37, MoveId.GRAVITY ], + [ 43, MoveId.SKILL_SWAP ], + [ 49, MoveId.ZEN_HEADBUTT ], + [ 55, MoveId.COSMIC_POWER ], + [ 61, MoveId.RECOVER ], + [ 67, MoveId.PSYCHO_BOOST ], + [ 73, MoveId.HYPER_BEAM ], + ], + [SpeciesId.TURTWIG]: [ + [ 1, MoveId.TACKLE ], + [ 5, MoveId.WITHDRAW ], + [ 5, MoveId.LEAFAGE ], // Custom, moved from 10 to 5, BDSP + [ 9, MoveId.GROWTH ], // Fill empty moveslot, from BDSP level 6 + [ 13, MoveId.RAZOR_LEAF ], + [ 17, MoveId.CURSE ], + [ 21, MoveId.BITE ], + [ 25, MoveId.MEGA_DRAIN ], + [ 29, MoveId.LEECH_SEED ], + [ 33, MoveId.SYNTHESIS ], + [ 37, MoveId.CRUNCH ], + [ 41, MoveId.GIGA_DRAIN ], + [ 45, MoveId.LEAF_STORM ], + ], + [SpeciesId.GROTLE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.LEAFAGE ], + [ 1, MoveId.GROWTH ], // Previous Stage Move + [ 13, MoveId.RAZOR_LEAF ], + [ 17, MoveId.CURSE ], + [ 22, MoveId.BITE ], + [ 27, MoveId.MEGA_DRAIN ], + [ 32, MoveId.LEECH_SEED ], + [ 37, MoveId.SYNTHESIS ], + [ 42, MoveId.CRUNCH ], + [ 47, MoveId.GIGA_DRAIN ], + [ 52, MoveId.LEAF_STORM ], + ], + [SpeciesId.TORTERRA]: [ + [ EVOLVE_MOVE, MoveId.EARTHQUAKE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.LEAFAGE ], + [ 1, MoveId.GROWTH ], // Previous Stage Move + [ 1, MoveId.RAZOR_LEAF ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.WOOD_HAMMER ], + [ 17, MoveId.CURSE ], + [ 22, MoveId.BITE ], + [ 27, MoveId.MEGA_DRAIN ], + [ 33, MoveId.LEECH_SEED ], + [ 39, MoveId.SYNTHESIS ], + [ 45, MoveId.CRUNCH ], + [ 51, MoveId.GIGA_DRAIN ], + [ 57, MoveId.LEAF_STORM ], + [ 63, MoveId.HEADLONG_RUSH ], + ], + [SpeciesId.CHIMCHAR]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 5, MoveId.EMBER ], // Custom, moved from 7 to 5 + [ 9, MoveId.TAUNT ], + [ 15, MoveId.FURY_SWIPES ], + [ 17, MoveId.FLAME_WHEEL ], + [ 23, MoveId.NASTY_PLOT ], + [ 25, MoveId.TORMENT ], + [ 31, MoveId.FACADE ], + [ 33, MoveId.FIRE_SPIN ], + [ 39, MoveId.ACROBATICS ], + [ 41, MoveId.SLACK_OFF ], + [ 47, MoveId.FLAMETHROWER ], + ], + [SpeciesId.MONFERNO]: [ + [ EVOLVE_MOVE, MoveId.MACH_PUNCH ], + [ RELEARN_MOVE, MoveId.NASTY_PLOT ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.FACADE ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.FLAMETHROWER ], // Previous Stage Move + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 9, MoveId.TAUNT ], + [ 16, MoveId.FURY_SWIPES ], + [ 19, MoveId.FLAME_WHEEL ], + [ 26, MoveId.FEINT ], + [ 29, MoveId.TORMENT ], + [ 36, MoveId.CLOSE_COMBAT ], + [ 39, MoveId.FIRE_SPIN ], + [ 46, MoveId.ACROBATICS ], + [ 49, MoveId.SLACK_OFF ], + [ 56, MoveId.FLARE_BLITZ ], + ], + [SpeciesId.INFERNAPE]: [ + [ EVOLVE_MOVE, MoveId.CLOSE_COMBAT ], + [ RELEARN_MOVE, MoveId.TAUNT ], + [ RELEARN_MOVE, MoveId.NASTY_PLOT ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.FACADE ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.SLACK_OFF ], + [ RELEARN_MOVE, MoveId.FLAMETHROWER ], // Previous Stage Move + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.MACH_PUNCH ], + [ 16, MoveId.FURY_SWIPES ], + [ 19, MoveId.FLAME_WHEEL ], + [ 26, MoveId.FEINT ], + [ 29, MoveId.TORMENT ], + [ 42, MoveId.FIRE_SPIN ], + [ 47, MoveId.FLARE_BLITZ ], + [ 52, MoveId.ACROBATICS ], + [ 58, MoveId.CALM_MIND ], + [ 65, MoveId.RAGING_FURY ], + ], + [SpeciesId.PIPLUP]: [ + [ 1, MoveId.POUND ], + [ 4, MoveId.GROWL ], + [ 5, MoveId.WATER_GUN ], // Custom, moved from 8 to 5 + [ 11, MoveId.CHARM ], + [ 15, MoveId.PECK ], + [ 18, MoveId.BUBBLE_BEAM ], + [ 22, MoveId.SWAGGER ], + [ 25, MoveId.FURY_ATTACK ], + [ 29, MoveId.BRINE ], + [ 32, MoveId.WHIRLPOOL ], + [ 36, MoveId.MIST ], + [ 39, MoveId.DRILL_PECK ], + [ 43, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.PRINPLUP]: [ + [ EVOLVE_MOVE, MoveId.METAL_CLAW ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.CHARM ], // Previous Stage Move + [ 15, MoveId.PECK ], + [ 19, MoveId.BUBBLE_BEAM ], + [ 24, MoveId.SWAGGER ], + [ 28, MoveId.FURY_ATTACK ], + [ 33, MoveId.BRINE ], + [ 37, MoveId.WHIRLPOOL ], + [ 42, MoveId.MIST ], + [ 46, MoveId.DRILL_PECK ], + [ 50, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.EMPOLEON]: [ + [ EVOLVE_MOVE, MoveId.AQUA_JET ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.CHARM ], // Previous Stage Move + [ 1, MoveId.METAL_CLAW ], + [ 11, MoveId.SWORDS_DANCE ], + [ 15, MoveId.PECK ], + [ 19, MoveId.BUBBLE_BEAM ], + [ 24, MoveId.SWAGGER ], + [ 28, MoveId.FURY_ATTACK ], + [ 33, MoveId.BRINE ], + [ 39, MoveId.WHIRLPOOL ], + [ 46, MoveId.MIST ], + [ 52, MoveId.DRILL_PECK ], + [ 59, MoveId.HYDRO_PUMP ], + [ 66, MoveId.WAVE_CRASH ], + ], + [SpeciesId.STARLY]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 5, MoveId.QUICK_ATTACK ], + [ 9, MoveId.WING_ATTACK ], + [ 13, MoveId.DOUBLE_TEAM ], + [ 17, MoveId.ENDEAVOR ], + [ 21, MoveId.WHIRLWIND ], + [ 25, MoveId.AERIAL_ACE ], + [ 29, MoveId.TAKE_DOWN ], + [ 33, MoveId.AGILITY ], + [ 37, MoveId.BRAVE_BIRD ], + [ 41, MoveId.FINAL_GAMBIT ], + ], + [SpeciesId.STARAVIA]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.QUICK_ATTACK ], + [ 9, MoveId.WING_ATTACK ], + [ 13, MoveId.DOUBLE_TEAM ], + [ 18, MoveId.ENDEAVOR ], + [ 23, MoveId.WHIRLWIND ], + [ 28, MoveId.AERIAL_ACE ], + [ 33, MoveId.TAKE_DOWN ], + [ 38, MoveId.AGILITY ], + [ 43, MoveId.BRAVE_BIRD ], + [ 48, MoveId.FINAL_GAMBIT ], + ], + [SpeciesId.STARAPTOR]: [ + [ EVOLVE_MOVE, MoveId.CLOSE_COMBAT ], + [ 1, MoveId.WING_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.QUICK_ATTACK ], + [ 13, MoveId.DOUBLE_TEAM ], + [ 18, MoveId.ENDEAVOR ], + [ 23, MoveId.WHIRLWIND ], + [ 28, MoveId.AERIAL_ACE ], + [ 33, MoveId.TAKE_DOWN ], + [ 41, MoveId.AGILITY ], + [ 49, MoveId.BRAVE_BIRD ], + [ 57, MoveId.FINAL_GAMBIT ], + ], + [SpeciesId.BIDOOF]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 5, MoveId.DEFENSE_CURL ], + [ 9, MoveId.ROLLOUT ], + [ 13, MoveId.HEADBUTT ], + [ 17, MoveId.HYPER_FANG ], + [ 21, MoveId.YAWN ], + [ 25, MoveId.CRUNCH ], + [ 29, MoveId.TAKE_DOWN ], + [ 33, MoveId.SUPER_FANG ], + [ 37, MoveId.SWORDS_DANCE ], + [ 41, MoveId.AMNESIA ], + [ 45, MoveId.SUPERPOWER ], + [ 49, MoveId.CURSE ], + ], + [SpeciesId.BIBAREL]: [ + [ EVOLVE_MOVE, MoveId.WATER_GUN ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.AQUA_JET ], + [ 1, MoveId.ROTOTILLER ], + [ 5, MoveId.DEFENSE_CURL ], + [ 9, MoveId.ROLLOUT ], + [ 13, MoveId.HEADBUTT ], + [ 18, MoveId.HYPER_FANG ], + [ 23, MoveId.YAWN ], + [ 28, MoveId.CRUNCH ], + [ 33, MoveId.TAKE_DOWN ], + [ 38, MoveId.SUPER_FANG ], + [ 43, MoveId.SWORDS_DANCE ], + [ 48, MoveId.AMNESIA ], + [ 53, MoveId.SUPERPOWER ], + [ 58, MoveId.CURSE ], + ], + [SpeciesId.KRICKETOT]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.BIDE ], + [ 6, MoveId.STRUGGLE_BUG ], + [ 16, MoveId.BUG_BITE ], + ], + [SpeciesId.KRICKETUNE]: [ + [ EVOLVE_MOVE, MoveId.FURY_CUTTER ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.BIDE ], + [ 1, MoveId.STRUGGLE_BUG ], // Previous Stage Move + [ 1, MoveId.BUG_BITE ], // Previous Stage Move + [ 14, MoveId.ABSORB ], + [ 18, MoveId.SING ], + [ 22, MoveId.FOCUS_ENERGY ], + [ 26, MoveId.SLASH ], + [ 30, MoveId.X_SCISSOR ], + [ 34, MoveId.SCREECH ], + [ 36, MoveId.FELL_STINGER ], + [ 38, MoveId.TAUNT ], + [ 42, MoveId.NIGHT_SLASH ], + [ 44, MoveId.STICKY_WEB ], + [ 46, MoveId.BUG_BUZZ ], + [ 50, MoveId.PERISH_SONG ], + ], + [SpeciesId.SHINX]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 4, MoveId.THUNDER_SHOCK ], + [ 8, MoveId.CHARGE ], + [ 12, MoveId.BITE ], + [ 16, MoveId.SPARK ], + [ 20, MoveId.ROAR ], + [ 24, MoveId.VOLT_SWITCH ], + [ 28, MoveId.SCARY_FACE ], + [ 32, MoveId.THUNDER_WAVE ], + [ 36, MoveId.CRUNCH ], + [ 40, MoveId.DISCHARGE ], + [ 44, MoveId.SWAGGER ], + [ 48, MoveId.WILD_CHARGE ], + ], + [SpeciesId.LUXIO]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.CHARGE ], + [ 12, MoveId.BITE ], + [ 18, MoveId.SPARK ], + [ 24, MoveId.ROAR ], + [ 31, MoveId.VOLT_SWITCH ], + [ 36, MoveId.SCARY_FACE ], + [ 42, MoveId.THUNDER_WAVE ], + [ 48, MoveId.CRUNCH ], + [ 54, MoveId.DISCHARGE ], + [ 60, MoveId.SWAGGER ], + [ 68, MoveId.WILD_CHARGE ], + ], + [SpeciesId.LUXRAY]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.CHARGE ], + [ 1, MoveId.ELECTRIC_TERRAIN ], + [ 12, MoveId.BITE ], + [ 18, MoveId.SPARK ], + [ 24, MoveId.ROAR ], + [ 33, MoveId.VOLT_SWITCH ], + [ 40, MoveId.SCARY_FACE ], + [ 48, MoveId.THUNDER_WAVE ], + [ 56, MoveId.CRUNCH ], + [ 64, MoveId.DISCHARGE ], + [ 72, MoveId.SWAGGER ], + [ 80, MoveId.WILD_CHARGE ], + ], + [SpeciesId.BUDEW]: [ + [ 1, MoveId.ABSORB ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.WORRY_SEED ], + ], + [SpeciesId.ROSERADE]: [ + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.MEGA_DRAIN ], + [ 1, MoveId.LEECH_SEED ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.PETAL_DANCE ], + [ 1, MoveId.TOXIC ], + [ 1, MoveId.GIGA_DRAIN ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.SYNTHESIS ], + [ 1, MoveId.INGRAIN ], + [ 1, MoveId.AROMATHERAPY ], + [ 1, MoveId.MAGICAL_LEAF ], + [ 1, MoveId.WORRY_SEED ], + [ 1, MoveId.TOXIC_SPIKES ], + [ 1, MoveId.PETAL_BLIZZARD ], + [ 1, MoveId.GRASSY_TERRAIN ], + [ 1, MoveId.VENOM_DRENCH ], + ], + [SpeciesId.CRANIDOS]: [ + [ 1, MoveId.HEADBUTT ], + [ 1, MoveId.LEER ], + [ 6, MoveId.FOCUS_ENERGY ], + [ 10, MoveId.PURSUIT ], + [ 15, MoveId.TAKE_DOWN ], + [ 19, MoveId.SCARY_FACE ], + [ 24, MoveId.ASSURANCE ], + [ 28, MoveId.CHIP_AWAY ], + [ 33, MoveId.ANCIENT_POWER ], + [ 37, MoveId.ZEN_HEADBUTT ], + [ 42, MoveId.SCREECH ], + [ 46, MoveId.HEAD_SMASH ], + ], + [SpeciesId.RAMPARDOS]: [ + [ EVOLVE_MOVE, MoveId.ENDEAVOR ], + [ 1, MoveId.HEADBUTT ], + [ 1, MoveId.LEER ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.PURSUIT ], + [ 15, MoveId.TAKE_DOWN ], + [ 19, MoveId.SCARY_FACE ], + [ 24, MoveId.ASSURANCE ], + [ 28, MoveId.CHIP_AWAY ], + [ 36, MoveId.ANCIENT_POWER ], + [ 43, MoveId.ZEN_HEADBUTT ], + [ 51, MoveId.SCREECH ], + [ 58, MoveId.HEAD_SMASH ], + ], + [SpeciesId.SHIELDON]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.PROTECT ], + [ 6, MoveId.TAUNT ], + [ 10, MoveId.METAL_SOUND ], + [ 15, MoveId.TAKE_DOWN ], + [ 19, MoveId.IRON_DEFENSE ], + [ 24, MoveId.SWAGGER ], + [ 28, MoveId.ANCIENT_POWER ], + [ 33, MoveId.ENDURE ], + [ 37, MoveId.METAL_BURST ], + [ 42, MoveId.IRON_HEAD ], + [ 46, MoveId.HEAVY_SLAM ], + ], + [SpeciesId.BASTIODON]: [ + [ EVOLVE_MOVE, MoveId.BLOCK ], + [ RELEARN_MOVE, MoveId.WIDE_GUARD ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.TAUNT ], + [ 1, MoveId.METAL_SOUND ], + [ 15, MoveId.TAKE_DOWN ], + [ 19, MoveId.IRON_DEFENSE ], + [ 24, MoveId.SWAGGER ], + [ 28, MoveId.ANCIENT_POWER ], + [ 36, MoveId.ENDURE ], + [ 43, MoveId.METAL_BURST ], + [ 51, MoveId.IRON_HEAD ], + [ 58, MoveId.HEAVY_SLAM ], + ], + [SpeciesId.BURMY]: [ + [ 1, MoveId.PROTECT ], + [ 1, MoveId.STRUGGLE_BUG ], // Custom + [ 10, MoveId.TACKLE ], + [ 15, MoveId.BUG_BITE ], + [ 20, MoveId.STRING_SHOT ], + ], + [SpeciesId.WORMADAM]: [ + [ EVOLVE_MOVE, MoveId.QUIVER_DANCE ], + [ 1, MoveId.STRUGGLE_BUG ], // Previous Stage Move, Custom + [ 1, MoveId.TACKLE ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.SUCKER_PUNCH ], + [ 1, MoveId.BUG_BITE ], + [ 1, MoveId.PROTECT ], + [ 10, MoveId.TACKLE ], + [ 20, MoveId.STRING_SHOT ], + [ 23, MoveId.CONFUSION ], + [ 26, MoveId.RAZOR_LEAF ], + [ 29, MoveId.GROWTH ], + [ 32, MoveId.PSYBEAM ], + [ 35, MoveId.INFESTATION ], + [ 38, MoveId.FLAIL ], + [ 41, MoveId.ATTRACT ], + [ 44, MoveId.PSYCHIC ], + [ 47, MoveId.LEAF_STORM ], + [ 50, MoveId.BUG_BUZZ ], + ], + [SpeciesId.MOTHIM]: [ + [ EVOLVE_MOVE, MoveId.QUIVER_DANCE ], + [ 1, MoveId.STRUGGLE_BUG ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.BUG_BITE ], + [ 10, MoveId.PROTECT ], + [ 15, MoveId.BUG_BITE ], + [ 20, MoveId.STRING_SHOT ], + [ 23, MoveId.CONFUSION ], + [ 26, MoveId.GUST ], + [ 29, MoveId.POISON_POWDER ], + [ 32, MoveId.PSYBEAM ], + [ 35, MoveId.ROOST ], + [ 38, MoveId.STRUGGLE_BUG ], + [ 41, MoveId.AIR_SLASH ], + [ 44, MoveId.PSYCHIC ], + [ 47, MoveId.LUNGE ], + [ 50, MoveId.BUG_BUZZ ], + ], + [SpeciesId.COMBEE]: [ + [ 1, MoveId.GUST ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.BUG_BITE ], + [ 1, MoveId.STRUGGLE_BUG ], + ], + [SpeciesId.VESPIQUEN]: [ + [ EVOLVE_MOVE, MoveId.SLASH ], + [ 1, MoveId.GUST ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.BUG_BITE ], + [ 1, MoveId.STRUGGLE_BUG ], + [ 4, MoveId.FURY_CUTTER ], + [ 8, MoveId.AROMATIC_MIST ], + [ 12, MoveId.FELL_STINGER ], + [ 16, MoveId.FURY_SWIPES ], + [ 20, MoveId.SWAGGER ], + [ 24, MoveId.ROOST ], + [ 28, MoveId.AIR_SLASH ], + [ 32, MoveId.POWER_GEM ], + [ 36, MoveId.TOXIC ], + [ 40, MoveId.ATTACK_ORDER ], + [ 40, MoveId.DEFEND_ORDER ], + [ 40, MoveId.HEAL_ORDER ], + [ 44, MoveId.DESTINY_BOND ], + ], + [SpeciesId.PACHIRISU]: [ + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.BIDE ], + [ 5, MoveId.QUICK_ATTACK ], + [ 9, MoveId.CHARM ], + [ 13, MoveId.SPARK ], + [ 17, MoveId.ENDURE ], + [ 19, MoveId.NUZZLE ], + [ 21, MoveId.SWIFT ], + [ 25, MoveId.ELECTRO_BALL ], + [ 29, MoveId.SWEET_KISS ], + [ 33, MoveId.THUNDER_WAVE ], + [ 37, MoveId.SUPER_FANG ], + [ 41, MoveId.DISCHARGE ], + [ 45, MoveId.LAST_RESORT ], + [ 49, MoveId.THUNDER ], + ], + [SpeciesId.BUIZEL]: [ + [ 1, MoveId.TACKLE ], + [ 4, MoveId.GROWL ], + [ 7, MoveId.SOAK ], + [ 11, MoveId.QUICK_ATTACK ], + [ 15, MoveId.WATER_GUN ], + [ 18, MoveId.BITE ], + [ 21, MoveId.SWIFT ], + [ 24, MoveId.AQUA_JET ], + [ 27, MoveId.DOUBLE_HIT ], + [ 31, MoveId.WHIRLPOOL ], + [ 35, MoveId.LIQUIDATION ], + [ 38, MoveId.AQUA_TAIL ], + [ 41, MoveId.AGILITY ], + [ 45, MoveId.HYDRO_PUMP ], + [ 49, MoveId.WAVE_CRASH ], + ], + [SpeciesId.FLOATZEL]: [ + [ 1, MoveId.TACKLE ], // Previous Stage Move + [ 1, MoveId.GROWL ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.CRUNCH ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.SOAK ], + [ 15, MoveId.WATER_GUN ], + [ 18, MoveId.BITE ], + [ 21, MoveId.SWIFT ], + [ 24, MoveId.AQUA_JET ], + [ 29, MoveId.DOUBLE_HIT ], + [ 35, MoveId.WHIRLPOOL ], + [ 41, MoveId.LIQUIDATION ], + [ 46, MoveId.AQUA_TAIL ], + [ 51, MoveId.AGILITY ], + [ 57, MoveId.HYDRO_PUMP ], + [ 62, MoveId.WAVE_CRASH ], + ], + [SpeciesId.CHERUBI]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.MORNING_SUN ], + [ 5, MoveId.LEAFAGE ], + [ 10, MoveId.GROWTH ], + [ 15, MoveId.HELPING_HAND ], + [ 20, MoveId.MAGICAL_LEAF ], + [ 26, MoveId.LEECH_SEED ], + [ 30, MoveId.TAKE_DOWN ], + [ 35, MoveId.PETAL_BLIZZARD ], + [ 40, MoveId.WORRY_SEED ], + [ 45, MoveId.SOLAR_BEAM ], + ], + [SpeciesId.CHERRIM]: [ + [ EVOLVE_MOVE, MoveId.SUNNY_DAY ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.MORNING_SUN ], + [ 1, MoveId.FLOWER_SHIELD ], + [ 1, MoveId.LEAFAGE ], + [ 15, MoveId.HELPING_HAND ], + [ 20, MoveId.MAGICAL_LEAF ], + [ 28, MoveId.LEECH_SEED ], + [ 34, MoveId.TAKE_DOWN ], + [ 41, MoveId.PETAL_BLIZZARD ], + [ 48, MoveId.WORRY_SEED ], + [ 55, MoveId.SOLAR_BEAM ], + [ 62, MoveId.PETAL_DANCE ], + ], + [SpeciesId.SHELLOS]: [ + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.MUD_SLAP ], + [ 5, MoveId.HARDEN ], + [ 10, MoveId.RECOVER ], + [ 15, MoveId.WATER_PULSE ], + [ 20, MoveId.ANCIENT_POWER ], + [ 25, MoveId.BODY_SLAM ], + [ 31, MoveId.MUDDY_WATER ], + [ 35, MoveId.EARTH_POWER ], + [ 40, MoveId.RAIN_DANCE ], + [ 45, MoveId.MEMENTO ], + ], + [SpeciesId.GASTRODON]: [ + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.RECOVER ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.MUD_SPORT ], + [ 15, MoveId.WATER_PULSE ], + [ 20, MoveId.ANCIENT_POWER ], + [ 25, MoveId.BODY_SLAM ], + [ 33, MoveId.MUDDY_WATER ], + [ 39, MoveId.EARTH_POWER ], + [ 46, MoveId.RAIN_DANCE ], + [ 53, MoveId.MEMENTO ], + ], + [SpeciesId.AMBIPOM]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.ASTONISH ], + [ 11, MoveId.BATON_PASS ], + [ 15, MoveId.TICKLE ], + [ 18, MoveId.FURY_SWIPES ], + [ 22, MoveId.SWIFT ], + [ 25, MoveId.SCREECH ], + [ 29, MoveId.AGILITY ], + [ 32, MoveId.DOUBLE_HIT ], + [ 36, MoveId.FLING ], + [ 39, MoveId.NASTY_PLOT ], + [ 43, MoveId.LAST_RESORT ], + ], + [SpeciesId.DRIFLOON]: [ + [ 1, MoveId.MINIMIZE ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.CONSTRICT ], + [ 4, MoveId.GUST ], + [ 8, MoveId.FOCUS_ENERGY ], + [ 12, MoveId.PAYBACK ], + [ 16, MoveId.HEX ], + [ 20, MoveId.SHADOW_BALL ], + [ 24, MoveId.STOCKPILE ], + [ 24, MoveId.SPIT_UP ], + [ 24, MoveId.SWALLOW ], + [ 29, MoveId.SELF_DESTRUCT ], + [ 32, MoveId.DESTINY_BOND ], + [ 36, MoveId.BATON_PASS ], + [ 40, MoveId.TAILWIND ], + [ 44, MoveId.EXPLOSION ], + ], + [SpeciesId.DRIFBLIM]: [ + [ EVOLVE_MOVE, MoveId.PHANTOM_FORCE ], + [ 1, MoveId.GUST ], + [ 1, MoveId.MINIMIZE ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.CONSTRICT ], + [ 1, MoveId.STRENGTH_SAP ], + [ 12, MoveId.PAYBACK ], + [ 16, MoveId.HEX ], + [ 20, MoveId.SHADOW_BALL ], + [ 24, MoveId.STOCKPILE ], + [ 24, MoveId.SPIT_UP ], + [ 24, MoveId.SWALLOW ], + [ 31, MoveId.SELF_DESTRUCT ], + [ 36, MoveId.DESTINY_BOND ], + [ 42, MoveId.BATON_PASS ], + [ 48, MoveId.TAILWIND ], + [ 54, MoveId.EXPLOSION ], + ], + [SpeciesId.BUNEARY]: [ + [ 1, MoveId.FRUSTRATION ], + [ 1, MoveId.POUND ], + [ 1, MoveId.SPLASH ], + [ 4, MoveId.DEFENSE_CURL ], + [ 8, MoveId.BABY_DOLL_EYES ], + [ 12, MoveId.AFTER_YOU ], + [ 16, MoveId.QUICK_ATTACK ], + [ 20, MoveId.DOUBLE_KICK ], + [ 24, MoveId.CHARM ], + [ 28, MoveId.BATON_PASS ], + [ 32, MoveId.HEADBUTT ], + [ 36, MoveId.AGILITY ], + [ 40, MoveId.ENTRAINMENT ], + [ 44, MoveId.FLATTER ], + [ 48, MoveId.BOUNCE ], + [ 52, MoveId.HEALING_WISH ], + ], + [SpeciesId.LOPUNNY]: [ + [ EVOLVE_MOVE, MoveId.RETURN ], + [ 1, MoveId.FRUSTRATION ], // Previous Stage Move + [ 1, MoveId.POUND ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.MIRROR_COAT ], + [ 1, MoveId.MAGIC_COAT ], + [ 1, MoveId.BABY_DOLL_EYES ], + [ 1, MoveId.ROTOTILLER ], + [ 12, MoveId.AFTER_YOU ], + [ 16, MoveId.QUICK_ATTACK ], + [ 20, MoveId.DOUBLE_KICK ], + [ 24, MoveId.CHARM ], + [ 28, MoveId.BATON_PASS ], + [ 32, MoveId.HEADBUTT ], + [ 36, MoveId.AGILITY ], + [ 40, MoveId.ENTRAINMENT ], + [ 44, MoveId.FLATTER ], + [ 48, MoveId.BOUNCE ], + [ 52, MoveId.HEALING_WISH ], + [ 56, MoveId.HIGH_JUMP_KICK ], + ], + [SpeciesId.MISMAGIUS]: [ // Previous Stage Relearn Learnset - [ RELEARN_MOVE, Moves.CONFUSION ], - [ RELEARN_MOVE, Moves.CONFUSE_RAY ], - [ RELEARN_MOVE, Moves.MEAN_LOOK ], - [ RELEARN_MOVE, Moves.HEX ], - [ RELEARN_MOVE, Moves.PSYBEAM ], - [ RELEARN_MOVE, Moves.PAIN_SPLIT ], - [ RELEARN_MOVE, Moves.PAYBACK ], - [ RELEARN_MOVE, Moves.SHADOW_BALL ], - [ RELEARN_MOVE, Moves.PERISH_SONG ], - [ 1, Moves.GROWL ], - [ 1, Moves.SPITE ], - [ 1, Moves.PSYWAVE ], - [ 1, Moves.LUCKY_CHANT ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.MAGICAL_LEAF ], - [ 1, Moves.POWER_GEM ], - [ 1, Moves.PHANTOM_FORCE ], - [ 1, Moves.MYSTICAL_FIRE ], - ], - [Species.HONCHKROW]: [ - [ 1, Moves.PECK ], // Previous Stage Move - [ 1, Moves.ASTONISH ], - [ 1, Moves.GUST ], // Previous Stage Move - [ 1, Moves.HAZE ], - [ 1, Moves.WING_ATTACK ], - [ 1, Moves.NIGHT_SHADE ], // Previous Stage Move - [ 1, Moves.ASSURANCE ], // Previous Stage Move - [ 1, Moves.TAUNT ], // Previous Stage Move - [ 1, Moves.MEAN_LOOK ], // Previous Stage Move - [ 1, Moves.SUCKER_PUNCH ], - [ 1, Moves.NIGHT_SLASH ], - [ 1, Moves.TORMENT ], // Previous Stage Move - [ 1, Moves.QUASH ], - [ 1, Moves.PURSUIT ], - [ 25, Moves.SWAGGER ], - [ 35, Moves.NASTY_PLOT ], - [ 45, Moves.FOUL_PLAY ], - [ 55, Moves.DARK_PULSE ], - [ 65, Moves.COMEUPPANCE ], - ], - [Species.GLAMEOW]: [ - [ 1, Moves.FAKE_OUT ], - [ 5, Moves.SCRATCH ], - [ 8, Moves.GROWL ], - [ 13, Moves.HYPNOSIS ], - [ 17, Moves.AERIAL_ACE ], - [ 20, Moves.FURY_SWIPES ], - [ 25, Moves.CHARM ], - [ 29, Moves.TAUNT ], - [ 32, Moves.RETALIATE ], - [ 37, Moves.SLASH ], - [ 41, Moves.SUCKER_PUNCH ], - [ 44, Moves.ATTRACT ], - [ 48, Moves.HONE_CLAWS ], - [ 50, Moves.PLAY_ROUGH ], - ], - [Species.PURUGLY]: [ - [ EVOLVE_MOVE, Moves.SWAGGER ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.PLAY_ROUGH ], - [ 1, Moves.SUCKER_PUNCH ], - [ 1, Moves.GROWL ], - [ 1, Moves.FAKE_OUT ], - [ 13, Moves.HYPNOSIS ], - [ 17, Moves.AERIAL_ACE ], - [ 20, Moves.FURY_SWIPES ], - [ 25, Moves.CHARM ], - [ 29, Moves.TAUNT ], - [ 32, Moves.RETALIATE ], - [ 37, Moves.SLASH ], - [ 45, Moves.BODY_SLAM ], - [ 52, Moves.ATTRACT ], - [ 60, Moves.HONE_CLAWS ], - ], - [Species.CHINGLING]: [ - [ 1, Moves.WRAP ], - [ 1, Moves.PSYWAVE ], // Custom - [ 4, Moves.GROWL ], - [ 7, Moves.ASTONISH ], - [ 10, Moves.CONFUSION ], - [ 13, Moves.YAWN ], - [ 16, Moves.LAST_RESORT ], - [ 19, Moves.ENTRAINMENT ], - [ 32, Moves.UPROAR ], - ], - [Species.STUNKY]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.POISON_GAS ], - [ 3, Moves.FEINT ], - [ 6, Moves.SMOKESCREEN ], - [ 9, Moves.ACID_SPRAY ], - [ 12, Moves.FURY_SWIPES ], - [ 15, Moves.FOCUS_ENERGY ], - [ 18, Moves.BITE ], - [ 21, Moves.VENOSHOCK ], - [ 24, Moves.SCREECH ], - [ 27, Moves.TOXIC ], - [ 30, Moves.SUCKER_PUNCH ], - [ 33, Moves.MEMENTO ], - [ 36, Moves.NIGHT_SLASH ], - [ 39, Moves.BELCH ], - [ 42, Moves.EXPLOSION ], - ], - [Species.SKUNTANK]: [ - [ EVOLVE_MOVE, Moves.FLAMETHROWER ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.FEINT ], - [ 1, Moves.ACID_SPRAY ], // Previous Stage Move - [ 12, Moves.FURY_SWIPES ], - [ 15, Moves.FOCUS_ENERGY ], - [ 18, Moves.BITE ], - [ 21, Moves.VENOSHOCK ], - [ 24, Moves.SCREECH ], - [ 27, Moves.TOXIC ], - [ 30, Moves.SUCKER_PUNCH ], - [ 33, Moves.MEMENTO ], - [ 38, Moves.NIGHT_SLASH ], - [ 43, Moves.BELCH ], - [ 48, Moves.EXPLOSION ], - ], - [Species.BRONZOR]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.CONFUSION ], - [ 4, Moves.CONFUSE_RAY ], - [ 8, Moves.PAYBACK ], - [ 12, Moves.IMPRISON ], - [ 16, Moves.GYRO_BALL ], - [ 20, Moves.HYPNOSIS ], - [ 24, Moves.SAFEGUARD ], - [ 28, Moves.EXTRASENSORY ], - [ 32, Moves.HEAVY_SLAM ], - [ 36, Moves.IRON_DEFENSE ], - [ 40, Moves.METAL_SOUND ], - [ 44, Moves.FUTURE_SIGHT ], - [ 45, Moves.HEAL_BLOCK ], - ], - [Species.BRONZONG]: [ - [ EVOLVE_MOVE, Moves.BLOCK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.SUNNY_DAY ], - [ 1, Moves.WEATHER_BALL ], - [ 1, Moves.PAYBACK ], - [ 12, Moves.IMPRISON ], - [ 16, Moves.GYRO_BALL ], - [ 20, Moves.HYPNOSIS ], - [ 24, Moves.SAFEGUARD ], - [ 28, Moves.EXTRASENSORY ], - [ 32, Moves.HEAVY_SLAM ], - [ 38, Moves.IRON_DEFENSE ], - [ 44, Moves.METAL_SOUND ], - [ 50, Moves.FUTURE_SIGHT ], - [ 52, Moves.HEAL_BLOCK ], - [ 56, Moves.RAIN_DANCE ], - ], - [Species.BONSLY]: [ - [ 1, Moves.FAKE_TEARS ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.TACKLE ], // Custom - [ 4, Moves.FLAIL ], - [ 8, Moves.ROCK_THROW ], - [ 12, Moves.BLOCK ], - [ 16, Moves.MIMIC ], - [ 20, Moves.ROCK_TOMB ], - [ 24, Moves.TEARFUL_LOOK ], - [ 28, Moves.SUCKER_PUNCH ], - [ 32, Moves.ROCK_SLIDE ], - [ 36, Moves.LOW_KICK ], - [ 40, Moves.COUNTER ], - [ 44, Moves.DOUBLE_EDGE ], - ], - [Species.MIME_JR]: [ - [ 1, Moves.POUND ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.BARRIER ], - [ 1, Moves.TICKLE ], //USUM - [ 4, Moves.BATON_PASS ], - [ 8, Moves.ENCORE ], - [ 12, Moves.CONFUSION ], - [ 16, Moves.MIMIC ], // Custom, swapped with Role Play to be closer to USUM - [ 20, Moves.PROTECT ], - [ 24, Moves.RECYCLE ], - [ 28, Moves.PSYBEAM ], - [ 32, Moves.ROLE_PLAY ], // Custom, swapped with Mimic - [ 36, Moves.LIGHT_SCREEN ], - [ 36, Moves.REFLECT ], - [ 36, Moves.SAFEGUARD ], - [ 40, Moves.SUCKER_PUNCH ], - [ 44, Moves.DAZZLING_GLEAM ], - [ 48, Moves.PSYCHIC ], - [ 52, Moves.TEETER_DANCE ], - ], - [Species.HAPPINY]: [ - [ 1, Moves.POUND ], - [ 1, Moves.COPYCAT ], - [ 4, Moves.DEFENSE_CURL ], - [ 8, Moves.SWEET_KISS ], - [ 12, Moves.DISARMING_VOICE ], - [ 16, Moves.COVET ], - [ 20, Moves.CHARM ], - ], - [Species.CHATOT]: [ - [ 1, Moves.PECK ], - [ 1, Moves.TAUNT ], - [ 1, Moves.HYPER_VOICE ], - [ 1, Moves.CHATTER ], - [ 1, Moves.CONFIDE ], - [ 5, Moves.GROWL ], - [ 9, Moves.MIRROR_MOVE ], - [ 13, Moves.SING ], - [ 17, Moves.FURY_ATTACK ], - [ 29, Moves.ROUND ], - [ 33, Moves.MIMIC ], - [ 37, Moves.ECHOED_VOICE ], - [ 41, Moves.ROOST ], - [ 45, Moves.UPROAR ], - [ 49, Moves.SYNCHRONOISE ], - [ 50, Moves.FEATHER_DANCE ], - ], - [Species.SPIRITOMB]: [ - [ 1, Moves.NIGHT_SHADE ], - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.PURSUIT ], - [ 5, Moves.SHADOW_SNEAK ], - [ 10, Moves.SPITE ], - [ 15, Moves.PAYBACK ], - [ 20, Moves.NASTY_PLOT ], - [ 25, Moves.HEX ], - [ 30, Moves.MEMENTO ], - [ 35, Moves.SUCKER_PUNCH ], - [ 40, Moves.CURSE ], - [ 45, Moves.SHADOW_BALL ], - [ 50, Moves.DARK_PULSE ], - [ 55, Moves.HYPNOSIS ], - [ 60, Moves.DREAM_EATER ], - ], - [Species.GIBLE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.SAND_TOMB ], - [ 6, Moves.SAND_ATTACK ], - [ 12, Moves.DRAGON_BREATH ], - [ 18, Moves.BULLDOZE ], - [ 25, Moves.BITE ], - [ 30, Moves.SLASH ], - [ 36, Moves.DRAGON_CLAW ], - [ 42, Moves.DIG ], - [ 48, Moves.SANDSTORM ], - [ 54, Moves.TAKE_DOWN ], - [ 60, Moves.DRAGON_RUSH ], - ], - [Species.GABITE]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.SAND_TOMB ], - [ 1, Moves.DUAL_CHOP ], - [ 18, Moves.BULLDOZE ], - [ 27, Moves.BITE ], - [ 34, Moves.SLASH ], - [ 42, Moves.DRAGON_CLAW ], - [ 50, Moves.DIG ], - [ 58, Moves.SANDSTORM ], - [ 66, Moves.TAKE_DOWN ], - [ 74, Moves.DRAGON_RUSH ], - ], - [Species.GARCHOMP]: [ - [ EVOLVE_MOVE, Moves.CRUNCH ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.SAND_TOMB ], - [ 1, Moves.DUAL_CHOP ], - [ 18, Moves.BULLDOZE ], - [ 27, Moves.BITE ], - [ 34, Moves.SLASH ], - [ 42, Moves.DRAGON_CLAW ], - [ 52, Moves.DIG ], - [ 62, Moves.SANDSTORM ], - [ 72, Moves.TAKE_DOWN ], - [ 82, Moves.DRAGON_RUSH ], - ], - [Species.MUNCHLAX]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LICK ], - [ 1, Moves.ODOR_SLEUTH ], - [ 4, Moves.DEFENSE_CURL ], - [ 8, Moves.RECYCLE ], - [ 12, Moves.COVET ], - [ 16, Moves.BITE ], - [ 20, Moves.STOCKPILE ], - [ 20, Moves.SWALLOW ], - [ 24, Moves.SCREECH ], - [ 28, Moves.BODY_SLAM ], - [ 32, Moves.FLING ], - [ 36, Moves.AMNESIA ], - [ 40, Moves.METRONOME ], - [ 44, Moves.FLAIL ], - [ 48, Moves.BELLY_DRUM ], - [ 52, Moves.LAST_RESORT ], - ], - [Species.RIOLU]: [ - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.ENDURE ], - [ 4, Moves.FEINT ], - [ 8, Moves.METAL_CLAW ], - [ 12, Moves.COUNTER ], - [ 16, Moves.WORK_UP ], - [ 20, Moves.ROCK_SMASH ], - [ 24, Moves.VACUUM_WAVE ], - [ 28, Moves.SCREECH ], - [ 32, Moves.QUICK_GUARD ], - [ 36, Moves.FORCE_PALM ], - [ 40, Moves.SWORDS_DANCE ], - [ 44, Moves.HELPING_HAND ], - [ 48, Moves.COPYCAT ], - [ 52, Moves.FINAL_GAMBIT ], - [ 56, Moves.REVERSAL ], - ], - [Species.LUCARIO]: [ - [ EVOLVE_MOVE, Moves.AURA_SPHERE ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.ENDURE ], // Previous Stage Move - [ 1, Moves.SCREECH ], - [ 1, Moves.REVERSAL ], - [ 1, Moves.DETECT ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.ROCK_SMASH ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.FEINT ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.VACUUM_WAVE ], - [ 1, Moves.FINAL_GAMBIT ], - [ 1, Moves.LIFE_DEW ], - [ 12, Moves.COUNTER ], - [ 16, Moves.WORK_UP ], - [ 20, Moves.FORCE_PALM ], - [ 24, Moves.CALM_MIND ], - [ 28, Moves.METAL_SOUND ], - [ 32, Moves.QUICK_GUARD ], - [ 36, Moves.BONE_RUSH ], - [ 40, Moves.SWORDS_DANCE ], - [ 44, Moves.HEAL_PULSE ], - [ 48, Moves.METEOR_MASH ], - [ 52, Moves.DRAGON_PULSE ], - [ 56, Moves.EXTREME_SPEED ], - [ 60, Moves.CLOSE_COMBAT ], - ], - [Species.HIPPOPOTAS]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 4, Moves.BITE ], - [ 8, Moves.YAWN ], - [ 12, Moves.SAND_TOMB ], - [ 16, Moves.DIG ], - [ 20, Moves.CRUNCH ], - [ 24, Moves.SANDSTORM ], - [ 28, Moves.TAKE_DOWN ], - [ 32, Moves.ROAR ], - [ 36, Moves.REST ], - [ 40, Moves.EARTHQUAKE ], - [ 44, Moves.DOUBLE_EDGE ], - [ 48, Moves.FISSURE ], - [ 52, Moves.SLACK_OFF ], - ], - [Species.HIPPOWDON]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.BITE ], - [ 1, Moves.YAWN ], - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.FIRE_FANG ], - [ 12, Moves.SAND_TOMB ], - [ 16, Moves.DIG ], - [ 20, Moves.CRUNCH ], - [ 24, Moves.SANDSTORM ], - [ 28, Moves.TAKE_DOWN ], - [ 32, Moves.ROAR ], - [ 38, Moves.REST ], - [ 44, Moves.EARTHQUAKE ], - [ 50, Moves.DOUBLE_EDGE ], - [ 56, Moves.FISSURE ], - [ 62, Moves.SLACK_OFF ], - ], - [Species.SKORUPI]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.LEER ], - [ 3, Moves.HONE_CLAWS ], - [ 6, Moves.FELL_STINGER ], - [ 9, Moves.POISON_FANG ], - [ 12, Moves.BITE ], - [ 15, Moves.TOXIC_SPIKES ], - [ 18, Moves.BUG_BITE ], - [ 21, Moves.VENOSHOCK ], - [ 24, Moves.KNOCK_OFF ], - [ 27, Moves.SCARY_FACE ], - [ 30, Moves.PIN_MISSILE ], - [ 33, Moves.TOXIC ], - [ 36, Moves.NIGHT_SLASH ], - [ 39, Moves.CROSS_POISON ], - [ 42, Moves.X_SCISSOR ], - [ 45, Moves.ACUPRESSURE ], - [ 48, Moves.CRUNCH ], - ], - [Species.DRAPION]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.LEER ], - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.FIRE_FANG ], - [ 1, Moves.HONE_CLAWS ], - [ 1, Moves.FELL_STINGER ], - [ 9, Moves.POISON_FANG ], - [ 12, Moves.BITE ], - [ 15, Moves.TOXIC_SPIKES ], - [ 18, Moves.BUG_BITE ], - [ 21, Moves.VENOSHOCK ], - [ 24, Moves.KNOCK_OFF ], - [ 27, Moves.SCARY_FACE ], - [ 30, Moves.PIN_MISSILE ], - [ 33, Moves.TOXIC ], - [ 36, Moves.NIGHT_SLASH ], - [ 39, Moves.CROSS_POISON ], - [ 44, Moves.X_SCISSOR ], - [ 49, Moves.ACUPRESSURE ], - [ 54, Moves.CRUNCH ], - ], - [Species.CROAGUNK]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.MUD_SLAP ], - [ 4, Moves.ASTONISH ], - [ 8, Moves.TAUNT ], - [ 12, Moves.FLATTER ], - [ 16, Moves.LOW_KICK ], - [ 20, Moves.VENOSHOCK ], - [ 24, Moves.SUCKER_PUNCH ], - [ 28, Moves.SWAGGER ], - [ 32, Moves.POISON_JAB ], - [ 36, Moves.TOXIC ], - [ 40, Moves.NASTY_PLOT ], - [ 44, Moves.SLUDGE_BOMB ], - [ 48, Moves.BELCH ], - ], - [Species.TOXICROAK]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.TAUNT ], - [ 1, Moves.ASTONISH ], - [ 12, Moves.FLATTER ], - [ 16, Moves.LOW_KICK ], - [ 20, Moves.VENOSHOCK ], - [ 24, Moves.SUCKER_PUNCH ], - [ 28, Moves.SWAGGER ], - [ 32, Moves.POISON_JAB ], - [ 36, Moves.TOXIC ], - [ 42, Moves.NASTY_PLOT ], - [ 48, Moves.SLUDGE_BOMB ], - [ 54, Moves.BELCH ], - ], - [Species.CARNIVINE]: [ - [ 1, Moves.BIND ], - [ 1, Moves.GROWTH ], - [ 1, Moves.LEAFAGE ], // Custom - [ 7, Moves.BITE ], - [ 11, Moves.VINE_WHIP ], - [ 17, Moves.SWEET_SCENT ], - [ 21, Moves.INGRAIN ], - [ 27, Moves.GRASS_KNOT ], - [ 31, Moves.LEAF_TORNADO ], - [ 37, Moves.STOCKPILE ], - [ 37, Moves.SPIT_UP ], - [ 37, Moves.SWALLOW ], - [ 41, Moves.CRUNCH ], - [ 47, Moves.SEED_BOMB ], - [ 50, Moves.POWER_WHIP ], - ], - [Species.FINNEON]: [ - [ 1, Moves.POUND ], - [ 6, Moves.WATER_GUN ], - [ 13, Moves.RAIN_DANCE ], - [ 17, Moves.GUST ], - [ 22, Moves.WATER_PULSE ], - [ 26, Moves.ATTRACT ], - [ 29, Moves.SAFEGUARD ], - [ 33, Moves.AQUA_RING ], - [ 38, Moves.WHIRLPOOL ], - [ 42, Moves.U_TURN ], - [ 45, Moves.BOUNCE ], - [ 49, Moves.TAILWIND ], - [ 54, Moves.SOAK ], - ], - [Species.LUMINEON]: [ - [ 1, Moves.POUND ], - [ 1, Moves.GUST ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.SOAK ], - [ 13, Moves.RAIN_DANCE ], - [ 22, Moves.WATER_PULSE ], - [ 26, Moves.ATTRACT ], - [ 29, Moves.SAFEGUARD ], - [ 35, Moves.AQUA_RING ], - [ 42, Moves.WHIRLPOOL ], - [ 48, Moves.U_TURN ], - [ 53, Moves.BOUNCE ], - [ 59, Moves.TAILWIND ], - ], - [Species.MANTYKE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.WATER_GUN ], - [ 4, Moves.SUPERSONIC ], - [ 8, Moves.WING_ATTACK ], - [ 12, Moves.WATER_PULSE ], - [ 16, Moves.WIDE_GUARD ], - [ 20, Moves.AGILITY ], - [ 24, Moves.BUBBLE_BEAM ], - [ 28, Moves.HEADBUTT ], - [ 32, Moves.AIR_SLASH ], - [ 36, Moves.AQUA_RING ], - [ 40, Moves.BOUNCE ], - [ 44, Moves.TAKE_DOWN ], - [ 48, Moves.HYDRO_PUMP ], - ], - [Species.SNOVER]: [ - [ 1, Moves.LEER ], - [ 1, Moves.POWDER_SNOW ], - [ 5, Moves.LEAFAGE ], - [ 10, Moves.MIST ], - [ 15, Moves.ICE_SHARD ], - [ 20, Moves.RAZOR_LEAF ], - [ 25, Moves.ICY_WIND ], - [ 30, Moves.SWAGGER ], - [ 35, Moves.INGRAIN ], - [ 41, Moves.WOOD_HAMMER ], - [ 45, Moves.BLIZZARD ], - [ 50, Moves.SHEER_COLD ], - ], - [Species.ABOMASNOW]: [ - [ EVOLVE_MOVE, Moves.ICE_PUNCH ], - [ 1, Moves.LEER ], - [ 1, Moves.MIST ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.LEAFAGE ], - [ 1, Moves.AURORA_VEIL ], - [ 15, Moves.ICE_SHARD ], - [ 20, Moves.RAZOR_LEAF ], - [ 25, Moves.ICY_WIND ], - [ 30, Moves.SWAGGER ], - [ 35, Moves.INGRAIN ], - [ 43, Moves.WOOD_HAMMER ], - [ 49, Moves.BLIZZARD ], - [ 56, Moves.SHEER_COLD ], - ], - [Species.WEAVILE]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.AGILITY ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.SLASH ], - [ 1, Moves.BEAT_UP ], - [ 1, Moves.TAUNT ], - [ 1, Moves.ASSURANCE ], - [ 1, Moves.ICE_SHARD ], - [ 1, Moves.EMBARGO ], - [ 18, Moves.METAL_CLAW ], - [ 24, Moves.ICY_WIND ], - [ 30, Moves.FURY_SWIPES ], - [ 36, Moves.HONE_CLAWS ], - [ 42, Moves.FLING ], - [ 48, Moves.NASTY_PLOT ], - [ 54, Moves.SCREECH ], - [ 60, Moves.NIGHT_SLASH ], - [ 66, Moves.DARK_PULSE ], - ], - [Species.MAGNEZONE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.BARRIER ], - [ 1, Moves.TRI_ATTACK ], - [ 1, Moves.MIRROR_COAT ], - [ 1, Moves.MAGNETIC_FLUX ], - [ 1, Moves.ELECTRIC_TERRAIN ], - [ 12, Moves.ELECTRO_BALL ], - [ 16, Moves.GYRO_BALL ], - [ 20, Moves.SPARK ], - [ 24, Moves.SCREECH ], - [ 28, Moves.MAGNET_RISE ], - [ 34, Moves.FLASH_CANNON ], - [ 40, Moves.DISCHARGE ], - [ 46, Moves.METAL_SOUND ], - [ 52, Moves.LIGHT_SCREEN ], - [ 58, Moves.LOCK_ON ], - [ 64, Moves.ZAP_CANNON ], - ], - [Species.LICKILICKY]: [ - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.LICK ], - [ 1, Moves.TACKLE ], // Previous Stage Move, Custom - [ 1, Moves.ROLLOUT ], - [ 1, Moves.WRING_OUT ], - [ 6, Moves.REST ], - [ 18, Moves.WRAP ], - [ 24, Moves.DISABLE ], - [ 30, Moves.STOMP ], - [ 36, Moves.KNOCK_OFF ], - [ 42, Moves.SCREECH ], - [ 48, Moves.SLAM ], - [ 54, Moves.POWER_WHIP ], - [ 60, Moves.BELLY_DRUM ], - ], - [Species.RHYPERIOR]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.HAMMER_ARM ], - [ 1, Moves.SMACK_DOWN ], - [ 1, Moves.BULLDOZE ], - [ 15, Moves.HORN_ATTACK ], - [ 20, Moves.SCARY_FACE ], - [ 25, Moves.STOMP ], - [ 30, Moves.ROCK_BLAST ], - [ 35, Moves.DRILL_RUN ], - [ 40, Moves.TAKE_DOWN ], - [ 47, Moves.EARTHQUAKE ], - [ 54, Moves.STONE_EDGE ], - [ 61, Moves.MEGAHORN ], - [ 68, Moves.HORN_DRILL ], - [ 75, Moves.ROCK_WRECKER ], - ], - [Species.TANGROWTH]: [ - [ 1, Moves.BIND ], - [ 1, Moves.ABSORB ], - [ 1, Moves.GROWTH ], - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.BLOCK ], - [ 1, Moves.CONSTRICT ], - [ 12, Moves.MEGA_DRAIN ], - [ 16, Moves.VINE_WHIP ], - [ 20, Moves.POISON_POWDER ], - [ 24, Moves.DOUBLE_HIT ], - [ 28, Moves.KNOCK_OFF ], - [ 32, Moves.GIGA_DRAIN ], - [ 34, Moves.ANCIENT_POWER ], - [ 36, Moves.SLEEP_POWDER ], - [ 40, Moves.SLAM ], - [ 44, Moves.TICKLE ], - [ 48, Moves.POWER_WHIP ], - [ 52, Moves.INGRAIN ], - [ 56, Moves.GRASSY_TERRAIN ], - ], - [Species.ELECTIVIRE]: [ - [ 1, Moves.LEER ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.CHARGE ], - [ 1, Moves.ION_DELUGE ], - [ 12, Moves.SWIFT ], - [ 16, Moves.SHOCK_WAVE ], - [ 20, Moves.THUNDER_WAVE ], - [ 24, Moves.SCREECH ], - [ 28, Moves.THUNDER_PUNCH ], - [ 34, Moves.DISCHARGE ], - [ 40, Moves.LOW_KICK ], - [ 46, Moves.THUNDERBOLT ], - [ 52, Moves.LIGHT_SCREEN ], - [ 58, Moves.THUNDER ], - [ 64, Moves.GIGA_IMPACT ], - ], - [Species.MAGMORTAR]: [ - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.SMOG ], - [ 12, Moves.CLEAR_SMOG ], - [ 16, Moves.FLAME_WHEEL ], - [ 20, Moves.CONFUSE_RAY ], - [ 24, Moves.SCARY_FACE ], - [ 28, Moves.FIRE_PUNCH ], - [ 34, Moves.LAVA_PLUME ], - [ 40, Moves.LOW_KICK ], - [ 46, Moves.FLAMETHROWER ], - [ 52, Moves.SUNNY_DAY ], - [ 58, Moves.FIRE_BLAST ], - [ 64, Moves.HYPER_BEAM ], - ], - [Species.TOGEKISS]: [ - [ EVOLVE_MOVE, Moves.AIR_SLASH ], - [ 1, Moves.POUND ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.GROWL ], - [ 1, Moves.METRONOME ], - [ 1, Moves.SKY_ATTACK ], - [ 1, Moves.TRI_ATTACK ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.SAFEGUARD ], - [ 1, Moves.BATON_PASS ], - [ 1, Moves.EXTREME_SPEED ], - [ 1, Moves.ANCIENT_POWER ], - [ 1, Moves.FOLLOW_ME ], - [ 1, Moves.WISH ], - [ 1, Moves.YAWN ], - [ 1, Moves.LAST_RESORT ], - [ 1, Moves.AURA_SPHERE ], - [ 1, Moves.AFTER_YOU ], - [ 1, Moves.FAIRY_WIND ], - [ 1, Moves.LIFE_DEW ], - ], - [Species.YANMEGA]: [ - [ RELEARN_MOVE, Moves.HYPNOSIS ], - [ 1, Moves.TACKLE ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.AIR_CUTTER ], // Previous Stage Move - [ 1, Moves.NIGHT_SLASH ], - [ 1, Moves.WING_ATTACK ], // Previous Stage Move - [ 1, Moves.AIR_SLASH ], - [ 1, Moves.BUG_BUZZ ], - [ 14, Moves.QUICK_ATTACK ], - [ 17, Moves.DETECT ], - [ 22, Moves.SUPERSONIC ], - [ 27, Moves.UPROAR ], - [ 30, Moves.BUG_BITE ], - [ 33, Moves.ANCIENT_POWER ], - [ 38, Moves.FEINT ], - [ 43, Moves.SLASH ], - [ 46, Moves.SCREECH ], - [ 49, Moves.U_TURN ], - ], - [Species.LEAFEON]: [ - [ EVOLVE_MOVE, Moves.SAPPY_SEED ], - [ RELEARN_MOVE, Moves.VEEVEE_VOLLEY ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.BITE ], - [ 1, Moves.GROWL ], - [ 1, Moves.SWIFT ], - [ 1, Moves.CHARM ], - [ 1, Moves.BATON_PASS ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.COVET ], - [ 1, Moves.COPYCAT ], - [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.RAZOR_LEAF ], - [ 15, Moves.QUICK_ATTACK ], - [ 20, Moves.BABY_DOLL_EYES ], - [ 25, Moves.LEECH_SEED ], - [ 30, Moves.MAGICAL_LEAF ], - [ 35, Moves.SYNTHESIS ], - [ 40, Moves.SUNNY_DAY ], - [ 45, Moves.GIGA_DRAIN ], - [ 50, Moves.SWORDS_DANCE ], - [ 55, Moves.LEAF_BLADE ], - [ 60, Moves.LAST_RESORT ], - ], - [Species.GLACEON]: [ - [ EVOLVE_MOVE, Moves.FREEZY_FROST ], - [ RELEARN_MOVE, Moves.VEEVEE_VOLLEY ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.SWIFT ], - [ 1, Moves.CHARM ], - [ 1, Moves.BATON_PASS ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.COVET ], - [ 1, Moves.COPYCAT ], - [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.ICY_WIND ], - [ 15, Moves.QUICK_ATTACK ], - [ 20, Moves.BABY_DOLL_EYES ], - [ 25, Moves.ICE_SHARD ], - [ 30, Moves.BITE ], - [ 35, Moves.ICE_FANG ], - [ 40, Moves.SNOWSCAPE ], - [ 45, Moves.FREEZE_DRY ], - [ 50, Moves.MIRROR_COAT ], - [ 55, Moves.BLIZZARD ], - [ 60, Moves.LAST_RESORT ], - ], - [Species.GLISCOR]: [ - [ 1, Moves.POISON_STING ], // Previous Stage Move - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.HARDEN ], - [ 1, Moves.POISON_TAIL ], // Previous Stage Move - [ 1, Moves.SLASH ], // Previous Stage Move - [ 1, Moves.POISON_JAB ], - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.FIRE_FANG ], - [ 13, Moves.QUICK_ATTACK ], - [ 16, Moves.FURY_CUTTER ], - [ 19, Moves.KNOCK_OFF ], - [ 22, Moves.ACROBATICS ], - [ 27, Moves.NIGHT_SLASH ], - [ 30, Moves.U_TURN ], - [ 35, Moves.SCREECH ], - [ 40, Moves.X_SCISSOR ], - [ 45, Moves.CRABHAMMER ], - [ 50, Moves.SWORDS_DANCE ], - ], - [Species.MAMOSWINE]: [ - [ EVOLVE_MOVE, Moves.DOUBLE_HIT ], - [ 1, Moves.TACKLE ], - [ 1, Moves.FLAIL ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.ODOR_SLEUTH ], - [ 1, Moves.ANCIENT_POWER ], - [ 1, Moves.ICE_FANG ], - [ 15, Moves.ICE_SHARD ], - [ 20, Moves.MIST ], - [ 25, Moves.ENDURE ], - [ 30, Moves.ICY_WIND ], - [ 37, Moves.AMNESIA ], - [ 44, Moves.TAKE_DOWN ], - [ 51, Moves.EARTHQUAKE ], - [ 58, Moves.BLIZZARD ], - [ 65, Moves.THRASH ], - ], - [Species.PORYGON_Z]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.CONVERSION ], - [ 1, Moves.RECYCLE ], - [ 1, Moves.MAGNET_RISE ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.TRICK_ROOM ], - [ 15, Moves.THUNDER_SHOCK ], - [ 20, Moves.PSYBEAM ], - [ 25, Moves.CONVERSION_2 ], - [ 30, Moves.AGILITY ], - [ 35, Moves.RECOVER ], - [ 40, Moves.DISCHARGE ], - [ 45, Moves.TRI_ATTACK ], - [ 50, Moves.MAGIC_COAT ], - [ 55, Moves.LOCK_ON ], - [ 60, Moves.ZAP_CANNON ], - [ 65, Moves.HYPER_BEAM ], - ], - [Species.GALLADE]: [ - [ EVOLVE_MOVE, Moves.SLASH ], - [ 1, Moves.LEER ], - [ 1, Moves.GROWL ], - [ 1, Moves.PSYBEAM ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.PSYCHIC ], - [ 1, Moves.HYPNOSIS ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.DREAM_EATER ], - [ 1, Moves.CHARM ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.FUTURE_SIGHT ], - [ 1, Moves.IMPRISON ], - [ 1, Moves.CALM_MIND ], - [ 1, Moves.LEAF_BLADE ], - [ 1, Moves.NIGHT_SLASH ], - [ 1, Moves.SACRED_SWORD ], - [ 1, Moves.DISARMING_VOICE ], - [ 1, Moves.DRAINING_KISS ], - [ 1, Moves.LIFE_DEW ], - [ 1, Moves.AQUA_CUTTER ], - [ 9, Moves.HELPING_HAND ], - [ 12, Moves.FEINT ], - [ 15, Moves.TELEPORT ], - [ 18, Moves.AERIAL_ACE ], - [ 23, Moves.FALSE_SWIPE ], - [ 28, Moves.PROTECT ], - [ 35, Moves.SWORDS_DANCE ], - [ 42, Moves.PSYCHO_CUT ], - [ 49, Moves.HEAL_PULSE ], - [ 56, Moves.WIDE_GUARD ], - [ 56, Moves.QUICK_GUARD ], - [ 63, Moves.CLOSE_COMBAT ], - ], - [Species.PROBOPASS]: [ - [ EVOLVE_MOVE, Moves.TRI_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], // Previous Stage Move - [ 1, Moves.IRON_DEFENSE ], - [ 1, Moves.BLOCK ], - [ 1, Moves.ROCK_THROW ], // Previous Stage Move - [ 1, Moves.GRAVITY ], - [ 1, Moves.MAGNET_RISE ], - [ 1, Moves.WIDE_GUARD ], - [ 1, Moves.MAGNETIC_FLUX ], - [ 13, Moves.THUNDER_WAVE ], - [ 16, Moves.REST ], - [ 19, Moves.SPARK ], - [ 22, Moves.ROCK_SLIDE ], - [ 25, Moves.POWER_GEM ], - [ 28, Moves.ROCK_BLAST ], - [ 31, Moves.DISCHARGE ], - [ 34, Moves.SANDSTORM ], - [ 37, Moves.EARTH_POWER ], - [ 40, Moves.STONE_EDGE ], - [ 43, Moves.ZAP_CANNON ], - [ 43, Moves.LOCK_ON ], - ], - [Species.DUSKNOIR]: [ - [ 1, Moves.FIRE_PUNCH ], - [ 1, Moves.ICE_PUNCH ], - [ 1, Moves.THUNDER_PUNCH ], - [ 1, Moves.BIND ], - [ 1, Moves.LEER ], - [ 1, Moves.DISABLE ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.PURSUIT ], // Previous Stage Move, Custom - [ 1, Moves.SHADOW_PUNCH ], - [ 1, Moves.GRAVITY ], - [ 1, Moves.SHADOW_SNEAK ], - [ 12, Moves.CONFUSE_RAY ], - [ 16, Moves.NIGHT_SHADE ], - [ 20, Moves.PAYBACK ], - [ 24, Moves.WILL_O_WISP ], - [ 28, Moves.MEAN_LOOK ], - [ 32, Moves.HEX ], - [ 36, Moves.CURSE ], - [ 42, Moves.SHADOW_BALL ], - [ 48, Moves.FUTURE_SIGHT ], - [ 54, Moves.DESTINY_BOND ], - ], - [Species.FROSLASS]: [ - [ EVOLVE_MOVE, Moves.HEX ], - [ 1, Moves.HEADBUTT ], - [ 1, Moves.LEER ], - [ 1, Moves.BITE ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.PROTECT ], - [ 1, Moves.DESTINY_BOND ], - [ 1, Moves.WEATHER_BALL ], // Previous Stage Move - [ 1, Moves.CRUNCH ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.OMINOUS_WIND ], - [ 15, Moves.ICE_SHARD ], - [ 20, Moves.DRAINING_KISS ], - [ 25, Moves.ICY_WIND ], - [ 30, Moves.FROST_BREATH ], - [ 35, Moves.CONFUSE_RAY ], - [ 40, Moves.SNOWSCAPE ], - [ 47, Moves.WILL_O_WISP ], - [ 54, Moves.AURORA_VEIL ], - [ 61, Moves.SHADOW_BALL ], - [ 68, Moves.BLIZZARD ], - ], - [Species.ROTOM]: [ - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.ASTONISH ], - [ 5, Moves.THUNDER_SHOCK ], - [ 10, Moves.CONFUSE_RAY ], - [ 15, Moves.CHARGE ], - [ 20, Moves.ELECTRO_BALL ], - [ 25, Moves.THUNDER_WAVE ], - [ 30, Moves.SHOCK_WAVE ], - [ 35, Moves.HEX ], - [ 40, Moves.SUBSTITUTE ], - [ 45, Moves.TRICK ], - [ 50, Moves.DISCHARGE ], - [ 55, Moves.UPROAR ], - ], - [Species.UXIE]: [ - [ RELEARN_MOVE, Moves.TRI_ATTACK ], - [ RELEARN_MOVE, Moves.SNORE ], - [ RELEARN_MOVE, Moves.SAFEGUARD ], - [ RELEARN_MOVE, Moves.IRON_TAIL ], - [ RELEARN_MOVE, Moves.PSYCHO_CUT ], - [ RELEARN_MOVE, Moves.WONDER_ROOM ], - [ RELEARN_MOVE, Moves.MAGIC_ROOM ], - [ RELEARN_MOVE, Moves.ROUND ], - [ RELEARN_MOVE, Moves.ALLY_SWITCH ], - [ RELEARN_MOVE, Moves.EXPANDING_FORCE ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.REST ], - [ 7, Moves.SWIFT ], - [ 14, Moves.ENDURE ], - [ 21, Moves.PSYBEAM ], - [ 28, Moves.IMPRISON ], - [ 35, Moves.EXTRASENSORY ], - [ 42, Moves.AMNESIA ], - [ 49, Moves.PSYCHIC ], - [ 56, Moves.YAWN ], - [ 63, Moves.FUTURE_SIGHT ], - [ 70, Moves.FLAIL ], - [ 77, Moves.MEMENTO ], - [ 84, Moves.MYSTICAL_POWER ], - ], - [Species.MESPRIT]: [ - [ RELEARN_MOVE, Moves.TRI_ATTACK ], - [ RELEARN_MOVE, Moves.SNORE ], - [ RELEARN_MOVE, Moves.SAFEGUARD ], - [ RELEARN_MOVE, Moves.IRON_TAIL ], - [ RELEARN_MOVE, Moves.PSYCHO_CUT ], - [ RELEARN_MOVE, Moves.WONDER_ROOM ], - [ RELEARN_MOVE, Moves.MAGIC_ROOM ], - [ RELEARN_MOVE, Moves.ROUND ], - [ RELEARN_MOVE, Moves.ALLY_SWITCH ], - [ RELEARN_MOVE, Moves.EXPANDING_FORCE ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.REST ], - [ 7, Moves.SWIFT ], - [ 14, Moves.PROTECT ], - [ 21, Moves.PSYBEAM ], - [ 28, Moves.IMPRISON ], - [ 35, Moves.EXTRASENSORY ], - [ 42, Moves.CHARM ], - [ 49, Moves.PSYCHIC ], - [ 56, Moves.FLATTER ], - [ 63, Moves.FUTURE_SIGHT ], - [ 70, Moves.COPYCAT ], - [ 77, Moves.HEALING_WISH ], - [ 84, Moves.MYSTICAL_POWER ], - ], - [Species.AZELF]: [ - [ RELEARN_MOVE, Moves.SELF_DESTRUCT ], - [ RELEARN_MOVE, Moves.TRI_ATTACK ], - [ RELEARN_MOVE, Moves.SNORE ], - [ RELEARN_MOVE, Moves.SAFEGUARD ], - [ RELEARN_MOVE, Moves.IRON_TAIL ], - [ RELEARN_MOVE, Moves.PAYBACK ], - [ RELEARN_MOVE, Moves.ASSURANCE ], - [ RELEARN_MOVE, Moves.PSYCHO_CUT ], - [ RELEARN_MOVE, Moves.WONDER_ROOM ], - [ RELEARN_MOVE, Moves.MAGIC_ROOM ], - [ RELEARN_MOVE, Moves.ROUND ], - [ RELEARN_MOVE, Moves.ALLY_SWITCH ], - [ RELEARN_MOVE, Moves.EXPANDING_FORCE ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.REST ], - [ 7, Moves.SWIFT ], - [ 14, Moves.DETECT ], - [ 21, Moves.PSYBEAM ], - [ 28, Moves.IMPRISON ], - [ 35, Moves.EXTRASENSORY ], - [ 42, Moves.NASTY_PLOT ], - [ 49, Moves.PSYCHIC ], - [ 56, Moves.UPROAR ], - [ 63, Moves.FUTURE_SIGHT ], - [ 70, Moves.LAST_RESORT ], - [ 77, Moves.EXPLOSION ], - [ 84, Moves.MYSTICAL_POWER ], - ], - [Species.DIALGA]: [ - [ 1, Moves.SCARY_FACE ], - [ 1, Moves.METAL_CLAW ], - [ 8, Moves.DRAGON_BREATH ], - [ 16, Moves.ANCIENT_POWER ], - [ 24, Moves.SLASH ], - [ 32, Moves.FLASH_CANNON ], - [ 40, Moves.DRAGON_CLAW ], - [ 48, Moves.AURA_SPHERE ], - [ 56, Moves.POWER_GEM ], - [ 64, Moves.METAL_BURST ], - [ 72, Moves.EARTH_POWER ], - [ 80, Moves.IRON_TAIL ], - [ 88, Moves.ROAR_OF_TIME ], - ], - [Species.PALKIA]: [ - [ 1, Moves.SCARY_FACE ], - [ 1, Moves.WATER_PULSE ], - [ 8, Moves.DRAGON_BREATH ], - [ 16, Moves.ANCIENT_POWER ], - [ 24, Moves.SLASH ], - [ 32, Moves.AQUA_RING ], - [ 48, Moves.AURA_SPHERE ], - [ 56, Moves.POWER_GEM ], - [ 64, Moves.AQUA_TAIL ], - [ 72, Moves.EARTH_POWER ], - [ 80, Moves.SPACIAL_REND ], - [ 88, Moves.HYDRO_PUMP ], - ], - [Species.HEATRAN]: [ - [ 1, Moves.LEER ], - [ 1, Moves.FIRE_SPIN ], - [ 6, Moves.METAL_CLAW ], - [ 12, Moves.ANCIENT_POWER ], - [ 18, Moves.FIRE_FANG ], - [ 24, Moves.SCARY_FACE ], - [ 30, Moves.IRON_HEAD ], - [ 36, Moves.CRUNCH ], - [ 42, Moves.LAVA_PLUME ], - [ 48, Moves.METAL_SOUND ], - [ 54, Moves.EARTH_POWER ], - [ 60, Moves.HEAT_WAVE ], - [ 66, Moves.STONE_EDGE ], - [ 72, Moves.MAGMA_STORM ], - ], - [Species.REGIGIGAS]: [ - [ 1, Moves.POUND ], - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.DIZZY_PUNCH ], - [ 1, Moves.FORESIGHT ], - [ 6, Moves.PAYBACK ], - [ 12, Moves.REVENGE ], - [ 18, Moves.STOMP ], - [ 24, Moves.PROTECT ], - [ 30, Moves.KNOCK_OFF ], - [ 36, Moves.MEGA_PUNCH ], - [ 42, Moves.BODY_PRESS ], - [ 48, Moves.WIDE_GUARD ], - [ 54, Moves.ZEN_HEADBUTT ], - [ 60, Moves.HEAVY_SLAM ], - [ 66, Moves.HAMMER_ARM ], - [ 72, Moves.GIGA_IMPACT ], - [ 78, Moves.CRUSH_GRIP ], - ], - [Species.GIRATINA]: [ - [ 1, Moves.SHADOW_SNEAK ], - [ 1, Moves.DEFOG ], - [ 1, Moves.DRAGON_BREATH ], //USUM - [ 7, Moves.OMINOUS_WIND ], //USUM - [ 14, Moves.ANCIENT_POWER ], - [ 21, Moves.HEX ], - [ 28, Moves.SLASH ], - [ 35, Moves.SCARY_FACE ], - [ 42, Moves.SHADOW_CLAW ], - [ 49, Moves.PAIN_SPLIT ], - [ 56, Moves.AURA_SPHERE ], - [ 63, Moves.DRAGON_CLAW ], - [ 70, Moves.EARTH_POWER ], - [ 77, Moves.SHADOW_FORCE ], - [ 84, Moves.DESTINY_BOND ], - ], - [Species.CRESSELIA]: [ - [ 1, Moves.CONFUSION ], - [ 1, Moves.DOUBLE_TEAM ], - [ 6, Moves.MIST ], - [ 12, Moves.AURORA_BEAM ], - [ 18, Moves.PSYBEAM ], - [ 24, Moves.ALLY_SWITCH ], - [ 30, Moves.SLASH ], - [ 36, Moves.PSYCHO_CUT ], - [ 42, Moves.MOONLIGHT ], - [ 48, Moves.SAFEGUARD ], - [ 54, Moves.PSYCHIC ], - [ 60, Moves.MOONBLAST ], - [ 66, Moves.FUTURE_SIGHT ], - [ 72, Moves.LUNAR_DANCE ], - [ 72, Moves.LUNAR_BLESSING ], - ], - [Species.PHIONE]: [ - [ 1, Moves.WATER_GUN ], - [ 9, Moves.CHARM ], - [ 16, Moves.SUPERSONIC ], - [ 24, Moves.BUBBLE_BEAM ], - [ 31, Moves.ACID_ARMOR ], - [ 39, Moves.WHIRLPOOL ], - [ 46, Moves.WATER_PULSE ], - [ 54, Moves.AQUA_RING ], - [ 61, Moves.DIVE ], - [ 69, Moves.RAIN_DANCE ], - [ 75, Moves.TAKE_HEART ], - ], - [Species.MANAPHY]: [ - [ 1, Moves.HEART_SWAP ], - [ 1, Moves.TAIL_GLOW ], - [ 1, Moves.WATER_GUN ], - [ 9, Moves.CHARM ], - [ 16, Moves.SUPERSONIC ], - [ 24, Moves.BUBBLE_BEAM ], - [ 31, Moves.ACID_ARMOR ], - [ 39, Moves.WHIRLPOOL ], - [ 46, Moves.WATER_PULSE ], - [ 54, Moves.AQUA_RING ], - [ 61, Moves.DIVE ], - [ 69, Moves.RAIN_DANCE ], - [ 76, Moves.TAKE_HEART ], - ], - [Species.DARKRAI]: [ - [ 1, Moves.DISABLE ], - [ 1, Moves.OMINOUS_WIND ], - [ 1, Moves.PURSUIT ], // Custom - [ 11, Moves.QUICK_ATTACK ], - [ 20, Moves.HYPNOSIS ], - [ 29, Moves.SUCKER_PUNCH ], - [ 38, Moves.NIGHT_SHADE ], - [ 47, Moves.DOUBLE_TEAM ], - [ 57, Moves.HAZE ], - [ 66, Moves.DARK_VOID ], - [ 75, Moves.NASTY_PLOT ], - [ 84, Moves.DREAM_EATER ], - [ 93, Moves.DARK_PULSE ], - ], - [Species.SHAYMIN]: [ - [ 1, Moves.LEAFAGE ], // Custom - [ 1, Moves.GROWTH ], - [ 10, Moves.MAGICAL_LEAF ], - [ 19, Moves.LEECH_SEED ], - [ 28, Moves.SYNTHESIS ], - [ 37, Moves.SWEET_SCENT ], - [ 46, Moves.NATURAL_GIFT ], - [ 55, Moves.WORRY_SEED ], - [ 64, Moves.AROMATHERAPY ], - [ 73, Moves.ENERGY_BALL ], - [ 82, Moves.SWEET_KISS ], - [ 91, Moves.HEALING_WISH ], - [ 100, Moves.SEED_FLARE ], - ], - [Species.ARCEUS]: [ - [ 1, Moves.SEISMIC_TOSS ], - [ 1, Moves.COSMIC_POWER ], - [ 1, Moves.PUNISHMENT ], - [ 10, Moves.GRAVITY ], - [ 20, Moves.EARTH_POWER ], - [ 30, Moves.HYPER_VOICE ], - [ 40, Moves.EXTREME_SPEED ], - [ 50, Moves.HEALING_WISH ], - [ 60, Moves.FUTURE_SIGHT ], - [ 70, Moves.RECOVER ], - [ 80, Moves.HYPER_BEAM ], - [ 90, Moves.PERISH_SONG ], - [ 100, Moves.JUDGMENT ], - ], - [Species.VICTINI]: [ - [ 1, Moves.CONFUSION ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.FLAME_CHARGE ], - [ 1, Moves.V_CREATE ], - [ 7, Moves.WORK_UP ], - [ 14, Moves.INCINERATE ], - [ 21, Moves.STORED_POWER ], - [ 28, Moves.HEADBUTT ], - [ 35, Moves.ENDURE ], - [ 42, Moves.ZEN_HEADBUTT ], - [ 49, Moves.INFERNO ], - [ 56, Moves.REVERSAL ], - [ 63, Moves.SEARING_SHOT ], - [ 70, Moves.DOUBLE_EDGE ], - [ 77, Moves.FLARE_BLITZ ], - [ 84, Moves.OVERHEAT ], - [ 91, Moves.FINAL_GAMBIT ], - ], - [Species.SNIVY]: [ - [ 1, Moves.TACKLE ], - [ 4, Moves.LEER ], - [ 5, Moves.VINE_WHIP ], // Custom, moved from 7 to 5 - [ 10, Moves.WRAP ], - [ 13, Moves.GROWTH ], - [ 16, Moves.MAGICAL_LEAF ], - [ 19, Moves.LEECH_SEED ], - [ 22, Moves.MEGA_DRAIN ], - [ 25, Moves.SLAM ], - [ 28, Moves.LEAF_BLADE ], - [ 31, Moves.COIL ], - [ 34, Moves.GIGA_DRAIN ], - [ 37, Moves.GASTRO_ACID ], - [ 40, Moves.LEAF_STORM ], - ], - [Species.SERVINE]: [ - [ 1, Moves.VINE_WHIP ], - [ 1, Moves.TACKLE ], - [ 1, Moves.WRAP ], - [ 1, Moves.LEER ], - [ 13, Moves.GROWTH ], - [ 16, Moves.MAGICAL_LEAF ], - [ 20, Moves.LEECH_SEED ], - [ 24, Moves.MEGA_DRAIN ], - [ 28, Moves.SLAM ], - [ 32, Moves.LEAF_BLADE ], - [ 36, Moves.COIL ], - [ 40, Moves.GIGA_DRAIN ], - [ 44, Moves.GASTRO_ACID ], - [ 48, Moves.LEAF_STORM ], - ], - [Species.SERPERIOR]: [ - [ 1, Moves.VINE_WHIP ], - [ 1, Moves.TACKLE ], - [ 1, Moves.WRAP ], - [ 1, Moves.LEER ], - [ 13, Moves.GROWTH ], - [ 16, Moves.MAGICAL_LEAF ], - [ 20, Moves.LEECH_SEED ], - [ 24, Moves.MEGA_DRAIN ], - [ 28, Moves.SLAM ], - [ 32, Moves.LEAF_BLADE ], - [ 38, Moves.COIL ], - [ 44, Moves.GIGA_DRAIN ], - [ 50, Moves.GASTRO_ACID ], - [ 56, Moves.LEAF_STORM ], - ], - [Species.TEPIG]: [ - [ 1, Moves.TACKLE ], - [ 3, Moves.TAIL_WHIP ], - [ 5, Moves.EMBER ], // Custom, moved from 7 to 5 - [ 9, Moves.ENDURE ], - [ 13, Moves.DEFENSE_CURL ], - [ 15, Moves.FLAME_CHARGE ], - [ 19, Moves.SMOG ], - [ 21, Moves.ROLLOUT ], - [ 25, Moves.TAKE_DOWN ], - [ 27, Moves.HEAT_CRASH ], - [ 31, Moves.ASSURANCE ], - [ 33, Moves.FLAMETHROWER ], - [ 37, Moves.HEAD_SMASH ], - [ 39, Moves.ROAR ], - [ 43, Moves.FLARE_BLITZ ], - ], - [Species.PIGNITE]: [ - [ EVOLVE_MOVE, Moves.ARM_THRUST ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.EMBER ], - [ 1, Moves.ENDURE ], - [ 13, Moves.DEFENSE_CURL ], - [ 15, Moves.FLAME_CHARGE ], - [ 20, Moves.SMOG ], - [ 23, Moves.ROLLOUT ], - [ 28, Moves.TAKE_DOWN ], - [ 31, Moves.HEAT_CRASH ], - [ 36, Moves.ASSURANCE ], - [ 39, Moves.FLAMETHROWER ], - [ 44, Moves.HEAD_SMASH ], - [ 47, Moves.ROAR ], - [ 52, Moves.FLARE_BLITZ ], - ], - [Species.EMBOAR]: [ - [ RELEARN_MOVE, Moves.ENDURE ], - [ RELEARN_MOVE, Moves.HAMMER_ARM ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.EMBER ], - [ 1, Moves.ARM_THRUST ], - [ 13, Moves.DEFENSE_CURL ], - [ 15, Moves.FLAME_CHARGE ], - [ 20, Moves.SMOG ], - [ 23, Moves.ROLLOUT ], - [ 28, Moves.TAKE_DOWN ], - [ 31, Moves.HEAT_CRASH ], - [ 38, Moves.ASSURANCE ], - [ 43, Moves.FLAMETHROWER ], - [ 50, Moves.HEAD_SMASH ], - [ 55, Moves.ROAR ], - [ 62, Moves.FLARE_BLITZ ], - ], - [Species.OSHAWOTT]: [ - [ 1, Moves.TACKLE ], - [ 5, Moves.TAIL_WHIP ], - [ 5, Moves.WATER_GUN ], // Custom, moved from 7 to 5 - [ 11, Moves.SOAK ], - [ 13, Moves.FOCUS_ENERGY ], - [ 17, Moves.RAZOR_SHELL ], - [ 19, Moves.FURY_CUTTER ], - [ 23, Moves.WATER_PULSE ], - [ 25, Moves.AERIAL_ACE ], - [ 29, Moves.AQUA_JET ], - [ 31, Moves.ENCORE ], - [ 35, Moves.AQUA_TAIL ], - [ 37, Moves.RETALIATE ], - [ 41, Moves.SWORDS_DANCE ], - [ 43, Moves.HYDRO_PUMP ], - ], - [Species.DEWOTT]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.SOAK ], - [ 13, Moves.FOCUS_ENERGY ], - [ 18, Moves.RAZOR_SHELL ], - [ 21, Moves.FURY_CUTTER ], - [ 26, Moves.WATER_PULSE ], - [ 29, Moves.AERIAL_ACE ], - [ 34, Moves.AQUA_JET ], - [ 37, Moves.ENCORE ], - [ 42, Moves.AQUA_TAIL ], - [ 45, Moves.RETALIATE ], - [ 50, Moves.SWORDS_DANCE ], - [ 53, Moves.HYDRO_PUMP ], - ], - [Species.SAMUROTT]: [ - [ EVOLVE_MOVE, Moves.SLASH ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.MEGAHORN ], - [ 1, Moves.SOAK ], - [ 13, Moves.FOCUS_ENERGY ], - [ 18, Moves.RAZOR_SHELL ], - [ 21, Moves.FURY_CUTTER ], - [ 25, Moves.WATER_PULSE ], - [ 29, Moves.AERIAL_ACE ], - [ 34, Moves.AQUA_JET ], - [ 39, Moves.ENCORE ], - [ 46, Moves.AQUA_TAIL ], - [ 51, Moves.RETALIATE ], - [ 58, Moves.SWORDS_DANCE ], - [ 63, Moves.HYDRO_PUMP ], - ], - [Species.PATRAT]: [ - [ 1, Moves.TACKLE ], - [ 3, Moves.LEER ], - [ 6, Moves.BITE ], - [ 8, Moves.BIDE ], - [ 11, Moves.DETECT ], - [ 13, Moves.SAND_ATTACK ], - [ 16, Moves.CRUNCH ], - [ 18, Moves.HYPNOSIS ], - [ 21, Moves.SUPER_FANG ], - [ 23, Moves.AFTER_YOU ], - [ 26, Moves.FOCUS_ENERGY ], - [ 28, Moves.WORK_UP ], - [ 31, Moves.HYPER_FANG ], - [ 33, Moves.NASTY_PLOT ], - [ 36, Moves.MEAN_LOOK ], - [ 38, Moves.BATON_PASS ], - [ 41, Moves.SLAM ], - ], - [Species.WATCHOG]: [ - [ EVOLVE_MOVE, Moves.CONFUSE_RAY ], - [ RELEARN_MOVE, Moves.WORK_UP ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.BITE ], - [ 1, Moves.LOW_KICK ], - [ 1, Moves.ROTOTILLER ], - [ 8, Moves.BIDE ], - [ 11, Moves.DETECT ], - [ 13, Moves.SAND_ATTACK ], - [ 16, Moves.CRUNCH ], - [ 18, Moves.HYPNOSIS ], - [ 22, Moves.SUPER_FANG ], - [ 25, Moves.AFTER_YOU ], - [ 29, Moves.FOCUS_ENERGY ], - [ 32, Moves.PSYCH_UP ], - [ 36, Moves.HYPER_FANG ], - [ 39, Moves.NASTY_PLOT ], - [ 43, Moves.MEAN_LOOK ], - [ 46, Moves.BATON_PASS ], - [ 50, Moves.SLAM ], - ], - [Species.LILLIPUP]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 4, Moves.WORK_UP ], - [ 8, Moves.BITE ], - [ 12, Moves.RETALIATE ], - [ 17, Moves.BABY_DOLL_EYES ], - [ 20, Moves.PLAY_ROUGH ], - [ 24, Moves.CRUNCH ], - [ 28, Moves.TAKE_DOWN ], - [ 32, Moves.HELPING_HAND ], - [ 36, Moves.REVERSAL ], - [ 40, Moves.ROAR ], - [ 44, Moves.LAST_RESORT ], - [ 48, Moves.GIGA_IMPACT ], - ], - [Species.HERDIER]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.BITE ], - [ 1, Moves.WORK_UP ], - [ 12, Moves.RETALIATE ], - [ 19, Moves.BABY_DOLL_EYES ], - [ 24, Moves.PLAY_ROUGH ], - [ 30, Moves.CRUNCH ], - [ 36, Moves.TAKE_DOWN ], - [ 42, Moves.HELPING_HAND ], - [ 48, Moves.REVERSAL ], - [ 54, Moves.ROAR ], - [ 60, Moves.LAST_RESORT ], - [ 66, Moves.GIGA_IMPACT ], - ], - [Species.STOUTLAND]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.BITE ], - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.FIRE_FANG ], - [ 1, Moves.WORK_UP ], - [ 12, Moves.RETALIATE ], - [ 19, Moves.BABY_DOLL_EYES ], - [ 24, Moves.PLAY_ROUGH ], - [ 30, Moves.CRUNCH ], - [ 38, Moves.TAKE_DOWN ], - [ 46, Moves.HELPING_HAND ], - [ 54, Moves.REVERSAL ], - [ 62, Moves.ROAR ], - [ 70, Moves.LAST_RESORT ], - [ 78, Moves.GIGA_IMPACT ], - ], - [Species.PURRLOIN]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 4, Moves.SAND_ATTACK ], - [ 5, Moves.FAKE_OUT ], - [ 12, Moves.FURY_SWIPES ], - [ 16, Moves.TORMENT ], - [ 21, Moves.ASSURANCE ], - [ 24, Moves.HONE_CLAWS ], - [ 28, Moves.SUCKER_PUNCH ], - [ 32, Moves.NASTY_PLOT ], - [ 36, Moves.NIGHT_SLASH ], - [ 40, Moves.PLAY_ROUGH ], - ], - [Species.LIEPARD]: [ - [ 1, Moves.ASSIST ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.GROWL ], - [ 1, Moves.FAKE_OUT ], - [ 12, Moves.FURY_SWIPES ], - [ 16, Moves.TORMENT ], - [ 23, Moves.ASSURANCE ], - [ 28, Moves.HONE_CLAWS ], - [ 34, Moves.SUCKER_PUNCH ], - [ 40, Moves.NASTY_PLOT ], - [ 46, Moves.NIGHT_SLASH ], - [ 52, Moves.PLAY_ROUGH ], - ], - [Species.PANSAGE]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.PLAY_NICE ], - [ 4, Moves.LEER ], - [ 7, Moves.LICK ], - [ 10, Moves.VINE_WHIP ], - [ 13, Moves.FURY_SWIPES ], - [ 16, Moves.LEECH_SEED ], - [ 19, Moves.BITE ], - [ 22, Moves.SEED_BOMB ], - [ 25, Moves.TORMENT ], - [ 28, Moves.FLING ], - [ 31, Moves.ACROBATICS ], - [ 34, Moves.GRASS_KNOT ], - [ 37, Moves.RECYCLE ], - [ 40, Moves.NATURAL_GIFT ], - [ 43, Moves.CRUNCH ], - ], - [Species.SIMISAGE]: [ + [ RELEARN_MOVE, MoveId.CONFUSION ], + [ RELEARN_MOVE, MoveId.CONFUSE_RAY ], + [ RELEARN_MOVE, MoveId.MEAN_LOOK ], + [ RELEARN_MOVE, MoveId.HEX ], + [ RELEARN_MOVE, MoveId.PSYBEAM ], + [ RELEARN_MOVE, MoveId.PAIN_SPLIT ], + [ RELEARN_MOVE, MoveId.PAYBACK ], + [ RELEARN_MOVE, MoveId.SHADOW_BALL ], + [ RELEARN_MOVE, MoveId.PERISH_SONG ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.SPITE ], + [ 1, MoveId.PSYWAVE ], + [ 1, MoveId.LUCKY_CHANT ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.MAGICAL_LEAF ], + [ 1, MoveId.POWER_GEM ], + [ 1, MoveId.PHANTOM_FORCE ], + [ 1, MoveId.MYSTICAL_FIRE ], + ], + [SpeciesId.HONCHKROW]: [ + [ 1, MoveId.PECK ], // Previous Stage Move + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.GUST ], // Previous Stage Move + [ 1, MoveId.HAZE ], + [ 1, MoveId.WING_ATTACK ], + [ 1, MoveId.NIGHT_SHADE ], // Previous Stage Move + [ 1, MoveId.ASSURANCE ], // Previous Stage Move + [ 1, MoveId.TAUNT ], // Previous Stage Move + [ 1, MoveId.MEAN_LOOK ], // Previous Stage Move + [ 1, MoveId.SUCKER_PUNCH ], + [ 1, MoveId.NIGHT_SLASH ], + [ 1, MoveId.TORMENT ], // Previous Stage Move + [ 1, MoveId.QUASH ], + [ 1, MoveId.PURSUIT ], + [ 25, MoveId.SWAGGER ], + [ 35, MoveId.NASTY_PLOT ], + [ 45, MoveId.FOUL_PLAY ], + [ 55, MoveId.DARK_PULSE ], + [ 65, MoveId.COMEUPPANCE ], + ], + [SpeciesId.GLAMEOW]: [ + [ 1, MoveId.FAKE_OUT ], + [ 5, MoveId.SCRATCH ], + [ 8, MoveId.GROWL ], + [ 13, MoveId.HYPNOSIS ], + [ 17, MoveId.AERIAL_ACE ], + [ 20, MoveId.FURY_SWIPES ], + [ 25, MoveId.CHARM ], + [ 29, MoveId.TAUNT ], + [ 32, MoveId.RETALIATE ], + [ 37, MoveId.SLASH ], + [ 41, MoveId.SUCKER_PUNCH ], + [ 44, MoveId.ATTRACT ], + [ 48, MoveId.HONE_CLAWS ], + [ 50, MoveId.PLAY_ROUGH ], + ], + [SpeciesId.PURUGLY]: [ + [ EVOLVE_MOVE, MoveId.SWAGGER ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.PLAY_ROUGH ], + [ 1, MoveId.SUCKER_PUNCH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.FAKE_OUT ], + [ 13, MoveId.HYPNOSIS ], + [ 17, MoveId.AERIAL_ACE ], + [ 20, MoveId.FURY_SWIPES ], + [ 25, MoveId.CHARM ], + [ 29, MoveId.TAUNT ], + [ 32, MoveId.RETALIATE ], + [ 37, MoveId.SLASH ], + [ 45, MoveId.BODY_SLAM ], + [ 52, MoveId.ATTRACT ], + [ 60, MoveId.HONE_CLAWS ], + ], + [SpeciesId.CHINGLING]: [ + [ 1, MoveId.WRAP ], + [ 1, MoveId.PSYWAVE ], // Custom + [ 4, MoveId.GROWL ], + [ 7, MoveId.ASTONISH ], + [ 10, MoveId.CONFUSION ], + [ 13, MoveId.YAWN ], + [ 16, MoveId.LAST_RESORT ], + [ 19, MoveId.ENTRAINMENT ], + [ 32, MoveId.UPROAR ], + ], + [SpeciesId.STUNKY]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.POISON_GAS ], + [ 3, MoveId.FEINT ], + [ 6, MoveId.SMOKESCREEN ], + [ 9, MoveId.ACID_SPRAY ], + [ 12, MoveId.FURY_SWIPES ], + [ 15, MoveId.FOCUS_ENERGY ], + [ 18, MoveId.BITE ], + [ 21, MoveId.VENOSHOCK ], + [ 24, MoveId.SCREECH ], + [ 27, MoveId.TOXIC ], + [ 30, MoveId.SUCKER_PUNCH ], + [ 33, MoveId.MEMENTO ], + [ 36, MoveId.NIGHT_SLASH ], + [ 39, MoveId.BELCH ], + [ 42, MoveId.EXPLOSION ], + ], + [SpeciesId.SKUNTANK]: [ + [ EVOLVE_MOVE, MoveId.FLAMETHROWER ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.ACID_SPRAY ], // Previous Stage Move + [ 12, MoveId.FURY_SWIPES ], + [ 15, MoveId.FOCUS_ENERGY ], + [ 18, MoveId.BITE ], + [ 21, MoveId.VENOSHOCK ], + [ 24, MoveId.SCREECH ], + [ 27, MoveId.TOXIC ], + [ 30, MoveId.SUCKER_PUNCH ], + [ 33, MoveId.MEMENTO ], + [ 38, MoveId.NIGHT_SLASH ], + [ 43, MoveId.BELCH ], + [ 48, MoveId.EXPLOSION ], + ], + [SpeciesId.BRONZOR]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.CONFUSION ], + [ 4, MoveId.CONFUSE_RAY ], + [ 8, MoveId.PAYBACK ], + [ 12, MoveId.IMPRISON ], + [ 16, MoveId.GYRO_BALL ], + [ 20, MoveId.HYPNOSIS ], + [ 24, MoveId.SAFEGUARD ], + [ 28, MoveId.EXTRASENSORY ], + [ 32, MoveId.HEAVY_SLAM ], + [ 36, MoveId.IRON_DEFENSE ], + [ 40, MoveId.METAL_SOUND ], + [ 44, MoveId.FUTURE_SIGHT ], + [ 45, MoveId.HEAL_BLOCK ], + ], + [SpeciesId.BRONZONG]: [ + [ EVOLVE_MOVE, MoveId.BLOCK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.SUNNY_DAY ], + [ 1, MoveId.WEATHER_BALL ], + [ 1, MoveId.PAYBACK ], + [ 12, MoveId.IMPRISON ], + [ 16, MoveId.GYRO_BALL ], + [ 20, MoveId.HYPNOSIS ], + [ 24, MoveId.SAFEGUARD ], + [ 28, MoveId.EXTRASENSORY ], + [ 32, MoveId.HEAVY_SLAM ], + [ 38, MoveId.IRON_DEFENSE ], + [ 44, MoveId.METAL_SOUND ], + [ 50, MoveId.FUTURE_SIGHT ], + [ 52, MoveId.HEAL_BLOCK ], + [ 56, MoveId.RAIN_DANCE ], + ], + [SpeciesId.BONSLY]: [ + [ 1, MoveId.FAKE_TEARS ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.TACKLE ], // Custom + [ 4, MoveId.FLAIL ], + [ 8, MoveId.ROCK_THROW ], + [ 12, MoveId.BLOCK ], + [ 16, MoveId.MIMIC ], + [ 20, MoveId.ROCK_TOMB ], + [ 24, MoveId.TEARFUL_LOOK ], + [ 28, MoveId.SUCKER_PUNCH ], + [ 32, MoveId.ROCK_SLIDE ], + [ 36, MoveId.LOW_KICK ], + [ 40, MoveId.COUNTER ], + [ 44, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.MIME_JR]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.BARRIER ], + [ 1, MoveId.TICKLE ], //USUM + [ 4, MoveId.BATON_PASS ], + [ 8, MoveId.ENCORE ], + [ 12, MoveId.CONFUSION ], + [ 16, MoveId.MIMIC ], // Custom, swapped with Role Play to be closer to USUM + [ 20, MoveId.PROTECT ], + [ 24, MoveId.RECYCLE ], + [ 28, MoveId.PSYBEAM ], + [ 32, MoveId.ROLE_PLAY ], // Custom, swapped with Mimic + [ 36, MoveId.LIGHT_SCREEN ], + [ 36, MoveId.REFLECT ], + [ 36, MoveId.SAFEGUARD ], + [ 40, MoveId.SUCKER_PUNCH ], + [ 44, MoveId.DAZZLING_GLEAM ], + [ 48, MoveId.PSYCHIC ], + [ 52, MoveId.TEETER_DANCE ], + ], + [SpeciesId.HAPPINY]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.COPYCAT ], + [ 4, MoveId.DEFENSE_CURL ], + [ 8, MoveId.SWEET_KISS ], + [ 12, MoveId.DISARMING_VOICE ], + [ 16, MoveId.COVET ], + [ 20, MoveId.CHARM ], + ], + [SpeciesId.CHATOT]: [ + [ 1, MoveId.PECK ], + [ 1, MoveId.TAUNT ], + [ 1, MoveId.HYPER_VOICE ], + [ 1, MoveId.CHATTER ], + [ 1, MoveId.CONFIDE ], + [ 5, MoveId.GROWL ], + [ 9, MoveId.MIRROR_MOVE ], + [ 13, MoveId.SING ], + [ 17, MoveId.FURY_ATTACK ], + [ 29, MoveId.ROUND ], + [ 33, MoveId.MIMIC ], + [ 37, MoveId.ECHOED_VOICE ], + [ 41, MoveId.ROOST ], + [ 45, MoveId.UPROAR ], + [ 49, MoveId.SYNCHRONOISE ], + [ 50, MoveId.FEATHER_DANCE ], + ], + [SpeciesId.SPIRITOMB]: [ + [ 1, MoveId.NIGHT_SHADE ], + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.PURSUIT ], + [ 5, MoveId.SHADOW_SNEAK ], + [ 10, MoveId.SPITE ], + [ 15, MoveId.PAYBACK ], + [ 20, MoveId.NASTY_PLOT ], + [ 25, MoveId.HEX ], + [ 30, MoveId.MEMENTO ], + [ 35, MoveId.SUCKER_PUNCH ], + [ 40, MoveId.CURSE ], + [ 45, MoveId.SHADOW_BALL ], + [ 50, MoveId.DARK_PULSE ], + [ 55, MoveId.HYPNOSIS ], + [ 60, MoveId.DREAM_EATER ], + ], + [SpeciesId.GIBLE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SAND_TOMB ], + [ 6, MoveId.SAND_ATTACK ], + [ 12, MoveId.DRAGON_BREATH ], + [ 18, MoveId.BULLDOZE ], + [ 25, MoveId.BITE ], + [ 30, MoveId.SLASH ], + [ 36, MoveId.DRAGON_CLAW ], + [ 42, MoveId.DIG ], + [ 48, MoveId.SANDSTORM ], + [ 54, MoveId.TAKE_DOWN ], + [ 60, MoveId.DRAGON_RUSH ], + ], + [SpeciesId.GABITE]: [ + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.SAND_TOMB ], + [ 1, MoveId.DUAL_CHOP ], + [ 18, MoveId.BULLDOZE ], + [ 27, MoveId.BITE ], + [ 34, MoveId.SLASH ], + [ 42, MoveId.DRAGON_CLAW ], + [ 50, MoveId.DIG ], + [ 58, MoveId.SANDSTORM ], + [ 66, MoveId.TAKE_DOWN ], + [ 74, MoveId.DRAGON_RUSH ], + ], + [SpeciesId.GARCHOMP]: [ + [ EVOLVE_MOVE, MoveId.CRUNCH ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.SAND_TOMB ], + [ 1, MoveId.DUAL_CHOP ], + [ 18, MoveId.BULLDOZE ], + [ 27, MoveId.BITE ], + [ 34, MoveId.SLASH ], + [ 42, MoveId.DRAGON_CLAW ], + [ 52, MoveId.DIG ], + [ 62, MoveId.SANDSTORM ], + [ 72, MoveId.TAKE_DOWN ], + [ 82, MoveId.DRAGON_RUSH ], + ], + [SpeciesId.MUNCHLAX]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LICK ], + [ 1, MoveId.ODOR_SLEUTH ], + [ 4, MoveId.DEFENSE_CURL ], + [ 8, MoveId.RECYCLE ], + [ 12, MoveId.COVET ], + [ 16, MoveId.BITE ], + [ 20, MoveId.STOCKPILE ], + [ 20, MoveId.SWALLOW ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.BODY_SLAM ], + [ 32, MoveId.FLING ], + [ 36, MoveId.AMNESIA ], + [ 40, MoveId.METRONOME ], + [ 44, MoveId.FLAIL ], + [ 48, MoveId.BELLY_DRUM ], + [ 52, MoveId.LAST_RESORT ], + ], + [SpeciesId.RIOLU]: [ + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.ENDURE ], + [ 4, MoveId.FEINT ], + [ 8, MoveId.METAL_CLAW ], + [ 12, MoveId.COUNTER ], + [ 16, MoveId.WORK_UP ], + [ 20, MoveId.ROCK_SMASH ], + [ 24, MoveId.VACUUM_WAVE ], + [ 28, MoveId.SCREECH ], + [ 32, MoveId.QUICK_GUARD ], + [ 36, MoveId.FORCE_PALM ], + [ 40, MoveId.SWORDS_DANCE ], + [ 44, MoveId.HELPING_HAND ], + [ 48, MoveId.COPYCAT ], + [ 52, MoveId.FINAL_GAMBIT ], + [ 56, MoveId.REVERSAL ], + ], + [SpeciesId.LUCARIO]: [ + [ EVOLVE_MOVE, MoveId.AURA_SPHERE ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.ENDURE ], // Previous Stage Move + [ 1, MoveId.SCREECH ], + [ 1, MoveId.REVERSAL ], + [ 1, MoveId.DETECT ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.ROCK_SMASH ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.VACUUM_WAVE ], + [ 1, MoveId.FINAL_GAMBIT ], + [ 1, MoveId.LIFE_DEW ], + [ 12, MoveId.COUNTER ], + [ 16, MoveId.WORK_UP ], + [ 20, MoveId.FORCE_PALM ], + [ 24, MoveId.CALM_MIND ], + [ 28, MoveId.METAL_SOUND ], + [ 32, MoveId.QUICK_GUARD ], + [ 36, MoveId.BONE_RUSH ], + [ 40, MoveId.SWORDS_DANCE ], + [ 44, MoveId.HEAL_PULSE ], + [ 48, MoveId.METEOR_MASH ], + [ 52, MoveId.DRAGON_PULSE ], + [ 56, MoveId.EXTREME_SPEED ], + [ 60, MoveId.CLOSE_COMBAT ], + ], + [SpeciesId.HIPPOPOTAS]: [ + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 4, MoveId.BITE ], + [ 8, MoveId.YAWN ], + [ 12, MoveId.SAND_TOMB ], + [ 16, MoveId.DIG ], + [ 20, MoveId.CRUNCH ], + [ 24, MoveId.SANDSTORM ], + [ 28, MoveId.TAKE_DOWN ], + [ 32, MoveId.ROAR ], + [ 36, MoveId.REST ], + [ 40, MoveId.EARTHQUAKE ], + [ 44, MoveId.DOUBLE_EDGE ], + [ 48, MoveId.FISSURE ], + [ 52, MoveId.SLACK_OFF ], + ], + [SpeciesId.HIPPOWDON]: [ + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.BITE ], + [ 1, MoveId.YAWN ], + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.FIRE_FANG ], + [ 12, MoveId.SAND_TOMB ], + [ 16, MoveId.DIG ], + [ 20, MoveId.CRUNCH ], + [ 24, MoveId.SANDSTORM ], + [ 28, MoveId.TAKE_DOWN ], + [ 32, MoveId.ROAR ], + [ 38, MoveId.REST ], + [ 44, MoveId.EARTHQUAKE ], + [ 50, MoveId.DOUBLE_EDGE ], + [ 56, MoveId.FISSURE ], + [ 62, MoveId.SLACK_OFF ], + ], + [SpeciesId.SKORUPI]: [ + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.LEER ], + [ 3, MoveId.HONE_CLAWS ], + [ 6, MoveId.FELL_STINGER ], + [ 9, MoveId.POISON_FANG ], + [ 12, MoveId.BITE ], + [ 15, MoveId.TOXIC_SPIKES ], + [ 18, MoveId.BUG_BITE ], + [ 21, MoveId.VENOSHOCK ], + [ 24, MoveId.KNOCK_OFF ], + [ 27, MoveId.SCARY_FACE ], + [ 30, MoveId.PIN_MISSILE ], + [ 33, MoveId.TOXIC ], + [ 36, MoveId.NIGHT_SLASH ], + [ 39, MoveId.CROSS_POISON ], + [ 42, MoveId.X_SCISSOR ], + [ 45, MoveId.ACUPRESSURE ], + [ 48, MoveId.CRUNCH ], + ], + [SpeciesId.DRAPION]: [ + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.LEER ], + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.FIRE_FANG ], + [ 1, MoveId.HONE_CLAWS ], + [ 1, MoveId.FELL_STINGER ], + [ 9, MoveId.POISON_FANG ], + [ 12, MoveId.BITE ], + [ 15, MoveId.TOXIC_SPIKES ], + [ 18, MoveId.BUG_BITE ], + [ 21, MoveId.VENOSHOCK ], + [ 24, MoveId.KNOCK_OFF ], + [ 27, MoveId.SCARY_FACE ], + [ 30, MoveId.PIN_MISSILE ], + [ 33, MoveId.TOXIC ], + [ 36, MoveId.NIGHT_SLASH ], + [ 39, MoveId.CROSS_POISON ], + [ 44, MoveId.X_SCISSOR ], + [ 49, MoveId.ACUPRESSURE ], + [ 54, MoveId.CRUNCH ], + ], + [SpeciesId.CROAGUNK]: [ + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.MUD_SLAP ], + [ 4, MoveId.ASTONISH ], + [ 8, MoveId.TAUNT ], + [ 12, MoveId.FLATTER ], + [ 16, MoveId.LOW_KICK ], + [ 20, MoveId.VENOSHOCK ], + [ 24, MoveId.SUCKER_PUNCH ], + [ 28, MoveId.SWAGGER ], + [ 32, MoveId.POISON_JAB ], + [ 36, MoveId.TOXIC ], + [ 40, MoveId.NASTY_PLOT ], + [ 44, MoveId.SLUDGE_BOMB ], + [ 48, MoveId.BELCH ], + ], + [SpeciesId.TOXICROAK]: [ + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.TAUNT ], + [ 1, MoveId.ASTONISH ], + [ 12, MoveId.FLATTER ], + [ 16, MoveId.LOW_KICK ], + [ 20, MoveId.VENOSHOCK ], + [ 24, MoveId.SUCKER_PUNCH ], + [ 28, MoveId.SWAGGER ], + [ 32, MoveId.POISON_JAB ], + [ 36, MoveId.TOXIC ], + [ 42, MoveId.NASTY_PLOT ], + [ 48, MoveId.SLUDGE_BOMB ], + [ 54, MoveId.BELCH ], + ], + [SpeciesId.CARNIVINE]: [ + [ 1, MoveId.BIND ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.LEAFAGE ], // Custom + [ 7, MoveId.BITE ], + [ 11, MoveId.VINE_WHIP ], + [ 17, MoveId.SWEET_SCENT ], + [ 21, MoveId.INGRAIN ], + [ 27, MoveId.GRASS_KNOT ], + [ 31, MoveId.LEAF_TORNADO ], + [ 37, MoveId.STOCKPILE ], + [ 37, MoveId.SPIT_UP ], + [ 37, MoveId.SWALLOW ], + [ 41, MoveId.CRUNCH ], + [ 47, MoveId.SEED_BOMB ], + [ 50, MoveId.POWER_WHIP ], + ], + [SpeciesId.FINNEON]: [ + [ 1, MoveId.POUND ], + [ 6, MoveId.WATER_GUN ], + [ 13, MoveId.RAIN_DANCE ], + [ 17, MoveId.GUST ], + [ 22, MoveId.WATER_PULSE ], + [ 26, MoveId.ATTRACT ], + [ 29, MoveId.SAFEGUARD ], + [ 33, MoveId.AQUA_RING ], + [ 38, MoveId.WHIRLPOOL ], + [ 42, MoveId.U_TURN ], + [ 45, MoveId.BOUNCE ], + [ 49, MoveId.TAILWIND ], + [ 54, MoveId.SOAK ], + ], + [SpeciesId.LUMINEON]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.GUST ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.SOAK ], + [ 13, MoveId.RAIN_DANCE ], + [ 22, MoveId.WATER_PULSE ], + [ 26, MoveId.ATTRACT ], + [ 29, MoveId.SAFEGUARD ], + [ 35, MoveId.AQUA_RING ], + [ 42, MoveId.WHIRLPOOL ], + [ 48, MoveId.U_TURN ], + [ 53, MoveId.BOUNCE ], + [ 59, MoveId.TAILWIND ], + ], + [SpeciesId.MANTYKE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WATER_GUN ], + [ 4, MoveId.SUPERSONIC ], + [ 8, MoveId.WING_ATTACK ], + [ 12, MoveId.WATER_PULSE ], + [ 16, MoveId.WIDE_GUARD ], + [ 20, MoveId.AGILITY ], + [ 24, MoveId.BUBBLE_BEAM ], + [ 28, MoveId.HEADBUTT ], + [ 32, MoveId.AIR_SLASH ], + [ 36, MoveId.AQUA_RING ], + [ 40, MoveId.BOUNCE ], + [ 44, MoveId.TAKE_DOWN ], + [ 48, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.SNOVER]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.POWDER_SNOW ], + [ 5, MoveId.LEAFAGE ], + [ 10, MoveId.MIST ], + [ 15, MoveId.ICE_SHARD ], + [ 20, MoveId.RAZOR_LEAF ], + [ 25, MoveId.ICY_WIND ], + [ 30, MoveId.SWAGGER ], + [ 35, MoveId.INGRAIN ], + [ 41, MoveId.WOOD_HAMMER ], + [ 45, MoveId.BLIZZARD ], + [ 50, MoveId.SHEER_COLD ], + ], + [SpeciesId.ABOMASNOW]: [ + [ EVOLVE_MOVE, MoveId.ICE_PUNCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.MIST ], + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.LEAFAGE ], + [ 1, MoveId.AURORA_VEIL ], + [ 15, MoveId.ICE_SHARD ], + [ 20, MoveId.RAZOR_LEAF ], + [ 25, MoveId.ICY_WIND ], + [ 30, MoveId.SWAGGER ], + [ 35, MoveId.INGRAIN ], + [ 43, MoveId.WOOD_HAMMER ], + [ 49, MoveId.BLIZZARD ], + [ 56, MoveId.SHEER_COLD ], + ], + [SpeciesId.WEAVILE]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.AGILITY ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.SLASH ], + [ 1, MoveId.BEAT_UP ], + [ 1, MoveId.TAUNT ], + [ 1, MoveId.ASSURANCE ], + [ 1, MoveId.ICE_SHARD ], + [ 1, MoveId.EMBARGO ], + [ 18, MoveId.METAL_CLAW ], + [ 24, MoveId.ICY_WIND ], + [ 30, MoveId.FURY_SWIPES ], + [ 36, MoveId.HONE_CLAWS ], + [ 42, MoveId.FLING ], + [ 48, MoveId.NASTY_PLOT ], + [ 54, MoveId.SCREECH ], + [ 60, MoveId.NIGHT_SLASH ], + [ 66, MoveId.DARK_PULSE ], + ], + [SpeciesId.MAGNEZONE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.BARRIER ], + [ 1, MoveId.TRI_ATTACK ], + [ 1, MoveId.MIRROR_COAT ], + [ 1, MoveId.MAGNETIC_FLUX ], + [ 1, MoveId.ELECTRIC_TERRAIN ], + [ 12, MoveId.ELECTRO_BALL ], + [ 16, MoveId.GYRO_BALL ], + [ 20, MoveId.SPARK ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.MAGNET_RISE ], + [ 34, MoveId.FLASH_CANNON ], + [ 40, MoveId.DISCHARGE ], + [ 46, MoveId.METAL_SOUND ], + [ 52, MoveId.LIGHT_SCREEN ], + [ 58, MoveId.LOCK_ON ], + [ 64, MoveId.ZAP_CANNON ], + ], + [SpeciesId.LICKILICKY]: [ + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.LICK ], + [ 1, MoveId.TACKLE ], // Previous Stage Move, Custom + [ 1, MoveId.ROLLOUT ], + [ 1, MoveId.WRING_OUT ], + [ 6, MoveId.REST ], + [ 18, MoveId.WRAP ], + [ 24, MoveId.DISABLE ], + [ 30, MoveId.STOMP ], + [ 36, MoveId.KNOCK_OFF ], + [ 42, MoveId.SCREECH ], + [ 48, MoveId.SLAM ], + [ 54, MoveId.POWER_WHIP ], + [ 60, MoveId.BELLY_DRUM ], + ], + [SpeciesId.RHYPERIOR]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.HAMMER_ARM ], + [ 1, MoveId.SMACK_DOWN ], + [ 1, MoveId.BULLDOZE ], + [ 15, MoveId.HORN_ATTACK ], + [ 20, MoveId.SCARY_FACE ], + [ 25, MoveId.STOMP ], + [ 30, MoveId.ROCK_BLAST ], + [ 35, MoveId.DRILL_RUN ], + [ 40, MoveId.TAKE_DOWN ], + [ 47, MoveId.EARTHQUAKE ], + [ 54, MoveId.STONE_EDGE ], + [ 61, MoveId.MEGAHORN ], + [ 68, MoveId.HORN_DRILL ], + [ 75, MoveId.ROCK_WRECKER ], + ], + [SpeciesId.TANGROWTH]: [ + [ 1, MoveId.BIND ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.BLOCK ], + [ 1, MoveId.CONSTRICT ], + [ 12, MoveId.MEGA_DRAIN ], + [ 16, MoveId.VINE_WHIP ], + [ 20, MoveId.POISON_POWDER ], + [ 24, MoveId.DOUBLE_HIT ], + [ 28, MoveId.KNOCK_OFF ], + [ 32, MoveId.GIGA_DRAIN ], + [ 34, MoveId.ANCIENT_POWER ], + [ 36, MoveId.SLEEP_POWDER ], + [ 40, MoveId.SLAM ], + [ 44, MoveId.TICKLE ], + [ 48, MoveId.POWER_WHIP ], + [ 52, MoveId.INGRAIN ], + [ 56, MoveId.GRASSY_TERRAIN ], + ], + [SpeciesId.ELECTIVIRE]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.CHARGE ], + [ 1, MoveId.ION_DELUGE ], + [ 12, MoveId.SWIFT ], + [ 16, MoveId.SHOCK_WAVE ], + [ 20, MoveId.THUNDER_WAVE ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.THUNDER_PUNCH ], + [ 34, MoveId.DISCHARGE ], + [ 40, MoveId.LOW_KICK ], + [ 46, MoveId.THUNDERBOLT ], + [ 52, MoveId.LIGHT_SCREEN ], + [ 58, MoveId.THUNDER ], + [ 64, MoveId.GIGA_IMPACT ], + ], + [SpeciesId.MAGMORTAR]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.SMOG ], + [ 12, MoveId.CLEAR_SMOG ], + [ 16, MoveId.FLAME_WHEEL ], + [ 20, MoveId.CONFUSE_RAY ], + [ 24, MoveId.SCARY_FACE ], + [ 28, MoveId.FIRE_PUNCH ], + [ 34, MoveId.LAVA_PLUME ], + [ 40, MoveId.LOW_KICK ], + [ 46, MoveId.FLAMETHROWER ], + [ 52, MoveId.SUNNY_DAY ], + [ 58, MoveId.FIRE_BLAST ], + [ 64, MoveId.HYPER_BEAM ], + ], + [SpeciesId.TOGEKISS]: [ + [ EVOLVE_MOVE, MoveId.AIR_SLASH ], + [ 1, MoveId.POUND ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.METRONOME ], + [ 1, MoveId.SKY_ATTACK ], + [ 1, MoveId.TRI_ATTACK ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.SAFEGUARD ], + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.EXTREME_SPEED ], + [ 1, MoveId.ANCIENT_POWER ], + [ 1, MoveId.FOLLOW_ME ], + [ 1, MoveId.WISH ], + [ 1, MoveId.YAWN ], + [ 1, MoveId.LAST_RESORT ], + [ 1, MoveId.AURA_SPHERE ], + [ 1, MoveId.AFTER_YOU ], + [ 1, MoveId.FAIRY_WIND ], + [ 1, MoveId.LIFE_DEW ], + ], + [SpeciesId.YANMEGA]: [ + [ RELEARN_MOVE, MoveId.HYPNOSIS ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.AIR_CUTTER ], // Previous Stage Move + [ 1, MoveId.NIGHT_SLASH ], + [ 1, MoveId.WING_ATTACK ], // Previous Stage Move + [ 1, MoveId.AIR_SLASH ], + [ 1, MoveId.BUG_BUZZ ], + [ 14, MoveId.QUICK_ATTACK ], + [ 17, MoveId.DETECT ], + [ 22, MoveId.SUPERSONIC ], + [ 27, MoveId.UPROAR ], + [ 30, MoveId.BUG_BITE ], + [ 33, MoveId.ANCIENT_POWER ], + [ 38, MoveId.FEINT ], + [ 43, MoveId.SLASH ], + [ 46, MoveId.SCREECH ], + [ 49, MoveId.U_TURN ], + ], + [SpeciesId.LEAFEON]: [ + [ EVOLVE_MOVE, MoveId.SAPPY_SEED ], + [ RELEARN_MOVE, MoveId.VEEVEE_VOLLEY ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.BITE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.SWIFT ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.COVET ], + [ 1, MoveId.COPYCAT ], + [ 5, MoveId.SAND_ATTACK ], + [ 10, MoveId.RAZOR_LEAF ], + [ 15, MoveId.QUICK_ATTACK ], + [ 20, MoveId.BABY_DOLL_EYES ], + [ 25, MoveId.LEECH_SEED ], + [ 30, MoveId.MAGICAL_LEAF ], + [ 35, MoveId.SYNTHESIS ], + [ 40, MoveId.SUNNY_DAY ], + [ 45, MoveId.GIGA_DRAIN ], + [ 50, MoveId.SWORDS_DANCE ], + [ 55, MoveId.LEAF_BLADE ], + [ 60, MoveId.LAST_RESORT ], + ], + [SpeciesId.GLACEON]: [ + [ EVOLVE_MOVE, MoveId.FREEZY_FROST ], + [ RELEARN_MOVE, MoveId.VEEVEE_VOLLEY ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.SWIFT ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.COVET ], + [ 1, MoveId.COPYCAT ], + [ 5, MoveId.SAND_ATTACK ], + [ 10, MoveId.ICY_WIND ], + [ 15, MoveId.QUICK_ATTACK ], + [ 20, MoveId.BABY_DOLL_EYES ], + [ 25, MoveId.ICE_SHARD ], + [ 30, MoveId.BITE ], + [ 35, MoveId.ICE_FANG ], + [ 40, MoveId.SNOWSCAPE ], + [ 45, MoveId.FREEZE_DRY ], + [ 50, MoveId.MIRROR_COAT ], + [ 55, MoveId.BLIZZARD ], + [ 60, MoveId.LAST_RESORT ], + ], + [SpeciesId.GLISCOR]: [ + [ 1, MoveId.POISON_STING ], // Previous Stage Move + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.POISON_TAIL ], // Previous Stage Move + [ 1, MoveId.SLASH ], // Previous Stage Move + [ 1, MoveId.POISON_JAB ], + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.FIRE_FANG ], + [ 13, MoveId.QUICK_ATTACK ], + [ 16, MoveId.FURY_CUTTER ], + [ 19, MoveId.KNOCK_OFF ], + [ 22, MoveId.ACROBATICS ], + [ 27, MoveId.NIGHT_SLASH ], + [ 30, MoveId.U_TURN ], + [ 35, MoveId.SCREECH ], + [ 40, MoveId.X_SCISSOR ], + [ 45, MoveId.CRABHAMMER ], + [ 50, MoveId.SWORDS_DANCE ], + ], + [SpeciesId.MAMOSWINE]: [ + [ EVOLVE_MOVE, MoveId.DOUBLE_HIT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.ODOR_SLEUTH ], + [ 1, MoveId.ANCIENT_POWER ], + [ 1, MoveId.ICE_FANG ], + [ 15, MoveId.ICE_SHARD ], + [ 20, MoveId.MIST ], + [ 25, MoveId.ENDURE ], + [ 30, MoveId.ICY_WIND ], + [ 37, MoveId.AMNESIA ], + [ 44, MoveId.TAKE_DOWN ], + [ 51, MoveId.EARTHQUAKE ], + [ 58, MoveId.BLIZZARD ], + [ 65, MoveId.THRASH ], + ], + [SpeciesId.PORYGON_Z]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.CONVERSION ], + [ 1, MoveId.RECYCLE ], + [ 1, MoveId.MAGNET_RISE ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.TRICK_ROOM ], + [ 15, MoveId.THUNDER_SHOCK ], + [ 20, MoveId.PSYBEAM ], + [ 25, MoveId.CONVERSION_2 ], + [ 30, MoveId.AGILITY ], + [ 35, MoveId.RECOVER ], + [ 40, MoveId.DISCHARGE ], + [ 45, MoveId.TRI_ATTACK ], + [ 50, MoveId.MAGIC_COAT ], + [ 55, MoveId.LOCK_ON ], + [ 60, MoveId.ZAP_CANNON ], + [ 65, MoveId.HYPER_BEAM ], + ], + [SpeciesId.GALLADE]: [ + [ EVOLVE_MOVE, MoveId.SLASH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.PSYBEAM ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.PSYCHIC ], + [ 1, MoveId.HYPNOSIS ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.DREAM_EATER ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.FUTURE_SIGHT ], + [ 1, MoveId.IMPRISON ], + [ 1, MoveId.CALM_MIND ], + [ 1, MoveId.LEAF_BLADE ], + [ 1, MoveId.NIGHT_SLASH ], + [ 1, MoveId.SACRED_SWORD ], + [ 1, MoveId.DISARMING_VOICE ], + [ 1, MoveId.DRAINING_KISS ], + [ 1, MoveId.LIFE_DEW ], + [ 1, MoveId.AQUA_CUTTER ], + [ 9, MoveId.HELPING_HAND ], + [ 12, MoveId.FEINT ], + [ 15, MoveId.TELEPORT ], + [ 18, MoveId.AERIAL_ACE ], + [ 23, MoveId.FALSE_SWIPE ], + [ 28, MoveId.PROTECT ], + [ 35, MoveId.SWORDS_DANCE ], + [ 42, MoveId.PSYCHO_CUT ], + [ 49, MoveId.HEAL_PULSE ], + [ 56, MoveId.WIDE_GUARD ], + [ 56, MoveId.QUICK_GUARD ], + [ 63, MoveId.CLOSE_COMBAT ], + ], + [SpeciesId.PROBOPASS]: [ + [ EVOLVE_MOVE, MoveId.TRI_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], // Previous Stage Move + [ 1, MoveId.IRON_DEFENSE ], + [ 1, MoveId.BLOCK ], + [ 1, MoveId.ROCK_THROW ], // Previous Stage Move + [ 1, MoveId.GRAVITY ], + [ 1, MoveId.MAGNET_RISE ], + [ 1, MoveId.WIDE_GUARD ], + [ 1, MoveId.MAGNETIC_FLUX ], + [ 13, MoveId.THUNDER_WAVE ], + [ 16, MoveId.REST ], + [ 19, MoveId.SPARK ], + [ 22, MoveId.ROCK_SLIDE ], + [ 25, MoveId.POWER_GEM ], + [ 28, MoveId.ROCK_BLAST ], + [ 31, MoveId.DISCHARGE ], + [ 34, MoveId.SANDSTORM ], + [ 37, MoveId.EARTH_POWER ], + [ 40, MoveId.STONE_EDGE ], + [ 43, MoveId.ZAP_CANNON ], + [ 43, MoveId.LOCK_ON ], + ], + [SpeciesId.DUSKNOIR]: [ + [ 1, MoveId.FIRE_PUNCH ], + [ 1, MoveId.ICE_PUNCH ], + [ 1, MoveId.THUNDER_PUNCH ], + [ 1, MoveId.BIND ], + [ 1, MoveId.LEER ], + [ 1, MoveId.DISABLE ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.PURSUIT ], // Previous Stage Move, Custom + [ 1, MoveId.SHADOW_PUNCH ], + [ 1, MoveId.GRAVITY ], + [ 1, MoveId.SHADOW_SNEAK ], + [ 12, MoveId.CONFUSE_RAY ], + [ 16, MoveId.NIGHT_SHADE ], + [ 20, MoveId.PAYBACK ], + [ 24, MoveId.WILL_O_WISP ], + [ 28, MoveId.MEAN_LOOK ], + [ 32, MoveId.HEX ], + [ 36, MoveId.CURSE ], + [ 42, MoveId.SHADOW_BALL ], + [ 48, MoveId.FUTURE_SIGHT ], + [ 54, MoveId.DESTINY_BOND ], + ], + [SpeciesId.FROSLASS]: [ + [ EVOLVE_MOVE, MoveId.HEX ], + [ 1, MoveId.HEADBUTT ], + [ 1, MoveId.LEER ], + [ 1, MoveId.BITE ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.DESTINY_BOND ], + [ 1, MoveId.WEATHER_BALL ], // Previous Stage Move + [ 1, MoveId.CRUNCH ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.OMINOUS_WIND ], + [ 15, MoveId.ICE_SHARD ], + [ 20, MoveId.DRAINING_KISS ], + [ 25, MoveId.ICY_WIND ], + [ 30, MoveId.FROST_BREATH ], + [ 35, MoveId.CONFUSE_RAY ], + [ 40, MoveId.SNOWSCAPE ], + [ 47, MoveId.WILL_O_WISP ], + [ 54, MoveId.AURORA_VEIL ], + [ 61, MoveId.SHADOW_BALL ], + [ 68, MoveId.BLIZZARD ], + ], + [SpeciesId.ROTOM]: [ + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.ASTONISH ], + [ 5, MoveId.THUNDER_SHOCK ], + [ 10, MoveId.CONFUSE_RAY ], + [ 15, MoveId.CHARGE ], + [ 20, MoveId.ELECTRO_BALL ], + [ 25, MoveId.THUNDER_WAVE ], + [ 30, MoveId.SHOCK_WAVE ], + [ 35, MoveId.HEX ], + [ 40, MoveId.SUBSTITUTE ], + [ 45, MoveId.TRICK ], + [ 50, MoveId.DISCHARGE ], + [ 55, MoveId.UPROAR ], + ], + [SpeciesId.UXIE]: [ + [ RELEARN_MOVE, MoveId.TRI_ATTACK ], + [ RELEARN_MOVE, MoveId.SNORE ], + [ RELEARN_MOVE, MoveId.SAFEGUARD ], + [ RELEARN_MOVE, MoveId.IRON_TAIL ], + [ RELEARN_MOVE, MoveId.PSYCHO_CUT ], + [ RELEARN_MOVE, MoveId.WONDER_ROOM ], + [ RELEARN_MOVE, MoveId.MAGIC_ROOM ], + [ RELEARN_MOVE, MoveId.ROUND ], + [ RELEARN_MOVE, MoveId.ALLY_SWITCH ], + [ RELEARN_MOVE, MoveId.EXPANDING_FORCE ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.REST ], + [ 7, MoveId.SWIFT ], + [ 14, MoveId.ENDURE ], + [ 21, MoveId.PSYBEAM ], + [ 28, MoveId.IMPRISON ], + [ 35, MoveId.EXTRASENSORY ], + [ 42, MoveId.AMNESIA ], + [ 49, MoveId.PSYCHIC ], + [ 56, MoveId.YAWN ], + [ 63, MoveId.FUTURE_SIGHT ], + [ 70, MoveId.FLAIL ], + [ 77, MoveId.MEMENTO ], + [ 84, MoveId.MYSTICAL_POWER ], + ], + [SpeciesId.MESPRIT]: [ + [ RELEARN_MOVE, MoveId.TRI_ATTACK ], + [ RELEARN_MOVE, MoveId.SNORE ], + [ RELEARN_MOVE, MoveId.SAFEGUARD ], + [ RELEARN_MOVE, MoveId.IRON_TAIL ], + [ RELEARN_MOVE, MoveId.PSYCHO_CUT ], + [ RELEARN_MOVE, MoveId.WONDER_ROOM ], + [ RELEARN_MOVE, MoveId.MAGIC_ROOM ], + [ RELEARN_MOVE, MoveId.ROUND ], + [ RELEARN_MOVE, MoveId.ALLY_SWITCH ], + [ RELEARN_MOVE, MoveId.EXPANDING_FORCE ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.REST ], + [ 7, MoveId.SWIFT ], + [ 14, MoveId.PROTECT ], + [ 21, MoveId.PSYBEAM ], + [ 28, MoveId.IMPRISON ], + [ 35, MoveId.EXTRASENSORY ], + [ 42, MoveId.CHARM ], + [ 49, MoveId.PSYCHIC ], + [ 56, MoveId.FLATTER ], + [ 63, MoveId.FUTURE_SIGHT ], + [ 70, MoveId.COPYCAT ], + [ 77, MoveId.HEALING_WISH ], + [ 84, MoveId.MYSTICAL_POWER ], + ], + [SpeciesId.AZELF]: [ + [ RELEARN_MOVE, MoveId.SELF_DESTRUCT ], + [ RELEARN_MOVE, MoveId.TRI_ATTACK ], + [ RELEARN_MOVE, MoveId.SNORE ], + [ RELEARN_MOVE, MoveId.SAFEGUARD ], + [ RELEARN_MOVE, MoveId.IRON_TAIL ], + [ RELEARN_MOVE, MoveId.PAYBACK ], + [ RELEARN_MOVE, MoveId.ASSURANCE ], + [ RELEARN_MOVE, MoveId.PSYCHO_CUT ], + [ RELEARN_MOVE, MoveId.WONDER_ROOM ], + [ RELEARN_MOVE, MoveId.MAGIC_ROOM ], + [ RELEARN_MOVE, MoveId.ROUND ], + [ RELEARN_MOVE, MoveId.ALLY_SWITCH ], + [ RELEARN_MOVE, MoveId.EXPANDING_FORCE ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.REST ], + [ 7, MoveId.SWIFT ], + [ 14, MoveId.DETECT ], + [ 21, MoveId.PSYBEAM ], + [ 28, MoveId.IMPRISON ], + [ 35, MoveId.EXTRASENSORY ], + [ 42, MoveId.NASTY_PLOT ], + [ 49, MoveId.PSYCHIC ], + [ 56, MoveId.UPROAR ], + [ 63, MoveId.FUTURE_SIGHT ], + [ 70, MoveId.LAST_RESORT ], + [ 77, MoveId.EXPLOSION ], + [ 84, MoveId.MYSTICAL_POWER ], + ], + [SpeciesId.DIALGA]: [ + [ 1, MoveId.SCARY_FACE ], + [ 1, MoveId.METAL_CLAW ], + [ 8, MoveId.DRAGON_BREATH ], + [ 16, MoveId.ANCIENT_POWER ], + [ 24, MoveId.SLASH ], + [ 32, MoveId.FLASH_CANNON ], + [ 40, MoveId.DRAGON_CLAW ], + [ 48, MoveId.AURA_SPHERE ], + [ 56, MoveId.POWER_GEM ], + [ 64, MoveId.METAL_BURST ], + [ 72, MoveId.EARTH_POWER ], + [ 80, MoveId.IRON_TAIL ], + [ 88, MoveId.ROAR_OF_TIME ], + ], + [SpeciesId.PALKIA]: [ + [ 1, MoveId.SCARY_FACE ], + [ 1, MoveId.WATER_PULSE ], + [ 8, MoveId.DRAGON_BREATH ], + [ 16, MoveId.ANCIENT_POWER ], + [ 24, MoveId.SLASH ], + [ 32, MoveId.AQUA_RING ], + [ 48, MoveId.AURA_SPHERE ], + [ 56, MoveId.POWER_GEM ], + [ 64, MoveId.AQUA_TAIL ], + [ 72, MoveId.EARTH_POWER ], + [ 80, MoveId.SPACIAL_REND ], + [ 88, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.HEATRAN]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.FIRE_SPIN ], + [ 6, MoveId.METAL_CLAW ], + [ 12, MoveId.ANCIENT_POWER ], + [ 18, MoveId.FIRE_FANG ], + [ 24, MoveId.SCARY_FACE ], + [ 30, MoveId.IRON_HEAD ], + [ 36, MoveId.CRUNCH ], + [ 42, MoveId.LAVA_PLUME ], + [ 48, MoveId.METAL_SOUND ], + [ 54, MoveId.EARTH_POWER ], + [ 60, MoveId.HEAT_WAVE ], + [ 66, MoveId.STONE_EDGE ], + [ 72, MoveId.MAGMA_STORM ], + ], + [SpeciesId.REGIGIGAS]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.DIZZY_PUNCH ], + [ 1, MoveId.FORESIGHT ], + [ 6, MoveId.PAYBACK ], + [ 12, MoveId.REVENGE ], + [ 18, MoveId.STOMP ], + [ 24, MoveId.PROTECT ], + [ 30, MoveId.KNOCK_OFF ], + [ 36, MoveId.MEGA_PUNCH ], + [ 42, MoveId.BODY_PRESS ], + [ 48, MoveId.WIDE_GUARD ], + [ 54, MoveId.ZEN_HEADBUTT ], + [ 60, MoveId.HEAVY_SLAM ], + [ 66, MoveId.HAMMER_ARM ], + [ 72, MoveId.GIGA_IMPACT ], + [ 78, MoveId.CRUSH_GRIP ], + ], + [SpeciesId.GIRATINA]: [ + [ 1, MoveId.SHADOW_SNEAK ], + [ 1, MoveId.DEFOG ], + [ 1, MoveId.DRAGON_BREATH ], //USUM + [ 7, MoveId.OMINOUS_WIND ], //USUM + [ 14, MoveId.ANCIENT_POWER ], + [ 21, MoveId.HEX ], + [ 28, MoveId.SLASH ], + [ 35, MoveId.SCARY_FACE ], + [ 42, MoveId.SHADOW_CLAW ], + [ 49, MoveId.PAIN_SPLIT ], + [ 56, MoveId.AURA_SPHERE ], + [ 63, MoveId.DRAGON_CLAW ], + [ 70, MoveId.EARTH_POWER ], + [ 77, MoveId.SHADOW_FORCE ], + [ 84, MoveId.DESTINY_BOND ], + ], + [SpeciesId.CRESSELIA]: [ + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 6, MoveId.MIST ], + [ 12, MoveId.AURORA_BEAM ], + [ 18, MoveId.PSYBEAM ], + [ 24, MoveId.ALLY_SWITCH ], + [ 30, MoveId.SLASH ], + [ 36, MoveId.PSYCHO_CUT ], + [ 42, MoveId.MOONLIGHT ], + [ 48, MoveId.SAFEGUARD ], + [ 54, MoveId.PSYCHIC ], + [ 60, MoveId.MOONBLAST ], + [ 66, MoveId.FUTURE_SIGHT ], + [ 72, MoveId.LUNAR_DANCE ], + [ 72, MoveId.LUNAR_BLESSING ], + ], + [SpeciesId.PHIONE]: [ + [ 1, MoveId.WATER_GUN ], + [ 9, MoveId.CHARM ], + [ 16, MoveId.SUPERSONIC ], + [ 24, MoveId.BUBBLE_BEAM ], + [ 31, MoveId.ACID_ARMOR ], + [ 39, MoveId.WHIRLPOOL ], + [ 46, MoveId.WATER_PULSE ], + [ 54, MoveId.AQUA_RING ], + [ 61, MoveId.DIVE ], + [ 69, MoveId.RAIN_DANCE ], + [ 75, MoveId.TAKE_HEART ], + ], + [SpeciesId.MANAPHY]: [ + [ 1, MoveId.HEART_SWAP ], + [ 1, MoveId.TAIL_GLOW ], + [ 1, MoveId.WATER_GUN ], + [ 9, MoveId.CHARM ], + [ 16, MoveId.SUPERSONIC ], + [ 24, MoveId.BUBBLE_BEAM ], + [ 31, MoveId.ACID_ARMOR ], + [ 39, MoveId.WHIRLPOOL ], + [ 46, MoveId.WATER_PULSE ], + [ 54, MoveId.AQUA_RING ], + [ 61, MoveId.DIVE ], + [ 69, MoveId.RAIN_DANCE ], + [ 76, MoveId.TAKE_HEART ], + ], + [SpeciesId.DARKRAI]: [ + [ 1, MoveId.DISABLE ], + [ 1, MoveId.OMINOUS_WIND ], + [ 1, MoveId.PURSUIT ], // Custom + [ 11, MoveId.QUICK_ATTACK ], + [ 20, MoveId.HYPNOSIS ], + [ 29, MoveId.SUCKER_PUNCH ], + [ 38, MoveId.NIGHT_SHADE ], + [ 47, MoveId.DOUBLE_TEAM ], + [ 57, MoveId.HAZE ], + [ 66, MoveId.DARK_VOID ], + [ 75, MoveId.NASTY_PLOT ], + [ 84, MoveId.DREAM_EATER ], + [ 93, MoveId.DARK_PULSE ], + ], + [SpeciesId.SHAYMIN]: [ + [ 1, MoveId.LEAFAGE ], // Custom + [ 1, MoveId.GROWTH ], + [ 10, MoveId.MAGICAL_LEAF ], + [ 19, MoveId.LEECH_SEED ], + [ 28, MoveId.SYNTHESIS ], + [ 37, MoveId.SWEET_SCENT ], + [ 46, MoveId.NATURAL_GIFT ], + [ 55, MoveId.WORRY_SEED ], + [ 64, MoveId.AROMATHERAPY ], + [ 73, MoveId.ENERGY_BALL ], + [ 82, MoveId.SWEET_KISS ], + [ 91, MoveId.HEALING_WISH ], + [ 100, MoveId.SEED_FLARE ], + ], + [SpeciesId.ARCEUS]: [ + [ 1, MoveId.SEISMIC_TOSS ], + [ 1, MoveId.COSMIC_POWER ], + [ 1, MoveId.PUNISHMENT ], + [ 10, MoveId.GRAVITY ], + [ 20, MoveId.EARTH_POWER ], + [ 30, MoveId.HYPER_VOICE ], + [ 40, MoveId.EXTREME_SPEED ], + [ 50, MoveId.HEALING_WISH ], + [ 60, MoveId.FUTURE_SIGHT ], + [ 70, MoveId.RECOVER ], + [ 80, MoveId.HYPER_BEAM ], + [ 90, MoveId.PERISH_SONG ], + [ 100, MoveId.JUDGMENT ], + ], + [SpeciesId.VICTINI]: [ + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.FLAME_CHARGE ], + [ 1, MoveId.V_CREATE ], + [ 7, MoveId.WORK_UP ], + [ 14, MoveId.INCINERATE ], + [ 21, MoveId.STORED_POWER ], + [ 28, MoveId.HEADBUTT ], + [ 35, MoveId.ENDURE ], + [ 42, MoveId.ZEN_HEADBUTT ], + [ 49, MoveId.INFERNO ], + [ 56, MoveId.REVERSAL ], + [ 63, MoveId.SEARING_SHOT ], + [ 70, MoveId.DOUBLE_EDGE ], + [ 77, MoveId.FLARE_BLITZ ], + [ 84, MoveId.OVERHEAT ], + [ 91, MoveId.FINAL_GAMBIT ], + ], + [SpeciesId.SNIVY]: [ + [ 1, MoveId.TACKLE ], + [ 4, MoveId.LEER ], + [ 5, MoveId.VINE_WHIP ], // Custom, moved from 7 to 5 + [ 10, MoveId.WRAP ], + [ 13, MoveId.GROWTH ], + [ 16, MoveId.MAGICAL_LEAF ], + [ 19, MoveId.LEECH_SEED ], + [ 22, MoveId.MEGA_DRAIN ], + [ 25, MoveId.SLAM ], + [ 28, MoveId.LEAF_BLADE ], + [ 31, MoveId.COIL ], + [ 34, MoveId.GIGA_DRAIN ], + [ 37, MoveId.GASTRO_ACID ], + [ 40, MoveId.LEAF_STORM ], + ], + [SpeciesId.SERVINE]: [ + [ 1, MoveId.VINE_WHIP ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.LEER ], + [ 13, MoveId.GROWTH ], + [ 16, MoveId.MAGICAL_LEAF ], + [ 20, MoveId.LEECH_SEED ], + [ 24, MoveId.MEGA_DRAIN ], + [ 28, MoveId.SLAM ], + [ 32, MoveId.LEAF_BLADE ], + [ 36, MoveId.COIL ], + [ 40, MoveId.GIGA_DRAIN ], + [ 44, MoveId.GASTRO_ACID ], + [ 48, MoveId.LEAF_STORM ], + ], + [SpeciesId.SERPERIOR]: [ + [ 1, MoveId.VINE_WHIP ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.LEER ], + [ 13, MoveId.GROWTH ], + [ 16, MoveId.MAGICAL_LEAF ], + [ 20, MoveId.LEECH_SEED ], + [ 24, MoveId.MEGA_DRAIN ], + [ 28, MoveId.SLAM ], + [ 32, MoveId.LEAF_BLADE ], + [ 38, MoveId.COIL ], + [ 44, MoveId.GIGA_DRAIN ], + [ 50, MoveId.GASTRO_ACID ], + [ 56, MoveId.LEAF_STORM ], + ], + [SpeciesId.TEPIG]: [ + [ 1, MoveId.TACKLE ], + [ 3, MoveId.TAIL_WHIP ], + [ 5, MoveId.EMBER ], // Custom, moved from 7 to 5 + [ 9, MoveId.ENDURE ], + [ 13, MoveId.DEFENSE_CURL ], + [ 15, MoveId.FLAME_CHARGE ], + [ 19, MoveId.SMOG ], + [ 21, MoveId.ROLLOUT ], + [ 25, MoveId.TAKE_DOWN ], + [ 27, MoveId.HEAT_CRASH ], + [ 31, MoveId.ASSURANCE ], + [ 33, MoveId.FLAMETHROWER ], + [ 37, MoveId.HEAD_SMASH ], + [ 39, MoveId.ROAR ], + [ 43, MoveId.FLARE_BLITZ ], + ], + [SpeciesId.PIGNITE]: [ + [ EVOLVE_MOVE, MoveId.ARM_THRUST ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.ENDURE ], + [ 13, MoveId.DEFENSE_CURL ], + [ 15, MoveId.FLAME_CHARGE ], + [ 20, MoveId.SMOG ], + [ 23, MoveId.ROLLOUT ], + [ 28, MoveId.TAKE_DOWN ], + [ 31, MoveId.HEAT_CRASH ], + [ 36, MoveId.ASSURANCE ], + [ 39, MoveId.FLAMETHROWER ], + [ 44, MoveId.HEAD_SMASH ], + [ 47, MoveId.ROAR ], + [ 52, MoveId.FLARE_BLITZ ], + ], + [SpeciesId.EMBOAR]: [ + [ RELEARN_MOVE, MoveId.ENDURE ], + [ RELEARN_MOVE, MoveId.HAMMER_ARM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.ARM_THRUST ], + [ 13, MoveId.DEFENSE_CURL ], + [ 15, MoveId.FLAME_CHARGE ], + [ 20, MoveId.SMOG ], + [ 23, MoveId.ROLLOUT ], + [ 28, MoveId.TAKE_DOWN ], + [ 31, MoveId.HEAT_CRASH ], + [ 38, MoveId.ASSURANCE ], + [ 43, MoveId.FLAMETHROWER ], + [ 50, MoveId.HEAD_SMASH ], + [ 55, MoveId.ROAR ], + [ 62, MoveId.FLARE_BLITZ ], + ], + [SpeciesId.OSHAWOTT]: [ + [ 1, MoveId.TACKLE ], + [ 5, MoveId.TAIL_WHIP ], + [ 5, MoveId.WATER_GUN ], // Custom, moved from 7 to 5 + [ 11, MoveId.SOAK ], + [ 13, MoveId.FOCUS_ENERGY ], + [ 17, MoveId.RAZOR_SHELL ], + [ 19, MoveId.FURY_CUTTER ], + [ 23, MoveId.WATER_PULSE ], + [ 25, MoveId.AERIAL_ACE ], + [ 29, MoveId.AQUA_JET ], + [ 31, MoveId.ENCORE ], + [ 35, MoveId.AQUA_TAIL ], + [ 37, MoveId.RETALIATE ], + [ 41, MoveId.SWORDS_DANCE ], + [ 43, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.DEWOTT]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.SOAK ], + [ 13, MoveId.FOCUS_ENERGY ], + [ 18, MoveId.RAZOR_SHELL ], + [ 21, MoveId.FURY_CUTTER ], + [ 26, MoveId.WATER_PULSE ], + [ 29, MoveId.AERIAL_ACE ], + [ 34, MoveId.AQUA_JET ], + [ 37, MoveId.ENCORE ], + [ 42, MoveId.AQUA_TAIL ], + [ 45, MoveId.RETALIATE ], + [ 50, MoveId.SWORDS_DANCE ], + [ 53, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.SAMUROTT]: [ + [ EVOLVE_MOVE, MoveId.SLASH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.MEGAHORN ], + [ 1, MoveId.SOAK ], + [ 13, MoveId.FOCUS_ENERGY ], + [ 18, MoveId.RAZOR_SHELL ], + [ 21, MoveId.FURY_CUTTER ], + [ 25, MoveId.WATER_PULSE ], + [ 29, MoveId.AERIAL_ACE ], + [ 34, MoveId.AQUA_JET ], + [ 39, MoveId.ENCORE ], + [ 46, MoveId.AQUA_TAIL ], + [ 51, MoveId.RETALIATE ], + [ 58, MoveId.SWORDS_DANCE ], + [ 63, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.PATRAT]: [ + [ 1, MoveId.TACKLE ], + [ 3, MoveId.LEER ], + [ 6, MoveId.BITE ], + [ 8, MoveId.BIDE ], + [ 11, MoveId.DETECT ], + [ 13, MoveId.SAND_ATTACK ], + [ 16, MoveId.CRUNCH ], + [ 18, MoveId.HYPNOSIS ], + [ 21, MoveId.SUPER_FANG ], + [ 23, MoveId.AFTER_YOU ], + [ 26, MoveId.FOCUS_ENERGY ], + [ 28, MoveId.WORK_UP ], + [ 31, MoveId.HYPER_FANG ], + [ 33, MoveId.NASTY_PLOT ], + [ 36, MoveId.MEAN_LOOK ], + [ 38, MoveId.BATON_PASS ], + [ 41, MoveId.SLAM ], + ], + [SpeciesId.WATCHOG]: [ + [ EVOLVE_MOVE, MoveId.CONFUSE_RAY ], + [ RELEARN_MOVE, MoveId.WORK_UP ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.BITE ], + [ 1, MoveId.LOW_KICK ], + [ 1, MoveId.ROTOTILLER ], + [ 8, MoveId.BIDE ], + [ 11, MoveId.DETECT ], + [ 13, MoveId.SAND_ATTACK ], + [ 16, MoveId.CRUNCH ], + [ 18, MoveId.HYPNOSIS ], + [ 22, MoveId.SUPER_FANG ], + [ 25, MoveId.AFTER_YOU ], + [ 29, MoveId.FOCUS_ENERGY ], + [ 32, MoveId.PSYCH_UP ], + [ 36, MoveId.HYPER_FANG ], + [ 39, MoveId.NASTY_PLOT ], + [ 43, MoveId.MEAN_LOOK ], + [ 46, MoveId.BATON_PASS ], + [ 50, MoveId.SLAM ], + ], + [SpeciesId.LILLIPUP]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 4, MoveId.WORK_UP ], + [ 8, MoveId.BITE ], + [ 12, MoveId.RETALIATE ], + [ 17, MoveId.BABY_DOLL_EYES ], + [ 20, MoveId.PLAY_ROUGH ], + [ 24, MoveId.CRUNCH ], + [ 28, MoveId.TAKE_DOWN ], + [ 32, MoveId.HELPING_HAND ], + [ 36, MoveId.REVERSAL ], + [ 40, MoveId.ROAR ], + [ 44, MoveId.LAST_RESORT ], + [ 48, MoveId.GIGA_IMPACT ], + ], + [SpeciesId.HERDIER]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.BITE ], + [ 1, MoveId.WORK_UP ], + [ 12, MoveId.RETALIATE ], + [ 19, MoveId.BABY_DOLL_EYES ], + [ 24, MoveId.PLAY_ROUGH ], + [ 30, MoveId.CRUNCH ], + [ 36, MoveId.TAKE_DOWN ], + [ 42, MoveId.HELPING_HAND ], + [ 48, MoveId.REVERSAL ], + [ 54, MoveId.ROAR ], + [ 60, MoveId.LAST_RESORT ], + [ 66, MoveId.GIGA_IMPACT ], + ], + [SpeciesId.STOUTLAND]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.BITE ], + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.FIRE_FANG ], + [ 1, MoveId.WORK_UP ], + [ 12, MoveId.RETALIATE ], + [ 19, MoveId.BABY_DOLL_EYES ], + [ 24, MoveId.PLAY_ROUGH ], + [ 30, MoveId.CRUNCH ], + [ 38, MoveId.TAKE_DOWN ], + [ 46, MoveId.HELPING_HAND ], + [ 54, MoveId.REVERSAL ], + [ 62, MoveId.ROAR ], + [ 70, MoveId.LAST_RESORT ], + [ 78, MoveId.GIGA_IMPACT ], + ], + [SpeciesId.PURRLOIN]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 4, MoveId.SAND_ATTACK ], + [ 5, MoveId.FAKE_OUT ], + [ 12, MoveId.FURY_SWIPES ], + [ 16, MoveId.TORMENT ], + [ 21, MoveId.ASSURANCE ], + [ 24, MoveId.HONE_CLAWS ], + [ 28, MoveId.SUCKER_PUNCH ], + [ 32, MoveId.NASTY_PLOT ], + [ 36, MoveId.NIGHT_SLASH ], + [ 40, MoveId.PLAY_ROUGH ], + ], + [SpeciesId.LIEPARD]: [ + [ 1, MoveId.ASSIST ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.FAKE_OUT ], + [ 12, MoveId.FURY_SWIPES ], + [ 16, MoveId.TORMENT ], + [ 23, MoveId.ASSURANCE ], + [ 28, MoveId.HONE_CLAWS ], + [ 34, MoveId.SUCKER_PUNCH ], + [ 40, MoveId.NASTY_PLOT ], + [ 46, MoveId.NIGHT_SLASH ], + [ 52, MoveId.PLAY_ROUGH ], + ], + [SpeciesId.PANSAGE]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.PLAY_NICE ], + [ 4, MoveId.LEER ], + [ 7, MoveId.LICK ], + [ 10, MoveId.VINE_WHIP ], + [ 13, MoveId.FURY_SWIPES ], + [ 16, MoveId.LEECH_SEED ], + [ 19, MoveId.BITE ], + [ 22, MoveId.SEED_BOMB ], + [ 25, MoveId.TORMENT ], + [ 28, MoveId.FLING ], + [ 31, MoveId.ACROBATICS ], + [ 34, MoveId.GRASS_KNOT ], + [ 37, MoveId.RECYCLE ], + [ 40, MoveId.NATURAL_GIFT ], + [ 43, MoveId.CRUNCH ], + ], + [SpeciesId.SIMISAGE]: [ // Previous Stage Relearn Learnset - [ RELEARN_MOVE, Moves.SCRATCH ], - [ RELEARN_MOVE, Moves.PLAY_NICE ], - [ RELEARN_MOVE, Moves.VINE_WHIP ], - [ RELEARN_MOVE, Moves.LEECH_SEED ], - [ RELEARN_MOVE, Moves.BITE ], - [ RELEARN_MOVE, Moves.TORMENT ], - [ RELEARN_MOVE, Moves.FLING ], - [ RELEARN_MOVE, Moves.ACROBATICS ], - [ RELEARN_MOVE, Moves.GRASS_KNOT ], - [ RELEARN_MOVE, Moves.RECYCLE ], - [ RELEARN_MOVE, Moves.NATURAL_GIFT ], - [ RELEARN_MOVE, Moves.CRUNCH ], - [ 1, Moves.LEER ], - [ 1, Moves.LICK ], - [ 1, Moves.FURY_SWIPES ], - [ 1, Moves.SEED_BOMB ], + [ RELEARN_MOVE, MoveId.SCRATCH ], + [ RELEARN_MOVE, MoveId.PLAY_NICE ], + [ RELEARN_MOVE, MoveId.VINE_WHIP ], + [ RELEARN_MOVE, MoveId.LEECH_SEED ], + [ RELEARN_MOVE, MoveId.BITE ], + [ RELEARN_MOVE, MoveId.TORMENT ], + [ RELEARN_MOVE, MoveId.FLING ], + [ RELEARN_MOVE, MoveId.ACROBATICS ], + [ RELEARN_MOVE, MoveId.GRASS_KNOT ], + [ RELEARN_MOVE, MoveId.RECYCLE ], + [ RELEARN_MOVE, MoveId.NATURAL_GIFT ], + [ RELEARN_MOVE, MoveId.CRUNCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LICK ], + [ 1, MoveId.FURY_SWIPES ], + [ 1, MoveId.SEED_BOMB ], ], - [Species.PANSEAR]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.PLAY_NICE ], - [ 4, Moves.LEER ], - [ 7, Moves.LICK ], - [ 10, Moves.INCINERATE ], - [ 13, Moves.FURY_SWIPES ], - [ 16, Moves.YAWN ], - [ 19, Moves.BITE ], - [ 22, Moves.FLAME_BURST ], - [ 25, Moves.AMNESIA ], - [ 28, Moves.FLING ], - [ 31, Moves.ACROBATICS ], - [ 34, Moves.FIRE_BLAST ], - [ 37, Moves.RECYCLE ], - [ 40, Moves.NATURAL_GIFT ], - [ 43, Moves.CRUNCH ], + [SpeciesId.PANSEAR]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.PLAY_NICE ], + [ 4, MoveId.LEER ], + [ 7, MoveId.LICK ], + [ 10, MoveId.INCINERATE ], + [ 13, MoveId.FURY_SWIPES ], + [ 16, MoveId.YAWN ], + [ 19, MoveId.BITE ], + [ 22, MoveId.FLAME_BURST ], + [ 25, MoveId.AMNESIA ], + [ 28, MoveId.FLING ], + [ 31, MoveId.ACROBATICS ], + [ 34, MoveId.FIRE_BLAST ], + [ 37, MoveId.RECYCLE ], + [ 40, MoveId.NATURAL_GIFT ], + [ 43, MoveId.CRUNCH ], ], - [Species.SIMISEAR]: [ + [SpeciesId.SIMISEAR]: [ // Previous Stage Relearn Learnset - [ RELEARN_MOVE, Moves.SCRATCH ], - [ RELEARN_MOVE, Moves.PLAY_NICE ], - [ RELEARN_MOVE, Moves.INCINERATE ], - [ RELEARN_MOVE, Moves.YAWN ], - [ RELEARN_MOVE, Moves.BITE ], - [ RELEARN_MOVE, Moves.AMNESIA ], - [ RELEARN_MOVE, Moves.FLING ], - [ RELEARN_MOVE, Moves.ACROBATICS ], - [ RELEARN_MOVE, Moves.FIRE_BLAST ], - [ RELEARN_MOVE, Moves.RECYCLE ], - [ RELEARN_MOVE, Moves.NATURAL_GIFT ], - [ RELEARN_MOVE, Moves.CRUNCH ], - [ 1, Moves.LEER ], - [ 1, Moves.LICK ], - [ 1, Moves.FURY_SWIPES ], - [ 1, Moves.FLAME_BURST ], + [ RELEARN_MOVE, MoveId.SCRATCH ], + [ RELEARN_MOVE, MoveId.PLAY_NICE ], + [ RELEARN_MOVE, MoveId.INCINERATE ], + [ RELEARN_MOVE, MoveId.YAWN ], + [ RELEARN_MOVE, MoveId.BITE ], + [ RELEARN_MOVE, MoveId.AMNESIA ], + [ RELEARN_MOVE, MoveId.FLING ], + [ RELEARN_MOVE, MoveId.ACROBATICS ], + [ RELEARN_MOVE, MoveId.FIRE_BLAST ], + [ RELEARN_MOVE, MoveId.RECYCLE ], + [ RELEARN_MOVE, MoveId.NATURAL_GIFT ], + [ RELEARN_MOVE, MoveId.CRUNCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LICK ], + [ 1, MoveId.FURY_SWIPES ], + [ 1, MoveId.FLAME_BURST ], ], - [Species.PANPOUR]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.PLAY_NICE ], - [ 4, Moves.LEER ], - [ 7, Moves.LICK ], - [ 10, Moves.WATER_GUN ], - [ 13, Moves.FURY_SWIPES ], - [ 16, Moves.WATER_SPORT ], - [ 19, Moves.BITE ], - [ 22, Moves.SCALD ], - [ 25, Moves.TAUNT ], - [ 28, Moves.FLING ], - [ 31, Moves.ACROBATICS ], - [ 34, Moves.BRINE ], - [ 37, Moves.RECYCLE ], - [ 40, Moves.NATURAL_GIFT ], - [ 43, Moves.CRUNCH ], + [SpeciesId.PANPOUR]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.PLAY_NICE ], + [ 4, MoveId.LEER ], + [ 7, MoveId.LICK ], + [ 10, MoveId.WATER_GUN ], + [ 13, MoveId.FURY_SWIPES ], + [ 16, MoveId.WATER_SPORT ], + [ 19, MoveId.BITE ], + [ 22, MoveId.SCALD ], + [ 25, MoveId.TAUNT ], + [ 28, MoveId.FLING ], + [ 31, MoveId.ACROBATICS ], + [ 34, MoveId.BRINE ], + [ 37, MoveId.RECYCLE ], + [ 40, MoveId.NATURAL_GIFT ], + [ 43, MoveId.CRUNCH ], ], - [Species.SIMIPOUR]: [ + [SpeciesId.SIMIPOUR]: [ // Previous Stage Relearn Learnset - [ RELEARN_MOVE, Moves.SCRATCH ], - [ RELEARN_MOVE, Moves.PLAY_NICE ], - [ RELEARN_MOVE, Moves.WATER_GUN ], - [ RELEARN_MOVE, Moves.WATER_SPORT ], - [ RELEARN_MOVE, Moves.BITE ], - [ RELEARN_MOVE, Moves.TAUNT ], - [ RELEARN_MOVE, Moves.FLING ], - [ RELEARN_MOVE, Moves.ACROBATICS ], - [ RELEARN_MOVE, Moves.BRINE ], - [ RELEARN_MOVE, Moves.RECYCLE ], - [ RELEARN_MOVE, Moves.NATURAL_GIFT ], - [ RELEARN_MOVE, Moves.CRUNCH ], - [ 1, Moves.LEER ], - [ 1, Moves.LICK ], - [ 1, Moves.FURY_SWIPES ], - [ 1, Moves.SCALD ], - ], - [Species.MUNNA]: [ - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.STORED_POWER ], - [ 1, Moves.PSYWAVE ], - [ 4, Moves.HYPNOSIS ], - [ 8, Moves.PSYBEAM ], - [ 12, Moves.IMPRISON ], - [ 16, Moves.MOONLIGHT ], - [ 20, Moves.MAGIC_COAT ], - [ 24, Moves.ZEN_HEADBUTT ], - [ 28, Moves.CALM_MIND ], - [ 32, Moves.YAWN ], - [ 36, Moves.PSYCHIC ], - [ 40, Moves.MOONBLAST ], - [ 44, Moves.DREAM_EATER ], - [ 48, Moves.FUTURE_SIGHT ], - [ 52, Moves.WONDER_ROOM ], - ], - [Species.MUSHARNA]: [ - [ 1, Moves.PSYWAVE ], // Previous Stage Move - [ 1, Moves.PSYBEAM ], - [ 1, Moves.PSYCHIC ], - [ 1, Moves.HYPNOSIS ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.LUCKY_CHANT ], - [ 1, Moves.DREAM_EATER ], - [ 1, Moves.MOONLIGHT ], - [ 1, Moves.FUTURE_SIGHT ], - [ 1, Moves.MAGIC_COAT ], - [ 1, Moves.YAWN ], - [ 1, Moves.IMPRISON ], - [ 1, Moves.CALM_MIND ], - [ 1, Moves.ZEN_HEADBUTT ], - [ 1, Moves.WONDER_ROOM ], - [ 1, Moves.STORED_POWER ], - [ 1, Moves.MOONBLAST ], - [ 1, Moves.PSYCHIC_TERRAIN ], - ], - [Species.PIDOVE]: [ - [ 1, Moves.GUST ], - [ 1, Moves.GROWL ], - [ 4, Moves.LEER ], - [ 8, Moves.QUICK_ATTACK ], - [ 12, Moves.TAUNT ], - [ 16, Moves.AIR_CUTTER ], - [ 20, Moves.SWAGGER ], - [ 24, Moves.FEATHER_DANCE ], - [ 28, Moves.DETECT ], - [ 32, Moves.AIR_SLASH ], - [ 36, Moves.ROOST ], - [ 40, Moves.TAILWIND ], - [ 44, Moves.SKY_ATTACK ], - ], - [Species.TRANQUILL]: [ - [ 1, Moves.GUST ], - [ 1, Moves.LEER ], - [ 1, Moves.GROWL ], - [ 1, Moves.QUICK_ATTACK ], - [ 12, Moves.TAUNT ], - [ 16, Moves.AIR_CUTTER ], - [ 20, Moves.SWAGGER ], - [ 26, Moves.FEATHER_DANCE ], - [ 34, Moves.DETECT ], - [ 38, Moves.AIR_SLASH ], - [ 44, Moves.ROOST ], - [ 50, Moves.TAILWIND ], - [ 56, Moves.SKY_ATTACK ], - ], - [Species.UNFEZANT]: [ - [ 1, Moves.GUST ], - [ 1, Moves.LEER ], - [ 1, Moves.GROWL ], - [ 1, Moves.QUICK_ATTACK ], - [ 12, Moves.TAUNT ], - [ 16, Moves.AIR_CUTTER ], - [ 20, Moves.SWAGGER ], - [ 26, Moves.FEATHER_DANCE ], - [ 36, Moves.DETECT ], - [ 42, Moves.AIR_SLASH ], - [ 50, Moves.ROOST ], - [ 58, Moves.TAILWIND ], - [ 66, Moves.SKY_ATTACK ], - ], - [Species.BLITZLE]: [ - [ 1, Moves.QUICK_ATTACK ], - [ 4, Moves.TAIL_WHIP ], - [ 8, Moves.CHARGE ], - [ 11, Moves.SHOCK_WAVE ], - [ 15, Moves.THUNDER_WAVE ], - [ 18, Moves.FLAME_CHARGE ], - [ 22, Moves.SPARK ], - [ 25, Moves.STOMP ], - [ 29, Moves.DISCHARGE ], - [ 33, Moves.AGILITY ], - [ 35, Moves.WILD_CHARGE ], - [ 40, Moves.THRASH ], - ], - [Species.ZEBSTRIKA]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.CHARGE ], - [ 1, Moves.ION_DELUGE ], - [ 11, Moves.SHOCK_WAVE ], - [ 18, Moves.FLAME_CHARGE ], - [ 25, Moves.SPARK ], - [ 31, Moves.STOMP ], - [ 36, Moves.DISCHARGE ], - [ 42, Moves.AGILITY ], - [ 47, Moves.WILD_CHARGE ], - [ 53, Moves.THRASH ], - ], - [Species.ROGGENROLA]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 4, Moves.HARDEN ], - [ 8, Moves.STEALTH_ROCK ], - [ 12, Moves.MUD_SLAP ], - [ 16, Moves.SMACK_DOWN ], - [ 20, Moves.IRON_DEFENSE ], - [ 24, Moves.HEADBUTT ], - [ 28, Moves.ROCK_SLIDE ], - [ 32, Moves.ROCK_BLAST ], - [ 36, Moves.SANDSTORM ], - [ 40, Moves.STONE_EDGE ], - [ 44, Moves.EXPLOSION ], - ], - [Species.BOLDORE]: [ - [ EVOLVE_MOVE, Moves.POWER_GEM ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.STEALTH_ROCK ], - [ 12, Moves.MUD_SLAP ], - [ 16, Moves.SMACK_DOWN ], - [ 20, Moves.IRON_DEFENSE ], - [ 24, Moves.HEADBUTT ], - [ 30, Moves.ROCK_SLIDE ], - [ 36, Moves.ROCK_BLAST ], - [ 42, Moves.SANDSTORM ], - [ 48, Moves.STONE_EDGE ], - [ 54, Moves.EXPLOSION ], - ], - [Species.GIGALITH]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.POWER_GEM ], - [ 1, Moves.STEALTH_ROCK ], - [ 12, Moves.MUD_SLAP ], - [ 16, Moves.SMACK_DOWN ], - [ 20, Moves.IRON_DEFENSE ], - [ 24, Moves.HEADBUTT ], - [ 30, Moves.ROCK_SLIDE ], - [ 36, Moves.ROCK_BLAST ], - [ 42, Moves.SANDSTORM ], - [ 48, Moves.STONE_EDGE ], - [ 54, Moves.EXPLOSION ], - ], - [Species.WOOBAT]: [ - [ 1, Moves.GUST ], - [ 1, Moves.ATTRACT ], - [ 5, Moves.CONFUSION ], - [ 10, Moves.ENDEAVOR ], - [ 15, Moves.AIR_CUTTER ], - [ 20, Moves.IMPRISON ], - [ 25, Moves.ASSURANCE ], - [ 30, Moves.AMNESIA ], - [ 35, Moves.AIR_SLASH ], - [ 40, Moves.PSYCHIC ], - [ 45, Moves.CALM_MIND ], - [ 50, Moves.FUTURE_SIGHT ], - [ 55, Moves.SIMPLE_BEAM ], - ], - [Species.SWOOBAT]: [ - [ 1, Moves.GUST ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.ATTRACT ], - [ 1, Moves.ENDEAVOR ], - [ 15, Moves.AIR_CUTTER ], - [ 20, Moves.IMPRISON ], - [ 25, Moves.ASSURANCE ], - [ 30, Moves.AMNESIA ], - [ 35, Moves.AIR_SLASH ], - [ 40, Moves.PSYCHIC ], - [ 45, Moves.CALM_MIND ], - [ 50, Moves.FUTURE_SIGHT ], - [ 55, Moves.SIMPLE_BEAM ], - ], - [Species.DRILBUR]: [ - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.MUD_SPORT ], - [ 4, Moves.SCRATCH ], - [ 8, Moves.HONE_CLAWS ], - [ 12, Moves.FURY_SWIPES ], - [ 16, Moves.METAL_CLAW ], - [ 20, Moves.SANDSTORM ], - [ 24, Moves.CRUSH_CLAW ], - [ 28, Moves.ROCK_SLIDE ], - [ 32, Moves.DIG ], - [ 36, Moves.SWORDS_DANCE ], - [ 40, Moves.DRILL_RUN ], - [ 44, Moves.EARTHQUAKE ], - [ 48, Moves.FISSURE ], - ], - [Species.EXCADRILL]: [ - [ EVOLVE_MOVE, Moves.HORN_DRILL ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.MUD_SPORT ], - [ 1, Moves.ROTOTILLER ], - [ 1, Moves.HONE_CLAWS ], - [ 12, Moves.FURY_SWIPES ], - [ 16, Moves.METAL_CLAW ], - [ 20, Moves.SANDSTORM ], - [ 24, Moves.CRUSH_CLAW ], - [ 28, Moves.ROCK_SLIDE ], - [ 34, Moves.DIG ], - [ 40, Moves.SWORDS_DANCE ], - [ 46, Moves.DRILL_RUN ], - [ 52, Moves.EARTHQUAKE ], - [ 58, Moves.FISSURE ], - ], - [Species.AUDINO]: [ - [ 1, Moves.POUND ], - [ 1, Moves.PLAY_NICE ], - [ 4, Moves.DISARMING_VOICE ], - [ 9, Moves.BABY_DOLL_EYES ], - [ 12, Moves.HELPING_HAND ], - [ 16, Moves.GROWL ], - [ 20, Moves.ZEN_HEADBUTT ], - [ 24, Moves.LIFE_DEW ], - [ 28, Moves.AFTER_YOU ], - [ 32, Moves.TAKE_DOWN ], - [ 36, Moves.SIMPLE_BEAM ], - [ 40, Moves.HYPER_VOICE ], - [ 44, Moves.HEAL_PULSE ], - [ 48, Moves.DOUBLE_EDGE ], - [ 52, Moves.ENTRAINMENT ], - [ 56, Moves.MISTY_TERRAIN ], - [ 60, Moves.LAST_RESORT ], - ], - [Species.TIMBURR]: [ - [ 1, Moves.POUND ], - [ 1, Moves.LEER ], - [ 4, Moves.LOW_KICK ], - [ 8, Moves.ROCK_THROW ], - [ 12, Moves.FOCUS_ENERGY ], - [ 16, Moves.BULK_UP ], - [ 20, Moves.ROCK_SLIDE ], - [ 24, Moves.SLAM ], - [ 28, Moves.SCARY_FACE ], - [ 32, Moves.DYNAMIC_PUNCH ], - [ 36, Moves.HAMMER_ARM ], - [ 40, Moves.STONE_EDGE ], - [ 44, Moves.SUPERPOWER ], - [ 48, Moves.FOCUS_PUNCH ], - ], - [Species.GURDURR]: [ - [ 1, Moves.POUND ], - [ 1, Moves.LEER ], - [ 1, Moves.LOW_KICK ], - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.BIDE ], - [ 12, Moves.FOCUS_ENERGY ], - [ 16, Moves.BULK_UP ], - [ 20, Moves.ROCK_SLIDE ], - [ 24, Moves.SLAM ], - [ 30, Moves.SCARY_FACE ], - [ 36, Moves.DYNAMIC_PUNCH ], - [ 42, Moves.HAMMER_ARM ], - [ 48, Moves.STONE_EDGE ], - [ 54, Moves.SUPERPOWER ], - [ 60, Moves.FOCUS_PUNCH ], - ], - [Species.CONKELDURR]: [ - [ 1, Moves.POUND ], - [ 1, Moves.LEER ], - [ 1, Moves.LOW_KICK ], - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.BIDE ], - [ 12, Moves.FOCUS_ENERGY ], - [ 16, Moves.BULK_UP ], - [ 20, Moves.ROCK_SLIDE ], - [ 24, Moves.SLAM ], - [ 30, Moves.SCARY_FACE ], - [ 36, Moves.DYNAMIC_PUNCH ], - [ 42, Moves.HAMMER_ARM ], - [ 48, Moves.STONE_EDGE ], - [ 54, Moves.SUPERPOWER ], - [ 60, Moves.FOCUS_PUNCH ], - ], - [Species.TYMPOLE]: [ - [ 1, Moves.BUBBLE ], //USUM - [ 1, Moves.GROWL ], - [ 1, Moves.ECHOED_VOICE ], - [ 4, Moves.ACID ], - [ 8, Moves.SUPERSONIC ], - [ 12, Moves.MUD_SHOT ], - [ 16, Moves.ROUND ], - [ 20, Moves.BUBBLE_BEAM ], - [ 24, Moves.FLAIL ], - [ 28, Moves.UPROAR ], - [ 32, Moves.AQUA_RING ], - [ 36, Moves.HYPER_VOICE ], - [ 40, Moves.MUDDY_WATER ], - [ 44, Moves.RAIN_DANCE ], - [ 48, Moves.HYDRO_PUMP ], - ], - [Species.PALPITOAD]: [ - [ 1, Moves.BUBBLE ], //USUM - [ 1, Moves.GROWL ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.ACID ], - [ 1, Moves.ECHOED_VOICE ], - [ 12, Moves.MUD_SHOT ], - [ 16, Moves.ROUND ], - [ 20, Moves.BUBBLE_BEAM ], - [ 24, Moves.FLAIL ], - [ 30, Moves.UPROAR ], - [ 37, Moves.AQUA_RING ], - [ 42, Moves.HYPER_VOICE ], - [ 48, Moves.MUDDY_WATER ], - [ 54, Moves.RAIN_DANCE ], - [ 60, Moves.HYDRO_PUMP ], - ], - [Species.SEISMITOAD]: [ - [ EVOLVE_MOVE, Moves.DRAIN_PUNCH ], - [ 1, Moves.BUBBLE ], //USUM - [ 1, Moves.GROWL ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.ACID ], - [ 1, Moves.GASTRO_ACID ], - [ 1, Moves.ECHOED_VOICE ], - [ 12, Moves.MUD_SHOT ], - [ 16, Moves.ROUND ], - [ 20, Moves.BUBBLE_BEAM ], - [ 24, Moves.FLAIL ], - [ 30, Moves.UPROAR ], - [ 39, Moves.AQUA_RING ], - [ 46, Moves.HYPER_VOICE ], - [ 54, Moves.MUDDY_WATER ], - [ 62, Moves.RAIN_DANCE ], - [ 70, Moves.HYDRO_PUMP ], - ], - [Species.THROH]: [ - [ 1, Moves.ROCK_SMASH ], // Custom - [ 1, Moves.LEER ], - [ 1, Moves.BIDE ], - [ 1, Moves.MAT_BLOCK ], - [ 1, Moves.BIND ], - [ 5, Moves.FOCUS_ENERGY ], - [ 10, Moves.CIRCLE_THROW ], - [ 15, Moves.WIDE_GUARD ], - [ 20, Moves.REVENGE ], - [ 25, Moves.BULK_UP ], - [ 30, Moves.STORM_THROW ], - [ 35, Moves.VITAL_THROW ], - [ 40, Moves.SEISMIC_TOSS ], - [ 45, Moves.ENDURE ], - [ 50, Moves.REVERSAL ], - [ 55, Moves.SUPERPOWER ], - ], - [Species.SAWK]: [ - [ 1, Moves.LEER ], - [ 1, Moves.ROCK_SMASH ], - [ 1, Moves.BIDE ], - [ 5, Moves.FOCUS_ENERGY ], - [ 10, Moves.DOUBLE_KICK ], - [ 15, Moves.QUICK_GUARD ], - [ 20, Moves.LOW_SWEEP ], - [ 25, Moves.BULK_UP ], - [ 30, Moves.RETALIATE ], - [ 35, Moves.BRICK_BREAK ], - [ 40, Moves.COUNTER ], - [ 45, Moves.ENDURE ], - [ 50, Moves.REVERSAL ], - [ 55, Moves.CLOSE_COMBAT ], - ], - [Species.SEWADDLE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.STRING_SHOT ], - [ 8, Moves.BUG_BITE ], - [ 15, Moves.RAZOR_LEAF ], - [ 22, Moves.STRUGGLE_BUG ], - [ 29, Moves.ENDURE ], - [ 31, Moves.STICKY_WEB ], - [ 36, Moves.BUG_BUZZ ], - [ 43, Moves.FLAIL ], - ], - [Species.SWADLOON]: [ - [ EVOLVE_MOVE, Moves.PROTECT ], - [ 1, Moves.TACKLE ], - [ 1, Moves.RAZOR_LEAF ], - [ 1, Moves.STRING_SHOT ], - [ 1, Moves.BUG_BITE ], - [ 1, Moves.GRASS_WHISTLE ], - [ 22, Moves.STRUGGLE_BUG ], - [ 29, Moves.ENDURE ], - [ 31, Moves.STICKY_WEB ], - [ 36, Moves.BUG_BUZZ ], - [ 43, Moves.FLAIL ], - ], - [Species.LEAVANNY]: [ - [ EVOLVE_MOVE, Moves.SLASH ], - [ RELEARN_MOVE, Moves.BUG_BITE ], - [ RELEARN_MOVE, Moves.STICKY_WEB ], // Previous Stage Move - [ RELEARN_MOVE, Moves.BUG_BUZZ ], // Previous Stage Move - [ 1, Moves.PROTECT ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.RAZOR_LEAF ], - [ 1, Moves.STRING_SHOT ], - [ 1, Moves.GRASS_WHISTLE ], // Previous Stage Move - [ 1, Moves.ENDURE ], // Previous Stage Move - [ 1, Moves.FLAIL ], // Previous Stage Move - [ 1, Moves.FALSE_SWIPE ], - [ 22, Moves.STRUGGLE_BUG ], - [ 29, Moves.FELL_STINGER ], - [ 32, Moves.HELPING_HAND ], - [ 36, Moves.LEAF_BLADE ], - [ 39, Moves.X_SCISSOR ], - [ 43, Moves.ENTRAINMENT ], - [ 46, Moves.SWORDS_DANCE ], - [ 50, Moves.LEAF_STORM ], - ], - [Species.VENIPEDE]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.DEFENSE_CURL ], - [ 4, Moves.ROLLOUT ], - [ 8, Moves.PROTECT ], - [ 12, Moves.POISON_TAIL ], - [ 16, Moves.SCREECH ], - [ 20, Moves.BUG_BITE ], - [ 24, Moves.VENOSHOCK ], - [ 28, Moves.TAKE_DOWN ], - [ 32, Moves.AGILITY ], - [ 36, Moves.TOXIC ], - [ 40, Moves.VENOM_DRENCH ], - [ 44, Moves.DOUBLE_EDGE ], - ], - [Species.WHIRLIPEDE]: [ - [ EVOLVE_MOVE, Moves.IRON_DEFENSE ], - [ 1, Moves.POISON_STING ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.PROTECT ], - [ 1, Moves.ROLLOUT ], - [ 12, Moves.POISON_TAIL ], - [ 16, Moves.SCREECH ], - [ 20, Moves.BUG_BITE ], - [ 26, Moves.VENOSHOCK ], - [ 32, Moves.TAKE_DOWN ], - [ 38, Moves.AGILITY ], - [ 44, Moves.TOXIC ], - [ 50, Moves.VENOM_DRENCH ], - [ 56, Moves.DOUBLE_EDGE ], - ], - [Species.SCOLIPEDE]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.PROTECT ], - [ 1, Moves.ROLLOUT ], - [ 1, Moves.BATON_PASS ], - [ 1, Moves.IRON_DEFENSE ], - [ 12, Moves.POISON_TAIL ], - [ 16, Moves.SCREECH ], - [ 20, Moves.BUG_BITE ], - [ 26, Moves.VENOSHOCK ], - [ 34, Moves.TAKE_DOWN ], - [ 42, Moves.AGILITY ], - [ 50, Moves.TOXIC ], - [ 58, Moves.VENOM_DRENCH ], - [ 66, Moves.DOUBLE_EDGE ], - [ 74, Moves.MEGAHORN ], - ], - [Species.COTTONEE]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.HELPING_HAND ], - [ 3, Moves.FAIRY_WIND ], - [ 6, Moves.STUN_SPORE ], - [ 12, Moves.MEGA_DRAIN ], - [ 15, Moves.RAZOR_LEAF ], - [ 18, Moves.GROWTH ], - [ 21, Moves.POISON_POWDER ], - [ 24, Moves.GIGA_DRAIN ], - [ 27, Moves.CHARM ], - [ 30, Moves.LEECH_SEED ], - [ 33, Moves.COTTON_SPORE ], - [ 36, Moves.ENERGY_BALL ], - [ 39, Moves.SUNNY_DAY ], - [ 42, Moves.ENDEAVOR ], - [ 45, Moves.COTTON_GUARD ], - [ 48, Moves.SOLAR_BEAM ], - ], - [Species.WHIMSICOTT]: [ - [ 1, Moves.GUST ], - [ 1, Moves.ABSORB ], - [ 1, Moves.MEGA_DRAIN ], - [ 1, Moves.LEECH_SEED ], - [ 1, Moves.GROWTH ], - [ 1, Moves.RAZOR_LEAF ], - [ 1, Moves.SOLAR_BEAM ], - [ 1, Moves.POISON_POWDER ], - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.COTTON_SPORE ], - [ 1, Moves.GIGA_DRAIN ], - [ 1, Moves.CHARM ], - [ 1, Moves.SUNNY_DAY ], - [ 1, Moves.MEMENTO ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.ENDEAVOR ], - [ 1, Moves.TAILWIND ], - [ 1, Moves.ENERGY_BALL ], - [ 1, Moves.COTTON_GUARD ], - [ 1, Moves.HURRICANE ], - [ 1, Moves.FAIRY_WIND ], - [ 1, Moves.MOONBLAST ], - ], - [Species.PETILIL]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.GROWTH ], - [ 3, Moves.HELPING_HAND ], - [ 6, Moves.STUN_SPORE ], - [ 9, Moves.MEGA_DRAIN ], - [ 12, Moves.CHARM ], - [ 15, Moves.MAGICAL_LEAF ], - [ 18, Moves.SLEEP_POWDER ], - [ 21, Moves.GIGA_DRAIN ], - [ 24, Moves.LEECH_SEED ], - [ 27, Moves.AFTER_YOU ], - [ 30, Moves.ENERGY_BALL ], - [ 33, Moves.SYNTHESIS ], - [ 36, Moves.SUNNY_DAY ], - [ 39, Moves.ENTRAINMENT ], - [ 42, Moves.LEAF_STORM ], - ], - [Species.LILLIGANT]: [ - [ EVOLVE_MOVE, Moves.PETAL_DANCE ], - [ 1, Moves.ABSORB ], - [ 1, Moves.MEGA_DRAIN ], - [ 1, Moves.LEECH_SEED ], - [ 1, Moves.GROWTH ], - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.SLEEP_POWDER ], - [ 1, Moves.GIGA_DRAIN ], - [ 1, Moves.CHARM ], - [ 1, Moves.SYNTHESIS ], - [ 1, Moves.SUNNY_DAY ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.TEETER_DANCE ], - [ 1, Moves.ENERGY_BALL ], - [ 1, Moves.LEAF_STORM ], - [ 1, Moves.QUIVER_DANCE ], - [ 1, Moves.ENTRAINMENT ], - [ 1, Moves.AFTER_YOU ], - [ 1, Moves.PETAL_BLIZZARD ], - [ 5, Moves.MAGICAL_LEAF ], - ], - [Species.BASCULIN]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], - [ 4, Moves.TACKLE ], - [ 8, Moves.FLAIL ], - [ 12, Moves.AQUA_JET ], - [ 16, Moves.BITE ], - [ 20, Moves.SCARY_FACE ], - [ 24, Moves.HEADBUTT ], - [ 28, Moves.SOAK ], - [ 32, Moves.CRUNCH ], - [ 36, Moves.TAKE_DOWN ], - [ 40, Moves.FINAL_GAMBIT ], - [ 44, Moves.WAVE_CRASH ], - [ 48, Moves.THRASH ], - [ 52, Moves.DOUBLE_EDGE ], - [ 56, Moves.HEAD_SMASH ], - ], - [Species.SANDILE]: [ - [ 1, Moves.LEER ], - [ 1, Moves.POWER_TRIP ], - [ 3, Moves.SAND_ATTACK ], - [ 6, Moves.HONE_CLAWS ], - [ 9, Moves.SAND_TOMB ], - [ 12, Moves.SCARY_FACE ], - [ 15, Moves.BITE ], - [ 18, Moves.TORMENT ], - [ 21, Moves.DIG ], - [ 24, Moves.SWAGGER ], - [ 27, Moves.CRUNCH ], - [ 30, Moves.SANDSTORM ], - [ 33, Moves.FOUL_PLAY ], - [ 36, Moves.EARTHQUAKE ], - [ 39, Moves.THRASH ], - ], - [Species.KROKOROK]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.LEER ], - [ 1, Moves.HONE_CLAWS ], - [ 1, Moves.POWER_TRIP ], - [ 9, Moves.SAND_TOMB ], - [ 12, Moves.SCARY_FACE ], - [ 15, Moves.BITE ], - [ 18, Moves.TORMENT ], - [ 21, Moves.DIG ], - [ 24, Moves.SWAGGER ], - [ 27, Moves.CRUNCH ], - [ 32, Moves.SANDSTORM ], - [ 35, Moves.FOUL_PLAY ], - [ 42, Moves.EARTHQUAKE ], - [ 47, Moves.THRASH ], - ], - [Species.KROOKODILE]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.LEER ], - [ 1, Moves.HONE_CLAWS ], - [ 1, Moves.POWER_TRIP ], - [ 9, Moves.SAND_TOMB ], - [ 12, Moves.SCARY_FACE ], - [ 15, Moves.BITE ], - [ 18, Moves.TORMENT ], - [ 21, Moves.DIG ], - [ 24, Moves.SWAGGER ], - [ 27, Moves.CRUNCH ], - [ 32, Moves.SANDSTORM ], - [ 35, Moves.FOUL_PLAY ], - [ 44, Moves.EARTHQUAKE ], - [ 51, Moves.THRASH ], - [ 58, Moves.OUTRAGE ], - ], - [Species.DARUMAKA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.EMBER ], - [ 4, Moves.TAUNT ], - [ 8, Moves.BITE ], - [ 12, Moves.INCINERATE ], - [ 16, Moves.WORK_UP ], - [ 20, Moves.FIRE_FANG ], - [ 24, Moves.HEADBUTT ], - [ 28, Moves.FIRE_PUNCH ], - [ 32, Moves.UPROAR ], - [ 36, Moves.BELLY_DRUM ], - [ 40, Moves.FLARE_BLITZ ], - [ 44, Moves.THRASH ], - [ 48, Moves.SUPERPOWER ], - ], - [Species.DARMANITAN]: [ - [ EVOLVE_MOVE, Moves.HAMMER_ARM ], - [ 1, Moves.TACKLE ], - [ 1, Moves.BITE ], - [ 1, Moves.EMBER ], - [ 1, Moves.TAUNT ], - [ 12, Moves.INCINERATE ], - [ 16, Moves.WORK_UP ], - [ 20, Moves.FIRE_FANG ], - [ 24, Moves.HEADBUTT ], - [ 28, Moves.FIRE_PUNCH ], - [ 32, Moves.UPROAR ], - [ 38, Moves.BELLY_DRUM ], - [ 44, Moves.FLARE_BLITZ ], - [ 50, Moves.THRASH ], - [ 56, Moves.SUPERPOWER ], - ], - [Species.MARACTUS]: [ - [ 1, Moves.PECK ], - [ 1, Moves.ABSORB ], - [ 1, Moves.INGRAIN ], - [ 1, Moves.AFTER_YOU ], - [ 1, Moves.SPIKY_SHIELD ], - [ 4, Moves.GROWTH ], - [ 8, Moves.MEGA_DRAIN ], - [ 12, Moves.LEECH_SEED ], - [ 16, Moves.SUCKER_PUNCH ], - [ 20, Moves.PIN_MISSILE ], - [ 24, Moves.GIGA_DRAIN ], - [ 28, Moves.SWEET_SCENT ], - [ 32, Moves.SYNTHESIS ], - [ 36, Moves.PETAL_BLIZZARD ], - [ 40, Moves.COTTON_SPORE ], - [ 44, Moves.SUNNY_DAY ], - [ 48, Moves.SOLAR_BEAM ], - [ 52, Moves.ACUPRESSURE ], - [ 56, Moves.PETAL_DANCE ], - [ 60, Moves.COTTON_GUARD ], - ], - [Species.DWEBBLE]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.FURY_CUTTER ], - [ 4, Moves.WITHDRAW ], - [ 8, Moves.SMACK_DOWN ], - [ 12, Moves.BUG_BITE ], - [ 16, Moves.FLAIL ], - [ 20, Moves.SLASH ], - [ 24, Moves.ROCK_SLIDE ], - [ 28, Moves.STEALTH_ROCK ], - [ 32, Moves.ROCK_BLAST ], - [ 36, Moves.X_SCISSOR ], - [ 40, Moves.ROCK_POLISH ], - [ 44, Moves.SHELL_SMASH ], - [ 48, Moves.ROCK_WRECKER ], - ], - [Species.CRUSTLE]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.SMACK_DOWN ], - [ 12, Moves.BUG_BITE ], - [ 16, Moves.FLAIL ], - [ 20, Moves.SLASH ], - [ 24, Moves.ROCK_SLIDE ], - [ 28, Moves.STEALTH_ROCK ], - [ 32, Moves.ROCK_BLAST ], - [ 38, Moves.X_SCISSOR ], - [ 44, Moves.ROCK_POLISH ], - [ 50, Moves.SHELL_SMASH ], - [ 56, Moves.ROCK_WRECKER ], - ], - [Species.SCRAGGY]: [ - [ 1, Moves.LEER ], - [ 1, Moves.LOW_KICK ], - [ 4, Moves.PAYBACK ], - [ 8, Moves.HEADBUTT ], - [ 12, Moves.SAND_ATTACK ], - [ 16, Moves.FACADE ], - [ 20, Moves.PROTECT ], - [ 24, Moves.BEAT_UP ], - [ 28, Moves.SCARY_FACE ], - [ 32, Moves.BRICK_BREAK ], - [ 36, Moves.SWAGGER ], - [ 40, Moves.CRUNCH ], - [ 44, Moves.HIGH_JUMP_KICK ], - [ 48, Moves.FOCUS_PUNCH ], - [ 52, Moves.HEAD_SMASH ], - ], - [Species.SCRAFTY]: [ - [ 1, Moves.HEADBUTT ], - [ 1, Moves.LEER ], - [ 1, Moves.LOW_KICK ], - [ 1, Moves.PAYBACK ], - [ 1, Moves.FEINT_ATTACK ], - [ 12, Moves.SAND_ATTACK ], - [ 16, Moves.FACADE ], - [ 20, Moves.PROTECT ], - [ 24, Moves.BEAT_UP ], - [ 28, Moves.SCARY_FACE ], - [ 32, Moves.BRICK_BREAK ], - [ 36, Moves.SWAGGER ], - [ 42, Moves.CRUNCH ], - [ 48, Moves.HIGH_JUMP_KICK ], - [ 54, Moves.FOCUS_PUNCH ], - [ 60, Moves.HEAD_SMASH ], - ], - [Species.SIGILYPH]: [ - [ 1, Moves.GUST ], - [ 1, Moves.CONFUSION ], - [ 5, Moves.GRAVITY ], - [ 10, Moves.HYPNOSIS ], - [ 15, Moves.AIR_CUTTER ], - [ 20, Moves.PSYBEAM ], - [ 25, Moves.WHIRLWIND ], - [ 30, Moves.COSMIC_POWER ], - [ 35, Moves.AIR_SLASH ], - [ 40, Moves.PSYCHIC ], - [ 45, Moves.TAILWIND ], - [ 50, Moves.LIGHT_SCREEN ], - [ 50, Moves.REFLECT ], - [ 55, Moves.SKY_ATTACK ], - [ 60, Moves.SKILL_SWAP ], - ], - [Species.YAMASK]: [ - [ 1, Moves.PROTECT ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.HEAL_BLOCK ], - [ 4, Moves.HAZE ], - [ 8, Moves.NIGHT_SHADE ], - [ 12, Moves.DISABLE ], - [ 16, Moves.WILL_O_WISP ], - [ 20, Moves.CRAFTY_SHIELD ], - [ 24, Moves.HEX ], - [ 28, Moves.MEAN_LOOK ], - [ 32, Moves.GRUDGE ], - [ 36, Moves.CURSE ], - [ 40, Moves.SHADOW_BALL ], - [ 44, Moves.DARK_PULSE ], - [ 48, Moves.GUARD_SPLIT ], - [ 48, Moves.POWER_SPLIT ], - [ 52, Moves.DESTINY_BOND ], - ], - [Species.COFAGRIGUS]: [ - [ EVOLVE_MOVE, Moves.SHADOW_CLAW ], - [ 1, Moves.NIGHT_SHADE ], - [ 1, Moves.HAZE ], - [ 1, Moves.PROTECT ], - [ 1, Moves.SCARY_FACE ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.HEAL_BLOCK ], - [ 12, Moves.DISABLE ], - [ 16, Moves.WILL_O_WISP ], - [ 20, Moves.CRAFTY_SHIELD ], - [ 24, Moves.HEX ], - [ 28, Moves.MEAN_LOOK ], - [ 32, Moves.GRUDGE ], - [ 38, Moves.CURSE ], - [ 44, Moves.SHADOW_BALL ], - [ 50, Moves.DARK_PULSE ], - [ 56, Moves.GUARD_SPLIT ], - [ 56, Moves.POWER_SPLIT ], - [ 62, Moves.DESTINY_BOND ], - ], - [Species.TIRTOUGA]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.BIDE ], - [ 3, Moves.PROTECT ], - [ 6, Moves.AQUA_JET ], - [ 9, Moves.SMACK_DOWN ], - [ 12, Moves.ANCIENT_POWER ], - [ 15, Moves.BITE ], - [ 18, Moves.WIDE_GUARD ], - [ 21, Moves.BRINE ], - [ 24, Moves.ROCK_SLIDE ], - [ 27, Moves.CRUNCH ], - [ 30, Moves.CURSE ], - [ 33, Moves.IRON_DEFENSE ], - [ 36, Moves.AQUA_TAIL ], - [ 39, Moves.RAIN_DANCE ], - [ 42, Moves.HYDRO_PUMP ], - [ 45, Moves.SHELL_SMASH ], - ], - [Species.CARRACOSTA]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.PROTECT ], - [ 1, Moves.AQUA_JET ], - [ 1, Moves.BIDE ], - [ 9, Moves.SMACK_DOWN ], - [ 12, Moves.ANCIENT_POWER ], - [ 15, Moves.BITE ], - [ 18, Moves.WIDE_GUARD ], - [ 21, Moves.BRINE ], - [ 24, Moves.ROCK_SLIDE ], - [ 27, Moves.CRUNCH ], - [ 30, Moves.CURSE ], - [ 33, Moves.IRON_DEFENSE ], - [ 36, Moves.AQUA_TAIL ], - [ 41, Moves.RAIN_DANCE ], - [ 46, Moves.HYDRO_PUMP ], - [ 51, Moves.SHELL_SMASH ], - ], - [Species.ARCHEN]: [ - [ 1, Moves.LEER ], - [ 1, Moves.QUICK_ATTACK ], - [ 3, Moves.ROCK_THROW ], - [ 6, Moves.WING_ATTACK ], - [ 9, Moves.DRAGON_BREATH ], - [ 12, Moves.ANCIENT_POWER ], - [ 15, Moves.PLUCK ], - [ 18, Moves.QUICK_GUARD ], - [ 21, Moves.U_TURN ], - [ 24, Moves.ROCK_SLIDE ], - [ 27, Moves.SCARY_FACE ], - [ 30, Moves.CRUNCH ], - [ 33, Moves.AGILITY ], - [ 36, Moves.TAILWIND ], - [ 39, Moves.DRAGON_CLAW ], - [ 42, Moves.THRASH ], - [ 45, Moves.ENDEAVOR ], - ], - [Species.ARCHEOPS]: [ - [ 1, Moves.WING_ATTACK ], - [ 1, Moves.LEER ], - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.QUICK_ATTACK ], - [ 9, Moves.DRAGON_BREATH ], - [ 12, Moves.ANCIENT_POWER ], - [ 15, Moves.PLUCK ], - [ 18, Moves.QUICK_GUARD ], - [ 21, Moves.U_TURN ], - [ 24, Moves.ROCK_SLIDE ], - [ 27, Moves.SCARY_FACE ], - [ 30, Moves.CRUNCH ], - [ 33, Moves.AGILITY ], - [ 36, Moves.TAILWIND ], - [ 41, Moves.DRAGON_CLAW ], - [ 46, Moves.THRASH ], - [ 51, Moves.ENDEAVOR ], - ], - [Species.TRUBBISH]: [ - [ 1, Moves.POUND ], - [ 1, Moves.POISON_GAS ], - [ 3, Moves.RECYCLE ], - [ 6, Moves.ACID_SPRAY ], - [ 9, Moves.AMNESIA ], - [ 12, Moves.CLEAR_SMOG ], - [ 15, Moves.TOXIC_SPIKES ], - [ 18, Moves.SLUDGE ], - [ 21, Moves.STOCKPILE ], - [ 21, Moves.SWALLOW ], - [ 24, Moves.TAKE_DOWN ], - [ 27, Moves.SLUDGE_BOMB ], - [ 30, Moves.TOXIC ], - [ 33, Moves.BELCH ], - [ 37, Moves.PAIN_SPLIT ], - [ 39, Moves.GUNK_SHOT ], - [ 42, Moves.EXPLOSION ], - ], - [Species.GARBODOR]: [ - [ 1, Moves.POUND ], - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.RECYCLE ], - [ 1, Moves.ACID_SPRAY ], - [ 9, Moves.AMNESIA ], - [ 12, Moves.CLEAR_SMOG ], - [ 15, Moves.TOXIC_SPIKES ], - [ 18, Moves.SLUDGE ], - [ 21, Moves.STOCKPILE ], - [ 21, Moves.SWALLOW ], - [ 24, Moves.BODY_SLAM ], - [ 27, Moves.SLUDGE_BOMB ], - [ 30, Moves.TOXIC ], - [ 33, Moves.BELCH ], - [ 39, Moves.PAIN_SPLIT ], - [ 43, Moves.GUNK_SHOT ], - [ 48, Moves.EXPLOSION ], - ], - [Species.ZORUA]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 4, Moves.TORMENT ], - [ 8, Moves.HONE_CLAWS ], - [ 12, Moves.FURY_SWIPES ], - [ 16, Moves.SCARY_FACE ], - [ 20, Moves.TAUNT ], - [ 24, Moves.KNOCK_OFF ], - [ 28, Moves.FAKE_TEARS ], - [ 32, Moves.AGILITY ], - [ 36, Moves.IMPRISON ], - [ 40, Moves.NIGHT_DAZE ], - [ 44, Moves.NASTY_PLOT ], - [ 48, Moves.FOUL_PLAY ], - ], - [Species.ZOROARK]: [ - [ EVOLVE_MOVE, Moves.NIGHT_SLASH ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.TORMENT ], - [ 1, Moves.U_TURN ], - [ 1, Moves.HONE_CLAWS ], - [ 1, Moves.SCARY_FACE ], // Previous Stage Move - [ 1, Moves.PURSUIT ], - [ 12, Moves.FURY_SWIPES ], - [ 20, Moves.TAUNT ], - [ 24, Moves.KNOCK_OFF ], - [ 28, Moves.FAKE_TEARS ], - [ 34, Moves.AGILITY ], - [ 40, Moves.IMPRISON ], - [ 46, Moves.NIGHT_DAZE ], - [ 52, Moves.NASTY_PLOT ], - [ 58, Moves.FOUL_PLAY ], - ], - [Species.MINCCINO]: [ - [ 1, Moves.POUND ], - [ 1, Moves.BABY_DOLL_EYES ], - [ 4, Moves.HELPING_HAND ], - [ 8, Moves.ECHOED_VOICE ], - [ 12, Moves.SING ], - [ 16, Moves.CHARM ], - [ 20, Moves.SWIFT ], - [ 24, Moves.ENCORE ], - [ 28, Moves.AFTER_YOU ], - [ 32, Moves.TAIL_SLAP ], - [ 36, Moves.TICKLE ], - [ 40, Moves.SLAM ], - [ 44, Moves.HYPER_VOICE ], - [ 48, Moves.LAST_RESORT ], - ], - [Species.CINCCINO]: [ - [ EVOLVE_MOVE, Moves.TAIL_SLAP ], - [ RELEARN_MOVE, Moves.SLAM ], - [ RELEARN_MOVE, Moves.SWIFT ], - [ RELEARN_MOVE, Moves.ENCORE ], - [ RELEARN_MOVE, Moves.HELPING_HAND ], - [ RELEARN_MOVE, Moves.HYPER_VOICE ], - [ RELEARN_MOVE, Moves.TICKLE ], - [ RELEARN_MOVE, Moves.ROCK_BLAST ], - [ RELEARN_MOVE, Moves.LAST_RESORT ], - [ RELEARN_MOVE, Moves.AFTER_YOU ], - [ RELEARN_MOVE, Moves.ECHOED_VOICE ], - [ RELEARN_MOVE, Moves.BABY_DOLL_EYES ], - [ 1, Moves.BULLET_SEED ], - [ 1, Moves.SING ], - [ 1, Moves.CHARM ], - [ 1, Moves.POUND ], - ], - [Species.GOTHITA]: [ - [ 1, Moves.POUND ], - [ 1, Moves.CONFUSION ], - [ 4, Moves.PLAY_NICE ], - [ 8, Moves.TICKLE ], - [ 12, Moves.PSYBEAM ], - [ 16, Moves.CHARM ], - [ 20, Moves.PSYSHOCK ], - [ 24, Moves.HYPNOSIS ], - [ 28, Moves.FAKE_TEARS ], - [ 33, Moves.PSYCH_UP ], - [ 34, Moves.HEAL_BLOCK ], - [ 36, Moves.PSYCHIC ], - [ 40, Moves.FLATTER ], - [ 44, Moves.FUTURE_SIGHT ], - [ 48, Moves.MAGIC_ROOM ], - ], - [Species.GOTHORITA]: [ - [ 1, Moves.POUND ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.TICKLE ], - [ 1, Moves.PLAY_NICE ], - [ 12, Moves.PSYBEAM ], - [ 16, Moves.CHARM ], - [ 20, Moves.PSYSHOCK ], - [ 24, Moves.HYPNOSIS ], - [ 28, Moves.FAKE_TEARS ], - [ 34, Moves.HEAL_BLOCK ], - [ 35, Moves.PSYCH_UP ], - [ 40, Moves.PSYCHIC ], // Previous Stage Move, Gothitelle Level - [ 46, Moves.FLATTER ], - [ 52, Moves.FUTURE_SIGHT ], - [ 58, Moves.MAGIC_ROOM ], - ], - [Species.GOTHITELLE]: [ - [ 1, Moves.POUND ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.TICKLE ], - [ 1, Moves.PLAY_NICE ], - [ 12, Moves.PSYBEAM ], - [ 16, Moves.CHARM ], - [ 20, Moves.PSYSHOCK ], - [ 24, Moves.HYPNOSIS ], - [ 28, Moves.FAKE_TEARS ], - [ 34, Moves.HEAL_BLOCK ], - [ 35, Moves.PSYCH_UP ], - [ 40, Moves.PSYCHIC ], - [ 48, Moves.FLATTER ], - [ 56, Moves.FUTURE_SIGHT ], - [ 64, Moves.MAGIC_ROOM ], - ], - [Species.SOLOSIS]: [ - [ 1, Moves.CONFUSION ], - [ 1, Moves.PROTECT ], - [ 1, Moves.PSYWAVE ], - [ 4, Moves.RECOVER ], - [ 8, Moves.ENDEAVOR ], - [ 12, Moves.PSYBEAM ], - [ 16, Moves.CHARM ], - [ 20, Moves.PSYSHOCK ], - [ 24, Moves.LIGHT_SCREEN ], - [ 24, Moves.REFLECT ], - [ 28, Moves.ALLY_SWITCH ], - [ 33, Moves.PAIN_SPLIT ], - [ 36, Moves.PSYCHIC ], - [ 40, Moves.SKILL_SWAP ], - [ 44, Moves.FUTURE_SIGHT ], - [ 46, Moves.HEAL_BLOCK ], - [ 48, Moves.WONDER_ROOM ], - ], - [Species.DUOSION]: [ - [ 1, Moves.CONFUSION ], - [ 1, Moves.RECOVER ], - [ 1, Moves.PSYWAVE ], - [ 1, Moves.PROTECT ], - [ 1, Moves.ENDEAVOR ], - [ 1, Moves.SNATCH ], - [ 12, Moves.PSYBEAM ], - [ 16, Moves.CHARM ], - [ 20, Moves.PSYSHOCK ], - [ 24, Moves.LIGHT_SCREEN ], - [ 24, Moves.REFLECT ], - [ 28, Moves.ALLY_SWITCH ], - [ 35, Moves.PAIN_SPLIT ], - [ 40, Moves.PSYCHIC ], - [ 46, Moves.SKILL_SWAP ], - [ 50, Moves.HEAL_BLOCK ], - [ 52, Moves.FUTURE_SIGHT ], - [ 58, Moves.WONDER_ROOM ], - ], - [Species.REUNICLUS]: [ - [ EVOLVE_MOVE, Moves.HAMMER_ARM ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.RECOVER ], - [ 1, Moves.PROTECT ], - [ 1, Moves.ENDEAVOR ], - [ 1, Moves.DIZZY_PUNCH ], - [ 1, Moves.PSYWAVE ], - [ 1, Moves.SNATCH ], - [ 12, Moves.PSYBEAM ], - [ 16, Moves.CHARM ], - [ 20, Moves.PSYSHOCK ], - [ 24, Moves.LIGHT_SCREEN ], - [ 24, Moves.REFLECT ], - [ 28, Moves.ALLY_SWITCH ], - [ 35, Moves.PAIN_SPLIT ], - [ 40, Moves.PSYCHIC ], - [ 48, Moves.SKILL_SWAP ], - [ 54, Moves.HEAL_BLOCK ], - [ 56, Moves.FUTURE_SIGHT ], - [ 64, Moves.WONDER_ROOM ], - ], - [Species.DUCKLETT]: [ - [ 1, Moves.WATER_GUN ], - [ 6, Moves.DEFOG ], - [ 9, Moves.WING_ATTACK ], - [ 13, Moves.WATER_PULSE ], - [ 15, Moves.AERIAL_ACE ], - [ 19, Moves.BUBBLE_BEAM ], - [ 21, Moves.FEATHER_DANCE ], - [ 24, Moves.AQUA_RING ], - [ 27, Moves.AIR_SLASH ], - [ 30, Moves.ROOST ], - [ 34, Moves.RAIN_DANCE ], - [ 37, Moves.TAILWIND ], - [ 41, Moves.BRAVE_BIRD ], - [ 46, Moves.HURRICANE ], - ], - [Species.SWANNA]: [ - [ 1, Moves.WING_ATTACK ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.DEFOG ], - [ 13, Moves.WATER_PULSE ], - [ 15, Moves.AERIAL_ACE ], - [ 19, Moves.BUBBLE_BEAM ], - [ 21, Moves.FEATHER_DANCE ], - [ 24, Moves.AQUA_RING ], - [ 27, Moves.AIR_SLASH ], - [ 30, Moves.ROOST ], - [ 34, Moves.RAIN_DANCE ], - [ 40, Moves.TAILWIND ], - [ 47, Moves.BRAVE_BIRD ], - [ 55, Moves.HURRICANE ], - ], - [Species.VANILLITE]: [ - [ 1, Moves.HARDEN ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.POWDER_SNOW ], // Custom - [ 4, Moves.TAUNT ], - [ 8, Moves.MIST ], - [ 12, Moves.ICY_WIND ], - [ 16, Moves.AVALANCHE ], - [ 20, Moves.HAIL ], - [ 24, Moves.ICICLE_SPEAR ], - [ 28, Moves.UPROAR ], - [ 32, Moves.ACID_ARMOR ], - [ 36, Moves.MIRROR_COAT ], - [ 40, Moves.ICE_BEAM ], - [ 44, Moves.BLIZZARD ], - [ 48, Moves.SHEER_COLD ], - ], - [Species.VANILLISH]: [ - [ 1, Moves.MIST ], - [ 1, Moves.HARDEN ], - [ 1, Moves.TAUNT ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.POWDER_SNOW ], // Previous Stage Move, Custom - [ 12, Moves.ICY_WIND ], - [ 16, Moves.AVALANCHE ], - [ 20, Moves.HAIL ], - [ 24, Moves.ICICLE_SPEAR ], - [ 28, Moves.UPROAR ], - [ 32, Moves.ACID_ARMOR ], - [ 38, Moves.MIRROR_COAT ], - [ 44, Moves.ICE_BEAM ], - [ 50, Moves.BLIZZARD ], - [ 56, Moves.SHEER_COLD ], - ], - [Species.VANILLUXE]: [ - [ 1, Moves.MIST ], - [ 1, Moves.HARDEN ], - [ 1, Moves.TAUNT ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.POWDER_SNOW ], // Previous Stage Move, Custom - [ 1, Moves.WEATHER_BALL ], - [ 1, Moves.ICICLE_CRASH ], - [ 1, Moves.FREEZE_DRY ], - [ 12, Moves.ICY_WIND ], - [ 16, Moves.AVALANCHE ], - [ 20, Moves.HAIL ], - [ 24, Moves.ICICLE_SPEAR ], - [ 28, Moves.UPROAR ], - [ 32, Moves.ACID_ARMOR ], - [ 38, Moves.MIRROR_COAT ], - [ 44, Moves.ICE_BEAM ], - [ 52, Moves.BLIZZARD ], - [ 60, Moves.SHEER_COLD ], - ], - [Species.DEERLING]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.CAMOUFLAGE ], - [ 4, Moves.GROWL ], - [ 7, Moves.SAND_ATTACK ], - [ 10, Moves.DOUBLE_KICK ], - [ 13, Moves.LEECH_SEED ], - [ 16, Moves.BULLET_SEED ], - [ 20, Moves.TAKE_DOWN ], - [ 24, Moves.ZEN_HEADBUTT ], - [ 28, Moves.ENERGY_BALL ], - [ 32, Moves.CHARM ], - [ 37, Moves.DOUBLE_EDGE ], - [ 42, Moves.SOLAR_BEAM ], - ], - [Species.SAWSBUCK]: [ - [ EVOLVE_MOVE, Moves.HORN_LEECH ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.CAMOUFLAGE ], - [ 1, Moves.MEGAHORN ], - [ 10, Moves.DOUBLE_KICK ], - [ 13, Moves.LEECH_SEED ], - [ 16, Moves.BULLET_SEED ], - [ 20, Moves.TAKE_DOWN ], - [ 24, Moves.ZEN_HEADBUTT ], - [ 28, Moves.ENERGY_BALL ], - [ 36, Moves.CHARM ], - [ 44, Moves.DOUBLE_EDGE ], - [ 52, Moves.SOLAR_BEAM ], - ], - [Species.EMOLGA]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.NUZZLE ], - [ 5, Moves.DOUBLE_TEAM ], - [ 10, Moves.QUICK_ATTACK ], - [ 15, Moves.THUNDER_SHOCK ], - [ 20, Moves.CHARGE ], - [ 25, Moves.ACROBATICS ], - [ 30, Moves.SPARK ], - [ 35, Moves.ENCORE ], - [ 40, Moves.VOLT_SWITCH ], - [ 45, Moves.LIGHT_SCREEN ], - [ 50, Moves.DISCHARGE ], - [ 55, Moves.AGILITY ], - ], - [Species.KARRABLAST]: [ - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 4, Moves.FURY_CUTTER ], - [ 8, Moves.ENDURE ], - [ 12, Moves.FALSE_SWIPE ], - [ 16, Moves.ACID_SPRAY ], - [ 20, Moves.HEADBUTT ], - [ 24, Moves.FLAIL ], - [ 28, Moves.SCARY_FACE ], - [ 32, Moves.X_SCISSOR ], - [ 36, Moves.SWORDS_DANCE ], - [ 40, Moves.TAKE_DOWN ], - [ 44, Moves.BUG_BUZZ ], - [ 48, Moves.DOUBLE_EDGE ], - ], - [Species.ESCAVALIER]: [ - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 1, Moves.FLAIL ], - [ 1, Moves.SCARY_FACE ], - [ 1, Moves.ENDURE ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.QUICK_GUARD ], - [ 1, Moves.FELL_STINGER ], - [ 1, Moves.TWINEEDLE ], - [ 12, Moves.FALSE_SWIPE ], - [ 16, Moves.ACID_SPRAY ], - [ 20, Moves.HEADBUTT ], - [ 24, Moves.REVERSAL ], - [ 28, Moves.IRON_DEFENSE ], - [ 32, Moves.X_SCISSOR ], - [ 36, Moves.SWORDS_DANCE ], - [ 40, Moves.IRON_HEAD ], - [ 44, Moves.BUG_BUZZ ], - [ 48, Moves.GIGA_IMPACT ], - [ 52, Moves.METAL_BURST ], - ], - [Species.FOONGUS]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.ASTONISH ], - [ 4, Moves.GROWTH ], - [ 8, Moves.STUN_SPORE ], - [ 12, Moves.MEGA_DRAIN ], - [ 16, Moves.SYNTHESIS ], - [ 20, Moves.CLEAR_SMOG ], - [ 24, Moves.SWEET_SCENT ], - [ 28, Moves.GIGA_DRAIN ], - [ 32, Moves.INGRAIN ], - [ 36, Moves.TOXIC ], - [ 40, Moves.RAGE_POWDER ], - [ 44, Moves.SOLAR_BEAM ], - [ 48, Moves.SPORE ], - ], - [Species.AMOONGUSS]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.GROWTH ], - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.BIDE ], - [ 12, Moves.MEGA_DRAIN ], - [ 16, Moves.SYNTHESIS ], - [ 20, Moves.CLEAR_SMOG ], - [ 24, Moves.SWEET_SCENT ], - [ 28, Moves.GIGA_DRAIN ], - [ 32, Moves.INGRAIN ], - [ 36, Moves.TOXIC ], - [ 42, Moves.RAGE_POWDER ], - [ 48, Moves.SOLAR_BEAM ], - [ 54, Moves.SPORE ], - ], - [Species.FRILLISH]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.ABSORB ], - [ 1, Moves.WATER_SPORT ], - [ 4, Moves.POISON_STING ], - [ 8, Moves.NIGHT_SHADE ], - [ 12, Moves.WATER_PULSE ], - [ 16, Moves.RAIN_DANCE ], - [ 20, Moves.HEX ], - [ 24, Moves.BRINE ], - [ 28, Moves.RECOVER ], - [ 32, Moves.SHADOW_BALL ], - [ 36, Moves.WHIRLPOOL ], - [ 41, Moves.HYDRO_PUMP ], - [ 44, Moves.DESTINY_BOND ], - [ 48, Moves.WATER_SPOUT ], - ], - [Species.JELLICENT]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.WATER_SPORT ], - [ 1, Moves.WRING_OUT ], - [ 1, Moves.ABSORB ], - [ 1, Moves.NIGHT_SHADE ], - [ 1, Moves.ACID_ARMOR ], - [ 12, Moves.WATER_PULSE ], - [ 16, Moves.RAIN_DANCE ], - [ 20, Moves.HEX ], - [ 24, Moves.BRINE ], - [ 28, Moves.RECOVER ], - [ 32, Moves.SHADOW_BALL ], - [ 36, Moves.WHIRLPOOL ], - [ 43, Moves.HYDRO_PUMP ], - [ 48, Moves.DESTINY_BOND ], - [ 54, Moves.WATER_SPOUT ], - ], - [Species.ALOMOMOLA]: [ - [ 1, Moves.POUND ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.WATER_SPORT ], - [ 5, Moves.AQUA_RING ], - [ 9, Moves.AQUA_JET ], - [ 13, Moves.HELPING_HAND ], - [ 13, Moves.WIDE_GUARD ], - [ 21, Moves.PROTECT ], - [ 25, Moves.WATER_PULSE ], - [ 29, Moves.HEALING_WISH ], - [ 33, Moves.SOAK ], - [ 37, Moves.WISH ], - [ 41, Moves.BRINE ], - [ 45, Moves.SAFEGUARD ], - [ 49, Moves.WHIRLPOOL ], - [ 55, Moves.HYDRO_PUMP ], - ], - [Species.JOLTIK]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.SPIDER_WEB ], - [ 4, Moves.ELECTROWEB ], - [ 8, Moves.BUG_BITE ], - [ 12, Moves.STRING_SHOT ], - [ 16, Moves.THUNDER_WAVE ], - [ 20, Moves.ELECTRO_BALL ], - [ 24, Moves.AGILITY ], - [ 28, Moves.SUCKER_PUNCH ], - [ 32, Moves.SLASH ], - [ 37, Moves.DISCHARGE ], - [ 40, Moves.SCREECH ], - [ 44, Moves.GASTRO_ACID ], - [ 48, Moves.BUG_BUZZ ], - ], - [Species.GALVANTULA]: [ - [ EVOLVE_MOVE, Moves.STICKY_WEB ], - [ 1, Moves.ABSORB ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.BUG_BITE ], - [ 1, Moves.ELECTROWEB ], - [ 1, Moves.SPIDER_WEB ], - [ 12, Moves.STRING_SHOT ], - [ 16, Moves.THUNDER_WAVE ], - [ 20, Moves.ELECTRO_BALL ], - [ 24, Moves.AGILITY ], - [ 28, Moves.SUCKER_PUNCH ], - [ 32, Moves.SLASH ], - [ 39, Moves.DISCHARGE ], - [ 44, Moves.SCREECH ], - [ 50, Moves.GASTRO_ACID ], - [ 56, Moves.BUG_BUZZ ], - ], - [Species.FERROSEED]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 5, Moves.METAL_CLAW ], - [ 10, Moves.PIN_MISSILE ], - [ 15, Moves.INGRAIN ], - [ 20, Moves.FLASH_CANNON ], - [ 25, Moves.IRON_HEAD ], - [ 30, Moves.SELF_DESTRUCT ], - [ 35, Moves.IRON_DEFENSE ], - [ 41, Moves.CURSE ], - [ 45, Moves.GYRO_BALL ], - [ 50, Moves.EXPLOSION ], - ], - [Species.FERROTHORN]: [ - [ EVOLVE_MOVE, Moves.POWER_WHIP ], - [ 1, Moves.TACKLE ], - [ 1, Moves.PIN_MISSILE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.ROCK_CLIMB ], - [ 15, Moves.INGRAIN ], - [ 20, Moves.FLASH_CANNON ], - [ 25, Moves.IRON_HEAD ], - [ 30, Moves.SELF_DESTRUCT ], - [ 35, Moves.IRON_DEFENSE ], - [ 43, Moves.CURSE ], - [ 49, Moves.GYRO_BALL ], - [ 56, Moves.EXPLOSION ], - ], - [Species.KLINK]: [ - [ 1, Moves.VISE_GRIP ], - [ 1, Moves.THUNDER_SHOCK ], - [ 4, Moves.BIND ], - [ 8, Moves.CHARGE ], - [ 12, Moves.CHARGE_BEAM ], - [ 16, Moves.METAL_SOUND ], - [ 20, Moves.AUTOTOMIZE ], - [ 24, Moves.DISCHARGE ], - [ 28, Moves.SCREECH ], - [ 32, Moves.GEAR_GRIND ], - [ 36, Moves.LOCK_ON ], - [ 40, Moves.SHIFT_GEAR ], - [ 44, Moves.ZAP_CANNON ], - [ 48, Moves.HYPER_BEAM ], - ], - [Species.KLANG]: [ - [ 1, Moves.VISE_GRIP ], - [ 1, Moves.BIND ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.CHARGE ], - [ 12, Moves.CHARGE_BEAM ], - [ 16, Moves.METAL_SOUND ], - [ 20, Moves.AUTOTOMIZE ], - [ 24, Moves.DISCHARGE ], - [ 28, Moves.SCREECH ], - [ 32, Moves.GEAR_GRIND ], - [ 36, Moves.LOCK_ON ], - [ 42, Moves.SHIFT_GEAR ], - [ 48, Moves.ZAP_CANNON ], - [ 54, Moves.HYPER_BEAM ], - ], - [Species.KLINKLANG]: [ - [ 1, Moves.VISE_GRIP ], - [ 1, Moves.BIND ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.CHARGE ], - [ 1, Moves.MAGNETIC_FLUX ], - [ 1, Moves.GEAR_UP ], - [ 12, Moves.CHARGE_BEAM ], - [ 16, Moves.METAL_SOUND ], - [ 20, Moves.AUTOTOMIZE ], - [ 24, Moves.DISCHARGE ], - [ 28, Moves.SCREECH ], - [ 32, Moves.GEAR_GRIND ], - [ 36, Moves.LOCK_ON ], - [ 42, Moves.SHIFT_GEAR ], - [ 48, Moves.ZAP_CANNON ], - [ 56, Moves.HYPER_BEAM ], - [ 64, Moves.ELECTRIC_TERRAIN ], - ], - [Species.TYNAMO]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.SPARK ], - [ 1, Moves.CHARGE_BEAM ], - ], - [Species.EELEKTRIK]: [ - [ EVOLVE_MOVE, Moves.CRUNCH ], - [ 1, Moves.TACKLE ], // Previous Stage Move - [ 1, Moves.HEADBUTT ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.SPARK ], - [ 1, Moves.CHARGE_BEAM ], - [ 1, Moves.ION_DELUGE ], - [ 9, Moves.BIND ], - [ 19, Moves.ACID ], - [ 29, Moves.DISCHARGE ], - [ 44, Moves.THUNDERBOLT ], - [ 49, Moves.ACID_SPRAY ], - [ 54, Moves.COIL ], - [ 59, Moves.WILD_CHARGE ], - [ 64, Moves.GASTRO_ACID ], - [ 69, Moves.ZAP_CANNON ], - [ 74, Moves.THRASH ], - ], - [Species.EELEKTROSS]: [ - [ RELEARN_MOVE, Moves.THUNDERBOLT ], // Previous Stage Move - [ RELEARN_MOVE, Moves.ACID_SPRAY ], // Previous Stage Move - [ 1, Moves.TACKLE ], // Previous Stage Move - [ 1, Moves.HEADBUTT ], - [ 1, Moves.THUNDER_WAVE ], // Previous Stage Move - [ 1, Moves.SPARK ], // Previous Stage Move - [ 1, Moves.CHARGE_BEAM ], // Previous Stage Move - [ 1, Moves.ION_DELUGE ], // Previous Stage Move - [ 1, Moves.BIND ], // Previous Stage Move - [ 1, Moves.THRASH ], - [ 1, Moves.ACID ], - [ 1, Moves.ZAP_CANNON ], - [ 1, Moves.CRUNCH ], - [ 1, Moves.CRUSH_CLAW ], - [ 1, Moves.GASTRO_ACID ], - [ 1, Moves.DISCHARGE ], - [ 1, Moves.COIL ], - [ 5, Moves.WILD_CHARGE ], - ], - [Species.ELGYEM]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.CONFUSION ], - [ 6, Moves.IMPRISON ], - [ 8, Moves.HEAL_BLOCK ], - [ 12, Moves.TELEPORT ], - [ 18, Moves.PSYBEAM ], - [ 24, Moves.GUARD_SPLIT ], - [ 24, Moves.POWER_SPLIT ], - [ 30, Moves.HEADBUTT ], - [ 36, Moves.ZEN_HEADBUTT ], - [ 43, Moves.RECOVER ], - [ 48, Moves.CALM_MIND ], - [ 54, Moves.WONDER_ROOM ], - [ 60, Moves.PSYCHIC ], - ], - [Species.BEHEEYEM]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.SYNCHRONOISE ], - [ 1, Moves.TELEPORT ], - [ 1, Moves.IMPRISON ], - [ 1, Moves.PSYCHIC_TERRAIN ], - [ 8, Moves.HEAL_BLOCK ], - [ 18, Moves.PSYBEAM ], - [ 24, Moves.GUARD_SPLIT ], - [ 24, Moves.POWER_SPLIT ], - [ 30, Moves.HEADBUTT ], - [ 36, Moves.ZEN_HEADBUTT ], - [ 45, Moves.RECOVER ], - [ 52, Moves.CALM_MIND ], - [ 60, Moves.WONDER_ROOM ], - [ 68, Moves.PSYCHIC ], - ], - [Species.LITWICK]: [ - [ 1, Moves.SMOG ], - [ 1, Moves.ASTONISH ], - [ 4, Moves.EMBER ], - [ 8, Moves.MINIMIZE ], - [ 12, Moves.CONFUSE_RAY ], - [ 16, Moves.HEX ], - [ 20, Moves.WILL_O_WISP ], - [ 24, Moves.FIRE_SPIN ], - [ 28, Moves.NIGHT_SHADE ], - [ 32, Moves.CURSE ], - [ 36, Moves.SHADOW_BALL ], - [ 40, Moves.INFERNO ], - [ 44, Moves.IMPRISON ], - [ 48, Moves.PAIN_SPLIT ], - [ 52, Moves.OVERHEAT ], - [ 56, Moves.MEMENTO ], - ], - [Species.LAMPENT]: [ - [ 1, Moves.EMBER ], - [ 1, Moves.MINIMIZE ], - [ 1, Moves.SMOG ], - [ 1, Moves.ASTONISH ], - [ 12, Moves.CONFUSE_RAY ], - [ 16, Moves.HEX ], - [ 20, Moves.WILL_O_WISP ], - [ 24, Moves.FIRE_SPIN ], - [ 28, Moves.NIGHT_SHADE ], - [ 32, Moves.CURSE ], - [ 36, Moves.SHADOW_BALL ], - [ 40, Moves.INFERNO ], - [ 46, Moves.IMPRISON ], - [ 52, Moves.PAIN_SPLIT ], - [ 58, Moves.OVERHEAT ], - [ 64, Moves.MEMENTO ], - ], - [Species.CHANDELURE]: [ - [ 1, Moves.EMBER ], - [ 1, Moves.FIRE_SPIN ], - [ 1, Moves.NIGHT_SHADE ], - [ 1, Moves.MINIMIZE ], - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.SMOG ], - [ 1, Moves.CURSE ], - [ 1, Moves.PAIN_SPLIT ], - [ 1, Moves.SHADOW_BALL ], - [ 1, Moves.WILL_O_WISP ], - [ 1, Moves.MEMENTO ], - [ 1, Moves.IMPRISON ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.OVERHEAT ], - [ 1, Moves.HEX ], - [ 1, Moves.INFERNO ], - ], - [Species.AXEW]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 3, Moves.BITE ], - [ 6, Moves.FALSE_SWIPE ], - [ 9, Moves.ASSURANCE ], - [ 12, Moves.TAUNT ], - [ 15, Moves.SLASH ], - [ 18, Moves.DRAGON_CLAW ], - [ 21, Moves.SCARY_FACE ], - [ 24, Moves.CRUNCH ], - [ 27, Moves.DRAGON_DANCE ], - [ 30, Moves.DUAL_CHOP ], - [ 33, Moves.FOCUS_ENERGY ], - [ 36, Moves.DRAGON_PULSE ], - [ 39, Moves.SWORDS_DANCE ], - [ 42, Moves.OUTRAGE ], - [ 45, Moves.GUILLOTINE ], - [ 48, Moves.GIGA_IMPACT ], - ], - [Species.FRAXURE]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.BITE ], - [ 1, Moves.FALSE_SWIPE ], - [ 1, Moves.DUAL_CHOP ], - [ 9, Moves.ASSURANCE ], - [ 12, Moves.TAUNT ], - [ 15, Moves.SLASH ], - [ 18, Moves.DRAGON_CLAW ], - [ 21, Moves.SCARY_FACE ], - [ 24, Moves.CRUNCH ], - [ 27, Moves.DRAGON_DANCE ], - [ 30, Moves.BREAKING_SWIPE ], - [ 33, Moves.FOCUS_ENERGY ], - [ 36, Moves.DRAGON_PULSE ], - [ 41, Moves.SWORDS_DANCE ], - [ 46, Moves.OUTRAGE ], - [ 51, Moves.GUILLOTINE ], - [ 56, Moves.GIGA_IMPACT ], - ], - [Species.HAXORUS]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.BITE ], - [ 1, Moves.FALSE_SWIPE ], - [ 1, Moves.DUAL_CHOP ], - [ 9, Moves.ASSURANCE ], - [ 12, Moves.TAUNT ], - [ 15, Moves.SLASH ], - [ 18, Moves.DRAGON_CLAW ], - [ 21, Moves.SCARY_FACE ], - [ 24, Moves.CRUNCH ], - [ 27, Moves.DRAGON_DANCE ], - [ 30, Moves.BREAKING_SWIPE ], - [ 33, Moves.FOCUS_ENERGY ], - [ 36, Moves.DRAGON_PULSE ], - [ 41, Moves.SWORDS_DANCE ], - [ 46, Moves.OUTRAGE ], - [ 53, Moves.GUILLOTINE ], - [ 60, Moves.GIGA_IMPACT ], - ], - [Species.CUBCHOO]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.POWDER_SNOW ], - [ 3, Moves.ENDURE ], - [ 6, Moves.FURY_SWIPES ], - [ 9, Moves.ICY_WIND ], - [ 12, Moves.PLAY_NICE ], - [ 15, Moves.BRINE ], - [ 18, Moves.FROST_BREATH ], - [ 21, Moves.SLASH ], - [ 24, Moves.FLAIL ], - [ 27, Moves.CHARM ], - [ 30, Moves.SNOWSCAPE ], - [ 33, Moves.THRASH ], - [ 36, Moves.REST ], - [ 39, Moves.BLIZZARD ], - [ 42, Moves.SHEER_COLD ], - ], - [Species.BEARTIC]: [ - [ EVOLVE_MOVE, Moves.ICICLE_CRASH ], - [ 1, Moves.GROWL ], - [ 1, Moves.FURY_SWIPES ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.ENDURE ], - [ 1, Moves.CHARM ], - [ 1, Moves.AQUA_JET ], - [ 1, Moves.BIDE ], - [ 9, Moves.ICY_WIND ], - [ 12, Moves.PLAY_NICE ], - [ 15, Moves.BRINE ], - [ 18, Moves.FROST_BREATH ], - [ 21, Moves.SLASH ], - [ 24, Moves.FLAIL ], - [ 27, Moves.SWAGGER ], - [ 30, Moves.SNOWSCAPE ], - [ 33, Moves.THRASH ], - [ 36, Moves.REST ], - [ 41, Moves.BLIZZARD ], - [ 46, Moves.SHEER_COLD ], - [ 51, Moves.SUPERPOWER ], - ], - [Species.CRYOGONAL]: [ - [ 1, Moves.BIND ], - [ 1, Moves.ICE_SHARD ], - [ 4, Moves.CONFUSE_RAY ], - [ 8, Moves.RAPID_SPIN ], - [ 12, Moves.ICY_WIND ], - [ 16, Moves.MIST ], - [ 16, Moves.HAZE ], - [ 20, Moves.ANCIENT_POWER ], - [ 24, Moves.AURORA_BEAM ], - [ 28, Moves.SLASH ], - [ 32, Moves.NIGHT_SLASH ], - [ 36, Moves.FREEZE_DRY ], - [ 40, Moves.LIGHT_SCREEN ], - [ 40, Moves.REFLECT ], - [ 44, Moves.RECOVER ], - [ 48, Moves.ICE_BEAM ], - [ 52, Moves.ACID_ARMOR ], - [ 56, Moves.SOLAR_BEAM ], - [ 60, Moves.SHEER_COLD ], - ], - [Species.SHELMET]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.PROTECT ], - [ 4, Moves.ACID ], - [ 8, Moves.CURSE ], - [ 12, Moves.MEGA_DRAIN ], - [ 16, Moves.STRUGGLE_BUG ], - [ 20, Moves.YAWN ], - [ 24, Moves.ACID_ARMOR ], - [ 28, Moves.GIGA_DRAIN ], - [ 32, Moves.GUARD_SWAP ], - [ 36, Moves.BODY_SLAM ], - [ 40, Moves.RECOVER ], - [ 44, Moves.BUG_BUZZ ], - [ 48, Moves.FINAL_GAMBIT ], - ], - [Species.ACCELGOR]: [ - [ 1, Moves.BODY_SLAM ], - [ 1, Moves.ACID ], - [ 1, Moves.ABSORB ], - [ 1, Moves.PROTECT ], // Previous Stage Move - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.ACID_ARMOR ], - [ 1, Moves.CURSE ], - [ 1, Moves.YAWN ], - [ 1, Moves.GUARD_SWAP ], - [ 1, Moves.ACID_SPRAY ], - [ 1, Moves.WATER_SHURIKEN ], - [ 12, Moves.MEGA_DRAIN ], - [ 16, Moves.STRUGGLE_BUG ], - [ 20, Moves.SWIFT ], - [ 24, Moves.AGILITY ], - [ 28, Moves.GIGA_DRAIN ], - [ 32, Moves.POWER_SWAP ], - [ 36, Moves.U_TURN ], - [ 40, Moves.RECOVER ], - [ 44, Moves.BUG_BUZZ ], - [ 48, Moves.FINAL_GAMBIT ], - [ 52, Moves.TOXIC ], - ], - [Species.STUNFISK]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.MUD_SPORT ], - [ 5, Moves.ENDURE ], - [ 10, Moves.MUD_SHOT ], - [ 15, Moves.REVENGE ], - [ 20, Moves.CHARGE ], - [ 25, Moves.SUCKER_PUNCH ], - [ 30, Moves.ELECTRIC_TERRAIN ], - [ 35, Moves.BOUNCE ], - [ 40, Moves.MUDDY_WATER ], - [ 45, Moves.DISCHARGE ], - [ 50, Moves.FLAIL ], - [ 55, Moves.FISSURE ], - ], - [Species.MIENFOO]: [ - [ 1, Moves.POUND ], - [ 1, Moves.DETECT ], - [ 5, Moves.FAKE_OUT ], - [ 10, Moves.REVERSAL ], - [ 15, Moves.FURY_SWIPES ], - [ 20, Moves.QUICK_GUARD ], - [ 25, Moves.FORCE_PALM ], - [ 30, Moves.U_TURN ], - [ 35, Moves.DRAIN_PUNCH ], - [ 40, Moves.HONE_CLAWS ], - [ 45, Moves.AURA_SPHERE ], - [ 51, Moves.BOUNCE ], - [ 55, Moves.CALM_MIND ], - [ 60, Moves.HIGH_JUMP_KICK ], - ], - [Species.MIENSHAO]: [ - [ 1, Moves.POUND ], - [ 1, Moves.REVERSAL ], - [ 1, Moves.DETECT ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.QUICK_GUARD ], - [ 15, Moves.FURY_SWIPES ], - [ 20, Moves.WIDE_GUARD ], - [ 25, Moves.FORCE_PALM ], - [ 30, Moves.U_TURN ], - [ 35, Moves.DRAIN_PUNCH ], - [ 40, Moves.HONE_CLAWS ], - [ 45, Moves.AURA_SPHERE ], - [ 53, Moves.BOUNCE ], - [ 59, Moves.CALM_MIND ], - [ 66, Moves.HIGH_JUMP_KICK ], - ], - [Species.DRUDDIGON]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 5, Moves.BITE ], - [ 10, Moves.DRAGON_TAIL ], - [ 15, Moves.METAL_CLAW ], - [ 20, Moves.SCARY_FACE ], - [ 25, Moves.SLASH ], - [ 30, Moves.DRAGON_CLAW ], - [ 35, Moves.HONE_CLAWS ], - [ 40, Moves.CRUNCH ], - [ 45, Moves.IRON_HEAD ], - [ 50, Moves.OUTRAGE ], - [ 55, Moves.SUPERPOWER ], - ], - [Species.GOLETT]: [ - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.ASTONISH ], - [ 4, Moves.DEFENSE_CURL ], - [ 8, Moves.POUND ], - [ 12, Moves.SHADOW_PUNCH ], - [ 16, Moves.CURSE ], - [ 20, Moves.NIGHT_SHADE ], - [ 24, Moves.STOMPING_TANTRUM ], - [ 28, Moves.IRON_DEFENSE ], - [ 32, Moves.MEGA_PUNCH ], - [ 36, Moves.SHADOW_BALL ], - [ 40, Moves.HEAVY_SLAM ], - [ 44, Moves.PHANTOM_FORCE ], - [ 48, Moves.HAMMER_ARM ], - [ 52, Moves.EARTHQUAKE ], - [ 56, Moves.DYNAMIC_PUNCH ], - ], - [Species.GOLURK]: [ - [ RELEARN_MOVE, Moves.MUD_SLAP ], - [ RELEARN_MOVE, Moves.FOCUS_PUNCH ], - [ 1, Moves.POUND ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.HIGH_HORSEPOWER ], - [ 12, Moves.SHADOW_PUNCH ], - [ 16, Moves.CURSE ], - [ 20, Moves.NIGHT_SHADE ], - [ 24, Moves.STOMPING_TANTRUM ], - [ 28, Moves.IRON_DEFENSE ], - [ 32, Moves.MEGA_PUNCH ], - [ 36, Moves.SHADOW_BALL ], - [ 40, Moves.HEAVY_SLAM ], - [ 46, Moves.PHANTOM_FORCE ], - [ 52, Moves.HAMMER_ARM ], - [ 58, Moves.EARTHQUAKE ], - [ 64, Moves.DYNAMIC_PUNCH ], - ], - [Species.PAWNIARD]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 5, Moves.FURY_CUTTER ], - [ 10, Moves.METAL_CLAW ], - [ 15, Moves.TORMENT ], - [ 20, Moves.SCARY_FACE ], - [ 25, Moves.ASSURANCE ], - [ 30, Moves.METAL_SOUND ], - [ 35, Moves.SLASH ], - [ 40, Moves.NIGHT_SLASH ], - [ 45, Moves.IRON_DEFENSE ], - [ 50, Moves.RETALIATE ], - [ 55, Moves.IRON_HEAD ], - [ 60, Moves.SWORDS_DANCE ], - [ 65, Moves.GUILLOTINE ], - ], - [Species.BISHARP]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.METAL_BURST ], - [ 15, Moves.TORMENT ], - [ 20, Moves.SCARY_FACE ], - [ 25, Moves.ASSURANCE ], - [ 30, Moves.METAL_SOUND ], - [ 35, Moves.SLASH ], - [ 40, Moves.NIGHT_SLASH ], - [ 45, Moves.IRON_DEFENSE ], - [ 50, Moves.RETALIATE ], - [ 57, Moves.IRON_HEAD ], - [ 64, Moves.SWORDS_DANCE ], - [ 71, Moves.GUILLOTINE ], - ], - [Species.BOUFFALANT]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.PURSUIT ], - [ 5, Moves.FOCUS_ENERGY ], - [ 10, Moves.FURY_ATTACK ], - [ 15, Moves.REVENGE ], - [ 20, Moves.SCARY_FACE ], - [ 25, Moves.HORN_ATTACK ], - [ 30, Moves.REVERSAL ], - [ 35, Moves.THROAT_CHOP ], - [ 40, Moves.HEAD_CHARGE ], - [ 45, Moves.SWORDS_DANCE ], - [ 50, Moves.MEGAHORN ], - [ 55, Moves.GIGA_IMPACT ], - ], - [Species.RUFFLET]: [ - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 6, Moves.HONE_CLAWS ], - [ 12, Moves.WING_ATTACK ], - [ 18, Moves.TAILWIND ], - [ 24, Moves.SCARY_FACE ], - [ 30, Moves.AERIAL_ACE ], - [ 36, Moves.SLASH ], - [ 42, Moves.WHIRLWIND ], - [ 48, Moves.CRUSH_CLAW ], - [ 55, Moves.AIR_SLASH ], - [ 60, Moves.DEFOG ], - [ 66, Moves.THRASH ], - [ 72, Moves.BRAVE_BIRD ], - ], - [Species.BRAVIARY]: [ - [ EVOLVE_MOVE, Moves.SUPERPOWER ], - [ RELEARN_MOVE, Moves.BRAVE_BIRD ], // Previous Stage Move - [ 1, Moves.WING_ATTACK ], - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 1, Moves.SKY_ATTACK ], - [ 1, Moves.HONE_CLAWS ], - [ 18, Moves.TAILWIND ], - [ 24, Moves.SCARY_FACE ], - [ 30, Moves.AERIAL_ACE ], - [ 36, Moves.SLASH ], - [ 42, Moves.WHIRLWIND ], - [ 48, Moves.CRUSH_CLAW ], - [ 57, Moves.AIR_SLASH ], - [ 64, Moves.DEFOG ], - [ 72, Moves.THRASH ], - ], - [Species.VULLABY]: [ - [ 1, Moves.GUST ], - [ 1, Moves.LEER ], - [ 6, Moves.FLATTER ], - [ 12, Moves.PLUCK ], - [ 18, Moves.TAILWIND ], - [ 24, Moves.KNOCK_OFF ], - [ 30, Moves.IRON_DEFENSE ], - [ 36, Moves.WHIRLWIND ], - [ 42, Moves.AIR_SLASH ], - [ 48, Moves.DARK_PULSE ], - [ 54, Moves.NASTY_PLOT ], - [ 60, Moves.DEFOG ], - [ 66, Moves.ATTRACT ], - [ 72, Moves.BRAVE_BIRD ], - ], - [Species.MANDIBUZZ]: [ - [ EVOLVE_MOVE, Moves.BONE_RUSH ], - [ 1, Moves.GUST ], - [ 1, Moves.LEER ], - [ 1, Moves.TOXIC ], - [ 1, Moves.SKY_ATTACK ], - [ 1, Moves.FLATTER ], - [ 1, Moves.PLUCK ], - [ 18, Moves.TAILWIND ], - [ 24, Moves.KNOCK_OFF ], - [ 30, Moves.IRON_DEFENSE ], - [ 36, Moves.WHIRLWIND ], - [ 42, Moves.AIR_SLASH ], - [ 48, Moves.DARK_PULSE ], - [ 57, Moves.NASTY_PLOT ], - [ 64, Moves.DEFOG ], - [ 72, Moves.ATTRACT ], - [ 80, Moves.BRAVE_BIRD ], - ], - [Species.HEATMOR]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LICK ], - [ 5, Moves.FURY_SWIPES ], - [ 10, Moves.INCINERATE ], - [ 15, Moves.BUG_BITE ], - [ 20, Moves.STOCKPILE ], - [ 20, Moves.SPIT_UP ], - [ 20, Moves.SWALLOW ], - [ 25, Moves.SLASH ], - [ 30, Moves.BIND ], - [ 35, Moves.FIRE_LASH ], - [ 40, Moves.HONE_CLAWS ], - [ 45, Moves.AMNESIA ], - [ 50, Moves.FIRE_SPIN ], - [ 55, Moves.INFERNO ], - [ 60, Moves.FLARE_BLITZ ], - ], - [Species.DURANT]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.FURY_CUTTER ], - [ 4, Moves.VISE_GRIP ], - [ 8, Moves.METAL_CLAW ], - [ 12, Moves.BEAT_UP ], - [ 16, Moves.BUG_BITE ], - [ 20, Moves.BITE ], - [ 24, Moves.AGILITY ], - [ 28, Moves.DIG ], - [ 32, Moves.X_SCISSOR ], - [ 36, Moves.CRUNCH ], - [ 40, Moves.METAL_SOUND ], - [ 44, Moves.IRON_HEAD ], - [ 48, Moves.ENTRAINMENT ], - [ 52, Moves.IRON_DEFENSE ], - [ 56, Moves.GUILLOTINE ], - ], - [Species.DEINO]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.FOCUS_ENERGY ], - [ 4, Moves.DRAGON_BREATH ], - [ 8, Moves.BITE ], - [ 12, Moves.ROAR ], - [ 16, Moves.ASSURANCE ], - [ 20, Moves.HEADBUTT ], - [ 24, Moves.WORK_UP ], - [ 28, Moves.SLAM ], - [ 32, Moves.CRUNCH ], - [ 36, Moves.SCARY_FACE ], - [ 40, Moves.DRAGON_PULSE ], - [ 44, Moves.BODY_SLAM ], - [ 48, Moves.HYPER_VOICE ], - [ 52, Moves.DRAGON_RUSH ], - [ 56, Moves.NASTY_PLOT ], - [ 60, Moves.OUTRAGE ], - ], - [Species.ZWEILOUS]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.BITE ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.DOUBLE_HIT ], - [ 12, Moves.ROAR ], - [ 16, Moves.ASSURANCE ], - [ 20, Moves.HEADBUTT ], - [ 24, Moves.WORK_UP ], - [ 28, Moves.SLAM ], - [ 32, Moves.CRUNCH ], - [ 36, Moves.SCARY_FACE ], - [ 40, Moves.DRAGON_PULSE ], - [ 44, Moves.BODY_SLAM ], - [ 48, Moves.HYPER_VOICE ], - [ 54, Moves.DRAGON_RUSH ], - [ 60, Moves.NASTY_PLOT ], - [ 66, Moves.OUTRAGE ], - ], - [Species.HYDREIGON]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.BITE ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.TRI_ATTACK ], - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.DOUBLE_HIT ], - [ 12, Moves.ROAR ], - [ 16, Moves.ASSURANCE ], - [ 20, Moves.HEADBUTT ], - [ 24, Moves.WORK_UP ], - [ 28, Moves.SLAM ], - [ 32, Moves.CRUNCH ], - [ 36, Moves.SCARY_FACE ], - [ 40, Moves.DRAGON_PULSE ], - [ 44, Moves.BODY_SLAM ], - [ 48, Moves.HYPER_VOICE ], - [ 54, Moves.DRAGON_RUSH ], - [ 60, Moves.NASTY_PLOT ], - [ 68, Moves.OUTRAGE ], - [ 76, Moves.HYPER_BEAM ], - ], - [Species.LARVESTA]: [ - [ 1, Moves.EMBER ], - [ 1, Moves.STRING_SHOT ], - [ 6, Moves.FLAME_CHARGE ], - [ 12, Moves.STRUGGLE_BUG ], - [ 18, Moves.FLAME_WHEEL ], - [ 24, Moves.BUG_BITE ], - [ 30, Moves.SCREECH ], - [ 36, Moves.LEECH_LIFE ], - [ 42, Moves.BUG_BUZZ ], - [ 48, Moves.TAKE_DOWN ], - [ 54, Moves.AMNESIA ], - [ 60, Moves.DOUBLE_EDGE ], - [ 66, Moves.FLARE_BLITZ ], - ], - [Species.VOLCARONA]: [ - [ EVOLVE_MOVE, Moves.QUIVER_DANCE ], - [ 1, Moves.GUST ], - [ 1, Moves.WHIRLWIND ], - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.EMBER ], - [ 1, Moves.STRING_SHOT ], - [ 1, Moves.FIRE_SPIN ], - [ 1, Moves.FLARE_BLITZ ], - [ 1, Moves.FLAME_CHARGE ], - [ 1, Moves.STRUGGLE_BUG ], - [ 1, Moves.FIERY_DANCE ], - [ 18, Moves.FLAME_WHEEL ], - [ 24, Moves.BUG_BITE ], - [ 30, Moves.SCREECH ], - [ 36, Moves.LEECH_LIFE ], - [ 42, Moves.BUG_BUZZ ], - [ 48, Moves.HEAT_WAVE ], - [ 54, Moves.AMNESIA ], - [ 62, Moves.HURRICANE ], - [ 70, Moves.FIRE_BLAST ], - [ 78, Moves.RAGE_POWDER ], - ], - [Species.COBALION]: [ - [ 1, Moves.LEER ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.WORK_UP ], - [ 7, Moves.METAL_CLAW ], - [ 14, Moves.QUICK_GUARD ], - [ 21, Moves.DOUBLE_KICK ], - [ 28, Moves.RETALIATE ], - [ 35, Moves.METAL_BURST ], - [ 42, Moves.TAKE_DOWN ], - [ 49, Moves.SACRED_SWORD ], - [ 56, Moves.SWORDS_DANCE ], - [ 63, Moves.IRON_HEAD ], - [ 70, Moves.CLOSE_COMBAT ], - ], - [Species.TERRAKION]: [ - [ 1, Moves.LEER ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.WORK_UP ], - [ 7, Moves.SMACK_DOWN ], - [ 14, Moves.QUICK_GUARD ], - [ 21, Moves.DOUBLE_KICK ], - [ 28, Moves.RETALIATE ], - [ 35, Moves.ROCK_SLIDE ], - [ 42, Moves.TAKE_DOWN ], - [ 49, Moves.SACRED_SWORD ], - [ 56, Moves.SWORDS_DANCE ], - [ 63, Moves.STONE_EDGE ], - [ 70, Moves.CLOSE_COMBAT ], - ], - [Species.VIRIZION]: [ - [ RELEARN_MOVE, Moves.TAKE_DOWN ], - [ 1, Moves.LEER ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.WORK_UP ], - [ 7, Moves.MAGICAL_LEAF ], - [ 14, Moves.QUICK_GUARD ], - [ 21, Moves.DOUBLE_KICK ], - [ 28, Moves.RETALIATE ], - [ 35, Moves.GIGA_DRAIN ], - [ 42, Moves.TAKE_DOWN ], - [ 49, Moves.SACRED_SWORD ], - [ 56, Moves.SWORDS_DANCE ], - [ 63, Moves.LEAF_BLADE ], - [ 70, Moves.CLOSE_COMBAT ], - ], - [Species.TORNADUS]: [ - [ 1, Moves.GUST ], - [ 1, Moves.ASTONISH ], - [ 5, Moves.LEER ], - [ 10, Moves.SWAGGER ], - [ 15, Moves.BITE ], - [ 20, Moves.AIR_CUTTER ], - [ 25, Moves.AGILITY ], - [ 30, Moves.TAILWIND ], - [ 35, Moves.AIR_SLASH ], - [ 40, Moves.CRUNCH ], - [ 45, Moves.EXTRASENSORY ], - [ 50, Moves.UPROAR ], - [ 55, Moves.HAMMER_ARM ], - [ 60, Moves.RAIN_DANCE ], - [ 65, Moves.HURRICANE ], - [ 70, Moves.THRASH ], - [ 77, Moves.BLEAKWIND_STORM ], - ], - [Species.THUNDURUS]: [ - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.ASTONISH ], - [ 5, Moves.LEER ], - [ 10, Moves.SWAGGER ], - [ 15, Moves.BITE ], - [ 20, Moves.SHOCK_WAVE ], - [ 25, Moves.AGILITY ], - [ 30, Moves.CHARGE ], - [ 31, Moves.HEAL_BLOCK ], - [ 35, Moves.VOLT_SWITCH ], - [ 40, Moves.CRUNCH ], - [ 45, Moves.DISCHARGE ], - [ 50, Moves.UPROAR ], - [ 55, Moves.HAMMER_ARM ], - [ 60, Moves.RAIN_DANCE ], - [ 65, Moves.THUNDER ], - [ 70, Moves.THRASH ], - [ 75, Moves.WILDBOLT_STORM ], - ], - [Species.RESHIRAM]: [ - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.ANCIENT_POWER ], - [ 1, Moves.FIRE_FANG ], - [ 1, Moves.NOBLE_ROAR ], - [ 8, Moves.SLASH ], - [ 16, Moves.CRUNCH ], - [ 24, Moves.EXTRASENSORY ], - [ 32, Moves.DRAGON_PULSE ], - [ 40, Moves.FLAMETHROWER ], - [ 48, Moves.FUSION_FLARE ], - [ 56, Moves.HYPER_VOICE ], - [ 64, Moves.FIRE_BLAST ], - [ 72, Moves.IMPRISON ], - [ 80, Moves.OUTRAGE ], - [ 88, Moves.BLUE_FLARE ], - ], - [Species.ZEKROM]: [ - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.ANCIENT_POWER ], - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.NOBLE_ROAR ], - [ 8, Moves.SLASH ], - [ 16, Moves.CRUNCH ], - [ 24, Moves.ZEN_HEADBUTT ], - [ 32, Moves.DRAGON_CLAW ], - [ 40, Moves.THUNDERBOLT ], - [ 48, Moves.FUSION_BOLT ], - [ 56, Moves.HYPER_VOICE ], - [ 64, Moves.THUNDER ], - [ 72, Moves.IMPRISON ], - [ 80, Moves.OUTRAGE ], - [ 88, Moves.BOLT_STRIKE ], - ], - [Species.LANDORUS]: [ - [ 1, Moves.SAND_TOMB ], - [ 1, Moves.SMACK_DOWN ], - [ 5, Moves.LEER ], - [ 10, Moves.BLOCK ], - [ 15, Moves.BULLDOZE ], - [ 20, Moves.ROCK_TOMB ], - [ 30, Moves.IMPRISON ], - [ 35, Moves.ROCK_SLIDE ], - [ 40, Moves.EARTH_POWER ], - [ 45, Moves.EXTRASENSORY ], - [ 50, Moves.STONE_EDGE ], - [ 55, Moves.HAMMER_ARM ], - [ 60, Moves.SANDSTORM ], - [ 65, Moves.EARTHQUAKE ], - [ 70, Moves.OUTRAGE ], - [ 75, Moves.FISSURE ], - [ 80, Moves.SANDSEAR_STORM ], - ], - [Species.KYUREM]: [ - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.ANCIENT_POWER ], - [ 1, Moves.NOBLE_ROAR ], - [ 1, Moves.FREEZE_DRY ], - [ 8, Moves.SLASH ], - [ 16, Moves.ENDEAVOR ], - [ 24, Moves.DRAGON_PULSE ], - [ 32, Moves.ICE_BEAM ], - [ 40, Moves.HYPER_VOICE ], - [ 48, Moves.SCARY_FACE ], - [ 56, Moves.BLIZZARD ], - [ 64, Moves.IMPRISON ], - [ 72, Moves.OUTRAGE ], - [ 80, Moves.GLACIATE ], - [ 88, Moves.SHEER_COLD ], - ], - [Species.KELDEO]: [ - [ 1, Moves.LEER ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.AQUA_JET ], - [ 1, Moves.WORK_UP ], - [ 1, Moves.SECRET_SWORD ], - [ 7, Moves.BUBBLE_BEAM ], - [ 14, Moves.QUICK_GUARD ], - [ 21, Moves.DOUBLE_KICK ], - [ 28, Moves.RETALIATE ], - [ 35, Moves.AQUA_TAIL ], - [ 42, Moves.TAKE_DOWN ], - [ 49, Moves.SACRED_SWORD ], - [ 56, Moves.SWORDS_DANCE ], - [ 63, Moves.HYDRO_PUMP ], - [ 70, Moves.CLOSE_COMBAT ], - ], - [Species.MELOETTA]: [ - [ 1, Moves.SING ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.ROUND ], - [ 21, Moves.TEETER_DANCE ], - [ 26, Moves.ACROBATICS ], - [ 31, Moves.PSYBEAM ], - [ 36, Moves.ECHOED_VOICE ], - [ 43, Moves.U_TURN ], - [ 50, Moves.RELIC_SONG ], - [ 57, Moves.PSYCHIC ], - [ 64, Moves.HYPER_VOICE ], - [ 71, Moves.ROLE_PLAY ], - [ 78, Moves.CLOSE_COMBAT ], - [ 85, Moves.PERISH_SONG ], - ], - [Species.GENESECT]: [ - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.FURY_CUTTER ], - [ 7, Moves.SCREECH ], - [ 14, Moves.METAL_CLAW ], - [ 21, Moves.FELL_STINGER ], - [ 28, Moves.FLAME_CHARGE ], - [ 35, Moves.METAL_SOUND ], - [ 42, Moves.X_SCISSOR ], - [ 49, Moves.MAGNET_RISE ], - [ 56, Moves.BUG_BUZZ ], - [ 63, Moves.SIMPLE_BEAM ], - [ 70, Moves.ZAP_CANNON ], - [ 77, Moves.LOCK_ON ], - [ 84, Moves.TECHNO_BLAST ], - [ 91, Moves.SELF_DESTRUCT ], - ], - [Species.CHESPIN]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.VINE_WHIP ], - [ 8, Moves.ROLLOUT ], - [ 11, Moves.BITE ], - [ 15, Moves.LEECH_SEED ], - [ 18, Moves.PIN_MISSILE ], - [ 27, Moves.TAKE_DOWN ], - [ 32, Moves.SEED_BOMB ], - [ 35, Moves.MUD_SHOT ], - [ 42, Moves.BODY_SLAM ], - [ 45, Moves.PAIN_SPLIT ], - [ 48, Moves.WOOD_HAMMER ], - ], - [Species.QUILLADIN]: [ - [ EVOLVE_MOVE, Moves.NEEDLE_ARM ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.VINE_WHIP ], - [ 8, Moves.ROLLOUT ], - [ 11, Moves.BITE ], - [ 15, Moves.LEECH_SEED ], - [ 20, Moves.SEED_BOMB ], - [ 24, Moves.PIN_MISSILE ], - [ 29, Moves.TAKE_DOWN ], - [ 34, Moves.MUD_SHOT ], - [ 38, Moves.BULK_UP ], - [ 43, Moves.BODY_SLAM ], - [ 47, Moves.PAIN_SPLIT ], - [ 53, Moves.WOOD_HAMMER ], - ], - [Species.CHESNAUGHT]: [ - [ EVOLVE_MOVE, Moves.SPIKY_SHIELD ], - [ 1, Moves.VINE_WHIP ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.ROLLOUT ], - [ 1, Moves.HAMMER_ARM ], - [ 1, Moves.FEINT ], - [ 1, Moves.NEEDLE_ARM ], - [ 11, Moves.BITE ], - [ 15, Moves.LEECH_SEED ], - [ 19, Moves.PIN_MISSILE ], - [ 29, Moves.TAKE_DOWN ], - [ 35, Moves.SEED_BOMB ], - [ 41, Moves.MUD_SHOT ], - [ 48, Moves.BULK_UP ], - [ 54, Moves.BODY_SLAM ], - [ 60, Moves.PAIN_SPLIT ], - [ 66, Moves.WOOD_HAMMER ], - [ 78, Moves.GIGA_IMPACT ], - ], - [Species.FENNEKIN]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.TAIL_WHIP ], - [ 5, Moves.EMBER ], - [ 11, Moves.HOWL ], - [ 14, Moves.FLAME_CHARGE ], - [ 17, Moves.PSYBEAM ], - [ 20, Moves.FIRE_SPIN ], - [ 25, Moves.LIGHT_SCREEN ], - [ 31, Moves.PSYSHOCK ], - [ 35, Moves.FLAMETHROWER ], - [ 38, Moves.WILL_O_WISP ], - [ 41, Moves.PSYCHIC ], - [ 43, Moves.SUNNY_DAY ], - [ 48, Moves.FIRE_BLAST ], - ], - [Species.BRAIXEN]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.EMBER ], - [ 11, Moves.HOWL ], - [ 14, Moves.FLAME_CHARGE ], - [ 18, Moves.PSYBEAM ], - [ 22, Moves.FIRE_SPIN ], - [ 28, Moves.LIGHT_SCREEN ], - [ 36, Moves.PSYSHOCK ], - [ 41, Moves.FLAMETHROWER ], - [ 45, Moves.WILL_O_WISP ], - [ 49, Moves.PSYCHIC ], - [ 52, Moves.SUNNY_DAY ], - [ 56, Moves.MAGIC_ROOM ], - [ 59, Moves.FIRE_BLAST ], - ], - [Species.DELPHOX]: [ - [ EVOLVE_MOVE, Moves.MYSTICAL_FIRE ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.EMBER ], - [ 1, Moves.SHADOW_BALL ], - [ 1, Moves.FUTURE_SIGHT ], - [ 1, Moves.ROLE_PLAY ], - [ 1, Moves.HOWL ], - [ 1, Moves.SWITCHEROO ], - [ 14, Moves.FLAME_CHARGE ], - [ 18, Moves.PSYBEAM ], - [ 22, Moves.FIRE_SPIN ], - [ 28, Moves.LIGHT_SCREEN ], - [ 38, Moves.PSYSHOCK ], - [ 45, Moves.FLAMETHROWER ], - [ 51, Moves.WILL_O_WISP ], - [ 57, Moves.PSYCHIC ], - [ 62, Moves.SUNNY_DAY ], - [ 68, Moves.MAGIC_ROOM ], - [ 74, Moves.FIRE_BLAST ], - ], - [Species.FROAKIE]: [ - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 5, Moves.WATER_GUN ], - [ 8, Moves.QUICK_ATTACK ], - [ 10, Moves.LICK ], - [ 14, Moves.WATER_PULSE ], - [ 18, Moves.SMOKESCREEN ], - [ 21, Moves.ROUND ], - [ 25, Moves.FLING ], - [ 29, Moves.SMACK_DOWN ], - [ 35, Moves.SUBSTITUTE ], - [ 39, Moves.BOUNCE ], - [ 43, Moves.DOUBLE_TEAM ], - [ 48, Moves.HYDRO_PUMP ], - ], - [Species.FROGADIER]: [ - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 8, Moves.QUICK_ATTACK ], - [ 10, Moves.LICK ], - [ 14, Moves.WATER_PULSE ], - [ 19, Moves.SMOKESCREEN ], - [ 23, Moves.ROUND ], - [ 28, Moves.FLING ], - [ 33, Moves.SMACK_DOWN ], - [ 40, Moves.SUBSTITUTE ], - [ 45, Moves.BOUNCE ], - [ 50, Moves.DOUBLE_TEAM ], - [ 56, Moves.HYDRO_PUMP ], - ], - [Species.GRENINJA]: [ - [ EVOLVE_MOVE, Moves.WATER_SHURIKEN ], - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.ROUND ], // Previous Stage Move - [ 1, Moves.FLING ], // Previous Stage Move - [ 1, Moves.SMACK_DOWN ], // Previous Stage Move - [ 1, Moves.BOUNCE ], // Previous Stage Move - [ 1, Moves.HAZE ], - [ 1, Moves.MAT_BLOCK ], - [ 1, Moves.ROLE_PLAY ], - [ 1, Moves.NIGHT_SLASH ], - [ 10, Moves.LICK ], - [ 14, Moves.WATER_PULSE ], - [ 19, Moves.SMOKESCREEN ], - [ 23, Moves.SHADOW_SNEAK ], - [ 28, Moves.SPIKES ], - [ 33, Moves.AERIAL_ACE ], - [ 42, Moves.SUBSTITUTE ], - [ 49, Moves.EXTRASENSORY ], - [ 56, Moves.DOUBLE_TEAM ], - [ 68, Moves.HYDRO_PUMP ], - ], - [Species.BUNNELBY]: [ - [ 1, Moves.LEER ], - [ 1, Moves.MUD_SLAP ], - [ 3, Moves.TACKLE ], - [ 6, Moves.LASER_FOCUS ], - [ 9, Moves.QUICK_ATTACK ], - [ 12, Moves.MUD_SHOT ], - [ 15, Moves.FLAIL ], - [ 18, Moves.DOUBLE_KICK ], - [ 21, Moves.BULLDOZE ], - [ 24, Moves.DIG ], - [ 27, Moves.BOUNCE ], - [ 30, Moves.TAKE_DOWN ], - [ 33, Moves.SWORDS_DANCE ], - [ 36, Moves.EARTHQUAKE ], - [ 39, Moves.SUPER_FANG ], - ], - [Species.DIGGERSBY]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.LASER_FOCUS ], - [ 1, Moves.ROTOTILLER ], - [ 9, Moves.QUICK_ATTACK ], - [ 12, Moves.MUD_SHOT ], - [ 15, Moves.FLAIL ], - [ 18, Moves.DOUBLE_KICK ], - [ 23, Moves.BULLDOZE ], - [ 28, Moves.DIG ], - [ 33, Moves.BOUNCE ], - [ 38, Moves.TAKE_DOWN ], - [ 43, Moves.SWORDS_DANCE ], - [ 48, Moves.EARTHQUAKE ], - [ 53, Moves.SUPER_FANG ], - [ 58, Moves.HAMMER_ARM ], - ], - [Species.FLETCHLING]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 5, Moves.QUICK_ATTACK ], - [ 10, Moves.EMBER ], - [ 15, Moves.FLAIL ], - [ 20, Moves.ACROBATICS ], - [ 25, Moves.AGILITY ], - [ 30, Moves.AERIAL_ACE ], - [ 35, Moves.TAILWIND ], - [ 40, Moves.STEEL_WING ], - [ 45, Moves.ROOST ], - [ 50, Moves.FLY ], - ], - [Species.FLETCHINDER]: [ - [ EVOLVE_MOVE, Moves.FLAME_CHARGE ], - [ 1, Moves.GROWL ], - [ 1, Moves.EMBER ], - [ 1, Moves.PECK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.FEINT ], - [ 15, Moves.FLAIL ], - [ 22, Moves.ACROBATICS ], - [ 29, Moves.AGILITY ], - [ 36, Moves.AERIAL_ACE ], - [ 43, Moves.TAILWIND ], - [ 50, Moves.STEEL_WING ], - [ 57, Moves.ROOST ], - [ 64, Moves.FLY ], - ], - [Species.TALONFLAME]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.EMBER ], - [ 1, Moves.PECK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.FEINT ], - [ 1, Moves.FLARE_BLITZ ], - [ 1, Moves.FLAME_CHARGE ], - [ 15, Moves.FLAIL ], - [ 22, Moves.ACROBATICS ], - [ 29, Moves.AGILITY ], - [ 38, Moves.AERIAL_ACE ], - [ 47, Moves.TAILWIND ], - [ 56, Moves.STEEL_WING ], - [ 65, Moves.ROOST ], - [ 74, Moves.FLY ], - [ 83, Moves.BRAVE_BIRD ], - ], - [Species.SCATTERBUG]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.STRING_SHOT ], - [ 6, Moves.STUN_SPORE ], - [ 15, Moves.BUG_BITE ], - ], - [Species.SPEWPA]: [ - [ EVOLVE_MOVE, Moves.PROTECT ], - [ RELEARN_MOVE, Moves.TACKLE ], // Previous Stage Move - [ RELEARN_MOVE, Moves.STRING_SHOT ], // Previous Stage Move - [ RELEARN_MOVE, Moves.STUN_SPORE ], // Previous Stage Move - [ RELEARN_MOVE, Moves.BUG_BITE ], // Previous Stage Move - [ 1, Moves.HARDEN ], - ], - [Species.VIVILLON]: [ - [ EVOLVE_MOVE, Moves.GUST ], - [ 1, Moves.PROTECT ], // Previous Stage Move - [ 1, Moves.TACKLE ], // Previous Stage Move - [ 1, Moves.STRING_SHOT ], // Previous Stage Move - [ 1, Moves.HARDEN ], // Previous Stage Move - [ 1, Moves.BUG_BITE ], // Previous Stage Move - [ 1, Moves.POISON_POWDER ], - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.SLEEP_POWDER ], - [ 1, Moves.STRUGGLE_BUG ], - [ 1, Moves.POWDER ], - [ 12, Moves.LIGHT_SCREEN ], - [ 17, Moves.PSYBEAM ], - [ 21, Moves.SUPERSONIC ], - [ 25, Moves.DRAINING_KISS ], - [ 31, Moves.SAFEGUARD ], - [ 35, Moves.BUG_BUZZ ], - [ 45, Moves.QUIVER_DANCE ], - [ 50, Moves.HURRICANE ], - ], - [Species.LITLEO]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 5, Moves.EMBER ], - [ 8, Moves.WORK_UP ], - [ 11, Moves.HEADBUTT ], - [ 15, Moves.NOBLE_ROAR ], - [ 20, Moves.TAKE_DOWN ], - [ 23, Moves.FIRE_FANG ], - [ 28, Moves.ENDEAVOR ], - [ 33, Moves.ECHOED_VOICE ], - [ 36, Moves.FLAMETHROWER ], - [ 39, Moves.CRUNCH ], - [ 43, Moves.HYPER_VOICE ], - [ 46, Moves.INCINERATE ], - [ 50, Moves.OVERHEAT ], - ], - [Species.PYROAR]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 1, Moves.HYPER_BEAM ], - [ 1, Moves.WORK_UP ], - [ 11, Moves.HEADBUTT ], - [ 15, Moves.NOBLE_ROAR ], - [ 20, Moves.TAKE_DOWN ], - [ 23, Moves.FIRE_FANG ], - [ 28, Moves.ENDEAVOR ], - [ 33, Moves.ECHOED_VOICE ], - [ 38, Moves.FLAMETHROWER ], - [ 42, Moves.CRUNCH ], - [ 48, Moves.HYPER_VOICE ], - [ 51, Moves.INCINERATE ], - [ 57, Moves.OVERHEAT ], - ], - [Species.FLABEBE]: [ - [ 1, Moves.VINE_WHIP ], - [ 1, Moves.TACKLE ], - [ 6, Moves.FAIRY_WIND ], - [ 10, Moves.SAFEGUARD ], - [ 15, Moves.RAZOR_LEAF ], - [ 20, Moves.WISH ], - [ 22, Moves.MAGICAL_LEAF ], - [ 24, Moves.GRASSY_TERRAIN ], - [ 28, Moves.PETAL_BLIZZARD ], - [ 33, Moves.SYNTHESIS ], - [ 37, Moves.MISTY_TERRAIN ], - [ 41, Moves.MOONBLAST ], - [ 45, Moves.PETAL_DANCE ], - [ 48, Moves.SOLAR_BEAM ], - ], - [Species.FLOETTE]: [ - [ 1, Moves.VINE_WHIP ], - [ 1, Moves.TACKLE ], - [ 1, Moves.FAIRY_WIND ], - [ 10, Moves.SAFEGUARD ], - [ 15, Moves.RAZOR_LEAF ], - [ 20, Moves.WISH ], - [ 25, Moves.MAGICAL_LEAF ], - [ 27, Moves.GRASSY_TERRAIN ], - [ 33, Moves.PETAL_BLIZZARD ], - [ 38, Moves.SYNTHESIS ], - [ 43, Moves.MISTY_TERRAIN ], - [ 46, Moves.MOONBLAST ], - [ 51, Moves.PETAL_DANCE ], - [ 58, Moves.SOLAR_BEAM ], - ], - [Species.FLORGES]: [ - [ 1, Moves.VINE_WHIP ], // Previous Stage Move - [ 1, Moves.TACKLE ], // Previous Stage Move - [ 1, Moves.FAIRY_WIND ], // Previous Stage Move - [ 1, Moves.RAZOR_LEAF ], // Previous Stage Move - [ 1, Moves.SOLAR_BEAM ], - [ 1, Moves.PETAL_DANCE ], - [ 1, Moves.SAFEGUARD ], - [ 1, Moves.SYNTHESIS ], - [ 1, Moves.WISH ], - [ 1, Moves.LUCKY_CHANT ], - [ 1, Moves.MAGICAL_LEAF ], - [ 1, Moves.GRASS_KNOT ], - [ 1, Moves.PETAL_BLIZZARD ], - [ 1, Moves.DISARMING_VOICE ], - [ 1, Moves.GRASSY_TERRAIN ], - [ 1, Moves.MISTY_TERRAIN ], - [ 5, Moves.MOONBLAST ], - ], - [Species.SKIDDO]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWTH ], - [ 7, Moves.VINE_WHIP ], - [ 9, Moves.TAIL_WHIP ], - [ 12, Moves.LEECH_SEED ], - [ 13, Moves.RAZOR_LEAF ], - [ 16, Moves.WORRY_SEED ], - [ 20, Moves.SYNTHESIS ], - [ 22, Moves.TAKE_DOWN ], - [ 26, Moves.BULLDOZE ], - [ 30, Moves.SEED_BOMB ], - [ 34, Moves.BULK_UP ], - [ 38, Moves.DOUBLE_EDGE ], - [ 42, Moves.HORN_LEECH ], - [ 45, Moves.LEAF_BLADE ], - ], - [Species.GOGOAT]: [ - [ EVOLVE_MOVE, Moves.AERIAL_ACE ], - [ 1, Moves.VINE_WHIP ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWTH ], - [ 1, Moves.EARTHQUAKE ], - [ 12, Moves.LEECH_SEED ], - [ 13, Moves.RAZOR_LEAF ], - [ 16, Moves.WORRY_SEED ], - [ 20, Moves.SYNTHESIS ], - [ 22, Moves.TAKE_DOWN ], - [ 26, Moves.BULLDOZE ], - [ 30, Moves.SEED_BOMB ], - [ 34, Moves.BULK_UP ], - [ 40, Moves.DOUBLE_EDGE ], - [ 47, Moves.HORN_LEECH ], - [ 55, Moves.LEAF_BLADE ], - [ 58, Moves.MILK_DRINK ], - ], - [Species.PANCHAM]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 4, Moves.ARM_THRUST ], - [ 8, Moves.TAUNT ], - [ 12, Moves.CIRCLE_THROW ], - [ 16, Moves.LOW_SWEEP ], - [ 20, Moves.WORK_UP ], - [ 24, Moves.SLASH ], - [ 28, Moves.VITAL_THROW ], - [ 33, Moves.CRUNCH ], - [ 36, Moves.BODY_SLAM ], - [ 40, Moves.PARTING_SHOT ], - [ 44, Moves.ENTRAINMENT ], - ], - [Species.PANGORO]: [ - [ EVOLVE_MOVE, Moves.NIGHT_SLASH ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.TAUNT ], - [ 1, Moves.ARM_THRUST ], - [ 1, Moves.BULLET_PUNCH ], - [ 12, Moves.CIRCLE_THROW ], - [ 16, Moves.LOW_SWEEP ], - [ 20, Moves.WORK_UP ], - [ 24, Moves.SLASH ], - [ 28, Moves.VITAL_THROW ], - [ 35, Moves.CRUNCH ], - [ 40, Moves.BODY_SLAM ], - [ 46, Moves.PARTING_SHOT ], - [ 52, Moves.ENTRAINMENT ], - [ 58, Moves.HAMMER_ARM ], - ], - [Species.FURFROU]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 5, Moves.SAND_ATTACK ], - [ 9, Moves.BABY_DOLL_EYES ], - [ 12, Moves.HEADBUTT ], - [ 15, Moves.TAIL_WHIP ], - [ 22, Moves.BITE ], - [ 27, Moves.ODOR_SLEUTH ], - [ 33, Moves.RETALIATE ], - [ 35, Moves.TAKE_DOWN ], - [ 38, Moves.CHARM ], - [ 42, Moves.SUCKER_PUNCH ], - [ 48, Moves.COTTON_GUARD ], - ], - [Species.ESPURR]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 3, Moves.FAKE_OUT ], - [ 6, Moves.DISARMING_VOICE ], - [ 9, Moves.CONFUSION ], - [ 18, Moves.COVET ], - [ 21, Moves.PSYBEAM ], - [ 30, Moves.LIGHT_SCREEN ], - [ 30, Moves.REFLECT ], - [ 33, Moves.PSYSHOCK ], - ], - [Species.MEOWSTIC]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.MEAN_LOOK ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.DISARMING_VOICE ], - [ 9, Moves.CONFUSION ], - [ 12, Moves.HELPING_HAND ], - [ 15, Moves.CHARM ], - [ 18, Moves.COVET ], - [ 21, Moves.PSYBEAM ], - [ 24, Moves.SUCKER_PUNCH ], - [ 29, Moves.ROLE_PLAY ], - [ 34, Moves.LIGHT_SCREEN ], - [ 34, Moves.REFLECT ], - [ 39, Moves.PSYSHOCK ], - [ 44, Moves.IMPRISON ], - [ 49, Moves.QUICK_GUARD ], - [ 54, Moves.PSYCHIC ], - [ 59, Moves.MISTY_TERRAIN ], - ], - [Species.HONEDGE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.FURY_CUTTER ], - [ 4, Moves.SHADOW_SNEAK ], - [ 8, Moves.AUTOTOMIZE ], - [ 12, Moves.AERIAL_ACE ], - [ 16, Moves.METAL_SOUND ], - [ 20, Moves.SLASH ], - [ 24, Moves.NIGHT_SLASH ], - [ 28, Moves.RETALIATE ], - [ 32, Moves.IRON_DEFENSE ], - [ 36, Moves.IRON_HEAD ], - [ 40, Moves.POWER_TRICK ], - [ 44, Moves.SWORDS_DANCE ], - [ 48, Moves.SACRED_SWORD ], - ], - [Species.DOUBLADE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.SHADOW_SNEAK ], - [ 1, Moves.AUTOTOMIZE ], - [ 12, Moves.AERIAL_ACE ], - [ 16, Moves.METAL_SOUND ], - [ 20, Moves.SLASH ], - [ 24, Moves.NIGHT_SLASH ], - [ 28, Moves.RETALIATE ], - [ 32, Moves.IRON_DEFENSE ], - [ 38, Moves.IRON_HEAD ], - [ 44, Moves.POWER_TRICK ], - [ 50, Moves.SWORDS_DANCE ], - [ 56, Moves.SACRED_SWORD ], - ], - [Species.AEGISLASH]: [ - [ EVOLVE_MOVE, Moves.KINGS_SHIELD ], - [ 1, Moves.SWORDS_DANCE ], - [ 1, Moves.PURSUIT ], - [ 1, Moves.TACKLE ], - [ 1, Moves.SLASH ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.METAL_SOUND ], - [ 1, Moves.AERIAL_ACE ], - [ 1, Moves.IRON_DEFENSE ], - [ 1, Moves.POWER_TRICK ], - [ 1, Moves.NIGHT_SLASH ], - [ 1, Moves.SHADOW_SNEAK ], - [ 1, Moves.IRON_HEAD ], - [ 1, Moves.HEAD_SMASH ], - [ 1, Moves.AUTOTOMIZE ], - [ 1, Moves.RETALIATE ], - [ 1, Moves.SACRED_SWORD ], - ], - [Species.SPRITZEE]: [ - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.FAIRY_WIND ], - [ 3, Moves.SWEET_KISS ], - [ 6, Moves.ECHOED_VOICE ], - [ 9, Moves.DRAINING_KISS ], - [ 12, Moves.AROMATHERAPY ], - [ 18, Moves.ATTRACT ], - [ 21, Moves.FLAIL ], - [ 24, Moves.MISTY_TERRAIN ], - [ 27, Moves.PSYCHIC ], - [ 30, Moves.CHARM ], - [ 33, Moves.CALM_MIND ], - [ 36, Moves.MOONBLAST ], - [ 39, Moves.SKILL_SWAP ], - ], - [Species.AROMATISSE]: [ - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.ECHOED_VOICE ], - [ 1, Moves.HEAL_PULSE ], - [ 1, Moves.FAIRY_WIND ], - [ 1, Moves.AROMATIC_MIST ], - [ 9, Moves.DISARMING_VOICE ], - [ 12, Moves.AROMATHERAPY ], - [ 15, Moves.DRAINING_KISS ], - [ 18, Moves.ATTRACT ], - [ 21, Moves.FLAIL ], - [ 24, Moves.MISTY_TERRAIN ], - [ 27, Moves.PSYCHIC ], - [ 30, Moves.CHARM ], - [ 33, Moves.CALM_MIND ], - [ 36, Moves.MOONBLAST ], - [ 39, Moves.SKILL_SWAP ], - [ 42, Moves.PSYCH_UP ], - ], - [Species.SWIRLIX]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.SWEET_SCENT ], - [ 3, Moves.PLAY_NICE ], - [ 6, Moves.FAIRY_WIND ], - [ 9, Moves.AROMATHERAPY ], - [ 12, Moves.DRAINING_KISS ], - [ 15, Moves.FAKE_TEARS ], - [ 18, Moves.ROUND ], - [ 21, Moves.STRING_SHOT ], - [ 24, Moves.COTTON_SPORE ], - [ 27, Moves.ENERGY_BALL ], - [ 30, Moves.WISH ], - [ 33, Moves.PLAY_ROUGH ], - [ 36, Moves.COTTON_GUARD ], - [ 39, Moves.ENDEAVOR ], - ], - [Species.SLURPUFF]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.FAIRY_WIND ], - [ 1, Moves.PLAY_NICE ], - [ 9, Moves.AROMATHERAPY ], - [ 12, Moves.DRAINING_KISS ], - [ 15, Moves.FAKE_TEARS ], - [ 18, Moves.ROUND ], - [ 21, Moves.STRING_SHOT ], - [ 24, Moves.COTTON_SPORE ], - [ 27, Moves.ENERGY_BALL ], - [ 30, Moves.WISH ], - [ 33, Moves.PLAY_ROUGH ], - [ 36, Moves.COTTON_GUARD ], - [ 39, Moves.ENDEAVOR ], - [ 42, Moves.STICKY_WEB ], - ], - [Species.INKAY]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.PECK ], - [ 1, Moves.CONSTRICT ], - [ 3, Moves.HYPNOSIS ], - [ 6, Moves.WRAP ], - [ 9, Moves.PAYBACK ], - [ 12, Moves.PLUCK ], - [ 15, Moves.PSYBEAM ], - [ 18, Moves.SWAGGER ], - [ 21, Moves.SLASH ], - [ 24, Moves.NIGHT_SLASH ], - [ 27, Moves.PSYCHO_CUT ], - [ 31, Moves.SWITCHEROO ], - [ 33, Moves.FOUL_PLAY ], - [ 36, Moves.TOPSY_TURVY ], - [ 39, Moves.SUPERPOWER ], - ], - [Species.MALAMAR]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.WRAP ], - [ 1, Moves.PECK ], - [ 1, Moves.CONSTRICT ], - [ 1, Moves.HYPNOSIS ], - [ 1, Moves.REVERSAL ], - [ 9, Moves.PAYBACK ], - [ 12, Moves.PLUCK ], - [ 15, Moves.PSYBEAM ], - [ 18, Moves.SWAGGER ], - [ 21, Moves.SLASH ], - [ 24, Moves.NIGHT_SLASH ], - [ 27, Moves.PSYCHO_CUT ], - [ 33, Moves.SWITCHEROO ], - [ 37, Moves.FOUL_PLAY ], - [ 42, Moves.TOPSY_TURVY ], - [ 47, Moves.SUPERPOWER ], - ], - [Species.BINACLE]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.MUD_SLAP ], - [ 4, Moves.WITHDRAW ], - [ 8, Moves.WATER_GUN ], - [ 12, Moves.FURY_CUTTER ], - [ 16, Moves.FURY_SWIPES ], - [ 20, Moves.ANCIENT_POWER ], - [ 24, Moves.ROCK_POLISH ], - [ 28, Moves.SLASH ], - [ 32, Moves.HONE_CLAWS ], - [ 36, Moves.RAZOR_SHELL ], - [ 40, Moves.SHELL_SMASH ], - [ 44, Moves.CROSS_CHOP ], - ], - [Species.BARBARACLE]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.SKULL_BASH ], - [ 1, Moves.MUD_SLAP ], - [ 12, Moves.FURY_CUTTER ], - [ 16, Moves.FURY_SWIPES ], - [ 20, Moves.ANCIENT_POWER ], - [ 24, Moves.ROCK_POLISH ], - [ 28, Moves.SLASH ], - [ 32, Moves.HONE_CLAWS ], - [ 36, Moves.RAZOR_SHELL ], - [ 42, Moves.SHELL_SMASH ], - [ 48, Moves.CROSS_CHOP ], - [ 54, Moves.STONE_EDGE ], - ], - [Species.SKRELP]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.SMOKESCREEN ], - [ 5, Moves.ACID ], - [ 10, Moves.WATER_GUN ], - [ 15, Moves.TAIL_WHIP ], - [ 20, Moves.DOUBLE_TEAM ], - [ 25, Moves.POISON_TAIL ], - [ 30, Moves.WATER_PULSE ], - [ 35, Moves.TOXIC ], - [ 40, Moves.DRAGON_PULSE ], - [ 45, Moves.AQUA_TAIL ], - [ 50, Moves.SLUDGE_BOMB ], - [ 55, Moves.HYDRO_PUMP ], - ], - [Species.DRAGALGE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.ACID ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.FEINT_ATTACK ], - [ 15, Moves.TAIL_WHIP ], - [ 20, Moves.DOUBLE_TEAM ], - [ 25, Moves.POISON_TAIL ], - [ 30, Moves.WATER_PULSE ], - [ 35, Moves.TOXIC ], - [ 40, Moves.DRAGON_PULSE ], - [ 45, Moves.AQUA_TAIL ], - [ 52, Moves.SLUDGE_BOMB ], - [ 59, Moves.HYDRO_PUMP ], - [ 66, Moves.OUTRAGE ], - ], - [Species.CLAUNCHER]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.SPLASH ], - [ 10, Moves.FLAIL ], - [ 15, Moves.AQUA_JET ], - [ 20, Moves.SMACK_DOWN ], - [ 25, Moves.HONE_CLAWS ], - [ 30, Moves.WATER_PULSE ], - [ 35, Moves.SWORDS_DANCE ], - [ 40, Moves.AURA_SPHERE ], - [ 45, Moves.BOUNCE ], - [ 50, Moves.MUDDY_WATER ], - [ 55, Moves.CRABHAMMER ], - ], - [Species.CLAWITZER]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.SPLASH ], - [ 1, Moves.FLAIL ], - [ 1, Moves.DARK_PULSE ], - [ 1, Moves.DRAGON_PULSE ], - [ 1, Moves.HEAL_PULSE ], - [ 15, Moves.AQUA_JET ], - [ 20, Moves.SMACK_DOWN ], - [ 25, Moves.HONE_CLAWS ], - [ 30, Moves.WATER_PULSE ], - [ 35, Moves.SWORDS_DANCE ], - [ 42, Moves.AURA_SPHERE ], - [ 49, Moves.BOUNCE ], - [ 56, Moves.MUDDY_WATER ], - [ 63, Moves.CRABHAMMER ], - ], - [Species.HELIOPTILE]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.MUD_SLAP ], - [ 4, Moves.POUND ], - [ 8, Moves.THUNDER_SHOCK ], - [ 12, Moves.QUICK_ATTACK ], - [ 16, Moves.CHARGE ], - [ 20, Moves.BULLDOZE ], - [ 24, Moves.VOLT_SWITCH ], - [ 28, Moves.PARABOLIC_CHARGE ], - [ 32, Moves.THUNDER_WAVE ], - [ 36, Moves.THUNDERBOLT ], - [ 40, Moves.ELECTRIFY ], - [ 44, Moves.THUNDER ], - ], - [Species.HELIOLISK]: [ - [ 1, Moves.POUND ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.RAZOR_WIND ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.THUNDERBOLT ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.THUNDER ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.CHARGE ], - [ 1, Moves.DISCHARGE ], - [ 1, Moves.VOLT_SWITCH ], - [ 1, Moves.BULLDOZE ], - [ 1, Moves.PARABOLIC_CHARGE ], - [ 1, Moves.ELECTRIFY ], - [ 1, Moves.EERIE_IMPULSE ], - ], - [Species.TYRUNT]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 4, Moves.ROAR ], - [ 8, Moves.ANCIENT_POWER ], - [ 12, Moves.CHARM ], - [ 16, Moves.BITE ], - [ 20, Moves.DRAGON_TAIL ], - [ 24, Moves.STOMP ], - [ 28, Moves.ROCK_SLIDE ], - [ 32, Moves.CRUNCH ], - [ 36, Moves.DRAGON_CLAW ], - [ 40, Moves.THRASH ], - [ 44, Moves.EARTHQUAKE ], - [ 48, Moves.HORN_DRILL ], - ], - [Species.TYRANTRUM]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.ROAR ], - [ 1, Moves.ANCIENT_POWER ], - [ 12, Moves.CHARM ], - [ 16, Moves.BITE ], - [ 20, Moves.DRAGON_TAIL ], - [ 24, Moves.STOMP ], - [ 28, Moves.ROCK_SLIDE ], - [ 32, Moves.CRUNCH ], - [ 36, Moves.DRAGON_CLAW ], - [ 42, Moves.THRASH ], - [ 48, Moves.EARTHQUAKE ], - [ 54, Moves.HORN_DRILL ], - [ 60, Moves.GIGA_IMPACT ], - [ 66, Moves.HEAD_SMASH ], - ], - [Species.AMAURA]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.POWDER_SNOW ], - [ 4, Moves.ENCORE ], - [ 8, Moves.ANCIENT_POWER ], - [ 12, Moves.ICY_WIND ], - [ 16, Moves.ROUND ], - [ 20, Moves.MIST ], - [ 24, Moves.AURORA_BEAM ], - [ 28, Moves.THUNDER_WAVE ], - [ 32, Moves.NATURE_POWER ], - [ 36, Moves.FREEZE_DRY ], - [ 40, Moves.ICE_BEAM ], - [ 44, Moves.LIGHT_SCREEN ], - [ 48, Moves.HAIL ], - [ 52, Moves.BLIZZARD ], - [ 56, Moves.HYPER_BEAM ], - ], - [Species.AURORUS]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.ENCORE ], - [ 1, Moves.ANCIENT_POWER ], - [ 12, Moves.ICY_WIND ], - [ 16, Moves.ROUND ], - [ 20, Moves.MIST ], - [ 24, Moves.AURORA_BEAM ], - [ 28, Moves.THUNDER_WAVE ], - [ 32, Moves.NATURE_POWER ], - [ 36, Moves.FREEZE_DRY ], - [ 42, Moves.ICE_BEAM ], - [ 48, Moves.LIGHT_SCREEN ], - [ 54, Moves.HAIL ], - [ 60, Moves.BLIZZARD ], - [ 66, Moves.HYPER_BEAM ], - ], - [Species.SYLVEON]: [ - [ EVOLVE_MOVE, Moves.SPARKLY_SWIRL ], - [ RELEARN_MOVE, Moves.VEEVEE_VOLLEY ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.BITE ], - [ 1, Moves.GROWL ], - [ 1, Moves.CHARM ], - [ 1, Moves.BATON_PASS ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.COVET ], - [ 1, Moves.COPYCAT ], - [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.DISARMING_VOICE ], - [ 15, Moves.QUICK_ATTACK ], - [ 20, Moves.BABY_DOLL_EYES ], - [ 25, Moves.SWIFT ], - [ 30, Moves.LIGHT_SCREEN ], - [ 35, Moves.DRAINING_KISS ], - [ 40, Moves.MISTY_TERRAIN ], - [ 45, Moves.SKILL_SWAP ], - [ 50, Moves.PSYCH_UP ], - [ 55, Moves.MOONBLAST ], - [ 60, Moves.LAST_RESORT ], - ], - [Species.HAWLUCHA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.HONE_CLAWS ], - [ 4, Moves.WING_ATTACK ], - [ 8, Moves.DETECT ], - [ 12, Moves.AERIAL_ACE ], - [ 16, Moves.ENCORE ], - [ 20, Moves.FEATHER_DANCE ], - [ 24, Moves.BRICK_BREAK ], - [ 28, Moves.BOUNCE ], - [ 32, Moves.TAUNT ], - [ 36, Moves.ROOST ], - [ 40, Moves.SWORDS_DANCE ], - [ 44, Moves.FLYING_PRESS ], - [ 48, Moves.HIGH_JUMP_KICK ], - [ 52, Moves.ENDEAVOR ], - [ 56, Moves.SKY_ATTACK ], - ], - [Species.DEDENNE]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.NUZZLE ], - [ 5, Moves.TACKLE ], - [ 10, Moves.CHARGE ], - [ 15, Moves.THUNDER_SHOCK ], - [ 20, Moves.CHARM ], - [ 25, Moves.PARABOLIC_CHARGE ], - [ 30, Moves.VOLT_SWITCH ], - [ 35, Moves.REST ], - [ 35, Moves.SNORE ], - [ 40, Moves.DISCHARGE ], - [ 45, Moves.PLAY_ROUGH ], - [ 50, Moves.SUPER_FANG ], - [ 55, Moves.ENTRAINMENT ], - [ 60, Moves.THUNDER ], - ], - [Species.CARBINK]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 5, Moves.GUARD_SPLIT ], - [ 10, Moves.SMACK_DOWN ], - [ 15, Moves.FLAIL ], - [ 20, Moves.ANCIENT_POWER ], - [ 25, Moves.ROCK_POLISH ], - [ 30, Moves.LIGHT_SCREEN ], - [ 35, Moves.ROCK_SLIDE ], - [ 40, Moves.SKILL_SWAP ], - [ 45, Moves.POWER_GEM ], - [ 50, Moves.STEALTH_ROCK ], - [ 55, Moves.MOONBLAST ], - [ 60, Moves.STONE_EDGE ], - ], - [Species.GOOMY]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.ABSORB ], - [ 5, Moves.WATER_GUN ], - [ 10, Moves.DRAGON_BREATH ], - [ 15, Moves.PROTECT ], - [ 20, Moves.FLAIL ], - [ 25, Moves.WATER_PULSE ], - [ 30, Moves.RAIN_DANCE ], - [ 35, Moves.DRAGON_PULSE ], - [ 41, Moves.CURSE ], - [ 45, Moves.BODY_SLAM ], - [ 50, Moves.MUDDY_WATER ], - ], - [Species.SLIGGOO]: [ - [ EVOLVE_MOVE, Moves.ACID_SPRAY ], - [ 1, Moves.TACKLE ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.ABSORB ], - [ 1, Moves.ACID_ARMOR ], - [ 1, Moves.DRAGON_BREATH ], - [ 15, Moves.PROTECT ], - [ 20, Moves.FLAIL ], - [ 25, Moves.WATER_PULSE ], - [ 30, Moves.RAIN_DANCE ], - [ 35, Moves.DRAGON_PULSE ], - [ 43, Moves.CURSE ], - [ 49, Moves.BODY_SLAM ], - [ 56, Moves.MUDDY_WATER ], - ], - [Species.GOODRA]: [ - [ EVOLVE_MOVE, Moves.AQUA_TAIL ], - [ 1, Moves.TACKLE ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.ABSORB ], - [ 1, Moves.ACID_ARMOR ], // Previous Stage Move - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.POISON_TAIL ], - [ 1, Moves.FEINT ], - [ 1, Moves.ACID_SPRAY ], - [ 1, Moves.TEARFUL_LOOK ], - [ 15, Moves.PROTECT ], - [ 20, Moves.FLAIL ], - [ 25, Moves.WATER_PULSE ], - [ 30, Moves.RAIN_DANCE ], - [ 35, Moves.DRAGON_PULSE ], // Previous Stage Move, NatDex / Hisui Goodra Level - [ 43, Moves.CURSE ], - [ 49, Moves.BODY_SLAM ], - [ 58, Moves.MUDDY_WATER ], - [ 67, Moves.POWER_WHIP ], - ], - [Species.KLEFKI]: [ - [ 1, Moves.ASTONISH ], - [ 4, Moves.TACKLE ], - [ 8, Moves.FAIRY_WIND ], - [ 12, Moves.TORMENT ], - [ 16, Moves.FAIRY_LOCK ], - [ 20, Moves.METAL_SOUND ], - [ 24, Moves.DRAINING_KISS ], - [ 28, Moves.RECYCLE ], - [ 32, Moves.IMPRISON ], - [ 36, Moves.FLASH_CANNON ], - [ 40, Moves.PLAY_ROUGH ], - [ 44, Moves.MAGIC_ROOM ], - [ 48, Moves.FOUL_PLAY ], - [ 50, Moves.HEAL_BLOCK ], - [ 52, Moves.LAST_RESORT ], - ], - [Species.PHANTUMP]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.ASTONISH ], - [ 4, Moves.BRANCH_POKE ], - [ 8, Moves.LEECH_SEED ], - [ 12, Moves.CONFUSE_RAY ], - [ 16, Moves.WILL_O_WISP ], - [ 20, Moves.HEX ], - [ 24, Moves.GROWTH ], - [ 28, Moves.HORN_LEECH ], - [ 32, Moves.CURSE ], - [ 36, Moves.PHANTOM_FORCE ], - [ 40, Moves.INGRAIN ], - [ 44, Moves.WOOD_HAMMER ], - [ 48, Moves.DESTINY_BOND ], - [ 52, Moves.FORESTS_CURSE ], - ], - [Species.TREVENANT]: [ - [ EVOLVE_MOVE, Moves.SHADOW_CLAW ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEECH_SEED ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.BRANCH_POKE ], - [ 12, Moves.CONFUSE_RAY ], - [ 16, Moves.WILL_O_WISP ], - [ 20, Moves.HEX ], - [ 24, Moves.GROWTH ], - [ 28, Moves.HORN_LEECH ], - [ 32, Moves.CURSE ], - [ 36, Moves.PHANTOM_FORCE ], - [ 40, Moves.INGRAIN ], - [ 44, Moves.WOOD_HAMMER ], - [ 48, Moves.DESTINY_BOND ], - [ 52, Moves.FORESTS_CURSE ], - ], - [Species.PUMPKABOO]: [ - [ 1, Moves.ASTONISH ], - [ 1, Moves.TRICK_OR_TREAT ], - [ 1, Moves.LEAFAGE ], // Custom - [ 4, Moves.SHADOW_SNEAK ], - [ 8, Moves.CONFUSE_RAY ], - [ 12, Moves.RAZOR_LEAF ], - [ 16, Moves.LEECH_SEED ], - [ 20, Moves.BULLET_SEED ], - [ 24, Moves.SCARY_FACE ], - [ 28, Moves.WORRY_SEED ], - [ 32, Moves.SEED_BOMB ], - [ 36, Moves.SHADOW_BALL ], - [ 40, Moves.TRICK ], - [ 44, Moves.PAIN_SPLIT ], - ], - [Species.GOURGEIST]: [ - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.EXPLOSION ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.LEAFAGE ], // Previous Stage Move, Custom - [ 1, Moves.SHADOW_SNEAK ], - [ 1, Moves.TRICK_OR_TREAT ], - [ 1, Moves.MOONBLAST ], - [ 12, Moves.RAZOR_LEAF ], - [ 16, Moves.LEECH_SEED ], - [ 20, Moves.BULLET_SEED ], - [ 24, Moves.SCARY_FACE ], - [ 28, Moves.WORRY_SEED ], - [ 32, Moves.SEED_BOMB ], - [ 36, Moves.SHADOW_BALL ], - [ 40, Moves.TRICK ], - [ 44, Moves.PAIN_SPLIT ], - [ 48, Moves.PHANTOM_FORCE ], - ], - [Species.BERGMITE]: [ - [ 1, Moves.HARDEN ], - [ 1, Moves.RAPID_SPIN ], - [ 3, Moves.TACKLE ], - [ 6, Moves.POWDER_SNOW ], - [ 9, Moves.CURSE ], - [ 12, Moves.ICY_WIND ], - [ 15, Moves.PROTECT ], - [ 18, Moves.AVALANCHE ], - [ 21, Moves.BITE ], - [ 24, Moves.ICE_FANG ], - [ 27, Moves.IRON_DEFENSE ], - [ 30, Moves.RECOVER ], - [ 33, Moves.CRUNCH ], - [ 36, Moves.TAKE_DOWN ], - [ 39, Moves.BLIZZARD ], - [ 42, Moves.DOUBLE_EDGE ], - ], - [Species.AVALUGG]: [ - [ EVOLVE_MOVE, Moves.BODY_SLAM ], - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.WIDE_GUARD ], - [ 9, Moves.CURSE ], - [ 12, Moves.ICY_WIND ], - [ 15, Moves.PROTECT ], - [ 18, Moves.AVALANCHE ], - [ 21, Moves.BITE ], - [ 24, Moves.ICE_FANG ], - [ 27, Moves.IRON_DEFENSE ], - [ 30, Moves.RECOVER ], - [ 33, Moves.CRUNCH ], - [ 36, Moves.TAKE_DOWN ], - [ 41, Moves.BLIZZARD ], - [ 46, Moves.DOUBLE_EDGE ], - [ 51, Moves.ICICLE_CRASH ], - ], - [Species.NOIBAT]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.ABSORB ], - [ 4, Moves.GUST ], - [ 8, Moves.SUPERSONIC ], - [ 12, Moves.DOUBLE_TEAM ], - [ 16, Moves.WING_ATTACK ], - [ 20, Moves.BITE ], - [ 24, Moves.AIR_CUTTER ], - [ 28, Moves.WHIRLWIND ], - [ 32, Moves.SUPER_FANG ], - [ 36, Moves.AIR_SLASH ], - [ 40, Moves.SCREECH ], - [ 44, Moves.ROOST ], - [ 49, Moves.TAILWIND ], - [ 52, Moves.HURRICANE ], - ], - [Species.NOIVERN]: [ - [ EVOLVE_MOVE, Moves.DRAGON_PULSE ], - [ 1, Moves.GUST ], - [ 1, Moves.TACKLE ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.ABSORB ], - [ 1, Moves.MOONLIGHT ], - [ 12, Moves.DOUBLE_TEAM ], - [ 16, Moves.WING_ATTACK ], - [ 20, Moves.BITE ], - [ 24, Moves.AIR_CUTTER ], - [ 28, Moves.WHIRLWIND ], - [ 32, Moves.SUPER_FANG ], - [ 36, Moves.AIR_SLASH ], - [ 40, Moves.SCREECH ], - [ 44, Moves.ROOST ], - [ 51, Moves.TAILWIND ], - [ 56, Moves.HURRICANE ], - [ 62, Moves.BOOMBURST ], - ], - [Species.XERNEAS]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GRAVITY ], - [ 5, Moves.LIGHT_SCREEN ], - [ 10, Moves.AURORA_BEAM ], - [ 15, Moves.NATURE_POWER ], - [ 20, Moves.NIGHT_SLASH ], - [ 25, Moves.AROMATHERAPY ], - [ 30, Moves.PSYCH_UP ], - [ 35, Moves.HORN_LEECH ], - [ 40, Moves.MISTY_TERRAIN ], - [ 45, Moves.INGRAIN ], - [ 50, Moves.TAKE_DOWN ], - [ 55, Moves.GEOMANCY ], - [ 60, Moves.MOONBLAST ], - [ 65, Moves.HEAL_PULSE ], - [ 70, Moves.MEGAHORN ], - [ 75, Moves.CLOSE_COMBAT ], - [ 80, Moves.OUTRAGE ], - [ 85, Moves.GIGA_IMPACT ], - ], - [Species.YVELTAL]: [ - [ 1, Moves.GUST ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.RAZOR_WIND ], - [ 5, Moves.TAUNT ], - [ 10, Moves.SNARL ], - [ 15, Moves.DISABLE ], - [ 20, Moves.SUCKER_PUNCH ], - [ 25, Moves.TAILWIND ], - [ 30, Moves.ROOST ], - [ 35, Moves.AIR_SLASH ], - [ 40, Moves.DARK_PULSE ], - [ 45, Moves.PSYCHIC ], - [ 50, Moves.OBLIVION_WING ], - [ 55, Moves.PHANTOM_FORCE ], - [ 60, Moves.FOUL_PLAY ], - [ 65, Moves.DRAGON_RUSH ], - [ 70, Moves.HURRICANE ], - [ 75, Moves.FOCUS_BLAST ], - [ 80, Moves.SKY_ATTACK ], - [ 85, Moves.HYPER_BEAM ], - ], - [Species.ZYGARDE]: [ - [ 1, Moves.BIND ], - [ 1, Moves.BITE ], - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.BULLDOZE ], - [ 1, Moves.THOUSAND_ARROWS ], - [ 1, Moves.THOUSAND_WAVES ], - [ 1, Moves.CORE_ENFORCER ], - [ 8, Moves.HAZE ], - [ 16, Moves.DIG ], - [ 24, Moves.SAFEGUARD ], - [ 32, Moves.CRUNCH ], - [ 40, Moves.DRAGON_PULSE ], - [ 48, Moves.LANDS_WRATH ], - [ 56, Moves.GLARE ], - [ 64, Moves.SANDSTORM ], - [ 72, Moves.COIL ], - [ 80, Moves.EARTHQUAKE ], - [ 88, Moves.OUTRAGE ], - ], - [Species.DIANCIE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.DIAMOND_STORM ], - [ 7, Moves.GUARD_SPLIT ], - [ 14, Moves.SMACK_DOWN ], - [ 21, Moves.FLAIL ], - [ 28, Moves.ANCIENT_POWER ], - [ 35, Moves.ROCK_POLISH ], - [ 42, Moves.LIGHT_SCREEN ], - [ 49, Moves.ROCK_SLIDE ], - [ 56, Moves.SKILL_SWAP ], - [ 63, Moves.POWER_GEM ], - [ 70, Moves.STEALTH_ROCK ], - [ 77, Moves.MOONBLAST ], - [ 84, Moves.STONE_EDGE ], - ], - [Species.HOOPA]: [ - [ 1, Moves.CONFUSION ], - [ 1, Moves.DESTINY_BOND ], - [ 1, Moves.ALLY_SWITCH ], - [ 6, Moves.ASTONISH ], - [ 10, Moves.TRICK ], - [ 15, Moves.LIGHT_SCREEN ], - [ 19, Moves.PSYBEAM ], - [ 25, Moves.SKILL_SWAP ], - [ 29, Moves.GUARD_SPLIT ], - [ 29, Moves.POWER_SPLIT ], - [ 35, Moves.PHANTOM_FORCE ], - [ 46, Moves.ZEN_HEADBUTT ], - [ 50, Moves.TRICK_ROOM ], - [ 50, Moves.WONDER_ROOM ], - [ 55, Moves.SHADOW_BALL ], - [ 68, Moves.NASTY_PLOT ], - [ 75, Moves.PSYCHIC ], - [ 85, Moves.HYPERSPACE_HOLE ], - ], - [Species.VOLCANION]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.FIRE_SPIN ], - [ 1, Moves.STEAM_ERUPTION ], - [ 6, Moves.LEER ], - [ 12, Moves.WEATHER_BALL ], - [ 18, Moves.FLAME_CHARGE ], - [ 24, Moves.WATER_PULSE ], - [ 30, Moves.SCARY_FACE ], - [ 36, Moves.INCINERATE ], - [ 42, Moves.STOMP ], - [ 48, Moves.SCALD ], - [ 54, Moves.TAKE_DOWN ], - [ 60, Moves.MIST ], - [ 60, Moves.HAZE ], - [ 66, Moves.HYDRO_PUMP ], - [ 78, Moves.FLARE_BLITZ ], - [ 84, Moves.OVERHEAT ], - [ 90, Moves.EXPLOSION ], - ], - [Species.ROWLET]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 3, Moves.LEAFAGE ], - [ 6, Moves.ASTONISH ], - [ 9, Moves.PECK ], - [ 12, Moves.SHADOW_SNEAK ], - [ 15, Moves.RAZOR_LEAF ], - [ 18, Moves.SYNTHESIS ], - [ 21, Moves.PLUCK ], - [ 24, Moves.NASTY_PLOT ], - [ 27, Moves.SUCKER_PUNCH ], - [ 30, Moves.LEAF_BLADE ], - [ 33, Moves.FEATHER_DANCE ], - [ 36, Moves.BRAVE_BIRD ], - ], - [Species.DARTRIX]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.LEAFAGE ], - [ 9, Moves.PECK ], - [ 12, Moves.SHADOW_SNEAK ], - [ 15, Moves.RAZOR_LEAF ], - [ 20, Moves.SYNTHESIS ], - [ 25, Moves.PLUCK ], - [ 30, Moves.NASTY_PLOT ], - [ 35, Moves.SUCKER_PUNCH ], - [ 40, Moves.LEAF_BLADE ], - [ 45, Moves.FEATHER_DANCE ], - [ 50, Moves.BRAVE_BIRD ], - ], - [Species.DECIDUEYE]: [ - [ EVOLVE_MOVE, Moves.SPIRIT_SHACKLE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.SPITE ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.U_TURN ], - [ 1, Moves.LEAF_STORM ], - [ 1, Moves.PHANTOM_FORCE ], - [ 1, Moves.LEAFAGE ], - [ 9, Moves.PECK ], - [ 12, Moves.SHADOW_SNEAK ], - [ 15, Moves.RAZOR_LEAF ], - [ 20, Moves.SYNTHESIS ], - [ 25, Moves.PLUCK ], - [ 30, Moves.NASTY_PLOT ], - [ 37, Moves.SUCKER_PUNCH ], - [ 44, Moves.LEAF_BLADE ], - [ 51, Moves.FEATHER_DANCE ], - [ 58, Moves.BRAVE_BIRD ], - ], - [Species.LITTEN]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 3, Moves.EMBER ], - [ 6, Moves.LICK ], - [ 9, Moves.ROAR ], - [ 12, Moves.FURY_SWIPES ], - [ 15, Moves.BITE ], - [ 18, Moves.DOUBLE_KICK ], - [ 21, Moves.FIRE_FANG ], - [ 24, Moves.SCARY_FACE ], - [ 27, Moves.SWAGGER ], - [ 30, Moves.FLAMETHROWER ], - [ 33, Moves.THRASH ], - [ 36, Moves.FLARE_BLITZ ], - ], - [Species.TORRACAT]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 1, Moves.EMBER ], - [ 1, Moves.LICK ], - [ 9, Moves.ROAR ], - [ 12, Moves.FURY_SWIPES ], - [ 15, Moves.BITE ], - [ 20, Moves.DOUBLE_KICK ], - [ 25, Moves.FIRE_FANG ], - [ 30, Moves.SCARY_FACE ], - [ 35, Moves.SWAGGER ], - [ 40, Moves.FLAMETHROWER ], - [ 45, Moves.THRASH ], - [ 50, Moves.FLARE_BLITZ ], - ], - [Species.INCINEROAR]: [ - [ EVOLVE_MOVE, Moves.DARKEST_LARIAT ], - [ RELEARN_MOVE, Moves.SCRATCH ], - [ RELEARN_MOVE, Moves.GROWL ], - [ RELEARN_MOVE, Moves.THROAT_CHOP ], - [ 1, Moves.EMBER ], - [ 1, Moves.LICK ], - [ 1, Moves.CROSS_CHOP ], - [ 1, Moves.BULK_UP ], - [ 9, Moves.ROAR ], - [ 12, Moves.FURY_SWIPES ], - [ 15, Moves.BITE ], - [ 20, Moves.DOUBLE_KICK ], - [ 25, Moves.FIRE_FANG ], - [ 30, Moves.SCARY_FACE ], - [ 32, Moves.SWAGGER ], - [ 44, Moves.FLAMETHROWER ], - [ 51, Moves.THRASH ], - [ 58, Moves.FLARE_BLITZ ], - ], - [Species.POPPLIO]: [ - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 3, Moves.WATER_GUN ], - [ 6, Moves.DISARMING_VOICE ], - [ 9, Moves.AQUA_JET ], - [ 12, Moves.BABY_DOLL_EYES ], - [ 15, Moves.ICY_WIND ], - [ 18, Moves.SING ], - [ 21, Moves.BUBBLE_BEAM ], - [ 24, Moves.ENCORE ], - [ 27, Moves.MISTY_TERRAIN ], - [ 30, Moves.HYPER_VOICE ], - [ 33, Moves.MOONBLAST ], - [ 36, Moves.HYDRO_PUMP ], - ], - [Species.BRIONNE]: [ - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.DISARMING_VOICE ], - [ 9, Moves.AQUA_JET ], - [ 12, Moves.BABY_DOLL_EYES ], - [ 15, Moves.ICY_WIND ], - [ 20, Moves.SING ], - [ 25, Moves.BUBBLE_BEAM ], - [ 30, Moves.ENCORE ], - [ 35, Moves.MISTY_TERRAIN ], - [ 40, Moves.HYPER_VOICE ], - [ 45, Moves.MOONBLAST ], - [ 50, Moves.HYDRO_PUMP ], - ], - [Species.PRIMARINA]: [ - [ EVOLVE_MOVE, Moves.SPARKLING_ARIA ], - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.DISARMING_VOICE ], - [ 9, Moves.AQUA_JET ], - [ 12, Moves.BABY_DOLL_EYES ], - [ 15, Moves.ICY_WIND ], - [ 20, Moves.SING ], - [ 25, Moves.BUBBLE_BEAM ], - [ 30, Moves.ENCORE ], - [ 37, Moves.MISTY_TERRAIN ], - [ 44, Moves.HYPER_VOICE ], - [ 51, Moves.MOONBLAST ], - [ 58, Moves.HYDRO_PUMP ], - ], - [Species.PIKIPEK]: [ - [ 1, Moves.PECK ], - [ 3, Moves.GROWL ], - [ 7, Moves.ECHOED_VOICE ], - [ 9, Moves.ROCK_SMASH ], - [ 13, Moves.SUPERSONIC ], - [ 15, Moves.PLUCK ], - [ 19, Moves.ROOST ], - [ 21, Moves.FURY_ATTACK ], - [ 25, Moves.SCREECH ], - [ 27, Moves.DRILL_PECK ], - [ 31, Moves.BULLET_SEED ], - [ 33, Moves.FEATHER_DANCE ], - [ 37, Moves.HYPER_VOICE ], - ], - [Species.TRUMBEAK]: [ - [ RELEARN_MOVE, Moves.ECHOED_VOICE ], - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 1, Moves.ROCK_SMASH ], - [ 1, Moves.ROCK_BLAST ], - [ 13, Moves.SUPERSONIC ], - [ 16, Moves.PLUCK ], - [ 21, Moves.ROOST ], - [ 24, Moves.FURY_ATTACK ], - [ 29, Moves.SCREECH ], - [ 32, Moves.DRILL_PECK ], - [ 37, Moves.BULLET_SEED ], - [ 40, Moves.FEATHER_DANCE ], - [ 45, Moves.HYPER_VOICE ], - ], - [Species.TOUCANNON]: [ - [ EVOLVE_MOVE, Moves.BEAK_BLAST ], - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 1, Moves.ROCK_SMASH ], - [ 1, Moves.ROCK_BLAST ], - [ 1, Moves.ECHOED_VOICE ], - [ 13, Moves.SUPERSONIC ], - [ 16, Moves.PLUCK ], - [ 21, Moves.ROOST ], - [ 24, Moves.FURY_ATTACK ], - [ 30, Moves.SCREECH ], - [ 34, Moves.DRILL_PECK ], - [ 40, Moves.BULLET_SEED ], - [ 44, Moves.FEATHER_DANCE ], - [ 50, Moves.HYPER_VOICE ], - ], - [Species.YUNGOOS]: [ - [ 1, Moves.TACKLE ], - [ 3, Moves.LEER ], - [ 7, Moves.PAYBACK ], - [ 10, Moves.SAND_ATTACK ], - [ 13, Moves.WORK_UP ], - [ 19, Moves.BITE ], - [ 22, Moves.MUD_SLAP ], - [ 25, Moves.SUPER_FANG ], - [ 28, Moves.TAKE_DOWN ], - [ 31, Moves.SCARY_FACE ], - [ 34, Moves.CRUNCH ], - [ 37, Moves.YAWN ], - [ 40, Moves.THRASH ], - [ 43, Moves.REST ], - ], - [Species.GUMSHOOS]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.PAYBACK ], - [ 1, Moves.PURSUIT ], - [ 13, Moves.WORK_UP ], - [ 19, Moves.BITE ], - [ 23, Moves.MUD_SLAP ], - [ 27, Moves.SUPER_FANG ], - [ 31, Moves.TAKE_DOWN ], - [ 35, Moves.SCARY_FACE ], - [ 39, Moves.CRUNCH ], - [ 43, Moves.YAWN ], - [ 47, Moves.THRASH ], - [ 52, Moves.REST ], - ], - [Species.GRUBBIN]: [ - [ 1, Moves.VISE_GRIP ], - [ 1, Moves.MUD_SLAP ], - [ 5, Moves.STRING_SHOT ], - [ 10, Moves.BUG_BITE ], - [ 15, Moves.BITE ], - [ 21, Moves.SPARK ], - [ 25, Moves.STICKY_WEB ], - [ 30, Moves.X_SCISSOR ], - [ 35, Moves.CRUNCH ], - [ 40, Moves.DIG ], - ], - [Species.CHARJABUG]: [ - [ EVOLVE_MOVE, Moves.CHARGE ], - [ 1, Moves.VISE_GRIP ], - [ 1, Moves.STRING_SHOT ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.BUG_BITE ], - [ 15, Moves.BITE ], - [ 23, Moves.SPARK ], - [ 29, Moves.STICKY_WEB ], - [ 36, Moves.X_SCISSOR ], - [ 43, Moves.CRUNCH ], - [ 50, Moves.DIG ], - [ 57, Moves.IRON_DEFENSE ], - [ 64, Moves.DISCHARGE ], - ], - [Species.VIKAVOLT]: [ - [ EVOLVE_MOVE, Moves.THUNDERBOLT ], - [ RELEARN_MOVE, Moves.VISE_GRIP ], - [ RELEARN_MOVE, Moves.DIG ], - [ RELEARN_MOVE, Moves.MUD_SLAP ], - [ RELEARN_MOVE, Moves.IRON_DEFENSE ], - [ RELEARN_MOVE, Moves.X_SCISSOR ], - [ RELEARN_MOVE, Moves.BUG_BITE ], - [ 1, Moves.CHARGE ], - [ 1, Moves.CRUNCH ], - [ 1, Moves.DISCHARGE ], - [ 1, Moves.STRING_SHOT ], - [ 15, Moves.BITE ], - [ 23, Moves.SPARK ], - [ 29, Moves.STICKY_WEB ], - [ 36, Moves.BUG_BUZZ ], - [ 43, Moves.GUILLOTINE ], - [ 50, Moves.FLY ], - [ 57, Moves.AGILITY ], - [ 64, Moves.ZAP_CANNON ], - ], - [Species.CRABRAWLER]: [ - [ 1, Moves.BUBBLE ], - [ 1, Moves.VISE_GRIP ], - [ 5, Moves.ROCK_SMASH ], - [ 9, Moves.LEER ], - [ 13, Moves.BUBBLE_BEAM ], - [ 17, Moves.PROTECT ], - [ 22, Moves.BRICK_BREAK ], - [ 25, Moves.SLAM ], - [ 29, Moves.PAYBACK ], - [ 33, Moves.REVERSAL ], - [ 37, Moves.CRABHAMMER ], - [ 42, Moves.IRON_DEFENSE ], - [ 45, Moves.DYNAMIC_PUNCH ], - [ 49, Moves.CLOSE_COMBAT ], - ], - [Species.CRABOMINABLE]: [ - [ EVOLVE_MOVE, Moves.ICE_PUNCH ], - [ RELEARN_MOVE, Moves.CRABHAMMER ], // Previous Stage Move - [ 1, Moves.VISE_GRIP ], // Previous Stage Move - [ 1, Moves.LEER ], - [ 1, Moves.PROTECT ], - [ 1, Moves.ROCK_SMASH ], - [ 1, Moves.BUBBLE ], - [ 1, Moves.PURSUIT ], - [ 1, Moves.PAYBACK ], // Previous Stage Move - [ 17, Moves.BUBBLE_BEAM ], - [ 22, Moves.BRICK_BREAK ], - [ 25, Moves.SLAM ], - [ 29, Moves.AVALANCHE ], - [ 33, Moves.REVERSAL ], - [ 37, Moves.ICE_HAMMER ], - [ 42, Moves.IRON_DEFENSE ], - [ 45, Moves.DYNAMIC_PUNCH ], - [ 49, Moves.CLOSE_COMBAT ], - ], - [Species.ORICORIO]: [ - [ 1, Moves.POUND ], - [ 4, Moves.GROWL ], - [ 6, Moves.PECK ], - [ 10, Moves.HELPING_HAND ], - [ 13, Moves.AIR_CUTTER ], - [ 16, Moves.BATON_PASS ], - [ 20, Moves.FEATHER_DANCE ], - [ 23, Moves.ACROBATICS ], - [ 26, Moves.TEETER_DANCE ], - [ 30, Moves.ROOST ], - [ 33, Moves.FLATTER ], - [ 36, Moves.AIR_SLASH ], - [ 40, Moves.REVELATION_DANCE ], - [ 43, Moves.AGILITY ], - [ 47, Moves.HURRICANE ], - ], - [Species.CUTIEFLY]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.FAIRY_WIND ], - [ 6, Moves.STUN_SPORE ], - [ 12, Moves.SWEET_SCENT ], - [ 18, Moves.DRAINING_KISS ], - [ 24, Moves.STRUGGLE_BUG ], - [ 30, Moves.COVET ], - [ 36, Moves.SWITCHEROO ], - [ 42, Moves.DAZZLING_GLEAM ], - [ 48, Moves.BUG_BUZZ ], - [ 54, Moves.QUIVER_DANCE ], - ], - [Species.RIBOMBEE]: [ - [ EVOLVE_MOVE, Moves.POLLEN_PUFF ], - [ 1, Moves.ABSORB ], - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.FAIRY_WIND ], - [ 18, Moves.DRAINING_KISS ], - [ 24, Moves.STRUGGLE_BUG ], - [ 32, Moves.COVET ], - [ 40, Moves.SWITCHEROO ], - [ 48, Moves.DAZZLING_GLEAM ], - [ 56, Moves.BUG_BUZZ ], - [ 64, Moves.QUIVER_DANCE ], - ], - [Species.ROCKRUFF]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 4, Moves.SAND_ATTACK ], - [ 8, Moves.DOUBLE_TEAM ], - [ 12, Moves.ROCK_THROW ], - [ 16, Moves.HOWL ], - [ 20, Moves.BITE ], - [ 24, Moves.ROCK_TOMB ], - [ 28, Moves.ROAR ], - [ 32, Moves.ROCK_SLIDE ], - [ 36, Moves.CRUNCH ], - [ 40, Moves.SCARY_FACE ], - [ 44, Moves.STEALTH_ROCK ], - [ 48, Moves.STONE_EDGE ], - ], - [Species.LYCANROC]: [ - [ EVOLVE_MOVE, Moves.SUCKER_PUNCH ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.QUICK_GUARD ], - [ 1, Moves.ACCELEROCK ], - [ 12, Moves.ROCK_THROW ], - [ 16, Moves.HOWL ], - [ 20, Moves.BITE ], - [ 24, Moves.ROCK_TOMB ], - [ 30, Moves.ROAR ], - [ 36, Moves.ROCK_SLIDE ], - [ 42, Moves.CRUNCH ], - [ 48, Moves.SCARY_FACE ], - [ 54, Moves.STEALTH_ROCK ], - [ 60, Moves.STONE_EDGE ], - ], - [Species.WISHIWASHI]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 4, Moves.HELPING_HAND ], - [ 8, Moves.BEAT_UP ], - [ 12, Moves.BRINE ], - [ 16, Moves.TEARFUL_LOOK ], - [ 20, Moves.DIVE ], - [ 24, Moves.SOAK ], - [ 28, Moves.UPROAR ], - [ 32, Moves.AQUA_TAIL ], - [ 36, Moves.AQUA_RING ], - [ 40, Moves.ENDEAVOR ], - [ 44, Moves.HYDRO_PUMP ], - [ 48, Moves.DOUBLE_EDGE ], - ], - [Species.MAREANIE]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.PECK ], - [ 5, Moves.WIDE_GUARD ], - [ 10, Moves.BITE ], - [ 15, Moves.VENOSHOCK ], - [ 20, Moves.RECOVER ], - [ 25, Moves.PIN_MISSILE ], - [ 30, Moves.TOXIC_SPIKES ], - [ 35, Moves.LIQUIDATION ], - [ 40, Moves.ACID_SPRAY ], - [ 45, Moves.POISON_JAB ], - [ 50, Moves.TOXIC ], - ], - [Species.TOXAPEX]: [ - [ EVOLVE_MOVE, Moves.BANEFUL_BUNKER ], - [ 1, Moves.POISON_STING ], - [ 1, Moves.BITE ], - [ 1, Moves.PECK ], - [ 1, Moves.WIDE_GUARD ], - [ 15, Moves.VENOSHOCK ], - [ 20, Moves.RECOVER ], - [ 25, Moves.PIN_MISSILE ], - [ 30, Moves.TOXIC_SPIKES ], - [ 35, Moves.LIQUIDATION ], - [ 42, Moves.ACID_SPRAY ], - [ 49, Moves.POISON_JAB ], - [ 56, Moves.TOXIC ], - ], - [Species.MUDBRAY]: [ - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.ROCK_SMASH ], - [ 4, Moves.IRON_DEFENSE ], - [ 8, Moves.DOUBLE_KICK ], - [ 12, Moves.BULLDOZE ], - [ 16, Moves.STOMP ], - [ 20, Moves.STRENGTH ], - [ 24, Moves.COUNTER ], - [ 28, Moves.HIGH_HORSEPOWER ], - [ 32, Moves.HEAVY_SLAM ], - [ 36, Moves.EARTHQUAKE ], - [ 40, Moves.MEGA_KICK ], - [ 44, Moves.SUPERPOWER ], - ], - [Species.MUDSDALE]: [ - [ 1, Moves.DOUBLE_KICK ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.ROCK_SMASH ], - [ 1, Moves.IRON_DEFENSE ], - [ 12, Moves.BULLDOZE ], - [ 16, Moves.STOMP ], - [ 20, Moves.STRENGTH ], - [ 24, Moves.COUNTER ], - [ 28, Moves.HIGH_HORSEPOWER ], - [ 34, Moves.HEAVY_SLAM ], - [ 40, Moves.EARTHQUAKE ], - [ 46, Moves.MEGA_KICK ], - [ 52, Moves.SUPERPOWER ], - ], - [Species.DEWPIDER]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.INFESTATION ], - [ 1, Moves.WATER_SPORT ], - [ 4, Moves.BUG_BITE ], - [ 8, Moves.BITE ], - [ 12, Moves.BUBBLE_BEAM ], - [ 16, Moves.AQUA_RING ], - [ 20, Moves.HEADBUTT ], - [ 24, Moves.CRUNCH ], - [ 28, Moves.SOAK ], - [ 32, Moves.ENTRAINMENT ], - [ 36, Moves.LUNGE ], - [ 40, Moves.LIQUIDATION ], - [ 44, Moves.LEECH_LIFE ], - [ 48, Moves.MIRROR_COAT ], - ], - [Species.ARAQUANID]: [ - [ 1, Moves.BITE ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.BUG_BITE ], - [ 1, Moves.WIDE_GUARD ], - [ 1, Moves.INFESTATION ], - [ 1, Moves.WATER_SPORT ], // Previous Stage Move - [ 1, Moves.SPIDER_WEB ], - [ 12, Moves.BUBBLE_BEAM ], - [ 16, Moves.AQUA_RING ], - [ 20, Moves.HEADBUTT ], - [ 26, Moves.CRUNCH ], - [ 32, Moves.SOAK ], - [ 38, Moves.ENTRAINMENT ], - [ 44, Moves.LUNGE ], - [ 50, Moves.LIQUIDATION ], - [ 56, Moves.LEECH_LIFE ], - [ 62, Moves.MIRROR_COAT ], - ], - [Species.FOMANTIS]: [ - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.LEAFAGE ], - [ 5, Moves.GROWTH ], - [ 10, Moves.INGRAIN ], - [ 15, Moves.RAZOR_LEAF ], - [ 20, Moves.SWEET_SCENT ], - [ 25, Moves.SLASH ], - [ 30, Moves.X_SCISSOR ], - [ 35, Moves.SYNTHESIS ], - [ 40, Moves.LEAF_BLADE ], - [ 45, Moves.SUNNY_DAY ], - [ 50, Moves.SOLAR_BEAM ], - ], - [Species.LURANTIS]: [ - [ EVOLVE_MOVE, Moves.PETAL_BLIZZARD ], - [ 1, Moves.GROWTH ], - [ 1, Moves.SOLAR_BEAM ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.INGRAIN ], - [ 1, Moves.NIGHT_SLASH ], - [ 1, Moves.LEAFAGE ], - [ 1, Moves.DUAL_CHOP ], - [ 15, Moves.RAZOR_LEAF ], - [ 20, Moves.SWEET_SCENT ], - [ 25, Moves.SLASH ], - [ 30, Moves.X_SCISSOR ], - [ 37, Moves.SYNTHESIS ], - [ 44, Moves.LEAF_BLADE ], - [ 51, Moves.SUNNY_DAY ], - [ 63, Moves.SOLAR_BLADE ], - ], - [Species.MORELULL]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.ASTONISH ], - [ 4, Moves.CONFUSE_RAY ], - [ 8, Moves.INGRAIN ], - [ 12, Moves.MEGA_DRAIN ], - [ 16, Moves.SLEEP_POWDER ], - [ 20, Moves.MOONLIGHT ], - [ 25, Moves.STRENGTH_SAP ], - [ 28, Moves.GIGA_DRAIN ], - [ 32, Moves.DAZZLING_GLEAM ], - [ 36, Moves.SPORE ], - [ 40, Moves.MOONBLAST ], - [ 44, Moves.DREAM_EATER ], - ], - [Species.SHIINOTIC]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.INGRAIN ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.FLASH ], - [ 12, Moves.MEGA_DRAIN ], - [ 16, Moves.SLEEP_POWDER ], - [ 20, Moves.MOONLIGHT ], - [ 27, Moves.STRENGTH_SAP ], - [ 32, Moves.GIGA_DRAIN ], - [ 38, Moves.DAZZLING_GLEAM ], - [ 44, Moves.SPORE ], - [ 50, Moves.MOONBLAST ], - [ 56, Moves.DREAM_EATER ], - ], - [Species.SALANDIT]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.POISON_GAS ], - [ 5, Moves.SMOG ], - [ 10, Moves.EMBER ], - [ 15, Moves.POISON_FANG ], - [ 20, Moves.SWEET_SCENT ], - [ 25, Moves.NASTY_PLOT ], - [ 30, Moves.INCINERATE ], - [ 35, Moves.VENOSHOCK ], - [ 40, Moves.DRAGON_PULSE ], - [ 45, Moves.FLAMETHROWER ], - [ 50, Moves.TOXIC ], - [ 55, Moves.ENDEAVOR ], - ], - [Species.SALAZZLE]: [ - [ EVOLVE_MOVE, Moves.FIRE_LASH ], - [ 1, Moves.POUND ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.DISABLE ], - [ 1, Moves.EMBER ], - [ 1, Moves.SMOG ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.SWAGGER ], - [ 1, Moves.ENCORE ], - [ 1, Moves.TORMENT ], - [ 1, Moves.KNOCK_OFF ], - [ 1, Moves.ENDEAVOR ], - [ 1, Moves.CAPTIVATE ], - [ 15, Moves.POISON_FANG ], - [ 20, Moves.SWEET_SCENT ], - [ 25, Moves.NASTY_PLOT ], - [ 30, Moves.INCINERATE ], - [ 37, Moves.VENOSHOCK ], - [ 44, Moves.DRAGON_PULSE ], - [ 51, Moves.FLAMETHROWER ], - [ 58, Moves.TOXIC ], - ], - [Species.STUFFUL]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 4, Moves.BABY_DOLL_EYES ], - [ 8, Moves.PAYBACK ], - [ 12, Moves.BRUTAL_SWING ], - [ 16, Moves.ENDURE ], - [ 20, Moves.STRENGTH ], - [ 24, Moves.TAKE_DOWN ], - [ 28, Moves.FLAIL ], - [ 32, Moves.HAMMER_ARM ], - [ 36, Moves.THRASH ], - [ 40, Moves.PAIN_SPLIT ], - [ 44, Moves.DOUBLE_EDGE ], - [ 48, Moves.SUPERPOWER ], - ], - [Species.BEWEAR]: [ - [ EVOLVE_MOVE, Moves.BIND ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.PAYBACK ], - [ 1, Moves.BABY_DOLL_EYES ], - [ 12, Moves.BRUTAL_SWING ], - [ 16, Moves.ENDURE ], - [ 20, Moves.STRENGTH ], - [ 24, Moves.TAKE_DOWN ], - [ 30, Moves.FLAIL ], - [ 36, Moves.HAMMER_ARM ], - [ 42, Moves.THRASH ], - [ 48, Moves.PAIN_SPLIT ], - [ 54, Moves.DOUBLE_EDGE ], - [ 60, Moves.SUPERPOWER ], - ], - [Species.BOUNSWEET]: [ - [ 1, Moves.SPLASH ], - [ 1, Moves.LEAFAGE ], // Custom - [ 4, Moves.PLAY_NICE ], - [ 8, Moves.RAPID_SPIN ], - [ 12, Moves.RAZOR_LEAF ], - [ 16, Moves.SWEET_SCENT ], - [ 20, Moves.MAGICAL_LEAF ], - [ 24, Moves.FLAIL ], - [ 28, Moves.TEETER_DANCE ], - [ 32, Moves.AROMATIC_MIST ], - ], - [Species.STEENEE]: [ - [ 1, Moves.LEAFAGE ], // Previous Stage Move, Custom - [ 1, Moves.RAZOR_LEAF ], - [ 1, Moves.SPLASH ], - [ 1, Moves.FLAIL ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.PLAY_NICE ], - [ 16, Moves.SWEET_SCENT ], - [ 22, Moves.MAGICAL_LEAF ], - [ 28, Moves.STOMP ], - [ 34, Moves.TEETER_DANCE ], - [ 40, Moves.AROMATIC_MIST ], - [ 46, Moves.LEAF_STORM ], - ], - [Species.TSAREENA]: [ - [ EVOLVE_MOVE, Moves.TROP_KICK ], - [ 1, Moves.LEAFAGE ], // Previous Stage Move, Custom - [ 1, Moves.RAZOR_LEAF ], - [ 1, Moves.SPLASH ], - [ 1, Moves.FLAIL ], - [ 1, Moves.SWAGGER ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.POWER_WHIP ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.PUNISHMENT ], - [ 16, Moves.SWEET_SCENT ], - [ 22, Moves.MAGICAL_LEAF ], - [ 28, Moves.STOMP ], - [ 34, Moves.TEETER_DANCE ], - [ 40, Moves.AROMATIC_MIST ], - [ 46, Moves.LEAF_STORM ], - [ 58, Moves.HIGH_JUMP_KICK ], - ], - [Species.COMFEY]: [ - [ 1, Moves.WRAP ], - [ 1, Moves.GROWTH ], - [ 3, Moves.VINE_WHIP ], - [ 6, Moves.HELPING_HAND ], - [ 9, Moves.DRAINING_KISS ], - [ 12, Moves.FLOWER_SHIELD ], - [ 15, Moves.MAGICAL_LEAF ], - [ 18, Moves.SYNTHESIS ], - [ 21, Moves.LEECH_SEED ], - [ 24, Moves.GRASS_KNOT ], - [ 27, Moves.SWEET_KISS ], - [ 30, Moves.FLORAL_HEALING ], - [ 33, Moves.PETAL_BLIZZARD ], - [ 36, Moves.AROMATHERAPY ], - [ 39, Moves.PLAY_ROUGH ], - [ 42, Moves.SWEET_SCENT ], - [ 45, Moves.PETAL_DANCE ], - [ 48, Moves.GRASSY_TERRAIN ], - ], - [Species.ORANGURU]: [ - [ 1, Moves.CONFUSION ], - [ 1, Moves.TAUNT ], - [ 5, Moves.AFTER_YOU ], - [ 10, Moves.CALM_MIND ], - [ 15, Moves.STORED_POWER ], - [ 20, Moves.PSYCH_UP ], - [ 25, Moves.QUASH ], - [ 30, Moves.NASTY_PLOT ], - [ 35, Moves.ZEN_HEADBUTT ], - [ 40, Moves.TRICK_ROOM ], - [ 45, Moves.PSYCHIC ], - [ 50, Moves.INSTRUCT ], - [ 55, Moves.FOUL_PLAY ], - [ 60, Moves.FUTURE_SIGHT ], - ], - [Species.PASSIMIAN]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 5, Moves.ROCK_SMASH ], - [ 10, Moves.FOCUS_ENERGY ], - [ 15, Moves.BEAT_UP ], - [ 20, Moves.SCARY_FACE ], - [ 25, Moves.TAKE_DOWN ], - [ 30, Moves.FLING ], - [ 35, Moves.BULK_UP ], - [ 40, Moves.THRASH ], - [ 45, Moves.DOUBLE_EDGE ], - [ 50, Moves.CLOSE_COMBAT ], - [ 55, Moves.REVERSAL ], - [ 60, Moves.GIGA_IMPACT ], - ], - [Species.WIMPOD]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.STRUGGLE_BUG ], - ], - [Species.GOLISOPOD]: [ - [ EVOLVE_MOVE, Moves.FIRST_IMPRESSION ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.SPITE ], - [ 1, Moves.STRUGGLE_BUG ], - [ 4, Moves.ROCK_SMASH ], - [ 8, Moves.FURY_CUTTER ], - [ 12, Moves.MUD_SHOT ], - [ 16, Moves.BUG_BITE ], - [ 20, Moves.IRON_DEFENSE ], - [ 24, Moves.SUCKER_PUNCH ], - [ 28, Moves.SLASH ], - [ 32, Moves.RAZOR_SHELL ], - [ 36, Moves.PIN_MISSILE ], - [ 40, Moves.SWORDS_DANCE ], - [ 44, Moves.LIQUIDATION ], - ], - [Species.SANDYGAST]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.HARDEN ], - [ 5, Moves.ASTONISH ], - [ 10, Moves.SAND_TOMB ], - [ 15, Moves.MEGA_DRAIN ], - [ 20, Moves.SAND_ATTACK ], - [ 25, Moves.BULLDOZE ], - [ 30, Moves.HYPNOSIS ], - [ 35, Moves.GIGA_DRAIN ], - [ 40, Moves.IRON_DEFENSE ], - [ 45, Moves.SHADOW_BALL ], - [ 50, Moves.EARTH_POWER ], - [ 55, Moves.SHORE_UP ], - [ 60, Moves.SANDSTORM ], - ], - [Species.PALOSSAND]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.HARDEN ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.SAND_TOMB ], - [ 15, Moves.MEGA_DRAIN ], - [ 20, Moves.SAND_ATTACK ], - [ 25, Moves.BULLDOZE ], - [ 30, Moves.HYPNOSIS ], - [ 35, Moves.GIGA_DRAIN ], - [ 40, Moves.IRON_DEFENSE ], - [ 47, Moves.SHADOW_BALL ], - [ 54, Moves.EARTH_POWER ], - [ 61, Moves.SHORE_UP ], - [ 68, Moves.SANDSTORM ], - ], - [Species.PYUKUMUKU]: [ - [ 1, Moves.COUNTER ], // Custom, Moved from Level 20 to 1 - [ 1, Moves.HARDEN ], - [ 1, Moves.BATON_PASS ], - [ 1, Moves.BIDE ], - [ 1, Moves.MUD_SPORT ], - [ 1, Moves.WATER_SPORT ], - [ 5, Moves.HELPING_HAND ], - [ 10, Moves.TAUNT ], - [ 15, Moves.SAFEGUARD ], - [ 20, Moves.MIRROR_COAT ], // Custom - [ 25, Moves.PURIFY ], - [ 30, Moves.CURSE ], - [ 35, Moves.GASTRO_ACID ], - [ 40, Moves.PAIN_SPLIT ], - [ 45, Moves.RECOVER ], - [ 50, Moves.SOAK ], - [ 55, Moves.TOXIC ], - [ 60, Moves.MEMENTO ], - ], - [Species.TYPE_NULL]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.IMPRISON ], - [ 5, Moves.AERIAL_ACE ], - [ 10, Moves.SCARY_FACE ], - [ 15, Moves.DOUBLE_HIT ], - [ 20, Moves.METAL_SOUND ], - [ 25, Moves.CRUSH_CLAW ], - [ 30, Moves.AIR_SLASH ], - [ 35, Moves.TRI_ATTACK ], - [ 40, Moves.X_SCISSOR ], - [ 45, Moves.IRON_HEAD ], - [ 50, Moves.TAKE_DOWN ], - [ 55, Moves.DOUBLE_EDGE ], - [ 60, Moves.HEAL_BLOCK ], - ], - [Species.SILVALLY]: [ - [ EVOLVE_MOVE, Moves.MULTI_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.BITE ], - [ 1, Moves.EXPLOSION ], - [ 1, Moves.SCARY_FACE ], - [ 1, Moves.IMPRISON ], - [ 1, Moves.POISON_FANG ], - [ 1, Moves.AERIAL_ACE ], - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.FIRE_FANG ], - [ 1, Moves.IRON_HEAD ], - [ 1, Moves.HEAL_BLOCK ], - [ 15, Moves.DOUBLE_HIT ], - [ 20, Moves.METAL_SOUND ], - [ 25, Moves.CRUSH_CLAW ], - [ 30, Moves.AIR_SLASH ], - [ 35, Moves.TRI_ATTACK ], - [ 40, Moves.X_SCISSOR ], - [ 45, Moves.CRUNCH ], - [ 50, Moves.TAKE_DOWN ], - [ 55, Moves.DOUBLE_EDGE ], - [ 60, Moves.PARTING_SHOT ], - ], - [Species.MINIOR]: [ - [ 1, Moves.TACKLE ], - [ 3, Moves.DEFENSE_CURL ], - [ 8, Moves.ROLLOUT ], - [ 10, Moves.CONFUSE_RAY ], - [ 15, Moves.SWIFT ], - [ 17, Moves.ANCIENT_POWER ], - [ 22, Moves.SELF_DESTRUCT ], - [ 24, Moves.STEALTH_ROCK ], - [ 29, Moves.TAKE_DOWN ], - [ 31, Moves.AUTOTOMIZE ], - [ 36, Moves.COSMIC_POWER ], - [ 38, Moves.POWER_GEM ], - [ 43, Moves.DOUBLE_EDGE ], - [ 45, Moves.SHELL_SMASH ], - [ 50, Moves.EXPLOSION ], - ], - [Species.KOMALA]: [ - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.ROLLOUT ], - [ 6, Moves.STOCKPILE ], - [ 6, Moves.SPIT_UP ], - [ 6, Moves.SWALLOW ], - [ 11, Moves.RAPID_SPIN ], - [ 16, Moves.YAWN ], - [ 21, Moves.SLAM ], - [ 26, Moves.FLAIL ], - [ 31, Moves.SUCKER_PUNCH ], - [ 36, Moves.PSYCH_UP ], - [ 41, Moves.WOOD_HAMMER ], - [ 46, Moves.THRASH ], - ], - [Species.TURTONATOR]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.SMOG ], - [ 4, Moves.EMBER ], - [ 8, Moves.PROTECT ], - [ 12, Moves.ENDURE ], - [ 16, Moves.FLAIL ], - [ 20, Moves.INCINERATE ], - [ 24, Moves.IRON_DEFENSE ], - [ 28, Moves.DRAGON_PULSE ], - [ 32, Moves.BODY_SLAM ], - [ 36, Moves.FLAMETHROWER ], - [ 40, Moves.SHELL_TRAP ], - [ 44, Moves.SHELL_SMASH ], - [ 48, Moves.OVERHEAT ], - [ 52, Moves.EXPLOSION ], - ], - [Species.TOGEDEMARU]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.NUZZLE ], - [ 5, Moves.DEFENSE_CURL ], - [ 10, Moves.CHARGE ], - [ 15, Moves.THUNDER_SHOCK ], - [ 20, Moves.FELL_STINGER ], - [ 25, Moves.SPARK ], - [ 30, Moves.PIN_MISSILE ], - [ 35, Moves.MAGNET_RISE ], - [ 40, Moves.ZING_ZAP ], - [ 45, Moves.DISCHARGE ], - [ 50, Moves.ELECTRIC_TERRAIN ], - [ 55, Moves.WILD_CHARGE ], - [ 60, Moves.SPIKY_SHIELD ], - ], - [Species.MIMIKYU]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.SPLASH ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.WOOD_HAMMER ], - [ 6, Moves.SHADOW_SNEAK ], - [ 12, Moves.DOUBLE_TEAM ], - [ 18, Moves.BABY_DOLL_EYES ], - [ 24, Moves.MIMIC ], - [ 30, Moves.HONE_CLAWS ], - [ 36, Moves.SLASH ], - [ 42, Moves.SHADOW_CLAW ], - [ 48, Moves.CHARM ], - [ 54, Moves.PLAY_ROUGH ], - [ 60, Moves.PAIN_SPLIT ], - ], - [Species.BRUXISH]: [ - [ 1, Moves.WATER_GUN ], - [ 4, Moves.ASTONISH ], - [ 9, Moves.CONFUSION ], - [ 12, Moves.BITE ], - [ 17, Moves.AQUA_JET ], - [ 20, Moves.DISABLE ], - [ 25, Moves.PSYSHOCK ], - [ 28, Moves.CRUNCH ], - [ 33, Moves.AQUA_TAIL ], - [ 36, Moves.SCREECH ], - [ 41, Moves.PSYCHIC_FANGS ], - [ 44, Moves.WAVE_CRASH ], - ], - [Species.DRAMPA]: [ - [ 1, Moves.ECHOED_VOICE ], - [ 1, Moves.PLAY_NICE ], - [ 5, Moves.TWISTER ], - [ 10, Moves.PROTECT ], - [ 15, Moves.GLARE ], - [ 20, Moves.SAFEGUARD ], - [ 25, Moves.DRAGON_BREATH ], - [ 30, Moves.EXTRASENSORY ], - [ 35, Moves.DRAGON_PULSE ], - [ 40, Moves.LIGHT_SCREEN ], - [ 45, Moves.FLY ], - [ 50, Moves.HYPER_VOICE ], - [ 55, Moves.OUTRAGE ], - ], - [Species.DHELMISE]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.RAPID_SPIN ], - [ 4, Moves.ASTONISH ], - [ 8, Moves.WRAP ], - [ 12, Moves.MEGA_DRAIN ], - [ 16, Moves.GROWTH ], - [ 20, Moves.GYRO_BALL ], - [ 24, Moves.SWITCHEROO ], - [ 28, Moves.GIGA_DRAIN ], - [ 32, Moves.WHIRLPOOL ], - [ 36, Moves.HEAVY_SLAM ], - [ 40, Moves.SLAM ], - [ 44, Moves.SHADOW_BALL ], - [ 48, Moves.METAL_SOUND ], - [ 52, Moves.ANCHOR_SHOT ], - [ 56, Moves.ENERGY_BALL ], - [ 60, Moves.PHANTOM_FORCE ], - [ 64, Moves.POWER_WHIP ], - ], - [Species.JANGMO_O]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 4, Moves.PROTECT ], - [ 8, Moves.DRAGON_TAIL ], - [ 12, Moves.SCARY_FACE ], - [ 16, Moves.HEADBUTT ], - [ 20, Moves.WORK_UP ], - [ 24, Moves.SCREECH ], - [ 28, Moves.IRON_DEFENSE ], - [ 32, Moves.DRAGON_CLAW ], - [ 36, Moves.NOBLE_ROAR ], - [ 40, Moves.DRAGON_DANCE ], - [ 44, Moves.OUTRAGE ], - ], - [Species.HAKAMO_O]: [ - [ EVOLVE_MOVE, Moves.SKY_UPPERCUT ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.PROTECT ], - [ 1, Moves.DRAGON_TAIL ], - [ 1, Moves.BIDE ], - [ 12, Moves.SCARY_FACE ], - [ 16, Moves.HEADBUTT ], - [ 20, Moves.WORK_UP ], - [ 24, Moves.SCREECH ], - [ 28, Moves.IRON_DEFENSE ], - [ 32, Moves.DRAGON_CLAW ], - [ 38, Moves.NOBLE_ROAR ], - [ 44, Moves.DRAGON_DANCE ], - [ 50, Moves.OUTRAGE ], - [ 56, Moves.CLOSE_COMBAT ], - ], - [Species.KOMMO_O]: [ - [ EVOLVE_MOVE, Moves.CLANGING_SCALES ], - [ RELEARN_MOVE, Moves.BELLY_DRUM ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.PROTECT ], - [ 1, Moves.DRAGON_TAIL ], - [ 1, Moves.BIDE ], - [ 1, Moves.SKY_UPPERCUT ], - [ 12, Moves.SCARY_FACE ], - [ 16, Moves.HEADBUTT ], - [ 20, Moves.WORK_UP ], - [ 24, Moves.SCREECH ], - [ 28, Moves.IRON_DEFENSE ], - [ 32, Moves.DRAGON_CLAW ], - [ 38, Moves.NOBLE_ROAR ], - [ 44, Moves.DRAGON_DANCE ], - [ 52, Moves.OUTRAGE ], - [ 60, Moves.CLOSE_COMBAT ], - [ 68, Moves.CLANGOROUS_SOUL ], - [ 76, Moves.BOOMBURST ], - ], - [Species.TAPU_KOKO]: [ - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.QUICK_ATTACK ], - [ 5, Moves.WITHDRAW ], - [ 10, Moves.FAIRY_WIND ], - [ 15, Moves.FALSE_SWIPE ], - [ 20, Moves.SPARK ], - [ 25, Moves.SHOCK_WAVE ], - [ 30, Moves.CHARGE ], - [ 35, Moves.AGILITY ], - [ 40, Moves.SCREECH ], - [ 45, Moves.DISCHARGE ], - [ 50, Moves.MEAN_LOOK ], - [ 55, Moves.NATURES_MADNESS ], - [ 60, Moves.WILD_CHARGE ], - [ 65, Moves.BRAVE_BIRD ], - [ 70, Moves.POWER_SWAP ], - [ 75, Moves.ELECTRIC_TERRAIN ], - ], - [Species.TAPU_LELE]: [ - [ 1, Moves.CONFUSION ], - [ 1, Moves.ASTONISH ], - [ 5, Moves.WITHDRAW ], - [ 10, Moves.AROMATHERAPY ], - [ 15, Moves.DRAINING_KISS ], - [ 20, Moves.PSYBEAM ], - [ 25, Moves.FLATTER ], - [ 30, Moves.AROMATIC_MIST ], - [ 35, Moves.SWEET_SCENT ], - [ 40, Moves.EXTRASENSORY ], - [ 45, Moves.PSYSHOCK ], - [ 50, Moves.MEAN_LOOK ], - [ 55, Moves.NATURES_MADNESS ], - [ 60, Moves.MOONBLAST ], - [ 65, Moves.TICKLE ], - [ 70, Moves.SKILL_SWAP ], - [ 75, Moves.PSYCHIC_TERRAIN ], - ], - [Species.TAPU_BULU]: [ - [ 1, Moves.ROCK_SMASH ], - [ 1, Moves.LEAFAGE ], - [ 5, Moves.WITHDRAW ], - [ 10, Moves.DISABLE ], - [ 15, Moves.LEECH_SEED ], - [ 20, Moves.MEGA_DRAIN ], - [ 25, Moves.WHIRLWIND ], - [ 30, Moves.HORN_ATTACK ], - [ 35, Moves.SCARY_FACE ], - [ 40, Moves.HORN_LEECH ], - [ 45, Moves.ZEN_HEADBUTT ], - [ 50, Moves.MEAN_LOOK ], - [ 55, Moves.NATURES_MADNESS ], - [ 60, Moves.WOOD_HAMMER ], - [ 65, Moves.MEGAHORN ], - [ 70, Moves.SKULL_BASH ], - [ 75, Moves.GRASSY_TERRAIN ], - ], - [Species.TAPU_FINI]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.DISARMING_VOICE ], - [ 5, Moves.WITHDRAW ], - [ 10, Moves.MIST ], - [ 10, Moves.HAZE ], - [ 15, Moves.AQUA_RING ], - [ 20, Moves.WATER_PULSE ], - [ 25, Moves.BRINE ], - [ 30, Moves.DEFOG ], - [ 35, Moves.HEAL_PULSE ], - [ 40, Moves.SURF ], - [ 45, Moves.MUDDY_WATER ], - [ 50, Moves.MEAN_LOOK ], - [ 55, Moves.NATURES_MADNESS ], - [ 60, Moves.MOONBLAST ], - [ 65, Moves.HYDRO_PUMP ], - [ 70, Moves.SOAK ], - [ 75, Moves.MISTY_TERRAIN ], - ], - [Species.COSMOG]: [ - [ 1, Moves.TELEPORT ], - [ 1, Moves.SPLASH ], - [ 1, Moves.STORED_POWER ], // Custom - ], - [Species.COSMOEM]: [ - [ EVOLVE_MOVE, Moves.COSMIC_POWER ], - [ 1, Moves.TELEPORT ], - [ 1, Moves.SPLASH ], // Previous Stage Move - [ 1, Moves.STORED_POWER ], // Previous Stage Move, Custom - ], - [Species.SOLGALEO]: [ - [ EVOLVE_MOVE, Moves.SUNSTEEL_STRIKE ], - [ 1, Moves.TELEPORT ], - [ 1, Moves.SPLASH ], // Previous Stage Move - [ 1, Moves.STORED_POWER ], // Previous Stage Move, Custom - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.COSMIC_POWER ], - [ 1, Moves.NOBLE_ROAR ], - [ 1, Moves.WAKE_UP_SLAP ], - [ 7, Moves.IRON_HEAD ], - [ 14, Moves.METAL_SOUND ], - [ 21, Moves.ZEN_HEADBUTT ], - [ 28, Moves.FLASH_CANNON ], - [ 35, Moves.MORNING_SUN ], - [ 42, Moves.CRUNCH ], - [ 49, Moves.METAL_BURST ], - [ 56, Moves.WILD_CHARGE ], - [ 63, Moves.SOLAR_BEAM ], - [ 70, Moves.FLARE_BLITZ ], - [ 77, Moves.WIDE_GUARD ], - [ 84, Moves.GIGA_IMPACT ], - ], - [Species.LUNALA]: [ - [ EVOLVE_MOVE, Moves.MOONGEIST_BEAM ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.HYPNOSIS ], - [ 1, Moves.TELEPORT ], - [ 1, Moves.SPLASH ], // Previous Stage Move - [ 1, Moves.STORED_POWER ], // Previous Stage Move, Custom - [ 1, Moves.COSMIC_POWER ], - [ 7, Moves.NIGHT_SHADE ], - [ 14, Moves.CONFUSE_RAY ], - [ 21, Moves.AIR_SLASH ], - [ 28, Moves.SHADOW_BALL ], - [ 35, Moves.MOONLIGHT ], - [ 42, Moves.NIGHT_DAZE ], - [ 49, Moves.MAGIC_COAT ], - [ 56, Moves.MOONBLAST ], - [ 63, Moves.PHANTOM_FORCE ], - [ 70, Moves.DREAM_EATER ], - [ 77, Moves.WIDE_GUARD ], - [ 84, Moves.HYPER_BEAM ], - ], - [Species.NIHILEGO]: [ - [ 1, Moves.POUND ], - [ 1, Moves.WRAP ], - [ 1, Moves.CONSTRICT ], - [ 5, Moves.ACID ], - [ 10, Moves.TICKLE ], - [ 15, Moves.ACID_SPRAY ], - [ 20, Moves.CLEAR_SMOG ], - [ 25, Moves.GUARD_SPLIT ], - [ 25, Moves.POWER_SPLIT ], - [ 30, Moves.VENOSHOCK ], - [ 35, Moves.HEADBUTT ], - [ 40, Moves.TOXIC_SPIKES ], - [ 45, Moves.VENOM_DRENCH ], - [ 50, Moves.POWER_GEM ], - [ 55, Moves.STEALTH_ROCK ], - [ 60, Moves.MIRROR_COAT ], - [ 65, Moves.WONDER_ROOM ], - [ 70, Moves.HEAD_SMASH ], - ], - [Species.BUZZWOLE]: [ - [ 1, Moves.HARDEN ], - [ 1, Moves.POWER_UP_PUNCH ], - [ 5, Moves.TAUNT ], - [ 10, Moves.FELL_STINGER ], - [ 15, Moves.VITAL_THROW ], - [ 20, Moves.BULK_UP ], - [ 25, Moves.ENDURE ], - [ 30, Moves.REVERSAL ], - [ 35, Moves.MEGA_PUNCH ], - [ 40, Moves.LUNGE ], - [ 45, Moves.FOCUS_ENERGY ], - [ 50, Moves.DYNAMIC_PUNCH ], - [ 55, Moves.COUNTER ], - [ 60, Moves.HAMMER_ARM ], - [ 65, Moves.SUPERPOWER ], - [ 70, Moves.FOCUS_PUNCH ], - ], - [Species.PHEROMOSA]: [ - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.FEINT ], - [ 5, Moves.LEER ], - [ 10, Moves.QUICK_GUARD ], - [ 15, Moves.BUG_BITE ], - [ 20, Moves.LOW_KICK ], - [ 25, Moves.DOUBLE_KICK ], - [ 30, Moves.TRIPLE_KICK ], - [ 35, Moves.STOMP ], - [ 40, Moves.AGILITY ], - [ 45, Moves.LUNGE ], - [ 50, Moves.BOUNCE ], - [ 55, Moves.SPEED_SWAP ], - [ 60, Moves.BUG_BUZZ ], - [ 65, Moves.QUIVER_DANCE ], - [ 70, Moves.HIGH_JUMP_KICK ], - ], - [Species.XURKITREE]: [ - [ 1, Moves.WRAP ], - [ 1, Moves.THUNDER_SHOCK ], - [ 5, Moves.CHARGE ], - [ 10, Moves.THUNDER_WAVE ], - [ 15, Moves.INGRAIN ], - [ 20, Moves.SPARK ], - [ 25, Moves.SHOCK_WAVE ], - [ 30, Moves.HYPNOSIS ], - [ 35, Moves.EERIE_IMPULSE ], - [ 40, Moves.THUNDER_PUNCH ], - [ 45, Moves.DISCHARGE ], - [ 50, Moves.MAGNET_RISE ], - [ 55, Moves.THUNDERBOLT ], - [ 60, Moves.ELECTRIC_TERRAIN ], - [ 65, Moves.POWER_WHIP ], - [ 70, Moves.ZAP_CANNON ], - ], - [Species.CELESTEELA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.ABSORB ], - [ 5, Moves.HARDEN ], - [ 10, Moves.WIDE_GUARD ], - [ 15, Moves.MEGA_DRAIN ], - [ 20, Moves.SMACK_DOWN ], - [ 25, Moves.INGRAIN ], - [ 30, Moves.AUTOTOMIZE ], - [ 35, Moves.GIGA_DRAIN ], - [ 40, Moves.FLASH_CANNON ], - [ 45, Moves.METAL_SOUND ], - [ 50, Moves.IRON_DEFENSE ], - [ 55, Moves.LEECH_SEED ], - [ 60, Moves.HEAVY_SLAM ], - [ 65, Moves.DOUBLE_EDGE ], - [ 70, Moves.SKULL_BASH ], - ], - [Species.KARTANA]: [ - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.VACUUM_WAVE ], - [ 5, Moves.RAZOR_LEAF ], - [ 10, Moves.FALSE_SWIPE ], - [ 15, Moves.CUT ], - [ 20, Moves.AIR_CUTTER ], - [ 25, Moves.AERIAL_ACE ], - [ 30, Moves.DETECT ], - [ 35, Moves.NIGHT_SLASH ], - [ 40, Moves.SYNTHESIS ], - [ 45, Moves.LASER_FOCUS ], - [ 50, Moves.DEFOG ], - [ 55, Moves.LEAF_BLADE ], - [ 60, Moves.SACRED_SWORD ], - [ 65, Moves.SWORDS_DANCE ], - [ 70, Moves.GUILLOTINE ], - ], - [Species.GUZZLORD]: [ - [ 1, Moves.BITE ], - [ 1, Moves.DRAGON_TAIL ], - [ 5, Moves.STOCKPILE ], - [ 5, Moves.SWALLOW ], - [ 10, Moves.KNOCK_OFF ], - [ 15, Moves.STOMP ], - [ 20, Moves.STOMPING_TANTRUM ], - [ 25, Moves.WIDE_GUARD ], - [ 30, Moves.CRUNCH ], - [ 35, Moves.BODY_SLAM ], - [ 40, Moves.GASTRO_ACID ], - [ 45, Moves.HAMMER_ARM ], - [ 50, Moves.HEAVY_SLAM ], - [ 55, Moves.DRAGON_RUSH ], - [ 60, Moves.BELCH ], - [ 65, Moves.THRASH ], - [ 70, Moves.GIGA_IMPACT ], - ], - [Species.NECROZMA]: [ - [ 1, Moves.CONFUSION ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.MORNING_SUN ], - [ 1, Moves.MOONLIGHT ], - [ 1, Moves.GRAVITY ], - [ 1, Moves.CHARGE_BEAM ], - [ 1, Moves.MIRROR_SHOT ], - [ 8, Moves.STEALTH_ROCK ], - [ 16, Moves.SLASH ], - [ 24, Moves.NIGHT_SLASH ], - [ 32, Moves.PSYCHO_CUT ], - [ 40, Moves.STORED_POWER ], - [ 48, Moves.ROCK_BLAST ], - [ 56, Moves.IRON_DEFENSE ], - [ 64, Moves.POWER_GEM ], - [ 72, Moves.PHOTON_GEYSER ], - [ 80, Moves.AUTOTOMIZE ], - [ 88, Moves.PRISMATIC_LASER ], - ], - [Species.MAGEARNA]: [ - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.GYRO_BALL ], - [ 1, Moves.DISARMING_VOICE ], // Custom - [ 1, Moves.CRAFTY_SHIELD ], - [ 1, Moves.GEAR_UP ], - [ 6, Moves.DEFENSE_CURL ], - [ 12, Moves.ROLLOUT ], - [ 18, Moves.IRON_DEFENSE ], - [ 24, Moves.MAGNETIC_FLUX ], - [ 30, Moves.PSYBEAM ], - [ 36, Moves.AURORA_BEAM ], - [ 42, Moves.LOCK_ON ], - [ 48, Moves.SHIFT_GEAR ], - [ 54, Moves.TRICK ], - [ 60, Moves.IRON_HEAD ], - [ 66, Moves.AURA_SPHERE ], - [ 72, Moves.FLASH_CANNON ], - [ 78, Moves.PAIN_SPLIT ], - [ 84, Moves.ZAP_CANNON ], - [ 90, Moves.FLEUR_CANNON ], - ], - [Species.MARSHADOW]: [ - [ 1, Moves.FIRE_PUNCH ], - [ 1, Moves.ICE_PUNCH ], - [ 1, Moves.THUNDER_PUNCH ], - [ 1, Moves.COUNTER ], - [ 1, Moves.FEINT ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.SHADOW_SNEAK ], - [ 1, Moves.PURSUIT ], - [ 9, Moves.ROLE_PLAY ], - [ 18, Moves.SHADOW_PUNCH ], - [ 27, Moves.FORCE_PALM ], - [ 36, Moves.ASSURANCE ], - [ 45, Moves.SUCKER_PUNCH ], - [ 54, Moves.DRAIN_PUNCH ], - [ 63, Moves.PSYCH_UP ], - [ 72, Moves.SPECTRAL_THIEF ], - [ 81, Moves.LASER_FOCUS ], - [ 90, Moves.ENDEAVOR ], - [ 99, Moves.CLOSE_COMBAT ], - ], - [Species.POIPOLE]: [ - [ RELEARN_MOVE, Moves.DRAGON_PULSE ], // Custom, made relearn - [ 1, Moves.GROWL ], - [ 1, Moves.ACID ], - [ 1, Moves.PECK ], - [ 1, Moves.HELPING_HAND ], - [ 7, Moves.FURY_ATTACK ], - [ 14, Moves.FELL_STINGER ], - [ 21, Moves.CHARM ], - [ 28, Moves.VENOSHOCK ], - [ 35, Moves.VENOM_DRENCH ], - [ 42, Moves.NASTY_PLOT ], - [ 49, Moves.POISON_JAB ], - [ 56, Moves.GASTRO_ACID ], - [ 63, Moves.TOXIC ], - ], - [Species.NAGANADEL]: [ - [ EVOLVE_MOVE, Moves.AIR_CUTTER ], - [ 1, Moves.GROWL ], - [ 1, Moves.ACID ], - [ 1, Moves.PECK ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.AIR_SLASH ], - [ 1, Moves.DRAGON_PULSE ], - [ 7, Moves.FURY_ATTACK ], - [ 14, Moves.FELL_STINGER ], - [ 21, Moves.CHARM ], - [ 28, Moves.VENOSHOCK ], - [ 35, Moves.VENOM_DRENCH ], - [ 42, Moves.NASTY_PLOT ], - [ 49, Moves.POISON_JAB ], - [ 56, Moves.GASTRO_ACID ], - [ 63, Moves.TOXIC ], - [ 70, Moves.DRAGON_RUSH ], - ], - [Species.STAKATAKA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 5, Moves.ROCK_THROW ], - [ 10, Moves.PROTECT ], - [ 15, Moves.STOMP ], - [ 20, Moves.BLOCK ], - [ 25, Moves.ROCK_SLIDE ], - [ 30, Moves.WIDE_GUARD ], - [ 35, Moves.AUTOTOMIZE ], - [ 40, Moves.ROCK_BLAST ], - [ 45, Moves.MAGNET_RISE ], - [ 50, Moves.IRON_DEFENSE ], - [ 55, Moves.IRON_HEAD ], - [ 60, Moves.TAKE_DOWN ], - [ 65, Moves.STEALTH_ROCK ], - [ 70, Moves.DOUBLE_EDGE ], - ], - [Species.BLACEPHALON]: [ - [ 1, Moves.FIRE_SPIN ], - [ 1, Moves.ASTONISH ], - [ 5, Moves.LIGHT_SCREEN ], - [ 10, Moves.EMBER ], - [ 15, Moves.NIGHT_SHADE ], - [ 20, Moves.CONFUSE_RAY ], - [ 25, Moves.MAGIC_COAT ], - [ 30, Moves.INCINERATE ], - [ 35, Moves.HYPNOSIS ], - [ 40, Moves.MYSTICAL_FIRE ], - [ 45, Moves.SHADOW_BALL ], - [ 50, Moves.CALM_MIND ], - [ 55, Moves.WILL_O_WISP ], - [ 60, Moves.TRICK ], - [ 65, Moves.FIRE_BLAST ], - [ 70, Moves.MIND_BLOWN ], - ], - [Species.ZERAORA]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.SPARK ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.SNARL ], - [ 1, Moves.POWER_UP_PUNCH ], - [ 8, Moves.FURY_SWIPES ], - [ 16, Moves.QUICK_GUARD ], - [ 24, Moves.SLASH ], - [ 32, Moves.VOLT_SWITCH ], - [ 40, Moves.CHARGE ], - [ 48, Moves.THUNDER_PUNCH ], - [ 56, Moves.HONE_CLAWS ], - [ 64, Moves.DISCHARGE ], - [ 72, Moves.WILD_CHARGE ], - [ 80, Moves.AGILITY ], - [ 88, Moves.PLASMA_FISTS ], - [ 96, Moves.CLOSE_COMBAT ], - ], - [Species.MELTAN]: [ - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.HARDEN ], - [ 8, Moves.TAIL_WHIP ], - [ 16, Moves.HEADBUTT ], - [ 24, Moves.THUNDER_WAVE ], - [ 32, Moves.ACID_ARMOR ], - [ 40, Moves.FLASH_CANNON ], - ], - [Species.MELMETAL]: [ - [ EVOLVE_MOVE, Moves.THUNDER_PUNCH ], - [ 1, Moves.HEADBUTT ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.HARDEN ], - [ 24, Moves.THUNDER_WAVE ], - [ 32, Moves.ACID_ARMOR ], - [ 40, Moves.FLASH_CANNON ], - [ 48, Moves.MEGA_PUNCH ], - [ 56, Moves.PROTECT ], - [ 64, Moves.DISCHARGE ], - [ 72, Moves.DYNAMIC_PUNCH ], - [ 80, Moves.SUPERPOWER ], - [ 88, Moves.DOUBLE_IRON_BASH ], - [ 96, Moves.HYPER_BEAM ], - ], - [Species.GROOKEY]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 5, Moves.BRANCH_POKE ], // Custom, moved from 6 to 5 - [ 8, Moves.TAUNT ], - [ 12, Moves.RAZOR_LEAF ], - [ 17, Moves.SCREECH ], - [ 20, Moves.KNOCK_OFF ], - [ 24, Moves.SLAM ], - [ 28, Moves.UPROAR ], - [ 32, Moves.WOOD_HAMMER ], - [ 36, Moves.ENDEAVOR ], - ], - [Species.THWACKEY]: [ - [ EVOLVE_MOVE, Moves.DOUBLE_HIT ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 1, Moves.TAUNT ], - [ 1, Moves.BRANCH_POKE ], - [ 12, Moves.RAZOR_LEAF ], - [ 19, Moves.SCREECH ], - [ 24, Moves.KNOCK_OFF ], - [ 30, Moves.SLAM ], - [ 36, Moves.UPROAR ], - [ 42, Moves.WOOD_HAMMER ], - [ 48, Moves.ENDEAVOR ], - ], - [Species.RILLABOOM]: [ - [ EVOLVE_MOVE, Moves.DRUM_BEATING ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 1, Moves.TAUNT ], - [ 1, Moves.DOUBLE_HIT ], - [ 1, Moves.NOBLE_ROAR ], - [ 1, Moves.GRASSY_TERRAIN ], - [ 1, Moves.BRANCH_POKE ], - [ 12, Moves.RAZOR_LEAF ], - [ 19, Moves.SCREECH ], - [ 24, Moves.KNOCK_OFF ], - [ 30, Moves.SLAM ], - [ 38, Moves.UPROAR ], - [ 46, Moves.WOOD_HAMMER ], - [ 54, Moves.ENDEAVOR ], - [ 62, Moves.BOOMBURST ], - ], - [Species.SCORBUNNY]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 5, Moves.EMBER ], // Custom, moved from 6 to 5 - [ 8, Moves.QUICK_ATTACK ], - [ 12, Moves.DOUBLE_KICK ], - [ 17, Moves.FLAME_CHARGE ], - [ 20, Moves.AGILITY ], - [ 24, Moves.HEADBUTT ], - [ 28, Moves.COUNTER ], - [ 32, Moves.BOUNCE ], - [ 36, Moves.DOUBLE_EDGE ], - ], - [Species.RABOOT]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.EMBER ], - [ 1, Moves.QUICK_ATTACK ], - [ 12, Moves.DOUBLE_KICK ], - [ 19, Moves.FLAME_CHARGE ], - [ 24, Moves.AGILITY ], - [ 30, Moves.HEADBUTT ], - [ 36, Moves.COUNTER ], - [ 42, Moves.BOUNCE ], - [ 48, Moves.DOUBLE_EDGE ], - ], - [Species.CINDERACE]: [ - [ EVOLVE_MOVE, Moves.PYRO_BALL ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.EMBER ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.FEINT ], - [ 12, Moves.DOUBLE_KICK ], - [ 19, Moves.FLAME_CHARGE ], - [ 24, Moves.AGILITY ], - [ 30, Moves.HEADBUTT ], - [ 38, Moves.COUNTER ], - [ 46, Moves.BOUNCE ], - [ 54, Moves.DOUBLE_EDGE ], - [ 62, Moves.COURT_CHANGE ], - ], - [Species.SOBBLE]: [ - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 5, Moves.WATER_GUN ], // Custom, moved from 6 to 5 - [ 8, Moves.BIND ], - [ 12, Moves.WATER_PULSE ], - [ 17, Moves.TEARFUL_LOOK ], - [ 20, Moves.SUCKER_PUNCH ], - [ 24, Moves.U_TURN ], - [ 28, Moves.LIQUIDATION ], - [ 32, Moves.SOAK ], - [ 36, Moves.RAIN_DANCE ], - ], - [Species.DRIZZILE]: [ - [ 1, Moves.POUND ], - [ 1, Moves.BIND ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 12, Moves.WATER_PULSE ], - [ 19, Moves.TEARFUL_LOOK ], - [ 24, Moves.SUCKER_PUNCH ], - [ 30, Moves.U_TURN ], - [ 36, Moves.LIQUIDATION ], - [ 42, Moves.SOAK ], - [ 48, Moves.RAIN_DANCE ], - ], - [Species.INTELEON]: [ - [ EVOLVE_MOVE, Moves.SNIPE_SHOT ], - [ 1, Moves.POUND ], - [ 1, Moves.BIND ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.ACROBATICS ], - [ 12, Moves.WATER_PULSE ], - [ 19, Moves.TEARFUL_LOOK ], - [ 24, Moves.SUCKER_PUNCH ], - [ 30, Moves.U_TURN ], - [ 38, Moves.LIQUIDATION ], - [ 46, Moves.SOAK ], - [ 54, Moves.RAIN_DANCE ], - [ 62, Moves.HYDRO_PUMP ], - ], - [Species.SKWOVET]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 5, Moves.BITE ], - [ 10, Moves.STUFF_CHEEKS ], - [ 15, Moves.STOCKPILE ], - [ 15, Moves.SPIT_UP ], - [ 15, Moves.SWALLOW ], - [ 20, Moves.BODY_SLAM ], - [ 25, Moves.REST ], - [ 30, Moves.COUNTER ], - [ 35, Moves.BULLET_SEED ], - [ 40, Moves.SUPER_FANG ], - [ 45, Moves.BELCH ], - ], - [Species.GREEDENT]: [ - [ EVOLVE_MOVE, Moves.COVET ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.BITE ], - [ 1, Moves.STUFF_CHEEKS ], - [ 15, Moves.STOCKPILE ], - [ 15, Moves.SPIT_UP ], - [ 15, Moves.SWALLOW ], - [ 20, Moves.BODY_SLAM ], - [ 27, Moves.REST ], - [ 34, Moves.COUNTER ], - [ 41, Moves.BULLET_SEED ], - [ 48, Moves.SUPER_FANG ], - [ 55, Moves.BELCH ], - ], - [Species.ROOKIDEE]: [ - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 4, Moves.POWER_TRIP ], - [ 8, Moves.HONE_CLAWS ], - [ 12, Moves.FURY_ATTACK ], - [ 16, Moves.PLUCK ], - [ 20, Moves.TAUNT ], - [ 24, Moves.SCARY_FACE ], - [ 28, Moves.DRILL_PECK ], - [ 32, Moves.SWAGGER ], - [ 36, Moves.BRAVE_BIRD ], - ], - [Species.CORVISQUIRE]: [ - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 1, Moves.HONE_CLAWS ], - [ 1, Moves.POWER_TRIP ], - [ 12, Moves.FURY_ATTACK ], - [ 16, Moves.PLUCK ], - [ 22, Moves.TAUNT ], - [ 28, Moves.SCARY_FACE ], - [ 34, Moves.DRILL_PECK ], - [ 40, Moves.SWAGGER ], - [ 46, Moves.BRAVE_BIRD ], - ], - [Species.CORVIKNIGHT]: [ - [ EVOLVE_MOVE, Moves.STEEL_WING ], - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 1, Moves.SCREECH ], - [ 1, Moves.METAL_SOUND ], - [ 1, Moves.IRON_DEFENSE ], - [ 1, Moves.HONE_CLAWS ], - [ 1, Moves.POWER_TRIP ], - [ 12, Moves.FURY_ATTACK ], - [ 16, Moves.PLUCK ], - [ 22, Moves.TAUNT ], - [ 28, Moves.SCARY_FACE ], - [ 34, Moves.DRILL_PECK ], - [ 42, Moves.SWAGGER ], - [ 50, Moves.BRAVE_BIRD ], - ], - [Species.BLIPBUG]: [ - [ 1, Moves.STRUGGLE_BUG ], - ], - [Species.DOTTLER]: [ - [ EVOLVE_MOVE, Moves.CONFUSION ], - [ EVOLVE_MOVE, Moves.LIGHT_SCREEN ], - [ EVOLVE_MOVE, Moves.REFLECT ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.LIGHT_SCREEN ], - [ 1, Moves.REFLECT ], - [ 1, Moves.STRUGGLE_BUG ], - ], - [Species.ORBEETLE]: [ - [ 1, Moves.CONFUSION ], - [ 1, Moves.LIGHT_SCREEN ], - [ 1, Moves.REFLECT ], - [ 1, Moves.STRUGGLE_BUG ], - [ 4, Moves.CONFUSE_RAY ], - [ 8, Moves.MAGIC_COAT ], - [ 12, Moves.AGILITY ], - [ 16, Moves.PSYBEAM ], - [ 20, Moves.HYPNOSIS ], - [ 24, Moves.ALLY_SWITCH ], - [ 28, Moves.BUG_BUZZ ], - [ 32, Moves.MIRROR_COAT ], - [ 36, Moves.PSYCHIC ], - [ 40, Moves.AFTER_YOU ], - [ 44, Moves.CALM_MIND ], - [ 48, Moves.PSYCHIC_TERRAIN ], - ], - [Species.NICKIT]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.QUICK_ATTACK ], - [ 4, Moves.BEAT_UP ], - [ 8, Moves.HONE_CLAWS ], - [ 12, Moves.SNARL ], - [ 16, Moves.ASSURANCE ], - [ 20, Moves.NASTY_PLOT ], - [ 24, Moves.SUCKER_PUNCH ], - [ 28, Moves.NIGHT_SLASH ], - [ 32, Moves.TAIL_SLAP ], - [ 36, Moves.FOUL_PLAY ], - ], - [Species.THIEVUL]: [ - [ EVOLVE_MOVE, Moves.THIEF ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.BEAT_UP ], - [ 1, Moves.HONE_CLAWS ], - [ 12, Moves.SNARL ], - [ 16, Moves.ASSURANCE ], - [ 22, Moves.NASTY_PLOT ], - [ 28, Moves.SUCKER_PUNCH ], - [ 34, Moves.NIGHT_SLASH ], - [ 40, Moves.TAIL_SLAP ], - [ 46, Moves.FOUL_PLAY ], - [ 52, Moves.PARTING_SHOT ], - ], - [Species.GOSSIFLEUR]: [ - [ 1, Moves.SING ], - [ 1, Moves.LEAFAGE ], - [ 4, Moves.RAPID_SPIN ], - [ 8, Moves.SWEET_SCENT ], - [ 12, Moves.RAZOR_LEAF ], - [ 16, Moves.ROUND ], - [ 21, Moves.LEAF_TORNADO ], - [ 24, Moves.SYNTHESIS ], - [ 28, Moves.HYPER_VOICE ], - [ 32, Moves.AROMATHERAPY ], - [ 36, Moves.LEAF_STORM ], - ], - [Species.ELDEGOSS]: [ - [ EVOLVE_MOVE, Moves.COTTON_SPORE ], - [ 1, Moves.SING ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.LEAFAGE ], - [ 12, Moves.RAZOR_LEAF ], - [ 16, Moves.ROUND ], - [ 23, Moves.LEAF_TORNADO ], - [ 28, Moves.SYNTHESIS ], - [ 34, Moves.HYPER_VOICE ], - [ 40, Moves.AROMATHERAPY ], - [ 46, Moves.LEAF_STORM ], - [ 52, Moves.COTTON_GUARD ], - ], - [Species.WOOLOO]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 4, Moves.DEFENSE_CURL ], - [ 8, Moves.COPYCAT ], - [ 12, Moves.GUARD_SPLIT ], - [ 16, Moves.DOUBLE_KICK ], - [ 21, Moves.HEADBUTT ], - [ 25, Moves.TAKE_DOWN ], - [ 28, Moves.GUARD_SWAP ], - [ 32, Moves.REVERSAL ], - [ 36, Moves.COTTON_GUARD ], - [ 40, Moves.DOUBLE_EDGE ], - ], - [Species.DUBWOOL]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.COPYCAT ], - [ 12, Moves.GUARD_SPLIT ], - [ 16, Moves.DOUBLE_KICK ], - [ 21, Moves.HEADBUTT ], - [ 27, Moves.TAKE_DOWN ], - [ 32, Moves.GUARD_SWAP ], - [ 38, Moves.REVERSAL ], - [ 44, Moves.COTTON_GUARD ], - [ 50, Moves.DOUBLE_EDGE ], - [ 56, Moves.LAST_RESORT ], - ], - [Species.CHEWTLE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.WATER_GUN ], - [ 7, Moves.BITE ], - [ 14, Moves.PROTECT ], - [ 21, Moves.HEADBUTT ], - [ 28, Moves.COUNTER ], - [ 35, Moves.JAW_LOCK ], - [ 42, Moves.LIQUIDATION ], - [ 49, Moves.BODY_SLAM ], - ], - [Species.DREDNAW]: [ - [ EVOLVE_MOVE, Moves.ROCK_TOMB ], - [ 1, Moves.TACKLE ], - [ 1, Moves.BITE ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.PROTECT ], - [ 1, Moves.CRUNCH ], - [ 1, Moves.ROCK_POLISH ], - [ 1, Moves.RAZOR_SHELL ], - [ 21, Moves.HEADBUTT ], - [ 30, Moves.COUNTER ], - [ 39, Moves.JAW_LOCK ], - [ 48, Moves.LIQUIDATION ], - [ 57, Moves.BODY_SLAM ], - [ 66, Moves.HEAD_SMASH ], - ], - [Species.YAMPER]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 5, Moves.NUZZLE ], - [ 10, Moves.BITE ], - [ 15, Moves.ROAR ], - [ 20, Moves.SPARK ], - [ 26, Moves.CHARM ], - [ 30, Moves.CRUNCH ], - [ 35, Moves.CHARGE ], - [ 40, Moves.WILD_CHARGE ], - [ 45, Moves.PLAY_ROUGH ], - ], - [Species.BOLTUND]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.BITE ], - [ 1, Moves.ELECTRIFY ], - [ 1, Moves.NUZZLE ], - [ 15, Moves.ROAR ], - [ 20, Moves.SPARK ], - [ 28, Moves.CHARM ], - [ 34, Moves.CRUNCH ], - [ 41, Moves.CHARGE ], - [ 48, Moves.WILD_CHARGE ], - [ 55, Moves.PLAY_ROUGH ], - [ 62, Moves.ELECTRIC_TERRAIN ], - ], - [Species.ROLYCOLY]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.SMOKESCREEN ], - [ 5, Moves.RAPID_SPIN ], - [ 10, Moves.SMACK_DOWN ], - [ 15, Moves.ROCK_POLISH ], - [ 20, Moves.ANCIENT_POWER ], - [ 25, Moves.INCINERATE ], - [ 30, Moves.STEALTH_ROCK ], - [ 35, Moves.HEAT_CRASH ], - [ 40, Moves.ROCK_BLAST ], - ], - [Species.CARKOL]: [ - [ EVOLVE_MOVE, Moves.FLAME_CHARGE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.SMACK_DOWN ], - [ 15, Moves.ROCK_POLISH ], - [ 20, Moves.ANCIENT_POWER ], - [ 27, Moves.INCINERATE ], - [ 35, Moves.STEALTH_ROCK ], - [ 41, Moves.HEAT_CRASH ], - [ 48, Moves.ROCK_BLAST ], - [ 55, Moves.STONE_EDGE ], - ], - [Species.COALOSSAL]: [ - [ EVOLVE_MOVE, Moves.TAR_SHOT ], - [ 1, Moves.TACKLE ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.SMACK_DOWN ], - [ 1, Moves.FLAME_CHARGE ], - [ 15, Moves.ROCK_POLISH ], - [ 20, Moves.ANCIENT_POWER ], - [ 27, Moves.INCINERATE ], - [ 37, Moves.STEALTH_ROCK ], - [ 45, Moves.HEAT_CRASH ], - [ 54, Moves.ROCK_BLAST ], - [ 63, Moves.STONE_EDGE ], - ], - [Species.APPLIN]: [ - [ 1, Moves.WITHDRAW ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.LEAFAGE ], // Custom - ], - [Species.FLAPPLE]: [ - [ EVOLVE_MOVE, Moves.WING_ATTACK ], - [ 1, Moves.LEAFAGE ], // Previous Stage Move, Custom - [ 1, Moves.GROWTH ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.TWISTER ], - [ 1, Moves.RECYCLE ], - [ 1, Moves.ASTONISH ], - [ 4, Moves.ACID_SPRAY ], - [ 8, Moves.ACROBATICS ], - [ 12, Moves.LEECH_SEED ], - [ 16, Moves.PROTECT ], - [ 20, Moves.DRAGON_BREATH ], - [ 24, Moves.DRAGON_DANCE ], - [ 28, Moves.DRAGON_PULSE ], - [ 32, Moves.GRAV_APPLE ], - [ 36, Moves.IRON_DEFENSE ], - [ 40, Moves.FLY ], - [ 44, Moves.DRAGON_RUSH ], - ], - [Species.APPLETUN]: [ - [ EVOLVE_MOVE, Moves.HEADBUTT ], - [ 1, Moves.LEAFAGE ], // Previous Stage Move, Custom - [ 1, Moves.GROWTH ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.RECYCLE ], - [ 1, Moves.ASTONISH ], - [ 4, Moves.CURSE ], - [ 8, Moves.STOMP ], - [ 12, Moves.LEECH_SEED ], - [ 16, Moves.PROTECT ], - [ 20, Moves.BULLET_SEED ], - [ 24, Moves.RECOVER ], - [ 28, Moves.APPLE_ACID ], - [ 32, Moves.BODY_SLAM ], - [ 36, Moves.IRON_DEFENSE ], - [ 40, Moves.DRAGON_PULSE ], - [ 44, Moves.ENERGY_BALL ], - ], - [Species.SILICOBRA]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.WRAP ], - [ 1, Moves.MUD_SLAP ], // Custom - [ 5, Moves.MINIMIZE ], - [ 10, Moves.BRUTAL_SWING ], - [ 15, Moves.BULLDOZE ], - [ 20, Moves.HEADBUTT ], - [ 25, Moves.GLARE ], - [ 30, Moves.DIG ], - [ 35, Moves.SANDSTORM ], - [ 40, Moves.SLAM ], - [ 45, Moves.COIL ], - [ 50, Moves.SAND_TOMB ], - ], - [Species.SANDACONDA]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.WRAP ], - [ 1, Moves.MUD_SLAP ], // Previous Stage Move, Custom - [ 1, Moves.MINIMIZE ], - [ 1, Moves.BRUTAL_SWING ], - [ 15, Moves.BULLDOZE ], - [ 20, Moves.HEADBUTT ], - [ 25, Moves.GLARE ], - [ 30, Moves.DIG ], - [ 35, Moves.SANDSTORM ], - [ 42, Moves.SLAM ], - [ 49, Moves.COIL ], - [ 51, Moves.SAND_TOMB ], - ], - [Species.CRAMORANT]: [ - [ RELEARN_MOVE, Moves.BELCH ], - [ 1, Moves.PECK ], - [ 1, Moves.STOCKPILE ], - [ 1, Moves.SPIT_UP ], - [ 1, Moves.SWALLOW ], - [ 7, Moves.WATER_GUN ], - [ 14, Moves.FURY_ATTACK ], - [ 21, Moves.PLUCK ], - [ 28, Moves.DIVE ], - [ 35, Moves.DRILL_PECK ], - [ 42, Moves.AMNESIA ], - [ 49, Moves.THRASH ], - [ 56, Moves.HYDRO_PUMP ], - ], - [Species.ARROKUDA]: [ - [ 1, Moves.PECK ], - [ 1, Moves.AQUA_JET ], - [ 6, Moves.FURY_ATTACK ], - [ 12, Moves.BITE ], - [ 18, Moves.AGILITY ], - [ 24, Moves.DIVE ], - [ 30, Moves.FOCUS_ENERGY ], - [ 36, Moves.CRUNCH ], - [ 42, Moves.LIQUIDATION ], - [ 48, Moves.DOUBLE_EDGE ], - ], - [Species.BARRASKEWDA]: [ - [ 1, Moves.FURY_ATTACK ], - [ 1, Moves.BITE ], - [ 1, Moves.PECK ], - [ 1, Moves.AQUA_JET ], - [ 1, Moves.THROAT_CHOP ], - [ 18, Moves.AGILITY ], - [ 24, Moves.DIVE ], - [ 32, Moves.FOCUS_ENERGY ], - [ 40, Moves.CRUNCH ], - [ 48, Moves.LIQUIDATION ], - [ 56, Moves.DOUBLE_EDGE ], - ], - [Species.TOXEL]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.ACID ], - [ 1, Moves.FLAIL ], - [ 1, Moves.BELCH ], - [ 1, Moves.NUZZLE ], - [ 1, Moves.TEARFUL_LOOK ], - ], - [Species.TOXTRICITY]: [ - [ EVOLVE_MOVE, Moves.SPARK ], - [ 1, Moves.LEER ], - [ 1, Moves.GROWL ], - [ 1, Moves.ACID ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.FLAIL ], - [ 1, Moves.ACID_SPRAY ], - [ 1, Moves.BELCH ], - [ 1, Moves.NOBLE_ROAR ], - [ 1, Moves.NUZZLE ], - [ 1, Moves.TEARFUL_LOOK ], - [ 4, Moves.CHARGE ], - [ 8, Moves.SHOCK_WAVE ], - [ 12, Moves.SCARY_FACE ], - [ 16, Moves.TAUNT ], - [ 24, Moves.SCREECH ], - [ 28, Moves.SWAGGER ], - [ 32, Moves.TOXIC ], - [ 36, Moves.DISCHARGE ], - [ 40, Moves.POISON_JAB ], - [ 44, Moves.OVERDRIVE ], - [ 48, Moves.BOOMBURST ], - [ 52, Moves.SHIFT_GEAR ], - ], - [Species.SIZZLIPEDE]: [ - [ 1, Moves.EMBER ], - [ 1, Moves.SMOKESCREEN ], - [ 5, Moves.WRAP ], - [ 10, Moves.BITE ], - [ 15, Moves.FLAME_WHEEL ], - [ 20, Moves.BUG_BITE ], - [ 25, Moves.COIL ], - [ 30, Moves.SLAM ], - [ 35, Moves.FIRE_SPIN ], - [ 40, Moves.CRUNCH ], - [ 45, Moves.FIRE_LASH ], - [ 50, Moves.LUNGE ], - [ 55, Moves.BURN_UP ], - ], - [Species.CENTISKORCH]: [ - [ 1, Moves.WRAP ], - [ 1, Moves.BITE ], - [ 1, Moves.EMBER ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.INFERNO ], - [ 15, Moves.FLAME_WHEEL ], - [ 20, Moves.BUG_BITE ], - [ 25, Moves.COIL ], - [ 32, Moves.SLAM ], - [ 39, Moves.FIRE_SPIN ], - [ 46, Moves.CRUNCH ], - [ 53, Moves.FIRE_LASH ], - [ 60, Moves.LUNGE ], - [ 67, Moves.BURN_UP ], - ], - [Species.CLOBBOPUS]: [ - [ 1, Moves.LEER ], - [ 1, Moves.ROCK_SMASH ], - [ 5, Moves.FEINT ], - [ 10, Moves.BIND ], - [ 15, Moves.DETECT ], - [ 20, Moves.BRICK_BREAK ], - [ 25, Moves.BULK_UP ], - [ 30, Moves.SUBMISSION ], - [ 35, Moves.TAUNT ], - [ 40, Moves.REVERSAL ], - [ 45, Moves.SUPERPOWER ], - ], - [Species.GRAPPLOCT]: [ - [ EVOLVE_MOVE, Moves.OCTOLOCK ], - [ 1, Moves.BIND ], - [ 1, Moves.LEER ], - [ 1, Moves.OCTAZOOKA ], - [ 1, Moves.ROCK_SMASH ], - [ 1, Moves.FEINT ], - [ 15, Moves.DETECT ], - [ 20, Moves.BRICK_BREAK ], - [ 25, Moves.BULK_UP ], - [ 30, Moves.SUBMISSION ], - [ 35, Moves.TAUNT ], - [ 40, Moves.REVERSAL ], - [ 45, Moves.SUPERPOWER ], - [ 50, Moves.TOPSY_TURVY ], - ], - [Species.SINISTEA]: [ - [ 1, Moves.WITHDRAW ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.ABSORB ], // Custom - [ 6, Moves.AROMATIC_MIST ], - [ 12, Moves.MEGA_DRAIN ], - [ 24, Moves.SUCKER_PUNCH ], - [ 30, Moves.SWEET_SCENT ], - [ 36, Moves.GIGA_DRAIN ], - [ 42, Moves.NASTY_PLOT ], - [ 48, Moves.SHADOW_BALL ], - [ 54, Moves.MEMENTO ], - [ 60, Moves.SHELL_SMASH ], - ], - [Species.POLTEAGEIST]: [ - [ EVOLVE_MOVE, Moves.TEATIME ], - [ 1, Moves.ABSORB ], // Previous Stage Move, Custom - [ 1, Moves.MEGA_DRAIN ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.AROMATIC_MIST ], - [ 1, Moves.STRENGTH_SAP ], - [ 18, Moves.PROTECT ], - [ 24, Moves.SUCKER_PUNCH ], - [ 30, Moves.SWEET_SCENT ], - [ 36, Moves.GIGA_DRAIN ], - [ 42, Moves.NASTY_PLOT ], - [ 48, Moves.SHADOW_BALL ], - [ 54, Moves.MEMENTO ], - [ 60, Moves.SHELL_SMASH ], - [ 66, Moves.CURSE ], - ], - [Species.HATENNA]: [ - [ 1, Moves.CONFUSION ], - [ 1, Moves.PLAY_NICE ], - [ 5, Moves.LIFE_DEW ], - [ 10, Moves.DISARMING_VOICE ], - [ 15, Moves.AROMATIC_MIST ], - [ 20, Moves.PSYBEAM ], - [ 25, Moves.HEAL_PULSE ], - [ 30, Moves.DAZZLING_GLEAM ], - [ 35, Moves.CALM_MIND ], - [ 40, Moves.PSYCHIC ], - [ 45, Moves.HEALING_WISH ], - ], - [Species.HATTREM]: [ - [ EVOLVE_MOVE, Moves.BRUTAL_SWING ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.DISARMING_VOICE ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.LIFE_DEW ], - [ 15, Moves.AROMATIC_MIST ], - [ 20, Moves.PSYBEAM ], - [ 25, Moves.HEAL_PULSE ], - [ 30, Moves.DAZZLING_GLEAM ], - [ 37, Moves.CALM_MIND ], - [ 44, Moves.PSYCHIC ], - [ 51, Moves.HEALING_WISH ], - ], - [Species.HATTERENE]: [ - [ EVOLVE_MOVE, Moves.PSYCHO_CUT ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.DISARMING_VOICE ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.BRUTAL_SWING ], - [ 1, Moves.LIFE_DEW ], - [ 15, Moves.AROMATIC_MIST ], - [ 20, Moves.PSYBEAM ], - [ 25, Moves.HEAL_PULSE ], - [ 30, Moves.DAZZLING_GLEAM ], - [ 37, Moves.CALM_MIND ], - [ 46, Moves.PSYCHIC ], - [ 55, Moves.HEALING_WISH ], - [ 64, Moves.MAGIC_POWDER ], - ], - [Species.IMPIDIMP]: [ - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.CONFIDE ], - [ 4, Moves.BITE ], - [ 8, Moves.FLATTER ], - [ 12, Moves.FAKE_TEARS ], - [ 16, Moves.ASSURANCE ], - [ 20, Moves.SWAGGER ], - [ 24, Moves.SUCKER_PUNCH ], - [ 28, Moves.TORMENT ], - [ 33, Moves.DARK_PULSE ], - [ 36, Moves.NASTY_PLOT ], - [ 40, Moves.PLAY_ROUGH ], - [ 44, Moves.FOUL_PLAY ], - ], - [Species.MORGREM]: [ - [ EVOLVE_MOVE, Moves.FALSE_SURRENDER ], - [ 1, Moves.BITE ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.FLATTER ], - [ 1, Moves.CONFIDE ], - [ 12, Moves.FAKE_TEARS ], - [ 16, Moves.ASSURANCE ], - [ 20, Moves.SWAGGER ], - [ 24, Moves.SUCKER_PUNCH ], - [ 28, Moves.TORMENT ], - [ 35, Moves.DARK_PULSE ], - [ 40, Moves.NASTY_PLOT ], - [ 46, Moves.PLAY_ROUGH ], - [ 52, Moves.FOUL_PLAY ], - ], - [Species.GRIMMSNARL]: [ - [ EVOLVE_MOVE, Moves.SPIRIT_BREAK ], - [ 1, Moves.BITE ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.FLATTER ], - [ 1, Moves.BULK_UP ], - [ 1, Moves.CONFIDE ], - [ 1, Moves.FALSE_SURRENDER ], - [ 12, Moves.FAKE_TEARS ], - [ 16, Moves.ASSURANCE ], - [ 20, Moves.SWAGGER ], - [ 24, Moves.SUCKER_PUNCH ], - [ 28, Moves.TORMENT ], - [ 35, Moves.DARK_PULSE ], - [ 40, Moves.NASTY_PLOT ], - [ 48, Moves.PLAY_ROUGH ], - [ 56, Moves.FOUL_PLAY ], - [ 64, Moves.HAMMER_ARM ], - ], - [Species.OBSTAGOON]: [ - [ EVOLVE_MOVE, Moves.OBSTRUCT ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.PIN_MISSILE ], - [ 1, Moves.LEER ], - [ 1, Moves.SUBMISSION ], - [ 1, Moves.LICK ], - [ 1, Moves.CROSS_CHOP ], - [ 1, Moves.NIGHT_SLASH ], - [ 1, Moves.SWITCHEROO ], - [ 1, Moves.BABY_DOLL_EYES ], - [ 9, Moves.SNARL ], - [ 12, Moves.HEADBUTT ], - [ 15, Moves.HONE_CLAWS ], - [ 18, Moves.FURY_SWIPES ], - [ 23, Moves.REST ], - [ 28, Moves.TAKE_DOWN ], - [ 35, Moves.SCARY_FACE ], - [ 42, Moves.COUNTER ], - [ 49, Moves.TAUNT ], - [ 56, Moves.DOUBLE_EDGE ], - ], - [Species.PERRSERKER]: [ - [ EVOLVE_MOVE, Moves.IRON_HEAD ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.IRON_DEFENSE ], - [ 1, Moves.METAL_BURST ], - [ 1, Moves.HONE_CLAWS ], - [ 12, Moves.PAY_DAY ], - [ 16, Moves.METAL_CLAW ], - [ 20, Moves.TAUNT ], - [ 24, Moves.SWAGGER ], - [ 31, Moves.FURY_SWIPES ], - [ 36, Moves.SCREECH ], - [ 42, Moves.SLASH ], - [ 48, Moves.METAL_SOUND ], - [ 54, Moves.THRASH ], - ], - [Species.CURSOLA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.DISABLE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.PERISH_SONG ], - [ 1, Moves.ASTONISH ], - [ 15, Moves.SPITE ], - [ 20, Moves.ANCIENT_POWER ], - [ 25, Moves.HEX ], - [ 30, Moves.CURSE ], - [ 35, Moves.STRENGTH_SAP ], - [ 40, Moves.POWER_GEM ], - [ 45, Moves.NIGHT_SHADE ], - [ 50, Moves.GRUDGE ], - [ 55, Moves.MIRROR_COAT ], - ], - [Species.SIRFETCHD]: [ - [ EVOLVE_MOVE, Moves.IRON_DEFENSE ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.FIRST_IMPRESSION ], - [ 15, Moves.ROCK_SMASH ], - [ 20, Moves.BRUTAL_SWING ], - [ 25, Moves.DETECT ], - [ 30, Moves.KNOCK_OFF ], - [ 35, Moves.DEFOG ], - [ 40, Moves.BRICK_BREAK ], - [ 45, Moves.SWORDS_DANCE ], - [ 50, Moves.SLAM ], - [ 55, Moves.LEAF_BLADE ], - [ 60, Moves.FINAL_GAMBIT ], - [ 65, Moves.BRAVE_BIRD ], - [ 70, Moves.METEOR_ASSAULT ], - ], - [Species.MR_RIME]: [ - [ 1, Moves.POUND ], - [ 1, Moves.BARRIER ], // Previous Stage Move - [ 1, Moves.TICKLE ], // Previous Stage Move - [ 1, Moves.MIMIC ], - [ 1, Moves.LIGHT_SCREEN ], - [ 1, Moves.REFLECT ], - [ 1, Moves.PROTECT ], - [ 1, Moves.SAFEGUARD ], - [ 1, Moves.BATON_PASS ], - [ 1, Moves.ENCORE ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.ROLE_PLAY ], - [ 1, Moves.RECYCLE ], - [ 1, Moves.SLACK_OFF ], - [ 1, Moves.FAKE_TEARS ], - [ 1, Moves.BLOCK ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.ICE_SHARD ], - [ 1, Moves.AFTER_YOU ], - [ 1, Moves.MISTY_TERRAIN ], - [ 1, Moves.DAZZLING_GLEAM ], - [ 12, Moves.CONFUSION ], - [ 16, Moves.ALLY_SWITCH ], - [ 20, Moves.ICY_WIND ], - [ 24, Moves.DOUBLE_KICK ], - [ 28, Moves.PSYBEAM ], - [ 32, Moves.HYPNOSIS ], - [ 36, Moves.MIRROR_COAT ], - [ 40, Moves.SUCKER_PUNCH ], - [ 44, Moves.FREEZE_DRY ], - [ 48, Moves.PSYCHIC ], - [ 52, Moves.TEETER_DANCE ], - ], - [Species.RUNERIGUS]: [ - [ EVOLVE_MOVE, Moves.SHADOW_CLAW ], - [ 1, Moves.NIGHT_SHADE ], - [ 1, Moves.HAZE ], - [ 1, Moves.PROTECT ], - [ 1, Moves.SCARY_FACE ], - [ 1, Moves.ASTONISH ], - [ 12, Moves.DISABLE ], - [ 16, Moves.BRUTAL_SWING ], - [ 20, Moves.CRAFTY_SHIELD ], - [ 24, Moves.HEX ], - [ 28, Moves.MEAN_LOOK ], - [ 32, Moves.SLAM ], - [ 38, Moves.CURSE ], - [ 44, Moves.SHADOW_BALL ], - [ 50, Moves.EARTHQUAKE ], - [ 56, Moves.GUARD_SPLIT ], - [ 56, Moves.POWER_SPLIT ], - [ 62, Moves.DESTINY_BOND ], - ], - [Species.MILCERY]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.AROMATIC_MIST ], - [ 5, Moves.SWEET_KISS ], - [ 10, Moves.SWEET_SCENT ], - [ 15, Moves.DRAINING_KISS ], - [ 20, Moves.AROMATHERAPY ], - [ 25, Moves.ATTRACT ], - [ 30, Moves.ACID_ARMOR ], - [ 35, Moves.DAZZLING_GLEAM ], - [ 40, Moves.RECOVER ], - [ 45, Moves.MISTY_TERRAIN ], - [ 50, Moves.ENTRAINMENT ], - ], - [Species.ALCREMIE]: [ - [ EVOLVE_MOVE, Moves.DECORATE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.AROMATIC_MIST ], - [ 15, Moves.DRAINING_KISS ], - [ 20, Moves.AROMATHERAPY ], - [ 25, Moves.ATTRACT ], - [ 30, Moves.ACID_ARMOR ], - [ 35, Moves.DAZZLING_GLEAM ], - [ 40, Moves.RECOVER ], - [ 45, Moves.MISTY_TERRAIN ], - [ 50, Moves.ENTRAINMENT ], - ], - [Species.FALINKS]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.PROTECT ], - [ 5, Moves.ROCK_SMASH ], - [ 10, Moves.FOCUS_ENERGY ], - [ 15, Moves.HEADBUTT ], - [ 20, Moves.BULK_UP ], - [ 25, Moves.ENDURE ], - [ 30, Moves.REVERSAL ], - [ 35, Moves.FIRST_IMPRESSION ], - [ 40, Moves.NO_RETREAT ], - [ 45, Moves.IRON_DEFENSE ], - [ 50, Moves.CLOSE_COMBAT ], - [ 55, Moves.MEGAHORN ], - [ 60, Moves.COUNTER ], - ], - [Species.PINCURCHIN]: [ - [ 1, Moves.PECK ], - [ 1, Moves.THUNDER_SHOCK ], - [ 5, Moves.WATER_GUN ], - [ 10, Moves.CHARGE ], - [ 15, Moves.FURY_ATTACK ], - [ 20, Moves.SPARK ], - [ 25, Moves.BUBBLE_BEAM ], - [ 30, Moves.RECOVER ], - [ 35, Moves.CURSE ], - [ 40, Moves.ELECTRIC_TERRAIN ], - [ 45, Moves.POISON_JAB ], - [ 50, Moves.ZING_ZAP ], - [ 55, Moves.ACUPRESSURE ], - [ 60, Moves.DISCHARGE ], - ], - [Species.SNOM]: [ - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.STRUGGLE_BUG ], - ], - [Species.FROSMOTH]: [ - [ EVOLVE_MOVE, Moves.ICY_WIND ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.ATTRACT ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.STRUGGLE_BUG ], - [ 4, Moves.STUN_SPORE ], - [ 8, Moves.INFESTATION ], - [ 12, Moves.MIST ], - [ 16, Moves.DEFOG ], - [ 21, Moves.FEATHER_DANCE ], - [ 24, Moves.AURORA_BEAM ], - [ 28, Moves.SNOWSCAPE ], - [ 32, Moves.BUG_BUZZ ], - [ 36, Moves.AURORA_VEIL ], - [ 40, Moves.BLIZZARD ], - [ 44, Moves.TAILWIND ], - [ 48, Moves.WIDE_GUARD ], - [ 52, Moves.QUIVER_DANCE ], - ], - [Species.STONJOURNER]: [ - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.BLOCK ], - [ 6, Moves.ROCK_POLISH ], - [ 12, Moves.ROCK_TOMB ], - [ 18, Moves.GRAVITY ], - [ 24, Moves.STOMP ], - [ 30, Moves.STEALTH_ROCK ], - [ 36, Moves.ROCK_SLIDE ], - [ 42, Moves.BODY_SLAM ], - [ 48, Moves.WIDE_GUARD ], - [ 54, Moves.HEAVY_SLAM ], - [ 60, Moves.STONE_EDGE ], - [ 66, Moves.MEGA_KICK ], - ], - [Species.EISCUE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.POWDER_SNOW ], - [ 6, Moves.MIST ], - [ 12, Moves.WEATHER_BALL ], - [ 18, Moves.ICY_WIND ], - [ 24, Moves.HEADBUTT ], - [ 30, Moves.AMNESIA ], - [ 36, Moves.FREEZE_DRY ], - [ 42, Moves.SNOWSCAPE ], - [ 48, Moves.AURORA_VEIL ], - [ 54, Moves.SURF ], - [ 60, Moves.BLIZZARD ], - ], - [Species.INDEEDEE]: [ - [ 1, Moves.STORED_POWER ], - [ 1, Moves.PLAY_NICE ], - [ 5, Moves.ENCORE ], - [ 10, Moves.DISARMING_VOICE ], - [ 15, Moves.PSYBEAM ], - [ 20, Moves.HELPING_HAND ], - [ 25, Moves.AFTER_YOU ], - [ 30, Moves.HEALING_WISH ], - [ 35, Moves.PSYCHIC ], - [ 40, Moves.CALM_MIND ], - [ 45, Moves.POWER_SPLIT ], - [ 50, Moves.PSYCHIC_TERRAIN ], - [ 55, Moves.LAST_RESORT ], - ], - [Species.MORPEKO]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.THUNDER_SHOCK ], - [ 5, Moves.LEER ], - [ 10, Moves.POWER_TRIP ], - [ 15, Moves.QUICK_ATTACK ], - [ 20, Moves.FLATTER ], - [ 25, Moves.BITE ], - [ 30, Moves.SPARK ], - [ 35, Moves.TORMENT ], - [ 40, Moves.AGILITY ], - [ 45, Moves.BULLET_SEED ], - [ 50, Moves.CRUNCH ], - [ 55, Moves.AURA_WHEEL ], - [ 60, Moves.THRASH ], - ], - [Species.CUFANT]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 5, Moves.ROLLOUT ], - [ 10, Moves.ROCK_SMASH ], - [ 15, Moves.BULLDOZE ], - [ 20, Moves.STOMP ], - [ 25, Moves.IRON_DEFENSE ], - [ 30, Moves.DIG ], - [ 35, Moves.STRENGTH ], - [ 40, Moves.IRON_HEAD ], - [ 45, Moves.PLAY_ROUGH ], - [ 50, Moves.HIGH_HORSEPOWER ], - [ 55, Moves.SUPERPOWER ], - ], - [Species.COPPERAJAH]: [ - [ EVOLVE_MOVE, Moves.HEAVY_SLAM ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.ROLLOUT ], - [ 1, Moves.ROCK_SMASH ], - [ 15, Moves.BULLDOZE ], - [ 20, Moves.STOMP ], - [ 25, Moves.IRON_DEFENSE ], - [ 30, Moves.DIG ], - [ 37, Moves.STRENGTH ], - [ 44, Moves.IRON_HEAD ], - [ 51, Moves.PLAY_ROUGH ], - [ 58, Moves.HIGH_HORSEPOWER ], - [ 65, Moves.SUPERPOWER ], - ], - [Species.DRACOZOLT]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.THUNDER_SHOCK ], - [ 7, Moves.CHARGE ], - [ 14, Moves.AERIAL_ACE ], - [ 21, Moves.ANCIENT_POWER ], - [ 28, Moves.PLUCK ], - [ 35, Moves.DRAGON_TAIL ], - [ 42, Moves.STOMP ], - [ 49, Moves.SLAM ], - [ 56, Moves.DISCHARGE ], - [ 63, Moves.BOLT_BEAK ], - [ 70, Moves.DRAGON_PULSE ], - [ 77, Moves.DRAGON_RUSH ], - ], - [Species.ARCTOZOLT]: [ - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.POWDER_SNOW ], - [ 7, Moves.CHARGE ], - [ 14, Moves.ECHOED_VOICE ], - [ 21, Moves.ANCIENT_POWER ], - [ 28, Moves.PLUCK ], - [ 35, Moves.AVALANCHE ], - [ 42, Moves.FREEZE_DRY ], - [ 49, Moves.SLAM ], - [ 56, Moves.DISCHARGE ], - [ 63, Moves.BOLT_BEAK ], - [ 70, Moves.ICICLE_CRASH ], - [ 77, Moves.BLIZZARD ], - ], - [Species.DRACOVISH]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.WATER_GUN ], - [ 7, Moves.PROTECT ], - [ 14, Moves.BRUTAL_SWING ], - [ 21, Moves.ANCIENT_POWER ], - [ 28, Moves.BITE ], - [ 35, Moves.DRAGON_BREATH ], - [ 42, Moves.STOMP ], - [ 49, Moves.SUPER_FANG ], - [ 56, Moves.CRUNCH ], - [ 63, Moves.FISHIOUS_REND ], - [ 70, Moves.DRAGON_PULSE ], - [ 77, Moves.DRAGON_RUSH ], - ], - [Species.ARCTOVISH]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.POWDER_SNOW ], - [ 7, Moves.PROTECT ], - [ 14, Moves.ICY_WIND ], - [ 21, Moves.ANCIENT_POWER ], - [ 28, Moves.BITE ], - [ 35, Moves.AURORA_VEIL ], - [ 42, Moves.FREEZE_DRY ], - [ 49, Moves.SUPER_FANG ], - [ 56, Moves.CRUNCH ], - [ 63, Moves.FISHIOUS_REND ], - [ 70, Moves.ICICLE_CRASH ], - [ 77, Moves.BLIZZARD ], - ], - [Species.DURALUDON]: [ - [ 1, Moves.LEER ], - [ 1, Moves.METAL_CLAW ], - [ 6, Moves.ROCK_SMASH ], - [ 12, Moves.HONE_CLAWS ], - [ 18, Moves.METAL_SOUND ], - [ 24, Moves.BREAKING_SWIPE ], - [ 30, Moves.DRAGON_TAIL ], - [ 36, Moves.IRON_DEFENSE ], - [ 42, Moves.LASER_FOCUS ], - [ 48, Moves.DRAGON_CLAW ], - [ 54, Moves.FLASH_CANNON ], - [ 60, Moves.METAL_BURST ], - [ 66, Moves.HYPER_BEAM ], - ], - [Species.DREEPY]: [ - [ 1, Moves.BITE ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.INFESTATION ], - ], - [Species.DRAKLOAK]: [ - [ EVOLVE_MOVE, Moves.DRAGON_PULSE ], - [ 1, Moves.BITE ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.INFESTATION ], - [ 6, Moves.LOCK_ON ], - [ 12, Moves.ASSURANCE ], - [ 18, Moves.HEX ], - [ 24, Moves.AGILITY ], - [ 30, Moves.DOUBLE_HIT ], - [ 36, Moves.U_TURN ], - [ 42, Moves.DRAGON_DANCE ], - [ 48, Moves.PHANTOM_FORCE ], - [ 54, Moves.TAKE_DOWN ], - [ 61, Moves.DRAGON_RUSH ], - [ 66, Moves.DOUBLE_EDGE ], - [ 72, Moves.LAST_RESORT ], - ], - [Species.DRAGAPULT]: [ - [ EVOLVE_MOVE, Moves.DRAGON_DARTS ], - [ RELEARN_MOVE, Moves.DRAGON_PULSE ], // Previous Stage Move - [ 1, Moves.BITE ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.INFESTATION ], - [ 6, Moves.LOCK_ON ], - [ 12, Moves.ASSURANCE ], - [ 18, Moves.HEX ], - [ 24, Moves.AGILITY ], - [ 30, Moves.DOUBLE_HIT ], - [ 36, Moves.U_TURN ], - [ 42, Moves.DRAGON_DANCE ], - [ 48, Moves.PHANTOM_FORCE ], - [ 54, Moves.TAKE_DOWN ], - [ 63, Moves.DRAGON_RUSH ], - [ 70, Moves.DOUBLE_EDGE ], - [ 78, Moves.LAST_RESORT ], - ], - [Species.ZACIAN]: [ - [ 1, Moves.BITE ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.HOWL ], - [ 1, Moves.QUICK_GUARD ], - [ 1, Moves.SACRED_SWORD ], - [ 11, Moves.SLASH ], - [ 22, Moves.SWORDS_DANCE ], - [ 33, Moves.IRON_HEAD ], - [ 44, Moves.NOBLE_ROAR ], - [ 55, Moves.CRUNCH ], - [ 66, Moves.MOONBLAST ], - [ 77, Moves.CLOSE_COMBAT ], - [ 88, Moves.GIGA_IMPACT ], - ], - [Species.ZAMAZENTA]: [ - [ 1, Moves.BITE ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.HOWL ], - [ 1, Moves.WIDE_GUARD ], - [ 11, Moves.SLASH ], - [ 22, Moves.IRON_DEFENSE ], - [ 33, Moves.IRON_HEAD ], - [ 44, Moves.METAL_BURST ], - [ 55, Moves.CRUNCH ], - [ 66, Moves.MOONBLAST ], - [ 77, Moves.CLOSE_COMBAT ], - [ 88, Moves.GIGA_IMPACT ], - ], - [Species.ETERNATUS]: [ - [ 1, Moves.AGILITY ], - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.POISON_TAIL ], - [ 1, Moves.DRAGON_TAIL ], - [ 8, Moves.TOXIC ], - [ 16, Moves.VENOSHOCK ], - [ 24, Moves.DRAGON_DANCE ], - [ 32, Moves.CROSS_POISON ], - [ 40, Moves.DRAGON_PULSE ], - [ 48, Moves.FLAMETHROWER ], - [ 56, Moves.DYNAMAX_CANNON ], - [ 64, Moves.COSMIC_POWER ], - [ 72, Moves.RECOVER ], - [ 80, Moves.HYPER_BEAM ], - [ 88, Moves.OUTRAGE ], - ], - [Species.KUBFU]: [ - [ 1, Moves.LEER ], - [ 1, Moves.ROCK_SMASH ], - [ 4, Moves.ENDURE ], - [ 8, Moves.FOCUS_ENERGY ], - [ 12, Moves.AERIAL_ACE ], - [ 16, Moves.SCARY_FACE ], - [ 20, Moves.HEADBUTT ], - [ 24, Moves.BRICK_BREAK ], - [ 28, Moves.DETECT ], - [ 32, Moves.BULK_UP ], - [ 36, Moves.IRON_HEAD ], - [ 40, Moves.DYNAMIC_PUNCH ], - [ 44, Moves.COUNTER ], - [ 48, Moves.CLOSE_COMBAT ], - [ 52, Moves.FOCUS_PUNCH ], - ], - [Species.URSHIFU]: [ - [ EVOLVE_MOVE, Moves.WICKED_BLOW ], - [ 1, Moves.LEER ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.ENDURE ], - [ 1, Moves.ROCK_SMASH ], - [ 1, Moves.SUCKER_PUNCH ], - [ 12, Moves.AERIAL_ACE ], - [ 16, Moves.SCARY_FACE ], - [ 20, Moves.HEADBUTT ], - [ 24, Moves.BRICK_BREAK ], - [ 28, Moves.DETECT ], - [ 32, Moves.BULK_UP ], - [ 36, Moves.IRON_HEAD ], - [ 40, Moves.DYNAMIC_PUNCH ], - [ 44, Moves.COUNTER ], - [ 48, Moves.CLOSE_COMBAT ], - [ 52, Moves.FOCUS_PUNCH ], - ], - [Species.ZARUDE]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.BIND ], - [ 6, Moves.LEER ], - [ 12, Moves.VINE_WHIP ], - [ 18, Moves.GROWTH ], - [ 24, Moves.FURY_SWIPES ], - [ 30, Moves.SCARY_FACE ], - [ 36, Moves.GRASS_KNOT ], - [ 42, Moves.BITE ], - [ 48, Moves.U_TURN ], - [ 54, Moves.SWAGGER ], - [ 60, Moves.ENERGY_BALL ], - [ 66, Moves.SYNTHESIS ], - [ 72, Moves.HAMMER_ARM ], - [ 78, Moves.THRASH ], - [ 84, Moves.POWER_WHIP ], - [ 90, Moves.JUNGLE_HEALING ], - ], - [Species.REGIELEKI]: [ - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.RAPID_SPIN ], - [ 6, Moves.ELECTROWEB ], - [ 12, Moves.ANCIENT_POWER ], - [ 18, Moves.SHOCK_WAVE ], - [ 24, Moves.THUNDER_WAVE ], - [ 30, Moves.EXTREME_SPEED ], - [ 36, Moves.THUNDER_CAGE ], - [ 42, Moves.THUNDERBOLT ], - [ 48, Moves.MAGNET_RISE ], - [ 54, Moves.THRASH ], - [ 60, Moves.LOCK_ON ], - [ 66, Moves.ZAP_CANNON ], - [ 72, Moves.HYPER_BEAM ], - [ 78, Moves.EXPLOSION ], - ], - [Species.REGIDRAGO]: [ - [ 1, Moves.TWISTER ], - [ 6, Moves.BITE ], - [ 12, Moves.ANCIENT_POWER ], - [ 18, Moves.DRAGON_BREATH ], - [ 30, Moves.CRUNCH ], - [ 36, Moves.DRAGON_CLAW ], - [ 42, Moves.HAMMER_ARM ], - [ 48, Moves.DRAGON_DANCE ], - [ 54, Moves.THRASH ], - [ 60, Moves.FOCUS_ENERGY ], - [ 66, Moves.DRAGON_ENERGY ], - [ 72, Moves.HYPER_BEAM ], - [ 78, Moves.EXPLOSION ], - ], - [Species.GLASTRIER]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 6, Moves.DOUBLE_KICK ], - [ 12, Moves.AVALANCHE ], - [ 18, Moves.STOMP ], - [ 24, Moves.TORMENT ], - [ 30, Moves.MIST ], - [ 36, Moves.ICICLE_CRASH ], - [ 42, Moves.TAKE_DOWN ], - [ 48, Moves.IRON_DEFENSE ], - [ 54, Moves.THRASH ], - [ 60, Moves.TAUNT ], - [ 66, Moves.DOUBLE_EDGE ], - [ 72, Moves.SWORDS_DANCE ], - ], - [Species.SPECTRIER]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 6, Moves.DOUBLE_KICK ], - [ 12, Moves.HEX ], - [ 18, Moves.STOMP ], - [ 24, Moves.CONFUSE_RAY ], - [ 30, Moves.HAZE ], - [ 36, Moves.SHADOW_BALL ], - [ 42, Moves.TAKE_DOWN ], - [ 48, Moves.AGILITY ], - [ 54, Moves.THRASH ], - [ 60, Moves.DISABLE ], - [ 66, Moves.DOUBLE_EDGE ], - [ 72, Moves.NASTY_PLOT ], - ], - [Species.CALYREX]: [ - [ 1, Moves.POUND ], - [ 1, Moves.MEGA_DRAIN ], - [ 1, Moves.GROWTH ], - [ 1, Moves.CONFUSION ], - [ 8, Moves.LIFE_DEW ], - [ 16, Moves.GIGA_DRAIN ], - [ 24, Moves.PSYSHOCK ], - [ 32, Moves.HELPING_HAND ], - [ 40, Moves.GRASSY_TERRAIN ], - [ 40, Moves.PSYCHIC_TERRAIN ], - [ 48, Moves.ENERGY_BALL ], - [ 56, Moves.PSYCHIC ], - [ 64, Moves.LEECH_SEED ], - [ 72, Moves.HEAL_PULSE ], - [ 80, Moves.SOLAR_BEAM ], - [ 88, Moves.FUTURE_SIGHT ], - ], - [Species.WYRDEER]: [ - [ EVOLVE_MOVE, Moves.PSYSHIELD_BASH ], - [ 1, Moves.TACKLE ], - [ 1, Moves.ME_FIRST ], // Previous Stage Move - [ 3, Moves.LEER ], - [ 7, Moves.ASTONISH ], - [ 10, Moves.HYPNOSIS ], - [ 13, Moves.STOMP ], - [ 16, Moves.SAND_ATTACK ], - [ 21, Moves.TAKE_DOWN ], - [ 23, Moves.CONFUSE_RAY ], - [ 27, Moves.CALM_MIND ], - [ 32, Moves.ROLE_PLAY ], - [ 37, Moves.ZEN_HEADBUTT ], - [ 49, Moves.IMPRISON ], - [ 55, Moves.DOUBLE_EDGE ], - [ 62, Moves.MEGAHORN ], - ], - [Species.KLEAVOR]: [ - [ EVOLVE_MOVE, Moves.STONE_AXE ], - [ 1, Moves.WING_ATTACK ], // Previous Stage Move - [ 1, Moves.AIR_SLASH ], // Previous Stage Move - [ 1, Moves.LEER ], - [ 1, Moves.QUICK_ATTACK ], - [ 4, Moves.FURY_CUTTER ], - [ 8, Moves.FALSE_SWIPE ], - [ 12, Moves.SMACK_DOWN ], - [ 16, Moves.DOUBLE_TEAM ], - [ 20, Moves.DOUBLE_HIT ], - [ 24, Moves.SLASH ], - [ 28, Moves.FOCUS_ENERGY ], - [ 30, Moves.STEEL_WING ], // Custom - [ 32, Moves.AGILITY ], - [ 36, Moves.ROCK_SLIDE ], - [ 40, Moves.X_SCISSOR ], - [ 44, Moves.SWORDS_DANCE ], - ], - [Species.URSALUNA]: [ - [ EVOLVE_MOVE, Moves.HEADLONG_RUSH ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.LICK ], - [ 1, Moves.COVET ], - [ 1, Moves.FLING ], // Previous Stage Move - [ 1, Moves.BABY_DOLL_EYES ], // Previous Stage Move - [ 1, Moves.FAKE_TEARS ], - [ 1, Moves.CHARM ], // Previous Stage Moves - [ 8, Moves.FURY_SWIPES ], - [ 13, Moves.PAYBACK ], - [ 17, Moves.SWEET_SCENT ], - [ 22, Moves.SLASH ], - [ 25, Moves.PLAY_NICE ], - [ 29, Moves.PLAY_ROUGH ], - [ 35, Moves.SCARY_FACE ], - [ 41, Moves.REST ], - [ 41, Moves.SNORE ], - [ 48, Moves.HIGH_HORSEPOWER ], - [ 56, Moves.THRASH ], - [ 64, Moves.HAMMER_ARM ], - ], - [Species.BASCULEGION]: [ - [ RELEARN_MOVE, Moves.FINAL_GAMBIT ], // Previous Stage Move, White Stripe currently shares moveset with other forms - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.SHADOW_BALL ], - [ 1, Moves.PHANTOM_FORCE ], - [ 4, Moves.TACKLE ], - [ 8, Moves.FLAIL ], - [ 12, Moves.AQUA_JET ], - [ 16, Moves.BITE ], - [ 20, Moves.SCARY_FACE ], - [ 24, Moves.HEADBUTT ], - [ 28, Moves.SOAK ], - [ 32, Moves.CRUNCH ], - [ 36, Moves.TAKE_DOWN ], - [ 40, Moves.UPROAR ], - [ 44, Moves.WAVE_CRASH ], - [ 48, Moves.THRASH ], - [ 52, Moves.DOUBLE_EDGE ], - [ 56, Moves.HEAD_SMASH ], - ], - [Species.SNEASLER]: [ - [ EVOLVE_MOVE, Moves.DIRE_CLAW ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.ROCK_SMASH ], - [ 1, Moves.FLING ], - [ 6, Moves.TAUNT ], - [ 12, Moves.QUICK_ATTACK ], - [ 18, Moves.METAL_CLAW ], - [ 24, Moves.POISON_JAB ], - [ 30, Moves.BRICK_BREAK ], - [ 36, Moves.HONE_CLAWS ], - [ 42, Moves.SLASH ], - [ 48, Moves.AGILITY ], - [ 54, Moves.SCREECH ], - [ 60, Moves.CLOSE_COMBAT ], - ], - [Species.OVERQWIL]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.POISON_STING ], - [ 4, Moves.HARDEN ], - [ 8, Moves.BITE ], - [ 12, Moves.FELL_STINGER ], - [ 16, Moves.MINIMIZE ], - [ 20, Moves.SPIKES ], - [ 24, Moves.BRINE ], - [ 28, Moves.BARB_BARRAGE ], - [ 32, Moves.PIN_MISSILE ], - [ 36, Moves.TOXIC_SPIKES ], - [ 40, Moves.STOCKPILE ], - [ 40, Moves.SPIT_UP ], - [ 44, Moves.TOXIC ], - [ 48, Moves.CRUNCH ], - [ 52, Moves.ACUPRESSURE ], - [ 56, Moves.DESTINY_BOND ], - ], - [Species.ENAMORUS]: [ - [ 1, Moves.ASTONISH ], - [ 1, Moves.FAIRY_WIND ], - [ 5, Moves.TORMENT ], - [ 10, Moves.FLATTER ], - [ 15, Moves.TWISTER ], - [ 20, Moves.DRAINING_KISS ], - [ 25, Moves.IRON_DEFENSE ], - [ 30, Moves.IMPRISON ], - [ 35, Moves.MYSTICAL_FIRE ], - [ 40, Moves.DAZZLING_GLEAM ], - [ 45, Moves.EXTRASENSORY ], - [ 50, Moves.UPROAR ], - [ 55, Moves.SUPERPOWER ], - [ 60, Moves.HEALING_WISH ], - [ 65, Moves.MOONBLAST ], - [ 70, Moves.OUTRAGE ], - [ 75, Moves.SPRINGTIDE_STORM ], - ], - [Species.SPRIGATITO]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.LEAFAGE ], - [ 7, Moves.BITE ], - [ 10, Moves.HONE_CLAWS ], - [ 13, Moves.MAGICAL_LEAF ], - [ 15, Moves.QUICK_ATTACK ], - [ 17, Moves.SEED_BOMB ], - [ 21, Moves.U_TURN ], - [ 25, Moves.WORRY_SEED ], - [ 28, Moves.SLASH ], - [ 32, Moves.ENERGY_BALL ], - [ 36, Moves.PLAY_ROUGH ], - ], - [Species.FLORAGATO]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.LEAFAGE ], - [ 7, Moves.BITE ], - [ 10, Moves.HONE_CLAWS ], - [ 13, Moves.MAGICAL_LEAF ], - [ 15, Moves.QUICK_ATTACK ], - [ 20, Moves.SEED_BOMB ], - [ 24, Moves.U_TURN ], - [ 28, Moves.WORRY_SEED ], - [ 33, Moves.SLASH ], - [ 38, Moves.ENERGY_BALL ], - [ 42, Moves.PLAY_ROUGH ], - [ 46, Moves.LEAF_STORM ], - ], - [Species.MEOWSCARADA]: [ - [ EVOLVE_MOVE, Moves.FLOWER_TRICK ], - [ RELEARN_MOVE, Moves.DOUBLE_TEAM ], - [ RELEARN_MOVE, Moves.TRICK ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.LEAFAGE ], - [ 7, Moves.BITE ], - [ 10, Moves.HONE_CLAWS ], - [ 13, Moves.MAGICAL_LEAF ], - [ 15, Moves.QUICK_ATTACK ], - [ 20, Moves.SEED_BOMB ], - [ 24, Moves.U_TURN ], - [ 29, Moves.WORRY_SEED ], - [ 33, Moves.SLASH ], - [ 38, Moves.NIGHT_SLASH ], - [ 42, Moves.ENERGY_BALL ], - [ 47, Moves.PLAY_ROUGH ], - [ 52, Moves.KNOCK_OFF ], - [ 58, Moves.GRASSY_TERRAIN ], - [ 64, Moves.LEAF_STORM ], - ], - [Species.FUECOCO]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 7, Moves.ROUND ], - [ 12, Moves.BITE ], - [ 15, Moves.INCINERATE ], - [ 17, Moves.YAWN ], - [ 21, Moves.SNARL ], - [ 25, Moves.ROAR ], - [ 28, Moves.FLAMETHROWER ], - [ 32, Moves.HYPER_VOICE ], - [ 36, Moves.FIRE_BLAST ], - ], - [Species.CROCALOR]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 7, Moves.LICK ], - [ 10, Moves.ROUND ], - [ 12, Moves.BITE ], - [ 15, Moves.YAWN ], - [ 17, Moves.INCINERATE ], - [ 24, Moves.SNARL ], - [ 28, Moves.ROAR ], - [ 32, Moves.FLAMETHROWER ], - [ 38, Moves.HYPER_VOICE ], - [ 42, Moves.WILL_O_WISP ], - [ 47, Moves.FIRE_BLAST ], - ], - [Species.SKELEDIRGE]: [ - [ EVOLVE_MOVE, Moves.TORCH_SONG ], - [ RELEARN_MOVE, Moves.SING ], - [ RELEARN_MOVE, Moves.YAWN ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 7, Moves.LICK ], - [ 10, Moves.ROUND ], - [ 12, Moves.SCARY_FACE ], - [ 15, Moves.BITE ], - [ 17, Moves.INCINERATE ], - [ 24, Moves.SNARL ], - [ 28, Moves.ROAR ], - [ 32, Moves.FLAMETHROWER ], - [ 38, Moves.SHADOW_BALL ], - [ 42, Moves.HYPER_VOICE ], - [ 47, Moves.WILL_O_WISP ], - [ 47, Moves.HEX ], - [ 58, Moves.FIRE_BLAST ], - [ 64, Moves.OVERHEAT ], - ], - [Species.QUAXLY]: [ - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 7, Moves.WORK_UP ], - [ 10, Moves.WING_ATTACK ], - [ 13, Moves.AQUA_JET ], - [ 17, Moves.DOUBLE_HIT ], - [ 21, Moves.AQUA_CUTTER ], - [ 24, Moves.AIR_SLASH ], - [ 28, Moves.FOCUS_ENERGY ], - [ 31, Moves.ACROBATICS ], - [ 35, Moves.LIQUIDATION ], - ], - [Species.QUAXWELL]: [ - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.DOUBLE_HIT ], - [ 7, Moves.WORK_UP ], - [ 10, Moves.WING_ATTACK ], - [ 13, Moves.AQUA_JET ], - [ 17, Moves.WATER_PULSE ], - [ 19, Moves.LOW_SWEEP ], - [ 23, Moves.AQUA_CUTTER ], - [ 27, Moves.AIR_SLASH ], - [ 32, Moves.FOCUS_ENERGY ], - [ 38, Moves.ACROBATICS ], - [ 43, Moves.LIQUIDATION ], - [ 48, Moves.FEATHER_DANCE ], - ], - [Species.QUAQUAVAL]: [ - [ EVOLVE_MOVE, Moves.AQUA_STEP ], - [ RELEARN_MOVE, Moves.COUNTER ], - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.DOUBLE_HIT ], - [ 7, Moves.WORK_UP ], - [ 10, Moves.WING_ATTACK ], - [ 13, Moves.AQUA_JET ], - [ 17, Moves.WATER_PULSE ], - [ 17, Moves.LOW_SWEEP ], - [ 21, Moves.AQUA_CUTTER ], - [ 27, Moves.AIR_SLASH ], - [ 32, Moves.FOCUS_ENERGY ], - [ 38, Moves.MEGA_KICK ], - [ 43, Moves.ACROBATICS ], - [ 47, Moves.LIQUIDATION ], - [ 52, Moves.FEATHER_DANCE ], - [ 58, Moves.CLOSE_COMBAT ], - [ 64, Moves.WAVE_CRASH ], - ], - [Species.LECHONK]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 5, Moves.DISARMING_VOICE ], - [ 8, Moves.ECHOED_VOICE ], - [ 12, Moves.MUD_SHOT ], - [ 15, Moves.COVET ], - [ 17, Moves.DIG ], - [ 21, Moves.HEADBUTT ], - [ 24, Moves.YAWN ], - [ 27, Moves.TAKE_DOWN ], - [ 30, Moves.WORK_UP ], - [ 32, Moves.UPROAR ], - [ 35, Moves.DOUBLE_EDGE ], - ], - [Species.OINKOLOGNE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 5, Moves.DISARMING_VOICE ], - [ 8, Moves.ECHOED_VOICE ], - [ 12, Moves.MUD_SHOT ], - [ 15, Moves.COVET ], - [ 17, Moves.DIG ], - [ 23, Moves.HEADBUTT ], - [ 26, Moves.TAKE_DOWN ], - [ 27, Moves.YAWN ], - [ 34, Moves.WORK_UP ], - [ 38, Moves.UPROAR ], - [ 42, Moves.DOUBLE_EDGE ], - [ 48, Moves.EARTH_POWER ], - [ 54, Moves.BELCH ], - ], - [Species.TAROUNTULA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.STRING_SHOT ], - [ 5, Moves.STRUGGLE_BUG ], - [ 8, Moves.ASSURANCE ], - [ 11, Moves.FEINT ], - [ 14, Moves.BUG_BITE ], - [ 18, Moves.BLOCK ], - [ 22, Moves.COUNTER ], - [ 25, Moves.HEADBUTT ], - [ 29, Moves.STICKY_WEB ], - [ 33, Moves.GASTRO_ACID ], - [ 36, Moves.CIRCLE_THROW ], - [ 40, Moves.THROAT_CHOP ], - [ 44, Moves.SKITTER_SMACK ], - ], - [Species.SPIDOPS]: [ - [ EVOLVE_MOVE, Moves.SILK_TRAP ], - [ 1, Moves.TACKLE ], - [ 1, Moves.STRING_SHOT ], - [ 5, Moves.STRUGGLE_BUG ], - [ 8, Moves.ASSURANCE ], - [ 11, Moves.FEINT ], - [ 14, Moves.BUG_BITE ], - [ 19, Moves.BLOCK ], - [ 24, Moves.COUNTER ], - [ 28, Moves.HEADBUTT ], - [ 33, Moves.STICKY_WEB ], - [ 37, Moves.GASTRO_ACID ], - [ 41, Moves.CIRCLE_THROW ], - [ 45, Moves.THROAT_CHOP ], - [ 49, Moves.SKITTER_SMACK ], - ], - [Species.NYMBLE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 4, Moves.STRUGGLE_BUG ], - [ 6, Moves.ASTONISH ], - [ 9, Moves.ASSURANCE ], - [ 11, Moves.DOUBLE_KICK ], - [ 14, Moves.SCREECH ], - [ 18, Moves.ENDURE ], - [ 22, Moves.BUG_BITE ], - [ 26, Moves.FEINT ], - [ 30, Moves.AGILITY ], - [ 38, Moves.SUCKER_PUNCH ], - [ 41, Moves.FIRST_IMPRESSION ], - ], - [Species.LOKIX]: [ - [ EVOLVE_MOVE, Moves.LUNGE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.LOW_KICK ], - [ 1, Moves.DETECT ], - [ 4, Moves.STRUGGLE_BUG ], - [ 6, Moves.ASTONISH ], - [ 9, Moves.ASSURANCE ], - [ 11, Moves.DOUBLE_KICK ], - [ 14, Moves.SCREECH ], - [ 18, Moves.ENDURE ], - [ 22, Moves.BUG_BITE ], - [ 28, Moves.FEINT ], - [ 32, Moves.AGILITY ], - [ 36, Moves.THROAT_CHOP ], - [ 40, Moves.SUCKER_PUNCH ], - [ 44, Moves.FIRST_IMPRESSION ], - [ 48, Moves.BOUNCE ], - [ 53, Moves.AXE_KICK ], - ], - [Species.PAWMI]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 3, Moves.THUNDER_SHOCK ], - [ 6, Moves.QUICK_ATTACK ], - [ 8, Moves.CHARGE ], - [ 12, Moves.NUZZLE ], - [ 15, Moves.DIG ], - [ 19, Moves.BITE ], - [ 23, Moves.SPARK ], - [ 27, Moves.THUNDER_WAVE ], - [ 31, Moves.ENTRAINMENT ], - [ 35, Moves.SLAM ], - [ 38, Moves.DISCHARGE ], - [ 40, Moves.AGILITY ], - [ 44, Moves.WILD_CHARGE ], - ], - [Species.PAWMO]: [ - [ EVOLVE_MOVE, Moves.ARM_THRUST ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 3, Moves.THUNDER_SHOCK ], - [ 6, Moves.QUICK_ATTACK ], - [ 8, Moves.CHARGE ], - [ 12, Moves.NUZZLE ], - [ 15, Moves.DIG ], - [ 19, Moves.BITE ], - [ 23, Moves.SPARK ], - [ 27, Moves.THUNDER_WAVE ], - [ 32, Moves.SLAM ], - [ 38, Moves.ENTRAINMENT ], - [ 42, Moves.DISCHARGE ], - [ 46, Moves.AGILITY ], - [ 52, Moves.WILD_CHARGE ], - ], - [Species.PAWMOT]: [ - [ EVOLVE_MOVE, Moves.REVIVAL_BLESSING ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 1, Moves.WILD_CHARGE ], - [ 3, Moves.THUNDER_SHOCK ], - [ 6, Moves.QUICK_ATTACK ], - [ 8, Moves.CHARGE ], - [ 12, Moves.NUZZLE ], - [ 15, Moves.DIG ], - [ 19, Moves.BITE ], - [ 23, Moves.SPARK ], - [ 25, Moves.ARM_THRUST ], - [ 29, Moves.THUNDER_WAVE ], - [ 33, Moves.SLAM ], - [ 39, Moves.ENTRAINMENT ], - [ 44, Moves.CLOSE_COMBAT ], - [ 49, Moves.DISCHARGE ], - [ 54, Moves.AGILITY ], - [ 60, Moves.DOUBLE_SHOCK ], - ], - [Species.TANDEMAUS]: [ - [ 1, Moves.POUND ], - [ 1, Moves.BABY_DOLL_EYES ], - [ 5, Moves.ECHOED_VOICE ], - [ 8, Moves.HELPING_HAND ], - [ 11, Moves.SUPER_FANG ], - [ 14, Moves.DOUBLE_HIT ], - [ 18, Moves.BULLET_SEED ], - [ 22, Moves.ENCORE ], - [ 26, Moves.PLAY_ROUGH ], - [ 30, Moves.HYPER_VOICE ], - [ 33, Moves.CHARM ], - [ 37, Moves.BEAT_UP ], - [ 41, Moves.COPYCAT ], - [ 46, Moves.POPULATION_BOMB ], - ], - [Species.MAUSHOLD]: [ - [ 1, Moves.POUND ], - [ 1, Moves.FOLLOW_ME ], - [ 1, Moves.BABY_DOLL_EYES ], - [ 1, Moves.TIDY_UP ], - [ 5, Moves.ECHOED_VOICE ], - [ 8, Moves.HELPING_HAND ], - [ 11, Moves.SUPER_FANG ], - [ 14, Moves.DOUBLE_HIT ], - [ 18, Moves.BULLET_SEED ], - [ 22, Moves.ENCORE ], - [ 29, Moves.PLAY_ROUGH ], - [ 33, Moves.HYPER_VOICE ], - [ 37, Moves.CHARM ], - [ 41, Moves.BEAT_UP ], - [ 46, Moves.COPYCAT ], - [ 53, Moves.POPULATION_BOMB ], - ], - [Species.FIDOUGH]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 3, Moves.LICK ], - [ 6, Moves.TAIL_WHIP ], - [ 8, Moves.COVET ], - [ 11, Moves.BITE ], - [ 15, Moves.BABY_DOLL_EYES ], - [ 18, Moves.PLAY_ROUGH ], - [ 22, Moves.WORK_UP ], - [ 26, Moves.BATON_PASS ], - [ 30, Moves.ROAR ], - [ 33, Moves.DOUBLE_EDGE ], - [ 36, Moves.CHARM ], - [ 40, Moves.CRUNCH ], - [ 45, Moves.LAST_RESORT ], - ], - [Species.DACHSBUN]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 3, Moves.LICK ], - [ 6, Moves.TAIL_WHIP ], - [ 8, Moves.COVET ], - [ 11, Moves.BITE ], - [ 15, Moves.BABY_DOLL_EYES ], - [ 18, Moves.PLAY_ROUGH ], - [ 22, Moves.WORK_UP ], - [ 29, Moves.BATON_PASS ], - [ 33, Moves.ROAR ], - [ 38, Moves.DOUBLE_EDGE ], - [ 42, Moves.CHARM ], - [ 47, Moves.CRUNCH ], - [ 53, Moves.LAST_RESORT ], - ], - [Species.SMOLIV]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.SWEET_SCENT ], - [ 5, Moves.ABSORB ], - [ 7, Moves.GROWTH ], - [ 10, Moves.RAZOR_LEAF ], - [ 13, Moves.HELPING_HAND ], - [ 16, Moves.FLAIL ], - [ 20, Moves.MEGA_DRAIN ], - [ 23, Moves.GRASSY_TERRAIN ], - [ 27, Moves.SEED_BOMB ], - [ 30, Moves.ENERGY_BALL ], - [ 34, Moves.LEECH_SEED ], - [ 38, Moves.TERRAIN_PULSE ], - ], - [Species.DOLLIV]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.SWEET_SCENT ], - [ 5, Moves.ABSORB ], - [ 7, Moves.GROWTH ], - [ 10, Moves.RAZOR_LEAF ], - [ 13, Moves.HELPING_HAND ], - [ 16, Moves.FLAIL ], - [ 20, Moves.MEGA_DRAIN ], - [ 23, Moves.GRASSY_TERRAIN ], - [ 29, Moves.SEED_BOMB ], - [ 34, Moves.ENERGY_BALL ], - [ 37, Moves.LEECH_SEED ], - [ 42, Moves.TERRAIN_PULSE ], - ], - [Species.ARBOLIVA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.SAFEGUARD ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.MIRROR_COAT ], - [ 5, Moves.ABSORB ], - [ 7, Moves.GROWTH ], - [ 10, Moves.RAZOR_LEAF ], - [ 13, Moves.HELPING_HAND ], - [ 16, Moves.FLAIL ], - [ 20, Moves.MEGA_DRAIN ], - [ 23, Moves.GRASSY_TERRAIN ], - [ 29, Moves.SEED_BOMB ], - [ 34, Moves.ENERGY_BALL ], - [ 39, Moves.LEECH_SEED ], - [ 46, Moves.TERRAIN_PULSE ], - [ 52, Moves.PETAL_BLIZZARD ], - [ 58, Moves.PETAL_DANCE ], - ], - [Species.SQUAWKABILLY]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 1, Moves.MIMIC ], - [ 6, Moves.QUICK_ATTACK ], - [ 10, Moves.TORMENT ], - [ 13, Moves.AERIAL_ACE ], - [ 17, Moves.FURY_ATTACK ], - [ 20, Moves.TAUNT ], - [ 24, Moves.UPROAR ], - [ 27, Moves.COPYCAT ], - [ 30, Moves.FLY ], - [ 34, Moves.FACADE ], - [ 38, Moves.SWAGGER ], - [ 42, Moves.BRAVE_BIRD ], - [ 47, Moves.ROOST ], - [ 52, Moves.REVERSAL ], - ], - [Species.NACLI]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 5, Moves.ROCK_THROW ], - [ 7, Moves.MUD_SHOT ], - [ 10, Moves.SMACK_DOWN ], - [ 13, Moves.ROCK_POLISH ], - [ 16, Moves.HEADBUTT ], - [ 20, Moves.IRON_DEFENSE ], - [ 25, Moves.RECOVER ], - [ 30, Moves.ROCK_SLIDE ], - [ 33, Moves.STEALTH_ROCK ], - [ 35, Moves.HEAVY_SLAM ], - [ 40, Moves.EARTHQUAKE ], - [ 45, Moves.STONE_EDGE ], - ], - [Species.NACLSTACK]: [ - [ EVOLVE_MOVE, Moves.SALT_CURE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 5, Moves.ROCK_THROW ], - [ 7, Moves.MUD_SHOT ], - [ 10, Moves.SMACK_DOWN ], - [ 13, Moves.ROCK_POLISH ], - [ 16, Moves.HEADBUTT ], - [ 20, Moves.IRON_DEFENSE ], - [ 30, Moves.RECOVER ], - [ 34, Moves.ROCK_SLIDE ], - [ 38, Moves.STEALTH_ROCK ], - [ 41, Moves.HEAVY_SLAM ], - [ 45, Moves.EARTHQUAKE ], - [ 51, Moves.STONE_EDGE ], - ], - [Species.GARGANACL]: [ - [ EVOLVE_MOVE, Moves.HAMMER_ARM ], - [ RELEARN_MOVE, Moves.IRON_DEFENSE ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.BLOCK ], - [ 1, Moves.ROCK_BLAST ], - [ 1, Moves.SMACK_DOWN ], // Previous Stage Move - [ 1, Moves.WIDE_GUARD ], - [ 5, Moves.ROCK_THROW ], - [ 7, Moves.MUD_SHOT ], - [ 10, Moves.ROCK_TOMB ], - [ 13, Moves.ROCK_POLISH ], - [ 16, Moves.HEADBUTT ], - [ 24, Moves.SALT_CURE ], - [ 30, Moves.RECOVER ], - [ 34, Moves.ROCK_SLIDE ], - [ 40, Moves.STEALTH_ROCK ], - [ 44, Moves.HEAVY_SLAM ], - [ 49, Moves.EARTHQUAKE ], - [ 54, Moves.STONE_EDGE ], - [ 60, Moves.EXPLOSION ], - ], - [Species.CHARCADET]: [ - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 1, Moves.ASTONISH ], - [ 8, Moves.CLEAR_SMOG ], - [ 12, Moves.FIRE_SPIN ], - [ 16, Moves.WILL_O_WISP ], - [ 20, Moves.NIGHT_SHADE ], - [ 24, Moves.FLAME_CHARGE ], - [ 28, Moves.INCINERATE ], - [ 32, Moves.LAVA_PLUME ], - ], - [Species.ARMAROUGE]: [ - [ EVOLVE_MOVE, Moves.PSYSHOCK ], - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.WIDE_GUARD ], - [ 1, Moves.MYSTICAL_FIRE ], - [ 8, Moves.CLEAR_SMOG ], - [ 12, Moves.FIRE_SPIN ], - [ 16, Moves.WILL_O_WISP ], - [ 20, Moves.NIGHT_SHADE ], - [ 24, Moves.FLAME_CHARGE ], - [ 28, Moves.INCINERATE ], - [ 32, Moves.LAVA_PLUME ], - [ 37, Moves.CALM_MIND ], - [ 42, Moves.ALLY_SWITCH ], - [ 48, Moves.FLAMETHROWER ], - [ 56, Moves.EXPANDING_FORCE ], - [ 62, Moves.ARMOR_CANNON ], - ], - [Species.CERULEDGE]: [ - [ EVOLVE_MOVE, Moves.SHADOW_CLAW ], - [ RELEARN_MOVE, Moves.NIGHT_SLASH ], - [ RELEARN_MOVE, Moves.SHADOW_SNEAK ], - [ RELEARN_MOVE, Moves.QUICK_GUARD ], - [ RELEARN_MOVE, Moves.SOLAR_BLADE ], - [ 1, Moves.EMBER ], - [ 1, Moves.LEER ], - [ 1, Moves.ASTONISH ], - [ 8, Moves.CLEAR_SMOG ], - [ 12, Moves.FIRE_SPIN ], - [ 16, Moves.WILL_O_WISP ], - [ 20, Moves.NIGHT_SHADE ], - [ 24, Moves.FLAME_CHARGE ], - [ 28, Moves.INCINERATE ], - [ 32, Moves.LAVA_PLUME ], - [ 37, Moves.SWORDS_DANCE ], - [ 42, Moves.ALLY_SWITCH ], - [ 48, Moves.BITTER_BLADE ], - [ 56, Moves.PSYCHO_CUT ], - [ 62, Moves.FLARE_BLITZ ], - ], - [Species.TADBULB]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.MUD_SLAP ], - [ 7, Moves.THUNDER_SHOCK ], - [ 11, Moves.WATER_GUN ], - [ 17, Moves.CHARGE ], - [ 21, Moves.SPARK ], - [ 24, Moves.MUD_SHOT ], - [ 25, Moves.FLAIL ], - [ 32, Moves.DISCHARGE ], - [ 36, Moves.WEATHER_BALL ], - [ 40, Moves.ELECTRIC_TERRAIN ], - [ 45, Moves.SUCKER_PUNCH ], - [ 50, Moves.ZAP_CANNON ], - ], - [Species.BELLIBOLT]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.SLACK_OFF ], - [ 7, Moves.THUNDER_SHOCK ], - [ 11, Moves.WATER_GUN ], - [ 17, Moves.CHARGE ], - [ 21, Moves.SPARK ], - [ 24, Moves.MUD_SHOT ], - [ 25, Moves.FLAIL ], - [ 32, Moves.DISCHARGE ], - [ 36, Moves.WEATHER_BALL ], - [ 40, Moves.ELECTRIC_TERRAIN ], - [ 45, Moves.SUCKER_PUNCH ], - [ 50, Moves.ZAP_CANNON ], - ], - [Species.WATTREL]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 4, Moves.THUNDER_SHOCK ], - [ 7, Moves.QUICK_ATTACK ], - [ 11, Moves.PLUCK ], - [ 15, Moves.SPARK ], - [ 19, Moves.UPROAR ], - [ 23, Moves.ROOST ], - [ 27, Moves.DUAL_WINGBEAT ], - [ 32, Moves.AGILITY ], - [ 37, Moves.VOLT_SWITCH ], - [ 43, Moves.DISCHARGE ], - ], - [Species.KILOWATTREL]: [ - [ EVOLVE_MOVE, Moves.ELECTRO_BALL ], - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 4, Moves.THUNDER_SHOCK ], - [ 7, Moves.QUICK_ATTACK ], - [ 11, Moves.PLUCK ], - [ 15, Moves.SPARK ], - [ 19, Moves.UPROAR ], - [ 24, Moves.ROOST ], - [ 30, Moves.DUAL_WINGBEAT ], - [ 36, Moves.AGILITY ], - [ 43, Moves.VOLT_SWITCH ], - [ 48, Moves.DISCHARGE ], - [ 55, Moves.HURRICANE ], - ], - [Species.MASCHIFF]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.SCARY_FACE ], - [ 4, Moves.LICK ], - [ 7, Moves.SNARL ], - [ 10, Moves.HONE_CLAWS ], - [ 14, Moves.BITE ], - [ 18, Moves.ROAR ], - [ 22, Moves.HEADBUTT ], - [ 26, Moves.PAYBACK ], - [ 31, Moves.CRUNCH ], - [ 35, Moves.SWAGGER ], - [ 39, Moves.REVERSAL ], - [ 43, Moves.JAW_LOCK ], - [ 49, Moves.DOUBLE_EDGE ], - ], - [Species.MABOSSTIFF]: [ - [ EVOLVE_MOVE, Moves.COMEUPPANCE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.SCARY_FACE ], - [ 4, Moves.LICK ], - [ 7, Moves.SNARL ], - [ 10, Moves.HONE_CLAWS ], - [ 14, Moves.BITE ], - [ 18, Moves.ROAR ], - [ 22, Moves.HEADBUTT ], - [ 26, Moves.PAYBACK ], - [ 34, Moves.CRUNCH ], - [ 39, Moves.SWAGGER ], - [ 43, Moves.REVERSAL ], - [ 48, Moves.JAW_LOCK ], - [ 55, Moves.DOUBLE_EDGE ], - [ 60, Moves.OUTRAGE ], - ], - [Species.SHROODLE]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 5, Moves.ACID_SPRAY ], - [ 8, Moves.BITE ], - [ 8, Moves.FURY_SWIPES ], - [ 11, Moves.SWITCHEROO ], - [ 14, Moves.POISON_FANG ], - [ 18, Moves.FLATTER ], - [ 21, Moves.SLASH ], - [ 25, Moves.U_TURN ], - [ 29, Moves.POISON_JAB ], - [ 33, Moves.TAUNT ], - [ 36, Moves.SUBSTITUTE ], - [ 40, Moves.KNOCK_OFF ], - [ 45, Moves.GUNK_SHOT ], - ], - [Species.GRAFAIAI]: [ - [ EVOLVE_MOVE, Moves.DOODLE ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.BITE ], // Previous Stage Move - [ 5, Moves.ACID_SPRAY ], - [ 8, Moves.FURY_SWIPES ], - [ 11, Moves.SWITCHEROO ], - [ 14, Moves.POISON_FANG ], - [ 18, Moves.FLATTER ], - [ 21, Moves.SLASH ], - [ 25, Moves.U_TURN ], - [ 33, Moves.POISON_JAB ], - [ 37, Moves.TAUNT ], - [ 40, Moves.SUBSTITUTE ], - [ 45, Moves.KNOCK_OFF ], - [ 51, Moves.GUNK_SHOT ], - ], - [Species.BRAMBLIN]: [ - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.ROLLOUT ], - [ 1, Moves.ASTONISH ], - [ 5, Moves.ABSORB ], - [ 9, Moves.RAPID_SPIN ], - [ 13, Moves.BULLET_SEED ], - [ 17, Moves.INFESTATION ], - [ 21, Moves.HEX ], - [ 25, Moves.MEGA_DRAIN ], - [ 29, Moves.DISABLE ], - [ 35, Moves.PHANTOM_FORCE ], - [ 40, Moves.GIGA_DRAIN ], - [ 45, Moves.CURSE ], - [ 50, Moves.PAIN_SPLIT ], - [ 55, Moves.POWER_WHIP ], - ], - [Species.BRAMBLEGHAST]: [ - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.ROLLOUT ], - [ 1, Moves.ASTONISH ], - [ 5, Moves.ABSORB ], - [ 9, Moves.RAPID_SPIN ], - [ 13, Moves.BULLET_SEED ], - [ 17, Moves.INFESTATION ], - [ 21, Moves.HEX ], - [ 25, Moves.MEGA_DRAIN ], - [ 29, Moves.DISABLE ], - [ 35, Moves.PHANTOM_FORCE ], - [ 40, Moves.GIGA_DRAIN ], - [ 45, Moves.CURSE ], - [ 50, Moves.PAIN_SPLIT ], - [ 55, Moves.POWER_WHIP ], - ], - [Species.TOEDSCOOL]: [ - [ 1, Moves.WRAP ], - [ 1, Moves.MUD_SLAP ], - [ 4, Moves.ABSORB ], - [ 8, Moves.POISON_POWDER ], - [ 8, Moves.STUN_SPORE ], - [ 12, Moves.SUPERSONIC ], - [ 15, Moves.TACKLE ], - [ 16, Moves.MEGA_DRAIN ], - [ 20, Moves.SCREECH ], - [ 24, Moves.MUD_SHOT ], - [ 28, Moves.HEX ], - [ 32, Moves.SEED_BOMB ], - [ 36, Moves.SPORE ], - [ 40, Moves.GROWTH ], - [ 44, Moves.GIGA_DRAIN ], - [ 48, Moves.EARTH_POWER ], - [ 52, Moves.POWER_WHIP ], - ], - [Species.TOEDSCRUEL]: [ - [ 1, Moves.WRAP ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.REFLECT_TYPE ], - [ 4, Moves.ABSORB ], - [ 8, Moves.POISON_POWDER ], - [ 8, Moves.STUN_SPORE ], - [ 12, Moves.SUPERSONIC ], - [ 15, Moves.TACKLE ], - [ 16, Moves.MEGA_DRAIN ], - [ 20, Moves.SCREECH ], - [ 24, Moves.MUD_SHOT ], - [ 28, Moves.HEX ], - [ 34, Moves.SEED_BOMB ], - [ 40, Moves.SPORE ], - [ 44, Moves.GROWTH ], - [ 48, Moves.GIGA_DRAIN ], - [ 54, Moves.EARTH_POWER ], - [ 58, Moves.POWER_WHIP ], - ], - [Species.KLAWF]: [ - [ 1, Moves.ROCK_THROW ], - [ 6, Moves.HARDEN ], - [ 9, Moves.ROCK_SMASH ], - [ 13, Moves.ROCK_TOMB ], - [ 17, Moves.METAL_CLAW ], - [ 21, Moves.PROTECT ], - [ 24, Moves.ROCK_BLAST ], - [ 29, Moves.X_SCISSOR ], - [ 33, Moves.SWORDS_DANCE ], - [ 37, Moves.FLAIL ], - [ 42, Moves.ROCK_SLIDE ], - [ 47, Moves.HIGH_HORSEPOWER ], - [ 51, Moves.IRON_DEFENSE ], - [ 56, Moves.GUILLOTINE ], - ], - [Species.CAPSAKID]: [ - [ 1, Moves.LEER ], - [ 1, Moves.LEAFAGE ], - [ 4, Moves.BITE ], - [ 10, Moves.GROWTH ], - [ 13, Moves.RAZOR_LEAF ], - [ 17, Moves.SUNNY_DAY ], - [ 21, Moves.BULLET_SEED ], - [ 24, Moves.HEADBUTT ], - [ 28, Moves.ZEN_HEADBUTT ], - [ 38, Moves.CRUNCH ], - [ 44, Moves.SEED_BOMB ], - [ 48, Moves.SOLAR_BEAM ], - ], - [Species.SCOVILLAIN]: [ - [ EVOLVE_MOVE, Moves.FLAMETHROWER ], - [ EVOLVE_MOVE, Moves.SPICY_EXTRACT ], - [ 1, Moves.LEER ], - [ 1, Moves.FIRE_FANG ], - [ 1, Moves.LEAFAGE ], - [ 4, Moves.BITE ], - [ 10, Moves.GROWTH ], - [ 13, Moves.RAZOR_LEAF ], - [ 17, Moves.SUNNY_DAY ], - [ 21, Moves.BULLET_SEED ], - [ 24, Moves.HEADBUTT ], - [ 28, Moves.ZEN_HEADBUTT ], - [ 33, Moves.WORRY_SEED ], - [ 38, Moves.CRUNCH ], - [ 44, Moves.SEED_BOMB ], - [ 48, Moves.SOLAR_BEAM ], - [ 48, Moves.OVERHEAT ], - ], - [Species.RELLOR]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.DEFENSE_CURL ], - [ 4, Moves.SAND_ATTACK ], - [ 7, Moves.STRUGGLE_BUG ], - [ 11, Moves.ROLLOUT ], - [ 15, Moves.MUD_SHOT ], - [ 20, Moves.BUG_BITE ], - [ 24, Moves.TAKE_DOWN ], - [ 29, Moves.DIG ], - [ 35, Moves.LUNGE ], - ], - [Species.RABSCA]: [ - [ EVOLVE_MOVE, Moves.REVIVAL_BLESSING ], - [ RELEARN_MOVE, Moves.SAFEGUARD ], - [ RELEARN_MOVE, Moves.PSYCH_UP ], - [ 1, Moves.TACKLE ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.MUD_SHOT ], // Previous Stage Move - [ 1, Moves.DIG ], // Previous Stage Move - [ 4, Moves.SAND_ATTACK ], - [ 7, Moves.STRUGGLE_BUG ], - [ 11, Moves.ROLLOUT ], - [ 15, Moves.PSYBEAM ], - [ 20, Moves.BUG_BITE ], - [ 24, Moves.TAKE_DOWN ], - [ 29, Moves.EXTRASENSORY ], - [ 35, Moves.LUNGE ], - [ 40, Moves.POWER_SWAP ], - [ 40, Moves.GUARD_SWAP ], - [ 40, Moves.SPEED_SWAP ], - [ 45, Moves.BUG_BUZZ ], - [ 50, Moves.PSYCHIC ], - ], - [Species.FLITTLE]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 5, Moves.CONFUSION ], - [ 8, Moves.BABY_DOLL_EYES ], - [ 11, Moves.DISARMING_VOICE ], - [ 15, Moves.QUICK_ATTACK ], - [ 19, Moves.PSYBEAM ], - [ 24, Moves.PLUCK ], - [ 29, Moves.AGILITY ], - [ 34, Moves.UPROAR ], - ], - [Species.ESPATHRA]: [ - [ EVOLVE_MOVE, Moves.LUMINA_CRASH ], - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 1, Moves.DRILL_PECK ], - [ 1, Moves.FEATHER_DANCE ], - [ 5, Moves.CONFUSION ], - [ 8, Moves.BABY_DOLL_EYES ], - [ 11, Moves.DISARMING_VOICE ], - [ 15, Moves.QUICK_ATTACK ], - [ 19, Moves.PSYBEAM ], - [ 24, Moves.PLUCK ], - [ 29, Moves.AGILITY ], - [ 34, Moves.UPROAR ], - [ 43, Moves.DAZZLING_GLEAM ], - [ 49, Moves.PSYCHIC ], - [ 54, Moves.LAST_RESORT ], - ], - [Species.TINKATINK]: [ - [ 1, Moves.ASTONISH ], - [ 1, Moves.FAIRY_WIND ], - [ 5, Moves.BABY_DOLL_EYES ], - [ 8, Moves.METAL_CLAW ], - [ 11, Moves.COVET ], - [ 14, Moves.ROCK_SMASH ], - [ 17, Moves.DRAINING_KISS ], - [ 21, Moves.SWEET_KISS ], - [ 24, Moves.BRUTAL_SWING ], - [ 27, Moves.SLAM ], - [ 31, Moves.FLASH_CANNON ], - [ 35, Moves.PLAY_ROUGH ], - [ 39, Moves.FAKE_OUT ], - [ 43, Moves.FLATTER ], - [ 47, Moves.SKITTER_SMACK ], - [ 52, Moves.KNOCK_OFF ], - ], - [Species.TINKATUFF]: [ - [ 1, Moves.ASTONISH ], - [ 1, Moves.FAIRY_WIND ], - [ 5, Moves.BABY_DOLL_EYES ], - [ 8, Moves.METAL_CLAW ], - [ 11, Moves.COVET ], - [ 14, Moves.ROCK_SMASH ], - [ 17, Moves.DRAINING_KISS ], - [ 21, Moves.SWEET_KISS ], - [ 24, Moves.BRUTAL_SWING ], - [ 27, Moves.SLAM ], - [ 31, Moves.FLASH_CANNON ], - [ 35, Moves.PLAY_ROUGH ], - [ 39, Moves.FAKE_OUT ], - [ 43, Moves.FLATTER ], - [ 47, Moves.SKITTER_SMACK ], - [ 52, Moves.KNOCK_OFF ], - ], - [Species.TINKATON]: [ - [ EVOLVE_MOVE, Moves.GIGATON_HAMMER ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.FAIRY_WIND ], - [ 5, Moves.BABY_DOLL_EYES ], - [ 8, Moves.METAL_CLAW ], - [ 11, Moves.COVET ], - [ 14, Moves.ROCK_SMASH ], - [ 17, Moves.DRAINING_KISS ], - [ 21, Moves.SWEET_KISS ], - [ 24, Moves.BRUTAL_SWING ], - [ 27, Moves.SLAM ], - [ 31, Moves.FLASH_CANNON ], - [ 35, Moves.PLAY_ROUGH ], - [ 39, Moves.FAKE_OUT ], - [ 43, Moves.FLATTER ], - [ 47, Moves.SKITTER_SMACK ], - [ 52, Moves.KNOCK_OFF ], - ], - [Species.WIGLETT]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.WATER_GUN ], - [ 4, Moves.MUD_SLAP ], - [ 8, Moves.WRAP ], - [ 12, Moves.AQUA_JET ], - [ 20, Moves.SLAM ], - [ 20, Moves.WATER_PULSE ], - [ 24, Moves.HEADBUTT ], - [ 28, Moves.DIG ], - [ 32, Moves.SUCKER_PUNCH ], - [ 36, Moves.THROAT_CHOP ], - [ 40, Moves.LIQUIDATION ], - ], - [Species.WUGTRIO]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.WRAP ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.MUD_SLAP ], - [ 12, Moves.AQUA_JET ], - [ 16, Moves.SLAM ], - [ 20, Moves.WATER_PULSE ], - [ 24, Moves.HEADBUTT ], - [ 30, Moves.TRIPLE_DIVE ], - [ 36, Moves.DIG ], - [ 42, Moves.SUCKER_PUNCH ], - [ 48, Moves.THROAT_CHOP ], - [ 54, Moves.LIQUIDATION ], - ], - [Species.BOMBIRDIER]: [ - [ 1, Moves.WING_ATTACK ], - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 1, Moves.MEMENTO ], - [ 1, Moves.HONE_CLAWS ], - [ 7, Moves.THIEF ], - [ 11, Moves.ROCK_THROW ], - [ 16, Moves.WHIRLWIND ], - [ 20, Moves.PLUCK ], - [ 24, Moves.TORMENT ], - [ 29, Moves.ROCK_TOMB ], - [ 36, Moves.PAYBACK ], - [ 42, Moves.DUAL_WINGBEAT ], - [ 47, Moves.ROCK_SLIDE ], - [ 53, Moves.KNOCK_OFF ], - [ 60, Moves.PARTING_SHOT ], - ], - [Species.FINIZEN]: [ - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.WATER_GUN ], - [ 7, Moves.ASTONISH ], - [ 10, Moves.FOCUS_ENERGY ], - [ 13, Moves.AQUA_JET ], - [ 17, Moves.DOUBLE_HIT ], - [ 21, Moves.DIVE ], - [ 25, Moves.CHARM ], - [ 29, Moves.ACROBATICS ], - [ 34, Moves.ENCORE ], - [ 39, Moves.AQUA_TAIL ], - [ 44, Moves.MIST ], - [ 50, Moves.HYDRO_PUMP ], - ], - [Species.PALAFIN]: [ - [ EVOLVE_MOVE, Moves.FLIP_TURN ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.JET_PUNCH ], - [ 7, Moves.ASTONISH ], - [ 10, Moves.FOCUS_ENERGY ], - [ 13, Moves.AQUA_JET ], - [ 17, Moves.DOUBLE_HIT ], - [ 21, Moves.DIVE ], - [ 25, Moves.CHARM ], - [ 29, Moves.ACROBATICS ], - [ 34, Moves.ENCORE ], - [ 39, Moves.AQUA_TAIL ], - [ 44, Moves.MIST ], - [ 50, Moves.HYDRO_PUMP ], - [ 55, Moves.FOCUS_PUNCH ], - [ 61, Moves.WAVE_CRASH ], - ], - [Species.VAROOM]: [ - [ 1, Moves.LICK ], - [ 1, Moves.POISON_GAS ], - [ 4, Moves.SMOG ], - [ 7, Moves.TAUNT ], - [ 10, Moves.ASSURANCE ], - [ 13, Moves.SLUDGE ], - [ 17, Moves.GYRO_BALL ], - [ 21, Moves.HEADBUTT ], - [ 25, Moves.SCREECH ], - [ 28, Moves.IRON_HEAD ], - [ 32, Moves.SWAGGER ], - [ 36, Moves.POISON_JAB ], - [ 41, Moves.UPROAR ], - [ 46, Moves.SPIN_OUT ], - [ 50, Moves.GUNK_SHOT ], - ], - [Species.REVAVROOM]: [ - [ EVOLVE_MOVE, Moves.SHIFT_GEAR ], - [ 1, Moves.LICK ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.MAGNET_RISE ], - [ 4, Moves.SMOG ], - [ 7, Moves.TAUNT ], - [ 10, Moves.ASSURANCE ], - [ 13, Moves.SLUDGE ], - [ 17, Moves.GYRO_BALL ], - [ 21, Moves.HEADBUTT ], - [ 25, Moves.SCREECH ], - [ 28, Moves.IRON_HEAD ], - [ 32, Moves.SWAGGER ], - [ 36, Moves.POISON_JAB ], - [ 46, Moves.UPROAR ], - [ 52, Moves.SPIN_OUT ], - [ 58, Moves.GUNK_SHOT ], - ], - [Species.CYCLIZAR]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 7, Moves.RAPID_SPIN ], - [ 11, Moves.TAUNT ], - [ 14, Moves.BREAKING_SWIPE ], - [ 18, Moves.QUICK_ATTACK ], - [ 23, Moves.BITE ], - [ 27, Moves.U_TURN ], - [ 31, Moves.SHED_TAIL ], - [ 36, Moves.DRAGON_CLAW ], - [ 40, Moves.SHIFT_GEAR ], - [ 45, Moves.DRAGON_PULSE ], - [ 51, Moves.DOUBLE_EDGE ], - [ 57, Moves.DRAGON_RUSH ], - ], - [Species.ORTHWORM]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.WRAP ], - [ 1, Moves.HARDEN ], - [ 7, Moves.MUD_SLAP ], - [ 12, Moves.SMACK_DOWN ], - [ 16, Moves.BULLDOZE ], - [ 21, Moves.IRON_HEAD ], - [ 26, Moves.TAKE_DOWN ], - [ 30, Moves.DIG ], - [ 34, Moves.SANDSTORM ], - [ 38, Moves.IRON_DEFENSE ], - [ 43, Moves.IRON_TAIL ], - [ 47, Moves.EARTHQUAKE ], - [ 52, Moves.SHED_TAIL ], - ], - [Species.GLIMMET]: [ - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.HARDEN ], - [ 1, Moves.SMACK_DOWN ], - [ 7, Moves.ACID_SPRAY ], - [ 11, Moves.ANCIENT_POWER ], - [ 15, Moves.ROCK_POLISH ], - [ 18, Moves.STEALTH_ROCK ], - [ 22, Moves.VENOSHOCK ], - [ 26, Moves.SANDSTORM ], - [ 29, Moves.SELF_DESTRUCT ], - [ 33, Moves.ROCK_SLIDE ], - [ 37, Moves.POWER_GEM ], - [ 41, Moves.ACID_ARMOR ], - [ 46, Moves.SLUDGE_WAVE ], - ], - [Species.GLIMMORA]: [ - [ EVOLVE_MOVE, Moves.MORTAL_SPIN ], - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.HARDEN ], - [ 1, Moves.TOXIC_SPIKES ], - [ 1, Moves.SMACK_DOWN ], - [ 1, Moves.SPIKY_SHIELD ], - [ 7, Moves.ACID_SPRAY ], - [ 11, Moves.ANCIENT_POWER ], - [ 15, Moves.ROCK_POLISH ], - [ 18, Moves.STEALTH_ROCK ], - [ 22, Moves.VENOSHOCK ], - [ 26, Moves.SANDSTORM ], - [ 29, Moves.SELF_DESTRUCT ], - [ 33, Moves.ROCK_SLIDE ], - [ 39, Moves.POWER_GEM ], - [ 44, Moves.ACID_ARMOR ], - [ 50, Moves.SLUDGE_WAVE ], - ], - [Species.GREAVARD]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 3, Moves.LICK ], - [ 6, Moves.TAIL_WHIP ], - [ 6, Moves.BITE ], - [ 9, Moves.ROAR ], - [ 12, Moves.HEADBUTT ], - [ 16, Moves.DIG ], - [ 24, Moves.REST ], - [ 28, Moves.CRUNCH ], - [ 32, Moves.PLAY_ROUGH ], - [ 37, Moves.HELPING_HAND ], - [ 41, Moves.PHANTOM_FORCE ], - [ 46, Moves.CHARM ], - [ 52, Moves.DOUBLE_EDGE ], - ], - [Species.HOUNDSTONE]: [ - [ EVOLVE_MOVE, Moves.LAST_RESPECTS ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 3, Moves.LICK ], - [ 6, Moves.TAIL_WHIP ], - [ 6, Moves.BITE ], - [ 9, Moves.ROAR ], - [ 12, Moves.HEADBUTT ], - [ 16, Moves.DIG ], - [ 24, Moves.REST ], - [ 28, Moves.CRUNCH ], - [ 36, Moves.PLAY_ROUGH ], - [ 41, Moves.HELPING_HAND ], - [ 46, Moves.PHANTOM_FORCE ], - [ 51, Moves.CHARM ], - [ 58, Moves.DOUBLE_EDGE ], - ], - [Species.FLAMIGO]: [ - [ 1, Moves.PECK ], - [ 1, Moves.COPYCAT ], - [ 5, Moves.DOUBLE_KICK ], - [ 9, Moves.DETECT ], - [ 12, Moves.WING_ATTACK ], - [ 15, Moves.FOCUS_ENERGY ], - [ 18, Moves.LOW_KICK ], - [ 21, Moves.FEINT ], - [ 27, Moves.PAYBACK ], - [ 31, Moves.ROOST ], - [ 35, Moves.AIR_SLASH ], - [ 39, Moves.MEGA_KICK ], - [ 44, Moves.WIDE_GUARD ], - [ 48, Moves.THROAT_CHOP ], - [ 54, Moves.BRAVE_BIRD ], - ], - [Species.CETODDLE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.POWDER_SNOW ], - [ 6, Moves.GROWL ], - [ 9, Moves.ECHOED_VOICE ], - [ 12, Moves.ICE_SHARD ], - [ 15, Moves.REST ], - [ 19, Moves.TAKE_DOWN ], - [ 25, Moves.FLAIL ], - [ 27, Moves.AVALANCHE ], - [ 31, Moves.BOUNCE ], - [ 36, Moves.BODY_SLAM ], - [ 40, Moves.AMNESIA ], - [ 44, Moves.ICE_SPINNER ], - [ 49, Moves.DOUBLE_EDGE ], - [ 53, Moves.BLIZZARD ], - ], - [Species.CETITAN]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.POWDER_SNOW ], - [ 6, Moves.GROWL ], - [ 9, Moves.ECHOED_VOICE ], - [ 12, Moves.ICE_SHARD ], - [ 15, Moves.REST ], - [ 19, Moves.TAKE_DOWN ], - [ 25, Moves.FLAIL ], - [ 27, Moves.AVALANCHE ], - [ 31, Moves.BOUNCE ], - [ 36, Moves.BODY_SLAM ], - [ 40, Moves.AMNESIA ], - [ 44, Moves.ICE_SPINNER ], - [ 49, Moves.DOUBLE_EDGE ], - [ 53, Moves.BLIZZARD ], - ], - [Species.VELUZA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.AQUA_JET ], - [ 7, Moves.PLUCK ], - [ 11, Moves.WATER_PULSE ], - [ 15, Moves.FOCUS_ENERGY ], - [ 20, Moves.SLASH ], - [ 25, Moves.AQUA_CUTTER ], - [ 30, Moves.FILLET_AWAY ], - [ 35, Moves.NIGHT_SLASH ], - [ 40, Moves.PSYCHO_CUT ], - [ 45, Moves.LIQUIDATION ], - [ 50, Moves.CRUNCH ], - [ 55, Moves.FINAL_GAMBIT ], - ], - [Species.DONDOZO]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.WATER_GUN ], - [ 5, Moves.TICKLE ], - [ 10, Moves.FLAIL ], - [ 15, Moves.REST ], - [ 15, Moves.SLEEP_TALK ], - [ 20, Moves.DIVE ], - [ 25, Moves.NOBLE_ROAR ], - [ 30, Moves.SOAK ], - [ 35, Moves.BODY_SLAM ], - [ 40, Moves.AQUA_TAIL ], - [ 45, Moves.RAIN_DANCE ], - [ 50, Moves.ORDER_UP ], - [ 55, Moves.HEAVY_SLAM ], - [ 60, Moves.DOUBLE_EDGE ], - [ 65, Moves.WAVE_CRASH ], - ], - [Species.TATSUGIRI]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.SPLASH ], - [ 6, Moves.HARDEN ], - [ 12, Moves.HELPING_HAND ], - [ 17, Moves.WATER_PULSE ], - [ 23, Moves.SOAK ], - [ 28, Moves.TAUNT ], - [ 34, Moves.MEMENTO ], - [ 39, Moves.MUDDY_WATER ], - [ 43, Moves.NASTY_PLOT ], - [ 47, Moves.MIRROR_COAT ], - [ 52, Moves.DRAGON_PULSE ], - ], - [Species.ANNIHILAPE]: [ - [ EVOLVE_MOVE, Moves.SHADOW_PUNCH ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.COUNTER ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.COVET ], // Previous Stage Move - [ 1, Moves.FLING ], - [ 5, Moves.FURY_SWIPES ], - [ 8, Moves.LOW_KICK ], - [ 12, Moves.SEISMIC_TOSS ], - [ 17, Moves.SWAGGER ], - [ 22, Moves.CROSS_CHOP ], - [ 26, Moves.ASSURANCE ], - [ 30, Moves.THRASH ], - [ 35, Moves.RAGE_FIST ], - [ 39, Moves.CLOSE_COMBAT ], - [ 44, Moves.SCREECH ], - [ 48, Moves.STOMPING_TANTRUM ], - [ 53, Moves.OUTRAGE ], - [ 57, Moves.FINAL_GAMBIT ], - ], - [Species.CLODSIRE]: [ - [ EVOLVE_MOVE, Moves.AMNESIA ], - [ 1, Moves.TACKLE ], // Previous Stage Move - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.POISON_STING ], - [ 4, Moves.TOXIC_SPIKES ], - [ 8, Moves.MUD_SHOT ], - [ 12, Moves.POISON_TAIL ], - [ 16, Moves.SLAM ], - [ 21, Moves.YAWN ], - [ 24, Moves.POISON_JAB ], - [ 30, Moves.SLUDGE_WAVE ], - [ 36, Moves.MEGAHORN ], - [ 40, Moves.TOXIC ], - [ 48, Moves.EARTHQUAKE ], - ], - [Species.FARIGIRAF]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.POWER_SWAP ], - [ 1, Moves.GUARD_SWAP ], - [ 5, Moves.CONFUSION ], - [ 10, Moves.ASSURANCE ], - [ 14, Moves.STOMP ], - [ 19, Moves.PSYBEAM ], - [ 23, Moves.AGILITY ], - [ 28, Moves.DOUBLE_HIT ], - [ 32, Moves.TWIN_BEAM ], - [ 37, Moves.CRUNCH ], - [ 41, Moves.BATON_PASS ], - [ 46, Moves.NASTY_PLOT ], - [ 50, Moves.PSYCHIC ], - ], - [Species.DUDUNSPARCE]: [ - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.FLAIL ], - [ 1, Moves.TACKLE ], // Previous Stage Move, Custom - [ 4, Moves.MUD_SLAP ], - [ 8, Moves.ROLLOUT ], - [ 12, Moves.GLARE ], - [ 16, Moves.SCREECH ], - [ 20, Moves.ANCIENT_POWER ], - [ 24, Moves.DRILL_RUN ], - [ 28, Moves.YAWN ], - [ 32, Moves.HYPER_DRILL ], - [ 36, Moves.ROOST ], - [ 40, Moves.DRAGON_RUSH ], - [ 44, Moves.COIL ], - [ 48, Moves.DOUBLE_EDGE ], - [ 52, Moves.ENDEAVOR ], - [ 56, Moves.HURRICANE ], - [ 62, Moves.BOOMBURST ], - ], - [Species.KINGAMBIT]: [ - [ EVOLVE_MOVE, Moves.KOWTOW_CLEAVE ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.METAL_BURST ], - [ 15, Moves.TORMENT ], - [ 20, Moves.SCARY_FACE ], - [ 25, Moves.ASSURANCE ], - [ 30, Moves.METAL_SOUND ], - [ 35, Moves.SLASH ], - [ 40, Moves.NIGHT_SLASH ], - [ 45, Moves.IRON_DEFENSE ], - [ 50, Moves.RETALIATE ], - [ 57, Moves.IRON_HEAD ], - [ 64, Moves.SWORDS_DANCE ], - [ 71, Moves.GUILLOTINE ], - ], - [Species.GREAT_TUSK]: [ - [ 1, Moves.HORN_ATTACK ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.ROLLOUT ], - [ 1, Moves.SUNNY_DAY ], - [ 7, Moves.BULLDOZE ], - [ 14, Moves.TAUNT ], - [ 21, Moves.RAPID_SPIN ], - [ 28, Moves.BRICK_BREAK ], - [ 35, Moves.STOMPING_TANTRUM ], - [ 42, Moves.KNOCK_OFF ], - [ 49, Moves.EARTHQUAKE ], - [ 56, Moves.GIGA_IMPACT ], - [ 63, Moves.CLOSE_COMBAT ], - [ 70, Moves.ENDEAVOR ], - [ 77, Moves.MEGAHORN ], - [ 84, Moves.HEAD_SMASH ], - [ 91, Moves.HEADLONG_RUSH ], - ], - [Species.SCREAM_TAIL]: [ - [ RELEARN_MOVE, Moves.SUNNY_DAY ], - [ 1, Moves.POUND ], - [ 1, Moves.SING ], - [ 1, Moves.DISABLE ], - [ 7, Moves.HOWL ], - [ 14, Moves.NOBLE_ROAR ], - [ 21, Moves.BITE ], - [ 28, Moves.BODY_SLAM ], - [ 35, Moves.REST ], - [ 42, Moves.PLAY_ROUGH ], - [ 49, Moves.HYPER_VOICE ], - [ 56, Moves.PSYCHIC_FANGS ], - [ 63, Moves.CRUNCH ], - [ 70, Moves.WISH ], - [ 77, Moves.GYRO_BALL ], - [ 84, Moves.PERISH_SONG ], - [ 91, Moves.BOOMBURST ], - ], - [Species.BRUTE_BONNET]: [ - [ RELEARN_MOVE, Moves.SUNNY_DAY ], - [ 1, Moves.ABSORB ], - [ 1, Moves.GROWTH ], - [ 1, Moves.ASTONISH ], - [ 7, Moves.STUN_SPORE ], - [ 14, Moves.MEGA_DRAIN ], - [ 21, Moves.SYNTHESIS ], - [ 28, Moves.CLEAR_SMOG ], - [ 35, Moves.PAYBACK ], - [ 42, Moves.THRASH ], - [ 49, Moves.GIGA_DRAIN ], - [ 56, Moves.SUCKER_PUNCH ], - [ 63, Moves.SPORE ], - [ 70, Moves.INGRAIN ], - [ 77, Moves.RAGE_POWDER ], - [ 91, Moves.SOLAR_BEAM ], - ], - [Species.FLUTTER_MANE]: [ - [ RELEARN_MOVE, Moves.SUNNY_DAY ], - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.SPITE ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.PSYBEAM ], // Custom, moved from 7 to 1 - [ 14, Moves.MEAN_LOOK ], - [ 21, Moves.MEMENTO ], - [ 28, Moves.WISH ], - [ 35, Moves.DAZZLING_GLEAM ], - [ 42, Moves.SHADOW_BALL ], - [ 49, Moves.MYSTICAL_FIRE ], - [ 56, Moves.POWER_GEM ], - [ 63, Moves.PSYSHOCK ], - [ 70, Moves.PHANTOM_FORCE ], - [ 77, Moves.PAIN_SPLIT ], - [ 84, Moves.MOONBLAST ], - [ 91, Moves.PERISH_SONG ], - ], - [Species.SLITHER_WING]: [ - [ RELEARN_MOVE, Moves.SUNNY_DAY ], - [ 1, Moves.GUST ], - [ 1, Moves.EMBER ], - [ 1, Moves.BUG_BITE ], - [ 7, Moves.POISON_POWDER ], - [ 7, Moves.STUN_SPORE ], - [ 14, Moves.FLAME_CHARGE ], - [ 21, Moves.STOMP ], - [ 28, Moves.LOW_SWEEP ], - [ 35, Moves.MORNING_SUN ], - [ 42, Moves.LUNGE ], - [ 49, Moves.SUPERPOWER ], - [ 56, Moves.BULK_UP ], - [ 63, Moves.DUAL_WINGBEAT ], - [ 70, Moves.FIRST_IMPRESSION ], - [ 77, Moves.WHIRLWIND ], - [ 84, Moves.LEECH_LIFE ], - [ 91, Moves.THRASH ], - ], - [Species.SANDY_SHOCKS]: [ - [ RELEARN_MOVE, Moves.SUNNY_DAY ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.ELECTRIC_TERRAIN ], - [ 7, Moves.SPARK ], - [ 14, Moves.BULLDOZE ], - [ 21, Moves.CHARGE_BEAM ], - [ 28, Moves.TRI_ATTACK ], - [ 35, Moves.SCREECH ], - [ 42, Moves.HEAVY_SLAM ], - [ 49, Moves.METAL_SOUND ], - [ 56, Moves.DISCHARGE ], - [ 63, Moves.EARTH_POWER ], - [ 70, Moves.MIRROR_COAT ], - [ 77, Moves.GRAVITY ], - [ 84, Moves.ZAP_CANNON ], - [ 91, Moves.MAGNETIC_FLUX ], - ], - [Species.IRON_TREADS]: [ - [ 1, Moves.HORN_ATTACK ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.ROLLOUT ], - [ 1, Moves.ELECTRIC_TERRAIN ], - [ 7, Moves.BULLDOZE ], - [ 21, Moves.RAPID_SPIN ], - [ 28, Moves.IRON_HEAD ], - [ 35, Moves.STOMPING_TANTRUM ], - [ 42, Moves.KNOCK_OFF ], - [ 49, Moves.EARTHQUAKE ], - [ 56, Moves.HEAVY_SLAM ], - [ 63, Moves.WILD_CHARGE ], - [ 70, Moves.ENDEAVOR ], - [ 77, Moves.MEGAHORN ], - [ 84, Moves.GIGA_IMPACT ], - [ 91, Moves.STEEL_ROLLER ], - ], - [Species.IRON_BUNDLE]: [ - [ RELEARN_MOVE, Moves.ELECTRIC_TERRAIN ], - [ 1, Moves.PRESENT ], - [ 1, Moves.WATER_GUN ], // Custom - [ 7, Moves.POWDER_SNOW ], - [ 14, Moves.WHIRLPOOL ], - [ 21, Moves.TAKE_DOWN ], - [ 28, Moves.DRILL_PECK ], - [ 35, Moves.HELPING_HAND ], - [ 42, Moves.FREEZE_DRY ], - [ 49, Moves.FLIP_TURN ], - [ 56, Moves.ICE_BEAM ], - [ 63, Moves.AGILITY ], - [ 70, Moves.SNOWSCAPE ], - [ 77, Moves.HYDRO_PUMP ], - [ 84, Moves.AURORA_VEIL ], - [ 91, Moves.BLIZZARD ], - ], - [Species.IRON_HANDS]: [ - [ RELEARN_MOVE, Moves.ELECTRIC_TERRAIN ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.ARM_THRUST ], - [ 7, Moves.FAKE_OUT ], - [ 14, Moves.WHIRLWIND ], - [ 21, Moves.THUNDER_PUNCH ], - [ 28, Moves.SLAM ], - [ 35, Moves.FORCE_PALM ], - [ 42, Moves.SEISMIC_TOSS ], - [ 49, Moves.CHARGE ], - [ 56, Moves.WILD_CHARGE ], - [ 63, Moves.CLOSE_COMBAT ], - [ 70, Moves.DETECT ], - [ 77, Moves.HEAVY_SLAM ], - [ 84, Moves.BELLY_DRUM ], - [ 91, Moves.FOCUS_PUNCH ], - ], - [Species.IRON_JUGULIS]: [ - [ RELEARN_MOVE, Moves.ELECTRIC_TERRAIN ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.TRI_ATTACK ], - [ 1, Moves.AIR_CUTTER ], - [ 1, Moves.WORK_UP ], - [ 1, Moves.ELECTRIC_TERRAIN ], - [ 7, Moves.ROAR ], - [ 14, Moves.ASSURANCE ], - [ 21, Moves.DRAGON_BREATH ], - [ 28, Moves.SNARL ], - [ 35, Moves.CRUNCH ], - [ 42, Moves.HYPER_VOICE ], - [ 56, Moves.AIR_SLASH ], - [ 63, Moves.KNOCK_OFF ], - [ 70, Moves.DARK_PULSE ], - [ 77, Moves.OUTRAGE ], - [ 84, Moves.DRAGON_PULSE ], - [ 91, Moves.HYPER_BEAM ], - ], - [Species.IRON_MOTH]: [ - [ RELEARN_MOVE, Moves.ELECTRIC_TERRAIN ], - [ 1, Moves.GUST ], - [ 1, Moves.WHIRLWIND ], - [ 1, Moves.EMBER ], - [ 1, Moves.ACID_SPRAY ], - [ 7, Moves.STRUGGLE_BUG ], - [ 14, Moves.FIRE_SPIN ], - [ 21, Moves.TAKE_DOWN ], - [ 28, Moves.LUNGE ], - [ 35, Moves.SCREECH ], - [ 42, Moves.DISCHARGE ], - [ 49, Moves.SLUDGE_WAVE ], - [ 56, Moves.FIERY_DANCE ], - [ 63, Moves.METAL_SOUND ], - [ 70, Moves.MORNING_SUN ], - [ 77, Moves.HURRICANE ], - [ 84, Moves.BUG_BUZZ ], - [ 91, Moves.OVERHEAT ], - ], - [Species.IRON_THORNS]: [ - [ RELEARN_MOVE, Moves.ELECTRIC_TERRAIN ], - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.IRON_DEFENSE ], - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.FIRE_FANG ], - [ 7, Moves.SCREECH ], - [ 21, Moves.ROCK_TOMB ], - [ 28, Moves.BITE ], - [ 35, Moves.CHARGE ], - [ 42, Moves.ROCK_SLIDE ], - [ 49, Moves.SANDSTORM ], - [ 56, Moves.WILD_CHARGE ], - [ 63, Moves.PIN_MISSILE ], - [ 70, Moves.EARTHQUAKE ], - [ 77, Moves.STEALTH_ROCK ], - [ 84, Moves.STONE_EDGE ], - [ 91, Moves.GIGA_IMPACT ], - ], - [Species.FRIGIBAX]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.DRAGON_TAIL ], - [ 6, Moves.ICY_WIND ], - [ 12, Moves.DRAGON_BREATH ], - [ 18, Moves.FOCUS_ENERGY ], - [ 24, Moves.BITE ], - [ 29, Moves.ICE_FANG ], - [ 32, Moves.DRAGON_CLAW ], - [ 36, Moves.TAKE_DOWN ], - [ 40, Moves.ICE_BEAM ], - [ 44, Moves.CRUNCH ], - [ 48, Moves.ICICLE_CRASH ], - ], - [Species.ARCTIBAX]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.DRAGON_TAIL ], - [ 6, Moves.ICY_WIND ], - [ 12, Moves.DRAGON_BREATH ], - [ 18, Moves.FOCUS_ENERGY ], - [ 24, Moves.BITE ], - [ 29, Moves.ICE_FANG ], - [ 32, Moves.DRAGON_CLAW ], // Previous Stage Move, Frigibax Level - [ 40, Moves.TAKE_DOWN ], - [ 45, Moves.ICE_BEAM ], - [ 50, Moves.CRUNCH ], - [ 55, Moves.ICICLE_CRASH ], - ], - [Species.BAXCALIBUR]: [ - [ EVOLVE_MOVE, Moves.GLAIVE_RUSH ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.ICE_SHARD ], - [ 1, Moves.DRAGON_TAIL ], - [ 1, Moves.BREAKING_SWIPE ], - [ 1, Moves.SNOWSCAPE ], - [ 6, Moves.ICY_WIND ], - [ 12, Moves.DRAGON_BREATH ], - [ 18, Moves.FOCUS_ENERGY ], - [ 24, Moves.BITE ], - [ 29, Moves.ICE_FANG ], - [ 35, Moves.DRAGON_CLAW ], - [ 42, Moves.TAKE_DOWN ], - [ 48, Moves.ICE_BEAM ], - [ 55, Moves.CRUNCH ], - [ 62, Moves.ICICLE_CRASH ], - ], - [Species.GIMMIGHOUL]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.ASTONISH ], - ], - [Species.GHOLDENGO]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.ASTONISH ], - [ 7, Moves.NIGHT_SHADE ], - [ 14, Moves.CONFUSE_RAY ], - [ 21, Moves.SUBSTITUTE ], - [ 28, Moves.METAL_SOUND ], - [ 35, Moves.SHADOW_BALL ], - [ 42, Moves.RECOVER ], - [ 49, Moves.POWER_GEM ], - [ 56, Moves.MAKE_IT_RAIN ], - [ 63, Moves.NASTY_PLOT ], - [ 70, Moves.MEMENTO ], - ], - [Species.WO_CHIEN]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.SPITE ], - [ 1, Moves.MEAN_LOOK ], - [ 5, Moves.TICKLE ], - [ 10, Moves.PAYBACK ], - [ 15, Moves.POISON_POWDER ], - [ 15, Moves.STUN_SPORE ], - [ 20, Moves.MEGA_DRAIN ], - [ 25, Moves.LEECH_SEED ], - [ 30, Moves.GROWTH ], - [ 35, Moves.INGRAIN ], - [ 40, Moves.DARK_PULSE ], - [ 45, Moves.GIGA_DRAIN ], - [ 50, Moves.RUINATION ], - [ 55, Moves.FOUL_PLAY ], - [ 60, Moves.POWER_WHIP ], - [ 65, Moves.GRASSY_TERRAIN ], - [ 70, Moves.KNOCK_OFF ], - [ 75, Moves.LEAF_STORM ], - ], - [Species.CHIEN_PAO]: [ - [ 1, Moves.SPITE ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.MEAN_LOOK ], - [ 5, Moves.ICY_WIND ], - [ 10, Moves.PAYBACK ], - [ 15, Moves.MIST ], - [ 15, Moves.HAZE ], - [ 20, Moves.ICE_SHARD ], - [ 25, Moves.SWORDS_DANCE ], - [ 30, Moves.SNOWSCAPE ], - [ 35, Moves.NIGHT_SLASH ], - [ 40, Moves.DARK_PULSE ], - [ 45, Moves.ICICLE_CRASH ], - [ 50, Moves.RUINATION ], - [ 55, Moves.SUCKER_PUNCH ], - [ 60, Moves.SACRED_SWORD ], - [ 65, Moves.RECOVER ], - [ 70, Moves.THROAT_CHOP ], - [ 75, Moves.SHEER_COLD ], - ], - [Species.TING_LU]: [ - [ 1, Moves.SPITE ], - [ 1, Moves.MEAN_LOOK ], - [ 1, Moves.SAND_TOMB ], - [ 5, Moves.SPIKES ], - [ 10, Moves.PAYBACK ], - [ 15, Moves.STOMP ], - [ 20, Moves.BULLDOZE ], - [ 25, Moves.WHIRLWIND ], - [ 30, Moves.TAUNT ], - [ 35, Moves.THRASH ], - [ 40, Moves.DARK_PULSE ], - [ 45, Moves.STOMPING_TANTRUM ], - [ 50, Moves.RUINATION ], - [ 55, Moves.THROAT_CHOP ], - [ 60, Moves.ROCK_SLIDE ], - [ 65, Moves.MEMENTO ], - [ 70, Moves.EARTHQUAKE ], - [ 75, Moves.FISSURE ], - ], - [Species.CHI_YU]: [ - [ 1, Moves.EMBER ], - [ 1, Moves.SPITE ], - [ 1, Moves.MEAN_LOOK ], - [ 5, Moves.FLAME_WHEEL ], - [ 10, Moves.PAYBACK ], - [ 15, Moves.WILL_O_WISP ], - [ 20, Moves.FLAME_CHARGE ], - [ 25, Moves.INCINERATE ], - [ 30, Moves.CONFUSE_RAY ], - [ 35, Moves.NASTY_PLOT ], - [ 40, Moves.DARK_PULSE ], - [ 45, Moves.LAVA_PLUME ], - [ 50, Moves.RUINATION ], - [ 55, Moves.BOUNCE ], - [ 60, Moves.SWAGGER ], - [ 65, Moves.INFERNO ], - [ 70, Moves.MEMENTO ], - [ 75, Moves.OVERHEAT ], - ], - [Species.ROARING_MOON]: [ - [ RELEARN_MOVE, Moves.SUNNY_DAY ], - [ RELEARN_MOVE, Moves.JAW_LOCK ], - [ RELEARN_MOVE, Moves.BREAKING_SWIPE ], - [ RELEARN_MOVE, Moves.SCALE_SHOT ], - [ 1, Moves.LEER ], - [ 1, Moves.BITE ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.DRAGON_BREATH ], - [ 7, Moves.INCINERATE ], - [ 14, Moves.HEADBUTT ], - [ 21, Moves.SCARY_FACE ], - [ 28, Moves.DRAGON_CLAW ], - [ 35, Moves.ZEN_HEADBUTT ], - [ 42, Moves.FLAMETHROWER ], - [ 49, Moves.NIGHT_SLASH ], - [ 56, Moves.DRAGON_DANCE ], - [ 63, Moves.DRAGON_RUSH ], - [ 70, Moves.FLY ], - [ 77, Moves.THROAT_CHOP ], - [ 84, Moves.ROOST ], - [ 91, Moves.DOUBLE_EDGE ], - ], - [Species.IRON_VALIANT]: [ - [ RELEARN_MOVE, Moves.ELECTRIC_TERRAIN ], - [ 1, Moves.DISABLE ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.SHADOW_SNEAK ], - [ 7, Moves.HYPNOSIS ], - [ 14, Moves.FEINT ], - [ 21, Moves.FUTURE_SIGHT ], - [ 28, Moves.DAZZLING_GLEAM ], - [ 35, Moves.PSYCHO_CUT ], - [ 42, Moves.NIGHT_SLASH ], - [ 49, Moves.LEAF_BLADE ], - [ 56, Moves.MOONBLAST ], - [ 63, Moves.CLOSE_COMBAT ], - [ 70, Moves.KNOCK_OFF ], - [ 77, Moves.DESTINY_BOND ], - [ 84, Moves.WIDE_GUARD ], - [ 84, Moves.QUICK_GUARD ], - [ 91, Moves.SPIRIT_BREAK ], - ], - [Species.KORAIDON]: [ - [ 1, Moves.SUNNY_DAY ], - [ 1, Moves.BREAKING_SWIPE ], - [ 7, Moves.ROCK_SMASH ], - [ 14, Moves.ANCIENT_POWER ], - [ 21, Moves.DRAIN_PUNCH ], - [ 28, Moves.BRICK_BREAK ], - [ 35, Moves.AGILITY ], - [ 42, Moves.DRAGON_CLAW ], - [ 49, Moves.FLAMETHROWER ], - [ 56, Moves.COLLISION_COURSE ], - [ 63, Moves.SCREECH ], - [ 70, Moves.COUNTER ], - [ 77, Moves.OUTRAGE ], - [ 84, Moves.CLOSE_COMBAT ], - [ 91, Moves.FLARE_BLITZ ], - [ 98, Moves.GIGA_IMPACT ], - ], - [Species.MIRAIDON]: [ - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.ELECTRIC_TERRAIN ], - [ 7, Moves.SHOCK_WAVE ], - [ 14, Moves.CHARGE ], - [ 21, Moves.PARABOLIC_CHARGE ], - [ 28, Moves.DISCHARGE ], - [ 35, Moves.AGILITY ], - [ 42, Moves.DRAGON_PULSE ], - [ 56, Moves.ELECTRO_DRIFT ], - [ 63, Moves.METAL_SOUND ], - [ 70, Moves.MIRROR_COAT ], - [ 77, Moves.OUTRAGE ], - [ 84, Moves.THUNDER ], - [ 91, Moves.OVERHEAT ], - [ 98, Moves.HYPER_BEAM ], - ], - [Species.WALKING_WAKE]: [ - [ RELEARN_MOVE, Moves.SUNNY_DAY ], - [ RELEARN_MOVE, Moves.HONE_CLAWS ], - [ 1, Moves.LEER ], - [ 1, Moves.ROAR ], - [ 1, Moves.TWISTER ], - [ 1, Moves.AQUA_JET ], - [ 7, Moves.BITE ], - [ 14, Moves.WATER_PULSE ], - [ 21, Moves.NOBLE_ROAR ], - [ 28, Moves.DRAGON_BREATH ], - [ 35, Moves.BREAKING_SWIPE ], - [ 42, Moves.DRAGON_RUSH ], - [ 56, Moves.HYDRO_STEAM ], - [ 63, Moves.DRAGON_PULSE ], - [ 70, Moves.OUTRAGE ], - [ 77, Moves.FLAMETHROWER ], - [ 84, Moves.HYDRO_PUMP ], - ], - [Species.IRON_LEAVES]: [ - [ RELEARN_MOVE, Moves.ELECTRIC_TERRAIN ], - [ RELEARN_MOVE, Moves.QUASH ], - [ 1, Moves.LEER ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.WORK_UP ], - [ 7, Moves.MAGICAL_LEAF ], - [ 14, Moves.RETALIATE ], - [ 21, Moves.QUICK_GUARD ], - [ 28, Moves.NIGHT_SLASH ], - [ 35, Moves.SWORDS_DANCE ], - [ 42, Moves.SACRED_SWORD ], - [ 49, Moves.LEAF_BLADE ], - [ 56, Moves.PSYBLADE ], - [ 63, Moves.CLOSE_COMBAT ], - [ 70, Moves.IMPRISON ], - [ 77, Moves.MEGAHORN ], - [ 84, Moves.ALLY_SWITCH ], - [ 91, Moves.SOLAR_BLADE ], - ], - [Species.DIPPLIN]: [ - [ EVOLVE_MOVE, Moves.DOUBLE_HIT ], - [ RELEARN_MOVE, Moves.DRAGON_CHEER ], // Custom - [ 1, Moves.LEAFAGE ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.RECYCLE ], - [ 1, Moves.ASTONISH ], - [ 4, Moves.DRAGON_TAIL ], - [ 8, Moves.GROWTH ], - [ 12, Moves.DRAGON_BREATH ], - [ 16, Moves.PROTECT ], - [ 20, Moves.BULLET_SEED ], - [ 28, Moves.SYRUP_BOMB ], - [ 32, Moves.DRAGON_PULSE ], - [ 36, Moves.RECOVER ], - [ 40, Moves.ENERGY_BALL ], - [ 44, Moves.SUBSTITUTE ], - ], - [Species.POLTCHAGEIST]: [ - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.ASTONISH ], - [ 5, Moves.ABSORB ], // Custom, Moved from Level 6 to 5 - [ 12, Moves.LIFE_DEW ], - [ 18, Moves.FOUL_PLAY ], - [ 24, Moves.MEGA_DRAIN ], - [ 30, Moves.HEX ], - [ 36, Moves.RAGE_POWDER ], - [ 42, Moves.GIGA_DRAIN ], - [ 48, Moves.SHADOW_BALL ], - [ 54, Moves.MEMENTO ], - [ 60, Moves.LEAF_STORM ], - ], - [Species.SINISTCHA]: [ - [ EVOLVE_MOVE, Moves.MATCHA_GOTCHA ], - [ RELEARN_MOVE, Moves.GIGA_DRAIN ], // Previous Stage Move - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.ASTONISH ], - [ 6, Moves.ABSORB ], - [ 12, Moves.LIFE_DEW ], - [ 18, Moves.FOUL_PLAY ], - [ 24, Moves.MEGA_DRAIN ], - [ 30, Moves.HEX ], - [ 36, Moves.RAGE_POWDER ], - [ 42, Moves.STRENGTH_SAP ], - [ 48, Moves.SHADOW_BALL ], - [ 54, Moves.MEMENTO ], - [ 60, Moves.LEAF_STORM ], - ], - [Species.OKIDOGI]: [ - [ 1, Moves.BITE ], - [ 1, Moves.LOW_KICK ], - [ 1, Moves.BULK_UP ], - [ 8, Moves.HOWL ], - [ 16, Moves.POISON_FANG ], - [ 24, Moves.FORCE_PALM ], - [ 32, Moves.COUNTER ], - [ 40, Moves.POISON_JAB ], - [ 48, Moves.BRUTAL_SWING ], - [ 56, Moves.CRUNCH ], - [ 64, Moves.SUPERPOWER ], - [ 72, Moves.GIGA_IMPACT ], - ], - [Species.MUNKIDORI]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.FLATTER ], - [ 8, Moves.HELPING_HAND ], - [ 16, Moves.PSYBEAM ], - [ 24, Moves.CLEAR_SMOG ], - [ 32, Moves.POISON_JAB ], - [ 40, Moves.PSYCHIC ], - [ 48, Moves.SLUDGE_WAVE ], - [ 56, Moves.NASTY_PLOT ], - [ 64, Moves.FUTURE_SIGHT ], - [ 72, Moves.PARTING_SHOT ], - ], - [Species.FEZANDIPITI]: [ - [ 1, Moves.DOUBLE_KICK ], - [ 1, Moves.PECK ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.DISARMING_VOICE ], - [ 8, Moves.QUICK_ATTACK ], - [ 16, Moves.ATTRACT ], - [ 24, Moves.WING_ATTACK ], - [ 32, Moves.CROSS_POISON ], - [ 40, Moves.TAIL_SLAP ], - [ 48, Moves.BEAT_UP ], - [ 56, Moves.SWAGGER ], - [ 56, Moves.FLATTER ], - [ 64, Moves.ROOST ], - [ 72, Moves.MOONBLAST ], - ], - [Species.OGERPON]: [ - [ RELEARN_MOVE, Moves.DOUBLE_KICK ], - [ RELEARN_MOVE, Moves.COUNTER ], - [ RELEARN_MOVE, Moves.RETALIATE ], - [ RELEARN_MOVE, Moves.HORN_LEECH ], - [ 1, Moves.VINE_WHIP ], - [ 1, Moves.LEECH_SEED ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.FOLLOW_ME ], - [ 6, Moves.FOCUS_ENERGY ], - [ 12, Moves.GROWTH ], - [ 18, Moves.SLAM ], - [ 24, Moves.LOW_SWEEP ], - [ 30, Moves.IVY_CUDGEL ], - [ 36, Moves.THROAT_CHOP ], - [ 42, Moves.SYNTHESIS ], - [ 48, Moves.SPIKY_SHIELD ], - [ 54, Moves.POWER_WHIP ], - [ 60, Moves.SUPERPOWER ], - [ 66, Moves.WOOD_HAMMER ], - ], - [Species.ARCHALUDON]: [ - [ EVOLVE_MOVE, Moves.ELECTRO_SHOT ], - [ RELEARN_MOVE, Moves.LASER_FOCUS ], // Previous Stage Move - [ 1, Moves.LEER ], - [ 1, Moves.METAL_CLAW ], - [ 6, Moves.ROCK_SMASH ], - [ 12, Moves.HONE_CLAWS ], - [ 18, Moves.METAL_SOUND ], - [ 24, Moves.BREAKING_SWIPE ], - [ 30, Moves.DRAGON_TAIL ], - [ 36, Moves.IRON_DEFENSE ], - [ 42, Moves.FOCUS_ENERGY ], - [ 48, Moves.DRAGON_CLAW ], - [ 54, Moves.FLASH_CANNON ], - [ 60, Moves.METAL_BURST ], - [ 66, Moves.HYPER_BEAM ], - ], - [Species.HYDRAPPLE]: [ - [ EVOLVE_MOVE, Moves.FICKLE_BEAM ], - [ RELEARN_MOVE, Moves.YAWN ], - [ RELEARN_MOVE, Moves.DOUBLE_HIT ], - [ RELEARN_MOVE, Moves.INFESTATION ], - [ RELEARN_MOVE, Moves.DRAGON_CHEER ], // Previous Stage Move, Custom - [ 1, Moves.LEAFAGE ], // Previous Stage Move, Custom - [ 1, Moves.WITHDRAW ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.RECYCLE ], - [ 1, Moves.ASTONISH ], - [ 4, Moves.DRAGON_TAIL ], - [ 8, Moves.GROWTH ], - [ 12, Moves.DRAGON_BREATH ], - [ 16, Moves.PROTECT ], - [ 20, Moves.BULLET_SEED ], - [ 28, Moves.SYRUP_BOMB ], - [ 32, Moves.DRAGON_PULSE ], - [ 36, Moves.RECOVER ], - [ 40, Moves.ENERGY_BALL ], - [ 44, Moves.SUBSTITUTE ], - [ 54, Moves.POWER_WHIP ], - ], - [Species.GOUGING_FIRE]: [ - [ RELEARN_MOVE, Moves.DOUBLE_KICK ], - [ RELEARN_MOVE, Moves.ANCIENT_POWER ], - [ RELEARN_MOVE, Moves.NOBLE_ROAR ], - [ 1, Moves.STOMP ], - [ 1, Moves.LEER ], - [ 1, Moves.INCINERATE ], - [ 1, Moves.SUNNY_DAY ], - [ 7, Moves.FIRE_FANG ], - [ 14, Moves.HOWL ], - [ 21, Moves.BITE ], - [ 28, Moves.DRAGON_CLAW ], - [ 35, Moves.CRUSH_CLAW ], - [ 42, Moves.MORNING_SUN ], - [ 49, Moves.BURNING_BULWARK ], - [ 56, Moves.DRAGON_RUSH ], - [ 63, Moves.FIRE_BLAST ], - [ 70, Moves.LAVA_PLUME ], - [ 77, Moves.OUTRAGE ], - [ 84, Moves.FLARE_BLITZ ], - [ 91, Moves.RAGING_FURY ], - ], - [Species.RAGING_BOLT]: [ - [ RELEARN_MOVE, Moves.ANCIENT_POWER ], - [ 1, Moves.TWISTER ], - [ 1, Moves.SUNNY_DAY ], - [ 1, Moves.SHOCK_WAVE ], - [ 1, Moves.STOMP ], - [ 7, Moves.CHARGE ], - [ 14, Moves.DRAGON_BREATH ], - [ 21, Moves.ELECTRIC_TERRAIN ], - [ 28, Moves.DISCHARGE ], - [ 35, Moves.DRAGON_TAIL ], - [ 42, Moves.CALM_MIND ], - [ 49, Moves.THUNDERCLAP ], - [ 56, Moves.DRAGON_HAMMER ], - [ 63, Moves.RISING_VOLTAGE ], - [ 70, Moves.DRAGON_PULSE ], - [ 77, Moves.ZAP_CANNON ], - [ 84, Moves.BODY_PRESS ], - [ 91, Moves.THUNDER ], - ], - [Species.IRON_BOULDER]: [ - [ 1, Moves.HORN_ATTACK ], - [ 1, Moves.LEER ], - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.ELECTRIC_TERRAIN ], - [ 7, Moves.QUICK_ATTACK ], - [ 14, Moves.SLASH ], - [ 21, Moves.AGILITY ], - [ 28, Moves.PSYCHO_CUT ], - [ 35, Moves.COUNTER ], - [ 42, Moves.ROCK_TOMB ], - [ 49, Moves.SACRED_SWORD ], - [ 56, Moves.MIGHTY_CLEAVE ], - [ 63, Moves.SWORDS_DANCE ], - [ 70, Moves.MEGAHORN ], - [ 77, Moves.QUICK_GUARD ], - [ 84, Moves.STONE_EDGE ], - [ 91, Moves.GIGA_IMPACT ], - ], - [Species.IRON_CROWN]: [ - [ 1, Moves.LEER ], - [ 1, Moves.ELECTRIC_TERRAIN ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.METAL_CLAW ], - [ 7, Moves.SMART_STRIKE ], - [ 14, Moves.SLASH ], - [ 21, Moves.IRON_DEFENSE ], - [ 28, Moves.PSYSHOCK ], - [ 35, Moves.PSYCHO_CUT ], - [ 42, Moves.FLASH_CANNON ], - [ 49, Moves.SACRED_SWORD ], - [ 56, Moves.TACHYON_CUTTER ], - [ 63, Moves.FUTURE_SIGHT ], - [ 70, Moves.VOLT_SWITCH ], - [ 77, Moves.QUICK_GUARD ], - [ 84, Moves.METAL_BURST ], - [ 91, Moves.HYPER_BEAM ], - ], - [Species.TERAPAGOS]: [ - [ 1, Moves.WITHDRAW ], - [ 1, Moves.TRI_ATTACK ], - [ 1, Moves.RAPID_SPIN ], - [ 10, Moves.ANCIENT_POWER ], - [ 20, Moves.HEADBUTT ], - [ 30, Moves.PROTECT ], - [ 40, Moves.EARTH_POWER ], - [ 50, Moves.HEAVY_SLAM ], - [ 60, Moves.TERA_STARSTORM ], - [ 70, Moves.DOUBLE_EDGE ], - [ 80, Moves.ROCK_POLISH ], - [ 90, Moves.GYRO_BALL ], - ], - [Species.PECHARUNT]: [ - [ RELEARN_MOVE, Moves.DEFENSE_CURL ], - [ RELEARN_MOVE, Moves.ROLLOUT ], - [ RELEARN_MOVE, Moves.MEAN_LOOK ], - [ 1, Moves.SMOG ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.MEMENTO ], - [ 1, Moves.ASTONISH ], - [ 8, Moves.WITHDRAW ], - [ 16, Moves.DESTINY_BOND ], - [ 24, Moves.FAKE_TEARS ], - [ 32, Moves.PARTING_SHOT ], - [ 40, Moves.SHADOW_BALL ], - [ 48, Moves.MALIGNANT_CHAIN ], - [ 56, Moves.TOXIC ], - [ 64, Moves.NASTY_PLOT ], - [ 72, Moves.RECOVER ], - ], - [Species.ALOLA_RATTATA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 4, Moves.QUICK_ATTACK ], - [ 7, Moves.FOCUS_ENERGY ], - [ 10, Moves.BITE ], - [ 13, Moves.PURSUIT ], - [ 16, Moves.HYPER_FANG ], - [ 19, Moves.ASSURANCE ], - [ 22, Moves.CRUNCH ], - [ 25, Moves.SUCKER_PUNCH ], - [ 28, Moves.SUPER_FANG ], - [ 31, Moves.DOUBLE_EDGE ], - [ 34, Moves.ENDEAVOR ], - ], - [Species.ALOLA_RATICATE]: [ - [ EVOLVE_MOVE, Moves.SCARY_FACE ], - [ 1, Moves.SWORDS_DANCE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.FOCUS_ENERGY ], - [ 10, Moves.BITE ], - [ 13, Moves.PURSUIT ], - [ 16, Moves.HYPER_FANG ], - [ 19, Moves.ASSURANCE ], - [ 24, Moves.CRUNCH ], - [ 29, Moves.SUCKER_PUNCH ], - [ 34, Moves.SUPER_FANG ], - [ 39, Moves.DOUBLE_EDGE ], - [ 44, Moves.ENDEAVOR ], - ], - [Species.ALOLA_RAICHU]: [ - [ EVOLVE_MOVE, Moves.PSYCHIC ], - [ EVOLVE_MOVE, Moves.ZIPPY_ZAP ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.THUNDER ], - [ 1, Moves.AGILITY ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.LIGHT_SCREEN ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.SPARK ], - [ 1, Moves.IRON_TAIL ], - [ 1, Moves.FEINT ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.DISCHARGE ], - [ 1, Moves.ELECTRO_BALL ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.NUZZLE ], - [ 5, Moves.THUNDERBOLT ], - [ 50, Moves.PIKA_PAPOW ], - ], - [Species.ALOLA_SANDSHREW]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.DEFENSE_CURL ], - [ 3, Moves.MIST ], - [ 6, Moves.POWDER_SNOW ], - [ 9, Moves.ROLLOUT ], - [ 12, Moves.FURY_CUTTER ], - [ 15, Moves.RAPID_SPIN ], - [ 18, Moves.METAL_CLAW ], - [ 21, Moves.SWIFT ], - [ 24, Moves.FURY_SWIPES ], - [ 27, Moves.IRON_DEFENSE ], - [ 30, Moves.SLASH ], - [ 33, Moves.IRON_HEAD ], - [ 36, Moves.GYRO_BALL ], - [ 39, Moves.SWORDS_DANCE ], - [ 42, Moves.SNOWSCAPE ], - [ 45, Moves.BLIZZARD ], - ], - [Species.ALOLA_SANDSLASH]: [ - [ EVOLVE_MOVE, Moves.ICICLE_SPEAR ], - [ RELEARN_MOVE, Moves.SCRATCH ], - [ RELEARN_MOVE, Moves.MIST ], - [ RELEARN_MOVE, Moves.BLIZZARD ], - [ RELEARN_MOVE, Moves.DEFENSE_CURL ], - [ RELEARN_MOVE, Moves.SWIFT ], - [ RELEARN_MOVE, Moves.FURY_SWIPES ], - [ RELEARN_MOVE, Moves.POWDER_SNOW ], - [ RELEARN_MOVE, Moves.ROLLOUT ], - [ RELEARN_MOVE, Moves.FURY_CUTTER ], - [ RELEARN_MOVE, Moves.RAPID_SPIN ], - [ RELEARN_MOVE, Moves.IRON_DEFENSE ], - [ RELEARN_MOVE, Moves.GYRO_BALL ], - [ RELEARN_MOVE, Moves.METAL_BURST ], - [ RELEARN_MOVE, Moves.IRON_HEAD ], - [ RELEARN_MOVE, Moves.SNOWSCAPE ], - [ 1, Moves.ICICLE_CRASH ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.SLASH ], - [ 1, Moves.SWORDS_DANCE ], - [ 1, Moves.ICE_BALL ], - ], - [Species.ALOLA_VULPIX]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.POWDER_SNOW ], - [ 4, Moves.DISABLE ], - [ 8, Moves.ICE_SHARD ], - [ 12, Moves.SPITE ], - [ 16, Moves.ICY_WIND ], - [ 20, Moves.CONFUSE_RAY ], - [ 24, Moves.AURORA_BEAM ], - [ 28, Moves.EXTRASENSORY ], - [ 32, Moves.ICE_BEAM ], - [ 36, Moves.IMPRISON ], - [ 40, Moves.MIST ], - [ 44, Moves.AURORA_VEIL ], - [ 48, Moves.FREEZE_DRY ], - [ 52, Moves.BLIZZARD ], - ], - [Species.ALOLA_NINETALES]: [ - [ EVOLVE_MOVE, Moves.DAZZLING_GLEAM ], - [ RELEARN_MOVE, Moves.DISABLE ], - [ RELEARN_MOVE, Moves.MIST ], - [ RELEARN_MOVE, Moves.ICE_BEAM ], - [ RELEARN_MOVE, Moves.AURORA_BEAM ], - [ RELEARN_MOVE, Moves.CONFUSE_RAY ], - [ RELEARN_MOVE, Moves.SPITE ], - [ RELEARN_MOVE, Moves.POWDER_SNOW ], - [ RELEARN_MOVE, Moves.EXTRASENSORY ], - [ RELEARN_MOVE, Moves.NASTY_PLOT ], - [ RELEARN_MOVE, Moves.ICE_SHARD ], - [ RELEARN_MOVE, Moves.FREEZE_DRY ], - [ RELEARN_MOVE, Moves.AURORA_VEIL ], - [ 1, Moves.ICY_WIND ], - [ 1, Moves.IMPRISON ], - [ 1, Moves.BLIZZARD ], - [ 1, Moves.TAIL_WHIP ], - ], - [Species.ALOLA_DIGLETT]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.METAL_CLAW ], - [ 4, Moves.GROWL ], - [ 8, Moves.ASTONISH ], - [ 12, Moves.MUD_SLAP ], - [ 16, Moves.BULLDOZE ], - [ 20, Moves.SUCKER_PUNCH ], - [ 24, Moves.IRON_HEAD ], - [ 28, Moves.SANDSTORM ], - [ 32, Moves.DIG ], - [ 36, Moves.EARTH_POWER ], - [ 40, Moves.EARTHQUAKE ], - [ 44, Moves.FISSURE ], - ], - [Species.ALOLA_DUGTRIO]: [ - [ EVOLVE_MOVE, Moves.SAND_TOMB ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.GROWL ], - [ 1, Moves.TRI_ATTACK ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.NIGHT_SLASH ], - [ 1, Moves.ROTOTILLER ], - [ 12, Moves.MUD_SLAP ], - [ 16, Moves.BULLDOZE ], - [ 20, Moves.SUCKER_PUNCH ], - [ 24, Moves.IRON_HEAD ], - [ 30, Moves.SANDSTORM ], - [ 36, Moves.DIG ], - [ 42, Moves.EARTH_POWER ], - [ 48, Moves.EARTHQUAKE ], - [ 54, Moves.FISSURE ], - ], - [Species.ALOLA_MEOWTH]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.FAKE_OUT ], - [ 4, Moves.FEINT ], - [ 8, Moves.SCRATCH ], - [ 12, Moves.PAY_DAY ], - [ 16, Moves.BITE ], - [ 20, Moves.TAUNT ], - [ 24, Moves.ASSURANCE ], - [ 29, Moves.FURY_SWIPES ], - [ 32, Moves.SCREECH ], - [ 36, Moves.NIGHT_SLASH ], - [ 40, Moves.NASTY_PLOT ], - [ 44, Moves.PLAY_ROUGH ], - ], - [Species.ALOLA_PERSIAN]: [ - [ EVOLVE_MOVE, Moves.POWER_GEM ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.FEINT ], - [ 1, Moves.SWITCHEROO ], - [ 1, Moves.QUASH ], - [ 12, Moves.PAY_DAY ], - [ 16, Moves.BITE ], - [ 20, Moves.TAUNT ], - [ 24, Moves.ASSURANCE ], - [ 31, Moves.FURY_SWIPES ], - [ 36, Moves.SCREECH ], - [ 42, Moves.NIGHT_SLASH ], - [ 48, Moves.NASTY_PLOT ], - [ 54, Moves.PLAY_ROUGH ], - ], - [Species.ALOLA_GEODUDE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.DEFENSE_CURL ], - [ 4, Moves.CHARGE ], - [ 6, Moves.ROCK_POLISH ], - [ 10, Moves.ROLLOUT ], - [ 12, Moves.SPARK ], - [ 16, Moves.ROCK_THROW ], - [ 18, Moves.SMACK_DOWN ], - [ 22, Moves.THUNDER_PUNCH ], - [ 24, Moves.SELF_DESTRUCT ], - [ 28, Moves.STEALTH_ROCK ], - [ 30, Moves.ROCK_BLAST ], - [ 34, Moves.DISCHARGE ], - [ 36, Moves.EXPLOSION ], - [ 40, Moves.DOUBLE_EDGE ], - [ 42, Moves.STONE_EDGE ], - ], - [Species.ALOLA_GRAVELER]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.CHARGE ], - [ 1, Moves.ROCK_POLISH ], - [ 10, Moves.ROLLOUT ], - [ 12, Moves.SPARK ], - [ 16, Moves.ROCK_THROW ], - [ 18, Moves.SMACK_DOWN ], - [ 22, Moves.THUNDER_PUNCH ], - [ 24, Moves.SELF_DESTRUCT ], - [ 30, Moves.STEALTH_ROCK ], - [ 34, Moves.ROCK_BLAST ], - [ 40, Moves.DISCHARGE ], - [ 44, Moves.EXPLOSION ], - [ 50, Moves.DOUBLE_EDGE ], - [ 54, Moves.STONE_EDGE ], - ], - [Species.ALOLA_GOLEM]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.CHARGE ], - [ 1, Moves.ROCK_POLISH ], - [ 1, Moves.ROLLOUT ], // Previous Stage Move - [ 1, Moves.HEAVY_SLAM ], - [ 12, Moves.SPARK ], - [ 16, Moves.ROCK_THROW ], - [ 18, Moves.SMACK_DOWN ], - [ 22, Moves.THUNDER_PUNCH ], - [ 24, Moves.SELF_DESTRUCT ], - [ 30, Moves.STEALTH_ROCK ], - [ 34, Moves.ROCK_BLAST ], - [ 40, Moves.DISCHARGE ], - [ 44, Moves.EXPLOSION ], - [ 50, Moves.DOUBLE_EDGE ], - [ 54, Moves.STONE_EDGE ], - ], - [Species.ALOLA_GRIMER]: [ - [ 1, Moves.POUND ], - [ 1, Moves.POISON_GAS ], - [ 4, Moves.HARDEN ], - [ 7, Moves.BITE ], - [ 12, Moves.DISABLE ], - [ 15, Moves.ACID_SPRAY ], - [ 18, Moves.POISON_FANG ], - [ 21, Moves.MINIMIZE ], - [ 26, Moves.TOXIC ], - [ 29, Moves.KNOCK_OFF ], - [ 32, Moves.CRUNCH ], - [ 37, Moves.SCREECH ], - [ 40, Moves.GUNK_SHOT ], - [ 43, Moves.ACID_ARMOR ], - [ 46, Moves.BELCH ], - [ 48, Moves.MEMENTO ], - ], - [Species.ALOLA_MUK]: [ - [ 1, Moves.POUND ], - [ 1, Moves.BITE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.POISON_GAS ], - [ 12, Moves.DISABLE ], - [ 15, Moves.ACID_SPRAY ], - [ 18, Moves.POISON_FANG ], - [ 21, Moves.MINIMIZE ], - [ 26, Moves.TOXIC ], - [ 29, Moves.KNOCK_OFF ], - [ 32, Moves.CRUNCH ], - [ 37, Moves.SCREECH ], - [ 40, Moves.GUNK_SHOT ], - [ 46, Moves.ACID_ARMOR ], - [ 52, Moves.BELCH ], - [ 57, Moves.MEMENTO ], - ], - [Species.ALOLA_EXEGGUTOR]: [ - [ EVOLVE_MOVE, Moves.DRAGON_HAMMER ], - [ RELEARN_MOVE, Moves.GROWTH ], - [ 1, Moves.BARRAGE ], - [ 1, Moves.SEED_BOMB ], - [ 1, Moves.PSYSHOCK ], - [ 1, Moves.WOOD_HAMMER ], - [ 1, Moves.LEAF_STORM ], - [ 1, Moves.MEGA_DRAIN ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.SYNTHESIS ], - [ 1, Moves.BULLET_SEED ], - [ 1, Moves.GIGA_DRAIN ], - [ 1, Moves.EXTRASENSORY ], - [ 1, Moves.UPROAR ], - [ 1, Moves.WORRY_SEED ], - [ 1, Moves.SOLAR_BEAM ], - [ 1, Moves.ABSORB ], - [ 1, Moves.HYPNOSIS ], - [ 1, Moves.REFLECT ], - [ 1, Moves.LEECH_SEED ], - ], - [Species.ALOLA_MAROWAK]: [ - [ EVOLVE_MOVE, Moves.SHADOW_BONE ], - [ 1, Moves.BONE_CLUB ], - [ 1, Moves.HEADBUTT ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.FIRE_SPIN ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.FALSE_SWIPE ], - [ 1, Moves.RETALIATE ], - [ 12, Moves.FLAME_WHEEL ], - [ 16, Moves.HEX ], - [ 20, Moves.FLING ], - [ 24, Moves.STOMPING_TANTRUM ], - [ 31, Moves.BONE_RUSH ], - [ 36, Moves.WILL_O_WISP ], - [ 42, Moves.ENDEAVOR ], - [ 48, Moves.BONEMERANG ], - [ 54, Moves.THRASH ], - [ 60, Moves.FLARE_BLITZ ], - ], - [Species.ETERNAL_FLOETTE]: [ - [ 1, Moves.VINE_WHIP ], - [ 1, Moves.TACKLE ], - [ 1, Moves.FAIRY_WIND ], - [ 10, Moves.LUCKY_CHANT ], - [ 15, Moves.RAZOR_LEAF ], - [ 20, Moves.WISH ], - [ 25, Moves.MAGICAL_LEAF ], - [ 27, Moves.GRASSY_TERRAIN ], - [ 33, Moves.PETAL_BLIZZARD ], - [ 38, Moves.AROMATHERAPY ], - [ 43, Moves.MISTY_TERRAIN ], - [ 46, Moves.MOONBLAST ], - [ 50, Moves.LIGHT_OF_RUIN ], - [ 51, Moves.PETAL_DANCE ], - [ 58, Moves.SOLAR_BEAM ], - ], - [Species.GALAR_MEOWTH]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.FAKE_OUT ], - [ 4, Moves.HONE_CLAWS ], - [ 8, Moves.SCRATCH ], - [ 12, Moves.PAY_DAY ], - [ 16, Moves.METAL_CLAW ], - [ 20, Moves.TAUNT ], - [ 24, Moves.SWAGGER ], - [ 29, Moves.FURY_SWIPES ], - [ 32, Moves.SCREECH ], - [ 36, Moves.SLASH ], - [ 40, Moves.METAL_SOUND ], - [ 44, Moves.THRASH ], - ], - [Species.GALAR_PONYTA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 5, Moves.TAIL_WHIP ], - [ 10, Moves.CONFUSION ], - [ 15, Moves.FAIRY_WIND ], - [ 20, Moves.AGILITY ], - [ 25, Moves.PSYBEAM ], - [ 30, Moves.STOMP ], - [ 35, Moves.HEAL_PULSE ], - [ 41, Moves.TAKE_DOWN ], - [ 45, Moves.DAZZLING_GLEAM ], - [ 50, Moves.PSYCHIC ], - [ 55, Moves.HEALING_WISH ], - ], - [Species.GALAR_RAPIDASH]: [ - [ EVOLVE_MOVE, Moves.PSYCHO_CUT ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.MEGAHORN ], - [ 15, Moves.FAIRY_WIND ], - [ 20, Moves.AGILITY ], - [ 25, Moves.PSYBEAM ], - [ 30, Moves.STOMP ], - [ 35, Moves.HEAL_PULSE ], - [ 43, Moves.TAKE_DOWN ], - [ 49, Moves.DAZZLING_GLEAM ], - [ 56, Moves.PSYCHIC ], - [ 63, Moves.HEALING_WISH ], - ], - [Species.GALAR_SLOWPOKE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.CURSE ], - [ 3, Moves.GROWL ], - [ 6, Moves.ACID ], - [ 9, Moves.YAWN ], - [ 12, Moves.CONFUSION ], - [ 15, Moves.DISABLE ], - [ 18, Moves.WATER_PULSE ], - [ 21, Moves.HEADBUTT ], - [ 24, Moves.ZEN_HEADBUTT ], - [ 27, Moves.AMNESIA ], - [ 30, Moves.SURF ], - [ 33, Moves.SLACK_OFF ], - [ 36, Moves.PSYCHIC ], - [ 39, Moves.PSYCH_UP ], - [ 42, Moves.RAIN_DANCE ], - [ 45, Moves.HEAL_PULSE ], - ], - [Species.GALAR_SLOWBRO]: [ - [ EVOLVE_MOVE, Moves.SHELL_SIDE_ARM ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.ACID ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.CURSE ], - [ 9, Moves.YAWN ], - [ 12, Moves.CONFUSION ], - [ 15, Moves.DISABLE ], - [ 18, Moves.WATER_PULSE ], - [ 21, Moves.HEADBUTT ], - [ 24, Moves.ZEN_HEADBUTT ], - [ 27, Moves.AMNESIA ], - [ 30, Moves.SURF ], - [ 33, Moves.SLACK_OFF ], - [ 36, Moves.PSYCHIC ], - [ 39, Moves.PSYCH_UP ], - [ 42, Moves.RAIN_DANCE ], - [ 45, Moves.HEAL_PULSE ], - ], - [Species.GALAR_FARFETCHD]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.PECK ], - [ 5, Moves.LEER ], - [ 10, Moves.FURY_CUTTER ], - [ 15, Moves.ROCK_SMASH ], - [ 20, Moves.BRUTAL_SWING ], - [ 25, Moves.DETECT ], - [ 30, Moves.KNOCK_OFF ], - [ 35, Moves.DEFOG ], - [ 40, Moves.BRICK_BREAK ], - [ 45, Moves.SWORDS_DANCE ], - [ 50, Moves.SLAM ], - [ 55, Moves.LEAF_BLADE ], - [ 60, Moves.FINAL_GAMBIT ], - [ 65, Moves.BRAVE_BIRD ], - ], - [Species.GALAR_WEEZING]: [ - [ EVOLVE_MOVE, Moves.DOUBLE_HIT ], - [ 1, Moves.TACKLE ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.HAZE ], - [ 1, Moves.SMOG ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.HEAT_WAVE ], - [ 1, Moves.DEFOG ], - [ 1, Moves.AROMATIC_MIST ], - [ 1, Moves.STRANGE_STEAM ], - [ 12, Moves.CLEAR_SMOG ], - [ 16, Moves.ASSURANCE ], - [ 20, Moves.SLUDGE ], - [ 24, Moves.FAIRY_WIND ], - [ 28, Moves.SELF_DESTRUCT ], - [ 32, Moves.SLUDGE_BOMB ], - [ 38, Moves.TOXIC ], - [ 44, Moves.BELCH ], - [ 50, Moves.EXPLOSION ], - [ 56, Moves.MEMENTO ], - [ 62, Moves.DESTINY_BOND ], - [ 68, Moves.MISTY_TERRAIN ], - ], - [Species.GALAR_MR_MIME]: [ - [ 1, Moves.POUND ], - [ 1, Moves.BARRIER ], // Previous Stage Move - [ 1, Moves.TICKLE ], // Previous Stage Move - [ 1, Moves.MIMIC ], - [ 1, Moves.LIGHT_SCREEN ], - [ 1, Moves.REFLECT ], - [ 1, Moves.PROTECT ], - [ 1, Moves.SAFEGUARD ], - [ 1, Moves.BATON_PASS ], - [ 1, Moves.ENCORE ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.ROLE_PLAY ], - [ 1, Moves.RECYCLE ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.ICE_SHARD ], - [ 1, Moves.MISTY_TERRAIN ], - [ 1, Moves.DAZZLING_GLEAM ], - [ 12, Moves.CONFUSION ], - [ 16, Moves.ALLY_SWITCH ], - [ 20, Moves.ICY_WIND ], - [ 24, Moves.DOUBLE_KICK ], - [ 28, Moves.PSYBEAM ], - [ 32, Moves.HYPNOSIS ], - [ 36, Moves.MIRROR_COAT ], - [ 40, Moves.SUCKER_PUNCH ], - [ 44, Moves.FREEZE_DRY ], - [ 48, Moves.PSYCHIC ], - [ 52, Moves.TEETER_DANCE ], - ], - [Species.GALAR_ARTICUNO]: [ - [ 1, Moves.GUST ], - [ 5, Moves.CONFUSION ], - [ 10, Moves.REFLECT ], - [ 15, Moves.HYPNOSIS ], - [ 20, Moves.AGILITY ], - [ 25, Moves.ANCIENT_POWER ], - [ 30, Moves.TAILWIND ], - [ 35, Moves.PSYCHO_CUT ], - [ 40, Moves.RECOVER ], - [ 45, Moves.FREEZING_GLARE ], - [ 50, Moves.DREAM_EATER ], - [ 55, Moves.HURRICANE ], - [ 60, Moves.DOUBLE_TEAM ], - [ 65, Moves.FUTURE_SIGHT ], - [ 70, Moves.TRICK_ROOM ], - ], - [Species.GALAR_ZAPDOS]: [ - [ 1, Moves.PECK ], - [ 1, Moves.FOCUS_ENERGY ], - [ 5, Moves.ROCK_SMASH ], - [ 10, Moves.LIGHT_SCREEN ], - [ 15, Moves.PLUCK ], - [ 20, Moves.AGILITY ], - [ 25, Moves.ANCIENT_POWER ], - [ 30, Moves.BRICK_BREAK ], - [ 35, Moves.DRILL_PECK ], - [ 40, Moves.QUICK_GUARD ], - [ 45, Moves.THUNDEROUS_KICK ], - [ 50, Moves.BULK_UP ], - [ 55, Moves.COUNTER ], - [ 60, Moves.DETECT ], - [ 65, Moves.CLOSE_COMBAT ], - [ 70, Moves.REVERSAL ], - ], - [Species.GALAR_MOLTRES]: [ - [ 1, Moves.GUST ], - [ 1, Moves.LEER ], - [ 5, Moves.PAYBACK ], - [ 10, Moves.SAFEGUARD ], - [ 15, Moves.WING_ATTACK ], - [ 20, Moves.AGILITY ], - [ 25, Moves.ANCIENT_POWER ], - [ 30, Moves.SUCKER_PUNCH ], - [ 35, Moves.AIR_SLASH ], - [ 40, Moves.AFTER_YOU ], - [ 45, Moves.FIERY_WRATH ], - [ 50, Moves.NASTY_PLOT ], - [ 55, Moves.HURRICANE ], - [ 60, Moves.ENDURE ], - [ 65, Moves.MEMENTO ], - [ 70, Moves.SKY_ATTACK ], - ], - [Species.GALAR_SLOWKING]: [ - [ EVOLVE_MOVE, Moves.EERIE_SPELL ], - [ RELEARN_MOVE, Moves.FUTURE_SIGHT ], - [ RELEARN_MOVE, Moves.CHILLY_RECEPTION ], - [ RELEARN_MOVE, Moves.TOXIC ], - [ 1, Moves.POWER_GEM ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.SWAGGER ], - [ 1, Moves.TACKLE ], - [ 1, Moves.CURSE ], - [ 1, Moves.GROWL ], - [ 1, Moves.ACID ], - [ 9, Moves.YAWN ], - [ 12, Moves.CONFUSION ], - [ 15, Moves.DISABLE ], - [ 18, Moves.WATER_PULSE ], - [ 21, Moves.HEADBUTT ], - [ 24, Moves.ZEN_HEADBUTT ], - [ 27, Moves.AMNESIA ], - [ 30, Moves.SURF ], - [ 33, Moves.SLACK_OFF ], - [ 36, Moves.PSYCHIC ], - [ 39, Moves.PSYCH_UP ], - [ 42, Moves.RAIN_DANCE ], - [ 45, Moves.HEAL_PULSE ], - ], - [Species.GALAR_CORSOLA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 5, Moves.ASTONISH ], - [ 10, Moves.DISABLE ], - [ 15, Moves.SPITE ], - [ 20, Moves.ANCIENT_POWER ], - [ 25, Moves.HEX ], - [ 30, Moves.CURSE ], - [ 35, Moves.STRENGTH_SAP ], - [ 40, Moves.POWER_GEM ], - [ 45, Moves.NIGHT_SHADE ], - [ 50, Moves.GRUDGE ], - [ 55, Moves.MIRROR_COAT ], - ], - [Species.GALAR_ZIGZAGOON]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 3, Moves.SAND_ATTACK ], - [ 6, Moves.LICK ], - [ 9, Moves.SNARL ], - [ 12, Moves.HEADBUTT ], - [ 15, Moves.BABY_DOLL_EYES ], - [ 18, Moves.PIN_MISSILE ], - [ 21, Moves.REST ], - [ 24, Moves.TAKE_DOWN ], - [ 27, Moves.SCARY_FACE ], - [ 30, Moves.COUNTER ], - [ 33, Moves.TAUNT ], - [ 36, Moves.DOUBLE_EDGE ], - ], - [Species.GALAR_LINOONE]: [ - [ EVOLVE_MOVE, Moves.NIGHT_SLASH ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.PIN_MISSILE ], - [ 1, Moves.LEER ], - [ 1, Moves.LICK ], - [ 1, Moves.SWITCHEROO ], - [ 1, Moves.BABY_DOLL_EYES ], - [ 9, Moves.SNARL ], - [ 12, Moves.HEADBUTT ], - [ 15, Moves.HONE_CLAWS ], - [ 18, Moves.FURY_SWIPES ], - [ 23, Moves.REST ], - [ 28, Moves.TAKE_DOWN ], - [ 33, Moves.SCARY_FACE ], - [ 38, Moves.COUNTER ], - [ 43, Moves.TAUNT ], - [ 48, Moves.DOUBLE_EDGE ], - ], - [Species.GALAR_DARUMAKA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.POWDER_SNOW ], - [ 4, Moves.TAUNT ], - [ 8, Moves.BITE ], - [ 12, Moves.AVALANCHE ], - [ 16, Moves.WORK_UP ], - [ 20, Moves.ICE_FANG ], - [ 24, Moves.HEADBUTT ], - [ 28, Moves.ICE_PUNCH ], - [ 32, Moves.UPROAR ], - [ 36, Moves.BELLY_DRUM ], - [ 40, Moves.BLIZZARD ], - [ 44, Moves.THRASH ], - [ 48, Moves.SUPERPOWER ], - ], - [Species.GALAR_DARMANITAN]: [ - [ EVOLVE_MOVE, Moves.ICICLE_CRASH ], - [ 1, Moves.TACKLE ], - [ 1, Moves.BITE ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.TAUNT ], - [ 12, Moves.AVALANCHE ], - [ 16, Moves.WORK_UP ], - [ 20, Moves.ICE_FANG ], - [ 24, Moves.HEADBUTT ], - [ 28, Moves.ICE_PUNCH ], - [ 32, Moves.UPROAR ], - [ 38, Moves.BELLY_DRUM ], - [ 44, Moves.BLIZZARD ], - [ 50, Moves.THRASH ], - [ 56, Moves.SUPERPOWER ], - ], - [Species.GALAR_YAMASK]: [ - [ 1, Moves.PROTECT ], - [ 1, Moves.ASTONISH ], - [ 4, Moves.HAZE ], - [ 8, Moves.NIGHT_SHADE ], - [ 12, Moves.DISABLE ], - [ 16, Moves.BRUTAL_SWING ], - [ 20, Moves.CRAFTY_SHIELD ], - [ 24, Moves.HEX ], - [ 28, Moves.MEAN_LOOK ], - [ 32, Moves.SLAM ], - [ 36, Moves.CURSE ], - [ 40, Moves.SHADOW_BALL ], - [ 44, Moves.EARTHQUAKE ], - [ 48, Moves.GUARD_SPLIT ], - [ 48, Moves.POWER_SPLIT ], - [ 52, Moves.DESTINY_BOND ], - ], - [Species.GALAR_STUNFISK]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.METAL_CLAW ], - [ 5, Moves.ENDURE ], - [ 10, Moves.MUD_SHOT ], - [ 15, Moves.REVENGE ], - [ 20, Moves.METAL_SOUND ], - [ 25, Moves.SUCKER_PUNCH ], - [ 30, Moves.IRON_DEFENSE ], - [ 35, Moves.BOUNCE ], - [ 40, Moves.MUDDY_WATER ], - [ 45, Moves.SNAP_TRAP ], - [ 50, Moves.FLAIL ], - [ 55, Moves.FISSURE ], - ], - [Species.HISUI_GROWLITHE]: [ - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 4, Moves.HOWL ], - [ 8, Moves.BITE ], - [ 12, Moves.FLAME_WHEEL ], - [ 16, Moves.HELPING_HAND ], - [ 24, Moves.FIRE_FANG ], - [ 28, Moves.RETALIATE ], - [ 32, Moves.CRUNCH ], - [ 36, Moves.TAKE_DOWN ], - [ 40, Moves.FLAMETHROWER ], - [ 44, Moves.ROAR ], - [ 48, Moves.ROCK_SLIDE ], - [ 52, Moves.REVERSAL ], - [ 56, Moves.FLARE_BLITZ ], - ], - [Species.HISUI_ARCANINE]: [ - [ EVOLVE_MOVE, Moves.EXTREME_SPEED ], - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.LEER ], - [ 1, Moves.BITE ], - [ 1, Moves.ROAR ], - [ 1, Moves.EMBER ], - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.AGILITY ], - [ 1, Moves.ROCK_SLIDE ], - [ 1, Moves.FLAME_WHEEL ], - [ 1, Moves.REVERSAL ], - [ 1, Moves.CRUNCH ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.HOWL ], - [ 1, Moves.FLARE_BLITZ ], - [ 1, Moves.FIRE_FANG ], - [ 1, Moves.RETALIATE ], - [ 5, Moves.FLAMETHROWER ], - [ 64, Moves.RAGING_FURY ], - ], - [Species.HISUI_VOLTORB]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.CHARGE ], - [ 4, Moves.THUNDER_SHOCK ], - [ 6, Moves.STUN_SPORE ], - [ 9, Moves.BULLET_SEED ], - [ 11, Moves.ROLLOUT ], - [ 13, Moves.SCREECH ], - [ 16, Moves.CHARGE_BEAM ], - [ 20, Moves.SWIFT ], - [ 22, Moves.ELECTRO_BALL ], - [ 26, Moves.SELF_DESTRUCT ], - [ 29, Moves.ENERGY_BALL ], - [ 34, Moves.SEED_BOMB ], - [ 34, Moves.DISCHARGE ], - [ 41, Moves.EXPLOSION ], - [ 46, Moves.GYRO_BALL ], - [ 50, Moves.GRASSY_TERRAIN ], - ], - [Species.HISUI_ELECTRODE]: [ - [ EVOLVE_MOVE, Moves.CHLOROBLAST ], - [ 1, Moves.TACKLE ], - [ 1, Moves.CHARGE ], - [ 4, Moves.THUNDER_SHOCK ], - [ 6, Moves.STUN_SPORE ], - [ 9, Moves.BULLET_SEED ], - [ 11, Moves.ROLLOUT ], - [ 13, Moves.SCREECH ], - [ 16, Moves.CHARGE_BEAM ], - [ 20, Moves.SWIFT ], - [ 22, Moves.ELECTRO_BALL ], - [ 26, Moves.SELF_DESTRUCT ], - [ 29, Moves.ENERGY_BALL ], - [ 34, Moves.SEED_BOMB ], - [ 34, Moves.DISCHARGE ], - [ 41, Moves.EXPLOSION ], - [ 46, Moves.GYRO_BALL ], - [ 50, Moves.GRASSY_TERRAIN ], - ], - [Species.HISUI_TYPHLOSION]: [ - [ EVOLVE_MOVE, Moves.INFERNAL_PARADE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.ERUPTION ], - [ 1, Moves.GYRO_BALL ], - [ 13, Moves.QUICK_ATTACK ], - [ 20, Moves.FLAME_WHEEL ], - [ 24, Moves.DEFENSE_CURL ], - [ 31, Moves.SWIFT ], - [ 35, Moves.FLAME_CHARGE ], - [ 43, Moves.LAVA_PLUME ], - [ 48, Moves.FLAMETHROWER ], - [ 56, Moves.INFERNO ], - [ 61, Moves.ROLLOUT ], - [ 74, Moves.OVERHEAT ], - ], - [Species.HISUI_QWILFISH]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.POISON_STING ], - [ 4, Moves.HARDEN ], - [ 8, Moves.BITE ], - [ 12, Moves.FELL_STINGER ], - [ 16, Moves.MINIMIZE ], - [ 20, Moves.SPIKES ], - [ 24, Moves.BRINE ], - [ 28, Moves.BARB_BARRAGE ], - [ 32, Moves.PIN_MISSILE ], - [ 36, Moves.TOXIC_SPIKES ], - [ 40, Moves.STOCKPILE ], - [ 40, Moves.SPIT_UP ], - [ 44, Moves.TOXIC ], - [ 48, Moves.CRUNCH ], - [ 52, Moves.ACUPRESSURE ], - [ 56, Moves.DESTINY_BOND ], - ], - [Species.HISUI_SNEASEL]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.ROCK_SMASH ], - [ 6, Moves.TAUNT ], - [ 12, Moves.QUICK_ATTACK ], - [ 18, Moves.METAL_CLAW ], - [ 24, Moves.POISON_JAB ], - [ 30, Moves.BRICK_BREAK ], - [ 36, Moves.HONE_CLAWS ], - [ 42, Moves.SLASH ], - [ 48, Moves.AGILITY ], - [ 54, Moves.SCREECH ], - [ 60, Moves.CLOSE_COMBAT ], - ], - [Species.HISUI_SAMUROTT]: [ - [ EVOLVE_MOVE, Moves.CEASELESS_EDGE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.SOAK ], // Previous Stage Move - [ 1, Moves.SLASH ], - [ 1, Moves.MEGAHORN ], - [ 1, Moves.SUCKER_PUNCH ], - [ 13, Moves.FOCUS_ENERGY ], - [ 18, Moves.RAZOR_SHELL ], - [ 21, Moves.FURY_CUTTER ], - [ 25, Moves.WATER_PULSE ], - [ 29, Moves.AERIAL_ACE ], - [ 34, Moves.AQUA_JET ], - [ 39, Moves.ENCORE ], - [ 46, Moves.AQUA_TAIL ], - [ 51, Moves.RETALIATE ], - [ 58, Moves.SWORDS_DANCE ], - [ 63, Moves.HYDRO_PUMP ], - ], - [Species.HISUI_LILLIGANT]: [ - [ EVOLVE_MOVE, Moves.VICTORY_DANCE ], - [ 1, Moves.MEGA_KICK ], - [ 1, Moves.ABSORB ], - [ 1, Moves.MEGA_DRAIN ], - [ 1, Moves.LEECH_SEED ], - [ 1, Moves.GROWTH ], - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.SLEEP_POWDER ], - [ 1, Moves.GIGA_DRAIN ], - [ 1, Moves.CHARM ], // Previous Stage Move - [ 1, Moves.SYNTHESIS ], - [ 1, Moves.SUNNY_DAY ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.TEETER_DANCE ], - [ 1, Moves.MAGICAL_LEAF ], - [ 1, Moves.LEAF_BLADE ], - [ 1, Moves.ENERGY_BALL ], - [ 1, Moves.DEFOG ], - [ 1, Moves.LEAF_STORM ], - [ 1, Moves.ENTRAINMENT ], - [ 1, Moves.AFTER_YOU ], - [ 1, Moves.PETAL_BLIZZARD ], - [ 1, Moves.SOLAR_BLADE ], - [ 5, Moves.AXE_KICK ], - ], - [Species.HISUI_ZORUA]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 4, Moves.TORMENT ], - [ 8, Moves.HONE_CLAWS ], - [ 12, Moves.SHADOW_SNEAK ], - [ 16, Moves.CURSE ], - [ 20, Moves.TAUNT ], - [ 24, Moves.KNOCK_OFF ], - [ 28, Moves.SPITE ], - [ 32, Moves.AGILITY ], - [ 36, Moves.SHADOW_BALL ], - [ 40, Moves.BITTER_MALICE ], - [ 44, Moves.NASTY_PLOT ], - [ 48, Moves.FOUL_PLAY ], - ], - [Species.HISUI_ZOROARK]: [ - [ EVOLVE_MOVE, Moves.SHADOW_CLAW ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.TORMENT ], - [ 1, Moves.U_TURN ], - [ 1, Moves.HONE_CLAWS ], - [ 12, Moves.SHADOW_SNEAK ], - [ 16, Moves.CURSE ], - [ 20, Moves.TAUNT ], - [ 24, Moves.KNOCK_OFF ], - [ 28, Moves.SPITE ], - [ 34, Moves.AGILITY ], - [ 40, Moves.SHADOW_BALL ], - [ 46, Moves.BITTER_MALICE ], - [ 52, Moves.NASTY_PLOT ], - [ 58, Moves.FOUL_PLAY ], - ], - [Species.HISUI_BRAVIARY]: [ - [ EVOLVE_MOVE, Moves.ESPER_WING ], - [ RELEARN_MOVE, Moves.BRAVE_BIRD ], // Previous Stage Move - [ 1, Moves.WING_ATTACK ], - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 1, Moves.SKY_ATTACK ], - [ 1, Moves.SUPERPOWER ], - [ 1, Moves.HONE_CLAWS ], - [ 18, Moves.TAILWIND ], - [ 24, Moves.SCARY_FACE ], - [ 30, Moves.AERIAL_ACE ], - [ 36, Moves.SLASH ], - [ 42, Moves.WHIRLWIND ], - [ 48, Moves.CRUSH_CLAW ], - [ 57, Moves.AIR_SLASH ], - [ 64, Moves.DEFOG ], - [ 72, Moves.THRASH ], - [ 80, Moves.HURRICANE ], - ], - [Species.HISUI_SLIGGOO]: [ - [ EVOLVE_MOVE, Moves.SHELTER ], - [ 1, Moves.TACKLE ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.ABSORB ], - [ 1, Moves.ACID_ARMOR ], - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.BODY_SLAM ], // Previous Stage Move - [ 15, Moves.PROTECT ], - [ 20, Moves.FLAIL ], - [ 25, Moves.WATER_PULSE ], - [ 30, Moves.RAIN_DANCE ], - [ 35, Moves.DRAGON_PULSE ], - [ 43, Moves.CURSE ], - [ 49, Moves.IRON_HEAD ], - [ 56, Moves.MUDDY_WATER ], - ], - [Species.HISUI_GOODRA]: [ - [ EVOLVE_MOVE, Moves.IRON_TAIL ], - [ 1, Moves.TACKLE ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.ABSORB ], - [ 1, Moves.ACID_ARMOR ], // Previous Stage Move - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.FEINT ], - [ 1, Moves.ACID_SPRAY ], - [ 1, Moves.TEARFUL_LOOK ], - [ 1, Moves.SHELTER ], - [ 15, Moves.PROTECT ], - [ 20, Moves.FLAIL ], - [ 25, Moves.WATER_PULSE ], - [ 30, Moves.RAIN_DANCE ], - [ 35, Moves.DRAGON_PULSE ], - [ 43, Moves.CURSE ], - [ 49, Moves.BODY_SLAM ], - [ 49, Moves.IRON_HEAD ], - [ 58, Moves.MUDDY_WATER ], - [ 67, Moves.HEAVY_SLAM ], - ], - [Species.HISUI_AVALUGG]: [ - [ EVOLVE_MOVE, Moves.ROCK_SLIDE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.WIDE_GUARD ], - [ 9, Moves.CURSE ], - [ 12, Moves.ICY_WIND ], - [ 15, Moves.PROTECT ], - [ 18, Moves.AVALANCHE ], - [ 21, Moves.BITE ], - [ 24, Moves.ICE_FANG ], - [ 27, Moves.IRON_DEFENSE ], - [ 30, Moves.RECOVER ], - [ 33, Moves.CRUNCH ], - [ 36, Moves.TAKE_DOWN ], - [ 41, Moves.BLIZZARD ], - [ 46, Moves.DOUBLE_EDGE ], - [ 51, Moves.STONE_EDGE ], - [ 61, Moves.MOUNTAIN_GALE ], - ], - [Species.HISUI_DECIDUEYE]: [ - [ EVOLVE_MOVE, Moves.TRIPLE_ARROWS ], - [ RELEARN_MOVE, Moves.NASTY_PLOT ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.U_TURN ], - [ 1, Moves.ASTONISH ], // Previous Stage Move - [ 1, Moves.LEAF_STORM ], - [ 1, Moves.LEAFAGE ], - [ 9, Moves.PECK ], - [ 12, Moves.SHADOW_SNEAK ], - [ 15, Moves.RAZOR_LEAF ], - [ 20, Moves.SYNTHESIS ], - [ 25, Moves.PLUCK ], - [ 30, Moves.BULK_UP ], - [ 37, Moves.SUCKER_PUNCH ], - [ 44, Moves.LEAF_BLADE ], - [ 51, Moves.FEATHER_DANCE ], - [ 58, Moves.BRAVE_BIRD ], - ], - [Species.PALDEA_TAUROS]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 5, Moves.WORK_UP ], - [ 10, Moves.DOUBLE_KICK ], - [ 15, Moves.ASSURANCE ], - [ 20, Moves.HEADBUTT ], - [ 25, Moves.SCARY_FACE ], - [ 30, Moves.ZEN_HEADBUTT ], - [ 35, Moves.RAGING_BULL ], - [ 40, Moves.REST ], - [ 45, Moves.SWAGGER ], - [ 50, Moves.THRASH ], - [ 55, Moves.DOUBLE_EDGE ], - [ 60, Moves.CLOSE_COMBAT ], - ], - [Species.PALDEA_WOOPER]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.MUD_SHOT ], - [ 4, Moves.TACKLE ], - [ 8, Moves.POISON_TAIL ], - [ 12, Moves.TOXIC_SPIKES ], - [ 16, Moves.SLAM ], - [ 21, Moves.YAWN ], - [ 24, Moves.POISON_JAB ], - [ 28, Moves.SLUDGE_WAVE ], - [ 32, Moves.AMNESIA ], - [ 36, Moves.TOXIC ], - [ 40, Moves.EARTHQUAKE ], - ], - [Species.BLOODMOON_URSALUNA]: [ - [ RELEARN_MOVE, Moves.MOONLIGHT ], - [ 1, Moves.HEADLONG_RUSH ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.LICK ], - [ 8, Moves.FURY_SWIPES ], - [ 13, Moves.PAYBACK ], - [ 17, Moves.HARDEN ], - [ 22, Moves.SLASH ], - [ 25, Moves.PLAY_NICE ], - [ 35, Moves.SCARY_FACE ], - [ 41, Moves.REST ], - [ 41, Moves.SNORE ], - [ 48, Moves.EARTH_POWER ], - [ 56, Moves.MOONBLAST ], - [ 64, Moves.HAMMER_ARM ], - [ 70, Moves.BLOOD_MOON ], + [ RELEARN_MOVE, MoveId.SCRATCH ], + [ RELEARN_MOVE, MoveId.PLAY_NICE ], + [ RELEARN_MOVE, MoveId.WATER_GUN ], + [ RELEARN_MOVE, MoveId.WATER_SPORT ], + [ RELEARN_MOVE, MoveId.BITE ], + [ RELEARN_MOVE, MoveId.TAUNT ], + [ RELEARN_MOVE, MoveId.FLING ], + [ RELEARN_MOVE, MoveId.ACROBATICS ], + [ RELEARN_MOVE, MoveId.BRINE ], + [ RELEARN_MOVE, MoveId.RECYCLE ], + [ RELEARN_MOVE, MoveId.NATURAL_GIFT ], + [ RELEARN_MOVE, MoveId.CRUNCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LICK ], + [ 1, MoveId.FURY_SWIPES ], + [ 1, MoveId.SCALD ], + ], + [SpeciesId.MUNNA]: [ + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.STORED_POWER ], + [ 1, MoveId.PSYWAVE ], + [ 4, MoveId.HYPNOSIS ], + [ 8, MoveId.PSYBEAM ], + [ 12, MoveId.IMPRISON ], + [ 16, MoveId.MOONLIGHT ], + [ 20, MoveId.MAGIC_COAT ], + [ 24, MoveId.ZEN_HEADBUTT ], + [ 28, MoveId.CALM_MIND ], + [ 32, MoveId.YAWN ], + [ 36, MoveId.PSYCHIC ], + [ 40, MoveId.MOONBLAST ], + [ 44, MoveId.DREAM_EATER ], + [ 48, MoveId.FUTURE_SIGHT ], + [ 52, MoveId.WONDER_ROOM ], + ], + [SpeciesId.MUSHARNA]: [ + [ 1, MoveId.PSYWAVE ], // Previous Stage Move + [ 1, MoveId.PSYBEAM ], + [ 1, MoveId.PSYCHIC ], + [ 1, MoveId.HYPNOSIS ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.LUCKY_CHANT ], + [ 1, MoveId.DREAM_EATER ], + [ 1, MoveId.MOONLIGHT ], + [ 1, MoveId.FUTURE_SIGHT ], + [ 1, MoveId.MAGIC_COAT ], + [ 1, MoveId.YAWN ], + [ 1, MoveId.IMPRISON ], + [ 1, MoveId.CALM_MIND ], + [ 1, MoveId.ZEN_HEADBUTT ], + [ 1, MoveId.WONDER_ROOM ], + [ 1, MoveId.STORED_POWER ], + [ 1, MoveId.MOONBLAST ], + [ 1, MoveId.PSYCHIC_TERRAIN ], + ], + [SpeciesId.PIDOVE]: [ + [ 1, MoveId.GUST ], + [ 1, MoveId.GROWL ], + [ 4, MoveId.LEER ], + [ 8, MoveId.QUICK_ATTACK ], + [ 12, MoveId.TAUNT ], + [ 16, MoveId.AIR_CUTTER ], + [ 20, MoveId.SWAGGER ], + [ 24, MoveId.FEATHER_DANCE ], + [ 28, MoveId.DETECT ], + [ 32, MoveId.AIR_SLASH ], + [ 36, MoveId.ROOST ], + [ 40, MoveId.TAILWIND ], + [ 44, MoveId.SKY_ATTACK ], + ], + [SpeciesId.TRANQUILL]: [ + [ 1, MoveId.GUST ], + [ 1, MoveId.LEER ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.QUICK_ATTACK ], + [ 12, MoveId.TAUNT ], + [ 16, MoveId.AIR_CUTTER ], + [ 20, MoveId.SWAGGER ], + [ 26, MoveId.FEATHER_DANCE ], + [ 34, MoveId.DETECT ], + [ 38, MoveId.AIR_SLASH ], + [ 44, MoveId.ROOST ], + [ 50, MoveId.TAILWIND ], + [ 56, MoveId.SKY_ATTACK ], + ], + [SpeciesId.UNFEZANT]: [ + [ 1, MoveId.GUST ], + [ 1, MoveId.LEER ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.QUICK_ATTACK ], + [ 12, MoveId.TAUNT ], + [ 16, MoveId.AIR_CUTTER ], + [ 20, MoveId.SWAGGER ], + [ 26, MoveId.FEATHER_DANCE ], + [ 36, MoveId.DETECT ], + [ 42, MoveId.AIR_SLASH ], + [ 50, MoveId.ROOST ], + [ 58, MoveId.TAILWIND ], + [ 66, MoveId.SKY_ATTACK ], + ], + [SpeciesId.BLITZLE]: [ + [ 1, MoveId.QUICK_ATTACK ], + [ 4, MoveId.TAIL_WHIP ], + [ 8, MoveId.CHARGE ], + [ 11, MoveId.SHOCK_WAVE ], + [ 15, MoveId.THUNDER_WAVE ], + [ 18, MoveId.FLAME_CHARGE ], + [ 22, MoveId.SPARK ], + [ 25, MoveId.STOMP ], + [ 29, MoveId.DISCHARGE ], + [ 33, MoveId.AGILITY ], + [ 35, MoveId.WILD_CHARGE ], + [ 40, MoveId.THRASH ], + ], + [SpeciesId.ZEBSTRIKA]: [ + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.CHARGE ], + [ 1, MoveId.ION_DELUGE ], + [ 11, MoveId.SHOCK_WAVE ], + [ 18, MoveId.FLAME_CHARGE ], + [ 25, MoveId.SPARK ], + [ 31, MoveId.STOMP ], + [ 36, MoveId.DISCHARGE ], + [ 42, MoveId.AGILITY ], + [ 47, MoveId.WILD_CHARGE ], + [ 53, MoveId.THRASH ], + ], + [SpeciesId.ROGGENROLA]: [ + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 4, MoveId.HARDEN ], + [ 8, MoveId.STEALTH_ROCK ], + [ 12, MoveId.MUD_SLAP ], + [ 16, MoveId.SMACK_DOWN ], + [ 20, MoveId.IRON_DEFENSE ], + [ 24, MoveId.HEADBUTT ], + [ 28, MoveId.ROCK_SLIDE ], + [ 32, MoveId.ROCK_BLAST ], + [ 36, MoveId.SANDSTORM ], + [ 40, MoveId.STONE_EDGE ], + [ 44, MoveId.EXPLOSION ], + ], + [SpeciesId.BOLDORE]: [ + [ EVOLVE_MOVE, MoveId.POWER_GEM ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.STEALTH_ROCK ], + [ 12, MoveId.MUD_SLAP ], + [ 16, MoveId.SMACK_DOWN ], + [ 20, MoveId.IRON_DEFENSE ], + [ 24, MoveId.HEADBUTT ], + [ 30, MoveId.ROCK_SLIDE ], + [ 36, MoveId.ROCK_BLAST ], + [ 42, MoveId.SANDSTORM ], + [ 48, MoveId.STONE_EDGE ], + [ 54, MoveId.EXPLOSION ], + ], + [SpeciesId.GIGALITH]: [ + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.POWER_GEM ], + [ 1, MoveId.STEALTH_ROCK ], + [ 12, MoveId.MUD_SLAP ], + [ 16, MoveId.SMACK_DOWN ], + [ 20, MoveId.IRON_DEFENSE ], + [ 24, MoveId.HEADBUTT ], + [ 30, MoveId.ROCK_SLIDE ], + [ 36, MoveId.ROCK_BLAST ], + [ 42, MoveId.SANDSTORM ], + [ 48, MoveId.STONE_EDGE ], + [ 54, MoveId.EXPLOSION ], + ], + [SpeciesId.WOOBAT]: [ + [ 1, MoveId.GUST ], + [ 1, MoveId.ATTRACT ], + [ 5, MoveId.CONFUSION ], + [ 10, MoveId.ENDEAVOR ], + [ 15, MoveId.AIR_CUTTER ], + [ 20, MoveId.IMPRISON ], + [ 25, MoveId.ASSURANCE ], + [ 30, MoveId.AMNESIA ], + [ 35, MoveId.AIR_SLASH ], + [ 40, MoveId.PSYCHIC ], + [ 45, MoveId.CALM_MIND ], + [ 50, MoveId.FUTURE_SIGHT ], + [ 55, MoveId.SIMPLE_BEAM ], + ], + [SpeciesId.SWOOBAT]: [ + [ 1, MoveId.GUST ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.ATTRACT ], + [ 1, MoveId.ENDEAVOR ], + [ 15, MoveId.AIR_CUTTER ], + [ 20, MoveId.IMPRISON ], + [ 25, MoveId.ASSURANCE ], + [ 30, MoveId.AMNESIA ], + [ 35, MoveId.AIR_SLASH ], + [ 40, MoveId.PSYCHIC ], + [ 45, MoveId.CALM_MIND ], + [ 50, MoveId.FUTURE_SIGHT ], + [ 55, MoveId.SIMPLE_BEAM ], + ], + [SpeciesId.DRILBUR]: [ + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.MUD_SPORT ], + [ 4, MoveId.SCRATCH ], + [ 8, MoveId.HONE_CLAWS ], + [ 12, MoveId.FURY_SWIPES ], + [ 16, MoveId.METAL_CLAW ], + [ 20, MoveId.SANDSTORM ], + [ 24, MoveId.CRUSH_CLAW ], + [ 28, MoveId.ROCK_SLIDE ], + [ 32, MoveId.DIG ], + [ 36, MoveId.SWORDS_DANCE ], + [ 40, MoveId.DRILL_RUN ], + [ 44, MoveId.EARTHQUAKE ], + [ 48, MoveId.FISSURE ], + ], + [SpeciesId.EXCADRILL]: [ + [ EVOLVE_MOVE, MoveId.HORN_DRILL ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.MUD_SPORT ], + [ 1, MoveId.ROTOTILLER ], + [ 1, MoveId.HONE_CLAWS ], + [ 12, MoveId.FURY_SWIPES ], + [ 16, MoveId.METAL_CLAW ], + [ 20, MoveId.SANDSTORM ], + [ 24, MoveId.CRUSH_CLAW ], + [ 28, MoveId.ROCK_SLIDE ], + [ 34, MoveId.DIG ], + [ 40, MoveId.SWORDS_DANCE ], + [ 46, MoveId.DRILL_RUN ], + [ 52, MoveId.EARTHQUAKE ], + [ 58, MoveId.FISSURE ], + ], + [SpeciesId.AUDINO]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.PLAY_NICE ], + [ 4, MoveId.DISARMING_VOICE ], + [ 9, MoveId.BABY_DOLL_EYES ], + [ 12, MoveId.HELPING_HAND ], + [ 16, MoveId.GROWL ], + [ 20, MoveId.ZEN_HEADBUTT ], + [ 24, MoveId.LIFE_DEW ], + [ 28, MoveId.AFTER_YOU ], + [ 32, MoveId.TAKE_DOWN ], + [ 36, MoveId.SIMPLE_BEAM ], + [ 40, MoveId.HYPER_VOICE ], + [ 44, MoveId.HEAL_PULSE ], + [ 48, MoveId.DOUBLE_EDGE ], + [ 52, MoveId.ENTRAINMENT ], + [ 56, MoveId.MISTY_TERRAIN ], + [ 60, MoveId.LAST_RESORT ], + ], + [SpeciesId.TIMBURR]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.LEER ], + [ 4, MoveId.LOW_KICK ], + [ 8, MoveId.ROCK_THROW ], + [ 12, MoveId.FOCUS_ENERGY ], + [ 16, MoveId.BULK_UP ], + [ 20, MoveId.ROCK_SLIDE ], + [ 24, MoveId.SLAM ], + [ 28, MoveId.SCARY_FACE ], + [ 32, MoveId.DYNAMIC_PUNCH ], + [ 36, MoveId.HAMMER_ARM ], + [ 40, MoveId.STONE_EDGE ], + [ 44, MoveId.SUPERPOWER ], + [ 48, MoveId.FOCUS_PUNCH ], + ], + [SpeciesId.GURDURR]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LOW_KICK ], + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.BIDE ], + [ 12, MoveId.FOCUS_ENERGY ], + [ 16, MoveId.BULK_UP ], + [ 20, MoveId.ROCK_SLIDE ], + [ 24, MoveId.SLAM ], + [ 30, MoveId.SCARY_FACE ], + [ 36, MoveId.DYNAMIC_PUNCH ], + [ 42, MoveId.HAMMER_ARM ], + [ 48, MoveId.STONE_EDGE ], + [ 54, MoveId.SUPERPOWER ], + [ 60, MoveId.FOCUS_PUNCH ], + ], + [SpeciesId.CONKELDURR]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LOW_KICK ], + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.BIDE ], + [ 12, MoveId.FOCUS_ENERGY ], + [ 16, MoveId.BULK_UP ], + [ 20, MoveId.ROCK_SLIDE ], + [ 24, MoveId.SLAM ], + [ 30, MoveId.SCARY_FACE ], + [ 36, MoveId.DYNAMIC_PUNCH ], + [ 42, MoveId.HAMMER_ARM ], + [ 48, MoveId.STONE_EDGE ], + [ 54, MoveId.SUPERPOWER ], + [ 60, MoveId.FOCUS_PUNCH ], + ], + [SpeciesId.TYMPOLE]: [ + [ 1, MoveId.BUBBLE ], //USUM + [ 1, MoveId.GROWL ], + [ 1, MoveId.ECHOED_VOICE ], + [ 4, MoveId.ACID ], + [ 8, MoveId.SUPERSONIC ], + [ 12, MoveId.MUD_SHOT ], + [ 16, MoveId.ROUND ], + [ 20, MoveId.BUBBLE_BEAM ], + [ 24, MoveId.FLAIL ], + [ 28, MoveId.UPROAR ], + [ 32, MoveId.AQUA_RING ], + [ 36, MoveId.HYPER_VOICE ], + [ 40, MoveId.MUDDY_WATER ], + [ 44, MoveId.RAIN_DANCE ], + [ 48, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.PALPITOAD]: [ + [ 1, MoveId.BUBBLE ], //USUM + [ 1, MoveId.GROWL ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.ACID ], + [ 1, MoveId.ECHOED_VOICE ], + [ 12, MoveId.MUD_SHOT ], + [ 16, MoveId.ROUND ], + [ 20, MoveId.BUBBLE_BEAM ], + [ 24, MoveId.FLAIL ], + [ 30, MoveId.UPROAR ], + [ 37, MoveId.AQUA_RING ], + [ 42, MoveId.HYPER_VOICE ], + [ 48, MoveId.MUDDY_WATER ], + [ 54, MoveId.RAIN_DANCE ], + [ 60, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.SEISMITOAD]: [ + [ EVOLVE_MOVE, MoveId.DRAIN_PUNCH ], + [ 1, MoveId.BUBBLE ], //USUM + [ 1, MoveId.GROWL ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.ACID ], + [ 1, MoveId.GASTRO_ACID ], + [ 1, MoveId.ECHOED_VOICE ], + [ 12, MoveId.MUD_SHOT ], + [ 16, MoveId.ROUND ], + [ 20, MoveId.BUBBLE_BEAM ], + [ 24, MoveId.FLAIL ], + [ 30, MoveId.UPROAR ], + [ 39, MoveId.AQUA_RING ], + [ 46, MoveId.HYPER_VOICE ], + [ 54, MoveId.MUDDY_WATER ], + [ 62, MoveId.RAIN_DANCE ], + [ 70, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.THROH]: [ + [ 1, MoveId.ROCK_SMASH ], // Custom + [ 1, MoveId.LEER ], + [ 1, MoveId.BIDE ], + [ 1, MoveId.MAT_BLOCK ], + [ 1, MoveId.BIND ], + [ 5, MoveId.FOCUS_ENERGY ], + [ 10, MoveId.CIRCLE_THROW ], + [ 15, MoveId.WIDE_GUARD ], + [ 20, MoveId.REVENGE ], + [ 25, MoveId.BULK_UP ], + [ 30, MoveId.STORM_THROW ], + [ 35, MoveId.VITAL_THROW ], + [ 40, MoveId.SEISMIC_TOSS ], + [ 45, MoveId.ENDURE ], + [ 50, MoveId.REVERSAL ], + [ 55, MoveId.SUPERPOWER ], + ], + [SpeciesId.SAWK]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.ROCK_SMASH ], + [ 1, MoveId.BIDE ], + [ 5, MoveId.FOCUS_ENERGY ], + [ 10, MoveId.DOUBLE_KICK ], + [ 15, MoveId.QUICK_GUARD ], + [ 20, MoveId.LOW_SWEEP ], + [ 25, MoveId.BULK_UP ], + [ 30, MoveId.RETALIATE ], + [ 35, MoveId.BRICK_BREAK ], + [ 40, MoveId.COUNTER ], + [ 45, MoveId.ENDURE ], + [ 50, MoveId.REVERSAL ], + [ 55, MoveId.CLOSE_COMBAT ], + ], + [SpeciesId.SEWADDLE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.STRING_SHOT ], + [ 8, MoveId.BUG_BITE ], + [ 15, MoveId.RAZOR_LEAF ], + [ 22, MoveId.STRUGGLE_BUG ], + [ 29, MoveId.ENDURE ], + [ 31, MoveId.STICKY_WEB ], + [ 36, MoveId.BUG_BUZZ ], + [ 43, MoveId.FLAIL ], + ], + [SpeciesId.SWADLOON]: [ + [ EVOLVE_MOVE, MoveId.PROTECT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.RAZOR_LEAF ], + [ 1, MoveId.STRING_SHOT ], + [ 1, MoveId.BUG_BITE ], + [ 1, MoveId.GRASS_WHISTLE ], + [ 22, MoveId.STRUGGLE_BUG ], + [ 29, MoveId.ENDURE ], + [ 31, MoveId.STICKY_WEB ], + [ 36, MoveId.BUG_BUZZ ], + [ 43, MoveId.FLAIL ], + ], + [SpeciesId.LEAVANNY]: [ + [ EVOLVE_MOVE, MoveId.SLASH ], + [ RELEARN_MOVE, MoveId.BUG_BITE ], + [ RELEARN_MOVE, MoveId.STICKY_WEB ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.BUG_BUZZ ], // Previous Stage Move + [ 1, MoveId.PROTECT ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.RAZOR_LEAF ], + [ 1, MoveId.STRING_SHOT ], + [ 1, MoveId.GRASS_WHISTLE ], // Previous Stage Move + [ 1, MoveId.ENDURE ], // Previous Stage Move + [ 1, MoveId.FLAIL ], // Previous Stage Move + [ 1, MoveId.FALSE_SWIPE ], + [ 22, MoveId.STRUGGLE_BUG ], + [ 29, MoveId.FELL_STINGER ], + [ 32, MoveId.HELPING_HAND ], + [ 36, MoveId.LEAF_BLADE ], + [ 39, MoveId.X_SCISSOR ], + [ 43, MoveId.ENTRAINMENT ], + [ 46, MoveId.SWORDS_DANCE ], + [ 50, MoveId.LEAF_STORM ], + ], + [SpeciesId.VENIPEDE]: [ + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.DEFENSE_CURL ], + [ 4, MoveId.ROLLOUT ], + [ 8, MoveId.PROTECT ], + [ 12, MoveId.POISON_TAIL ], + [ 16, MoveId.SCREECH ], + [ 20, MoveId.BUG_BITE ], + [ 24, MoveId.VENOSHOCK ], + [ 28, MoveId.TAKE_DOWN ], + [ 32, MoveId.AGILITY ], + [ 36, MoveId.TOXIC ], + [ 40, MoveId.VENOM_DRENCH ], + [ 44, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.WHIRLIPEDE]: [ + [ EVOLVE_MOVE, MoveId.IRON_DEFENSE ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.ROLLOUT ], + [ 12, MoveId.POISON_TAIL ], + [ 16, MoveId.SCREECH ], + [ 20, MoveId.BUG_BITE ], + [ 26, MoveId.VENOSHOCK ], + [ 32, MoveId.TAKE_DOWN ], + [ 38, MoveId.AGILITY ], + [ 44, MoveId.TOXIC ], + [ 50, MoveId.VENOM_DRENCH ], + [ 56, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.SCOLIPEDE]: [ + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.ROLLOUT ], + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.IRON_DEFENSE ], + [ 12, MoveId.POISON_TAIL ], + [ 16, MoveId.SCREECH ], + [ 20, MoveId.BUG_BITE ], + [ 26, MoveId.VENOSHOCK ], + [ 34, MoveId.TAKE_DOWN ], + [ 42, MoveId.AGILITY ], + [ 50, MoveId.TOXIC ], + [ 58, MoveId.VENOM_DRENCH ], + [ 66, MoveId.DOUBLE_EDGE ], + [ 74, MoveId.MEGAHORN ], + ], + [SpeciesId.COTTONEE]: [ + [ 1, MoveId.ABSORB ], + [ 1, MoveId.HELPING_HAND ], + [ 3, MoveId.FAIRY_WIND ], + [ 6, MoveId.STUN_SPORE ], + [ 12, MoveId.MEGA_DRAIN ], + [ 15, MoveId.RAZOR_LEAF ], + [ 18, MoveId.GROWTH ], + [ 21, MoveId.POISON_POWDER ], + [ 24, MoveId.GIGA_DRAIN ], + [ 27, MoveId.CHARM ], + [ 30, MoveId.LEECH_SEED ], + [ 33, MoveId.COTTON_SPORE ], + [ 36, MoveId.ENERGY_BALL ], + [ 39, MoveId.SUNNY_DAY ], + [ 42, MoveId.ENDEAVOR ], + [ 45, MoveId.COTTON_GUARD ], + [ 48, MoveId.SOLAR_BEAM ], + ], + [SpeciesId.WHIMSICOTT]: [ + [ 1, MoveId.GUST ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.MEGA_DRAIN ], + [ 1, MoveId.LEECH_SEED ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.RAZOR_LEAF ], + [ 1, MoveId.SOLAR_BEAM ], + [ 1, MoveId.POISON_POWDER ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.COTTON_SPORE ], + [ 1, MoveId.GIGA_DRAIN ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.SUNNY_DAY ], + [ 1, MoveId.MEMENTO ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.ENDEAVOR ], + [ 1, MoveId.TAILWIND ], + [ 1, MoveId.ENERGY_BALL ], + [ 1, MoveId.COTTON_GUARD ], + [ 1, MoveId.HURRICANE ], + [ 1, MoveId.FAIRY_WIND ], + [ 1, MoveId.MOONBLAST ], + ], + [SpeciesId.PETILIL]: [ + [ 1, MoveId.ABSORB ], + [ 1, MoveId.GROWTH ], + [ 3, MoveId.HELPING_HAND ], + [ 6, MoveId.STUN_SPORE ], + [ 9, MoveId.MEGA_DRAIN ], + [ 12, MoveId.CHARM ], + [ 15, MoveId.MAGICAL_LEAF ], + [ 18, MoveId.SLEEP_POWDER ], + [ 21, MoveId.GIGA_DRAIN ], + [ 24, MoveId.LEECH_SEED ], + [ 27, MoveId.AFTER_YOU ], + [ 30, MoveId.ENERGY_BALL ], + [ 33, MoveId.SYNTHESIS ], + [ 36, MoveId.SUNNY_DAY ], + [ 39, MoveId.ENTRAINMENT ], + [ 42, MoveId.LEAF_STORM ], + ], + [SpeciesId.LILLIGANT]: [ + [ EVOLVE_MOVE, MoveId.PETAL_DANCE ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.MEGA_DRAIN ], + [ 1, MoveId.LEECH_SEED ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.SLEEP_POWDER ], + [ 1, MoveId.GIGA_DRAIN ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.SYNTHESIS ], + [ 1, MoveId.SUNNY_DAY ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.TEETER_DANCE ], + [ 1, MoveId.ENERGY_BALL ], + [ 1, MoveId.LEAF_STORM ], + [ 1, MoveId.QUIVER_DANCE ], + [ 1, MoveId.ENTRAINMENT ], + [ 1, MoveId.AFTER_YOU ], + [ 1, MoveId.PETAL_BLIZZARD ], + [ 5, MoveId.MAGICAL_LEAF ], + ], + [SpeciesId.BASCULIN]: [ + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_GUN ], + [ 4, MoveId.TACKLE ], + [ 8, MoveId.FLAIL ], + [ 12, MoveId.AQUA_JET ], + [ 16, MoveId.BITE ], + [ 20, MoveId.SCARY_FACE ], + [ 24, MoveId.HEADBUTT ], + [ 28, MoveId.SOAK ], + [ 32, MoveId.CRUNCH ], + [ 36, MoveId.TAKE_DOWN ], + [ 40, MoveId.FINAL_GAMBIT ], + [ 44, MoveId.WAVE_CRASH ], + [ 48, MoveId.THRASH ], + [ 52, MoveId.DOUBLE_EDGE ], + [ 56, MoveId.HEAD_SMASH ], + ], + [SpeciesId.SANDILE]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.POWER_TRIP ], + [ 3, MoveId.SAND_ATTACK ], + [ 6, MoveId.HONE_CLAWS ], + [ 9, MoveId.SAND_TOMB ], + [ 12, MoveId.SCARY_FACE ], + [ 15, MoveId.BITE ], + [ 18, MoveId.TORMENT ], + [ 21, MoveId.DIG ], + [ 24, MoveId.SWAGGER ], + [ 27, MoveId.CRUNCH ], + [ 30, MoveId.SANDSTORM ], + [ 33, MoveId.FOUL_PLAY ], + [ 36, MoveId.EARTHQUAKE ], + [ 39, MoveId.THRASH ], + ], + [SpeciesId.KROKOROK]: [ + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.LEER ], + [ 1, MoveId.HONE_CLAWS ], + [ 1, MoveId.POWER_TRIP ], + [ 9, MoveId.SAND_TOMB ], + [ 12, MoveId.SCARY_FACE ], + [ 15, MoveId.BITE ], + [ 18, MoveId.TORMENT ], + [ 21, MoveId.DIG ], + [ 24, MoveId.SWAGGER ], + [ 27, MoveId.CRUNCH ], + [ 32, MoveId.SANDSTORM ], + [ 35, MoveId.FOUL_PLAY ], + [ 42, MoveId.EARTHQUAKE ], + [ 47, MoveId.THRASH ], + ], + [SpeciesId.KROOKODILE]: [ + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.LEER ], + [ 1, MoveId.HONE_CLAWS ], + [ 1, MoveId.POWER_TRIP ], + [ 9, MoveId.SAND_TOMB ], + [ 12, MoveId.SCARY_FACE ], + [ 15, MoveId.BITE ], + [ 18, MoveId.TORMENT ], + [ 21, MoveId.DIG ], + [ 24, MoveId.SWAGGER ], + [ 27, MoveId.CRUNCH ], + [ 32, MoveId.SANDSTORM ], + [ 35, MoveId.FOUL_PLAY ], + [ 44, MoveId.EARTHQUAKE ], + [ 51, MoveId.THRASH ], + [ 58, MoveId.OUTRAGE ], + ], + [SpeciesId.DARUMAKA]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.EMBER ], + [ 4, MoveId.TAUNT ], + [ 8, MoveId.BITE ], + [ 12, MoveId.INCINERATE ], + [ 16, MoveId.WORK_UP ], + [ 20, MoveId.FIRE_FANG ], + [ 24, MoveId.HEADBUTT ], + [ 28, MoveId.FIRE_PUNCH ], + [ 32, MoveId.UPROAR ], + [ 36, MoveId.BELLY_DRUM ], + [ 40, MoveId.FLARE_BLITZ ], + [ 44, MoveId.THRASH ], + [ 48, MoveId.SUPERPOWER ], + ], + [SpeciesId.DARMANITAN]: [ + [ EVOLVE_MOVE, MoveId.HAMMER_ARM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.BITE ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.TAUNT ], + [ 12, MoveId.INCINERATE ], + [ 16, MoveId.WORK_UP ], + [ 20, MoveId.FIRE_FANG ], + [ 24, MoveId.HEADBUTT ], + [ 28, MoveId.FIRE_PUNCH ], + [ 32, MoveId.UPROAR ], + [ 38, MoveId.BELLY_DRUM ], + [ 44, MoveId.FLARE_BLITZ ], + [ 50, MoveId.THRASH ], + [ 56, MoveId.SUPERPOWER ], + ], + [SpeciesId.MARACTUS]: [ + [ 1, MoveId.PECK ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.INGRAIN ], + [ 1, MoveId.AFTER_YOU ], + [ 1, MoveId.SPIKY_SHIELD ], + [ 4, MoveId.GROWTH ], + [ 8, MoveId.MEGA_DRAIN ], + [ 12, MoveId.LEECH_SEED ], + [ 16, MoveId.SUCKER_PUNCH ], + [ 20, MoveId.PIN_MISSILE ], + [ 24, MoveId.GIGA_DRAIN ], + [ 28, MoveId.SWEET_SCENT ], + [ 32, MoveId.SYNTHESIS ], + [ 36, MoveId.PETAL_BLIZZARD ], + [ 40, MoveId.COTTON_SPORE ], + [ 44, MoveId.SUNNY_DAY ], + [ 48, MoveId.SOLAR_BEAM ], + [ 52, MoveId.ACUPRESSURE ], + [ 56, MoveId.PETAL_DANCE ], + [ 60, MoveId.COTTON_GUARD ], + ], + [SpeciesId.DWEBBLE]: [ + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.FURY_CUTTER ], + [ 4, MoveId.WITHDRAW ], + [ 8, MoveId.SMACK_DOWN ], + [ 12, MoveId.BUG_BITE ], + [ 16, MoveId.FLAIL ], + [ 20, MoveId.SLASH ], + [ 24, MoveId.ROCK_SLIDE ], + [ 28, MoveId.STEALTH_ROCK ], + [ 32, MoveId.ROCK_BLAST ], + [ 36, MoveId.X_SCISSOR ], + [ 40, MoveId.ROCK_POLISH ], + [ 44, MoveId.SHELL_SMASH ], + [ 48, MoveId.ROCK_WRECKER ], + ], + [SpeciesId.CRUSTLE]: [ + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.SMACK_DOWN ], + [ 12, MoveId.BUG_BITE ], + [ 16, MoveId.FLAIL ], + [ 20, MoveId.SLASH ], + [ 24, MoveId.ROCK_SLIDE ], + [ 28, MoveId.STEALTH_ROCK ], + [ 32, MoveId.ROCK_BLAST ], + [ 38, MoveId.X_SCISSOR ], + [ 44, MoveId.ROCK_POLISH ], + [ 50, MoveId.SHELL_SMASH ], + [ 56, MoveId.ROCK_WRECKER ], + ], + [SpeciesId.SCRAGGY]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.LOW_KICK ], + [ 4, MoveId.PAYBACK ], + [ 8, MoveId.HEADBUTT ], + [ 12, MoveId.SAND_ATTACK ], + [ 16, MoveId.FACADE ], + [ 20, MoveId.PROTECT ], + [ 24, MoveId.BEAT_UP ], + [ 28, MoveId.SCARY_FACE ], + [ 32, MoveId.BRICK_BREAK ], + [ 36, MoveId.SWAGGER ], + [ 40, MoveId.CRUNCH ], + [ 44, MoveId.HIGH_JUMP_KICK ], + [ 48, MoveId.FOCUS_PUNCH ], + [ 52, MoveId.HEAD_SMASH ], + ], + [SpeciesId.SCRAFTY]: [ + [ 1, MoveId.HEADBUTT ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LOW_KICK ], + [ 1, MoveId.PAYBACK ], + [ 1, MoveId.FEINT_ATTACK ], + [ 12, MoveId.SAND_ATTACK ], + [ 16, MoveId.FACADE ], + [ 20, MoveId.PROTECT ], + [ 24, MoveId.BEAT_UP ], + [ 28, MoveId.SCARY_FACE ], + [ 32, MoveId.BRICK_BREAK ], + [ 36, MoveId.SWAGGER ], + [ 42, MoveId.CRUNCH ], + [ 48, MoveId.HIGH_JUMP_KICK ], + [ 54, MoveId.FOCUS_PUNCH ], + [ 60, MoveId.HEAD_SMASH ], + ], + [SpeciesId.SIGILYPH]: [ + [ 1, MoveId.GUST ], + [ 1, MoveId.CONFUSION ], + [ 5, MoveId.GRAVITY ], + [ 10, MoveId.HYPNOSIS ], + [ 15, MoveId.AIR_CUTTER ], + [ 20, MoveId.PSYBEAM ], + [ 25, MoveId.WHIRLWIND ], + [ 30, MoveId.COSMIC_POWER ], + [ 35, MoveId.AIR_SLASH ], + [ 40, MoveId.PSYCHIC ], + [ 45, MoveId.TAILWIND ], + [ 50, MoveId.LIGHT_SCREEN ], + [ 50, MoveId.REFLECT ], + [ 55, MoveId.SKY_ATTACK ], + [ 60, MoveId.SKILL_SWAP ], + ], + [SpeciesId.YAMASK]: [ + [ 1, MoveId.PROTECT ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.HEAL_BLOCK ], + [ 4, MoveId.HAZE ], + [ 8, MoveId.NIGHT_SHADE ], + [ 12, MoveId.DISABLE ], + [ 16, MoveId.WILL_O_WISP ], + [ 20, MoveId.CRAFTY_SHIELD ], + [ 24, MoveId.HEX ], + [ 28, MoveId.MEAN_LOOK ], + [ 32, MoveId.GRUDGE ], + [ 36, MoveId.CURSE ], + [ 40, MoveId.SHADOW_BALL ], + [ 44, MoveId.DARK_PULSE ], + [ 48, MoveId.GUARD_SPLIT ], + [ 48, MoveId.POWER_SPLIT ], + [ 52, MoveId.DESTINY_BOND ], + ], + [SpeciesId.COFAGRIGUS]: [ + [ EVOLVE_MOVE, MoveId.SHADOW_CLAW ], + [ 1, MoveId.NIGHT_SHADE ], + [ 1, MoveId.HAZE ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.SCARY_FACE ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.HEAL_BLOCK ], + [ 12, MoveId.DISABLE ], + [ 16, MoveId.WILL_O_WISP ], + [ 20, MoveId.CRAFTY_SHIELD ], + [ 24, MoveId.HEX ], + [ 28, MoveId.MEAN_LOOK ], + [ 32, MoveId.GRUDGE ], + [ 38, MoveId.CURSE ], + [ 44, MoveId.SHADOW_BALL ], + [ 50, MoveId.DARK_PULSE ], + [ 56, MoveId.GUARD_SPLIT ], + [ 56, MoveId.POWER_SPLIT ], + [ 62, MoveId.DESTINY_BOND ], + ], + [SpeciesId.TIRTOUGA]: [ + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.BIDE ], + [ 3, MoveId.PROTECT ], + [ 6, MoveId.AQUA_JET ], + [ 9, MoveId.SMACK_DOWN ], + [ 12, MoveId.ANCIENT_POWER ], + [ 15, MoveId.BITE ], + [ 18, MoveId.WIDE_GUARD ], + [ 21, MoveId.BRINE ], + [ 24, MoveId.ROCK_SLIDE ], + [ 27, MoveId.CRUNCH ], + [ 30, MoveId.CURSE ], + [ 33, MoveId.IRON_DEFENSE ], + [ 36, MoveId.AQUA_TAIL ], + [ 39, MoveId.RAIN_DANCE ], + [ 42, MoveId.HYDRO_PUMP ], + [ 45, MoveId.SHELL_SMASH ], + ], + [SpeciesId.CARRACOSTA]: [ + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.AQUA_JET ], + [ 1, MoveId.BIDE ], + [ 9, MoveId.SMACK_DOWN ], + [ 12, MoveId.ANCIENT_POWER ], + [ 15, MoveId.BITE ], + [ 18, MoveId.WIDE_GUARD ], + [ 21, MoveId.BRINE ], + [ 24, MoveId.ROCK_SLIDE ], + [ 27, MoveId.CRUNCH ], + [ 30, MoveId.CURSE ], + [ 33, MoveId.IRON_DEFENSE ], + [ 36, MoveId.AQUA_TAIL ], + [ 41, MoveId.RAIN_DANCE ], + [ 46, MoveId.HYDRO_PUMP ], + [ 51, MoveId.SHELL_SMASH ], + ], + [SpeciesId.ARCHEN]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 3, MoveId.ROCK_THROW ], + [ 6, MoveId.WING_ATTACK ], + [ 9, MoveId.DRAGON_BREATH ], + [ 12, MoveId.ANCIENT_POWER ], + [ 15, MoveId.PLUCK ], + [ 18, MoveId.QUICK_GUARD ], + [ 21, MoveId.U_TURN ], + [ 24, MoveId.ROCK_SLIDE ], + [ 27, MoveId.SCARY_FACE ], + [ 30, MoveId.CRUNCH ], + [ 33, MoveId.AGILITY ], + [ 36, MoveId.TAILWIND ], + [ 39, MoveId.DRAGON_CLAW ], + [ 42, MoveId.THRASH ], + [ 45, MoveId.ENDEAVOR ], + ], + [SpeciesId.ARCHEOPS]: [ + [ 1, MoveId.WING_ATTACK ], + [ 1, MoveId.LEER ], + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.QUICK_ATTACK ], + [ 9, MoveId.DRAGON_BREATH ], + [ 12, MoveId.ANCIENT_POWER ], + [ 15, MoveId.PLUCK ], + [ 18, MoveId.QUICK_GUARD ], + [ 21, MoveId.U_TURN ], + [ 24, MoveId.ROCK_SLIDE ], + [ 27, MoveId.SCARY_FACE ], + [ 30, MoveId.CRUNCH ], + [ 33, MoveId.AGILITY ], + [ 36, MoveId.TAILWIND ], + [ 41, MoveId.DRAGON_CLAW ], + [ 46, MoveId.THRASH ], + [ 51, MoveId.ENDEAVOR ], + ], + [SpeciesId.TRUBBISH]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.POISON_GAS ], + [ 3, MoveId.RECYCLE ], + [ 6, MoveId.ACID_SPRAY ], + [ 9, MoveId.AMNESIA ], + [ 12, MoveId.CLEAR_SMOG ], + [ 15, MoveId.TOXIC_SPIKES ], + [ 18, MoveId.SLUDGE ], + [ 21, MoveId.STOCKPILE ], + [ 21, MoveId.SWALLOW ], + [ 24, MoveId.TAKE_DOWN ], + [ 27, MoveId.SLUDGE_BOMB ], + [ 30, MoveId.TOXIC ], + [ 33, MoveId.BELCH ], + [ 37, MoveId.PAIN_SPLIT ], + [ 39, MoveId.GUNK_SHOT ], + [ 42, MoveId.EXPLOSION ], + ], + [SpeciesId.GARBODOR]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.RECYCLE ], + [ 1, MoveId.ACID_SPRAY ], + [ 9, MoveId.AMNESIA ], + [ 12, MoveId.CLEAR_SMOG ], + [ 15, MoveId.TOXIC_SPIKES ], + [ 18, MoveId.SLUDGE ], + [ 21, MoveId.STOCKPILE ], + [ 21, MoveId.SWALLOW ], + [ 24, MoveId.BODY_SLAM ], + [ 27, MoveId.SLUDGE_BOMB ], + [ 30, MoveId.TOXIC ], + [ 33, MoveId.BELCH ], + [ 39, MoveId.PAIN_SPLIT ], + [ 43, MoveId.GUNK_SHOT ], + [ 48, MoveId.EXPLOSION ], + ], + [SpeciesId.ZORUA]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 4, MoveId.TORMENT ], + [ 8, MoveId.HONE_CLAWS ], + [ 12, MoveId.FURY_SWIPES ], + [ 16, MoveId.SCARY_FACE ], + [ 20, MoveId.TAUNT ], + [ 24, MoveId.KNOCK_OFF ], + [ 28, MoveId.FAKE_TEARS ], + [ 32, MoveId.AGILITY ], + [ 36, MoveId.IMPRISON ], + [ 40, MoveId.NIGHT_DAZE ], + [ 44, MoveId.NASTY_PLOT ], + [ 48, MoveId.FOUL_PLAY ], + ], + [SpeciesId.ZOROARK]: [ + [ EVOLVE_MOVE, MoveId.NIGHT_SLASH ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.TORMENT ], + [ 1, MoveId.U_TURN ], + [ 1, MoveId.HONE_CLAWS ], + [ 1, MoveId.SCARY_FACE ], // Previous Stage Move + [ 1, MoveId.PURSUIT ], + [ 12, MoveId.FURY_SWIPES ], + [ 20, MoveId.TAUNT ], + [ 24, MoveId.KNOCK_OFF ], + [ 28, MoveId.FAKE_TEARS ], + [ 34, MoveId.AGILITY ], + [ 40, MoveId.IMPRISON ], + [ 46, MoveId.NIGHT_DAZE ], + [ 52, MoveId.NASTY_PLOT ], + [ 58, MoveId.FOUL_PLAY ], + ], + [SpeciesId.MINCCINO]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.BABY_DOLL_EYES ], + [ 4, MoveId.HELPING_HAND ], + [ 8, MoveId.ECHOED_VOICE ], + [ 12, MoveId.SING ], + [ 16, MoveId.CHARM ], + [ 20, MoveId.SWIFT ], + [ 24, MoveId.ENCORE ], + [ 28, MoveId.AFTER_YOU ], + [ 32, MoveId.TAIL_SLAP ], + [ 36, MoveId.TICKLE ], + [ 40, MoveId.SLAM ], + [ 44, MoveId.HYPER_VOICE ], + [ 48, MoveId.LAST_RESORT ], + ], + [SpeciesId.CINCCINO]: [ + [ EVOLVE_MOVE, MoveId.TAIL_SLAP ], + [ RELEARN_MOVE, MoveId.SLAM ], + [ RELEARN_MOVE, MoveId.SWIFT ], + [ RELEARN_MOVE, MoveId.ENCORE ], + [ RELEARN_MOVE, MoveId.HELPING_HAND ], + [ RELEARN_MOVE, MoveId.HYPER_VOICE ], + [ RELEARN_MOVE, MoveId.TICKLE ], + [ RELEARN_MOVE, MoveId.ROCK_BLAST ], + [ RELEARN_MOVE, MoveId.LAST_RESORT ], + [ RELEARN_MOVE, MoveId.AFTER_YOU ], + [ RELEARN_MOVE, MoveId.ECHOED_VOICE ], + [ RELEARN_MOVE, MoveId.BABY_DOLL_EYES ], + [ 1, MoveId.BULLET_SEED ], + [ 1, MoveId.SING ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.POUND ], + ], + [SpeciesId.GOTHITA]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.CONFUSION ], + [ 4, MoveId.PLAY_NICE ], + [ 8, MoveId.TICKLE ], + [ 12, MoveId.PSYBEAM ], + [ 16, MoveId.CHARM ], + [ 20, MoveId.PSYSHOCK ], + [ 24, MoveId.HYPNOSIS ], + [ 28, MoveId.FAKE_TEARS ], + [ 33, MoveId.PSYCH_UP ], + [ 34, MoveId.HEAL_BLOCK ], + [ 36, MoveId.PSYCHIC ], + [ 40, MoveId.FLATTER ], + [ 44, MoveId.FUTURE_SIGHT ], + [ 48, MoveId.MAGIC_ROOM ], + ], + [SpeciesId.GOTHORITA]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.TICKLE ], + [ 1, MoveId.PLAY_NICE ], + [ 12, MoveId.PSYBEAM ], + [ 16, MoveId.CHARM ], + [ 20, MoveId.PSYSHOCK ], + [ 24, MoveId.HYPNOSIS ], + [ 28, MoveId.FAKE_TEARS ], + [ 34, MoveId.HEAL_BLOCK ], + [ 35, MoveId.PSYCH_UP ], + [ 40, MoveId.PSYCHIC ], // Previous Stage Move, Gothitelle Level + [ 46, MoveId.FLATTER ], + [ 52, MoveId.FUTURE_SIGHT ], + [ 58, MoveId.MAGIC_ROOM ], + ], + [SpeciesId.GOTHITELLE]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.TICKLE ], + [ 1, MoveId.PLAY_NICE ], + [ 12, MoveId.PSYBEAM ], + [ 16, MoveId.CHARM ], + [ 20, MoveId.PSYSHOCK ], + [ 24, MoveId.HYPNOSIS ], + [ 28, MoveId.FAKE_TEARS ], + [ 34, MoveId.HEAL_BLOCK ], + [ 35, MoveId.PSYCH_UP ], + [ 40, MoveId.PSYCHIC ], + [ 48, MoveId.FLATTER ], + [ 56, MoveId.FUTURE_SIGHT ], + [ 64, MoveId.MAGIC_ROOM ], + ], + [SpeciesId.SOLOSIS]: [ + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.PSYWAVE ], + [ 4, MoveId.RECOVER ], + [ 8, MoveId.ENDEAVOR ], + [ 12, MoveId.PSYBEAM ], + [ 16, MoveId.CHARM ], + [ 20, MoveId.PSYSHOCK ], + [ 24, MoveId.LIGHT_SCREEN ], + [ 24, MoveId.REFLECT ], + [ 28, MoveId.ALLY_SWITCH ], + [ 33, MoveId.PAIN_SPLIT ], + [ 36, MoveId.PSYCHIC ], + [ 40, MoveId.SKILL_SWAP ], + [ 44, MoveId.FUTURE_SIGHT ], + [ 46, MoveId.HEAL_BLOCK ], + [ 48, MoveId.WONDER_ROOM ], + ], + [SpeciesId.DUOSION]: [ + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.RECOVER ], + [ 1, MoveId.PSYWAVE ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.ENDEAVOR ], + [ 1, MoveId.SNATCH ], + [ 12, MoveId.PSYBEAM ], + [ 16, MoveId.CHARM ], + [ 20, MoveId.PSYSHOCK ], + [ 24, MoveId.LIGHT_SCREEN ], + [ 24, MoveId.REFLECT ], + [ 28, MoveId.ALLY_SWITCH ], + [ 35, MoveId.PAIN_SPLIT ], + [ 40, MoveId.PSYCHIC ], + [ 46, MoveId.SKILL_SWAP ], + [ 50, MoveId.HEAL_BLOCK ], + [ 52, MoveId.FUTURE_SIGHT ], + [ 58, MoveId.WONDER_ROOM ], + ], + [SpeciesId.REUNICLUS]: [ + [ EVOLVE_MOVE, MoveId.HAMMER_ARM ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.RECOVER ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.ENDEAVOR ], + [ 1, MoveId.DIZZY_PUNCH ], + [ 1, MoveId.PSYWAVE ], + [ 1, MoveId.SNATCH ], + [ 12, MoveId.PSYBEAM ], + [ 16, MoveId.CHARM ], + [ 20, MoveId.PSYSHOCK ], + [ 24, MoveId.LIGHT_SCREEN ], + [ 24, MoveId.REFLECT ], + [ 28, MoveId.ALLY_SWITCH ], + [ 35, MoveId.PAIN_SPLIT ], + [ 40, MoveId.PSYCHIC ], + [ 48, MoveId.SKILL_SWAP ], + [ 54, MoveId.HEAL_BLOCK ], + [ 56, MoveId.FUTURE_SIGHT ], + [ 64, MoveId.WONDER_ROOM ], + ], + [SpeciesId.DUCKLETT]: [ + [ 1, MoveId.WATER_GUN ], + [ 6, MoveId.DEFOG ], + [ 9, MoveId.WING_ATTACK ], + [ 13, MoveId.WATER_PULSE ], + [ 15, MoveId.AERIAL_ACE ], + [ 19, MoveId.BUBBLE_BEAM ], + [ 21, MoveId.FEATHER_DANCE ], + [ 24, MoveId.AQUA_RING ], + [ 27, MoveId.AIR_SLASH ], + [ 30, MoveId.ROOST ], + [ 34, MoveId.RAIN_DANCE ], + [ 37, MoveId.TAILWIND ], + [ 41, MoveId.BRAVE_BIRD ], + [ 46, MoveId.HURRICANE ], + ], + [SpeciesId.SWANNA]: [ + [ 1, MoveId.WING_ATTACK ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.DEFOG ], + [ 13, MoveId.WATER_PULSE ], + [ 15, MoveId.AERIAL_ACE ], + [ 19, MoveId.BUBBLE_BEAM ], + [ 21, MoveId.FEATHER_DANCE ], + [ 24, MoveId.AQUA_RING ], + [ 27, MoveId.AIR_SLASH ], + [ 30, MoveId.ROOST ], + [ 34, MoveId.RAIN_DANCE ], + [ 40, MoveId.TAILWIND ], + [ 47, MoveId.BRAVE_BIRD ], + [ 55, MoveId.HURRICANE ], + ], + [SpeciesId.VANILLITE]: [ + [ 1, MoveId.HARDEN ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.POWDER_SNOW ], // Custom + [ 4, MoveId.TAUNT ], + [ 8, MoveId.MIST ], + [ 12, MoveId.ICY_WIND ], + [ 16, MoveId.AVALANCHE ], + [ 20, MoveId.HAIL ], + [ 24, MoveId.ICICLE_SPEAR ], + [ 28, MoveId.UPROAR ], + [ 32, MoveId.ACID_ARMOR ], + [ 36, MoveId.MIRROR_COAT ], + [ 40, MoveId.ICE_BEAM ], + [ 44, MoveId.BLIZZARD ], + [ 48, MoveId.SHEER_COLD ], + ], + [SpeciesId.VANILLISH]: [ + [ 1, MoveId.MIST ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.TAUNT ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.POWDER_SNOW ], // Previous Stage Move, Custom + [ 12, MoveId.ICY_WIND ], + [ 16, MoveId.AVALANCHE ], + [ 20, MoveId.HAIL ], + [ 24, MoveId.ICICLE_SPEAR ], + [ 28, MoveId.UPROAR ], + [ 32, MoveId.ACID_ARMOR ], + [ 38, MoveId.MIRROR_COAT ], + [ 44, MoveId.ICE_BEAM ], + [ 50, MoveId.BLIZZARD ], + [ 56, MoveId.SHEER_COLD ], + ], + [SpeciesId.VANILLUXE]: [ + [ 1, MoveId.MIST ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.TAUNT ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.POWDER_SNOW ], // Previous Stage Move, Custom + [ 1, MoveId.WEATHER_BALL ], + [ 1, MoveId.ICICLE_CRASH ], + [ 1, MoveId.FREEZE_DRY ], + [ 12, MoveId.ICY_WIND ], + [ 16, MoveId.AVALANCHE ], + [ 20, MoveId.HAIL ], + [ 24, MoveId.ICICLE_SPEAR ], + [ 28, MoveId.UPROAR ], + [ 32, MoveId.ACID_ARMOR ], + [ 38, MoveId.MIRROR_COAT ], + [ 44, MoveId.ICE_BEAM ], + [ 52, MoveId.BLIZZARD ], + [ 60, MoveId.SHEER_COLD ], + ], + [SpeciesId.DEERLING]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.CAMOUFLAGE ], + [ 4, MoveId.GROWL ], + [ 7, MoveId.SAND_ATTACK ], + [ 10, MoveId.DOUBLE_KICK ], + [ 13, MoveId.LEECH_SEED ], + [ 16, MoveId.BULLET_SEED ], + [ 20, MoveId.TAKE_DOWN ], + [ 24, MoveId.ZEN_HEADBUTT ], + [ 28, MoveId.ENERGY_BALL ], + [ 32, MoveId.CHARM ], + [ 37, MoveId.DOUBLE_EDGE ], + [ 42, MoveId.SOLAR_BEAM ], + ], + [SpeciesId.SAWSBUCK]: [ + [ EVOLVE_MOVE, MoveId.HORN_LEECH ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.CAMOUFLAGE ], + [ 1, MoveId.MEGAHORN ], + [ 10, MoveId.DOUBLE_KICK ], + [ 13, MoveId.LEECH_SEED ], + [ 16, MoveId.BULLET_SEED ], + [ 20, MoveId.TAKE_DOWN ], + [ 24, MoveId.ZEN_HEADBUTT ], + [ 28, MoveId.ENERGY_BALL ], + [ 36, MoveId.CHARM ], + [ 44, MoveId.DOUBLE_EDGE ], + [ 52, MoveId.SOLAR_BEAM ], + ], + [SpeciesId.EMOLGA]: [ + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.NUZZLE ], + [ 5, MoveId.DOUBLE_TEAM ], + [ 10, MoveId.QUICK_ATTACK ], + [ 15, MoveId.THUNDER_SHOCK ], + [ 20, MoveId.CHARGE ], + [ 25, MoveId.ACROBATICS ], + [ 30, MoveId.SPARK ], + [ 35, MoveId.ENCORE ], + [ 40, MoveId.VOLT_SWITCH ], + [ 45, MoveId.LIGHT_SCREEN ], + [ 50, MoveId.DISCHARGE ], + [ 55, MoveId.AGILITY ], + ], + [SpeciesId.KARRABLAST]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 4, MoveId.FURY_CUTTER ], + [ 8, MoveId.ENDURE ], + [ 12, MoveId.FALSE_SWIPE ], + [ 16, MoveId.ACID_SPRAY ], + [ 20, MoveId.HEADBUTT ], + [ 24, MoveId.FLAIL ], + [ 28, MoveId.SCARY_FACE ], + [ 32, MoveId.X_SCISSOR ], + [ 36, MoveId.SWORDS_DANCE ], + [ 40, MoveId.TAKE_DOWN ], + [ 44, MoveId.BUG_BUZZ ], + [ 48, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.ESCAVALIER]: [ + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.SCARY_FACE ], + [ 1, MoveId.ENDURE ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.QUICK_GUARD ], + [ 1, MoveId.FELL_STINGER ], + [ 1, MoveId.TWINEEDLE ], + [ 12, MoveId.FALSE_SWIPE ], + [ 16, MoveId.ACID_SPRAY ], + [ 20, MoveId.HEADBUTT ], + [ 24, MoveId.REVERSAL ], + [ 28, MoveId.IRON_DEFENSE ], + [ 32, MoveId.X_SCISSOR ], + [ 36, MoveId.SWORDS_DANCE ], + [ 40, MoveId.IRON_HEAD ], + [ 44, MoveId.BUG_BUZZ ], + [ 48, MoveId.GIGA_IMPACT ], + [ 52, MoveId.METAL_BURST ], + ], + [SpeciesId.FOONGUS]: [ + [ 1, MoveId.ABSORB ], + [ 1, MoveId.ASTONISH ], + [ 4, MoveId.GROWTH ], + [ 8, MoveId.STUN_SPORE ], + [ 12, MoveId.MEGA_DRAIN ], + [ 16, MoveId.SYNTHESIS ], + [ 20, MoveId.CLEAR_SMOG ], + [ 24, MoveId.SWEET_SCENT ], + [ 28, MoveId.GIGA_DRAIN ], + [ 32, MoveId.INGRAIN ], + [ 36, MoveId.TOXIC ], + [ 40, MoveId.RAGE_POWDER ], + [ 44, MoveId.SOLAR_BEAM ], + [ 48, MoveId.SPORE ], + ], + [SpeciesId.AMOONGUSS]: [ + [ 1, MoveId.ABSORB ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.BIDE ], + [ 12, MoveId.MEGA_DRAIN ], + [ 16, MoveId.SYNTHESIS ], + [ 20, MoveId.CLEAR_SMOG ], + [ 24, MoveId.SWEET_SCENT ], + [ 28, MoveId.GIGA_DRAIN ], + [ 32, MoveId.INGRAIN ], + [ 36, MoveId.TOXIC ], + [ 42, MoveId.RAGE_POWDER ], + [ 48, MoveId.SOLAR_BEAM ], + [ 54, MoveId.SPORE ], + ], + [SpeciesId.FRILLISH]: [ + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.WATER_SPORT ], + [ 4, MoveId.POISON_STING ], + [ 8, MoveId.NIGHT_SHADE ], + [ 12, MoveId.WATER_PULSE ], + [ 16, MoveId.RAIN_DANCE ], + [ 20, MoveId.HEX ], + [ 24, MoveId.BRINE ], + [ 28, MoveId.RECOVER ], + [ 32, MoveId.SHADOW_BALL ], + [ 36, MoveId.WHIRLPOOL ], + [ 41, MoveId.HYDRO_PUMP ], + [ 44, MoveId.DESTINY_BOND ], + [ 48, MoveId.WATER_SPOUT ], + ], + [SpeciesId.JELLICENT]: [ + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.WATER_SPORT ], + [ 1, MoveId.WRING_OUT ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.NIGHT_SHADE ], + [ 1, MoveId.ACID_ARMOR ], + [ 12, MoveId.WATER_PULSE ], + [ 16, MoveId.RAIN_DANCE ], + [ 20, MoveId.HEX ], + [ 24, MoveId.BRINE ], + [ 28, MoveId.RECOVER ], + [ 32, MoveId.SHADOW_BALL ], + [ 36, MoveId.WHIRLPOOL ], + [ 43, MoveId.HYDRO_PUMP ], + [ 48, MoveId.DESTINY_BOND ], + [ 54, MoveId.WATER_SPOUT ], + ], + [SpeciesId.ALOMOMOLA]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.WATER_SPORT ], + [ 5, MoveId.AQUA_RING ], + [ 9, MoveId.AQUA_JET ], + [ 13, MoveId.HELPING_HAND ], + [ 13, MoveId.WIDE_GUARD ], + [ 21, MoveId.PROTECT ], + [ 25, MoveId.WATER_PULSE ], + [ 29, MoveId.HEALING_WISH ], + [ 33, MoveId.SOAK ], + [ 37, MoveId.WISH ], + [ 41, MoveId.BRINE ], + [ 45, MoveId.SAFEGUARD ], + [ 49, MoveId.WHIRLPOOL ], + [ 55, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.JOLTIK]: [ + [ 1, MoveId.ABSORB ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.SPIDER_WEB ], + [ 4, MoveId.ELECTROWEB ], + [ 8, MoveId.BUG_BITE ], + [ 12, MoveId.STRING_SHOT ], + [ 16, MoveId.THUNDER_WAVE ], + [ 20, MoveId.ELECTRO_BALL ], + [ 24, MoveId.AGILITY ], + [ 28, MoveId.SUCKER_PUNCH ], + [ 32, MoveId.SLASH ], + [ 37, MoveId.DISCHARGE ], + [ 40, MoveId.SCREECH ], + [ 44, MoveId.GASTRO_ACID ], + [ 48, MoveId.BUG_BUZZ ], + ], + [SpeciesId.GALVANTULA]: [ + [ EVOLVE_MOVE, MoveId.STICKY_WEB ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.BUG_BITE ], + [ 1, MoveId.ELECTROWEB ], + [ 1, MoveId.SPIDER_WEB ], + [ 12, MoveId.STRING_SHOT ], + [ 16, MoveId.THUNDER_WAVE ], + [ 20, MoveId.ELECTRO_BALL ], + [ 24, MoveId.AGILITY ], + [ 28, MoveId.SUCKER_PUNCH ], + [ 32, MoveId.SLASH ], + [ 39, MoveId.DISCHARGE ], + [ 44, MoveId.SCREECH ], + [ 50, MoveId.GASTRO_ACID ], + [ 56, MoveId.BUG_BUZZ ], + ], + [SpeciesId.FERROSEED]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 5, MoveId.METAL_CLAW ], + [ 10, MoveId.PIN_MISSILE ], + [ 15, MoveId.INGRAIN ], + [ 20, MoveId.FLASH_CANNON ], + [ 25, MoveId.IRON_HEAD ], + [ 30, MoveId.SELF_DESTRUCT ], + [ 35, MoveId.IRON_DEFENSE ], + [ 41, MoveId.CURSE ], + [ 45, MoveId.GYRO_BALL ], + [ 50, MoveId.EXPLOSION ], + ], + [SpeciesId.FERROTHORN]: [ + [ EVOLVE_MOVE, MoveId.POWER_WHIP ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.PIN_MISSILE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.ROCK_CLIMB ], + [ 15, MoveId.INGRAIN ], + [ 20, MoveId.FLASH_CANNON ], + [ 25, MoveId.IRON_HEAD ], + [ 30, MoveId.SELF_DESTRUCT ], + [ 35, MoveId.IRON_DEFENSE ], + [ 43, MoveId.CURSE ], + [ 49, MoveId.GYRO_BALL ], + [ 56, MoveId.EXPLOSION ], + ], + [SpeciesId.KLINK]: [ + [ 1, MoveId.VISE_GRIP ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 4, MoveId.BIND ], + [ 8, MoveId.CHARGE ], + [ 12, MoveId.CHARGE_BEAM ], + [ 16, MoveId.METAL_SOUND ], + [ 20, MoveId.AUTOTOMIZE ], + [ 24, MoveId.DISCHARGE ], + [ 28, MoveId.SCREECH ], + [ 32, MoveId.GEAR_GRIND ], + [ 36, MoveId.LOCK_ON ], + [ 40, MoveId.SHIFT_GEAR ], + [ 44, MoveId.ZAP_CANNON ], + [ 48, MoveId.HYPER_BEAM ], + ], + [SpeciesId.KLANG]: [ + [ 1, MoveId.VISE_GRIP ], + [ 1, MoveId.BIND ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.CHARGE ], + [ 12, MoveId.CHARGE_BEAM ], + [ 16, MoveId.METAL_SOUND ], + [ 20, MoveId.AUTOTOMIZE ], + [ 24, MoveId.DISCHARGE ], + [ 28, MoveId.SCREECH ], + [ 32, MoveId.GEAR_GRIND ], + [ 36, MoveId.LOCK_ON ], + [ 42, MoveId.SHIFT_GEAR ], + [ 48, MoveId.ZAP_CANNON ], + [ 54, MoveId.HYPER_BEAM ], + ], + [SpeciesId.KLINKLANG]: [ + [ 1, MoveId.VISE_GRIP ], + [ 1, MoveId.BIND ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.CHARGE ], + [ 1, MoveId.MAGNETIC_FLUX ], + [ 1, MoveId.GEAR_UP ], + [ 12, MoveId.CHARGE_BEAM ], + [ 16, MoveId.METAL_SOUND ], + [ 20, MoveId.AUTOTOMIZE ], + [ 24, MoveId.DISCHARGE ], + [ 28, MoveId.SCREECH ], + [ 32, MoveId.GEAR_GRIND ], + [ 36, MoveId.LOCK_ON ], + [ 42, MoveId.SHIFT_GEAR ], + [ 48, MoveId.ZAP_CANNON ], + [ 56, MoveId.HYPER_BEAM ], + [ 64, MoveId.ELECTRIC_TERRAIN ], + ], + [SpeciesId.TYNAMO]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.SPARK ], + [ 1, MoveId.CHARGE_BEAM ], + ], + [SpeciesId.EELEKTRIK]: [ + [ EVOLVE_MOVE, MoveId.CRUNCH ], + [ 1, MoveId.TACKLE ], // Previous Stage Move + [ 1, MoveId.HEADBUTT ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.SPARK ], + [ 1, MoveId.CHARGE_BEAM ], + [ 1, MoveId.ION_DELUGE ], + [ 9, MoveId.BIND ], + [ 19, MoveId.ACID ], + [ 29, MoveId.DISCHARGE ], + [ 44, MoveId.THUNDERBOLT ], + [ 49, MoveId.ACID_SPRAY ], + [ 54, MoveId.COIL ], + [ 59, MoveId.WILD_CHARGE ], + [ 64, MoveId.GASTRO_ACID ], + [ 69, MoveId.ZAP_CANNON ], + [ 74, MoveId.THRASH ], + ], + [SpeciesId.EELEKTROSS]: [ + [ RELEARN_MOVE, MoveId.THUNDERBOLT ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.ACID_SPRAY ], // Previous Stage Move + [ 1, MoveId.TACKLE ], // Previous Stage Move + [ 1, MoveId.HEADBUTT ], + [ 1, MoveId.THUNDER_WAVE ], // Previous Stage Move + [ 1, MoveId.SPARK ], // Previous Stage Move + [ 1, MoveId.CHARGE_BEAM ], // Previous Stage Move + [ 1, MoveId.ION_DELUGE ], // Previous Stage Move + [ 1, MoveId.BIND ], // Previous Stage Move + [ 1, MoveId.THRASH ], + [ 1, MoveId.ACID ], + [ 1, MoveId.ZAP_CANNON ], + [ 1, MoveId.CRUNCH ], + [ 1, MoveId.CRUSH_CLAW ], + [ 1, MoveId.GASTRO_ACID ], + [ 1, MoveId.DISCHARGE ], + [ 1, MoveId.COIL ], + [ 5, MoveId.WILD_CHARGE ], + ], + [SpeciesId.ELGYEM]: [ + [ 1, MoveId.GROWL ], + [ 1, MoveId.CONFUSION ], + [ 6, MoveId.IMPRISON ], + [ 8, MoveId.HEAL_BLOCK ], + [ 12, MoveId.TELEPORT ], + [ 18, MoveId.PSYBEAM ], + [ 24, MoveId.GUARD_SPLIT ], + [ 24, MoveId.POWER_SPLIT ], + [ 30, MoveId.HEADBUTT ], + [ 36, MoveId.ZEN_HEADBUTT ], + [ 43, MoveId.RECOVER ], + [ 48, MoveId.CALM_MIND ], + [ 54, MoveId.WONDER_ROOM ], + [ 60, MoveId.PSYCHIC ], + ], + [SpeciesId.BEHEEYEM]: [ + [ 1, MoveId.GROWL ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.SYNCHRONOISE ], + [ 1, MoveId.TELEPORT ], + [ 1, MoveId.IMPRISON ], + [ 1, MoveId.PSYCHIC_TERRAIN ], + [ 8, MoveId.HEAL_BLOCK ], + [ 18, MoveId.PSYBEAM ], + [ 24, MoveId.GUARD_SPLIT ], + [ 24, MoveId.POWER_SPLIT ], + [ 30, MoveId.HEADBUTT ], + [ 36, MoveId.ZEN_HEADBUTT ], + [ 45, MoveId.RECOVER ], + [ 52, MoveId.CALM_MIND ], + [ 60, MoveId.WONDER_ROOM ], + [ 68, MoveId.PSYCHIC ], + ], + [SpeciesId.LITWICK]: [ + [ 1, MoveId.SMOG ], + [ 1, MoveId.ASTONISH ], + [ 4, MoveId.EMBER ], + [ 8, MoveId.MINIMIZE ], + [ 12, MoveId.CONFUSE_RAY ], + [ 16, MoveId.HEX ], + [ 20, MoveId.WILL_O_WISP ], + [ 24, MoveId.FIRE_SPIN ], + [ 28, MoveId.NIGHT_SHADE ], + [ 32, MoveId.CURSE ], + [ 36, MoveId.SHADOW_BALL ], + [ 40, MoveId.INFERNO ], + [ 44, MoveId.IMPRISON ], + [ 48, MoveId.PAIN_SPLIT ], + [ 52, MoveId.OVERHEAT ], + [ 56, MoveId.MEMENTO ], + ], + [SpeciesId.LAMPENT]: [ + [ 1, MoveId.EMBER ], + [ 1, MoveId.MINIMIZE ], + [ 1, MoveId.SMOG ], + [ 1, MoveId.ASTONISH ], + [ 12, MoveId.CONFUSE_RAY ], + [ 16, MoveId.HEX ], + [ 20, MoveId.WILL_O_WISP ], + [ 24, MoveId.FIRE_SPIN ], + [ 28, MoveId.NIGHT_SHADE ], + [ 32, MoveId.CURSE ], + [ 36, MoveId.SHADOW_BALL ], + [ 40, MoveId.INFERNO ], + [ 46, MoveId.IMPRISON ], + [ 52, MoveId.PAIN_SPLIT ], + [ 58, MoveId.OVERHEAT ], + [ 64, MoveId.MEMENTO ], + ], + [SpeciesId.CHANDELURE]: [ + [ 1, MoveId.EMBER ], + [ 1, MoveId.FIRE_SPIN ], + [ 1, MoveId.NIGHT_SHADE ], + [ 1, MoveId.MINIMIZE ], + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.SMOG ], + [ 1, MoveId.CURSE ], + [ 1, MoveId.PAIN_SPLIT ], + [ 1, MoveId.SHADOW_BALL ], + [ 1, MoveId.WILL_O_WISP ], + [ 1, MoveId.MEMENTO ], + [ 1, MoveId.IMPRISON ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.OVERHEAT ], + [ 1, MoveId.HEX ], + [ 1, MoveId.INFERNO ], + ], + [SpeciesId.AXEW]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 3, MoveId.BITE ], + [ 6, MoveId.FALSE_SWIPE ], + [ 9, MoveId.ASSURANCE ], + [ 12, MoveId.TAUNT ], + [ 15, MoveId.SLASH ], + [ 18, MoveId.DRAGON_CLAW ], + [ 21, MoveId.SCARY_FACE ], + [ 24, MoveId.CRUNCH ], + [ 27, MoveId.DRAGON_DANCE ], + [ 30, MoveId.DUAL_CHOP ], + [ 33, MoveId.FOCUS_ENERGY ], + [ 36, MoveId.DRAGON_PULSE ], + [ 39, MoveId.SWORDS_DANCE ], + [ 42, MoveId.OUTRAGE ], + [ 45, MoveId.GUILLOTINE ], + [ 48, MoveId.GIGA_IMPACT ], + ], + [SpeciesId.FRAXURE]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.BITE ], + [ 1, MoveId.FALSE_SWIPE ], + [ 1, MoveId.DUAL_CHOP ], + [ 9, MoveId.ASSURANCE ], + [ 12, MoveId.TAUNT ], + [ 15, MoveId.SLASH ], + [ 18, MoveId.DRAGON_CLAW ], + [ 21, MoveId.SCARY_FACE ], + [ 24, MoveId.CRUNCH ], + [ 27, MoveId.DRAGON_DANCE ], + [ 30, MoveId.BREAKING_SWIPE ], + [ 33, MoveId.FOCUS_ENERGY ], + [ 36, MoveId.DRAGON_PULSE ], + [ 41, MoveId.SWORDS_DANCE ], + [ 46, MoveId.OUTRAGE ], + [ 51, MoveId.GUILLOTINE ], + [ 56, MoveId.GIGA_IMPACT ], + ], + [SpeciesId.HAXORUS]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.BITE ], + [ 1, MoveId.FALSE_SWIPE ], + [ 1, MoveId.DUAL_CHOP ], + [ 9, MoveId.ASSURANCE ], + [ 12, MoveId.TAUNT ], + [ 15, MoveId.SLASH ], + [ 18, MoveId.DRAGON_CLAW ], + [ 21, MoveId.SCARY_FACE ], + [ 24, MoveId.CRUNCH ], + [ 27, MoveId.DRAGON_DANCE ], + [ 30, MoveId.BREAKING_SWIPE ], + [ 33, MoveId.FOCUS_ENERGY ], + [ 36, MoveId.DRAGON_PULSE ], + [ 41, MoveId.SWORDS_DANCE ], + [ 46, MoveId.OUTRAGE ], + [ 53, MoveId.GUILLOTINE ], + [ 60, MoveId.GIGA_IMPACT ], + ], + [SpeciesId.CUBCHOO]: [ + [ 1, MoveId.GROWL ], + [ 1, MoveId.POWDER_SNOW ], + [ 3, MoveId.ENDURE ], + [ 6, MoveId.FURY_SWIPES ], + [ 9, MoveId.ICY_WIND ], + [ 12, MoveId.PLAY_NICE ], + [ 15, MoveId.BRINE ], + [ 18, MoveId.FROST_BREATH ], + [ 21, MoveId.SLASH ], + [ 24, MoveId.FLAIL ], + [ 27, MoveId.CHARM ], + [ 30, MoveId.SNOWSCAPE ], + [ 33, MoveId.THRASH ], + [ 36, MoveId.REST ], + [ 39, MoveId.BLIZZARD ], + [ 42, MoveId.SHEER_COLD ], + ], + [SpeciesId.BEARTIC]: [ + [ EVOLVE_MOVE, MoveId.ICICLE_CRASH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.FURY_SWIPES ], + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.ENDURE ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.AQUA_JET ], + [ 1, MoveId.BIDE ], + [ 9, MoveId.ICY_WIND ], + [ 12, MoveId.PLAY_NICE ], + [ 15, MoveId.BRINE ], + [ 18, MoveId.FROST_BREATH ], + [ 21, MoveId.SLASH ], + [ 24, MoveId.FLAIL ], + [ 27, MoveId.SWAGGER ], + [ 30, MoveId.SNOWSCAPE ], + [ 33, MoveId.THRASH ], + [ 36, MoveId.REST ], + [ 41, MoveId.BLIZZARD ], + [ 46, MoveId.SHEER_COLD ], + [ 51, MoveId.SUPERPOWER ], + ], + [SpeciesId.CRYOGONAL]: [ + [ 1, MoveId.BIND ], + [ 1, MoveId.ICE_SHARD ], + [ 4, MoveId.CONFUSE_RAY ], + [ 8, MoveId.RAPID_SPIN ], + [ 12, MoveId.ICY_WIND ], + [ 16, MoveId.MIST ], + [ 16, MoveId.HAZE ], + [ 20, MoveId.ANCIENT_POWER ], + [ 24, MoveId.AURORA_BEAM ], + [ 28, MoveId.SLASH ], + [ 32, MoveId.NIGHT_SLASH ], + [ 36, MoveId.FREEZE_DRY ], + [ 40, MoveId.LIGHT_SCREEN ], + [ 40, MoveId.REFLECT ], + [ 44, MoveId.RECOVER ], + [ 48, MoveId.ICE_BEAM ], + [ 52, MoveId.ACID_ARMOR ], + [ 56, MoveId.SOLAR_BEAM ], + [ 60, MoveId.SHEER_COLD ], + ], + [SpeciesId.SHELMET]: [ + [ 1, MoveId.ABSORB ], + [ 1, MoveId.PROTECT ], + [ 4, MoveId.ACID ], + [ 8, MoveId.CURSE ], + [ 12, MoveId.MEGA_DRAIN ], + [ 16, MoveId.STRUGGLE_BUG ], + [ 20, MoveId.YAWN ], + [ 24, MoveId.ACID_ARMOR ], + [ 28, MoveId.GIGA_DRAIN ], + [ 32, MoveId.GUARD_SWAP ], + [ 36, MoveId.BODY_SLAM ], + [ 40, MoveId.RECOVER ], + [ 44, MoveId.BUG_BUZZ ], + [ 48, MoveId.FINAL_GAMBIT ], + ], + [SpeciesId.ACCELGOR]: [ + [ 1, MoveId.BODY_SLAM ], + [ 1, MoveId.ACID ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.PROTECT ], // Previous Stage Move + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.ACID_ARMOR ], + [ 1, MoveId.CURSE ], + [ 1, MoveId.YAWN ], + [ 1, MoveId.GUARD_SWAP ], + [ 1, MoveId.ACID_SPRAY ], + [ 1, MoveId.WATER_SHURIKEN ], + [ 12, MoveId.MEGA_DRAIN ], + [ 16, MoveId.STRUGGLE_BUG ], + [ 20, MoveId.SWIFT ], + [ 24, MoveId.AGILITY ], + [ 28, MoveId.GIGA_DRAIN ], + [ 32, MoveId.POWER_SWAP ], + [ 36, MoveId.U_TURN ], + [ 40, MoveId.RECOVER ], + [ 44, MoveId.BUG_BUZZ ], + [ 48, MoveId.FINAL_GAMBIT ], + [ 52, MoveId.TOXIC ], + ], + [SpeciesId.STUNFISK]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.MUD_SPORT ], + [ 5, MoveId.ENDURE ], + [ 10, MoveId.MUD_SHOT ], + [ 15, MoveId.REVENGE ], + [ 20, MoveId.CHARGE ], + [ 25, MoveId.SUCKER_PUNCH ], + [ 30, MoveId.ELECTRIC_TERRAIN ], + [ 35, MoveId.BOUNCE ], + [ 40, MoveId.MUDDY_WATER ], + [ 45, MoveId.DISCHARGE ], + [ 50, MoveId.FLAIL ], + [ 55, MoveId.FISSURE ], + ], + [SpeciesId.MIENFOO]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.DETECT ], + [ 5, MoveId.FAKE_OUT ], + [ 10, MoveId.REVERSAL ], + [ 15, MoveId.FURY_SWIPES ], + [ 20, MoveId.QUICK_GUARD ], + [ 25, MoveId.FORCE_PALM ], + [ 30, MoveId.U_TURN ], + [ 35, MoveId.DRAIN_PUNCH ], + [ 40, MoveId.HONE_CLAWS ], + [ 45, MoveId.AURA_SPHERE ], + [ 51, MoveId.BOUNCE ], + [ 55, MoveId.CALM_MIND ], + [ 60, MoveId.HIGH_JUMP_KICK ], + ], + [SpeciesId.MIENSHAO]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.REVERSAL ], + [ 1, MoveId.DETECT ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.QUICK_GUARD ], + [ 15, MoveId.FURY_SWIPES ], + [ 20, MoveId.WIDE_GUARD ], + [ 25, MoveId.FORCE_PALM ], + [ 30, MoveId.U_TURN ], + [ 35, MoveId.DRAIN_PUNCH ], + [ 40, MoveId.HONE_CLAWS ], + [ 45, MoveId.AURA_SPHERE ], + [ 53, MoveId.BOUNCE ], + [ 59, MoveId.CALM_MIND ], + [ 66, MoveId.HIGH_JUMP_KICK ], + ], + [SpeciesId.DRUDDIGON]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 5, MoveId.BITE ], + [ 10, MoveId.DRAGON_TAIL ], + [ 15, MoveId.METAL_CLAW ], + [ 20, MoveId.SCARY_FACE ], + [ 25, MoveId.SLASH ], + [ 30, MoveId.DRAGON_CLAW ], + [ 35, MoveId.HONE_CLAWS ], + [ 40, MoveId.CRUNCH ], + [ 45, MoveId.IRON_HEAD ], + [ 50, MoveId.OUTRAGE ], + [ 55, MoveId.SUPERPOWER ], + ], + [SpeciesId.GOLETT]: [ + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.ASTONISH ], + [ 4, MoveId.DEFENSE_CURL ], + [ 8, MoveId.POUND ], + [ 12, MoveId.SHADOW_PUNCH ], + [ 16, MoveId.CURSE ], + [ 20, MoveId.NIGHT_SHADE ], + [ 24, MoveId.STOMPING_TANTRUM ], + [ 28, MoveId.IRON_DEFENSE ], + [ 32, MoveId.MEGA_PUNCH ], + [ 36, MoveId.SHADOW_BALL ], + [ 40, MoveId.HEAVY_SLAM ], + [ 44, MoveId.PHANTOM_FORCE ], + [ 48, MoveId.HAMMER_ARM ], + [ 52, MoveId.EARTHQUAKE ], + [ 56, MoveId.DYNAMIC_PUNCH ], + ], + [SpeciesId.GOLURK]: [ + [ RELEARN_MOVE, MoveId.MUD_SLAP ], + [ RELEARN_MOVE, MoveId.FOCUS_PUNCH ], + [ 1, MoveId.POUND ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.HIGH_HORSEPOWER ], + [ 12, MoveId.SHADOW_PUNCH ], + [ 16, MoveId.CURSE ], + [ 20, MoveId.NIGHT_SHADE ], + [ 24, MoveId.STOMPING_TANTRUM ], + [ 28, MoveId.IRON_DEFENSE ], + [ 32, MoveId.MEGA_PUNCH ], + [ 36, MoveId.SHADOW_BALL ], + [ 40, MoveId.HEAVY_SLAM ], + [ 46, MoveId.PHANTOM_FORCE ], + [ 52, MoveId.HAMMER_ARM ], + [ 58, MoveId.EARTHQUAKE ], + [ 64, MoveId.DYNAMIC_PUNCH ], + ], + [SpeciesId.PAWNIARD]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 5, MoveId.FURY_CUTTER ], + [ 10, MoveId.METAL_CLAW ], + [ 15, MoveId.TORMENT ], + [ 20, MoveId.SCARY_FACE ], + [ 25, MoveId.ASSURANCE ], + [ 30, MoveId.METAL_SOUND ], + [ 35, MoveId.SLASH ], + [ 40, MoveId.NIGHT_SLASH ], + [ 45, MoveId.IRON_DEFENSE ], + [ 50, MoveId.RETALIATE ], + [ 55, MoveId.IRON_HEAD ], + [ 60, MoveId.SWORDS_DANCE ], + [ 65, MoveId.GUILLOTINE ], + ], + [SpeciesId.BISHARP]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.METAL_BURST ], + [ 15, MoveId.TORMENT ], + [ 20, MoveId.SCARY_FACE ], + [ 25, MoveId.ASSURANCE ], + [ 30, MoveId.METAL_SOUND ], + [ 35, MoveId.SLASH ], + [ 40, MoveId.NIGHT_SLASH ], + [ 45, MoveId.IRON_DEFENSE ], + [ 50, MoveId.RETALIATE ], + [ 57, MoveId.IRON_HEAD ], + [ 64, MoveId.SWORDS_DANCE ], + [ 71, MoveId.GUILLOTINE ], + ], + [SpeciesId.BOUFFALANT]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PURSUIT ], + [ 5, MoveId.FOCUS_ENERGY ], + [ 10, MoveId.FURY_ATTACK ], + [ 15, MoveId.REVENGE ], + [ 20, MoveId.SCARY_FACE ], + [ 25, MoveId.HORN_ATTACK ], + [ 30, MoveId.REVERSAL ], + [ 35, MoveId.THROAT_CHOP ], + [ 40, MoveId.HEAD_CHARGE ], + [ 45, MoveId.SWORDS_DANCE ], + [ 50, MoveId.MEGAHORN ], + [ 55, MoveId.GIGA_IMPACT ], + ], + [SpeciesId.RUFFLET]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 6, MoveId.HONE_CLAWS ], + [ 12, MoveId.WING_ATTACK ], + [ 18, MoveId.TAILWIND ], + [ 24, MoveId.SCARY_FACE ], + [ 30, MoveId.AERIAL_ACE ], + [ 36, MoveId.SLASH ], + [ 42, MoveId.WHIRLWIND ], + [ 48, MoveId.CRUSH_CLAW ], + [ 55, MoveId.AIR_SLASH ], + [ 60, MoveId.DEFOG ], + [ 66, MoveId.THRASH ], + [ 72, MoveId.BRAVE_BIRD ], + ], + [SpeciesId.BRAVIARY]: [ + [ EVOLVE_MOVE, MoveId.SUPERPOWER ], + [ RELEARN_MOVE, MoveId.BRAVE_BIRD ], // Previous Stage Move + [ 1, MoveId.WING_ATTACK ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 1, MoveId.SKY_ATTACK ], + [ 1, MoveId.HONE_CLAWS ], + [ 18, MoveId.TAILWIND ], + [ 24, MoveId.SCARY_FACE ], + [ 30, MoveId.AERIAL_ACE ], + [ 36, MoveId.SLASH ], + [ 42, MoveId.WHIRLWIND ], + [ 48, MoveId.CRUSH_CLAW ], + [ 57, MoveId.AIR_SLASH ], + [ 64, MoveId.DEFOG ], + [ 72, MoveId.THRASH ], + ], + [SpeciesId.VULLABY]: [ + [ 1, MoveId.GUST ], + [ 1, MoveId.LEER ], + [ 6, MoveId.FLATTER ], + [ 12, MoveId.PLUCK ], + [ 18, MoveId.TAILWIND ], + [ 24, MoveId.KNOCK_OFF ], + [ 30, MoveId.IRON_DEFENSE ], + [ 36, MoveId.WHIRLWIND ], + [ 42, MoveId.AIR_SLASH ], + [ 48, MoveId.DARK_PULSE ], + [ 54, MoveId.NASTY_PLOT ], + [ 60, MoveId.DEFOG ], + [ 66, MoveId.ATTRACT ], + [ 72, MoveId.BRAVE_BIRD ], + ], + [SpeciesId.MANDIBUZZ]: [ + [ EVOLVE_MOVE, MoveId.BONE_RUSH ], + [ 1, MoveId.GUST ], + [ 1, MoveId.LEER ], + [ 1, MoveId.TOXIC ], + [ 1, MoveId.SKY_ATTACK ], + [ 1, MoveId.FLATTER ], + [ 1, MoveId.PLUCK ], + [ 18, MoveId.TAILWIND ], + [ 24, MoveId.KNOCK_OFF ], + [ 30, MoveId.IRON_DEFENSE ], + [ 36, MoveId.WHIRLWIND ], + [ 42, MoveId.AIR_SLASH ], + [ 48, MoveId.DARK_PULSE ], + [ 57, MoveId.NASTY_PLOT ], + [ 64, MoveId.DEFOG ], + [ 72, MoveId.ATTRACT ], + [ 80, MoveId.BRAVE_BIRD ], + ], + [SpeciesId.HEATMOR]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LICK ], + [ 5, MoveId.FURY_SWIPES ], + [ 10, MoveId.INCINERATE ], + [ 15, MoveId.BUG_BITE ], + [ 20, MoveId.STOCKPILE ], + [ 20, MoveId.SPIT_UP ], + [ 20, MoveId.SWALLOW ], + [ 25, MoveId.SLASH ], + [ 30, MoveId.BIND ], + [ 35, MoveId.FIRE_LASH ], + [ 40, MoveId.HONE_CLAWS ], + [ 45, MoveId.AMNESIA ], + [ 50, MoveId.FIRE_SPIN ], + [ 55, MoveId.INFERNO ], + [ 60, MoveId.FLARE_BLITZ ], + ], + [SpeciesId.DURANT]: [ + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.FURY_CUTTER ], + [ 4, MoveId.VISE_GRIP ], + [ 8, MoveId.METAL_CLAW ], + [ 12, MoveId.BEAT_UP ], + [ 16, MoveId.BUG_BITE ], + [ 20, MoveId.BITE ], + [ 24, MoveId.AGILITY ], + [ 28, MoveId.DIG ], + [ 32, MoveId.X_SCISSOR ], + [ 36, MoveId.CRUNCH ], + [ 40, MoveId.METAL_SOUND ], + [ 44, MoveId.IRON_HEAD ], + [ 48, MoveId.ENTRAINMENT ], + [ 52, MoveId.IRON_DEFENSE ], + [ 56, MoveId.GUILLOTINE ], + ], + [SpeciesId.DEINO]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 4, MoveId.DRAGON_BREATH ], + [ 8, MoveId.BITE ], + [ 12, MoveId.ROAR ], + [ 16, MoveId.ASSURANCE ], + [ 20, MoveId.HEADBUTT ], + [ 24, MoveId.WORK_UP ], + [ 28, MoveId.SLAM ], + [ 32, MoveId.CRUNCH ], + [ 36, MoveId.SCARY_FACE ], + [ 40, MoveId.DRAGON_PULSE ], + [ 44, MoveId.BODY_SLAM ], + [ 48, MoveId.HYPER_VOICE ], + [ 52, MoveId.DRAGON_RUSH ], + [ 56, MoveId.NASTY_PLOT ], + [ 60, MoveId.OUTRAGE ], + ], + [SpeciesId.ZWEILOUS]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.BITE ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.DOUBLE_HIT ], + [ 12, MoveId.ROAR ], + [ 16, MoveId.ASSURANCE ], + [ 20, MoveId.HEADBUTT ], + [ 24, MoveId.WORK_UP ], + [ 28, MoveId.SLAM ], + [ 32, MoveId.CRUNCH ], + [ 36, MoveId.SCARY_FACE ], + [ 40, MoveId.DRAGON_PULSE ], + [ 44, MoveId.BODY_SLAM ], + [ 48, MoveId.HYPER_VOICE ], + [ 54, MoveId.DRAGON_RUSH ], + [ 60, MoveId.NASTY_PLOT ], + [ 66, MoveId.OUTRAGE ], + ], + [SpeciesId.HYDREIGON]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.BITE ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.TRI_ATTACK ], + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.DOUBLE_HIT ], + [ 12, MoveId.ROAR ], + [ 16, MoveId.ASSURANCE ], + [ 20, MoveId.HEADBUTT ], + [ 24, MoveId.WORK_UP ], + [ 28, MoveId.SLAM ], + [ 32, MoveId.CRUNCH ], + [ 36, MoveId.SCARY_FACE ], + [ 40, MoveId.DRAGON_PULSE ], + [ 44, MoveId.BODY_SLAM ], + [ 48, MoveId.HYPER_VOICE ], + [ 54, MoveId.DRAGON_RUSH ], + [ 60, MoveId.NASTY_PLOT ], + [ 68, MoveId.OUTRAGE ], + [ 76, MoveId.HYPER_BEAM ], + ], + [SpeciesId.LARVESTA]: [ + [ 1, MoveId.EMBER ], + [ 1, MoveId.STRING_SHOT ], + [ 6, MoveId.FLAME_CHARGE ], + [ 12, MoveId.STRUGGLE_BUG ], + [ 18, MoveId.FLAME_WHEEL ], + [ 24, MoveId.BUG_BITE ], + [ 30, MoveId.SCREECH ], + [ 36, MoveId.LEECH_LIFE ], + [ 42, MoveId.BUG_BUZZ ], + [ 48, MoveId.TAKE_DOWN ], + [ 54, MoveId.AMNESIA ], + [ 60, MoveId.DOUBLE_EDGE ], + [ 66, MoveId.FLARE_BLITZ ], + ], + [SpeciesId.VOLCARONA]: [ + [ EVOLVE_MOVE, MoveId.QUIVER_DANCE ], + [ 1, MoveId.GUST ], + [ 1, MoveId.WHIRLWIND ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.STRING_SHOT ], + [ 1, MoveId.FIRE_SPIN ], + [ 1, MoveId.FLARE_BLITZ ], + [ 1, MoveId.FLAME_CHARGE ], + [ 1, MoveId.STRUGGLE_BUG ], + [ 1, MoveId.FIERY_DANCE ], + [ 18, MoveId.FLAME_WHEEL ], + [ 24, MoveId.BUG_BITE ], + [ 30, MoveId.SCREECH ], + [ 36, MoveId.LEECH_LIFE ], + [ 42, MoveId.BUG_BUZZ ], + [ 48, MoveId.HEAT_WAVE ], + [ 54, MoveId.AMNESIA ], + [ 62, MoveId.HURRICANE ], + [ 70, MoveId.FIRE_BLAST ], + [ 78, MoveId.RAGE_POWDER ], + ], + [SpeciesId.COBALION]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.WORK_UP ], + [ 7, MoveId.METAL_CLAW ], + [ 14, MoveId.QUICK_GUARD ], + [ 21, MoveId.DOUBLE_KICK ], + [ 28, MoveId.RETALIATE ], + [ 35, MoveId.METAL_BURST ], + [ 42, MoveId.TAKE_DOWN ], + [ 49, MoveId.SACRED_SWORD ], + [ 56, MoveId.SWORDS_DANCE ], + [ 63, MoveId.IRON_HEAD ], + [ 70, MoveId.CLOSE_COMBAT ], + ], + [SpeciesId.TERRAKION]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.WORK_UP ], + [ 7, MoveId.SMACK_DOWN ], + [ 14, MoveId.QUICK_GUARD ], + [ 21, MoveId.DOUBLE_KICK ], + [ 28, MoveId.RETALIATE ], + [ 35, MoveId.ROCK_SLIDE ], + [ 42, MoveId.TAKE_DOWN ], + [ 49, MoveId.SACRED_SWORD ], + [ 56, MoveId.SWORDS_DANCE ], + [ 63, MoveId.STONE_EDGE ], + [ 70, MoveId.CLOSE_COMBAT ], + ], + [SpeciesId.VIRIZION]: [ + [ RELEARN_MOVE, MoveId.TAKE_DOWN ], + [ 1, MoveId.LEER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.WORK_UP ], + [ 7, MoveId.MAGICAL_LEAF ], + [ 14, MoveId.QUICK_GUARD ], + [ 21, MoveId.DOUBLE_KICK ], + [ 28, MoveId.RETALIATE ], + [ 35, MoveId.GIGA_DRAIN ], + [ 42, MoveId.TAKE_DOWN ], + [ 49, MoveId.SACRED_SWORD ], + [ 56, MoveId.SWORDS_DANCE ], + [ 63, MoveId.LEAF_BLADE ], + [ 70, MoveId.CLOSE_COMBAT ], + ], + [SpeciesId.TORNADUS]: [ + [ 1, MoveId.GUST ], + [ 1, MoveId.ASTONISH ], + [ 5, MoveId.LEER ], + [ 10, MoveId.SWAGGER ], + [ 15, MoveId.BITE ], + [ 20, MoveId.AIR_CUTTER ], + [ 25, MoveId.AGILITY ], + [ 30, MoveId.TAILWIND ], + [ 35, MoveId.AIR_SLASH ], + [ 40, MoveId.CRUNCH ], + [ 45, MoveId.EXTRASENSORY ], + [ 50, MoveId.UPROAR ], + [ 55, MoveId.HAMMER_ARM ], + [ 60, MoveId.RAIN_DANCE ], + [ 65, MoveId.HURRICANE ], + [ 70, MoveId.THRASH ], + [ 77, MoveId.BLEAKWIND_STORM ], + ], + [SpeciesId.THUNDURUS]: [ + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.ASTONISH ], + [ 5, MoveId.LEER ], + [ 10, MoveId.SWAGGER ], + [ 15, MoveId.BITE ], + [ 20, MoveId.SHOCK_WAVE ], + [ 25, MoveId.AGILITY ], + [ 30, MoveId.CHARGE ], + [ 31, MoveId.HEAL_BLOCK ], + [ 35, MoveId.VOLT_SWITCH ], + [ 40, MoveId.CRUNCH ], + [ 45, MoveId.DISCHARGE ], + [ 50, MoveId.UPROAR ], + [ 55, MoveId.HAMMER_ARM ], + [ 60, MoveId.RAIN_DANCE ], + [ 65, MoveId.THUNDER ], + [ 70, MoveId.THRASH ], + [ 75, MoveId.WILDBOLT_STORM ], + ], + [SpeciesId.RESHIRAM]: [ + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.ANCIENT_POWER ], + [ 1, MoveId.FIRE_FANG ], + [ 1, MoveId.NOBLE_ROAR ], + [ 8, MoveId.SLASH ], + [ 16, MoveId.CRUNCH ], + [ 24, MoveId.EXTRASENSORY ], + [ 32, MoveId.DRAGON_PULSE ], + [ 40, MoveId.FLAMETHROWER ], + [ 48, MoveId.FUSION_FLARE ], + [ 56, MoveId.HYPER_VOICE ], + [ 64, MoveId.FIRE_BLAST ], + [ 72, MoveId.IMPRISON ], + [ 80, MoveId.OUTRAGE ], + [ 88, MoveId.BLUE_FLARE ], + ], + [SpeciesId.ZEKROM]: [ + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.ANCIENT_POWER ], + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.NOBLE_ROAR ], + [ 8, MoveId.SLASH ], + [ 16, MoveId.CRUNCH ], + [ 24, MoveId.ZEN_HEADBUTT ], + [ 32, MoveId.DRAGON_CLAW ], + [ 40, MoveId.THUNDERBOLT ], + [ 48, MoveId.FUSION_BOLT ], + [ 56, MoveId.HYPER_VOICE ], + [ 64, MoveId.THUNDER ], + [ 72, MoveId.IMPRISON ], + [ 80, MoveId.OUTRAGE ], + [ 88, MoveId.BOLT_STRIKE ], + ], + [SpeciesId.LANDORUS]: [ + [ 1, MoveId.SAND_TOMB ], + [ 1, MoveId.SMACK_DOWN ], + [ 5, MoveId.LEER ], + [ 10, MoveId.BLOCK ], + [ 15, MoveId.BULLDOZE ], + [ 20, MoveId.ROCK_TOMB ], + [ 30, MoveId.IMPRISON ], + [ 35, MoveId.ROCK_SLIDE ], + [ 40, MoveId.EARTH_POWER ], + [ 45, MoveId.EXTRASENSORY ], + [ 50, MoveId.STONE_EDGE ], + [ 55, MoveId.HAMMER_ARM ], + [ 60, MoveId.SANDSTORM ], + [ 65, MoveId.EARTHQUAKE ], + [ 70, MoveId.OUTRAGE ], + [ 75, MoveId.FISSURE ], + [ 80, MoveId.SANDSEAR_STORM ], + ], + [SpeciesId.KYUREM]: [ + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.ANCIENT_POWER ], + [ 1, MoveId.NOBLE_ROAR ], + [ 1, MoveId.FREEZE_DRY ], + [ 8, MoveId.SLASH ], + [ 16, MoveId.ENDEAVOR ], + [ 24, MoveId.DRAGON_PULSE ], + [ 32, MoveId.ICE_BEAM ], + [ 40, MoveId.HYPER_VOICE ], + [ 48, MoveId.SCARY_FACE ], + [ 56, MoveId.BLIZZARD ], + [ 64, MoveId.IMPRISON ], + [ 72, MoveId.OUTRAGE ], + [ 80, MoveId.GLACIATE ], + [ 88, MoveId.SHEER_COLD ], + ], + [SpeciesId.KELDEO]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.AQUA_JET ], + [ 1, MoveId.WORK_UP ], + [ 1, MoveId.SECRET_SWORD ], + [ 7, MoveId.BUBBLE_BEAM ], + [ 14, MoveId.QUICK_GUARD ], + [ 21, MoveId.DOUBLE_KICK ], + [ 28, MoveId.RETALIATE ], + [ 35, MoveId.AQUA_TAIL ], + [ 42, MoveId.TAKE_DOWN ], + [ 49, MoveId.SACRED_SWORD ], + [ 56, MoveId.SWORDS_DANCE ], + [ 63, MoveId.HYDRO_PUMP ], + [ 70, MoveId.CLOSE_COMBAT ], + ], + [SpeciesId.MELOETTA]: [ + [ 1, MoveId.SING ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.ROUND ], + [ 21, MoveId.TEETER_DANCE ], + [ 26, MoveId.ACROBATICS ], + [ 31, MoveId.PSYBEAM ], + [ 36, MoveId.ECHOED_VOICE ], + [ 43, MoveId.U_TURN ], + [ 50, MoveId.RELIC_SONG ], + [ 57, MoveId.PSYCHIC ], + [ 64, MoveId.HYPER_VOICE ], + [ 71, MoveId.ROLE_PLAY ], + [ 78, MoveId.CLOSE_COMBAT ], + [ 85, MoveId.PERISH_SONG ], + ], + [SpeciesId.GENESECT]: [ + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.FURY_CUTTER ], + [ 7, MoveId.SCREECH ], + [ 14, MoveId.METAL_CLAW ], + [ 21, MoveId.FELL_STINGER ], + [ 28, MoveId.FLAME_CHARGE ], + [ 35, MoveId.METAL_SOUND ], + [ 42, MoveId.X_SCISSOR ], + [ 49, MoveId.MAGNET_RISE ], + [ 56, MoveId.BUG_BUZZ ], + [ 63, MoveId.SIMPLE_BEAM ], + [ 70, MoveId.ZAP_CANNON ], + [ 77, MoveId.LOCK_ON ], + [ 84, MoveId.TECHNO_BLAST ], + [ 91, MoveId.SELF_DESTRUCT ], + ], + [SpeciesId.CHESPIN]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.VINE_WHIP ], + [ 8, MoveId.ROLLOUT ], + [ 11, MoveId.BITE ], + [ 15, MoveId.LEECH_SEED ], + [ 18, MoveId.PIN_MISSILE ], + [ 27, MoveId.TAKE_DOWN ], + [ 32, MoveId.SEED_BOMB ], + [ 35, MoveId.MUD_SHOT ], + [ 42, MoveId.BODY_SLAM ], + [ 45, MoveId.PAIN_SPLIT ], + [ 48, MoveId.WOOD_HAMMER ], + ], + [SpeciesId.QUILLADIN]: [ + [ EVOLVE_MOVE, MoveId.NEEDLE_ARM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.VINE_WHIP ], + [ 8, MoveId.ROLLOUT ], + [ 11, MoveId.BITE ], + [ 15, MoveId.LEECH_SEED ], + [ 20, MoveId.SEED_BOMB ], + [ 24, MoveId.PIN_MISSILE ], + [ 29, MoveId.TAKE_DOWN ], + [ 34, MoveId.MUD_SHOT ], + [ 38, MoveId.BULK_UP ], + [ 43, MoveId.BODY_SLAM ], + [ 47, MoveId.PAIN_SPLIT ], + [ 53, MoveId.WOOD_HAMMER ], + ], + [SpeciesId.CHESNAUGHT]: [ + [ EVOLVE_MOVE, MoveId.SPIKY_SHIELD ], + [ 1, MoveId.VINE_WHIP ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.ROLLOUT ], + [ 1, MoveId.HAMMER_ARM ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.NEEDLE_ARM ], + [ 11, MoveId.BITE ], + [ 15, MoveId.LEECH_SEED ], + [ 19, MoveId.PIN_MISSILE ], + [ 29, MoveId.TAKE_DOWN ], + [ 35, MoveId.SEED_BOMB ], + [ 41, MoveId.MUD_SHOT ], + [ 48, MoveId.BULK_UP ], + [ 54, MoveId.BODY_SLAM ], + [ 60, MoveId.PAIN_SPLIT ], + [ 66, MoveId.WOOD_HAMMER ], + [ 78, MoveId.GIGA_IMPACT ], + ], + [SpeciesId.FENNEKIN]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.TAIL_WHIP ], + [ 5, MoveId.EMBER ], + [ 11, MoveId.HOWL ], + [ 14, MoveId.FLAME_CHARGE ], + [ 17, MoveId.PSYBEAM ], + [ 20, MoveId.FIRE_SPIN ], + [ 25, MoveId.LIGHT_SCREEN ], + [ 31, MoveId.PSYSHOCK ], + [ 35, MoveId.FLAMETHROWER ], + [ 38, MoveId.WILL_O_WISP ], + [ 41, MoveId.PSYCHIC ], + [ 43, MoveId.SUNNY_DAY ], + [ 48, MoveId.FIRE_BLAST ], + ], + [SpeciesId.BRAIXEN]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.EMBER ], + [ 11, MoveId.HOWL ], + [ 14, MoveId.FLAME_CHARGE ], + [ 18, MoveId.PSYBEAM ], + [ 22, MoveId.FIRE_SPIN ], + [ 28, MoveId.LIGHT_SCREEN ], + [ 36, MoveId.PSYSHOCK ], + [ 41, MoveId.FLAMETHROWER ], + [ 45, MoveId.WILL_O_WISP ], + [ 49, MoveId.PSYCHIC ], + [ 52, MoveId.SUNNY_DAY ], + [ 56, MoveId.MAGIC_ROOM ], + [ 59, MoveId.FIRE_BLAST ], + ], + [SpeciesId.DELPHOX]: [ + [ EVOLVE_MOVE, MoveId.MYSTICAL_FIRE ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.SHADOW_BALL ], + [ 1, MoveId.FUTURE_SIGHT ], + [ 1, MoveId.ROLE_PLAY ], + [ 1, MoveId.HOWL ], + [ 1, MoveId.SWITCHEROO ], + [ 14, MoveId.FLAME_CHARGE ], + [ 18, MoveId.PSYBEAM ], + [ 22, MoveId.FIRE_SPIN ], + [ 28, MoveId.LIGHT_SCREEN ], + [ 38, MoveId.PSYSHOCK ], + [ 45, MoveId.FLAMETHROWER ], + [ 51, MoveId.WILL_O_WISP ], + [ 57, MoveId.PSYCHIC ], + [ 62, MoveId.SUNNY_DAY ], + [ 68, MoveId.MAGIC_ROOM ], + [ 74, MoveId.FIRE_BLAST ], + ], + [SpeciesId.FROAKIE]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.GROWL ], + [ 5, MoveId.WATER_GUN ], + [ 8, MoveId.QUICK_ATTACK ], + [ 10, MoveId.LICK ], + [ 14, MoveId.WATER_PULSE ], + [ 18, MoveId.SMOKESCREEN ], + [ 21, MoveId.ROUND ], + [ 25, MoveId.FLING ], + [ 29, MoveId.SMACK_DOWN ], + [ 35, MoveId.SUBSTITUTE ], + [ 39, MoveId.BOUNCE ], + [ 43, MoveId.DOUBLE_TEAM ], + [ 48, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.FROGADIER]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 8, MoveId.QUICK_ATTACK ], + [ 10, MoveId.LICK ], + [ 14, MoveId.WATER_PULSE ], + [ 19, MoveId.SMOKESCREEN ], + [ 23, MoveId.ROUND ], + [ 28, MoveId.FLING ], + [ 33, MoveId.SMACK_DOWN ], + [ 40, MoveId.SUBSTITUTE ], + [ 45, MoveId.BOUNCE ], + [ 50, MoveId.DOUBLE_TEAM ], + [ 56, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.GRENINJA]: [ + [ EVOLVE_MOVE, MoveId.WATER_SHURIKEN ], + [ 1, MoveId.POUND ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.ROUND ], // Previous Stage Move + [ 1, MoveId.FLING ], // Previous Stage Move + [ 1, MoveId.SMACK_DOWN ], // Previous Stage Move + [ 1, MoveId.BOUNCE ], // Previous Stage Move + [ 1, MoveId.HAZE ], + [ 1, MoveId.MAT_BLOCK ], + [ 1, MoveId.ROLE_PLAY ], + [ 1, MoveId.NIGHT_SLASH ], + [ 10, MoveId.LICK ], + [ 14, MoveId.WATER_PULSE ], + [ 19, MoveId.SMOKESCREEN ], + [ 23, MoveId.SHADOW_SNEAK ], + [ 28, MoveId.SPIKES ], + [ 33, MoveId.AERIAL_ACE ], + [ 42, MoveId.SUBSTITUTE ], + [ 49, MoveId.EXTRASENSORY ], + [ 56, MoveId.DOUBLE_TEAM ], + [ 68, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.BUNNELBY]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.MUD_SLAP ], + [ 3, MoveId.TACKLE ], + [ 6, MoveId.LASER_FOCUS ], + [ 9, MoveId.QUICK_ATTACK ], + [ 12, MoveId.MUD_SHOT ], + [ 15, MoveId.FLAIL ], + [ 18, MoveId.DOUBLE_KICK ], + [ 21, MoveId.BULLDOZE ], + [ 24, MoveId.DIG ], + [ 27, MoveId.BOUNCE ], + [ 30, MoveId.TAKE_DOWN ], + [ 33, MoveId.SWORDS_DANCE ], + [ 36, MoveId.EARTHQUAKE ], + [ 39, MoveId.SUPER_FANG ], + ], + [SpeciesId.DIGGERSBY]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.LASER_FOCUS ], + [ 1, MoveId.ROTOTILLER ], + [ 9, MoveId.QUICK_ATTACK ], + [ 12, MoveId.MUD_SHOT ], + [ 15, MoveId.FLAIL ], + [ 18, MoveId.DOUBLE_KICK ], + [ 23, MoveId.BULLDOZE ], + [ 28, MoveId.DIG ], + [ 33, MoveId.BOUNCE ], + [ 38, MoveId.TAKE_DOWN ], + [ 43, MoveId.SWORDS_DANCE ], + [ 48, MoveId.EARTHQUAKE ], + [ 53, MoveId.SUPER_FANG ], + [ 58, MoveId.HAMMER_ARM ], + ], + [SpeciesId.FLETCHLING]: [ + [ 1, MoveId.GROWL ], + [ 1, MoveId.PECK ], + [ 5, MoveId.QUICK_ATTACK ], + [ 10, MoveId.EMBER ], + [ 15, MoveId.FLAIL ], + [ 20, MoveId.ACROBATICS ], + [ 25, MoveId.AGILITY ], + [ 30, MoveId.AERIAL_ACE ], + [ 35, MoveId.TAILWIND ], + [ 40, MoveId.STEEL_WING ], + [ 45, MoveId.ROOST ], + [ 50, MoveId.FLY ], + ], + [SpeciesId.FLETCHINDER]: [ + [ EVOLVE_MOVE, MoveId.FLAME_CHARGE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.PECK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.FEINT ], + [ 15, MoveId.FLAIL ], + [ 22, MoveId.ACROBATICS ], + [ 29, MoveId.AGILITY ], + [ 36, MoveId.AERIAL_ACE ], + [ 43, MoveId.TAILWIND ], + [ 50, MoveId.STEEL_WING ], + [ 57, MoveId.ROOST ], + [ 64, MoveId.FLY ], + ], + [SpeciesId.TALONFLAME]: [ + [ 1, MoveId.GROWL ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.PECK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.FLARE_BLITZ ], + [ 1, MoveId.FLAME_CHARGE ], + [ 15, MoveId.FLAIL ], + [ 22, MoveId.ACROBATICS ], + [ 29, MoveId.AGILITY ], + [ 38, MoveId.AERIAL_ACE ], + [ 47, MoveId.TAILWIND ], + [ 56, MoveId.STEEL_WING ], + [ 65, MoveId.ROOST ], + [ 74, MoveId.FLY ], + [ 83, MoveId.BRAVE_BIRD ], + ], + [SpeciesId.SCATTERBUG]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.STRING_SHOT ], + [ 6, MoveId.STUN_SPORE ], + [ 15, MoveId.BUG_BITE ], + ], + [SpeciesId.SPEWPA]: [ + [ EVOLVE_MOVE, MoveId.PROTECT ], + [ RELEARN_MOVE, MoveId.TACKLE ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.STRING_SHOT ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.STUN_SPORE ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.BUG_BITE ], // Previous Stage Move + [ 1, MoveId.HARDEN ], + ], + [SpeciesId.VIVILLON]: [ + [ EVOLVE_MOVE, MoveId.GUST ], + [ 1, MoveId.PROTECT ], // Previous Stage Move + [ 1, MoveId.TACKLE ], // Previous Stage Move + [ 1, MoveId.STRING_SHOT ], // Previous Stage Move + [ 1, MoveId.HARDEN ], // Previous Stage Move + [ 1, MoveId.BUG_BITE ], // Previous Stage Move + [ 1, MoveId.POISON_POWDER ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.SLEEP_POWDER ], + [ 1, MoveId.STRUGGLE_BUG ], + [ 1, MoveId.POWDER ], + [ 12, MoveId.LIGHT_SCREEN ], + [ 17, MoveId.PSYBEAM ], + [ 21, MoveId.SUPERSONIC ], + [ 25, MoveId.DRAINING_KISS ], + [ 31, MoveId.SAFEGUARD ], + [ 35, MoveId.BUG_BUZZ ], + [ 45, MoveId.QUIVER_DANCE ], + [ 50, MoveId.HURRICANE ], + ], + [SpeciesId.LITLEO]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 5, MoveId.EMBER ], + [ 8, MoveId.WORK_UP ], + [ 11, MoveId.HEADBUTT ], + [ 15, MoveId.NOBLE_ROAR ], + [ 20, MoveId.TAKE_DOWN ], + [ 23, MoveId.FIRE_FANG ], + [ 28, MoveId.ENDEAVOR ], + [ 33, MoveId.ECHOED_VOICE ], + [ 36, MoveId.FLAMETHROWER ], + [ 39, MoveId.CRUNCH ], + [ 43, MoveId.HYPER_VOICE ], + [ 46, MoveId.INCINERATE ], + [ 50, MoveId.OVERHEAT ], + ], + [SpeciesId.PYROAR]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.HYPER_BEAM ], + [ 1, MoveId.WORK_UP ], + [ 11, MoveId.HEADBUTT ], + [ 15, MoveId.NOBLE_ROAR ], + [ 20, MoveId.TAKE_DOWN ], + [ 23, MoveId.FIRE_FANG ], + [ 28, MoveId.ENDEAVOR ], + [ 33, MoveId.ECHOED_VOICE ], + [ 38, MoveId.FLAMETHROWER ], + [ 42, MoveId.CRUNCH ], + [ 48, MoveId.HYPER_VOICE ], + [ 51, MoveId.INCINERATE ], + [ 57, MoveId.OVERHEAT ], + ], + [SpeciesId.FLABEBE]: [ + [ 1, MoveId.VINE_WHIP ], + [ 1, MoveId.TACKLE ], + [ 6, MoveId.FAIRY_WIND ], + [ 10, MoveId.SAFEGUARD ], + [ 15, MoveId.RAZOR_LEAF ], + [ 20, MoveId.WISH ], + [ 22, MoveId.MAGICAL_LEAF ], + [ 24, MoveId.GRASSY_TERRAIN ], + [ 28, MoveId.PETAL_BLIZZARD ], + [ 33, MoveId.SYNTHESIS ], + [ 37, MoveId.MISTY_TERRAIN ], + [ 41, MoveId.MOONBLAST ], + [ 45, MoveId.PETAL_DANCE ], + [ 48, MoveId.SOLAR_BEAM ], + ], + [SpeciesId.FLOETTE]: [ + [ 1, MoveId.VINE_WHIP ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.FAIRY_WIND ], + [ 10, MoveId.SAFEGUARD ], + [ 15, MoveId.RAZOR_LEAF ], + [ 20, MoveId.WISH ], + [ 25, MoveId.MAGICAL_LEAF ], + [ 27, MoveId.GRASSY_TERRAIN ], + [ 33, MoveId.PETAL_BLIZZARD ], + [ 38, MoveId.SYNTHESIS ], + [ 43, MoveId.MISTY_TERRAIN ], + [ 46, MoveId.MOONBLAST ], + [ 51, MoveId.PETAL_DANCE ], + [ 58, MoveId.SOLAR_BEAM ], + ], + [SpeciesId.FLORGES]: [ + [ 1, MoveId.VINE_WHIP ], // Previous Stage Move + [ 1, MoveId.TACKLE ], // Previous Stage Move + [ 1, MoveId.FAIRY_WIND ], // Previous Stage Move + [ 1, MoveId.RAZOR_LEAF ], // Previous Stage Move + [ 1, MoveId.SOLAR_BEAM ], + [ 1, MoveId.PETAL_DANCE ], + [ 1, MoveId.SAFEGUARD ], + [ 1, MoveId.SYNTHESIS ], + [ 1, MoveId.WISH ], + [ 1, MoveId.LUCKY_CHANT ], + [ 1, MoveId.MAGICAL_LEAF ], + [ 1, MoveId.GRASS_KNOT ], + [ 1, MoveId.PETAL_BLIZZARD ], + [ 1, MoveId.DISARMING_VOICE ], + [ 1, MoveId.GRASSY_TERRAIN ], + [ 1, MoveId.MISTY_TERRAIN ], + [ 5, MoveId.MOONBLAST ], + ], + [SpeciesId.SKIDDO]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWTH ], + [ 7, MoveId.VINE_WHIP ], + [ 9, MoveId.TAIL_WHIP ], + [ 12, MoveId.LEECH_SEED ], + [ 13, MoveId.RAZOR_LEAF ], + [ 16, MoveId.WORRY_SEED ], + [ 20, MoveId.SYNTHESIS ], + [ 22, MoveId.TAKE_DOWN ], + [ 26, MoveId.BULLDOZE ], + [ 30, MoveId.SEED_BOMB ], + [ 34, MoveId.BULK_UP ], + [ 38, MoveId.DOUBLE_EDGE ], + [ 42, MoveId.HORN_LEECH ], + [ 45, MoveId.LEAF_BLADE ], + ], + [SpeciesId.GOGOAT]: [ + [ EVOLVE_MOVE, MoveId.AERIAL_ACE ], + [ 1, MoveId.VINE_WHIP ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.EARTHQUAKE ], + [ 12, MoveId.LEECH_SEED ], + [ 13, MoveId.RAZOR_LEAF ], + [ 16, MoveId.WORRY_SEED ], + [ 20, MoveId.SYNTHESIS ], + [ 22, MoveId.TAKE_DOWN ], + [ 26, MoveId.BULLDOZE ], + [ 30, MoveId.SEED_BOMB ], + [ 34, MoveId.BULK_UP ], + [ 40, MoveId.DOUBLE_EDGE ], + [ 47, MoveId.HORN_LEECH ], + [ 55, MoveId.LEAF_BLADE ], + [ 58, MoveId.MILK_DRINK ], + ], + [SpeciesId.PANCHAM]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 4, MoveId.ARM_THRUST ], + [ 8, MoveId.TAUNT ], + [ 12, MoveId.CIRCLE_THROW ], + [ 16, MoveId.LOW_SWEEP ], + [ 20, MoveId.WORK_UP ], + [ 24, MoveId.SLASH ], + [ 28, MoveId.VITAL_THROW ], + [ 33, MoveId.CRUNCH ], + [ 36, MoveId.BODY_SLAM ], + [ 40, MoveId.PARTING_SHOT ], + [ 44, MoveId.ENTRAINMENT ], + ], + [SpeciesId.PANGORO]: [ + [ EVOLVE_MOVE, MoveId.NIGHT_SLASH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.TAUNT ], + [ 1, MoveId.ARM_THRUST ], + [ 1, MoveId.BULLET_PUNCH ], + [ 12, MoveId.CIRCLE_THROW ], + [ 16, MoveId.LOW_SWEEP ], + [ 20, MoveId.WORK_UP ], + [ 24, MoveId.SLASH ], + [ 28, MoveId.VITAL_THROW ], + [ 35, MoveId.CRUNCH ], + [ 40, MoveId.BODY_SLAM ], + [ 46, MoveId.PARTING_SHOT ], + [ 52, MoveId.ENTRAINMENT ], + [ 58, MoveId.HAMMER_ARM ], + ], + [SpeciesId.FURFROU]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 5, MoveId.SAND_ATTACK ], + [ 9, MoveId.BABY_DOLL_EYES ], + [ 12, MoveId.HEADBUTT ], + [ 15, MoveId.TAIL_WHIP ], + [ 22, MoveId.BITE ], + [ 27, MoveId.ODOR_SLEUTH ], + [ 33, MoveId.RETALIATE ], + [ 35, MoveId.TAKE_DOWN ], + [ 38, MoveId.CHARM ], + [ 42, MoveId.SUCKER_PUNCH ], + [ 48, MoveId.COTTON_GUARD ], + ], + [SpeciesId.ESPURR]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 3, MoveId.FAKE_OUT ], + [ 6, MoveId.DISARMING_VOICE ], + [ 9, MoveId.CONFUSION ], + [ 18, MoveId.COVET ], + [ 21, MoveId.PSYBEAM ], + [ 30, MoveId.LIGHT_SCREEN ], + [ 30, MoveId.REFLECT ], + [ 33, MoveId.PSYSHOCK ], + ], + [SpeciesId.MEOWSTIC]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.MEAN_LOOK ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.DISARMING_VOICE ], + [ 9, MoveId.CONFUSION ], + [ 12, MoveId.HELPING_HAND ], + [ 15, MoveId.CHARM ], + [ 18, MoveId.COVET ], + [ 21, MoveId.PSYBEAM ], + [ 24, MoveId.SUCKER_PUNCH ], + [ 29, MoveId.ROLE_PLAY ], + [ 34, MoveId.LIGHT_SCREEN ], + [ 34, MoveId.REFLECT ], + [ 39, MoveId.PSYSHOCK ], + [ 44, MoveId.IMPRISON ], + [ 49, MoveId.QUICK_GUARD ], + [ 54, MoveId.PSYCHIC ], + [ 59, MoveId.MISTY_TERRAIN ], + ], + [SpeciesId.HONEDGE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.FURY_CUTTER ], + [ 4, MoveId.SHADOW_SNEAK ], + [ 8, MoveId.AUTOTOMIZE ], + [ 12, MoveId.AERIAL_ACE ], + [ 16, MoveId.METAL_SOUND ], + [ 20, MoveId.SLASH ], + [ 24, MoveId.NIGHT_SLASH ], + [ 28, MoveId.RETALIATE ], + [ 32, MoveId.IRON_DEFENSE ], + [ 36, MoveId.IRON_HEAD ], + [ 40, MoveId.POWER_TRICK ], + [ 44, MoveId.SWORDS_DANCE ], + [ 48, MoveId.SACRED_SWORD ], + ], + [SpeciesId.DOUBLADE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.SHADOW_SNEAK ], + [ 1, MoveId.AUTOTOMIZE ], + [ 12, MoveId.AERIAL_ACE ], + [ 16, MoveId.METAL_SOUND ], + [ 20, MoveId.SLASH ], + [ 24, MoveId.NIGHT_SLASH ], + [ 28, MoveId.RETALIATE ], + [ 32, MoveId.IRON_DEFENSE ], + [ 38, MoveId.IRON_HEAD ], + [ 44, MoveId.POWER_TRICK ], + [ 50, MoveId.SWORDS_DANCE ], + [ 56, MoveId.SACRED_SWORD ], + ], + [SpeciesId.AEGISLASH]: [ + [ EVOLVE_MOVE, MoveId.KINGS_SHIELD ], + [ 1, MoveId.SWORDS_DANCE ], + [ 1, MoveId.PURSUIT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SLASH ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.METAL_SOUND ], + [ 1, MoveId.AERIAL_ACE ], + [ 1, MoveId.IRON_DEFENSE ], + [ 1, MoveId.POWER_TRICK ], + [ 1, MoveId.NIGHT_SLASH ], + [ 1, MoveId.SHADOW_SNEAK ], + [ 1, MoveId.IRON_HEAD ], + [ 1, MoveId.HEAD_SMASH ], + [ 1, MoveId.AUTOTOMIZE ], + [ 1, MoveId.RETALIATE ], + [ 1, MoveId.SACRED_SWORD ], + ], + [SpeciesId.SPRITZEE]: [ + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.FAIRY_WIND ], + [ 3, MoveId.SWEET_KISS ], + [ 6, MoveId.ECHOED_VOICE ], + [ 9, MoveId.DRAINING_KISS ], + [ 12, MoveId.AROMATHERAPY ], + [ 18, MoveId.ATTRACT ], + [ 21, MoveId.FLAIL ], + [ 24, MoveId.MISTY_TERRAIN ], + [ 27, MoveId.PSYCHIC ], + [ 30, MoveId.CHARM ], + [ 33, MoveId.CALM_MIND ], + [ 36, MoveId.MOONBLAST ], + [ 39, MoveId.SKILL_SWAP ], + ], + [SpeciesId.AROMATISSE]: [ + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.ECHOED_VOICE ], + [ 1, MoveId.HEAL_PULSE ], + [ 1, MoveId.FAIRY_WIND ], + [ 1, MoveId.AROMATIC_MIST ], + [ 9, MoveId.DISARMING_VOICE ], + [ 12, MoveId.AROMATHERAPY ], + [ 15, MoveId.DRAINING_KISS ], + [ 18, MoveId.ATTRACT ], + [ 21, MoveId.FLAIL ], + [ 24, MoveId.MISTY_TERRAIN ], + [ 27, MoveId.PSYCHIC ], + [ 30, MoveId.CHARM ], + [ 33, MoveId.CALM_MIND ], + [ 36, MoveId.MOONBLAST ], + [ 39, MoveId.SKILL_SWAP ], + [ 42, MoveId.PSYCH_UP ], + ], + [SpeciesId.SWIRLIX]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SWEET_SCENT ], + [ 3, MoveId.PLAY_NICE ], + [ 6, MoveId.FAIRY_WIND ], + [ 9, MoveId.AROMATHERAPY ], + [ 12, MoveId.DRAINING_KISS ], + [ 15, MoveId.FAKE_TEARS ], + [ 18, MoveId.ROUND ], + [ 21, MoveId.STRING_SHOT ], + [ 24, MoveId.COTTON_SPORE ], + [ 27, MoveId.ENERGY_BALL ], + [ 30, MoveId.WISH ], + [ 33, MoveId.PLAY_ROUGH ], + [ 36, MoveId.COTTON_GUARD ], + [ 39, MoveId.ENDEAVOR ], + ], + [SpeciesId.SLURPUFF]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.FAIRY_WIND ], + [ 1, MoveId.PLAY_NICE ], + [ 9, MoveId.AROMATHERAPY ], + [ 12, MoveId.DRAINING_KISS ], + [ 15, MoveId.FAKE_TEARS ], + [ 18, MoveId.ROUND ], + [ 21, MoveId.STRING_SHOT ], + [ 24, MoveId.COTTON_SPORE ], + [ 27, MoveId.ENERGY_BALL ], + [ 30, MoveId.WISH ], + [ 33, MoveId.PLAY_ROUGH ], + [ 36, MoveId.COTTON_GUARD ], + [ 39, MoveId.ENDEAVOR ], + [ 42, MoveId.STICKY_WEB ], + ], + [SpeciesId.INKAY]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.PECK ], + [ 1, MoveId.CONSTRICT ], + [ 3, MoveId.HYPNOSIS ], + [ 6, MoveId.WRAP ], + [ 9, MoveId.PAYBACK ], + [ 12, MoveId.PLUCK ], + [ 15, MoveId.PSYBEAM ], + [ 18, MoveId.SWAGGER ], + [ 21, MoveId.SLASH ], + [ 24, MoveId.NIGHT_SLASH ], + [ 27, MoveId.PSYCHO_CUT ], + [ 31, MoveId.SWITCHEROO ], + [ 33, MoveId.FOUL_PLAY ], + [ 36, MoveId.TOPSY_TURVY ], + [ 39, MoveId.SUPERPOWER ], + ], + [SpeciesId.MALAMAR]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.PECK ], + [ 1, MoveId.CONSTRICT ], + [ 1, MoveId.HYPNOSIS ], + [ 1, MoveId.REVERSAL ], + [ 9, MoveId.PAYBACK ], + [ 12, MoveId.PLUCK ], + [ 15, MoveId.PSYBEAM ], + [ 18, MoveId.SWAGGER ], + [ 21, MoveId.SLASH ], + [ 24, MoveId.NIGHT_SLASH ], + [ 27, MoveId.PSYCHO_CUT ], + [ 33, MoveId.SWITCHEROO ], + [ 37, MoveId.FOUL_PLAY ], + [ 42, MoveId.TOPSY_TURVY ], + [ 47, MoveId.SUPERPOWER ], + ], + [SpeciesId.BINACLE]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.MUD_SLAP ], + [ 4, MoveId.WITHDRAW ], + [ 8, MoveId.WATER_GUN ], + [ 12, MoveId.FURY_CUTTER ], + [ 16, MoveId.FURY_SWIPES ], + [ 20, MoveId.ANCIENT_POWER ], + [ 24, MoveId.ROCK_POLISH ], + [ 28, MoveId.SLASH ], + [ 32, MoveId.HONE_CLAWS ], + [ 36, MoveId.RAZOR_SHELL ], + [ 40, MoveId.SHELL_SMASH ], + [ 44, MoveId.CROSS_CHOP ], + ], + [SpeciesId.BARBARACLE]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.SKULL_BASH ], + [ 1, MoveId.MUD_SLAP ], + [ 12, MoveId.FURY_CUTTER ], + [ 16, MoveId.FURY_SWIPES ], + [ 20, MoveId.ANCIENT_POWER ], + [ 24, MoveId.ROCK_POLISH ], + [ 28, MoveId.SLASH ], + [ 32, MoveId.HONE_CLAWS ], + [ 36, MoveId.RAZOR_SHELL ], + [ 42, MoveId.SHELL_SMASH ], + [ 48, MoveId.CROSS_CHOP ], + [ 54, MoveId.STONE_EDGE ], + ], + [SpeciesId.SKRELP]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SMOKESCREEN ], + [ 5, MoveId.ACID ], + [ 10, MoveId.WATER_GUN ], + [ 15, MoveId.TAIL_WHIP ], + [ 20, MoveId.DOUBLE_TEAM ], + [ 25, MoveId.POISON_TAIL ], + [ 30, MoveId.WATER_PULSE ], + [ 35, MoveId.TOXIC ], + [ 40, MoveId.DRAGON_PULSE ], + [ 45, MoveId.AQUA_TAIL ], + [ 50, MoveId.SLUDGE_BOMB ], + [ 55, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.DRAGALGE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.ACID ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.FEINT_ATTACK ], + [ 15, MoveId.TAIL_WHIP ], + [ 20, MoveId.DOUBLE_TEAM ], + [ 25, MoveId.POISON_TAIL ], + [ 30, MoveId.WATER_PULSE ], + [ 35, MoveId.TOXIC ], + [ 40, MoveId.DRAGON_PULSE ], + [ 45, MoveId.AQUA_TAIL ], + [ 52, MoveId.SLUDGE_BOMB ], + [ 59, MoveId.HYDRO_PUMP ], + [ 66, MoveId.OUTRAGE ], + ], + [SpeciesId.CLAUNCHER]: [ + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.SPLASH ], + [ 10, MoveId.FLAIL ], + [ 15, MoveId.AQUA_JET ], + [ 20, MoveId.SMACK_DOWN ], + [ 25, MoveId.HONE_CLAWS ], + [ 30, MoveId.WATER_PULSE ], + [ 35, MoveId.SWORDS_DANCE ], + [ 40, MoveId.AURA_SPHERE ], + [ 45, MoveId.BOUNCE ], + [ 50, MoveId.MUDDY_WATER ], + [ 55, MoveId.CRABHAMMER ], + ], + [SpeciesId.CLAWITZER]: [ + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.DARK_PULSE ], + [ 1, MoveId.DRAGON_PULSE ], + [ 1, MoveId.HEAL_PULSE ], + [ 15, MoveId.AQUA_JET ], + [ 20, MoveId.SMACK_DOWN ], + [ 25, MoveId.HONE_CLAWS ], + [ 30, MoveId.WATER_PULSE ], + [ 35, MoveId.SWORDS_DANCE ], + [ 42, MoveId.AURA_SPHERE ], + [ 49, MoveId.BOUNCE ], + [ 56, MoveId.MUDDY_WATER ], + [ 63, MoveId.CRABHAMMER ], + ], + [SpeciesId.HELIOPTILE]: [ + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.MUD_SLAP ], + [ 4, MoveId.POUND ], + [ 8, MoveId.THUNDER_SHOCK ], + [ 12, MoveId.QUICK_ATTACK ], + [ 16, MoveId.CHARGE ], + [ 20, MoveId.BULLDOZE ], + [ 24, MoveId.VOLT_SWITCH ], + [ 28, MoveId.PARABOLIC_CHARGE ], + [ 32, MoveId.THUNDER_WAVE ], + [ 36, MoveId.THUNDERBOLT ], + [ 40, MoveId.ELECTRIFY ], + [ 44, MoveId.THUNDER ], + ], + [SpeciesId.HELIOLISK]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.RAZOR_WIND ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.THUNDERBOLT ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.THUNDER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.CHARGE ], + [ 1, MoveId.DISCHARGE ], + [ 1, MoveId.VOLT_SWITCH ], + [ 1, MoveId.BULLDOZE ], + [ 1, MoveId.PARABOLIC_CHARGE ], + [ 1, MoveId.ELECTRIFY ], + [ 1, MoveId.EERIE_IMPULSE ], + ], + [SpeciesId.TYRUNT]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 4, MoveId.ROAR ], + [ 8, MoveId.ANCIENT_POWER ], + [ 12, MoveId.CHARM ], + [ 16, MoveId.BITE ], + [ 20, MoveId.DRAGON_TAIL ], + [ 24, MoveId.STOMP ], + [ 28, MoveId.ROCK_SLIDE ], + [ 32, MoveId.CRUNCH ], + [ 36, MoveId.DRAGON_CLAW ], + [ 40, MoveId.THRASH ], + [ 44, MoveId.EARTHQUAKE ], + [ 48, MoveId.HORN_DRILL ], + ], + [SpeciesId.TYRANTRUM]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.ROAR ], + [ 1, MoveId.ANCIENT_POWER ], + [ 12, MoveId.CHARM ], + [ 16, MoveId.BITE ], + [ 20, MoveId.DRAGON_TAIL ], + [ 24, MoveId.STOMP ], + [ 28, MoveId.ROCK_SLIDE ], + [ 32, MoveId.CRUNCH ], + [ 36, MoveId.DRAGON_CLAW ], + [ 42, MoveId.THRASH ], + [ 48, MoveId.EARTHQUAKE ], + [ 54, MoveId.HORN_DRILL ], + [ 60, MoveId.GIGA_IMPACT ], + [ 66, MoveId.HEAD_SMASH ], + ], + [SpeciesId.AMAURA]: [ + [ 1, MoveId.GROWL ], + [ 1, MoveId.POWDER_SNOW ], + [ 4, MoveId.ENCORE ], + [ 8, MoveId.ANCIENT_POWER ], + [ 12, MoveId.ICY_WIND ], + [ 16, MoveId.ROUND ], + [ 20, MoveId.MIST ], + [ 24, MoveId.AURORA_BEAM ], + [ 28, MoveId.THUNDER_WAVE ], + [ 32, MoveId.NATURE_POWER ], + [ 36, MoveId.FREEZE_DRY ], + [ 40, MoveId.ICE_BEAM ], + [ 44, MoveId.LIGHT_SCREEN ], + [ 48, MoveId.HAIL ], + [ 52, MoveId.BLIZZARD ], + [ 56, MoveId.HYPER_BEAM ], + ], + [SpeciesId.AURORUS]: [ + [ 1, MoveId.GROWL ], + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.ENCORE ], + [ 1, MoveId.ANCIENT_POWER ], + [ 12, MoveId.ICY_WIND ], + [ 16, MoveId.ROUND ], + [ 20, MoveId.MIST ], + [ 24, MoveId.AURORA_BEAM ], + [ 28, MoveId.THUNDER_WAVE ], + [ 32, MoveId.NATURE_POWER ], + [ 36, MoveId.FREEZE_DRY ], + [ 42, MoveId.ICE_BEAM ], + [ 48, MoveId.LIGHT_SCREEN ], + [ 54, MoveId.HAIL ], + [ 60, MoveId.BLIZZARD ], + [ 66, MoveId.HYPER_BEAM ], + ], + [SpeciesId.SYLVEON]: [ + [ EVOLVE_MOVE, MoveId.SPARKLY_SWIRL ], + [ RELEARN_MOVE, MoveId.VEEVEE_VOLLEY ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.BITE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.COVET ], + [ 1, MoveId.COPYCAT ], + [ 5, MoveId.SAND_ATTACK ], + [ 10, MoveId.DISARMING_VOICE ], + [ 15, MoveId.QUICK_ATTACK ], + [ 20, MoveId.BABY_DOLL_EYES ], + [ 25, MoveId.SWIFT ], + [ 30, MoveId.LIGHT_SCREEN ], + [ 35, MoveId.DRAINING_KISS ], + [ 40, MoveId.MISTY_TERRAIN ], + [ 45, MoveId.SKILL_SWAP ], + [ 50, MoveId.PSYCH_UP ], + [ 55, MoveId.MOONBLAST ], + [ 60, MoveId.LAST_RESORT ], + ], + [SpeciesId.HAWLUCHA]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HONE_CLAWS ], + [ 4, MoveId.WING_ATTACK ], + [ 8, MoveId.DETECT ], + [ 12, MoveId.AERIAL_ACE ], + [ 16, MoveId.ENCORE ], + [ 20, MoveId.FEATHER_DANCE ], + [ 24, MoveId.BRICK_BREAK ], + [ 28, MoveId.BOUNCE ], + [ 32, MoveId.TAUNT ], + [ 36, MoveId.ROOST ], + [ 40, MoveId.SWORDS_DANCE ], + [ 44, MoveId.FLYING_PRESS ], + [ 48, MoveId.HIGH_JUMP_KICK ], + [ 52, MoveId.ENDEAVOR ], + [ 56, MoveId.SKY_ATTACK ], + ], + [SpeciesId.DEDENNE]: [ + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.NUZZLE ], + [ 5, MoveId.TACKLE ], + [ 10, MoveId.CHARGE ], + [ 15, MoveId.THUNDER_SHOCK ], + [ 20, MoveId.CHARM ], + [ 25, MoveId.PARABOLIC_CHARGE ], + [ 30, MoveId.VOLT_SWITCH ], + [ 35, MoveId.REST ], + [ 35, MoveId.SNORE ], + [ 40, MoveId.DISCHARGE ], + [ 45, MoveId.PLAY_ROUGH ], + [ 50, MoveId.SUPER_FANG ], + [ 55, MoveId.ENTRAINMENT ], + [ 60, MoveId.THUNDER ], + ], + [SpeciesId.CARBINK]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 5, MoveId.GUARD_SPLIT ], + [ 10, MoveId.SMACK_DOWN ], + [ 15, MoveId.FLAIL ], + [ 20, MoveId.ANCIENT_POWER ], + [ 25, MoveId.ROCK_POLISH ], + [ 30, MoveId.LIGHT_SCREEN ], + [ 35, MoveId.ROCK_SLIDE ], + [ 40, MoveId.SKILL_SWAP ], + [ 45, MoveId.POWER_GEM ], + [ 50, MoveId.STEALTH_ROCK ], + [ 55, MoveId.MOONBLAST ], + [ 60, MoveId.STONE_EDGE ], + ], + [SpeciesId.GOOMY]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.ABSORB ], + [ 5, MoveId.WATER_GUN ], + [ 10, MoveId.DRAGON_BREATH ], + [ 15, MoveId.PROTECT ], + [ 20, MoveId.FLAIL ], + [ 25, MoveId.WATER_PULSE ], + [ 30, MoveId.RAIN_DANCE ], + [ 35, MoveId.DRAGON_PULSE ], + [ 41, MoveId.CURSE ], + [ 45, MoveId.BODY_SLAM ], + [ 50, MoveId.MUDDY_WATER ], + ], + [SpeciesId.SLIGGOO]: [ + [ EVOLVE_MOVE, MoveId.ACID_SPRAY ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.ACID_ARMOR ], + [ 1, MoveId.DRAGON_BREATH ], + [ 15, MoveId.PROTECT ], + [ 20, MoveId.FLAIL ], + [ 25, MoveId.WATER_PULSE ], + [ 30, MoveId.RAIN_DANCE ], + [ 35, MoveId.DRAGON_PULSE ], + [ 43, MoveId.CURSE ], + [ 49, MoveId.BODY_SLAM ], + [ 56, MoveId.MUDDY_WATER ], + ], + [SpeciesId.GOODRA]: [ + [ EVOLVE_MOVE, MoveId.AQUA_TAIL ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.ACID_ARMOR ], // Previous Stage Move + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.POISON_TAIL ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.ACID_SPRAY ], + [ 1, MoveId.TEARFUL_LOOK ], + [ 15, MoveId.PROTECT ], + [ 20, MoveId.FLAIL ], + [ 25, MoveId.WATER_PULSE ], + [ 30, MoveId.RAIN_DANCE ], + [ 35, MoveId.DRAGON_PULSE ], // Previous Stage Move, NatDex / Hisui Goodra Level + [ 43, MoveId.CURSE ], + [ 49, MoveId.BODY_SLAM ], + [ 58, MoveId.MUDDY_WATER ], + [ 67, MoveId.POWER_WHIP ], + ], + [SpeciesId.KLEFKI]: [ + [ 1, MoveId.ASTONISH ], + [ 4, MoveId.TACKLE ], + [ 8, MoveId.FAIRY_WIND ], + [ 12, MoveId.TORMENT ], + [ 16, MoveId.FAIRY_LOCK ], + [ 20, MoveId.METAL_SOUND ], + [ 24, MoveId.DRAINING_KISS ], + [ 28, MoveId.RECYCLE ], + [ 32, MoveId.IMPRISON ], + [ 36, MoveId.FLASH_CANNON ], + [ 40, MoveId.PLAY_ROUGH ], + [ 44, MoveId.MAGIC_ROOM ], + [ 48, MoveId.FOUL_PLAY ], + [ 50, MoveId.HEAL_BLOCK ], + [ 52, MoveId.LAST_RESORT ], + ], + [SpeciesId.PHANTUMP]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.ASTONISH ], + [ 4, MoveId.BRANCH_POKE ], + [ 8, MoveId.LEECH_SEED ], + [ 12, MoveId.CONFUSE_RAY ], + [ 16, MoveId.WILL_O_WISP ], + [ 20, MoveId.HEX ], + [ 24, MoveId.GROWTH ], + [ 28, MoveId.HORN_LEECH ], + [ 32, MoveId.CURSE ], + [ 36, MoveId.PHANTOM_FORCE ], + [ 40, MoveId.INGRAIN ], + [ 44, MoveId.WOOD_HAMMER ], + [ 48, MoveId.DESTINY_BOND ], + [ 52, MoveId.FORESTS_CURSE ], + ], + [SpeciesId.TREVENANT]: [ + [ EVOLVE_MOVE, MoveId.SHADOW_CLAW ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEECH_SEED ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.BRANCH_POKE ], + [ 12, MoveId.CONFUSE_RAY ], + [ 16, MoveId.WILL_O_WISP ], + [ 20, MoveId.HEX ], + [ 24, MoveId.GROWTH ], + [ 28, MoveId.HORN_LEECH ], + [ 32, MoveId.CURSE ], + [ 36, MoveId.PHANTOM_FORCE ], + [ 40, MoveId.INGRAIN ], + [ 44, MoveId.WOOD_HAMMER ], + [ 48, MoveId.DESTINY_BOND ], + [ 52, MoveId.FORESTS_CURSE ], + ], + [SpeciesId.PUMPKABOO]: [ + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.TRICK_OR_TREAT ], + [ 1, MoveId.LEAFAGE ], // Custom + [ 4, MoveId.SHADOW_SNEAK ], + [ 8, MoveId.CONFUSE_RAY ], + [ 12, MoveId.RAZOR_LEAF ], + [ 16, MoveId.LEECH_SEED ], + [ 20, MoveId.BULLET_SEED ], + [ 24, MoveId.SCARY_FACE ], + [ 28, MoveId.WORRY_SEED ], + [ 32, MoveId.SEED_BOMB ], + [ 36, MoveId.SHADOW_BALL ], + [ 40, MoveId.TRICK ], + [ 44, MoveId.PAIN_SPLIT ], + ], + [SpeciesId.GOURGEIST]: [ + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.EXPLOSION ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.LEAFAGE ], // Previous Stage Move, Custom + [ 1, MoveId.SHADOW_SNEAK ], + [ 1, MoveId.TRICK_OR_TREAT ], + [ 1, MoveId.MOONBLAST ], + [ 12, MoveId.RAZOR_LEAF ], + [ 16, MoveId.LEECH_SEED ], + [ 20, MoveId.BULLET_SEED ], + [ 24, MoveId.SCARY_FACE ], + [ 28, MoveId.WORRY_SEED ], + [ 32, MoveId.SEED_BOMB ], + [ 36, MoveId.SHADOW_BALL ], + [ 40, MoveId.TRICK ], + [ 44, MoveId.PAIN_SPLIT ], + [ 48, MoveId.PHANTOM_FORCE ], + ], + [SpeciesId.BERGMITE]: [ + [ 1, MoveId.HARDEN ], + [ 1, MoveId.RAPID_SPIN ], + [ 3, MoveId.TACKLE ], + [ 6, MoveId.POWDER_SNOW ], + [ 9, MoveId.CURSE ], + [ 12, MoveId.ICY_WIND ], + [ 15, MoveId.PROTECT ], + [ 18, MoveId.AVALANCHE ], + [ 21, MoveId.BITE ], + [ 24, MoveId.ICE_FANG ], + [ 27, MoveId.IRON_DEFENSE ], + [ 30, MoveId.RECOVER ], + [ 33, MoveId.CRUNCH ], + [ 36, MoveId.TAKE_DOWN ], + [ 39, MoveId.BLIZZARD ], + [ 42, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.AVALUGG]: [ + [ EVOLVE_MOVE, MoveId.BODY_SLAM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.WIDE_GUARD ], + [ 9, MoveId.CURSE ], + [ 12, MoveId.ICY_WIND ], + [ 15, MoveId.PROTECT ], + [ 18, MoveId.AVALANCHE ], + [ 21, MoveId.BITE ], + [ 24, MoveId.ICE_FANG ], + [ 27, MoveId.IRON_DEFENSE ], + [ 30, MoveId.RECOVER ], + [ 33, MoveId.CRUNCH ], + [ 36, MoveId.TAKE_DOWN ], + [ 41, MoveId.BLIZZARD ], + [ 46, MoveId.DOUBLE_EDGE ], + [ 51, MoveId.ICICLE_CRASH ], + ], + [SpeciesId.NOIBAT]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.ABSORB ], + [ 4, MoveId.GUST ], + [ 8, MoveId.SUPERSONIC ], + [ 12, MoveId.DOUBLE_TEAM ], + [ 16, MoveId.WING_ATTACK ], + [ 20, MoveId.BITE ], + [ 24, MoveId.AIR_CUTTER ], + [ 28, MoveId.WHIRLWIND ], + [ 32, MoveId.SUPER_FANG ], + [ 36, MoveId.AIR_SLASH ], + [ 40, MoveId.SCREECH ], + [ 44, MoveId.ROOST ], + [ 49, MoveId.TAILWIND ], + [ 52, MoveId.HURRICANE ], + ], + [SpeciesId.NOIVERN]: [ + [ EVOLVE_MOVE, MoveId.DRAGON_PULSE ], + [ 1, MoveId.GUST ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.MOONLIGHT ], + [ 12, MoveId.DOUBLE_TEAM ], + [ 16, MoveId.WING_ATTACK ], + [ 20, MoveId.BITE ], + [ 24, MoveId.AIR_CUTTER ], + [ 28, MoveId.WHIRLWIND ], + [ 32, MoveId.SUPER_FANG ], + [ 36, MoveId.AIR_SLASH ], + [ 40, MoveId.SCREECH ], + [ 44, MoveId.ROOST ], + [ 51, MoveId.TAILWIND ], + [ 56, MoveId.HURRICANE ], + [ 62, MoveId.BOOMBURST ], + ], + [SpeciesId.XERNEAS]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GRAVITY ], + [ 5, MoveId.LIGHT_SCREEN ], + [ 10, MoveId.AURORA_BEAM ], + [ 15, MoveId.NATURE_POWER ], + [ 20, MoveId.NIGHT_SLASH ], + [ 25, MoveId.AROMATHERAPY ], + [ 30, MoveId.PSYCH_UP ], + [ 35, MoveId.HORN_LEECH ], + [ 40, MoveId.MISTY_TERRAIN ], + [ 45, MoveId.INGRAIN ], + [ 50, MoveId.TAKE_DOWN ], + [ 55, MoveId.GEOMANCY ], + [ 60, MoveId.MOONBLAST ], + [ 65, MoveId.HEAL_PULSE ], + [ 70, MoveId.MEGAHORN ], + [ 75, MoveId.CLOSE_COMBAT ], + [ 80, MoveId.OUTRAGE ], + [ 85, MoveId.GIGA_IMPACT ], + ], + [SpeciesId.YVELTAL]: [ + [ 1, MoveId.GUST ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.RAZOR_WIND ], + [ 5, MoveId.TAUNT ], + [ 10, MoveId.SNARL ], + [ 15, MoveId.DISABLE ], + [ 20, MoveId.SUCKER_PUNCH ], + [ 25, MoveId.TAILWIND ], + [ 30, MoveId.ROOST ], + [ 35, MoveId.AIR_SLASH ], + [ 40, MoveId.DARK_PULSE ], + [ 45, MoveId.PSYCHIC ], + [ 50, MoveId.OBLIVION_WING ], + [ 55, MoveId.PHANTOM_FORCE ], + [ 60, MoveId.FOUL_PLAY ], + [ 65, MoveId.DRAGON_RUSH ], + [ 70, MoveId.HURRICANE ], + [ 75, MoveId.FOCUS_BLAST ], + [ 80, MoveId.SKY_ATTACK ], + [ 85, MoveId.HYPER_BEAM ], + ], + [SpeciesId.ZYGARDE]: [ + [ 1, MoveId.BIND ], + [ 1, MoveId.BITE ], + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.BULLDOZE ], + [ 1, MoveId.THOUSAND_ARROWS ], + [ 1, MoveId.THOUSAND_WAVES ], + [ 1, MoveId.CORE_ENFORCER ], + [ 8, MoveId.HAZE ], + [ 16, MoveId.DIG ], + [ 24, MoveId.SAFEGUARD ], + [ 32, MoveId.CRUNCH ], + [ 40, MoveId.DRAGON_PULSE ], + [ 48, MoveId.LANDS_WRATH ], + [ 56, MoveId.GLARE ], + [ 64, MoveId.SANDSTORM ], + [ 72, MoveId.COIL ], + [ 80, MoveId.EARTHQUAKE ], + [ 88, MoveId.OUTRAGE ], + ], + [SpeciesId.DIANCIE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.DIAMOND_STORM ], + [ 7, MoveId.GUARD_SPLIT ], + [ 14, MoveId.SMACK_DOWN ], + [ 21, MoveId.FLAIL ], + [ 28, MoveId.ANCIENT_POWER ], + [ 35, MoveId.ROCK_POLISH ], + [ 42, MoveId.LIGHT_SCREEN ], + [ 49, MoveId.ROCK_SLIDE ], + [ 56, MoveId.SKILL_SWAP ], + [ 63, MoveId.POWER_GEM ], + [ 70, MoveId.STEALTH_ROCK ], + [ 77, MoveId.MOONBLAST ], + [ 84, MoveId.STONE_EDGE ], + ], + [SpeciesId.HOOPA]: [ + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.DESTINY_BOND ], + [ 1, MoveId.ALLY_SWITCH ], + [ 6, MoveId.ASTONISH ], + [ 10, MoveId.TRICK ], + [ 15, MoveId.LIGHT_SCREEN ], + [ 19, MoveId.PSYBEAM ], + [ 25, MoveId.SKILL_SWAP ], + [ 29, MoveId.GUARD_SPLIT ], + [ 29, MoveId.POWER_SPLIT ], + [ 35, MoveId.PHANTOM_FORCE ], + [ 46, MoveId.ZEN_HEADBUTT ], + [ 50, MoveId.TRICK_ROOM ], + [ 50, MoveId.WONDER_ROOM ], + [ 55, MoveId.SHADOW_BALL ], + [ 68, MoveId.NASTY_PLOT ], + [ 75, MoveId.PSYCHIC ], + [ 85, MoveId.HYPERSPACE_HOLE ], + ], + [SpeciesId.VOLCANION]: [ + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.FIRE_SPIN ], + [ 1, MoveId.STEAM_ERUPTION ], + [ 6, MoveId.LEER ], + [ 12, MoveId.WEATHER_BALL ], + [ 18, MoveId.FLAME_CHARGE ], + [ 24, MoveId.WATER_PULSE ], + [ 30, MoveId.SCARY_FACE ], + [ 36, MoveId.INCINERATE ], + [ 42, MoveId.STOMP ], + [ 48, MoveId.SCALD ], + [ 54, MoveId.TAKE_DOWN ], + [ 60, MoveId.MIST ], + [ 60, MoveId.HAZE ], + [ 66, MoveId.HYDRO_PUMP ], + [ 78, MoveId.FLARE_BLITZ ], + [ 84, MoveId.OVERHEAT ], + [ 90, MoveId.EXPLOSION ], + ], + [SpeciesId.ROWLET]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 3, MoveId.LEAFAGE ], + [ 6, MoveId.ASTONISH ], + [ 9, MoveId.PECK ], + [ 12, MoveId.SHADOW_SNEAK ], + [ 15, MoveId.RAZOR_LEAF ], + [ 18, MoveId.SYNTHESIS ], + [ 21, MoveId.PLUCK ], + [ 24, MoveId.NASTY_PLOT ], + [ 27, MoveId.SUCKER_PUNCH ], + [ 30, MoveId.LEAF_BLADE ], + [ 33, MoveId.FEATHER_DANCE ], + [ 36, MoveId.BRAVE_BIRD ], + ], + [SpeciesId.DARTRIX]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.LEAFAGE ], + [ 9, MoveId.PECK ], + [ 12, MoveId.SHADOW_SNEAK ], + [ 15, MoveId.RAZOR_LEAF ], + [ 20, MoveId.SYNTHESIS ], + [ 25, MoveId.PLUCK ], + [ 30, MoveId.NASTY_PLOT ], + [ 35, MoveId.SUCKER_PUNCH ], + [ 40, MoveId.LEAF_BLADE ], + [ 45, MoveId.FEATHER_DANCE ], + [ 50, MoveId.BRAVE_BIRD ], + ], + [SpeciesId.DECIDUEYE]: [ + [ EVOLVE_MOVE, MoveId.SPIRIT_SHACKLE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.SPITE ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.U_TURN ], + [ 1, MoveId.LEAF_STORM ], + [ 1, MoveId.PHANTOM_FORCE ], + [ 1, MoveId.LEAFAGE ], + [ 9, MoveId.PECK ], + [ 12, MoveId.SHADOW_SNEAK ], + [ 15, MoveId.RAZOR_LEAF ], + [ 20, MoveId.SYNTHESIS ], + [ 25, MoveId.PLUCK ], + [ 30, MoveId.NASTY_PLOT ], + [ 37, MoveId.SUCKER_PUNCH ], + [ 44, MoveId.LEAF_BLADE ], + [ 51, MoveId.FEATHER_DANCE ], + [ 58, MoveId.BRAVE_BIRD ], + ], + [SpeciesId.LITTEN]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 3, MoveId.EMBER ], + [ 6, MoveId.LICK ], + [ 9, MoveId.ROAR ], + [ 12, MoveId.FURY_SWIPES ], + [ 15, MoveId.BITE ], + [ 18, MoveId.DOUBLE_KICK ], + [ 21, MoveId.FIRE_FANG ], + [ 24, MoveId.SCARY_FACE ], + [ 27, MoveId.SWAGGER ], + [ 30, MoveId.FLAMETHROWER ], + [ 33, MoveId.THRASH ], + [ 36, MoveId.FLARE_BLITZ ], + ], + [SpeciesId.TORRACAT]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.LICK ], + [ 9, MoveId.ROAR ], + [ 12, MoveId.FURY_SWIPES ], + [ 15, MoveId.BITE ], + [ 20, MoveId.DOUBLE_KICK ], + [ 25, MoveId.FIRE_FANG ], + [ 30, MoveId.SCARY_FACE ], + [ 35, MoveId.SWAGGER ], + [ 40, MoveId.FLAMETHROWER ], + [ 45, MoveId.THRASH ], + [ 50, MoveId.FLARE_BLITZ ], + ], + [SpeciesId.INCINEROAR]: [ + [ EVOLVE_MOVE, MoveId.DARKEST_LARIAT ], + [ RELEARN_MOVE, MoveId.SCRATCH ], + [ RELEARN_MOVE, MoveId.GROWL ], + [ RELEARN_MOVE, MoveId.THROAT_CHOP ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.LICK ], + [ 1, MoveId.CROSS_CHOP ], + [ 1, MoveId.BULK_UP ], + [ 9, MoveId.ROAR ], + [ 12, MoveId.FURY_SWIPES ], + [ 15, MoveId.BITE ], + [ 20, MoveId.DOUBLE_KICK ], + [ 25, MoveId.FIRE_FANG ], + [ 30, MoveId.SCARY_FACE ], + [ 32, MoveId.SWAGGER ], + [ 44, MoveId.FLAMETHROWER ], + [ 51, MoveId.THRASH ], + [ 58, MoveId.FLARE_BLITZ ], + ], + [SpeciesId.POPPLIO]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.GROWL ], + [ 3, MoveId.WATER_GUN ], + [ 6, MoveId.DISARMING_VOICE ], + [ 9, MoveId.AQUA_JET ], + [ 12, MoveId.BABY_DOLL_EYES ], + [ 15, MoveId.ICY_WIND ], + [ 18, MoveId.SING ], + [ 21, MoveId.BUBBLE_BEAM ], + [ 24, MoveId.ENCORE ], + [ 27, MoveId.MISTY_TERRAIN ], + [ 30, MoveId.HYPER_VOICE ], + [ 33, MoveId.MOONBLAST ], + [ 36, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.BRIONNE]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.DISARMING_VOICE ], + [ 9, MoveId.AQUA_JET ], + [ 12, MoveId.BABY_DOLL_EYES ], + [ 15, MoveId.ICY_WIND ], + [ 20, MoveId.SING ], + [ 25, MoveId.BUBBLE_BEAM ], + [ 30, MoveId.ENCORE ], + [ 35, MoveId.MISTY_TERRAIN ], + [ 40, MoveId.HYPER_VOICE ], + [ 45, MoveId.MOONBLAST ], + [ 50, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.PRIMARINA]: [ + [ EVOLVE_MOVE, MoveId.SPARKLING_ARIA ], + [ 1, MoveId.POUND ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.DISARMING_VOICE ], + [ 9, MoveId.AQUA_JET ], + [ 12, MoveId.BABY_DOLL_EYES ], + [ 15, MoveId.ICY_WIND ], + [ 20, MoveId.SING ], + [ 25, MoveId.BUBBLE_BEAM ], + [ 30, MoveId.ENCORE ], + [ 37, MoveId.MISTY_TERRAIN ], + [ 44, MoveId.HYPER_VOICE ], + [ 51, MoveId.MOONBLAST ], + [ 58, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.PIKIPEK]: [ + [ 1, MoveId.PECK ], + [ 3, MoveId.GROWL ], + [ 7, MoveId.ECHOED_VOICE ], + [ 9, MoveId.ROCK_SMASH ], + [ 13, MoveId.SUPERSONIC ], + [ 15, MoveId.PLUCK ], + [ 19, MoveId.ROOST ], + [ 21, MoveId.FURY_ATTACK ], + [ 25, MoveId.SCREECH ], + [ 27, MoveId.DRILL_PECK ], + [ 31, MoveId.BULLET_SEED ], + [ 33, MoveId.FEATHER_DANCE ], + [ 37, MoveId.HYPER_VOICE ], + ], + [SpeciesId.TRUMBEAK]: [ + [ RELEARN_MOVE, MoveId.ECHOED_VOICE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.PECK ], + [ 1, MoveId.ROCK_SMASH ], + [ 1, MoveId.ROCK_BLAST ], + [ 13, MoveId.SUPERSONIC ], + [ 16, MoveId.PLUCK ], + [ 21, MoveId.ROOST ], + [ 24, MoveId.FURY_ATTACK ], + [ 29, MoveId.SCREECH ], + [ 32, MoveId.DRILL_PECK ], + [ 37, MoveId.BULLET_SEED ], + [ 40, MoveId.FEATHER_DANCE ], + [ 45, MoveId.HYPER_VOICE ], + ], + [SpeciesId.TOUCANNON]: [ + [ EVOLVE_MOVE, MoveId.BEAK_BLAST ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.PECK ], + [ 1, MoveId.ROCK_SMASH ], + [ 1, MoveId.ROCK_BLAST ], + [ 1, MoveId.ECHOED_VOICE ], + [ 13, MoveId.SUPERSONIC ], + [ 16, MoveId.PLUCK ], + [ 21, MoveId.ROOST ], + [ 24, MoveId.FURY_ATTACK ], + [ 30, MoveId.SCREECH ], + [ 34, MoveId.DRILL_PECK ], + [ 40, MoveId.BULLET_SEED ], + [ 44, MoveId.FEATHER_DANCE ], + [ 50, MoveId.HYPER_VOICE ], + ], + [SpeciesId.YUNGOOS]: [ + [ 1, MoveId.TACKLE ], + [ 3, MoveId.LEER ], + [ 7, MoveId.PAYBACK ], + [ 10, MoveId.SAND_ATTACK ], + [ 13, MoveId.WORK_UP ], + [ 19, MoveId.BITE ], + [ 22, MoveId.MUD_SLAP ], + [ 25, MoveId.SUPER_FANG ], + [ 28, MoveId.TAKE_DOWN ], + [ 31, MoveId.SCARY_FACE ], + [ 34, MoveId.CRUNCH ], + [ 37, MoveId.YAWN ], + [ 40, MoveId.THRASH ], + [ 43, MoveId.REST ], + ], + [SpeciesId.GUMSHOOS]: [ + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PAYBACK ], + [ 1, MoveId.PURSUIT ], + [ 13, MoveId.WORK_UP ], + [ 19, MoveId.BITE ], + [ 23, MoveId.MUD_SLAP ], + [ 27, MoveId.SUPER_FANG ], + [ 31, MoveId.TAKE_DOWN ], + [ 35, MoveId.SCARY_FACE ], + [ 39, MoveId.CRUNCH ], + [ 43, MoveId.YAWN ], + [ 47, MoveId.THRASH ], + [ 52, MoveId.REST ], + ], + [SpeciesId.GRUBBIN]: [ + [ 1, MoveId.VISE_GRIP ], + [ 1, MoveId.MUD_SLAP ], + [ 5, MoveId.STRING_SHOT ], + [ 10, MoveId.BUG_BITE ], + [ 15, MoveId.BITE ], + [ 21, MoveId.SPARK ], + [ 25, MoveId.STICKY_WEB ], + [ 30, MoveId.X_SCISSOR ], + [ 35, MoveId.CRUNCH ], + [ 40, MoveId.DIG ], + ], + [SpeciesId.CHARJABUG]: [ + [ EVOLVE_MOVE, MoveId.CHARGE ], + [ 1, MoveId.VISE_GRIP ], + [ 1, MoveId.STRING_SHOT ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.BUG_BITE ], + [ 15, MoveId.BITE ], + [ 23, MoveId.SPARK ], + [ 29, MoveId.STICKY_WEB ], + [ 36, MoveId.X_SCISSOR ], + [ 43, MoveId.CRUNCH ], + [ 50, MoveId.DIG ], + [ 57, MoveId.IRON_DEFENSE ], + [ 64, MoveId.DISCHARGE ], + ], + [SpeciesId.VIKAVOLT]: [ + [ EVOLVE_MOVE, MoveId.THUNDERBOLT ], + [ RELEARN_MOVE, MoveId.VISE_GRIP ], + [ RELEARN_MOVE, MoveId.DIG ], + [ RELEARN_MOVE, MoveId.MUD_SLAP ], + [ RELEARN_MOVE, MoveId.IRON_DEFENSE ], + [ RELEARN_MOVE, MoveId.X_SCISSOR ], + [ RELEARN_MOVE, MoveId.BUG_BITE ], + [ 1, MoveId.CHARGE ], + [ 1, MoveId.CRUNCH ], + [ 1, MoveId.DISCHARGE ], + [ 1, MoveId.STRING_SHOT ], + [ 15, MoveId.BITE ], + [ 23, MoveId.SPARK ], + [ 29, MoveId.STICKY_WEB ], + [ 36, MoveId.BUG_BUZZ ], + [ 43, MoveId.GUILLOTINE ], + [ 50, MoveId.FLY ], + [ 57, MoveId.AGILITY ], + [ 64, MoveId.ZAP_CANNON ], + ], + [SpeciesId.CRABRAWLER]: [ + [ 1, MoveId.BUBBLE ], + [ 1, MoveId.VISE_GRIP ], + [ 5, MoveId.ROCK_SMASH ], + [ 9, MoveId.LEER ], + [ 13, MoveId.BUBBLE_BEAM ], + [ 17, MoveId.PROTECT ], + [ 22, MoveId.BRICK_BREAK ], + [ 25, MoveId.SLAM ], + [ 29, MoveId.PAYBACK ], + [ 33, MoveId.REVERSAL ], + [ 37, MoveId.CRABHAMMER ], + [ 42, MoveId.IRON_DEFENSE ], + [ 45, MoveId.DYNAMIC_PUNCH ], + [ 49, MoveId.CLOSE_COMBAT ], + ], + [SpeciesId.CRABOMINABLE]: [ + [ EVOLVE_MOVE, MoveId.ICE_PUNCH ], + [ RELEARN_MOVE, MoveId.CRABHAMMER ], // Previous Stage Move + [ 1, MoveId.VISE_GRIP ], // Previous Stage Move + [ 1, MoveId.LEER ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.ROCK_SMASH ], + [ 1, MoveId.BUBBLE ], + [ 1, MoveId.PURSUIT ], + [ 1, MoveId.PAYBACK ], // Previous Stage Move + [ 17, MoveId.BUBBLE_BEAM ], + [ 22, MoveId.BRICK_BREAK ], + [ 25, MoveId.SLAM ], + [ 29, MoveId.AVALANCHE ], + [ 33, MoveId.REVERSAL ], + [ 37, MoveId.ICE_HAMMER ], + [ 42, MoveId.IRON_DEFENSE ], + [ 45, MoveId.DYNAMIC_PUNCH ], + [ 49, MoveId.CLOSE_COMBAT ], + ], + [SpeciesId.ORICORIO]: [ + [ 1, MoveId.POUND ], + [ 4, MoveId.GROWL ], + [ 6, MoveId.PECK ], + [ 10, MoveId.HELPING_HAND ], + [ 13, MoveId.AIR_CUTTER ], + [ 16, MoveId.BATON_PASS ], + [ 20, MoveId.FEATHER_DANCE ], + [ 23, MoveId.ACROBATICS ], + [ 26, MoveId.TEETER_DANCE ], + [ 30, MoveId.ROOST ], + [ 33, MoveId.FLATTER ], + [ 36, MoveId.AIR_SLASH ], + [ 40, MoveId.REVELATION_DANCE ], + [ 43, MoveId.AGILITY ], + [ 47, MoveId.HURRICANE ], + ], + [SpeciesId.CUTIEFLY]: [ + [ 1, MoveId.ABSORB ], + [ 1, MoveId.FAIRY_WIND ], + [ 6, MoveId.STUN_SPORE ], + [ 12, MoveId.SWEET_SCENT ], + [ 18, MoveId.DRAINING_KISS ], + [ 24, MoveId.STRUGGLE_BUG ], + [ 30, MoveId.COVET ], + [ 36, MoveId.SWITCHEROO ], + [ 42, MoveId.DAZZLING_GLEAM ], + [ 48, MoveId.BUG_BUZZ ], + [ 54, MoveId.QUIVER_DANCE ], + ], + [SpeciesId.RIBOMBEE]: [ + [ EVOLVE_MOVE, MoveId.POLLEN_PUFF ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.FAIRY_WIND ], + [ 18, MoveId.DRAINING_KISS ], + [ 24, MoveId.STRUGGLE_BUG ], + [ 32, MoveId.COVET ], + [ 40, MoveId.SWITCHEROO ], + [ 48, MoveId.DAZZLING_GLEAM ], + [ 56, MoveId.BUG_BUZZ ], + [ 64, MoveId.QUIVER_DANCE ], + ], + [SpeciesId.ROCKRUFF]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 4, MoveId.SAND_ATTACK ], + [ 8, MoveId.DOUBLE_TEAM ], + [ 12, MoveId.ROCK_THROW ], + [ 16, MoveId.HOWL ], + [ 20, MoveId.BITE ], + [ 24, MoveId.ROCK_TOMB ], + [ 28, MoveId.ROAR ], + [ 32, MoveId.ROCK_SLIDE ], + [ 36, MoveId.CRUNCH ], + [ 40, MoveId.SCARY_FACE ], + [ 44, MoveId.STEALTH_ROCK ], + [ 48, MoveId.STONE_EDGE ], + ], + [SpeciesId.LYCANROC]: [ + [ EVOLVE_MOVE, MoveId.SUCKER_PUNCH ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.QUICK_GUARD ], + [ 1, MoveId.ACCELEROCK ], + [ 12, MoveId.ROCK_THROW ], + [ 16, MoveId.HOWL ], + [ 20, MoveId.BITE ], + [ 24, MoveId.ROCK_TOMB ], + [ 30, MoveId.ROAR ], + [ 36, MoveId.ROCK_SLIDE ], + [ 42, MoveId.CRUNCH ], + [ 48, MoveId.SCARY_FACE ], + [ 54, MoveId.STEALTH_ROCK ], + [ 60, MoveId.STONE_EDGE ], + ], + [SpeciesId.WISHIWASHI]: [ + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 4, MoveId.HELPING_HAND ], + [ 8, MoveId.BEAT_UP ], + [ 12, MoveId.BRINE ], + [ 16, MoveId.TEARFUL_LOOK ], + [ 20, MoveId.DIVE ], + [ 24, MoveId.SOAK ], + [ 28, MoveId.UPROAR ], + [ 32, MoveId.AQUA_TAIL ], + [ 36, MoveId.AQUA_RING ], + [ 40, MoveId.ENDEAVOR ], + [ 44, MoveId.HYDRO_PUMP ], + [ 48, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.MAREANIE]: [ + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.PECK ], + [ 5, MoveId.WIDE_GUARD ], + [ 10, MoveId.BITE ], + [ 15, MoveId.VENOSHOCK ], + [ 20, MoveId.RECOVER ], + [ 25, MoveId.PIN_MISSILE ], + [ 30, MoveId.TOXIC_SPIKES ], + [ 35, MoveId.LIQUIDATION ], + [ 40, MoveId.ACID_SPRAY ], + [ 45, MoveId.POISON_JAB ], + [ 50, MoveId.TOXIC ], + ], + [SpeciesId.TOXAPEX]: [ + [ EVOLVE_MOVE, MoveId.BANEFUL_BUNKER ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.BITE ], + [ 1, MoveId.PECK ], + [ 1, MoveId.WIDE_GUARD ], + [ 15, MoveId.VENOSHOCK ], + [ 20, MoveId.RECOVER ], + [ 25, MoveId.PIN_MISSILE ], + [ 30, MoveId.TOXIC_SPIKES ], + [ 35, MoveId.LIQUIDATION ], + [ 42, MoveId.ACID_SPRAY ], + [ 49, MoveId.POISON_JAB ], + [ 56, MoveId.TOXIC ], + ], + [SpeciesId.MUDBRAY]: [ + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.ROCK_SMASH ], + [ 4, MoveId.IRON_DEFENSE ], + [ 8, MoveId.DOUBLE_KICK ], + [ 12, MoveId.BULLDOZE ], + [ 16, MoveId.STOMP ], + [ 20, MoveId.STRENGTH ], + [ 24, MoveId.COUNTER ], + [ 28, MoveId.HIGH_HORSEPOWER ], + [ 32, MoveId.HEAVY_SLAM ], + [ 36, MoveId.EARTHQUAKE ], + [ 40, MoveId.MEGA_KICK ], + [ 44, MoveId.SUPERPOWER ], + ], + [SpeciesId.MUDSDALE]: [ + [ 1, MoveId.DOUBLE_KICK ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.ROCK_SMASH ], + [ 1, MoveId.IRON_DEFENSE ], + [ 12, MoveId.BULLDOZE ], + [ 16, MoveId.STOMP ], + [ 20, MoveId.STRENGTH ], + [ 24, MoveId.COUNTER ], + [ 28, MoveId.HIGH_HORSEPOWER ], + [ 34, MoveId.HEAVY_SLAM ], + [ 40, MoveId.EARTHQUAKE ], + [ 46, MoveId.MEGA_KICK ], + [ 52, MoveId.SUPERPOWER ], + ], + [SpeciesId.DEWPIDER]: [ + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.INFESTATION ], + [ 1, MoveId.WATER_SPORT ], + [ 4, MoveId.BUG_BITE ], + [ 8, MoveId.BITE ], + [ 12, MoveId.BUBBLE_BEAM ], + [ 16, MoveId.AQUA_RING ], + [ 20, MoveId.HEADBUTT ], + [ 24, MoveId.CRUNCH ], + [ 28, MoveId.SOAK ], + [ 32, MoveId.ENTRAINMENT ], + [ 36, MoveId.LUNGE ], + [ 40, MoveId.LIQUIDATION ], + [ 44, MoveId.LEECH_LIFE ], + [ 48, MoveId.MIRROR_COAT ], + ], + [SpeciesId.ARAQUANID]: [ + [ 1, MoveId.BITE ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.BUG_BITE ], + [ 1, MoveId.WIDE_GUARD ], + [ 1, MoveId.INFESTATION ], + [ 1, MoveId.WATER_SPORT ], // Previous Stage Move + [ 1, MoveId.SPIDER_WEB ], + [ 12, MoveId.BUBBLE_BEAM ], + [ 16, MoveId.AQUA_RING ], + [ 20, MoveId.HEADBUTT ], + [ 26, MoveId.CRUNCH ], + [ 32, MoveId.SOAK ], + [ 38, MoveId.ENTRAINMENT ], + [ 44, MoveId.LUNGE ], + [ 50, MoveId.LIQUIDATION ], + [ 56, MoveId.LEECH_LIFE ], + [ 62, MoveId.MIRROR_COAT ], + ], + [SpeciesId.FOMANTIS]: [ + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.LEAFAGE ], + [ 5, MoveId.GROWTH ], + [ 10, MoveId.INGRAIN ], + [ 15, MoveId.RAZOR_LEAF ], + [ 20, MoveId.SWEET_SCENT ], + [ 25, MoveId.SLASH ], + [ 30, MoveId.X_SCISSOR ], + [ 35, MoveId.SYNTHESIS ], + [ 40, MoveId.LEAF_BLADE ], + [ 45, MoveId.SUNNY_DAY ], + [ 50, MoveId.SOLAR_BEAM ], + ], + [SpeciesId.LURANTIS]: [ + [ EVOLVE_MOVE, MoveId.PETAL_BLIZZARD ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.SOLAR_BEAM ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.INGRAIN ], + [ 1, MoveId.NIGHT_SLASH ], + [ 1, MoveId.LEAFAGE ], + [ 1, MoveId.DUAL_CHOP ], + [ 15, MoveId.RAZOR_LEAF ], + [ 20, MoveId.SWEET_SCENT ], + [ 25, MoveId.SLASH ], + [ 30, MoveId.X_SCISSOR ], + [ 37, MoveId.SYNTHESIS ], + [ 44, MoveId.LEAF_BLADE ], + [ 51, MoveId.SUNNY_DAY ], + [ 63, MoveId.SOLAR_BLADE ], + ], + [SpeciesId.MORELULL]: [ + [ 1, MoveId.ABSORB ], + [ 1, MoveId.ASTONISH ], + [ 4, MoveId.CONFUSE_RAY ], + [ 8, MoveId.INGRAIN ], + [ 12, MoveId.MEGA_DRAIN ], + [ 16, MoveId.SLEEP_POWDER ], + [ 20, MoveId.MOONLIGHT ], + [ 25, MoveId.STRENGTH_SAP ], + [ 28, MoveId.GIGA_DRAIN ], + [ 32, MoveId.DAZZLING_GLEAM ], + [ 36, MoveId.SPORE ], + [ 40, MoveId.MOONBLAST ], + [ 44, MoveId.DREAM_EATER ], + ], + [SpeciesId.SHIINOTIC]: [ + [ 1, MoveId.ABSORB ], + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.INGRAIN ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.FLASH ], + [ 12, MoveId.MEGA_DRAIN ], + [ 16, MoveId.SLEEP_POWDER ], + [ 20, MoveId.MOONLIGHT ], + [ 27, MoveId.STRENGTH_SAP ], + [ 32, MoveId.GIGA_DRAIN ], + [ 38, MoveId.DAZZLING_GLEAM ], + [ 44, MoveId.SPORE ], + [ 50, MoveId.MOONBLAST ], + [ 56, MoveId.DREAM_EATER ], + ], + [SpeciesId.SALANDIT]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.POISON_GAS ], + [ 5, MoveId.SMOG ], + [ 10, MoveId.EMBER ], + [ 15, MoveId.POISON_FANG ], + [ 20, MoveId.SWEET_SCENT ], + [ 25, MoveId.NASTY_PLOT ], + [ 30, MoveId.INCINERATE ], + [ 35, MoveId.VENOSHOCK ], + [ 40, MoveId.DRAGON_PULSE ], + [ 45, MoveId.FLAMETHROWER ], + [ 50, MoveId.TOXIC ], + [ 55, MoveId.ENDEAVOR ], + ], + [SpeciesId.SALAZZLE]: [ + [ EVOLVE_MOVE, MoveId.FIRE_LASH ], + [ 1, MoveId.POUND ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.DISABLE ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.SMOG ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.SWAGGER ], + [ 1, MoveId.ENCORE ], + [ 1, MoveId.TORMENT ], + [ 1, MoveId.KNOCK_OFF ], + [ 1, MoveId.ENDEAVOR ], + [ 1, MoveId.CAPTIVATE ], + [ 15, MoveId.POISON_FANG ], + [ 20, MoveId.SWEET_SCENT ], + [ 25, MoveId.NASTY_PLOT ], + [ 30, MoveId.INCINERATE ], + [ 37, MoveId.VENOSHOCK ], + [ 44, MoveId.DRAGON_PULSE ], + [ 51, MoveId.FLAMETHROWER ], + [ 58, MoveId.TOXIC ], + ], + [SpeciesId.STUFFUL]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 4, MoveId.BABY_DOLL_EYES ], + [ 8, MoveId.PAYBACK ], + [ 12, MoveId.BRUTAL_SWING ], + [ 16, MoveId.ENDURE ], + [ 20, MoveId.STRENGTH ], + [ 24, MoveId.TAKE_DOWN ], + [ 28, MoveId.FLAIL ], + [ 32, MoveId.HAMMER_ARM ], + [ 36, MoveId.THRASH ], + [ 40, MoveId.PAIN_SPLIT ], + [ 44, MoveId.DOUBLE_EDGE ], + [ 48, MoveId.SUPERPOWER ], + ], + [SpeciesId.BEWEAR]: [ + [ EVOLVE_MOVE, MoveId.BIND ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PAYBACK ], + [ 1, MoveId.BABY_DOLL_EYES ], + [ 12, MoveId.BRUTAL_SWING ], + [ 16, MoveId.ENDURE ], + [ 20, MoveId.STRENGTH ], + [ 24, MoveId.TAKE_DOWN ], + [ 30, MoveId.FLAIL ], + [ 36, MoveId.HAMMER_ARM ], + [ 42, MoveId.THRASH ], + [ 48, MoveId.PAIN_SPLIT ], + [ 54, MoveId.DOUBLE_EDGE ], + [ 60, MoveId.SUPERPOWER ], + ], + [SpeciesId.BOUNSWEET]: [ + [ 1, MoveId.SPLASH ], + [ 1, MoveId.LEAFAGE ], // Custom + [ 4, MoveId.PLAY_NICE ], + [ 8, MoveId.RAPID_SPIN ], + [ 12, MoveId.RAZOR_LEAF ], + [ 16, MoveId.SWEET_SCENT ], + [ 20, MoveId.MAGICAL_LEAF ], + [ 24, MoveId.FLAIL ], + [ 28, MoveId.TEETER_DANCE ], + [ 32, MoveId.AROMATIC_MIST ], + ], + [SpeciesId.STEENEE]: [ + [ 1, MoveId.LEAFAGE ], // Previous Stage Move, Custom + [ 1, MoveId.RAZOR_LEAF ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.PLAY_NICE ], + [ 16, MoveId.SWEET_SCENT ], + [ 22, MoveId.MAGICAL_LEAF ], + [ 28, MoveId.STOMP ], + [ 34, MoveId.TEETER_DANCE ], + [ 40, MoveId.AROMATIC_MIST ], + [ 46, MoveId.LEAF_STORM ], + ], + [SpeciesId.TSAREENA]: [ + [ EVOLVE_MOVE, MoveId.TROP_KICK ], + [ 1, MoveId.LEAFAGE ], // Previous Stage Move, Custom + [ 1, MoveId.RAZOR_LEAF ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.SWAGGER ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.POWER_WHIP ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.PUNISHMENT ], + [ 16, MoveId.SWEET_SCENT ], + [ 22, MoveId.MAGICAL_LEAF ], + [ 28, MoveId.STOMP ], + [ 34, MoveId.TEETER_DANCE ], + [ 40, MoveId.AROMATIC_MIST ], + [ 46, MoveId.LEAF_STORM ], + [ 58, MoveId.HIGH_JUMP_KICK ], + ], + [SpeciesId.COMFEY]: [ + [ 1, MoveId.WRAP ], + [ 1, MoveId.GROWTH ], + [ 3, MoveId.VINE_WHIP ], + [ 6, MoveId.HELPING_HAND ], + [ 9, MoveId.DRAINING_KISS ], + [ 12, MoveId.FLOWER_SHIELD ], + [ 15, MoveId.MAGICAL_LEAF ], + [ 18, MoveId.SYNTHESIS ], + [ 21, MoveId.LEECH_SEED ], + [ 24, MoveId.GRASS_KNOT ], + [ 27, MoveId.SWEET_KISS ], + [ 30, MoveId.FLORAL_HEALING ], + [ 33, MoveId.PETAL_BLIZZARD ], + [ 36, MoveId.AROMATHERAPY ], + [ 39, MoveId.PLAY_ROUGH ], + [ 42, MoveId.SWEET_SCENT ], + [ 45, MoveId.PETAL_DANCE ], + [ 48, MoveId.GRASSY_TERRAIN ], + ], + [SpeciesId.ORANGURU]: [ + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.TAUNT ], + [ 5, MoveId.AFTER_YOU ], + [ 10, MoveId.CALM_MIND ], + [ 15, MoveId.STORED_POWER ], + [ 20, MoveId.PSYCH_UP ], + [ 25, MoveId.QUASH ], + [ 30, MoveId.NASTY_PLOT ], + [ 35, MoveId.ZEN_HEADBUTT ], + [ 40, MoveId.TRICK_ROOM ], + [ 45, MoveId.PSYCHIC ], + [ 50, MoveId.INSTRUCT ], + [ 55, MoveId.FOUL_PLAY ], + [ 60, MoveId.FUTURE_SIGHT ], + ], + [SpeciesId.PASSIMIAN]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 5, MoveId.ROCK_SMASH ], + [ 10, MoveId.FOCUS_ENERGY ], + [ 15, MoveId.BEAT_UP ], + [ 20, MoveId.SCARY_FACE ], + [ 25, MoveId.TAKE_DOWN ], + [ 30, MoveId.FLING ], + [ 35, MoveId.BULK_UP ], + [ 40, MoveId.THRASH ], + [ 45, MoveId.DOUBLE_EDGE ], + [ 50, MoveId.CLOSE_COMBAT ], + [ 55, MoveId.REVERSAL ], + [ 60, MoveId.GIGA_IMPACT ], + ], + [SpeciesId.WIMPOD]: [ + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.STRUGGLE_BUG ], + ], + [SpeciesId.GOLISOPOD]: [ + [ EVOLVE_MOVE, MoveId.FIRST_IMPRESSION ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.SPITE ], + [ 1, MoveId.STRUGGLE_BUG ], + [ 4, MoveId.ROCK_SMASH ], + [ 8, MoveId.FURY_CUTTER ], + [ 12, MoveId.MUD_SHOT ], + [ 16, MoveId.BUG_BITE ], + [ 20, MoveId.IRON_DEFENSE ], + [ 24, MoveId.SUCKER_PUNCH ], + [ 28, MoveId.SLASH ], + [ 32, MoveId.RAZOR_SHELL ], + [ 36, MoveId.PIN_MISSILE ], + [ 40, MoveId.SWORDS_DANCE ], + [ 44, MoveId.LIQUIDATION ], + ], + [SpeciesId.SANDYGAST]: [ + [ 1, MoveId.ABSORB ], + [ 1, MoveId.HARDEN ], + [ 5, MoveId.ASTONISH ], + [ 10, MoveId.SAND_TOMB ], + [ 15, MoveId.MEGA_DRAIN ], + [ 20, MoveId.SAND_ATTACK ], + [ 25, MoveId.BULLDOZE ], + [ 30, MoveId.HYPNOSIS ], + [ 35, MoveId.GIGA_DRAIN ], + [ 40, MoveId.IRON_DEFENSE ], + [ 45, MoveId.SHADOW_BALL ], + [ 50, MoveId.EARTH_POWER ], + [ 55, MoveId.SHORE_UP ], + [ 60, MoveId.SANDSTORM ], + ], + [SpeciesId.PALOSSAND]: [ + [ 1, MoveId.ABSORB ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.SAND_TOMB ], + [ 15, MoveId.MEGA_DRAIN ], + [ 20, MoveId.SAND_ATTACK ], + [ 25, MoveId.BULLDOZE ], + [ 30, MoveId.HYPNOSIS ], + [ 35, MoveId.GIGA_DRAIN ], + [ 40, MoveId.IRON_DEFENSE ], + [ 47, MoveId.SHADOW_BALL ], + [ 54, MoveId.EARTH_POWER ], + [ 61, MoveId.SHORE_UP ], + [ 68, MoveId.SANDSTORM ], + ], + [SpeciesId.PYUKUMUKU]: [ + [ 1, MoveId.COUNTER ], // Custom, Moved from Level 20 to 1 + [ 1, MoveId.HARDEN ], + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.BIDE ], + [ 1, MoveId.MUD_SPORT ], + [ 1, MoveId.WATER_SPORT ], + [ 5, MoveId.HELPING_HAND ], + [ 10, MoveId.TAUNT ], + [ 15, MoveId.SAFEGUARD ], + [ 20, MoveId.MIRROR_COAT ], // Custom + [ 25, MoveId.PURIFY ], + [ 30, MoveId.CURSE ], + [ 35, MoveId.GASTRO_ACID ], + [ 40, MoveId.PAIN_SPLIT ], + [ 45, MoveId.RECOVER ], + [ 50, MoveId.SOAK ], + [ 55, MoveId.TOXIC ], + [ 60, MoveId.MEMENTO ], + ], + [SpeciesId.TYPE_NULL]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.IMPRISON ], + [ 5, MoveId.AERIAL_ACE ], + [ 10, MoveId.SCARY_FACE ], + [ 15, MoveId.DOUBLE_HIT ], + [ 20, MoveId.METAL_SOUND ], + [ 25, MoveId.CRUSH_CLAW ], + [ 30, MoveId.AIR_SLASH ], + [ 35, MoveId.TRI_ATTACK ], + [ 40, MoveId.X_SCISSOR ], + [ 45, MoveId.IRON_HEAD ], + [ 50, MoveId.TAKE_DOWN ], + [ 55, MoveId.DOUBLE_EDGE ], + [ 60, MoveId.HEAL_BLOCK ], + ], + [SpeciesId.SILVALLY]: [ + [ EVOLVE_MOVE, MoveId.MULTI_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.BITE ], + [ 1, MoveId.EXPLOSION ], + [ 1, MoveId.SCARY_FACE ], + [ 1, MoveId.IMPRISON ], + [ 1, MoveId.POISON_FANG ], + [ 1, MoveId.AERIAL_ACE ], + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.FIRE_FANG ], + [ 1, MoveId.IRON_HEAD ], + [ 1, MoveId.HEAL_BLOCK ], + [ 15, MoveId.DOUBLE_HIT ], + [ 20, MoveId.METAL_SOUND ], + [ 25, MoveId.CRUSH_CLAW ], + [ 30, MoveId.AIR_SLASH ], + [ 35, MoveId.TRI_ATTACK ], + [ 40, MoveId.X_SCISSOR ], + [ 45, MoveId.CRUNCH ], + [ 50, MoveId.TAKE_DOWN ], + [ 55, MoveId.DOUBLE_EDGE ], + [ 60, MoveId.PARTING_SHOT ], + ], + [SpeciesId.MINIOR]: [ + [ 1, MoveId.TACKLE ], + [ 3, MoveId.DEFENSE_CURL ], + [ 8, MoveId.ROLLOUT ], + [ 10, MoveId.CONFUSE_RAY ], + [ 15, MoveId.SWIFT ], + [ 17, MoveId.ANCIENT_POWER ], + [ 22, MoveId.SELF_DESTRUCT ], + [ 24, MoveId.STEALTH_ROCK ], + [ 29, MoveId.TAKE_DOWN ], + [ 31, MoveId.AUTOTOMIZE ], + [ 36, MoveId.COSMIC_POWER ], + [ 38, MoveId.POWER_GEM ], + [ 43, MoveId.DOUBLE_EDGE ], + [ 45, MoveId.SHELL_SMASH ], + [ 50, MoveId.EXPLOSION ], + ], + [SpeciesId.KOMALA]: [ + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.ROLLOUT ], + [ 6, MoveId.STOCKPILE ], + [ 6, MoveId.SPIT_UP ], + [ 6, MoveId.SWALLOW ], + [ 11, MoveId.RAPID_SPIN ], + [ 16, MoveId.YAWN ], + [ 21, MoveId.SLAM ], + [ 26, MoveId.FLAIL ], + [ 31, MoveId.SUCKER_PUNCH ], + [ 36, MoveId.PSYCH_UP ], + [ 41, MoveId.WOOD_HAMMER ], + [ 46, MoveId.THRASH ], + ], + [SpeciesId.TURTONATOR]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SMOG ], + [ 4, MoveId.EMBER ], + [ 8, MoveId.PROTECT ], + [ 12, MoveId.ENDURE ], + [ 16, MoveId.FLAIL ], + [ 20, MoveId.INCINERATE ], + [ 24, MoveId.IRON_DEFENSE ], + [ 28, MoveId.DRAGON_PULSE ], + [ 32, MoveId.BODY_SLAM ], + [ 36, MoveId.FLAMETHROWER ], + [ 40, MoveId.SHELL_TRAP ], + [ 44, MoveId.SHELL_SMASH ], + [ 48, MoveId.OVERHEAT ], + [ 52, MoveId.EXPLOSION ], + ], + [SpeciesId.TOGEDEMARU]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.NUZZLE ], + [ 5, MoveId.DEFENSE_CURL ], + [ 10, MoveId.CHARGE ], + [ 15, MoveId.THUNDER_SHOCK ], + [ 20, MoveId.FELL_STINGER ], + [ 25, MoveId.SPARK ], + [ 30, MoveId.PIN_MISSILE ], + [ 35, MoveId.MAGNET_RISE ], + [ 40, MoveId.ZING_ZAP ], + [ 45, MoveId.DISCHARGE ], + [ 50, MoveId.ELECTRIC_TERRAIN ], + [ 55, MoveId.WILD_CHARGE ], + [ 60, MoveId.SPIKY_SHIELD ], + ], + [SpeciesId.MIMIKYU]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.WOOD_HAMMER ], + [ 6, MoveId.SHADOW_SNEAK ], + [ 12, MoveId.DOUBLE_TEAM ], + [ 18, MoveId.BABY_DOLL_EYES ], + [ 24, MoveId.MIMIC ], + [ 30, MoveId.HONE_CLAWS ], + [ 36, MoveId.SLASH ], + [ 42, MoveId.SHADOW_CLAW ], + [ 48, MoveId.CHARM ], + [ 54, MoveId.PLAY_ROUGH ], + [ 60, MoveId.PAIN_SPLIT ], + ], + [SpeciesId.BRUXISH]: [ + [ 1, MoveId.WATER_GUN ], + [ 4, MoveId.ASTONISH ], + [ 9, MoveId.CONFUSION ], + [ 12, MoveId.BITE ], + [ 17, MoveId.AQUA_JET ], + [ 20, MoveId.DISABLE ], + [ 25, MoveId.PSYSHOCK ], + [ 28, MoveId.CRUNCH ], + [ 33, MoveId.AQUA_TAIL ], + [ 36, MoveId.SCREECH ], + [ 41, MoveId.PSYCHIC_FANGS ], + [ 44, MoveId.WAVE_CRASH ], + ], + [SpeciesId.DRAMPA]: [ + [ 1, MoveId.ECHOED_VOICE ], + [ 1, MoveId.PLAY_NICE ], + [ 5, MoveId.TWISTER ], + [ 10, MoveId.PROTECT ], + [ 15, MoveId.GLARE ], + [ 20, MoveId.SAFEGUARD ], + [ 25, MoveId.DRAGON_BREATH ], + [ 30, MoveId.EXTRASENSORY ], + [ 35, MoveId.DRAGON_PULSE ], + [ 40, MoveId.LIGHT_SCREEN ], + [ 45, MoveId.FLY ], + [ 50, MoveId.HYPER_VOICE ], + [ 55, MoveId.OUTRAGE ], + ], + [SpeciesId.DHELMISE]: [ + [ 1, MoveId.ABSORB ], + [ 1, MoveId.RAPID_SPIN ], + [ 4, MoveId.ASTONISH ], + [ 8, MoveId.WRAP ], + [ 12, MoveId.MEGA_DRAIN ], + [ 16, MoveId.GROWTH ], + [ 20, MoveId.GYRO_BALL ], + [ 24, MoveId.SWITCHEROO ], + [ 28, MoveId.GIGA_DRAIN ], + [ 32, MoveId.WHIRLPOOL ], + [ 36, MoveId.HEAVY_SLAM ], + [ 40, MoveId.SLAM ], + [ 44, MoveId.SHADOW_BALL ], + [ 48, MoveId.METAL_SOUND ], + [ 52, MoveId.ANCHOR_SHOT ], + [ 56, MoveId.ENERGY_BALL ], + [ 60, MoveId.PHANTOM_FORCE ], + [ 64, MoveId.POWER_WHIP ], + ], + [SpeciesId.JANGMO_O]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 4, MoveId.PROTECT ], + [ 8, MoveId.DRAGON_TAIL ], + [ 12, MoveId.SCARY_FACE ], + [ 16, MoveId.HEADBUTT ], + [ 20, MoveId.WORK_UP ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.IRON_DEFENSE ], + [ 32, MoveId.DRAGON_CLAW ], + [ 36, MoveId.NOBLE_ROAR ], + [ 40, MoveId.DRAGON_DANCE ], + [ 44, MoveId.OUTRAGE ], + ], + [SpeciesId.HAKAMO_O]: [ + [ EVOLVE_MOVE, MoveId.SKY_UPPERCUT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.DRAGON_TAIL ], + [ 1, MoveId.BIDE ], + [ 12, MoveId.SCARY_FACE ], + [ 16, MoveId.HEADBUTT ], + [ 20, MoveId.WORK_UP ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.IRON_DEFENSE ], + [ 32, MoveId.DRAGON_CLAW ], + [ 38, MoveId.NOBLE_ROAR ], + [ 44, MoveId.DRAGON_DANCE ], + [ 50, MoveId.OUTRAGE ], + [ 56, MoveId.CLOSE_COMBAT ], + ], + [SpeciesId.KOMMO_O]: [ + [ EVOLVE_MOVE, MoveId.CLANGING_SCALES ], + [ RELEARN_MOVE, MoveId.BELLY_DRUM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.DRAGON_TAIL ], + [ 1, MoveId.BIDE ], + [ 1, MoveId.SKY_UPPERCUT ], + [ 12, MoveId.SCARY_FACE ], + [ 16, MoveId.HEADBUTT ], + [ 20, MoveId.WORK_UP ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.IRON_DEFENSE ], + [ 32, MoveId.DRAGON_CLAW ], + [ 38, MoveId.NOBLE_ROAR ], + [ 44, MoveId.DRAGON_DANCE ], + [ 52, MoveId.OUTRAGE ], + [ 60, MoveId.CLOSE_COMBAT ], + [ 68, MoveId.CLANGOROUS_SOUL ], + [ 76, MoveId.BOOMBURST ], + ], + [SpeciesId.TAPU_KOKO]: [ + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 5, MoveId.WITHDRAW ], + [ 10, MoveId.FAIRY_WIND ], + [ 15, MoveId.FALSE_SWIPE ], + [ 20, MoveId.SPARK ], + [ 25, MoveId.SHOCK_WAVE ], + [ 30, MoveId.CHARGE ], + [ 35, MoveId.AGILITY ], + [ 40, MoveId.SCREECH ], + [ 45, MoveId.DISCHARGE ], + [ 50, MoveId.MEAN_LOOK ], + [ 55, MoveId.NATURES_MADNESS ], + [ 60, MoveId.WILD_CHARGE ], + [ 65, MoveId.BRAVE_BIRD ], + [ 70, MoveId.POWER_SWAP ], + [ 75, MoveId.ELECTRIC_TERRAIN ], + ], + [SpeciesId.TAPU_LELE]: [ + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.ASTONISH ], + [ 5, MoveId.WITHDRAW ], + [ 10, MoveId.AROMATHERAPY ], + [ 15, MoveId.DRAINING_KISS ], + [ 20, MoveId.PSYBEAM ], + [ 25, MoveId.FLATTER ], + [ 30, MoveId.AROMATIC_MIST ], + [ 35, MoveId.SWEET_SCENT ], + [ 40, MoveId.EXTRASENSORY ], + [ 45, MoveId.PSYSHOCK ], + [ 50, MoveId.MEAN_LOOK ], + [ 55, MoveId.NATURES_MADNESS ], + [ 60, MoveId.MOONBLAST ], + [ 65, MoveId.TICKLE ], + [ 70, MoveId.SKILL_SWAP ], + [ 75, MoveId.PSYCHIC_TERRAIN ], + ], + [SpeciesId.TAPU_BULU]: [ + [ 1, MoveId.ROCK_SMASH ], + [ 1, MoveId.LEAFAGE ], + [ 5, MoveId.WITHDRAW ], + [ 10, MoveId.DISABLE ], + [ 15, MoveId.LEECH_SEED ], + [ 20, MoveId.MEGA_DRAIN ], + [ 25, MoveId.WHIRLWIND ], + [ 30, MoveId.HORN_ATTACK ], + [ 35, MoveId.SCARY_FACE ], + [ 40, MoveId.HORN_LEECH ], + [ 45, MoveId.ZEN_HEADBUTT ], + [ 50, MoveId.MEAN_LOOK ], + [ 55, MoveId.NATURES_MADNESS ], + [ 60, MoveId.WOOD_HAMMER ], + [ 65, MoveId.MEGAHORN ], + [ 70, MoveId.SKULL_BASH ], + [ 75, MoveId.GRASSY_TERRAIN ], + ], + [SpeciesId.TAPU_FINI]: [ + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.DISARMING_VOICE ], + [ 5, MoveId.WITHDRAW ], + [ 10, MoveId.MIST ], + [ 10, MoveId.HAZE ], + [ 15, MoveId.AQUA_RING ], + [ 20, MoveId.WATER_PULSE ], + [ 25, MoveId.BRINE ], + [ 30, MoveId.DEFOG ], + [ 35, MoveId.HEAL_PULSE ], + [ 40, MoveId.SURF ], + [ 45, MoveId.MUDDY_WATER ], + [ 50, MoveId.MEAN_LOOK ], + [ 55, MoveId.NATURES_MADNESS ], + [ 60, MoveId.MOONBLAST ], + [ 65, MoveId.HYDRO_PUMP ], + [ 70, MoveId.SOAK ], + [ 75, MoveId.MISTY_TERRAIN ], + ], + [SpeciesId.COSMOG]: [ + [ 1, MoveId.TELEPORT ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.STORED_POWER ], // Custom + ], + [SpeciesId.COSMOEM]: [ + [ EVOLVE_MOVE, MoveId.COSMIC_POWER ], + [ 1, MoveId.TELEPORT ], + [ 1, MoveId.SPLASH ], // Previous Stage Move + [ 1, MoveId.STORED_POWER ], // Previous Stage Move, Custom + ], + [SpeciesId.SOLGALEO]: [ + [ EVOLVE_MOVE, MoveId.SUNSTEEL_STRIKE ], + [ 1, MoveId.TELEPORT ], + [ 1, MoveId.SPLASH ], // Previous Stage Move + [ 1, MoveId.STORED_POWER ], // Previous Stage Move, Custom + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.COSMIC_POWER ], + [ 1, MoveId.NOBLE_ROAR ], + [ 1, MoveId.WAKE_UP_SLAP ], + [ 7, MoveId.IRON_HEAD ], + [ 14, MoveId.METAL_SOUND ], + [ 21, MoveId.ZEN_HEADBUTT ], + [ 28, MoveId.FLASH_CANNON ], + [ 35, MoveId.MORNING_SUN ], + [ 42, MoveId.CRUNCH ], + [ 49, MoveId.METAL_BURST ], + [ 56, MoveId.WILD_CHARGE ], + [ 63, MoveId.SOLAR_BEAM ], + [ 70, MoveId.FLARE_BLITZ ], + [ 77, MoveId.WIDE_GUARD ], + [ 84, MoveId.GIGA_IMPACT ], + ], + [SpeciesId.LUNALA]: [ + [ EVOLVE_MOVE, MoveId.MOONGEIST_BEAM ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.HYPNOSIS ], + [ 1, MoveId.TELEPORT ], + [ 1, MoveId.SPLASH ], // Previous Stage Move + [ 1, MoveId.STORED_POWER ], // Previous Stage Move, Custom + [ 1, MoveId.COSMIC_POWER ], + [ 7, MoveId.NIGHT_SHADE ], + [ 14, MoveId.CONFUSE_RAY ], + [ 21, MoveId.AIR_SLASH ], + [ 28, MoveId.SHADOW_BALL ], + [ 35, MoveId.MOONLIGHT ], + [ 42, MoveId.NIGHT_DAZE ], + [ 49, MoveId.MAGIC_COAT ], + [ 56, MoveId.MOONBLAST ], + [ 63, MoveId.PHANTOM_FORCE ], + [ 70, MoveId.DREAM_EATER ], + [ 77, MoveId.WIDE_GUARD ], + [ 84, MoveId.HYPER_BEAM ], + ], + [SpeciesId.NIHILEGO]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.CONSTRICT ], + [ 5, MoveId.ACID ], + [ 10, MoveId.TICKLE ], + [ 15, MoveId.ACID_SPRAY ], + [ 20, MoveId.CLEAR_SMOG ], + [ 25, MoveId.GUARD_SPLIT ], + [ 25, MoveId.POWER_SPLIT ], + [ 30, MoveId.VENOSHOCK ], + [ 35, MoveId.HEADBUTT ], + [ 40, MoveId.TOXIC_SPIKES ], + [ 45, MoveId.VENOM_DRENCH ], + [ 50, MoveId.POWER_GEM ], + [ 55, MoveId.STEALTH_ROCK ], + [ 60, MoveId.MIRROR_COAT ], + [ 65, MoveId.WONDER_ROOM ], + [ 70, MoveId.HEAD_SMASH ], + ], + [SpeciesId.BUZZWOLE]: [ + [ 1, MoveId.HARDEN ], + [ 1, MoveId.POWER_UP_PUNCH ], + [ 5, MoveId.TAUNT ], + [ 10, MoveId.FELL_STINGER ], + [ 15, MoveId.VITAL_THROW ], + [ 20, MoveId.BULK_UP ], + [ 25, MoveId.ENDURE ], + [ 30, MoveId.REVERSAL ], + [ 35, MoveId.MEGA_PUNCH ], + [ 40, MoveId.LUNGE ], + [ 45, MoveId.FOCUS_ENERGY ], + [ 50, MoveId.DYNAMIC_PUNCH ], + [ 55, MoveId.COUNTER ], + [ 60, MoveId.HAMMER_ARM ], + [ 65, MoveId.SUPERPOWER ], + [ 70, MoveId.FOCUS_PUNCH ], + ], + [SpeciesId.PHEROMOSA]: [ + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.FEINT ], + [ 5, MoveId.LEER ], + [ 10, MoveId.QUICK_GUARD ], + [ 15, MoveId.BUG_BITE ], + [ 20, MoveId.LOW_KICK ], + [ 25, MoveId.DOUBLE_KICK ], + [ 30, MoveId.TRIPLE_KICK ], + [ 35, MoveId.STOMP ], + [ 40, MoveId.AGILITY ], + [ 45, MoveId.LUNGE ], + [ 50, MoveId.BOUNCE ], + [ 55, MoveId.SPEED_SWAP ], + [ 60, MoveId.BUG_BUZZ ], + [ 65, MoveId.QUIVER_DANCE ], + [ 70, MoveId.HIGH_JUMP_KICK ], + ], + [SpeciesId.XURKITREE]: [ + [ 1, MoveId.WRAP ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 5, MoveId.CHARGE ], + [ 10, MoveId.THUNDER_WAVE ], + [ 15, MoveId.INGRAIN ], + [ 20, MoveId.SPARK ], + [ 25, MoveId.SHOCK_WAVE ], + [ 30, MoveId.HYPNOSIS ], + [ 35, MoveId.EERIE_IMPULSE ], + [ 40, MoveId.THUNDER_PUNCH ], + [ 45, MoveId.DISCHARGE ], + [ 50, MoveId.MAGNET_RISE ], + [ 55, MoveId.THUNDERBOLT ], + [ 60, MoveId.ELECTRIC_TERRAIN ], + [ 65, MoveId.POWER_WHIP ], + [ 70, MoveId.ZAP_CANNON ], + ], + [SpeciesId.CELESTEELA]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.ABSORB ], + [ 5, MoveId.HARDEN ], + [ 10, MoveId.WIDE_GUARD ], + [ 15, MoveId.MEGA_DRAIN ], + [ 20, MoveId.SMACK_DOWN ], + [ 25, MoveId.INGRAIN ], + [ 30, MoveId.AUTOTOMIZE ], + [ 35, MoveId.GIGA_DRAIN ], + [ 40, MoveId.FLASH_CANNON ], + [ 45, MoveId.METAL_SOUND ], + [ 50, MoveId.IRON_DEFENSE ], + [ 55, MoveId.LEECH_SEED ], + [ 60, MoveId.HEAVY_SLAM ], + [ 65, MoveId.DOUBLE_EDGE ], + [ 70, MoveId.SKULL_BASH ], + ], + [SpeciesId.KARTANA]: [ + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.VACUUM_WAVE ], + [ 5, MoveId.RAZOR_LEAF ], + [ 10, MoveId.FALSE_SWIPE ], + [ 15, MoveId.CUT ], + [ 20, MoveId.AIR_CUTTER ], + [ 25, MoveId.AERIAL_ACE ], + [ 30, MoveId.DETECT ], + [ 35, MoveId.NIGHT_SLASH ], + [ 40, MoveId.SYNTHESIS ], + [ 45, MoveId.LASER_FOCUS ], + [ 50, MoveId.DEFOG ], + [ 55, MoveId.LEAF_BLADE ], + [ 60, MoveId.SACRED_SWORD ], + [ 65, MoveId.SWORDS_DANCE ], + [ 70, MoveId.GUILLOTINE ], + ], + [SpeciesId.GUZZLORD]: [ + [ 1, MoveId.BITE ], + [ 1, MoveId.DRAGON_TAIL ], + [ 5, MoveId.STOCKPILE ], + [ 5, MoveId.SWALLOW ], + [ 10, MoveId.KNOCK_OFF ], + [ 15, MoveId.STOMP ], + [ 20, MoveId.STOMPING_TANTRUM ], + [ 25, MoveId.WIDE_GUARD ], + [ 30, MoveId.CRUNCH ], + [ 35, MoveId.BODY_SLAM ], + [ 40, MoveId.GASTRO_ACID ], + [ 45, MoveId.HAMMER_ARM ], + [ 50, MoveId.HEAVY_SLAM ], + [ 55, MoveId.DRAGON_RUSH ], + [ 60, MoveId.BELCH ], + [ 65, MoveId.THRASH ], + [ 70, MoveId.GIGA_IMPACT ], + ], + [SpeciesId.NECROZMA]: [ + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.MORNING_SUN ], + [ 1, MoveId.MOONLIGHT ], + [ 1, MoveId.GRAVITY ], + [ 1, MoveId.CHARGE_BEAM ], + [ 1, MoveId.MIRROR_SHOT ], + [ 8, MoveId.STEALTH_ROCK ], + [ 16, MoveId.SLASH ], + [ 24, MoveId.NIGHT_SLASH ], + [ 32, MoveId.PSYCHO_CUT ], + [ 40, MoveId.STORED_POWER ], + [ 48, MoveId.ROCK_BLAST ], + [ 56, MoveId.IRON_DEFENSE ], + [ 64, MoveId.POWER_GEM ], + [ 72, MoveId.PHOTON_GEYSER ], + [ 80, MoveId.AUTOTOMIZE ], + [ 88, MoveId.PRISMATIC_LASER ], + ], + [SpeciesId.MAGEARNA]: [ + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.GYRO_BALL ], + [ 1, MoveId.DISARMING_VOICE ], // Custom + [ 1, MoveId.CRAFTY_SHIELD ], + [ 1, MoveId.GEAR_UP ], + [ 6, MoveId.DEFENSE_CURL ], + [ 12, MoveId.ROLLOUT ], + [ 18, MoveId.IRON_DEFENSE ], + [ 24, MoveId.MAGNETIC_FLUX ], + [ 30, MoveId.PSYBEAM ], + [ 36, MoveId.AURORA_BEAM ], + [ 42, MoveId.LOCK_ON ], + [ 48, MoveId.SHIFT_GEAR ], + [ 54, MoveId.TRICK ], + [ 60, MoveId.IRON_HEAD ], + [ 66, MoveId.AURA_SPHERE ], + [ 72, MoveId.FLASH_CANNON ], + [ 78, MoveId.PAIN_SPLIT ], + [ 84, MoveId.ZAP_CANNON ], + [ 90, MoveId.FLEUR_CANNON ], + ], + [SpeciesId.MARSHADOW]: [ + [ 1, MoveId.FIRE_PUNCH ], + [ 1, MoveId.ICE_PUNCH ], + [ 1, MoveId.THUNDER_PUNCH ], + [ 1, MoveId.COUNTER ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.SHADOW_SNEAK ], + [ 1, MoveId.PURSUIT ], + [ 9, MoveId.ROLE_PLAY ], + [ 18, MoveId.SHADOW_PUNCH ], + [ 27, MoveId.FORCE_PALM ], + [ 36, MoveId.ASSURANCE ], + [ 45, MoveId.SUCKER_PUNCH ], + [ 54, MoveId.DRAIN_PUNCH ], + [ 63, MoveId.PSYCH_UP ], + [ 72, MoveId.SPECTRAL_THIEF ], + [ 81, MoveId.LASER_FOCUS ], + [ 90, MoveId.ENDEAVOR ], + [ 99, MoveId.CLOSE_COMBAT ], + ], + [SpeciesId.POIPOLE]: [ + [ RELEARN_MOVE, MoveId.DRAGON_PULSE ], // Custom, made relearn + [ 1, MoveId.GROWL ], + [ 1, MoveId.ACID ], + [ 1, MoveId.PECK ], + [ 1, MoveId.HELPING_HAND ], + [ 7, MoveId.FURY_ATTACK ], + [ 14, MoveId.FELL_STINGER ], + [ 21, MoveId.CHARM ], + [ 28, MoveId.VENOSHOCK ], + [ 35, MoveId.VENOM_DRENCH ], + [ 42, MoveId.NASTY_PLOT ], + [ 49, MoveId.POISON_JAB ], + [ 56, MoveId.GASTRO_ACID ], + [ 63, MoveId.TOXIC ], + ], + [SpeciesId.NAGANADEL]: [ + [ EVOLVE_MOVE, MoveId.AIR_CUTTER ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.ACID ], + [ 1, MoveId.PECK ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.AIR_SLASH ], + [ 1, MoveId.DRAGON_PULSE ], + [ 7, MoveId.FURY_ATTACK ], + [ 14, MoveId.FELL_STINGER ], + [ 21, MoveId.CHARM ], + [ 28, MoveId.VENOSHOCK ], + [ 35, MoveId.VENOM_DRENCH ], + [ 42, MoveId.NASTY_PLOT ], + [ 49, MoveId.POISON_JAB ], + [ 56, MoveId.GASTRO_ACID ], + [ 63, MoveId.TOXIC ], + [ 70, MoveId.DRAGON_RUSH ], + ], + [SpeciesId.STAKATAKA]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 5, MoveId.ROCK_THROW ], + [ 10, MoveId.PROTECT ], + [ 15, MoveId.STOMP ], + [ 20, MoveId.BLOCK ], + [ 25, MoveId.ROCK_SLIDE ], + [ 30, MoveId.WIDE_GUARD ], + [ 35, MoveId.AUTOTOMIZE ], + [ 40, MoveId.ROCK_BLAST ], + [ 45, MoveId.MAGNET_RISE ], + [ 50, MoveId.IRON_DEFENSE ], + [ 55, MoveId.IRON_HEAD ], + [ 60, MoveId.TAKE_DOWN ], + [ 65, MoveId.STEALTH_ROCK ], + [ 70, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.BLACEPHALON]: [ + [ 1, MoveId.FIRE_SPIN ], + [ 1, MoveId.ASTONISH ], + [ 5, MoveId.LIGHT_SCREEN ], + [ 10, MoveId.EMBER ], + [ 15, MoveId.NIGHT_SHADE ], + [ 20, MoveId.CONFUSE_RAY ], + [ 25, MoveId.MAGIC_COAT ], + [ 30, MoveId.INCINERATE ], + [ 35, MoveId.HYPNOSIS ], + [ 40, MoveId.MYSTICAL_FIRE ], + [ 45, MoveId.SHADOW_BALL ], + [ 50, MoveId.CALM_MIND ], + [ 55, MoveId.WILL_O_WISP ], + [ 60, MoveId.TRICK ], + [ 65, MoveId.FIRE_BLAST ], + [ 70, MoveId.MIND_BLOWN ], + ], + [SpeciesId.ZERAORA]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.SPARK ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.SNARL ], + [ 1, MoveId.POWER_UP_PUNCH ], + [ 8, MoveId.FURY_SWIPES ], + [ 16, MoveId.QUICK_GUARD ], + [ 24, MoveId.SLASH ], + [ 32, MoveId.VOLT_SWITCH ], + [ 40, MoveId.CHARGE ], + [ 48, MoveId.THUNDER_PUNCH ], + [ 56, MoveId.HONE_CLAWS ], + [ 64, MoveId.DISCHARGE ], + [ 72, MoveId.WILD_CHARGE ], + [ 80, MoveId.AGILITY ], + [ 88, MoveId.PLASMA_FISTS ], + [ 96, MoveId.CLOSE_COMBAT ], + ], + [SpeciesId.MELTAN]: [ + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.HARDEN ], + [ 8, MoveId.TAIL_WHIP ], + [ 16, MoveId.HEADBUTT ], + [ 24, MoveId.THUNDER_WAVE ], + [ 32, MoveId.ACID_ARMOR ], + [ 40, MoveId.FLASH_CANNON ], + ], + [SpeciesId.MELMETAL]: [ + [ EVOLVE_MOVE, MoveId.THUNDER_PUNCH ], + [ 1, MoveId.HEADBUTT ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.HARDEN ], + [ 24, MoveId.THUNDER_WAVE ], + [ 32, MoveId.ACID_ARMOR ], + [ 40, MoveId.FLASH_CANNON ], + [ 48, MoveId.MEGA_PUNCH ], + [ 56, MoveId.PROTECT ], + [ 64, MoveId.DISCHARGE ], + [ 72, MoveId.DYNAMIC_PUNCH ], + [ 80, MoveId.SUPERPOWER ], + [ 88, MoveId.DOUBLE_IRON_BASH ], + [ 96, MoveId.HYPER_BEAM ], + ], + [SpeciesId.GROOKEY]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 5, MoveId.BRANCH_POKE ], // Custom, moved from 6 to 5 + [ 8, MoveId.TAUNT ], + [ 12, MoveId.RAZOR_LEAF ], + [ 17, MoveId.SCREECH ], + [ 20, MoveId.KNOCK_OFF ], + [ 24, MoveId.SLAM ], + [ 28, MoveId.UPROAR ], + [ 32, MoveId.WOOD_HAMMER ], + [ 36, MoveId.ENDEAVOR ], + ], + [SpeciesId.THWACKEY]: [ + [ EVOLVE_MOVE, MoveId.DOUBLE_HIT ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.TAUNT ], + [ 1, MoveId.BRANCH_POKE ], + [ 12, MoveId.RAZOR_LEAF ], + [ 19, MoveId.SCREECH ], + [ 24, MoveId.KNOCK_OFF ], + [ 30, MoveId.SLAM ], + [ 36, MoveId.UPROAR ], + [ 42, MoveId.WOOD_HAMMER ], + [ 48, MoveId.ENDEAVOR ], + ], + [SpeciesId.RILLABOOM]: [ + [ EVOLVE_MOVE, MoveId.DRUM_BEATING ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.TAUNT ], + [ 1, MoveId.DOUBLE_HIT ], + [ 1, MoveId.NOBLE_ROAR ], + [ 1, MoveId.GRASSY_TERRAIN ], + [ 1, MoveId.BRANCH_POKE ], + [ 12, MoveId.RAZOR_LEAF ], + [ 19, MoveId.SCREECH ], + [ 24, MoveId.KNOCK_OFF ], + [ 30, MoveId.SLAM ], + [ 38, MoveId.UPROAR ], + [ 46, MoveId.WOOD_HAMMER ], + [ 54, MoveId.ENDEAVOR ], + [ 62, MoveId.BOOMBURST ], + ], + [SpeciesId.SCORBUNNY]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 5, MoveId.EMBER ], // Custom, moved from 6 to 5 + [ 8, MoveId.QUICK_ATTACK ], + [ 12, MoveId.DOUBLE_KICK ], + [ 17, MoveId.FLAME_CHARGE ], + [ 20, MoveId.AGILITY ], + [ 24, MoveId.HEADBUTT ], + [ 28, MoveId.COUNTER ], + [ 32, MoveId.BOUNCE ], + [ 36, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.RABOOT]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 12, MoveId.DOUBLE_KICK ], + [ 19, MoveId.FLAME_CHARGE ], + [ 24, MoveId.AGILITY ], + [ 30, MoveId.HEADBUTT ], + [ 36, MoveId.COUNTER ], + [ 42, MoveId.BOUNCE ], + [ 48, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.CINDERACE]: [ + [ EVOLVE_MOVE, MoveId.PYRO_BALL ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.FEINT ], + [ 12, MoveId.DOUBLE_KICK ], + [ 19, MoveId.FLAME_CHARGE ], + [ 24, MoveId.AGILITY ], + [ 30, MoveId.HEADBUTT ], + [ 38, MoveId.COUNTER ], + [ 46, MoveId.BOUNCE ], + [ 54, MoveId.DOUBLE_EDGE ], + [ 62, MoveId.COURT_CHANGE ], + ], + [SpeciesId.SOBBLE]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.GROWL ], + [ 5, MoveId.WATER_GUN ], // Custom, moved from 6 to 5 + [ 8, MoveId.BIND ], + [ 12, MoveId.WATER_PULSE ], + [ 17, MoveId.TEARFUL_LOOK ], + [ 20, MoveId.SUCKER_PUNCH ], + [ 24, MoveId.U_TURN ], + [ 28, MoveId.LIQUIDATION ], + [ 32, MoveId.SOAK ], + [ 36, MoveId.RAIN_DANCE ], + ], + [SpeciesId.DRIZZILE]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.BIND ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 12, MoveId.WATER_PULSE ], + [ 19, MoveId.TEARFUL_LOOK ], + [ 24, MoveId.SUCKER_PUNCH ], + [ 30, MoveId.U_TURN ], + [ 36, MoveId.LIQUIDATION ], + [ 42, MoveId.SOAK ], + [ 48, MoveId.RAIN_DANCE ], + ], + [SpeciesId.INTELEON]: [ + [ EVOLVE_MOVE, MoveId.SNIPE_SHOT ], + [ 1, MoveId.POUND ], + [ 1, MoveId.BIND ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.ACROBATICS ], + [ 12, MoveId.WATER_PULSE ], + [ 19, MoveId.TEARFUL_LOOK ], + [ 24, MoveId.SUCKER_PUNCH ], + [ 30, MoveId.U_TURN ], + [ 38, MoveId.LIQUIDATION ], + [ 46, MoveId.SOAK ], + [ 54, MoveId.RAIN_DANCE ], + [ 62, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.SKWOVET]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 5, MoveId.BITE ], + [ 10, MoveId.STUFF_CHEEKS ], + [ 15, MoveId.STOCKPILE ], + [ 15, MoveId.SPIT_UP ], + [ 15, MoveId.SWALLOW ], + [ 20, MoveId.BODY_SLAM ], + [ 25, MoveId.REST ], + [ 30, MoveId.COUNTER ], + [ 35, MoveId.BULLET_SEED ], + [ 40, MoveId.SUPER_FANG ], + [ 45, MoveId.BELCH ], + ], + [SpeciesId.GREEDENT]: [ + [ EVOLVE_MOVE, MoveId.COVET ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.BITE ], + [ 1, MoveId.STUFF_CHEEKS ], + [ 15, MoveId.STOCKPILE ], + [ 15, MoveId.SPIT_UP ], + [ 15, MoveId.SWALLOW ], + [ 20, MoveId.BODY_SLAM ], + [ 27, MoveId.REST ], + [ 34, MoveId.COUNTER ], + [ 41, MoveId.BULLET_SEED ], + [ 48, MoveId.SUPER_FANG ], + [ 55, MoveId.BELCH ], + ], + [SpeciesId.ROOKIDEE]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 4, MoveId.POWER_TRIP ], + [ 8, MoveId.HONE_CLAWS ], + [ 12, MoveId.FURY_ATTACK ], + [ 16, MoveId.PLUCK ], + [ 20, MoveId.TAUNT ], + [ 24, MoveId.SCARY_FACE ], + [ 28, MoveId.DRILL_PECK ], + [ 32, MoveId.SWAGGER ], + [ 36, MoveId.BRAVE_BIRD ], + ], + [SpeciesId.CORVISQUIRE]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 1, MoveId.HONE_CLAWS ], + [ 1, MoveId.POWER_TRIP ], + [ 12, MoveId.FURY_ATTACK ], + [ 16, MoveId.PLUCK ], + [ 22, MoveId.TAUNT ], + [ 28, MoveId.SCARY_FACE ], + [ 34, MoveId.DRILL_PECK ], + [ 40, MoveId.SWAGGER ], + [ 46, MoveId.BRAVE_BIRD ], + ], + [SpeciesId.CORVIKNIGHT]: [ + [ EVOLVE_MOVE, MoveId.STEEL_WING ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 1, MoveId.SCREECH ], + [ 1, MoveId.METAL_SOUND ], + [ 1, MoveId.IRON_DEFENSE ], + [ 1, MoveId.HONE_CLAWS ], + [ 1, MoveId.POWER_TRIP ], + [ 12, MoveId.FURY_ATTACK ], + [ 16, MoveId.PLUCK ], + [ 22, MoveId.TAUNT ], + [ 28, MoveId.SCARY_FACE ], + [ 34, MoveId.DRILL_PECK ], + [ 42, MoveId.SWAGGER ], + [ 50, MoveId.BRAVE_BIRD ], + ], + [SpeciesId.BLIPBUG]: [ + [ 1, MoveId.STRUGGLE_BUG ], + ], + [SpeciesId.DOTTLER]: [ + [ EVOLVE_MOVE, MoveId.CONFUSION ], + [ EVOLVE_MOVE, MoveId.LIGHT_SCREEN ], + [ EVOLVE_MOVE, MoveId.REFLECT ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.LIGHT_SCREEN ], + [ 1, MoveId.REFLECT ], + [ 1, MoveId.STRUGGLE_BUG ], + ], + [SpeciesId.ORBEETLE]: [ + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.LIGHT_SCREEN ], + [ 1, MoveId.REFLECT ], + [ 1, MoveId.STRUGGLE_BUG ], + [ 4, MoveId.CONFUSE_RAY ], + [ 8, MoveId.MAGIC_COAT ], + [ 12, MoveId.AGILITY ], + [ 16, MoveId.PSYBEAM ], + [ 20, MoveId.HYPNOSIS ], + [ 24, MoveId.ALLY_SWITCH ], + [ 28, MoveId.BUG_BUZZ ], + [ 32, MoveId.MIRROR_COAT ], + [ 36, MoveId.PSYCHIC ], + [ 40, MoveId.AFTER_YOU ], + [ 44, MoveId.CALM_MIND ], + [ 48, MoveId.PSYCHIC_TERRAIN ], + ], + [SpeciesId.NICKIT]: [ + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.QUICK_ATTACK ], + [ 4, MoveId.BEAT_UP ], + [ 8, MoveId.HONE_CLAWS ], + [ 12, MoveId.SNARL ], + [ 16, MoveId.ASSURANCE ], + [ 20, MoveId.NASTY_PLOT ], + [ 24, MoveId.SUCKER_PUNCH ], + [ 28, MoveId.NIGHT_SLASH ], + [ 32, MoveId.TAIL_SLAP ], + [ 36, MoveId.FOUL_PLAY ], + ], + [SpeciesId.THIEVUL]: [ + [ EVOLVE_MOVE, MoveId.THIEF ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.BEAT_UP ], + [ 1, MoveId.HONE_CLAWS ], + [ 12, MoveId.SNARL ], + [ 16, MoveId.ASSURANCE ], + [ 22, MoveId.NASTY_PLOT ], + [ 28, MoveId.SUCKER_PUNCH ], + [ 34, MoveId.NIGHT_SLASH ], + [ 40, MoveId.TAIL_SLAP ], + [ 46, MoveId.FOUL_PLAY ], + [ 52, MoveId.PARTING_SHOT ], + ], + [SpeciesId.GOSSIFLEUR]: [ + [ 1, MoveId.SING ], + [ 1, MoveId.LEAFAGE ], + [ 4, MoveId.RAPID_SPIN ], + [ 8, MoveId.SWEET_SCENT ], + [ 12, MoveId.RAZOR_LEAF ], + [ 16, MoveId.ROUND ], + [ 21, MoveId.LEAF_TORNADO ], + [ 24, MoveId.SYNTHESIS ], + [ 28, MoveId.HYPER_VOICE ], + [ 32, MoveId.AROMATHERAPY ], + [ 36, MoveId.LEAF_STORM ], + ], + [SpeciesId.ELDEGOSS]: [ + [ EVOLVE_MOVE, MoveId.COTTON_SPORE ], + [ 1, MoveId.SING ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.LEAFAGE ], + [ 12, MoveId.RAZOR_LEAF ], + [ 16, MoveId.ROUND ], + [ 23, MoveId.LEAF_TORNADO ], + [ 28, MoveId.SYNTHESIS ], + [ 34, MoveId.HYPER_VOICE ], + [ 40, MoveId.AROMATHERAPY ], + [ 46, MoveId.LEAF_STORM ], + [ 52, MoveId.COTTON_GUARD ], + ], + [SpeciesId.WOOLOO]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 4, MoveId.DEFENSE_CURL ], + [ 8, MoveId.COPYCAT ], + [ 12, MoveId.GUARD_SPLIT ], + [ 16, MoveId.DOUBLE_KICK ], + [ 21, MoveId.HEADBUTT ], + [ 25, MoveId.TAKE_DOWN ], + [ 28, MoveId.GUARD_SWAP ], + [ 32, MoveId.REVERSAL ], + [ 36, MoveId.COTTON_GUARD ], + [ 40, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.DUBWOOL]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.COPYCAT ], + [ 12, MoveId.GUARD_SPLIT ], + [ 16, MoveId.DOUBLE_KICK ], + [ 21, MoveId.HEADBUTT ], + [ 27, MoveId.TAKE_DOWN ], + [ 32, MoveId.GUARD_SWAP ], + [ 38, MoveId.REVERSAL ], + [ 44, MoveId.COTTON_GUARD ], + [ 50, MoveId.DOUBLE_EDGE ], + [ 56, MoveId.LAST_RESORT ], + ], + [SpeciesId.CHEWTLE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WATER_GUN ], + [ 7, MoveId.BITE ], + [ 14, MoveId.PROTECT ], + [ 21, MoveId.HEADBUTT ], + [ 28, MoveId.COUNTER ], + [ 35, MoveId.JAW_LOCK ], + [ 42, MoveId.LIQUIDATION ], + [ 49, MoveId.BODY_SLAM ], + ], + [SpeciesId.DREDNAW]: [ + [ EVOLVE_MOVE, MoveId.ROCK_TOMB ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.BITE ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.CRUNCH ], + [ 1, MoveId.ROCK_POLISH ], + [ 1, MoveId.RAZOR_SHELL ], + [ 21, MoveId.HEADBUTT ], + [ 30, MoveId.COUNTER ], + [ 39, MoveId.JAW_LOCK ], + [ 48, MoveId.LIQUIDATION ], + [ 57, MoveId.BODY_SLAM ], + [ 66, MoveId.HEAD_SMASH ], + ], + [SpeciesId.YAMPER]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 5, MoveId.NUZZLE ], + [ 10, MoveId.BITE ], + [ 15, MoveId.ROAR ], + [ 20, MoveId.SPARK ], + [ 26, MoveId.CHARM ], + [ 30, MoveId.CRUNCH ], + [ 35, MoveId.CHARGE ], + [ 40, MoveId.WILD_CHARGE ], + [ 45, MoveId.PLAY_ROUGH ], + ], + [SpeciesId.BOLTUND]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.BITE ], + [ 1, MoveId.ELECTRIFY ], + [ 1, MoveId.NUZZLE ], + [ 15, MoveId.ROAR ], + [ 20, MoveId.SPARK ], + [ 28, MoveId.CHARM ], + [ 34, MoveId.CRUNCH ], + [ 41, MoveId.CHARGE ], + [ 48, MoveId.WILD_CHARGE ], + [ 55, MoveId.PLAY_ROUGH ], + [ 62, MoveId.ELECTRIC_TERRAIN ], + ], + [SpeciesId.ROLYCOLY]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SMOKESCREEN ], + [ 5, MoveId.RAPID_SPIN ], + [ 10, MoveId.SMACK_DOWN ], + [ 15, MoveId.ROCK_POLISH ], + [ 20, MoveId.ANCIENT_POWER ], + [ 25, MoveId.INCINERATE ], + [ 30, MoveId.STEALTH_ROCK ], + [ 35, MoveId.HEAT_CRASH ], + [ 40, MoveId.ROCK_BLAST ], + ], + [SpeciesId.CARKOL]: [ + [ EVOLVE_MOVE, MoveId.FLAME_CHARGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.SMACK_DOWN ], + [ 15, MoveId.ROCK_POLISH ], + [ 20, MoveId.ANCIENT_POWER ], + [ 27, MoveId.INCINERATE ], + [ 35, MoveId.STEALTH_ROCK ], + [ 41, MoveId.HEAT_CRASH ], + [ 48, MoveId.ROCK_BLAST ], + [ 55, MoveId.STONE_EDGE ], + ], + [SpeciesId.COALOSSAL]: [ + [ EVOLVE_MOVE, MoveId.TAR_SHOT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.SMACK_DOWN ], + [ 1, MoveId.FLAME_CHARGE ], + [ 15, MoveId.ROCK_POLISH ], + [ 20, MoveId.ANCIENT_POWER ], + [ 27, MoveId.INCINERATE ], + [ 37, MoveId.STEALTH_ROCK ], + [ 45, MoveId.HEAT_CRASH ], + [ 54, MoveId.ROCK_BLAST ], + [ 63, MoveId.STONE_EDGE ], + ], + [SpeciesId.APPLIN]: [ + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.LEAFAGE ], // Custom + ], + [SpeciesId.FLAPPLE]: [ + [ EVOLVE_MOVE, MoveId.WING_ATTACK ], + [ 1, MoveId.LEAFAGE ], // Previous Stage Move, Custom + [ 1, MoveId.GROWTH ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.TWISTER ], + [ 1, MoveId.RECYCLE ], + [ 1, MoveId.ASTONISH ], + [ 4, MoveId.ACID_SPRAY ], + [ 8, MoveId.ACROBATICS ], + [ 12, MoveId.LEECH_SEED ], + [ 16, MoveId.PROTECT ], + [ 20, MoveId.DRAGON_BREATH ], + [ 24, MoveId.DRAGON_DANCE ], + [ 28, MoveId.DRAGON_PULSE ], + [ 32, MoveId.GRAV_APPLE ], + [ 36, MoveId.IRON_DEFENSE ], + [ 40, MoveId.FLY ], + [ 44, MoveId.DRAGON_RUSH ], + ], + [SpeciesId.APPLETUN]: [ + [ EVOLVE_MOVE, MoveId.HEADBUTT ], + [ 1, MoveId.LEAFAGE ], // Previous Stage Move, Custom + [ 1, MoveId.GROWTH ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.RECYCLE ], + [ 1, MoveId.ASTONISH ], + [ 4, MoveId.CURSE ], + [ 8, MoveId.STOMP ], + [ 12, MoveId.LEECH_SEED ], + [ 16, MoveId.PROTECT ], + [ 20, MoveId.BULLET_SEED ], + [ 24, MoveId.RECOVER ], + [ 28, MoveId.APPLE_ACID ], + [ 32, MoveId.BODY_SLAM ], + [ 36, MoveId.IRON_DEFENSE ], + [ 40, MoveId.DRAGON_PULSE ], + [ 44, MoveId.ENERGY_BALL ], + ], + [SpeciesId.SILICOBRA]: [ + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.MUD_SLAP ], // Custom + [ 5, MoveId.MINIMIZE ], + [ 10, MoveId.BRUTAL_SWING ], + [ 15, MoveId.BULLDOZE ], + [ 20, MoveId.HEADBUTT ], + [ 25, MoveId.GLARE ], + [ 30, MoveId.DIG ], + [ 35, MoveId.SANDSTORM ], + [ 40, MoveId.SLAM ], + [ 45, MoveId.COIL ], + [ 50, MoveId.SAND_TOMB ], + ], + [SpeciesId.SANDACONDA]: [ + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.MUD_SLAP ], // Previous Stage Move, Custom + [ 1, MoveId.MINIMIZE ], + [ 1, MoveId.BRUTAL_SWING ], + [ 15, MoveId.BULLDOZE ], + [ 20, MoveId.HEADBUTT ], + [ 25, MoveId.GLARE ], + [ 30, MoveId.DIG ], + [ 35, MoveId.SANDSTORM ], + [ 42, MoveId.SLAM ], + [ 49, MoveId.COIL ], + [ 51, MoveId.SAND_TOMB ], + ], + [SpeciesId.CRAMORANT]: [ + [ RELEARN_MOVE, MoveId.BELCH ], + [ 1, MoveId.PECK ], + [ 1, MoveId.STOCKPILE ], + [ 1, MoveId.SPIT_UP ], + [ 1, MoveId.SWALLOW ], + [ 7, MoveId.WATER_GUN ], + [ 14, MoveId.FURY_ATTACK ], + [ 21, MoveId.PLUCK ], + [ 28, MoveId.DIVE ], + [ 35, MoveId.DRILL_PECK ], + [ 42, MoveId.AMNESIA ], + [ 49, MoveId.THRASH ], + [ 56, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.ARROKUDA]: [ + [ 1, MoveId.PECK ], + [ 1, MoveId.AQUA_JET ], + [ 6, MoveId.FURY_ATTACK ], + [ 12, MoveId.BITE ], + [ 18, MoveId.AGILITY ], + [ 24, MoveId.DIVE ], + [ 30, MoveId.FOCUS_ENERGY ], + [ 36, MoveId.CRUNCH ], + [ 42, MoveId.LIQUIDATION ], + [ 48, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.BARRASKEWDA]: [ + [ 1, MoveId.FURY_ATTACK ], + [ 1, MoveId.BITE ], + [ 1, MoveId.PECK ], + [ 1, MoveId.AQUA_JET ], + [ 1, MoveId.THROAT_CHOP ], + [ 18, MoveId.AGILITY ], + [ 24, MoveId.DIVE ], + [ 32, MoveId.FOCUS_ENERGY ], + [ 40, MoveId.CRUNCH ], + [ 48, MoveId.LIQUIDATION ], + [ 56, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.TOXEL]: [ + [ 1, MoveId.GROWL ], + [ 1, MoveId.ACID ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.BELCH ], + [ 1, MoveId.NUZZLE ], + [ 1, MoveId.TEARFUL_LOOK ], + ], + [SpeciesId.TOXTRICITY]: [ + [ EVOLVE_MOVE, MoveId.SPARK ], + [ 1, MoveId.LEER ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.ACID ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.ACID_SPRAY ], + [ 1, MoveId.BELCH ], + [ 1, MoveId.NOBLE_ROAR ], + [ 1, MoveId.NUZZLE ], + [ 1, MoveId.TEARFUL_LOOK ], + [ 4, MoveId.CHARGE ], + [ 8, MoveId.SHOCK_WAVE ], + [ 12, MoveId.SCARY_FACE ], + [ 16, MoveId.TAUNT ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.SWAGGER ], + [ 32, MoveId.TOXIC ], + [ 36, MoveId.DISCHARGE ], + [ 40, MoveId.POISON_JAB ], + [ 44, MoveId.OVERDRIVE ], + [ 48, MoveId.BOOMBURST ], + [ 52, MoveId.SHIFT_GEAR ], + ], + [SpeciesId.SIZZLIPEDE]: [ + [ 1, MoveId.EMBER ], + [ 1, MoveId.SMOKESCREEN ], + [ 5, MoveId.WRAP ], + [ 10, MoveId.BITE ], + [ 15, MoveId.FLAME_WHEEL ], + [ 20, MoveId.BUG_BITE ], + [ 25, MoveId.COIL ], + [ 30, MoveId.SLAM ], + [ 35, MoveId.FIRE_SPIN ], + [ 40, MoveId.CRUNCH ], + [ 45, MoveId.FIRE_LASH ], + [ 50, MoveId.LUNGE ], + [ 55, MoveId.BURN_UP ], + ], + [SpeciesId.CENTISKORCH]: [ + [ 1, MoveId.WRAP ], + [ 1, MoveId.BITE ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.INFERNO ], + [ 15, MoveId.FLAME_WHEEL ], + [ 20, MoveId.BUG_BITE ], + [ 25, MoveId.COIL ], + [ 32, MoveId.SLAM ], + [ 39, MoveId.FIRE_SPIN ], + [ 46, MoveId.CRUNCH ], + [ 53, MoveId.FIRE_LASH ], + [ 60, MoveId.LUNGE ], + [ 67, MoveId.BURN_UP ], + ], + [SpeciesId.CLOBBOPUS]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.ROCK_SMASH ], + [ 5, MoveId.FEINT ], + [ 10, MoveId.BIND ], + [ 15, MoveId.DETECT ], + [ 20, MoveId.BRICK_BREAK ], + [ 25, MoveId.BULK_UP ], + [ 30, MoveId.SUBMISSION ], + [ 35, MoveId.TAUNT ], + [ 40, MoveId.REVERSAL ], + [ 45, MoveId.SUPERPOWER ], + ], + [SpeciesId.GRAPPLOCT]: [ + [ EVOLVE_MOVE, MoveId.OCTOLOCK ], + [ 1, MoveId.BIND ], + [ 1, MoveId.LEER ], + [ 1, MoveId.OCTAZOOKA ], + [ 1, MoveId.ROCK_SMASH ], + [ 1, MoveId.FEINT ], + [ 15, MoveId.DETECT ], + [ 20, MoveId.BRICK_BREAK ], + [ 25, MoveId.BULK_UP ], + [ 30, MoveId.SUBMISSION ], + [ 35, MoveId.TAUNT ], + [ 40, MoveId.REVERSAL ], + [ 45, MoveId.SUPERPOWER ], + [ 50, MoveId.TOPSY_TURVY ], + ], + [SpeciesId.SINISTEA]: [ + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.ABSORB ], // Custom + [ 6, MoveId.AROMATIC_MIST ], + [ 12, MoveId.MEGA_DRAIN ], + [ 24, MoveId.SUCKER_PUNCH ], + [ 30, MoveId.SWEET_SCENT ], + [ 36, MoveId.GIGA_DRAIN ], + [ 42, MoveId.NASTY_PLOT ], + [ 48, MoveId.SHADOW_BALL ], + [ 54, MoveId.MEMENTO ], + [ 60, MoveId.SHELL_SMASH ], + ], + [SpeciesId.POLTEAGEIST]: [ + [ EVOLVE_MOVE, MoveId.TEATIME ], + [ 1, MoveId.ABSORB ], // Previous Stage Move, Custom + [ 1, MoveId.MEGA_DRAIN ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.AROMATIC_MIST ], + [ 1, MoveId.STRENGTH_SAP ], + [ 18, MoveId.PROTECT ], + [ 24, MoveId.SUCKER_PUNCH ], + [ 30, MoveId.SWEET_SCENT ], + [ 36, MoveId.GIGA_DRAIN ], + [ 42, MoveId.NASTY_PLOT ], + [ 48, MoveId.SHADOW_BALL ], + [ 54, MoveId.MEMENTO ], + [ 60, MoveId.SHELL_SMASH ], + [ 66, MoveId.CURSE ], + ], + [SpeciesId.HATENNA]: [ + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.PLAY_NICE ], + [ 5, MoveId.LIFE_DEW ], + [ 10, MoveId.DISARMING_VOICE ], + [ 15, MoveId.AROMATIC_MIST ], + [ 20, MoveId.PSYBEAM ], + [ 25, MoveId.HEAL_PULSE ], + [ 30, MoveId.DAZZLING_GLEAM ], + [ 35, MoveId.CALM_MIND ], + [ 40, MoveId.PSYCHIC ], + [ 45, MoveId.HEALING_WISH ], + ], + [SpeciesId.HATTREM]: [ + [ EVOLVE_MOVE, MoveId.BRUTAL_SWING ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.DISARMING_VOICE ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.LIFE_DEW ], + [ 15, MoveId.AROMATIC_MIST ], + [ 20, MoveId.PSYBEAM ], + [ 25, MoveId.HEAL_PULSE ], + [ 30, MoveId.DAZZLING_GLEAM ], + [ 37, MoveId.CALM_MIND ], + [ 44, MoveId.PSYCHIC ], + [ 51, MoveId.HEALING_WISH ], + ], + [SpeciesId.HATTERENE]: [ + [ EVOLVE_MOVE, MoveId.PSYCHO_CUT ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.DISARMING_VOICE ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.BRUTAL_SWING ], + [ 1, MoveId.LIFE_DEW ], + [ 15, MoveId.AROMATIC_MIST ], + [ 20, MoveId.PSYBEAM ], + [ 25, MoveId.HEAL_PULSE ], + [ 30, MoveId.DAZZLING_GLEAM ], + [ 37, MoveId.CALM_MIND ], + [ 46, MoveId.PSYCHIC ], + [ 55, MoveId.HEALING_WISH ], + [ 64, MoveId.MAGIC_POWDER ], + ], + [SpeciesId.IMPIDIMP]: [ + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.CONFIDE ], + [ 4, MoveId.BITE ], + [ 8, MoveId.FLATTER ], + [ 12, MoveId.FAKE_TEARS ], + [ 16, MoveId.ASSURANCE ], + [ 20, MoveId.SWAGGER ], + [ 24, MoveId.SUCKER_PUNCH ], + [ 28, MoveId.TORMENT ], + [ 33, MoveId.DARK_PULSE ], + [ 36, MoveId.NASTY_PLOT ], + [ 40, MoveId.PLAY_ROUGH ], + [ 44, MoveId.FOUL_PLAY ], + ], + [SpeciesId.MORGREM]: [ + [ EVOLVE_MOVE, MoveId.FALSE_SURRENDER ], + [ 1, MoveId.BITE ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.FLATTER ], + [ 1, MoveId.CONFIDE ], + [ 12, MoveId.FAKE_TEARS ], + [ 16, MoveId.ASSURANCE ], + [ 20, MoveId.SWAGGER ], + [ 24, MoveId.SUCKER_PUNCH ], + [ 28, MoveId.TORMENT ], + [ 35, MoveId.DARK_PULSE ], + [ 40, MoveId.NASTY_PLOT ], + [ 46, MoveId.PLAY_ROUGH ], + [ 52, MoveId.FOUL_PLAY ], + ], + [SpeciesId.GRIMMSNARL]: [ + [ EVOLVE_MOVE, MoveId.SPIRIT_BREAK ], + [ 1, MoveId.BITE ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.FLATTER ], + [ 1, MoveId.BULK_UP ], + [ 1, MoveId.CONFIDE ], + [ 1, MoveId.FALSE_SURRENDER ], + [ 12, MoveId.FAKE_TEARS ], + [ 16, MoveId.ASSURANCE ], + [ 20, MoveId.SWAGGER ], + [ 24, MoveId.SUCKER_PUNCH ], + [ 28, MoveId.TORMENT ], + [ 35, MoveId.DARK_PULSE ], + [ 40, MoveId.NASTY_PLOT ], + [ 48, MoveId.PLAY_ROUGH ], + [ 56, MoveId.FOUL_PLAY ], + [ 64, MoveId.HAMMER_ARM ], + ], + [SpeciesId.OBSTAGOON]: [ + [ EVOLVE_MOVE, MoveId.OBSTRUCT ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.PIN_MISSILE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.SUBMISSION ], + [ 1, MoveId.LICK ], + [ 1, MoveId.CROSS_CHOP ], + [ 1, MoveId.NIGHT_SLASH ], + [ 1, MoveId.SWITCHEROO ], + [ 1, MoveId.BABY_DOLL_EYES ], + [ 9, MoveId.SNARL ], + [ 12, MoveId.HEADBUTT ], + [ 15, MoveId.HONE_CLAWS ], + [ 18, MoveId.FURY_SWIPES ], + [ 23, MoveId.REST ], + [ 28, MoveId.TAKE_DOWN ], + [ 35, MoveId.SCARY_FACE ], + [ 42, MoveId.COUNTER ], + [ 49, MoveId.TAUNT ], + [ 56, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.PERRSERKER]: [ + [ EVOLVE_MOVE, MoveId.IRON_HEAD ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.IRON_DEFENSE ], + [ 1, MoveId.METAL_BURST ], + [ 1, MoveId.HONE_CLAWS ], + [ 12, MoveId.PAY_DAY ], + [ 16, MoveId.METAL_CLAW ], + [ 20, MoveId.TAUNT ], + [ 24, MoveId.SWAGGER ], + [ 31, MoveId.FURY_SWIPES ], + [ 36, MoveId.SCREECH ], + [ 42, MoveId.SLASH ], + [ 48, MoveId.METAL_SOUND ], + [ 54, MoveId.THRASH ], + ], + [SpeciesId.CURSOLA]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DISABLE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.PERISH_SONG ], + [ 1, MoveId.ASTONISH ], + [ 15, MoveId.SPITE ], + [ 20, MoveId.ANCIENT_POWER ], + [ 25, MoveId.HEX ], + [ 30, MoveId.CURSE ], + [ 35, MoveId.STRENGTH_SAP ], + [ 40, MoveId.POWER_GEM ], + [ 45, MoveId.NIGHT_SHADE ], + [ 50, MoveId.GRUDGE ], + [ 55, MoveId.MIRROR_COAT ], + ], + [SpeciesId.SIRFETCHD]: [ + [ EVOLVE_MOVE, MoveId.IRON_DEFENSE ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.FIRST_IMPRESSION ], + [ 15, MoveId.ROCK_SMASH ], + [ 20, MoveId.BRUTAL_SWING ], + [ 25, MoveId.DETECT ], + [ 30, MoveId.KNOCK_OFF ], + [ 35, MoveId.DEFOG ], + [ 40, MoveId.BRICK_BREAK ], + [ 45, MoveId.SWORDS_DANCE ], + [ 50, MoveId.SLAM ], + [ 55, MoveId.LEAF_BLADE ], + [ 60, MoveId.FINAL_GAMBIT ], + [ 65, MoveId.BRAVE_BIRD ], + [ 70, MoveId.METEOR_ASSAULT ], + ], + [SpeciesId.MR_RIME]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.BARRIER ], // Previous Stage Move + [ 1, MoveId.TICKLE ], // Previous Stage Move + [ 1, MoveId.MIMIC ], + [ 1, MoveId.LIGHT_SCREEN ], + [ 1, MoveId.REFLECT ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.SAFEGUARD ], + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.ENCORE ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.ROLE_PLAY ], + [ 1, MoveId.RECYCLE ], + [ 1, MoveId.SLACK_OFF ], + [ 1, MoveId.FAKE_TEARS ], + [ 1, MoveId.BLOCK ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.ICE_SHARD ], + [ 1, MoveId.AFTER_YOU ], + [ 1, MoveId.MISTY_TERRAIN ], + [ 1, MoveId.DAZZLING_GLEAM ], + [ 12, MoveId.CONFUSION ], + [ 16, MoveId.ALLY_SWITCH ], + [ 20, MoveId.ICY_WIND ], + [ 24, MoveId.DOUBLE_KICK ], + [ 28, MoveId.PSYBEAM ], + [ 32, MoveId.HYPNOSIS ], + [ 36, MoveId.MIRROR_COAT ], + [ 40, MoveId.SUCKER_PUNCH ], + [ 44, MoveId.FREEZE_DRY ], + [ 48, MoveId.PSYCHIC ], + [ 52, MoveId.TEETER_DANCE ], + ], + [SpeciesId.RUNERIGUS]: [ + [ EVOLVE_MOVE, MoveId.SHADOW_CLAW ], + [ 1, MoveId.NIGHT_SHADE ], + [ 1, MoveId.HAZE ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.SCARY_FACE ], + [ 1, MoveId.ASTONISH ], + [ 12, MoveId.DISABLE ], + [ 16, MoveId.BRUTAL_SWING ], + [ 20, MoveId.CRAFTY_SHIELD ], + [ 24, MoveId.HEX ], + [ 28, MoveId.MEAN_LOOK ], + [ 32, MoveId.SLAM ], + [ 38, MoveId.CURSE ], + [ 44, MoveId.SHADOW_BALL ], + [ 50, MoveId.EARTHQUAKE ], + [ 56, MoveId.GUARD_SPLIT ], + [ 56, MoveId.POWER_SPLIT ], + [ 62, MoveId.DESTINY_BOND ], + ], + [SpeciesId.MILCERY]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.AROMATIC_MIST ], + [ 5, MoveId.SWEET_KISS ], + [ 10, MoveId.SWEET_SCENT ], + [ 15, MoveId.DRAINING_KISS ], + [ 20, MoveId.AROMATHERAPY ], + [ 25, MoveId.ATTRACT ], + [ 30, MoveId.ACID_ARMOR ], + [ 35, MoveId.DAZZLING_GLEAM ], + [ 40, MoveId.RECOVER ], + [ 45, MoveId.MISTY_TERRAIN ], + [ 50, MoveId.ENTRAINMENT ], + ], + [SpeciesId.ALCREMIE]: [ + [ EVOLVE_MOVE, MoveId.DECORATE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.AROMATIC_MIST ], + [ 15, MoveId.DRAINING_KISS ], + [ 20, MoveId.AROMATHERAPY ], + [ 25, MoveId.ATTRACT ], + [ 30, MoveId.ACID_ARMOR ], + [ 35, MoveId.DAZZLING_GLEAM ], + [ 40, MoveId.RECOVER ], + [ 45, MoveId.MISTY_TERRAIN ], + [ 50, MoveId.ENTRAINMENT ], + ], + [SpeciesId.FALINKS]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.PROTECT ], + [ 5, MoveId.ROCK_SMASH ], + [ 10, MoveId.FOCUS_ENERGY ], + [ 15, MoveId.HEADBUTT ], + [ 20, MoveId.BULK_UP ], + [ 25, MoveId.ENDURE ], + [ 30, MoveId.REVERSAL ], + [ 35, MoveId.FIRST_IMPRESSION ], + [ 40, MoveId.NO_RETREAT ], + [ 45, MoveId.IRON_DEFENSE ], + [ 50, MoveId.CLOSE_COMBAT ], + [ 55, MoveId.MEGAHORN ], + [ 60, MoveId.COUNTER ], + ], + [SpeciesId.PINCURCHIN]: [ + [ 1, MoveId.PECK ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 5, MoveId.WATER_GUN ], + [ 10, MoveId.CHARGE ], + [ 15, MoveId.FURY_ATTACK ], + [ 20, MoveId.SPARK ], + [ 25, MoveId.BUBBLE_BEAM ], + [ 30, MoveId.RECOVER ], + [ 35, MoveId.CURSE ], + [ 40, MoveId.ELECTRIC_TERRAIN ], + [ 45, MoveId.POISON_JAB ], + [ 50, MoveId.ZING_ZAP ], + [ 55, MoveId.ACUPRESSURE ], + [ 60, MoveId.DISCHARGE ], + ], + [SpeciesId.SNOM]: [ + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.STRUGGLE_BUG ], + ], + [SpeciesId.FROSMOTH]: [ + [ EVOLVE_MOVE, MoveId.ICY_WIND ], + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.ATTRACT ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.STRUGGLE_BUG ], + [ 4, MoveId.STUN_SPORE ], + [ 8, MoveId.INFESTATION ], + [ 12, MoveId.MIST ], + [ 16, MoveId.DEFOG ], + [ 21, MoveId.FEATHER_DANCE ], + [ 24, MoveId.AURORA_BEAM ], + [ 28, MoveId.SNOWSCAPE ], + [ 32, MoveId.BUG_BUZZ ], + [ 36, MoveId.AURORA_VEIL ], + [ 40, MoveId.BLIZZARD ], + [ 44, MoveId.TAILWIND ], + [ 48, MoveId.WIDE_GUARD ], + [ 52, MoveId.QUIVER_DANCE ], + ], + [SpeciesId.STONJOURNER]: [ + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.BLOCK ], + [ 6, MoveId.ROCK_POLISH ], + [ 12, MoveId.ROCK_TOMB ], + [ 18, MoveId.GRAVITY ], + [ 24, MoveId.STOMP ], + [ 30, MoveId.STEALTH_ROCK ], + [ 36, MoveId.ROCK_SLIDE ], + [ 42, MoveId.BODY_SLAM ], + [ 48, MoveId.WIDE_GUARD ], + [ 54, MoveId.HEAVY_SLAM ], + [ 60, MoveId.STONE_EDGE ], + [ 66, MoveId.MEGA_KICK ], + ], + [SpeciesId.EISCUE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.POWDER_SNOW ], + [ 6, MoveId.MIST ], + [ 12, MoveId.WEATHER_BALL ], + [ 18, MoveId.ICY_WIND ], + [ 24, MoveId.HEADBUTT ], + [ 30, MoveId.AMNESIA ], + [ 36, MoveId.FREEZE_DRY ], + [ 42, MoveId.SNOWSCAPE ], + [ 48, MoveId.AURORA_VEIL ], + [ 54, MoveId.SURF ], + [ 60, MoveId.BLIZZARD ], + ], + [SpeciesId.INDEEDEE]: [ + [ 1, MoveId.STORED_POWER ], + [ 1, MoveId.PLAY_NICE ], + [ 5, MoveId.ENCORE ], + [ 10, MoveId.DISARMING_VOICE ], + [ 15, MoveId.PSYBEAM ], + [ 20, MoveId.HELPING_HAND ], + [ 25, MoveId.AFTER_YOU ], + [ 30, MoveId.HEALING_WISH ], + [ 35, MoveId.PSYCHIC ], + [ 40, MoveId.CALM_MIND ], + [ 45, MoveId.POWER_SPLIT ], + [ 50, MoveId.PSYCHIC_TERRAIN ], + [ 55, MoveId.LAST_RESORT ], + ], + [SpeciesId.MORPEKO]: [ + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 5, MoveId.LEER ], + [ 10, MoveId.POWER_TRIP ], + [ 15, MoveId.QUICK_ATTACK ], + [ 20, MoveId.FLATTER ], + [ 25, MoveId.BITE ], + [ 30, MoveId.SPARK ], + [ 35, MoveId.TORMENT ], + [ 40, MoveId.AGILITY ], + [ 45, MoveId.BULLET_SEED ], + [ 50, MoveId.CRUNCH ], + [ 55, MoveId.AURA_WHEEL ], + [ 60, MoveId.THRASH ], + ], + [SpeciesId.CUFANT]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 5, MoveId.ROLLOUT ], + [ 10, MoveId.ROCK_SMASH ], + [ 15, MoveId.BULLDOZE ], + [ 20, MoveId.STOMP ], + [ 25, MoveId.IRON_DEFENSE ], + [ 30, MoveId.DIG ], + [ 35, MoveId.STRENGTH ], + [ 40, MoveId.IRON_HEAD ], + [ 45, MoveId.PLAY_ROUGH ], + [ 50, MoveId.HIGH_HORSEPOWER ], + [ 55, MoveId.SUPERPOWER ], + ], + [SpeciesId.COPPERAJAH]: [ + [ EVOLVE_MOVE, MoveId.HEAVY_SLAM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.ROLLOUT ], + [ 1, MoveId.ROCK_SMASH ], + [ 15, MoveId.BULLDOZE ], + [ 20, MoveId.STOMP ], + [ 25, MoveId.IRON_DEFENSE ], + [ 30, MoveId.DIG ], + [ 37, MoveId.STRENGTH ], + [ 44, MoveId.IRON_HEAD ], + [ 51, MoveId.PLAY_ROUGH ], + [ 58, MoveId.HIGH_HORSEPOWER ], + [ 65, MoveId.SUPERPOWER ], + ], + [SpeciesId.DRACOZOLT]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 7, MoveId.CHARGE ], + [ 14, MoveId.AERIAL_ACE ], + [ 21, MoveId.ANCIENT_POWER ], + [ 28, MoveId.PLUCK ], + [ 35, MoveId.DRAGON_TAIL ], + [ 42, MoveId.STOMP ], + [ 49, MoveId.SLAM ], + [ 56, MoveId.DISCHARGE ], + [ 63, MoveId.BOLT_BEAK ], + [ 70, MoveId.DRAGON_PULSE ], + [ 77, MoveId.DRAGON_RUSH ], + ], + [SpeciesId.ARCTOZOLT]: [ + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.POWDER_SNOW ], + [ 7, MoveId.CHARGE ], + [ 14, MoveId.ECHOED_VOICE ], + [ 21, MoveId.ANCIENT_POWER ], + [ 28, MoveId.PLUCK ], + [ 35, MoveId.AVALANCHE ], + [ 42, MoveId.FREEZE_DRY ], + [ 49, MoveId.SLAM ], + [ 56, MoveId.DISCHARGE ], + [ 63, MoveId.BOLT_BEAK ], + [ 70, MoveId.ICICLE_CRASH ], + [ 77, MoveId.BLIZZARD ], + ], + [SpeciesId.DRACOVISH]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WATER_GUN ], + [ 7, MoveId.PROTECT ], + [ 14, MoveId.BRUTAL_SWING ], + [ 21, MoveId.ANCIENT_POWER ], + [ 28, MoveId.BITE ], + [ 35, MoveId.DRAGON_BREATH ], + [ 42, MoveId.STOMP ], + [ 49, MoveId.SUPER_FANG ], + [ 56, MoveId.CRUNCH ], + [ 63, MoveId.FISHIOUS_REND ], + [ 70, MoveId.DRAGON_PULSE ], + [ 77, MoveId.DRAGON_RUSH ], + ], + [SpeciesId.ARCTOVISH]: [ + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.POWDER_SNOW ], + [ 7, MoveId.PROTECT ], + [ 14, MoveId.ICY_WIND ], + [ 21, MoveId.ANCIENT_POWER ], + [ 28, MoveId.BITE ], + [ 35, MoveId.AURORA_VEIL ], + [ 42, MoveId.FREEZE_DRY ], + [ 49, MoveId.SUPER_FANG ], + [ 56, MoveId.CRUNCH ], + [ 63, MoveId.FISHIOUS_REND ], + [ 70, MoveId.ICICLE_CRASH ], + [ 77, MoveId.BLIZZARD ], + ], + [SpeciesId.DURALUDON]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.METAL_CLAW ], + [ 6, MoveId.ROCK_SMASH ], + [ 12, MoveId.HONE_CLAWS ], + [ 18, MoveId.METAL_SOUND ], + [ 24, MoveId.BREAKING_SWIPE ], + [ 30, MoveId.DRAGON_TAIL ], + [ 36, MoveId.IRON_DEFENSE ], + [ 42, MoveId.LASER_FOCUS ], + [ 48, MoveId.DRAGON_CLAW ], + [ 54, MoveId.FLASH_CANNON ], + [ 60, MoveId.METAL_BURST ], + [ 66, MoveId.HYPER_BEAM ], + ], + [SpeciesId.DREEPY]: [ + [ 1, MoveId.BITE ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.INFESTATION ], + ], + [SpeciesId.DRAKLOAK]: [ + [ EVOLVE_MOVE, MoveId.DRAGON_PULSE ], + [ 1, MoveId.BITE ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.INFESTATION ], + [ 6, MoveId.LOCK_ON ], + [ 12, MoveId.ASSURANCE ], + [ 18, MoveId.HEX ], + [ 24, MoveId.AGILITY ], + [ 30, MoveId.DOUBLE_HIT ], + [ 36, MoveId.U_TURN ], + [ 42, MoveId.DRAGON_DANCE ], + [ 48, MoveId.PHANTOM_FORCE ], + [ 54, MoveId.TAKE_DOWN ], + [ 61, MoveId.DRAGON_RUSH ], + [ 66, MoveId.DOUBLE_EDGE ], + [ 72, MoveId.LAST_RESORT ], + ], + [SpeciesId.DRAGAPULT]: [ + [ EVOLVE_MOVE, MoveId.DRAGON_DARTS ], + [ RELEARN_MOVE, MoveId.DRAGON_PULSE ], // Previous Stage Move + [ 1, MoveId.BITE ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.INFESTATION ], + [ 6, MoveId.LOCK_ON ], + [ 12, MoveId.ASSURANCE ], + [ 18, MoveId.HEX ], + [ 24, MoveId.AGILITY ], + [ 30, MoveId.DOUBLE_HIT ], + [ 36, MoveId.U_TURN ], + [ 42, MoveId.DRAGON_DANCE ], + [ 48, MoveId.PHANTOM_FORCE ], + [ 54, MoveId.TAKE_DOWN ], + [ 63, MoveId.DRAGON_RUSH ], + [ 70, MoveId.DOUBLE_EDGE ], + [ 78, MoveId.LAST_RESORT ], + ], + [SpeciesId.ZACIAN]: [ + [ 1, MoveId.BITE ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.HOWL ], + [ 1, MoveId.QUICK_GUARD ], + [ 1, MoveId.SACRED_SWORD ], + [ 11, MoveId.SLASH ], + [ 22, MoveId.SWORDS_DANCE ], + [ 33, MoveId.IRON_HEAD ], + [ 44, MoveId.NOBLE_ROAR ], + [ 55, MoveId.CRUNCH ], + [ 66, MoveId.MOONBLAST ], + [ 77, MoveId.CLOSE_COMBAT ], + [ 88, MoveId.GIGA_IMPACT ], + ], + [SpeciesId.ZAMAZENTA]: [ + [ 1, MoveId.BITE ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.HOWL ], + [ 1, MoveId.WIDE_GUARD ], + [ 11, MoveId.SLASH ], + [ 22, MoveId.IRON_DEFENSE ], + [ 33, MoveId.IRON_HEAD ], + [ 44, MoveId.METAL_BURST ], + [ 55, MoveId.CRUNCH ], + [ 66, MoveId.MOONBLAST ], + [ 77, MoveId.CLOSE_COMBAT ], + [ 88, MoveId.GIGA_IMPACT ], + ], + [SpeciesId.ETERNATUS]: [ + [ 1, MoveId.AGILITY ], + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.POISON_TAIL ], + [ 1, MoveId.DRAGON_TAIL ], + [ 8, MoveId.TOXIC ], + [ 16, MoveId.VENOSHOCK ], + [ 24, MoveId.DRAGON_DANCE ], + [ 32, MoveId.CROSS_POISON ], + [ 40, MoveId.DRAGON_PULSE ], + [ 48, MoveId.FLAMETHROWER ], + [ 56, MoveId.DYNAMAX_CANNON ], + [ 64, MoveId.COSMIC_POWER ], + [ 72, MoveId.RECOVER ], + [ 80, MoveId.HYPER_BEAM ], + [ 88, MoveId.OUTRAGE ], + ], + [SpeciesId.KUBFU]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.ROCK_SMASH ], + [ 4, MoveId.ENDURE ], + [ 8, MoveId.FOCUS_ENERGY ], + [ 12, MoveId.AERIAL_ACE ], + [ 16, MoveId.SCARY_FACE ], + [ 20, MoveId.HEADBUTT ], + [ 24, MoveId.BRICK_BREAK ], + [ 28, MoveId.DETECT ], + [ 32, MoveId.BULK_UP ], + [ 36, MoveId.IRON_HEAD ], + [ 40, MoveId.DYNAMIC_PUNCH ], + [ 44, MoveId.COUNTER ], + [ 48, MoveId.CLOSE_COMBAT ], + [ 52, MoveId.FOCUS_PUNCH ], + ], + [SpeciesId.URSHIFU]: [ + [ EVOLVE_MOVE, MoveId.WICKED_BLOW ], + [ 1, MoveId.LEER ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.ENDURE ], + [ 1, MoveId.ROCK_SMASH ], + [ 1, MoveId.SUCKER_PUNCH ], + [ 12, MoveId.AERIAL_ACE ], + [ 16, MoveId.SCARY_FACE ], + [ 20, MoveId.HEADBUTT ], + [ 24, MoveId.BRICK_BREAK ], + [ 28, MoveId.DETECT ], + [ 32, MoveId.BULK_UP ], + [ 36, MoveId.IRON_HEAD ], + [ 40, MoveId.DYNAMIC_PUNCH ], + [ 44, MoveId.COUNTER ], + [ 48, MoveId.CLOSE_COMBAT ], + [ 52, MoveId.FOCUS_PUNCH ], + ], + [SpeciesId.ZARUDE]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.BIND ], + [ 6, MoveId.LEER ], + [ 12, MoveId.VINE_WHIP ], + [ 18, MoveId.GROWTH ], + [ 24, MoveId.FURY_SWIPES ], + [ 30, MoveId.SCARY_FACE ], + [ 36, MoveId.GRASS_KNOT ], + [ 42, MoveId.BITE ], + [ 48, MoveId.U_TURN ], + [ 54, MoveId.SWAGGER ], + [ 60, MoveId.ENERGY_BALL ], + [ 66, MoveId.SYNTHESIS ], + [ 72, MoveId.HAMMER_ARM ], + [ 78, MoveId.THRASH ], + [ 84, MoveId.POWER_WHIP ], + [ 90, MoveId.JUNGLE_HEALING ], + ], + [SpeciesId.REGIELEKI]: [ + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.RAPID_SPIN ], + [ 6, MoveId.ELECTROWEB ], + [ 12, MoveId.ANCIENT_POWER ], + [ 18, MoveId.SHOCK_WAVE ], + [ 24, MoveId.THUNDER_WAVE ], + [ 30, MoveId.EXTREME_SPEED ], + [ 36, MoveId.THUNDER_CAGE ], + [ 42, MoveId.THUNDERBOLT ], + [ 48, MoveId.MAGNET_RISE ], + [ 54, MoveId.THRASH ], + [ 60, MoveId.LOCK_ON ], + [ 66, MoveId.ZAP_CANNON ], + [ 72, MoveId.HYPER_BEAM ], + [ 78, MoveId.EXPLOSION ], + ], + [SpeciesId.REGIDRAGO]: [ + [ 1, MoveId.TWISTER ], + [ 6, MoveId.BITE ], + [ 12, MoveId.ANCIENT_POWER ], + [ 18, MoveId.DRAGON_BREATH ], + [ 30, MoveId.CRUNCH ], + [ 36, MoveId.DRAGON_CLAW ], + [ 42, MoveId.HAMMER_ARM ], + [ 48, MoveId.DRAGON_DANCE ], + [ 54, MoveId.THRASH ], + [ 60, MoveId.FOCUS_ENERGY ], + [ 66, MoveId.DRAGON_ENERGY ], + [ 72, MoveId.HYPER_BEAM ], + [ 78, MoveId.EXPLOSION ], + ], + [SpeciesId.GLASTRIER]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 6, MoveId.DOUBLE_KICK ], + [ 12, MoveId.AVALANCHE ], + [ 18, MoveId.STOMP ], + [ 24, MoveId.TORMENT ], + [ 30, MoveId.MIST ], + [ 36, MoveId.ICICLE_CRASH ], + [ 42, MoveId.TAKE_DOWN ], + [ 48, MoveId.IRON_DEFENSE ], + [ 54, MoveId.THRASH ], + [ 60, MoveId.TAUNT ], + [ 66, MoveId.DOUBLE_EDGE ], + [ 72, MoveId.SWORDS_DANCE ], + ], + [SpeciesId.SPECTRIER]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 6, MoveId.DOUBLE_KICK ], + [ 12, MoveId.HEX ], + [ 18, MoveId.STOMP ], + [ 24, MoveId.CONFUSE_RAY ], + [ 30, MoveId.HAZE ], + [ 36, MoveId.SHADOW_BALL ], + [ 42, MoveId.TAKE_DOWN ], + [ 48, MoveId.AGILITY ], + [ 54, MoveId.THRASH ], + [ 60, MoveId.DISABLE ], + [ 66, MoveId.DOUBLE_EDGE ], + [ 72, MoveId.NASTY_PLOT ], + ], + [SpeciesId.CALYREX]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.MEGA_DRAIN ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.CONFUSION ], + [ 8, MoveId.LIFE_DEW ], + [ 16, MoveId.GIGA_DRAIN ], + [ 24, MoveId.PSYSHOCK ], + [ 32, MoveId.HELPING_HAND ], + [ 40, MoveId.GRASSY_TERRAIN ], + [ 40, MoveId.PSYCHIC_TERRAIN ], + [ 48, MoveId.ENERGY_BALL ], + [ 56, MoveId.PSYCHIC ], + [ 64, MoveId.LEECH_SEED ], + [ 72, MoveId.HEAL_PULSE ], + [ 80, MoveId.SOLAR_BEAM ], + [ 88, MoveId.FUTURE_SIGHT ], + ], + [SpeciesId.WYRDEER]: [ + [ EVOLVE_MOVE, MoveId.PSYSHIELD_BASH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.ME_FIRST ], // Previous Stage Move + [ 3, MoveId.LEER ], + [ 7, MoveId.ASTONISH ], + [ 10, MoveId.HYPNOSIS ], + [ 13, MoveId.STOMP ], + [ 16, MoveId.SAND_ATTACK ], + [ 21, MoveId.TAKE_DOWN ], + [ 23, MoveId.CONFUSE_RAY ], + [ 27, MoveId.CALM_MIND ], + [ 32, MoveId.ROLE_PLAY ], + [ 37, MoveId.ZEN_HEADBUTT ], + [ 49, MoveId.IMPRISON ], + [ 55, MoveId.DOUBLE_EDGE ], + [ 62, MoveId.MEGAHORN ], + ], + [SpeciesId.KLEAVOR]: [ + [ EVOLVE_MOVE, MoveId.STONE_AXE ], + [ 1, MoveId.WING_ATTACK ], // Previous Stage Move + [ 1, MoveId.AIR_SLASH ], // Previous Stage Move + [ 1, MoveId.LEER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 4, MoveId.FURY_CUTTER ], + [ 8, MoveId.FALSE_SWIPE ], + [ 12, MoveId.SMACK_DOWN ], + [ 16, MoveId.DOUBLE_TEAM ], + [ 20, MoveId.DOUBLE_HIT ], + [ 24, MoveId.SLASH ], + [ 28, MoveId.FOCUS_ENERGY ], + [ 30, MoveId.STEEL_WING ], // Custom + [ 32, MoveId.AGILITY ], + [ 36, MoveId.ROCK_SLIDE ], + [ 40, MoveId.X_SCISSOR ], + [ 44, MoveId.SWORDS_DANCE ], + ], + [SpeciesId.URSALUNA]: [ + [ EVOLVE_MOVE, MoveId.HEADLONG_RUSH ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LICK ], + [ 1, MoveId.COVET ], + [ 1, MoveId.FLING ], // Previous Stage Move + [ 1, MoveId.BABY_DOLL_EYES ], // Previous Stage Move + [ 1, MoveId.FAKE_TEARS ], + [ 1, MoveId.CHARM ], // Previous Stage Moves + [ 8, MoveId.FURY_SWIPES ], + [ 13, MoveId.PAYBACK ], + [ 17, MoveId.SWEET_SCENT ], + [ 22, MoveId.SLASH ], + [ 25, MoveId.PLAY_NICE ], + [ 29, MoveId.PLAY_ROUGH ], + [ 35, MoveId.SCARY_FACE ], + [ 41, MoveId.REST ], + [ 41, MoveId.SNORE ], + [ 48, MoveId.HIGH_HORSEPOWER ], + [ 56, MoveId.THRASH ], + [ 64, MoveId.HAMMER_ARM ], + ], + [SpeciesId.BASCULEGION]: [ + [ RELEARN_MOVE, MoveId.FINAL_GAMBIT ], // Previous Stage Move, White Stripe currently shares moveset with other forms + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.SHADOW_BALL ], + [ 1, MoveId.PHANTOM_FORCE ], + [ 4, MoveId.TACKLE ], + [ 8, MoveId.FLAIL ], + [ 12, MoveId.AQUA_JET ], + [ 16, MoveId.BITE ], + [ 20, MoveId.SCARY_FACE ], + [ 24, MoveId.HEADBUTT ], + [ 28, MoveId.SOAK ], + [ 32, MoveId.CRUNCH ], + [ 36, MoveId.TAKE_DOWN ], + [ 40, MoveId.UPROAR ], + [ 44, MoveId.WAVE_CRASH ], + [ 48, MoveId.THRASH ], + [ 52, MoveId.DOUBLE_EDGE ], + [ 56, MoveId.HEAD_SMASH ], + ], + [SpeciesId.SNEASLER]: [ + [ EVOLVE_MOVE, MoveId.DIRE_CLAW ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.ROCK_SMASH ], + [ 1, MoveId.FLING ], + [ 6, MoveId.TAUNT ], + [ 12, MoveId.QUICK_ATTACK ], + [ 18, MoveId.METAL_CLAW ], + [ 24, MoveId.POISON_JAB ], + [ 30, MoveId.BRICK_BREAK ], + [ 36, MoveId.HONE_CLAWS ], + [ 42, MoveId.SLASH ], + [ 48, MoveId.AGILITY ], + [ 54, MoveId.SCREECH ], + [ 60, MoveId.CLOSE_COMBAT ], + ], + [SpeciesId.OVERQWIL]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.POISON_STING ], + [ 4, MoveId.HARDEN ], + [ 8, MoveId.BITE ], + [ 12, MoveId.FELL_STINGER ], + [ 16, MoveId.MINIMIZE ], + [ 20, MoveId.SPIKES ], + [ 24, MoveId.BRINE ], + [ 28, MoveId.BARB_BARRAGE ], + [ 32, MoveId.PIN_MISSILE ], + [ 36, MoveId.TOXIC_SPIKES ], + [ 40, MoveId.STOCKPILE ], + [ 40, MoveId.SPIT_UP ], + [ 44, MoveId.TOXIC ], + [ 48, MoveId.CRUNCH ], + [ 52, MoveId.ACUPRESSURE ], + [ 56, MoveId.DESTINY_BOND ], + ], + [SpeciesId.ENAMORUS]: [ + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.FAIRY_WIND ], + [ 5, MoveId.TORMENT ], + [ 10, MoveId.FLATTER ], + [ 15, MoveId.TWISTER ], + [ 20, MoveId.DRAINING_KISS ], + [ 25, MoveId.IRON_DEFENSE ], + [ 30, MoveId.IMPRISON ], + [ 35, MoveId.MYSTICAL_FIRE ], + [ 40, MoveId.DAZZLING_GLEAM ], + [ 45, MoveId.EXTRASENSORY ], + [ 50, MoveId.UPROAR ], + [ 55, MoveId.SUPERPOWER ], + [ 60, MoveId.HEALING_WISH ], + [ 65, MoveId.MOONBLAST ], + [ 70, MoveId.OUTRAGE ], + [ 75, MoveId.SPRINGTIDE_STORM ], + ], + [SpeciesId.SPRIGATITO]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.LEAFAGE ], + [ 7, MoveId.BITE ], + [ 10, MoveId.HONE_CLAWS ], + [ 13, MoveId.MAGICAL_LEAF ], + [ 15, MoveId.QUICK_ATTACK ], + [ 17, MoveId.SEED_BOMB ], + [ 21, MoveId.U_TURN ], + [ 25, MoveId.WORRY_SEED ], + [ 28, MoveId.SLASH ], + [ 32, MoveId.ENERGY_BALL ], + [ 36, MoveId.PLAY_ROUGH ], + ], + [SpeciesId.FLORAGATO]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.LEAFAGE ], + [ 7, MoveId.BITE ], + [ 10, MoveId.HONE_CLAWS ], + [ 13, MoveId.MAGICAL_LEAF ], + [ 15, MoveId.QUICK_ATTACK ], + [ 20, MoveId.SEED_BOMB ], + [ 24, MoveId.U_TURN ], + [ 28, MoveId.WORRY_SEED ], + [ 33, MoveId.SLASH ], + [ 38, MoveId.ENERGY_BALL ], + [ 42, MoveId.PLAY_ROUGH ], + [ 46, MoveId.LEAF_STORM ], + ], + [SpeciesId.MEOWSCARADA]: [ + [ EVOLVE_MOVE, MoveId.FLOWER_TRICK ], + [ RELEARN_MOVE, MoveId.DOUBLE_TEAM ], + [ RELEARN_MOVE, MoveId.TRICK ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.LEAFAGE ], + [ 7, MoveId.BITE ], + [ 10, MoveId.HONE_CLAWS ], + [ 13, MoveId.MAGICAL_LEAF ], + [ 15, MoveId.QUICK_ATTACK ], + [ 20, MoveId.SEED_BOMB ], + [ 24, MoveId.U_TURN ], + [ 29, MoveId.WORRY_SEED ], + [ 33, MoveId.SLASH ], + [ 38, MoveId.NIGHT_SLASH ], + [ 42, MoveId.ENERGY_BALL ], + [ 47, MoveId.PLAY_ROUGH ], + [ 52, MoveId.KNOCK_OFF ], + [ 58, MoveId.GRASSY_TERRAIN ], + [ 64, MoveId.LEAF_STORM ], + ], + [SpeciesId.FUECOCO]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 7, MoveId.ROUND ], + [ 12, MoveId.BITE ], + [ 15, MoveId.INCINERATE ], + [ 17, MoveId.YAWN ], + [ 21, MoveId.SNARL ], + [ 25, MoveId.ROAR ], + [ 28, MoveId.FLAMETHROWER ], + [ 32, MoveId.HYPER_VOICE ], + [ 36, MoveId.FIRE_BLAST ], + ], + [SpeciesId.CROCALOR]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 7, MoveId.LICK ], + [ 10, MoveId.ROUND ], + [ 12, MoveId.BITE ], + [ 15, MoveId.YAWN ], + [ 17, MoveId.INCINERATE ], + [ 24, MoveId.SNARL ], + [ 28, MoveId.ROAR ], + [ 32, MoveId.FLAMETHROWER ], + [ 38, MoveId.HYPER_VOICE ], + [ 42, MoveId.WILL_O_WISP ], + [ 47, MoveId.FIRE_BLAST ], + ], + [SpeciesId.SKELEDIRGE]: [ + [ EVOLVE_MOVE, MoveId.TORCH_SONG ], + [ RELEARN_MOVE, MoveId.SING ], + [ RELEARN_MOVE, MoveId.YAWN ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 7, MoveId.LICK ], + [ 10, MoveId.ROUND ], + [ 12, MoveId.SCARY_FACE ], + [ 15, MoveId.BITE ], + [ 17, MoveId.INCINERATE ], + [ 24, MoveId.SNARL ], + [ 28, MoveId.ROAR ], + [ 32, MoveId.FLAMETHROWER ], + [ 38, MoveId.SHADOW_BALL ], + [ 42, MoveId.HYPER_VOICE ], + [ 47, MoveId.WILL_O_WISP ], + [ 47, MoveId.HEX ], + [ 58, MoveId.FIRE_BLAST ], + [ 64, MoveId.OVERHEAT ], + ], + [SpeciesId.QUAXLY]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 7, MoveId.WORK_UP ], + [ 10, MoveId.WING_ATTACK ], + [ 13, MoveId.AQUA_JET ], + [ 17, MoveId.DOUBLE_HIT ], + [ 21, MoveId.AQUA_CUTTER ], + [ 24, MoveId.AIR_SLASH ], + [ 28, MoveId.FOCUS_ENERGY ], + [ 31, MoveId.ACROBATICS ], + [ 35, MoveId.LIQUIDATION ], + ], + [SpeciesId.QUAXWELL]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.DOUBLE_HIT ], + [ 7, MoveId.WORK_UP ], + [ 10, MoveId.WING_ATTACK ], + [ 13, MoveId.AQUA_JET ], + [ 17, MoveId.WATER_PULSE ], + [ 19, MoveId.LOW_SWEEP ], + [ 23, MoveId.AQUA_CUTTER ], + [ 27, MoveId.AIR_SLASH ], + [ 32, MoveId.FOCUS_ENERGY ], + [ 38, MoveId.ACROBATICS ], + [ 43, MoveId.LIQUIDATION ], + [ 48, MoveId.FEATHER_DANCE ], + ], + [SpeciesId.QUAQUAVAL]: [ + [ EVOLVE_MOVE, MoveId.AQUA_STEP ], + [ RELEARN_MOVE, MoveId.COUNTER ], + [ 1, MoveId.POUND ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.DOUBLE_HIT ], + [ 7, MoveId.WORK_UP ], + [ 10, MoveId.WING_ATTACK ], + [ 13, MoveId.AQUA_JET ], + [ 17, MoveId.WATER_PULSE ], + [ 17, MoveId.LOW_SWEEP ], + [ 21, MoveId.AQUA_CUTTER ], + [ 27, MoveId.AIR_SLASH ], + [ 32, MoveId.FOCUS_ENERGY ], + [ 38, MoveId.MEGA_KICK ], + [ 43, MoveId.ACROBATICS ], + [ 47, MoveId.LIQUIDATION ], + [ 52, MoveId.FEATHER_DANCE ], + [ 58, MoveId.CLOSE_COMBAT ], + [ 64, MoveId.WAVE_CRASH ], + ], + [SpeciesId.LECHONK]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 5, MoveId.DISARMING_VOICE ], + [ 8, MoveId.ECHOED_VOICE ], + [ 12, MoveId.MUD_SHOT ], + [ 15, MoveId.COVET ], + [ 17, MoveId.DIG ], + [ 21, MoveId.HEADBUTT ], + [ 24, MoveId.YAWN ], + [ 27, MoveId.TAKE_DOWN ], + [ 30, MoveId.WORK_UP ], + [ 32, MoveId.UPROAR ], + [ 35, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.OINKOLOGNE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 5, MoveId.DISARMING_VOICE ], + [ 8, MoveId.ECHOED_VOICE ], + [ 12, MoveId.MUD_SHOT ], + [ 15, MoveId.COVET ], + [ 17, MoveId.DIG ], + [ 23, MoveId.HEADBUTT ], + [ 26, MoveId.TAKE_DOWN ], + [ 27, MoveId.YAWN ], + [ 34, MoveId.WORK_UP ], + [ 38, MoveId.UPROAR ], + [ 42, MoveId.DOUBLE_EDGE ], + [ 48, MoveId.EARTH_POWER ], + [ 54, MoveId.BELCH ], + ], + [SpeciesId.TAROUNTULA]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.STRING_SHOT ], + [ 5, MoveId.STRUGGLE_BUG ], + [ 8, MoveId.ASSURANCE ], + [ 11, MoveId.FEINT ], + [ 14, MoveId.BUG_BITE ], + [ 18, MoveId.BLOCK ], + [ 22, MoveId.COUNTER ], + [ 25, MoveId.HEADBUTT ], + [ 29, MoveId.STICKY_WEB ], + [ 33, MoveId.GASTRO_ACID ], + [ 36, MoveId.CIRCLE_THROW ], + [ 40, MoveId.THROAT_CHOP ], + [ 44, MoveId.SKITTER_SMACK ], + ], + [SpeciesId.SPIDOPS]: [ + [ EVOLVE_MOVE, MoveId.SILK_TRAP ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.STRING_SHOT ], + [ 5, MoveId.STRUGGLE_BUG ], + [ 8, MoveId.ASSURANCE ], + [ 11, MoveId.FEINT ], + [ 14, MoveId.BUG_BITE ], + [ 19, MoveId.BLOCK ], + [ 24, MoveId.COUNTER ], + [ 28, MoveId.HEADBUTT ], + [ 33, MoveId.STICKY_WEB ], + [ 37, MoveId.GASTRO_ACID ], + [ 41, MoveId.CIRCLE_THROW ], + [ 45, MoveId.THROAT_CHOP ], + [ 49, MoveId.SKITTER_SMACK ], + ], + [SpeciesId.NYMBLE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 4, MoveId.STRUGGLE_BUG ], + [ 6, MoveId.ASTONISH ], + [ 9, MoveId.ASSURANCE ], + [ 11, MoveId.DOUBLE_KICK ], + [ 14, MoveId.SCREECH ], + [ 18, MoveId.ENDURE ], + [ 22, MoveId.BUG_BITE ], + [ 26, MoveId.FEINT ], + [ 30, MoveId.AGILITY ], + [ 38, MoveId.SUCKER_PUNCH ], + [ 41, MoveId.FIRST_IMPRESSION ], + ], + [SpeciesId.LOKIX]: [ + [ EVOLVE_MOVE, MoveId.LUNGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LOW_KICK ], + [ 1, MoveId.DETECT ], + [ 4, MoveId.STRUGGLE_BUG ], + [ 6, MoveId.ASTONISH ], + [ 9, MoveId.ASSURANCE ], + [ 11, MoveId.DOUBLE_KICK ], + [ 14, MoveId.SCREECH ], + [ 18, MoveId.ENDURE ], + [ 22, MoveId.BUG_BITE ], + [ 28, MoveId.FEINT ], + [ 32, MoveId.AGILITY ], + [ 36, MoveId.THROAT_CHOP ], + [ 40, MoveId.SUCKER_PUNCH ], + [ 44, MoveId.FIRST_IMPRESSION ], + [ 48, MoveId.BOUNCE ], + [ 53, MoveId.AXE_KICK ], + ], + [SpeciesId.PAWMI]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 3, MoveId.THUNDER_SHOCK ], + [ 6, MoveId.QUICK_ATTACK ], + [ 8, MoveId.CHARGE ], + [ 12, MoveId.NUZZLE ], + [ 15, MoveId.DIG ], + [ 19, MoveId.BITE ], + [ 23, MoveId.SPARK ], + [ 27, MoveId.THUNDER_WAVE ], + [ 31, MoveId.ENTRAINMENT ], + [ 35, MoveId.SLAM ], + [ 38, MoveId.DISCHARGE ], + [ 40, MoveId.AGILITY ], + [ 44, MoveId.WILD_CHARGE ], + ], + [SpeciesId.PAWMO]: [ + [ EVOLVE_MOVE, MoveId.ARM_THRUST ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 3, MoveId.THUNDER_SHOCK ], + [ 6, MoveId.QUICK_ATTACK ], + [ 8, MoveId.CHARGE ], + [ 12, MoveId.NUZZLE ], + [ 15, MoveId.DIG ], + [ 19, MoveId.BITE ], + [ 23, MoveId.SPARK ], + [ 27, MoveId.THUNDER_WAVE ], + [ 32, MoveId.SLAM ], + [ 38, MoveId.ENTRAINMENT ], + [ 42, MoveId.DISCHARGE ], + [ 46, MoveId.AGILITY ], + [ 52, MoveId.WILD_CHARGE ], + ], + [SpeciesId.PAWMOT]: [ + [ EVOLVE_MOVE, MoveId.REVIVAL_BLESSING ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WILD_CHARGE ], + [ 3, MoveId.THUNDER_SHOCK ], + [ 6, MoveId.QUICK_ATTACK ], + [ 8, MoveId.CHARGE ], + [ 12, MoveId.NUZZLE ], + [ 15, MoveId.DIG ], + [ 19, MoveId.BITE ], + [ 23, MoveId.SPARK ], + [ 25, MoveId.ARM_THRUST ], + [ 29, MoveId.THUNDER_WAVE ], + [ 33, MoveId.SLAM ], + [ 39, MoveId.ENTRAINMENT ], + [ 44, MoveId.CLOSE_COMBAT ], + [ 49, MoveId.DISCHARGE ], + [ 54, MoveId.AGILITY ], + [ 60, MoveId.DOUBLE_SHOCK ], + ], + [SpeciesId.TANDEMAUS]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.BABY_DOLL_EYES ], + [ 5, MoveId.ECHOED_VOICE ], + [ 8, MoveId.HELPING_HAND ], + [ 11, MoveId.SUPER_FANG ], + [ 14, MoveId.DOUBLE_HIT ], + [ 18, MoveId.BULLET_SEED ], + [ 22, MoveId.ENCORE ], + [ 26, MoveId.PLAY_ROUGH ], + [ 30, MoveId.HYPER_VOICE ], + [ 33, MoveId.CHARM ], + [ 37, MoveId.BEAT_UP ], + [ 41, MoveId.COPYCAT ], + [ 46, MoveId.POPULATION_BOMB ], + ], + [SpeciesId.MAUSHOLD]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.FOLLOW_ME ], + [ 1, MoveId.BABY_DOLL_EYES ], + [ 1, MoveId.TIDY_UP ], + [ 5, MoveId.ECHOED_VOICE ], + [ 8, MoveId.HELPING_HAND ], + [ 11, MoveId.SUPER_FANG ], + [ 14, MoveId.DOUBLE_HIT ], + [ 18, MoveId.BULLET_SEED ], + [ 22, MoveId.ENCORE ], + [ 29, MoveId.PLAY_ROUGH ], + [ 33, MoveId.HYPER_VOICE ], + [ 37, MoveId.CHARM ], + [ 41, MoveId.BEAT_UP ], + [ 46, MoveId.COPYCAT ], + [ 53, MoveId.POPULATION_BOMB ], + ], + [SpeciesId.FIDOUGH]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 3, MoveId.LICK ], + [ 6, MoveId.TAIL_WHIP ], + [ 8, MoveId.COVET ], + [ 11, MoveId.BITE ], + [ 15, MoveId.BABY_DOLL_EYES ], + [ 18, MoveId.PLAY_ROUGH ], + [ 22, MoveId.WORK_UP ], + [ 26, MoveId.BATON_PASS ], + [ 30, MoveId.ROAR ], + [ 33, MoveId.DOUBLE_EDGE ], + [ 36, MoveId.CHARM ], + [ 40, MoveId.CRUNCH ], + [ 45, MoveId.LAST_RESORT ], + ], + [SpeciesId.DACHSBUN]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 3, MoveId.LICK ], + [ 6, MoveId.TAIL_WHIP ], + [ 8, MoveId.COVET ], + [ 11, MoveId.BITE ], + [ 15, MoveId.BABY_DOLL_EYES ], + [ 18, MoveId.PLAY_ROUGH ], + [ 22, MoveId.WORK_UP ], + [ 29, MoveId.BATON_PASS ], + [ 33, MoveId.ROAR ], + [ 38, MoveId.DOUBLE_EDGE ], + [ 42, MoveId.CHARM ], + [ 47, MoveId.CRUNCH ], + [ 53, MoveId.LAST_RESORT ], + ], + [SpeciesId.SMOLIV]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SWEET_SCENT ], + [ 5, MoveId.ABSORB ], + [ 7, MoveId.GROWTH ], + [ 10, MoveId.RAZOR_LEAF ], + [ 13, MoveId.HELPING_HAND ], + [ 16, MoveId.FLAIL ], + [ 20, MoveId.MEGA_DRAIN ], + [ 23, MoveId.GRASSY_TERRAIN ], + [ 27, MoveId.SEED_BOMB ], + [ 30, MoveId.ENERGY_BALL ], + [ 34, MoveId.LEECH_SEED ], + [ 38, MoveId.TERRAIN_PULSE ], + ], + [SpeciesId.DOLLIV]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SWEET_SCENT ], + [ 5, MoveId.ABSORB ], + [ 7, MoveId.GROWTH ], + [ 10, MoveId.RAZOR_LEAF ], + [ 13, MoveId.HELPING_HAND ], + [ 16, MoveId.FLAIL ], + [ 20, MoveId.MEGA_DRAIN ], + [ 23, MoveId.GRASSY_TERRAIN ], + [ 29, MoveId.SEED_BOMB ], + [ 34, MoveId.ENERGY_BALL ], + [ 37, MoveId.LEECH_SEED ], + [ 42, MoveId.TERRAIN_PULSE ], + ], + [SpeciesId.ARBOLIVA]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SAFEGUARD ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.MIRROR_COAT ], + [ 5, MoveId.ABSORB ], + [ 7, MoveId.GROWTH ], + [ 10, MoveId.RAZOR_LEAF ], + [ 13, MoveId.HELPING_HAND ], + [ 16, MoveId.FLAIL ], + [ 20, MoveId.MEGA_DRAIN ], + [ 23, MoveId.GRASSY_TERRAIN ], + [ 29, MoveId.SEED_BOMB ], + [ 34, MoveId.ENERGY_BALL ], + [ 39, MoveId.LEECH_SEED ], + [ 46, MoveId.TERRAIN_PULSE ], + [ 52, MoveId.PETAL_BLIZZARD ], + [ 58, MoveId.PETAL_DANCE ], + ], + [SpeciesId.SQUAWKABILLY]: [ + [ 1, MoveId.GROWL ], + [ 1, MoveId.PECK ], + [ 1, MoveId.MIMIC ], + [ 6, MoveId.QUICK_ATTACK ], + [ 10, MoveId.TORMENT ], + [ 13, MoveId.AERIAL_ACE ], + [ 17, MoveId.FURY_ATTACK ], + [ 20, MoveId.TAUNT ], + [ 24, MoveId.UPROAR ], + [ 27, MoveId.COPYCAT ], + [ 30, MoveId.FLY ], + [ 34, MoveId.FACADE ], + [ 38, MoveId.SWAGGER ], + [ 42, MoveId.BRAVE_BIRD ], + [ 47, MoveId.ROOST ], + [ 52, MoveId.REVERSAL ], + ], + [SpeciesId.NACLI]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 5, MoveId.ROCK_THROW ], + [ 7, MoveId.MUD_SHOT ], + [ 10, MoveId.SMACK_DOWN ], + [ 13, MoveId.ROCK_POLISH ], + [ 16, MoveId.HEADBUTT ], + [ 20, MoveId.IRON_DEFENSE ], + [ 25, MoveId.RECOVER ], + [ 30, MoveId.ROCK_SLIDE ], + [ 33, MoveId.STEALTH_ROCK ], + [ 35, MoveId.HEAVY_SLAM ], + [ 40, MoveId.EARTHQUAKE ], + [ 45, MoveId.STONE_EDGE ], + ], + [SpeciesId.NACLSTACK]: [ + [ EVOLVE_MOVE, MoveId.SALT_CURE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 5, MoveId.ROCK_THROW ], + [ 7, MoveId.MUD_SHOT ], + [ 10, MoveId.SMACK_DOWN ], + [ 13, MoveId.ROCK_POLISH ], + [ 16, MoveId.HEADBUTT ], + [ 20, MoveId.IRON_DEFENSE ], + [ 30, MoveId.RECOVER ], + [ 34, MoveId.ROCK_SLIDE ], + [ 38, MoveId.STEALTH_ROCK ], + [ 41, MoveId.HEAVY_SLAM ], + [ 45, MoveId.EARTHQUAKE ], + [ 51, MoveId.STONE_EDGE ], + ], + [SpeciesId.GARGANACL]: [ + [ EVOLVE_MOVE, MoveId.HAMMER_ARM ], + [ RELEARN_MOVE, MoveId.IRON_DEFENSE ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.BLOCK ], + [ 1, MoveId.ROCK_BLAST ], + [ 1, MoveId.SMACK_DOWN ], // Previous Stage Move + [ 1, MoveId.WIDE_GUARD ], + [ 5, MoveId.ROCK_THROW ], + [ 7, MoveId.MUD_SHOT ], + [ 10, MoveId.ROCK_TOMB ], + [ 13, MoveId.ROCK_POLISH ], + [ 16, MoveId.HEADBUTT ], + [ 24, MoveId.SALT_CURE ], + [ 30, MoveId.RECOVER ], + [ 34, MoveId.ROCK_SLIDE ], + [ 40, MoveId.STEALTH_ROCK ], + [ 44, MoveId.HEAVY_SLAM ], + [ 49, MoveId.EARTHQUAKE ], + [ 54, MoveId.STONE_EDGE ], + [ 60, MoveId.EXPLOSION ], + ], + [SpeciesId.CHARCADET]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.ASTONISH ], + [ 8, MoveId.CLEAR_SMOG ], + [ 12, MoveId.FIRE_SPIN ], + [ 16, MoveId.WILL_O_WISP ], + [ 20, MoveId.NIGHT_SHADE ], + [ 24, MoveId.FLAME_CHARGE ], + [ 28, MoveId.INCINERATE ], + [ 32, MoveId.LAVA_PLUME ], + ], + [SpeciesId.ARMAROUGE]: [ + [ EVOLVE_MOVE, MoveId.PSYSHOCK ], + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.WIDE_GUARD ], + [ 1, MoveId.MYSTICAL_FIRE ], + [ 8, MoveId.CLEAR_SMOG ], + [ 12, MoveId.FIRE_SPIN ], + [ 16, MoveId.WILL_O_WISP ], + [ 20, MoveId.NIGHT_SHADE ], + [ 24, MoveId.FLAME_CHARGE ], + [ 28, MoveId.INCINERATE ], + [ 32, MoveId.LAVA_PLUME ], + [ 37, MoveId.CALM_MIND ], + [ 42, MoveId.ALLY_SWITCH ], + [ 48, MoveId.FLAMETHROWER ], + [ 56, MoveId.EXPANDING_FORCE ], + [ 62, MoveId.ARMOR_CANNON ], + ], + [SpeciesId.CERULEDGE]: [ + [ EVOLVE_MOVE, MoveId.SHADOW_CLAW ], + [ RELEARN_MOVE, MoveId.NIGHT_SLASH ], + [ RELEARN_MOVE, MoveId.SHADOW_SNEAK ], + [ RELEARN_MOVE, MoveId.QUICK_GUARD ], + [ RELEARN_MOVE, MoveId.SOLAR_BLADE ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.LEER ], + [ 1, MoveId.ASTONISH ], + [ 8, MoveId.CLEAR_SMOG ], + [ 12, MoveId.FIRE_SPIN ], + [ 16, MoveId.WILL_O_WISP ], + [ 20, MoveId.NIGHT_SHADE ], + [ 24, MoveId.FLAME_CHARGE ], + [ 28, MoveId.INCINERATE ], + [ 32, MoveId.LAVA_PLUME ], + [ 37, MoveId.SWORDS_DANCE ], + [ 42, MoveId.ALLY_SWITCH ], + [ 48, MoveId.BITTER_BLADE ], + [ 56, MoveId.PSYCHO_CUT ], + [ 62, MoveId.FLARE_BLITZ ], + ], + [SpeciesId.TADBULB]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.MUD_SLAP ], + [ 7, MoveId.THUNDER_SHOCK ], + [ 11, MoveId.WATER_GUN ], + [ 17, MoveId.CHARGE ], + [ 21, MoveId.SPARK ], + [ 24, MoveId.MUD_SHOT ], + [ 25, MoveId.FLAIL ], + [ 32, MoveId.DISCHARGE ], + [ 36, MoveId.WEATHER_BALL ], + [ 40, MoveId.ELECTRIC_TERRAIN ], + [ 45, MoveId.SUCKER_PUNCH ], + [ 50, MoveId.ZAP_CANNON ], + ], + [SpeciesId.BELLIBOLT]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.SLACK_OFF ], + [ 7, MoveId.THUNDER_SHOCK ], + [ 11, MoveId.WATER_GUN ], + [ 17, MoveId.CHARGE ], + [ 21, MoveId.SPARK ], + [ 24, MoveId.MUD_SHOT ], + [ 25, MoveId.FLAIL ], + [ 32, MoveId.DISCHARGE ], + [ 36, MoveId.WEATHER_BALL ], + [ 40, MoveId.ELECTRIC_TERRAIN ], + [ 45, MoveId.SUCKER_PUNCH ], + [ 50, MoveId.ZAP_CANNON ], + ], + [SpeciesId.WATTREL]: [ + [ 1, MoveId.GROWL ], + [ 1, MoveId.PECK ], + [ 4, MoveId.THUNDER_SHOCK ], + [ 7, MoveId.QUICK_ATTACK ], + [ 11, MoveId.PLUCK ], + [ 15, MoveId.SPARK ], + [ 19, MoveId.UPROAR ], + [ 23, MoveId.ROOST ], + [ 27, MoveId.DUAL_WINGBEAT ], + [ 32, MoveId.AGILITY ], + [ 37, MoveId.VOLT_SWITCH ], + [ 43, MoveId.DISCHARGE ], + ], + [SpeciesId.KILOWATTREL]: [ + [ EVOLVE_MOVE, MoveId.ELECTRO_BALL ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.PECK ], + [ 4, MoveId.THUNDER_SHOCK ], + [ 7, MoveId.QUICK_ATTACK ], + [ 11, MoveId.PLUCK ], + [ 15, MoveId.SPARK ], + [ 19, MoveId.UPROAR ], + [ 24, MoveId.ROOST ], + [ 30, MoveId.DUAL_WINGBEAT ], + [ 36, MoveId.AGILITY ], + [ 43, MoveId.VOLT_SWITCH ], + [ 48, MoveId.DISCHARGE ], + [ 55, MoveId.HURRICANE ], + ], + [SpeciesId.MASCHIFF]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.SCARY_FACE ], + [ 4, MoveId.LICK ], + [ 7, MoveId.SNARL ], + [ 10, MoveId.HONE_CLAWS ], + [ 14, MoveId.BITE ], + [ 18, MoveId.ROAR ], + [ 22, MoveId.HEADBUTT ], + [ 26, MoveId.PAYBACK ], + [ 31, MoveId.CRUNCH ], + [ 35, MoveId.SWAGGER ], + [ 39, MoveId.REVERSAL ], + [ 43, MoveId.JAW_LOCK ], + [ 49, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.MABOSSTIFF]: [ + [ EVOLVE_MOVE, MoveId.COMEUPPANCE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.SCARY_FACE ], + [ 4, MoveId.LICK ], + [ 7, MoveId.SNARL ], + [ 10, MoveId.HONE_CLAWS ], + [ 14, MoveId.BITE ], + [ 18, MoveId.ROAR ], + [ 22, MoveId.HEADBUTT ], + [ 26, MoveId.PAYBACK ], + [ 34, MoveId.CRUNCH ], + [ 39, MoveId.SWAGGER ], + [ 43, MoveId.REVERSAL ], + [ 48, MoveId.JAW_LOCK ], + [ 55, MoveId.DOUBLE_EDGE ], + [ 60, MoveId.OUTRAGE ], + ], + [SpeciesId.SHROODLE]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 5, MoveId.ACID_SPRAY ], + [ 8, MoveId.BITE ], + [ 8, MoveId.FURY_SWIPES ], + [ 11, MoveId.SWITCHEROO ], + [ 14, MoveId.POISON_FANG ], + [ 18, MoveId.FLATTER ], + [ 21, MoveId.SLASH ], + [ 25, MoveId.U_TURN ], + [ 29, MoveId.POISON_JAB ], + [ 33, MoveId.TAUNT ], + [ 36, MoveId.SUBSTITUTE ], + [ 40, MoveId.KNOCK_OFF ], + [ 45, MoveId.GUNK_SHOT ], + ], + [SpeciesId.GRAFAIAI]: [ + [ EVOLVE_MOVE, MoveId.DOODLE ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.BITE ], // Previous Stage Move + [ 5, MoveId.ACID_SPRAY ], + [ 8, MoveId.FURY_SWIPES ], + [ 11, MoveId.SWITCHEROO ], + [ 14, MoveId.POISON_FANG ], + [ 18, MoveId.FLATTER ], + [ 21, MoveId.SLASH ], + [ 25, MoveId.U_TURN ], + [ 33, MoveId.POISON_JAB ], + [ 37, MoveId.TAUNT ], + [ 40, MoveId.SUBSTITUTE ], + [ 45, MoveId.KNOCK_OFF ], + [ 51, MoveId.GUNK_SHOT ], + ], + [SpeciesId.BRAMBLIN]: [ + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.ROLLOUT ], + [ 1, MoveId.ASTONISH ], + [ 5, MoveId.ABSORB ], + [ 9, MoveId.RAPID_SPIN ], + [ 13, MoveId.BULLET_SEED ], + [ 17, MoveId.INFESTATION ], + [ 21, MoveId.HEX ], + [ 25, MoveId.MEGA_DRAIN ], + [ 29, MoveId.DISABLE ], + [ 35, MoveId.PHANTOM_FORCE ], + [ 40, MoveId.GIGA_DRAIN ], + [ 45, MoveId.CURSE ], + [ 50, MoveId.PAIN_SPLIT ], + [ 55, MoveId.POWER_WHIP ], + ], + [SpeciesId.BRAMBLEGHAST]: [ + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.ROLLOUT ], + [ 1, MoveId.ASTONISH ], + [ 5, MoveId.ABSORB ], + [ 9, MoveId.RAPID_SPIN ], + [ 13, MoveId.BULLET_SEED ], + [ 17, MoveId.INFESTATION ], + [ 21, MoveId.HEX ], + [ 25, MoveId.MEGA_DRAIN ], + [ 29, MoveId.DISABLE ], + [ 35, MoveId.PHANTOM_FORCE ], + [ 40, MoveId.GIGA_DRAIN ], + [ 45, MoveId.CURSE ], + [ 50, MoveId.PAIN_SPLIT ], + [ 55, MoveId.POWER_WHIP ], + ], + [SpeciesId.TOEDSCOOL]: [ + [ 1, MoveId.WRAP ], + [ 1, MoveId.MUD_SLAP ], + [ 4, MoveId.ABSORB ], + [ 8, MoveId.POISON_POWDER ], + [ 8, MoveId.STUN_SPORE ], + [ 12, MoveId.SUPERSONIC ], + [ 15, MoveId.TACKLE ], + [ 16, MoveId.MEGA_DRAIN ], + [ 20, MoveId.SCREECH ], + [ 24, MoveId.MUD_SHOT ], + [ 28, MoveId.HEX ], + [ 32, MoveId.SEED_BOMB ], + [ 36, MoveId.SPORE ], + [ 40, MoveId.GROWTH ], + [ 44, MoveId.GIGA_DRAIN ], + [ 48, MoveId.EARTH_POWER ], + [ 52, MoveId.POWER_WHIP ], + ], + [SpeciesId.TOEDSCRUEL]: [ + [ 1, MoveId.WRAP ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.REFLECT_TYPE ], + [ 4, MoveId.ABSORB ], + [ 8, MoveId.POISON_POWDER ], + [ 8, MoveId.STUN_SPORE ], + [ 12, MoveId.SUPERSONIC ], + [ 15, MoveId.TACKLE ], + [ 16, MoveId.MEGA_DRAIN ], + [ 20, MoveId.SCREECH ], + [ 24, MoveId.MUD_SHOT ], + [ 28, MoveId.HEX ], + [ 34, MoveId.SEED_BOMB ], + [ 40, MoveId.SPORE ], + [ 44, MoveId.GROWTH ], + [ 48, MoveId.GIGA_DRAIN ], + [ 54, MoveId.EARTH_POWER ], + [ 58, MoveId.POWER_WHIP ], + ], + [SpeciesId.KLAWF]: [ + [ 1, MoveId.ROCK_THROW ], + [ 6, MoveId.HARDEN ], + [ 9, MoveId.ROCK_SMASH ], + [ 13, MoveId.ROCK_TOMB ], + [ 17, MoveId.METAL_CLAW ], + [ 21, MoveId.PROTECT ], + [ 24, MoveId.ROCK_BLAST ], + [ 29, MoveId.X_SCISSOR ], + [ 33, MoveId.SWORDS_DANCE ], + [ 37, MoveId.FLAIL ], + [ 42, MoveId.ROCK_SLIDE ], + [ 47, MoveId.HIGH_HORSEPOWER ], + [ 51, MoveId.IRON_DEFENSE ], + [ 56, MoveId.GUILLOTINE ], + ], + [SpeciesId.CAPSAKID]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.LEAFAGE ], + [ 4, MoveId.BITE ], + [ 10, MoveId.GROWTH ], + [ 13, MoveId.RAZOR_LEAF ], + [ 17, MoveId.SUNNY_DAY ], + [ 21, MoveId.BULLET_SEED ], + [ 24, MoveId.HEADBUTT ], + [ 28, MoveId.ZEN_HEADBUTT ], + [ 38, MoveId.CRUNCH ], + [ 44, MoveId.SEED_BOMB ], + [ 48, MoveId.SOLAR_BEAM ], + ], + [SpeciesId.SCOVILLAIN]: [ + [ EVOLVE_MOVE, MoveId.FLAMETHROWER ], + [ EVOLVE_MOVE, MoveId.SPICY_EXTRACT ], + [ 1, MoveId.LEER ], + [ 1, MoveId.FIRE_FANG ], + [ 1, MoveId.LEAFAGE ], + [ 4, MoveId.BITE ], + [ 10, MoveId.GROWTH ], + [ 13, MoveId.RAZOR_LEAF ], + [ 17, MoveId.SUNNY_DAY ], + [ 21, MoveId.BULLET_SEED ], + [ 24, MoveId.HEADBUTT ], + [ 28, MoveId.ZEN_HEADBUTT ], + [ 33, MoveId.WORRY_SEED ], + [ 38, MoveId.CRUNCH ], + [ 44, MoveId.SEED_BOMB ], + [ 48, MoveId.SOLAR_BEAM ], + [ 48, MoveId.OVERHEAT ], + ], + [SpeciesId.RELLOR]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DEFENSE_CURL ], + [ 4, MoveId.SAND_ATTACK ], + [ 7, MoveId.STRUGGLE_BUG ], + [ 11, MoveId.ROLLOUT ], + [ 15, MoveId.MUD_SHOT ], + [ 20, MoveId.BUG_BITE ], + [ 24, MoveId.TAKE_DOWN ], + [ 29, MoveId.DIG ], + [ 35, MoveId.LUNGE ], + ], + [SpeciesId.RABSCA]: [ + [ EVOLVE_MOVE, MoveId.REVIVAL_BLESSING ], + [ RELEARN_MOVE, MoveId.SAFEGUARD ], + [ RELEARN_MOVE, MoveId.PSYCH_UP ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.MUD_SHOT ], // Previous Stage Move + [ 1, MoveId.DIG ], // Previous Stage Move + [ 4, MoveId.SAND_ATTACK ], + [ 7, MoveId.STRUGGLE_BUG ], + [ 11, MoveId.ROLLOUT ], + [ 15, MoveId.PSYBEAM ], + [ 20, MoveId.BUG_BITE ], + [ 24, MoveId.TAKE_DOWN ], + [ 29, MoveId.EXTRASENSORY ], + [ 35, MoveId.LUNGE ], + [ 40, MoveId.POWER_SWAP ], + [ 40, MoveId.GUARD_SWAP ], + [ 40, MoveId.SPEED_SWAP ], + [ 45, MoveId.BUG_BUZZ ], + [ 50, MoveId.PSYCHIC ], + ], + [SpeciesId.FLITTLE]: [ + [ 1, MoveId.GROWL ], + [ 1, MoveId.PECK ], + [ 5, MoveId.CONFUSION ], + [ 8, MoveId.BABY_DOLL_EYES ], + [ 11, MoveId.DISARMING_VOICE ], + [ 15, MoveId.QUICK_ATTACK ], + [ 19, MoveId.PSYBEAM ], + [ 24, MoveId.PLUCK ], + [ 29, MoveId.AGILITY ], + [ 34, MoveId.UPROAR ], + ], + [SpeciesId.ESPATHRA]: [ + [ EVOLVE_MOVE, MoveId.LUMINA_CRASH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.PECK ], + [ 1, MoveId.DRILL_PECK ], + [ 1, MoveId.FEATHER_DANCE ], + [ 5, MoveId.CONFUSION ], + [ 8, MoveId.BABY_DOLL_EYES ], + [ 11, MoveId.DISARMING_VOICE ], + [ 15, MoveId.QUICK_ATTACK ], + [ 19, MoveId.PSYBEAM ], + [ 24, MoveId.PLUCK ], + [ 29, MoveId.AGILITY ], + [ 34, MoveId.UPROAR ], + [ 43, MoveId.DAZZLING_GLEAM ], + [ 49, MoveId.PSYCHIC ], + [ 54, MoveId.LAST_RESORT ], + ], + [SpeciesId.TINKATINK]: [ + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.FAIRY_WIND ], + [ 5, MoveId.BABY_DOLL_EYES ], + [ 8, MoveId.METAL_CLAW ], + [ 11, MoveId.COVET ], + [ 14, MoveId.ROCK_SMASH ], + [ 17, MoveId.DRAINING_KISS ], + [ 21, MoveId.SWEET_KISS ], + [ 24, MoveId.BRUTAL_SWING ], + [ 27, MoveId.SLAM ], + [ 31, MoveId.FLASH_CANNON ], + [ 35, MoveId.PLAY_ROUGH ], + [ 39, MoveId.FAKE_OUT ], + [ 43, MoveId.FLATTER ], + [ 47, MoveId.SKITTER_SMACK ], + [ 52, MoveId.KNOCK_OFF ], + ], + [SpeciesId.TINKATUFF]: [ + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.FAIRY_WIND ], + [ 5, MoveId.BABY_DOLL_EYES ], + [ 8, MoveId.METAL_CLAW ], + [ 11, MoveId.COVET ], + [ 14, MoveId.ROCK_SMASH ], + [ 17, MoveId.DRAINING_KISS ], + [ 21, MoveId.SWEET_KISS ], + [ 24, MoveId.BRUTAL_SWING ], + [ 27, MoveId.SLAM ], + [ 31, MoveId.FLASH_CANNON ], + [ 35, MoveId.PLAY_ROUGH ], + [ 39, MoveId.FAKE_OUT ], + [ 43, MoveId.FLATTER ], + [ 47, MoveId.SKITTER_SMACK ], + [ 52, MoveId.KNOCK_OFF ], + ], + [SpeciesId.TINKATON]: [ + [ EVOLVE_MOVE, MoveId.GIGATON_HAMMER ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.FAIRY_WIND ], + [ 5, MoveId.BABY_DOLL_EYES ], + [ 8, MoveId.METAL_CLAW ], + [ 11, MoveId.COVET ], + [ 14, MoveId.ROCK_SMASH ], + [ 17, MoveId.DRAINING_KISS ], + [ 21, MoveId.SWEET_KISS ], + [ 24, MoveId.BRUTAL_SWING ], + [ 27, MoveId.SLAM ], + [ 31, MoveId.FLASH_CANNON ], + [ 35, MoveId.PLAY_ROUGH ], + [ 39, MoveId.FAKE_OUT ], + [ 43, MoveId.FLATTER ], + [ 47, MoveId.SKITTER_SMACK ], + [ 52, MoveId.KNOCK_OFF ], + ], + [SpeciesId.WIGLETT]: [ + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.WATER_GUN ], + [ 4, MoveId.MUD_SLAP ], + [ 8, MoveId.WRAP ], + [ 12, MoveId.AQUA_JET ], + [ 20, MoveId.SLAM ], + [ 20, MoveId.WATER_PULSE ], + [ 24, MoveId.HEADBUTT ], + [ 28, MoveId.DIG ], + [ 32, MoveId.SUCKER_PUNCH ], + [ 36, MoveId.THROAT_CHOP ], + [ 40, MoveId.LIQUIDATION ], + ], + [SpeciesId.WUGTRIO]: [ + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.MUD_SLAP ], + [ 12, MoveId.AQUA_JET ], + [ 16, MoveId.SLAM ], + [ 20, MoveId.WATER_PULSE ], + [ 24, MoveId.HEADBUTT ], + [ 30, MoveId.TRIPLE_DIVE ], + [ 36, MoveId.DIG ], + [ 42, MoveId.SUCKER_PUNCH ], + [ 48, MoveId.THROAT_CHOP ], + [ 54, MoveId.LIQUIDATION ], + ], + [SpeciesId.BOMBIRDIER]: [ + [ 1, MoveId.WING_ATTACK ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 1, MoveId.MEMENTO ], + [ 1, MoveId.HONE_CLAWS ], + [ 7, MoveId.THIEF ], + [ 11, MoveId.ROCK_THROW ], + [ 16, MoveId.WHIRLWIND ], + [ 20, MoveId.PLUCK ], + [ 24, MoveId.TORMENT ], + [ 29, MoveId.ROCK_TOMB ], + [ 36, MoveId.PAYBACK ], + [ 42, MoveId.DUAL_WINGBEAT ], + [ 47, MoveId.ROCK_SLIDE ], + [ 53, MoveId.KNOCK_OFF ], + [ 60, MoveId.PARTING_SHOT ], + ], + [SpeciesId.FINIZEN]: [ + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.WATER_GUN ], + [ 7, MoveId.ASTONISH ], + [ 10, MoveId.FOCUS_ENERGY ], + [ 13, MoveId.AQUA_JET ], + [ 17, MoveId.DOUBLE_HIT ], + [ 21, MoveId.DIVE ], + [ 25, MoveId.CHARM ], + [ 29, MoveId.ACROBATICS ], + [ 34, MoveId.ENCORE ], + [ 39, MoveId.AQUA_TAIL ], + [ 44, MoveId.MIST ], + [ 50, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.PALAFIN]: [ + [ EVOLVE_MOVE, MoveId.FLIP_TURN ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.JET_PUNCH ], + [ 7, MoveId.ASTONISH ], + [ 10, MoveId.FOCUS_ENERGY ], + [ 13, MoveId.AQUA_JET ], + [ 17, MoveId.DOUBLE_HIT ], + [ 21, MoveId.DIVE ], + [ 25, MoveId.CHARM ], + [ 29, MoveId.ACROBATICS ], + [ 34, MoveId.ENCORE ], + [ 39, MoveId.AQUA_TAIL ], + [ 44, MoveId.MIST ], + [ 50, MoveId.HYDRO_PUMP ], + [ 55, MoveId.FOCUS_PUNCH ], + [ 61, MoveId.WAVE_CRASH ], + ], + [SpeciesId.VAROOM]: [ + [ 1, MoveId.LICK ], + [ 1, MoveId.POISON_GAS ], + [ 4, MoveId.SMOG ], + [ 7, MoveId.TAUNT ], + [ 10, MoveId.ASSURANCE ], + [ 13, MoveId.SLUDGE ], + [ 17, MoveId.GYRO_BALL ], + [ 21, MoveId.HEADBUTT ], + [ 25, MoveId.SCREECH ], + [ 28, MoveId.IRON_HEAD ], + [ 32, MoveId.SWAGGER ], + [ 36, MoveId.POISON_JAB ], + [ 41, MoveId.UPROAR ], + [ 46, MoveId.SPIN_OUT ], + [ 50, MoveId.GUNK_SHOT ], + ], + [SpeciesId.REVAVROOM]: [ + [ EVOLVE_MOVE, MoveId.SHIFT_GEAR ], + [ 1, MoveId.LICK ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.MAGNET_RISE ], + [ 4, MoveId.SMOG ], + [ 7, MoveId.TAUNT ], + [ 10, MoveId.ASSURANCE ], + [ 13, MoveId.SLUDGE ], + [ 17, MoveId.GYRO_BALL ], + [ 21, MoveId.HEADBUTT ], + [ 25, MoveId.SCREECH ], + [ 28, MoveId.IRON_HEAD ], + [ 32, MoveId.SWAGGER ], + [ 36, MoveId.POISON_JAB ], + [ 46, MoveId.UPROAR ], + [ 52, MoveId.SPIN_OUT ], + [ 58, MoveId.GUNK_SHOT ], + ], + [SpeciesId.CYCLIZAR]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 7, MoveId.RAPID_SPIN ], + [ 11, MoveId.TAUNT ], + [ 14, MoveId.BREAKING_SWIPE ], + [ 18, MoveId.QUICK_ATTACK ], + [ 23, MoveId.BITE ], + [ 27, MoveId.U_TURN ], + [ 31, MoveId.SHED_TAIL ], + [ 36, MoveId.DRAGON_CLAW ], + [ 40, MoveId.SHIFT_GEAR ], + [ 45, MoveId.DRAGON_PULSE ], + [ 51, MoveId.DOUBLE_EDGE ], + [ 57, MoveId.DRAGON_RUSH ], + ], + [SpeciesId.ORTHWORM]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.HARDEN ], + [ 7, MoveId.MUD_SLAP ], + [ 12, MoveId.SMACK_DOWN ], + [ 16, MoveId.BULLDOZE ], + [ 21, MoveId.IRON_HEAD ], + [ 26, MoveId.TAKE_DOWN ], + [ 30, MoveId.DIG ], + [ 34, MoveId.SANDSTORM ], + [ 38, MoveId.IRON_DEFENSE ], + [ 43, MoveId.IRON_TAIL ], + [ 47, MoveId.EARTHQUAKE ], + [ 52, MoveId.SHED_TAIL ], + ], + [SpeciesId.GLIMMET]: [ + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.SMACK_DOWN ], + [ 7, MoveId.ACID_SPRAY ], + [ 11, MoveId.ANCIENT_POWER ], + [ 15, MoveId.ROCK_POLISH ], + [ 18, MoveId.STEALTH_ROCK ], + [ 22, MoveId.VENOSHOCK ], + [ 26, MoveId.SANDSTORM ], + [ 29, MoveId.SELF_DESTRUCT ], + [ 33, MoveId.ROCK_SLIDE ], + [ 37, MoveId.POWER_GEM ], + [ 41, MoveId.ACID_ARMOR ], + [ 46, MoveId.SLUDGE_WAVE ], + ], + [SpeciesId.GLIMMORA]: [ + [ EVOLVE_MOVE, MoveId.MORTAL_SPIN ], + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.TOXIC_SPIKES ], + [ 1, MoveId.SMACK_DOWN ], + [ 1, MoveId.SPIKY_SHIELD ], + [ 7, MoveId.ACID_SPRAY ], + [ 11, MoveId.ANCIENT_POWER ], + [ 15, MoveId.ROCK_POLISH ], + [ 18, MoveId.STEALTH_ROCK ], + [ 22, MoveId.VENOSHOCK ], + [ 26, MoveId.SANDSTORM ], + [ 29, MoveId.SELF_DESTRUCT ], + [ 33, MoveId.ROCK_SLIDE ], + [ 39, MoveId.POWER_GEM ], + [ 44, MoveId.ACID_ARMOR ], + [ 50, MoveId.SLUDGE_WAVE ], + ], + [SpeciesId.GREAVARD]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 3, MoveId.LICK ], + [ 6, MoveId.TAIL_WHIP ], + [ 6, MoveId.BITE ], + [ 9, MoveId.ROAR ], + [ 12, MoveId.HEADBUTT ], + [ 16, MoveId.DIG ], + [ 24, MoveId.REST ], + [ 28, MoveId.CRUNCH ], + [ 32, MoveId.PLAY_ROUGH ], + [ 37, MoveId.HELPING_HAND ], + [ 41, MoveId.PHANTOM_FORCE ], + [ 46, MoveId.CHARM ], + [ 52, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.HOUNDSTONE]: [ + [ EVOLVE_MOVE, MoveId.LAST_RESPECTS ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 3, MoveId.LICK ], + [ 6, MoveId.TAIL_WHIP ], + [ 6, MoveId.BITE ], + [ 9, MoveId.ROAR ], + [ 12, MoveId.HEADBUTT ], + [ 16, MoveId.DIG ], + [ 24, MoveId.REST ], + [ 28, MoveId.CRUNCH ], + [ 36, MoveId.PLAY_ROUGH ], + [ 41, MoveId.HELPING_HAND ], + [ 46, MoveId.PHANTOM_FORCE ], + [ 51, MoveId.CHARM ], + [ 58, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.FLAMIGO]: [ + [ 1, MoveId.PECK ], + [ 1, MoveId.COPYCAT ], + [ 5, MoveId.DOUBLE_KICK ], + [ 9, MoveId.DETECT ], + [ 12, MoveId.WING_ATTACK ], + [ 15, MoveId.FOCUS_ENERGY ], + [ 18, MoveId.LOW_KICK ], + [ 21, MoveId.FEINT ], + [ 27, MoveId.PAYBACK ], + [ 31, MoveId.ROOST ], + [ 35, MoveId.AIR_SLASH ], + [ 39, MoveId.MEGA_KICK ], + [ 44, MoveId.WIDE_GUARD ], + [ 48, MoveId.THROAT_CHOP ], + [ 54, MoveId.BRAVE_BIRD ], + ], + [SpeciesId.CETODDLE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.POWDER_SNOW ], + [ 6, MoveId.GROWL ], + [ 9, MoveId.ECHOED_VOICE ], + [ 12, MoveId.ICE_SHARD ], + [ 15, MoveId.REST ], + [ 19, MoveId.TAKE_DOWN ], + [ 25, MoveId.FLAIL ], + [ 27, MoveId.AVALANCHE ], + [ 31, MoveId.BOUNCE ], + [ 36, MoveId.BODY_SLAM ], + [ 40, MoveId.AMNESIA ], + [ 44, MoveId.ICE_SPINNER ], + [ 49, MoveId.DOUBLE_EDGE ], + [ 53, MoveId.BLIZZARD ], + ], + [SpeciesId.CETITAN]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.POWDER_SNOW ], + [ 6, MoveId.GROWL ], + [ 9, MoveId.ECHOED_VOICE ], + [ 12, MoveId.ICE_SHARD ], + [ 15, MoveId.REST ], + [ 19, MoveId.TAKE_DOWN ], + [ 25, MoveId.FLAIL ], + [ 27, MoveId.AVALANCHE ], + [ 31, MoveId.BOUNCE ], + [ 36, MoveId.BODY_SLAM ], + [ 40, MoveId.AMNESIA ], + [ 44, MoveId.ICE_SPINNER ], + [ 49, MoveId.DOUBLE_EDGE ], + [ 53, MoveId.BLIZZARD ], + ], + [SpeciesId.VELUZA]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.AQUA_JET ], + [ 7, MoveId.PLUCK ], + [ 11, MoveId.WATER_PULSE ], + [ 15, MoveId.FOCUS_ENERGY ], + [ 20, MoveId.SLASH ], + [ 25, MoveId.AQUA_CUTTER ], + [ 30, MoveId.FILLET_AWAY ], + [ 35, MoveId.NIGHT_SLASH ], + [ 40, MoveId.PSYCHO_CUT ], + [ 45, MoveId.LIQUIDATION ], + [ 50, MoveId.CRUNCH ], + [ 55, MoveId.FINAL_GAMBIT ], + ], + [SpeciesId.DONDOZO]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.WATER_GUN ], + [ 5, MoveId.TICKLE ], + [ 10, MoveId.FLAIL ], + [ 15, MoveId.REST ], + [ 15, MoveId.SLEEP_TALK ], + [ 20, MoveId.DIVE ], + [ 25, MoveId.NOBLE_ROAR ], + [ 30, MoveId.SOAK ], + [ 35, MoveId.BODY_SLAM ], + [ 40, MoveId.AQUA_TAIL ], + [ 45, MoveId.RAIN_DANCE ], + [ 50, MoveId.ORDER_UP ], + [ 55, MoveId.HEAVY_SLAM ], + [ 60, MoveId.DOUBLE_EDGE ], + [ 65, MoveId.WAVE_CRASH ], + ], + [SpeciesId.TATSUGIRI]: [ + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.SPLASH ], + [ 6, MoveId.HARDEN ], + [ 12, MoveId.HELPING_HAND ], + [ 17, MoveId.WATER_PULSE ], + [ 23, MoveId.SOAK ], + [ 28, MoveId.TAUNT ], + [ 34, MoveId.MEMENTO ], + [ 39, MoveId.MUDDY_WATER ], + [ 43, MoveId.NASTY_PLOT ], + [ 47, MoveId.MIRROR_COAT ], + [ 52, MoveId.DRAGON_PULSE ], + ], + [SpeciesId.ANNIHILAPE]: [ + [ EVOLVE_MOVE, MoveId.SHADOW_PUNCH ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.COUNTER ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.COVET ], // Previous Stage Move + [ 1, MoveId.FLING ], + [ 5, MoveId.FURY_SWIPES ], + [ 8, MoveId.LOW_KICK ], + [ 12, MoveId.SEISMIC_TOSS ], + [ 17, MoveId.SWAGGER ], + [ 22, MoveId.CROSS_CHOP ], + [ 26, MoveId.ASSURANCE ], + [ 30, MoveId.THRASH ], + [ 35, MoveId.RAGE_FIST ], + [ 39, MoveId.CLOSE_COMBAT ], + [ 44, MoveId.SCREECH ], + [ 48, MoveId.STOMPING_TANTRUM ], + [ 53, MoveId.OUTRAGE ], + [ 57, MoveId.FINAL_GAMBIT ], + ], + [SpeciesId.CLODSIRE]: [ + [ EVOLVE_MOVE, MoveId.AMNESIA ], + [ 1, MoveId.TACKLE ], // Previous Stage Move + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.POISON_STING ], + [ 4, MoveId.TOXIC_SPIKES ], + [ 8, MoveId.MUD_SHOT ], + [ 12, MoveId.POISON_TAIL ], + [ 16, MoveId.SLAM ], + [ 21, MoveId.YAWN ], + [ 24, MoveId.POISON_JAB ], + [ 30, MoveId.SLUDGE_WAVE ], + [ 36, MoveId.MEGAHORN ], + [ 40, MoveId.TOXIC ], + [ 48, MoveId.EARTHQUAKE ], + ], + [SpeciesId.FARIGIRAF]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.POWER_SWAP ], + [ 1, MoveId.GUARD_SWAP ], + [ 5, MoveId.CONFUSION ], + [ 10, MoveId.ASSURANCE ], + [ 14, MoveId.STOMP ], + [ 19, MoveId.PSYBEAM ], + [ 23, MoveId.AGILITY ], + [ 28, MoveId.DOUBLE_HIT ], + [ 32, MoveId.TWIN_BEAM ], + [ 37, MoveId.CRUNCH ], + [ 41, MoveId.BATON_PASS ], + [ 46, MoveId.NASTY_PLOT ], + [ 50, MoveId.PSYCHIC ], + ], + [SpeciesId.DUDUNSPARCE]: [ + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.TACKLE ], // Previous Stage Move, Custom + [ 4, MoveId.MUD_SLAP ], + [ 8, MoveId.ROLLOUT ], + [ 12, MoveId.GLARE ], + [ 16, MoveId.SCREECH ], + [ 20, MoveId.ANCIENT_POWER ], + [ 24, MoveId.DRILL_RUN ], + [ 28, MoveId.YAWN ], + [ 32, MoveId.HYPER_DRILL ], + [ 36, MoveId.ROOST ], + [ 40, MoveId.DRAGON_RUSH ], + [ 44, MoveId.COIL ], + [ 48, MoveId.DOUBLE_EDGE ], + [ 52, MoveId.ENDEAVOR ], + [ 56, MoveId.HURRICANE ], + [ 62, MoveId.BOOMBURST ], + ], + [SpeciesId.KINGAMBIT]: [ + [ EVOLVE_MOVE, MoveId.KOWTOW_CLEAVE ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.METAL_BURST ], + [ 15, MoveId.TORMENT ], + [ 20, MoveId.SCARY_FACE ], + [ 25, MoveId.ASSURANCE ], + [ 30, MoveId.METAL_SOUND ], + [ 35, MoveId.SLASH ], + [ 40, MoveId.NIGHT_SLASH ], + [ 45, MoveId.IRON_DEFENSE ], + [ 50, MoveId.RETALIATE ], + [ 57, MoveId.IRON_HEAD ], + [ 64, MoveId.SWORDS_DANCE ], + [ 71, MoveId.GUILLOTINE ], + ], + [SpeciesId.GREAT_TUSK]: [ + [ 1, MoveId.HORN_ATTACK ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.ROLLOUT ], + [ 1, MoveId.SUNNY_DAY ], + [ 7, MoveId.BULLDOZE ], + [ 14, MoveId.TAUNT ], + [ 21, MoveId.RAPID_SPIN ], + [ 28, MoveId.BRICK_BREAK ], + [ 35, MoveId.STOMPING_TANTRUM ], + [ 42, MoveId.KNOCK_OFF ], + [ 49, MoveId.EARTHQUAKE ], + [ 56, MoveId.GIGA_IMPACT ], + [ 63, MoveId.CLOSE_COMBAT ], + [ 70, MoveId.ENDEAVOR ], + [ 77, MoveId.MEGAHORN ], + [ 84, MoveId.HEAD_SMASH ], + [ 91, MoveId.HEADLONG_RUSH ], + ], + [SpeciesId.SCREAM_TAIL]: [ + [ RELEARN_MOVE, MoveId.SUNNY_DAY ], + [ 1, MoveId.POUND ], + [ 1, MoveId.SING ], + [ 1, MoveId.DISABLE ], + [ 7, MoveId.HOWL ], + [ 14, MoveId.NOBLE_ROAR ], + [ 21, MoveId.BITE ], + [ 28, MoveId.BODY_SLAM ], + [ 35, MoveId.REST ], + [ 42, MoveId.PLAY_ROUGH ], + [ 49, MoveId.HYPER_VOICE ], + [ 56, MoveId.PSYCHIC_FANGS ], + [ 63, MoveId.CRUNCH ], + [ 70, MoveId.WISH ], + [ 77, MoveId.GYRO_BALL ], + [ 84, MoveId.PERISH_SONG ], + [ 91, MoveId.BOOMBURST ], + ], + [SpeciesId.BRUTE_BONNET]: [ + [ RELEARN_MOVE, MoveId.SUNNY_DAY ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.ASTONISH ], + [ 7, MoveId.STUN_SPORE ], + [ 14, MoveId.MEGA_DRAIN ], + [ 21, MoveId.SYNTHESIS ], + [ 28, MoveId.CLEAR_SMOG ], + [ 35, MoveId.PAYBACK ], + [ 42, MoveId.THRASH ], + [ 49, MoveId.GIGA_DRAIN ], + [ 56, MoveId.SUCKER_PUNCH ], + [ 63, MoveId.SPORE ], + [ 70, MoveId.INGRAIN ], + [ 77, MoveId.RAGE_POWDER ], + [ 91, MoveId.SOLAR_BEAM ], + ], + [SpeciesId.FLUTTER_MANE]: [ + [ RELEARN_MOVE, MoveId.SUNNY_DAY ], + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.SPITE ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.PSYBEAM ], // Custom, moved from 7 to 1 + [ 14, MoveId.MEAN_LOOK ], + [ 21, MoveId.MEMENTO ], + [ 28, MoveId.WISH ], + [ 35, MoveId.DAZZLING_GLEAM ], + [ 42, MoveId.SHADOW_BALL ], + [ 49, MoveId.MYSTICAL_FIRE ], + [ 56, MoveId.POWER_GEM ], + [ 63, MoveId.PSYSHOCK ], + [ 70, MoveId.PHANTOM_FORCE ], + [ 77, MoveId.PAIN_SPLIT ], + [ 84, MoveId.MOONBLAST ], + [ 91, MoveId.PERISH_SONG ], + ], + [SpeciesId.SLITHER_WING]: [ + [ RELEARN_MOVE, MoveId.SUNNY_DAY ], + [ 1, MoveId.GUST ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.BUG_BITE ], + [ 7, MoveId.POISON_POWDER ], + [ 7, MoveId.STUN_SPORE ], + [ 14, MoveId.FLAME_CHARGE ], + [ 21, MoveId.STOMP ], + [ 28, MoveId.LOW_SWEEP ], + [ 35, MoveId.MORNING_SUN ], + [ 42, MoveId.LUNGE ], + [ 49, MoveId.SUPERPOWER ], + [ 56, MoveId.BULK_UP ], + [ 63, MoveId.DUAL_WINGBEAT ], + [ 70, MoveId.FIRST_IMPRESSION ], + [ 77, MoveId.WHIRLWIND ], + [ 84, MoveId.LEECH_LIFE ], + [ 91, MoveId.THRASH ], + ], + [SpeciesId.SANDY_SHOCKS]: [ + [ RELEARN_MOVE, MoveId.SUNNY_DAY ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.ELECTRIC_TERRAIN ], + [ 7, MoveId.SPARK ], + [ 14, MoveId.BULLDOZE ], + [ 21, MoveId.CHARGE_BEAM ], + [ 28, MoveId.TRI_ATTACK ], + [ 35, MoveId.SCREECH ], + [ 42, MoveId.HEAVY_SLAM ], + [ 49, MoveId.METAL_SOUND ], + [ 56, MoveId.DISCHARGE ], + [ 63, MoveId.EARTH_POWER ], + [ 70, MoveId.MIRROR_COAT ], + [ 77, MoveId.GRAVITY ], + [ 84, MoveId.ZAP_CANNON ], + [ 91, MoveId.MAGNETIC_FLUX ], + ], + [SpeciesId.IRON_TREADS]: [ + [ 1, MoveId.HORN_ATTACK ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.ROLLOUT ], + [ 1, MoveId.ELECTRIC_TERRAIN ], + [ 7, MoveId.BULLDOZE ], + [ 21, MoveId.RAPID_SPIN ], + [ 28, MoveId.IRON_HEAD ], + [ 35, MoveId.STOMPING_TANTRUM ], + [ 42, MoveId.KNOCK_OFF ], + [ 49, MoveId.EARTHQUAKE ], + [ 56, MoveId.HEAVY_SLAM ], + [ 63, MoveId.WILD_CHARGE ], + [ 70, MoveId.ENDEAVOR ], + [ 77, MoveId.MEGAHORN ], + [ 84, MoveId.GIGA_IMPACT ], + [ 91, MoveId.STEEL_ROLLER ], + ], + [SpeciesId.IRON_BUNDLE]: [ + [ RELEARN_MOVE, MoveId.ELECTRIC_TERRAIN ], + [ 1, MoveId.PRESENT ], + [ 1, MoveId.WATER_GUN ], // Custom + [ 7, MoveId.POWDER_SNOW ], + [ 14, MoveId.WHIRLPOOL ], + [ 21, MoveId.TAKE_DOWN ], + [ 28, MoveId.DRILL_PECK ], + [ 35, MoveId.HELPING_HAND ], + [ 42, MoveId.FREEZE_DRY ], + [ 49, MoveId.FLIP_TURN ], + [ 56, MoveId.ICE_BEAM ], + [ 63, MoveId.AGILITY ], + [ 70, MoveId.SNOWSCAPE ], + [ 77, MoveId.HYDRO_PUMP ], + [ 84, MoveId.AURORA_VEIL ], + [ 91, MoveId.BLIZZARD ], + ], + [SpeciesId.IRON_HANDS]: [ + [ RELEARN_MOVE, MoveId.ELECTRIC_TERRAIN ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.ARM_THRUST ], + [ 7, MoveId.FAKE_OUT ], + [ 14, MoveId.WHIRLWIND ], + [ 21, MoveId.THUNDER_PUNCH ], + [ 28, MoveId.SLAM ], + [ 35, MoveId.FORCE_PALM ], + [ 42, MoveId.SEISMIC_TOSS ], + [ 49, MoveId.CHARGE ], + [ 56, MoveId.WILD_CHARGE ], + [ 63, MoveId.CLOSE_COMBAT ], + [ 70, MoveId.DETECT ], + [ 77, MoveId.HEAVY_SLAM ], + [ 84, MoveId.BELLY_DRUM ], + [ 91, MoveId.FOCUS_PUNCH ], + ], + [SpeciesId.IRON_JUGULIS]: [ + [ RELEARN_MOVE, MoveId.ELECTRIC_TERRAIN ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.TRI_ATTACK ], + [ 1, MoveId.AIR_CUTTER ], + [ 1, MoveId.WORK_UP ], + [ 1, MoveId.ELECTRIC_TERRAIN ], + [ 7, MoveId.ROAR ], + [ 14, MoveId.ASSURANCE ], + [ 21, MoveId.DRAGON_BREATH ], + [ 28, MoveId.SNARL ], + [ 35, MoveId.CRUNCH ], + [ 42, MoveId.HYPER_VOICE ], + [ 56, MoveId.AIR_SLASH ], + [ 63, MoveId.KNOCK_OFF ], + [ 70, MoveId.DARK_PULSE ], + [ 77, MoveId.OUTRAGE ], + [ 84, MoveId.DRAGON_PULSE ], + [ 91, MoveId.HYPER_BEAM ], + ], + [SpeciesId.IRON_MOTH]: [ + [ RELEARN_MOVE, MoveId.ELECTRIC_TERRAIN ], + [ 1, MoveId.GUST ], + [ 1, MoveId.WHIRLWIND ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.ACID_SPRAY ], + [ 7, MoveId.STRUGGLE_BUG ], + [ 14, MoveId.FIRE_SPIN ], + [ 21, MoveId.TAKE_DOWN ], + [ 28, MoveId.LUNGE ], + [ 35, MoveId.SCREECH ], + [ 42, MoveId.DISCHARGE ], + [ 49, MoveId.SLUDGE_WAVE ], + [ 56, MoveId.FIERY_DANCE ], + [ 63, MoveId.METAL_SOUND ], + [ 70, MoveId.MORNING_SUN ], + [ 77, MoveId.HURRICANE ], + [ 84, MoveId.BUG_BUZZ ], + [ 91, MoveId.OVERHEAT ], + ], + [SpeciesId.IRON_THORNS]: [ + [ RELEARN_MOVE, MoveId.ELECTRIC_TERRAIN ], + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.IRON_DEFENSE ], + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.FIRE_FANG ], + [ 7, MoveId.SCREECH ], + [ 21, MoveId.ROCK_TOMB ], + [ 28, MoveId.BITE ], + [ 35, MoveId.CHARGE ], + [ 42, MoveId.ROCK_SLIDE ], + [ 49, MoveId.SANDSTORM ], + [ 56, MoveId.WILD_CHARGE ], + [ 63, MoveId.PIN_MISSILE ], + [ 70, MoveId.EARTHQUAKE ], + [ 77, MoveId.STEALTH_ROCK ], + [ 84, MoveId.STONE_EDGE ], + [ 91, MoveId.GIGA_IMPACT ], + ], + [SpeciesId.FRIGIBAX]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.DRAGON_TAIL ], + [ 6, MoveId.ICY_WIND ], + [ 12, MoveId.DRAGON_BREATH ], + [ 18, MoveId.FOCUS_ENERGY ], + [ 24, MoveId.BITE ], + [ 29, MoveId.ICE_FANG ], + [ 32, MoveId.DRAGON_CLAW ], + [ 36, MoveId.TAKE_DOWN ], + [ 40, MoveId.ICE_BEAM ], + [ 44, MoveId.CRUNCH ], + [ 48, MoveId.ICICLE_CRASH ], + ], + [SpeciesId.ARCTIBAX]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.DRAGON_TAIL ], + [ 6, MoveId.ICY_WIND ], + [ 12, MoveId.DRAGON_BREATH ], + [ 18, MoveId.FOCUS_ENERGY ], + [ 24, MoveId.BITE ], + [ 29, MoveId.ICE_FANG ], + [ 32, MoveId.DRAGON_CLAW ], // Previous Stage Move, Frigibax Level + [ 40, MoveId.TAKE_DOWN ], + [ 45, MoveId.ICE_BEAM ], + [ 50, MoveId.CRUNCH ], + [ 55, MoveId.ICICLE_CRASH ], + ], + [SpeciesId.BAXCALIBUR]: [ + [ EVOLVE_MOVE, MoveId.GLAIVE_RUSH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.ICE_SHARD ], + [ 1, MoveId.DRAGON_TAIL ], + [ 1, MoveId.BREAKING_SWIPE ], + [ 1, MoveId.SNOWSCAPE ], + [ 6, MoveId.ICY_WIND ], + [ 12, MoveId.DRAGON_BREATH ], + [ 18, MoveId.FOCUS_ENERGY ], + [ 24, MoveId.BITE ], + [ 29, MoveId.ICE_FANG ], + [ 35, MoveId.DRAGON_CLAW ], + [ 42, MoveId.TAKE_DOWN ], + [ 48, MoveId.ICE_BEAM ], + [ 55, MoveId.CRUNCH ], + [ 62, MoveId.ICICLE_CRASH ], + ], + [SpeciesId.GIMMIGHOUL]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.ASTONISH ], + ], + [SpeciesId.GHOLDENGO]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.ASTONISH ], + [ 7, MoveId.NIGHT_SHADE ], + [ 14, MoveId.CONFUSE_RAY ], + [ 21, MoveId.SUBSTITUTE ], + [ 28, MoveId.METAL_SOUND ], + [ 35, MoveId.SHADOW_BALL ], + [ 42, MoveId.RECOVER ], + [ 49, MoveId.POWER_GEM ], + [ 56, MoveId.MAKE_IT_RAIN ], + [ 63, MoveId.NASTY_PLOT ], + [ 70, MoveId.MEMENTO ], + ], + [SpeciesId.WO_CHIEN]: [ + [ 1, MoveId.ABSORB ], + [ 1, MoveId.SPITE ], + [ 1, MoveId.MEAN_LOOK ], + [ 5, MoveId.TICKLE ], + [ 10, MoveId.PAYBACK ], + [ 15, MoveId.POISON_POWDER ], + [ 15, MoveId.STUN_SPORE ], + [ 20, MoveId.MEGA_DRAIN ], + [ 25, MoveId.LEECH_SEED ], + [ 30, MoveId.GROWTH ], + [ 35, MoveId.INGRAIN ], + [ 40, MoveId.DARK_PULSE ], + [ 45, MoveId.GIGA_DRAIN ], + [ 50, MoveId.RUINATION ], + [ 55, MoveId.FOUL_PLAY ], + [ 60, MoveId.POWER_WHIP ], + [ 65, MoveId.GRASSY_TERRAIN ], + [ 70, MoveId.KNOCK_OFF ], + [ 75, MoveId.LEAF_STORM ], + ], + [SpeciesId.CHIEN_PAO]: [ + [ 1, MoveId.SPITE ], + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.MEAN_LOOK ], + [ 5, MoveId.ICY_WIND ], + [ 10, MoveId.PAYBACK ], + [ 15, MoveId.MIST ], + [ 15, MoveId.HAZE ], + [ 20, MoveId.ICE_SHARD ], + [ 25, MoveId.SWORDS_DANCE ], + [ 30, MoveId.SNOWSCAPE ], + [ 35, MoveId.NIGHT_SLASH ], + [ 40, MoveId.DARK_PULSE ], + [ 45, MoveId.ICICLE_CRASH ], + [ 50, MoveId.RUINATION ], + [ 55, MoveId.SUCKER_PUNCH ], + [ 60, MoveId.SACRED_SWORD ], + [ 65, MoveId.RECOVER ], + [ 70, MoveId.THROAT_CHOP ], + [ 75, MoveId.SHEER_COLD ], + ], + [SpeciesId.TING_LU]: [ + [ 1, MoveId.SPITE ], + [ 1, MoveId.MEAN_LOOK ], + [ 1, MoveId.SAND_TOMB ], + [ 5, MoveId.SPIKES ], + [ 10, MoveId.PAYBACK ], + [ 15, MoveId.STOMP ], + [ 20, MoveId.BULLDOZE ], + [ 25, MoveId.WHIRLWIND ], + [ 30, MoveId.TAUNT ], + [ 35, MoveId.THRASH ], + [ 40, MoveId.DARK_PULSE ], + [ 45, MoveId.STOMPING_TANTRUM ], + [ 50, MoveId.RUINATION ], + [ 55, MoveId.THROAT_CHOP ], + [ 60, MoveId.ROCK_SLIDE ], + [ 65, MoveId.MEMENTO ], + [ 70, MoveId.EARTHQUAKE ], + [ 75, MoveId.FISSURE ], + ], + [SpeciesId.CHI_YU]: [ + [ 1, MoveId.EMBER ], + [ 1, MoveId.SPITE ], + [ 1, MoveId.MEAN_LOOK ], + [ 5, MoveId.FLAME_WHEEL ], + [ 10, MoveId.PAYBACK ], + [ 15, MoveId.WILL_O_WISP ], + [ 20, MoveId.FLAME_CHARGE ], + [ 25, MoveId.INCINERATE ], + [ 30, MoveId.CONFUSE_RAY ], + [ 35, MoveId.NASTY_PLOT ], + [ 40, MoveId.DARK_PULSE ], + [ 45, MoveId.LAVA_PLUME ], + [ 50, MoveId.RUINATION ], + [ 55, MoveId.BOUNCE ], + [ 60, MoveId.SWAGGER ], + [ 65, MoveId.INFERNO ], + [ 70, MoveId.MEMENTO ], + [ 75, MoveId.OVERHEAT ], + ], + [SpeciesId.ROARING_MOON]: [ + [ RELEARN_MOVE, MoveId.SUNNY_DAY ], + [ RELEARN_MOVE, MoveId.JAW_LOCK ], + [ RELEARN_MOVE, MoveId.BREAKING_SWIPE ], + [ RELEARN_MOVE, MoveId.SCALE_SHOT ], + [ 1, MoveId.LEER ], + [ 1, MoveId.BITE ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.DRAGON_BREATH ], + [ 7, MoveId.INCINERATE ], + [ 14, MoveId.HEADBUTT ], + [ 21, MoveId.SCARY_FACE ], + [ 28, MoveId.DRAGON_CLAW ], + [ 35, MoveId.ZEN_HEADBUTT ], + [ 42, MoveId.FLAMETHROWER ], + [ 49, MoveId.NIGHT_SLASH ], + [ 56, MoveId.DRAGON_DANCE ], + [ 63, MoveId.DRAGON_RUSH ], + [ 70, MoveId.FLY ], + [ 77, MoveId.THROAT_CHOP ], + [ 84, MoveId.ROOST ], + [ 91, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.IRON_VALIANT]: [ + [ RELEARN_MOVE, MoveId.ELECTRIC_TERRAIN ], + [ 1, MoveId.DISABLE ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.SHADOW_SNEAK ], + [ 7, MoveId.HYPNOSIS ], + [ 14, MoveId.FEINT ], + [ 21, MoveId.FUTURE_SIGHT ], + [ 28, MoveId.DAZZLING_GLEAM ], + [ 35, MoveId.PSYCHO_CUT ], + [ 42, MoveId.NIGHT_SLASH ], + [ 49, MoveId.LEAF_BLADE ], + [ 56, MoveId.MOONBLAST ], + [ 63, MoveId.CLOSE_COMBAT ], + [ 70, MoveId.KNOCK_OFF ], + [ 77, MoveId.DESTINY_BOND ], + [ 84, MoveId.WIDE_GUARD ], + [ 84, MoveId.QUICK_GUARD ], + [ 91, MoveId.SPIRIT_BREAK ], + ], + [SpeciesId.KORAIDON]: [ + [ 1, MoveId.SUNNY_DAY ], + [ 1, MoveId.BREAKING_SWIPE ], + [ 7, MoveId.ROCK_SMASH ], + [ 14, MoveId.ANCIENT_POWER ], + [ 21, MoveId.DRAIN_PUNCH ], + [ 28, MoveId.BRICK_BREAK ], + [ 35, MoveId.AGILITY ], + [ 42, MoveId.DRAGON_CLAW ], + [ 49, MoveId.FLAMETHROWER ], + [ 56, MoveId.COLLISION_COURSE ], + [ 63, MoveId.SCREECH ], + [ 70, MoveId.COUNTER ], + [ 77, MoveId.OUTRAGE ], + [ 84, MoveId.CLOSE_COMBAT ], + [ 91, MoveId.FLARE_BLITZ ], + [ 98, MoveId.GIGA_IMPACT ], + ], + [SpeciesId.MIRAIDON]: [ + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.ELECTRIC_TERRAIN ], + [ 7, MoveId.SHOCK_WAVE ], + [ 14, MoveId.CHARGE ], + [ 21, MoveId.PARABOLIC_CHARGE ], + [ 28, MoveId.DISCHARGE ], + [ 35, MoveId.AGILITY ], + [ 42, MoveId.DRAGON_PULSE ], + [ 56, MoveId.ELECTRO_DRIFT ], + [ 63, MoveId.METAL_SOUND ], + [ 70, MoveId.MIRROR_COAT ], + [ 77, MoveId.OUTRAGE ], + [ 84, MoveId.THUNDER ], + [ 91, MoveId.OVERHEAT ], + [ 98, MoveId.HYPER_BEAM ], + ], + [SpeciesId.WALKING_WAKE]: [ + [ RELEARN_MOVE, MoveId.SUNNY_DAY ], + [ RELEARN_MOVE, MoveId.HONE_CLAWS ], + [ 1, MoveId.LEER ], + [ 1, MoveId.ROAR ], + [ 1, MoveId.TWISTER ], + [ 1, MoveId.AQUA_JET ], + [ 7, MoveId.BITE ], + [ 14, MoveId.WATER_PULSE ], + [ 21, MoveId.NOBLE_ROAR ], + [ 28, MoveId.DRAGON_BREATH ], + [ 35, MoveId.BREAKING_SWIPE ], + [ 42, MoveId.DRAGON_RUSH ], + [ 56, MoveId.HYDRO_STEAM ], + [ 63, MoveId.DRAGON_PULSE ], + [ 70, MoveId.OUTRAGE ], + [ 77, MoveId.FLAMETHROWER ], + [ 84, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.IRON_LEAVES]: [ + [ RELEARN_MOVE, MoveId.ELECTRIC_TERRAIN ], + [ RELEARN_MOVE, MoveId.QUASH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.WORK_UP ], + [ 7, MoveId.MAGICAL_LEAF ], + [ 14, MoveId.RETALIATE ], + [ 21, MoveId.QUICK_GUARD ], + [ 28, MoveId.NIGHT_SLASH ], + [ 35, MoveId.SWORDS_DANCE ], + [ 42, MoveId.SACRED_SWORD ], + [ 49, MoveId.LEAF_BLADE ], + [ 56, MoveId.PSYBLADE ], + [ 63, MoveId.CLOSE_COMBAT ], + [ 70, MoveId.IMPRISON ], + [ 77, MoveId.MEGAHORN ], + [ 84, MoveId.ALLY_SWITCH ], + [ 91, MoveId.SOLAR_BLADE ], + ], + [SpeciesId.DIPPLIN]: [ + [ EVOLVE_MOVE, MoveId.DOUBLE_HIT ], + [ RELEARN_MOVE, MoveId.DRAGON_CHEER ], // Custom + [ 1, MoveId.LEAFAGE ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.RECYCLE ], + [ 1, MoveId.ASTONISH ], + [ 4, MoveId.DRAGON_TAIL ], + [ 8, MoveId.GROWTH ], + [ 12, MoveId.DRAGON_BREATH ], + [ 16, MoveId.PROTECT ], + [ 20, MoveId.BULLET_SEED ], + [ 28, MoveId.SYRUP_BOMB ], + [ 32, MoveId.DRAGON_PULSE ], + [ 36, MoveId.RECOVER ], + [ 40, MoveId.ENERGY_BALL ], + [ 44, MoveId.SUBSTITUTE ], + ], + [SpeciesId.POLTCHAGEIST]: [ + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.ASTONISH ], + [ 5, MoveId.ABSORB ], // Custom, Moved from Level 6 to 5 + [ 12, MoveId.LIFE_DEW ], + [ 18, MoveId.FOUL_PLAY ], + [ 24, MoveId.MEGA_DRAIN ], + [ 30, MoveId.HEX ], + [ 36, MoveId.RAGE_POWDER ], + [ 42, MoveId.GIGA_DRAIN ], + [ 48, MoveId.SHADOW_BALL ], + [ 54, MoveId.MEMENTO ], + [ 60, MoveId.LEAF_STORM ], + ], + [SpeciesId.SINISTCHA]: [ + [ EVOLVE_MOVE, MoveId.MATCHA_GOTCHA ], + [ RELEARN_MOVE, MoveId.GIGA_DRAIN ], // Previous Stage Move + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.ASTONISH ], + [ 6, MoveId.ABSORB ], + [ 12, MoveId.LIFE_DEW ], + [ 18, MoveId.FOUL_PLAY ], + [ 24, MoveId.MEGA_DRAIN ], + [ 30, MoveId.HEX ], + [ 36, MoveId.RAGE_POWDER ], + [ 42, MoveId.STRENGTH_SAP ], + [ 48, MoveId.SHADOW_BALL ], + [ 54, MoveId.MEMENTO ], + [ 60, MoveId.LEAF_STORM ], + ], + [SpeciesId.OKIDOGI]: [ + [ 1, MoveId.BITE ], + [ 1, MoveId.LOW_KICK ], + [ 1, MoveId.BULK_UP ], + [ 8, MoveId.HOWL ], + [ 16, MoveId.POISON_FANG ], + [ 24, MoveId.FORCE_PALM ], + [ 32, MoveId.COUNTER ], + [ 40, MoveId.POISON_JAB ], + [ 48, MoveId.BRUTAL_SWING ], + [ 56, MoveId.CRUNCH ], + [ 64, MoveId.SUPERPOWER ], + [ 72, MoveId.GIGA_IMPACT ], + ], + [SpeciesId.MUNKIDORI]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.FLATTER ], + [ 8, MoveId.HELPING_HAND ], + [ 16, MoveId.PSYBEAM ], + [ 24, MoveId.CLEAR_SMOG ], + [ 32, MoveId.POISON_JAB ], + [ 40, MoveId.PSYCHIC ], + [ 48, MoveId.SLUDGE_WAVE ], + [ 56, MoveId.NASTY_PLOT ], + [ 64, MoveId.FUTURE_SIGHT ], + [ 72, MoveId.PARTING_SHOT ], + ], + [SpeciesId.FEZANDIPITI]: [ + [ 1, MoveId.DOUBLE_KICK ], + [ 1, MoveId.PECK ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.DISARMING_VOICE ], + [ 8, MoveId.QUICK_ATTACK ], + [ 16, MoveId.ATTRACT ], + [ 24, MoveId.WING_ATTACK ], + [ 32, MoveId.CROSS_POISON ], + [ 40, MoveId.TAIL_SLAP ], + [ 48, MoveId.BEAT_UP ], + [ 56, MoveId.SWAGGER ], + [ 56, MoveId.FLATTER ], + [ 64, MoveId.ROOST ], + [ 72, MoveId.MOONBLAST ], + ], + [SpeciesId.OGERPON]: [ + [ RELEARN_MOVE, MoveId.DOUBLE_KICK ], + [ RELEARN_MOVE, MoveId.COUNTER ], + [ RELEARN_MOVE, MoveId.RETALIATE ], + [ RELEARN_MOVE, MoveId.HORN_LEECH ], + [ 1, MoveId.VINE_WHIP ], + [ 1, MoveId.LEECH_SEED ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.FOLLOW_ME ], + [ 6, MoveId.FOCUS_ENERGY ], + [ 12, MoveId.GROWTH ], + [ 18, MoveId.SLAM ], + [ 24, MoveId.LOW_SWEEP ], + [ 30, MoveId.IVY_CUDGEL ], + [ 36, MoveId.THROAT_CHOP ], + [ 42, MoveId.SYNTHESIS ], + [ 48, MoveId.SPIKY_SHIELD ], + [ 54, MoveId.POWER_WHIP ], + [ 60, MoveId.SUPERPOWER ], + [ 66, MoveId.WOOD_HAMMER ], + ], + [SpeciesId.ARCHALUDON]: [ + [ EVOLVE_MOVE, MoveId.ELECTRO_SHOT ], + [ RELEARN_MOVE, MoveId.LASER_FOCUS ], // Previous Stage Move + [ 1, MoveId.LEER ], + [ 1, MoveId.METAL_CLAW ], + [ 6, MoveId.ROCK_SMASH ], + [ 12, MoveId.HONE_CLAWS ], + [ 18, MoveId.METAL_SOUND ], + [ 24, MoveId.BREAKING_SWIPE ], + [ 30, MoveId.DRAGON_TAIL ], + [ 36, MoveId.IRON_DEFENSE ], + [ 42, MoveId.FOCUS_ENERGY ], + [ 48, MoveId.DRAGON_CLAW ], + [ 54, MoveId.FLASH_CANNON ], + [ 60, MoveId.METAL_BURST ], + [ 66, MoveId.HYPER_BEAM ], + ], + [SpeciesId.HYDRAPPLE]: [ + [ EVOLVE_MOVE, MoveId.FICKLE_BEAM ], + [ RELEARN_MOVE, MoveId.YAWN ], + [ RELEARN_MOVE, MoveId.DOUBLE_HIT ], + [ RELEARN_MOVE, MoveId.INFESTATION ], + [ RELEARN_MOVE, MoveId.DRAGON_CHEER ], // Previous Stage Move, Custom + [ 1, MoveId.LEAFAGE ], // Previous Stage Move, Custom + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.RECYCLE ], + [ 1, MoveId.ASTONISH ], + [ 4, MoveId.DRAGON_TAIL ], + [ 8, MoveId.GROWTH ], + [ 12, MoveId.DRAGON_BREATH ], + [ 16, MoveId.PROTECT ], + [ 20, MoveId.BULLET_SEED ], + [ 28, MoveId.SYRUP_BOMB ], + [ 32, MoveId.DRAGON_PULSE ], + [ 36, MoveId.RECOVER ], + [ 40, MoveId.ENERGY_BALL ], + [ 44, MoveId.SUBSTITUTE ], + [ 54, MoveId.POWER_WHIP ], + ], + [SpeciesId.GOUGING_FIRE]: [ + [ RELEARN_MOVE, MoveId.DOUBLE_KICK ], + [ RELEARN_MOVE, MoveId.ANCIENT_POWER ], + [ RELEARN_MOVE, MoveId.NOBLE_ROAR ], + [ 1, MoveId.STOMP ], + [ 1, MoveId.LEER ], + [ 1, MoveId.INCINERATE ], + [ 1, MoveId.SUNNY_DAY ], + [ 7, MoveId.FIRE_FANG ], + [ 14, MoveId.HOWL ], + [ 21, MoveId.BITE ], + [ 28, MoveId.DRAGON_CLAW ], + [ 35, MoveId.CRUSH_CLAW ], + [ 42, MoveId.MORNING_SUN ], + [ 49, MoveId.BURNING_BULWARK ], + [ 56, MoveId.DRAGON_RUSH ], + [ 63, MoveId.FIRE_BLAST ], + [ 70, MoveId.LAVA_PLUME ], + [ 77, MoveId.OUTRAGE ], + [ 84, MoveId.FLARE_BLITZ ], + [ 91, MoveId.RAGING_FURY ], + ], + [SpeciesId.RAGING_BOLT]: [ + [ RELEARN_MOVE, MoveId.ANCIENT_POWER ], + [ 1, MoveId.TWISTER ], + [ 1, MoveId.SUNNY_DAY ], + [ 1, MoveId.SHOCK_WAVE ], + [ 1, MoveId.STOMP ], + [ 7, MoveId.CHARGE ], + [ 14, MoveId.DRAGON_BREATH ], + [ 21, MoveId.ELECTRIC_TERRAIN ], + [ 28, MoveId.DISCHARGE ], + [ 35, MoveId.DRAGON_TAIL ], + [ 42, MoveId.CALM_MIND ], + [ 49, MoveId.THUNDERCLAP ], + [ 56, MoveId.DRAGON_HAMMER ], + [ 63, MoveId.RISING_VOLTAGE ], + [ 70, MoveId.DRAGON_PULSE ], + [ 77, MoveId.ZAP_CANNON ], + [ 84, MoveId.BODY_PRESS ], + [ 91, MoveId.THUNDER ], + ], + [SpeciesId.IRON_BOULDER]: [ + [ 1, MoveId.HORN_ATTACK ], + [ 1, MoveId.LEER ], + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.ELECTRIC_TERRAIN ], + [ 7, MoveId.QUICK_ATTACK ], + [ 14, MoveId.SLASH ], + [ 21, MoveId.AGILITY ], + [ 28, MoveId.PSYCHO_CUT ], + [ 35, MoveId.COUNTER ], + [ 42, MoveId.ROCK_TOMB ], + [ 49, MoveId.SACRED_SWORD ], + [ 56, MoveId.MIGHTY_CLEAVE ], + [ 63, MoveId.SWORDS_DANCE ], + [ 70, MoveId.MEGAHORN ], + [ 77, MoveId.QUICK_GUARD ], + [ 84, MoveId.STONE_EDGE ], + [ 91, MoveId.GIGA_IMPACT ], + ], + [SpeciesId.IRON_CROWN]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.ELECTRIC_TERRAIN ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.METAL_CLAW ], + [ 7, MoveId.SMART_STRIKE ], + [ 14, MoveId.SLASH ], + [ 21, MoveId.IRON_DEFENSE ], + [ 28, MoveId.PSYSHOCK ], + [ 35, MoveId.PSYCHO_CUT ], + [ 42, MoveId.FLASH_CANNON ], + [ 49, MoveId.SACRED_SWORD ], + [ 56, MoveId.TACHYON_CUTTER ], + [ 63, MoveId.FUTURE_SIGHT ], + [ 70, MoveId.VOLT_SWITCH ], + [ 77, MoveId.QUICK_GUARD ], + [ 84, MoveId.METAL_BURST ], + [ 91, MoveId.HYPER_BEAM ], + ], + [SpeciesId.TERAPAGOS]: [ + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.TRI_ATTACK ], + [ 1, MoveId.RAPID_SPIN ], + [ 10, MoveId.ANCIENT_POWER ], + [ 20, MoveId.HEADBUTT ], + [ 30, MoveId.PROTECT ], + [ 40, MoveId.EARTH_POWER ], + [ 50, MoveId.HEAVY_SLAM ], + [ 60, MoveId.TERA_STARSTORM ], + [ 70, MoveId.DOUBLE_EDGE ], + [ 80, MoveId.ROCK_POLISH ], + [ 90, MoveId.GYRO_BALL ], + ], + [SpeciesId.PECHARUNT]: [ + [ RELEARN_MOVE, MoveId.DEFENSE_CURL ], + [ RELEARN_MOVE, MoveId.ROLLOUT ], + [ RELEARN_MOVE, MoveId.MEAN_LOOK ], + [ 1, MoveId.SMOG ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.MEMENTO ], + [ 1, MoveId.ASTONISH ], + [ 8, MoveId.WITHDRAW ], + [ 16, MoveId.DESTINY_BOND ], + [ 24, MoveId.FAKE_TEARS ], + [ 32, MoveId.PARTING_SHOT ], + [ 40, MoveId.SHADOW_BALL ], + [ 48, MoveId.MALIGNANT_CHAIN ], + [ 56, MoveId.TOXIC ], + [ 64, MoveId.NASTY_PLOT ], + [ 72, MoveId.RECOVER ], + ], + [SpeciesId.ALOLA_RATTATA]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 4, MoveId.QUICK_ATTACK ], + [ 7, MoveId.FOCUS_ENERGY ], + [ 10, MoveId.BITE ], + [ 13, MoveId.PURSUIT ], + [ 16, MoveId.HYPER_FANG ], + [ 19, MoveId.ASSURANCE ], + [ 22, MoveId.CRUNCH ], + [ 25, MoveId.SUCKER_PUNCH ], + [ 28, MoveId.SUPER_FANG ], + [ 31, MoveId.DOUBLE_EDGE ], + [ 34, MoveId.ENDEAVOR ], + ], + [SpeciesId.ALOLA_RATICATE]: [ + [ EVOLVE_MOVE, MoveId.SCARY_FACE ], + [ 1, MoveId.SWORDS_DANCE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 10, MoveId.BITE ], + [ 13, MoveId.PURSUIT ], + [ 16, MoveId.HYPER_FANG ], + [ 19, MoveId.ASSURANCE ], + [ 24, MoveId.CRUNCH ], + [ 29, MoveId.SUCKER_PUNCH ], + [ 34, MoveId.SUPER_FANG ], + [ 39, MoveId.DOUBLE_EDGE ], + [ 44, MoveId.ENDEAVOR ], + ], + [SpeciesId.ALOLA_RAICHU]: [ + [ EVOLVE_MOVE, MoveId.PSYCHIC ], + [ EVOLVE_MOVE, MoveId.ZIPPY_ZAP ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.THUNDER ], + [ 1, MoveId.AGILITY ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.LIGHT_SCREEN ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.SPARK ], + [ 1, MoveId.IRON_TAIL ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.DISCHARGE ], + [ 1, MoveId.ELECTRO_BALL ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.NUZZLE ], + [ 5, MoveId.THUNDERBOLT ], + [ 50, MoveId.PIKA_PAPOW ], + ], + [SpeciesId.ALOLA_SANDSHREW]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.DEFENSE_CURL ], + [ 3, MoveId.MIST ], + [ 6, MoveId.POWDER_SNOW ], + [ 9, MoveId.ROLLOUT ], + [ 12, MoveId.FURY_CUTTER ], + [ 15, MoveId.RAPID_SPIN ], + [ 18, MoveId.METAL_CLAW ], + [ 21, MoveId.SWIFT ], + [ 24, MoveId.FURY_SWIPES ], + [ 27, MoveId.IRON_DEFENSE ], + [ 30, MoveId.SLASH ], + [ 33, MoveId.IRON_HEAD ], + [ 36, MoveId.GYRO_BALL ], + [ 39, MoveId.SWORDS_DANCE ], + [ 42, MoveId.SNOWSCAPE ], + [ 45, MoveId.BLIZZARD ], + ], + [SpeciesId.ALOLA_SANDSLASH]: [ + [ EVOLVE_MOVE, MoveId.ICICLE_SPEAR ], + [ RELEARN_MOVE, MoveId.SCRATCH ], + [ RELEARN_MOVE, MoveId.MIST ], + [ RELEARN_MOVE, MoveId.BLIZZARD ], + [ RELEARN_MOVE, MoveId.DEFENSE_CURL ], + [ RELEARN_MOVE, MoveId.SWIFT ], + [ RELEARN_MOVE, MoveId.FURY_SWIPES ], + [ RELEARN_MOVE, MoveId.POWDER_SNOW ], + [ RELEARN_MOVE, MoveId.ROLLOUT ], + [ RELEARN_MOVE, MoveId.FURY_CUTTER ], + [ RELEARN_MOVE, MoveId.RAPID_SPIN ], + [ RELEARN_MOVE, MoveId.IRON_DEFENSE ], + [ RELEARN_MOVE, MoveId.GYRO_BALL ], + [ RELEARN_MOVE, MoveId.METAL_BURST ], + [ RELEARN_MOVE, MoveId.IRON_HEAD ], + [ RELEARN_MOVE, MoveId.SNOWSCAPE ], + [ 1, MoveId.ICICLE_CRASH ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.SLASH ], + [ 1, MoveId.SWORDS_DANCE ], + [ 1, MoveId.ICE_BALL ], + ], + [SpeciesId.ALOLA_VULPIX]: [ + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.POWDER_SNOW ], + [ 4, MoveId.DISABLE ], + [ 8, MoveId.ICE_SHARD ], + [ 12, MoveId.SPITE ], + [ 16, MoveId.ICY_WIND ], + [ 20, MoveId.CONFUSE_RAY ], + [ 24, MoveId.AURORA_BEAM ], + [ 28, MoveId.EXTRASENSORY ], + [ 32, MoveId.ICE_BEAM ], + [ 36, MoveId.IMPRISON ], + [ 40, MoveId.MIST ], + [ 44, MoveId.AURORA_VEIL ], + [ 48, MoveId.FREEZE_DRY ], + [ 52, MoveId.BLIZZARD ], + ], + [SpeciesId.ALOLA_NINETALES]: [ + [ EVOLVE_MOVE, MoveId.DAZZLING_GLEAM ], + [ RELEARN_MOVE, MoveId.DISABLE ], + [ RELEARN_MOVE, MoveId.MIST ], + [ RELEARN_MOVE, MoveId.ICE_BEAM ], + [ RELEARN_MOVE, MoveId.AURORA_BEAM ], + [ RELEARN_MOVE, MoveId.CONFUSE_RAY ], + [ RELEARN_MOVE, MoveId.SPITE ], + [ RELEARN_MOVE, MoveId.POWDER_SNOW ], + [ RELEARN_MOVE, MoveId.EXTRASENSORY ], + [ RELEARN_MOVE, MoveId.NASTY_PLOT ], + [ RELEARN_MOVE, MoveId.ICE_SHARD ], + [ RELEARN_MOVE, MoveId.FREEZE_DRY ], + [ RELEARN_MOVE, MoveId.AURORA_VEIL ], + [ 1, MoveId.ICY_WIND ], + [ 1, MoveId.IMPRISON ], + [ 1, MoveId.BLIZZARD ], + [ 1, MoveId.TAIL_WHIP ], + ], + [SpeciesId.ALOLA_DIGLETT]: [ + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.METAL_CLAW ], + [ 4, MoveId.GROWL ], + [ 8, MoveId.ASTONISH ], + [ 12, MoveId.MUD_SLAP ], + [ 16, MoveId.BULLDOZE ], + [ 20, MoveId.SUCKER_PUNCH ], + [ 24, MoveId.IRON_HEAD ], + [ 28, MoveId.SANDSTORM ], + [ 32, MoveId.DIG ], + [ 36, MoveId.EARTH_POWER ], + [ 40, MoveId.EARTHQUAKE ], + [ 44, MoveId.FISSURE ], + ], + [SpeciesId.ALOLA_DUGTRIO]: [ + [ EVOLVE_MOVE, MoveId.SAND_TOMB ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.TRI_ATTACK ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.NIGHT_SLASH ], + [ 1, MoveId.ROTOTILLER ], + [ 12, MoveId.MUD_SLAP ], + [ 16, MoveId.BULLDOZE ], + [ 20, MoveId.SUCKER_PUNCH ], + [ 24, MoveId.IRON_HEAD ], + [ 30, MoveId.SANDSTORM ], + [ 36, MoveId.DIG ], + [ 42, MoveId.EARTH_POWER ], + [ 48, MoveId.EARTHQUAKE ], + [ 54, MoveId.FISSURE ], + ], + [SpeciesId.ALOLA_MEOWTH]: [ + [ 1, MoveId.GROWL ], + [ 1, MoveId.FAKE_OUT ], + [ 4, MoveId.FEINT ], + [ 8, MoveId.SCRATCH ], + [ 12, MoveId.PAY_DAY ], + [ 16, MoveId.BITE ], + [ 20, MoveId.TAUNT ], + [ 24, MoveId.ASSURANCE ], + [ 29, MoveId.FURY_SWIPES ], + [ 32, MoveId.SCREECH ], + [ 36, MoveId.NIGHT_SLASH ], + [ 40, MoveId.NASTY_PLOT ], + [ 44, MoveId.PLAY_ROUGH ], + ], + [SpeciesId.ALOLA_PERSIAN]: [ + [ EVOLVE_MOVE, MoveId.POWER_GEM ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.SWITCHEROO ], + [ 1, MoveId.QUASH ], + [ 12, MoveId.PAY_DAY ], + [ 16, MoveId.BITE ], + [ 20, MoveId.TAUNT ], + [ 24, MoveId.ASSURANCE ], + [ 31, MoveId.FURY_SWIPES ], + [ 36, MoveId.SCREECH ], + [ 42, MoveId.NIGHT_SLASH ], + [ 48, MoveId.NASTY_PLOT ], + [ 54, MoveId.PLAY_ROUGH ], + ], + [SpeciesId.ALOLA_GEODUDE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DEFENSE_CURL ], + [ 4, MoveId.CHARGE ], + [ 6, MoveId.ROCK_POLISH ], + [ 10, MoveId.ROLLOUT ], + [ 12, MoveId.SPARK ], + [ 16, MoveId.ROCK_THROW ], + [ 18, MoveId.SMACK_DOWN ], + [ 22, MoveId.THUNDER_PUNCH ], + [ 24, MoveId.SELF_DESTRUCT ], + [ 28, MoveId.STEALTH_ROCK ], + [ 30, MoveId.ROCK_BLAST ], + [ 34, MoveId.DISCHARGE ], + [ 36, MoveId.EXPLOSION ], + [ 40, MoveId.DOUBLE_EDGE ], + [ 42, MoveId.STONE_EDGE ], + ], + [SpeciesId.ALOLA_GRAVELER]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.CHARGE ], + [ 1, MoveId.ROCK_POLISH ], + [ 10, MoveId.ROLLOUT ], + [ 12, MoveId.SPARK ], + [ 16, MoveId.ROCK_THROW ], + [ 18, MoveId.SMACK_DOWN ], + [ 22, MoveId.THUNDER_PUNCH ], + [ 24, MoveId.SELF_DESTRUCT ], + [ 30, MoveId.STEALTH_ROCK ], + [ 34, MoveId.ROCK_BLAST ], + [ 40, MoveId.DISCHARGE ], + [ 44, MoveId.EXPLOSION ], + [ 50, MoveId.DOUBLE_EDGE ], + [ 54, MoveId.STONE_EDGE ], + ], + [SpeciesId.ALOLA_GOLEM]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.CHARGE ], + [ 1, MoveId.ROCK_POLISH ], + [ 1, MoveId.ROLLOUT ], // Previous Stage Move + [ 1, MoveId.HEAVY_SLAM ], + [ 12, MoveId.SPARK ], + [ 16, MoveId.ROCK_THROW ], + [ 18, MoveId.SMACK_DOWN ], + [ 22, MoveId.THUNDER_PUNCH ], + [ 24, MoveId.SELF_DESTRUCT ], + [ 30, MoveId.STEALTH_ROCK ], + [ 34, MoveId.ROCK_BLAST ], + [ 40, MoveId.DISCHARGE ], + [ 44, MoveId.EXPLOSION ], + [ 50, MoveId.DOUBLE_EDGE ], + [ 54, MoveId.STONE_EDGE ], + ], + [SpeciesId.ALOLA_GRIMER]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.POISON_GAS ], + [ 4, MoveId.HARDEN ], + [ 7, MoveId.BITE ], + [ 12, MoveId.DISABLE ], + [ 15, MoveId.ACID_SPRAY ], + [ 18, MoveId.POISON_FANG ], + [ 21, MoveId.MINIMIZE ], + [ 26, MoveId.TOXIC ], + [ 29, MoveId.KNOCK_OFF ], + [ 32, MoveId.CRUNCH ], + [ 37, MoveId.SCREECH ], + [ 40, MoveId.GUNK_SHOT ], + [ 43, MoveId.ACID_ARMOR ], + [ 46, MoveId.BELCH ], + [ 48, MoveId.MEMENTO ], + ], + [SpeciesId.ALOLA_MUK]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.BITE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.POISON_GAS ], + [ 12, MoveId.DISABLE ], + [ 15, MoveId.ACID_SPRAY ], + [ 18, MoveId.POISON_FANG ], + [ 21, MoveId.MINIMIZE ], + [ 26, MoveId.TOXIC ], + [ 29, MoveId.KNOCK_OFF ], + [ 32, MoveId.CRUNCH ], + [ 37, MoveId.SCREECH ], + [ 40, MoveId.GUNK_SHOT ], + [ 46, MoveId.ACID_ARMOR ], + [ 52, MoveId.BELCH ], + [ 57, MoveId.MEMENTO ], + ], + [SpeciesId.ALOLA_EXEGGUTOR]: [ + [ EVOLVE_MOVE, MoveId.DRAGON_HAMMER ], + [ RELEARN_MOVE, MoveId.GROWTH ], + [ 1, MoveId.BARRAGE ], + [ 1, MoveId.SEED_BOMB ], + [ 1, MoveId.PSYSHOCK ], + [ 1, MoveId.WOOD_HAMMER ], + [ 1, MoveId.LEAF_STORM ], + [ 1, MoveId.MEGA_DRAIN ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.SYNTHESIS ], + [ 1, MoveId.BULLET_SEED ], + [ 1, MoveId.GIGA_DRAIN ], + [ 1, MoveId.EXTRASENSORY ], + [ 1, MoveId.UPROAR ], + [ 1, MoveId.WORRY_SEED ], + [ 1, MoveId.SOLAR_BEAM ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.HYPNOSIS ], + [ 1, MoveId.REFLECT ], + [ 1, MoveId.LEECH_SEED ], + ], + [SpeciesId.ALOLA_MAROWAK]: [ + [ EVOLVE_MOVE, MoveId.SHADOW_BONE ], + [ 1, MoveId.BONE_CLUB ], + [ 1, MoveId.HEADBUTT ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.FIRE_SPIN ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.FALSE_SWIPE ], + [ 1, MoveId.RETALIATE ], + [ 12, MoveId.FLAME_WHEEL ], + [ 16, MoveId.HEX ], + [ 20, MoveId.FLING ], + [ 24, MoveId.STOMPING_TANTRUM ], + [ 31, MoveId.BONE_RUSH ], + [ 36, MoveId.WILL_O_WISP ], + [ 42, MoveId.ENDEAVOR ], + [ 48, MoveId.BONEMERANG ], + [ 54, MoveId.THRASH ], + [ 60, MoveId.FLARE_BLITZ ], + ], + [SpeciesId.ETERNAL_FLOETTE]: [ + [ 1, MoveId.VINE_WHIP ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.FAIRY_WIND ], + [ 10, MoveId.LUCKY_CHANT ], + [ 15, MoveId.RAZOR_LEAF ], + [ 20, MoveId.WISH ], + [ 25, MoveId.MAGICAL_LEAF ], + [ 27, MoveId.GRASSY_TERRAIN ], + [ 33, MoveId.PETAL_BLIZZARD ], + [ 38, MoveId.AROMATHERAPY ], + [ 43, MoveId.MISTY_TERRAIN ], + [ 46, MoveId.MOONBLAST ], + [ 50, MoveId.LIGHT_OF_RUIN ], + [ 51, MoveId.PETAL_DANCE ], + [ 58, MoveId.SOLAR_BEAM ], + ], + [SpeciesId.GALAR_MEOWTH]: [ + [ 1, MoveId.GROWL ], + [ 1, MoveId.FAKE_OUT ], + [ 4, MoveId.HONE_CLAWS ], + [ 8, MoveId.SCRATCH ], + [ 12, MoveId.PAY_DAY ], + [ 16, MoveId.METAL_CLAW ], + [ 20, MoveId.TAUNT ], + [ 24, MoveId.SWAGGER ], + [ 29, MoveId.FURY_SWIPES ], + [ 32, MoveId.SCREECH ], + [ 36, MoveId.SLASH ], + [ 40, MoveId.METAL_SOUND ], + [ 44, MoveId.THRASH ], + ], + [SpeciesId.GALAR_PONYTA]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 5, MoveId.TAIL_WHIP ], + [ 10, MoveId.CONFUSION ], + [ 15, MoveId.FAIRY_WIND ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.PSYBEAM ], + [ 30, MoveId.STOMP ], + [ 35, MoveId.HEAL_PULSE ], + [ 41, MoveId.TAKE_DOWN ], + [ 45, MoveId.DAZZLING_GLEAM ], + [ 50, MoveId.PSYCHIC ], + [ 55, MoveId.HEALING_WISH ], + ], + [SpeciesId.GALAR_RAPIDASH]: [ + [ EVOLVE_MOVE, MoveId.PSYCHO_CUT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.MEGAHORN ], + [ 15, MoveId.FAIRY_WIND ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.PSYBEAM ], + [ 30, MoveId.STOMP ], + [ 35, MoveId.HEAL_PULSE ], + [ 43, MoveId.TAKE_DOWN ], + [ 49, MoveId.DAZZLING_GLEAM ], + [ 56, MoveId.PSYCHIC ], + [ 63, MoveId.HEALING_WISH ], + ], + [SpeciesId.GALAR_SLOWPOKE]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.CURSE ], + [ 3, MoveId.GROWL ], + [ 6, MoveId.ACID ], + [ 9, MoveId.YAWN ], + [ 12, MoveId.CONFUSION ], + [ 15, MoveId.DISABLE ], + [ 18, MoveId.WATER_PULSE ], + [ 21, MoveId.HEADBUTT ], + [ 24, MoveId.ZEN_HEADBUTT ], + [ 27, MoveId.AMNESIA ], + [ 30, MoveId.SURF ], + [ 33, MoveId.SLACK_OFF ], + [ 36, MoveId.PSYCHIC ], + [ 39, MoveId.PSYCH_UP ], + [ 42, MoveId.RAIN_DANCE ], + [ 45, MoveId.HEAL_PULSE ], + ], + [SpeciesId.GALAR_SLOWBRO]: [ + [ EVOLVE_MOVE, MoveId.SHELL_SIDE_ARM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.ACID ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.CURSE ], + [ 9, MoveId.YAWN ], + [ 12, MoveId.CONFUSION ], + [ 15, MoveId.DISABLE ], + [ 18, MoveId.WATER_PULSE ], + [ 21, MoveId.HEADBUTT ], + [ 24, MoveId.ZEN_HEADBUTT ], + [ 27, MoveId.AMNESIA ], + [ 30, MoveId.SURF ], + [ 33, MoveId.SLACK_OFF ], + [ 36, MoveId.PSYCHIC ], + [ 39, MoveId.PSYCH_UP ], + [ 42, MoveId.RAIN_DANCE ], + [ 45, MoveId.HEAL_PULSE ], + ], + [SpeciesId.GALAR_FARFETCHD]: [ + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.PECK ], + [ 5, MoveId.LEER ], + [ 10, MoveId.FURY_CUTTER ], + [ 15, MoveId.ROCK_SMASH ], + [ 20, MoveId.BRUTAL_SWING ], + [ 25, MoveId.DETECT ], + [ 30, MoveId.KNOCK_OFF ], + [ 35, MoveId.DEFOG ], + [ 40, MoveId.BRICK_BREAK ], + [ 45, MoveId.SWORDS_DANCE ], + [ 50, MoveId.SLAM ], + [ 55, MoveId.LEAF_BLADE ], + [ 60, MoveId.FINAL_GAMBIT ], + [ 65, MoveId.BRAVE_BIRD ], + ], + [SpeciesId.GALAR_WEEZING]: [ + [ EVOLVE_MOVE, MoveId.DOUBLE_HIT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.HAZE ], + [ 1, MoveId.SMOG ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.HEAT_WAVE ], + [ 1, MoveId.DEFOG ], + [ 1, MoveId.AROMATIC_MIST ], + [ 1, MoveId.STRANGE_STEAM ], + [ 12, MoveId.CLEAR_SMOG ], + [ 16, MoveId.ASSURANCE ], + [ 20, MoveId.SLUDGE ], + [ 24, MoveId.FAIRY_WIND ], + [ 28, MoveId.SELF_DESTRUCT ], + [ 32, MoveId.SLUDGE_BOMB ], + [ 38, MoveId.TOXIC ], + [ 44, MoveId.BELCH ], + [ 50, MoveId.EXPLOSION ], + [ 56, MoveId.MEMENTO ], + [ 62, MoveId.DESTINY_BOND ], + [ 68, MoveId.MISTY_TERRAIN ], + ], + [SpeciesId.GALAR_MR_MIME]: [ + [ 1, MoveId.POUND ], + [ 1, MoveId.BARRIER ], // Previous Stage Move + [ 1, MoveId.TICKLE ], // Previous Stage Move + [ 1, MoveId.MIMIC ], + [ 1, MoveId.LIGHT_SCREEN ], + [ 1, MoveId.REFLECT ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.SAFEGUARD ], + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.ENCORE ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.ROLE_PLAY ], + [ 1, MoveId.RECYCLE ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.ICE_SHARD ], + [ 1, MoveId.MISTY_TERRAIN ], + [ 1, MoveId.DAZZLING_GLEAM ], + [ 12, MoveId.CONFUSION ], + [ 16, MoveId.ALLY_SWITCH ], + [ 20, MoveId.ICY_WIND ], + [ 24, MoveId.DOUBLE_KICK ], + [ 28, MoveId.PSYBEAM ], + [ 32, MoveId.HYPNOSIS ], + [ 36, MoveId.MIRROR_COAT ], + [ 40, MoveId.SUCKER_PUNCH ], + [ 44, MoveId.FREEZE_DRY ], + [ 48, MoveId.PSYCHIC ], + [ 52, MoveId.TEETER_DANCE ], + ], + [SpeciesId.GALAR_ARTICUNO]: [ + [ 1, MoveId.GUST ], + [ 5, MoveId.CONFUSION ], + [ 10, MoveId.REFLECT ], + [ 15, MoveId.HYPNOSIS ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.ANCIENT_POWER ], + [ 30, MoveId.TAILWIND ], + [ 35, MoveId.PSYCHO_CUT ], + [ 40, MoveId.RECOVER ], + [ 45, MoveId.FREEZING_GLARE ], + [ 50, MoveId.DREAM_EATER ], + [ 55, MoveId.HURRICANE ], + [ 60, MoveId.DOUBLE_TEAM ], + [ 65, MoveId.FUTURE_SIGHT ], + [ 70, MoveId.TRICK_ROOM ], + ], + [SpeciesId.GALAR_ZAPDOS]: [ + [ 1, MoveId.PECK ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 5, MoveId.ROCK_SMASH ], + [ 10, MoveId.LIGHT_SCREEN ], + [ 15, MoveId.PLUCK ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.ANCIENT_POWER ], + [ 30, MoveId.BRICK_BREAK ], + [ 35, MoveId.DRILL_PECK ], + [ 40, MoveId.QUICK_GUARD ], + [ 45, MoveId.THUNDEROUS_KICK ], + [ 50, MoveId.BULK_UP ], + [ 55, MoveId.COUNTER ], + [ 60, MoveId.DETECT ], + [ 65, MoveId.CLOSE_COMBAT ], + [ 70, MoveId.REVERSAL ], + ], + [SpeciesId.GALAR_MOLTRES]: [ + [ 1, MoveId.GUST ], + [ 1, MoveId.LEER ], + [ 5, MoveId.PAYBACK ], + [ 10, MoveId.SAFEGUARD ], + [ 15, MoveId.WING_ATTACK ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.ANCIENT_POWER ], + [ 30, MoveId.SUCKER_PUNCH ], + [ 35, MoveId.AIR_SLASH ], + [ 40, MoveId.AFTER_YOU ], + [ 45, MoveId.FIERY_WRATH ], + [ 50, MoveId.NASTY_PLOT ], + [ 55, MoveId.HURRICANE ], + [ 60, MoveId.ENDURE ], + [ 65, MoveId.MEMENTO ], + [ 70, MoveId.SKY_ATTACK ], + ], + [SpeciesId.GALAR_SLOWKING]: [ + [ EVOLVE_MOVE, MoveId.EERIE_SPELL ], + [ RELEARN_MOVE, MoveId.FUTURE_SIGHT ], + [ RELEARN_MOVE, MoveId.CHILLY_RECEPTION ], + [ RELEARN_MOVE, MoveId.TOXIC ], + [ 1, MoveId.POWER_GEM ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.SWAGGER ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.CURSE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.ACID ], + [ 9, MoveId.YAWN ], + [ 12, MoveId.CONFUSION ], + [ 15, MoveId.DISABLE ], + [ 18, MoveId.WATER_PULSE ], + [ 21, MoveId.HEADBUTT ], + [ 24, MoveId.ZEN_HEADBUTT ], + [ 27, MoveId.AMNESIA ], + [ 30, MoveId.SURF ], + [ 33, MoveId.SLACK_OFF ], + [ 36, MoveId.PSYCHIC ], + [ 39, MoveId.PSYCH_UP ], + [ 42, MoveId.RAIN_DANCE ], + [ 45, MoveId.HEAL_PULSE ], + ], + [SpeciesId.GALAR_CORSOLA]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 5, MoveId.ASTONISH ], + [ 10, MoveId.DISABLE ], + [ 15, MoveId.SPITE ], + [ 20, MoveId.ANCIENT_POWER ], + [ 25, MoveId.HEX ], + [ 30, MoveId.CURSE ], + [ 35, MoveId.STRENGTH_SAP ], + [ 40, MoveId.POWER_GEM ], + [ 45, MoveId.NIGHT_SHADE ], + [ 50, MoveId.GRUDGE ], + [ 55, MoveId.MIRROR_COAT ], + ], + [SpeciesId.GALAR_ZIGZAGOON]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 3, MoveId.SAND_ATTACK ], + [ 6, MoveId.LICK ], + [ 9, MoveId.SNARL ], + [ 12, MoveId.HEADBUTT ], + [ 15, MoveId.BABY_DOLL_EYES ], + [ 18, MoveId.PIN_MISSILE ], + [ 21, MoveId.REST ], + [ 24, MoveId.TAKE_DOWN ], + [ 27, MoveId.SCARY_FACE ], + [ 30, MoveId.COUNTER ], + [ 33, MoveId.TAUNT ], + [ 36, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.GALAR_LINOONE]: [ + [ EVOLVE_MOVE, MoveId.NIGHT_SLASH ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.PIN_MISSILE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LICK ], + [ 1, MoveId.SWITCHEROO ], + [ 1, MoveId.BABY_DOLL_EYES ], + [ 9, MoveId.SNARL ], + [ 12, MoveId.HEADBUTT ], + [ 15, MoveId.HONE_CLAWS ], + [ 18, MoveId.FURY_SWIPES ], + [ 23, MoveId.REST ], + [ 28, MoveId.TAKE_DOWN ], + [ 33, MoveId.SCARY_FACE ], + [ 38, MoveId.COUNTER ], + [ 43, MoveId.TAUNT ], + [ 48, MoveId.DOUBLE_EDGE ], + ], + [SpeciesId.GALAR_DARUMAKA]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.POWDER_SNOW ], + [ 4, MoveId.TAUNT ], + [ 8, MoveId.BITE ], + [ 12, MoveId.AVALANCHE ], + [ 16, MoveId.WORK_UP ], + [ 20, MoveId.ICE_FANG ], + [ 24, MoveId.HEADBUTT ], + [ 28, MoveId.ICE_PUNCH ], + [ 32, MoveId.UPROAR ], + [ 36, MoveId.BELLY_DRUM ], + [ 40, MoveId.BLIZZARD ], + [ 44, MoveId.THRASH ], + [ 48, MoveId.SUPERPOWER ], + ], + [SpeciesId.GALAR_DARMANITAN]: [ + [ EVOLVE_MOVE, MoveId.ICICLE_CRASH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.BITE ], + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.TAUNT ], + [ 12, MoveId.AVALANCHE ], + [ 16, MoveId.WORK_UP ], + [ 20, MoveId.ICE_FANG ], + [ 24, MoveId.HEADBUTT ], + [ 28, MoveId.ICE_PUNCH ], + [ 32, MoveId.UPROAR ], + [ 38, MoveId.BELLY_DRUM ], + [ 44, MoveId.BLIZZARD ], + [ 50, MoveId.THRASH ], + [ 56, MoveId.SUPERPOWER ], + ], + [SpeciesId.GALAR_YAMASK]: [ + [ 1, MoveId.PROTECT ], + [ 1, MoveId.ASTONISH ], + [ 4, MoveId.HAZE ], + [ 8, MoveId.NIGHT_SHADE ], + [ 12, MoveId.DISABLE ], + [ 16, MoveId.BRUTAL_SWING ], + [ 20, MoveId.CRAFTY_SHIELD ], + [ 24, MoveId.HEX ], + [ 28, MoveId.MEAN_LOOK ], + [ 32, MoveId.SLAM ], + [ 36, MoveId.CURSE ], + [ 40, MoveId.SHADOW_BALL ], + [ 44, MoveId.EARTHQUAKE ], + [ 48, MoveId.GUARD_SPLIT ], + [ 48, MoveId.POWER_SPLIT ], + [ 52, MoveId.DESTINY_BOND ], + ], + [SpeciesId.GALAR_STUNFISK]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.METAL_CLAW ], + [ 5, MoveId.ENDURE ], + [ 10, MoveId.MUD_SHOT ], + [ 15, MoveId.REVENGE ], + [ 20, MoveId.METAL_SOUND ], + [ 25, MoveId.SUCKER_PUNCH ], + [ 30, MoveId.IRON_DEFENSE ], + [ 35, MoveId.BOUNCE ], + [ 40, MoveId.MUDDY_WATER ], + [ 45, MoveId.SNAP_TRAP ], + [ 50, MoveId.FLAIL ], + [ 55, MoveId.FISSURE ], + ], + [SpeciesId.HISUI_GROWLITHE]: [ + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 4, MoveId.HOWL ], + [ 8, MoveId.BITE ], + [ 12, MoveId.FLAME_WHEEL ], + [ 16, MoveId.HELPING_HAND ], + [ 24, MoveId.FIRE_FANG ], + [ 28, MoveId.RETALIATE ], + [ 32, MoveId.CRUNCH ], + [ 36, MoveId.TAKE_DOWN ], + [ 40, MoveId.FLAMETHROWER ], + [ 44, MoveId.ROAR ], + [ 48, MoveId.ROCK_SLIDE ], + [ 52, MoveId.REVERSAL ], + [ 56, MoveId.FLARE_BLITZ ], + ], + [SpeciesId.HISUI_ARCANINE]: [ + [ EVOLVE_MOVE, MoveId.EXTREME_SPEED ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.LEER ], + [ 1, MoveId.BITE ], + [ 1, MoveId.ROAR ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.AGILITY ], + [ 1, MoveId.ROCK_SLIDE ], + [ 1, MoveId.FLAME_WHEEL ], + [ 1, MoveId.REVERSAL ], + [ 1, MoveId.CRUNCH ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.HOWL ], + [ 1, MoveId.FLARE_BLITZ ], + [ 1, MoveId.FIRE_FANG ], + [ 1, MoveId.RETALIATE ], + [ 5, MoveId.FLAMETHROWER ], + [ 64, MoveId.RAGING_FURY ], + ], + [SpeciesId.HISUI_VOLTORB]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.CHARGE ], + [ 4, MoveId.THUNDER_SHOCK ], + [ 6, MoveId.STUN_SPORE ], + [ 9, MoveId.BULLET_SEED ], + [ 11, MoveId.ROLLOUT ], + [ 13, MoveId.SCREECH ], + [ 16, MoveId.CHARGE_BEAM ], + [ 20, MoveId.SWIFT ], + [ 22, MoveId.ELECTRO_BALL ], + [ 26, MoveId.SELF_DESTRUCT ], + [ 29, MoveId.ENERGY_BALL ], + [ 34, MoveId.SEED_BOMB ], + [ 34, MoveId.DISCHARGE ], + [ 41, MoveId.EXPLOSION ], + [ 46, MoveId.GYRO_BALL ], + [ 50, MoveId.GRASSY_TERRAIN ], + ], + [SpeciesId.HISUI_ELECTRODE]: [ + [ EVOLVE_MOVE, MoveId.CHLOROBLAST ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.CHARGE ], + [ 4, MoveId.THUNDER_SHOCK ], + [ 6, MoveId.STUN_SPORE ], + [ 9, MoveId.BULLET_SEED ], + [ 11, MoveId.ROLLOUT ], + [ 13, MoveId.SCREECH ], + [ 16, MoveId.CHARGE_BEAM ], + [ 20, MoveId.SWIFT ], + [ 22, MoveId.ELECTRO_BALL ], + [ 26, MoveId.SELF_DESTRUCT ], + [ 29, MoveId.ENERGY_BALL ], + [ 34, MoveId.SEED_BOMB ], + [ 34, MoveId.DISCHARGE ], + [ 41, MoveId.EXPLOSION ], + [ 46, MoveId.GYRO_BALL ], + [ 50, MoveId.GRASSY_TERRAIN ], + ], + [SpeciesId.HISUI_TYPHLOSION]: [ + [ EVOLVE_MOVE, MoveId.INFERNAL_PARADE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.ERUPTION ], + [ 1, MoveId.GYRO_BALL ], + [ 13, MoveId.QUICK_ATTACK ], + [ 20, MoveId.FLAME_WHEEL ], + [ 24, MoveId.DEFENSE_CURL ], + [ 31, MoveId.SWIFT ], + [ 35, MoveId.FLAME_CHARGE ], + [ 43, MoveId.LAVA_PLUME ], + [ 48, MoveId.FLAMETHROWER ], + [ 56, MoveId.INFERNO ], + [ 61, MoveId.ROLLOUT ], + [ 74, MoveId.OVERHEAT ], + ], + [SpeciesId.HISUI_QWILFISH]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.POISON_STING ], + [ 4, MoveId.HARDEN ], + [ 8, MoveId.BITE ], + [ 12, MoveId.FELL_STINGER ], + [ 16, MoveId.MINIMIZE ], + [ 20, MoveId.SPIKES ], + [ 24, MoveId.BRINE ], + [ 28, MoveId.BARB_BARRAGE ], + [ 32, MoveId.PIN_MISSILE ], + [ 36, MoveId.TOXIC_SPIKES ], + [ 40, MoveId.STOCKPILE ], + [ 40, MoveId.SPIT_UP ], + [ 44, MoveId.TOXIC ], + [ 48, MoveId.CRUNCH ], + [ 52, MoveId.ACUPRESSURE ], + [ 56, MoveId.DESTINY_BOND ], + ], + [SpeciesId.HISUI_SNEASEL]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.ROCK_SMASH ], + [ 6, MoveId.TAUNT ], + [ 12, MoveId.QUICK_ATTACK ], + [ 18, MoveId.METAL_CLAW ], + [ 24, MoveId.POISON_JAB ], + [ 30, MoveId.BRICK_BREAK ], + [ 36, MoveId.HONE_CLAWS ], + [ 42, MoveId.SLASH ], + [ 48, MoveId.AGILITY ], + [ 54, MoveId.SCREECH ], + [ 60, MoveId.CLOSE_COMBAT ], + ], + [SpeciesId.HISUI_SAMUROTT]: [ + [ EVOLVE_MOVE, MoveId.CEASELESS_EDGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.SOAK ], // Previous Stage Move + [ 1, MoveId.SLASH ], + [ 1, MoveId.MEGAHORN ], + [ 1, MoveId.SUCKER_PUNCH ], + [ 13, MoveId.FOCUS_ENERGY ], + [ 18, MoveId.RAZOR_SHELL ], + [ 21, MoveId.FURY_CUTTER ], + [ 25, MoveId.WATER_PULSE ], + [ 29, MoveId.AERIAL_ACE ], + [ 34, MoveId.AQUA_JET ], + [ 39, MoveId.ENCORE ], + [ 46, MoveId.AQUA_TAIL ], + [ 51, MoveId.RETALIATE ], + [ 58, MoveId.SWORDS_DANCE ], + [ 63, MoveId.HYDRO_PUMP ], + ], + [SpeciesId.HISUI_LILLIGANT]: [ + [ EVOLVE_MOVE, MoveId.VICTORY_DANCE ], + [ 1, MoveId.MEGA_KICK ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.MEGA_DRAIN ], + [ 1, MoveId.LEECH_SEED ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.SLEEP_POWDER ], + [ 1, MoveId.GIGA_DRAIN ], + [ 1, MoveId.CHARM ], // Previous Stage Move + [ 1, MoveId.SYNTHESIS ], + [ 1, MoveId.SUNNY_DAY ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.TEETER_DANCE ], + [ 1, MoveId.MAGICAL_LEAF ], + [ 1, MoveId.LEAF_BLADE ], + [ 1, MoveId.ENERGY_BALL ], + [ 1, MoveId.DEFOG ], + [ 1, MoveId.LEAF_STORM ], + [ 1, MoveId.ENTRAINMENT ], + [ 1, MoveId.AFTER_YOU ], + [ 1, MoveId.PETAL_BLIZZARD ], + [ 1, MoveId.SOLAR_BLADE ], + [ 5, MoveId.AXE_KICK ], + ], + [SpeciesId.HISUI_ZORUA]: [ + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 4, MoveId.TORMENT ], + [ 8, MoveId.HONE_CLAWS ], + [ 12, MoveId.SHADOW_SNEAK ], + [ 16, MoveId.CURSE ], + [ 20, MoveId.TAUNT ], + [ 24, MoveId.KNOCK_OFF ], + [ 28, MoveId.SPITE ], + [ 32, MoveId.AGILITY ], + [ 36, MoveId.SHADOW_BALL ], + [ 40, MoveId.BITTER_MALICE ], + [ 44, MoveId.NASTY_PLOT ], + [ 48, MoveId.FOUL_PLAY ], + ], + [SpeciesId.HISUI_ZOROARK]: [ + [ EVOLVE_MOVE, MoveId.SHADOW_CLAW ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.TORMENT ], + [ 1, MoveId.U_TURN ], + [ 1, MoveId.HONE_CLAWS ], + [ 12, MoveId.SHADOW_SNEAK ], + [ 16, MoveId.CURSE ], + [ 20, MoveId.TAUNT ], + [ 24, MoveId.KNOCK_OFF ], + [ 28, MoveId.SPITE ], + [ 34, MoveId.AGILITY ], + [ 40, MoveId.SHADOW_BALL ], + [ 46, MoveId.BITTER_MALICE ], + [ 52, MoveId.NASTY_PLOT ], + [ 58, MoveId.FOUL_PLAY ], + ], + [SpeciesId.HISUI_BRAVIARY]: [ + [ EVOLVE_MOVE, MoveId.ESPER_WING ], + [ RELEARN_MOVE, MoveId.BRAVE_BIRD ], // Previous Stage Move + [ 1, MoveId.WING_ATTACK ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 1, MoveId.SKY_ATTACK ], + [ 1, MoveId.SUPERPOWER ], + [ 1, MoveId.HONE_CLAWS ], + [ 18, MoveId.TAILWIND ], + [ 24, MoveId.SCARY_FACE ], + [ 30, MoveId.AERIAL_ACE ], + [ 36, MoveId.SLASH ], + [ 42, MoveId.WHIRLWIND ], + [ 48, MoveId.CRUSH_CLAW ], + [ 57, MoveId.AIR_SLASH ], + [ 64, MoveId.DEFOG ], + [ 72, MoveId.THRASH ], + [ 80, MoveId.HURRICANE ], + ], + [SpeciesId.HISUI_SLIGGOO]: [ + [ EVOLVE_MOVE, MoveId.SHELTER ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.ACID_ARMOR ], + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.BODY_SLAM ], // Previous Stage Move + [ 15, MoveId.PROTECT ], + [ 20, MoveId.FLAIL ], + [ 25, MoveId.WATER_PULSE ], + [ 30, MoveId.RAIN_DANCE ], + [ 35, MoveId.DRAGON_PULSE ], + [ 43, MoveId.CURSE ], + [ 49, MoveId.IRON_HEAD ], + [ 56, MoveId.MUDDY_WATER ], + ], + [SpeciesId.HISUI_GOODRA]: [ + [ EVOLVE_MOVE, MoveId.IRON_TAIL ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.ACID_ARMOR ], // Previous Stage Move + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.ACID_SPRAY ], + [ 1, MoveId.TEARFUL_LOOK ], + [ 1, MoveId.SHELTER ], + [ 15, MoveId.PROTECT ], + [ 20, MoveId.FLAIL ], + [ 25, MoveId.WATER_PULSE ], + [ 30, MoveId.RAIN_DANCE ], + [ 35, MoveId.DRAGON_PULSE ], + [ 43, MoveId.CURSE ], + [ 49, MoveId.BODY_SLAM ], + [ 49, MoveId.IRON_HEAD ], + [ 58, MoveId.MUDDY_WATER ], + [ 67, MoveId.HEAVY_SLAM ], + ], + [SpeciesId.HISUI_AVALUGG]: [ + [ EVOLVE_MOVE, MoveId.ROCK_SLIDE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.WIDE_GUARD ], + [ 9, MoveId.CURSE ], + [ 12, MoveId.ICY_WIND ], + [ 15, MoveId.PROTECT ], + [ 18, MoveId.AVALANCHE ], + [ 21, MoveId.BITE ], + [ 24, MoveId.ICE_FANG ], + [ 27, MoveId.IRON_DEFENSE ], + [ 30, MoveId.RECOVER ], + [ 33, MoveId.CRUNCH ], + [ 36, MoveId.TAKE_DOWN ], + [ 41, MoveId.BLIZZARD ], + [ 46, MoveId.DOUBLE_EDGE ], + [ 51, MoveId.STONE_EDGE ], + [ 61, MoveId.MOUNTAIN_GALE ], + ], + [SpeciesId.HISUI_DECIDUEYE]: [ + [ EVOLVE_MOVE, MoveId.TRIPLE_ARROWS ], + [ RELEARN_MOVE, MoveId.NASTY_PLOT ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.U_TURN ], + [ 1, MoveId.ASTONISH ], // Previous Stage Move + [ 1, MoveId.LEAF_STORM ], + [ 1, MoveId.LEAFAGE ], + [ 9, MoveId.PECK ], + [ 12, MoveId.SHADOW_SNEAK ], + [ 15, MoveId.RAZOR_LEAF ], + [ 20, MoveId.SYNTHESIS ], + [ 25, MoveId.PLUCK ], + [ 30, MoveId.BULK_UP ], + [ 37, MoveId.SUCKER_PUNCH ], + [ 44, MoveId.LEAF_BLADE ], + [ 51, MoveId.FEATHER_DANCE ], + [ 58, MoveId.BRAVE_BIRD ], + ], + [SpeciesId.PALDEA_TAUROS]: [ + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 5, MoveId.WORK_UP ], + [ 10, MoveId.DOUBLE_KICK ], + [ 15, MoveId.ASSURANCE ], + [ 20, MoveId.HEADBUTT ], + [ 25, MoveId.SCARY_FACE ], + [ 30, MoveId.ZEN_HEADBUTT ], + [ 35, MoveId.RAGING_BULL ], + [ 40, MoveId.REST ], + [ 45, MoveId.SWAGGER ], + [ 50, MoveId.THRASH ], + [ 55, MoveId.DOUBLE_EDGE ], + [ 60, MoveId.CLOSE_COMBAT ], + ], + [SpeciesId.PALDEA_WOOPER]: [ + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.MUD_SHOT ], + [ 4, MoveId.TACKLE ], + [ 8, MoveId.POISON_TAIL ], + [ 12, MoveId.TOXIC_SPIKES ], + [ 16, MoveId.SLAM ], + [ 21, MoveId.YAWN ], + [ 24, MoveId.POISON_JAB ], + [ 28, MoveId.SLUDGE_WAVE ], + [ 32, MoveId.AMNESIA ], + [ 36, MoveId.TOXIC ], + [ 40, MoveId.EARTHQUAKE ], + ], + [SpeciesId.BLOODMOON_URSALUNA]: [ + [ RELEARN_MOVE, MoveId.MOONLIGHT ], + [ 1, MoveId.HEADLONG_RUSH ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LICK ], + [ 8, MoveId.FURY_SWIPES ], + [ 13, MoveId.PAYBACK ], + [ 17, MoveId.HARDEN ], + [ 22, MoveId.SLASH ], + [ 25, MoveId.PLAY_NICE ], + [ 35, MoveId.SCARY_FACE ], + [ 41, MoveId.REST ], + [ 41, MoveId.SNORE ], + [ 48, MoveId.EARTH_POWER ], + [ 56, MoveId.MOONBLAST ], + [ 64, MoveId.HAMMER_ARM ], + [ 70, MoveId.BLOOD_MOON ], ] }; export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { - [Species.PIKACHU]: { // Custom + [SpeciesId.PIKACHU]: { // Custom 1: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.NUZZLE ], - [ 4, Moves.THUNDER_WAVE ], - [ 8, Moves.DOUBLE_TEAM ], - [ 12, Moves.ELECTRO_BALL ], - [ 16, Moves.FEINT ], - [ 20, Moves.ZIPPY_ZAP ], // Custom - [ 24, Moves.AGILITY ], - [ 28, Moves.IRON_TAIL ], - [ 32, Moves.DISCHARGE ], - [ 34, Moves.FLOATY_FALL ], // Custom - [ 36, Moves.THUNDERBOLT ], - [ 40, Moves.LIGHT_SCREEN ], - [ 42, Moves.SPLISHY_SPLASH ], // Custom - [ 44, Moves.THUNDER ], - [ 48, Moves.PIKA_PAPOW ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.NUZZLE ], + [ 4, MoveId.THUNDER_WAVE ], + [ 8, MoveId.DOUBLE_TEAM ], + [ 12, MoveId.ELECTRO_BALL ], + [ 16, MoveId.FEINT ], + [ 20, MoveId.ZIPPY_ZAP ], // Custom + [ 24, MoveId.AGILITY ], + [ 28, MoveId.IRON_TAIL ], + [ 32, MoveId.DISCHARGE ], + [ 34, MoveId.FLOATY_FALL ], // Custom + [ 36, MoveId.THUNDERBOLT ], + [ 40, MoveId.LIGHT_SCREEN ], + [ 42, MoveId.SPLISHY_SPLASH ], // Custom + [ 44, MoveId.THUNDER ], + [ 48, MoveId.PIKA_PAPOW ], ], 2: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.NUZZLE ], - [ 4, Moves.THUNDER_WAVE ], - [ 8, Moves.DOUBLE_TEAM ], - [ 12, Moves.ELECTRO_BALL ], - [ 16, Moves.FEINT ], - [ 20, Moves.SPARK ], - [ 24, Moves.AGILITY ], - [ 28, Moves.IRON_TAIL ], - [ 32, Moves.DISCHARGE ], - [ 36, Moves.THUNDERBOLT ], - [ 40, Moves.LIGHT_SCREEN ], - [ 44, Moves.THUNDER ], - [ 48, Moves.PIKA_PAPOW ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.NUZZLE ], + [ 4, MoveId.THUNDER_WAVE ], + [ 8, MoveId.DOUBLE_TEAM ], + [ 12, MoveId.ELECTRO_BALL ], + [ 16, MoveId.FEINT ], + [ 20, MoveId.SPARK ], + [ 24, MoveId.AGILITY ], + [ 28, MoveId.IRON_TAIL ], + [ 32, MoveId.DISCHARGE ], + [ 36, MoveId.THUNDERBOLT ], + [ 40, MoveId.LIGHT_SCREEN ], + [ 44, MoveId.THUNDER ], + [ 48, MoveId.PIKA_PAPOW ], ], 3: [ - [ 1, Moves.METEOR_MASH ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.NUZZLE ], - [ 4, Moves.THUNDER_WAVE ], - [ 8, Moves.DOUBLE_TEAM ], - [ 12, Moves.ELECTRO_BALL ], - [ 16, Moves.FEINT ], - [ 20, Moves.SPARK ], - [ 24, Moves.AGILITY ], - [ 28, Moves.IRON_TAIL ], - [ 32, Moves.DISCHARGE ], - [ 36, Moves.THUNDERBOLT ], - [ 40, Moves.LIGHT_SCREEN ], - [ 44, Moves.THUNDER ], - [ 48, Moves.PIKA_PAPOW ], + [ 1, MoveId.METEOR_MASH ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.NUZZLE ], + [ 4, MoveId.THUNDER_WAVE ], + [ 8, MoveId.DOUBLE_TEAM ], + [ 12, MoveId.ELECTRO_BALL ], + [ 16, MoveId.FEINT ], + [ 20, MoveId.SPARK ], + [ 24, MoveId.AGILITY ], + [ 28, MoveId.IRON_TAIL ], + [ 32, MoveId.DISCHARGE ], + [ 36, MoveId.THUNDERBOLT ], + [ 40, MoveId.LIGHT_SCREEN ], + [ 44, MoveId.THUNDER ], + [ 48, MoveId.PIKA_PAPOW ], ], 4: [ - [ 1, Moves.ICICLE_CRASH ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.NUZZLE ], - [ 4, Moves.THUNDER_WAVE ], - [ 8, Moves.DOUBLE_TEAM ], - [ 12, Moves.ELECTRO_BALL ], - [ 16, Moves.FEINT ], - [ 20, Moves.SPARK ], - [ 24, Moves.AGILITY ], - [ 28, Moves.IRON_TAIL ], - [ 32, Moves.DISCHARGE ], - [ 36, Moves.THUNDERBOLT ], - [ 40, Moves.LIGHT_SCREEN ], - [ 44, Moves.THUNDER ], - [ 48, Moves.PIKA_PAPOW ], + [ 1, MoveId.ICICLE_CRASH ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.NUZZLE ], + [ 4, MoveId.THUNDER_WAVE ], + [ 8, MoveId.DOUBLE_TEAM ], + [ 12, MoveId.ELECTRO_BALL ], + [ 16, MoveId.FEINT ], + [ 20, MoveId.SPARK ], + [ 24, MoveId.AGILITY ], + [ 28, MoveId.IRON_TAIL ], + [ 32, MoveId.DISCHARGE ], + [ 36, MoveId.THUNDERBOLT ], + [ 40, MoveId.LIGHT_SCREEN ], + [ 44, MoveId.THUNDER ], + [ 48, MoveId.PIKA_PAPOW ], ], 5: [ - [ 1, Moves.DRAINING_KISS ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.NUZZLE ], - [ 4, Moves.THUNDER_WAVE ], - [ 8, Moves.DOUBLE_TEAM ], - [ 12, Moves.ELECTRO_BALL ], - [ 16, Moves.FEINT ], - [ 20, Moves.SPARK ], - [ 24, Moves.AGILITY ], - [ 28, Moves.IRON_TAIL ], - [ 32, Moves.DISCHARGE ], - [ 36, Moves.THUNDERBOLT ], - [ 40, Moves.LIGHT_SCREEN ], - [ 44, Moves.THUNDER ], - [ 48, Moves.PIKA_PAPOW ], + [ 1, MoveId.DRAINING_KISS ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.NUZZLE ], + [ 4, MoveId.THUNDER_WAVE ], + [ 8, MoveId.DOUBLE_TEAM ], + [ 12, MoveId.ELECTRO_BALL ], + [ 16, MoveId.FEINT ], + [ 20, MoveId.SPARK ], + [ 24, MoveId.AGILITY ], + [ 28, MoveId.IRON_TAIL ], + [ 32, MoveId.DISCHARGE ], + [ 36, MoveId.THUNDERBOLT ], + [ 40, MoveId.LIGHT_SCREEN ], + [ 44, MoveId.THUNDER ], + [ 48, MoveId.PIKA_PAPOW ], ], 6: [ - [ 1, Moves.ELECTRIC_TERRAIN ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.NUZZLE ], - [ 4, Moves.THUNDER_WAVE ], - [ 8, Moves.DOUBLE_TEAM ], - [ 12, Moves.ELECTRO_BALL ], - [ 16, Moves.FEINT ], - [ 20, Moves.SPARK ], - [ 24, Moves.AGILITY ], - [ 28, Moves.IRON_TAIL ], - [ 32, Moves.DISCHARGE ], - [ 36, Moves.THUNDERBOLT ], - [ 40, Moves.LIGHT_SCREEN ], - [ 44, Moves.THUNDER ], - [ 48, Moves.PIKA_PAPOW ], + [ 1, MoveId.ELECTRIC_TERRAIN ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.NUZZLE ], + [ 4, MoveId.THUNDER_WAVE ], + [ 8, MoveId.DOUBLE_TEAM ], + [ 12, MoveId.ELECTRO_BALL ], + [ 16, MoveId.FEINT ], + [ 20, MoveId.SPARK ], + [ 24, MoveId.AGILITY ], + [ 28, MoveId.IRON_TAIL ], + [ 32, MoveId.DISCHARGE ], + [ 36, MoveId.THUNDERBOLT ], + [ 40, MoveId.LIGHT_SCREEN ], + [ 44, MoveId.THUNDER ], + [ 48, MoveId.PIKA_PAPOW ], ], 7: [ - [ 1, Moves.FLYING_PRESS ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.NUZZLE ], - [ 4, Moves.THUNDER_WAVE ], - [ 8, Moves.DOUBLE_TEAM ], - [ 12, Moves.ELECTRO_BALL ], - [ 16, Moves.FEINT ], - [ 20, Moves.SPARK ], - [ 24, Moves.AGILITY ], - [ 28, Moves.IRON_TAIL ], - [ 32, Moves.DISCHARGE ], - [ 36, Moves.THUNDERBOLT ], - [ 40, Moves.LIGHT_SCREEN ], - [ 44, Moves.THUNDER ], - [ 48, Moves.PIKA_PAPOW ], + [ 1, MoveId.FLYING_PRESS ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.NUZZLE ], + [ 4, MoveId.THUNDER_WAVE ], + [ 8, MoveId.DOUBLE_TEAM ], + [ 12, MoveId.ELECTRO_BALL ], + [ 16, MoveId.FEINT ], + [ 20, MoveId.SPARK ], + [ 24, MoveId.AGILITY ], + [ 28, MoveId.IRON_TAIL ], + [ 32, MoveId.DISCHARGE ], + [ 36, MoveId.THUNDERBOLT ], + [ 40, MoveId.LIGHT_SCREEN ], + [ 44, MoveId.THUNDER ], + [ 48, MoveId.PIKA_PAPOW ], ], 8: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.NUZZLE ], - [ 4, Moves.THUNDER_WAVE ], - [ 8, Moves.DOUBLE_TEAM ], - [ 12, Moves.ELECTRO_BALL ], - [ 16, Moves.FEINT ], - [ 20, Moves.ZIPPY_ZAP ], // Custom - [ 24, Moves.AGILITY ], - [ 28, Moves.IRON_TAIL ], - [ 32, Moves.DISCHARGE ], - [ 34, Moves.FLOATY_FALL ], // Custom - [ 36, Moves.THUNDERBOLT ], - [ 40, Moves.LIGHT_SCREEN ], - [ 42, Moves.SPLISHY_SPLASH ], // Custom - [ 44, Moves.THUNDER ], - [ 48, Moves.PIKA_PAPOW ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.NUZZLE ], + [ 4, MoveId.THUNDER_WAVE ], + [ 8, MoveId.DOUBLE_TEAM ], + [ 12, MoveId.ELECTRO_BALL ], + [ 16, MoveId.FEINT ], + [ 20, MoveId.ZIPPY_ZAP ], // Custom + [ 24, MoveId.AGILITY ], + [ 28, MoveId.IRON_TAIL ], + [ 32, MoveId.DISCHARGE ], + [ 34, MoveId.FLOATY_FALL ], // Custom + [ 36, MoveId.THUNDERBOLT ], + [ 40, MoveId.LIGHT_SCREEN ], + [ 42, MoveId.SPLISHY_SPLASH ], // Custom + [ 44, MoveId.THUNDER ], + [ 48, MoveId.PIKA_PAPOW ], ], }, - [Species.EEVEE]: { // Custom + [SpeciesId.EEVEE]: { // Custom 1: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.COVET ], - [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.QUICK_ATTACK ], - [ 15, Moves.BABY_DOLL_EYES ], - [ 18, Moves.BOUNCY_BUBBLE ], // Custom - [ 18, Moves.SIZZLY_SLIDE ], // Custom - [ 18, Moves.BUZZY_BUZZ ], // Custom - [ 20, Moves.SWIFT ], - [ 25, Moves.BITE ], - [ 30, Moves.COPYCAT ], - [ 33, Moves.BADDY_BAD ], // Custom - [ 33, Moves.GLITZY_GLOW ], // Custom - [ 35, Moves.BATON_PASS ], - [ 40, Moves.VEEVEE_VOLLEY ], // Custom, replaces Take Down - [ 43, Moves.FREEZY_FROST ], // Custom - [ 43, Moves.SAPPY_SEED ], // Custom - [ 45, Moves.CHARM ], - [ 50, Moves.DOUBLE_EDGE ], - [ 53, Moves.SPARKLY_SWIRL ], // Custom - [ 55, Moves.LAST_RESORT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.COVET ], + [ 5, MoveId.SAND_ATTACK ], + [ 10, MoveId.QUICK_ATTACK ], + [ 15, MoveId.BABY_DOLL_EYES ], + [ 18, MoveId.BOUNCY_BUBBLE ], // Custom + [ 18, MoveId.SIZZLY_SLIDE ], // Custom + [ 18, MoveId.BUZZY_BUZZ ], // Custom + [ 20, MoveId.SWIFT ], + [ 25, MoveId.BITE ], + [ 30, MoveId.COPYCAT ], + [ 33, MoveId.BADDY_BAD ], // Custom + [ 33, MoveId.GLITZY_GLOW ], // Custom + [ 35, MoveId.BATON_PASS ], + [ 40, MoveId.VEEVEE_VOLLEY ], // Custom, replaces Take Down + [ 43, MoveId.FREEZY_FROST ], // Custom + [ 43, MoveId.SAPPY_SEED ], // Custom + [ 45, MoveId.CHARM ], + [ 50, MoveId.DOUBLE_EDGE ], + [ 53, MoveId.SPARKLY_SWIRL ], // Custom + [ 55, MoveId.LAST_RESORT ], ], 2: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.COVET ], - [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.QUICK_ATTACK ], - [ 15, Moves.BABY_DOLL_EYES ], - [ 18, Moves.BOUNCY_BUBBLE ], // Custom - [ 18, Moves.SIZZLY_SLIDE ], // Custom - [ 18, Moves.BUZZY_BUZZ ], // Custom - [ 20, Moves.SWIFT ], - [ 25, Moves.BITE ], - [ 30, Moves.COPYCAT ], - [ 33, Moves.BADDY_BAD ], // Custom - [ 33, Moves.GLITZY_GLOW ], // Custom - [ 35, Moves.BATON_PASS ], - [ 40, Moves.VEEVEE_VOLLEY ], // Custom, replaces Take Down - [ 43, Moves.FREEZY_FROST ], // Custom - [ 43, Moves.SAPPY_SEED ], // Custom - [ 45, Moves.CHARM ], - [ 50, Moves.DOUBLE_EDGE ], - [ 53, Moves.SPARKLY_SWIRL ], // Custom - [ 55, Moves.LAST_RESORT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.COVET ], + [ 5, MoveId.SAND_ATTACK ], + [ 10, MoveId.QUICK_ATTACK ], + [ 15, MoveId.BABY_DOLL_EYES ], + [ 18, MoveId.BOUNCY_BUBBLE ], // Custom + [ 18, MoveId.SIZZLY_SLIDE ], // Custom + [ 18, MoveId.BUZZY_BUZZ ], // Custom + [ 20, MoveId.SWIFT ], + [ 25, MoveId.BITE ], + [ 30, MoveId.COPYCAT ], + [ 33, MoveId.BADDY_BAD ], // Custom + [ 33, MoveId.GLITZY_GLOW ], // Custom + [ 35, MoveId.BATON_PASS ], + [ 40, MoveId.VEEVEE_VOLLEY ], // Custom, replaces Take Down + [ 43, MoveId.FREEZY_FROST ], // Custom + [ 43, MoveId.SAPPY_SEED ], // Custom + [ 45, MoveId.CHARM ], + [ 50, MoveId.DOUBLE_EDGE ], + [ 53, MoveId.SPARKLY_SWIRL ], // Custom + [ 55, MoveId.LAST_RESORT ], ], }, - [Species.DEOXYS]: { + [SpeciesId.DEOXYS]: { 1: [ - [ 1, Moves.CONFUSION ], // Custom - [ 1, Moves.WRAP ], - [ 1, Moves.LEER ], - [ 7, Moves.NIGHT_SHADE ], - [ 13, Moves.TELEPORT ], - [ 19, Moves.TAUNT ], - [ 25, Moves.PURSUIT ], - [ 31, Moves.PSYCHIC ], - [ 37, Moves.SUPERPOWER ], - [ 43, Moves.PSYCHO_SHIFT ], - [ 49, Moves.ZEN_HEADBUTT ], - [ 55, Moves.COSMIC_POWER ], - [ 61, Moves.ZAP_CANNON ], - [ 67, Moves.PSYCHO_BOOST ], - [ 73, Moves.HYPER_BEAM ], + [ 1, MoveId.CONFUSION ], // Custom + [ 1, MoveId.WRAP ], + [ 1, MoveId.LEER ], + [ 7, MoveId.NIGHT_SHADE ], + [ 13, MoveId.TELEPORT ], + [ 19, MoveId.TAUNT ], + [ 25, MoveId.PURSUIT ], + [ 31, MoveId.PSYCHIC ], + [ 37, MoveId.SUPERPOWER ], + [ 43, MoveId.PSYCHO_SHIFT ], + [ 49, MoveId.ZEN_HEADBUTT ], + [ 55, MoveId.COSMIC_POWER ], + [ 61, MoveId.ZAP_CANNON ], + [ 67, MoveId.PSYCHO_BOOST ], + [ 73, MoveId.HYPER_BEAM ], ], 2: [ - [ 1, Moves.CONFUSION ], // Custom - [ 1, Moves.WRAP ], - [ 1, Moves.LEER ], - [ 7, Moves.NIGHT_SHADE ], - [ 13, Moves.TELEPORT ], - [ 19, Moves.KNOCK_OFF ], - [ 25, Moves.SPIKES ], - [ 31, Moves.PSYCHIC ], - [ 37, Moves.SNATCH ], - [ 43, Moves.PSYCHO_SHIFT ], - [ 49, Moves.ZEN_HEADBUTT ], - [ 55, Moves.AMNESIA ], - [ 55, Moves.IRON_DEFENSE ], - [ 61, Moves.RECOVER ], - [ 67, Moves.PSYCHO_BOOST ], - [ 73, Moves.COUNTER ], - [ 73, Moves.MIRROR_COAT ], + [ 1, MoveId.CONFUSION ], // Custom + [ 1, MoveId.WRAP ], + [ 1, MoveId.LEER ], + [ 7, MoveId.NIGHT_SHADE ], + [ 13, MoveId.TELEPORT ], + [ 19, MoveId.KNOCK_OFF ], + [ 25, MoveId.SPIKES ], + [ 31, MoveId.PSYCHIC ], + [ 37, MoveId.SNATCH ], + [ 43, MoveId.PSYCHO_SHIFT ], + [ 49, MoveId.ZEN_HEADBUTT ], + [ 55, MoveId.AMNESIA ], + [ 55, MoveId.IRON_DEFENSE ], + [ 61, MoveId.RECOVER ], + [ 67, MoveId.PSYCHO_BOOST ], + [ 73, MoveId.COUNTER ], + [ 73, MoveId.MIRROR_COAT ], ], 3: [ - [ 1, Moves.CONFUSION ], // Custom - [ 1, Moves.WRAP ], - [ 1, Moves.LEER ], - [ 7, Moves.NIGHT_SHADE ], - [ 13, Moves.DOUBLE_TEAM ], - [ 19, Moves.KNOCK_OFF ], - [ 25, Moves.PURSUIT ], - [ 31, Moves.PSYCHIC ], - [ 37, Moves.SWIFT ], - [ 43, Moves.PSYCHO_SHIFT ], - [ 49, Moves.ZEN_HEADBUTT ], - [ 55, Moves.AGILITY ], - [ 61, Moves.RECOVER ], - [ 67, Moves.PSYCHO_BOOST ], - [ 73, Moves.EXTREME_SPEED ], + [ 1, MoveId.CONFUSION ], // Custom + [ 1, MoveId.WRAP ], + [ 1, MoveId.LEER ], + [ 7, MoveId.NIGHT_SHADE ], + [ 13, MoveId.DOUBLE_TEAM ], + [ 19, MoveId.KNOCK_OFF ], + [ 25, MoveId.PURSUIT ], + [ 31, MoveId.PSYCHIC ], + [ 37, MoveId.SWIFT ], + [ 43, MoveId.PSYCHO_SHIFT ], + [ 49, MoveId.ZEN_HEADBUTT ], + [ 55, MoveId.AGILITY ], + [ 61, MoveId.RECOVER ], + [ 67, MoveId.PSYCHO_BOOST ], + [ 73, MoveId.EXTREME_SPEED ], ], }, - [Species.WORMADAM]: { + [SpeciesId.WORMADAM]: { 1: [ - [ EVOLVE_MOVE, Moves.QUIVER_DANCE ], - [ 1, Moves.STRUGGLE_BUG ], // Previous Stage Move, Custom - [ 1, Moves.TACKLE ], - [ 1, Moves.PROTECT ], - [ 1, Moves.SUCKER_PUNCH ], - [ 1, Moves.BUG_BITE ], - [ 1, Moves.PROTECT ], - [ 10, Moves.TACKLE ], - [ 20, Moves.STRING_SHOT ], - [ 23, Moves.CONFUSION ], - [ 26, Moves.ROCK_BLAST ], - [ 29, Moves.HARDEN ], - [ 32, Moves.PSYBEAM ], - [ 35, Moves.INFESTATION ], - [ 38, Moves.FLAIL ], - [ 41, Moves.ATTRACT ], - [ 44, Moves.PSYCHIC ], - [ 47, Moves.FISSURE ], - [ 50, Moves.BUG_BUZZ ], + [ EVOLVE_MOVE, MoveId.QUIVER_DANCE ], + [ 1, MoveId.STRUGGLE_BUG ], // Previous Stage Move, Custom + [ 1, MoveId.TACKLE ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.SUCKER_PUNCH ], + [ 1, MoveId.BUG_BITE ], + [ 1, MoveId.PROTECT ], + [ 10, MoveId.TACKLE ], + [ 20, MoveId.STRING_SHOT ], + [ 23, MoveId.CONFUSION ], + [ 26, MoveId.ROCK_BLAST ], + [ 29, MoveId.HARDEN ], + [ 32, MoveId.PSYBEAM ], + [ 35, MoveId.INFESTATION ], + [ 38, MoveId.FLAIL ], + [ 41, MoveId.ATTRACT ], + [ 44, MoveId.PSYCHIC ], + [ 47, MoveId.FISSURE ], + [ 50, MoveId.BUG_BUZZ ], ], 2: [ - [ EVOLVE_MOVE, Moves.QUIVER_DANCE ], - [ 1, Moves.STRUGGLE_BUG ], // Previous Stage Move, Custom - [ 1, Moves.METAL_BURST ], - [ 1, Moves.TACKLE ], - [ 1, Moves.PROTECT ], - [ 1, Moves.SUCKER_PUNCH ], - [ 1, Moves.BUG_BITE ], - [ 1, Moves.PROTECT ], - [ 10, Moves.TACKLE ], - [ 20, Moves.STRING_SHOT ], - [ 23, Moves.CONFUSION ], - [ 26, Moves.METAL_BURST ], - [ 29, Moves.METAL_SOUND ], - [ 32, Moves.PSYBEAM ], - [ 35, Moves.INFESTATION ], - [ 38, Moves.FLAIL ], - [ 41, Moves.ATTRACT ], - [ 44, Moves.PSYCHIC ], - [ 47, Moves.IRON_HEAD ], - [ 50, Moves.BUG_BUZZ ], + [ EVOLVE_MOVE, MoveId.QUIVER_DANCE ], + [ 1, MoveId.STRUGGLE_BUG ], // Previous Stage Move, Custom + [ 1, MoveId.METAL_BURST ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.SUCKER_PUNCH ], + [ 1, MoveId.BUG_BITE ], + [ 1, MoveId.PROTECT ], + [ 10, MoveId.TACKLE ], + [ 20, MoveId.STRING_SHOT ], + [ 23, MoveId.CONFUSION ], + [ 26, MoveId.METAL_BURST ], + [ 29, MoveId.METAL_SOUND ], + [ 32, MoveId.PSYBEAM ], + [ 35, MoveId.INFESTATION ], + [ 38, MoveId.FLAIL ], + [ 41, MoveId.ATTRACT ], + [ 44, MoveId.PSYCHIC ], + [ 47, MoveId.IRON_HEAD ], + [ 50, MoveId.BUG_BUZZ ], ], }, - [Species.ROTOM]: { + [SpeciesId.ROTOM]: { 1: [ - [ 1, Moves.OVERHEAT ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.ASTONISH ], - [ 5, Moves.THUNDER_SHOCK ], - [ 10, Moves.CONFUSE_RAY ], - [ 15, Moves.CHARGE ], - [ 20, Moves.ELECTRO_BALL ], - [ 25, Moves.THUNDER_WAVE ], - [ 30, Moves.SHOCK_WAVE ], - [ 35, Moves.HEX ], - [ 40, Moves.SUBSTITUTE ], - [ 45, Moves.TRICK ], - [ 50, Moves.DISCHARGE ], - [ 55, Moves.UPROAR ], + [ 1, MoveId.OVERHEAT ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.ASTONISH ], + [ 5, MoveId.THUNDER_SHOCK ], + [ 10, MoveId.CONFUSE_RAY ], + [ 15, MoveId.CHARGE ], + [ 20, MoveId.ELECTRO_BALL ], + [ 25, MoveId.THUNDER_WAVE ], + [ 30, MoveId.SHOCK_WAVE ], + [ 35, MoveId.HEX ], + [ 40, MoveId.SUBSTITUTE ], + [ 45, MoveId.TRICK ], + [ 50, MoveId.DISCHARGE ], + [ 55, MoveId.UPROAR ], ], 2: [ - [ 1, Moves.HYDRO_PUMP ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.ASTONISH ], - [ 5, Moves.THUNDER_SHOCK ], - [ 10, Moves.CONFUSE_RAY ], - [ 15, Moves.CHARGE ], - [ 20, Moves.ELECTRO_BALL ], - [ 25, Moves.THUNDER_WAVE ], - [ 30, Moves.SHOCK_WAVE ], - [ 35, Moves.HEX ], - [ 40, Moves.SUBSTITUTE ], - [ 45, Moves.TRICK ], - [ 50, Moves.DISCHARGE ], - [ 55, Moves.UPROAR ], + [ 1, MoveId.HYDRO_PUMP ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.ASTONISH ], + [ 5, MoveId.THUNDER_SHOCK ], + [ 10, MoveId.CONFUSE_RAY ], + [ 15, MoveId.CHARGE ], + [ 20, MoveId.ELECTRO_BALL ], + [ 25, MoveId.THUNDER_WAVE ], + [ 30, MoveId.SHOCK_WAVE ], + [ 35, MoveId.HEX ], + [ 40, MoveId.SUBSTITUTE ], + [ 45, MoveId.TRICK ], + [ 50, MoveId.DISCHARGE ], + [ 55, MoveId.UPROAR ], ], 3: [ - [ 1, Moves.BLIZZARD ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.ASTONISH ], - [ 5, Moves.THUNDER_SHOCK ], - [ 10, Moves.CONFUSE_RAY ], - [ 15, Moves.CHARGE ], - [ 20, Moves.ELECTRO_BALL ], - [ 25, Moves.THUNDER_WAVE ], - [ 30, Moves.SHOCK_WAVE ], - [ 35, Moves.HEX ], - [ 40, Moves.SUBSTITUTE ], - [ 45, Moves.TRICK ], - [ 50, Moves.DISCHARGE ], - [ 55, Moves.UPROAR ], + [ 1, MoveId.BLIZZARD ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.ASTONISH ], + [ 5, MoveId.THUNDER_SHOCK ], + [ 10, MoveId.CONFUSE_RAY ], + [ 15, MoveId.CHARGE ], + [ 20, MoveId.ELECTRO_BALL ], + [ 25, MoveId.THUNDER_WAVE ], + [ 30, MoveId.SHOCK_WAVE ], + [ 35, MoveId.HEX ], + [ 40, MoveId.SUBSTITUTE ], + [ 45, MoveId.TRICK ], + [ 50, MoveId.DISCHARGE ], + [ 55, MoveId.UPROAR ], ], 4: [ - [ 1, Moves.AIR_SLASH ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.ASTONISH ], - [ 5, Moves.THUNDER_SHOCK ], - [ 10, Moves.CONFUSE_RAY ], - [ 15, Moves.CHARGE ], - [ 20, Moves.ELECTRO_BALL ], - [ 25, Moves.THUNDER_WAVE ], - [ 30, Moves.SHOCK_WAVE ], - [ 35, Moves.HEX ], - [ 40, Moves.SUBSTITUTE ], - [ 45, Moves.TRICK ], - [ 50, Moves.DISCHARGE ], - [ 55, Moves.UPROAR ], + [ 1, MoveId.AIR_SLASH ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.ASTONISH ], + [ 5, MoveId.THUNDER_SHOCK ], + [ 10, MoveId.CONFUSE_RAY ], + [ 15, MoveId.CHARGE ], + [ 20, MoveId.ELECTRO_BALL ], + [ 25, MoveId.THUNDER_WAVE ], + [ 30, MoveId.SHOCK_WAVE ], + [ 35, MoveId.HEX ], + [ 40, MoveId.SUBSTITUTE ], + [ 45, MoveId.TRICK ], + [ 50, MoveId.DISCHARGE ], + [ 55, MoveId.UPROAR ], ], 5: [ - [ 1, Moves.LEAF_STORM ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.ASTONISH ], - [ 5, Moves.THUNDER_SHOCK ], - [ 10, Moves.CONFUSE_RAY ], - [ 15, Moves.CHARGE ], - [ 20, Moves.ELECTRO_BALL ], - [ 25, Moves.THUNDER_WAVE ], - [ 30, Moves.SHOCK_WAVE ], - [ 35, Moves.HEX ], - [ 40, Moves.SUBSTITUTE ], - [ 45, Moves.TRICK ], - [ 50, Moves.DISCHARGE ], - [ 55, Moves.UPROAR ], + [ 1, MoveId.LEAF_STORM ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.ASTONISH ], + [ 5, MoveId.THUNDER_SHOCK ], + [ 10, MoveId.CONFUSE_RAY ], + [ 15, MoveId.CHARGE ], + [ 20, MoveId.ELECTRO_BALL ], + [ 25, MoveId.THUNDER_WAVE ], + [ 30, MoveId.SHOCK_WAVE ], + [ 35, MoveId.HEX ], + [ 40, MoveId.SUBSTITUTE ], + [ 45, MoveId.TRICK ], + [ 50, MoveId.DISCHARGE ], + [ 55, MoveId.UPROAR ], ], }, - [Species.SHAYMIN]: { + [SpeciesId.SHAYMIN]: { 1: [ - [ 1, Moves.LEAFAGE ], // Custom - [ 1, Moves.GROWTH ], - [ 10, Moves.MAGICAL_LEAF ], - [ 19, Moves.LEECH_SEED ], - [ 28, Moves.QUICK_ATTACK ], - [ 37, Moves.SWEET_SCENT ], - [ 46, Moves.NATURAL_GIFT ], - [ 55, Moves.WORRY_SEED ], - [ 64, Moves.AIR_SLASH ], - [ 73, Moves.ENERGY_BALL ], - [ 82, Moves.SWEET_KISS ], - [ 91, Moves.LEAF_STORM ], - [ 100, Moves.SEED_FLARE ], + [ 1, MoveId.LEAFAGE ], // Custom + [ 1, MoveId.GROWTH ], + [ 10, MoveId.MAGICAL_LEAF ], + [ 19, MoveId.LEECH_SEED ], + [ 28, MoveId.QUICK_ATTACK ], + [ 37, MoveId.SWEET_SCENT ], + [ 46, MoveId.NATURAL_GIFT ], + [ 55, MoveId.WORRY_SEED ], + [ 64, MoveId.AIR_SLASH ], + [ 73, MoveId.ENERGY_BALL ], + [ 82, MoveId.SWEET_KISS ], + [ 91, MoveId.LEAF_STORM ], + [ 100, MoveId.SEED_FLARE ], ] }, - [Species.BASCULIN]: { + [SpeciesId.BASCULIN]: { 1: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], - [ 4, Moves.TACKLE ], - [ 8, Moves.FLAIL ], - [ 12, Moves.AQUA_JET ], - [ 16, Moves.BITE ], - [ 20, Moves.SCARY_FACE ], - [ 24, Moves.HEADBUTT ], - [ 28, Moves.SOAK ], - [ 32, Moves.CRUNCH ], - [ 36, Moves.TAKE_DOWN ], - [ 40, Moves.FINAL_GAMBIT ], - [ 44, Moves.WAVE_CRASH ], - [ 48, Moves.THRASH ], - [ 52, Moves.DOUBLE_EDGE ], - [ 56, Moves.HEAD_SMASH ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_GUN ], + [ 4, MoveId.TACKLE ], + [ 8, MoveId.FLAIL ], + [ 12, MoveId.AQUA_JET ], + [ 16, MoveId.BITE ], + [ 20, MoveId.SCARY_FACE ], + [ 24, MoveId.HEADBUTT ], + [ 28, MoveId.SOAK ], + [ 32, MoveId.CRUNCH ], + [ 36, MoveId.TAKE_DOWN ], + [ 40, MoveId.FINAL_GAMBIT ], + [ 44, MoveId.WAVE_CRASH ], + [ 48, MoveId.THRASH ], + [ 52, MoveId.DOUBLE_EDGE ], + [ 56, MoveId.HEAD_SMASH ], ], 2: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], - [ 4, Moves.TACKLE ], - [ 8, Moves.FLAIL ], - [ 12, Moves.AQUA_JET ], - [ 16, Moves.BITE ], - [ 20, Moves.SCARY_FACE ], - [ 24, Moves.HEADBUTT ], - [ 28, Moves.SOAK ], - [ 32, Moves.CRUNCH ], - [ 36, Moves.TAKE_DOWN ], - [ 40, Moves.UPROAR ], - [ 44, Moves.WAVE_CRASH ], - [ 48, Moves.THRASH ], - [ 52, Moves.DOUBLE_EDGE ], - [ 56, Moves.HEAD_SMASH ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_GUN ], + [ 4, MoveId.TACKLE ], + [ 8, MoveId.FLAIL ], + [ 12, MoveId.AQUA_JET ], + [ 16, MoveId.BITE ], + [ 20, MoveId.SCARY_FACE ], + [ 24, MoveId.HEADBUTT ], + [ 28, MoveId.SOAK ], + [ 32, MoveId.CRUNCH ], + [ 36, MoveId.TAKE_DOWN ], + [ 40, MoveId.UPROAR ], + [ 44, MoveId.WAVE_CRASH ], + [ 48, MoveId.THRASH ], + [ 52, MoveId.DOUBLE_EDGE ], + [ 56, MoveId.HEAD_SMASH ], ] }, - [Species.KYUREM]: { + [SpeciesId.KYUREM]: { 1: [ - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.ANCIENT_POWER ], - [ 1, Moves.NOBLE_ROAR ], - [ 1, Moves.FREEZE_DRY ], - [ 8, Moves.SLASH ], - [ 16, Moves.ENDEAVOR ], - [ 24, Moves.DRAGON_PULSE ], - [ 32, Moves.ICE_BEAM ], - [ 40, Moves.HYPER_VOICE ], - [ 48, Moves.FUSION_BOLT ], - [ 56, Moves.BLIZZARD ], - [ 64, Moves.IMPRISON ], - [ 72, Moves.OUTRAGE ], - [ 80, Moves.FREEZE_SHOCK ], - [ 88, Moves.SHEER_COLD ], + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.ANCIENT_POWER ], + [ 1, MoveId.NOBLE_ROAR ], + [ 1, MoveId.FREEZE_DRY ], + [ 8, MoveId.SLASH ], + [ 16, MoveId.ENDEAVOR ], + [ 24, MoveId.DRAGON_PULSE ], + [ 32, MoveId.ICE_BEAM ], + [ 40, MoveId.HYPER_VOICE ], + [ 48, MoveId.FUSION_BOLT ], + [ 56, MoveId.BLIZZARD ], + [ 64, MoveId.IMPRISON ], + [ 72, MoveId.OUTRAGE ], + [ 80, MoveId.FREEZE_SHOCK ], + [ 88, MoveId.SHEER_COLD ], ], 2: [ - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.ANCIENT_POWER ], - [ 1, Moves.NOBLE_ROAR ], - [ 1, Moves.FREEZE_DRY ], - [ 8, Moves.SLASH ], - [ 16, Moves.ENDEAVOR ], - [ 24, Moves.DRAGON_PULSE ], - [ 32, Moves.ICE_BEAM ], - [ 40, Moves.HYPER_VOICE ], - [ 48, Moves.FUSION_FLARE ], - [ 56, Moves.BLIZZARD ], - [ 64, Moves.IMPRISON ], - [ 72, Moves.OUTRAGE ], - [ 80, Moves.ICE_BURN ], - [ 88, Moves.SHEER_COLD ], + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.ANCIENT_POWER ], + [ 1, MoveId.NOBLE_ROAR ], + [ 1, MoveId.FREEZE_DRY ], + [ 8, MoveId.SLASH ], + [ 16, MoveId.ENDEAVOR ], + [ 24, MoveId.DRAGON_PULSE ], + [ 32, MoveId.ICE_BEAM ], + [ 40, MoveId.HYPER_VOICE ], + [ 48, MoveId.FUSION_FLARE ], + [ 56, MoveId.BLIZZARD ], + [ 64, MoveId.IMPRISON ], + [ 72, MoveId.OUTRAGE ], + [ 80, MoveId.ICE_BURN ], + [ 88, MoveId.SHEER_COLD ], ], }, - [Species.MEOWSTIC]: { + [SpeciesId.MEOWSTIC]: { 1: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.MAGICAL_LEAF ], - [ 1, Moves.DISARMING_VOICE ], - [ 9, Moves.CONFUSION ], - [ 12, Moves.STORED_POWER ], - [ 15, Moves.CHARGE_BEAM ], - [ 18, Moves.COVET ], - [ 21, Moves.PSYBEAM ], - [ 24, Moves.SUCKER_PUNCH ], - [ 29, Moves.ROLE_PLAY ], - [ 34, Moves.LIGHT_SCREEN ], - [ 34, Moves.REFLECT ], - [ 39, Moves.PSYSHOCK ], - [ 44, Moves.EXTRASENSORY ], - [ 49, Moves.SHADOW_BALL ], - [ 54, Moves.PSYCHIC ], - [ 59, Moves.FUTURE_SIGHT ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.MAGICAL_LEAF ], + [ 1, MoveId.DISARMING_VOICE ], + [ 9, MoveId.CONFUSION ], + [ 12, MoveId.STORED_POWER ], + [ 15, MoveId.CHARGE_BEAM ], + [ 18, MoveId.COVET ], + [ 21, MoveId.PSYBEAM ], + [ 24, MoveId.SUCKER_PUNCH ], + [ 29, MoveId.ROLE_PLAY ], + [ 34, MoveId.LIGHT_SCREEN ], + [ 34, MoveId.REFLECT ], + [ 39, MoveId.PSYSHOCK ], + [ 44, MoveId.EXTRASENSORY ], + [ 49, MoveId.SHADOW_BALL ], + [ 54, MoveId.PSYCHIC ], + [ 59, MoveId.FUTURE_SIGHT ], ], }, - [Species.HOOPA]: { + [SpeciesId.HOOPA]: { 1: [ - [ 1, Moves.CONFUSION ], - [ 1, Moves.DESTINY_BOND ], - [ 1, Moves.ALLY_SWITCH ], - [ 6, Moves.ASTONISH ], - [ 10, Moves.TRICK ], - [ 15, Moves.LIGHT_SCREEN ], - [ 19, Moves.PSYBEAM ], - [ 25, Moves.SKILL_SWAP ], - [ 29, Moves.GUARD_SPLIT ], - [ 29, Moves.POWER_SPLIT ], - [ 46, Moves.KNOCK_OFF ], - [ 50, Moves.TRICK_ROOM ], - [ 50, Moves.WONDER_ROOM ], - [ 55, Moves.DARK_PULSE ], - [ 75, Moves.PSYCHIC ], - [ 85, Moves.HYPERSPACE_FURY ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.DESTINY_BOND ], + [ 1, MoveId.ALLY_SWITCH ], + [ 6, MoveId.ASTONISH ], + [ 10, MoveId.TRICK ], + [ 15, MoveId.LIGHT_SCREEN ], + [ 19, MoveId.PSYBEAM ], + [ 25, MoveId.SKILL_SWAP ], + [ 29, MoveId.GUARD_SPLIT ], + [ 29, MoveId.POWER_SPLIT ], + [ 46, MoveId.KNOCK_OFF ], + [ 50, MoveId.TRICK_ROOM ], + [ 50, MoveId.WONDER_ROOM ], + [ 55, MoveId.DARK_PULSE ], + [ 75, MoveId.PSYCHIC ], + [ 85, MoveId.HYPERSPACE_FURY ], ], }, - [Species.GRENINJA]: { + [SpeciesId.GRENINJA]: { 1: [ - [ EVOLVE_MOVE, Moves.WATER_SHURIKEN ], - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.ROUND ], // Previous Stage Move - [ 1, Moves.FLING ], // Previous Stage Move - [ 1, Moves.SMACK_DOWN ], // Previous Stage Move - [ 1, Moves.BOUNCE ], // Previous Stage Move - [ 1, Moves.HAZE ], - [ 1, Moves.MAT_BLOCK ], - [ 1, Moves.ROLE_PLAY ], - [ 1, Moves.NIGHT_SLASH ], - [ 10, Moves.LICK ], - [ 14, Moves.WATER_PULSE ], - [ 19, Moves.SMOKESCREEN ], - [ 23, Moves.SHADOW_SNEAK ], - [ 28, Moves.SPIKES ], - [ 33, Moves.AERIAL_ACE ], - [ 42, Moves.SUBSTITUTE ], - [ 49, Moves.EXTRASENSORY ], - [ 56, Moves.DOUBLE_TEAM ], - [ 68, Moves.HYDRO_PUMP ], + [ EVOLVE_MOVE, MoveId.WATER_SHURIKEN ], + [ 1, MoveId.POUND ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.ROUND ], // Previous Stage Move + [ 1, MoveId.FLING ], // Previous Stage Move + [ 1, MoveId.SMACK_DOWN ], // Previous Stage Move + [ 1, MoveId.BOUNCE ], // Previous Stage Move + [ 1, MoveId.HAZE ], + [ 1, MoveId.MAT_BLOCK ], + [ 1, MoveId.ROLE_PLAY ], + [ 1, MoveId.NIGHT_SLASH ], + [ 10, MoveId.LICK ], + [ 14, MoveId.WATER_PULSE ], + [ 19, MoveId.SMOKESCREEN ], + [ 23, MoveId.SHADOW_SNEAK ], + [ 28, MoveId.SPIKES ], + [ 33, MoveId.AERIAL_ACE ], + [ 42, MoveId.SUBSTITUTE ], + [ 49, MoveId.EXTRASENSORY ], + [ 56, MoveId.DOUBLE_TEAM ], + [ 68, MoveId.HYDRO_PUMP ], ], }, - [Species.LYCANROC]: { + [SpeciesId.LYCANROC]: { 1: [ - [ EVOLVE_MOVE, Moves.COUNTER ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.REVERSAL ], - [ 1, Moves.ENDURE ], - [ 1, Moves.TAUNT ], - [ 12, Moves.ROCK_THROW ], - [ 16, Moves.HOWL ], - [ 20, Moves.BITE ], - [ 24, Moves.ROCK_TOMB ], - [ 30, Moves.ROAR ], - [ 36, Moves.ROCK_SLIDE ], - [ 42, Moves.CRUNCH ], - [ 48, Moves.SCARY_FACE ], - [ 54, Moves.STEALTH_ROCK ], - [ 60, Moves.STONE_EDGE ], + [ EVOLVE_MOVE, MoveId.COUNTER ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.REVERSAL ], + [ 1, MoveId.ENDURE ], + [ 1, MoveId.TAUNT ], + [ 12, MoveId.ROCK_THROW ], + [ 16, MoveId.HOWL ], + [ 20, MoveId.BITE ], + [ 24, MoveId.ROCK_TOMB ], + [ 30, MoveId.ROAR ], + [ 36, MoveId.ROCK_SLIDE ], + [ 42, MoveId.CRUNCH ], + [ 48, MoveId.SCARY_FACE ], + [ 54, MoveId.STEALTH_ROCK ], + [ 60, MoveId.STONE_EDGE ], ], 2: [ - [ EVOLVE_MOVE, Moves.CRUSH_CLAW ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.COUNTER ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.REVERSAL ], - [ 1, Moves.ENDURE ], - [ 1, Moves.TAUNT ], - [ 1, Moves.SUCKER_PUNCH ], - [ 1, Moves.QUICK_GUARD ], - [ 1, Moves.ACCELEROCK ], - [ 12, Moves.ROCK_THROW ], - [ 16, Moves.HOWL ], - [ 20, Moves.BITE ], - [ 24, Moves.ROCK_TOMB ], - [ 30, Moves.ROAR ], - [ 36, Moves.ROCK_SLIDE ], - [ 42, Moves.CRUNCH ], - [ 48, Moves.SCARY_FACE ], - [ 54, Moves.STEALTH_ROCK ], - [ 60, Moves.STONE_EDGE ], + [ EVOLVE_MOVE, MoveId.CRUSH_CLAW ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.COUNTER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.REVERSAL ], + [ 1, MoveId.ENDURE ], + [ 1, MoveId.TAUNT ], + [ 1, MoveId.SUCKER_PUNCH ], + [ 1, MoveId.QUICK_GUARD ], + [ 1, MoveId.ACCELEROCK ], + [ 12, MoveId.ROCK_THROW ], + [ 16, MoveId.HOWL ], + [ 20, MoveId.BITE ], + [ 24, MoveId.ROCK_TOMB ], + [ 30, MoveId.ROAR ], + [ 36, MoveId.ROCK_SLIDE ], + [ 42, MoveId.CRUNCH ], + [ 48, MoveId.SCARY_FACE ], + [ 54, MoveId.STEALTH_ROCK ], + [ 60, MoveId.STONE_EDGE ], ], }, - [Species.NECROZMA]: { + [SpeciesId.NECROZMA]: { 1: [ - [ EVOLVE_MOVE, Moves.SUNSTEEL_STRIKE ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.MORNING_SUN ], - [ 1, Moves.MOONLIGHT ], - [ 1, Moves.GRAVITY ], - [ 1, Moves.CHARGE_BEAM ], - [ 8, Moves.STEALTH_ROCK ], - [ 16, Moves.SLASH ], - [ 24, Moves.NIGHT_SLASH ], - [ 32, Moves.PSYCHO_CUT ], - [ 40, Moves.STORED_POWER ], - [ 48, Moves.ROCK_BLAST ], - [ 56, Moves.IRON_DEFENSE ], - [ 64, Moves.POWER_GEM ], - [ 72, Moves.PHOTON_GEYSER ], - [ 80, Moves.AUTOTOMIZE ], - [ 88, Moves.PRISMATIC_LASER ], + [ EVOLVE_MOVE, MoveId.SUNSTEEL_STRIKE ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.MORNING_SUN ], + [ 1, MoveId.MOONLIGHT ], + [ 1, MoveId.GRAVITY ], + [ 1, MoveId.CHARGE_BEAM ], + [ 8, MoveId.STEALTH_ROCK ], + [ 16, MoveId.SLASH ], + [ 24, MoveId.NIGHT_SLASH ], + [ 32, MoveId.PSYCHO_CUT ], + [ 40, MoveId.STORED_POWER ], + [ 48, MoveId.ROCK_BLAST ], + [ 56, MoveId.IRON_DEFENSE ], + [ 64, MoveId.POWER_GEM ], + [ 72, MoveId.PHOTON_GEYSER ], + [ 80, MoveId.AUTOTOMIZE ], + [ 88, MoveId.PRISMATIC_LASER ], ], 2: [ - [ EVOLVE_MOVE, Moves.MOONGEIST_BEAM ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.MORNING_SUN ], - [ 1, Moves.MOONLIGHT ], - [ 1, Moves.GRAVITY ], - [ 1, Moves.CHARGE_BEAM ], - [ 8, Moves.STEALTH_ROCK ], - [ 16, Moves.SLASH ], - [ 24, Moves.NIGHT_SLASH ], - [ 32, Moves.PSYCHO_CUT ], - [ 40, Moves.STORED_POWER ], - [ 48, Moves.ROCK_BLAST ], - [ 56, Moves.IRON_DEFENSE ], - [ 64, Moves.POWER_GEM ], - [ 72, Moves.PHOTON_GEYSER ], - [ 80, Moves.AUTOTOMIZE ], - [ 88, Moves.PRISMATIC_LASER ], + [ EVOLVE_MOVE, MoveId.MOONGEIST_BEAM ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.MORNING_SUN ], + [ 1, MoveId.MOONLIGHT ], + [ 1, MoveId.GRAVITY ], + [ 1, MoveId.CHARGE_BEAM ], + [ 8, MoveId.STEALTH_ROCK ], + [ 16, MoveId.SLASH ], + [ 24, MoveId.NIGHT_SLASH ], + [ 32, MoveId.PSYCHO_CUT ], + [ 40, MoveId.STORED_POWER ], + [ 48, MoveId.ROCK_BLAST ], + [ 56, MoveId.IRON_DEFENSE ], + [ 64, MoveId.POWER_GEM ], + [ 72, MoveId.PHOTON_GEYSER ], + [ 80, MoveId.AUTOTOMIZE ], + [ 88, MoveId.PRISMATIC_LASER ], ], 3: [ - [ EVOLVE_MOVE, Moves.SUNSTEEL_STRIKE ], - [ EVOLVE_MOVE, Moves.MOONGEIST_BEAM ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.MORNING_SUN ], - [ 1, Moves.MOONLIGHT ], - [ 1, Moves.GRAVITY ], - [ 1, Moves.CHARGE_BEAM ], - [ 8, Moves.STEALTH_ROCK ], - [ 16, Moves.SLASH ], - [ 24, Moves.NIGHT_SLASH ], - [ 32, Moves.PSYCHO_CUT ], - [ 40, Moves.STORED_POWER ], - [ 48, Moves.ROCK_BLAST ], - [ 56, Moves.IRON_DEFENSE ], - [ 64, Moves.POWER_GEM ], - [ 72, Moves.PHOTON_GEYSER ], - [ 80, Moves.AUTOTOMIZE ], - [ 88, Moves.PRISMATIC_LASER ], + [ EVOLVE_MOVE, MoveId.SUNSTEEL_STRIKE ], + [ EVOLVE_MOVE, MoveId.MOONGEIST_BEAM ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.MORNING_SUN ], + [ 1, MoveId.MOONLIGHT ], + [ 1, MoveId.GRAVITY ], + [ 1, MoveId.CHARGE_BEAM ], + [ 8, MoveId.STEALTH_ROCK ], + [ 16, MoveId.SLASH ], + [ 24, MoveId.NIGHT_SLASH ], + [ 32, MoveId.PSYCHO_CUT ], + [ 40, MoveId.STORED_POWER ], + [ 48, MoveId.ROCK_BLAST ], + [ 56, MoveId.IRON_DEFENSE ], + [ 64, MoveId.POWER_GEM ], + [ 72, MoveId.PHOTON_GEYSER ], + [ 80, MoveId.AUTOTOMIZE ], + [ 88, MoveId.PRISMATIC_LASER ], ], }, - [Species.TOXTRICITY]: { + [SpeciesId.TOXTRICITY]: { 1: [ - [ EVOLVE_MOVE, Moves.SPARK ], - [ 1, Moves.LEER ], - [ 1, Moves.GROWL ], - [ 1, Moves.ACID ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.FLAIL ], - [ 1, Moves.ACID_SPRAY ], - [ 1, Moves.BELCH ], - [ 1, Moves.NOBLE_ROAR ], - [ 1, Moves.NUZZLE ], - [ 1, Moves.TEARFUL_LOOK ], - [ 4, Moves.CHARGE ], - [ 8, Moves.SHOCK_WAVE ], - [ 12, Moves.SCARY_FACE ], - [ 16, Moves.TAUNT ], - [ 24, Moves.SCREECH ], - [ 28, Moves.SWAGGER ], - [ 32, Moves.TOXIC ], - [ 36, Moves.DISCHARGE ], - [ 40, Moves.POISON_JAB ], - [ 44, Moves.OVERDRIVE ], - [ 48, Moves.BOOMBURST ], - [ 52, Moves.MAGNETIC_FLUX ], + [ EVOLVE_MOVE, MoveId.SPARK ], + [ 1, MoveId.LEER ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.ACID ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.ACID_SPRAY ], + [ 1, MoveId.BELCH ], + [ 1, MoveId.NOBLE_ROAR ], + [ 1, MoveId.NUZZLE ], + [ 1, MoveId.TEARFUL_LOOK ], + [ 4, MoveId.CHARGE ], + [ 8, MoveId.SHOCK_WAVE ], + [ 12, MoveId.SCARY_FACE ], + [ 16, MoveId.TAUNT ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.SWAGGER ], + [ 32, MoveId.TOXIC ], + [ 36, MoveId.DISCHARGE ], + [ 40, MoveId.POISON_JAB ], + [ 44, MoveId.OVERDRIVE ], + [ 48, MoveId.BOOMBURST ], + [ 52, MoveId.MAGNETIC_FLUX ], ], }, - [Species.INDEEDEE]: { + [SpeciesId.INDEEDEE]: { 1: [ - [ 1, Moves.STORED_POWER ], - [ 1, Moves.PLAY_NICE ], - [ 5, Moves.BATON_PASS ], - [ 10, Moves.DISARMING_VOICE ], - [ 15, Moves.PSYBEAM ], - [ 20, Moves.HELPING_HAND ], - [ 25, Moves.FOLLOW_ME ], - [ 30, Moves.HEALING_WISH ], - [ 35, Moves.PSYCHIC ], - [ 40, Moves.CALM_MIND ], - [ 45, Moves.GUARD_SPLIT ], - [ 50, Moves.PSYCHIC_TERRAIN ], + [ 1, MoveId.STORED_POWER ], + [ 1, MoveId.PLAY_NICE ], + [ 5, MoveId.BATON_PASS ], + [ 10, MoveId.DISARMING_VOICE ], + [ 15, MoveId.PSYBEAM ], + [ 20, MoveId.HELPING_HAND ], + [ 25, MoveId.FOLLOW_ME ], + [ 30, MoveId.HEALING_WISH ], + [ 35, MoveId.PSYCHIC ], + [ 40, MoveId.CALM_MIND ], + [ 45, MoveId.GUARD_SPLIT ], + [ 50, MoveId.PSYCHIC_TERRAIN ], ], }, - [Species.ZACIAN]: { + [SpeciesId.ZACIAN]: { 1: [ - [ EVOLVE_MOVE, Moves.BEHEMOTH_BLADE ], - [ 1, Moves.BITE ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.HOWL ], - [ 1, Moves.QUICK_GUARD ], - [ 1, Moves.SACRED_SWORD ], - [ 11, Moves.SLASH ], - [ 22, Moves.SWORDS_DANCE ], - [ 33, Moves.IRON_HEAD ], - [ 44, Moves.NOBLE_ROAR ], - [ 55, Moves.CRUNCH ], - [ 66, Moves.MOONBLAST ], - [ 77, Moves.CLOSE_COMBAT ], - [ 88, Moves.GIGA_IMPACT ], + [ EVOLVE_MOVE, MoveId.BEHEMOTH_BLADE ], + [ 1, MoveId.BITE ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.HOWL ], + [ 1, MoveId.QUICK_GUARD ], + [ 1, MoveId.SACRED_SWORD ], + [ 11, MoveId.SLASH ], + [ 22, MoveId.SWORDS_DANCE ], + [ 33, MoveId.IRON_HEAD ], + [ 44, MoveId.NOBLE_ROAR ], + [ 55, MoveId.CRUNCH ], + [ 66, MoveId.MOONBLAST ], + [ 77, MoveId.CLOSE_COMBAT ], + [ 88, MoveId.GIGA_IMPACT ], ], }, - [Species.ZAMAZENTA]: { + [SpeciesId.ZAMAZENTA]: { 1: [ - [ EVOLVE_MOVE, Moves.BEHEMOTH_BASH ], - [ 1, Moves.BITE ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.HOWL ], - [ 1, Moves.WIDE_GUARD ], - [ 11, Moves.SLASH ], - [ 22, Moves.IRON_DEFENSE ], - [ 33, Moves.IRON_HEAD ], - [ 44, Moves.METAL_BURST ], - [ 55, Moves.CRUNCH ], - [ 66, Moves.MOONBLAST ], - [ 77, Moves.CLOSE_COMBAT ], - [ 88, Moves.GIGA_IMPACT ], + [ EVOLVE_MOVE, MoveId.BEHEMOTH_BASH ], + [ 1, MoveId.BITE ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.HOWL ], + [ 1, MoveId.WIDE_GUARD ], + [ 11, MoveId.SLASH ], + [ 22, MoveId.IRON_DEFENSE ], + [ 33, MoveId.IRON_HEAD ], + [ 44, MoveId.METAL_BURST ], + [ 55, MoveId.CRUNCH ], + [ 66, MoveId.MOONBLAST ], + [ 77, MoveId.CLOSE_COMBAT ], + [ 88, MoveId.GIGA_IMPACT ], ], }, - [Species.ETERNATUS]: { + [SpeciesId.ETERNATUS]: { 1: [ - [ 1, Moves.AGILITY ], - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.POISON_TAIL ], - [ 1, Moves.DRAGON_TAIL ], - [ 8, Moves.TOXIC ], - [ 16, Moves.VENOSHOCK ], - [ 24, Moves.DRAGON_DANCE ], - [ 32, Moves.CROSS_POISON ], - [ 40, Moves.DRAGON_PULSE ], - [ 48, Moves.FLAMETHROWER ], - [ 56, Moves.DYNAMAX_CANNON ], - [ 64, Moves.COSMIC_POWER ], - [ 72, Moves.RECOVER ], - [ 80, Moves.HYPER_BEAM ], - [ 88, Moves.ETERNABEAM ], + [ 1, MoveId.AGILITY ], + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.POISON_TAIL ], + [ 1, MoveId.DRAGON_TAIL ], + [ 8, MoveId.TOXIC ], + [ 16, MoveId.VENOSHOCK ], + [ 24, MoveId.DRAGON_DANCE ], + [ 32, MoveId.CROSS_POISON ], + [ 40, MoveId.DRAGON_PULSE ], + [ 48, MoveId.FLAMETHROWER ], + [ 56, MoveId.DYNAMAX_CANNON ], + [ 64, MoveId.COSMIC_POWER ], + [ 72, MoveId.RECOVER ], + [ 80, MoveId.HYPER_BEAM ], + [ 88, MoveId.ETERNABEAM ], ], }, - [Species.URSHIFU]: { + [SpeciesId.URSHIFU]: { 1: [ - [ EVOLVE_MOVE, Moves.SURGING_STRIKES ], - [ 1, Moves.LEER ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.ENDURE ], - [ 1, Moves.ROCK_SMASH ], - [ 1, Moves.AQUA_JET ], - [ 12, Moves.AERIAL_ACE ], - [ 16, Moves.SCARY_FACE ], - [ 20, Moves.HEADBUTT ], - [ 24, Moves.BRICK_BREAK ], - [ 28, Moves.DETECT ], - [ 32, Moves.BULK_UP ], - [ 36, Moves.IRON_HEAD ], - [ 40, Moves.DYNAMIC_PUNCH ], - [ 44, Moves.COUNTER ], - [ 48, Moves.CLOSE_COMBAT ], - [ 52, Moves.FOCUS_PUNCH ], + [ EVOLVE_MOVE, MoveId.SURGING_STRIKES ], + [ 1, MoveId.LEER ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.ENDURE ], + [ 1, MoveId.ROCK_SMASH ], + [ 1, MoveId.AQUA_JET ], + [ 12, MoveId.AERIAL_ACE ], + [ 16, MoveId.SCARY_FACE ], + [ 20, MoveId.HEADBUTT ], + [ 24, MoveId.BRICK_BREAK ], + [ 28, MoveId.DETECT ], + [ 32, MoveId.BULK_UP ], + [ 36, MoveId.IRON_HEAD ], + [ 40, MoveId.DYNAMIC_PUNCH ], + [ 44, MoveId.COUNTER ], + [ 48, MoveId.CLOSE_COMBAT ], + [ 52, MoveId.FOCUS_PUNCH ], ], 2: [ - [ EVOLVE_MOVE, Moves.WICKED_BLOW ], - [ 1, Moves.LEER ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.ENDURE ], - [ 1, Moves.ROCK_SMASH ], - [ 1, Moves.SUCKER_PUNCH ], - [ 12, Moves.AERIAL_ACE ], - [ 16, Moves.SCARY_FACE ], - [ 20, Moves.HEADBUTT ], - [ 24, Moves.BRICK_BREAK ], - [ 28, Moves.DETECT ], - [ 32, Moves.BULK_UP ], - [ 36, Moves.IRON_HEAD ], - [ 40, Moves.DYNAMIC_PUNCH ], - [ 44, Moves.COUNTER ], - [ 48, Moves.CLOSE_COMBAT ], - [ 52, Moves.FOCUS_PUNCH ], + [ EVOLVE_MOVE, MoveId.WICKED_BLOW ], + [ 1, MoveId.LEER ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.ENDURE ], + [ 1, MoveId.ROCK_SMASH ], + [ 1, MoveId.SUCKER_PUNCH ], + [ 12, MoveId.AERIAL_ACE ], + [ 16, MoveId.SCARY_FACE ], + [ 20, MoveId.HEADBUTT ], + [ 24, MoveId.BRICK_BREAK ], + [ 28, MoveId.DETECT ], + [ 32, MoveId.BULK_UP ], + [ 36, MoveId.IRON_HEAD ], + [ 40, MoveId.DYNAMIC_PUNCH ], + [ 44, MoveId.COUNTER ], + [ 48, MoveId.CLOSE_COMBAT ], + [ 52, MoveId.FOCUS_PUNCH ], ], 3: [ - [ EVOLVE_MOVE, Moves.SURGING_STRIKES ], - [ 1, Moves.LEER ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.ENDURE ], - [ 1, Moves.ROCK_SMASH ], - [ 1, Moves.AQUA_JET ], - [ 12, Moves.AERIAL_ACE ], - [ 16, Moves.SCARY_FACE ], - [ 20, Moves.HEADBUTT ], - [ 24, Moves.BRICK_BREAK ], - [ 28, Moves.DETECT ], - [ 32, Moves.BULK_UP ], - [ 36, Moves.IRON_HEAD ], - [ 40, Moves.DYNAMIC_PUNCH ], - [ 44, Moves.COUNTER ], - [ 48, Moves.CLOSE_COMBAT ], - [ 52, Moves.FOCUS_PUNCH ], + [ EVOLVE_MOVE, MoveId.SURGING_STRIKES ], + [ 1, MoveId.LEER ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.ENDURE ], + [ 1, MoveId.ROCK_SMASH ], + [ 1, MoveId.AQUA_JET ], + [ 12, MoveId.AERIAL_ACE ], + [ 16, MoveId.SCARY_FACE ], + [ 20, MoveId.HEADBUTT ], + [ 24, MoveId.BRICK_BREAK ], + [ 28, MoveId.DETECT ], + [ 32, MoveId.BULK_UP ], + [ 36, MoveId.IRON_HEAD ], + [ 40, MoveId.DYNAMIC_PUNCH ], + [ 44, MoveId.COUNTER ], + [ 48, MoveId.CLOSE_COMBAT ], + [ 52, MoveId.FOCUS_PUNCH ], ], }, - [Species.CALYREX]: { + [SpeciesId.CALYREX]: { 1: [ - [ 1, Moves.POUND ], - [ 1, Moves.SWORDS_DANCE ], - [ 1, Moves.STOMP ], - [ 1, Moves.DOUBLE_KICK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.THRASH ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.MIST ], - [ 1, Moves.MEGA_DRAIN ], - [ 1, Moves.GROWTH ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.TORMENT ], - [ 1, Moves.TAUNT ], - [ 1, Moves.IRON_DEFENSE ], - [ 1, Moves.AVALANCHE ], - [ 1, Moves.ICICLE_CRASH ], - [ 1, Moves.GLACIAL_LANCE ], - [ 8, Moves.LIFE_DEW ], - [ 16, Moves.GIGA_DRAIN ], - [ 24, Moves.PSYSHOCK ], - [ 32, Moves.HELPING_HAND ], - [ 40, Moves.AROMATHERAPY ], - [ 40, Moves.GRASSY_TERRAIN ], - [ 48, Moves.ENERGY_BALL ], - [ 56, Moves.PSYCHIC ], - [ 64, Moves.LEECH_SEED ], - [ 72, Moves.HEAL_PULSE ], - [ 80, Moves.SOLAR_BEAM ], - [ 88, Moves.FUTURE_SIGHT ], + [ 1, MoveId.POUND ], + [ 1, MoveId.SWORDS_DANCE ], + [ 1, MoveId.STOMP ], + [ 1, MoveId.DOUBLE_KICK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.THRASH ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.MIST ], + [ 1, MoveId.MEGA_DRAIN ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.TORMENT ], + [ 1, MoveId.TAUNT ], + [ 1, MoveId.IRON_DEFENSE ], + [ 1, MoveId.AVALANCHE ], + [ 1, MoveId.ICICLE_CRASH ], + [ 1, MoveId.GLACIAL_LANCE ], + [ 8, MoveId.LIFE_DEW ], + [ 16, MoveId.GIGA_DRAIN ], + [ 24, MoveId.PSYSHOCK ], + [ 32, MoveId.HELPING_HAND ], + [ 40, MoveId.AROMATHERAPY ], + [ 40, MoveId.GRASSY_TERRAIN ], + [ 48, MoveId.ENERGY_BALL ], + [ 56, MoveId.PSYCHIC ], + [ 64, MoveId.LEECH_SEED ], + [ 72, MoveId.HEAL_PULSE ], + [ 80, MoveId.SOLAR_BEAM ], + [ 88, MoveId.FUTURE_SIGHT ], ], 2: [ - [ 1, Moves.POUND ], - [ 1, Moves.STOMP ], - [ 1, Moves.DOUBLE_KICK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.THRASH ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.DISABLE ], - [ 1, Moves.MEGA_DRAIN ], - [ 1, Moves.GROWTH ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.AGILITY ], - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.HAZE ], - [ 1, Moves.SHADOW_BALL ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.HEX ], - [ 1, Moves.ASTRAL_BARRAGE ], - [ 8, Moves.LIFE_DEW ], - [ 16, Moves.GIGA_DRAIN ], - [ 24, Moves.PSYSHOCK ], - [ 32, Moves.HELPING_HAND ], - [ 40, Moves.GRASSY_TERRAIN ], - [ 40, Moves.PSYCHIC_TERRAIN ], - [ 48, Moves.ENERGY_BALL ], - [ 56, Moves.PSYCHIC ], - [ 64, Moves.LEECH_SEED ], - [ 72, Moves.HEAL_PULSE ], - [ 80, Moves.SOLAR_BEAM ], - [ 88, Moves.FUTURE_SIGHT ], + [ 1, MoveId.POUND ], + [ 1, MoveId.STOMP ], + [ 1, MoveId.DOUBLE_KICK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.THRASH ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.DISABLE ], + [ 1, MoveId.MEGA_DRAIN ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.AGILITY ], + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.HAZE ], + [ 1, MoveId.SHADOW_BALL ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.HEX ], + [ 1, MoveId.ASTRAL_BARRAGE ], + [ 8, MoveId.LIFE_DEW ], + [ 16, MoveId.GIGA_DRAIN ], + [ 24, MoveId.PSYSHOCK ], + [ 32, MoveId.HELPING_HAND ], + [ 40, MoveId.GRASSY_TERRAIN ], + [ 40, MoveId.PSYCHIC_TERRAIN ], + [ 48, MoveId.ENERGY_BALL ], + [ 56, MoveId.PSYCHIC ], + [ 64, MoveId.LEECH_SEED ], + [ 72, MoveId.HEAL_PULSE ], + [ 80, MoveId.SOLAR_BEAM ], + [ 88, MoveId.FUTURE_SIGHT ], ], }, - [Species.OINKOLOGNE]: { + [SpeciesId.OINKOLOGNE]: { 1: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 3, Moves.DISARMING_VOICE ], - [ 6, Moves.ECHOED_VOICE ], - [ 9, Moves.MUD_SHOT ], - [ 12, Moves.COVET ], - [ 15, Moves.DIG ], - [ 17, Moves.HEADBUTT ], - [ 23, Moves.YAWN ], - [ 28, Moves.TAKE_DOWN ], - [ 30, Moves.WORK_UP ], - [ 34, Moves.UPROAR ], - [ 39, Moves.DOUBLE_EDGE ], - [ 45, Moves.EARTH_POWER ], - [ 51, Moves.BELCH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 3, MoveId.DISARMING_VOICE ], + [ 6, MoveId.ECHOED_VOICE ], + [ 9, MoveId.MUD_SHOT ], + [ 12, MoveId.COVET ], + [ 15, MoveId.DIG ], + [ 17, MoveId.HEADBUTT ], + [ 23, MoveId.YAWN ], + [ 28, MoveId.TAKE_DOWN ], + [ 30, MoveId.WORK_UP ], + [ 34, MoveId.UPROAR ], + [ 39, MoveId.DOUBLE_EDGE ], + [ 45, MoveId.EARTH_POWER ], + [ 51, MoveId.BELCH ], ], }, - [Species.REVAVROOM]: { + [SpeciesId.REVAVROOM]: { 1: [ - [ EVOLVE_MOVE, Moves.WICKED_TORQUE ], - [ EVOLVE_MOVE, Moves.SHIFT_GEAR ], - [ 1, Moves.LICK ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.MAGNET_RISE ], - [ 4, Moves.SMOG ], - [ 7, Moves.TAUNT ], - [ 10, Moves.ASSURANCE ], - [ 13, Moves.SLUDGE ], - [ 17, Moves.GYRO_BALL ], - [ 21, Moves.HEADBUTT ], - [ 25, Moves.SCREECH ], - [ 28, Moves.IRON_HEAD ], - [ 32, Moves.SWAGGER ], - [ 36, Moves.POISON_JAB ], - [ 46, Moves.UPROAR ], - [ 52, Moves.SPIN_OUT ], - [ 58, Moves.GUNK_SHOT ], + [ EVOLVE_MOVE, MoveId.WICKED_TORQUE ], + [ EVOLVE_MOVE, MoveId.SHIFT_GEAR ], + [ 1, MoveId.LICK ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.MAGNET_RISE ], + [ 4, MoveId.SMOG ], + [ 7, MoveId.TAUNT ], + [ 10, MoveId.ASSURANCE ], + [ 13, MoveId.SLUDGE ], + [ 17, MoveId.GYRO_BALL ], + [ 21, MoveId.HEADBUTT ], + [ 25, MoveId.SCREECH ], + [ 28, MoveId.IRON_HEAD ], + [ 32, MoveId.SWAGGER ], + [ 36, MoveId.POISON_JAB ], + [ 46, MoveId.UPROAR ], + [ 52, MoveId.SPIN_OUT ], + [ 58, MoveId.GUNK_SHOT ], ], 2: [ - [ EVOLVE_MOVE, Moves.BLAZING_TORQUE ], - [ EVOLVE_MOVE, Moves.SHIFT_GEAR ], - [ 1, Moves.LICK ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.MAGNET_RISE ], - [ 4, Moves.SMOG ], - [ 7, Moves.TAUNT ], - [ 10, Moves.ASSURANCE ], - [ 13, Moves.SLUDGE ], - [ 17, Moves.GYRO_BALL ], - [ 21, Moves.HEADBUTT ], - [ 25, Moves.SCREECH ], - [ 28, Moves.IRON_HEAD ], - [ 32, Moves.SWAGGER ], - [ 36, Moves.POISON_JAB ], - [ 46, Moves.UPROAR ], - [ 52, Moves.SPIN_OUT ], - [ 58, Moves.GUNK_SHOT ], + [ EVOLVE_MOVE, MoveId.BLAZING_TORQUE ], + [ EVOLVE_MOVE, MoveId.SHIFT_GEAR ], + [ 1, MoveId.LICK ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.MAGNET_RISE ], + [ 4, MoveId.SMOG ], + [ 7, MoveId.TAUNT ], + [ 10, MoveId.ASSURANCE ], + [ 13, MoveId.SLUDGE ], + [ 17, MoveId.GYRO_BALL ], + [ 21, MoveId.HEADBUTT ], + [ 25, MoveId.SCREECH ], + [ 28, MoveId.IRON_HEAD ], + [ 32, MoveId.SWAGGER ], + [ 36, MoveId.POISON_JAB ], + [ 46, MoveId.UPROAR ], + [ 52, MoveId.SPIN_OUT ], + [ 58, MoveId.GUNK_SHOT ], ], 3: [ - [ EVOLVE_MOVE, Moves.NOXIOUS_TORQUE ], - [ EVOLVE_MOVE, Moves.SHIFT_GEAR ], - [ 1, Moves.LICK ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.MAGNET_RISE ], - [ 4, Moves.SMOG ], - [ 7, Moves.TAUNT ], - [ 10, Moves.ASSURANCE ], - [ 13, Moves.SLUDGE ], - [ 17, Moves.GYRO_BALL ], - [ 21, Moves.HEADBUTT ], - [ 25, Moves.SCREECH ], - [ 28, Moves.IRON_HEAD ], - [ 32, Moves.SWAGGER ], - [ 36, Moves.POISON_JAB ], - [ 46, Moves.UPROAR ], - [ 52, Moves.SPIN_OUT ], - [ 58, Moves.GUNK_SHOT ], + [ EVOLVE_MOVE, MoveId.NOXIOUS_TORQUE ], + [ EVOLVE_MOVE, MoveId.SHIFT_GEAR ], + [ 1, MoveId.LICK ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.MAGNET_RISE ], + [ 4, MoveId.SMOG ], + [ 7, MoveId.TAUNT ], + [ 10, MoveId.ASSURANCE ], + [ 13, MoveId.SLUDGE ], + [ 17, MoveId.GYRO_BALL ], + [ 21, MoveId.HEADBUTT ], + [ 25, MoveId.SCREECH ], + [ 28, MoveId.IRON_HEAD ], + [ 32, MoveId.SWAGGER ], + [ 36, MoveId.POISON_JAB ], + [ 46, MoveId.UPROAR ], + [ 52, MoveId.SPIN_OUT ], + [ 58, MoveId.GUNK_SHOT ], ], 4: [ - [ EVOLVE_MOVE, Moves.MAGICAL_TORQUE ], - [ EVOLVE_MOVE, Moves.SHIFT_GEAR ], - [ 1, Moves.LICK ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.MAGNET_RISE ], - [ 4, Moves.SMOG ], - [ 7, Moves.TAUNT ], - [ 10, Moves.ASSURANCE ], - [ 13, Moves.SLUDGE ], - [ 17, Moves.GYRO_BALL ], - [ 21, Moves.HEADBUTT ], - [ 25, Moves.SCREECH ], - [ 28, Moves.IRON_HEAD ], - [ 32, Moves.SWAGGER ], - [ 36, Moves.POISON_JAB ], - [ 46, Moves.UPROAR ], - [ 52, Moves.SPIN_OUT ], - [ 58, Moves.GUNK_SHOT ], + [ EVOLVE_MOVE, MoveId.MAGICAL_TORQUE ], + [ EVOLVE_MOVE, MoveId.SHIFT_GEAR ], + [ 1, MoveId.LICK ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.MAGNET_RISE ], + [ 4, MoveId.SMOG ], + [ 7, MoveId.TAUNT ], + [ 10, MoveId.ASSURANCE ], + [ 13, MoveId.SLUDGE ], + [ 17, MoveId.GYRO_BALL ], + [ 21, MoveId.HEADBUTT ], + [ 25, MoveId.SCREECH ], + [ 28, MoveId.IRON_HEAD ], + [ 32, MoveId.SWAGGER ], + [ 36, MoveId.POISON_JAB ], + [ 46, MoveId.UPROAR ], + [ 52, MoveId.SPIN_OUT ], + [ 58, MoveId.GUNK_SHOT ], ], 5: [ - [ EVOLVE_MOVE, Moves.COMBAT_TORQUE ], - [ EVOLVE_MOVE, Moves.SHIFT_GEAR ], - [ 1, Moves.LICK ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.MAGNET_RISE ], - [ 4, Moves.SMOG ], - [ 7, Moves.TAUNT ], - [ 10, Moves.ASSURANCE ], - [ 13, Moves.SLUDGE ], - [ 17, Moves.GYRO_BALL ], - [ 21, Moves.HEADBUTT ], - [ 25, Moves.SCREECH ], - [ 28, Moves.IRON_HEAD ], - [ 32, Moves.SWAGGER ], - [ 36, Moves.POISON_JAB ], - [ 46, Moves.UPROAR ], - [ 52, Moves.SPIN_OUT ], - [ 58, Moves.GUNK_SHOT ], + [ EVOLVE_MOVE, MoveId.COMBAT_TORQUE ], + [ EVOLVE_MOVE, MoveId.SHIFT_GEAR ], + [ 1, MoveId.LICK ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.MAGNET_RISE ], + [ 4, MoveId.SMOG ], + [ 7, MoveId.TAUNT ], + [ 10, MoveId.ASSURANCE ], + [ 13, MoveId.SLUDGE ], + [ 17, MoveId.GYRO_BALL ], + [ 21, MoveId.HEADBUTT ], + [ 25, MoveId.SCREECH ], + [ 28, MoveId.IRON_HEAD ], + [ 32, MoveId.SWAGGER ], + [ 36, MoveId.POISON_JAB ], + [ 46, MoveId.UPROAR ], + [ 52, MoveId.SPIN_OUT ], + [ 58, MoveId.GUNK_SHOT ], ], }, - [Species.PALDEA_TAUROS]: { + [SpeciesId.PALDEA_TAUROS]: { 1: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 5, Moves.WORK_UP ], - [ 10, Moves.DOUBLE_KICK ], - [ 15, Moves.FLAME_CHARGE ], - [ 20, Moves.HEADBUTT ], - [ 25, Moves.SCARY_FACE ], - [ 30, Moves.ZEN_HEADBUTT ], - [ 35, Moves.RAGING_BULL ], - [ 40, Moves.REST ], - [ 45, Moves.SWAGGER ], - [ 50, Moves.THRASH ], - [ 55, Moves.FLARE_BLITZ ], - [ 60, Moves.CLOSE_COMBAT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 5, MoveId.WORK_UP ], + [ 10, MoveId.DOUBLE_KICK ], + [ 15, MoveId.FLAME_CHARGE ], + [ 20, MoveId.HEADBUTT ], + [ 25, MoveId.SCARY_FACE ], + [ 30, MoveId.ZEN_HEADBUTT ], + [ 35, MoveId.RAGING_BULL ], + [ 40, MoveId.REST ], + [ 45, MoveId.SWAGGER ], + [ 50, MoveId.THRASH ], + [ 55, MoveId.FLARE_BLITZ ], + [ 60, MoveId.CLOSE_COMBAT ], ], 2: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 5, Moves.WORK_UP ], - [ 10, Moves.DOUBLE_KICK ], - [ 15, Moves.AQUA_JET ], - [ 20, Moves.HEADBUTT ], - [ 25, Moves.SCARY_FACE ], - [ 30, Moves.ZEN_HEADBUTT ], - [ 35, Moves.RAGING_BULL ], - [ 40, Moves.REST ], - [ 45, Moves.SWAGGER ], - [ 50, Moves.THRASH ], - [ 55, Moves.WAVE_CRASH ], - [ 60, Moves.CLOSE_COMBAT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 5, MoveId.WORK_UP ], + [ 10, MoveId.DOUBLE_KICK ], + [ 15, MoveId.AQUA_JET ], + [ 20, MoveId.HEADBUTT ], + [ 25, MoveId.SCARY_FACE ], + [ 30, MoveId.ZEN_HEADBUTT ], + [ 35, MoveId.RAGING_BULL ], + [ 40, MoveId.REST ], + [ 45, MoveId.SWAGGER ], + [ 50, MoveId.THRASH ], + [ 55, MoveId.WAVE_CRASH ], + [ 60, MoveId.CLOSE_COMBAT ], ] } }; diff --git a/src/data/balance/signature-species.ts b/src/data/balance/signature-species.ts index 04749a67521..fba91f6fe3d 100644 --- a/src/data/balance/signature-species.ts +++ b/src/data/balance/signature-species.ts @@ -1,7 +1,7 @@ -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; export type SignatureSpecies = { - [key in string]: (Species | Species[])[]; + [key in string]: (SpeciesId | SpeciesId[])[]; }; /** @@ -18,87 +18,87 @@ export type SignatureSpecies = { */ export const signatureSpecies: SignatureSpecies = new Proxy({ // Gym Leaders- Kanto - BROCK: [Species.ONIX, Species.GEODUDE, [Species.OMANYTE, Species.KABUTO], Species.AERODACTYL], - MISTY: [Species.STARYU, Species.PSYDUCK, Species.WOOPER, Species.LAPRAS], - LT_SURGE: [Species.PICHU, Species.VOLTORB, Species.ELEKID, Species.JOLTEON], - ERIKA: [Species.ODDISH, Species.BELLSPROUT, Species.TANGELA, Species.HOPPIP], - JANINE: [Species.VENONAT, Species.SPINARAK, Species.ZUBAT, Species.KOFFING], - SABRINA: [Species.ABRA, Species.MR_MIME, Species.SMOOCHUM, Species.ESPEON], - BLAINE: [Species.GROWLITHE, Species.PONYTA, Species.MAGBY, Species.VULPIX], - GIOVANNI: [Species.RHYHORN, Species.MEOWTH, [Species.NIDORAN_F, Species.NIDORAN_M], Species.DIGLETT], // Tera Ground Meowth + BROCK: [SpeciesId.ONIX, SpeciesId.GEODUDE, [SpeciesId.OMANYTE, SpeciesId.KABUTO], SpeciesId.AERODACTYL], + MISTY: [SpeciesId.STARYU, SpeciesId.PSYDUCK, SpeciesId.WOOPER, SpeciesId.LAPRAS], + LT_SURGE: [SpeciesId.PICHU, SpeciesId.VOLTORB, SpeciesId.ELEKID, SpeciesId.JOLTEON], + ERIKA: [SpeciesId.ODDISH, SpeciesId.BELLSPROUT, SpeciesId.TANGELA, SpeciesId.HOPPIP], + JANINE: [SpeciesId.VENONAT, SpeciesId.SPINARAK, SpeciesId.ZUBAT, SpeciesId.KOFFING], + SABRINA: [SpeciesId.ABRA, SpeciesId.MR_MIME, SpeciesId.SMOOCHUM, SpeciesId.ESPEON], + BLAINE: [SpeciesId.GROWLITHE, SpeciesId.PONYTA, SpeciesId.MAGBY, SpeciesId.VULPIX], + GIOVANNI: [SpeciesId.RHYHORN, SpeciesId.MEOWTH, [SpeciesId.NIDORAN_F, SpeciesId.NIDORAN_M], SpeciesId.DIGLETT], // Tera Ground Meowth // Gym Leaders- Johto - FALKNER: [Species.PIDGEY, Species.HOOTHOOT, Species.NATU, Species.MURKROW], - BUGSY: [Species.SCYTHER, Species.SHUCKLE, Species.YANMA, [Species.PINSIR, Species.HERACROSS]], - WHITNEY: [Species.MILTANK, Species.AIPOM, Species.IGGLYBUFF, [Species.GIRAFARIG, Species.STANTLER]], - MORTY: [Species.GASTLY, Species.MISDREAVUS, Species.DUSKULL, Species.SABLEYE], - CHUCK: [Species.POLIWRATH, Species.MANKEY, Species.TYROGUE, Species.MACHOP], - JASMINE: [Species.STEELIX, Species.MAGNEMITE, Species.PINECO, Species.SKARMORY], - PRYCE: [Species.SWINUB, Species.SEEL, Species.SHELLDER, Species.SNEASEL], - CLAIR: [Species.HORSEA, Species.DRATINI, Species.MAGIKARP, Species.DRUDDIGON], // Tera Dragon Magikarp + FALKNER: [SpeciesId.PIDGEY, SpeciesId.HOOTHOOT, SpeciesId.NATU, SpeciesId.MURKROW], + BUGSY: [SpeciesId.SCYTHER, SpeciesId.SHUCKLE, SpeciesId.YANMA, [SpeciesId.PINSIR, SpeciesId.HERACROSS]], + WHITNEY: [SpeciesId.MILTANK, SpeciesId.AIPOM, SpeciesId.IGGLYBUFF, [SpeciesId.GIRAFARIG, SpeciesId.STANTLER]], + MORTY: [SpeciesId.GASTLY, SpeciesId.MISDREAVUS, SpeciesId.DUSKULL, SpeciesId.SABLEYE], + CHUCK: [SpeciesId.POLIWRATH, SpeciesId.MANKEY, SpeciesId.TYROGUE, SpeciesId.MACHOP], + JASMINE: [SpeciesId.STEELIX, SpeciesId.MAGNEMITE, SpeciesId.PINECO, SpeciesId.SKARMORY], + PRYCE: [SpeciesId.SWINUB, SpeciesId.SEEL, SpeciesId.SHELLDER, SpeciesId.SNEASEL], + CLAIR: [SpeciesId.HORSEA, SpeciesId.DRATINI, SpeciesId.MAGIKARP, SpeciesId.DRUDDIGON], // Tera Dragon Magikarp // Gym Leaders- Hoenn - ROXANNE: [Species.NOSEPASS, Species.GEODUDE, [Species.LILEEP, Species.ANORITH], Species.ARON], - BRAWLY: [Species.MAKUHITA, Species.MACHOP, Species.MEDITITE, Species.SHROOMISH], - WATTSON: [Species.ELECTRIKE, Species.VOLTORB, Species.MAGNEMITE, [Species.PLUSLE, Species.MINUN]], - FLANNERY: [Species.TORKOAL, Species.SLUGMA, Species.NUMEL, Species.HOUNDOUR], - NORMAN: [Species.SLAKOTH, Species.KECLEON, Species.WHISMUR, Species.ZANGOOSE], - WINONA: [Species.SWABLU, Species.WINGULL, Species.TROPIUS, Species.SKARMORY], - TATE: [Species.SOLROCK, Species.NATU, Species.CHINGLING, Species.GALLADE], - LIZA: [Species.LUNATONE, Species.BALTOY, Species.SPOINK, Species.GARDEVOIR], - JUAN: [Species.HORSEA, Species.SPHEAL, Species.BARBOACH, Species.CORPHISH], + ROXANNE: [SpeciesId.NOSEPASS, SpeciesId.GEODUDE, [SpeciesId.LILEEP, SpeciesId.ANORITH], SpeciesId.ARON], + BRAWLY: [SpeciesId.MAKUHITA, SpeciesId.MACHOP, SpeciesId.MEDITITE, SpeciesId.SHROOMISH], + WATTSON: [SpeciesId.ELECTRIKE, SpeciesId.VOLTORB, SpeciesId.MAGNEMITE, [SpeciesId.PLUSLE, SpeciesId.MINUN]], + FLANNERY: [SpeciesId.TORKOAL, SpeciesId.SLUGMA, SpeciesId.NUMEL, SpeciesId.HOUNDOUR], + NORMAN: [SpeciesId.SLAKOTH, SpeciesId.KECLEON, SpeciesId.WHISMUR, SpeciesId.ZANGOOSE], + WINONA: [SpeciesId.SWABLU, SpeciesId.WINGULL, SpeciesId.TROPIUS, SpeciesId.SKARMORY], + TATE: [SpeciesId.SOLROCK, SpeciesId.NATU, SpeciesId.CHINGLING, SpeciesId.GALLADE], + LIZA: [SpeciesId.LUNATONE, SpeciesId.BALTOY, SpeciesId.SPOINK, SpeciesId.GARDEVOIR], + JUAN: [SpeciesId.HORSEA, SpeciesId.SPHEAL, SpeciesId.BARBOACH, SpeciesId.CORPHISH], // Gym Leaders- Sinnoh - ROARK: [Species.CRANIDOS, Species.GEODUDE, Species.NOSEPASS, Species.LARVITAR], - GARDENIA: [Species.BUDEW, Species.CHERUBI, Species.TURTWIG, Species.LEAFEON], - MAYLENE: [Species.RIOLU, Species.MEDITITE, Species.CHIMCHAR, Species.CROAGUNK], - CRASHER_WAKE: [Species.BUIZEL, Species.WOOPER, Species.PIPLUP, Species.MAGIKARP], - FANTINA: [Species.MISDREAVUS, Species.DRIFLOON, Species.DUSKULL, Species.SPIRITOMB], - BYRON: [Species.SHIELDON, Species.BRONZOR, Species.ARON, Species.SKARMORY], - CANDICE: [Species.FROSLASS, Species.SNOVER, Species.SNEASEL, Species.GLACEON], - VOLKNER: [Species.ELEKID, Species.SHINX, Species.CHINCHOU, Species.ROTOM], + ROARK: [SpeciesId.CRANIDOS, SpeciesId.GEODUDE, SpeciesId.NOSEPASS, SpeciesId.LARVITAR], + GARDENIA: [SpeciesId.BUDEW, SpeciesId.CHERUBI, SpeciesId.TURTWIG, SpeciesId.LEAFEON], + MAYLENE: [SpeciesId.RIOLU, SpeciesId.MEDITITE, SpeciesId.CHIMCHAR, SpeciesId.CROAGUNK], + CRASHER_WAKE: [SpeciesId.BUIZEL, SpeciesId.WOOPER, SpeciesId.PIPLUP, SpeciesId.MAGIKARP], + FANTINA: [SpeciesId.MISDREAVUS, SpeciesId.DRIFLOON, SpeciesId.DUSKULL, SpeciesId.SPIRITOMB], + BYRON: [SpeciesId.SHIELDON, SpeciesId.BRONZOR, SpeciesId.ARON, SpeciesId.SKARMORY], + CANDICE: [SpeciesId.FROSLASS, SpeciesId.SNOVER, SpeciesId.SNEASEL, SpeciesId.GLACEON], + VOLKNER: [SpeciesId.ELEKID, SpeciesId.SHINX, SpeciesId.CHINCHOU, SpeciesId.ROTOM], // Gym Leaders- Unova - CILAN: [Species.PANSAGE, Species.SNIVY, Species.MARACTUS, Species.FERROSEED], - CHILI: [Species.PANSEAR, Species.TEPIG, Species.HEATMOR, Species.DARUMAKA], - CRESS: [Species.PANPOUR, Species.OSHAWOTT, Species.BASCULIN, Species.TYMPOLE], - CHEREN: [Species.LILLIPUP, Species.MINCCINO, Species.PIDOVE, Species.BOUFFALANT], - LENORA: [Species.PATRAT, Species.DEERLING, Species.AUDINO, Species.BRAVIARY], - ROXIE: [Species.VENIPEDE, Species.KOFFING, Species.TRUBBISH, Species.TOXEL], - BURGH: [Species.SEWADDLE, Species.DWEBBLE, [Species.KARRABLAST, Species.SHELMET], Species.DURANT], - ELESA: [Species.BLITZLE, Species.EMOLGA, Species.JOLTIK, Species.TYNAMO], - CLAY: [Species.DRILBUR, Species.SANDILE, Species.TYMPOLE, Species.GOLETT], - SKYLA: [Species.DUCKLETT, Species.WOOBAT, [Species.RUFFLET, Species.VULLABY], Species.ARCHEN], - BRYCEN: [Species.CRYOGONAL, Species.VANILLITE, Species.CUBCHOO, Species.GALAR_DARUMAKA], - DRAYDEN: [Species.AXEW, Species.DRUDDIGON, Species.TRAPINCH, Species.DEINO], - MARLON: [Species.FRILLISH, Species.TIRTOUGA, Species.WAILMER, Species.MANTYKE], + CILAN: [SpeciesId.PANSAGE, SpeciesId.SNIVY, SpeciesId.MARACTUS, SpeciesId.FERROSEED], + CHILI: [SpeciesId.PANSEAR, SpeciesId.TEPIG, SpeciesId.HEATMOR, SpeciesId.DARUMAKA], + CRESS: [SpeciesId.PANPOUR, SpeciesId.OSHAWOTT, SpeciesId.BASCULIN, SpeciesId.TYMPOLE], + CHEREN: [SpeciesId.LILLIPUP, SpeciesId.MINCCINO, SpeciesId.PIDOVE, SpeciesId.BOUFFALANT], + LENORA: [SpeciesId.PATRAT, SpeciesId.DEERLING, SpeciesId.AUDINO, SpeciesId.BRAVIARY], + ROXIE: [SpeciesId.VENIPEDE, SpeciesId.KOFFING, SpeciesId.TRUBBISH, SpeciesId.TOXEL], + BURGH: [SpeciesId.SEWADDLE, SpeciesId.DWEBBLE, [SpeciesId.KARRABLAST, SpeciesId.SHELMET], SpeciesId.DURANT], + ELESA: [SpeciesId.BLITZLE, SpeciesId.EMOLGA, SpeciesId.JOLTIK, SpeciesId.TYNAMO], + CLAY: [SpeciesId.DRILBUR, SpeciesId.SANDILE, SpeciesId.TYMPOLE, SpeciesId.GOLETT], + SKYLA: [SpeciesId.DUCKLETT, SpeciesId.WOOBAT, [SpeciesId.RUFFLET, SpeciesId.VULLABY], SpeciesId.ARCHEN], + BRYCEN: [SpeciesId.CRYOGONAL, SpeciesId.VANILLITE, SpeciesId.CUBCHOO, SpeciesId.GALAR_DARUMAKA], + DRAYDEN: [SpeciesId.AXEW, SpeciesId.DRUDDIGON, SpeciesId.TRAPINCH, SpeciesId.DEINO], + MARLON: [SpeciesId.FRILLISH, SpeciesId.TIRTOUGA, SpeciesId.WAILMER, SpeciesId.MANTYKE], // Gym Leaders- Kalos - VIOLA: [Species.SCATTERBUG, Species.SURSKIT, Species.CUTIEFLY, Species.BLIPBUG], - GRANT: [Species.TYRUNT, Species.AMAURA, Species.BINACLE, Species.DWEBBLE], - KORRINA: [Species.RIOLU, Species.MIENFOO, Species.HAWLUCHA, Species.PANCHAM], - RAMOS: [Species.SKIDDO, Species.HOPPIP, Species.BELLSPROUT, [Species.PHANTUMP, Species.PUMPKABOO]], - CLEMONT: [Species.HELIOPTILE, Species.MAGNEMITE, Species.DEDENNE, Species.ROTOM], - VALERIE: [Species.SYLVEON, Species.MAWILE, Species.MR_MIME, [Species.SPRITZEE, Species.SWIRLIX]], - OLYMPIA: [Species.ESPURR, Species.SIGILYPH, Species.INKAY, Species.SLOWKING], - WULFRIC: [Species.BERGMITE, Species.SNOVER, Species.CRYOGONAL, Species.SWINUB], + VIOLA: [SpeciesId.SCATTERBUG, SpeciesId.SURSKIT, SpeciesId.CUTIEFLY, SpeciesId.BLIPBUG], + GRANT: [SpeciesId.TYRUNT, SpeciesId.AMAURA, SpeciesId.BINACLE, SpeciesId.DWEBBLE], + KORRINA: [SpeciesId.RIOLU, SpeciesId.MIENFOO, SpeciesId.HAWLUCHA, SpeciesId.PANCHAM], + RAMOS: [SpeciesId.SKIDDO, SpeciesId.HOPPIP, SpeciesId.BELLSPROUT, [SpeciesId.PHANTUMP, SpeciesId.PUMPKABOO]], + CLEMONT: [SpeciesId.HELIOPTILE, SpeciesId.MAGNEMITE, SpeciesId.DEDENNE, SpeciesId.ROTOM], + VALERIE: [SpeciesId.SYLVEON, SpeciesId.MAWILE, SpeciesId.MR_MIME, [SpeciesId.SPRITZEE, SpeciesId.SWIRLIX]], + OLYMPIA: [SpeciesId.ESPURR, SpeciesId.SIGILYPH, SpeciesId.INKAY, SpeciesId.SLOWKING], + WULFRIC: [SpeciesId.BERGMITE, SpeciesId.SNOVER, SpeciesId.CRYOGONAL, SpeciesId.SWINUB], // Gym Leaders- Galar - MILO: [Species.GOSSIFLEUR, Species.SEEDOT, Species.APPLIN, Species.LOTAD], - NESSA: [Species.CHEWTLE, Species.WIMPOD, Species.ARROKUDA, Species.MAREANIE], - KABU: [Species.SIZZLIPEDE, Species.VULPIX, Species.GROWLITHE, Species.TORKOAL], - BEA: [Species.MACHOP, Species.GALAR_FARFETCHD, Species.CLOBBOPUS, Species.FALINKS], - ALLISTER: [Species.GASTLY, Species.GALAR_YAMASK, Species.GALAR_CORSOLA, Species.SINISTEA], - OPAL: [Species.MILCERY, Species.GALAR_WEEZING, Species.TOGEPI, Species.MAWILE], - BEDE: [Species.HATENNA, Species.GALAR_PONYTA, Species.GARDEVOIR, Species.SYLVEON], - GORDIE: [Species.ROLYCOLY, [Species.SHUCKLE, Species.BINACLE], Species.STONJOURNER, Species.LARVITAR], - MELONY: [Species.LAPRAS, Species.SNOM, Species.EISCUE, [Species.GALAR_MR_MIME, Species.GALAR_DARUMAKA]], - PIERS: [Species.GALAR_ZIGZAGOON, Species.SCRAGGY, Species.TOXEL, Species.INKAY], // Tera Dark Toxel - MARNIE: [Species.IMPIDIMP, Species.MORPEKO, Species.PURRLOIN, Species.CROAGUNK], // Tera Dark Croagunk - RAIHAN: [Species.DURALUDON, Species.TRAPINCH, Species.GOOMY, Species.TURTONATOR], + MILO: [SpeciesId.GOSSIFLEUR, SpeciesId.SEEDOT, SpeciesId.APPLIN, SpeciesId.LOTAD], + NESSA: [SpeciesId.CHEWTLE, SpeciesId.WIMPOD, SpeciesId.ARROKUDA, SpeciesId.MAREANIE], + KABU: [SpeciesId.SIZZLIPEDE, SpeciesId.VULPIX, SpeciesId.GROWLITHE, SpeciesId.TORKOAL], + BEA: [SpeciesId.MACHOP, SpeciesId.GALAR_FARFETCHD, SpeciesId.CLOBBOPUS, SpeciesId.FALINKS], + ALLISTER: [SpeciesId.GASTLY, SpeciesId.GALAR_YAMASK, SpeciesId.GALAR_CORSOLA, SpeciesId.SINISTEA], + OPAL: [SpeciesId.MILCERY, SpeciesId.GALAR_WEEZING, SpeciesId.TOGEPI, SpeciesId.MAWILE], + BEDE: [SpeciesId.HATENNA, SpeciesId.GALAR_PONYTA, SpeciesId.GARDEVOIR, SpeciesId.SYLVEON], + GORDIE: [SpeciesId.ROLYCOLY, [SpeciesId.SHUCKLE, SpeciesId.BINACLE], SpeciesId.STONJOURNER, SpeciesId.LARVITAR], + MELONY: [SpeciesId.LAPRAS, SpeciesId.SNOM, SpeciesId.EISCUE, [SpeciesId.GALAR_MR_MIME, SpeciesId.GALAR_DARUMAKA]], + PIERS: [SpeciesId.GALAR_ZIGZAGOON, SpeciesId.SCRAGGY, SpeciesId.TOXEL, SpeciesId.INKAY], // Tera Dark Toxel + MARNIE: [SpeciesId.IMPIDIMP, SpeciesId.MORPEKO, SpeciesId.PURRLOIN, SpeciesId.CROAGUNK], // Tera Dark Croagunk + RAIHAN: [SpeciesId.DURALUDON, SpeciesId.TRAPINCH, SpeciesId.GOOMY, SpeciesId.TURTONATOR], // Gym Leaders- Paldea; First slot is Tera - KATY: [Species.TEDDIURSA, Species.NYMBLE, Species.TAROUNTULA, Species.RELLOR], // Tera Bug Teddiursa - BRASSIUS: [Species.BONSLY, Species.SMOLIV, Species.BRAMBLIN, Species.SUNKERN], // Tera Grass Bonsly - IONO: [Species.MISDREAVUS, Species.TADBULB, Species.WATTREL, Species.MAGNEMITE], // Tera Ghost Misdreavus - KOFU: [Species.CRABRAWLER, Species.VELUZA, Species.WIGLETT, Species.WINGULL], // Tera Water Crabrawler - LARRY: [Species.STARLY, Species.DUNSPARCE, Species.LECHONK, Species.KOMALA], // Tera Normal Starly - RYME: [Species.TOXEL, Species.GREAVARD, Species.SHUPPET, Species.MIMIKYU], // Tera Ghost Toxel - TULIP: [Species.FLABEBE, Species.FLITTLE, Species.RALTS, Species.GIRAFARIG], // Tera Psychic Flabebe - GRUSHA: [Species.SWABLU, Species.CETODDLE, Species.SNOM, Species.CUBCHOO], // Tera Ice Swablu + KATY: [SpeciesId.TEDDIURSA, SpeciesId.NYMBLE, SpeciesId.TAROUNTULA, SpeciesId.RELLOR], // Tera Bug Teddiursa + BRASSIUS: [SpeciesId.BONSLY, SpeciesId.SMOLIV, SpeciesId.BRAMBLIN, SpeciesId.SUNKERN], // Tera Grass Bonsly + IONO: [SpeciesId.MISDREAVUS, SpeciesId.TADBULB, SpeciesId.WATTREL, SpeciesId.MAGNEMITE], // Tera Ghost Misdreavus + KOFU: [SpeciesId.CRABRAWLER, SpeciesId.VELUZA, SpeciesId.WIGLETT, SpeciesId.WINGULL], // Tera Water Crabrawler + LARRY: [SpeciesId.STARLY, SpeciesId.DUNSPARCE, SpeciesId.LECHONK, SpeciesId.KOMALA], // Tera Normal Starly + RYME: [SpeciesId.TOXEL, SpeciesId.GREAVARD, SpeciesId.SHUPPET, SpeciesId.MIMIKYU], // Tera Ghost Toxel + TULIP: [SpeciesId.FLABEBE, SpeciesId.FLITTLE, SpeciesId.RALTS, SpeciesId.GIRAFARIG], // Tera Psychic Flabebe + GRUSHA: [SpeciesId.SWABLU, SpeciesId.CETODDLE, SpeciesId.SNOM, SpeciesId.CUBCHOO], // Tera Ice Swablu }, { get(target, prop: string) { return target[prop as keyof SignatureSpecies] ?? []; diff --git a/src/data/balance/special-species-groups.ts b/src/data/balance/special-species-groups.ts index eeba96595a6..567d5f19794 100644 --- a/src/data/balance/special-species-groups.ts +++ b/src/data/balance/special-species-groups.ts @@ -1,29 +1,29 @@ -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; /** * A list of all {@link https://bulbapedia.bulbagarden.net/wiki/Paradox_Pok%C3%A9mon | Paradox Pokemon}, NOT including the legendaries Miraidon and Koraidon. */ export const NON_LEGEND_PARADOX_POKEMON = [ - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.BRUTE_BONNET, - Species.FLUTTER_MANE, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.ROARING_MOON, - Species.WALKING_WAKE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.IRON_TREADS, - Species.IRON_BUNDLE, - Species.IRON_HANDS, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.IRON_THORNS, - Species.IRON_VALIANT, - Species.IRON_LEAVES, - Species.IRON_BOULDER, - Species.IRON_CROWN, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.BRUTE_BONNET, + SpeciesId.FLUTTER_MANE, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.ROARING_MOON, + SpeciesId.WALKING_WAKE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_THORNS, + SpeciesId.IRON_VALIANT, + SpeciesId.IRON_LEAVES, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, ]; /** @@ -32,15 +32,15 @@ export const NON_LEGEND_PARADOX_POKEMON = [ * Note that all of these Ultra Beasts are still considered Sub-Legendary. */ export const NON_LEGEND_ULTRA_BEASTS = [ - Species.NIHILEGO, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.XURKITREE, - Species.CELESTEELA, - Species.KARTANA, - Species.GUZZLORD, - Species.POIPOLE, - Species.NAGANADEL, - Species.STAKATAKA, - Species.BLACEPHALON, + SpeciesId.NIHILEGO, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.XURKITREE, + SpeciesId.CELESTEELA, + SpeciesId.KARTANA, + SpeciesId.GUZZLORD, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.STAKATAKA, + SpeciesId.BLACEPHALON, ]; diff --git a/src/data/balance/species-egg-tiers.ts b/src/data/balance/species-egg-tiers.ts index 0db2c917589..4d953921e92 100644 --- a/src/data/balance/species-egg-tiers.ts +++ b/src/data/balance/species-egg-tiers.ts @@ -1,585 +1,585 @@ -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { EggTier } from "#enums/egg-type"; /** * Map of all starters and their respective {@linkcode EggTier}, which determines the type of egg the starter hatches from. */ export const speciesEggTiers = { - [Species.BULBASAUR]: EggTier.COMMON, - [Species.CHARMANDER]: EggTier.COMMON, - [Species.SQUIRTLE]: EggTier.COMMON, - [Species.CATERPIE]: EggTier.COMMON, - [Species.WEEDLE]: EggTier.COMMON, - [Species.PIDGEY]: EggTier.COMMON, - [Species.RATTATA]: EggTier.COMMON, - [Species.SPEAROW]: EggTier.COMMON, - [Species.EKANS]: EggTier.COMMON, - [Species.SANDSHREW]: EggTier.COMMON, - [Species.NIDORAN_F]: EggTier.COMMON, - [Species.NIDORAN_M]: EggTier.COMMON, - [Species.VULPIX]: EggTier.COMMON, - [Species.ZUBAT]: EggTier.COMMON, - [Species.ODDISH]: EggTier.COMMON, - [Species.PARAS]: EggTier.COMMON, - [Species.VENONAT]: EggTier.COMMON, - [Species.DIGLETT]: EggTier.COMMON, - [Species.MEOWTH]: EggTier.COMMON, - [Species.PSYDUCK]: EggTier.COMMON, - [Species.MANKEY]: EggTier.RARE, - [Species.GROWLITHE]: EggTier.RARE, - [Species.POLIWAG]: EggTier.COMMON, - [Species.ABRA]: EggTier.RARE, - [Species.MACHOP]: EggTier.COMMON, - [Species.BELLSPROUT]: EggTier.COMMON, - [Species.TENTACOOL]: EggTier.COMMON, - [Species.GEODUDE]: EggTier.COMMON, - [Species.PONYTA]: EggTier.COMMON, - [Species.SLOWPOKE]: EggTier.COMMON, - [Species.MAGNEMITE]: EggTier.RARE, - [Species.FARFETCHD]: EggTier.RARE, - [Species.DODUO]: EggTier.COMMON, - [Species.SEEL]: EggTier.COMMON, - [Species.GRIMER]: EggTier.COMMON, - [Species.SHELLDER]: EggTier.RARE, - [Species.GASTLY]: EggTier.RARE, - [Species.ONIX]: EggTier.COMMON, - [Species.DROWZEE]: EggTier.COMMON, - [Species.KRABBY]: EggTier.COMMON, - [Species.VOLTORB]: EggTier.COMMON, - [Species.EXEGGCUTE]: EggTier.COMMON, - [Species.CUBONE]: EggTier.COMMON, - [Species.LICKITUNG]: EggTier.RARE, - [Species.KOFFING]: EggTier.COMMON, - [Species.RHYHORN]: EggTier.RARE, - [Species.TANGELA]: EggTier.COMMON, - [Species.KANGASKHAN]: EggTier.RARE, - [Species.HORSEA]: EggTier.COMMON, - [Species.GOLDEEN]: EggTier.COMMON, - [Species.STARYU]: EggTier.COMMON, - [Species.SCYTHER]: EggTier.RARE, - [Species.PINSIR]: EggTier.RARE, - [Species.TAUROS]: EggTier.RARE, - [Species.MAGIKARP]: EggTier.COMMON, - [Species.LAPRAS]: EggTier.RARE, - [Species.DITTO]: EggTier.COMMON, - [Species.EEVEE]: EggTier.COMMON, - [Species.PORYGON]: EggTier.RARE, - [Species.OMANYTE]: EggTier.RARE, - [Species.KABUTO]: EggTier.RARE, - [Species.AERODACTYL]: EggTier.RARE, - [Species.ARTICUNO]: EggTier.EPIC, - [Species.ZAPDOS]: EggTier.EPIC, - [Species.MOLTRES]: EggTier.EPIC, - [Species.DRATINI]: EggTier.RARE, - [Species.MEWTWO]: EggTier.LEGENDARY, - [Species.MEW]: EggTier.EPIC, + [SpeciesId.BULBASAUR]: EggTier.COMMON, + [SpeciesId.CHARMANDER]: EggTier.COMMON, + [SpeciesId.SQUIRTLE]: EggTier.COMMON, + [SpeciesId.CATERPIE]: EggTier.COMMON, + [SpeciesId.WEEDLE]: EggTier.COMMON, + [SpeciesId.PIDGEY]: EggTier.COMMON, + [SpeciesId.RATTATA]: EggTier.COMMON, + [SpeciesId.SPEAROW]: EggTier.COMMON, + [SpeciesId.EKANS]: EggTier.COMMON, + [SpeciesId.SANDSHREW]: EggTier.COMMON, + [SpeciesId.NIDORAN_F]: EggTier.COMMON, + [SpeciesId.NIDORAN_M]: EggTier.COMMON, + [SpeciesId.VULPIX]: EggTier.COMMON, + [SpeciesId.ZUBAT]: EggTier.COMMON, + [SpeciesId.ODDISH]: EggTier.COMMON, + [SpeciesId.PARAS]: EggTier.COMMON, + [SpeciesId.VENONAT]: EggTier.COMMON, + [SpeciesId.DIGLETT]: EggTier.COMMON, + [SpeciesId.MEOWTH]: EggTier.COMMON, + [SpeciesId.PSYDUCK]: EggTier.COMMON, + [SpeciesId.MANKEY]: EggTier.RARE, + [SpeciesId.GROWLITHE]: EggTier.RARE, + [SpeciesId.POLIWAG]: EggTier.COMMON, + [SpeciesId.ABRA]: EggTier.RARE, + [SpeciesId.MACHOP]: EggTier.COMMON, + [SpeciesId.BELLSPROUT]: EggTier.COMMON, + [SpeciesId.TENTACOOL]: EggTier.COMMON, + [SpeciesId.GEODUDE]: EggTier.COMMON, + [SpeciesId.PONYTA]: EggTier.COMMON, + [SpeciesId.SLOWPOKE]: EggTier.COMMON, + [SpeciesId.MAGNEMITE]: EggTier.RARE, + [SpeciesId.FARFETCHD]: EggTier.RARE, + [SpeciesId.DODUO]: EggTier.COMMON, + [SpeciesId.SEEL]: EggTier.COMMON, + [SpeciesId.GRIMER]: EggTier.COMMON, + [SpeciesId.SHELLDER]: EggTier.RARE, + [SpeciesId.GASTLY]: EggTier.RARE, + [SpeciesId.ONIX]: EggTier.COMMON, + [SpeciesId.DROWZEE]: EggTier.COMMON, + [SpeciesId.KRABBY]: EggTier.COMMON, + [SpeciesId.VOLTORB]: EggTier.COMMON, + [SpeciesId.EXEGGCUTE]: EggTier.COMMON, + [SpeciesId.CUBONE]: EggTier.COMMON, + [SpeciesId.LICKITUNG]: EggTier.RARE, + [SpeciesId.KOFFING]: EggTier.COMMON, + [SpeciesId.RHYHORN]: EggTier.RARE, + [SpeciesId.TANGELA]: EggTier.COMMON, + [SpeciesId.KANGASKHAN]: EggTier.RARE, + [SpeciesId.HORSEA]: EggTier.COMMON, + [SpeciesId.GOLDEEN]: EggTier.COMMON, + [SpeciesId.STARYU]: EggTier.COMMON, + [SpeciesId.SCYTHER]: EggTier.RARE, + [SpeciesId.PINSIR]: EggTier.RARE, + [SpeciesId.TAUROS]: EggTier.RARE, + [SpeciesId.MAGIKARP]: EggTier.COMMON, + [SpeciesId.LAPRAS]: EggTier.RARE, + [SpeciesId.DITTO]: EggTier.COMMON, + [SpeciesId.EEVEE]: EggTier.COMMON, + [SpeciesId.PORYGON]: EggTier.RARE, + [SpeciesId.OMANYTE]: EggTier.RARE, + [SpeciesId.KABUTO]: EggTier.RARE, + [SpeciesId.AERODACTYL]: EggTier.RARE, + [SpeciesId.ARTICUNO]: EggTier.EPIC, + [SpeciesId.ZAPDOS]: EggTier.EPIC, + [SpeciesId.MOLTRES]: EggTier.EPIC, + [SpeciesId.DRATINI]: EggTier.RARE, + [SpeciesId.MEWTWO]: EggTier.LEGENDARY, + [SpeciesId.MEW]: EggTier.EPIC, - [Species.CHIKORITA]: EggTier.COMMON, - [Species.CYNDAQUIL]: EggTier.COMMON, - [Species.TOTODILE]: EggTier.COMMON, - [Species.SENTRET]: EggTier.COMMON, - [Species.HOOTHOOT]: EggTier.COMMON, - [Species.LEDYBA]: EggTier.COMMON, - [Species.SPINARAK]: EggTier.COMMON, - [Species.CHINCHOU]: EggTier.COMMON, - [Species.PICHU]: EggTier.RARE, - [Species.CLEFFA]: EggTier.COMMON, - [Species.IGGLYBUFF]: EggTier.COMMON, - [Species.TOGEPI]: EggTier.COMMON, - [Species.NATU]: EggTier.COMMON, - [Species.MAREEP]: EggTier.COMMON, - [Species.HOPPIP]: EggTier.COMMON, - [Species.AIPOM]: EggTier.COMMON, - [Species.SUNKERN]: EggTier.COMMON, - [Species.YANMA]: EggTier.COMMON, - [Species.WOOPER]: EggTier.COMMON, - [Species.MURKROW]: EggTier.COMMON, - [Species.MISDREAVUS]: EggTier.COMMON, - [Species.UNOWN]: EggTier.COMMON, - [Species.GIRAFARIG]: EggTier.COMMON, - [Species.PINECO]: EggTier.COMMON, - [Species.DUNSPARCE]: EggTier.COMMON, - [Species.GLIGAR]: EggTier.COMMON, - [Species.SNUBBULL]: EggTier.COMMON, - [Species.QWILFISH]: EggTier.COMMON, - [Species.SHUCKLE]: EggTier.COMMON, - [Species.HERACROSS]: EggTier.RARE, - [Species.SNEASEL]: EggTier.RARE, - [Species.TEDDIURSA]: EggTier.RARE, - [Species.SLUGMA]: EggTier.COMMON, - [Species.SWINUB]: EggTier.COMMON, - [Species.CORSOLA]: EggTier.COMMON, - [Species.REMORAID]: EggTier.COMMON, - [Species.DELIBIRD]: EggTier.COMMON, - [Species.SKARMORY]: EggTier.RARE, - [Species.HOUNDOUR]: EggTier.COMMON, - [Species.PHANPY]: EggTier.COMMON, - [Species.STANTLER]: EggTier.COMMON, - [Species.SMEARGLE]: EggTier.COMMON, - [Species.TYROGUE]: EggTier.COMMON, - [Species.SMOOCHUM]: EggTier.COMMON, - [Species.ELEKID]: EggTier.COMMON, - [Species.MAGBY]: EggTier.COMMON, - [Species.MILTANK]: EggTier.RARE, - [Species.RAIKOU]: EggTier.EPIC, - [Species.ENTEI]: EggTier.EPIC, - [Species.SUICUNE]: EggTier.EPIC, - [Species.LARVITAR]: EggTier.RARE, - [Species.LUGIA]: EggTier.LEGENDARY, - [Species.HO_OH]: EggTier.LEGENDARY, - [Species.CELEBI]: EggTier.EPIC, + [SpeciesId.CHIKORITA]: EggTier.COMMON, + [SpeciesId.CYNDAQUIL]: EggTier.COMMON, + [SpeciesId.TOTODILE]: EggTier.COMMON, + [SpeciesId.SENTRET]: EggTier.COMMON, + [SpeciesId.HOOTHOOT]: EggTier.COMMON, + [SpeciesId.LEDYBA]: EggTier.COMMON, + [SpeciesId.SPINARAK]: EggTier.COMMON, + [SpeciesId.CHINCHOU]: EggTier.COMMON, + [SpeciesId.PICHU]: EggTier.RARE, + [SpeciesId.CLEFFA]: EggTier.COMMON, + [SpeciesId.IGGLYBUFF]: EggTier.COMMON, + [SpeciesId.TOGEPI]: EggTier.COMMON, + [SpeciesId.NATU]: EggTier.COMMON, + [SpeciesId.MAREEP]: EggTier.COMMON, + [SpeciesId.HOPPIP]: EggTier.COMMON, + [SpeciesId.AIPOM]: EggTier.COMMON, + [SpeciesId.SUNKERN]: EggTier.COMMON, + [SpeciesId.YANMA]: EggTier.COMMON, + [SpeciesId.WOOPER]: EggTier.COMMON, + [SpeciesId.MURKROW]: EggTier.COMMON, + [SpeciesId.MISDREAVUS]: EggTier.COMMON, + [SpeciesId.UNOWN]: EggTier.COMMON, + [SpeciesId.GIRAFARIG]: EggTier.COMMON, + [SpeciesId.PINECO]: EggTier.COMMON, + [SpeciesId.DUNSPARCE]: EggTier.COMMON, + [SpeciesId.GLIGAR]: EggTier.COMMON, + [SpeciesId.SNUBBULL]: EggTier.COMMON, + [SpeciesId.QWILFISH]: EggTier.COMMON, + [SpeciesId.SHUCKLE]: EggTier.COMMON, + [SpeciesId.HERACROSS]: EggTier.RARE, + [SpeciesId.SNEASEL]: EggTier.RARE, + [SpeciesId.TEDDIURSA]: EggTier.RARE, + [SpeciesId.SLUGMA]: EggTier.COMMON, + [SpeciesId.SWINUB]: EggTier.COMMON, + [SpeciesId.CORSOLA]: EggTier.COMMON, + [SpeciesId.REMORAID]: EggTier.COMMON, + [SpeciesId.DELIBIRD]: EggTier.COMMON, + [SpeciesId.SKARMORY]: EggTier.RARE, + [SpeciesId.HOUNDOUR]: EggTier.COMMON, + [SpeciesId.PHANPY]: EggTier.COMMON, + [SpeciesId.STANTLER]: EggTier.COMMON, + [SpeciesId.SMEARGLE]: EggTier.COMMON, + [SpeciesId.TYROGUE]: EggTier.COMMON, + [SpeciesId.SMOOCHUM]: EggTier.COMMON, + [SpeciesId.ELEKID]: EggTier.COMMON, + [SpeciesId.MAGBY]: EggTier.COMMON, + [SpeciesId.MILTANK]: EggTier.RARE, + [SpeciesId.RAIKOU]: EggTier.EPIC, + [SpeciesId.ENTEI]: EggTier.EPIC, + [SpeciesId.SUICUNE]: EggTier.EPIC, + [SpeciesId.LARVITAR]: EggTier.RARE, + [SpeciesId.LUGIA]: EggTier.LEGENDARY, + [SpeciesId.HO_OH]: EggTier.LEGENDARY, + [SpeciesId.CELEBI]: EggTier.EPIC, - [Species.TREECKO]: EggTier.COMMON, - [Species.TORCHIC]: EggTier.COMMON, - [Species.MUDKIP]: EggTier.COMMON, - [Species.POOCHYENA]: EggTier.COMMON, - [Species.ZIGZAGOON]: EggTier.COMMON, - [Species.WURMPLE]: EggTier.COMMON, - [Species.LOTAD]: EggTier.COMMON, - [Species.SEEDOT]: EggTier.COMMON, - [Species.TAILLOW]: EggTier.COMMON, - [Species.WINGULL]: EggTier.COMMON, - [Species.RALTS]: EggTier.RARE, - [Species.SURSKIT]: EggTier.COMMON, - [Species.SHROOMISH]: EggTier.COMMON, - [Species.SLAKOTH]: EggTier.RARE, - [Species.NINCADA]: EggTier.RARE, - [Species.WHISMUR]: EggTier.COMMON, - [Species.MAKUHITA]: EggTier.COMMON, - [Species.AZURILL]: EggTier.COMMON, - [Species.NOSEPASS]: EggTier.COMMON, - [Species.SKITTY]: EggTier.COMMON, - [Species.SABLEYE]: EggTier.COMMON, - [Species.MAWILE]: EggTier.COMMON, - [Species.ARON]: EggTier.COMMON, - [Species.MEDITITE]: EggTier.COMMON, - [Species.ELECTRIKE]: EggTier.COMMON, - [Species.PLUSLE]: EggTier.COMMON, - [Species.MINUN]: EggTier.COMMON, - [Species.VOLBEAT]: EggTier.COMMON, - [Species.ILLUMISE]: EggTier.COMMON, - [Species.GULPIN]: EggTier.COMMON, - [Species.CARVANHA]: EggTier.COMMON, - [Species.WAILMER]: EggTier.COMMON, - [Species.NUMEL]: EggTier.COMMON, - [Species.TORKOAL]: EggTier.COMMON, - [Species.SPOINK]: EggTier.COMMON, - [Species.SPINDA]: EggTier.COMMON, - [Species.TRAPINCH]: EggTier.COMMON, - [Species.CACNEA]: EggTier.COMMON, - [Species.SWABLU]: EggTier.COMMON, - [Species.ZANGOOSE]: EggTier.RARE, - [Species.SEVIPER]: EggTier.RARE, - [Species.LUNATONE]: EggTier.COMMON, - [Species.SOLROCK]: EggTier.COMMON, - [Species.BARBOACH]: EggTier.COMMON, - [Species.CORPHISH]: EggTier.COMMON, - [Species.BALTOY]: EggTier.COMMON, - [Species.LILEEP]: EggTier.RARE, - [Species.ANORITH]: EggTier.RARE, - [Species.FEEBAS]: EggTier.RARE, - [Species.CASTFORM]: EggTier.COMMON, - [Species.KECLEON]: EggTier.COMMON, - [Species.SHUPPET]: EggTier.COMMON, - [Species.DUSKULL]: EggTier.COMMON, - [Species.TROPIUS]: EggTier.COMMON, - [Species.ABSOL]: EggTier.RARE, - [Species.WYNAUT]: EggTier.COMMON, - [Species.SNORUNT]: EggTier.COMMON, - [Species.SPHEAL]: EggTier.COMMON, - [Species.CLAMPERL]: EggTier.COMMON, - [Species.RELICANTH]: EggTier.RARE, - [Species.LUVDISC]: EggTier.COMMON, - [Species.BAGON]: EggTier.RARE, - [Species.BELDUM]: EggTier.RARE, - [Species.REGIROCK]: EggTier.EPIC, - [Species.REGICE]: EggTier.EPIC, - [Species.REGISTEEL]: EggTier.EPIC, - [Species.LATIAS]: EggTier.EPIC, - [Species.LATIOS]: EggTier.EPIC, - [Species.KYOGRE]: EggTier.LEGENDARY, - [Species.GROUDON]: EggTier.LEGENDARY, - [Species.RAYQUAZA]: EggTier.LEGENDARY, - [Species.JIRACHI]: EggTier.EPIC, - [Species.DEOXYS]: EggTier.EPIC, + [SpeciesId.TREECKO]: EggTier.COMMON, + [SpeciesId.TORCHIC]: EggTier.COMMON, + [SpeciesId.MUDKIP]: EggTier.COMMON, + [SpeciesId.POOCHYENA]: EggTier.COMMON, + [SpeciesId.ZIGZAGOON]: EggTier.COMMON, + [SpeciesId.WURMPLE]: EggTier.COMMON, + [SpeciesId.LOTAD]: EggTier.COMMON, + [SpeciesId.SEEDOT]: EggTier.COMMON, + [SpeciesId.TAILLOW]: EggTier.COMMON, + [SpeciesId.WINGULL]: EggTier.COMMON, + [SpeciesId.RALTS]: EggTier.RARE, + [SpeciesId.SURSKIT]: EggTier.COMMON, + [SpeciesId.SHROOMISH]: EggTier.COMMON, + [SpeciesId.SLAKOTH]: EggTier.RARE, + [SpeciesId.NINCADA]: EggTier.RARE, + [SpeciesId.WHISMUR]: EggTier.COMMON, + [SpeciesId.MAKUHITA]: EggTier.COMMON, + [SpeciesId.AZURILL]: EggTier.COMMON, + [SpeciesId.NOSEPASS]: EggTier.COMMON, + [SpeciesId.SKITTY]: EggTier.COMMON, + [SpeciesId.SABLEYE]: EggTier.COMMON, + [SpeciesId.MAWILE]: EggTier.COMMON, + [SpeciesId.ARON]: EggTier.COMMON, + [SpeciesId.MEDITITE]: EggTier.COMMON, + [SpeciesId.ELECTRIKE]: EggTier.COMMON, + [SpeciesId.PLUSLE]: EggTier.COMMON, + [SpeciesId.MINUN]: EggTier.COMMON, + [SpeciesId.VOLBEAT]: EggTier.COMMON, + [SpeciesId.ILLUMISE]: EggTier.COMMON, + [SpeciesId.GULPIN]: EggTier.COMMON, + [SpeciesId.CARVANHA]: EggTier.COMMON, + [SpeciesId.WAILMER]: EggTier.COMMON, + [SpeciesId.NUMEL]: EggTier.COMMON, + [SpeciesId.TORKOAL]: EggTier.COMMON, + [SpeciesId.SPOINK]: EggTier.COMMON, + [SpeciesId.SPINDA]: EggTier.COMMON, + [SpeciesId.TRAPINCH]: EggTier.COMMON, + [SpeciesId.CACNEA]: EggTier.COMMON, + [SpeciesId.SWABLU]: EggTier.COMMON, + [SpeciesId.ZANGOOSE]: EggTier.RARE, + [SpeciesId.SEVIPER]: EggTier.RARE, + [SpeciesId.LUNATONE]: EggTier.COMMON, + [SpeciesId.SOLROCK]: EggTier.COMMON, + [SpeciesId.BARBOACH]: EggTier.COMMON, + [SpeciesId.CORPHISH]: EggTier.COMMON, + [SpeciesId.BALTOY]: EggTier.COMMON, + [SpeciesId.LILEEP]: EggTier.RARE, + [SpeciesId.ANORITH]: EggTier.RARE, + [SpeciesId.FEEBAS]: EggTier.RARE, + [SpeciesId.CASTFORM]: EggTier.COMMON, + [SpeciesId.KECLEON]: EggTier.COMMON, + [SpeciesId.SHUPPET]: EggTier.COMMON, + [SpeciesId.DUSKULL]: EggTier.COMMON, + [SpeciesId.TROPIUS]: EggTier.COMMON, + [SpeciesId.ABSOL]: EggTier.RARE, + [SpeciesId.WYNAUT]: EggTier.COMMON, + [SpeciesId.SNORUNT]: EggTier.COMMON, + [SpeciesId.SPHEAL]: EggTier.COMMON, + [SpeciesId.CLAMPERL]: EggTier.COMMON, + [SpeciesId.RELICANTH]: EggTier.RARE, + [SpeciesId.LUVDISC]: EggTier.COMMON, + [SpeciesId.BAGON]: EggTier.RARE, + [SpeciesId.BELDUM]: EggTier.RARE, + [SpeciesId.REGIROCK]: EggTier.EPIC, + [SpeciesId.REGICE]: EggTier.EPIC, + [SpeciesId.REGISTEEL]: EggTier.EPIC, + [SpeciesId.LATIAS]: EggTier.EPIC, + [SpeciesId.LATIOS]: EggTier.EPIC, + [SpeciesId.KYOGRE]: EggTier.LEGENDARY, + [SpeciesId.GROUDON]: EggTier.LEGENDARY, + [SpeciesId.RAYQUAZA]: EggTier.LEGENDARY, + [SpeciesId.JIRACHI]: EggTier.EPIC, + [SpeciesId.DEOXYS]: EggTier.EPIC, - [Species.TURTWIG]: EggTier.COMMON, - [Species.CHIMCHAR]: EggTier.COMMON, - [Species.PIPLUP]: EggTier.COMMON, - [Species.STARLY]: EggTier.COMMON, - [Species.BIDOOF]: EggTier.COMMON, - [Species.KRICKETOT]: EggTier.COMMON, - [Species.SHINX]: EggTier.COMMON, - [Species.BUDEW]: EggTier.COMMON, - [Species.CRANIDOS]: EggTier.RARE, - [Species.SHIELDON]: EggTier.RARE, - [Species.BURMY]: EggTier.COMMON, - [Species.COMBEE]: EggTier.COMMON, - [Species.PACHIRISU]: EggTier.COMMON, - [Species.BUIZEL]: EggTier.COMMON, - [Species.CHERUBI]: EggTier.COMMON, - [Species.SHELLOS]: EggTier.COMMON, - [Species.DRIFLOON]: EggTier.COMMON, - [Species.BUNEARY]: EggTier.COMMON, - [Species.GLAMEOW]: EggTier.COMMON, - [Species.CHINGLING]: EggTier.COMMON, - [Species.STUNKY]: EggTier.COMMON, - [Species.BRONZOR]: EggTier.COMMON, - [Species.BONSLY]: EggTier.COMMON, - [Species.MIME_JR]: EggTier.COMMON, - [Species.HAPPINY]: EggTier.RARE, - [Species.CHATOT]: EggTier.COMMON, - [Species.SPIRITOMB]: EggTier.RARE, - [Species.GIBLE]: EggTier.RARE, - [Species.MUNCHLAX]: EggTier.RARE, - [Species.RIOLU]: EggTier.RARE, - [Species.HIPPOPOTAS]: EggTier.COMMON, - [Species.SKORUPI]: EggTier.COMMON, - [Species.CROAGUNK]: EggTier.COMMON, - [Species.CARNIVINE]: EggTier.COMMON, - [Species.FINNEON]: EggTier.COMMON, - [Species.MANTYKE]: EggTier.COMMON, - [Species.SNOVER]: EggTier.COMMON, - [Species.ROTOM]: EggTier.RARE, - [Species.UXIE]: EggTier.EPIC, - [Species.MESPRIT]: EggTier.EPIC, - [Species.AZELF]: EggTier.EPIC, - [Species.DIALGA]: EggTier.LEGENDARY, - [Species.PALKIA]: EggTier.LEGENDARY, - [Species.HEATRAN]: EggTier.EPIC, - [Species.REGIGIGAS]: EggTier.LEGENDARY, - [Species.GIRATINA]: EggTier.LEGENDARY, - [Species.CRESSELIA]: EggTier.EPIC, - [Species.PHIONE]: EggTier.EPIC, - [Species.MANAPHY]: EggTier.EPIC, - [Species.DARKRAI]: EggTier.EPIC, - [Species.SHAYMIN]: EggTier.EPIC, - [Species.ARCEUS]: EggTier.LEGENDARY, + [SpeciesId.TURTWIG]: EggTier.COMMON, + [SpeciesId.CHIMCHAR]: EggTier.COMMON, + [SpeciesId.PIPLUP]: EggTier.COMMON, + [SpeciesId.STARLY]: EggTier.COMMON, + [SpeciesId.BIDOOF]: EggTier.COMMON, + [SpeciesId.KRICKETOT]: EggTier.COMMON, + [SpeciesId.SHINX]: EggTier.COMMON, + [SpeciesId.BUDEW]: EggTier.COMMON, + [SpeciesId.CRANIDOS]: EggTier.RARE, + [SpeciesId.SHIELDON]: EggTier.RARE, + [SpeciesId.BURMY]: EggTier.COMMON, + [SpeciesId.COMBEE]: EggTier.COMMON, + [SpeciesId.PACHIRISU]: EggTier.COMMON, + [SpeciesId.BUIZEL]: EggTier.COMMON, + [SpeciesId.CHERUBI]: EggTier.COMMON, + [SpeciesId.SHELLOS]: EggTier.COMMON, + [SpeciesId.DRIFLOON]: EggTier.COMMON, + [SpeciesId.BUNEARY]: EggTier.COMMON, + [SpeciesId.GLAMEOW]: EggTier.COMMON, + [SpeciesId.CHINGLING]: EggTier.COMMON, + [SpeciesId.STUNKY]: EggTier.COMMON, + [SpeciesId.BRONZOR]: EggTier.COMMON, + [SpeciesId.BONSLY]: EggTier.COMMON, + [SpeciesId.MIME_JR]: EggTier.COMMON, + [SpeciesId.HAPPINY]: EggTier.RARE, + [SpeciesId.CHATOT]: EggTier.COMMON, + [SpeciesId.SPIRITOMB]: EggTier.RARE, + [SpeciesId.GIBLE]: EggTier.RARE, + [SpeciesId.MUNCHLAX]: EggTier.RARE, + [SpeciesId.RIOLU]: EggTier.RARE, + [SpeciesId.HIPPOPOTAS]: EggTier.COMMON, + [SpeciesId.SKORUPI]: EggTier.COMMON, + [SpeciesId.CROAGUNK]: EggTier.COMMON, + [SpeciesId.CARNIVINE]: EggTier.COMMON, + [SpeciesId.FINNEON]: EggTier.COMMON, + [SpeciesId.MANTYKE]: EggTier.COMMON, + [SpeciesId.SNOVER]: EggTier.COMMON, + [SpeciesId.ROTOM]: EggTier.RARE, + [SpeciesId.UXIE]: EggTier.EPIC, + [SpeciesId.MESPRIT]: EggTier.EPIC, + [SpeciesId.AZELF]: EggTier.EPIC, + [SpeciesId.DIALGA]: EggTier.LEGENDARY, + [SpeciesId.PALKIA]: EggTier.LEGENDARY, + [SpeciesId.HEATRAN]: EggTier.EPIC, + [SpeciesId.REGIGIGAS]: EggTier.LEGENDARY, + [SpeciesId.GIRATINA]: EggTier.LEGENDARY, + [SpeciesId.CRESSELIA]: EggTier.EPIC, + [SpeciesId.PHIONE]: EggTier.EPIC, + [SpeciesId.MANAPHY]: EggTier.EPIC, + [SpeciesId.DARKRAI]: EggTier.EPIC, + [SpeciesId.SHAYMIN]: EggTier.EPIC, + [SpeciesId.ARCEUS]: EggTier.LEGENDARY, - [Species.VICTINI]: EggTier.EPIC, - [Species.SNIVY]: EggTier.COMMON, - [Species.TEPIG]: EggTier.COMMON, - [Species.OSHAWOTT]: EggTier.COMMON, - [Species.PATRAT]: EggTier.COMMON, - [Species.LILLIPUP]: EggTier.COMMON, - [Species.PURRLOIN]: EggTier.COMMON, - [Species.PANSAGE]: EggTier.COMMON, - [Species.PANSEAR]: EggTier.COMMON, - [Species.PANPOUR]: EggTier.COMMON, - [Species.MUNNA]: EggTier.COMMON, - [Species.PIDOVE]: EggTier.COMMON, - [Species.BLITZLE]: EggTier.COMMON, - [Species.ROGGENROLA]: EggTier.COMMON, - [Species.WOOBAT]: EggTier.COMMON, - [Species.DRILBUR]: EggTier.RARE, - [Species.AUDINO]: EggTier.RARE, - [Species.TIMBURR]: EggTier.RARE, - [Species.TYMPOLE]: EggTier.COMMON, - [Species.THROH]: EggTier.RARE, - [Species.SAWK]: EggTier.RARE, - [Species.SEWADDLE]: EggTier.COMMON, - [Species.VENIPEDE]: EggTier.COMMON, - [Species.COTTONEE]: EggTier.COMMON, - [Species.PETILIL]: EggTier.COMMON, - [Species.BASCULIN]: EggTier.RARE, - [Species.SANDILE]: EggTier.RARE, - [Species.DARUMAKA]: EggTier.RARE, - [Species.MARACTUS]: EggTier.COMMON, - [Species.DWEBBLE]: EggTier.COMMON, - [Species.SCRAGGY]: EggTier.COMMON, - [Species.SIGILYPH]: EggTier.RARE, - [Species.YAMASK]: EggTier.COMMON, - [Species.TIRTOUGA]: EggTier.RARE, - [Species.ARCHEN]: EggTier.RARE, - [Species.TRUBBISH]: EggTier.COMMON, - [Species.ZORUA]: EggTier.COMMON, - [Species.MINCCINO]: EggTier.COMMON, - [Species.GOTHITA]: EggTier.COMMON, - [Species.SOLOSIS]: EggTier.COMMON, - [Species.DUCKLETT]: EggTier.COMMON, - [Species.VANILLITE]: EggTier.COMMON, - [Species.DEERLING]: EggTier.COMMON, - [Species.EMOLGA]: EggTier.COMMON, - [Species.KARRABLAST]: EggTier.COMMON, - [Species.FOONGUS]: EggTier.COMMON, - [Species.FRILLISH]: EggTier.COMMON, - [Species.ALOMOMOLA]: EggTier.RARE, - [Species.JOLTIK]: EggTier.COMMON, - [Species.FERROSEED]: EggTier.COMMON, - [Species.KLINK]: EggTier.COMMON, - [Species.TYNAMO]: EggTier.COMMON, - [Species.ELGYEM]: EggTier.COMMON, - [Species.LITWICK]: EggTier.COMMON, - [Species.AXEW]: EggTier.RARE, - [Species.CUBCHOO]: EggTier.COMMON, - [Species.CRYOGONAL]: EggTier.RARE, - [Species.SHELMET]: EggTier.COMMON, - [Species.STUNFISK]: EggTier.COMMON, - [Species.MIENFOO]: EggTier.COMMON, - [Species.DRUDDIGON]: EggTier.RARE, - [Species.GOLETT]: EggTier.COMMON, - [Species.PAWNIARD]: EggTier.RARE, - [Species.BOUFFALANT]: EggTier.RARE, - [Species.RUFFLET]: EggTier.COMMON, - [Species.VULLABY]: EggTier.COMMON, - [Species.HEATMOR]: EggTier.RARE, - [Species.DURANT]: EggTier.RARE, - [Species.DEINO]: EggTier.RARE, - [Species.LARVESTA]: EggTier.RARE, - [Species.COBALION]: EggTier.EPIC, - [Species.TERRAKION]: EggTier.EPIC, - [Species.VIRIZION]: EggTier.EPIC, - [Species.TORNADUS]: EggTier.EPIC, - [Species.THUNDURUS]: EggTier.EPIC, - [Species.RESHIRAM]: EggTier.LEGENDARY, - [Species.ZEKROM]: EggTier.LEGENDARY, - [Species.LANDORUS]: EggTier.EPIC, - [Species.KYUREM]: EggTier.LEGENDARY, - [Species.KELDEO]: EggTier.EPIC, - [Species.MELOETTA]: EggTier.EPIC, - [Species.GENESECT]: EggTier.EPIC, + [SpeciesId.VICTINI]: EggTier.EPIC, + [SpeciesId.SNIVY]: EggTier.COMMON, + [SpeciesId.TEPIG]: EggTier.COMMON, + [SpeciesId.OSHAWOTT]: EggTier.COMMON, + [SpeciesId.PATRAT]: EggTier.COMMON, + [SpeciesId.LILLIPUP]: EggTier.COMMON, + [SpeciesId.PURRLOIN]: EggTier.COMMON, + [SpeciesId.PANSAGE]: EggTier.COMMON, + [SpeciesId.PANSEAR]: EggTier.COMMON, + [SpeciesId.PANPOUR]: EggTier.COMMON, + [SpeciesId.MUNNA]: EggTier.COMMON, + [SpeciesId.PIDOVE]: EggTier.COMMON, + [SpeciesId.BLITZLE]: EggTier.COMMON, + [SpeciesId.ROGGENROLA]: EggTier.COMMON, + [SpeciesId.WOOBAT]: EggTier.COMMON, + [SpeciesId.DRILBUR]: EggTier.RARE, + [SpeciesId.AUDINO]: EggTier.RARE, + [SpeciesId.TIMBURR]: EggTier.RARE, + [SpeciesId.TYMPOLE]: EggTier.COMMON, + [SpeciesId.THROH]: EggTier.RARE, + [SpeciesId.SAWK]: EggTier.RARE, + [SpeciesId.SEWADDLE]: EggTier.COMMON, + [SpeciesId.VENIPEDE]: EggTier.COMMON, + [SpeciesId.COTTONEE]: EggTier.COMMON, + [SpeciesId.PETILIL]: EggTier.COMMON, + [SpeciesId.BASCULIN]: EggTier.RARE, + [SpeciesId.SANDILE]: EggTier.RARE, + [SpeciesId.DARUMAKA]: EggTier.RARE, + [SpeciesId.MARACTUS]: EggTier.COMMON, + [SpeciesId.DWEBBLE]: EggTier.COMMON, + [SpeciesId.SCRAGGY]: EggTier.COMMON, + [SpeciesId.SIGILYPH]: EggTier.RARE, + [SpeciesId.YAMASK]: EggTier.COMMON, + [SpeciesId.TIRTOUGA]: EggTier.RARE, + [SpeciesId.ARCHEN]: EggTier.RARE, + [SpeciesId.TRUBBISH]: EggTier.COMMON, + [SpeciesId.ZORUA]: EggTier.COMMON, + [SpeciesId.MINCCINO]: EggTier.COMMON, + [SpeciesId.GOTHITA]: EggTier.COMMON, + [SpeciesId.SOLOSIS]: EggTier.COMMON, + [SpeciesId.DUCKLETT]: EggTier.COMMON, + [SpeciesId.VANILLITE]: EggTier.COMMON, + [SpeciesId.DEERLING]: EggTier.COMMON, + [SpeciesId.EMOLGA]: EggTier.COMMON, + [SpeciesId.KARRABLAST]: EggTier.COMMON, + [SpeciesId.FOONGUS]: EggTier.COMMON, + [SpeciesId.FRILLISH]: EggTier.COMMON, + [SpeciesId.ALOMOMOLA]: EggTier.RARE, + [SpeciesId.JOLTIK]: EggTier.COMMON, + [SpeciesId.FERROSEED]: EggTier.COMMON, + [SpeciesId.KLINK]: EggTier.COMMON, + [SpeciesId.TYNAMO]: EggTier.COMMON, + [SpeciesId.ELGYEM]: EggTier.COMMON, + [SpeciesId.LITWICK]: EggTier.COMMON, + [SpeciesId.AXEW]: EggTier.RARE, + [SpeciesId.CUBCHOO]: EggTier.COMMON, + [SpeciesId.CRYOGONAL]: EggTier.RARE, + [SpeciesId.SHELMET]: EggTier.COMMON, + [SpeciesId.STUNFISK]: EggTier.COMMON, + [SpeciesId.MIENFOO]: EggTier.COMMON, + [SpeciesId.DRUDDIGON]: EggTier.RARE, + [SpeciesId.GOLETT]: EggTier.COMMON, + [SpeciesId.PAWNIARD]: EggTier.RARE, + [SpeciesId.BOUFFALANT]: EggTier.RARE, + [SpeciesId.RUFFLET]: EggTier.COMMON, + [SpeciesId.VULLABY]: EggTier.COMMON, + [SpeciesId.HEATMOR]: EggTier.RARE, + [SpeciesId.DURANT]: EggTier.RARE, + [SpeciesId.DEINO]: EggTier.RARE, + [SpeciesId.LARVESTA]: EggTier.RARE, + [SpeciesId.COBALION]: EggTier.EPIC, + [SpeciesId.TERRAKION]: EggTier.EPIC, + [SpeciesId.VIRIZION]: EggTier.EPIC, + [SpeciesId.TORNADUS]: EggTier.EPIC, + [SpeciesId.THUNDURUS]: EggTier.EPIC, + [SpeciesId.RESHIRAM]: EggTier.LEGENDARY, + [SpeciesId.ZEKROM]: EggTier.LEGENDARY, + [SpeciesId.LANDORUS]: EggTier.EPIC, + [SpeciesId.KYUREM]: EggTier.LEGENDARY, + [SpeciesId.KELDEO]: EggTier.EPIC, + [SpeciesId.MELOETTA]: EggTier.EPIC, + [SpeciesId.GENESECT]: EggTier.EPIC, - [Species.CHESPIN]: EggTier.COMMON, - [Species.FENNEKIN]: EggTier.COMMON, - [Species.FROAKIE]: EggTier.COMMON, - [Species.BUNNELBY]: EggTier.COMMON, - [Species.FLETCHLING]: EggTier.COMMON, - [Species.SCATTERBUG]: EggTier.COMMON, - [Species.LITLEO]: EggTier.COMMON, - [Species.FLABEBE]: EggTier.COMMON, - [Species.SKIDDO]: EggTier.COMMON, - [Species.PANCHAM]: EggTier.COMMON, - [Species.FURFROU]: EggTier.COMMON, - [Species.ESPURR]: EggTier.COMMON, - [Species.HONEDGE]: EggTier.RARE, - [Species.SPRITZEE]: EggTier.COMMON, - [Species.SWIRLIX]: EggTier.COMMON, - [Species.INKAY]: EggTier.COMMON, - [Species.BINACLE]: EggTier.COMMON, - [Species.SKRELP]: EggTier.COMMON, - [Species.CLAUNCHER]: EggTier.COMMON, - [Species.HELIOPTILE]: EggTier.COMMON, - [Species.TYRUNT]: EggTier.RARE, - [Species.AMAURA]: EggTier.RARE, - [Species.HAWLUCHA]: EggTier.RARE, - [Species.DEDENNE]: EggTier.COMMON, - [Species.CARBINK]: EggTier.COMMON, - [Species.GOOMY]: EggTier.RARE, - [Species.KLEFKI]: EggTier.COMMON, - [Species.PHANTUMP]: EggTier.COMMON, - [Species.PUMPKABOO]: EggTier.COMMON, - [Species.BERGMITE]: EggTier.COMMON, - [Species.NOIBAT]: EggTier.RARE, - [Species.XERNEAS]: EggTier.LEGENDARY, - [Species.YVELTAL]: EggTier.LEGENDARY, - [Species.ZYGARDE]: EggTier.LEGENDARY, - [Species.DIANCIE]: EggTier.EPIC, - [Species.HOOPA]: EggTier.EPIC, - [Species.VOLCANION]: EggTier.EPIC, - [Species.ETERNAL_FLOETTE]: EggTier.EPIC, + [SpeciesId.CHESPIN]: EggTier.COMMON, + [SpeciesId.FENNEKIN]: EggTier.COMMON, + [SpeciesId.FROAKIE]: EggTier.COMMON, + [SpeciesId.BUNNELBY]: EggTier.COMMON, + [SpeciesId.FLETCHLING]: EggTier.COMMON, + [SpeciesId.SCATTERBUG]: EggTier.COMMON, + [SpeciesId.LITLEO]: EggTier.COMMON, + [SpeciesId.FLABEBE]: EggTier.COMMON, + [SpeciesId.SKIDDO]: EggTier.COMMON, + [SpeciesId.PANCHAM]: EggTier.COMMON, + [SpeciesId.FURFROU]: EggTier.COMMON, + [SpeciesId.ESPURR]: EggTier.COMMON, + [SpeciesId.HONEDGE]: EggTier.RARE, + [SpeciesId.SPRITZEE]: EggTier.COMMON, + [SpeciesId.SWIRLIX]: EggTier.COMMON, + [SpeciesId.INKAY]: EggTier.COMMON, + [SpeciesId.BINACLE]: EggTier.COMMON, + [SpeciesId.SKRELP]: EggTier.COMMON, + [SpeciesId.CLAUNCHER]: EggTier.COMMON, + [SpeciesId.HELIOPTILE]: EggTier.COMMON, + [SpeciesId.TYRUNT]: EggTier.RARE, + [SpeciesId.AMAURA]: EggTier.RARE, + [SpeciesId.HAWLUCHA]: EggTier.RARE, + [SpeciesId.DEDENNE]: EggTier.COMMON, + [SpeciesId.CARBINK]: EggTier.COMMON, + [SpeciesId.GOOMY]: EggTier.RARE, + [SpeciesId.KLEFKI]: EggTier.COMMON, + [SpeciesId.PHANTUMP]: EggTier.COMMON, + [SpeciesId.PUMPKABOO]: EggTier.COMMON, + [SpeciesId.BERGMITE]: EggTier.COMMON, + [SpeciesId.NOIBAT]: EggTier.RARE, + [SpeciesId.XERNEAS]: EggTier.LEGENDARY, + [SpeciesId.YVELTAL]: EggTier.LEGENDARY, + [SpeciesId.ZYGARDE]: EggTier.LEGENDARY, + [SpeciesId.DIANCIE]: EggTier.EPIC, + [SpeciesId.HOOPA]: EggTier.EPIC, + [SpeciesId.VOLCANION]: EggTier.EPIC, + [SpeciesId.ETERNAL_FLOETTE]: EggTier.EPIC, - [Species.ROWLET]: EggTier.COMMON, - [Species.LITTEN]: EggTier.COMMON, - [Species.POPPLIO]: EggTier.COMMON, - [Species.PIKIPEK]: EggTier.COMMON, - [Species.YUNGOOS]: EggTier.COMMON, - [Species.GRUBBIN]: EggTier.COMMON, - [Species.CRABRAWLER]: EggTier.COMMON, - [Species.ORICORIO]: EggTier.COMMON, - [Species.CUTIEFLY]: EggTier.COMMON, - [Species.ROCKRUFF]: EggTier.COMMON, - [Species.WISHIWASHI]: EggTier.COMMON, - [Species.MAREANIE]: EggTier.COMMON, - [Species.MUDBRAY]: EggTier.COMMON, - [Species.DEWPIDER]: EggTier.COMMON, - [Species.FOMANTIS]: EggTier.COMMON, - [Species.MORELULL]: EggTier.COMMON, - [Species.SALANDIT]: EggTier.COMMON, - [Species.STUFFUL]: EggTier.COMMON, - [Species.BOUNSWEET]: EggTier.COMMON, - [Species.COMFEY]: EggTier.RARE, - [Species.ORANGURU]: EggTier.RARE, - [Species.PASSIMIAN]: EggTier.RARE, - [Species.WIMPOD]: EggTier.COMMON, - [Species.SANDYGAST]: EggTier.COMMON, - [Species.PYUKUMUKU]: EggTier.COMMON, - [Species.TYPE_NULL]: EggTier.EPIC, - [Species.MINIOR]: EggTier.RARE, - [Species.KOMALA]: EggTier.COMMON, - [Species.TURTONATOR]: EggTier.RARE, - [Species.TOGEDEMARU]: EggTier.COMMON, - [Species.MIMIKYU]: EggTier.RARE, - [Species.BRUXISH]: EggTier.RARE, - [Species.DRAMPA]: EggTier.RARE, - [Species.DHELMISE]: EggTier.RARE, - [Species.JANGMO_O]: EggTier.RARE, - [Species.TAPU_KOKO]: EggTier.EPIC, - [Species.TAPU_LELE]: EggTier.EPIC, - [Species.TAPU_BULU]: EggTier.EPIC, - [Species.TAPU_FINI]: EggTier.EPIC, - [Species.COSMOG]: EggTier.LEGENDARY, - [Species.NIHILEGO]: EggTier.EPIC, - [Species.BUZZWOLE]: EggTier.EPIC, - [Species.PHEROMOSA]: EggTier.EPIC, - [Species.XURKITREE]: EggTier.EPIC, - [Species.CELESTEELA]: EggTier.EPIC, - [Species.KARTANA]: EggTier.EPIC, - [Species.GUZZLORD]: EggTier.EPIC, - [Species.NECROZMA]: EggTier.LEGENDARY, - [Species.MAGEARNA]: EggTier.EPIC, - [Species.MARSHADOW]: EggTier.EPIC, - [Species.POIPOLE]: EggTier.EPIC, - [Species.STAKATAKA]: EggTier.EPIC, - [Species.BLACEPHALON]: EggTier.EPIC, - [Species.ZERAORA]: EggTier.EPIC, - [Species.MELTAN]: EggTier.EPIC, - [Species.ALOLA_RATTATA]: EggTier.COMMON, - [Species.ALOLA_SANDSHREW]: EggTier.RARE, - [Species.ALOLA_VULPIX]: EggTier.RARE, - [Species.ALOLA_DIGLETT]: EggTier.RARE, - [Species.ALOLA_MEOWTH]: EggTier.RARE, - [Species.ALOLA_GEODUDE]: EggTier.RARE, - [Species.ALOLA_GRIMER]: EggTier.RARE, + [SpeciesId.ROWLET]: EggTier.COMMON, + [SpeciesId.LITTEN]: EggTier.COMMON, + [SpeciesId.POPPLIO]: EggTier.COMMON, + [SpeciesId.PIKIPEK]: EggTier.COMMON, + [SpeciesId.YUNGOOS]: EggTier.COMMON, + [SpeciesId.GRUBBIN]: EggTier.COMMON, + [SpeciesId.CRABRAWLER]: EggTier.COMMON, + [SpeciesId.ORICORIO]: EggTier.COMMON, + [SpeciesId.CUTIEFLY]: EggTier.COMMON, + [SpeciesId.ROCKRUFF]: EggTier.COMMON, + [SpeciesId.WISHIWASHI]: EggTier.COMMON, + [SpeciesId.MAREANIE]: EggTier.COMMON, + [SpeciesId.MUDBRAY]: EggTier.COMMON, + [SpeciesId.DEWPIDER]: EggTier.COMMON, + [SpeciesId.FOMANTIS]: EggTier.COMMON, + [SpeciesId.MORELULL]: EggTier.COMMON, + [SpeciesId.SALANDIT]: EggTier.COMMON, + [SpeciesId.STUFFUL]: EggTier.COMMON, + [SpeciesId.BOUNSWEET]: EggTier.COMMON, + [SpeciesId.COMFEY]: EggTier.RARE, + [SpeciesId.ORANGURU]: EggTier.RARE, + [SpeciesId.PASSIMIAN]: EggTier.RARE, + [SpeciesId.WIMPOD]: EggTier.COMMON, + [SpeciesId.SANDYGAST]: EggTier.COMMON, + [SpeciesId.PYUKUMUKU]: EggTier.COMMON, + [SpeciesId.TYPE_NULL]: EggTier.EPIC, + [SpeciesId.MINIOR]: EggTier.RARE, + [SpeciesId.KOMALA]: EggTier.COMMON, + [SpeciesId.TURTONATOR]: EggTier.RARE, + [SpeciesId.TOGEDEMARU]: EggTier.COMMON, + [SpeciesId.MIMIKYU]: EggTier.RARE, + [SpeciesId.BRUXISH]: EggTier.RARE, + [SpeciesId.DRAMPA]: EggTier.RARE, + [SpeciesId.DHELMISE]: EggTier.RARE, + [SpeciesId.JANGMO_O]: EggTier.RARE, + [SpeciesId.TAPU_KOKO]: EggTier.EPIC, + [SpeciesId.TAPU_LELE]: EggTier.EPIC, + [SpeciesId.TAPU_BULU]: EggTier.EPIC, + [SpeciesId.TAPU_FINI]: EggTier.EPIC, + [SpeciesId.COSMOG]: EggTier.LEGENDARY, + [SpeciesId.NIHILEGO]: EggTier.EPIC, + [SpeciesId.BUZZWOLE]: EggTier.EPIC, + [SpeciesId.PHEROMOSA]: EggTier.EPIC, + [SpeciesId.XURKITREE]: EggTier.EPIC, + [SpeciesId.CELESTEELA]: EggTier.EPIC, + [SpeciesId.KARTANA]: EggTier.EPIC, + [SpeciesId.GUZZLORD]: EggTier.EPIC, + [SpeciesId.NECROZMA]: EggTier.LEGENDARY, + [SpeciesId.MAGEARNA]: EggTier.EPIC, + [SpeciesId.MARSHADOW]: EggTier.EPIC, + [SpeciesId.POIPOLE]: EggTier.EPIC, + [SpeciesId.STAKATAKA]: EggTier.EPIC, + [SpeciesId.BLACEPHALON]: EggTier.EPIC, + [SpeciesId.ZERAORA]: EggTier.EPIC, + [SpeciesId.MELTAN]: EggTier.EPIC, + [SpeciesId.ALOLA_RATTATA]: EggTier.COMMON, + [SpeciesId.ALOLA_SANDSHREW]: EggTier.RARE, + [SpeciesId.ALOLA_VULPIX]: EggTier.RARE, + [SpeciesId.ALOLA_DIGLETT]: EggTier.RARE, + [SpeciesId.ALOLA_MEOWTH]: EggTier.RARE, + [SpeciesId.ALOLA_GEODUDE]: EggTier.RARE, + [SpeciesId.ALOLA_GRIMER]: EggTier.RARE, - [Species.GROOKEY]: EggTier.COMMON, - [Species.SCORBUNNY]: EggTier.COMMON, - [Species.SOBBLE]: EggTier.COMMON, - [Species.SKWOVET]: EggTier.COMMON, - [Species.ROOKIDEE]: EggTier.COMMON, - [Species.BLIPBUG]: EggTier.COMMON, - [Species.NICKIT]: EggTier.COMMON, - [Species.GOSSIFLEUR]: EggTier.COMMON, - [Species.WOOLOO]: EggTier.COMMON, - [Species.CHEWTLE]: EggTier.COMMON, - [Species.YAMPER]: EggTier.COMMON, - [Species.ROLYCOLY]: EggTier.COMMON, - [Species.APPLIN]: EggTier.COMMON, - [Species.SILICOBRA]: EggTier.COMMON, - [Species.CRAMORANT]: EggTier.COMMON, - [Species.ARROKUDA]: EggTier.COMMON, - [Species.TOXEL]: EggTier.COMMON, - [Species.SIZZLIPEDE]: EggTier.COMMON, - [Species.CLOBBOPUS]: EggTier.COMMON, - [Species.SINISTEA]: EggTier.COMMON, - [Species.HATENNA]: EggTier.COMMON, - [Species.IMPIDIMP]: EggTier.COMMON, - [Species.MILCERY]: EggTier.COMMON, - [Species.FALINKS]: EggTier.RARE, - [Species.PINCURCHIN]: EggTier.COMMON, - [Species.SNOM]: EggTier.COMMON, - [Species.STONJOURNER]: EggTier.COMMON, - [Species.EISCUE]: EggTier.COMMON, - [Species.INDEEDEE]: EggTier.RARE, - [Species.MORPEKO]: EggTier.COMMON, - [Species.CUFANT]: EggTier.COMMON, - [Species.DRACOZOLT]: EggTier.RARE, - [Species.ARCTOZOLT]: EggTier.RARE, - [Species.DRACOVISH]: EggTier.RARE, - [Species.ARCTOVISH]: EggTier.RARE, - [Species.DURALUDON]: EggTier.RARE, - [Species.DREEPY]: EggTier.RARE, - [Species.ZACIAN]: EggTier.LEGENDARY, - [Species.ZAMAZENTA]: EggTier.LEGENDARY, - [Species.ETERNATUS]: EggTier.LEGENDARY, - [Species.KUBFU]: EggTier.EPIC, - [Species.ZARUDE]: EggTier.EPIC, - [Species.REGIELEKI]: EggTier.EPIC, - [Species.REGIDRAGO]: EggTier.EPIC, - [Species.GLASTRIER]: EggTier.EPIC, - [Species.SPECTRIER]: EggTier.EPIC, - [Species.CALYREX]: EggTier.LEGENDARY, - [Species.ENAMORUS]: EggTier.EPIC, - [Species.GALAR_MEOWTH]: EggTier.RARE, - [Species.GALAR_PONYTA]: EggTier.RARE, - [Species.GALAR_SLOWPOKE]: EggTier.RARE, - [Species.GALAR_FARFETCHD]: EggTier.RARE, - [Species.GALAR_ARTICUNO]: EggTier.EPIC, - [Species.GALAR_ZAPDOS]: EggTier.EPIC, - [Species.GALAR_MOLTRES]: EggTier.EPIC, - [Species.GALAR_CORSOLA]: EggTier.RARE, - [Species.GALAR_ZIGZAGOON]: EggTier.RARE, - [Species.GALAR_DARUMAKA]: EggTier.RARE, - [Species.GALAR_YAMASK]: EggTier.RARE, - [Species.GALAR_STUNFISK]: EggTier.RARE, - [Species.HISUI_GROWLITHE]: EggTier.RARE, - [Species.HISUI_VOLTORB]: EggTier.RARE, - [Species.HISUI_QWILFISH]: EggTier.RARE, - [Species.HISUI_SNEASEL]: EggTier.RARE, - [Species.HISUI_ZORUA]: EggTier.RARE, + [SpeciesId.GROOKEY]: EggTier.COMMON, + [SpeciesId.SCORBUNNY]: EggTier.COMMON, + [SpeciesId.SOBBLE]: EggTier.COMMON, + [SpeciesId.SKWOVET]: EggTier.COMMON, + [SpeciesId.ROOKIDEE]: EggTier.COMMON, + [SpeciesId.BLIPBUG]: EggTier.COMMON, + [SpeciesId.NICKIT]: EggTier.COMMON, + [SpeciesId.GOSSIFLEUR]: EggTier.COMMON, + [SpeciesId.WOOLOO]: EggTier.COMMON, + [SpeciesId.CHEWTLE]: EggTier.COMMON, + [SpeciesId.YAMPER]: EggTier.COMMON, + [SpeciesId.ROLYCOLY]: EggTier.COMMON, + [SpeciesId.APPLIN]: EggTier.COMMON, + [SpeciesId.SILICOBRA]: EggTier.COMMON, + [SpeciesId.CRAMORANT]: EggTier.COMMON, + [SpeciesId.ARROKUDA]: EggTier.COMMON, + [SpeciesId.TOXEL]: EggTier.COMMON, + [SpeciesId.SIZZLIPEDE]: EggTier.COMMON, + [SpeciesId.CLOBBOPUS]: EggTier.COMMON, + [SpeciesId.SINISTEA]: EggTier.COMMON, + [SpeciesId.HATENNA]: EggTier.COMMON, + [SpeciesId.IMPIDIMP]: EggTier.COMMON, + [SpeciesId.MILCERY]: EggTier.COMMON, + [SpeciesId.FALINKS]: EggTier.RARE, + [SpeciesId.PINCURCHIN]: EggTier.COMMON, + [SpeciesId.SNOM]: EggTier.COMMON, + [SpeciesId.STONJOURNER]: EggTier.COMMON, + [SpeciesId.EISCUE]: EggTier.COMMON, + [SpeciesId.INDEEDEE]: EggTier.RARE, + [SpeciesId.MORPEKO]: EggTier.COMMON, + [SpeciesId.CUFANT]: EggTier.COMMON, + [SpeciesId.DRACOZOLT]: EggTier.RARE, + [SpeciesId.ARCTOZOLT]: EggTier.RARE, + [SpeciesId.DRACOVISH]: EggTier.RARE, + [SpeciesId.ARCTOVISH]: EggTier.RARE, + [SpeciesId.DURALUDON]: EggTier.RARE, + [SpeciesId.DREEPY]: EggTier.RARE, + [SpeciesId.ZACIAN]: EggTier.LEGENDARY, + [SpeciesId.ZAMAZENTA]: EggTier.LEGENDARY, + [SpeciesId.ETERNATUS]: EggTier.LEGENDARY, + [SpeciesId.KUBFU]: EggTier.EPIC, + [SpeciesId.ZARUDE]: EggTier.EPIC, + [SpeciesId.REGIELEKI]: EggTier.EPIC, + [SpeciesId.REGIDRAGO]: EggTier.EPIC, + [SpeciesId.GLASTRIER]: EggTier.EPIC, + [SpeciesId.SPECTRIER]: EggTier.EPIC, + [SpeciesId.CALYREX]: EggTier.LEGENDARY, + [SpeciesId.ENAMORUS]: EggTier.EPIC, + [SpeciesId.GALAR_MEOWTH]: EggTier.RARE, + [SpeciesId.GALAR_PONYTA]: EggTier.RARE, + [SpeciesId.GALAR_SLOWPOKE]: EggTier.RARE, + [SpeciesId.GALAR_FARFETCHD]: EggTier.RARE, + [SpeciesId.GALAR_ARTICUNO]: EggTier.EPIC, + [SpeciesId.GALAR_ZAPDOS]: EggTier.EPIC, + [SpeciesId.GALAR_MOLTRES]: EggTier.EPIC, + [SpeciesId.GALAR_CORSOLA]: EggTier.RARE, + [SpeciesId.GALAR_ZIGZAGOON]: EggTier.RARE, + [SpeciesId.GALAR_DARUMAKA]: EggTier.RARE, + [SpeciesId.GALAR_YAMASK]: EggTier.RARE, + [SpeciesId.GALAR_STUNFISK]: EggTier.RARE, + [SpeciesId.HISUI_GROWLITHE]: EggTier.RARE, + [SpeciesId.HISUI_VOLTORB]: EggTier.RARE, + [SpeciesId.HISUI_QWILFISH]: EggTier.RARE, + [SpeciesId.HISUI_SNEASEL]: EggTier.RARE, + [SpeciesId.HISUI_ZORUA]: EggTier.RARE, - [Species.SPRIGATITO]: EggTier.COMMON, - [Species.FUECOCO]: EggTier.COMMON, - [Species.QUAXLY]: EggTier.COMMON, - [Species.LECHONK]: EggTier.COMMON, - [Species.TAROUNTULA]: EggTier.COMMON, - [Species.NYMBLE]: EggTier.COMMON, - [Species.PAWMI]: EggTier.COMMON, - [Species.TANDEMAUS]: EggTier.RARE, - [Species.FIDOUGH]: EggTier.COMMON, - [Species.SMOLIV]: EggTier.COMMON, - [Species.SQUAWKABILLY]: EggTier.COMMON, - [Species.NACLI]: EggTier.RARE, - [Species.CHARCADET]: EggTier.RARE, - [Species.TADBULB]: EggTier.COMMON, - [Species.WATTREL]: EggTier.COMMON, - [Species.MASCHIFF]: EggTier.COMMON, - [Species.SHROODLE]: EggTier.COMMON, - [Species.BRAMBLIN]: EggTier.COMMON, - [Species.TOEDSCOOL]: EggTier.COMMON, - [Species.KLAWF]: EggTier.COMMON, - [Species.CAPSAKID]: EggTier.COMMON, - [Species.RELLOR]: EggTier.COMMON, - [Species.FLITTLE]: EggTier.COMMON, - [Species.TINKATINK]: EggTier.RARE, - [Species.WIGLETT]: EggTier.COMMON, - [Species.BOMBIRDIER]: EggTier.COMMON, - [Species.FINIZEN]: EggTier.RARE, - [Species.VAROOM]: EggTier.RARE, - [Species.CYCLIZAR]: EggTier.RARE, - [Species.ORTHWORM]: EggTier.RARE, - [Species.GLIMMET]: EggTier.RARE, - [Species.GREAVARD]: EggTier.COMMON, - [Species.FLAMIGO]: EggTier.RARE, - [Species.CETODDLE]: EggTier.COMMON, - [Species.VELUZA]: EggTier.RARE, - [Species.DONDOZO]: EggTier.RARE, - [Species.TATSUGIRI]: EggTier.RARE, - [Species.GREAT_TUSK]: EggTier.EPIC, - [Species.SCREAM_TAIL]: EggTier.EPIC, - [Species.BRUTE_BONNET]: EggTier.EPIC, - [Species.FLUTTER_MANE]: EggTier.EPIC, - [Species.SLITHER_WING]: EggTier.EPIC, - [Species.SANDY_SHOCKS]: EggTier.EPIC, - [Species.IRON_TREADS]: EggTier.EPIC, - [Species.IRON_BUNDLE]: EggTier.EPIC, - [Species.IRON_HANDS]: EggTier.EPIC, - [Species.IRON_JUGULIS]: EggTier.EPIC, - [Species.IRON_MOTH]: EggTier.EPIC, - [Species.IRON_THORNS]: EggTier.EPIC, - [Species.FRIGIBAX]: EggTier.RARE, - [Species.GIMMIGHOUL]: EggTier.RARE, - [Species.WO_CHIEN]: EggTier.EPIC, - [Species.CHIEN_PAO]: EggTier.EPIC, - [Species.TING_LU]: EggTier.EPIC, - [Species.CHI_YU]: EggTier.EPIC, - [Species.ROARING_MOON]: EggTier.EPIC, - [Species.IRON_VALIANT]: EggTier.EPIC, - [Species.KORAIDON]: EggTier.LEGENDARY, - [Species.MIRAIDON]: EggTier.LEGENDARY, - [Species.WALKING_WAKE]: EggTier.EPIC, - [Species.IRON_LEAVES]: EggTier.EPIC, - [Species.POLTCHAGEIST]: EggTier.RARE, - [Species.OKIDOGI]: EggTier.EPIC, - [Species.MUNKIDORI]: EggTier.EPIC, - [Species.FEZANDIPITI]: EggTier.EPIC, - [Species.OGERPON]: EggTier.EPIC, - [Species.GOUGING_FIRE]: EggTier.EPIC, - [Species.RAGING_BOLT]: EggTier.EPIC, - [Species.IRON_BOULDER]: EggTier.EPIC, - [Species.IRON_CROWN]: EggTier.EPIC, - [Species.TERAPAGOS]: EggTier.LEGENDARY, - [Species.PECHARUNT]: EggTier.EPIC, - [Species.PALDEA_TAUROS]: EggTier.RARE, - [Species.PALDEA_WOOPER]: EggTier.RARE, - [Species.BLOODMOON_URSALUNA]: EggTier.EPIC + [SpeciesId.SPRIGATITO]: EggTier.COMMON, + [SpeciesId.FUECOCO]: EggTier.COMMON, + [SpeciesId.QUAXLY]: EggTier.COMMON, + [SpeciesId.LECHONK]: EggTier.COMMON, + [SpeciesId.TAROUNTULA]: EggTier.COMMON, + [SpeciesId.NYMBLE]: EggTier.COMMON, + [SpeciesId.PAWMI]: EggTier.COMMON, + [SpeciesId.TANDEMAUS]: EggTier.RARE, + [SpeciesId.FIDOUGH]: EggTier.COMMON, + [SpeciesId.SMOLIV]: EggTier.COMMON, + [SpeciesId.SQUAWKABILLY]: EggTier.COMMON, + [SpeciesId.NACLI]: EggTier.RARE, + [SpeciesId.CHARCADET]: EggTier.RARE, + [SpeciesId.TADBULB]: EggTier.COMMON, + [SpeciesId.WATTREL]: EggTier.COMMON, + [SpeciesId.MASCHIFF]: EggTier.COMMON, + [SpeciesId.SHROODLE]: EggTier.COMMON, + [SpeciesId.BRAMBLIN]: EggTier.COMMON, + [SpeciesId.TOEDSCOOL]: EggTier.COMMON, + [SpeciesId.KLAWF]: EggTier.COMMON, + [SpeciesId.CAPSAKID]: EggTier.COMMON, + [SpeciesId.RELLOR]: EggTier.COMMON, + [SpeciesId.FLITTLE]: EggTier.COMMON, + [SpeciesId.TINKATINK]: EggTier.RARE, + [SpeciesId.WIGLETT]: EggTier.COMMON, + [SpeciesId.BOMBIRDIER]: EggTier.COMMON, + [SpeciesId.FINIZEN]: EggTier.RARE, + [SpeciesId.VAROOM]: EggTier.RARE, + [SpeciesId.CYCLIZAR]: EggTier.RARE, + [SpeciesId.ORTHWORM]: EggTier.RARE, + [SpeciesId.GLIMMET]: EggTier.RARE, + [SpeciesId.GREAVARD]: EggTier.COMMON, + [SpeciesId.FLAMIGO]: EggTier.RARE, + [SpeciesId.CETODDLE]: EggTier.COMMON, + [SpeciesId.VELUZA]: EggTier.RARE, + [SpeciesId.DONDOZO]: EggTier.RARE, + [SpeciesId.TATSUGIRI]: EggTier.RARE, + [SpeciesId.GREAT_TUSK]: EggTier.EPIC, + [SpeciesId.SCREAM_TAIL]: EggTier.EPIC, + [SpeciesId.BRUTE_BONNET]: EggTier.EPIC, + [SpeciesId.FLUTTER_MANE]: EggTier.EPIC, + [SpeciesId.SLITHER_WING]: EggTier.EPIC, + [SpeciesId.SANDY_SHOCKS]: EggTier.EPIC, + [SpeciesId.IRON_TREADS]: EggTier.EPIC, + [SpeciesId.IRON_BUNDLE]: EggTier.EPIC, + [SpeciesId.IRON_HANDS]: EggTier.EPIC, + [SpeciesId.IRON_JUGULIS]: EggTier.EPIC, + [SpeciesId.IRON_MOTH]: EggTier.EPIC, + [SpeciesId.IRON_THORNS]: EggTier.EPIC, + [SpeciesId.FRIGIBAX]: EggTier.RARE, + [SpeciesId.GIMMIGHOUL]: EggTier.RARE, + [SpeciesId.WO_CHIEN]: EggTier.EPIC, + [SpeciesId.CHIEN_PAO]: EggTier.EPIC, + [SpeciesId.TING_LU]: EggTier.EPIC, + [SpeciesId.CHI_YU]: EggTier.EPIC, + [SpeciesId.ROARING_MOON]: EggTier.EPIC, + [SpeciesId.IRON_VALIANT]: EggTier.EPIC, + [SpeciesId.KORAIDON]: EggTier.LEGENDARY, + [SpeciesId.MIRAIDON]: EggTier.LEGENDARY, + [SpeciesId.WALKING_WAKE]: EggTier.EPIC, + [SpeciesId.IRON_LEAVES]: EggTier.EPIC, + [SpeciesId.POLTCHAGEIST]: EggTier.RARE, + [SpeciesId.OKIDOGI]: EggTier.EPIC, + [SpeciesId.MUNKIDORI]: EggTier.EPIC, + [SpeciesId.FEZANDIPITI]: EggTier.EPIC, + [SpeciesId.OGERPON]: EggTier.EPIC, + [SpeciesId.GOUGING_FIRE]: EggTier.EPIC, + [SpeciesId.RAGING_BOLT]: EggTier.EPIC, + [SpeciesId.IRON_BOULDER]: EggTier.EPIC, + [SpeciesId.IRON_CROWN]: EggTier.EPIC, + [SpeciesId.TERAPAGOS]: EggTier.LEGENDARY, + [SpeciesId.PECHARUNT]: EggTier.EPIC, + [SpeciesId.PALDEA_TAUROS]: EggTier.RARE, + [SpeciesId.PALDEA_WOOPER]: EggTier.RARE, + [SpeciesId.BLOODMOON_URSALUNA]: EggTier.EPIC }; diff --git a/src/data/balance/starters.ts b/src/data/balance/starters.ts index 3468163c988..2db10f2e67a 100644 --- a/src/data/balance/starters.ts +++ b/src/data/balance/starters.ts @@ -1,4 +1,4 @@ -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; export const POKERUS_STARTER_COUNT = 5; @@ -38,584 +38,584 @@ export function getStarterValueFriendshipCap(starterCost: number): number { } export const speciesStarterCosts = { - [Species.BULBASAUR]: 3, - [Species.CHARMANDER]: 3, - [Species.SQUIRTLE]: 3, - [Species.CATERPIE]: 2, - [Species.WEEDLE]: 1, - [Species.PIDGEY]: 1, - [Species.RATTATA]: 1, - [Species.SPEAROW]: 1, - [Species.EKANS]: 2, - [Species.PIKACHU]: 4, - [Species.SANDSHREW]: 2, - [Species.NIDORAN_F]: 3, - [Species.NIDORAN_M]: 3, - [Species.VULPIX]: 3, - [Species.ZUBAT]: 3, - [Species.ODDISH]: 3, - [Species.PARAS]: 2, - [Species.VENONAT]: 2, - [Species.DIGLETT]: 2, - [Species.MEOWTH]: 3, - [Species.PSYDUCK]: 2, - [Species.MANKEY]: 4, - [Species.GROWLITHE]: 4, - [Species.POLIWAG]: 2, - [Species.ABRA]: 4, - [Species.MACHOP]: 3, - [Species.BELLSPROUT]: 2, - [Species.TENTACOOL]: 3, - [Species.GEODUDE]: 3, - [Species.PONYTA]: 2, - [Species.SLOWPOKE]: 3, - [Species.MAGNEMITE]: 4, - [Species.FARFETCHD]: 2, - [Species.DODUO]: 3, - [Species.SEEL]: 1, - [Species.GRIMER]: 2, - [Species.SHELLDER]: 5, - [Species.GASTLY]: 4, - [Species.ONIX]: 3, - [Species.DROWZEE]: 2, - [Species.KRABBY]: 3, - [Species.VOLTORB]: 2, - [Species.EXEGGCUTE]: 3, - [Species.CUBONE]: 3, - [Species.LICKITUNG]: 3, - [Species.KOFFING]: 2, - [Species.RHYHORN]: 4, - [Species.TANGELA]: 3, - [Species.KANGASKHAN]: 4, - [Species.HORSEA]: 3, - [Species.GOLDEEN]: 2, - [Species.STARYU]: 3, - [Species.SCYTHER]: 5, - [Species.PINSIR]: 4, - [Species.TAUROS]: 4, - [Species.MAGIKARP]: 4, - [Species.LAPRAS]: 4, - [Species.DITTO]: 2, - [Species.EEVEE]: 3, - [Species.PORYGON]: 4, - [Species.OMANYTE]: 3, - [Species.KABUTO]: 3, - [Species.AERODACTYL]: 5, - [Species.ARTICUNO]: 5, - [Species.ZAPDOS]: 6, - [Species.MOLTRES]: 6, - [Species.DRATINI]: 4, - [Species.MEWTWO]: 8, - [Species.MEW]: 5, + [SpeciesId.BULBASAUR]: 3, + [SpeciesId.CHARMANDER]: 3, + [SpeciesId.SQUIRTLE]: 3, + [SpeciesId.CATERPIE]: 2, + [SpeciesId.WEEDLE]: 1, + [SpeciesId.PIDGEY]: 1, + [SpeciesId.RATTATA]: 1, + [SpeciesId.SPEAROW]: 1, + [SpeciesId.EKANS]: 2, + [SpeciesId.PIKACHU]: 4, + [SpeciesId.SANDSHREW]: 2, + [SpeciesId.NIDORAN_F]: 3, + [SpeciesId.NIDORAN_M]: 3, + [SpeciesId.VULPIX]: 3, + [SpeciesId.ZUBAT]: 3, + [SpeciesId.ODDISH]: 3, + [SpeciesId.PARAS]: 2, + [SpeciesId.VENONAT]: 2, + [SpeciesId.DIGLETT]: 2, + [SpeciesId.MEOWTH]: 3, + [SpeciesId.PSYDUCK]: 2, + [SpeciesId.MANKEY]: 4, + [SpeciesId.GROWLITHE]: 4, + [SpeciesId.POLIWAG]: 2, + [SpeciesId.ABRA]: 4, + [SpeciesId.MACHOP]: 3, + [SpeciesId.BELLSPROUT]: 2, + [SpeciesId.TENTACOOL]: 3, + [SpeciesId.GEODUDE]: 3, + [SpeciesId.PONYTA]: 2, + [SpeciesId.SLOWPOKE]: 3, + [SpeciesId.MAGNEMITE]: 4, + [SpeciesId.FARFETCHD]: 2, + [SpeciesId.DODUO]: 3, + [SpeciesId.SEEL]: 1, + [SpeciesId.GRIMER]: 2, + [SpeciesId.SHELLDER]: 5, + [SpeciesId.GASTLY]: 4, + [SpeciesId.ONIX]: 3, + [SpeciesId.DROWZEE]: 2, + [SpeciesId.KRABBY]: 3, + [SpeciesId.VOLTORB]: 2, + [SpeciesId.EXEGGCUTE]: 3, + [SpeciesId.CUBONE]: 3, + [SpeciesId.LICKITUNG]: 3, + [SpeciesId.KOFFING]: 2, + [SpeciesId.RHYHORN]: 4, + [SpeciesId.TANGELA]: 3, + [SpeciesId.KANGASKHAN]: 4, + [SpeciesId.HORSEA]: 3, + [SpeciesId.GOLDEEN]: 2, + [SpeciesId.STARYU]: 3, + [SpeciesId.SCYTHER]: 5, + [SpeciesId.PINSIR]: 4, + [SpeciesId.TAUROS]: 4, + [SpeciesId.MAGIKARP]: 4, + [SpeciesId.LAPRAS]: 4, + [SpeciesId.DITTO]: 2, + [SpeciesId.EEVEE]: 3, + [SpeciesId.PORYGON]: 4, + [SpeciesId.OMANYTE]: 3, + [SpeciesId.KABUTO]: 3, + [SpeciesId.AERODACTYL]: 5, + [SpeciesId.ARTICUNO]: 5, + [SpeciesId.ZAPDOS]: 6, + [SpeciesId.MOLTRES]: 6, + [SpeciesId.DRATINI]: 4, + [SpeciesId.MEWTWO]: 8, + [SpeciesId.MEW]: 5, - [Species.CHIKORITA]: 2, - [Species.CYNDAQUIL]: 3, - [Species.TOTODILE]: 3, - [Species.SENTRET]: 1, - [Species.HOOTHOOT]: 2, - [Species.LEDYBA]: 1, - [Species.SPINARAK]: 1, - [Species.CHINCHOU]: 2, - [Species.PICHU]: 4, - [Species.CLEFFA]: 2, - [Species.IGGLYBUFF]: 1, - [Species.TOGEPI]: 3, - [Species.NATU]: 2, - [Species.MAREEP]: 2, - [Species.HOPPIP]: 2, - [Species.AIPOM]: 2, - [Species.SUNKERN]: 1, - [Species.YANMA]: 3, - [Species.WOOPER]: 2, - [Species.MURKROW]: 3, - [Species.MISDREAVUS]: 3, - [Species.UNOWN]: 1, - [Species.GIRAFARIG]: 3, - [Species.PINECO]: 2, - [Species.DUNSPARCE]: 3, - [Species.GLIGAR]: 3, - [Species.SNUBBULL]: 2, - [Species.QWILFISH]: 3, - [Species.SHUCKLE]: 3, - [Species.HERACROSS]: 5, - [Species.SNEASEL]: 4, - [Species.TEDDIURSA]: 4, - [Species.SLUGMA]: 2, - [Species.SWINUB]: 3, - [Species.CORSOLA]: 2, - [Species.REMORAID]: 2, - [Species.DELIBIRD]: 2, - [Species.SKARMORY]: 4, - [Species.HOUNDOUR]: 3, - [Species.PHANPY]: 3, - [Species.STANTLER]: 3, - [Species.SMEARGLE]: 1, - [Species.TYROGUE]: 3, - [Species.SMOOCHUM]: 3, - [Species.ELEKID]: 3, - [Species.MAGBY]: 3, - [Species.MILTANK]: 4, - [Species.RAIKOU]: 6, - [Species.ENTEI]: 6, - [Species.SUICUNE]: 6, - [Species.LARVITAR]: 4, - [Species.LUGIA]: 8, - [Species.HO_OH]: 8, - [Species.CELEBI]: 5, + [SpeciesId.CHIKORITA]: 2, + [SpeciesId.CYNDAQUIL]: 3, + [SpeciesId.TOTODILE]: 3, + [SpeciesId.SENTRET]: 1, + [SpeciesId.HOOTHOOT]: 2, + [SpeciesId.LEDYBA]: 1, + [SpeciesId.SPINARAK]: 1, + [SpeciesId.CHINCHOU]: 2, + [SpeciesId.PICHU]: 4, + [SpeciesId.CLEFFA]: 2, + [SpeciesId.IGGLYBUFF]: 1, + [SpeciesId.TOGEPI]: 3, + [SpeciesId.NATU]: 2, + [SpeciesId.MAREEP]: 2, + [SpeciesId.HOPPIP]: 2, + [SpeciesId.AIPOM]: 2, + [SpeciesId.SUNKERN]: 1, + [SpeciesId.YANMA]: 3, + [SpeciesId.WOOPER]: 2, + [SpeciesId.MURKROW]: 3, + [SpeciesId.MISDREAVUS]: 3, + [SpeciesId.UNOWN]: 1, + [SpeciesId.GIRAFARIG]: 3, + [SpeciesId.PINECO]: 2, + [SpeciesId.DUNSPARCE]: 3, + [SpeciesId.GLIGAR]: 3, + [SpeciesId.SNUBBULL]: 2, + [SpeciesId.QWILFISH]: 3, + [SpeciesId.SHUCKLE]: 3, + [SpeciesId.HERACROSS]: 5, + [SpeciesId.SNEASEL]: 4, + [SpeciesId.TEDDIURSA]: 4, + [SpeciesId.SLUGMA]: 2, + [SpeciesId.SWINUB]: 3, + [SpeciesId.CORSOLA]: 2, + [SpeciesId.REMORAID]: 2, + [SpeciesId.DELIBIRD]: 2, + [SpeciesId.SKARMORY]: 4, + [SpeciesId.HOUNDOUR]: 3, + [SpeciesId.PHANPY]: 3, + [SpeciesId.STANTLER]: 3, + [SpeciesId.SMEARGLE]: 1, + [SpeciesId.TYROGUE]: 3, + [SpeciesId.SMOOCHUM]: 3, + [SpeciesId.ELEKID]: 3, + [SpeciesId.MAGBY]: 3, + [SpeciesId.MILTANK]: 4, + [SpeciesId.RAIKOU]: 6, + [SpeciesId.ENTEI]: 6, + [SpeciesId.SUICUNE]: 6, + [SpeciesId.LARVITAR]: 4, + [SpeciesId.LUGIA]: 8, + [SpeciesId.HO_OH]: 8, + [SpeciesId.CELEBI]: 5, - [Species.TREECKO]: 3, - [Species.TORCHIC]: 4, - [Species.MUDKIP]: 3, - [Species.POOCHYENA]: 2, - [Species.ZIGZAGOON]: 2, - [Species.WURMPLE]: 1, - [Species.LOTAD]: 3, - [Species.SEEDOT]: 2, - [Species.TAILLOW]: 3, - [Species.WINGULL]: 2, - [Species.RALTS]: 4, - [Species.SURSKIT]: 2, - [Species.SHROOMISH]: 3, - [Species.SLAKOTH]: 4, - [Species.NINCADA]: 4, - [Species.WHISMUR]: 2, - [Species.MAKUHITA]: 3, - [Species.AZURILL]: 4, - [Species.NOSEPASS]: 2, - [Species.SKITTY]: 1, - [Species.SABLEYE]: 2, - [Species.MAWILE]: 2, - [Species.ARON]: 3, - [Species.MEDITITE]: 3, - [Species.ELECTRIKE]: 2, - [Species.PLUSLE]: 2, - [Species.MINUN]: 2, - [Species.VOLBEAT]: 2, - [Species.ILLUMISE]: 2, - [Species.GULPIN]: 1, - [Species.CARVANHA]: 3, - [Species.WAILMER]: 2, - [Species.NUMEL]: 2, - [Species.TORKOAL]: 3, - [Species.SPOINK]: 2, - [Species.SPINDA]: 1, - [Species.TRAPINCH]: 3, - [Species.CACNEA]: 2, - [Species.SWABLU]: 2, - [Species.ZANGOOSE]: 4, - [Species.SEVIPER]: 3, - [Species.LUNATONE]: 3, - [Species.SOLROCK]: 3, - [Species.BARBOACH]: 2, - [Species.CORPHISH]: 3, - [Species.BALTOY]: 2, - [Species.LILEEP]: 3, - [Species.ANORITH]: 3, - [Species.FEEBAS]: 4, - [Species.CASTFORM]: 1, - [Species.KECLEON]: 2, - [Species.SHUPPET]: 2, - [Species.DUSKULL]: 3, - [Species.TROPIUS]: 3, - [Species.ABSOL]: 4, - [Species.WYNAUT]: 2, - [Species.SNORUNT]: 2, - [Species.SPHEAL]: 2, - [Species.CLAMPERL]: 3, - [Species.RELICANTH]: 3, - [Species.LUVDISC]: 1, - [Species.BAGON]: 4, - [Species.BELDUM]: 4, - [Species.REGIROCK]: 6, - [Species.REGICE]: 5, - [Species.REGISTEEL]: 6, - [Species.LATIAS]: 7, - [Species.LATIOS]: 7, - [Species.KYOGRE]: 9, - [Species.GROUDON]: 9, - [Species.RAYQUAZA]: 9, - [Species.JIRACHI]: 7, - [Species.DEOXYS]: 7, + [SpeciesId.TREECKO]: 3, + [SpeciesId.TORCHIC]: 4, + [SpeciesId.MUDKIP]: 3, + [SpeciesId.POOCHYENA]: 2, + [SpeciesId.ZIGZAGOON]: 2, + [SpeciesId.WURMPLE]: 1, + [SpeciesId.LOTAD]: 3, + [SpeciesId.SEEDOT]: 2, + [SpeciesId.TAILLOW]: 3, + [SpeciesId.WINGULL]: 2, + [SpeciesId.RALTS]: 4, + [SpeciesId.SURSKIT]: 2, + [SpeciesId.SHROOMISH]: 3, + [SpeciesId.SLAKOTH]: 4, + [SpeciesId.NINCADA]: 4, + [SpeciesId.WHISMUR]: 2, + [SpeciesId.MAKUHITA]: 3, + [SpeciesId.AZURILL]: 4, + [SpeciesId.NOSEPASS]: 2, + [SpeciesId.SKITTY]: 1, + [SpeciesId.SABLEYE]: 2, + [SpeciesId.MAWILE]: 2, + [SpeciesId.ARON]: 3, + [SpeciesId.MEDITITE]: 3, + [SpeciesId.ELECTRIKE]: 2, + [SpeciesId.PLUSLE]: 2, + [SpeciesId.MINUN]: 2, + [SpeciesId.VOLBEAT]: 2, + [SpeciesId.ILLUMISE]: 2, + [SpeciesId.GULPIN]: 1, + [SpeciesId.CARVANHA]: 3, + [SpeciesId.WAILMER]: 2, + [SpeciesId.NUMEL]: 2, + [SpeciesId.TORKOAL]: 3, + [SpeciesId.SPOINK]: 2, + [SpeciesId.SPINDA]: 1, + [SpeciesId.TRAPINCH]: 3, + [SpeciesId.CACNEA]: 2, + [SpeciesId.SWABLU]: 2, + [SpeciesId.ZANGOOSE]: 4, + [SpeciesId.SEVIPER]: 3, + [SpeciesId.LUNATONE]: 3, + [SpeciesId.SOLROCK]: 3, + [SpeciesId.BARBOACH]: 2, + [SpeciesId.CORPHISH]: 3, + [SpeciesId.BALTOY]: 2, + [SpeciesId.LILEEP]: 3, + [SpeciesId.ANORITH]: 3, + [SpeciesId.FEEBAS]: 4, + [SpeciesId.CASTFORM]: 1, + [SpeciesId.KECLEON]: 2, + [SpeciesId.SHUPPET]: 2, + [SpeciesId.DUSKULL]: 3, + [SpeciesId.TROPIUS]: 3, + [SpeciesId.ABSOL]: 4, + [SpeciesId.WYNAUT]: 2, + [SpeciesId.SNORUNT]: 2, + [SpeciesId.SPHEAL]: 2, + [SpeciesId.CLAMPERL]: 3, + [SpeciesId.RELICANTH]: 3, + [SpeciesId.LUVDISC]: 1, + [SpeciesId.BAGON]: 4, + [SpeciesId.BELDUM]: 4, + [SpeciesId.REGIROCK]: 6, + [SpeciesId.REGICE]: 5, + [SpeciesId.REGISTEEL]: 6, + [SpeciesId.LATIAS]: 7, + [SpeciesId.LATIOS]: 7, + [SpeciesId.KYOGRE]: 9, + [SpeciesId.GROUDON]: 9, + [SpeciesId.RAYQUAZA]: 9, + [SpeciesId.JIRACHI]: 7, + [SpeciesId.DEOXYS]: 7, - [Species.TURTWIG]: 3, - [Species.CHIMCHAR]: 3, - [Species.PIPLUP]: 3, - [Species.STARLY]: 3, - [Species.BIDOOF]: 2, - [Species.KRICKETOT]: 1, - [Species.SHINX]: 2, - [Species.BUDEW]: 3, - [Species.CRANIDOS]: 2, - [Species.SHIELDON]: 3, - [Species.BURMY]: 2, - [Species.COMBEE]: 2, - [Species.PACHIRISU]: 2, - [Species.BUIZEL]: 2, - [Species.CHERUBI]: 1, - [Species.SHELLOS]: 3, - [Species.DRIFLOON]: 2, - [Species.BUNEARY]: 2, - [Species.GLAMEOW]: 2, - [Species.CHINGLING]: 2, - [Species.STUNKY]: 2, - [Species.BRONZOR]: 3, - [Species.BONSLY]: 2, - [Species.MIME_JR]: 2, - [Species.HAPPINY]: 2, - [Species.CHATOT]: 2, - [Species.SPIRITOMB]: 4, - [Species.GIBLE]: 4, - [Species.MUNCHLAX]: 4, - [Species.RIOLU]: 3, - [Species.HIPPOPOTAS]: 3, - [Species.SKORUPI]: 3, - [Species.CROAGUNK]: 2, - [Species.CARNIVINE]: 2, - [Species.FINNEON]: 1, - [Species.MANTYKE]: 2, - [Species.SNOVER]: 2, - [Species.ROTOM]: 4, - [Species.UXIE]: 5, - [Species.MESPRIT]: 5, - [Species.AZELF]: 6, - [Species.DIALGA]: 8, - [Species.PALKIA]: 8, - [Species.HEATRAN]: 7, - [Species.REGIGIGAS]: 7, - [Species.GIRATINA]: 8, - [Species.CRESSELIA]: 6, - [Species.PHIONE]: 4, - [Species.MANAPHY]: 7, - [Species.DARKRAI]: 7, - [Species.SHAYMIN]: 6, - [Species.ARCEUS]: 9, + [SpeciesId.TURTWIG]: 3, + [SpeciesId.CHIMCHAR]: 3, + [SpeciesId.PIPLUP]: 3, + [SpeciesId.STARLY]: 3, + [SpeciesId.BIDOOF]: 2, + [SpeciesId.KRICKETOT]: 1, + [SpeciesId.SHINX]: 2, + [SpeciesId.BUDEW]: 3, + [SpeciesId.CRANIDOS]: 2, + [SpeciesId.SHIELDON]: 3, + [SpeciesId.BURMY]: 2, + [SpeciesId.COMBEE]: 2, + [SpeciesId.PACHIRISU]: 2, + [SpeciesId.BUIZEL]: 2, + [SpeciesId.CHERUBI]: 1, + [SpeciesId.SHELLOS]: 3, + [SpeciesId.DRIFLOON]: 2, + [SpeciesId.BUNEARY]: 2, + [SpeciesId.GLAMEOW]: 2, + [SpeciesId.CHINGLING]: 2, + [SpeciesId.STUNKY]: 2, + [SpeciesId.BRONZOR]: 3, + [SpeciesId.BONSLY]: 2, + [SpeciesId.MIME_JR]: 2, + [SpeciesId.HAPPINY]: 2, + [SpeciesId.CHATOT]: 2, + [SpeciesId.SPIRITOMB]: 4, + [SpeciesId.GIBLE]: 4, + [SpeciesId.MUNCHLAX]: 4, + [SpeciesId.RIOLU]: 3, + [SpeciesId.HIPPOPOTAS]: 3, + [SpeciesId.SKORUPI]: 3, + [SpeciesId.CROAGUNK]: 2, + [SpeciesId.CARNIVINE]: 2, + [SpeciesId.FINNEON]: 1, + [SpeciesId.MANTYKE]: 2, + [SpeciesId.SNOVER]: 2, + [SpeciesId.ROTOM]: 4, + [SpeciesId.UXIE]: 5, + [SpeciesId.MESPRIT]: 5, + [SpeciesId.AZELF]: 6, + [SpeciesId.DIALGA]: 8, + [SpeciesId.PALKIA]: 8, + [SpeciesId.HEATRAN]: 7, + [SpeciesId.REGIGIGAS]: 7, + [SpeciesId.GIRATINA]: 8, + [SpeciesId.CRESSELIA]: 6, + [SpeciesId.PHIONE]: 4, + [SpeciesId.MANAPHY]: 7, + [SpeciesId.DARKRAI]: 7, + [SpeciesId.SHAYMIN]: 6, + [SpeciesId.ARCEUS]: 9, - [Species.VICTINI]: 6, - [Species.SNIVY]: 3, - [Species.TEPIG]: 3, - [Species.OSHAWOTT]: 3, - [Species.PATRAT]: 1, - [Species.LILLIPUP]: 3, - [Species.PURRLOIN]: 2, - [Species.PANSAGE]: 2, - [Species.PANSEAR]: 2, - [Species.PANPOUR]: 2, - [Species.MUNNA]: 2, - [Species.PIDOVE]: 1, - [Species.BLITZLE]: 2, - [Species.ROGGENROLA]: 3, - [Species.WOOBAT]: 3, - [Species.DRILBUR]: 4, - [Species.AUDINO]: 3, - [Species.TIMBURR]: 4, - [Species.TYMPOLE]: 3, - [Species.THROH]: 4, - [Species.SAWK]: 4, - [Species.SEWADDLE]: 2, - [Species.VENIPEDE]: 3, - [Species.COTTONEE]: 3, - [Species.PETILIL]: 3, - [Species.BASCULIN]: 4, - [Species.SANDILE]: 4, - [Species.DARUMAKA]: 4, - [Species.MARACTUS]: 2, - [Species.DWEBBLE]: 2, - [Species.SCRAGGY]: 3, - [Species.SIGILYPH]: 4, - [Species.YAMASK]: 3, - [Species.TIRTOUGA]: 3, - [Species.ARCHEN]: 3, - [Species.TRUBBISH]: 2, - [Species.ZORUA]: 3, - [Species.MINCCINO]: 3, - [Species.GOTHITA]: 3, - [Species.SOLOSIS]: 3, - [Species.DUCKLETT]: 2, - [Species.VANILLITE]: 3, - [Species.DEERLING]: 2, - [Species.EMOLGA]: 2, - [Species.KARRABLAST]: 3, - [Species.FOONGUS]: 3, - [Species.FRILLISH]: 3, - [Species.ALOMOMOLA]: 4, - [Species.JOLTIK]: 3, - [Species.FERROSEED]: 3, - [Species.KLINK]: 3, - [Species.TYNAMO]: 2, - [Species.ELGYEM]: 2, - [Species.LITWICK]: 3, - [Species.AXEW]: 4, - [Species.CUBCHOO]: 2, - [Species.CRYOGONAL]: 4, - [Species.SHELMET]: 2, - [Species.STUNFISK]: 3, - [Species.MIENFOO]: 3, - [Species.DRUDDIGON]: 4, - [Species.GOLETT]: 3, - [Species.PAWNIARD]: 4, - [Species.BOUFFALANT]: 4, - [Species.RUFFLET]: 3, - [Species.VULLABY]: 3, - [Species.HEATMOR]: 3, - [Species.DURANT]: 4, - [Species.DEINO]: 4, - [Species.LARVESTA]: 4, - [Species.COBALION]: 6, - [Species.TERRAKION]: 6, - [Species.VIRIZION]: 6, - [Species.TORNADUS]: 7, - [Species.THUNDURUS]: 7, - [Species.RESHIRAM]: 8, - [Species.ZEKROM]: 8, - [Species.LANDORUS]: 7, - [Species.KYUREM]: 8, - [Species.KELDEO]: 6, - [Species.MELOETTA]: 7, - [Species.GENESECT]: 6, + [SpeciesId.VICTINI]: 6, + [SpeciesId.SNIVY]: 3, + [SpeciesId.TEPIG]: 3, + [SpeciesId.OSHAWOTT]: 3, + [SpeciesId.PATRAT]: 1, + [SpeciesId.LILLIPUP]: 3, + [SpeciesId.PURRLOIN]: 2, + [SpeciesId.PANSAGE]: 2, + [SpeciesId.PANSEAR]: 2, + [SpeciesId.PANPOUR]: 2, + [SpeciesId.MUNNA]: 2, + [SpeciesId.PIDOVE]: 1, + [SpeciesId.BLITZLE]: 2, + [SpeciesId.ROGGENROLA]: 3, + [SpeciesId.WOOBAT]: 3, + [SpeciesId.DRILBUR]: 4, + [SpeciesId.AUDINO]: 3, + [SpeciesId.TIMBURR]: 4, + [SpeciesId.TYMPOLE]: 3, + [SpeciesId.THROH]: 4, + [SpeciesId.SAWK]: 4, + [SpeciesId.SEWADDLE]: 2, + [SpeciesId.VENIPEDE]: 3, + [SpeciesId.COTTONEE]: 3, + [SpeciesId.PETILIL]: 3, + [SpeciesId.BASCULIN]: 4, + [SpeciesId.SANDILE]: 4, + [SpeciesId.DARUMAKA]: 4, + [SpeciesId.MARACTUS]: 2, + [SpeciesId.DWEBBLE]: 2, + [SpeciesId.SCRAGGY]: 3, + [SpeciesId.SIGILYPH]: 4, + [SpeciesId.YAMASK]: 3, + [SpeciesId.TIRTOUGA]: 3, + [SpeciesId.ARCHEN]: 3, + [SpeciesId.TRUBBISH]: 2, + [SpeciesId.ZORUA]: 3, + [SpeciesId.MINCCINO]: 3, + [SpeciesId.GOTHITA]: 3, + [SpeciesId.SOLOSIS]: 3, + [SpeciesId.DUCKLETT]: 2, + [SpeciesId.VANILLITE]: 3, + [SpeciesId.DEERLING]: 2, + [SpeciesId.EMOLGA]: 2, + [SpeciesId.KARRABLAST]: 3, + [SpeciesId.FOONGUS]: 3, + [SpeciesId.FRILLISH]: 3, + [SpeciesId.ALOMOMOLA]: 4, + [SpeciesId.JOLTIK]: 3, + [SpeciesId.FERROSEED]: 3, + [SpeciesId.KLINK]: 3, + [SpeciesId.TYNAMO]: 2, + [SpeciesId.ELGYEM]: 2, + [SpeciesId.LITWICK]: 3, + [SpeciesId.AXEW]: 4, + [SpeciesId.CUBCHOO]: 2, + [SpeciesId.CRYOGONAL]: 4, + [SpeciesId.SHELMET]: 2, + [SpeciesId.STUNFISK]: 3, + [SpeciesId.MIENFOO]: 3, + [SpeciesId.DRUDDIGON]: 4, + [SpeciesId.GOLETT]: 3, + [SpeciesId.PAWNIARD]: 4, + [SpeciesId.BOUFFALANT]: 4, + [SpeciesId.RUFFLET]: 3, + [SpeciesId.VULLABY]: 3, + [SpeciesId.HEATMOR]: 3, + [SpeciesId.DURANT]: 4, + [SpeciesId.DEINO]: 4, + [SpeciesId.LARVESTA]: 4, + [SpeciesId.COBALION]: 6, + [SpeciesId.TERRAKION]: 6, + [SpeciesId.VIRIZION]: 6, + [SpeciesId.TORNADUS]: 7, + [SpeciesId.THUNDURUS]: 7, + [SpeciesId.RESHIRAM]: 8, + [SpeciesId.ZEKROM]: 8, + [SpeciesId.LANDORUS]: 7, + [SpeciesId.KYUREM]: 8, + [SpeciesId.KELDEO]: 6, + [SpeciesId.MELOETTA]: 7, + [SpeciesId.GENESECT]: 6, - [Species.CHESPIN]: 3, - [Species.FENNEKIN]: 3, - [Species.FROAKIE]: 4, - [Species.BUNNELBY]: 3, - [Species.FLETCHLING]: 3, - [Species.SCATTERBUG]: 2, - [Species.LITLEO]: 2, - [Species.FLABEBE]: 3, - [Species.SKIDDO]: 2, - [Species.PANCHAM]: 3, - [Species.FURFROU]: 3, - [Species.ESPURR]: 2, - [Species.HONEDGE]: 4, - [Species.SPRITZEE]: 2, - [Species.SWIRLIX]: 3, - [Species.INKAY]: 3, - [Species.BINACLE]: 3, - [Species.SKRELP]: 2, - [Species.CLAUNCHER]: 3, - [Species.HELIOPTILE]: 3, - [Species.TYRUNT]: 3, - [Species.AMAURA]: 2, - [Species.HAWLUCHA]: 4, - [Species.DEDENNE]: 2, - [Species.CARBINK]: 2, - [Species.GOOMY]: 4, - [Species.KLEFKI]: 3, - [Species.PHANTUMP]: 2, - [Species.PUMPKABOO]: 2, - [Species.BERGMITE]: 3, - [Species.NOIBAT]: 3, - [Species.XERNEAS]: 8, - [Species.YVELTAL]: 8, - [Species.ZYGARDE]: 8, - [Species.DIANCIE]: 7, - [Species.HOOPA]: 7, - [Species.VOLCANION]: 7, - [Species.ETERNAL_FLOETTE]: 4, + [SpeciesId.CHESPIN]: 3, + [SpeciesId.FENNEKIN]: 3, + [SpeciesId.FROAKIE]: 4, + [SpeciesId.BUNNELBY]: 3, + [SpeciesId.FLETCHLING]: 3, + [SpeciesId.SCATTERBUG]: 2, + [SpeciesId.LITLEO]: 2, + [SpeciesId.FLABEBE]: 3, + [SpeciesId.SKIDDO]: 2, + [SpeciesId.PANCHAM]: 3, + [SpeciesId.FURFROU]: 3, + [SpeciesId.ESPURR]: 2, + [SpeciesId.HONEDGE]: 4, + [SpeciesId.SPRITZEE]: 2, + [SpeciesId.SWIRLIX]: 3, + [SpeciesId.INKAY]: 3, + [SpeciesId.BINACLE]: 3, + [SpeciesId.SKRELP]: 2, + [SpeciesId.CLAUNCHER]: 3, + [SpeciesId.HELIOPTILE]: 3, + [SpeciesId.TYRUNT]: 3, + [SpeciesId.AMAURA]: 2, + [SpeciesId.HAWLUCHA]: 4, + [SpeciesId.DEDENNE]: 2, + [SpeciesId.CARBINK]: 2, + [SpeciesId.GOOMY]: 4, + [SpeciesId.KLEFKI]: 3, + [SpeciesId.PHANTUMP]: 2, + [SpeciesId.PUMPKABOO]: 2, + [SpeciesId.BERGMITE]: 3, + [SpeciesId.NOIBAT]: 3, + [SpeciesId.XERNEAS]: 8, + [SpeciesId.YVELTAL]: 8, + [SpeciesId.ZYGARDE]: 8, + [SpeciesId.DIANCIE]: 7, + [SpeciesId.HOOPA]: 7, + [SpeciesId.VOLCANION]: 7, + [SpeciesId.ETERNAL_FLOETTE]: 4, - [Species.ROWLET]: 3, - [Species.LITTEN]: 3, - [Species.POPPLIO]: 4, - [Species.PIKIPEK]: 2, - [Species.YUNGOOS]: 2, - [Species.GRUBBIN]: 3, - [Species.CRABRAWLER]: 3, - [Species.ORICORIO]: 3, - [Species.CUTIEFLY]: 3, - [Species.ROCKRUFF]: 3, - [Species.WISHIWASHI]: 2, - [Species.MAREANIE]: 2, - [Species.MUDBRAY]: 3, - [Species.DEWPIDER]: 3, - [Species.FOMANTIS]: 2, - [Species.MORELULL]: 2, - [Species.SALANDIT]: 3, - [Species.STUFFUL]: 3, - [Species.BOUNSWEET]: 3, - [Species.COMFEY]: 4, - [Species.ORANGURU]: 4, - [Species.PASSIMIAN]: 4, - [Species.WIMPOD]: 3, - [Species.SANDYGAST]: 3, - [Species.PYUKUMUKU]: 2, - [Species.TYPE_NULL]: 5, - [Species.MINIOR]: 4, - [Species.KOMALA]: 3, - [Species.TURTONATOR]: 4, - [Species.TOGEDEMARU]: 3, - [Species.MIMIKYU]: 4, - [Species.BRUXISH]: 4, - [Species.DRAMPA]: 4, - [Species.DHELMISE]: 4, - [Species.JANGMO_O]: 4, - [Species.TAPU_KOKO]: 6, - [Species.TAPU_LELE]: 7, - [Species.TAPU_BULU]: 6, - [Species.TAPU_FINI]: 5, - [Species.COSMOG]: 7, - [Species.NIHILEGO]: 6, - [Species.BUZZWOLE]: 6, - [Species.PHEROMOSA]: 7, - [Species.XURKITREE]: 6, - [Species.CELESTEELA]: 6, - [Species.KARTANA]: 8, - [Species.GUZZLORD]: 6, - [Species.NECROZMA]: 8, - [Species.MAGEARNA]: 7, - [Species.MARSHADOW]: 8, - [Species.POIPOLE]: 8, - [Species.STAKATAKA]: 6, - [Species.BLACEPHALON]: 7, - [Species.ZERAORA]: 6, - [Species.MELTAN]: 6, - [Species.ALOLA_RATTATA]: 1, - [Species.ALOLA_SANDSHREW]: 2, - [Species.ALOLA_VULPIX]: 3, - [Species.ALOLA_DIGLETT]: 2, - [Species.ALOLA_MEOWTH]: 3, - [Species.ALOLA_GEODUDE]: 3, - [Species.ALOLA_GRIMER]: 3, + [SpeciesId.ROWLET]: 3, + [SpeciesId.LITTEN]: 3, + [SpeciesId.POPPLIO]: 4, + [SpeciesId.PIKIPEK]: 2, + [SpeciesId.YUNGOOS]: 2, + [SpeciesId.GRUBBIN]: 3, + [SpeciesId.CRABRAWLER]: 3, + [SpeciesId.ORICORIO]: 3, + [SpeciesId.CUTIEFLY]: 3, + [SpeciesId.ROCKRUFF]: 3, + [SpeciesId.WISHIWASHI]: 2, + [SpeciesId.MAREANIE]: 2, + [SpeciesId.MUDBRAY]: 3, + [SpeciesId.DEWPIDER]: 3, + [SpeciesId.FOMANTIS]: 2, + [SpeciesId.MORELULL]: 2, + [SpeciesId.SALANDIT]: 3, + [SpeciesId.STUFFUL]: 3, + [SpeciesId.BOUNSWEET]: 3, + [SpeciesId.COMFEY]: 4, + [SpeciesId.ORANGURU]: 4, + [SpeciesId.PASSIMIAN]: 4, + [SpeciesId.WIMPOD]: 3, + [SpeciesId.SANDYGAST]: 3, + [SpeciesId.PYUKUMUKU]: 2, + [SpeciesId.TYPE_NULL]: 5, + [SpeciesId.MINIOR]: 4, + [SpeciesId.KOMALA]: 3, + [SpeciesId.TURTONATOR]: 4, + [SpeciesId.TOGEDEMARU]: 3, + [SpeciesId.MIMIKYU]: 4, + [SpeciesId.BRUXISH]: 4, + [SpeciesId.DRAMPA]: 4, + [SpeciesId.DHELMISE]: 4, + [SpeciesId.JANGMO_O]: 4, + [SpeciesId.TAPU_KOKO]: 6, + [SpeciesId.TAPU_LELE]: 7, + [SpeciesId.TAPU_BULU]: 6, + [SpeciesId.TAPU_FINI]: 5, + [SpeciesId.COSMOG]: 7, + [SpeciesId.NIHILEGO]: 6, + [SpeciesId.BUZZWOLE]: 6, + [SpeciesId.PHEROMOSA]: 7, + [SpeciesId.XURKITREE]: 6, + [SpeciesId.CELESTEELA]: 6, + [SpeciesId.KARTANA]: 8, + [SpeciesId.GUZZLORD]: 6, + [SpeciesId.NECROZMA]: 8, + [SpeciesId.MAGEARNA]: 7, + [SpeciesId.MARSHADOW]: 8, + [SpeciesId.POIPOLE]: 8, + [SpeciesId.STAKATAKA]: 6, + [SpeciesId.BLACEPHALON]: 7, + [SpeciesId.ZERAORA]: 6, + [SpeciesId.MELTAN]: 6, + [SpeciesId.ALOLA_RATTATA]: 1, + [SpeciesId.ALOLA_SANDSHREW]: 2, + [SpeciesId.ALOLA_VULPIX]: 3, + [SpeciesId.ALOLA_DIGLETT]: 2, + [SpeciesId.ALOLA_MEOWTH]: 3, + [SpeciesId.ALOLA_GEODUDE]: 3, + [SpeciesId.ALOLA_GRIMER]: 3, - [Species.GROOKEY]: 3, - [Species.SCORBUNNY]: 4, - [Species.SOBBLE]: 3, - [Species.SKWOVET]: 2, - [Species.ROOKIDEE]: 3, - [Species.BLIPBUG]: 2, - [Species.NICKIT]: 1, - [Species.GOSSIFLEUR]: 2, - [Species.WOOLOO]: 2, - [Species.CHEWTLE]: 3, - [Species.YAMPER]: 2, - [Species.ROLYCOLY]: 3, - [Species.APPLIN]: 3, - [Species.SILICOBRA]: 3, - [Species.CRAMORANT]: 3, - [Species.ARROKUDA]: 3, - [Species.TOXEL]: 3, - [Species.SIZZLIPEDE]: 3, - [Species.CLOBBOPUS]: 2, - [Species.SINISTEA]: 3, - [Species.HATENNA]: 3, - [Species.IMPIDIMP]: 3, - [Species.MILCERY]: 3, - [Species.FALINKS]: 4, - [Species.PINCURCHIN]: 3, - [Species.SNOM]: 3, - [Species.STONJOURNER]: 3, - [Species.EISCUE]: 3, - [Species.INDEEDEE]: 4, - [Species.MORPEKO]: 3, - [Species.CUFANT]: 3, - [Species.DRACOZOLT]: 5, - [Species.ARCTOZOLT]: 4, - [Species.DRACOVISH]: 5, - [Species.ARCTOVISH]: 4, - [Species.DURALUDON]: 5, - [Species.DREEPY]: 4, - [Species.ZACIAN]: 9, - [Species.ZAMAZENTA]: 8, - [Species.ETERNATUS]: 10, - [Species.KUBFU]: 6, - [Species.ZARUDE]: 5, - [Species.REGIELEKI]: 6, - [Species.REGIDRAGO]: 6, - [Species.GLASTRIER]: 6, - [Species.SPECTRIER]: 8, - [Species.CALYREX]: 8, - [Species.ENAMORUS]: 7, - [Species.GALAR_MEOWTH]: 3, - [Species.GALAR_PONYTA]: 2, - [Species.GALAR_SLOWPOKE]: 3, - [Species.GALAR_FARFETCHD]: 3, - [Species.GALAR_ARTICUNO]: 6, - [Species.GALAR_ZAPDOS]: 6, - [Species.GALAR_MOLTRES]: 6, - [Species.GALAR_CORSOLA]: 3, - [Species.GALAR_ZIGZAGOON]: 3, - [Species.GALAR_DARUMAKA]: 4, - [Species.GALAR_YAMASK]: 3, - [Species.GALAR_STUNFISK]: 2, - [Species.HISUI_GROWLITHE]: 4, - [Species.HISUI_VOLTORB]: 3, - [Species.HISUI_QWILFISH]: 4, - [Species.HISUI_SNEASEL]: 5, - [Species.HISUI_ZORUA]: 3, + [SpeciesId.GROOKEY]: 3, + [SpeciesId.SCORBUNNY]: 4, + [SpeciesId.SOBBLE]: 3, + [SpeciesId.SKWOVET]: 2, + [SpeciesId.ROOKIDEE]: 3, + [SpeciesId.BLIPBUG]: 2, + [SpeciesId.NICKIT]: 1, + [SpeciesId.GOSSIFLEUR]: 2, + [SpeciesId.WOOLOO]: 2, + [SpeciesId.CHEWTLE]: 3, + [SpeciesId.YAMPER]: 2, + [SpeciesId.ROLYCOLY]: 3, + [SpeciesId.APPLIN]: 3, + [SpeciesId.SILICOBRA]: 3, + [SpeciesId.CRAMORANT]: 3, + [SpeciesId.ARROKUDA]: 3, + [SpeciesId.TOXEL]: 3, + [SpeciesId.SIZZLIPEDE]: 3, + [SpeciesId.CLOBBOPUS]: 2, + [SpeciesId.SINISTEA]: 3, + [SpeciesId.HATENNA]: 3, + [SpeciesId.IMPIDIMP]: 3, + [SpeciesId.MILCERY]: 3, + [SpeciesId.FALINKS]: 4, + [SpeciesId.PINCURCHIN]: 3, + [SpeciesId.SNOM]: 3, + [SpeciesId.STONJOURNER]: 3, + [SpeciesId.EISCUE]: 3, + [SpeciesId.INDEEDEE]: 4, + [SpeciesId.MORPEKO]: 3, + [SpeciesId.CUFANT]: 3, + [SpeciesId.DRACOZOLT]: 5, + [SpeciesId.ARCTOZOLT]: 4, + [SpeciesId.DRACOVISH]: 5, + [SpeciesId.ARCTOVISH]: 4, + [SpeciesId.DURALUDON]: 5, + [SpeciesId.DREEPY]: 4, + [SpeciesId.ZACIAN]: 9, + [SpeciesId.ZAMAZENTA]: 8, + [SpeciesId.ETERNATUS]: 10, + [SpeciesId.KUBFU]: 6, + [SpeciesId.ZARUDE]: 5, + [SpeciesId.REGIELEKI]: 6, + [SpeciesId.REGIDRAGO]: 6, + [SpeciesId.GLASTRIER]: 6, + [SpeciesId.SPECTRIER]: 8, + [SpeciesId.CALYREX]: 8, + [SpeciesId.ENAMORUS]: 7, + [SpeciesId.GALAR_MEOWTH]: 3, + [SpeciesId.GALAR_PONYTA]: 2, + [SpeciesId.GALAR_SLOWPOKE]: 3, + [SpeciesId.GALAR_FARFETCHD]: 3, + [SpeciesId.GALAR_ARTICUNO]: 6, + [SpeciesId.GALAR_ZAPDOS]: 6, + [SpeciesId.GALAR_MOLTRES]: 6, + [SpeciesId.GALAR_CORSOLA]: 3, + [SpeciesId.GALAR_ZIGZAGOON]: 3, + [SpeciesId.GALAR_DARUMAKA]: 4, + [SpeciesId.GALAR_YAMASK]: 3, + [SpeciesId.GALAR_STUNFISK]: 2, + [SpeciesId.HISUI_GROWLITHE]: 4, + [SpeciesId.HISUI_VOLTORB]: 3, + [SpeciesId.HISUI_QWILFISH]: 4, + [SpeciesId.HISUI_SNEASEL]: 5, + [SpeciesId.HISUI_ZORUA]: 3, - [Species.SPRIGATITO]: 4, - [Species.FUECOCO]: 4, - [Species.QUAXLY]: 4, - [Species.LECHONK]: 2, - [Species.TAROUNTULA]: 1, - [Species.NYMBLE]: 3, - [Species.PAWMI]: 3, - [Species.TANDEMAUS]: 4, - [Species.FIDOUGH]: 2, - [Species.SMOLIV]: 3, - [Species.SQUAWKABILLY]: 2, - [Species.NACLI]: 4, - [Species.CHARCADET]: 4, - [Species.TADBULB]: 3, - [Species.WATTREL]: 3, - [Species.MASCHIFF]: 3, - [Species.SHROODLE]: 2, - [Species.BRAMBLIN]: 3, - [Species.TOEDSCOOL]: 3, - [Species.KLAWF]: 3, - [Species.CAPSAKID]: 3, - [Species.RELLOR]: 2, - [Species.FLITTLE]: 3, - [Species.TINKATINK]: 4, - [Species.WIGLETT]: 2, - [Species.BOMBIRDIER]: 3, - [Species.FINIZEN]: 3, - [Species.VAROOM]: 4, - [Species.CYCLIZAR]: 4, - [Species.ORTHWORM]: 4, - [Species.GLIMMET]: 4, - [Species.GREAVARD]: 3, - [Species.FLAMIGO]: 4, - [Species.CETODDLE]: 3, - [Species.VELUZA]: 4, - [Species.DONDOZO]: 4, - [Species.TATSUGIRI]: 4, - [Species.GREAT_TUSK]: 7, - [Species.SCREAM_TAIL]: 5, - [Species.BRUTE_BONNET]: 5, - [Species.FLUTTER_MANE]: 7, - [Species.SLITHER_WING]: 6, - [Species.SANDY_SHOCKS]: 6, - [Species.IRON_TREADS]: 6, - [Species.IRON_BUNDLE]: 6, - [Species.IRON_HANDS]: 6, - [Species.IRON_JUGULIS]: 6, - [Species.IRON_MOTH]: 6, - [Species.IRON_THORNS]: 5, - [Species.FRIGIBAX]: 4, - [Species.GIMMIGHOUL]: 4, - [Species.WO_CHIEN]: 5, - [Species.CHIEN_PAO]: 7, - [Species.TING_LU]: 6, - [Species.CHI_YU]: 7, - [Species.ROARING_MOON]: 7, - [Species.IRON_VALIANT]: 6, - [Species.KORAIDON]: 9, - [Species.MIRAIDON]: 9, - [Species.WALKING_WAKE]: 7, - [Species.IRON_LEAVES]: 6, - [Species.POLTCHAGEIST]: 4, - [Species.OKIDOGI]: 6, - [Species.MUNKIDORI]: 6, - [Species.FEZANDIPITI]: 5, - [Species.OGERPON]: 7, - [Species.GOUGING_FIRE]: 7, - [Species.RAGING_BOLT]: 7, - [Species.IRON_BOULDER]: 7, - [Species.IRON_CROWN]: 7, - [Species.TERAPAGOS]: 9, - [Species.PECHARUNT]: 6, - [Species.PALDEA_TAUROS]: 5, - [Species.PALDEA_WOOPER]: 3, - [Species.BLOODMOON_URSALUNA]: 5, + [SpeciesId.SPRIGATITO]: 4, + [SpeciesId.FUECOCO]: 4, + [SpeciesId.QUAXLY]: 4, + [SpeciesId.LECHONK]: 2, + [SpeciesId.TAROUNTULA]: 1, + [SpeciesId.NYMBLE]: 3, + [SpeciesId.PAWMI]: 3, + [SpeciesId.TANDEMAUS]: 4, + [SpeciesId.FIDOUGH]: 2, + [SpeciesId.SMOLIV]: 3, + [SpeciesId.SQUAWKABILLY]: 2, + [SpeciesId.NACLI]: 4, + [SpeciesId.CHARCADET]: 4, + [SpeciesId.TADBULB]: 3, + [SpeciesId.WATTREL]: 3, + [SpeciesId.MASCHIFF]: 3, + [SpeciesId.SHROODLE]: 2, + [SpeciesId.BRAMBLIN]: 3, + [SpeciesId.TOEDSCOOL]: 3, + [SpeciesId.KLAWF]: 3, + [SpeciesId.CAPSAKID]: 3, + [SpeciesId.RELLOR]: 2, + [SpeciesId.FLITTLE]: 3, + [SpeciesId.TINKATINK]: 4, + [SpeciesId.WIGLETT]: 2, + [SpeciesId.BOMBIRDIER]: 3, + [SpeciesId.FINIZEN]: 3, + [SpeciesId.VAROOM]: 4, + [SpeciesId.CYCLIZAR]: 4, + [SpeciesId.ORTHWORM]: 4, + [SpeciesId.GLIMMET]: 4, + [SpeciesId.GREAVARD]: 3, + [SpeciesId.FLAMIGO]: 4, + [SpeciesId.CETODDLE]: 3, + [SpeciesId.VELUZA]: 4, + [SpeciesId.DONDOZO]: 4, + [SpeciesId.TATSUGIRI]: 4, + [SpeciesId.GREAT_TUSK]: 7, + [SpeciesId.SCREAM_TAIL]: 5, + [SpeciesId.BRUTE_BONNET]: 5, + [SpeciesId.FLUTTER_MANE]: 7, + [SpeciesId.SLITHER_WING]: 6, + [SpeciesId.SANDY_SHOCKS]: 6, + [SpeciesId.IRON_TREADS]: 6, + [SpeciesId.IRON_BUNDLE]: 6, + [SpeciesId.IRON_HANDS]: 6, + [SpeciesId.IRON_JUGULIS]: 6, + [SpeciesId.IRON_MOTH]: 6, + [SpeciesId.IRON_THORNS]: 5, + [SpeciesId.FRIGIBAX]: 4, + [SpeciesId.GIMMIGHOUL]: 4, + [SpeciesId.WO_CHIEN]: 5, + [SpeciesId.CHIEN_PAO]: 7, + [SpeciesId.TING_LU]: 6, + [SpeciesId.CHI_YU]: 7, + [SpeciesId.ROARING_MOON]: 7, + [SpeciesId.IRON_VALIANT]: 6, + [SpeciesId.KORAIDON]: 9, + [SpeciesId.MIRAIDON]: 9, + [SpeciesId.WALKING_WAKE]: 7, + [SpeciesId.IRON_LEAVES]: 6, + [SpeciesId.POLTCHAGEIST]: 4, + [SpeciesId.OKIDOGI]: 6, + [SpeciesId.MUNKIDORI]: 6, + [SpeciesId.FEZANDIPITI]: 5, + [SpeciesId.OGERPON]: 7, + [SpeciesId.GOUGING_FIRE]: 7, + [SpeciesId.RAGING_BOLT]: 7, + [SpeciesId.IRON_BOULDER]: 7, + [SpeciesId.IRON_CROWN]: 7, + [SpeciesId.TERAPAGOS]: 9, + [SpeciesId.PECHARUNT]: 6, + [SpeciesId.PALDEA_TAUROS]: 5, + [SpeciesId.PALDEA_WOOPER]: 3, + [SpeciesId.BLOODMOON_URSALUNA]: 5, }; const starterCandyCosts: { passive: number; costReduction: [number, number]; egg: number; }[] = [ diff --git a/src/data/balance/tms.ts b/src/data/balance/tms.ts index 06d191c3b2a..e95fa12151d 100644 --- a/src/data/balance/tms.ts +++ b/src/data/balance/tms.ts @@ -1,68550 +1,68550 @@ import { ModifierTier } from "#app/modifier/modifier-tier"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; interface TmSpecies { - [key: number]: Array> + [key: number]: Array> } -export const reverseCompatibleTms: Moves[] = [];/*[ - Moves.TAKE_DOWN, - Moves.TOXIC, - Moves.RAGE, - Moves.MIMIC, - Moves.DOUBLE_TEAM, - Moves.BIDE, - Moves.REST, - Moves.SUBSTITUTE, - Moves.SNORE, - Moves.PROTECT, - Moves.ENDURE, - Moves.SWAGGER, - Moves.ATTRACT, - Moves.SLEEP_TALK, - Moves.RETURN, - Moves.FRUSTRATION, - Moves.HIDDEN_POWER, - Moves.FACADE, - Moves.SECRET_POWER, - Moves.NATURAL_GIFT, - Moves.CAPTIVATE, - Moves.ROUND +export const reverseCompatibleTms: MoveId[] = [];/*[ + MoveId.TAKE_DOWN, + MoveId.TOXIC, + MoveId.RAGE, + MoveId.MIMIC, + MoveId.DOUBLE_TEAM, + MoveId.BIDE, + MoveId.REST, + MoveId.SUBSTITUTE, + MoveId.SNORE, + MoveId.PROTECT, + MoveId.ENDURE, + MoveId.SWAGGER, + MoveId.ATTRACT, + MoveId.SLEEP_TALK, + MoveId.RETURN, + MoveId.FRUSTRATION, + MoveId.HIDDEN_POWER, + MoveId.FACADE, + MoveId.SECRET_POWER, + MoveId.NATURAL_GIFT, + MoveId.CAPTIVATE, + MoveId.ROUND ];*/ export const tmSpecies: TmSpecies = { - [Moves.MEGA_PUNCH]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.PIKACHU, - Species.RAICHU, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.SLOWBRO, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.MR_MIME, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.SNORLAX, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.LEDYBA, - Species.LEDIAN, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.FLAAFFY, - Species.AMPHAROS, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.AIPOM, - Species.QUAGSIRE, - Species.SLOWKING, - Species.SNUBBULL, - Species.GRANBULL, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.DELIBIRD, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.TYRANITAR, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.LOMBRE, - Species.LUDICOLO, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.SABLEYE, - Species.MAWILE, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.GRUMPIG, - Species.SPINDA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.ZANGOOSE, - Species.KECLEON, - Species.DUSCLOPS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.GROUDON, - Species.JIRACHI, - Species.BUNEARY, - Species.LOPUNNY, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.CROAGUNK, - Species.TOXICROAK, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.GALLADE, - Species.DUSKNOIR, - Species.REGIGIGAS, - Species.VICTINI, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.SCRAGGY, - Species.SCRAFTY, - Species.ZOROARK, - Species.REUNICLUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.DIGGERSBY, - Species.PANCHAM, - Species.PANGORO, - Species.HELIOLISK, - Species.HAWLUCHA, - Species.GOODRA, - Species.INCINEROAR, - Species.STUFFUL, - Species.BEWEAR, - Species.ORANGURU, - Species.PASSIMIAN, - Species.TURTONATOR, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_BULU, - Species.BUZZWOLE, - Species.GUZZLORD, - Species.MARSHADOW, - Species.ZERAORA, - Species.MELMETAL, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.COALOSSAL, - Species.TOXTRICITY, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.MR_RIME, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, + [MoveId.MEGA_PUNCH]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.SLOWBRO, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.SNORLAX, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.AIPOM, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.DELIBIRD, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.TYRANITAR, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.ZANGOOSE, + SpeciesId.KECLEON, + SpeciesId.DUSCLOPS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.GROUDON, + SpeciesId.JIRACHI, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.REGIGIGAS, + SpeciesId.VICTINI, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.ZOROARK, + SpeciesId.REUNICLUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.DIGGERSBY, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.HELIOLISK, + SpeciesId.HAWLUCHA, + SpeciesId.GOODRA, + SpeciesId.INCINEROAR, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.TURTONATOR, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_BULU, + SpeciesId.BUZZWOLE, + SpeciesId.GUZZLORD, + SpeciesId.MARSHADOW, + SpeciesId.ZERAORA, + SpeciesId.MELMETAL, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.COALOSSAL, + SpeciesId.TOXTRICITY, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.MR_RIME, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, [ - Species.DEOXYS, + SpeciesId.DEOXYS, "attack", "defense", "speed", ], - Species.ALOLA_RAICHU, - Species.ALOLA_GOLEM, - Species.ALOLA_MAROWAK, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_MAROWAK, [ - Species.LYCANROC, + SpeciesId.LYCANROC, "midnight", ], - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_SLOWKING, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, ], - [Moves.PAY_DAY]: [ - Species.PIKACHU, - Species.RAICHU, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.SEEL, - Species.DEWGONG, - Species.RHYDON, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.SNORLAX, - Species.MEWTWO, - Species.MEW, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.ESPEON, - Species.UMBREON, - Species.SLOWKING, - Species.SKITTY, - Species.DELCATTY, - Species.MUNCHLAX, - Species.RHYPERIOR, - Species.LEAFEON, - Species.GLACEON, - Species.PURRLOIN, - Species.LIEPARD, - Species.ESPURR, - Species.MEOWSTIC, - Species.SYLVEON, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.ZERAORA, - Species.PERRSERKER, - Species.INDEEDEE, - Species.CALYREX, - Species.ANNIHILAPE, - Species.ALOLA_RAICHU, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.GALAR_MEOWTH, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_SLOWKING, + [MoveId.PAY_DAY]: [ + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.RHYDON, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.SNORLAX, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.SLOWKING, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.MUNCHLAX, + SpeciesId.RHYPERIOR, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.SYLVEON, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.ZERAORA, + SpeciesId.PERRSERKER, + SpeciesId.INDEEDEE, + SpeciesId.CALYREX, + SpeciesId.ANNIHILAPE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_SLOWKING, ], - [Moves.FIRE_PUNCH]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.MANKEY, - Species.PRIMEAPE, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.GRIMER, - Species.MUK, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.MR_MIME, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.SNORLAX, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.TYPHLOSION, - Species.SENTRET, - Species.FURRET, - Species.FLAAFFY, - Species.AMPHAROS, - Species.SUDOWOODO, - Species.AIPOM, - Species.SLOWKING, - Species.SNUBBULL, - Species.GRANBULL, - Species.TEDDIURSA, - Species.URSARING, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.TYRANITAR, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.LOMBRE, - Species.LUDICOLO, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.NOSEPASS, - Species.SABLEYE, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.GULPIN, - Species.SWALOT, - Species.GRUMPIG, - Species.SPINDA, - Species.FLYGON, - Species.ZANGOOSE, - Species.KECLEON, - Species.DUSCLOPS, - Species.REGIROCK, - Species.GROUDON, - Species.JIRACHI, - Species.DEOXYS, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.AMBIPOM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MUNCHLAX, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.REGIGIGAS, - Species.VICTINI, - Species.PIGNITE, - Species.EMBOAR, - Species.WATCHOG, - Species.PANSEAR, - Species.SIMISEAR, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.THROH, - Species.SAWK, - Species.DARUMAKA, - Species.DARMANITAN, - Species.SCRAGGY, - Species.SCRAFTY, - Species.REUNICLUS, - Species.EELEKTROSS, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.HEATMOR, - Species.MELOETTA, - Species.BRAIXEN, - Species.DELPHOX, - Species.DIGGERSBY, - Species.PANCHAM, - Species.PANGORO, - Species.HELIOLISK, - Species.HAWLUCHA, - Species.GOODRA, - Species.HOOPA, - Species.INCINEROAR, - Species.GUMSHOOS, + [MoveId.FIRE_PUNCH]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.MR_MIME, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.SNORLAX, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.TYPHLOSION, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.SUDOWOODO, + SpeciesId.AIPOM, + SpeciesId.SLOWKING, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.TYRANITAR, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.NOSEPASS, + SpeciesId.SABLEYE, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.FLYGON, + SpeciesId.ZANGOOSE, + SpeciesId.KECLEON, + SpeciesId.DUSCLOPS, + SpeciesId.REGIROCK, + SpeciesId.GROUDON, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.AMBIPOM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MUNCHLAX, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.REGIGIGAS, + SpeciesId.VICTINI, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.WATCHOG, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.REUNICLUS, + SpeciesId.EELEKTROSS, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.HEATMOR, + SpeciesId.MELOETTA, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.DIGGERSBY, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.HELIOLISK, + SpeciesId.HAWLUCHA, + SpeciesId.GOODRA, + SpeciesId.HOOPA, + SpeciesId.INCINEROAR, + SpeciesId.GUMSHOOS, [ - Species.LYCANROC, + SpeciesId.LYCANROC, "midnight", ], - Species.KOMMO_O, - Species.MARSHADOW, - Species.BLACEPHALON, - Species.ZERAORA, - Species.CINDERACE, - Species.COALOSSAL, - Species.TOXTRICITY, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.KUBFU, - Species.URSHIFU, - Species.URSALUNA, - Species.SNEASLER, - Species.PAWMOT, - Species.GARGANACL, - Species.ANNIHILAPE, - Species.SCREAM_TAIL, - Species.IRON_HANDS, - Species.IRON_THORNS, - Species.IRON_VALIANT, - Species.OKIDOGI, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_MAROWAK, + SpeciesId.KOMMO_O, + SpeciesId.MARSHADOW, + SpeciesId.BLACEPHALON, + SpeciesId.ZERAORA, + SpeciesId.CINDERACE, + SpeciesId.COALOSSAL, + SpeciesId.TOXTRICITY, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.URSALUNA, + SpeciesId.SNEASLER, + SpeciesId.PAWMOT, + SpeciesId.GARGANACL, + SpeciesId.ANNIHILAPE, + SpeciesId.SCREAM_TAIL, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_THORNS, + SpeciesId.IRON_VALIANT, + SpeciesId.OKIDOGI, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_MAROWAK, [ - Species.LYCANROC, + SpeciesId.LYCANROC, "midnight", ], - Species.GALAR_SLOWKING, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.HISUI_TYPHLOSION, - Species.HISUI_GOODRA, - Species.BLOODMOON_URSALUNA, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_GOODRA, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.ICE_PUNCH]: [ - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.SLOWBRO, - Species.GRIMER, - Species.MUK, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.MR_MIME, - Species.JYNX, - Species.ELECTABUZZ, - Species.SNORLAX, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.LEDYBA, - Species.LEDIAN, - Species.FLAAFFY, - Species.AMPHAROS, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.AIPOM, - Species.WOOPER, - Species.QUAGSIRE, - Species.SLOWKING, - Species.SNUBBULL, - Species.GRANBULL, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.DELIBIRD, - Species.SMOOCHUM, - Species.ELEKID, - Species.MILTANK, - Species.BLISSEY, - Species.TYRANITAR, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.LOMBRE, - Species.LUDICOLO, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.NOSEPASS, - Species.SABLEYE, - Species.MAWILE, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.VOLBEAT, - Species.ILLUMISE, - Species.GULPIN, - Species.SWALOT, - Species.GRUMPIG, - Species.SPINDA, - Species.ZANGOOSE, - Species.KECLEON, - Species.DUSCLOPS, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.JIRACHI, - Species.DEOXYS, - Species.BUIZEL, - Species.FLOATZEL, - Species.AMBIPOM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.CROAGUNK, - Species.TOXICROAK, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.ELECTIVIRE, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.REGIGIGAS, - Species.WATCHOG, - Species.PANPOUR, - Species.SIMIPOUR, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SCRAGGY, - Species.SCRAFTY, - Species.REUNICLUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.GOLETT, - Species.GOLURK, - Species.MELOETTA, - Species.FROGADIER, - Species.GRENINJA, - Species.DIGGERSBY, - Species.PANCHAM, - Species.PANGORO, - Species.HOOPA, - Species.GUMSHOOS, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.STUFFUL, - Species.BEWEAR, - Species.KOMMO_O, - Species.TAPU_FINI, - Species.BUZZWOLE, - Species.MARSHADOW, - Species.MELMETAL, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.MR_RIME, - Species.EISCUE, - Species.KUBFU, - Species.URSHIFU, - Species.URSALUNA, - Species.PAWMOT, - Species.GARGANACL, - Species.PALAFIN, - Species.CETITAN, - Species.ANNIHILAPE, - Species.SCREAM_TAIL, - Species.IRON_BUNDLE, - Species.IRON_HANDS, - Species.IRON_THORNS, - Species.IRON_VALIANT, - Species.OKIDOGI, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_SLOWKING, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.BLOODMOON_URSALUNA, + [MoveId.ICE_PUNCH]: [ + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.SLOWBRO, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.SNORLAX, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.AIPOM, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.DELIBIRD, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.TYRANITAR, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.NOSEPASS, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.ZANGOOSE, + SpeciesId.KECLEON, + SpeciesId.DUSCLOPS, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.AMBIPOM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.ELECTIVIRE, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.REGIGIGAS, + SpeciesId.WATCHOG, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.REUNICLUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.MELOETTA, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.DIGGERSBY, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.HOOPA, + SpeciesId.GUMSHOOS, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_FINI, + SpeciesId.BUZZWOLE, + SpeciesId.MARSHADOW, + SpeciesId.MELMETAL, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.MR_RIME, + SpeciesId.EISCUE, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.URSALUNA, + SpeciesId.PAWMOT, + SpeciesId.GARGANACL, + SpeciesId.PALAFIN, + SpeciesId.CETITAN, + SpeciesId.ANNIHILAPE, + SpeciesId.SCREAM_TAIL, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_THORNS, + SpeciesId.IRON_VALIANT, + SpeciesId.OKIDOGI, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.THUNDER_PUNCH]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.PIKACHU, - Species.RAICHU, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.MANKEY, - Species.PRIMEAPE, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.GRIMER, - Species.MUK, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.MR_MIME, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.SNORLAX, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.TYPHLOSION, - Species.SENTRET, - Species.FURRET, - Species.LEDYBA, - Species.LEDIAN, - Species.PICHU, - Species.FLAAFFY, - Species.AMPHAROS, - Species.SUDOWOODO, - Species.AIPOM, - Species.SLOWKING, - Species.SNUBBULL, - Species.GRANBULL, - Species.TEDDIURSA, - Species.URSARING, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.TYRANITAR, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.LOMBRE, - Species.LUDICOLO, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.NOSEPASS, - Species.SABLEYE, - Species.MAWILE, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.GULPIN, - Species.SWALOT, - Species.GRUMPIG, - Species.SPINDA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.ZANGOOSE, - Species.KECLEON, - Species.DUSCLOPS, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.GROUDON, - Species.JIRACHI, - Species.DEOXYS, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.PACHIRISU, - Species.AMBIPOM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.CROAGUNK, - Species.TOXICROAK, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.REGIGIGAS, - Species.VICTINI, - Species.PIGNITE, - Species.EMBOAR, - Species.WATCHOG, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.THROH, - Species.SAWK, - Species.SCRAGGY, - Species.SCRAFTY, - Species.REUNICLUS, - Species.EELEKTROSS, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.HEATMOR, - Species.THUNDURUS, - Species.ZEKROM, - Species.MELOETTA, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.BRAIXEN, - Species.DELPHOX, - Species.DIGGERSBY, - Species.PANCHAM, - Species.PANGORO, - Species.HELIOLISK, - Species.HAWLUCHA, - Species.DEDENNE, - Species.GOODRA, - Species.HOOPA, - Species.INCINEROAR, - Species.GUMSHOOS, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.STUFFUL, - Species.BEWEAR, + [MoveId.THUNDER_PUNCH]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.MR_MIME, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.SNORLAX, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.TYPHLOSION, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.PICHU, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.SUDOWOODO, + SpeciesId.AIPOM, + SpeciesId.SLOWKING, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.TYRANITAR, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.NOSEPASS, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.ZANGOOSE, + SpeciesId.KECLEON, + SpeciesId.DUSCLOPS, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.GROUDON, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.PACHIRISU, + SpeciesId.AMBIPOM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.REGIGIGAS, + SpeciesId.VICTINI, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.WATCHOG, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.REUNICLUS, + SpeciesId.EELEKTROSS, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.HEATMOR, + SpeciesId.THUNDURUS, + SpeciesId.ZEKROM, + SpeciesId.MELOETTA, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.DIGGERSBY, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.HELIOLISK, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.GOODRA, + SpeciesId.HOOPA, + SpeciesId.INCINEROAR, + SpeciesId.GUMSHOOS, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, [ - Species.LYCANROC, + SpeciesId.LYCANROC, "midnight", ], - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.BUZZWOLE, - Species.XURKITREE, - Species.MARSHADOW, - Species.ZERAORA, - Species.MELMETAL, - Species.TOXTRICITY, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.MORPEKO, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.KUBFU, - Species.URSHIFU, - Species.URSALUNA, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.PAWMO, - Species.PAWMOT, - Species.GARGANACL, - Species.ANNIHILAPE, - Species.SCREAM_TAIL, - Species.IRON_HANDS, - Species.IRON_THORNS, - Species.GHOLDENGO, - Species.IRON_VALIANT, - Species.OKIDOGI, - Species.ALOLA_RAICHU, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_MAROWAK, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.BUZZWOLE, + SpeciesId.XURKITREE, + SpeciesId.MARSHADOW, + SpeciesId.ZERAORA, + SpeciesId.MELMETAL, + SpeciesId.TOXTRICITY, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.MORPEKO, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.URSALUNA, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.GARGANACL, + SpeciesId.ANNIHILAPE, + SpeciesId.SCREAM_TAIL, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_THORNS, + SpeciesId.GHOLDENGO, + SpeciesId.IRON_VALIANT, + SpeciesId.OKIDOGI, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_MAROWAK, [ - Species.LYCANROC, + SpeciesId.LYCANROC, "midnight", ], - Species.GALAR_SLOWKING, - Species.HISUI_TYPHLOSION, - Species.HISUI_GOODRA, - Species.BLOODMOON_URSALUNA, + SpeciesId.GALAR_SLOWKING, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_GOODRA, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.SWORDS_DANCE]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.BEEDRILL, - Species.RATICATE, - Species.SANDSHREW, - Species.SANDSLASH, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.DIGLETT, - Species.DUGTRIO, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.RAPIDASH, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.KRABBY, - Species.KINGLER, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.RHYHORN, - Species.RHYDON, - Species.TANGELA, - Species.GOLDEEN, - Species.SEAKING, - Species.SCYTHER, - Species.PINSIR, - Species.KABUTOPS, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.LEDYBA, - Species.LEDIAN, - Species.ARIADOS, - Species.BELLOSSOM, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.SUNKERN, - Species.SUNFLORA, - Species.YANMA, - Species.GLIGAR, - Species.QWILFISH, - Species.SCIZOR, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SKARMORY, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.SHROOMISH, - Species.BRELOOM, - Species.NINJASK, - Species.MAWILE, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.CACNEA, - Species.CACTURNE, - Species.ZANGOOSE, - Species.SEVIPER, - Species.SOLROCK, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.BANETTE, - Species.TROPIUS, - Species.ABSOL, - Species.WALREIN, - Species.GROUDON, - Species.RAYQUAZA, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.EMPOLEON, - Species.BIDOOF, - Species.BIBAREL, - Species.KRICKETUNE, - Species.BUDEW, - Species.ROSERADE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.CHERUBI, - Species.CHERRIM, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.RIOLU, - Species.LUCARIO, - Species.SKORUPI, - Species.DRAPION, - Species.TOXICROAK, - Species.CARNIVINE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.YANMEGA, - Species.LEAFEON, - Species.GLISCOR, - Species.GALLADE, - Species.DARKRAI, - Species.SHAYMIN, - Species.ARCEUS, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.DRILBUR, - Species.EXCADRILL, - Species.LEAVANNY, - Species.SCOLIPEDE, - Species.LILLIGANT, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAFTY, - Species.ZORUA, - Species.ZOROARK, - Species.SAWSBUCK, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.FERROTHORN, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.BEARTIC, - Species.MIENFOO, - Species.MIENSHAO, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.LANDORUS, - Species.KELDEO, - Species.MELOETTA, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.PANCHAM, - Species.PANGORO, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.BINACLE, - Species.BARBARACLE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HAWLUCHA, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.ORICORIO, - Species.ROCKRUFF, - Species.LYCANROC, - Species.FOMANTIS, - Species.LURANTIS, - Species.STUFFUL, - Species.BEWEAR, - Species.GOLISOPOD, - Species.TYPE_NULL, - Species.SILVALLY, - Species.KOMALA, - Species.MIMIKYU, - Species.BRUXISH, - Species.DHELMISE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_BULU, - Species.KARTANA, - Species.NECROZMA, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.RABOOT, - Species.CINDERACE, - Species.INTELEON, - Species.GREEDENT, - Species.DUBWOOL, - Species.DREDNAW, - Species.HATTERENE, - Species.PERRSERKER, - Species.SIRFETCHD, - Species.FALINKS, - Species.DURALUDON, - Species.ZACIAN, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.GLASTRIER, - Species.KLEAVOR, - Species.URSALUNA, - Species.SNEASLER, - Species.OVERQWIL, - Species.QUAQUAVAL, - Species.LOKIX, - Species.CERULEDGE, - Species.SHROODLE, - Species.GRAFAIAI, - Species.KLAWF, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.FLAMIGO, - Species.KINGAMBIT, - Species.IRON_HANDS, - Species.IRON_THORNS, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.CHIEN_PAO, - Species.IRON_VALIANT, - Species.KORAIDON, - Species.MIRAIDON, - Species.IRON_LEAVES, - Species.FEZANDIPITI, - Species.OGERPON, - Species.ARCHALUDON, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.ALOLA_RATICATE, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.GALAR_MEOWTH, - Species.GALAR_RAPIDASH, - Species.GALAR_FARFETCHD, + [MoveId.SWORDS_DANCE]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.BEEDRILL, + SpeciesId.RATICATE, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.RAPIDASH, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.TANGELA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.SCYTHER, + SpeciesId.PINSIR, + SpeciesId.KABUTOPS, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.ARIADOS, + SpeciesId.BELLOSSOM, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.YANMA, + SpeciesId.GLIGAR, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SKARMORY, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.NINJASK, + SpeciesId.MAWILE, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.SOLROCK, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.BANETTE, + SpeciesId.TROPIUS, + SpeciesId.ABSOL, + SpeciesId.WALREIN, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.EMPOLEON, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.KRICKETUNE, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLISCOR, + SpeciesId.GALLADE, + SpeciesId.DARKRAI, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.LEAVANNY, + SpeciesId.SCOLIPEDE, + SpeciesId.LILLIGANT, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAFTY, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.SAWSBUCK, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.FERROTHORN, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.BEARTIC, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.LANDORUS, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HAWLUCHA, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.ORICORIO, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.GOLISOPOD, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.KOMALA, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.DHELMISE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_BULU, + SpeciesId.KARTANA, + SpeciesId.NECROZMA, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.INTELEON, + SpeciesId.GREEDENT, + SpeciesId.DUBWOOL, + SpeciesId.DREDNAW, + SpeciesId.HATTERENE, + SpeciesId.PERRSERKER, + SpeciesId.SIRFETCHD, + SpeciesId.FALINKS, + SpeciesId.DURALUDON, + SpeciesId.ZACIAN, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.GLASTRIER, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.QUAQUAVAL, + SpeciesId.LOKIX, + SpeciesId.CERULEDGE, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.KLAWF, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.FLAMIGO, + SpeciesId.KINGAMBIT, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_THORNS, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.CHIEN_PAO, + SpeciesId.IRON_VALIANT, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.IRON_LEAVES, + SpeciesId.FEZANDIPITI, + SpeciesId.OGERPON, + SpeciesId.ARCHALUDON, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_FARFETCHD, [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", ], - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, - Species.HISUI_ZOROARK, - Species.HISUI_DECIDUEYE, - Species.BLOODMOON_URSALUNA, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.CUT]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.BEEDRILL, - Species.RATTATA, - Species.RATICATE, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.FARFETCHD, - Species.KRABBY, - Species.KINGLER, - Species.LICKITUNG, - Species.RHYDON, - Species.TANGELA, - Species.KANGASKHAN, - Species.SCYTHER, - Species.PINSIR, - Species.KABUTOPS, - Species.DRAGONITE, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.BELLOSSOM, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.ESPEON, - Species.UMBREON, - Species.GLIGAR, - Species.STEELIX, - Species.SCIZOR, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SKARMORY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.TYRANITAR, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.ZIGZAGOON, - Species.LINOONE, - Species.NUZLEAF, - Species.SHIFTRY, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.SABLEYE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.ROSELIA, - Species.CACNEA, - Species.CACTURNE, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.ANORITH, - Species.ARMALDO, - Species.KECLEON, - Species.TROPIUS, - Species.ABSOL, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.LATIAS, - Species.LATIOS, - Species.GROUDON, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.BIDOOF, - Species.BIBAREL, - Species.KRICKETUNE, - Species.BUDEW, - Species.ROSERADE, - Species.RAMPARDOS, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.GLAMEOW, - Species.PURUGLY, - Species.STUNKY, - Species.SKUNTANK, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.SKORUPI, - Species.DRAPION, - Species.TOXICROAK, - Species.CARNIVINE, - Species.WEAVILE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.GLISCOR, - Species.GALLADE, - Species.DIALGA, - Species.PALKIA, - Species.GIRATINA, - Species.DARKRAI, - Species.ARCEUS, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.DRILBUR, - Species.EXCADRILL, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.SCOLIPEDE, - Species.PETILIL, - Species.LILLIGANT, - Species.BASCULIN, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DWEBBLE, - Species.CRUSTLE, - Species.ARCHEN, - Species.ARCHEOPS, - Species.ZORUA, - Species.ZOROARK, - Species.SAWSBUCK, - Species.EMOLGA, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.JOLTIK, - Species.GALVANTULA, - Species.FERROTHORN, - Species.EELEKTROSS, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.DRUDDIGON, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.DURANT, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.RESHIRAM, - Species.ZEKROM, - Species.KYUREM, - Species.KELDEO, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.PANCHAM, - Species.PANGORO, - Species.ESPURR, - Species.MEOWSTIC, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.NOIBAT, - Species.NOIVERN, - Species.XERNEAS, - Species.YVELTAL, - Species.VOLCANION, - Species.KARTANA, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.URSALUNA, - Species.BASCULEGION, - Species.KINGAMBIT, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.GALAR_MEOWTH, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.HISUI_TYPHLOSION, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, - Species.HISUI_BRAVIARY, - Species.BLOODMOON_URSALUNA, + [MoveId.CUT]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.BEEDRILL, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.FARFETCHD, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.LICKITUNG, + SpeciesId.RHYDON, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.SCYTHER, + SpeciesId.PINSIR, + SpeciesId.KABUTOPS, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.BELLOSSOM, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SCIZOR, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SKARMORY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.TYRANITAR, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.SABLEYE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.ROSELIA, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.KECLEON, + SpeciesId.TROPIUS, + SpeciesId.ABSOL, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.GROUDON, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.KRICKETUNE, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.RAMPARDOS, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.WEAVILE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.GLISCOR, + SpeciesId.GALLADE, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.GIRATINA, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.SCOLIPEDE, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.BASCULIN, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.FERROTHORN, + SpeciesId.EELEKTROSS, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.DRUDDIGON, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.VOLCANION, + SpeciesId.KARTANA, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.URSALUNA, + SpeciesId.BASCULEGION, + SpeciesId.KINGAMBIT, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.FLY]: [ - Species.CHARIZARD, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.SPEAROW, - Species.FEAROW, - Species.ZUBAT, - Species.GOLBAT, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.AERODACTYL, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRAGONITE, - Species.MEW, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.CROBAT, - Species.TOGETIC, - Species.XATU, - Species.MURKROW, - Species.DELIBIRD, - Species.SKARMORY, - Species.LUGIA, - Species.HO_OH, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.VIBRAVA, - Species.FLYGON, - Species.SWABLU, - Species.ALTARIA, - Species.TROPIUS, - Species.SALAMENCE, - Species.LATIAS, - Species.LATIOS, - Species.RAYQUAZA, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.HONCHKROW, - Species.CHATOT, - Species.TOGEKISS, - Species.GIRATINA, - Species.ARCEUS, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.WOOBAT, - Species.SWOOBAT, - Species.SIGILYPH, - Species.ARCHEOPS, - Species.DUCKLETT, - Species.SWANNA, - Species.GOLURK, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HYDREIGON, - Species.VOLCARONA, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.GENESECT, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.HAWLUCHA, - Species.NOIBAT, - Species.NOIVERN, - Species.YVELTAL, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.VIKAVOLT, - Species.ORICORIO, - Species.DRAMPA, - Species.TAPU_KOKO, - Species.LUNALA, - Species.CELESTEELA, - Species.NAGANADEL, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.FLAPPLE, - Species.CRAMORANT, - Species.DRAGAPULT, - Species.ETERNATUS, - Species.ENAMORUS, - Species.SQUAWKABILLY, - Species.WATTREL, - Species.KILOWATTREL, - Species.BOMBIRDIER, - Species.FLAMIGO, - Species.IRON_JUGULIS, - Species.ROARING_MOON, - Species.FEZANDIPITI, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.HISUI_BRAVIARY, + [MoveId.FLY]: [ + SpeciesId.CHARIZARD, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.AERODACTYL, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.CROBAT, + SpeciesId.TOGETIC, + SpeciesId.XATU, + SpeciesId.MURKROW, + SpeciesId.DELIBIRD, + SpeciesId.SKARMORY, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.TROPIUS, + SpeciesId.SALAMENCE, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.RAYQUAZA, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.HONCHKROW, + SpeciesId.CHATOT, + SpeciesId.TOGEKISS, + SpeciesId.GIRATINA, + SpeciesId.ARCEUS, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.SIGILYPH, + SpeciesId.ARCHEOPS, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.GOLURK, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HYDREIGON, + SpeciesId.VOLCARONA, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.GENESECT, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.HAWLUCHA, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.YVELTAL, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.VIKAVOLT, + SpeciesId.ORICORIO, + SpeciesId.DRAMPA, + SpeciesId.TAPU_KOKO, + SpeciesId.LUNALA, + SpeciesId.CELESTEELA, + SpeciesId.NAGANADEL, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.FLAPPLE, + SpeciesId.CRAMORANT, + SpeciesId.DRAGAPULT, + SpeciesId.ETERNATUS, + SpeciesId.ENAMORUS, + SpeciesId.SQUAWKABILLY, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.BOMBIRDIER, + SpeciesId.FLAMIGO, + SpeciesId.IRON_JUGULIS, + SpeciesId.ROARING_MOON, + SpeciesId.FEZANDIPITI, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.HISUI_BRAVIARY, ], - [Moves.MEGA_KICK]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.PIKACHU, - Species.RAICHU, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.GOLEM, - Species.SLOWBRO, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.MR_MIME, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.KABUTOPS, - Species.SNORLAX, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.FLAAFFY, - Species.AMPHAROS, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.AIPOM, - Species.QUAGSIRE, - Species.SLOWKING, - Species.SNUBBULL, - Species.GRANBULL, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.DELIBIRD, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.TYRANITAR, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.LOMBRE, - Species.LUDICOLO, - Species.NUZLEAF, - Species.SHIFTRY, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.SABLEYE, - Species.MAWILE, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.GRUMPIG, - Species.SPINDA, - Species.FLYGON, - Species.CACTURNE, - Species.ZANGOOSE, - Species.KECLEON, - Species.DUSCLOPS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.GROUDON, - Species.JIRACHI, - Species.BUNEARY, - Species.LOPUNNY, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.CROAGUNK, - Species.TOXICROAK, - Species.ABOMASNOW, - Species.WEAVILE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.GALLADE, - Species.DUSKNOIR, - Species.REGIGIGAS, - Species.VICTINI, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.SCRAGGY, - Species.SCRAFTY, - Species.ZOROARK, - Species.CUBCHOO, - Species.BEARTIC, - Species.MIENFOO, - Species.MIENSHAO, - Species.GOLETT, - Species.GOLURK, - Species.DIGGERSBY, - Species.PANCHAM, - Species.PANGORO, - Species.HELIOLISK, - Species.HAWLUCHA, - Species.GOODRA, - Species.INCINEROAR, - Species.MUDBRAY, - Species.MUDSDALE, - Species.STUFFUL, - Species.BEWEAR, - Species.TSAREENA, - Species.ORANGURU, - Species.PASSIMIAN, - Species.TURTONATOR, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.GUZZLORD, - Species.MARSHADOW, - Species.STAKATAKA, - Species.ZERAORA, - Species.MELMETAL, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.DUBWOOL, - Species.COALOSSAL, - Species.TOXTRICITY, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.MR_RIME, - Species.STONJOURNER, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.QUAQUAVAL, - Species.FLAMIGO, + [MoveId.MEGA_KICK]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.GOLEM, + SpeciesId.SLOWBRO, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.KABUTOPS, + SpeciesId.SNORLAX, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.AIPOM, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.DELIBIRD, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.TYRANITAR, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.FLYGON, + SpeciesId.CACTURNE, + SpeciesId.ZANGOOSE, + SpeciesId.KECLEON, + SpeciesId.DUSCLOPS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.GROUDON, + SpeciesId.JIRACHI, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.REGIGIGAS, + SpeciesId.VICTINI, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.ZOROARK, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.DIGGERSBY, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.HELIOLISK, + SpeciesId.HAWLUCHA, + SpeciesId.GOODRA, + SpeciesId.INCINEROAR, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.TSAREENA, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.TURTONATOR, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.GUZZLORD, + SpeciesId.MARSHADOW, + SpeciesId.STAKATAKA, + SpeciesId.ZERAORA, + SpeciesId.MELMETAL, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.DUBWOOL, + SpeciesId.COALOSSAL, + SpeciesId.TOXTRICITY, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.MR_RIME, + SpeciesId.STONJOURNER, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.QUAQUAVAL, + SpeciesId.FLAMIGO, [ - Species.DEOXYS, + SpeciesId.DEOXYS, "attack", "defense", "speed", ], - Species.ALOLA_RAICHU, - Species.ALOLA_MAROWAK, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_MAROWAK, [ - Species.LYCANROC, + SpeciesId.LYCANROC, "midnight", ], - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_ZAPDOS, - Species.GALAR_SLOWKING, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.HISUI_LILLIGANT, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_LILLIGANT, ], - [Moves.BODY_SLAM]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.RATTATA, - Species.RATICATE, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.SEEL, - Species.DEWGONG, - Species.GRIMER, - Species.MUK, - Species.CLOYSTER, - Species.GENGAR, - Species.ONIX, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.GOLDEEN, - Species.SEAKING, - Species.MR_MIME, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.SNORLAX, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.NOCTOWL, - Species.SPINARAK, - Species.ARIADOS, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.AIPOM, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.SLOWKING, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.SHUCKLE, - Species.HERACROSS, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.DELIBIRD, - Species.MANTINE, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.KINGDRA, - Species.PHANPY, - Species.DONPHAN, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.NOSEPASS, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.LUNATONE, - Species.SOLROCK, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.MILOTIC, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.TROPIUS, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.INFERNAPE, - Species.EMPOLEON, - Species.LUXRAY, - Species.ROSERADE, - Species.SHIELDON, - Species.BASTIODON, - Species.FLOATZEL, - Species.SHELLOS, - Species.GASTRODON, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.PURUGLY, - Species.STUNKY, - Species.SKUNTANK, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.SPIRITOMB, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SNOVER, - Species.ABOMASNOW, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.LEAFEON, - Species.GLACEON, - Species.MAMOSWINE, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.ARCEUS, - Species.SERPERIOR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.SAMUROTT, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.DRILBUR, - Species.EXCADRILL, - Species.AUDINO, - Species.CONKELDURR, - Species.THROH, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARMANITAN, - Species.SCRAFTY, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.GARBODOR, - Species.ZOROARK, - Species.GOTHITELLE, - Species.REUNICLUS, - Species.DEERLING, - Species.SAWSBUCK, - Species.FOONGUS, - Species.AMOONGUSS, - Species.ALOMOMOLA, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.SHELMET, - Species.ACCELGOR, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.HEATMOR, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.DIGGERSBY, - Species.LITLEO, - Species.PYROAR, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.CLAWITZER, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.HAWLUCHA, - Species.CARBINK, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.BERGMITE, - Species.AVALUGG, - Species.NOIVERN, - Species.XERNEAS, - Species.YVELTAL, - Species.ZYGARDE, - Species.DIANCIE, - Species.VOLCANION, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.BRIONNE, - Species.PRIMARINA, - Species.GUMSHOOS, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.TOXAPEX, - Species.MUDBRAY, - Species.MUDSDALE, - Species.ARAQUANID, - Species.SALAZZLE, - Species.BEWEAR, - Species.ORANGURU, - Species.PASSIMIAN, - Species.PALOSSAND, - Species.KOMALA, - Species.TURTONATOR, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.SOLGALEO, - Species.NIHILEGO, - Species.BUZZWOLE, - Species.CELESTEELA, - Species.GUZZLORD, - Species.NECROZMA, - Species.MAGEARNA, - Species.STAKATAKA, - Species.MELMETAL, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SKWOVET, - Species.GREEDENT, - Species.CORVIKNIGHT, - Species.DUBWOOL, - Species.CHEWTLE, - Species.DREDNAW, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.APPLETUN, - Species.SILICOBRA, - Species.SANDACONDA, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.CURSOLA, - Species.SIRFETCHD, - Species.MR_RIME, - Species.FALINKS, - Species.PINCURCHIN, - Species.STONJOURNER, - Species.EISCUE, - Species.INDEEDEE, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.DURALUDON, - Species.DRAGAPULT, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.ETERNATUS, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.REGIELEKI, - Species.REGIDRAGO, - Species.GLASTRIER, - Species.SPECTRIER, - Species.WYRDEER, - Species.URSALUNA, - Species.ENAMORUS, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.LECHONK, - Species.OINKOLOGNE, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.FIDOUGH, - Species.DACHSBUN, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.KLAWF, - Species.ESPATHRA, - Species.FINIZEN, - Species.PALAFIN, - Species.VAROOM, - Species.REVAVROOM, - Species.CYCLIZAR, - Species.ORTHWORM, - Species.CETODDLE, - Species.CETITAN, - Species.VELUZA, - Species.DONDOZO, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.BRUTE_BONNET, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_BUNDLE, - Species.IRON_HANDS, - Species.IRON_JUGULIS, - Species.IRON_THORNS, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.WO_CHIEN, - Species.TING_LU, - Species.ROARING_MOON, - Species.KORAIDON, - Species.MIRAIDON, - Species.WALKING_WAKE, - Species.DIPPLIN, - Species.OKIDOGI, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.TERAPAGOS, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_MAROWAK, - Species.GALAR_MEOWTH, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_FARFETCHD, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARMANITAN, + [MoveId.BODY_SLAM]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.CLOYSTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.SNORLAX, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.NOCTOWL, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.AIPOM, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.SLOWKING, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.KINGDRA, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.NOSEPASS, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.INFERNAPE, + SpeciesId.EMPOLEON, + SpeciesId.LUXRAY, + SpeciesId.ROSERADE, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.FLOATZEL, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.PURUGLY, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.SPIRITOMB, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.MAMOSWINE, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.ARCEUS, + SpeciesId.SERPERIOR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.SAMUROTT, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.AUDINO, + SpeciesId.CONKELDURR, + SpeciesId.THROH, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARMANITAN, + SpeciesId.SCRAFTY, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.GARBODOR, + SpeciesId.ZOROARK, + SpeciesId.GOTHITELLE, + SpeciesId.REUNICLUS, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.ALOMOMOLA, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.HEATMOR, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.DIGGERSBY, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.CLAWITZER, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.CARBINK, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.VOLCANION, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.GUMSHOOS, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.TOXAPEX, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.ARAQUANID, + SpeciesId.SALAZZLE, + SpeciesId.BEWEAR, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.PALOSSAND, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.SOLGALEO, + SpeciesId.NIHILEGO, + SpeciesId.BUZZWOLE, + SpeciesId.CELESTEELA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.STAKATAKA, + SpeciesId.MELMETAL, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.CORVIKNIGHT, + SpeciesId.DUBWOOL, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.APPLETUN, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.SIRFETCHD, + SpeciesId.MR_RIME, + SpeciesId.FALINKS, + SpeciesId.PINCURCHIN, + SpeciesId.STONJOURNER, + SpeciesId.EISCUE, + SpeciesId.INDEEDEE, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.DURALUDON, + SpeciesId.DRAGAPULT, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.ETERNATUS, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.REGIELEKI, + SpeciesId.REGIDRAGO, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.WYRDEER, + SpeciesId.URSALUNA, + SpeciesId.ENAMORUS, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.KLAWF, + SpeciesId.ESPATHRA, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.CYCLIZAR, + SpeciesId.ORTHWORM, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.VELUZA, + SpeciesId.DONDOZO, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.BRUTE_BONNET, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_THORNS, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.WO_CHIEN, + SpeciesId.TING_LU, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.DIPPLIN, + SpeciesId.OKIDOGI, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARMANITAN, [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", "shadow", ], - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_TYPHLOSION, - Species.HISUI_SAMUROTT, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.TAKE_DOWN]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.SEEL, - Species.DEWGONG, - Species.GRIMER, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.GENGAR, - Species.ONIX, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.VOLTORB, - Species.ELECTRODE, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.PORYGON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.IGGLYBUFF, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.YANMA, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SCIZOR, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.DELIBIRD, - Species.MANTINE, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.PHANPY, - Species.DONPHAN, - Species.STANTLER, - Species.BLISSEY, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.WINGULL, - Species.PELIPPER, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.WHISMUR, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.NOSEPASS, - Species.SABLEYE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.VOLBEAT, - Species.ILLUMISE, - Species.GULPIN, - Species.SWALOT, - Species.CARVANHA, - Species.SHARPEDO, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPOINK, - Species.GRUMPIG, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.MILOTIC, - Species.TROPIUS, - Species.CHIMECHO, - Species.SNORUNT, - Species.GLALIE, - Species.RELICANTH, - Species.LUVDISC, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.BELDUM, - Species.METANG, - Species.METAGROSS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.BIDOOF, - Species.BIBAREL, - Species.KRICKETUNE, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.CHERUBI, - Species.CHERRIM, - Species.SHELLOS, - Species.GASTRODON, - Species.AMBIPOM, - Species.HONCHKROW, - Species.STUNKY, - Species.SKUNTANK, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.HAPPINY, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.CROAGUNK, - Species.TOXICROAK, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.MAGNEZONE, - Species.RHYPERIOR, - Species.YANMEGA, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.GALLADE, - Species.PROBOPASS, - Species.FROSLASS, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.GIRATINA, - Species.ARCEUS, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.BLITZLE, - Species.ROGGENROLA, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.BASCULIN, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.TRUBBISH, - Species.GARBODOR, - Species.ZORUA, - Species.ZOROARK, - Species.DEERLING, - Species.SAWSBUCK, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.ALOMOMOLA, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.MIENFOO, - Species.MIENSHAO, - Species.PAWNIARD, - Species.BISHARP, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.LANDORUS, - Species.KELDEO, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.LITLEO, - Species.PYROAR, - Species.SKIDDO, - Species.GOGOAT, - Species.FURFROU, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.CARBINK, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.TREVENANT, - Species.BERGMITE, - Species.AVALUGG, - Species.NOIBAT, - Species.NOIVERN, - Species.XERNEAS, - Species.DIANCIE, - Species.HOOPA, - Species.VOLCANION, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ORICORIO, - Species.RIBOMBEE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.WISHIWASHI, - Species.MUDBRAY, - Species.MUDSDALE, - Species.FOMANTIS, - Species.LURANTIS, - Species.SALANDIT, - Species.SALAZZLE, - Species.STUFFUL, - Species.BEWEAR, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.ORANGURU, - Species.PASSIMIAN, - Species.TYPE_NULL, - Species.SILVALLY, - Species.MINIOR, - Species.KOMALA, - Species.MIMIKYU, - Species.BRUXISH, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.MAGEARNA, - Species.STAKATAKA, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.SKWOVET, - Species.GREEDENT, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.WOOLOO, - Species.DUBWOOL, - Species.CHEWTLE, - Species.DREDNAW, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.FLAPPLE, - Species.APPLETUN, - Species.SILICOBRA, - Species.SANDACONDA, - Species.CRAMORANT, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.TOXTRICITY, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.FALINKS, - Species.PINCURCHIN, - Species.FROSMOTH, - Species.STONJOURNER, - Species.EISCUE, - Species.INDEEDEE, - Species.MORPEKO, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.ETERNATUS, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.REGIELEKI, - Species.REGIDRAGO, - Species.GLASTRIER, - Species.SPECTRIER, - Species.CALYREX, - Species.WYRDEER, - Species.KLEAVOR, - Species.URSALUNA, - Species.BASCULEGION, - Species.SNEASLER, - Species.OVERQWIL, - Species.ENAMORUS, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.LECHONK, - Species.OINKOLOGNE, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.NYMBLE, - Species.LOKIX, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.FIDOUGH, - Species.DACHSBUN, - Species.SQUAWKABILLY, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.CHARCADET, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.WATTREL, - Species.KILOWATTREL, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.SHROODLE, - Species.GRAFAIAI, - Species.KLAWF, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.RELLOR, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.WIGLETT, - Species.WUGTRIO, - Species.BOMBIRDIER, - Species.FINIZEN, - Species.PALAFIN, - Species.VAROOM, - Species.REVAVROOM, - Species.CYCLIZAR, - Species.ORTHWORM, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.FLAMIGO, - Species.CETODDLE, - Species.CETITAN, - Species.VELUZA, - Species.DONDOZO, - Species.TATSUGIRI, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_BUNDLE, - Species.IRON_HANDS, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.IRON_THORNS, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.GIMMIGHOUL, - Species.GHOLDENGO, - Species.WO_CHIEN, - Species.CHIEN_PAO, - Species.TING_LU, - Species.CHI_YU, - Species.ROARING_MOON, - Species.KORAIDON, - Species.MIRAIDON, - Species.WALKING_WAKE, - Species.IRON_LEAVES, - Species.DIPPLIN, - Species.OKIDOGI, - Species.FEZANDIPITI, - Species.OGERPON, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.TERAPAGOS, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.GALAR_MEOWTH, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_WEEZING, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARUMAKA, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_TYPHLOSION, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.HISUI_DECIDUEYE, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, + [MoveId.TAKE_DOWN]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.PORYGON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.IGGLYBUFF, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.YANMA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.STANTLER, + SpeciesId.BLISSEY, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.WHISMUR, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.NOSEPASS, + SpeciesId.SABLEYE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.MILOTIC, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.BELDUM, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.KRICKETUNE, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.HONCHKROW, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.HAPPINY, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.MAGNEZONE, + SpeciesId.RHYPERIOR, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.FROSLASS, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.GIRATINA, + SpeciesId.ARCEUS, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.BLITZLE, + SpeciesId.ROGGENROLA, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.BASCULIN, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.ALOMOMOLA, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.LANDORUS, + SpeciesId.KELDEO, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.FURFROU, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.TREVENANT, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ORICORIO, + SpeciesId.RIBOMBEE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.WISHIWASHI, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.MAGEARNA, + SpeciesId.STAKATAKA, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.WOOLOO, + SpeciesId.DUBWOOL, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.TOXTRICITY, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.FALINKS, + SpeciesId.PINCURCHIN, + SpeciesId.FROSMOTH, + SpeciesId.STONJOURNER, + SpeciesId.EISCUE, + SpeciesId.INDEEDEE, + SpeciesId.MORPEKO, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.ETERNATUS, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.REGIELEKI, + SpeciesId.REGIDRAGO, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.BASCULEGION, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.ENAMORUS, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.SQUAWKABILLY, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.CHARCADET, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.KLAWF, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.BOMBIRDIER, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.CYCLIZAR, + SpeciesId.ORTHWORM, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.FLAMIGO, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.VELUZA, + SpeciesId.DONDOZO, + SpeciesId.TATSUGIRI, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_THORNS, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.GIMMIGHOUL, + SpeciesId.GHOLDENGO, + SpeciesId.WO_CHIEN, + SpeciesId.CHIEN_PAO, + SpeciesId.TING_LU, + SpeciesId.CHI_YU, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.IRON_LEAVES, + SpeciesId.DIPPLIN, + SpeciesId.OKIDOGI, + SpeciesId.FEZANDIPITI, + SpeciesId.OGERPON, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, ], - [Moves.DOUBLE_EDGE]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.SEEL, - Species.DEWGONG, - Species.SHELLDER, - Species.CLOYSTER, - Species.GENGAR, - Species.ONIX, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.VOLTORB, - Species.ELECTRODE, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.PORYGON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TYROGUE, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.YANMA, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.KINGDRA, - Species.PHANPY, - Species.DONPHAN, - Species.PORYGON2, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.NOSEPASS, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.FEEBAS, - Species.MILOTIC, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.TROPIUS, - Species.CHIMECHO, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.FLOATZEL, - Species.AMBIPOM, - Species.HONCHKROW, - Species.CHINGLING, - Species.STUNKY, - Species.SKUNTANK, - Species.BONSLY, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SNOVER, - Species.ABOMASNOW, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.YANMEGA, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.PORYGON_Z, - Species.PROBOPASS, - Species.MESPRIT, - Species.AZELF, - Species.REGIGIGAS, - Species.SHAYMIN, - Species.ARCEUS, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.DRILBUR, - Species.EXCADRILL, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.BASCULIN, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.CINCCINO, - Species.DUCKLETT, - Species.SWANNA, - Species.DEERLING, - Species.SAWSBUCK, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.BEARTIC, - Species.MIENSHAO, - Species.GOLETT, - Species.GOLURK, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.LARVESTA, - Species.VOLCARONA, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.RESHIRAM, - Species.ZEKROM, - Species.KELDEO, - Species.CHESNAUGHT, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.LITLEO, - Species.PYROAR, - Species.SKIDDO, - Species.GOGOAT, - Species.SYLVEON, - Species.CARBINK, - Species.GOURGEIST, - Species.BERGMITE, - Species.AVALUGG, - Species.NOIVERN, - Species.VOLCANION, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.ROCKRUFF, - Species.LYCANROC, - Species.MUDBRAY, - Species.MUDSDALE, - Species.PASSIMIAN, - Species.MINIOR, - Species.KOMALA, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.SOLGALEO, - Species.THWACKEY, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.SKWOVET, - Species.GREEDENT, - Species.CORVIKNIGHT, - Species.DREDNAW, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.PERRSERKER, - Species.EISCUE, - Species.MORPEKO, - Species.CUFANT, - Species.COPPERAJAH, - Species.DURALUDON, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.GLASTRIER, - Species.SPECTRIER, + [MoveId.DOUBLE_EDGE]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.PORYGON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TYROGUE, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.YANMA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.KINGDRA, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.NOSEPASS, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.FLOATZEL, + SpeciesId.AMBIPOM, + SpeciesId.HONCHKROW, + SpeciesId.CHINGLING, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BONSLY, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.PORYGON_Z, + SpeciesId.PROBOPASS, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.REGIGIGAS, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.BASCULIN, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.CINCCINO, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.BEARTIC, + SpeciesId.MIENSHAO, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.KELDEO, + SpeciesId.CHESNAUGHT, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.SYLVEON, + SpeciesId.CARBINK, + SpeciesId.GOURGEIST, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.NOIVERN, + SpeciesId.VOLCANION, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.PASSIMIAN, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.SOLGALEO, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.CORVIKNIGHT, + SpeciesId.DREDNAW, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.PERRSERKER, + SpeciesId.EISCUE, + SpeciesId.MORPEKO, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DURALUDON, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", "shadow", ], - Species.WYRDEER, - Species.KLEAVOR, - Species.URSALUNA, - Species.BASCULEGION, - Species.OVERQWIL, - Species.LECHONK, - Species.OINKOLOGNE, - Species.LOKIX, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.FIDOUGH, - Species.DACHSBUN, - Species.SQUAWKABILLY, - Species.NACLSTACK, - Species.GARGANACL, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.SHROODLE, - Species.GRAFAIAI, - Species.ESPATHRA, - Species.VAROOM, - Species.REVAVROOM, - Species.CYCLIZAR, - Species.ORTHWORM, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.CETODDLE, - Species.CETITAN, - Species.VELUZA, - Species.DONDOZO, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.BRUTE_BONNET, - Species.SLITHER_WING, - Species.IRON_TREADS, - Species.IRON_HANDS, - Species.IRON_JUGULIS, - Species.IRON_THORNS, - Species.BAXCALIBUR, - Species.TING_LU, - Species.ROARING_MOON, - Species.KORAIDON, - Species.WALKING_WAKE, - Species.OKIDOGI, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.TERAPAGOS, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_EXEGGUTOR, - Species.GALAR_MEOWTH, - Species.GALAR_SLOWBRO, - Species.GALAR_WEEZING, - Species.GALAR_ZAPDOS, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_TYPHLOSION, - Species.HISUI_QWILFISH, - Species.HISUI_BRAVIARY, - Species.HISUI_AVALUGG, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + SpeciesId.WYRDEER, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.BASCULEGION, + SpeciesId.OVERQWIL, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.LOKIX, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.SQUAWKABILLY, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.ESPATHRA, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.CYCLIZAR, + SpeciesId.ORTHWORM, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.VELUZA, + SpeciesId.DONDOZO, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.BRUTE_BONNET, + SpeciesId.SLITHER_WING, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_THORNS, + SpeciesId.BAXCALIBUR, + SpeciesId.TING_LU, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.OKIDOGI, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_AVALUGG, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.PIN_MISSILE]: [ - Species.BEEDRILL, - Species.SANDSLASH, - Species.CLOYSTER, - Species.JOLTEON, - Species.OMASTAR, - Species.MEW, - Species.SPINARAK, - Species.ARIADOS, - Species.PINECO, - Species.FORRETRESS, - Species.QWILFISH, - Species.HERACROSS, - Species.ZIGZAGOON, - Species.LINOONE, - Species.ROSELIA, - Species.CACNEA, - Species.CACTURNE, - Species.BUDEW, - Species.ROSERADE, - Species.VESPIQUEN, - Species.SKORUPI, - Species.DRAPION, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.MARACTUS, - Species.JOLTIK, - Species.GALVANTULA, - Species.FERROSEED, - Species.FERROTHORN, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.MAREANIE, - Species.TOXAPEX, - Species.GOLISOPOD, - Species.TOGEDEMARU, - Species.POIPOLE, - Species.NAGANADEL, - Species.OBSTAGOON, - Species.CURSOLA, - Species.PINCURCHIN, - Species.OVERQWIL, - Species.IRON_THORNS, - Species.ALOLA_SANDSLASH, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.HISUI_QWILFISH, + [MoveId.PIN_MISSILE]: [ + SpeciesId.BEEDRILL, + SpeciesId.SANDSLASH, + SpeciesId.CLOYSTER, + SpeciesId.JOLTEON, + SpeciesId.OMASTAR, + SpeciesId.MEW, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.QWILFISH, + SpeciesId.HERACROSS, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.ROSELIA, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.VESPIQUEN, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.MARACTUS, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.GOLISOPOD, + SpeciesId.TOGEDEMARU, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.OBSTAGOON, + SpeciesId.CURSOLA, + SpeciesId.PINCURCHIN, + SpeciesId.OVERQWIL, + SpeciesId.IRON_THORNS, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.HISUI_QWILFISH, ], - [Moves.ROAR]: [ - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.BLASTOISE, - Species.RATICATE, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.VULPIX, - Species.NINETALES, - Species.PERSIAN, - Species.GROWLITHE, - Species.ARCANINE, - Species.GOLEM, - Species.ONIX, - Species.RHYHORN, - Species.RHYDON, - Species.KANGASKHAN, - Species.GYARADOS, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.AERODACTYL, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRAGONITE, - Species.MEW, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.CROCONAW, - Species.FERALIGATR, - Species.FLAAFFY, - Species.AMPHAROS, - Species.ESPEON, - Species.UMBREON, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.TEDDIURSA, - Species.URSARING, - Species.SWINUB, - Species.PILOSWINE, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.PHANPY, - Species.DONPHAN, - Species.STANTLER, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.SCEPTILE, - Species.BLAZIKEN, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.LINOONE, - Species.VIGOROTH, - Species.SLAKING, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.ALTARIA, - Species.ZANGOOSE, - Species.TROPIUS, - Species.SEALEO, - Species.WALREIN, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.INFERNAPE, - Species.EMPOLEON, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.BUIZEL, - Species.FLOATZEL, - Species.PURUGLY, - Species.STUNKY, - Species.SKUNTANK, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.DRAPION, - Species.RHYPERIOR, - Species.LEAFEON, - Species.GLACEON, - Species.MAMOSWINE, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.GIRATINA, - Species.ARCEUS, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.SCRAGGY, - Species.SCRAFTY, - Species.ARCHEN, - Species.ARCHEOPS, - Species.ZORUA, - Species.ZOROARK, - Species.EELEKTROSS, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.BEARTIC, - Species.DRUDDIGON, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.KELDEO, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.LITLEO, - Species.PYROAR, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.AVALUGG, - Species.XERNEAS, - Species.VOLCANION, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.GUMSHOOS, - Species.ROCKRUFF, - Species.LYCANROC, - Species.MUDBRAY, - Species.MUDSDALE, - Species.STUFFUL, - Species.BEWEAR, - Species.TYPE_NULL, - Species.SILVALLY, - Species.TURTONATOR, - Species.DRAMPA, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.TAPU_BULU, - Species.SOLGALEO, - Species.LUNALA, - Species.YAMPER, - Species.BOLTUND, - Species.ZAMAZENTA, - Species.ZARUDE, - Species.GLASTRIER, - Species.WYRDEER, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.FIDOUGH, - Species.DACHSBUN, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.FARIGIRAF, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.IRON_JUGULIS, - Species.ROARING_MOON, - Species.KORAIDON, - Species.WALKING_WAKE, - Species.OKIDOGI, - Species.ARCHALUDON, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.TERAPAGOS, - Species.ALOLA_RATICATE, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_PERSIAN, - Species.ALOLA_GOLEM, + [MoveId.ROAR]: [ + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.BLASTOISE, + SpeciesId.RATICATE, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.PERSIAN, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.GOLEM, + SpeciesId.ONIX, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.KANGASKHAN, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.AERODACTYL, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.STANTLER, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.SCEPTILE, + SpeciesId.BLAZIKEN, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.LINOONE, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.TROPIUS, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.INFERNAPE, + SpeciesId.EMPOLEON, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.PURUGLY, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.DRAPION, + SpeciesId.RHYPERIOR, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.MAMOSWINE, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.GIRATINA, + SpeciesId.ARCEUS, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.EELEKTROSS, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.BEARTIC, + SpeciesId.DRUDDIGON, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.KELDEO, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.AVALUGG, + SpeciesId.XERNEAS, + SpeciesId.VOLCANION, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.GUMSHOOS, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.TURTONATOR, + SpeciesId.DRAMPA, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_BULU, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.ZAMAZENTA, + SpeciesId.ZARUDE, + SpeciesId.GLASTRIER, + SpeciesId.WYRDEER, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.FARIGIRAF, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.IRON_JUGULIS, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.OKIDOGI, + SpeciesId.ARCHALUDON, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GOLEM, [ - Species.URSHIFU, + SpeciesId.URSHIFU, "single-strike", ], - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_TYPHLOSION, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.BLOODMOON_URSALUNA, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.FLAMETHROWER]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.GROWLITHE, - Species.ARCANINE, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.GRIMER, - Species.MUK, - Species.CUBONE, - Species.MAROWAK, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.MAGMAR, - Species.TAUROS, - Species.GYARADOS, - Species.FLAREON, - Species.AERODACTYL, - Species.SNORLAX, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.SENTRET, - Species.FURRET, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.SLOWKING, - Species.DUNSPARCE, - Species.SNUBBULL, - Species.GRANBULL, - Species.SLUGMA, - Species.MAGCARGO, - Species.REMORAID, - Species.OCTILLERY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.MAGBY, - Species.BLISSEY, - Species.ENTEI, - Species.TYRANITAR, - Species.HO_OH, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAWILE, - Species.AGGRON, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.FLYGON, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.SOLROCK, - Species.CASTFORM, - Species.KECLEON, - Species.ABSOL, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.GROUDON, - Species.RAYQUAZA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.STUNKY, - Species.SKUNTANK, - Species.HAPPINY, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.ARCEUS, - Species.VICTINI, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.WATCHOG, - Species.PANSEAR, - Species.SIMISEAR, - Species.AUDINO, - Species.DARUMAKA, - Species.DARMANITAN, - Species.ZOROARK, - Species.EELEKTROSS, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.DRUDDIGON, - Species.HEATMOR, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.RESHIRAM, - Species.GENESECT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.LITLEO, - Species.PYROAR, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.GOODRA, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.NOIVERN, - Species.VOLCANION, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.SALANDIT, - Species.SALAZZLE, - Species.SILVALLY, - Species.TURTONATOR, - Species.DRAMPA, - Species.KOMMO_O, - Species.SOLGALEO, - Species.CELESTEELA, - Species.GUZZLORD, - Species.NAGANADEL, - Species.BLACEPHALON, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.CARKOL, - Species.COALOSSAL, - Species.CENTISKORCH, - Species.DRACOZOLT, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ETERNATUS, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.CHARCADET, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.SCOVILLAIN, - Species.DUDUNSPARCE, - Species.SCREAM_TAIL, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.IRON_THORNS, - Species.CHI_YU, - Species.ROARING_MOON, - Species.KORAIDON, - Species.WALKING_WAKE, - Species.GOUGING_FIRE, - Species.TERAPAGOS, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_WEEZING, - Species.GALAR_SLOWKING, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_TYPHLOSION, - Species.HISUI_ZOROARK, - Species.HISUI_GOODRA, + [MoveId.FLAMETHROWER]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.MAGMAR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.FLAREON, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.SLOWKING, + SpeciesId.DUNSPARCE, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.MAGBY, + SpeciesId.BLISSEY, + SpeciesId.ENTEI, + SpeciesId.TYRANITAR, + SpeciesId.HO_OH, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAWILE, + SpeciesId.AGGRON, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.FLYGON, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.SOLROCK, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.ABSOL, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.HAPPINY, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.WATCHOG, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.AUDINO, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.ZOROARK, + SpeciesId.EELEKTROSS, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.DRUDDIGON, + SpeciesId.HEATMOR, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.RESHIRAM, + SpeciesId.GENESECT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.GOODRA, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.NOIVERN, + SpeciesId.VOLCANION, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.SILVALLY, + SpeciesId.TURTONATOR, + SpeciesId.DRAMPA, + SpeciesId.KOMMO_O, + SpeciesId.SOLGALEO, + SpeciesId.CELESTEELA, + SpeciesId.GUZZLORD, + SpeciesId.NAGANADEL, + SpeciesId.BLACEPHALON, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.CENTISKORCH, + SpeciesId.DRACOZOLT, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ETERNATUS, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.CHARCADET, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.SCOVILLAIN, + SpeciesId.DUDUNSPARCE, + SpeciesId.SCREAM_TAIL, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_THORNS, + SpeciesId.CHI_YU, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.GOUGING_FIRE, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_GOODRA, [ - Species.PALDEA_TAUROS, + SpeciesId.PALDEA_TAUROS, "blaze", ], ], - [Moves.HYDRO_PUMP]: [ - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.PSYDUCK, - Species.GOLDUCK, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.SHELLDER, - Species.CLOYSTER, - Species.KINGLER, - Species.LICKITUNG, - Species.RHYDON, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.MAGIKARP, - Species.GYARADOS, - Species.LAPRAS, - Species.VAPOREON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.SNORLAX, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.CHINCHOU, - Species.LANTURN, - Species.MARILL, - Species.AZUMARILL, - Species.POLITOED, - Species.WOOPER, - Species.QUAGSIRE, - Species.SLOWKING, - Species.QWILFISH, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.MANTINE, - Species.KINGDRA, - Species.SUICUNE, - Species.TYRANITAR, - Species.LUGIA, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.LOMBRE, - Species.LUDICOLO, - Species.WINGULL, - Species.PELIPPER, - Species.SURSKIT, - Species.MASQUERAIN, - Species.EXPLOUD, - Species.AGGRON, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.MILOTIC, - Species.CASTFORM, - Species.WALREIN, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.KYOGRE, - Species.RAYQUAZA, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.BUIZEL, - Species.FLOATZEL, - Species.SHELLOS, - Species.GASTRODON, - Species.MUNCHLAX, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.PALKIA, - Species.ARCEUS, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PANPOUR, - Species.SIMIPOUR, - Species.DRILBUR, - Species.EXCADRILL, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.BASCULIN, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.SWANNA, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.HYDREIGON, - Species.KELDEO, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.GOODRA, - Species.AVALUGG, - Species.VOLCANION, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.DEWPIDER, - Species.ARAQUANID, - Species.BRUXISH, - Species.DRAMPA, - Species.DHELMISE, - Species.TAPU_FINI, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.CHEWTLE, - Species.DREDNAW, - Species.CRAMORANT, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.GRAPPLOCT, - Species.CURSOLA, - Species.PINCURCHIN, - Species.EISCUE, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.BASCULEGION, - Species.OVERQWIL, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.WIGLETT, - Species.WUGTRIO, - Species.FINIZEN, - Species.PALAFIN, - Species.VELUZA, - Species.DONDOZO, - Species.TATSUGIRI, - Species.CLODSIRE, - Species.IRON_BUNDLE, - Species.IRON_JUGULIS, - Species.ROARING_MOON, - Species.WALKING_WAKE, - Species.HYDRAPPLE, + [MoveId.HYDRO_PUMP]: [ + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.KINGLER, + SpeciesId.LICKITUNG, + SpeciesId.RHYDON, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MAGIKARP, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.VAPOREON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.SNORLAX, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.POLITOED, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.QWILFISH, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.MANTINE, + SpeciesId.KINGDRA, + SpeciesId.SUICUNE, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.EXPLOUD, + SpeciesId.AGGRON, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.WALREIN, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.KYOGRE, + SpeciesId.RAYQUAZA, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.MUNCHLAX, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.PALKIA, + SpeciesId.ARCEUS, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.BASCULIN, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.SWANNA, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.HYDREIGON, + SpeciesId.KELDEO, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.GOODRA, + SpeciesId.AVALUGG, + SpeciesId.VOLCANION, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.TAPU_FINI, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.GRAPPLOCT, + SpeciesId.CURSOLA, + SpeciesId.PINCURCHIN, + SpeciesId.EISCUE, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.BASCULEGION, + SpeciesId.OVERQWIL, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.VELUZA, + SpeciesId.DONDOZO, + SpeciesId.TATSUGIRI, + SpeciesId.CLODSIRE, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_JUGULIS, + SpeciesId.ROARING_MOON, + SpeciesId.WALKING_WAKE, + SpeciesId.HYDRAPPLE, [ - Species.ROTOM, + SpeciesId.ROTOM, "wash", ], - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.HISUI_QWILFISH, - Species.HISUI_SAMUROTT, - Species.HISUI_GOODRA, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_GOODRA, [ - Species.PALDEA_TAUROS, + SpeciesId.PALDEA_TAUROS, "aqua", ], - Species.PALDEA_WOOPER, + SpeciesId.PALDEA_WOOPER, ], - [Moves.SURF]: [ - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.PIKACHU, - Species.RAICHU, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.PSYDUCK, - Species.GOLDUCK, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.SEEL, - Species.DEWGONG, - Species.SHELLDER, - Species.CLOYSTER, - Species.KRABBY, - Species.KINGLER, - Species.LICKITUNG, - Species.RHYDON, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.VAPOREON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.SNORLAX, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.MARILL, - Species.AZUMARILL, - Species.POLITOED, - Species.WOOPER, - Species.QUAGSIRE, - Species.SLOWKING, - Species.QWILFISH, - Species.SNEASEL, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.MANTINE, - Species.KINGDRA, - Species.MILTANK, - Species.SUICUNE, - Species.TYRANITAR, - Species.LUGIA, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.ZIGZAGOON, - Species.LINOONE, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.WINGULL, - Species.PELIPPER, - Species.SURSKIT, - Species.MASQUERAIN, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.AGGRON, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.ZANGOOSE, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.FEEBAS, - Species.MILOTIC, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.RAYQUAZA, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.BIBAREL, - Species.RAMPARDOS, - Species.BUIZEL, - Species.FLOATZEL, - Species.SHELLOS, - Species.GASTRODON, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.WEAVILE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.PALKIA, - Species.PHIONE, - Species.MANAPHY, - Species.ARCEUS, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.HERDIER, - Species.STOUTLAND, - Species.PANPOUR, - Species.SIMIPOUR, - Species.AUDINO, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.BASCULIN, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.DUCKLETT, - Species.SWANNA, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.STUNFISK, - Species.DRUDDIGON, - Species.BOUFFALANT, - Species.HYDREIGON, - Species.KELDEO, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.SWIRLIX, - Species.SLURPUFF, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.GOODRA, - Species.BERGMITE, - Species.AVALUGG, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.DEWPIDER, - Species.ARAQUANID, - Species.WIMPOD, - Species.GOLISOPOD, - Species.SILVALLY, - Species.BRUXISH, - Species.DRAMPA, - Species.DHELMISE, - Species.TAPU_FINI, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.CHEWTLE, - Species.DREDNAW, - Species.CRAMORANT, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.GRAPPLOCT, - Species.OBSTAGOON, - Species.CURSOLA, - Species.PINCURCHIN, - Species.EISCUE, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.BASCULEGION, - Species.OVERQWIL, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.WIGLETT, - Species.WUGTRIO, - Species.FINIZEN, - Species.PALAFIN, - Species.VELUZA, - Species.DONDOZO, - Species.TATSUGIRI, - Species.CLODSIRE, - Species.WALKING_WAKE, - Species.TERAPAGOS, - Species.ALOLA_RAICHU, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_STUNFISK, - Species.HISUI_QWILFISH, - Species.HISUI_SAMUROTT, - Species.HISUI_GOODRA, + [MoveId.SURF]: [ + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.LICKITUNG, + SpeciesId.RHYDON, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.VAPOREON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.SNORLAX, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.POLITOED, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.QWILFISH, + SpeciesId.SNEASEL, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.MANTINE, + SpeciesId.KINGDRA, + SpeciesId.MILTANK, + SpeciesId.SUICUNE, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.AGGRON, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.ZANGOOSE, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.RAYQUAZA, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.BIBAREL, + SpeciesId.RAMPARDOS, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.WEAVILE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.PALKIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.ARCEUS, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.AUDINO, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.BASCULIN, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.STUNFISK, + SpeciesId.DRUDDIGON, + SpeciesId.BOUFFALANT, + SpeciesId.HYDREIGON, + SpeciesId.KELDEO, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.GOODRA, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.SILVALLY, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.TAPU_FINI, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.GRAPPLOCT, + SpeciesId.OBSTAGOON, + SpeciesId.CURSOLA, + SpeciesId.PINCURCHIN, + SpeciesId.EISCUE, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.BASCULEGION, + SpeciesId.OVERQWIL, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.VELUZA, + SpeciesId.DONDOZO, + SpeciesId.TATSUGIRI, + SpeciesId.CLODSIRE, + SpeciesId.WALKING_WAKE, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_RAICHU, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_GOODRA, [ - Species.PALDEA_TAUROS, + SpeciesId.PALDEA_TAUROS, "combat", "aqua", ], - Species.PALDEA_WOOPER, + SpeciesId.PALDEA_WOOPER, ], - [Moves.ICE_BEAM]: [ - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.RATTATA, - Species.RATICATE, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.PSYDUCK, - Species.GOLDUCK, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.SEEL, - Species.DEWGONG, - Species.SHELLDER, - Species.CLOYSTER, - Species.KRABBY, - Species.KINGLER, - Species.CUBONE, - Species.MAROWAK, - Species.LICKITUNG, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.JYNX, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.VAPOREON, - Species.PORYGON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.SNORLAX, - Species.ARTICUNO, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.CHINCHOU, - Species.LANTURN, - Species.MARILL, - Species.AZUMARILL, - Species.POLITOED, - Species.WOOPER, - Species.QUAGSIRE, - Species.SLOWKING, - Species.DUNSPARCE, - Species.QWILFISH, - Species.SNEASEL, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.KINGDRA, - Species.PORYGON2, - Species.SMOOCHUM, - Species.MILTANK, - Species.BLISSEY, - Species.SUICUNE, - Species.TYRANITAR, - Species.LUGIA, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.ZIGZAGOON, - Species.LINOONE, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.WINGULL, - Species.PELIPPER, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.AZURILL, - Species.SKITTY, - Species.DELCATTY, - Species.MAWILE, - Species.AGGRON, - Species.GULPIN, - Species.SWALOT, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.LUNATONE, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.BALTOY, - Species.CLAYDOL, - Species.FEEBAS, - Species.MILOTIC, - Species.CASTFORM, - Species.KECLEON, - Species.DUSKULL, - Species.DUSCLOPS, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.REGICE, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.RAYQUAZA, - Species.DEOXYS, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.BIDOOF, - Species.BIBAREL, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.BUIZEL, - Species.FLOATZEL, - Species.SHELLOS, - Species.GASTRODON, - Species.BUNEARY, - Species.LOPUNNY, - Species.MUNCHLAX, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.GLACEON, - Species.MAMOSWINE, - Species.PORYGON_Z, - Species.DUSKNOIR, - Species.FROSLASS, - Species.MESPRIT, - Species.DIALGA, - Species.PALKIA, - Species.CRESSELIA, - Species.PHIONE, - Species.MANAPHY, - Species.DARKRAI, - Species.ARCEUS, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PANPOUR, - Species.SIMIPOUR, - Species.AUDINO, - Species.BASCULIN, - Species.SIGILYPH, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.DUCKLETT, - Species.SWANNA, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.GOLETT, - Species.GOLURK, - Species.KYUREM, - Species.GENESECT, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BINACLE, - Species.BARBARACLE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.AMAURA, - Species.AURORUS, - Species.SLIGGOO, - Species.GOODRA, - Species.BERGMITE, - Species.AVALUGG, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.CRABOMINABLE, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.DEWPIDER, - Species.ARAQUANID, - Species.GOLISOPOD, - Species.SILVALLY, - Species.BRUXISH, - Species.DRAMPA, - Species.TAPU_FINI, - Species.LUNALA, - Species.PHEROMOSA, - Species.MAGEARNA, - Species.MELMETAL, - Species.INTELEON, - Species.DREDNAW, - Species.CRAMORANT, - Species.BARRASKEWDA, - Species.OBSTAGOON, - Species.CURSOLA, - Species.MR_RIME, - Species.FROSMOTH, - Species.EISCUE, - Species.ARCTOZOLT, - Species.ARCTOVISH, - Species.GLASTRIER, - Species.BASCULEGION, - Species.OVERQWIL, - Species.WIGLETT, - Species.WUGTRIO, - Species.FINIZEN, - Species.PALAFIN, - Species.CETODDLE, - Species.CETITAN, - Species.VELUZA, - Species.DUDUNSPARCE, - Species.SCREAM_TAIL, - Species.IRON_BUNDLE, - Species.IRON_THORNS, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.TERAPAGOS, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_MAROWAK, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, + [MoveId.ICE_BEAM]: [ + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.LICKITUNG, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.JYNX, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.VAPOREON, + SpeciesId.PORYGON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.POLITOED, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.DUNSPARCE, + SpeciesId.QWILFISH, + SpeciesId.SNEASEL, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.KINGDRA, + SpeciesId.PORYGON2, + SpeciesId.SMOOCHUM, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.SUICUNE, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.AZURILL, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.MAWILE, + SpeciesId.AGGRON, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.LUNATONE, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.REGICE, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.RAYQUAZA, + SpeciesId.DEOXYS, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MUNCHLAX, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.GLACEON, + SpeciesId.MAMOSWINE, + SpeciesId.PORYGON_Z, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.MESPRIT, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.CRESSELIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.AUDINO, + SpeciesId.BASCULIN, + SpeciesId.SIGILYPH, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.KYUREM, + SpeciesId.GENESECT, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.CRABOMINABLE, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.GOLISOPOD, + SpeciesId.SILVALLY, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.TAPU_FINI, + SpeciesId.LUNALA, + SpeciesId.PHEROMOSA, + SpeciesId.MAGEARNA, + SpeciesId.MELMETAL, + SpeciesId.INTELEON, + SpeciesId.DREDNAW, + SpeciesId.CRAMORANT, + SpeciesId.BARRASKEWDA, + SpeciesId.OBSTAGOON, + SpeciesId.CURSOLA, + SpeciesId.MR_RIME, + SpeciesId.FROSMOTH, + SpeciesId.EISCUE, + SpeciesId.ARCTOZOLT, + SpeciesId.ARCTOVISH, + SpeciesId.GLASTRIER, + SpeciesId.BASCULEGION, + SpeciesId.OVERQWIL, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.VELUZA, + SpeciesId.DUDUNSPARCE, + SpeciesId.SCREAM_TAIL, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_THORNS, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", ], - Species.HISUI_QWILFISH, - Species.HISUI_SAMUROTT, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, ], - [Moves.BLIZZARD]: [ - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.RATTATA, - Species.RATICATE, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.PSYDUCK, - Species.GOLDUCK, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.SEEL, - Species.DEWGONG, - Species.SHELLDER, - Species.CLOYSTER, - Species.KRABBY, - Species.KINGLER, - Species.CUBONE, - Species.MAROWAK, - Species.LICKITUNG, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.JYNX, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.VAPOREON, - Species.PORYGON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.SNORLAX, - Species.ARTICUNO, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.CHINCHOU, - Species.LANTURN, - Species.MARILL, - Species.AZUMARILL, - Species.POLITOED, - Species.WOOPER, - Species.QUAGSIRE, - Species.SLOWKING, - Species.DUNSPARCE, - Species.QWILFISH, - Species.SNEASEL, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.KINGDRA, - Species.PORYGON2, - Species.SMOOCHUM, - Species.MILTANK, - Species.BLISSEY, - Species.SUICUNE, - Species.TYRANITAR, - Species.LUGIA, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.ZIGZAGOON, - Species.LINOONE, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.WINGULL, - Species.PELIPPER, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.AZURILL, - Species.SKITTY, - Species.DELCATTY, - Species.AGGRON, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.ZANGOOSE, - Species.LUNATONE, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.FEEBAS, - Species.MILOTIC, - Species.CASTFORM, - Species.KECLEON, - Species.DUSKULL, - Species.DUSCLOPS, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.REGICE, - Species.KYOGRE, - Species.RAYQUAZA, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.BIDOOF, - Species.BIBAREL, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.BUIZEL, - Species.FLOATZEL, - Species.SHELLOS, - Species.GASTRODON, - Species.LOPUNNY, - Species.MUNCHLAX, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.GLACEON, - Species.MAMOSWINE, - Species.PORYGON_Z, - Species.DUSKNOIR, - Species.FROSLASS, - Species.MESPRIT, - Species.DIALGA, - Species.PALKIA, - Species.PHIONE, - Species.MANAPHY, - Species.DARKRAI, - Species.ARCEUS, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PANPOUR, - Species.SIMIPOUR, - Species.AUDINO, - Species.BASCULIN, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.KYUREM, - Species.GENESECT, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BINACLE, - Species.BARBARACLE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.AMAURA, - Species.AURORUS, - Species.SLIGGOO, - Species.GOODRA, - Species.BERGMITE, - Species.AVALUGG, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.CRABOMINABLE, - Species.MAREANIE, - Species.TOXAPEX, - Species.DEWPIDER, - Species.ARAQUANID, - Species.GOLISOPOD, - Species.BRUXISH, - Species.DRAMPA, - Species.TAPU_FINI, - Species.LUNALA, - Species.PHEROMOSA, - Species.INTELEON, - Species.DREDNAW, - Species.CRAMORANT, - Species.BARRASKEWDA, - Species.OBSTAGOON, - Species.CURSOLA, - Species.MR_RIME, - Species.FROSMOTH, - Species.EISCUE, - Species.ARCTOZOLT, - Species.ARCTOVISH, - Species.GLASTRIER, - Species.BASCULEGION, - Species.OVERQWIL, - Species.WIGLETT, - Species.WUGTRIO, - Species.FINIZEN, - Species.PALAFIN, - Species.CETODDLE, - Species.CETITAN, - Species.VELUZA, - Species.DUDUNSPARCE, - Species.SCREAM_TAIL, - Species.IRON_BUNDLE, - Species.IRON_THORNS, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.CHIEN_PAO, + [MoveId.BLIZZARD]: [ + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.LICKITUNG, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.JYNX, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.VAPOREON, + SpeciesId.PORYGON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.POLITOED, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.DUNSPARCE, + SpeciesId.QWILFISH, + SpeciesId.SNEASEL, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.KINGDRA, + SpeciesId.PORYGON2, + SpeciesId.SMOOCHUM, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.SUICUNE, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.AZURILL, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.AGGRON, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.ZANGOOSE, + SpeciesId.LUNATONE, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.REGICE, + SpeciesId.KYOGRE, + SpeciesId.RAYQUAZA, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.LOPUNNY, + SpeciesId.MUNCHLAX, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.GLACEON, + SpeciesId.MAMOSWINE, + SpeciesId.PORYGON_Z, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.MESPRIT, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.AUDINO, + SpeciesId.BASCULIN, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.KYUREM, + SpeciesId.GENESECT, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.CRABOMINABLE, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.GOLISOPOD, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.TAPU_FINI, + SpeciesId.LUNALA, + SpeciesId.PHEROMOSA, + SpeciesId.INTELEON, + SpeciesId.DREDNAW, + SpeciesId.CRAMORANT, + SpeciesId.BARRASKEWDA, + SpeciesId.OBSTAGOON, + SpeciesId.CURSOLA, + SpeciesId.MR_RIME, + SpeciesId.FROSMOTH, + SpeciesId.EISCUE, + SpeciesId.ARCTOZOLT, + SpeciesId.ARCTOVISH, + SpeciesId.GLASTRIER, + SpeciesId.BASCULEGION, + SpeciesId.OVERQWIL, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.VELUZA, + SpeciesId.DUDUNSPARCE, + SpeciesId.SCREAM_TAIL, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_THORNS, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.CHIEN_PAO, [ - Species.ROTOM, + SpeciesId.ROTOM, "frost", ], - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_MAROWAK, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", ], - Species.HISUI_QWILFISH, - Species.HISUI_SAMUROTT, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, ], - [Moves.PSYBEAM]: [ - Species.BUTTERFREE, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.PARAS, - Species.VENONAT, - Species.VENOMOTH, - Species.PSYDUCK, - Species.GOLDUCK, - Species.KADABRA, - Species.ALAKAZAM, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.DROWZEE, - Species.HYPNO, - Species.EXEGGCUTE, - Species.KOFFING, - Species.WEEZING, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.PORYGON, - Species.MEWTWO, - Species.MEW, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.SPINARAK, - Species.CHINCHOU, - Species.CLEFFA, - Species.ESPEON, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.REMORAID, - Species.OCTILLERY, - Species.MANTINE, - Species.PORYGON2, - Species.STANTLER, - Species.DUSTOX, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SABLEYE, - Species.MEDITITE, - Species.MEDICHAM, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.BALTOY, - Species.CLAYDOL, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.CHIMECHO, - Species.WORMADAM, - Species.MOTHIM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.MISMAGIUS, - Species.BRONZONG, - Species.MIME_JR, - Species.SPIRITOMB, - Species.FINNEON, - Species.LUMINEON, - Species.PORYGON_Z, - Species.GALLADE, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.CRESSELIA, - Species.MUNNA, - Species.MUSHARNA, - Species.SIGILYPH, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.MELOETTA, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.VIVILLON, - Species.ESPURR, - Species.MEOWSTIC, - Species.INKAY, - Species.MALAMAR, - Species.HOOPA, - Species.ORANGURU, - Species.TAPU_LELE, - Species.MAGEARNA, - Species.ORBEETLE, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.MR_RIME, - Species.INDEEDEE, - Species.CALYREX, - Species.WYRDEER, - Species.ARMAROUGE, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.FARIGIRAF, - Species.SCREAM_TAIL, - Species.FLUTTER_MANE, - Species.IRON_VALIANT, - Species.MUNKIDORI, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_SLOWKING, - Species.HISUI_BRAVIARY, + [MoveId.PSYBEAM]: [ + SpeciesId.BUTTERFREE, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.PARAS, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.EXEGGCUTE, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.PORYGON, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.SPINARAK, + SpeciesId.CHINCHOU, + SpeciesId.CLEFFA, + SpeciesId.ESPEON, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.MANTINE, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.DUSTOX, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SABLEYE, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.CHIMECHO, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.MISMAGIUS, + SpeciesId.BRONZONG, + SpeciesId.MIME_JR, + SpeciesId.SPIRITOMB, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.CRESSELIA, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.SIGILYPH, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.MELOETTA, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.VIVILLON, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.HOOPA, + SpeciesId.ORANGURU, + SpeciesId.TAPU_LELE, + SpeciesId.MAGEARNA, + SpeciesId.ORBEETLE, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.MR_RIME, + SpeciesId.INDEEDEE, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.ARMAROUGE, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.FARIGIRAF, + SpeciesId.SCREAM_TAIL, + SpeciesId.FLUTTER_MANE, + SpeciesId.IRON_VALIANT, + SpeciesId.MUNKIDORI, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_SLOWKING, + SpeciesId.HISUI_BRAVIARY, ], - [Moves.HYPER_BEAM]: [ - Species.VENUSAUR, - Species.CHARIZARD, - Species.BLASTOISE, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEOT, - Species.RATICATE, - Species.FEAROW, - Species.ARBOK, - Species.RAICHU, - Species.SANDSLASH, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.CLEFABLE, - Species.NINETALES, - Species.WIGGLYTUFF, - Species.GOLBAT, - Species.VILEPLUME, - Species.PARASECT, - Species.VENOMOTH, - Species.DUGTRIO, - Species.PERSIAN, - Species.GOLDUCK, - Species.PRIMEAPE, - Species.ARCANINE, - Species.POLIWRATH, - Species.ALAKAZAM, - Species.MACHAMP, - Species.VICTREEBEL, - Species.TENTACRUEL, - Species.GOLEM, - Species.RAPIDASH, - Species.SLOWBRO, - Species.MAGNETON, - Species.DODRIO, - Species.DEWGONG, - Species.MUK, - Species.CLOYSTER, - Species.GENGAR, - Species.HYPNO, - Species.KINGLER, - Species.ELECTRODE, - Species.EXEGGUTOR, - Species.MAROWAK, - Species.LICKITUNG, - Species.WEEZING, - Species.RHYDON, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.SEADRA, - Species.SEAKING, - Species.STARMIE, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.PORYGON, - Species.OMASTAR, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.MEGANIUM, - Species.TYPHLOSION, - Species.FERALIGATR, - Species.FURRET, - Species.NOCTOWL, - Species.LEDIAN, - Species.ARIADOS, - Species.CROBAT, - Species.LANTURN, - Species.TOGETIC, - Species.XATU, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.JUMPLUFF, - Species.SUNFLORA, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.STEELIX, - Species.GRANBULL, - Species.SCIZOR, - Species.HERACROSS, - Species.URSARING, - Species.MAGCARGO, - Species.PILOSWINE, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.HOUNDOOM, - Species.KINGDRA, - Species.DONPHAN, - Species.PORYGON2, - Species.STANTLER, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.SCEPTILE, - Species.BLAZIKEN, - Species.SWAMPERT, - Species.MIGHTYENA, - Species.LINOONE, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.LUDICOLO, - Species.NUZLEAF, - Species.SHIFTRY, - Species.SWELLOW, - Species.PELIPPER, - Species.KIRLIA, - Species.GARDEVOIR, - Species.MASQUERAIN, - Species.BRELOOM, - Species.SLAKING, - Species.NINJASK, - Species.SHEDINJA, - Species.EXPLOUD, - Species.HARIYAMA, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.AGGRON, - Species.MEDICHAM, - Species.MANECTRIC, - Species.SWALOT, - Species.SHARPEDO, - Species.WAILORD, - Species.CAMERUPT, - Species.TORKOAL, - Species.GRUMPIG, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACTURNE, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.LUNATONE, - Species.SOLROCK, - Species.WHISCASH, - Species.CRAWDAUNT, - Species.CLAYDOL, - Species.CRADILY, - Species.ARMALDO, - Species.MILOTIC, - Species.BANETTE, - Species.DUSCLOPS, - Species.TROPIUS, - Species.ABSOL, - Species.GLALIE, - Species.WALREIN, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.TORTERRA, - Species.INFERNAPE, - Species.EMPOLEON, - Species.STARAPTOR, - Species.BIBAREL, - Species.KRICKETUNE, - Species.LUXRAY, - Species.ROSERADE, - Species.RAMPARDOS, - Species.BASTIODON, - Species.WORMADAM, - Species.MOTHIM, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.FLOATZEL, - Species.CHERRIM, - Species.GASTRODON, - Species.AMBIPOM, - Species.DRIFBLIM, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.PURUGLY, - Species.SKUNTANK, - Species.BRONZONG, - Species.SPIRITOMB, - Species.GARCHOMP, - Species.LUCARIO, - Species.HIPPOWDON, - Species.DRAPION, - Species.TOXICROAK, - Species.CARNIVINE, - Species.LUMINEON, - Species.ABOMASNOW, - Species.WEAVILE, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.YANMEGA, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.PORYGON_Z, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.MANAPHY, - Species.DARKRAI, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.SERPERIOR, - Species.EMBOAR, - Species.SAMUROTT, - Species.WATCHOG, - Species.STOUTLAND, - Species.LIEPARD, - Species.SIMISAGE, - Species.SIMISEAR, - Species.SIMIPOUR, - Species.MUSHARNA, - Species.UNFEZANT, - Species.ZEBSTRIKA, - Species.GIGALITH, - Species.SWOOBAT, - Species.EXCADRILL, - Species.AUDINO, - Species.CONKELDURR, - Species.SEISMITOAD, - Species.LEAVANNY, - Species.SCOLIPEDE, - Species.WHIMSICOTT, - Species.LILLIGANT, - Species.KROOKODILE, - Species.DARMANITAN, - Species.CRUSTLE, - Species.SCRAFTY, - Species.SIGILYPH, - Species.COFAGRIGUS, - Species.CARRACOSTA, - Species.ARCHEOPS, - Species.GARBODOR, - Species.ZOROARK, - Species.CINCCINO, - Species.GOTHITELLE, - Species.REUNICLUS, - Species.SWANNA, - Species.VANILLUXE, - Species.SAWSBUCK, - Species.ESCAVALIER, - Species.AMOONGUSS, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.GALVANTULA, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.EELEKTROSS, - Species.BEHEEYEM, - Species.CHANDELURE, - Species.HAXORUS, - Species.BEARTIC, - Species.CRYOGONAL, - Species.ACCELGOR, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLURK, - Species.BISHARP, - Species.BRAVIARY, - Species.MANDIBUZZ, - Species.HYDREIGON, - Species.VOLCARONA, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.KELDEO, - Species.MELOETTA, - Species.GENESECT, - Species.CHESNAUGHT, - Species.DELPHOX, - Species.GRENINJA, - Species.DIGGERSBY, - Species.TALONFLAME, - Species.VIVILLON, - Species.PYROAR, - Species.FLORGES, - Species.GOGOAT, - Species.PANGORO, - Species.MEOWSTIC, - Species.AEGISLASH, - Species.AROMATISSE, - Species.SLURPUFF, - Species.MALAMAR, - Species.BARBARACLE, - Species.DRAGALGE, - Species.CLAWITZER, - Species.HELIOLISK, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.CARBINK, - Species.GOODRA, - Species.KLEFKI, - Species.TREVENANT, - Species.GOURGEIST, - Species.AVALUGG, - Species.NOIVERN, - Species.XERNEAS, - Species.YVELTAL, - Species.ZYGARDE, - Species.DIANCIE, - Species.HOOPA, - Species.VOLCANION, - Species.DECIDUEYE, - Species.INCINEROAR, - Species.PRIMARINA, - Species.GUMSHOOS, - Species.VIKAVOLT, - Species.CRABOMINABLE, - Species.RIBOMBEE, - Species.TOXAPEX, - Species.MUDSDALE, - Species.LURANTIS, - Species.SHIINOTIC, - Species.SALAZZLE, - Species.BEWEAR, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.PASSIMIAN, - Species.GOLISOPOD, - Species.PALOSSAND, - Species.TYPE_NULL, - Species.SILVALLY, - Species.MINIOR, - Species.KOMALA, - Species.TURTONATOR, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.BRUXISH, - Species.DRAMPA, - Species.DHELMISE, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.SOLGALEO, - Species.LUNALA, - Species.PHEROMOSA, - Species.XURKITREE, - Species.CELESTEELA, - Species.GUZZLORD, - Species.NECROZMA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.NAGANADEL, - Species.BLACEPHALON, - Species.ZERAORA, - Species.MELMETAL, - Species.RILLABOOM, - Species.CINDERACE, - Species.INTELEON, - Species.GREEDENT, - Species.CORVIKNIGHT, - Species.ORBEETLE, - Species.THIEVUL, - Species.ELDEGOSS, - Species.DUBWOOL, - Species.DREDNAW, - Species.BOLTUND, - Species.COALOSSAL, - Species.FLAPPLE, - Species.APPLETUN, - Species.SANDACONDA, - Species.CRAMORANT, - Species.BARRASKEWDA, - Species.TOXTRICITY, - Species.CENTISKORCH, - Species.GRAPPLOCT, - Species.POLTEAGEIST, - Species.HATTERENE, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.CURSOLA, - Species.MR_RIME, - Species.RUNERIGUS, - Species.ALCREMIE, - Species.FALINKS, - Species.PINCURCHIN, - Species.FROSMOTH, - Species.STONJOURNER, - Species.EISCUE, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.DURALUDON, - Species.DRAGAPULT, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.ETERNATUS, - Species.ZARUDE, - Species.REGIELEKI, - Species.REGIDRAGO, - Species.GLASTRIER, - Species.SPECTRIER, - Species.CALYREX, - Species.WYRDEER, - Species.KLEAVOR, - Species.URSALUNA, - Species.BASCULEGION, - Species.SNEASLER, - Species.OVERQWIL, - Species.ENAMORUS, - Species.MEOWSCARADA, - Species.SKELEDIRGE, - Species.QUAQUAVAL, - Species.OINKOLOGNE, - Species.PAWMOT, - Species.MAUSHOLD, - Species.DACHSBUN, - Species.ARBOLIVA, - Species.SQUAWKABILLY, - Species.NACLSTACK, - Species.GARGANACL, - Species.BELLIBOLT, - Species.KILOWATTREL, - Species.MABOSSTIFF, - Species.BRAMBLEGHAST, - Species.TOEDSCRUEL, - Species.KLAWF, - Species.SCOVILLAIN, - Species.RABSCA, - Species.ESPATHRA, - Species.WUGTRIO, - Species.BOMBIRDIER, - Species.PALAFIN, - Species.REVAVROOM, - Species.CYCLIZAR, - Species.ORTHWORM, - Species.GLIMMORA, - Species.HOUNDSTONE, - Species.FLAMIGO, - Species.CETODDLE, - Species.CETITAN, - Species.VELUZA, - Species.DONDOZO, - Species.TATSUGIRI, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.BRUTE_BONNET, - Species.FLUTTER_MANE, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_BUNDLE, - Species.IRON_HANDS, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.IRON_THORNS, - Species.BAXCALIBUR, - Species.GHOLDENGO, - Species.WO_CHIEN, - Species.CHIEN_PAO, - Species.TING_LU, - Species.CHI_YU, - Species.ROARING_MOON, - Species.IRON_VALIANT, - Species.KORAIDON, - Species.MIRAIDON, - Species.WALKING_WAKE, - Species.IRON_LEAVES, - Species.DIPPLIN, - Species.SINISTCHA, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.ARCHALUDON, - Species.IRON_CROWN, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSLASH, - Species.ALOLA_NINETALES, - Species.ALOLA_DUGTRIO, - Species.ALOLA_PERSIAN, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWBRO, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_LINOONE, - Species.GALAR_DARMANITAN, - Species.HISUI_ARCANINE, - Species.HISUI_ELECTRODE, - Species.HISUI_TYPHLOSION, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.HISUI_DECIDUEYE, - Species.PALDEA_TAUROS, - Species.BLOODMOON_URSALUNA, + [MoveId.HYPER_BEAM]: [ + SpeciesId.VENUSAUR, + SpeciesId.CHARIZARD, + SpeciesId.BLASTOISE, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEOT, + SpeciesId.RATICATE, + SpeciesId.FEAROW, + SpeciesId.ARBOK, + SpeciesId.RAICHU, + SpeciesId.SANDSLASH, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.CLEFABLE, + SpeciesId.NINETALES, + SpeciesId.WIGGLYTUFF, + SpeciesId.GOLBAT, + SpeciesId.VILEPLUME, + SpeciesId.PARASECT, + SpeciesId.VENOMOTH, + SpeciesId.DUGTRIO, + SpeciesId.PERSIAN, + SpeciesId.GOLDUCK, + SpeciesId.PRIMEAPE, + SpeciesId.ARCANINE, + SpeciesId.POLIWRATH, + SpeciesId.ALAKAZAM, + SpeciesId.MACHAMP, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACRUEL, + SpeciesId.GOLEM, + SpeciesId.RAPIDASH, + SpeciesId.SLOWBRO, + SpeciesId.MAGNETON, + SpeciesId.DODRIO, + SpeciesId.DEWGONG, + SpeciesId.MUK, + SpeciesId.CLOYSTER, + SpeciesId.GENGAR, + SpeciesId.HYPNO, + SpeciesId.KINGLER, + SpeciesId.ELECTRODE, + SpeciesId.EXEGGUTOR, + SpeciesId.MAROWAK, + SpeciesId.LICKITUNG, + SpeciesId.WEEZING, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.SEADRA, + SpeciesId.SEAKING, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.PORYGON, + SpeciesId.OMASTAR, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.MEGANIUM, + SpeciesId.TYPHLOSION, + SpeciesId.FERALIGATR, + SpeciesId.FURRET, + SpeciesId.NOCTOWL, + SpeciesId.LEDIAN, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.LANTURN, + SpeciesId.TOGETIC, + SpeciesId.XATU, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.JUMPLUFF, + SpeciesId.SUNFLORA, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.STEELIX, + SpeciesId.GRANBULL, + SpeciesId.SCIZOR, + SpeciesId.HERACROSS, + SpeciesId.URSARING, + SpeciesId.MAGCARGO, + SpeciesId.PILOSWINE, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.HOUNDOOM, + SpeciesId.KINGDRA, + SpeciesId.DONPHAN, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.SCEPTILE, + SpeciesId.BLAZIKEN, + SpeciesId.SWAMPERT, + SpeciesId.MIGHTYENA, + SpeciesId.LINOONE, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.LUDICOLO, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.SWELLOW, + SpeciesId.PELIPPER, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.MASQUERAIN, + SpeciesId.BRELOOM, + SpeciesId.SLAKING, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.EXPLOUD, + SpeciesId.HARIYAMA, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.AGGRON, + SpeciesId.MEDICHAM, + SpeciesId.MANECTRIC, + SpeciesId.SWALOT, + SpeciesId.SHARPEDO, + SpeciesId.WAILORD, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.GRUMPIG, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACTURNE, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.WHISCASH, + SpeciesId.CRAWDAUNT, + SpeciesId.CLAYDOL, + SpeciesId.CRADILY, + SpeciesId.ARMALDO, + SpeciesId.MILOTIC, + SpeciesId.BANETTE, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.ABSOL, + SpeciesId.GLALIE, + SpeciesId.WALREIN, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TORTERRA, + SpeciesId.INFERNAPE, + SpeciesId.EMPOLEON, + SpeciesId.STARAPTOR, + SpeciesId.BIBAREL, + SpeciesId.KRICKETUNE, + SpeciesId.LUXRAY, + SpeciesId.ROSERADE, + SpeciesId.RAMPARDOS, + SpeciesId.BASTIODON, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.FLOATZEL, + SpeciesId.CHERRIM, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.DRIFBLIM, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.PURUGLY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZONG, + SpeciesId.SPIRITOMB, + SpeciesId.GARCHOMP, + SpeciesId.LUCARIO, + SpeciesId.HIPPOWDON, + SpeciesId.DRAPION, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.LUMINEON, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.SERPERIOR, + SpeciesId.EMBOAR, + SpeciesId.SAMUROTT, + SpeciesId.WATCHOG, + SpeciesId.STOUTLAND, + SpeciesId.LIEPARD, + SpeciesId.SIMISAGE, + SpeciesId.SIMISEAR, + SpeciesId.SIMIPOUR, + SpeciesId.MUSHARNA, + SpeciesId.UNFEZANT, + SpeciesId.ZEBSTRIKA, + SpeciesId.GIGALITH, + SpeciesId.SWOOBAT, + SpeciesId.EXCADRILL, + SpeciesId.AUDINO, + SpeciesId.CONKELDURR, + SpeciesId.SEISMITOAD, + SpeciesId.LEAVANNY, + SpeciesId.SCOLIPEDE, + SpeciesId.WHIMSICOTT, + SpeciesId.LILLIGANT, + SpeciesId.KROOKODILE, + SpeciesId.DARMANITAN, + SpeciesId.CRUSTLE, + SpeciesId.SCRAFTY, + SpeciesId.SIGILYPH, + SpeciesId.COFAGRIGUS, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEOPS, + SpeciesId.GARBODOR, + SpeciesId.ZOROARK, + SpeciesId.CINCCINO, + SpeciesId.GOTHITELLE, + SpeciesId.REUNICLUS, + SpeciesId.SWANNA, + SpeciesId.VANILLUXE, + SpeciesId.SAWSBUCK, + SpeciesId.ESCAVALIER, + SpeciesId.AMOONGUSS, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.GALVANTULA, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.EELEKTROSS, + SpeciesId.BEHEEYEM, + SpeciesId.CHANDELURE, + SpeciesId.HAXORUS, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.ACCELGOR, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLURK, + SpeciesId.BISHARP, + SpeciesId.BRAVIARY, + SpeciesId.MANDIBUZZ, + SpeciesId.HYDREIGON, + SpeciesId.VOLCARONA, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.CHESNAUGHT, + SpeciesId.DELPHOX, + SpeciesId.GRENINJA, + SpeciesId.DIGGERSBY, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.PYROAR, + SpeciesId.FLORGES, + SpeciesId.GOGOAT, + SpeciesId.PANGORO, + SpeciesId.MEOWSTIC, + SpeciesId.AEGISLASH, + SpeciesId.AROMATISSE, + SpeciesId.SLURPUFF, + SpeciesId.MALAMAR, + SpeciesId.BARBARACLE, + SpeciesId.DRAGALGE, + SpeciesId.CLAWITZER, + SpeciesId.HELIOLISK, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.GOODRA, + SpeciesId.KLEFKI, + SpeciesId.TREVENANT, + SpeciesId.GOURGEIST, + SpeciesId.AVALUGG, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.DECIDUEYE, + SpeciesId.INCINEROAR, + SpeciesId.PRIMARINA, + SpeciesId.GUMSHOOS, + SpeciesId.VIKAVOLT, + SpeciesId.CRABOMINABLE, + SpeciesId.RIBOMBEE, + SpeciesId.TOXAPEX, + SpeciesId.MUDSDALE, + SpeciesId.LURANTIS, + SpeciesId.SHIINOTIC, + SpeciesId.SALAZZLE, + SpeciesId.BEWEAR, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.GOLISOPOD, + SpeciesId.PALOSSAND, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.PHEROMOSA, + SpeciesId.XURKITREE, + SpeciesId.CELESTEELA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.NAGANADEL, + SpeciesId.BLACEPHALON, + SpeciesId.ZERAORA, + SpeciesId.MELMETAL, + SpeciesId.RILLABOOM, + SpeciesId.CINDERACE, + SpeciesId.INTELEON, + SpeciesId.GREEDENT, + SpeciesId.CORVIKNIGHT, + SpeciesId.ORBEETLE, + SpeciesId.THIEVUL, + SpeciesId.ELDEGOSS, + SpeciesId.DUBWOOL, + SpeciesId.DREDNAW, + SpeciesId.BOLTUND, + SpeciesId.COALOSSAL, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.SANDACONDA, + SpeciesId.CRAMORANT, + SpeciesId.BARRASKEWDA, + SpeciesId.TOXTRICITY, + SpeciesId.CENTISKORCH, + SpeciesId.GRAPPLOCT, + SpeciesId.POLTEAGEIST, + SpeciesId.HATTERENE, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.ALCREMIE, + SpeciesId.FALINKS, + SpeciesId.PINCURCHIN, + SpeciesId.FROSMOTH, + SpeciesId.STONJOURNER, + SpeciesId.EISCUE, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.DURALUDON, + SpeciesId.DRAGAPULT, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.ETERNATUS, + SpeciesId.ZARUDE, + SpeciesId.REGIELEKI, + SpeciesId.REGIDRAGO, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.BASCULEGION, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.ENAMORUS, + SpeciesId.MEOWSCARADA, + SpeciesId.SKELEDIRGE, + SpeciesId.QUAQUAVAL, + SpeciesId.OINKOLOGNE, + SpeciesId.PAWMOT, + SpeciesId.MAUSHOLD, + SpeciesId.DACHSBUN, + SpeciesId.ARBOLIVA, + SpeciesId.SQUAWKABILLY, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.BELLIBOLT, + SpeciesId.KILOWATTREL, + SpeciesId.MABOSSTIFF, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCRUEL, + SpeciesId.KLAWF, + SpeciesId.SCOVILLAIN, + SpeciesId.RABSCA, + SpeciesId.ESPATHRA, + SpeciesId.WUGTRIO, + SpeciesId.BOMBIRDIER, + SpeciesId.PALAFIN, + SpeciesId.REVAVROOM, + SpeciesId.CYCLIZAR, + SpeciesId.ORTHWORM, + SpeciesId.GLIMMORA, + SpeciesId.HOUNDSTONE, + SpeciesId.FLAMIGO, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.VELUZA, + SpeciesId.DONDOZO, + SpeciesId.TATSUGIRI, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.BRUTE_BONNET, + SpeciesId.FLUTTER_MANE, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_THORNS, + SpeciesId.BAXCALIBUR, + SpeciesId.GHOLDENGO, + SpeciesId.WO_CHIEN, + SpeciesId.CHIEN_PAO, + SpeciesId.TING_LU, + SpeciesId.CHI_YU, + SpeciesId.ROARING_MOON, + SpeciesId.IRON_VALIANT, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.IRON_LEAVES, + SpeciesId.DIPPLIN, + SpeciesId.SINISTCHA, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.ARCHALUDON, + SpeciesId.IRON_CROWN, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.PALDEA_TAUROS, + SpeciesId.BLOODMOON_URSALUNA, [ - Species.BASCULIN, + SpeciesId.BASCULIN, "blue-striped", "red-striped", ] ], - [Moves.LOW_KICK]: [ - Species.SANDSHREW, - Species.SANDSLASH, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.PONYTA, - Species.RAPIDASH, - Species.DODUO, - Species.DODRIO, - Species.DROWZEE, - Species.HYPNO, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.KANGASKHAN, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.KABUTOPS, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.FLAAFFY, - Species.AMPHAROS, - Species.SUDOWOODO, - Species.POLITOED, - Species.AIPOM, - Species.GIRAFARIG, - Species.SNUBBULL, - Species.GRANBULL, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.TYROGUE, - Species.HITMONTOP, - Species.ELEKID, - Species.MAGBY, - Species.TYRANITAR, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.BRELOOM, - Species.VIGOROTH, - Species.SLAKING, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.SABLEYE, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.GRUMPIG, - Species.SPINDA, - Species.CACNEA, - Species.CACTURNE, - Species.ZANGOOSE, - Species.ARMALDO, - Species.KECLEON, - Species.DEOXYS, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.BUIZEL, - Species.FLOATZEL, - Species.AMBIPOM, - Species.BUNEARY, - Species.LOPUNNY, - Species.BONSLY, - Species.RIOLU, - Species.LUCARIO, - Species.CROAGUNK, - Species.TOXICROAK, - Species.ABOMASNOW, - Species.WEAVILE, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.GALLADE, - Species.PIGNITE, - Species.EMBOAR, - Species.PATRAT, - Species.WATCHOG, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.LEAVANNY, - Species.KROKOROK, - Species.KROOKODILE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.CARRACOSTA, - Species.ZOROARK, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.MIENFOO, - Species.MIENSHAO, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.HEATMOR, - Species.KELDEO, - Species.MELOETTA, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROGADIER, - Species.GRENINJA, - Species.DIGGERSBY, - Species.PANCHAM, - Species.PANGORO, - Species.BARBARACLE, - Species.HELIOLISK, - Species.HAWLUCHA, - Species.DECIDUEYE, - Species.INCINEROAR, - Species.MUDBRAY, - Species.MUDSDALE, - Species.BEWEAR, - Species.TSAREENA, - Species.PASSIMIAN, - Species.KOMALA, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.PHEROMOSA, - Species.MARSHADOW, - Species.ZERAORA, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.STONJOURNER, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.URSALUNA, - Species.SNEASLER, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.SPIDOPS, - Species.LOKIX, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.GRAFAIAI, - Species.ESPATHRA, - Species.FLAMIGO, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.KINGAMBIT, - Species.SLITHER_WING, - Species.IRON_HANDS, - Species.IRON_THORNS, - Species.GHOLDENGO, - Species.IRON_VALIANT, - Species.KORAIDON, - Species.WALKING_WAKE, - Species.OKIDOGI, - Species.OGERPON, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_ZAPDOS, - Species.HISUI_TYPHLOSION, - Species.HISUI_SNEASEL, - Species.HISUI_LILLIGANT, - Species.HISUI_ZOROARK, - Species.HISUI_DECIDUEYE, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + [MoveId.LOW_KICK]: [ + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.KANGASKHAN, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.KABUTOPS, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.AIPOM, + SpeciesId.GIRAFARIG, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.TYRANITAR, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.BRELOOM, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.SABLEYE, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.ZANGOOSE, + SpeciesId.ARMALDO, + SpeciesId.KECLEON, + SpeciesId.DEOXYS, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.AMBIPOM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.BONSLY, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.GALLADE, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.LEAVANNY, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.CARRACOSTA, + SpeciesId.ZOROARK, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.HEATMOR, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.DIGGERSBY, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.BARBARACLE, + SpeciesId.HELIOLISK, + SpeciesId.HAWLUCHA, + SpeciesId.DECIDUEYE, + SpeciesId.INCINEROAR, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.BEWEAR, + SpeciesId.TSAREENA, + SpeciesId.PASSIMIAN, + SpeciesId.KOMALA, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.PHEROMOSA, + SpeciesId.MARSHADOW, + SpeciesId.ZERAORA, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.STONJOURNER, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.URSALUNA, + SpeciesId.SNEASLER, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.SPIDOPS, + SpeciesId.LOKIX, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.GRAFAIAI, + SpeciesId.ESPATHRA, + SpeciesId.FLAMIGO, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.KINGAMBIT, + SpeciesId.SLITHER_WING, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_THORNS, + SpeciesId.GHOLDENGO, + SpeciesId.IRON_VALIANT, + SpeciesId.KORAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.OKIDOGI, + SpeciesId.OGERPON, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.COUNTER]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.RATTATA, - Species.RATICATE, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.PARAS, - Species.PARASECT, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.SNORLAX, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.LEDYBA, - Species.LEDIAN, - Species.TOGEPI, - Species.TOGETIC, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.SUDOWOODO, - Species.WOOPER, - Species.QUAGSIRE, - Species.WOBBUFFET, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.SNUBBULL, - Species.GRANBULL, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.DELIBIRD, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.PHANPY, - Species.DONPHAN, - Species.MILTANK, - Species.TYRANITAR, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.TAILLOW, - Species.SWELLOW, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.SABLEYE, - Species.MAWILE, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.GULPIN, - Species.SWALOT, - Species.GRUMPIG, - Species.SPINDA, - Species.CACNEA, - Species.CACTURNE, - Species.ZANGOOSE, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.KECLEON, - Species.DUSKULL, - Species.DUSCLOPS, - Species.ABSOL, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.GROUDON, - Species.DEOXYS, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.SHIELDON, - Species.BASTIODON, - Species.RIOLU, - Species.LUCARIO, - Species.SHELLOS, - Species.GASTRODON, - Species.CROAGUNK, - Species.TOXICROAK, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.SAWK, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.ZORUA, - Species.ZOROARK, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.ACCELGOR, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.LYCANROC, - Species.MUDBRAY, - Species.MUDSDALE, - Species.PASSIMIAN, - Species.PYUKUMUKU, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.BUZZWOLE, - Species.MARSHADOW, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.SKWOVET, - Species.GREEDENT, - Species.WOOLOO, - Species.DUBWOOL, - Species.CHEWTLE, - Species.DREDNAW, - Species.FALINKS, - Species.KUBFU, - Species.URSHIFU, - Species.QUAQUAVAL, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.NYMBLE, - Species.LOKIX, - Species.FINIZEN, - Species.PALAFIN, - Species.TATSUGIRI, - Species.KORAIDON, - Species.OKIDOGI, - Species.OGERPON, - Species.IRON_BOULDER, + [MoveId.COUNTER]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.SNORLAX, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.SUDOWOODO, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.WOBBUFFET, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.DELIBIRD, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.MILTANK, + SpeciesId.TYRANITAR, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.ZANGOOSE, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.KECLEON, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.ABSOL, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.GROUDON, + SpeciesId.DEOXYS, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.SAWK, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.ACCELGOR, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.LYCANROC, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.PASSIMIAN, + SpeciesId.PYUKUMUKU, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.BUZZWOLE, + SpeciesId.MARSHADOW, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.WOOLOO, + SpeciesId.DUBWOOL, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.FALINKS, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.QUAQUAVAL, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.TATSUGIRI, + SpeciesId.KORAIDON, + SpeciesId.OKIDOGI, + SpeciesId.OGERPON, + SpeciesId.IRON_BOULDER, ], - [Moves.STRENGTH]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.RATICATE, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.SEEL, - Species.DEWGONG, - Species.GRIMER, - Species.MUK, - Species.GENGAR, - Species.ONIX, - Species.KRABBY, - Species.KINGLER, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.AERODACTYL, - Species.SNORLAX, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.BAYLEEF, - Species.MEGANIUM, - Species.QUILAVA, - Species.TYPHLOSION, - Species.CROCONAW, - Species.FERALIGATR, - Species.FURRET, - Species.LEDIAN, - Species.FLAAFFY, - Species.AMPHAROS, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.AIPOM, - Species.QUAGSIRE, - Species.SLOWKING, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.HOUNDOOM, - Species.PHANPY, - Species.DONPHAN, - Species.TYROGUE, - Species.HITMONTOP, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.MIGHTYENA, - Species.LINOONE, - Species.LOMBRE, - Species.LUDICOLO, - Species.NUZLEAF, - Species.SHIFTRY, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.NOSEPASS, - Species.DELCATTY, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.GULPIN, - Species.SWALOT, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPINDA, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACTURNE, - Species.ZANGOOSE, - Species.SEVIPER, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.CLAYDOL, - Species.CRADILY, - Species.ARMALDO, - Species.KECLEON, - Species.DUSCLOPS, - Species.TROPIUS, - Species.ABSOL, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PRINPLUP, - Species.EMPOLEON, - Species.BIBAREL, - Species.KRICKETUNE, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.BUIZEL, - Species.FLOATZEL, - Species.GASTRODON, - Species.AMBIPOM, - Species.LOPUNNY, - Species.SKUNTANK, - Species.BRONZONG, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.ABOMASNOW, - Species.WEAVILE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.DARKRAI, - Species.ARCEUS, - Species.SERPERIOR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.SAMUROTT, - Species.WATCHOG, - Species.HERDIER, - Species.STOUTLAND, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.DRILBUR, - Species.EXCADRILL, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SCOLIPEDE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.REUNICLUS, - Species.FERROTHORN, - Species.EELEKTROSS, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.DURANT, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.KELDEO, - Species.MELOETTA, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.LITLEO, - Species.PYROAR, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.BINACLE, - Species.BARBARACLE, - Species.TYRUNT, - Species.TYRANTRUM, - Species.HAWLUCHA, - Species.GOODRA, - Species.PHANTUMP, - Species.TREVENANT, - Species.BERGMITE, - Species.AVALUGG, - Species.ZYGARDE, - Species.VOLCANION, - Species.MUDBRAY, - Species.MUDSDALE, - Species.STUFFUL, - Species.BEWEAR, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.OBSTAGOON, - Species.CUFANT, - Species.COPPERAJAH, - Species.URSALUNA, - Species.ANNIHILAPE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_SLOWKING, - Species.GALAR_LINOONE, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_TYPHLOSION, - Species.HISUI_SAMUROTT, - Species.HISUI_BRAVIARY, - Species.HISUI_AVALUGG, - Species.PALDEA_TAUROS, - Species.BLOODMOON_URSALUNA, + [MoveId.STRENGTH]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.RATICATE, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.FURRET, + SpeciesId.LEDIAN, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.AIPOM, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.HOUNDOOM, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.MIGHTYENA, + SpeciesId.LINOONE, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.NOSEPASS, + SpeciesId.DELCATTY, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPINDA, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACTURNE, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.CLAYDOL, + SpeciesId.CRADILY, + SpeciesId.ARMALDO, + SpeciesId.KECLEON, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.ABSOL, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.BIBAREL, + SpeciesId.KRICKETUNE, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.LOPUNNY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZONG, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.SERPERIOR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.SAMUROTT, + SpeciesId.WATCHOG, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SCOLIPEDE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.REUNICLUS, + SpeciesId.FERROTHORN, + SpeciesId.EELEKTROSS, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.DURANT, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.HAWLUCHA, + SpeciesId.GOODRA, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.ZYGARDE, + SpeciesId.VOLCANION, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.OBSTAGOON, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.URSALUNA, + SpeciesId.ANNIHILAPE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_AVALUGG, + SpeciesId.PALDEA_TAUROS, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.SOLAR_BEAM]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARIZARD, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.ARCANINE, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.PONYTA, - Species.RAPIDASH, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.LICKITUNG, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.MR_MIME, - Species.TAUROS, - Species.LAPRAS, - Species.PORYGON, - Species.SNORLAX, - Species.MOLTRES, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.TYPHLOSION, - Species.SENTRET, - Species.FURRET, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.BELLOSSOM, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.YANMA, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.SNUBBULL, - Species.GRANBULL, - Species.MAGCARGO, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.PORYGON2, - Species.STANTLER, - Species.MILTANK, - Species.BLISSEY, - Species.ENTEI, - Species.HO_OH, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.BLAZIKEN, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.SKITTY, - Species.DELCATTY, - Species.MAWILE, - Species.AGGRON, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.CAMERUPT, - Species.TORKOAL, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SOLROCK, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.CASTFORM, - Species.KECLEON, - Species.TROPIUS, - Species.LATIAS, - Species.LATIOS, - Species.GROUDON, - Species.RAYQUAZA, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.INFERNAPE, - Species.BUDEW, - Species.ROSERADE, - Species.WORMADAM, - Species.MOTHIM, - Species.CHERUBI, - Species.CHERRIM, - Species.AMBIPOM, - Species.BUNEARY, - Species.LOPUNNY, - Species.BRONZOR, - Species.BRONZONG, - Species.MIME_JR, - Species.HAPPINY, - Species.MUNCHLAX, - Species.CARNIVINE, - Species.SNOVER, - Species.ABOMASNOW, - Species.LICKILICKY, - Species.TANGROWTH, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.YANMEGA, - Species.LEAFEON, - Species.PORYGON_Z, - Species.UXIE, - Species.HEATRAN, - Species.CRESSELIA, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.GIGALITH, - Species.AUDINO, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.DARUMAKA, - Species.DARMANITAN, - Species.MARACTUS, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SIGILYPH, - Species.GARBODOR, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FERROSEED, - Species.FERROTHORN, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.CRYOGONAL, - Species.GOLURK, - Species.HEATMOR, - Species.LARVESTA, - Species.VOLCARONA, - Species.VIRIZION, - Species.RESHIRAM, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.TALONFLAME, - Species.VIVILLON, - Species.LITLEO, - Species.PYROAR, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.HELIOLISK, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.NOIBAT, - Species.NOIVERN, - Species.VOLCANION, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.VIKAVOLT, - Species.RIBOMBEE, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.MINIOR, - Species.TURTONATOR, - Species.DRAMPA, - Species.DHELMISE, - Species.TAPU_BULU, - Species.SOLGALEO, - Species.LUNALA, - Species.XURKITREE, - Species.CELESTEELA, - Species.NECROZMA, - Species.MAGEARNA, - Species.BLACEPHALON, - Species.MELMETAL, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.DOTTLER, - Species.ORBEETLE, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.COALOSSAL, - Species.FLAPPLE, - Species.APPLETUN, - Species.CENTISKORCH, - Species.MR_RIME, - Species.ALCREMIE, - Species.DURALUDON, - Species.DRAGAPULT, - Species.ZAMAZENTA, - Species.ETERNATUS, - Species.ZARUDE, - Species.CALYREX, - Species.WYRDEER, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.SKELEDIRGE, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.ARMAROUGE, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.GLIMMORA, - Species.DUDUNSPARCE, - Species.BRUTE_BONNET, - Species.IRON_MOTH, - Species.WO_CHIEN, - Species.KORAIDON, - Species.MIRAIDON, - Species.IRON_LEAVES, - Species.DIPPLIN, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.OGERPON, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.RAGING_BOLT, - Species.TERAPAGOS, - Species.ALOLA_NINETALES, - Species.ALOLA_EXEGGUTOR, - Species.ETERNAL_FLOETTE, - Species.GALAR_MR_MIME, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.HISUI_ARCANINE, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_TYPHLOSION, - Species.HISUI_LILLIGANT, - Species.HISUI_DECIDUEYE, + [MoveId.SOLAR_BEAM]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARIZARD, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.ARCANINE, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.LICKITUNG, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.MR_MIME, + SpeciesId.TAUROS, + SpeciesId.LAPRAS, + SpeciesId.PORYGON, + SpeciesId.SNORLAX, + SpeciesId.MOLTRES, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.TYPHLOSION, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.BELLOSSOM, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.YANMA, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.MAGCARGO, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.ENTEI, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.BLAZIKEN, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.MAWILE, + SpeciesId.AGGRON, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.TROPIUS, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.INFERNAPE, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.AMBIPOM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.MUNCHLAX, + SpeciesId.CARNIVINE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.LICKILICKY, + SpeciesId.TANGROWTH, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.PORYGON_Z, + SpeciesId.UXIE, + SpeciesId.HEATRAN, + SpeciesId.CRESSELIA, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.GIGALITH, + SpeciesId.AUDINO, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.MARACTUS, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SIGILYPH, + SpeciesId.GARBODOR, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.CRYOGONAL, + SpeciesId.GOLURK, + SpeciesId.HEATMOR, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.VIRIZION, + SpeciesId.RESHIRAM, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.HELIOLISK, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.VOLCANION, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.VIKAVOLT, + SpeciesId.RIBOMBEE, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.MINIOR, + SpeciesId.TURTONATOR, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.TAPU_BULU, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.XURKITREE, + SpeciesId.CELESTEELA, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.BLACEPHALON, + SpeciesId.MELMETAL, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.COALOSSAL, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.CENTISKORCH, + SpeciesId.MR_RIME, + SpeciesId.ALCREMIE, + SpeciesId.DURALUDON, + SpeciesId.DRAGAPULT, + SpeciesId.ZAMAZENTA, + SpeciesId.ETERNATUS, + SpeciesId.ZARUDE, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.SKELEDIRGE, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.ARMAROUGE, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.GLIMMORA, + SpeciesId.DUDUNSPARCE, + SpeciesId.BRUTE_BONNET, + SpeciesId.IRON_MOTH, + SpeciesId.WO_CHIEN, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.IRON_LEAVES, + SpeciesId.DIPPLIN, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.OGERPON, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.RAGING_BOLT, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.FIRE_SPIN]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.VULPIX, - Species.NINETALES, - Species.GROWLITHE, - Species.ARCANINE, - Species.PONYTA, - Species.RAPIDASH, - Species.MAGMAR, - Species.FLAREON, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEW, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.SLUGMA, - Species.MAGCARGO, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.MAGBY, - Species.ENTEI, - Species.HO_OH, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.FLYGON, - Species.ALTARIA, - Species.SOLROCK, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.SKUNTANK, - Species.MAGMORTAR, - Species.HEATRAN, - Species.VICTINI, - Species.PANSEAR, - Species.SIMISEAR, - Species.DARUMAKA, - Species.DARMANITAN, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.HEATMOR, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.LITLEO, - Species.PYROAR, - Species.VOLCANION, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.TURTONATOR, - Species.SOLGALEO, - Species.BLACEPHALON, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.CARKOL, - Species.COALOSSAL, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.DRACOZOLT, - Species.ETERNATUS, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.CHARCADET, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.IRON_MOTH, - Species.CHI_YU, - Species.ROARING_MOON, - Species.KORAIDON, - Species.GOUGING_FIRE, - Species.ALOLA_MAROWAK, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_TYPHLOSION, + [MoveId.FIRE_SPIN]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.MAGMAR, + SpeciesId.FLAREON, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.MAGBY, + SpeciesId.ENTEI, + SpeciesId.HO_OH, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.FLYGON, + SpeciesId.ALTARIA, + SpeciesId.SOLROCK, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.SKUNTANK, + SpeciesId.MAGMORTAR, + SpeciesId.HEATRAN, + SpeciesId.VICTINI, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.HEATMOR, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.VOLCANION, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.TURTONATOR, + SpeciesId.SOLGALEO, + SpeciesId.BLACEPHALON, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.DRACOZOLT, + SpeciesId.ETERNATUS, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.CHARCADET, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.IRON_MOTH, + SpeciesId.CHI_YU, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.GOUGING_FIRE, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_TYPHLOSION, [ - Species.PALDEA_TAUROS, + SpeciesId.PALDEA_TAUROS, "blaze", ], ], - [Moves.THUNDERBOLT]: [ - Species.RATTATA, - Species.RATICATE, - Species.PIKACHU, - Species.RAICHU, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.MEOWTH, - Species.PERSIAN, - Species.MANKEY, - Species.PRIMEAPE, - Species.MAGNEMITE, - Species.MAGNETON, - Species.GRIMER, - Species.MUK, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.VOLTORB, - Species.ELECTRODE, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.ELECTABUZZ, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.JOLTEON, - Species.PORYGON, - Species.SNORLAX, - Species.ZAPDOS, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.SENTRET, - Species.FURRET, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.AIPOM, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.DUNSPARCE, - Species.SNUBBULL, - Species.GRANBULL, - Species.PORYGON2, - Species.STANTLER, - Species.ELEKID, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.ZIGZAGOON, - Species.LINOONE, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NOSEPASS, - Species.SKITTY, - Species.DELCATTY, - Species.AGGRON, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ZANGOOSE, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.ABSOL, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.BIDOOF, - Species.BIBAREL, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.PACHIRISU, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.GLAMEOW, - Species.PURUGLY, - Species.MIME_JR, - Species.MUNCHLAX, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.PORYGON_Z, - Species.GALLADE, - Species.PROBOPASS, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.DARKRAI, - Species.ARCEUS, - Species.VICTINI, - Species.PATRAT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.AUDINO, - Species.GARBODOR, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.EMOLGA, - Species.JOLTIK, - Species.GALVANTULA, - Species.FERROSEED, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.STUNFISK, - Species.GOLURK, - Species.THUNDURUS, - Species.ZEKROM, - Species.MELOETTA, - Species.GENESECT, - Species.ESPURR, - Species.MEOWSTIC, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.SKRELP, - Species.DRAGALGE, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.AMAURA, - Species.AURORUS, - Species.DEDENNE, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.XERNEAS, - Species.HOOPA, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.ORANGURU, - Species.SILVALLY, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.DRAMPA, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.SOLGALEO, - Species.LUNALA, - Species.NIHILEGO, - Species.XURKITREE, - Species.MAGEARNA, - Species.NAGANADEL, - Species.ZERAORA, - Species.MELTAN, - Species.MELMETAL, - Species.YAMPER, - Species.BOLTUND, - Species.TOXTRICITY, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.MR_RIME, - Species.PINCURCHIN, - Species.MORPEKO, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DURALUDON, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.REGIELEKI, - Species.WYRDEER, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TADBULB, - Species.BELLIBOLT, - Species.WATTREL, - Species.KILOWATTREL, - Species.CYCLIZAR, - Species.ANNIHILAPE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.SCREAM_TAIL, - Species.FLUTTER_MANE, - Species.SANDY_SHOCKS, - Species.IRON_HANDS, - Species.IRON_THORNS, - Species.GHOLDENGO, - Species.IRON_VALIANT, - Species.MIRAIDON, - Species.ARCHALUDON, - Species.RAGING_BOLT, - Species.TERAPAGOS, - Species.ALOLA_RAICHU, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_MAROWAK, - Species.GALAR_MEOWTH, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, + [MoveId.THUNDERBOLT]: [ + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.ELECTABUZZ, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.JOLTEON, + SpeciesId.PORYGON, + SpeciesId.SNORLAX, + SpeciesId.ZAPDOS, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.AIPOM, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.DUNSPARCE, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.ELEKID, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NOSEPASS, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.AGGRON, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ZANGOOSE, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.ABSOL, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.PACHIRISU, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.MIME_JR, + SpeciesId.MUNCHLAX, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.AUDINO, + SpeciesId.GARBODOR, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.EMOLGA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.STUNFISK, + SpeciesId.GOLURK, + SpeciesId.THUNDURUS, + SpeciesId.ZEKROM, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.DEDENNE, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.XERNEAS, + SpeciesId.HOOPA, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.ORANGURU, + SpeciesId.SILVALLY, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.DRAMPA, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.XURKITREE, + SpeciesId.MAGEARNA, + SpeciesId.NAGANADEL, + SpeciesId.ZERAORA, + SpeciesId.MELTAN, + SpeciesId.MELMETAL, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.TOXTRICITY, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.MR_RIME, + SpeciesId.PINCURCHIN, + SpeciesId.MORPEKO, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DURALUDON, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.REGIELEKI, + SpeciesId.WYRDEER, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.CYCLIZAR, + SpeciesId.ANNIHILAPE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.SCREAM_TAIL, + SpeciesId.FLUTTER_MANE, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_THORNS, + SpeciesId.GHOLDENGO, + SpeciesId.IRON_VALIANT, + SpeciesId.MIRAIDON, + SpeciesId.ARCHALUDON, + SpeciesId.RAGING_BOLT, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, ], - [Moves.THUNDER_WAVE]: [ - Species.RATTATA, - Species.RATICATE, - Species.PIKACHU, - Species.RAICHU, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.MEOWTH, - Species.PERSIAN, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.VOLTORB, - Species.ELECTRODE, - Species.CHANSEY, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.ELECTABUZZ, - Species.GYARADOS, - Species.JOLTEON, - Species.PORYGON, - Species.ZAPDOS, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.AIPOM, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.REMORAID, - Species.OCTILLERY, - Species.PORYGON2, - Species.STANTLER, - Species.ELEKID, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.ZIGZAGOON, - Species.LINOONE, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.VIGOROTH, - Species.SLAKING, - Species.NOSEPASS, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.AGGRON, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.GULPIN, - Species.SWALOT, - Species.SPOINK, - Species.GRUMPIG, - Species.ZANGOOSE, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.CHIMECHO, - Species.ABSOL, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.BIDOOF, - Species.BIBAREL, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.PACHIRISU, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.CHINGLING, - Species.MIME_JR, - Species.HAPPINY, - Species.MAGNEZONE, - Species.ELECTIVIRE, - Species.TOGEKISS, - Species.PORYGON_Z, - Species.GALLADE, - Species.PROBOPASS, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.DARKRAI, - Species.ARCEUS, - Species.VICTINI, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.MUNNA, - Species.MUSHARNA, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.WOOBAT, - Species.SWOOBAT, - Species.AUDINO, - Species.SIGILYPH, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.JOLTIK, - Species.GALVANTULA, - Species.FERROSEED, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.TYNAMO, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.STUNFISK, - Species.PAWNIARD, - Species.BISHARP, - Species.DURANT, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.COBALION, - Species.THUNDURUS, - Species.ZEKROM, - Species.MELOETTA, - Species.GENESECT, - Species.FURFROU, - Species.ESPURR, - Species.MEOWSTIC, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.AMAURA, - Species.AURORUS, - Species.DEDENNE, - Species.KLEFKI, - Species.XERNEAS, - Species.HOOPA, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.MORELULL, - Species.SHIINOTIC, - Species.SALANDIT, - Species.SALAZZLE, - Species.TYPE_NULL, - Species.SILVALLY, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.DRAMPA, - Species.TAPU_KOKO, - Species.SOLGALEO, - Species.LUNALA, - Species.NIHILEGO, - Species.XURKITREE, - Species.NECROZMA, - Species.MAGEARNA, - Species.ZERAORA, - Species.MELTAN, - Species.MELMETAL, - Species.WOOLOO, - Species.DUBWOOL, - Species.YAMPER, - Species.BOLTUND, - Species.TOXTRICITY, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.MR_RIME, - Species.PINCURCHIN, - Species.MORPEKO, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DURALUDON, - Species.DREEPY, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.REGIELEKI, - Species.WYRDEER, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.TADBULB, - Species.BELLIBOLT, - Species.WATTREL, - Species.KILOWATTREL, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.FARIGIRAF, - Species.KINGAMBIT, - Species.SCREAM_TAIL, - Species.FLUTTER_MANE, - Species.SANDY_SHOCKS, - Species.IRON_THORNS, - Species.GHOLDENGO, - Species.IRON_VALIANT, - Species.MIRAIDON, - Species.ARCHALUDON, - Species.RAGING_BOLT, - Species.ALOLA_RAICHU, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_SLOWKING, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_STUNFISK, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, + [MoveId.THUNDER_WAVE]: [ + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.CHANSEY, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.ELECTABUZZ, + SpeciesId.GYARADOS, + SpeciesId.JOLTEON, + SpeciesId.PORYGON, + SpeciesId.ZAPDOS, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.AIPOM, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.ELEKID, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NOSEPASS, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.AGGRON, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.ZANGOOSE, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.PACHIRISU, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.CHINGLING, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.MAGNEZONE, + SpeciesId.ELECTIVIRE, + SpeciesId.TOGEKISS, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.AUDINO, + SpeciesId.SIGILYPH, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.TYNAMO, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.STUNFISK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.DURANT, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.COBALION, + SpeciesId.THUNDURUS, + SpeciesId.ZEKROM, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.FURFROU, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.DEDENNE, + SpeciesId.KLEFKI, + SpeciesId.XERNEAS, + SpeciesId.HOOPA, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.DRAMPA, + SpeciesId.TAPU_KOKO, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.XURKITREE, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.ZERAORA, + SpeciesId.MELTAN, + SpeciesId.MELMETAL, + SpeciesId.WOOLOO, + SpeciesId.DUBWOOL, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.TOXTRICITY, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.MR_RIME, + SpeciesId.PINCURCHIN, + SpeciesId.MORPEKO, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DURALUDON, + SpeciesId.DREEPY, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.REGIELEKI, + SpeciesId.WYRDEER, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.FARIGIRAF, + SpeciesId.KINGAMBIT, + SpeciesId.SCREAM_TAIL, + SpeciesId.FLUTTER_MANE, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_THORNS, + SpeciesId.GHOLDENGO, + SpeciesId.IRON_VALIANT, + SpeciesId.MIRAIDON, + SpeciesId.ARCHALUDON, + SpeciesId.RAGING_BOLT, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, ], - [Moves.THUNDER]: [ - Species.RATTATA, - Species.RATICATE, - Species.PIKACHU, - Species.RAICHU, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.MEOWTH, - Species.PERSIAN, - Species.MANKEY, - Species.PRIMEAPE, - Species.MAGNEMITE, - Species.MAGNETON, - Species.GRIMER, - Species.MUK, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.VOLTORB, - Species.ELECTRODE, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.ELECTABUZZ, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.JOLTEON, - Species.PORYGON, - Species.SNORLAX, - Species.ZAPDOS, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.SENTRET, - Species.FURRET, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.AIPOM, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.DUNSPARCE, - Species.SNUBBULL, - Species.GRANBULL, - Species.PORYGON2, - Species.STANTLER, - Species.ELEKID, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.ZIGZAGOON, - Species.LINOONE, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NOSEPASS, - Species.SKITTY, - Species.DELCATTY, - Species.AGGRON, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ZANGOOSE, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.ABSOL, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.BIDOOF, - Species.BIBAREL, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.PACHIRISU, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.GLAMEOW, - Species.PURUGLY, - Species.MIME_JR, - Species.MUNCHLAX, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.ELECTIVIRE, - Species.PORYGON_Z, - Species.PROBOPASS, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.DARKRAI, - Species.ARCEUS, - Species.VICTINI, - Species.WATCHOG, - Species.STOUTLAND, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.AUDINO, - Species.CINCCINO, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.EMOLGA, - Species.GALVANTULA, - Species.FERROTHORN, - Species.KLINKLANG, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.STUNFISK, - Species.THUNDURUS, - Species.ZEKROM, - Species.MELOETTA, - Species.GENESECT, - Species.AROMATISSE, - Species.SLURPUFF, - Species.DRAGALGE, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.AURORUS, - Species.DEDENNE, - Species.SLIGGOO, - Species.GOODRA, - Species.XERNEAS, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.ORANGURU, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.DRAMPA, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.SOLGALEO, - Species.LUNALA, - Species.NIHILEGO, - Species.XURKITREE, - Species.ZERAORA, - Species.MELMETAL, - Species.YAMPER, - Species.BOLTUND, - Species.TOXTRICITY, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.MR_RIME, - Species.PINCURCHIN, - Species.MORPEKO, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DURALUDON, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.REGIELEKI, - Species.WYRDEER, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TADBULB, - Species.BELLIBOLT, - Species.WATTREL, - Species.KILOWATTREL, - Species.ANNIHILAPE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.SCREAM_TAIL, - Species.FLUTTER_MANE, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_HANDS, - Species.IRON_THORNS, - Species.GHOLDENGO, - Species.MIRAIDON, - Species.ARCHALUDON, - Species.RAGING_BOLT, - Species.TERAPAGOS, - Species.ALOLA_RAICHU, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_MAROWAK, - Species.MAROWAK, - Species.GALAR_MEOWTH, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, + [MoveId.THUNDER]: [ + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.ELECTABUZZ, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.JOLTEON, + SpeciesId.PORYGON, + SpeciesId.SNORLAX, + SpeciesId.ZAPDOS, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.AIPOM, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.DUNSPARCE, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.ELEKID, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NOSEPASS, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.AGGRON, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ZANGOOSE, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.ABSOL, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.PACHIRISU, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.MIME_JR, + SpeciesId.MUNCHLAX, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.ELECTIVIRE, + SpeciesId.PORYGON_Z, + SpeciesId.PROBOPASS, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.WATCHOG, + SpeciesId.STOUTLAND, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.AUDINO, + SpeciesId.CINCCINO, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.EMOLGA, + SpeciesId.GALVANTULA, + SpeciesId.FERROTHORN, + SpeciesId.KLINKLANG, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.STUNFISK, + SpeciesId.THUNDURUS, + SpeciesId.ZEKROM, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.AROMATISSE, + SpeciesId.SLURPUFF, + SpeciesId.DRAGALGE, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.AURORUS, + SpeciesId.DEDENNE, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.XERNEAS, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.ORANGURU, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.DRAMPA, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.XURKITREE, + SpeciesId.ZERAORA, + SpeciesId.MELMETAL, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.TOXTRICITY, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.MR_RIME, + SpeciesId.PINCURCHIN, + SpeciesId.MORPEKO, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DURALUDON, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.REGIELEKI, + SpeciesId.WYRDEER, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.ANNIHILAPE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.SCREAM_TAIL, + SpeciesId.FLUTTER_MANE, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_THORNS, + SpeciesId.GHOLDENGO, + SpeciesId.MIRAIDON, + SpeciesId.ARCHALUDON, + SpeciesId.RAGING_BOLT, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.MAROWAK, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, ], - [Moves.EARTHQUAKE]: [ - Species.VENUSAUR, - Species.CHARIZARD, - Species.BLASTOISE, - Species.EKANS, - Species.ARBOK, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.DIGLETT, - Species.DUGTRIO, - Species.MANKEY, - Species.PRIMEAPE, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.ONIX, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.AERODACTYL, - Species.SNORLAX, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.MEGANIUM, - Species.TYPHLOSION, - Species.FERALIGATR, - Species.SUDOWOODO, - Species.POLITOED, - Species.WOOPER, - Species.QUAGSIRE, - Species.SLOWKING, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.SHUCKLE, - Species.HERACROSS, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.MANTINE, - Species.PHANPY, - Species.DONPHAN, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.MILTANK, - Species.BLISSEY, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.SCEPTILE, - Species.BLAZIKEN, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.VIGOROTH, - Species.SLAKING, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.NOSEPASS, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.SWALOT, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.ALTARIA, - Species.SEVIPER, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.BALTOY, - Species.CLAYDOL, - Species.CRADILY, - Species.ARMALDO, - Species.DUSCLOPS, - Species.TROPIUS, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.RELICANTH, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.TORTERRA, - Species.INFERNAPE, - Species.EMPOLEON, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.GASTRODON, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.MANTYKE, - Species.ABOMASNOW, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.GLISCOR, - Species.MAMOSWINE, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.ARCEUS, - Species.EMBOAR, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.DRILBUR, - Species.EXCADRILL, - Species.CONKELDURR, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SCOLIPEDE, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARMANITAN, - Species.DWEBBLE, - Species.CRUSTLE, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.HAXORUS, - Species.BEARTIC, - Species.STUNFISK, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.BOUFFALANT, - Species.HYDREIGON, - Species.TERRAKION, - Species.LANDORUS, - Species.CHESNAUGHT, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.GOGOAT, - Species.PANGORO, - Species.BINACLE, - Species.BARBARACLE, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AURORUS, - Species.GOODRA, - Species.TREVENANT, - Species.AVALUGG, - Species.ZYGARDE, - Species.VOLCANION, - Species.INCINEROAR, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.WISHIWASHI, - Species.MUDBRAY, - Species.MUDSDALE, - Species.STUFFUL, - Species.BEWEAR, - Species.ORANGURU, - Species.PASSIMIAN, - Species.SANDYGAST, - Species.PALOSSAND, - Species.MINIOR, - Species.KOMALA, - Species.TURTONATOR, - Species.DRAMPA, - Species.DHELMISE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.SOLGALEO, - Species.BUZZWOLE, - Species.CELESTEELA, - Species.GUZZLORD, - Species.NECROZMA, - Species.STAKATAKA, - Species.MELMETAL, - Species.RILLABOOM, - Species.GREEDENT, - Species.DREDNAW, - Species.COALOSSAL, - Species.APPLETUN, - Species.SILICOBRA, - Species.SANDACONDA, - Species.CURSOLA, - Species.RUNERIGUS, - Species.STONJOURNER, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.DRACOVISH, - Species.REGIDRAGO, - Species.WYRDEER, - Species.URSALUNA, - Species.SKELEDIRGE, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.ORTHWORM, - Species.CETODDLE, - Species.CETITAN, - Species.DONDOZO, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.GREAT_TUSK, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_HANDS, - Species.IRON_THORNS, - Species.BAXCALIBUR, - Species.TING_LU, - Species.ROARING_MOON, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.IRON_BOULDER, - Species.TERAPAGOS, + [MoveId.EARTHQUAKE]: [ + SpeciesId.VENUSAUR, + SpeciesId.CHARIZARD, + SpeciesId.BLASTOISE, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.ONIX, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.MEGANIUM, + SpeciesId.TYPHLOSION, + SpeciesId.FERALIGATR, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.MANTINE, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.SCEPTILE, + SpeciesId.BLAZIKEN, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.NOSEPASS, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.SWALOT, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.ALTARIA, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.CRADILY, + SpeciesId.ARMALDO, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.RELICANTH, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.TORTERRA, + SpeciesId.INFERNAPE, + SpeciesId.EMPOLEON, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.GASTRODON, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.MANTYKE, + SpeciesId.ABOMASNOW, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.ARCEUS, + SpeciesId.EMBOAR, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.CONKELDURR, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SCOLIPEDE, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARMANITAN, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.HAXORUS, + SpeciesId.BEARTIC, + SpeciesId.STUNFISK, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.BOUFFALANT, + SpeciesId.HYDREIGON, + SpeciesId.TERRAKION, + SpeciesId.LANDORUS, + SpeciesId.CHESNAUGHT, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.GOGOAT, + SpeciesId.PANGORO, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AURORUS, + SpeciesId.GOODRA, + SpeciesId.TREVENANT, + SpeciesId.AVALUGG, + SpeciesId.ZYGARDE, + SpeciesId.VOLCANION, + SpeciesId.INCINEROAR, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.WISHIWASHI, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.SOLGALEO, + SpeciesId.BUZZWOLE, + SpeciesId.CELESTEELA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.STAKATAKA, + SpeciesId.MELMETAL, + SpeciesId.RILLABOOM, + SpeciesId.GREEDENT, + SpeciesId.DREDNAW, + SpeciesId.COALOSSAL, + SpeciesId.APPLETUN, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.CURSOLA, + SpeciesId.RUNERIGUS, + SpeciesId.STONJOURNER, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.REGIDRAGO, + SpeciesId.WYRDEER, + SpeciesId.URSALUNA, + SpeciesId.SKELEDIRGE, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.ORTHWORM, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.DONDOZO, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.GREAT_TUSK, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_THORNS, + SpeciesId.BAXCALIBUR, + SpeciesId.TING_LU, + SpeciesId.ROARING_MOON, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_BOULDER, + SpeciesId.TERAPAGOS, [ - Species.WORMADAM, + SpeciesId.WORMADAM, "sandy", ], - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_DARMANITAN, - Species.GALAR_YAMASK, - Species.GALAR_STUNFISK, - Species.HISUI_TYPHLOSION, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_YAMASK, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.DIG]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.RATTATA, - Species.RATICATE, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.PARAS, - Species.PARASECT, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.GRIMER, - Species.MUK, - Species.ONIX, - Species.KRABBY, - Species.KINGLER, - Species.CUBONE, - Species.MAROWAK, - Species.LICKITUNG, - Species.RHYHORN, - Species.RHYDON, - Species.KANGASKHAN, - Species.PINSIR, - Species.TAUROS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.KABUTO, - Species.KABUTOPS, - Species.SNORLAX, - Species.MEW, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.AIPOM, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.SLOWKING, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.SHUCKLE, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.PHANPY, - Species.DONPHAN, - Species.STANTLER, - Species.HITMONTOP, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.BRELOOM, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.MAKUHITA, - Species.HARIYAMA, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.NUMEL, - Species.CAMERUPT, - Species.GRUMPIG, - Species.SPINDA, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.ZANGOOSE, - Species.SEVIPER, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.BALTOY, - Species.CLAYDOL, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.KECLEON, - Species.REGIROCK, - Species.GROUDON, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.BIDOOF, - Species.BIBAREL, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.WORMADAM, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.GASTRODON, - Species.AMBIPOM, - Species.BUNEARY, - Species.LOPUNNY, - Species.GLAMEOW, - Species.PURUGLY, - Species.STUNKY, - Species.SKUNTANK, - Species.BONSLY, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.WEAVILE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.ELECTIVIRE, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.HEATRAN, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.DRILBUR, - Species.EXCADRILL, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SCOLIPEDE, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.DEERLING, - Species.SAWSBUCK, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.STUNFISK, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.HEATMOR, - Species.DURANT, - Species.LANDORUS, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.LITLEO, - Species.PYROAR, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.MEOWSTIC, - Species.BINACLE, - Species.BARBARACLE, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.PHANTUMP, - Species.TREVENANT, - Species.ZYGARDE, - Species.VOLCANION, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.SKWOVET, - Species.GREEDENT, - Species.NICKIT, - Species.THIEVUL, - Species.DREDNAW, - Species.YAMPER, - Species.BOLTUND, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.SILICOBRA, - Species.SANDACONDA, - Species.GRAPPLOCT, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.CURSOLA, - Species.CUFANT, - Species.COPPERAJAH, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.WYRDEER, - Species.URSALUNA, - Species.SNEASLER, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.LECHONK, - Species.OINKOLOGNE, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.FIDOUGH, - Species.DACHSBUN, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.SHROODLE, - Species.GRAFAIAI, - Species.KLAWF, - Species.RELLOR, - Species.RABSCA, - Species.WIGLETT, - Species.WUGTRIO, - Species.ORTHWORM, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.IRON_THORNS, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.TING_LU, - Species.ROARING_MOON, - Species.KORAIDON, - Species.OKIDOGI, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_MAROWAK, - Species.GALAR_MEOWTH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.GALAR_STUNFISK, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_TYPHLOSION, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_AVALUGG, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + [MoveId.DIG]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.ONIX, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.LICKITUNG, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.KANGASKHAN, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.SNORLAX, + SpeciesId.MEW, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.AIPOM, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.SLOWKING, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.STANTLER, + SpeciesId.HITMONTOP, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.BRELOOM, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.KECLEON, + SpeciesId.REGIROCK, + SpeciesId.GROUDON, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.WORMADAM, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BONSLY, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.WEAVILE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.ELECTIVIRE, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.HEATRAN, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SCOLIPEDE, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.STUNFISK, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.LANDORUS, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.MEOWSTIC, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.ZYGARDE, + SpeciesId.VOLCANION, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.DREDNAW, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.GRAPPLOCT, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.WYRDEER, + SpeciesId.URSALUNA, + SpeciesId.SNEASLER, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.KLAWF, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.ORTHWORM, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.IRON_THORNS, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.TING_LU, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.OKIDOGI, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_AVALUGG, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.TOXIC]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.SEEL, - Species.DEWGONG, - Species.GRIMER, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.ONIX, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.VOLTORB, - Species.ELECTRODE, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.PORYGON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.YANMA, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.KINGDRA, - Species.PHANPY, - Species.DONPHAN, - Species.PORYGON2, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.NOSEPASS, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.FEEBAS, - Species.MILOTIC, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.TROPIUS, - Species.CHIMECHO, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.BIDOOF, - Species.BIBAREL, - Species.KRICKETUNE, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.BUDEW, - Species.ROSERADE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.WORMADAM, - Species.MOTHIM, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.CHERUBI, - Species.CHERRIM, - Species.SHELLOS, - Species.GASTRODON, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.STUNKY, - Species.SKUNTANK, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.MIME_JR, - Species.HAPPINY, - Species.CHATOT, - Species.SPIRITOMB, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.CARNIVINE, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.YANMEGA, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.PORYGON_Z, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.PHIONE, - Species.MANAPHY, - Species.DARKRAI, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.MUNNA, - Species.MUSHARNA, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.WOOBAT, - Species.SWOOBAT, - Species.DRILBUR, - Species.EXCADRILL, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.BASCULIN, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.MARACTUS, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.TRUBBISH, - Species.GARBODOR, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.DUCKLETT, - Species.SWANNA, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.JOLTIK, - Species.GALVANTULA, - Species.FERROSEED, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.SHELMET, - Species.ACCELGOR, - Species.STUNFISK, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.DURANT, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.KELDEO, - Species.MELOETTA, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.LITLEO, - Species.PYROAR, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.ESPURR, - Species.MEOWSTIC, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.CARBINK, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.BERGMITE, - Species.AVALUGG, - Species.NOIBAT, - Species.NOIVERN, - Species.XERNEAS, - Species.YVELTAL, - Species.ZYGARDE, - Species.DIANCIE, - Species.HOOPA, - Species.VOLCANION, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.MUDBRAY, - Species.MUDSDALE, - Species.DEWPIDER, - Species.ARAQUANID, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.SALANDIT, - Species.SALAZZLE, - Species.STUFFUL, - Species.BEWEAR, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.PASSIMIAN, - Species.WIMPOD, - Species.GOLISOPOD, - Species.SANDYGAST, - Species.PALOSSAND, - Species.PYUKUMUKU, - Species.TYPE_NULL, - Species.SILVALLY, - Species.MINIOR, - Species.KOMALA, - Species.TURTONATOR, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.BRUXISH, - Species.DRAMPA, - Species.DHELMISE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.SOLGALEO, - Species.LUNALA, - Species.NIHILEGO, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.XURKITREE, - Species.CELESTEELA, - Species.KARTANA, - Species.GUZZLORD, - Species.NECROZMA, - Species.MARSHADOW, - Species.POIPOLE, - Species.NAGANADEL, - Species.STAKATAKA, - Species.BLACEPHALON, - Species.ZERAORA, - Species.MELTAN, - Species.MELMETAL, - Species.TOXTRICITY, - Species.ETERNATUS, - Species.SNEASLER, - Species.OVERQWIL, - Species.BELLIBOLT, - Species.SHROODLE, - Species.GRAFAIAI, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.VAROOM, - Species.REVAVROOM, - Species.GLIMMET, - Species.GLIMMORA, - Species.CLODSIRE, - Species.DUDUNSPARCE, - Species.IRON_MOTH, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.TERAPAGOS, - Species.PECHARUNT, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.ETERNAL_FLOETTE, - Species.GALAR_SLOWBRO, - Species.GALAR_WEEZING, - Species.GALAR_SLOWKING, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.PALDEA_WOOPER, + [MoveId.TOXIC]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.PORYGON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.YANMA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.KINGDRA, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.NOSEPASS, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.KRICKETUNE, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.CHATOT, + SpeciesId.SPIRITOMB, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.BASCULIN, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.MARACTUS, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.STUNFISK, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.PYUKUMUKU, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.XURKITREE, + SpeciesId.CELESTEELA, + SpeciesId.KARTANA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MARSHADOW, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.STAKATAKA, + SpeciesId.BLACEPHALON, + SpeciesId.ZERAORA, + SpeciesId.MELTAN, + SpeciesId.MELMETAL, + SpeciesId.TOXTRICITY, + SpeciesId.ETERNATUS, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.BELLIBOLT, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.CLODSIRE, + SpeciesId.DUDUNSPARCE, + SpeciesId.IRON_MOTH, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.TERAPAGOS, + SpeciesId.PECHARUNT, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_SLOWKING, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.PALDEA_WOOPER, ], - [Moves.PSYCHIC]: [ - Species.BUTTERFREE, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.VENONAT, - Species.VENOMOTH, - Species.PSYDUCK, - Species.GOLDUCK, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CHANSEY, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.LAPRAS, - Species.PORYGON, - Species.SNORLAX, - Species.MEWTWO, - Species.MEW, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.SPINARAK, - Species.ARIADOS, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.POLITOED, - Species.YANMA, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.PORYGON2, - Species.STANTLER, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.BLISSEY, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SABLEYE, - Species.MEDITITE, - Species.MEDICHAM, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.LUNATONE, - Species.SOLROCK, - Species.BALTOY, - Species.CLAYDOL, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.CHIMECHO, - Species.GOREBYSS, - Species.METANG, - Species.METAGROSS, - Species.LATIAS, - Species.LATIOS, - Species.JIRACHI, - Species.DEOXYS, - Species.WORMADAM, - Species.MOTHIM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.CHINGLING, - Species.BRONZOR, - Species.BRONZONG, - Species.MIME_JR, - Species.HAPPINY, - Species.SPIRITOMB, - Species.MUNCHLAX, - Species.LUCARIO, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.YANMEGA, - Species.PORYGON_Z, - Species.GALLADE, - Species.DUSKNOIR, - Species.FROSLASS, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.GIRATINA, - Species.CRESSELIA, - Species.MANAPHY, - Species.DARKRAI, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.MUNNA, - Species.MUSHARNA, - Species.WOOBAT, - Species.SWOOBAT, - Species.AUDINO, - Species.WHIMSICOTT, - Species.DARMANITAN, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.GARBODOR, - Species.ZOROARK, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.GOLETT, - Species.GOLURK, - Species.LARVESTA, - Species.VOLCARONA, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.MELOETTA, - Species.GENESECT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.VIVILLON, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.ESPURR, - Species.MEOWSTIC, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.AURORUS, - Species.SYLVEON, - Species.CARBINK, - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.NOIBAT, - Species.NOIVERN, - Species.XERNEAS, - Species.YVELTAL, - Species.DIANCIE, - Species.HOOPA, - Species.PRIMARINA, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.ORANGURU, - Species.SANDYGAST, - Species.PALOSSAND, - Species.MINIOR, - Species.MIMIKYU, - Species.BRUXISH, - Species.TAPU_LELE, - Species.SOLGALEO, - Species.LUNALA, - Species.NIHILEGO, - Species.NECROZMA, - Species.MAGEARNA, - Species.BLACEPHALON, - Species.DOTTLER, - Species.ORBEETLE, - Species.THIEVUL, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.CURSOLA, - Species.MR_RIME, - Species.RUNERIGUS, - Species.ALCREMIE, - Species.INDEEDEE, - Species.SPECTRIER, - Species.CALYREX, - Species.WYRDEER, - Species.ENAMORUS, - Species.ARMAROUGE, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.VELUZA, - Species.FARIGIRAF, - Species.SCREAM_TAIL, - Species.IRON_MOTH, - Species.GHOLDENGO, - Species.CHI_YU, - Species.IRON_VALIANT, - Species.MUNKIDORI, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.ALOLA_RAICHU, - Species.ALOLA_EXEGGUTOR, - Species.ETERNAL_FLOETTE, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_DARMANITAN, - Species.GALAR_YAMASK, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, + [MoveId.PSYCHIC]: [ + SpeciesId.BUTTERFREE, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CHANSEY, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.LAPRAS, + SpeciesId.PORYGON, + SpeciesId.SNORLAX, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.POLITOED, + SpeciesId.YANMA, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.BLISSEY, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SABLEYE, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.CHIMECHO, + SpeciesId.GOREBYSS, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.CHINGLING, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.SPIRITOMB, + SpeciesId.MUNCHLAX, + SpeciesId.LUCARIO, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.AUDINO, + SpeciesId.WHIMSICOTT, + SpeciesId.DARMANITAN, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.GARBODOR, + SpeciesId.ZOROARK, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.VIVILLON, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.CARBINK, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.PRIMARINA, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.ORANGURU, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.MINIOR, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.TAPU_LELE, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.BLACEPHALON, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.THIEVUL, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.CURSOLA, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.ALCREMIE, + SpeciesId.INDEEDEE, + SpeciesId.SPECTRIER, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.ENAMORUS, + SpeciesId.ARMAROUGE, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.VELUZA, + SpeciesId.FARIGIRAF, + SpeciesId.SCREAM_TAIL, + SpeciesId.IRON_MOTH, + SpeciesId.GHOLDENGO, + SpeciesId.CHI_YU, + SpeciesId.IRON_VALIANT, + SpeciesId.MUNKIDORI, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_YAMASK, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, ], - [Moves.AGILITY]: [ - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.SPEAROW, - Species.FEAROW, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.VULPIX, - Species.NINETALES, - Species.ZUBAT, - Species.GOLBAT, - Species.PARAS, - Species.VENONAT, - Species.VENOMOTH, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.GROWLITHE, - Species.ARCANINE, - Species.PONYTA, - Species.RAPIDASH, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.KRABBY, - Species.KINGLER, - Species.VOLTORB, - Species.ELECTRODE, - Species.HITMONCHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARMIE, - Species.SCYTHER, - Species.JOLTEON, - Species.PORYGON, - Species.AERODACTYL, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.FERALIGATR, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.CHINCHOU, - Species.LANTURN, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.AIPOM, - Species.GIRAFARIG, - Species.DUNSPARCE, - Species.GLIGAR, - Species.QWILFISH, - Species.SCIZOR, - Species.SNEASEL, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.KINGDRA, - Species.PORYGON2, - Species.STANTLER, - Species.HITMONTOP, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.SURSKIT, - Species.MASQUERAIN, - Species.NINJASK, - Species.SHEDINJA, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.CARVANHA, - Species.SHARPEDO, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.GOREBYSS, - Species.LUVDISC, - Species.METANG, - Species.METAGROSS, - Species.LATIAS, - Species.LATIOS, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.LUXRAY, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.AMBIPOM, - Species.BUNEARY, - Species.LOPUNNY, - Species.CHATOT, - Species.RIOLU, - Species.LUCARIO, - Species.SKORUPI, - Species.DRAPION, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.WEAVILE, - Species.GLISCOR, - Species.PORYGON_Z, - Species.GALLADE, - Species.ARCEUS, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.SEWADDLE, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.BASCULIN, - Species.ARCHEN, - Species.ARCHEOPS, - Species.ZORUA, - Species.ZOROARK, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.ESCAVALIER, - Species.JOLTIK, - Species.GALVANTULA, - Species.ELGYEM, - Species.BEHEEYEM, - Species.ACCELGOR, - Species.MIENFOO, - Species.MIENSHAO, - Species.RUFFLET, - Species.BRAVIARY, - Species.DURANT, - Species.TORNADUS, - Species.THUNDURUS, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.HAWLUCHA, - Species.DEDENNE, - Species.NOIBAT, - Species.NOIVERN, - Species.VIKAVOLT, - Species.ORICORIO, - Species.RIBOMBEE, - Species.LYCANROC, - Species.SALANDIT, - Species.SALAZZLE, - Species.TOGEDEMARU, - Species.BRUXISH, - Species.TAPU_KOKO, - Species.SOLGALEO, - Species.LUNALA, - Species.PHEROMOSA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.ZERAORA, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.INTELEON, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.ORBEETLE, - Species.NICKIT, - Species.THIEVUL, - Species.WOOLOO, - Species.DUBWOOL, - Species.BOLTUND, - Species.CRAMORANT, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.HATTERENE, - Species.FALINKS, - Species.EISCUE, - Species.MORPEKO, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.ETERNATUS, - Species.REGIELEKI, - Species.SPECTRIER, - Species.CALYREX, - Species.WYRDEER, - Species.KLEAVOR, - Species.BASCULEGION, - Species.SNEASLER, - Species.OVERQWIL, - Species.ENAMORUS, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.QUAQUAVAL, - Species.NYMBLE, - Species.LOKIX, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.FIDOUGH, - Species.DACHSBUN, - Species.WATTREL, - Species.KILOWATTREL, - Species.FLITTLE, - Species.ESPATHRA, - Species.WIGLETT, - Species.WUGTRIO, - Species.FINIZEN, - Species.PALAFIN, - Species.CYCLIZAR, - Species.FLAMIGO, - Species.VELUZA, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.IRON_BUNDLE, - Species.IRON_MOTH, - Species.IRON_VALIANT, - Species.KORAIDON, - Species.MIRAIDON, - Species.WALKING_WAKE, - Species.IRON_LEAVES, - Species.FEZANDIPITI, - Species.IRON_BOULDER, + [MoveId.AGILITY]: [ + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.PARAS, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.HITMONCHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARMIE, + SpeciesId.SCYTHER, + SpeciesId.JOLTEON, + SpeciesId.PORYGON, + SpeciesId.AERODACTYL, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.FERALIGATR, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.AIPOM, + SpeciesId.GIRAFARIG, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.SNEASEL, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.KINGDRA, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.HITMONTOP, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.GOREBYSS, + SpeciesId.LUVDISC, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.LUXRAY, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.AMBIPOM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.CHATOT, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.WEAVILE, + SpeciesId.GLISCOR, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.ARCEUS, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.SEWADDLE, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.BASCULIN, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.ESCAVALIER, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.ACCELGOR, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.DURANT, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.VIKAVOLT, + SpeciesId.ORICORIO, + SpeciesId.RIBOMBEE, + SpeciesId.LYCANROC, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.TOGEDEMARU, + SpeciesId.BRUXISH, + SpeciesId.TAPU_KOKO, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.PHEROMOSA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.ZERAORA, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.INTELEON, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.ORBEETLE, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.WOOLOO, + SpeciesId.DUBWOOL, + SpeciesId.BOLTUND, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.HATTERENE, + SpeciesId.FALINKS, + SpeciesId.EISCUE, + SpeciesId.MORPEKO, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.ETERNATUS, + SpeciesId.REGIELEKI, + SpeciesId.SPECTRIER, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.KLEAVOR, + SpeciesId.BASCULEGION, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.ENAMORUS, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.QUAQUAVAL, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.CYCLIZAR, + SpeciesId.FLAMIGO, + SpeciesId.VELUZA, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_VALIANT, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.IRON_LEAVES, + SpeciesId.FEZANDIPITI, + SpeciesId.IRON_BOULDER, [ - Species.DEOXYS, + SpeciesId.DEOXYS, "speed", ], - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, ], - [Moves.NIGHT_SHADE]: [ - Species.CLEFAIRY, - Species.CLEFABLE, - Species.NINETALES, - Species.VENONAT, - Species.VENOMOTH, - Species.KADABRA, - Species.ALAKAZAM, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.MEWTWO, - Species.MEW, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.SPINARAK, - Species.ARIADOS, - Species.NATU, - Species.XATU, - Species.MURKROW, - Species.MISDREAVUS, - Species.GARDEVOIR, - Species.SABLEYE, - Species.MEDITITE, - Species.MEDICHAM, - Species.SPOINK, - Species.GRUMPIG, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.DEOXYS, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.BRONZONG, - Species.CHATOT, - Species.SPIRITOMB, - Species.GALLADE, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.DARKRAI, - Species.YAMASK, - Species.COFAGRIGUS, - Species.ZORUA, - Species.ZOROARK, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.FRILLISH, - Species.JELLICENT, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.GOLETT, - Species.GOLURK, - Species.DELPHOX, - Species.PHANTUMP, - Species.TREVENANT, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.SANDYGAST, - Species.PALOSSAND, - Species.MIMIKYU, - Species.LUNALA, - Species.BLACEPHALON, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.CURSOLA, - Species.RUNERIGUS, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.SPECTRIER, - Species.BASCULEGION, - Species.SKELEDIRGE, - Species.CHARCADET, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.ESPATHRA, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.ANNIHILAPE, - Species.FARIGIRAF, - Species.FLUTTER_MANE, - Species.GIMMIGHOUL, - Species.GHOLDENGO, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.MUNKIDORI, - Species.PECHARUNT, - Species.GALAR_CORSOLA, - Species.GALAR_YAMASK, + [MoveId.NIGHT_SHADE]: [ + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.NINETALES, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MURKROW, + SpeciesId.MISDREAVUS, + SpeciesId.GARDEVOIR, + SpeciesId.SABLEYE, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.DEOXYS, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.BRONZONG, + SpeciesId.CHATOT, + SpeciesId.SPIRITOMB, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.DARKRAI, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.DELPHOX, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.MIMIKYU, + SpeciesId.LUNALA, + SpeciesId.BLACEPHALON, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.CURSOLA, + SpeciesId.RUNERIGUS, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.SPECTRIER, + SpeciesId.BASCULEGION, + SpeciesId.SKELEDIRGE, + SpeciesId.CHARCADET, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.ESPATHRA, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.ANNIHILAPE, + SpeciesId.FARIGIRAF, + SpeciesId.FLUTTER_MANE, + SpeciesId.GIMMIGHOUL, + SpeciesId.GHOLDENGO, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.MUNKIDORI, + SpeciesId.PECHARUNT, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_YAMASK, [ - Species.CALYREX, + SpeciesId.CALYREX, "shadow", ], - Species.HISUI_TYPHLOSION, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.HISUI_DECIDUEYE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.SCREECH]: [ - Species.RATTATA, - Species.EKANS, - Species.ARBOK, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.GOLBAT, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.MAGNEMITE, - Species.MAGNETON, - Species.GRIMER, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.ONIX, - Species.VOLTORB, - Species.ELECTRODE, - Species.CUBONE, - Species.MAROWAK, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.KABUTO, - Species.KABUTOPS, - Species.SNORLAX, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.CHINCHOU, - Species.LANTURN, - Species.IGGLYBUFF, - Species.MAREEP, - Species.POLITOED, - Species.AIPOM, - Species.YANMA, - Species.UMBREON, - Species.MURKROW, - Species.MISDREAVUS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNEASEL, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.ELEKID, - Species.MAGBY, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.SHIFTRY, - Species.NINJASK, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.CARVANHA, - Species.SHARPEDO, - Species.VIBRAVA, - Species.FLYGON, - Species.SEVIPER, - Species.ANORITH, - Species.ARMALDO, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.HUNTAIL, - Species.KRICKETUNE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.VESPIQUEN, - Species.AMBIPOM, - Species.STUNKY, - Species.SKUNTANK, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.WEAVILE, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.YANMEGA, - Species.GLISCOR, - Species.OSHAWOTT, - Species.PATRAT, - Species.PURRLOIN, - Species.LIEPARD, - Species.BLITZLE, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.MARACTUS, - Species.GARBODOR, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.JOLTIK, - Species.GALVANTULA, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.ELGYEM, - Species.BEHEEYEM, - Species.PAWNIARD, - Species.BISHARP, - Species.DURANT, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.GENESECT, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.BINACLE, - Species.BARBARACLE, - Species.NOIBAT, - Species.NOIVERN, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.WIMPOD, - Species.GOLISOPOD, - Species.PYUKUMUKU, - Species.MIMIKYU, - Species.BRUXISH, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.KARTANA, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.CORVIKNIGHT, - Species.NICKIT, - Species.THIEVUL, - Species.SILICOBRA, - Species.SANDACONDA, - Species.TOXTRICITY, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.CURSOLA, - Species.MR_RIME, - Species.FALINKS, - Species.CUFANT, - Species.COPPERAJAH, - Species.DURALUDON, - Species.ETERNATUS, - Species.REGIELEKI, - Species.SNEASLER, - Species.NYMBLE, - Species.LOKIX, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.VAROOM, - Species.REVAVROOM, - Species.ANNIHILAPE, - Species.DUDUNSPARCE, - Species.SANDY_SHOCKS, - Species.IRON_MOTH, - Species.IRON_THORNS, - Species.KORAIDON, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_MAROWAK, - Species.GALAR_MEOWTH, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_ZAPDOS, - Species.GALAR_CORSOLA, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_STUNFISK, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_SNEASEL, + [MoveId.SCREECH]: [ + SpeciesId.RATTATA, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.GOLBAT, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.ONIX, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.SNORLAX, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.IGGLYBUFF, + SpeciesId.MAREEP, + SpeciesId.POLITOED, + SpeciesId.AIPOM, + SpeciesId.YANMA, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.MISDREAVUS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNEASEL, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.SHIFTRY, + SpeciesId.NINJASK, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.SEVIPER, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.HUNTAIL, + SpeciesId.KRICKETUNE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.VESPIQUEN, + SpeciesId.AMBIPOM, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.WEAVILE, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.YANMEGA, + SpeciesId.GLISCOR, + SpeciesId.OSHAWOTT, + SpeciesId.PATRAT, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.BLITZLE, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.MARACTUS, + SpeciesId.GARBODOR, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.DURANT, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.GENESECT, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.PYUKUMUKU, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.KARTANA, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.CORVIKNIGHT, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.TOXTRICITY, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.MR_RIME, + SpeciesId.FALINKS, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DURALUDON, + SpeciesId.ETERNATUS, + SpeciesId.REGIELEKI, + SpeciesId.SNEASLER, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.ANNIHILAPE, + SpeciesId.DUDUNSPARCE, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_THORNS, + SpeciesId.KORAIDON, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_SNEASEL, ], - [Moves.DOUBLE_TEAM]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.SEEL, - Species.DEWGONG, - Species.GRIMER, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.ONIX, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.VOLTORB, - Species.ELECTRODE, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.PORYGON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.YANMA, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.KINGDRA, - Species.PHANPY, - Species.DONPHAN, - Species.PORYGON2, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.NOSEPASS, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.FEEBAS, - Species.MILOTIC, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.TROPIUS, - Species.CHIMECHO, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.BIDOOF, - Species.BIBAREL, - Species.KRICKETUNE, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.BUDEW, - Species.ROSERADE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.WORMADAM, - Species.MOTHIM, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.CHERUBI, - Species.CHERRIM, - Species.SHELLOS, - Species.GASTRODON, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.STUNKY, - Species.SKUNTANK, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.MIME_JR, - Species.HAPPINY, - Species.CHATOT, - Species.SPIRITOMB, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.CARNIVINE, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.YANMEGA, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.PORYGON_Z, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.PHIONE, - Species.MANAPHY, - Species.DARKRAI, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.MUNNA, - Species.MUSHARNA, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.WOOBAT, - Species.SWOOBAT, - Species.DRILBUR, - Species.EXCADRILL, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.BASCULIN, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.MARACTUS, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.TRUBBISH, - Species.GARBODOR, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.DUCKLETT, - Species.SWANNA, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.JOLTIK, - Species.GALVANTULA, - Species.FERROSEED, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.SHELMET, - Species.ACCELGOR, - Species.STUNFISK, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.DURANT, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.KELDEO, - Species.MELOETTA, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.LITLEO, - Species.PYROAR, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.ESPURR, - Species.MEOWSTIC, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.CARBINK, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.BERGMITE, - Species.AVALUGG, - Species.NOIBAT, - Species.NOIVERN, - Species.XERNEAS, - Species.YVELTAL, - Species.ZYGARDE, - Species.DIANCIE, - Species.HOOPA, - Species.VOLCANION, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.MUDBRAY, - Species.MUDSDALE, - Species.DEWPIDER, - Species.ARAQUANID, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.SALANDIT, - Species.SALAZZLE, - Species.STUFFUL, - Species.BEWEAR, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.PASSIMIAN, - Species.WIMPOD, - Species.GOLISOPOD, - Species.SANDYGAST, - Species.PALOSSAND, - Species.PYUKUMUKU, - Species.TYPE_NULL, - Species.SILVALLY, - Species.MINIOR, - Species.KOMALA, - Species.TURTONATOR, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.BRUXISH, - Species.DRAMPA, - Species.DHELMISE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_FINI, - Species.SOLGALEO, - Species.LUNALA, - Species.NIHILEGO, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.XURKITREE, - Species.CELESTEELA, - Species.KARTANA, - Species.GUZZLORD, - Species.NECROZMA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.NAGANADEL, - Species.BLACEPHALON, - Species.ZERAORA, - Species.MELTAN, - Species.MELMETAL, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.SKWOVET, - Species.GREEDENT, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.DOTTLER, - Species.ORBEETLE, - Species.NICKIT, - Species.THIEVUL, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.WOOLOO, - Species.DUBWOOL, - Species.CHEWTLE, - Species.DREDNAW, - Species.YAMPER, - Species.BOLTUND, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.FLAPPLE, - Species.APPLETUN, - Species.SILICOBRA, - Species.SANDACONDA, - Species.CRAMORANT, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.TOXEL, - Species.TOXTRICITY, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.CURSOLA, - Species.SIRFETCHD, - Species.MR_RIME, - Species.RUNERIGUS, - Species.MILCERY, - Species.ALCREMIE, - Species.FALINKS, - Species.PINCURCHIN, - Species.SNOM, - Species.FROSMOTH, - Species.STONJOURNER, - Species.EISCUE, - Species.INDEEDEE, - Species.MORPEKO, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.DURALUDON, - Species.DREEPY, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.ETERNATUS, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.REGIELEKI, - Species.REGIDRAGO, - Species.GLASTRIER, - Species.SPECTRIER, - Species.CALYREX, - Species.WYRDEER, - Species.KLEAVOR, - Species.URSALUNA, - Species.BASCULEGION, - Species.SNEASLER, - Species.OVERQWIL, - Species.ENAMORUS, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.LECHONK, - Species.OINKOLOGNE, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.NYMBLE, - Species.LOKIX, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.FIDOUGH, - Species.DACHSBUN, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.SQUAWKABILLY, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.CHARCADET, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.TADBULB, - Species.BELLIBOLT, - Species.WATTREL, - Species.KILOWATTREL, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.SHROODLE, - Species.GRAFAIAI, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.KLAWF, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.RELLOR, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.WIGLETT, - Species.WUGTRIO, - Species.BOMBIRDIER, - Species.FINIZEN, - Species.PALAFIN, - Species.VAROOM, - Species.REVAVROOM, - Species.CYCLIZAR, - Species.ORTHWORM, - Species.GLIMMET, - Species.GLIMMORA, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.FLAMIGO, - Species.CETODDLE, - Species.CETITAN, - Species.VELUZA, - Species.DONDOZO, - Species.TATSUGIRI, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.BRUTE_BONNET, - Species.FLUTTER_MANE, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_BUNDLE, - Species.IRON_HANDS, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.IRON_THORNS, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.GIMMIGHOUL, - Species.GHOLDENGO, - Species.WO_CHIEN, - Species.CHIEN_PAO, - Species.TING_LU, - Species.CHI_YU, - Species.ROARING_MOON, - Species.IRON_VALIANT, - Species.KORAIDON, - Species.MIRAIDON, - Species.WALKING_WAKE, - Species.IRON_LEAVES, - Species.DIPPLIN, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.OGERPON, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.TERAPAGOS, - Species.PECHARUNT, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.ETERNAL_FLOETTE, - Species.GALAR_MEOWTH, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_FARFETCHD, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.GALAR_YAMASK, - Species.GALAR_STUNFISK, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_TYPHLOSION, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.HISUI_DECIDUEYE, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + [MoveId.DOUBLE_TEAM]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.PORYGON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.YANMA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.KINGDRA, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.NOSEPASS, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.KRICKETUNE, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.CHATOT, + SpeciesId.SPIRITOMB, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.BASCULIN, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.MARACTUS, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.STUNFISK, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.PYUKUMUKU, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_FINI, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.XURKITREE, + SpeciesId.CELESTEELA, + SpeciesId.KARTANA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.NAGANADEL, + SpeciesId.BLACEPHALON, + SpeciesId.ZERAORA, + SpeciesId.MELTAN, + SpeciesId.MELMETAL, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.WOOLOO, + SpeciesId.DUBWOOL, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.TOXEL, + SpeciesId.TOXTRICITY, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.SIRFETCHD, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.MILCERY, + SpeciesId.ALCREMIE, + SpeciesId.FALINKS, + SpeciesId.PINCURCHIN, + SpeciesId.SNOM, + SpeciesId.FROSMOTH, + SpeciesId.STONJOURNER, + SpeciesId.EISCUE, + SpeciesId.INDEEDEE, + SpeciesId.MORPEKO, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.DURALUDON, + SpeciesId.DREEPY, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.ETERNATUS, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.REGIELEKI, + SpeciesId.REGIDRAGO, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.BASCULEGION, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.ENAMORUS, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.SQUAWKABILLY, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.CHARCADET, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.KLAWF, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.BOMBIRDIER, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.CYCLIZAR, + SpeciesId.ORTHWORM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.FLAMIGO, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.VELUZA, + SpeciesId.DONDOZO, + SpeciesId.TATSUGIRI, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.BRUTE_BONNET, + SpeciesId.FLUTTER_MANE, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_THORNS, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.GIMMIGHOUL, + SpeciesId.GHOLDENGO, + SpeciesId.WO_CHIEN, + SpeciesId.CHIEN_PAO, + SpeciesId.TING_LU, + SpeciesId.CHI_YU, + SpeciesId.ROARING_MOON, + SpeciesId.IRON_VALIANT, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.IRON_LEAVES, + SpeciesId.DIPPLIN, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.OGERPON, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.TERAPAGOS, + SpeciesId.PECHARUNT, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_YAMASK, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.CONFUSE_RAY]: [ - Species.VULPIX, - Species.NINETALES, - Species.ZUBAT, - Species.GOLBAT, - Species.VENONAT, - Species.VENOMOTH, - Species.PSYDUCK, - Species.GOLDUCK, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.MAGNEMITE, - Species.MAGNETON, - Species.GRIMER, - Species.MUK, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.HYPNO, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.MAGMAR, - Species.LAPRAS, - Species.KABUTO, - Species.KABUTOPS, - Species.MEWTWO, - Species.MEW, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.CROBAT, - Species.CHINCHOU, - Species.LANTURN, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.CORSOLA, - Species.MANTINE, - Species.STANTLER, - Species.MAGBY, - Species.SHIFTRY, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SHEDINJA, - Species.SABLEYE, - Species.VOLBEAT, - Species.ILLUMISE, - Species.SPOINK, - Species.GRUMPIG, - Species.LILEEP, - Species.CRADILY, - Species.FEEBAS, - Species.MILOTIC, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.JIRACHI, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.VESPIQUEN, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.BRONZOR, - Species.BRONZONG, - Species.MIME_JR, - Species.SPIRITOMB, - Species.SKORUPI, - Species.DRAPION, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.MAGNEZONE, - Species.MAGMORTAR, - Species.GALLADE, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.DARKRAI, - Species.ARCEUS, - Species.WATCHOG, - Species.ZORUA, - Species.ZOROARK, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.FRILLISH, - Species.JELLICENT, - Species.EELEKTROSS, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.CRYOGONAL, - Species.GOLETT, - Species.GOLURK, - Species.DELPHOX, - Species.VIVILLON, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.MORELULL, - Species.SHIINOTIC, - Species.SANDYGAST, - Species.PALOSSAND, - Species.MINIOR, - Species.MIMIKYU, - Species.LUNALA, - Species.MAGEARNA, - Species.BLACEPHALON, - Species.ORBEETLE, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.CURSOLA, - Species.MR_RIME, - Species.DREEPY, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ETERNATUS, - Species.SPECTRIER, - Species.WYRDEER, - Species.BASCULEGION, - Species.CHARCADET, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.TADBULB, - Species.BELLIBOLT, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.GLIMMET, - Species.GLIMMORA, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.FARIGIRAF, - Species.BRUTE_BONNET, - Species.FLUTTER_MANE, - Species.IRON_MOTH, - Species.GIMMIGHOUL, - Species.GHOLDENGO, - Species.CHI_YU, - Species.IRON_VALIANT, - Species.MIRAIDON, - Species.MUNKIDORI, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.GALAR_MR_MIME, - Species.GALAR_CORSOLA, + [MoveId.CONFUSE_RAY]: [ + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.HYPNO, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.MAGMAR, + SpeciesId.LAPRAS, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.CROBAT, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.CORSOLA, + SpeciesId.MANTINE, + SpeciesId.STANTLER, + SpeciesId.MAGBY, + SpeciesId.SHIFTRY, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SHEDINJA, + SpeciesId.SABLEYE, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.JIRACHI, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.VESPIQUEN, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.MIME_JR, + SpeciesId.SPIRITOMB, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.MAGNEZONE, + SpeciesId.MAGMORTAR, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.WATCHOG, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.EELEKTROSS, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.CRYOGONAL, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.DELPHOX, + SpeciesId.VIVILLON, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.MINIOR, + SpeciesId.MIMIKYU, + SpeciesId.LUNALA, + SpeciesId.MAGEARNA, + SpeciesId.BLACEPHALON, + SpeciesId.ORBEETLE, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.CURSOLA, + SpeciesId.MR_RIME, + SpeciesId.DREEPY, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ETERNATUS, + SpeciesId.SPECTRIER, + SpeciesId.WYRDEER, + SpeciesId.BASCULEGION, + SpeciesId.CHARCADET, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.FARIGIRAF, + SpeciesId.BRUTE_BONNET, + SpeciesId.FLUTTER_MANE, + SpeciesId.IRON_MOTH, + SpeciesId.GIMMIGHOUL, + SpeciesId.GHOLDENGO, + SpeciesId.CHI_YU, + SpeciesId.IRON_VALIANT, + SpeciesId.MIRAIDON, + SpeciesId.MUNKIDORI, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_CORSOLA, [ - Species.CALYREX, + SpeciesId.CALYREX, "shadow", ], - Species.HISUI_TYPHLOSION, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.HISUI_DECIDUEYE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.LIGHT_SCREEN]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.PIKACHU, - Species.RAICHU, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.PARAS, - Species.PARASECT, - Species.PSYDUCK, - Species.GOLDUCK, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.CLOYSTER, - Species.DROWZEE, - Species.HYPNO, - Species.VOLTORB, - Species.ELECTRODE, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CHANSEY, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.JOLTEON, - Species.ARTICUNO, - Species.ZAPDOS, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.LEDYBA, - Species.LEDIAN, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.MARILL, - Species.AZUMARILL, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.SUNKERN, - Species.SUNFLORA, - Species.ESPEON, - Species.UMBREON, - Species.SLOWKING, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.SCIZOR, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.STANTLER, - Species.SMOOCHUM, - Species.ELEKID, - Species.BLISSEY, - Species.RAIKOU, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.DUSTOX, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.AZURILL, - Species.SABLEYE, - Species.MEDITITE, - Species.MEDICHAM, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.SPOINK, - Species.GRUMPIG, - Species.LUNATONE, - Species.SOLROCK, - Species.BALTOY, - Species.CLAYDOL, - Species.FEEBAS, - Species.MILOTIC, - Species.CHIMECHO, - Species.SNORUNT, - Species.GLALIE, - Species.METANG, - Species.METAGROSS, - Species.LATIAS, - Species.LATIOS, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.PACHIRISU, - Species.CHINGLING, - Species.BRONZOR, - Species.BRONZONG, - Species.MIME_JR, - Species.HAPPINY, - Species.SNOVER, - Species.ABOMASNOW, - Species.MAGNEZONE, - Species.ELECTIVIRE, - Species.TOGEKISS, - Species.MAMOSWINE, - Species.GALLADE, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.CRESSELIA, - Species.MANAPHY, - Species.ARCEUS, - Species.VICTINI, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.WATCHOG, - Species.MUNNA, - Species.MUSHARNA, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.WOOBAT, - Species.SWOOBAT, - Species.AUDINO, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.WHIMSICOTT, - Species.LILLIGANT, - Species.SIGILYPH, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.ALOMOMOLA, - Species.JOLTIK, - Species.GALVANTULA, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.CRYOGONAL, - Species.LARVESTA, - Species.VOLCARONA, - Species.VIRIZION, - Species.RESHIRAM, - Species.ZEKROM, - Species.KYUREM, - Species.MELOETTA, - Species.GENESECT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.VIVILLON, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.ESPURR, - Species.MEOWSTIC, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.DEDENNE, - Species.CARBINK, - Species.KLEFKI, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.XERNEAS, - Species.DIANCIE, - Species.HOOPA, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.PRIMARINA, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.TOXAPEX, - Species.MORELULL, - Species.SHIINOTIC, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.PYUKUMUKU, - Species.MINIOR, - Species.MIMIKYU, - Species.BRUXISH, - Species.DRAMPA, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.SOLGALEO, - Species.LUNALA, - Species.NIHILEGO, - Species.XURKITREE, - Species.NECROZMA, - Species.MAGEARNA, - Species.STAKATAKA, - Species.BLACEPHALON, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.CORVIKNIGHT, - Species.DOTTLER, - Species.ORBEETLE, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.APPLETUN, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.CURSOLA, - Species.MR_RIME, - Species.ALCREMIE, - Species.FROSMOTH, - Species.DURALUDON, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ZAMAZENTA, - Species.ETERNATUS, - Species.REGIELEKI, - Species.REGIDRAGO, - Species.CALYREX, - Species.WYRDEER, - Species.KLEAVOR, - Species.ARBOLIVA, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.TADBULB, - Species.BELLIBOLT, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.GLIMMET, - Species.GLIMMORA, - Species.FARIGIRAF, - Species.SCREAM_TAIL, - Species.SANDY_SHOCKS, - Species.IRON_MOTH, - Species.GIMMIGHOUL, - Species.GHOLDENGO, - Species.WO_CHIEN, - Species.CHI_YU, - Species.IRON_VALIANT, - Species.MIRAIDON, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.ARCHALUDON, - Species.ALOLA_RAICHU, - Species.ALOLA_EXEGGUTOR, - Species.ETERNAL_FLOETTE, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, + [MoveId.LIGHT_SCREEN]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.CLOYSTER, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CHANSEY, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.JOLTEON, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.SLOWKING, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.SCIZOR, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.STANTLER, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.DUSTOX, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.AZURILL, + SpeciesId.SABLEYE, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CHIMECHO, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.PACHIRISU, + SpeciesId.CHINGLING, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.MAGNEZONE, + SpeciesId.ELECTIVIRE, + SpeciesId.TOGEKISS, + SpeciesId.MAMOSWINE, + SpeciesId.GALLADE, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.CRESSELIA, + SpeciesId.MANAPHY, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.WATCHOG, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.AUDINO, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.WHIMSICOTT, + SpeciesId.LILLIGANT, + SpeciesId.SIGILYPH, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.ALOMOMOLA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.CRYOGONAL, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.VIRIZION, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.KYUREM, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.VIVILLON, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.KLEFKI, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.XERNEAS, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.PRIMARINA, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.TOXAPEX, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.PYUKUMUKU, + SpeciesId.MINIOR, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.XURKITREE, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.STAKATAKA, + SpeciesId.BLACEPHALON, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.CORVIKNIGHT, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.APPLETUN, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.CURSOLA, + SpeciesId.MR_RIME, + SpeciesId.ALCREMIE, + SpeciesId.FROSMOTH, + SpeciesId.DURALUDON, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ZAMAZENTA, + SpeciesId.ETERNATUS, + SpeciesId.REGIELEKI, + SpeciesId.REGIDRAGO, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.KLEAVOR, + SpeciesId.ARBOLIVA, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.FARIGIRAF, + SpeciesId.SCREAM_TAIL, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_MOTH, + SpeciesId.GIMMIGHOUL, + SpeciesId.GHOLDENGO, + SpeciesId.WO_CHIEN, + SpeciesId.CHI_YU, + SpeciesId.IRON_VALIANT, + SpeciesId.MIRAIDON, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.ARCHALUDON, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, [ - Species.INDEEDEE, + SpeciesId.INDEEDEE, "female", ], ], - [Moves.HAZE]: [ - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.EKANS, - Species.ARBOK, - Species.ZUBAT, - Species.GOLBAT, - Species.PSYDUCK, - Species.GOLDUCK, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.DODUO, - Species.DODRIO, - Species.SEEL, - Species.DEWGONG, - Species.GRIMER, - Species.MUK, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.KOFFING, - Species.WEEZING, - Species.GOLDEEN, - Species.SEAKING, - Species.LAPRAS, - Species.VAPOREON, - Species.OMANYTE, - Species.OMASTAR, - Species.ARTICUNO, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEW, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.CROBAT, - Species.NATU, - Species.XATU, - Species.POLITOED, - Species.WOOPER, - Species.QUAGSIRE, - Species.MURKROW, - Species.QWILFISH, - Species.SWINUB, - Species.PILOSWINE, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SWABLU, - Species.ALTARIA, - Species.SEVIPER, - Species.FEEBAS, - Species.MILOTIC, - Species.DUSKULL, - Species.DUSCLOPS, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.HONCHKROW, - Species.STUNKY, - Species.SKUNTANK, - Species.MANTYKE, - Species.GLACEON, - Species.MAMOSWINE, - Species.DUSKNOIR, - Species.FROSLASS, - Species.PHIONE, - Species.MANAPHY, - Species.DARKRAI, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TRUBBISH, - Species.GARBODOR, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.CRYOGONAL, - Species.ZEKROM, - Species.GRENINJA, - Species.SKRELP, - Species.DRAGALGE, - Species.AMAURA, - Species.AURORUS, - Species.TREVENANT, - Species.ZYGARDE, - Species.VOLCANION, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.PRIMARINA, - Species.MAREANIE, - Species.TOXAPEX, - Species.TAPU_FINI, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.RUNERIGUS, - Species.SPECTRIER, - Species.OVERQWIL, - Species.FINIZEN, - Species.PALAFIN, - Species.VAROOM, - Species.REVAVROOM, - Species.CLODSIRE, - Species.CHIEN_PAO, - Species.ALOLA_MUK, - Species.GALAR_SLOWBRO, - Species.GALAR_WEEZING, - Species.GALAR_CORSOLA, - Species.GALAR_YAMASK, + [MoveId.HAZE]: [ + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.LAPRAS, + SpeciesId.VAPOREON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.ARTICUNO, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.CROBAT, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.POLITOED, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.MURKROW, + SpeciesId.QWILFISH, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.SEVIPER, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.HONCHKROW, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.MANTYKE, + SpeciesId.GLACEON, + SpeciesId.MAMOSWINE, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.CRYOGONAL, + SpeciesId.ZEKROM, + SpeciesId.GRENINJA, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.TREVENANT, + SpeciesId.ZYGARDE, + SpeciesId.VOLCANION, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.PRIMARINA, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.TAPU_FINI, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.RUNERIGUS, + SpeciesId.SPECTRIER, + SpeciesId.OVERQWIL, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.CLODSIRE, + SpeciesId.CHIEN_PAO, + SpeciesId.ALOLA_MUK, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_YAMASK, [ - Species.CALYREX, + SpeciesId.CALYREX, "shadow", ], - Species.HISUI_QWILFISH, - Species.HISUI_DECIDUEYE, - Species.PALDEA_WOOPER, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.PALDEA_WOOPER, ], - [Moves.REFLECT]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.PIKACHU, - Species.RAICHU, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.GROWLITHE, - Species.ARCANINE, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.SHELLDER, - Species.CLOYSTER, - Species.DROWZEE, - Species.HYPNO, - Species.VOLTORB, - Species.ELECTRODE, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CHANSEY, - Species.TANGELA, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.JYNX, - Species.ELECTABUZZ, - Species.GYARADOS, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.PORYGON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.ESPEON, - Species.UMBREON, - Species.SLOWKING, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.SNUBBULL, - Species.GRANBULL, - Species.SNEASEL, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.STANTLER, - Species.SMOOCHUM, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SABLEYE, - Species.MEDITITE, - Species.MEDICHAM, - Species.SPOINK, - Species.GRUMPIG, - Species.LUNATONE, - Species.SOLROCK, - Species.BALTOY, - Species.CLAYDOL, - Species.CHIMECHO, - Species.METANG, - Species.METAGROSS, - Species.LATIAS, - Species.LATIOS, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.BASTIODON, - Species.CHINGLING, - Species.BRONZOR, - Species.BRONZONG, - Species.MIME_JR, - Species.WEAVILE, - Species.MAGNEZONE, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.TOGEKISS, - Species.MAMOSWINE, - Species.GALLADE, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.CRESSELIA, - Species.MANAPHY, - Species.ARCEUS, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.MUNNA, - Species.MUSHARNA, - Species.WOOBAT, - Species.SWOOBAT, - Species.AUDINO, - Species.LEAVANNY, - Species.SIGILYPH, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.CRYOGONAL, - Species.MIENFOO, - Species.MIENSHAO, - Species.GOLETT, - Species.GOLURK, - Species.HYDREIGON, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.RESHIRAM, - Species.ZEKROM, - Species.KYUREM, - Species.KELDEO, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.DELPHOX, - Species.ESPURR, - Species.MEOWSTIC, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.SPRITZEE, - Species.AROMATISSE, - Species.INKAY, - Species.MALAMAR, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.CARBINK, - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.XERNEAS, - Species.DIANCIE, - Species.HOOPA, - Species.PRIMARINA, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.ARAQUANID, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.ORANGURU, - Species.PYUKUMUKU, - Species.MINIOR, - Species.TOGEDEMARU, - Species.BRUXISH, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.SOLGALEO, - Species.LUNALA, - Species.NIHILEGO, - Species.XURKITREE, - Species.NECROZMA, - Species.MAGEARNA, - Species.STAKATAKA, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.CORVIKNIGHT, - Species.DOTTLER, - Species.ORBEETLE, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.APPLETUN, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.CURSOLA, - Species.MR_RIME, - Species.FROSMOTH, - Species.EISCUE, - Species.DURALUDON, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ZAMAZENTA, - Species.ETERNATUS, - Species.REGIELEKI, - Species.REGIDRAGO, - Species.CALYREX, - Species.WYRDEER, - Species.ARBOLIVA, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.TADBULB, - Species.BELLIBOLT, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.GLIMMET, - Species.GLIMMORA, - Species.FARIGIRAF, - Species.SCREAM_TAIL, - Species.SANDY_SHOCKS, - Species.GIMMIGHOUL, - Species.GHOLDENGO, - Species.WO_CHIEN, - Species.CHI_YU, - Species.IRON_VALIANT, - Species.MIRAIDON, - Species.DIPPLIN, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.ALOLA_RAICHU, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_EXEGGUTOR, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_CORSOLA, + [MoveId.REFLECT]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.PORYGON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.SLOWKING, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SNEASEL, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.STANTLER, + SpeciesId.SMOOCHUM, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SABLEYE, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.CHIMECHO, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.BASTIODON, + SpeciesId.CHINGLING, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.MIME_JR, + SpeciesId.WEAVILE, + SpeciesId.MAGNEZONE, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.TOGEKISS, + SpeciesId.MAMOSWINE, + SpeciesId.GALLADE, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.CRESSELIA, + SpeciesId.MANAPHY, + SpeciesId.ARCEUS, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.AUDINO, + SpeciesId.LEAVANNY, + SpeciesId.SIGILYPH, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.CRYOGONAL, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.HYDREIGON, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.DELPHOX, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.CARBINK, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.XERNEAS, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.PRIMARINA, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.ARAQUANID, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.ORANGURU, + SpeciesId.PYUKUMUKU, + SpeciesId.MINIOR, + SpeciesId.TOGEDEMARU, + SpeciesId.BRUXISH, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.XURKITREE, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.STAKATAKA, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.CORVIKNIGHT, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.APPLETUN, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.CURSOLA, + SpeciesId.MR_RIME, + SpeciesId.FROSMOTH, + SpeciesId.EISCUE, + SpeciesId.DURALUDON, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ZAMAZENTA, + SpeciesId.ETERNATUS, + SpeciesId.REGIELEKI, + SpeciesId.REGIDRAGO, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.ARBOLIVA, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.FARIGIRAF, + SpeciesId.SCREAM_TAIL, + SpeciesId.SANDY_SHOCKS, + SpeciesId.GIMMIGHOUL, + SpeciesId.GHOLDENGO, + SpeciesId.WO_CHIEN, + SpeciesId.CHI_YU, + SpeciesId.IRON_VALIANT, + SpeciesId.MIRAIDON, + SpeciesId.DIPPLIN, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_CORSOLA, [ - Species.INDEEDEE, + SpeciesId.INDEEDEE, "female", ], - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, ], - [Moves.FOCUS_ENERGY]: [ - Species.BEEDRILL, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.MANKEY, - Species.PRIMEAPE, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.FARFETCHD, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.SCYTHER, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.MEW, - Species.SENTRET, - Species.FURRET, - Species.ARIADOS, - Species.ESPEON, - Species.UMBREON, - Species.SCIZOR, - Species.TEDDIURSA, - Species.REMORAID, - Species.OCTILLERY, - Species.KINGDRA, - Species.PHANPY, - Species.TYROGUE, - Species.HITMONTOP, - Species.MAGBY, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.TAILLOW, - Species.SWELLOW, - Species.VIGOROTH, - Species.SLAKING, - Species.MAKUHITA, - Species.HARIYAMA, - Species.CARVANHA, - Species.SHARPEDO, - Species.NUMEL, - Species.CAMERUPT, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.ABSOL, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.KRICKETUNE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.STUNKY, - Species.SKUNTANK, - Species.LUCARIO, - Species.MAGMORTAR, - Species.LEAFEON, - Species.GLACEON, - Species.VICTINI, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.THROH, - Species.SAWK, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.MIENFOO, - Species.MIENSHAO, - Species.BOUFFALANT, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.PANGORO, - Species.SYLVEON, - Species.VOLCANION, - Species.PASSIMIAN, - Species.BUZZWOLE, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.INTELEON, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.BOLTUND, - Species.FLAPPLE, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.SIRFETCHD, - Species.FALINKS, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.KUBFU, - Species.URSHIFU, - Species.REGIDRAGO, - Species.KLEAVOR, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.FINIZEN, - Species.PALAFIN, - Species.FLAMIGO, - Species.VELUZA, - Species.ANNIHILAPE, - Species.IRON_HANDS, - Species.IRON_JUGULIS, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.ROARING_MOON, - Species.OGERPON, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.PIKACHU, - Species.ALOLA_MAROWAK, + [MoveId.FOCUS_ENERGY]: [ + SpeciesId.BEEDRILL, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.FARFETCHD, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.SCYTHER, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.MEW, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.ARIADOS, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.SCIZOR, + SpeciesId.TEDDIURSA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.KINGDRA, + SpeciesId.PHANPY, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.MAGBY, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.ABSOL, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.KRICKETUNE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.LUCARIO, + SpeciesId.MAGMORTAR, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.VICTINI, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.BOUFFALANT, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.PANGORO, + SpeciesId.SYLVEON, + SpeciesId.VOLCANION, + SpeciesId.PASSIMIAN, + SpeciesId.BUZZWOLE, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.INTELEON, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.BOLTUND, + SpeciesId.FLAPPLE, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.SIRFETCHD, + SpeciesId.FALINKS, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.REGIDRAGO, + SpeciesId.KLEAVOR, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.FLAMIGO, + SpeciesId.VELUZA, + SpeciesId.ANNIHILAPE, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_JUGULIS, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.ROARING_MOON, + SpeciesId.OGERPON, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.PIKACHU, + SpeciesId.ALOLA_MAROWAK, [ - Species.LYCANROC, + SpeciesId.LYCANROC, "dusk", ], - Species.GALAR_FARFETCHD, - Species.GALAR_ZAPDOS, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.HISUI_SAMUROTT, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_SAMUROTT, ], - [Moves.METRONOME]: [ - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.SLOWBRO, - Species.GRIMER, - Species.MUK, - Species.HAUNTER, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.CHANSEY, - Species.MR_MIME, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.SNORLAX, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CLEFFA, - Species.TOGEPI, - Species.TOGETIC, - Species.MARILL, - Species.AZUMARILL, - Species.POLITOED, - Species.AIPOM, - Species.SLOWKING, - Species.SNUBBULL, - Species.GRANBULL, - Species.TEDDIURSA, - Species.URSARING, - Species.SMOOCHUM, - Species.MILTANK, - Species.BLISSEY, - Species.CELEBI, - Species.LOMBRE, - Species.LUDICOLO, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.MAKUHITA, - Species.HARIYAMA, - Species.SABLEYE, - Species.MEDITITE, - Species.MEDICHAM, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.SWALOT, - Species.GRUMPIG, - Species.SPINDA, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSCLOPS, - Species.JIRACHI, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.FLOATZEL, - Species.AMBIPOM, - Species.HAPPINY, - Species.MUNCHLAX, - Species.LUCARIO, - Species.WEAVILE, - Species.TOGEKISS, - Species.DUSKNOIR, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.TORNADUS, - Species.MELOETTA, - Species.DELPHOX, - Species.FLOETTE, - Species.FLORGES, - Species.AROMATISSE, - Species.SLURPUFF, - Species.DIANCIE, - Species.INTELEON, - Species.TOXTRICITY, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.PERRSERKER, - Species.MR_RIME, - Species.ALCREMIE, - Species.INDEEDEE, - Species.CALYREX, - Species.URSALUNA, - Species.PAWMOT, - Species.ARBOLIVA, - Species.SHROODLE, - Species.GRAFAIAI, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.ANNIHILAPE, - Species.SCREAM_TAIL, - Species.IRON_HANDS, - Species.IRON_VALIANT, - Species.MUNKIDORI, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ETERNAL_FLOETTE, - Species.GALAR_MEOWTH, - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_SLOWKING, - Species.HISUI_LILLIGANT, + [MoveId.METRONOME]: [ + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.SLOWBRO, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.CHANSEY, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.SNORLAX, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CLEFFA, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.POLITOED, + SpeciesId.AIPOM, + SpeciesId.SLOWKING, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SMOOCHUM, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.CELEBI, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.SABLEYE, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.SWALOT, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSCLOPS, + SpeciesId.JIRACHI, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.FLOATZEL, + SpeciesId.AMBIPOM, + SpeciesId.HAPPINY, + SpeciesId.MUNCHLAX, + SpeciesId.LUCARIO, + SpeciesId.WEAVILE, + SpeciesId.TOGEKISS, + SpeciesId.DUSKNOIR, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.TORNADUS, + SpeciesId.MELOETTA, + SpeciesId.DELPHOX, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.AROMATISSE, + SpeciesId.SLURPUFF, + SpeciesId.DIANCIE, + SpeciesId.INTELEON, + SpeciesId.TOXTRICITY, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.PERRSERKER, + SpeciesId.MR_RIME, + SpeciesId.ALCREMIE, + SpeciesId.INDEEDEE, + SpeciesId.CALYREX, + SpeciesId.URSALUNA, + SpeciesId.PAWMOT, + SpeciesId.ARBOLIVA, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.ANNIHILAPE, + SpeciesId.SCREAM_TAIL, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_VALIANT, + SpeciesId.MUNKIDORI, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_SLOWKING, + SpeciesId.HISUI_LILLIGANT, ], - [Moves.SELF_DESTRUCT]: [ - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.GRIMER, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.ONIX, - Species.VOLTORB, - Species.ELECTRODE, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.KOFFING, - Species.WEEZING, - Species.SNORLAX, - Species.MEWTWO, - Species.MEW, - Species.SUDOWOODO, - Species.PINECO, - Species.FORRETRESS, - Species.STEELIX, - Species.QWILFISH, - Species.SLUGMA, - Species.MAGCARGO, - Species.CORSOLA, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.NOSEPASS, - Species.GULPIN, - Species.SWALOT, - Species.WAILMER, - Species.WAILORD, - Species.CAMERUPT, - Species.TORKOAL, - Species.LUNATONE, - Species.SOLROCK, - Species.BALTOY, - Species.CLAYDOL, - Species.GLALIE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BONSLY, - Species.MUNCHLAX, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.AZELF, - Species.HEATRAN, - Species.GIGALITH, - Species.TRUBBISH, - Species.GARBODOR, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.FERROSEED, - Species.FERROTHORN, - Species.CRYOGONAL, - Species.GOLETT, - Species.GOLURK, - Species.LANDORUS, - Species.GENESECT, - Species.VOLCANION, - Species.SILVALLY, - Species.MINIOR, - Species.CELESTEELA, - Species.MAGEARNA, - Species.BLACEPHALON, - Species.MELMETAL, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.POLTEAGEIST, - Species.CURSOLA, - Species.PINCURCHIN, - Species.STONJOURNER, - Species.REGIELEKI, - Species.REGIDRAGO, - Species.VAROOM, - Species.GLIMMET, - Species.GLIMMORA, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.GALAR_WEEZING, - Species.GALAR_CORSOLA, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_QWILFISH, + [MoveId.SELF_DESTRUCT]: [ + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.SNORLAX, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.SUDOWOODO, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.STEELIX, + SpeciesId.QWILFISH, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.CORSOLA, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.NOSEPASS, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.GLALIE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BONSLY, + SpeciesId.MUNCHLAX, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.AZELF, + SpeciesId.HEATRAN, + SpeciesId.GIGALITH, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.CRYOGONAL, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.LANDORUS, + SpeciesId.GENESECT, + SpeciesId.VOLCANION, + SpeciesId.SILVALLY, + SpeciesId.MINIOR, + SpeciesId.CELESTEELA, + SpeciesId.MAGEARNA, + SpeciesId.BLACEPHALON, + SpeciesId.MELMETAL, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.POLTEAGEIST, + SpeciesId.CURSOLA, + SpeciesId.PINCURCHIN, + SpeciesId.STONJOURNER, + SpeciesId.REGIELEKI, + SpeciesId.REGIDRAGO, + SpeciesId.VAROOM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_QWILFISH, ], - [Moves.FIRE_BLAST]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.GROWLITHE, - Species.ARCANINE, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.GRIMER, - Species.MUK, - Species.CUBONE, - Species.MAROWAK, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.MAGMAR, - Species.TAUROS, - Species.GYARADOS, - Species.FLAREON, - Species.AERODACTYL, - Species.SNORLAX, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.SLOWKING, - Species.DUNSPARCE, - Species.SNUBBULL, - Species.GRANBULL, - Species.SLUGMA, - Species.MAGCARGO, - Species.REMORAID, - Species.OCTILLERY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.MAGBY, - Species.BLISSEY, - Species.ENTEI, - Species.TYRANITAR, - Species.HO_OH, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAWILE, - Species.AGGRON, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.FLYGON, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SOLROCK, - Species.CASTFORM, - Species.KECLEON, - Species.ABSOL, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.GROUDON, - Species.RAYQUAZA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.STUNKY, - Species.SKUNTANK, - Species.HAPPINY, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.ARCEUS, - Species.VICTINI, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.PANSEAR, - Species.SIMISEAR, - Species.AUDINO, - Species.DARUMAKA, - Species.DARMANITAN, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.HEATMOR, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.RESHIRAM, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.LITLEO, - Species.PYROAR, - Species.GOODRA, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.VOLCANION, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.SALANDIT, - Species.SALAZZLE, - Species.TURTONATOR, - Species.DRAMPA, - Species.SOLGALEO, - Species.CELESTEELA, - Species.GUZZLORD, - Species.NAGANADEL, - Species.BLACEPHALON, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.CARKOL, - Species.COALOSSAL, - Species.CENTISKORCH, - Species.DRACOZOLT, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ETERNATUS, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.CHARCADET, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.SCOVILLAIN, - Species.DUDUNSPARCE, - Species.SCREAM_TAIL, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.IRON_THORNS, - Species.CHI_YU, - Species.ROARING_MOON, - Species.KORAIDON, - Species.GOUGING_FIRE, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_MAROWAK, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_WEEZING, - Species.GALAR_SLOWKING, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_TYPHLOSION, - Species.HISUI_GOODRA, + [MoveId.FIRE_BLAST]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.MAGMAR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.FLAREON, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.SLOWKING, + SpeciesId.DUNSPARCE, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.MAGBY, + SpeciesId.BLISSEY, + SpeciesId.ENTEI, + SpeciesId.TYRANITAR, + SpeciesId.HO_OH, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAWILE, + SpeciesId.AGGRON, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.FLYGON, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SOLROCK, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.ABSOL, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.HAPPINY, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.AUDINO, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.HEATMOR, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.RESHIRAM, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.GOODRA, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.VOLCANION, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.TURTONATOR, + SpeciesId.DRAMPA, + SpeciesId.SOLGALEO, + SpeciesId.CELESTEELA, + SpeciesId.GUZZLORD, + SpeciesId.NAGANADEL, + SpeciesId.BLACEPHALON, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.CENTISKORCH, + SpeciesId.DRACOZOLT, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ETERNATUS, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.CHARCADET, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.SCOVILLAIN, + SpeciesId.DUDUNSPARCE, + SpeciesId.SCREAM_TAIL, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_THORNS, + SpeciesId.CHI_YU, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.GOUGING_FIRE, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_GOODRA, [ - Species.PALDEA_TAUROS, + SpeciesId.PALDEA_TAUROS, "blaze", ], ], - [Moves.WATERFALL]: [ - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.PSYDUCK, - Species.GOLDUCK, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.SEEL, - Species.DEWGONG, - Species.SHELLDER, - Species.CLOYSTER, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.GYARADOS, - Species.LAPRAS, - Species.VAPOREON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.CHINCHOU, - Species.LANTURN, - Species.MARILL, - Species.AZUMARILL, - Species.POLITOED, - Species.WOOPER, - Species.QUAGSIRE, - Species.SLOWKING, - Species.QWILFISH, - Species.REMORAID, - Species.OCTILLERY, - Species.MANTINE, - Species.KINGDRA, - Species.SUICUNE, - Species.LUGIA, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.LOMBRE, - Species.LUDICOLO, - Species.WINGULL, - Species.PELIPPER, - Species.SURSKIT, - Species.MASQUERAIN, - Species.AZURILL, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.FEEBAS, - Species.MILOTIC, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.RAYQUAZA, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.BIBAREL, - Species.BUIZEL, - Species.FLOATZEL, - Species.SHELLOS, - Species.GASTRODON, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.PALKIA, - Species.PHIONE, - Species.MANAPHY, - Species.ARCEUS, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PANPOUR, - Species.SIMIPOUR, - Species.BASCULIN, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.WISHIWASHI, - Species.DEWPIDER, - Species.ARAQUANID, - Species.WIMPOD, - Species.GOLISOPOD, - Species.BRUXISH, - Species.TAPU_FINI, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.CHEWTLE, - Species.DREDNAW, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.EISCUE, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.BASCULEGION, - Species.OVERQWIL, - Species.FINIZEN, - Species.PALAFIN, - Species.VELUZA, - Species.DONDOZO, - Species.CLODSIRE, - Species.WALKING_WAKE, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_SLOWKING, + [MoveId.WATERFALL]: [ + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.VAPOREON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.POLITOED, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.QWILFISH, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.MANTINE, + SpeciesId.KINGDRA, + SpeciesId.SUICUNE, + SpeciesId.LUGIA, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.AZURILL, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.RAYQUAZA, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.BIBAREL, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.PALKIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.ARCEUS, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.BASCULIN, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.WISHIWASHI, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.BRUXISH, + SpeciesId.TAPU_FINI, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.EISCUE, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.BASCULEGION, + SpeciesId.OVERQWIL, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.VELUZA, + SpeciesId.DONDOZO, + SpeciesId.CLODSIRE, + SpeciesId.WALKING_WAKE, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_SLOWKING, [ - Species.URSHIFU, + SpeciesId.URSHIFU, "rapid-strike", ], - Species.HISUI_QWILFISH, - Species.HISUI_SAMUROTT, - Species.PALDEA_WOOPER, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.PALDEA_WOOPER, ], - [Moves.SWIFT]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.VENONAT, - Species.VENOMOTH, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.DROWZEE, - Species.HYPNO, - Species.VOLTORB, - Species.ELECTRODE, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.CHANSEY, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.SCYTHER, - Species.ELECTABUZZ, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.PORYGON, - Species.AERODACTYL, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.CROBAT, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.MARILL, - Species.AZUMARILL, - Species.POLITOED, - Species.AIPOM, - Species.YANMA, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.GLIGAR, - Species.QWILFISH, - Species.SCIZOR, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.KINGDRA, - Species.PORYGON2, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.ELEKID, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.ZIGZAGOON, - Species.LINOONE, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.LUDICOLO, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.NINJASK, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.SKITTY, - Species.DELCATTY, - Species.MEDITITE, - Species.MEDICHAM, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.CARVANHA, - Species.SHARPEDO, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.VIBRAVA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.CRAWDAUNT, - Species.FEEBAS, - Species.MILOTIC, - Species.CASTFORM, - Species.KECLEON, - Species.CHIMECHO, - Species.ABSOL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.LUVDISC, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, + [MoveId.SWIFT]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.CHANSEY, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.SCYTHER, + SpeciesId.ELECTABUZZ, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.PORYGON, + SpeciesId.AERODACTYL, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.CROBAT, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.POLITOED, + SpeciesId.AIPOM, + SpeciesId.YANMA, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.GLIGAR, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.KINGDRA, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.ELEKID, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.LUDICOLO, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.NINJASK, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CRAWDAUNT, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.LUVDISC, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, [ - Species.DEOXYS, + SpeciesId.DEOXYS, "", "speed", ], - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.BIDOOF, - Species.BIBAREL, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.BUDEW, - Species.ROSERADE, - Species.MOTHIM, - Species.COMBEE, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.STUNKY, - Species.SKUNTANK, - Species.CHATOT, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.RIOLU, - Species.LUCARIO, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.WEAVILE, - Species.MAGNEZONE, - Species.ELECTIVIRE, - Species.TOGEKISS, - Species.YANMEGA, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.PORYGON_Z, - Species.GALLADE, - Species.DUSKNOIR, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.GIRATINA, - Species.CRESSELIA, - Species.PHIONE, - Species.MANAPHY, - Species.DARKRAI, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PURRLOIN, - Species.LIEPARD, - Species.MUNNA, - Species.MUSHARNA, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.WOOBAT, - Species.SWOOBAT, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.BASCULIN, - Species.SIGILYPH, - Species.ARCHEN, - Species.ARCHEOPS, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.DUCKLETT, - Species.SWANNA, - Species.EMOLGA, - Species.JOLTIK, - Species.GALVANTULA, - Species.EELEKTROSS, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.ACCELGOR, - Species.MIENFOO, - Species.MIENSHAO, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.RESHIRAM, - Species.ZEKROM, - Species.KYUREM, - Species.KELDEO, - Species.MELOETTA, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.LITLEO, - Species.PYROAR, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.ESPURR, - Species.MEOWSTIC, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.KLEFKI, - Species.NOIBAT, - Species.NOIVERN, - Species.XERNEAS, - Species.YVELTAL, - Species.ZYGARDE, - Species.DIANCIE, - Species.HOOPA, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.VIKAVOLT, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.LYCANROC, - Species.SALANDIT, - Species.SALAZZLE, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.ORANGURU, - Species.WIMPOD, - Species.GOLISOPOD, - Species.TYPE_NULL, - Species.SILVALLY, - Species.MINIOR, - Species.TOGEDEMARU, - Species.DRAMPA, - Species.TAPU_KOKO, - Species.SOLGALEO, - Species.LUNALA, - Species.PHEROMOSA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.NAGANADEL, - Species.ZERAORA, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.NICKIT, - Species.THIEVUL, - Species.YAMPER, - Species.BOLTUND, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.TOXTRICITY, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.OBSTAGOON, - Species.PINCURCHIN, - Species.FROSMOTH, - Species.INDEEDEE, - Species.MORPEKO, - Species.DREEPY, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.URSHIFU, - Species.ZARUDE, - Species.REGIELEKI, - Species.REGIDRAGO, - Species.SPECTRIER, - Species.CALYREX, - Species.WYRDEER, - Species.KLEAVOR, - Species.URSALUNA, - Species.SNEASLER, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.TADBULB, - Species.BELLIBOLT, - Species.WATTREL, - Species.KILOWATTREL, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.FLITTLE, - Species.ESPATHRA, - Species.WIGLETT, - Species.WUGTRIO, - Species.FINIZEN, - Species.PALAFIN, - Species.ANNIHILAPE, - Species.FARIGIRAF, - Species.FLUTTER_MANE, - Species.SANDY_SHOCKS, - Species.IRON_BUNDLE, - Species.IRON_MOTH, - Species.IRON_VALIANT, - Species.WALKING_WAKE, - Species.IRON_LEAVES, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_MAROWAK, - Species.ETERNAL_FLOETTE, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_TYPHLOSION, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.HISUI_DECIDUEYE, - Species.BLOODMOON_URSALUNA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.MOTHIM, + SpeciesId.COMBEE, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.CHATOT, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.WEAVILE, + SpeciesId.MAGNEZONE, + SpeciesId.ELECTIVIRE, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.BASCULIN, + SpeciesId.SIGILYPH, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.EMOLGA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.EELEKTROSS, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.ACCELGOR, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.KLEFKI, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.VIKAVOLT, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.LYCANROC, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.ORANGURU, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.MINIOR, + SpeciesId.TOGEDEMARU, + SpeciesId.DRAMPA, + SpeciesId.TAPU_KOKO, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.PHEROMOSA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.NAGANADEL, + SpeciesId.ZERAORA, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.TOXTRICITY, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.OBSTAGOON, + SpeciesId.PINCURCHIN, + SpeciesId.FROSMOTH, + SpeciesId.INDEEDEE, + SpeciesId.MORPEKO, + SpeciesId.DREEPY, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.REGIELEKI, + SpeciesId.REGIDRAGO, + SpeciesId.SPECTRIER, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.SNEASLER, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.ANNIHILAPE, + SpeciesId.FARIGIRAF, + SpeciesId.FLUTTER_MANE, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_VALIANT, + SpeciesId.WALKING_WAKE, + SpeciesId.IRON_LEAVES, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.AMNESIA]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.KRABBY, - Species.KINGLER, - Species.LICKITUNG, - Species.TANGELA, - Species.SNORLAX, - Species.MEWTWO, - Species.MEW, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.CHINCHOU, - Species.LANTURN, - Species.CLEFFA, - Species.MARILL, - Species.AZUMARILL, - Species.POLITOED, - Species.HOPPIP, - Species.WOOPER, - Species.QUAGSIRE, - Species.SLOWKING, - Species.WOBBUFFET, - Species.GIRAFARIG, - Species.DUNSPARCE, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.MANTINE, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.GULPIN, - Species.SWALOT, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPOINK, - Species.GRUMPIG, - Species.BARBOACH, - Species.WHISCASH, - Species.LILEEP, - Species.CRADILY, - Species.CASTFORM, - Species.WYNAUT, - Species.GOREBYSS, - Species.RELICANTH, - Species.REGICE, - Species.REGISTEEL, - Species.JIRACHI, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.BIDOOF, - Species.BIBAREL, - Species.SHELLOS, - Species.GASTRODON, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.MUNCHLAX, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.MANTYKE, - Species.LICKILICKY, - Species.TANGROWTH, - Species.TOGEKISS, - Species.MAMOSWINE, - Species.UXIE, - Species.PANSEAR, - Species.SIMISEAR, - Species.MUNNA, - Species.MUSHARNA, - Species.WOOBAT, - Species.SWOOBAT, - Species.AUDINO, - Species.SCRAGGY, - Species.SCRAFTY, - Species.TRUBBISH, - Species.GARBODOR, - Species.BOUFFALANT, - Species.HEATMOR, - Species.LARVESTA, - Species.VOLCARONA, - Species.SWIRLIX, - Species.SLURPUFF, - Species.DIANCIE, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.MORELULL, - Species.SHIINOTIC, - Species.COMFEY, - Species.SANDYGAST, - Species.PALOSSAND, - Species.DRAMPA, - Species.GUZZLORD, - Species.SKWOVET, - Species.GREEDENT, - Species.APPLETUN, - Species.CRAMORANT, - Species.PERRSERKER, - Species.CURSOLA, - Species.RUNERIGUS, - Species.EISCUE, - Species.CETODDLE, - Species.CETITAN, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.SCREAM_TAIL, + [MoveId.AMNESIA]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.LICKITUNG, + SpeciesId.TANGELA, + SpeciesId.SNORLAX, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.CLEFFA, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.POLITOED, + SpeciesId.HOPPIP, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.WOBBUFFET, + SpeciesId.GIRAFARIG, + SpeciesId.DUNSPARCE, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.MANTINE, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.CASTFORM, + SpeciesId.WYNAUT, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.JIRACHI, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.MUNCHLAX, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.MANTYKE, + SpeciesId.LICKILICKY, + SpeciesId.TANGROWTH, + SpeciesId.TOGEKISS, + SpeciesId.MAMOSWINE, + SpeciesId.UXIE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.AUDINO, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.BOUFFALANT, + SpeciesId.HEATMOR, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.DIANCIE, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.COMFEY, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.DRAMPA, + SpeciesId.GUZZLORD, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.APPLETUN, + SpeciesId.CRAMORANT, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.RUNERIGUS, + SpeciesId.EISCUE, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.SCREAM_TAIL, [ - Species.DEOXYS, + SpeciesId.DEOXYS, "defense", ], - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.GALAR_MEOWTH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.PALDEA_WOOPER, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.PALDEA_WOOPER, ], - [Moves.DREAM_EATER]: [ - Species.BUTTERFREE, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.VENOMOTH, - Species.MEOWTH, - Species.PERSIAN, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.LICKITUNG, - Species.CHANSEY, - Species.STARMIE, - Species.MR_MIME, - Species.JYNX, - Species.LAPRAS, - Species.PORYGON, - Species.MEWTWO, - Species.MEW, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.AIPOM, - Species.YANMA, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.DUNSPARCE, - Species.GLIGAR, - Species.SNEASEL, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.PORYGON2, - Species.STANTLER, - Species.SMOOCHUM, - Species.BLISSEY, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SHEDINJA, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MEDITITE, - Species.MEDICHAM, - Species.GULPIN, - Species.SWALOT, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.SWABLU, - Species.ALTARIA, - Species.LUNATONE, - Species.SOLROCK, - Species.BALTOY, - Species.CLAYDOL, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.CHIMECHO, - Species.ABSOL, - Species.LATIAS, - Species.LATIOS, - Species.JIRACHI, - Species.DEOXYS, - Species.WORMADAM, - Species.MOTHIM, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.BRONZOR, - Species.BRONZONG, - Species.MIME_JR, - Species.HAPPINY, - Species.SPIRITOMB, - Species.WEAVILE, - Species.LICKILICKY, - Species.TOGEKISS, - Species.YANMEGA, - Species.PORYGON_Z, - Species.GALLADE, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.GIRATINA, - Species.CRESSELIA, - Species.DARKRAI, - Species.ARCEUS, - Species.WATCHOG, - Species.PURRLOIN, - Species.LIEPARD, - Species.MUNNA, - Species.MUSHARNA, - Species.WOOBAT, - Species.SWOOBAT, - Species.AUDINO, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.FRILLISH, - Species.JELLICENT, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.MELOETTA, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.VIVILLON, - Species.ESPURR, - Species.MEOWSTIC, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.AMAURA, - Species.AURORUS, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.NOIBAT, - Species.NOIVERN, - Species.YVELTAL, - Species.HOOPA, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.MORELULL, - Species.SHIINOTIC, - Species.ORANGURU, - Species.MIMIKYU, - Species.BRUXISH, - Species.LUNALA, - Species.ALOLA_NINETALES, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.MAROWAK, - Species.GALAR_ARTICUNO, + [MoveId.DREAM_EATER]: [ + SpeciesId.BUTTERFREE, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.VENOMOTH, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.LICKITUNG, + SpeciesId.CHANSEY, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.LAPRAS, + SpeciesId.PORYGON, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.AIPOM, + SpeciesId.YANMA, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.SNEASEL, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.SMOOCHUM, + SpeciesId.BLISSEY, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SHEDINJA, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.SPIRITOMB, + SpeciesId.WEAVILE, + SpeciesId.LICKILICKY, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.WATCHOG, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.AUDINO, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.MELOETTA, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.VIVILLON, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.YVELTAL, + SpeciesId.HOOPA, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.ORANGURU, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.LUNALA, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.MAROWAK, + SpeciesId.GALAR_ARTICUNO, ], - [Moves.LEECH_LIFE]: [ - Species.EKANS, - Species.ARBOK, - Species.SANDSHREW, - Species.SANDSLASH, - Species.ZUBAT, - Species.GOLBAT, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.KABUTO, - Species.KABUTOPS, - Species.MEW, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.YANMA, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.SURSKIT, - Species.MASQUERAIN, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.DUSKULL, - Species.DUSCLOPS, - Species.KRICKETUNE, - Species.DRAPION, - Species.YANMEGA, - Species.DUSKNOIR, - Species.JOLTIK, - Species.GALVANTULA, - Species.SHELMET, - Species.ACCELGOR, - Species.LARVESTA, - Species.VOLCARONA, - Species.GENESECT, - Species.NOIBAT, - Species.NOIVERN, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.DEWPIDER, - Species.ARAQUANID, - Species.FOMANTIS, - Species.LURANTIS, - Species.SALANDIT, - Species.SALAZZLE, - Species.WIMPOD, - Species.GOLISOPOD, - Species.MIMIKYU, - Species.BUZZWOLE, - Species.NAGANADEL, - Species.DOTTLER, - Species.ORBEETLE, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.CURSOLA, - Species.FROSMOTH, - Species.DRACOVISH, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.NYMBLE, - Species.LOKIX, - Species.RELLOR, - Species.RABSCA, - Species.SLITHER_WING, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, + [MoveId.LEECH_LIFE]: [ + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.MEW, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.YANMA, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.KRICKETUNE, + SpeciesId.DRAPION, + SpeciesId.YANMEGA, + SpeciesId.DUSKNOIR, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.GENESECT, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.MIMIKYU, + SpeciesId.BUZZWOLE, + SpeciesId.NAGANADEL, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.CURSOLA, + SpeciesId.FROSMOTH, + SpeciesId.DRACOVISH, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.SLITHER_WING, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, ], - [Moves.FLASH]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIKACHU, - Species.RAICHU, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.DROWZEE, - Species.HYPNO, - Species.VOLTORB, - Species.ELECTRODE, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.KOFFING, - Species.WEEZING, - Species.CHANSEY, - Species.TANGELA, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.JYNX, - Species.ELECTABUZZ, - Species.JOLTEON, - Species.PORYGON, - Species.ZAPDOS, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.SUNKERN, - Species.SUNFLORA, - Species.YANMA, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.SHUCKLE, - Species.SKARMORY, - Species.PORYGON2, - Species.STANTLER, - Species.SMOOCHUM, - Species.ELEKID, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MEDITITE, - Species.MEDICHAM, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.CACNEA, - Species.CACTURNE, - Species.LUNATONE, - Species.SOLROCK, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.TROPIUS, - Species.CHIMECHO, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.METANG, - Species.METAGROSS, - Species.LATIAS, - Species.LATIOS, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.KRICKETUNE, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.BUDEW, - Species.ROSERADE, - Species.WORMADAM, - Species.MOTHIM, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.CHERUBI, - Species.CHERRIM, - Species.GASTRODON, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.MISMAGIUS, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.BRONZOR, - Species.BRONZONG, - Species.MIME_JR, - Species.HAPPINY, - Species.SPIRITOMB, - Species.SKORUPI, - Species.DRAPION, - Species.CARNIVINE, - Species.FINNEON, - Species.LUMINEON, - Species.SNOVER, - Species.ABOMASNOW, - Species.MAGNEZONE, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.TOGEKISS, - Species.YANMEGA, - Species.LEAFEON, - Species.PORYGON_Z, - Species.GALLADE, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.CRESSELIA, - Species.MANAPHY, - Species.DARKRAI, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.WATCHOG, - Species.PANSAGE, - Species.SIMISAGE, - Species.MUNNA, - Species.MUSHARNA, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.WOOBAT, - Species.SWOOBAT, - Species.AUDINO, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FRILLISH, - Species.JELLICENT, - Species.JOLTIK, - Species.GALVANTULA, - Species.FERROSEED, - Species.FERROTHORN, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.STUNFISK, - Species.GOLETT, - Species.GOLURK, - Species.VIRIZION, - Species.ZEKROM, - Species.MELOETTA, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.VIVILLON, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.FURFROU, - Species.ESPURR, - Species.MEOWSTIC, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.DEDENNE, - Species.CARBINK, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.BERGMITE, - Species.AVALUGG, - Species.XERNEAS, - Species.DIANCIE, - Species.HOOPA, - Species.MORELULL, - Species.SHIINOTIC, - Species.PERRSERKER, - Species.MR_RIME, - Species.RUNERIGUS, - Species.WYRDEER, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.ALOLA_RAICHU, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_EXEGGUTOR, - Species.ETERNAL_FLOETTE, - Species.GALAR_MEOWTH, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_YAMASK, - Species.HISUI_LILLIGANT, - Species.HISUI_AVALUGG, - Species.PALDEA_WOOPER, + [MoveId.FLASH]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.JOLTEON, + SpeciesId.PORYGON, + SpeciesId.ZAPDOS, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.YANMA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.SHUCKLE, + SpeciesId.SKARMORY, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.KRICKETUNE, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.GASTRODON, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.MISMAGIUS, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.SPIRITOMB, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CARNIVINE, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.MAGNEZONE, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.CRESSELIA, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.WATCHOG, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.AUDINO, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.STUNFISK, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.VIRIZION, + SpeciesId.ZEKROM, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.VIVILLON, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.FURFROU, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.XERNEAS, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.PERRSERKER, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.WYRDEER, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_YAMASK, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_AVALUGG, + SpeciesId.PALDEA_WOOPER, ], - [Moves.EXPLOSION]: [ - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.MAGNEMITE, - Species.MAGNETON, - Species.GRIMER, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.ONIX, - Species.VOLTORB, - Species.ELECTRODE, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.KOFFING, - Species.WEEZING, - Species.MEW, - Species.SUDOWOODO, - Species.PINECO, - Species.FORRETRESS, - Species.STEELIX, - Species.QWILFISH, - Species.MAGCARGO, - Species.CORSOLA, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.NOSEPASS, - Species.GULPIN, - Species.SWALOT, - Species.CAMERUPT, - Species.TORKOAL, - Species.LUNATONE, - Species.SOLROCK, - Species.BALTOY, - Species.CLAYDOL, - Species.GLALIE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.STUNKY, - Species.SKUNTANK, - Species.BRONZONG, - Species.BONSLY, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.PROBOPASS, - Species.AZELF, - Species.HEATRAN, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.TRUBBISH, - Species.GARBODOR, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.FERROSEED, - Species.FERROTHORN, - Species.CRYOGONAL, - Species.LANDORUS, - Species.GENESECT, - Species.CARBINK, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.DIANCIE, - Species.VOLCANION, - Species.SILVALLY, - Species.MINIOR, - Species.TURTONATOR, - Species.CELESTEELA, - Species.MAGEARNA, - Species.BLACEPHALON, - Species.ROLYCOLY, - Species.REGIELEKI, - Species.REGIDRAGO, - Species.GARGANACL, - Species.GLIMMET, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.GALAR_WEEZING, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, + [MoveId.EXPLOSION]: [ + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.MEW, + SpeciesId.SUDOWOODO, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.STEELIX, + SpeciesId.QWILFISH, + SpeciesId.MAGCARGO, + SpeciesId.CORSOLA, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.NOSEPASS, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.GLALIE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.PROBOPASS, + SpeciesId.AZELF, + SpeciesId.HEATRAN, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.CRYOGONAL, + SpeciesId.LANDORUS, + SpeciesId.GENESECT, + SpeciesId.CARBINK, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.DIANCIE, + SpeciesId.VOLCANION, + SpeciesId.SILVALLY, + SpeciesId.MINIOR, + SpeciesId.TURTONATOR, + SpeciesId.CELESTEELA, + SpeciesId.MAGEARNA, + SpeciesId.BLACEPHALON, + SpeciesId.ROLYCOLY, + SpeciesId.REGIELEKI, + SpeciesId.REGIDRAGO, + SpeciesId.GARGANACL, + SpeciesId.GLIMMET, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.GALAR_WEEZING, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, ], - [Moves.REST]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.SEEL, - Species.DEWGONG, - Species.GRIMER, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.ONIX, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.VOLTORB, - Species.ELECTRODE, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.PORYGON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.YANMA, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.KINGDRA, - Species.PHANPY, - Species.DONPHAN, - Species.PORYGON2, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.NOSEPASS, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.FEEBAS, - Species.MILOTIC, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.TROPIUS, - Species.CHIMECHO, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.BIDOOF, - Species.BIBAREL, - Species.KRICKETUNE, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.BUDEW, - Species.ROSERADE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.WORMADAM, - Species.MOTHIM, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.CHERUBI, - Species.CHERRIM, - Species.SHELLOS, - Species.GASTRODON, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.STUNKY, - Species.SKUNTANK, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.MIME_JR, - Species.HAPPINY, - Species.CHATOT, - Species.SPIRITOMB, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.CARNIVINE, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.YANMEGA, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.PORYGON_Z, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.PHIONE, - Species.MANAPHY, - Species.DARKRAI, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.MUNNA, - Species.MUSHARNA, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.WOOBAT, - Species.SWOOBAT, - Species.DRILBUR, - Species.EXCADRILL, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.BASCULIN, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.MARACTUS, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.TRUBBISH, - Species.GARBODOR, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.DUCKLETT, - Species.SWANNA, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.JOLTIK, - Species.GALVANTULA, - Species.FERROSEED, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.SHELMET, - Species.ACCELGOR, - Species.STUNFISK, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.DURANT, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.KELDEO, - Species.MELOETTA, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.LITLEO, - Species.PYROAR, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.ESPURR, - Species.MEOWSTIC, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.CARBINK, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.BERGMITE, - Species.AVALUGG, - Species.NOIBAT, - Species.NOIVERN, - Species.XERNEAS, - Species.YVELTAL, - Species.ZYGARDE, - Species.DIANCIE, - Species.HOOPA, - Species.VOLCANION, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.MUDBRAY, - Species.MUDSDALE, - Species.DEWPIDER, - Species.ARAQUANID, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.SALANDIT, - Species.SALAZZLE, - Species.STUFFUL, - Species.BEWEAR, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.PASSIMIAN, - Species.WIMPOD, - Species.GOLISOPOD, - Species.SANDYGAST, - Species.PALOSSAND, - Species.PYUKUMUKU, - Species.TYPE_NULL, - Species.SILVALLY, - Species.MINIOR, - Species.TURTONATOR, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.BRUXISH, - Species.DRAMPA, - Species.DHELMISE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.SOLGALEO, - Species.LUNALA, - Species.NIHILEGO, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.XURKITREE, - Species.CELESTEELA, - Species.KARTANA, - Species.GUZZLORD, - Species.NECROZMA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.POIPOLE, - Species.NAGANADEL, - Species.STAKATAKA, - Species.BLACEPHALON, - Species.ZERAORA, - Species.MELTAN, - Species.MELMETAL, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.SKWOVET, - Species.GREEDENT, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.DOTTLER, - Species.ORBEETLE, - Species.NICKIT, - Species.THIEVUL, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.WOOLOO, - Species.DUBWOOL, - Species.CHEWTLE, - Species.DREDNAW, - Species.YAMPER, - Species.BOLTUND, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.FLAPPLE, - Species.APPLETUN, - Species.SILICOBRA, - Species.SANDACONDA, - Species.CRAMORANT, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.TOXEL, - Species.TOXTRICITY, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.CURSOLA, - Species.SIRFETCHD, - Species.MR_RIME, - Species.RUNERIGUS, - Species.MILCERY, - Species.ALCREMIE, - Species.FALINKS, - Species.PINCURCHIN, - Species.SNOM, - Species.FROSMOTH, - Species.STONJOURNER, - Species.EISCUE, - Species.INDEEDEE, - Species.MORPEKO, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.DURALUDON, - Species.DREEPY, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.ETERNATUS, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.REGIELEKI, - Species.REGIDRAGO, - Species.GLASTRIER, - Species.SPECTRIER, - Species.CALYREX, - Species.WYRDEER, - Species.KLEAVOR, - Species.URSALUNA, - Species.BASCULEGION, - Species.SNEASLER, - Species.OVERQWIL, - Species.ENAMORUS, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.LECHONK, - Species.OINKOLOGNE, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.NYMBLE, - Species.LOKIX, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.FIDOUGH, - Species.DACHSBUN, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.SQUAWKABILLY, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.TADBULB, - Species.BELLIBOLT, - Species.WATTREL, - Species.KILOWATTREL, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.SHROODLE, - Species.GRAFAIAI, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.KLAWF, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.RELLOR, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.WIGLETT, - Species.WUGTRIO, - Species.FINIZEN, - Species.PALAFIN, - Species.REVAVROOM, - Species.CYCLIZAR, - Species.ORTHWORM, - Species.GLIMMET, - Species.GLIMMORA, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.FLAMIGO, - Species.CETODDLE, - Species.CETITAN, - Species.VELUZA, - Species.DONDOZO, - Species.TATSUGIRI, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.BRUTE_BONNET, - Species.FLUTTER_MANE, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_BUNDLE, - Species.IRON_HANDS, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.IRON_THORNS, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.GIMMIGHOUL, - Species.GHOLDENGO, - Species.WO_CHIEN, - Species.CHIEN_PAO, - Species.TING_LU, - Species.CHI_YU, - Species.ROARING_MOON, - Species.IRON_VALIANT, - Species.KORAIDON, - Species.MIRAIDON, - Species.WALKING_WAKE, - Species.IRON_LEAVES, - Species.DIPPLIN, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.OGERPON, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.TERAPAGOS, - Species.PECHARUNT, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.ETERNAL_FLOETTE, - Species.GALAR_MEOWTH, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_FARFETCHD, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.GALAR_YAMASK, - Species.GALAR_STUNFISK, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_TYPHLOSION, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.HISUI_DECIDUEYE, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + [MoveId.REST]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.PORYGON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.YANMA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.KINGDRA, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.NOSEPASS, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.KRICKETUNE, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.CHATOT, + SpeciesId.SPIRITOMB, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.BASCULIN, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.MARACTUS, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.STUNFISK, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.PYUKUMUKU, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.MINIOR, + SpeciesId.TURTONATOR, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.XURKITREE, + SpeciesId.CELESTEELA, + SpeciesId.KARTANA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.STAKATAKA, + SpeciesId.BLACEPHALON, + SpeciesId.ZERAORA, + SpeciesId.MELTAN, + SpeciesId.MELMETAL, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.WOOLOO, + SpeciesId.DUBWOOL, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.TOXEL, + SpeciesId.TOXTRICITY, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.SIRFETCHD, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.MILCERY, + SpeciesId.ALCREMIE, + SpeciesId.FALINKS, + SpeciesId.PINCURCHIN, + SpeciesId.SNOM, + SpeciesId.FROSMOTH, + SpeciesId.STONJOURNER, + SpeciesId.EISCUE, + SpeciesId.INDEEDEE, + SpeciesId.MORPEKO, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.DURALUDON, + SpeciesId.DREEPY, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.ETERNATUS, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.REGIELEKI, + SpeciesId.REGIDRAGO, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.BASCULEGION, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.ENAMORUS, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.SQUAWKABILLY, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.KLAWF, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.REVAVROOM, + SpeciesId.CYCLIZAR, + SpeciesId.ORTHWORM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.FLAMIGO, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.VELUZA, + SpeciesId.DONDOZO, + SpeciesId.TATSUGIRI, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.BRUTE_BONNET, + SpeciesId.FLUTTER_MANE, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_THORNS, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.GIMMIGHOUL, + SpeciesId.GHOLDENGO, + SpeciesId.WO_CHIEN, + SpeciesId.CHIEN_PAO, + SpeciesId.TING_LU, + SpeciesId.CHI_YU, + SpeciesId.ROARING_MOON, + SpeciesId.IRON_VALIANT, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.IRON_LEAVES, + SpeciesId.DIPPLIN, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.OGERPON, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.TERAPAGOS, + SpeciesId.PECHARUNT, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_YAMASK, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.ROCK_SLIDE]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.EKANS, - Species.ARBOK, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.DIGLETT, - Species.DUGTRIO, - Species.MANKEY, - Species.PRIMEAPE, - Species.POLIWRATH, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.GRIMER, - Species.MUK, - Species.ONIX, - Species.KRABBY, - Species.KINGLER, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.PINSIR, - Species.TAUROS, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SUDOWOODO, - Species.WOOPER, - Species.QUAGSIRE, - Species.SLOWKING, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.GRANBULL, - Species.SHUCKLE, - Species.HERACROSS, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.MANTINE, - Species.SKARMORY, - Species.PHANPY, - Species.DONPHAN, - Species.TYROGUE, - Species.HITMONTOP, - Species.MILTANK, - Species.BLISSEY, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.NOSEPASS, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPINDA, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.ZANGOOSE, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.KECLEON, - Species.DUSCLOPS, - Species.ABSOL, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.RELICANTH, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.DEOXYS, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.EMPOLEON, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.SHELLOS, - Species.GASTRODON, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.MANTYKE, - Species.ABOMASNOW, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.GLISCOR, - Species.MAMOSWINE, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.DARKRAI, - Species.ARCEUS, - Species.PIGNITE, - Species.EMBOAR, - Species.SIMISAGE, - Species.SIMISEAR, - Species.SIMIPOUR, - Species.MUNNA, - Species.MUSHARNA, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.DRILBUR, - Species.EXCADRILL, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SCOLIPEDE, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.EELEKTROSS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.STUNFISK, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.DURANT, - Species.HYDREIGON, - Species.TERRAKION, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.HAWLUCHA, - Species.CARBINK, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.BERGMITE, - Species.AVALUGG, - Species.XERNEAS, - Species.YVELTAL, - Species.ZYGARDE, - Species.DIANCIE, - Species.VOLCANION, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.MUDBRAY, - Species.MUDSDALE, - Species.STUFFUL, - Species.BEWEAR, - Species.ORANGURU, - Species.PASSIMIAN, - Species.GOLISOPOD, - Species.SANDYGAST, - Species.PALOSSAND, - Species.TYPE_NULL, - Species.SILVALLY, - Species.MINIOR, - Species.KOMALA, - Species.DRAMPA, - Species.DHELMISE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_BULU, - Species.SOLGALEO, - Species.NIHILEGO, - Species.BUZZWOLE, - Species.CELESTEELA, - Species.GUZZLORD, - Species.NECROZMA, - Species.MARSHADOW, - Species.STAKATAKA, - Species.MELMETAL, - Species.DREDNAW, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.SILICOBRA, - Species.SANDACONDA, - Species.CURSOLA, - Species.RUNERIGUS, - Species.FALINKS, - Species.STONJOURNER, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.DURALUDON, - Species.URSHIFU, - Species.ZARUDE, - Species.KLEAVOR, - Species.URSALUNA, - Species.SNEASLER, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.KLAWF, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.BOMBIRDIER, - Species.ORTHWORM, - Species.GLIMMET, - Species.GLIMMORA, - Species.DONDOZO, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.DUDUNSPARCE, - Species.GREAT_TUSK, - Species.IRON_TREADS, - Species.IRON_HANDS, - Species.IRON_THORNS, - Species.TING_LU, - Species.ROARING_MOON, - Species.ARCHALUDON, - Species.TERAPAGOS, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_MAROWAK, - Species.GALAR_CORSOLA, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.GALAR_YAMASK, - Species.GALAR_STUNFISK, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_TYPHLOSION, - Species.HISUI_BRAVIARY, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + [MoveId.ROCK_SLIDE]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.POLIWRATH, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.ONIX, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SUDOWOODO, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.GRANBULL, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.NOSEPASS, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPINDA, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.ZANGOOSE, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.KECLEON, + SpeciesId.DUSCLOPS, + SpeciesId.ABSOL, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.RELICANTH, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.DEOXYS, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.EMPOLEON, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.MANTYKE, + SpeciesId.ABOMASNOW, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.SIMISAGE, + SpeciesId.SIMISEAR, + SpeciesId.SIMIPOUR, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SCOLIPEDE, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.STUNFISK, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.DURANT, + SpeciesId.HYDREIGON, + SpeciesId.TERRAKION, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.HAWLUCHA, + SpeciesId.CARBINK, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.VOLCANION, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.GOLISOPOD, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_BULU, + SpeciesId.SOLGALEO, + SpeciesId.NIHILEGO, + SpeciesId.BUZZWOLE, + SpeciesId.CELESTEELA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MARSHADOW, + SpeciesId.STAKATAKA, + SpeciesId.MELMETAL, + SpeciesId.DREDNAW, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.CURSOLA, + SpeciesId.RUNERIGUS, + SpeciesId.FALINKS, + SpeciesId.STONJOURNER, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.DURALUDON, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.SNEASLER, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.KLAWF, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.BOMBIRDIER, + SpeciesId.ORTHWORM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.DONDOZO, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.DUDUNSPARCE, + SpeciesId.GREAT_TUSK, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_THORNS, + SpeciesId.TING_LU, + SpeciesId.ROARING_MOON, + SpeciesId.ARCHALUDON, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_YAMASK, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.TRI_ATTACK]: [ - Species.SPEAROW, - Species.FEAROW, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.DUGTRIO, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNETON, - Species.DODUO, - Species.DODRIO, - Species.SHELLDER, - Species.CLOYSTER, - Species.DROWZEE, - Species.HYPNO, - Species.CHANSEY, - Species.STARYU, - Species.STARMIE, - Species.PORYGON, - Species.MEWTWO, - Species.MEW, - Species.TOGEPI, - Species.TOGETIC, - Species.SLOWKING, - Species.PORYGON2, - Species.BLISSEY, - Species.LATIAS, - Species.LATIOS, - Species.MAGNEZONE, - Species.TOGEKISS, - Species.PORYGON_Z, - Species.PROBOPASS, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.BEHEEYEM, - Species.HYDREIGON, - Species.GENESECT, - Species.TYPE_NULL, - Species.SILVALLY, - Species.MAGEARNA, - Species.ALCREMIE, - Species.INDEEDEE, - Species.DRAGAPULT, - Species.CALYREX, - Species.SANDY_SHOCKS, - Species.IRON_JUGULIS, - Species.ALOLA_DUGTRIO, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_SLOWKING, + [MoveId.TRI_ATTACK]: [ + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.DUGTRIO, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNETON, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.CHANSEY, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.PORYGON, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.SLOWKING, + SpeciesId.PORYGON2, + SpeciesId.BLISSEY, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.MAGNEZONE, + SpeciesId.TOGEKISS, + SpeciesId.PORYGON_Z, + SpeciesId.PROBOPASS, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.BEHEEYEM, + SpeciesId.HYDREIGON, + SpeciesId.GENESECT, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.MAGEARNA, + SpeciesId.ALCREMIE, + SpeciesId.INDEEDEE, + SpeciesId.DRAGAPULT, + SpeciesId.CALYREX, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_JUGULIS, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_SLOWKING, ], - [Moves.SUPER_FANG]: [ - Species.RATTATA, - Species.RATICATE, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.ZUBAT, - Species.GOLBAT, - Species.MEW, - Species.SENTRET, - Species.FURRET, - Species.CROBAT, - Species.SNUBBULL, - Species.GRANBULL, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.MAWILE, - Species.PLUSLE, - Species.MINUN, - Species.CARVANHA, - Species.SHARPEDO, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.HUNTAIL, - Species.BIDOOF, - Species.BIBAREL, - Species.PACHIRISU, - Species.GLAMEOW, - Species.PURUGLY, - Species.SKUNTANK, - Species.CROAGUNK, - Species.TOXICROAK, - Species.PATRAT, - Species.WATCHOG, - Species.WOOBAT, - Species.SWOOBAT, - Species.SCRAGGY, - Species.SCRAFTY, - Species.MINCCINO, - Species.CINCCINO, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.DEDENNE, - Species.NOIBAT, - Species.NOIVERN, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.KOMALA, - Species.TOGEDEMARU, - Species.BRUXISH, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.SKWOVET, - Species.GREEDENT, - Species.DREDNAW, - Species.MORPEKO, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.LECHONK, - Species.OINKOLOGNE, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.SHROODLE, - Species.GRAFAIAI, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, + [MoveId.SUPER_FANG]: [ + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.MEW, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.CROBAT, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.MAWILE, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.HUNTAIL, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.PACHIRISU, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.SKUNTANK, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.DEDENNE, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.KOMALA, + SpeciesId.TOGEDEMARU, + SpeciesId.BRUXISH, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.DREDNAW, + SpeciesId.MORPEKO, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, ], - [Moves.SUBSTITUTE]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.SEEL, - Species.DEWGONG, - Species.GRIMER, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.ONIX, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.VOLTORB, - Species.ELECTRODE, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.PORYGON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.YANMA, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.KINGDRA, - Species.PHANPY, - Species.DONPHAN, - Species.PORYGON2, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.NOSEPASS, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.FEEBAS, - Species.MILOTIC, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.TROPIUS, - Species.CHIMECHO, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.BIDOOF, - Species.BIBAREL, - Species.KRICKETUNE, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.BUDEW, - Species.ROSERADE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.WORMADAM, - Species.MOTHIM, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.CHERUBI, - Species.CHERRIM, - Species.SHELLOS, - Species.GASTRODON, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.STUNKY, - Species.SKUNTANK, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.MIME_JR, - Species.HAPPINY, - Species.CHATOT, - Species.SPIRITOMB, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.CARNIVINE, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.YANMEGA, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.PORYGON_Z, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.PHIONE, - Species.MANAPHY, - Species.DARKRAI, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.MUNNA, - Species.MUSHARNA, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.WOOBAT, - Species.SWOOBAT, - Species.DRILBUR, - Species.EXCADRILL, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.BASCULIN, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.MARACTUS, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.TRUBBISH, - Species.GARBODOR, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.DUCKLETT, - Species.SWANNA, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.JOLTIK, - Species.GALVANTULA, - Species.FERROSEED, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.SHELMET, - Species.ACCELGOR, - Species.STUNFISK, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.DURANT, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.KELDEO, - Species.MELOETTA, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.LITLEO, - Species.PYROAR, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.ESPURR, - Species.MEOWSTIC, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.CARBINK, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.BERGMITE, - Species.AVALUGG, - Species.NOIBAT, - Species.NOIVERN, - Species.XERNEAS, - Species.YVELTAL, - Species.ZYGARDE, - Species.DIANCIE, - Species.HOOPA, - Species.VOLCANION, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.MUDBRAY, - Species.MUDSDALE, - Species.DEWPIDER, - Species.ARAQUANID, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.SALANDIT, - Species.SALAZZLE, - Species.STUFFUL, - Species.BEWEAR, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.PASSIMIAN, - Species.WIMPOD, - Species.GOLISOPOD, - Species.SANDYGAST, - Species.PALOSSAND, - Species.PYUKUMUKU, - Species.TYPE_NULL, - Species.SILVALLY, - Species.MINIOR, - Species.KOMALA, - Species.TURTONATOR, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.BRUXISH, - Species.DRAMPA, - Species.DHELMISE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.SOLGALEO, - Species.LUNALA, - Species.NIHILEGO, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.XURKITREE, - Species.CELESTEELA, - Species.KARTANA, - Species.GUZZLORD, - Species.NECROZMA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.POIPOLE, - Species.NAGANADEL, - Species.STAKATAKA, - Species.BLACEPHALON, - Species.ZERAORA, - Species.MELTAN, - Species.MELMETAL, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.SKWOVET, - Species.GREEDENT, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.DOTTLER, - Species.ORBEETLE, - Species.NICKIT, - Species.THIEVUL, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.WOOLOO, - Species.DUBWOOL, - Species.CHEWTLE, - Species.DREDNAW, - Species.YAMPER, - Species.BOLTUND, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.FLAPPLE, - Species.APPLETUN, - Species.SILICOBRA, - Species.SANDACONDA, - Species.CRAMORANT, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.TOXEL, - Species.TOXTRICITY, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.CURSOLA, - Species.SIRFETCHD, - Species.MR_RIME, - Species.RUNERIGUS, - Species.MILCERY, - Species.ALCREMIE, - Species.FALINKS, - Species.PINCURCHIN, - Species.SNOM, - Species.FROSMOTH, - Species.STONJOURNER, - Species.EISCUE, - Species.INDEEDEE, - Species.MORPEKO, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.DURALUDON, - Species.DREEPY, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.ETERNATUS, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.REGIELEKI, - Species.REGIDRAGO, - Species.GLASTRIER, - Species.SPECTRIER, - Species.CALYREX, - Species.WYRDEER, - Species.KLEAVOR, - Species.URSALUNA, - Species.BASCULEGION, - Species.SNEASLER, - Species.OVERQWIL, - Species.ENAMORUS, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.QUAQUAVAL, - Species.LECHONK, - Species.OINKOLOGNE, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.NYMBLE, - Species.LOKIX, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.FIDOUGH, - Species.DACHSBUN, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.SQUAWKABILLY, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.CHARCADET, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.TADBULB, - Species.BELLIBOLT, - Species.WATTREL, - Species.KILOWATTREL, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.SHROODLE, - Species.GRAFAIAI, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.KLAWF, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.RELLOR, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.WIGLETT, - Species.WUGTRIO, - Species.BOMBIRDIER, - Species.FINIZEN, - Species.PALAFIN, - Species.VAROOM, - Species.REVAVROOM, - Species.CYCLIZAR, - Species.ORTHWORM, - Species.GLIMMET, - Species.GLIMMORA, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.FLAMIGO, - Species.CETODDLE, - Species.CETITAN, - Species.VELUZA, - Species.DONDOZO, - Species.TATSUGIRI, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.BRUTE_BONNET, - Species.FLUTTER_MANE, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_BUNDLE, - Species.IRON_HANDS, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.IRON_THORNS, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.GIMMIGHOUL, - Species.GHOLDENGO, - Species.WO_CHIEN, - Species.CHIEN_PAO, - Species.TING_LU, - Species.CHI_YU, - Species.ROARING_MOON, - Species.IRON_VALIANT, - Species.KORAIDON, - Species.MIRAIDON, - Species.WALKING_WAKE, - Species.IRON_LEAVES, - Species.DIPPLIN, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.OGERPON, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.TERAPAGOS, - Species.PECHARUNT, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.ETERNAL_FLOETTE, - Species.GALAR_MEOWTH, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_FARFETCHD, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.GALAR_YAMASK, - Species.GALAR_STUNFISK, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_TYPHLOSION, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.HISUI_DECIDUEYE, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + [MoveId.SUBSTITUTE]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.PORYGON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.YANMA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.KINGDRA, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.NOSEPASS, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.KRICKETUNE, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.CHATOT, + SpeciesId.SPIRITOMB, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.BASCULIN, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.MARACTUS, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.STUNFISK, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.PYUKUMUKU, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.XURKITREE, + SpeciesId.CELESTEELA, + SpeciesId.KARTANA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.STAKATAKA, + SpeciesId.BLACEPHALON, + SpeciesId.ZERAORA, + SpeciesId.MELTAN, + SpeciesId.MELMETAL, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.WOOLOO, + SpeciesId.DUBWOOL, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.TOXEL, + SpeciesId.TOXTRICITY, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.SIRFETCHD, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.MILCERY, + SpeciesId.ALCREMIE, + SpeciesId.FALINKS, + SpeciesId.PINCURCHIN, + SpeciesId.SNOM, + SpeciesId.FROSMOTH, + SpeciesId.STONJOURNER, + SpeciesId.EISCUE, + SpeciesId.INDEEDEE, + SpeciesId.MORPEKO, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.DURALUDON, + SpeciesId.DREEPY, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.ETERNATUS, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.REGIELEKI, + SpeciesId.REGIDRAGO, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.BASCULEGION, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.ENAMORUS, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.QUAQUAVAL, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.SQUAWKABILLY, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.CHARCADET, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.KLAWF, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.BOMBIRDIER, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.CYCLIZAR, + SpeciesId.ORTHWORM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.FLAMIGO, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.VELUZA, + SpeciesId.DONDOZO, + SpeciesId.TATSUGIRI, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.BRUTE_BONNET, + SpeciesId.FLUTTER_MANE, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_THORNS, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.GIMMIGHOUL, + SpeciesId.GHOLDENGO, + SpeciesId.WO_CHIEN, + SpeciesId.CHIEN_PAO, + SpeciesId.TING_LU, + SpeciesId.CHI_YU, + SpeciesId.ROARING_MOON, + SpeciesId.IRON_VALIANT, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.IRON_LEAVES, + SpeciesId.DIPPLIN, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.OGERPON, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.TERAPAGOS, + SpeciesId.PECHARUNT, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_YAMASK, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.THIEF]: [ - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.SEEL, - Species.DEWGONG, - Species.GRIMER, - Species.MUK, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.VOLTORB, - Species.ELECTRODE, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.PORYGON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.MEW, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.NATU, - Species.XATU, - Species.SUDOWOODO, - Species.POLITOED, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.YANMA, - Species.QUAGSIRE, - Species.UMBREON, - Species.MURKROW, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.DUNSPARCE, - Species.GLIGAR, - Species.SNUBBULL, - Species.GRANBULL, - Species.SCIZOR, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.PHANPY, - Species.DONPHAN, - Species.PORYGON2, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.BLISSEY, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINJASK, - Species.SHEDINJA, - Species.MAKUHITA, - Species.HARIYAMA, - Species.SABLEYE, - Species.MEDITITE, - Species.MEDICHAM, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.VOLBEAT, - Species.ILLUMISE, - Species.GULPIN, - Species.SWALOT, - Species.CARVANHA, - Species.SHARPEDO, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.ABSOL, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.BIDOOF, - Species.BIBAREL, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.WORMADAM, - Species.MOTHIM, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.STUNKY, - Species.SKUNTANK, - Species.BONSLY, - Species.MIME_JR, - Species.CHATOT, - Species.SPIRITOMB, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.CARNIVINE, - Species.FINNEON, - Species.LUMINEON, - Species.WEAVILE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.YANMEGA, - Species.GLISCOR, - Species.PORYGON_Z, - Species.GALLADE, - Species.DUSKNOIR, - Species.ROTOM, - Species.DARKRAI, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.WOOBAT, - Species.SWOOBAT, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.WHIMSICOTT, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.SCRAGGY, - Species.SCRAFTY, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TRUBBISH, - Species.GARBODOR, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.JOLTIK, - Species.GALVANTULA, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.CUBCHOO, - Species.BEARTIC, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.TORNADUS, - Species.THUNDURUS, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.LITLEO, - Species.PYROAR, - Species.PANGORO, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HAWLUCHA, - Species.DEDENNE, - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.NOIBAT, - Species.NOIVERN, - Species.YVELTAL, - Species.HOOPA, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.SALANDIT, - Species.SALAZZLE, - Species.COMFEY, - Species.PASSIMIAN, - Species.KOMALA, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.DHELMISE, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.GUZZLORD, - Species.NECROZMA, - Species.MARSHADOW, - Species.NAGANADEL, - Species.BLACEPHALON, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SKWOVET, - Species.GREEDENT, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.NICKIT, - Species.THIEVUL, - Species.CRAMORANT, - Species.TOXTRICITY, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.MR_RIME, - Species.RUNERIGUS, - Species.MORPEKO, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ZARUDE, - Species.WYRDEER, - Species.KLEAVOR, - Species.URSALUNA, - Species.SNEASLER, - Species.MEOWSCARADA, - Species.LECHONK, - Species.OINKOLOGNE, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.NYMBLE, - Species.LOKIX, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.SQUAWKABILLY, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.SHROODLE, - Species.GRAFAIAI, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.KLAWF, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.RELLOR, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.BOMBIRDIER, - Species.VAROOM, - Species.REVAVROOM, - Species.CYCLIZAR, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.FLAMIGO, - Species.ANNIHILAPE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.BRUTE_BONNET, - Species.IRON_BUNDLE, - Species.GIMMIGHOUL, - Species.GHOLDENGO, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.GALAR_MEOWTH, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_MOLTRES, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.GALAR_YAMASK, - Species.HISUI_ARCANINE, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.PALDEA_TAUROS, - Species.BLOODMOON_URSALUNA, + [MoveId.THIEF]: [ + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.PORYGON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.MEW, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.YANMA, + SpeciesId.QUAGSIRE, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SCIZOR, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.BLISSEY, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.SABLEYE, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.ABSOL, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.CHATOT, + SpeciesId.SPIRITOMB, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.WEAVILE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.YANMEGA, + SpeciesId.GLISCOR, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.ROTOM, + SpeciesId.DARKRAI, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.WHIMSICOTT, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.PANGORO, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.YVELTAL, + SpeciesId.HOOPA, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.COMFEY, + SpeciesId.PASSIMIAN, + SpeciesId.KOMALA, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.DHELMISE, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MARSHADOW, + SpeciesId.NAGANADEL, + SpeciesId.BLACEPHALON, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.CRAMORANT, + SpeciesId.TOXTRICITY, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.MORPEKO, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ZARUDE, + SpeciesId.WYRDEER, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.SNEASLER, + SpeciesId.MEOWSCARADA, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.SQUAWKABILLY, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.KLAWF, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.BOMBIRDIER, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.CYCLIZAR, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.FLAMIGO, + SpeciesId.ANNIHILAPE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.BRUTE_BONNET, + SpeciesId.IRON_BUNDLE, + SpeciesId.GIMMIGHOUL, + SpeciesId.GHOLDENGO, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_YAMASK, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.PALDEA_TAUROS, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.SNORE]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.CATERPIE, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.SEEL, - Species.DEWGONG, - Species.GRIMER, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.ONIX, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.VOLTORB, - Species.ELECTRODE, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.PORYGON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.YANMA, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.KINGDRA, - Species.PHANPY, - Species.DONPHAN, - Species.PORYGON2, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.WURMPLE, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.NOSEPASS, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.FEEBAS, - Species.MILOTIC, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.TROPIUS, - Species.CHIMECHO, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.BIDOOF, - Species.BIBAREL, - Species.KRICKETOT, - Species.KRICKETUNE, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.BUDEW, - Species.ROSERADE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.BURMY, - Species.WORMADAM, - Species.MOTHIM, - Species.COMBEE, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.CHERUBI, - Species.CHERRIM, - Species.SHELLOS, - Species.GASTRODON, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.STUNKY, - Species.SKUNTANK, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.MIME_JR, - Species.HAPPINY, - Species.CHATOT, - Species.SPIRITOMB, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.CARNIVINE, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.YANMEGA, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.PORYGON_Z, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.PHIONE, - Species.MANAPHY, - Species.DARKRAI, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.MUNNA, - Species.MUSHARNA, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.WOOBAT, - Species.SWOOBAT, - Species.DRILBUR, - Species.EXCADRILL, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.BASCULIN, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.MARACTUS, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.TRUBBISH, - Species.GARBODOR, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.DUCKLETT, - Species.SWANNA, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.JOLTIK, - Species.GALVANTULA, - Species.FERROSEED, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.SHELMET, - Species.ACCELGOR, - Species.STUNFISK, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.DURANT, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.KELDEO, - Species.MELOETTA, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.LITLEO, - Species.PYROAR, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.ESPURR, - Species.MEOWSTIC, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.CARBINK, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.BERGMITE, - Species.AVALUGG, - Species.NOIBAT, - Species.NOIVERN, - Species.XERNEAS, - Species.YVELTAL, - Species.ZYGARDE, - Species.DIANCIE, - Species.HOOPA, - Species.VOLCANION, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.MUDBRAY, - Species.MUDSDALE, - Species.DEWPIDER, - Species.ARAQUANID, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.SALANDIT, - Species.SALAZZLE, - Species.STUFFUL, - Species.BEWEAR, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.PASSIMIAN, - Species.WIMPOD, - Species.GOLISOPOD, - Species.SANDYGAST, - Species.PALOSSAND, - Species.TYPE_NULL, - Species.SILVALLY, - Species.MINIOR, - Species.KOMALA, - Species.TURTONATOR, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.BRUXISH, - Species.DRAMPA, - Species.DHELMISE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.SOLGALEO, - Species.LUNALA, - Species.NIHILEGO, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.XURKITREE, - Species.CELESTEELA, - Species.KARTANA, - Species.GUZZLORD, - Species.NECROZMA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.POIPOLE, - Species.NAGANADEL, - Species.STAKATAKA, - Species.BLACEPHALON, - Species.ZERAORA, - Species.MELTAN, - Species.MELMETAL, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.SKWOVET, - Species.GREEDENT, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.DOTTLER, - Species.ORBEETLE, - Species.NICKIT, - Species.THIEVUL, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.WOOLOO, - Species.DUBWOOL, - Species.CHEWTLE, - Species.DREDNAW, - Species.YAMPER, - Species.BOLTUND, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.FLAPPLE, - Species.APPLETUN, - Species.SILICOBRA, - Species.SANDACONDA, - Species.CRAMORANT, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.TOXEL, - Species.TOXTRICITY, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.CURSOLA, - Species.SIRFETCHD, - Species.MR_RIME, - Species.RUNERIGUS, - Species.MILCERY, - Species.ALCREMIE, - Species.FALINKS, - Species.PINCURCHIN, - Species.SNOM, - Species.FROSMOTH, - Species.STONJOURNER, - Species.EISCUE, - Species.INDEEDEE, - Species.MORPEKO, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.DURALUDON, - Species.DREEPY, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.ETERNATUS, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.REGIELEKI, - Species.REGIDRAGO, - Species.GLASTRIER, - Species.SPECTRIER, - Species.CALYREX, - Species.URSALUNA, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.ETERNAL_FLOETTE, - Species.GALAR_MEOWTH, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_FARFETCHD, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.GALAR_YAMASK, - Species.GALAR_STUNFISK, + [MoveId.SNORE]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.CATERPIE, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.PORYGON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.YANMA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.KINGDRA, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.WURMPLE, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.NOSEPASS, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.KRICKETOT, + SpeciesId.KRICKETUNE, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.BURMY, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.COMBEE, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.CHATOT, + SpeciesId.SPIRITOMB, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.BASCULIN, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.MARACTUS, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.STUNFISK, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.XURKITREE, + SpeciesId.CELESTEELA, + SpeciesId.KARTANA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.STAKATAKA, + SpeciesId.BLACEPHALON, + SpeciesId.ZERAORA, + SpeciesId.MELTAN, + SpeciesId.MELMETAL, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.WOOLOO, + SpeciesId.DUBWOOL, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.TOXEL, + SpeciesId.TOXTRICITY, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.SIRFETCHD, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.MILCERY, + SpeciesId.ALCREMIE, + SpeciesId.FALINKS, + SpeciesId.PINCURCHIN, + SpeciesId.SNOM, + SpeciesId.FROSMOTH, + SpeciesId.STONJOURNER, + SpeciesId.EISCUE, + SpeciesId.INDEEDEE, + SpeciesId.MORPEKO, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.DURALUDON, + SpeciesId.DREEPY, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.ETERNATUS, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.REGIELEKI, + SpeciesId.REGIDRAGO, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.CALYREX, + SpeciesId.URSALUNA, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_YAMASK, + SpeciesId.GALAR_STUNFISK, ], - [Moves.CURSE]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.SEEL, - Species.DEWGONG, - Species.GRIMER, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.ONIX, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.VOLTORB, - Species.ELECTRODE, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.PORYGON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.YANMA, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.KINGDRA, - Species.PHANPY, - Species.DONPHAN, - Species.PORYGON2, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.HARIYAMA, - Species.NOSEPASS, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.GULPIN, - Species.SWALOT, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.CACNEA, - Species.CACTURNE, - Species.ZANGOOSE, - Species.SEVIPER, - Species.WHISCASH, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.TROPIUS, - Species.CHIMECHO, - Species.ABSOL, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.BIDOOF, - Species.BIBAREL, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.SHELLOS, - Species.GASTRODON, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.CHINGLING, - Species.BONSLY, - Species.SPIRITOMB, - Species.MUNCHLAX, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.YANMEGA, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.PORYGON_Z, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.GIRATINA, - Species.DARKRAI, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.MUNNA, - Species.MUSHARNA, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.DRILBUR, - Species.EXCADRILL, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TRUBBISH, - Species.GARBODOR, - Species.SAWSBUCK, - Species.FERROSEED, - Species.FERROTHORN, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.BEARTIC, - Species.SHELMET, - Species.ACCELGOR, - Species.STUNFISK, - Species.GOLETT, - Species.GOLURK, - Species.HEATMOR, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.TYRUNT, - Species.TYRANTRUM, - Species.SYLVEON, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.BERGMITE, - Species.AVALUGG, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.GUMSHOOS, - Species.MUDBRAY, - Species.MUDSDALE, - Species.PASSIMIAN, - Species.SANDYGAST, - Species.PALOSSAND, - Species.PYUKUMUKU, - Species.KOMALA, - Species.TURTONATOR, - Species.MIMIKYU, - Species.SKWOVET, - Species.GREEDENT, - Species.CORVIKNIGHT, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.APPLETUN, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.PERRSERKER, - Species.CURSOLA, - Species.RUNERIGUS, - Species.PINCURCHIN, - Species.STONJOURNER, - Species.CUFANT, - Species.COPPERAJAH, - Species.DREEPY, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.GLASTRIER, - Species.SPECTRIER, + [MoveId.CURSE]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.PORYGON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.YANMA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.KINGDRA, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.HARIYAMA, + SpeciesId.NOSEPASS, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.WHISCASH, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.CHINGLING, + SpeciesId.BONSLY, + SpeciesId.SPIRITOMB, + SpeciesId.MUNCHLAX, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.PORYGON_Z, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.GIRATINA, + SpeciesId.DARKRAI, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.SAWSBUCK, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.BEARTIC, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.STUNFISK, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.HEATMOR, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.SYLVEON, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.GUMSHOOS, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.PASSIMIAN, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.PYUKUMUKU, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.MIMIKYU, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.CORVIKNIGHT, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.APPLETUN, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.RUNERIGUS, + SpeciesId.PINCURCHIN, + SpeciesId.STONJOURNER, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DREEPY, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", "shadow", ], - Species.WYRDEER, - Species.KLEAVOR, - Species.URSALUNA, - Species.OVERQWIL, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.LECHONK, - Species.OINKOLOGNE, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.CERULEDGE, - Species.MABOSSTIFF, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.BOMBIRDIER, - Species.VAROOM, - Species.REVAVROOM, - Species.ORTHWORM, - Species.CETODDLE, - Species.CETITAN, - Species.DONDOZO, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.SLITHER_WING, - Species.IRON_THORNS, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.OKIDOGI, - Species.HYDRAPPLE, - Species.PECHARUNT, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.GALAR_MEOWTH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_WEEZING, - Species.GALAR_SLOWKING, - Species.GALAR_YAMASK, - Species.GALAR_STUNFISK, - Species.HISUI_ELECTRODE, - Species.HISUI_TYPHLOSION, - Species.HISUI_QWILFISH, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, + SpeciesId.WYRDEER, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.OVERQWIL, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.CERULEDGE, + SpeciesId.MABOSSTIFF, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.BOMBIRDIER, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.ORTHWORM, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.DONDOZO, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.SLITHER_WING, + SpeciesId.IRON_THORNS, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.OKIDOGI, + SpeciesId.HYDRAPPLE, + SpeciesId.PECHARUNT, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_YAMASK, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, ], - [Moves.REVERSAL]: [ - Species.RATTATA, - Species.RATICATE, - Species.PIKACHU, - Species.RAICHU, - Species.DIGLETT, - Species.DUGTRIO, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWRATH, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.RHYHORN, - Species.RHYDON, - Species.KANGASKHAN, - Species.SCYTHER, - Species.PINSIR, - Species.TAUROS, - Species.MEWTWO, - Species.MEW, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.SENTRET, - Species.FURRET, - Species.PICHU, - Species.YANMA, - Species.PINECO, - Species.FORRETRESS, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.SNEASEL, - Species.SWINUB, - Species.PILOSWINE, - Species.DELIBIRD, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.HITMONTOP, - Species.MILTANK, - Species.ENTEI, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.BRELOOM, - Species.VIGOROTH, - Species.SLAKING, - Species.MAKUHITA, - Species.HARIYAMA, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.ZANGOOSE, - Species.SEVIPER, - Species.MONFERNO, - Species.INFERNAPE, - Species.VESPIQUEN, - Species.LOPUNNY, - Species.RIOLU, - Species.LUCARIO, - Species.CROAGUNK, - Species.TOXICROAK, - Species.WEAVILE, - Species.RHYPERIOR, - Species.YANMEGA, - Species.MAMOSWINE, - Species.GALLADE, - Species.VICTINI, - Species.PIGNITE, - Species.EMBOAR, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.THROH, - Species.SAWK, - Species.DARMANITAN, - Species.SCRAFTY, - Species.ESCAVALIER, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.BEARTIC, - Species.ACCELGOR, - Species.MIENFOO, - Species.MIENSHAO, - Species.BISHARP, - Species.BOUFFALANT, - Species.BRAVIARY, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.KELDEO, - Species.MELOETTA, - Species.CHESNAUGHT, - Species.PANGORO, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.MALAMAR, - Species.HAWLUCHA, - Species.ZYGARDE, - Species.INCINEROAR, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ORICORIO, + [MoveId.REVERSAL]: [ + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWRATH, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.KANGASKHAN, + SpeciesId.SCYTHER, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.PICHU, + SpeciesId.YANMA, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.DELIBIRD, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.HITMONTOP, + SpeciesId.MILTANK, + SpeciesId.ENTEI, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.BRELOOM, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.VESPIQUEN, + SpeciesId.LOPUNNY, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.WEAVILE, + SpeciesId.RHYPERIOR, + SpeciesId.YANMEGA, + SpeciesId.MAMOSWINE, + SpeciesId.GALLADE, + SpeciesId.VICTINI, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.DARMANITAN, + SpeciesId.SCRAFTY, + SpeciesId.ESCAVALIER, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.BEARTIC, + SpeciesId.ACCELGOR, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.BRAVIARY, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.CHESNAUGHT, + SpeciesId.PANGORO, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.MALAMAR, + SpeciesId.HAWLUCHA, + SpeciesId.ZYGARDE, + SpeciesId.INCINEROAR, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ORICORIO, [ - Species.LYCANROC, + SpeciesId.LYCANROC, "midnight", "dusk", ], - Species.BEWEAR, - Species.PASSIMIAN, - Species.SILVALLY, - Species.KOMALA, - Species.TOGEDEMARU, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.BUZZWOLE, - Species.MARSHADOW, - Species.ZERAORA, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.WOOLOO, - Species.DUBWOOL, - Species.CRAMORANT, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.OBSTAGOON, - Species.FALINKS, - Species.PINCURCHIN, - Species.EISCUE, - Species.MORPEKO, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.KUBFU, - Species.URSHIFU, - Species.REGIDRAGO, - Species.KLEAVOR, - Species.SNEASLER, - Species.OVERQWIL, - Species.QUAQUAVAL, - Species.SPIDOPS, - Species.LOKIX, - Species.SQUAWKABILLY, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.KLAWF, - Species.PALAFIN, - Species.FLAMIGO, - Species.ANNIHILAPE, - Species.KINGAMBIT, - Species.GREAT_TUSK, - Species.SLITHER_WING, - Species.IRON_HANDS, - Species.IRON_VALIANT, - Species.KORAIDON, - Species.IRON_LEAVES, - Species.OKIDOGI, - Species.OGERPON, - Species.GOUGING_FIRE, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, + SpeciesId.BEWEAR, + SpeciesId.PASSIMIAN, + SpeciesId.SILVALLY, + SpeciesId.KOMALA, + SpeciesId.TOGEDEMARU, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.BUZZWOLE, + SpeciesId.MARSHADOW, + SpeciesId.ZERAORA, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.WOOLOO, + SpeciesId.DUBWOOL, + SpeciesId.CRAMORANT, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.OBSTAGOON, + SpeciesId.FALINKS, + SpeciesId.PINCURCHIN, + SpeciesId.EISCUE, + SpeciesId.MORPEKO, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.REGIDRAGO, + SpeciesId.KLEAVOR, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.QUAQUAVAL, + SpeciesId.SPIDOPS, + SpeciesId.LOKIX, + SpeciesId.SQUAWKABILLY, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.KLAWF, + SpeciesId.PALAFIN, + SpeciesId.FLAMIGO, + SpeciesId.ANNIHILAPE, + SpeciesId.KINGAMBIT, + SpeciesId.GREAT_TUSK, + SpeciesId.SLITHER_WING, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_VALIANT, + SpeciesId.KORAIDON, + SpeciesId.IRON_LEAVES, + SpeciesId.OKIDOGI, + SpeciesId.OGERPON, + SpeciesId.GOUGING_FIRE, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, [ - Species.LYCANROC, + SpeciesId.LYCANROC, "midnight", "dusk", ], - Species.GALAR_ZAPDOS, - Species.GALAR_DARMANITAN, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_TYPHLOSION, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.HISUI_BRAVIARY, - Species.HISUI_DECIDUEYE, - Species.PALDEA_TAUROS, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.PALDEA_TAUROS, [ - Species.BASCULIN, + SpeciesId.BASCULIN, "blue-striped", "red-striped", ], ], - [Moves.SPITE]: [ - Species.EKANS, - Species.ARBOK, - Species.VULPIX, - Species.NINETALES, - Species.MEOWTH, - Species.PERSIAN, - Species.MANKEY, - Species.PRIMEAPE, - Species.MUK, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.KANGASKHAN, - Species.TAUROS, - Species.GYARADOS, - Species.MEWTWO, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.SPINARAK, - Species.ARIADOS, - Species.AIPOM, - Species.UMBREON, - Species.MURKROW, - Species.MISDREAVUS, - Species.DUNSPARCE, - Species.QWILFISH, - Species.SNEASEL, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.STANTLER, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.SABLEYE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.CARVANHA, - Species.SHARPEDO, - Species.CACNEA, - Species.CACTURNE, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.TROPIUS, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.VESPIQUEN, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.SPIRITOMB, - Species.CROAGUNK, - Species.TOXICROAK, - Species.WEAVILE, - Species.RHYPERIOR, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.GIRATINA, - Species.DARKRAI, - Species.PURRLOIN, - Species.LIEPARD, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TRUBBISH, - Species.GARBODOR, - Species.ZORUA, - Species.ZOROARK, - Species.FRILLISH, - Species.JELLICENT, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.STUNFISK, - Species.PAWNIARD, - Species.BISHARP, - Species.VULLABY, - Species.MANDIBUZZ, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.PANCHAM, - Species.PANGORO, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.INKAY, - Species.MALAMAR, - Species.SKRELP, - Species.DRAGALGE, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.ZYGARDE, - Species.DECIDUEYE, - Species.MAREANIE, - Species.TOXAPEX, - Species.ORANGURU, - Species.GOLISOPOD, - Species.SANDYGAST, - Species.PALOSSAND, - Species.PYUKUMUKU, - Species.MIMIKYU, - Species.DHELMISE, - Species.LUNALA, - Species.NIHILEGO, - Species.BLACEPHALON, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.PERRSERKER, - Species.CURSOLA, - Species.MORPEKO, - Species.WYRDEER, - Species.BASCULEGION, - Species.SNEASLER, - Species.OVERQWIL, - Species.LOKIX, - Species.CHARCADET, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.MABOSSTIFF, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.ANNIHILAPE, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.FLUTTER_MANE, - Species.WO_CHIEN, - Species.CHIEN_PAO, - Species.TING_LU, - Species.CHI_YU, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.PECHARUNT, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_MAROWAK, - Species.MAROWAK, - Species.GALAR_MEOWTH, - Species.GALAR_WEEZING, - Species.GALAR_MOLTRES, - Species.GALAR_CORSOLA, - Species.GALAR_STUNFISK, - Species.HISUI_TYPHLOSION, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, + [MoveId.SPITE]: [ + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.MUK, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.KANGASKHAN, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.AIPOM, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.MISDREAVUS, + SpeciesId.DUNSPARCE, + SpeciesId.QWILFISH, + SpeciesId.SNEASEL, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.STANTLER, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.SABLEYE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.VESPIQUEN, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.SPIRITOMB, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.WEAVILE, + SpeciesId.RHYPERIOR, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.GIRATINA, + SpeciesId.DARKRAI, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.STUNFISK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.ZYGARDE, + SpeciesId.DECIDUEYE, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.ORANGURU, + SpeciesId.GOLISOPOD, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.PYUKUMUKU, + SpeciesId.MIMIKYU, + SpeciesId.DHELMISE, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.BLACEPHALON, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.MORPEKO, + SpeciesId.WYRDEER, + SpeciesId.BASCULEGION, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.LOKIX, + SpeciesId.CHARCADET, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.MABOSSTIFF, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.ANNIHILAPE, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.FLUTTER_MANE, + SpeciesId.WO_CHIEN, + SpeciesId.CHIEN_PAO, + SpeciesId.TING_LU, + SpeciesId.CHI_YU, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.PECHARUNT, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.MAROWAK, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, ], - [Moves.PROTECT]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.SEEL, - Species.DEWGONG, - Species.GRIMER, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.ONIX, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.VOLTORB, - Species.ELECTRODE, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.PORYGON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.YANMA, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.KINGDRA, - Species.PHANPY, - Species.DONPHAN, - Species.PORYGON2, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.NOSEPASS, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.FEEBAS, - Species.MILOTIC, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.TROPIUS, - Species.CHIMECHO, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.BIDOOF, - Species.BIBAREL, - Species.KRICKETUNE, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.BUDEW, - Species.ROSERADE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.BURMY, - Species.WORMADAM, - Species.MOTHIM, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.CHERUBI, - Species.CHERRIM, - Species.SHELLOS, - Species.GASTRODON, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.STUNKY, - Species.SKUNTANK, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.MIME_JR, - Species.HAPPINY, - Species.CHATOT, - Species.SPIRITOMB, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.CARNIVINE, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.YANMEGA, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.PORYGON_Z, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.PHIONE, - Species.MANAPHY, - Species.DARKRAI, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.MUNNA, - Species.MUSHARNA, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.WOOBAT, - Species.SWOOBAT, - Species.DRILBUR, - Species.EXCADRILL, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.BASCULIN, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.MARACTUS, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.TRUBBISH, - Species.GARBODOR, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.DUCKLETT, - Species.SWANNA, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.JOLTIK, - Species.GALVANTULA, - Species.FERROSEED, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.SHELMET, - Species.ACCELGOR, - Species.STUNFISK, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.DURANT, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.KELDEO, - Species.MELOETTA, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.SPEWPA, - Species.VIVILLON, - Species.LITLEO, - Species.PYROAR, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.ESPURR, - Species.MEOWSTIC, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.CARBINK, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.BERGMITE, - Species.AVALUGG, - Species.NOIBAT, - Species.NOIVERN, - Species.XERNEAS, - Species.YVELTAL, - Species.ZYGARDE, - Species.DIANCIE, - Species.HOOPA, - Species.VOLCANION, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.MUDBRAY, - Species.MUDSDALE, - Species.DEWPIDER, - Species.ARAQUANID, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.SALANDIT, - Species.SALAZZLE, - Species.STUFFUL, - Species.BEWEAR, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.PASSIMIAN, - Species.WIMPOD, - Species.GOLISOPOD, - Species.SANDYGAST, - Species.PALOSSAND, - Species.PYUKUMUKU, - Species.TYPE_NULL, - Species.SILVALLY, - Species.MINIOR, - Species.KOMALA, - Species.TURTONATOR, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.BRUXISH, - Species.DRAMPA, - Species.DHELMISE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.SOLGALEO, - Species.LUNALA, - Species.NIHILEGO, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.XURKITREE, - Species.CELESTEELA, - Species.KARTANA, - Species.GUZZLORD, - Species.NECROZMA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.POIPOLE, - Species.NAGANADEL, - Species.STAKATAKA, - Species.BLACEPHALON, - Species.ZERAORA, - Species.MELTAN, - Species.MELMETAL, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.SKWOVET, - Species.GREEDENT, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.DOTTLER, - Species.ORBEETLE, - Species.NICKIT, - Species.THIEVUL, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.WOOLOO, - Species.DUBWOOL, - Species.CHEWTLE, - Species.DREDNAW, - Species.YAMPER, - Species.BOLTUND, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.FLAPPLE, - Species.APPLETUN, - Species.SILICOBRA, - Species.SANDACONDA, - Species.CRAMORANT, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.TOXEL, - Species.TOXTRICITY, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.CURSOLA, - Species.SIRFETCHD, - Species.MR_RIME, - Species.RUNERIGUS, - Species.MILCERY, - Species.ALCREMIE, - Species.FALINKS, - Species.PINCURCHIN, - Species.SNOM, - Species.FROSMOTH, - Species.STONJOURNER, - Species.EISCUE, - Species.INDEEDEE, - Species.MORPEKO, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.DURALUDON, - Species.DREEPY, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.ETERNATUS, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.REGIELEKI, - Species.REGIDRAGO, - Species.GLASTRIER, - Species.SPECTRIER, - Species.CALYREX, - Species.WYRDEER, - Species.KLEAVOR, - Species.URSALUNA, - Species.BASCULEGION, - Species.SNEASLER, - Species.OVERQWIL, - Species.ENAMORUS, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.LECHONK, - Species.OINKOLOGNE, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.NYMBLE, - Species.LOKIX, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.FIDOUGH, - Species.DACHSBUN, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.SQUAWKABILLY, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.CHARCADET, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.TADBULB, - Species.BELLIBOLT, - Species.WATTREL, - Species.KILOWATTREL, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.SHROODLE, - Species.GRAFAIAI, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.KLAWF, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.RELLOR, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.WIGLETT, - Species.WUGTRIO, - Species.BOMBIRDIER, - Species.FINIZEN, - Species.PALAFIN, - Species.VAROOM, - Species.REVAVROOM, - Species.CYCLIZAR, - Species.ORTHWORM, - Species.GLIMMET, - Species.GLIMMORA, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.FLAMIGO, - Species.CETODDLE, - Species.CETITAN, - Species.VELUZA, - Species.DONDOZO, - Species.TATSUGIRI, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.BRUTE_BONNET, - Species.FLUTTER_MANE, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_BUNDLE, - Species.IRON_HANDS, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.IRON_THORNS, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.GIMMIGHOUL, - Species.GHOLDENGO, - Species.WO_CHIEN, - Species.CHIEN_PAO, - Species.TING_LU, - Species.CHI_YU, - Species.ROARING_MOON, - Species.IRON_VALIANT, - Species.KORAIDON, - Species.MIRAIDON, - Species.WALKING_WAKE, - Species.IRON_LEAVES, - Species.DIPPLIN, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.OGERPON, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.TERAPAGOS, - Species.PECHARUNT, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.ETERNAL_FLOETTE, - Species.GALAR_MEOWTH, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_FARFETCHD, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.GALAR_YAMASK, - Species.GALAR_STUNFISK, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_TYPHLOSION, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.HISUI_DECIDUEYE, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + [MoveId.PROTECT]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.PORYGON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.YANMA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.KINGDRA, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.NOSEPASS, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.KRICKETUNE, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.BURMY, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.CHATOT, + SpeciesId.SPIRITOMB, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.BASCULIN, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.MARACTUS, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.STUNFISK, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.SPEWPA, + SpeciesId.VIVILLON, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.PYUKUMUKU, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.XURKITREE, + SpeciesId.CELESTEELA, + SpeciesId.KARTANA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.STAKATAKA, + SpeciesId.BLACEPHALON, + SpeciesId.ZERAORA, + SpeciesId.MELTAN, + SpeciesId.MELMETAL, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.WOOLOO, + SpeciesId.DUBWOOL, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.TOXEL, + SpeciesId.TOXTRICITY, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.SIRFETCHD, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.MILCERY, + SpeciesId.ALCREMIE, + SpeciesId.FALINKS, + SpeciesId.PINCURCHIN, + SpeciesId.SNOM, + SpeciesId.FROSMOTH, + SpeciesId.STONJOURNER, + SpeciesId.EISCUE, + SpeciesId.INDEEDEE, + SpeciesId.MORPEKO, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.DURALUDON, + SpeciesId.DREEPY, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.ETERNATUS, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.REGIELEKI, + SpeciesId.REGIDRAGO, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.BASCULEGION, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.ENAMORUS, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.SQUAWKABILLY, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.CHARCADET, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.KLAWF, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.BOMBIRDIER, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.CYCLIZAR, + SpeciesId.ORTHWORM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.FLAMIGO, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.VELUZA, + SpeciesId.DONDOZO, + SpeciesId.TATSUGIRI, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.BRUTE_BONNET, + SpeciesId.FLUTTER_MANE, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_THORNS, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.GIMMIGHOUL, + SpeciesId.GHOLDENGO, + SpeciesId.WO_CHIEN, + SpeciesId.CHIEN_PAO, + SpeciesId.TING_LU, + SpeciesId.CHI_YU, + SpeciesId.ROARING_MOON, + SpeciesId.IRON_VALIANT, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.IRON_LEAVES, + SpeciesId.DIPPLIN, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.OGERPON, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.TERAPAGOS, + SpeciesId.PECHARUNT, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_YAMASK, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.SCARY_FACE]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.RATICATE, - Species.SPEAROW, - Species.EKANS, - Species.ARBOK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWRATH, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.VICTREEBEL, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.GRIMER, - Species.MUK, - Species.CLOYSTER, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.ONIX, - Species.HYPNO, - Species.ELECTRODE, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.SCYTHER, - Species.MAGMAR, - Species.TAUROS, - Species.GYARADOS, - Species.FLAREON, - Species.AERODACTYL, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.NOCTOWL, - Species.SPINARAK, - Species.ARIADOS, - Species.UMBREON, - Species.MURKROW, - Species.MISDREAVUS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SCIZOR, - Species.SNEASEL, - Species.URSARING, - Species.SWINUB, - Species.PILOSWINE, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.DONPHAN, - Species.STANTLER, - Species.MAGBY, - Species.ENTEI, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.NUZLEAF, - Species.SHIFTRY, - Species.MASQUERAIN, - Species.VIGOROTH, - Species.SLAKING, - Species.HARIYAMA, - Species.AGGRON, - Species.MANECTRIC, - Species.CARVANHA, - Species.SHARPEDO, - Species.NUMEL, - Species.CAMERUPT, - Species.CACNEA, - Species.CACTURNE, - Species.SEVIPER, - Species.WHISCASH, - Species.CRAWDAUNT, - Species.SHUPPET, - Species.BANETTE, - Species.GLALIE, - Species.HUNTAIL, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.TORTERRA, - Species.INFERNAPE, - Species.EMPOLEON, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.VESPIQUEN, - Species.FLOATZEL, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.STUNKY, - Species.SKUNTANK, - Species.SPIRITOMB, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.LUCARIO, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.ABOMASNOW, - Species.WEAVILE, - Species.RHYPERIOR, - Species.MAGMORTAR, - Species.YANMEGA, - Species.GLISCOR, - Species.MAMOSWINE, - Species.FROSLASS, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.GIRATINA, - Species.CRESSELIA, - Species.ARCEUS, - Species.SAMUROTT, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.THROH, - Species.SAWK, - Species.BASCULIN, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.COFAGRIGUS, - Species.ARCHEN, - Species.ARCHEOPS, - Species.ZORUA, - Species.ZOROARK, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.AMOONGUSS, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.BEARTIC, - Species.CRYOGONAL, - Species.DRUDDIGON, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.COBALION, - Species.TERRAKION, - Species.TORNADUS, - Species.THUNDURUS, - Species.LANDORUS, - Species.KYUREM, - Species.CHESNAUGHT, - Species.PANGORO, - Species.MALAMAR, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAWITZER, - Species.TYRUNT, - Species.TYRANTRUM, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.AVALUGG, - Species.NOIVERN, - Species.HOOPA, - Species.VOLCANION, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.CRABOMINABLE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.TOXAPEX, - Species.MUDSDALE, - Species.LURANTIS, - Species.SALANDIT, - Species.SALAZZLE, - Species.ORANGURU, - Species.PASSIMIAN, - Species.SANDYGAST, - Species.PALOSSAND, - Species.TYPE_NULL, - Species.SILVALLY, - Species.BRUXISH, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_BULU, - Species.SOLGALEO, - Species.LUNALA, - Species.NECROZMA, - Species.ZERAORA, - Species.THWACKEY, - Species.RILLABOOM, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.CHEWTLE, - Species.DREDNAW, - Species.FLAPPLE, - Species.SILICOBRA, - Species.SANDACONDA, - Species.BARRASKEWDA, - Species.TOXTRICITY, - Species.GRAPPLOCT, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.RUNERIGUS, - Species.MORPEKO, - Species.COPPERAJAH, - Species.DURALUDON, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.ETERNATUS, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.GLASTRIER, - Species.SPECTRIER, - Species.CALYREX, - Species.WYRDEER, - Species.KLEAVOR, - Species.URSALUNA, - Species.BASCULEGION, - Species.OVERQWIL, - Species.ENAMORUS, - Species.SKELEDIRGE, - Species.SPIDOPS, - Species.LOKIX, - Species.DACHSBUN, - Species.SQUAWKABILLY, - Species.KILOWATTREL, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.GRAFAIAI, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.KLAWF, - Species.SCOVILLAIN, - Species.BOMBIRDIER, - Species.VAROOM, - Species.REVAVROOM, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.DONDOZO, - Species.ANNIHILAPE, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.BRUTE_BONNET, - Species.IRON_TREADS, - Species.IRON_HANDS, - Species.IRON_JUGULIS, - Species.IRON_THORNS, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.WO_CHIEN, - Species.CHIEN_PAO, - Species.TING_LU, - Species.CHI_YU, - Species.ROARING_MOON, - Species.KORAIDON, - Species.MIRAIDON, - Species.WALKING_WAKE, - Species.IRON_LEAVES, - Species.OKIDOGI, - Species.OGERPON, - Species.ARCHALUDON, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.ALOLA_RATICATE, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.GALAR_SLOWBRO, - Species.GALAR_WEEZING, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_ELECTRODE, - Species.HISUI_QWILFISH, - Species.HISUI_SAMUROTT, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.HISUI_DECIDUEYE, - Species.PALDEA_TAUROS, - Species.BLOODMOON_URSALUNA, + [MoveId.SCARY_FACE]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWRATH, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.VICTREEBEL, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.CLOYSTER, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.HYPNO, + SpeciesId.ELECTRODE, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.SCYTHER, + SpeciesId.MAGMAR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.FLAREON, + SpeciesId.AERODACTYL, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.NOCTOWL, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.MISDREAVUS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.SNEASEL, + SpeciesId.URSARING, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.DONPHAN, + SpeciesId.STANTLER, + SpeciesId.MAGBY, + SpeciesId.ENTEI, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.MASQUERAIN, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.HARIYAMA, + SpeciesId.AGGRON, + SpeciesId.MANECTRIC, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SEVIPER, + SpeciesId.WHISCASH, + SpeciesId.CRAWDAUNT, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.GLALIE, + SpeciesId.HUNTAIL, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.TORTERRA, + SpeciesId.INFERNAPE, + SpeciesId.EMPOLEON, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.VESPIQUEN, + SpeciesId.FLOATZEL, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.SPIRITOMB, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.LUCARIO, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.RHYPERIOR, + SpeciesId.MAGMORTAR, + SpeciesId.YANMEGA, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.FROSLASS, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.ARCEUS, + SpeciesId.SAMUROTT, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.BASCULIN, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.COFAGRIGUS, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.AMOONGUSS, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.DRUDDIGON, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.CHESNAUGHT, + SpeciesId.PANGORO, + SpeciesId.MALAMAR, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAWITZER, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.AVALUGG, + SpeciesId.NOIVERN, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.CRABOMINABLE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.TOXAPEX, + SpeciesId.MUDSDALE, + SpeciesId.LURANTIS, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.BRUXISH, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_BULU, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NECROZMA, + SpeciesId.ZERAORA, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.FLAPPLE, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.BARRASKEWDA, + SpeciesId.TOXTRICITY, + SpeciesId.GRAPPLOCT, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.RUNERIGUS, + SpeciesId.MORPEKO, + SpeciesId.COPPERAJAH, + SpeciesId.DURALUDON, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.ETERNATUS, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.BASCULEGION, + SpeciesId.OVERQWIL, + SpeciesId.ENAMORUS, + SpeciesId.SKELEDIRGE, + SpeciesId.SPIDOPS, + SpeciesId.LOKIX, + SpeciesId.DACHSBUN, + SpeciesId.SQUAWKABILLY, + SpeciesId.KILOWATTREL, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.GRAFAIAI, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.KLAWF, + SpeciesId.SCOVILLAIN, + SpeciesId.BOMBIRDIER, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.DONDOZO, + SpeciesId.ANNIHILAPE, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.BRUTE_BONNET, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_THORNS, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.WO_CHIEN, + SpeciesId.CHIEN_PAO, + SpeciesId.TING_LU, + SpeciesId.CHI_YU, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.IRON_LEAVES, + SpeciesId.OKIDOGI, + SpeciesId.OGERPON, + SpeciesId.ARCHALUDON, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.PALDEA_TAUROS, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.SLUDGE_BOMB]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.BEEDRILL, - Species.RATTATA, - Species.RATICATE, - Species.EKANS, - Species.ARBOK, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.ZUBAT, - Species.GOLBAT, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.DIGLETT, - Species.DUGTRIO, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GRIMER, - Species.MUK, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.KOFFING, - Species.WEEZING, - Species.TANGELA, - Species.MEW, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.BELLOSSOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.WOOPER, - Species.QUAGSIRE, - Species.GLIGAR, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SHUCKLE, - Species.OCTILLERY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.DUSTOX, - Species.SHROOMISH, - Species.BRELOOM, - Species.MAWILE, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.TORKOAL, - Species.SEVIPER, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.LILEEP, - Species.CRADILY, - Species.METANG, - Species.METAGROSS, - Species.BUDEW, - Species.ROSERADE, - Species.VESPIQUEN, - Species.GASTRODON, - Species.STUNKY, - Species.SKUNTANK, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.CARNIVINE, - Species.TANGROWTH, - Species.GLISCOR, - Species.DARKRAI, - Species.ARCEUS, - Species.DRILBUR, - Species.EXCADRILL, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.TRUBBISH, - Species.GARBODOR, - Species.ZORUA, - Species.ZOROARK, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FRILLISH, - Species.JELLICENT, - Species.SHELMET, - Species.ACCELGOR, - Species.STUNFISK, - Species.DRUDDIGON, - Species.TORNADUS, - Species.THUNDURUS, - Species.LANDORUS, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.PANCHAM, - Species.PANGORO, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.VOLCANION, - Species.MAREANIE, - Species.TOXAPEX, - Species.MORELULL, - Species.SHIINOTIC, - Species.SALANDIT, - Species.SALAZZLE, - Species.GOLISOPOD, - Species.SANDYGAST, - Species.PALOSSAND, - Species.NIHILEGO, - Species.GUZZLORD, - Species.POIPOLE, - Species.NAGANADEL, - Species.TOXTRICITY, - Species.ETERNATUS, - Species.SNEASLER, - Species.OVERQWIL, - Species.ENAMORUS, - Species.SHROODLE, - Species.GRAFAIAI, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.RELLOR, - Species.RABSCA, - Species.VAROOM, - Species.REVAVROOM, - Species.GLIMMET, - Species.GLIMMORA, - Species.CLODSIRE, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.PECHARUNT, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.GALAR_SLOWBRO, - Species.GALAR_WEEZING, - Species.GALAR_SLOWKING, - Species.GALAR_STUNFISK, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.PALDEA_WOOPER, + [MoveId.SLUDGE_BOMB]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.BEEDRILL, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.TANGELA, + SpeciesId.MEW, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.BELLOSSOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.GLIGAR, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SHUCKLE, + SpeciesId.OCTILLERY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.DUSTOX, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.MAWILE, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.TORKOAL, + SpeciesId.SEVIPER, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.VESPIQUEN, + SpeciesId.GASTRODON, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.TANGROWTH, + SpeciesId.GLISCOR, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.STUNFISK, + SpeciesId.DRUDDIGON, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.LANDORUS, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.VOLCANION, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.GOLISOPOD, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.NIHILEGO, + SpeciesId.GUZZLORD, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.TOXTRICITY, + SpeciesId.ETERNATUS, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.ENAMORUS, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.CLODSIRE, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.PECHARUNT, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.PALDEA_WOOPER, ], - [Moves.MUD_SLAP]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.GRIMER, - Species.MUK, - Species.ONIX, - Species.KRABBY, - Species.KINGLER, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.GOLDEEN, - Species.SEAKING, - Species.MR_MIME, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.KABUTO, - Species.KABUTOPS, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.AIPOM, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.GIRAFARIG, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.SHUCKLE, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.PHANPY, - Species.DONPHAN, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.LOMBRE, - Species.LUDICOLO, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.NOSEPASS, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.CARVANHA, - Species.SHARPEDO, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.GRUMPIG, - Species.SPINDA, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.MILOTIC, - Species.KECLEON, - Species.BANETTE, - Species.DUSCLOPS, - Species.TROPIUS, - Species.ABSOL, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.BIDOOF, - Species.BIBAREL, - Species.KRICKETOT, - Species.KRICKETUNE, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.BUDEW, - Species.ROSERADE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.MOTHIM, - Species.COMBEE, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.SHELLOS, - Species.GASTRODON, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.STUNKY, - Species.SKUNTANK, - Species.BONSLY, - Species.MIME_JR, - Species.HAPPINY, - Species.CHATOT, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.CARNIVINE, - Species.MANTYKE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.YANMEGA, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.PHIONE, - Species.MANAPHY, - Species.DARKRAI, - Species.SHAYMIN, - Species.ARCEUS, - Species.LILLIPUP, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.DRILBUR, - Species.EXCADRILL, - Species.TYMPOLE, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.MINCCINO, - Species.CUBCHOO, - Species.BEARTIC, - Species.SHELMET, - Species.STUNFISK, - Species.GOLETT, - Species.GOLURK, - Species.BOUFFALANT, - Species.LANDORUS, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.LITLEO, - Species.PYROAR, - Species.SKIDDO, - Species.GOGOAT, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ROCKRUFF, + [MoveId.MUD_SLAP]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.ONIX, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.AIPOM, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.GIRAFARIG, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SHUCKLE, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.NOSEPASS, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.MILOTIC, + SpeciesId.KECLEON, + SpeciesId.BANETTE, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.ABSOL, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.KRICKETOT, + SpeciesId.KRICKETUNE, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.MOTHIM, + SpeciesId.COMBEE, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.CHATOT, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.MANTYKE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.LILLIPUP, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.TYMPOLE, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.MINCCINO, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.SHELMET, + SpeciesId.STUNFISK, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.BOUFFALANT, + SpeciesId.LANDORUS, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ROCKRUFF, [ - Species.LYCANROC, + SpeciesId.LYCANROC, "midday", "midnight", ], - Species.MUDBRAY, - Species.MUDSDALE, - Species.SALANDIT, - Species.SALAZZLE, - Species.SANDYGAST, - Species.PALOSSAND, - Species.CINDERACE, - Species.SKWOVET, - Species.GREEDENT, - Species.ROLYCOLY, - Species.CARKOL, - Species.SILICOBRA, - Species.SANDACONDA, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.LECHONK, - Species.OINKOLOGNE, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.FIDOUGH, - Species.DACHSBUN, - Species.TADBULB, - Species.BELLIBOLT, - Species.SHROODLE, - Species.GRAFAIAI, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.KLAWF, - Species.RELLOR, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.WIGLETT, - Species.WUGTRIO, - Species.CYCLIZAR, - Species.ORTHWORM, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.CLODSIRE, - Species.DUDUNSPARCE, - Species.GREAT_TUSK, - Species.IRON_TREADS, - Species.WO_CHIEN, - Species.TING_LU, - Species.KORAIDON, - Species.MUNKIDORI, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.CINDERACE, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.KLAWF, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.CYCLIZAR, + SpeciesId.ORTHWORM, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.CLODSIRE, + SpeciesId.DUDUNSPARCE, + SpeciesId.GREAT_TUSK, + SpeciesId.IRON_TREADS, + SpeciesId.WO_CHIEN, + SpeciesId.TING_LU, + SpeciesId.KORAIDON, + SpeciesId.MUNKIDORI, [ - Species.WORMADAM, + SpeciesId.WORMADAM, "sandy", ], - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_MAROWAK, - Species.GALAR_STUNFISK, - Species.PALDEA_WOOPER, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_STUNFISK, + SpeciesId.PALDEA_WOOPER, ], - [Moves.SPIKES]: [ - Species.SANDSHREW, - Species.SANDSLASH, - Species.SHELLDER, - Species.CLOYSTER, - Species.OMANYTE, - Species.OMASTAR, - Species.MEW, - Species.SUDOWOODO, - Species.WOOPER, - Species.QUAGSIRE, - Species.PINECO, - Species.FORRETRESS, - Species.GLIGAR, - Species.QWILFISH, - Species.HERACROSS, - Species.DELIBIRD, - Species.SKARMORY, - Species.ROSELIA, - Species.CACNEA, - Species.CACTURNE, - Species.WHISCASH, - Species.SNORUNT, - Species.GLALIE, - Species.GROUDON, - Species.BUDEW, - Species.ROSERADE, - Species.VESPIQUEN, - Species.GASTRODON, - Species.BONSLY, - Species.GARCHOMP, - Species.GLISCOR, - Species.FROSLASS, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.MARACTUS, - Species.DWEBBLE, - Species.CRUSTLE, - Species.TRUBBISH, - Species.GARBODOR, - Species.FERROSEED, - Species.FERROTHORN, - Species.SHELMET, - Species.ACCELGOR, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.CARBINK, - Species.KLEFKI, - Species.DIANCIE, - Species.WIMPOD, - Species.GOLISOPOD, - Species.MAGEARNA, - Species.NAGANADEL, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.PINCURCHIN, - Species.OVERQWIL, - Species.MEOWSCARADA, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.ORTHWORM, - Species.GLIMMET, - Species.GLIMMORA, - Species.CLODSIRE, - Species.SANDY_SHOCKS, - Species.IRON_THORNS, - Species.TING_LU, - Species.OGERPON, + [MoveId.SPIKES]: [ + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.MEW, + SpeciesId.SUDOWOODO, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.GLIGAR, + SpeciesId.QWILFISH, + SpeciesId.HERACROSS, + SpeciesId.DELIBIRD, + SpeciesId.SKARMORY, + SpeciesId.ROSELIA, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.WHISCASH, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.GROUDON, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.VESPIQUEN, + SpeciesId.GASTRODON, + SpeciesId.BONSLY, + SpeciesId.GARCHOMP, + SpeciesId.GLISCOR, + SpeciesId.FROSLASS, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.MARACTUS, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.CARBINK, + SpeciesId.KLEFKI, + SpeciesId.DIANCIE, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.MAGEARNA, + SpeciesId.NAGANADEL, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.PINCURCHIN, + SpeciesId.OVERQWIL, + SpeciesId.MEOWSCARADA, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.ORTHWORM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.CLODSIRE, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_THORNS, + SpeciesId.TING_LU, + SpeciesId.OGERPON, [ - Species.DEOXYS, + SpeciesId.DEOXYS, "defense", ], - Species.ALOLA_SANDSLASH, - Species.HISUI_QWILFISH, - Species.PALDEA_WOOPER, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.HISUI_QWILFISH, + SpeciesId.PALDEA_WOOPER, ], - [Moves.ICY_WIND]: [ - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.RATTATA, - Species.RATICATE, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.SEEL, - Species.DEWGONG, - Species.SHELLDER, - Species.CLOYSTER, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.KRABBY, - Species.KINGLER, - Species.CUBONE, - Species.MAROWAK, - Species.LICKITUNG, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.JYNX, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.VAPOREON, - Species.PORYGON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.SNORLAX, - Species.ARTICUNO, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.CHINCHOU, - Species.LANTURN, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.MARILL, - Species.AZUMARILL, - Species.POLITOED, - Species.WOOPER, - Species.QUAGSIRE, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.QWILFISH, - Species.SNEASEL, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.KINGDRA, - Species.PORYGON2, - Species.SMOOCHUM, - Species.MILTANK, - Species.BLISSEY, - Species.SUICUNE, - Species.TYRANITAR, - Species.LUGIA, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.ZIGZAGOON, - Species.LINOONE, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SHIFTRY, - Species.WINGULL, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.AZURILL, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.AGGRON, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.ZANGOOSE, - Species.LUNATONE, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.FEEBAS, - Species.MILOTIC, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.CHIMECHO, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.METANG, - Species.METAGROSS, - Species.REGICE, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.RAYQUAZA, - Species.JIRACHI, + [MoveId.ICY_WIND]: [ + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.LICKITUNG, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.VAPOREON, + SpeciesId.PORYGON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.POLITOED, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.QWILFISH, + SpeciesId.SNEASEL, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.KINGDRA, + SpeciesId.PORYGON2, + SpeciesId.SMOOCHUM, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.SUICUNE, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SHIFTRY, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.AZURILL, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.AGGRON, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.ZANGOOSE, + SpeciesId.LUNATONE, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGICE, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, [ - Species.DEOXYS, + SpeciesId.DEOXYS, "", "speed", ], - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.BIDOOF, - Species.BIBAREL, - Species.BUIZEL, - Species.FLOATZEL, - Species.SHELLOS, - Species.GASTRODON, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.CHINGLING, - Species.MIME_JR, - Species.HAPPINY, - Species.SPIRITOMB, - Species.MUNCHLAX, - Species.CROAGUNK, - Species.TOXICROAK, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.GLACEON, - Species.MAMOSWINE, - Species.PORYGON_Z, - Species.GALLADE, - Species.DUSKNOIR, - Species.FROSLASS, - Species.PALKIA, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.PHIONE, - Species.MANAPHY, - Species.DARKRAI, - Species.ARCEUS, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PANPOUR, - Species.SIMIPOUR, - Species.AUDINO, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.BASCULIN, - Species.SIGILYPH, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.DUCKLETT, - Species.SWANNA, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.GOLETT, - Species.GOLURK, - Species.TORNADUS, - Species.KYUREM, - Species.KELDEO, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.AMAURA, - Species.AURORUS, - Species.BERGMITE, - Species.AVALUGG, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.CRABOMINABLE, - Species.ORICORIO, - Species.MAREANIE, - Species.TOXAPEX, - Species.DEWPIDER, - Species.ARAQUANID, - Species.GOLISOPOD, - Species.TYPE_NULL, - Species.SILVALLY, - Species.BRUXISH, - Species.DRAMPA, - Species.TAPU_FINI, - Species.LUNALA, - Species.PHEROMOSA, - Species.INTELEON, - Species.CRAMORANT, - Species.OBSTAGOON, - Species.CURSOLA, - Species.MR_RIME, - Species.SNOM, - Species.FROSMOTH, - Species.EISCUE, - Species.ARCTOZOLT, - Species.ARCTOVISH, - Species.GLASTRIER, - Species.BASCULEGION, - Species.OVERQWIL, - Species.QUAQUAVAL, - Species.BOMBIRDIER, - Species.FINIZEN, - Species.PALAFIN, - Species.CETODDLE, - Species.CETITAN, - Species.VELUZA, - Species.TATSUGIRI, - Species.FLUTTER_MANE, - Species.IRON_BUNDLE, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.CHIEN_PAO, - Species.IRON_VALIANT, - Species.FEZANDIPITI, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_MAROWAK, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.CHINGLING, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.SPIRITOMB, + SpeciesId.MUNCHLAX, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.GLACEON, + SpeciesId.MAMOSWINE, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.PALKIA, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.AUDINO, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.BASCULIN, + SpeciesId.SIGILYPH, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.TORNADUS, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.CRABOMINABLE, + SpeciesId.ORICORIO, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.GOLISOPOD, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.TAPU_FINI, + SpeciesId.LUNALA, + SpeciesId.PHEROMOSA, + SpeciesId.INTELEON, + SpeciesId.CRAMORANT, + SpeciesId.OBSTAGOON, + SpeciesId.CURSOLA, + SpeciesId.MR_RIME, + SpeciesId.SNOM, + SpeciesId.FROSMOTH, + SpeciesId.EISCUE, + SpeciesId.ARCTOZOLT, + SpeciesId.ARCTOVISH, + SpeciesId.GLASTRIER, + SpeciesId.BASCULEGION, + SpeciesId.OVERQWIL, + SpeciesId.QUAQUAVAL, + SpeciesId.BOMBIRDIER, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.VELUZA, + SpeciesId.TATSUGIRI, + SpeciesId.FLUTTER_MANE, + SpeciesId.IRON_BUNDLE, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.CHIEN_PAO, + SpeciesId.IRON_VALIANT, + SpeciesId.FEZANDIPITI, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", ], - Species.HISUI_QWILFISH, - Species.HISUI_SAMUROTT, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.HISUI_AVALUGG, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_AVALUGG, ], - [Moves.OUTRAGE]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.BEEDRILL, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.MAROWAK, - Species.RHYDON, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.SNORLAX, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEW, - Species.MEGANIUM, - Species.FERALIGATR, - Species.AMPHAROS, - Species.GRANBULL, - Species.KINGDRA, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.SCEPTILE, - Species.SWAMPERT, - Species.VIGOROTH, - Species.SLAKING, - Species.EXPLOUD, - Species.AGGRON, - Species.VIBRAVA, - Species.FLYGON, - Species.SWABLU, - Species.ALTARIA, - Species.BARBOACH, - Species.WHISCASH, - Species.TROPIUS, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.LATIAS, - Species.LATIOS, - Species.RAYQUAZA, - Species.TORTERRA, - Species.RAMPARDOS, - Species.BASTIODON, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.ABOMASNOW, - Species.RHYPERIOR, - Species.DIALGA, - Species.PALKIA, - Species.GIRATINA, - Species.ARCEUS, - Species.SERPERIOR, - Species.KROOKODILE, - Species.SCRAFTY, - Species.ARCHEOPS, - Species.EELEKTROSS, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.DRUDDIGON, - Species.BOUFFALANT, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.PANGORO, - Species.SKRELP, - Species.DRAGALGE, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.NOIBAT, - Species.NOIVERN, - Species.XERNEAS, - Species.ZYGARDE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.SILVALLY, - Species.TURTONATOR, - Species.DRAMPA, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.SOLGALEO, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.GUZZLORD, - Species.NECROZMA, - Species.MARSHADOW, - Species.NAGANADEL, - Species.ZERAORA, - Species.FLAPPLE, - Species.APPLETUN, - Species.SANDACONDA, - Species.MORPEKO, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.DRACOVISH, - Species.DURALUDON, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ETERNATUS, - Species.REGIDRAGO, - Species.GLASTRIER, - Species.BASCULEGION, - Species.ENAMORUS, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.MABOSSTIFF, - Species.PALAFIN, - Species.CYCLIZAR, - Species.DONDOZO, - Species.TATSUGIRI, - Species.ANNIHILAPE, - Species.DUDUNSPARCE, - Species.BRUTE_BONNET, - Species.IRON_JUGULIS, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.ROARING_MOON, - Species.KORAIDON, - Species.MIRAIDON, - Species.WALKING_WAKE, - Species.DIPPLIN, - Species.OKIDOGI, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, + [MoveId.OUTRAGE]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.BEEDRILL, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.MAROWAK, + SpeciesId.RHYDON, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.SNORLAX, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.MEGANIUM, + SpeciesId.FERALIGATR, + SpeciesId.AMPHAROS, + SpeciesId.GRANBULL, + SpeciesId.KINGDRA, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.SCEPTILE, + SpeciesId.SWAMPERT, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.EXPLOUD, + SpeciesId.AGGRON, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.TROPIUS, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.RAYQUAZA, + SpeciesId.TORTERRA, + SpeciesId.RAMPARDOS, + SpeciesId.BASTIODON, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.ABOMASNOW, + SpeciesId.RHYPERIOR, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.GIRATINA, + SpeciesId.ARCEUS, + SpeciesId.SERPERIOR, + SpeciesId.KROOKODILE, + SpeciesId.SCRAFTY, + SpeciesId.ARCHEOPS, + SpeciesId.EELEKTROSS, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.DRUDDIGON, + SpeciesId.BOUFFALANT, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.PANGORO, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.ZYGARDE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.SILVALLY, + SpeciesId.TURTONATOR, + SpeciesId.DRAMPA, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.SOLGALEO, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MARSHADOW, + SpeciesId.NAGANADEL, + SpeciesId.ZERAORA, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.SANDACONDA, + SpeciesId.MORPEKO, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.DURALUDON, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ETERNATUS, + SpeciesId.REGIDRAGO, + SpeciesId.GLASTRIER, + SpeciesId.BASCULEGION, + SpeciesId.ENAMORUS, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.MABOSSTIFF, + SpeciesId.PALAFIN, + SpeciesId.CYCLIZAR, + SpeciesId.DONDOZO, + SpeciesId.TATSUGIRI, + SpeciesId.ANNIHILAPE, + SpeciesId.DUDUNSPARCE, + SpeciesId.BRUTE_BONNET, + SpeciesId.IRON_JUGULIS, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.DIPPLIN, + SpeciesId.OKIDOGI, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, [ - Species.LYCANROC, + SpeciesId.LYCANROC, "midnight", "dusk", ], [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", ], - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.PALDEA_TAUROS, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.PALDEA_TAUROS, ], - [Moves.SANDSTORM]: [ - Species.CHARIZARD, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.DIGLETT, - Species.DUGTRIO, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.MAGNEMITE, - Species.MAGNETON, - Species.GRIMER, - Species.MUK, - Species.ONIX, - Species.CUBONE, - Species.MAROWAK, - Species.LICKITUNG, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.TAUROS, - Species.GYARADOS, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.SUDOWOODO, - Species.WOOPER, - Species.QUAGSIRE, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SCIZOR, - Species.SHUCKLE, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.SKARMORY, - Species.PHANPY, - Species.DONPHAN, - Species.HITMONTOP, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.NOSEPASS, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.CASTFORM, - Species.ABSOL, - Species.RELICANTH, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.TORTERRA, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.SHELLOS, - Species.GASTRODON, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.GLISCOR, - Species.MAMOSWINE, - Species.PROBOPASS, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.ARCEUS, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.DRILBUR, - Species.EXCADRILL, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DWEBBLE, - Species.CRUSTLE, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.ACCELGOR, - Species.STUNFISK, - Species.PAWNIARD, - Species.BISHARP, - Species.MANDIBUZZ, - Species.DURANT, - Species.COBALION, - Species.TERRAKION, - Species.TORNADUS, - Species.LANDORUS, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.BINACLE, - Species.BARBARACLE, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.CARBINK, - Species.KLEFKI, - Species.ZYGARDE, - Species.DIANCIE, - Species.HOOPA, - Species.VOLCANION, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.ORICORIO, - Species.ROCKRUFF, - Species.LYCANROC, - Species.MUDBRAY, - Species.MUDSDALE, - Species.SANDYGAST, - Species.PALOSSAND, - Species.TYPE_NULL, - Species.SILVALLY, - Species.MINIOR, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.NIHILEGO, - Species.STAKATAKA, - Species.DREDNAW, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.SILICOBRA, - Species.SANDACONDA, - Species.CURSOLA, - Species.RUNERIGUS, - Species.STONJOURNER, - Species.CUFANT, - Species.COPPERAJAH, - Species.ZAMAZENTA, - Species.KLEAVOR, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.KLAWF, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.WIGLETT, - Species.WUGTRIO, - Species.BOMBIRDIER, - Species.VAROOM, - Species.REVAVROOM, - Species.ORTHWORM, - Species.GLIMMET, - Species.GLIMMORA, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.CLODSIRE, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_THORNS, - Species.GHOLDENGO, - Species.TING_LU, - Species.OGERPON, - Species.IRON_BOULDER, + [MoveId.SANDSTORM]: [ + SpeciesId.CHARIZARD, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.ONIX, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.LICKITUNG, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.SUDOWOODO, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.SKARMORY, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.HITMONTOP, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.NOSEPASS, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.CASTFORM, + SpeciesId.ABSOL, + SpeciesId.RELICANTH, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.TORTERRA, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.PROBOPASS, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.ARCEUS, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.ACCELGOR, + SpeciesId.STUNFISK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.MANDIBUZZ, + SpeciesId.DURANT, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.TORNADUS, + SpeciesId.LANDORUS, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.CARBINK, + SpeciesId.KLEFKI, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.ORICORIO, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.MINIOR, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.NIHILEGO, + SpeciesId.STAKATAKA, + SpeciesId.DREDNAW, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.CURSOLA, + SpeciesId.RUNERIGUS, + SpeciesId.STONJOURNER, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.ZAMAZENTA, + SpeciesId.KLEAVOR, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.KLAWF, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.BOMBIRDIER, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.ORTHWORM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.CLODSIRE, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_THORNS, + SpeciesId.GHOLDENGO, + SpeciesId.TING_LU, + SpeciesId.OGERPON, + SpeciesId.IRON_BOULDER, [ - Species.WORMADAM, + SpeciesId.WORMADAM, "sandy", ], - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_MAROWAK, - Species.GALAR_SLOWBRO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.GALAR_CORSOLA, - Species.GALAR_YAMASK, - Species.GALAR_STUNFISK, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_YAMASK, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, ], - [Moves.GIGA_DRAIN]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.EKANS, - Species.ARBOK, - Species.ZUBAT, - Species.GOLBAT, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GRIMER, - Species.MUK, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.TANGELA, - Species.KABUTO, - Species.KABUTOPS, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.NATU, - Species.XATU, - Species.BELLOSSOM, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.SUNKERN, - Species.SUNFLORA, - Species.YANMA, - Species.PINECO, - Species.FORRETRESS, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.SABLEYE, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.ZANGOOSE, - Species.SEVIPER, - Species.LILEEP, - Species.CRADILY, - Species.TROPIUS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.KRICKETUNE, - Species.BUDEW, - Species.ROSERADE, - Species.WORMADAM, - Species.MOTHIM, - Species.CHERUBI, - Species.CHERRIM, - Species.CARNIVINE, - Species.SNOVER, - Species.ABOMASNOW, - Species.TANGROWTH, - Species.YANMEGA, - Species.LEAFEON, - Species.UXIE, - Species.SHAYMIN, - Species.ARCEUS, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.PANSAGE, - Species.SIMISAGE, - Species.WOOBAT, - Species.SWOOBAT, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.MARACTUS, - Species.TRUBBISH, - Species.GARBODOR, - Species.DEERLING, - Species.SAWSBUCK, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FRILLISH, - Species.JELLICENT, - Species.JOLTIK, - Species.GALVANTULA, - Species.FERROSEED, - Species.FERROTHORN, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.SHELMET, - Species.ACCELGOR, - Species.HEATMOR, - Species.LARVESTA, - Species.VOLCARONA, - Species.VIRIZION, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.VIVILLON, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.DEWPIDER, - Species.ARAQUANID, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.SANDYGAST, - Species.PALOSSAND, - Species.MIMIKYU, - Species.DHELMISE, - Species.TAPU_BULU, - Species.CELESTEELA, - Species.KARTANA, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.ORBEETLE, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.FLAPPLE, - Species.APPLETUN, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.CURSOLA, - Species.ALCREMIE, - Species.FROSMOTH, - Species.ZARUDE, - Species.CALYREX, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.BRUTE_BONNET, - Species.SLITHER_WING, - Species.WO_CHIEN, - Species.IRON_LEAVES, - Species.DIPPLIN, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.OGERPON, - Species.HYDRAPPLE, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ETERNAL_FLOETTE, - Species.GALAR_CORSOLA, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_LILLIGANT, - Species.HISUI_DECIDUEYE, + [MoveId.GIGA_DRAIN]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.TANGELA, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.BELLOSSOM, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.YANMA, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.SABLEYE, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.TROPIUS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.KRICKETUNE, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.CARNIVINE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.TANGROWTH, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.UXIE, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.MARACTUS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.HEATMOR, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.VIRIZION, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.VIVILLON, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.MIMIKYU, + SpeciesId.DHELMISE, + SpeciesId.TAPU_BULU, + SpeciesId.CELESTEELA, + SpeciesId.KARTANA, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.ORBEETLE, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.CURSOLA, + SpeciesId.ALCREMIE, + SpeciesId.FROSMOTH, + SpeciesId.ZARUDE, + SpeciesId.CALYREX, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.BRUTE_BONNET, + SpeciesId.SLITHER_WING, + SpeciesId.WO_CHIEN, + SpeciesId.IRON_LEAVES, + SpeciesId.DIPPLIN, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.OGERPON, + SpeciesId.HYDRAPPLE, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_CORSOLA, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.ENDURE]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.SEEL, - Species.DEWGONG, - Species.GRIMER, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.ONIX, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.VOLTORB, - Species.ELECTRODE, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.PORYGON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.YANMA, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.KINGDRA, - Species.PHANPY, - Species.DONPHAN, - Species.PORYGON2, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.NOSEPASS, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.FEEBAS, - Species.MILOTIC, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.TROPIUS, - Species.CHIMECHO, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.BIDOOF, - Species.BIBAREL, - Species.KRICKETUNE, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.BUDEW, - Species.ROSERADE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.WORMADAM, - Species.MOTHIM, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.CHERUBI, - Species.CHERRIM, - Species.SHELLOS, - Species.GASTRODON, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.STUNKY, - Species.SKUNTANK, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.MIME_JR, - Species.HAPPINY, - Species.CHATOT, - Species.SPIRITOMB, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.CARNIVINE, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.YANMEGA, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.PORYGON_Z, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.PHIONE, - Species.MANAPHY, - Species.DARKRAI, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.MUNNA, - Species.MUSHARNA, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.BLITZLE, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.WOOBAT, - Species.SWOOBAT, - Species.DRILBUR, - Species.EXCADRILL, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.BASCULIN, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.MARACTUS, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.TRUBBISH, - Species.GARBODOR, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.DUCKLETT, - Species.SWANNA, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.JOLTIK, - Species.GALVANTULA, - Species.FERROSEED, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.SHELMET, - Species.ACCELGOR, - Species.STUNFISK, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.DURANT, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.KELDEO, - Species.MELOETTA, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.LITLEO, - Species.PYROAR, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.ESPURR, - Species.MEOWSTIC, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.CARBINK, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.BERGMITE, - Species.AVALUGG, - Species.NOIBAT, - Species.NOIVERN, - Species.XERNEAS, - Species.YVELTAL, - Species.ZYGARDE, - Species.DIANCIE, - Species.HOOPA, - Species.VOLCANION, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.MUDBRAY, - Species.MUDSDALE, - Species.DEWPIDER, - Species.ARAQUANID, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.SALANDIT, - Species.SALAZZLE, - Species.STUFFUL, - Species.BEWEAR, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.PASSIMIAN, - Species.WIMPOD, - Species.GOLISOPOD, - Species.SANDYGAST, - Species.PALOSSAND, - Species.PYUKUMUKU, - Species.TYPE_NULL, - Species.SILVALLY, - Species.KOMALA, - Species.TURTONATOR, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.BRUXISH, - Species.DRAMPA, - Species.DHELMISE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.SOLGALEO, - Species.LUNALA, - Species.NIHILEGO, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.XURKITREE, - Species.CELESTEELA, - Species.KARTANA, - Species.GUZZLORD, - Species.NECROZMA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.POIPOLE, - Species.NAGANADEL, - Species.STAKATAKA, - Species.BLACEPHALON, - Species.ZERAORA, - Species.MELTAN, - Species.MELMETAL, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.SKWOVET, - Species.GREEDENT, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.DOTTLER, - Species.ORBEETLE, - Species.NICKIT, - Species.THIEVUL, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.WOOLOO, - Species.DUBWOOL, - Species.CHEWTLE, - Species.DREDNAW, - Species.YAMPER, - Species.BOLTUND, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.FLAPPLE, - Species.APPLETUN, - Species.SILICOBRA, - Species.SANDACONDA, - Species.CRAMORANT, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.TOXEL, - Species.TOXTRICITY, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.CURSOLA, - Species.SIRFETCHD, - Species.MR_RIME, - Species.RUNERIGUS, - Species.MILCERY, - Species.ALCREMIE, - Species.FALINKS, - Species.PINCURCHIN, - Species.SNOM, - Species.FROSMOTH, - Species.STONJOURNER, - Species.EISCUE, - Species.INDEEDEE, - Species.MORPEKO, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.DURALUDON, - Species.DREEPY, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.ETERNATUS, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.REGIELEKI, - Species.REGIDRAGO, - Species.GLASTRIER, - Species.SPECTRIER, - Species.CALYREX, - Species.WYRDEER, - Species.KLEAVOR, - Species.URSALUNA, - Species.SNEASLER, - Species.OVERQWIL, - Species.ENAMORUS, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.LECHONK, - Species.OINKOLOGNE, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.NYMBLE, - Species.LOKIX, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.FIDOUGH, - Species.DACHSBUN, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.SQUAWKABILLY, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.CHARCADET, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.TADBULB, - Species.BELLIBOLT, - Species.WATTREL, - Species.KILOWATTREL, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.SHROODLE, - Species.GRAFAIAI, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.KLAWF, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.RELLOR, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.WIGLETT, - Species.WUGTRIO, - Species.BOMBIRDIER, - Species.FINIZEN, - Species.PALAFIN, - Species.VAROOM, - Species.REVAVROOM, - Species.CYCLIZAR, - Species.ORTHWORM, - Species.GLIMMET, - Species.GLIMMORA, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.FLAMIGO, - Species.CETODDLE, - Species.CETITAN, - Species.VELUZA, - Species.DONDOZO, - Species.TATSUGIRI, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.BRUTE_BONNET, - Species.FLUTTER_MANE, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.IRON_BUNDLE, - Species.IRON_HANDS, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.IRON_THORNS, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.GIMMIGHOUL, - Species.GHOLDENGO, - Species.WO_CHIEN, - Species.CHIEN_PAO, - Species.TING_LU, - Species.CHI_YU, - Species.ROARING_MOON, - Species.IRON_VALIANT, - Species.KORAIDON, - Species.MIRAIDON, - Species.WALKING_WAKE, - Species.IRON_LEAVES, - Species.DIPPLIN, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.OGERPON, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.TERAPAGOS, - Species.PECHARUNT, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.ETERNAL_FLOETTE, - Species.GALAR_MEOWTH, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_FARFETCHD, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.GALAR_YAMASK, - Species.GALAR_STUNFISK, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_TYPHLOSION, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.HISUI_DECIDUEYE, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + [MoveId.ENDURE]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.PORYGON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.YANMA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.KINGDRA, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.NOSEPASS, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.KRICKETUNE, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.CHATOT, + SpeciesId.SPIRITOMB, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.BLITZLE, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.BASCULIN, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.MARACTUS, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.STUNFISK, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.PYUKUMUKU, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.XURKITREE, + SpeciesId.CELESTEELA, + SpeciesId.KARTANA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.STAKATAKA, + SpeciesId.BLACEPHALON, + SpeciesId.ZERAORA, + SpeciesId.MELTAN, + SpeciesId.MELMETAL, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.WOOLOO, + SpeciesId.DUBWOOL, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.TOXEL, + SpeciesId.TOXTRICITY, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.SIRFETCHD, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.MILCERY, + SpeciesId.ALCREMIE, + SpeciesId.FALINKS, + SpeciesId.PINCURCHIN, + SpeciesId.SNOM, + SpeciesId.FROSMOTH, + SpeciesId.STONJOURNER, + SpeciesId.EISCUE, + SpeciesId.INDEEDEE, + SpeciesId.MORPEKO, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.DURALUDON, + SpeciesId.DREEPY, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.ETERNATUS, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.REGIELEKI, + SpeciesId.REGIDRAGO, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.ENAMORUS, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.SQUAWKABILLY, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.CHARCADET, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.KLAWF, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.BOMBIRDIER, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.CYCLIZAR, + SpeciesId.ORTHWORM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.FLAMIGO, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.VELUZA, + SpeciesId.DONDOZO, + SpeciesId.TATSUGIRI, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.BRUTE_BONNET, + SpeciesId.FLUTTER_MANE, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_THORNS, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.GIMMIGHOUL, + SpeciesId.GHOLDENGO, + SpeciesId.WO_CHIEN, + SpeciesId.CHIEN_PAO, + SpeciesId.TING_LU, + SpeciesId.CHI_YU, + SpeciesId.ROARING_MOON, + SpeciesId.IRON_VALIANT, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.IRON_LEAVES, + SpeciesId.DIPPLIN, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.OGERPON, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.TERAPAGOS, + SpeciesId.PECHARUNT, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_YAMASK, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.CHARM]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.PIKACHU, - Species.RAICHU, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.GROWLITHE, - Species.ARCANINE, - Species.PONYTA, - Species.RAPIDASH, - Species.CHANSEY, - Species.MR_MIME, - Species.JYNX, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.SNORLAX, - Species.MEW, - Species.SENTRET, - Species.FURRET, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.BELLOSSOM, - Species.MARILL, - Species.AZUMARILL, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.ESPEON, - Species.UMBREON, - Species.MISDREAVUS, - Species.WOBBUFFET, - Species.SNUBBULL, - Species.GRANBULL, - Species.TEDDIURSA, - Species.URSARING, - Species.SWINUB, - Species.PILOSWINE, - Species.PHANPY, - Species.DONPHAN, - Species.SMOOCHUM, - Species.MILTANK, - Species.BLISSEY, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SHROOMISH, - Species.BRELOOM, - Species.AZURILL, - Species.SKITTY, - Species.DELCATTY, - Species.PLUSLE, - Species.MINUN, - Species.ILLUMISE, - Species.NUMEL, - Species.CAMERUPT, - Species.CHIMECHO, - Species.WYNAUT, - Species.LUVDISC, - Species.LATIAS, - Species.JIRACHI, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.PACHIRISU, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.GLAMEOW, - Species.PURUGLY, - Species.MIME_JR, - Species.HAPPINY, - Species.MUNCHLAX, - Species.FINNEON, - Species.LUMINEON, - Species.TOGEKISS, - Species.LEAFEON, - Species.GLACEON, - Species.MAMOSWINE, - Species.GALLADE, - Species.FROSLASS, - Species.MESPRIT, - Species.PHIONE, - Species.MANAPHY, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.WOOBAT, - Species.SWOOBAT, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.CUBCHOO, - Species.BEARTIC, - Species.MELOETTA, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.FURFROU, - Species.MEOWSTIC, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.TYRUNT, - Species.TYRANTRUM, - Species.SYLVEON, - Species.DEDENNE, - Species.CARBINK, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.DIANCIE, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.STUFFUL, - Species.BEWEAR, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.KOMALA, - Species.MIMIKYU, - Species.TAPU_LELE, - Species.POIPOLE, - Species.NAGANADEL, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.YAMPER, - Species.BOLTUND, - Species.TOXEL, - Species.TOXTRICITY, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.PERRSERKER, - Species.MR_RIME, - Species.MILCERY, - Species.ALCREMIE, - Species.URSALUNA, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.FIDOUGH, - Species.DACHSBUN, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.FINIZEN, - Species.PALAFIN, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.CETODDLE, - Species.CETITAN, - Species.FLUTTER_MANE, - Species.FEZANDIPITI, - Species.OGERPON, - Species.ALOLA_RAICHU, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ETERNAL_FLOETTE, - Species.GALAR_MEOWTH, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_MR_MIME, + [MoveId.CHARM]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.CHANSEY, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.SNORLAX, + SpeciesId.MEW, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.BELLOSSOM, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MISDREAVUS, + SpeciesId.WOBBUFFET, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.SMOOCHUM, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.AZURILL, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.ILLUMISE, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.CHIMECHO, + SpeciesId.WYNAUT, + SpeciesId.LUVDISC, + SpeciesId.LATIAS, + SpeciesId.JIRACHI, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.PACHIRISU, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.MUNCHLAX, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.TOGEKISS, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.MAMOSWINE, + SpeciesId.GALLADE, + SpeciesId.FROSLASS, + SpeciesId.MESPRIT, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.MELOETTA, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.FURFROU, + SpeciesId.MEOWSTIC, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.SYLVEON, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.DIANCIE, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.KOMALA, + SpeciesId.MIMIKYU, + SpeciesId.TAPU_LELE, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.TOXEL, + SpeciesId.TOXTRICITY, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.PERRSERKER, + SpeciesId.MR_RIME, + SpeciesId.MILCERY, + SpeciesId.ALCREMIE, + SpeciesId.URSALUNA, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.FLUTTER_MANE, + SpeciesId.FEZANDIPITI, + SpeciesId.OGERPON, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_MR_MIME, [ - Species.INDEEDEE, + SpeciesId.INDEEDEE, "female", ], - Species.HISUI_LILLIGANT, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, ], - [Moves.FALSE_SWIPE]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.BEEDRILL, - Species.SPEAROW, - Species.FEAROW, - Species.SANDSHREW, - Species.SANDSLASH, - Species.PARAS, - Species.PARASECT, - Species.MEOWTH, - Species.PERSIAN, - Species.FARFETCHD, - Species.KRABBY, - Species.KINGLER, - Species.CUBONE, - Species.MAROWAK, - Species.SCYTHER, - Species.PINSIR, - Species.JOLTEON, - Species.MEW, - Species.GLIGAR, - Species.SCIZOR, - Species.HERACROSS, - Species.SNEASEL, - Species.GROVYLE, - Species.SCEPTILE, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.MAWILE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.ANORITH, - Species.ARMALDO, - Species.ABSOL, - Species.EMPOLEON, - Species.KRICKETUNE, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.SKORUPI, - Species.DRAPION, - Species.WEAVILE, - Species.GLISCOR, - Species.GALLADE, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.LEAVANNY, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.PAWNIARD, - Species.BISHARP, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.KELDEO, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.PANCHAM, - Species.PANGORO, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.BINACLE, - Species.BARBARACLE, - Species.HAWLUCHA, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.FOMANTIS, - Species.LURANTIS, - Species.GOLISOPOD, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.TAPU_BULU, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.KARTANA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.ZERAORA, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.CHEWTLE, - Species.DREDNAW, - Species.PERRSERKER, - Species.FALINKS, - Species.ZACIAN, - Species.URSHIFU, - Species.KLEAVOR, - Species.SNEASLER, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.CERULEDGE, - Species.KINGAMBIT, - Species.BAXCALIBUR, - Species.CHIEN_PAO, - Species.IRON_VALIANT, - Species.IRON_LEAVES, - Species.OGERPON, - Species.ALOLA_SANDSLASH, - Species.ALOLA_MAROWAK, - Species.GALAR_MEOWTH, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_DECIDUEYE, + [MoveId.FALSE_SWIPE]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.BEEDRILL, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.FARFETCHD, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.SCYTHER, + SpeciesId.PINSIR, + SpeciesId.JOLTEON, + SpeciesId.MEW, + SpeciesId.GLIGAR, + SpeciesId.SCIZOR, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.MAWILE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.ABSOL, + SpeciesId.EMPOLEON, + SpeciesId.KRICKETUNE, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.WEAVILE, + SpeciesId.GLISCOR, + SpeciesId.GALLADE, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.LEAVANNY, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.KELDEO, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.HAWLUCHA, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.GOLISOPOD, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_BULU, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.KARTANA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.ZERAORA, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.PERRSERKER, + SpeciesId.FALINKS, + SpeciesId.ZACIAN, + SpeciesId.URSHIFU, + SpeciesId.KLEAVOR, + SpeciesId.SNEASLER, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.CERULEDGE, + SpeciesId.KINGAMBIT, + SpeciesId.BAXCALIBUR, + SpeciesId.CHIEN_PAO, + SpeciesId.IRON_VALIANT, + SpeciesId.IRON_LEAVES, + SpeciesId.OGERPON, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_MEOWTH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.SWAGGER]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.SEEL, - Species.DEWGONG, - Species.GRIMER, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.ONIX, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.VOLTORB, - Species.ELECTRODE, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.PORYGON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.YANMA, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.KINGDRA, - Species.PHANPY, - Species.DONPHAN, - Species.PORYGON2, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.NOSEPASS, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.FEEBAS, - Species.MILOTIC, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.TROPIUS, - Species.CHIMECHO, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.BIDOOF, - Species.BIBAREL, - Species.KRICKETUNE, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.BUDEW, - Species.ROSERADE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.WORMADAM, - Species.MOTHIM, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.CHERUBI, - Species.CHERRIM, - Species.SHELLOS, - Species.GASTRODON, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.STUNKY, - Species.SKUNTANK, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.MIME_JR, - Species.HAPPINY, - Species.CHATOT, - Species.SPIRITOMB, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.CARNIVINE, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.YANMEGA, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.PORYGON_Z, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.PHIONE, - Species.MANAPHY, - Species.DARKRAI, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.MUNNA, - Species.MUSHARNA, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.WOOBAT, - Species.SWOOBAT, - Species.DRILBUR, - Species.EXCADRILL, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.BASCULIN, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.MARACTUS, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.TRUBBISH, - Species.GARBODOR, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.DUCKLETT, - Species.SWANNA, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.JOLTIK, - Species.GALVANTULA, - Species.FERROSEED, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.SHELMET, - Species.ACCELGOR, - Species.STUNFISK, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.DURANT, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.KELDEO, - Species.MELOETTA, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.LITLEO, - Species.PYROAR, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.ESPURR, - Species.MEOWSTIC, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.CARBINK, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.BERGMITE, - Species.AVALUGG, - Species.NOIBAT, - Species.NOIVERN, - Species.XERNEAS, - Species.YVELTAL, - Species.ZYGARDE, - Species.DIANCIE, - Species.HOOPA, - Species.VOLCANION, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.MUDBRAY, - Species.MUDSDALE, - Species.DEWPIDER, - Species.ARAQUANID, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.SALANDIT, - Species.SALAZZLE, - Species.STUFFUL, - Species.BEWEAR, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.PASSIMIAN, - Species.WIMPOD, - Species.GOLISOPOD, - Species.SANDYGAST, - Species.PALOSSAND, - Species.PYUKUMUKU, - Species.TYPE_NULL, - Species.SILVALLY, - Species.MINIOR, - Species.KOMALA, - Species.TURTONATOR, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.BRUXISH, - Species.DHELMISE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.SOLGALEO, - Species.LUNALA, - Species.NIHILEGO, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.XURKITREE, - Species.CELESTEELA, - Species.KARTANA, - Species.NECROZMA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.BLACEPHALON, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.WOOLOO, - Species.TOXTRICITY, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.PERRSERKER, - Species.MORPEKO, - Species.CUFANT, - Species.ZARUDE, - Species.SQUAWKABILLY, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.SHROODLE, - Species.VAROOM, - Species.REVAVROOM, - Species.ANNIHILAPE, - Species.CHI_YU, - Species.FEZANDIPITI, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.ETERNAL_FLOETTE, - Species.GALAR_MEOWTH, - Species.GALAR_SLOWKING, - Species.PALDEA_TAUROS, + [MoveId.SWAGGER]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.PORYGON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.YANMA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.KINGDRA, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.NOSEPASS, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.KRICKETUNE, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.CHATOT, + SpeciesId.SPIRITOMB, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.BASCULIN, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.MARACTUS, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.STUNFISK, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.PYUKUMUKU, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.DHELMISE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.XURKITREE, + SpeciesId.CELESTEELA, + SpeciesId.KARTANA, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.BLACEPHALON, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.WOOLOO, + SpeciesId.TOXTRICITY, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.PERRSERKER, + SpeciesId.MORPEKO, + SpeciesId.CUFANT, + SpeciesId.ZARUDE, + SpeciesId.SQUAWKABILLY, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.SHROODLE, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.ANNIHILAPE, + SpeciesId.CHI_YU, + SpeciesId.FEZANDIPITI, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_SLOWKING, + SpeciesId.PALDEA_TAUROS, ], - [Moves.STEEL_WING]: [ - Species.CHARIZARD, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.SPEAROW, - Species.FEAROW, - Species.ZUBAT, - Species.GOLBAT, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.SCYTHER, - Species.AERODACTYL, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRAGONITE, - Species.MEW, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.CROBAT, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.YANMA, - Species.MURKROW, - Species.GLIGAR, - Species.SCIZOR, - Species.DELIBIRD, - Species.SKARMORY, - Species.LUGIA, - Species.HO_OH, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.VIBRAVA, - Species.FLYGON, - Species.SWABLU, - Species.ALTARIA, - Species.TROPIUS, - Species.SALAMENCE, - Species.LATIAS, - Species.LATIOS, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.HONCHKROW, - Species.CHATOT, - Species.TOGEKISS, - Species.YANMEGA, - Species.GLISCOR, - Species.GIRATINA, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.WOOBAT, - Species.SWOOBAT, - Species.LEAVANNY, - Species.SIGILYPH, - Species.ARCHEN, - Species.ARCHEOPS, - Species.DUCKLETT, - Species.SWANNA, - Species.ELGYEM, - Species.BEHEEYEM, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HYDREIGON, - Species.RESHIRAM, - Species.ZEKROM, - Species.KYUREM, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.HAWLUCHA, - Species.NOIBAT, - Species.NOIVERN, - Species.YVELTAL, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.ORICORIO, - Species.SILVALLY, - Species.DRAMPA, - Species.TAPU_KOKO, - Species.CORVIKNIGHT, - Species.CRAMORANT, - Species.SIRFETCHD, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.GALAR_FARFETCHD, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, + [MoveId.STEEL_WING]: [ + SpeciesId.CHARIZARD, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SCYTHER, + SpeciesId.AERODACTYL, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.CROBAT, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.YANMA, + SpeciesId.MURKROW, + SpeciesId.GLIGAR, + SpeciesId.SCIZOR, + SpeciesId.DELIBIRD, + SpeciesId.SKARMORY, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.TROPIUS, + SpeciesId.SALAMENCE, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.HONCHKROW, + SpeciesId.CHATOT, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.GLISCOR, + SpeciesId.GIRATINA, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.LEAVANNY, + SpeciesId.SIGILYPH, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HYDREIGON, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.KYUREM, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.HAWLUCHA, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.YVELTAL, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.ORICORIO, + SpeciesId.SILVALLY, + SpeciesId.DRAMPA, + SpeciesId.TAPU_KOKO, + SpeciesId.CORVIKNIGHT, + SpeciesId.CRAMORANT, + SpeciesId.SIRFETCHD, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, ], - [Moves.ATTRACT]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.SEEL, - Species.DEWGONG, - Species.GRIMER, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.ONIX, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.YANMA, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.KINGDRA, - Species.PHANPY, - Species.DONPHAN, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINJASK, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.NOSEPASS, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.FEEBAS, - Species.MILOTIC, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.TROPIUS, - Species.CHIMECHO, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.LATIAS, - Species.LATIOS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.BIDOOF, - Species.BIBAREL, - Species.KRICKETUNE, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.BUDEW, - Species.ROSERADE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.WORMADAM, - Species.MOTHIM, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.CHERUBI, - Species.CHERRIM, - Species.SHELLOS, - Species.GASTRODON, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.STUNKY, - Species.SKUNTANK, - Species.BONSLY, - Species.MIME_JR, - Species.HAPPINY, - Species.CHATOT, - Species.SPIRITOMB, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.CARNIVINE, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.YANMEGA, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.HEATRAN, - Species.CRESSELIA, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.MUNNA, - Species.MUSHARNA, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.WOOBAT, - Species.SWOOBAT, - Species.DRILBUR, - Species.EXCADRILL, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.BASCULIN, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.MARACTUS, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.TRUBBISH, - Species.GARBODOR, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.DUCKLETT, - Species.SWANNA, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.JOLTIK, - Species.GALVANTULA, - Species.FERROSEED, - Species.FERROTHORN, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.SHELMET, - Species.ACCELGOR, - Species.STUNFISK, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.DURANT, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.TORNADUS, - Species.THUNDURUS, - Species.LANDORUS, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.LITLEO, - Species.PYROAR, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.ESPURR, - Species.MEOWSTIC, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.BERGMITE, - Species.AVALUGG, - Species.NOIBAT, - Species.NOIVERN, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.MUDBRAY, - Species.MUDSDALE, - Species.DEWPIDER, - Species.ARAQUANID, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.SALANDIT, - Species.SALAZZLE, - Species.STUFFUL, - Species.BEWEAR, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.PASSIMIAN, - Species.WIMPOD, - Species.GOLISOPOD, - Species.SANDYGAST, - Species.PALOSSAND, - Species.PYUKUMUKU, - Species.MINIOR, - Species.KOMALA, - Species.TURTONATOR, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.BRUXISH, - Species.DRAMPA, - Species.DHELMISE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.SKWOVET, - Species.GREEDENT, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.DOTTLER, - Species.ORBEETLE, - Species.NICKIT, - Species.THIEVUL, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.WOOLOO, - Species.DUBWOOL, - Species.CHEWTLE, - Species.DREDNAW, - Species.YAMPER, - Species.BOLTUND, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.APPLIN, - Species.FLAPPLE, - Species.APPLETUN, - Species.SILICOBRA, - Species.SANDACONDA, - Species.CRAMORANT, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.TOXEL, - Species.TOXTRICITY, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.CURSOLA, - Species.SIRFETCHD, - Species.MR_RIME, - Species.RUNERIGUS, - Species.MILCERY, - Species.ALCREMIE, - Species.PINCURCHIN, - Species.SNOM, - Species.FROSMOTH, - Species.STONJOURNER, - Species.EISCUE, - Species.INDEEDEE, - Species.MORPEKO, - Species.CUFANT, - Species.COPPERAJAH, - Species.DURALUDON, - Species.DREEPY, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.KUBFU, - Species.URSHIFU, - Species.WYRDEER, - Species.KLEAVOR, - Species.URSALUNA, - Species.BASCULEGION, - Species.SNEASLER, - Species.OVERQWIL, - Species.ENAMORUS, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.LECHONK, - Species.OINKOLOGNE, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.NYMBLE, - Species.LOKIX, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.FIDOUGH, - Species.DACHSBUN, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.SQUAWKABILLY, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.CHARCADET, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.TADBULB, - Species.BELLIBOLT, - Species.WATTREL, - Species.KILOWATTREL, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.SHROODLE, - Species.GRAFAIAI, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.KLAWF, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.RELLOR, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.WIGLETT, - Species.WUGTRIO, - Species.BOMBIRDIER, - Species.FINIZEN, - Species.PALAFIN, - Species.VAROOM, - Species.REVAVROOM, - Species.CYCLIZAR, - Species.ORTHWORM, - Species.GLIMMET, - Species.GLIMMORA, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.FLAMIGO, - Species.CETODDLE, - Species.CETITAN, - Species.VELUZA, - Species.DONDOZO, - Species.TATSUGIRI, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.DIPPLIN, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.OGERPON, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.TERAPAGOS, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.ETERNAL_FLOETTE, - Species.GALAR_MEOWTH, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_FARFETCHD, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.GALAR_YAMASK, - Species.GALAR_STUNFISK, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_TYPHLOSION, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.HISUI_DECIDUEYE, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + [MoveId.ATTRACT]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.YANMA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.KINGDRA, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINJASK, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.NOSEPASS, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.KRICKETUNE, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.CHATOT, + SpeciesId.SPIRITOMB, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.HEATRAN, + SpeciesId.CRESSELIA, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.BASCULIN, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.MARACTUS, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.STUNFISK, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.LANDORUS, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.PYUKUMUKU, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.WOOLOO, + SpeciesId.DUBWOOL, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.APPLIN, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.TOXEL, + SpeciesId.TOXTRICITY, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.SIRFETCHD, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.MILCERY, + SpeciesId.ALCREMIE, + SpeciesId.PINCURCHIN, + SpeciesId.SNOM, + SpeciesId.FROSMOTH, + SpeciesId.STONJOURNER, + SpeciesId.EISCUE, + SpeciesId.INDEEDEE, + SpeciesId.MORPEKO, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DURALUDON, + SpeciesId.DREEPY, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.WYRDEER, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.BASCULEGION, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.ENAMORUS, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.SQUAWKABILLY, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.CHARCADET, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.KLAWF, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.BOMBIRDIER, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.CYCLIZAR, + SpeciesId.ORTHWORM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.FLAMIGO, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.VELUZA, + SpeciesId.DONDOZO, + SpeciesId.TATSUGIRI, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.DIPPLIN, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.OGERPON, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_YAMASK, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.SLEEP_TALK]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.SEEL, - Species.DEWGONG, - Species.GRIMER, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.ONIX, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.VOLTORB, - Species.ELECTRODE, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.PORYGON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.YANMA, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.KINGDRA, - Species.PHANPY, - Species.DONPHAN, - Species.PORYGON2, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.NOSEPASS, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.FEEBAS, - Species.MILOTIC, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.TROPIUS, - Species.CHIMECHO, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.BIDOOF, - Species.BIBAREL, - Species.KRICKETUNE, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.BUDEW, - Species.ROSERADE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.WORMADAM, - Species.MOTHIM, - Species.COMBEE, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.CHERUBI, - Species.CHERRIM, - Species.SHELLOS, - Species.GASTRODON, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.STUNKY, - Species.SKUNTANK, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.MIME_JR, - Species.HAPPINY, - Species.CHATOT, - Species.SPIRITOMB, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.CARNIVINE, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.YANMEGA, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.PORYGON_Z, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.PHIONE, - Species.MANAPHY, - Species.DARKRAI, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.MUNNA, - Species.MUSHARNA, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.WOOBAT, - Species.SWOOBAT, - Species.DRILBUR, - Species.EXCADRILL, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.BASCULIN, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.MARACTUS, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.TRUBBISH, - Species.GARBODOR, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.DUCKLETT, - Species.SWANNA, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.JOLTIK, - Species.GALVANTULA, - Species.FERROSEED, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.SHELMET, - Species.ACCELGOR, - Species.STUNFISK, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.DURANT, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.KELDEO, - Species.MELOETTA, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.LITLEO, - Species.PYROAR, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.ESPURR, - Species.MEOWSTIC, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.CARBINK, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.BERGMITE, - Species.AVALUGG, - Species.NOIBAT, - Species.NOIVERN, - Species.XERNEAS, - Species.YVELTAL, - Species.ZYGARDE, - Species.DIANCIE, - Species.HOOPA, - Species.VOLCANION, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.MUDBRAY, - Species.MUDSDALE, - Species.DEWPIDER, - Species.ARAQUANID, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.SALANDIT, - Species.SALAZZLE, - Species.STUFFUL, - Species.BEWEAR, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.PASSIMIAN, - Species.WIMPOD, - Species.GOLISOPOD, - Species.SANDYGAST, - Species.PALOSSAND, - Species.PYUKUMUKU, - Species.TYPE_NULL, - Species.SILVALLY, - Species.MINIOR, - Species.KOMALA, - Species.TURTONATOR, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.BRUXISH, - Species.DRAMPA, - Species.DHELMISE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.SOLGALEO, - Species.LUNALA, - Species.NIHILEGO, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.XURKITREE, - Species.CELESTEELA, - Species.KARTANA, - Species.GUZZLORD, - Species.NECROZMA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.POIPOLE, - Species.NAGANADEL, - Species.STAKATAKA, - Species.BLACEPHALON, - Species.ZERAORA, - Species.MELTAN, - Species.MELMETAL, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.SKWOVET, - Species.GREEDENT, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.DOTTLER, - Species.ORBEETLE, - Species.NICKIT, - Species.THIEVUL, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.WOOLOO, - Species.DUBWOOL, - Species.CHEWTLE, - Species.DREDNAW, - Species.YAMPER, - Species.BOLTUND, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.FLAPPLE, - Species.APPLETUN, - Species.SILICOBRA, - Species.SANDACONDA, - Species.CRAMORANT, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.TOXEL, - Species.TOXTRICITY, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.CURSOLA, - Species.SIRFETCHD, - Species.MR_RIME, - Species.RUNERIGUS, - Species.MILCERY, - Species.ALCREMIE, - Species.FALINKS, - Species.PINCURCHIN, - Species.SNOM, - Species.FROSMOTH, - Species.STONJOURNER, - Species.EISCUE, - Species.INDEEDEE, - Species.MORPEKO, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.DURALUDON, - Species.DREEPY, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.ETERNATUS, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.REGIELEKI, - Species.REGIDRAGO, - Species.GLASTRIER, - Species.SPECTRIER, - Species.CALYREX, - Species.WYRDEER, - Species.KLEAVOR, - Species.URSALUNA, - Species.BASCULEGION, - Species.SNEASLER, - Species.OVERQWIL, - Species.ENAMORUS, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.LECHONK, - Species.OINKOLOGNE, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.NYMBLE, - Species.LOKIX, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.FIDOUGH, - Species.DACHSBUN, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.SQUAWKABILLY, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.CHARCADET, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.TADBULB, - Species.BELLIBOLT, - Species.WATTREL, - Species.KILOWATTREL, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.SHROODLE, - Species.GRAFAIAI, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.KLAWF, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.RELLOR, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.WIGLETT, - Species.WUGTRIO, - Species.BOMBIRDIER, - Species.FINIZEN, - Species.PALAFIN, - Species.VAROOM, - Species.REVAVROOM, - Species.CYCLIZAR, - Species.ORTHWORM, - Species.GLIMMET, - Species.GLIMMORA, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.FLAMIGO, - Species.CETODDLE, - Species.CETITAN, - Species.VELUZA, - Species.DONDOZO, - Species.TATSUGIRI, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.BRUTE_BONNET, - Species.FLUTTER_MANE, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_BUNDLE, - Species.IRON_HANDS, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.IRON_THORNS, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.GIMMIGHOUL, - Species.GHOLDENGO, - Species.WO_CHIEN, - Species.CHIEN_PAO, - Species.TING_LU, - Species.CHI_YU, - Species.ROARING_MOON, - Species.IRON_VALIANT, - Species.KORAIDON, - Species.MIRAIDON, - Species.WALKING_WAKE, - Species.IRON_LEAVES, - Species.DIPPLIN, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.OGERPON, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.TERAPAGOS, - Species.PECHARUNT, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.ETERNAL_FLOETTE, - Species.GALAR_MEOWTH, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_FARFETCHD, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.GALAR_YAMASK, - Species.GALAR_STUNFISK, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_TYPHLOSION, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.HISUI_DECIDUEYE, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + [MoveId.SLEEP_TALK]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.PORYGON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.YANMA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.KINGDRA, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.NOSEPASS, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.KRICKETUNE, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.COMBEE, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.CHATOT, + SpeciesId.SPIRITOMB, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.BASCULIN, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.MARACTUS, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.STUNFISK, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.PYUKUMUKU, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.XURKITREE, + SpeciesId.CELESTEELA, + SpeciesId.KARTANA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.STAKATAKA, + SpeciesId.BLACEPHALON, + SpeciesId.ZERAORA, + SpeciesId.MELTAN, + SpeciesId.MELMETAL, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.WOOLOO, + SpeciesId.DUBWOOL, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.TOXEL, + SpeciesId.TOXTRICITY, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.SIRFETCHD, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.MILCERY, + SpeciesId.ALCREMIE, + SpeciesId.FALINKS, + SpeciesId.PINCURCHIN, + SpeciesId.SNOM, + SpeciesId.FROSMOTH, + SpeciesId.STONJOURNER, + SpeciesId.EISCUE, + SpeciesId.INDEEDEE, + SpeciesId.MORPEKO, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.DURALUDON, + SpeciesId.DREEPY, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.ETERNATUS, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.REGIELEKI, + SpeciesId.REGIDRAGO, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.BASCULEGION, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.ENAMORUS, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.SQUAWKABILLY, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.CHARCADET, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.KLAWF, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.BOMBIRDIER, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.CYCLIZAR, + SpeciesId.ORTHWORM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.FLAMIGO, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.VELUZA, + SpeciesId.DONDOZO, + SpeciesId.TATSUGIRI, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.BRUTE_BONNET, + SpeciesId.FLUTTER_MANE, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_THORNS, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.GIMMIGHOUL, + SpeciesId.GHOLDENGO, + SpeciesId.WO_CHIEN, + SpeciesId.CHIEN_PAO, + SpeciesId.TING_LU, + SpeciesId.CHI_YU, + SpeciesId.ROARING_MOON, + SpeciesId.IRON_VALIANT, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.IRON_LEAVES, + SpeciesId.DIPPLIN, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.OGERPON, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.TERAPAGOS, + SpeciesId.PECHARUNT, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_YAMASK, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.HEAL_BELL]: [ - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.LICKITUNG, - Species.CHANSEY, - Species.JYNX, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.ARTICUNO, - Species.DRAGONITE, - Species.MEW, - Species.CHINCHOU, - Species.LANTURN, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.ESPEON, - Species.UMBREON, - Species.MISDREAVUS, - Species.SNUBBULL, - Species.GRANBULL, - Species.SMOOCHUM, - Species.MILTANK, - Species.BLISSEY, - Species.CELEBI, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.GARDEVOIR, - Species.SKITTY, - Species.DELCATTY, - Species.SPOINK, - Species.GRUMPIG, - Species.SWABLU, - Species.ALTARIA, - Species.CHIMECHO, - Species.KRICKETUNE, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.CHINGLING, - Species.HAPPINY, - Species.LICKILICKY, - Species.TOGEKISS, - Species.LEAFEON, - Species.GLACEON, - Species.UXIE, - Species.PHIONE, - Species.MANAPHY, - Species.MUNNA, - Species.MUSHARNA, - Species.AUDINO, - Species.PETILIL, - Species.LILLIGANT, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.MELOETTA, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.ESPURR, - Species.MEOWSTIC, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.SYLVEON, - Species.DIANCIE, - Species.COMFEY, - Species.MAGEARNA, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.HISUI_LILLIGANT, - Species.ETERNAL_FLOETTE, + [MoveId.HEAL_BELL]: [ + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.LICKITUNG, + SpeciesId.CHANSEY, + SpeciesId.JYNX, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.ARTICUNO, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MISDREAVUS, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SMOOCHUM, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.CELEBI, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.GARDEVOIR, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.CHIMECHO, + SpeciesId.KRICKETUNE, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.CHINGLING, + SpeciesId.HAPPINY, + SpeciesId.LICKILICKY, + SpeciesId.TOGEKISS, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.UXIE, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.AUDINO, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.MELOETTA, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.SYLVEON, + SpeciesId.DIANCIE, + SpeciesId.COMFEY, + SpeciesId.MAGEARNA, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.ETERNAL_FLOETTE, ], - [Moves.RETURN]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.SEEL, - Species.DEWGONG, - Species.GRIMER, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.ONIX, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.VOLTORB, - Species.ELECTRODE, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.PORYGON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.YANMA, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.KINGDRA, - Species.PHANPY, - Species.DONPHAN, - Species.PORYGON2, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.NOSEPASS, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.FEEBAS, - Species.MILOTIC, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.TROPIUS, - Species.CHIMECHO, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.BIDOOF, - Species.BIBAREL, - Species.KRICKETUNE, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.BUDEW, - Species.ROSERADE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.WORMADAM, - Species.MOTHIM, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.CHERUBI, - Species.CHERRIM, - Species.SHELLOS, - Species.GASTRODON, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.STUNKY, - Species.SKUNTANK, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.MIME_JR, - Species.HAPPINY, - Species.CHATOT, - Species.SPIRITOMB, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.CARNIVINE, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.YANMEGA, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.PORYGON_Z, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.PHIONE, - Species.MANAPHY, - Species.DARKRAI, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.MUNNA, - Species.MUSHARNA, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.WOOBAT, - Species.SWOOBAT, - Species.DRILBUR, - Species.EXCADRILL, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.BASCULIN, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.MARACTUS, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.TRUBBISH, - Species.GARBODOR, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.DUCKLETT, - Species.SWANNA, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.JOLTIK, - Species.GALVANTULA, - Species.FERROSEED, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.SHELMET, - Species.ACCELGOR, - Species.STUNFISK, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.DURANT, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.KELDEO, - Species.MELOETTA, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.LITLEO, - Species.PYROAR, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.ESPURR, - Species.MEOWSTIC, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.CARBINK, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.BERGMITE, - Species.AVALUGG, - Species.NOIBAT, - Species.NOIVERN, - Species.XERNEAS, - Species.YVELTAL, - Species.ZYGARDE, - Species.DIANCIE, - Species.HOOPA, - Species.VOLCANION, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.MUDBRAY, - Species.MUDSDALE, - Species.DEWPIDER, - Species.ARAQUANID, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.SALANDIT, - Species.SALAZZLE, - Species.STUFFUL, - Species.BEWEAR, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.PASSIMIAN, - Species.WIMPOD, - Species.GOLISOPOD, - Species.SANDYGAST, - Species.PALOSSAND, - Species.TYPE_NULL, - Species.SILVALLY, - Species.MINIOR, - Species.KOMALA, - Species.TURTONATOR, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.BRUXISH, - Species.DRAMPA, - Species.DHELMISE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.SOLGALEO, - Species.LUNALA, - Species.NIHILEGO, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.XURKITREE, - Species.CELESTEELA, - Species.KARTANA, - Species.GUZZLORD, - Species.NECROZMA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.POIPOLE, - Species.NAGANADEL, - Species.STAKATAKA, - Species.BLACEPHALON, - Species.ZERAORA, - Species.MELTAN, - Species.MELMETAL, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.SKWOVET, - Species.GREEDENT, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.DOTTLER, - Species.ORBEETLE, - Species.NICKIT, - Species.THIEVUL, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.WOOLOO, - Species.DUBWOOL, - Species.CHEWTLE, - Species.DREDNAW, - Species.YAMPER, - Species.BOLTUND, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.FLAPPLE, - Species.APPLETUN, - Species.SILICOBRA, - Species.SANDACONDA, - Species.CRAMORANT, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.TOXEL, - Species.TOXTRICITY, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.CURSOLA, - Species.SIRFETCHD, - Species.MR_RIME, - Species.RUNERIGUS, - Species.MILCERY, - Species.ALCREMIE, - Species.FALINKS, - Species.PINCURCHIN, - Species.SNOM, - Species.FROSMOTH, - Species.STONJOURNER, - Species.EISCUE, - Species.INDEEDEE, - Species.MORPEKO, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.DURALUDON, - Species.DREEPY, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.ETERNATUS, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.REGIELEKI, - Species.REGIDRAGO, - Species.GLASTRIER, - Species.SPECTRIER, - Species.CALYREX, - Species.WYRDEER, - Species.KLEAVOR, - Species.URSALUNA, - Species.BASCULEGION, - Species.SNEASLER, - Species.OVERQWIL, - Species.ENAMORUS, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.LECHONK, - Species.OINKOLOGNE, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.NYMBLE, - Species.LOKIX, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.FIDOUGH, - Species.DACHSBUN, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.SQUAWKABILLY, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.CHARCADET, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.TADBULB, - Species.BELLIBOLT, - Species.WATTREL, - Species.KILOWATTREL, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.SHROODLE, - Species.GRAFAIAI, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.KLAWF, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.RELLOR, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.WIGLETT, - Species.WUGTRIO, - Species.BOMBIRDIER, - Species.FINIZEN, - Species.PALAFIN, - Species.VAROOM, - Species.REVAVROOM, - Species.CYCLIZAR, - Species.ORTHWORM, - Species.GLIMMET, - Species.GLIMMORA, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.FLAMIGO, - Species.CETODDLE, - Species.CETITAN, - Species.VELUZA, - Species.DONDOZO, - Species.TATSUGIRI, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.BRUTE_BONNET, - Species.FLUTTER_MANE, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_BUNDLE, - Species.IRON_HANDS, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.IRON_THORNS, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.GIMMIGHOUL, - Species.GHOLDENGO, - Species.WO_CHIEN, - Species.CHIEN_PAO, - Species.TING_LU, - Species.CHI_YU, - Species.ROARING_MOON, - Species.IRON_VALIANT, - Species.KORAIDON, - Species.MIRAIDON, - Species.WALKING_WAKE, - Species.IRON_LEAVES, - Species.DIPPLIN, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.OGERPON, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.TERAPAGOS, - Species.PECHARUNT, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.ETERNAL_FLOETTE, - Species.GALAR_MEOWTH, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_FARFETCHD, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.GALAR_YAMASK, - Species.GALAR_STUNFISK, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_TYPHLOSION, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.HISUI_DECIDUEYE, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + [MoveId.RETURN]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.PORYGON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.YANMA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.KINGDRA, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.NOSEPASS, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.KRICKETUNE, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.CHATOT, + SpeciesId.SPIRITOMB, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.BASCULIN, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.MARACTUS, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.STUNFISK, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.XURKITREE, + SpeciesId.CELESTEELA, + SpeciesId.KARTANA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.STAKATAKA, + SpeciesId.BLACEPHALON, + SpeciesId.ZERAORA, + SpeciesId.MELTAN, + SpeciesId.MELMETAL, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.WOOLOO, + SpeciesId.DUBWOOL, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.TOXEL, + SpeciesId.TOXTRICITY, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.SIRFETCHD, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.MILCERY, + SpeciesId.ALCREMIE, + SpeciesId.FALINKS, + SpeciesId.PINCURCHIN, + SpeciesId.SNOM, + SpeciesId.FROSMOTH, + SpeciesId.STONJOURNER, + SpeciesId.EISCUE, + SpeciesId.INDEEDEE, + SpeciesId.MORPEKO, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.DURALUDON, + SpeciesId.DREEPY, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.ETERNATUS, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.REGIELEKI, + SpeciesId.REGIDRAGO, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.BASCULEGION, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.ENAMORUS, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.SQUAWKABILLY, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.CHARCADET, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.KLAWF, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.BOMBIRDIER, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.CYCLIZAR, + SpeciesId.ORTHWORM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.FLAMIGO, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.VELUZA, + SpeciesId.DONDOZO, + SpeciesId.TATSUGIRI, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.BRUTE_BONNET, + SpeciesId.FLUTTER_MANE, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_THORNS, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.GIMMIGHOUL, + SpeciesId.GHOLDENGO, + SpeciesId.WO_CHIEN, + SpeciesId.CHIEN_PAO, + SpeciesId.TING_LU, + SpeciesId.CHI_YU, + SpeciesId.ROARING_MOON, + SpeciesId.IRON_VALIANT, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.IRON_LEAVES, + SpeciesId.DIPPLIN, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.OGERPON, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.TERAPAGOS, + SpeciesId.PECHARUNT, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_YAMASK, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.FRUSTRATION]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.SEEL, - Species.DEWGONG, - Species.GRIMER, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.ONIX, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.VOLTORB, - Species.ELECTRODE, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.PORYGON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.YANMA, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.KINGDRA, - Species.PHANPY, - Species.DONPHAN, - Species.PORYGON2, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.NOSEPASS, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.FEEBAS, - Species.MILOTIC, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.TROPIUS, - Species.CHIMECHO, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.BIDOOF, - Species.BIBAREL, - Species.KRICKETUNE, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.BUDEW, - Species.ROSERADE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.WORMADAM, - Species.MOTHIM, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.CHERUBI, - Species.CHERRIM, - Species.SHELLOS, - Species.GASTRODON, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.STUNKY, - Species.SKUNTANK, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.MIME_JR, - Species.HAPPINY, - Species.CHATOT, - Species.SPIRITOMB, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.CARNIVINE, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.YANMEGA, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.PORYGON_Z, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.PHIONE, - Species.MANAPHY, - Species.DARKRAI, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.MUNNA, - Species.MUSHARNA, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.WOOBAT, - Species.SWOOBAT, - Species.DRILBUR, - Species.EXCADRILL, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.BASCULIN, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.MARACTUS, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.TRUBBISH, - Species.GARBODOR, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.DUCKLETT, - Species.SWANNA, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.JOLTIK, - Species.GALVANTULA, - Species.FERROSEED, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.SHELMET, - Species.ACCELGOR, - Species.STUNFISK, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.DURANT, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.KELDEO, - Species.MELOETTA, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.LITLEO, - Species.PYROAR, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.ESPURR, - Species.MEOWSTIC, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.CARBINK, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.BERGMITE, - Species.AVALUGG, - Species.NOIBAT, - Species.NOIVERN, - Species.XERNEAS, - Species.YVELTAL, - Species.ZYGARDE, - Species.DIANCIE, - Species.HOOPA, - Species.VOLCANION, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.MUDBRAY, - Species.MUDSDALE, - Species.DEWPIDER, - Species.ARAQUANID, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.SALANDIT, - Species.SALAZZLE, - Species.STUFFUL, - Species.BEWEAR, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.PASSIMIAN, - Species.WIMPOD, - Species.GOLISOPOD, - Species.SANDYGAST, - Species.PALOSSAND, - Species.TYPE_NULL, - Species.SILVALLY, - Species.MINIOR, - Species.KOMALA, - Species.TURTONATOR, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.BRUXISH, - Species.DRAMPA, - Species.DHELMISE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.SOLGALEO, - Species.LUNALA, - Species.NIHILEGO, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.XURKITREE, - Species.CELESTEELA, - Species.KARTANA, - Species.GUZZLORD, - Species.NECROZMA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.POIPOLE, - Species.NAGANADEL, - Species.STAKATAKA, - Species.BLACEPHALON, - Species.ZERAORA, - Species.MELTAN, - Species.MELMETAL, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.SKWOVET, - Species.GREEDENT, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.DOTTLER, - Species.ORBEETLE, - Species.NICKIT, - Species.THIEVUL, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.WOOLOO, - Species.DUBWOOL, - Species.CHEWTLE, - Species.DREDNAW, - Species.YAMPER, - Species.BOLTUND, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.FLAPPLE, - Species.APPLETUN, - Species.SILICOBRA, - Species.SANDACONDA, - Species.CRAMORANT, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.TOXEL, - Species.TOXTRICITY, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.CURSOLA, - Species.SIRFETCHD, - Species.MR_RIME, - Species.RUNERIGUS, - Species.MILCERY, - Species.ALCREMIE, - Species.FALINKS, - Species.PINCURCHIN, - Species.SNOM, - Species.FROSMOTH, - Species.STONJOURNER, - Species.EISCUE, - Species.INDEEDEE, - Species.MORPEKO, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.DURALUDON, - Species.DREEPY, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.ETERNATUS, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.REGIELEKI, - Species.REGIDRAGO, - Species.GLASTRIER, - Species.SPECTRIER, - Species.CALYREX, - Species.WYRDEER, - Species.KLEAVOR, - Species.URSALUNA, - Species.BASCULEGION, - Species.SNEASLER, - Species.OVERQWIL, - Species.ENAMORUS, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.LECHONK, - Species.OINKOLOGNE, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.NYMBLE, - Species.LOKIX, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.FIDOUGH, - Species.DACHSBUN, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.SQUAWKABILLY, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.CHARCADET, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.TADBULB, - Species.BELLIBOLT, - Species.WATTREL, - Species.KILOWATTREL, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.SHROODLE, - Species.GRAFAIAI, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.KLAWF, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.RELLOR, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.WIGLETT, - Species.WUGTRIO, - Species.BOMBIRDIER, - Species.FINIZEN, - Species.PALAFIN, - Species.VAROOM, - Species.REVAVROOM, - Species.CYCLIZAR, - Species.ORTHWORM, - Species.GLIMMET, - Species.GLIMMORA, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.FLAMIGO, - Species.CETODDLE, - Species.CETITAN, - Species.VELUZA, - Species.DONDOZO, - Species.TATSUGIRI, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.BRUTE_BONNET, - Species.FLUTTER_MANE, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_BUNDLE, - Species.IRON_HANDS, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.IRON_THORNS, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.GIMMIGHOUL, - Species.GHOLDENGO, - Species.WO_CHIEN, - Species.CHIEN_PAO, - Species.TING_LU, - Species.CHI_YU, - Species.ROARING_MOON, - Species.IRON_VALIANT, - Species.KORAIDON, - Species.MIRAIDON, - Species.WALKING_WAKE, - Species.IRON_LEAVES, - Species.DIPPLIN, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.OGERPON, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.TERAPAGOS, - Species.PECHARUNT, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.ETERNAL_FLOETTE, - Species.GALAR_MEOWTH, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_FARFETCHD, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.GALAR_YAMASK, - Species.GALAR_STUNFISK, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_TYPHLOSION, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.HISUI_DECIDUEYE, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + [MoveId.FRUSTRATION]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.PORYGON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.YANMA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.KINGDRA, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.NOSEPASS, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.KRICKETUNE, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.CHATOT, + SpeciesId.SPIRITOMB, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.BASCULIN, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.MARACTUS, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.STUNFISK, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.XURKITREE, + SpeciesId.CELESTEELA, + SpeciesId.KARTANA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.STAKATAKA, + SpeciesId.BLACEPHALON, + SpeciesId.ZERAORA, + SpeciesId.MELTAN, + SpeciesId.MELMETAL, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.WOOLOO, + SpeciesId.DUBWOOL, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.TOXEL, + SpeciesId.TOXTRICITY, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.SIRFETCHD, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.MILCERY, + SpeciesId.ALCREMIE, + SpeciesId.FALINKS, + SpeciesId.PINCURCHIN, + SpeciesId.SNOM, + SpeciesId.FROSMOTH, + SpeciesId.STONJOURNER, + SpeciesId.EISCUE, + SpeciesId.INDEEDEE, + SpeciesId.MORPEKO, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.DURALUDON, + SpeciesId.DREEPY, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.ETERNATUS, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.REGIELEKI, + SpeciesId.REGIDRAGO, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.BASCULEGION, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.ENAMORUS, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.SQUAWKABILLY, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.CHARCADET, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.KLAWF, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.BOMBIRDIER, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.CYCLIZAR, + SpeciesId.ORTHWORM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.FLAMIGO, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.VELUZA, + SpeciesId.DONDOZO, + SpeciesId.TATSUGIRI, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.BRUTE_BONNET, + SpeciesId.FLUTTER_MANE, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_THORNS, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.GIMMIGHOUL, + SpeciesId.GHOLDENGO, + SpeciesId.WO_CHIEN, + SpeciesId.CHIEN_PAO, + SpeciesId.TING_LU, + SpeciesId.CHI_YU, + SpeciesId.ROARING_MOON, + SpeciesId.IRON_VALIANT, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.IRON_LEAVES, + SpeciesId.DIPPLIN, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.OGERPON, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.TERAPAGOS, + SpeciesId.PECHARUNT, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_YAMASK, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.SAFEGUARD]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.BUTTERFREE, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.VILEPLUME, - Species.GROWLITHE, - Species.ARCANINE, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.SEEL, - Species.DEWGONG, - Species.DROWZEE, - Species.HYPNO, - Species.CHANSEY, - Species.KANGASKHAN, - Species.MR_MIME, - Species.SCYTHER, - Species.LAPRAS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.LEDYBA, - Species.LEDIAN, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.WOOPER, - Species.QUAGSIRE, - Species.SLOWKING, - Species.WOBBUFFET, - Species.SCIZOR, - Species.SHUCKLE, - Species.CORSOLA, - Species.BLISSEY, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.BEAUTIFLY, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SHROOMISH, - Species.BRELOOM, - Species.SKITTY, - Species.DELCATTY, - Species.SPINDA, - Species.SWABLU, - Species.ALTARIA, - Species.LUNATONE, - Species.SOLROCK, - Species.BALTOY, - Species.CLAYDOL, - Species.MILOTIC, - Species.TROPIUS, - Species.CHIMECHO, - Species.WYNAUT, - Species.SNORUNT, - Species.GLALIE, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.WORMADAM, - Species.MOTHIM, - Species.CHERUBI, - Species.CHERRIM, - Species.CHINGLING, - Species.BRONZOR, - Species.BRONZONG, - Species.MIME_JR, - Species.HAPPINY, - Species.FINNEON, - Species.LUMINEON, - Species.SNOVER, - Species.ABOMASNOW, - Species.TOGEKISS, - Species.GALLADE, - Species.FROSLASS, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.PHIONE, - Species.MANAPHY, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.MUNNA, - Species.MUSHARNA, - Species.WOOBAT, - Species.SWOOBAT, - Species.AUDINO, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.MARACTUS, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.DEERLING, - Species.SAWSBUCK, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.GOLETT, - Species.GOLURK, - Species.LARVESTA, - Species.VOLCARONA, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.RESHIRAM, - Species.ZEKROM, - Species.KYUREM, - Species.KELDEO, - Species.MELOETTA, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.VIVILLON, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.ESPURR, - Species.MEOWSTIC, - Species.SWIRLIX, - Species.SLURPUFF, - Species.BINACLE, - Species.BARBARACLE, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.CARBINK, - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.BERGMITE, - Species.AVALUGG, - Species.ZYGARDE, - Species.DIANCIE, - Species.HOOPA, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.MAREANIE, - Species.TOXAPEX, - Species.ARAQUANID, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.PYUKUMUKU, - Species.MINIOR, - Species.MIMIKYU, - Species.BRUXISH, - Species.DRAMPA, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.SOLGALEO, - Species.LUNALA, - Species.NIHILEGO, - Species.STAKATAKA, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.DOTTLER, - Species.ORBEETLE, - Species.APPLETUN, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.CURSOLA, - Species.MR_RIME, - Species.RUNERIGUS, - Species.ALCREMIE, - Species.FROSMOTH, - Species.STONJOURNER, - Species.ZAMAZENTA, - Species.CALYREX, - Species.ARBOLIVA, - Species.RABSCA, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ETERNAL_FLOETTE, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_YAMASK, + [MoveId.SAFEGUARD]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.BUTTERFREE, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.VILEPLUME, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.LAPRAS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.WOBBUFFET, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.CORSOLA, + SpeciesId.BLISSEY, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.BEAUTIFLY, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SPINDA, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.MILOTIC, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.WYNAUT, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.CHINGLING, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.TOGEKISS, + SpeciesId.GALLADE, + SpeciesId.FROSLASS, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.AUDINO, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.MARACTUS, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.VIVILLON, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.CARBINK, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.ARAQUANID, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.PYUKUMUKU, + SpeciesId.MINIOR, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.STAKATAKA, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.APPLETUN, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.CURSOLA, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.ALCREMIE, + SpeciesId.FROSMOTH, + SpeciesId.STONJOURNER, + SpeciesId.ZAMAZENTA, + SpeciesId.CALYREX, + SpeciesId.ARBOLIVA, + SpeciesId.RABSCA, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_YAMASK, [ - Species.INDEEDEE, + SpeciesId.INDEEDEE, "female", ], ], - [Moves.PAIN_SPLIT]: [ - Species.ARBOK, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.MEOWTH, - Species.PERSIAN, - Species.GRIMER, - Species.MUK, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.KOFFING, - Species.WEEZING, - Species.TANGELA, - Species.STARYU, - Species.STARMIE, - Species.PORYGON, - Species.MEW, - Species.IGGLYBUFF, - Species.NATU, - Species.XATU, - Species.MISDREAVUS, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.QWILFISH, - Species.SLUGMA, - Species.MAGCARGO, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.PORYGON2, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.NOSEPASS, - Species.SABLEYE, - Species.MAWILE, - Species.MEDITITE, - Species.MEDICHAM, - Species.GULPIN, - Species.SWALOT, - Species.LUNATONE, - Species.SOLROCK, - Species.LILEEP, - Species.CRADILY, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.DEOXYS, - Species.RAMPARDOS, - Species.SHELLOS, - Species.GASTRODON, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.MISMAGIUS, - Species.SPIRITOMB, - Species.TANGROWTH, - Species.PORYGON_Z, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.GIRATINA, - Species.MUNNA, - Species.MUSHARNA, - Species.AUDINO, - Species.THROH, - Species.SAWK, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TRUBBISH, - Species.GARBODOR, - Species.ZORUA, - Species.ZOROARK, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.STUNFISK, - Species.KELDEO, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.ZYGARDE, - Species.MAREANIE, - Species.TOXAPEX, - Species.STUFFUL, - Species.BEWEAR, - Species.COMFEY, - Species.ORANGURU, - Species.PASSIMIAN, - Species.SANDYGAST, - Species.PALOSSAND, - Species.PYUKUMUKU, - Species.MIMIKYU, - Species.BRUXISH, - Species.DHELMISE, - Species.NIHILEGO, - Species.MAGEARNA, - Species.BLACEPHALON, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.POLTEAGEIST, - Species.HATTERENE, - Species.ALCREMIE, - Species.PINCURCHIN, - Species.SPECTRIER, - Species.BASCULEGION, - Species.OVERQWIL, - Species.SPIDOPS, - Species.MABOSSTIFF, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.WUGTRIO, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.VELUZA, - Species.DUDUNSPARCE, - Species.FLUTTER_MANE, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_MAROWAK, - Species.GALAR_WEEZING, - Species.GALAR_MOLTRES, - Species.GALAR_STUNFISK, - Species.HISUI_QWILFISH, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, + [MoveId.PAIN_SPLIT]: [ + SpeciesId.ARBOK, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.TANGELA, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.PORYGON, + SpeciesId.MEW, + SpeciesId.IGGLYBUFF, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MISDREAVUS, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.QWILFISH, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.PORYGON2, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.NOSEPASS, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.DEOXYS, + SpeciesId.RAMPARDOS, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.MISMAGIUS, + SpeciesId.SPIRITOMB, + SpeciesId.TANGROWTH, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.GIRATINA, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.AUDINO, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.STUNFISK, + SpeciesId.KELDEO, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.ZYGARDE, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.PYUKUMUKU, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.DHELMISE, + SpeciesId.NIHILEGO, + SpeciesId.MAGEARNA, + SpeciesId.BLACEPHALON, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.POLTEAGEIST, + SpeciesId.HATTERENE, + SpeciesId.ALCREMIE, + SpeciesId.PINCURCHIN, + SpeciesId.SPECTRIER, + SpeciesId.BASCULEGION, + SpeciesId.OVERQWIL, + SpeciesId.SPIDOPS, + SpeciesId.MABOSSTIFF, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.WUGTRIO, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.VELUZA, + SpeciesId.DUDUNSPARCE, + SpeciesId.FLUTTER_MANE, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, ], - [Moves.MEGAHORN]: [ - Species.NIDOKING, - Species.RAPIDASH, - Species.SEEL, - Species.DEWGONG, - Species.RHYHORN, - Species.RHYDON, - Species.GOLDEEN, - Species.SEAKING, - Species.TAUROS, - Species.LAPRAS, - Species.MEW, - Species.SPINARAK, - Species.ARIADOS, - Species.HERACROSS, - Species.STANTLER, - Species.ABSOL, - Species.RHYPERIOR, - Species.SAMUROTT, - Species.SCOLIPEDE, - Species.SAWSBUCK, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.BOUFFALANT, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.KELDEO, - Species.XERNEAS, - Species.TAPU_BULU, - Species.CELESTEELA, - Species.DREDNAW, - Species.FALINKS, - Species.GLASTRIER, - Species.WYRDEER, - Species.CLODSIRE, - Species.GREAT_TUSK, - Species.IRON_TREADS, - Species.IRON_LEAVES, - Species.IRON_BOULDER, - Species.GALAR_RAPIDASH, + [MoveId.MEGAHORN]: [ + SpeciesId.NIDOKING, + SpeciesId.RAPIDASH, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.TAUROS, + SpeciesId.LAPRAS, + SpeciesId.MEW, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.HERACROSS, + SpeciesId.STANTLER, + SpeciesId.ABSOL, + SpeciesId.RHYPERIOR, + SpeciesId.SAMUROTT, + SpeciesId.SCOLIPEDE, + SpeciesId.SAWSBUCK, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.BOUFFALANT, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.KELDEO, + SpeciesId.XERNEAS, + SpeciesId.TAPU_BULU, + SpeciesId.CELESTEELA, + SpeciesId.DREDNAW, + SpeciesId.FALINKS, + SpeciesId.GLASTRIER, + SpeciesId.WYRDEER, + SpeciesId.CLODSIRE, + SpeciesId.GREAT_TUSK, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_LEAVES, + SpeciesId.IRON_BOULDER, + SpeciesId.GALAR_RAPIDASH, [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", ], - Species.HISUI_SAMUROTT, + SpeciesId.HISUI_SAMUROTT, ], - [Moves.BATON_PASS]: [ - Species.BUTTERFREE, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.VENONAT, - Species.VENOMOTH, - Species.POLIWRATH, - Species.RAPIDASH, - Species.FARFETCHD, - Species.HYPNO, - Species.MR_MIME, - Species.SCYTHER, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.ZAPDOS, - Species.MEW, - Species.SENTRET, - Species.FURRET, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.BELLOSSOM, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.ESPEON, - Species.UMBREON, - Species.GIRAFARIG, - Species.DUNSPARCE, - Species.GLIGAR, - Species.SCIZOR, - Species.DELIBIRD, - Species.CELEBI, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.SURSKIT, - Species.MASQUERAIN, - Species.NINJASK, - Species.SKITTY, - Species.MAWILE, - Species.MEDITITE, - Species.MEDICHAM, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.SPINDA, - Species.ZANGOOSE, - Species.LUNATONE, - Species.SOLROCK, - Species.CHIMECHO, - Species.ABSOL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.LATIAS, - Species.LATIOS, - Species.JIRACHI, - Species.KRICKETUNE, - Species.BUIZEL, - Species.FLOATZEL, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.CHINGLING, - Species.MIME_JR, - Species.CROAGUNK, - Species.TOXICROAK, - Species.WEAVILE, - Species.TOGEKISS, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.VICTINI, - Species.PATRAT, - Species.WATCHOG, - Species.PURRLOIN, - Species.LIEPARD, - Species.MUNNA, - Species.WOOBAT, - Species.SWOOBAT, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.SCOLIPEDE, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.ALOMOMOLA, - Species.SHELMET, - Species.ACCELGOR, - Species.MIENFOO, - Species.MIENSHAO, - Species.DURANT, - Species.MELOETTA, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.INKAY, - Species.MALAMAR, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DIANCIE, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.PASSIMIAN, - Species.PYUKUMUKU, - Species.MAGEARNA, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.ORBEETLE, - Species.NICKIT, - Species.THIEVUL, - Species.DUBWOOL, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.PERRSERKER, - Species.MR_RIME, - Species.MORPEKO, - Species.DREEPY, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.CALYREX, - Species.KLEAVOR, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.FIDOUGH, - Species.DACHSBUN, - Species.SHROODLE, - Species.GRAFAIAI, - Species.FLITTLE, - Species.ESPATHRA, - Species.TATSUGIRI, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.SCREAM_TAIL, - Species.MUNKIDORI, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ETERNAL_FLOETTE, - Species.GALAR_RAPIDASH, - Species.GALAR_MR_MIME, + [MoveId.BATON_PASS]: [ + SpeciesId.BUTTERFREE, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.POLIWRATH, + SpeciesId.RAPIDASH, + SpeciesId.FARFETCHD, + SpeciesId.HYPNO, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.ZAPDOS, + SpeciesId.MEW, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.BELLOSSOM, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.GIRAFARIG, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.SCIZOR, + SpeciesId.DELIBIRD, + SpeciesId.CELEBI, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.NINJASK, + SpeciesId.SKITTY, + SpeciesId.MAWILE, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.SPINDA, + SpeciesId.ZANGOOSE, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.JIRACHI, + SpeciesId.KRICKETUNE, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.CHINGLING, + SpeciesId.MIME_JR, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.WEAVILE, + SpeciesId.TOGEKISS, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.VICTINI, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.MUNNA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.SCOLIPEDE, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.ALOMOMOLA, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DURANT, + SpeciesId.MELOETTA, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DIANCIE, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.PASSIMIAN, + SpeciesId.PYUKUMUKU, + SpeciesId.MAGEARNA, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.ORBEETLE, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.DUBWOOL, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.PERRSERKER, + SpeciesId.MR_RIME, + SpeciesId.MORPEKO, + SpeciesId.DREEPY, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.CALYREX, + SpeciesId.KLEAVOR, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.TATSUGIRI, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.SCREAM_TAIL, + SpeciesId.MUNKIDORI, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_MR_MIME, [ - Species.INDEEDEE, + SpeciesId.INDEEDEE, "female", ], - Species.HISUI_DECIDUEYE, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.ENCORE]: [ - Species.PIKACHU, - Species.RAICHU, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.SEEL, - Species.DEWGONG, - Species.HAUNTER, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.HITMONCHAN, - Species.MR_MIME, - Species.JYNX, - Species.SNORLAX, - Species.DRAGONITE, - Species.MEW, - Species.LEDYBA, - Species.LEDIAN, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.BELLOSSOM, - Species.MARILL, - Species.AZUMARILL, - Species.POLITOED, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.SUNKERN, - Species.SUNFLORA, - Species.WOOPER, - Species.QUAGSIRE, - Species.WOBBUFFET, - Species.SNUBBULL, - Species.GRANBULL, - Species.SHUCKLE, - Species.PHANPY, - Species.DONPHAN, - Species.SMOOCHUM, - Species.LOMBRE, - Species.LUDICOLO, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.AZURILL, - Species.SABLEYE, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.GULPIN, - Species.SWALOT, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.CACNEA, - Species.CACTURNE, - Species.SHUPPET, - Species.BANETTE, - Species.CHIMECHO, - Species.WYNAUT, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.JIRACHI, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PACHIRISU, - Species.BUNEARY, - Species.LOPUNNY, - Species.MIME_JR, - Species.CHATOT, - Species.MUNCHLAX, - Species.CROAGUNK, - Species.TOXICROAK, - Species.LUMINEON, - Species.TOGEKISS, - Species.GALLADE, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.VICTINI, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PURRLOIN, - Species.LIEPARD, - Species.AUDINO, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.DARUMAKA, - Species.DARMANITAN, - Species.SCRAGGY, - Species.SCRAFTY, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.EMOLGA, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.CUBCHOO, - Species.BEARTIC, - Species.SHELMET, - Species.ACCELGOR, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.SPRITZEE, - Species.AROMATISSE, - Species.AMAURA, - Species.AURORUS, - Species.HAWLUCHA, - Species.DIANCIE, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.TOUCANNON, - Species.SALAZZLE, - Species.COMFEY, - Species.ORANGURU, - Species.TOGEDEMARU, - Species.MAGEARNA, - Species.BLACEPHALON, - Species.TOXEL, - Species.TOXTRICITY, - Species.MR_RIME, - Species.ALCREMIE, + [MoveId.ENCORE]: [ + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.HITMONCHAN, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.SNORLAX, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.BELLOSSOM, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.POLITOED, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.WOBBUFFET, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SHUCKLE, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.SMOOCHUM, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.AZURILL, + SpeciesId.SABLEYE, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.CHIMECHO, + SpeciesId.WYNAUT, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.JIRACHI, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PACHIRISU, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MIME_JR, + SpeciesId.CHATOT, + SpeciesId.MUNCHLAX, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.LUMINEON, + SpeciesId.TOGEKISS, + SpeciesId.GALLADE, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.VICTINI, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.AUDINO, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.EMOLGA, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.HAWLUCHA, + SpeciesId.DIANCIE, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.TOUCANNON, + SpeciesId.SALAZZLE, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.TOGEDEMARU, + SpeciesId.MAGEARNA, + SpeciesId.BLACEPHALON, + SpeciesId.TOXEL, + SpeciesId.TOXTRICITY, + SpeciesId.MR_RIME, + SpeciesId.ALCREMIE, [ - Species.INDEEDEE, + SpeciesId.INDEEDEE, "male", ], - Species.ZARUDE, - Species.CALYREX, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.ARBOLIVA, - Species.SHROODLE, - Species.GRAFAIAI, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.FINIZEN, - Species.PALAFIN, - Species.ANNIHILAPE, - Species.SCREAM_TAIL, - Species.IRON_BUNDLE, - Species.IRON_VALIANT, - Species.OGERPON, - Species.ALOLA_RAICHU, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.GALAR_MR_MIME, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, + SpeciesId.ZARUDE, + SpeciesId.CALYREX, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.ARBOLIVA, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.ANNIHILAPE, + SpeciesId.SCREAM_TAIL, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_VALIANT, + SpeciesId.OGERPON, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, ], - [Moves.IRON_TAIL]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.RATTATA, - Species.RATICATE, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.FARFETCHD, - Species.SEEL, - Species.DEWGONG, - Species.ONIX, - Species.CUBONE, - Species.MAROWAK, - Species.LICKITUNG, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.PORYGON, - Species.AERODACTYL, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.PICHU, - Species.CLEFFA, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.MARILL, - Species.AZUMARILL, - Species.AIPOM, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.SLOWKING, - Species.GIRAFARIG, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.GRANBULL, - Species.SNEASEL, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.PHANPY, - Species.DONPHAN, - Species.PORYGON2, - Species.STANTLER, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.BRELOOM, - Species.AZURILL, - Species.SKITTY, - Species.DELCATTY, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.TORKOAL, - Species.SPOINK, - Species.GRUMPIG, - Species.FLYGON, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.ARMALDO, - Species.FEEBAS, - Species.MILOTIC, - Species.KECLEON, - Species.ABSOL, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.SALAMENCE, - Species.GROUDON, - Species.RAYQUAZA, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.BIDOOF, - Species.BIBAREL, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.AMBIPOM, - Species.BUNEARY, - Species.LOPUNNY, - Species.GLAMEOW, - Species.PURUGLY, - Species.STUNKY, - Species.SKUNTANK, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SKORUPI, - Species.DRAPION, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.PORYGON_Z, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.GIRATINA, - Species.ARCEUS, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.AUDINO, - Species.SCOLIPEDE, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.MINCCINO, - Species.CINCCINO, - Species.EMOLGA, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.DRUDDIGON, - Species.HYDREIGON, - Species.TORNADUS, - Species.THUNDURUS, - Species.LANDORUS, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.LITLEO, - Species.PYROAR, - Species.SKIDDO, - Species.GOGOAT, - Species.FURFROU, - Species.ESPURR, - Species.MEOWSTIC, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.DEDENNE, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.NOIBAT, - Species.NOIVERN, - Species.ZYGARDE, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.ROCKRUFF, - Species.LYCANROC, - Species.WISHIWASHI, - Species.SALANDIT, - Species.SALAZZLE, - Species.PASSIMIAN, - Species.TURTONATOR, - Species.TOGEDEMARU, - Species.BRUXISH, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.SOLGALEO, - Species.GUZZLORD, - Species.POIPOLE, - Species.NAGANADEL, - Species.ZERAORA, - Species.SKWOVET, - Species.GREEDENT, - Species.DREDNAW, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.ZARUDE, - Species.WYRDEER, - Species.SNEASLER, - Species.CYCLIZAR, - Species.ORTHWORM, - Species.ANNIHILAPE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.GALAR_MEOWTH, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_SLOWKING, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_TYPHLOSION, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, + [MoveId.IRON_TAIL]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.FARFETCHD, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.ONIX, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.LICKITUNG, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.PORYGON, + SpeciesId.AERODACTYL, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.AIPOM, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.SLOWKING, + SpeciesId.GIRAFARIG, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.GRANBULL, + SpeciesId.SNEASEL, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.BRELOOM, + SpeciesId.AZURILL, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.TORKOAL, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.FLYGON, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.ARMALDO, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.KECLEON, + SpeciesId.ABSOL, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.SALAMENCE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.AMBIPOM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.PORYGON_Z, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.GIRATINA, + SpeciesId.ARCEUS, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.AUDINO, + SpeciesId.SCOLIPEDE, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.EMOLGA, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.DRUDDIGON, + SpeciesId.HYDREIGON, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.LANDORUS, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.FURFROU, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.DEDENNE, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.ZYGARDE, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.WISHIWASHI, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.PASSIMIAN, + SpeciesId.TURTONATOR, + SpeciesId.TOGEDEMARU, + SpeciesId.BRUXISH, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.SOLGALEO, + SpeciesId.GUZZLORD, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.ZERAORA, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.DREDNAW, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.ZARUDE, + SpeciesId.WYRDEER, + SpeciesId.SNEASLER, + SpeciesId.CYCLIZAR, + SpeciesId.ORTHWORM, + SpeciesId.ANNIHILAPE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, ], - [Moves.METAL_CLAW]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SANDSHREW, - Species.SANDSLASH, - Species.PARAS, - Species.MEOWTH, - Species.PERSIAN, - Species.KRABBY, - Species.KINGLER, - Species.MEW, - Species.TOTODILE, - Species.GLIGAR, - Species.SCIZOR, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SKARMORY, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.SABLEYE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.ZANGOOSE, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.ANORITH, - Species.ARMALDO, - Species.METANG, - Species.METAGROSS, - Species.REGISTEEL, - Species.GROUDON, - Species.PRINPLUP, - Species.EMPOLEON, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.RIOLU, - Species.LUCARIO, - Species.WEAVILE, - Species.GLISCOR, - Species.DIALGA, - Species.HEATRAN, - Species.DRILBUR, - Species.EXCADRILL, - Species.GARBODOR, - Species.FERROSEED, - Species.FERROTHORN, - Species.CUBCHOO, - Species.BEARTIC, - Species.DRUDDIGON, - Species.PAWNIARD, - Species.BISHARP, - Species.BRAVIARY, - Species.DURANT, - Species.COBALION, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.WIMPOD, - Species.KOMALA, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.SOLGALEO, - Species.NECROZMA, - Species.CORVIKNIGHT, - Species.PERRSERKER, - Species.DURALUDON, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.KUBFU, - Species.URSHIFU, - Species.URSALUNA, - Species.SNEASLER, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.KLAWF, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.KINGAMBIT, - Species.IRON_THORNS, - Species.ROARING_MOON, - Species.OKIDOGI, - Species.ARCHALUDON, - Species.IRON_CROWN, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.GALAR_MEOWTH, - Species.GALAR_STUNFISK, - Species.HISUI_SNEASEL, - Species.HISUI_BRAVIARY, - Species.BLOODMOON_URSALUNA, + [MoveId.METAL_CLAW]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.PARAS, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.GLIGAR, + SpeciesId.SCIZOR, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SKARMORY, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.SABLEYE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.ZANGOOSE, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGISTEEL, + SpeciesId.GROUDON, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.WEAVILE, + SpeciesId.GLISCOR, + SpeciesId.DIALGA, + SpeciesId.HEATRAN, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.GARBODOR, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.DRUDDIGON, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BRAVIARY, + SpeciesId.DURANT, + SpeciesId.COBALION, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.WIMPOD, + SpeciesId.KOMALA, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.SOLGALEO, + SpeciesId.NECROZMA, + SpeciesId.CORVIKNIGHT, + SpeciesId.PERRSERKER, + SpeciesId.DURALUDON, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.URSALUNA, + SpeciesId.SNEASLER, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.KLAWF, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.KINGAMBIT, + SpeciesId.IRON_THORNS, + SpeciesId.ROARING_MOON, + SpeciesId.OKIDOGI, + SpeciesId.ARCHALUDON, + SpeciesId.IRON_CROWN, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.SYNTHESIS]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.TANGELA, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.BELLOSSOM, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.SUNKERN, - Species.SUNFLORA, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.SHROOMISH, - Species.BRELOOM, - Species.ROSELIA, - Species.CACNEA, - Species.CACTURNE, - Species.LILEEP, - Species.CRADILY, - Species.TROPIUS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.BUDEW, - Species.ROSERADE, + [MoveId.SYNTHESIS]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.TANGELA, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.BELLOSSOM, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.ROSELIA, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.TROPIUS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, [ - Species.WORMADAM, + SpeciesId.WORMADAM, "plant", ], - Species.CHERUBI, - Species.CHERRIM, - Species.CARNIVINE, - Species.SNOVER, - Species.ABOMASNOW, - Species.TANGROWTH, - Species.LEAFEON, - Species.SHAYMIN, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.PANSAGE, - Species.SIMISAGE, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.PETILIL, - Species.LILLIGANT, - Species.MARACTUS, - Species.DEERLING, - Species.SAWSBUCK, - Species.FOONGUS, - Species.AMOONGUSS, - Species.VIRIZION, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.DHELMISE, - Species.TAPU_BULU, - Species.KARTANA, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.ZARUDE, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.BRUTE_BONNET, - Species.OGERPON, - Species.ALOLA_EXEGGUTOR, - Species.HISUI_LILLIGANT, - Species.HISUI_DECIDUEYE, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.CARNIVINE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.TANGROWTH, + SpeciesId.LEAFEON, + SpeciesId.SHAYMIN, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.MARACTUS, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.VIRIZION, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.DHELMISE, + SpeciesId.TAPU_BULU, + SpeciesId.KARTANA, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.ZARUDE, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.BRUTE_BONNET, + SpeciesId.OGERPON, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.HIDDEN_POWER]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.SEEL, - Species.DEWGONG, - Species.GRIMER, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.ONIX, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.VOLTORB, - Species.ELECTRODE, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.PORYGON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.YANMA, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.UNOWN, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.KINGDRA, - Species.PHANPY, - Species.DONPHAN, - Species.PORYGON2, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.NOSEPASS, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.FEEBAS, - Species.MILOTIC, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.TROPIUS, - Species.CHIMECHO, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.BIDOOF, - Species.BIBAREL, - Species.KRICKETUNE, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.BUDEW, - Species.ROSERADE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.BURMY, - Species.WORMADAM, - Species.MOTHIM, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.CHERUBI, - Species.CHERRIM, - Species.SHELLOS, - Species.GASTRODON, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.STUNKY, - Species.SKUNTANK, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.MIME_JR, - Species.HAPPINY, - Species.CHATOT, - Species.SPIRITOMB, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.CARNIVINE, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.YANMEGA, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.PORYGON_Z, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.PHIONE, - Species.MANAPHY, - Species.DARKRAI, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.MUNNA, - Species.MUSHARNA, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.WOOBAT, - Species.SWOOBAT, - Species.DRILBUR, - Species.EXCADRILL, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.BASCULIN, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.MARACTUS, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.TRUBBISH, - Species.GARBODOR, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.DUCKLETT, - Species.SWANNA, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.JOLTIK, - Species.GALVANTULA, - Species.FERROSEED, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.SHELMET, - Species.ACCELGOR, - Species.STUNFISK, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.DURANT, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.KELDEO, - Species.MELOETTA, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.LITLEO, - Species.PYROAR, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.ESPURR, - Species.MEOWSTIC, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.CARBINK, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.BERGMITE, - Species.AVALUGG, - Species.NOIBAT, - Species.NOIVERN, - Species.XERNEAS, - Species.YVELTAL, - Species.ZYGARDE, - Species.DIANCIE, - Species.HOOPA, - Species.VOLCANION, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.MUDBRAY, - Species.MUDSDALE, - Species.DEWPIDER, - Species.ARAQUANID, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.SALANDIT, - Species.SALAZZLE, - Species.STUFFUL, - Species.BEWEAR, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.PASSIMIAN, - Species.WIMPOD, - Species.GOLISOPOD, - Species.SANDYGAST, - Species.PALOSSAND, - Species.TYPE_NULL, - Species.SILVALLY, - Species.MINIOR, - Species.KOMALA, - Species.TURTONATOR, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.BRUXISH, - Species.DRAMPA, - Species.DHELMISE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.SOLGALEO, - Species.LUNALA, - Species.NIHILEGO, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.XURKITREE, - Species.CELESTEELA, - Species.KARTANA, - Species.GUZZLORD, - Species.NECROZMA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.POIPOLE, - Species.NAGANADEL, - Species.STAKATAKA, - Species.BLACEPHALON, - Species.ZERAORA, - Species.MELTAN, - Species.MELMETAL, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.SKWOVET, - Species.GREEDENT, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.DOTTLER, - Species.ORBEETLE, - Species.NICKIT, - Species.THIEVUL, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.WOOLOO, - Species.DUBWOOL, - Species.CHEWTLE, - Species.DREDNAW, - Species.YAMPER, - Species.BOLTUND, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.FLAPPLE, - Species.APPLETUN, - Species.SILICOBRA, - Species.SANDACONDA, - Species.CRAMORANT, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.TOXEL, - Species.TOXTRICITY, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.CURSOLA, - Species.SIRFETCHD, - Species.MR_RIME, - Species.RUNERIGUS, - Species.MILCERY, - Species.ALCREMIE, - Species.FALINKS, - Species.PINCURCHIN, - Species.SNOM, - Species.FROSMOTH, - Species.STONJOURNER, - Species.EISCUE, - Species.INDEEDEE, - Species.MORPEKO, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.DURALUDON, - Species.DREEPY, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.ETERNATUS, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.REGIELEKI, - Species.REGIDRAGO, - Species.GLASTRIER, - Species.SPECTRIER, - Species.CALYREX, - Species.WYRDEER, - Species.KLEAVOR, - Species.URSALUNA, - Species.BASCULEGION, - Species.SNEASLER, - Species.OVERQWIL, - Species.ENAMORUS, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.LECHONK, - Species.OINKOLOGNE, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.NYMBLE, - Species.LOKIX, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.FIDOUGH, - Species.DACHSBUN, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.SQUAWKABILLY, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.CHARCADET, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.TADBULB, - Species.BELLIBOLT, - Species.WATTREL, - Species.KILOWATTREL, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.SHROODLE, - Species.GRAFAIAI, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.KLAWF, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.RELLOR, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.WIGLETT, - Species.WUGTRIO, - Species.BOMBIRDIER, - Species.FINIZEN, - Species.PALAFIN, - Species.VAROOM, - Species.REVAVROOM, - Species.CYCLIZAR, - Species.ORTHWORM, - Species.GLIMMET, - Species.GLIMMORA, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.FLAMIGO, - Species.CETODDLE, - Species.CETITAN, - Species.VELUZA, - Species.DONDOZO, - Species.TATSUGIRI, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.BRUTE_BONNET, - Species.FLUTTER_MANE, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_BUNDLE, - Species.IRON_HANDS, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.IRON_THORNS, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.GIMMIGHOUL, - Species.GHOLDENGO, - Species.WO_CHIEN, - Species.CHIEN_PAO, - Species.TING_LU, - Species.CHI_YU, - Species.ROARING_MOON, - Species.IRON_VALIANT, - Species.KORAIDON, - Species.MIRAIDON, - Species.WALKING_WAKE, - Species.IRON_LEAVES, - Species.DIPPLIN, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.OGERPON, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.TERAPAGOS, - Species.PECHARUNT, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.ETERNAL_FLOETTE, - Species.GALAR_MEOWTH, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_FARFETCHD, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.GALAR_YAMASK, - Species.GALAR_STUNFISK, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_TYPHLOSION, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.HISUI_DECIDUEYE, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + [MoveId.HIDDEN_POWER]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.PORYGON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.YANMA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.UNOWN, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.KINGDRA, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.NOSEPASS, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.KRICKETUNE, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.BURMY, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.CHATOT, + SpeciesId.SPIRITOMB, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.BASCULIN, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.MARACTUS, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.STUNFISK, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.XURKITREE, + SpeciesId.CELESTEELA, + SpeciesId.KARTANA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.STAKATAKA, + SpeciesId.BLACEPHALON, + SpeciesId.ZERAORA, + SpeciesId.MELTAN, + SpeciesId.MELMETAL, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.WOOLOO, + SpeciesId.DUBWOOL, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.TOXEL, + SpeciesId.TOXTRICITY, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.SIRFETCHD, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.MILCERY, + SpeciesId.ALCREMIE, + SpeciesId.FALINKS, + SpeciesId.PINCURCHIN, + SpeciesId.SNOM, + SpeciesId.FROSMOTH, + SpeciesId.STONJOURNER, + SpeciesId.EISCUE, + SpeciesId.INDEEDEE, + SpeciesId.MORPEKO, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.DURALUDON, + SpeciesId.DREEPY, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.ETERNATUS, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.REGIELEKI, + SpeciesId.REGIDRAGO, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.BASCULEGION, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.ENAMORUS, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.SQUAWKABILLY, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.CHARCADET, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.KLAWF, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.BOMBIRDIER, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.CYCLIZAR, + SpeciesId.ORTHWORM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.FLAMIGO, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.VELUZA, + SpeciesId.DONDOZO, + SpeciesId.TATSUGIRI, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.BRUTE_BONNET, + SpeciesId.FLUTTER_MANE, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_THORNS, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.GIMMIGHOUL, + SpeciesId.GHOLDENGO, + SpeciesId.WO_CHIEN, + SpeciesId.CHIEN_PAO, + SpeciesId.TING_LU, + SpeciesId.CHI_YU, + SpeciesId.ROARING_MOON, + SpeciesId.IRON_VALIANT, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.IRON_LEAVES, + SpeciesId.DIPPLIN, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.OGERPON, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.TERAPAGOS, + SpeciesId.PECHARUNT, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_YAMASK, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.RAIN_DANCE]: [ - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.BUTTERFREE, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.SEEL, - Species.DEWGONG, - Species.GRIMER, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.VOLTORB, - Species.ELECTRODE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.PORYGON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.CROBAT, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.MARILL, - Species.AZUMARILL, - Species.POLITOED, - Species.HOPPIP, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SCIZOR, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.KINGDRA, - Species.PHANPY, - Species.DONPHAN, - Species.PORYGON2, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.BALTOY, - Species.CLAYDOL, - Species.FEEBAS, - Species.MILOTIC, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.TROPIUS, - Species.CHIMECHO, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.BIDOOF, - Species.BIBAREL, - Species.KRICKETUNE, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.BUDEW, - Species.ROSERADE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.WORMADAM, - Species.MOTHIM, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.SHELLOS, - Species.GASTRODON, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.STUNKY, - Species.SKUNTANK, - Species.BRONZOR, - Species.BRONZONG, - Species.MIME_JR, - Species.HAPPINY, - Species.CHATOT, - Species.SPIRITOMB, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.ELECTIVIRE, - Species.TOGEKISS, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.PORYGON_Z, - Species.GALLADE, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.PHIONE, - Species.MANAPHY, - Species.DARKRAI, - Species.ARCEUS, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANPOUR, - Species.SIMIPOUR, - Species.MUNNA, - Species.MUSHARNA, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.WOOBAT, - Species.SWOOBAT, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.BASCULIN, - Species.MARACTUS, - Species.SCRAGGY, - Species.SCRAFTY, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.TRUBBISH, - Species.GARBODOR, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.DUCKLETT, - Species.SWANNA, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.JOLTIK, - Species.GALVANTULA, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.SHELMET, - Species.ACCELGOR, - Species.STUNFISK, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.VOLCARONA, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.KELDEO, - Species.MELOETTA, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.LITLEO, - Species.PYROAR, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.ESPURR, - Species.MEOWSTIC, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.CARBINK, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.BERGMITE, - Species.AVALUGG, - Species.XERNEAS, - Species.YVELTAL, - Species.DIANCIE, - Species.HOOPA, - Species.VOLCANION, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ORICORIO, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.DEWPIDER, - Species.ARAQUANID, - Species.LURANTIS, - Species.SHIINOTIC, - Species.ORANGURU, - Species.PASSIMIAN, - Species.WIMPOD, - Species.GOLISOPOD, - Species.SANDYGAST, - Species.PALOSSAND, - Species.PYUKUMUKU, - Species.TYPE_NULL, - Species.SILVALLY, - Species.KOMALA, - Species.MIMIKYU, - Species.BRUXISH, - Species.DRAMPA, - Species.DHELMISE, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.TAPU_FINI, - Species.XURKITREE, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.GREEDENT, - Species.CORVIKNIGHT, - Species.CHEWTLE, - Species.DREDNAW, - Species.APPLETUN, - Species.CRAMORANT, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.TOXTRICITY, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.CURSOLA, - Species.MR_RIME, - Species.RUNERIGUS, - Species.FALINKS, - Species.PINCURCHIN, - Species.EISCUE, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.ZAMAZENTA, - Species.ETERNATUS, - Species.REGIELEKI, - Species.WYRDEER, - Species.URSALUNA, - Species.BASCULEGION, - Species.SNEASLER, - Species.OVERQWIL, - Species.ENAMORUS, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.LECHONK, - Species.OINKOLOGNE, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.NYMBLE, - Species.LOKIX, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.FIDOUGH, - Species.DACHSBUN, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.TADBULB, - Species.BELLIBOLT, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.SHROODLE, - Species.GRAFAIAI, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.KLAWF, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.WIGLETT, - Species.WUGTRIO, - Species.BOMBIRDIER, - Species.FINIZEN, - Species.PALAFIN, - Species.VAROOM, - Species.REVAVROOM, - Species.CYCLIZAR, - Species.GLIMMET, - Species.GLIMMORA, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.CETODDLE, - Species.CETITAN, - Species.VELUZA, - Species.DONDOZO, - Species.TATSUGIRI, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.SCREAM_TAIL, - Species.SLITHER_WING, - Species.IRON_BUNDLE, - Species.IRON_JUGULIS, - Species.IRON_THORNS, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.WO_CHIEN, - Species.CHIEN_PAO, - Species.WALKING_WAKE, - Species.OGERPON, - Species.HYDRAPPLE, - Species.TERAPAGOS, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_MAROWAK, - Species.ETERNAL_FLOETTE, - Species.GALAR_MEOWTH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_YAMASK, - Species.GALAR_STUNFISK, + [MoveId.RAIN_DANCE]: [ + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.BUTTERFREE, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.PORYGON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.CROBAT, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.POLITOED, + SpeciesId.HOPPIP, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.KINGDRA, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.KRICKETUNE, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.CHATOT, + SpeciesId.SPIRITOMB, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.ELECTIVIRE, + SpeciesId.TOGEKISS, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.BASCULIN, + SpeciesId.MARACTUS, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.STUNFISK, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.VOLCARONA, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ORICORIO, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.LURANTIS, + SpeciesId.SHIINOTIC, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.PYUKUMUKU, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.KOMALA, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_FINI, + SpeciesId.XURKITREE, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.GREEDENT, + SpeciesId.CORVIKNIGHT, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.APPLETUN, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.TOXTRICITY, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.FALINKS, + SpeciesId.PINCURCHIN, + SpeciesId.EISCUE, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.ZAMAZENTA, + SpeciesId.ETERNATUS, + SpeciesId.REGIELEKI, + SpeciesId.WYRDEER, + SpeciesId.URSALUNA, + SpeciesId.BASCULEGION, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.ENAMORUS, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.KLAWF, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.BOMBIRDIER, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.CYCLIZAR, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.VELUZA, + SpeciesId.DONDOZO, + SpeciesId.TATSUGIRI, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.SCREAM_TAIL, + SpeciesId.SLITHER_WING, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_THORNS, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.WO_CHIEN, + SpeciesId.CHIEN_PAO, + SpeciesId.WALKING_WAKE, + SpeciesId.OGERPON, + SpeciesId.HYDRAPPLE, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_YAMASK, + SpeciesId.GALAR_STUNFISK, [ - Species.URSHIFU, + SpeciesId.URSHIFU, "rapid-strike", ], - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.HISUI_DECIDUEYE, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.SUNNY_DAY]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.EKANS, - Species.ARBOK, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.GRIMER, - Species.MUK, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.ONIX, - Species.DROWZEE, - Species.HYPNO, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.MR_MIME, - Species.SCYTHER, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.PORYGON, - Species.AERODACTYL, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.SUDOWOODO, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.YANMA, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.PHANPY, - Species.DONPHAN, - Species.PORYGON2, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.NOSEPASS, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.TROPIUS, - Species.CHIMECHO, - Species.ABSOL, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.BIDOOF, - Species.BIBAREL, - Species.KRICKETUNE, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.BUDEW, - Species.ROSERADE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.WORMADAM, - Species.MOTHIM, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.CHERUBI, - Species.CHERRIM, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.STUNKY, - Species.SKUNTANK, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.MIME_JR, - Species.HAPPINY, - Species.CHATOT, - Species.SPIRITOMB, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.CARNIVINE, - Species.WEAVILE, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.YANMEGA, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.PORYGON_Z, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.DARKRAI, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.PATRAT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.THROH, - Species.SAWK, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.DARUMAKA, - Species.DARMANITAN, - Species.MARACTUS, - Species.SCRAGGY, - Species.SCRAFTY, - Species.TRUBBISH, - Species.GARBODOR, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.DEERLING, - Species.SAWSBUCK, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FERROSEED, - Species.FERROTHORN, - Species.EELEKTROSS, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.LANDORUS, - Species.KYUREM, - Species.KELDEO, - Species.MELOETTA, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.LITLEO, - Species.PYROAR, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.ESPURR, - Species.MEOWSTIC, - Species.AEGISLASH, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.CARBINK, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.NOIBAT, - Species.NOIVERN, - Species.XERNEAS, - Species.YVELTAL, - Species.ZYGARDE, - Species.DIANCIE, - Species.HOOPA, - Species.VOLCANION, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, + [MoveId.SUNNY_DAY]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.PORYGON, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.SUDOWOODO, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.YANMA, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.NOSEPASS, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.KRICKETUNE, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.CHATOT, + SpeciesId.SPIRITOMB, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.WEAVILE, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.DARKRAI, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.MARACTUS, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.EELEKTROSS, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.AEGISLASH, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, [ - Species.LYCANROC, + SpeciesId.LYCANROC, "midday", "midnight", ], - Species.MUDBRAY, - Species.MUDSDALE, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.SALANDIT, - Species.SALAZZLE, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.PASSIMIAN, - Species.SANDYGAST, - Species.PALOSSAND, - Species.TYPE_NULL, - Species.SILVALLY, - Species.KOMALA, - Species.TURTONATOR, - Species.MIMIKYU, - Species.DRAMPA, - Species.DHELMISE, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.SOLGALEO, - Species.LUNALA, - Species.XURKITREE, - Species.MAGEARNA, - Species.BLACEPHALON, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.GREEDENT, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.CARKOL, - Species.COALOSSAL, - Species.FLAPPLE, - Species.APPLETUN, - Species.TOXTRICITY, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.CURSOLA, - Species.SIRFETCHD, - Species.MR_RIME, - Species.FALINKS, - Species.STONJOURNER, - Species.DRACOZOLT, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ZAMAZENTA, - Species.ETERNATUS, - Species.ZARUDE, - Species.CALYREX, - Species.WYRDEER, - Species.KLEAVOR, - Species.URSALUNA, - Species.SNEASLER, - Species.ENAMORUS, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.LECHONK, - Species.OINKOLOGNE, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.NYMBLE, - Species.LOKIX, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.FIDOUGH, - Species.DACHSBUN, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.SQUAWKABILLY, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.CHARCADET, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.SHROODLE, - Species.GRAFAIAI, - Species.KLAWF, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.BOMBIRDIER, - Species.VAROOM, - Species.REVAVROOM, - Species.CYCLIZAR, - Species.GLIMMET, - Species.GLIMMORA, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.ANNIHILAPE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.BRUTE_BONNET, - Species.FLUTTER_MANE, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.IRON_THORNS, - Species.WO_CHIEN, - Species.TING_LU, - Species.CHI_YU, - Species.ROARING_MOON, - Species.KORAIDON, - Species.WALKING_WAKE, - Species.DIPPLIN, - Species.OGERPON, - Species.HYDRAPPLE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.TERAPAGOS, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.ETERNAL_FLOETTE, - Species.GALAR_MEOWTH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_FARFETCHD, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_TYPHLOSION, - Species.HISUI_SNEASEL, - Species.HISUI_LILLIGANT, - Species.HISUI_BRAVIARY, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.HISUI_DECIDUEYE, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.MIMIKYU, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.XURKITREE, + SpeciesId.MAGEARNA, + SpeciesId.BLACEPHALON, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.GREEDENT, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.TOXTRICITY, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.SIRFETCHD, + SpeciesId.MR_RIME, + SpeciesId.FALINKS, + SpeciesId.STONJOURNER, + SpeciesId.DRACOZOLT, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ZAMAZENTA, + SpeciesId.ETERNATUS, + SpeciesId.ZARUDE, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.SNEASLER, + SpeciesId.ENAMORUS, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.SQUAWKABILLY, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.CHARCADET, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.KLAWF, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.BOMBIRDIER, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.CYCLIZAR, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.ANNIHILAPE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.BRUTE_BONNET, + SpeciesId.FLUTTER_MANE, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_THORNS, + SpeciesId.WO_CHIEN, + SpeciesId.TING_LU, + SpeciesId.CHI_YU, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.DIPPLIN, + SpeciesId.OGERPON, + SpeciesId.HYDRAPPLE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_DECIDUEYE, [ - Species.PALDEA_TAUROS, + SpeciesId.PALDEA_TAUROS, "combat", "blaze", ], - Species.BLOODMOON_URSALUNA, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.CRUNCH]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.BLASTOISE, - Species.RATTATA, - Species.RATICATE, - Species.EKANS, - Species.ARBOK, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.ZUBAT, - Species.GOLBAT, - Species.GROWLITHE, - Species.ARCANINE, - Species.RHYHORN, - Species.RHYDON, - Species.KANGASKHAN, - Species.GYARADOS, - Species.OMASTAR, - Species.AERODACTYL, - Species.SNORLAX, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.CROBAT, - Species.UMBREON, - Species.GIRAFARIG, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.TEDDIURSA, - Species.URSARING, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.EXPLOUD, - Species.MAWILE, - Species.AGGRON, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.CARVANHA, - Species.SHARPEDO, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.SEVIPER, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.SNORUNT, - Species.GLALIE, - Species.WALREIN, - Species.HUNTAIL, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.GROUDON, - Species.RAYQUAZA, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.BIDOOF, - Species.BIBAREL, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.CRANIDOS, - Species.BUIZEL, - Species.FLOATZEL, - Species.STUNKY, - Species.SKUNTANK, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SKORUPI, - Species.DRAPION, - Species.CARNIVINE, - Species.RHYPERIOR, - Species.YANMEGA, - Species.GLISCOR, - Species.FROSLASS, - Species.HEATRAN, - Species.PATRAT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISAGE, - Species.PANPOUR, - Species.SIMIPOUR, - Species.BASCULIN, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.ZOROARK, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.DRUDDIGON, - Species.DURANT, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.CHESNAUGHT, - Species.LITLEO, - Species.PYROAR, - Species.PANCHAM, - Species.PANGORO, - Species.TYRUNT, - Species.TYRANTRUM, - Species.BERGMITE, - Species.AVALUGG, - Species.ZYGARDE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.ROCKRUFF, - Species.LYCANROC, - Species.DEWPIDER, - Species.ARAQUANID, - Species.SILVALLY, - Species.BRUXISH, - Species.SOLGALEO, - Species.GUZZLORD, - Species.SKWOVET, - Species.GREEDENT, - Species.THIEVUL, - Species.CHEWTLE, - Species.DREDNAW, - Species.YAMPER, - Species.BOLTUND, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.GRIMMSNARL, - Species.PERRSERKER, - Species.MORPEKO, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.ZARUDE, - Species.REGIDRAGO, - Species.GLASTRIER, - Species.SPECTRIER, - Species.URSALUNA, - Species.BASCULEGION, - Species.OVERQWIL, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.FIDOUGH, - Species.DACHSBUN, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.CYCLIZAR, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.VELUZA, - Species.DONDOZO, - Species.FARIGIRAF, - Species.SCREAM_TAIL, - Species.BRUTE_BONNET, - Species.IRON_JUGULIS, - Species.IRON_THORNS, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.CHIEN_PAO, - Species.CHI_YU, - Species.ROARING_MOON, - Species.KORAIDON, - Species.MIRAIDON, - Species.WALKING_WAKE, - Species.OKIDOGI, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.TERAPAGOS, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.GALAR_MEOWTH, - Species.GALAR_STUNFISK, + [MoveId.CRUNCH]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.BLASTOISE, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.KANGASKHAN, + SpeciesId.GYARADOS, + SpeciesId.OMASTAR, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.CROBAT, + SpeciesId.UMBREON, + SpeciesId.GIRAFARIG, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.EXPLOUD, + SpeciesId.MAWILE, + SpeciesId.AGGRON, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.SEVIPER, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.WALREIN, + SpeciesId.HUNTAIL, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.CRANIDOS, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CARNIVINE, + SpeciesId.RHYPERIOR, + SpeciesId.YANMEGA, + SpeciesId.GLISCOR, + SpeciesId.FROSLASS, + SpeciesId.HEATRAN, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISAGE, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.BASCULIN, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.ZOROARK, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.DRUDDIGON, + SpeciesId.DURANT, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.CHESNAUGHT, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.ZYGARDE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.SILVALLY, + SpeciesId.BRUXISH, + SpeciesId.SOLGALEO, + SpeciesId.GUZZLORD, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.THIEVUL, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.GRIMMSNARL, + SpeciesId.PERRSERKER, + SpeciesId.MORPEKO, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.ZARUDE, + SpeciesId.REGIDRAGO, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.URSALUNA, + SpeciesId.BASCULEGION, + SpeciesId.OVERQWIL, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.CYCLIZAR, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.VELUZA, + SpeciesId.DONDOZO, + SpeciesId.FARIGIRAF, + SpeciesId.SCREAM_TAIL, + SpeciesId.BRUTE_BONNET, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_THORNS, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.CHIEN_PAO, + SpeciesId.CHI_YU, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.OKIDOGI, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_STUNFISK, [ - Species.URSHIFU, + SpeciesId.URSHIFU, "single-strike", ], [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", "shadow", ], - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_QWILFISH, - Species.HISUI_ZOROARK, - Species.HISUI_AVALUGG, - Species.BLOODMOON_URSALUNA, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_AVALUGG, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.PSYCH_UP]: [ - Species.BUTTERFREE, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.FARFETCHD, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.ONIX, - Species.DROWZEE, - Species.HYPNO, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.LICKITUNG, - Species.CHANSEY, - Species.TANGELA, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.JYNX, - Species.PORYGON, - Species.SNORLAX, - Species.MEWTWO, - Species.MEW, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.SUDOWOODO, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.DUNSPARCE, - Species.STEELIX, - Species.SNEASEL, - Species.PORYGON2, - Species.STANTLER, - Species.SMOOCHUM, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.NUZLEAF, - Species.SHIFTRY, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.MEDITITE, - Species.MEDICHAM, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.SWABLU, - Species.ALTARIA, - Species.LUNATONE, - Species.SOLROCK, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.MILOTIC, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.CHIMECHO, - Species.ABSOL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.BUDEW, - Species.ROSERADE, - Species.WORMADAM, - Species.MOTHIM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.MIME_JR, - Species.HAPPINY, - Species.SPIRITOMB, - Species.FINNEON, - Species.LUMINEON, - Species.WEAVILE, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.TANGROWTH, - Species.TOGEKISS, - Species.YANMEGA, - Species.PORYGON_Z, - Species.GALLADE, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.PHIONE, - Species.MANAPHY, - Species.DARKRAI, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.WATCHOG, - Species.PURRLOIN, - Species.LIEPARD, - Species.MUNNA, - Species.MUSHARNA, - Species.UNFEZANT, - Species.WOOBAT, - Species.SWOOBAT, - Species.AUDINO, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.ZORUA, - Species.ZOROARK, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.MIENFOO, - Species.MIENSHAO, - Species.VULLABY, - Species.MANDIBUZZ, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.KELDEO, - Species.MELOETTA, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.VIVILLON, - Species.ESPURR, - Species.MEOWSTIC, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.CARBINK, - Species.KLEFKI, - Species.XERNEAS, - Species.DIANCIE, - Species.HOOPA, - Species.PRIMARINA, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.COMFEY, - Species.ORANGURU, - Species.GOLISOPOD, - Species.PYUKUMUKU, - Species.MINIOR, - Species.KOMALA, - Species.MIMIKYU, - Species.DRAMPA, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.SOLGALEO, - Species.LUNALA, - Species.MARSHADOW, - Species.INDEEDEE, - Species.RABSCA, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_EXEGGUTOR, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_SLOWKING, + [MoveId.PSYCH_UP]: [ + SpeciesId.BUTTERFREE, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.FARFETCHD, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.LICKITUNG, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.PORYGON, + SpeciesId.SNORLAX, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.SUDOWOODO, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.DUNSPARCE, + SpeciesId.STEELIX, + SpeciesId.SNEASEL, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.SMOOCHUM, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.SPIRITOMB, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.WEAVILE, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.TANGROWTH, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.WATCHOG, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.UNFEZANT, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.AUDINO, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.VIVILLON, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.CARBINK, + SpeciesId.KLEFKI, + SpeciesId.XERNEAS, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.PRIMARINA, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.GOLISOPOD, + SpeciesId.PYUKUMUKU, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.MIMIKYU, + SpeciesId.DRAMPA, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.MARSHADOW, + SpeciesId.INDEEDEE, + SpeciesId.RABSCA, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_SLOWKING, ], - [Moves.SHADOW_BALL]: [ - Species.BUTTERFREE, - Species.RATTATA, - Species.RATICATE, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.MEOWTH, - Species.PERSIAN, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.GRIMER, - Species.MUK, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.CHANSEY, - Species.KANGASKHAN, - Species.MR_MIME, - Species.JYNX, - Species.TAUROS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.PORYGON, - Species.SNORLAX, - Species.MEWTWO, - Species.MEW, - Species.TYPHLOSION, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.CROBAT, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.AIPOM, - Species.YANMA, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.DUNSPARCE, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SNEASEL, - Species.CORSOLA, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.PORYGON2, - Species.STANTLER, - Species.SMOOCHUM, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.MEDITITE, - Species.MEDICHAM, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.CACTURNE, - Species.ZANGOOSE, - Species.LUNATONE, - Species.SOLROCK, - Species.BALTOY, - Species.CLAYDOL, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.CHIMECHO, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.GOREBYSS, - Species.METANG, - Species.METAGROSS, - Species.LATIAS, - Species.LATIOS, - Species.JIRACHI, - Species.DEOXYS, - Species.BIDOOF, - Species.BIBAREL, - Species.BUDEW, - Species.ROSERADE, - Species.WORMADAM, - Species.MOTHIM, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.STUNKY, - Species.SKUNTANK, - Species.BRONZOR, - Species.BRONZONG, - Species.MIME_JR, - Species.HAPPINY, - Species.SPIRITOMB, - Species.MUNCHLAX, - Species.LUCARIO, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.LICKILICKY, - Species.TOGEKISS, - Species.YANMEGA, - Species.LEAFEON, - Species.GLACEON, - Species.PORYGON_Z, - Species.GALLADE, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.GIRATINA, - Species.CRESSELIA, - Species.MANAPHY, - Species.DARKRAI, - Species.ARCEUS, - Species.VICTINI, - Species.PATRAT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.MUNNA, - Species.MUSHARNA, - Species.WOOBAT, - Species.SWOOBAT, - Species.AUDINO, - Species.WHIMSICOTT, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.ZORUA, - Species.ZOROARK, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.DEERLING, - Species.SAWSBUCK, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.GOLETT, - Species.GOLURK, - Species.VULLABY, - Species.MANDIBUZZ, - Species.RESHIRAM, - Species.ZEKROM, - Species.KYUREM, - Species.MELOETTA, - Species.DELPHOX, - Species.MEOWSTIC, - Species.AEGISLASH, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAWITZER, - Species.SYLVEON, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.NOIBAT, - Species.NOIVERN, - Species.YVELTAL, - Species.HOOPA, - Species.DECIDUEYE, - Species.PRIMARINA, - Species.ORANGURU, - Species.PASSIMIAN, - Species.SANDYGAST, - Species.PALOSSAND, - Species.SILVALLY, - Species.MIMIKYU, - Species.DRAMPA, - Species.DHELMISE, - Species.TAPU_LELE, - Species.TAPU_FINI, - Species.LUNALA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.BLACEPHALON, - Species.CINDERACE, - Species.INTELEON, - Species.DOTTLER, - Species.ORBEETLE, - Species.THIEVUL, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATTERENE, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.CURSOLA, - Species.MR_RIME, - Species.RUNERIGUS, - Species.INDEEDEE, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ETERNATUS, - Species.SPECTRIER, - Species.WYRDEER, - Species.BASCULEGION, - Species.SNEASLER, - Species.OVERQWIL, - Species.MEOWSCARADA, - Species.SKELEDIRGE, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.RABSCA, - Species.ESPATHRA, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.ANNIHILAPE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.FLUTTER_MANE, - Species.GIMMIGHOUL, - Species.GHOLDENGO, - Species.IRON_VALIANT, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.PECHARUNT, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_MAROWAK, - Species.MAROWAK, - Species.GALAR_MEOWTH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_YAMASK, + [MoveId.SHADOW_BALL]: [ + SpeciesId.BUTTERFREE, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.TAUROS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.PORYGON, + SpeciesId.SNORLAX, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.TYPHLOSION, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.CROBAT, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.AIPOM, + SpeciesId.YANMA, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.DUNSPARCE, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SNEASEL, + SpeciesId.CORSOLA, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.SMOOCHUM, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.CACTURNE, + SpeciesId.ZANGOOSE, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.GOREBYSS, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.SPIRITOMB, + SpeciesId.MUNCHLAX, + SpeciesId.LUCARIO, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.LICKILICKY, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.AUDINO, + SpeciesId.WHIMSICOTT, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.KYUREM, + SpeciesId.MELOETTA, + SpeciesId.DELPHOX, + SpeciesId.MEOWSTIC, + SpeciesId.AEGISLASH, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAWITZER, + SpeciesId.SYLVEON, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.YVELTAL, + SpeciesId.HOOPA, + SpeciesId.DECIDUEYE, + SpeciesId.PRIMARINA, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.SILVALLY, + SpeciesId.MIMIKYU, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_FINI, + SpeciesId.LUNALA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.BLACEPHALON, + SpeciesId.CINDERACE, + SpeciesId.INTELEON, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.THIEVUL, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATTERENE, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.INDEEDEE, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ETERNATUS, + SpeciesId.SPECTRIER, + SpeciesId.WYRDEER, + SpeciesId.BASCULEGION, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.MEOWSCARADA, + SpeciesId.SKELEDIRGE, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.RABSCA, + SpeciesId.ESPATHRA, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.ANNIHILAPE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.FLUTTER_MANE, + SpeciesId.GIMMIGHOUL, + SpeciesId.GHOLDENGO, + SpeciesId.IRON_VALIANT, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.PECHARUNT, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.MAROWAK, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_YAMASK, [ - Species.CALYREX, + SpeciesId.CALYREX, "shadow", ], - Species.HISUI_TYPHLOSION, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, ], - [Moves.FUTURE_SIGHT]: [ - Species.PSYDUCK, - Species.GOLDUCK, - Species.KADABRA, - Species.ALAKAZAM, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.DROWZEE, - Species.HYPNO, - Species.EXEGGUTOR, - Species.MR_MIME, - Species.JYNX, - Species.LAPRAS, - Species.MEWTWO, - Species.MEW, - Species.NOCTOWL, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MARILL, - Species.AZUMARILL, - Species.ESPEON, - Species.SLOWKING, - Species.GIRAFARIG, - Species.DELIBIRD, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SPOINK, - Species.LUNATONE, - Species.BARBOACH, - Species.WHISCASH, - Species.CLAYDOL, - Species.CASTFORM, - Species.DUSKULL, - Species.DUSCLOPS, - Species.CHIMECHO, - Species.ABSOL, - Species.METANG, - Species.METAGROSS, - Species.LATIAS, - Species.LATIOS, - Species.JIRACHI, - Species.CHINGLING, - Species.BRONZOR, - Species.BRONZONG, - Species.MIME_JR, - Species.TOGEKISS, - Species.GALLADE, - Species.DUSKNOIR, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.CRESSELIA, - Species.ARCEUS, - Species.VICTINI, - Species.MUNNA, - Species.MUSHARNA, - Species.WOOBAT, - Species.SWOOBAT, - Species.DARMANITAN, - Species.SIGILYPH, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.BEHEEYEM, - Species.DELPHOX, - Species.INKAY, - Species.MALAMAR, - Species.ORANGURU, - Species.TAPU_LELE, - Species.SOLGALEO, - Species.LUNALA, - Species.NECROZMA, - Species.DOTTLER, - Species.ORBEETLE, - Species.HATTERENE, - Species.MR_RIME, - Species.INDEEDEE, - Species.CALYREX, - Species.IRON_VALIANT, - Species.MUNKIDORI, - Species.IRON_CROWN, + [MoveId.FUTURE_SIGHT]: [ + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.EXEGGUTOR, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.LAPRAS, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.NOCTOWL, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.ESPEON, + SpeciesId.SLOWKING, + SpeciesId.GIRAFARIG, + SpeciesId.DELIBIRD, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SPOINK, + SpeciesId.LUNATONE, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CLAYDOL, + SpeciesId.CASTFORM, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.JIRACHI, + SpeciesId.CHINGLING, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.MIME_JR, + SpeciesId.TOGEKISS, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.CRESSELIA, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.DARMANITAN, + SpeciesId.SIGILYPH, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.BEHEEYEM, + SpeciesId.DELPHOX, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.ORANGURU, + SpeciesId.TAPU_LELE, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NECROZMA, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.HATTERENE, + SpeciesId.MR_RIME, + SpeciesId.INDEEDEE, + SpeciesId.CALYREX, + SpeciesId.IRON_VALIANT, + SpeciesId.MUNKIDORI, + SpeciesId.IRON_CROWN, [ - Species.MEOWSTIC, + SpeciesId.MEOWSTIC, "female", ], - Species.ALOLA_RAICHU, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_SLOWKING, + SpeciesId.ALOLA_RAICHU, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_SLOWKING, ], - [Moves.ROCK_SMASH]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.BEEDRILL, - Species.RATTATA, - Species.RATICATE, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.PARAS, - Species.PARASECT, - Species.DIGLETT, - Species.DUGTRIO, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.SLOWBRO, - Species.MUK, - Species.GENGAR, - Species.ONIX, - Species.KRABBY, - Species.KINGLER, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.SCYTHER, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.BAYLEEF, - Species.MEGANIUM, - Species.QUILAVA, - Species.TYPHLOSION, - Species.CROCONAW, - Species.FERALIGATR, - Species.FURRET, - Species.LEDIAN, - Species.TOGEPI, - Species.TOGETIC, - Species.FLAAFFY, - Species.AMPHAROS, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.AIPOM, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.SLOWKING, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.PHANPY, - Species.DONPHAN, - Species.TYROGUE, - Species.HITMONTOP, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.NOSEPASS, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.GULPIN, - Species.SWALOT, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPINDA, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.CLAYDOL, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.KECLEON, - Species.DUSCLOPS, - Species.TROPIUS, - Species.ABSOL, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.RELICANTH, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.BIDOOF, - Species.BIBAREL, - Species.KRICKETUNE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.BUIZEL, - Species.FLOATZEL, - Species.GASTRODON, - Species.AMBIPOM, - Species.BUNEARY, - Species.LOPUNNY, - Species.STUNKY, - Species.SKUNTANK, - Species.BRONZONG, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.ABOMASNOW, - Species.WEAVILE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.DARKRAI, - Species.ARCEUS, - Species.VICTINI, - Species.SERPERIOR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.ZEBSTRIKA, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.DRILBUR, - Species.EXCADRILL, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.ZOROARK, - Species.REUNICLUS, - Species.SAWSBUCK, - Species.ESCAVALIER, - Species.FERROSEED, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.EELEKTROSS, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.DURANT, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.KELDEO, - Species.MELOETTA, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.LITLEO, - Species.PYROAR, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.BINACLE, - Species.BARBARACLE, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.HAWLUCHA, - Species.GOODRA, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.BERGMITE, - Species.AVALUGG, - Species.ZYGARDE, - Species.VOLCANION, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.MUDBRAY, - Species.MUDSDALE, - Species.PASSIMIAN, - Species.GOLISOPOD, - Species.TAPU_BULU, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.OBSTAGOON, - Species.SIRFETCHD, - Species.FALINKS, - Species.CUFANT, - Species.COPPERAJAH, - Species.DURALUDON, - Species.KUBFU, - Species.URSHIFU, - Species.KLEAVOR, - Species.URSALUNA, - Species.SNEASLER, - Species.ENAMORUS, - Species.KLAWF, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.KORAIDON, - Species.ARCHALUDON, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MAROWAK, - Species.GALAR_FARFETCHD, - Species.GALAR_ZAPDOS, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_TYPHLOSION, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.HISUI_DECIDUEYE, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + [MoveId.ROCK_SMASH]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.BEEDRILL, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.SLOWBRO, + SpeciesId.MUK, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.SCYTHER, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.FURRET, + SpeciesId.LEDIAN, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.AIPOM, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.SLOWKING, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.NOSEPASS, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPINDA, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.CLAYDOL, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.KECLEON, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.ABSOL, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.RELICANTH, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.KRICKETUNE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZONG, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.SERPERIOR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.ZEBSTRIKA, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.ZOROARK, + SpeciesId.REUNICLUS, + SpeciesId.SAWSBUCK, + SpeciesId.ESCAVALIER, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.EELEKTROSS, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.GOODRA, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.ZYGARDE, + SpeciesId.VOLCANION, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.PASSIMIAN, + SpeciesId.GOLISOPOD, + SpeciesId.TAPU_BULU, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.OBSTAGOON, + SpeciesId.SIRFETCHD, + SpeciesId.FALINKS, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DURALUDON, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.SNEASLER, + SpeciesId.ENAMORUS, + SpeciesId.KLAWF, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.KORAIDON, + SpeciesId.ARCHALUDON, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.WHIRLPOOL]: [ - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.PSYDUCK, - Species.GOLDUCK, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.SEEL, - Species.DEWGONG, - Species.SHELLDER, - Species.CLOYSTER, - Species.KRABBY, - Species.KINGLER, - Species.LICKITUNG, - Species.RHYDON, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.VAPOREON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.SNORLAX, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.CHINCHOU, - Species.LANTURN, - Species.MARILL, - Species.AZUMARILL, - Species.POLITOED, - Species.WOOPER, - Species.QUAGSIRE, - Species.SLOWKING, - Species.QWILFISH, - Species.SNEASEL, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.MANTINE, - Species.KINGDRA, - Species.MILTANK, - Species.SUICUNE, - Species.TYRANITAR, - Species.LUGIA, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.ZIGZAGOON, - Species.LINOONE, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.WINGULL, - Species.PELIPPER, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.AGGRON, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.FEEBAS, - Species.MILOTIC, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.RAYQUAZA, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.BIBAREL, - Species.RAMPARDOS, - Species.BUIZEL, - Species.FLOATZEL, - Species.SHELLOS, - Species.GASTRODON, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.WEAVILE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.PALKIA, - Species.PHIONE, - Species.MANAPHY, - Species.ARCEUS, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.BASCULIN, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.DUCKLETT, - Species.SWANNA, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.WISHIWASHI, - Species.BRUXISH, - Species.DHELMISE, - Species.TAPU_FINI, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.CHEWTLE, - Species.DREDNAW, - Species.CRAMORANT, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.GRAPPLOCT, - Species.OBSTAGOON, - Species.CURSOLA, - Species.EISCUE, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.BASCULEGION, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.WIGLETT, - Species.WUGTRIO, - Species.PALAFIN, - Species.TATSUGIRI, - Species.IRON_BUNDLE, - Species.WALKING_WAKE, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, + [MoveId.WHIRLPOOL]: [ + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.LICKITUNG, + SpeciesId.RHYDON, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.VAPOREON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.SNORLAX, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.POLITOED, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.QWILFISH, + SpeciesId.SNEASEL, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.MANTINE, + SpeciesId.KINGDRA, + SpeciesId.MILTANK, + SpeciesId.SUICUNE, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.AGGRON, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.RAYQUAZA, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.BIBAREL, + SpeciesId.RAMPARDOS, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.WEAVILE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.PALKIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.ARCEUS, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.BASCULIN, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.WISHIWASHI, + SpeciesId.BRUXISH, + SpeciesId.DHELMISE, + SpeciesId.TAPU_FINI, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.GRAPPLOCT, + SpeciesId.OBSTAGOON, + SpeciesId.CURSOLA, + SpeciesId.EISCUE, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.BASCULEGION, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.PALAFIN, + SpeciesId.TATSUGIRI, + SpeciesId.IRON_BUNDLE, + SpeciesId.WALKING_WAKE, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, [ - Species.URSHIFU, + SpeciesId.URSHIFU, "rapid-strike", ], - Species.HISUI_SAMUROTT, + SpeciesId.HISUI_SAMUROTT, [ - Species.PALDEA_TAUROS, + SpeciesId.PALDEA_TAUROS, "aqua", ], ], - [Moves.BEAT_UP]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.EKANS, - Species.ARBOK, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.DIGLETT, - Species.DUGTRIO, - Species.MANKEY, - Species.PRIMEAPE, - Species.KANGASKHAN, - Species.MEW, - Species.AIPOM, - Species.GIRAFARIG, - Species.SNEASEL, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.VESPIQUEN, - Species.AMBIPOM, - Species.WEAVILE, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.VANILLUXE, - Species.PAWNIARD, - Species.BISHARP, - Species.DURANT, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.PANGORO, - Species.BINACLE, - Species.BARBARACLE, - Species.WISHIWASHI, - Species.SALANDIT, - Species.SALAZZLE, - Species.PASSIMIAN, - Species.MIMIKYU, - Species.NICKIT, - Species.THIEVUL, - Species.FALINKS, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.URSHIFU, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.ANNIHILAPE, - Species.FARIGIRAF, - Species.KINGAMBIT, - Species.FEZANDIPITI, - Species.PIKACHU, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_PERSIAN, + [MoveId.BEAT_UP]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.KANGASKHAN, + SpeciesId.MEW, + SpeciesId.AIPOM, + SpeciesId.GIRAFARIG, + SpeciesId.SNEASEL, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.VESPIQUEN, + SpeciesId.AMBIPOM, + SpeciesId.WEAVILE, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.VANILLUXE, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.DURANT, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.PANGORO, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.WISHIWASHI, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.PASSIMIAN, + SpeciesId.MIMIKYU, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.FALINKS, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.URSHIFU, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.ANNIHILAPE, + SpeciesId.FARIGIRAF, + SpeciesId.KINGAMBIT, + SpeciesId.FEZANDIPITI, + SpeciesId.PIKACHU, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_PERSIAN, ], - [Moves.UPROAR]: [ - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.PIKACHU, - Species.RAICHU, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.MANKEY, - Species.PRIMEAPE, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.MR_MIME, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.TAUROS, - Species.GYARADOS, - Species.SNORLAX, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.CROBAT, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.BELLOSSOM, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.YANMA, - Species.MURKROW, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.DUNSPARCE, - Species.TEDDIURSA, - Species.URSARING, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.BLISSEY, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.CELEBI, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.NUZLEAF, - Species.SHIFTRY, - Species.WINGULL, - Species.PELIPPER, - Species.VIGOROTH, - Species.SLAKING, - Species.NINJASK, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.AZURILL, - Species.SKITTY, - Species.DELCATTY, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.ROSELIA, - Species.CARVANHA, - Species.SHARPEDO, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.VIBRAVA, - Species.FLYGON, - Species.SWABLU, - Species.ALTARIA, - Species.WHISCASH, - Species.CHIMECHO, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.KRICKETOT, - Species.KRICKETUNE, - Species.BUDEW, - Species.ROSERADE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.WORMADAM, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.AMBIPOM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.CHINGLING, - Species.BONSLY, - Species.MIME_JR, - Species.HAPPINY, - Species.CHATOT, - Species.SPIRITOMB, - Species.MUNCHLAX, - Species.RHYPERIOR, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.YANMEGA, - Species.PORYGON_Z, - Species.ROTOM, - Species.AZELF, - Species.HEATRAN, - Species.PHIONE, - Species.MANAPHY, - Species.VICTINI, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.WOOBAT, - Species.SWOOBAT, - Species.AUDINO, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.BASCULIN, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.MARACTUS, - Species.ARCHEN, - Species.ARCHEOPS, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.DUCKLETT, - Species.SWANNA, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.ELGYEM, - Species.BEHEEYEM, - Species.STUNFISK, - Species.BOUFFALANT, - Species.VULLABY, - Species.MANDIBUZZ, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.TORNADUS, - Species.THUNDURUS, - Species.MELOETTA, - Species.DIGGERSBY, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.BINACLE, - Species.BARBARACLE, - Species.HAWLUCHA, - Species.NOIBAT, - Species.NOIVERN, - Species.HOOPA, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.WISHIWASHI, - Species.PASSIMIAN, - Species.TURTONATOR, - Species.BRUXISH, - Species.DRAMPA, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.POIPOLE, - Species.NAGANADEL, - Species.BLACEPHALON, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SKWOVET, - Species.GREEDENT, - Species.YAMPER, - Species.BOLTUND, - Species.CRAMORANT, - Species.TOXTRICITY, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.PERRSERKER, - Species.MR_RIME, - Species.FALINKS, - Species.MORPEKO, - Species.GLASTRIER, - Species.SPECTRIER, - Species.WYRDEER, - Species.BASCULEGION, - Species.ENAMORUS, - Species.LECHONK, - Species.OINKOLOGNE, - Species.SQUAWKABILLY, - Species.WATTREL, - Species.KILOWATTREL, - Species.FLITTLE, - Species.ESPATHRA, - Species.VAROOM, - Species.REVAVROOM, - Species.CYCLIZAR, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.ANNIHILAPE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.SCREAM_TAIL, - Species.KORAIDON, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.HYDRAPPLE, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, + [MoveId.UPROAR]: [ + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.SNORLAX, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.CROBAT, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.BELLOSSOM, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.YANMA, + SpeciesId.MURKROW, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.DUNSPARCE, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.BLISSEY, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.CELEBI, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINJASK, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.AZURILL, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.ROSELIA, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.WHISCASH, + SpeciesId.CHIMECHO, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.KRICKETOT, + SpeciesId.KRICKETUNE, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.WORMADAM, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.AMBIPOM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.CHINGLING, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.CHATOT, + SpeciesId.SPIRITOMB, + SpeciesId.MUNCHLAX, + SpeciesId.RHYPERIOR, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.PORYGON_Z, + SpeciesId.ROTOM, + SpeciesId.AZELF, + SpeciesId.HEATRAN, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.VICTINI, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.AUDINO, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.BASCULIN, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.MARACTUS, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.STUNFISK, + SpeciesId.BOUFFALANT, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.MELOETTA, + SpeciesId.DIGGERSBY, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.HAWLUCHA, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.HOOPA, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.WISHIWASHI, + SpeciesId.PASSIMIAN, + SpeciesId.TURTONATOR, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.BLACEPHALON, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.CRAMORANT, + SpeciesId.TOXTRICITY, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.PERRSERKER, + SpeciesId.MR_RIME, + SpeciesId.FALINKS, + SpeciesId.MORPEKO, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.WYRDEER, + SpeciesId.BASCULEGION, + SpeciesId.ENAMORUS, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.SQUAWKABILLY, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.CYCLIZAR, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.ANNIHILAPE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.SCREAM_TAIL, + SpeciesId.KORAIDON, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.HYDRAPPLE, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, [ - Species.LYCANROC, + SpeciesId.LYCANROC, "midnight", ], - Species.GALAR_MEOWTH, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.GALAR_STUNFISK, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_STUNFISK, [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", "shadow", ], - Species.BLOODMOON_URSALUNA, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.HEAT_WAVE]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.SPEAROW, - Species.FEAROW, - Species.VULPIX, - Species.NINETALES, - Species.ZUBAT, - Species.GOLBAT, - Species.GROWLITHE, - Species.ARCANINE, - Species.PONYTA, - Species.RAPIDASH, - Species.FARFETCHD, - Species.WEEZING, - Species.MAGMAR, - Species.FLAREON, - Species.AERODACTYL, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRAGONITE, - Species.MEW, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.CROBAT, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MURKROW, - Species.SLUGMA, - Species.MAGCARGO, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.MAGBY, - Species.ENTEI, - Species.HO_OH, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.VIBRAVA, - Species.FLYGON, - Species.SWABLU, - Species.ALTARIA, - Species.SOLROCK, - Species.SALAMENCE, - Species.GROUDON, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.HONCHKROW, - Species.CHATOT, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.HEATRAN, - Species.ARCEUS, - Species.VICTINI, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.PANSEAR, - Species.SIMISEAR, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.WOOBAT, - Species.SWOOBAT, - Species.DARUMAKA, - Species.DARMANITAN, - Species.SIGILYPH, - Species.ARCHEN, - Species.ARCHEOPS, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.DRUDDIGON, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.TORNADUS, - Species.RESHIRAM, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.LITLEO, - Species.PYROAR, - Species.NOIBAT, - Species.NOIVERN, - Species.YVELTAL, - Species.VOLCANION, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.SALANDIT, - Species.SALAZZLE, - Species.SILVALLY, - Species.TURTONATOR, - Species.DRAMPA, - Species.LUNALA, - Species.GUZZLORD, - Species.NECROZMA, - Species.NAGANADEL, - Species.BLACEPHALON, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.CARKOL, - Species.COALOSSAL, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.SQUAWKABILLY, - Species.CHARCADET, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.BOMBIRDIER, - Species.SLITHER_WING, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.CHI_YU, - Species.ROARING_MOON, - Species.KORAIDON, - Species.FEZANDIPITI, - Species.GOUGING_FIRE, - Species.ALOLA_MAROWAK, - Species.GALAR_WEEZING, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_TYPHLOSION, - Species.HISUI_BRAVIARY, + [MoveId.HEAT_WAVE]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.FARFETCHD, + SpeciesId.WEEZING, + SpeciesId.MAGMAR, + SpeciesId.FLAREON, + SpeciesId.AERODACTYL, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.CROBAT, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MURKROW, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.MAGBY, + SpeciesId.ENTEI, + SpeciesId.HO_OH, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.SOLROCK, + SpeciesId.SALAMENCE, + SpeciesId.GROUDON, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.HONCHKROW, + SpeciesId.CHATOT, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.HEATRAN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.SIGILYPH, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.DRUDDIGON, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.TORNADUS, + SpeciesId.RESHIRAM, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.YVELTAL, + SpeciesId.VOLCANION, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.SILVALLY, + SpeciesId.TURTONATOR, + SpeciesId.DRAMPA, + SpeciesId.LUNALA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.NAGANADEL, + SpeciesId.BLACEPHALON, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.SQUAWKABILLY, + SpeciesId.CHARCADET, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.BOMBIRDIER, + SpeciesId.SLITHER_WING, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.CHI_YU, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.FEZANDIPITI, + SpeciesId.GOUGING_FIRE, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_BRAVIARY, ], - [Moves.HAIL]: [ - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.PSYDUCK, - Species.GOLDUCK, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.SEEL, - Species.DEWGONG, - Species.SHELLDER, - Species.CLOYSTER, - Species.KRABBY, - Species.KINGLER, - Species.CHANSEY, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.JYNX, - Species.GYARADOS, - Species.LAPRAS, - Species.VAPOREON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.ARTICUNO, - Species.ZAPDOS, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.CHINCHOU, - Species.LANTURN, - Species.MARILL, - Species.AZUMARILL, - Species.POLITOED, - Species.WOOPER, - Species.QUAGSIRE, - Species.SLOWKING, - Species.QWILFISH, - Species.SNEASEL, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.DELIBIRD, - Species.MANTINE, - Species.KINGDRA, - Species.SMOOCHUM, - Species.BLISSEY, - Species.SUICUNE, - Species.LUGIA, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.WINGULL, - Species.PELIPPER, - Species.AZURILL, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.LUNATONE, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.FEEBAS, - Species.MILOTIC, - Species.CASTFORM, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.REGICE, - Species.KYOGRE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.BUIZEL, - Species.FLOATZEL, - Species.SHELLOS, - Species.GASTRODON, - Species.HAPPINY, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.GLACEON, - Species.MAMOSWINE, - Species.FROSLASS, - Species.PALKIA, - Species.PHIONE, - Species.MANAPHY, - Species.ARCEUS, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PANPOUR, - Species.SIMIPOUR, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.BASCULIN, - Species.DUCKLETT, - Species.SWANNA, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.KYUREM, - Species.KELDEO, - Species.SKRELP, - Species.DRAGALGE, - Species.AMAURA, - Species.AURORUS, - Species.CARBINK, - Species.GOODRA, - Species.BERGMITE, - Species.AVALUGG, - Species.XERNEAS, - Species.DIANCIE, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.CRABOMINABLE, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.WIMPOD, - Species.GOLISOPOD, - Species.PYUKUMUKU, - Species.TYPE_NULL, - Species.SILVALLY, - Species.CURSOLA, - Species.MR_RIME, - Species.FROSMOTH, - Species.EISCUE, - Species.ARCTOZOLT, - Species.ARCTOVISH, - Species.GLASTRIER, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, + [MoveId.HAIL]: [ + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.JYNX, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.VAPOREON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.POLITOED, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.QWILFISH, + SpeciesId.SNEASEL, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.KINGDRA, + SpeciesId.SMOOCHUM, + SpeciesId.BLISSEY, + SpeciesId.SUICUNE, + SpeciesId.LUGIA, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.AZURILL, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.LUNATONE, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.REGICE, + SpeciesId.KYOGRE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.HAPPINY, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.GLACEON, + SpeciesId.MAMOSWINE, + SpeciesId.FROSLASS, + SpeciesId.PALKIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.ARCEUS, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.BASCULIN, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.CARBINK, + SpeciesId.GOODRA, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.XERNEAS, + SpeciesId.DIANCIE, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.CRABOMINABLE, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.PYUKUMUKU, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.CURSOLA, + SpeciesId.MR_RIME, + SpeciesId.FROSMOTH, + SpeciesId.EISCUE, + SpeciesId.ARCTOZOLT, + SpeciesId.ARCTOVISH, + SpeciesId.GLASTRIER, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", ], ], - [Moves.TORMENT]: [ - Species.EKANS, - Species.ARBOK, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.ZUBAT, - Species.GOLBAT, - Species.MEOWTH, - Species.PERSIAN, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.DODRIO, - Species.GRIMER, - Species.MUK, - Species.CLOYSTER, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.ONIX, - Species.DROWZEE, - Species.HYPNO, - Species.VOLTORB, - Species.ELECTRODE, - Species.KOFFING, - Species.WEEZING, - Species.MR_MIME, - Species.JYNX, - Species.GYARADOS, - Species.AERODACTYL, - Species.MEWTWO, - Species.MEW, - Species.CROBAT, - Species.SUDOWOODO, - Species.UMBREON, - Species.MURKROW, - Species.MISDREAVUS, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.NUZLEAF, - Species.SHIFTRY, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.LOUDRED, - Species.EXPLOUD, - Species.NOSEPASS, - Species.SABLEYE, - Species.MAWILE, - Species.CARVANHA, - Species.SHARPEDO, - Species.SPOINK, - Species.GRUMPIG, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.CHIMECHO, - Species.ABSOL, - Species.GLALIE, - Species.DEOXYS, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.SHIELDON, - Species.BASTIODON, - Species.FLOATZEL, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.STUNKY, - Species.SKUNTANK, - Species.MIME_JR, - Species.CHATOT, - Species.SPIRITOMB, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.WEAVILE, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.GLISCOR, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.AZELF, - Species.HEATRAN, - Species.DARKRAI, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.MUNNA, - Species.MUSHARNA, - Species.WOOBAT, - Species.SWOOBAT, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARMANITAN, - Species.SCRAGGY, - Species.SCRAFTY, - Species.ARCHEN, - Species.ARCHEOPS, - Species.ZORUA, - Species.ZOROARK, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.DRUDDIGON, - Species.PAWNIARD, - Species.BISHARP, - Species.VULLABY, - Species.MANDIBUZZ, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.TORNADUS, - Species.THUNDURUS, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.PANCHAM, - Species.PANGORO, - Species.ESPURR, - Species.MEOWSTIC, - Species.SPRITZEE, - Species.AROMATISSE, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.HAWLUCHA, - Species.KLEFKI, - Species.NOIBAT, - Species.NOIVERN, - Species.YVELTAL, - Species.HOOPA, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.SALANDIT, - Species.SALAZZLE, - Species.BRUXISH, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.PHEROMOSA, - Species.BLACEPHALON, - Species.NICKIT, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.MORPEKO, - Species.GLASTRIER, - Species.ENAMORUS, - Species.SQUAWKABILLY, - Species.BOMBIRDIER, - Species.VAROOM, - Species.KINGAMBIT, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, + [MoveId.TORMENT]: [ + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.DODRIO, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.CLOYSTER, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.GYARADOS, + SpeciesId.AERODACTYL, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CROBAT, + SpeciesId.SUDOWOODO, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.MISDREAVUS, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.NOSEPASS, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.GLALIE, + SpeciesId.DEOXYS, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.FLOATZEL, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.MIME_JR, + SpeciesId.CHATOT, + SpeciesId.SPIRITOMB, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.WEAVILE, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.GLISCOR, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.AZELF, + SpeciesId.HEATRAN, + SpeciesId.DARKRAI, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARMANITAN, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.DRUDDIGON, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.HAWLUCHA, + SpeciesId.KLEFKI, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.YVELTAL, + SpeciesId.HOOPA, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.BRUXISH, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.PHEROMOSA, + SpeciesId.BLACEPHALON, + SpeciesId.NICKIT, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.MORPEKO, + SpeciesId.GLASTRIER, + SpeciesId.ENAMORUS, + SpeciesId.SQUAWKABILLY, + SpeciesId.BOMBIRDIER, + SpeciesId.VAROOM, + SpeciesId.KINGAMBIT, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", ], - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, ], - [Moves.WILL_O_WISP]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.VULPIX, - Species.NINETALES, - Species.GROWLITHE, - Species.ARCANINE, - Species.PONYTA, - Species.RAPIDASH, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.KOFFING, - Species.WEEZING, - Species.MAGMAR, - Species.FLAREON, - Species.MOLTRES, - Species.MEWTWO, - Species.MEW, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.MISDREAVUS, - Species.SLUGMA, - Species.MAGCARGO, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.MAGBY, - Species.ENTEI, - Species.HO_OH, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.SHIFTRY, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SHEDINJA, - Species.SABLEYE, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.ALTARIA, - Species.SOLROCK, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.ABSOL, - Species.GROUDON, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.MISMAGIUS, - Species.SPIRITOMB, - Species.MAGMORTAR, - Species.GALLADE, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.HEATRAN, - Species.GIRATINA, - Species.DARKRAI, - Species.ARCEUS, - Species.VICTINI, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.PANSEAR, - Species.SIMISEAR, - Species.DARUMAKA, - Species.DARMANITAN, - Species.YAMASK, - Species.COFAGRIGUS, - Species.FRILLISH, - Species.JELLICENT, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.HEATMOR, - Species.LARVESTA, - Species.VOLCARONA, - Species.RESHIRAM, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.LITLEO, - Species.PYROAR, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.VOLCANION, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.SALANDIT, - Species.SALAZZLE, - Species.TURTONATOR, - Species.MIMIKYU, - Species.LUNALA, - Species.MARSHADOW, - Species.BLACEPHALON, - Species.CINDERACE, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.CENTISKORCH, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.CURSOLA, - Species.RUNERIGUS, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.SPECTRIER, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.CHARCADET, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.SCOVILLAIN, - Species.HOUNDSTONE, - Species.SLITHER_WING, - Species.CHI_YU, - Species.ALOLA_MAROWAK, - Species.MAROWAK, - Species.GALAR_WEEZING, - Species.GALAR_CORSOLA, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.GALAR_YAMASK, + [MoveId.WILL_O_WISP]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.MAGMAR, + SpeciesId.FLAREON, + SpeciesId.MOLTRES, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.MISDREAVUS, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.MAGBY, + SpeciesId.ENTEI, + SpeciesId.HO_OH, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.SHIFTRY, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SHEDINJA, + SpeciesId.SABLEYE, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.ALTARIA, + SpeciesId.SOLROCK, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.ABSOL, + SpeciesId.GROUDON, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.MISMAGIUS, + SpeciesId.SPIRITOMB, + SpeciesId.MAGMORTAR, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.HEATRAN, + SpeciesId.GIRATINA, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.HEATMOR, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.RESHIRAM, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.VOLCANION, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.TURTONATOR, + SpeciesId.MIMIKYU, + SpeciesId.LUNALA, + SpeciesId.MARSHADOW, + SpeciesId.BLACEPHALON, + SpeciesId.CINDERACE, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.CENTISKORCH, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.CURSOLA, + SpeciesId.RUNERIGUS, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.SPECTRIER, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.CHARCADET, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.SCOVILLAIN, + SpeciesId.HOUNDSTONE, + SpeciesId.SLITHER_WING, + SpeciesId.CHI_YU, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.MAROWAK, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_YAMASK, [ - Species.CALYREX, + SpeciesId.CALYREX, "shadow", ], - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_TYPHLOSION, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, [ - Species.PALDEA_TAUROS, + SpeciesId.PALDEA_TAUROS, "blaze", ], ], - [Moves.FACADE]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.SEEL, - Species.DEWGONG, - Species.GRIMER, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.ONIX, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.VOLTORB, - Species.ELECTRODE, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.PORYGON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.YANMA, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.KINGDRA, - Species.PHANPY, - Species.DONPHAN, - Species.PORYGON2, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.NOSEPASS, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.FEEBAS, - Species.MILOTIC, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.TROPIUS, - Species.CHIMECHO, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.BIDOOF, - Species.BIBAREL, - Species.KRICKETUNE, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.BUDEW, - Species.ROSERADE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.WORMADAM, - Species.MOTHIM, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.CHERUBI, - Species.CHERRIM, - Species.SHELLOS, - Species.GASTRODON, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.STUNKY, - Species.SKUNTANK, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.MIME_JR, - Species.HAPPINY, - Species.CHATOT, - Species.SPIRITOMB, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.CARNIVINE, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.YANMEGA, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.PORYGON_Z, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.PHIONE, - Species.MANAPHY, - Species.DARKRAI, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.MUNNA, - Species.MUSHARNA, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.WOOBAT, - Species.SWOOBAT, - Species.DRILBUR, - Species.EXCADRILL, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.BASCULIN, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.MARACTUS, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.TRUBBISH, - Species.GARBODOR, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.DUCKLETT, - Species.SWANNA, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.JOLTIK, - Species.GALVANTULA, - Species.FERROSEED, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.SHELMET, - Species.ACCELGOR, - Species.STUNFISK, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.DURANT, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.KELDEO, - Species.MELOETTA, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.LITLEO, - Species.PYROAR, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.ESPURR, - Species.MEOWSTIC, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.CARBINK, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.BERGMITE, - Species.AVALUGG, - Species.NOIBAT, - Species.NOIVERN, - Species.XERNEAS, - Species.YVELTAL, - Species.ZYGARDE, - Species.DIANCIE, - Species.HOOPA, - Species.VOLCANION, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.MUDBRAY, - Species.MUDSDALE, - Species.DEWPIDER, - Species.ARAQUANID, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.SALANDIT, - Species.SALAZZLE, - Species.STUFFUL, - Species.BEWEAR, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.PASSIMIAN, - Species.WIMPOD, - Species.GOLISOPOD, - Species.SANDYGAST, - Species.PALOSSAND, - Species.TYPE_NULL, - Species.SILVALLY, - Species.MINIOR, - Species.KOMALA, - Species.TURTONATOR, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.BRUXISH, - Species.DRAMPA, - Species.DHELMISE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.SOLGALEO, - Species.LUNALA, - Species.NIHILEGO, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.XURKITREE, - Species.CELESTEELA, - Species.GUZZLORD, - Species.NECROZMA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.POIPOLE, - Species.NAGANADEL, - Species.STAKATAKA, - Species.BLACEPHALON, - Species.ZERAORA, - Species.MELTAN, - Species.MELMETAL, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.SKWOVET, - Species.GREEDENT, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.DOTTLER, - Species.ORBEETLE, - Species.NICKIT, - Species.THIEVUL, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.WOOLOO, - Species.DUBWOOL, - Species.CHEWTLE, - Species.DREDNAW, - Species.YAMPER, - Species.BOLTUND, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.FLAPPLE, - Species.APPLETUN, - Species.SILICOBRA, - Species.SANDACONDA, - Species.CRAMORANT, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.TOXEL, - Species.TOXTRICITY, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.CURSOLA, - Species.SIRFETCHD, - Species.MR_RIME, - Species.RUNERIGUS, - Species.MILCERY, - Species.ALCREMIE, - Species.FALINKS, - Species.PINCURCHIN, - Species.SNOM, - Species.FROSMOTH, - Species.STONJOURNER, - Species.EISCUE, - Species.INDEEDEE, - Species.MORPEKO, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.DURALUDON, - Species.DREEPY, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.ETERNATUS, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.REGIELEKI, - Species.REGIDRAGO, - Species.GLASTRIER, - Species.SPECTRIER, - Species.CALYREX, - Species.WYRDEER, - Species.KLEAVOR, - Species.URSALUNA, - Species.BASCULEGION, - Species.SNEASLER, - Species.OVERQWIL, - Species.ENAMORUS, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.LECHONK, - Species.OINKOLOGNE, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.NYMBLE, - Species.LOKIX, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.FIDOUGH, - Species.DACHSBUN, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.SQUAWKABILLY, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.CHARCADET, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.WATTREL, - Species.KILOWATTREL, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.SHROODLE, - Species.GRAFAIAI, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.KLAWF, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.RELLOR, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.WIGLETT, - Species.WUGTRIO, - Species.BOMBIRDIER, - Species.FINIZEN, - Species.PALAFIN, - Species.VAROOM, - Species.REVAVROOM, - Species.CYCLIZAR, - Species.ORTHWORM, - Species.GLIMMET, - Species.GLIMMORA, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.FLAMIGO, - Species.CETODDLE, - Species.CETITAN, - Species.DONDOZO, - Species.TATSUGIRI, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.BRUTE_BONNET, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_BUNDLE, - Species.IRON_HANDS, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.IRON_THORNS, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.WO_CHIEN, - Species.CHIEN_PAO, - Species.TING_LU, - Species.CHI_YU, - Species.ROARING_MOON, - Species.KORAIDON, - Species.MIRAIDON, - Species.WALKING_WAKE, - Species.IRON_LEAVES, - Species.DIPPLIN, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.OGERPON, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.TERAPAGOS, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.ETERNAL_FLOETTE, - Species.GALAR_MEOWTH, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_FARFETCHD, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.GALAR_YAMASK, - Species.GALAR_STUNFISK, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_TYPHLOSION, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.HISUI_DECIDUEYE, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + [MoveId.FACADE]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.PORYGON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.YANMA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.KINGDRA, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.NOSEPASS, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.KRICKETUNE, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.CHATOT, + SpeciesId.SPIRITOMB, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.BASCULIN, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.MARACTUS, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.STUNFISK, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.XURKITREE, + SpeciesId.CELESTEELA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.STAKATAKA, + SpeciesId.BLACEPHALON, + SpeciesId.ZERAORA, + SpeciesId.MELTAN, + SpeciesId.MELMETAL, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.WOOLOO, + SpeciesId.DUBWOOL, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.TOXEL, + SpeciesId.TOXTRICITY, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.SIRFETCHD, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.MILCERY, + SpeciesId.ALCREMIE, + SpeciesId.FALINKS, + SpeciesId.PINCURCHIN, + SpeciesId.SNOM, + SpeciesId.FROSMOTH, + SpeciesId.STONJOURNER, + SpeciesId.EISCUE, + SpeciesId.INDEEDEE, + SpeciesId.MORPEKO, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.DURALUDON, + SpeciesId.DREEPY, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.ETERNATUS, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.REGIELEKI, + SpeciesId.REGIDRAGO, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.BASCULEGION, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.ENAMORUS, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.SQUAWKABILLY, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.CHARCADET, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.KLAWF, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.BOMBIRDIER, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.CYCLIZAR, + SpeciesId.ORTHWORM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.FLAMIGO, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.DONDOZO, + SpeciesId.TATSUGIRI, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.BRUTE_BONNET, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_THORNS, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.WO_CHIEN, + SpeciesId.CHIEN_PAO, + SpeciesId.TING_LU, + SpeciesId.CHI_YU, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.IRON_LEAVES, + SpeciesId.DIPPLIN, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.OGERPON, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_YAMASK, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.FOCUS_PUNCH]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.SLOWBRO, - Species.MUK, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.MR_MIME, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.SNORLAX, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.LEDYBA, - Species.LEDIAN, - Species.TOGETIC, - Species.FLAAFFY, - Species.AMPHAROS, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.AIPOM, - Species.QUAGSIRE, - Species.SLOWKING, - Species.SNUBBULL, - Species.GRANBULL, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.DELIBIRD, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.TYRANITAR, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.LUDICOLO, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.MAKUHITA, - Species.HARIYAMA, - Species.SABLEYE, - Species.MAWILE, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.VOLBEAT, - Species.ILLUMISE, - Species.GRUMPIG, - Species.SPINDA, - Species.CACNEA, - Species.CACTURNE, - Species.ZANGOOSE, - Species.KECLEON, - Species.DUSCLOPS, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.GROUDON, - Species.DEOXYS, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.BIBAREL, - Species.RAMPARDOS, - Species.BUIZEL, - Species.FLOATZEL, - Species.AMBIPOM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MIME_JR, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.CROAGUNK, - Species.TOXICROAK, - Species.ABOMASNOW, - Species.WEAVILE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.GALLADE, - Species.DUSKNOIR, - Species.PALKIA, - Species.REGIGIGAS, - Species.DARKRAI, - Species.PIGNITE, - Species.EMBOAR, - Species.WATCHOG, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.SCRAGGY, - Species.SCRAFTY, - Species.REUNICLUS, - Species.EELEKTROSS, - Species.CUBCHOO, - Species.BEARTIC, - Species.MIENFOO, - Species.MIENSHAO, - Species.GOLETT, - Species.GOLURK, - Species.HEATMOR, - Species.ZEKROM, - Species.MELOETTA, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.DIGGERSBY, - Species.PANCHAM, - Species.PANGORO, - Species.HAWLUCHA, - Species.GOODRA, - Species.HOOPA, - Species.INCINEROAR, - Species.GUMSHOOS, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.STUFFUL, - Species.BEWEAR, - Species.PASSIMIAN, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_BULU, - Species.BUZZWOLE, - Species.MARSHADOW, - Species.ZERAORA, - Species.RILLABOOM, - Species.GRIMMSNARL, - Species.MR_RIME, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.URSALUNA, - Species.SNEASLER, - Species.PAWMO, - Species.PAWMOT, - Species.GARGANACL, - Species.PALAFIN, - Species.ANNIHILAPE, - Species.IRON_HANDS, - Species.GHOLDENGO, - Species.KORAIDON, - Species.OKIDOGI, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_MUK, - Species.ALOLA_MAROWAK, + [MoveId.FOCUS_PUNCH]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.SLOWBRO, + SpeciesId.MUK, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.SNORLAX, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.TOGETIC, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.AIPOM, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.DELIBIRD, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.TYRANITAR, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.LUDICOLO, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.ZANGOOSE, + SpeciesId.KECLEON, + SpeciesId.DUSCLOPS, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.GROUDON, + SpeciesId.DEOXYS, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.BIBAREL, + SpeciesId.RAMPARDOS, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.AMBIPOM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MIME_JR, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.PALKIA, + SpeciesId.REGIGIGAS, + SpeciesId.DARKRAI, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.WATCHOG, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.REUNICLUS, + SpeciesId.EELEKTROSS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.HEATMOR, + SpeciesId.ZEKROM, + SpeciesId.MELOETTA, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.DIGGERSBY, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.HAWLUCHA, + SpeciesId.GOODRA, + SpeciesId.HOOPA, + SpeciesId.INCINEROAR, + SpeciesId.GUMSHOOS, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.PASSIMIAN, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_BULU, + SpeciesId.BUZZWOLE, + SpeciesId.MARSHADOW, + SpeciesId.ZERAORA, + SpeciesId.RILLABOOM, + SpeciesId.GRIMMSNARL, + SpeciesId.MR_RIME, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.URSALUNA, + SpeciesId.SNEASLER, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.GARGANACL, + SpeciesId.PALAFIN, + SpeciesId.ANNIHILAPE, + SpeciesId.IRON_HANDS, + SpeciesId.GHOLDENGO, + SpeciesId.KORAIDON, + SpeciesId.OKIDOGI, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_MAROWAK, [ - Species.LYCANROC, + SpeciesId.LYCANROC, "midnight", ], - Species.GALAR_MR_MIME, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.HISUI_TYPHLOSION, - Species.HISUI_SNEASEL, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_DECIDUEYE, - Species.BLOODMOON_URSALUNA, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.NATURE_POWER]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.ONIX, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.TANGELA, - Species.KABUTOPS, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.BELLOSSOM, - Species.SUDOWOODO, - Species.SUNKERN, - Species.SUNFLORA, - Species.STEELIX, - Species.SLUGMA, - Species.MAGCARGO, - Species.CORSOLA, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.ROSELIA, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.CACNEA, - Species.CACTURNE, - Species.CRAWDAUNT, - Species.TROPIUS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.BUDEW, - Species.ROSERADE, - Species.CHERUBI, - Species.CHERRIM, - Species.BONSLY, - Species.CARNIVINE, - Species.FINNEON, - Species.TANGROWTH, - Species.LEAFEON, - Species.HEATRAN, - Species.REGIGIGAS, - Species.SHAYMIN, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.PANSAGE, - Species.SIMISAGE, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.MARACTUS, - Species.DWEBBLE, - Species.CRUSTLE, - Species.DEERLING, - Species.SAWSBUCK, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FERROSEED, - Species.FERROTHORN, - Species.VIRIZION, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.BINACLE, - Species.BARBARACLE, - Species.AMAURA, - Species.AURORUS, - Species.CARBINK, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.XERNEAS, - Species.DIANCIE, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.RIBOMBEE, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.DRAMPA, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.XURKITREE, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.CURSOLA, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_EXEGGUTOR, - Species.ETERNAL_FLOETTE, - Species.GALAR_CORSOLA, - Species.HISUI_TYPHLOSION, - Species.HISUI_LILLIGANT, - Species.HISUI_DECIDUEYE, + [MoveId.NATURE_POWER]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.ONIX, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.TANGELA, + SpeciesId.KABUTOPS, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.BELLOSSOM, + SpeciesId.SUDOWOODO, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.STEELIX, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.CORSOLA, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.ROSELIA, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.CRAWDAUNT, + SpeciesId.TROPIUS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.BONSLY, + SpeciesId.CARNIVINE, + SpeciesId.FINNEON, + SpeciesId.TANGROWTH, + SpeciesId.LEAFEON, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.SHAYMIN, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.MARACTUS, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.VIRIZION, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.CARBINK, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.XERNEAS, + SpeciesId.DIANCIE, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.RIBOMBEE, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.DRAMPA, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.XURKITREE, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.CURSOLA, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_CORSOLA, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.CHARGE]: [ - Species.PIKACHU, - Species.RAICHU, - Species.MAGNEMITE, - Species.MAGNETON, - Species.VOLTORB, - Species.ELECTRODE, - Species.ELECTABUZZ, - Species.JOLTEON, - Species.ZAPDOS, - Species.MEW, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.ELEKID, - Species.RAIKOU, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.PACHIRISU, - Species.MAGNEZONE, - Species.ELECTIVIRE, - Species.ROTOM, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.EMOLGA, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.TYNAMO, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.STUNFISK, - Species.THUNDURUS, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.DEDENNE, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.TOGEDEMARU, - Species.TAPU_KOKO, - Species.XURKITREE, - Species.ZERAORA, - Species.YAMPER, - Species.BOLTUND, - Species.TOXTRICITY, - Species.PINCURCHIN, - Species.MORPEKO, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.REGIELEKI, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TADBULB, - Species.BELLIBOLT, - Species.WATTREL, - Species.KILOWATTREL, - Species.SANDY_SHOCKS, - Species.IRON_HANDS, - Species.IRON_THORNS, - Species.MIRAIDON, - Species.RAGING_BOLT, - Species.ALOLA_RAICHU, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, + [MoveId.CHARGE]: [ + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.ELECTABUZZ, + SpeciesId.JOLTEON, + SpeciesId.ZAPDOS, + SpeciesId.MEW, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.ELEKID, + SpeciesId.RAIKOU, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.PACHIRISU, + SpeciesId.MAGNEZONE, + SpeciesId.ELECTIVIRE, + SpeciesId.ROTOM, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.EMOLGA, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.TYNAMO, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.STUNFISK, + SpeciesId.THUNDURUS, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.DEDENNE, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.TOGEDEMARU, + SpeciesId.TAPU_KOKO, + SpeciesId.XURKITREE, + SpeciesId.ZERAORA, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.TOXTRICITY, + SpeciesId.PINCURCHIN, + SpeciesId.MORPEKO, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.REGIELEKI, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_THORNS, + SpeciesId.MIRAIDON, + SpeciesId.RAGING_BOLT, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, ], - [Moves.TAUNT]: [ - Species.RATTATA, - Species.RATICATE, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.DODRIO, - Species.GRIMER, - Species.MUK, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.ONIX, - Species.DROWZEE, - Species.HYPNO, - Species.VOLTORB, - Species.ELECTRODE, - Species.KOFFING, - Species.WEEZING, - Species.MR_MIME, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.GYARADOS, - Species.AERODACTYL, - Species.MEWTWO, - Species.MEW, - Species.CROBAT, - Species.SUDOWOODO, - Species.AIPOM, - Species.UMBREON, - Species.MURKROW, - Species.MISDREAVUS, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.SHIFTRY, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.VIGOROTH, - Species.SLAKING, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.NOSEPASS, - Species.SABLEYE, - Species.MAWILE, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.VOLBEAT, - Species.CARVANHA, - Species.SHARPEDO, - Species.SPOINK, - Species.GRUMPIG, - Species.CACTURNE, - Species.ZANGOOSE, - Species.SEVIPER, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.CHIMECHO, - Species.ABSOL, - Species.GLALIE, - Species.DEOXYS, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.BIDOOF, - Species.BIBAREL, - Species.KRICKETUNE, - Species.SHIELDON, - Species.BASTIODON, - Species.VESPIQUEN, - Species.BUIZEL, - Species.FLOATZEL, - Species.AMBIPOM, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.STUNKY, - Species.SKUNTANK, - Species.MIME_JR, - Species.CHATOT, - Species.SPIRITOMB, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.WEAVILE, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.GLISCOR, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.AZELF, - Species.HEATRAN, - Species.DARKRAI, - Species.ARCEUS, - Species.VICTINI, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.WOOBAT, - Species.SWOOBAT, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.THROH, - Species.SAWK, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.BASCULIN, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.SCRAGGY, - Species.SCRAFTY, - Species.ARCHEN, - Species.ARCHEOPS, - Species.ZORUA, - Species.ZOROARK, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.EMOLGA, - Species.ESCAVALIER, - Species.FRILLISH, - Species.JELLICENT, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.LANDORUS, - Species.KELDEO, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.LITLEO, - Species.PYROAR, - Species.PANCHAM, - Species.PANGORO, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.HAWLUCHA, - Species.NOIBAT, - Species.NOIVERN, - Species.YVELTAL, - Species.HOOPA, - Species.VOLCANION, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.ORICORIO, - Species.ROCKRUFF, - Species.LYCANROC, - Species.SALANDIT, - Species.SALAZZLE, - Species.STUFFUL, - Species.BEWEAR, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.PASSIMIAN, - Species.WIMPOD, - Species.GOLISOPOD, - Species.PYUKUMUKU, - Species.TURTONATOR, - Species.MIMIKYU, - Species.BRUXISH, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.BLACEPHALON, - Species.ZERAORA, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.INTELEON, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.NICKIT, - Species.THIEVUL, - Species.TOXTRICITY, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.MR_RIME, - Species.RUNERIGUS, - Species.MORPEKO, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.URSHIFU, - Species.ZARUDE, - Species.GLASTRIER, - Species.SPECTRIER, - Species.URSALUNA, - Species.SNEASLER, - Species.OVERQWIL, - Species.ENAMORUS, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.QUAQUAVAL, - Species.SPIDOPS, - Species.LOKIX, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.SQUAWKABILLY, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.SHROODLE, - Species.GRAFAIAI, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.BOMBIRDIER, - Species.PALAFIN, - Species.VAROOM, - Species.REVAVROOM, - Species.CYCLIZAR, - Species.FLAMIGO, - Species.TATSUGIRI, - Species.ANNIHILAPE, - Species.KINGAMBIT, - Species.GREAT_TUSK, - Species.BRUTE_BONNET, - Species.FLUTTER_MANE, - Species.IRON_BUNDLE, - Species.IRON_JUGULIS, - Species.IRON_THORNS, - Species.WO_CHIEN, - Species.CHIEN_PAO, - Species.TING_LU, - Species.CHI_YU, - Species.ROARING_MOON, - Species.IRON_VALIANT, - Species.KORAIDON, - Species.MIRAIDON, - Species.IRON_LEAVES, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.OGERPON, - Species.RAGING_BOLT, - Species.IRON_BOULDER, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.GALAR_MEOWTH, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, + [MoveId.TAUNT]: [ + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.DODRIO, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.GYARADOS, + SpeciesId.AERODACTYL, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CROBAT, + SpeciesId.SUDOWOODO, + SpeciesId.AIPOM, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.MISDREAVUS, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.SHIFTRY, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.NOSEPASS, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.VOLBEAT, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.CACTURNE, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.GLALIE, + SpeciesId.DEOXYS, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.KRICKETUNE, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.VESPIQUEN, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.AMBIPOM, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.MIME_JR, + SpeciesId.CHATOT, + SpeciesId.SPIRITOMB, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.WEAVILE, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.GLISCOR, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.AZELF, + SpeciesId.HEATRAN, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.BASCULIN, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.EMOLGA, + SpeciesId.ESCAVALIER, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.LANDORUS, + SpeciesId.KELDEO, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.HAWLUCHA, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.YVELTAL, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.ORICORIO, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.PYUKUMUKU, + SpeciesId.TURTONATOR, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.BLACEPHALON, + SpeciesId.ZERAORA, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.INTELEON, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.TOXTRICITY, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.MORPEKO, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.URSALUNA, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.ENAMORUS, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.QUAQUAVAL, + SpeciesId.SPIDOPS, + SpeciesId.LOKIX, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.SQUAWKABILLY, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.BOMBIRDIER, + SpeciesId.PALAFIN, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.CYCLIZAR, + SpeciesId.FLAMIGO, + SpeciesId.TATSUGIRI, + SpeciesId.ANNIHILAPE, + SpeciesId.KINGAMBIT, + SpeciesId.GREAT_TUSK, + SpeciesId.BRUTE_BONNET, + SpeciesId.FLUTTER_MANE, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_THORNS, + SpeciesId.WO_CHIEN, + SpeciesId.CHIEN_PAO, + SpeciesId.TING_LU, + SpeciesId.CHI_YU, + SpeciesId.ROARING_MOON, + SpeciesId.IRON_VALIANT, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.IRON_LEAVES, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.OGERPON, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_BOULDER, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", "shadow", ], - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_DECIDUEYE, - Species.BLOODMOON_URSALUNA, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.HELPING_HAND]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.PIKACHU, - Species.RAICHU, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.DIGLETT, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.FARFETCHD, - Species.SEEL, - Species.DEWGONG, - Species.GRIMER, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.DROWZEE, - Species.HYPNO, - Species.VOLTORB, - Species.ELECTRODE, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.TYPHLOSION, - Species.SENTRET, - Species.FURRET, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.PHANPY, - Species.DONPHAN, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.WINGULL, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.NOSEPASS, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.MEDITITE, - Species.MEDICHAM, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.GULPIN, - Species.SWALOT, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.MILOTIC, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.TROPIUS, - Species.CHIMECHO, - Species.SNORUNT, - Species.GLALIE, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.KRICKETUNE, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.CHERUBI, - Species.CHERRIM, - Species.SHELLOS, - Species.GASTRODON, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.CHINGLING, - Species.STUNKY, - Species.SKUNTANK, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.MIME_JR, - Species.HAPPINY, - Species.SPIRITOMB, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.CROAGUNK, - Species.TOXICROAK, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.LEAFEON, - Species.GLACEON, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.CRESSELIA, - Species.PHIONE, - Species.MANAPHY, - Species.VICTINI, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.MUNNA, - Species.MUSHARNA, - Species.WOOBAT, - Species.SWOOBAT, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.THROH, - Species.SAWK, - Species.LEAVANNY, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.MARACTUS, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.DUCKLETT, - Species.SWANNA, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.ALOMOMOLA, - Species.MIENFOO, - Species.MIENSHAO, - Species.GOLETT, - Species.GOLURK, - Species.RUFFLET, - Species.BRAVIARY, - Species.DURANT, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.RESHIRAM, - Species.ZEKROM, - Species.KYUREM, - Species.KELDEO, - Species.MELOETTA, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.LITLEO, - Species.PYROAR, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.ESPURR, - Species.MEOWSTIC, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.BINACLE, - Species.BARBARACLE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.DIANCIE, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.WISHIWASHI, - Species.SALANDIT, - Species.SALAZZLE, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.PYUKUMUKU, - Species.TOGEDEMARU, - Species.DRAMPA, - Species.DHELMISE, - Species.KOMMO_O, - Species.SOLGALEO, - Species.LUNALA, - Species.MAGEARNA, - Species.POIPOLE, - Species.NAGANADEL, - Species.ZERAORA, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.DOTTLER, - Species.ORBEETLE, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.YAMPER, - Species.BOLTUND, - Species.APPLETUN, - Species.TOXTRICITY, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.SIRFETCHD, - Species.MR_RIME, - Species.MILCERY, - Species.ALCREMIE, - Species.FALINKS, - Species.FROSMOTH, - Species.INDEEDEE, - Species.DREEPY, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.CALYREX, - Species.WYRDEER, - Species.KLEAVOR, - Species.URSALUNA, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.LECHONK, - Species.OINKOLOGNE, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.FIDOUGH, - Species.DACHSBUN, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.SQUAWKABILLY, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.CHARCADET, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.SHROODLE, - Species.GRAFAIAI, - Species.KLAWF, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.FLITTLE, - Species.ESPATHRA, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.WIGLETT, - Species.WUGTRIO, - Species.FINIZEN, - Species.PALAFIN, - Species.ORTHWORM, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.CETODDLE, - Species.CETITAN, - Species.TATSUGIRI, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.SCREAM_TAIL, - Species.FLUTTER_MANE, - Species.IRON_BUNDLE, - Species.IRON_MOTH, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.IRON_VALIANT, - Species.KORAIDON, - Species.MIRAIDON, - Species.IRON_LEAVES, - Species.MUNKIDORI, - Species.OGERPON, - Species.ALOLA_RAICHU, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ETERNAL_FLOETTE, - Species.GALAR_MEOWTH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_FARFETCHD, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.HISUI_DECIDUEYE, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + [MoveId.HELPING_HAND]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.DIGLETT, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.FARFETCHD, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.TYPHLOSION, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.NOSEPASS, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.MILOTIC, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.KRICKETUNE, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.CHINGLING, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.SPIRITOMB, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.CRESSELIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.VICTINI, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.LEAVANNY, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.MARACTUS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.ALOMOMOLA, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.DURANT, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.DIANCIE, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.WISHIWASHI, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.PYUKUMUKU, + SpeciesId.TOGEDEMARU, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.KOMMO_O, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.MAGEARNA, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.ZERAORA, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.APPLETUN, + SpeciesId.TOXTRICITY, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.SIRFETCHD, + SpeciesId.MR_RIME, + SpeciesId.MILCERY, + SpeciesId.ALCREMIE, + SpeciesId.FALINKS, + SpeciesId.FROSMOTH, + SpeciesId.INDEEDEE, + SpeciesId.DREEPY, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.SQUAWKABILLY, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.CHARCADET, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.KLAWF, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.ORTHWORM, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.TATSUGIRI, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.SCREAM_TAIL, + SpeciesId.FLUTTER_MANE, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_MOTH, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.IRON_VALIANT, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.IRON_LEAVES, + SpeciesId.MUNKIDORI, + SpeciesId.OGERPON, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.TRICK]: [ - Species.CLEFAIRY, - Species.CLEFABLE, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.STARMIE, - Species.MR_MIME, - Species.JYNX, - Species.PORYGON, - Species.MEWTWO, - Species.MEW, - Species.SENTRET, - Species.FURRET, - Species.CLEFFA, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.ESPEON, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.PORYGON2, - Species.STANTLER, - Species.SMOOCHUM, - Species.BLISSEY, - Species.LUGIA, - Species.CELEBI, - Species.ZIGZAGOON, - Species.LINOONE, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SHEDINJA, - Species.SABLEYE, - Species.MEDITITE, - Species.MEDICHAM, - Species.VOLBEAT, - Species.ILLUMISE, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.BALTOY, - Species.CLAYDOL, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.CHIMECHO, - Species.METANG, - Species.METAGROSS, - Species.LATIAS, - Species.LATIOS, - Species.JIRACHI, - Species.DEOXYS, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.MISMAGIUS, - Species.CHINGLING, - Species.BRONZOR, - Species.BRONZONG, - Species.MIME_JR, - Species.SPIRITOMB, - Species.TOGEKISS, - Species.PORYGON_Z, - Species.GALLADE, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.CRESSELIA, - Species.DARKRAI, - Species.ARCEUS, - Species.VICTINI, - Species.PURRLOIN, - Species.LIEPARD, - Species.MUNNA, - Species.MUSHARNA, - Species.WOOBAT, - Species.SWOOBAT, - Species.DARMANITAN, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.ZORUA, - Species.ZOROARK, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.FRILLISH, - Species.JELLICENT, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.GOLURK, - Species.MELOETTA, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FLOETTE, - Species.FLORGES, - Species.ESPURR, - Species.MEOWSTIC, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.HOOPA, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.COMFEY, - Species.ORANGURU, - Species.SANDYGAST, - Species.PALOSSAND, - Species.MIMIKYU, - Species.TAPU_FINI, - Species.LUNALA, - Species.MAGEARNA, - Species.BLACEPHALON, - Species.DOTTLER, - Species.ORBEETLE, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.MR_RIME, - Species.RUNERIGUS, - Species.INDEEDEE, - Species.CALYREX, - Species.WYRDEER, - Species.MEOWSCARADA, - Species.ARMAROUGE, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.FARIGIRAF, - Species.SCREAM_TAIL, - Species.GHOLDENGO, - Species.IRON_VALIANT, - Species.MUNKIDORI, - Species.ETERNAL_FLOETTE, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_SLOWKING, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_YAMASK, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, + [MoveId.TRICK]: [ + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.PORYGON, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.CLEFFA, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.ESPEON, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.SMOOCHUM, + SpeciesId.BLISSEY, + SpeciesId.LUGIA, + SpeciesId.CELEBI, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SHEDINJA, + SpeciesId.SABLEYE, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.CHIMECHO, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.MISMAGIUS, + SpeciesId.CHINGLING, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.MIME_JR, + SpeciesId.SPIRITOMB, + SpeciesId.TOGEKISS, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.CRESSELIA, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.DARMANITAN, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.GOLURK, + SpeciesId.MELOETTA, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.HOOPA, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.MIMIKYU, + SpeciesId.TAPU_FINI, + SpeciesId.LUNALA, + SpeciesId.MAGEARNA, + SpeciesId.BLACEPHALON, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.INDEEDEE, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.MEOWSCARADA, + SpeciesId.ARMAROUGE, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.FARIGIRAF, + SpeciesId.SCREAM_TAIL, + SpeciesId.GHOLDENGO, + SpeciesId.IRON_VALIANT, + SpeciesId.MUNKIDORI, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_YAMASK, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, ], - [Moves.SUPERPOWER]: [ - Species.NIDOQUEEN, - Species.NIDOKING, - Species.ARCANINE, - Species.POLIWRATH, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.KRABBY, - Species.KINGLER, - Species.HITMONLEE, - Species.RHYHORN, - Species.RHYDON, - Species.PINSIR, - Species.FLAREON, - Species.KABUTOPS, - Species.SNORLAX, - Species.DRAGONITE, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.MARILL, - Species.AZUMARILL, - Species.SNUBBULL, - Species.GRANBULL, - Species.SCIZOR, - Species.TEDDIURSA, - Species.URSARING, - Species.SWINUB, - Species.PILOSWINE, - Species.PHANPY, - Species.DONPHAN, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.BRELOOM, - Species.MAKUHITA, - Species.HARIYAMA, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.TORKOAL, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACTURNE, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.ARMALDO, - Species.ABSOL, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.BIDOOF, - Species.BIBAREL, - Species.LUXRAY, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.HONCHKROW, - Species.MUNCHLAX, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.RHYPERIOR, - Species.MAMOSWINE, - Species.REGIGIGAS, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.SAMUROTT, - Species.STOUTLAND, - Species.SIMISAGE, - Species.SIMISEAR, - Species.SIMIPOUR, - Species.GIGALITH, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.THROH, - Species.SAWK, - Species.SCOLIPEDE, - Species.BASCULIN, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.CARRACOSTA, - Species.REUNICLUS, - Species.EELEKTROSS, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.HEATMOR, - Species.DURANT, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.LANDORUS, - Species.KELDEO, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.DIGGERSBY, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.INKAY, - Species.MALAMAR, - Species.BARBARACLE, - Species.TYRUNT, - Species.TYRANTRUM, - Species.HAWLUCHA, - Species.GOODRA, - Species.AVALUGG, - Species.ZYGARDE, - Species.VOLCANION, - Species.INCINEROAR, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.MUDBRAY, - Species.MUDSDALE, - Species.LURANTIS, - Species.STUFFUL, - Species.BEWEAR, - Species.PASSIMIAN, - Species.KOMALA, - Species.DRAMPA, - Species.KOMMO_O, - Species.TAPU_BULU, - Species.SOLGALEO, - Species.BUZZWOLE, - Species.CELESTEELA, - Species.MARSHADOW, - Species.STAKATAKA, - Species.ZERAORA, - Species.MELMETAL, - Species.RILLABOOM, - Species.GREEDENT, - Species.DREDNAW, - Species.APPLETUN, - Species.CRAMORANT, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.GRIMMSNARL, - Species.SIRFETCHD, - Species.FALINKS, - Species.STONJOURNER, - Species.CUFANT, - Species.COPPERAJAH, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.GLASTRIER, - Species.ENAMORUS, - Species.CETODDLE, - Species.SLITHER_WING, - Species.OKIDOGI, - Species.OGERPON, + [MoveId.SUPERPOWER]: [ + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.ARCANINE, + SpeciesId.POLIWRATH, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.HITMONLEE, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.PINSIR, + SpeciesId.FLAREON, + SpeciesId.KABUTOPS, + SpeciesId.SNORLAX, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SCIZOR, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.BRELOOM, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.TORKOAL, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACTURNE, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.ARMALDO, + SpeciesId.ABSOL, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.LUXRAY, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.HONCHKROW, + SpeciesId.MUNCHLAX, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.RHYPERIOR, + SpeciesId.MAMOSWINE, + SpeciesId.REGIGIGAS, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.SAMUROTT, + SpeciesId.STOUTLAND, + SpeciesId.SIMISAGE, + SpeciesId.SIMISEAR, + SpeciesId.SIMIPOUR, + SpeciesId.GIGALITH, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SCOLIPEDE, + SpeciesId.BASCULIN, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.CARRACOSTA, + SpeciesId.REUNICLUS, + SpeciesId.EELEKTROSS, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.LANDORUS, + SpeciesId.KELDEO, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.DIGGERSBY, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BARBARACLE, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.HAWLUCHA, + SpeciesId.GOODRA, + SpeciesId.AVALUGG, + SpeciesId.ZYGARDE, + SpeciesId.VOLCANION, + SpeciesId.INCINEROAR, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.LURANTIS, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.PASSIMIAN, + SpeciesId.KOMALA, + SpeciesId.DRAMPA, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_BULU, + SpeciesId.SOLGALEO, + SpeciesId.BUZZWOLE, + SpeciesId.CELESTEELA, + SpeciesId.MARSHADOW, + SpeciesId.STAKATAKA, + SpeciesId.ZERAORA, + SpeciesId.MELMETAL, + SpeciesId.RILLABOOM, + SpeciesId.GREEDENT, + SpeciesId.DREDNAW, + SpeciesId.APPLETUN, + SpeciesId.CRAMORANT, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.GRIMMSNARL, + SpeciesId.SIRFETCHD, + SpeciesId.FALINKS, + SpeciesId.STONJOURNER, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.GLASTRIER, + SpeciesId.ENAMORUS, + SpeciesId.CETODDLE, + SpeciesId.SLITHER_WING, + SpeciesId.OKIDOGI, + SpeciesId.OGERPON, [ - Species.DEOXYS, + SpeciesId.DEOXYS, "attack", ], - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_EXEGGUTOR, - Species.GALAR_FARFETCHD, - Species.GALAR_ZAPDOS, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", ], - Species.HISUI_BRAVIARY, + SpeciesId.HISUI_BRAVIARY, ], - [Moves.RECYCLE]: [ - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.DROWZEE, - Species.HYPNO, - Species.VOLTORB, - Species.ELECTRODE, - Species.CHANSEY, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.JYNX, - Species.PORYGON, - Species.SNORLAX, - Species.MEWTWO, - Species.MEW, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.SLOWKING, - Species.GIRAFARIG, - Species.DELIBIRD, - Species.PORYGON2, - Species.SMOOCHUM, - Species.BLISSEY, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.MEDITITE, - Species.MEDICHAM, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.LUNATONE, - Species.SOLROCK, - Species.BALTOY, - Species.CLAYDOL, - Species.KECLEON, - Species.CHIMECHO, - Species.JIRACHI, - Species.DEOXYS, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.CHINGLING, - Species.BRONZOR, - Species.BRONZONG, - Species.MIME_JR, - Species.HAPPINY, - Species.MUNCHLAX, - Species.MAGNEZONE, - Species.PORYGON_Z, - Species.GALLADE, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.CRESSELIA, - Species.ARCEUS, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.TRUBBISH, - Species.GARBODOR, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.ELGYEM, - Species.BEHEEYEM, - Species.HEATMOR, - Species.MELOETTA, - Species.GENESECT, - Species.BRAIXEN, - Species.DELPHOX, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.ESPURR, - Species.MEOWSTIC, - Species.DEDENNE, - Species.KLEFKI, - Species.HOOPA, - Species.MORELULL, - Species.SHIINOTIC, - Species.SANDYGAST, - Species.PALOSSAND, - Species.PYUKUMUKU, - Species.NECROZMA, - Species.STAKATAKA, - Species.BLACEPHALON, - Species.APPLIN, - Species.FLAPPLE, - Species.APPLETUN, - Species.MR_RIME, - Species.FARIGIRAF, - Species.DIPPLIN, - Species.HYDRAPPLE, - Species.ALOLA_RAICHU, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.GALAR_MR_MIME, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, + [MoveId.RECYCLE]: [ + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.CHANSEY, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.PORYGON, + SpeciesId.SNORLAX, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.SLOWKING, + SpeciesId.GIRAFARIG, + SpeciesId.DELIBIRD, + SpeciesId.PORYGON2, + SpeciesId.SMOOCHUM, + SpeciesId.BLISSEY, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.KECLEON, + SpeciesId.CHIMECHO, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.CHINGLING, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.MUNCHLAX, + SpeciesId.MAGNEZONE, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.CRESSELIA, + SpeciesId.ARCEUS, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.HEATMOR, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.DEDENNE, + SpeciesId.KLEFKI, + SpeciesId.HOOPA, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.PYUKUMUKU, + SpeciesId.NECROZMA, + SpeciesId.STAKATAKA, + SpeciesId.BLACEPHALON, + SpeciesId.APPLIN, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.MR_RIME, + SpeciesId.FARIGIRAF, + SpeciesId.DIPPLIN, + SpeciesId.HYDRAPPLE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.GALAR_MR_MIME, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, ], - [Moves.REVENGE]: [ - Species.RATTATA, - Species.RATICATE, - Species.MANKEY, - Species.PRIMEAPE, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.FARFETCHD, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.PINSIR, - Species.TAUROS, - Species.MEW, - Species.AIPOM, - Species.PINECO, - Species.FORRETRESS, - Species.QWILFISH, - Species.HERACROSS, - Species.HITMONTOP, - Species.TYRANITAR, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.SHIFTRY, - Species.MAKUHITA, - Species.HARIYAMA, - Species.CACTURNE, - Species.ZANGOOSE, - Species.CRAWDAUNT, - Species.DUSKULL, - Species.DUSCLOPS, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.AMBIPOM, - Species.VESPIQUEN, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.CROAGUNK, - Species.TOXICROAK, - Species.WEAVILE, - Species.GALLADE, - Species.DUSKNOIR, - Species.REGIGIGAS, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.THROH, - Species.SAWK, - Species.BASCULIN, - Species.KROKOROK, - Species.KROOKODILE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.COFAGRIGUS, - Species.ZORUA, - Species.ZOROARK, - Species.ESCAVALIER, - Species.FERROSEED, - Species.FERROTHORN, - Species.STUNFISK, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.KELDEO, - Species.PANGORO, - Species.HAWLUCHA, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.MUDSDALE, - Species.BEWEAR, - Species.PASSIMIAN, - Species.TURTONATOR, - Species.KOMMO_O, - Species.TAPU_BULU, - Species.BUZZWOLE, - Species.MARSHADOW, - Species.ZERAORA, - Species.CINDERACE, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.CHEWTLE, - Species.DREDNAW, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.CURSOLA, - Species.SIRFETCHD, - Species.RUNERIGUS, - Species.FALINKS, - Species.MORPEKO, - Species.COPPERAJAH, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.BASCULEGION, - Species.ANNIHILAPE, - Species.KINGAMBIT, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, + [MoveId.REVENGE]: [ + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.FARFETCHD, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.MEW, + SpeciesId.AIPOM, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.QWILFISH, + SpeciesId.HERACROSS, + SpeciesId.HITMONTOP, + SpeciesId.TYRANITAR, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.SHIFTRY, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.CACTURNE, + SpeciesId.ZANGOOSE, + SpeciesId.CRAWDAUNT, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.AMBIPOM, + SpeciesId.VESPIQUEN, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.WEAVILE, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.REGIGIGAS, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.BASCULIN, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.COFAGRIGUS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.ESCAVALIER, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.STUNFISK, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.KELDEO, + SpeciesId.PANGORO, + SpeciesId.HAWLUCHA, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.MUDSDALE, + SpeciesId.BEWEAR, + SpeciesId.PASSIMIAN, + SpeciesId.TURTONATOR, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_BULU, + SpeciesId.BUZZWOLE, + SpeciesId.MARSHADOW, + SpeciesId.ZERAORA, + SpeciesId.CINDERACE, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.CURSOLA, + SpeciesId.SIRFETCHD, + SpeciesId.RUNERIGUS, + SpeciesId.FALINKS, + SpeciesId.MORPEKO, + SpeciesId.COPPERAJAH, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.BASCULEGION, + SpeciesId.ANNIHILAPE, + SpeciesId.KINGAMBIT, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, [ - Species.LYCANROC, + SpeciesId.LYCANROC, "midnight", ], - Species.GALAR_FARFETCHD, - Species.GALAR_ZAPDOS, - Species.HISUI_SAMUROTT, - Species.GALAR_STUNFISK, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.GALAR_STUNFISK, ], - [Moves.BRICK_BREAK]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.BEEDRILL, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.PARAS, - Species.PARASECT, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.SLOWBRO, - Species.MUK, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.KABUTOPS, - Species.SNORLAX, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.LEDYBA, - Species.LEDIAN, - Species.TOGETIC, - Species.FLAAFFY, - Species.AMPHAROS, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.AIPOM, - Species.QUAGSIRE, - Species.SLOWKING, - Species.GLIGAR, - Species.SNUBBULL, - Species.GRANBULL, - Species.SCIZOR, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.DELIBIRD, - Species.TYROGUE, - Species.HITMONTOP, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.LOMBRE, - Species.LUDICOLO, - Species.NUZLEAF, - Species.SHIFTRY, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.SABLEYE, - Species.MAWILE, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.VOLBEAT, - Species.ILLUMISE, - Species.SWALOT, - Species.GRUMPIG, - Species.SPINDA, - Species.CACNEA, - Species.CACTURNE, - Species.ZANGOOSE, - Species.SEVIPER, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.ANORITH, - Species.ARMALDO, - Species.KECLEON, - Species.DUSCLOPS, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.DEOXYS, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.KRICKETUNE, - Species.RAMPARDOS, - Species.BUIZEL, - Species.FLOATZEL, - Species.AMBIPOM, - Species.BONSLY, - Species.MIME_JR, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.ABOMASNOW, - Species.WEAVILE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.GLISCOR, - Species.GALLADE, - Species.DUSKNOIR, - Species.DIALGA, - Species.PALKIA, - Species.REGIGIGAS, - Species.DARKRAI, - Species.ARCEUS, - Species.VICTINI, - Species.PIGNITE, - Species.EMBOAR, - Species.DEWOTT, - Species.SAMUROTT, - Species.SIMISAGE, - Species.SIMISEAR, - Species.SIMIPOUR, - Species.DRILBUR, - Species.EXCADRILL, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.SCRAGGY, - Species.SCRAFTY, - Species.ZOROARK, - Species.GOTHITELLE, - Species.EELEKTROSS, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.BEARTIC, - Species.MIENFOO, - Species.MIENSHAO, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.LANDORUS, - Species.KELDEO, - Species.MELOETTA, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.BINACLE, - Species.BARBARACLE, - Species.TYRUNT, - Species.TYRANTRUM, - Species.HAWLUCHA, - Species.NOIBAT, - Species.NOIVERN, - Species.ZYGARDE, - Species.HOOPA, - Species.VOLCANION, - Species.INCINEROAR, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.LYCANROC, - Species.LURANTIS, - Species.STUFFUL, - Species.BEWEAR, - Species.ORANGURU, - Species.PASSIMIAN, - Species.GOLISOPOD, - Species.KOMALA, - Species.DHELMISE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_BULU, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.KARTANA, - Species.GUZZLORD, - Species.NECROZMA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.ZERAORA, - Species.MELMETAL, - Species.RILLABOOM, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.TOXTRICITY, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.SIRFETCHD, - Species.MR_RIME, - Species.FALINKS, - Species.MORPEKO, - Species.CUFANT, - Species.COPPERAJAH, - Species.DURALUDON, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.KLEAVOR, - Species.URSALUNA, - Species.SNEASLER, - Species.MEOWSCARADA, - Species.QUAQUAVAL, - Species.SPIDOPS, - Species.LOKIX, - Species.PAWMOT, - Species.GARGANACL, - Species.CERULEDGE, - Species.KLAWF, - Species.TINKATUFF, - Species.TINKATON, - Species.ANNIHILAPE, - Species.KINGAMBIT, - Species.GREAT_TUSK, - Species.SLITHER_WING, - Species.IRON_HANDS, - Species.IRON_THORNS, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.CHIEN_PAO, - Species.ROARING_MOON, - Species.IRON_VALIANT, - Species.KORAIDON, - Species.IRON_LEAVES, - Species.OKIDOGI, - Species.OGERPON, - Species.ARCHALUDON, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.GALAR_MEOWTH, - Species.GALAR_SLOWBRO, - Species.GALAR_FARFETCHD, - Species.GALAR_MR_MIME, - Species.GALAR_ZAPDOS, - Species.GALAR_SLOWKING, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.HISUI_TYPHLOSION, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, - Species.HISUI_ZOROARK, - Species.HISUI_DECIDUEYE, - Species.BLOODMOON_URSALUNA, + [MoveId.BRICK_BREAK]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.BEEDRILL, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.SLOWBRO, + SpeciesId.MUK, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.KABUTOPS, + SpeciesId.SNORLAX, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.TOGETIC, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.AIPOM, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.GLIGAR, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SCIZOR, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.DELIBIRD, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.SWALOT, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.KECLEON, + SpeciesId.DUSCLOPS, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.DEOXYS, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.KRICKETUNE, + SpeciesId.RAMPARDOS, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.AMBIPOM, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.GLISCOR, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.REGIGIGAS, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.SIMISAGE, + SpeciesId.SIMISEAR, + SpeciesId.SIMIPOUR, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.ZOROARK, + SpeciesId.GOTHITELLE, + SpeciesId.EELEKTROSS, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.BEARTIC, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.LANDORUS, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.HAWLUCHA, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.ZYGARDE, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.INCINEROAR, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.LYCANROC, + SpeciesId.LURANTIS, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.GOLISOPOD, + SpeciesId.KOMALA, + SpeciesId.DHELMISE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_BULU, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.KARTANA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.ZERAORA, + SpeciesId.MELMETAL, + SpeciesId.RILLABOOM, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.TOXTRICITY, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.SIRFETCHD, + SpeciesId.MR_RIME, + SpeciesId.FALINKS, + SpeciesId.MORPEKO, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DURALUDON, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.SNEASLER, + SpeciesId.MEOWSCARADA, + SpeciesId.QUAQUAVAL, + SpeciesId.SPIDOPS, + SpeciesId.LOKIX, + SpeciesId.PAWMOT, + SpeciesId.GARGANACL, + SpeciesId.CERULEDGE, + SpeciesId.KLAWF, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.ANNIHILAPE, + SpeciesId.KINGAMBIT, + SpeciesId.GREAT_TUSK, + SpeciesId.SLITHER_WING, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_THORNS, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.CHIEN_PAO, + SpeciesId.ROARING_MOON, + SpeciesId.IRON_VALIANT, + SpeciesId.KORAIDON, + SpeciesId.IRON_LEAVES, + SpeciesId.OKIDOGI, + SpeciesId.OGERPON, + SpeciesId.ARCHALUDON, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.KNOCK_OFF]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.BEEDRILL, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.PARAS, - Species.PARASECT, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.MUK, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.LICKITUNG, - Species.TANGELA, - Species.GOLDEEN, - Species.SEAKING, - Species.SCYTHER, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.MEWTWO, - Species.MEW, - Species.BAYLEEF, - Species.MEGANIUM, - Species.SENTRET, - Species.FURRET, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.MARILL, - Species.AZUMARILL, - Species.AIPOM, - Species.GLIGAR, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.SNEASEL, - Species.PHANPY, - Species.DONPHAN, - Species.ELEKID, - Species.TYRANITAR, - Species.BLAZIKEN, - Species.SWAMPERT, - Species.LOMBRE, - Species.LUDICOLO, - Species.NUZLEAF, - Species.SHIFTRY, - Species.WINGULL, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.VIGOROTH, - Species.SLAKING, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.SABLEYE, - Species.MAWILE, - Species.SWALOT, - Species.CACTURNE, - Species.ZANGOOSE, - Species.SEVIPER, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.ANORITH, - Species.ARMALDO, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.CHIMECHO, - Species.ABSOL, - Species.METAGROSS, - Species.DEOXYS, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.EMPOLEON, - Species.KRICKETUNE, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.STUNKY, - Species.SKUNTANK, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.CARNIVINE, - Species.WEAVILE, - Species.LICKILICKY, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.LEAFEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.GALLADE, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.REGIGIGAS, - Species.PHIONE, - Species.MANAPHY, - Species.DARKRAI, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.PIGNITE, - Species.EMBOAR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.WATCHOG, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.WOOBAT, - Species.SWOOBAT, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.LEAVANNY, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.KROKOROK, - Species.KROOKODILE, - Species.MARACTUS, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.REUNICLUS, - Species.SWANNA, - Species.EMOLGA, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.ALOMOMOLA, - Species.FERROSEED, - Species.FERROTHORN, - Species.TYNAMO, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.CRYOGONAL, - Species.ACCELGOR, - Species.MIENFOO, - Species.MIENSHAO, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.TORNADUS, - Species.THUNDURUS, - Species.LANDORUS, - Species.MELOETTA, - Species.CHESNAUGHT, - Species.DIGGERSBY, - Species.PANCHAM, - Species.PANGORO, - Species.INKAY, - Species.MALAMAR, - Species.GOODRA, - Species.TREVENANT, - Species.YVELTAL, - Species.HOOPA, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.INCINEROAR, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.GUMSHOOS, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.MAREANIE, - Species.TOXAPEX, - Species.LURANTIS, - Species.SALANDIT, - Species.SALAZZLE, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.PASSIMIAN, - Species.GOLISOPOD, - Species.KOMALA, - Species.DHELMISE, - Species.TAPU_FINI, - Species.SOLGALEO, - Species.NIHILEGO, - Species.KARTANA, - Species.GUZZLORD, - Species.NECROZMA, - Species.MARSHADOW, - Species.BLACEPHALON, - Species.ZERAORA, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.GREEDENT, - Species.NICKIT, - Species.SIZZLIPEDE, - Species.PERRSERKER, - Species.SIRFETCHD, - Species.FALINKS, - Species.MORPEKO, - Species.COPPERAJAH, - Species.ZARUDE, - Species.MEOWSCARADA, - Species.QUAQUAVAL, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.LOKIX, - Species.PAWMO, - Species.PAWMOT, - Species.SHROODLE, - Species.GRAFAIAI, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.KLAWF, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.BOMBIRDIER, - Species.CYCLIZAR, - Species.CETODDLE, - Species.CETITAN, - Species.GREAT_TUSK, - Species.IRON_TREADS, - Species.IRON_JUGULIS, - Species.WO_CHIEN, - Species.ROARING_MOON, - Species.IRON_VALIANT, - Species.WALKING_WAKE, - Species.OKIDOGI, - Species.OGERPON, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, + [MoveId.KNOCK_OFF]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.BEEDRILL, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.MUK, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.LICKITUNG, + SpeciesId.TANGELA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.SCYTHER, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.AIPOM, + SpeciesId.GLIGAR, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.ELEKID, + SpeciesId.TYRANITAR, + SpeciesId.BLAZIKEN, + SpeciesId.SWAMPERT, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.SWALOT, + SpeciesId.CACTURNE, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.METAGROSS, + SpeciesId.DEOXYS, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.EMPOLEON, + SpeciesId.KRICKETUNE, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.WEAVILE, + SpeciesId.LICKILICKY, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.LEAFEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.GALLADE, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.REGIGIGAS, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.WATCHOG, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.LEAVANNY, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.MARACTUS, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.REUNICLUS, + SpeciesId.SWANNA, + SpeciesId.EMOLGA, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.ALOMOMOLA, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.TYNAMO, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.CRYOGONAL, + SpeciesId.ACCELGOR, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.LANDORUS, + SpeciesId.MELOETTA, + SpeciesId.CHESNAUGHT, + SpeciesId.DIGGERSBY, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.GOODRA, + SpeciesId.TREVENANT, + SpeciesId.YVELTAL, + SpeciesId.HOOPA, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.INCINEROAR, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.GUMSHOOS, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.LURANTIS, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.GOLISOPOD, + SpeciesId.KOMALA, + SpeciesId.DHELMISE, + SpeciesId.TAPU_FINI, + SpeciesId.SOLGALEO, + SpeciesId.NIHILEGO, + SpeciesId.KARTANA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MARSHADOW, + SpeciesId.BLACEPHALON, + SpeciesId.ZERAORA, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.GREEDENT, + SpeciesId.NICKIT, + SpeciesId.SIZZLIPEDE, + SpeciesId.PERRSERKER, + SpeciesId.SIRFETCHD, + SpeciesId.FALINKS, + SpeciesId.MORPEKO, + SpeciesId.COPPERAJAH, + SpeciesId.ZARUDE, + SpeciesId.MEOWSCARADA, + SpeciesId.QUAQUAVAL, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.LOKIX, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.KLAWF, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.BOMBIRDIER, + SpeciesId.CYCLIZAR, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.GREAT_TUSK, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_JUGULIS, + SpeciesId.WO_CHIEN, + SpeciesId.ROARING_MOON, + SpeciesId.IRON_VALIANT, + SpeciesId.WALKING_WAKE, + SpeciesId.OKIDOGI, + SpeciesId.OGERPON, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, [ - Species.LYCANROC, + SpeciesId.LYCANROC, "midnight", ], - Species.GALAR_MEOWTH, - Species.GALAR_FARFETCHD, - Species.GALAR_ZAPDOS, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.HISUI_SAMUROTT, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_GOODRA, - Species.HISUI_DECIDUEYE, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.ENDEAVOR]: [ - Species.BEEDRILL, - Species.RATTATA, - Species.RATICATE, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.VENONAT, - Species.VENOMOTH, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.DODUO, - Species.DODRIO, - Species.DEWGONG, - Species.DROWZEE, - Species.HYPNO, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.TAUROS, - Species.GYARADOS, - Species.FLAREON, - Species.MEW, - Species.MEGANIUM, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.SUDOWOODO, - Species.POLITOED, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.GIRAFARIG, - Species.DUNSPARCE, - Species.SNUBBULL, - Species.GRANBULL, - Species.HERACROSS, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.DELIBIRD, - Species.HOUNDOOM, - Species.PHANPY, - Species.DONPHAN, - Species.HITMONTOP, - Species.BLISSEY, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.VIGOROTH, - Species.SLAKING, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.NUMEL, - Species.CAMERUPT, - Species.SPOINK, - Species.GRUMPIG, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.LUVDISC, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.KRICKETOT, - Species.KRICKETUNE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.WORMADAM, - Species.COMBEE, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.AMBIPOM, - Species.BUNEARY, - Species.LOPUNNY, - Species.HONCHKROW, - Species.SKUNTANK, - Species.HAPPINY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.TOGEKISS, - Species.MAMOSWINE, - Species.AZELF, - Species.SHAYMIN, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.PATRAT, - Species.WATCHOG, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.WOOBAT, - Species.SWOOBAT, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.BASCULIN, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.MARACTUS, - Species.SCRAGGY, - Species.SCRAFTY, - Species.ARCHEN, - Species.ARCHEOPS, - Species.MINCCINO, - Species.CINCCINO, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.DUCKLETT, - Species.SWANNA, - Species.DEERLING, - Species.SAWSBUCK, - Species.FERROSEED, - Species.FERROTHORN, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.STUNFISK, - Species.BOUFFALANT, - Species.DURANT, - Species.KYUREM, - Species.KELDEO, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.VIVILLON, - Species.LITLEO, - Species.PYROAR, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.BINACLE, - Species.BARBARACLE, - Species.HAWLUCHA, - Species.DEDENNE, - Species.CARBINK, - Species.XERNEAS, - Species.DIANCIE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.WISHIWASHI, - Species.MUDBRAY, - Species.MUDSDALE, - Species.DEWPIDER, - Species.ARAQUANID, - Species.SALANDIT, - Species.SALAZZLE, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.PASSIMIAN, - Species.ORANGURU, - Species.MINIOR, - Species.KOMALA, - Species.TURTONATOR, - Species.TOGEDEMARU, - Species.DRAMPA, - Species.KOMMO_O, - Species.SOLGALEO, - Species.BUZZWOLE, - Species.MARSHADOW, - Species.ZERAORA, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SKWOVET, - Species.GREEDENT, - Species.FLAPPLE, - Species.SANDACONDA, - Species.CRAMORANT, - Species.TOXEL, - Species.TOXTRICITY, - Species.PERRSERKER, - Species.ALCREMIE, - Species.FALINKS, - Species.STONJOURNER, - Species.MORPEKO, - Species.CUFANT, - Species.COPPERAJAH, - Species.BASCULEGION, - Species.QUAQUAVAL, - Species.LECHONK, - Species.OINKOLOGNE, - Species.FIDOUGH, - Species.DACHSBUN, - Species.SQUAWKABILLY, - Species.WATTREL, - Species.KILOWATTREL, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.SHROODLE, - Species.GRAFAIAI, - Species.KLAWF, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.BOMBIRDIER, - Species.PALAFIN, - Species.REVAVROOM, - Species.CYCLIZAR, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.FLAMIGO, - Species.VELUZA, - Species.ANNIHILAPE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.GREAT_TUSK, - Species.IRON_TREADS, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_MAROWAK, - Species.ETERNAL_FLOETTE, - Species.GALAR_MEOWTH, - Species.GALAR_ZAPDOS, - Species.HISUI_TYPHLOSION, - Species.PALDEA_TAUROS, + [MoveId.ENDEAVOR]: [ + SpeciesId.BEEDRILL, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.DEWGONG, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.FLAREON, + SpeciesId.MEW, + SpeciesId.MEGANIUM, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.GIRAFARIG, + SpeciesId.DUNSPARCE, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.HERACROSS, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.DELIBIRD, + SpeciesId.HOUNDOOM, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.HITMONTOP, + SpeciesId.BLISSEY, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.LUVDISC, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.KRICKETOT, + SpeciesId.KRICKETUNE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.WORMADAM, + SpeciesId.COMBEE, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.AMBIPOM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.HONCHKROW, + SpeciesId.SKUNTANK, + SpeciesId.HAPPINY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.TOGEKISS, + SpeciesId.MAMOSWINE, + SpeciesId.AZELF, + SpeciesId.SHAYMIN, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.BASCULIN, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.MARACTUS, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.STUNFISK, + SpeciesId.BOUFFALANT, + SpeciesId.DURANT, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.VIVILLON, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.XERNEAS, + SpeciesId.DIANCIE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.WISHIWASHI, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.PASSIMIAN, + SpeciesId.ORANGURU, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.TOGEDEMARU, + SpeciesId.DRAMPA, + SpeciesId.KOMMO_O, + SpeciesId.SOLGALEO, + SpeciesId.BUZZWOLE, + SpeciesId.MARSHADOW, + SpeciesId.ZERAORA, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.FLAPPLE, + SpeciesId.SANDACONDA, + SpeciesId.CRAMORANT, + SpeciesId.TOXEL, + SpeciesId.TOXTRICITY, + SpeciesId.PERRSERKER, + SpeciesId.ALCREMIE, + SpeciesId.FALINKS, + SpeciesId.STONJOURNER, + SpeciesId.MORPEKO, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.BASCULEGION, + SpeciesId.QUAQUAVAL, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.SQUAWKABILLY, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.KLAWF, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.BOMBIRDIER, + SpeciesId.PALAFIN, + SpeciesId.REVAVROOM, + SpeciesId.CYCLIZAR, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.FLAMIGO, + SpeciesId.VELUZA, + SpeciesId.ANNIHILAPE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.GREAT_TUSK, + SpeciesId.IRON_TREADS, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.PALDEA_TAUROS, ], - [Moves.SKILL_SWAP]: [ - Species.BUTTERFREE, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.VENONAT, - Species.VENOMOTH, - Species.PSYDUCK, - Species.GOLDUCK, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CHANSEY, - Species.STARMIE, - Species.MR_MIME, - Species.JYNX, - Species.MEWTWO, - Species.MEW, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.NATU, - Species.XATU, - Species.ESPEON, - Species.UMBREON, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.STANTLER, - Species.SMOOCHUM, - Species.BLISSEY, - Species.LUGIA, - Species.CELEBI, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SABLEYE, - Species.MEDITITE, - Species.MEDICHAM, - Species.PLUSLE, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.LUNATONE, - Species.SOLROCK, - Species.BALTOY, - Species.CLAYDOL, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.CHIMECHO, - Species.JIRACHI, - Species.DEOXYS, - Species.WORMADAM, - Species.MOTHIM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.MISMAGIUS, - Species.CHINGLING, - Species.BRONZOR, - Species.BRONZONG, - Species.MIME_JR, - Species.SPIRITOMB, - Species.GALLADE, - Species.DUSKNOIR, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.CRESSELIA, - Species.MANAPHY, - Species.VICTINI, - Species.MUNNA, - Species.MUSHARNA, - Species.WOOBAT, - Species.SWOOBAT, - Species.AUDINO, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.ALOMOMOLA, - Species.ELGYEM, - Species.BEHEEYEM, - Species.MELOETTA, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FLOETTE, - Species.FLORGES, - Species.ESPURR, - Species.MEOWSTIC, - Species.SPRITZEE, - Species.AROMATISSE, - Species.INKAY, - Species.MALAMAR, - Species.SYLVEON, - Species.CARBINK, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.DIANCIE, - Species.HOOPA, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.ORANGURU, - Species.SANDYGAST, - Species.PALOSSAND, - Species.TAPU_LELE, - Species.MAGEARNA, - Species.STAKATAKA, - Species.DOTTLER, - Species.ORBEETLE, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.MR_RIME, - Species.RUNERIGUS, - Species.INDEEDEE, - Species.CALYREX, - Species.WYRDEER, - Species.MEOWSCARADA, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.FARIGIRAF, - Species.IRON_VALIANT, - Species.ALOLA_RAICHU, - Species.ALOLA_EXEGGUTOR, - Species.ETERNAL_FLOETTE, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_SLOWKING, - Species.GALAR_YAMASK, + [MoveId.SKILL_SWAP]: [ + SpeciesId.BUTTERFREE, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CHANSEY, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.STANTLER, + SpeciesId.SMOOCHUM, + SpeciesId.BLISSEY, + SpeciesId.LUGIA, + SpeciesId.CELEBI, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SABLEYE, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.PLUSLE, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.CHIMECHO, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.MISMAGIUS, + SpeciesId.CHINGLING, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.MIME_JR, + SpeciesId.SPIRITOMB, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.CRESSELIA, + SpeciesId.MANAPHY, + SpeciesId.VICTINI, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.AUDINO, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.ALOMOMOLA, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.MELOETTA, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.SYLVEON, + SpeciesId.CARBINK, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.ORANGURU, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.TAPU_LELE, + SpeciesId.MAGEARNA, + SpeciesId.STAKATAKA, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.INDEEDEE, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.MEOWSCARADA, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.FARIGIRAF, + SpeciesId.IRON_VALIANT, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_YAMASK, ], - [Moves.IMPRISON]: [ - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.ALAKAZAM, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.GRIMER, - Species.MUK, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.MEWTWO, - Species.MEW, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.ESPEON, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.STANTLER, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.SHIFTRY, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SABLEYE, - Species.MEDITITE, - Species.MEDICHAM, - Species.SPOINK, - Species.GRUMPIG, - Species.BALTOY, - Species.CLAYDOL, - Species.MILOTIC, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.CHIMECHO, - Species.JIRACHI, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.MISMAGIUS, - Species.BRONZOR, - Species.BRONZONG, - Species.SPIRITOMB, - Species.TOGEKISS, - Species.GALLADE, - Species.DUSKNOIR, - Species.FROSLASS, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.ARCEUS, - Species.MUNNA, - Species.MUSHARNA, - Species.WOOBAT, - Species.SWOOBAT, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.ZORUA, - Species.ZOROARK, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.FRILLISH, - Species.JELLICENT, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.GOLETT, - Species.GOLURK, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, + [MoveId.IMPRISON]: [ + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.ALAKAZAM, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.ESPEON, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.STANTLER, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.SHIFTRY, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SABLEYE, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.MILOTIC, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.CHIMECHO, + SpeciesId.JIRACHI, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.MISMAGIUS, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.SPIRITOMB, + SpeciesId.TOGEKISS, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.ARCEUS, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, [ - Species.MEOWSTIC, + SpeciesId.MEOWSTIC, "male", ], - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.DECIDUEYE, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.ORANGURU, - Species.SANDYGAST, - Species.PALOSSAND, - Species.TYPE_NULL, - Species.SILVALLY, - Species.NECROZMA, - Species.MAGEARNA, - Species.DOTTLER, - Species.ORBEETLE, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.MORGREM, - Species.GRIMMSNARL, - Species.RUNERIGUS, - Species.ALCREMIE, - Species.FROSMOTH, - Species.STONJOURNER, - Species.INDEEDEE, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.CALYREX, - Species.WYRDEER, - Species.ENAMORUS, - Species.SKELEDIRGE, - Species.RABSCA, - Species.FARIGIRAF, - Species.SCREAM_TAIL, - Species.FLUTTER_MANE, - Species.IRON_VALIANT, - Species.IRON_LEAVES, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.MUNKIDORI, - Species.PECHARUNT, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_MAROWAK, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_ARTICUNO, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_YAMASK, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.DECIDUEYE, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.ORANGURU, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.RUNERIGUS, + SpeciesId.ALCREMIE, + SpeciesId.FROSMOTH, + SpeciesId.STONJOURNER, + SpeciesId.INDEEDEE, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.ENAMORUS, + SpeciesId.SKELEDIRGE, + SpeciesId.RABSCA, + SpeciesId.FARIGIRAF, + SpeciesId.SCREAM_TAIL, + SpeciesId.FLUTTER_MANE, + SpeciesId.IRON_VALIANT, + SpeciesId.IRON_LEAVES, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.MUNKIDORI, + SpeciesId.PECHARUNT, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_YAMASK, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, ], - [Moves.SECRET_POWER]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.SEEL, - Species.DEWGONG, - Species.GRIMER, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.ONIX, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.VOLTORB, - Species.ELECTRODE, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.PORYGON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.YANMA, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.KINGDRA, - Species.PHANPY, - Species.DONPHAN, - Species.PORYGON2, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.NOSEPASS, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.FEEBAS, - Species.MILOTIC, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.TROPIUS, - Species.CHIMECHO, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.BIDOOF, - Species.BIBAREL, - Species.KRICKETUNE, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.BUDEW, - Species.ROSERADE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.WORMADAM, - Species.MOTHIM, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.CHERUBI, - Species.CHERRIM, - Species.SHELLOS, - Species.GASTRODON, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.STUNKY, - Species.SKUNTANK, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.MIME_JR, - Species.HAPPINY, - Species.CHATOT, - Species.SPIRITOMB, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.CARNIVINE, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.YANMEGA, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.PORYGON_Z, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.PHIONE, - Species.MANAPHY, - Species.DARKRAI, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.MUNNA, - Species.MUSHARNA, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.WOOBAT, - Species.SWOOBAT, - Species.DRILBUR, - Species.EXCADRILL, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.BASCULIN, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.MARACTUS, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.TRUBBISH, - Species.GARBODOR, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.DUCKLETT, - Species.SWANNA, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.JOLTIK, - Species.GALVANTULA, - Species.FERROSEED, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.SHELMET, - Species.ACCELGOR, - Species.STUNFISK, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.DURANT, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.KELDEO, - Species.MELOETTA, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.LITLEO, - Species.PYROAR, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.ESPURR, - Species.MEOWSTIC, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.CARBINK, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.BERGMITE, - Species.AVALUGG, - Species.NOIBAT, - Species.NOIVERN, - Species.XERNEAS, - Species.YVELTAL, - Species.ZYGARDE, - Species.DIANCIE, - Species.HOOPA, - Species.VOLCANION, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.MUDBRAY, - Species.MUDSDALE, - Species.DEWPIDER, - Species.ARAQUANID, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.SALANDIT, - Species.SALAZZLE, - Species.STUFFUL, - Species.BEWEAR, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.PASSIMIAN, - Species.WIMPOD, - Species.GOLISOPOD, - Species.SANDYGAST, - Species.PALOSSAND, - Species.TYPE_NULL, - Species.SILVALLY, - Species.MINIOR, - Species.KOMALA, - Species.TURTONATOR, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.BRUXISH, - Species.DRAMPA, - Species.DHELMISE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.SOLGALEO, - Species.LUNALA, - Species.NIHILEGO, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.XURKITREE, - Species.CELESTEELA, - Species.KARTANA, - Species.GUZZLORD, - Species.NECROZMA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.POIPOLE, - Species.NAGANADEL, - Species.STAKATAKA, - Species.BLACEPHALON, - Species.ZERAORA, - Species.MELTAN, - Species.MELMETAL, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.SKWOVET, - Species.GREEDENT, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.DOTTLER, - Species.ORBEETLE, - Species.NICKIT, - Species.THIEVUL, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.WOOLOO, - Species.DUBWOOL, - Species.CHEWTLE, - Species.DREDNAW, - Species.YAMPER, - Species.BOLTUND, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.FLAPPLE, - Species.APPLETUN, - Species.SILICOBRA, - Species.SANDACONDA, - Species.CRAMORANT, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.TOXEL, - Species.TOXTRICITY, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.CURSOLA, - Species.SIRFETCHD, - Species.MR_RIME, - Species.RUNERIGUS, - Species.MILCERY, - Species.ALCREMIE, - Species.FALINKS, - Species.PINCURCHIN, - Species.SNOM, - Species.FROSMOTH, - Species.STONJOURNER, - Species.EISCUE, - Species.INDEEDEE, - Species.MORPEKO, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.DURALUDON, - Species.DREEPY, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.ETERNATUS, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.REGIELEKI, - Species.REGIDRAGO, - Species.GLASTRIER, - Species.SPECTRIER, - Species.CALYREX, - Species.WYRDEER, - Species.KLEAVOR, - Species.URSALUNA, - Species.BASCULEGION, - Species.SNEASLER, - Species.OVERQWIL, - Species.ENAMORUS, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.LECHONK, - Species.OINKOLOGNE, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.NYMBLE, - Species.LOKIX, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.FIDOUGH, - Species.DACHSBUN, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.SQUAWKABILLY, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.CHARCADET, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.TADBULB, - Species.BELLIBOLT, - Species.WATTREL, - Species.KILOWATTREL, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.SHROODLE, - Species.GRAFAIAI, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.KLAWF, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.RELLOR, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.WIGLETT, - Species.WUGTRIO, - Species.BOMBIRDIER, - Species.FINIZEN, - Species.PALAFIN, - Species.VAROOM, - Species.REVAVROOM, - Species.CYCLIZAR, - Species.ORTHWORM, - Species.GLIMMET, - Species.GLIMMORA, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.FLAMIGO, - Species.CETODDLE, - Species.CETITAN, - Species.VELUZA, - Species.DONDOZO, - Species.TATSUGIRI, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.BRUTE_BONNET, - Species.FLUTTER_MANE, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_BUNDLE, - Species.IRON_HANDS, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.IRON_THORNS, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.GIMMIGHOUL, - Species.GHOLDENGO, - Species.WO_CHIEN, - Species.CHIEN_PAO, - Species.TING_LU, - Species.CHI_YU, - Species.ROARING_MOON, - Species.IRON_VALIANT, - Species.KORAIDON, - Species.MIRAIDON, - Species.WALKING_WAKE, - Species.IRON_LEAVES, - Species.DIPPLIN, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.OGERPON, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.TERAPAGOS, - Species.PECHARUNT, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.ETERNAL_FLOETTE, - Species.GALAR_MEOWTH, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_FARFETCHD, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.GALAR_YAMASK, - Species.GALAR_STUNFISK, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_TYPHLOSION, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.HISUI_DECIDUEYE, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + [MoveId.SECRET_POWER]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.PORYGON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.YANMA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.KINGDRA, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.NOSEPASS, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.KRICKETUNE, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.CHATOT, + SpeciesId.SPIRITOMB, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.BASCULIN, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.MARACTUS, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.STUNFISK, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.XURKITREE, + SpeciesId.CELESTEELA, + SpeciesId.KARTANA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.STAKATAKA, + SpeciesId.BLACEPHALON, + SpeciesId.ZERAORA, + SpeciesId.MELTAN, + SpeciesId.MELMETAL, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.WOOLOO, + SpeciesId.DUBWOOL, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.TOXEL, + SpeciesId.TOXTRICITY, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.SIRFETCHD, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.MILCERY, + SpeciesId.ALCREMIE, + SpeciesId.FALINKS, + SpeciesId.PINCURCHIN, + SpeciesId.SNOM, + SpeciesId.FROSMOTH, + SpeciesId.STONJOURNER, + SpeciesId.EISCUE, + SpeciesId.INDEEDEE, + SpeciesId.MORPEKO, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.DURALUDON, + SpeciesId.DREEPY, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.ETERNATUS, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.REGIELEKI, + SpeciesId.REGIDRAGO, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.BASCULEGION, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.ENAMORUS, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.SQUAWKABILLY, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.CHARCADET, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.KLAWF, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.BOMBIRDIER, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.CYCLIZAR, + SpeciesId.ORTHWORM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.FLAMIGO, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.VELUZA, + SpeciesId.DONDOZO, + SpeciesId.TATSUGIRI, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.BRUTE_BONNET, + SpeciesId.FLUTTER_MANE, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_THORNS, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.GIMMIGHOUL, + SpeciesId.GHOLDENGO, + SpeciesId.WO_CHIEN, + SpeciesId.CHIEN_PAO, + SpeciesId.TING_LU, + SpeciesId.CHI_YU, + SpeciesId.ROARING_MOON, + SpeciesId.IRON_VALIANT, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.IRON_LEAVES, + SpeciesId.DIPPLIN, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.OGERPON, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.TERAPAGOS, + SpeciesId.PECHARUNT, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_YAMASK, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.DIVE]: [ - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.PSYDUCK, - Species.GOLDUCK, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.SEEL, - Species.DEWGONG, - Species.SHELLDER, - Species.CLOYSTER, - Species.KRABBY, - Species.KINGLER, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.GYARADOS, - Species.LAPRAS, - Species.VAPOREON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTOPS, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.CHINCHOU, - Species.LANTURN, - Species.MARILL, - Species.AZUMARILL, - Species.POLITOED, - Species.WOOPER, - Species.QUAGSIRE, - Species.SLOWKING, - Species.QWILFISH, - Species.REMORAID, - Species.OCTILLERY, - Species.MANTINE, - Species.KINGDRA, - Species.SUICUNE, - Species.LUGIA, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.LOMBRE, - Species.LUDICOLO, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.BARBOACH, - Species.WHISCASH, - Species.CRAWDAUNT, - Species.FEEBAS, - Species.MILOTIC, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.RAYQUAZA, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.BIBAREL, - Species.BUIZEL, - Species.FLOATZEL, - Species.SHELLOS, - Species.GASTRODON, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.PALKIA, - Species.PHIONE, - Species.MANAPHY, - Species.ARCEUS, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PANPOUR, - Species.SIMIPOUR, - Species.SEISMITOAD, - Species.BASCULIN, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.DUCKLETT, - Species.SWANNA, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.BEARTIC, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.WISHIWASHI, - Species.ARAQUANID, - Species.GOLISOPOD, - Species.TAPU_FINI, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.CHEWTLE, - Species.DREDNAW, - Species.CRAMORANT, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.EISCUE, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.FINIZEN, - Species.PALAFIN, - Species.DONDOZO, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_SLOWKING, + [MoveId.DIVE]: [ + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.VAPOREON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTOPS, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.POLITOED, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.QWILFISH, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.MANTINE, + SpeciesId.KINGDRA, + SpeciesId.SUICUNE, + SpeciesId.LUGIA, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CRAWDAUNT, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.RAYQUAZA, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.BIBAREL, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.PALKIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.ARCEUS, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.SEISMITOAD, + SpeciesId.BASCULIN, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.BEARTIC, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.WISHIWASHI, + SpeciesId.ARAQUANID, + SpeciesId.GOLISOPOD, + SpeciesId.TAPU_FINI, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.EISCUE, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.DONDOZO, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_SLOWKING, [ - Species.URSHIFU, + SpeciesId.URSHIFU, "rapid-strike", ], ], - [Moves.FEATHER_DANCE]: [ - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.SPEAROW, - Species.FEAROW, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.ARTICUNO, - Species.MEW, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.NATU, - Species.XATU, - Species.MURKROW, - Species.DELIBIRD, - Species.LUGIA, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.WINGULL, - Species.PELIPPER, - Species.SWABLU, - Species.ALTARIA, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.HONCHKROW, - Species.CHATOT, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.DUCKLETT, - Species.SWANNA, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.HAWLUCHA, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.ORICORIO, - Species.CRAMORANT, - Species.FROSMOTH, - Species.EISCUE, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.SQUAWKABILLY, - Species.WATTREL, - Species.KILOWATTREL, - Species.ESPATHRA, - Species.BOMBIRDIER, - Species.FLAMIGO, - Species.HISUI_BRAVIARY, - Species.HISUI_DECIDUEYE, + [MoveId.FEATHER_DANCE]: [ + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.ARTICUNO, + SpeciesId.MEW, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MURKROW, + SpeciesId.DELIBIRD, + SpeciesId.LUGIA, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.HONCHKROW, + SpeciesId.CHATOT, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.HAWLUCHA, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.ORICORIO, + SpeciesId.CRAMORANT, + SpeciesId.FROSMOTH, + SpeciesId.EISCUE, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.SQUAWKABILLY, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.ESPATHRA, + SpeciesId.BOMBIRDIER, + SpeciesId.FLAMIGO, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.BLAZE_KICK]: [ - Species.CHARIZARD, - Species.HITMONLEE, - Species.MEW, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.RIOLU, - Species.LUCARIO, - Species.VICTINI, - Species.MIENSHAO, - Species.GENESECT, - Species.INCINEROAR, - Species.MARSHADOW, - Species.ZERAORA, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.GALAR_ZAPDOS, + [MoveId.BLAZE_KICK]: [ + SpeciesId.CHARIZARD, + SpeciesId.HITMONLEE, + SpeciesId.MEW, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.VICTINI, + SpeciesId.MIENSHAO, + SpeciesId.GENESECT, + SpeciesId.INCINEROAR, + SpeciesId.MARSHADOW, + SpeciesId.ZERAORA, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.GALAR_ZAPDOS, ], - [Moves.HYPER_VOICE]: [ - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.MEOWTH, - Species.PERSIAN, - Species.ARCANINE, - Species.CHANSEY, - Species.JYNX, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.SNORLAX, - Species.MEW, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.MARILL, - Species.AZUMARILL, - Species.POLITOED, - Species.ESPEON, - Species.UMBREON, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.DUNSPARCE, - Species.SNUBBULL, - Species.GRANBULL, - Species.TEDDIURSA, - Species.URSARING, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.PHANPY, - Species.DONPHAN, - Species.BLISSEY, - Species.LUGIA, - Species.HO_OH, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.LOMBRE, - Species.LUDICOLO, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.VIGOROTH, - Species.SLAKING, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.AZURILL, - Species.SKITTY, - Species.DELCATTY, - Species.MANECTRIC, - Species.WAILMER, - Species.WAILORD, - Species.GRUMPIG, - Species.SPINDA, - Species.SWABLU, - Species.ALTARIA, - Species.CHIMECHO, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.RAYQUAZA, - Species.TORTERRA, - Species.KRICKETUNE, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.HAPPINY, - Species.CHATOT, - Species.MUNCHLAX, - Species.HIPPOWDON, - Species.TOGEKISS, - Species.LEAFEON, - Species.GLACEON, - Species.GALLADE, - Species.ROTOM, - Species.DIALGA, - Species.PALKIA, - Species.GIRATINA, - Species.ARCEUS, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.AUDINO, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.MARACTUS, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.RESHIRAM, - Species.ZEKROM, - Species.KYUREM, - Species.MELOETTA, - Species.DELPHOX, - Species.LITLEO, - Species.PYROAR, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.NOIBAT, - Species.NOIVERN, - Species.XERNEAS, - Species.YVELTAL, - Species.ZYGARDE, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.ROCKRUFF, - Species.LYCANROC, - Species.SALAZZLE, - Species.ORANGURU, - Species.SILVALLY, - Species.TURTONATOR, - Species.DRAMPA, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.SOLGALEO, - Species.NECROZMA, - Species.RILLABOOM, - Species.SKWOVET, - Species.GREEDENT, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.BOLTUND, - Species.TOXTRICITY, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.INDEEDEE, - Species.ARCTOZOLT, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.ZARUDE, - Species.URSALUNA, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.LECHONK, - Species.OINKOLOGNE, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.ARBOLIVA, - Species.SQUAWKABILLY, - Species.TADBULB, - Species.BELLIBOLT, - Species.MABOSSTIFF, - Species.ESPATHRA, - Species.BOMBIRDIER, - Species.PALAFIN, - Species.CYCLIZAR, - Species.CETODDLE, - Species.CETITAN, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.SCREAM_TAIL, - Species.FLUTTER_MANE, - Species.IRON_JUGULIS, - Species.ROARING_MOON, - Species.IRON_VALIANT, - Species.RAGING_BOLT, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.GALAR_MEOWTH, - Species.GALAR_ARTICUNO, - Species.GALAR_MOLTRES, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.HISUI_ARCANINE, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.BLOODMOON_URSALUNA, + [MoveId.HYPER_VOICE]: [ + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.ARCANINE, + SpeciesId.CHANSEY, + SpeciesId.JYNX, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.SNORLAX, + SpeciesId.MEW, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.POLITOED, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.DUNSPARCE, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.BLISSEY, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.AZURILL, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.MANECTRIC, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.CHIMECHO, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.RAYQUAZA, + SpeciesId.TORTERRA, + SpeciesId.KRICKETUNE, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.HAPPINY, + SpeciesId.CHATOT, + SpeciesId.MUNCHLAX, + SpeciesId.HIPPOWDON, + SpeciesId.TOGEKISS, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GALLADE, + SpeciesId.ROTOM, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.GIRATINA, + SpeciesId.ARCEUS, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.AUDINO, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.MARACTUS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.KYUREM, + SpeciesId.MELOETTA, + SpeciesId.DELPHOX, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.ZYGARDE, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.SALAZZLE, + SpeciesId.ORANGURU, + SpeciesId.SILVALLY, + SpeciesId.TURTONATOR, + SpeciesId.DRAMPA, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.SOLGALEO, + SpeciesId.NECROZMA, + SpeciesId.RILLABOOM, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.BOLTUND, + SpeciesId.TOXTRICITY, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.INDEEDEE, + SpeciesId.ARCTOZOLT, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.ZARUDE, + SpeciesId.URSALUNA, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.ARBOLIVA, + SpeciesId.SQUAWKABILLY, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.MABOSSTIFF, + SpeciesId.ESPATHRA, + SpeciesId.BOMBIRDIER, + SpeciesId.PALAFIN, + SpeciesId.CYCLIZAR, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.SCREAM_TAIL, + SpeciesId.FLUTTER_MANE, + SpeciesId.IRON_JUGULIS, + SpeciesId.ROARING_MOON, + SpeciesId.IRON_VALIANT, + SpeciesId.RAGING_BOLT, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.BLAST_BURN]: [ - Species.CHARIZARD, - Species.MEW, - Species.TYPHLOSION, - Species.BLAZIKEN, - Species.INFERNAPE, - Species.EMBOAR, - Species.DELPHOX, - Species.INCINEROAR, - Species.CINDERACE, - Species.SKELEDIRGE, - Species.HISUI_TYPHLOSION, + [MoveId.BLAST_BURN]: [ + SpeciesId.CHARIZARD, + SpeciesId.MEW, + SpeciesId.TYPHLOSION, + SpeciesId.BLAZIKEN, + SpeciesId.INFERNAPE, + SpeciesId.EMBOAR, + SpeciesId.DELPHOX, + SpeciesId.INCINEROAR, + SpeciesId.CINDERACE, + SpeciesId.SKELEDIRGE, + SpeciesId.HISUI_TYPHLOSION, ], - [Moves.HYDRO_CANNON]: [ - Species.BLASTOISE, - Species.MEW, - Species.FERALIGATR, - Species.SWAMPERT, - Species.EMPOLEON, - Species.SAMUROTT, - Species.GRENINJA, - Species.PRIMARINA, - Species.INTELEON, - Species.QUAQUAVAL, - Species.HISUI_SAMUROTT, + [MoveId.HYDRO_CANNON]: [ + SpeciesId.BLASTOISE, + SpeciesId.MEW, + SpeciesId.FERALIGATR, + SpeciesId.SWAMPERT, + SpeciesId.EMPOLEON, + SpeciesId.SAMUROTT, + SpeciesId.GRENINJA, + SpeciesId.PRIMARINA, + SpeciesId.INTELEON, + SpeciesId.QUAQUAVAL, + SpeciesId.HISUI_SAMUROTT, ], - [Moves.WEATHER_BALL]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.VULPIX, - Species.NINETALES, - Species.VILEPLUME, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACRUEL, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.SEEL, - Species.DEWGONG, - Species.CLOYSTER, - Species.HORSEA, - Species.SEADRA, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.MEGANIUM, - Species.BELLOSSOM, - Species.POLITOED, - Species.SUNKERN, - Species.SUNFLORA, - Species.ESPEON, - Species.UMBREON, - Species.SLOWKING, - Species.DELIBIRD, - Species.KINGDRA, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.SWAMPERT, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.NUZLEAF, - Species.SHIFTRY, - Species.PELIPPER, - Species.MASQUERAIN, - Species.ROSELIA, - Species.WAILMER, - Species.WAILORD, - Species.TORKOAL, - Species.ALTARIA, - Species.LUNATONE, - Species.SOLROCK, - Species.WHISCASH, - Species.MILOTIC, - Species.CASTFORM, - Species.SNORUNT, - Species.GLALIE, - Species.LATIAS, - Species.LATIOS, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.BUDEW, - Species.ROSERADE, - Species.CHERUBI, - Species.CHERRIM, - Species.GASTRODON, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BRONZONG, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SNOVER, - Species.ABOMASNOW, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.LEAFEON, - Species.GLACEON, - Species.FROSLASS, - Species.PHIONE, - Species.MANAPHY, - Species.GIGALITH, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.LILLIGANT, - Species.MARACTUS, - Species.SWANNA, - Species.VANILLUXE, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.GRENINJA, - Species.VIVILLON, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HELIOLISK, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.GOODRA, - Species.VOLCANION, - Species.PRIMARINA, - Species.FOMANTIS, - Species.LURANTIS, - Species.SHIINOTIC, - Species.RABOOT, - Species.CINDERACE, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.ELDEGOSS, - Species.CRAMORANT, - Species.FROSMOTH, - Species.EISCUE, - Species.ENAMORUS, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.ARMAROUGE, - Species.TADBULB, - Species.BELLIBOLT, - Species.WATTREL, - Species.KILOWATTREL, - Species.RELLOR, - Species.RABSCA, - Species.WALKING_WAKE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.TERAPAGOS, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_SLOWKING, - Species.HISUI_LILLIGANT, - Species.HISUI_GOODRA, + [MoveId.WEATHER_BALL]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.VILEPLUME, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACRUEL, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.CLOYSTER, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.MEGANIUM, + SpeciesId.BELLOSSOM, + SpeciesId.POLITOED, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.SLOWKING, + SpeciesId.DELIBIRD, + SpeciesId.KINGDRA, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.SWAMPERT, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.PELIPPER, + SpeciesId.MASQUERAIN, + SpeciesId.ROSELIA, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.TORKOAL, + SpeciesId.ALTARIA, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.WHISCASH, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.GASTRODON, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BRONZONG, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.FROSLASS, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.GIGALITH, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.LILLIGANT, + SpeciesId.MARACTUS, + SpeciesId.SWANNA, + SpeciesId.VANILLUXE, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.GRENINJA, + SpeciesId.VIVILLON, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HELIOLISK, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.GOODRA, + SpeciesId.VOLCANION, + SpeciesId.PRIMARINA, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.SHIINOTIC, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.ELDEGOSS, + SpeciesId.CRAMORANT, + SpeciesId.FROSMOTH, + SpeciesId.EISCUE, + SpeciesId.ENAMORUS, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.ARMAROUGE, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.WALKING_WAKE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_SLOWKING, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_GOODRA, ], - [Moves.FAKE_TEARS]: [ - Species.PIKACHU, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.MEOWTH, - Species.PERSIAN, - Species.JYNX, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.MEW, - Species.TOTODILE, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.ESPEON, - Species.UMBREON, - Species.MISDREAVUS, - Species.SNUBBULL, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SMOOCHUM, - Species.SHROOMISH, - Species.BRELOOM, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.AZURILL, - Species.SKITTY, - Species.MAWILE, - Species.PLUSLE, - Species.MINUN, - Species.ILLUMISE, - Species.SPINDA, - Species.CHIMECHO, - Species.SNORUNT, - Species.GLALIE, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.PACHIRISU, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.GLAMEOW, - Species.BONSLY, - Species.WEAVILE, - Species.LEAFEON, - Species.GLACEON, - Species.FROSLASS, - Species.PURRLOIN, - Species.LIEPARD, - Species.WOOBAT, - Species.SWOOBAT, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.SCRAGGY, - Species.SCRAFTY, - Species.YAMASK, - Species.COFAGRIGUS, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.DEERLING, - Species.SAWSBUCK, - Species.VULLABY, - Species.MANDIBUZZ, - Species.MELOETTA, - Species.ESPURR, - Species.MEOWSTIC, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.SYLVEON, - Species.DIANCIE, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.SALAZZLE, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.NICKIT, - Species.THIEVUL, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.MR_RIME, - Species.RUNERIGUS, - Species.ALCREMIE, - Species.MORPEKO, - Species.URSALUNA, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.SQUAWKABILLY, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.SCREAM_TAIL, - Species.FLUTTER_MANE, - Species.PECHARUNT, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.GALAR_MEOWTH, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_YAMASK, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, + [MoveId.FAKE_TEARS]: [ + SpeciesId.PIKACHU, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.JYNX, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MISDREAVUS, + SpeciesId.SNUBBULL, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SMOOCHUM, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.AZURILL, + SpeciesId.SKITTY, + SpeciesId.MAWILE, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.ILLUMISE, + SpeciesId.SPINDA, + SpeciesId.CHIMECHO, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.PACHIRISU, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.GLAMEOW, + SpeciesId.BONSLY, + SpeciesId.WEAVILE, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.FROSLASS, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.MELOETTA, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.SYLVEON, + SpeciesId.DIANCIE, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.SALAZZLE, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.ALCREMIE, + SpeciesId.MORPEKO, + SpeciesId.URSALUNA, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.SQUAWKABILLY, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.SCREAM_TAIL, + SpeciesId.FLUTTER_MANE, + SpeciesId.PECHARUNT, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_YAMASK, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, ], - [Moves.AIR_CUTTER]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.SPEAROW, - Species.FEAROW, - Species.ZUBAT, - Species.GOLBAT, - Species.VENOMOTH, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.SCYTHER, - Species.AERODACTYL, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRAGONITE, - Species.MEW, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.CROBAT, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.YANMA, - Species.MURKROW, - Species.SCIZOR, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.LUGIA, - Species.HO_OH, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.MASQUERAIN, - Species.NINJASK, - Species.VOLBEAT, - Species.ILLUMISE, - Species.VIBRAVA, - Species.FLYGON, - Species.SWABLU, - Species.ALTARIA, - Species.TROPIUS, - Species.SALAMENCE, - Species.LATIAS, - Species.LATIOS, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.MOTHIM, - Species.COMBEE, - Species.VESPIQUEN, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.HONCHKROW, - Species.CHATOT, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.TOGEKISS, - Species.YANMEGA, - Species.GIRATINA, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.WOOBAT, - Species.SWOOBAT, - Species.SIGILYPH, - Species.DUCKLETT, - Species.SWANNA, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.VOLCARONA, - Species.TORNADUS, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.NOIBAT, - Species.NOIVERN, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.ORICORIO, - Species.KARTANA, - Species.NAGANADEL, - Species.INTELEON, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.CRAMORANT, - Species.KLEAVOR, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.SQUAWKABILLY, - Species.WATTREL, - Species.KILOWATTREL, - Species.BOMBIRDIER, - Species.FLAMIGO, - Species.IRON_BUNDLE, - Species.IRON_JUGULIS, - Species.FEZANDIPITI, - Species.SHAYMIN, - Species.GALAR_ARTICUNO, - Species.HISUI_BRAVIARY, - Species.HISUI_DECIDUEYE, + [MoveId.AIR_CUTTER]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.VENOMOTH, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SCYTHER, + SpeciesId.AERODACTYL, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.CROBAT, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.YANMA, + SpeciesId.MURKROW, + SpeciesId.SCIZOR, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.MASQUERAIN, + SpeciesId.NINJASK, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.TROPIUS, + SpeciesId.SALAMENCE, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.MOTHIM, + SpeciesId.COMBEE, + SpeciesId.VESPIQUEN, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.HONCHKROW, + SpeciesId.CHATOT, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.GIRATINA, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.SIGILYPH, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.VOLCARONA, + SpeciesId.TORNADUS, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.ORICORIO, + SpeciesId.KARTANA, + SpeciesId.NAGANADEL, + SpeciesId.INTELEON, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.CRAMORANT, + SpeciesId.KLEAVOR, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.SQUAWKABILLY, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.BOMBIRDIER, + SpeciesId.FLAMIGO, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_JUGULIS, + SpeciesId.FEZANDIPITI, + SpeciesId.SHAYMIN, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.OVERHEAT]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.VULPIX, - Species.NINETALES, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.PONYTA, - Species.RAPIDASH, - Species.MAGMAR, - Species.FLAREON, - Species.MOLTRES, - Species.MEW, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.SNUBBULL, - Species.GRANBULL, - Species.SLUGMA, - Species.MAGCARGO, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.MAGBY, - Species.ENTEI, - Species.HO_OH, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.LOUDRED, - Species.EXPLOUD, - Species.MANECTRIC, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SOLROCK, - Species.GROUDON, - Species.RAYQUAZA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.MAGMORTAR, - Species.DIALGA, - Species.HEATRAN, - Species.ARCEUS, - Species.VICTINI, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.PANSEAR, - Species.SIMISEAR, - Species.ZEBSTRIKA, - Species.DARUMAKA, - Species.DARMANITAN, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.HEATMOR, - Species.LARVESTA, - Species.VOLCARONA, - Species.RESHIRAM, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.LITLEO, - Species.PYROAR, - Species.VOLCANION, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.TOUCANNON, - Species.SALANDIT, - Species.SALAZZLE, - Species.TURTONATOR, - Species.BLACEPHALON, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.CARKOL, - Species.COALOSSAL, - Species.CENTISKORCH, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.CHARCADET, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.SCOVILLAIN, - Species.REVAVROOM, - Species.CYCLIZAR, - Species.ANNIHILAPE, - Species.IRON_MOTH, - Species.CHI_YU, - Species.KORAIDON, - Species.MIRAIDON, - Species.GOUGING_FIRE, + [MoveId.OVERHEAT]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.MAGMAR, + SpeciesId.FLAREON, + SpeciesId.MOLTRES, + SpeciesId.MEW, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.MAGBY, + SpeciesId.ENTEI, + SpeciesId.HO_OH, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MANECTRIC, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SOLROCK, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.MAGMORTAR, + SpeciesId.DIALGA, + SpeciesId.HEATRAN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.ZEBSTRIKA, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.HEATMOR, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.RESHIRAM, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.VOLCANION, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.TOUCANNON, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.TURTONATOR, + SpeciesId.BLACEPHALON, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.CENTISKORCH, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.CHARCADET, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.SCOVILLAIN, + SpeciesId.REVAVROOM, + SpeciesId.CYCLIZAR, + SpeciesId.ANNIHILAPE, + SpeciesId.IRON_MOTH, + SpeciesId.CHI_YU, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.GOUGING_FIRE, [ - Species.ROTOM, + SpeciesId.ROTOM, "heat", ], - Species.GALAR_WEEZING, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_TYPHLOSION, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_TYPHLOSION, [ - Species.PALDEA_TAUROS, + SpeciesId.PALDEA_TAUROS, "blaze", ], ], - [Moves.ROCK_TOMB]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.EKANS, - Species.ARBOK, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.DIGLETT, - Species.DUGTRIO, - Species.MANKEY, - Species.PRIMEAPE, - Species.POLIWRATH, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.GRIMER, - Species.MUK, - Species.ONIX, - Species.KRABBY, - Species.KINGLER, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.PINSIR, - Species.TAUROS, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SUDOWOODO, - Species.WOOPER, - Species.QUAGSIRE, - Species.SLOWKING, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.GRANBULL, - Species.SHUCKLE, - Species.HERACROSS, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.MANTINE, - Species.SKARMORY, - Species.PHANPY, - Species.DONPHAN, - Species.MILTANK, - Species.BLISSEY, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.NOSEPASS, - Species.SABLEYE, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPINDA, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.ZANGOOSE, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.KECLEON, - Species.DUSCLOPS, - Species.ABSOL, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.HUNTAIL, - Species.RELICANTH, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.DEOXYS, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.BUIZEL, - Species.FLOATZEL, - Species.SHELLOS, - Species.GASTRODON, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.SPIRITOMB, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.ABOMASNOW, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.GLISCOR, - Species.MAMOSWINE, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.DARKRAI, - Species.ARCEUS, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.MUNNA, - Species.MUSHARNA, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.DRILBUR, - Species.EXCADRILL, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SCOLIPEDE, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.EELEKTROSS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.STUNFISK, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.DURANT, - Species.HYDREIGON, - Species.TERRAKION, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.PANCHAM, - Species.PANGORO, - Species.BINACLE, - Species.BARBARACLE, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.HAWLUCHA, - Species.CARBINK, - Species.BERGMITE, - Species.AVALUGG, - Species.DIANCIE, - Species.HOOPA, - Species.VOLCANION, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.MUDBRAY, - Species.MUDSDALE, - Species.STUFFUL, - Species.BEWEAR, - Species.PASSIMIAN, - Species.GOLISOPOD, - Species.SANDYGAST, - Species.PALOSSAND, - Species.MINIOR, - Species.KOMALA, - Species.TURTONATOR, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_BULU, - Species.SOLGALEO, - Species.NIHILEGO, - Species.BUZZWOLE, - Species.GUZZLORD, - Species.NECROZMA, - Species.MARSHADOW, - Species.STAKATAKA, - Species.MELMETAL, - Species.DREDNAW, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.SILICOBRA, - Species.SANDACONDA, - Species.CURSOLA, - Species.RUNERIGUS, - Species.FALINKS, - Species.STONJOURNER, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.DURALUDON, - Species.URSHIFU, - Species.ZARUDE, - Species.KLEAVOR, - Species.URSALUNA, - Species.SNEASLER, - Species.SPIDOPS, - Species.PAWMOT, - Species.GARGANACL, - Species.KLAWF, - Species.RELLOR, - Species.RABSCA, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.BOMBIRDIER, - Species.ORTHWORM, - Species.GLIMMET, - Species.GLIMMORA, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.IRON_TREADS, - Species.IRON_HANDS, - Species.IRON_JUGULIS, - Species.IRON_THORNS, - Species.TING_LU, - Species.OKIDOGI, - Species.OGERPON, - Species.ARCHALUDON, - Species.IRON_BOULDER, + [MoveId.ROCK_TOMB]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.POLIWRATH, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.ONIX, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SUDOWOODO, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.GRANBULL, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.NOSEPASS, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPINDA, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.ZANGOOSE, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.KECLEON, + SpeciesId.DUSCLOPS, + SpeciesId.ABSOL, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.HUNTAIL, + SpeciesId.RELICANTH, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.DEOXYS, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.SPIRITOMB, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.ABOMASNOW, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SCOLIPEDE, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.STUNFISK, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.HYDREIGON, + SpeciesId.TERRAKION, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.HAWLUCHA, + SpeciesId.CARBINK, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.PASSIMIAN, + SpeciesId.GOLISOPOD, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_BULU, + SpeciesId.SOLGALEO, + SpeciesId.NIHILEGO, + SpeciesId.BUZZWOLE, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MARSHADOW, + SpeciesId.STAKATAKA, + SpeciesId.MELMETAL, + SpeciesId.DREDNAW, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.CURSOLA, + SpeciesId.RUNERIGUS, + SpeciesId.FALINKS, + SpeciesId.STONJOURNER, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.DURALUDON, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.SNEASLER, + SpeciesId.SPIDOPS, + SpeciesId.PAWMOT, + SpeciesId.GARGANACL, + SpeciesId.KLAWF, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.BOMBIRDIER, + SpeciesId.ORTHWORM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_THORNS, + SpeciesId.TING_LU, + SpeciesId.OKIDOGI, + SpeciesId.OGERPON, + SpeciesId.ARCHALUDON, + SpeciesId.IRON_BOULDER, [ - Species.WORMADAM, + SpeciesId.WORMADAM, "sandy", ], - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_MAROWAK, - Species.GALAR_CORSOLA, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.GALAR_YAMASK, - Species.GALAR_STUNFISK, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_BRAVIARY, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.HISUI_DECIDUEYE, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_YAMASK, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.METAL_SOUND]: [ - Species.MAGNEMITE, - Species.MAGNETON, - Species.VOLTORB, - Species.ELECTRODE, - Species.ELECTABUZZ, - Species.JOLTEON, - Species.KABUTO, - Species.KABUTOPS, - Species.ZAPDOS, - Species.MEW, - Species.FORRETRESS, - Species.SKARMORY, - Species.ELEKID, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.REGISTEEL, - Species.JIRACHI, - Species.EMPOLEON, - Species.SHIELDON, - Species.BASTIODON, + [MoveId.METAL_SOUND]: [ + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.ELECTABUZZ, + SpeciesId.JOLTEON, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.ZAPDOS, + SpeciesId.MEW, + SpeciesId.FORRETRESS, + SpeciesId.SKARMORY, + SpeciesId.ELEKID, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.REGISTEEL, + SpeciesId.JIRACHI, + SpeciesId.EMPOLEON, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, [ - Species.WORMADAM, + SpeciesId.WORMADAM, "trash", ], - Species.BRONZOR, - Species.BRONZONG, - Species.LUCARIO, - Species.MAGNEZONE, - Species.ELECTIVIRE, - Species.PROBOPASS, - Species.DIALGA, - Species.HEATRAN, - Species.DRILBUR, - Species.EXCADRILL, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.PAWNIARD, - Species.BISHARP, - Species.DURANT, - Species.COBALION, - Species.GENESECT, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.KLEFKI, - Species.TYPE_NULL, - Species.SILVALLY, - Species.DHELMISE, - Species.KOMMO_O, - Species.SOLGALEO, - Species.CELESTEELA, - Species.MAGEARNA, - Species.CORVIKNIGHT, - Species.TOXEL, - Species.TOXTRICITY, - Species.PERRSERKER, - Species.DURALUDON, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.VAROOM, - Species.REVAVROOM, - Species.ORTHWORM, - Species.KINGAMBIT, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.GHOLDENGO, - Species.MIRAIDON, - Species.IRON_LEAVES, - Species.ARCHALUDON, - Species.IRON_CROWN, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.GALAR_MEOWTH, - Species.GALAR_STUNFISK, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.LUCARIO, + SpeciesId.MAGNEZONE, + SpeciesId.ELECTIVIRE, + SpeciesId.PROBOPASS, + SpeciesId.DIALGA, + SpeciesId.HEATRAN, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.DURANT, + SpeciesId.COBALION, + SpeciesId.GENESECT, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.KLEFKI, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.DHELMISE, + SpeciesId.KOMMO_O, + SpeciesId.SOLGALEO, + SpeciesId.CELESTEELA, + SpeciesId.MAGEARNA, + SpeciesId.CORVIKNIGHT, + SpeciesId.TOXEL, + SpeciesId.TOXTRICITY, + SpeciesId.PERRSERKER, + SpeciesId.DURALUDON, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.ORTHWORM, + SpeciesId.KINGAMBIT, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.GHOLDENGO, + SpeciesId.MIRAIDON, + SpeciesId.IRON_LEAVES, + SpeciesId.ARCHALUDON, + SpeciesId.IRON_CROWN, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_STUNFISK, ], - [Moves.COSMIC_POWER]: [ - Species.CLEFAIRY, - Species.CLEFABLE, - Species.STARYU, - Species.STARMIE, - Species.MEW, - Species.NATU, - Species.XATU, - Species.SKITTY, - Species.DELCATTY, - Species.LUNATONE, - Species.SOLROCK, - Species.BALTOY, - Species.CLAYDOL, - Species.CASTFORM, - Species.CHIMECHO, - Species.METANG, - Species.METAGROSS, - Species.RAYQUAZA, - Species.JIRACHI, + [MoveId.COSMIC_POWER]: [ + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MEW, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.CASTFORM, + SpeciesId.CHIMECHO, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, [ - Species.DEOXYS, + SpeciesId.DEOXYS, "", "attack", ], - Species.BUNEARY, - Species.LOPUNNY, - Species.CHINGLING, - Species.ARCEUS, - Species.SIGILYPH, - Species.GOTHITELLE, - Species.ELGYEM, - Species.BEHEEYEM, - Species.MINIOR, - Species.COSMOEM, - Species.SOLGALEO, - Species.LUNALA, - Species.NECROZMA, - Species.ETERNATUS, - Species.RELLOR, - Species.RABSCA, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.CHINGLING, + SpeciesId.ARCEUS, + SpeciesId.SIGILYPH, + SpeciesId.GOTHITELLE, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.MINIOR, + SpeciesId.COSMOEM, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NECROZMA, + SpeciesId.ETERNATUS, + SpeciesId.RELLOR, + SpeciesId.RABSCA, ], - [Moves.SIGNAL_BEAM]: [ - Species.BLASTOISE, - Species.BUTTERFREE, - Species.PIKACHU, - Species.RAICHU, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VENONAT, - Species.VENOMOTH, - Species.PSYDUCK, - Species.GOLDUCK, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.SEEL, - Species.DEWGONG, - Species.CLOYSTER, - Species.DROWZEE, - Species.HYPNO, - Species.VOLTORB, - Species.ELECTRODE, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.JYNX, - Species.ELECTABUZZ, - Species.LAPRAS, - Species.VAPOREON, - Species.JOLTEON, - Species.PORYGON, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MEWTWO, - Species.MEW, - Species.SPINARAK, - Species.ARIADOS, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.CLEFFA, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.YANMA, - Species.ESPEON, - Species.SLOWKING, - Species.GIRAFARIG, - Species.FORRETRESS, - Species.QWILFISH, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.KINGDRA, - Species.PORYGON2, - Species.STANTLER, - Species.SMOOCHUM, - Species.ELEKID, - Species.RAIKOU, - Species.SUICUNE, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SABLEYE, - Species.MEDITITE, - Species.MEDICHAM, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.SPOINK, - Species.GRUMPIG, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.LUNATONE, - Species.SOLROCK, - Species.BALTOY, - Species.CLAYDOL, - Species.CHIMECHO, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.GOREBYSS, - Species.METANG, - Species.METAGROSS, - Species.REGICE, - Species.KYOGRE, - Species.JIRACHI, - Species.DEOXYS, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.WORMADAM, - Species.MOTHIM, - Species.VESPIQUEN, - Species.CHINGLING, - Species.BRONZOR, - Species.BRONZONG, - Species.MIME_JR, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.MAGNEZONE, - Species.ELECTIVIRE, - Species.TOGEKISS, - Species.YANMEGA, - Species.GLACEON, - Species.PORYGON_Z, - Species.GALLADE, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.CRESSELIA, - Species.PHIONE, - Species.MANAPHY, - Species.ARCEUS, - Species.VICTINI, - Species.WATCHOG, - Species.MUNNA, - Species.MUSHARNA, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.WOOBAT, - Species.SWOOBAT, - Species.AUDINO, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.SIGILYPH, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.EMOLGA, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.JOLTIK, - Species.GALVANTULA, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.CRYOGONAL, - Species.SHELMET, - Species.ACCELGOR, - Species.GOLETT, - Species.GOLURK, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.ZEKROM, - Species.KYUREM, - Species.MELOETTA, - Species.GENESECT, - Species.DELPHOX, - Species.VIVILLON, - Species.ESPURR, - Species.MEOWSTIC, - Species.MALAMAR, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.DEDENNE, - Species.HOOPA, - Species.VIKAVOLT, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.DEWPIDER, - Species.ARAQUANID, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.TYPE_NULL, - Species.SILVALLY, - Species.BRUXISH, - Species.DRAMPA, - Species.LUNALA, - Species.PHEROMOSA, - Species.XURKITREE, - Species.NECROZMA, - Species.MAGEARNA, - Species.POIPOLE, - Species.NAGANADEL, - Species.WYRDEER, - Species.FARIGIRAF, - Species.ALOLA_RAICHU, + [MoveId.SIGNAL_BEAM]: [ + SpeciesId.BLASTOISE, + SpeciesId.BUTTERFREE, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.CLOYSTER, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.LAPRAS, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.PORYGON, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.YANMA, + SpeciesId.ESPEON, + SpeciesId.SLOWKING, + SpeciesId.GIRAFARIG, + SpeciesId.FORRETRESS, + SpeciesId.QWILFISH, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.KINGDRA, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.RAIKOU, + SpeciesId.SUICUNE, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SABLEYE, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.CHIMECHO, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.GOREBYSS, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGICE, + SpeciesId.KYOGRE, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.CHINGLING, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.MIME_JR, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.MAGNEZONE, + SpeciesId.ELECTIVIRE, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.GLACEON, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.CRESSELIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.WATCHOG, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.AUDINO, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.SIGILYPH, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.EMOLGA, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.CRYOGONAL, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.ZEKROM, + SpeciesId.KYUREM, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.DELPHOX, + SpeciesId.VIVILLON, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.MALAMAR, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.DEDENNE, + SpeciesId.HOOPA, + SpeciesId.VIKAVOLT, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.LUNALA, + SpeciesId.PHEROMOSA, + SpeciesId.XURKITREE, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.WYRDEER, + SpeciesId.FARIGIRAF, + SpeciesId.ALOLA_RAICHU, ], - [Moves.SAND_TOMB]: [ - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.DIGLETT, - Species.DUGTRIO, - Species.ONIX, - Species.MEW, - Species.SUDOWOODO, - Species.PINECO, - Species.FORRETRESS, - Species.GLIGAR, - Species.STEELIX, - Species.SCIZOR, - Species.SHUCKLE, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.SKARMORY, - Species.PHANPY, - Species.DONPHAN, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.NOSEPASS, - Species.LAIRON, - Species.AGGRON, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.LUNATONE, - Species.SOLROCK, - Species.WHISCASH, - Species.BALTOY, - Species.CLAYDOL, - Species.REGIROCK, - Species.REGISTEEL, - Species.GROUDON, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.GASTRODON, - Species.BONSLY, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.DRAPION, - Species.GLISCOR, - Species.MAMOSWINE, - Species.PROBOPASS, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.DRILBUR, - Species.EXCADRILL, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DWEBBLE, - Species.CRUSTLE, - Species.LANDORUS, - Species.DIGGERSBY, - Species.CARBINK, - Species.DIANCIE, - Species.MUDBRAY, - Species.MUDSDALE, - Species.SANDYGAST, - Species.PALOSSAND, - Species.DREDNAW, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.SILICOBRA, - Species.SANDACONDA, - Species.RUNERIGUS, - Species.STONJOURNER, - Species.ORTHWORM, - Species.GLIMMET, - Species.GLIMMORA, - Species.SANDY_SHOCKS, - Species.IRON_THORNS, - Species.TING_LU, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, + [MoveId.SAND_TOMB]: [ + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.ONIX, + SpeciesId.MEW, + SpeciesId.SUDOWOODO, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.SKARMORY, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.NOSEPASS, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.WHISCASH, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.REGIROCK, + SpeciesId.REGISTEEL, + SpeciesId.GROUDON, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.GASTRODON, + SpeciesId.BONSLY, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.DRAPION, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.PROBOPASS, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.LANDORUS, + SpeciesId.DIGGERSBY, + SpeciesId.CARBINK, + SpeciesId.DIANCIE, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.DREDNAW, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.RUNERIGUS, + SpeciesId.STONJOURNER, + SpeciesId.ORTHWORM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_THORNS, + SpeciesId.TING_LU, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, ], - [Moves.MUDDY_WATER]: [ - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.PSYDUCK, - Species.GOLDUCK, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.SLOWBRO, - Species.SEEL, - Species.DEWGONG, - Species.LICKITUNG, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.GYARADOS, - Species.LAPRAS, - Species.VAPOREON, - Species.OMANYTE, - Species.OMASTAR, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.CHINCHOU, - Species.LANTURN, - Species.MARILL, - Species.AZUMARILL, - Species.POLITOED, - Species.WOOPER, - Species.QUAGSIRE, - Species.SLOWKING, - Species.KINGDRA, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.WINGULL, - Species.PELIPPER, - Species.AZURILL, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.FEEBAS, - Species.MILOTIC, - Species.CLAMPERL, - Species.RELICANTH, - Species.KYOGRE, - Species.FLOATZEL, - Species.SHELLOS, - Species.GASTRODON, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.LICKILICKY, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.BASCULIN, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.JELLICENT, - Species.STUNFISK, - Species.KELDEO, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.GOLISOPOD, - Species.DHELMISE, - Species.TAPU_FINI, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.DREDNAW, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.PINCURCHIN, - Species.BASCULEGION, - Species.TADBULB, - Species.BELLIBOLT, - Species.WIGLETT, - Species.WUGTRIO, - Species.TATSUGIRI, - Species.CLODSIRE, - Species.GALAR_SLOWBRO, - Species.GALAR_SLOWKING, - Species.GALAR_STUNFISK, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, + [MoveId.MUDDY_WATER]: [ + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.SLOWBRO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.LICKITUNG, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.VAPOREON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.POLITOED, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.KINGDRA, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.AZURILL, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CLAMPERL, + SpeciesId.RELICANTH, + SpeciesId.KYOGRE, + SpeciesId.FLOATZEL, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.LICKILICKY, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.BASCULIN, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.JELLICENT, + SpeciesId.STUNFISK, + SpeciesId.KELDEO, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.GOLISOPOD, + SpeciesId.DHELMISE, + SpeciesId.TAPU_FINI, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.DREDNAW, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.PINCURCHIN, + SpeciesId.BASCULEGION, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.TATSUGIRI, + SpeciesId.CLODSIRE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, ], - [Moves.BULLET_SEED]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.TANGELA, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.BELLOSSOM, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.SUNKERN, - Species.SUNFLORA, - Species.HERACROSS, - Species.REMORAID, - Species.OCTILLERY, - Species.MANTINE, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.SHROOMISH, - Species.BRELOOM, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.CACNEA, - Species.CACTURNE, - Species.LILEEP, - Species.CRADILY, - Species.TROPIUS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.BUDEW, - Species.ROSERADE, - Species.CHERUBI, - Species.CHERRIM, - Species.CARNIVINE, - Species.SNOVER, - Species.ABOMASNOW, - Species.TANGROWTH, - Species.LEAFEON, - Species.SHAYMIN, - Species.ARCEUS, - Species.PATRAT, - Species.WATCHOG, - Species.PANSAGE, - Species.SIMISAGE, - Species.LEAVANNY, - Species.PETILIL, - Species.LILLIGANT, - Species.MARACTUS, - Species.MINCCINO, - Species.CINCCINO, - Species.DEERLING, - Species.SAWSBUCK, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FERROSEED, - Species.FERROTHORN, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.SKIDDO, - Species.GOGOAT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.FOMANTIS, - Species.LURANTIS, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.TAPU_BULU, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SKWOVET, - Species.GREEDENT, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.FLAPPLE, - Species.APPLETUN, - Species.MORPEKO, - Species.ZARUDE, - Species.CALYREX, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.LECHONK, - Species.OINKOLOGNE, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.BRUTE_BONNET, - Species.WO_CHIEN, - Species.DIPPLIN, - Species.OGERPON, - Species.HYDRAPPLE, + [MoveId.BULLET_SEED]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.TANGELA, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.BELLOSSOM, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.HERACROSS, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.MANTINE, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.TROPIUS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.CARNIVINE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.TANGROWTH, + SpeciesId.LEAFEON, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.LEAVANNY, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.MARACTUS, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.TAPU_BULU, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.MORPEKO, + SpeciesId.ZARUDE, + SpeciesId.CALYREX, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.BRUTE_BONNET, + SpeciesId.WO_CHIEN, + SpeciesId.DIPPLIN, + SpeciesId.OGERPON, + SpeciesId.HYDRAPPLE, [ - Species.WORMADAM, + SpeciesId.WORMADAM, "plant", ], - Species.ALOLA_EXEGGUTOR, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_LILLIGANT, - Species.HISUI_DECIDUEYE, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.AERIAL_ACE]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.SPEAROW, - Species.FEAROW, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.ZUBAT, - Species.GOLBAT, - Species.PARAS, - Species.PARASECT, - Species.VENOMOTH, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.SLOWBRO, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.CUBONE, - Species.MAROWAK, - Species.KANGASKHAN, - Species.MR_MIME, - Species.SCYTHER, - Species.PORYGON, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.CROBAT, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.YANMA, - Species.MURKROW, - Species.MISDREAVUS, - Species.GLIGAR, - Species.SCIZOR, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.PORYGON2, - Species.HITMONTOP, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.MASQUERAIN, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.SABLEYE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.VOLBEAT, - Species.ILLUMISE, - Species.FLYGON, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.ANORITH, - Species.ARMALDO, - Species.KECLEON, - Species.TROPIUS, - Species.ABSOL, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.KRICKETUNE, - Species.MOTHIM, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHATOT, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.RIOLU, - Species.LUCARIO, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.MANTYKE, - Species.WEAVILE, - Species.TANGROWTH, - Species.TOGEKISS, - Species.YANMEGA, - Species.LEAFEON, - Species.GLISCOR, - Species.PORYGON_Z, - Species.GALLADE, - Species.DIALGA, - Species.PALKIA, - Species.REGIGIGAS, - Species.GIRATINA, - Species.DARKRAI, - Species.ARCEUS, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.WOOBAT, - Species.SWOOBAT, - Species.DRILBUR, - Species.EXCADRILL, - Species.LEAVANNY, - Species.KROKOROK, - Species.KROOKODILE, - Species.MARACTUS, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SIGILYPH, - Species.ARCHEN, - Species.ARCHEOPS, - Species.ZORUA, - Species.ZOROARK, - Species.DUCKLETT, - Species.SWANNA, - Species.EMOLGA, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.FERROTHORN, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.DURANT, - Species.VOLCARONA, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.KELDEO, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.TYRUNT, - Species.TYRANTRUM, - Species.HAWLUCHA, - Species.DEDENNE, - Species.NOIBAT, - Species.NOIVERN, - Species.YVELTAL, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.LURANTIS, - Species.STUFFUL, - Species.BEWEAR, - Species.PASSIMIAN, - Species.GOLISOPOD, - Species.TYPE_NULL, - Species.SILVALLY, - Species.BRUXISH, - Species.DHELMISE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.LUNALA, - Species.KARTANA, - Species.NECROZMA, - Species.NAGANADEL, - Species.ZERAORA, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.FLAPPLE, - Species.CRAMORANT, - Species.DRACOZOLT, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.KLEAVOR, - Species.URSALUNA, - Species.SNEASLER, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.SPIDOPS, - Species.LOKIX, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.SQUAWKABILLY, - Species.WATTREL, - Species.KILOWATTREL, - Species.ESPATHRA, - Species.BOMBIRDIER, - Species.CYCLIZAR, - Species.FLAMIGO, - Species.KINGAMBIT, - Species.SLITHER_WING, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.CHIEN_PAO, - Species.ROARING_MOON, - Species.IRON_VALIANT, - Species.IRON_LEAVES, - Species.FEZANDIPITI, - Species.IRON_BOULDER, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_MAROWAK, - Species.GALAR_MEOWTH, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.HISUI_ARCANINE, - Species.HISUI_TYPHLOSION, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.HISUI_DECIDUEYE, + [MoveId.AERIAL_ACE]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENOMOTH, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.SLOWBRO, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.KANGASKHAN, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.PORYGON, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.CROBAT, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.YANMA, + SpeciesId.MURKROW, + SpeciesId.MISDREAVUS, + SpeciesId.GLIGAR, + SpeciesId.SCIZOR, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.PORYGON2, + SpeciesId.HITMONTOP, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.MASQUERAIN, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.SABLEYE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.FLYGON, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.KECLEON, + SpeciesId.TROPIUS, + SpeciesId.ABSOL, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.KRICKETUNE, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHATOT, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.MANTYKE, + SpeciesId.WEAVILE, + SpeciesId.TANGROWTH, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLISCOR, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.LEAVANNY, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.MARACTUS, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SIGILYPH, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.EMOLGA, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.FERROTHORN, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.VOLCARONA, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.KELDEO, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.YVELTAL, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.LURANTIS, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.PASSIMIAN, + SpeciesId.GOLISOPOD, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.BRUXISH, + SpeciesId.DHELMISE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.LUNALA, + SpeciesId.KARTANA, + SpeciesId.NECROZMA, + SpeciesId.NAGANADEL, + SpeciesId.ZERAORA, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.FLAPPLE, + SpeciesId.CRAMORANT, + SpeciesId.DRACOZOLT, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.SNEASLER, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.SPIDOPS, + SpeciesId.LOKIX, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.SQUAWKABILLY, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.ESPATHRA, + SpeciesId.BOMBIRDIER, + SpeciesId.CYCLIZAR, + SpeciesId.FLAMIGO, + SpeciesId.KINGAMBIT, + SpeciesId.SLITHER_WING, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.CHIEN_PAO, + SpeciesId.ROARING_MOON, + SpeciesId.IRON_VALIANT, + SpeciesId.IRON_LEAVES, + SpeciesId.FEZANDIPITI, + SpeciesId.IRON_BOULDER, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.ICICLE_SPEAR]: [ - Species.SEEL, - Species.DEWGONG, - Species.SHELLDER, - Species.CLOYSTER, - Species.JYNX, - Species.LAPRAS, - Species.ARTICUNO, - Species.MEW, - Species.SNEASEL, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.DELIBIRD, - Species.SNORUNT, - Species.GLALIE, - Species.SEALEO, - Species.WALREIN, - Species.REGICE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.GLACEON, - Species.MAMOSWINE, - Species.FROSLASS, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.KYUREM, - Species.AURORUS, - Species.BERGMITE, - Species.AVALUGG, - Species.INTELEON, - Species.CURSOLA, - Species.MR_RIME, - Species.SNOM, - Species.FROSMOTH, - Species.EISCUE, - Species.ARCTOZOLT, - Species.ARCTOVISH, - Species.GLASTRIER, - Species.CETODDLE, - Species.CETITAN, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.GALAR_MR_MIME, - Species.GALAR_CORSOLA, + [MoveId.ICICLE_SPEAR]: [ + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.JYNX, + SpeciesId.LAPRAS, + SpeciesId.ARTICUNO, + SpeciesId.MEW, + SpeciesId.SNEASEL, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.DELIBIRD, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.REGICE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.GLACEON, + SpeciesId.MAMOSWINE, + SpeciesId.FROSLASS, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.KYUREM, + SpeciesId.AURORUS, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.INTELEON, + SpeciesId.CURSOLA, + SpeciesId.MR_RIME, + SpeciesId.SNOM, + SpeciesId.FROSMOTH, + SpeciesId.EISCUE, + SpeciesId.ARCTOZOLT, + SpeciesId.ARCTOVISH, + SpeciesId.GLASTRIER, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_CORSOLA, [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", ], - Species.HISUI_AVALUGG, + SpeciesId.HISUI_AVALUGG, ], - [Moves.IRON_DEFENSE]: [ - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.METAPOD, - Species.BUTTERFREE, - Species.KAKUNA, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.SHELLDER, - Species.CLOYSTER, - Species.KRABBY, - Species.KINGLER, - Species.CUBONE, - Species.MAROWAK, - Species.RHYDON, - Species.MR_MIME, - Species.PINSIR, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.MEW, - Species.SUDOWOODO, - Species.SLOWKING, - Species.PINECO, - Species.FORRETRESS, - Species.STEELIX, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.SLUGMA, - Species.MAGCARGO, - Species.CORSOLA, - Species.SKARMORY, - Species.DONPHAN, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.SILCOON, - Species.CASCOON, - Species.NOSEPASS, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.TORKOAL, - Species.SOLROCK, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.CLAYDOL, - Species.ANORITH, - Species.ARMALDO, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.BELDUM, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGISTEEL, - Species.JIRACHI, - Species.TORTERRA, - Species.EMPOLEON, - Species.SHIELDON, - Species.BASTIODON, - Species.BRONZOR, - Species.BRONZONG, - Species.RIOLU, - Species.LUCARIO, - Species.DRAPION, - Species.MAGNEZONE, - Species.RHYPERIOR, - Species.PROBOPASS, - Species.DIALGA, - Species.HEATRAN, - Species.ARCEUS, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.DRILBUR, - Species.EXCADRILL, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.DARMANITAN, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.FERROSEED, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.CRYOGONAL, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.VULLABY, - Species.MANDIBUZZ, - Species.DURANT, - Species.COBALION, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.SPEWPA, - Species.VIVILLON, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.BINACLE, - Species.BARBARACLE, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.CARBINK, - Species.KLEFKI, - Species.BERGMITE, - Species.AVALUGG, - Species.DIANCIE, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.MAREANIE, - Species.TOXAPEX, - Species.MUDBRAY, - Species.MUDSDALE, - Species.DEWPIDER, - Species.ARAQUANID, - Species.GOLISOPOD, - Species.SANDYGAST, - Species.PALOSSAND, - Species.TYPE_NULL, - Species.SILVALLY, - Species.TURTONATOR, - Species.DHELMISE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.SOLGALEO, - Species.CELESTEELA, - Species.KARTANA, - Species.GUZZLORD, - Species.NECROZMA, - Species.MAGEARNA, - Species.STAKATAKA, - Species.MELTAN, - Species.MELMETAL, - Species.CORVIKNIGHT, - Species.DOTTLER, - Species.ORBEETLE, - Species.DREDNAW, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.FLAPPLE, - Species.APPLETUN, - Species.SANDACONDA, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.CURSOLA, - Species.SIRFETCHD, - Species.MR_RIME, - Species.RUNERIGUS, - Species.FALINKS, - Species.STONJOURNER, - Species.EISCUE, - Species.CUFANT, - Species.COPPERAJAH, - Species.ARCTOVISH, - Species.DURALUDON, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.URSHIFU, - Species.GLASTRIER, - Species.ENAMORUS, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.KLAWF, - Species.RELLOR, - Species.RABSCA, - Species.VAROOM, - Species.REVAVROOM, - Species.ORTHWORM, - Species.GLIMMET, - Species.GLIMMORA, - Species.KINGAMBIT, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_HANDS, - Species.IRON_THORNS, - Species.IRON_LEAVES, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.ARCHALUDON, - Species.IRON_CROWN, + [MoveId.IRON_DEFENSE]: [ + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.METAPOD, + SpeciesId.BUTTERFREE, + SpeciesId.KAKUNA, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.RHYDON, + SpeciesId.MR_MIME, + SpeciesId.PINSIR, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.MEW, + SpeciesId.SUDOWOODO, + SpeciesId.SLOWKING, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.STEELIX, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.CORSOLA, + SpeciesId.SKARMORY, + SpeciesId.DONPHAN, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.SILCOON, + SpeciesId.CASCOON, + SpeciesId.NOSEPASS, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.TORKOAL, + SpeciesId.SOLROCK, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.CLAYDOL, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.BELDUM, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGISTEEL, + SpeciesId.JIRACHI, + SpeciesId.TORTERRA, + SpeciesId.EMPOLEON, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.DRAPION, + SpeciesId.MAGNEZONE, + SpeciesId.RHYPERIOR, + SpeciesId.PROBOPASS, + SpeciesId.DIALGA, + SpeciesId.HEATRAN, + SpeciesId.ARCEUS, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.DARMANITAN, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.CRYOGONAL, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.DURANT, + SpeciesId.COBALION, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.SPEWPA, + SpeciesId.VIVILLON, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.CARBINK, + SpeciesId.KLEFKI, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.DIANCIE, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.GOLISOPOD, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.TURTONATOR, + SpeciesId.DHELMISE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.SOLGALEO, + SpeciesId.CELESTEELA, + SpeciesId.KARTANA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.STAKATAKA, + SpeciesId.MELTAN, + SpeciesId.MELMETAL, + SpeciesId.CORVIKNIGHT, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.DREDNAW, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.SANDACONDA, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.SIRFETCHD, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.FALINKS, + SpeciesId.STONJOURNER, + SpeciesId.EISCUE, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.ARCTOVISH, + SpeciesId.DURALUDON, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.URSHIFU, + SpeciesId.GLASTRIER, + SpeciesId.ENAMORUS, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.KLAWF, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.ORTHWORM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.KINGAMBIT, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_THORNS, + SpeciesId.IRON_LEAVES, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.ARCHALUDON, + SpeciesId.IRON_CROWN, [ - Species.DEOXYS, + SpeciesId.DEOXYS, "defense", ], [ - Species.WORMADAM, + SpeciesId.WORMADAM, "trash", ], - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_MAROWAK, - Species.GALAR_MEOWTH, - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_DARMANITAN, - Species.GALAR_YAMASK, - Species.GALAR_STUNFISK, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_YAMASK, + SpeciesId.GALAR_STUNFISK, [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", ], - Species.HISUI_AVALUGG, + SpeciesId.HISUI_AVALUGG, ], - [Moves.DRAGON_CLAW]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.AERODACTYL, - Species.DRAGONITE, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.TYRANITAR, - Species.SCEPTILE, - Species.AGGRON, - Species.FLYGON, - Species.ALTARIA, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.LATIAS, - Species.LATIOS, - Species.GROUDON, - Species.RAYQUAZA, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.DIALGA, - Species.PALKIA, - Species.GIRATINA, - Species.ARCEUS, - Species.KROKOROK, - Species.KROOKODILE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.ARCHEN, - Species.ARCHEOPS, - Species.EELEKTROSS, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.DRUDDIGON, - Species.RESHIRAM, - Species.ZEKROM, - Species.KYUREM, - Species.CHESNAUGHT, - Species.PANGORO, - Species.BARBARACLE, - Species.TYRUNT, - Species.TYRANTRUM, - Species.GOODRA, - Species.NOIBAT, - Species.NOIVERN, - Species.YVELTAL, - Species.SALANDIT, - Species.SALAZZLE, - Species.BEWEAR, - Species.TYPE_NULL, - Species.SILVALLY, - Species.TURTONATOR, - Species.DRAMPA, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.GUZZLORD, - Species.NAGANADEL, - Species.DRACOZOLT, - Species.DURALUDON, - Species.DRAGAPULT, - Species.REGIDRAGO, - Species.CERULEDGE, - Species.CYCLIZAR, - Species.IRON_THORNS, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.ROARING_MOON, - Species.KORAIDON, - Species.MIRAIDON, - Species.WALKING_WAKE, - Species.ARCHALUDON, - Species.GOUGING_FIRE, - Species.HISUI_GOODRA, + [MoveId.DRAGON_CLAW]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.AERODACTYL, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.TYRANITAR, + SpeciesId.SCEPTILE, + SpeciesId.AGGRON, + SpeciesId.FLYGON, + SpeciesId.ALTARIA, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.GIRATINA, + SpeciesId.ARCEUS, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.EELEKTROSS, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.DRUDDIGON, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.KYUREM, + SpeciesId.CHESNAUGHT, + SpeciesId.PANGORO, + SpeciesId.BARBARACLE, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.GOODRA, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.YVELTAL, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.BEWEAR, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.TURTONATOR, + SpeciesId.DRAMPA, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.GUZZLORD, + SpeciesId.NAGANADEL, + SpeciesId.DRACOZOLT, + SpeciesId.DURALUDON, + SpeciesId.DRAGAPULT, + SpeciesId.REGIDRAGO, + SpeciesId.CERULEDGE, + SpeciesId.CYCLIZAR, + SpeciesId.IRON_THORNS, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.ARCHALUDON, + SpeciesId.GOUGING_FIRE, + SpeciesId.HISUI_GOODRA, ], - [Moves.FRENZY_PLANT]: [ - Species.VENUSAUR, - Species.MEW, - Species.MEGANIUM, - Species.SCEPTILE, - Species.TORTERRA, - Species.SERPERIOR, - Species.CHESNAUGHT, - Species.DECIDUEYE, - Species.RILLABOOM, - Species.MEOWSCARADA, - Species.HISUI_DECIDUEYE, + [MoveId.FRENZY_PLANT]: [ + SpeciesId.VENUSAUR, + SpeciesId.MEW, + SpeciesId.MEGANIUM, + SpeciesId.SCEPTILE, + SpeciesId.TORTERRA, + SpeciesId.SERPERIOR, + SpeciesId.CHESNAUGHT, + SpeciesId.DECIDUEYE, + SpeciesId.RILLABOOM, + SpeciesId.MEOWSCARADA, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.BULK_UP]: [ - Species.MANKEY, - Species.PRIMEAPE, - Species.POLIWRATH, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.ELECTABUZZ, - Species.PINSIR, - Species.MEWTWO, - Species.MEW, - Species.SNUBBULL, - Species.GRANBULL, - Species.HERACROSS, - Species.TEDDIURSA, - Species.URSARING, - Species.TYROGUE, - Species.HITMONTOP, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.SWAMPERT, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.MAKUHITA, - Species.HARIYAMA, - Species.SABLEYE, - Species.MEDITITE, - Species.MEDICHAM, - Species.GROUDON, - Species.RAYQUAZA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.BUIZEL, - Species.FLOATZEL, - Species.RIOLU, - Species.LUCARIO, - Species.CROAGUNK, - Species.TOXICROAK, - Species.ELECTIVIRE, - Species.GALLADE, - Species.DIALGA, - Species.PALKIA, - Species.ARCEUS, - Species.PIGNITE, - Species.EMBOAR, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.THROH, - Species.SAWK, - Species.KROOKODILE, - Species.DARMANITAN, - Species.SCRAGGY, - Species.SCRAFTY, - Species.EELEKTROSS, - Species.BEARTIC, - Species.MIENFOO, - Species.MIENSHAO, - Species.RUFFLET, - Species.BRAVIARY, - Species.TORNADUS, - Species.THUNDURUS, - Species.LANDORUS, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.TALONFLAME, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.BARBARACLE, - Species.HAWLUCHA, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.LYCANROC, - Species.STUFFUL, - Species.BEWEAR, - Species.PASSIMIAN, - Species.GOLISOPOD, - Species.KOMALA, - Species.TURTONATOR, - Species.MIMIKYU, - Species.BRUXISH, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_BULU, - Species.BUZZWOLE, - Species.MARSHADOW, - Species.ZERAORA, - Species.RILLABOOM, - Species.RABOOT, - Species.CINDERACE, - Species.CORVIKNIGHT, - Species.BOLTUND, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.FALINKS, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.URSALUNA, - Species.SNEASLER, - Species.QUAQUAVAL, - Species.PAWMOT, - Species.CERULEDGE, - Species.PALAFIN, - Species.FLAMIGO, - Species.ANNIHILAPE, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.SLITHER_WING, - Species.KORAIDON, - Species.OKIDOGI, - Species.ALOLA_RATICATE, - Species.GALAR_ZAPDOS, - Species.GALAR_DARMANITAN, - Species.HISUI_SNEASEL, - Species.HISUI_BRAVIARY, - Species.HISUI_DECIDUEYE, - Species.PALDEA_TAUROS, + [MoveId.BULK_UP]: [ + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.POLIWRATH, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.ELECTABUZZ, + SpeciesId.PINSIR, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.HERACROSS, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.SWAMPERT, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.SABLEYE, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.ELECTIVIRE, + SpeciesId.GALLADE, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.ARCEUS, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.KROOKODILE, + SpeciesId.DARMANITAN, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.EELEKTROSS, + SpeciesId.BEARTIC, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.LANDORUS, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.TALONFLAME, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.BARBARACLE, + SpeciesId.HAWLUCHA, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.LYCANROC, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.PASSIMIAN, + SpeciesId.GOLISOPOD, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_BULU, + SpeciesId.BUZZWOLE, + SpeciesId.MARSHADOW, + SpeciesId.ZERAORA, + SpeciesId.RILLABOOM, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.CORVIKNIGHT, + SpeciesId.BOLTUND, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.FALINKS, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.URSALUNA, + SpeciesId.SNEASLER, + SpeciesId.QUAQUAVAL, + SpeciesId.PAWMOT, + SpeciesId.CERULEDGE, + SpeciesId.PALAFIN, + SpeciesId.FLAMIGO, + SpeciesId.ANNIHILAPE, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.SLITHER_WING, + SpeciesId.KORAIDON, + SpeciesId.OKIDOGI, + SpeciesId.ALOLA_RATICATE, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.PALDEA_TAUROS, ], - [Moves.BOUNCE]: [ - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.PONYTA, - Species.RAPIDASH, - Species.HITMONLEE, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.MAGIKARP, - Species.GYARADOS, - Species.MEW, - Species.SPINARAK, - Species.ARIADOS, - Species.CHINCHOU, - Species.LANTURN, - Species.IGGLYBUFF, - Species.MARILL, - Species.AZUMARILL, - Species.POLITOED, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.QWILFISH, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.KINGDRA, - Species.DONPHAN, - Species.STANTLER, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.SHIFTRY, - Species.AZURILL, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.SPOINK, - Species.GRUMPIG, - Species.BARBOACH, - Species.WHISCASH, - Species.ABSOL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.AMBIPOM, - Species.BUNEARY, - Species.LOPUNNY, - Species.CROAGUNK, - Species.TOXICROAK, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.PHIONE, - Species.MANAPHY, - Species.VICTINI, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.BASCULIN, - Species.MARACTUS, - Species.ARCHEN, - Species.ARCHEOPS, - Species.ZORUA, - Species.ZOROARK, - Species.DEERLING, - Species.SAWSBUCK, - Species.ALOMOMOLA, - Species.JOLTIK, - Species.GALVANTULA, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.STUNFISK, - Species.MIENFOO, - Species.MIENSHAO, - Species.COBALION, - Species.VIRIZION, - Species.KELDEO, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.PYROAR, - Species.GOGOAT, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HAWLUCHA, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.TOGEDEMARU, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.MARSHADOW, - Species.ZERAORA, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.DUBWOOL, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.REGIELEKI, - Species.LOKIX, - Species.FINIZEN, - Species.CETODDLE, - Species.CETITAN, - Species.CHI_YU, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_ZAPDOS, - Species.GALAR_STUNFISK, + [MoveId.BOUNCE]: [ + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.HITMONLEE, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.MAGIKARP, + SpeciesId.GYARADOS, + SpeciesId.MEW, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.IGGLYBUFF, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.POLITOED, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.QWILFISH, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.KINGDRA, + SpeciesId.DONPHAN, + SpeciesId.STANTLER, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.SHIFTRY, + SpeciesId.AZURILL, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.ABSOL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.AMBIPOM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.VICTINI, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.BASCULIN, + SpeciesId.MARACTUS, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.ALOMOMOLA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.STUNFISK, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.COBALION, + SpeciesId.VIRIZION, + SpeciesId.KELDEO, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.PYROAR, + SpeciesId.GOGOAT, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HAWLUCHA, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.TOGEDEMARU, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.MARSHADOW, + SpeciesId.ZERAORA, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.DUBWOOL, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.REGIELEKI, + SpeciesId.LOKIX, + SpeciesId.FINIZEN, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.CHI_YU, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_STUNFISK, ], - [Moves.MUD_SHOT]: [ - Species.EKANS, - Species.ARBOK, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.DIGLETT, - Species.DUGTRIO, - Species.PSYDUCK, - Species.GOLDUCK, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.GRIMER, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.KRABBY, - Species.KINGLER, - Species.RHYHORN, - Species.RHYDON, - Species.GOLDEEN, - Species.SEAKING, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.MEW, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.AIPOM, - Species.WOOPER, - Species.QUAGSIRE, - Species.SLOWKING, - Species.DUNSPARCE, - Species.GLIGAR, - Species.QWILFISH, - Species.SHUCKLE, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.REMORAID, - Species.OCTILLERY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.PHANPY, - Species.DONPHAN, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.ZIGZAGOON, - Species.LINOONE, - Species.LOMBRE, - Species.LUDICOLO, - Species.SURSKIT, - Species.MASQUERAIN, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.SABLEYE, - Species.GULPIN, - Species.SWALOT, - Species.NUMEL, - Species.CAMERUPT, - Species.GRUMPIG, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.FEEBAS, - Species.MILOTIC, - Species.RELICANTH, - Species.GROUDON, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.PACHIRISU, - Species.SHELLOS, - Species.GASTRODON, - Species.AMBIPOM, - Species.BONSLY, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.CROAGUNK, - Species.TOXICROAK, - Species.RHYPERIOR, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.DRILBUR, - Species.EXCADRILL, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.BASCULIN, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.CUBCHOO, - Species.BEARTIC, - Species.SHELMET, - Species.ACCELGOR, - Species.STUNFISK, - Species.BOUFFALANT, - Species.LANDORUS, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.SKIDDO, - Species.GOGOAT, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.AMAURA, - Species.AURORUS, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.VOLCANION, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.MUDSDALE, - Species.WIMPOD, - Species.GOLISOPOD, - Species.SANDYGAST, - Species.PALOSSAND, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.SKWOVET, - Species.GREEDENT, - Species.NICKIT, - Species.THIEVUL, - Species.CHEWTLE, - Species.DREDNAW, - Species.SILICOBRA, - Species.SANDACONDA, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.OBSTAGOON, - Species.CUFANT, - Species.COPPERAJAH, - Species.ZARUDE, - Species.GLASTRIER, - Species.SPECTRIER, - Species.CALYREX, - Species.BASCULEGION, - Species.OVERQWIL, - Species.LECHONK, - Species.OINKOLOGNE, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.FIDOUGH, - Species.DACHSBUN, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.TADBULB, - Species.BELLIBOLT, - Species.SHROODLE, - Species.GRAFAIAI, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.KLAWF, - Species.RELLOR, - Species.RABSCA, - Species.WIGLETT, - Species.WUGTRIO, - Species.CYCLIZAR, - Species.ORTHWORM, - Species.GLIMMET, - Species.GLIMMORA, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.CLODSIRE, - Species.DUDUNSPARCE, - Species.GREAT_TUSK, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.WO_CHIEN, - Species.TING_LU, - Species.KORAIDON, - Species.WALKING_WAKE, - Species.PIKACHU, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_SLOWKING, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_STUNFISK, - Species.HISUI_QWILFISH, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + [MoveId.MUD_SHOT]: [ + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.MEW, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.AIPOM, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.QWILFISH, + SpeciesId.SHUCKLE, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.SABLEYE, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.GRUMPIG, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.RELICANTH, + SpeciesId.GROUDON, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.PACHIRISU, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.BONSLY, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.RHYPERIOR, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.BASCULIN, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.STUNFISK, + SpeciesId.BOUFFALANT, + SpeciesId.LANDORUS, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.VOLCANION, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.MUDSDALE, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.OBSTAGOON, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.ZARUDE, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.CALYREX, + SpeciesId.BASCULEGION, + SpeciesId.OVERQWIL, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.KLAWF, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.CYCLIZAR, + SpeciesId.ORTHWORM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.CLODSIRE, + SpeciesId.DUDUNSPARCE, + SpeciesId.GREAT_TUSK, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.WO_CHIEN, + SpeciesId.TING_LU, + SpeciesId.KORAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.PIKACHU, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.POISON_TAIL]: [ - Species.EKANS, - Species.ARBOK, - Species.NIDORAN_F, - Species.NIDORAN_M, - Species.MEW, - Species.DUNSPARCE, - Species.GLIGAR, - Species.QWILFISH, - Species.SEVIPER, - Species.STUNKY, - Species.SKUNTANK, - Species.SKORUPI, - Species.GLISCOR, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.DRUDDIGON, - Species.SKRELP, - Species.DRAGALGE, - Species.GOOMY, - Species.GOODRA, - Species.SALANDIT, - Species.SALAZZLE, - Species.SILICOBRA, - Species.SANDACONDA, - Species.TOXTRICITY, - Species.ETERNATUS, - Species.SNEASLER, - Species.OVERQWIL, - Species.GRAFAIAI, - Species.CLODSIRE, - Species.DUDUNSPARCE, - Species.OKIDOGI, - Species.FEZANDIPITI, - Species.PIKACHU, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.PALDEA_WOOPER, + [MoveId.POISON_TAIL]: [ + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORAN_M, + SpeciesId.MEW, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.QWILFISH, + SpeciesId.SEVIPER, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.SKORUPI, + SpeciesId.GLISCOR, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.DRUDDIGON, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.GOOMY, + SpeciesId.GOODRA, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.TOXTRICITY, + SpeciesId.ETERNATUS, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.GRAFAIAI, + SpeciesId.CLODSIRE, + SpeciesId.DUDUNSPARCE, + SpeciesId.OKIDOGI, + SpeciesId.FEZANDIPITI, + SpeciesId.PIKACHU, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.PALDEA_WOOPER, ], - [Moves.COVET]: [ - Species.RATTATA, - Species.RATICATE, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.MEOWTH, - Species.PERSIAN, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.FARFETCHD, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.CHANSEY, - Species.KANGASKHAN, - Species.MR_MIME, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.SNORLAX, - Species.MEW, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.SENTRET, - Species.FURRET, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.AIPOM, - Species.ESPEON, - Species.UMBREON, - Species.SNUBBULL, - Species.GRANBULL, - Species.SHUCKLE, - Species.TEDDIURSA, - Species.URSARING, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.BLISSEY, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.AZURILL, - Species.SKITTY, - Species.DELCATTY, - Species.PLUSLE, - Species.MINUN, - Species.ILLUMISE, - Species.ROSELIA, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.LATIAS, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.BIDOOF, - Species.BIBAREL, - Species.BUDEW, - Species.ROSERADE, - Species.PACHIRISU, - Species.AMBIPOM, - Species.BUNEARY, - Species.LOPUNNY, - Species.GLAMEOW, - Species.PURUGLY, - Species.BONSLY, - Species.MIME_JR, - Species.HAPPINY, - Species.MUNCHLAX, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.LICKILICKY, - Species.TOGEKISS, - Species.LEAFEON, - Species.GLACEON, - Species.PHIONE, - Species.MANAPHY, - Species.SHAYMIN, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANPOUR, - Species.SIMIPOUR, - Species.PANSEAR, - Species.SIMISEAR, - Species.AUDINO, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.EMOLGA, - Species.CUBCHOO, - Species.BEARTIC, - Species.KELDEO, - Species.MELOETTA, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.PANCHAM, - Species.PANGORO, - Species.ESPURR, - Species.MEOWSTIC, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.SYLVEON, - Species.DEDENNE, - Species.CARBINK, - Species.KLEFKI, - Species.DIANCIE, - Species.HOOPA, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.SALANDIT, - Species.SALAZZLE, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.POIPOLE, - Species.GREEDENT, - Species.PERRSERKER, - Species.SIRFETCHD, - Species.MR_RIME, - Species.URSALUNA, - Species.LECHONK, - Species.OINKOLOGNE, - Species.FIDOUGH, - Species.DACHSBUN, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.ANNIHILAPE, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.GALAR_MEOWTH, - Species.GALAR_FARFETCHD, - Species.GALAR_MR_MIME, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_TYPHLOSION, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, - Species.HISUI_DECIDUEYE, - Species.ETERNAL_FLOETTE, + [MoveId.COVET]: [ + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.FARFETCHD, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.SNORLAX, + SpeciesId.MEW, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.AIPOM, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SHUCKLE, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.BLISSEY, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.AZURILL, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.LATIAS, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.PACHIRISU, + SpeciesId.AMBIPOM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.MUNCHLAX, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.LICKILICKY, + SpeciesId.TOGEKISS, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.SHAYMIN, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.AUDINO, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.EMOLGA, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.SYLVEON, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.KLEFKI, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.POIPOLE, + SpeciesId.GREEDENT, + SpeciesId.PERRSERKER, + SpeciesId.SIRFETCHD, + SpeciesId.MR_RIME, + SpeciesId.URSALUNA, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.ANNIHILAPE, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_MR_MIME, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.ETERNAL_FLOETTE, ], - [Moves.MAGICAL_LEAF]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.EXEGGUTOR, - Species.MR_MIME, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.CLEFFA, - Species.TOGETIC, - Species.BELLOSSOM, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.SUNKERN, - Species.SUNFLORA, - Species.ESPEON, - Species.MISDREAVUS, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SHROOMISH, - Species.BRELOOM, - Species.ROSELIA, - Species.CACNEA, - Species.CACTURNE, - Species.TROPIUS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.ROSERADE, - Species.CHERUBI, - Species.CHERRIM, - Species.MISMAGIUS, - Species.CARNIVINE, - Species.SNOVER, - Species.ABOMASNOW, - Species.TOGEKISS, - Species.LEAFEON, - Species.GALLADE, - Species.SHAYMIN, - Species.ARCEUS, - Species.SNIVY, - Species.PANSAGE, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.PETILIL, - Species.LILLIGANT, - Species.DEERLING, - Species.SAWSBUCK, - Species.FOONGUS, - Species.AMOONGUSS, - Species.VIRIZION, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.SYLVEON, - Species.PHANTUMP, - Species.TREVENANT, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.FOMANTIS, - Species.LURANTIS, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.FLAPPLE, - Species.APPLETUN, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.ALCREMIE, - Species.INDEEDEE, - Species.ZARUDE, - Species.CALYREX, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.BRUTE_BONNET, - Species.FLUTTER_MANE, - Species.WO_CHIEN, - Species.IRON_VALIANT, - Species.IRON_LEAVES, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.OGERPON, - Species.HYDRAPPLE, + [MoveId.MAGICAL_LEAF]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.EXEGGUTOR, + SpeciesId.MR_MIME, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.CLEFFA, + SpeciesId.TOGETIC, + SpeciesId.BELLOSSOM, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.ESPEON, + SpeciesId.MISDREAVUS, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.ROSELIA, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.TROPIUS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.ROSERADE, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.MISMAGIUS, + SpeciesId.CARNIVINE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.TOGEKISS, + SpeciesId.LEAFEON, + SpeciesId.GALLADE, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.SNIVY, + SpeciesId.PANSAGE, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.VIRIZION, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.SYLVEON, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.ALCREMIE, + SpeciesId.INDEEDEE, + SpeciesId.ZARUDE, + SpeciesId.CALYREX, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.BRUTE_BONNET, + SpeciesId.FLUTTER_MANE, + SpeciesId.WO_CHIEN, + SpeciesId.IRON_VALIANT, + SpeciesId.IRON_LEAVES, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.OGERPON, + SpeciesId.HYDRAPPLE, [ - Species.MEOWSTIC, + SpeciesId.MEOWSTIC, "female", ], - Species.ALOLA_EXEGGUTOR, - Species.ETERNAL_FLOETTE, - Species.HISUI_LILLIGANT, - Species.HISUI_DECIDUEYE, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.CALM_MIND]: [ - Species.PIKACHU, - Species.RAICHU, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.PSYDUCK, - Species.GOLDUCK, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.DROWZEE, - Species.HYPNO, - Species.EXEGGUTOR, - Species.CHANSEY, - Species.MR_MIME, - Species.JYNX, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.MEWTWO, - Species.MEW, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.CLEFFA, - Species.NATU, - Species.XATU, - Species.SUDOWOODO, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.DUNSPARCE, - Species.SNEASEL, - Species.CORSOLA, - Species.STANTLER, - Species.SMOOCHUM, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MEDITITE, - Species.MEDICHAM, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.LUNATONE, - Species.SOLROCK, - Species.BALTOY, - Species.CLAYDOL, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.CHIMECHO, - Species.ABSOL, - Species.RELICANTH, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.JIRACHI, - Species.DEOXYS, - Species.INFERNAPE, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.CHINGLING, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.MIME_JR, - Species.SPIRITOMB, - Species.LUCARIO, - Species.WEAVILE, - Species.LEAFEON, - Species.GLACEON, - Species.GALLADE, - Species.DUSKNOIR, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.GIRATINA, - Species.CRESSELIA, - Species.MANAPHY, - Species.DARKRAI, - Species.ARCEUS, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.MUNNA, - Species.MUSHARNA, - Species.WOOBAT, - Species.SWOOBAT, - Species.AUDINO, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.ALOMOMOLA, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.MIENFOO, - Species.MIENSHAO, - Species.LARVESTA, - Species.VOLCARONA, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.LANDORUS, - Species.KELDEO, - Species.MELOETTA, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.VIVILLON, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.ESPURR, - Species.MEOWSTIC, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.CARBINK, - Species.KLEFKI, - Species.TREVENANT, - Species.XERNEAS, - Species.DIANCIE, - Species.HOOPA, - Species.PRIMARINA, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.COMFEY, - Species.ORANGURU, - Species.MINIOR, - Species.KOMALA, - Species.BRUXISH, - Species.DRAMPA, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.SOLGALEO, - Species.LUNALA, - Species.XURKITREE, - Species.KARTANA, - Species.NECROZMA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.BLACEPHALON, - Species.ZERAORA, - Species.DOTTLER, - Species.ORBEETLE, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.CURSOLA, - Species.MR_RIME, - Species.RUNERIGUS, - Species.ALCREMIE, - Species.FROSMOTH, - Species.INDEEDEE, - Species.SPECTRIER, - Species.CALYREX, - Species.WYRDEER, - Species.SNEASLER, - Species.ENAMORUS, - Species.ARMAROUGE, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.SCREAM_TAIL, - Species.FLUTTER_MANE, - Species.IRON_VALIANT, - Species.MIRAIDON, - Species.IRON_LEAVES, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.RAGING_BOLT, - Species.IRON_CROWN, - Species.TERAPAGOS, - Species.ALOLA_RAICHU, - Species.ALOLA_NINETALES, - Species.ETERNAL_FLOETTE, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_YAMASK, - Species.HISUI_TYPHLOSION, - Species.HISUI_SNEASEL, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.BLOODMOON_URSALUNA, + [MoveId.CALM_MIND]: [ + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.EXEGGUTOR, + SpeciesId.CHANSEY, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.CLEFFA, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.SUDOWOODO, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.DUNSPARCE, + SpeciesId.SNEASEL, + SpeciesId.CORSOLA, + SpeciesId.STANTLER, + SpeciesId.SMOOCHUM, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.RELICANTH, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.INFERNAPE, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.CHINGLING, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.SPIRITOMB, + SpeciesId.LUCARIO, + SpeciesId.WEAVILE, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.AUDINO, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.ALOMOMOLA, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.LANDORUS, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.VIVILLON, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.CARBINK, + SpeciesId.KLEFKI, + SpeciesId.TREVENANT, + SpeciesId.XERNEAS, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.PRIMARINA, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.XURKITREE, + SpeciesId.KARTANA, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.BLACEPHALON, + SpeciesId.ZERAORA, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.CURSOLA, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.ALCREMIE, + SpeciesId.FROSMOTH, + SpeciesId.INDEEDEE, + SpeciesId.SPECTRIER, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.SNEASLER, + SpeciesId.ENAMORUS, + SpeciesId.ARMAROUGE, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.SCREAM_TAIL, + SpeciesId.FLUTTER_MANE, + SpeciesId.IRON_VALIANT, + SpeciesId.MIRAIDON, + SpeciesId.IRON_LEAVES, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_CROWN, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_YAMASK, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.LEAF_BLADE]: [ - Species.VICTREEBEL, - Species.FARFETCHD, - Species.MEW, - Species.BELLOSSOM, - Species.CELEBI, - Species.GROVYLE, - Species.SCEPTILE, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TROPIUS, - Species.LEAFEON, - Species.GALLADE, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.LEAVANNY, - Species.LILLIGANT, - Species.VIRIZION, - Species.SKIDDO, - Species.GOGOAT, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.FOMANTIS, - Species.LURANTIS, - Species.KARTANA, - Species.SIRFETCHD, - Species.IRON_VALIANT, - Species.IRON_LEAVES, - Species.GALAR_FARFETCHD, - Species.HISUI_LILLIGANT, - Species.HISUI_DECIDUEYE, + [MoveId.LEAF_BLADE]: [ + SpeciesId.VICTREEBEL, + SpeciesId.FARFETCHD, + SpeciesId.MEW, + SpeciesId.BELLOSSOM, + SpeciesId.CELEBI, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TROPIUS, + SpeciesId.LEAFEON, + SpeciesId.GALLADE, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.LEAVANNY, + SpeciesId.LILLIGANT, + SpeciesId.VIRIZION, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.KARTANA, + SpeciesId.SIRFETCHD, + SpeciesId.IRON_VALIANT, + SpeciesId.IRON_LEAVES, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.DRAGON_DANCE]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.ONIX, - Species.HORSEA, - Species.SEADRA, - Species.GYARADOS, - Species.LAPRAS, - Species.AERODACTYL, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.STEELIX, - Species.KINGDRA, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.SCEPTILE, - Species.FLYGON, - Species.ALTARIA, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.MILOTIC, - Species.TROPIUS, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.LATIAS, - Species.LATIOS, - Species.RAYQUAZA, - Species.ARCEUS, - Species.SCRAGGY, - Species.SCRAFTY, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.HYDREIGON, - Species.RESHIRAM, - Species.ZEKROM, - Species.KYUREM, - Species.TYRUNT, - Species.TYRANTRUM, - Species.NOIVERN, - Species.ZYGARDE, - Species.SALAZZLE, - Species.DRAMPA, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.NECROZMA, - Species.NAGANADEL, - Species.FLAPPLE, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ETERNATUS, - Species.REGIDRAGO, - Species.TATSUGIRI, - Species.IRON_THORNS, - Species.BAXCALIBUR, - Species.ROARING_MOON, - Species.WALKING_WAKE, - Species.GOUGING_FIRE, + [MoveId.DRAGON_DANCE]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.ONIX, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.AERODACTYL, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.STEELIX, + SpeciesId.KINGDRA, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.SCEPTILE, + SpeciesId.FLYGON, + SpeciesId.ALTARIA, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.MILOTIC, + SpeciesId.TROPIUS, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.RAYQUAZA, + SpeciesId.ARCEUS, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.HYDREIGON, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.KYUREM, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.NOIVERN, + SpeciesId.ZYGARDE, + SpeciesId.SALAZZLE, + SpeciesId.DRAMPA, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.NECROZMA, + SpeciesId.NAGANADEL, + SpeciesId.FLAPPLE, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ETERNATUS, + SpeciesId.REGIDRAGO, + SpeciesId.TATSUGIRI, + SpeciesId.IRON_THORNS, + SpeciesId.BAXCALIBUR, + SpeciesId.ROARING_MOON, + SpeciesId.WALKING_WAKE, + SpeciesId.GOUGING_FIRE, ], - [Moves.ROCK_BLAST]: [ - Species.NIDOQUEEN, - Species.NIDOKING, - Species.DIGLETT, - Species.DUGTRIO, - Species.MACHAMP, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.SHELLDER, - Species.CLOYSTER, - Species.ONIX, - Species.RHYHORN, - Species.RHYDON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.MEW, - Species.SUDOWOODO, - Species.PINECO, - Species.FORRETRESS, - Species.STEELIX, - Species.SHUCKLE, - Species.HERACROSS, - Species.SLUGMA, - Species.MAGCARGO, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.MANTINE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.NOSEPASS, - Species.LAIRON, - Species.AGGRON, - Species.LUNATONE, - Species.SOLROCK, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.RELICANTH, - Species.REGIROCK, - Species.GROUDON, - Species.TORTERRA, - Species.SHIELDON, - Species.BASTIODON, - Species.GASTRODON, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.RHYPERIOR, - Species.MAMOSWINE, - Species.PROBOPASS, - Species.HEATRAN, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.EXCADRILL, - Species.CONKELDURR, - Species.DWEBBLE, - Species.CRUSTLE, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.TRUBBISH, - Species.GARBODOR, - Species.CINCCINO, - Species.TERRAKION, - Species.BINACLE, - Species.BARBARACLE, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.CARBINK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.LYCANROC, - Species.MINIOR, - Species.NECROZMA, - Species.STAKATAKA, - Species.BLACEPHALON, - Species.DREDNAW, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.SILICOBRA, - Species.SANDACONDA, - Species.CURSOLA, - Species.RUNERIGUS, - Species.STONJOURNER, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.KLEAVOR, - Species.GARGANACL, - Species.KLAWF, - Species.BOMBIRDIER, - Species.ORTHWORM, - Species.GLIMMET, - Species.GLIMMORA, - Species.IRON_THORNS, - Species.IRON_BOULDER, + [MoveId.ROCK_BLAST]: [ + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MACHAMP, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.ONIX, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.MEW, + SpeciesId.SUDOWOODO, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.STEELIX, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.MANTINE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.NOSEPASS, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.RELICANTH, + SpeciesId.REGIROCK, + SpeciesId.GROUDON, + SpeciesId.TORTERRA, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.GASTRODON, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.RHYPERIOR, + SpeciesId.MAMOSWINE, + SpeciesId.PROBOPASS, + SpeciesId.HEATRAN, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.EXCADRILL, + SpeciesId.CONKELDURR, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.CINCCINO, + SpeciesId.TERRAKION, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.CARBINK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.LYCANROC, + SpeciesId.MINIOR, + SpeciesId.NECROZMA, + SpeciesId.STAKATAKA, + SpeciesId.BLACEPHALON, + SpeciesId.DREDNAW, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.CURSOLA, + SpeciesId.RUNERIGUS, + SpeciesId.STONJOURNER, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.KLEAVOR, + SpeciesId.GARGANACL, + SpeciesId.KLAWF, + SpeciesId.BOMBIRDIER, + SpeciesId.ORTHWORM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.IRON_THORNS, + SpeciesId.IRON_BOULDER, [ - Species.WORMADAM, + SpeciesId.WORMADAM, "sandy", ], - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.GALAR_SLOWBRO, - Species.GALAR_CORSOLA, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_AVALUGG, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_CORSOLA, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_AVALUGG, ], - [Moves.WATER_PULSE]: [ - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.SEEL, - Species.DEWGONG, - Species.SHELLDER, - Species.CLOYSTER, - Species.KRABBY, - Species.KINGLER, - Species.LICKITUNG, - Species.CHANSEY, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.JYNX, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.VAPOREON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.SNORLAX, - Species.ARTICUNO, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.CHINCHOU, - Species.LANTURN, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.MARILL, - Species.AZUMARILL, - Species.POLITOED, - Species.AIPOM, - Species.WOOPER, - Species.QUAGSIRE, - Species.SLOWKING, - Species.DUNSPARCE, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SNEASEL, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.KINGDRA, - Species.SMOOCHUM, - Species.MILTANK, - Species.BLISSEY, - Species.SUICUNE, - Species.TYRANITAR, - Species.LUGIA, - Species.CELEBI, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.ZIGZAGOON, - Species.LINOONE, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.WINGULL, - Species.PELIPPER, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.AZURILL, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.VOLBEAT, - Species.ILLUMISE, - Species.GULPIN, - Species.SWALOT, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.SPINDA, - Species.ZANGOOSE, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.ANORITH, - Species.ARMALDO, - Species.FEEBAS, - Species.MILOTIC, - Species.CASTFORM, - Species.KECLEON, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.BIBAREL, - Species.BUIZEL, - Species.FLOATZEL, - Species.SHELLOS, - Species.GASTRODON, - Species.AMBIPOM, - Species.BUNEARY, - Species.LOPUNNY, - Species.GLAMEOW, - Species.PURUGLY, - Species.HAPPINY, - Species.SPIRITOMB, - Species.MUNCHLAX, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.LICKILICKY, - Species.TOGEKISS, - Species.GLACEON, - Species.FROSLASS, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.PALKIA, - Species.PHIONE, - Species.MANAPHY, - Species.ARCEUS, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PANPOUR, - Species.SIMIPOUR, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.BASCULIN, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.DUCKLETT, - Species.SWANNA, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.STUNFISK, - Species.KELDEO, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.AMAURA, - Species.AURORUS, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.BERGMITE, - Species.AVALUGG, - Species.NOIBAT, - Species.NOIVERN, - Species.VOLCANION, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.DEWPIDER, - Species.ARAQUANID, - Species.GOLISOPOD, - Species.BRUXISH, - Species.DRAMPA, - Species.KOMMO_O, - Species.TAPU_FINI, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.CHEWTLE, - Species.DREDNAW, - Species.CRAMORANT, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.EISCUE, - Species.BASCULEGION, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.TADBULB, - Species.BELLIBOLT, - Species.WIGLETT, - Species.WUGTRIO, - Species.FINIZEN, - Species.PALAFIN, - Species.FLAMIGO, - Species.CETODDLE, - Species.CETITAN, - Species.VELUZA, - Species.DONDOZO, - Species.TATSUGIRI, - Species.CLODSIRE, - Species.SCREAM_TAIL, - Species.IRON_BUNDLE, - Species.WALKING_WAKE, - Species.TERAPAGOS, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.HISUI_QWILFISH, - Species.HISUI_SAMUROTT, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, + [MoveId.WATER_PULSE]: [ + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.LICKITUNG, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.JYNX, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.VAPOREON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.POLITOED, + SpeciesId.AIPOM, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.DUNSPARCE, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SNEASEL, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.KINGDRA, + SpeciesId.SMOOCHUM, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.SUICUNE, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.CELEBI, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.AZURILL, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.SPINDA, + SpeciesId.ZANGOOSE, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.BIBAREL, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.HAPPINY, + SpeciesId.SPIRITOMB, + SpeciesId.MUNCHLAX, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.LICKILICKY, + SpeciesId.TOGEKISS, + SpeciesId.GLACEON, + SpeciesId.FROSLASS, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.PALKIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.ARCEUS, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.BASCULIN, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.STUNFISK, + SpeciesId.KELDEO, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.VOLCANION, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.GOLISOPOD, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_FINI, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.EISCUE, + SpeciesId.BASCULEGION, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.FLAMIGO, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.VELUZA, + SpeciesId.DONDOZO, + SpeciesId.TATSUGIRI, + SpeciesId.CLODSIRE, + SpeciesId.SCREAM_TAIL, + SpeciesId.IRON_BUNDLE, + SpeciesId.WALKING_WAKE, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, [ - Species.PALDEA_TAUROS, + SpeciesId.PALDEA_TAUROS, "aqua", ], - Species.PALDEA_WOOPER, + SpeciesId.PALDEA_WOOPER, ], - [Moves.ROOST]: [ - Species.CHARIZARD, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.SPEAROW, - Species.FEAROW, - Species.ZUBAT, - Species.GOLBAT, - Species.VENOMOTH, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.SCYTHER, - Species.AERODACTYL, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRAGONITE, - Species.MEW, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.CROBAT, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.YANMA, - Species.MURKROW, - Species.DUNSPARCE, - Species.GLIGAR, - Species.SCIZOR, - Species.MANTINE, - Species.SKARMORY, - Species.LUGIA, - Species.HO_OH, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.MASQUERAIN, - Species.NINJASK, - Species.VOLBEAT, - Species.ILLUMISE, - Species.VIBRAVA, - Species.FLYGON, - Species.SWABLU, - Species.ALTARIA, - Species.TROPIUS, - Species.SALAMENCE, - Species.LATIAS, - Species.LATIOS, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.MOTHIM, - Species.VESPIQUEN, - Species.HONCHKROW, - Species.CHATOT, - Species.TOGEKISS, - Species.YANMEGA, - Species.GLISCOR, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.WOOBAT, - Species.SWOOBAT, - Species.SIGILYPH, - Species.ARCHEN, - Species.ARCHEOPS, - Species.DUCKLETT, - Species.SWANNA, - Species.EMOLGA, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HYDREIGON, - Species.VOLCARONA, - Species.RESHIRAM, - Species.ZEKROM, - Species.KYUREM, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.HAWLUCHA, - Species.NOIBAT, - Species.NOIVERN, - Species.YVELTAL, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.VIKAVOLT, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.DRAMPA, - Species.TAPU_KOKO, - Species.LUNALA, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.CRAMORANT, - Species.KLEAVOR, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.SQUAWKABILLY, - Species.WATTREL, - Species.KILOWATTREL, - Species.FLITTLE, - Species.ESPATHRA, - Species.BOMBIRDIER, - Species.FLAMIGO, - Species.DUDUNSPARCE, - Species.ROARING_MOON, - Species.FEZANDIPITI, - Species.HISUI_BRAVIARY, - Species.HISUI_DECIDUEYE, + [MoveId.ROOST]: [ + SpeciesId.CHARIZARD, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.VENOMOTH, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SCYTHER, + SpeciesId.AERODACTYL, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.CROBAT, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.YANMA, + SpeciesId.MURKROW, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.SCIZOR, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.MASQUERAIN, + SpeciesId.NINJASK, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.TROPIUS, + SpeciesId.SALAMENCE, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.HONCHKROW, + SpeciesId.CHATOT, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.GLISCOR, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.SIGILYPH, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.EMOLGA, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HYDREIGON, + SpeciesId.VOLCARONA, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.KYUREM, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.HAWLUCHA, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.YVELTAL, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.VIKAVOLT, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.DRAMPA, + SpeciesId.TAPU_KOKO, + SpeciesId.LUNALA, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.CRAMORANT, + SpeciesId.KLEAVOR, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.SQUAWKABILLY, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.BOMBIRDIER, + SpeciesId.FLAMIGO, + SpeciesId.DUDUNSPARCE, + SpeciesId.ROARING_MOON, + SpeciesId.FEZANDIPITI, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.GRAVITY]: [ - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MAGNEMITE, - Species.MAGNETON, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CHANSEY, - Species.STARYU, - Species.STARMIE, - Species.PORYGON, - Species.MEWTWO, - Species.MEW, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.ESPEON, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.PORYGON2, - Species.STANTLER, - Species.BLISSEY, - Species.GARDEVOIR, - Species.NOSEPASS, - Species.SABLEYE, - Species.MEDITITE, - Species.MEDICHAM, - Species.LUNATONE, - Species.SOLROCK, - Species.BALTOY, - Species.CLAYDOL, - Species.DUSKULL, - Species.DUSCLOPS, - Species.CHIMECHO, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.JIRACHI, - Species.DEOXYS, - Species.CHINGLING, - Species.BRONZOR, - Species.BRONZONG, - Species.HAPPINY, - Species.MAGNEZONE, - Species.GLACEON, - Species.PORYGON_Z, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.DIALGA, - Species.PALKIA, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.ARCEUS, - Species.MUNNA, - Species.MUSHARNA, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.AUDINO, - Species.SIGILYPH, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.FERROSEED, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.ELGYEM, - Species.BEHEEYEM, - Species.GOLETT, - Species.GOLURK, - Species.LANDORUS, - Species.MELOETTA, - Species.GENESECT, - Species.ESPURR, - Species.MEOWSTIC, - Species.CARBINK, - Species.XERNEAS, - Species.DIANCIE, - Species.HOOPA, - Species.ORANGURU, - Species.SANDYGAST, - Species.PALOSSAND, - Species.MINIOR, - Species.TOGEDEMARU, - Species.TAPU_LELE, - Species.TAPU_FINI, - Species.XURKITREE, - Species.CELESTEELA, - Species.NECROZMA, - Species.MAGEARNA, - Species.STAKATAKA, - Species.HATTERENE, - Species.STONJOURNER, - Species.INDEEDEE, - Species.ETERNATUS, - Species.CALYREX, - Species.WYRDEER, - Species.GARGANACL, - Species.RABSCA, - Species.FARIGIRAF, - Species.SANDY_SHOCKS, - Species.IRON_LEAVES, - Species.IRON_CROWN, - Species.TERAPAGOS, - Species.ALOLA_EXEGGUTOR, + [MoveId.GRAVITY]: [ + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CHANSEY, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.PORYGON, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.ESPEON, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.BLISSEY, + SpeciesId.GARDEVOIR, + SpeciesId.NOSEPASS, + SpeciesId.SABLEYE, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.CHIMECHO, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.CHINGLING, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.HAPPINY, + SpeciesId.MAGNEZONE, + SpeciesId.GLACEON, + SpeciesId.PORYGON_Z, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.ARCEUS, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.AUDINO, + SpeciesId.SIGILYPH, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.LANDORUS, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.CARBINK, + SpeciesId.XERNEAS, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.ORANGURU, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.MINIOR, + SpeciesId.TOGEDEMARU, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_FINI, + SpeciesId.XURKITREE, + SpeciesId.CELESTEELA, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.STAKATAKA, + SpeciesId.HATTERENE, + SpeciesId.STONJOURNER, + SpeciesId.INDEEDEE, + SpeciesId.ETERNATUS, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.GARGANACL, + SpeciesId.RABSCA, + SpeciesId.FARIGIRAF, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_LEAVES, + SpeciesId.IRON_CROWN, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_EXEGGUTOR, [ - Species.INDEEDEE, + SpeciesId.INDEEDEE, "male", ], ], - [Moves.GYRO_BALL]: [ - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.SANDSHREW, - Species.SANDSLASH, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.MAGNEMITE, - Species.MAGNETON, - Species.ONIX, - Species.VOLTORB, - Species.ELECTRODE, - Species.KOFFING, - Species.WEEZING, - Species.STARYU, - Species.STARMIE, - Species.OMANYTE, - Species.OMASTAR, - Species.MEW, - Species.TYPHLOSION, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.STEELIX, - Species.QWILFISH, - Species.SHUCKLE, - Species.MAGCARGO, - Species.DONPHAN, - Species.HITMONTOP, - Species.MILTANK, - Species.SABLEYE, - Species.TORKOAL, - Species.LUNATONE, - Species.SOLROCK, - Species.BALTOY, - Species.CLAYDOL, - Species.GLALIE, - Species.METANG, - Species.METAGROSS, - Species.RAYQUAZA, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BRONZOR, - Species.BRONZONG, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.MUNNA, - Species.MUSHARNA, - Species.WOOBAT, - Species.SWOOBAT, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.FERROSEED, - Species.FERROTHORN, - Species.GOLETT, - Species.GOLURK, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.SPRITZEE, - Species.AROMATISSE, - Species.CARBINK, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.BERGMITE, - Species.AVALUGG, - Species.DIANCIE, - Species.VOLCANION, - Species.PASSIMIAN, - Species.MINIOR, - Species.TOGEDEMARU, - Species.DHELMISE, - Species.SOLGALEO, - Species.BUZZWOLE, - Species.CELESTEELA, - Species.GUZZLORD, - Species.NECROZMA, - Species.MAGEARNA, - Species.STAKATAKA, - Species.MELTAN, - Species.MELMETAL, - Species.SKWOVET, - Species.GREEDENT, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.APPLETUN, - Species.PERRSERKER, - Species.DURALUDON, - Species.OVERQWIL, - Species.VAROOM, - Species.REVAVROOM, - Species.DUDUNSPARCE, - Species.SCREAM_TAIL, - Species.IRON_TREADS, - Species.DIPPLIN, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.TERAPAGOS, + [MoveId.GYRO_BALL]: [ + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.ONIX, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.MEW, + SpeciesId.TYPHLOSION, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.STEELIX, + SpeciesId.QWILFISH, + SpeciesId.SHUCKLE, + SpeciesId.MAGCARGO, + SpeciesId.DONPHAN, + SpeciesId.HITMONTOP, + SpeciesId.MILTANK, + SpeciesId.SABLEYE, + SpeciesId.TORKOAL, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.GLALIE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.RAYQUAZA, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.CARBINK, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.DIANCIE, + SpeciesId.VOLCANION, + SpeciesId.PASSIMIAN, + SpeciesId.MINIOR, + SpeciesId.TOGEDEMARU, + SpeciesId.DHELMISE, + SpeciesId.SOLGALEO, + SpeciesId.BUZZWOLE, + SpeciesId.CELESTEELA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.STAKATAKA, + SpeciesId.MELTAN, + SpeciesId.MELMETAL, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.APPLETUN, + SpeciesId.PERRSERKER, + SpeciesId.DURALUDON, + SpeciesId.OVERQWIL, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.DUDUNSPARCE, + SpeciesId.SCREAM_TAIL, + SpeciesId.IRON_TREADS, + SpeciesId.DIPPLIN, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.TERAPAGOS, [ - Species.WORMADAM, + SpeciesId.WORMADAM, "trash", ], - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.GALAR_MEOWTH, - Species.GALAR_WEEZING, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_TYPHLOSION, - Species.HISUI_QWILFISH, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, ], - [Moves.BRINE]: [ - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.PSYDUCK, - Species.GOLDUCK, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.SEEL, - Species.DEWGONG, - Species.SHELLDER, - Species.CLOYSTER, - Species.KRABBY, - Species.KINGLER, - Species.HORSEA, - Species.SEADRA, - Species.STARYU, - Species.STARMIE, - Species.GYARADOS, - Species.LAPRAS, - Species.VAPOREON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.MEW, - Species.CHINCHOU, - Species.LANTURN, - Species.SLOWKING, - Species.QWILFISH, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.MANTINE, - Species.KINGDRA, - Species.SUICUNE, - Species.LUGIA, - Species.WINGULL, - Species.PELIPPER, - Species.HARIYAMA, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.FEEBAS, - Species.MILOTIC, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.KYOGRE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.BUIZEL, - Species.FLOATZEL, - Species.SHELLOS, - Species.GASTRODON, - Species.FINNEON, - Species.LUMINEON, - Species.PALKIA, - Species.PHIONE, - Species.MANAPHY, - Species.ARCEUS, - Species.OSHAWOTT, - Species.PANPOUR, - Species.BASCULIN, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.DUCKLETT, - Species.SWANNA, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.CUBCHOO, - Species.BEARTIC, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.SANDYGAST, - Species.PALOSSAND, - Species.DHELMISE, - Species.TAPU_FINI, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.CURSOLA, - Species.PINCURCHIN, - Species.EISCUE, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.OVERQWIL, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, + [MoveId.BRINE]: [ + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.VAPOREON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.MEW, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.SLOWKING, + SpeciesId.QWILFISH, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.MANTINE, + SpeciesId.KINGDRA, + SpeciesId.SUICUNE, + SpeciesId.LUGIA, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.HARIYAMA, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.KYOGRE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.PALKIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.ARCEUS, + SpeciesId.OSHAWOTT, + SpeciesId.PANPOUR, + SpeciesId.BASCULIN, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.DHELMISE, + SpeciesId.TAPU_FINI, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.CURSOLA, + SpeciesId.PINCURCHIN, + SpeciesId.EISCUE, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.OVERQWIL, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, [ - Species.URSHIFU, + SpeciesId.URSHIFU, "rapid-strike", ], - Species.HISUI_QWILFISH, + SpeciesId.HISUI_QWILFISH, ], - [Moves.PLUCK]: [ - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.ZUBAT, - Species.GOLBAT, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.MEW, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.CROBAT, - Species.NATU, - Species.XATU, - Species.MURKROW, - Species.DELIBIRD, - Species.SKARMORY, - Species.HO_OH, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.SWABLU, - Species.ALTARIA, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.BIDOOF, - Species.BIBAREL, - Species.HONCHKROW, - Species.CHATOT, - Species.TOGEKISS, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.WOOBAT, - Species.SWOOBAT, - Species.SIGILYPH, - Species.ARCHEN, - Species.ARCHEOPS, - Species.DUCKLETT, - Species.SWANNA, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.INKAY, - Species.MALAMAR, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.ORICORIO, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.CRAMORANT, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.WATTREL, - Species.KILOWATTREL, - Species.FLITTLE, - Species.ESPATHRA, - Species.BOMBIRDIER, - Species.VELUZA, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.GALAR_ZAPDOS, - Species.HISUI_BRAVIARY, - Species.HISUI_DECIDUEYE, + [MoveId.PLUCK]: [ + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.MEW, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.CROBAT, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MURKROW, + SpeciesId.DELIBIRD, + SpeciesId.SKARMORY, + SpeciesId.HO_OH, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.HONCHKROW, + SpeciesId.CHATOT, + SpeciesId.TOGEKISS, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.SIGILYPH, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.ORICORIO, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.CRAMORANT, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.BOMBIRDIER, + SpeciesId.VELUZA, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.TAILWIND]: [ - Species.CHARIZARD, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.SPEAROW, - Species.FEAROW, - Species.ZUBAT, - Species.GOLBAT, - Species.VENOMOTH, - Species.FARFETCHD, - Species.SCYTHER, - Species.AERODACTYL, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRAGONITE, - Species.MEW, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.CROBAT, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.YANMA, - Species.MURKROW, - Species.GLIGAR, - Species.SCIZOR, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.SUICUNE, - Species.LUGIA, - Species.HO_OH, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.MASQUERAIN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.VIBRAVA, - Species.FLYGON, - Species.SWABLU, - Species.ALTARIA, - Species.CASTFORM, - Species.TROPIUS, - Species.SALAMENCE, - Species.LATIAS, - Species.LATIOS, - Species.RAYQUAZA, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.MOTHIM, - Species.COMBEE, - Species.VESPIQUEN, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.HONCHKROW, - Species.CHATOT, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.TOGEKISS, - Species.YANMEGA, - Species.GLISCOR, - Species.ARCEUS, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.WOOBAT, - Species.SWOOBAT, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.SIGILYPH, - Species.ARCHEN, - Species.ARCHEOPS, - Species.DUCKLETT, - Species.SWANNA, - Species.EMOLGA, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HYDREIGON, - Species.VOLCARONA, - Species.TORNADUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.HAWLUCHA, - Species.NOIBAT, - Species.NOIVERN, - Species.YVELTAL, - Species.DARTRIX, - Species.DECIDUEYE, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.COMFEY, - Species.SILVALLY, - Species.DRAMPA, - Species.LUNALA, - Species.KARTANA, - Species.NAGANADEL, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.CRAMORANT, - Species.FROSMOTH, - Species.KLEAVOR, - Species.ENAMORUS, - Species.SQUAWKABILLY, - Species.WATTREL, - Species.KILOWATTREL, - Species.BOMBIRDIER, - Species.FLAMIGO, - Species.DUDUNSPARCE, - Species.IRON_JUGULIS, - Species.ROARING_MOON, - Species.FEZANDIPITI, - Species.SHAYMIN, - Species.GIRATINA, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.HISUI_BRAVIARY, - Species.HISUI_DECIDUEYE, + [MoveId.TAILWIND]: [ + SpeciesId.CHARIZARD, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.VENOMOTH, + SpeciesId.FARFETCHD, + SpeciesId.SCYTHER, + SpeciesId.AERODACTYL, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.CROBAT, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.YANMA, + SpeciesId.MURKROW, + SpeciesId.GLIGAR, + SpeciesId.SCIZOR, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.SUICUNE, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.MASQUERAIN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.CASTFORM, + SpeciesId.TROPIUS, + SpeciesId.SALAMENCE, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.RAYQUAZA, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.MOTHIM, + SpeciesId.COMBEE, + SpeciesId.VESPIQUEN, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.HONCHKROW, + SpeciesId.CHATOT, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.GLISCOR, + SpeciesId.ARCEUS, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.SIGILYPH, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.EMOLGA, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HYDREIGON, + SpeciesId.VOLCARONA, + SpeciesId.TORNADUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.HAWLUCHA, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.YVELTAL, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.COMFEY, + SpeciesId.SILVALLY, + SpeciesId.DRAMPA, + SpeciesId.LUNALA, + SpeciesId.KARTANA, + SpeciesId.NAGANADEL, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.CRAMORANT, + SpeciesId.FROSMOTH, + SpeciesId.KLEAVOR, + SpeciesId.ENAMORUS, + SpeciesId.SQUAWKABILLY, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.BOMBIRDIER, + SpeciesId.FLAMIGO, + SpeciesId.DUDUNSPARCE, + SpeciesId.IRON_JUGULIS, + SpeciesId.ROARING_MOON, + SpeciesId.FEZANDIPITI, + SpeciesId.SHAYMIN, + SpeciesId.GIRATINA, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.U_TURN]: [ - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.ZUBAT, - Species.GOLBAT, - Species.VENOMOTH, - Species.MEOWTH, - Species.PERSIAN, - Species.MANKEY, - Species.PRIMEAPE, - Species.FARFETCHD, - Species.SCYTHER, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.MEW, - Species.SENTRET, - Species.FURRET, - Species.LEDYBA, - Species.LEDIAN, - Species.CROBAT, - Species.NATU, - Species.XATU, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.YANMA, - Species.MURKROW, - Species.GLIGAR, - Species.SCIZOR, - Species.CELEBI, - Species.BLAZIKEN, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.MASQUERAIN, - Species.NINJASK, - Species.VOLBEAT, - Species.ILLUMISE, - Species.VIBRAVA, - Species.FLYGON, - Species.TROPIUS, - Species.RAYQUAZA, - Species.JIRACHI, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.MOTHIM, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.AMBIPOM, - Species.LOPUNNY, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHATOT, - Species.FINNEON, - Species.LUMINEON, - Species.YANMEGA, - Species.GLISCOR, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.PHIONE, - Species.MANAPHY, - Species.VICTINI, - Species.PURRLOIN, - Species.LIEPARD, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.WOOBAT, - Species.SWOOBAT, - Species.WHIMSICOTT, - Species.DARUMAKA, - Species.DARMANITAN, - Species.ARCHEN, - Species.ARCHEOPS, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.EMOLGA, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.ACCELGOR, - Species.MIENFOO, - Species.MIENSHAO, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.TORNADUS, - Species.THUNDURUS, - Species.LANDORUS, - Species.MELOETTA, - Species.GENESECT, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.FURFROU, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.HAWLUCHA, - Species.DEDENNE, - Species.NOIBAT, - Species.NOIVERN, - Species.YVELTAL, - Species.DECIDUEYE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.WISHIWASHI, - Species.TSAREENA, - Species.COMFEY, - Species.PASSIMIAN, - Species.TYPE_NULL, - Species.SILVALLY, - Species.MINIOR, - Species.KOMALA, - Species.TOGEDEMARU, - Species.TAPU_KOKO, - Species.PHEROMOSA, - Species.NAGANADEL, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.ORBEETLE, - Species.THIEVUL, - Species.FLAPPLE, - Species.PERRSERKER, - Species.FROSMOTH, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.KLEAVOR, - Species.SNEASLER, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.QUAQUAVAL, - Species.SPIDOPS, - Species.NYMBLE, - Species.LOKIX, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.SQUAWKABILLY, - Species.WATTREL, - Species.KILOWATTREL, - Species.SHROODLE, - Species.GRAFAIAI, - Species.FLITTLE, - Species.ESPATHRA, - Species.BOMBIRDIER, - Species.CYCLIZAR, - Species.FLAMIGO, - Species.ANNIHILAPE, - Species.SLITHER_WING, - Species.IRON_BUNDLE, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.ROARING_MOON, - Species.KORAIDON, - Species.MIRAIDON, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.OGERPON, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.GALAR_MEOWTH, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.HISUI_DECIDUEYE, + [MoveId.U_TURN]: [ + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.VENOMOTH, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.FARFETCHD, + SpeciesId.SCYTHER, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.MEW, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.CROBAT, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.YANMA, + SpeciesId.MURKROW, + SpeciesId.GLIGAR, + SpeciesId.SCIZOR, + SpeciesId.CELEBI, + SpeciesId.BLAZIKEN, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.MASQUERAIN, + SpeciesId.NINJASK, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.TROPIUS, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.AMBIPOM, + SpeciesId.LOPUNNY, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHATOT, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.YANMEGA, + SpeciesId.GLISCOR, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.VICTINI, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.WHIMSICOTT, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.EMOLGA, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.ACCELGOR, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.LANDORUS, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.FURFROU, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.YVELTAL, + SpeciesId.DECIDUEYE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.WISHIWASHI, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.PASSIMIAN, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.TOGEDEMARU, + SpeciesId.TAPU_KOKO, + SpeciesId.PHEROMOSA, + SpeciesId.NAGANADEL, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.ORBEETLE, + SpeciesId.THIEVUL, + SpeciesId.FLAPPLE, + SpeciesId.PERRSERKER, + SpeciesId.FROSMOTH, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.KLEAVOR, + SpeciesId.SNEASLER, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.QUAQUAVAL, + SpeciesId.SPIDOPS, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.SQUAWKABILLY, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.BOMBIRDIER, + SpeciesId.CYCLIZAR, + SpeciesId.FLAMIGO, + SpeciesId.ANNIHILAPE, + SpeciesId.SLITHER_WING, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.OGERPON, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.CLOSE_COMBAT]: [ - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWRATH, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.FARFETCHD, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.SCYTHER, - Species.PINSIR, - Species.TAUROS, - Species.MEW, - Species.SNUBBULL, - Species.GRANBULL, - Species.SCIZOR, - Species.HERACROSS, - Species.TEDDIURSA, - Species.URSARING, - Species.HITMONTOP, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.BRELOOM, - Species.MAKUHITA, - Species.HARIYAMA, - Species.MEDITITE, - Species.MEDICHAM, - Species.SHARPEDO, - Species.ZANGOOSE, - Species.CRAWDAUNT, - Species.ABSOL, - Species.MONFERNO, - Species.INFERNAPE, - Species.STARAPTOR, - Species.LOPUNNY, - Species.RIOLU, - Species.LUCARIO, - Species.TOXICROAK, - Species.GALLADE, - Species.PIGNITE, - Species.EMBOAR, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.SAWK, - Species.KROOKODILE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.ESCAVALIER, - Species.EELEKTROSS, - Species.HAXORUS, - Species.BEARTIC, - Species.MIENFOO, - Species.MIENSHAO, - Species.GOLURK, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.KELDEO, - Species.MELOETTA, - Species.CHESNAUGHT, - Species.PANGORO, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.TYRUNT, - Species.TYRANTRUM, - Species.HAWLUCHA, - Species.XERNEAS, - Species.INCINEROAR, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.LYCANROC, - Species.MUDBRAY, - Species.MUDSDALE, - Species.BEWEAR, - Species.PASSIMIAN, - Species.GOLISOPOD, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_BULU, - Species.SOLGALEO, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.MARSHADOW, - Species.ZERAORA, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.SIRFETCHD, - Species.FALINKS, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.GLASTRIER, - Species.KLEAVOR, - Species.URSALUNA, - Species.SNEASLER, - Species.QUAQUAVAL, - Species.PAWMOT, - Species.CERULEDGE, - Species.PALAFIN, - Species.FLAMIGO, - Species.ANNIHILAPE, - Species.GREAT_TUSK, - Species.BRUTE_BONNET, - Species.SLITHER_WING, - Species.IRON_HANDS, - Species.IRON_VALIANT, - Species.KORAIDON, - Species.IRON_LEAVES, - Species.OKIDOGI, - Species.IRON_BOULDER, - Species.GALAR_FARFETCHD, - Species.GALAR_ZAPDOS, + [MoveId.CLOSE_COMBAT]: [ + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWRATH, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.FARFETCHD, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.SCYTHER, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.MEW, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SCIZOR, + SpeciesId.HERACROSS, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.HITMONTOP, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.BRELOOM, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.SHARPEDO, + SpeciesId.ZANGOOSE, + SpeciesId.CRAWDAUNT, + SpeciesId.ABSOL, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.STARAPTOR, + SpeciesId.LOPUNNY, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.TOXICROAK, + SpeciesId.GALLADE, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.SAWK, + SpeciesId.KROOKODILE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.ESCAVALIER, + SpeciesId.EELEKTROSS, + SpeciesId.HAXORUS, + SpeciesId.BEARTIC, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.GOLURK, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.CHESNAUGHT, + SpeciesId.PANGORO, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.HAWLUCHA, + SpeciesId.XERNEAS, + SpeciesId.INCINEROAR, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.LYCANROC, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.BEWEAR, + SpeciesId.PASSIMIAN, + SpeciesId.GOLISOPOD, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_BULU, + SpeciesId.SOLGALEO, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.MARSHADOW, + SpeciesId.ZERAORA, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.SIRFETCHD, + SpeciesId.FALINKS, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.GLASTRIER, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.SNEASLER, + SpeciesId.QUAQUAVAL, + SpeciesId.PAWMOT, + SpeciesId.CERULEDGE, + SpeciesId.PALAFIN, + SpeciesId.FLAMIGO, + SpeciesId.ANNIHILAPE, + SpeciesId.GREAT_TUSK, + SpeciesId.BRUTE_BONNET, + SpeciesId.SLITHER_WING, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_VALIANT, + SpeciesId.KORAIDON, + SpeciesId.IRON_LEAVES, + SpeciesId.OKIDOGI, + SpeciesId.IRON_BOULDER, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_ZAPDOS, [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", ], - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_SNEASEL, - Species.HISUI_LILLIGANT, - Species.HISUI_BRAVIARY, - Species.HISUI_DECIDUEYE, - Species.PALDEA_TAUROS, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.PALDEA_TAUROS, ], - [Moves.PAYBACK]: [ - Species.BEEDRILL, - Species.EKANS, - Species.ARBOK, - Species.VULPIX, - Species.NINETALES, - Species.ZUBAT, - Species.GOLBAT, - Species.MEOWTH, - Species.PERSIAN, - Species.MANKEY, - Species.PRIMEAPE, - Species.POLIWRATH, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.DODRIO, - Species.GRIMER, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.ONIX, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.MR_MIME, - Species.JYNX, - Species.TAUROS, - Species.GYARADOS, - Species.AERODACTYL, - Species.MEW, - Species.CROBAT, - Species.POLITOED, - Species.AIPOM, - Species.UMBREON, - Species.MURKROW, - Species.MISDREAVUS, - Species.PINECO, - Species.FORRETRESS, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.OCTILLERY, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.SMOOCHUM, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.PELIPPER, - Species.HARIYAMA, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.AGGRON, - Species.CARVANHA, - Species.SHARPEDO, - Species.SPOINK, - Species.GRUMPIG, - Species.CACNEA, - Species.CACTURNE, - Species.ZANGOOSE, - Species.SEVIPER, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.ABSOL, - Species.GLALIE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.FLOATZEL, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.STUNKY, - Species.SKUNTANK, - Species.BRONZOR, - Species.BRONZONG, - Species.SPIRITOMB, - Species.RIOLU, - Species.LUCARIO, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.CARNIVINE, - Species.FINNEON, - Species.LUMINEON, - Species.WEAVILE, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.GLISCOR, - Species.DUSKNOIR, - Species.FROSLASS, - Species.AZELF, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.DARKRAI, - Species.ARCEUS, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARMANITAN, - Species.SCRAGGY, - Species.SCRAFTY, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TRUBBISH, - Species.GARBODOR, - Species.ZORUA, - Species.ZOROARK, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FERROSEED, - Species.FERROTHORN, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.STUNFISK, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HYDREIGON, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.MELOETTA, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.LITLEO, - Species.PYROAR, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.ESPURR, - Species.MEOWSTIC, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.HAWLUCHA, - Species.YVELTAL, - Species.ZYGARDE, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.MAREANIE, - Species.TOXAPEX, - Species.MUDBRAY, - Species.MUDSDALE, - Species.FOMANTIS, - Species.LURANTIS, - Species.SALANDIT, - Species.SALAZZLE, - Species.STUFFUL, - Species.BEWEAR, - Species.STEENEE, - Species.TSAREENA, - Species.ORANGURU, - Species.PASSIMIAN, - Species.GOLISOPOD, - Species.TYPE_NULL, - Species.SILVALLY, - Species.KOMALA, - Species.TURTONATOR, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.BRUXISH, - Species.DHELMISE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_BULU, - Species.BUZZWOLE, - Species.GUZZLORD, - Species.MARSHADOW, - Species.BLACEPHALON, - Species.SKWOVET, - Species.GREEDENT, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.DOTTLER, - Species.ORBEETLE, - Species.WOOLOO, - Species.DUBWOOL, - Species.CHEWTLE, - Species.DREDNAW, - Species.APPLETUN, - Species.TOXTRICITY, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.MR_RIME, - Species.RUNERIGUS, - Species.FALINKS, - Species.PINCURCHIN, - Species.MORPEKO, - Species.COPPERAJAH, - Species.ARCTOZOLT, - Species.ZAMAZENTA, - Species.ETERNATUS, - Species.URSHIFU, - Species.ZARUDE, - Species.GLASTRIER, - Species.SPECTRIER, - Species.URSALUNA, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.BOMBIRDIER, - Species.FLAMIGO, - Species.BRUTE_BONNET, - Species.WO_CHIEN, - Species.CHIEN_PAO, - Species.TING_LU, - Species.CHI_YU, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, + [MoveId.PAYBACK]: [ + SpeciesId.BEEDRILL, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.POLIWRATH, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.DODRIO, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.AERODACTYL, + SpeciesId.MEW, + SpeciesId.CROBAT, + SpeciesId.POLITOED, + SpeciesId.AIPOM, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.MISDREAVUS, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.OCTILLERY, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.SMOOCHUM, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.PELIPPER, + SpeciesId.HARIYAMA, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.AGGRON, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.ABSOL, + SpeciesId.GLALIE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.FLOATZEL, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.SPIRITOMB, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.WEAVILE, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.GLISCOR, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.AZELF, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARMANITAN, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.STUNFISK, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HYDREIGON, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.MELOETTA, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.HAWLUCHA, + SpeciesId.YVELTAL, + SpeciesId.ZYGARDE, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.GOLISOPOD, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.DHELMISE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_BULU, + SpeciesId.BUZZWOLE, + SpeciesId.GUZZLORD, + SpeciesId.MARSHADOW, + SpeciesId.BLACEPHALON, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.WOOLOO, + SpeciesId.DUBWOOL, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.APPLETUN, + SpeciesId.TOXTRICITY, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.FALINKS, + SpeciesId.PINCURCHIN, + SpeciesId.MORPEKO, + SpeciesId.COPPERAJAH, + SpeciesId.ARCTOZOLT, + SpeciesId.ZAMAZENTA, + SpeciesId.ETERNATUS, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.URSALUNA, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.BOMBIRDIER, + SpeciesId.FLAMIGO, + SpeciesId.BRUTE_BONNET, + SpeciesId.WO_CHIEN, + SpeciesId.CHIEN_PAO, + SpeciesId.TING_LU, + SpeciesId.CHI_YU, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, [ - Species.LYCANROC, + SpeciesId.LYCANROC, "midnight", ], - Species.GALAR_MEOWTH, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARMANITAN, - Species.GALAR_YAMASK, - Species.GALAR_STUNFISK, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_YAMASK, + SpeciesId.GALAR_STUNFISK, [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", "shadow", ], ], - [Moves.ASSURANCE]: [ - Species.BEEDRILL, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.ZUBAT, - Species.GOLBAT, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.MANKEY, - Species.PRIMEAPE, - Species.MACHAMP, - Species.DODUO, - Species.KOFFING, - Species.WEEZING, - Species.KANGASKHAN, - Species.SCYTHER, - Species.TAUROS, - Species.AERODACTYL, - Species.MEW, - Species.CROBAT, - Species.UMBREON, - Species.MURKROW, - Species.GIRAFARIG, - Species.QWILFISH, - Species.SCIZOR, - Species.HERACROSS, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.DONPHAN, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.NUZLEAF, - Species.SHIFTRY, - Species.MAWILE, - Species.CARVANHA, - Species.SHARPEDO, - Species.CACNEA, - Species.CACTURNE, - Species.SEVIPER, - Species.ABSOL, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.VESPIQUEN, - Species.BUNEARY, - Species.LOPUNNY, - Species.HONCHKROW, - Species.GLAMEOW, - Species.STUNKY, - Species.SKUNTANK, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.WEAVILE, - Species.AZELF, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.OSHAWOTT, - Species.PATRAT, - Species.PURRLOIN, - Species.LIEPARD, - Species.WOOBAT, - Species.SWOOBAT, - Species.SCOLIPEDE, - Species.BASCULIN, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.MARACTUS, - Species.SCRAGGY, - Species.SCRAFTY, - Species.ARCHEN, - Species.ARCHEOPS, - Species.ZORUA, - Species.ZOROARK, - Species.FERROSEED, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.MIENSHAO, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.TORNADUS, - Species.THUNDURUS, - Species.GENESECT, - Species.BINACLE, - Species.BARBARACLE, - Species.TYRUNT, - Species.TYRANTRUM, - Species.HAWLUCHA, - Species.GOODRA, - Species.INCINEROAR, - Species.LYCANROC, - Species.PASSIMIAN, - Species.WIMPOD, - Species.GOLISOPOD, - Species.TOGEDEMARU, - Species.DHELMISE, - Species.TAPU_KOKO, - Species.PHEROMOSA, - Species.MARSHADOW, - Species.NAGANADEL, - Species.ZERAORA, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.SKWOVET, - Species.GREEDENT, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.NICKIT, - Species.THIEVUL, - Species.CHEWTLE, - Species.DREDNAW, - Species.CRAMORANT, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.SIRFETCHD, - Species.FALINKS, - Species.PINCURCHIN, - Species.STONJOURNER, - Species.MORPEKO, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ZACIAN, - Species.ETERNATUS, - Species.URSHIFU, - Species.ZARUDE, - Species.REGIELEKI, - Species.GLASTRIER, - Species.SPECTRIER, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.NYMBLE, - Species.LOKIX, - Species.VAROOM, - Species.REVAVROOM, - Species.ANNIHILAPE, - Species.FARIGIRAF, - Species.KINGAMBIT, - Species.IRON_JUGULIS, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GRIMER, - Species.GALAR_MEOWTH, - Species.GALAR_FARFETCHD, - Species.GALAR_WEEZING, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, + [MoveId.ASSURANCE]: [ + SpeciesId.BEEDRILL, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.MACHAMP, + SpeciesId.DODUO, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.KANGASKHAN, + SpeciesId.SCYTHER, + SpeciesId.TAUROS, + SpeciesId.AERODACTYL, + SpeciesId.MEW, + SpeciesId.CROBAT, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.GIRAFARIG, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.HERACROSS, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.DONPHAN, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.MAWILE, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SEVIPER, + SpeciesId.ABSOL, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.VESPIQUEN, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.WEAVILE, + SpeciesId.AZELF, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.PATRAT, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.SCOLIPEDE, + SpeciesId.BASCULIN, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.MARACTUS, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.MIENSHAO, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.GENESECT, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.HAWLUCHA, + SpeciesId.GOODRA, + SpeciesId.INCINEROAR, + SpeciesId.LYCANROC, + SpeciesId.PASSIMIAN, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.TOGEDEMARU, + SpeciesId.DHELMISE, + SpeciesId.TAPU_KOKO, + SpeciesId.PHEROMOSA, + SpeciesId.MARSHADOW, + SpeciesId.NAGANADEL, + SpeciesId.ZERAORA, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.SIRFETCHD, + SpeciesId.FALINKS, + SpeciesId.PINCURCHIN, + SpeciesId.STONJOURNER, + SpeciesId.MORPEKO, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ZACIAN, + SpeciesId.ETERNATUS, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.REGIELEKI, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.ANNIHILAPE, + SpeciesId.FARIGIRAF, + SpeciesId.KINGAMBIT, + SpeciesId.IRON_JUGULIS, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GRIMER, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", "shadow", ], [ - Species.PALDEA_TAUROS, + SpeciesId.PALDEA_TAUROS, "combat", ], ], - [Moves.EMBARGO]: [ - Species.PERSIAN, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.MEWTWO, - Species.MEW, - Species.MURKROW, - Species.MISDREAVUS, - Species.SNEASEL, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.NUZLEAF, - Species.SHIFTRY, - Species.SABLEYE, - Species.MAWILE, - Species.CACTURNE, - Species.ZANGOOSE, - Species.LUNATONE, - Species.SOLROCK, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.SPIRITOMB, - Species.CROAGUNK, - Species.TOXICROAK, - Species.WEAVILE, - Species.PORYGON_Z, - Species.DUSKNOIR, - Species.FROSLASS, - Species.DARKRAI, - Species.VICTINI, - Species.PURRLOIN, - Species.LIEPARD, - Species.WOOBAT, - Species.SWOOBAT, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.YAMASK, - Species.COFAGRIGUS, - Species.ZORUA, - Species.ZOROARK, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.PAWNIARD, - Species.BISHARP, - Species.VULLABY, - Species.MANDIBUZZ, - Species.TORNADUS, - Species.THUNDURUS, - Species.MELOETTA, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.PANGORO, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.YVELTAL, - Species.HOOPA, - Species.INCINEROAR, - Species.ORICORIO, - Species.ORANGURU, - Species.PALOSSAND, - Species.MIMIKYU, - Species.BRUXISH, - Species.DHELMISE, - Species.NECROZMA, - Species.MAGEARNA, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, + [MoveId.EMBARGO]: [ + SpeciesId.PERSIAN, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.MURKROW, + SpeciesId.MISDREAVUS, + SpeciesId.SNEASEL, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.CACTURNE, + SpeciesId.ZANGOOSE, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.SPIRITOMB, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.WEAVILE, + SpeciesId.PORYGON_Z, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.DARKRAI, + SpeciesId.VICTINI, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.MELOETTA, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.PANGORO, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.YVELTAL, + SpeciesId.HOOPA, + SpeciesId.INCINEROAR, + SpeciesId.ORICORIO, + SpeciesId.ORANGURU, + SpeciesId.PALOSSAND, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.DHELMISE, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, ], - [Moves.FLING]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.GLOOM, - Species.VILEPLUME, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.SLOWBRO, - Species.SEEL, - Species.DEWGONG, - Species.GRIMER, - Species.MUK, - Species.HAUNTER, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.MR_MIME, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.SNORLAX, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.LEDYBA, - Species.LEDIAN, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.QUAGSIRE, - Species.SLOWKING, - Species.GLIGAR, - Species.SNUBBULL, - Species.GRANBULL, - Species.SCIZOR, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.DELIBIRD, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.TYRANITAR, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.ZIGZAGOON, - Species.LINOONE, - Species.LOMBRE, - Species.LUDICOLO, - Species.NUZLEAF, - Species.SHIFTRY, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.SABLEYE, - Species.MAWILE, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.GULPIN, - Species.SWALOT, - Species.GRUMPIG, - Species.SPINDA, - Species.CACNEA, - Species.CACTURNE, - Species.ZANGOOSE, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.KECLEON, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.BIBAREL, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.AMBIPOM, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MIME_JR, - Species.HAPPINY, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.CARNIVINE, - Species.ABOMASNOW, - Species.WEAVILE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.GLISCOR, - Species.GALLADE, - Species.DUSKNOIR, - Species.FROSLASS, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.PALKIA, - Species.REGIGIGAS, - Species.PHIONE, - Species.MANAPHY, - Species.DARKRAI, - Species.VICTINI, - Species.PIGNITE, - Species.EMBOAR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.DRILBUR, - Species.EXCADRILL, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.WHIMSICOTT, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.SCRAGGY, - Species.SCRAFTY, - Species.GARBODOR, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.REUNICLUS, - Species.EMOLGA, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.HEATMOR, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.MELOETTA, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.PANCHAM, - Species.PANGORO, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.HAWLUCHA, - Species.DEDENNE, - Species.HOOPA, - Species.VOLCANION, - Species.INCINEROAR, - Species.GUMSHOOS, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.FOMANTIS, - Species.LURANTIS, - Species.SALANDIT, - Species.SALAZZLE, - Species.STUFFUL, - Species.BEWEAR, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.PASSIMIAN, - Species.GOLISOPOD, - Species.SANDYGAST, - Species.PALOSSAND, - Species.KOMALA, - Species.TURTONATOR, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.BRUXISH, - Species.DRAMPA, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.XURKITREE, - Species.GUZZLORD, - Species.NECROZMA, - Species.MARSHADOW, - Species.BLACEPHALON, - Species.ZERAORA, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.CINDERACE, - Species.DRIZZILE, - Species.INTELEON, - Species.SKWOVET, - Species.GREEDENT, - Species.TOXTRICITY, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.MR_RIME, - Species.MILCERY, - Species.ALCREMIE, - Species.MORPEKO, - Species.CUFANT, - Species.COPPERAJAH, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.URSALUNA, - Species.SNEASLER, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.QUAQUAVAL, - Species.SPIDOPS, - Species.LOKIX, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.ARBOLIVA, - Species.GARGANACL, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.SHROODLE, - Species.GRAFAIAI, - Species.KLAWF, - Species.RELLOR, - Species.RABSCA, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.FINIZEN, - Species.PALAFIN, - Species.FLAMIGO, - Species.ANNIHILAPE, - Species.KINGAMBIT, - Species.SCREAM_TAIL, - Species.IRON_BUNDLE, - Species.IRON_HANDS, - Species.IRON_THORNS, - Species.GHOLDENGO, - Species.IRON_VALIANT, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.OGERPON, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_MAROWAK, + [MoveId.FLING]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.SLOWBRO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.SNORLAX, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.GLIGAR, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SCIZOR, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.DELIBIRD, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.TYRANITAR, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.ZANGOOSE, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.KECLEON, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.BIBAREL, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.AMBIPOM, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.GLISCOR, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.PALKIA, + SpeciesId.REGIGIGAS, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.VICTINI, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.WHIMSICOTT, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.GARBODOR, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.REUNICLUS, + SpeciesId.EMOLGA, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.HEATMOR, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.MELOETTA, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.INCINEROAR, + SpeciesId.GUMSHOOS, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.GOLISOPOD, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.XURKITREE, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MARSHADOW, + SpeciesId.BLACEPHALON, + SpeciesId.ZERAORA, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.CINDERACE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.TOXTRICITY, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.MR_RIME, + SpeciesId.MILCERY, + SpeciesId.ALCREMIE, + SpeciesId.MORPEKO, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.URSALUNA, + SpeciesId.SNEASLER, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.QUAQUAVAL, + SpeciesId.SPIDOPS, + SpeciesId.LOKIX, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.ARBOLIVA, + SpeciesId.GARGANACL, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.KLAWF, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.FLAMIGO, + SpeciesId.ANNIHILAPE, + SpeciesId.KINGAMBIT, + SpeciesId.SCREAM_TAIL, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_THORNS, + SpeciesId.GHOLDENGO, + SpeciesId.IRON_VALIANT, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.OGERPON, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_MAROWAK, [ - Species.LYCANROC, + SpeciesId.LYCANROC, "midnight", ], - Species.GALAR_MEOWTH, - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_SLOWKING, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.BLOODMOON_URSALUNA, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.GASTRO_ACID]: [ - Species.EKANS, - Species.ARBOK, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.SNORLAX, - Species.MEW, - Species.BELLOSSOM, - Species.SHUCKLE, - Species.GULPIN, - Species.SWALOT, - Species.SEVIPER, - Species.LILEEP, - Species.CRADILY, - Species.MUNCHLAX, - Species.CARNIVINE, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.FOONGUS, - Species.AMOONGUSS, - Species.JOLTIK, - Species.GALVANTULA, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.SHELMET, - Species.ACCELGOR, - Species.HEATMOR, - Species.DIGGERSBY, - Species.SWIRLIX, - Species.SLURPUFF, - Species.MAREANIE, - Species.TOXAPEX, - Species.PYUKUMUKU, - Species.GUZZLORD, - Species.POIPOLE, - Species.NAGANADEL, - Species.CHEWTLE, - Species.DREDNAW, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, + [MoveId.GASTRO_ACID]: [ + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.SNORLAX, + SpeciesId.MEW, + SpeciesId.BELLOSSOM, + SpeciesId.SHUCKLE, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.SEVIPER, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.MUNCHLAX, + SpeciesId.CARNIVINE, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.HEATMOR, + SpeciesId.DIGGERSBY, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.PYUKUMUKU, + SpeciesId.GUZZLORD, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, ], - [Moves.POWER_SWAP]: [ - Species.VULPIX, - Species.NINETALES, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.TANGELA, - Species.MR_MIME, - Species.MAGMAR, - Species.PORYGON, - Species.MEWTWO, - Species.MEW, - Species.NATU, - Species.XATU, - Species.ESPEON, - Species.GIRAFARIG, - Species.PORYGON2, - Species.MAGBY, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.GARDEVOIR, - Species.MEDITITE, - Species.SWABLU, - Species.ALTARIA, - Species.LUNATONE, - Species.SOLROCK, - Species.BALTOY, - Species.CLAYDOL, - Species.BRONZOR, - Species.BRONZONG, - Species.TANGROWTH, - Species.MAGMORTAR, - Species.PORYGON_Z, - Species.CRESSELIA, - Species.VICTINI, - Species.MUNNA, - Species.MUSHARNA, - Species.DARMANITAN, - Species.SIGILYPH, - Species.COFAGRIGUS, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.ACCELGOR, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.MAGEARNA, - Species.DOTTLER, - Species.ORBEETLE, - Species.HATTERENE, - Species.GRIMMSNARL, - Species.MR_RIME, - Species.RUNERIGUS, - Species.INDEEDEE, - Species.ZAMAZENTA, - Species.CALYREX, - Species.RABSCA, - Species.FARIGIRAF, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_EXEGGUTOR, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, + [MoveId.POWER_SWAP]: [ + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.TANGELA, + SpeciesId.MR_MIME, + SpeciesId.MAGMAR, + SpeciesId.PORYGON, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.ESPEON, + SpeciesId.GIRAFARIG, + SpeciesId.PORYGON2, + SpeciesId.MAGBY, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.GARDEVOIR, + SpeciesId.MEDITITE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.TANGROWTH, + SpeciesId.MAGMORTAR, + SpeciesId.PORYGON_Z, + SpeciesId.CRESSELIA, + SpeciesId.VICTINI, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.DARMANITAN, + SpeciesId.SIGILYPH, + SpeciesId.COFAGRIGUS, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.ACCELGOR, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.MAGEARNA, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.HATTERENE, + SpeciesId.GRIMMSNARL, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.INDEEDEE, + SpeciesId.ZAMAZENTA, + SpeciesId.CALYREX, + SpeciesId.RABSCA, + SpeciesId.FARIGIRAF, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, ], - [Moves.GUARD_SWAP]: [ - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.DROWZEE, - Species.MR_MIME, - Species.PORYGON, - Species.MEWTWO, - Species.MEW, - Species.NATU, - Species.XATU, - Species.WOOPER, - Species.QUAGSIRE, - Species.UMBREON, - Species.GIRAFARIG, - Species.SLUGMA, - Species.MAGCARGO, - Species.SKARMORY, - Species.PORYGON2, - Species.GARDEVOIR, - Species.MAWILE, - Species.MEDITITE, - Species.BALTOY, - Species.CLAYDOL, - Species.CASTFORM, - Species.BRONZOR, - Species.BRONZONG, - Species.PORYGON_Z, - Species.CRESSELIA, - Species.VICTINI, - Species.MUNNA, - Species.MUSHARNA, - Species.DARMANITAN, - Species.COFAGRIGUS, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.SHELMET, - Species.ACCELGOR, - Species.INKAY, - Species.MALAMAR, - Species.CARBINK, - Species.DIANCIE, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.MAGEARNA, - Species.DOTTLER, - Species.ORBEETLE, - Species.WOOLOO, - Species.DUBWOOL, - Species.HATTERENE, - Species.MR_RIME, - Species.RUNERIGUS, - Species.ZAMAZENTA, - Species.CALYREX, - Species.RABSCA, - Species.FARIGIRAF, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, + [MoveId.GUARD_SWAP]: [ + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.DROWZEE, + SpeciesId.MR_MIME, + SpeciesId.PORYGON, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.UMBREON, + SpeciesId.GIRAFARIG, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SKARMORY, + SpeciesId.PORYGON2, + SpeciesId.GARDEVOIR, + SpeciesId.MAWILE, + SpeciesId.MEDITITE, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.CASTFORM, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.PORYGON_Z, + SpeciesId.CRESSELIA, + SpeciesId.VICTINI, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.DARMANITAN, + SpeciesId.COFAGRIGUS, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.CARBINK, + SpeciesId.DIANCIE, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.MAGEARNA, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.WOOLOO, + SpeciesId.DUBWOOL, + SpeciesId.HATTERENE, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.ZAMAZENTA, + SpeciesId.CALYREX, + SpeciesId.RABSCA, + SpeciesId.FARIGIRAF, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, [ - Species.INDEEDEE, + SpeciesId.INDEEDEE, "female", ], ], - [Moves.WORRY_SEED]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.PSYDUCK, - Species.GOLDUCK, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.TANGELA, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.BELLOSSOM, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.SUNKERN, - Species.SUNFLORA, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.SHROOMISH, - Species.BRELOOM, - Species.ROSELIA, - Species.CACNEA, - Species.CACTURNE, - Species.LILEEP, - Species.CRADILY, - Species.TROPIUS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.BUDEW, - Species.ROSERADE, - Species.WORMADAM, - Species.CHERUBI, - Species.CHERRIM, - Species.CARNIVINE, - Species.SNOVER, - Species.ABOMASNOW, - Species.TANGROWTH, - Species.LEAFEON, - Species.SHAYMIN, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.PANSAGE, - Species.SIMISAGE, - Species.MUNNA, - Species.MUSHARNA, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.MARACTUS, - Species.DEERLING, - Species.SAWSBUCK, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FERROSEED, - Species.FERROTHORN, - Species.VIRIZION, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.TAPU_BULU, - Species.NIHILEGO, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.ALOLA_EXEGGUTOR, - Species.HISUI_LILLIGANT, - Species.HISUI_DECIDUEYE, - Species.ETERNAL_FLOETTE, + [MoveId.WORRY_SEED]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.TANGELA, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.BELLOSSOM, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.ROSELIA, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.TROPIUS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.WORMADAM, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.CARNIVINE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.TANGROWTH, + SpeciesId.LEAFEON, + SpeciesId.SHAYMIN, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.MARACTUS, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.VIRIZION, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.TAPU_BULU, + SpeciesId.NIHILEGO, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.ETERNAL_FLOETTE, ], - [Moves.TOXIC_SPIKES]: [ - Species.BEEDRILL, - Species.EKANS, - Species.ARBOK, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.VENONAT, - Species.VENOMOTH, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.HAUNTER, - Species.GENGAR, - Species.KOFFING, - Species.WEEZING, - Species.OMANYTE, - Species.OMASTAR, - Species.MEW, - Species.SPINARAK, - Species.ARIADOS, - Species.QUAGSIRE, - Species.PINECO, - Species.FORRETRESS, - Species.GLIGAR, - Species.QWILFISH, - Species.SHIFTRY, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.CACNEA, - Species.CACTURNE, - Species.ROSERADE, - Species.VESPIQUEN, - Species.STUNKY, - Species.SKUNTANK, - Species.SKORUPI, - Species.DRAPION, - Species.GLISCOR, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TRUBBISH, - Species.GARBODOR, - Species.SHELMET, - Species.ACCELGOR, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.SKRELP, - Species.DRAGALGE, - Species.MAREANIE, - Species.TOXAPEX, - Species.SALANDIT, - Species.SALAZZLE, - Species.NIHILEGO, - Species.POIPOLE, - Species.NAGANADEL, - Species.TOXTRICITY, - Species.RUNERIGUS, - Species.PINCURCHIN, - Species.ETERNATUS, - Species.SNEASLER, - Species.OVERQWIL, - Species.MEOWSCARADA, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.VAROOM, - Species.REVAVROOM, - Species.GLIMMET, - Species.GLIMMORA, - Species.CLODSIRE, - Species.IRON_MOTH, - Species.GALAR_WEEZING, - Species.GALAR_SLOWKING, - Species.GALAR_YAMASK, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.PALDEA_WOOPER, + [MoveId.TOXIC_SPIKES]: [ + SpeciesId.BEEDRILL, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.MEW, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.QUAGSIRE, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.GLIGAR, + SpeciesId.QWILFISH, + SpeciesId.SHIFTRY, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.ROSERADE, + SpeciesId.VESPIQUEN, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.GLISCOR, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.NIHILEGO, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.TOXTRICITY, + SpeciesId.RUNERIGUS, + SpeciesId.PINCURCHIN, + SpeciesId.ETERNATUS, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.MEOWSCARADA, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.CLODSIRE, + SpeciesId.IRON_MOTH, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_YAMASK, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.PALDEA_WOOPER, ], - [Moves.FLARE_BLITZ]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.VULPIX, - Species.NINETALES, - Species.GROWLITHE, - Species.ARCANINE, - Species.PONYTA, - Species.RAPIDASH, - Species.MAGMAR, - Species.FLAREON, - Species.MOLTRES, - Species.MEW, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.MAGCARGO, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.MAGBY, - Species.ENTEI, - Species.HO_OH, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SOLROCK, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.MAGMORTAR, - Species.HEATRAN, - Species.ARCEUS, - Species.VICTINI, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.PANSEAR, - Species.SIMISEAR, - Species.DARUMAKA, - Species.DARMANITAN, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.HEATMOR, - Species.LARVESTA, - Species.VOLCARONA, - Species.RESHIRAM, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.LITLEO, - Species.PYROAR, - Species.VOLCANION, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.SALANDIT, - Species.SALAZZLE, - Species.SOLGALEO, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.CARKOL, - Species.COALOSSAL, - Species.CENTISKORCH, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.CHARCADET, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.SLITHER_WING, - Species.IRON_MOTH, - Species.CHI_YU, - Species.KORAIDON, - Species.GOUGING_FIRE, - Species.TERAPAGOS, - Species.ALOLA_MAROWAK, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_TYPHLOSION, + [MoveId.FLARE_BLITZ]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.MAGMAR, + SpeciesId.FLAREON, + SpeciesId.MOLTRES, + SpeciesId.MEW, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.MAGCARGO, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.MAGBY, + SpeciesId.ENTEI, + SpeciesId.HO_OH, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SOLROCK, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.MAGMORTAR, + SpeciesId.HEATRAN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.HEATMOR, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.RESHIRAM, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.VOLCANION, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.SOLGALEO, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.CENTISKORCH, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.CHARCADET, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.SLITHER_WING, + SpeciesId.IRON_MOTH, + SpeciesId.CHI_YU, + SpeciesId.KORAIDON, + SpeciesId.GOUGING_FIRE, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_TYPHLOSION, [ - Species.PALDEA_TAUROS, + SpeciesId.PALDEA_TAUROS, "blaze", ], ], - [Moves.AURA_SPHERE]: [ - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.MEWTWO, - Species.MEW, - Species.RAIKOU, - Species.CELEBI, - Species.BLAZIKEN, - Species.GARDEVOIR, - Species.MEDICHAM, - Species.ZANGOOSE, - Species.LATIAS, - Species.LATIOS, - Species.JIRACHI, - Species.INFERNAPE, - Species.LOPUNNY, - Species.LUCARIO, - Species.TOGEKISS, - Species.GALLADE, - Species.DIALGA, - Species.PALKIA, - Species.GIRATINA, - Species.ARCEUS, - Species.MIENFOO, - Species.MIENSHAO, - Species.KELDEO, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.KOMMO_O, - Species.MAGEARNA, - Species.MARSHADOW, - Species.ZERAORA, - Species.URSHIFU, - Species.MEOWSCARADA, - Species.ARMAROUGE, - Species.PALAFIN, - Species.IRON_VALIANT, - Species.ARCHALUDON, - Species.TERAPAGOS, - Species.HISUI_DECIDUEYE, + [MoveId.AURA_SPHERE]: [ + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.RAIKOU, + SpeciesId.CELEBI, + SpeciesId.BLAZIKEN, + SpeciesId.GARDEVOIR, + SpeciesId.MEDICHAM, + SpeciesId.ZANGOOSE, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.JIRACHI, + SpeciesId.INFERNAPE, + SpeciesId.LOPUNNY, + SpeciesId.LUCARIO, + SpeciesId.TOGEKISS, + SpeciesId.GALLADE, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.GIRATINA, + SpeciesId.ARCEUS, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.KELDEO, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.KOMMO_O, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.ZERAORA, + SpeciesId.URSHIFU, + SpeciesId.MEOWSCARADA, + SpeciesId.ARMAROUGE, + SpeciesId.PALAFIN, + SpeciesId.IRON_VALIANT, + SpeciesId.ARCHALUDON, + SpeciesId.TERAPAGOS, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.ROCK_POLISH]: [ - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.ONIX, - Species.RHYHORN, - Species.RHYDON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.MEW, - Species.SUDOWOODO, - Species.FORRETRESS, - Species.GLIGAR, - Species.STEELIX, - Species.SHUCKLE, - Species.MAGCARGO, - Species.CORSOLA, - Species.DONPHAN, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.NOSEPASS, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.CAMERUPT, - Species.LUNATONE, - Species.SOLROCK, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.RELICANTH, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.GROUDON, - Species.TORTERRA, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.RHYPERIOR, - Species.GLISCOR, - Species.PROBOPASS, - Species.REGIGIGAS, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.DWEBBLE, - Species.CRUSTLE, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.GARBODOR, - Species.FERROSEED, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.DURANT, - Species.COBALION, - Species.TERRAKION, - Species.LANDORUS, - Species.GENESECT, - Species.BINACLE, - Species.BARBARACLE, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.CARBINK, - Species.BERGMITE, - Species.AVALUGG, - Species.DIANCIE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.SANDYGAST, - Species.PALOSSAND, - Species.MINIOR, - Species.KOMMO_O, - Species.NECROZMA, - Species.STAKATAKA, - Species.DREDNAW, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.STONJOURNER, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.GLIMMET, - Species.GLIMMORA, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, + [MoveId.ROCK_POLISH]: [ + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.ONIX, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.MEW, + SpeciesId.SUDOWOODO, + SpeciesId.FORRETRESS, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SHUCKLE, + SpeciesId.MAGCARGO, + SpeciesId.CORSOLA, + SpeciesId.DONPHAN, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.NOSEPASS, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.CAMERUPT, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.RELICANTH, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.GROUDON, + SpeciesId.TORTERRA, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.RHYPERIOR, + SpeciesId.GLISCOR, + SpeciesId.PROBOPASS, + SpeciesId.REGIGIGAS, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.GARBODOR, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.DURANT, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.LANDORUS, + SpeciesId.GENESECT, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.CARBINK, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.DIANCIE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.MINIOR, + SpeciesId.KOMMO_O, + SpeciesId.NECROZMA, + SpeciesId.STAKATAKA, + SpeciesId.DREDNAW, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.STONJOURNER, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, ], - [Moves.POISON_JAB]: [ - Species.BEEDRILL, - Species.EKANS, - Species.ARBOK, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.MANKEY, - Species.PRIMEAPE, - Species.POLIWRATH, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.RAPIDASH, - Species.FARFETCHD, - Species.GRIMER, - Species.MUK, - Species.CLOYSTER, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.HITMONLEE, - Species.RHYHORN, - Species.RHYDON, - Species.GOLDEEN, - Species.SEAKING, - Species.MEWTWO, - Species.MEW, - Species.SPINARAK, - Species.ARIADOS, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.QWILFISH, - Species.SNEASEL, - Species.DONPHAN, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.MAKUHITA, - Species.HARIYAMA, - Species.SABLEYE, - Species.MEDITITE, - Species.MEDICHAM, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.SHARPEDO, - Species.CACNEA, - Species.CACTURNE, - Species.ZANGOOSE, - Species.SEVIPER, - Species.DEOXYS, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.ROSERADE, - Species.STUNKY, - Species.SKUNTANK, - Species.GARCHOMP, - Species.RIOLU, - Species.LUCARIO, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.WEAVILE, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.GLISCOR, - Species.GALLADE, - Species.DARKRAI, - Species.ARCEUS, - Species.PIGNITE, - Species.EMBOAR, - Species.DRILBUR, - Species.EXCADRILL, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.MARACTUS, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.JOLTIK, - Species.GALVANTULA, - Species.FERROSEED, - Species.FERROTHORN, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CRYOGONAL, - Species.MIENFOO, - Species.MIENSHAO, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.VOLCARONA, - Species.COBALION, - Species.TERRAKION, - Species.KELDEO, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.PANGORO, - Species.BINACLE, - Species.BARBARACLE, - Species.HAWLUCHA, - Species.PHANTUMP, - Species.TREVENANT, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.MAREANIE, - Species.TOXAPEX, - Species.DEWPIDER, - Species.ARAQUANID, - Species.FOMANTIS, - Species.LURANTIS, - Species.SALANDIT, - Species.SALAZZLE, - Species.GOLISOPOD, - Species.TOGEDEMARU, - Species.KOMMO_O, - Species.NIHILEGO, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.GUZZLORD, - Species.MARSHADOW, - Species.POIPOLE, - Species.NAGANADEL, - Species.CHEWTLE, - Species.DREDNAW, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.TOXTRICITY, - Species.SIRFETCHD, - Species.FALINKS, - Species.PINCURCHIN, - Species.ZACIAN, - Species.ETERNATUS, - Species.URSHIFU, - Species.SNEASLER, - Species.OVERQWIL, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.CERULEDGE, - Species.SHROODLE, - Species.GRAFAIAI, - Species.VAROOM, - Species.REVAVROOM, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.IRON_VALIANT, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.IRON_BOULDER, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.GALAR_SLOWBRO, - Species.GALAR_FARFETCHD, - Species.GALAR_SLOWKING, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.HISUI_LILLIGANT, - Species.PALDEA_WOOPER, + [MoveId.POISON_JAB]: [ + SpeciesId.BEEDRILL, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.POLIWRATH, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.RAPIDASH, + SpeciesId.FARFETCHD, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.CLOYSTER, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.HITMONLEE, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.QWILFISH, + SpeciesId.SNEASEL, + SpeciesId.DONPHAN, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.SABLEYE, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.SHARPEDO, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.DEOXYS, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.ROSERADE, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.GARCHOMP, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.WEAVILE, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.GLISCOR, + SpeciesId.GALLADE, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.MARACTUS, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CRYOGONAL, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.VOLCARONA, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.KELDEO, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.PANGORO, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.HAWLUCHA, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.GOLISOPOD, + SpeciesId.TOGEDEMARU, + SpeciesId.KOMMO_O, + SpeciesId.NIHILEGO, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.GUZZLORD, + SpeciesId.MARSHADOW, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.TOXTRICITY, + SpeciesId.SIRFETCHD, + SpeciesId.FALINKS, + SpeciesId.PINCURCHIN, + SpeciesId.ZACIAN, + SpeciesId.ETERNATUS, + SpeciesId.URSHIFU, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.CERULEDGE, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.IRON_VALIANT, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.IRON_BOULDER, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_SLOWKING, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.PALDEA_WOOPER, ], - [Moves.DARK_PULSE]: [ - Species.BLASTOISE, - Species.EKANS, - Species.ARBOK, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.MEOWTH, - Species.PERSIAN, - Species.MUK, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.KOFFING, - Species.WEEZING, - Species.GYARADOS, - Species.MEWTWO, - Species.MEW, - Species.CROBAT, - Species.UMBREON, - Species.MURKROW, - Species.MISDREAVUS, - Species.GLIGAR, - Species.STEELIX, - Species.SNEASEL, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.NUZLEAF, - Species.SHIFTRY, - Species.SABLEYE, - Species.MAWILE, - Species.AGGRON, - Species.CARVANHA, - Species.SHARPEDO, - Species.CACNEA, - Species.CACTURNE, - Species.SEVIPER, - Species.CRAWDAUNT, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.ABSOL, - Species.GLALIE, - Species.DEOXYS, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.STUNKY, - Species.SKUNTANK, - Species.SPIRITOMB, - Species.LUCARIO, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.WEAVILE, - Species.GLISCOR, - Species.PORYGON_Z, - Species.DUSKNOIR, - Species.ROTOM, - Species.HEATRAN, - Species.GIRATINA, - Species.DARKRAI, - Species.ARCEUS, - Species.PURRLOIN, - Species.LIEPARD, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TRUBBISH, - Species.GARBODOR, - Species.ZORUA, - Species.ZOROARK, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.FRILLISH, - Species.JELLICENT, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.DRUDDIGON, - Species.PAWNIARD, - Species.BISHARP, - Species.VULLABY, - Species.MANDIBUZZ, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.TORNADUS, - Species.THUNDURUS, - Species.GENESECT, - Species.FROGADIER, - Species.GRENINJA, - Species.LITLEO, - Species.PYROAR, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.ESPURR, - Species.MEOWSTIC, - Species.INKAY, - Species.MALAMAR, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.NOIBAT, - Species.NOIVERN, - Species.YVELTAL, - Species.HOOPA, - Species.INCINEROAR, - Species.GOLISOPOD, - Species.MIMIKYU, - Species.GUZZLORD, - Species.NECROZMA, - Species.NAGANADEL, - Species.BLACEPHALON, - Species.INTELEON, - Species.THIEVUL, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.PERRSERKER, - Species.RUNERIGUS, - Species.MORPEKO, - Species.DURALUDON, - Species.ZARUDE, - Species.SPECTRIER, - Species.OVERQWIL, - Species.MEOWSCARADA, - Species.LOKIX, - Species.ARMAROUGE, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.BOMBIRDIER, - Species.KINGAMBIT, - Species.BRUTE_BONNET, - Species.FLUTTER_MANE, - Species.IRON_JUGULIS, - Species.WO_CHIEN, - Species.CHIEN_PAO, - Species.TING_LU, - Species.CHI_YU, - Species.ROARING_MOON, - Species.FEZANDIPITI, - Species.ARCHALUDON, - Species.TERAPAGOS, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_MAROWAK, - Species.MAROWAK, - Species.GALAR_MEOWTH, - Species.GALAR_WEEZING, - Species.GALAR_MOLTRES, - Species.GALAR_YAMASK, + [MoveId.DARK_PULSE]: [ + SpeciesId.BLASTOISE, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.MUK, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.GYARADOS, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CROBAT, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.MISDREAVUS, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNEASEL, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.AGGRON, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SEVIPER, + SpeciesId.CRAWDAUNT, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.ABSOL, + SpeciesId.GLALIE, + SpeciesId.DEOXYS, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.SPIRITOMB, + SpeciesId.LUCARIO, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.WEAVILE, + SpeciesId.GLISCOR, + SpeciesId.PORYGON_Z, + SpeciesId.DUSKNOIR, + SpeciesId.ROTOM, + SpeciesId.HEATRAN, + SpeciesId.GIRATINA, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.DRUDDIGON, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.GENESECT, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.YVELTAL, + SpeciesId.HOOPA, + SpeciesId.INCINEROAR, + SpeciesId.GOLISOPOD, + SpeciesId.MIMIKYU, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.NAGANADEL, + SpeciesId.BLACEPHALON, + SpeciesId.INTELEON, + SpeciesId.THIEVUL, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.PERRSERKER, + SpeciesId.RUNERIGUS, + SpeciesId.MORPEKO, + SpeciesId.DURALUDON, + SpeciesId.ZARUDE, + SpeciesId.SPECTRIER, + SpeciesId.OVERQWIL, + SpeciesId.MEOWSCARADA, + SpeciesId.LOKIX, + SpeciesId.ARMAROUGE, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.BOMBIRDIER, + SpeciesId.KINGAMBIT, + SpeciesId.BRUTE_BONNET, + SpeciesId.FLUTTER_MANE, + SpeciesId.IRON_JUGULIS, + SpeciesId.WO_CHIEN, + SpeciesId.CHIEN_PAO, + SpeciesId.TING_LU, + SpeciesId.CHI_YU, + SpeciesId.ROARING_MOON, + SpeciesId.FEZANDIPITI, + SpeciesId.ARCHALUDON, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.MAROWAK, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_YAMASK, [ - Species.URSHIFU, + SpeciesId.URSHIFU, "single-strike", ], [ - Species.CALYREX, + SpeciesId.CALYREX, "shadow", ], - Species.HISUI_QWILFISH, - Species.HISUI_SAMUROTT, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, ], - [Moves.AQUA_TAIL]: [ - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.EKANS, - Species.ARBOK, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.PSYDUCK, - Species.GOLDUCK, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.SEEL, - Species.DEWGONG, - Species.LICKITUNG, - Species.RHYHORN, - Species.RHYDON, - Species.KANGASKHAN, - Species.GOLDEEN, - Species.SEAKING, - Species.GYARADOS, - Species.LAPRAS, - Species.VAPOREON, - Species.KABUTOPS, - Species.AERODACTYL, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.LANTURN, - Species.MARILL, - Species.AZUMARILL, - Species.WOOPER, - Species.QUAGSIRE, - Species.SLOWKING, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.QWILFISH, - Species.MANTINE, - Species.TYRANITAR, - Species.LUGIA, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.AGGRON, - Species.SEVIPER, - Species.BARBOACH, - Species.WHISCASH, - Species.ARMALDO, - Species.MILOTIC, - Species.KECLEON, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.SALAMENCE, - Species.KYOGRE, - Species.RAYQUAZA, - Species.BIDOOF, - Species.BIBAREL, - Species.BUIZEL, - Species.FLOATZEL, - Species.GARCHOMP, - Species.SKORUPI, - Species.DRAPION, - Species.FINNEON, - Species.LUMINEON, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.GLACEON, - Species.GLISCOR, - Species.PALKIA, - Species.GIRATINA, - Species.ARCEUS, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.PANPOUR, - Species.SIMIPOUR, - Species.SCOLIPEDE, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.MINCCINO, - Species.CINCCINO, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.STUNFISK, - Species.DRUDDIGON, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.KELDEO, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.AMAURA, - Species.AURORUS, - Species.GOODRA, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.WISHIWASHI, - Species.BRUXISH, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.BASCULEGION, - Species.OVERQWIL, - Species.FINIZEN, - Species.PALAFIN, - Species.CYCLIZAR, - Species.DONDOZO, - Species.DUDUNSPARCE, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.HISUI_QWILFISH, - Species.HISUI_SAMUROTT, + [MoveId.AQUA_TAIL]: [ + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.LICKITUNG, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.KANGASKHAN, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.VAPOREON, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.LANTURN, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.QWILFISH, + SpeciesId.MANTINE, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.AGGRON, + SpeciesId.SEVIPER, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.ARMALDO, + SpeciesId.MILOTIC, + SpeciesId.KECLEON, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.SALAMENCE, + SpeciesId.KYOGRE, + SpeciesId.RAYQUAZA, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.GARCHOMP, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.PALKIA, + SpeciesId.GIRATINA, + SpeciesId.ARCEUS, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.SCOLIPEDE, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.STUNFISK, + SpeciesId.DRUDDIGON, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.KELDEO, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.GOODRA, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.WISHIWASHI, + SpeciesId.BRUXISH, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.BASCULEGION, + SpeciesId.OVERQWIL, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.CYCLIZAR, + SpeciesId.DONDOZO, + SpeciesId.DUDUNSPARCE, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SAMUROTT, ], - [Moves.SEED_BOMB]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.EKANS, - Species.ARBOK, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.MEOWTH, - Species.PERSIAN, - Species.MANKEY, - Species.PRIMEAPE, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.TANGELA, - Species.SNORLAX, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.SENTRET, - Species.FURRET, - Species.BELLOSSOM, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.PINECO, - Species.FORRETRESS, - Species.TEDDIURSA, - Species.URSARING, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.PHANPY, - Species.DONPHAN, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.ZIGZAGOON, - Species.LINOONE, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.PELIPPER, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.GRUMPIG, - Species.CACNEA, - Species.CACTURNE, - Species.ZANGOOSE, - Species.SEVIPER, - Species.LILEEP, - Species.CRADILY, - Species.TROPIUS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.BUDEW, - Species.ROSERADE, - Species.WORMADAM, - Species.PACHIRISU, - Species.CHERUBI, - Species.CHERRIM, - Species.AMBIPOM, - Species.MUNCHLAX, - Species.CARNIVINE, - Species.SNOVER, - Species.ABOMASNOW, - Species.TANGROWTH, - Species.LEAFEON, - Species.SHAYMIN, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.PATRAT, - Species.WATCHOG, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.MARACTUS, - Species.TRUBBISH, - Species.GARBODOR, - Species.MINCCINO, - Species.CINCCINO, - Species.DEERLING, - Species.SAWSBUCK, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FERROSEED, - Species.FERROTHORN, - Species.VIRIZION, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.DEDENNE, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.TOUCANNON, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.PASSIMIAN, - Species.KOMALA, - Species.TAPU_BULU, - Species.CELESTEELA, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SKWOVET, - Species.GREEDENT, - Species.ELDEGOSS, - Species.FLAPPLE, - Species.APPLETUN, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.MORPEKO, - Species.ZARUDE, - Species.CALYREX, - Species.URSALUNA, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.LECHONK, - Species.OINKOLOGNE, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.FLITTLE, - Species.ESPATHRA, - Species.ANNIHILAPE, - Species.BRUTE_BONNET, - Species.WO_CHIEN, - Species.DIPPLIN, - Species.OGERPON, - Species.HYDRAPPLE, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_EXEGGUTOR, - Species.ETERNAL_FLOETTE, - Species.GALAR_MEOWTH, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_LILLIGANT, - Species.HISUI_DECIDUEYE, - Species.BLOODMOON_URSALUNA, + [MoveId.SEED_BOMB]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.TANGELA, + SpeciesId.SNORLAX, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.BELLOSSOM, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.PELIPPER, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.GRUMPIG, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.TROPIUS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.WORMADAM, + SpeciesId.PACHIRISU, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.AMBIPOM, + SpeciesId.MUNCHLAX, + SpeciesId.CARNIVINE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.TANGROWTH, + SpeciesId.LEAFEON, + SpeciesId.SHAYMIN, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.MARACTUS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.VIRIZION, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.DEDENNE, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.TOUCANNON, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.PASSIMIAN, + SpeciesId.KOMALA, + SpeciesId.TAPU_BULU, + SpeciesId.CELESTEELA, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.ELDEGOSS, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.MORPEKO, + SpeciesId.ZARUDE, + SpeciesId.CALYREX, + SpeciesId.URSALUNA, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.ANNIHILAPE, + SpeciesId.BRUTE_BONNET, + SpeciesId.WO_CHIEN, + SpeciesId.DIPPLIN, + SpeciesId.OGERPON, + SpeciesId.HYDRAPPLE, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.AIR_SLASH]: [ - Species.CHARIZARD, - Species.BUTTERFREE, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.ZUBAT, - Species.GOLBAT, - Species.VENOMOTH, - Species.FARFETCHD, - Species.SCYTHER, - Species.ARTICUNO, - Species.MOLTRES, - Species.DRAGONITE, - Species.MEW, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.CROBAT, - Species.NATU, - Species.XATU, - Species.YANMA, - Species.MURKROW, - Species.DUNSPARCE, - Species.SCIZOR, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.SUICUNE, - Species.LUGIA, - Species.HO_OH, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.MASQUERAIN, - Species.NINJASK, - Species.VOLBEAT, - Species.ILLUMISE, - Species.VIBRAVA, - Species.FLYGON, - Species.TROPIUS, - Species.ABSOL, - Species.SALAMENCE, - Species.LATIAS, - Species.LATIOS, - Species.RAYQUAZA, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.MOTHIM, - Species.VESPIQUEN, - Species.DRIFBLIM, - Species.HONCHKROW, - Species.LUMINEON, - Species.MANTYKE, - Species.TOGEKISS, - Species.YANMEGA, - Species.GALLADE, - Species.ARCEUS, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.WOOBAT, - Species.SWOOBAT, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.SIGILYPH, - Species.ARCHEOPS, - Species.DUCKLETT, - Species.SWANNA, - Species.EMOLGA, - Species.PAWNIARD, - Species.BISHARP, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.VOLCARONA, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.KELDEO, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.AEGISLASH, - Species.NOIBAT, - Species.NOIVERN, - Species.YVELTAL, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.VIKAVOLT, - Species.ORICORIO, - Species.TYPE_NULL, - Species.SILVALLY, - Species.LUNALA, - Species.CELESTEELA, - Species.KARTANA, - Species.NAGANADEL, - Species.INTELEON, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.FLAPPLE, - Species.CRAMORANT, - Species.FROSMOTH, - Species.ZACIAN, - Species.KLEAVOR, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.SQUAWKABILLY, - Species.WATTREL, - Species.KILOWATTREL, - Species.BOMBIRDIER, - Species.FLAMIGO, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.ROARING_MOON, - Species.IRON_LEAVES, - Species.FEZANDIPITI, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.SHAYMIN, + [MoveId.AIR_SLASH]: [ + SpeciesId.CHARIZARD, + SpeciesId.BUTTERFREE, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.VENOMOTH, + SpeciesId.FARFETCHD, + SpeciesId.SCYTHER, + SpeciesId.ARTICUNO, + SpeciesId.MOLTRES, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.CROBAT, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.YANMA, + SpeciesId.MURKROW, + SpeciesId.DUNSPARCE, + SpeciesId.SCIZOR, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.SUICUNE, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.MASQUERAIN, + SpeciesId.NINJASK, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.TROPIUS, + SpeciesId.ABSOL, + SpeciesId.SALAMENCE, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.RAYQUAZA, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.DRIFBLIM, + SpeciesId.HONCHKROW, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.GALLADE, + SpeciesId.ARCEUS, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.SIGILYPH, + SpeciesId.ARCHEOPS, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.EMOLGA, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.VOLCARONA, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.KELDEO, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.AEGISLASH, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.YVELTAL, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.VIKAVOLT, + SpeciesId.ORICORIO, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.LUNALA, + SpeciesId.CELESTEELA, + SpeciesId.KARTANA, + SpeciesId.NAGANADEL, + SpeciesId.INTELEON, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.FLAPPLE, + SpeciesId.CRAMORANT, + SpeciesId.FROSMOTH, + SpeciesId.ZACIAN, + SpeciesId.KLEAVOR, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.SQUAWKABILLY, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.BOMBIRDIER, + SpeciesId.FLAMIGO, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.ROARING_MOON, + SpeciesId.IRON_LEAVES, + SpeciesId.FEZANDIPITI, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.SHAYMIN, [ - Species.ROTOM, + SpeciesId.ROTOM, "fan", ], - Species.GALAR_ARTICUNO, - Species.GALAR_MOLTRES, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, - Species.HISUI_BRAVIARY, - Species.HISUI_DECIDUEYE, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_MOLTRES, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.X_SCISSOR]: [ - Species.BEEDRILL, - Species.SANDSHREW, - Species.SANDSLASH, - Species.PARAS, - Species.PARASECT, - Species.KRABBY, - Species.KINGLER, - Species.SCYTHER, - Species.PINSIR, - Species.KABUTOPS, - Species.MEW, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.GLIGAR, - Species.SCIZOR, - Species.SNEASEL, - Species.SKARMORY, - Species.GROVYLE, - Species.SCEPTILE, - Species.SHIFTRY, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.SABLEYE, - Species.ZANGOOSE, - Species.SEVIPER, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.ANORITH, - Species.ARMALDO, - Species.ABSOL, - Species.KRICKETUNE, - Species.VESPIQUEN, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.WEAVILE, - Species.LEAFEON, - Species.GLISCOR, - Species.GALLADE, - Species.DARKRAI, - Species.ARCEUS, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.DRILBUR, - Species.EXCADRILL, - Species.LEAVANNY, - Species.SCOLIPEDE, - Species.DWEBBLE, - Species.CRUSTLE, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.JOLTIK, - Species.GALVANTULA, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.PAWNIARD, - Species.BISHARP, - Species.DURANT, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.KELDEO, - Species.GENESECT, - Species.PANGORO, - Species.BINACLE, - Species.BARBARACLE, - Species.HAWLUCHA, - Species.TREVENANT, - Species.NOIBAT, - Species.NOIVERN, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.DEWPIDER, - Species.ARAQUANID, - Species.FOMANTIS, - Species.LURANTIS, - Species.GOLISOPOD, - Species.TYPE_NULL, - Species.SILVALLY, - Species.MIMIKYU, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.KARTANA, - Species.NECROZMA, - Species.NAGANADEL, - Species.CENTISKORCH, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.KLEAVOR, - Species.SNEASLER, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.NYMBLE, - Species.LOKIX, - Species.CERULEDGE, - Species.GRAFAIAI, - Species.KLAWF, - Species.RELLOR, - Species.RABSCA, - Species.KINGAMBIT, - Species.ROARING_MOON, - Species.IRON_VALIANT, - Species.IRON_LEAVES, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.GALAR_MEOWTH, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, + [MoveId.X_SCISSOR]: [ + SpeciesId.BEEDRILL, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.SCYTHER, + SpeciesId.PINSIR, + SpeciesId.KABUTOPS, + SpeciesId.MEW, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.GLIGAR, + SpeciesId.SCIZOR, + SpeciesId.SNEASEL, + SpeciesId.SKARMORY, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.SHIFTRY, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.SABLEYE, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.ABSOL, + SpeciesId.KRICKETUNE, + SpeciesId.VESPIQUEN, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.WEAVILE, + SpeciesId.LEAFEON, + SpeciesId.GLISCOR, + SpeciesId.GALLADE, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.LEAVANNY, + SpeciesId.SCOLIPEDE, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.DURANT, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.KELDEO, + SpeciesId.GENESECT, + SpeciesId.PANGORO, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.HAWLUCHA, + SpeciesId.TREVENANT, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.GOLISOPOD, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.MIMIKYU, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.KARTANA, + SpeciesId.NECROZMA, + SpeciesId.NAGANADEL, + SpeciesId.CENTISKORCH, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.KLEAVOR, + SpeciesId.SNEASLER, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.CERULEDGE, + SpeciesId.GRAFAIAI, + SpeciesId.KLAWF, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.KINGAMBIT, + SpeciesId.ROARING_MOON, + SpeciesId.IRON_VALIANT, + SpeciesId.IRON_LEAVES, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.GALAR_MEOWTH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, ], - [Moves.BUG_BUZZ]: [ - Species.BUTTERFREE, - Species.VENONAT, - Species.VENOMOTH, - Species.SCYTHER, - Species.MEW, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.YANMA, - Species.PINECO, - Species.FORRETRESS, - Species.SCIZOR, - Species.HERACROSS, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.SURSKIT, - Species.MASQUERAIN, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.VOLBEAT, - Species.ILLUMISE, - Species.VIBRAVA, - Species.FLYGON, - Species.KRICKETUNE, - Species.WORMADAM, - Species.MOTHIM, - Species.COMBEE, - Species.VESPIQUEN, - Species.SKORUPI, - Species.DRAPION, - Species.YANMEGA, - Species.ARCEUS, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.JOLTIK, - Species.GALVANTULA, - Species.SHELMET, - Species.ACCELGOR, - Species.LARVESTA, - Species.VOLCARONA, - Species.GENESECT, - Species.VIVILLON, - Species.VIKAVOLT, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.DEWPIDER, - Species.ARAQUANID, - Species.WIMPOD, - Species.GOLISOPOD, - Species.PHEROMOSA, - Species.DOTTLER, - Species.ORBEETLE, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.SNOM, - Species.FROSMOTH, - Species.KLEAVOR, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.NYMBLE, - Species.LOKIX, - Species.RELLOR, - Species.RABSCA, - Species.SLITHER_WING, - Species.IRON_MOTH, - Species.TERAPAGOS, + [MoveId.BUG_BUZZ]: [ + SpeciesId.BUTTERFREE, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.SCYTHER, + SpeciesId.MEW, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.YANMA, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.SCIZOR, + SpeciesId.HERACROSS, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.KRICKETUNE, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.COMBEE, + SpeciesId.VESPIQUEN, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.YANMEGA, + SpeciesId.ARCEUS, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.GENESECT, + SpeciesId.VIVILLON, + SpeciesId.VIKAVOLT, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.PHEROMOSA, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.SNOM, + SpeciesId.FROSMOTH, + SpeciesId.KLEAVOR, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.SLITHER_WING, + SpeciesId.IRON_MOTH, + SpeciesId.TERAPAGOS, ], - [Moves.DRAGON_PULSE]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.ARCANINE, - Species.ONIX, - Species.RHYHORN, - Species.RHYDON, - Species.HORSEA, - Species.SEADRA, - Species.GYARADOS, - Species.LAPRAS, - Species.AERODACTYL, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEW, - Species.FERALIGATR, - Species.AMPHAROS, - Species.STEELIX, - Species.KINGDRA, - Species.TYRANITAR, - Species.LUGIA, - Species.SCEPTILE, - Species.AGGRON, - Species.VIBRAVA, - Species.FLYGON, - Species.SWABLU, - Species.ALTARIA, - Species.FEEBAS, - Species.MILOTIC, - Species.TROPIUS, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.LATIAS, - Species.LATIOS, - Species.GROUDON, - Species.RAYQUAZA, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.LUCARIO, - Species.RHYPERIOR, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.GIRATINA, - Species.ARCEUS, - Species.SERPERIOR, - Species.KROOKODILE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.ARCHEN, - Species.ARCHEOPS, - Species.EELEKTROSS, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.DRUDDIGON, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.RESHIRAM, - Species.ZEKROM, - Species.KYUREM, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.NOIBAT, - Species.NOIVERN, - Species.ZYGARDE, - Species.SALANDIT, - Species.SALAZZLE, - Species.TURTONATOR, - Species.DRAMPA, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.GUZZLORD, - Species.NECROZMA, - Species.POIPOLE, - Species.NAGANADEL, - Species.FLAPPLE, - Species.APPLETUN, - Species.RUNERIGUS, - Species.DRACOZOLT, - Species.DRACOVISH, - Species.DURALUDON, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ETERNATUS, - Species.REGIDRAGO, - Species.ARMAROUGE, - Species.CYCLIZAR, - Species.TATSUGIRI, - Species.IRON_JUGULIS, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.ROARING_MOON, - Species.KORAIDON, - Species.MIRAIDON, - Species.WALKING_WAKE, - Species.DIPPLIN, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.TERAPAGOS, - Species.ALOLA_EXEGGUTOR, - Species.HISUI_ARCANINE, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, + [MoveId.DRAGON_PULSE]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.ARCANINE, + SpeciesId.ONIX, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.AERODACTYL, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.FERALIGATR, + SpeciesId.AMPHAROS, + SpeciesId.STEELIX, + SpeciesId.KINGDRA, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.SCEPTILE, + SpeciesId.AGGRON, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.TROPIUS, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.LUCARIO, + SpeciesId.RHYPERIOR, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.GIRATINA, + SpeciesId.ARCEUS, + SpeciesId.SERPERIOR, + SpeciesId.KROOKODILE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.EELEKTROSS, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.DRUDDIGON, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.KYUREM, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.ZYGARDE, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.TURTONATOR, + SpeciesId.DRAMPA, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.RUNERIGUS, + SpeciesId.DRACOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.DURALUDON, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ETERNATUS, + SpeciesId.REGIDRAGO, + SpeciesId.ARMAROUGE, + SpeciesId.CYCLIZAR, + SpeciesId.TATSUGIRI, + SpeciesId.IRON_JUGULIS, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.DIPPLIN, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, ], - [Moves.POWER_GEM]: [ - Species.MEOWTH, - Species.PERSIAN, - Species.GOLDUCK, - Species.STARYU, - Species.STARMIE, - Species.MEWTWO, - Species.MEW, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.SUDOWOODO, - Species.ESPEON, - Species.SLOWKING, - Species.MISDREAVUS, - Species.SLUGMA, - Species.MAGCARGO, - Species.CORSOLA, - Species.TYRANITAR, - Species.NOSEPASS, - Species.SABLEYE, - Species.SPOINK, - Species.GRUMPIG, - Species.LUNATONE, - Species.VESPIQUEN, - Species.MISMAGIUS, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.GABITE, - Species.GARCHOMP, - Species.PROBOPASS, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.CRESSELIA, - Species.ARCEUS, - Species.BOLDORE, - Species.GIGALITH, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.CARBINK, - Species.DIANCIE, - Species.MINIOR, - Species.NIHILEGO, - Species.NECROZMA, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.CURSOLA, - Species.STONJOURNER, - Species.MEOWSCARADA, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.KLAWF, - Species.RABSCA, - Species.BOMBIRDIER, - Species.GLIMMET, - Species.GLIMMORA, - Species.FLUTTER_MANE, - Species.SANDY_SHOCKS, - Species.IRON_THORNS, - Species.GIMMIGHOUL, - Species.GHOLDENGO, - Species.MIRAIDON, - Species.TERAPAGOS, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.GALAR_SLOWBRO, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, + [MoveId.POWER_GEM]: [ + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.GOLDUCK, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.SUDOWOODO, + SpeciesId.ESPEON, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.CORSOLA, + SpeciesId.TYRANITAR, + SpeciesId.NOSEPASS, + SpeciesId.SABLEYE, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.LUNATONE, + SpeciesId.VESPIQUEN, + SpeciesId.MISMAGIUS, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.PROBOPASS, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.CRESSELIA, + SpeciesId.ARCEUS, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.CARBINK, + SpeciesId.DIANCIE, + SpeciesId.MINIOR, + SpeciesId.NIHILEGO, + SpeciesId.NECROZMA, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.CURSOLA, + SpeciesId.STONJOURNER, + SpeciesId.MEOWSCARADA, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.KLAWF, + SpeciesId.RABSCA, + SpeciesId.BOMBIRDIER, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.FLUTTER_MANE, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_THORNS, + SpeciesId.GIMMIGHOUL, + SpeciesId.GHOLDENGO, + SpeciesId.MIRAIDON, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, ], - [Moves.DRAIN_PUNCH]: [ - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.GLOOM, - Species.VILEPLUME, - Species.MANKEY, - Species.PRIMEAPE, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.SLOWBRO, - Species.GRIMER, - Species.MUK, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.HITMONCHAN, - Species.CHANSEY, - Species.KANGASKHAN, - Species.MR_MIME, - Species.JYNX, - Species.MEWTWO, - Species.MEW, - Species.LEDYBA, - Species.LEDIAN, - Species.TOGETIC, - Species.BELLOSSOM, - Species.SUDOWOODO, - Species.QUAGSIRE, - Species.SLOWKING, - Species.BLISSEY, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.LOMBRE, - Species.LUDICOLO, - Species.SHROOMISH, - Species.BRELOOM, - Species.VIGOROTH, - Species.SLAKING, - Species.MAKUHITA, - Species.HARIYAMA, - Species.SABLEYE, - Species.MEDITITE, - Species.MEDICHAM, - Species.GRUMPIG, - Species.SPINDA, - Species.CACNEA, - Species.CACTURNE, - Species.KECLEON, - Species.REGIROCK, - Species.JIRACHI, - Species.DEOXYS, - Species.MONFERNO, - Species.INFERNAPE, - Species.BUNEARY, - Species.LOPUNNY, - Species.MIME_JR, - Species.HAPPINY, - Species.RIOLU, - Species.LUCARIO, - Species.CROAGUNK, - Species.TOXICROAK, - Species.TOGEKISS, - Species.GALLADE, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.REGIGIGAS, - Species.DARKRAI, - Species.PIGNITE, - Species.EMBOAR, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.SEISMITOAD, - Species.MARACTUS, - Species.SCRAGGY, - Species.SCRAFTY, - Species.TRUBBISH, - Species.GARBODOR, - Species.REUNICLUS, - Species.EELEKTROSS, - Species.ACCELGOR, - Species.MIENFOO, - Species.MIENSHAO, - Species.GOLETT, - Species.GOLURK, - Species.HEATMOR, - Species.MELOETTA, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.PANCHAM, - Species.PANGORO, - Species.AROMATISSE, - Species.SLURPUFF, - Species.HAWLUCHA, - Species.TREVENANT, - Species.HOOPA, - Species.INCINEROAR, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.SHIINOTIC, - Species.BEWEAR, - Species.PASSIMIAN, - Species.MIMIKYU, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.BUZZWOLE, - Species.GUZZLORD, - Species.MARSHADOW, - Species.ZERAORA, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.TOXTRICITY, - Species.GRAPPLOCT, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.MR_RIME, - Species.ALCREMIE, - Species.INDEEDEE, - Species.URSHIFU, - Species.ZARUDE, - Species.URSALUNA, - Species.PALAFIN, - Species.ANNIHILAPE, - Species.SCREAM_TAIL, - Species.IRON_HANDS, - Species.IRON_VALIANT, - Species.KORAIDON, - Species.OKIDOGI, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_SLOWKING, + [MoveId.DRAIN_PUNCH]: [ + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.SLOWBRO, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.HITMONCHAN, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.TOGETIC, + SpeciesId.BELLOSSOM, + SpeciesId.SUDOWOODO, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.BLISSEY, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.SABLEYE, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.KECLEON, + SpeciesId.REGIROCK, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.TOGEKISS, + SpeciesId.GALLADE, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.REGIGIGAS, + SpeciesId.DARKRAI, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.SEISMITOAD, + SpeciesId.MARACTUS, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.REUNICLUS, + SpeciesId.EELEKTROSS, + SpeciesId.ACCELGOR, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.HEATMOR, + SpeciesId.MELOETTA, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.AROMATISSE, + SpeciesId.SLURPUFF, + SpeciesId.HAWLUCHA, + SpeciesId.TREVENANT, + SpeciesId.HOOPA, + SpeciesId.INCINEROAR, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.SHIINOTIC, + SpeciesId.BEWEAR, + SpeciesId.PASSIMIAN, + SpeciesId.MIMIKYU, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.BUZZWOLE, + SpeciesId.GUZZLORD, + SpeciesId.MARSHADOW, + SpeciesId.ZERAORA, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.TOXTRICITY, + SpeciesId.GRAPPLOCT, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.MR_RIME, + SpeciesId.ALCREMIE, + SpeciesId.INDEEDEE, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.URSALUNA, + SpeciesId.PALAFIN, + SpeciesId.ANNIHILAPE, + SpeciesId.SCREAM_TAIL, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_VALIANT, + SpeciesId.KORAIDON, + SpeciesId.OKIDOGI, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_SLOWKING, ], - [Moves.VACUUM_WAVE]: [ - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.POLIWRATH, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.SCYTHER, - Species.MEW, - Species.SCIZOR, - Species.HERACROSS, - Species.TYROGUE, - Species.HITMONTOP, - Species.GROVYLE, - Species.SCEPTILE, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.SHIFTRY, - Species.GARDEVOIR, - Species.BRELOOM, - Species.MAKUHITA, - Species.HARIYAMA, - Species.MEDITITE, - Species.MEDICHAM, - Species.FLYGON, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.EMPOLEON, - Species.RIOLU, - Species.LUCARIO, - Species.CROAGUNK, - Species.TOXICROAK, - Species.GALLADE, - Species.DEWOTT, - Species.SAMUROTT, - Species.MIENSHAO, - Species.COBALION, - Species.VIRIZION, - Species.KELDEO, - Species.PASSIMIAN, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.KARTANA, - Species.INTELEON, - Species.KLEAVOR, - Species.URSALUNA, - Species.SNEASLER, - Species.CERULEDGE, - Species.ANNIHILAPE, - Species.IRON_VALIANT, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, - Species.HISUI_BRAVIARY, - Species.BLOODMOON_URSALUNA, + [MoveId.VACUUM_WAVE]: [ + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.POLIWRATH, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.SCYTHER, + SpeciesId.MEW, + SpeciesId.SCIZOR, + SpeciesId.HERACROSS, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.SHIFTRY, + SpeciesId.GARDEVOIR, + SpeciesId.BRELOOM, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.FLYGON, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.EMPOLEON, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.GALLADE, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.MIENSHAO, + SpeciesId.COBALION, + SpeciesId.VIRIZION, + SpeciesId.KELDEO, + SpeciesId.PASSIMIAN, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.KARTANA, + SpeciesId.INTELEON, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.SNEASLER, + SpeciesId.CERULEDGE, + SpeciesId.ANNIHILAPE, + SpeciesId.IRON_VALIANT, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.FOCUS_BLAST]: [ - Species.CHARMANDER, - Species.CHARIZARD, - Species.BLASTOISE, - Species.RAICHU, - Species.SANDSLASH, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.CLEFABLE, - Species.WIGGLYTUFF, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.POLIWRATH, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.GRAVELER, - Species.GOLEM, - Species.SLOWBRO, - Species.MUK, - Species.HAUNTER, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.MR_MIME, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.SNORLAX, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.TYPHLOSION, - Species.FERALIGATR, - Species.FURRET, - Species.LEDIAN, - Species.AMPHAROS, - Species.AZUMARILL, - Species.POLITOED, - Species.QUAGSIRE, - Species.SLOWKING, - Species.GRANBULL, - Species.HERACROSS, - Species.URSARING, - Species.HITMONTOP, - Species.MILTANK, - Species.BLISSEY, - Species.TYRANITAR, - Species.SCEPTILE, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.SWAMPERT, - Species.LUDICOLO, - Species.SHIFTRY, - Species.GARDEVOIR, - Species.BRELOOM, - Species.VIGOROTH, - Species.SLAKING, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.MAWILE, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.GRUMPIG, - Species.CACTURNE, - Species.ZANGOOSE, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.GROUDON, - Species.RAYQUAZA, - Species.DEOXYS, - Species.MONFERNO, - Species.INFERNAPE, - Species.RAMPARDOS, - Species.FLOATZEL, - Species.LOPUNNY, - Species.RIOLU, - Species.LUCARIO, - Species.CROAGUNK, - Species.TOXICROAK, - Species.ABOMASNOW, - Species.WEAVILE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.GALLADE, - Species.DUSKNOIR, - Species.DIALGA, - Species.PALKIA, - Species.REGIGIGAS, - Species.DARKRAI, - Species.ARCEUS, - Species.VICTINI, - Species.PIGNITE, - Species.EMBOAR, - Species.WATCHOG, - Species.SIMISAGE, - Species.SIMISEAR, - Species.SIMIPOUR, - Species.EXCADRILL, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.KROOKODILE, - Species.DARMANITAN, - Species.SCRAGGY, - Species.SCRAFTY, - Species.CARRACOSTA, - Species.ARCHEOPS, - Species.GARBODOR, - Species.ZOROARK, - Species.CINCCINO, - Species.GOTHITELLE, - Species.REUNICLUS, - Species.ESCAVALIER, - Species.HAXORUS, - Species.BEARTIC, - Species.ACCELGOR, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.BISHARP, - Species.HEATMOR, - Species.HYDREIGON, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.KELDEO, - Species.MELOETTA, - Species.CHESNAUGHT, - Species.DELPHOX, - Species.PANGORO, - Species.BARBARACLE, - Species.DRAGALGE, - Species.CLAWITZER, - Species.HELIOLISK, - Species.HAWLUCHA, - Species.GOODRA, - Species.TREVENANT, - Species.GOURGEIST, - Species.NOIVERN, - Species.XERNEAS, - Species.YVELTAL, - Species.ZYGARDE, - Species.HOOPA, - Species.VOLCANION, - Species.INCINEROAR, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.MUDSDALE, - Species.STUFFUL, - Species.BEWEAR, - Species.ORANGURU, - Species.PASSIMIAN, - Species.GOLISOPOD, - Species.TURTONATOR, - Species.DRAMPA, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.SOLGALEO, - Species.LUNALA, - Species.PHEROMOSA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.ZERAORA, - Species.RILLABOOM, - Species.CINDERACE, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.GRIMMSNARL, - Species.MR_RIME, - Species.FALINKS, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.URSHIFU, - Species.SNEASLER, - Species.ENAMORUS, - Species.PAWMOT, - Species.ARMAROUGE, - Species.PALAFIN, - Species.ANNIHILAPE, - Species.KINGAMBIT, - Species.SCREAM_TAIL, - Species.IRON_HANDS, - Species.IRON_JUGULIS, - Species.IRON_THORNS, - Species.GHOLDENGO, - Species.IRON_VALIANT, - Species.KORAIDON, - Species.IRON_LEAVES, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.IRON_CROWN, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSLASH, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_MUK, - Species.ALOLA_MAROWAK, - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_SLOWKING, - Species.GALAR_DARMANITAN, - Species.HISUI_TYPHLOSION, - Species.HISUI_SNEASEL, - Species.HISUI_ZOROARK, - Species.HISUI_DECIDUEYE, - Species.BLOODMOON_URSALUNA, + [MoveId.FOCUS_BLAST]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARIZARD, + SpeciesId.BLASTOISE, + SpeciesId.RAICHU, + SpeciesId.SANDSLASH, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.CLEFABLE, + SpeciesId.WIGGLYTUFF, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.POLIWRATH, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.SLOWBRO, + SpeciesId.MUK, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.SNORLAX, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.TYPHLOSION, + SpeciesId.FERALIGATR, + SpeciesId.FURRET, + SpeciesId.LEDIAN, + SpeciesId.AMPHAROS, + SpeciesId.AZUMARILL, + SpeciesId.POLITOED, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.GRANBULL, + SpeciesId.HERACROSS, + SpeciesId.URSARING, + SpeciesId.HITMONTOP, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.TYRANITAR, + SpeciesId.SCEPTILE, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.SWAMPERT, + SpeciesId.LUDICOLO, + SpeciesId.SHIFTRY, + SpeciesId.GARDEVOIR, + SpeciesId.BRELOOM, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.MAWILE, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.GRUMPIG, + SpeciesId.CACTURNE, + SpeciesId.ZANGOOSE, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.DEOXYS, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.RAMPARDOS, + SpeciesId.FLOATZEL, + SpeciesId.LOPUNNY, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.REGIGIGAS, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.WATCHOG, + SpeciesId.SIMISAGE, + SpeciesId.SIMISEAR, + SpeciesId.SIMIPOUR, + SpeciesId.EXCADRILL, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.KROOKODILE, + SpeciesId.DARMANITAN, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEOPS, + SpeciesId.GARBODOR, + SpeciesId.ZOROARK, + SpeciesId.CINCCINO, + SpeciesId.GOTHITELLE, + SpeciesId.REUNICLUS, + SpeciesId.ESCAVALIER, + SpeciesId.HAXORUS, + SpeciesId.BEARTIC, + SpeciesId.ACCELGOR, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.BISHARP, + SpeciesId.HEATMOR, + SpeciesId.HYDREIGON, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.CHESNAUGHT, + SpeciesId.DELPHOX, + SpeciesId.PANGORO, + SpeciesId.BARBARACLE, + SpeciesId.DRAGALGE, + SpeciesId.CLAWITZER, + SpeciesId.HELIOLISK, + SpeciesId.HAWLUCHA, + SpeciesId.GOODRA, + SpeciesId.TREVENANT, + SpeciesId.GOURGEIST, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.ZYGARDE, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.INCINEROAR, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.MUDSDALE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.GOLISOPOD, + SpeciesId.TURTONATOR, + SpeciesId.DRAMPA, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.PHEROMOSA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.ZERAORA, + SpeciesId.RILLABOOM, + SpeciesId.CINDERACE, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.GRIMMSNARL, + SpeciesId.MR_RIME, + SpeciesId.FALINKS, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.URSHIFU, + SpeciesId.SNEASLER, + SpeciesId.ENAMORUS, + SpeciesId.PAWMOT, + SpeciesId.ARMAROUGE, + SpeciesId.PALAFIN, + SpeciesId.ANNIHILAPE, + SpeciesId.KINGAMBIT, + SpeciesId.SCREAM_TAIL, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_THORNS, + SpeciesId.GHOLDENGO, + SpeciesId.IRON_VALIANT, + SpeciesId.KORAIDON, + SpeciesId.IRON_LEAVES, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.IRON_CROWN, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.ENERGY_BALL]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.BUTTERFREE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.TANGELA, - Species.MR_MIME, - Species.JYNX, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.BELLOSSOM, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.SUNKERN, - Species.SUNFLORA, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.OCTILLERY, - Species.STANTLER, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.GARDEVOIR, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.SABLEYE, - Species.MEDICHAM, - Species.ROSELIA, - Species.GRUMPIG, - Species.CACNEA, - Species.CACTURNE, - Species.LILEEP, - Species.CRADILY, - Species.CASTFORM, - Species.TROPIUS, - Species.CHIMECHO, - Species.LATIAS, - Species.LATIOS, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.BUDEW, - Species.ROSERADE, + [MoveId.ENERGY_BALL]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.BUTTERFREE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.TANGELA, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.BELLOSSOM, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.OCTILLERY, + SpeciesId.STANTLER, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.GARDEVOIR, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SABLEYE, + SpeciesId.MEDICHAM, + SpeciesId.ROSELIA, + SpeciesId.GRUMPIG, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.CASTFORM, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, [ - Species.WORMADAM, + SpeciesId.WORMADAM, "plant", ], - Species.MOTHIM, - Species.CHERUBI, - Species.CHERRIM, - Species.MISMAGIUS, - Species.CHINGLING, - Species.CARNIVINE, - Species.SNOVER, - Species.ABOMASNOW, - Species.TANGROWTH, - Species.LEAFEON, - Species.GALLADE, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.GIRATINA, - Species.CRESSELIA, - Species.MANAPHY, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.PANSAGE, - Species.SIMISAGE, - Species.MUNNA, - Species.MUSHARNA, - Species.WOOBAT, - Species.SWOOBAT, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.MARACTUS, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FRILLISH, - Species.JELLICENT, - Species.JOLTIK, - Species.GALVANTULA, - Species.FERROSEED, - Species.FERROTHORN, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.SHELMET, - Species.ACCELGOR, - Species.DURANT, - Species.VIRIZION, - Species.MELOETTA, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.VIVILLON, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.ESPURR, - Species.MEOWSTIC, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.HOOPA, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.PRIMARINA, - Species.VIKAVOLT, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.PASSIMIAN, - Species.SANDYGAST, - Species.PALOSSAND, - Species.DRAMPA, - Species.DHELMISE, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.XURKITREE, - Species.CELESTEELA, - Species.MAGEARNA, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.DOTTLER, - Species.ORBEETLE, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.FLAPPLE, - Species.APPLETUN, - Species.MR_RIME, - Species.RUNERIGUS, - Species.ALCREMIE, - Species.INDEEDEE, - Species.ZARUDE, - Species.CALYREX, - Species.WYRDEER, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.OINKOLOGNE, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.ARMAROUGE, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.RABSCA, - Species.ESPATHRA, - Species.GLIMMORA, - Species.FARIGIRAF, - Species.BRUTE_BONNET, - Species.FLUTTER_MANE, - Species.IRON_MOTH, - Species.WO_CHIEN, - Species.IRON_VALIANT, - Species.IRON_LEAVES, - Species.DIPPLIN, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.OGERPON, - Species.HYDRAPPLE, - Species.TERAPAGOS, - Species.ALOLA_EXEGGUTOR, - Species.ETERNAL_FLOETTE, - Species.GALAR_MR_MIME, - Species.GALAR_YAMASK, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_LILLIGANT, - Species.HISUI_DECIDUEYE, + SpeciesId.MOTHIM, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.MISMAGIUS, + SpeciesId.CHINGLING, + SpeciesId.CARNIVINE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.TANGROWTH, + SpeciesId.LEAFEON, + SpeciesId.GALLADE, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.MANAPHY, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.MARACTUS, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.DURANT, + SpeciesId.VIRIZION, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.VIVILLON, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.HOOPA, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.PRIMARINA, + SpeciesId.VIKAVOLT, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.XURKITREE, + SpeciesId.CELESTEELA, + SpeciesId.MAGEARNA, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.ALCREMIE, + SpeciesId.INDEEDEE, + SpeciesId.ZARUDE, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.OINKOLOGNE, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.ARMAROUGE, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.RABSCA, + SpeciesId.ESPATHRA, + SpeciesId.GLIMMORA, + SpeciesId.FARIGIRAF, + SpeciesId.BRUTE_BONNET, + SpeciesId.FLUTTER_MANE, + SpeciesId.IRON_MOTH, + SpeciesId.WO_CHIEN, + SpeciesId.IRON_VALIANT, + SpeciesId.IRON_LEAVES, + SpeciesId.DIPPLIN, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.OGERPON, + SpeciesId.HYDRAPPLE, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_YAMASK, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.BRAVE_BIRD]: [ - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.ZUBAT, - Species.GOLBAT, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.MEW, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.CROBAT, - Species.MURKROW, - Species.DELIBIRD, - Species.SKARMORY, - Species.LUGIA, - Species.HO_OH, - Species.BLAZIKEN, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.SWABLU, - Species.ALTARIA, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.HONCHKROW, - Species.UNFEZANT, - Species.DUCKLETT, - Species.SWANNA, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.HAWLUCHA, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.TAPU_KOKO, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.CRAMORANT, - Species.SIRFETCHD, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.SQUAWKABILLY, - Species.WATTREL, - Species.KILOWATTREL, - Species.ESPATHRA, - Species.BOMBIRDIER, - Species.FLAMIGO, - Species.FEZANDIPITI, - Species.GALAR_FARFETCHD, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.HISUI_BRAVIARY, - Species.HISUI_DECIDUEYE, + [MoveId.BRAVE_BIRD]: [ + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.MEW, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.CROBAT, + SpeciesId.MURKROW, + SpeciesId.DELIBIRD, + SpeciesId.SKARMORY, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.BLAZIKEN, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.HONCHKROW, + SpeciesId.UNFEZANT, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.HAWLUCHA, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.TAPU_KOKO, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.CRAMORANT, + SpeciesId.SIRFETCHD, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.SQUAWKABILLY, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.ESPATHRA, + SpeciesId.BOMBIRDIER, + SpeciesId.FLAMIGO, + SpeciesId.FEZANDIPITI, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.EARTH_POWER]: [ - Species.VENUSAUR, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.DIGLETT, - Species.DUGTRIO, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.ONIX, - Species.CUBONE, - Species.MAROWAK, - Species.RHYHORN, - Species.RHYDON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.MEWTWO, - Species.MEW, - Species.SUDOWOODO, - Species.POLITOED, - Species.SUNKERN, - Species.SUNFLORA, - Species.WOOPER, - Species.QUAGSIRE, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SHUCKLE, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.PHANPY, - Species.DONPHAN, - Species.STANTLER, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.NOSEPASS, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.GRUMPIG, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.RELICANTH, - Species.REGIROCK, - Species.GROUDON, - Species.RAYQUAZA, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.SHELLOS, - Species.GASTRODON, - Species.BONSLY, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.ABOMASNOW, - Species.RHYPERIOR, - Species.GLISCOR, - Species.MAMOSWINE, - Species.PROBOPASS, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.SHAYMIN, - Species.ARCEUS, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.DRILBUR, - Species.EXCADRILL, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.STUNFISK, - Species.GOLETT, - Species.GOLURK, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.TERRAKION, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.DIGGERSBY, - Species.BARBARACLE, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.CARBINK, - Species.ZYGARDE, - Species.DIANCIE, - Species.VOLCANION, - Species.ROCKRUFF, - Species.LYCANROC, - Species.MUDBRAY, - Species.MUDSDALE, - Species.SANDYGAST, - Species.PALOSSAND, - Species.MINIOR, - Species.NECROZMA, - Species.RILLABOOM, - Species.DREDNAW, - Species.COALOSSAL, - Species.SILICOBRA, - Species.SANDACONDA, - Species.CURSOLA, - Species.RUNERIGUS, - Species.STONJOURNER, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.DRACOVISH, - Species.REGIDRAGO, - Species.WYRDEER, - Species.URSALUNA, - Species.ENAMORUS, - Species.SKELEDIRGE, - Species.OINKOLOGNE, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.KLAWF, - Species.RABSCA, - Species.WIGLETT, - Species.WUGTRIO, - Species.ORTHWORM, - Species.GLIMMORA, - Species.CLODSIRE, - Species.DUDUNSPARCE, - Species.GREAT_TUSK, - Species.BRUTE_BONNET, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_JUGULIS, - Species.IRON_THORNS, - Species.TING_LU, - Species.HYDRAPPLE, - Species.TERAPAGOS, + [MoveId.EARTH_POWER]: [ + SpeciesId.VENUSAUR, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.ONIX, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SHUCKLE, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.STANTLER, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.NOSEPASS, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.GRUMPIG, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.RELICANTH, + SpeciesId.REGIROCK, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.BONSLY, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.ABOMASNOW, + SpeciesId.RHYPERIOR, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.PROBOPASS, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.STUNFISK, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.TERRAKION, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.DIGGERSBY, + SpeciesId.BARBARACLE, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.CARBINK, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.VOLCANION, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.MINIOR, + SpeciesId.NECROZMA, + SpeciesId.RILLABOOM, + SpeciesId.DREDNAW, + SpeciesId.COALOSSAL, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.CURSOLA, + SpeciesId.RUNERIGUS, + SpeciesId.STONJOURNER, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.REGIDRAGO, + SpeciesId.WYRDEER, + SpeciesId.URSALUNA, + SpeciesId.ENAMORUS, + SpeciesId.SKELEDIRGE, + SpeciesId.OINKOLOGNE, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.KLAWF, + SpeciesId.RABSCA, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.ORTHWORM, + SpeciesId.GLIMMORA, + SpeciesId.CLODSIRE, + SpeciesId.DUDUNSPARCE, + SpeciesId.GREAT_TUSK, + SpeciesId.BRUTE_BONNET, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_THORNS, + SpeciesId.TING_LU, + SpeciesId.HYDRAPPLE, + SpeciesId.TERAPAGOS, [ - Species.WORMADAM, + SpeciesId.WORMADAM, "sandy", ], - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_MAROWAK, - Species.GALAR_CORSOLA, - Species.GALAR_YAMASK, - Species.GALAR_STUNFISK, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_YAMASK, + SpeciesId.GALAR_STUNFISK, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.GIGA_IMPACT]: [ - Species.VENUSAUR, - Species.CHARIZARD, - Species.BLASTOISE, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEOT, - Species.RATICATE, - Species.FEAROW, - Species.ARBOK, - Species.RAICHU, - Species.SANDSLASH, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.CLEFABLE, - Species.NINETALES, - Species.WIGGLYTUFF, - Species.GOLBAT, - Species.VILEPLUME, - Species.PARASECT, - Species.VENOMOTH, - Species.DUGTRIO, - Species.PERSIAN, - Species.GOLDUCK, - Species.PRIMEAPE, - Species.ARCANINE, - Species.POLIWRATH, - Species.ALAKAZAM, - Species.MACHAMP, - Species.VICTREEBEL, - Species.TENTACRUEL, - Species.GOLEM, - Species.RAPIDASH, - Species.SLOWBRO, - Species.MAGNETON, - Species.DODRIO, - Species.DEWGONG, - Species.MUK, - Species.CLOYSTER, - Species.GENGAR, - Species.HYPNO, - Species.KINGLER, - Species.ELECTRODE, - Species.EXEGGUTOR, - Species.MAROWAK, - Species.LICKITUNG, - Species.WEEZING, - Species.RHYDON, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.SEADRA, - Species.SEAKING, - Species.STARMIE, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.PORYGON, - Species.OMASTAR, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.MEGANIUM, - Species.TYPHLOSION, - Species.FERALIGATR, - Species.FURRET, - Species.NOCTOWL, - Species.LEDIAN, - Species.ARIADOS, - Species.CROBAT, - Species.LANTURN, - Species.TOGETIC, - Species.XATU, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.JUMPLUFF, - Species.SUNFLORA, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.STEELIX, - Species.GRANBULL, - Species.QWILFISH, - Species.SCIZOR, - Species.HERACROSS, - Species.SNEASEL, - Species.URSARING, - Species.MAGCARGO, - Species.PILOSWINE, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.HOUNDOOM, - Species.KINGDRA, - Species.DONPHAN, - Species.PORYGON2, - Species.STANTLER, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.SCEPTILE, - Species.BLAZIKEN, - Species.SWAMPERT, - Species.MIGHTYENA, - Species.LINOONE, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.LUDICOLO, - Species.SHIFTRY, - Species.SWELLOW, - Species.PELIPPER, - Species.GARDEVOIR, - Species.MASQUERAIN, - Species.BRELOOM, - Species.SLAKING, - Species.NINJASK, - Species.SHEDINJA, - Species.EXPLOUD, - Species.HARIYAMA, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.AGGRON, - Species.MEDICHAM, - Species.MANECTRIC, - Species.SWALOT, - Species.SHARPEDO, - Species.WAILORD, - Species.CAMERUPT, - Species.TORKOAL, - Species.GRUMPIG, - Species.FLYGON, - Species.CACTURNE, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.LUNATONE, - Species.SOLROCK, - Species.WHISCASH, - Species.CRAWDAUNT, - Species.CLAYDOL, - Species.CRADILY, - Species.ARMALDO, - Species.MILOTIC, - Species.BANETTE, - Species.DUSCLOPS, - Species.TROPIUS, - Species.ABSOL, - Species.GLALIE, - Species.WALREIN, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.TORTERRA, - Species.INFERNAPE, - Species.EMPOLEON, - Species.STARAPTOR, - Species.BIBAREL, - Species.KRICKETUNE, - Species.LUXRAY, - Species.ROSERADE, - Species.RAMPARDOS, - Species.BASTIODON, - Species.WORMADAM, - Species.MOTHIM, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.FLOATZEL, - Species.CHERRIM, - Species.GASTRODON, - Species.AMBIPOM, - Species.DRIFBLIM, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.PURUGLY, - Species.SKUNTANK, - Species.BRONZONG, - Species.SPIRITOMB, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.LUCARIO, - Species.HIPPOWDON, - Species.DRAPION, - Species.TOXICROAK, - Species.CARNIVINE, - Species.LUMINEON, - Species.ABOMASNOW, - Species.WEAVILE, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.YANMEGA, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.PORYGON_Z, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.MANAPHY, - Species.DARKRAI, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.SERPERIOR, - Species.EMBOAR, - Species.SAMUROTT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.LIEPARD, - Species.SIMISAGE, - Species.SIMISEAR, - Species.SIMIPOUR, - Species.MUSHARNA, - Species.UNFEZANT, - Species.ZEBSTRIKA, - Species.GIGALITH, - Species.SWOOBAT, - Species.EXCADRILL, - Species.AUDINO, - Species.CONKELDURR, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.LEAVANNY, - Species.SCOLIPEDE, - Species.WHIMSICOTT, - Species.LILLIGANT, - Species.KROOKODILE, - Species.DARMANITAN, - Species.CRUSTLE, - Species.SCRAFTY, - Species.SIGILYPH, - Species.COFAGRIGUS, - Species.CARRACOSTA, - Species.ARCHEOPS, - Species.GARBODOR, - Species.ZOROARK, - Species.CINCCINO, - Species.GOTHITELLE, - Species.REUNICLUS, - Species.SWANNA, - Species.VANILLUXE, - Species.SAWSBUCK, - Species.ESCAVALIER, - Species.AMOONGUSS, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.GALVANTULA, - Species.FERROTHORN, - Species.KLINKLANG, - Species.EELEKTROSS, - Species.BEHEEYEM, - Species.CHANDELURE, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.BEARTIC, - Species.CRYOGONAL, - Species.ACCELGOR, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLURK, - Species.BISHARP, - Species.BOUFFALANT, - Species.BRAVIARY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.DURANT, - Species.HYDREIGON, - Species.VOLCARONA, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.KELDEO, - Species.MELOETTA, - Species.GENESECT, - Species.CHESNAUGHT, - Species.DELPHOX, - Species.GRENINJA, - Species.DIGGERSBY, - Species.TALONFLAME, - Species.VIVILLON, - Species.PYROAR, - Species.FLORGES, - Species.GOGOAT, - Species.PANGORO, - Species.FURFROU, - Species.MEOWSTIC, - Species.AEGISLASH, - Species.AROMATISSE, - Species.SLURPUFF, - Species.MALAMAR, - Species.BARBARACLE, - Species.DRAGALGE, - Species.CLAWITZER, - Species.HELIOLISK, - Species.TYRANTRUM, - Species.AURORUS, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.CARBINK, - Species.GOODRA, - Species.KLEFKI, - Species.TREVENANT, - Species.GOURGEIST, - Species.AVALUGG, - Species.NOIVERN, - Species.XERNEAS, - Species.YVELTAL, - Species.ZYGARDE, - Species.DIANCIE, - Species.HOOPA, - Species.VOLCANION, - Species.DECIDUEYE, - Species.INCINEROAR, - Species.PRIMARINA, - Species.GUMSHOOS, - Species.VIKAVOLT, - Species.CRABOMINABLE, - Species.RIBOMBEE, - Species.LYCANROC, - Species.TOXAPEX, - Species.MUDSDALE, - Species.LURANTIS, - Species.SHIINOTIC, - Species.SALAZZLE, - Species.BEWEAR, - Species.TSAREENA, - Species.ORANGURU, - Species.PASSIMIAN, - Species.GOLISOPOD, - Species.PALOSSAND, - Species.TYPE_NULL, - Species.SILVALLY, - Species.MINIOR, - Species.KOMALA, - Species.TURTONATOR, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.BRUXISH, - Species.DRAMPA, - Species.DHELMISE, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.SOLGALEO, - Species.LUNALA, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.XURKITREE, - Species.CELESTEELA, - Species.KARTANA, - Species.GUZZLORD, - Species.NECROZMA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.NAGANADEL, - Species.STAKATAKA, - Species.ZERAORA, - Species.MELMETAL, - Species.RILLABOOM, - Species.CINDERACE, - Species.INTELEON, - Species.GREEDENT, - Species.CORVIKNIGHT, - Species.ORBEETLE, - Species.THIEVUL, - Species.ELDEGOSS, - Species.DUBWOOL, - Species.DREDNAW, - Species.BOLTUND, - Species.COALOSSAL, - Species.FLAPPLE, - Species.APPLETUN, - Species.SANDACONDA, - Species.CRAMORANT, - Species.BARRASKEWDA, - Species.TOXTRICITY, - Species.CENTISKORCH, - Species.GRAPPLOCT, - Species.POLTEAGEIST, - Species.HATTERENE, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.CURSOLA, - Species.MR_RIME, - Species.RUNERIGUS, - Species.ALCREMIE, - Species.FALINKS, - Species.PINCURCHIN, - Species.FROSMOTH, - Species.STONJOURNER, - Species.EISCUE, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.DURALUDON, - Species.DRAGAPULT, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.ETERNATUS, - Species.URSHIFU, - Species.ZARUDE, - Species.REGIELEKI, - Species.REGIDRAGO, - Species.GLASTRIER, - Species.SPECTRIER, - Species.CALYREX, - Species.WYRDEER, - Species.KLEAVOR, - Species.URSALUNA, - Species.BASCULEGION, - Species.SNEASLER, - Species.OVERQWIL, - Species.ENAMORUS, - Species.MEOWSCARADA, - Species.SKELEDIRGE, - Species.QUAQUAVAL, - Species.OINKOLOGNE, - Species.SPIDOPS, - Species.LOKIX, - Species.PAWMOT, - Species.MAUSHOLD, - Species.DACHSBUN, - Species.ARBOLIVA, - Species.SQUAWKABILLY, - Species.NACLSTACK, - Species.GARGANACL, - Species.BELLIBOLT, - Species.KILOWATTREL, - Species.MABOSSTIFF, - Species.GRAFAIAI, - Species.BRAMBLEGHAST, - Species.TOEDSCRUEL, - Species.KLAWF, - Species.SCOVILLAIN, - Species.RABSCA, - Species.ESPATHRA, - Species.WUGTRIO, - Species.BOMBIRDIER, - Species.PALAFIN, - Species.REVAVROOM, - Species.CYCLIZAR, - Species.ORTHWORM, - Species.GLIMMORA, - Species.HOUNDSTONE, - Species.FLAMIGO, - Species.CETITAN, - Species.VELUZA, - Species.DONDOZO, - Species.TATSUGIRI, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.BRUTE_BONNET, - Species.FLUTTER_MANE, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_BUNDLE, - Species.IRON_HANDS, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.IRON_THORNS, - Species.BAXCALIBUR, - Species.GHOLDENGO, - Species.WO_CHIEN, - Species.CHIEN_PAO, - Species.TING_LU, - Species.CHI_YU, - Species.ROARING_MOON, - Species.IRON_VALIANT, - Species.KORAIDON, - Species.MIRAIDON, - Species.WALKING_WAKE, - Species.IRON_LEAVES, - Species.DIPPLIN, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.OGERPON, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.TERAPAGOS, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSLASH, - Species.ALOLA_NINETALES, - Species.ALOLA_DUGTRIO, - Species.ALOLA_PERSIAN, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWBRO, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_LINOONE, - Species.GALAR_DARMANITAN, - Species.HISUI_ARCANINE, - Species.HISUI_ELECTRODE, - Species.HISUI_TYPHLOSION, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.HISUI_DECIDUEYE, - Species.PALDEA_TAUROS, - Species.BLOODMOON_URSALUNA, + [MoveId.GIGA_IMPACT]: [ + SpeciesId.VENUSAUR, + SpeciesId.CHARIZARD, + SpeciesId.BLASTOISE, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEOT, + SpeciesId.RATICATE, + SpeciesId.FEAROW, + SpeciesId.ARBOK, + SpeciesId.RAICHU, + SpeciesId.SANDSLASH, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.CLEFABLE, + SpeciesId.NINETALES, + SpeciesId.WIGGLYTUFF, + SpeciesId.GOLBAT, + SpeciesId.VILEPLUME, + SpeciesId.PARASECT, + SpeciesId.VENOMOTH, + SpeciesId.DUGTRIO, + SpeciesId.PERSIAN, + SpeciesId.GOLDUCK, + SpeciesId.PRIMEAPE, + SpeciesId.ARCANINE, + SpeciesId.POLIWRATH, + SpeciesId.ALAKAZAM, + SpeciesId.MACHAMP, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACRUEL, + SpeciesId.GOLEM, + SpeciesId.RAPIDASH, + SpeciesId.SLOWBRO, + SpeciesId.MAGNETON, + SpeciesId.DODRIO, + SpeciesId.DEWGONG, + SpeciesId.MUK, + SpeciesId.CLOYSTER, + SpeciesId.GENGAR, + SpeciesId.HYPNO, + SpeciesId.KINGLER, + SpeciesId.ELECTRODE, + SpeciesId.EXEGGUTOR, + SpeciesId.MAROWAK, + SpeciesId.LICKITUNG, + SpeciesId.WEEZING, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.SEADRA, + SpeciesId.SEAKING, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.PORYGON, + SpeciesId.OMASTAR, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.MEGANIUM, + SpeciesId.TYPHLOSION, + SpeciesId.FERALIGATR, + SpeciesId.FURRET, + SpeciesId.NOCTOWL, + SpeciesId.LEDIAN, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.LANTURN, + SpeciesId.TOGETIC, + SpeciesId.XATU, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.JUMPLUFF, + SpeciesId.SUNFLORA, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.STEELIX, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.URSARING, + SpeciesId.MAGCARGO, + SpeciesId.PILOSWINE, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.HOUNDOOM, + SpeciesId.KINGDRA, + SpeciesId.DONPHAN, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.SCEPTILE, + SpeciesId.BLAZIKEN, + SpeciesId.SWAMPERT, + SpeciesId.MIGHTYENA, + SpeciesId.LINOONE, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.LUDICOLO, + SpeciesId.SHIFTRY, + SpeciesId.SWELLOW, + SpeciesId.PELIPPER, + SpeciesId.GARDEVOIR, + SpeciesId.MASQUERAIN, + SpeciesId.BRELOOM, + SpeciesId.SLAKING, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.EXPLOUD, + SpeciesId.HARIYAMA, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.AGGRON, + SpeciesId.MEDICHAM, + SpeciesId.MANECTRIC, + SpeciesId.SWALOT, + SpeciesId.SHARPEDO, + SpeciesId.WAILORD, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.GRUMPIG, + SpeciesId.FLYGON, + SpeciesId.CACTURNE, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.WHISCASH, + SpeciesId.CRAWDAUNT, + SpeciesId.CLAYDOL, + SpeciesId.CRADILY, + SpeciesId.ARMALDO, + SpeciesId.MILOTIC, + SpeciesId.BANETTE, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.ABSOL, + SpeciesId.GLALIE, + SpeciesId.WALREIN, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TORTERRA, + SpeciesId.INFERNAPE, + SpeciesId.EMPOLEON, + SpeciesId.STARAPTOR, + SpeciesId.BIBAREL, + SpeciesId.KRICKETUNE, + SpeciesId.LUXRAY, + SpeciesId.ROSERADE, + SpeciesId.RAMPARDOS, + SpeciesId.BASTIODON, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.FLOATZEL, + SpeciesId.CHERRIM, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.DRIFBLIM, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.PURUGLY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZONG, + SpeciesId.SPIRITOMB, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.LUCARIO, + SpeciesId.HIPPOWDON, + SpeciesId.DRAPION, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.LUMINEON, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.SERPERIOR, + SpeciesId.EMBOAR, + SpeciesId.SAMUROTT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.LIEPARD, + SpeciesId.SIMISAGE, + SpeciesId.SIMISEAR, + SpeciesId.SIMIPOUR, + SpeciesId.MUSHARNA, + SpeciesId.UNFEZANT, + SpeciesId.ZEBSTRIKA, + SpeciesId.GIGALITH, + SpeciesId.SWOOBAT, + SpeciesId.EXCADRILL, + SpeciesId.AUDINO, + SpeciesId.CONKELDURR, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.LEAVANNY, + SpeciesId.SCOLIPEDE, + SpeciesId.WHIMSICOTT, + SpeciesId.LILLIGANT, + SpeciesId.KROOKODILE, + SpeciesId.DARMANITAN, + SpeciesId.CRUSTLE, + SpeciesId.SCRAFTY, + SpeciesId.SIGILYPH, + SpeciesId.COFAGRIGUS, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEOPS, + SpeciesId.GARBODOR, + SpeciesId.ZOROARK, + SpeciesId.CINCCINO, + SpeciesId.GOTHITELLE, + SpeciesId.REUNICLUS, + SpeciesId.SWANNA, + SpeciesId.VANILLUXE, + SpeciesId.SAWSBUCK, + SpeciesId.ESCAVALIER, + SpeciesId.AMOONGUSS, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.GALVANTULA, + SpeciesId.FERROTHORN, + SpeciesId.KLINKLANG, + SpeciesId.EELEKTROSS, + SpeciesId.BEHEEYEM, + SpeciesId.CHANDELURE, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.ACCELGOR, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLURK, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.BRAVIARY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.HYDREIGON, + SpeciesId.VOLCARONA, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.CHESNAUGHT, + SpeciesId.DELPHOX, + SpeciesId.GRENINJA, + SpeciesId.DIGGERSBY, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.PYROAR, + SpeciesId.FLORGES, + SpeciesId.GOGOAT, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.MEOWSTIC, + SpeciesId.AEGISLASH, + SpeciesId.AROMATISSE, + SpeciesId.SLURPUFF, + SpeciesId.MALAMAR, + SpeciesId.BARBARACLE, + SpeciesId.DRAGALGE, + SpeciesId.CLAWITZER, + SpeciesId.HELIOLISK, + SpeciesId.TYRANTRUM, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.GOODRA, + SpeciesId.KLEFKI, + SpeciesId.TREVENANT, + SpeciesId.GOURGEIST, + SpeciesId.AVALUGG, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.DECIDUEYE, + SpeciesId.INCINEROAR, + SpeciesId.PRIMARINA, + SpeciesId.GUMSHOOS, + SpeciesId.VIKAVOLT, + SpeciesId.CRABOMINABLE, + SpeciesId.RIBOMBEE, + SpeciesId.LYCANROC, + SpeciesId.TOXAPEX, + SpeciesId.MUDSDALE, + SpeciesId.LURANTIS, + SpeciesId.SHIINOTIC, + SpeciesId.SALAZZLE, + SpeciesId.BEWEAR, + SpeciesId.TSAREENA, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.GOLISOPOD, + SpeciesId.PALOSSAND, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.XURKITREE, + SpeciesId.CELESTEELA, + SpeciesId.KARTANA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.NAGANADEL, + SpeciesId.STAKATAKA, + SpeciesId.ZERAORA, + SpeciesId.MELMETAL, + SpeciesId.RILLABOOM, + SpeciesId.CINDERACE, + SpeciesId.INTELEON, + SpeciesId.GREEDENT, + SpeciesId.CORVIKNIGHT, + SpeciesId.ORBEETLE, + SpeciesId.THIEVUL, + SpeciesId.ELDEGOSS, + SpeciesId.DUBWOOL, + SpeciesId.DREDNAW, + SpeciesId.BOLTUND, + SpeciesId.COALOSSAL, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.SANDACONDA, + SpeciesId.CRAMORANT, + SpeciesId.BARRASKEWDA, + SpeciesId.TOXTRICITY, + SpeciesId.CENTISKORCH, + SpeciesId.GRAPPLOCT, + SpeciesId.POLTEAGEIST, + SpeciesId.HATTERENE, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.ALCREMIE, + SpeciesId.FALINKS, + SpeciesId.PINCURCHIN, + SpeciesId.FROSMOTH, + SpeciesId.STONJOURNER, + SpeciesId.EISCUE, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.DURALUDON, + SpeciesId.DRAGAPULT, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.ETERNATUS, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.REGIELEKI, + SpeciesId.REGIDRAGO, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.BASCULEGION, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.ENAMORUS, + SpeciesId.MEOWSCARADA, + SpeciesId.SKELEDIRGE, + SpeciesId.QUAQUAVAL, + SpeciesId.OINKOLOGNE, + SpeciesId.SPIDOPS, + SpeciesId.LOKIX, + SpeciesId.PAWMOT, + SpeciesId.MAUSHOLD, + SpeciesId.DACHSBUN, + SpeciesId.ARBOLIVA, + SpeciesId.SQUAWKABILLY, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.BELLIBOLT, + SpeciesId.KILOWATTREL, + SpeciesId.MABOSSTIFF, + SpeciesId.GRAFAIAI, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCRUEL, + SpeciesId.KLAWF, + SpeciesId.SCOVILLAIN, + SpeciesId.RABSCA, + SpeciesId.ESPATHRA, + SpeciesId.WUGTRIO, + SpeciesId.BOMBIRDIER, + SpeciesId.PALAFIN, + SpeciesId.REVAVROOM, + SpeciesId.CYCLIZAR, + SpeciesId.ORTHWORM, + SpeciesId.GLIMMORA, + SpeciesId.HOUNDSTONE, + SpeciesId.FLAMIGO, + SpeciesId.CETITAN, + SpeciesId.VELUZA, + SpeciesId.DONDOZO, + SpeciesId.TATSUGIRI, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.BRUTE_BONNET, + SpeciesId.FLUTTER_MANE, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_THORNS, + SpeciesId.BAXCALIBUR, + SpeciesId.GHOLDENGO, + SpeciesId.WO_CHIEN, + SpeciesId.CHIEN_PAO, + SpeciesId.TING_LU, + SpeciesId.CHI_YU, + SpeciesId.ROARING_MOON, + SpeciesId.IRON_VALIANT, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.IRON_LEAVES, + SpeciesId.DIPPLIN, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.OGERPON, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.PALDEA_TAUROS, + SpeciesId.BLOODMOON_URSALUNA, [ - Species.BASCULIN, + SpeciesId.BASCULIN, "blue-striped", "red-striped", ], ], - [Moves.NASTY_PLOT]: [ - Species.PIKACHU, - Species.RAICHU, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.ALAKAZAM, - Species.SLOWBRO, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.MR_MIME, - Species.JYNX, - Species.MEWTWO, - Species.MEW, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.CROBAT, - Species.PICHU, - Species.TOGEPI, - Species.TOGETIC, - Species.AIPOM, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.SNEASEL, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.SMOOCHUM, - Species.CELEBI, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.PLUSLE, - Species.MINUN, - Species.GRUMPIG, - Species.CACNEA, - Species.CACTURNE, - Species.LUNATONE, - Species.CRAWDAUNT, - Species.CLAYDOL, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DEOXYS, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.AMBIPOM, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.STUNKY, - Species.SKUNTANK, - Species.MIME_JR, - Species.CHATOT, - Species.SPIRITOMB, - Species.RIOLU, - Species.LUCARIO, - Species.CROAGUNK, - Species.TOXICROAK, - Species.WEAVILE, - Species.TOGEKISS, - Species.PORYGON_Z, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DARKRAI, - Species.PATRAT, - Species.WATCHOG, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.WOOBAT, - Species.SWOOBAT, - Species.YAMASK, - Species.COFAGRIGUS, - Species.ZORUA, - Species.ZOROARK, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.ELGYEM, - Species.BEHEEYEM, - Species.VULLABY, - Species.MANDIBUZZ, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.TORNADUS, - Species.THUNDURUS, - Species.LANDORUS, - Species.DELPHOX, - Species.ESPURR, - Species.MEOWSTIC, - Species.SPRITZEE, - Species.AROMATISSE, - Species.INKAY, - Species.MALAMAR, - Species.GOURGEIST, - Species.HOOPA, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.SALANDIT, - Species.SALAZZLE, - Species.ORANGURU, - Species.POIPOLE, - Species.NAGANADEL, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.NICKIT, - Species.THIEVUL, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.PERRSERKER, - Species.MR_RIME, - Species.RUNERIGUS, - Species.MORPEKO, - Species.ZARUDE, - Species.SPECTRIER, - Species.SNEASLER, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.SHROODLE, - Species.GRAFAIAI, - Species.BOMBIRDIER, - Species.TATSUGIRI, - Species.FARIGIRAF, - Species.GIMMIGHOUL, - Species.GHOLDENGO, - Species.CHI_YU, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.HYDRAPPLE, - Species.PECHARUNT, - Species.ALOLA_RAICHU, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.GALAR_MEOWTH, - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_YAMASK, + [MoveId.NASTY_PLOT]: [ + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.ALAKAZAM, + SpeciesId.SLOWBRO, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.CROBAT, + SpeciesId.PICHU, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.AIPOM, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.SNEASEL, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.SMOOCHUM, + SpeciesId.CELEBI, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.GRUMPIG, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.LUNATONE, + SpeciesId.CRAWDAUNT, + SpeciesId.CLAYDOL, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DEOXYS, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.AMBIPOM, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.MIME_JR, + SpeciesId.CHATOT, + SpeciesId.SPIRITOMB, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.WEAVILE, + SpeciesId.TOGEKISS, + SpeciesId.PORYGON_Z, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DARKRAI, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.LANDORUS, + SpeciesId.DELPHOX, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.GOURGEIST, + SpeciesId.HOOPA, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.ORANGURU, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.PERRSERKER, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.MORPEKO, + SpeciesId.ZARUDE, + SpeciesId.SPECTRIER, + SpeciesId.SNEASLER, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.BOMBIRDIER, + SpeciesId.TATSUGIRI, + SpeciesId.FARIGIRAF, + SpeciesId.GIMMIGHOUL, + SpeciesId.GHOLDENGO, + SpeciesId.CHI_YU, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.HYDRAPPLE, + SpeciesId.PECHARUNT, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_YAMASK, [ - Species.CALYREX, + SpeciesId.CALYREX, "shadow", ], - Species.HISUI_SNEASEL, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_DECIDUEYE, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.AVALANCHE]: [ - Species.BLASTOISE, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.DEWGONG, - Species.SHELLDER, - Species.CLOYSTER, - Species.RHYDON, - Species.KANGASKHAN, - Species.STARMIE, - Species.JYNX, - Species.GYARADOS, - Species.LAPRAS, - Species.ARTICUNO, - Species.MEWTWO, - Species.MEW, - Species.FERALIGATR, - Species.WOOPER, - Species.QUAGSIRE, - Species.SLOWKING, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SWINUB, - Species.PILOSWINE, - Species.DELIBIRD, - Species.SMOOCHUM, - Species.BLISSEY, - Species.SUICUNE, - Species.TYRANITAR, - Species.LUGIA, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.EXPLOUD, - Species.AGGRON, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.CRAWDAUNT, - Species.MILOTIC, - Species.CASTFORM, - Species.SNORUNT, - Species.GLALIE, - Species.WALREIN, - Species.REGICE, - Species.KYOGRE, - Species.RAYQUAZA, - Species.DEOXYS, - Species.EMPOLEON, - Species.RAMPARDOS, - Species.BASTIODON, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.RHYPERIOR, - Species.GLACEON, - Species.MAMOSWINE, - Species.FROSLASS, - Species.PALKIA, - Species.REGIGIGAS, - Species.ARCEUS, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.AMAURA, - Species.AURORUS, - Species.BERGMITE, - Species.AVALUGG, - Species.CRABOMINABLE, - Species.MR_RIME, - Species.FROSMOTH, - Species.EISCUE, - Species.ARCTOZOLT, - Species.ARCTOVISH, - Species.GLASTRIER, - Species.URSALUNA, - Species.GARGANACL, - Species.CETODDLE, - Species.CETITAN, - Species.DONDOZO, - Species.IRON_BUNDLE, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.CHIEN_PAO, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_NINETALES, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_SLOWKING, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, + [MoveId.AVALANCHE]: [ + SpeciesId.BLASTOISE, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.DEWGONG, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.RHYDON, + SpeciesId.KANGASKHAN, + SpeciesId.STARMIE, + SpeciesId.JYNX, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.ARTICUNO, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.FERALIGATR, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.DELIBIRD, + SpeciesId.SMOOCHUM, + SpeciesId.BLISSEY, + SpeciesId.SUICUNE, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.EXPLOUD, + SpeciesId.AGGRON, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.CRAWDAUNT, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.WALREIN, + SpeciesId.REGICE, + SpeciesId.KYOGRE, + SpeciesId.RAYQUAZA, + SpeciesId.DEOXYS, + SpeciesId.EMPOLEON, + SpeciesId.RAMPARDOS, + SpeciesId.BASTIODON, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.RHYPERIOR, + SpeciesId.GLACEON, + SpeciesId.MAMOSWINE, + SpeciesId.FROSLASS, + SpeciesId.PALKIA, + SpeciesId.REGIGIGAS, + SpeciesId.ARCEUS, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.CRABOMINABLE, + SpeciesId.MR_RIME, + SpeciesId.FROSMOTH, + SpeciesId.EISCUE, + SpeciesId.ARCTOZOLT, + SpeciesId.ARCTOVISH, + SpeciesId.GLASTRIER, + SpeciesId.URSALUNA, + SpeciesId.GARGANACL, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.DONDOZO, + SpeciesId.IRON_BUNDLE, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.CHIEN_PAO, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_NINETALES, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", ], - Species.HISUI_SAMUROTT, - Species.HISUI_AVALUGG, - Species.BLOODMOON_URSALUNA, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_AVALUGG, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.SHADOW_CLAW]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.HAUNTER, - Species.GENGAR, - Species.RHYDON, - Species.KANGASKHAN, - Species.MEW, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.AIPOM, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.TYRANITAR, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.LINOONE, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.SHEDINJA, - Species.SABLEYE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.ZANGOOSE, - Species.ARMALDO, - Species.KECLEON, - Species.BANETTE, - Species.ABSOL, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METAGROSS, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.GROUDON, - Species.RAYQUAZA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PRINPLUP, - Species.EMPOLEON, - Species.AMBIPOM, - Species.GLAMEOW, - Species.PURUGLY, - Species.STUNKY, - Species.SKUNTANK, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.RIOLU, - Species.LUCARIO, - Species.CROAGUNK, - Species.TOXICROAK, - Species.WEAVILE, - Species.RHYPERIOR, - Species.GALLADE, - Species.DIALGA, - Species.PALKIA, - Species.GIRATINA, - Species.DARKRAI, - Species.ARCEUS, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.DRILBUR, - Species.EXCADRILL, - Species.LEAVANNY, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DWEBBLE, - Species.CRUSTLE, - Species.COFAGRIGUS, - Species.ARCHEN, - Species.ARCHEOPS, - Species.ZORUA, - Species.ZOROARK, - Species.FERROTHORN, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.DRUDDIGON, - Species.PAWNIARD, - Species.BISHARP, - Species.RUFFLET, - Species.BRAVIARY, - Species.HEATMOR, - Species.DURANT, - Species.RESHIRAM, - Species.ZEKROM, - Species.KYUREM, - Species.MELOETTA, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.PANCHAM, - Species.PANGORO, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.BINACLE, - Species.BARBARACLE, - Species.PHANTUMP, - Species.TREVENANT, - Species.NOIBAT, - Species.NOIVERN, - Species.YVELTAL, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.SALANDIT, - Species.SALAZZLE, - Species.BEWEAR, - Species.GOLISOPOD, - Species.TYPE_NULL, - Species.SILVALLY, - Species.KOMALA, - Species.MIMIKYU, - Species.DRAMPA, - Species.DHELMISE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.LUNALA, - Species.GUZZLORD, - Species.NECROZMA, - Species.MARSHADOW, - Species.NAGANADEL, - Species.BLACEPHALON, - Species.THIEVUL, - Species.HATTERENE, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.RUNERIGUS, - Species.URSALUNA, - Species.SNEASLER, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.SKELEDIRGE, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.CERULEDGE, - Species.GRAFAIAI, - Species.KLAWF, - Species.ANNIHILAPE, - Species.KINGAMBIT, - Species.ROARING_MOON, - Species.IRON_VALIANT, - Species.KORAIDON, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, + [MoveId.SHADOW_CLAW]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.RHYDON, + SpeciesId.KANGASKHAN, + SpeciesId.MEW, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.AIPOM, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.TYRANITAR, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.LINOONE, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.SHEDINJA, + SpeciesId.SABLEYE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.ZANGOOSE, + SpeciesId.ARMALDO, + SpeciesId.KECLEON, + SpeciesId.BANETTE, + SpeciesId.ABSOL, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METAGROSS, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.AMBIPOM, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.WEAVILE, + SpeciesId.RHYPERIOR, + SpeciesId.GALLADE, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.GIRATINA, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.LEAVANNY, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.COFAGRIGUS, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.FERROTHORN, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.DRUDDIGON, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.KYUREM, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.YVELTAL, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.BEWEAR, + SpeciesId.GOLISOPOD, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.KOMALA, + SpeciesId.MIMIKYU, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.LUNALA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MARSHADOW, + SpeciesId.NAGANADEL, + SpeciesId.BLACEPHALON, + SpeciesId.THIEVUL, + SpeciesId.HATTERENE, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.RUNERIGUS, + SpeciesId.URSALUNA, + SpeciesId.SNEASLER, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.SKELEDIRGE, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.CERULEDGE, + SpeciesId.GRAFAIAI, + SpeciesId.KLAWF, + SpeciesId.ANNIHILAPE, + SpeciesId.KINGAMBIT, + SpeciesId.ROARING_MOON, + SpeciesId.IRON_VALIANT, + SpeciesId.KORAIDON, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, [ - Species.LYCANROC, + SpeciesId.LYCANROC, "midnight", ], - Species.GALAR_MEOWTH, - Species.GALAR_LINOONE, - Species.HISUI_TYPHLOSION, - Species.HISUI_SNEASEL, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.HISUI_DECIDUEYE, - Species.BLOODMOON_URSALUNA, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_LINOONE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.THUNDER_FANG]: [ - Species.ARBOK, - Species.GROWLITHE, - Species.ARCANINE, - Species.RHYHORN, - Species.RHYDON, - Species.JOLTEON, - Species.AERODACTYL, - Species.MEW, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.DONPHAN, - Species.RAIKOU, - Species.TYRANITAR, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.EXPLOUD, - Species.MAWILE, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.SEVIPER, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.PACHIRISU, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.DRAPION, - Species.RHYPERIOR, - Species.GLISCOR, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.DRUDDIGON, - Species.DURANT, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.ZEKROM, - Species.LITLEO, - Species.PYROAR, - Species.TYRUNT, - Species.TYRANTRUM, - Species.VOLCANION, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.ROCKRUFF, - Species.LYCANROC, - Species.SILVALLY, - Species.GREEDENT, - Species.THIEVUL, - Species.YAMPER, - Species.BOLTUND, - Species.SANDACONDA, - Species.TOXTRICITY, - Species.CENTISKORCH, - Species.MORPEKO, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.REGIDRAGO, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.FIDOUGH, - Species.DACHSBUN, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.CYCLIZAR, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.IRON_TREADS, - Species.IRON_THORNS, - Species.BAXCALIBUR, - Species.ROARING_MOON, - Species.KORAIDON, - Species.OKIDOGI, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, + [MoveId.THUNDER_FANG]: [ + SpeciesId.ARBOK, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.JOLTEON, + SpeciesId.AERODACTYL, + SpeciesId.MEW, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.DONPHAN, + SpeciesId.RAIKOU, + SpeciesId.TYRANITAR, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.EXPLOUD, + SpeciesId.MAWILE, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.SEVIPER, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.PACHIRISU, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.DRAPION, + SpeciesId.RHYPERIOR, + SpeciesId.GLISCOR, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.DRUDDIGON, + SpeciesId.DURANT, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.ZEKROM, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.VOLCANION, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.SILVALLY, + SpeciesId.GREEDENT, + SpeciesId.THIEVUL, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.SANDACONDA, + SpeciesId.TOXTRICITY, + SpeciesId.CENTISKORCH, + SpeciesId.MORPEKO, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.REGIDRAGO, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.CYCLIZAR, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_THORNS, + SpeciesId.BAXCALIBUR, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.OKIDOGI, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, ], - [Moves.ICE_FANG]: [ - Species.ARBOK, - Species.RHYHORN, - Species.RHYDON, - Species.GYARADOS, - Species.AERODACTYL, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.SWINUB, - Species.PILOSWINE, - Species.DONPHAN, - Species.SUICUNE, - Species.TYRANITAR, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.EXPLOUD, - Species.MAWILE, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.CARVANHA, - Species.SHARPEDO, - Species.SEVIPER, - Species.SNORUNT, - Species.GLALIE, - Species.WALREIN, - Species.HUNTAIL, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.BUIZEL, - Species.FLOATZEL, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.DRAPION, - Species.RHYPERIOR, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.FROSLASS, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.BASCULIN, - Species.CUBCHOO, - Species.BEARTIC, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.TYRUNT, - Species.TYRANTRUM, - Species.BERGMITE, - Species.AVALUGG, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.SILVALLY, - Species.BRUXISH, - Species.GREEDENT, - Species.THIEVUL, - Species.CHEWTLE, - Species.DREDNAW, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.MORPEKO, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.REGIDRAGO, - Species.BASCULEGION, - Species.FIDOUGH, - Species.DACHSBUN, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.CETODDLE, - Species.CETITAN, - Species.VELUZA, - Species.DONDOZO, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.IRON_TREADS, - Species.IRON_THORNS, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.CHIEN_PAO, - Species.KORAIDON, - Species.OKIDOGI, - Species.GALAR_SLOWBRO, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.GALAR_STUNFISK, - Species.HISUI_AVALUGG, + [MoveId.ICE_FANG]: [ + SpeciesId.ARBOK, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.GYARADOS, + SpeciesId.AERODACTYL, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.DONPHAN, + SpeciesId.SUICUNE, + SpeciesId.TYRANITAR, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.EXPLOUD, + SpeciesId.MAWILE, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.SEVIPER, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.WALREIN, + SpeciesId.HUNTAIL, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.DRAPION, + SpeciesId.RHYPERIOR, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.FROSLASS, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.BASCULIN, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.SILVALLY, + SpeciesId.BRUXISH, + SpeciesId.GREEDENT, + SpeciesId.THIEVUL, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.MORPEKO, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.REGIDRAGO, + SpeciesId.BASCULEGION, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.VELUZA, + SpeciesId.DONDOZO, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_THORNS, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.CHIEN_PAO, + SpeciesId.KORAIDON, + SpeciesId.OKIDOGI, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_AVALUGG, ], - [Moves.FIRE_FANG]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.EKANS, - Species.ARBOK, - Species.GROWLITHE, - Species.ARCANINE, - Species.RHYHORN, - Species.RHYDON, - Species.FLAREON, - Species.AERODACTYL, - Species.MEW, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.DONPHAN, - Species.ENTEI, - Species.TYRANITAR, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.EXPLOUD, - Species.MAWILE, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.SEVIPER, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.GROUDON, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.DRAPION, - Species.RHYPERIOR, - Species.GLISCOR, - Species.HEATRAN, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.DRUDDIGON, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.RESHIRAM, - Species.LITLEO, - Species.PYROAR, - Species.TYRUNT, - Species.TYRANTRUM, - Species.VOLCANION, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.ROCKRUFF, - Species.LYCANROC, - Species.SALANDIT, - Species.SALAZZLE, - Species.SILVALLY, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.GREEDENT, - Species.THIEVUL, - Species.YAMPER, - Species.BOLTUND, - Species.SANDACONDA, - Species.CENTISKORCH, - Species.MORPEKO, - Species.DRACOZOLT, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.REGIDRAGO, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.FIDOUGH, - Species.DACHSBUN, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.SCOVILLAIN, - Species.CYCLIZAR, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.IRON_JUGULIS, - Species.IRON_THORNS, - Species.ROARING_MOON, - Species.KORAIDON, - Species.WALKING_WAKE, - Species.OKIDOGI, - Species.GOUGING_FIRE, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_TYPHLOSION, + [MoveId.FIRE_FANG]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.FLAREON, + SpeciesId.AERODACTYL, + SpeciesId.MEW, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.DONPHAN, + SpeciesId.ENTEI, + SpeciesId.TYRANITAR, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.EXPLOUD, + SpeciesId.MAWILE, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.SEVIPER, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.GROUDON, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.DRAPION, + SpeciesId.RHYPERIOR, + SpeciesId.GLISCOR, + SpeciesId.HEATRAN, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.DRUDDIGON, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.RESHIRAM, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.VOLCANION, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.SILVALLY, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.GREEDENT, + SpeciesId.THIEVUL, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.SANDACONDA, + SpeciesId.CENTISKORCH, + SpeciesId.MORPEKO, + SpeciesId.DRACOZOLT, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.REGIDRAGO, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.SCOVILLAIN, + SpeciesId.CYCLIZAR, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_THORNS, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.OKIDOGI, + SpeciesId.GOUGING_FIRE, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_TYPHLOSION, ], - [Moves.PSYCHO_CUT]: [ - Species.KADABRA, - Species.ALAKAZAM, - Species.DROWZEE, - Species.HYPNO, - Species.EXEGGUTOR, - Species.STARMIE, - Species.SCYTHER, - Species.JYNX, - Species.KABUTOPS, - Species.MEWTWO, - Species.MEW, - Species.SCIZOR, - Species.SNEASEL, - Species.CELEBI, - Species.MEDITITE, - Species.MEDICHAM, - Species.SPINDA, - Species.ABSOL, - Species.METANG, - Species.METAGROSS, - Species.LATIAS, - Species.LATIOS, - Species.WEAVILE, - Species.GALLADE, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.CRESSELIA, - Species.LIEPARD, - Species.WOOBAT, - Species.SWOOBAT, - Species.SIGILYPH, - Species.HAXORUS, - Species.PAWNIARD, - Species.BISHARP, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.INKAY, - Species.MALAMAR, - Species.DECIDUEYE, - Species.LURANTIS, - Species.TAPU_LELE, - Species.LUNALA, - Species.KARTANA, - Species.NECROZMA, - Species.ORBEETLE, - Species.HATTERENE, - Species.ZACIAN, - Species.SPECTRIER, - Species.KLEAVOR, - Species.CERULEDGE, - Species.VELUZA, - Species.IRON_VALIANT, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.GALAR_RAPIDASH, - Species.GALAR_ARTICUNO, + [MoveId.PSYCHO_CUT]: [ + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.EXEGGUTOR, + SpeciesId.STARMIE, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.KABUTOPS, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.SCIZOR, + SpeciesId.SNEASEL, + SpeciesId.CELEBI, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.SPINDA, + SpeciesId.ABSOL, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.WEAVILE, + SpeciesId.GALLADE, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.CRESSELIA, + SpeciesId.LIEPARD, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.SIGILYPH, + SpeciesId.HAXORUS, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.DECIDUEYE, + SpeciesId.LURANTIS, + SpeciesId.TAPU_LELE, + SpeciesId.LUNALA, + SpeciesId.KARTANA, + SpeciesId.NECROZMA, + SpeciesId.ORBEETLE, + SpeciesId.HATTERENE, + SpeciesId.ZACIAN, + SpeciesId.SPECTRIER, + SpeciesId.KLEAVOR, + SpeciesId.CERULEDGE, + SpeciesId.VELUZA, + SpeciesId.IRON_VALIANT, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_ARTICUNO, [ - Species.CALYREX, + SpeciesId.CALYREX, "shadow", ], - Species.HISUI_SAMUROTT, - Species.HISUI_DECIDUEYE, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.ZEN_HEADBUTT]: [ - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.RATTATA, - Species.RATICATE, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.VENONAT, - Species.VENOMOTH, - Species.PSYDUCK, - Species.GOLDUCK, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.GRIMER, - Species.MUK, - Species.DROWZEE, - Species.HYPNO, - Species.EXEGGUTOR, - Species.LICKITUNG, - Species.CHANSEY, - Species.MR_MIME, - Species.JYNX, - Species.TAUROS, - Species.LAPRAS, - Species.PORYGON, - Species.SNORLAX, - Species.MEWTWO, - Species.MEW, - Species.MEGANIUM, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.CROBAT, - Species.CLEFFA, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.ESPEON, - Species.SLOWKING, - Species.GIRAFARIG, - Species.DUNSPARCE, - Species.PORYGON2, - Species.STANTLER, - Species.SMOOCHUM, - Species.MILTANK, - Species.BLISSEY, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MEDITITE, - Species.MEDICHAM, - Species.VOLBEAT, - Species.ILLUMISE, - Species.SWALOT, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.CACTURNE, - Species.ZANGOOSE, - Species.SEVIPER, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.BALTOY, - Species.CLAYDOL, - Species.TROPIUS, - Species.CHIMECHO, - Species.ABSOL, - Species.RELICANTH, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.BELDUM, - Species.METANG, - Species.METAGROSS, - Species.LATIAS, - Species.LATIOS, - Species.GROUDON, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.CHINGLING, - Species.BRONZOR, - Species.BRONZONG, - Species.HAPPINY, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.LICKILICKY, - Species.TOGEKISS, - Species.PORYGON_Z, - Species.GALLADE, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.REGIGIGAS, - Species.CRESSELIA, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.PATRAT, - Species.WATCHOG, - Species.MUNNA, - Species.MUSHARNA, - Species.WOOBAT, - Species.SWOOBAT, - Species.AUDINO, - Species.THROH, - Species.SAWK, - Species.BASCULIN, - Species.DARUMAKA, - Species.DARMANITAN, - Species.SCRAGGY, - Species.SCRAFTY, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.DEERLING, - Species.SAWSBUCK, - Species.ALOMOMOLA, - Species.EELEKTROSS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.GOLURK, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.KYUREM, - Species.MELOETTA, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.BRAIXEN, - Species.DELPHOX, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.ESPURR, - Species.MEOWSTIC, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.HAWLUCHA, - Species.XERNEAS, - Species.YVELTAL, - Species.ZYGARDE, - Species.HOOPA, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.STUFFUL, - Species.BEWEAR, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.ORANGURU, - Species.SILVALLY, - Species.MINIOR, - Species.KOMALA, - Species.TOGEDEMARU, - Species.TAPU_BULU, - Species.SOLGALEO, - Species.NIHILEGO, - Species.CELESTEELA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.STAKATAKA, - Species.BLACEPHALON, - Species.CINDERACE, - Species.DOTTLER, - Species.ORBEETLE, - Species.DUBWOOL, - Species.APPLETUN, - Species.SANDACONDA, - Species.MR_RIME, - Species.RUNERIGUS, - Species.FALINKS, - Species.EISCUE, - Species.INDEEDEE, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.KUBFU, - Species.URSHIFU, - Species.GLASTRIER, - Species.CALYREX, - Species.WYRDEER, - Species.ENAMORUS, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.LECHONK, - Species.OINKOLOGNE, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.FINIZEN, - Species.PALAFIN, - Species.VAROOM, - Species.REVAVROOM, - Species.VELUZA, - Species.DONDOZO, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.BRUTE_BONNET, - Species.SLITHER_WING, - Species.IRON_TREADS, - Species.IRON_JUGULIS, - Species.BAXCALIBUR, - Species.WO_CHIEN, - Species.TING_LU, - Species.CHI_YU, - Species.ROARING_MOON, - Species.IRON_VALIANT, - Species.KORAIDON, - Species.MIRAIDON, - Species.OGERPON, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.TERAPAGOS, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_SLOWKING, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.GALAR_YAMASK, - Species.HISUI_TYPHLOSION, - Species.HISUI_BRAVIARY, - Species.PALDEA_TAUROS, + [MoveId.ZEN_HEADBUTT]: [ + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.EXEGGUTOR, + SpeciesId.LICKITUNG, + SpeciesId.CHANSEY, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.TAUROS, + SpeciesId.LAPRAS, + SpeciesId.PORYGON, + SpeciesId.SNORLAX, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.MEGANIUM, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.CROBAT, + SpeciesId.CLEFFA, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.ESPEON, + SpeciesId.SLOWKING, + SpeciesId.GIRAFARIG, + SpeciesId.DUNSPARCE, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.SMOOCHUM, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.SWALOT, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.CACTURNE, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.RELICANTH, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.BELDUM, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.GROUDON, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.CHINGLING, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.HAPPINY, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.LICKILICKY, + SpeciesId.TOGEKISS, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.REGIGIGAS, + SpeciesId.CRESSELIA, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.AUDINO, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.BASCULIN, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.ALOMOMOLA, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.GOLURK, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.KYUREM, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.HAWLUCHA, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.ZYGARDE, + SpeciesId.HOOPA, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.ORANGURU, + SpeciesId.SILVALLY, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.TOGEDEMARU, + SpeciesId.TAPU_BULU, + SpeciesId.SOLGALEO, + SpeciesId.NIHILEGO, + SpeciesId.CELESTEELA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.STAKATAKA, + SpeciesId.BLACEPHALON, + SpeciesId.CINDERACE, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.DUBWOOL, + SpeciesId.APPLETUN, + SpeciesId.SANDACONDA, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.FALINKS, + SpeciesId.EISCUE, + SpeciesId.INDEEDEE, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.GLASTRIER, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.ENAMORUS, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.VELUZA, + SpeciesId.DONDOZO, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.BRUTE_BONNET, + SpeciesId.SLITHER_WING, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_JUGULIS, + SpeciesId.BAXCALIBUR, + SpeciesId.WO_CHIEN, + SpeciesId.TING_LU, + SpeciesId.CHI_YU, + SpeciesId.ROARING_MOON, + SpeciesId.IRON_VALIANT, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.OGERPON, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_YAMASK, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.PALDEA_TAUROS, ], - [Moves.FLASH_CANNON]: [ - Species.BLASTOISE, - Species.MAGNEMITE, - Species.MAGNETON, - Species.ONIX, - Species.HORSEA, - Species.SEADRA, - Species.STARYU, - Species.STARMIE, - Species.MEW, - Species.FORRETRESS, - Species.STEELIX, - Species.SCIZOR, - Species.OCTILLERY, - Species.SKARMORY, - Species.KINGDRA, - Species.NOSEPASS, - Species.MAWILE, - Species.AGGRON, - Species.NUMEL, - Species.CAMERUPT, - Species.SPOINK, - Species.GRUMPIG, - Species.ARMALDO, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.JIRACHI, - Species.DEOXYS, - Species.EMPOLEON, - Species.SHIELDON, - Species.BASTIODON, - Species.BRONZOR, - Species.BRONZONG, - Species.LUCARIO, - Species.MAGNEZONE, - Species.RHYPERIOR, - Species.PROBOPASS, - Species.DIALGA, - Species.HEATRAN, - Species.ARCEUS, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.SIGILYPH, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.FERROSEED, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.BEHEEYEM, - Species.CRYOGONAL, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.DURANT, - Species.HYDREIGON, - Species.COBALION, - Species.THUNDURUS, - Species.ZEKROM, - Species.KYUREM, - Species.GENESECT, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.SPRITZEE, - Species.AROMATISSE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.AMAURA, - Species.AURORUS, - Species.CARBINK, - Species.KLEFKI, - Species.BERGMITE, - Species.AVALUGG, - Species.XERNEAS, - Species.DIANCIE, - Species.VOLCANION, - Species.TOUCANNON, - Species.VIKAVOLT, - Species.SANDYGAST, - Species.PALOSSAND, - Species.SILVALLY, - Species.TURTONATOR, - Species.DHELMISE, - Species.KOMMO_O, - Species.SOLGALEO, - Species.CELESTEELA, - Species.NECROZMA, - Species.MAGEARNA, - Species.STAKATAKA, - Species.MELTAN, - Species.MELMETAL, - Species.CORVIKNIGHT, - Species.PERRSERKER, - Species.CUFANT, - Species.COPPERAJAH, - Species.DURALUDON, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.ETERNATUS, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.ARMAROUGE, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.ESPATHRA, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.VAROOM, - Species.REVAVROOM, - Species.ORTHWORM, - Species.GLIMMORA, - Species.KINGAMBIT, - Species.GREAT_TUSK, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.GHOLDENGO, - Species.MIRAIDON, - Species.ARCHALUDON, - Species.IRON_CROWN, + [MoveId.FLASH_CANNON]: [ + SpeciesId.BLASTOISE, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.ONIX, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MEW, + SpeciesId.FORRETRESS, + SpeciesId.STEELIX, + SpeciesId.SCIZOR, + SpeciesId.OCTILLERY, + SpeciesId.SKARMORY, + SpeciesId.KINGDRA, + SpeciesId.NOSEPASS, + SpeciesId.MAWILE, + SpeciesId.AGGRON, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.ARMALDO, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.EMPOLEON, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.LUCARIO, + SpeciesId.MAGNEZONE, + SpeciesId.RHYPERIOR, + SpeciesId.PROBOPASS, + SpeciesId.DIALGA, + SpeciesId.HEATRAN, + SpeciesId.ARCEUS, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.SIGILYPH, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.BEHEEYEM, + SpeciesId.CRYOGONAL, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.DURANT, + SpeciesId.HYDREIGON, + SpeciesId.COBALION, + SpeciesId.THUNDURUS, + SpeciesId.ZEKROM, + SpeciesId.KYUREM, + SpeciesId.GENESECT, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.CARBINK, + SpeciesId.KLEFKI, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.XERNEAS, + SpeciesId.DIANCIE, + SpeciesId.VOLCANION, + SpeciesId.TOUCANNON, + SpeciesId.VIKAVOLT, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.SILVALLY, + SpeciesId.TURTONATOR, + SpeciesId.DHELMISE, + SpeciesId.KOMMO_O, + SpeciesId.SOLGALEO, + SpeciesId.CELESTEELA, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.STAKATAKA, + SpeciesId.MELTAN, + SpeciesId.MELMETAL, + SpeciesId.CORVIKNIGHT, + SpeciesId.PERRSERKER, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DURALUDON, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.ETERNATUS, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.ARMAROUGE, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.ESPATHRA, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.ORTHWORM, + SpeciesId.GLIMMORA, + SpeciesId.KINGAMBIT, + SpeciesId.GREAT_TUSK, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.GHOLDENGO, + SpeciesId.MIRAIDON, + SpeciesId.ARCHALUDON, + SpeciesId.IRON_CROWN, [ - Species.WORMADAM, + SpeciesId.WORMADAM, "trash", ], - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.GALAR_MEOWTH, - Species.GALAR_STUNFISK, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, ], - [Moves.ROCK_CLIMB]: [ - Species.VENUSAUR, - Species.BLASTOISE, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.ARCANINE, - Species.POLIWRATH, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.ONIX, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.OMASTAR, - Species.KABUTOPS, - Species.SNORLAX, - Species.MEWTWO, - Species.MEW, - Species.MEGANIUM, - Species.TYPHLOSION, - Species.FERALIGATR, - Species.AMPHAROS, - Species.GLIGAR, - Species.STEELIX, - Species.GRANBULL, - Species.URSARING, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.TYRANITAR, - Species.SCEPTILE, - Species.BLAZIKEN, - Species.SWAMPERT, - Species.ZIGZAGOON, - Species.LINOONE, - Species.LUDICOLO, - Species.VIGOROTH, - Species.SLAKING, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AGGRON, - Species.ZANGOOSE, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.GROUDON, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.EMPOLEON, - Species.BIDOOF, - Species.BIBAREL, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.LUCARIO, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.ABOMASNOW, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.GLISCOR, - Species.MAMOSWINE, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.DARKRAI, - Species.ARCEUS, - Species.DRILBUR, - Species.EXCADRILL, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.JOLTIK, - Species.GALVANTULA, - Species.FERROSEED, - Species.FERROTHORN, - Species.DRUDDIGON, - Species.BOUFFALANT, - Species.DURANT, - Species.ROCKRUFF, - Species.LYCANROC, - Species.OBSTAGOON, - Species.URSALUNA, - Species.ANNIHILAPE, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_MAROWAK, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.HISUI_ARCANINE, - Species.HISUI_TYPHLOSION, - Species.PALDEA_TAUROS, - Species.BLOODMOON_URSALUNA, + [MoveId.ROCK_CLIMB]: [ + SpeciesId.VENUSAUR, + SpeciesId.BLASTOISE, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.ARCANINE, + SpeciesId.POLIWRATH, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.ONIX, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.OMASTAR, + SpeciesId.KABUTOPS, + SpeciesId.SNORLAX, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.MEGANIUM, + SpeciesId.TYPHLOSION, + SpeciesId.FERALIGATR, + SpeciesId.AMPHAROS, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.GRANBULL, + SpeciesId.URSARING, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.TYRANITAR, + SpeciesId.SCEPTILE, + SpeciesId.BLAZIKEN, + SpeciesId.SWAMPERT, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.LUDICOLO, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AGGRON, + SpeciesId.ZANGOOSE, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.GROUDON, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.EMPOLEON, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.LUCARIO, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.ABOMASNOW, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.DRUDDIGON, + SpeciesId.BOUFFALANT, + SpeciesId.DURANT, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.OBSTAGOON, + SpeciesId.URSALUNA, + SpeciesId.ANNIHILAPE, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.PALDEA_TAUROS, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.DEFOG]: [ - Species.CHARIZARD, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.SPEAROW, - Species.FEAROW, - Species.ZUBAT, - Species.GOLBAT, - Species.VENOMOTH, - Species.FARFETCHD, - Species.SCYTHER, - Species.AERODACTYL, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRAGONITE, - Species.MEW, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDIAN, - Species.CROBAT, - Species.TOGETIC, - Species.XATU, - Species.YANMA, - Species.MURKROW, - Species.GLIGAR, - Species.SCIZOR, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.LUGIA, - Species.HO_OH, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.MASQUERAIN, - Species.NINJASK, - Species.VOLBEAT, - Species.ILLUMISE, - Species.VIBRAVA, - Species.FLYGON, - Species.SWABLU, - Species.ALTARIA, - Species.CASTFORM, - Species.TROPIUS, - Species.CHIMECHO, - Species.SALAMENCE, - Species.LATIAS, - Species.LATIOS, - Species.RAYQUAZA, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.MOTHIM, - Species.VESPIQUEN, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.HONCHKROW, - Species.STUNKY, - Species.SKUNTANK, - Species.CHATOT, - Species.CARNIVINE, - Species.FINNEON, - Species.LUMINEON, - Species.TOGEKISS, - Species.YANMEGA, - Species.GLISCOR, - Species.ROTOM, - Species.GIRATINA, - Species.ARCEUS, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.WOOBAT, - Species.SWOOBAT, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.SIGILYPH, - Species.ARCHEN, - Species.ARCHEOPS, - Species.DUCKLETT, - Species.SWANNA, - Species.EMOLGA, - Species.CRYOGONAL, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HYDREIGON, - Species.VOLCARONA, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.FLORGES, - Species.HAWLUCHA, - Species.KLEFKI, - Species.NOIBAT, - Species.NOIVERN, - Species.XERNEAS, - Species.YVELTAL, - Species.VOLCANION, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.FOMANTIS, - Species.LURANTIS, - Species.COMFEY, - Species.SILVALLY, - Species.DRAMPA, - Species.TAPU_KOKO, - Species.TAPU_FINI, - Species.LUNALA, - Species.KARTANA, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.CRAMORANT, - Species.SIRFETCHD, - Species.FROSMOTH, - Species.KLEAVOR, - Species.GALAR_FARFETCHD, - Species.GALAR_WEEZING, - Species.HISUI_LILLIGANT, - Species.HISUI_BRAVIARY, - Species.HISUI_DECIDUEYE, + [MoveId.DEFOG]: [ + SpeciesId.CHARIZARD, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.VENOMOTH, + SpeciesId.FARFETCHD, + SpeciesId.SCYTHER, + SpeciesId.AERODACTYL, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDIAN, + SpeciesId.CROBAT, + SpeciesId.TOGETIC, + SpeciesId.XATU, + SpeciesId.YANMA, + SpeciesId.MURKROW, + SpeciesId.GLIGAR, + SpeciesId.SCIZOR, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.MASQUERAIN, + SpeciesId.NINJASK, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.CASTFORM, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.SALAMENCE, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.RAYQUAZA, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.HONCHKROW, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.CHATOT, + SpeciesId.CARNIVINE, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.GLISCOR, + SpeciesId.ROTOM, + SpeciesId.GIRATINA, + SpeciesId.ARCEUS, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.SIGILYPH, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.EMOLGA, + SpeciesId.CRYOGONAL, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HYDREIGON, + SpeciesId.VOLCARONA, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.FLORGES, + SpeciesId.HAWLUCHA, + SpeciesId.KLEFKI, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.VOLCANION, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.COMFEY, + SpeciesId.SILVALLY, + SpeciesId.DRAMPA, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_FINI, + SpeciesId.LUNALA, + SpeciesId.KARTANA, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.CRAMORANT, + SpeciesId.SIRFETCHD, + SpeciesId.FROSMOTH, + SpeciesId.KLEAVOR, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_WEEZING, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.TRICK_ROOM]: [ - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.STARMIE, - Species.MR_MIME, - Species.JYNX, - Species.PORYGON, - Species.MEWTWO, - Species.MEW, - Species.NATU, - Species.XATU, - Species.ESPEON, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.PORYGON2, - Species.STANTLER, - Species.SMOOCHUM, - Species.CELEBI, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.MEDITITE, - Species.MEDICHAM, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.LUNATONE, - Species.SOLROCK, - Species.BALTOY, - Species.CLAYDOL, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.CHIMECHO, - Species.JIRACHI, - Species.DEOXYS, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.MISMAGIUS, - Species.CHINGLING, - Species.BRONZOR, - Species.BRONZONG, - Species.MIME_JR, - Species.SPIRITOMB, - Species.PORYGON_Z, - Species.GALLADE, - Species.DUSKNOIR, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.CRESSELIA, - Species.ARCEUS, - Species.VICTINI, - Species.MUNNA, - Species.MUSHARNA, - Species.WOOBAT, - Species.SWOOBAT, - Species.AUDINO, - Species.WHIMSICOTT, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.FRILLISH, - Species.JELLICENT, - Species.KLINKLANG, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.MELOETTA, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.ESPURR, - Species.MEOWSTIC, - Species.SPRITZEE, - Species.AROMATISSE, - Species.INKAY, - Species.MALAMAR, - Species.CARBINK, - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.DIANCIE, - Species.HOOPA, - Species.COMFEY, - Species.ORANGURU, - Species.MIMIKYU, - Species.BRUXISH, - Species.SOLGALEO, - Species.LUNALA, - Species.NIHILEGO, - Species.NECROZMA, - Species.MAGEARNA, - Species.STAKATAKA, - Species.DOTTLER, - Species.ORBEETLE, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.MR_RIME, - Species.RUNERIGUS, - Species.INDEEDEE, - Species.CALYREX, - Species.WYRDEER, - Species.MEOWSCARADA, - Species.ARMAROUGE, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.FARIGIRAF, - Species.SCREAM_TAIL, - Species.FLUTTER_MANE, - Species.IRON_VALIANT, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.ALOLA_EXEGGUTOR, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_SLOWKING, - Species.GALAR_YAMASK, + [MoveId.TRICK_ROOM]: [ + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.PORYGON, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.ESPEON, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.SMOOCHUM, + SpeciesId.CELEBI, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.CHIMECHO, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.MISMAGIUS, + SpeciesId.CHINGLING, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.MIME_JR, + SpeciesId.SPIRITOMB, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.CRESSELIA, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.AUDINO, + SpeciesId.WHIMSICOTT, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.KLINKLANG, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.MELOETTA, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.CARBINK, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.STAKATAKA, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.INDEEDEE, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.MEOWSCARADA, + SpeciesId.ARMAROUGE, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.FARIGIRAF, + SpeciesId.SCREAM_TAIL, + SpeciesId.FLUTTER_MANE, + SpeciesId.IRON_VALIANT, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_YAMASK, ], - [Moves.DRACO_METEOR]: [ - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEW, - Species.KINGDRA, - Species.VIBRAVA, - Species.FLYGON, - Species.ALTARIA, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.LATIAS, - Species.LATIOS, - Species.RAYQUAZA, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.DIALGA, - Species.PALKIA, - Species.GIRATINA, - Species.ARCEUS, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.DRUDDIGON, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.RESHIRAM, - Species.ZEKROM, - Species.KYUREM, - Species.DRAGALGE, - Species.TYRUNT, - Species.TYRANTRUM, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.NOIBAT, - Species.NOIVERN, - Species.ZYGARDE, - Species.SILVALLY, - Species.TURTONATOR, - Species.DRAMPA, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.GUZZLORD, - Species.NAGANADEL, - Species.APPLIN, - Species.FLAPPLE, - Species.APPLETUN, - Species.DRACOZOLT, - Species.DRACOVISH, - Species.DURALUDON, - Species.DREEPY, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ETERNATUS, - Species.REGIDRAGO, - Species.CYCLIZAR, - Species.TATSUGIRI, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.ROARING_MOON, - Species.KORAIDON, - Species.MIRAIDON, - Species.WALKING_WAKE, - Species.DIPPLIN, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.ALOLA_EXEGGUTOR, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, + [MoveId.DRACO_METEOR]: [ + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.KINGDRA, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.ALTARIA, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.RAYQUAZA, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.GIRATINA, + SpeciesId.ARCEUS, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.DRUDDIGON, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.KYUREM, + SpeciesId.DRAGALGE, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.ZYGARDE, + SpeciesId.SILVALLY, + SpeciesId.TURTONATOR, + SpeciesId.DRAMPA, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.GUZZLORD, + SpeciesId.NAGANADEL, + SpeciesId.APPLIN, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.DRACOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.DURALUDON, + SpeciesId.DREEPY, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ETERNATUS, + SpeciesId.REGIDRAGO, + SpeciesId.CYCLIZAR, + SpeciesId.TATSUGIRI, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.DIPPLIN, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, ], - [Moves.LEAF_STORM]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.TANGELA, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.BELLOSSOM, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.SUNKERN, - Species.SUNFLORA, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.BRELOOM, - Species.ROSELIA, - Species.CACNEA, - Species.CACTURNE, - Species.TROPIUS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.BUDEW, - Species.ROSERADE, + [MoveId.LEAF_STORM]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.TANGELA, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.BELLOSSOM, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.BRELOOM, + SpeciesId.ROSELIA, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.TROPIUS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, [ - Species.WORMADAM, + SpeciesId.WORMADAM, "plant", ], - Species.SNOVER, - Species.ABOMASNOW, - Species.TANGROWTH, - Species.LEAFEON, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.PANSAGE, - Species.SIMISAGE, - Species.LEAVANNY, - Species.PETILIL, - Species.LILLIGANT, - Species.MARACTUS, - Species.DEERLING, - Species.SAWSBUCK, - Species.FOONGUS, - Species.AMOONGUSS, - Species.VIRIZION, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.SKIDDO, - Species.GOGOAT, - Species.TREVENANT, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.FOMANTIS, - Species.LURANTIS, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.FLAPPLE, - Species.APPLETUN, - Species.ZARUDE, - Species.CALYREX, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.BRUTE_BONNET, - Species.WO_CHIEN, - Species.IRON_LEAVES, - Species.DIPPLIN, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.OGERPON, - Species.HYDRAPPLE, - Species.SHAYMIN, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.TANGROWTH, + SpeciesId.LEAFEON, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.LEAVANNY, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.MARACTUS, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.VIRIZION, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.TREVENANT, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.ZARUDE, + SpeciesId.CALYREX, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.BRUTE_BONNET, + SpeciesId.WO_CHIEN, + SpeciesId.IRON_LEAVES, + SpeciesId.DIPPLIN, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.OGERPON, + SpeciesId.HYDRAPPLE, + SpeciesId.SHAYMIN, [ - Species.ROTOM, + SpeciesId.ROTOM, "mow", ], - Species.ALOLA_EXEGGUTOR, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_LILLIGANT, - Species.HISUI_DECIDUEYE, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.POWER_WHIP]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.EXEGGUTOR, - Species.LICKITUNG, - Species.TANGELA, - Species.GYARADOS, - Species.MEW, - Species.ROSELIA, - Species.CRADILY, - Species.ROSERADE, - Species.CARNIVINE, - Species.LICKILICKY, - Species.TANGROWTH, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.FERROTHORN, - Species.GOODRA, - Species.GOURGEIST, - Species.TSAREENA, - Species.DHELMISE, - Species.XURKITREE, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.HATTERENE, - Species.GRIMMSNARL, - Species.CUFANT, - Species.COPPERAJAH, - Species.ZARUDE, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.CYCLIZAR, - Species.WO_CHIEN, - Species.OGERPON, - Species.ALOLA_EXEGGUTOR, + [MoveId.POWER_WHIP]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.EXEGGUTOR, + SpeciesId.LICKITUNG, + SpeciesId.TANGELA, + SpeciesId.GYARADOS, + SpeciesId.MEW, + SpeciesId.ROSELIA, + SpeciesId.CRADILY, + SpeciesId.ROSERADE, + SpeciesId.CARNIVINE, + SpeciesId.LICKILICKY, + SpeciesId.TANGROWTH, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.FERROTHORN, + SpeciesId.GOODRA, + SpeciesId.GOURGEIST, + SpeciesId.TSAREENA, + SpeciesId.DHELMISE, + SpeciesId.XURKITREE, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.HATTERENE, + SpeciesId.GRIMMSNARL, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.ZARUDE, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.CYCLIZAR, + SpeciesId.WO_CHIEN, + SpeciesId.OGERPON, + SpeciesId.ALOLA_EXEGGUTOR, ], - [Moves.CROSS_POISON]: [ - Species.PARAS, - Species.PARASECT, - Species.MACHAMP, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.SCYTHER, - Species.KABUTOPS, - Species.MEW, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.GLIGAR, - Species.SCIZOR, - Species.SCEPTILE, - Species.ANORITH, - Species.ARMALDO, - Species.VESPIQUEN, - Species.SKORUPI, - Species.DRAPION, - Species.TOXICROAK, - Species.GLISCOR, - Species.SCOLIPEDE, - Species.GARBODOR, - Species.JOLTIK, - Species.GALVANTULA, - Species.TOXAPEX, - Species.LURANTIS, - Species.SALAZZLE, - Species.NIHILEGO, - Species.NAGANADEL, - Species.OBSTAGOON, - Species.ETERNATUS, - Species.KLEAVOR, - Species.SHROODLE, - Species.GRAFAIAI, - Species.FEZANDIPITI, + [MoveId.CROSS_POISON]: [ + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.MACHAMP, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.SCYTHER, + SpeciesId.KABUTOPS, + SpeciesId.MEW, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.GLIGAR, + SpeciesId.SCIZOR, + SpeciesId.SCEPTILE, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.VESPIQUEN, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.TOXICROAK, + SpeciesId.GLISCOR, + SpeciesId.SCOLIPEDE, + SpeciesId.GARBODOR, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.TOXAPEX, + SpeciesId.LURANTIS, + SpeciesId.SALAZZLE, + SpeciesId.NIHILEGO, + SpeciesId.NAGANADEL, + SpeciesId.OBSTAGOON, + SpeciesId.ETERNATUS, + SpeciesId.KLEAVOR, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.FEZANDIPITI, ], - [Moves.GUNK_SHOT]: [ - Species.EKANS, - Species.ARBOK, - Species.SANDSLASH, - Species.MEOWTH, - Species.PERSIAN, - Species.MANKEY, - Species.PRIMEAPE, - Species.GRIMER, - Species.MUK, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.KOFFING, - Species.WEEZING, - Species.SNORLAX, - Species.MEW, - Species.AIPOM, - Species.GLIGAR, - Species.QWILFISH, - Species.TEDDIURSA, - Species.URSARING, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.PHANPY, - Species.DONPHAN, - Species.ZIGZAGOON, - Species.LINOONE, - Species.PELIPPER, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.GULPIN, - Species.SWALOT, - Species.ZANGOOSE, - Species.SEVIPER, - Species.SHUPPET, - Species.BANETTE, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PACHIRISU, - Species.AMBIPOM, - Species.STUNKY, - Species.SKUNTANK, - Species.MUNCHLAX, - Species.CROAGUNK, - Species.TOXICROAK, - Species.GLISCOR, - Species.ARCEUS, - Species.PATRAT, - Species.WATCHOG, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.KROOKODILE, - Species.TRUBBISH, - Species.GARBODOR, - Species.MINCCINO, - Species.CINCCINO, - Species.DRUDDIGON, - Species.GENESECT, - Species.FROGADIER, - Species.GRENINJA, - Species.DIGGERSBY, - Species.PANCHAM, - Species.PANGORO, - Species.SKRELP, - Species.DRAGALGE, - Species.HOOPA, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.MAREANIE, - Species.TOXAPEX, - Species.SALANDIT, - Species.SALAZZLE, - Species.PASSIMIAN, - Species.KOMALA, - Species.NIHILEGO, - Species.POIPOLE, - Species.NAGANADEL, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.TOXTRICITY, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.ETERNATUS, - Species.URSALUNA, - Species.SNEASLER, - Species.OVERQWIL, - Species.SHROODLE, - Species.GRAFAIAI, - Species.RELLOR, - Species.RABSCA, - Species.VAROOM, - Species.REVAVROOM, - Species.GLIMMET, - Species.GLIMMORA, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.PECHARUNT, + [MoveId.GUNK_SHOT]: [ + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.SANDSLASH, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.SNORLAX, + SpeciesId.MEW, + SpeciesId.AIPOM, + SpeciesId.GLIGAR, + SpeciesId.QWILFISH, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.PELIPPER, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PACHIRISU, + SpeciesId.AMBIPOM, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.MUNCHLAX, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.GLISCOR, + SpeciesId.ARCEUS, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.KROOKODILE, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.DRUDDIGON, + SpeciesId.GENESECT, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.DIGGERSBY, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.HOOPA, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.PASSIMIAN, + SpeciesId.KOMALA, + SpeciesId.NIHILEGO, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.TOXTRICITY, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.ETERNATUS, + SpeciesId.URSALUNA, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.PECHARUNT, [ - Species.WORMADAM, + SpeciesId.WORMADAM, "trash", ], - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.GALAR_MEOWTH, - Species.GALAR_SLOWBRO, - Species.GALAR_WEEZING, - Species.GALAR_SLOWKING, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.IRON_HEAD]: [ - Species.ARCANINE, - Species.GRAVELER, - Species.GOLEM, - Species.MAGNEMITE, - Species.MAGNETON, - Species.ONIX, - Species.CUBONE, - Species.MAROWAK, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.AERODACTYL, - Species.SNORLAX, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEW, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.FORRETRESS, - Species.STEELIX, - Species.SCIZOR, - Species.MANTINE, - Species.SKARMORY, - Species.KINGDRA, - Species.PHANPY, - Species.DONPHAN, - Species.MILTANK, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.HARIYAMA, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.SEVIPER, - Species.LUNATONE, - Species.SOLROCK, - Species.MILOTIC, - Species.GLALIE, - Species.WALREIN, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.BELDUM, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.BRONZOR, - Species.BRONZONG, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.HIPPOWDON, - Species.MAGNEZONE, - Species.RHYPERIOR, - Species.MAMOSWINE, - Species.PROBOPASS, - Species.DIALGA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.ARCEUS, - Species.EMBOAR, - Species.STOUTLAND, - Species.GIGALITH, - Species.EXCADRILL, - Species.DARMANITAN, - Species.SCRAGGY, - Species.SCRAFTY, - Species.CARRACOSTA, - Species.ESCAVALIER, - Species.FERROSEED, - Species.FERROTHORN, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.DRUDDIGON, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.BRAVIARY, - Species.DURANT, - Species.COBALION, - Species.TERRAKION, - Species.KYUREM, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.PANCHAM, - Species.PANGORO, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.HAWLUCHA, - Species.CARBINK, - Species.AVALUGG, - Species.INCINEROAR, - Species.GUMSHOOS, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.MUDBRAY, - Species.MUDSDALE, - Species.STUFFUL, - Species.BEWEAR, - Species.PASSIMIAN, - Species.GOLISOPOD, - Species.TYPE_NULL, - Species.SILVALLY, - Species.MINIOR, - Species.KOMALA, - Species.TURTONATOR, - Species.TOGEDEMARU, - Species.DHELMISE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.SOLGALEO, - Species.NIHILEGO, - Species.BUZZWOLE, - Species.CELESTEELA, - Species.GUZZLORD, - Species.NECROZMA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.STAKATAKA, - Species.MELMETAL, - Species.CINDERACE, - Species.CORVIKNIGHT, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.APPLETUN, - Species.SANDACONDA, - Species.PERRSERKER, - Species.FALINKS, - Species.EISCUE, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.DURALUDON, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.KUBFU, - Species.URSHIFU, - Species.ENAMORUS, - Species.LECHONK, - Species.OINKOLOGNE, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.CERULEDGE, - Species.PALAFIN, - Species.VAROOM, - Species.REVAVROOM, - Species.CYCLIZAR, - Species.ORTHWORM, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.KINGAMBIT, - Species.GREAT_TUSK, - Species.IRON_TREADS, - Species.IRON_HANDS, - Species.IRON_JUGULIS, - Species.IRON_THORNS, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.GHOLDENGO, - Species.ROARING_MOON, - Species.KORAIDON, - Species.OKIDOGI, - Species.ARCHALUDON, - Species.GOUGING_FIRE, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.TERAPAGOS, + [MoveId.IRON_HEAD]: [ + SpeciesId.ARCANINE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.ONIX, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.FORRETRESS, + SpeciesId.STEELIX, + SpeciesId.SCIZOR, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.KINGDRA, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.MILTANK, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.HARIYAMA, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.MILOTIC, + SpeciesId.GLALIE, + SpeciesId.WALREIN, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.BELDUM, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.HIPPOWDON, + SpeciesId.MAGNEZONE, + SpeciesId.RHYPERIOR, + SpeciesId.MAMOSWINE, + SpeciesId.PROBOPASS, + SpeciesId.DIALGA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.ARCEUS, + SpeciesId.EMBOAR, + SpeciesId.STOUTLAND, + SpeciesId.GIGALITH, + SpeciesId.EXCADRILL, + SpeciesId.DARMANITAN, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.CARRACOSTA, + SpeciesId.ESCAVALIER, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.DRUDDIGON, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.BRAVIARY, + SpeciesId.DURANT, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.KYUREM, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.HAWLUCHA, + SpeciesId.CARBINK, + SpeciesId.AVALUGG, + SpeciesId.INCINEROAR, + SpeciesId.GUMSHOOS, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.PASSIMIAN, + SpeciesId.GOLISOPOD, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.TOGEDEMARU, + SpeciesId.DHELMISE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.SOLGALEO, + SpeciesId.NIHILEGO, + SpeciesId.BUZZWOLE, + SpeciesId.CELESTEELA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.STAKATAKA, + SpeciesId.MELMETAL, + SpeciesId.CINDERACE, + SpeciesId.CORVIKNIGHT, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.APPLETUN, + SpeciesId.SANDACONDA, + SpeciesId.PERRSERKER, + SpeciesId.FALINKS, + SpeciesId.EISCUE, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.DURALUDON, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ENAMORUS, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.CERULEDGE, + SpeciesId.PALAFIN, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.CYCLIZAR, + SpeciesId.ORTHWORM, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.KINGAMBIT, + SpeciesId.GREAT_TUSK, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_THORNS, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.GHOLDENGO, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.OKIDOGI, + SpeciesId.ARCHALUDON, + SpeciesId.GOUGING_FIRE, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.TERAPAGOS, [ - Species.WORMADAM, + SpeciesId.WORMADAM, "trash", ], - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_GOLEM, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.GALAR_MEOWTH, - Species.GALAR_DARMANITAN, - Species.HISUI_ARCANINE, - Species.HISUI_TYPHLOSION, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.PALDEA_TAUROS, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.PALDEA_TAUROS, ], - [Moves.STONE_EDGE]: [ - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.DIGLETT, - Species.DUGTRIO, - Species.MANKEY, - Species.PRIMEAPE, - Species.MACHAMP, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.ONIX, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.RHYHORN, - Species.RHYDON, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.SUDOWOODO, - Species.WOOPER, - Species.QUAGSIRE, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.GRANBULL, - Species.SHUCKLE, - Species.HERACROSS, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.PHANPY, - Species.DONPHAN, - Species.HITMONTOP, - Species.ENTEI, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.BLAZIKEN, - Species.SWAMPERT, - Species.BRELOOM, - Species.MAKUHITA, - Species.HARIYAMA, - Species.NOSEPASS, - Species.MAWILE, - Species.LAIRON, - Species.AGGRON, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.CLAYDOL, - Species.CRADILY, - Species.ARMALDO, - Species.ABSOL, - Species.RELICANTH, - Species.SALAMENCE, - Species.METAGROSS, - Species.REGIROCK, - Species.GROUDON, - Species.RAYQUAZA, - Species.TORTERRA, - Species.INFERNAPE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.SHELLOS, - Species.GASTRODON, - Species.BONSLY, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.TOXICROAK, - Species.RHYPERIOR, - Species.GLISCOR, - Species.MAMOSWINE, - Species.GALLADE, - Species.PROBOPASS, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.ARCEUS, - Species.PIGNITE, - Species.EMBOAR, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.THROH, - Species.SAWK, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARMANITAN, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.BEARTIC, - Species.STUNFISK, - Species.MIENFOO, - Species.MIENSHAO, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.DURANT, - Species.HYDREIGON, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.KELDEO, - Species.MELOETTA, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.PANCHAM, - Species.PANGORO, - Species.BINACLE, - Species.BARBARACLE, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.HAWLUCHA, - Species.CARBINK, - Species.BERGMITE, - Species.AVALUGG, - Species.ZYGARDE, - Species.DIANCIE, - Species.VOLCANION, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.MUDBRAY, - Species.MUDSDALE, - Species.SANDYGAST, - Species.PALOSSAND, - Species.MINIOR, - Species.TURTONATOR, - Species.TAPU_BULU, - Species.SOLGALEO, - Species.BUZZWOLE, - Species.CELESTEELA, - Species.GUZZLORD, - Species.NECROZMA, - Species.MARSHADOW, - Species.STAKATAKA, - Species.DREDNAW, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.SILICOBRA, - Species.SANDACONDA, - Species.CURSOLA, - Species.RUNERIGUS, - Species.STONJOURNER, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.DURALUDON, - Species.ZAMAZENTA, - Species.URSHIFU, - Species.KLEAVOR, - Species.URSALUNA, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.KLAWF, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.BOMBIRDIER, - Species.GLIMMET, - Species.GLIMMORA, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.GREAT_TUSK, - Species.IRON_TREADS, - Species.IRON_THORNS, - Species.TING_LU, - Species.ROARING_MOON, - Species.ARCHALUDON, - Species.GOUGING_FIRE, - Species.IRON_BOULDER, - Species.TERAPAGOS, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_MAROWAK, - Species.GALAR_CORSOLA, - Species.GALAR_DARMANITAN, - Species.GALAR_STUNFISK, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_AVALUGG, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + [MoveId.STONE_EDGE]: [ + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.MACHAMP, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.ONIX, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.SUDOWOODO, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.GRANBULL, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.HITMONTOP, + SpeciesId.ENTEI, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.BLAZIKEN, + SpeciesId.SWAMPERT, + SpeciesId.BRELOOM, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.NOSEPASS, + SpeciesId.MAWILE, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CLAYDOL, + SpeciesId.CRADILY, + SpeciesId.ARMALDO, + SpeciesId.ABSOL, + SpeciesId.RELICANTH, + SpeciesId.SALAMENCE, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.TORTERRA, + SpeciesId.INFERNAPE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.BONSLY, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.TOXICROAK, + SpeciesId.RHYPERIOR, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.ARCEUS, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARMANITAN, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.BEARTIC, + SpeciesId.STUNFISK, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.DURANT, + SpeciesId.HYDREIGON, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.HAWLUCHA, + SpeciesId.CARBINK, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.VOLCANION, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.MINIOR, + SpeciesId.TURTONATOR, + SpeciesId.TAPU_BULU, + SpeciesId.SOLGALEO, + SpeciesId.BUZZWOLE, + SpeciesId.CELESTEELA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MARSHADOW, + SpeciesId.STAKATAKA, + SpeciesId.DREDNAW, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.CURSOLA, + SpeciesId.RUNERIGUS, + SpeciesId.STONJOURNER, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.DURALUDON, + SpeciesId.ZAMAZENTA, + SpeciesId.URSHIFU, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.KLAWF, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.BOMBIRDIER, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.GREAT_TUSK, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_THORNS, + SpeciesId.TING_LU, + SpeciesId.ROARING_MOON, + SpeciesId.ARCHALUDON, + SpeciesId.GOUGING_FIRE, + SpeciesId.IRON_BOULDER, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_AVALUGG, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.STEALTH_ROCK]: [ - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.DIGLETT, - Species.DUGTRIO, - Species.PRIMEAPE, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.ONIX, - Species.CUBONE, - Species.MAROWAK, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.PINSIR, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.MEW, - Species.SUDOWOODO, - Species.WOOPER, - Species.QUAGSIRE, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SHUCKLE, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.SKARMORY, - Species.PHANPY, - Species.DONPHAN, - Species.MILTANK, - Species.BLISSEY, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.CELEBI, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.NOSEPASS, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.KECLEON, - Species.RELICANTH, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGISTEEL, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.BIDOOF, - Species.BIBAREL, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.SHELLOS, - Species.GASTRODON, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.RHYPERIOR, - Species.GLISCOR, - Species.MAMOSWINE, - Species.PROBOPASS, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.HEATRAN, - Species.ARCEUS, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.DRILBUR, - Species.EXCADRILL, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DWEBBLE, - Species.CRUSTLE, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.FERROSEED, - Species.FERROTHORN, - Species.STUNFISK, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.HYDREIGON, - Species.COBALION, - Species.TERRAKION, - Species.ZEKROM, - Species.LANDORUS, - Species.BINACLE, - Species.BARBARACLE, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.CARBINK, - Species.DIANCIE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.MUDBRAY, - Species.MUDSDALE, - Species.SANDYGAST, - Species.PALOSSAND, - Species.MINIOR, - Species.KOMMO_O, - Species.NIHILEGO, - Species.NECROZMA, - Species.STAKATAKA, - Species.DREDNAW, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.SILICOBRA, - Species.SANDACONDA, - Species.PERRSERKER, - Species.CURSOLA, - Species.RUNERIGUS, - Species.STONJOURNER, - Species.CUFANT, - Species.COPPERAJAH, - Species.DURALUDON, - Species.KLEAVOR, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.KLAWF, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.BOMBIRDIER, - Species.ORTHWORM, - Species.GLIMMET, - Species.GLIMMORA, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_THORNS, - Species.TING_LU, - Species.ARCHALUDON, - Species.TERAPAGOS, + [MoveId.STEALTH_ROCK]: [ + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.PRIMEAPE, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.ONIX, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.PINSIR, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.MEW, + SpeciesId.SUDOWOODO, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SHUCKLE, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.SKARMORY, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.CELEBI, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.NOSEPASS, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.KECLEON, + SpeciesId.RELICANTH, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGISTEEL, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.RHYPERIOR, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.PROBOPASS, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.HEATRAN, + SpeciesId.ARCEUS, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.STUNFISK, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.HYDREIGON, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.CARBINK, + SpeciesId.DIANCIE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.MINIOR, + SpeciesId.KOMMO_O, + SpeciesId.NIHILEGO, + SpeciesId.NECROZMA, + SpeciesId.STAKATAKA, + SpeciesId.DREDNAW, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.RUNERIGUS, + SpeciesId.STONJOURNER, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DURALUDON, + SpeciesId.KLEAVOR, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.KLAWF, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.BOMBIRDIER, + SpeciesId.ORTHWORM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_THORNS, + SpeciesId.TING_LU, + SpeciesId.ARCHALUDON, + SpeciesId.TERAPAGOS, [ - Species.WORMADAM, + SpeciesId.WORMADAM, "sandy", "trash", ], - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_MAROWAK, - Species.GALAR_MEOWTH, - Species.GALAR_CORSOLA, - Species.GALAR_STUNFISK, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_AVALUGG, - Species.PALDEA_WOOPER, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_AVALUGG, + SpeciesId.PALDEA_WOOPER, ], - [Moves.GRASS_KNOT]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.RATTATA, - Species.RATICATE, - Species.PIKACHU, - Species.RAICHU, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.GOLDUCK, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.DROWZEE, - Species.HYPNO, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CHANSEY, - Species.TANGELA, - Species.STARMIE, - Species.MR_MIME, - Species.JYNX, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.SENTRET, - Species.FURRET, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.BELLOSSOM, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.ESPEON, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.SMOOCHUM, - Species.BLISSEY, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.ZIGZAGOON, - Species.LINOONE, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SHROOMISH, - Species.BRELOOM, - Species.SKITTY, - Species.DELCATTY, - Species.MAWILE, - Species.MEDITITE, - Species.MEDICHAM, - Species.PLUSLE, - Species.MINUN, - Species.ROSELIA, - Species.SPOINK, - Species.GRUMPIG, - Species.CACNEA, - Species.CACTURNE, - Species.ZANGOOSE, - Species.LUNATONE, - Species.SOLROCK, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.KECLEON, - Species.TROPIUS, - Species.CHIMECHO, - Species.METANG, - Species.METAGROSS, - Species.LATIAS, - Species.LATIOS, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.BIDOOF, - Species.BIBAREL, - Species.BUDEW, - Species.ROSERADE, + [MoveId.GRASS_KNOT]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.GOLDUCK, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.BELLOSSOM, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.ESPEON, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.SMOOCHUM, + SpeciesId.BLISSEY, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.MAWILE, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.ROSELIA, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.ZANGOOSE, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.KECLEON, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, [ - Species.WORMADAM, + SpeciesId.WORMADAM, "plant", ], - Species.PACHIRISU, - Species.CHERUBI, - Species.CHERRIM, - Species.AMBIPOM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.CHINGLING, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.MIME_JR, - Species.HAPPINY, - Species.CARNIVINE, - Species.SNOVER, - Species.ABOMASNOW, - Species.TANGROWTH, - Species.TOGEKISS, - Species.LEAFEON, - Species.GALLADE, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.CRESSELIA, - Species.PHIONE, - Species.MANAPHY, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.MARACTUS, - Species.SCRAGGY, - Species.SCRAFTY, - Species.COFAGRIGUS, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.REUNICLUS, - Species.DEERLING, - Species.SAWSBUCK, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FERROTHORN, - Species.EELEKTROSS, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.MIENFOO, - Species.MIENSHAO, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.LANDORUS, - Species.MELOETTA, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.BINACLE, - Species.BARBARACLE, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.HAWLUCHA, - Species.DEDENNE, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.XERNEAS, - Species.ZYGARDE, - Species.HOOPA, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.PASSIMIAN, - Species.TOGEDEMARU, - Species.DRAMPA, - Species.DHELMISE, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.NIHILEGO, - Species.XURKITREE, - Species.CELESTEELA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.ZERAORA, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.THIEVUL, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.FLAPPLE, - Species.APPLETUN, - Species.OBSTAGOON, - Species.MR_RIME, - Species.RUNERIGUS, - Species.ZARUDE, - Species.CALYREX, - Species.SNEASLER, - Species.ENAMORUS, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.PALAFIN, - Species.FARIGIRAF, - Species.KINGAMBIT, - Species.SCREAM_TAIL, - Species.BRUTE_BONNET, - Species.WO_CHIEN, - Species.IRON_VALIANT, - Species.IRON_LEAVES, - Species.DIPPLIN, - Species.MUNKIDORI, - Species.OGERPON, - Species.HYDRAPPLE, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_EXEGGUTOR, - Species.ETERNAL_FLOETTE, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_SLOWKING, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, - Species.HISUI_ZOROARK, - Species.HISUI_DECIDUEYE, + SpeciesId.PACHIRISU, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.AMBIPOM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.CHINGLING, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.CARNIVINE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.TANGROWTH, + SpeciesId.TOGEKISS, + SpeciesId.LEAFEON, + SpeciesId.GALLADE, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.CRESSELIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.MARACTUS, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.COFAGRIGUS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.REUNICLUS, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FERROTHORN, + SpeciesId.EELEKTROSS, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.LANDORUS, + SpeciesId.MELOETTA, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.XERNEAS, + SpeciesId.ZYGARDE, + SpeciesId.HOOPA, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.PASSIMIAN, + SpeciesId.TOGEDEMARU, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.NIHILEGO, + SpeciesId.XURKITREE, + SpeciesId.CELESTEELA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.ZERAORA, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.THIEVUL, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.OBSTAGOON, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.ZARUDE, + SpeciesId.CALYREX, + SpeciesId.SNEASLER, + SpeciesId.ENAMORUS, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.PALAFIN, + SpeciesId.FARIGIRAF, + SpeciesId.KINGAMBIT, + SpeciesId.SCREAM_TAIL, + SpeciesId.BRUTE_BONNET, + SpeciesId.WO_CHIEN, + SpeciesId.IRON_VALIANT, + SpeciesId.IRON_LEAVES, + SpeciesId.DIPPLIN, + SpeciesId.MUNKIDORI, + SpeciesId.OGERPON, + SpeciesId.HYDRAPPLE, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.BUG_BITE]: [ - Species.CATERPIE, - Species.METAPOD, - Species.BUTTERFREE, - Species.WEEDLE, - Species.KAKUNA, - Species.BEEDRILL, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.SCYTHER, - Species.PINSIR, - Species.MEW, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.YANMA, - Species.PINECO, - Species.FORRETRESS, - Species.GLIGAR, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.WURMPLE, - Species.SILCOON, - Species.BEAUTIFLY, - Species.CASCOON, - Species.DUSTOX, - Species.SURSKIT, - Species.MASQUERAIN, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.VOLBEAT, - Species.ILLUMISE, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.ANORITH, - Species.ARMALDO, - Species.KRICKETOT, - Species.KRICKETUNE, - Species.BURMY, - Species.WORMADAM, - Species.MOTHIM, - Species.COMBEE, - Species.VESPIQUEN, - Species.SKORUPI, - Species.DRAPION, - Species.CARNIVINE, - Species.YANMEGA, - Species.GLISCOR, - Species.HEATRAN, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.DWEBBLE, - Species.CRUSTLE, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.JOLTIK, - Species.GALVANTULA, - Species.SHELMET, - Species.ACCELGOR, - Species.HEATMOR, - Species.DURANT, - Species.LARVESTA, - Species.VOLCARONA, - Species.GENESECT, - Species.SCATTERBUG, - Species.SPEWPA, - Species.VIVILLON, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.DEWPIDER, - Species.ARAQUANID, - Species.FOMANTIS, - Species.LURANTIS, - Species.GOLISOPOD, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.SNOM, - Species.FROSMOTH, - Species.KLEAVOR, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.NYMBLE, - Species.LOKIX, - Species.RELLOR, - Species.RABSCA, - Species.SLITHER_WING, - Species.DIPPLIN, - Species.HYDRAPPLE, + [MoveId.BUG_BITE]: [ + SpeciesId.CATERPIE, + SpeciesId.METAPOD, + SpeciesId.BUTTERFREE, + SpeciesId.WEEDLE, + SpeciesId.KAKUNA, + SpeciesId.BEEDRILL, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.SCYTHER, + SpeciesId.PINSIR, + SpeciesId.MEW, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.YANMA, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.GLIGAR, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.WURMPLE, + SpeciesId.SILCOON, + SpeciesId.BEAUTIFLY, + SpeciesId.CASCOON, + SpeciesId.DUSTOX, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.KRICKETOT, + SpeciesId.KRICKETUNE, + SpeciesId.BURMY, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.COMBEE, + SpeciesId.VESPIQUEN, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CARNIVINE, + SpeciesId.YANMEGA, + SpeciesId.GLISCOR, + SpeciesId.HEATRAN, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.GENESECT, + SpeciesId.SCATTERBUG, + SpeciesId.SPEWPA, + SpeciesId.VIVILLON, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.GOLISOPOD, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.SNOM, + SpeciesId.FROSMOTH, + SpeciesId.KLEAVOR, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.SLITHER_WING, + SpeciesId.DIPPLIN, + SpeciesId.HYDRAPPLE, ], - [Moves.CHARGE_BEAM]: [ - Species.RATTATA, - Species.RATICATE, - Species.PIKACHU, - Species.RAICHU, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MAGNEMITE, - Species.MAGNETON, - Species.VOLTORB, - Species.ELECTRODE, - Species.CHANSEY, - Species.MR_MIME, - Species.ELECTABUZZ, - Species.JOLTEON, - Species.PORYGON, - Species.ZAPDOS, - Species.MEWTWO, - Species.MEW, - Species.SENTRET, - Species.FURRET, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.DUNSPARCE, - Species.REMORAID, - Species.OCTILLERY, - Species.PORYGON2, - Species.STANTLER, - Species.ELEKID, - Species.BLISSEY, - Species.RAIKOU, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.ZIGZAGOON, - Species.LINOONE, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SKITTY, - Species.DELCATTY, - Species.MAWILE, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.SPOINK, - Species.GRUMPIG, - Species.LUNATONE, - Species.SOLROCK, - Species.BALTOY, - Species.CLAYDOL, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.CHIMECHO, - Species.ABSOL, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.JIRACHI, - Species.DEOXYS, - Species.BIDOOF, - Species.BIBAREL, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.PACHIRISU, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.CHINGLING, - Species.BRONZOR, - Species.BRONZONG, - Species.MIME_JR, - Species.MAGNEZONE, - Species.ELECTIVIRE, - Species.PORYGON_Z, - Species.GALLADE, - Species.DUSKNOIR, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.GIRATINA, - Species.CRESSELIA, - Species.DARKRAI, - Species.ARCEUS, - Species.VICTINI, - Species.MUNNA, - Species.MUSHARNA, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.WOOBAT, - Species.SWOOBAT, - Species.AUDINO, - Species.SIGILYPH, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.EMOLGA, - Species.JOLTIK, - Species.GALVANTULA, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.TYNAMO, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.DRUDDIGON, - Species.GOLURK, - Species.HYDREIGON, - Species.THUNDURUS, - Species.ZEKROM, - Species.MELOETTA, - Species.GENESECT, - Species.FURFROU, - Species.ESPURR, - Species.MEOWSTIC, - Species.SPRITZEE, - Species.AROMATISSE, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.AMAURA, - Species.AURORUS, - Species.DEDENNE, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.HOOPA, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.SHIINOTIC, - Species.ORANGURU, - Species.MINIOR, - Species.TURTONATOR, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.TAPU_LELE, - Species.LUNALA, - Species.NIHILEGO, - Species.XURKITREE, - Species.NECROZMA, - Species.MAGEARNA, - Species.TOXTRICITY, - Species.PINCURCHIN, - Species.MORPEKO, - Species.REGIELEKI, - Species.WYRDEER, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TADBULB, - Species.BELLIBOLT, - Species.WATTREL, - Species.KILOWATTREL, - Species.FARIGIRAF, - Species.FLUTTER_MANE, - Species.SANDY_SHOCKS, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.IRON_THORNS, - Species.GHOLDENGO, - Species.IRON_VALIANT, - Species.MIRAIDON, - Species.RAGING_BOLT, - Species.ALOLA_RAICHU, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, + [MoveId.CHARGE_BEAM]: [ + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.CHANSEY, + SpeciesId.MR_MIME, + SpeciesId.ELECTABUZZ, + SpeciesId.JOLTEON, + SpeciesId.PORYGON, + SpeciesId.ZAPDOS, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.DUNSPARCE, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.ELEKID, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.MAWILE, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.PACHIRISU, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.CHINGLING, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.MIME_JR, + SpeciesId.MAGNEZONE, + SpeciesId.ELECTIVIRE, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.AUDINO, + SpeciesId.SIGILYPH, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.EMOLGA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.TYNAMO, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.DRUDDIGON, + SpeciesId.GOLURK, + SpeciesId.HYDREIGON, + SpeciesId.THUNDURUS, + SpeciesId.ZEKROM, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.FURFROU, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.DEDENNE, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.HOOPA, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.SHIINOTIC, + SpeciesId.ORANGURU, + SpeciesId.MINIOR, + SpeciesId.TURTONATOR, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.TAPU_LELE, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.XURKITREE, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.TOXTRICITY, + SpeciesId.PINCURCHIN, + SpeciesId.MORPEKO, + SpeciesId.REGIELEKI, + SpeciesId.WYRDEER, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.FARIGIRAF, + SpeciesId.FLUTTER_MANE, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_THORNS, + SpeciesId.GHOLDENGO, + SpeciesId.IRON_VALIANT, + SpeciesId.MIRAIDON, + SpeciesId.RAGING_BOLT, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, ], - [Moves.HONE_CLAWS]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.PARAS, - Species.PARASECT, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.KRABBY, - Species.KINGLER, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.DRAGONITE, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.SPINARAK, - Species.ARIADOS, - Species.AIPOM, - Species.GLIGAR, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.TYRANITAR, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.ZIGZAGOON, - Species.LINOONE, - Species.LOMBRE, - Species.LUDICOLO, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.SABLEYE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.FLYGON, - Species.ALTARIA, - Species.ZANGOOSE, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.ANORITH, - Species.ARMALDO, - Species.KECLEON, - Species.ABSOL, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.GROUDON, - Species.RAYQUAZA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PRINPLUP, - Species.EMPOLEON, - Species.KRICKETUNE, - Species.VESPIQUEN, - Species.AMBIPOM, - Species.GLAMEOW, - Species.PURUGLY, - Species.STUNKY, - Species.SKUNTANK, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.LUCARIO, - Species.SKORUPI, - Species.DRAPION, - Species.WEAVILE, - Species.GLISCOR, - Species.DIALGA, - Species.PALKIA, - Species.GIRATINA, - Species.ARCEUS, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.DRILBUR, - Species.EXCADRILL, - Species.LEAVANNY, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DWEBBLE, - Species.CRUSTLE, - Species.ARCHEN, - Species.ARCHEOPS, - Species.ZORUA, - Species.ZOROARK, - Species.FERROSEED, - Species.FERROTHORN, - Species.EELEKTROSS, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.PAWNIARD, - Species.BISHARP, - Species.RUFFLET, - Species.BRAVIARY, - Species.HEATMOR, - Species.DURANT, - Species.COBALION, - Species.RESHIRAM, - Species.ZEKROM, - Species.KYUREM, - Species.MELOETTA, - Species.GENESECT, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.TALONFLAME, - Species.PANGORO, - Species.BINACLE, - Species.BARBARACLE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.TYRUNT, - Species.TYRANTRUM, - Species.HAWLUCHA, - Species.TREVENANT, - Species.NOIVERN, - Species.YVELTAL, - Species.MIMIKYU, - Species.ZERAORA, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.NICKIT, - Species.THIEVUL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.DURALUDON, - Species.URSALUNA, - Species.SNEASLER, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.BOMBIRDIER, - Species.KINGAMBIT, - Species.WALKING_WAKE, - Species.ARCHALUDON, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.GALAR_MEOWTH, - Species.GALAR_LINOONE, - Species.HISUI_SNEASEL, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, + [MoveId.HONE_CLAWS]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.AIPOM, + SpeciesId.GLIGAR, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.TYRANITAR, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.SABLEYE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.FLYGON, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.KECLEON, + SpeciesId.ABSOL, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.KRICKETUNE, + SpeciesId.VESPIQUEN, + SpeciesId.AMBIPOM, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.LUCARIO, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.WEAVILE, + SpeciesId.GLISCOR, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.GIRATINA, + SpeciesId.ARCEUS, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.LEAVANNY, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.EELEKTROSS, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.COBALION, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.KYUREM, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.TALONFLAME, + SpeciesId.PANGORO, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.HAWLUCHA, + SpeciesId.TREVENANT, + SpeciesId.NOIVERN, + SpeciesId.YVELTAL, + SpeciesId.MIMIKYU, + SpeciesId.ZERAORA, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.DURALUDON, + SpeciesId.URSALUNA, + SpeciesId.SNEASLER, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.BOMBIRDIER, + SpeciesId.KINGAMBIT, + SpeciesId.WALKING_WAKE, + SpeciesId.ARCHALUDON, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_LINOONE, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, ], - [Moves.WONDER_ROOM]: [ - Species.CLEFAIRY, - Species.CLEFABLE, - Species.PSYDUCK, - Species.GOLDUCK, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.STARMIE, - Species.MR_MIME, - Species.JYNX, - Species.PORYGON, - Species.MEWTWO, - Species.MEW, - Species.CLEFFA, - Species.UMBREON, - Species.SLOWKING, - Species.MISDREAVUS, - Species.PORYGON2, - Species.SMOOCHUM, - Species.LUGIA, - Species.CELEBI, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SABLEYE, - Species.ALTARIA, - Species.SOLROCK, - Species.BALTOY, - Species.CLAYDOL, - Species.KECLEON, - Species.DUSKULL, - Species.DUSCLOPS, - Species.LATIOS, - Species.DEOXYS, - Species.MISMAGIUS, - Species.BRONZOR, - Species.BRONZONG, - Species.MIME_JR, - Species.SPIRITOMB, - Species.PORYGON_Z, - Species.GALLADE, - Species.DUSKNOIR, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DARKRAI, - Species.MUNNA, - Species.MUSHARNA, - Species.YAMASK, - Species.COFAGRIGUS, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.MELOETTA, - Species.BRAIXEN, - Species.DELPHOX, - Species.ESPURR, - Species.MEOWSTIC, - Species.CARBINK, - Species.XERNEAS, - Species.DIANCIE, - Species.HOOPA, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.DEWPIDER, - Species.ARAQUANID, - Species.MORELULL, - Species.SHIINOTIC, - Species.ORANGURU, - Species.BRUXISH, - Species.TAPU_LELE, - Species.TAPU_FINI, - Species.LUNALA, - Species.NIHILEGO, - Species.STAKATAKA, - Species.DOTTLER, - Species.ORBEETLE, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATTERENE, - Species.GRIMMSNARL, - Species.MR_RIME, - Species.RUNERIGUS, - Species.ALCREMIE, - Species.STONJOURNER, - Species.INDEEDEE, - Species.CALYREX, - Species.ALOLA_NINETALES, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_SLOWKING, - Species.GALAR_YAMASK, + [MoveId.WONDER_ROOM]: [ + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.PORYGON, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CLEFFA, + SpeciesId.UMBREON, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.PORYGON2, + SpeciesId.SMOOCHUM, + SpeciesId.LUGIA, + SpeciesId.CELEBI, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SABLEYE, + SpeciesId.ALTARIA, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.KECLEON, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.LATIOS, + SpeciesId.DEOXYS, + SpeciesId.MISMAGIUS, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.MIME_JR, + SpeciesId.SPIRITOMB, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DARKRAI, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.MELOETTA, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.CARBINK, + SpeciesId.XERNEAS, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.ORANGURU, + SpeciesId.BRUXISH, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_FINI, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.STAKATAKA, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATTERENE, + SpeciesId.GRIMMSNARL, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.ALCREMIE, + SpeciesId.STONJOURNER, + SpeciesId.INDEEDEE, + SpeciesId.CALYREX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_YAMASK, ], - [Moves.PSYSHOCK]: [ - Species.CLEFAIRY, - Species.CLEFABLE, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.PSYDUCK, - Species.GOLDUCK, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.DROWZEE, - Species.HYPNO, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.STARMIE, - Species.MR_MIME, - Species.JYNX, - Species.PORYGON, - Species.MEWTWO, - Species.MEW, - Species.CLEFFA, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.ESPEON, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.PORYGON2, - Species.STANTLER, - Species.SMOOCHUM, - Species.LUGIA, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.MEDITITE, - Species.MEDICHAM, - Species.SPOINK, - Species.GRUMPIG, - Species.LUNATONE, - Species.SOLROCK, - Species.BALTOY, - Species.CLAYDOL, - Species.CHIMECHO, - Species.METANG, - Species.METAGROSS, - Species.LATIAS, - Species.LATIOS, - Species.JIRACHI, - Species.DEOXYS, - Species.MISMAGIUS, - Species.CHINGLING, - Species.BRONZOR, - Species.BRONZONG, - Species.MIME_JR, - Species.SPIRITOMB, - Species.TOGEKISS, - Species.PORYGON_Z, - Species.GALLADE, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.CRESSELIA, - Species.DARKRAI, - Species.ARCEUS, - Species.VICTINI, - Species.MUNNA, - Species.MUSHARNA, - Species.WOOBAT, - Species.SWOOBAT, - Species.AUDINO, - Species.SIGILYPH, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.MELOETTA, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.ESPURR, - Species.MEOWSTIC, - Species.AROMATISSE, - Species.INKAY, - Species.MALAMAR, - Species.SYLVEON, - Species.KLEFKI, - Species.XERNEAS, - Species.DIANCIE, - Species.HOOPA, - Species.ORANGURU, - Species.BRUXISH, - Species.TAPU_LELE, - Species.SOLGALEO, - Species.LUNALA, - Species.NIHILEGO, - Species.NECROZMA, - Species.MAGEARNA, - Species.BLACEPHALON, - Species.DOTTLER, - Species.ORBEETLE, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.MR_RIME, - Species.ALCREMIE, - Species.INDEEDEE, - Species.CALYREX, - Species.WYRDEER, - Species.ARMAROUGE, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.FARIGIRAF, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.FLUTTER_MANE, - Species.GHOLDENGO, - Species.IRON_VALIANT, - Species.MUNKIDORI, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.ALOLA_RAICHU, - Species.ALOLA_NINETALES, - Species.ALOLA_EXEGGUTOR, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_SLOWKING, - Species.HISUI_BRAVIARY, + [MoveId.PSYSHOCK]: [ + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.PORYGON, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CLEFFA, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.ESPEON, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.SMOOCHUM, + SpeciesId.LUGIA, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.CHIMECHO, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.MISMAGIUS, + SpeciesId.CHINGLING, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.MIME_JR, + SpeciesId.SPIRITOMB, + SpeciesId.TOGEKISS, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.CRESSELIA, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.AUDINO, + SpeciesId.SIGILYPH, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.MELOETTA, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.AROMATISSE, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.SYLVEON, + SpeciesId.KLEFKI, + SpeciesId.XERNEAS, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.ORANGURU, + SpeciesId.BRUXISH, + SpeciesId.TAPU_LELE, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.BLACEPHALON, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.MR_RIME, + SpeciesId.ALCREMIE, + SpeciesId.INDEEDEE, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.ARMAROUGE, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.FARIGIRAF, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.FLUTTER_MANE, + SpeciesId.GHOLDENGO, + SpeciesId.IRON_VALIANT, + SpeciesId.MUNKIDORI, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_SLOWKING, + SpeciesId.HISUI_BRAVIARY, ], - [Moves.VENOSHOCK]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.EKANS, - Species.ARBOK, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.ZUBAT, - Species.GOLBAT, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GRIMER, - Species.MUK, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.KOFFING, - Species.WEEZING, - Species.MEW, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.BELLOSSOM, - Species.PINECO, - Species.FORRETRESS, - Species.GLIGAR, - Species.QWILFISH, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.SHROOMISH, - Species.BRELOOM, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.CACNEA, - Species.CACTURNE, - Species.SEVIPER, - Species.BUDEW, - Species.ROSERADE, - Species.WORMADAM, - Species.MOTHIM, - Species.VESPIQUEN, - Species.STUNKY, - Species.SKUNTANK, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.GLISCOR, - Species.SEISMITOAD, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.TRUBBISH, - Species.GARBODOR, - Species.FOONGUS, - Species.AMOONGUSS, - Species.SHELMET, - Species.ACCELGOR, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.MAREANIE, - Species.TOXAPEX, - Species.SALANDIT, - Species.SALAZZLE, - Species.GOLISOPOD, - Species.TURTONATOR, - Species.BRUXISH, - Species.NIHILEGO, - Species.POIPOLE, - Species.NAGANADEL, - Species.TOXTRICITY, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.PINCURCHIN, - Species.ETERNATUS, - Species.SNEASLER, - Species.OVERQWIL, - Species.SHROODLE, - Species.GRAFAIAI, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.VAROOM, - Species.REVAVROOM, - Species.GLIMMET, - Species.GLIMMORA, - Species.CLODSIRE, - Species.BRUTE_BONNET, - Species.IRON_MOTH, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.PECHARUNT, - Species.ALOLA_RATICATE, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.GALAR_SLOWBRO, - Species.GALAR_WEEZING, - Species.GALAR_SLOWKING, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.PALDEA_WOOPER, + [MoveId.VENOSHOCK]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.MEW, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.BELLOSSOM, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.GLIGAR, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SEVIPER, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.GLISCOR, + SpeciesId.SEISMITOAD, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.GOLISOPOD, + SpeciesId.TURTONATOR, + SpeciesId.BRUXISH, + SpeciesId.NIHILEGO, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.TOXTRICITY, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.PINCURCHIN, + SpeciesId.ETERNATUS, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.CLODSIRE, + SpeciesId.BRUTE_BONNET, + SpeciesId.IRON_MOTH, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.PECHARUNT, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_SLOWKING, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.PALDEA_WOOPER, ], - [Moves.MAGIC_ROOM]: [ - Species.WIGGLYTUFF, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.DROWZEE, - Species.HYPNO, - Species.MR_MIME, - Species.JYNX, - Species.MEWTWO, - Species.MEW, - Species.NATU, - Species.XATU, - Species.ESPEON, - Species.MISDREAVUS, - Species.STANTLER, - Species.SMOOCHUM, - Species.CELEBI, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.LUNATONE, - Species.SHUPPET, - Species.BANETTE, - Species.LATIAS, - Species.JIRACHI, - Species.MISMAGIUS, - Species.MIME_JR, - Species.GALLADE, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.CRESSELIA, - Species.SIGILYPH, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.MELOETTA, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.ESPURR, - Species.MEOWSTIC, - Species.KLEFKI, - Species.HOOPA, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.DEWPIDER, - Species.ARAQUANID, - Species.MORELULL, - Species.SHIINOTIC, - Species.ORANGURU, - Species.MIMIKYU, - Species.BRUXISH, - Species.TAPU_LELE, - Species.TAPU_FINI, - Species.LUNALA, - Species.STAKATAKA, - Species.DOTTLER, - Species.ORBEETLE, - Species.HATTERENE, - Species.MR_RIME, - Species.ALCREMIE, - Species.INDEEDEE, - Species.CALYREX, - Species.ALOLA_RAICHU, - Species.GALAR_RAPIDASH, - Species.GALAR_MR_MIME, + [MoveId.MAGIC_ROOM]: [ + SpeciesId.WIGGLYTUFF, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.ESPEON, + SpeciesId.MISDREAVUS, + SpeciesId.STANTLER, + SpeciesId.SMOOCHUM, + SpeciesId.CELEBI, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.LUNATONE, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.LATIAS, + SpeciesId.JIRACHI, + SpeciesId.MISMAGIUS, + SpeciesId.MIME_JR, + SpeciesId.GALLADE, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.CRESSELIA, + SpeciesId.SIGILYPH, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.MELOETTA, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.KLEFKI, + SpeciesId.HOOPA, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.ORANGURU, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_FINI, + SpeciesId.LUNALA, + SpeciesId.STAKATAKA, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.HATTERENE, + SpeciesId.MR_RIME, + SpeciesId.ALCREMIE, + SpeciesId.INDEEDEE, + SpeciesId.CALYREX, + SpeciesId.ALOLA_RAICHU, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_MR_MIME, ], - [Moves.SMACK_DOWN]: [ - Species.BLASTOISE, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.DIGLETT, - Species.DUGTRIO, - Species.MANKEY, - Species.PRIMEAPE, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.ONIX, - Species.CUBONE, - Species.MAROWAK, - Species.RHYHORN, - Species.RHYDON, - Species.PINSIR, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.MEW, - Species.SUDOWOODO, - Species.AIPOM, - Species.STEELIX, - Species.SHUCKLE, - Species.HERACROSS, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.REMORAID, - Species.OCTILLERY, - Species.PHANPY, - Species.DONPHAN, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.SLAKING, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.NOSEPASS, - Species.AGGRON, - Species.CAMERUPT, - Species.LUNATONE, - Species.SOLROCK, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.RELICANTH, - Species.REGIROCK, - Species.GROUDON, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.MONFERNO, - Species.INFERNAPE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.AMBIPOM, - Species.BONSLY, - Species.RHYPERIOR, - Species.MAMOSWINE, - Species.PROBOPASS, - Species.REGIGIGAS, - Species.EMBOAR, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.KROOKODILE, - Species.DARMANITAN, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.SIGILYPH, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.GARBODOR, - Species.DRUDDIGON, - Species.TERRAKION, - Species.TORNADUS, - Species.THUNDURUS, - Species.LANDORUS, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.BINACLE, - Species.BARBARACLE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.CARBINK, - Species.DIANCIE, - Species.VOLCANION, - Species.DECIDUEYE, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.TOXAPEX, - Species.MUDBRAY, - Species.MUDSDALE, - Species.PASSIMIAN, - Species.TURTONATOR, - Species.BUZZWOLE, - Species.CELESTEELA, - Species.GUZZLORD, - Species.MARSHADOW, - Species.STAKATAKA, - Species.BLACEPHALON, - Species.CINDERACE, - Species.INTELEON, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.STONJOURNER, - Species.COPPERAJAH, - Species.KLEAVOR, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.KLAWF, - Species.TINKATON, - Species.ORTHWORM, - Species.GLIMMET, - Species.GLIMMORA, - Species.ANNIHILAPE, - Species.GREAT_TUSK, - Species.IRON_THORNS, - Species.ARCHALUDON, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_MAROWAK, - Species.GALAR_SLOWBRO, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_DECIDUEYE, - Species.BLOODMOON_URSALUNA, + [MoveId.SMACK_DOWN]: [ + SpeciesId.BLASTOISE, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.ONIX, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.PINSIR, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.MEW, + SpeciesId.SUDOWOODO, + SpeciesId.AIPOM, + SpeciesId.STEELIX, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.SLAKING, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.NOSEPASS, + SpeciesId.AGGRON, + SpeciesId.CAMERUPT, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.RELICANTH, + SpeciesId.REGIROCK, + SpeciesId.GROUDON, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.AMBIPOM, + SpeciesId.BONSLY, + SpeciesId.RHYPERIOR, + SpeciesId.MAMOSWINE, + SpeciesId.PROBOPASS, + SpeciesId.REGIGIGAS, + SpeciesId.EMBOAR, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.KROOKODILE, + SpeciesId.DARMANITAN, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.SIGILYPH, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.GARBODOR, + SpeciesId.DRUDDIGON, + SpeciesId.TERRAKION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.LANDORUS, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.CARBINK, + SpeciesId.DIANCIE, + SpeciesId.VOLCANION, + SpeciesId.DECIDUEYE, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.TOXAPEX, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.PASSIMIAN, + SpeciesId.TURTONATOR, + SpeciesId.BUZZWOLE, + SpeciesId.CELESTEELA, + SpeciesId.GUZZLORD, + SpeciesId.MARSHADOW, + SpeciesId.STAKATAKA, + SpeciesId.BLACEPHALON, + SpeciesId.CINDERACE, + SpeciesId.INTELEON, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.STONJOURNER, + SpeciesId.COPPERAJAH, + SpeciesId.KLEAVOR, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.KLAWF, + SpeciesId.TINKATON, + SpeciesId.ORTHWORM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.ANNIHILAPE, + SpeciesId.GREAT_TUSK, + SpeciesId.IRON_THORNS, + SpeciesId.ARCHALUDON, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.SLUDGE_WAVE]: [ - Species.EKANS, - Species.ARBOK, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.VILEPLUME, - Species.VENOMOTH, - Species.DUGTRIO, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GRIMER, - Species.MUK, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.KOFFING, - Species.WEEZING, - Species.MEW, - Species.SPINARAK, - Species.ARIADOS, - Species.WOOPER, - Species.QUAGSIRE, - Species.QWILFISH, - Species.SHUCKLE, - Species.OCTILLERY, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.GULPIN, - Species.SWALOT, - Species.SEVIPER, - Species.CRAWDAUNT, - Species.CRADILY, - Species.GASTRODON, - Species.STUNKY, - Species.SKUNTANK, - Species.CROAGUNK, - Species.TOXICROAK, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.TRUBBISH, - Species.GARBODOR, - Species.FRILLISH, - Species.JELLICENT, - Species.STUNFISK, - Species.TORNADUS, - Species.THUNDURUS, - Species.LANDORUS, - Species.GRENINJA, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.ZYGARDE, - Species.VOLCANION, - Species.MAREANIE, - Species.TOXAPEX, - Species.SALANDIT, - Species.SALAZZLE, - Species.GOLISOPOD, - Species.DHELMISE, - Species.NIHILEGO, - Species.GUZZLORD, - Species.POIPOLE, - Species.NAGANADEL, - Species.TOXTRICITY, - Species.ETERNATUS, - Species.SNEASLER, - Species.OVERQWIL, - Species.SHROODLE, - Species.GRAFAIAI, - Species.VAROOM, - Species.REVAVROOM, - Species.GLIMMET, - Species.GLIMMORA, - Species.CLODSIRE, - Species.IRON_MOTH, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.PECHARUNT, - Species.ALOLA_RATICATE, - Species.ALOLA_DUGTRIO, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.GALAR_SLOWBRO, - Species.GALAR_WEEZING, - Species.GALAR_SLOWKING, - Species.GALAR_STUNFISK, - Species.HISUI_SNEASEL, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.PALDEA_WOOPER, + [MoveId.SLUDGE_WAVE]: [ + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.VILEPLUME, + SpeciesId.VENOMOTH, + SpeciesId.DUGTRIO, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.MEW, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.QWILFISH, + SpeciesId.SHUCKLE, + SpeciesId.OCTILLERY, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.SEVIPER, + SpeciesId.CRAWDAUNT, + SpeciesId.CRADILY, + SpeciesId.GASTRODON, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.STUNFISK, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.LANDORUS, + SpeciesId.GRENINJA, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.ZYGARDE, + SpeciesId.VOLCANION, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.GOLISOPOD, + SpeciesId.DHELMISE, + SpeciesId.NIHILEGO, + SpeciesId.GUZZLORD, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.TOXTRICITY, + SpeciesId.ETERNATUS, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.CLODSIRE, + SpeciesId.IRON_MOTH, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.PECHARUNT, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.PALDEA_WOOPER, ], - [Moves.HEAVY_SLAM]: [ - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.GRAVELER, - Species.GOLEM, - Species.MAGNEMITE, - Species.MAGNETON, - Species.ONIX, - Species.RHYHORN, - Species.RHYDON, - Species.SNORLAX, - Species.MEW, - Species.FORRETRESS, - Species.STEELIX, - Species.PHANPY, - Species.DONPHAN, - Species.MILTANK, - Species.TYRANITAR, - Species.SLAKING, - Species.MAKUHITA, - Species.HARIYAMA, - Species.NOSEPASS, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.WALREIN, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.KYOGRE, - Species.GROUDON, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.BRONZOR, - Species.BRONZONG, - Species.HIPPOWDON, - Species.MAGNEZONE, - Species.RHYPERIOR, - Species.MAMOSWINE, - Species.PROBOPASS, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.ARCEUS, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.CRUSTLE, - Species.FERROTHORN, - Species.EELEKTROSS, - Species.CUBCHOO, - Species.BEARTIC, - Species.GOLETT, - Species.GOLURK, - Species.COBALION, - Species.CARBINK, - Species.AVALUGG, - Species.VOLCANION, - Species.MUDBRAY, - Species.MUDSDALE, - Species.TURTONATOR, - Species.DHELMISE, - Species.SOLGALEO, - Species.CELESTEELA, - Species.GUZZLORD, - Species.MAGEARNA, - Species.STAKATAKA, - Species.MELMETAL, - Species.CORVIKNIGHT, - Species.CARKOL, - Species.COALOSSAL, - Species.FLAPPLE, - Species.APPLETUN, - Species.PERRSERKER, - Species.STONJOURNER, - Species.CUFANT, - Species.COPPERAJAH, - Species.DURALUDON, - Species.ZAMAZENTA, - Species.GLASTRIER, - Species.URSALUNA, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.TINKATON, - Species.REVAVROOM, - Species.ORTHWORM, - Species.CETODDLE, - Species.CETITAN, - Species.DONDOZO, - Species.CLODSIRE, - Species.DUDUNSPARCE, - Species.GREAT_TUSK, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_HANDS, - Species.IRON_THORNS, - Species.GHOLDENGO, - Species.TING_LU, - Species.KORAIDON, - Species.MIRAIDON, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.RAGING_BOLT, - Species.IRON_CROWN, - Species.TERAPAGOS, - Species.ALOLA_GOLEM, + [MoveId.HEAVY_SLAM]: [ + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.ONIX, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.SNORLAX, + SpeciesId.MEW, + SpeciesId.FORRETRESS, + SpeciesId.STEELIX, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.MILTANK, + SpeciesId.TYRANITAR, + SpeciesId.SLAKING, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.NOSEPASS, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.WALREIN, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.HIPPOWDON, + SpeciesId.MAGNEZONE, + SpeciesId.RHYPERIOR, + SpeciesId.MAMOSWINE, + SpeciesId.PROBOPASS, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.ARCEUS, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.CRUSTLE, + SpeciesId.FERROTHORN, + SpeciesId.EELEKTROSS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.COBALION, + SpeciesId.CARBINK, + SpeciesId.AVALUGG, + SpeciesId.VOLCANION, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.TURTONATOR, + SpeciesId.DHELMISE, + SpeciesId.SOLGALEO, + SpeciesId.CELESTEELA, + SpeciesId.GUZZLORD, + SpeciesId.MAGEARNA, + SpeciesId.STAKATAKA, + SpeciesId.MELMETAL, + SpeciesId.CORVIKNIGHT, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.PERRSERKER, + SpeciesId.STONJOURNER, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DURALUDON, + SpeciesId.ZAMAZENTA, + SpeciesId.GLASTRIER, + SpeciesId.URSALUNA, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.TINKATON, + SpeciesId.REVAVROOM, + SpeciesId.ORTHWORM, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.DONDOZO, + SpeciesId.CLODSIRE, + SpeciesId.DUDUNSPARCE, + SpeciesId.GREAT_TUSK, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_THORNS, + SpeciesId.GHOLDENGO, + SpeciesId.TING_LU, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_CROWN, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_GOLEM, [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", ], - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.BLOODMOON_URSALUNA, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.ELECTRO_BALL]: [ - Species.PIKACHU, - Species.RAICHU, - Species.MAGNEMITE, - Species.MAGNETON, - Species.VOLTORB, - Species.ELECTRODE, - Species.ELECTABUZZ, - Species.JOLTEON, - Species.ZAPDOS, - Species.MEWTWO, - Species.MEW, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.ELEKID, - Species.RAIKOU, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.PACHIRISU, - Species.MAGNEZONE, - Species.ELECTIVIRE, - Species.ROTOM, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.EMOLGA, - Species.JOLTIK, - Species.GALVANTULA, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.THUNDURUS, - Species.ZEKROM, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.DEDENNE, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.TOGEDEMARU, - Species.TAPU_KOKO, - Species.XURKITREE, - Species.MAGEARNA, - Species.ZERAORA, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.WOOLOO, - Species.DUBWOOL, - Species.YAMPER, - Species.BOLTUND, - Species.TOXTRICITY, - Species.PINCURCHIN, - Species.MORPEKO, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.REGIELEKI, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TADBULB, - Species.BELLIBOLT, - Species.WATTREL, - Species.KILOWATTREL, - Species.RABSCA, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_THORNS, - Species.GHOLDENGO, - Species.MIRAIDON, - Species.RAGING_BOLT, - Species.ALOLA_RAICHU, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, + [MoveId.ELECTRO_BALL]: [ + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.ELECTABUZZ, + SpeciesId.JOLTEON, + SpeciesId.ZAPDOS, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.ELEKID, + SpeciesId.RAIKOU, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.PACHIRISU, + SpeciesId.MAGNEZONE, + SpeciesId.ELECTIVIRE, + SpeciesId.ROTOM, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.EMOLGA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.THUNDURUS, + SpeciesId.ZEKROM, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.DEDENNE, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.TOGEDEMARU, + SpeciesId.TAPU_KOKO, + SpeciesId.XURKITREE, + SpeciesId.MAGEARNA, + SpeciesId.ZERAORA, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.WOOLOO, + SpeciesId.DUBWOOL, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.TOXTRICITY, + SpeciesId.PINCURCHIN, + SpeciesId.MORPEKO, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.REGIELEKI, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.RABSCA, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_THORNS, + SpeciesId.GHOLDENGO, + SpeciesId.MIRAIDON, + SpeciesId.RAGING_BOLT, + SpeciesId.ALOLA_RAICHU, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, ], - [Moves.FLAME_CHARGE]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.VULPIX, - Species.NINETALES, - Species.GROWLITHE, - Species.ARCANINE, - Species.PONYTA, - Species.RAPIDASH, - Species.MAGMAR, - Species.FLAREON, - Species.MOLTRES, - Species.MEW, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.SLUGMA, - Species.MAGCARGO, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.MAGBY, - Species.ENTEI, - Species.HO_OH, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.MAGMORTAR, - Species.HEATRAN, - Species.VICTINI, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.PANSEAR, - Species.SIMISEAR, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.DARUMAKA, - Species.DARMANITAN, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.LARVESTA, - Species.VOLCARONA, - Species.RESHIRAM, - Species.GENESECT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.LITLEO, - Species.PYROAR, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.VOLCANION, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.SALANDIT, - Species.SALAZZLE, - Species.TYPE_NULL, - Species.SILVALLY, - Species.TURTONATOR, - Species.SOLGALEO, - Species.CELESTEELA, - Species.BLACEPHALON, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.YAMPER, - Species.CARKOL, - Species.COALOSSAL, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.CHARCADET, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.SLITHER_WING, - Species.IRON_MOTH, - Species.CHI_YU, - Species.KORAIDON, - Species.GOUGING_FIRE, - Species.ALOLA_MAROWAK, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_TYPHLOSION, + [MoveId.FLAME_CHARGE]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.MAGMAR, + SpeciesId.FLAREON, + SpeciesId.MOLTRES, + SpeciesId.MEW, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.MAGBY, + SpeciesId.ENTEI, + SpeciesId.HO_OH, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.MAGMORTAR, + SpeciesId.HEATRAN, + SpeciesId.VICTINI, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.RESHIRAM, + SpeciesId.GENESECT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.VOLCANION, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.TURTONATOR, + SpeciesId.SOLGALEO, + SpeciesId.CELESTEELA, + SpeciesId.BLACEPHALON, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.YAMPER, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.CHARCADET, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.SLITHER_WING, + SpeciesId.IRON_MOTH, + SpeciesId.CHI_YU, + SpeciesId.KORAIDON, + SpeciesId.GOUGING_FIRE, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_TYPHLOSION, [ - Species.PALDEA_TAUROS, + SpeciesId.PALDEA_TAUROS, "blaze", ], ], - [Moves.LOW_SWEEP]: [ - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.DROWZEE, - Species.HYPNO, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.MEWTWO, - Species.MEW, - Species.SUDOWOODO, - Species.POLITOED, - Species.AIPOM, - Species.SNEASEL, - Species.TYROGUE, - Species.HITMONTOP, - Species.GROVYLE, - Species.SCEPTILE, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.NUZLEAF, - Species.SHIFTRY, - Species.BRELOOM, - Species.VIGOROTH, - Species.SLAKING, - Species.MAKUHITA, - Species.HARIYAMA, - Species.SABLEYE, - Species.MEDITITE, - Species.MEDICHAM, - Species.GRUMPIG, - Species.ZANGOOSE, - Species.DEOXYS, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.BUIZEL, - Species.FLOATZEL, - Species.AMBIPOM, - Species.BUNEARY, - Species.LOPUNNY, - Species.RIOLU, - Species.LUCARIO, - Species.CROAGUNK, - Species.TOXICROAK, - Species.WEAVILE, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.GALLADE, - Species.PIGNITE, - Species.EMBOAR, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.THROH, - Species.SAWK, - Species.KROKOROK, - Species.KROOKODILE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.ZOROARK, - Species.GOTHITELLE, - Species.HAXORUS, - Species.MIENFOO, - Species.MIENSHAO, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.MELOETTA, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.GRENINJA, - Species.PANCHAM, - Species.PANGORO, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.HAWLUCHA, - Species.DECIDUEYE, - Species.INCINEROAR, - Species.GUMSHOOS, - Species.MUDBRAY, - Species.MUDSDALE, - Species.LURANTIS, - Species.STUFFUL, - Species.BEWEAR, - Species.STEENEE, - Species.TSAREENA, - Species.PASSIMIAN, - Species.KOMALA, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.MARSHADOW, - Species.ZERAORA, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.GRIMMSNARL, - Species.STONJOURNER, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.SNEASLER, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.LOKIX, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.GRAFAIAI, - Species.FLAMIGO, - Species.ANNIHILAPE, - Species.KINGAMBIT, - Species.SLITHER_WING, - Species.IRON_HANDS, - Species.GHOLDENGO, - Species.KORAIDON, - Species.OKIDOGI, - Species.OGERPON, + [MoveId.LOW_SWEEP]: [ + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.AIPOM, + SpeciesId.SNEASEL, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.BRELOOM, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.SABLEYE, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.GRUMPIG, + SpeciesId.ZANGOOSE, + SpeciesId.DEOXYS, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.AMBIPOM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.WEAVILE, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.GALLADE, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.ZOROARK, + SpeciesId.GOTHITELLE, + SpeciesId.HAXORUS, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.MELOETTA, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.GRENINJA, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.HAWLUCHA, + SpeciesId.DECIDUEYE, + SpeciesId.INCINEROAR, + SpeciesId.GUMSHOOS, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.LURANTIS, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.PASSIMIAN, + SpeciesId.KOMALA, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.MARSHADOW, + SpeciesId.ZERAORA, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.GRIMMSNARL, + SpeciesId.STONJOURNER, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.SNEASLER, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.LOKIX, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.GRAFAIAI, + SpeciesId.FLAMIGO, + SpeciesId.ANNIHILAPE, + SpeciesId.KINGAMBIT, + SpeciesId.SLITHER_WING, + SpeciesId.IRON_HANDS, + SpeciesId.GHOLDENGO, + SpeciesId.KORAIDON, + SpeciesId.OKIDOGI, + SpeciesId.OGERPON, [ - Species.LYCANROC, + SpeciesId.LYCANROC, "midnight", ], - Species.GALAR_ZAPDOS, - Species.GALAR_SLOWKING, - Species.HISUI_SNEASEL, - Species.HISUI_LILLIGANT, - Species.HISUI_ZOROARK, - Species.HISUI_DECIDUEYE, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_SLOWKING, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.ACID_SPRAY]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.EKANS, - Species.ARBOK, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.VENONAT, - Species.VENOMOTH, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GRIMER, - Species.MUK, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.KOFFING, - Species.WEEZING, - Species.MAGMAR, - Species.MEW, - Species.SPINARAK, - Species.ARIADOS, - Species.BELLOSSOM, - Species.WOOPER, - Species.QUAGSIRE, - Species.QWILFISH, - Species.REMORAID, - Species.OCTILLERY, - Species.MAGBY, - Species.GULPIN, - Species.SWALOT, - Species.SEVIPER, - Species.STUNKY, - Species.SKUNTANK, - Species.CROAGUNK, - Species.TOXICROAK, - Species.CARNIVINE, - Species.MAGMORTAR, - Species.ARCEUS, - Species.SCRAGGY, - Species.SCRAFTY, - Species.TRUBBISH, - Species.GARBODOR, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.FERROSEED, - Species.FERROTHORN, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.ACCELGOR, - Species.SKRELP, - Species.DRAGALGE, - Species.SLIGGOO, - Species.GOODRA, - Species.MAREANIE, - Species.TOXAPEX, - Species.SALANDIT, - Species.SALAZZLE, - Species.NIHILEGO, - Species.FLAPPLE, - Species.TOXTRICITY, - Species.SNEASLER, - Species.OVERQWIL, - Species.ARMAROUGE, - Species.TADBULB, - Species.BELLIBOLT, - Species.SHROODLE, - Species.GRAFAIAI, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.VAROOM, - Species.REVAVROOM, - Species.GLIMMET, - Species.GLIMMORA, - Species.CLODSIRE, - Species.IRON_MOTH, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.PECHARUNT, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.GALAR_SLOWBRO, - Species.GALAR_WEEZING, - Species.GALAR_SLOWKING, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.PALDEA_WOOPER, + [MoveId.ACID_SPRAY]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.MAGMAR, + SpeciesId.MEW, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.BELLOSSOM, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.QWILFISH, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.MAGBY, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.SEVIPER, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.MAGMORTAR, + SpeciesId.ARCEUS, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.ACCELGOR, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.NIHILEGO, + SpeciesId.FLAPPLE, + SpeciesId.TOXTRICITY, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.ARMAROUGE, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.CLODSIRE, + SpeciesId.IRON_MOTH, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.PECHARUNT, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_SLOWKING, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.PALDEA_WOOPER, ], - [Moves.FOUL_PLAY]: [ - Species.VULPIX, - Species.NINETALES, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.VOLTORB, - Species.ELECTRODE, - Species.MR_MIME, - Species.PORYGON, - Species.MEWTWO, - Species.MEW, - Species.SPINARAK, - Species.ARIADOS, - Species.XATU, - Species.SUDOWOODO, - Species.AIPOM, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.SNEASEL, - Species.DELIBIRD, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.PORYGON2, - Species.TYRANITAR, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.MASQUERAIN, - Species.SABLEYE, - Species.MAWILE, - Species.CACNEA, - Species.CACTURNE, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.ABSOL, - Species.GLALIE, - Species.AMBIPOM, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.STUNKY, - Species.SKUNTANK, - Species.BONSLY, - Species.SPIRITOMB, - Species.CROAGUNK, - Species.TOXICROAK, - Species.WEAVILE, - Species.PORYGON_Z, - Species.ROTOM, - Species.UXIE, - Species.DARKRAI, - Species.ARCEUS, - Species.PURRLOIN, - Species.LIEPARD, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.ZORUA, - Species.ZOROARK, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.FOONGUS, - Species.AMOONGUSS, - Species.STUNFISK, - Species.PAWNIARD, - Species.BISHARP, - Species.VULLABY, - Species.MANDIBUZZ, - Species.TORNADUS, - Species.THUNDURUS, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.DIGGERSBY, - Species.PANCHAM, - Species.PANGORO, - Species.INKAY, - Species.MALAMAR, - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.YVELTAL, - Species.HOOPA, - Species.SALANDIT, - Species.SALAZZLE, - Species.ORANGURU, - Species.NIHILEGO, - Species.PHEROMOSA, - Species.MARSHADOW, - Species.BLACEPHALON, - Species.NICKIT, - Species.THIEVUL, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.PERRSERKER, - Species.MR_RIME, - Species.MORPEKO, - Species.DURALUDON, - Species.SPECTRIER, - Species.MEOWSCARADA, - Species.SQUAWKABILLY, - Species.SHROODLE, - Species.GRAFAIAI, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.FLITTLE, - Species.ESPATHRA, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.WIGLETT, - Species.WUGTRIO, - Species.BOMBIRDIER, - Species.FARIGIRAF, - Species.KINGAMBIT, - Species.WO_CHIEN, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.ARCHALUDON, - Species.PECHARUNT, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_MUK, + [MoveId.FOUL_PLAY]: [ + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.MR_MIME, + SpeciesId.PORYGON, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.XATU, + SpeciesId.SUDOWOODO, + SpeciesId.AIPOM, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.SNEASEL, + SpeciesId.DELIBIRD, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.PORYGON2, + SpeciesId.TYRANITAR, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.MASQUERAIN, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.ABSOL, + SpeciesId.GLALIE, + SpeciesId.AMBIPOM, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BONSLY, + SpeciesId.SPIRITOMB, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.WEAVILE, + SpeciesId.PORYGON_Z, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.STUNFISK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.DIGGERSBY, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.YVELTAL, + SpeciesId.HOOPA, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.ORANGURU, + SpeciesId.NIHILEGO, + SpeciesId.PHEROMOSA, + SpeciesId.MARSHADOW, + SpeciesId.BLACEPHALON, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.PERRSERKER, + SpeciesId.MR_RIME, + SpeciesId.MORPEKO, + SpeciesId.DURALUDON, + SpeciesId.SPECTRIER, + SpeciesId.MEOWSCARADA, + SpeciesId.SQUAWKABILLY, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.BOMBIRDIER, + SpeciesId.FARIGIRAF, + SpeciesId.KINGAMBIT, + SpeciesId.WO_CHIEN, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.ARCHALUDON, + SpeciesId.PECHARUNT, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_MUK, [ - Species.LYCANROC, + SpeciesId.LYCANROC, "midnight", ], - Species.GALAR_MEOWTH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_STUNFISK, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_STUNFISK, [ - Species.URSHIFU, + SpeciesId.URSHIFU, "single-strike", ], [ - Species.CALYREX, + SpeciesId.CALYREX, "shadow", ], - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, ], - [Moves.ROUND]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.SEEL, - Species.DEWGONG, - Species.GRIMER, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.ONIX, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.VOLTORB, - Species.ELECTRODE, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.PORYGON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.YANMA, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.KINGDRA, - Species.PHANPY, - Species.DONPHAN, - Species.PORYGON2, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.NOSEPASS, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.FEEBAS, - Species.MILOTIC, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.TROPIUS, - Species.CHIMECHO, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.BIDOOF, - Species.BIBAREL, - Species.KRICKETUNE, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.BUDEW, - Species.ROSERADE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.WORMADAM, - Species.MOTHIM, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.CHERUBI, - Species.CHERRIM, - Species.SHELLOS, - Species.GASTRODON, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.STUNKY, - Species.SKUNTANK, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.MIME_JR, - Species.HAPPINY, - Species.CHATOT, - Species.SPIRITOMB, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.CARNIVINE, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.YANMEGA, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.PORYGON_Z, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.PHIONE, - Species.MANAPHY, - Species.DARKRAI, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.MUNNA, - Species.MUSHARNA, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.WOOBAT, - Species.SWOOBAT, - Species.DRILBUR, - Species.EXCADRILL, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.BASCULIN, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.MARACTUS, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.TRUBBISH, - Species.GARBODOR, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.DUCKLETT, - Species.SWANNA, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.JOLTIK, - Species.GALVANTULA, - Species.FERROSEED, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.SHELMET, - Species.ACCELGOR, - Species.STUNFISK, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.DURANT, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.KELDEO, - Species.MELOETTA, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.LITLEO, - Species.PYROAR, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.ESPURR, - Species.MEOWSTIC, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.CARBINK, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.BERGMITE, - Species.AVALUGG, - Species.NOIBAT, - Species.NOIVERN, - Species.XERNEAS, - Species.YVELTAL, - Species.ZYGARDE, - Species.DIANCIE, - Species.HOOPA, - Species.VOLCANION, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.MUDBRAY, - Species.MUDSDALE, - Species.DEWPIDER, - Species.ARAQUANID, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.SALANDIT, - Species.SALAZZLE, - Species.STUFFUL, - Species.BEWEAR, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.PASSIMIAN, - Species.WIMPOD, - Species.GOLISOPOD, - Species.SANDYGAST, - Species.PALOSSAND, - Species.TYPE_NULL, - Species.SILVALLY, - Species.MINIOR, - Species.KOMALA, - Species.TURTONATOR, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.BRUXISH, - Species.DRAMPA, - Species.DHELMISE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.SOLGALEO, - Species.LUNALA, - Species.NIHILEGO, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.XURKITREE, - Species.CELESTEELA, - Species.KARTANA, - Species.GUZZLORD, - Species.NECROZMA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.POIPOLE, - Species.NAGANADEL, - Species.STAKATAKA, - Species.BLACEPHALON, - Species.ZERAORA, - Species.MELTAN, - Species.MELMETAL, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.SKWOVET, - Species.GREEDENT, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.DOTTLER, - Species.ORBEETLE, - Species.NICKIT, - Species.THIEVUL, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.WOOLOO, - Species.DUBWOOL, - Species.CHEWTLE, - Species.DREDNAW, - Species.YAMPER, - Species.BOLTUND, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.FLAPPLE, - Species.APPLETUN, - Species.SILICOBRA, - Species.SANDACONDA, - Species.CRAMORANT, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.TOXEL, - Species.TOXTRICITY, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.CURSOLA, - Species.SIRFETCHD, - Species.MR_RIME, - Species.RUNERIGUS, - Species.MILCERY, - Species.ALCREMIE, - Species.FALINKS, - Species.PINCURCHIN, - Species.SNOM, - Species.FROSMOTH, - Species.STONJOURNER, - Species.EISCUE, - Species.INDEEDEE, - Species.MORPEKO, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.DURALUDON, - Species.DREEPY, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.ETERNATUS, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.REGIELEKI, - Species.REGIDRAGO, - Species.GLASTRIER, - Species.SPECTRIER, - Species.CALYREX, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.ETERNAL_FLOETTE, - Species.GALAR_MEOWTH, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_FARFETCHD, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.GALAR_YAMASK, - Species.GALAR_STUNFISK, + [MoveId.ROUND]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.PORYGON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.YANMA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.KINGDRA, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.NOSEPASS, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.KRICKETUNE, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.CHATOT, + SpeciesId.SPIRITOMB, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.BASCULIN, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.MARACTUS, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.STUNFISK, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.XURKITREE, + SpeciesId.CELESTEELA, + SpeciesId.KARTANA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.STAKATAKA, + SpeciesId.BLACEPHALON, + SpeciesId.ZERAORA, + SpeciesId.MELTAN, + SpeciesId.MELMETAL, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.WOOLOO, + SpeciesId.DUBWOOL, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.TOXEL, + SpeciesId.TOXTRICITY, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.SIRFETCHD, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.MILCERY, + SpeciesId.ALCREMIE, + SpeciesId.FALINKS, + SpeciesId.PINCURCHIN, + SpeciesId.SNOM, + SpeciesId.FROSMOTH, + SpeciesId.STONJOURNER, + SpeciesId.EISCUE, + SpeciesId.INDEEDEE, + SpeciesId.MORPEKO, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.DURALUDON, + SpeciesId.DREEPY, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.ETERNATUS, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.REGIELEKI, + SpeciesId.REGIDRAGO, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.CALYREX, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_YAMASK, + SpeciesId.GALAR_STUNFISK, ], - [Moves.ECHOED_VOICE]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SPEAROW, - Species.FEAROW, - Species.PIKACHU, - Species.RAICHU, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.DODUO, - Species.DODRIO, - Species.SEEL, - Species.DEWGONG, - Species.CUBONE, - Species.MAROWAK, - Species.CHANSEY, - Species.JYNX, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.POLITOED, - Species.ESPEON, - Species.UMBREON, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.PHANPY, - Species.DONPHAN, - Species.SMOOCHUM, - Species.MILTANK, - Species.BLISSEY, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.ZIGZAGOON, - Species.LINOONE, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.SKITTY, - Species.DELCATTY, - Species.PLUSLE, - Species.MINUN, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.SWABLU, - Species.ALTARIA, - Species.CHIMECHO, - Species.ABSOL, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.RAYQUAZA, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.BIDOOF, - Species.BIBAREL, - Species.KRICKETUNE, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.MISMAGIUS, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.HAPPINY, - Species.CHATOT, - Species.TOGEKISS, - Species.LEAFEON, - Species.GLACEON, - Species.GALLADE, - Species.DIALGA, - Species.PALKIA, - Species.GIRATINA, - Species.ARCEUS, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.PURRLOIN, - Species.LIEPARD, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.AUDINO, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.MINCCINO, - Species.CINCCINO, - Species.DEERLING, - Species.SAWSBUCK, - Species.ELGYEM, - Species.BEHEEYEM, - Species.CUBCHOO, - Species.BEARTIC, - Species.HYDREIGON, - Species.RESHIRAM, - Species.ZEKROM, - Species.KYUREM, - Species.MELOETTA, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.LITLEO, - Species.PYROAR, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.ESPURR, - Species.MEOWSTIC, - Species.SPRITZEE, - Species.AROMATISSE, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.NOIBAT, - Species.NOIVERN, - Species.XERNEAS, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.ROCKRUFF, - Species.LYCANROC, - Species.COMFEY, - Species.DRAMPA, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.NIHILEGO, - Species.PHEROMOSA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.POIPOLE, - Species.NAGANADEL, - Species.ZERAORA, - Species.ARCTOZOLT, - Species.LECHONK, - Species.OINKOLOGNE, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.CETODDLE, - Species.CETITAN, - Species.ALOLA_RAICHU, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GOLEM, - Species.ALOLA_MAROWAK, - Species.ETERNAL_FLOETTE, + [MoveId.ECHOED_VOICE]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.CHANSEY, + SpeciesId.JYNX, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.POLITOED, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.SMOOCHUM, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.RAYQUAZA, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.KRICKETUNE, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.MISMAGIUS, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.HAPPINY, + SpeciesId.CHATOT, + SpeciesId.TOGEKISS, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GALLADE, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.GIRATINA, + SpeciesId.ARCEUS, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.AUDINO, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.HYDREIGON, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.KYUREM, + SpeciesId.MELOETTA, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.COMFEY, + SpeciesId.DRAMPA, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.NIHILEGO, + SpeciesId.PHEROMOSA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.ZERAORA, + SpeciesId.ARCTOZOLT, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.ETERNAL_FLOETTE, ], - [Moves.STORED_POWER]: [ - Species.CLEFAIRY, - Species.CLEFABLE, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ALAKAZAM, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.DROWZEE, - Species.HYPNO, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CHANSEY, - Species.MR_MIME, - Species.JYNX, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.MEWTWO, - Species.MEW, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.CLEFFA, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.ESPEON, - Species.UMBREON, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.DUNSPARCE, - Species.STANTLER, - Species.SMOOCHUM, - Species.BLISSEY, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.MEDITITE, - Species.MEDICHAM, - Species.SPOINK, - Species.GRUMPIG, - Species.LUNATONE, - Species.SOLROCK, - Species.CLAYDOL, - Species.CHIMECHO, - Species.LATIAS, - Species.LATIOS, - Species.JIRACHI, - Species.DEOXYS, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.MISMAGIUS, - Species.CHINGLING, - Species.BRONZOR, - Species.BRONZONG, - Species.MIME_JR, - Species.HAPPINY, - Species.SPIRITOMB, - Species.TOGEKISS, - Species.LEAFEON, - Species.GLACEON, - Species.GALLADE, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.CRESSELIA, - Species.MANAPHY, - Species.ARCEUS, - Species.VICTINI, - Species.MUNNA, - Species.MUSHARNA, - Species.WOOBAT, - Species.SWOOBAT, - Species.SIGILYPH, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.MEOWSTIC, - Species.INKAY, - Species.MALAMAR, - Species.SYLVEON, - Species.KLEFKI, - Species.DIANCIE, - Species.PRIMARINA, - Species.RIBOMBEE, - Species.COMFEY, - Species.ORANGURU, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.NECROZMA, - Species.MAGEARNA, - Species.BLACEPHALON, - Species.DOTTLER, - Species.ORBEETLE, - Species.TOXTRICITY, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.MR_RIME, - Species.MILCERY, - Species.ALCREMIE, - Species.INDEEDEE, - Species.CALYREX, - Species.WYRDEER, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.VELUZA, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.SCREAM_TAIL, - Species.FLUTTER_MANE, - Species.IRON_VALIANT, - Species.MUNKIDORI, - Species.IRON_CROWN, - Species.TERAPAGOS, - Species.ALOLA_RAICHU, - Species.ALOLA_VULPIX, - Species.ETERNAL_FLOETTE, - Species.ALOLA_NINETALES, - Species.ALOLA_EXEGGUTOR, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_SLOWKING, - Species.HISUI_BRAVIARY, + [MoveId.STORED_POWER]: [ + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ALAKAZAM, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CHANSEY, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.CLEFFA, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.DUNSPARCE, + SpeciesId.STANTLER, + SpeciesId.SMOOCHUM, + SpeciesId.BLISSEY, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.CLAYDOL, + SpeciesId.CHIMECHO, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.MISMAGIUS, + SpeciesId.CHINGLING, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.SPIRITOMB, + SpeciesId.TOGEKISS, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GALLADE, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.CRESSELIA, + SpeciesId.MANAPHY, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.SIGILYPH, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.MEOWSTIC, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.SYLVEON, + SpeciesId.KLEFKI, + SpeciesId.DIANCIE, + SpeciesId.PRIMARINA, + SpeciesId.RIBOMBEE, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.BLACEPHALON, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.TOXTRICITY, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.MR_RIME, + SpeciesId.MILCERY, + SpeciesId.ALCREMIE, + SpeciesId.INDEEDEE, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.VELUZA, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.SCREAM_TAIL, + SpeciesId.FLUTTER_MANE, + SpeciesId.IRON_VALIANT, + SpeciesId.MUNKIDORI, + SpeciesId.IRON_CROWN, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_SLOWKING, + SpeciesId.HISUI_BRAVIARY, ], - [Moves.ALLY_SWITCH]: [ - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.DIGLETT, - Species.DUGTRIO, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.PONYTA, - Species.RAPIDASH, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.MAROWAK, - Species.CHANSEY, - Species.STARMIE, - Species.MR_MIME, - Species.JYNX, - Species.PORYGON, - Species.MEWTWO, - Species.MEW, - Species.NATU, - Species.XATU, - Species.ESPEON, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.FORRETRESS, - Species.PORYGON2, - Species.TYROGUE, - Species.BLISSEY, - Species.CELEBI, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SHEDINJA, - Species.SABLEYE, - Species.SPOINK, - Species.GRUMPIG, - Species.LUNATONE, - Species.SOLROCK, - Species.BALTOY, - Species.CLAYDOL, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.CHIMECHO, - Species.METANG, - Species.METAGROSS, - Species.LATIAS, - Species.LATIOS, - Species.JIRACHI, - Species.DEOXYS, - Species.WORMADAM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.MISMAGIUS, - Species.CHINGLING, - Species.BRONZOR, - Species.BRONZONG, - Species.MIME_JR, - Species.SPIRITOMB, - Species.MAGNEZONE, - Species.TOGEKISS, - Species.PORYGON_Z, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.CRESSELIA, - Species.MUNNA, - Species.MUSHARNA, - Species.ZEBSTRIKA, - Species.WOOBAT, - Species.SWOOBAT, - Species.AUDINO, - Species.YAMASK, - Species.COFAGRIGUS, - Species.ARCHEN, - Species.ARCHEOPS, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.KLANG, - Species.KLINKLANG, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.MIENFOO, - Species.MIENSHAO, - Species.GOLETT, - Species.GOLURK, - Species.MELOETTA, - Species.GENESECT, - Species.BRAIXEN, - Species.DELPHOX, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.ESPURR, - Species.MEOWSTIC, - Species.SPRITZEE, - Species.AROMATISSE, - Species.INKAY, - Species.MALAMAR, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.HAWLUCHA, - Species.DEDENNE, - Species.CARBINK, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.DIANCIE, - Species.HOOPA, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.COMFEY, - Species.ORANGURU, - Species.BRUXISH, - Species.DHELMISE, - Species.TAPU_LELE, - Species.NIHILEGO, - Species.NECROZMA, - Species.NAGANADEL, - Species.STAKATAKA, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.DOTTLER, - Species.ORBEETLE, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.MR_RIME, - Species.RUNERIGUS, - Species.INDEEDEE, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.CALYREX, - Species.SPRIGATITO, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.FLITTLE, - Species.GREAVARD, - Species.IRON_LEAVES, - Species.ALOLA_RAICHU, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_MAROWAK, - Species.ETERNAL_FLOETTE, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_YAMASK, + [MoveId.ALLY_SWITCH]: [ + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.MAROWAK, + SpeciesId.CHANSEY, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.PORYGON, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.ESPEON, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.FORRETRESS, + SpeciesId.PORYGON2, + SpeciesId.TYROGUE, + SpeciesId.BLISSEY, + SpeciesId.CELEBI, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SHEDINJA, + SpeciesId.SABLEYE, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.CHIMECHO, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.WORMADAM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.MISMAGIUS, + SpeciesId.CHINGLING, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.MIME_JR, + SpeciesId.SPIRITOMB, + SpeciesId.MAGNEZONE, + SpeciesId.TOGEKISS, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.CRESSELIA, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.ZEBSTRIKA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.AUDINO, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.BRUXISH, + SpeciesId.DHELMISE, + SpeciesId.TAPU_LELE, + SpeciesId.NIHILEGO, + SpeciesId.NECROZMA, + SpeciesId.NAGANADEL, + SpeciesId.STAKATAKA, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.INDEEDEE, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.CALYREX, + SpeciesId.SPRIGATITO, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.FLITTLE, + SpeciesId.GREAVARD, + SpeciesId.IRON_LEAVES, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_YAMASK, ], - [Moves.SCALD]: [ - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.PSYDUCK, - Species.GOLDUCK, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.KRABBY, - Species.KINGLER, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.GYARADOS, - Species.VAPOREON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.CHINCHOU, - Species.LANTURN, - Species.MARILL, - Species.AZUMARILL, - Species.POLITOED, - Species.WOOPER, - Species.QUAGSIRE, - Species.SLOWKING, - Species.QWILFISH, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.MANTINE, - Species.KINGDRA, - Species.RAIKOU, - Species.SUICUNE, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.WINGULL, - Species.PELIPPER, - Species.SURSKIT, - Species.MASQUERAIN, - Species.AZURILL, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.FEEBAS, - Species.MILOTIC, - Species.CASTFORM, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.KYOGRE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.BIBAREL, - Species.BUIZEL, - Species.FLOATZEL, - Species.SHELLOS, - Species.GASTRODON, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.PHIONE, - Species.MANAPHY, - Species.EMBOAR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PANPOUR, - Species.SIMIPOUR, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.BASCULIN, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.DUCKLETT, - Species.SWANNA, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.STUNFISK, - Species.KELDEO, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.GOODRA, - Species.VOLCANION, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.DEWPIDER, - Species.ARAQUANID, - Species.WIMPOD, - Species.GOLISOPOD, - Species.BRUXISH, - Species.TAPU_FINI, - Species.INTELEON, - Species.DREDNAW, - Species.CARKOL, - Species.COALOSSAL, - Species.CRAMORANT, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.CURSOLA, - Species.PINCURCHIN, - Species.DRACOVISH, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.WALKING_WAKE, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_STUNFISK, + [MoveId.SCALD]: [ + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.GYARADOS, + SpeciesId.VAPOREON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.POLITOED, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.QWILFISH, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.MANTINE, + SpeciesId.KINGDRA, + SpeciesId.RAIKOU, + SpeciesId.SUICUNE, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.AZURILL, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.KYOGRE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.BIBAREL, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.BASCULIN, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.STUNFISK, + SpeciesId.KELDEO, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.GOODRA, + SpeciesId.VOLCANION, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.BRUXISH, + SpeciesId.TAPU_FINI, + SpeciesId.INTELEON, + SpeciesId.DREDNAW, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.CURSOLA, + SpeciesId.PINCURCHIN, + SpeciesId.DRACOVISH, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.WALKING_WAKE, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_STUNFISK, [ - Species.URSHIFU, + SpeciesId.URSHIFU, "rapid-strike", ], ], - [Moves.HEX]: [ - Species.NIDOQUEEN, - Species.NIDOKING, - Species.VULPIX, - Species.NINETALES, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GRIMER, - Species.MUK, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.HYPNO, - Species.MEWTWO, - Species.MEW, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.MURKROW, - Species.MISDREAVUS, - Species.DUNSPARCE, - Species.QWILFISH, - Species.SHIFTRY, - Species.SHEDINJA, - Species.SABLEYE, - Species.BALTOY, - Species.CLAYDOL, - Species.CASTFORM, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.VESPIQUEN, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.STUNKY, - Species.SKUNTANK, - Species.BRONZOR, - Species.BRONZONG, - Species.SPIRITOMB, - Species.GALLADE, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.GIRATINA, - Species.ARCEUS, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.YAMASK, - Species.COFAGRIGUS, - Species.ZORUA, - Species.ZOROARK, - Species.AMOONGUSS, - Species.FRILLISH, - Species.JELLICENT, - Species.EELEKTROSS, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.DELPHOX, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.DECIDUEYE, - Species.TOXAPEX, - Species.SANDYGAST, - Species.PALOSSAND, - Species.MIMIKYU, - Species.DHELMISE, - Species.LUNALA, - Species.NIHILEGO, - Species.MARSHADOW, - Species.NAGANADEL, - Species.TOXTRICITY, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.CURSOLA, - Species.RUNERIGUS, - Species.PINCURCHIN, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.SPECTRIER, - Species.BASCULEGION, - Species.SKELEDIRGE, - Species.CERULEDGE, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.ESPATHRA, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.DUDUNSPARCE, - Species.BRUTE_BONNET, - Species.FLUTTER_MANE, - Species.GIMMIGHOUL, - Species.GHOLDENGO, - Species.WO_CHIEN, - Species.CHIEN_PAO, - Species.TING_LU, - Species.CHI_YU, - Species.IRON_VALIANT, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.PECHARUNT, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_MAROWAK, - Species.MAROWAK, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_YAMASK, + [MoveId.HEX]: [ + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.HYPNO, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.MURKROW, + SpeciesId.MISDREAVUS, + SpeciesId.DUNSPARCE, + SpeciesId.QWILFISH, + SpeciesId.SHIFTRY, + SpeciesId.SHEDINJA, + SpeciesId.SABLEYE, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.CASTFORM, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.VESPIQUEN, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.SPIRITOMB, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.GIRATINA, + SpeciesId.ARCEUS, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.AMOONGUSS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.EELEKTROSS, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.DELPHOX, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.DECIDUEYE, + SpeciesId.TOXAPEX, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.MIMIKYU, + SpeciesId.DHELMISE, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.MARSHADOW, + SpeciesId.NAGANADEL, + SpeciesId.TOXTRICITY, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.CURSOLA, + SpeciesId.RUNERIGUS, + SpeciesId.PINCURCHIN, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.SPECTRIER, + SpeciesId.BASCULEGION, + SpeciesId.SKELEDIRGE, + SpeciesId.CERULEDGE, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.ESPATHRA, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.DUDUNSPARCE, + SpeciesId.BRUTE_BONNET, + SpeciesId.FLUTTER_MANE, + SpeciesId.GIMMIGHOUL, + SpeciesId.GHOLDENGO, + SpeciesId.WO_CHIEN, + SpeciesId.CHIEN_PAO, + SpeciesId.TING_LU, + SpeciesId.CHI_YU, + SpeciesId.IRON_VALIANT, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.PECHARUNT, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.MAROWAK, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_YAMASK, [ - Species.CALYREX, + SpeciesId.CALYREX, "shadow", ], - Species.HISUI_TYPHLOSION, - Species.HISUI_QWILFISH, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, ], - [Moves.SKY_DROP]: [ - Species.CHARIZARD, - Species.AERODACTYL, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRAGONITE, - Species.MEW, - Species.SKARMORY, - Species.LUGIA, - Species.HO_OH, - Species.PELIPPER, - Species.RAYQUAZA, - Species.RUFFLET, - Species.BRAVIARY, - Species.TORNADUS, - Species.THUNDURUS, - Species.HAWLUCHA, - Species.YVELTAL, - Species.VIKAVOLT, - Species.TAPU_KOKO, - Species.LUNALA, - Species.NAGANADEL, + [MoveId.SKY_DROP]: [ + SpeciesId.CHARIZARD, + SpeciesId.AERODACTYL, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.SKARMORY, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.PELIPPER, + SpeciesId.RAYQUAZA, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.HAWLUCHA, + SpeciesId.YVELTAL, + SpeciesId.VIKAVOLT, + SpeciesId.TAPU_KOKO, + SpeciesId.LUNALA, + SpeciesId.NAGANADEL, ], - [Moves.INCINERATE]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.GROWLITHE, - Species.ARCANINE, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.GRIMER, - Species.MUK, - Species.CUBONE, - Species.MAROWAK, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.MAGMAR, - Species.TAUROS, - Species.GYARADOS, - Species.FLAREON, - Species.AERODACTYL, - Species.SNORLAX, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.SLOWKING, - Species.DUNSPARCE, - Species.SNUBBULL, - Species.GRANBULL, - Species.SLUGMA, - Species.MAGCARGO, - Species.REMORAID, - Species.OCTILLERY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.MAGBY, - Species.BLISSEY, - Species.ENTEI, - Species.HO_OH, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.SABLEYE, - Species.MAWILE, - Species.AGGRON, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.FLYGON, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SOLROCK, - Species.CASTFORM, - Species.KECLEON, - Species.ABSOL, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.GROUDON, - Species.RAYQUAZA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.HONCHKROW, - Species.STUNKY, - Species.SKUNTANK, - Species.HAPPINY, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.DARKRAI, - Species.ARCEUS, - Species.VICTINI, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.PANSEAR, - Species.SIMISEAR, - Species.AUDINO, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.SCRAGGY, - Species.SCRAFTY, - Species.ZORUA, - Species.ZOROARK, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.DRUDDIGON, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.LITLEO, - Species.PYROAR, - Species.GOODRA, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.VOLCANION, - Species.SALANDIT, - Species.SALAZZLE, - Species.TURTONATOR, - Species.BLACEPHALON, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.CHARCADET, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.DUDUNSPARCE, - Species.CHI_YU, - Species.ROARING_MOON, - Species.GOUGING_FIRE, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_MAROWAK, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_WEEZING, - Species.GALAR_SLOWKING, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_TYPHLOSION, - Species.HISUI_GOODRA, - Species.PALDEA_TAUROS, + [MoveId.INCINERATE]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.MAGMAR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.FLAREON, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.SLOWKING, + SpeciesId.DUNSPARCE, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.MAGBY, + SpeciesId.BLISSEY, + SpeciesId.ENTEI, + SpeciesId.HO_OH, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.AGGRON, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.FLYGON, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SOLROCK, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.ABSOL, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.HONCHKROW, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.HAPPINY, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.AUDINO, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.DRUDDIGON, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.GOODRA, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.VOLCANION, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.TURTONATOR, + SpeciesId.BLACEPHALON, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.CHARCADET, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.DUDUNSPARCE, + SpeciesId.CHI_YU, + SpeciesId.ROARING_MOON, + SpeciesId.GOUGING_FIRE, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_GOODRA, + SpeciesId.PALDEA_TAUROS, ], - [Moves.QUASH]: [ - Species.NIDOQUEEN, - Species.NIDOKING, - Species.KINGLER, - Species.MEW, - Species.MURKROW, - Species.SLOWKING, - Species.KINGDRA, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.SLAKING, - Species.SABLEYE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.VESPIQUEN, - Species.HONCHKROW, - Species.SPIRITOMB, - Species.ARCEUS, - Species.PANCHAM, - Species.PANGORO, - Species.HOOPA, - Species.INCINEROAR, - Species.ORICORIO, - Species.ORANGURU, - Species.PALOSSAND, - Species.PYUKUMUKU, - Species.KOMALA, - Species.BLACEPHALON, - Species.HATENNA, - Species.MORPEKO, - Species.TINKATINK, - Species.IRON_LEAVES, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, + [MoveId.QUASH]: [ + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.KINGLER, + SpeciesId.MEW, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.KINGDRA, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.SLAKING, + SpeciesId.SABLEYE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.VESPIQUEN, + SpeciesId.HONCHKROW, + SpeciesId.SPIRITOMB, + SpeciesId.ARCEUS, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.HOOPA, + SpeciesId.INCINEROAR, + SpeciesId.ORICORIO, + SpeciesId.ORANGURU, + SpeciesId.PALOSSAND, + SpeciesId.PYUKUMUKU, + SpeciesId.KOMALA, + SpeciesId.BLACEPHALON, + SpeciesId.HATENNA, + SpeciesId.MORPEKO, + SpeciesId.TINKATINK, + SpeciesId.IRON_LEAVES, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, ], - [Moves.ACROBATICS]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.ZUBAT, - Species.GOLBAT, - Species.VENOMOTH, - Species.MANKEY, - Species.PRIMEAPE, - Species.FARFETCHD, - Species.SCYTHER, - Species.ZAPDOS, - Species.MOLTRES, - Species.MEW, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.CROBAT, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.MURKROW, - Species.GLIGAR, - Species.SCIZOR, - Species.DELIBIRD, - Species.MANTINE, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.BLAZIKEN, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.WINGULL, - Species.PELIPPER, - Species.SURSKIT, - Species.MASQUERAIN, - Species.NINJASK, - Species.VOLBEAT, - Species.ILLUMISE, - Species.SWABLU, - Species.ALTARIA, - Species.LUNATONE, - Species.SOLROCK, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.MOTHIM, - Species.VESPIQUEN, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.LOPUNNY, - Species.HONCHKROW, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.GLISCOR, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.WOOBAT, - Species.SWOOBAT, - Species.ARCHEN, - Species.ARCHEOPS, - Species.SWANNA, - Species.EMOLGA, - Species.ALOMOMOLA, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.CRYOGONAL, - Species.MIENFOO, - Species.MIENSHAO, - Species.RUFFLET, - Species.BRAVIARY, - Species.MANDIBUZZ, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.TORNADUS, - Species.THUNDURUS, - Species.MELOETTA, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.LITLEO, - Species.PYROAR, - Species.HAWLUCHA, - Species.NOIBAT, - Species.NOIVERN, - Species.YVELTAL, - Species.DECIDUEYE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.SALAZZLE, - Species.TSAREENA, - Species.COMFEY, - Species.PASSIMIAN, - Species.MINIOR, - Species.KOMALA, - Species.TAPU_KOKO, - Species.LUNALA, - Species.CELESTEELA, - Species.MARSHADOW, - Species.NAGANADEL, - Species.ZERAORA, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.INTELEON, - Species.THIEVUL, - Species.FLAPPLE, - Species.CRAMORANT, - Species.FROSMOTH, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.REGIELEKI, - Species.KLEAVOR, - Species.SNEASLER, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.WATTREL, - Species.KILOWATTREL, - Species.SHROODLE, - Species.GRAFAIAI, - Species.BOMBIRDIER, - Species.FINIZEN, - Species.PALAFIN, - Species.CYCLIZAR, - Species.FLAMIGO, - Species.ANNIHILAPE, - Species.SLITHER_WING, - Species.IRON_BUNDLE, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.CHIEN_PAO, - Species.ROARING_MOON, - Species.KORAIDON, - Species.MIRAIDON, - Species.FEZANDIPITI, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.HISUI_LILLIGANT, - Species.HISUI_BRAVIARY, + [MoveId.ACROBATICS]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.VENOMOTH, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.FARFETCHD, + SpeciesId.SCYTHER, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.MEW, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.CROBAT, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.MURKROW, + SpeciesId.GLIGAR, + SpeciesId.SCIZOR, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.BLAZIKEN, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.NINJASK, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.LOPUNNY, + SpeciesId.HONCHKROW, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.GLISCOR, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.SWANNA, + SpeciesId.EMOLGA, + SpeciesId.ALOMOMOLA, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.CRYOGONAL, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.MANDIBUZZ, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.MELOETTA, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.HAWLUCHA, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.YVELTAL, + SpeciesId.DECIDUEYE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.SALAZZLE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.PASSIMIAN, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.TAPU_KOKO, + SpeciesId.LUNALA, + SpeciesId.CELESTEELA, + SpeciesId.MARSHADOW, + SpeciesId.NAGANADEL, + SpeciesId.ZERAORA, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.INTELEON, + SpeciesId.THIEVUL, + SpeciesId.FLAPPLE, + SpeciesId.CRAMORANT, + SpeciesId.FROSMOTH, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.REGIELEKI, + SpeciesId.KLEAVOR, + SpeciesId.SNEASLER, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.BOMBIRDIER, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.CYCLIZAR, + SpeciesId.FLAMIGO, + SpeciesId.ANNIHILAPE, + SpeciesId.SLITHER_WING, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.CHIEN_PAO, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.FEZANDIPITI, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_BRAVIARY, ], - [Moves.RETALIATE]: [ - Species.RATTATA, - Species.RATICATE, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.MEOWTH, - Species.PERSIAN, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.FARFETCHD, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.CHANSEY, - Species.KANGASKHAN, - Species.TAUROS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.SNORLAX, - Species.MEW, - Species.SENTRET, - Species.FURRET, - Species.TOGETIC, - Species.AIPOM, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.GIRAFARIG, - Species.DUNSPARCE, - Species.SNUBBULL, - Species.GRANBULL, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.MILTANK, - Species.BLISSEY, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MEDITITE, - Species.MEDICHAM, - Species.CARVANHA, - Species.SHARPEDO, - Species.SPINDA, - Species.CACTURNE, - Species.ZANGOOSE, - Species.SEVIPER, - Species.CRAWDAUNT, - Species.CASTFORM, - Species.KECLEON, - Species.ABSOL, - Species.LATIAS, - Species.LATIOS, - Species.MONFERNO, - Species.INFERNAPE, - Species.STARAVIA, - Species.STARAPTOR, - Species.BIDOOF, - Species.BIBAREL, - Species.AMBIPOM, - Species.BUNEARY, - Species.LOPUNNY, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.SPIRITOMB, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.WEAVILE, - Species.LICKILICKY, - Species.TOGEKISS, - Species.LEAFEON, - Species.GLACEON, - Species.GALLADE, - Species.REGIGIGAS, - Species.DARKRAI, - Species.ARCEUS, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.THROH, - Species.SAWK, - Species.LEAVANNY, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.DEERLING, - Species.SAWSBUCK, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.DURANT, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.KELDEO, - Species.MELOETTA, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FROAKIE, - Species.LITLEO, - Species.PYROAR, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.INKAY, - Species.MALAMAR, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.ZYGARDE, - Species.PASSIMIAN, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.DUBWOOL, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.SIRFETCHD, - Species.FALINKS, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.KUBFU, - Species.URSHIFU, - Species.MASCHIFF, - Species.KINGAMBIT, - Species.IRON_LEAVES, - Species.OGERPON, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_MAROWAK, - Species.GALAR_MEOWTH, - Species.GALAR_FARFETCHD, - Species.GALAR_ZAPDOS, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_SAMUROTT, + [MoveId.RETALIATE]: [ + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.FARFETCHD, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.TAUROS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.SNORLAX, + SpeciesId.MEW, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.TOGETIC, + SpeciesId.AIPOM, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.GIRAFARIG, + SpeciesId.DUNSPARCE, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.SPINDA, + SpeciesId.CACTURNE, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.CRAWDAUNT, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.ABSOL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.AMBIPOM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.SPIRITOMB, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.WEAVILE, + SpeciesId.LICKILICKY, + SpeciesId.TOGEKISS, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GALLADE, + SpeciesId.REGIGIGAS, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.LEAVANNY, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.DURANT, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FROAKIE, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.ZYGARDE, + SpeciesId.PASSIMIAN, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.DUBWOOL, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.SIRFETCHD, + SpeciesId.FALINKS, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.MASCHIFF, + SpeciesId.KINGAMBIT, + SpeciesId.IRON_LEAVES, + SpeciesId.OGERPON, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_SAMUROTT, ], - [Moves.WATER_PLEDGE]: [ - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PANPOUR, - Species.SIMIPOUR, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.SILVALLY, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.HISUI_SAMUROTT, + [MoveId.WATER_PLEDGE]: [ + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.SILVALLY, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.HISUI_SAMUROTT, ], - [Moves.FIRE_PLEDGE]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.MEW, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.PANSEAR, - Species.SIMISEAR, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.SILVALLY, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.HISUI_TYPHLOSION, + [MoveId.FIRE_PLEDGE]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.MEW, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.SILVALLY, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.HISUI_TYPHLOSION, ], - [Moves.GRASS_PLEDGE]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.PANSAGE, - Species.SIMISAGE, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.SILVALLY, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.HISUI_DECIDUEYE, + [MoveId.GRASS_PLEDGE]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.SILVALLY, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.VOLT_SWITCH]: [ - Species.PIKACHU, - Species.RAICHU, - Species.MAGNEMITE, - Species.MAGNETON, - Species.VOLTORB, - Species.ELECTRODE, - Species.ELECTABUZZ, - Species.JOLTEON, - Species.ZAPDOS, - Species.MEW, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.FORRETRESS, - Species.ELEKID, - Species.RAIKOU, - Species.NOSEPASS, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.PACHIRISU, - Species.MAGNEZONE, - Species.ELECTIVIRE, - Species.PROBOPASS, - Species.ROTOM, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.EMOLGA, - Species.JOLTIK, - Species.GALVANTULA, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.COBALION, - Species.THUNDURUS, - Species.ZEKROM, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.DEDENNE, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.TOGEDEMARU, - Species.TAPU_KOKO, - Species.XURKITREE, - Species.MAGEARNA, - Species.ZERAORA, - Species.YAMPER, - Species.BOLTUND, - Species.TOXTRICITY, - Species.MORPEKO, - Species.REGIELEKI, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TADBULB, - Species.BELLIBOLT, - Species.WATTREL, - Species.KILOWATTREL, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_HANDS, - Species.IRON_THORNS, - Species.MIRAIDON, - Species.RAGING_BOLT, - Species.IRON_CROWN, - Species.ALOLA_RAICHU, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, + [MoveId.VOLT_SWITCH]: [ + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.ELECTABUZZ, + SpeciesId.JOLTEON, + SpeciesId.ZAPDOS, + SpeciesId.MEW, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.FORRETRESS, + SpeciesId.ELEKID, + SpeciesId.RAIKOU, + SpeciesId.NOSEPASS, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.PACHIRISU, + SpeciesId.MAGNEZONE, + SpeciesId.ELECTIVIRE, + SpeciesId.PROBOPASS, + SpeciesId.ROTOM, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.EMOLGA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.COBALION, + SpeciesId.THUNDURUS, + SpeciesId.ZEKROM, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.DEDENNE, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.TOGEDEMARU, + SpeciesId.TAPU_KOKO, + SpeciesId.XURKITREE, + SpeciesId.MAGEARNA, + SpeciesId.ZERAORA, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.TOXTRICITY, + SpeciesId.MORPEKO, + SpeciesId.REGIELEKI, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_THORNS, + SpeciesId.MIRAIDON, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_CROWN, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, ], - [Moves.STRUGGLE_BUG]: [ - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.SCYTHER, - Species.PINSIR, - Species.MEW, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.YANMA, - Species.PINECO, - Species.FORRETRESS, - Species.GLIGAR, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.SURSKIT, - Species.MASQUERAIN, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.VOLBEAT, - Species.ILLUMISE, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.ANORITH, - Species.ARMALDO, - Species.STARAPTOR, - Species.KRICKETOT, - Species.KRICKETUNE, - Species.WORMADAM, - Species.MOTHIM, - Species.COMBEE, - Species.VESPIQUEN, - Species.SKORUPI, - Species.DRAPION, - Species.YANMEGA, - Species.GLISCOR, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.DWEBBLE, - Species.CRUSTLE, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.JOLTIK, - Species.GALVANTULA, - Species.SHELMET, - Species.ACCELGOR, - Species.DURANT, - Species.LARVESTA, - Species.VOLCARONA, - Species.GENESECT, - Species.SCATTERBUG, - Species.SPEWPA, - Species.VIVILLON, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.WIMPOD, - Species.GOLISOPOD, - Species.BLIPBUG, - Species.DOTTLER, - Species.ORBEETLE, - Species.SIZZLIPEDE, - Species.SNOM, - Species.FROSMOTH, - Species.KLEAVOR, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.NYMBLE, - Species.LOKIX, - Species.RELLOR, - Species.RABSCA, - Species.IRON_MOTH, + [MoveId.STRUGGLE_BUG]: [ + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.SCYTHER, + SpeciesId.PINSIR, + SpeciesId.MEW, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.YANMA, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.GLIGAR, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.STARAPTOR, + SpeciesId.KRICKETOT, + SpeciesId.KRICKETUNE, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.COMBEE, + SpeciesId.VESPIQUEN, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.YANMEGA, + SpeciesId.GLISCOR, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.DURANT, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.GENESECT, + SpeciesId.SCATTERBUG, + SpeciesId.SPEWPA, + SpeciesId.VIVILLON, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.BLIPBUG, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.SIZZLIPEDE, + SpeciesId.SNOM, + SpeciesId.FROSMOTH, + SpeciesId.KLEAVOR, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.IRON_MOTH, ], - [Moves.BULLDOZE]: [ - Species.VENUSAUR, - Species.CHARIZARD, - Species.BLASTOISE, - Species.EKANS, - Species.ARBOK, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.DIGLETT, - Species.DUGTRIO, - Species.MANKEY, - Species.PRIMEAPE, - Species.ARCANINE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.ONIX, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.AERODACTYL, - Species.SNORLAX, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.MEGANIUM, - Species.TYPHLOSION, - Species.FERALIGATR, - Species.AMPHAROS, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.WOOPER, - Species.QUAGSIRE, - Species.SLOWKING, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.SHUCKLE, - Species.HERACROSS, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.MANTINE, - Species.PHANPY, - Species.DONPHAN, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.SCEPTILE, - Species.BLAZIKEN, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.BRELOOM, - Species.VIGOROTH, - Species.SLAKING, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.NOSEPASS, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.SWALOT, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.GRUMPIG, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.ALTARIA, - Species.SEVIPER, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.BALTOY, - Species.CLAYDOL, - Species.CRADILY, - Species.ARMALDO, - Species.MILOTIC, - Species.DUSCLOPS, - Species.TROPIUS, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.RELICANTH, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.INFERNAPE, - Species.EMPOLEON, - Species.BIBAREL, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.SHELLOS, - Species.GASTRODON, - Species.PURUGLY, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.MANTYKE, - Species.ABOMASNOW, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.GLISCOR, - Species.MAMOSWINE, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.ARCEUS, - Species.PIGNITE, - Species.EMBOAR, - Species.SAMUROTT, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.DRILBUR, - Species.EXCADRILL, - Species.CONKELDURR, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SCOLIPEDE, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARMANITAN, - Species.DWEBBLE, - Species.CRUSTLE, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.DEERLING, - Species.SAWSBUCK, - Species.FERROTHORN, - Species.EELEKTROSS, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.STUNFISK, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.BOUFFALANT, - Species.HYDREIGON, - Species.TERRAKION, - Species.LANDORUS, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.LITLEO, - Species.PYROAR, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.BINACLE, - Species.BARBARACLE, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.GOODRA, - Species.PHANTUMP, - Species.TREVENANT, - Species.BERGMITE, - Species.AVALUGG, - Species.ZYGARDE, - Species.DIANCIE, - Species.VOLCANION, - Species.INCINEROAR, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.VIKAVOLT, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.WISHIWASHI, - Species.MUDBRAY, - Species.MUDSDALE, - Species.STUFFUL, - Species.BEWEAR, - Species.ORANGURU, - Species.PASSIMIAN, - Species.SANDYGAST, - Species.PALOSSAND, - Species.MINIOR, - Species.KOMALA, - Species.TURTONATOR, - Species.DRAMPA, - Species.DHELMISE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.SOLGALEO, - Species.BUZZWOLE, - Species.CELESTEELA, - Species.GUZZLORD, - Species.NECROZMA, - Species.STAKATAKA, - Species.RILLABOOM, - Species.GREEDENT, - Species.DREDNAW, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.APPLETUN, - Species.SILICOBRA, - Species.SANDACONDA, - Species.CURSOLA, - Species.RUNERIGUS, - Species.STONJOURNER, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.GLASTRIER, - Species.SPECTRIER, - Species.WYRDEER, - Species.URSALUNA, - Species.LECHONK, - Species.OINKOLOGNE, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.KLAWF, - Species.TINKATON, - Species.WIGLETT, - Species.WUGTRIO, - Species.VAROOM, - Species.REVAVROOM, - Species.ORTHWORM, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.CETODDLE, - Species.CETITAN, - Species.DONDOZO, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.GREAT_TUSK, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_HANDS, - Species.IRON_THORNS, - Species.BAXCALIBUR, - Species.TING_LU, - Species.KORAIDON, - Species.GOUGING_FIRE, - Species.IRON_BOULDER, - Species.IRON_CROWN, + [MoveId.BULLDOZE]: [ + SpeciesId.VENUSAUR, + SpeciesId.CHARIZARD, + SpeciesId.BLASTOISE, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.ARCANINE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.ONIX, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.MEGANIUM, + SpeciesId.TYPHLOSION, + SpeciesId.FERALIGATR, + SpeciesId.AMPHAROS, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.MANTINE, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.SCEPTILE, + SpeciesId.BLAZIKEN, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.BRELOOM, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.NOSEPASS, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.SWALOT, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.GRUMPIG, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.ALTARIA, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.CRADILY, + SpeciesId.ARMALDO, + SpeciesId.MILOTIC, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.RELICANTH, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.INFERNAPE, + SpeciesId.EMPOLEON, + SpeciesId.BIBAREL, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.PURUGLY, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.MANTYKE, + SpeciesId.ABOMASNOW, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.ARCEUS, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.SAMUROTT, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.CONKELDURR, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SCOLIPEDE, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARMANITAN, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.FERROTHORN, + SpeciesId.EELEKTROSS, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.STUNFISK, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.BOUFFALANT, + SpeciesId.HYDREIGON, + SpeciesId.TERRAKION, + SpeciesId.LANDORUS, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.GOODRA, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.VOLCANION, + SpeciesId.INCINEROAR, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.VIKAVOLT, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.WISHIWASHI, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.SOLGALEO, + SpeciesId.BUZZWOLE, + SpeciesId.CELESTEELA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.STAKATAKA, + SpeciesId.RILLABOOM, + SpeciesId.GREEDENT, + SpeciesId.DREDNAW, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.APPLETUN, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.CURSOLA, + SpeciesId.RUNERIGUS, + SpeciesId.STONJOURNER, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.WYRDEER, + SpeciesId.URSALUNA, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.KLAWF, + SpeciesId.TINKATON, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.ORTHWORM, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.DONDOZO, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.GREAT_TUSK, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_THORNS, + SpeciesId.BAXCALIBUR, + SpeciesId.TING_LU, + SpeciesId.KORAIDON, + SpeciesId.GOUGING_FIRE, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, [ - Species.WORMADAM, + SpeciesId.WORMADAM, "sandy", ], - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_DARMANITAN, - Species.GALAR_STUNFISK, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_STUNFISK, [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", "shadow", ], - Species.HISUI_ARCANINE, - Species.HISUI_TYPHLOSION, - Species.HISUI_SAMUROTT, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.FROST_BREATH]: [ - Species.DEWGONG, - Species.CLOYSTER, - Species.JYNX, - Species.LAPRAS, - Species.ARTICUNO, - Species.MEW, - Species.DELIBIRD, - Species.SMOOCHUM, - Species.SNORUNT, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.REGICE, - Species.SNOVER, - Species.ABOMASNOW, - Species.GLACEON, - Species.FROSLASS, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.AMAURA, - Species.AURORUS, - Species.BERGMITE, - Species.AVALUGG, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.MAREANIE, - Species.TOXAPEX, - Species.DEWPIDER, - Species.ARAQUANID, - Species.GOLISOPOD, - Species.BRUXISH, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, + [MoveId.FROST_BREATH]: [ + SpeciesId.DEWGONG, + SpeciesId.CLOYSTER, + SpeciesId.JYNX, + SpeciesId.LAPRAS, + SpeciesId.ARTICUNO, + SpeciesId.MEW, + SpeciesId.DELIBIRD, + SpeciesId.SMOOCHUM, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.REGICE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.GLACEON, + SpeciesId.FROSLASS, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.GOLISOPOD, + SpeciesId.BRUXISH, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, ], - [Moves.DRAGON_TAIL]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.BLASTOISE, - Species.ARBOK, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.ONIX, - Species.LICKITUNG, - Species.RHYDON, - Species.GYARADOS, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEW, - Species.MEGANIUM, - Species.FERALIGATR, - Species.AMPHAROS, - Species.SLOWKING, - Species.STEELIX, - Species.TYRANITAR, - Species.LUGIA, - Species.AGGRON, - Species.VIBRAVA, - Species.FLYGON, - Species.SEVIPER, - Species.MILOTIC, - Species.TROPIUS, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.GROUDON, - Species.RAYQUAZA, - Species.RAMPARDOS, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.DIALGA, - Species.PALKIA, - Species.GIRATINA, - Species.ARCEUS, - Species.SERPERIOR, - Species.SAMUROTT, - Species.KROKOROK, - Species.KROOKODILE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.ARCHEOPS, - Species.EELEKTROSS, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.DRUDDIGON, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.RESHIRAM, - Species.ZEKROM, - Species.KYUREM, - Species.SKRELP, - Species.DRAGALGE, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.GOODRA, - Species.NOIVERN, - Species.ZYGARDE, - Species.SALAZZLE, - Species.TURTONATOR, - Species.DRAMPA, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.GUZZLORD, - Species.NAGANADEL, - Species.CHEWTLE, - Species.APPLETUN, - Species.DRACOZOLT, - Species.DURALUDON, - Species.DREEPY, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ETERNATUS, - Species.CYCLIZAR, - Species.DUDUNSPARCE, - Species.IRON_JUGULIS, - Species.IRON_THORNS, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.ROARING_MOON, - Species.KORAIDON, - Species.MIRAIDON, - Species.DIPPLIN, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.RAGING_BOLT, - Species.ALOLA_EXEGGUTOR, - Species.HISUI_GOODRA, + [MoveId.DRAGON_TAIL]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.BLASTOISE, + SpeciesId.ARBOK, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.ONIX, + SpeciesId.LICKITUNG, + SpeciesId.RHYDON, + SpeciesId.GYARADOS, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.MEGANIUM, + SpeciesId.FERALIGATR, + SpeciesId.AMPHAROS, + SpeciesId.SLOWKING, + SpeciesId.STEELIX, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.AGGRON, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.SEVIPER, + SpeciesId.MILOTIC, + SpeciesId.TROPIUS, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.RAMPARDOS, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.GIRATINA, + SpeciesId.ARCEUS, + SpeciesId.SERPERIOR, + SpeciesId.SAMUROTT, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.ARCHEOPS, + SpeciesId.EELEKTROSS, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.DRUDDIGON, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.KYUREM, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.GOODRA, + SpeciesId.NOIVERN, + SpeciesId.ZYGARDE, + SpeciesId.SALAZZLE, + SpeciesId.TURTONATOR, + SpeciesId.DRAMPA, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.GUZZLORD, + SpeciesId.NAGANADEL, + SpeciesId.CHEWTLE, + SpeciesId.APPLETUN, + SpeciesId.DRACOZOLT, + SpeciesId.DURALUDON, + SpeciesId.DREEPY, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ETERNATUS, + SpeciesId.CYCLIZAR, + SpeciesId.DUDUNSPARCE, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_THORNS, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.DIPPLIN, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.RAGING_BOLT, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.HISUI_GOODRA, ], - [Moves.WORK_UP]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.SANDSHREW, - Species.SANDSLASH, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.MANKEY, - Species.PRIMEAPE, - Species.POLIWRATH, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.CHANSEY, - Species.KANGASKHAN, - Species.TAUROS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.SNORLAX, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.MARILL, - Species.AZUMARILL, - Species.AIPOM, - Species.ESPEON, - Species.UMBREON, - Species.GIRAFARIG, - Species.SNUBBULL, - Species.GRANBULL, - Species.HERACROSS, - Species.TEDDIURSA, - Species.URSARING, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.MILTANK, - Species.BLISSEY, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.ZIGZAGOON, - Species.LINOONE, - Species.TAILLOW, - Species.SWELLOW, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.SKITTY, - Species.DELCATTY, - Species.MEDITITE, - Species.MEDICHAM, - Species.SPINDA, - Species.ZANGOOSE, - Species.CASTFORM, - Species.KECLEON, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.BIDOOF, - Species.BIBAREL, - Species.AMBIPOM, - Species.BUNEARY, - Species.LOPUNNY, - Species.GLAMEOW, - Species.PURUGLY, - Species.HAPPINY, - Species.CHATOT, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.CROAGUNK, - Species.TOXICROAK, - Species.LICKILICKY, - Species.TOGEKISS, - Species.LEAFEON, - Species.GLACEON, - Species.GALLADE, - Species.ARCEUS, - Species.VICTINI, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.THROH, - Species.SAWK, - Species.DARUMAKA, - Species.DARMANITAN, - Species.SCRAGGY, - Species.SCRAFTY, - Species.MINCCINO, - Species.CINCCINO, - Species.DEERLING, - Species.SAWSBUCK, - Species.MIENFOO, - Species.MIENSHAO, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.KELDEO, - Species.MELOETTA, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.LITLEO, - Species.PYROAR, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.ESPURR, - Species.MEOWSTIC, - Species.SYLVEON, - Species.HAWLUCHA, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ORICORIO, - Species.STUFFUL, - Species.BEWEAR, - Species.ORANGURU, - Species.PASSIMIAN, - Species.TYPE_NULL, - Species.SILVALLY, - Species.KOMALA, - Species.TURTONATOR, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.DRAMPA, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.TAPU_BULU, - Species.SOLGALEO, - Species.LUNALA, - Species.BUZZWOLE, - Species.MARSHADOW, - Species.ZERAORA, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.SIRFETCHD, - Species.CUFANT, - Species.COPPERAJAH, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.KUBFU, - Species.URSHIFU, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.LECHONK, - Species.OINKOLOGNE, - Species.FIDOUGH, - Species.DACHSBUN, - Species.IRON_JUGULIS, - Species.IRON_LEAVES, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, + [MoveId.WORK_UP]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.POLIWRATH, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.TAUROS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.SNORLAX, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.AIPOM, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.GIRAFARIG, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.HERACROSS, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.SPINDA, + SpeciesId.ZANGOOSE, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.AMBIPOM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.HAPPINY, + SpeciesId.CHATOT, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.LICKILICKY, + SpeciesId.TOGEKISS, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GALLADE, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ORICORIO, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.DRAMPA, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_BULU, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.BUZZWOLE, + SpeciesId.MARSHADOW, + SpeciesId.ZERAORA, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.SIRFETCHD, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_LEAVES, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, [ - Species.LYCANROC, + SpeciesId.LYCANROC, "dusk", ], - Species.GALAR_MEOWTH, - Species.GALAR_FARFETCHD, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.PALDEA_TAUROS, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.PALDEA_TAUROS, ], - [Moves.ELECTROWEB]: [ - Species.CATERPIE, - Species.METAPOD, - Species.BUTTERFREE, - Species.WEEDLE, - Species.KAKUNA, - Species.BEEDRILL, - Species.PIKACHU, - Species.RAICHU, - Species.MAGNEMITE, - Species.MAGNETON, - Species.ELECTABUZZ, - Species.PORYGON, - Species.MEW, - Species.SPINARAK, - Species.ARIADOS, - Species.PICHU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.PORYGON2, - Species.ELEKID, - Species.WURMPLE, - Species.SILCOON, - Species.BEAUTIFLY, - Species.CASCOON, - Species.DUSTOX, - Species.PLUSLE, - Species.MINUN, - Species.BURMY, - Species.WORMADAM, - Species.MOTHIM, - Species.PACHIRISU, - Species.MAGNEZONE, - Species.ELECTIVIRE, - Species.PORYGON_Z, - Species.ROTOM, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.EMOLGA, - Species.JOLTIK, - Species.GALVANTULA, - Species.STUNFISK, - Species.THUNDURUS, - Species.GENESECT, - Species.SPEWPA, - Species.VIVILLON, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.DEDENNE, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.PASSIMIAN, - Species.TOGEDEMARU, - Species.TAPU_KOKO, - Species.PHEROMOSA, - Species.XURKITREE, - Species.MAGEARNA, - Species.ZERAORA, - Species.MORPEKO, - Species.REGIELEKI, - Species.SPIDOPS, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TADBULB, - Species.BELLIBOLT, - Species.WATTREL, - Species.KILOWATTREL, - Species.SANDY_SHOCKS, - Species.IRON_THORNS, - Species.RAGING_BOLT, - Species.ALOLA_RAICHU, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, + [MoveId.ELECTROWEB]: [ + SpeciesId.CATERPIE, + SpeciesId.METAPOD, + SpeciesId.BUTTERFREE, + SpeciesId.WEEDLE, + SpeciesId.KAKUNA, + SpeciesId.BEEDRILL, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.ELECTABUZZ, + SpeciesId.PORYGON, + SpeciesId.MEW, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.PICHU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.PORYGON2, + SpeciesId.ELEKID, + SpeciesId.WURMPLE, + SpeciesId.SILCOON, + SpeciesId.BEAUTIFLY, + SpeciesId.CASCOON, + SpeciesId.DUSTOX, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.BURMY, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.PACHIRISU, + SpeciesId.MAGNEZONE, + SpeciesId.ELECTIVIRE, + SpeciesId.PORYGON_Z, + SpeciesId.ROTOM, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.EMOLGA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.STUNFISK, + SpeciesId.THUNDURUS, + SpeciesId.GENESECT, + SpeciesId.SPEWPA, + SpeciesId.VIVILLON, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.DEDENNE, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.PASSIMIAN, + SpeciesId.TOGEDEMARU, + SpeciesId.TAPU_KOKO, + SpeciesId.PHEROMOSA, + SpeciesId.XURKITREE, + SpeciesId.MAGEARNA, + SpeciesId.ZERAORA, + SpeciesId.MORPEKO, + SpeciesId.REGIELEKI, + SpeciesId.SPIDOPS, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_THORNS, + SpeciesId.RAGING_BOLT, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, ], - [Moves.WILD_CHARGE]: [ - Species.RATTATA, - Species.RATICATE, - Species.PIKACHU, - Species.RAICHU, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.GROWLITHE, - Species.ARCANINE, - Species.PONYTA, - Species.RAPIDASH, - Species.MAGNEMITE, - Species.MAGNETON, - Species.VOLTORB, - Species.ELECTRODE, - Species.CHANSEY, - Species.ELECTABUZZ, - Species.TAUROS, - Species.JOLTEON, - Species.SNORLAX, - Species.ZAPDOS, - Species.MEW, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.IGGLYBUFF, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.DUNSPARCE, - Species.SNUBBULL, - Species.GRANBULL, - Species.STANTLER, - Species.ELEKID, - Species.BLISSEY, - Species.RAIKOU, - Species.SLAKING, - Species.SKITTY, - Species.DELCATTY, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.SPINDA, - Species.RAYQUAZA, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.PACHIRISU, - Species.MAGNEZONE, - Species.ELECTIVIRE, - Species.ARCEUS, - Species.VICTINI, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.AUDINO, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.JOLTIK, - Species.GALVANTULA, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.BOUFFALANT, - Species.LARVESTA, - Species.VOLCARONA, - Species.THUNDURUS, - Species.ZEKROM, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.LITLEO, - Species.PYROAR, - Species.SKIDDO, - Species.GOGOAT, - Species.FURFROU, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.DEDENNE, - Species.NOIBAT, - Species.NOIVERN, - Species.VOLCANION, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.TOGEDEMARU, - Species.TAPU_KOKO, - Species.SOLGALEO, - Species.XURKITREE, - Species.ZERAORA, - Species.GREEDENT, - Species.WOOLOO, - Species.DUBWOOL, - Species.YAMPER, - Species.BOLTUND, - Species.TOXTRICITY, - Species.PINCURCHIN, - Species.MORPEKO, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.REGIELEKI, - Species.WYRDEER, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TADBULB, - Species.BELLIBOLT, - Species.WATTREL, - Species.KILOWATTREL, - Species.MABOSSTIFF, - Species.CYCLIZAR, - Species.DUDUNSPARCE, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_HANDS, - Species.IRON_THORNS, - Species.KORAIDON, - Species.MIRAIDON, - Species.IRON_LEAVES, - Species.RAGING_BOLT, - Species.IRON_BOULDER, - Species.TERAPAGOS, - Species.ALOLA_RAICHU, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.HISUI_ARCANINE, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_TYPHLOSION, - Species.PALDEA_TAUROS, + [MoveId.WILD_CHARGE]: [ + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.CHANSEY, + SpeciesId.ELECTABUZZ, + SpeciesId.TAUROS, + SpeciesId.JOLTEON, + SpeciesId.SNORLAX, + SpeciesId.ZAPDOS, + SpeciesId.MEW, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.IGGLYBUFF, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.DUNSPARCE, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.STANTLER, + SpeciesId.ELEKID, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.SLAKING, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.SPINDA, + SpeciesId.RAYQUAZA, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.PACHIRISU, + SpeciesId.MAGNEZONE, + SpeciesId.ELECTIVIRE, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.AUDINO, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.BOUFFALANT, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.THUNDURUS, + SpeciesId.ZEKROM, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.FURFROU, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.DEDENNE, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.VOLCANION, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.TOGEDEMARU, + SpeciesId.TAPU_KOKO, + SpeciesId.SOLGALEO, + SpeciesId.XURKITREE, + SpeciesId.ZERAORA, + SpeciesId.GREEDENT, + SpeciesId.WOOLOO, + SpeciesId.DUBWOOL, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.TOXTRICITY, + SpeciesId.PINCURCHIN, + SpeciesId.MORPEKO, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.REGIELEKI, + SpeciesId.WYRDEER, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.MABOSSTIFF, + SpeciesId.CYCLIZAR, + SpeciesId.DUDUNSPARCE, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_THORNS, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.IRON_LEAVES, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_BOULDER, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.PALDEA_TAUROS, ], - [Moves.DRILL_RUN]: [ - Species.BEEDRILL, - Species.SPEAROW, - Species.FEAROW, - Species.SANDSLASH, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.RAPIDASH, - Species.DODRIO, - Species.SEEL, - Species.DEWGONG, - Species.CLOYSTER, - Species.ONIX, - Species.RHYHORN, - Species.RHYDON, - Species.GOLDEEN, - Species.SEAKING, - Species.LAPRAS, - Species.MEW, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.STEELIX, - Species.SKARMORY, - Species.DELIBIRD, - Species.HITMONTOP, - Species.BALTOY, - Species.CLAYDOL, - Species.RHYPERIOR, - Species.SAMUROTT, - Species.DRILBUR, - Species.EXCADRILL, - Species.KARRABLAST, - Species.ESCAVALIER, + [MoveId.DRILL_RUN]: [ + SpeciesId.BEEDRILL, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.SANDSLASH, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.RAPIDASH, + SpeciesId.DODRIO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.CLOYSTER, + SpeciesId.ONIX, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.LAPRAS, + SpeciesId.MEW, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.STEELIX, + SpeciesId.SKARMORY, + SpeciesId.DELIBIRD, + SpeciesId.HITMONTOP, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.RHYPERIOR, + SpeciesId.SAMUROTT, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, [ - Species.LYCANROC, + SpeciesId.LYCANROC, "midday", "dusk", ], - Species.GOLISOPOD, - Species.PHEROMOSA, - Species.SILICOBRA, - Species.SANDACONDA, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.BOMBIRDIER, - Species.VELUZA, - Species.DUDUNSPARCE, - Species.ALOLA_SANDSLASH, - Species.GALAR_RAPIDASH, - Species.HISUI_SAMUROTT, - Species.PALDEA_TAUROS, + SpeciesId.GOLISOPOD, + SpeciesId.PHEROMOSA, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.BOMBIRDIER, + SpeciesId.VELUZA, + SpeciesId.DUDUNSPARCE, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.PALDEA_TAUROS, ], - [Moves.RAZOR_SHELL]: [ - Species.SLOWBRO, - Species.SHELLDER, - Species.CLOYSTER, - Species.KRABBY, - Species.KINGLER, - Species.KABUTOPS, - Species.MEW, - Species.SLOWKING, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.CARRACOSTA, - Species.ESCAVALIER, - Species.BINACLE, - Species.BARBARACLE, - Species.GOLISOPOD, - Species.DREDNAW, - Species.GALAR_SLOWBRO, - Species.GALAR_SLOWKING, - Species.HISUI_SAMUROTT, + [MoveId.RAZOR_SHELL]: [ + SpeciesId.SLOWBRO, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.KABUTOPS, + SpeciesId.MEW, + SpeciesId.SLOWKING, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.CARRACOSTA, + SpeciesId.ESCAVALIER, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.GOLISOPOD, + SpeciesId.DREDNAW, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_SLOWKING, + SpeciesId.HISUI_SAMUROTT, ], - [Moves.HEAT_CRASH]: [ - Species.CHARIZARD, - Species.ARCANINE, - Species.RHYDON, - Species.SNORLAX, - Species.MEW, - Species.SLUGMA, - Species.MAGCARGO, - Species.BLAZIKEN, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.GROUDON, - Species.RHYPERIOR, - Species.MAGMORTAR, - Species.HEATRAN, - Species.REGIGIGAS, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.GOLURK, - Species.RESHIRAM, - Species.VOLCANION, - Species.INCINEROAR, - Species.TURTONATOR, - Species.SOLGALEO, - Species.GUZZLORD, - Species.STAKATAKA, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.STONJOURNER, - Species.COPPERAJAH, - Species.SKELEDIRGE, - Species.SLITHER_WING, - Species.KORAIDON, - Species.GOUGING_FIRE, - Species.TERAPAGOS, - Species.HISUI_ARCANINE, + [MoveId.HEAT_CRASH]: [ + SpeciesId.CHARIZARD, + SpeciesId.ARCANINE, + SpeciesId.RHYDON, + SpeciesId.SNORLAX, + SpeciesId.MEW, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.BLAZIKEN, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.GROUDON, + SpeciesId.RHYPERIOR, + SpeciesId.MAGMORTAR, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.GOLURK, + SpeciesId.RESHIRAM, + SpeciesId.VOLCANION, + SpeciesId.INCINEROAR, + SpeciesId.TURTONATOR, + SpeciesId.SOLGALEO, + SpeciesId.GUZZLORD, + SpeciesId.STAKATAKA, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.STONJOURNER, + SpeciesId.COPPERAJAH, + SpeciesId.SKELEDIRGE, + SpeciesId.SLITHER_WING, + SpeciesId.KORAIDON, + SpeciesId.GOUGING_FIRE, + SpeciesId.TERAPAGOS, + SpeciesId.HISUI_ARCANINE, ], - [Moves.TAIL_SLAP]: [ - Species.VULPIX, - Species.NINETALES, - Species.MEW, - Species.AIPOM, - Species.ZIGZAGOON, - Species.LINOONE, - Species.BUIZEL, - Species.FLOATZEL, - Species.AMBIPOM, - Species.STUNKY, - Species.SKUNTANK, - Species.MINCCINO, - Species.CINCCINO, - Species.MEOWSTIC, + [MoveId.TAIL_SLAP]: [ + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.MEW, + SpeciesId.AIPOM, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.AMBIPOM, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.MEOWSTIC, [ - Species.LYCANROC, + SpeciesId.LYCANROC, "midday", "dusk", ], - Species.SKWOVET, - Species.GREEDENT, - Species.NICKIT, - Species.THIEVUL, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.FEZANDIPITI, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.FEZANDIPITI, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, ], - [Moves.HURRICANE]: [ - Species.CHARIZARD, - Species.BUTTERFREE, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.GYARADOS, - Species.AERODACTYL, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.CROBAT, - Species.MURKROW, - Species.MANTINE, - Species.KINGDRA, - Species.LUGIA, - Species.SHIFTRY, - Species.TAILLOW, - Species.WINGULL, - Species.PELIPPER, - Species.MASQUERAIN, - Species.SWABLU, - Species.ALTARIA, - Species.CASTFORM, - Species.TROPIUS, - Species.SALAMENCE, - Species.RAYQUAZA, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.VESPIQUEN, - Species.HONCHKROW, - Species.ARCEUS, - Species.UNFEZANT, - Species.WHIMSICOTT, - Species.DUCKLETT, - Species.SWANNA, - Species.RUFFLET, - Species.BRAVIARY, - Species.MANDIBUZZ, - Species.VOLCARONA, - Species.TORNADUS, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.NOIBAT, - Species.NOIVERN, - Species.YVELTAL, - Species.DECIDUEYE, - Species.ORICORIO, - Species.DRAMPA, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.SANDACONDA, - Species.CRAMORANT, - Species.FROSMOTH, - Species.QUAQUAVAL, - Species.SQUAWKABILLY, - Species.WATTREL, - Species.KILOWATTREL, - Species.BOMBIRDIER, - Species.FLAMIGO, - Species.DUDUNSPARCE, - Species.SLITHER_WING, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.ROARING_MOON, - Species.WALKING_WAKE, - Species.FEZANDIPITI, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.HISUI_LILLIGANT, - Species.HISUI_BRAVIARY, + [MoveId.HURRICANE]: [ + SpeciesId.CHARIZARD, + SpeciesId.BUTTERFREE, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.GYARADOS, + SpeciesId.AERODACTYL, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.CROBAT, + SpeciesId.MURKROW, + SpeciesId.MANTINE, + SpeciesId.KINGDRA, + SpeciesId.LUGIA, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.MASQUERAIN, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.CASTFORM, + SpeciesId.TROPIUS, + SpeciesId.SALAMENCE, + SpeciesId.RAYQUAZA, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.VESPIQUEN, + SpeciesId.HONCHKROW, + SpeciesId.ARCEUS, + SpeciesId.UNFEZANT, + SpeciesId.WHIMSICOTT, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.MANDIBUZZ, + SpeciesId.VOLCARONA, + SpeciesId.TORNADUS, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.YVELTAL, + SpeciesId.DECIDUEYE, + SpeciesId.ORICORIO, + SpeciesId.DRAMPA, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.SANDACONDA, + SpeciesId.CRAMORANT, + SpeciesId.FROSMOTH, + SpeciesId.QUAQUAVAL, + SpeciesId.SQUAWKABILLY, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.BOMBIRDIER, + SpeciesId.FLAMIGO, + SpeciesId.DUDUNSPARCE, + SpeciesId.SLITHER_WING, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.ROARING_MOON, + SpeciesId.WALKING_WAKE, + SpeciesId.FEZANDIPITI, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_BRAVIARY, ], - [Moves.SNARL]: [ - Species.EKANS, - Species.ARBOK, - Species.VULPIX, - Species.NINETALES, - Species.MEOWTH, - Species.PERSIAN, - Species.GROWLITHE, - Species.ARCANINE, - Species.MEW, - Species.UMBREON, - Species.MURKROW, - Species.SNUBBULL, - Species.GRANBULL, - Species.SNEASEL, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.NUZLEAF, - Species.SHIFTRY, - Species.SABLEYE, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.CARVANHA, - Species.SHARPEDO, - Species.SPOINK, - Species.GRUMPIG, - Species.SEVIPER, - Species.CRAWDAUNT, - Species.CHIMECHO, - Species.ABSOL, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.FLOATZEL, - Species.HONCHKROW, - Species.STUNKY, - Species.SKUNTANK, - Species.SPIRITOMB, - Species.DRAPION, - Species.WEAVILE, - Species.DARKRAI, - Species.ARCEUS, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.ZORUA, - Species.ZOROARK, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.DRUDDIGON, - Species.PAWNIARD, - Species.BISHARP, - Species.VULLABY, - Species.MANDIBUZZ, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.THUNDURUS, - Species.LITLEO, - Species.PYROAR, - Species.PANGORO, - Species.FURFROU, - Species.YVELTAL, - Species.INCINEROAR, - Species.ROCKRUFF, - Species.LYCANROC, - Species.GOLISOPOD, - Species.SILVALLY, - Species.DRAMPA, - Species.TAPU_BULU, - Species.SOLGALEO, - Species.GUZZLORD, - Species.NAGANADEL, - Species.ZERAORA, - Species.RILLABOOM, - Species.CINDERACE, - Species.NICKIT, - Species.THIEVUL, - Species.YAMPER, - Species.BOLTUND, - Species.TOXTRICITY, - Species.OBSTAGOON, - Species.MORPEKO, - Species.COPPERAJAH, - Species.DURALUDON, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.ZARUDE, - Species.GLASTRIER, - Species.SPECTRIER, - Species.CALYREX, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.FIDOUGH, - Species.DACHSBUN, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.BOMBIRDIER, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.KINGAMBIT, - Species.IRON_JUGULIS, - Species.IRON_THORNS, - Species.WO_CHIEN, - Species.CHIEN_PAO, - Species.TING_LU, - Species.CHI_YU, - Species.ROARING_MOON, - Species.KORAIDON, - Species.MIRAIDON, - Species.WALKING_WAKE, - Species.OKIDOGI, - Species.ARCHALUDON, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.HISUI_ARCANINE, - Species.HISUI_SAMUROTT, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.BLOODMOON_URSALUNA, + [MoveId.SNARL]: [ + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.MEW, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SNEASEL, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.SABLEYE, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SEVIPER, + SpeciesId.CRAWDAUNT, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.FLOATZEL, + SpeciesId.HONCHKROW, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.SPIRITOMB, + SpeciesId.DRAPION, + SpeciesId.WEAVILE, + SpeciesId.DARKRAI, + SpeciesId.ARCEUS, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.DRUDDIGON, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.THUNDURUS, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.YVELTAL, + SpeciesId.INCINEROAR, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.GOLISOPOD, + SpeciesId.SILVALLY, + SpeciesId.DRAMPA, + SpeciesId.TAPU_BULU, + SpeciesId.SOLGALEO, + SpeciesId.GUZZLORD, + SpeciesId.NAGANADEL, + SpeciesId.ZERAORA, + SpeciesId.RILLABOOM, + SpeciesId.CINDERACE, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.TOXTRICITY, + SpeciesId.OBSTAGOON, + SpeciesId.MORPEKO, + SpeciesId.COPPERAJAH, + SpeciesId.DURALUDON, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.ZARUDE, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.CALYREX, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.BOMBIRDIER, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.KINGAMBIT, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_THORNS, + SpeciesId.WO_CHIEN, + SpeciesId.CHIEN_PAO, + SpeciesId.TING_LU, + SpeciesId.CHI_YU, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.OKIDOGI, + SpeciesId.ARCHALUDON, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.BLOODMOON_URSALUNA, [ - Species.URSHIFU, + SpeciesId.URSHIFU, "single-strike", ], ], - [Moves.PHANTOM_FORCE]: [ - Species.HAUNTER, - Species.GENGAR, - Species.MEW, - Species.MISDREAVUS, - Species.SHEDINJA, - Species.SABLEYE, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.MISMAGIUS, - Species.SPIRITOMB, - Species.DUSKNOIR, - Species.GIRATINA, - Species.ARCEUS, - Species.COFAGRIGUS, - Species.GOLETT, - Species.GOLURK, - Species.PHANTUMP, - Species.TREVENANT, - Species.GOURGEIST, - Species.YVELTAL, - Species.HOOPA, - Species.DECIDUEYE, - Species.MIMIKYU, - Species.DHELMISE, - Species.LUNALA, - Species.MARSHADOW, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.RUNERIGUS, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.SPECTRIER, - Species.BASCULEGION, - Species.CERULEDGE, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.ANNIHILAPE, - Species.FLUTTER_MANE, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.PECHARUNT, + [MoveId.PHANTOM_FORCE]: [ + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.MEW, + SpeciesId.MISDREAVUS, + SpeciesId.SHEDINJA, + SpeciesId.SABLEYE, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.MISMAGIUS, + SpeciesId.SPIRITOMB, + SpeciesId.DUSKNOIR, + SpeciesId.GIRATINA, + SpeciesId.ARCEUS, + SpeciesId.COFAGRIGUS, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.GOURGEIST, + SpeciesId.YVELTAL, + SpeciesId.HOOPA, + SpeciesId.DECIDUEYE, + SpeciesId.MIMIKYU, + SpeciesId.DHELMISE, + SpeciesId.LUNALA, + SpeciesId.MARSHADOW, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.RUNERIGUS, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.SPECTRIER, + SpeciesId.BASCULEGION, + SpeciesId.CERULEDGE, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.ANNIHILAPE, + SpeciesId.FLUTTER_MANE, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.PECHARUNT, [ - Species.CALYREX, + SpeciesId.CALYREX, "shadow", ], - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, ], - [Moves.PETAL_BLIZZARD]: [ - Species.VENUSAUR, - Species.GLOOM, - Species.VILEPLUME, - Species.MEW, - Species.MEGANIUM, - Species.BELLOSSOM, - Species.SUNFLORA, - Species.SHIFTRY, - Species.ROSELIA, - Species.TROPIUS, - Species.ROSERADE, - Species.CHERUBI, - Species.CHERRIM, - Species.SHAYMIN, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.LILLIGANT, - Species.MARACTUS, - Species.SAWSBUCK, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.FOMANTIS, - Species.LURANTIS, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.ZARUDE, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.ARBOLIVA, - Species.ETERNAL_FLOETTE, - Species.HISUI_LILLIGANT, + [MoveId.PETAL_BLIZZARD]: [ + SpeciesId.VENUSAUR, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.MEW, + SpeciesId.MEGANIUM, + SpeciesId.BELLOSSOM, + SpeciesId.SUNFLORA, + SpeciesId.SHIFTRY, + SpeciesId.ROSELIA, + SpeciesId.TROPIUS, + SpeciesId.ROSERADE, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.SHAYMIN, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.LILLIGANT, + SpeciesId.MARACTUS, + SpeciesId.SAWSBUCK, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ZARUDE, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.ARBOLIVA, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.HISUI_LILLIGANT, ], - [Moves.DISARMING_VOICE]: [ - Species.PIKACHU, - Species.RAICHU, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.CHANSEY, - Species.MEW, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.MARILL, - Species.AZUMARILL, - Species.BLISSEY, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.WHISMUR, - Species.SKITTY, - Species.DELCATTY, - Species.ILLUMISE, - Species.SWABLU, - Species.ALTARIA, - Species.MILOTIC, - Species.CHIMECHO, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.HAPPINY, - Species.GALLADE, - Species.PANSAGE, - Species.PANSEAR, - Species.PANPOUR, - Species.AUDINO, - Species.DUCKLETT, - Species.SWANNA, - Species.MELOETTA, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.ESPURR, - Species.MEOWSTIC, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SYLVEON, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.TOGEDEMARU, - Species.TAPU_FINI, - Species.MAGEARNA, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.INDEEDEE, - Species.ENAMORUS, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.LECHONK, - Species.OINKOLOGNE, - Species.FLITTLE, - Species.ESPATHRA, - Species.FINIZEN, - Species.PALAFIN, - Species.FLUTTER_MANE, - Species.FEZANDIPITI, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ETERNAL_FLOETTE, + [MoveId.DISARMING_VOICE]: [ + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.CHANSEY, + SpeciesId.MEW, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.BLISSEY, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.WHISMUR, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.ILLUMISE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.MILOTIC, + SpeciesId.CHIMECHO, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.HAPPINY, + SpeciesId.GALLADE, + SpeciesId.PANSAGE, + SpeciesId.PANSEAR, + SpeciesId.PANPOUR, + SpeciesId.AUDINO, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.MELOETTA, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SYLVEON, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.TOGEDEMARU, + SpeciesId.TAPU_FINI, + SpeciesId.MAGEARNA, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.INDEEDEE, + SpeciesId.ENAMORUS, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.FLUTTER_MANE, + SpeciesId.FEZANDIPITI, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ETERNAL_FLOETTE, ], - [Moves.DRAINING_KISS]: [ - Species.BUTTERFREE, - Species.PIKACHU, - Species.RAICHU, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.DROWZEE, - Species.HYPNO, - Species.JYNX, - Species.MEW, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.MARILL, - Species.AZUMARILL, - Species.ESPEON, - Species.MISDREAVUS, - Species.SMOOCHUM, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.AZURILL, - Species.MAWILE, - Species.ILLUMISE, - Species.MILOTIC, - Species.CHIMECHO, - Species.GOREBYSS, - Species.LUVDISC, - Species.LATIAS, - Species.CHERUBI, - Species.CHERRIM, - Species.MISMAGIUS, - Species.TOGEKISS, - Species.GALLADE, - Species.FROSLASS, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.AUDINO, - Species.VIVILLON, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.SYLVEON, - Species.DEDENNE, - Species.KLEFKI, - Species.XERNEAS, - Species.DIANCIE, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.MORELULL, - Species.SHIINOTIC, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.MIMIKYU, - Species.TAPU_LELE, - Species.TAPU_FINI, - Species.MAGEARNA, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.MILCERY, - Species.ALCREMIE, - Species.INDEEDEE, - Species.SPECTRIER, - Species.CALYREX, - Species.ENAMORUS, - Species.DACHSBUN, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.FINIZEN, - Species.PALAFIN, - Species.FLUTTER_MANE, - Species.ALOLA_RAICHU, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ETERNAL_FLOETTE, + [MoveId.DRAINING_KISS]: [ + SpeciesId.BUTTERFREE, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.JYNX, + SpeciesId.MEW, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.ESPEON, + SpeciesId.MISDREAVUS, + SpeciesId.SMOOCHUM, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.AZURILL, + SpeciesId.MAWILE, + SpeciesId.ILLUMISE, + SpeciesId.MILOTIC, + SpeciesId.CHIMECHO, + SpeciesId.GOREBYSS, + SpeciesId.LUVDISC, + SpeciesId.LATIAS, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.MISMAGIUS, + SpeciesId.TOGEKISS, + SpeciesId.GALLADE, + SpeciesId.FROSLASS, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.AUDINO, + SpeciesId.VIVILLON, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.SYLVEON, + SpeciesId.DEDENNE, + SpeciesId.KLEFKI, + SpeciesId.XERNEAS, + SpeciesId.DIANCIE, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.MIMIKYU, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_FINI, + SpeciesId.MAGEARNA, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.MILCERY, + SpeciesId.ALCREMIE, + SpeciesId.INDEEDEE, + SpeciesId.SPECTRIER, + SpeciesId.CALYREX, + SpeciesId.ENAMORUS, + SpeciesId.DACHSBUN, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.FLUTTER_MANE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ETERNAL_FLOETTE, ], - [Moves.GRASSY_TERRAIN]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.TANGELA, - Species.MEW, - Species.CHIKORITA, - Species.BELLOSSOM, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.SUNKERN, - Species.SUNFLORA, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.SHROOMISH, - Species.BRELOOM, - Species.CACNEA, - Species.CACTURNE, - Species.CRADILY, - Species.TROPIUS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.ROSERADE, - Species.CHERUBI, - Species.CHERRIM, - Species.TANGROWTH, - Species.ARCEUS, - Species.SNIVY, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.LILLIGANT, - Species.MARACTUS, - Species.DEERLING, - Species.SAWSBUCK, - Species.FOONGUS, - Species.AMOONGUSS, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.PHANTUMP, - Species.TREVENANT, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.FOMANTIS, - Species.LURANTIS, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.TAPU_BULU, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.FLAPPLE, - Species.APPLETUN, - Species.ZARUDE, - Species.CALYREX, - Species.ENAMORUS, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.BRUTE_BONNET, - Species.WO_CHIEN, - Species.IRON_LEAVES, - Species.DIPPLIN, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.OGERPON, - Species.HYDRAPPLE, - Species.ALOLA_EXEGGUTOR, - Species.ETERNAL_FLOETTE, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_LILLIGANT, - Species.HISUI_DECIDUEYE, + [MoveId.GRASSY_TERRAIN]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.TANGELA, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BELLOSSOM, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.CRADILY, + SpeciesId.TROPIUS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.ROSERADE, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.TANGROWTH, + SpeciesId.ARCEUS, + SpeciesId.SNIVY, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.LILLIGANT, + SpeciesId.MARACTUS, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.TAPU_BULU, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.ZARUDE, + SpeciesId.CALYREX, + SpeciesId.ENAMORUS, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.BRUTE_BONNET, + SpeciesId.WO_CHIEN, + SpeciesId.IRON_LEAVES, + SpeciesId.DIPPLIN, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.OGERPON, + SpeciesId.HYDRAPPLE, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.MISTY_TERRAIN]: [ - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.MR_MIME, - Species.MEW, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.MARILL, - Species.AZUMARILL, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.MAWILE, - Species.MIME_JR, - Species.GALLADE, - Species.ARCEUS, - Species.AUDINO, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.ALOMOMOLA, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, + [MoveId.MISTY_TERRAIN]: [ + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.MR_MIME, + SpeciesId.MEW, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.MAWILE, + SpeciesId.MIME_JR, + SpeciesId.GALLADE, + SpeciesId.ARCEUS, + SpeciesId.AUDINO, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.ALOMOMOLA, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, [ - Species.MEOWSTIC, + SpeciesId.MEOWSTIC, "male", ], - Species.SPRITZEE, - Species.AROMATISSE, - Species.SYLVEON, - Species.DEDENNE, - Species.CARBINK, - Species.KLEFKI, - Species.XERNEAS, - Species.VOLCANION, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.MIMIKYU, - Species.TAPU_FINI, - Species.MAGEARNA, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.MR_RIME, - Species.MILCERY, - Species.ALCREMIE, - Species.ZACIAN, - Species.ENAMORUS, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.FIDOUGH, - Species.DACHSBUN, - Species.SCREAM_TAIL, - Species.FLUTTER_MANE, - Species.IRON_VALIANT, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ETERNAL_FLOETTE, - Species.GALAR_RAPIDASH, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SYLVEON, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.KLEFKI, + SpeciesId.XERNEAS, + SpeciesId.VOLCANION, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.MIMIKYU, + SpeciesId.TAPU_FINI, + SpeciesId.MAGEARNA, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.MR_RIME, + SpeciesId.MILCERY, + SpeciesId.ALCREMIE, + SpeciesId.ZACIAN, + SpeciesId.ENAMORUS, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.SCREAM_TAIL, + SpeciesId.FLUTTER_MANE, + SpeciesId.IRON_VALIANT, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, ], - [Moves.PLAY_ROUGH]: [ - Species.PIKACHU, - Species.RAICHU, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.MEOWTH, - Species.PERSIAN, - Species.GROWLITHE, - Species.ARCANINE, - Species.PONYTA, - Species.RAPIDASH, - Species.DEWGONG, - Species.MEW, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.SENTRET, - Species.FURRET, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.BELLOSSOM, - Species.MARILL, - Species.AZUMARILL, - Species.SNUBBULL, - Species.GRANBULL, - Species.TEDDIURSA, - Species.URSARING, - Species.PHANPY, - Species.DONPHAN, - Species.MILTANK, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.LINOONE, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.SKITTY, - Species.DELCATTY, - Species.MAWILE, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.SWABLU, - Species.ALTARIA, - Species.ABSOL, - Species.JIRACHI, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.PACHIRISU, - Species.CHERRIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.GLAMEOW, - Species.PURUGLY, - Species.STUNKY, - Species.SKUNTANK, - Species.TOGEKISS, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.SHAYMIN, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.WHIMSICOTT, - Species.MINCCINO, - Species.CINCCINO, - Species.DEERLING, - Species.SAWSBUCK, - Species.ALOMOMOLA, - Species.CUBCHOO, - Species.BEARTIC, - Species.MELOETTA, - Species.SKIDDO, - Species.GOGOAT, - Species.ESPURR, - Species.MEOWSTIC, - Species.SWIRLIX, - Species.SLURPUFF, - Species.SKRELP, - Species.DRAGALGE, - Species.TYRUNT, - Species.TYRANTRUM, - Species.SYLVEON, - Species.DEDENNE, - Species.KLEFKI, - Species.XERNEAS, - Species.DIANCIE, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.KOMALA, - Species.MIMIKYU, - Species.DRAMPA, - Species.TAPU_LELE, - Species.TAPU_FINI, - Species.MAGEARNA, - Species.ZERAORA, - Species.NICKIT, - Species.THIEVUL, - Species.YAMPER, - Species.BOLTUND, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.PERRSERKER, - Species.ALCREMIE, - Species.FROSMOTH, - Species.INDEEDEE, - Species.CUFANT, - Species.COPPERAJAH, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.URSALUNA, - Species.ENAMORUS, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.LECHONK, - Species.OINKOLOGNE, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.FIDOUGH, - Species.DACHSBUN, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.CETODDLE, - Species.CETITAN, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.IRON_BUNDLE, - Species.IRON_HANDS, - Species.FEZANDIPITI, - Species.OGERPON, - Species.ALOLA_RAICHU, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.GALAR_MEOWTH, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_WEEZING, - Species.HISUI_TYPHLOSION, + [MoveId.PLAY_ROUGH]: [ + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.DEWGONG, + SpeciesId.MEW, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.BELLOSSOM, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.MILTANK, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.LINOONE, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.MAWILE, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ABSOL, + SpeciesId.JIRACHI, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.PACHIRISU, + SpeciesId.CHERRIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.TOGEKISS, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.SHAYMIN, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.WHIMSICOTT, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.ALOMOMOLA, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.MELOETTA, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.SYLVEON, + SpeciesId.DEDENNE, + SpeciesId.KLEFKI, + SpeciesId.XERNEAS, + SpeciesId.DIANCIE, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.KOMALA, + SpeciesId.MIMIKYU, + SpeciesId.DRAMPA, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_FINI, + SpeciesId.MAGEARNA, + SpeciesId.ZERAORA, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.PERRSERKER, + SpeciesId.ALCREMIE, + SpeciesId.FROSMOTH, + SpeciesId.INDEEDEE, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.URSALUNA, + SpeciesId.ENAMORUS, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_HANDS, + SpeciesId.FEZANDIPITI, + SpeciesId.OGERPON, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_WEEZING, + SpeciesId.HISUI_TYPHLOSION, ], - [Moves.CONFIDE]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.BUTTERFREE, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.SEEL, - Species.DEWGONG, - Species.GRIMER, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.ONIX, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.VOLTORB, - Species.ELECTRODE, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.PORYGON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.YANMA, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.KINGDRA, - Species.PHANPY, - Species.DONPHAN, - Species.PORYGON2, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.NOSEPASS, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.FEEBAS, - Species.MILOTIC, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.TROPIUS, - Species.CHIMECHO, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.BIDOOF, - Species.BIBAREL, - Species.KRICKETUNE, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.BUDEW, - Species.ROSERADE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.WORMADAM, - Species.MOTHIM, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.CHERUBI, - Species.CHERRIM, - Species.SHELLOS, - Species.GASTRODON, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.STUNKY, - Species.SKUNTANK, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.MIME_JR, - Species.HAPPINY, - Species.CHATOT, - Species.SPIRITOMB, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.CARNIVINE, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.YANMEGA, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.PORYGON_Z, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.PHIONE, - Species.MANAPHY, - Species.DARKRAI, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.MUNNA, - Species.MUSHARNA, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.WOOBAT, - Species.SWOOBAT, - Species.DRILBUR, - Species.EXCADRILL, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.BASCULIN, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.MARACTUS, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.TRUBBISH, - Species.GARBODOR, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.DUCKLETT, - Species.SWANNA, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.JOLTIK, - Species.GALVANTULA, - Species.FERROSEED, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.SHELMET, - Species.ACCELGOR, - Species.STUNFISK, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.DURANT, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.KELDEO, - Species.MELOETTA, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.VIVILLON, - Species.LITLEO, - Species.PYROAR, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.ESPURR, - Species.MEOWSTIC, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.CARBINK, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.BERGMITE, - Species.AVALUGG, - Species.NOIBAT, - Species.NOIVERN, - Species.XERNEAS, - Species.YVELTAL, - Species.ZYGARDE, - Species.DIANCIE, - Species.HOOPA, - Species.VOLCANION, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.MUDBRAY, - Species.MUDSDALE, - Species.DEWPIDER, - Species.ARAQUANID, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.SALANDIT, - Species.SALAZZLE, - Species.STUFFUL, - Species.BEWEAR, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.PASSIMIAN, - Species.WIMPOD, - Species.GOLISOPOD, - Species.SANDYGAST, - Species.PALOSSAND, - Species.PYUKUMUKU, - Species.TYPE_NULL, - Species.SILVALLY, - Species.MINIOR, - Species.KOMALA, - Species.TURTONATOR, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.BRUXISH, - Species.DRAMPA, - Species.DHELMISE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.SOLGALEO, - Species.LUNALA, - Species.NIHILEGO, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.XURKITREE, - Species.CELESTEELA, - Species.KARTANA, - Species.NECROZMA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.POIPOLE, - Species.NAGANADEL, - Species.BLACEPHALON, - Species.ZERAORA, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.ETERNAL_FLOETTE, + [MoveId.CONFIDE]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.PORYGON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.YANMA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.KINGDRA, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.NOSEPASS, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.KRICKETUNE, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.CHATOT, + SpeciesId.SPIRITOMB, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.BASCULIN, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.MARACTUS, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.STUNFISK, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.VIVILLON, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.PYUKUMUKU, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.XURKITREE, + SpeciesId.CELESTEELA, + SpeciesId.KARTANA, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.BLACEPHALON, + SpeciesId.ZERAORA, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.ETERNAL_FLOETTE, ], - [Moves.MYSTICAL_FIRE]: [ - Species.CHARIZARD, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.PONYTA, - Species.RAPIDASH, - Species.MR_MIME, - Species.FLAREON, - Species.MOLTRES, - Species.MEW, - Species.TOGEPI, - Species.TOGETIC, - Species.HO_OH, - Species.RALTS, - Species.GARDEVOIR, - Species.LATIAS, - Species.LATIOS, - Species.MISMAGIUS, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.VICTINI, - Species.DARMANITAN, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.VOLCARONA, - Species.RESHIRAM, - Species.DELPHOX, - Species.SYLVEON, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.DIANCIE, - Species.SOLGALEO, - Species.BLACEPHALON, - Species.CENTISKORCH, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.ALCREMIE, - Species.INDEEDEE, - Species.ETERNATUS, - Species.ENAMORUS, - Species.ARMAROUGE, - Species.FLUTTER_MANE, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, + [MoveId.MYSTICAL_FIRE]: [ + SpeciesId.CHARIZARD, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.MR_MIME, + SpeciesId.FLAREON, + SpeciesId.MOLTRES, + SpeciesId.MEW, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.HO_OH, + SpeciesId.RALTS, + SpeciesId.GARDEVOIR, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.MISMAGIUS, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.VICTINI, + SpeciesId.DARMANITAN, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.VOLCARONA, + SpeciesId.RESHIRAM, + SpeciesId.DELPHOX, + SpeciesId.SYLVEON, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.DIANCIE, + SpeciesId.SOLGALEO, + SpeciesId.BLACEPHALON, + SpeciesId.CENTISKORCH, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.ALCREMIE, + SpeciesId.INDEEDEE, + SpeciesId.ETERNATUS, + SpeciesId.ENAMORUS, + SpeciesId.ARMAROUGE, + SpeciesId.FLUTTER_MANE, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, ], - [Moves.EERIE_IMPULSE]: [ - Species.PIKACHU, - Species.RAICHU, - Species.MAGNEMITE, - Species.MAGNETON, - Species.VOLTORB, - Species.ELECTRODE, - Species.JOLTEON, - Species.PORYGON, - Species.ZAPDOS, - Species.MEW, - Species.LANTURN, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.WOOPER, - Species.QUAGSIRE, - Species.PORYGON2, - Species.RAIKOU, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.BALTOY, - Species.CLAYDOL, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.PACHIRISU, - Species.MAGNEZONE, - Species.PORYGON_Z, - Species.ROTOM, - Species.EMOLGA, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.STUNFISK, - Species.THUNDURUS, - Species.HELIOLISK, - Species.DEDENNE, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.TOGEDEMARU, - Species.TAPU_KOKO, - Species.XURKITREE, - Species.MAGEARNA, - Species.BOLTUND, - Species.TOXTRICITY, - Species.MORPEKO, - Species.REGIELEKI, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TADBULB, - Species.BELLIBOLT, - Species.WATTREL, - Species.KILOWATTREL, - Species.SANDY_SHOCKS, - Species.IRON_THORNS, - Species.MIRAIDON, - Species.RAGING_BOLT, - Species.ALOLA_RAICHU, + [MoveId.EERIE_IMPULSE]: [ + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.JOLTEON, + SpeciesId.PORYGON, + SpeciesId.ZAPDOS, + SpeciesId.MEW, + SpeciesId.LANTURN, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.PORYGON2, + SpeciesId.RAIKOU, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.PACHIRISU, + SpeciesId.MAGNEZONE, + SpeciesId.PORYGON_Z, + SpeciesId.ROTOM, + SpeciesId.EMOLGA, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.STUNFISK, + SpeciesId.THUNDURUS, + SpeciesId.HELIOLISK, + SpeciesId.DEDENNE, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.TOGEDEMARU, + SpeciesId.TAPU_KOKO, + SpeciesId.XURKITREE, + SpeciesId.MAGEARNA, + SpeciesId.BOLTUND, + SpeciesId.TOXTRICITY, + SpeciesId.MORPEKO, + SpeciesId.REGIELEKI, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_THORNS, + SpeciesId.MIRAIDON, + SpeciesId.RAGING_BOLT, + SpeciesId.ALOLA_RAICHU, ], - [Moves.VENOM_DRENCH]: [ - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.ZUBAT, - Species.GOLBAT, - Species.TENTACRUEL, - Species.KOFFING, - Species.WEEZING, - Species.MEW, - Species.CROBAT, - Species.QWILFISH, - Species.ROSERADE, - Species.STUNKY, - Species.SKUNTANK, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.WOOBAT, - Species.SWOOBAT, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.TRUBBISH, - Species.GARBODOR, - Species.ACCELGOR, - Species.SKRELP, - Species.DRAGALGE, - Species.PHANTUMP, - Species.TREVENANT, - Species.MAREANIE, - Species.TOXAPEX, - Species.SALANDIT, - Species.SALAZZLE, - Species.PYUKUMUKU, - Species.NIHILEGO, - Species.POIPOLE, - Species.NAGANADEL, - Species.PINCURCHIN, - Species.ETERNATUS, - Species.GALAR_WEEZING, - Species.GALAR_SLOWKING, + [MoveId.VENOM_DRENCH]: [ + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.TENTACRUEL, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.MEW, + SpeciesId.CROBAT, + SpeciesId.QWILFISH, + SpeciesId.ROSERADE, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.ACCELGOR, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.PYUKUMUKU, + SpeciesId.NIHILEGO, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.PINCURCHIN, + SpeciesId.ETERNATUS, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_SLOWKING, [ - Species.TOXTRICITY, + SpeciesId.TOXTRICITY, "low-key", ], ], - [Moves.ELECTRIC_TERRAIN]: [ - Species.PIKACHU, - Species.RAICHU, - Species.MAGNEMITE, - Species.MAGNETON, - Species.VOLTORB, - Species.ELECTRODE, - Species.CHANSEY, - Species.JOLTEON, - Species.ZAPDOS, - Species.MEW, - Species.PICHU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BLISSEY, - Species.RAIKOU, - Species.MANECTRIC, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.PACHIRISU, - Species.MAGNEZONE, - Species.ELECTIVIRE, - Species.ROTOM, - Species.ARCEUS, - Species.KLINKLANG, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.STUNFISK, - Species.THUNDURUS, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.DEDENNE, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.TOGEDEMARU, - Species.TAPU_KOKO, - Species.XURKITREE, - Species.ZERAORA, - Species.MELMETAL, - Species.BOLTUND, - Species.TOXTRICITY, - Species.PINCURCHIN, - Species.MORPEKO, - Species.REGIELEKI, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TADBULB, - Species.BELLIBOLT, - Species.WATTREL, - Species.KILOWATTREL, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_BUNDLE, - Species.IRON_HANDS, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.IRON_THORNS, - Species.IRON_VALIANT, - Species.MIRAIDON, - Species.IRON_LEAVES, - Species.RAGING_BOLT, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.ALOLA_RAICHU, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, + [MoveId.ELECTRIC_TERRAIN]: [ + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.CHANSEY, + SpeciesId.JOLTEON, + SpeciesId.ZAPDOS, + SpeciesId.MEW, + SpeciesId.PICHU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.MANECTRIC, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.PACHIRISU, + SpeciesId.MAGNEZONE, + SpeciesId.ELECTIVIRE, + SpeciesId.ROTOM, + SpeciesId.ARCEUS, + SpeciesId.KLINKLANG, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.STUNFISK, + SpeciesId.THUNDURUS, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.DEDENNE, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.TOGEDEMARU, + SpeciesId.TAPU_KOKO, + SpeciesId.XURKITREE, + SpeciesId.ZERAORA, + SpeciesId.MELMETAL, + SpeciesId.BOLTUND, + SpeciesId.TOXTRICITY, + SpeciesId.PINCURCHIN, + SpeciesId.MORPEKO, + SpeciesId.REGIELEKI, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_THORNS, + SpeciesId.IRON_VALIANT, + SpeciesId.MIRAIDON, + SpeciesId.IRON_LEAVES, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, ], - [Moves.DAZZLING_GLEAM]: [ - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.CHANSEY, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.MEW, - Species.CHINCHOU, - Species.LANTURN, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.SUNFLORA, - Species.ESPEON, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.SNUBBULL, - Species.GRANBULL, - Species.BLISSEY, - Species.CELEBI, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.NOSEPASS, - Species.SABLEYE, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.SPOINK, - Species.GRUMPIG, - Species.SWABLU, - Species.ALTARIA, - Species.BALTOY, - Species.CLAYDOL, - Species.SHUPPET, - Species.BANETTE, - Species.CHIMECHO, - Species.JIRACHI, - Species.BUDEW, - Species.ROSERADE, - Species.CHERUBI, - Species.CHERRIM, - Species.MISMAGIUS, - Species.CHINGLING, - Species.MIME_JR, - Species.FINNEON, - Species.LUMINEON, - Species.TOGEKISS, - Species.GALLADE, - Species.PROBOPASS, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.CRESSELIA, - Species.PHIONE, - Species.MANAPHY, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.MUNNA, - Species.MUSHARNA, - Species.AUDINO, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.SIGILYPH, - Species.MINCCINO, - Species.CINCCINO, - Species.FRILLISH, - Species.JELLICENT, - Species.MELOETTA, - Species.DELPHOX, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.SYLVEON, - Species.DEDENNE, - Species.CARBINK, - Species.KLEFKI, - Species.XERNEAS, - Species.DIANCIE, - Species.PRIMARINA, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.MORELULL, - Species.SHIINOTIC, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.MINIOR, - Species.MIMIKYU, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.LUNALA, - Species.NIHILEGO, - Species.XURKITREE, - Species.MAGEARNA, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.MR_RIME, - Species.MILCERY, - Species.ALCREMIE, - Species.FROSMOTH, - Species.INDEEDEE, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.ENAMORUS, - Species.FIDOUGH, - Species.DACHSBUN, - Species.ARBOLIVA, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.RABSCA, - Species.ESPATHRA, - Species.GLIMMET, - Species.GLIMMORA, - Species.FARIGIRAF, - Species.SCREAM_TAIL, - Species.FLUTTER_MANE, - Species.IRON_MOTH, - Species.GHOLDENGO, - Species.IRON_VALIANT, - Species.MIRAIDON, - Species.FEZANDIPITI, - Species.TERAPAGOS, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ETERNAL_FLOETTE, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.HISUI_BRAVIARY, + [MoveId.DAZZLING_GLEAM]: [ + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.CHANSEY, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.MEW, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.SUNFLORA, + SpeciesId.ESPEON, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.BLISSEY, + SpeciesId.CELEBI, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.NOSEPASS, + SpeciesId.SABLEYE, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.CHIMECHO, + SpeciesId.JIRACHI, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.MISMAGIUS, + SpeciesId.CHINGLING, + SpeciesId.MIME_JR, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.TOGEKISS, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.CRESSELIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.AUDINO, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.SIGILYPH, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.MELOETTA, + SpeciesId.DELPHOX, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.SYLVEON, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.KLEFKI, + SpeciesId.XERNEAS, + SpeciesId.DIANCIE, + SpeciesId.PRIMARINA, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.MINIOR, + SpeciesId.MIMIKYU, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.XURKITREE, + SpeciesId.MAGEARNA, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.MR_RIME, + SpeciesId.MILCERY, + SpeciesId.ALCREMIE, + SpeciesId.FROSMOTH, + SpeciesId.INDEEDEE, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.ENAMORUS, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.ARBOLIVA, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.RABSCA, + SpeciesId.ESPATHRA, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.FARIGIRAF, + SpeciesId.SCREAM_TAIL, + SpeciesId.FLUTTER_MANE, + SpeciesId.IRON_MOTH, + SpeciesId.GHOLDENGO, + SpeciesId.IRON_VALIANT, + SpeciesId.MIRAIDON, + SpeciesId.FEZANDIPITI, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.HISUI_BRAVIARY, ], - [Moves.INFESTATION]: [ - Species.BUTTERFREE, - Species.BEEDRILL, - Species.EKANS, - Species.ARBOK, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.VENONAT, - Species.VENOMOTH, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GRIMER, - Species.MUK, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.KOFFING, - Species.WEEZING, - Species.TANGELA, - Species.MR_MIME, - Species.MEW, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.BELLOSSOM, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.WOOPER, - Species.QUAGSIRE, - Species.SHUCKLE, - Species.SLUGMA, - Species.MAGCARGO, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.SURSKIT, - Species.MASQUERAIN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.GULPIN, - Species.SWALOT, - Species.SEVIPER, - Species.LILEEP, - Species.CRADILY, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.HUNTAIL, - Species.GOREBYSS, - Species.KRICKETUNE, - Species.WORMADAM, - Species.MOTHIM, - Species.VESPIQUEN, - Species.SHELLOS, - Species.GASTRODON, - Species.MIME_JR, - Species.SPIRITOMB, - Species.SKORUPI, - Species.DRAPION, - Species.CARNIVINE, - Species.TANGROWTH, - Species.DUSKNOIR, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TRUBBISH, - Species.GARBODOR, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.JOLTIK, - Species.GALVANTULA, - Species.SHELMET, - Species.ACCELGOR, - Species.STUNFISK, - Species.DURANT, - Species.GENESECT, - Species.VIVILLON, - Species.PANGORO, - Species.BINACLE, - Species.BARBARACLE, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.MAREANIE, - Species.TOXAPEX, - Species.DEWPIDER, - Species.ARAQUANID, - Species.SANDYGAST, - Species.PALOSSAND, - Species.MIMIKYU, - Species.STAKATAKA, - Species.BLIPBUG, - Species.FROSMOTH, - Species.DREEPY, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.DIPPLIN, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, + [MoveId.INFESTATION]: [ + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.TANGELA, + SpeciesId.MR_MIME, + SpeciesId.MEW, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.BELLOSSOM, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.SHUCKLE, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.SEVIPER, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.KRICKETUNE, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.VESPIQUEN, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.MIME_JR, + SpeciesId.SPIRITOMB, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CARNIVINE, + SpeciesId.TANGROWTH, + SpeciesId.DUSKNOIR, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.STUNFISK, + SpeciesId.DURANT, + SpeciesId.GENESECT, + SpeciesId.VIVILLON, + SpeciesId.PANGORO, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.MIMIKYU, + SpeciesId.STAKATAKA, + SpeciesId.BLIPBUG, + SpeciesId.FROSMOTH, + SpeciesId.DREEPY, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.DIPPLIN, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, ], - [Moves.POWER_UP_PUNCH]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.GRIMER, - Species.MUK, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.RHYDON, - Species.CHANSEY, - Species.KANGASKHAN, - Species.MR_MIME, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.SNORLAX, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.LEDYBA, - Species.LEDIAN, - Species.FLAAFFY, - Species.AMPHAROS, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.AIPOM, - Species.WOOPER, - Species.QUAGSIRE, - Species.SLOWKING, - Species.SNUBBULL, - Species.GRANBULL, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.DELIBIRD, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.LOMBRE, - Species.LUDICOLO, - Species.NUZLEAF, - Species.SHIFTRY, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.SABLEYE, - Species.MAWILE, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.VOLBEAT, - Species.ILLUMISE, - Species.GULPIN, - Species.SWALOT, - Species.GRUMPIG, - Species.SPINDA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.ZANGOOSE, - Species.KECLEON, - Species.DUSCLOPS, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.GROUDON, - Species.JIRACHI, - Species.DEOXYS, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.KRICKETUNE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.BUIZEL, - Species.FLOATZEL, - Species.AMBIPOM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.CROAGUNK, - Species.TOXICROAK, - Species.WEAVILE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.GALLADE, - Species.DUSKNOIR, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.REGIGIGAS, - Species.DARKRAI, - Species.VICTINI, - Species.PIGNITE, - Species.EMBOAR, - Species.WATCHOG, - Species.SIMISAGE, - Species.SIMISEAR, - Species.SIMIPOUR, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.SCRAGGY, - Species.SCRAFTY, - Species.GOTHITELLE, - Species.REUNICLUS, - Species.EELEKTROSS, - Species.CUBCHOO, - Species.BEARTIC, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.HEATMOR, - Species.MELOETTA, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.PANCHAM, - Species.PANGORO, - Species.MEOWSTIC, - Species.BINACLE, - Species.BARBARACLE, - Species.HAWLUCHA, - Species.PHANTUMP, - Species.TREVENANT, - Species.HOOPA, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.BUZZWOLE, - Species.ZERAORA, - Species.TOXEL, - Species.TOXTRICITY, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.GRIMMSNARL, - Species.URSALUNA, - Species.ANNIHILAPE, - Species.KINGAMBIT, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_MAROWAK, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, + [MoveId.POWER_UP_PUNCH]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.KANGASKHAN, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.SNORLAX, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.AIPOM, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.DELIBIRD, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.ZANGOOSE, + SpeciesId.KECLEON, + SpeciesId.DUSCLOPS, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.GROUDON, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.KRICKETUNE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.AMBIPOM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.WEAVILE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.GALLADE, + SpeciesId.DUSKNOIR, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.REGIGIGAS, + SpeciesId.DARKRAI, + SpeciesId.VICTINI, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.WATCHOG, + SpeciesId.SIMISAGE, + SpeciesId.SIMISEAR, + SpeciesId.SIMIPOUR, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.GOTHITELLE, + SpeciesId.REUNICLUS, + SpeciesId.EELEKTROSS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.HEATMOR, + SpeciesId.MELOETTA, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.MEOWSTIC, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.HAWLUCHA, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.HOOPA, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.BUZZWOLE, + SpeciesId.ZERAORA, + SpeciesId.TOXEL, + SpeciesId.TOXTRICITY, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.GRIMMSNARL, + SpeciesId.URSALUNA, + SpeciesId.ANNIHILAPE, + SpeciesId.KINGAMBIT, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, ], - [Moves.DARKEST_LARIAT]: [ - Species.POLIWRATH, - Species.MACHAMP, - Species.SNORLAX, - Species.MEW, - Species.SWAMPERT, - Species.ELECTIVIRE, - Species.DUSKNOIR, - Species.REGIGIGAS, - Species.KROOKODILE, - Species.GOLURK, - Species.PANGORO, - Species.INCINEROAR, - Species.BEWEAR, - Species.TAPU_BULU, - Species.BUZZWOLE, - Species.MELMETAL, - Species.RILLABOOM, - Species.GRIMMSNARL, - Species.URSHIFU, - Species.ZARUDE, + [MoveId.DARKEST_LARIAT]: [ + SpeciesId.POLIWRATH, + SpeciesId.MACHAMP, + SpeciesId.SNORLAX, + SpeciesId.MEW, + SpeciesId.SWAMPERT, + SpeciesId.ELECTIVIRE, + SpeciesId.DUSKNOIR, + SpeciesId.REGIGIGAS, + SpeciesId.KROOKODILE, + SpeciesId.GOLURK, + SpeciesId.PANGORO, + SpeciesId.INCINEROAR, + SpeciesId.BEWEAR, + SpeciesId.TAPU_BULU, + SpeciesId.BUZZWOLE, + SpeciesId.MELMETAL, + SpeciesId.RILLABOOM, + SpeciesId.GRIMMSNARL, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, ], - [Moves.HIGH_HORSEPOWER]: [ - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.DUGTRIO, - Species.POLIWRATH, - Species.MACHAMP, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.PONYTA, - Species.RAPIDASH, - Species.ONIX, - Species.KINGLER, - Species.RHYHORN, - Species.RHYDON, - Species.PINSIR, - Species.TAUROS, - Species.SNORLAX, - Species.MEW, - Species.SUDOWOODO, - Species.QUAGSIRE, - Species.GIRAFARIG, - Species.GLIGAR, - Species.STEELIX, - Species.HERACROSS, - Species.URSARING, - Species.SLUGMA, - Species.SWINUB, - Species.PILOSWINE, - Species.PHANPY, - Species.DONPHAN, - Species.MILTANK, - Species.PUPITAR, - Species.TYRANITAR, - Species.SWAMPERT, - Species.SLAKING, - Species.NOSEPASS, - Species.AGGRON, - Species.NUMEL, - Species.CAMERUPT, - Species.BARBOACH, - Species.WHISCASH, - Species.GROUDON, - Species.TORTERRA, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.RHYPERIOR, - Species.GLISCOR, - Species.MAMOSWINE, - Species.PROBOPASS, - Species.REGIGIGAS, - Species.PIGNITE, - Species.EMBOAR, - Species.ZEBSTRIKA, - Species.DRILBUR, - Species.EXCADRILL, - Species.GURDURR, - Species.CONKELDURR, - Species.KROOKODILE, - Species.SAWSBUCK, - Species.GOLURK, - Species.BOUFFALANT, - Species.TERRAKION, - Species.CHESNAUGHT, - Species.DIGGERSBY, - Species.GOGOAT, - Species.TYRANTRUM, - Species.AVALUGG, - Species.ZYGARDE, - Species.MUDBRAY, - Species.MUDSDALE, - Species.BEWEAR, - Species.TAPU_BULU, - Species.BUZZWOLE, - Species.GUZZLORD, - Species.STAKATAKA, - Species.MELMETAL, - Species.RILLABOOM, - Species.GREEDENT, - Species.DREDNAW, - Species.CARKOL, - Species.COALOSSAL, - Species.APPLETUN, - Species.SANDACONDA, - Species.FALINKS, - Species.STONJOURNER, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.GLASTRIER, - Species.WYRDEER, - Species.URSALUNA, - Species.OINKOLOGNE, - Species.KLAWF, - Species.REVAVROOM, - Species.ORTHWORM, - Species.CETODDLE, - Species.CETITAN, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.GREAT_TUSK, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_THORNS, - Species.BAXCALIBUR, - Species.OKIDOGI, - Species.ALOLA_DUGTRIO, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, + [MoveId.HIGH_HORSEPOWER]: [ + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.DUGTRIO, + SpeciesId.POLIWRATH, + SpeciesId.MACHAMP, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.ONIX, + SpeciesId.KINGLER, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.SNORLAX, + SpeciesId.MEW, + SpeciesId.SUDOWOODO, + SpeciesId.QUAGSIRE, + SpeciesId.GIRAFARIG, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.HERACROSS, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.MILTANK, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.SWAMPERT, + SpeciesId.SLAKING, + SpeciesId.NOSEPASS, + SpeciesId.AGGRON, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.GROUDON, + SpeciesId.TORTERRA, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.RHYPERIOR, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.PROBOPASS, + SpeciesId.REGIGIGAS, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.ZEBSTRIKA, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.KROOKODILE, + SpeciesId.SAWSBUCK, + SpeciesId.GOLURK, + SpeciesId.BOUFFALANT, + SpeciesId.TERRAKION, + SpeciesId.CHESNAUGHT, + SpeciesId.DIGGERSBY, + SpeciesId.GOGOAT, + SpeciesId.TYRANTRUM, + SpeciesId.AVALUGG, + SpeciesId.ZYGARDE, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.BEWEAR, + SpeciesId.TAPU_BULU, + SpeciesId.BUZZWOLE, + SpeciesId.GUZZLORD, + SpeciesId.STAKATAKA, + SpeciesId.MELMETAL, + SpeciesId.RILLABOOM, + SpeciesId.GREEDENT, + SpeciesId.DREDNAW, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.APPLETUN, + SpeciesId.SANDACONDA, + SpeciesId.FALINKS, + SpeciesId.STONJOURNER, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.GLASTRIER, + SpeciesId.WYRDEER, + SpeciesId.URSALUNA, + SpeciesId.OINKOLOGNE, + SpeciesId.KLAWF, + SpeciesId.REVAVROOM, + SpeciesId.ORTHWORM, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.GREAT_TUSK, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_THORNS, + SpeciesId.BAXCALIBUR, + SpeciesId.OKIDOGI, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", ], - Species.HISUI_AVALUGG, - Species.PALDEA_TAUROS, - Species.BLOODMOON_URSALUNA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.PALDEA_TAUROS, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.SOLAR_BLADE]: [ - Species.PONYTA, - Species.RAPIDASH, - Species.FARFETCHD, - Species.MEW, - Species.CELEBI, - Species.GROVYLE, - Species.SCEPTILE, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TROPIUS, - Species.CHERRIM, - Species.TANGROWTH, - Species.LEAFEON, - Species.GALLADE, - Species.LILLIGANT, - Species.CRUSTLE, - Species.VIRIZION, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.DECIDUEYE, - Species.LURANTIS, - Species.TSAREENA, - Species.DHELMISE, - Species.KARTANA, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SIRFETCHD, - Species.ZACIAN, - Species.ZARUDE, - Species.CALYREX, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.CERULEDGE, - Species.WO_CHIEN, - Species.IRON_LEAVES, - Species.OGERPON, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.GALAR_FARFETCHD, - Species.HISUI_LILLIGANT, + [MoveId.SOLAR_BLADE]: [ + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.FARFETCHD, + SpeciesId.MEW, + SpeciesId.CELEBI, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TROPIUS, + SpeciesId.CHERRIM, + SpeciesId.TANGROWTH, + SpeciesId.LEAFEON, + SpeciesId.GALLADE, + SpeciesId.LILLIGANT, + SpeciesId.CRUSTLE, + SpeciesId.VIRIZION, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.DECIDUEYE, + SpeciesId.LURANTIS, + SpeciesId.TSAREENA, + SpeciesId.DHELMISE, + SpeciesId.KARTANA, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SIRFETCHD, + SpeciesId.ZACIAN, + SpeciesId.ZARUDE, + SpeciesId.CALYREX, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.CERULEDGE, + SpeciesId.WO_CHIEN, + SpeciesId.IRON_LEAVES, + SpeciesId.OGERPON, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.HISUI_LILLIGANT, ], - [Moves.THROAT_CHOP]: [ - Species.BEEDRILL, - Species.RATICATE, - Species.FEAROW, - Species.ARBOK, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.PARASECT, - Species.MEOWTH, - Species.PERSIAN, - Species.PRIMEAPE, - Species.POLIWRATH, - Species.MACHAMP, - Species.RAPIDASH, - Species.FARFETCHD, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.GOLDEEN, - Species.SEAKING, - Species.PINSIR, - Species.TAUROS, - Species.MEW, - Species.TYPHLOSION, - Species.ARIADOS, - Species.UMBREON, - Species.GLIGAR, - Species.QWILFISH, - Species.HERACROSS, - Species.SNEASEL, - Species.URSARING, - Species.CORSOLA, - Species.HOUNDOOM, - Species.STANTLER, - Species.RAIKOU, - Species.SCEPTILE, - Species.MIGHTYENA, - Species.LINOONE, - Species.SHIFTRY, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.HARIYAMA, - Species.VIBRAVA, - Species.FLYGON, - Species.ZANGOOSE, - Species.SEVIPER, - Species.BANETTE, - Species.ABSOL, - Species.DEOXYS, - Species.EMPOLEON, - Species.KRICKETUNE, - Species.LUXRAY, - Species.PURUGLY, - Species.STUNKY, - Species.SKUNTANK, - Species.DRAPION, - Species.TOXICROAK, - Species.CARNIVINE, - Species.WEAVILE, - Species.GLISCOR, - Species.GALLADE, - Species.DARKRAI, - Species.LIEPARD, - Species.SIMISAGE, - Species.SIMISEAR, - Species.SIMIPOUR, - Species.GIGALITH, - Species.AUDINO, - Species.SAWK, - Species.LEAVANNY, - Species.SCOLIPEDE, - Species.KROOKODILE, - Species.MARACTUS, - Species.SCRAFTY, - Species.ZOROARK, - Species.GALVANTULA, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.BEARTIC, - Species.BISHARP, - Species.BOUFFALANT, - Species.HEATMOR, - Species.HYDREIGON, - Species.PANGORO, - Species.MALAMAR, - Species.HAWLUCHA, - Species.HOOPA, - Species.INCINEROAR, - Species.GOLISOPOD, - Species.PHEROMOSA, - Species.MARSHADOW, - Species.NAGANADEL, - Species.ZERAORA, - Species.DREDNAW, - Species.CRAMORANT, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.TOXTRICITY, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.CURSOLA, - Species.SIRFETCHD, - Species.FALINKS, - Species.PINCURCHIN, - Species.ZARUDE, - Species.GLASTRIER, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.LOKIX, - Species.WIGLETT, - Species.WUGTRIO, - Species.FLAMIGO, - Species.CHIEN_PAO, - Species.TING_LU, - Species.ROARING_MOON, - Species.OGERPON, - Species.IRON_BOULDER, - Species.ALOLA_RATICATE, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_MAROWAK, + [MoveId.THROAT_CHOP]: [ + SpeciesId.BEEDRILL, + SpeciesId.RATICATE, + SpeciesId.FEAROW, + SpeciesId.ARBOK, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.PARASECT, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PRIMEAPE, + SpeciesId.POLIWRATH, + SpeciesId.MACHAMP, + SpeciesId.RAPIDASH, + SpeciesId.FARFETCHD, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.MEW, + SpeciesId.TYPHLOSION, + SpeciesId.ARIADOS, + SpeciesId.UMBREON, + SpeciesId.GLIGAR, + SpeciesId.QWILFISH, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.URSARING, + SpeciesId.CORSOLA, + SpeciesId.HOUNDOOM, + SpeciesId.STANTLER, + SpeciesId.RAIKOU, + SpeciesId.SCEPTILE, + SpeciesId.MIGHTYENA, + SpeciesId.LINOONE, + SpeciesId.SHIFTRY, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.HARIYAMA, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.BANETTE, + SpeciesId.ABSOL, + SpeciesId.DEOXYS, + SpeciesId.EMPOLEON, + SpeciesId.KRICKETUNE, + SpeciesId.LUXRAY, + SpeciesId.PURUGLY, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.DRAPION, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.WEAVILE, + SpeciesId.GLISCOR, + SpeciesId.GALLADE, + SpeciesId.DARKRAI, + SpeciesId.LIEPARD, + SpeciesId.SIMISAGE, + SpeciesId.SIMISEAR, + SpeciesId.SIMIPOUR, + SpeciesId.GIGALITH, + SpeciesId.AUDINO, + SpeciesId.SAWK, + SpeciesId.LEAVANNY, + SpeciesId.SCOLIPEDE, + SpeciesId.KROOKODILE, + SpeciesId.MARACTUS, + SpeciesId.SCRAFTY, + SpeciesId.ZOROARK, + SpeciesId.GALVANTULA, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.BEARTIC, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.HEATMOR, + SpeciesId.HYDREIGON, + SpeciesId.PANGORO, + SpeciesId.MALAMAR, + SpeciesId.HAWLUCHA, + SpeciesId.HOOPA, + SpeciesId.INCINEROAR, + SpeciesId.GOLISOPOD, + SpeciesId.PHEROMOSA, + SpeciesId.MARSHADOW, + SpeciesId.NAGANADEL, + SpeciesId.ZERAORA, + SpeciesId.DREDNAW, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.TOXTRICITY, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.SIRFETCHD, + SpeciesId.FALINKS, + SpeciesId.PINCURCHIN, + SpeciesId.ZARUDE, + SpeciesId.GLASTRIER, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.LOKIX, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.FLAMIGO, + SpeciesId.CHIEN_PAO, + SpeciesId.TING_LU, + SpeciesId.ROARING_MOON, + SpeciesId.OGERPON, + SpeciesId.IRON_BOULDER, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_MAROWAK, [ - Species.LYCANROC, + SpeciesId.LYCANROC, "midnight", ], - Species.GALAR_MEOWTH, - Species.GALAR_RAPIDASH, - Species.GALAR_FARFETCHD, - Species.GALAR_ZAPDOS, - Species.GALAR_CORSOLA, - Species.GALAR_LINOONE, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_LINOONE, [ - Species.URSHIFU, + SpeciesId.URSHIFU, "single-strike", ], [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", ], ], - [Moves.POLLEN_PUFF]: [ - Species.BUTTERFREE, - Species.GLOOM, - Species.VILEPLUME, - Species.MEW, - Species.BELLOSSOM, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.CELEBI, - Species.VESPIQUEN, - Species.CHERUBI, - Species.CHERRIM, - Species.LEAVANNY, - Species.PETILIL, - Species.LILLIGANT, - Species.FOONGUS, - Species.AMOONGUSS, - Species.VIVILLON, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.COMFEY, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.CALYREX, - Species.MEOWSCARADA, - Species.ARBOLIVA, - Species.BRUTE_BONNET, - Species.WO_CHIEN, - Species.DIPPLIN, - Species.HYDRAPPLE, - Species.ETERNAL_FLOETTE, - Species.HISUI_LILLIGANT, + [MoveId.POLLEN_PUFF]: [ + SpeciesId.BUTTERFREE, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.MEW, + SpeciesId.BELLOSSOM, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.CELEBI, + SpeciesId.VESPIQUEN, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.LEAVANNY, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.VIVILLON, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.COMFEY, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.CALYREX, + SpeciesId.MEOWSCARADA, + SpeciesId.ARBOLIVA, + SpeciesId.BRUTE_BONNET, + SpeciesId.WO_CHIEN, + SpeciesId.DIPPLIN, + SpeciesId.HYDRAPPLE, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.HISUI_LILLIGANT, ], - [Moves.PSYCHIC_TERRAIN]: [ - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.DROWZEE, - Species.HYPNO, - Species.MR_MIME, - Species.JYNX, - Species.MEWTWO, - Species.MEW, - Species.ESPEON, - Species.SLOWKING, - Species.GIRAFARIG, - Species.CELEBI, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.MEDITITE, - Species.MEDICHAM, - Species.SPOINK, - Species.GRUMPIG, - Species.LUNATONE, - Species.SOLROCK, - Species.BALTOY, - Species.CLAYDOL, - Species.BRONZOR, - Species.BRONZONG, - Species.MIME_JR, - Species.GALLADE, - Species.CRESSELIA, - Species.ARCEUS, - Species.MUSHARNA, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.BEHEEYEM, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.MEOWSTIC, - Species.HOOPA, - Species.ORANGURU, - Species.BRUXISH, - Species.TAPU_LELE, - Species.DOTTLER, - Species.ORBEETLE, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.MR_RIME, - Species.INDEEDEE, - Species.CALYREX, - Species.ARMAROUGE, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.VELUZA, - Species.FARIGIRAF, - Species.SCREAM_TAIL, - Species.IRON_VALIANT, - Species.IRON_LEAVES, - Species.MUNKIDORI, - Species.ALOLA_RAICHU, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_SLOWKING, - Species.HISUI_BRAVIARY, + [MoveId.PSYCHIC_TERRAIN]: [ + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.ESPEON, + SpeciesId.SLOWKING, + SpeciesId.GIRAFARIG, + SpeciesId.CELEBI, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.MIME_JR, + SpeciesId.GALLADE, + SpeciesId.CRESSELIA, + SpeciesId.ARCEUS, + SpeciesId.MUSHARNA, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.BEHEEYEM, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.MEOWSTIC, + SpeciesId.HOOPA, + SpeciesId.ORANGURU, + SpeciesId.BRUXISH, + SpeciesId.TAPU_LELE, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.MR_RIME, + SpeciesId.INDEEDEE, + SpeciesId.CALYREX, + SpeciesId.ARMAROUGE, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.VELUZA, + SpeciesId.FARIGIRAF, + SpeciesId.SCREAM_TAIL, + SpeciesId.IRON_VALIANT, + SpeciesId.IRON_LEAVES, + SpeciesId.MUNKIDORI, + SpeciesId.ALOLA_RAICHU, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_SLOWKING, + SpeciesId.HISUI_BRAVIARY, ], - [Moves.LUNGE]: [ - Species.VENONAT, - Species.VENOMOTH, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.DODUO, - Species.DODRIO, - Species.MUK, - Species.SCYTHER, - Species.MEW, - Species.SPINARAK, - Species.ARIADOS, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.YANMA, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.SCIZOR, - Species.HERACROSS, - Species.STANTLER, - Species.SURSKIT, - Species.MASQUERAIN, - Species.VOLBEAT, - Species.SPOINK, - Species.GRUMPIG, - Species.CACTURNE, - Species.KRICKETOT, - Species.KRICKETUNE, - Species.MOTHIM, - Species.COMBEE, - Species.VESPIQUEN, - Species.YANMEGA, - Species.GLISCOR, - Species.HEATRAN, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.JOLTIK, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.LARVESTA, - Species.VOLCARONA, - Species.HAWLUCHA, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.RIBOMBEE, - Species.MAREANIE, - Species.TOXAPEX, - Species.DEWPIDER, - Species.ARAQUANID, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.FALINKS, - Species.SNOM, - Species.FROSMOTH, - Species.WYRDEER, - Species.KLEAVOR, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.LOKIX, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.RELLOR, - Species.RABSCA, - Species.FLAMIGO, - Species.TATSUGIRI, - Species.DUDUNSPARCE, - Species.SLITHER_WING, - Species.IRON_MOTH, + [MoveId.LUNGE]: [ + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.MUK, + SpeciesId.SCYTHER, + SpeciesId.MEW, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.YANMA, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.SCIZOR, + SpeciesId.HERACROSS, + SpeciesId.STANTLER, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.VOLBEAT, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.CACTURNE, + SpeciesId.KRICKETOT, + SpeciesId.KRICKETUNE, + SpeciesId.MOTHIM, + SpeciesId.COMBEE, + SpeciesId.VESPIQUEN, + SpeciesId.YANMEGA, + SpeciesId.GLISCOR, + SpeciesId.HEATRAN, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.JOLTIK, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.HAWLUCHA, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.RIBOMBEE, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.FALINKS, + SpeciesId.SNOM, + SpeciesId.FROSMOTH, + SpeciesId.WYRDEER, + SpeciesId.KLEAVOR, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.LOKIX, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.FLAMIGO, + SpeciesId.TATSUGIRI, + SpeciesId.DUDUNSPARCE, + SpeciesId.SLITHER_WING, + SpeciesId.IRON_MOTH, ], - [Moves.SPEED_SWAP]: [ - Species.RAICHU, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.PORYGON, - Species.MEWTWO, - Species.MEW, - Species.PORYGON2, - Species.BRONZOR, - Species.BRONZONG, - Species.PORYGON_Z, - Species.VICTINI, - Species.WOOBAT, - Species.SWOOBAT, - Species.SIGILYPH, - Species.EMOLGA, - Species.JOLTIK, - Species.GALVANTULA, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.TAPU_LELE, - Species.PHEROMOSA, - Species.MAGEARNA, - Species.CALYREX, - Species.RABSCA, - Species.ALOLA_RAICHU, + [MoveId.SPEED_SWAP]: [ + SpeciesId.RAICHU, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.PORYGON, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.PORYGON2, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.PORYGON_Z, + SpeciesId.VICTINI, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.SIGILYPH, + SpeciesId.EMOLGA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.TAPU_LELE, + SpeciesId.PHEROMOSA, + SpeciesId.MAGEARNA, + SpeciesId.CALYREX, + SpeciesId.RABSCA, + SpeciesId.ALOLA_RAICHU, ], - [Moves.SMART_STRIKE]: [ - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.RAPIDASH, - Species.SEEL, - Species.DEWGONG, - Species.CLOYSTER, - Species.RHYHORN, - Species.RHYDON, - Species.GOLDEEN, - Species.SEAKING, - Species.TAUROS, - Species.LAPRAS, - Species.MEW, - Species.ARIADOS, - Species.TOGETIC, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.HERACROSS, - Species.DONPHAN, - Species.AGGRON, - Species.RHYPERIOR, - Species.TOGEKISS, - Species.SAMUROTT, - Species.EXCADRILL, - Species.SCOLIPEDE, - Species.SAWSBUCK, - Species.ESCAVALIER, - Species.BOUFFALANT, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.THUNDURUS, - Species.KELDEO, - Species.XERNEAS, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.CELESTEELA, - Species.KARTANA, - Species.NECROZMA, - Species.NAGANADEL, - Species.DREDNAW, - Species.FALINKS, - Species.GLASTRIER, - Species.OVERQWIL, - Species.DUDUNSPARCE, - Species.GREAT_TUSK, - Species.IRON_TREADS, - Species.IRON_LEAVES, - Species.GOUGING_FIRE, - Species.IRON_CROWN, - Species.GALAR_RAPIDASH, + [MoveId.SMART_STRIKE]: [ + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.RAPIDASH, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.CLOYSTER, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.TAUROS, + SpeciesId.LAPRAS, + SpeciesId.MEW, + SpeciesId.ARIADOS, + SpeciesId.TOGETIC, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.HERACROSS, + SpeciesId.DONPHAN, + SpeciesId.AGGRON, + SpeciesId.RHYPERIOR, + SpeciesId.TOGEKISS, + SpeciesId.SAMUROTT, + SpeciesId.EXCADRILL, + SpeciesId.SCOLIPEDE, + SpeciesId.SAWSBUCK, + SpeciesId.ESCAVALIER, + SpeciesId.BOUFFALANT, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.THUNDURUS, + SpeciesId.KELDEO, + SpeciesId.XERNEAS, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.CELESTEELA, + SpeciesId.KARTANA, + SpeciesId.NECROZMA, + SpeciesId.NAGANADEL, + SpeciesId.DREDNAW, + SpeciesId.FALINKS, + SpeciesId.GLASTRIER, + SpeciesId.OVERQWIL, + SpeciesId.DUDUNSPARCE, + SpeciesId.GREAT_TUSK, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_LEAVES, + SpeciesId.GOUGING_FIRE, + SpeciesId.IRON_CROWN, + SpeciesId.GALAR_RAPIDASH, [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", ], - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_SAMUROTT, - Species.PALDEA_TAUROS, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.PALDEA_TAUROS, ], - [Moves.BRUTAL_SWING]: [ - Species.CHARIZARD, - Species.BEEDRILL, - Species.EKANS, - Species.ARBOK, - Species.RAICHU, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.FARFETCHD, - Species.ONIX, - Species.KINGLER, - Species.CUBONE, - Species.MAROWAK, - Species.LICKITUNG, - Species.RHYDON, - Species.SCYTHER, - Species.PINSIR, - Species.GYARADOS, - Species.AERODACTYL, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.SENTRET, - Species.FURRET, - Species.AMPHAROS, - Species.MARILL, - Species.AZUMARILL, - Species.STEELIX, - Species.SCIZOR, - Species.HERACROSS, - Species.DELIBIRD, - Species.DONPHAN, - Species.HITMONTOP, - Species.TYRANITAR, - Species.SCEPTILE, - Species.SHIFTRY, - Species.AZURILL, - Species.MAWILE, - Species.AGGRON, - Species.FLYGON, - Species.SEVIPER, - Species.ARMALDO, - Species.MILOTIC, - Species.TROPIUS, - Species.ABSOL, - Species.SALAMENCE, - Species.METAGROSS, - Species.GROUDON, - Species.RAYQUAZA, - Species.DEOXYS, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.LOPUNNY, - Species.GARCHOMP, - Species.DRAPION, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.GLISCOR, - Species.GIRATINA, - Species.SERPERIOR, - Species.EXCADRILL, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.KROKOROK, - Species.KROOKODILE, - Species.ESCAVALIER, - Species.FERROTHORN, - Species.HAXORUS, - Species.MIENSHAO, - Species.HEATMOR, - Species.HYDREIGON, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.GRENINJA, - Species.DIGGERSBY, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.MALAMAR, - Species.BARBARACLE, - Species.HELIOLISK, - Species.TYRANTRUM, - Species.GOODRA, - Species.TREVENANT, - Species.GOURGEIST, - Species.INCINEROAR, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.STUFFUL, - Species.BEWEAR, - Species.ORANGURU, - Species.PASSIMIAN, - Species.TURTONATOR, - Species.DHELMISE, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_BULU, - Species.NIHILEGO, - Species.XURKITREE, - Species.CELESTEELA, - Species.GUZZLORD, - Species.NECROZMA, - Species.STAKATAKA, - Species.ZERAORA, - Species.MELMETAL, - Species.RILLABOOM, - Species.SKWOVET, - Species.GREEDENT, - Species.SILICOBRA, - Species.SANDACONDA, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.GRAPPLOCT, - Species.HATTREM, - Species.HATTERENE, - Species.SIRFETCHD, - Species.RUNERIGUS, - Species.STONJOURNER, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.DRACOVISH, - Species.ZACIAN, - Species.ETERNATUS, - Species.ZARUDE, - Species.KLEAVOR, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.OKIDOGI, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.GALAR_SLOWBRO, - Species.GALAR_FARFETCHD, - Species.GALAR_WEEZING, - Species.GALAR_YAMASK, + [MoveId.BRUTAL_SWING]: [ + SpeciesId.CHARIZARD, + SpeciesId.BEEDRILL, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.RAICHU, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.FARFETCHD, + SpeciesId.ONIX, + SpeciesId.KINGLER, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.LICKITUNG, + SpeciesId.RHYDON, + SpeciesId.SCYTHER, + SpeciesId.PINSIR, + SpeciesId.GYARADOS, + SpeciesId.AERODACTYL, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.AMPHAROS, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.STEELIX, + SpeciesId.SCIZOR, + SpeciesId.HERACROSS, + SpeciesId.DELIBIRD, + SpeciesId.DONPHAN, + SpeciesId.HITMONTOP, + SpeciesId.TYRANITAR, + SpeciesId.SCEPTILE, + SpeciesId.SHIFTRY, + SpeciesId.AZURILL, + SpeciesId.MAWILE, + SpeciesId.AGGRON, + SpeciesId.FLYGON, + SpeciesId.SEVIPER, + SpeciesId.ARMALDO, + SpeciesId.MILOTIC, + SpeciesId.TROPIUS, + SpeciesId.ABSOL, + SpeciesId.SALAMENCE, + SpeciesId.METAGROSS, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.DEOXYS, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.LOPUNNY, + SpeciesId.GARCHOMP, + SpeciesId.DRAPION, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.GLISCOR, + SpeciesId.GIRATINA, + SpeciesId.SERPERIOR, + SpeciesId.EXCADRILL, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.ESCAVALIER, + SpeciesId.FERROTHORN, + SpeciesId.HAXORUS, + SpeciesId.MIENSHAO, + SpeciesId.HEATMOR, + SpeciesId.HYDREIGON, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.GRENINJA, + SpeciesId.DIGGERSBY, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.MALAMAR, + SpeciesId.BARBARACLE, + SpeciesId.HELIOLISK, + SpeciesId.TYRANTRUM, + SpeciesId.GOODRA, + SpeciesId.TREVENANT, + SpeciesId.GOURGEIST, + SpeciesId.INCINEROAR, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.TURTONATOR, + SpeciesId.DHELMISE, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_BULU, + SpeciesId.NIHILEGO, + SpeciesId.XURKITREE, + SpeciesId.CELESTEELA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.STAKATAKA, + SpeciesId.ZERAORA, + SpeciesId.MELMETAL, + SpeciesId.RILLABOOM, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.GRAPPLOCT, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.SIRFETCHD, + SpeciesId.RUNERIGUS, + SpeciesId.STONJOURNER, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.ZACIAN, + SpeciesId.ETERNATUS, + SpeciesId.ZARUDE, + SpeciesId.KLEAVOR, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.OKIDOGI, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_YAMASK, ], - [Moves.AURORA_VEIL]: [ - Species.JYNX, - Species.ARTICUNO, - Species.MEW, - Species.DELIBIRD, - Species.SMOOCHUM, - Species.REGICE, - Species.ABOMASNOW, - Species.GLACEON, - Species.FROSLASS, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.CRYOGONAL, - Species.AMAURA, - Species.AURORUS, - Species.BERGMITE, - Species.AVALUGG, - Species.EISCUE, - Species.ARCTOVISH, - Species.IRON_BUNDLE, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.HISUI_AVALUGG, + [MoveId.AURORA_VEIL]: [ + SpeciesId.JYNX, + SpeciesId.ARTICUNO, + SpeciesId.MEW, + SpeciesId.DELIBIRD, + SpeciesId.SMOOCHUM, + SpeciesId.REGICE, + SpeciesId.ABOMASNOW, + SpeciesId.GLACEON, + SpeciesId.FROSLASS, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.CRYOGONAL, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.EISCUE, + SpeciesId.ARCTOVISH, + SpeciesId.IRON_BUNDLE, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.HISUI_AVALUGG, ], - [Moves.PSYCHIC_FANGS]: [ - Species.EKANS, - Species.ARBOK, - Species.GROWLITHE, - Species.ARCANINE, - Species.AERODACTYL, - Species.MEW, - Species.CROCONAW, - Species.FERALIGATR, - Species.ESPEON, - Species.GIRAFARIG, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.MAWILE, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.CARVANHA, - Species.SHARPEDO, - Species.SEVIPER, - Species.SALAMENCE, - Species.METAGROSS, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.GLISCOR, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.SWOOBAT, - Species.BASCULIN, - Species.LITLEO, - Species.PYROAR, - Species.TYRUNT, - Species.TYRANTRUM, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.ROCKRUFF, - Species.LYCANROC, - Species.SILVALLY, - Species.BRUXISH, - Species.SOLGALEO, - Species.NECROZMA, - Species.GREEDENT, - Species.BOLTUND, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.MORPEKO, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.BASCULEGION, - Species.FIDOUGH, - Species.DACHSBUN, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.VELUZA, - Species.FARIGIRAF, - Species.SCREAM_TAIL, - Species.CHIEN_PAO, - Species.OKIDOGI, - Species.GOUGING_FIRE, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, + [MoveId.PSYCHIC_FANGS]: [ + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.AERODACTYL, + SpeciesId.MEW, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.ESPEON, + SpeciesId.GIRAFARIG, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.MAWILE, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.SEVIPER, + SpeciesId.SALAMENCE, + SpeciesId.METAGROSS, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.GLISCOR, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.SWOOBAT, + SpeciesId.BASCULIN, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.SILVALLY, + SpeciesId.BRUXISH, + SpeciesId.SOLGALEO, + SpeciesId.NECROZMA, + SpeciesId.GREEDENT, + SpeciesId.BOLTUND, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.MORPEKO, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.BASCULEGION, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.VELUZA, + SpeciesId.FARIGIRAF, + SpeciesId.SCREAM_TAIL, + SpeciesId.CHIEN_PAO, + SpeciesId.OKIDOGI, + SpeciesId.GOUGING_FIRE, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, ], - [Moves.STOMPING_TANTRUM]: [ - Species.VENUSAUR, - Species.RATICATE, - Species.ARBOK, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORINO, - Species.NIDOKING, - Species.DIGLETT, - Species.DUGTRIO, - Species.MANKEY, - Species.PRIMEAPE, - Species.MACHOKE, - Species.MACHAMP, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.DODRIO, - Species.ONIX, - Species.KINGLER, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.LICKITUNG, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.TAUROS, - Species.SNORLAX, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.MEGANIUM, - Species.TYPHLOSION, - Species.ARIADOS, - Species.AMPHAROS, - Species.SUDOWOODO, - Species.WOOPER, - Species.QUAGSIRE, - Species.GIRAFARIG, - Species.DUNSPARCE, - Species.STEELIX, - Species.GRANBULL, - Species.URSARING, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.PHANPY, - Species.DONPHAN, - Species.MILTANK, - Species.BLISSEY, - Species.ENTEI, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.SWAMPERT, - Species.LINOONE, - Species.VIGOROTH, - Species.SLAKING, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.NOSEPASS, - Species.DELCATTY, - Species.LAIRON, - Species.AGGRON, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.GRUMPIG, - Species.SPINDA, - Species.CACTURNE, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.ARMALDO, - Species.TROPIUS, - Species.WALREIN, - Species.RELICANTH, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.GROUDON, - Species.DEOXYS, - Species.TORTERRA, - Species.BIBAREL, - Species.RAMPARDOS, - Species.BASTIODON, - Species.GASTRODON, - Species.PURUGLY, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.DRAPION, - Species.ABOMASNOW, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.MAMOSWINE, - Species.PROBOPASS, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.ARCEUS, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.WATCHOG, - Species.STOUTLAND, - Species.BOLDORE, - Species.GIGALITH, - Species.EXCADRILL, - Species.AUDINO, - Species.CONKELDURR, - Species.SEISMITOAD, - Species.THROH, - Species.SCOLIPEDE, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.CRUSTLE, - Species.GARBODOR, - Species.SAWSBUCK, - Species.AMOONGUSS, - Species.EELEKTROSS, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.STUNFISK, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.BOUFFALANT, - Species.HEATMOR, - Species.DURANT, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.TERRAKION, - Species.LANDORUS, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.DIGGERSBY, - Species.SKIDDO, - Species.GOGOAT, - Species.PANGORO, - Species.TYRUNT, - Species.TYRANTRUM, - Species.CARBINK, - Species.GOODRA, - Species.AVALUGG, - Species.ZYGARDE, - Species.VOLCANION, - Species.INCINEROAR, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.MUDBRAY, - Species.MUDSDALE, - Species.STUFFUL, - Species.BEWEAR, - Species.KOMALA, - Species.TURTONATOR, - Species.DRAMPA, - Species.KOMMO_O, - Species.BUZZWOLE, - Species.CELESTEELA, - Species.GUZZLORD, - Species.STAKATAKA, - Species.RILLABOOM, - Species.GREEDENT, - Species.CHEWTLE, - Species.DREDNAW, - Species.APPLETUN, - Species.GRAPPLOCT, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.CURSOLA, - Species.MR_RIME, - Species.STONJOURNER, - Species.MORPEKO, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.DURALUDON, - Species.ZARUDE, - Species.GLASTRIER, - Species.SPECTRIER, - Species.URSALUNA, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.OINKOLOGNE, - Species.FIDOUGH, - Species.DACHSBUN, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.KLAWF, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.WIGLETT, - Species.WUGTRIO, - Species.ORTHWORM, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.CETODDLE, - Species.CETITAN, - Species.DONDOZO, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.BRUTE_BONNET, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_HANDS, - Species.IRON_THORNS, - Species.BAXCALIBUR, - Species.TING_LU, - Species.ROARING_MOON, - Species.KORAIDON, - Species.OKIDOGI, - Species.OGERPON, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.ALOLA_RATICATE, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.GALAR_MR_MIME, - Species.GALAR_ZAPDOS, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_LINOONE, - Species.GALAR_STUNFISK, + [MoveId.STOMPING_TANTRUM]: [ + SpeciesId.VENUSAUR, + SpeciesId.RATICATE, + SpeciesId.ARBOK, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.DODRIO, + SpeciesId.ONIX, + SpeciesId.KINGLER, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.LICKITUNG, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TAUROS, + SpeciesId.SNORLAX, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.MEGANIUM, + SpeciesId.TYPHLOSION, + SpeciesId.ARIADOS, + SpeciesId.AMPHAROS, + SpeciesId.SUDOWOODO, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.GIRAFARIG, + SpeciesId.DUNSPARCE, + SpeciesId.STEELIX, + SpeciesId.GRANBULL, + SpeciesId.URSARING, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.ENTEI, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.SWAMPERT, + SpeciesId.LINOONE, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.NOSEPASS, + SpeciesId.DELCATTY, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.CACTURNE, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.ARMALDO, + SpeciesId.TROPIUS, + SpeciesId.WALREIN, + SpeciesId.RELICANTH, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.GROUDON, + SpeciesId.DEOXYS, + SpeciesId.TORTERRA, + SpeciesId.BIBAREL, + SpeciesId.RAMPARDOS, + SpeciesId.BASTIODON, + SpeciesId.GASTRODON, + SpeciesId.PURUGLY, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.DRAPION, + SpeciesId.ABOMASNOW, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.MAMOSWINE, + SpeciesId.PROBOPASS, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.ARCEUS, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.WATCHOG, + SpeciesId.STOUTLAND, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.EXCADRILL, + SpeciesId.AUDINO, + SpeciesId.CONKELDURR, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SCOLIPEDE, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.CRUSTLE, + SpeciesId.GARBODOR, + SpeciesId.SAWSBUCK, + SpeciesId.AMOONGUSS, + SpeciesId.EELEKTROSS, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.STUNFISK, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.BOUFFALANT, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.TERRAKION, + SpeciesId.LANDORUS, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.DIGGERSBY, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANGORO, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.CARBINK, + SpeciesId.GOODRA, + SpeciesId.AVALUGG, + SpeciesId.ZYGARDE, + SpeciesId.VOLCANION, + SpeciesId.INCINEROAR, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.DRAMPA, + SpeciesId.KOMMO_O, + SpeciesId.BUZZWOLE, + SpeciesId.CELESTEELA, + SpeciesId.GUZZLORD, + SpeciesId.STAKATAKA, + SpeciesId.RILLABOOM, + SpeciesId.GREEDENT, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.APPLETUN, + SpeciesId.GRAPPLOCT, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.CURSOLA, + SpeciesId.MR_RIME, + SpeciesId.STONJOURNER, + SpeciesId.MORPEKO, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.DURALUDON, + SpeciesId.ZARUDE, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.URSALUNA, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.OINKOLOGNE, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.KLAWF, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.ORTHWORM, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.DONDOZO, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.BRUTE_BONNET, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_THORNS, + SpeciesId.BAXCALIBUR, + SpeciesId.TING_LU, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.OKIDOGI, + SpeciesId.OGERPON, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_STUNFISK, [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", "shadow", ], - Species.HISUI_TYPHLOSION, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.LIQUIDATION]: [ - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.PSYDUCK, - Species.GOLDUCK, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.DEWGONG, - Species.SHELLDER, - Species.CLOYSTER, - Species.KRABBY, - Species.KINGLER, - Species.HORSEA, - Species.SEADRA, - Species.LAPRAS, - Species.VAPOREON, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.CHINCHOU, - Species.LANTURN, - Species.MARILL, - Species.AZUMARILL, - Species.POLITOED, - Species.WOOPER, - Species.QUAGSIRE, - Species.SLOWKING, - Species.QWILFISH, - Species.CORSOLA, - Species.OCTILLERY, - Species.MANTINE, - Species.KINGDRA, - Species.SUICUNE, - Species.LUGIA, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.WINGULL, - Species.PELIPPER, - Species.SURSKIT, - Species.MASQUERAIN, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILORD, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.ARMALDO, - Species.WALREIN, - Species.RELICANTH, - Species.LUVDISC, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.BIBAREL, - Species.BUIZEL, - Species.FLOATZEL, - Species.SHELLOS, - Species.GASTRODON, - Species.GARCHOMP, - Species.PALKIA, - Species.PHIONE, - Species.MANAPHY, - Species.ARCEUS, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.SEISMITOAD, - Species.BASCULIN, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.DUCKLETT, - Species.SWANNA, - Species.ALOMOMOLA, - Species.EELEKTROSS, - Species.CUBCHOO, - Species.BEARTIC, - Species.KELDEO, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.VOLCANION, - Species.PRIMARINA, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.DEWPIDER, - Species.ARAQUANID, - Species.GOLISOPOD, - Species.BRUXISH, - Species.DHELMISE, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.CHEWTLE, - Species.DREDNAW, - Species.CRAMORANT, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.CURSOLA, - Species.PINCURCHIN, - Species.EISCUE, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.BASCULEGION, - Species.OVERQWIL, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.WIGLETT, - Species.WUGTRIO, - Species.FINIZEN, - Species.PALAFIN, - Species.FLAMIGO, - Species.CETODDLE, - Species.CETITAN, - Species.VELUZA, - Species.DONDOZO, - Species.CLODSIRE, - Species.IRON_VALIANT, - Species.WALKING_WAKE, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, + [MoveId.LIQUIDATION]: [ + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.DEWGONG, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.LAPRAS, + SpeciesId.VAPOREON, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.POLITOED, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.QWILFISH, + SpeciesId.CORSOLA, + SpeciesId.OCTILLERY, + SpeciesId.MANTINE, + SpeciesId.KINGDRA, + SpeciesId.SUICUNE, + SpeciesId.LUGIA, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILORD, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.ARMALDO, + SpeciesId.WALREIN, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.BIBAREL, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.GARCHOMP, + SpeciesId.PALKIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.ARCEUS, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.SEISMITOAD, + SpeciesId.BASCULIN, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.ALOMOMOLA, + SpeciesId.EELEKTROSS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.KELDEO, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.VOLCANION, + SpeciesId.PRIMARINA, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.GOLISOPOD, + SpeciesId.BRUXISH, + SpeciesId.DHELMISE, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.CURSOLA, + SpeciesId.PINCURCHIN, + SpeciesId.EISCUE, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.BASCULEGION, + SpeciesId.OVERQWIL, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.FLAMIGO, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.VELUZA, + SpeciesId.DONDOZO, + SpeciesId.CLODSIRE, + SpeciesId.IRON_VALIANT, + SpeciesId.WALKING_WAKE, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, [ - Species.URSHIFU, + SpeciesId.URSHIFU, "rapid-strike", ], - Species.HISUI_QWILFISH, - Species.HISUI_SAMUROTT, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SAMUROTT, [ - Species.PALDEA_TAUROS, + SpeciesId.PALDEA_TAUROS, "aqua", ], - Species.PALDEA_WOOPER, + SpeciesId.PALDEA_WOOPER, ], - [Moves.BODY_PRESS]: [ - Species.BLASTOISE, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.GRAVELER, - Species.GOLEM, - Species.SLOWBRO, - Species.ONIX, - Species.HYPNO, - Species.LICKITUNG, - Species.RHYHORN, - Species.RHYDON, - Species.LAPRAS, - Species.SNORLAX, - Species.DRAGONITE, - Species.MEW, - Species.MEGANIUM, - Species.SUDOWOODO, - Species.QUAGSIRE, - Species.FORRETRESS, - Species.STEELIX, - Species.MANTINE, - Species.SKARMORY, - Species.DONPHAN, - Species.MILTANK, - Species.TYRANITAR, - Species.SWAMPERT, - Species.SLAKING, - Species.MAKUHITA, - Species.HARIYAMA, - Species.NOSEPASS, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.SWALOT, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.GRUMPIG, - Species.CLAYDOL, - Species.TROPIUS, - Species.WALREIN, - Species.RELICANTH, - Species.METAGROSS, - Species.REGIROCK, - Species.REGISTEEL, - Species.GROUDON, - Species.TORTERRA, - Species.RAMPARDOS, - Species.BASTIODON, - Species.BRONZONG, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.ABOMASNOW, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.MAMOSWINE, - Species.PROBOPASS, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.ARCEUS, - Species.EMBOAR, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.DARMANITAN, - Species.CRUSTLE, - Species.COFAGRIGUS, - Species.GARBODOR, - Species.FERROTHORN, - Species.EELEKTROSS, - Species.CUBCHOO, - Species.BEARTIC, - Species.GOLURK, - Species.COBALION, - Species.RESHIRAM, - Species.ZEKROM, - Species.KYUREM, - Species.CHESNAUGHT, - Species.HAWLUCHA, - Species.CARBINK, - Species.GOODRA, - Species.AVALUGG, - Species.DIANCIE, - Species.VOLCANION, - Species.CRABOMINABLE, - Species.MUDSDALE, - Species.BEWEAR, - Species.TURTONATOR, - Species.DHELMISE, - Species.KOMMO_O, - Species.GUZZLORD, - Species.STAKATAKA, - Species.MELMETAL, - Species.RILLABOOM, - Species.GREEDENT, - Species.CORVIKNIGHT, - Species.DOTTLER, - Species.ORBEETLE, - Species.DUBWOOL, - Species.DREDNAW, - Species.CARKOL, - Species.COALOSSAL, - Species.APPLETUN, - Species.SANDACONDA, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.RUNERIGUS, - Species.FALINKS, - Species.STONJOURNER, - Species.CUFANT, - Species.COPPERAJAH, - Species.DURALUDON, - Species.ZAMAZENTA, - Species.URSHIFU, - Species.GLASTRIER, + [MoveId.BODY_PRESS]: [ + SpeciesId.BLASTOISE, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.SLOWBRO, + SpeciesId.ONIX, + SpeciesId.HYPNO, + SpeciesId.LICKITUNG, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.LAPRAS, + SpeciesId.SNORLAX, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.MEGANIUM, + SpeciesId.SUDOWOODO, + SpeciesId.QUAGSIRE, + SpeciesId.FORRETRESS, + SpeciesId.STEELIX, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.DONPHAN, + SpeciesId.MILTANK, + SpeciesId.TYRANITAR, + SpeciesId.SWAMPERT, + SpeciesId.SLAKING, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.NOSEPASS, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.SWALOT, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.GRUMPIG, + SpeciesId.CLAYDOL, + SpeciesId.TROPIUS, + SpeciesId.WALREIN, + SpeciesId.RELICANTH, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGISTEEL, + SpeciesId.GROUDON, + SpeciesId.TORTERRA, + SpeciesId.RAMPARDOS, + SpeciesId.BASTIODON, + SpeciesId.BRONZONG, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.ABOMASNOW, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.MAMOSWINE, + SpeciesId.PROBOPASS, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.ARCEUS, + SpeciesId.EMBOAR, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.DARMANITAN, + SpeciesId.CRUSTLE, + SpeciesId.COFAGRIGUS, + SpeciesId.GARBODOR, + SpeciesId.FERROTHORN, + SpeciesId.EELEKTROSS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.GOLURK, + SpeciesId.COBALION, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.KYUREM, + SpeciesId.CHESNAUGHT, + SpeciesId.HAWLUCHA, + SpeciesId.CARBINK, + SpeciesId.GOODRA, + SpeciesId.AVALUGG, + SpeciesId.DIANCIE, + SpeciesId.VOLCANION, + SpeciesId.CRABOMINABLE, + SpeciesId.MUDSDALE, + SpeciesId.BEWEAR, + SpeciesId.TURTONATOR, + SpeciesId.DHELMISE, + SpeciesId.KOMMO_O, + SpeciesId.GUZZLORD, + SpeciesId.STAKATAKA, + SpeciesId.MELMETAL, + SpeciesId.RILLABOOM, + SpeciesId.GREEDENT, + SpeciesId.CORVIKNIGHT, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.DUBWOOL, + SpeciesId.DREDNAW, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.APPLETUN, + SpeciesId.SANDACONDA, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.RUNERIGUS, + SpeciesId.FALINKS, + SpeciesId.STONJOURNER, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DURALUDON, + SpeciesId.ZAMAZENTA, + SpeciesId.URSHIFU, + SpeciesId.GLASTRIER, [ - Species.CALYREX, + SpeciesId.CALYREX, "", "ice", ], - Species.URSALUNA, - Species.OINKOLOGNE, - Species.PAWMOT, - Species.DACHSBUN, - Species.NACLSTACK, - Species.GARGANACL, - Species.ORTHWORM, - Species.HOUNDSTONE, - Species.CETODDLE, - Species.CETITAN, - Species.DONDOZO, - Species.CLODSIRE, - Species.DUDUNSPARCE, - Species.GREAT_TUSK, - Species.BRUTE_BONNET, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_HANDS, - Species.IRON_THORNS, - Species.BAXCALIBUR, - Species.WO_CHIEN, - Species.TING_LU, - Species.ROARING_MOON, - Species.KORAIDON, - Species.OKIDOGI, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.RAGING_BOLT, - Species.TERAPAGOS, - Species.ALOLA_GOLEM, - Species.GALAR_SLOWBRO, - Species.GALAR_LINOONE, - Species.GALAR_DARMANITAN, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + SpeciesId.URSALUNA, + SpeciesId.OINKOLOGNE, + SpeciesId.PAWMOT, + SpeciesId.DACHSBUN, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.ORTHWORM, + SpeciesId.HOUNDSTONE, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.DONDOZO, + SpeciesId.CLODSIRE, + SpeciesId.DUDUNSPARCE, + SpeciesId.GREAT_TUSK, + SpeciesId.BRUTE_BONNET, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_THORNS, + SpeciesId.BAXCALIBUR, + SpeciesId.WO_CHIEN, + SpeciesId.TING_LU, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.OKIDOGI, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.RAGING_BOLT, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_GOLEM, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.BREAKING_SWIPE]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.ARBOK, - Species.ONIX, - Species.RHYDON, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.AMPHAROS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.KINGDRA, - Species.TYRANITAR, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.FLYGON, - Species.ALTARIA, - Species.SEVIPER, - Species.MILOTIC, - Species.SALAMENCE, - Species.LATIAS, - Species.LATIOS, - Species.RAYQUAZA, - Species.RAMPARDOS, - Species.GABITE, - Species.GARCHOMP, - Species.RHYPERIOR, - Species.GLISCOR, - Species.DIALGA, - Species.PALKIA, - Species.GIRATINA, - Species.SERPERIOR, - Species.KROKOROK, - Species.KROOKODILE, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.HYDREIGON, - Species.RESHIRAM, - Species.ZEKROM, - Species.KYUREM, - Species.HELIOLISK, - Species.TYRANTRUM, - Species.GOODRA, - Species.NOIVERN, - Species.ZYGARDE, - Species.SALAZZLE, - Species.DRAMPA, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.NECROZMA, - Species.NAGANADEL, - Species.INTELEON, - Species.DRACOZOLT, - Species.DURALUDON, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.REGIDRAGO, - Species.CYCLIZAR, - Species.DUDUNSPARCE, - Species.IRON_THORNS, - Species.BAXCALIBUR, - Species.ROARING_MOON, - Species.KORAIDON, - Species.WALKING_WAKE, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.ALOLA_EXEGGUTOR, - Species.HISUI_GOODRA, + [MoveId.BREAKING_SWIPE]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.ARBOK, + SpeciesId.ONIX, + SpeciesId.RHYDON, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.AMPHAROS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.KINGDRA, + SpeciesId.TYRANITAR, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.FLYGON, + SpeciesId.ALTARIA, + SpeciesId.SEVIPER, + SpeciesId.MILOTIC, + SpeciesId.SALAMENCE, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.RAYQUAZA, + SpeciesId.RAMPARDOS, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.RHYPERIOR, + SpeciesId.GLISCOR, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.GIRATINA, + SpeciesId.SERPERIOR, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.HYDREIGON, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.KYUREM, + SpeciesId.HELIOLISK, + SpeciesId.TYRANTRUM, + SpeciesId.GOODRA, + SpeciesId.NOIVERN, + SpeciesId.ZYGARDE, + SpeciesId.SALAZZLE, + SpeciesId.DRAMPA, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.NECROZMA, + SpeciesId.NAGANADEL, + SpeciesId.INTELEON, + SpeciesId.DRACOZOLT, + SpeciesId.DURALUDON, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.REGIDRAGO, + SpeciesId.CYCLIZAR, + SpeciesId.DUDUNSPARCE, + SpeciesId.IRON_THORNS, + SpeciesId.BAXCALIBUR, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.HISUI_GOODRA, ], - [Moves.STEEL_BEAM]: [ - Species.MAGNEMITE, - Species.MAGNETON, - Species.MEW, - Species.FORRETRESS, - Species.STEELIX, - Species.SCIZOR, - Species.SKARMORY, - Species.NOSEPASS, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.BELDUM, - Species.METANG, - Species.METAGROSS, - Species.REGISTEEL, - Species.JIRACHI, - Species.EMPOLEON, - Species.BRONZOR, - Species.BRONZONG, - Species.LUCARIO, - Species.MAGNEZONE, - Species.PROBOPASS, - Species.DIALGA, - Species.HEATRAN, - Species.ARCEUS, - Species.EXCADRILL, - Species.ESCAVALIER, - Species.FERROSEED, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.PAWNIARD, - Species.BISHARP, - Species.DURANT, - Species.COBALION, - Species.GENESECT, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.KLEFKI, - Species.SILVALLY, - Species.TOGEDEMARU, - Species.SOLGALEO, - Species.CELESTEELA, - Species.KARTANA, - Species.MAGEARNA, - Species.STAKATAKA, - Species.MELTAN, - Species.MELMETAL, - Species.CORVIKNIGHT, - Species.PERRSERKER, - Species.CUFANT, - Species.COPPERAJAH, - Species.DURALUDON, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.VAROOM, - Species.REVAVROOM, - Species.ORTHWORM, - Species.KINGAMBIT, - Species.IRON_TREADS, - Species.GHOLDENGO, - Species.ARCHALUDON, - Species.IRON_CROWN, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.GALAR_MEOWTH, - Species.GALAR_STUNFISK, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, + [MoveId.STEEL_BEAM]: [ + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.MEW, + SpeciesId.FORRETRESS, + SpeciesId.STEELIX, + SpeciesId.SCIZOR, + SpeciesId.SKARMORY, + SpeciesId.NOSEPASS, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.BELDUM, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGISTEEL, + SpeciesId.JIRACHI, + SpeciesId.EMPOLEON, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.LUCARIO, + SpeciesId.MAGNEZONE, + SpeciesId.PROBOPASS, + SpeciesId.DIALGA, + SpeciesId.HEATRAN, + SpeciesId.ARCEUS, + SpeciesId.EXCADRILL, + SpeciesId.ESCAVALIER, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.DURANT, + SpeciesId.COBALION, + SpeciesId.GENESECT, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.KLEFKI, + SpeciesId.SILVALLY, + SpeciesId.TOGEDEMARU, + SpeciesId.SOLGALEO, + SpeciesId.CELESTEELA, + SpeciesId.KARTANA, + SpeciesId.MAGEARNA, + SpeciesId.STAKATAKA, + SpeciesId.MELTAN, + SpeciesId.MELMETAL, + SpeciesId.CORVIKNIGHT, + SpeciesId.PERRSERKER, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DURALUDON, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.ORTHWORM, + SpeciesId.KINGAMBIT, + SpeciesId.IRON_TREADS, + SpeciesId.GHOLDENGO, + SpeciesId.ARCHALUDON, + SpeciesId.IRON_CROWN, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, ], - [Moves.EXPANDING_FORCE]: [ - Species.WIGGLYTUFF, - Species.KADABRA, - Species.ALAKAZAM, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.DROWZEE, - Species.HYPNO, - Species.EXEGGUTOR, - Species.STARMIE, - Species.MR_MIME, - Species.JYNX, - Species.MEWTWO, - Species.MEW, - Species.NATU, - Species.XATU, - Species.ESPEON, - Species.SLOWKING, - Species.GIRAFARIG, - Species.CELEBI, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.MEDITITE, - Species.MEDICHAM, - Species.SPOINK, - Species.GRUMPIG, - Species.BALTOY, - Species.CLAYDOL, - Species.CHIMECHO, - Species.METANG, - Species.METAGROSS, - Species.JIRACHI, - Species.DEOXYS, - Species.BRONZOR, - Species.BRONZONG, - Species.GALLADE, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.CRESSELIA, - Species.VICTINI, - Species.MUNNA, - Species.MUSHARNA, - Species.WOOBAT, - Species.SWOOBAT, - Species.DARMANITAN, - Species.SIGILYPH, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.DELPHOX, - Species.ESPURR, - Species.MEOWSTIC, - Species.INKAY, - Species.MALAMAR, - Species.HOOPA, - Species.ORANGURU, - Species.BRUXISH, - Species.SOLGALEO, - Species.LUNALA, - Species.NECROZMA, - Species.BLACEPHALON, - Species.DOTTLER, - Species.ORBEETLE, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.MR_RIME, - Species.INDEEDEE, - Species.CALYREX, - Species.WYRDEER, - Species.ARMAROUGE, - Species.RABSCA, - Species.ESPATHRA, - Species.VELUZA, - Species.FARIGIRAF, - Species.SCREAM_TAIL, - Species.IRON_VALIANT, - Species.IRON_CROWN, - Species.ALOLA_RAICHU, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_SLOWKING, - Species.HISUI_BRAVIARY, + [MoveId.EXPANDING_FORCE]: [ + SpeciesId.WIGGLYTUFF, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.EXEGGUTOR, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.JYNX, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.ESPEON, + SpeciesId.SLOWKING, + SpeciesId.GIRAFARIG, + SpeciesId.CELEBI, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.CHIMECHO, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.GALLADE, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.CRESSELIA, + SpeciesId.VICTINI, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.DARMANITAN, + SpeciesId.SIGILYPH, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.DELPHOX, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.HOOPA, + SpeciesId.ORANGURU, + SpeciesId.BRUXISH, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NECROZMA, + SpeciesId.BLACEPHALON, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.MR_RIME, + SpeciesId.INDEEDEE, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.ARMAROUGE, + SpeciesId.RABSCA, + SpeciesId.ESPATHRA, + SpeciesId.VELUZA, + SpeciesId.FARIGIRAF, + SpeciesId.SCREAM_TAIL, + SpeciesId.IRON_VALIANT, + SpeciesId.IRON_CROWN, + SpeciesId.ALOLA_RAICHU, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_SLOWKING, + SpeciesId.HISUI_BRAVIARY, ], - [Moves.STEEL_ROLLER]: [ - Species.SANDSHREW, - Species.SANDSLASH, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.CLOYSTER, - Species.LICKITUNG, - Species.SNORLAX, - Species.MEW, - Species.MARILL, - Species.AZUMARILL, - Species.STEELIX, - Species.QWILFISH, - Species.SHUCKLE, - Species.MILTANK, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.WAILMER, - Species.WAILORD, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.METANG, - Species.METAGROSS, - Species.REGISTEEL, - Species.BRONZOR, - Species.BRONZONG, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.HEATRAN, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.FERROSEED, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.TOGEDEMARU, - Species.DHELMISE, - Species.SOLGALEO, - Species.CELESTEELA, - Species.GUZZLORD, - Species.MAGEARNA, - Species.STAKATAKA, - Species.MELMETAL, - Species.CUFANT, - Species.COPPERAJAH, - Species.DURALUDON, - Species.IRON_TREADS, - Species.ARCHALUDON, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, + [MoveId.STEEL_ROLLER]: [ + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.CLOYSTER, + SpeciesId.LICKITUNG, + SpeciesId.SNORLAX, + SpeciesId.MEW, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.STEELIX, + SpeciesId.QWILFISH, + SpeciesId.SHUCKLE, + SpeciesId.MILTANK, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGISTEEL, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.HEATRAN, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.TOGEDEMARU, + SpeciesId.DHELMISE, + SpeciesId.SOLGALEO, + SpeciesId.CELESTEELA, + SpeciesId.GUZZLORD, + SpeciesId.MAGEARNA, + SpeciesId.STAKATAKA, + SpeciesId.MELMETAL, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DURALUDON, + SpeciesId.IRON_TREADS, + SpeciesId.ARCHALUDON, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, ], - [Moves.SCALE_SHOT]: [ - Species.CHARIZARD, - Species.EKANS, - Species.ARBOK, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.GYARADOS, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEW, - Species.DUNSPARCE, - Species.GLIGAR, - Species.QWILFISH, - Species.KINGDRA, - Species.LUGIA, - Species.SCEPTILE, - Species.CARVANHA, - Species.SHARPEDO, - Species.FLYGON, - Species.FEEBAS, - Species.MILOTIC, - Species.RELICANTH, - Species.LUVDISC, - Species.LATIAS, - Species.LATIOS, - Species.RAYQUAZA, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.DIALGA, - Species.PALKIA, - Species.BASCULIN, - Species.KROKOROK, - Species.KROOKODILE, - Species.ALOMOMOLA, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.DRUDDIGON, - Species.HYDREIGON, - Species.RESHIRAM, - Species.ZEKROM, - Species.KYUREM, - Species.SKRELP, - Species.DRAGALGE, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.ZYGARDE, - Species.WISHIWASHI, - Species.SALANDIT, - Species.SALAZZLE, - Species.TURTONATOR, - Species.DRAMPA, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.NAGANADEL, - Species.INTELEON, - Species.CHEWTLE, - Species.DREDNAW, - Species.SILICOBRA, - Species.SANDACONDA, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.REGIDRAGO, - Species.BASCULEGION, - Species.OVERQWIL, - Species.CYCLIZAR, - Species.VELUZA, - Species.DUDUNSPARCE, - Species.BAXCALIBUR, - Species.ROARING_MOON, - Species.KORAIDON, - Species.GOUGING_FIRE, - Species.HISUI_QWILFISH, + [MoveId.SCALE_SHOT]: [ + SpeciesId.CHARIZARD, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.GYARADOS, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.QWILFISH, + SpeciesId.KINGDRA, + SpeciesId.LUGIA, + SpeciesId.SCEPTILE, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.FLYGON, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.RAYQUAZA, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.BASCULIN, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.ALOMOMOLA, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.DRUDDIGON, + SpeciesId.HYDREIGON, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.KYUREM, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.ZYGARDE, + SpeciesId.WISHIWASHI, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.TURTONATOR, + SpeciesId.DRAMPA, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.NAGANADEL, + SpeciesId.INTELEON, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.REGIDRAGO, + SpeciesId.BASCULEGION, + SpeciesId.OVERQWIL, + SpeciesId.CYCLIZAR, + SpeciesId.VELUZA, + SpeciesId.DUDUNSPARCE, + SpeciesId.BAXCALIBUR, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.GOUGING_FIRE, + SpeciesId.HISUI_QWILFISH, ], - [Moves.METEOR_BEAM]: [ - Species.CLEFAIRY, - Species.CLEFABLE, - Species.ONIX, - Species.RHYDON, - Species.STARMIE, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.MEW, - Species.AMPHAROS, - Species.SUDOWOODO, - Species.STEELIX, - Species.SHUCKLE, - Species.CORSOLA, - Species.NOSEPASS, - Species.AGGRON, - Species.LUNATONE, - Species.SOLROCK, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.RELICANTH, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGISTEEL, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.BASTIODON, - Species.BRONZONG, - Species.RHYPERIOR, - Species.PROBOPASS, - Species.ARCEUS, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.CRUSTLE, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.BARBARACLE, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.CARBINK, - Species.DIANCIE, - Species.MINIOR, - Species.SOLGALEO, - Species.LUNALA, - Species.NIHILEGO, - Species.CELESTEELA, - Species.NECROZMA, - Species.STAKATAKA, - Species.DREDNAW, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.CURSOLA, - Species.STONJOURNER, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.ETERNATUS, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.ARMAROUGE, - Species.KLAWF, - Species.GLIMMET, - Species.GLIMMORA, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.IRON_THORNS, - Species.KORAIDON, - Species.ARCHALUDON, - Species.IRON_BOULDER, - Species.TERAPAGOS, - Species.ALOLA_GOLEM, - Species.GALAR_CORSOLA, - Species.HISUI_AVALUGG, + [MoveId.METEOR_BEAM]: [ + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.ONIX, + SpeciesId.RHYDON, + SpeciesId.STARMIE, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.MEW, + SpeciesId.AMPHAROS, + SpeciesId.SUDOWOODO, + SpeciesId.STEELIX, + SpeciesId.SHUCKLE, + SpeciesId.CORSOLA, + SpeciesId.NOSEPASS, + SpeciesId.AGGRON, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.RELICANTH, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGISTEEL, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.BASTIODON, + SpeciesId.BRONZONG, + SpeciesId.RHYPERIOR, + SpeciesId.PROBOPASS, + SpeciesId.ARCEUS, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.CRUSTLE, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.BARBARACLE, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.CARBINK, + SpeciesId.DIANCIE, + SpeciesId.MINIOR, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.CELESTEELA, + SpeciesId.NECROZMA, + SpeciesId.STAKATAKA, + SpeciesId.DREDNAW, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.CURSOLA, + SpeciesId.STONJOURNER, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.ETERNATUS, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.ARMAROUGE, + SpeciesId.KLAWF, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_THORNS, + SpeciesId.KORAIDON, + SpeciesId.ARCHALUDON, + SpeciesId.IRON_BOULDER, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_GOLEM, + SpeciesId.GALAR_CORSOLA, + SpeciesId.HISUI_AVALUGG, ], - [Moves.MISTY_EXPLOSION]: [ - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.MEW, - Species.MARILL, - Species.AZUMARILL, - Species.GARDEVOIR, - Species.MUSHARNA, - Species.FLORGES, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.SYLVEON, - Species.CARBINK, - Species.XERNEAS, - Species.DIANCIE, - Species.PRIMARINA, - Species.MAGEARNA, - Species.HATTERENE, - Species.ALCREMIE, - Species.ENAMORUS, - Species.SCREAM_TAIL, - Species.GALAR_WEEZING, + [MoveId.MISTY_EXPLOSION]: [ + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.MEW, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.GARDEVOIR, + SpeciesId.MUSHARNA, + SpeciesId.FLORGES, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.SYLVEON, + SpeciesId.CARBINK, + SpeciesId.XERNEAS, + SpeciesId.DIANCIE, + SpeciesId.PRIMARINA, + SpeciesId.MAGEARNA, + SpeciesId.HATTERENE, + SpeciesId.ALCREMIE, + SpeciesId.ENAMORUS, + SpeciesId.SCREAM_TAIL, + SpeciesId.GALAR_WEEZING, ], - [Moves.GRASSY_GLIDE]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.TANGELA, - Species.MEW, - Species.BELLOSSOM, - Species.SUNFLORA, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.ROSELIA, - Species.CACNEA, - Species.CACTURNE, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.BUDEW, - Species.ROSERADE, - Species.CHERUBI, - Species.CHERRIM, - Species.SNOVER, - Species.ABOMASNOW, - Species.TANGROWTH, - Species.LEAFEON, - Species.SHAYMIN, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.MARACTUS, - Species.DEERLING, - Species.SAWSBUCK, - Species.VIRIZION, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.SKIDDO, - Species.GOGOAT, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.FOMANTIS, - Species.LURANTIS, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.DHELMISE, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.WOOLOO, - Species.DUBWOOL, - Species.APPLIN, - Species.FLAPPLE, - Species.APPLETUN, - Species.SIRFETCHD, - Species.ZARUDE, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.DIPPLIN, - Species.OGERPON, - Species.HYDRAPPLE, - Species.ALOLA_EXEGGUTOR, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_LILLIGANT, - Species.HISUI_DECIDUEYE, + [MoveId.GRASSY_GLIDE]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.TANGELA, + SpeciesId.MEW, + SpeciesId.BELLOSSOM, + SpeciesId.SUNFLORA, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.ROSELIA, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.TANGROWTH, + SpeciesId.LEAFEON, + SpeciesId.SHAYMIN, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.MARACTUS, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.VIRIZION, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.DHELMISE, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.WOOLOO, + SpeciesId.DUBWOOL, + SpeciesId.APPLIN, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.SIRFETCHD, + SpeciesId.ZARUDE, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.DIPPLIN, + SpeciesId.OGERPON, + SpeciesId.HYDRAPPLE, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.RISING_VOLTAGE]: [ - Species.PIKACHU, - Species.RAICHU, - Species.MAGNEMITE, - Species.MAGNETON, - Species.ELECTABUZZ, - Species.JOLTEON, - Species.ZAPDOS, - Species.MEW, - Species.CHINCHOU, - Species.LANTURN, - Species.RAIKOU, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.MAGNEZONE, - Species.ELECTIVIRE, - Species.ROTOM, - Species.EMOLGA, - Species.JOLTIK, - Species.GALVANTULA, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.THUNDURUS, - Species.ZEKROM, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.DEDENNE, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.TOGEDEMARU, - Species.XURKITREE, - Species.ZERAORA, - Species.YAMPER, - Species.BOLTUND, - Species.TOXTRICITY, - Species.PINCURCHIN, - Species.MORPEKO, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.REGIELEKI, - Species.RAGING_BOLT, - Species.ALOLA_RAICHU, + [MoveId.RISING_VOLTAGE]: [ + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.ELECTABUZZ, + SpeciesId.JOLTEON, + SpeciesId.ZAPDOS, + SpeciesId.MEW, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.RAIKOU, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.MAGNEZONE, + SpeciesId.ELECTIVIRE, + SpeciesId.ROTOM, + SpeciesId.EMOLGA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.THUNDURUS, + SpeciesId.ZEKROM, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.DEDENNE, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.TOGEDEMARU, + SpeciesId.XURKITREE, + SpeciesId.ZERAORA, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.TOXTRICITY, + SpeciesId.PINCURCHIN, + SpeciesId.MORPEKO, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.REGIELEKI, + SpeciesId.RAGING_BOLT, + SpeciesId.ALOLA_RAICHU, ], - [Moves.TERRAIN_PULSE]: [ - Species.VENUSAUR, - Species.BLASTOISE, - Species.EXEGGUTOR, - Species.LICKITUNG, - Species.KANGASKHAN, - Species.SNORLAX, - Species.MEW, - Species.DUNSPARCE, - Species.EXPLOUD, - Species.LUCARIO, - Species.LICKILICKY, - Species.REGIGIGAS, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.CARBINK, - Species.XERNEAS, - Species.DIANCIE, - Species.ORANGURU, - Species.PALOSSAND, - Species.TYPE_NULL, - Species.SILVALLY, - Species.INDEEDEE, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.DUDUNSPARCE, - Species.ALOLA_EXEGGUTOR, - Species.GALAR_STUNFISK, + [MoveId.TERRAIN_PULSE]: [ + SpeciesId.VENUSAUR, + SpeciesId.BLASTOISE, + SpeciesId.EXEGGUTOR, + SpeciesId.LICKITUNG, + SpeciesId.KANGASKHAN, + SpeciesId.SNORLAX, + SpeciesId.MEW, + SpeciesId.DUNSPARCE, + SpeciesId.EXPLOUD, + SpeciesId.LUCARIO, + SpeciesId.LICKILICKY, + SpeciesId.REGIGIGAS, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.CARBINK, + SpeciesId.XERNEAS, + SpeciesId.DIANCIE, + SpeciesId.ORANGURU, + SpeciesId.PALOSSAND, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.INDEEDEE, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.DUDUNSPARCE, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.GALAR_STUNFISK, ], - [Moves.SKITTER_SMACK]: [ - Species.EKANS, - Species.ARBOK, - Species.VENONAT, - Species.VENOMOTH, - Species.PERSIAN, - Species.TENTACRUEL, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.SCYTHER, - Species.MEW, - Species.SPINARAK, - Species.ARIADOS, - Species.YANMA, - Species.DUNSPARCE, - Species.GLIGAR, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.OCTILLERY, - Species.SURSKIT, - Species.MASQUERAIN, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.SABLEYE, - Species.VOLBEAT, - Species.ILLUMISE, - Species.CACNEA, - Species.CACTURNE, - Species.SEVIPER, - Species.MILOTIC, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.KRICKETOT, - Species.KRICKETUNE, - Species.COMBEE, - Species.VESPIQUEN, - Species.SHELLOS, - Species.GASTRODON, - Species.SKORUPI, - Species.DRAPION, - Species.YANMEGA, - Species.GLISCOR, - Species.DUSKNOIR, - Species.GIRATINA, - Species.LIEPARD, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DWEBBLE, - Species.CRUSTLE, - Species.ZORUA, - Species.ZOROARK, - Species.JOLTIK, - Species.GALVANTULA, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.SHELMET, - Species.ACCELGOR, - Species.DURANT, - Species.LARVESTA, - Species.VOLCARONA, - Species.VIVILLON, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.ZYGARDE, - Species.HOOPA, - Species.DECIDUEYE, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.DEWPIDER, - Species.ARAQUANID, - Species.FOMANTIS, - Species.LURANTIS, - Species.SALANDIT, - Species.SALAZZLE, - Species.WIMPOD, - Species.GOLISOPOD, - Species.PHEROMOSA, - Species.MARSHADOW, - Species.INTELEON, - Species.CHEWTLE, - Species.DREDNAW, - Species.SILICOBRA, - Species.SANDACONDA, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.GRAPPLOCT, - Species.SNOM, - Species.FROSMOTH, - Species.KLEAVOR, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.NYMBLE, - Species.LOKIX, - Species.SHROODLE, - Species.GRAFAIAI, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.KLAWF, - Species.RELLOR, - Species.RABSCA, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.DUDUNSPARCE, - Species.SLITHER_WING, - Species.ALOLA_PERSIAN, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, + [MoveId.SKITTER_SMACK]: [ + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.PERSIAN, + SpeciesId.TENTACRUEL, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.SCYTHER, + SpeciesId.MEW, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.YANMA, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.OCTILLERY, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.SABLEYE, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SEVIPER, + SpeciesId.MILOTIC, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.KRICKETOT, + SpeciesId.KRICKETUNE, + SpeciesId.COMBEE, + SpeciesId.VESPIQUEN, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.YANMEGA, + SpeciesId.GLISCOR, + SpeciesId.DUSKNOIR, + SpeciesId.GIRATINA, + SpeciesId.LIEPARD, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.DURANT, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.VIVILLON, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.ZYGARDE, + SpeciesId.HOOPA, + SpeciesId.DECIDUEYE, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.PHEROMOSA, + SpeciesId.MARSHADOW, + SpeciesId.INTELEON, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.GRAPPLOCT, + SpeciesId.SNOM, + SpeciesId.FROSMOTH, + SpeciesId.KLEAVOR, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.KLAWF, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.DUDUNSPARCE, + SpeciesId.SLITHER_WING, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, ], - [Moves.BURNING_JEALOUSY]: [ - Species.VULPIX, - Species.NINETALES, - Species.MAGMAR, - Species.FLAREON, - Species.MOLTRES, - Species.MEW, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.MISDREAVUS, - Species.MAGCARGO, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.TORKOAL, - Species.BANETTE, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.MISMAGIUS, - Species.SKUNTANK, - Species.SPIRITOMB, - Species.MAGMORTAR, - Species.HEATRAN, - Species.LIEPARD, - Species.DARMANITAN, - Species.ZORUA, - Species.ZOROARK, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.HEATMOR, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.PYROAR, - Species.TREVENANT, - Species.INCINEROAR, - Species.SALANDIT, - Species.SALAZZLE, - Species.TURTONATOR, - Species.MIMIKYU, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.THIEVUL, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.CURSOLA, - Species.SCOVILLAIN, - Species.CHI_YU, - Species.ALOLA_PERSIAN, - Species.ALOLA_MAROWAK, - Species.GALAR_DARMANITAN, - Species.HISUI_TYPHLOSION, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, + [MoveId.BURNING_JEALOUSY]: [ + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.MAGMAR, + SpeciesId.FLAREON, + SpeciesId.MOLTRES, + SpeciesId.MEW, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.MISDREAVUS, + SpeciesId.MAGCARGO, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.TORKOAL, + SpeciesId.BANETTE, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.MISMAGIUS, + SpeciesId.SKUNTANK, + SpeciesId.SPIRITOMB, + SpeciesId.MAGMORTAR, + SpeciesId.HEATRAN, + SpeciesId.LIEPARD, + SpeciesId.DARMANITAN, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.HEATMOR, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.PYROAR, + SpeciesId.TREVENANT, + SpeciesId.INCINEROAR, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.TURTONATOR, + SpeciesId.MIMIKYU, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.THIEVUL, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.CURSOLA, + SpeciesId.SCOVILLAIN, + SpeciesId.CHI_YU, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, ], - [Moves.LASH_OUT]: [ - Species.EKANS, - Species.ARBOK, - Species.MEOWTH, - Species.PERSIAN, - Species.MANKEY, - Species.PRIMEAPE, - Species.MUK, - Species.TAUROS, - Species.GYARADOS, - Species.MEWTWO, - Species.MEW, - Species.UMBREON, - Species.MURKROW, - Species.SNEASEL, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.PUPITAR, - Species.TYRANITAR, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.NUZLEAF, - Species.SHIFTRY, - Species.VIGOROTH, - Species.SLAKING, - Species.HARIYAMA, - Species.SABLEYE, - Species.NUMEL, - Species.CAMERUPT, - Species.CACTURNE, - Species.SEVIPER, - Species.CRAWDAUNT, - Species.SHUPPET, - Species.BANETTE, - Species.MONFERNO, - Species.INFERNAPE, - Species.EMPOLEON, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.STUNKY, - Species.SKUNTANK, - Species.SPIRITOMB, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.WEAVILE, - Species.DARKRAI, - Species.PURRLOIN, - Species.LIEPARD, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARMANITAN, - Species.SCRAGGY, - Species.SCRAFTY, - Species.ARCHEN, - Species.ARCHEOPS, - Species.ZORUA, - Species.ZOROARK, - Species.LAMPENT, - Species.CHANDELURE, - Species.STUNFISK, - Species.DRUDDIGON, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.VULLABY, - Species.MANDIBUZZ, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.TORNADUS, - Species.THUNDURUS, - Species.PANCHAM, - Species.PANGORO, - Species.INKAY, - Species.MALAMAR, - Species.TYRUNT, - Species.TYRANTRUM, - Species.PHANTUMP, - Species.TREVENANT, - Species.YVELTAL, - Species.HOOPA, - Species.INCINEROAR, - Species.MUDSDALE, - Species.TURTONATOR, - Species.DRAMPA, - Species.GUZZLORD, - Species.NICKIT, - Species.THIEVUL, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.MORPEKO, - Species.ZARUDE, - Species.GLASTRIER, - Species.SPECTRIER, - Species.SNEASLER, - Species.OVERQWIL, - Species.MEOWSCARADA, - Species.OINKOLOGNE, - Species.LOKIX, - Species.SQUAWKABILLY, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.SCOVILLAIN, - Species.BOMBIRDIER, - Species.REVAVROOM, - Species.ANNIHILAPE, - Species.KINGAMBIT, - Species.BRUTE_BONNET, - Species.IRON_JUGULIS, - Species.WO_CHIEN, - Species.CHIEN_PAO, - Species.TING_LU, - Species.CHI_YU, - Species.ROARING_MOON, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.OGERPON, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.PECHARUNT, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_MUK, + [MoveId.LASH_OUT]: [ + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.MUK, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SNEASEL, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.HARIYAMA, + SpeciesId.SABLEYE, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.CACTURNE, + SpeciesId.SEVIPER, + SpeciesId.CRAWDAUNT, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.EMPOLEON, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.SPIRITOMB, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.WEAVILE, + SpeciesId.DARKRAI, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARMANITAN, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.STUNFISK, + SpeciesId.DRUDDIGON, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.YVELTAL, + SpeciesId.HOOPA, + SpeciesId.INCINEROAR, + SpeciesId.MUDSDALE, + SpeciesId.TURTONATOR, + SpeciesId.DRAMPA, + SpeciesId.GUZZLORD, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.MORPEKO, + SpeciesId.ZARUDE, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.MEOWSCARADA, + SpeciesId.OINKOLOGNE, + SpeciesId.LOKIX, + SpeciesId.SQUAWKABILLY, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.SCOVILLAIN, + SpeciesId.BOMBIRDIER, + SpeciesId.REVAVROOM, + SpeciesId.ANNIHILAPE, + SpeciesId.KINGAMBIT, + SpeciesId.BRUTE_BONNET, + SpeciesId.IRON_JUGULIS, + SpeciesId.WO_CHIEN, + SpeciesId.CHIEN_PAO, + SpeciesId.TING_LU, + SpeciesId.CHI_YU, + SpeciesId.ROARING_MOON, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.OGERPON, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.PECHARUNT, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_MUK, [ - Species.LYCANROC, + SpeciesId.LYCANROC, "midnight", ], - Species.GALAR_MEOWTH, - Species.GALAR_MOLTRES, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARMANITAN, - Species.GALAR_STUNFISK, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_STUNFISK, [ - Species.URSHIFU, + SpeciesId.URSHIFU, "single-strike", ], [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", "shadow", ], - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_GOODRA, - Species.PALDEA_TAUROS, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_GOODRA, + SpeciesId.PALDEA_TAUROS, ], - [Moves.POLTERGEIST]: [ - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.MEW, - Species.MISDREAVUS, - Species.SHEDINJA, - Species.SABLEYE, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.MISMAGIUS, - Species.SPIRITOMB, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.GIRATINA, - Species.YAMASK, - Species.COFAGRIGUS, - Species.FRILLISH, - Species.JELLICENT, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.GOLETT, - Species.GOLURK, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.DECIDUEYE, - Species.SANDYGAST, - Species.PALOSSAND, - Species.DHELMISE, - Species.LUNALA, - Species.MARSHADOW, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.CURSOLA, - Species.RUNERIGUS, - Species.SPECTRIER, - Species.SKELEDIRGE, - Species.CERULEDGE, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.RABSCA, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.FLUTTER_MANE, - Species.GHOLDENGO, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.MUNKIDORI, - Species.PECHARUNT, - Species.ALOLA_MAROWAK, - Species.GALAR_YAMASK, - Species.HISUI_TYPHLOSION, - Species.HISUI_ZOROARK, + [MoveId.POLTERGEIST]: [ + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.MEW, + SpeciesId.MISDREAVUS, + SpeciesId.SHEDINJA, + SpeciesId.SABLEYE, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.MISMAGIUS, + SpeciesId.SPIRITOMB, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.GIRATINA, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.DECIDUEYE, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.DHELMISE, + SpeciesId.LUNALA, + SpeciesId.MARSHADOW, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.CURSOLA, + SpeciesId.RUNERIGUS, + SpeciesId.SPECTRIER, + SpeciesId.SKELEDIRGE, + SpeciesId.CERULEDGE, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.RABSCA, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.FLUTTER_MANE, + SpeciesId.GHOLDENGO, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.MUNKIDORI, + SpeciesId.PECHARUNT, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.GALAR_YAMASK, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_ZOROARK, ], - [Moves.CORROSIVE_GAS]: [ - Species.VILEPLUME, - Species.TENTACRUEL, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.KOFFING, - Species.WEEZING, - Species.MEW, - Species.STUNKY, - Species.SKUNTANK, - Species.TOXICROAK, - Species.TRUBBISH, - Species.GARBODOR, - Species.SALAZZLE, - Species.NIHILEGO, - Species.GUZZLORD, - Species.GALAR_WEEZING, + [MoveId.CORROSIVE_GAS]: [ + SpeciesId.VILEPLUME, + SpeciesId.TENTACRUEL, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.MEW, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.TOXICROAK, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.SALAZZLE, + SpeciesId.NIHILEGO, + SpeciesId.GUZZLORD, + SpeciesId.GALAR_WEEZING, ], - [Moves.COACHING]: [ - Species.POLIWRATH, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.MEW, - Species.HERACROSS, - Species.HITMONTOP, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MAKUHITA, - Species.HARIYAMA, - Species.INFERNAPE, - Species.RIOLU, - Species.LUCARIO, - Species.CROAGUNK, - Species.TOXICROAK, - Species.GALLADE, - Species.PIGNITE, - Species.EMBOAR, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.THROH, - Species.SAWK, - Species.SCRAGGY, - Species.SCRAFTY, - Species.MIENFOO, - Species.MIENSHAO, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.KELDEO, - Species.MELOETTA, - Species.CHESNAUGHT, - Species.PANCHAM, - Species.PANGORO, - Species.HAWLUCHA, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.STUFFUL, - Species.BEWEAR, - Species.PASSIMIAN, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.MARSHADOW, - Species.ZERAORA, - Species.CINDERACE, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.SIRFETCHD, - Species.FALINKS, - Species.ZAMAZENTA, - Species.KUBFU, - Species.URSHIFU, - Species.SNEASLER, - Species.QUAQUAVAL, - Species.PAWMO, - Species.PAWMOT, - Species.ANNIHILAPE, - Species.IRON_VALIANT, - Species.IRON_LEAVES, - Species.GALAR_ZAPDOS, - Species.HISUI_SNEASEL, - Species.HISUI_LILLIGANT, - Species.HISUI_DECIDUEYE, + [MoveId.COACHING]: [ + SpeciesId.POLIWRATH, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.MEW, + SpeciesId.HERACROSS, + SpeciesId.HITMONTOP, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.INFERNAPE, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.GALLADE, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.CHESNAUGHT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.HAWLUCHA, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.PASSIMIAN, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.MARSHADOW, + SpeciesId.ZERAORA, + SpeciesId.CINDERACE, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.SIRFETCHD, + SpeciesId.FALINKS, + SpeciesId.ZAMAZENTA, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.SNEASLER, + SpeciesId.QUAQUAVAL, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.ANNIHILAPE, + SpeciesId.IRON_VALIANT, + SpeciesId.IRON_LEAVES, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.FLIP_TURN]: [ - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.PSYDUCK, - Species.GOLDUCK, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.SEEL, - Species.DEWGONG, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.VAPOREON, - Species.KABUTOPS, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.CHINCHOU, - Species.LANTURN, - Species.QWILFISH, - Species.KINGDRA, - Species.SWAMPERT, - Species.CARVANHA, - Species.SHARPEDO, - Species.MILOTIC, - Species.LUVDISC, - Species.LATIOS, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.BUIZEL, - Species.FLOATZEL, - Species.FINNEON, - Species.LUMINEON, - Species.PHIONE, - Species.MANAPHY, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.BASCULIN, - Species.SWANNA, - Species.ALOMOMOLA, - Species.KELDEO, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.WISHIWASHI, - Species.BRUXISH, - Species.INTELEON, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.EISCUE, - Species.BASCULEGION, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.PALAFIN, - Species.VELUZA, - Species.IRON_BUNDLE, - Species.WALKING_WAKE, - Species.HISUI_SAMUROTT, + [MoveId.FLIP_TURN]: [ + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.VAPOREON, + SpeciesId.KABUTOPS, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.QWILFISH, + SpeciesId.KINGDRA, + SpeciesId.SWAMPERT, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.MILOTIC, + SpeciesId.LUVDISC, + SpeciesId.LATIOS, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.BASCULIN, + SpeciesId.SWANNA, + SpeciesId.ALOMOMOLA, + SpeciesId.KELDEO, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.WISHIWASHI, + SpeciesId.BRUXISH, + SpeciesId.INTELEON, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.EISCUE, + SpeciesId.BASCULEGION, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.PALAFIN, + SpeciesId.VELUZA, + SpeciesId.IRON_BUNDLE, + SpeciesId.WALKING_WAKE, + SpeciesId.HISUI_SAMUROTT, ], - [Moves.TRIPLE_AXEL]: [ - Species.SEEL, - Species.DEWGONG, - Species.JYNX, - Species.ARTICUNO, - Species.MEW, - Species.BELLOSSOM, - Species.SNEASEL, - Species.DELIBIRD, - Species.HITMONTOP, - Species.KIRLIA, - Species.GARDEVOIR, - Species.MILOTIC, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.AMBIPOM, - Species.BUNEARY, - Species.LOPUNNY, - Species.WEAVILE, - Species.GLACEON, - Species.GALLADE, - Species.FROSLASS, - Species.LEAVANNY, - Species.MINCCINO, - Species.CINCCINO, - Species.CRYOGONAL, - Species.MIENSHAO, - Species.MELOETTA, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.STEENEE, - Species.TSAREENA, - Species.PHEROMOSA, - Species.MR_RIME, - Species.FROSMOTH, - Species.MEOWSCARADA, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_NINETALES, - Species.GALAR_MR_MIME, - Species.HISUI_LILLIGANT, + [MoveId.TRIPLE_AXEL]: [ + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.JYNX, + SpeciesId.ARTICUNO, + SpeciesId.MEW, + SpeciesId.BELLOSSOM, + SpeciesId.SNEASEL, + SpeciesId.DELIBIRD, + SpeciesId.HITMONTOP, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.MILOTIC, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.AMBIPOM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.WEAVILE, + SpeciesId.GLACEON, + SpeciesId.GALLADE, + SpeciesId.FROSLASS, + SpeciesId.LEAVANNY, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.CRYOGONAL, + SpeciesId.MIENSHAO, + SpeciesId.MELOETTA, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.PHEROMOSA, + SpeciesId.MR_RIME, + SpeciesId.FROSMOTH, + SpeciesId.MEOWSCARADA, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_NINETALES, + SpeciesId.GALAR_MR_MIME, + SpeciesId.HISUI_LILLIGANT, ], - [Moves.DUAL_WINGBEAT]: [ - Species.CHARIZARD, - Species.BUTTERFREE, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.ZUBAT, - Species.GOLBAT, - Species.FARFETCHD, - Species.SCYTHER, - Species.AERODACTYL, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRAGONITE, - Species.MEW, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.CROBAT, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MURKROW, - Species.DUNSPARCE, - Species.GLIGAR, - Species.SCIZOR, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.WINGULL, - Species.PELIPPER, - Species.MASQUERAIN, - Species.NINJASK, - Species.VIBRAVA, - Species.FLYGON, - Species.SWABLU, - Species.ALTARIA, - Species.TROPIUS, - Species.SALAMENCE, - Species.LATIAS, - Species.LATIOS, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.COMBEE, - Species.VESPIQUEN, - Species.HONCHKROW, - Species.TOGEKISS, - Species.YANMEGA, - Species.GLISCOR, - Species.PALKIA, - Species.GIRATINA, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.WOOBAT, - Species.SWOOBAT, - Species.SIGILYPH, - Species.ARCHEN, - Species.ARCHEOPS, - Species.EMOLGA, - Species.DRUDDIGON, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HYDREIGON, - Species.VOLCARONA, - Species.RESHIRAM, - Species.ZEKROM, - Species.KYUREM, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.HAWLUCHA, - Species.NOIBAT, - Species.NOIVERN, - Species.YVELTAL, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.VIKAVOLT, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.LUNALA, - Species.BUZZWOLE, - Species.NAGANADEL, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.FLAPPLE, - Species.CRAMORANT, - Species.SIRFETCHD, - Species.FROSMOTH, - Species.KLEAVOR, - Species.SQUAWKABILLY, - Species.WATTREL, - Species.KILOWATTREL, - Species.BOMBIRDIER, - Species.FLAMIGO, - Species.DUDUNSPARCE, - Species.SLITHER_WING, - Species.IRON_JUGULIS, - Species.KORAIDON, - Species.FEZANDIPITI, - Species.GALAR_FARFETCHD, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.HISUI_BRAVIARY, - Species.HISUI_DECIDUEYE, + [MoveId.DUAL_WINGBEAT]: [ + SpeciesId.CHARIZARD, + SpeciesId.BUTTERFREE, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.FARFETCHD, + SpeciesId.SCYTHER, + SpeciesId.AERODACTYL, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.CROBAT, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MURKROW, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.SCIZOR, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.MASQUERAIN, + SpeciesId.NINJASK, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.TROPIUS, + SpeciesId.SALAMENCE, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.COMBEE, + SpeciesId.VESPIQUEN, + SpeciesId.HONCHKROW, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.GLISCOR, + SpeciesId.PALKIA, + SpeciesId.GIRATINA, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.SIGILYPH, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.EMOLGA, + SpeciesId.DRUDDIGON, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HYDREIGON, + SpeciesId.VOLCARONA, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.KYUREM, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.HAWLUCHA, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.YVELTAL, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.VIKAVOLT, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.LUNALA, + SpeciesId.BUZZWOLE, + SpeciesId.NAGANADEL, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.FLAPPLE, + SpeciesId.CRAMORANT, + SpeciesId.SIRFETCHD, + SpeciesId.FROSMOTH, + SpeciesId.KLEAVOR, + SpeciesId.SQUAWKABILLY, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.BOMBIRDIER, + SpeciesId.FLAMIGO, + SpeciesId.DUDUNSPARCE, + SpeciesId.SLITHER_WING, + SpeciesId.IRON_JUGULIS, + SpeciesId.KORAIDON, + SpeciesId.FEZANDIPITI, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_DECIDUEYE, ], - [Moves.SCORCHING_SANDS]: [ - Species.CHARIZARD, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDOQUEEN, - Species.NIDOKING, - Species.NINETALES, - Species.DIGLETT, - Species.DUGTRIO, - Species.ARCANINE, - Species.RAPIDASH, - Species.ONIX, - Species.CUBONE, - Species.MAROWAK, - Species.RHYHORN, - Species.RHYDON, - Species.MAGMAR, - Species.FLAREON, - Species.MOLTRES, - Species.MEW, - Species.TYPHLOSION, - Species.STEELIX, - Species.MAGCARGO, - Species.ENTEI, - Species.HO_OH, - Species.BLAZIKEN, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.BALTOY, - Species.CLAYDOL, - Species.GROUDON, - Species.INFERNAPE, - Species.TORTERRA, - Species.SHIELDON, - Species.BASTIODON, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.RHYPERIOR, - Species.MAGMORTAR, - Species.HEATRAN, - Species.ARCEUS, - Species.VICTINI, - Species.DRILBUR, - Species.EXCADRILL, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.GOLETT, - Species.GOLURK, - Species.HEATMOR, - Species.RESHIRAM, - Species.LANDORUS, - Species.DELPHOX, - Species.DIGGERSBY, - Species.ZYGARDE, - Species.DIANCIE, - Species.VOLCANION, - Species.INCINEROAR, - Species.SANDYGAST, - Species.PALOSSAND, - Species.MINIOR, - Species.TURTONATOR, - Species.CINDERACE, - Species.CARKOL, - Species.COALOSSAL, - Species.SILICOBRA, - Species.SANDACONDA, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.SKELEDIRGE, - Species.ARMAROUGE, - Species.SANDY_SHOCKS, - Species.GOUGING_FIRE, - Species.TERAPAGOS, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MAROWAK, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, + [MoveId.SCORCHING_SANDS]: [ + SpeciesId.CHARIZARD, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDOKING, + SpeciesId.NINETALES, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.ARCANINE, + SpeciesId.RAPIDASH, + SpeciesId.ONIX, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.MAGMAR, + SpeciesId.FLAREON, + SpeciesId.MOLTRES, + SpeciesId.MEW, + SpeciesId.TYPHLOSION, + SpeciesId.STEELIX, + SpeciesId.MAGCARGO, + SpeciesId.ENTEI, + SpeciesId.HO_OH, + SpeciesId.BLAZIKEN, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.GROUDON, + SpeciesId.INFERNAPE, + SpeciesId.TORTERRA, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.RHYPERIOR, + SpeciesId.MAGMORTAR, + SpeciesId.HEATRAN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.HEATMOR, + SpeciesId.RESHIRAM, + SpeciesId.LANDORUS, + SpeciesId.DELPHOX, + SpeciesId.DIGGERSBY, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.VOLCANION, + SpeciesId.INCINEROAR, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.MINIOR, + SpeciesId.TURTONATOR, + SpeciesId.CINDERACE, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.SKELEDIRGE, + SpeciesId.ARMAROUGE, + SpeciesId.SANDY_SHOCKS, + SpeciesId.GOUGING_FIRE, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, ], - [Moves.TERA_BLAST]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.CATERPIE, - Species.METAPOD, - Species.BUTTERFREE, - Species.WEEDLE, - Species.KAKUNA, - Species.BEEDRILL, - Species.PIDGEY, - Species.PIDGEOTTO, - Species.PIDGEOT, - Species.RATTATA, - Species.RATICATE, - Species.SPEAROW, - Species.FEAROW, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.SANDSHREW, - Species.SANDSLASH, - Species.NIDORAN_F, - Species.NIDORINA, - Species.NIDOQUEEN, - Species.NIDORAN_M, - Species.NIDORINO, - Species.NIDOKING, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.VULPIX, - Species.NINETALES, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ZUBAT, - Species.GOLBAT, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.PARAS, - Species.PARASECT, - Species.VENONAT, - Species.VENOMOTH, - Species.DIGLETT, - Species.DUGTRIO, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.MANKEY, - Species.PRIMEAPE, - Species.GROWLITHE, - Species.ARCANINE, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.ABRA, - Species.KADABRA, - Species.ALAKAZAM, - Species.MACHOP, - Species.MACHOKE, - Species.MACHAMP, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.GEODUDE, - Species.GRAVELER, - Species.GOLEM, - Species.PONYTA, - Species.RAPIDASH, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.MAGNEMITE, - Species.MAGNETON, - Species.FARFETCHD, - Species.DODUO, - Species.DODRIO, - Species.SEEL, - Species.DEWGONG, - Species.GRIMER, - Species.MUK, - Species.SHELLDER, - Species.CLOYSTER, - Species.GASTLY, - Species.HAUNTER, - Species.GENGAR, - Species.ONIX, - Species.DROWZEE, - Species.HYPNO, - Species.KRABBY, - Species.KINGLER, - Species.VOLTORB, - Species.ELECTRODE, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.CUBONE, - Species.MAROWAK, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.LICKITUNG, - Species.KOFFING, - Species.WEEZING, - Species.RHYHORN, - Species.RHYDON, - Species.CHANSEY, - Species.TANGELA, - Species.KANGASKHAN, - Species.HORSEA, - Species.SEADRA, - Species.GOLDEEN, - Species.SEAKING, - Species.STARYU, - Species.STARMIE, - Species.MR_MIME, - Species.SCYTHER, - Species.JYNX, - Species.ELECTABUZZ, - Species.MAGMAR, - Species.PINSIR, - Species.TAUROS, - Species.GYARADOS, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.PORYGON, - Species.OMANYTE, - Species.OMASTAR, - Species.KABUTO, - Species.KABUTOPS, - Species.AERODACTYL, - Species.SNORLAX, - Species.ARTICUNO, - Species.ZAPDOS, - Species.MOLTRES, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.HOOTHOOT, - Species.NOCTOWL, - Species.LEDYBA, - Species.LEDIAN, - Species.SPINARAK, - Species.ARIADOS, - Species.CROBAT, - Species.CHINCHOU, - Species.LANTURN, - Species.PICHU, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.TOGEPI, - Species.TOGETIC, - Species.NATU, - Species.XATU, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.POLITOED, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.YANMA, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.GLIGAR, - Species.STEELIX, - Species.SNUBBULL, - Species.GRANBULL, - Species.QWILFISH, - Species.SCIZOR, - Species.SHUCKLE, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SLUGMA, - Species.MAGCARGO, - Species.SWINUB, - Species.PILOSWINE, - Species.CORSOLA, - Species.REMORAID, - Species.OCTILLERY, - Species.DELIBIRD, - Species.MANTINE, - Species.SKARMORY, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.KINGDRA, - Species.PHANPY, - Species.DONPHAN, - Species.PORYGON2, - Species.STANTLER, - Species.TYROGUE, - Species.HITMONTOP, - Species.SMOOCHUM, - Species.ELEKID, - Species.MAGBY, - Species.MILTANK, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.LARVITAR, - Species.PUPITAR, - Species.TYRANITAR, - Species.LUGIA, - Species.HO_OH, - Species.CELEBI, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.ZIGZAGOON, - Species.LINOONE, - Species.WURMPLE, - Species.SILCOON, - Species.BEAUTIFLY, - Species.CASCOON, - Species.DUSTOX, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.TAILLOW, - Species.SWELLOW, - Species.WINGULL, - Species.PELIPPER, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.NINCADA, - Species.NINJASK, - Species.SHEDINJA, - Species.WHISMUR, - Species.LOUDRED, - Species.EXPLOUD, - Species.MAKUHITA, - Species.HARIYAMA, - Species.AZURILL, - Species.NOSEPASS, - Species.SKITTY, - Species.DELCATTY, - Species.SABLEYE, - Species.MAWILE, - Species.ARON, - Species.LAIRON, - Species.AGGRON, - Species.MEDITITE, - Species.MEDICHAM, - Species.ELECTRIKE, - Species.MANECTRIC, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ROSELIA, - Species.GULPIN, - Species.SWALOT, - Species.CARVANHA, - Species.SHARPEDO, - Species.WAILMER, - Species.WAILORD, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SPOINK, - Species.GRUMPIG, - Species.SPINDA, - Species.TRAPINCH, - Species.VIBRAVA, - Species.FLYGON, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.ZANGOOSE, - Species.SEVIPER, - Species.LUNATONE, - Species.SOLROCK, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.BALTOY, - Species.CLAYDOL, - Species.LILEEP, - Species.CRADILY, - Species.ANORITH, - Species.ARMALDO, - Species.FEEBAS, - Species.MILOTIC, - Species.CASTFORM, - Species.KECLEON, - Species.SHUPPET, - Species.BANETTE, - Species.DUSKULL, - Species.DUSCLOPS, - Species.TROPIUS, - Species.CHIMECHO, - Species.ABSOL, - Species.SNORUNT, - Species.GLALIE, - Species.SPHEAL, - Species.SEALEO, - Species.WALREIN, - Species.CLAMPERL, - Species.HUNTAIL, - Species.GOREBYSS, - Species.RELICANTH, - Species.LUVDISC, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.BELDUM, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGICE, - Species.REGISTEEL, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.JIRACHI, - Species.DEOXYS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.STARLY, - Species.STARAVIA, - Species.STARAPTOR, - Species.BIDOOF, - Species.BIBAREL, - Species.KRICKETOT, - Species.KRICKETUNE, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.BUDEW, - Species.ROSERADE, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.BURMY, - Species.WORMADAM, - Species.MOTHIM, - Species.COMBEE, - Species.VESPIQUEN, - Species.PACHIRISU, - Species.BUIZEL, - Species.FLOATZEL, - Species.CHERUBI, - Species.CHERRIM, - Species.SHELLOS, - Species.GASTRODON, - Species.AMBIPOM, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.BUNEARY, - Species.LOPUNNY, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.GLAMEOW, - Species.PURUGLY, - Species.CHINGLING, - Species.STUNKY, - Species.SKUNTANK, - Species.BRONZOR, - Species.BRONZONG, - Species.BONSLY, - Species.MIME_JR, - Species.HAPPINY, - Species.CHATOT, - Species.SPIRITOMB, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.HIPPOPOTAS, - Species.HIPPOWDON, - Species.SKORUPI, - Species.DRAPION, - Species.CROAGUNK, - Species.TOXICROAK, - Species.CARNIVINE, - Species.FINNEON, - Species.LUMINEON, - Species.MANTYKE, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.MAGNEZONE, - Species.LICKILICKY, - Species.RHYPERIOR, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.TOGEKISS, - Species.YANMEGA, - Species.LEAFEON, - Species.GLACEON, - Species.GLISCOR, - Species.MAMOSWINE, - Species.PORYGON_Z, - Species.GALLADE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.FROSLASS, - Species.ROTOM, - Species.UXIE, - Species.MESPRIT, - Species.AZELF, - Species.DIALGA, - Species.PALKIA, - Species.HEATRAN, - Species.REGIGIGAS, - Species.GIRATINA, - Species.CRESSELIA, - Species.PHIONE, - Species.MANAPHY, - Species.DARKRAI, - Species.SHAYMIN, - Species.ARCEUS, - Species.VICTINI, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.PATRAT, - Species.WATCHOG, - Species.LILLIPUP, - Species.HERDIER, - Species.STOUTLAND, - Species.PURRLOIN, - Species.LIEPARD, - Species.PANSAGE, - Species.SIMISAGE, - Species.PANSEAR, - Species.SIMISEAR, - Species.PANPOUR, - Species.SIMIPOUR, - Species.MUNNA, - Species.MUSHARNA, - Species.PIDOVE, - Species.TRANQUILL, - Species.UNFEZANT, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.ROGGENROLA, - Species.BOLDORE, - Species.GIGALITH, - Species.WOOBAT, - Species.SWOOBAT, - Species.DRILBUR, - Species.EXCADRILL, - Species.AUDINO, - Species.TIMBURR, - Species.GURDURR, - Species.CONKELDURR, - Species.TYMPOLE, - Species.PALPITOAD, - Species.SEISMITOAD, - Species.THROH, - Species.SAWK, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.VENIPEDE, - Species.WHIRLIPEDE, - Species.SCOLIPEDE, - Species.COTTONEE, - Species.WHIMSICOTT, - Species.PETILIL, - Species.LILLIGANT, - Species.BASCULIN, - Species.SANDILE, - Species.KROKOROK, - Species.KROOKODILE, - Species.DARUMAKA, - Species.DARMANITAN, - Species.MARACTUS, - Species.DWEBBLE, - Species.CRUSTLE, - Species.SCRAGGY, - Species.SCRAFTY, - Species.SIGILYPH, - Species.YAMASK, - Species.COFAGRIGUS, - Species.TIRTOUGA, - Species.CARRACOSTA, - Species.ARCHEN, - Species.ARCHEOPS, - Species.TRUBBISH, - Species.GARBODOR, - Species.ZORUA, - Species.ZOROARK, - Species.MINCCINO, - Species.CINCCINO, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.SOLOSIS, - Species.DUOSION, - Species.REUNICLUS, - Species.DUCKLETT, - Species.SWANNA, - Species.VANILLITE, - Species.VANILLISH, - Species.VANILLUXE, - Species.DEERLING, - Species.SAWSBUCK, - Species.EMOLGA, - Species.KARRABLAST, - Species.ESCAVALIER, - Species.FOONGUS, - Species.AMOONGUSS, - Species.FRILLISH, - Species.JELLICENT, - Species.ALOMOMOLA, - Species.JOLTIK, - Species.GALVANTULA, - Species.FERROSEED, - Species.FERROTHORN, - Species.KLINK, - Species.KLANG, - Species.KLINKLANG, - Species.TYNAMO, - Species.EELEKTRIK, - Species.EELEKTROSS, - Species.ELGYEM, - Species.BEHEEYEM, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.SHELMET, - Species.ACCELGOR, - Species.STUNFISK, - Species.MIENFOO, - Species.MIENSHAO, - Species.DRUDDIGON, - Species.GOLETT, - Species.GOLURK, - Species.PAWNIARD, - Species.BISHARP, - Species.BOUFFALANT, - Species.RUFFLET, - Species.BRAVIARY, - Species.VULLABY, - Species.MANDIBUZZ, - Species.HEATMOR, - Species.DURANT, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.LARVESTA, - Species.VOLCARONA, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.TORNADUS, - Species.THUNDURUS, - Species.RESHIRAM, - Species.ZEKROM, - Species.LANDORUS, - Species.KYUREM, - Species.KELDEO, - Species.MELOETTA, - Species.GENESECT, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FENNEKIN, - Species.BRAIXEN, - Species.DELPHOX, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.BUNNELBY, - Species.DIGGERSBY, - Species.FLETCHLING, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.SCATTERBUG, - Species.SPEWPA, - Species.VIVILLON, - Species.LITLEO, - Species.PYROAR, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.PANCHAM, - Species.PANGORO, - Species.FURFROU, - Species.ESPURR, - Species.MEOWSTIC, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.SPRITZEE, - Species.AROMATISSE, - Species.SWIRLIX, - Species.SLURPUFF, - Species.INKAY, - Species.MALAMAR, - Species.BINACLE, - Species.BARBARACLE, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.HELIOPTILE, - Species.HELIOLISK, - Species.TYRUNT, - Species.TYRANTRUM, - Species.AMAURA, - Species.AURORUS, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.CARBINK, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.KLEFKI, - Species.PHANTUMP, - Species.TREVENANT, - Species.PUMPKABOO, - Species.GOURGEIST, - Species.BERGMITE, - Species.AVALUGG, - Species.NOIBAT, - Species.NOIVERN, - Species.XERNEAS, - Species.YVELTAL, - Species.ZYGARDE, - Species.DIANCIE, - Species.HOOPA, - Species.VOLCANION, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.PIKIPEK, - Species.TRUMBEAK, - Species.TOUCANNON, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.WISHIWASHI, - Species.MAREANIE, - Species.TOXAPEX, - Species.MUDBRAY, - Species.MUDSDALE, - Species.DEWPIDER, - Species.ARAQUANID, - Species.FOMANTIS, - Species.LURANTIS, - Species.MORELULL, - Species.SHIINOTIC, - Species.SALANDIT, - Species.SALAZZLE, - Species.STUFFUL, - Species.BEWEAR, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.PASSIMIAN, - Species.WIMPOD, - Species.GOLISOPOD, - Species.SANDYGAST, - Species.PALOSSAND, - Species.TYPE_NULL, - Species.SILVALLY, - Species.MINIOR, - Species.KOMALA, - Species.TURTONATOR, - Species.TOGEDEMARU, - Species.MIMIKYU, - Species.BRUXISH, - Species.DRAMPA, - Species.DHELMISE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.TAPU_KOKO, - Species.TAPU_LELE, - Species.TAPU_BULU, - Species.TAPU_FINI, - Species.SOLGALEO, - Species.LUNALA, - Species.NIHILEGO, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.XURKITREE, - Species.CELESTEELA, - Species.KARTANA, - Species.GUZZLORD, - Species.NECROZMA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.POIPOLE, - Species.NAGANADEL, - Species.STAKATAKA, - Species.BLACEPHALON, - Species.ZERAORA, - Species.MELTAN, - Species.MELMETAL, - Species.ALOLA_RATTATA, - Species.ALOLA_RATICATE, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ALOLA_EXEGGUTOR, - Species.ALOLA_MAROWAK, - Species.ETERNAL_FLOETTE, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.SKWOVET, - Species.GREEDENT, - Species.ROOKIDEE, - Species.CORVISQUIRE, - Species.CORVIKNIGHT, - Species.BLIPBUG, - Species.DOTTLER, - Species.ORBEETLE, - Species.NICKIT, - Species.THIEVUL, - Species.GOSSIFLEUR, - Species.ELDEGOSS, - Species.WOOLOO, - Species.DUBWOOL, - Species.CHEWTLE, - Species.DREDNAW, - Species.YAMPER, - Species.BOLTUND, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.APPLIN, - Species.FLAPPLE, - Species.APPLETUN, - Species.SILICOBRA, - Species.SANDACONDA, - Species.CRAMORANT, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.TOXEL, - Species.TOXTRICITY, - Species.SIZZLIPEDE, - Species.CENTISKORCH, - Species.CLOBBOPUS, - Species.GRAPPLOCT, - Species.SINISTEA, - Species.POLTEAGEIST, - Species.HATENNA, - Species.HATTREM, - Species.HATTERENE, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.OBSTAGOON, - Species.PERRSERKER, - Species.CURSOLA, - Species.SIRFETCHD, - Species.MR_RIME, - Species.RUNERIGUS, - Species.MILCERY, - Species.ALCREMIE, - Species.FALINKS, - Species.PINCURCHIN, - Species.SNOM, - Species.FROSMOTH, - Species.STONJOURNER, - Species.EISCUE, - Species.INDEEDEE, - Species.MORPEKO, - Species.CUFANT, - Species.COPPERAJAH, - Species.DRACOZOLT, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.ARCTOVISH, - Species.DURALUDON, - Species.DREEPY, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.ETERNATUS, - Species.KUBFU, - Species.URSHIFU, - Species.ZARUDE, - Species.REGIELEKI, - Species.REGIDRAGO, - Species.GLASTRIER, - Species.SPECTRIER, - Species.CALYREX, - Species.WYRDEER, - Species.KLEAVOR, - Species.URSALUNA, - Species.BASCULEGION, - Species.SNEASLER, - Species.OVERQWIL, - Species.ENAMORUS, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.LECHONK, - Species.OINKOLOGNE, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.NYMBLE, - Species.LOKIX, - Species.PAWMI, - Species.PAWMO, - Species.PAWMOT, - Species.TANDEMAUS, - Species.MAUSHOLD, - Species.FIDOUGH, - Species.DACHSBUN, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.SQUAWKABILLY, - Species.NACLI, - Species.NACLSTACK, - Species.GARGANACL, - Species.CHARCADET, - Species.ARMAROUGE, - Species.CERULEDGE, - Species.TADBULB, - Species.BELLIBOLT, - Species.WATTREL, - Species.KILOWATTREL, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.SHROODLE, - Species.GRAFAIAI, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.KLAWF, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.RELLOR, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.WIGLETT, - Species.WUGTRIO, - Species.BOMBIRDIER, - Species.FINIZEN, - Species.PALAFIN, - Species.VAROOM, - Species.REVAVROOM, - Species.CYCLIZAR, - Species.ORTHWORM, - Species.GLIMMET, - Species.GLIMMORA, - Species.GREAVARD, - Species.HOUNDSTONE, - Species.FLAMIGO, - Species.CETODDLE, - Species.CETITAN, - Species.VELUZA, - Species.DONDOZO, - Species.TATSUGIRI, - Species.ANNIHILAPE, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.DUDUNSPARCE, - Species.KINGAMBIT, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.BRUTE_BONNET, - Species.FLUTTER_MANE, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_BUNDLE, - Species.IRON_HANDS, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.IRON_THORNS, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.GIMMIGHOUL, - Species.GHOLDENGO, - Species.WO_CHIEN, - Species.CHIEN_PAO, - Species.TING_LU, - Species.CHI_YU, - Species.ROARING_MOON, - Species.IRON_VALIANT, - Species.KORAIDON, - Species.MIRAIDON, - Species.WALKING_WAKE, - Species.IRON_LEAVES, - Species.DIPPLIN, - Species.POLTCHAGEIST, - Species.SINISTCHA, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.FEZANDIPITI, - Species.OGERPON, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.PECHARUNT, - Species.GALAR_MEOWTH, - Species.GALAR_PONYTA, - Species.GALAR_RAPIDASH, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_FARFETCHD, - Species.GALAR_WEEZING, - Species.GALAR_MR_MIME, - Species.GALAR_ARTICUNO, - Species.GALAR_ZAPDOS, - Species.GALAR_MOLTRES, - Species.GALAR_SLOWKING, - Species.GALAR_CORSOLA, - Species.GALAR_ZIGZAGOON, - Species.GALAR_LINOONE, - Species.GALAR_DARUMAKA, - Species.GALAR_DARMANITAN, - Species.GALAR_YAMASK, - Species.GALAR_STUNFISK, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_VOLTORB, - Species.HISUI_ELECTRODE, - Species.HISUI_TYPHLOSION, - Species.HISUI_QWILFISH, - Species.HISUI_SNEASEL, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_BRAVIARY, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, - Species.HISUI_DECIDUEYE, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + [MoveId.TERA_BLAST]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.CATERPIE, + SpeciesId.METAPOD, + SpeciesId.BUTTERFREE, + SpeciesId.WEEDLE, + SpeciesId.KAKUNA, + SpeciesId.BEEDRILL, + SpeciesId.PIDGEY, + SpeciesId.PIDGEOTTO, + SpeciesId.PIDGEOT, + SpeciesId.RATTATA, + SpeciesId.RATICATE, + SpeciesId.SPEAROW, + SpeciesId.FEAROW, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.SANDSHREW, + SpeciesId.SANDSLASH, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORINA, + SpeciesId.NIDOQUEEN, + SpeciesId.NIDORAN_M, + SpeciesId.NIDORINO, + SpeciesId.NIDOKING, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.VULPIX, + SpeciesId.NINETALES, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ZUBAT, + SpeciesId.GOLBAT, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.PARAS, + SpeciesId.PARASECT, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.DIGLETT, + SpeciesId.DUGTRIO, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.MANKEY, + SpeciesId.PRIMEAPE, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.ABRA, + SpeciesId.KADABRA, + SpeciesId.ALAKAZAM, + SpeciesId.MACHOP, + SpeciesId.MACHOKE, + SpeciesId.MACHAMP, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.GEODUDE, + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.PONYTA, + SpeciesId.RAPIDASH, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.MAGNEMITE, + SpeciesId.MAGNETON, + SpeciesId.FARFETCHD, + SpeciesId.DODUO, + SpeciesId.DODRIO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.GRIMER, + SpeciesId.MUK, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.GASTLY, + SpeciesId.HAUNTER, + SpeciesId.GENGAR, + SpeciesId.ONIX, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.KRABBY, + SpeciesId.KINGLER, + SpeciesId.VOLTORB, + SpeciesId.ELECTRODE, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.CUBONE, + SpeciesId.MAROWAK, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.LICKITUNG, + SpeciesId.KOFFING, + SpeciesId.WEEZING, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.CHANSEY, + SpeciesId.TANGELA, + SpeciesId.KANGASKHAN, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GOLDEEN, + SpeciesId.SEAKING, + SpeciesId.STARYU, + SpeciesId.STARMIE, + SpeciesId.MR_MIME, + SpeciesId.SCYTHER, + SpeciesId.JYNX, + SpeciesId.ELECTABUZZ, + SpeciesId.MAGMAR, + SpeciesId.PINSIR, + SpeciesId.TAUROS, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.PORYGON, + SpeciesId.OMANYTE, + SpeciesId.OMASTAR, + SpeciesId.KABUTO, + SpeciesId.KABUTOPS, + SpeciesId.AERODACTYL, + SpeciesId.SNORLAX, + SpeciesId.ARTICUNO, + SpeciesId.ZAPDOS, + SpeciesId.MOLTRES, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.HOOTHOOT, + SpeciesId.NOCTOWL, + SpeciesId.LEDYBA, + SpeciesId.LEDIAN, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.CROBAT, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.PICHU, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.TOGEPI, + SpeciesId.TOGETIC, + SpeciesId.NATU, + SpeciesId.XATU, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.POLITOED, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.YANMA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.GLIGAR, + SpeciesId.STEELIX, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.QWILFISH, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.CORSOLA, + SpeciesId.REMORAID, + SpeciesId.OCTILLERY, + SpeciesId.DELIBIRD, + SpeciesId.MANTINE, + SpeciesId.SKARMORY, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.KINGDRA, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.PORYGON2, + SpeciesId.STANTLER, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.SMOOCHUM, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.MILTANK, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.LARVITAR, + SpeciesId.PUPITAR, + SpeciesId.TYRANITAR, + SpeciesId.LUGIA, + SpeciesId.HO_OH, + SpeciesId.CELEBI, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.LINOONE, + SpeciesId.WURMPLE, + SpeciesId.SILCOON, + SpeciesId.BEAUTIFLY, + SpeciesId.CASCOON, + SpeciesId.DUSTOX, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.TAILLOW, + SpeciesId.SWELLOW, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.NINCADA, + SpeciesId.NINJASK, + SpeciesId.SHEDINJA, + SpeciesId.WHISMUR, + SpeciesId.LOUDRED, + SpeciesId.EXPLOUD, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.AZURILL, + SpeciesId.NOSEPASS, + SpeciesId.SKITTY, + SpeciesId.DELCATTY, + SpeciesId.SABLEYE, + SpeciesId.MAWILE, + SpeciesId.ARON, + SpeciesId.LAIRON, + SpeciesId.AGGRON, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ELECTRIKE, + SpeciesId.MANECTRIC, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ROSELIA, + SpeciesId.GULPIN, + SpeciesId.SWALOT, + SpeciesId.CARVANHA, + SpeciesId.SHARPEDO, + SpeciesId.WAILMER, + SpeciesId.WAILORD, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.SPINDA, + SpeciesId.TRAPINCH, + SpeciesId.VIBRAVA, + SpeciesId.FLYGON, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.SOLROCK, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.BALTOY, + SpeciesId.CLAYDOL, + SpeciesId.LILEEP, + SpeciesId.CRADILY, + SpeciesId.ANORITH, + SpeciesId.ARMALDO, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.CASTFORM, + SpeciesId.KECLEON, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.DUSKULL, + SpeciesId.DUSCLOPS, + SpeciesId.TROPIUS, + SpeciesId.CHIMECHO, + SpeciesId.ABSOL, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.SPHEAL, + SpeciesId.SEALEO, + SpeciesId.WALREIN, + SpeciesId.CLAMPERL, + SpeciesId.HUNTAIL, + SpeciesId.GOREBYSS, + SpeciesId.RELICANTH, + SpeciesId.LUVDISC, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.BELDUM, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.STARLY, + SpeciesId.STARAVIA, + SpeciesId.STARAPTOR, + SpeciesId.BIDOOF, + SpeciesId.BIBAREL, + SpeciesId.KRICKETOT, + SpeciesId.KRICKETUNE, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.BUDEW, + SpeciesId.ROSERADE, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.BURMY, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.COMBEE, + SpeciesId.VESPIQUEN, + SpeciesId.PACHIRISU, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.CHERUBI, + SpeciesId.CHERRIM, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.BUNEARY, + SpeciesId.LOPUNNY, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.GLAMEOW, + SpeciesId.PURUGLY, + SpeciesId.CHINGLING, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.BONSLY, + SpeciesId.MIME_JR, + SpeciesId.HAPPINY, + SpeciesId.CHATOT, + SpeciesId.SPIRITOMB, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.HIPPOPOTAS, + SpeciesId.HIPPOWDON, + SpeciesId.SKORUPI, + SpeciesId.DRAPION, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.CARNIVINE, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.MANTYKE, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.MAGNEZONE, + SpeciesId.LICKILICKY, + SpeciesId.RHYPERIOR, + SpeciesId.TANGROWTH, + SpeciesId.ELECTIVIRE, + SpeciesId.MAGMORTAR, + SpeciesId.TOGEKISS, + SpeciesId.YANMEGA, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GLISCOR, + SpeciesId.MAMOSWINE, + SpeciesId.PORYGON_Z, + SpeciesId.GALLADE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.FROSLASS, + SpeciesId.ROTOM, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.AZELF, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.GIRATINA, + SpeciesId.CRESSELIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.DARKRAI, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.VICTINI, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.PATRAT, + SpeciesId.WATCHOG, + SpeciesId.LILLIPUP, + SpeciesId.HERDIER, + SpeciesId.STOUTLAND, + SpeciesId.PURRLOIN, + SpeciesId.LIEPARD, + SpeciesId.PANSAGE, + SpeciesId.SIMISAGE, + SpeciesId.PANSEAR, + SpeciesId.SIMISEAR, + SpeciesId.PANPOUR, + SpeciesId.SIMIPOUR, + SpeciesId.MUNNA, + SpeciesId.MUSHARNA, + SpeciesId.PIDOVE, + SpeciesId.TRANQUILL, + SpeciesId.UNFEZANT, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.ROGGENROLA, + SpeciesId.BOLDORE, + SpeciesId.GIGALITH, + SpeciesId.WOOBAT, + SpeciesId.SWOOBAT, + SpeciesId.DRILBUR, + SpeciesId.EXCADRILL, + SpeciesId.AUDINO, + SpeciesId.TIMBURR, + SpeciesId.GURDURR, + SpeciesId.CONKELDURR, + SpeciesId.TYMPOLE, + SpeciesId.PALPITOAD, + SpeciesId.SEISMITOAD, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.VENIPEDE, + SpeciesId.WHIRLIPEDE, + SpeciesId.SCOLIPEDE, + SpeciesId.COTTONEE, + SpeciesId.WHIMSICOTT, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.BASCULIN, + SpeciesId.SANDILE, + SpeciesId.KROKOROK, + SpeciesId.KROOKODILE, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.MARACTUS, + SpeciesId.DWEBBLE, + SpeciesId.CRUSTLE, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.COFAGRIGUS, + SpeciesId.TIRTOUGA, + SpeciesId.CARRACOSTA, + SpeciesId.ARCHEN, + SpeciesId.ARCHEOPS, + SpeciesId.TRUBBISH, + SpeciesId.GARBODOR, + SpeciesId.ZORUA, + SpeciesId.ZOROARK, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.SOLOSIS, + SpeciesId.DUOSION, + SpeciesId.REUNICLUS, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.VANILLITE, + SpeciesId.VANILLISH, + SpeciesId.VANILLUXE, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.EMOLGA, + SpeciesId.KARRABLAST, + SpeciesId.ESCAVALIER, + SpeciesId.FOONGUS, + SpeciesId.AMOONGUSS, + SpeciesId.FRILLISH, + SpeciesId.JELLICENT, + SpeciesId.ALOMOMOLA, + SpeciesId.JOLTIK, + SpeciesId.GALVANTULA, + SpeciesId.FERROSEED, + SpeciesId.FERROTHORN, + SpeciesId.KLINK, + SpeciesId.KLANG, + SpeciesId.KLINKLANG, + SpeciesId.TYNAMO, + SpeciesId.EELEKTRIK, + SpeciesId.EELEKTROSS, + SpeciesId.ELGYEM, + SpeciesId.BEHEEYEM, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.SHELMET, + SpeciesId.ACCELGOR, + SpeciesId.STUNFISK, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.DRUDDIGON, + SpeciesId.GOLETT, + SpeciesId.GOLURK, + SpeciesId.PAWNIARD, + SpeciesId.BISHARP, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.BRAVIARY, + SpeciesId.VULLABY, + SpeciesId.MANDIBUZZ, + SpeciesId.HEATMOR, + SpeciesId.DURANT, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.TORNADUS, + SpeciesId.THUNDURUS, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.LANDORUS, + SpeciesId.KYUREM, + SpeciesId.KELDEO, + SpeciesId.MELOETTA, + SpeciesId.GENESECT, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FENNEKIN, + SpeciesId.BRAIXEN, + SpeciesId.DELPHOX, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.BUNNELBY, + SpeciesId.DIGGERSBY, + SpeciesId.FLETCHLING, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.SCATTERBUG, + SpeciesId.SPEWPA, + SpeciesId.VIVILLON, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.PANCHAM, + SpeciesId.PANGORO, + SpeciesId.FURFROU, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.HONEDGE, + SpeciesId.DOUBLADE, + SpeciesId.AEGISLASH, + SpeciesId.SPRITZEE, + SpeciesId.AROMATISSE, + SpeciesId.SWIRLIX, + SpeciesId.SLURPUFF, + SpeciesId.INKAY, + SpeciesId.MALAMAR, + SpeciesId.BINACLE, + SpeciesId.BARBARACLE, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.HELIOPTILE, + SpeciesId.HELIOLISK, + SpeciesId.TYRUNT, + SpeciesId.TYRANTRUM, + SpeciesId.AMAURA, + SpeciesId.AURORUS, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.CARBINK, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.KLEFKI, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.PUMPKABOO, + SpeciesId.GOURGEIST, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.NOIBAT, + SpeciesId.NOIVERN, + SpeciesId.XERNEAS, + SpeciesId.YVELTAL, + SpeciesId.ZYGARDE, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.PIKIPEK, + SpeciesId.TRUMBEAK, + SpeciesId.TOUCANNON, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.WISHIWASHI, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.MUDBRAY, + SpeciesId.MUDSDALE, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.MORELULL, + SpeciesId.SHIINOTIC, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.STUFFUL, + SpeciesId.BEWEAR, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.WIMPOD, + SpeciesId.GOLISOPOD, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.TYPE_NULL, + SpeciesId.SILVALLY, + SpeciesId.MINIOR, + SpeciesId.KOMALA, + SpeciesId.TURTONATOR, + SpeciesId.TOGEDEMARU, + SpeciesId.MIMIKYU, + SpeciesId.BRUXISH, + SpeciesId.DRAMPA, + SpeciesId.DHELMISE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.TAPU_KOKO, + SpeciesId.TAPU_LELE, + SpeciesId.TAPU_BULU, + SpeciesId.TAPU_FINI, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.NIHILEGO, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.XURKITREE, + SpeciesId.CELESTEELA, + SpeciesId.KARTANA, + SpeciesId.GUZZLORD, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.STAKATAKA, + SpeciesId.BLACEPHALON, + SpeciesId.ZERAORA, + SpeciesId.MELTAN, + SpeciesId.MELMETAL, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_RATICATE, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_DUGTRIO, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.ALOLA_MUK, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.ALOLA_MAROWAK, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.ROOKIDEE, + SpeciesId.CORVISQUIRE, + SpeciesId.CORVIKNIGHT, + SpeciesId.BLIPBUG, + SpeciesId.DOTTLER, + SpeciesId.ORBEETLE, + SpeciesId.NICKIT, + SpeciesId.THIEVUL, + SpeciesId.GOSSIFLEUR, + SpeciesId.ELDEGOSS, + SpeciesId.WOOLOO, + SpeciesId.DUBWOOL, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.YAMPER, + SpeciesId.BOLTUND, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.APPLIN, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.TOXEL, + SpeciesId.TOXTRICITY, + SpeciesId.SIZZLIPEDE, + SpeciesId.CENTISKORCH, + SpeciesId.CLOBBOPUS, + SpeciesId.GRAPPLOCT, + SpeciesId.SINISTEA, + SpeciesId.POLTEAGEIST, + SpeciesId.HATENNA, + SpeciesId.HATTREM, + SpeciesId.HATTERENE, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.OBSTAGOON, + SpeciesId.PERRSERKER, + SpeciesId.CURSOLA, + SpeciesId.SIRFETCHD, + SpeciesId.MR_RIME, + SpeciesId.RUNERIGUS, + SpeciesId.MILCERY, + SpeciesId.ALCREMIE, + SpeciesId.FALINKS, + SpeciesId.PINCURCHIN, + SpeciesId.SNOM, + SpeciesId.FROSMOTH, + SpeciesId.STONJOURNER, + SpeciesId.EISCUE, + SpeciesId.INDEEDEE, + SpeciesId.MORPEKO, + SpeciesId.CUFANT, + SpeciesId.COPPERAJAH, + SpeciesId.DRACOZOLT, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.ARCTOVISH, + SpeciesId.DURALUDON, + SpeciesId.DREEPY, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.ETERNATUS, + SpeciesId.KUBFU, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.REGIELEKI, + SpeciesId.REGIDRAGO, + SpeciesId.GLASTRIER, + SpeciesId.SPECTRIER, + SpeciesId.CALYREX, + SpeciesId.WYRDEER, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.BASCULEGION, + SpeciesId.SNEASLER, + SpeciesId.OVERQWIL, + SpeciesId.ENAMORUS, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.PAWMI, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.TANDEMAUS, + SpeciesId.MAUSHOLD, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.SQUAWKABILLY, + SpeciesId.NACLI, + SpeciesId.NACLSTACK, + SpeciesId.GARGANACL, + SpeciesId.CHARCADET, + SpeciesId.ARMAROUGE, + SpeciesId.CERULEDGE, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.WATTREL, + SpeciesId.KILOWATTREL, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.KLAWF, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.BOMBIRDIER, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.VAROOM, + SpeciesId.REVAVROOM, + SpeciesId.CYCLIZAR, + SpeciesId.ORTHWORM, + SpeciesId.GLIMMET, + SpeciesId.GLIMMORA, + SpeciesId.GREAVARD, + SpeciesId.HOUNDSTONE, + SpeciesId.FLAMIGO, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.VELUZA, + SpeciesId.DONDOZO, + SpeciesId.TATSUGIRI, + SpeciesId.ANNIHILAPE, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.DUDUNSPARCE, + SpeciesId.KINGAMBIT, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.BRUTE_BONNET, + SpeciesId.FLUTTER_MANE, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_THORNS, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.GIMMIGHOUL, + SpeciesId.GHOLDENGO, + SpeciesId.WO_CHIEN, + SpeciesId.CHIEN_PAO, + SpeciesId.TING_LU, + SpeciesId.CHI_YU, + SpeciesId.ROARING_MOON, + SpeciesId.IRON_VALIANT, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.IRON_LEAVES, + SpeciesId.DIPPLIN, + SpeciesId.POLTCHAGEIST, + SpeciesId.SINISTCHA, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, + SpeciesId.OGERPON, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.PECHARUNT, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_RAPIDASH, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_WEEZING, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_ZAPDOS, + SpeciesId.GALAR_MOLTRES, + SpeciesId.GALAR_SLOWKING, + SpeciesId.GALAR_CORSOLA, + SpeciesId.GALAR_ZIGZAGOON, + SpeciesId.GALAR_LINOONE, + SpeciesId.GALAR_DARUMAKA, + SpeciesId.GALAR_DARMANITAN, + SpeciesId.GALAR_YAMASK, + SpeciesId.GALAR_STUNFISK, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_VOLTORB, + SpeciesId.HISUI_ELECTRODE, + SpeciesId.HISUI_TYPHLOSION, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_BRAVIARY, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.ICE_SPINNER]: [ - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.SEEL, - Species.DEWGONG, - Species.SHELLDER, - Species.CLOYSTER, - Species.ARTICUNO, - Species.DRAGONITE, - Species.MEW, - Species.MARILL, - Species.AZUMARILL, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.DELIBIRD, - Species.DONPHAN, - Species.HITMONTOP, - Species.LUDICOLO, - Species.SNORUNT, - Species.GLALIE, - Species.REGICE, - Species.REGISTEEL, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.BUIZEL, - Species.FLOATZEL, - Species.BRONZOR, - Species.BRONZONG, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.FROSLASS, - Species.CINCCINO, - Species.CRYOGONAL, - Species.MIENSHAO, - Species.BERGMITE, - Species.AVALUGG, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.CRABOMINABLE, - Species.MAREANIE, - Species.TOXAPEX, - Species.KOMALA, - Species.MAGEARNA, - Species.DREDNAW, - Species.FROSMOTH, - Species.EISCUE, - Species.QUAQUAVAL, - Species.CYCLIZAR, - Species.CETODDLE, - Species.CETITAN, - Species.DUDUNSPARCE, - Species.GREAT_TUSK, - Species.IRON_TREADS, - Species.IRON_BUNDLE, - Species.CHIEN_PAO, - Species.TERAPAGOS, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, + [MoveId.ICE_SPINNER]: [ + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.ARTICUNO, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.DELIBIRD, + SpeciesId.DONPHAN, + SpeciesId.HITMONTOP, + SpeciesId.LUDICOLO, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.REGICE, + SpeciesId.REGISTEEL, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.FROSLASS, + SpeciesId.CINCCINO, + SpeciesId.CRYOGONAL, + SpeciesId.MIENSHAO, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.CRABOMINABLE, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.KOMALA, + SpeciesId.MAGEARNA, + SpeciesId.DREDNAW, + SpeciesId.FROSMOTH, + SpeciesId.EISCUE, + SpeciesId.QUAQUAVAL, + SpeciesId.CYCLIZAR, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.DUDUNSPARCE, + SpeciesId.GREAT_TUSK, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_BUNDLE, + SpeciesId.CHIEN_PAO, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, [ - Species.URSHIFU, + SpeciesId.URSHIFU, "rapid-strike", ], - Species.HISUI_LILLIGANT, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, ], - [Moves.SNOWSCAPE]: [ - Species.SLOWPOKE, - Species.SLOWBRO, - Species.SEEL, - Species.DEWGONG, - Species.SHELLDER, - Species.CLOYSTER, - Species.CHANSEY, - Species.LAPRAS, - Species.ARTICUNO, - Species.DRAGONITE, - Species.MEW, - Species.MARILL, - Species.AZUMARILL, - Species.WOOPER, - Species.QUAGSIRE, - Species.SLOWKING, - Species.MISDREAVUS, - Species.SNEASEL, - Species.SWINUB, - Species.PILOSWINE, - Species.DELIBIRD, - Species.BLISSEY, - Species.SUICUNE, - Species.WINGULL, - Species.PELIPPER, - Species.SPOINK, - Species.GRUMPIG, - Species.ALTARIA, - Species.SNORUNT, - Species.GLALIE, - Species.LUVDISC, - Species.REGICE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.SHELLOS, - Species.GASTRODON, - Species.MISMAGIUS, - Species.HAPPINY, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.GLACEON, - Species.MAMOSWINE, - Species.FROSLASS, - Species.PALKIA, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.BASCULIN, - Species.ALOMOMOLA, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.TORNADUS, - Species.KYUREM, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.SKRELP, - Species.DRAGALGE, - Species.BERGMITE, - Species.AVALUGG, - Species.DIANCIE, - Species.PRIMARINA, - Species.CRABOMINABLE, - Species.MAGEARNA, - Species.INTELEON, - Species.FROSMOTH, - Species.EISCUE, - Species.GLASTRIER, - Species.BASCULEGION, - Species.CETODDLE, - Species.CETITAN, - Species.VELUZA, - Species.SCREAM_TAIL, - Species.IRON_BUNDLE, - Species.FRIGIBAX, - Species.ARCTIBAX, - Species.BAXCALIBUR, - Species.CHIEN_PAO, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_ARTICUNO, + [MoveId.SNOWSCAPE]: [ + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.CHANSEY, + SpeciesId.LAPRAS, + SpeciesId.ARTICUNO, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.SNEASEL, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.DELIBIRD, + SpeciesId.BLISSEY, + SpeciesId.SUICUNE, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.ALTARIA, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.LUVDISC, + SpeciesId.REGICE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.MISMAGIUS, + SpeciesId.HAPPINY, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.GLACEON, + SpeciesId.MAMOSWINE, + SpeciesId.FROSLASS, + SpeciesId.PALKIA, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.BASCULIN, + SpeciesId.ALOMOMOLA, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.TORNADUS, + SpeciesId.KYUREM, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.DIANCIE, + SpeciesId.PRIMARINA, + SpeciesId.CRABOMINABLE, + SpeciesId.MAGEARNA, + SpeciesId.INTELEON, + SpeciesId.FROSMOTH, + SpeciesId.EISCUE, + SpeciesId.GLASTRIER, + SpeciesId.BASCULEGION, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.VELUZA, + SpeciesId.SCREAM_TAIL, + SpeciesId.IRON_BUNDLE, + SpeciesId.FRIGIBAX, + SpeciesId.ARCTIBAX, + SpeciesId.BAXCALIBUR, + SpeciesId.CHIEN_PAO, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_SANDSLASH, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_ARTICUNO, [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", ], - Species.HISUI_SAMUROTT, - Species.HISUI_ZORUA, - Species.HISUI_ZOROARK, - Species.HISUI_AVALUGG, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_ZORUA, + SpeciesId.HISUI_ZOROARK, + SpeciesId.HISUI_AVALUGG, ], - [Moves.POUNCE]: [ - Species.VENONAT, - Species.VENOMOTH, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.SCYTHER, - Species.MEW, - Species.SPINARAK, - Species.ARIADOS, - Species.YANMA, - Species.PINECO, - Species.FORRETRESS, - Species.DUNSPARCE, - Species.SCIZOR, - Species.HERACROSS, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SHROOMISH, - Species.BRELOOM, - Species.SLAKING, - Species.VOLBEAT, - Species.ILLUMISE, - Species.SEVIPER, - Species.SHUPPET, - Species.BANETTE, - Species.KRICKETUNE, - Species.VESPIQUEN, - Species.YANMEGA, - Species.HEATRAN, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.LARVESTA, - Species.VOLCARONA, - Species.SCATTERBUG, - Species.SPEWPA, - Species.VIVILLON, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.GRUBBIN, - Species.CHARJABUG, - Species.VIKAVOLT, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.MAREANIE, - Species.TOXAPEX, - Species.MIMIKYU, - Species.APPLIN, - Species.FLAPPLE, - Species.APPLETUN, - Species.CRAMORANT, - Species.SNOM, - Species.FROSMOTH, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.KLEAVOR, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.NYMBLE, - Species.LOKIX, - Species.SQUAWKABILLY, - Species.SHROODLE, - Species.GRAFAIAI, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.RELLOR, - Species.RABSCA, - Species.FLITTLE, - Species.ESPATHRA, - Species.TINKATINK, - Species.TINKATUFF, - Species.TINKATON, - Species.FLAMIGO, - Species.DUDUNSPARCE, - Species.IRON_MOTH, - Species.DIPPLIN, - Species.HYDRAPPLE, + [MoveId.POUNCE]: [ + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.SCYTHER, + SpeciesId.MEW, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.YANMA, + SpeciesId.PINECO, + SpeciesId.FORRETRESS, + SpeciesId.DUNSPARCE, + SpeciesId.SCIZOR, + SpeciesId.HERACROSS, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SHROOMISH, + SpeciesId.BRELOOM, + SpeciesId.SLAKING, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.SEVIPER, + SpeciesId.SHUPPET, + SpeciesId.BANETTE, + SpeciesId.KRICKETUNE, + SpeciesId.VESPIQUEN, + SpeciesId.YANMEGA, + SpeciesId.HEATRAN, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.SCATTERBUG, + SpeciesId.SPEWPA, + SpeciesId.VIVILLON, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.GRUBBIN, + SpeciesId.CHARJABUG, + SpeciesId.VIKAVOLT, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.MIMIKYU, + SpeciesId.APPLIN, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.CRAMORANT, + SpeciesId.SNOM, + SpeciesId.FROSMOTH, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.KLEAVOR, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.SQUAWKABILLY, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.RELLOR, + SpeciesId.RABSCA, + SpeciesId.FLITTLE, + SpeciesId.ESPATHRA, + SpeciesId.TINKATINK, + SpeciesId.TINKATUFF, + SpeciesId.TINKATON, + SpeciesId.FLAMIGO, + SpeciesId.DUDUNSPARCE, + SpeciesId.IRON_MOTH, + SpeciesId.DIPPLIN, + SpeciesId.HYDRAPPLE, ], - [Moves.TRAILBLAZE]: [ - Species.BULBASAUR, - Species.IVYSAUR, - Species.VENUSAUR, - Species.EKANS, - Species.ARBOK, - Species.PIKACHU, - Species.RAICHU, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.ODDISH, - Species.GLOOM, - Species.VILEPLUME, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.BELLSPROUT, - Species.WEEPINBELL, - Species.VICTREEBEL, - Species.DODRIO, - Species.DROWZEE, - Species.HYPNO, - Species.HITMONCHAN, - Species.CHANSEY, - Species.SCYTHER, - Species.TAUROS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.SNORLAX, - Species.MEWTWO, - Species.MEW, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.SPINARAK, - Species.ARIADOS, - Species.PICHU, - Species.IGGLYBUFF, - Species.MAREEP, - Species.FLAAFFY, - Species.AMPHAROS, - Species.BELLOSSOM, - Species.MARILL, - Species.AZUMARILL, - Species.SUDOWOODO, - Species.HOPPIP, - Species.SKIPLOOM, - Species.JUMPLUFF, - Species.AIPOM, - Species.SUNKERN, - Species.SUNFLORA, - Species.WOOPER, - Species.QUAGSIRE, - Species.ESPEON, - Species.UMBREON, - Species.GIRAFARIG, - Species.SNUBBULL, - Species.GRANBULL, - Species.SCIZOR, - Species.HERACROSS, - Species.SNEASEL, - Species.TEDDIURSA, - Species.URSARING, - Species.SWINUB, - Species.PILOSWINE, - Species.DELIBIRD, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.PHANPY, - Species.DONPHAN, - Species.STANTLER, - Species.ELEKID, - Species.BLISSEY, - Species.RAIKOU, - Species.ENTEI, - Species.SUICUNE, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.POOCHYENA, - Species.MIGHTYENA, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.SEEDOT, - Species.NUZLEAF, - Species.SHIFTRY, - Species.VIGOROTH, - Species.SLAKING, - Species.MEDITITE, - Species.MEDICHAM, - Species.PLUSLE, - Species.MINUN, - Species.VOLBEAT, - Species.ILLUMISE, - Species.NUMEL, - Species.CAMERUPT, - Species.SPOINK, - Species.GRUMPIG, - Species.CACNEA, - Species.CACTURNE, - Species.SWABLU, - Species.ALTARIA, - Species.SEVIPER, - Species.BANETTE, - Species.TROPIUS, - Species.SNORUNT, - Species.GLALIE, - Species.METANG, - Species.METAGROSS, - Species.TURTWIG, - Species.GROTLE, - Species.TORTERRA, - Species.KRICKETUNE, - Species.SHINX, - Species.LUXIO, - Species.LUXRAY, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.SHIELDON, - Species.BASTIODON, - Species.PACHIRISU, - Species.AMBIPOM, - Species.STUNKY, - Species.SKUNTANK, - Species.BONSLY, - Species.MUNCHLAX, - Species.RIOLU, - Species.LUCARIO, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.ELECTIVIRE, - Species.LEAFEON, - Species.GLACEON, - Species.MAMOSWINE, - Species.FROSLASS, - Species.SHAYMIN, - Species.ARCEUS, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.SEWADDLE, - Species.SWADLOON, - Species.LEAVANNY, - Species.PETILIL, - Species.LILLIGANT, - Species.SCRAGGY, - Species.SCRAFTY, - Species.DUCKLETT, - Species.MINCCINO, - Species.CINCCINO, - Species.SWANNA, - Species.DEERLING, - Species.SAWSBUCK, - Species.CHANDELURE, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.CUBCHOO, - Species.BEARTIC, - Species.MIENFOO, - Species.MIENSHAO, - Species.LARVESTA, - Species.VOLCARONA, - Species.CHESPIN, - Species.QUILLADIN, - Species.CHESNAUGHT, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.LITLEO, - Species.PYROAR, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKIDDO, - Species.GOGOAT, - Species.MEOWSTIC, - Species.MALAMAR, - Species.SYLVEON, - Species.HAWLUCHA, - Species.DEDENNE, - Species.PHANTUMP, - Species.TREVENANT, - Species.ROWLET, - Species.DARTRIX, - Species.DECIDUEYE, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.ORICORIO, - Species.CUTIEFLY, - Species.RIBOMBEE, - Species.ROCKRUFF, - Species.LYCANROC, - Species.DEWPIDER, - Species.ARAQUANID, - Species.FOMANTIS, - Species.LURANTIS, - Species.SALANDIT, - Species.SALAZZLE, - Species.BOUNSWEET, - Species.STEENEE, - Species.TSAREENA, - Species.COMFEY, - Species.ORANGURU, - Species.PASSIMIAN, - Species.KOMALA, - Species.MIMIKYU, - Species.GROOKEY, - Species.THWACKEY, - Species.RILLABOOM, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.SKWOVET, - Species.GREEDENT, - Species.FLAPPLE, - Species.APPLETUN, - Species.TOXTRICITY, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.PERRSERKER, - Species.FALINKS, - Species.ZACIAN, - Species.ZAMAZENTA, - Species.URSHIFU, - Species.ZARUDE, - Species.GLASTRIER, - Species.WYRDEER, - Species.KLEAVOR, - Species.URSALUNA, - Species.SNEASLER, - Species.SPRIGATITO, - Species.FLORAGATO, - Species.MEOWSCARADA, - Species.LECHONK, - Species.OINKOLOGNE, - Species.TAROUNTULA, - Species.SPIDOPS, - Species.NYMBLE, - Species.LOKIX, - Species.MAUSHOLD, - Species.FIDOUGH, - Species.DACHSBUN, - Species.SMOLIV, - Species.DOLLIV, - Species.ARBOLIVA, - Species.MASCHIFF, - Species.MABOSSTIFF, - Species.SHROODLE, - Species.GRAFAIAI, - Species.BRAMBLIN, - Species.BRAMBLEGHAST, - Species.TOEDSCOOL, - Species.TOEDSCRUEL, - Species.KLAWF, - Species.CAPSAKID, - Species.SCOVILLAIN, - Species.CYCLIZAR, - Species.CLODSIRE, - Species.FARIGIRAF, - Species.BRUTE_BONNET, - Species.SLITHER_WING, - Species.WO_CHIEN, - Species.IRON_LEAVES, - Species.MUNKIDORI, - Species.OGERPON, - Species.ALOLA_RAICHU, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ETERNAL_FLOETTE, - Species.GALAR_MEOWTH, - Species.GALAR_ZAPDOS, + [MoveId.TRAILBLAZE]: [ + SpeciesId.BULBASAUR, + SpeciesId.IVYSAUR, + SpeciesId.VENUSAUR, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.ODDISH, + SpeciesId.GLOOM, + SpeciesId.VILEPLUME, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.BELLSPROUT, + SpeciesId.WEEPINBELL, + SpeciesId.VICTREEBEL, + SpeciesId.DODRIO, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.HITMONCHAN, + SpeciesId.CHANSEY, + SpeciesId.SCYTHER, + SpeciesId.TAUROS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.SNORLAX, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.SPINARAK, + SpeciesId.ARIADOS, + SpeciesId.PICHU, + SpeciesId.IGGLYBUFF, + SpeciesId.MAREEP, + SpeciesId.FLAAFFY, + SpeciesId.AMPHAROS, + SpeciesId.BELLOSSOM, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.SUDOWOODO, + SpeciesId.HOPPIP, + SpeciesId.SKIPLOOM, + SpeciesId.JUMPLUFF, + SpeciesId.AIPOM, + SpeciesId.SUNKERN, + SpeciesId.SUNFLORA, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.GIRAFARIG, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SCIZOR, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.SWINUB, + SpeciesId.PILOSWINE, + SpeciesId.DELIBIRD, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.PHANPY, + SpeciesId.DONPHAN, + SpeciesId.STANTLER, + SpeciesId.ELEKID, + SpeciesId.BLISSEY, + SpeciesId.RAIKOU, + SpeciesId.ENTEI, + SpeciesId.SUICUNE, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.POOCHYENA, + SpeciesId.MIGHTYENA, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.SEEDOT, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.CACNEA, + SpeciesId.CACTURNE, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.SEVIPER, + SpeciesId.BANETTE, + SpeciesId.TROPIUS, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.TURTWIG, + SpeciesId.GROTLE, + SpeciesId.TORTERRA, + SpeciesId.KRICKETUNE, + SpeciesId.SHINX, + SpeciesId.LUXIO, + SpeciesId.LUXRAY, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.PACHIRISU, + SpeciesId.AMBIPOM, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.BONSLY, + SpeciesId.MUNCHLAX, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.ELECTIVIRE, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.MAMOSWINE, + SpeciesId.FROSLASS, + SpeciesId.SHAYMIN, + SpeciesId.ARCEUS, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.SEWADDLE, + SpeciesId.SWADLOON, + SpeciesId.LEAVANNY, + SpeciesId.PETILIL, + SpeciesId.LILLIGANT, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.DUCKLETT, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.SWANNA, + SpeciesId.DEERLING, + SpeciesId.SAWSBUCK, + SpeciesId.CHANDELURE, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.LARVESTA, + SpeciesId.VOLCARONA, + SpeciesId.CHESPIN, + SpeciesId.QUILLADIN, + SpeciesId.CHESNAUGHT, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.LITLEO, + SpeciesId.PYROAR, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKIDDO, + SpeciesId.GOGOAT, + SpeciesId.MEOWSTIC, + SpeciesId.MALAMAR, + SpeciesId.SYLVEON, + SpeciesId.HAWLUCHA, + SpeciesId.DEDENNE, + SpeciesId.PHANTUMP, + SpeciesId.TREVENANT, + SpeciesId.ROWLET, + SpeciesId.DARTRIX, + SpeciesId.DECIDUEYE, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.RIBOMBEE, + SpeciesId.ROCKRUFF, + SpeciesId.LYCANROC, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.FOMANTIS, + SpeciesId.LURANTIS, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.BOUNSWEET, + SpeciesId.STEENEE, + SpeciesId.TSAREENA, + SpeciesId.COMFEY, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.KOMALA, + SpeciesId.MIMIKYU, + SpeciesId.GROOKEY, + SpeciesId.THWACKEY, + SpeciesId.RILLABOOM, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.SKWOVET, + SpeciesId.GREEDENT, + SpeciesId.FLAPPLE, + SpeciesId.APPLETUN, + SpeciesId.TOXTRICITY, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.PERRSERKER, + SpeciesId.FALINKS, + SpeciesId.ZACIAN, + SpeciesId.ZAMAZENTA, + SpeciesId.URSHIFU, + SpeciesId.ZARUDE, + SpeciesId.GLASTRIER, + SpeciesId.WYRDEER, + SpeciesId.KLEAVOR, + SpeciesId.URSALUNA, + SpeciesId.SNEASLER, + SpeciesId.SPRIGATITO, + SpeciesId.FLORAGATO, + SpeciesId.MEOWSCARADA, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.TAROUNTULA, + SpeciesId.SPIDOPS, + SpeciesId.NYMBLE, + SpeciesId.LOKIX, + SpeciesId.MAUSHOLD, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.SMOLIV, + SpeciesId.DOLLIV, + SpeciesId.ARBOLIVA, + SpeciesId.MASCHIFF, + SpeciesId.MABOSSTIFF, + SpeciesId.SHROODLE, + SpeciesId.GRAFAIAI, + SpeciesId.BRAMBLIN, + SpeciesId.BRAMBLEGHAST, + SpeciesId.TOEDSCOOL, + SpeciesId.TOEDSCRUEL, + SpeciesId.KLAWF, + SpeciesId.CAPSAKID, + SpeciesId.SCOVILLAIN, + SpeciesId.CYCLIZAR, + SpeciesId.CLODSIRE, + SpeciesId.FARIGIRAF, + SpeciesId.BRUTE_BONNET, + SpeciesId.SLITHER_WING, + SpeciesId.WO_CHIEN, + SpeciesId.IRON_LEAVES, + SpeciesId.MUNKIDORI, + SpeciesId.OGERPON, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_ZAPDOS, [ - Species.CALYREX, + SpeciesId.CALYREX, "ice", ], - Species.HISUI_SNEASEL, - Species.HISUI_LILLIGANT, - Species.HISUI_DECIDUEYE, - Species.PALDEA_TAUROS, - Species.PALDEA_WOOPER, - Species.BLOODMOON_URSALUNA, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_DECIDUEYE, + SpeciesId.PALDEA_TAUROS, + SpeciesId.PALDEA_WOOPER, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.CHILLING_WATER]: [ - Species.SQUIRTLE, - Species.WARTORTLE, - Species.BLASTOISE, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.MEOWTH, - Species.PERSIAN, - Species.PSYDUCK, - Species.GOLDUCK, - Species.POLIWAG, - Species.POLIWHIRL, - Species.POLIWRATH, - Species.TENTACOOL, - Species.TENTACRUEL, - Species.SLOWPOKE, - Species.SLOWBRO, - Species.SEEL, - Species.DEWGONG, - Species.SHELLDER, - Species.CLOYSTER, - Species.CHANSEY, - Species.HORSEA, - Species.SEADRA, - Species.GYARADOS, - Species.LAPRAS, - Species.VAPOREON, - Species.SNORLAX, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEWTWO, - Species.MEW, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.SENTRET, - Species.FURRET, - Species.CHINCHOU, - Species.LANTURN, - Species.CLEFFA, - Species.MARILL, - Species.AZUMARILL, - Species.POLITOED, - Species.AIPOM, - Species.WOOPER, - Species.QUAGSIRE, - Species.SLOWKING, - Species.DUNSPARCE, - Species.QWILFISH, - Species.DELIBIRD, - Species.KINGDRA, - Species.BLISSEY, - Species.SUICUNE, - Species.LUGIA, - Species.MUDKIP, - Species.MARSHTOMP, - Species.SWAMPERT, - Species.LOTAD, - Species.LOMBRE, - Species.LUDICOLO, - Species.NUZLEAF, - Species.SHIFTRY, - Species.WINGULL, - Species.PELIPPER, - Species.SURSKIT, - Species.MASQUERAIN, - Species.SLAKOTH, - Species.VIGOROTH, - Species.SLAKING, - Species.MAKUHITA, - Species.HARIYAMA, - Species.VOLBEAT, - Species.SPOINK, - Species.GRUMPIG, - Species.BARBOACH, - Species.WHISCASH, - Species.CORPHISH, - Species.CRAWDAUNT, - Species.FEEBAS, - Species.MILOTIC, - Species.SNORUNT, - Species.GLALIE, - Species.LATIAS, - Species.LATIOS, - Species.KYOGRE, - Species.PIPLUP, - Species.PRINPLUP, - Species.EMPOLEON, - Species.BUIZEL, - Species.FLOATZEL, - Species.SHELLOS, - Species.GASTRODON, - Species.AMBIPOM, - Species.HONCHKROW, - Species.MUNCHLAX, - Species.CROAGUNK, - Species.TOXICROAK, - Species.FINNEON, - Species.LUMINEON, - Species.SNOVER, - Species.ABOMASNOW, - Species.WEAVILE, - Species.GLACEON, - Species.FROSLASS, - Species.PALKIA, - Species.PHIONE, - Species.MANAPHY, - Species.ARCEUS, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.BASCULIN, - Species.MINCCINO, - Species.CINCCINO, - Species.DUCKLETT, - Species.SWANNA, - Species.ALOMOMOLA, - Species.CUBCHOO, - Species.BEARTIC, - Species.CRYOGONAL, - Species.TORNADUS, - Species.KELDEO, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.SKRELP, - Species.DRAGALGE, - Species.CLAUNCHER, - Species.CLAWITZER, - Species.GOOMY, - Species.SLIGGOO, - Species.GOODRA, - Species.BERGMITE, - Species.AVALUGG, - Species.POPPLIO, - Species.BRIONNE, - Species.PRIMARINA, - Species.YUNGOOS, - Species.GUMSHOOS, - Species.CRABRAWLER, - Species.CRABOMINABLE, - Species.MAREANIE, - Species.TOXAPEX, - Species.DEWPIDER, - Species.ARAQUANID, - Species.ORANGURU, - Species.PASSIMIAN, - Species.SANDYGAST, - Species.PALOSSAND, - Species.BRUXISH, - Species.SOBBLE, - Species.DRIZZILE, - Species.INTELEON, - Species.CHEWTLE, - Species.DREDNAW, - Species.CRAMORANT, - Species.ARROKUDA, - Species.BARRASKEWDA, - Species.IMPIDIMP, - Species.MORGREM, - Species.GRIMMSNARL, - Species.PERRSERKER, - Species.PINCURCHIN, - Species.EISCUE, - Species.BASCULEGION, - Species.OVERQWIL, - Species.MEOWSCARADA, - Species.QUAXLY, - Species.QUAXWELL, - Species.QUAQUAVAL, - Species.LECHONK, - Species.OINKOLOGNE, - Species.MAUSHOLD, - Species.TADBULB, - Species.BELLIBOLT, - Species.WIGLETT, - Species.WUGTRIO, - Species.FINIZEN, - Species.PALAFIN, - Species.FLAMIGO, - Species.CETODDLE, - Species.CETITAN, - Species.VELUZA, - Species.DONDOZO, - Species.TATSUGIRI, - Species.CLODSIRE, - Species.DUDUNSPARCE, - Species.IRON_BUNDLE, - Species.WALKING_WAKE, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ETERNAL_FLOETTE, - Species.GALAR_SLOWPOKE, - Species.GALAR_SLOWBRO, - Species.GALAR_SLOWKING, + [MoveId.CHILLING_WATER]: [ + SpeciesId.SQUIRTLE, + SpeciesId.WARTORTLE, + SpeciesId.BLASTOISE, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.MEOWTH, + SpeciesId.PERSIAN, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.POLIWAG, + SpeciesId.POLIWHIRL, + SpeciesId.POLIWRATH, + SpeciesId.TENTACOOL, + SpeciesId.TENTACRUEL, + SpeciesId.SLOWPOKE, + SpeciesId.SLOWBRO, + SpeciesId.SEEL, + SpeciesId.DEWGONG, + SpeciesId.SHELLDER, + SpeciesId.CLOYSTER, + SpeciesId.CHANSEY, + SpeciesId.HORSEA, + SpeciesId.SEADRA, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.VAPOREON, + SpeciesId.SNORLAX, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.SENTRET, + SpeciesId.FURRET, + SpeciesId.CHINCHOU, + SpeciesId.LANTURN, + SpeciesId.CLEFFA, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.POLITOED, + SpeciesId.AIPOM, + SpeciesId.WOOPER, + SpeciesId.QUAGSIRE, + SpeciesId.SLOWKING, + SpeciesId.DUNSPARCE, + SpeciesId.QWILFISH, + SpeciesId.DELIBIRD, + SpeciesId.KINGDRA, + SpeciesId.BLISSEY, + SpeciesId.SUICUNE, + SpeciesId.LUGIA, + SpeciesId.MUDKIP, + SpeciesId.MARSHTOMP, + SpeciesId.SWAMPERT, + SpeciesId.LOTAD, + SpeciesId.LOMBRE, + SpeciesId.LUDICOLO, + SpeciesId.NUZLEAF, + SpeciesId.SHIFTRY, + SpeciesId.WINGULL, + SpeciesId.PELIPPER, + SpeciesId.SURSKIT, + SpeciesId.MASQUERAIN, + SpeciesId.SLAKOTH, + SpeciesId.VIGOROTH, + SpeciesId.SLAKING, + SpeciesId.MAKUHITA, + SpeciesId.HARIYAMA, + SpeciesId.VOLBEAT, + SpeciesId.SPOINK, + SpeciesId.GRUMPIG, + SpeciesId.BARBOACH, + SpeciesId.WHISCASH, + SpeciesId.CORPHISH, + SpeciesId.CRAWDAUNT, + SpeciesId.FEEBAS, + SpeciesId.MILOTIC, + SpeciesId.SNORUNT, + SpeciesId.GLALIE, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.KYOGRE, + SpeciesId.PIPLUP, + SpeciesId.PRINPLUP, + SpeciesId.EMPOLEON, + SpeciesId.BUIZEL, + SpeciesId.FLOATZEL, + SpeciesId.SHELLOS, + SpeciesId.GASTRODON, + SpeciesId.AMBIPOM, + SpeciesId.HONCHKROW, + SpeciesId.MUNCHLAX, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.SNOVER, + SpeciesId.ABOMASNOW, + SpeciesId.WEAVILE, + SpeciesId.GLACEON, + SpeciesId.FROSLASS, + SpeciesId.PALKIA, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.ARCEUS, + SpeciesId.OSHAWOTT, + SpeciesId.DEWOTT, + SpeciesId.SAMUROTT, + SpeciesId.BASCULIN, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.DUCKLETT, + SpeciesId.SWANNA, + SpeciesId.ALOMOMOLA, + SpeciesId.CUBCHOO, + SpeciesId.BEARTIC, + SpeciesId.CRYOGONAL, + SpeciesId.TORNADUS, + SpeciesId.KELDEO, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.SKRELP, + SpeciesId.DRAGALGE, + SpeciesId.CLAUNCHER, + SpeciesId.CLAWITZER, + SpeciesId.GOOMY, + SpeciesId.SLIGGOO, + SpeciesId.GOODRA, + SpeciesId.BERGMITE, + SpeciesId.AVALUGG, + SpeciesId.POPPLIO, + SpeciesId.BRIONNE, + SpeciesId.PRIMARINA, + SpeciesId.YUNGOOS, + SpeciesId.GUMSHOOS, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, + SpeciesId.MAREANIE, + SpeciesId.TOXAPEX, + SpeciesId.DEWPIDER, + SpeciesId.ARAQUANID, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.SANDYGAST, + SpeciesId.PALOSSAND, + SpeciesId.BRUXISH, + SpeciesId.SOBBLE, + SpeciesId.DRIZZILE, + SpeciesId.INTELEON, + SpeciesId.CHEWTLE, + SpeciesId.DREDNAW, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.BARRASKEWDA, + SpeciesId.IMPIDIMP, + SpeciesId.MORGREM, + SpeciesId.GRIMMSNARL, + SpeciesId.PERRSERKER, + SpeciesId.PINCURCHIN, + SpeciesId.EISCUE, + SpeciesId.BASCULEGION, + SpeciesId.OVERQWIL, + SpeciesId.MEOWSCARADA, + SpeciesId.QUAXLY, + SpeciesId.QUAXWELL, + SpeciesId.QUAQUAVAL, + SpeciesId.LECHONK, + SpeciesId.OINKOLOGNE, + SpeciesId.MAUSHOLD, + SpeciesId.TADBULB, + SpeciesId.BELLIBOLT, + SpeciesId.WIGLETT, + SpeciesId.WUGTRIO, + SpeciesId.FINIZEN, + SpeciesId.PALAFIN, + SpeciesId.FLAMIGO, + SpeciesId.CETODDLE, + SpeciesId.CETITAN, + SpeciesId.VELUZA, + SpeciesId.DONDOZO, + SpeciesId.TATSUGIRI, + SpeciesId.CLODSIRE, + SpeciesId.DUDUNSPARCE, + SpeciesId.IRON_BUNDLE, + SpeciesId.WALKING_WAKE, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_NINETALES, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_PERSIAN, + SpeciesId.ETERNAL_FLOETTE, + SpeciesId.GALAR_SLOWPOKE, + SpeciesId.GALAR_SLOWBRO, + SpeciesId.GALAR_SLOWKING, [ - Species.URSHIFU, + SpeciesId.URSHIFU, "rapid-strike", ], - Species.HISUI_QWILFISH, - Species.HISUI_SAMUROTT, - Species.HISUI_SLIGGOO, - Species.HISUI_GOODRA, - Species.HISUI_AVALUGG, + SpeciesId.HISUI_QWILFISH, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_SLIGGOO, + SpeciesId.HISUI_GOODRA, + SpeciesId.HISUI_AVALUGG, [ - Species.PALDEA_TAUROS, + SpeciesId.PALDEA_TAUROS, "aqua", ], - Species.PALDEA_WOOPER, + SpeciesId.PALDEA_WOOPER, ], - [Moves.HARD_PRESS]: [ - Species.GRAVELER, - Species.GOLEM, - Species.SNORLAX, - Species.MEW, - Species.FORRETRESS, - Species.SCIZOR, - Species.TYRANITAR, - Species.SWAMPERT, - Species.SLAKING, - Species.CRAWDAUNT, - Species.METANG, - Species.METAGROSS, - Species.REGIROCK, - Species.REGISTEEL, - Species.TORTERRA, - Species.SHIELDON, - Species.BASTIODON, - Species.BRONZONG, - Species.HIPPOWDON, - Species.ABOMASNOW, - Species.MAGNEZONE, - Species.MAMOSWINE, - Species.PROBOPASS, - Species.DUSKNOIR, - Species.HEATRAN, - Species.REGIGIGAS, - Species.EMBOAR, - Species.CONKELDURR, - Species.BEARTIC, - Species.GOLURK, - Species.CRABOMINABLE, - Species.STONJOURNER, - Species.COPPERAJAH, - Species.URSALUNA, - Species.GARGANACL, - Species.TINKATON, - Species.PALAFIN, - Species.REVAVROOM, - Species.CETITAN, - Species.IRON_TREADS, - Species.IRON_HANDS, - Species.OKIDOGI, - Species.ARCHALUDON, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.HISUI_AVALUGG, - Species.BLOODMOON_URSALUNA, + [MoveId.HARD_PRESS]: [ + SpeciesId.GRAVELER, + SpeciesId.GOLEM, + SpeciesId.SNORLAX, + SpeciesId.MEW, + SpeciesId.FORRETRESS, + SpeciesId.SCIZOR, + SpeciesId.TYRANITAR, + SpeciesId.SWAMPERT, + SpeciesId.SLAKING, + SpeciesId.CRAWDAUNT, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.REGIROCK, + SpeciesId.REGISTEEL, + SpeciesId.TORTERRA, + SpeciesId.SHIELDON, + SpeciesId.BASTIODON, + SpeciesId.BRONZONG, + SpeciesId.HIPPOWDON, + SpeciesId.ABOMASNOW, + SpeciesId.MAGNEZONE, + SpeciesId.MAMOSWINE, + SpeciesId.PROBOPASS, + SpeciesId.DUSKNOIR, + SpeciesId.HEATRAN, + SpeciesId.REGIGIGAS, + SpeciesId.EMBOAR, + SpeciesId.CONKELDURR, + SpeciesId.BEARTIC, + SpeciesId.GOLURK, + SpeciesId.CRABOMINABLE, + SpeciesId.STONJOURNER, + SpeciesId.COPPERAJAH, + SpeciesId.URSALUNA, + SpeciesId.GARGANACL, + SpeciesId.TINKATON, + SpeciesId.PALAFIN, + SpeciesId.REVAVROOM, + SpeciesId.CETITAN, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_HANDS, + SpeciesId.OKIDOGI, + SpeciesId.ARCHALUDON, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.HISUI_AVALUGG, + SpeciesId.BLOODMOON_URSALUNA, ], - [Moves.DRAGON_CHEER]: [ - Species.CHARIZARD, - Species.GYARADOS, - Species.LAPRAS, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.MEW, - Species.AMPHAROS, - Species.SCEPTILE, - Species.FLYGON, - Species.SWABLU, - Species.ALTARIA, - Species.MILOTIC, - Species.BAGON, - Species.SHELGON, - Species.SALAMENCE, - Species.LATIAS, - Species.LATIOS, - Species.RAYQUAZA, - Species.CRANIDOS, - Species.RAMPARDOS, - Species.GIBLE, - Species.GABITE, - Species.GARCHOMP, - Species.AXEW, - Species.FRAXURE, - Species.HAXORUS, - Species.DEINO, - Species.ZWEILOUS, - Species.HYDREIGON, - Species.RESHIRAM, - Species.ZEKROM, - Species.KYUREM, - Species.GOODRA, - Species.NOIVERN, - Species.SALAZZLE, - Species.JANGMO_O, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.DURALUDON, - Species.DRAKLOAK, - Species.DRAGAPULT, - Species.REGIDRAGO, - Species.CYCLIZAR, - Species.TATSUGIRI, - Species.IRON_JUGULIS, - Species.BAXCALIBUR, - Species.ROARING_MOON, - Species.KORAIDON, - Species.MIRAIDON, - Species.WALKING_WAKE, - Species.DIPPLIN, - Species.ARCHALUDON, - Species.HYDRAPPLE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.ALOLA_EXEGGUTOR, - Species.HISUI_GOODRA, + [MoveId.DRAGON_CHEER]: [ + SpeciesId.CHARIZARD, + SpeciesId.GYARADOS, + SpeciesId.LAPRAS, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.MEW, + SpeciesId.AMPHAROS, + SpeciesId.SCEPTILE, + SpeciesId.FLYGON, + SpeciesId.SWABLU, + SpeciesId.ALTARIA, + SpeciesId.MILOTIC, + SpeciesId.BAGON, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.LATIAS, + SpeciesId.LATIOS, + SpeciesId.RAYQUAZA, + SpeciesId.CRANIDOS, + SpeciesId.RAMPARDOS, + SpeciesId.GIBLE, + SpeciesId.GABITE, + SpeciesId.GARCHOMP, + SpeciesId.AXEW, + SpeciesId.FRAXURE, + SpeciesId.HAXORUS, + SpeciesId.DEINO, + SpeciesId.ZWEILOUS, + SpeciesId.HYDREIGON, + SpeciesId.RESHIRAM, + SpeciesId.ZEKROM, + SpeciesId.KYUREM, + SpeciesId.GOODRA, + SpeciesId.NOIVERN, + SpeciesId.SALAZZLE, + SpeciesId.JANGMO_O, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.DURALUDON, + SpeciesId.DRAKLOAK, + SpeciesId.DRAGAPULT, + SpeciesId.REGIDRAGO, + SpeciesId.CYCLIZAR, + SpeciesId.TATSUGIRI, + SpeciesId.IRON_JUGULIS, + SpeciesId.BAXCALIBUR, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.DIPPLIN, + SpeciesId.ARCHALUDON, + SpeciesId.HYDRAPPLE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.HISUI_GOODRA, ], - [Moves.ALLURING_VOICE]: [ - Species.PIKACHU, - Species.RAICHU, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.DEWGONG, - Species.LAPRAS, - Species.EEVEE, - Species.VAPOREON, - Species.JOLTEON, - Species.FLAREON, - Species.MEW, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.MARILL, - Species.AZUMARILL, - Species.ESPEON, - Species.UMBREON, - Species.BLISSEY, - Species.RALTS, - Species.KIRLIA, - Species.GARDEVOIR, - Species.AZURILL, - Species.PLUSLE, - Species.MINUN, - Species.FLYGON, - Species.ALTARIA, - Species.MILOTIC, - Species.LATIAS, - Species.PACHIRISU, - Species.FINNEON, - Species.LUMINEON, - Species.LEAFEON, - Species.GLACEON, - Species.GALLADE, - Species.PHIONE, - Species.MANAPHY, - Species.LILLIGANT, - Species.MINCCINO, - Species.CINCCINO, - Species.SWANNA, - Species.ALOMOMOLA, - Species.MELOETTA, - Species.FLABEBE, - Species.FLOETTE, - Species.FLORGES, - Species.MEOWSTIC, - Species.SYLVEON, - Species.PRIMARINA, - Species.ORICORIO, - Species.RIBOMBEE, - Species.COMFEY, - Species.ALCREMIE, - Species.ENAMORUS, - Species.SKELEDIRGE, - Species.FIDOUGH, - Species.DACHSBUN, - Species.ARBOLIVA, - Species.FEZANDIPITI, - Species.ALOLA_RAICHU, - Species.ETERNAL_FLOETTE, + [MoveId.ALLURING_VOICE]: [ + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.DEWGONG, + SpeciesId.LAPRAS, + SpeciesId.EEVEE, + SpeciesId.VAPOREON, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.MEW, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.MARILL, + SpeciesId.AZUMARILL, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.BLISSEY, + SpeciesId.RALTS, + SpeciesId.KIRLIA, + SpeciesId.GARDEVOIR, + SpeciesId.AZURILL, + SpeciesId.PLUSLE, + SpeciesId.MINUN, + SpeciesId.FLYGON, + SpeciesId.ALTARIA, + SpeciesId.MILOTIC, + SpeciesId.LATIAS, + SpeciesId.PACHIRISU, + SpeciesId.FINNEON, + SpeciesId.LUMINEON, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.GALLADE, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.LILLIGANT, + SpeciesId.MINCCINO, + SpeciesId.CINCCINO, + SpeciesId.SWANNA, + SpeciesId.ALOMOMOLA, + SpeciesId.MELOETTA, + SpeciesId.FLABEBE, + SpeciesId.FLOETTE, + SpeciesId.FLORGES, + SpeciesId.MEOWSTIC, + SpeciesId.SYLVEON, + SpeciesId.PRIMARINA, + SpeciesId.ORICORIO, + SpeciesId.RIBOMBEE, + SpeciesId.COMFEY, + SpeciesId.ALCREMIE, + SpeciesId.ENAMORUS, + SpeciesId.SKELEDIRGE, + SpeciesId.FIDOUGH, + SpeciesId.DACHSBUN, + SpeciesId.ARBOLIVA, + SpeciesId.FEZANDIPITI, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ETERNAL_FLOETTE, [ - Species.INDEEDEE, + SpeciesId.INDEEDEE, "female", ], ], - [Moves.TEMPER_FLARE]: [ - Species.CHARMANDER, - Species.CHARMELEON, - Species.CHARIZARD, - Species.GROWLITHE, - Species.ARCANINE, - Species.MAGMAR, - Species.GYARADOS, - Species.FLAREON, - Species.MOLTRES, - Species.MEW, - Species.CYNDAQUIL, - Species.QUILAVA, - Species.TYPHLOSION, - Species.SNUBBULL, - Species.GRANBULL, - Species.SLUGMA, - Species.MAGCARGO, - Species.HOUNDOUR, - Species.HOUNDOOM, - Species.MAGBY, - Species.TORCHIC, - Species.COMBUSKEN, - Species.BLAZIKEN, - Species.NUMEL, - Species.CAMERUPT, - Species.TORKOAL, - Species.SHELGON, - Species.SALAMENCE, - Species.CHIMCHAR, - Species.MONFERNO, - Species.INFERNAPE, - Species.DRIFLOON, - Species.DRIFBLIM, - Species.STUNKY, - Species.SKUNTANK, - Species.RHYPERIOR, - Species.MAGMORTAR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.LITWICK, - Species.LAMPENT, - Species.CHANDELURE, - Species.FLETCHINDER, - Species.TALONFLAME, - Species.PYROAR, - Species.LITTEN, - Species.TORRACAT, - Species.INCINEROAR, - Species.TOUCANNON, - Species.SALANDIT, - Species.SALAZZLE, - Species.SCORBUNNY, - Species.RABOOT, - Species.CINDERACE, - Species.ROLYCOLY, - Species.CARKOL, - Species.COALOSSAL, - Species.FUECOCO, - Species.CROCALOR, - Species.SKELEDIRGE, - Species.KLAWF, - Species.SCOVILLAIN, - Species.REVAVROOM, - Species.CYCLIZAR, - Species.GREAT_TUSK, - Species.SLITHER_WING, - Species.CHI_YU, - Species.KORAIDON, - Species.GOUGING_FIRE, - Species.HISUI_GROWLITHE, - Species.HISUI_ARCANINE, - Species.HISUI_TYPHLOSION, + [MoveId.TEMPER_FLARE]: [ + SpeciesId.CHARMANDER, + SpeciesId.CHARMELEON, + SpeciesId.CHARIZARD, + SpeciesId.GROWLITHE, + SpeciesId.ARCANINE, + SpeciesId.MAGMAR, + SpeciesId.GYARADOS, + SpeciesId.FLAREON, + SpeciesId.MOLTRES, + SpeciesId.MEW, + SpeciesId.CYNDAQUIL, + SpeciesId.QUILAVA, + SpeciesId.TYPHLOSION, + SpeciesId.SNUBBULL, + SpeciesId.GRANBULL, + SpeciesId.SLUGMA, + SpeciesId.MAGCARGO, + SpeciesId.HOUNDOUR, + SpeciesId.HOUNDOOM, + SpeciesId.MAGBY, + SpeciesId.TORCHIC, + SpeciesId.COMBUSKEN, + SpeciesId.BLAZIKEN, + SpeciesId.NUMEL, + SpeciesId.CAMERUPT, + SpeciesId.TORKOAL, + SpeciesId.SHELGON, + SpeciesId.SALAMENCE, + SpeciesId.CHIMCHAR, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.DRIFLOON, + SpeciesId.DRIFBLIM, + SpeciesId.STUNKY, + SpeciesId.SKUNTANK, + SpeciesId.RHYPERIOR, + SpeciesId.MAGMORTAR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.LITWICK, + SpeciesId.LAMPENT, + SpeciesId.CHANDELURE, + SpeciesId.FLETCHINDER, + SpeciesId.TALONFLAME, + SpeciesId.PYROAR, + SpeciesId.LITTEN, + SpeciesId.TORRACAT, + SpeciesId.INCINEROAR, + SpeciesId.TOUCANNON, + SpeciesId.SALANDIT, + SpeciesId.SALAZZLE, + SpeciesId.SCORBUNNY, + SpeciesId.RABOOT, + SpeciesId.CINDERACE, + SpeciesId.ROLYCOLY, + SpeciesId.CARKOL, + SpeciesId.COALOSSAL, + SpeciesId.FUECOCO, + SpeciesId.CROCALOR, + SpeciesId.SKELEDIRGE, + SpeciesId.KLAWF, + SpeciesId.SCOVILLAIN, + SpeciesId.REVAVROOM, + SpeciesId.CYCLIZAR, + SpeciesId.GREAT_TUSK, + SpeciesId.SLITHER_WING, + SpeciesId.CHI_YU, + SpeciesId.KORAIDON, + SpeciesId.GOUGING_FIRE, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_ARCANINE, + SpeciesId.HISUI_TYPHLOSION, [ - Species.PALDEA_TAUROS, + SpeciesId.PALDEA_TAUROS, "blaze", ], ], - [Moves.SUPERCELL_SLAM]:[ - Species.ELECTRODE, - Species.RHYHORN, - Species.RHYDON, - Species.ELECTABUZZ, - Species.SNORLAX, - Species.ZAPDOS, - Species.MEW, - Species.AMPHAROS, - Species.ELEKID, - Species.RAIKOU, - Species.MANECTRIC, - Species.LUXRAY, - Species.RAMPARDOS, - Species.MAGNEZONE, - Species.RHYPERIOR, - Species.ELECTIVIRE, - Species.PROBOPASS, - Species.ARCEUS, - Species.BLITZLE, - Species.ZEBSTRIKA, - Species.EELEKTROSS, - Species.THUNDURUS, - Species.ZEKROM, - Species.VIKAVOLT, - Species.PINCURCHIN, - Species.COPPERAJAH, - Species.REGIELEKI, - Species.URSALUNA, - Species.PAWMOT, - Species.BELLIBOLT, - Species.KILOWATTREL, - Species.CYCLIZAR, - Species.GREAT_TUSK, - Species.SANDY_SHOCKS, - Species.IRON_TREADS, - Species.IRON_HANDS, - Species.IRON_THORNS, - Species.MIRAIDON, - Species.RAGING_BOLT, - Species.IRON_CROWN, - Species.TERAPAGOS, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.HISUI_ELECTRODE, + [MoveId.SUPERCELL_SLAM]:[ + SpeciesId.ELECTRODE, + SpeciesId.RHYHORN, + SpeciesId.RHYDON, + SpeciesId.ELECTABUZZ, + SpeciesId.SNORLAX, + SpeciesId.ZAPDOS, + SpeciesId.MEW, + SpeciesId.AMPHAROS, + SpeciesId.ELEKID, + SpeciesId.RAIKOU, + SpeciesId.MANECTRIC, + SpeciesId.LUXRAY, + SpeciesId.RAMPARDOS, + SpeciesId.MAGNEZONE, + SpeciesId.RHYPERIOR, + SpeciesId.ELECTIVIRE, + SpeciesId.PROBOPASS, + SpeciesId.ARCEUS, + SpeciesId.BLITZLE, + SpeciesId.ZEBSTRIKA, + SpeciesId.EELEKTROSS, + SpeciesId.THUNDURUS, + SpeciesId.ZEKROM, + SpeciesId.VIKAVOLT, + SpeciesId.PINCURCHIN, + SpeciesId.COPPERAJAH, + SpeciesId.REGIELEKI, + SpeciesId.URSALUNA, + SpeciesId.PAWMOT, + SpeciesId.BELLIBOLT, + SpeciesId.KILOWATTREL, + SpeciesId.CYCLIZAR, + SpeciesId.GREAT_TUSK, + SpeciesId.SANDY_SHOCKS, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_THORNS, + SpeciesId.MIRAIDON, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_CROWN, + SpeciesId.TERAPAGOS, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRAVELER, + SpeciesId.ALOLA_GOLEM, + SpeciesId.HISUI_ELECTRODE, ], - [Moves.PSYCHIC_NOISE]: [ - Species.JIGGLYPUFF, - Species.WIGGLYTUFF, - Species.VENONAT, - Species.VENOMOTH, - Species.PSYDUCK, - Species.GOLDUCK, - Species.SLOWBRO, - Species.GENGAR, - Species.DROWZEE, - Species.HYPNO, - Species.EXEGGCUTE, - Species.EXEGGUTOR, - Species.LAPRAS, - Species.MEWTWO, - Species.MEW, - Species.NOCTOWL, - Species.YANMA, - Species.ESPEON, - Species.MURKROW, - Species.SLOWKING, - Species.MISDREAVUS, - Species.GIRAFARIG, - Species.LUGIA, - Species.GARDEVOIR, - Species.GRUMPIG, - Species.FLYGON, - Species.CHIMECHO, - Species.METANG, - Species.METAGROSS, - Species.LATIOS, - Species.JIRACHI, - Species.DEOXYS, - Species.VESPIQUEN, - Species.MISMAGIUS, - Species.HONCHKROW, - Species.CHINGLING, - Species.BRONZOR, - Species.BRONZONG, - Species.YANMEGA, - Species.UXIE, - Species.MESPRIT, - Species.GOTHITA, - Species.GOTHORITA, - Species.GOTHITELLE, - Species.REUNICLUS, - Species.DELPHOX, - Species.FLORGES, - Species.ESPURR, - Species.MEOWSTIC, - Species.MALAMAR, - Species.TREVENANT, - Species.NOIVERN, - Species.HOOPA, - Species.PRIMARINA, - Species.RIBOMBEE, - Species.ORANGURU, - Species.BRUXISH, - Species.TOXTRICITY, - Species.HATTERENE, - Species.INDEEDEE, - Species.WYRDEER, - Species.RABSCA, - Species.FARIGIRAF, - Species.SCREAM_TAIL, - Species.MUNKIDORI, - Species.IRON_CROWN, - Species.ALOLA_RAICHU, - Species.ALOLA_EXEGGUTOR, - Species.GALAR_ARTICUNO, - Species.GALAR_SLOWKING, - Species.HISUI_BRAVIARY, + [MoveId.PSYCHIC_NOISE]: [ + SpeciesId.JIGGLYPUFF, + SpeciesId.WIGGLYTUFF, + SpeciesId.VENONAT, + SpeciesId.VENOMOTH, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.SLOWBRO, + SpeciesId.GENGAR, + SpeciesId.DROWZEE, + SpeciesId.HYPNO, + SpeciesId.EXEGGCUTE, + SpeciesId.EXEGGUTOR, + SpeciesId.LAPRAS, + SpeciesId.MEWTWO, + SpeciesId.MEW, + SpeciesId.NOCTOWL, + SpeciesId.YANMA, + SpeciesId.ESPEON, + SpeciesId.MURKROW, + SpeciesId.SLOWKING, + SpeciesId.MISDREAVUS, + SpeciesId.GIRAFARIG, + SpeciesId.LUGIA, + SpeciesId.GARDEVOIR, + SpeciesId.GRUMPIG, + SpeciesId.FLYGON, + SpeciesId.CHIMECHO, + SpeciesId.METANG, + SpeciesId.METAGROSS, + SpeciesId.LATIOS, + SpeciesId.JIRACHI, + SpeciesId.DEOXYS, + SpeciesId.VESPIQUEN, + SpeciesId.MISMAGIUS, + SpeciesId.HONCHKROW, + SpeciesId.CHINGLING, + SpeciesId.BRONZOR, + SpeciesId.BRONZONG, + SpeciesId.YANMEGA, + SpeciesId.UXIE, + SpeciesId.MESPRIT, + SpeciesId.GOTHITA, + SpeciesId.GOTHORITA, + SpeciesId.GOTHITELLE, + SpeciesId.REUNICLUS, + SpeciesId.DELPHOX, + SpeciesId.FLORGES, + SpeciesId.ESPURR, + SpeciesId.MEOWSTIC, + SpeciesId.MALAMAR, + SpeciesId.TREVENANT, + SpeciesId.NOIVERN, + SpeciesId.HOOPA, + SpeciesId.PRIMARINA, + SpeciesId.RIBOMBEE, + SpeciesId.ORANGURU, + SpeciesId.BRUXISH, + SpeciesId.TOXTRICITY, + SpeciesId.HATTERENE, + SpeciesId.INDEEDEE, + SpeciesId.WYRDEER, + SpeciesId.RABSCA, + SpeciesId.FARIGIRAF, + SpeciesId.SCREAM_TAIL, + SpeciesId.MUNKIDORI, + SpeciesId.IRON_CROWN, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_EXEGGUTOR, + SpeciesId.GALAR_ARTICUNO, + SpeciesId.GALAR_SLOWKING, + SpeciesId.HISUI_BRAVIARY, ], - [Moves.UPPER_HAND]: [ - Species.PIKACHU, - Species.RAICHU, - Species.POLIWRATH, - Species.HITMONLEE, - Species.HITMONCHAN, - Species.MEW, - Species.AIPOM, - Species.HERACROSS, - Species.SNEASEL, - Species.TYROGUE, - Species.HITMONTOP, - Species.TREECKO, - Species.GROVYLE, - Species.SCEPTILE, - Species.BLAZIKEN, - Species.SHIFTRY, - Species.HARIYAMA, - Species.MEDITITE, - Species.MEDICHAM, - Species.ZANGOOSE, - Species.MONFERNO, - Species.INFERNAPE, - Species.AMBIPOM, - Species.RIOLU, - Species.LUCARIO, - Species.CROAGUNK, - Species.TOXICROAK, - Species.WEAVILE, - Species.GALLADE, - Species.SAMUROTT, - Species.CONKELDURR, - Species.SCRAGGY, - Species.SCRAFTY, - Species.MIENFOO, - Species.MIENSHAO, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.KELDEO, - Species.GRENINJA, - Species.TALONFLAME, - Species.HAWLUCHA, - Species.CRABRAWLER, - Species.CRABOMINABLE, + [MoveId.UPPER_HAND]: [ + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.POLIWRATH, + SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, + SpeciesId.MEW, + SpeciesId.AIPOM, + SpeciesId.HERACROSS, + SpeciesId.SNEASEL, + SpeciesId.TYROGUE, + SpeciesId.HITMONTOP, + SpeciesId.TREECKO, + SpeciesId.GROVYLE, + SpeciesId.SCEPTILE, + SpeciesId.BLAZIKEN, + SpeciesId.SHIFTRY, + SpeciesId.HARIYAMA, + SpeciesId.MEDITITE, + SpeciesId.MEDICHAM, + SpeciesId.ZANGOOSE, + SpeciesId.MONFERNO, + SpeciesId.INFERNAPE, + SpeciesId.AMBIPOM, + SpeciesId.RIOLU, + SpeciesId.LUCARIO, + SpeciesId.CROAGUNK, + SpeciesId.TOXICROAK, + SpeciesId.WEAVILE, + SpeciesId.GALLADE, + SpeciesId.SAMUROTT, + SpeciesId.CONKELDURR, + SpeciesId.SCRAGGY, + SpeciesId.SCRAFTY, + SpeciesId.MIENFOO, + SpeciesId.MIENSHAO, + SpeciesId.COBALION, + SpeciesId.TERRAKION, + SpeciesId.VIRIZION, + SpeciesId.KELDEO, + SpeciesId.GRENINJA, + SpeciesId.TALONFLAME, + SpeciesId.HAWLUCHA, + SpeciesId.CRABRAWLER, + SpeciesId.CRABOMINABLE, [ - Species.LYCANROC, + SpeciesId.LYCANROC, "midnight", ], - Species.PASSIMIAN, - Species.HAKAMO_O, - Species.KOMMO_O, - Species.FALINKS, - Species.SNEASLER, - Species.QUAQUAVAL, - Species.SPIDOPS, - Species.PAWMO, - Species.PAWMOT, - Species.FLAMIGO, - Species.OKIDOGI, - Species.ALOLA_RAICHU, - Species.HISUI_SAMUROTT, - Species.HISUI_LILLIGANT, - Species.HISUI_DECIDUEYE, + SpeciesId.PASSIMIAN, + SpeciesId.HAKAMO_O, + SpeciesId.KOMMO_O, + SpeciesId.FALINKS, + SpeciesId.SNEASLER, + SpeciesId.QUAQUAVAL, + SpeciesId.SPIDOPS, + SpeciesId.PAWMO, + SpeciesId.PAWMOT, + SpeciesId.FLAMIGO, + SpeciesId.OKIDOGI, + SpeciesId.ALOLA_RAICHU, + SpeciesId.HISUI_SAMUROTT, + SpeciesId.HISUI_LILLIGANT, + SpeciesId.HISUI_DECIDUEYE, ], }; interface SpeciesTmMoves { - [key: number]: (Moves | [string | Species, Moves])[]; + [key: number]: (MoveId | [string | SpeciesId, MoveId])[]; } function transposeTmSpecies(): SpeciesTmMoves { @@ -68588,320 +68588,320 @@ interface TmPoolTiers { } export const tmPoolTiers: TmPoolTiers = { - [Moves.MEGA_PUNCH]: ModifierTier.GREAT, - [Moves.PAY_DAY]: ModifierTier.ULTRA, - [Moves.FIRE_PUNCH]: ModifierTier.GREAT, - [Moves.ICE_PUNCH]: ModifierTier.GREAT, - [Moves.THUNDER_PUNCH]: ModifierTier.GREAT, - [Moves.SWORDS_DANCE]: ModifierTier.COMMON, - [Moves.CUT]: ModifierTier.COMMON, - [Moves.FLY]: ModifierTier.COMMON, - [Moves.MEGA_KICK]: ModifierTier.GREAT, - [Moves.BODY_SLAM]: ModifierTier.GREAT, - [Moves.TAKE_DOWN]: ModifierTier.GREAT, - [Moves.DOUBLE_EDGE]: ModifierTier.ULTRA, - [Moves.PIN_MISSILE]: ModifierTier.COMMON, - [Moves.ROAR]: ModifierTier.COMMON, - [Moves.FLAMETHROWER]: ModifierTier.ULTRA, - [Moves.HYDRO_PUMP]: ModifierTier.ULTRA, - [Moves.SURF]: ModifierTier.ULTRA, - [Moves.ICE_BEAM]: ModifierTier.ULTRA, - [Moves.BLIZZARD]: ModifierTier.ULTRA, - [Moves.PSYBEAM]: ModifierTier.GREAT, - [Moves.HYPER_BEAM]: ModifierTier.ULTRA, - [Moves.LOW_KICK]: ModifierTier.COMMON, - [Moves.COUNTER]: ModifierTier.COMMON, - [Moves.STRENGTH]: ModifierTier.GREAT, - [Moves.SOLAR_BEAM]: ModifierTier.ULTRA, - [Moves.FIRE_SPIN]: ModifierTier.COMMON, - [Moves.THUNDERBOLT]: ModifierTier.ULTRA, - [Moves.THUNDER_WAVE]: ModifierTier.COMMON, - [Moves.THUNDER]: ModifierTier.ULTRA, - [Moves.EARTHQUAKE]: ModifierTier.ULTRA, - [Moves.DIG]: ModifierTier.GREAT, - [Moves.TOXIC]: ModifierTier.GREAT, - [Moves.PSYCHIC]: ModifierTier.ULTRA, - [Moves.AGILITY]: ModifierTier.COMMON, - [Moves.NIGHT_SHADE]: ModifierTier.COMMON, - [Moves.SCREECH]: ModifierTier.COMMON, - [Moves.DOUBLE_TEAM]: ModifierTier.COMMON, - [Moves.CONFUSE_RAY]: ModifierTier.COMMON, - [Moves.LIGHT_SCREEN]: ModifierTier.COMMON, - [Moves.HAZE]: ModifierTier.COMMON, - [Moves.REFLECT]: ModifierTier.COMMON, - [Moves.FOCUS_ENERGY]: ModifierTier.COMMON, - [Moves.METRONOME]: ModifierTier.COMMON, - [Moves.SELF_DESTRUCT]: ModifierTier.GREAT, - [Moves.FIRE_BLAST]: ModifierTier.ULTRA, - [Moves.WATERFALL]: ModifierTier.GREAT, - [Moves.SWIFT]: ModifierTier.COMMON, - [Moves.AMNESIA]: ModifierTier.COMMON, - [Moves.DREAM_EATER]: ModifierTier.GREAT, - [Moves.LEECH_LIFE]: ModifierTier.ULTRA, - [Moves.FLASH]: ModifierTier.COMMON, - [Moves.EXPLOSION]: ModifierTier.GREAT, - [Moves.REST]: ModifierTier.COMMON, - [Moves.ROCK_SLIDE]: ModifierTier.GREAT, - [Moves.TRI_ATTACK]: ModifierTier.ULTRA, - [Moves.SUPER_FANG]: ModifierTier.COMMON, - [Moves.SUBSTITUTE]: ModifierTier.COMMON, - [Moves.THIEF]: ModifierTier.GREAT, - [Moves.SNORE]: ModifierTier.COMMON, - [Moves.CURSE]: ModifierTier.COMMON, - [Moves.REVERSAL]: ModifierTier.COMMON, - [Moves.SPITE]: ModifierTier.COMMON, - [Moves.PROTECT]: ModifierTier.COMMON, - [Moves.SCARY_FACE]: ModifierTier.COMMON, - [Moves.SLUDGE_BOMB]: ModifierTier.GREAT, - [Moves.MUD_SLAP]: ModifierTier.COMMON, - [Moves.SPIKES]: ModifierTier.COMMON, - [Moves.ICY_WIND]: ModifierTier.GREAT, - [Moves.OUTRAGE]: ModifierTier.ULTRA, - [Moves.SANDSTORM]: ModifierTier.COMMON, - [Moves.GIGA_DRAIN]: ModifierTier.ULTRA, - [Moves.ENDURE]: ModifierTier.COMMON, - [Moves.CHARM]: ModifierTier.COMMON, - [Moves.FALSE_SWIPE]: ModifierTier.COMMON, - [Moves.SWAGGER]: ModifierTier.COMMON, - [Moves.STEEL_WING]: ModifierTier.GREAT, - [Moves.ATTRACT]: ModifierTier.COMMON, - [Moves.SLEEP_TALK]: ModifierTier.COMMON, - [Moves.HEAL_BELL]: ModifierTier.COMMON, - [Moves.RETURN]: ModifierTier.ULTRA, - [Moves.FRUSTRATION]: ModifierTier.COMMON, - [Moves.SAFEGUARD]: ModifierTier.COMMON, - [Moves.PAIN_SPLIT]: ModifierTier.COMMON, - [Moves.MEGAHORN]: ModifierTier.ULTRA, - [Moves.BATON_PASS]: ModifierTier.COMMON, - [Moves.ENCORE]: ModifierTier.COMMON, - [Moves.IRON_TAIL]: ModifierTier.GREAT, - [Moves.METAL_CLAW]: ModifierTier.COMMON, - [Moves.SYNTHESIS]: ModifierTier.GREAT, - [Moves.HIDDEN_POWER]: ModifierTier.GREAT, - [Moves.RAIN_DANCE]: ModifierTier.COMMON, - [Moves.SUNNY_DAY]: ModifierTier.COMMON, - [Moves.CRUNCH]: ModifierTier.GREAT, - [Moves.PSYCH_UP]: ModifierTier.COMMON, - [Moves.SHADOW_BALL]: ModifierTier.ULTRA, - [Moves.FUTURE_SIGHT]: ModifierTier.GREAT, - [Moves.ROCK_SMASH]: ModifierTier.COMMON, - [Moves.WHIRLPOOL]: ModifierTier.COMMON, - [Moves.BEAT_UP]: ModifierTier.COMMON, - [Moves.UPROAR]: ModifierTier.GREAT, - [Moves.HEAT_WAVE]: ModifierTier.ULTRA, - [Moves.HAIL]: ModifierTier.COMMON, - [Moves.TORMENT]: ModifierTier.COMMON, - [Moves.WILL_O_WISP]: ModifierTier.COMMON, - [Moves.FACADE]: ModifierTier.GREAT, - [Moves.FOCUS_PUNCH]: ModifierTier.COMMON, - [Moves.NATURE_POWER]: ModifierTier.COMMON, - [Moves.CHARGE]: ModifierTier.COMMON, - [Moves.TAUNT]: ModifierTier.COMMON, - [Moves.HELPING_HAND]: ModifierTier.COMMON, - [Moves.TRICK]: ModifierTier.COMMON, - [Moves.SUPERPOWER]: ModifierTier.ULTRA, - [Moves.RECYCLE]: ModifierTier.COMMON, - [Moves.REVENGE]: ModifierTier.GREAT, - [Moves.BRICK_BREAK]: ModifierTier.GREAT, - [Moves.KNOCK_OFF]: ModifierTier.GREAT, - [Moves.ENDEAVOR]: ModifierTier.COMMON, - [Moves.SKILL_SWAP]: ModifierTier.COMMON, - [Moves.IMPRISON]: ModifierTier.COMMON, - [Moves.SECRET_POWER]: ModifierTier.COMMON, - [Moves.DIVE]: ModifierTier.GREAT, - [Moves.FEATHER_DANCE]: ModifierTier.COMMON, - [Moves.BLAZE_KICK]: ModifierTier.GREAT, - [Moves.HYPER_VOICE]: ModifierTier.ULTRA, - [Moves.BLAST_BURN]: ModifierTier.ULTRA, - [Moves.HYDRO_CANNON]: ModifierTier.ULTRA, - [Moves.WEATHER_BALL]: ModifierTier.COMMON, - [Moves.FAKE_TEARS]: ModifierTier.COMMON, - [Moves.AIR_CUTTER]: ModifierTier.GREAT, - [Moves.OVERHEAT]: ModifierTier.ULTRA, - [Moves.ROCK_TOMB]: ModifierTier.GREAT, - [Moves.METAL_SOUND]: ModifierTier.COMMON, - [Moves.COSMIC_POWER]: ModifierTier.COMMON, - [Moves.SIGNAL_BEAM]: ModifierTier.GREAT, - [Moves.SAND_TOMB]: ModifierTier.COMMON, - [Moves.MUDDY_WATER]: ModifierTier.GREAT, - [Moves.BULLET_SEED]: ModifierTier.GREAT, - [Moves.AERIAL_ACE]: ModifierTier.GREAT, - [Moves.ICICLE_SPEAR]: ModifierTier.GREAT, - [Moves.IRON_DEFENSE]: ModifierTier.GREAT, - [Moves.DRAGON_CLAW]: ModifierTier.ULTRA, - [Moves.FRENZY_PLANT]: ModifierTier.ULTRA, - [Moves.BULK_UP]: ModifierTier.COMMON, - [Moves.BOUNCE]: ModifierTier.GREAT, - [Moves.MUD_SHOT]: ModifierTier.GREAT, - [Moves.POISON_TAIL]: ModifierTier.GREAT, - [Moves.COVET]: ModifierTier.GREAT, - [Moves.MAGICAL_LEAF]: ModifierTier.GREAT, - [Moves.CALM_MIND]: ModifierTier.GREAT, - [Moves.LEAF_BLADE]: ModifierTier.ULTRA, - [Moves.DRAGON_DANCE]: ModifierTier.GREAT, - [Moves.ROCK_BLAST]: ModifierTier.GREAT, - [Moves.WATER_PULSE]: ModifierTier.GREAT, - [Moves.ROOST]: ModifierTier.GREAT, - [Moves.GRAVITY]: ModifierTier.COMMON, - [Moves.GYRO_BALL]: ModifierTier.COMMON, - [Moves.BRINE]: ModifierTier.GREAT, - [Moves.PLUCK]: ModifierTier.GREAT, - [Moves.TAILWIND]: ModifierTier.GREAT, - [Moves.U_TURN]: ModifierTier.GREAT, - [Moves.CLOSE_COMBAT]: ModifierTier.ULTRA, - [Moves.PAYBACK]: ModifierTier.COMMON, - [Moves.ASSURANCE]: ModifierTier.COMMON, - [Moves.EMBARGO]: ModifierTier.COMMON, - [Moves.FLING]: ModifierTier.COMMON, - [Moves.GASTRO_ACID]: ModifierTier.GREAT, - [Moves.POWER_SWAP]: ModifierTier.COMMON, - [Moves.GUARD_SWAP]: ModifierTier.COMMON, - [Moves.WORRY_SEED]: ModifierTier.GREAT, - [Moves.TOXIC_SPIKES]: ModifierTier.GREAT, - [Moves.FLARE_BLITZ]: ModifierTier.ULTRA, - [Moves.AURA_SPHERE]: ModifierTier.GREAT, - [Moves.ROCK_POLISH]: ModifierTier.COMMON, - [Moves.POISON_JAB]: ModifierTier.GREAT, - [Moves.DARK_PULSE]: ModifierTier.GREAT, - [Moves.AQUA_TAIL]: ModifierTier.GREAT, - [Moves.SEED_BOMB]: ModifierTier.GREAT, - [Moves.AIR_SLASH]: ModifierTier.GREAT, - [Moves.X_SCISSOR]: ModifierTier.GREAT, - [Moves.BUG_BUZZ]: ModifierTier.GREAT, - [Moves.DRAGON_PULSE]: ModifierTier.GREAT, - [Moves.POWER_GEM]: ModifierTier.GREAT, - [Moves.DRAIN_PUNCH]: ModifierTier.GREAT, - [Moves.VACUUM_WAVE]: ModifierTier.COMMON, - [Moves.FOCUS_BLAST]: ModifierTier.GREAT, - [Moves.ENERGY_BALL]: ModifierTier.GREAT, - [Moves.BRAVE_BIRD]: ModifierTier.ULTRA, - [Moves.EARTH_POWER]: ModifierTier.ULTRA, - [Moves.GIGA_IMPACT]: ModifierTier.GREAT, - [Moves.NASTY_PLOT]: ModifierTier.COMMON, - [Moves.AVALANCHE]: ModifierTier.GREAT, - [Moves.SHADOW_CLAW]: ModifierTier.GREAT, - [Moves.THUNDER_FANG]: ModifierTier.GREAT, - [Moves.ICE_FANG]: ModifierTier.GREAT, - [Moves.FIRE_FANG]: ModifierTier.GREAT, - [Moves.PSYCHO_CUT]: ModifierTier.GREAT, - [Moves.ZEN_HEADBUTT]: ModifierTier.GREAT, - [Moves.FLASH_CANNON]: ModifierTier.GREAT, - [Moves.ROCK_CLIMB]: ModifierTier.GREAT, - [Moves.DEFOG]: ModifierTier.COMMON, - [Moves.TRICK_ROOM]: ModifierTier.COMMON, - [Moves.DRACO_METEOR]: ModifierTier.ULTRA, - [Moves.LEAF_STORM]: ModifierTier.ULTRA, - [Moves.POWER_WHIP]: ModifierTier.ULTRA, - [Moves.CROSS_POISON]: ModifierTier.GREAT, - [Moves.GUNK_SHOT]: ModifierTier.ULTRA, - [Moves.IRON_HEAD]: ModifierTier.GREAT, - [Moves.STONE_EDGE]: ModifierTier.ULTRA, - [Moves.STEALTH_ROCK]: ModifierTier.COMMON, - [Moves.GRASS_KNOT]: ModifierTier.ULTRA, - [Moves.BUG_BITE]: ModifierTier.GREAT, - [Moves.CHARGE_BEAM]: ModifierTier.GREAT, - [Moves.HONE_CLAWS]: ModifierTier.COMMON, - [Moves.WONDER_ROOM]: ModifierTier.COMMON, - [Moves.PSYSHOCK]: ModifierTier.GREAT, - [Moves.VENOSHOCK]: ModifierTier.GREAT, - [Moves.MAGIC_ROOM]: ModifierTier.COMMON, - [Moves.SMACK_DOWN]: ModifierTier.COMMON, - [Moves.SLUDGE_WAVE]: ModifierTier.GREAT, - [Moves.HEAVY_SLAM]: ModifierTier.GREAT, - [Moves.ELECTRO_BALL]: ModifierTier.GREAT, - [Moves.FLAME_CHARGE]: ModifierTier.GREAT, - [Moves.LOW_SWEEP]: ModifierTier.GREAT, - [Moves.ACID_SPRAY]: ModifierTier.COMMON, - [Moves.FOUL_PLAY]: ModifierTier.ULTRA, - [Moves.ROUND]: ModifierTier.COMMON, - [Moves.ECHOED_VOICE]: ModifierTier.COMMON, - [Moves.STORED_POWER]: ModifierTier.COMMON, - [Moves.ALLY_SWITCH]: ModifierTier.COMMON, - [Moves.SCALD]: ModifierTier.GREAT, - [Moves.HEX]: ModifierTier.GREAT, - [Moves.SKY_DROP]: ModifierTier.GREAT, - [Moves.INCINERATE]: ModifierTier.GREAT, - [Moves.QUASH]: ModifierTier.COMMON, - [Moves.ACROBATICS]: ModifierTier.GREAT, - [Moves.RETALIATE]: ModifierTier.GREAT, - [Moves.WATER_PLEDGE]: ModifierTier.GREAT, - [Moves.FIRE_PLEDGE]: ModifierTier.GREAT, - [Moves.GRASS_PLEDGE]: ModifierTier.GREAT, - [Moves.VOLT_SWITCH]: ModifierTier.GREAT, - [Moves.STRUGGLE_BUG]: ModifierTier.COMMON, - [Moves.BULLDOZE]: ModifierTier.GREAT, - [Moves.FROST_BREATH]: ModifierTier.GREAT, - [Moves.DRAGON_TAIL]: ModifierTier.GREAT, - [Moves.WORK_UP]: ModifierTier.COMMON, - [Moves.ELECTROWEB]: ModifierTier.GREAT, - [Moves.WILD_CHARGE]: ModifierTier.GREAT, - [Moves.DRILL_RUN]: ModifierTier.GREAT, - [Moves.RAZOR_SHELL]: ModifierTier.GREAT, - [Moves.HEAT_CRASH]: ModifierTier.GREAT, - [Moves.TAIL_SLAP]: ModifierTier.GREAT, - [Moves.HURRICANE]: ModifierTier.ULTRA, - [Moves.SNARL]: ModifierTier.COMMON, - [Moves.PHANTOM_FORCE]: ModifierTier.ULTRA, - [Moves.PETAL_BLIZZARD]: ModifierTier.GREAT, - [Moves.DISARMING_VOICE]: ModifierTier.GREAT, - [Moves.DRAINING_KISS]: ModifierTier.GREAT, - [Moves.GRASSY_TERRAIN]: ModifierTier.COMMON, - [Moves.MISTY_TERRAIN]: ModifierTier.COMMON, - [Moves.PLAY_ROUGH]: ModifierTier.GREAT, - [Moves.CONFIDE]: ModifierTier.COMMON, - [Moves.MYSTICAL_FIRE]: ModifierTier.GREAT, - [Moves.EERIE_IMPULSE]: ModifierTier.COMMON, - [Moves.VENOM_DRENCH]: ModifierTier.COMMON, - [Moves.ELECTRIC_TERRAIN]: ModifierTier.COMMON, - [Moves.DAZZLING_GLEAM]: ModifierTier.ULTRA, - [Moves.INFESTATION]: ModifierTier.COMMON, - [Moves.POWER_UP_PUNCH]: ModifierTier.GREAT, - [Moves.DARKEST_LARIAT]: ModifierTier.GREAT, - [Moves.HIGH_HORSEPOWER]: ModifierTier.ULTRA, - [Moves.SOLAR_BLADE]: ModifierTier.GREAT, - [Moves.THROAT_CHOP]: ModifierTier.GREAT, - [Moves.POLLEN_PUFF]: ModifierTier.GREAT, - [Moves.PSYCHIC_TERRAIN]: ModifierTier.COMMON, - [Moves.LUNGE]: ModifierTier.GREAT, - [Moves.SPEED_SWAP]: ModifierTier.COMMON, - [Moves.SMART_STRIKE]: ModifierTier.GREAT, - [Moves.BRUTAL_SWING]: ModifierTier.GREAT, - [Moves.AURORA_VEIL]: ModifierTier.COMMON, - [Moves.PSYCHIC_FANGS]: ModifierTier.GREAT, - [Moves.STOMPING_TANTRUM]: ModifierTier.GREAT, - [Moves.LIQUIDATION]: ModifierTier.ULTRA, - [Moves.BODY_PRESS]: ModifierTier.ULTRA, - [Moves.BREAKING_SWIPE]: ModifierTier.GREAT, - [Moves.STEEL_BEAM]: ModifierTier.ULTRA, - [Moves.EXPANDING_FORCE]: ModifierTier.GREAT, - [Moves.STEEL_ROLLER]: ModifierTier.COMMON, - [Moves.SCALE_SHOT]: ModifierTier.ULTRA, - [Moves.METEOR_BEAM]: ModifierTier.GREAT, - [Moves.MISTY_EXPLOSION]: ModifierTier.COMMON, - [Moves.GRASSY_GLIDE]: ModifierTier.COMMON, - [Moves.RISING_VOLTAGE]: ModifierTier.COMMON, - [Moves.TERRAIN_PULSE]: ModifierTier.COMMON, - [Moves.SKITTER_SMACK]: ModifierTier.GREAT, - [Moves.BURNING_JEALOUSY]: ModifierTier.GREAT, - [Moves.LASH_OUT]: ModifierTier.GREAT, - [Moves.POLTERGEIST]: ModifierTier.ULTRA, - [Moves.CORROSIVE_GAS]: ModifierTier.COMMON, - [Moves.COACHING]: ModifierTier.COMMON, - [Moves.FLIP_TURN]: ModifierTier.COMMON, - [Moves.TRIPLE_AXEL]: ModifierTier.COMMON, - [Moves.DUAL_WINGBEAT]: ModifierTier.COMMON, - [Moves.SCORCHING_SANDS]: ModifierTier.GREAT, - [Moves.TERA_BLAST]: ModifierTier.GREAT, - [Moves.ICE_SPINNER]: ModifierTier.GREAT, - [Moves.SNOWSCAPE]: ModifierTier.COMMON, - [Moves.POUNCE]: ModifierTier.COMMON, - [Moves.TRAILBLAZE]: ModifierTier.COMMON, - [Moves.CHILLING_WATER]: ModifierTier.COMMON, - [Moves.HARD_PRESS]: ModifierTier.GREAT, - [Moves.DRAGON_CHEER]: ModifierTier.COMMON, - [Moves.ALLURING_VOICE]: ModifierTier.GREAT, - [Moves.TEMPER_FLARE]: ModifierTier.GREAT, - [Moves.SUPERCELL_SLAM]: ModifierTier.GREAT, - [Moves.PSYCHIC_NOISE]: ModifierTier.GREAT, - [Moves.UPPER_HAND]: ModifierTier.COMMON, + [MoveId.MEGA_PUNCH]: ModifierTier.GREAT, + [MoveId.PAY_DAY]: ModifierTier.ULTRA, + [MoveId.FIRE_PUNCH]: ModifierTier.GREAT, + [MoveId.ICE_PUNCH]: ModifierTier.GREAT, + [MoveId.THUNDER_PUNCH]: ModifierTier.GREAT, + [MoveId.SWORDS_DANCE]: ModifierTier.COMMON, + [MoveId.CUT]: ModifierTier.COMMON, + [MoveId.FLY]: ModifierTier.COMMON, + [MoveId.MEGA_KICK]: ModifierTier.GREAT, + [MoveId.BODY_SLAM]: ModifierTier.GREAT, + [MoveId.TAKE_DOWN]: ModifierTier.GREAT, + [MoveId.DOUBLE_EDGE]: ModifierTier.ULTRA, + [MoveId.PIN_MISSILE]: ModifierTier.COMMON, + [MoveId.ROAR]: ModifierTier.COMMON, + [MoveId.FLAMETHROWER]: ModifierTier.ULTRA, + [MoveId.HYDRO_PUMP]: ModifierTier.ULTRA, + [MoveId.SURF]: ModifierTier.ULTRA, + [MoveId.ICE_BEAM]: ModifierTier.ULTRA, + [MoveId.BLIZZARD]: ModifierTier.ULTRA, + [MoveId.PSYBEAM]: ModifierTier.GREAT, + [MoveId.HYPER_BEAM]: ModifierTier.ULTRA, + [MoveId.LOW_KICK]: ModifierTier.COMMON, + [MoveId.COUNTER]: ModifierTier.COMMON, + [MoveId.STRENGTH]: ModifierTier.GREAT, + [MoveId.SOLAR_BEAM]: ModifierTier.ULTRA, + [MoveId.FIRE_SPIN]: ModifierTier.COMMON, + [MoveId.THUNDERBOLT]: ModifierTier.ULTRA, + [MoveId.THUNDER_WAVE]: ModifierTier.COMMON, + [MoveId.THUNDER]: ModifierTier.ULTRA, + [MoveId.EARTHQUAKE]: ModifierTier.ULTRA, + [MoveId.DIG]: ModifierTier.GREAT, + [MoveId.TOXIC]: ModifierTier.GREAT, + [MoveId.PSYCHIC]: ModifierTier.ULTRA, + [MoveId.AGILITY]: ModifierTier.COMMON, + [MoveId.NIGHT_SHADE]: ModifierTier.COMMON, + [MoveId.SCREECH]: ModifierTier.COMMON, + [MoveId.DOUBLE_TEAM]: ModifierTier.COMMON, + [MoveId.CONFUSE_RAY]: ModifierTier.COMMON, + [MoveId.LIGHT_SCREEN]: ModifierTier.COMMON, + [MoveId.HAZE]: ModifierTier.COMMON, + [MoveId.REFLECT]: ModifierTier.COMMON, + [MoveId.FOCUS_ENERGY]: ModifierTier.COMMON, + [MoveId.METRONOME]: ModifierTier.COMMON, + [MoveId.SELF_DESTRUCT]: ModifierTier.GREAT, + [MoveId.FIRE_BLAST]: ModifierTier.ULTRA, + [MoveId.WATERFALL]: ModifierTier.GREAT, + [MoveId.SWIFT]: ModifierTier.COMMON, + [MoveId.AMNESIA]: ModifierTier.COMMON, + [MoveId.DREAM_EATER]: ModifierTier.GREAT, + [MoveId.LEECH_LIFE]: ModifierTier.ULTRA, + [MoveId.FLASH]: ModifierTier.COMMON, + [MoveId.EXPLOSION]: ModifierTier.GREAT, + [MoveId.REST]: ModifierTier.COMMON, + [MoveId.ROCK_SLIDE]: ModifierTier.GREAT, + [MoveId.TRI_ATTACK]: ModifierTier.ULTRA, + [MoveId.SUPER_FANG]: ModifierTier.COMMON, + [MoveId.SUBSTITUTE]: ModifierTier.COMMON, + [MoveId.THIEF]: ModifierTier.GREAT, + [MoveId.SNORE]: ModifierTier.COMMON, + [MoveId.CURSE]: ModifierTier.COMMON, + [MoveId.REVERSAL]: ModifierTier.COMMON, + [MoveId.SPITE]: ModifierTier.COMMON, + [MoveId.PROTECT]: ModifierTier.COMMON, + [MoveId.SCARY_FACE]: ModifierTier.COMMON, + [MoveId.SLUDGE_BOMB]: ModifierTier.GREAT, + [MoveId.MUD_SLAP]: ModifierTier.COMMON, + [MoveId.SPIKES]: ModifierTier.COMMON, + [MoveId.ICY_WIND]: ModifierTier.GREAT, + [MoveId.OUTRAGE]: ModifierTier.ULTRA, + [MoveId.SANDSTORM]: ModifierTier.COMMON, + [MoveId.GIGA_DRAIN]: ModifierTier.ULTRA, + [MoveId.ENDURE]: ModifierTier.COMMON, + [MoveId.CHARM]: ModifierTier.COMMON, + [MoveId.FALSE_SWIPE]: ModifierTier.COMMON, + [MoveId.SWAGGER]: ModifierTier.COMMON, + [MoveId.STEEL_WING]: ModifierTier.GREAT, + [MoveId.ATTRACT]: ModifierTier.COMMON, + [MoveId.SLEEP_TALK]: ModifierTier.COMMON, + [MoveId.HEAL_BELL]: ModifierTier.COMMON, + [MoveId.RETURN]: ModifierTier.ULTRA, + [MoveId.FRUSTRATION]: ModifierTier.COMMON, + [MoveId.SAFEGUARD]: ModifierTier.COMMON, + [MoveId.PAIN_SPLIT]: ModifierTier.COMMON, + [MoveId.MEGAHORN]: ModifierTier.ULTRA, + [MoveId.BATON_PASS]: ModifierTier.COMMON, + [MoveId.ENCORE]: ModifierTier.COMMON, + [MoveId.IRON_TAIL]: ModifierTier.GREAT, + [MoveId.METAL_CLAW]: ModifierTier.COMMON, + [MoveId.SYNTHESIS]: ModifierTier.GREAT, + [MoveId.HIDDEN_POWER]: ModifierTier.GREAT, + [MoveId.RAIN_DANCE]: ModifierTier.COMMON, + [MoveId.SUNNY_DAY]: ModifierTier.COMMON, + [MoveId.CRUNCH]: ModifierTier.GREAT, + [MoveId.PSYCH_UP]: ModifierTier.COMMON, + [MoveId.SHADOW_BALL]: ModifierTier.ULTRA, + [MoveId.FUTURE_SIGHT]: ModifierTier.GREAT, + [MoveId.ROCK_SMASH]: ModifierTier.COMMON, + [MoveId.WHIRLPOOL]: ModifierTier.COMMON, + [MoveId.BEAT_UP]: ModifierTier.COMMON, + [MoveId.UPROAR]: ModifierTier.GREAT, + [MoveId.HEAT_WAVE]: ModifierTier.ULTRA, + [MoveId.HAIL]: ModifierTier.COMMON, + [MoveId.TORMENT]: ModifierTier.COMMON, + [MoveId.WILL_O_WISP]: ModifierTier.COMMON, + [MoveId.FACADE]: ModifierTier.GREAT, + [MoveId.FOCUS_PUNCH]: ModifierTier.COMMON, + [MoveId.NATURE_POWER]: ModifierTier.COMMON, + [MoveId.CHARGE]: ModifierTier.COMMON, + [MoveId.TAUNT]: ModifierTier.COMMON, + [MoveId.HELPING_HAND]: ModifierTier.COMMON, + [MoveId.TRICK]: ModifierTier.COMMON, + [MoveId.SUPERPOWER]: ModifierTier.ULTRA, + [MoveId.RECYCLE]: ModifierTier.COMMON, + [MoveId.REVENGE]: ModifierTier.GREAT, + [MoveId.BRICK_BREAK]: ModifierTier.GREAT, + [MoveId.KNOCK_OFF]: ModifierTier.GREAT, + [MoveId.ENDEAVOR]: ModifierTier.COMMON, + [MoveId.SKILL_SWAP]: ModifierTier.COMMON, + [MoveId.IMPRISON]: ModifierTier.COMMON, + [MoveId.SECRET_POWER]: ModifierTier.COMMON, + [MoveId.DIVE]: ModifierTier.GREAT, + [MoveId.FEATHER_DANCE]: ModifierTier.COMMON, + [MoveId.BLAZE_KICK]: ModifierTier.GREAT, + [MoveId.HYPER_VOICE]: ModifierTier.ULTRA, + [MoveId.BLAST_BURN]: ModifierTier.ULTRA, + [MoveId.HYDRO_CANNON]: ModifierTier.ULTRA, + [MoveId.WEATHER_BALL]: ModifierTier.COMMON, + [MoveId.FAKE_TEARS]: ModifierTier.COMMON, + [MoveId.AIR_CUTTER]: ModifierTier.GREAT, + [MoveId.OVERHEAT]: ModifierTier.ULTRA, + [MoveId.ROCK_TOMB]: ModifierTier.GREAT, + [MoveId.METAL_SOUND]: ModifierTier.COMMON, + [MoveId.COSMIC_POWER]: ModifierTier.COMMON, + [MoveId.SIGNAL_BEAM]: ModifierTier.GREAT, + [MoveId.SAND_TOMB]: ModifierTier.COMMON, + [MoveId.MUDDY_WATER]: ModifierTier.GREAT, + [MoveId.BULLET_SEED]: ModifierTier.GREAT, + [MoveId.AERIAL_ACE]: ModifierTier.GREAT, + [MoveId.ICICLE_SPEAR]: ModifierTier.GREAT, + [MoveId.IRON_DEFENSE]: ModifierTier.GREAT, + [MoveId.DRAGON_CLAW]: ModifierTier.ULTRA, + [MoveId.FRENZY_PLANT]: ModifierTier.ULTRA, + [MoveId.BULK_UP]: ModifierTier.COMMON, + [MoveId.BOUNCE]: ModifierTier.GREAT, + [MoveId.MUD_SHOT]: ModifierTier.GREAT, + [MoveId.POISON_TAIL]: ModifierTier.GREAT, + [MoveId.COVET]: ModifierTier.GREAT, + [MoveId.MAGICAL_LEAF]: ModifierTier.GREAT, + [MoveId.CALM_MIND]: ModifierTier.GREAT, + [MoveId.LEAF_BLADE]: ModifierTier.ULTRA, + [MoveId.DRAGON_DANCE]: ModifierTier.GREAT, + [MoveId.ROCK_BLAST]: ModifierTier.GREAT, + [MoveId.WATER_PULSE]: ModifierTier.GREAT, + [MoveId.ROOST]: ModifierTier.GREAT, + [MoveId.GRAVITY]: ModifierTier.COMMON, + [MoveId.GYRO_BALL]: ModifierTier.COMMON, + [MoveId.BRINE]: ModifierTier.GREAT, + [MoveId.PLUCK]: ModifierTier.GREAT, + [MoveId.TAILWIND]: ModifierTier.GREAT, + [MoveId.U_TURN]: ModifierTier.GREAT, + [MoveId.CLOSE_COMBAT]: ModifierTier.ULTRA, + [MoveId.PAYBACK]: ModifierTier.COMMON, + [MoveId.ASSURANCE]: ModifierTier.COMMON, + [MoveId.EMBARGO]: ModifierTier.COMMON, + [MoveId.FLING]: ModifierTier.COMMON, + [MoveId.GASTRO_ACID]: ModifierTier.GREAT, + [MoveId.POWER_SWAP]: ModifierTier.COMMON, + [MoveId.GUARD_SWAP]: ModifierTier.COMMON, + [MoveId.WORRY_SEED]: ModifierTier.GREAT, + [MoveId.TOXIC_SPIKES]: ModifierTier.GREAT, + [MoveId.FLARE_BLITZ]: ModifierTier.ULTRA, + [MoveId.AURA_SPHERE]: ModifierTier.GREAT, + [MoveId.ROCK_POLISH]: ModifierTier.COMMON, + [MoveId.POISON_JAB]: ModifierTier.GREAT, + [MoveId.DARK_PULSE]: ModifierTier.GREAT, + [MoveId.AQUA_TAIL]: ModifierTier.GREAT, + [MoveId.SEED_BOMB]: ModifierTier.GREAT, + [MoveId.AIR_SLASH]: ModifierTier.GREAT, + [MoveId.X_SCISSOR]: ModifierTier.GREAT, + [MoveId.BUG_BUZZ]: ModifierTier.GREAT, + [MoveId.DRAGON_PULSE]: ModifierTier.GREAT, + [MoveId.POWER_GEM]: ModifierTier.GREAT, + [MoveId.DRAIN_PUNCH]: ModifierTier.GREAT, + [MoveId.VACUUM_WAVE]: ModifierTier.COMMON, + [MoveId.FOCUS_BLAST]: ModifierTier.GREAT, + [MoveId.ENERGY_BALL]: ModifierTier.GREAT, + [MoveId.BRAVE_BIRD]: ModifierTier.ULTRA, + [MoveId.EARTH_POWER]: ModifierTier.ULTRA, + [MoveId.GIGA_IMPACT]: ModifierTier.GREAT, + [MoveId.NASTY_PLOT]: ModifierTier.COMMON, + [MoveId.AVALANCHE]: ModifierTier.GREAT, + [MoveId.SHADOW_CLAW]: ModifierTier.GREAT, + [MoveId.THUNDER_FANG]: ModifierTier.GREAT, + [MoveId.ICE_FANG]: ModifierTier.GREAT, + [MoveId.FIRE_FANG]: ModifierTier.GREAT, + [MoveId.PSYCHO_CUT]: ModifierTier.GREAT, + [MoveId.ZEN_HEADBUTT]: ModifierTier.GREAT, + [MoveId.FLASH_CANNON]: ModifierTier.GREAT, + [MoveId.ROCK_CLIMB]: ModifierTier.GREAT, + [MoveId.DEFOG]: ModifierTier.COMMON, + [MoveId.TRICK_ROOM]: ModifierTier.COMMON, + [MoveId.DRACO_METEOR]: ModifierTier.ULTRA, + [MoveId.LEAF_STORM]: ModifierTier.ULTRA, + [MoveId.POWER_WHIP]: ModifierTier.ULTRA, + [MoveId.CROSS_POISON]: ModifierTier.GREAT, + [MoveId.GUNK_SHOT]: ModifierTier.ULTRA, + [MoveId.IRON_HEAD]: ModifierTier.GREAT, + [MoveId.STONE_EDGE]: ModifierTier.ULTRA, + [MoveId.STEALTH_ROCK]: ModifierTier.COMMON, + [MoveId.GRASS_KNOT]: ModifierTier.ULTRA, + [MoveId.BUG_BITE]: ModifierTier.GREAT, + [MoveId.CHARGE_BEAM]: ModifierTier.GREAT, + [MoveId.HONE_CLAWS]: ModifierTier.COMMON, + [MoveId.WONDER_ROOM]: ModifierTier.COMMON, + [MoveId.PSYSHOCK]: ModifierTier.GREAT, + [MoveId.VENOSHOCK]: ModifierTier.GREAT, + [MoveId.MAGIC_ROOM]: ModifierTier.COMMON, + [MoveId.SMACK_DOWN]: ModifierTier.COMMON, + [MoveId.SLUDGE_WAVE]: ModifierTier.GREAT, + [MoveId.HEAVY_SLAM]: ModifierTier.GREAT, + [MoveId.ELECTRO_BALL]: ModifierTier.GREAT, + [MoveId.FLAME_CHARGE]: ModifierTier.GREAT, + [MoveId.LOW_SWEEP]: ModifierTier.GREAT, + [MoveId.ACID_SPRAY]: ModifierTier.COMMON, + [MoveId.FOUL_PLAY]: ModifierTier.ULTRA, + [MoveId.ROUND]: ModifierTier.COMMON, + [MoveId.ECHOED_VOICE]: ModifierTier.COMMON, + [MoveId.STORED_POWER]: ModifierTier.COMMON, + [MoveId.ALLY_SWITCH]: ModifierTier.COMMON, + [MoveId.SCALD]: ModifierTier.GREAT, + [MoveId.HEX]: ModifierTier.GREAT, + [MoveId.SKY_DROP]: ModifierTier.GREAT, + [MoveId.INCINERATE]: ModifierTier.GREAT, + [MoveId.QUASH]: ModifierTier.COMMON, + [MoveId.ACROBATICS]: ModifierTier.GREAT, + [MoveId.RETALIATE]: ModifierTier.GREAT, + [MoveId.WATER_PLEDGE]: ModifierTier.GREAT, + [MoveId.FIRE_PLEDGE]: ModifierTier.GREAT, + [MoveId.GRASS_PLEDGE]: ModifierTier.GREAT, + [MoveId.VOLT_SWITCH]: ModifierTier.GREAT, + [MoveId.STRUGGLE_BUG]: ModifierTier.COMMON, + [MoveId.BULLDOZE]: ModifierTier.GREAT, + [MoveId.FROST_BREATH]: ModifierTier.GREAT, + [MoveId.DRAGON_TAIL]: ModifierTier.GREAT, + [MoveId.WORK_UP]: ModifierTier.COMMON, + [MoveId.ELECTROWEB]: ModifierTier.GREAT, + [MoveId.WILD_CHARGE]: ModifierTier.GREAT, + [MoveId.DRILL_RUN]: ModifierTier.GREAT, + [MoveId.RAZOR_SHELL]: ModifierTier.GREAT, + [MoveId.HEAT_CRASH]: ModifierTier.GREAT, + [MoveId.TAIL_SLAP]: ModifierTier.GREAT, + [MoveId.HURRICANE]: ModifierTier.ULTRA, + [MoveId.SNARL]: ModifierTier.COMMON, + [MoveId.PHANTOM_FORCE]: ModifierTier.ULTRA, + [MoveId.PETAL_BLIZZARD]: ModifierTier.GREAT, + [MoveId.DISARMING_VOICE]: ModifierTier.GREAT, + [MoveId.DRAINING_KISS]: ModifierTier.GREAT, + [MoveId.GRASSY_TERRAIN]: ModifierTier.COMMON, + [MoveId.MISTY_TERRAIN]: ModifierTier.COMMON, + [MoveId.PLAY_ROUGH]: ModifierTier.GREAT, + [MoveId.CONFIDE]: ModifierTier.COMMON, + [MoveId.MYSTICAL_FIRE]: ModifierTier.GREAT, + [MoveId.EERIE_IMPULSE]: ModifierTier.COMMON, + [MoveId.VENOM_DRENCH]: ModifierTier.COMMON, + [MoveId.ELECTRIC_TERRAIN]: ModifierTier.COMMON, + [MoveId.DAZZLING_GLEAM]: ModifierTier.ULTRA, + [MoveId.INFESTATION]: ModifierTier.COMMON, + [MoveId.POWER_UP_PUNCH]: ModifierTier.GREAT, + [MoveId.DARKEST_LARIAT]: ModifierTier.GREAT, + [MoveId.HIGH_HORSEPOWER]: ModifierTier.ULTRA, + [MoveId.SOLAR_BLADE]: ModifierTier.GREAT, + [MoveId.THROAT_CHOP]: ModifierTier.GREAT, + [MoveId.POLLEN_PUFF]: ModifierTier.GREAT, + [MoveId.PSYCHIC_TERRAIN]: ModifierTier.COMMON, + [MoveId.LUNGE]: ModifierTier.GREAT, + [MoveId.SPEED_SWAP]: ModifierTier.COMMON, + [MoveId.SMART_STRIKE]: ModifierTier.GREAT, + [MoveId.BRUTAL_SWING]: ModifierTier.GREAT, + [MoveId.AURORA_VEIL]: ModifierTier.COMMON, + [MoveId.PSYCHIC_FANGS]: ModifierTier.GREAT, + [MoveId.STOMPING_TANTRUM]: ModifierTier.GREAT, + [MoveId.LIQUIDATION]: ModifierTier.ULTRA, + [MoveId.BODY_PRESS]: ModifierTier.ULTRA, + [MoveId.BREAKING_SWIPE]: ModifierTier.GREAT, + [MoveId.STEEL_BEAM]: ModifierTier.ULTRA, + [MoveId.EXPANDING_FORCE]: ModifierTier.GREAT, + [MoveId.STEEL_ROLLER]: ModifierTier.COMMON, + [MoveId.SCALE_SHOT]: ModifierTier.ULTRA, + [MoveId.METEOR_BEAM]: ModifierTier.GREAT, + [MoveId.MISTY_EXPLOSION]: ModifierTier.COMMON, + [MoveId.GRASSY_GLIDE]: ModifierTier.COMMON, + [MoveId.RISING_VOLTAGE]: ModifierTier.COMMON, + [MoveId.TERRAIN_PULSE]: ModifierTier.COMMON, + [MoveId.SKITTER_SMACK]: ModifierTier.GREAT, + [MoveId.BURNING_JEALOUSY]: ModifierTier.GREAT, + [MoveId.LASH_OUT]: ModifierTier.GREAT, + [MoveId.POLTERGEIST]: ModifierTier.ULTRA, + [MoveId.CORROSIVE_GAS]: ModifierTier.COMMON, + [MoveId.COACHING]: ModifierTier.COMMON, + [MoveId.FLIP_TURN]: ModifierTier.COMMON, + [MoveId.TRIPLE_AXEL]: ModifierTier.COMMON, + [MoveId.DUAL_WINGBEAT]: ModifierTier.COMMON, + [MoveId.SCORCHING_SANDS]: ModifierTier.GREAT, + [MoveId.TERA_BLAST]: ModifierTier.GREAT, + [MoveId.ICE_SPINNER]: ModifierTier.GREAT, + [MoveId.SNOWSCAPE]: ModifierTier.COMMON, + [MoveId.POUNCE]: ModifierTier.COMMON, + [MoveId.TRAILBLAZE]: ModifierTier.COMMON, + [MoveId.CHILLING_WATER]: ModifierTier.COMMON, + [MoveId.HARD_PRESS]: ModifierTier.GREAT, + [MoveId.DRAGON_CHEER]: ModifierTier.COMMON, + [MoveId.ALLURING_VOICE]: ModifierTier.GREAT, + [MoveId.TEMPER_FLARE]: ModifierTier.GREAT, + [MoveId.SUPERCELL_SLAM]: ModifierTier.GREAT, + [MoveId.PSYCHIC_NOISE]: ModifierTier.GREAT, + [MoveId.UPPER_HAND]: ModifierTier.COMMON, }; diff --git a/src/data/battle-anims.ts b/src/data/battle-anims.ts index f395c3bb832..321d9938b2f 100644 --- a/src/data/battle-anims.ts +++ b/src/data/battle-anims.ts @@ -5,7 +5,7 @@ import { MoveFlags } from "#enums/MoveFlags"; import type Pokemon from "../field/pokemon"; import { type nil, getFrameMs, getEnumKeys, getEnumValues, animationFileName } from "../utils/common"; import type { BattlerIndex } from "../battle"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { SubstituteTag } from "./battler-tags"; import { isNullOrUndefined } from "../utils/common"; import Phaser from "phaser"; @@ -498,7 +498,7 @@ class AnimTimedAddBgEvent extends AnimTimedBgEvent { } } -export const moveAnims = new Map(); +export const moveAnims = new Map(); export const chargeAnims = new Map(); export const commonAnims = new Map(); export const encounterAnims = new Map(); @@ -521,7 +521,7 @@ export function initCommonAnims(): Promise { }); } -export function initMoveAnim(move: Moves): Promise { +export function initMoveAnim(move: MoveId): Promise { return new Promise(resolve => { if (moveAnims.has(move)) { if (moveAnims.get(move) !== null) { @@ -544,12 +544,12 @@ export function initMoveAnim(move: Moves): Promise { moveAnims.set(move, null); const defaultMoveAnim = allMoves[move] instanceof AttackMove - ? Moves.TACKLE + ? MoveId.TACKLE : allMoves[move] instanceof SelfStatusMove - ? Moves.FOCUS_ENERGY - : Moves.TAIL_WHIP; + ? MoveId.FOCUS_ENERGY + : MoveId.TAIL_WHIP; - const fetchAnimAndResolve = (move: Moves) => { + const fetchAnimAndResolve = (move: MoveId) => { globalScene .cachedFetch(`./battle-anims/${animationFileName(move)}.json`) .then(response => { @@ -594,7 +594,7 @@ export function initMoveAnim(move: Moves): Promise { * @param move the move to populate an animation for * @param defaultMoveAnim the move to use as the default animation */ -function useDefaultAnim(move: Moves, defaultMoveAnim: Moves) { +function useDefaultAnim(move: MoveId, defaultMoveAnim: MoveId) { populateMoveAnim(move, moveAnims.get(defaultMoveAnim)); } @@ -606,7 +606,7 @@ function useDefaultAnim(move: Moves, defaultMoveAnim: Moves) { * * @remarks use {@linkcode useDefaultAnim} to use a default animation */ -function logMissingMoveAnim(move: Moves, ...optionalParams: any[]) { +function logMissingMoveAnim(move: MoveId, ...optionalParams: any[]) { const moveName = animationFileName(move); console.warn(`Could not load animation file for move '${moveName}'`, ...optionalParams); } @@ -664,7 +664,7 @@ export function initMoveChargeAnim(chargeAnim: ChargeAnim): Promise { }); } -function populateMoveAnim(move: Moves, animSource: any): void { +function populateMoveAnim(move: MoveId, animSource: any): void { const moveAnim = new AnimConfig(animSource); if (moveAnims.get(move) === null) { moveAnims.set(move, moveAnim); @@ -697,7 +697,7 @@ export async function loadEncounterAnimAssets(startLoad?: boolean): Promise { +export function loadMoveAnimAssets(moveIds: MoveId[], startLoad?: boolean): Promise { return new Promise(resolve => { const moveAnimations = moveIds.flatMap(m => moveAnims.get(m) as AnimConfig); for (const moveId of moveIds) { @@ -1425,9 +1425,9 @@ export class CommonBattleAnim extends BattleAnim { } export class MoveAnim extends BattleAnim { - public move: Moves; + public move: MoveId; - constructor(move: Moves, user: Pokemon, target: BattlerIndex, playOnEmptyField = false) { + constructor(move: MoveId, user: Pokemon, target: BattlerIndex, playOnEmptyField = false) { // Set target to the user pokemon if no target is found to avoid crashes super(user, globalScene.getField()[target] ?? user, playOnEmptyField); @@ -1456,7 +1456,7 @@ export class MoveAnim extends BattleAnim { export class MoveChargeAnim extends MoveAnim { private chargeAnim: ChargeAnim; - constructor(chargeAnim: ChargeAnim, move: Moves, user: Pokemon) { + constructor(chargeAnim: ChargeAnim, move: MoveId, user: Pokemon) { super(move, user, 0); this.chargeAnim = chargeAnim; @@ -1502,8 +1502,8 @@ export async function populateAnims() { const chargeAnimIds = getEnumValues(ChargeAnim) as ChargeAnim[]; const commonNamePattern = /name: (?:Common:)?(Opp )?(.*)/; const moveNameToId = {}; - for (const move of getEnumValues(Moves).slice(1)) { - const moveName = Moves[move].toUpperCase().replace(/\_/g, ""); + for (const move of getEnumValues(MoveId).slice(1)) { + const moveName = MoveId[move].toUpperCase().replace(/\_/g, ""); moveNameToId[moveName] = move; } diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index c284fcd5130..4f263fc152b 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -35,11 +35,11 @@ import type { StatStageChangeCallback } from "#app/phases/stat-stage-change-phas import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import i18next from "#app/plugins/i18n"; import { BooleanHolder, getFrameMs, NumberHolder, toDmgValue } from "#app/utils/common"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { PokemonAnimType } from "#enums/pokemon-anim-type"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { EFFECTIVE_STATS, getStatKey, Stat, type BattleStat, type EffectiveStat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; import { WeatherType } from "#enums/weather-type"; @@ -62,7 +62,7 @@ export class BattlerTag { public tagType: BattlerTagType; public lapseTypes: BattlerTagLapseType[]; public turnCount: number; - public sourceMove: Moves; + public sourceMove: MoveId; public sourceId?: number; public isBatonPassable: boolean; @@ -70,7 +70,7 @@ export class BattlerTag { tagType: BattlerTagType, lapseType: BattlerTagLapseType | BattlerTagLapseType[], turnCount: number, - sourceMove?: Moves, + sourceMove?: MoveId, sourceId?: number, isBatonPassable = false, ) { @@ -143,7 +143,7 @@ export interface TerrainBattlerTag { /** * Base class for tags that restrict the usage of moves. This effect is generally referred to as "disabling" a move - * in-game. This is not to be confused with {@linkcode Moves.DISABLE}. + * in-game. This is not to be confused with {@linkcode MoveId.DISABLE}. * * Descendants can override {@linkcode isMoveRestricted} to restrict moves that * match a condition. A restricted move gets cancelled before it is used. @@ -154,7 +154,7 @@ export abstract class MoveRestrictionBattlerTag extends BattlerTag { tagType: BattlerTagType, lapseType: BattlerTagLapseType | BattlerTagLapseType[], turnCount: number, - sourceMove?: Moves, + sourceMove?: MoveId, sourceId?: number, ) { super(tagType, lapseType, turnCount, sourceMove, sourceId); @@ -183,21 +183,21 @@ export abstract class MoveRestrictionBattlerTag extends BattlerTag { /** * Gets whether this tag is restricting a move. * - * @param move - {@linkcode Moves} ID to check restriction for. + * @param move - {@linkcode MoveId} ID to check restriction for. * @param user - The {@linkcode Pokemon} involved * @returns `true` if the move is restricted by this tag, otherwise `false`. */ - public abstract isMoveRestricted(move: Moves, user?: Pokemon): boolean; + public abstract isMoveRestricted(move: MoveId, user?: Pokemon): boolean; /** * Checks if this tag is restricting a move based on a user's decisions during the target selection phase * - * @param {Moves} _move {@linkcode Moves} move ID to check restriction for + * @param {MoveId} _move {@linkcode MoveId} move ID to check restriction for * @param {Pokemon} _user {@linkcode Pokemon} the user of the above move * @param {Pokemon} _target {@linkcode Pokemon} the target of the above move * @returns {boolean} `false` unless overridden by the child tag */ - isMoveTargetRestricted(_move: Moves, _user: Pokemon, _target: Pokemon): boolean { + isMoveTargetRestricted(_move: MoveId, _user: Pokemon, _target: Pokemon): boolean { return false; } @@ -205,10 +205,10 @@ export abstract class MoveRestrictionBattlerTag extends BattlerTag { * Gets the text to display when the player attempts to select a move that is restricted by this tag. * * @param {Pokemon} pokemon {@linkcode Pokemon} for which the player is attempting to select the restricted move - * @param {Moves} move {@linkcode Moves} ID of the move that is having its selection denied + * @param {MoveId} move {@linkcode MoveId} ID of the move that is having its selection denied * @returns {string} text to display when the player attempts to select the restricted move */ - abstract selectionDeniedText(pokemon: Pokemon, move: Moves): string; + abstract selectionDeniedText(pokemon: Pokemon, move: MoveId): string; /** * Gets the text to display when a move's execution is prevented as a result of the restriction. @@ -216,10 +216,10 @@ export abstract class MoveRestrictionBattlerTag extends BattlerTag { * pokemon first selects a move, then gets outsped by a pokemon using a move that restricts the selected move. * * @param {Pokemon} _pokemon {@linkcode Pokemon} attempting to use the restricted move - * @param {Moves} _move {@linkcode Moves} ID of the move being interrupted + * @param {MoveId} _move {@linkcode MoveId} ID of the move being interrupted * @returns {string} text to display when the move is interrupted */ - interruptedText(_pokemon: Pokemon, _move: Moves): string { + interruptedText(_pokemon: Pokemon, _move: MoveId): string { return ""; } } @@ -235,17 +235,17 @@ export class ThroatChoppedTag extends MoveRestrictionBattlerTag { BattlerTagType.THROAT_CHOPPED, [BattlerTagLapseType.TURN_END, BattlerTagLapseType.PRE_MOVE], 2, - Moves.THROAT_CHOP, + MoveId.THROAT_CHOP, ); } /** - * Checks if a {@linkcode Moves | move} is restricted by Throat Chop. + * Checks if a {@linkcode MoveId | move} is restricted by Throat Chop. * @override - * @param {Moves} move the {@linkcode Moves | move} to check for sound-based restriction + * @param {MoveId} move the {@linkcode MoveId | move} to check for sound-based restriction * @returns true if the move is sound-based */ - override isMoveRestricted(move: Moves): boolean { + override isMoveRestricted(move: MoveId): boolean { return allMoves[move].hasFlag(MoveFlags.SOUND_BASED); } @@ -253,10 +253,10 @@ export class ThroatChoppedTag extends MoveRestrictionBattlerTag { * Shows a message when the player attempts to select a move that is restricted by Throat Chop. * @override * @param {Pokemon} _pokemon the {@linkcode Pokemon} that is attempting to select the restricted move - * @param {Moves} move the {@linkcode Moves | move} that is being restricted + * @param {MoveId} move the {@linkcode MoveId | move} that is being restricted * @returns the message to display when the player attempts to select the restricted move */ - override selectionDeniedText(_pokemon: Pokemon, move: Moves): string { + override selectionDeniedText(_pokemon: Pokemon, move: MoveId): string { return i18next.t("battle:moveCannotBeSelected", { moveName: allMoves[move].name, }); @@ -266,10 +266,10 @@ export class ThroatChoppedTag extends MoveRestrictionBattlerTag { * Shows a message when a move is interrupted by Throat Chop. * @override * @param {Pokemon} pokemon the interrupted {@linkcode Pokemon} - * @param {Moves} _move the {@linkcode Moves | move} that was interrupted + * @param {MoveId} _move the {@linkcode MoveId | move} that was interrupted * @returns the message to display when the move is interrupted */ - override interruptedText(pokemon: Pokemon, _move: Moves): string { + override interruptedText(pokemon: Pokemon, _move: MoveId): string { return i18next.t("battle:throatChopInterruptedMove", { pokemonName: getPokemonNameWithAffix(pokemon), }); @@ -277,25 +277,25 @@ export class ThroatChoppedTag extends MoveRestrictionBattlerTag { } /** - * Tag representing the "disabling" effect performed by {@linkcode Moves.DISABLE} and {@linkcode Abilities.CURSED_BODY}. + * Tag representing the "disabling" effect performed by {@linkcode MoveId.DISABLE} and {@linkcode AbilityId.CURSED_BODY}. * When the tag is added, the last-used move of the tag holder is set as the disabled move. */ export class DisabledTag extends MoveRestrictionBattlerTag { /** The move being disabled. Gets set when {@linkcode onAdd} is called for this tag. */ - private moveId: Moves = Moves.NONE; + private moveId: MoveId = MoveId.NONE; constructor(sourceId: number) { super( BattlerTagType.DISABLED, [BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.TURN_END], 4, - Moves.DISABLE, + MoveId.DISABLE, sourceId, ); } /** @override */ - override isMoveRestricted(move: Moves): boolean { + override isMoveRestricted(move: MoveId): boolean { return move === this.moveId; } @@ -309,7 +309,7 @@ export class DisabledTag extends MoveRestrictionBattlerTag { super.onAdd(pokemon); const move = pokemon.getLastXMoves(-1).find(m => !m.virtual); - if (isNullOrUndefined(move) || move.move === Moves.STRUGGLE || move.move === Moves.NONE) { + if (isNullOrUndefined(move) || move.move === MoveId.STRUGGLE || move.move === MoveId.NONE) { return; } @@ -336,17 +336,17 @@ export class DisabledTag extends MoveRestrictionBattlerTag { } /** @override */ - override selectionDeniedText(_pokemon: Pokemon, move: Moves): string { + override selectionDeniedText(_pokemon: Pokemon, move: MoveId): string { return i18next.t("battle:moveDisabled", { moveName: allMoves[move].name }); } /** * @override * @param {Pokemon} pokemon {@linkcode Pokemon} attempting to use the restricted move - * @param {Moves} move {@linkcode Moves} ID of the move being interrupted + * @param {MoveId} move {@linkcode MoveId} ID of the move being interrupted * @returns {string} text to display when the move is interrupted */ - override interruptedText(pokemon: Pokemon, move: Moves): string { + override interruptedText(pokemon: Pokemon, move: MoveId): string { return i18next.t("battle:disableInterruptedMove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[move].name, @@ -365,14 +365,14 @@ export class DisabledTag extends MoveRestrictionBattlerTag { * @extends MoveRestrictionBattlerTag */ export class GorillaTacticsTag extends MoveRestrictionBattlerTag { - private moveId = Moves.NONE; + private moveId = MoveId.NONE; constructor() { super(BattlerTagType.GORILLA_TACTICS, BattlerTagLapseType.CUSTOM, 0); } /** @override */ - override isMoveRestricted(move: Moves): boolean { + override isMoveRestricted(move: MoveId): boolean { return move !== this.moveId; } @@ -416,10 +416,10 @@ export class GorillaTacticsTag extends MoveRestrictionBattlerTag { * * @override * @param {Pokemon} pokemon n/a - * @param {Moves} _move {@linkcode Moves} ID of the move being denied + * @param {MoveId} _move {@linkcode MoveId} ID of the move being denied * @returns {string} text to display when the move is denied */ - override selectionDeniedText(pokemon: Pokemon, _move: Moves): string { + override selectionDeniedText(pokemon: Pokemon, _move: MoveId): string { return i18next.t("battle:canOnlyUseMove", { moveName: allMoves[this.moveId].name, pokemonName: getPokemonNameWithAffix(pokemon), @@ -429,10 +429,10 @@ export class GorillaTacticsTag extends MoveRestrictionBattlerTag { /** * Gets the last valid move from the pokemon's move history. * @param {Pokemon} pokemon {@linkcode Pokemon} to get the last valid move from - * @returns {Moves | undefined} the last valid move from the pokemon's move history + * @returns {MoveId | undefined} the last valid move from the pokemon's move history */ - getLastValidMove(pokemon: Pokemon): Moves | undefined { - const move = pokemon.getLastXMoves().find(m => m.move !== Moves.NONE && m.move !== Moves.STRUGGLE && !m.virtual); + getLastValidMove(pokemon: Pokemon): MoveId | undefined { + const move = pokemon.getLastXMoves().find(m => m.move !== MoveId.NONE && m.move !== MoveId.STRUGGLE && !m.virtual); return move?.move; } @@ -442,7 +442,7 @@ export class GorillaTacticsTag extends MoveRestrictionBattlerTag { * BattlerTag that represents the "recharge" effects of moves like Hyper Beam. */ export class RechargingTag extends BattlerTag { - constructor(sourceMove: Moves) { + constructor(sourceMove: MoveId) { super(BattlerTagType.RECHARGING, [BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.TURN_END], 2, sourceMove); } @@ -450,7 +450,7 @@ export class RechargingTag extends BattlerTag { super.onAdd(pokemon); // Queue a placeholder move for the Pokemon to "use" next turn - pokemon.getMoveQueue().push({ move: Moves.NONE, targets: [] }); + pokemon.getMoveQueue().push({ move: MoveId.NONE, targets: [] }); } /** Cancels the source's move this turn and queues a "__ must recharge!" message */ @@ -479,7 +479,7 @@ export class BeakBlastChargingTag extends BattlerTag { BattlerTagType.BEAK_BLAST_CHARGING, [BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.TURN_END, BattlerTagLapseType.AFTER_HIT], 1, - Moves.BEAK_BLAST, + MoveId.BEAK_BLAST, ); } @@ -578,7 +578,7 @@ export class TrappedTag extends BattlerTag { tagType: BattlerTagType, lapseType: BattlerTagLapseType, turnCount: number, - sourceMove: Moves, + sourceMove: MoveId, sourceId: number, ) { super(tagType, lapseType, turnCount, sourceMove, sourceId, true); @@ -635,7 +635,7 @@ export class TrappedTag extends BattlerTag { */ class NoRetreatTag extends TrappedTag { constructor(sourceId: number) { - super(BattlerTagType.NO_RETREAT, BattlerTagLapseType.CUSTOM, 0, Moves.NO_RETREAT, sourceId); + super(BattlerTagType.NO_RETREAT, BattlerTagLapseType.CUSTOM, 0, MoveId.NO_RETREAT, sourceId); } /** overrides {@linkcode TrappedTag.apply}, removing the Ghost-type condition */ @@ -648,7 +648,7 @@ class NoRetreatTag extends TrappedTag { * BattlerTag that represents the {@link https://bulbapedia.bulbagarden.net/wiki/Flinch Flinch} status condition */ export class FlinchedTag extends BattlerTag { - constructor(sourceMove: Moves) { + constructor(sourceMove: MoveId) { super(BattlerTagType.FLINCHED, [BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.TURN_END], 0, sourceMove); } @@ -683,7 +683,7 @@ export class FlinchedTag extends BattlerTag { } export class InterruptedTag extends BattlerTag { - constructor(sourceMove: Moves) { + constructor(sourceMove: MoveId) { super(BattlerTagType.INTERRUPTED, BattlerTagLapseType.PRE_MOVE, 0, sourceMove); } @@ -696,7 +696,7 @@ export class InterruptedTag extends BattlerTag { pokemon.getMoveQueue().shift(); pokemon.pushMoveHistory({ - move: Moves.NONE, + move: MoveId.NONE, result: MoveResult.OTHER, targets: [], }); @@ -712,7 +712,7 @@ export class InterruptedTag extends BattlerTag { * BattlerTag that represents the {@link https://bulbapedia.bulbagarden.net/wiki/Confusion_(status_condition) Confusion} status condition */ export class ConfusedTag extends BattlerTag { - constructor(turnCount: number, sourceMove: Moves) { + constructor(turnCount: number, sourceMove: MoveId) { super(BattlerTagType.CONFUSED, BattlerTagLapseType.MOVE, turnCount, sourceMove, undefined, true); } @@ -792,7 +792,7 @@ export class ConfusedTag extends BattlerTag { * @see {@linkcode apply} */ export class DestinyBondTag extends BattlerTag { - constructor(sourceMove: Moves, sourceId: number) { + constructor(sourceMove: MoveId, sourceId: number) { super(BattlerTagType.DESTINY_BOND, BattlerTagLapseType.PRE_MOVE, 1, sourceMove, sourceId, true); } @@ -926,7 +926,7 @@ export class SeedTag extends BattlerTag { private sourceIndex: number; constructor(sourceId: number) { - super(BattlerTagType.SEEDED, BattlerTagLapseType.TURN_END, 1, Moves.LEECH_SEED, sourceId, true); + super(BattlerTagType.SEEDED, BattlerTagLapseType.TURN_END, 1, MoveId.LEECH_SEED, sourceId, true); } /** @@ -1059,7 +1059,7 @@ export class PowderTag extends BattlerTag { export class NightmareTag extends BattlerTag { constructor() { - super(BattlerTagType.NIGHTMARE, BattlerTagLapseType.TURN_END, 1, Moves.NIGHTMARE); + super(BattlerTagType.NIGHTMARE, BattlerTagLapseType.TURN_END, 1, MoveId.NIGHTMARE); } onAdd(pokemon: Pokemon): void { @@ -1110,7 +1110,7 @@ export class NightmareTag extends BattlerTag { } export class FrenzyTag extends BattlerTag { - constructor(turnCount: number, sourceMove: Moves, sourceId: number) { + constructor(turnCount: number, sourceMove: MoveId, sourceId: number) { super(BattlerTagType.FRENZY, BattlerTagLapseType.CUSTOM, turnCount, sourceMove, sourceId); } @@ -1125,25 +1125,25 @@ export class FrenzyTag extends BattlerTag { } /** - * Applies the effects of {@linkcode Moves.ENCORE} onto the target Pokemon. + * Applies the effects of {@linkcode MoveId.ENCORE} onto the target Pokemon. * Encore forces the target Pokemon to use its most-recent move for 3 turns. */ export class EncoreTag extends MoveRestrictionBattlerTag { - public moveId: Moves; + public moveId: MoveId; constructor(sourceId: number) { super( BattlerTagType.ENCORE, [BattlerTagLapseType.CUSTOM, BattlerTagLapseType.AFTER_MOVE], 3, - Moves.ENCORE, + MoveId.ENCORE, sourceId, ); } loadTag(source: BattlerTag | any): void { super.loadTag(source); - this.moveId = source.moveId as Moves; + this.moveId = source.moveId as MoveId; } canAdd(pokemon: Pokemon): boolean { @@ -1159,13 +1159,13 @@ export class EncoreTag extends MoveRestrictionBattlerTag { } switch (repeatableMove.move) { - case Moves.MIMIC: - case Moves.MIRROR_MOVE: - case Moves.TRANSFORM: - case Moves.STRUGGLE: - case Moves.SKETCH: - case Moves.SLEEP_TALK: - case Moves.ENCORE: + case MoveId.MIMIC: + case MoveId.MIRROR_MOVE: + case MoveId.TRANSFORM: + case MoveId.STRUGGLE: + case MoveId.SKETCH: + case MoveId.SLEEP_TALK: + case MoveId.ENCORE: return false; } @@ -1213,18 +1213,18 @@ export class EncoreTag extends MoveRestrictionBattlerTag { /** * Checks if the move matches the moveId stored within the tag and returns a boolean value - * @param move {@linkcode Moves} the move selected + * @param move {@linkcode MoveId} the move selected * @param user N/A * @returns `true` if the move does not match with the moveId stored and as a result, restricted */ - override isMoveRestricted(move: Moves, _user?: Pokemon): boolean { + override isMoveRestricted(move: MoveId, _user?: Pokemon): boolean { if (move !== this.moveId) { return true; } return false; } - override selectionDeniedText(_pokemon: Pokemon, move: Moves): string { + override selectionDeniedText(_pokemon: Pokemon, move: MoveId): string { return i18next.t("battle:moveDisabled", { moveName: allMoves[move].name }); } @@ -1241,7 +1241,7 @@ export class EncoreTag extends MoveRestrictionBattlerTag { export class HelpingHandTag extends BattlerTag { constructor(sourceId: number) { - super(BattlerTagType.HELPING_HAND, BattlerTagLapseType.TURN_END, 1, Moves.HELPING_HAND, sourceId); + super(BattlerTagType.HELPING_HAND, BattlerTagLapseType.TURN_END, 1, MoveId.HELPING_HAND, sourceId); } onAdd(pokemon: Pokemon): void { @@ -1260,7 +1260,7 @@ export class HelpingHandTag extends BattlerTag { */ export class IngrainTag extends TrappedTag { constructor(sourceId: number) { - super(BattlerTagType.INGRAIN, BattlerTagLapseType.TURN_END, 1, Moves.INGRAIN, sourceId); + super(BattlerTagType.INGRAIN, BattlerTagLapseType.TURN_END, 1, MoveId.INGRAIN, sourceId); } /** @@ -1310,7 +1310,7 @@ export class IngrainTag extends TrappedTag { */ export class OctolockTag extends TrappedTag { constructor(sourceId: number) { - super(BattlerTagType.OCTOLOCK, BattlerTagLapseType.TURN_END, 1, Moves.OCTOLOCK, sourceId); + super(BattlerTagType.OCTOLOCK, BattlerTagLapseType.TURN_END, 1, MoveId.OCTOLOCK, sourceId); } lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { @@ -1327,7 +1327,7 @@ export class OctolockTag extends TrappedTag { export class AquaRingTag extends BattlerTag { constructor() { - super(BattlerTagType.AQUA_RING, BattlerTagLapseType.TURN_END, 1, Moves.AQUA_RING, undefined, true); + super(BattlerTagType.AQUA_RING, BattlerTagLapseType.TURN_END, 1, MoveId.AQUA_RING, undefined, true); } onAdd(pokemon: Pokemon): void { @@ -1361,10 +1361,10 @@ export class AquaRingTag extends BattlerTag { } } -/** Tag used to allow moves that interact with {@link Moves.MINIMIZE} to function */ +/** Tag used to allow moves that interact with {@link MoveId.MINIMIZE} to function */ export class MinimizeTag extends BattlerTag { constructor() { - super(BattlerTagType.MINIMIZED, BattlerTagLapseType.TURN_END, 1, Moves.MINIMIZE); + super(BattlerTagType.MINIMIZED, BattlerTagLapseType.TURN_END, 1, MoveId.MINIMIZE); } onAdd(pokemon: Pokemon): void { @@ -1382,7 +1382,7 @@ export class MinimizeTag extends BattlerTag { export class DrowsyTag extends BattlerTag { constructor() { - super(BattlerTagType.DROWSY, BattlerTagLapseType.TURN_END, 2, Moves.YAWN); + super(BattlerTagType.DROWSY, BattlerTagLapseType.TURN_END, 2, MoveId.YAWN); } canAdd(pokemon: Pokemon): boolean { @@ -1416,7 +1416,13 @@ export class DrowsyTag extends BattlerTag { export abstract class DamagingTrapTag extends TrappedTag { private commonAnim: CommonAnim; - constructor(tagType: BattlerTagType, commonAnim: CommonAnim, turnCount: number, sourceMove: Moves, sourceId: number) { + constructor( + tagType: BattlerTagType, + commonAnim: CommonAnim, + turnCount: number, + sourceMove: MoveId, + sourceId: number, + ) { super(tagType, BattlerTagLapseType.TURN_END, turnCount, sourceMove, sourceId); this.commonAnim = commonAnim; @@ -1461,7 +1467,7 @@ export abstract class DamagingTrapTag extends TrappedTag { export class BindTag extends DamagingTrapTag { constructor(turnCount: number, sourceId: number) { - super(BattlerTagType.BIND, CommonAnim.BIND, turnCount, Moves.BIND, sourceId); + super(BattlerTagType.BIND, CommonAnim.BIND, turnCount, MoveId.BIND, sourceId); } getTrapMessage(pokemon: Pokemon): string { @@ -1475,7 +1481,7 @@ export class BindTag extends DamagingTrapTag { export class WrapTag extends DamagingTrapTag { constructor(turnCount: number, sourceId: number) { - super(BattlerTagType.WRAP, CommonAnim.WRAP, turnCount, Moves.WRAP, sourceId); + super(BattlerTagType.WRAP, CommonAnim.WRAP, turnCount, MoveId.WRAP, sourceId); } getTrapMessage(pokemon: Pokemon): string { @@ -1487,7 +1493,13 @@ export class WrapTag extends DamagingTrapTag { } export abstract class VortexTrapTag extends DamagingTrapTag { - constructor(tagType: BattlerTagType, commonAnim: CommonAnim, turnCount: number, sourceMove: Moves, sourceId: number) { + constructor( + tagType: BattlerTagType, + commonAnim: CommonAnim, + turnCount: number, + sourceMove: MoveId, + sourceId: number, + ) { super(tagType, commonAnim, turnCount, sourceMove, sourceId); } @@ -1500,19 +1512,19 @@ export abstract class VortexTrapTag extends DamagingTrapTag { export class FireSpinTag extends VortexTrapTag { constructor(turnCount: number, sourceId: number) { - super(BattlerTagType.FIRE_SPIN, CommonAnim.FIRE_SPIN, turnCount, Moves.FIRE_SPIN, sourceId); + super(BattlerTagType.FIRE_SPIN, CommonAnim.FIRE_SPIN, turnCount, MoveId.FIRE_SPIN, sourceId); } } export class WhirlpoolTag extends VortexTrapTag { constructor(turnCount: number, sourceId: number) { - super(BattlerTagType.WHIRLPOOL, CommonAnim.WHIRLPOOL, turnCount, Moves.WHIRLPOOL, sourceId); + super(BattlerTagType.WHIRLPOOL, CommonAnim.WHIRLPOOL, turnCount, MoveId.WHIRLPOOL, sourceId); } } export class ClampTag extends DamagingTrapTag { constructor(turnCount: number, sourceId: number) { - super(BattlerTagType.CLAMP, CommonAnim.CLAMP, turnCount, Moves.CLAMP, sourceId); + super(BattlerTagType.CLAMP, CommonAnim.CLAMP, turnCount, MoveId.CLAMP, sourceId); } getTrapMessage(pokemon: Pokemon): string { @@ -1525,7 +1537,7 @@ export class ClampTag extends DamagingTrapTag { export class SandTombTag extends DamagingTrapTag { constructor(turnCount: number, sourceId: number) { - super(BattlerTagType.SAND_TOMB, CommonAnim.SAND_TOMB, turnCount, Moves.SAND_TOMB, sourceId); + super(BattlerTagType.SAND_TOMB, CommonAnim.SAND_TOMB, turnCount, MoveId.SAND_TOMB, sourceId); } getTrapMessage(pokemon: Pokemon): string { @@ -1538,7 +1550,7 @@ export class SandTombTag extends DamagingTrapTag { export class MagmaStormTag extends DamagingTrapTag { constructor(turnCount: number, sourceId: number) { - super(BattlerTagType.MAGMA_STORM, CommonAnim.MAGMA_STORM, turnCount, Moves.MAGMA_STORM, sourceId); + super(BattlerTagType.MAGMA_STORM, CommonAnim.MAGMA_STORM, turnCount, MoveId.MAGMA_STORM, sourceId); } getTrapMessage(pokemon: Pokemon): string { @@ -1550,7 +1562,7 @@ export class MagmaStormTag extends DamagingTrapTag { export class SnapTrapTag extends DamagingTrapTag { constructor(turnCount: number, sourceId: number) { - super(BattlerTagType.SNAP_TRAP, CommonAnim.SNAP_TRAP, turnCount, Moves.SNAP_TRAP, sourceId); + super(BattlerTagType.SNAP_TRAP, CommonAnim.SNAP_TRAP, turnCount, MoveId.SNAP_TRAP, sourceId); } getTrapMessage(pokemon: Pokemon): string { @@ -1562,7 +1574,7 @@ export class SnapTrapTag extends DamagingTrapTag { export class ThunderCageTag extends DamagingTrapTag { constructor(turnCount: number, sourceId: number) { - super(BattlerTagType.THUNDER_CAGE, CommonAnim.THUNDER_CAGE, turnCount, Moves.THUNDER_CAGE, sourceId); + super(BattlerTagType.THUNDER_CAGE, CommonAnim.THUNDER_CAGE, turnCount, MoveId.THUNDER_CAGE, sourceId); } getTrapMessage(pokemon: Pokemon): string { @@ -1575,7 +1587,7 @@ export class ThunderCageTag extends DamagingTrapTag { export class InfestationTag extends DamagingTrapTag { constructor(turnCount: number, sourceId: number) { - super(BattlerTagType.INFESTATION, CommonAnim.INFESTATION, turnCount, Moves.INFESTATION, sourceId); + super(BattlerTagType.INFESTATION, CommonAnim.INFESTATION, turnCount, MoveId.INFESTATION, sourceId); } getTrapMessage(pokemon: Pokemon): string { @@ -1587,7 +1599,7 @@ export class InfestationTag extends DamagingTrapTag { } export class ProtectedTag extends BattlerTag { - constructor(sourceMove: Moves, tagType: BattlerTagType = BattlerTagType.PROTECTED) { + constructor(sourceMove: MoveId, tagType: BattlerTagType = BattlerTagType.PROTECTED) { super(tagType, BattlerTagLapseType.TURN_END, 0, sourceMove); } @@ -1659,12 +1671,12 @@ export class ContactProtectedTag extends ProtectedTag { /** * `BattlerTag` class for moves that block damaging moves damage the enemy if the enemy's move makes contact - * Used by {@linkcode Moves.SPIKY_SHIELD} + * Used by {@linkcode MoveId.SPIKY_SHIELD} */ export class ContactDamageProtectedTag extends ContactProtectedTag { private damageRatio: number; - constructor(sourceMove: Moves, damageRatio: number) { + constructor(sourceMove: MoveId, damageRatio: number) { super(sourceMove, BattlerTagType.SPIKY_SHIELD); this.damageRatio = damageRatio; } @@ -1704,7 +1716,7 @@ export class ContactSetStatusProtectedTag extends DamageProtectedTag { * @param statusEffect The status effect to apply to the attacker */ constructor( - sourceMove: Moves, + sourceMove: MoveId, tagType: BattlerTagType, private statusEffect: StatusEffect, ) { @@ -1723,13 +1735,13 @@ export class ContactSetStatusProtectedTag extends DamageProtectedTag { /** * `BattlerTag` class for moves that block damaging moves and lower enemy stats if the enemy's move makes contact - * Used by {@linkcode Moves.KINGS_SHIELD}, {@linkcode Moves.OBSTRUCT}, {@linkcode Moves.SILK_TRAP} + * Used by {@linkcode MoveId.KINGS_SHIELD}, {@linkcode MoveId.OBSTRUCT}, {@linkcode MoveId.SILK_TRAP} */ export class ContactStatStageChangeProtectedTag extends DamageProtectedTag { private stat: BattleStat; private levels: number; - constructor(sourceMove: Moves, tagType: BattlerTagType, stat: BattleStat, levels: number) { + constructor(sourceMove: MoveId, tagType: BattlerTagType, stat: BattleStat, levels: number) { super(sourceMove, tagType); this.stat = stat; @@ -1762,7 +1774,7 @@ export class ContactStatStageChangeProtectedTag extends DamageProtectedTag { * Endure Tokens. */ export class EnduringTag extends BattlerTag { - constructor(tagType: BattlerTagType, lapseType: BattlerTagLapseType, sourceMove: Moves) { + constructor(tagType: BattlerTagType, lapseType: BattlerTagLapseType, sourceMove: MoveId) { super(tagType, lapseType, 0, sourceMove); } @@ -1791,7 +1803,7 @@ export class EnduringTag extends BattlerTag { } export class SturdyTag extends BattlerTag { - constructor(sourceMove: Moves) { + constructor(sourceMove: MoveId) { super(BattlerTagType.STURDY, BattlerTagLapseType.TURN_END, 0, sourceMove); } @@ -1811,7 +1823,7 @@ export class SturdyTag extends BattlerTag { export class PerishSongTag extends BattlerTag { constructor(turnCount: number) { - super(BattlerTagType.PERISH_SONG, BattlerTagLapseType.TURN_END, turnCount, Moves.PERISH_SONG, undefined, true); + super(BattlerTagType.PERISH_SONG, BattlerTagLapseType.TURN_END, turnCount, MoveId.PERISH_SONG, undefined, true); } canAdd(pokemon: Pokemon): boolean { @@ -1843,10 +1855,10 @@ export class PerishSongTag extends BattlerTag { export class CenterOfAttentionTag extends BattlerTag { public powder: boolean; - constructor(sourceMove: Moves) { + constructor(sourceMove: MoveId) { super(BattlerTagType.CENTER_OF_ATTENTION, BattlerTagLapseType.TURN_END, 1, sourceMove); - this.powder = this.sourceMove === Moves.RAGE_POWDER; + this.powder = this.sourceMove === MoveId.RAGE_POWDER; } /** "Center of Attention" can't be added if an ally is already the Center of Attention. */ @@ -1868,9 +1880,9 @@ export class CenterOfAttentionTag extends BattlerTag { } export class AbilityBattlerTag extends BattlerTag { - public ability: Abilities; + public ability: AbilityId; - constructor(tagType: BattlerTagType, ability: Abilities, lapseType: BattlerTagLapseType, turnCount: number) { + constructor(tagType: BattlerTagType, ability: AbilityId, lapseType: BattlerTagLapseType, turnCount: number) { super(tagType, lapseType, turnCount); this.ability = ability; @@ -1882,7 +1894,7 @@ export class AbilityBattlerTag extends BattlerTag { */ loadTag(source: BattlerTag | any): void { super.loadTag(source); - this.ability = source.ability as Abilities; + this.ability = source.ability as AbilityId; } } @@ -1892,7 +1904,7 @@ export class AbilityBattlerTag extends BattlerTag { */ export class UnburdenTag extends AbilityBattlerTag { constructor() { - super(BattlerTagType.UNBURDEN, Abilities.UNBURDEN, BattlerTagLapseType.CUSTOM, 1); + super(BattlerTagType.UNBURDEN, AbilityId.UNBURDEN, BattlerTagLapseType.CUSTOM, 1); } onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); @@ -1904,18 +1916,18 @@ export class UnburdenTag extends AbilityBattlerTag { export class TruantTag extends AbilityBattlerTag { constructor() { - super(BattlerTagType.TRUANT, Abilities.TRUANT, BattlerTagLapseType.MOVE, 1); + super(BattlerTagType.TRUANT, AbilityId.TRUANT, BattlerTagLapseType.MOVE, 1); } lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { - if (!pokemon.hasAbility(Abilities.TRUANT)) { + if (!pokemon.hasAbility(AbilityId.TRUANT)) { return super.lapse(pokemon, lapseType); } - const passive = pokemon.getAbility().id !== Abilities.TRUANT; + const passive = pokemon.getAbility().id !== AbilityId.TRUANT; const lastMove = pokemon.getLastXMoves().find(() => true); - if (lastMove && lastMove.move !== Moves.NONE) { + if (lastMove && lastMove.move !== MoveId.NONE) { (globalScene.getCurrentPhase() as MovePhase).cancel(); // TODO: Ability displays should be handled by the ability globalScene.queueAbilityDisplay(pokemon, passive, true); @@ -1933,7 +1945,7 @@ export class TruantTag extends AbilityBattlerTag { export class SlowStartTag extends AbilityBattlerTag { constructor() { - super(BattlerTagType.SLOW_START, Abilities.SLOW_START, BattlerTagLapseType.TURN_END, 5); + super(BattlerTagType.SLOW_START, AbilityId.SLOW_START, BattlerTagLapseType.TURN_END, 5); } onAdd(pokemon: Pokemon): void { @@ -1972,7 +1984,7 @@ export class HighestStatBoostTag extends AbilityBattlerTag { public stat: Stat; public multiplier: number; - constructor(tagType: BattlerTagType, ability: Abilities) { + constructor(tagType: BattlerTagType, ability: AbilityId) { super(tagType, ability, BattlerTagLapseType.CUSTOM, 1); } @@ -2031,7 +2043,7 @@ export class HighestStatBoostTag extends AbilityBattlerTag { export class WeatherHighestStatBoostTag extends HighestStatBoostTag implements WeatherBattlerTag { public weatherTypes: WeatherType[]; - constructor(tagType: BattlerTagType, ability: Abilities, ...weatherTypes: WeatherType[]) { + constructor(tagType: BattlerTagType, ability: AbilityId, ...weatherTypes: WeatherType[]) { super(tagType, ability); this.weatherTypes = weatherTypes; } @@ -2049,7 +2061,7 @@ export class WeatherHighestStatBoostTag extends HighestStatBoostTag implements W export class TerrainHighestStatBoostTag extends HighestStatBoostTag implements TerrainBattlerTag { public terrainTypes: TerrainType[]; - constructor(tagType: BattlerTagType, ability: Abilities, ...terrainTypes: TerrainType[]) { + constructor(tagType: BattlerTagType, ability: AbilityId, ...terrainTypes: TerrainType[]) { super(tagType, ability); this.terrainTypes = terrainTypes; } @@ -2065,7 +2077,7 @@ export class TerrainHighestStatBoostTag extends HighestStatBoostTag implements T } export class SemiInvulnerableTag extends BattlerTag { - constructor(tagType: BattlerTagType, turnCount: number, sourceMove: Moves) { + constructor(tagType: BattlerTagType, turnCount: number, sourceMove: MoveId) { super(tagType, BattlerTagLapseType.MOVE_EFFECT, turnCount, sourceMove); } @@ -2087,7 +2099,7 @@ export class SemiInvulnerableTag extends BattlerTag { export class TypeImmuneTag extends BattlerTag { public immuneType: PokemonType; - constructor(tagType: BattlerTagType, sourceMove: Moves, immuneType: PokemonType, length = 1) { + constructor(tagType: BattlerTagType, sourceMove: MoveId, immuneType: PokemonType, length = 1) { super(tagType, BattlerTagLapseType.TURN_END, length, sourceMove, undefined, true); this.immuneType = immuneType; @@ -2105,18 +2117,18 @@ export class TypeImmuneTag extends BattlerTag { /** * Battler Tag that lifts the affected Pokemon into the air and provides immunity to Ground type moves. - * @see {@link https://bulbapedia.bulbagarden.net/wiki/Magnet_Rise_(move) | Moves.MAGNET_RISE} - * @see {@link https://bulbapedia.bulbagarden.net/wiki/Telekinesis_(move) | Moves.TELEKINESIS} + * @see {@link https://bulbapedia.bulbagarden.net/wiki/Magnet_Rise_(move) | MoveId.MAGNET_RISE} + * @see {@link https://bulbapedia.bulbagarden.net/wiki/Telekinesis_(move) | MoveId.TELEKINESIS} */ export class FloatingTag extends TypeImmuneTag { - constructor(tagType: BattlerTagType, sourceMove: Moves, turnCount: number) { + constructor(tagType: BattlerTagType, sourceMove: MoveId, turnCount: number) { super(tagType, sourceMove, PokemonType.GROUND, turnCount); } onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - if (this.sourceMove === Moves.MAGNET_RISE) { + if (this.sourceMove === MoveId.MAGNET_RISE) { globalScene.queueMessage( i18next.t("battlerTags:magnetRisenOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), @@ -2127,7 +2139,7 @@ export class FloatingTag extends TypeImmuneTag { onRemove(pokemon: Pokemon): void { super.onRemove(pokemon); - if (this.sourceMove === Moves.MAGNET_RISE) { + if (this.sourceMove === MoveId.MAGNET_RISE) { globalScene.queueMessage( i18next.t("battlerTags:magnetRisenOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), @@ -2144,7 +2156,7 @@ export class TypeBoostTag extends BattlerTag { constructor( tagType: BattlerTagType, - sourceMove: Moves, + sourceMove: MoveId, boostedType: PokemonType, boostValue: number, oneUse: boolean, @@ -2188,7 +2200,7 @@ export class TypeBoostTag extends BattlerTag { } export class CritBoostTag extends BattlerTag { - constructor(tagType: BattlerTagType, sourceMove: Moves) { + constructor(tagType: BattlerTagType, sourceMove: MoveId) { super(tagType, BattlerTagLapseType.TURN_END, 1, sourceMove, undefined, true); } @@ -2226,7 +2238,7 @@ export class DragonCheerTag extends CritBoostTag { public typesOnAdd: PokemonType[]; constructor() { - super(BattlerTagType.CRIT_BOOST, Moves.DRAGON_CHEER); + super(BattlerTagType.CRIT_BOOST, MoveId.DRAGON_CHEER); } onAdd(pokemon: Pokemon): void { @@ -2240,7 +2252,7 @@ export class SaltCuredTag extends BattlerTag { private sourceIndex: number; constructor(sourceId: number) { - super(BattlerTagType.SALT_CURED, BattlerTagLapseType.TURN_END, 1, Moves.SALT_CURE, sourceId); + super(BattlerTagType.SALT_CURED, BattlerTagLapseType.TURN_END, 1, MoveId.SALT_CURE, sourceId); } /** @@ -2297,7 +2309,7 @@ export class CursedTag extends BattlerTag { private sourceIndex: number; constructor(sourceId: number) { - super(BattlerTagType.CURSED, BattlerTagLapseType.TURN_END, 1, Moves.CURSE, sourceId, true); + super(BattlerTagType.CURSED, BattlerTagLapseType.TURN_END, 1, MoveId.CURSE, sourceId, true); } /** @@ -2342,7 +2354,7 @@ export class CursedTag extends BattlerTag { * Battler tag for attacks that remove a type post use. */ export class RemovedTypeTag extends BattlerTag { - constructor(tagType: BattlerTagType, lapseType: BattlerTagLapseType, sourceMove: Moves) { + constructor(tagType: BattlerTagType, lapseType: BattlerTagLapseType, sourceMove: MoveId) { super(tagType, lapseType, 1, sourceMove); } } @@ -2352,7 +2364,7 @@ export class RemovedTypeTag extends BattlerTag { * @description `IGNORE_FLYING`: Persistent grounding effects (i.e. from Smack Down and Thousand Waves) */ export class GroundedTag extends BattlerTag { - constructor(tagType: BattlerTagType, lapseType: BattlerTagLapseType, sourceMove: Moves) { + constructor(tagType: BattlerTagType, lapseType: BattlerTagLapseType, sourceMove: MoveId) { super(tagType, lapseType, 1, sourceMove); } } @@ -2367,7 +2379,7 @@ export class RoostedTag extends BattlerTag { private isBasePureFlying: boolean; constructor() { - super(BattlerTagType.ROOSTED, BattlerTagLapseType.TURN_END, 1, Moves.ROOST); + super(BattlerTagType.ROOSTED, BattlerTagLapseType.TURN_END, 1, MoveId.ROOST); } onRemove(pokemon: Pokemon): void { @@ -2485,7 +2497,7 @@ export class CommandedTag extends BattlerTag { private _tatsugiriFormKey: string; constructor(sourceId: number) { - super(BattlerTagType.COMMANDED, BattlerTagLapseType.CUSTOM, 0, Moves.NONE, sourceId); + super(BattlerTagType.COMMANDED, BattlerTagLapseType.CUSTOM, 0, MoveId.NONE, sourceId); } public get tatsugiriFormKey(): string { @@ -2535,7 +2547,7 @@ export class StockpilingTag extends BattlerTag { [Stat.SPDEF]: 0, }; - constructor(sourceMove: Moves = Moves.NONE) { + constructor(sourceMove: MoveId = MoveId.NONE) { super(BattlerTagType.STOCKPILING, BattlerTagLapseType.CUSTOM, 1, sourceMove); } @@ -2624,7 +2636,7 @@ export class StockpilingTag extends BattlerTag { * @extends BattlerTag */ export class GulpMissileTag extends BattlerTag { - constructor(tagType: BattlerTagType, sourceMove: Moves) { + constructor(tagType: BattlerTagType, sourceMove: MoveId) { super(tagType, BattlerTagLapseType.HIT, 0, sourceMove); } @@ -2667,12 +2679,12 @@ export class GulpMissileTag extends BattlerTag { * @returns Whether the BattlerTag can be added. */ canAdd(pokemon: Pokemon): boolean { - const isSurfOrDive = [Moves.SURF, Moves.DIVE].includes(this.sourceMove); + const isSurfOrDive = [MoveId.SURF, MoveId.DIVE].includes(this.sourceMove); const isNormalForm = pokemon.formIndex === 0 && !pokemon.getTag(BattlerTagType.GULP_MISSILE_ARROKUDA) && !pokemon.getTag(BattlerTagType.GULP_MISSILE_PIKACHU); - const isCramorant = pokemon.species.speciesId === Species.CRAMORANT; + const isCramorant = pokemon.species.speciesId === SpeciesId.CRAMORANT; return isSurfOrDive && isNormalForm && isCramorant; } @@ -2692,8 +2704,8 @@ export class GulpMissileTag extends BattlerTag { * Tag that makes the target drop all of it type immunities * and all accuracy checks ignore its evasiveness stat. * - * Applied by moves: {@linkcode Moves.ODOR_SLEUTH | Odor Sleuth}, - * {@linkcode Moves.MIRACLE_EYE | Miracle Eye} and {@linkcode Moves.FORESIGHT | Foresight}. + * Applied by moves: {@linkcode MoveId.ODOR_SLEUTH | Odor Sleuth}, + * {@linkcode MoveId.MIRACLE_EYE | Miracle Eye} and {@linkcode MoveId.FORESIGHT | Foresight}. * * @extends BattlerTag * @see {@linkcode ignoreImmunity} @@ -2702,7 +2714,7 @@ export class ExposedTag extends BattlerTag { private defenderType: PokemonType; private allowedTypes: PokemonType[]; - constructor(tagType: BattlerTagType, sourceMove: Moves, defenderType: PokemonType, allowedTypes: PokemonType[]) { + constructor(tagType: BattlerTagType, sourceMove: MoveId, defenderType: PokemonType, allowedTypes: PokemonType[]) { super(tagType, BattlerTagLapseType.CUSTOM, 1, sourceMove); this.defenderType = defenderType; this.allowedTypes = allowedTypes; @@ -2730,12 +2742,12 @@ export class ExposedTag extends BattlerTag { /** * Tag that prevents HP recovery from held items and move effects. It also blocks the usage of recovery moves. - * Applied by moves: {@linkcode Moves.HEAL_BLOCK | Heal Block (5 turns)}, {@linkcode Moves.PSYCHIC_NOISE | Psychic Noise (2 turns)} + * Applied by moves: {@linkcode MoveId.HEAL_BLOCK | Heal Block (5 turns)}, {@linkcode MoveId.PSYCHIC_NOISE | Psychic Noise (2 turns)} * * @extends MoveRestrictionBattlerTag */ export class HealBlockTag extends MoveRestrictionBattlerTag { - constructor(turnCount: number, sourceMove: Moves) { + constructor(turnCount: number, sourceMove: MoveId) { super( BattlerTagType.HEAL_BLOCK, [BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.TURN_END], @@ -2752,10 +2764,10 @@ export class HealBlockTag extends MoveRestrictionBattlerTag { /** * Checks if a move is disabled under Heal Block - * @param {Moves} move {@linkcode Moves} the move ID + * @param {MoveId} move {@linkcode MoveId} the move ID * @returns `true` if the move has a TRIAGE_MOVE flag and is a status move */ - override isMoveRestricted(move: Moves): boolean { + override isMoveRestricted(move: MoveId): boolean { if (allMoves[move].hasFlag(MoveFlags.TRIAGE_MOVE) && allMoves[move].category === MoveCategory.STATUS) { return true; } @@ -2765,12 +2777,12 @@ export class HealBlockTag extends MoveRestrictionBattlerTag { /** * Checks if a move is disabled under Heal Block because of its choice of target * Implemented b/c of Pollen Puff - * @param {Moves} move {@linkcode Moves} the move ID + * @param {MoveId} move {@linkcode MoveId} the move ID * @param {Pokemon} user {@linkcode Pokemon} the move user * @param {Pokemon} target {@linkcode Pokemon} the target of the move * @returns `true` if the move cannot be used because the target is an ally */ - override isMoveTargetRestricted(move: Moves, user: Pokemon, target: Pokemon) { + override isMoveTargetRestricted(move: MoveId, user: Pokemon, target: Pokemon) { const moveCategory = new NumberHolder(allMoves[move].category); applyMoveAttrs(StatusCategoryOnAllyAttr, user, target, allMoves[move], moveCategory); if (allMoves[move].hasAttr(HealOnAllyAttr) && moveCategory.value === MoveCategory.STATUS) { @@ -2782,25 +2794,25 @@ export class HealBlockTag extends MoveRestrictionBattlerTag { /** * Uses its own unique selectionDeniedText() message */ - override selectionDeniedText(pokemon: Pokemon, move: Moves): string { + override selectionDeniedText(pokemon: Pokemon, move: MoveId): string { return i18next.t("battle:moveDisabledHealBlock", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[move].name, - healBlockName: allMoves[Moves.HEAL_BLOCK].name, + healBlockName: allMoves[MoveId.HEAL_BLOCK].name, }); } /** * @override * @param {Pokemon} pokemon {@linkcode Pokemon} attempting to use the restricted move - * @param {Moves} move {@linkcode Moves} ID of the move being interrupted + * @param {MoveId} move {@linkcode MoveId} ID of the move being interrupted * @returns {string} text to display when the move is interrupted */ - override interruptedText(pokemon: Pokemon, move: Moves): string { + override interruptedText(pokemon: Pokemon, move: MoveId): string { return i18next.t("battle:moveDisabledHealBlock", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[move].name, - healBlockName: allMoves[Moves.HEAL_BLOCK].name, + healBlockName: allMoves[MoveId.HEAL_BLOCK].name, }); } @@ -2851,7 +2863,7 @@ export class TarShotTag extends BattlerTag { */ export class ElectrifiedTag extends BattlerTag { constructor() { - super(BattlerTagType.ELECTRIFIED, BattlerTagLapseType.TURN_END, 1, Moves.ELECTRIFY); + super(BattlerTagType.ELECTRIFIED, BattlerTagLapseType.TURN_END, 1, MoveId.ELECTRIFY); } override onAdd(pokemon: Pokemon): void { @@ -2870,7 +2882,7 @@ export class ElectrifiedTag extends BattlerTag { */ export class AutotomizedTag extends BattlerTag { public autotomizeCount = 0; - constructor(sourceMove: Moves = Moves.AUTOTOMIZE) { + constructor(sourceMove: MoveId = MoveId.AUTOTOMIZE) { super(BattlerTagType.AUTOTOMIZED, BattlerTagLapseType.CUSTOM, 1, sourceMove); } @@ -2909,7 +2921,7 @@ export class SubstituteTag extends BattlerTag { /** Is the source Pokemon "in focus," i.e. is it fully visible on the field? */ public sourceInFocus: boolean; - constructor(sourceMove: Moves, sourceId: number) { + constructor(sourceMove: MoveId, sourceId: number) { super( BattlerTagType.SUBSTITUTE, [BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.AFTER_MOVE, BattlerTagLapseType.HIT], @@ -2927,7 +2939,7 @@ export class SubstituteTag extends BattlerTag { // Queue battle animation and message globalScene.triggerPokemonBattleAnim(pokemon, PokemonAnimType.SUBSTITUTE_ADD); - if (this.sourceMove === Moves.SHED_TAIL) { + if (this.sourceMove === MoveId.SHED_TAIL) { globalScene.queueMessage( i18next.t("battlerTags:shedTailOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), @@ -3068,7 +3080,7 @@ export class MysteryEncounterPostSummonTag extends BattlerTag { */ export class TormentTag extends MoveRestrictionBattlerTag { constructor(sourceId: number) { - super(BattlerTagType.TORMENT, BattlerTagLapseType.AFTER_MOVE, 1, Moves.TORMENT, sourceId); + super(BattlerTagType.TORMENT, BattlerTagLapseType.AFTER_MOVE, 1, MoveId.TORMENT, sourceId); } /** @@ -3098,10 +3110,10 @@ export class TormentTag extends MoveRestrictionBattlerTag { /** * This checks if the current move used is identical to the last used move with a {@linkcode MoveResult} of `SUCCESS`/`MISS` - * @param {Moves} move the move under investigation + * @param {MoveId} move the move under investigation * @returns `true` if there is valid consecutive usage | `false` if the moves are different from each other */ - public override isMoveRestricted(move: Moves, user: Pokemon): boolean { + public override isMoveRestricted(move: MoveId, user: Pokemon): boolean { if (!user) { return false; } @@ -3114,13 +3126,13 @@ export class TormentTag extends MoveRestrictionBattlerTag { const moveObj = allMoves[lastMove.move]; const isUnaffected = moveObj.hasAttr(ConsecutiveUseDoublePowerAttr) || user.getTag(BattlerTagType.FRENZY); const validLastMoveResult = lastMove.result === MoveResult.SUCCESS || lastMove.result === MoveResult.MISS; - if (lastMove.move === move && validLastMoveResult && lastMove.move !== Moves.STRUGGLE && !isUnaffected) { + if (lastMove.move === move && validLastMoveResult && lastMove.move !== MoveId.STRUGGLE && !isUnaffected) { return true; } return false; } - override selectionDeniedText(pokemon: Pokemon, _move: Moves): string { + override selectionDeniedText(pokemon: Pokemon, _move: MoveId): string { return i18next.t("battle:moveDisabledTorment", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }); @@ -3134,7 +3146,7 @@ export class TormentTag extends MoveRestrictionBattlerTag { */ export class TauntTag extends MoveRestrictionBattlerTag { constructor() { - super(BattlerTagType.TAUNT, [BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.AFTER_MOVE], 4, Moves.TAUNT); + super(BattlerTagType.TAUNT, [BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.AFTER_MOVE], 4, MoveId.TAUNT); } override onAdd(pokemon: Pokemon) { @@ -3159,21 +3171,21 @@ export class TauntTag extends MoveRestrictionBattlerTag { /** * Checks if a move is a status move and determines its restriction status on that basis - * @param {Moves} move the move under investigation + * @param {MoveId} move the move under investigation * @returns `true` if the move is a status move */ - override isMoveRestricted(move: Moves): boolean { + override isMoveRestricted(move: MoveId): boolean { return allMoves[move].category === MoveCategory.STATUS; } - override selectionDeniedText(pokemon: Pokemon, move: Moves): string { + override selectionDeniedText(pokemon: Pokemon, move: MoveId): string { return i18next.t("battle:moveDisabledTaunt", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[move].name, }); } - override interruptedText(pokemon: Pokemon, move: Moves): string { + override interruptedText(pokemon: Pokemon, move: MoveId): string { return i18next.t("battle:moveDisabledTaunt", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[move].name, @@ -3192,7 +3204,7 @@ export class ImprisonTag extends MoveRestrictionBattlerTag { BattlerTagType.IMPRISON, [BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.AFTER_MOVE], 1, - Moves.IMPRISON, + MoveId.IMPRISON, sourceId, ); } @@ -3217,10 +3229,10 @@ export class ImprisonTag extends MoveRestrictionBattlerTag { /** * Checks if the source of the tag has the parameter move in its moveset and that the source is still active * @override - * @param {Moves} move the move under investigation + * @param {MoveId} move the move under investigation * @returns `false` if either condition is not met */ - public override isMoveRestricted(move: Moves, _user: Pokemon): boolean { + public override isMoveRestricted(move: MoveId, _user: Pokemon): boolean { const source = this.getSourcePokemon(); if (source) { const sourceMoveset = source.getMoveset().map(m => m.moveId); @@ -3229,14 +3241,14 @@ export class ImprisonTag extends MoveRestrictionBattlerTag { return false; } - override selectionDeniedText(pokemon: Pokemon, move: Moves): string { + override selectionDeniedText(pokemon: Pokemon, move: MoveId): string { return i18next.t("battle:moveDisabledImprison", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[move].name, }); } - override interruptedText(pokemon: Pokemon, move: Moves): string { + override interruptedText(pokemon: Pokemon, move: MoveId): string { return i18next.t("battle:moveDisabledImprison", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[move].name, @@ -3251,7 +3263,7 @@ export class ImprisonTag extends MoveRestrictionBattlerTag { */ export class SyrupBombTag extends BattlerTag { constructor(sourceId: number) { - super(BattlerTagType.SYRUP_BOMB, BattlerTagLapseType.TURN_END, 3, Moves.SYRUP_BOMB, sourceId); + super(BattlerTagType.SYRUP_BOMB, BattlerTagLapseType.TURN_END, 3, MoveId.SYRUP_BOMB, sourceId); } /** @@ -3294,10 +3306,10 @@ export class SyrupBombTag extends BattlerTag { * Telekinesis raises the target into the air for three turns and causes all moves used against the target (aside from OHKO moves) to hit the target unless the target is in a semi-invulnerable state from Fly/Dig. * The first effect is provided by {@linkcode FloatingTag}, the accuracy-bypass effect is provided by TelekinesisTag * The effects of Telekinesis can be baton passed to a teammate. - * @see {@link https://bulbapedia.bulbagarden.net/wiki/Telekinesis_(move) | Moves.TELEKINESIS} + * @see {@link https://bulbapedia.bulbagarden.net/wiki/Telekinesis_(move) | MoveId.TELEKINESIS} */ export class TelekinesisTag extends BattlerTag { - constructor(sourceMove: Moves) { + constructor(sourceMove: MoveId) { super( BattlerTagType.TELEKINESIS, [BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.AFTER_MOVE], @@ -3322,7 +3334,7 @@ export class TelekinesisTag extends BattlerTag { * @extends BattlerTag */ export class PowerTrickTag extends BattlerTag { - constructor(sourceMove: Moves, sourceId: number) { + constructor(sourceMove: MoveId, sourceId: number) { super(BattlerTagType.POWER_TRICK, BattlerTagLapseType.CUSTOM, 0, sourceMove, sourceId, true); } @@ -3370,7 +3382,7 @@ export class PowerTrickTag extends BattlerTag { */ export class GrudgeTag extends BattlerTag { constructor() { - super(BattlerTagType.GRUDGE, [BattlerTagLapseType.CUSTOM, BattlerTagLapseType.PRE_MOVE], 1, Moves.GRUDGE); + super(BattlerTagType.GRUDGE, [BattlerTagLapseType.CUSTOM, BattlerTagLapseType.PRE_MOVE], 1, MoveId.GRUDGE); } onAdd(pokemon: Pokemon) { @@ -3394,7 +3406,7 @@ export class GrudgeTag extends BattlerTag { if (sourcePokemon.isActive() && pokemon.isOpponent(sourcePokemon)) { const lastMove = pokemon.turnData.attacksReceived[0]; const lastMoveData = sourcePokemon.getMoveset().find(m => m.moveId === lastMove.move); - if (lastMoveData && lastMove.move !== Moves.STRUGGLE) { + if (lastMoveData && lastMove.move !== MoveId.STRUGGLE) { lastMoveData.ppUsed = lastMoveData.getMovePp(); globalScene.queueMessage( i18next.t("battlerTags:grudgeLapse", { @@ -3415,7 +3427,7 @@ export class GrudgeTag extends BattlerTag { */ export class PsychoShiftTag extends BattlerTag { constructor() { - super(BattlerTagType.PSYCHO_SHIFT, BattlerTagLapseType.AFTER_MOVE, 1, Moves.PSYCHO_SHIFT); + super(BattlerTagType.PSYCHO_SHIFT, BattlerTagLapseType.AFTER_MOVE, 1, MoveId.PSYCHO_SHIFT); } /** @@ -3437,7 +3449,7 @@ export class PsychoShiftTag extends BattlerTag { */ export class MagicCoatTag extends BattlerTag { constructor() { - super(BattlerTagType.MAGIC_COAT, BattlerTagLapseType.TURN_END, 1, Moves.MAGIC_COAT); + super(BattlerTagType.MAGIC_COAT, BattlerTagLapseType.TURN_END, 1, MoveId.MAGIC_COAT); } /** @@ -3462,7 +3474,7 @@ export class MagicCoatTag extends BattlerTag { export function getBattlerTag( tagType: BattlerTagType, turnCount: number, - sourceMove: Moves, + sourceMove: MoveId, sourceId: number, ): BattlerTag { switch (tagType) { @@ -3555,12 +3567,12 @@ export function getBattlerTag( case BattlerTagType.PROTOSYNTHESIS: return new WeatherHighestStatBoostTag( tagType, - Abilities.PROTOSYNTHESIS, + AbilityId.PROTOSYNTHESIS, WeatherType.SUNNY, WeatherType.HARSH_SUN, ); case BattlerTagType.QUARK_DRIVE: - return new TerrainHighestStatBoostTag(tagType, Abilities.QUARK_DRIVE, TerrainType.ELECTRIC); + return new TerrainHighestStatBoostTag(tagType, AbilityId.QUARK_DRIVE, TerrainType.ELECTRIC); case BattlerTagType.FLYING: case BattlerTagType.UNDERGROUND: case BattlerTagType.UNDERWATER: diff --git a/src/data/challenge.ts b/src/data/challenge.ts index b4b8db2cc10..8dd303c34fd 100644 --- a/src/data/challenge.ts +++ b/src/data/challenge.ts @@ -15,10 +15,10 @@ import { BattleType } from "#enums/battle-type"; import Trainer, { TrainerVariant } from "#app/field/trainer"; import { PokemonType } from "#enums/pokemon-type"; import { Challenges } from "#enums/challenges"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { TrainerType } from "#enums/trainer-type"; import { Nature } from "#enums/nature"; -import type { Moves } from "#enums/moves"; +import type { MoveId } from "#enums/move-id"; import { TypeColor, TypeShadow } from "#enums/color"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { globalScene } from "#app/global-scene"; @@ -305,11 +305,11 @@ export abstract class Challenge { /** * An apply function for STARTER_COST challenges. Derived classes should alter this. - * @param _species {@link Species} The pokemon to change the cost of. + * @param _species {@link SpeciesId} The pokemon to change the cost of. * @param _cost {@link NumberHolder} The cost of the starter. * @returns {@link boolean} Whether this function did anything. */ - applyStarterCost(_species: Species, _cost: NumberHolder): boolean { + applyStarterCost(_species: SpeciesId, _cost: NumberHolder): boolean { return false; } @@ -395,11 +395,11 @@ export abstract class Challenge { * An apply function for MOVE_ACCESS. Derived classes should alter this. * @param _pokemon {@link Pokemon} What pokemon would learn the move. * @param _moveSource {@link MoveSourceType} What source the pokemon would get the move from. - * @param _move {@link Moves} The move in question. + * @param _move {@link MoveId} The move in question. * @param _level {@link NumberHolder} The level threshold for access. * @returns {@link boolean} Whether this function did anything. */ - applyMoveAccessLevel(_pokemon: Pokemon, _moveSource: MoveSourceType, _move: Moves, _level: NumberHolder): boolean { + applyMoveAccessLevel(_pokemon: Pokemon, _moveSource: MoveSourceType, _move: MoveId, _level: NumberHolder): boolean { return false; } @@ -407,11 +407,11 @@ export abstract class Challenge { * An apply function for MOVE_WEIGHT. Derived classes should alter this. * @param _pokemon {@link Pokemon} What pokemon would learn the move. * @param _moveSource {@link MoveSourceType} What source the pokemon would get the move from. - * @param _move {@link Moves} The move in question. + * @param _move {@link MoveId} The move in question. * @param _weight {@link NumberHolder} The base weight of the move * @returns {@link boolean} Whether this function did anything. */ - applyMoveWeight(_pokemon: Pokemon, _moveSource: MoveSourceType, _move: Moves, _level: NumberHolder): boolean { + applyMoveWeight(_pokemon: Pokemon, _moveSource: MoveSourceType, _move: MoveId, _level: NumberHolder): boolean { return false; } @@ -696,7 +696,7 @@ export class SingleGenerationChallenge extends Challenge { interface monotypeOverride { /** The species to override */ - species: Species; + species: SpeciesId; /** The type to count as */ type: PokemonType; /** If part of a fusion, should we check the fused species instead of the base species? */ @@ -708,7 +708,7 @@ interface monotypeOverride { */ export class SingleTypeChallenge extends Challenge { private static TYPE_OVERRIDES: monotypeOverride[] = [ - { species: Species.CASTFORM, type: PokemonType.NORMAL, fusion: false }, + { species: SpeciesId.CASTFORM, type: PokemonType.NORMAL, fusion: false }, ]; // TODO: Find a solution for all Pokemon with this ssui issue, including Basculin and Burmy @@ -804,7 +804,7 @@ export class FreshStartChallenge extends Challenge { return false; } - applyStarterCost(species: Species, cost: NumberHolder): boolean { + applyStarterCost(species: SpeciesId, cost: NumberHolder): boolean { if (defaultStarterSpecies.includes(species)) { cost.value = speciesStarterCosts[species]; return true; @@ -992,13 +992,13 @@ export function applyChallenges(challengeType: ChallengeType.STARTER_POINTS, poi /** * Apply all challenges that modify the cost of a starter. * @param challengeType {@link ChallengeType} ChallengeType.STARTER_COST - * @param species {@link Species} The pokemon to change the cost of. + * @param species {@link SpeciesId} The pokemon to change the cost of. * @param points {@link NumberHolder} The cost of the pokemon. * @returns True if any challenge was successfully applied. */ export function applyChallenges( challengeType: ChallengeType.STARTER_COST, - species: Species, + species: SpeciesId, cost: NumberHolder, ): boolean; /** @@ -1090,7 +1090,7 @@ export function applyChallenges(challengeType: ChallengeType.GAME_MODE_MODIFY): * @param challengeType {@link ChallengeType} ChallengeType.MOVE_ACCESS * @param pokemon {@link Pokemon} What pokemon would learn the move. * @param moveSource {@link MoveSourceType} What source the pokemon would get the move from. - * @param move {@link Moves} The move in question. + * @param move {@link MoveId} The move in question. * @param level {@link NumberHolder} The level threshold for access. * @returns True if any challenge was successfully applied. */ @@ -1098,7 +1098,7 @@ export function applyChallenges( challengeType: ChallengeType.MOVE_ACCESS, pokemon: Pokemon, moveSource: MoveSourceType, - move: Moves, + move: MoveId, level: NumberHolder, ): boolean; /** @@ -1106,7 +1106,7 @@ export function applyChallenges( * @param challengeType {@link ChallengeType} ChallengeType.MOVE_WEIGHT * @param pokemon {@link Pokemon} What pokemon would learn the move. * @param moveSource {@link MoveSourceType} What source the pokemon would get the move from. - * @param move {@link Moves} The move in question. + * @param move {@link MoveId} The move in question. * @param weight {@link NumberHolder} The weight of the move. * @returns True if any challenge was successfully applied. */ @@ -1114,7 +1114,7 @@ export function applyChallenges( challengeType: ChallengeType.MOVE_WEIGHT, pokemon: Pokemon, moveSource: MoveSourceType, - move: Moves, + move: MoveId, weight: NumberHolder, ): boolean; diff --git a/src/data/custom-pokemon-data.ts b/src/data/custom-pokemon-data.ts index 20f6ea96174..252e302ccf3 100644 --- a/src/data/custom-pokemon-data.ts +++ b/src/data/custom-pokemon-data.ts @@ -1,4 +1,4 @@ -import type { Abilities } from "#enums/abilities"; +import type { AbilityId } from "#enums/ability-id"; import type { PokemonType } from "#enums/pokemon-type"; import type { Nature } from "#enums/nature"; @@ -12,8 +12,8 @@ export class CustomPokemonData { * The scale at which to render this Pokemon's sprite. */ public spriteScale = -1; - public ability: Abilities | -1; - public passive: Abilities | -1; + public ability: AbilityId | -1; + public passive: AbilityId | -1; public nature: Nature | -1; public types: PokemonType[]; /** Deprecated but needed for session save migration */ diff --git a/src/data/daily-run.ts b/src/data/daily-run.ts index 8a1632ce160..fc60e5795dc 100644 --- a/src/data/daily-run.ts +++ b/src/data/daily-run.ts @@ -1,5 +1,5 @@ import { PartyMemberStrength } from "#enums/party-member-strength"; -import type { Species } from "#enums/species"; +import type { SpeciesId } from "#enums/species-id"; import { globalScene } from "#app/global-scene"; import { PlayerPokemon } from "#app/field/pokemon"; import type { Starter } from "#app/ui/starter-select-ui-handler"; @@ -8,7 +8,7 @@ import type { PokemonSpeciesForm } from "#app/data/pokemon-species"; import PokemonSpecies, { getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; import { speciesStarterCosts } from "#app/data/balance/starters"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; -import { Biome } from "#app/enums/biome"; +import { BiomeId } from "#enums/biome-id"; export interface DailyRunConfig { seed: number; @@ -34,7 +34,7 @@ export function getDailyRunStarters(seed: string): Starter[] { for (let s = 0; s < 3; s++) { const offset = 6 + s * 6; const starterSpeciesForm = getPokemonSpeciesForm( - Number.parseInt(seed.slice(offset, offset + 4)) as Species, + Number.parseInt(seed.slice(offset, offset + 4)) as SpeciesId, Number.parseInt(seed.slice(offset + 4, offset + 6)), ); starters.push(getDailyRunStarter(starterSpeciesForm, startingLevel)); @@ -50,7 +50,7 @@ export function getDailyRunStarters(seed: string): Starter[] { for (let c = 0; c < starterCosts.length; c++) { const cost = starterCosts[c]; const costSpecies = Object.keys(speciesStarterCosts) - .map(s => Number.parseInt(s) as Species) + .map(s => Number.parseInt(s) as SpeciesId) .filter(s => speciesStarterCosts[s] === cost); const randPkmSpecies = getPokemonSpecies(randSeedItem(costSpecies)); const starterSpecies = getPokemonSpecies( @@ -102,48 +102,48 @@ interface BiomeWeights { // Town and End are set to 0 however // And some other biomes were balanced +1/-1 based on average size of the total daily. const dailyBiomeWeights: BiomeWeights = { - [Biome.CAVE]: 3, - [Biome.LAKE]: 3, - [Biome.PLAINS]: 3, - [Biome.SNOWY_FOREST]: 3, - [Biome.SWAMP]: 3, // 2 -> 3 - [Biome.TALL_GRASS]: 3, // 2 -> 3 + [BiomeId.CAVE]: 3, + [BiomeId.LAKE]: 3, + [BiomeId.PLAINS]: 3, + [BiomeId.SNOWY_FOREST]: 3, + [BiomeId.SWAMP]: 3, // 2 -> 3 + [BiomeId.TALL_GRASS]: 3, // 2 -> 3 - [Biome.ABYSS]: 2, // 3 -> 2 - [Biome.RUINS]: 2, - [Biome.BADLANDS]: 2, - [Biome.BEACH]: 2, - [Biome.CONSTRUCTION_SITE]: 2, - [Biome.DESERT]: 2, - [Biome.DOJO]: 2, // 3 -> 2 - [Biome.FACTORY]: 2, - [Biome.FAIRY_CAVE]: 2, - [Biome.FOREST]: 2, - [Biome.GRASS]: 2, // 1 -> 2 - [Biome.MEADOW]: 2, - [Biome.MOUNTAIN]: 2, // 3 -> 2 - [Biome.SEA]: 2, - [Biome.SEABED]: 2, - [Biome.SLUM]: 2, - [Biome.TEMPLE]: 2, // 3 -> 2 - [Biome.VOLCANO]: 2, + [BiomeId.ABYSS]: 2, // 3 -> 2 + [BiomeId.RUINS]: 2, + [BiomeId.BADLANDS]: 2, + [BiomeId.BEACH]: 2, + [BiomeId.CONSTRUCTION_SITE]: 2, + [BiomeId.DESERT]: 2, + [BiomeId.DOJO]: 2, // 3 -> 2 + [BiomeId.FACTORY]: 2, + [BiomeId.FAIRY_CAVE]: 2, + [BiomeId.FOREST]: 2, + [BiomeId.GRASS]: 2, // 1 -> 2 + [BiomeId.MEADOW]: 2, + [BiomeId.MOUNTAIN]: 2, // 3 -> 2 + [BiomeId.SEA]: 2, + [BiomeId.SEABED]: 2, + [BiomeId.SLUM]: 2, + [BiomeId.TEMPLE]: 2, // 3 -> 2 + [BiomeId.VOLCANO]: 2, - [Biome.GRAVEYARD]: 1, - [Biome.ICE_CAVE]: 1, - [Biome.ISLAND]: 1, - [Biome.JUNGLE]: 1, - [Biome.LABORATORY]: 1, - [Biome.METROPOLIS]: 1, - [Biome.POWER_PLANT]: 1, - [Biome.SPACE]: 1, - [Biome.WASTELAND]: 1, + [BiomeId.GRAVEYARD]: 1, + [BiomeId.ICE_CAVE]: 1, + [BiomeId.ISLAND]: 1, + [BiomeId.JUNGLE]: 1, + [BiomeId.LABORATORY]: 1, + [BiomeId.METROPOLIS]: 1, + [BiomeId.POWER_PLANT]: 1, + [BiomeId.SPACE]: 1, + [BiomeId.WASTELAND]: 1, - [Biome.TOWN]: 0, - [Biome.END]: 0, + [BiomeId.TOWN]: 0, + [BiomeId.END]: 0, }; -export function getDailyStartingBiome(): Biome { - const biomes = getEnumValues(Biome).filter(b => b !== Biome.TOWN && b !== Biome.END); +export function getDailyStartingBiome(): BiomeId { + const biomes = getEnumValues(BiomeId).filter(b => b !== BiomeId.TOWN && b !== BiomeId.END); let totalWeight = 0; const biomeThresholds: number[] = []; diff --git a/src/data/egg.ts b/src/data/egg.ts index 0b7733bf199..67cdb7b1344 100644 --- a/src/data/egg.ts +++ b/src/data/egg.ts @@ -10,7 +10,7 @@ import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; import type { PlayerPokemon } from "#app/field/pokemon"; import i18next from "i18next"; import { EggTier } from "#enums/egg-type"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { EggSourceType } from "#enums/egg-source-types"; import { MANAPHY_EGG_MANAPHY_RATE, @@ -67,7 +67,7 @@ export interface IEggOptions { /** Sets how many waves it will take till this egg hatches. */ hatchWaves?: number; /** Sets the exact species that will hatch from this egg. */ - species?: Species; + species?: SpeciesId; /** Defines if the hatched pokemon will be a shiny. */ isShiny?: boolean; /** Defines the variant of the pokemon that will hatch from this egg. If no `variantTier` is given the normal variant rates will apply. */ @@ -94,7 +94,7 @@ export class Egg { private _hatchWaves: number; private _timestamp: number; - private _species: Species; + private _species: SpeciesId; private _isShiny: boolean; private _variantTier: VariantTier; private _eggMoveIndex: number; @@ -134,7 +134,7 @@ export class Egg { return this._timestamp; } - get species(): Species { + get species(): SpeciesId { return this._species; } @@ -221,8 +221,8 @@ export class Egg { public isManaphyEgg(): boolean { return ( - this._species === Species.PHIONE || - this._species === Species.MANAPHY || + this._species === SpeciesId.PHIONE || + this._species === SpeciesId.MANAPHY || (this._tier === EggTier.COMMON && !(this._id % 204) && !this._species) ); } @@ -247,8 +247,10 @@ export class Egg { let pokemonSpecies = getPokemonSpecies(this._species); // Special condition to have Phione eggs also have a chance of generating Manaphy - if (this._species === Species.PHIONE && this._sourceType === EggSourceType.SAME_SPECIES_EGG) { - pokemonSpecies = getPokemonSpecies(randSeedInt(MANAPHY_EGG_MANAPHY_RATE) ? Species.PHIONE : Species.MANAPHY); + if (this._species === SpeciesId.PHIONE && this._sourceType === EggSourceType.SAME_SPECIES_EGG) { + pokemonSpecies = getPokemonSpecies( + randSeedInt(MANAPHY_EGG_MANAPHY_RATE) ? SpeciesId.PHIONE : SpeciesId.MANAPHY, + ); } // Sets the hidden ability if a hidden ability exists and @@ -371,7 +373,7 @@ export class Egg { } private getEggTierDefaultHatchWaves(eggTier?: EggTier): number { - if (this._species === Species.PHIONE || this._species === Species.MANAPHY) { + if (this._species === SpeciesId.PHIONE || this._species === SpeciesId.MANAPHY) { return HATCH_WAVES_MANAPHY_EGG; } @@ -399,7 +401,7 @@ export class Egg { : EggTier.LEGENDARY; } - private rollSpecies(): Species | null { + private rollSpecies(): SpeciesId | null { if (!globalScene) { return null; } @@ -415,7 +417,7 @@ export class Egg { * check pass when Utils.randSeedInt(8) = 0, we can tell them apart during tests. */ const rand = randSeedInt(MANAPHY_EGG_MANAPHY_RATE) !== 1; - return rand ? Species.PHIONE : Species.MANAPHY; + return rand ? SpeciesId.PHIONE : SpeciesId.MANAPHY; } if (this.tier === EggTier.LEGENDARY && this._sourceType === EggSourceType.GACHA_LEGENDARY) { if (!randSeedInt(2)) { @@ -445,11 +447,11 @@ export class Egg { break; } - const ignoredSpecies = [Species.PHIONE, Species.MANAPHY, Species.ETERNATUS]; + const ignoredSpecies = [SpeciesId.PHIONE, SpeciesId.MANAPHY, SpeciesId.ETERNATUS]; let speciesPool = Object.keys(speciesEggTiers) .filter(s => speciesEggTiers[s] === this.tier) - .map(s => Number.parseInt(s) as Species) + .map(s => Number.parseInt(s) as SpeciesId) .filter( s => !pokemonPrevolutions.hasOwnProperty(s) && @@ -496,7 +498,7 @@ export class Egg { totalWeight += weight; } - let species: Species; + let species: SpeciesId; const rand = randSeedInt(totalWeight); for (let s = 0; s < speciesWeights.length; s++) { @@ -606,17 +608,17 @@ export class Egg { //// } -export function getValidLegendaryGachaSpecies(): Species[] { +export function getValidLegendaryGachaSpecies(): SpeciesId[] { return Object.entries(speciesEggTiers) .filter(s => s[1] === EggTier.LEGENDARY) .map(s => Number.parseInt(s[0])) - .filter(s => getPokemonSpecies(s).isObtainable() && s !== Species.ETERNATUS); + .filter(s => getPokemonSpecies(s).isObtainable() && s !== SpeciesId.ETERNATUS); } -export function getLegendaryGachaSpeciesForTimestamp(timestamp: number): Species { +export function getLegendaryGachaSpeciesForTimestamp(timestamp: number): SpeciesId { const legendarySpecies = getValidLegendaryGachaSpecies(); - let ret: Species; + let ret: SpeciesId; // 86400000 is the number of miliseconds in one day const timeDate = new Date(timestamp); diff --git a/src/data/moves/invalid-moves.ts b/src/data/moves/invalid-moves.ts index 025c0383f43..559b679752d 100644 --- a/src/data/moves/invalid-moves.ts +++ b/src/data/moves/invalid-moves.ts @@ -1,257 +1,257 @@ -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; -/** Set of moves that cannot be called by {@linkcode Moves.METRONOME Metronome} */ -export const invalidMetronomeMoves: ReadonlySet = new Set([ - Moves.AFTER_YOU, - Moves.ASSIST, - Moves.BANEFUL_BUNKER, - Moves.BEAK_BLAST, - Moves.BELCH, - Moves.BESTOW, - Moves.COMEUPPANCE, - Moves.COPYCAT, - Moves.COUNTER, - Moves.CRAFTY_SHIELD, - Moves.DESTINY_BOND, - Moves.DETECT, - Moves.ENDURE, - Moves.FEINT, - Moves.FOCUS_PUNCH, - Moves.FOLLOW_ME, - Moves.HELPING_HAND, - Moves.INSTRUCT, - Moves.KINGS_SHIELD, - Moves.MAT_BLOCK, - Moves.ME_FIRST, - Moves.METRONOME, - Moves.MIMIC, - Moves.MIRROR_COAT, - Moves.MIRROR_MOVE, - Moves.OBSTRUCT, - Moves.PROTECT, - Moves.QUASH, - Moves.QUICK_GUARD, - Moves.RAGE_POWDER, - Moves.REVIVAL_BLESSING, - Moves.SHELL_TRAP, - Moves.SILK_TRAP, - Moves.SKETCH, - Moves.SLEEP_TALK, - Moves.SNATCH, - Moves.SNORE, - Moves.SPIKY_SHIELD, - Moves.SPOTLIGHT, - Moves.STRUGGLE, - Moves.TRANSFORM, - Moves.WIDE_GUARD, +/** Set of moves that cannot be called by {@linkcode MoveId.METRONOME Metronome} */ +export const invalidMetronomeMoves: ReadonlySet = new Set([ + MoveId.AFTER_YOU, + MoveId.ASSIST, + MoveId.BANEFUL_BUNKER, + MoveId.BEAK_BLAST, + MoveId.BELCH, + MoveId.BESTOW, + MoveId.COMEUPPANCE, + MoveId.COPYCAT, + MoveId.COUNTER, + MoveId.CRAFTY_SHIELD, + MoveId.DESTINY_BOND, + MoveId.DETECT, + MoveId.ENDURE, + MoveId.FEINT, + MoveId.FOCUS_PUNCH, + MoveId.FOLLOW_ME, + MoveId.HELPING_HAND, + MoveId.INSTRUCT, + MoveId.KINGS_SHIELD, + MoveId.MAT_BLOCK, + MoveId.ME_FIRST, + MoveId.METRONOME, + MoveId.MIMIC, + MoveId.MIRROR_COAT, + MoveId.MIRROR_MOVE, + MoveId.OBSTRUCT, + MoveId.PROTECT, + MoveId.QUASH, + MoveId.QUICK_GUARD, + MoveId.RAGE_POWDER, + MoveId.REVIVAL_BLESSING, + MoveId.SHELL_TRAP, + MoveId.SILK_TRAP, + MoveId.SKETCH, + MoveId.SLEEP_TALK, + MoveId.SNATCH, + MoveId.SNORE, + MoveId.SPIKY_SHIELD, + MoveId.SPOTLIGHT, + MoveId.STRUGGLE, + MoveId.TRANSFORM, + MoveId.WIDE_GUARD, ]); -/** Set of moves that cannot be called by {@linkcode Moves.ASSIST Assist} */ -export const invalidAssistMoves: ReadonlySet = new Set([ - Moves.ASSIST, - Moves.BANEFUL_BUNKER, - Moves.BEAK_BLAST, - Moves.BELCH, - Moves.BESTOW, - Moves.BOUNCE, - Moves.CELEBRATE, - Moves.CHATTER, - Moves.CIRCLE_THROW, - Moves.COPYCAT, - Moves.COUNTER, - Moves.DESTINY_BOND, - Moves.DETECT, - Moves.DIG, - Moves.DIVE, - Moves.DRAGON_TAIL, - Moves.ENDURE, - Moves.FEINT, - Moves.FLY, - Moves.FOCUS_PUNCH, - Moves.FOLLOW_ME, - Moves.HELPING_HAND, - Moves.HOLD_HANDS, - Moves.KINGS_SHIELD, - Moves.MAT_BLOCK, - Moves.ME_FIRST, - Moves.METRONOME, - Moves.MIMIC, - Moves.MIRROR_COAT, - Moves.MIRROR_MOVE, - Moves.NATURE_POWER, - Moves.PHANTOM_FORCE, - Moves.PROTECT, - Moves.RAGE_POWDER, - Moves.ROAR, - Moves.SHADOW_FORCE, - Moves.SHELL_TRAP, - Moves.SKETCH, - Moves.SKY_DROP, - Moves.SLEEP_TALK, - Moves.SNATCH, - Moves.SPIKY_SHIELD, - Moves.SPOTLIGHT, - Moves.STRUGGLE, - Moves.SWITCHEROO, - Moves.TRANSFORM, - Moves.TRICK, - Moves.WHIRLWIND, +/** Set of moves that cannot be called by {@linkcode MoveId.ASSIST Assist} */ +export const invalidAssistMoves: ReadonlySet = new Set([ + MoveId.ASSIST, + MoveId.BANEFUL_BUNKER, + MoveId.BEAK_BLAST, + MoveId.BELCH, + MoveId.BESTOW, + MoveId.BOUNCE, + MoveId.CELEBRATE, + MoveId.CHATTER, + MoveId.CIRCLE_THROW, + MoveId.COPYCAT, + MoveId.COUNTER, + MoveId.DESTINY_BOND, + MoveId.DETECT, + MoveId.DIG, + MoveId.DIVE, + MoveId.DRAGON_TAIL, + MoveId.ENDURE, + MoveId.FEINT, + MoveId.FLY, + MoveId.FOCUS_PUNCH, + MoveId.FOLLOW_ME, + MoveId.HELPING_HAND, + MoveId.HOLD_HANDS, + MoveId.KINGS_SHIELD, + MoveId.MAT_BLOCK, + MoveId.ME_FIRST, + MoveId.METRONOME, + MoveId.MIMIC, + MoveId.MIRROR_COAT, + MoveId.MIRROR_MOVE, + MoveId.NATURE_POWER, + MoveId.PHANTOM_FORCE, + MoveId.PROTECT, + MoveId.RAGE_POWDER, + MoveId.ROAR, + MoveId.SHADOW_FORCE, + MoveId.SHELL_TRAP, + MoveId.SKETCH, + MoveId.SKY_DROP, + MoveId.SLEEP_TALK, + MoveId.SNATCH, + MoveId.SPIKY_SHIELD, + MoveId.SPOTLIGHT, + MoveId.STRUGGLE, + MoveId.SWITCHEROO, + MoveId.TRANSFORM, + MoveId.TRICK, + MoveId.WHIRLWIND, ]); -/** Set of moves that cannot be called by {@linkcode Moves.SLEEP_TALK Sleep Talk} */ -export const invalidSleepTalkMoves: ReadonlySet = new Set([ - Moves.ASSIST, - Moves.BELCH, - Moves.BEAK_BLAST, - Moves.BIDE, - Moves.BOUNCE, - Moves.COPYCAT, - Moves.DIG, - Moves.DIVE, - Moves.FREEZE_SHOCK, - Moves.FLY, - Moves.FOCUS_PUNCH, - Moves.GEOMANCY, - Moves.ICE_BURN, - Moves.ME_FIRST, - Moves.METRONOME, - Moves.MIRROR_MOVE, - Moves.MIMIC, - Moves.PHANTOM_FORCE, - Moves.RAZOR_WIND, - Moves.SHADOW_FORCE, - Moves.SHELL_TRAP, - Moves.SKETCH, - Moves.SKULL_BASH, - Moves.SKY_ATTACK, - Moves.SKY_DROP, - Moves.SLEEP_TALK, - Moves.SOLAR_BLADE, - Moves.SOLAR_BEAM, - Moves.STRUGGLE, - Moves.UPROAR, +/** Set of moves that cannot be called by {@linkcode MoveId.SLEEP_TALK Sleep Talk} */ +export const invalidSleepTalkMoves: ReadonlySet = new Set([ + MoveId.ASSIST, + MoveId.BELCH, + MoveId.BEAK_BLAST, + MoveId.BIDE, + MoveId.BOUNCE, + MoveId.COPYCAT, + MoveId.DIG, + MoveId.DIVE, + MoveId.FREEZE_SHOCK, + MoveId.FLY, + MoveId.FOCUS_PUNCH, + MoveId.GEOMANCY, + MoveId.ICE_BURN, + MoveId.ME_FIRST, + MoveId.METRONOME, + MoveId.MIRROR_MOVE, + MoveId.MIMIC, + MoveId.PHANTOM_FORCE, + MoveId.RAZOR_WIND, + MoveId.SHADOW_FORCE, + MoveId.SHELL_TRAP, + MoveId.SKETCH, + MoveId.SKULL_BASH, + MoveId.SKY_ATTACK, + MoveId.SKY_DROP, + MoveId.SLEEP_TALK, + MoveId.SOLAR_BLADE, + MoveId.SOLAR_BEAM, + MoveId.STRUGGLE, + MoveId.UPROAR, ]); -/** Set of moves that cannot be copied by {@linkcode Moves.COPYCAT Copycat} */ -export const invalidCopycatMoves: ReadonlySet = new Set([ - Moves.ASSIST, - Moves.BANEFUL_BUNKER, - Moves.BEAK_BLAST, - Moves.BESTOW, - Moves.CELEBRATE, - Moves.CHATTER, - Moves.CIRCLE_THROW, - Moves.COPYCAT, - Moves.COUNTER, - Moves.DESTINY_BOND, - Moves.DETECT, - Moves.DRAGON_TAIL, - Moves.ENDURE, - Moves.FEINT, - Moves.FOCUS_PUNCH, - Moves.FOLLOW_ME, - Moves.HELPING_HAND, - Moves.HOLD_HANDS, - Moves.KINGS_SHIELD, - Moves.MAT_BLOCK, - Moves.ME_FIRST, - Moves.METRONOME, - Moves.MIMIC, - Moves.MIRROR_COAT, - Moves.MIRROR_MOVE, - Moves.PROTECT, - Moves.RAGE_POWDER, - Moves.ROAR, - Moves.SHELL_TRAP, - Moves.SKETCH, - Moves.SLEEP_TALK, - Moves.SNATCH, - Moves.SPIKY_SHIELD, - Moves.SPOTLIGHT, - Moves.STRUGGLE, - Moves.SWITCHEROO, - Moves.TRANSFORM, - Moves.TRICK, - Moves.WHIRLWIND, +/** Set of moves that cannot be copied by {@linkcode MoveId.COPYCAT Copycat} */ +export const invalidCopycatMoves: ReadonlySet = new Set([ + MoveId.ASSIST, + MoveId.BANEFUL_BUNKER, + MoveId.BEAK_BLAST, + MoveId.BESTOW, + MoveId.CELEBRATE, + MoveId.CHATTER, + MoveId.CIRCLE_THROW, + MoveId.COPYCAT, + MoveId.COUNTER, + MoveId.DESTINY_BOND, + MoveId.DETECT, + MoveId.DRAGON_TAIL, + MoveId.ENDURE, + MoveId.FEINT, + MoveId.FOCUS_PUNCH, + MoveId.FOLLOW_ME, + MoveId.HELPING_HAND, + MoveId.HOLD_HANDS, + MoveId.KINGS_SHIELD, + MoveId.MAT_BLOCK, + MoveId.ME_FIRST, + MoveId.METRONOME, + MoveId.MIMIC, + MoveId.MIRROR_COAT, + MoveId.MIRROR_MOVE, + MoveId.PROTECT, + MoveId.RAGE_POWDER, + MoveId.ROAR, + MoveId.SHELL_TRAP, + MoveId.SKETCH, + MoveId.SLEEP_TALK, + MoveId.SNATCH, + MoveId.SPIKY_SHIELD, + MoveId.SPOTLIGHT, + MoveId.STRUGGLE, + MoveId.SWITCHEROO, + MoveId.TRANSFORM, + MoveId.TRICK, + MoveId.WHIRLWIND, ]); -export const invalidMirrorMoveMoves: ReadonlySet = new Set([ - Moves.ACUPRESSURE, - Moves.AFTER_YOU, - Moves.AROMATIC_MIST, - Moves.BEAK_BLAST, - Moves.BELCH, - Moves.CHILLY_RECEPTION, - Moves.COACHING, - Moves.CONVERSION_2, - Moves.COUNTER, - Moves.CRAFTY_SHIELD, - Moves.CURSE, - Moves.DECORATE, - Moves.DOODLE, - Moves.DOOM_DESIRE, - Moves.DRAGON_CHEER, - Moves.ELECTRIC_TERRAIN, - Moves.FINAL_GAMBIT, - Moves.FLORAL_HEALING, - Moves.FLOWER_SHIELD, - Moves.FOCUS_PUNCH, - Moves.FUTURE_SIGHT, - Moves.GEAR_UP, - Moves.GRASSY_TERRAIN, - Moves.GRAVITY, - Moves.GUARD_SPLIT, - Moves.HAIL, - Moves.HAZE, - Moves.HEAL_PULSE, - Moves.HELPING_HAND, - Moves.HOLD_HANDS, - Moves.INSTRUCT, - Moves.ION_DELUGE, - Moves.MAGNETIC_FLUX, - Moves.MAT_BLOCK, - Moves.ME_FIRST, - Moves.MIMIC, - Moves.MIRROR_COAT, - Moves.MIRROR_MOVE, - Moves.MIST, - Moves.MISTY_TERRAIN, - Moves.MUD_SPORT, - Moves.PERISH_SONG, - Moves.POWER_SPLIT, - Moves.PSYCH_UP, - Moves.PSYCHIC_TERRAIN, - Moves.PURIFY, - Moves.QUICK_GUARD, - Moves.RAIN_DANCE, - Moves.REFLECT_TYPE, - Moves.ROLE_PLAY, - Moves.ROTOTILLER, - Moves.SANDSTORM, - Moves.SHELL_TRAP, - Moves.SKETCH, - Moves.SNOWSCAPE, - Moves.SPIT_UP, - Moves.SPOTLIGHT, - Moves.STRUGGLE, - Moves.SUNNY_DAY, - Moves.TEATIME, - Moves.TRANSFORM, - Moves.WATER_SPORT, - Moves.WIDE_GUARD, +export const invalidMirrorMoveMoves: ReadonlySet = new Set([ + MoveId.ACUPRESSURE, + MoveId.AFTER_YOU, + MoveId.AROMATIC_MIST, + MoveId.BEAK_BLAST, + MoveId.BELCH, + MoveId.CHILLY_RECEPTION, + MoveId.COACHING, + MoveId.CONVERSION_2, + MoveId.COUNTER, + MoveId.CRAFTY_SHIELD, + MoveId.CURSE, + MoveId.DECORATE, + MoveId.DOODLE, + MoveId.DOOM_DESIRE, + MoveId.DRAGON_CHEER, + MoveId.ELECTRIC_TERRAIN, + MoveId.FINAL_GAMBIT, + MoveId.FLORAL_HEALING, + MoveId.FLOWER_SHIELD, + MoveId.FOCUS_PUNCH, + MoveId.FUTURE_SIGHT, + MoveId.GEAR_UP, + MoveId.GRASSY_TERRAIN, + MoveId.GRAVITY, + MoveId.GUARD_SPLIT, + MoveId.HAIL, + MoveId.HAZE, + MoveId.HEAL_PULSE, + MoveId.HELPING_HAND, + MoveId.HOLD_HANDS, + MoveId.INSTRUCT, + MoveId.ION_DELUGE, + MoveId.MAGNETIC_FLUX, + MoveId.MAT_BLOCK, + MoveId.ME_FIRST, + MoveId.MIMIC, + MoveId.MIRROR_COAT, + MoveId.MIRROR_MOVE, + MoveId.MIST, + MoveId.MISTY_TERRAIN, + MoveId.MUD_SPORT, + MoveId.PERISH_SONG, + MoveId.POWER_SPLIT, + MoveId.PSYCH_UP, + MoveId.PSYCHIC_TERRAIN, + MoveId.PURIFY, + MoveId.QUICK_GUARD, + MoveId.RAIN_DANCE, + MoveId.REFLECT_TYPE, + MoveId.ROLE_PLAY, + MoveId.ROTOTILLER, + MoveId.SANDSTORM, + MoveId.SHELL_TRAP, + MoveId.SKETCH, + MoveId.SNOWSCAPE, + MoveId.SPIT_UP, + MoveId.SPOTLIGHT, + MoveId.STRUGGLE, + MoveId.SUNNY_DAY, + MoveId.TEATIME, + MoveId.TRANSFORM, + MoveId.WATER_SPORT, + MoveId.WIDE_GUARD, ]); /** Set of moves that can never have their type overridden by an ability like Pixilate or Normalize * * Excludes tera blast and tera starstorm, as these are only conditionally forbidden */ -export const noAbilityTypeOverrideMoves: ReadonlySet = new Set([ - Moves.WEATHER_BALL, - Moves.JUDGMENT, - Moves.REVELATION_DANCE, - Moves.MULTI_ATTACK, - Moves.TERRAIN_PULSE, - Moves.NATURAL_GIFT, - Moves.TECHNO_BLAST, - Moves.HIDDEN_POWER, +export const noAbilityTypeOverrideMoves: ReadonlySet = new Set([ + MoveId.WEATHER_BALL, + MoveId.JUDGMENT, + MoveId.REVELATION_DANCE, + MoveId.MULTI_ATTACK, + MoveId.TERRAIN_PULSE, + MoveId.NATURAL_GIFT, + MoveId.TECHNO_BLAST, + MoveId.HIDDEN_POWER, ]); diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 8a0da5f35c2..7e9f99e28c1 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -83,12 +83,12 @@ import { Command } from "../../ui/command-ui-handler"; import i18next from "i18next"; import type { Localizable } from "#app/interfaces/locales"; import { getBerryEffectFunc } from "../berry"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Biome } from "#enums/biome"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { BiomeId } from "#enums/biome-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { MoveUsedEvent } from "#app/events/battle-scene"; import { BATTLE_STATS, @@ -128,7 +128,7 @@ type MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => boolean type UserMoveConditionFunc = (user: Pokemon, move: Move) => boolean; export default class Move implements Localizable { - public id: Moves; + public id: MoveId; public name: string; private _type: PokemonType; private _category: MoveCategory; @@ -147,7 +147,7 @@ export default class Move implements Localizable { private flags: number = 0; private nameAppend: string = ""; - constructor(id: Moves, type: PokemonType, category: MoveCategory, defaultMoveTarget: MoveTarget, power: number, accuracy: number, pp: number, chance: number, priority: number, generation: number) { + constructor(id: MoveId, type: PokemonType, category: MoveCategory, defaultMoveTarget: MoveTarget, power: number, accuracy: number, pp: number, chance: number, priority: number, generation: number) { this.id = id; this._type = type; this._category = category; @@ -177,7 +177,7 @@ export default class Move implements Localizable { } localize(): void { - const i18nKey = Moves[this.id].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join("") as unknown as string; + const i18nKey = MoveId[this.id].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join("") as unknown as string; this.name = this.id ? `${i18next.t(`move:${i18nKey}.name`)}${this.nameAppend}` : ""; this.effect = this.id ? `${i18next.t(`move:${i18nKey}.effect`)}${this.nameAppend}` : ""; @@ -332,7 +332,7 @@ export default class Move implements Localizable { } break; case PokemonType.DARK: - if (user.hasAbility(Abilities.PRANKSTER) && this.category === MoveCategory.STATUS && (user.isPlayer() !== target.isPlayer())) { + if (user.hasAbility(AbilityId.PRANKSTER) && this.category === MoveCategory.STATUS && (user.isPlayer() !== target.isPlayer())) { return true; } break; @@ -418,7 +418,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.MAKES_CONTACT} flag for the calling Move * @param setFlag Default `true`, set to `false` if the move doesn't make contact - * @see {@linkcode Abilities.STATIC} + * @see {@linkcode AbilityId.STATIC} * @returns The {@linkcode Move} that called this function */ makesContact(setFlag: boolean = true): this { @@ -428,7 +428,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.IGNORE_PROTECT} flag for the calling Move - * @see {@linkcode Moves.CURSE} + * @see {@linkcode MoveId.CURSE} * @returns The {@linkcode Move} that called this function */ ignoresProtect(): this { @@ -438,7 +438,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.SOUND_BASED} flag for the calling Move - * @see {@linkcode Moves.UPROAR} + * @see {@linkcode MoveId.UPROAR} * @returns The {@linkcode Move} that called this function */ soundBased(): this { @@ -448,7 +448,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.HIDE_USER} flag for the calling Move - * @see {@linkcode Moves.TELEPORT} + * @see {@linkcode MoveId.TELEPORT} * @returns The {@linkcode Move} that called this function */ hidesUser(): this { @@ -458,7 +458,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.HIDE_TARGET} flag for the calling Move - * @see {@linkcode Moves.WHIRLWIND} + * @see {@linkcode MoveId.WHIRLWIND} * @returns The {@linkcode Move} that called this function */ hidesTarget(): this { @@ -468,7 +468,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.BITING_MOVE} flag for the calling Move - * @see {@linkcode Moves.BITE} + * @see {@linkcode MoveId.BITE} * @returns The {@linkcode Move} that called this function */ bitingMove(): this { @@ -478,7 +478,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.PULSE_MOVE} flag for the calling Move - * @see {@linkcode Moves.WATER_PULSE} + * @see {@linkcode MoveId.WATER_PULSE} * @returns The {@linkcode Move} that called this function */ pulseMove(): this { @@ -488,7 +488,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.PUNCHING_MOVE} flag for the calling Move - * @see {@linkcode Moves.DRAIN_PUNCH} + * @see {@linkcode MoveId.DRAIN_PUNCH} * @returns The {@linkcode Move} that called this function */ punchingMove(): this { @@ -498,7 +498,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.SLICING_MOVE} flag for the calling Move - * @see {@linkcode Moves.X_SCISSOR} + * @see {@linkcode MoveId.X_SCISSOR} * @returns The {@linkcode Move} that called this function */ slicingMove(): this { @@ -508,7 +508,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.RECKLESS_MOVE} flag for the calling Move - * @see {@linkcode Abilities.RECKLESS} + * @see {@linkcode AbilityId.RECKLESS} * @returns The {@linkcode Move} that called this function */ recklessMove(): this { @@ -518,7 +518,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.BALLBOMB_MOVE} flag for the calling Move - * @see {@linkcode Moves.ELECTRO_BALL} + * @see {@linkcode MoveId.ELECTRO_BALL} * @returns The {@linkcode Move} that called this function */ ballBombMove(): this { @@ -528,7 +528,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.POWDER_MOVE} flag for the calling Move - * @see {@linkcode Moves.STUN_SPORE} + * @see {@linkcode MoveId.STUN_SPORE} * @returns The {@linkcode Move} that called this function */ powderMove(): this { @@ -538,7 +538,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.DANCE_MOVE} flag for the calling Move - * @see {@linkcode Moves.PETAL_DANCE} + * @see {@linkcode MoveId.PETAL_DANCE} * @returns The {@linkcode Move} that called this function */ danceMove(): this { @@ -548,7 +548,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.WIND_MOVE} flag for the calling Move - * @see {@linkcode Moves.HURRICANE} + * @see {@linkcode MoveId.HURRICANE} * @returns The {@linkcode Move} that called this function */ windMove(): this { @@ -558,7 +558,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.TRIAGE_MOVE} flag for the calling Move - * @see {@linkcode Moves.ABSORB} + * @see {@linkcode MoveId.ABSORB} * @returns The {@linkcode Move} that called this function */ triageMove(): this { @@ -568,7 +568,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.IGNORE_ABILITIES} flag for the calling Move - * @see {@linkcode Moves.SUNSTEEL_STRIKE} + * @see {@linkcode MoveId.SUNSTEEL_STRIKE} * @returns The {@linkcode Move} that called this function */ ignoresAbilities(): this { @@ -578,7 +578,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.CHECK_ALL_HITS} flag for the calling Move - * @see {@linkcode Moves.TRIPLE_AXEL} + * @see {@linkcode MoveId.TRIPLE_AXEL} * @returns The {@linkcode Move} that called this function */ checkAllHits(): this { @@ -588,7 +588,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.IGNORE_SUBSTITUTE} flag for the calling Move - * @see {@linkcode Moves.WHIRLWIND} + * @see {@linkcode MoveId.WHIRLWIND} * @returns The {@linkcode Move} that called this function */ ignoresSubstitute(): this { @@ -598,7 +598,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.REDIRECT_COUNTER} flag for the calling Move - * @see {@linkcode Moves.METAL_BURST} + * @see {@linkcode MoveId.METAL_BURST} * @returns The {@linkcode Move} that called this function */ redirectCounter(): this { @@ -608,7 +608,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.REFLECTABLE} flag for the calling Move - * @see {@linkcode Moves.ATTRACT} + * @see {@linkcode MoveId.ATTRACT} * @returns The {@linkcode Move} that called this function */ reflectable(): this { @@ -621,12 +621,12 @@ export default class Move implements Localizable { * * This method will take the `user`'s ability into account when reporting flags, e.g. * calling this method for {@linkcode MoveFlags.MAKES_CONTACT | MAKES_CONTACT} - * will return `false` if the user has a {@linkcode Abilities.LONG_REACH} that is not being suppressed. + * will return `false` if the user has a {@linkcode AbilityId.LONG_REACH} that is not being suppressed. * * **Note:** This method only checks if the move should have effectively have the flag applied to its use. * It does *not* check whether the flag will trigger related effects. * For example using this method to check {@linkcode MoveFlags.WIND_MOVE} - * will not consider {@linkcode Abilities.WIND_RIDER | Wind Rider }. + * will not consider {@linkcode AbilityId.WIND_RIDER | Wind Rider }. * * To simply check whether the move has a flag, use {@linkcode hasFlag}. * @param flag {@linkcode MoveFlags} MoveFlag to check on user and/or target @@ -880,9 +880,9 @@ export default class Move implements Localizable { calculateEffectivePower(): number { let effectivePower: number; // Triple axel and triple kick are easier to special case. - if (this.id === Moves.TRIPLE_AXEL) { + if (this.id === MoveId.TRIPLE_AXEL) { effectivePower = 94.14; - } else if (this.id === Moves.TRIPLE_KICK) { + } else if (this.id === MoveId.TRIPLE_KICK) { effectivePower = 47.07; } else { const multiHitAttr = this.getAttrs(MultiHitAttr)[0]; @@ -934,17 +934,17 @@ export default class Move implements Localizable { ]; // ...and cannot enhance these specific moves - const exceptMoves: Moves[] = [ - Moves.FLING, - Moves.UPROAR, - Moves.ROLLOUT, - Moves.ICE_BALL, - Moves.ENDEAVOR + const exceptMoves: MoveId[] = [ + MoveId.FLING, + MoveId.UPROAR, + MoveId.ROLLOUT, + MoveId.ICE_BALL, + MoveId.ENDEAVOR ]; // ...and cannot enhance Pollen Puff when targeting an ally. const ally = user.getAlly(); - const exceptPollenPuffAlly: boolean = this.id === Moves.POLLEN_PUFF && !isNullOrUndefined(ally) && targets.includes(ally.getBattlerIndex()) + const exceptPollenPuffAlly: boolean = this.id === MoveId.POLLEN_PUFF && !isNullOrUndefined(ally) && targets.includes(ally.getBattlerIndex()) return (!restrictSpread || !isMultiTarget) && !this.isChargingMove() @@ -956,7 +956,7 @@ export default class Move implements Localizable { } export class AttackMove extends Move { - constructor(id: Moves, type: PokemonType, category: MoveCategory, power: number, accuracy: number, pp: number, chance: number, priority: number, generation: number) { + constructor(id: MoveId, type: PokemonType, category: MoveCategory, power: number, accuracy: number, pp: number, chance: number, priority: number, generation: number) { super(id, type, category, MoveTarget.NEAR_OTHER, power, accuracy, pp, chance, priority, generation); /** @@ -1003,13 +1003,13 @@ export class AttackMove extends Move { } export class StatusMove extends Move { - constructor(id: Moves, type: PokemonType, accuracy: number, pp: number, chance: number, priority: number, generation: number) { + constructor(id: MoveId, type: PokemonType, accuracy: number, pp: number, chance: number, priority: number, generation: number) { super(id, type, MoveCategory.STATUS, MoveTarget.NEAR_OTHER, -1, accuracy, pp, chance, priority, generation); } } export class SelfStatusMove extends Move { - constructor(id: Moves, type: PokemonType, accuracy: number, pp: number, chance: number, priority: number, generation: number) { + constructor(id: MoveId, type: PokemonType, accuracy: number, pp: number, chance: number, priority: number, generation: number) { super(id, type, MoveCategory.STATUS, MoveTarget.USER, -1, accuracy, pp, chance, priority, generation); } } @@ -1019,7 +1019,7 @@ type SubMove = new (...args: any[]) => Move; function ChargeMove(Base: TBase) { return class extends Base { /** The animation to play during the move's charging phase */ - public readonly chargeAnim: ChargeAnim = ChargeAnim[`${Moves[this.id]}_CHARGING`]; + public readonly chargeAnim: ChargeAnim = ChargeAnim[`${MoveId[this.id]}_CHARGING`]; /** The message to show during the move's charging phase */ private _chargeText: string; @@ -1909,9 +1909,9 @@ export class PartyStatusCureAttr extends MoveEffectAttr { /** Message to display after using move */ private message: string | null; /** Skips mons with this ability, ie. Soundproof */ - private abilityCondition: Abilities; + private abilityCondition: AbilityId; - constructor(message: string | null, abilityCondition: Abilities) { + constructor(message: string | null, abilityCondition: AbilityId) { super(); this.message = message; @@ -2385,9 +2385,9 @@ export class MultiHitAttr extends MoveAttr { * the move's accuracy, and a number of situational parameters. * * @param move - The move that this attribtue is applied to - * @param partySize - The size of the user's party, used for {@linkcode Moves.BEAT_UP | Beat Up} (default: `1`) - * @param maxMultiHit - Whether the move should always hit the maximum number of times, e.g. due to {@linkcode Abilities.SKILL_LINK | Skill Link} (default: `false`) - * @param ignoreAcc - `true` if the move should ignore accuracy checks, e.g. due to {@linkcode Abilities.NO_GUARD | No Guard} (default: `false`) + * @param partySize - The size of the user's party, used for {@linkcode MoveId.BEAT_UP | Beat Up} (default: `1`) + * @param maxMultiHit - Whether the move should always hit the maximum number of times, e.g. due to {@linkcode AbilityId.SKILL_LINK | Skill Link} (default: `false`) + * @param ignoreAcc - `true` if the move should ignore accuracy checks, e.g. due to {@linkcode AbilityId.NO_GUARD | No Guard} (default: `false`) */ calculateExpectedHitCount(move: Move, { ignoreAcc = false, maxMultiHit = false, partySize = 1 }: {ignoreAcc?: boolean, maxMultiHit?: boolean, partySize?: number} = {}): number { let expectedHits: number; @@ -2430,7 +2430,7 @@ export class ChangeMultiHitTypeAttr extends MoveAttr { export class WaterShurikenMultiHitTypeAttr extends ChangeMultiHitTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - if (user.species.speciesId === Species.GRENINJA && user.hasAbility(Abilities.BATTLE_BOND) && user.formIndex === 2) { + if (user.species.speciesId === SpeciesId.GRENINJA && user.hasAbility(AbilityId.BATTLE_BOND) && user.formIndex === 2) { (args[0] as NumberHolder).value = MultiHitType._3; return true; } @@ -2512,7 +2512,7 @@ export class PsychoShiftEffectAttr extends MoveEffectAttr { * @returns `true` if Psycho Shift's effect is able to be applied to the target */ apply(user: Pokemon, target: Pokemon, _move: Move, _args: any[]): boolean { - const statusToApply: StatusEffect | undefined = user.status?.effect ?? (user.hasAbility(Abilities.COMATOSE) ? StatusEffect.SLEEP : undefined); + const statusToApply: StatusEffect | undefined = user.status?.effect ?? (user.hasAbility(AbilityId.COMATOSE) ? StatusEffect.SLEEP : undefined); if (target.status) { return false; @@ -2536,7 +2536,7 @@ export class PsychoShiftEffectAttr extends MoveEffectAttr { /** * Attribute to steal items upon this move's use. - * Used for {@linkcode Moves.THIEF} and {@linkcode Moves.COVET}. + * Used for {@linkcode MoveId.THIEF} and {@linkcode MoveId.COVET}. */ export class StealHeldItemChanceAttr extends MoveEffectAttr { private chance: number; @@ -2743,7 +2743,7 @@ export class EatBerryAttr extends MoveEffectAttr { /** * Attribute used for moves that steal and eat a random berry from the target. - * Used for {@linkcode Moves.PLUCK} & {@linkcode Moves.BUG_BITE}. + * Used for {@linkcode MoveId.PLUCK} & {@linkcode MoveId.BUG_BITE}. */ export class StealEatBerryAttr extends EatBerryAttr { constructor() { @@ -2816,7 +2816,7 @@ export class HealStatusEffectAttr extends MoveEffectAttr { // Special edge case for shield dust blocking Sparkling Aria curing burn const moveTargets = getMoveTargets(user, move.id); - if (target.hasAbilityWithAttr(IgnoreMoveEffectsAbAttr) && move.id === Moves.SPARKLING_ARIA && moveTargets.targets.length === 1) { + if (target.hasAbilityWithAttr(IgnoreMoveEffectsAbAttr) && move.id === MoveId.SPARKLING_ARIA && moveTargets.targets.length === 1) { return false; } @@ -3334,65 +3334,65 @@ export class SecretPowerAttr extends MoveEffectAttr { * Cave, Wasteland, Graveyard, Abyss, Space | Flinch * End | Def -1 * ``` - * @param biome - The current {@linkcode Biome} the battle is set in + * @param biome - The current {@linkcode BiomeId} the battle is set in * @returns the chosen secondary effect {@linkcode MoveEffectAttr} */ - private determineBiomeEffect(biome: Biome): MoveEffectAttr { + private determineBiomeEffect(biome: BiomeId): MoveEffectAttr { let secondaryEffect: MoveEffectAttr; switch (biome) { - case Biome.PLAINS: - case Biome.GRASS: - case Biome.TALL_GRASS: - case Biome.FOREST: - case Biome.JUNGLE: - case Biome.MEADOW: + case BiomeId.PLAINS: + case BiomeId.GRASS: + case BiomeId.TALL_GRASS: + case BiomeId.FOREST: + case BiomeId.JUNGLE: + case BiomeId.MEADOW: secondaryEffect = new StatusEffectAttr(StatusEffect.SLEEP, false); break; - case Biome.SWAMP: - case Biome.MOUNTAIN: - case Biome.TEMPLE: - case Biome.RUINS: + case BiomeId.SWAMP: + case BiomeId.MOUNTAIN: + case BiomeId.TEMPLE: + case BiomeId.RUINS: secondaryEffect = new StatStageChangeAttr([ Stat.SPD ], -1, false); break; - case Biome.ICE_CAVE: - case Biome.SNOWY_FOREST: + case BiomeId.ICE_CAVE: + case BiomeId.SNOWY_FOREST: secondaryEffect = new StatusEffectAttr(StatusEffect.FREEZE, false); break; - case Biome.VOLCANO: + case BiomeId.VOLCANO: secondaryEffect = new StatusEffectAttr(StatusEffect.BURN, false); break; - case Biome.FAIRY_CAVE: + case BiomeId.FAIRY_CAVE: secondaryEffect = new StatStageChangeAttr([ Stat.SPATK ], -1, false); break; - case Biome.DESERT: - case Biome.CONSTRUCTION_SITE: - case Biome.BEACH: - case Biome.ISLAND: - case Biome.BADLANDS: + case BiomeId.DESERT: + case BiomeId.CONSTRUCTION_SITE: + case BiomeId.BEACH: + case BiomeId.ISLAND: + case BiomeId.BADLANDS: secondaryEffect = new StatStageChangeAttr([ Stat.ACC ], -1, false); break; - case Biome.SEA: - case Biome.LAKE: - case Biome.SEABED: + case BiomeId.SEA: + case BiomeId.LAKE: + case BiomeId.SEABED: secondaryEffect = new StatStageChangeAttr([ Stat.ATK ], -1, false); break; - case Biome.CAVE: - case Biome.WASTELAND: - case Biome.GRAVEYARD: - case Biome.ABYSS: - case Biome.SPACE: + case BiomeId.CAVE: + case BiomeId.WASTELAND: + case BiomeId.GRAVEYARD: + case BiomeId.ABYSS: + case BiomeId.SPACE: secondaryEffect = new AddBattlerTagAttr(BattlerTagType.FLINCHED, false, true); break; - case Biome.END: + case BiomeId.END: secondaryEffect = new StatStageChangeAttr([ Stat.DEF ], -1, false); break; - case Biome.TOWN: - case Biome.METROPOLIS: - case Biome.SLUM: - case Biome.DOJO: - case Biome.FACTORY: - case Biome.LABORATORY: - case Biome.POWER_PLANT: + case BiomeId.TOWN: + case BiomeId.METROPOLIS: + case BiomeId.SLUM: + case BiomeId.DOJO: + case BiomeId.FACTORY: + case BiomeId.LABORATORY: + case BiomeId.POWER_PLANT: default: secondaryEffect = new StatusEffectAttr(StatusEffect.PARALYSIS, false); break; @@ -3800,7 +3800,7 @@ export class DoublePowerChanceAttr extends VariablePowerAttr { } export abstract class ConsecutiveUsePowerMultiplierAttr extends MovePowerMultiplierAttr { - constructor(limit: number, resetOnFail: boolean, resetOnLimit?: boolean, ...comboMoves: Moves[]) { + constructor(limit: number, resetOnFail: boolean, resetOnLimit?: boolean, ...comboMoves: MoveId[]) { super((user: Pokemon, target: Pokemon, move: Move): number => { const moveHistory = user.getLastXMoves(limit + 1).slice(1); @@ -3810,7 +3810,7 @@ export abstract class ConsecutiveUsePowerMultiplierAttr extends MovePowerMultipl while ( ( (turnMove = moveHistory.shift())?.move === move.id - || (comboMoves.length && comboMoves.includes(turnMove?.move ?? Moves.NONE)) + || (comboMoves.length && comboMoves.includes(turnMove?.move ?? MoveId.NONE)) ) && (!resetOnFail || turnMove?.result === MoveResult.SUCCESS) ) { @@ -4133,7 +4133,7 @@ export class FriendshipPowerAttr extends VariablePowerAttr { } /** - * This Attribute calculates the current power of {@linkcode Moves.RAGE_FIST}. + * This Attribute calculates the current power of {@linkcode MoveId.RAGE_FIST}. * The counter for power calculation does not reset on every wave but on every new arena encounter. * Self-inflicted confusion damage and hits taken by a Subsitute are ignored. */ @@ -4237,7 +4237,7 @@ export class PresentPowerAttr extends VariablePowerAttr { export class WaterShurikenPowerAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - if (user.species.speciesId === Species.GRENINJA && user.hasAbility(Abilities.BATTLE_BOND) && user.formIndex === 2) { + if (user.species.speciesId === SpeciesId.GRENINJA && user.hasAbility(AbilityId.BATTLE_BOND) && user.formIndex === 2) { (args[0] as NumberHolder).value = 20; return true; } @@ -4350,9 +4350,9 @@ export class MultiHitPowerIncrementAttr extends VariablePowerAttr { */ export class LastMoveDoublePowerAttr extends VariablePowerAttr { /** The move that must precede the current move */ - private move: Moves; + private move: MoveId; - constructor(move: Moves) { + constructor(move: MoveId) { super(); this.move = move; @@ -4477,7 +4477,7 @@ export class CueNextRoundAttr extends MoveEffectAttr { override apply(user: Pokemon, target: Pokemon, move: Move, args?: any[]): boolean { const nextRoundPhase = globalScene.findPhase(phase => - phase instanceof MovePhase && phase.move.moveId === Moves.ROUND + phase instanceof MovePhase && phase.move.moveId === MoveId.ROUND ); if (!nextRoundPhase) { @@ -4518,7 +4518,7 @@ export class StatChangeBeforeDmgCalcAttr extends MoveAttr { /** * Steals the postitive Stat stages of the target before damage calculation so stat changes - * apply to damage calculation (e.g. {@linkcode Moves.SPECTRAL_THIEF}) + * apply to damage calculation (e.g. {@linkcode MoveId.SPECTRAL_THIEF}) * {@link https://bulbapedia.bulbagarden.net/wiki/Spectral_Thief_(move) | Spectral Thief} */ export class SpectralThiefAttr extends StatChangeBeforeDmgCalcAttr { @@ -4844,8 +4844,8 @@ export class FormChangeItemTypeAttr extends VariableMoveTypeAttr { return false; } - if ([ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(Species.ARCEUS) || [ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(Species.SILVALLY)) { - const form = user.species.speciesId === Species.ARCEUS || user.species.speciesId === Species.SILVALLY ? user.formIndex : user.fusionSpecies?.formIndex!; + if ([ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(SpeciesId.ARCEUS) || [ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(SpeciesId.SILVALLY)) { + const form = user.species.speciesId === SpeciesId.ARCEUS || user.species.speciesId === SpeciesId.SILVALLY ? user.formIndex : user.fusionSpecies?.formIndex!; moveType.value = PokemonType[PokemonType[form]]; return true; @@ -4867,8 +4867,8 @@ export class TechnoBlastTypeAttr extends VariableMoveTypeAttr { return false; } - if ([ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(Species.GENESECT)) { - const form = user.species.speciesId === Species.GENESECT ? user.formIndex : user.fusionSpecies?.formIndex; + if ([ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(SpeciesId.GENESECT)) { + const form = user.species.speciesId === SpeciesId.GENESECT ? user.formIndex : user.fusionSpecies?.formIndex; switch (form) { case 1: // Shock Drive @@ -4901,8 +4901,8 @@ export class AuraWheelTypeAttr extends VariableMoveTypeAttr { return false; } - if ([ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(Species.MORPEKO)) { - const form = user.species.speciesId === Species.MORPEKO ? user.formIndex : user.fusionSpecies?.formIndex; + if ([ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(SpeciesId.MORPEKO)) { + const form = user.species.speciesId === SpeciesId.MORPEKO ? user.formIndex : user.fusionSpecies?.formIndex; switch (form) { case 1: // Hangry Mode @@ -4926,8 +4926,8 @@ export class RagingBullTypeAttr extends VariableMoveTypeAttr { return false; } - if ([ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(Species.PALDEA_TAUROS)) { - const form = user.species.speciesId === Species.PALDEA_TAUROS ? user.formIndex : user.fusionSpecies?.formIndex; + if ([ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(SpeciesId.PALDEA_TAUROS)) { + const form = user.species.speciesId === SpeciesId.PALDEA_TAUROS ? user.formIndex : user.fusionSpecies?.formIndex; switch (form) { case 1: // Blaze breed @@ -4954,8 +4954,8 @@ export class IvyCudgelTypeAttr extends VariableMoveTypeAttr { return false; } - if ([ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(Species.OGERPON)) { - const form = user.species.speciesId === Species.OGERPON ? user.formIndex : user.fusionSpecies?.formIndex; + if ([ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(SpeciesId.OGERPON)) { + const form = user.species.speciesId === SpeciesId.OGERPON ? user.formIndex : user.fusionSpecies?.formIndex; switch (form) { case 1: // Wellspring Mask @@ -5139,7 +5139,7 @@ export class TeraStarstormTypeAttr extends VariableMoveTypeAttr { * @returns `true` if the move type is changed to {@linkcode PokemonType.STELLAR}, `false` otherwise */ override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - if (user.isTerastallized && user.hasSpecies(Species.TERAPAGOS)) { + if (user.isTerastallized && user.hasSpecies(SpeciesId.TERAPAGOS)) { const moveType = args[0] as NumberHolder; moveType.value = PokemonType.STELLAR; @@ -5188,20 +5188,20 @@ export class CombinedPledgeTypeAttr extends VariableMoveTypeAttr { } switch (move.id) { - case Moves.FIRE_PLEDGE: - if (combinedPledgeMove === Moves.WATER_PLEDGE) { + case MoveId.FIRE_PLEDGE: + if (combinedPledgeMove === MoveId.WATER_PLEDGE) { moveType.value = PokemonType.WATER; return true; } return false; - case Moves.WATER_PLEDGE: - if (combinedPledgeMove === Moves.GRASS_PLEDGE) { + case MoveId.WATER_PLEDGE: + if (combinedPledgeMove === MoveId.GRASS_PLEDGE) { moveType.value = PokemonType.GRASS; return true; } return false; - case Moves.GRASS_PLEDGE: - if (combinedPledgeMove === Moves.FIRE_PLEDGE) { + case MoveId.GRASS_PLEDGE: + if (combinedPledgeMove === MoveId.FIRE_PLEDGE) { moveType.value = PokemonType.FIRE; return true; } @@ -5616,7 +5616,7 @@ export class GulpMissileTagAttr extends MoveEffectAttr { return false; } - if (user.hasAbility(Abilities.GULP_MISSILE) && user.species.speciesId === Species.CRAMORANT) { + if (user.hasAbility(AbilityId.GULP_MISSILE) && user.species.speciesId === SpeciesId.CRAMORANT) { if (user.getHpRatio() >= .5) { user.addTag(BattlerTagType.GULP_MISSILE_ARROKUDA, 0, move.id); } else { @@ -5629,7 +5629,7 @@ export class GulpMissileTagAttr extends MoveEffectAttr { } getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { - const isCramorant = user.hasAbility(Abilities.GULP_MISSILE) && user.species.speciesId === Species.CRAMORANT; + const isCramorant = user.hasAbility(AbilityId.GULP_MISSILE) && user.species.speciesId === SpeciesId.CRAMORANT; return isCramorant && !user.getTag(GulpMissileTag) ? 10 : 0; } } @@ -5786,7 +5786,7 @@ export class ProtectAttr extends AddBattlerTagAttr { while (moveHistory.length) { turnMove = moveHistory.shift(); - if (!allMoves[turnMove?.move ?? Moves.NONE].hasAttr(ProtectAttr) || turnMove?.result !== MoveResult.SUCCESS) { + if (!allMoves[turnMove?.move ?? MoveId.NONE].hasAttr(ProtectAttr) || turnMove?.result !== MoveResult.SUCCESS) { break; } timesUsed++; @@ -6119,9 +6119,9 @@ export class SwapArenaTagsAttr extends MoveEffectAttr { * are combined. The effect added varies based on the two Pledge moves combined. */ export class AddPledgeEffectAttr extends AddArenaTagAttr { - private readonly requiredPledge: Moves; + private readonly requiredPledge: MoveId; - constructor(tagType: ArenaTagType, requiredPledge: Moves, selfSideTarget: boolean = false) { + constructor(tagType: ArenaTagType, requiredPledge: MoveId, selfSideTarget: boolean = false) { super(tagType, 4, false, selfSideTarget); this.requiredPledge = requiredPledge; @@ -6241,7 +6241,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { * If it did, the user of U-turn or Volt Switch will not be switched out. */ if (target.getAbility().hasAttr(PostDamageForceSwitchAbAttr) - && [ Moves.U_TURN, Moves.VOLT_SWITCH, Moves.FLIP_TURN ].includes(move.id) + && [ MoveId.U_TURN, MoveId.VOLT_SWITCH, MoveId.FLIP_TURN ].includes(move.id) ) { if (this.hpDroppedBelowHalf(target)) { return false; @@ -6337,7 +6337,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { * If it did, the user of U-turn or Volt Switch will not be switched out. */ if (target.getAbility().hasAttr(PostDamageForceSwitchAbAttr) - && [ Moves.U_TURN, Moves.VOLT_SWITCH, Moves.FLIP_TURN ].includes(move.id) + && [ MoveId.U_TURN, MoveId.VOLT_SWITCH, MoveId.FLIP_TURN ].includes(move.id) ) { if (this.hpDroppedBelowHalf(target)) { return false; @@ -6593,63 +6593,63 @@ export class CopyBiomeTypeAttr extends MoveEffectAttr { /** * Retrieves a type from the current biome - * @param biomeType {@linkcode Biome} + * @param biomeType {@linkcode BiomeId} * @returns {@linkcode Type} */ - private getTypeForBiome(biomeType: Biome): PokemonType { + private getTypeForBiome(biomeType: BiomeId): PokemonType { switch (biomeType) { - case Biome.TOWN: - case Biome.PLAINS: - case Biome.METROPOLIS: + case BiomeId.TOWN: + case BiomeId.PLAINS: + case BiomeId.METROPOLIS: return PokemonType.NORMAL; - case Biome.GRASS: - case Biome.TALL_GRASS: + case BiomeId.GRASS: + case BiomeId.TALL_GRASS: return PokemonType.GRASS; - case Biome.FOREST: - case Biome.JUNGLE: + case BiomeId.FOREST: + case BiomeId.JUNGLE: return PokemonType.BUG; - case Biome.SLUM: - case Biome.SWAMP: + case BiomeId.SLUM: + case BiomeId.SWAMP: return PokemonType.POISON; - case Biome.SEA: - case Biome.BEACH: - case Biome.LAKE: - case Biome.SEABED: + case BiomeId.SEA: + case BiomeId.BEACH: + case BiomeId.LAKE: + case BiomeId.SEABED: return PokemonType.WATER; - case Biome.MOUNTAIN: + case BiomeId.MOUNTAIN: return PokemonType.FLYING; - case Biome.BADLANDS: + case BiomeId.BADLANDS: return PokemonType.GROUND; - case Biome.CAVE: - case Biome.DESERT: + case BiomeId.CAVE: + case BiomeId.DESERT: return PokemonType.ROCK; - case Biome.ICE_CAVE: - case Biome.SNOWY_FOREST: + case BiomeId.ICE_CAVE: + case BiomeId.SNOWY_FOREST: return PokemonType.ICE; - case Biome.MEADOW: - case Biome.FAIRY_CAVE: - case Biome.ISLAND: + case BiomeId.MEADOW: + case BiomeId.FAIRY_CAVE: + case BiomeId.ISLAND: return PokemonType.FAIRY; - case Biome.POWER_PLANT: + case BiomeId.POWER_PLANT: return PokemonType.ELECTRIC; - case Biome.VOLCANO: + case BiomeId.VOLCANO: return PokemonType.FIRE; - case Biome.GRAVEYARD: - case Biome.TEMPLE: + case BiomeId.GRAVEYARD: + case BiomeId.TEMPLE: return PokemonType.GHOST; - case Biome.DOJO: - case Biome.CONSTRUCTION_SITE: + case BiomeId.DOJO: + case BiomeId.CONSTRUCTION_SITE: return PokemonType.FIGHTING; - case Biome.FACTORY: - case Biome.LABORATORY: + case BiomeId.FACTORY: + case BiomeId.LABORATORY: return PokemonType.STEEL; - case Biome.RUINS: - case Biome.SPACE: + case BiomeId.RUINS: + case BiomeId.SPACE: return PokemonType.PSYCHIC; - case Biome.WASTELAND: - case Biome.END: + case BiomeId.WASTELAND: + case BiomeId.END: return PokemonType.DRAGON; - case Biome.ABYSS: + case BiomeId.ABYSS: return PokemonType.DARK; default: return PokemonType.UNKNOWN; @@ -6676,7 +6676,7 @@ export class ChangeTypeAttr extends MoveEffectAttr { } getCondition(): MoveConditionFunc { - return (user, target, move) => !target.isTerastallized && !target.hasAbility(Abilities.MULTITYPE) && !target.hasAbility(Abilities.RKS_SYSTEM) && !(target.getTypes().length === 1 && target.getTypes()[0] === this.type); + return (user, target, move) => !target.isTerastallized && !target.hasAbility(AbilityId.MULTITYPE) && !target.hasAbility(AbilityId.RKS_SYSTEM) && !(target.getTypes().length === 1 && target.getTypes()[0] === this.type); } } @@ -6728,7 +6728,7 @@ export class FirstMoveTypeAttr extends MoveEffectAttr { * @extends OverrideMoveEffectAttr */ class CallMoveAttr extends OverrideMoveEffectAttr { - protected invalidMoves: ReadonlySet; + protected invalidMoves: ReadonlySet; protected hasTarget: boolean; apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const replaceMoveTarget = move.moveTarget === MoveTarget.NEAR_OTHER ? MoveTarget.NEAR_ENEMY : undefined; @@ -6750,12 +6750,12 @@ class CallMoveAttr extends OverrideMoveEffectAttr { /** * Attribute used to call a random move. - * Used for {@linkcode Moves.METRONOME} + * Used for {@linkcode MoveId.METRONOME} * @see {@linkcode apply} for move selection and move call * @extends CallMoveAttr to call a selected move */ export class RandomMoveAttr extends CallMoveAttr { - constructor(invalidMoves: ReadonlySet) { + constructor(invalidMoves: ReadonlySet) { super(); this.invalidMoves = invalidMoves; } @@ -6763,7 +6763,7 @@ export class RandomMoveAttr extends CallMoveAttr { /** * This function exists solely to allow tests to override the randomly selected move by mocking this function. */ - public getMoveOverride(): Moves | null { + public getMoveOverride(): MoveId | null { return null; } @@ -6777,19 +6777,19 @@ export class RandomMoveAttr extends CallMoveAttr { * @param args Unused */ override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const moveIds = getEnumValues(Moves).map(m => !this.invalidMoves.has(m) && !allMoves[m].name.endsWith(" (N)") ? m : Moves.NONE); - let moveId: Moves = Moves.NONE; + const moveIds = getEnumValues(MoveId).map(m => !this.invalidMoves.has(m) && !allMoves[m].name.endsWith(" (N)") ? m : MoveId.NONE); + let moveId: MoveId = MoveId.NONE; do { moveId = this.getMoveOverride() ?? moveIds[user.randBattleSeedInt(moveIds.length)]; } - while (moveId === Moves.NONE); + while (moveId === MoveId.NONE); return super.apply(user, target, allMoves[moveId], args); } } /** * Attribute used to call a random move in the user or party's moveset. - * Used for {@linkcode Moves.ASSIST} and {@linkcode Moves.SLEEP_TALK} + * Used for {@linkcode MoveId.ASSIST} and {@linkcode MoveId.SLEEP_TALK} * * Fails if the user has no callable moves. * @@ -6800,7 +6800,7 @@ export class RandomMoveAttr extends CallMoveAttr { export class RandomMovesetMoveAttr extends CallMoveAttr { private includeParty: boolean; private moveId: number; - constructor(invalidMoves: ReadonlySet, includeParty: boolean = false) { + constructor(invalidMoves: ReadonlySet, includeParty: boolean = false) { super(); this.includeParty = includeParty; this.invalidMoves = invalidMoves; @@ -6845,128 +6845,128 @@ export class NaturePowerAttr extends OverrideMoveEffectAttr { // this allows terrains to 'override' the biome move case TerrainType.NONE: switch (globalScene.arena.biomeType) { - case Biome.TOWN: - moveId = Moves.ROUND; + case BiomeId.TOWN: + moveId = MoveId.ROUND; break; - case Biome.METROPOLIS: - moveId = Moves.TRI_ATTACK; + case BiomeId.METROPOLIS: + moveId = MoveId.TRI_ATTACK; break; - case Biome.SLUM: - moveId = Moves.SLUDGE_BOMB; + case BiomeId.SLUM: + moveId = MoveId.SLUDGE_BOMB; break; - case Biome.PLAINS: - moveId = Moves.SILVER_WIND; + case BiomeId.PLAINS: + moveId = MoveId.SILVER_WIND; break; - case Biome.GRASS: - moveId = Moves.GRASS_KNOT; + case BiomeId.GRASS: + moveId = MoveId.GRASS_KNOT; break; - case Biome.TALL_GRASS: - moveId = Moves.POLLEN_PUFF; + case BiomeId.TALL_GRASS: + moveId = MoveId.POLLEN_PUFF; break; - case Biome.MEADOW: - moveId = Moves.GIGA_DRAIN; + case BiomeId.MEADOW: + moveId = MoveId.GIGA_DRAIN; break; - case Biome.FOREST: - moveId = Moves.BUG_BUZZ; + case BiomeId.FOREST: + moveId = MoveId.BUG_BUZZ; break; - case Biome.JUNGLE: - moveId = Moves.LEAF_STORM; + case BiomeId.JUNGLE: + moveId = MoveId.LEAF_STORM; break; - case Biome.SEA: - moveId = Moves.HYDRO_PUMP; + case BiomeId.SEA: + moveId = MoveId.HYDRO_PUMP; break; - case Biome.SWAMP: - moveId = Moves.MUD_BOMB; + case BiomeId.SWAMP: + moveId = MoveId.MUD_BOMB; break; - case Biome.BEACH: - moveId = Moves.SCALD; + case BiomeId.BEACH: + moveId = MoveId.SCALD; break; - case Biome.LAKE: - moveId = Moves.BUBBLE_BEAM; + case BiomeId.LAKE: + moveId = MoveId.BUBBLE_BEAM; break; - case Biome.SEABED: - moveId = Moves.BRINE; + case BiomeId.SEABED: + moveId = MoveId.BRINE; break; - case Biome.ISLAND: - moveId = Moves.LEAF_TORNADO; + case BiomeId.ISLAND: + moveId = MoveId.LEAF_TORNADO; break; - case Biome.MOUNTAIN: - moveId = Moves.AIR_SLASH; + case BiomeId.MOUNTAIN: + moveId = MoveId.AIR_SLASH; break; - case Biome.BADLANDS: - moveId = Moves.EARTH_POWER; + case BiomeId.BADLANDS: + moveId = MoveId.EARTH_POWER; break; - case Biome.DESERT: - moveId = Moves.SCORCHING_SANDS; + case BiomeId.DESERT: + moveId = MoveId.SCORCHING_SANDS; break; - case Biome.WASTELAND: - moveId = Moves.DRAGON_PULSE; + case BiomeId.WASTELAND: + moveId = MoveId.DRAGON_PULSE; break; - case Biome.CONSTRUCTION_SITE: - moveId = Moves.STEEL_BEAM; + case BiomeId.CONSTRUCTION_SITE: + moveId = MoveId.STEEL_BEAM; break; - case Biome.CAVE: - moveId = Moves.POWER_GEM; + case BiomeId.CAVE: + moveId = MoveId.POWER_GEM; break; - case Biome.ICE_CAVE: - moveId = Moves.ICE_BEAM; + case BiomeId.ICE_CAVE: + moveId = MoveId.ICE_BEAM; break; - case Biome.SNOWY_FOREST: - moveId = Moves.FROST_BREATH; + case BiomeId.SNOWY_FOREST: + moveId = MoveId.FROST_BREATH; break; - case Biome.VOLCANO: - moveId = Moves.LAVA_PLUME; + case BiomeId.VOLCANO: + moveId = MoveId.LAVA_PLUME; break; - case Biome.GRAVEYARD: - moveId = Moves.SHADOW_BALL; + case BiomeId.GRAVEYARD: + moveId = MoveId.SHADOW_BALL; break; - case Biome.RUINS: - moveId = Moves.ANCIENT_POWER; + case BiomeId.RUINS: + moveId = MoveId.ANCIENT_POWER; break; - case Biome.TEMPLE: - moveId = Moves.EXTRASENSORY; + case BiomeId.TEMPLE: + moveId = MoveId.EXTRASENSORY; break; - case Biome.DOJO: - moveId = Moves.FOCUS_BLAST; + case BiomeId.DOJO: + moveId = MoveId.FOCUS_BLAST; break; - case Biome.FAIRY_CAVE: - moveId = Moves.ALLURING_VOICE; + case BiomeId.FAIRY_CAVE: + moveId = MoveId.ALLURING_VOICE; break; - case Biome.ABYSS: - moveId = Moves.OMINOUS_WIND; + case BiomeId.ABYSS: + moveId = MoveId.OMINOUS_WIND; break; - case Biome.SPACE: - moveId = Moves.DRACO_METEOR; + case BiomeId.SPACE: + moveId = MoveId.DRACO_METEOR; break; - case Biome.FACTORY: - moveId = Moves.FLASH_CANNON; + case BiomeId.FACTORY: + moveId = MoveId.FLASH_CANNON; break; - case Biome.LABORATORY: - moveId = Moves.ZAP_CANNON; + case BiomeId.LABORATORY: + moveId = MoveId.ZAP_CANNON; break; - case Biome.POWER_PLANT: - moveId = Moves.CHARGE_BEAM; + case BiomeId.POWER_PLANT: + moveId = MoveId.CHARGE_BEAM; break; - case Biome.END: - moveId = Moves.ETERNABEAM; + case BiomeId.END: + moveId = MoveId.ETERNABEAM; break; } break; case TerrainType.MISTY: - moveId = Moves.MOONBLAST; + moveId = MoveId.MOONBLAST; break; case TerrainType.ELECTRIC: - moveId = Moves.THUNDERBOLT; + moveId = MoveId.THUNDERBOLT; break; case TerrainType.GRASSY: - moveId = Moves.ENERGY_BALL; + moveId = MoveId.ENERGY_BALL; break; case TerrainType.PSYCHIC: - moveId = Moves.PSYCHIC; + moveId = MoveId.PSYCHIC; break; default: // Just in case there's no match - moveId = Moves.TRI_ATTACK; + moveId = MoveId.TRI_ATTACK; break; } @@ -6979,13 +6979,13 @@ export class NaturePowerAttr extends OverrideMoveEffectAttr { /** * Attribute used to copy a previously-used move. - * Used for {@linkcode Moves.COPYCAT} and {@linkcode Moves.MIRROR_MOVE} + * Used for {@linkcode MoveId.COPYCAT} and {@linkcode MoveId.MIRROR_MOVE} * @see {@linkcode apply} for move selection and move call * @extends CallMoveAttr to call a selected move */ export class CopyMoveAttr extends CallMoveAttr { private mirrorMove: boolean; - constructor(mirrorMove: boolean, invalidMoves: ReadonlySet = new Set()) { + constructor(mirrorMove: boolean, invalidMoves: ReadonlySet = new Set()) { super(); this.mirrorMove = mirrorMove; this.invalidMoves = invalidMoves; @@ -7031,7 +7031,7 @@ export class RepeatMoveAttr extends MoveEffectAttr { */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { // get the last move used (excluding status based failures) as well as the corresponding moveset slot - const lastMove = target.getLastXMoves(-1).find(m => m.move !== Moves.NONE)!; + const lastMove = target.getLastXMoves(-1).find(m => m.move !== MoveId.NONE)!; const movesetMove = target.getMoveset().find(m => m.moveId === lastMove.move)!; // If the last move used can hit more than one target or has variable targets, // re-compute the targets for the attack @@ -7065,60 +7065,60 @@ export class RepeatMoveAttr extends MoveEffectAttr { getCondition(): MoveConditionFunc { return (user, target, move) => { - const lastMove = target.getLastXMoves(-1).find(m => m.move !== Moves.NONE); + const lastMove = target.getLastXMoves(-1).find(m => m.move !== MoveId.NONE); const movesetMove = target.getMoveset().find(m => m.moveId === lastMove?.move); const uninstructableMoves = [ // Locking/Continually Executed moves - Moves.OUTRAGE, - Moves.RAGING_FURY, - Moves.ROLLOUT, - Moves.PETAL_DANCE, - Moves.THRASH, - Moves.ICE_BALL, + MoveId.OUTRAGE, + MoveId.RAGING_FURY, + MoveId.ROLLOUT, + MoveId.PETAL_DANCE, + MoveId.THRASH, + MoveId.ICE_BALL, // Multi-turn Moves - Moves.BIDE, - Moves.SHELL_TRAP, - Moves.BEAK_BLAST, - Moves.FOCUS_PUNCH, + MoveId.BIDE, + MoveId.SHELL_TRAP, + MoveId.BEAK_BLAST, + MoveId.FOCUS_PUNCH, // "First Turn Only" moves - Moves.FAKE_OUT, - Moves.FIRST_IMPRESSION, - Moves.MAT_BLOCK, + MoveId.FAKE_OUT, + MoveId.FIRST_IMPRESSION, + MoveId.MAT_BLOCK, // Moves with a recharge turn - Moves.HYPER_BEAM, - Moves.ETERNABEAM, - Moves.FRENZY_PLANT, - Moves.BLAST_BURN, - Moves.HYDRO_CANNON, - Moves.GIGA_IMPACT, - Moves.PRISMATIC_LASER, - Moves.ROAR_OF_TIME, - Moves.ROCK_WRECKER, - Moves.METEOR_ASSAULT, + MoveId.HYPER_BEAM, + MoveId.ETERNABEAM, + MoveId.FRENZY_PLANT, + MoveId.BLAST_BURN, + MoveId.HYDRO_CANNON, + MoveId.GIGA_IMPACT, + MoveId.PRISMATIC_LASER, + MoveId.ROAR_OF_TIME, + MoveId.ROCK_WRECKER, + MoveId.METEOR_ASSAULT, // Charging & 2-turn moves - Moves.DIG, - Moves.FLY, - Moves.BOUNCE, - Moves.SHADOW_FORCE, - Moves.PHANTOM_FORCE, - Moves.DIVE, - Moves.ELECTRO_SHOT, - Moves.ICE_BURN, - Moves.GEOMANCY, - Moves.FREEZE_SHOCK, - Moves.SKY_DROP, - Moves.SKY_ATTACK, - Moves.SKULL_BASH, - Moves.SOLAR_BEAM, - Moves.SOLAR_BLADE, - Moves.METEOR_BEAM, + MoveId.DIG, + MoveId.FLY, + MoveId.BOUNCE, + MoveId.SHADOW_FORCE, + MoveId.PHANTOM_FORCE, + MoveId.DIVE, + MoveId.ELECTRO_SHOT, + MoveId.ICE_BURN, + MoveId.GEOMANCY, + MoveId.FREEZE_SHOCK, + MoveId.SKY_DROP, + MoveId.SKY_ATTACK, + MoveId.SKULL_BASH, + MoveId.SOLAR_BEAM, + MoveId.SOLAR_BLADE, + MoveId.METEOR_BEAM, // Other moves - Moves.INSTRUCT, - Moves.KINGS_SHIELD, - Moves.SKETCH, - Moves.TRANSFORM, - Moves.MIMIC, - Moves.STRUGGLE, + MoveId.INSTRUCT, + MoveId.KINGS_SHIELD, + MoveId.SKETCH, + MoveId.TRANSFORM, + MoveId.MIMIC, + MoveId.STRUGGLE, // TODO: Add Max/G-Move blockage if or when they are implemented ]; @@ -7296,7 +7296,7 @@ export class MovesetCopyMoveAttr extends OverrideMoveEffectAttr { } /** - * Attribute for {@linkcode Moves.SKETCH} that causes the user to copy the opponent's last used move + * Attribute for {@linkcode MoveId.SKETCH} that causes the user to copy the opponent's last used move * This move copies the last used non-virtual move * e.g. if Metronome is used, it copies Metronome itself, not the virtual move called by Metronome * Fails if the opponent has not yet used a move. @@ -7322,7 +7322,7 @@ export class SketchAttr extends MoveEffectAttr { } const targetMove = target.getLastXMoves(-1) - .find(m => m.move !== Moves.NONE && m.move !== Moves.STRUGGLE && !m.virtual); + .find(m => m.move !== MoveId.NONE && m.move !== MoveId.STRUGGLE && !m.virtual); if (!targetMove) { return false; } @@ -7352,15 +7352,15 @@ export class SketchAttr extends MoveEffectAttr { } const unsketchableMoves = [ - Moves.CHATTER, - Moves.MIRROR_MOVE, - Moves.SLEEP_TALK, - Moves.STRUGGLE, - Moves.SKETCH, - Moves.REVIVAL_BLESSING, - Moves.TERA_STARSTORM, - Moves.BREAKNECK_BLITZ__PHYSICAL, - Moves.BREAKNECK_BLITZ__SPECIAL + MoveId.CHATTER, + MoveId.MIRROR_MOVE, + MoveId.SLEEP_TALK, + MoveId.STRUGGLE, + MoveId.SKETCH, + MoveId.REVIVAL_BLESSING, + MoveId.TERA_STARSTORM, + MoveId.BREAKNECK_BLITZ__PHYSICAL, + MoveId.BREAKNECK_BLITZ__SPECIAL ]; if (unsketchableMoves.includes(targetMove.move)) { @@ -7377,9 +7377,9 @@ export class SketchAttr extends MoveEffectAttr { } export class AbilityChangeAttr extends MoveEffectAttr { - public ability: Abilities; + public ability: AbilityId; - constructor(ability: Abilities, selfTarget?: boolean) { + constructor(ability: AbilityId, selfTarget?: boolean) { super(selfTarget); this.ability = ability; @@ -7496,7 +7496,7 @@ export class SwitchAbilitiesAttr extends MoveEffectAttr { } /** - * Attribute used for moves that suppress abilities like {@linkcode Moves.GASTRO_ACID}. + * Attribute used for moves that suppress abilities like {@linkcode MoveId.GASTRO_ACID}. * A suppressed ability cannot be activated. * * @extends MoveEffectAttr @@ -7528,7 +7528,7 @@ export class SuppressAbilitiesAttr extends MoveEffectAttr { /** * Applies the effects of {@linkcode SuppressAbilitiesAttr} if the target has already moved this turn. * @extends MoveEffectAttr - * @see {@linkcode Moves.CORE_ENFORCER} (the move which uses this effect) + * @see {@linkcode MoveId.CORE_ENFORCER} (the move which uses this effect) */ export class SuppressAbilitiesIfActedAttr extends MoveEffectAttr { /** @@ -7805,13 +7805,13 @@ export class StatusIfBoostedAttr extends MoveEffectAttr { /** * Attribute to fail move usage unless all of the user's other moves have been used at least once. - * Used by {@linkcode Moves.LAST_RESORT}. + * Used by {@linkcode MoveId.LAST_RESORT}. */ export class LastResortAttr extends MoveAttr { // TODO: Verify behavior as Bulbapedia page is _extremely_ poorly documented getCondition(): MoveConditionFunc { return (user: Pokemon, _target: Pokemon, move: Move) => { - const movesInMoveset = new Set(user.getMoveset().map(m => m.moveId)); + const movesInMoveset = new Set(user.getMoveset().map(m => m.moveId)); if (!movesInMoveset.delete(move.id) || !movesInMoveset.size) { return false; // Last resort fails if used when not in user's moveset or no other moves exist } @@ -7845,7 +7845,7 @@ export class VariableTargetAttr extends MoveAttr { } /** - * Attribute for {@linkcode Moves.AFTER_YOU} + * Attribute for {@linkcode MoveId.AFTER_YOU} * * [After You - Move | Bulbapedia](https://bulbapedia.bulbagarden.net/wiki/After_You_(move)) */ @@ -7855,7 +7855,7 @@ export class AfterYouAttr extends MoveEffectAttr { * * @param user {@linkcode Pokemon} that is using the move. * @param target {@linkcode Pokemon} that will move right after this move is used. - * @param move {@linkcode Move} {@linkcode Moves.AFTER_YOU} + * @param move {@linkcode Move} {@linkcode MoveId.AFTER_YOU} * @param _args N/A * @returns true */ @@ -7883,7 +7883,7 @@ export class ForceLastAttr extends MoveEffectAttr { * * @param user {@linkcode Pokemon} that is using the move. * @param target {@linkcode Pokemon} that will be forced to move last. - * @param move {@linkcode Move} {@linkcode Moves.QUASH} + * @param move {@linkcode Move} {@linkcode MoveId.QUASH} * @param _args N/A * @returns true */ @@ -7938,9 +7938,9 @@ const failIfDampCondition: MoveConditionFunc = (user, target, move) => { return !cancelled.value; }; -const userSleptOrComatoseCondition: MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => user.status?.effect === StatusEffect.SLEEP || user.hasAbility(Abilities.COMATOSE); +const userSleptOrComatoseCondition: MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => user.status?.effect === StatusEffect.SLEEP || user.hasAbility(AbilityId.COMATOSE); -const targetSleptOrComatoseCondition: MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => target.status?.effect === StatusEffect.SLEEP || target.hasAbility(Abilities.COMATOSE); +const targetSleptOrComatoseCondition: MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => target.status?.effect === StatusEffect.SLEEP || target.hasAbility(AbilityId.COMATOSE); const failIfLastCondition: MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => globalScene.phaseQueue.find(phase => phase instanceof MovePhase) !== undefined; @@ -8085,7 +8085,7 @@ export class HitsSameTypeAttr extends VariableMoveTypeMultiplierAttr { * Fails if the type is unknown or stellar * * TODO: - * If a move has its type changed (e.g. {@linkcode Moves.HIDDEN_POWER}), it will check the new type. + * If a move has its type changed (e.g. {@linkcode MoveId.HIDDEN_POWER}), it will check the new type. */ export class ResistLastMoveTypeAttr extends MoveEffectAttr { constructor() { @@ -8156,7 +8156,7 @@ export class ResistLastMoveTypeAttr extends MoveEffectAttr { /** * Drops the target's immunity to types it is immune to * and makes its evasiveness be ignored during accuracy - * checks. Used by: {@linkcode Moves.ODOR_SLEUTH | Odor Sleuth}, {@linkcode Moves.MIRACLE_EYE | Miracle Eye} and {@linkcode Moves.FORESIGHT | Foresight} + * checks. Used by: {@linkcode MoveId.ODOR_SLEUTH | Odor Sleuth}, {@linkcode MoveId.MIRACLE_EYE | Miracle Eye} and {@linkcode MoveId.FORESIGHT | Foresight} * * @extends AddBattlerTagAttr * @see {@linkcode apply} @@ -8193,7 +8193,7 @@ export type MoveTargetSet = { multiple: boolean; }; -export function getMoveTargets(user: Pokemon, move: Moves, replaceTarget?: MoveTarget): MoveTargetSet { +export function getMoveTargets(user: Pokemon, move: MoveId, replaceTarget?: MoveTarget): MoveTargetSet { const variableTarget = new NumberHolder(0); user.getOpponents(false).forEach(p => applyMoveAttrs(VariableTargetAttr, user, p, allMoves[move], variableTarget)); @@ -8261,420 +8261,420 @@ export function getMoveTargets(user: Pokemon, move: Moves, replaceTarget?: MoveT return { targets: set.filter(p => p?.isActive(true)).map(p => p.getBattlerIndex()).filter(t => t !== undefined), multiple }; } -export const selfStatLowerMoves: Moves[] = []; +export const selfStatLowerMoves: MoveId[] = []; export function initMoves() { allMoves.push( - new SelfStatusMove(Moves.NONE, PokemonType.NORMAL, MoveCategory.STATUS, -1, -1, 0, 1), - new AttackMove(Moves.POUND, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 35, -1, 0, 1), - new AttackMove(Moves.KARATE_CHOP, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 50, 100, 25, -1, 0, 1) + new SelfStatusMove(MoveId.NONE, PokemonType.NORMAL, MoveCategory.STATUS, -1, -1, 0, 1), + new AttackMove(MoveId.POUND, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 35, -1, 0, 1), + new AttackMove(MoveId.KARATE_CHOP, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 50, 100, 25, -1, 0, 1) .attr(HighCritAttr), - new AttackMove(Moves.DOUBLE_SLAP, PokemonType.NORMAL, MoveCategory.PHYSICAL, 15, 85, 10, -1, 0, 1) + new AttackMove(MoveId.DOUBLE_SLAP, PokemonType.NORMAL, MoveCategory.PHYSICAL, 15, 85, 10, -1, 0, 1) .attr(MultiHitAttr), - new AttackMove(Moves.COMET_PUNCH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 18, 85, 15, -1, 0, 1) + new AttackMove(MoveId.COMET_PUNCH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 18, 85, 15, -1, 0, 1) .attr(MultiHitAttr) .punchingMove(), - new AttackMove(Moves.MEGA_PUNCH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 80, 85, 20, -1, 0, 1) + new AttackMove(MoveId.MEGA_PUNCH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 80, 85, 20, -1, 0, 1) .punchingMove(), - new AttackMove(Moves.PAY_DAY, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 20, -1, 0, 1) + new AttackMove(MoveId.PAY_DAY, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 20, -1, 0, 1) .attr(MoneyAttr) .makesContact(false), - new AttackMove(Moves.FIRE_PUNCH, PokemonType.FIRE, MoveCategory.PHYSICAL, 75, 100, 15, 10, 0, 1) + new AttackMove(MoveId.FIRE_PUNCH, PokemonType.FIRE, MoveCategory.PHYSICAL, 75, 100, 15, 10, 0, 1) .attr(StatusEffectAttr, StatusEffect.BURN) .punchingMove(), - new AttackMove(Moves.ICE_PUNCH, PokemonType.ICE, MoveCategory.PHYSICAL, 75, 100, 15, 10, 0, 1) + new AttackMove(MoveId.ICE_PUNCH, PokemonType.ICE, MoveCategory.PHYSICAL, 75, 100, 15, 10, 0, 1) .attr(StatusEffectAttr, StatusEffect.FREEZE) .punchingMove(), - new AttackMove(Moves.THUNDER_PUNCH, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 75, 100, 15, 10, 0, 1) + new AttackMove(MoveId.THUNDER_PUNCH, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 75, 100, 15, 10, 0, 1) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .punchingMove(), - new AttackMove(Moves.SCRATCH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 35, -1, 0, 1), - new AttackMove(Moves.VISE_GRIP, PokemonType.NORMAL, MoveCategory.PHYSICAL, 55, 100, 30, -1, 0, 1), - new AttackMove(Moves.GUILLOTINE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 200, 30, 5, -1, 0, 1) + new AttackMove(MoveId.SCRATCH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 35, -1, 0, 1), + new AttackMove(MoveId.VISE_GRIP, PokemonType.NORMAL, MoveCategory.PHYSICAL, 55, 100, 30, -1, 0, 1), + new AttackMove(MoveId.GUILLOTINE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 200, 30, 5, -1, 0, 1) .attr(OneHitKOAttr) .attr(OneHitKOAccuracyAttr), - new ChargingAttackMove(Moves.RAZOR_WIND, PokemonType.NORMAL, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 1) + new ChargingAttackMove(MoveId.RAZOR_WIND, PokemonType.NORMAL, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 1) .chargeText(i18next.t("moveTriggers:whippedUpAWhirlwind", { pokemonName: "{USER}" })) .attr(HighCritAttr) .windMove() .target(MoveTarget.ALL_NEAR_ENEMIES), - new SelfStatusMove(Moves.SWORDS_DANCE, PokemonType.NORMAL, -1, 20, -1, 0, 1) + new SelfStatusMove(MoveId.SWORDS_DANCE, PokemonType.NORMAL, -1, 20, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.ATK ], 2, true) .danceMove(), - new AttackMove(Moves.CUT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 50, 95, 30, -1, 0, 1) + new AttackMove(MoveId.CUT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 50, 95, 30, -1, 0, 1) .slicingMove(), - new AttackMove(Moves.GUST, PokemonType.FLYING, MoveCategory.SPECIAL, 40, 100, 35, -1, 0, 1) + new AttackMove(MoveId.GUST, PokemonType.FLYING, MoveCategory.SPECIAL, 40, 100, 35, -1, 0, 1) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.FLYING) .windMove(), - new AttackMove(Moves.WING_ATTACK, PokemonType.FLYING, MoveCategory.PHYSICAL, 60, 100, 35, -1, 0, 1), - new StatusMove(Moves.WHIRLWIND, PokemonType.NORMAL, -1, 20, -1, -6, 1) + new AttackMove(MoveId.WING_ATTACK, PokemonType.FLYING, MoveCategory.PHYSICAL, 60, 100, 35, -1, 0, 1), + new StatusMove(MoveId.WHIRLWIND, PokemonType.NORMAL, -1, 20, -1, -6, 1) .attr(ForceSwitchOutAttr, false, SwitchType.FORCE_SWITCH) .ignoresSubstitute() .hidesTarget() .windMove() .reflectable(), - new ChargingAttackMove(Moves.FLY, PokemonType.FLYING, MoveCategory.PHYSICAL, 90, 95, 15, -1, 0, 1) + new ChargingAttackMove(MoveId.FLY, PokemonType.FLYING, MoveCategory.PHYSICAL, 90, 95, 15, -1, 0, 1) .chargeText(i18next.t("moveTriggers:flewUpHigh", { pokemonName: "{USER}" })) .chargeAttr(SemiInvulnerableAttr, BattlerTagType.FLYING) .condition(failOnGravityCondition), - new AttackMove(Moves.BIND, PokemonType.NORMAL, MoveCategory.PHYSICAL, 15, 85, 20, -1, 0, 1) + new AttackMove(MoveId.BIND, PokemonType.NORMAL, MoveCategory.PHYSICAL, 15, 85, 20, -1, 0, 1) .attr(TrapAttr, BattlerTagType.BIND), - new AttackMove(Moves.SLAM, PokemonType.NORMAL, MoveCategory.PHYSICAL, 80, 75, 20, -1, 0, 1), - new AttackMove(Moves.VINE_WHIP, PokemonType.GRASS, MoveCategory.PHYSICAL, 45, 100, 25, -1, 0, 1), - new AttackMove(Moves.STOMP, PokemonType.NORMAL, MoveCategory.PHYSICAL, 65, 100, 20, 30, 0, 1) + new AttackMove(MoveId.SLAM, PokemonType.NORMAL, MoveCategory.PHYSICAL, 80, 75, 20, -1, 0, 1), + new AttackMove(MoveId.VINE_WHIP, PokemonType.GRASS, MoveCategory.PHYSICAL, 45, 100, 25, -1, 0, 1), + new AttackMove(MoveId.STOMP, PokemonType.NORMAL, MoveCategory.PHYSICAL, 65, 100, 20, 30, 0, 1) .attr(AlwaysHitMinimizeAttr) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.MINIMIZED) .attr(FlinchAttr), - new AttackMove(Moves.DOUBLE_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 30, 100, 30, -1, 0, 1) + new AttackMove(MoveId.DOUBLE_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 30, 100, 30, -1, 0, 1) .attr(MultiHitAttr, MultiHitType._2), - new AttackMove(Moves.MEGA_KICK, PokemonType.NORMAL, MoveCategory.PHYSICAL, 120, 75, 5, -1, 0, 1), - new AttackMove(Moves.JUMP_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 95, 10, -1, 0, 1) + new AttackMove(MoveId.MEGA_KICK, PokemonType.NORMAL, MoveCategory.PHYSICAL, 120, 75, 5, -1, 0, 1), + new AttackMove(MoveId.JUMP_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 95, 10, -1, 0, 1) .attr(MissEffectAttr, crashDamageFunc) .attr(NoEffectAttr, crashDamageFunc) .condition(failOnGravityCondition) .recklessMove(), - new AttackMove(Moves.ROLLING_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 60, 85, 15, 30, 0, 1) + new AttackMove(MoveId.ROLLING_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 60, 85, 15, 30, 0, 1) .attr(FlinchAttr), - new StatusMove(Moves.SAND_ATTACK, PokemonType.GROUND, 100, 15, -1, 0, 1) + new StatusMove(MoveId.SAND_ATTACK, PokemonType.GROUND, 100, 15, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.ACC ], -1) .reflectable(), - new AttackMove(Moves.HEADBUTT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 15, 30, 0, 1) + new AttackMove(MoveId.HEADBUTT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 15, 30, 0, 1) .attr(FlinchAttr), - new AttackMove(Moves.HORN_ATTACK, PokemonType.NORMAL, MoveCategory.PHYSICAL, 65, 100, 25, -1, 0, 1), - new AttackMove(Moves.FURY_ATTACK, PokemonType.NORMAL, MoveCategory.PHYSICAL, 15, 85, 20, -1, 0, 1) + new AttackMove(MoveId.HORN_ATTACK, PokemonType.NORMAL, MoveCategory.PHYSICAL, 65, 100, 25, -1, 0, 1), + new AttackMove(MoveId.FURY_ATTACK, PokemonType.NORMAL, MoveCategory.PHYSICAL, 15, 85, 20, -1, 0, 1) .attr(MultiHitAttr), - new AttackMove(Moves.HORN_DRILL, PokemonType.NORMAL, MoveCategory.PHYSICAL, 200, 30, 5, -1, 0, 1) + new AttackMove(MoveId.HORN_DRILL, PokemonType.NORMAL, MoveCategory.PHYSICAL, 200, 30, 5, -1, 0, 1) .attr(OneHitKOAttr) .attr(OneHitKOAccuracyAttr), - new AttackMove(Moves.TACKLE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 35, -1, 0, 1), - new AttackMove(Moves.BODY_SLAM, PokemonType.NORMAL, MoveCategory.PHYSICAL, 85, 100, 15, 30, 0, 1) + new AttackMove(MoveId.TACKLE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 35, -1, 0, 1), + new AttackMove(MoveId.BODY_SLAM, PokemonType.NORMAL, MoveCategory.PHYSICAL, 85, 100, 15, 30, 0, 1) .attr(AlwaysHitMinimizeAttr) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.MINIMIZED) .attr(StatusEffectAttr, StatusEffect.PARALYSIS), - new AttackMove(Moves.WRAP, PokemonType.NORMAL, MoveCategory.PHYSICAL, 15, 90, 20, -1, 0, 1) + new AttackMove(MoveId.WRAP, PokemonType.NORMAL, MoveCategory.PHYSICAL, 15, 90, 20, -1, 0, 1) .attr(TrapAttr, BattlerTagType.WRAP), - new AttackMove(Moves.TAKE_DOWN, PokemonType.NORMAL, MoveCategory.PHYSICAL, 90, 85, 20, -1, 0, 1) + new AttackMove(MoveId.TAKE_DOWN, PokemonType.NORMAL, MoveCategory.PHYSICAL, 90, 85, 20, -1, 0, 1) .attr(RecoilAttr) .recklessMove(), - new AttackMove(Moves.THRASH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 120, 100, 10, -1, 0, 1) + new AttackMove(MoveId.THRASH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 120, 100, 10, -1, 0, 1) .attr(FrenzyAttr) .attr(MissEffectAttr, frenzyMissFunc) .attr(NoEffectAttr, frenzyMissFunc) .target(MoveTarget.RANDOM_NEAR_ENEMY), - new AttackMove(Moves.DOUBLE_EDGE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 120, 100, 15, -1, 0, 1) + new AttackMove(MoveId.DOUBLE_EDGE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 120, 100, 15, -1, 0, 1) .attr(RecoilAttr, false, 0.33) .recklessMove(), - new StatusMove(Moves.TAIL_WHIP, PokemonType.NORMAL, 100, 30, -1, 0, 1) + new StatusMove(MoveId.TAIL_WHIP, PokemonType.NORMAL, 100, 30, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.DEF ], -1) .target(MoveTarget.ALL_NEAR_ENEMIES) .reflectable(), - new AttackMove(Moves.POISON_STING, PokemonType.POISON, MoveCategory.PHYSICAL, 15, 100, 35, 30, 0, 1) + new AttackMove(MoveId.POISON_STING, PokemonType.POISON, MoveCategory.PHYSICAL, 15, 100, 35, 30, 0, 1) .attr(StatusEffectAttr, StatusEffect.POISON) .makesContact(false), - new AttackMove(Moves.TWINEEDLE, PokemonType.BUG, MoveCategory.PHYSICAL, 25, 100, 20, 20, 0, 1) + new AttackMove(MoveId.TWINEEDLE, PokemonType.BUG, MoveCategory.PHYSICAL, 25, 100, 20, 20, 0, 1) .attr(MultiHitAttr, MultiHitType._2) .attr(StatusEffectAttr, StatusEffect.POISON) .makesContact(false), - new AttackMove(Moves.PIN_MISSILE, PokemonType.BUG, MoveCategory.PHYSICAL, 25, 95, 20, -1, 0, 1) + new AttackMove(MoveId.PIN_MISSILE, PokemonType.BUG, MoveCategory.PHYSICAL, 25, 95, 20, -1, 0, 1) .attr(MultiHitAttr) .makesContact(false), - new StatusMove(Moves.LEER, PokemonType.NORMAL, 100, 30, -1, 0, 1) + new StatusMove(MoveId.LEER, PokemonType.NORMAL, 100, 30, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.DEF ], -1) .target(MoveTarget.ALL_NEAR_ENEMIES) .reflectable(), - new AttackMove(Moves.BITE, PokemonType.DARK, MoveCategory.PHYSICAL, 60, 100, 25, 30, 0, 1) + new AttackMove(MoveId.BITE, PokemonType.DARK, MoveCategory.PHYSICAL, 60, 100, 25, 30, 0, 1) .attr(FlinchAttr) .bitingMove(), - new StatusMove(Moves.GROWL, PokemonType.NORMAL, 100, 40, -1, 0, 1) + new StatusMove(MoveId.GROWL, PokemonType.NORMAL, 100, 40, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.ATK ], -1) .soundBased() .target(MoveTarget.ALL_NEAR_ENEMIES) .reflectable(), - new StatusMove(Moves.ROAR, PokemonType.NORMAL, -1, 20, -1, -6, 1) + new StatusMove(MoveId.ROAR, PokemonType.NORMAL, -1, 20, -1, -6, 1) .attr(ForceSwitchOutAttr, false, SwitchType.FORCE_SWITCH) .soundBased() .hidesTarget() .reflectable(), - new StatusMove(Moves.SING, PokemonType.NORMAL, 55, 15, -1, 0, 1) + new StatusMove(MoveId.SING, PokemonType.NORMAL, 55, 15, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.SLEEP) .soundBased() .reflectable(), - new StatusMove(Moves.SUPERSONIC, PokemonType.NORMAL, 55, 20, -1, 0, 1) + new StatusMove(MoveId.SUPERSONIC, PokemonType.NORMAL, 55, 20, -1, 0, 1) .attr(ConfuseAttr) .soundBased() .reflectable(), - new AttackMove(Moves.SONIC_BOOM, PokemonType.NORMAL, MoveCategory.SPECIAL, -1, 90, 20, -1, 0, 1) + new AttackMove(MoveId.SONIC_BOOM, PokemonType.NORMAL, MoveCategory.SPECIAL, -1, 90, 20, -1, 0, 1) .attr(FixedDamageAttr, 20), - new StatusMove(Moves.DISABLE, PokemonType.NORMAL, 100, 20, -1, 0, 1) + new StatusMove(MoveId.DISABLE, PokemonType.NORMAL, 100, 20, -1, 0, 1) .attr(AddBattlerTagAttr, BattlerTagType.DISABLED, false, true) .condition((user, target, move) => { const lastRealMove = target.getLastXMoves(-1).find(m => !m.virtual); - return !isNullOrUndefined(lastRealMove) && lastRealMove.move !== Moves.NONE && lastRealMove.move !== Moves.STRUGGLE; + return !isNullOrUndefined(lastRealMove) && lastRealMove.move !== MoveId.NONE && lastRealMove.move !== MoveId.STRUGGLE; }) .ignoresSubstitute() .reflectable(), - new AttackMove(Moves.ACID, PokemonType.POISON, MoveCategory.SPECIAL, 40, 100, 30, 10, 0, 1) + new AttackMove(MoveId.ACID, PokemonType.POISON, MoveCategory.SPECIAL, 40, 100, 30, 10, 0, 1) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -1) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.EMBER, PokemonType.FIRE, MoveCategory.SPECIAL, 40, 100, 25, 10, 0, 1) + new AttackMove(MoveId.EMBER, PokemonType.FIRE, MoveCategory.SPECIAL, 40, 100, 25, 10, 0, 1) .attr(StatusEffectAttr, StatusEffect.BURN), - new AttackMove(Moves.FLAMETHROWER, PokemonType.FIRE, MoveCategory.SPECIAL, 90, 100, 15, 10, 0, 1) + new AttackMove(MoveId.FLAMETHROWER, PokemonType.FIRE, MoveCategory.SPECIAL, 90, 100, 15, 10, 0, 1) .attr(StatusEffectAttr, StatusEffect.BURN), - new StatusMove(Moves.MIST, PokemonType.ICE, -1, 30, -1, 0, 1) + new StatusMove(MoveId.MIST, PokemonType.ICE, -1, 30, -1, 0, 1) .attr(AddArenaTagAttr, ArenaTagType.MIST, 5, true) .target(MoveTarget.USER_SIDE), - new AttackMove(Moves.WATER_GUN, PokemonType.WATER, MoveCategory.SPECIAL, 40, 100, 25, -1, 0, 1), - new AttackMove(Moves.HYDRO_PUMP, PokemonType.WATER, MoveCategory.SPECIAL, 110, 80, 5, -1, 0, 1), - new AttackMove(Moves.SURF, PokemonType.WATER, MoveCategory.SPECIAL, 90, 100, 15, -1, 0, 1) + new AttackMove(MoveId.WATER_GUN, PokemonType.WATER, MoveCategory.SPECIAL, 40, 100, 25, -1, 0, 1), + new AttackMove(MoveId.HYDRO_PUMP, PokemonType.WATER, MoveCategory.SPECIAL, 110, 80, 5, -1, 0, 1), + new AttackMove(MoveId.SURF, PokemonType.WATER, MoveCategory.SPECIAL, 90, 100, 15, -1, 0, 1) .target(MoveTarget.ALL_NEAR_OTHERS) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.UNDERWATER) .attr(GulpMissileTagAttr), - new AttackMove(Moves.ICE_BEAM, PokemonType.ICE, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 1) + new AttackMove(MoveId.ICE_BEAM, PokemonType.ICE, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 1) .attr(StatusEffectAttr, StatusEffect.FREEZE), - new AttackMove(Moves.BLIZZARD, PokemonType.ICE, MoveCategory.SPECIAL, 110, 70, 5, 10, 0, 1) + new AttackMove(MoveId.BLIZZARD, PokemonType.ICE, MoveCategory.SPECIAL, 110, 70, 5, 10, 0, 1) .attr(BlizzardAccuracyAttr) .attr(StatusEffectAttr, StatusEffect.FREEZE) .windMove() .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.PSYBEAM, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 65, 100, 20, 10, 0, 1) + new AttackMove(MoveId.PSYBEAM, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 65, 100, 20, 10, 0, 1) .attr(ConfuseAttr), - new AttackMove(Moves.BUBBLE_BEAM, PokemonType.WATER, MoveCategory.SPECIAL, 65, 100, 20, 10, 0, 1) + new AttackMove(MoveId.BUBBLE_BEAM, PokemonType.WATER, MoveCategory.SPECIAL, 65, 100, 20, 10, 0, 1) .attr(StatStageChangeAttr, [ Stat.SPD ], -1), - new AttackMove(Moves.AURORA_BEAM, PokemonType.ICE, MoveCategory.SPECIAL, 65, 100, 20, 10, 0, 1) + new AttackMove(MoveId.AURORA_BEAM, PokemonType.ICE, MoveCategory.SPECIAL, 65, 100, 20, 10, 0, 1) .attr(StatStageChangeAttr, [ Stat.ATK ], -1), - new AttackMove(Moves.HYPER_BEAM, PokemonType.NORMAL, MoveCategory.SPECIAL, 150, 90, 5, -1, 0, 1) + new AttackMove(MoveId.HYPER_BEAM, PokemonType.NORMAL, MoveCategory.SPECIAL, 150, 90, 5, -1, 0, 1) .attr(RechargeAttr), - new AttackMove(Moves.PECK, PokemonType.FLYING, MoveCategory.PHYSICAL, 35, 100, 35, -1, 0, 1), - new AttackMove(Moves.DRILL_PECK, PokemonType.FLYING, MoveCategory.PHYSICAL, 80, 100, 20, -1, 0, 1), - new AttackMove(Moves.SUBMISSION, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 80, 80, 20, -1, 0, 1) + new AttackMove(MoveId.PECK, PokemonType.FLYING, MoveCategory.PHYSICAL, 35, 100, 35, -1, 0, 1), + new AttackMove(MoveId.DRILL_PECK, PokemonType.FLYING, MoveCategory.PHYSICAL, 80, 100, 20, -1, 0, 1), + new AttackMove(MoveId.SUBMISSION, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 80, 80, 20, -1, 0, 1) .attr(RecoilAttr) .recklessMove(), - new AttackMove(Moves.LOW_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, -1, 100, 20, -1, 0, 1) + new AttackMove(MoveId.LOW_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, -1, 100, 20, -1, 0, 1) .attr(WeightPowerAttr), - new AttackMove(Moves.COUNTER, PokemonType.FIGHTING, MoveCategory.PHYSICAL, -1, 100, 20, -1, -5, 1) + new AttackMove(MoveId.COUNTER, PokemonType.FIGHTING, MoveCategory.PHYSICAL, -1, 100, 20, -1, -5, 1) .attr(CounterDamageAttr, (move: Move) => move.category === MoveCategory.PHYSICAL, 2) .target(MoveTarget.ATTACKER), - new AttackMove(Moves.SEISMIC_TOSS, PokemonType.FIGHTING, MoveCategory.PHYSICAL, -1, 100, 20, -1, 0, 1) + new AttackMove(MoveId.SEISMIC_TOSS, PokemonType.FIGHTING, MoveCategory.PHYSICAL, -1, 100, 20, -1, 0, 1) .attr(LevelDamageAttr), - new AttackMove(Moves.STRENGTH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 80, 100, 15, -1, 0, 1), - new AttackMove(Moves.ABSORB, PokemonType.GRASS, MoveCategory.SPECIAL, 20, 100, 25, -1, 0, 1) + new AttackMove(MoveId.STRENGTH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 80, 100, 15, -1, 0, 1), + new AttackMove(MoveId.ABSORB, PokemonType.GRASS, MoveCategory.SPECIAL, 20, 100, 25, -1, 0, 1) .attr(HitHealAttr) .triageMove(), - new AttackMove(Moves.MEGA_DRAIN, PokemonType.GRASS, MoveCategory.SPECIAL, 40, 100, 15, -1, 0, 1) + new AttackMove(MoveId.MEGA_DRAIN, PokemonType.GRASS, MoveCategory.SPECIAL, 40, 100, 15, -1, 0, 1) .attr(HitHealAttr) .triageMove(), - new StatusMove(Moves.LEECH_SEED, PokemonType.GRASS, 90, 10, -1, 0, 1) + new StatusMove(MoveId.LEECH_SEED, PokemonType.GRASS, 90, 10, -1, 0, 1) .attr(LeechSeedAttr) .condition((user, target, move) => !target.getTag(BattlerTagType.SEEDED) && !target.isOfType(PokemonType.GRASS)) .reflectable(), - new SelfStatusMove(Moves.GROWTH, PokemonType.NORMAL, -1, 20, -1, 0, 1) + new SelfStatusMove(MoveId.GROWTH, PokemonType.NORMAL, -1, 20, -1, 0, 1) .attr(GrowthStatStageChangeAttr), - new AttackMove(Moves.RAZOR_LEAF, PokemonType.GRASS, MoveCategory.PHYSICAL, 55, 95, 25, -1, 0, 1) + new AttackMove(MoveId.RAZOR_LEAF, PokemonType.GRASS, MoveCategory.PHYSICAL, 55, 95, 25, -1, 0, 1) .attr(HighCritAttr) .makesContact(false) .slicingMove() .target(MoveTarget.ALL_NEAR_ENEMIES), - new ChargingAttackMove(Moves.SOLAR_BEAM, PokemonType.GRASS, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 1) + new ChargingAttackMove(MoveId.SOLAR_BEAM, PokemonType.GRASS, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 1) .chargeText(i18next.t("moveTriggers:tookInSunlight", { pokemonName: "{USER}" })) .chargeAttr(WeatherInstantChargeAttr, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]) .attr(AntiSunlightPowerDecreaseAttr), - new StatusMove(Moves.POISON_POWDER, PokemonType.POISON, 75, 35, -1, 0, 1) + new StatusMove(MoveId.POISON_POWDER, PokemonType.POISON, 75, 35, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.POISON) .powderMove() .reflectable(), - new StatusMove(Moves.STUN_SPORE, PokemonType.GRASS, 75, 30, -1, 0, 1) + new StatusMove(MoveId.STUN_SPORE, PokemonType.GRASS, 75, 30, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .powderMove() .reflectable(), - new StatusMove(Moves.SLEEP_POWDER, PokemonType.GRASS, 75, 15, -1, 0, 1) + new StatusMove(MoveId.SLEEP_POWDER, PokemonType.GRASS, 75, 15, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.SLEEP) .powderMove() .reflectable(), - new AttackMove(Moves.PETAL_DANCE, PokemonType.GRASS, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 1) + new AttackMove(MoveId.PETAL_DANCE, PokemonType.GRASS, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 1) .attr(FrenzyAttr) .attr(MissEffectAttr, frenzyMissFunc) .attr(NoEffectAttr, frenzyMissFunc) .makesContact() .danceMove() .target(MoveTarget.RANDOM_NEAR_ENEMY), - new StatusMove(Moves.STRING_SHOT, PokemonType.BUG, 95, 40, -1, 0, 1) + new StatusMove(MoveId.STRING_SHOT, PokemonType.BUG, 95, 40, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.SPD ], -2) .target(MoveTarget.ALL_NEAR_ENEMIES) .reflectable(), - new AttackMove(Moves.DRAGON_RAGE, PokemonType.DRAGON, MoveCategory.SPECIAL, -1, 100, 10, -1, 0, 1) + new AttackMove(MoveId.DRAGON_RAGE, PokemonType.DRAGON, MoveCategory.SPECIAL, -1, 100, 10, -1, 0, 1) .attr(FixedDamageAttr, 40), - new AttackMove(Moves.FIRE_SPIN, PokemonType.FIRE, MoveCategory.SPECIAL, 35, 85, 15, -1, 0, 1) + new AttackMove(MoveId.FIRE_SPIN, PokemonType.FIRE, MoveCategory.SPECIAL, 35, 85, 15, -1, 0, 1) .attr(TrapAttr, BattlerTagType.FIRE_SPIN), - new AttackMove(Moves.THUNDER_SHOCK, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 40, 100, 30, 10, 0, 1) + new AttackMove(MoveId.THUNDER_SHOCK, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 40, 100, 30, 10, 0, 1) .attr(StatusEffectAttr, StatusEffect.PARALYSIS), - new AttackMove(Moves.THUNDERBOLT, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 90, 100, 15, 10, 0, 1) + new AttackMove(MoveId.THUNDERBOLT, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 90, 100, 15, 10, 0, 1) .attr(StatusEffectAttr, StatusEffect.PARALYSIS), - new StatusMove(Moves.THUNDER_WAVE, PokemonType.ELECTRIC, 90, 20, -1, 0, 1) + new StatusMove(MoveId.THUNDER_WAVE, PokemonType.ELECTRIC, 90, 20, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .attr(RespectAttackTypeImmunityAttr) .reflectable(), - new AttackMove(Moves.THUNDER, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 110, 70, 10, 30, 0, 1) + new AttackMove(MoveId.THUNDER, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 110, 70, 10, 30, 0, 1) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .attr(ThunderAccuracyAttr) .attr(HitsTagAttr, BattlerTagType.FLYING), - new AttackMove(Moves.ROCK_THROW, PokemonType.ROCK, MoveCategory.PHYSICAL, 50, 90, 15, -1, 0, 1) + new AttackMove(MoveId.ROCK_THROW, PokemonType.ROCK, MoveCategory.PHYSICAL, 50, 90, 15, -1, 0, 1) .makesContact(false), - new AttackMove(Moves.EARTHQUAKE, PokemonType.GROUND, MoveCategory.PHYSICAL, 100, 100, 10, -1, 0, 1) + new AttackMove(MoveId.EARTHQUAKE, PokemonType.GROUND, MoveCategory.PHYSICAL, 100, 100, 10, -1, 0, 1) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.UNDERGROUND) .attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1) .makesContact(false) .target(MoveTarget.ALL_NEAR_OTHERS), - new AttackMove(Moves.FISSURE, PokemonType.GROUND, MoveCategory.PHYSICAL, 200, 30, 5, -1, 0, 1) + new AttackMove(MoveId.FISSURE, PokemonType.GROUND, MoveCategory.PHYSICAL, 200, 30, 5, -1, 0, 1) .attr(OneHitKOAttr) .attr(OneHitKOAccuracyAttr) .attr(HitsTagAttr, BattlerTagType.UNDERGROUND) .makesContact(false), - new ChargingAttackMove(Moves.DIG, PokemonType.GROUND, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 1) + new ChargingAttackMove(MoveId.DIG, PokemonType.GROUND, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 1) .chargeText(i18next.t("moveTriggers:dugAHole", { pokemonName: "{USER}" })) .chargeAttr(SemiInvulnerableAttr, BattlerTagType.UNDERGROUND), - new StatusMove(Moves.TOXIC, PokemonType.POISON, 90, 10, -1, 0, 1) + new StatusMove(MoveId.TOXIC, PokemonType.POISON, 90, 10, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.TOXIC) .attr(ToxicAccuracyAttr) .reflectable(), - new AttackMove(Moves.CONFUSION, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 50, 100, 25, 10, 0, 1) + new AttackMove(MoveId.CONFUSION, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 50, 100, 25, 10, 0, 1) .attr(ConfuseAttr), - new AttackMove(Moves.PSYCHIC, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 1) + new AttackMove(MoveId.PSYCHIC, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 1) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -1), - new StatusMove(Moves.HYPNOSIS, PokemonType.PSYCHIC, 60, 20, -1, 0, 1) + new StatusMove(MoveId.HYPNOSIS, PokemonType.PSYCHIC, 60, 20, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.SLEEP) .reflectable(), - new SelfStatusMove(Moves.MEDITATE, PokemonType.PSYCHIC, -1, 40, -1, 0, 1) + new SelfStatusMove(MoveId.MEDITATE, PokemonType.PSYCHIC, -1, 40, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.ATK ], 1, true), - new SelfStatusMove(Moves.AGILITY, PokemonType.PSYCHIC, -1, 30, -1, 0, 1) + new SelfStatusMove(MoveId.AGILITY, PokemonType.PSYCHIC, -1, 30, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.SPD ], 2, true), - new AttackMove(Moves.QUICK_ATTACK, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 30, -1, 1, 1), - new AttackMove(Moves.RAGE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 20, 100, 20, -1, 0, 1) + new AttackMove(MoveId.QUICK_ATTACK, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 30, -1, 1, 1), + new AttackMove(MoveId.RAGE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 20, 100, 20, -1, 0, 1) .partial(), // No effect implemented - new SelfStatusMove(Moves.TELEPORT, PokemonType.PSYCHIC, -1, 20, -1, -6, 1) + new SelfStatusMove(MoveId.TELEPORT, PokemonType.PSYCHIC, -1, 20, -1, -6, 1) .attr(ForceSwitchOutAttr, true) .hidesUser(), - new AttackMove(Moves.NIGHT_SHADE, PokemonType.GHOST, MoveCategory.SPECIAL, -1, 100, 15, -1, 0, 1) + new AttackMove(MoveId.NIGHT_SHADE, PokemonType.GHOST, MoveCategory.SPECIAL, -1, 100, 15, -1, 0, 1) .attr(LevelDamageAttr), - new StatusMove(Moves.MIMIC, PokemonType.NORMAL, -1, 10, -1, 0, 1) + new StatusMove(MoveId.MIMIC, PokemonType.NORMAL, -1, 10, -1, 0, 1) .attr(MovesetCopyMoveAttr) .ignoresSubstitute(), - new StatusMove(Moves.SCREECH, PokemonType.NORMAL, 85, 40, -1, 0, 1) + new StatusMove(MoveId.SCREECH, PokemonType.NORMAL, 85, 40, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.DEF ], -2) .soundBased() .reflectable(), - new SelfStatusMove(Moves.DOUBLE_TEAM, PokemonType.NORMAL, -1, 15, -1, 0, 1) + new SelfStatusMove(MoveId.DOUBLE_TEAM, PokemonType.NORMAL, -1, 15, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.EVA ], 1, true), - new SelfStatusMove(Moves.RECOVER, PokemonType.NORMAL, -1, 5, -1, 0, 1) + new SelfStatusMove(MoveId.RECOVER, PokemonType.NORMAL, -1, 5, -1, 0, 1) .attr(HealAttr, 0.5) .triageMove(), - new SelfStatusMove(Moves.HARDEN, PokemonType.NORMAL, -1, 30, -1, 0, 1) + new SelfStatusMove(MoveId.HARDEN, PokemonType.NORMAL, -1, 30, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.DEF ], 1, true), - new SelfStatusMove(Moves.MINIMIZE, PokemonType.NORMAL, -1, 10, -1, 0, 1) + new SelfStatusMove(MoveId.MINIMIZE, PokemonType.NORMAL, -1, 10, -1, 0, 1) .attr(AddBattlerTagAttr, BattlerTagType.MINIMIZED, true, false) .attr(StatStageChangeAttr, [ Stat.EVA ], 2, true), - new StatusMove(Moves.SMOKESCREEN, PokemonType.NORMAL, 100, 20, -1, 0, 1) + new StatusMove(MoveId.SMOKESCREEN, PokemonType.NORMAL, 100, 20, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.ACC ], -1) .reflectable(), - new StatusMove(Moves.CONFUSE_RAY, PokemonType.GHOST, 100, 10, -1, 0, 1) + new StatusMove(MoveId.CONFUSE_RAY, PokemonType.GHOST, 100, 10, -1, 0, 1) .attr(ConfuseAttr) .reflectable(), - new SelfStatusMove(Moves.WITHDRAW, PokemonType.WATER, -1, 40, -1, 0, 1) + new SelfStatusMove(MoveId.WITHDRAW, PokemonType.WATER, -1, 40, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.DEF ], 1, true), - new SelfStatusMove(Moves.DEFENSE_CURL, PokemonType.NORMAL, -1, 40, -1, 0, 1) + new SelfStatusMove(MoveId.DEFENSE_CURL, PokemonType.NORMAL, -1, 40, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.DEF ], 1, true), - new SelfStatusMove(Moves.BARRIER, PokemonType.PSYCHIC, -1, 20, -1, 0, 1) + new SelfStatusMove(MoveId.BARRIER, PokemonType.PSYCHIC, -1, 20, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.DEF ], 2, true), - new StatusMove(Moves.LIGHT_SCREEN, PokemonType.PSYCHIC, -1, 30, -1, 0, 1) + new StatusMove(MoveId.LIGHT_SCREEN, PokemonType.PSYCHIC, -1, 30, -1, 0, 1) .attr(AddArenaTagAttr, ArenaTagType.LIGHT_SCREEN, 5, true) .target(MoveTarget.USER_SIDE), - new SelfStatusMove(Moves.HAZE, PokemonType.ICE, -1, 30, -1, 0, 1) + new SelfStatusMove(MoveId.HAZE, PokemonType.ICE, -1, 30, -1, 0, 1) .ignoresSubstitute() .attr(ResetStatsAttr, true), - new StatusMove(Moves.REFLECT, PokemonType.PSYCHIC, -1, 20, -1, 0, 1) + new StatusMove(MoveId.REFLECT, PokemonType.PSYCHIC, -1, 20, -1, 0, 1) .attr(AddArenaTagAttr, ArenaTagType.REFLECT, 5, true) .target(MoveTarget.USER_SIDE), - new SelfStatusMove(Moves.FOCUS_ENERGY, PokemonType.NORMAL, -1, 30, -1, 0, 1) + new SelfStatusMove(MoveId.FOCUS_ENERGY, PokemonType.NORMAL, -1, 30, -1, 0, 1) .attr(AddBattlerTagAttr, BattlerTagType.CRIT_BOOST, true, true), - new AttackMove(Moves.BIDE, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, -1, 10, -1, 1, 1) + new AttackMove(MoveId.BIDE, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, -1, 10, -1, 1, 1) .target(MoveTarget.USER) .unimplemented(), - new SelfStatusMove(Moves.METRONOME, PokemonType.NORMAL, -1, 10, -1, 0, 1) + new SelfStatusMove(MoveId.METRONOME, PokemonType.NORMAL, -1, 10, -1, 0, 1) .attr(RandomMoveAttr, invalidMetronomeMoves), - new StatusMove(Moves.MIRROR_MOVE, PokemonType.FLYING, -1, 20, -1, 0, 1) + new StatusMove(MoveId.MIRROR_MOVE, PokemonType.FLYING, -1, 20, -1, 0, 1) .attr(CopyMoveAttr, true, invalidMirrorMoveMoves), - new AttackMove(Moves.SELF_DESTRUCT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 200, 100, 5, -1, 0, 1) + new AttackMove(MoveId.SELF_DESTRUCT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 200, 100, 5, -1, 0, 1) .attr(SacrificialAttr) .makesContact(false) .condition(failIfDampCondition) .target(MoveTarget.ALL_NEAR_OTHERS), - new AttackMove(Moves.EGG_BOMB, PokemonType.NORMAL, MoveCategory.PHYSICAL, 100, 75, 10, -1, 0, 1) + new AttackMove(MoveId.EGG_BOMB, PokemonType.NORMAL, MoveCategory.PHYSICAL, 100, 75, 10, -1, 0, 1) .makesContact(false) .ballBombMove(), - new AttackMove(Moves.LICK, PokemonType.GHOST, MoveCategory.PHYSICAL, 30, 100, 30, 30, 0, 1) + new AttackMove(MoveId.LICK, PokemonType.GHOST, MoveCategory.PHYSICAL, 30, 100, 30, 30, 0, 1) .attr(StatusEffectAttr, StatusEffect.PARALYSIS), - new AttackMove(Moves.SMOG, PokemonType.POISON, MoveCategory.SPECIAL, 30, 70, 20, 40, 0, 1) + new AttackMove(MoveId.SMOG, PokemonType.POISON, MoveCategory.SPECIAL, 30, 70, 20, 40, 0, 1) .attr(StatusEffectAttr, StatusEffect.POISON), - new AttackMove(Moves.SLUDGE, PokemonType.POISON, MoveCategory.SPECIAL, 65, 100, 20, 30, 0, 1) + new AttackMove(MoveId.SLUDGE, PokemonType.POISON, MoveCategory.SPECIAL, 65, 100, 20, 30, 0, 1) .attr(StatusEffectAttr, StatusEffect.POISON), - new AttackMove(Moves.BONE_CLUB, PokemonType.GROUND, MoveCategory.PHYSICAL, 65, 85, 20, 10, 0, 1) + new AttackMove(MoveId.BONE_CLUB, PokemonType.GROUND, MoveCategory.PHYSICAL, 65, 85, 20, 10, 0, 1) .attr(FlinchAttr) .makesContact(false), - new AttackMove(Moves.FIRE_BLAST, PokemonType.FIRE, MoveCategory.SPECIAL, 110, 85, 5, 10, 0, 1) + new AttackMove(MoveId.FIRE_BLAST, PokemonType.FIRE, MoveCategory.SPECIAL, 110, 85, 5, 10, 0, 1) .attr(StatusEffectAttr, StatusEffect.BURN), - new AttackMove(Moves.WATERFALL, PokemonType.WATER, MoveCategory.PHYSICAL, 80, 100, 15, 20, 0, 1) + new AttackMove(MoveId.WATERFALL, PokemonType.WATER, MoveCategory.PHYSICAL, 80, 100, 15, 20, 0, 1) .attr(FlinchAttr), - new AttackMove(Moves.CLAMP, PokemonType.WATER, MoveCategory.PHYSICAL, 35, 85, 15, -1, 0, 1) + new AttackMove(MoveId.CLAMP, PokemonType.WATER, MoveCategory.PHYSICAL, 35, 85, 15, -1, 0, 1) .attr(TrapAttr, BattlerTagType.CLAMP), - new AttackMove(Moves.SWIFT, PokemonType.NORMAL, MoveCategory.SPECIAL, 60, -1, 20, -1, 0, 1) + new AttackMove(MoveId.SWIFT, PokemonType.NORMAL, MoveCategory.SPECIAL, 60, -1, 20, -1, 0, 1) .target(MoveTarget.ALL_NEAR_ENEMIES), - new ChargingAttackMove(Moves.SKULL_BASH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 130, 100, 10, -1, 0, 1) + new ChargingAttackMove(MoveId.SKULL_BASH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 130, 100, 10, -1, 0, 1) .chargeText(i18next.t("moveTriggers:loweredItsHead", { pokemonName: "{USER}" })) .chargeAttr(StatStageChangeAttr, [ Stat.DEF ], 1, true), - new AttackMove(Moves.SPIKE_CANNON, PokemonType.NORMAL, MoveCategory.PHYSICAL, 20, 100, 15, -1, 0, 1) + new AttackMove(MoveId.SPIKE_CANNON, PokemonType.NORMAL, MoveCategory.PHYSICAL, 20, 100, 15, -1, 0, 1) .attr(MultiHitAttr) .makesContact(false), - new AttackMove(Moves.CONSTRICT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 10, 100, 35, 10, 0, 1) + new AttackMove(MoveId.CONSTRICT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 10, 100, 35, 10, 0, 1) .attr(StatStageChangeAttr, [ Stat.SPD ], -1), - new SelfStatusMove(Moves.AMNESIA, PokemonType.PSYCHIC, -1, 20, -1, 0, 1) + new SelfStatusMove(MoveId.AMNESIA, PokemonType.PSYCHIC, -1, 20, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.SPDEF ], 2, true), - new StatusMove(Moves.KINESIS, PokemonType.PSYCHIC, 80, 15, -1, 0, 1) + new StatusMove(MoveId.KINESIS, PokemonType.PSYCHIC, 80, 15, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.ACC ], -1) .reflectable(), - new SelfStatusMove(Moves.SOFT_BOILED, PokemonType.NORMAL, -1, 5, -1, 0, 1) + new SelfStatusMove(MoveId.SOFT_BOILED, PokemonType.NORMAL, -1, 5, -1, 0, 1) .attr(HealAttr, 0.5) .triageMove(), - new AttackMove(Moves.HIGH_JUMP_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 130, 90, 10, -1, 0, 1) + new AttackMove(MoveId.HIGH_JUMP_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 130, 90, 10, -1, 0, 1) .attr(MissEffectAttr, crashDamageFunc) .attr(NoEffectAttr, crashDamageFunc) .condition(failOnGravityCondition) .recklessMove(), - new StatusMove(Moves.GLARE, PokemonType.NORMAL, 100, 30, -1, 0, 1) + new StatusMove(MoveId.GLARE, PokemonType.NORMAL, 100, 30, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .reflectable(), - new AttackMove(Moves.DREAM_EATER, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 100, 100, 15, -1, 0, 1) + new AttackMove(MoveId.DREAM_EATER, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 100, 100, 15, -1, 0, 1) .attr(HitHealAttr) .condition(targetSleptOrComatoseCondition) .triageMove(), - new StatusMove(Moves.POISON_GAS, PokemonType.POISON, 90, 40, -1, 0, 1) + new StatusMove(MoveId.POISON_GAS, PokemonType.POISON, 90, 40, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.POISON) .target(MoveTarget.ALL_NEAR_ENEMIES) .reflectable(), - new AttackMove(Moves.BARRAGE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 15, 85, 20, -1, 0, 1) + new AttackMove(MoveId.BARRAGE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 15, 85, 20, -1, 0, 1) .attr(MultiHitAttr) .makesContact(false) .ballBombMove(), - new AttackMove(Moves.LEECH_LIFE, PokemonType.BUG, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 1) + new AttackMove(MoveId.LEECH_LIFE, PokemonType.BUG, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 1) .attr(HitHealAttr) .triageMove(), - new StatusMove(Moves.LOVELY_KISS, PokemonType.NORMAL, 75, 10, -1, 0, 1) + new StatusMove(MoveId.LOVELY_KISS, PokemonType.NORMAL, 75, 10, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.SLEEP) .reflectable(), - new ChargingAttackMove(Moves.SKY_ATTACK, PokemonType.FLYING, MoveCategory.PHYSICAL, 140, 90, 5, 30, 0, 1) + new ChargingAttackMove(MoveId.SKY_ATTACK, PokemonType.FLYING, MoveCategory.PHYSICAL, 140, 90, 5, 30, 0, 1) .chargeText(i18next.t("moveTriggers:isGlowing", { pokemonName: "{USER}" })) .attr(HighCritAttr) .attr(FlinchAttr) .makesContact(false), - new StatusMove(Moves.TRANSFORM, PokemonType.NORMAL, -1, 10, -1, 0, 1) + new StatusMove(MoveId.TRANSFORM, PokemonType.NORMAL, -1, 10, -1, 0, 1) .attr(TransformAttr) .condition((user, target, move) => !target.getTag(BattlerTagType.SUBSTITUTE)) .condition((user, target, move) => !target.summonData.illusion && !user.summonData.illusion) @@ -8683,160 +8683,160 @@ export function initMoves() { .ignoresProtect() // Transforming should copy the target's rage fist hit count .edgeCase(), - new AttackMove(Moves.BUBBLE, PokemonType.WATER, MoveCategory.SPECIAL, 40, 100, 30, 10, 0, 1) + new AttackMove(MoveId.BUBBLE, PokemonType.WATER, MoveCategory.SPECIAL, 40, 100, 30, 10, 0, 1) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.DIZZY_PUNCH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 10, 20, 0, 1) + new AttackMove(MoveId.DIZZY_PUNCH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 10, 20, 0, 1) .attr(ConfuseAttr) .punchingMove(), - new StatusMove(Moves.SPORE, PokemonType.GRASS, 100, 15, -1, 0, 1) + new StatusMove(MoveId.SPORE, PokemonType.GRASS, 100, 15, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.SLEEP) .powderMove() .reflectable(), - new StatusMove(Moves.FLASH, PokemonType.NORMAL, 100, 20, -1, 0, 1) + new StatusMove(MoveId.FLASH, PokemonType.NORMAL, 100, 20, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.ACC ], -1) .reflectable(), - new AttackMove(Moves.PSYWAVE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, -1, 100, 15, -1, 0, 1) + new AttackMove(MoveId.PSYWAVE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, -1, 100, 15, -1, 0, 1) .attr(RandomLevelDamageAttr), - new SelfStatusMove(Moves.SPLASH, PokemonType.NORMAL, -1, 40, -1, 0, 1) + new SelfStatusMove(MoveId.SPLASH, PokemonType.NORMAL, -1, 40, -1, 0, 1) .attr(SplashAttr) .condition(failOnGravityCondition), - new SelfStatusMove(Moves.ACID_ARMOR, PokemonType.POISON, -1, 20, -1, 0, 1) + new SelfStatusMove(MoveId.ACID_ARMOR, PokemonType.POISON, -1, 20, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.DEF ], 2, true), - new AttackMove(Moves.CRABHAMMER, PokemonType.WATER, MoveCategory.PHYSICAL, 100, 90, 10, -1, 0, 1) + new AttackMove(MoveId.CRABHAMMER, PokemonType.WATER, MoveCategory.PHYSICAL, 100, 90, 10, -1, 0, 1) .attr(HighCritAttr), - new AttackMove(Moves.EXPLOSION, PokemonType.NORMAL, MoveCategory.PHYSICAL, 250, 100, 5, -1, 0, 1) + new AttackMove(MoveId.EXPLOSION, PokemonType.NORMAL, MoveCategory.PHYSICAL, 250, 100, 5, -1, 0, 1) .condition(failIfDampCondition) .attr(SacrificialAttr) .makesContact(false) .target(MoveTarget.ALL_NEAR_OTHERS), - new AttackMove(Moves.FURY_SWIPES, PokemonType.NORMAL, MoveCategory.PHYSICAL, 18, 80, 15, -1, 0, 1) + new AttackMove(MoveId.FURY_SWIPES, PokemonType.NORMAL, MoveCategory.PHYSICAL, 18, 80, 15, -1, 0, 1) .attr(MultiHitAttr), - new AttackMove(Moves.BONEMERANG, PokemonType.GROUND, MoveCategory.PHYSICAL, 50, 90, 10, -1, 0, 1) + new AttackMove(MoveId.BONEMERANG, PokemonType.GROUND, MoveCategory.PHYSICAL, 50, 90, 10, -1, 0, 1) .attr(MultiHitAttr, MultiHitType._2) .makesContact(false), - new SelfStatusMove(Moves.REST, PokemonType.PSYCHIC, -1, 5, -1, 0, 1) + new SelfStatusMove(MoveId.REST, PokemonType.PSYCHIC, -1, 5, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.SLEEP, true, 3, true) .attr(HealAttr, 1, true) .condition((user, target, move) => !user.isFullHp() && user.canSetStatus(StatusEffect.SLEEP, true, true, user)) .triageMove(), - new AttackMove(Moves.ROCK_SLIDE, PokemonType.ROCK, MoveCategory.PHYSICAL, 75, 90, 10, 30, 0, 1) + new AttackMove(MoveId.ROCK_SLIDE, PokemonType.ROCK, MoveCategory.PHYSICAL, 75, 90, 10, 30, 0, 1) .attr(FlinchAttr) .makesContact(false) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.HYPER_FANG, PokemonType.NORMAL, MoveCategory.PHYSICAL, 80, 90, 15, 10, 0, 1) + new AttackMove(MoveId.HYPER_FANG, PokemonType.NORMAL, MoveCategory.PHYSICAL, 80, 90, 15, 10, 0, 1) .attr(FlinchAttr) .bitingMove(), - new SelfStatusMove(Moves.SHARPEN, PokemonType.NORMAL, -1, 30, -1, 0, 1) + new SelfStatusMove(MoveId.SHARPEN, PokemonType.NORMAL, -1, 30, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.ATK ], 1, true), - new SelfStatusMove(Moves.CONVERSION, PokemonType.NORMAL, -1, 30, -1, 0, 1) + new SelfStatusMove(MoveId.CONVERSION, PokemonType.NORMAL, -1, 30, -1, 0, 1) .attr(FirstMoveTypeAttr), - new AttackMove(Moves.TRI_ATTACK, PokemonType.NORMAL, MoveCategory.SPECIAL, 80, 100, 10, 20, 0, 1) + new AttackMove(MoveId.TRI_ATTACK, PokemonType.NORMAL, MoveCategory.SPECIAL, 80, 100, 10, 20, 0, 1) .attr(MultiStatusEffectAttr, [ StatusEffect.BURN, StatusEffect.FREEZE, StatusEffect.PARALYSIS ]), - new AttackMove(Moves.SUPER_FANG, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 90, 10, -1, 0, 1) + new AttackMove(MoveId.SUPER_FANG, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 90, 10, -1, 0, 1) .attr(TargetHalfHpDamageAttr), - new AttackMove(Moves.SLASH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 1) + new AttackMove(MoveId.SLASH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 1) .attr(HighCritAttr) .slicingMove(), - new SelfStatusMove(Moves.SUBSTITUTE, PokemonType.NORMAL, -1, 10, -1, 0, 1) + new SelfStatusMove(MoveId.SUBSTITUTE, PokemonType.NORMAL, -1, 10, -1, 0, 1) .attr(AddSubstituteAttr, 0.25, false), - new AttackMove(Moves.STRUGGLE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 50, -1, 1, -1, 0, 1) + new AttackMove(MoveId.STRUGGLE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 50, -1, 1, -1, 0, 1) .attr(RecoilAttr, true, 0.25, true) .attr(TypelessAttr) .target(MoveTarget.RANDOM_NEAR_ENEMY), - new StatusMove(Moves.SKETCH, PokemonType.NORMAL, -1, 1, -1, 0, 2) + new StatusMove(MoveId.SKETCH, PokemonType.NORMAL, -1, 1, -1, 0, 2) .ignoresSubstitute() .attr(SketchAttr), - new AttackMove(Moves.TRIPLE_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 10, 90, 10, -1, 0, 2) + new AttackMove(MoveId.TRIPLE_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 10, 90, 10, -1, 0, 2) .attr(MultiHitAttr, MultiHitType._3) .attr(MultiHitPowerIncrementAttr, 3) .checkAllHits(), - new AttackMove(Moves.THIEF, PokemonType.DARK, MoveCategory.PHYSICAL, 60, 100, 25, -1, 0, 2) + new AttackMove(MoveId.THIEF, PokemonType.DARK, MoveCategory.PHYSICAL, 60, 100, 25, -1, 0, 2) .attr(StealHeldItemChanceAttr, 0.3) .edgeCase(), // Should not be able to steal held item if user faints due to Rough Skin, Iron Barbs, etc. // Should be able to steal items from pokemon with Sticky Hold if the damage causes them to faint - new StatusMove(Moves.SPIDER_WEB, PokemonType.BUG, -1, 10, -1, 0, 2) + new StatusMove(MoveId.SPIDER_WEB, PokemonType.BUG, -1, 10, -1, 0, 2) .condition(failIfGhostTypeCondition) .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, true, 1) .reflectable(), - new StatusMove(Moves.MIND_READER, PokemonType.NORMAL, -1, 5, -1, 0, 2) + new StatusMove(MoveId.MIND_READER, PokemonType.NORMAL, -1, 5, -1, 0, 2) .attr(IgnoreAccuracyAttr), - new StatusMove(Moves.NIGHTMARE, PokemonType.GHOST, 100, 15, -1, 0, 2) + new StatusMove(MoveId.NIGHTMARE, PokemonType.GHOST, 100, 15, -1, 0, 2) .attr(AddBattlerTagAttr, BattlerTagType.NIGHTMARE) .condition(targetSleptOrComatoseCondition), - new AttackMove(Moves.FLAME_WHEEL, PokemonType.FIRE, MoveCategory.PHYSICAL, 60, 100, 25, 10, 0, 2) + new AttackMove(MoveId.FLAME_WHEEL, PokemonType.FIRE, MoveCategory.PHYSICAL, 60, 100, 25, 10, 0, 2) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) .attr(StatusEffectAttr, StatusEffect.BURN), - new AttackMove(Moves.SNORE, PokemonType.NORMAL, MoveCategory.SPECIAL, 50, 100, 15, 30, 0, 2) + new AttackMove(MoveId.SNORE, PokemonType.NORMAL, MoveCategory.SPECIAL, 50, 100, 15, 30, 0, 2) .attr(BypassSleepAttr) .attr(FlinchAttr) .condition(userSleptOrComatoseCondition) .soundBased(), - new StatusMove(Moves.CURSE, PokemonType.GHOST, -1, 10, -1, 0, 2) + new StatusMove(MoveId.CURSE, PokemonType.GHOST, -1, 10, -1, 0, 2) .attr(CurseAttr) .ignoresSubstitute() .ignoresProtect() .target(MoveTarget.CURSE), - new AttackMove(Moves.FLAIL, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 100, 15, -1, 0, 2) + new AttackMove(MoveId.FLAIL, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 100, 15, -1, 0, 2) .attr(LowHpPowerAttr), - new StatusMove(Moves.CONVERSION_2, PokemonType.NORMAL, -1, 30, -1, 0, 2) + new StatusMove(MoveId.CONVERSION_2, PokemonType.NORMAL, -1, 30, -1, 0, 2) .attr(ResistLastMoveTypeAttr) .ignoresSubstitute() .partial(), // Checks the move's original typing and not if its type is changed through some other means - new AttackMove(Moves.AEROBLAST, PokemonType.FLYING, MoveCategory.SPECIAL, 100, 95, 5, -1, 0, 2) + new AttackMove(MoveId.AEROBLAST, PokemonType.FLYING, MoveCategory.SPECIAL, 100, 95, 5, -1, 0, 2) .windMove() .attr(HighCritAttr), - new StatusMove(Moves.COTTON_SPORE, PokemonType.GRASS, 100, 40, -1, 0, 2) + new StatusMove(MoveId.COTTON_SPORE, PokemonType.GRASS, 100, 40, -1, 0, 2) .attr(StatStageChangeAttr, [ Stat.SPD ], -2) .powderMove() .target(MoveTarget.ALL_NEAR_ENEMIES) .reflectable(), - new AttackMove(Moves.REVERSAL, PokemonType.FIGHTING, MoveCategory.PHYSICAL, -1, 100, 15, -1, 0, 2) + new AttackMove(MoveId.REVERSAL, PokemonType.FIGHTING, MoveCategory.PHYSICAL, -1, 100, 15, -1, 0, 2) .attr(LowHpPowerAttr), - new StatusMove(Moves.SPITE, PokemonType.GHOST, 100, 10, -1, 0, 2) + new StatusMove(MoveId.SPITE, PokemonType.GHOST, 100, 10, -1, 0, 2) .ignoresSubstitute() .attr(ReducePpMoveAttr, 4) .reflectable(), - new AttackMove(Moves.POWDER_SNOW, PokemonType.ICE, MoveCategory.SPECIAL, 40, 100, 25, 10, 0, 2) + new AttackMove(MoveId.POWDER_SNOW, PokemonType.ICE, MoveCategory.SPECIAL, 40, 100, 25, 10, 0, 2) .attr(StatusEffectAttr, StatusEffect.FREEZE) .target(MoveTarget.ALL_NEAR_ENEMIES), - new SelfStatusMove(Moves.PROTECT, PokemonType.NORMAL, -1, 10, -1, 4, 2) + new SelfStatusMove(MoveId.PROTECT, PokemonType.NORMAL, -1, 10, -1, 4, 2) .attr(ProtectAttr) .condition(failIfLastCondition), - new AttackMove(Moves.MACH_PUNCH, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 40, 100, 30, -1, 1, 2) + new AttackMove(MoveId.MACH_PUNCH, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 40, 100, 30, -1, 1, 2) .punchingMove(), - new StatusMove(Moves.SCARY_FACE, PokemonType.NORMAL, 100, 10, -1, 0, 2) + new StatusMove(MoveId.SCARY_FACE, PokemonType.NORMAL, 100, 10, -1, 0, 2) .attr(StatStageChangeAttr, [ Stat.SPD ], -2) .reflectable(), - new AttackMove(Moves.FEINT_ATTACK, PokemonType.DARK, MoveCategory.PHYSICAL, 60, -1, 20, -1, 0, 2), - new StatusMove(Moves.SWEET_KISS, PokemonType.FAIRY, 75, 10, -1, 0, 2) + new AttackMove(MoveId.FEINT_ATTACK, PokemonType.DARK, MoveCategory.PHYSICAL, 60, -1, 20, -1, 0, 2), + new StatusMove(MoveId.SWEET_KISS, PokemonType.FAIRY, 75, 10, -1, 0, 2) .attr(ConfuseAttr) .reflectable(), - new SelfStatusMove(Moves.BELLY_DRUM, PokemonType.NORMAL, -1, 10, -1, 0, 2) + new SelfStatusMove(MoveId.BELLY_DRUM, PokemonType.NORMAL, -1, 10, -1, 0, 2) .attr(CutHpStatStageBoostAttr, [ Stat.ATK ], 12, 2, (user) => { globalScene.queueMessage(i18next.t("moveTriggers:cutOwnHpAndMaximizedStat", { pokemonName: getPokemonNameWithAffix(user), statName: i18next.t(getStatKey(Stat.ATK)) })); }), - new AttackMove(Moves.SLUDGE_BOMB, PokemonType.POISON, MoveCategory.SPECIAL, 90, 100, 10, 30, 0, 2) + new AttackMove(MoveId.SLUDGE_BOMB, PokemonType.POISON, MoveCategory.SPECIAL, 90, 100, 10, 30, 0, 2) .attr(StatusEffectAttr, StatusEffect.POISON) .ballBombMove(), - new AttackMove(Moves.MUD_SLAP, PokemonType.GROUND, MoveCategory.SPECIAL, 20, 100, 10, 100, 0, 2) + new AttackMove(MoveId.MUD_SLAP, PokemonType.GROUND, MoveCategory.SPECIAL, 20, 100, 10, 100, 0, 2) .attr(StatStageChangeAttr, [ Stat.ACC ], -1), - new AttackMove(Moves.OCTAZOOKA, PokemonType.WATER, MoveCategory.SPECIAL, 65, 85, 10, 50, 0, 2) + new AttackMove(MoveId.OCTAZOOKA, PokemonType.WATER, MoveCategory.SPECIAL, 65, 85, 10, 50, 0, 2) .attr(StatStageChangeAttr, [ Stat.ACC ], -1) .ballBombMove(), - new StatusMove(Moves.SPIKES, PokemonType.GROUND, -1, 20, -1, 0, 2) + new StatusMove(MoveId.SPIKES, PokemonType.GROUND, -1, 20, -1, 0, 2) .attr(AddArenaTrapTagAttr, ArenaTagType.SPIKES) .target(MoveTarget.ENEMY_SIDE) .reflectable(), - new AttackMove(Moves.ZAP_CANNON, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 120, 50, 5, 100, 0, 2) + new AttackMove(MoveId.ZAP_CANNON, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 120, 50, 5, 100, 0, 2) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .ballBombMove(), - new StatusMove(Moves.FORESIGHT, PokemonType.NORMAL, -1, 40, -1, 0, 2) + new StatusMove(MoveId.FORESIGHT, PokemonType.NORMAL, -1, 40, -1, 0, 2) .attr(ExposedMoveAttr, BattlerTagType.IGNORE_GHOST) .ignoresSubstitute() .reflectable(), - new SelfStatusMove(Moves.DESTINY_BOND, PokemonType.GHOST, -1, 5, -1, 0, 2) + new SelfStatusMove(MoveId.DESTINY_BOND, PokemonType.GHOST, -1, 5, -1, 0, 2) .ignoresProtect() .attr(DestinyBondAttr) .condition((user, target, move) => { @@ -8848,120 +8848,120 @@ export function initMoves() { // - the previous move was unsuccessful return lastTurnMove.length === 0 || lastTurnMove[0].move !== move.id || lastTurnMove[0].result !== MoveResult.SUCCESS; }), - new StatusMove(Moves.PERISH_SONG, PokemonType.NORMAL, -1, 5, -1, 0, 2) + new StatusMove(MoveId.PERISH_SONG, PokemonType.NORMAL, -1, 5, -1, 0, 2) .attr(FaintCountdownAttr) .ignoresProtect() .soundBased() .condition(failOnBossCondition) .target(MoveTarget.ALL), - new AttackMove(Moves.ICY_WIND, PokemonType.ICE, MoveCategory.SPECIAL, 55, 95, 15, 100, 0, 2) + new AttackMove(MoveId.ICY_WIND, PokemonType.ICE, MoveCategory.SPECIAL, 55, 95, 15, 100, 0, 2) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) .windMove() .target(MoveTarget.ALL_NEAR_ENEMIES), - new SelfStatusMove(Moves.DETECT, PokemonType.FIGHTING, -1, 5, -1, 4, 2) + new SelfStatusMove(MoveId.DETECT, PokemonType.FIGHTING, -1, 5, -1, 4, 2) .attr(ProtectAttr) .condition(failIfLastCondition), - new AttackMove(Moves.BONE_RUSH, PokemonType.GROUND, MoveCategory.PHYSICAL, 25, 90, 10, -1, 0, 2) + new AttackMove(MoveId.BONE_RUSH, PokemonType.GROUND, MoveCategory.PHYSICAL, 25, 90, 10, -1, 0, 2) .attr(MultiHitAttr) .makesContact(false), - new StatusMove(Moves.LOCK_ON, PokemonType.NORMAL, -1, 5, -1, 0, 2) + new StatusMove(MoveId.LOCK_ON, PokemonType.NORMAL, -1, 5, -1, 0, 2) .attr(IgnoreAccuracyAttr), - new AttackMove(Moves.OUTRAGE, PokemonType.DRAGON, MoveCategory.PHYSICAL, 120, 100, 10, -1, 0, 2) + new AttackMove(MoveId.OUTRAGE, PokemonType.DRAGON, MoveCategory.PHYSICAL, 120, 100, 10, -1, 0, 2) .attr(FrenzyAttr) .attr(MissEffectAttr, frenzyMissFunc) .attr(NoEffectAttr, frenzyMissFunc) .target(MoveTarget.RANDOM_NEAR_ENEMY), - new StatusMove(Moves.SANDSTORM, PokemonType.ROCK, -1, 10, -1, 0, 2) + new StatusMove(MoveId.SANDSTORM, PokemonType.ROCK, -1, 10, -1, 0, 2) .attr(WeatherChangeAttr, WeatherType.SANDSTORM) .target(MoveTarget.BOTH_SIDES), - new AttackMove(Moves.GIGA_DRAIN, PokemonType.GRASS, MoveCategory.SPECIAL, 75, 100, 10, -1, 0, 2) + new AttackMove(MoveId.GIGA_DRAIN, PokemonType.GRASS, MoveCategory.SPECIAL, 75, 100, 10, -1, 0, 2) .attr(HitHealAttr) .triageMove(), - new SelfStatusMove(Moves.ENDURE, PokemonType.NORMAL, -1, 10, -1, 4, 2) + new SelfStatusMove(MoveId.ENDURE, PokemonType.NORMAL, -1, 10, -1, 4, 2) .attr(ProtectAttr, BattlerTagType.ENDURING) .condition(failIfLastCondition), - new StatusMove(Moves.CHARM, PokemonType.FAIRY, 100, 20, -1, 0, 2) + new StatusMove(MoveId.CHARM, PokemonType.FAIRY, 100, 20, -1, 0, 2) .attr(StatStageChangeAttr, [ Stat.ATK ], -2) .reflectable(), - new AttackMove(Moves.ROLLOUT, PokemonType.ROCK, MoveCategory.PHYSICAL, 30, 90, 20, -1, 0, 2) + new AttackMove(MoveId.ROLLOUT, PokemonType.ROCK, MoveCategory.PHYSICAL, 30, 90, 20, -1, 0, 2) .partial() // Does not lock the user, also does not increase damage properly - .attr(ConsecutiveUseDoublePowerAttr, 5, true, true, Moves.DEFENSE_CURL), - new AttackMove(Moves.FALSE_SWIPE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 40, -1, 0, 2) + .attr(ConsecutiveUseDoublePowerAttr, 5, true, true, MoveId.DEFENSE_CURL), + new AttackMove(MoveId.FALSE_SWIPE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 40, -1, 0, 2) .attr(SurviveDamageAttr), - new StatusMove(Moves.SWAGGER, PokemonType.NORMAL, 85, 15, -1, 0, 2) + new StatusMove(MoveId.SWAGGER, PokemonType.NORMAL, 85, 15, -1, 0, 2) .attr(StatStageChangeAttr, [ Stat.ATK ], 2) .attr(ConfuseAttr) .reflectable(), - new SelfStatusMove(Moves.MILK_DRINK, PokemonType.NORMAL, -1, 5, -1, 0, 2) + new SelfStatusMove(MoveId.MILK_DRINK, PokemonType.NORMAL, -1, 5, -1, 0, 2) .attr(HealAttr, 0.5) .triageMove(), - new AttackMove(Moves.SPARK, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 65, 100, 20, 30, 0, 2) + new AttackMove(MoveId.SPARK, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 65, 100, 20, 30, 0, 2) .attr(StatusEffectAttr, StatusEffect.PARALYSIS), - new AttackMove(Moves.FURY_CUTTER, PokemonType.BUG, MoveCategory.PHYSICAL, 40, 95, 20, -1, 0, 2) + new AttackMove(MoveId.FURY_CUTTER, PokemonType.BUG, MoveCategory.PHYSICAL, 40, 95, 20, -1, 0, 2) .attr(ConsecutiveUseDoublePowerAttr, 3, true) .slicingMove(), - new AttackMove(Moves.STEEL_WING, PokemonType.STEEL, MoveCategory.PHYSICAL, 70, 90, 25, 10, 0, 2) + new AttackMove(MoveId.STEEL_WING, PokemonType.STEEL, MoveCategory.PHYSICAL, 70, 90, 25, 10, 0, 2) .attr(StatStageChangeAttr, [ Stat.DEF ], 1, true), - new StatusMove(Moves.MEAN_LOOK, PokemonType.NORMAL, -1, 5, -1, 0, 2) + new StatusMove(MoveId.MEAN_LOOK, PokemonType.NORMAL, -1, 5, -1, 0, 2) .condition(failIfGhostTypeCondition) .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, true, 1) .reflectable(), - new StatusMove(Moves.ATTRACT, PokemonType.NORMAL, 100, 15, -1, 0, 2) + new StatusMove(MoveId.ATTRACT, PokemonType.NORMAL, 100, 15, -1, 0, 2) .attr(AddBattlerTagAttr, BattlerTagType.INFATUATED) .ignoresSubstitute() .condition((user, target, move) => user.isOppositeGender(target)) .reflectable(), - new SelfStatusMove(Moves.SLEEP_TALK, PokemonType.NORMAL, -1, 10, -1, 0, 2) + new SelfStatusMove(MoveId.SLEEP_TALK, PokemonType.NORMAL, -1, 10, -1, 0, 2) .attr(BypassSleepAttr) .attr(RandomMovesetMoveAttr, invalidSleepTalkMoves, false) .condition(userSleptOrComatoseCondition) .target(MoveTarget.NEAR_ENEMY), - new StatusMove(Moves.HEAL_BELL, PokemonType.NORMAL, -1, 5, -1, 0, 2) - .attr(PartyStatusCureAttr, i18next.t("moveTriggers:bellChimed"), Abilities.SOUNDPROOF) + new StatusMove(MoveId.HEAL_BELL, PokemonType.NORMAL, -1, 5, -1, 0, 2) + .attr(PartyStatusCureAttr, i18next.t("moveTriggers:bellChimed"), AbilityId.SOUNDPROOF) .soundBased() .target(MoveTarget.PARTY), - new AttackMove(Moves.RETURN, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 100, 20, -1, 0, 2) + new AttackMove(MoveId.RETURN, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 100, 20, -1, 0, 2) .attr(FriendshipPowerAttr), - new AttackMove(Moves.PRESENT, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 90, 15, -1, 0, 2) + new AttackMove(MoveId.PRESENT, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 90, 15, -1, 0, 2) .attr(PresentPowerAttr) .makesContact(false), - new AttackMove(Moves.FRUSTRATION, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 100, 20, -1, 0, 2) + new AttackMove(MoveId.FRUSTRATION, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 100, 20, -1, 0, 2) .attr(FriendshipPowerAttr, true), - new StatusMove(Moves.SAFEGUARD, PokemonType.NORMAL, -1, 25, -1, 0, 2) + new StatusMove(MoveId.SAFEGUARD, PokemonType.NORMAL, -1, 25, -1, 0, 2) .target(MoveTarget.USER_SIDE) .attr(AddArenaTagAttr, ArenaTagType.SAFEGUARD, 5, true, true), - new StatusMove(Moves.PAIN_SPLIT, PokemonType.NORMAL, -1, 20, -1, 0, 2) + new StatusMove(MoveId.PAIN_SPLIT, PokemonType.NORMAL, -1, 20, -1, 0, 2) .attr(HpSplitAttr) .condition(failOnBossCondition), - new AttackMove(Moves.SACRED_FIRE, PokemonType.FIRE, MoveCategory.PHYSICAL, 100, 95, 5, 50, 0, 2) + new AttackMove(MoveId.SACRED_FIRE, PokemonType.FIRE, MoveCategory.PHYSICAL, 100, 95, 5, 50, 0, 2) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) .attr(StatusEffectAttr, StatusEffect.BURN) .makesContact(false), - new AttackMove(Moves.MAGNITUDE, PokemonType.GROUND, MoveCategory.PHYSICAL, -1, 100, 30, -1, 0, 2) + new AttackMove(MoveId.MAGNITUDE, PokemonType.GROUND, MoveCategory.PHYSICAL, -1, 100, 30, -1, 0, 2) .attr(PreMoveMessageAttr, magnitudeMessageFunc) .attr(MagnitudePowerAttr) .attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.UNDERGROUND) .makesContact(false) .target(MoveTarget.ALL_NEAR_OTHERS), - new AttackMove(Moves.DYNAMIC_PUNCH, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 50, 5, 100, 0, 2) + new AttackMove(MoveId.DYNAMIC_PUNCH, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 50, 5, 100, 0, 2) .attr(ConfuseAttr) .punchingMove(), - new AttackMove(Moves.MEGAHORN, PokemonType.BUG, MoveCategory.PHYSICAL, 120, 85, 10, -1, 0, 2), - new AttackMove(Moves.DRAGON_BREATH, PokemonType.DRAGON, MoveCategory.SPECIAL, 60, 100, 20, 30, 0, 2) + new AttackMove(MoveId.MEGAHORN, PokemonType.BUG, MoveCategory.PHYSICAL, 120, 85, 10, -1, 0, 2), + new AttackMove(MoveId.DRAGON_BREATH, PokemonType.DRAGON, MoveCategory.SPECIAL, 60, 100, 20, 30, 0, 2) .attr(StatusEffectAttr, StatusEffect.PARALYSIS), - new SelfStatusMove(Moves.BATON_PASS, PokemonType.NORMAL, -1, 40, -1, 0, 2) + new SelfStatusMove(MoveId.BATON_PASS, PokemonType.NORMAL, -1, 40, -1, 0, 2) .attr(ForceSwitchOutAttr, true, SwitchType.BATON_PASS) .condition(failIfLastInPartyCondition) .hidesUser(), - new StatusMove(Moves.ENCORE, PokemonType.NORMAL, 100, 5, -1, 0, 2) + new StatusMove(MoveId.ENCORE, PokemonType.NORMAL, 100, 5, -1, 0, 2) .attr(AddBattlerTagAttr, BattlerTagType.ENCORE, false, true) .ignoresSubstitute() .condition((user, target, move) => new EncoreTag(user.id).canAdd(target)) .reflectable(), - new AttackMove(Moves.PURSUIT, PokemonType.DARK, MoveCategory.PHYSICAL, 40, 100, 20, -1, 0, 2) + new AttackMove(MoveId.PURSUIT, PokemonType.DARK, MoveCategory.PHYSICAL, 40, 100, 20, -1, 0, 2) .partial(), // No effect implemented - new AttackMove(Moves.RAPID_SPIN, PokemonType.NORMAL, MoveCategory.PHYSICAL, 50, 100, 40, 100, 0, 2) + new AttackMove(MoveId.RAPID_SPIN, PokemonType.NORMAL, MoveCategory.PHYSICAL, 50, 100, 40, 100, 0, 2) .attr(StatStageChangeAttr, [ Stat.SPD ], 1, true) .attr(RemoveBattlerTagAttr, [ BattlerTagType.BIND, @@ -8977,256 +8977,256 @@ export function initMoves() { BattlerTagType.INFESTATION ], true) .attr(RemoveArenaTrapAttr), - new StatusMove(Moves.SWEET_SCENT, PokemonType.NORMAL, 100, 20, -1, 0, 2) + new StatusMove(MoveId.SWEET_SCENT, PokemonType.NORMAL, 100, 20, -1, 0, 2) .attr(StatStageChangeAttr, [ Stat.EVA ], -2) .target(MoveTarget.ALL_NEAR_ENEMIES) .reflectable(), - new AttackMove(Moves.IRON_TAIL, PokemonType.STEEL, MoveCategory.PHYSICAL, 100, 75, 15, 30, 0, 2) + new AttackMove(MoveId.IRON_TAIL, PokemonType.STEEL, MoveCategory.PHYSICAL, 100, 75, 15, 30, 0, 2) .attr(StatStageChangeAttr, [ Stat.DEF ], -1), - new AttackMove(Moves.METAL_CLAW, PokemonType.STEEL, MoveCategory.PHYSICAL, 50, 95, 35, 10, 0, 2) + new AttackMove(MoveId.METAL_CLAW, PokemonType.STEEL, MoveCategory.PHYSICAL, 50, 95, 35, 10, 0, 2) .attr(StatStageChangeAttr, [ Stat.ATK ], 1, true), - new AttackMove(Moves.VITAL_THROW, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 70, -1, 10, -1, -1, 2), - new SelfStatusMove(Moves.MORNING_SUN, PokemonType.NORMAL, -1, 5, -1, 0, 2) + new AttackMove(MoveId.VITAL_THROW, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 70, -1, 10, -1, -1, 2), + new SelfStatusMove(MoveId.MORNING_SUN, PokemonType.NORMAL, -1, 5, -1, 0, 2) .attr(PlantHealAttr) .triageMove(), - new SelfStatusMove(Moves.SYNTHESIS, PokemonType.GRASS, -1, 5, -1, 0, 2) + new SelfStatusMove(MoveId.SYNTHESIS, PokemonType.GRASS, -1, 5, -1, 0, 2) .attr(PlantHealAttr) .triageMove(), - new SelfStatusMove(Moves.MOONLIGHT, PokemonType.FAIRY, -1, 5, -1, 0, 2) + new SelfStatusMove(MoveId.MOONLIGHT, PokemonType.FAIRY, -1, 5, -1, 0, 2) .attr(PlantHealAttr) .triageMove(), - new AttackMove(Moves.HIDDEN_POWER, PokemonType.NORMAL, MoveCategory.SPECIAL, 60, 100, 15, -1, 0, 2) + new AttackMove(MoveId.HIDDEN_POWER, PokemonType.NORMAL, MoveCategory.SPECIAL, 60, 100, 15, -1, 0, 2) .attr(HiddenPowerTypeAttr), - new AttackMove(Moves.CROSS_CHOP, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 80, 5, -1, 0, 2) + new AttackMove(MoveId.CROSS_CHOP, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 80, 5, -1, 0, 2) .attr(HighCritAttr), - new AttackMove(Moves.TWISTER, PokemonType.DRAGON, MoveCategory.SPECIAL, 40, 100, 20, 20, 0, 2) + new AttackMove(MoveId.TWISTER, PokemonType.DRAGON, MoveCategory.SPECIAL, 40, 100, 20, 20, 0, 2) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.FLYING) .attr(FlinchAttr) .windMove() .target(MoveTarget.ALL_NEAR_ENEMIES), - new StatusMove(Moves.RAIN_DANCE, PokemonType.WATER, -1, 5, -1, 0, 2) + new StatusMove(MoveId.RAIN_DANCE, PokemonType.WATER, -1, 5, -1, 0, 2) .attr(WeatherChangeAttr, WeatherType.RAIN) .target(MoveTarget.BOTH_SIDES), - new StatusMove(Moves.SUNNY_DAY, PokemonType.FIRE, -1, 5, -1, 0, 2) + new StatusMove(MoveId.SUNNY_DAY, PokemonType.FIRE, -1, 5, -1, 0, 2) .attr(WeatherChangeAttr, WeatherType.SUNNY) .target(MoveTarget.BOTH_SIDES), - new AttackMove(Moves.CRUNCH, PokemonType.DARK, MoveCategory.PHYSICAL, 80, 100, 15, 20, 0, 2) + new AttackMove(MoveId.CRUNCH, PokemonType.DARK, MoveCategory.PHYSICAL, 80, 100, 15, 20, 0, 2) .attr(StatStageChangeAttr, [ Stat.DEF ], -1) .bitingMove(), - new AttackMove(Moves.MIRROR_COAT, PokemonType.PSYCHIC, MoveCategory.SPECIAL, -1, 100, 20, -1, -5, 2) + new AttackMove(MoveId.MIRROR_COAT, PokemonType.PSYCHIC, MoveCategory.SPECIAL, -1, 100, 20, -1, -5, 2) .attr(CounterDamageAttr, (move: Move) => move.category === MoveCategory.SPECIAL, 2) .target(MoveTarget.ATTACKER), - new StatusMove(Moves.PSYCH_UP, PokemonType.NORMAL, -1, 10, -1, 0, 2) + new StatusMove(MoveId.PSYCH_UP, PokemonType.NORMAL, -1, 10, -1, 0, 2) .ignoresSubstitute() .attr(CopyStatsAttr), - new AttackMove(Moves.EXTREME_SPEED, PokemonType.NORMAL, MoveCategory.PHYSICAL, 80, 100, 5, -1, 2, 2), - new AttackMove(Moves.ANCIENT_POWER, PokemonType.ROCK, MoveCategory.SPECIAL, 60, 100, 5, 10, 0, 2) + new AttackMove(MoveId.EXTREME_SPEED, PokemonType.NORMAL, MoveCategory.PHYSICAL, 80, 100, 5, -1, 2, 2), + new AttackMove(MoveId.ANCIENT_POWER, PokemonType.ROCK, MoveCategory.SPECIAL, 60, 100, 5, 10, 0, 2) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ], 1, true), - new AttackMove(Moves.SHADOW_BALL, PokemonType.GHOST, MoveCategory.SPECIAL, 80, 100, 15, 20, 0, 2) + new AttackMove(MoveId.SHADOW_BALL, PokemonType.GHOST, MoveCategory.SPECIAL, 80, 100, 15, 20, 0, 2) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -1) .ballBombMove(), - new AttackMove(Moves.FUTURE_SIGHT, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 2) + new AttackMove(MoveId.FUTURE_SIGHT, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 2) .partial() // cannot be used on multiple Pokemon on the same side in a double battle, hits immediately when called by Metronome/etc, should not apply abilities or held items if user is off the field .ignoresProtect() .attr(DelayedAttackAttr, ArenaTagType.FUTURE_SIGHT, ChargeAnim.FUTURE_SIGHT_CHARGING, i18next.t("moveTriggers:foresawAnAttack", { pokemonName: "{USER}" })), - new AttackMove(Moves.ROCK_SMASH, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 40, 100, 15, 50, 0, 2) + new AttackMove(MoveId.ROCK_SMASH, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 40, 100, 15, 50, 0, 2) .attr(StatStageChangeAttr, [ Stat.DEF ], -1), - new AttackMove(Moves.WHIRLPOOL, PokemonType.WATER, MoveCategory.SPECIAL, 35, 85, 15, -1, 0, 2) + new AttackMove(MoveId.WHIRLPOOL, PokemonType.WATER, MoveCategory.SPECIAL, 35, 85, 15, -1, 0, 2) .attr(TrapAttr, BattlerTagType.WHIRLPOOL) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.UNDERWATER), - new AttackMove(Moves.BEAT_UP, PokemonType.DARK, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 2) + new AttackMove(MoveId.BEAT_UP, PokemonType.DARK, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 2) .attr(MultiHitAttr, MultiHitType.BEAT_UP) .attr(BeatUpAttr) .makesContact(false), - new AttackMove(Moves.FAKE_OUT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 10, 100, 3, 3) + new AttackMove(MoveId.FAKE_OUT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 10, 100, 3, 3) .attr(FlinchAttr) .condition(new FirstMoveCondition()), - new AttackMove(Moves.UPROAR, PokemonType.NORMAL, MoveCategory.SPECIAL, 90, 100, 10, -1, 0, 3) + new AttackMove(MoveId.UPROAR, PokemonType.NORMAL, MoveCategory.SPECIAL, 90, 100, 10, -1, 0, 3) .soundBased() .target(MoveTarget.RANDOM_NEAR_ENEMY) .partial(), // Does not lock the user, does not stop Pokemon from sleeping // Likely can make use of FrenzyAttr and an ArenaTag (just without the FrenzyMissFunc) - new SelfStatusMove(Moves.STOCKPILE, PokemonType.NORMAL, -1, 20, -1, 0, 3) + new SelfStatusMove(MoveId.STOCKPILE, PokemonType.NORMAL, -1, 20, -1, 0, 3) .condition(user => (user.getTag(StockpilingTag)?.stockpiledCount ?? 0) < 3) .attr(AddBattlerTagAttr, BattlerTagType.STOCKPILING, true), - new AttackMove(Moves.SPIT_UP, PokemonType.NORMAL, MoveCategory.SPECIAL, -1, -1, 10, -1, 0, 3) + new AttackMove(MoveId.SPIT_UP, PokemonType.NORMAL, MoveCategory.SPECIAL, -1, -1, 10, -1, 0, 3) .condition(hasStockpileStacksCondition) .attr(SpitUpPowerAttr, 100) .attr(RemoveBattlerTagAttr, [ BattlerTagType.STOCKPILING ], true), - new SelfStatusMove(Moves.SWALLOW, PokemonType.NORMAL, -1, 10, -1, 0, 3) + new SelfStatusMove(MoveId.SWALLOW, PokemonType.NORMAL, -1, 10, -1, 0, 3) .condition(hasStockpileStacksCondition) .attr(SwallowHealAttr) .attr(RemoveBattlerTagAttr, [ BattlerTagType.STOCKPILING ], true) .triageMove(), - new AttackMove(Moves.HEAT_WAVE, PokemonType.FIRE, MoveCategory.SPECIAL, 95, 90, 10, 10, 0, 3) + new AttackMove(MoveId.HEAT_WAVE, PokemonType.FIRE, MoveCategory.SPECIAL, 95, 90, 10, 10, 0, 3) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) .attr(StatusEffectAttr, StatusEffect.BURN) .windMove() .target(MoveTarget.ALL_NEAR_ENEMIES), - new StatusMove(Moves.HAIL, PokemonType.ICE, -1, 10, -1, 0, 3) + new StatusMove(MoveId.HAIL, PokemonType.ICE, -1, 10, -1, 0, 3) .attr(WeatherChangeAttr, WeatherType.HAIL) .target(MoveTarget.BOTH_SIDES), - new StatusMove(Moves.TORMENT, PokemonType.DARK, 100, 15, -1, 0, 3) + new StatusMove(MoveId.TORMENT, PokemonType.DARK, 100, 15, -1, 0, 3) .ignoresSubstitute() .edgeCase() // Incomplete implementation because of Uproar's partial implementation .attr(AddBattlerTagAttr, BattlerTagType.TORMENT, false, true, 1) .reflectable(), - new StatusMove(Moves.FLATTER, PokemonType.DARK, 100, 15, -1, 0, 3) + new StatusMove(MoveId.FLATTER, PokemonType.DARK, 100, 15, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPATK ], 1) .attr(ConfuseAttr) .reflectable(), - new StatusMove(Moves.WILL_O_WISP, PokemonType.FIRE, 85, 15, -1, 0, 3) + new StatusMove(MoveId.WILL_O_WISP, PokemonType.FIRE, 85, 15, -1, 0, 3) .attr(StatusEffectAttr, StatusEffect.BURN) .reflectable(), - new StatusMove(Moves.MEMENTO, PokemonType.DARK, 100, 10, -1, 0, 3) + new StatusMove(MoveId.MEMENTO, PokemonType.DARK, 100, 10, -1, 0, 3) .attr(SacrificialAttrOnHit) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -2), - new AttackMove(Moves.FACADE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 3) + new AttackMove(MoveId.FACADE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 3) .attr(MovePowerMultiplierAttr, (user, target, move) => user.status && (user.status.effect === StatusEffect.BURN || user.status.effect === StatusEffect.POISON || user.status.effect === StatusEffect.TOXIC || user.status.effect === StatusEffect.PARALYSIS) ? 2 : 1) .attr(BypassBurnDamageReductionAttr), - new AttackMove(Moves.FOCUS_PUNCH, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 150, 100, 20, -1, -3, 3) + new AttackMove(MoveId.FOCUS_PUNCH, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 150, 100, 20, -1, -3, 3) .attr(MessageHeaderAttr, (user, move) => i18next.t("moveTriggers:isTighteningFocus", { pokemonName: getPokemonNameWithAffix(user) })) .attr(PreUseInterruptAttr, (user, target, move) => i18next.t("moveTriggers:lostFocus", { pokemonName: getPokemonNameWithAffix(user) }), user => !!user.turnData.attacksReceived.find(r => r.damage)) .punchingMove(), - new AttackMove(Moves.SMELLING_SALTS, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 10, -1, 0, 3) + new AttackMove(MoveId.SMELLING_SALTS, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 10, -1, 0, 3) .attr(MovePowerMultiplierAttr, (user, target, move) => target.status?.effect === StatusEffect.PARALYSIS ? 2 : 1) .attr(HealStatusEffectAttr, true, StatusEffect.PARALYSIS), - new SelfStatusMove(Moves.FOLLOW_ME, PokemonType.NORMAL, -1, 20, -1, 2, 3) + new SelfStatusMove(MoveId.FOLLOW_ME, PokemonType.NORMAL, -1, 20, -1, 2, 3) .attr(AddBattlerTagAttr, BattlerTagType.CENTER_OF_ATTENTION, true), - new StatusMove(Moves.NATURE_POWER, PokemonType.NORMAL, -1, 20, -1, 0, 3) + new StatusMove(MoveId.NATURE_POWER, PokemonType.NORMAL, -1, 20, -1, 0, 3) .attr(NaturePowerAttr), - new SelfStatusMove(Moves.CHARGE, PokemonType.ELECTRIC, -1, 20, -1, 0, 3) + new SelfStatusMove(MoveId.CHARGE, PokemonType.ELECTRIC, -1, 20, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPDEF ], 1, true) .attr(AddBattlerTagAttr, BattlerTagType.CHARGED, true, false), - new StatusMove(Moves.TAUNT, PokemonType.DARK, 100, 20, -1, 0, 3) + new StatusMove(MoveId.TAUNT, PokemonType.DARK, 100, 20, -1, 0, 3) .ignoresSubstitute() .attr(AddBattlerTagAttr, BattlerTagType.TAUNT, false, true, 4) .reflectable(), - new StatusMove(Moves.HELPING_HAND, PokemonType.NORMAL, -1, 20, -1, 5, 3) + new StatusMove(MoveId.HELPING_HAND, PokemonType.NORMAL, -1, 20, -1, 5, 3) .attr(AddBattlerTagAttr, BattlerTagType.HELPING_HAND) .ignoresSubstitute() .target(MoveTarget.NEAR_ALLY) .condition(failIfSingleBattle), - new StatusMove(Moves.TRICK, PokemonType.PSYCHIC, 100, 10, -1, 0, 3) + new StatusMove(MoveId.TRICK, PokemonType.PSYCHIC, 100, 10, -1, 0, 3) .unimplemented(), - new StatusMove(Moves.ROLE_PLAY, PokemonType.PSYCHIC, -1, 10, -1, 0, 3) + new StatusMove(MoveId.ROLE_PLAY, PokemonType.PSYCHIC, -1, 10, -1, 0, 3) .ignoresSubstitute() .attr(AbilityCopyAttr), - new SelfStatusMove(Moves.WISH, PokemonType.NORMAL, -1, 10, -1, 0, 3) + new SelfStatusMove(MoveId.WISH, PokemonType.NORMAL, -1, 10, -1, 0, 3) .triageMove() .attr(AddArenaTagAttr, ArenaTagType.WISH, 2, true), - new SelfStatusMove(Moves.ASSIST, PokemonType.NORMAL, -1, 20, -1, 0, 3) + new SelfStatusMove(MoveId.ASSIST, PokemonType.NORMAL, -1, 20, -1, 0, 3) .attr(RandomMovesetMoveAttr, invalidAssistMoves, true), - new SelfStatusMove(Moves.INGRAIN, PokemonType.GRASS, -1, 20, -1, 0, 3) + new SelfStatusMove(MoveId.INGRAIN, PokemonType.GRASS, -1, 20, -1, 0, 3) .attr(AddBattlerTagAttr, BattlerTagType.INGRAIN, true, true) .attr(AddBattlerTagAttr, BattlerTagType.IGNORE_FLYING, true, true) .attr(RemoveBattlerTagAttr, [ BattlerTagType.FLOATING ], true), - new AttackMove(Moves.SUPERPOWER, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 3) + new AttackMove(MoveId.SUPERPOWER, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF ], -1, true), - new SelfStatusMove(Moves.MAGIC_COAT, PokemonType.PSYCHIC, -1, 15, -1, 4, 3) + new SelfStatusMove(MoveId.MAGIC_COAT, PokemonType.PSYCHIC, -1, 15, -1, 4, 3) .attr(AddBattlerTagAttr, BattlerTagType.MAGIC_COAT, true, true, 0) .condition(failIfLastCondition) // Interactions with stomping tantrum, instruct, and other moves that // rely on move history // Also will not reflect roar / whirlwind if the target has ForceSwitchOutImmunityAbAttr .edgeCase(), - new SelfStatusMove(Moves.RECYCLE, PokemonType.NORMAL, -1, 10, -1, 0, 3) + new SelfStatusMove(MoveId.RECYCLE, PokemonType.NORMAL, -1, 10, -1, 0, 3) .unimplemented(), - new AttackMove(Moves.REVENGE, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 60, 100, 10, -1, -4, 3) + new AttackMove(MoveId.REVENGE, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 60, 100, 10, -1, -4, 3) .attr(TurnDamagedDoublePowerAttr), - new AttackMove(Moves.BRICK_BREAK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 75, 100, 15, -1, 0, 3) + new AttackMove(MoveId.BRICK_BREAK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 75, 100, 15, -1, 0, 3) .attr(RemoveScreensAttr), - new StatusMove(Moves.YAWN, PokemonType.NORMAL, -1, 10, -1, 0, 3) + new StatusMove(MoveId.YAWN, PokemonType.NORMAL, -1, 10, -1, 0, 3) .attr(AddBattlerTagAttr, BattlerTagType.DROWSY, false, true) .condition((user, target, move) => !target.status && !target.isSafeguarded(user)) .reflectable(), - new AttackMove(Moves.KNOCK_OFF, PokemonType.DARK, MoveCategory.PHYSICAL, 65, 100, 20, -1, 0, 3) + new AttackMove(MoveId.KNOCK_OFF, PokemonType.DARK, MoveCategory.PHYSICAL, 65, 100, 20, -1, 0, 3) .attr(MovePowerMultiplierAttr, (user, target, move) => target.getHeldItems().filter(i => i.isTransferable).length > 0 ? 1.5 : 1) .attr(RemoveHeldItemAttr, false) .edgeCase(), // Should not be able to remove held item if user faints due to Rough Skin, Iron Barbs, etc. // Should be able to remove items from pokemon with Sticky Hold if the damage causes them to faint - new AttackMove(Moves.ENDEAVOR, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 3) + new AttackMove(MoveId.ENDEAVOR, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 3) .attr(MatchHpAttr) .condition(failOnBossCondition), - new AttackMove(Moves.ERUPTION, PokemonType.FIRE, MoveCategory.SPECIAL, 150, 100, 5, -1, 0, 3) + new AttackMove(MoveId.ERUPTION, PokemonType.FIRE, MoveCategory.SPECIAL, 150, 100, 5, -1, 0, 3) .attr(HpPowerAttr) .target(MoveTarget.ALL_NEAR_ENEMIES), - new StatusMove(Moves.SKILL_SWAP, PokemonType.PSYCHIC, -1, 10, -1, 0, 3) + new StatusMove(MoveId.SKILL_SWAP, PokemonType.PSYCHIC, -1, 10, -1, 0, 3) .ignoresSubstitute() .attr(SwitchAbilitiesAttr), - new StatusMove(Moves.IMPRISON, PokemonType.PSYCHIC, 100, 10, -1, 0, 3) + new StatusMove(MoveId.IMPRISON, PokemonType.PSYCHIC, 100, 10, -1, 0, 3) .ignoresSubstitute() .attr(AddArenaTagAttr, ArenaTagType.IMPRISON, 1, true, false) .target(MoveTarget.ENEMY_SIDE), - new SelfStatusMove(Moves.REFRESH, PokemonType.NORMAL, -1, 20, -1, 0, 3) + new SelfStatusMove(MoveId.REFRESH, PokemonType.NORMAL, -1, 20, -1, 0, 3) .attr(HealStatusEffectAttr, true, [ StatusEffect.PARALYSIS, StatusEffect.POISON, StatusEffect.TOXIC, StatusEffect.BURN ]) .condition((user, target, move) => !!user.status && (user.status.effect === StatusEffect.PARALYSIS || user.status.effect === StatusEffect.POISON || user.status.effect === StatusEffect.TOXIC || user.status.effect === StatusEffect.BURN)), - new SelfStatusMove(Moves.GRUDGE, PokemonType.GHOST, -1, 5, -1, 0, 3) + new SelfStatusMove(MoveId.GRUDGE, PokemonType.GHOST, -1, 5, -1, 0, 3) .attr(AddBattlerTagAttr, BattlerTagType.GRUDGE, true, undefined, 1), - new SelfStatusMove(Moves.SNATCH, PokemonType.DARK, -1, 10, -1, 4, 3) + new SelfStatusMove(MoveId.SNATCH, PokemonType.DARK, -1, 10, -1, 4, 3) .unimplemented(), - new AttackMove(Moves.SECRET_POWER, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 20, 30, 0, 3) + new AttackMove(MoveId.SECRET_POWER, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 20, 30, 0, 3) .makesContact(false) .attr(SecretPowerAttr), - new ChargingAttackMove(Moves.DIVE, PokemonType.WATER, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 3) + new ChargingAttackMove(MoveId.DIVE, PokemonType.WATER, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 3) .chargeText(i18next.t("moveTriggers:hidUnderwater", { pokemonName: "{USER}" })) .chargeAttr(SemiInvulnerableAttr, BattlerTagType.UNDERWATER) .chargeAttr(GulpMissileTagAttr), - new AttackMove(Moves.ARM_THRUST, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 15, 100, 20, -1, 0, 3) + new AttackMove(MoveId.ARM_THRUST, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 15, 100, 20, -1, 0, 3) .attr(MultiHitAttr), - new SelfStatusMove(Moves.CAMOUFLAGE, PokemonType.NORMAL, -1, 20, -1, 0, 3) + new SelfStatusMove(MoveId.CAMOUFLAGE, PokemonType.NORMAL, -1, 20, -1, 0, 3) .attr(CopyBiomeTypeAttr), - new SelfStatusMove(Moves.TAIL_GLOW, PokemonType.BUG, -1, 20, -1, 0, 3) + new SelfStatusMove(MoveId.TAIL_GLOW, PokemonType.BUG, -1, 20, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPATK ], 3, true), - new AttackMove(Moves.LUSTER_PURGE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 95, 100, 5, 50, 0, 3) + new AttackMove(MoveId.LUSTER_PURGE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 95, 100, 5, 50, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -1), - new AttackMove(Moves.MIST_BALL, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 95, 100, 5, 50, 0, 3) + new AttackMove(MoveId.MIST_BALL, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 95, 100, 5, 50, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPATK ], -1) .ballBombMove(), - new StatusMove(Moves.FEATHER_DANCE, PokemonType.FLYING, 100, 15, -1, 0, 3) + new StatusMove(MoveId.FEATHER_DANCE, PokemonType.FLYING, 100, 15, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.ATK ], -2) .danceMove() .reflectable(), - new StatusMove(Moves.TEETER_DANCE, PokemonType.NORMAL, 100, 20, -1, 0, 3) + new StatusMove(MoveId.TEETER_DANCE, PokemonType.NORMAL, 100, 20, -1, 0, 3) .attr(ConfuseAttr) .danceMove() .target(MoveTarget.ALL_NEAR_OTHERS), - new AttackMove(Moves.BLAZE_KICK, PokemonType.FIRE, MoveCategory.PHYSICAL, 85, 90, 10, 10, 0, 3) + new AttackMove(MoveId.BLAZE_KICK, PokemonType.FIRE, MoveCategory.PHYSICAL, 85, 90, 10, 10, 0, 3) .attr(HighCritAttr) .attr(StatusEffectAttr, StatusEffect.BURN), - new StatusMove(Moves.MUD_SPORT, PokemonType.GROUND, -1, 15, -1, 0, 3) + new StatusMove(MoveId.MUD_SPORT, PokemonType.GROUND, -1, 15, -1, 0, 3) .ignoresProtect() .attr(AddArenaTagAttr, ArenaTagType.MUD_SPORT, 5) .target(MoveTarget.BOTH_SIDES), - new AttackMove(Moves.ICE_BALL, PokemonType.ICE, MoveCategory.PHYSICAL, 30, 90, 20, -1, 0, 3) + new AttackMove(MoveId.ICE_BALL, PokemonType.ICE, MoveCategory.PHYSICAL, 30, 90, 20, -1, 0, 3) .partial() // Does not lock the user properly, does not increase damage correctly - .attr(ConsecutiveUseDoublePowerAttr, 5, true, true, Moves.DEFENSE_CURL) + .attr(ConsecutiveUseDoublePowerAttr, 5, true, true, MoveId.DEFENSE_CURL) .ballBombMove(), - new AttackMove(Moves.NEEDLE_ARM, PokemonType.GRASS, MoveCategory.PHYSICAL, 60, 100, 15, 30, 0, 3) + new AttackMove(MoveId.NEEDLE_ARM, PokemonType.GRASS, MoveCategory.PHYSICAL, 60, 100, 15, 30, 0, 3) .attr(FlinchAttr), - new SelfStatusMove(Moves.SLACK_OFF, PokemonType.NORMAL, -1, 5, -1, 0, 3) + new SelfStatusMove(MoveId.SLACK_OFF, PokemonType.NORMAL, -1, 5, -1, 0, 3) .attr(HealAttr, 0.5) .triageMove(), - new AttackMove(Moves.HYPER_VOICE, PokemonType.NORMAL, MoveCategory.SPECIAL, 90, 100, 10, -1, 0, 3) + new AttackMove(MoveId.HYPER_VOICE, PokemonType.NORMAL, MoveCategory.SPECIAL, 90, 100, 10, -1, 0, 3) .soundBased() .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.POISON_FANG, PokemonType.POISON, MoveCategory.PHYSICAL, 50, 100, 15, 50, 0, 3) + new AttackMove(MoveId.POISON_FANG, PokemonType.POISON, MoveCategory.PHYSICAL, 50, 100, 15, 50, 0, 3) .attr(StatusEffectAttr, StatusEffect.TOXIC) .bitingMove(), - new AttackMove(Moves.CRUSH_CLAW, PokemonType.NORMAL, MoveCategory.PHYSICAL, 75, 95, 10, 50, 0, 3) + new AttackMove(MoveId.CRUSH_CLAW, PokemonType.NORMAL, MoveCategory.PHYSICAL, 75, 95, 10, 50, 0, 3) .attr(StatStageChangeAttr, [ Stat.DEF ], -1), - new AttackMove(Moves.BLAST_BURN, PokemonType.FIRE, MoveCategory.SPECIAL, 150, 90, 5, -1, 0, 3) + new AttackMove(MoveId.BLAST_BURN, PokemonType.FIRE, MoveCategory.SPECIAL, 150, 90, 5, -1, 0, 3) .attr(RechargeAttr), - new AttackMove(Moves.HYDRO_CANNON, PokemonType.WATER, MoveCategory.SPECIAL, 150, 90, 5, -1, 0, 3) + new AttackMove(MoveId.HYDRO_CANNON, PokemonType.WATER, MoveCategory.SPECIAL, 150, 90, 5, -1, 0, 3) .attr(RechargeAttr), - new AttackMove(Moves.METEOR_MASH, PokemonType.STEEL, MoveCategory.PHYSICAL, 90, 90, 10, 20, 0, 3) + new AttackMove(MoveId.METEOR_MASH, PokemonType.STEEL, MoveCategory.PHYSICAL, 90, 90, 10, 20, 0, 3) .attr(StatStageChangeAttr, [ Stat.ATK ], 1, true) .punchingMove(), - new AttackMove(Moves.ASTONISH, PokemonType.GHOST, MoveCategory.PHYSICAL, 30, 100, 15, 30, 0, 3) + new AttackMove(MoveId.ASTONISH, PokemonType.GHOST, MoveCategory.PHYSICAL, 30, 100, 15, 30, 0, 3) .attr(FlinchAttr), - new AttackMove(Moves.WEATHER_BALL, PokemonType.NORMAL, MoveCategory.SPECIAL, 50, 100, 10, -1, 0, 3) + new AttackMove(MoveId.WEATHER_BALL, PokemonType.NORMAL, MoveCategory.SPECIAL, 50, 100, 10, -1, 0, 3) .attr(WeatherBallTypeAttr) .attr(MovePowerMultiplierAttr, (user, target, move) => { const weather = globalScene.arena.weather; @@ -9240,163 +9240,163 @@ export function initMoves() { return 1; }) .ballBombMove(), - new StatusMove(Moves.AROMATHERAPY, PokemonType.GRASS, -1, 5, -1, 0, 3) - .attr(PartyStatusCureAttr, i18next.t("moveTriggers:soothingAromaWaftedThroughArea"), Abilities.SAP_SIPPER) + new StatusMove(MoveId.AROMATHERAPY, PokemonType.GRASS, -1, 5, -1, 0, 3) + .attr(PartyStatusCureAttr, i18next.t("moveTriggers:soothingAromaWaftedThroughArea"), AbilityId.SAP_SIPPER) .target(MoveTarget.PARTY), - new StatusMove(Moves.FAKE_TEARS, PokemonType.DARK, 100, 20, -1, 0, 3) + new StatusMove(MoveId.FAKE_TEARS, PokemonType.DARK, 100, 20, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -2) .reflectable(), - new AttackMove(Moves.AIR_CUTTER, PokemonType.FLYING, MoveCategory.SPECIAL, 60, 95, 25, -1, 0, 3) + new AttackMove(MoveId.AIR_CUTTER, PokemonType.FLYING, MoveCategory.SPECIAL, 60, 95, 25, -1, 0, 3) .attr(HighCritAttr) .slicingMove() .windMove() .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.OVERHEAT, PokemonType.FIRE, MoveCategory.SPECIAL, 130, 90, 5, -1, 0, 3) + new AttackMove(MoveId.OVERHEAT, PokemonType.FIRE, MoveCategory.SPECIAL, 130, 90, 5, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPATK ], -2, true) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE), - new StatusMove(Moves.ODOR_SLEUTH, PokemonType.NORMAL, -1, 40, -1, 0, 3) + new StatusMove(MoveId.ODOR_SLEUTH, PokemonType.NORMAL, -1, 40, -1, 0, 3) .attr(ExposedMoveAttr, BattlerTagType.IGNORE_GHOST) .ignoresSubstitute() .reflectable(), - new AttackMove(Moves.ROCK_TOMB, PokemonType.ROCK, MoveCategory.PHYSICAL, 60, 95, 15, 100, 0, 3) + new AttackMove(MoveId.ROCK_TOMB, PokemonType.ROCK, MoveCategory.PHYSICAL, 60, 95, 15, 100, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) .makesContact(false), - new AttackMove(Moves.SILVER_WIND, PokemonType.BUG, MoveCategory.SPECIAL, 60, 100, 5, 10, 0, 3) + new AttackMove(MoveId.SILVER_WIND, PokemonType.BUG, MoveCategory.SPECIAL, 60, 100, 5, 10, 0, 3) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ], 1, true) .windMove(), - new StatusMove(Moves.METAL_SOUND, PokemonType.STEEL, 85, 40, -1, 0, 3) + new StatusMove(MoveId.METAL_SOUND, PokemonType.STEEL, 85, 40, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -2) .soundBased() .reflectable(), - new StatusMove(Moves.GRASS_WHISTLE, PokemonType.GRASS, 55, 15, -1, 0, 3) + new StatusMove(MoveId.GRASS_WHISTLE, PokemonType.GRASS, 55, 15, -1, 0, 3) .attr(StatusEffectAttr, StatusEffect.SLEEP) .soundBased() .reflectable(), - new StatusMove(Moves.TICKLE, PokemonType.NORMAL, 100, 20, -1, 0, 3) + new StatusMove(MoveId.TICKLE, PokemonType.NORMAL, 100, 20, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF ], -1) .reflectable(), - new SelfStatusMove(Moves.COSMIC_POWER, PokemonType.PSYCHIC, -1, 20, -1, 0, 3) + new SelfStatusMove(MoveId.COSMIC_POWER, PokemonType.PSYCHIC, -1, 20, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.DEF, Stat.SPDEF ], 1, true), - new AttackMove(Moves.WATER_SPOUT, PokemonType.WATER, MoveCategory.SPECIAL, 150, 100, 5, -1, 0, 3) + new AttackMove(MoveId.WATER_SPOUT, PokemonType.WATER, MoveCategory.SPECIAL, 150, 100, 5, -1, 0, 3) .attr(HpPowerAttr) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.SIGNAL_BEAM, PokemonType.BUG, MoveCategory.SPECIAL, 75, 100, 15, 10, 0, 3) + new AttackMove(MoveId.SIGNAL_BEAM, PokemonType.BUG, MoveCategory.SPECIAL, 75, 100, 15, 10, 0, 3) .attr(ConfuseAttr), - new AttackMove(Moves.SHADOW_PUNCH, PokemonType.GHOST, MoveCategory.PHYSICAL, 60, -1, 20, -1, 0, 3) + new AttackMove(MoveId.SHADOW_PUNCH, PokemonType.GHOST, MoveCategory.PHYSICAL, 60, -1, 20, -1, 0, 3) .punchingMove(), - new AttackMove(Moves.EXTRASENSORY, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 20, 10, 0, 3) + new AttackMove(MoveId.EXTRASENSORY, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 20, 10, 0, 3) .attr(FlinchAttr), - new AttackMove(Moves.SKY_UPPERCUT, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 85, 90, 15, -1, 0, 3) + new AttackMove(MoveId.SKY_UPPERCUT, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 85, 90, 15, -1, 0, 3) .attr(HitsTagAttr, BattlerTagType.FLYING) .punchingMove(), - new AttackMove(Moves.SAND_TOMB, PokemonType.GROUND, MoveCategory.PHYSICAL, 35, 85, 15, -1, 0, 3) + new AttackMove(MoveId.SAND_TOMB, PokemonType.GROUND, MoveCategory.PHYSICAL, 35, 85, 15, -1, 0, 3) .attr(TrapAttr, BattlerTagType.SAND_TOMB) .makesContact(false), - new AttackMove(Moves.SHEER_COLD, PokemonType.ICE, MoveCategory.SPECIAL, 200, 20, 5, -1, 0, 3) + new AttackMove(MoveId.SHEER_COLD, PokemonType.ICE, MoveCategory.SPECIAL, 200, 20, 5, -1, 0, 3) .attr(IceNoEffectTypeAttr) .attr(OneHitKOAttr) .attr(SheerColdAccuracyAttr), - new AttackMove(Moves.MUDDY_WATER, PokemonType.WATER, MoveCategory.SPECIAL, 90, 85, 10, 30, 0, 3) + new AttackMove(MoveId.MUDDY_WATER, PokemonType.WATER, MoveCategory.SPECIAL, 90, 85, 10, 30, 0, 3) .attr(StatStageChangeAttr, [ Stat.ACC ], -1) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.BULLET_SEED, PokemonType.GRASS, MoveCategory.PHYSICAL, 25, 100, 30, -1, 0, 3) + new AttackMove(MoveId.BULLET_SEED, PokemonType.GRASS, MoveCategory.PHYSICAL, 25, 100, 30, -1, 0, 3) .attr(MultiHitAttr) .makesContact(false) .ballBombMove(), - new AttackMove(Moves.AERIAL_ACE, PokemonType.FLYING, MoveCategory.PHYSICAL, 60, -1, 20, -1, 0, 3) + new AttackMove(MoveId.AERIAL_ACE, PokemonType.FLYING, MoveCategory.PHYSICAL, 60, -1, 20, -1, 0, 3) .slicingMove(), - new AttackMove(Moves.ICICLE_SPEAR, PokemonType.ICE, MoveCategory.PHYSICAL, 25, 100, 30, -1, 0, 3) + new AttackMove(MoveId.ICICLE_SPEAR, PokemonType.ICE, MoveCategory.PHYSICAL, 25, 100, 30, -1, 0, 3) .attr(MultiHitAttr) .makesContact(false), - new SelfStatusMove(Moves.IRON_DEFENSE, PokemonType.STEEL, -1, 15, -1, 0, 3) + new SelfStatusMove(MoveId.IRON_DEFENSE, PokemonType.STEEL, -1, 15, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.DEF ], 2, true), - new StatusMove(Moves.BLOCK, PokemonType.NORMAL, -1, 5, -1, 0, 3) + new StatusMove(MoveId.BLOCK, PokemonType.NORMAL, -1, 5, -1, 0, 3) .condition(failIfGhostTypeCondition) .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, true, 1) .reflectable(), - new StatusMove(Moves.HOWL, PokemonType.NORMAL, -1, 40, -1, 0, 3) + new StatusMove(MoveId.HOWL, PokemonType.NORMAL, -1, 40, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.ATK ], 1) .soundBased() .target(MoveTarget.USER_AND_ALLIES), - new AttackMove(Moves.DRAGON_CLAW, PokemonType.DRAGON, MoveCategory.PHYSICAL, 80, 100, 15, -1, 0, 3), - new AttackMove(Moves.FRENZY_PLANT, PokemonType.GRASS, MoveCategory.SPECIAL, 150, 90, 5, -1, 0, 3) + new AttackMove(MoveId.DRAGON_CLAW, PokemonType.DRAGON, MoveCategory.PHYSICAL, 80, 100, 15, -1, 0, 3), + new AttackMove(MoveId.FRENZY_PLANT, PokemonType.GRASS, MoveCategory.SPECIAL, 150, 90, 5, -1, 0, 3) .attr(RechargeAttr), - new SelfStatusMove(Moves.BULK_UP, PokemonType.FIGHTING, -1, 20, -1, 0, 3) + new SelfStatusMove(MoveId.BULK_UP, PokemonType.FIGHTING, -1, 20, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF ], 1, true), - new ChargingAttackMove(Moves.BOUNCE, PokemonType.FLYING, MoveCategory.PHYSICAL, 85, 85, 5, 30, 0, 3) + new ChargingAttackMove(MoveId.BOUNCE, PokemonType.FLYING, MoveCategory.PHYSICAL, 85, 85, 5, 30, 0, 3) .chargeText(i18next.t("moveTriggers:sprangUp", { pokemonName: "{USER}" })) .chargeAttr(SemiInvulnerableAttr, BattlerTagType.FLYING) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .condition(failOnGravityCondition), - new AttackMove(Moves.MUD_SHOT, PokemonType.GROUND, MoveCategory.SPECIAL, 55, 95, 15, 100, 0, 3) + new AttackMove(MoveId.MUD_SHOT, PokemonType.GROUND, MoveCategory.SPECIAL, 55, 95, 15, 100, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPD ], -1), - new AttackMove(Moves.POISON_TAIL, PokemonType.POISON, MoveCategory.PHYSICAL, 50, 100, 25, 10, 0, 3) + new AttackMove(MoveId.POISON_TAIL, PokemonType.POISON, MoveCategory.PHYSICAL, 50, 100, 25, 10, 0, 3) .attr(HighCritAttr) .attr(StatusEffectAttr, StatusEffect.POISON), - new AttackMove(Moves.COVET, PokemonType.NORMAL, MoveCategory.PHYSICAL, 60, 100, 25, -1, 0, 3) + new AttackMove(MoveId.COVET, PokemonType.NORMAL, MoveCategory.PHYSICAL, 60, 100, 25, -1, 0, 3) .attr(StealHeldItemChanceAttr, 0.3) .edgeCase(), // Should not be able to steal held item if user faints due to Rough Skin, Iron Barbs, etc. // Should be able to steal items from pokemon with Sticky Hold if the damage causes them to faint - new AttackMove(Moves.VOLT_TACKLE, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 120, 100, 15, 10, 0, 3) + new AttackMove(MoveId.VOLT_TACKLE, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 120, 100, 15, 10, 0, 3) .attr(RecoilAttr, false, 0.33) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .recklessMove(), - new AttackMove(Moves.MAGICAL_LEAF, PokemonType.GRASS, MoveCategory.SPECIAL, 60, -1, 20, -1, 0, 3), - new StatusMove(Moves.WATER_SPORT, PokemonType.WATER, -1, 15, -1, 0, 3) + new AttackMove(MoveId.MAGICAL_LEAF, PokemonType.GRASS, MoveCategory.SPECIAL, 60, -1, 20, -1, 0, 3), + new StatusMove(MoveId.WATER_SPORT, PokemonType.WATER, -1, 15, -1, 0, 3) .ignoresProtect() .attr(AddArenaTagAttr, ArenaTagType.WATER_SPORT, 5) .target(MoveTarget.BOTH_SIDES), - new SelfStatusMove(Moves.CALM_MIND, PokemonType.PSYCHIC, -1, 20, -1, 0, 3) + new SelfStatusMove(MoveId.CALM_MIND, PokemonType.PSYCHIC, -1, 20, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPATK, Stat.SPDEF ], 1, true), - new AttackMove(Moves.LEAF_BLADE, PokemonType.GRASS, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 3) + new AttackMove(MoveId.LEAF_BLADE, PokemonType.GRASS, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 3) .attr(HighCritAttr) .slicingMove(), - new SelfStatusMove(Moves.DRAGON_DANCE, PokemonType.DRAGON, -1, 20, -1, 0, 3) + new SelfStatusMove(MoveId.DRAGON_DANCE, PokemonType.DRAGON, -1, 20, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPD ], 1, true) .danceMove(), - new AttackMove(Moves.ROCK_BLAST, PokemonType.ROCK, MoveCategory.PHYSICAL, 25, 90, 10, -1, 0, 3) + new AttackMove(MoveId.ROCK_BLAST, PokemonType.ROCK, MoveCategory.PHYSICAL, 25, 90, 10, -1, 0, 3) .attr(MultiHitAttr) .makesContact(false) .ballBombMove(), - new AttackMove(Moves.SHOCK_WAVE, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 60, -1, 20, -1, 0, 3), - new AttackMove(Moves.WATER_PULSE, PokemonType.WATER, MoveCategory.SPECIAL, 60, 100, 20, 20, 0, 3) + new AttackMove(MoveId.SHOCK_WAVE, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 60, -1, 20, -1, 0, 3), + new AttackMove(MoveId.WATER_PULSE, PokemonType.WATER, MoveCategory.SPECIAL, 60, 100, 20, 20, 0, 3) .attr(ConfuseAttr) .pulseMove(), - new AttackMove(Moves.DOOM_DESIRE, PokemonType.STEEL, MoveCategory.SPECIAL, 140, 100, 5, -1, 0, 3) + new AttackMove(MoveId.DOOM_DESIRE, PokemonType.STEEL, MoveCategory.SPECIAL, 140, 100, 5, -1, 0, 3) .partial() // cannot be used on multiple Pokemon on the same side in a double battle, hits immediately when called by Metronome/etc, should not apply abilities or held items if user is off the field .ignoresProtect() .attr(DelayedAttackAttr, ArenaTagType.DOOM_DESIRE, ChargeAnim.DOOM_DESIRE_CHARGING, i18next.t("moveTriggers:choseDoomDesireAsDestiny", { pokemonName: "{USER}" })), - new AttackMove(Moves.PSYCHO_BOOST, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 140, 90, 5, -1, 0, 3) + new AttackMove(MoveId.PSYCHO_BOOST, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 140, 90, 5, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPATK ], -2, true), - new SelfStatusMove(Moves.ROOST, PokemonType.FLYING, -1, 5, -1, 0, 4) + new SelfStatusMove(MoveId.ROOST, PokemonType.FLYING, -1, 5, -1, 0, 4) .attr(HealAttr, 0.5) .attr(AddBattlerTagAttr, BattlerTagType.ROOSTED, true, false) .triageMove(), - new StatusMove(Moves.GRAVITY, PokemonType.PSYCHIC, -1, 5, -1, 0, 4) + new StatusMove(MoveId.GRAVITY, PokemonType.PSYCHIC, -1, 5, -1, 0, 4) .ignoresProtect() .attr(AddArenaTagAttr, ArenaTagType.GRAVITY, 5) .target(MoveTarget.BOTH_SIDES), - new StatusMove(Moves.MIRACLE_EYE, PokemonType.PSYCHIC, -1, 40, -1, 0, 4) + new StatusMove(MoveId.MIRACLE_EYE, PokemonType.PSYCHIC, -1, 40, -1, 0, 4) .attr(ExposedMoveAttr, BattlerTagType.IGNORE_DARK) .ignoresSubstitute() .reflectable(), - new AttackMove(Moves.WAKE_UP_SLAP, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 70, 100, 10, -1, 0, 4) + new AttackMove(MoveId.WAKE_UP_SLAP, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 70, 100, 10, -1, 0, 4) .attr(MovePowerMultiplierAttr, (user, target, move) => targetSleptOrComatoseCondition(user, target, move) ? 2 : 1) .attr(HealStatusEffectAttr, false, StatusEffect.SLEEP), - new AttackMove(Moves.HAMMER_ARM, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 90, 10, -1, 0, 4) + new AttackMove(MoveId.HAMMER_ARM, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 90, 10, -1, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPD ], -1, true) .punchingMove(), - new AttackMove(Moves.GYRO_BALL, PokemonType.STEEL, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 4) + new AttackMove(MoveId.GYRO_BALL, PokemonType.STEEL, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 4) .attr(GyroBallPowerAttr) .ballBombMove(), - new SelfStatusMove(Moves.HEALING_WISH, PokemonType.PSYCHIC, -1, 10, -1, 0, 4) + new SelfStatusMove(MoveId.HEALING_WISH, PokemonType.PSYCHIC, -1, 10, -1, 0, 4) .attr(SacrificialFullRestoreAttr, false, "moveTriggers:sacrificialFullRestore") .triageMove() .condition(failIfLastInPartyCondition), - new AttackMove(Moves.BRINE, PokemonType.WATER, MoveCategory.SPECIAL, 65, 100, 10, -1, 0, 4) + new AttackMove(MoveId.BRINE, PokemonType.WATER, MoveCategory.SPECIAL, 65, 100, 10, -1, 0, 4) .attr(MovePowerMultiplierAttr, (user, target, move) => target.getHpRatio() < 0.5 ? 2 : 1), - new AttackMove(Moves.NATURAL_GIFT, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 100, 15, -1, 0, 4) + new AttackMove(MoveId.NATURAL_GIFT, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 100, 15, -1, 0, 4) .makesContact(false) .unimplemented(), /* @@ -9404,89 +9404,89 @@ export function initMoves() { and enable the harvest test.. Do NOT push to berriesEatenLast or else cud chew will puke the berry. */ - new AttackMove(Moves.FEINT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 30, 100, 10, -1, 2, 4) + new AttackMove(MoveId.FEINT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 30, 100, 10, -1, 2, 4) .attr(RemoveBattlerTagAttr, [ BattlerTagType.PROTECTED ]) .attr(RemoveArenaTagsAttr, [ ArenaTagType.QUICK_GUARD, ArenaTagType.WIDE_GUARD, ArenaTagType.MAT_BLOCK, ArenaTagType.CRAFTY_SHIELD ], false) .makesContact(false) .ignoresProtect(), - new AttackMove(Moves.PLUCK, PokemonType.FLYING, MoveCategory.PHYSICAL, 60, 100, 20, -1, 0, 4) + new AttackMove(MoveId.PLUCK, PokemonType.FLYING, MoveCategory.PHYSICAL, 60, 100, 20, -1, 0, 4) .attr(StealEatBerryAttr), - new StatusMove(Moves.TAILWIND, PokemonType.FLYING, -1, 15, -1, 0, 4) + new StatusMove(MoveId.TAILWIND, PokemonType.FLYING, -1, 15, -1, 0, 4) .windMove() .attr(AddArenaTagAttr, ArenaTagType.TAILWIND, 4, true) .target(MoveTarget.USER_SIDE), - new StatusMove(Moves.ACUPRESSURE, PokemonType.NORMAL, -1, 30, -1, 0, 4) + new StatusMove(MoveId.ACUPRESSURE, PokemonType.NORMAL, -1, 30, -1, 0, 4) .attr(AcupressureStatStageChangeAttr) .target(MoveTarget.USER_OR_NEAR_ALLY), - new AttackMove(Moves.METAL_BURST, PokemonType.STEEL, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 4) + new AttackMove(MoveId.METAL_BURST, PokemonType.STEEL, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 4) .attr(CounterDamageAttr, (move: Move) => (move.category === MoveCategory.PHYSICAL || move.category === MoveCategory.SPECIAL), 1.5) .redirectCounter() .makesContact(false) .target(MoveTarget.ATTACKER), - new AttackMove(Moves.U_TURN, PokemonType.BUG, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 4) + new AttackMove(MoveId.U_TURN, PokemonType.BUG, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 4) .attr(ForceSwitchOutAttr, true), - new AttackMove(Moves.CLOSE_COMBAT, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 4) + new AttackMove(MoveId.CLOSE_COMBAT, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 4) .attr(StatStageChangeAttr, [ Stat.DEF, Stat.SPDEF ], -1, true), - new AttackMove(Moves.PAYBACK, PokemonType.DARK, MoveCategory.PHYSICAL, 50, 100, 10, -1, 0, 4) + new AttackMove(MoveId.PAYBACK, PokemonType.DARK, MoveCategory.PHYSICAL, 50, 100, 10, -1, 0, 4) .attr(MovePowerMultiplierAttr, (user, target, move) => target.getLastXMoves(1).find(m => m.turn === globalScene.currentBattle.turn) || globalScene.currentBattle.turnCommands[target.getBattlerIndex()]?.command === Command.BALL ? 2 : 1), - new AttackMove(Moves.ASSURANCE, PokemonType.DARK, MoveCategory.PHYSICAL, 60, 100, 10, -1, 0, 4) + new AttackMove(MoveId.ASSURANCE, PokemonType.DARK, MoveCategory.PHYSICAL, 60, 100, 10, -1, 0, 4) .attr(MovePowerMultiplierAttr, (user, target, move) => target.turnData.damageTaken > 0 ? 2 : 1), - new StatusMove(Moves.EMBARGO, PokemonType.DARK, 100, 15, -1, 0, 4) + new StatusMove(MoveId.EMBARGO, PokemonType.DARK, 100, 15, -1, 0, 4) .reflectable() .unimplemented(), - new AttackMove(Moves.FLING, PokemonType.DARK, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 4) + new AttackMove(MoveId.FLING, PokemonType.DARK, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 4) .makesContact(false) .unimplemented(), - new StatusMove(Moves.PSYCHO_SHIFT, PokemonType.PSYCHIC, 100, 10, -1, 0, 4) + new StatusMove(MoveId.PSYCHO_SHIFT, PokemonType.PSYCHIC, 100, 10, -1, 0, 4) .attr(PsychoShiftEffectAttr) .condition((user, target, move) => { - let statusToApply = user.hasAbility(Abilities.COMATOSE) ? StatusEffect.SLEEP : undefined; + let statusToApply = user.hasAbility(AbilityId.COMATOSE) ? StatusEffect.SLEEP : undefined; if (user.status?.effect && isNonVolatileStatusEffect(user.status.effect)) { statusToApply = user.status.effect; } return !!statusToApply && target.canSetStatus(statusToApply, false, false, user); } ), - new AttackMove(Moves.TRUMP_CARD, PokemonType.NORMAL, MoveCategory.SPECIAL, -1, -1, 5, -1, 0, 4) + new AttackMove(MoveId.TRUMP_CARD, PokemonType.NORMAL, MoveCategory.SPECIAL, -1, -1, 5, -1, 0, 4) .makesContact() .attr(LessPPMorePowerAttr), - new StatusMove(Moves.HEAL_BLOCK, PokemonType.PSYCHIC, 100, 15, -1, 0, 4) + new StatusMove(MoveId.HEAL_BLOCK, PokemonType.PSYCHIC, 100, 15, -1, 0, 4) .attr(AddBattlerTagAttr, BattlerTagType.HEAL_BLOCK, false, true, 5) .target(MoveTarget.ALL_NEAR_ENEMIES) .reflectable(), - new AttackMove(Moves.WRING_OUT, PokemonType.NORMAL, MoveCategory.SPECIAL, -1, 100, 5, -1, 0, 4) + new AttackMove(MoveId.WRING_OUT, PokemonType.NORMAL, MoveCategory.SPECIAL, -1, 100, 5, -1, 0, 4) .attr(OpponentHighHpPowerAttr, 120) .makesContact(), - new SelfStatusMove(Moves.POWER_TRICK, PokemonType.PSYCHIC, -1, 10, -1, 0, 4) + new SelfStatusMove(MoveId.POWER_TRICK, PokemonType.PSYCHIC, -1, 10, -1, 0, 4) .attr(AddBattlerTagAttr, BattlerTagType.POWER_TRICK, true), - new StatusMove(Moves.GASTRO_ACID, PokemonType.POISON, 100, 10, -1, 0, 4) + new StatusMove(MoveId.GASTRO_ACID, PokemonType.POISON, 100, 10, -1, 0, 4) .attr(SuppressAbilitiesAttr) .reflectable(), - new StatusMove(Moves.LUCKY_CHANT, PokemonType.NORMAL, -1, 30, -1, 0, 4) + new StatusMove(MoveId.LUCKY_CHANT, PokemonType.NORMAL, -1, 30, -1, 0, 4) .attr(AddArenaTagAttr, ArenaTagType.NO_CRIT, 5, true, true) .target(MoveTarget.USER_SIDE), - new StatusMove(Moves.ME_FIRST, PokemonType.NORMAL, -1, 20, -1, 0, 4) + new StatusMove(MoveId.ME_FIRST, PokemonType.NORMAL, -1, 20, -1, 0, 4) .ignoresSubstitute() .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new SelfStatusMove(Moves.COPYCAT, PokemonType.NORMAL, -1, 20, -1, 0, 4) + new SelfStatusMove(MoveId.COPYCAT, PokemonType.NORMAL, -1, 20, -1, 0, 4) .attr(CopyMoveAttr, false, invalidCopycatMoves), - new StatusMove(Moves.POWER_SWAP, PokemonType.PSYCHIC, -1, 10, 100, 0, 4) + new StatusMove(MoveId.POWER_SWAP, PokemonType.PSYCHIC, -1, 10, 100, 0, 4) .attr(SwapStatStagesAttr, [ Stat.ATK, Stat.SPATK ]) .ignoresSubstitute(), - new StatusMove(Moves.GUARD_SWAP, PokemonType.PSYCHIC, -1, 10, 100, 0, 4) + new StatusMove(MoveId.GUARD_SWAP, PokemonType.PSYCHIC, -1, 10, 100, 0, 4) .attr(SwapStatStagesAttr, [ Stat.DEF, Stat.SPDEF ]) .ignoresSubstitute(), - new AttackMove(Moves.PUNISHMENT, PokemonType.DARK, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 4) + new AttackMove(MoveId.PUNISHMENT, PokemonType.DARK, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 4) .makesContact(true) .attr(PunishmentPowerAttr), - new AttackMove(Moves.LAST_RESORT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 140, 100, 5, -1, 0, 4) + new AttackMove(MoveId.LAST_RESORT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 140, 100, 5, -1, 0, 4) .attr(LastResortAttr) .edgeCase(), // May or may not need to ignore remotely called moves depending on how it works - new StatusMove(Moves.WORRY_SEED, PokemonType.GRASS, 100, 10, -1, 0, 4) - .attr(AbilityChangeAttr, Abilities.INSOMNIA) + new StatusMove(MoveId.WORRY_SEED, PokemonType.GRASS, 100, 10, -1, 0, 4) + .attr(AbilityChangeAttr, AbilityId.INSOMNIA) .reflectable(), - new AttackMove(Moves.SUCKER_PUNCH, PokemonType.DARK, MoveCategory.PHYSICAL, 70, 100, 5, -1, 1, 4) + new AttackMove(MoveId.SUCKER_PUNCH, PokemonType.DARK, MoveCategory.PHYSICAL, 70, 100, 5, -1, 1, 4) .condition((user, target, move) => { const turnCommand = globalScene.currentBattle.turnCommands[target.getBattlerIndex()]; if (!turnCommand || !turnCommand.move) { @@ -9494,116 +9494,116 @@ export function initMoves() { } return (turnCommand.command === Command.FIGHT && !target.turnData.acted && allMoves[turnCommand.move.move].category !== MoveCategory.STATUS); }), - new StatusMove(Moves.TOXIC_SPIKES, PokemonType.POISON, -1, 20, -1, 0, 4) + new StatusMove(MoveId.TOXIC_SPIKES, PokemonType.POISON, -1, 20, -1, 0, 4) .attr(AddArenaTrapTagAttr, ArenaTagType.TOXIC_SPIKES) .target(MoveTarget.ENEMY_SIDE) .reflectable(), - new StatusMove(Moves.HEART_SWAP, PokemonType.PSYCHIC, -1, 10, -1, 0, 4) + new StatusMove(MoveId.HEART_SWAP, PokemonType.PSYCHIC, -1, 10, -1, 0, 4) .attr(SwapStatStagesAttr, BATTLE_STATS) .ignoresSubstitute(), - new SelfStatusMove(Moves.AQUA_RING, PokemonType.WATER, -1, 20, -1, 0, 4) + new SelfStatusMove(MoveId.AQUA_RING, PokemonType.WATER, -1, 20, -1, 0, 4) .attr(AddBattlerTagAttr, BattlerTagType.AQUA_RING, true, true), - new SelfStatusMove(Moves.MAGNET_RISE, PokemonType.ELECTRIC, -1, 10, -1, 0, 4) + new SelfStatusMove(MoveId.MAGNET_RISE, PokemonType.ELECTRIC, -1, 10, -1, 0, 4) .attr(AddBattlerTagAttr, BattlerTagType.FLOATING, true, true, 5) .condition((user, target, move) => !globalScene.arena.getTag(ArenaTagType.GRAVITY) && [ BattlerTagType.FLOATING, BattlerTagType.IGNORE_FLYING, BattlerTagType.INGRAIN ].every((tag) => !user.getTag(tag))), - new AttackMove(Moves.FLARE_BLITZ, PokemonType.FIRE, MoveCategory.PHYSICAL, 120, 100, 15, 10, 0, 4) + new AttackMove(MoveId.FLARE_BLITZ, PokemonType.FIRE, MoveCategory.PHYSICAL, 120, 100, 15, 10, 0, 4) .attr(RecoilAttr, false, 0.33) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) .attr(StatusEffectAttr, StatusEffect.BURN) .recklessMove(), - new AttackMove(Moves.FORCE_PALM, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 60, 100, 10, 30, 0, 4) + new AttackMove(MoveId.FORCE_PALM, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 60, 100, 10, 30, 0, 4) .attr(StatusEffectAttr, StatusEffect.PARALYSIS), - new AttackMove(Moves.AURA_SPHERE, PokemonType.FIGHTING, MoveCategory.SPECIAL, 80, -1, 20, -1, 0, 4) + new AttackMove(MoveId.AURA_SPHERE, PokemonType.FIGHTING, MoveCategory.SPECIAL, 80, -1, 20, -1, 0, 4) .pulseMove() .ballBombMove(), - new SelfStatusMove(Moves.ROCK_POLISH, PokemonType.ROCK, -1, 20, -1, 0, 4) + new SelfStatusMove(MoveId.ROCK_POLISH, PokemonType.ROCK, -1, 20, -1, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPD ], 2, true), - new AttackMove(Moves.POISON_JAB, PokemonType.POISON, MoveCategory.PHYSICAL, 80, 100, 20, 30, 0, 4) + new AttackMove(MoveId.POISON_JAB, PokemonType.POISON, MoveCategory.PHYSICAL, 80, 100, 20, 30, 0, 4) .attr(StatusEffectAttr, StatusEffect.POISON), - new AttackMove(Moves.DARK_PULSE, PokemonType.DARK, MoveCategory.SPECIAL, 80, 100, 15, 20, 0, 4) + new AttackMove(MoveId.DARK_PULSE, PokemonType.DARK, MoveCategory.SPECIAL, 80, 100, 15, 20, 0, 4) .attr(FlinchAttr) .pulseMove(), - new AttackMove(Moves.NIGHT_SLASH, PokemonType.DARK, MoveCategory.PHYSICAL, 70, 100, 15, -1, 0, 4) + new AttackMove(MoveId.NIGHT_SLASH, PokemonType.DARK, MoveCategory.PHYSICAL, 70, 100, 15, -1, 0, 4) .attr(HighCritAttr) .slicingMove(), - new AttackMove(Moves.AQUA_TAIL, PokemonType.WATER, MoveCategory.PHYSICAL, 90, 90, 10, -1, 0, 4), - new AttackMove(Moves.SEED_BOMB, PokemonType.GRASS, MoveCategory.PHYSICAL, 80, 100, 15, -1, 0, 4) + new AttackMove(MoveId.AQUA_TAIL, PokemonType.WATER, MoveCategory.PHYSICAL, 90, 90, 10, -1, 0, 4), + new AttackMove(MoveId.SEED_BOMB, PokemonType.GRASS, MoveCategory.PHYSICAL, 80, 100, 15, -1, 0, 4) .makesContact(false) .ballBombMove(), - new AttackMove(Moves.AIR_SLASH, PokemonType.FLYING, MoveCategory.SPECIAL, 75, 95, 15, 30, 0, 4) + new AttackMove(MoveId.AIR_SLASH, PokemonType.FLYING, MoveCategory.SPECIAL, 75, 95, 15, 30, 0, 4) .attr(FlinchAttr) .slicingMove(), - new AttackMove(Moves.X_SCISSOR, PokemonType.BUG, MoveCategory.PHYSICAL, 80, 100, 15, -1, 0, 4) + new AttackMove(MoveId.X_SCISSOR, PokemonType.BUG, MoveCategory.PHYSICAL, 80, 100, 15, -1, 0, 4) .slicingMove(), - new AttackMove(Moves.BUG_BUZZ, PokemonType.BUG, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 4) + new AttackMove(MoveId.BUG_BUZZ, PokemonType.BUG, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -1) .soundBased(), - new AttackMove(Moves.DRAGON_PULSE, PokemonType.DRAGON, MoveCategory.SPECIAL, 85, 100, 10, -1, 0, 4) + new AttackMove(MoveId.DRAGON_PULSE, PokemonType.DRAGON, MoveCategory.SPECIAL, 85, 100, 10, -1, 0, 4) .pulseMove(), - new AttackMove(Moves.DRAGON_RUSH, PokemonType.DRAGON, MoveCategory.PHYSICAL, 100, 75, 10, 20, 0, 4) + new AttackMove(MoveId.DRAGON_RUSH, PokemonType.DRAGON, MoveCategory.PHYSICAL, 100, 75, 10, 20, 0, 4) .attr(AlwaysHitMinimizeAttr) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.MINIMIZED) .attr(FlinchAttr), - new AttackMove(Moves.POWER_GEM, PokemonType.ROCK, MoveCategory.SPECIAL, 80, 100, 20, -1, 0, 4), - new AttackMove(Moves.DRAIN_PUNCH, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 75, 100, 10, -1, 0, 4) + new AttackMove(MoveId.POWER_GEM, PokemonType.ROCK, MoveCategory.SPECIAL, 80, 100, 20, -1, 0, 4), + new AttackMove(MoveId.DRAIN_PUNCH, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 75, 100, 10, -1, 0, 4) .attr(HitHealAttr) .punchingMove() .triageMove(), - new AttackMove(Moves.VACUUM_WAVE, PokemonType.FIGHTING, MoveCategory.SPECIAL, 40, 100, 30, -1, 1, 4), - new AttackMove(Moves.FOCUS_BLAST, PokemonType.FIGHTING, MoveCategory.SPECIAL, 120, 70, 5, 10, 0, 4) + new AttackMove(MoveId.VACUUM_WAVE, PokemonType.FIGHTING, MoveCategory.SPECIAL, 40, 100, 30, -1, 1, 4), + new AttackMove(MoveId.FOCUS_BLAST, PokemonType.FIGHTING, MoveCategory.SPECIAL, 120, 70, 5, 10, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -1) .ballBombMove(), - new AttackMove(Moves.ENERGY_BALL, PokemonType.GRASS, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 4) + new AttackMove(MoveId.ENERGY_BALL, PokemonType.GRASS, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -1) .ballBombMove(), - new AttackMove(Moves.BRAVE_BIRD, PokemonType.FLYING, MoveCategory.PHYSICAL, 120, 100, 15, -1, 0, 4) + new AttackMove(MoveId.BRAVE_BIRD, PokemonType.FLYING, MoveCategory.PHYSICAL, 120, 100, 15, -1, 0, 4) .attr(RecoilAttr, false, 0.33) .recklessMove(), - new AttackMove(Moves.EARTH_POWER, PokemonType.GROUND, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 4) + new AttackMove(MoveId.EARTH_POWER, PokemonType.GROUND, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -1), - new StatusMove(Moves.SWITCHEROO, PokemonType.DARK, 100, 10, -1, 0, 4) + new StatusMove(MoveId.SWITCHEROO, PokemonType.DARK, 100, 10, -1, 0, 4) .unimplemented(), - new AttackMove(Moves.GIGA_IMPACT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 150, 90, 5, -1, 0, 4) + new AttackMove(MoveId.GIGA_IMPACT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 150, 90, 5, -1, 0, 4) .attr(RechargeAttr), - new SelfStatusMove(Moves.NASTY_PLOT, PokemonType.DARK, -1, 20, -1, 0, 4) + new SelfStatusMove(MoveId.NASTY_PLOT, PokemonType.DARK, -1, 20, -1, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPATK ], 2, true), - new AttackMove(Moves.BULLET_PUNCH, PokemonType.STEEL, MoveCategory.PHYSICAL, 40, 100, 30, -1, 1, 4) + new AttackMove(MoveId.BULLET_PUNCH, PokemonType.STEEL, MoveCategory.PHYSICAL, 40, 100, 30, -1, 1, 4) .punchingMove(), - new AttackMove(Moves.AVALANCHE, PokemonType.ICE, MoveCategory.PHYSICAL, 60, 100, 10, -1, -4, 4) + new AttackMove(MoveId.AVALANCHE, PokemonType.ICE, MoveCategory.PHYSICAL, 60, 100, 10, -1, -4, 4) .attr(TurnDamagedDoublePowerAttr), - new AttackMove(Moves.ICE_SHARD, PokemonType.ICE, MoveCategory.PHYSICAL, 40, 100, 30, -1, 1, 4) + new AttackMove(MoveId.ICE_SHARD, PokemonType.ICE, MoveCategory.PHYSICAL, 40, 100, 30, -1, 1, 4) .makesContact(false), - new AttackMove(Moves.SHADOW_CLAW, PokemonType.GHOST, MoveCategory.PHYSICAL, 70, 100, 15, -1, 0, 4) + new AttackMove(MoveId.SHADOW_CLAW, PokemonType.GHOST, MoveCategory.PHYSICAL, 70, 100, 15, -1, 0, 4) .attr(HighCritAttr), - new AttackMove(Moves.THUNDER_FANG, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 65, 95, 15, 10, 0, 4) + new AttackMove(MoveId.THUNDER_FANG, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 65, 95, 15, 10, 0, 4) .attr(FlinchAttr) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .bitingMove(), - new AttackMove(Moves.ICE_FANG, PokemonType.ICE, MoveCategory.PHYSICAL, 65, 95, 15, 10, 0, 4) + new AttackMove(MoveId.ICE_FANG, PokemonType.ICE, MoveCategory.PHYSICAL, 65, 95, 15, 10, 0, 4) .attr(FlinchAttr) .attr(StatusEffectAttr, StatusEffect.FREEZE) .bitingMove(), - new AttackMove(Moves.FIRE_FANG, PokemonType.FIRE, MoveCategory.PHYSICAL, 65, 95, 15, 10, 0, 4) + new AttackMove(MoveId.FIRE_FANG, PokemonType.FIRE, MoveCategory.PHYSICAL, 65, 95, 15, 10, 0, 4) .attr(FlinchAttr) .attr(StatusEffectAttr, StatusEffect.BURN) .bitingMove(), - new AttackMove(Moves.SHADOW_SNEAK, PokemonType.GHOST, MoveCategory.PHYSICAL, 40, 100, 30, -1, 1, 4), - new AttackMove(Moves.MUD_BOMB, PokemonType.GROUND, MoveCategory.SPECIAL, 65, 85, 10, 30, 0, 4) + new AttackMove(MoveId.SHADOW_SNEAK, PokemonType.GHOST, MoveCategory.PHYSICAL, 40, 100, 30, -1, 1, 4), + new AttackMove(MoveId.MUD_BOMB, PokemonType.GROUND, MoveCategory.SPECIAL, 65, 85, 10, 30, 0, 4) .attr(StatStageChangeAttr, [ Stat.ACC ], -1) .ballBombMove(), - new AttackMove(Moves.PSYCHO_CUT, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 4) + new AttackMove(MoveId.PSYCHO_CUT, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 4) .attr(HighCritAttr) .slicingMove() .makesContact(false), - new AttackMove(Moves.ZEN_HEADBUTT, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, 80, 90, 15, 20, 0, 4) + new AttackMove(MoveId.ZEN_HEADBUTT, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, 80, 90, 15, 20, 0, 4) .attr(FlinchAttr), - new AttackMove(Moves.MIRROR_SHOT, PokemonType.STEEL, MoveCategory.SPECIAL, 65, 85, 10, 30, 0, 4) + new AttackMove(MoveId.MIRROR_SHOT, PokemonType.STEEL, MoveCategory.SPECIAL, 65, 85, 10, 30, 0, 4) .attr(StatStageChangeAttr, [ Stat.ACC ], -1), - new AttackMove(Moves.FLASH_CANNON, PokemonType.STEEL, MoveCategory.SPECIAL, 80, 100, 10, 10, 0, 4) + new AttackMove(MoveId.FLASH_CANNON, PokemonType.STEEL, MoveCategory.SPECIAL, 80, 100, 10, 10, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -1), - new AttackMove(Moves.ROCK_CLIMB, PokemonType.NORMAL, MoveCategory.PHYSICAL, 90, 85, 20, 20, 0, 4) + new AttackMove(MoveId.ROCK_CLIMB, PokemonType.NORMAL, MoveCategory.PHYSICAL, 90, 85, 20, 20, 0, 4) .attr(ConfuseAttr), - new StatusMove(Moves.DEFOG, PokemonType.FLYING, -1, 15, -1, 0, 4) + new StatusMove(MoveId.DEFOG, PokemonType.FLYING, -1, 15, -1, 0, 4) .attr(StatStageChangeAttr, [ Stat.EVA ], -1) .attr(ClearWeatherAttr, WeatherType.FOG) .attr(ClearTerrainAttr) @@ -9611,257 +9611,257 @@ export function initMoves() { .attr(RemoveArenaTrapAttr, true) .attr(RemoveArenaTagsAttr, [ ArenaTagType.MIST, ArenaTagType.SAFEGUARD ], false) .reflectable(), - new StatusMove(Moves.TRICK_ROOM, PokemonType.PSYCHIC, -1, 5, -1, -7, 4) + new StatusMove(MoveId.TRICK_ROOM, PokemonType.PSYCHIC, -1, 5, -1, -7, 4) .attr(AddArenaTagAttr, ArenaTagType.TRICK_ROOM, 5) .ignoresProtect() .target(MoveTarget.BOTH_SIDES), - new AttackMove(Moves.DRACO_METEOR, PokemonType.DRAGON, MoveCategory.SPECIAL, 130, 90, 5, -1, 0, 4) + new AttackMove(MoveId.DRACO_METEOR, PokemonType.DRAGON, MoveCategory.SPECIAL, 130, 90, 5, -1, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPATK ], -2, true), - new AttackMove(Moves.DISCHARGE, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 80, 100, 15, 30, 0, 4) + new AttackMove(MoveId.DISCHARGE, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 80, 100, 15, 30, 0, 4) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .target(MoveTarget.ALL_NEAR_OTHERS), - new AttackMove(Moves.LAVA_PLUME, PokemonType.FIRE, MoveCategory.SPECIAL, 80, 100, 15, 30, 0, 4) + new AttackMove(MoveId.LAVA_PLUME, PokemonType.FIRE, MoveCategory.SPECIAL, 80, 100, 15, 30, 0, 4) .attr(StatusEffectAttr, StatusEffect.BURN) .target(MoveTarget.ALL_NEAR_OTHERS), - new AttackMove(Moves.LEAF_STORM, PokemonType.GRASS, MoveCategory.SPECIAL, 130, 90, 5, -1, 0, 4) + new AttackMove(MoveId.LEAF_STORM, PokemonType.GRASS, MoveCategory.SPECIAL, 130, 90, 5, -1, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPATK ], -2, true), - new AttackMove(Moves.POWER_WHIP, PokemonType.GRASS, MoveCategory.PHYSICAL, 120, 85, 10, -1, 0, 4), - new AttackMove(Moves.ROCK_WRECKER, PokemonType.ROCK, MoveCategory.PHYSICAL, 150, 90, 5, -1, 0, 4) + new AttackMove(MoveId.POWER_WHIP, PokemonType.GRASS, MoveCategory.PHYSICAL, 120, 85, 10, -1, 0, 4), + new AttackMove(MoveId.ROCK_WRECKER, PokemonType.ROCK, MoveCategory.PHYSICAL, 150, 90, 5, -1, 0, 4) .attr(RechargeAttr) .makesContact(false) .ballBombMove(), - new AttackMove(Moves.CROSS_POISON, PokemonType.POISON, MoveCategory.PHYSICAL, 70, 100, 20, 10, 0, 4) + new AttackMove(MoveId.CROSS_POISON, PokemonType.POISON, MoveCategory.PHYSICAL, 70, 100, 20, 10, 0, 4) .attr(HighCritAttr) .attr(StatusEffectAttr, StatusEffect.POISON) .slicingMove(), - new AttackMove(Moves.GUNK_SHOT, PokemonType.POISON, MoveCategory.PHYSICAL, 120, 80, 5, 30, 0, 4) + new AttackMove(MoveId.GUNK_SHOT, PokemonType.POISON, MoveCategory.PHYSICAL, 120, 80, 5, 30, 0, 4) .attr(StatusEffectAttr, StatusEffect.POISON) .makesContact(false), - new AttackMove(Moves.IRON_HEAD, PokemonType.STEEL, MoveCategory.PHYSICAL, 80, 100, 15, 30, 0, 4) + new AttackMove(MoveId.IRON_HEAD, PokemonType.STEEL, MoveCategory.PHYSICAL, 80, 100, 15, 30, 0, 4) .attr(FlinchAttr), - new AttackMove(Moves.MAGNET_BOMB, PokemonType.STEEL, MoveCategory.PHYSICAL, 60, -1, 20, -1, 0, 4) + new AttackMove(MoveId.MAGNET_BOMB, PokemonType.STEEL, MoveCategory.PHYSICAL, 60, -1, 20, -1, 0, 4) .makesContact(false) .ballBombMove(), - new AttackMove(Moves.STONE_EDGE, PokemonType.ROCK, MoveCategory.PHYSICAL, 100, 80, 5, -1, 0, 4) + new AttackMove(MoveId.STONE_EDGE, PokemonType.ROCK, MoveCategory.PHYSICAL, 100, 80, 5, -1, 0, 4) .attr(HighCritAttr) .makesContact(false), - new StatusMove(Moves.CAPTIVATE, PokemonType.NORMAL, 100, 20, -1, 0, 4) + new StatusMove(MoveId.CAPTIVATE, PokemonType.NORMAL, 100, 20, -1, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPATK ], -2) .condition((user, target, move) => target.isOppositeGender(user)) .target(MoveTarget.ALL_NEAR_ENEMIES) .reflectable(), - new StatusMove(Moves.STEALTH_ROCK, PokemonType.ROCK, -1, 20, -1, 0, 4) + new StatusMove(MoveId.STEALTH_ROCK, PokemonType.ROCK, -1, 20, -1, 0, 4) .attr(AddArenaTrapTagAttr, ArenaTagType.STEALTH_ROCK) .target(MoveTarget.ENEMY_SIDE) .reflectable(), - new AttackMove(Moves.GRASS_KNOT, PokemonType.GRASS, MoveCategory.SPECIAL, -1, 100, 20, -1, 0, 4) + new AttackMove(MoveId.GRASS_KNOT, PokemonType.GRASS, MoveCategory.SPECIAL, -1, 100, 20, -1, 0, 4) .attr(WeightPowerAttr) .makesContact(), - new AttackMove(Moves.CHATTER, PokemonType.FLYING, MoveCategory.SPECIAL, 65, 100, 20, 100, 0, 4) + new AttackMove(MoveId.CHATTER, PokemonType.FLYING, MoveCategory.SPECIAL, 65, 100, 20, 100, 0, 4) .attr(ConfuseAttr) .soundBased(), - new AttackMove(Moves.JUDGMENT, PokemonType.NORMAL, MoveCategory.SPECIAL, 100, 100, 10, -1, 0, 4) + new AttackMove(MoveId.JUDGMENT, PokemonType.NORMAL, MoveCategory.SPECIAL, 100, 100, 10, -1, 0, 4) .attr(FormChangeItemTypeAttr), - new AttackMove(Moves.BUG_BITE, PokemonType.BUG, MoveCategory.PHYSICAL, 60, 100, 20, -1, 0, 4) + new AttackMove(MoveId.BUG_BITE, PokemonType.BUG, MoveCategory.PHYSICAL, 60, 100, 20, -1, 0, 4) .attr(StealEatBerryAttr), - new AttackMove(Moves.CHARGE_BEAM, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 50, 90, 10, 70, 0, 4) + new AttackMove(MoveId.CHARGE_BEAM, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 50, 90, 10, 70, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPATK ], 1, true), - new AttackMove(Moves.WOOD_HAMMER, PokemonType.GRASS, MoveCategory.PHYSICAL, 120, 100, 15, -1, 0, 4) + new AttackMove(MoveId.WOOD_HAMMER, PokemonType.GRASS, MoveCategory.PHYSICAL, 120, 100, 15, -1, 0, 4) .attr(RecoilAttr, false, 0.33) .recklessMove(), - new AttackMove(Moves.AQUA_JET, PokemonType.WATER, MoveCategory.PHYSICAL, 40, 100, 20, -1, 1, 4), - new AttackMove(Moves.ATTACK_ORDER, PokemonType.BUG, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 4) + new AttackMove(MoveId.AQUA_JET, PokemonType.WATER, MoveCategory.PHYSICAL, 40, 100, 20, -1, 1, 4), + new AttackMove(MoveId.ATTACK_ORDER, PokemonType.BUG, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 4) .attr(HighCritAttr) .makesContact(false), - new SelfStatusMove(Moves.DEFEND_ORDER, PokemonType.BUG, -1, 10, -1, 0, 4) + new SelfStatusMove(MoveId.DEFEND_ORDER, PokemonType.BUG, -1, 10, -1, 0, 4) .attr(StatStageChangeAttr, [ Stat.DEF, Stat.SPDEF ], 1, true), - new SelfStatusMove(Moves.HEAL_ORDER, PokemonType.BUG, -1, 5, -1, 0, 4) + new SelfStatusMove(MoveId.HEAL_ORDER, PokemonType.BUG, -1, 5, -1, 0, 4) .attr(HealAttr, 0.5) .triageMove(), - new AttackMove(Moves.HEAD_SMASH, PokemonType.ROCK, MoveCategory.PHYSICAL, 150, 80, 5, -1, 0, 4) + new AttackMove(MoveId.HEAD_SMASH, PokemonType.ROCK, MoveCategory.PHYSICAL, 150, 80, 5, -1, 0, 4) .attr(RecoilAttr, false, 0.5) .recklessMove(), - new AttackMove(Moves.DOUBLE_HIT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 35, 90, 10, -1, 0, 4) + new AttackMove(MoveId.DOUBLE_HIT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 35, 90, 10, -1, 0, 4) .attr(MultiHitAttr, MultiHitType._2), - new AttackMove(Moves.ROAR_OF_TIME, PokemonType.DRAGON, MoveCategory.SPECIAL, 150, 90, 5, -1, 0, 4) + new AttackMove(MoveId.ROAR_OF_TIME, PokemonType.DRAGON, MoveCategory.SPECIAL, 150, 90, 5, -1, 0, 4) .attr(RechargeAttr), - new AttackMove(Moves.SPACIAL_REND, PokemonType.DRAGON, MoveCategory.SPECIAL, 100, 95, 5, -1, 0, 4) + new AttackMove(MoveId.SPACIAL_REND, PokemonType.DRAGON, MoveCategory.SPECIAL, 100, 95, 5, -1, 0, 4) .attr(HighCritAttr), - new SelfStatusMove(Moves.LUNAR_DANCE, PokemonType.PSYCHIC, -1, 10, -1, 0, 4) + new SelfStatusMove(MoveId.LUNAR_DANCE, PokemonType.PSYCHIC, -1, 10, -1, 0, 4) .attr(SacrificialFullRestoreAttr, true, "moveTriggers:lunarDanceRestore") .danceMove() .triageMove() .condition(failIfLastInPartyCondition), - new AttackMove(Moves.CRUSH_GRIP, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 4) + new AttackMove(MoveId.CRUSH_GRIP, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 4) .attr(OpponentHighHpPowerAttr, 120), - new AttackMove(Moves.MAGMA_STORM, PokemonType.FIRE, MoveCategory.SPECIAL, 100, 75, 5, -1, 0, 4) + new AttackMove(MoveId.MAGMA_STORM, PokemonType.FIRE, MoveCategory.SPECIAL, 100, 75, 5, -1, 0, 4) .attr(TrapAttr, BattlerTagType.MAGMA_STORM), - new StatusMove(Moves.DARK_VOID, PokemonType.DARK, 80, 10, -1, 0, 4) //Accuracy from Generations 4-6 + new StatusMove(MoveId.DARK_VOID, PokemonType.DARK, 80, 10, -1, 0, 4) //Accuracy from Generations 4-6 .attr(StatusEffectAttr, StatusEffect.SLEEP) .target(MoveTarget.ALL_NEAR_ENEMIES) .reflectable(), - new AttackMove(Moves.SEED_FLARE, PokemonType.GRASS, MoveCategory.SPECIAL, 120, 85, 5, 40, 0, 4) + new AttackMove(MoveId.SEED_FLARE, PokemonType.GRASS, MoveCategory.SPECIAL, 120, 85, 5, 40, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -2), - new AttackMove(Moves.OMINOUS_WIND, PokemonType.GHOST, MoveCategory.SPECIAL, 60, 100, 5, 10, 0, 4) + new AttackMove(MoveId.OMINOUS_WIND, PokemonType.GHOST, MoveCategory.SPECIAL, 60, 100, 5, 10, 0, 4) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ], 1, true) .windMove(), - new ChargingAttackMove(Moves.SHADOW_FORCE, PokemonType.GHOST, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 4) + new ChargingAttackMove(MoveId.SHADOW_FORCE, PokemonType.GHOST, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 4) .chargeText(i18next.t("moveTriggers:vanishedInstantly", { pokemonName: "{USER}" })) .chargeAttr(SemiInvulnerableAttr, BattlerTagType.HIDDEN) .ignoresProtect(), - new SelfStatusMove(Moves.HONE_CLAWS, PokemonType.DARK, -1, 15, -1, 0, 5) + new SelfStatusMove(MoveId.HONE_CLAWS, PokemonType.DARK, -1, 15, -1, 0, 5) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.ACC ], 1, true), - new StatusMove(Moves.WIDE_GUARD, PokemonType.ROCK, -1, 10, -1, 3, 5) + new StatusMove(MoveId.WIDE_GUARD, PokemonType.ROCK, -1, 10, -1, 3, 5) .target(MoveTarget.USER_SIDE) .attr(AddArenaTagAttr, ArenaTagType.WIDE_GUARD, 1, true, true) .condition(failIfLastCondition), - new StatusMove(Moves.GUARD_SPLIT, PokemonType.PSYCHIC, -1, 10, -1, 0, 5) + new StatusMove(MoveId.GUARD_SPLIT, PokemonType.PSYCHIC, -1, 10, -1, 0, 5) .attr(AverageStatsAttr, [ Stat.DEF, Stat.SPDEF ], "moveTriggers:sharedGuard"), - new StatusMove(Moves.POWER_SPLIT, PokemonType.PSYCHIC, -1, 10, -1, 0, 5) + new StatusMove(MoveId.POWER_SPLIT, PokemonType.PSYCHIC, -1, 10, -1, 0, 5) .attr(AverageStatsAttr, [ Stat.ATK, Stat.SPATK ], "moveTriggers:sharedPower"), - new StatusMove(Moves.WONDER_ROOM, PokemonType.PSYCHIC, -1, 10, -1, 0, 5) + new StatusMove(MoveId.WONDER_ROOM, PokemonType.PSYCHIC, -1, 10, -1, 0, 5) .ignoresProtect() .target(MoveTarget.BOTH_SIDES) .unimplemented(), - new AttackMove(Moves.PSYSHOCK, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 5) + new AttackMove(MoveId.PSYSHOCK, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 5) .attr(DefDefAttr), - new AttackMove(Moves.VENOSHOCK, PokemonType.POISON, MoveCategory.SPECIAL, 65, 100, 10, -1, 0, 5) + new AttackMove(MoveId.VENOSHOCK, PokemonType.POISON, MoveCategory.SPECIAL, 65, 100, 10, -1, 0, 5) .attr(MovePowerMultiplierAttr, (user, target, move) => target.status && (target.status.effect === StatusEffect.POISON || target.status.effect === StatusEffect.TOXIC) ? 2 : 1), - new SelfStatusMove(Moves.AUTOTOMIZE, PokemonType.STEEL, -1, 15, -1, 0, 5) + new SelfStatusMove(MoveId.AUTOTOMIZE, PokemonType.STEEL, -1, 15, -1, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPD ], 2, true) .attr(AddBattlerTagAttr, BattlerTagType.AUTOTOMIZED, true), - new SelfStatusMove(Moves.RAGE_POWDER, PokemonType.BUG, -1, 20, -1, 2, 5) + new SelfStatusMove(MoveId.RAGE_POWDER, PokemonType.BUG, -1, 20, -1, 2, 5) .powderMove() .attr(AddBattlerTagAttr, BattlerTagType.CENTER_OF_ATTENTION, true), - new StatusMove(Moves.TELEKINESIS, PokemonType.PSYCHIC, -1, 15, -1, 0, 5) + new StatusMove(MoveId.TELEKINESIS, PokemonType.PSYCHIC, -1, 15, -1, 0, 5) .condition(failOnGravityCondition) - .condition((_user, target, _move) => ![ Species.DIGLETT, Species.DUGTRIO, Species.ALOLA_DIGLETT, Species.ALOLA_DUGTRIO, Species.SANDYGAST, Species.PALOSSAND, Species.WIGLETT, Species.WUGTRIO ].includes(target.species.speciesId)) - .condition((_user, target, _move) => !(target.species.speciesId === Species.GENGAR && target.getFormKey() === "mega")) + .condition((_user, target, _move) => ![ SpeciesId.DIGLETT, SpeciesId.DUGTRIO, SpeciesId.ALOLA_DIGLETT, SpeciesId.ALOLA_DUGTRIO, SpeciesId.SANDYGAST, SpeciesId.PALOSSAND, SpeciesId.WIGLETT, SpeciesId.WUGTRIO ].includes(target.species.speciesId)) + .condition((_user, target, _move) => !(target.species.speciesId === SpeciesId.GENGAR && target.getFormKey() === "mega")) .condition((_user, target, _move) => isNullOrUndefined(target.getTag(BattlerTagType.INGRAIN)) && isNullOrUndefined(target.getTag(BattlerTagType.IGNORE_FLYING))) .attr(AddBattlerTagAttr, BattlerTagType.TELEKINESIS, false, true, 3) .attr(AddBattlerTagAttr, BattlerTagType.FLOATING, false, true, 3) .reflectable(), - new StatusMove(Moves.MAGIC_ROOM, PokemonType.PSYCHIC, -1, 10, -1, 0, 5) + new StatusMove(MoveId.MAGIC_ROOM, PokemonType.PSYCHIC, -1, 10, -1, 0, 5) .ignoresProtect() .target(MoveTarget.BOTH_SIDES) .unimplemented(), - new AttackMove(Moves.SMACK_DOWN, PokemonType.ROCK, MoveCategory.PHYSICAL, 50, 100, 15, -1, 0, 5) + new AttackMove(MoveId.SMACK_DOWN, PokemonType.ROCK, MoveCategory.PHYSICAL, 50, 100, 15, -1, 0, 5) .attr(FallDownAttr) .attr(AddBattlerTagAttr, BattlerTagType.INTERRUPTED) .attr(RemoveBattlerTagAttr, [ BattlerTagType.FLYING, BattlerTagType.FLOATING, BattlerTagType.TELEKINESIS ]) .attr(HitsTagAttr, BattlerTagType.FLYING) .makesContact(false), - new AttackMove(Moves.STORM_THROW, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 60, 100, 10, -1, 0, 5) + new AttackMove(MoveId.STORM_THROW, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 60, 100, 10, -1, 0, 5) .attr(CritOnlyAttr), - new AttackMove(Moves.FLAME_BURST, PokemonType.FIRE, MoveCategory.SPECIAL, 70, 100, 15, -1, 0, 5) + new AttackMove(MoveId.FLAME_BURST, PokemonType.FIRE, MoveCategory.SPECIAL, 70, 100, 15, -1, 0, 5) .attr(FlameBurstAttr), - new AttackMove(Moves.SLUDGE_WAVE, PokemonType.POISON, MoveCategory.SPECIAL, 95, 100, 10, 10, 0, 5) + new AttackMove(MoveId.SLUDGE_WAVE, PokemonType.POISON, MoveCategory.SPECIAL, 95, 100, 10, 10, 0, 5) .attr(StatusEffectAttr, StatusEffect.POISON) .target(MoveTarget.ALL_NEAR_OTHERS), - new SelfStatusMove(Moves.QUIVER_DANCE, PokemonType.BUG, -1, 20, -1, 0, 5) + new SelfStatusMove(MoveId.QUIVER_DANCE, PokemonType.BUG, -1, 20, -1, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPATK, Stat.SPDEF, Stat.SPD ], 1, true) .danceMove(), - new AttackMove(Moves.HEAVY_SLAM, PokemonType.STEEL, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 5) + new AttackMove(MoveId.HEAVY_SLAM, PokemonType.STEEL, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 5) .attr(AlwaysHitMinimizeAttr) .attr(CompareWeightPowerAttr) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.MINIMIZED), - new AttackMove(Moves.SYNCHRONOISE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 5) + new AttackMove(MoveId.SYNCHRONOISE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 5) .target(MoveTarget.ALL_NEAR_OTHERS) .condition(unknownTypeCondition) .attr(HitsSameTypeAttr), - new AttackMove(Moves.ELECTRO_BALL, PokemonType.ELECTRIC, MoveCategory.SPECIAL, -1, 100, 10, -1, 0, 5) + new AttackMove(MoveId.ELECTRO_BALL, PokemonType.ELECTRIC, MoveCategory.SPECIAL, -1, 100, 10, -1, 0, 5) .attr(ElectroBallPowerAttr) .ballBombMove(), - new StatusMove(Moves.SOAK, PokemonType.WATER, 100, 20, -1, 0, 5) + new StatusMove(MoveId.SOAK, PokemonType.WATER, 100, 20, -1, 0, 5) .attr(ChangeTypeAttr, PokemonType.WATER) .reflectable(), - new AttackMove(Moves.FLAME_CHARGE, PokemonType.FIRE, MoveCategory.PHYSICAL, 50, 100, 20, 100, 0, 5) + new AttackMove(MoveId.FLAME_CHARGE, PokemonType.FIRE, MoveCategory.PHYSICAL, 50, 100, 20, 100, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPD ], 1, true), - new SelfStatusMove(Moves.COIL, PokemonType.POISON, -1, 20, -1, 0, 5) + new SelfStatusMove(MoveId.COIL, PokemonType.POISON, -1, 20, -1, 0, 5) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF, Stat.ACC ], 1, true), - new AttackMove(Moves.LOW_SWEEP, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 65, 100, 20, 100, 0, 5) + new AttackMove(MoveId.LOW_SWEEP, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 65, 100, 20, 100, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPD ], -1), - new AttackMove(Moves.ACID_SPRAY, PokemonType.POISON, MoveCategory.SPECIAL, 40, 100, 20, 100, 0, 5) + new AttackMove(MoveId.ACID_SPRAY, PokemonType.POISON, MoveCategory.SPECIAL, 40, 100, 20, 100, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -2) .ballBombMove(), - new AttackMove(Moves.FOUL_PLAY, PokemonType.DARK, MoveCategory.PHYSICAL, 95, 100, 15, -1, 0, 5) + new AttackMove(MoveId.FOUL_PLAY, PokemonType.DARK, MoveCategory.PHYSICAL, 95, 100, 15, -1, 0, 5) .attr(TargetAtkUserAtkAttr), - new StatusMove(Moves.SIMPLE_BEAM, PokemonType.NORMAL, 100, 15, -1, 0, 5) - .attr(AbilityChangeAttr, Abilities.SIMPLE) + new StatusMove(MoveId.SIMPLE_BEAM, PokemonType.NORMAL, 100, 15, -1, 0, 5) + .attr(AbilityChangeAttr, AbilityId.SIMPLE) .reflectable(), - new StatusMove(Moves.ENTRAINMENT, PokemonType.NORMAL, 100, 15, -1, 0, 5) + new StatusMove(MoveId.ENTRAINMENT, PokemonType.NORMAL, 100, 15, -1, 0, 5) .attr(AbilityGiveAttr) .reflectable(), - new StatusMove(Moves.AFTER_YOU, PokemonType.NORMAL, -1, 15, -1, 0, 5) + new StatusMove(MoveId.AFTER_YOU, PokemonType.NORMAL, -1, 15, -1, 0, 5) .ignoresProtect() .ignoresSubstitute() .target(MoveTarget.NEAR_OTHER) .condition(failIfSingleBattle) .condition((user, target, move) => !target.turnData.acted) .attr(AfterYouAttr), - new AttackMove(Moves.ROUND, PokemonType.NORMAL, MoveCategory.SPECIAL, 60, 100, 15, -1, 0, 5) + new AttackMove(MoveId.ROUND, PokemonType.NORMAL, MoveCategory.SPECIAL, 60, 100, 15, -1, 0, 5) .attr(CueNextRoundAttr) .attr(RoundPowerAttr) .soundBased(), - new AttackMove(Moves.ECHOED_VOICE, PokemonType.NORMAL, MoveCategory.SPECIAL, 40, 100, 15, -1, 0, 5) + new AttackMove(MoveId.ECHOED_VOICE, PokemonType.NORMAL, MoveCategory.SPECIAL, 40, 100, 15, -1, 0, 5) .attr(ConsecutiveUseMultiBasePowerAttr, 5, false) .soundBased(), - new AttackMove(Moves.CHIP_AWAY, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 5) + new AttackMove(MoveId.CHIP_AWAY, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 5) .attr(IgnoreOpponentStatStagesAttr), - new AttackMove(Moves.CLEAR_SMOG, PokemonType.POISON, MoveCategory.SPECIAL, 50, -1, 15, -1, 0, 5) + new AttackMove(MoveId.CLEAR_SMOG, PokemonType.POISON, MoveCategory.SPECIAL, 50, -1, 15, -1, 0, 5) .attr(ResetStatsAttr, false), - new AttackMove(Moves.STORED_POWER, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 20, 100, 10, -1, 0, 5) + new AttackMove(MoveId.STORED_POWER, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 20, 100, 10, -1, 0, 5) .attr(PositiveStatStagePowerAttr), - new StatusMove(Moves.QUICK_GUARD, PokemonType.FIGHTING, -1, 15, -1, 3, 5) + new StatusMove(MoveId.QUICK_GUARD, PokemonType.FIGHTING, -1, 15, -1, 3, 5) .target(MoveTarget.USER_SIDE) .attr(AddArenaTagAttr, ArenaTagType.QUICK_GUARD, 1, true, true) .condition(failIfLastCondition), - new SelfStatusMove(Moves.ALLY_SWITCH, PokemonType.PSYCHIC, -1, 15, -1, 2, 5) + new SelfStatusMove(MoveId.ALLY_SWITCH, PokemonType.PSYCHIC, -1, 15, -1, 2, 5) .ignoresProtect() .unimplemented(), - new AttackMove(Moves.SCALD, PokemonType.WATER, MoveCategory.SPECIAL, 80, 100, 15, 30, 0, 5) + new AttackMove(MoveId.SCALD, PokemonType.WATER, MoveCategory.SPECIAL, 80, 100, 15, 30, 0, 5) .attr(HealStatusEffectAttr, false, StatusEffect.FREEZE) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) .attr(StatusEffectAttr, StatusEffect.BURN), - new SelfStatusMove(Moves.SHELL_SMASH, PokemonType.NORMAL, -1, 15, -1, 0, 5) + new SelfStatusMove(MoveId.SHELL_SMASH, PokemonType.NORMAL, -1, 15, -1, 0, 5) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK, Stat.SPD ], 2, true) .attr(StatStageChangeAttr, [ Stat.DEF, Stat.SPDEF ], -1, true), - new StatusMove(Moves.HEAL_PULSE, PokemonType.PSYCHIC, -1, 10, -1, 0, 5) + new StatusMove(MoveId.HEAL_PULSE, PokemonType.PSYCHIC, -1, 10, -1, 0, 5) .attr(HealAttr, 0.5, false, false) .pulseMove() .triageMove() .reflectable(), - new AttackMove(Moves.HEX, PokemonType.GHOST, MoveCategory.SPECIAL, 65, 100, 10, -1, 0, 5) + new AttackMove(MoveId.HEX, PokemonType.GHOST, MoveCategory.SPECIAL, 65, 100, 10, -1, 0, 5) .attr( MovePowerMultiplierAttr, - (user, target, move) => target.status || target.hasAbility(Abilities.COMATOSE) ? 2 : 1), - new ChargingAttackMove(Moves.SKY_DROP, PokemonType.FLYING, MoveCategory.PHYSICAL, 60, 100, 10, -1, 0, 5) + (user, target, move) => target.status || target.hasAbility(AbilityId.COMATOSE) ? 2 : 1), + new ChargingAttackMove(MoveId.SKY_DROP, PokemonType.FLYING, MoveCategory.PHYSICAL, 60, 100, 10, -1, 0, 5) .chargeText(i18next.t("moveTriggers:tookTargetIntoSky", { pokemonName: "{USER}", targetName: "{TARGET}" })) .chargeAttr(SemiInvulnerableAttr, BattlerTagType.FLYING) .condition(failOnGravityCondition) .condition((user, target, move) => !target.getTag(BattlerTagType.SUBSTITUTE)) .partial(), // Should immobilize the target, Flying types should take no damage. cf https://bulbapedia.bulbagarden.net/wiki/Sky_Drop_(move) and https://www.smogon.com/dex/sv/moves/sky-drop/ - new SelfStatusMove(Moves.SHIFT_GEAR, PokemonType.STEEL, -1, 10, -1, 0, 5) + new SelfStatusMove(MoveId.SHIFT_GEAR, PokemonType.STEEL, -1, 10, -1, 0, 5) .attr(StatStageChangeAttr, [ Stat.ATK ], 1, true) .attr(StatStageChangeAttr, [ Stat.SPD ], 2, true), - new AttackMove(Moves.CIRCLE_THROW, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 60, 90, 10, -1, -6, 5) + new AttackMove(MoveId.CIRCLE_THROW, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 60, 90, 10, -1, -6, 5) .attr(ForceSwitchOutAttr, false, SwitchType.FORCE_SWITCH) .hidesTarget(), - new AttackMove(Moves.INCINERATE, PokemonType.FIRE, MoveCategory.SPECIAL, 60, 100, 15, -1, 0, 5) + new AttackMove(MoveId.INCINERATE, PokemonType.FIRE, MoveCategory.SPECIAL, 60, 100, 15, -1, 0, 5) .target(MoveTarget.ALL_NEAR_ENEMIES) .attr(RemoveHeldItemAttr, true) .edgeCase(), // Should be able to remove items from pokemon with Sticky Hold if the damage causes them to faint - new StatusMove(Moves.QUASH, PokemonType.DARK, 100, 15, -1, 0, 5) + new StatusMove(MoveId.QUASH, PokemonType.DARK, 100, 15, -1, 0, 5) .condition(failIfSingleBattle) .condition((user, target, move) => !target.turnData.acted) .attr(ForceLastAttr), - new AttackMove(Moves.ACROBATICS, PokemonType.FLYING, MoveCategory.PHYSICAL, 55, 100, 15, -1, 0, 5) + new AttackMove(MoveId.ACROBATICS, PokemonType.FLYING, MoveCategory.PHYSICAL, 55, 100, 15, -1, 0, 5) .attr(MovePowerMultiplierAttr, (user, target, move) => Math.max(1, 2 - 0.2 * user.getHeldItems().filter(i => i.isTransferable).reduce((v, m) => v + m.stackCount, 0))), - new StatusMove(Moves.REFLECT_TYPE, PokemonType.NORMAL, -1, 15, -1, 0, 5) + new StatusMove(MoveId.REFLECT_TYPE, PokemonType.NORMAL, -1, 15, -1, 0, 5) .ignoresSubstitute() .attr(CopyTypeAttr), - new AttackMove(Moves.RETALIATE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 5, -1, 0, 5) + new AttackMove(MoveId.RETALIATE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 5, -1, 0, 5) .attr(MovePowerMultiplierAttr, (user, target, move) => { const turn = globalScene.currentBattle.turn; const lastPlayerFaint = globalScene.currentBattle.playerFaintsHistory[globalScene.currentBattle.playerFaintsHistory.length - 1]; @@ -9871,333 +9871,333 @@ export function initMoves() { (lastEnemyFaint !== undefined && turn - lastEnemyFaint.turn === 1 && !user.isPlayer()) ) ? 2 : 1; }), - new AttackMove(Moves.FINAL_GAMBIT, PokemonType.FIGHTING, MoveCategory.SPECIAL, -1, 100, 5, -1, 0, 5) + new AttackMove(MoveId.FINAL_GAMBIT, PokemonType.FIGHTING, MoveCategory.SPECIAL, -1, 100, 5, -1, 0, 5) .attr(UserHpDamageAttr) .attr(SacrificialAttrOnHit), - new StatusMove(Moves.BESTOW, PokemonType.NORMAL, -1, 15, -1, 0, 5) + new StatusMove(MoveId.BESTOW, PokemonType.NORMAL, -1, 15, -1, 0, 5) .ignoresProtect() .ignoresSubstitute() .unimplemented(), - new AttackMove(Moves.INFERNO, PokemonType.FIRE, MoveCategory.SPECIAL, 100, 50, 5, 100, 0, 5) + new AttackMove(MoveId.INFERNO, PokemonType.FIRE, MoveCategory.SPECIAL, 100, 50, 5, 100, 0, 5) .attr(StatusEffectAttr, StatusEffect.BURN), - new AttackMove(Moves.WATER_PLEDGE, PokemonType.WATER, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 5) + new AttackMove(MoveId.WATER_PLEDGE, PokemonType.WATER, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 5) .attr(AwaitCombinedPledgeAttr) .attr(CombinedPledgeTypeAttr) .attr(CombinedPledgePowerAttr) .attr(CombinedPledgeStabBoostAttr) - .attr(AddPledgeEffectAttr, ArenaTagType.WATER_FIRE_PLEDGE, Moves.FIRE_PLEDGE, true) - .attr(AddPledgeEffectAttr, ArenaTagType.GRASS_WATER_PLEDGE, Moves.GRASS_PLEDGE) + .attr(AddPledgeEffectAttr, ArenaTagType.WATER_FIRE_PLEDGE, MoveId.FIRE_PLEDGE, true) + .attr(AddPledgeEffectAttr, ArenaTagType.GRASS_WATER_PLEDGE, MoveId.GRASS_PLEDGE) .attr(BypassRedirectAttr, true), - new AttackMove(Moves.FIRE_PLEDGE, PokemonType.FIRE, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 5) + new AttackMove(MoveId.FIRE_PLEDGE, PokemonType.FIRE, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 5) .attr(AwaitCombinedPledgeAttr) .attr(CombinedPledgeTypeAttr) .attr(CombinedPledgePowerAttr) .attr(CombinedPledgeStabBoostAttr) - .attr(AddPledgeEffectAttr, ArenaTagType.FIRE_GRASS_PLEDGE, Moves.GRASS_PLEDGE) - .attr(AddPledgeEffectAttr, ArenaTagType.WATER_FIRE_PLEDGE, Moves.WATER_PLEDGE, true) + .attr(AddPledgeEffectAttr, ArenaTagType.FIRE_GRASS_PLEDGE, MoveId.GRASS_PLEDGE) + .attr(AddPledgeEffectAttr, ArenaTagType.WATER_FIRE_PLEDGE, MoveId.WATER_PLEDGE, true) .attr(BypassRedirectAttr, true), - new AttackMove(Moves.GRASS_PLEDGE, PokemonType.GRASS, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 5) + new AttackMove(MoveId.GRASS_PLEDGE, PokemonType.GRASS, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 5) .attr(AwaitCombinedPledgeAttr) .attr(CombinedPledgeTypeAttr) .attr(CombinedPledgePowerAttr) .attr(CombinedPledgeStabBoostAttr) - .attr(AddPledgeEffectAttr, ArenaTagType.GRASS_WATER_PLEDGE, Moves.WATER_PLEDGE) - .attr(AddPledgeEffectAttr, ArenaTagType.FIRE_GRASS_PLEDGE, Moves.FIRE_PLEDGE) + .attr(AddPledgeEffectAttr, ArenaTagType.GRASS_WATER_PLEDGE, MoveId.WATER_PLEDGE) + .attr(AddPledgeEffectAttr, ArenaTagType.FIRE_GRASS_PLEDGE, MoveId.FIRE_PLEDGE) .attr(BypassRedirectAttr, true), - new AttackMove(Moves.VOLT_SWITCH, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 20, -1, 0, 5) + new AttackMove(MoveId.VOLT_SWITCH, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 20, -1, 0, 5) .attr(ForceSwitchOutAttr, true), - new AttackMove(Moves.STRUGGLE_BUG, PokemonType.BUG, MoveCategory.SPECIAL, 50, 100, 20, 100, 0, 5) + new AttackMove(MoveId.STRUGGLE_BUG, PokemonType.BUG, MoveCategory.SPECIAL, 50, 100, 20, 100, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPATK ], -1) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.BULLDOZE, PokemonType.GROUND, MoveCategory.PHYSICAL, 60, 100, 20, 100, 0, 5) + new AttackMove(MoveId.BULLDOZE, PokemonType.GROUND, MoveCategory.PHYSICAL, 60, 100, 20, 100, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) .attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1) .makesContact(false) .target(MoveTarget.ALL_NEAR_OTHERS), - new AttackMove(Moves.FROST_BREATH, PokemonType.ICE, MoveCategory.SPECIAL, 60, 90, 10, -1, 0, 5) + new AttackMove(MoveId.FROST_BREATH, PokemonType.ICE, MoveCategory.SPECIAL, 60, 90, 10, -1, 0, 5) .attr(CritOnlyAttr), - new AttackMove(Moves.DRAGON_TAIL, PokemonType.DRAGON, MoveCategory.PHYSICAL, 60, 90, 10, -1, -6, 5) + new AttackMove(MoveId.DRAGON_TAIL, PokemonType.DRAGON, MoveCategory.PHYSICAL, 60, 90, 10, -1, -6, 5) .attr(ForceSwitchOutAttr, false, SwitchType.FORCE_SWITCH) .hidesTarget(), - new SelfStatusMove(Moves.WORK_UP, PokemonType.NORMAL, -1, 30, -1, 0, 5) + new SelfStatusMove(MoveId.WORK_UP, PokemonType.NORMAL, -1, 30, -1, 0, 5) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], 1, true), - new AttackMove(Moves.ELECTROWEB, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 55, 95, 15, 100, 0, 5) + new AttackMove(MoveId.ELECTROWEB, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 55, 95, 15, 100, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.WILD_CHARGE, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 5) + new AttackMove(MoveId.WILD_CHARGE, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 5) .attr(RecoilAttr) .recklessMove(), - new AttackMove(Moves.DRILL_RUN, PokemonType.GROUND, MoveCategory.PHYSICAL, 80, 95, 10, -1, 0, 5) + new AttackMove(MoveId.DRILL_RUN, PokemonType.GROUND, MoveCategory.PHYSICAL, 80, 95, 10, -1, 0, 5) .attr(HighCritAttr), - new AttackMove(Moves.DUAL_CHOP, PokemonType.DRAGON, MoveCategory.PHYSICAL, 40, 90, 15, -1, 0, 5) + new AttackMove(MoveId.DUAL_CHOP, PokemonType.DRAGON, MoveCategory.PHYSICAL, 40, 90, 15, -1, 0, 5) .attr(MultiHitAttr, MultiHitType._2), - new AttackMove(Moves.HEART_STAMP, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, 60, 100, 25, 30, 0, 5) + new AttackMove(MoveId.HEART_STAMP, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, 60, 100, 25, 30, 0, 5) .attr(FlinchAttr), - new AttackMove(Moves.HORN_LEECH, PokemonType.GRASS, MoveCategory.PHYSICAL, 75, 100, 10, -1, 0, 5) + new AttackMove(MoveId.HORN_LEECH, PokemonType.GRASS, MoveCategory.PHYSICAL, 75, 100, 10, -1, 0, 5) .attr(HitHealAttr) .triageMove(), - new AttackMove(Moves.SACRED_SWORD, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 5) + new AttackMove(MoveId.SACRED_SWORD, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 5) .attr(IgnoreOpponentStatStagesAttr) .slicingMove(), - new AttackMove(Moves.RAZOR_SHELL, PokemonType.WATER, MoveCategory.PHYSICAL, 75, 95, 10, 50, 0, 5) + new AttackMove(MoveId.RAZOR_SHELL, PokemonType.WATER, MoveCategory.PHYSICAL, 75, 95, 10, 50, 0, 5) .attr(StatStageChangeAttr, [ Stat.DEF ], -1) .slicingMove(), - new AttackMove(Moves.HEAT_CRASH, PokemonType.FIRE, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 5) + new AttackMove(MoveId.HEAT_CRASH, PokemonType.FIRE, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 5) .attr(AlwaysHitMinimizeAttr) .attr(CompareWeightPowerAttr) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.MINIMIZED), - new AttackMove(Moves.LEAF_TORNADO, PokemonType.GRASS, MoveCategory.SPECIAL, 65, 90, 10, 50, 0, 5) + new AttackMove(MoveId.LEAF_TORNADO, PokemonType.GRASS, MoveCategory.SPECIAL, 65, 90, 10, 50, 0, 5) .attr(StatStageChangeAttr, [ Stat.ACC ], -1), - new AttackMove(Moves.STEAMROLLER, PokemonType.BUG, MoveCategory.PHYSICAL, 65, 100, 20, 30, 0, 5) + new AttackMove(MoveId.STEAMROLLER, PokemonType.BUG, MoveCategory.PHYSICAL, 65, 100, 20, 30, 0, 5) .attr(AlwaysHitMinimizeAttr) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.MINIMIZED) .attr(FlinchAttr), - new SelfStatusMove(Moves.COTTON_GUARD, PokemonType.GRASS, -1, 10, -1, 0, 5) + new SelfStatusMove(MoveId.COTTON_GUARD, PokemonType.GRASS, -1, 10, -1, 0, 5) .attr(StatStageChangeAttr, [ Stat.DEF ], 3, true), - new AttackMove(Moves.NIGHT_DAZE, PokemonType.DARK, MoveCategory.SPECIAL, 85, 95, 10, 40, 0, 5) + new AttackMove(MoveId.NIGHT_DAZE, PokemonType.DARK, MoveCategory.SPECIAL, 85, 95, 10, 40, 0, 5) .attr(StatStageChangeAttr, [ Stat.ACC ], -1), - new AttackMove(Moves.PSYSTRIKE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 100, 100, 10, -1, 0, 5) + new AttackMove(MoveId.PSYSTRIKE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 100, 100, 10, -1, 0, 5) .attr(DefDefAttr), - new AttackMove(Moves.TAIL_SLAP, PokemonType.NORMAL, MoveCategory.PHYSICAL, 25, 85, 10, -1, 0, 5) + new AttackMove(MoveId.TAIL_SLAP, PokemonType.NORMAL, MoveCategory.PHYSICAL, 25, 85, 10, -1, 0, 5) .attr(MultiHitAttr), - new AttackMove(Moves.HURRICANE, PokemonType.FLYING, MoveCategory.SPECIAL, 110, 70, 10, 30, 0, 5) + new AttackMove(MoveId.HURRICANE, PokemonType.FLYING, MoveCategory.SPECIAL, 110, 70, 10, 30, 0, 5) .attr(ThunderAccuracyAttr) .attr(ConfuseAttr) .attr(HitsTagAttr, BattlerTagType.FLYING) .windMove(), - new AttackMove(Moves.HEAD_CHARGE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 120, 100, 15, -1, 0, 5) + new AttackMove(MoveId.HEAD_CHARGE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 120, 100, 15, -1, 0, 5) .attr(RecoilAttr) .recklessMove(), - new AttackMove(Moves.GEAR_GRIND, PokemonType.STEEL, MoveCategory.PHYSICAL, 50, 85, 15, -1, 0, 5) + new AttackMove(MoveId.GEAR_GRIND, PokemonType.STEEL, MoveCategory.PHYSICAL, 50, 85, 15, -1, 0, 5) .attr(MultiHitAttr, MultiHitType._2), - new AttackMove(Moves.SEARING_SHOT, PokemonType.FIRE, MoveCategory.SPECIAL, 100, 100, 5, 30, 0, 5) + new AttackMove(MoveId.SEARING_SHOT, PokemonType.FIRE, MoveCategory.SPECIAL, 100, 100, 5, 30, 0, 5) .attr(StatusEffectAttr, StatusEffect.BURN) .ballBombMove() .target(MoveTarget.ALL_NEAR_OTHERS), - new AttackMove(Moves.TECHNO_BLAST, PokemonType.NORMAL, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 5) + new AttackMove(MoveId.TECHNO_BLAST, PokemonType.NORMAL, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 5) .attr(TechnoBlastTypeAttr), - new AttackMove(Moves.RELIC_SONG, PokemonType.NORMAL, MoveCategory.SPECIAL, 75, 100, 10, 10, 0, 5) + new AttackMove(MoveId.RELIC_SONG, PokemonType.NORMAL, MoveCategory.SPECIAL, 75, 100, 10, 10, 0, 5) .attr(StatusEffectAttr, StatusEffect.SLEEP) .soundBased() .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.SECRET_SWORD, PokemonType.FIGHTING, MoveCategory.SPECIAL, 85, 100, 10, -1, 0, 5) + new AttackMove(MoveId.SECRET_SWORD, PokemonType.FIGHTING, MoveCategory.SPECIAL, 85, 100, 10, -1, 0, 5) .attr(DefDefAttr) .slicingMove(), - new AttackMove(Moves.GLACIATE, PokemonType.ICE, MoveCategory.SPECIAL, 65, 95, 10, 100, 0, 5) + new AttackMove(MoveId.GLACIATE, PokemonType.ICE, MoveCategory.SPECIAL, 65, 95, 10, 100, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.BOLT_STRIKE, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 130, 85, 5, 20, 0, 5) + new AttackMove(MoveId.BOLT_STRIKE, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 130, 85, 5, 20, 0, 5) .attr(StatusEffectAttr, StatusEffect.PARALYSIS), - new AttackMove(Moves.BLUE_FLARE, PokemonType.FIRE, MoveCategory.SPECIAL, 130, 85, 5, 20, 0, 5) + new AttackMove(MoveId.BLUE_FLARE, PokemonType.FIRE, MoveCategory.SPECIAL, 130, 85, 5, 20, 0, 5) .attr(StatusEffectAttr, StatusEffect.BURN), - new AttackMove(Moves.FIERY_DANCE, PokemonType.FIRE, MoveCategory.SPECIAL, 80, 100, 10, 50, 0, 5) + new AttackMove(MoveId.FIERY_DANCE, PokemonType.FIRE, MoveCategory.SPECIAL, 80, 100, 10, 50, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPATK ], 1, true) .danceMove(), - new ChargingAttackMove(Moves.FREEZE_SHOCK, PokemonType.ICE, MoveCategory.PHYSICAL, 140, 90, 5, 30, 0, 5) + new ChargingAttackMove(MoveId.FREEZE_SHOCK, PokemonType.ICE, MoveCategory.PHYSICAL, 140, 90, 5, 30, 0, 5) .chargeText(i18next.t("moveTriggers:becameCloakedInFreezingLight", { pokemonName: "{USER}" })) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .makesContact(false), - new ChargingAttackMove(Moves.ICE_BURN, PokemonType.ICE, MoveCategory.SPECIAL, 140, 90, 5, 30, 0, 5) + new ChargingAttackMove(MoveId.ICE_BURN, PokemonType.ICE, MoveCategory.SPECIAL, 140, 90, 5, 30, 0, 5) .chargeText(i18next.t("moveTriggers:becameCloakedInFreezingAir", { pokemonName: "{USER}" })) .attr(StatusEffectAttr, StatusEffect.BURN), - new AttackMove(Moves.SNARL, PokemonType.DARK, MoveCategory.SPECIAL, 55, 95, 15, 100, 0, 5) + new AttackMove(MoveId.SNARL, PokemonType.DARK, MoveCategory.SPECIAL, 55, 95, 15, 100, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPATK ], -1) .soundBased() .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.ICICLE_CRASH, PokemonType.ICE, MoveCategory.PHYSICAL, 85, 90, 10, 30, 0, 5) + new AttackMove(MoveId.ICICLE_CRASH, PokemonType.ICE, MoveCategory.PHYSICAL, 85, 90, 10, 30, 0, 5) .attr(FlinchAttr) .makesContact(false), - new AttackMove(Moves.V_CREATE, PokemonType.FIRE, MoveCategory.PHYSICAL, 180, 95, 5, -1, 0, 5) + new AttackMove(MoveId.V_CREATE, PokemonType.FIRE, MoveCategory.PHYSICAL, 180, 95, 5, -1, 0, 5) .attr(StatStageChangeAttr, [ Stat.DEF, Stat.SPDEF, Stat.SPD ], -1, true), - new AttackMove(Moves.FUSION_FLARE, PokemonType.FIRE, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 5) + new AttackMove(MoveId.FUSION_FLARE, PokemonType.FIRE, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 5) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) - .attr(LastMoveDoublePowerAttr, Moves.FUSION_BOLT), - new AttackMove(Moves.FUSION_BOLT, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 5) - .attr(LastMoveDoublePowerAttr, Moves.FUSION_FLARE) + .attr(LastMoveDoublePowerAttr, MoveId.FUSION_BOLT), + new AttackMove(MoveId.FUSION_BOLT, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 5) + .attr(LastMoveDoublePowerAttr, MoveId.FUSION_FLARE) .makesContact(false), - new AttackMove(Moves.FLYING_PRESS, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 95, 10, -1, 0, 6) + new AttackMove(MoveId.FLYING_PRESS, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 95, 10, -1, 0, 6) .attr(AlwaysHitMinimizeAttr) .attr(FlyingTypeMultiplierAttr) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.MINIMIZED) .condition(failOnGravityCondition), - new StatusMove(Moves.MAT_BLOCK, PokemonType.FIGHTING, -1, 10, -1, 0, 6) + new StatusMove(MoveId.MAT_BLOCK, PokemonType.FIGHTING, -1, 10, -1, 0, 6) .target(MoveTarget.USER_SIDE) .attr(AddArenaTagAttr, ArenaTagType.MAT_BLOCK, 1, true, true) .condition(new FirstMoveCondition()) .condition(failIfLastCondition), - new AttackMove(Moves.BELCH, PokemonType.POISON, MoveCategory.SPECIAL, 120, 90, 10, -1, 0, 6) + new AttackMove(MoveId.BELCH, PokemonType.POISON, MoveCategory.SPECIAL, 120, 90, 10, -1, 0, 6) .condition((user, target, move) => user.battleData.hasEatenBerry), - new StatusMove(Moves.ROTOTILLER, PokemonType.GROUND, -1, 10, -1, 0, 6) + new StatusMove(MoveId.ROTOTILLER, PokemonType.GROUND, -1, 10, -1, 0, 6) .target(MoveTarget.ALL) .condition((user, target, move) => { // If any fielded pokémon is grass-type and grounded. return [ ...globalScene.getEnemyParty(), ...globalScene.getPlayerParty() ].some((poke) => poke.isOfType(PokemonType.GRASS) && poke.isGrounded()); }) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], 1, false, { condition: (user, target, move) => target.isOfType(PokemonType.GRASS) && target.isGrounded() }), - new StatusMove(Moves.STICKY_WEB, PokemonType.BUG, -1, 20, -1, 0, 6) + new StatusMove(MoveId.STICKY_WEB, PokemonType.BUG, -1, 20, -1, 0, 6) .attr(AddArenaTrapTagAttr, ArenaTagType.STICKY_WEB) .target(MoveTarget.ENEMY_SIDE) .reflectable(), - new AttackMove(Moves.FELL_STINGER, PokemonType.BUG, MoveCategory.PHYSICAL, 50, 100, 25, -1, 0, 6) + new AttackMove(MoveId.FELL_STINGER, PokemonType.BUG, MoveCategory.PHYSICAL, 50, 100, 25, -1, 0, 6) .attr(PostVictoryStatStageChangeAttr, [ Stat.ATK ], 3, true ), - new ChargingAttackMove(Moves.PHANTOM_FORCE, PokemonType.GHOST, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) + new ChargingAttackMove(MoveId.PHANTOM_FORCE, PokemonType.GHOST, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) .chargeText(i18next.t("moveTriggers:vanishedInstantly", { pokemonName: "{USER}" })) .chargeAttr(SemiInvulnerableAttr, BattlerTagType.HIDDEN) .ignoresProtect(), - new StatusMove(Moves.TRICK_OR_TREAT, PokemonType.GHOST, 100, 20, -1, 0, 6) + new StatusMove(MoveId.TRICK_OR_TREAT, PokemonType.GHOST, 100, 20, -1, 0, 6) .attr(AddTypeAttr, PokemonType.GHOST) .reflectable(), - new StatusMove(Moves.NOBLE_ROAR, PokemonType.NORMAL, 100, 30, -1, 0, 6) + new StatusMove(MoveId.NOBLE_ROAR, PokemonType.NORMAL, 100, 30, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1) .soundBased() .reflectable(), - new StatusMove(Moves.ION_DELUGE, PokemonType.ELECTRIC, -1, 25, -1, 1, 6) + new StatusMove(MoveId.ION_DELUGE, PokemonType.ELECTRIC, -1, 25, -1, 1, 6) .attr(AddArenaTagAttr, ArenaTagType.ION_DELUGE) .target(MoveTarget.BOTH_SIDES), - new AttackMove(Moves.PARABOLIC_CHARGE, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 65, 100, 20, -1, 0, 6) + new AttackMove(MoveId.PARABOLIC_CHARGE, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 65, 100, 20, -1, 0, 6) .attr(HitHealAttr) .target(MoveTarget.ALL_NEAR_OTHERS) .triageMove(), - new StatusMove(Moves.FORESTS_CURSE, PokemonType.GRASS, 100, 20, -1, 0, 6) + new StatusMove(MoveId.FORESTS_CURSE, PokemonType.GRASS, 100, 20, -1, 0, 6) .attr(AddTypeAttr, PokemonType.GRASS) .reflectable(), - new AttackMove(Moves.PETAL_BLIZZARD, PokemonType.GRASS, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 6) + new AttackMove(MoveId.PETAL_BLIZZARD, PokemonType.GRASS, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 6) .windMove() .makesContact(false) .target(MoveTarget.ALL_NEAR_OTHERS), - new AttackMove(Moves.FREEZE_DRY, PokemonType.ICE, MoveCategory.SPECIAL, 70, 100, 20, 10, 0, 6) + new AttackMove(MoveId.FREEZE_DRY, PokemonType.ICE, MoveCategory.SPECIAL, 70, 100, 20, 10, 0, 6) .attr(StatusEffectAttr, StatusEffect.FREEZE) .attr(FreezeDryAttr), - new AttackMove(Moves.DISARMING_VOICE, PokemonType.FAIRY, MoveCategory.SPECIAL, 40, -1, 15, -1, 0, 6) + new AttackMove(MoveId.DISARMING_VOICE, PokemonType.FAIRY, MoveCategory.SPECIAL, 40, -1, 15, -1, 0, 6) .soundBased() .target(MoveTarget.ALL_NEAR_ENEMIES), - new StatusMove(Moves.PARTING_SHOT, PokemonType.DARK, 100, 20, -1, 0, 6) + new StatusMove(MoveId.PARTING_SHOT, PokemonType.DARK, 100, 20, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1, false, { trigger: MoveEffectTrigger.PRE_APPLY }) .attr(ForceSwitchOutAttr, true) .soundBased() .reflectable(), - new StatusMove(Moves.TOPSY_TURVY, PokemonType.DARK, -1, 20, -1, 0, 6) + new StatusMove(MoveId.TOPSY_TURVY, PokemonType.DARK, -1, 20, -1, 0, 6) .attr(InvertStatsAttr) .reflectable(), - new AttackMove(Moves.DRAINING_KISS, PokemonType.FAIRY, MoveCategory.SPECIAL, 50, 100, 10, -1, 0, 6) + new AttackMove(MoveId.DRAINING_KISS, PokemonType.FAIRY, MoveCategory.SPECIAL, 50, 100, 10, -1, 0, 6) .attr(HitHealAttr, 0.75) .makesContact() .triageMove(), - new StatusMove(Moves.CRAFTY_SHIELD, PokemonType.FAIRY, -1, 10, -1, 3, 6) + new StatusMove(MoveId.CRAFTY_SHIELD, PokemonType.FAIRY, -1, 10, -1, 3, 6) .target(MoveTarget.USER_SIDE) .attr(AddArenaTagAttr, ArenaTagType.CRAFTY_SHIELD, 1, true, true) .condition(failIfLastCondition), - new StatusMove(Moves.FLOWER_SHIELD, PokemonType.FAIRY, -1, 10, -1, 0, 6) + new StatusMove(MoveId.FLOWER_SHIELD, PokemonType.FAIRY, -1, 10, -1, 0, 6) .target(MoveTarget.ALL) .attr(StatStageChangeAttr, [ Stat.DEF ], 1, false, { condition: (user, target, move) => target.getTypes().includes(PokemonType.GRASS) && !target.getTag(SemiInvulnerableTag) }), - new StatusMove(Moves.GRASSY_TERRAIN, PokemonType.GRASS, -1, 10, -1, 0, 6) + new StatusMove(MoveId.GRASSY_TERRAIN, PokemonType.GRASS, -1, 10, -1, 0, 6) .attr(TerrainChangeAttr, TerrainType.GRASSY) .target(MoveTarget.BOTH_SIDES), - new StatusMove(Moves.MISTY_TERRAIN, PokemonType.FAIRY, -1, 10, -1, 0, 6) + new StatusMove(MoveId.MISTY_TERRAIN, PokemonType.FAIRY, -1, 10, -1, 0, 6) .attr(TerrainChangeAttr, TerrainType.MISTY) .target(MoveTarget.BOTH_SIDES), - new StatusMove(Moves.ELECTRIFY, PokemonType.ELECTRIC, -1, 20, -1, 0, 6) + new StatusMove(MoveId.ELECTRIFY, PokemonType.ELECTRIC, -1, 20, -1, 0, 6) .attr(AddBattlerTagAttr, BattlerTagType.ELECTRIFIED, false, true), - new AttackMove(Moves.PLAY_ROUGH, PokemonType.FAIRY, MoveCategory.PHYSICAL, 90, 90, 10, 10, 0, 6) + new AttackMove(MoveId.PLAY_ROUGH, PokemonType.FAIRY, MoveCategory.PHYSICAL, 90, 90, 10, 10, 0, 6) .attr(StatStageChangeAttr, [ Stat.ATK ], -1), - new AttackMove(Moves.FAIRY_WIND, PokemonType.FAIRY, MoveCategory.SPECIAL, 40, 100, 30, -1, 0, 6) + new AttackMove(MoveId.FAIRY_WIND, PokemonType.FAIRY, MoveCategory.SPECIAL, 40, 100, 30, -1, 0, 6) .windMove(), - new AttackMove(Moves.MOONBLAST, PokemonType.FAIRY, MoveCategory.SPECIAL, 95, 100, 15, 30, 0, 6) + new AttackMove(MoveId.MOONBLAST, PokemonType.FAIRY, MoveCategory.SPECIAL, 95, 100, 15, 30, 0, 6) .attr(StatStageChangeAttr, [ Stat.SPATK ], -1), - new AttackMove(Moves.BOOMBURST, PokemonType.NORMAL, MoveCategory.SPECIAL, 140, 100, 10, -1, 0, 6) + new AttackMove(MoveId.BOOMBURST, PokemonType.NORMAL, MoveCategory.SPECIAL, 140, 100, 10, -1, 0, 6) .soundBased() .target(MoveTarget.ALL_NEAR_OTHERS), - new StatusMove(Moves.FAIRY_LOCK, PokemonType.FAIRY, -1, 10, -1, 0, 6) + new StatusMove(MoveId.FAIRY_LOCK, PokemonType.FAIRY, -1, 10, -1, 0, 6) .ignoresSubstitute() .ignoresProtect() .target(MoveTarget.BOTH_SIDES) .attr(AddArenaTagAttr, ArenaTagType.FAIRY_LOCK, 2, true), - new SelfStatusMove(Moves.KINGS_SHIELD, PokemonType.STEEL, -1, 10, -1, 4, 6) + new SelfStatusMove(MoveId.KINGS_SHIELD, PokemonType.STEEL, -1, 10, -1, 4, 6) .attr(ProtectAttr, BattlerTagType.KINGS_SHIELD) .condition(failIfLastCondition), - new StatusMove(Moves.PLAY_NICE, PokemonType.NORMAL, -1, 20, -1, 0, 6) + new StatusMove(MoveId.PLAY_NICE, PokemonType.NORMAL, -1, 20, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.ATK ], -1) .ignoresSubstitute() .reflectable(), - new StatusMove(Moves.CONFIDE, PokemonType.NORMAL, -1, 20, -1, 0, 6) + new StatusMove(MoveId.CONFIDE, PokemonType.NORMAL, -1, 20, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.SPATK ], -1) .soundBased() .reflectable(), - new AttackMove(Moves.DIAMOND_STORM, PokemonType.ROCK, MoveCategory.PHYSICAL, 100, 95, 5, 50, 0, 6) + new AttackMove(MoveId.DIAMOND_STORM, PokemonType.ROCK, MoveCategory.PHYSICAL, 100, 95, 5, 50, 0, 6) .attr(StatStageChangeAttr, [ Stat.DEF ], 2, true, { firstTargetOnly: true }) .makesContact(false) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.STEAM_ERUPTION, PokemonType.WATER, MoveCategory.SPECIAL, 110, 95, 5, 30, 0, 6) + new AttackMove(MoveId.STEAM_ERUPTION, PokemonType.WATER, MoveCategory.SPECIAL, 110, 95, 5, 30, 0, 6) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) .attr(HealStatusEffectAttr, false, StatusEffect.FREEZE) .attr(StatusEffectAttr, StatusEffect.BURN), - new AttackMove(Moves.HYPERSPACE_HOLE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, -1, 5, -1, 0, 6) + new AttackMove(MoveId.HYPERSPACE_HOLE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, -1, 5, -1, 0, 6) .ignoresProtect() .ignoresSubstitute(), - new AttackMove(Moves.WATER_SHURIKEN, PokemonType.WATER, MoveCategory.SPECIAL, 15, 100, 20, -1, 1, 6) + new AttackMove(MoveId.WATER_SHURIKEN, PokemonType.WATER, MoveCategory.SPECIAL, 15, 100, 20, -1, 1, 6) .attr(MultiHitAttr) .attr(WaterShurikenPowerAttr) .attr(WaterShurikenMultiHitTypeAttr), - new AttackMove(Moves.MYSTICAL_FIRE, PokemonType.FIRE, MoveCategory.SPECIAL, 75, 100, 10, 100, 0, 6) + new AttackMove(MoveId.MYSTICAL_FIRE, PokemonType.FIRE, MoveCategory.SPECIAL, 75, 100, 10, 100, 0, 6) .attr(StatStageChangeAttr, [ Stat.SPATK ], -1), - new SelfStatusMove(Moves.SPIKY_SHIELD, PokemonType.GRASS, -1, 10, -1, 4, 6) + new SelfStatusMove(MoveId.SPIKY_SHIELD, PokemonType.GRASS, -1, 10, -1, 4, 6) .attr(ProtectAttr, BattlerTagType.SPIKY_SHIELD) .condition(failIfLastCondition), - new StatusMove(Moves.AROMATIC_MIST, PokemonType.FAIRY, -1, 20, -1, 0, 6) + new StatusMove(MoveId.AROMATIC_MIST, PokemonType.FAIRY, -1, 20, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.SPDEF ], 1) .ignoresSubstitute() .condition(failIfSingleBattle) .target(MoveTarget.NEAR_ALLY), - new StatusMove(Moves.EERIE_IMPULSE, PokemonType.ELECTRIC, 100, 15, -1, 0, 6) + new StatusMove(MoveId.EERIE_IMPULSE, PokemonType.ELECTRIC, 100, 15, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.SPATK ], -2) .reflectable(), - new StatusMove(Moves.VENOM_DRENCH, PokemonType.POISON, 100, 20, -1, 0, 6) + new StatusMove(MoveId.VENOM_DRENCH, PokemonType.POISON, 100, 20, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK, Stat.SPD ], -1, false, { condition: (user, target, move) => target.status?.effect === StatusEffect.POISON || target.status?.effect === StatusEffect.TOXIC }) .target(MoveTarget.ALL_NEAR_ENEMIES) .reflectable(), - new StatusMove(Moves.POWDER, PokemonType.BUG, 100, 20, -1, 1, 6) + new StatusMove(MoveId.POWDER, PokemonType.BUG, 100, 20, -1, 1, 6) .attr(AddBattlerTagAttr, BattlerTagType.POWDER, false, true) .ignoresSubstitute() .powderMove() .reflectable(), - new ChargingSelfStatusMove(Moves.GEOMANCY, PokemonType.FAIRY, -1, 10, -1, 0, 6) + new ChargingSelfStatusMove(MoveId.GEOMANCY, PokemonType.FAIRY, -1, 10, -1, 0, 6) .chargeText(i18next.t("moveTriggers:isChargingPower", { pokemonName: "{USER}" })) .attr(StatStageChangeAttr, [ Stat.SPATK, Stat.SPDEF, Stat.SPD ], 2, true), - new StatusMove(Moves.MAGNETIC_FLUX, PokemonType.ELECTRIC, -1, 20, -1, 0, 6) - .attr(StatStageChangeAttr, [ Stat.DEF, Stat.SPDEF ], 1, false, { condition: (user, target, move) => !![ Abilities.PLUS, Abilities.MINUS ].find(a => target.hasAbility(a, false)) }) + new StatusMove(MoveId.MAGNETIC_FLUX, PokemonType.ELECTRIC, -1, 20, -1, 0, 6) + .attr(StatStageChangeAttr, [ Stat.DEF, Stat.SPDEF ], 1, false, { condition: (user, target, move) => !![ AbilityId.PLUS, AbilityId.MINUS ].find(a => target.hasAbility(a, false)) }) .ignoresSubstitute() .target(MoveTarget.USER_AND_ALLIES) - .condition((user, target, move) => !![ user, user.getAlly() ].filter(p => p?.isActive()).find(p => !![ Abilities.PLUS, Abilities.MINUS ].find(a => p?.hasAbility(a, false)))), - new StatusMove(Moves.HAPPY_HOUR, PokemonType.NORMAL, -1, 30, -1, 0, 6) // No animation + .condition((user, target, move) => !![ user, user.getAlly() ].filter(p => p?.isActive()).find(p => !![ AbilityId.PLUS, AbilityId.MINUS ].find(a => p?.hasAbility(a, false)))), + new StatusMove(MoveId.HAPPY_HOUR, PokemonType.NORMAL, -1, 30, -1, 0, 6) // No animation .attr(AddArenaTagAttr, ArenaTagType.HAPPY_HOUR, null, true) .target(MoveTarget.USER_SIDE), - new StatusMove(Moves.ELECTRIC_TERRAIN, PokemonType.ELECTRIC, -1, 10, -1, 0, 6) + new StatusMove(MoveId.ELECTRIC_TERRAIN, PokemonType.ELECTRIC, -1, 10, -1, 0, 6) .attr(TerrainChangeAttr, TerrainType.ELECTRIC) .target(MoveTarget.BOTH_SIDES), - new AttackMove(Moves.DAZZLING_GLEAM, PokemonType.FAIRY, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 6) + new AttackMove(MoveId.DAZZLING_GLEAM, PokemonType.FAIRY, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 6) .target(MoveTarget.ALL_NEAR_ENEMIES), - new SelfStatusMove(Moves.CELEBRATE, PokemonType.NORMAL, -1, 40, -1, 0, 6) + new SelfStatusMove(MoveId.CELEBRATE, PokemonType.NORMAL, -1, 40, -1, 0, 6) .attr(CelebrateAttr), - new StatusMove(Moves.HOLD_HANDS, PokemonType.NORMAL, -1, 40, -1, 0, 6) + new StatusMove(MoveId.HOLD_HANDS, PokemonType.NORMAL, -1, 40, -1, 0, 6) .ignoresSubstitute() .target(MoveTarget.NEAR_ALLY), - new StatusMove(Moves.BABY_DOLL_EYES, PokemonType.FAIRY, 100, 30, -1, 1, 6) + new StatusMove(MoveId.BABY_DOLL_EYES, PokemonType.FAIRY, 100, 30, -1, 1, 6) .attr(StatStageChangeAttr, [ Stat.ATK ], -1) .reflectable(), - new AttackMove(Moves.NUZZLE, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 20, 100, 20, 100, 0, 6) + new AttackMove(MoveId.NUZZLE, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 20, 100, 20, 100, 0, 6) .attr(StatusEffectAttr, StatusEffect.PARALYSIS), - new AttackMove(Moves.HOLD_BACK, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 40, -1, 0, 6) + new AttackMove(MoveId.HOLD_BACK, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 40, -1, 0, 6) .attr(SurviveDamageAttr), - new AttackMove(Moves.INFESTATION, PokemonType.BUG, MoveCategory.SPECIAL, 20, 100, 20, -1, 0, 6) + new AttackMove(MoveId.INFESTATION, PokemonType.BUG, MoveCategory.SPECIAL, 20, 100, 20, -1, 0, 6) .makesContact() .attr(TrapAttr, BattlerTagType.INFESTATION), - new AttackMove(Moves.POWER_UP_PUNCH, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 40, 100, 20, 100, 0, 6) + new AttackMove(MoveId.POWER_UP_PUNCH, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 40, 100, 20, 100, 0, 6) .attr(StatStageChangeAttr, [ Stat.ATK ], 1, true) .punchingMove(), - new AttackMove(Moves.OBLIVION_WING, PokemonType.FLYING, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 6) + new AttackMove(MoveId.OBLIVION_WING, PokemonType.FLYING, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 6) .attr(HitHealAttr, 0.75) .triageMove(), - new AttackMove(Moves.THOUSAND_ARROWS, PokemonType.GROUND, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) + new AttackMove(MoveId.THOUSAND_ARROWS, PokemonType.GROUND, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) .attr(NeutralDamageAgainstFlyingTypeMultiplierAttr) .attr(FallDownAttr) .attr(HitsTagAttr, BattlerTagType.FLYING) @@ -10206,176 +10206,176 @@ export function initMoves() { .attr(RemoveBattlerTagAttr, [ BattlerTagType.FLYING, BattlerTagType.FLOATING, BattlerTagType.TELEKINESIS ]) .makesContact(false) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.THOUSAND_WAVES, PokemonType.GROUND, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) + new AttackMove(MoveId.THOUSAND_WAVES, PokemonType.GROUND, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, false, 1, 1, true) .makesContact(false) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.LANDS_WRATH, PokemonType.GROUND, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) + new AttackMove(MoveId.LANDS_WRATH, PokemonType.GROUND, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) .makesContact(false) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.LIGHT_OF_RUIN, PokemonType.FAIRY, MoveCategory.SPECIAL, 140, 90, 5, -1, 0, 6) + new AttackMove(MoveId.LIGHT_OF_RUIN, PokemonType.FAIRY, MoveCategory.SPECIAL, 140, 90, 5, -1, 0, 6) .attr(RecoilAttr, false, 0.5) .recklessMove(), - new AttackMove(Moves.ORIGIN_PULSE, PokemonType.WATER, MoveCategory.SPECIAL, 110, 85, 10, -1, 0, 6) + new AttackMove(MoveId.ORIGIN_PULSE, PokemonType.WATER, MoveCategory.SPECIAL, 110, 85, 10, -1, 0, 6) .pulseMove() .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.PRECIPICE_BLADES, PokemonType.GROUND, MoveCategory.PHYSICAL, 120, 85, 10, -1, 0, 6) + new AttackMove(MoveId.PRECIPICE_BLADES, PokemonType.GROUND, MoveCategory.PHYSICAL, 120, 85, 10, -1, 0, 6) .makesContact(false) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.DRAGON_ASCENT, PokemonType.FLYING, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 6) + new AttackMove(MoveId.DRAGON_ASCENT, PokemonType.FLYING, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.DEF, Stat.SPDEF ], -1, true), - new AttackMove(Moves.HYPERSPACE_FURY, PokemonType.DARK, MoveCategory.PHYSICAL, 100, -1, 5, -1, 0, 6) + new AttackMove(MoveId.HYPERSPACE_FURY, PokemonType.DARK, MoveCategory.PHYSICAL, 100, -1, 5, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.DEF ], -1, true) .ignoresSubstitute() .makesContact(false) .ignoresProtect(), /* Unused */ - new AttackMove(Moves.BREAKNECK_BLITZ__PHYSICAL, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.BREAKNECK_BLITZ__PHYSICAL, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.BREAKNECK_BLITZ__SPECIAL, PokemonType.NORMAL, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.BREAKNECK_BLITZ__SPECIAL, PokemonType.NORMAL, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.ALL_OUT_PUMMELING__PHYSICAL, PokemonType.FIGHTING, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.ALL_OUT_PUMMELING__PHYSICAL, PokemonType.FIGHTING, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.ALL_OUT_PUMMELING__SPECIAL, PokemonType.FIGHTING, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.ALL_OUT_PUMMELING__SPECIAL, PokemonType.FIGHTING, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.SUPERSONIC_SKYSTRIKE__PHYSICAL, PokemonType.FLYING, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.SUPERSONIC_SKYSTRIKE__PHYSICAL, PokemonType.FLYING, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.SUPERSONIC_SKYSTRIKE__SPECIAL, PokemonType.FLYING, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.SUPERSONIC_SKYSTRIKE__SPECIAL, PokemonType.FLYING, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.ACID_DOWNPOUR__PHYSICAL, PokemonType.POISON, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.ACID_DOWNPOUR__PHYSICAL, PokemonType.POISON, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.ACID_DOWNPOUR__SPECIAL, PokemonType.POISON, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.ACID_DOWNPOUR__SPECIAL, PokemonType.POISON, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.TECTONIC_RAGE__PHYSICAL, PokemonType.GROUND, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.TECTONIC_RAGE__PHYSICAL, PokemonType.GROUND, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.TECTONIC_RAGE__SPECIAL, PokemonType.GROUND, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.TECTONIC_RAGE__SPECIAL, PokemonType.GROUND, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.CONTINENTAL_CRUSH__PHYSICAL, PokemonType.ROCK, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.CONTINENTAL_CRUSH__PHYSICAL, PokemonType.ROCK, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.CONTINENTAL_CRUSH__SPECIAL, PokemonType.ROCK, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.CONTINENTAL_CRUSH__SPECIAL, PokemonType.ROCK, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.SAVAGE_SPIN_OUT__PHYSICAL, PokemonType.BUG, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.SAVAGE_SPIN_OUT__PHYSICAL, PokemonType.BUG, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.SAVAGE_SPIN_OUT__SPECIAL, PokemonType.BUG, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.SAVAGE_SPIN_OUT__SPECIAL, PokemonType.BUG, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.NEVER_ENDING_NIGHTMARE__PHYSICAL, PokemonType.GHOST, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.NEVER_ENDING_NIGHTMARE__PHYSICAL, PokemonType.GHOST, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.NEVER_ENDING_NIGHTMARE__SPECIAL, PokemonType.GHOST, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.NEVER_ENDING_NIGHTMARE__SPECIAL, PokemonType.GHOST, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.CORKSCREW_CRASH__PHYSICAL, PokemonType.STEEL, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.CORKSCREW_CRASH__PHYSICAL, PokemonType.STEEL, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.CORKSCREW_CRASH__SPECIAL, PokemonType.STEEL, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.CORKSCREW_CRASH__SPECIAL, PokemonType.STEEL, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.INFERNO_OVERDRIVE__PHYSICAL, PokemonType.FIRE, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.INFERNO_OVERDRIVE__PHYSICAL, PokemonType.FIRE, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.INFERNO_OVERDRIVE__SPECIAL, PokemonType.FIRE, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.INFERNO_OVERDRIVE__SPECIAL, PokemonType.FIRE, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.HYDRO_VORTEX__PHYSICAL, PokemonType.WATER, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.HYDRO_VORTEX__PHYSICAL, PokemonType.WATER, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.HYDRO_VORTEX__SPECIAL, PokemonType.WATER, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.HYDRO_VORTEX__SPECIAL, PokemonType.WATER, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.BLOOM_DOOM__PHYSICAL, PokemonType.GRASS, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.BLOOM_DOOM__PHYSICAL, PokemonType.GRASS, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.BLOOM_DOOM__SPECIAL, PokemonType.GRASS, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.BLOOM_DOOM__SPECIAL, PokemonType.GRASS, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.GIGAVOLT_HAVOC__PHYSICAL, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.GIGAVOLT_HAVOC__PHYSICAL, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.GIGAVOLT_HAVOC__SPECIAL, PokemonType.ELECTRIC, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.GIGAVOLT_HAVOC__SPECIAL, PokemonType.ELECTRIC, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.SHATTERED_PSYCHE__PHYSICAL, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.SHATTERED_PSYCHE__PHYSICAL, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.SHATTERED_PSYCHE__SPECIAL, PokemonType.PSYCHIC, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.SHATTERED_PSYCHE__SPECIAL, PokemonType.PSYCHIC, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.SUBZERO_SLAMMER__PHYSICAL, PokemonType.ICE, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.SUBZERO_SLAMMER__PHYSICAL, PokemonType.ICE, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.SUBZERO_SLAMMER__SPECIAL, PokemonType.ICE, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.SUBZERO_SLAMMER__SPECIAL, PokemonType.ICE, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.DEVASTATING_DRAKE__PHYSICAL, PokemonType.DRAGON, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.DEVASTATING_DRAKE__PHYSICAL, PokemonType.DRAGON, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.DEVASTATING_DRAKE__SPECIAL, PokemonType.DRAGON, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.DEVASTATING_DRAKE__SPECIAL, PokemonType.DRAGON, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.BLACK_HOLE_ECLIPSE__PHYSICAL, PokemonType.DARK, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.BLACK_HOLE_ECLIPSE__PHYSICAL, PokemonType.DARK, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.BLACK_HOLE_ECLIPSE__SPECIAL, PokemonType.DARK, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.BLACK_HOLE_ECLIPSE__SPECIAL, PokemonType.DARK, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.TWINKLE_TACKLE__PHYSICAL, PokemonType.FAIRY, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.TWINKLE_TACKLE__PHYSICAL, PokemonType.FAIRY, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.TWINKLE_TACKLE__SPECIAL, PokemonType.FAIRY, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.TWINKLE_TACKLE__SPECIAL, PokemonType.FAIRY, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.CATASTROPIKA, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 210, -1, 1, -1, 0, 7) + new AttackMove(MoveId.CATASTROPIKA, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 210, -1, 1, -1, 0, 7) .unimplemented(), /* End Unused */ - new SelfStatusMove(Moves.SHORE_UP, PokemonType.GROUND, -1, 5, -1, 0, 7) + new SelfStatusMove(MoveId.SHORE_UP, PokemonType.GROUND, -1, 5, -1, 0, 7) .attr(SandHealAttr) .triageMove(), - new AttackMove(Moves.FIRST_IMPRESSION, PokemonType.BUG, MoveCategory.PHYSICAL, 90, 100, 10, -1, 2, 7) + new AttackMove(MoveId.FIRST_IMPRESSION, PokemonType.BUG, MoveCategory.PHYSICAL, 90, 100, 10, -1, 2, 7) .condition(new FirstMoveCondition()), - new SelfStatusMove(Moves.BANEFUL_BUNKER, PokemonType.POISON, -1, 10, -1, 4, 7) + new SelfStatusMove(MoveId.BANEFUL_BUNKER, PokemonType.POISON, -1, 10, -1, 4, 7) .attr(ProtectAttr, BattlerTagType.BANEFUL_BUNKER) .condition(failIfLastCondition), - new AttackMove(Moves.SPIRIT_SHACKLE, PokemonType.GHOST, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 7) + new AttackMove(MoveId.SPIRIT_SHACKLE, PokemonType.GHOST, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 7) .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, false, 1, 1, true) .makesContact(false), - new AttackMove(Moves.DARKEST_LARIAT, PokemonType.DARK, MoveCategory.PHYSICAL, 85, 100, 10, -1, 0, 7) + new AttackMove(MoveId.DARKEST_LARIAT, PokemonType.DARK, MoveCategory.PHYSICAL, 85, 100, 10, -1, 0, 7) .attr(IgnoreOpponentStatStagesAttr), - new AttackMove(Moves.SPARKLING_ARIA, PokemonType.WATER, MoveCategory.SPECIAL, 90, 100, 10, 100, 0, 7) + new AttackMove(MoveId.SPARKLING_ARIA, PokemonType.WATER, MoveCategory.SPECIAL, 90, 100, 10, 100, 0, 7) .attr(HealStatusEffectAttr, false, StatusEffect.BURN) .soundBased() .target(MoveTarget.ALL_NEAR_OTHERS), - new AttackMove(Moves.ICE_HAMMER, PokemonType.ICE, MoveCategory.PHYSICAL, 100, 90, 10, -1, 0, 7) + new AttackMove(MoveId.ICE_HAMMER, PokemonType.ICE, MoveCategory.PHYSICAL, 100, 90, 10, -1, 0, 7) .attr(StatStageChangeAttr, [ Stat.SPD ], -1, true) .punchingMove(), - new StatusMove(Moves.FLORAL_HEALING, PokemonType.FAIRY, -1, 10, -1, 0, 7) + new StatusMove(MoveId.FLORAL_HEALING, PokemonType.FAIRY, -1, 10, -1, 0, 7) .attr(BoostHealAttr, 0.5, 2 / 3, true, false, (user, target, move) => globalScene.arena.terrain?.terrainType === TerrainType.GRASSY) .triageMove() .reflectable(), - new AttackMove(Moves.HIGH_HORSEPOWER, PokemonType.GROUND, MoveCategory.PHYSICAL, 95, 95, 10, -1, 0, 7), - new StatusMove(Moves.STRENGTH_SAP, PokemonType.GRASS, 100, 10, -1, 0, 7) + new AttackMove(MoveId.HIGH_HORSEPOWER, PokemonType.GROUND, MoveCategory.PHYSICAL, 95, 95, 10, -1, 0, 7), + new StatusMove(MoveId.STRENGTH_SAP, PokemonType.GRASS, 100, 10, -1, 0, 7) .attr(HitHealAttr, null, Stat.ATK) .attr(StatStageChangeAttr, [ Stat.ATK ], -1) .condition((user, target, move) => target.getStatStage(Stat.ATK) > -6) .triageMove() .reflectable(), - new ChargingAttackMove(Moves.SOLAR_BLADE, PokemonType.GRASS, MoveCategory.PHYSICAL, 125, 100, 10, -1, 0, 7) + new ChargingAttackMove(MoveId.SOLAR_BLADE, PokemonType.GRASS, MoveCategory.PHYSICAL, 125, 100, 10, -1, 0, 7) .chargeText(i18next.t("moveTriggers:isGlowing", { pokemonName: "{USER}" })) .chargeAttr(WeatherInstantChargeAttr, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]) .attr(AntiSunlightPowerDecreaseAttr) .slicingMove(), - new AttackMove(Moves.LEAFAGE, PokemonType.GRASS, MoveCategory.PHYSICAL, 40, 100, 40, -1, 0, 7) + new AttackMove(MoveId.LEAFAGE, PokemonType.GRASS, MoveCategory.PHYSICAL, 40, 100, 40, -1, 0, 7) .makesContact(false), - new StatusMove(Moves.SPOTLIGHT, PokemonType.NORMAL, -1, 15, -1, 3, 7) + new StatusMove(MoveId.SPOTLIGHT, PokemonType.NORMAL, -1, 15, -1, 3, 7) .attr(AddBattlerTagAttr, BattlerTagType.CENTER_OF_ATTENTION, false) .condition(failIfSingleBattle) .reflectable(), - new StatusMove(Moves.TOXIC_THREAD, PokemonType.POISON, 100, 20, -1, 0, 7) + new StatusMove(MoveId.TOXIC_THREAD, PokemonType.POISON, 100, 20, -1, 0, 7) .attr(StatusEffectAttr, StatusEffect.POISON) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) .reflectable(), - new SelfStatusMove(Moves.LASER_FOCUS, PokemonType.NORMAL, -1, 30, -1, 0, 7) + new SelfStatusMove(MoveId.LASER_FOCUS, PokemonType.NORMAL, -1, 30, -1, 0, 7) .attr(AddBattlerTagAttr, BattlerTagType.ALWAYS_CRIT, true, false), - new StatusMove(Moves.GEAR_UP, PokemonType.STEEL, -1, 20, -1, 0, 7) - .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], 1, false, { condition: (user, target, move) => !![ Abilities.PLUS, Abilities.MINUS ].find(a => target.hasAbility(a, false)) }) + new StatusMove(MoveId.GEAR_UP, PokemonType.STEEL, -1, 20, -1, 0, 7) + .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], 1, false, { condition: (user, target, move) => !![ AbilityId.PLUS, AbilityId.MINUS ].find(a => target.hasAbility(a, false)) }) .ignoresSubstitute() .target(MoveTarget.USER_AND_ALLIES) - .condition((user, target, move) => !![ user, user.getAlly() ].filter(p => p?.isActive()).find(p => !![ Abilities.PLUS, Abilities.MINUS ].find(a => p?.hasAbility(a, false)))), - new AttackMove(Moves.THROAT_CHOP, PokemonType.DARK, MoveCategory.PHYSICAL, 80, 100, 15, 100, 0, 7) + .condition((user, target, move) => !![ user, user.getAlly() ].filter(p => p?.isActive()).find(p => !![ AbilityId.PLUS, AbilityId.MINUS ].find(a => p?.hasAbility(a, false)))), + new AttackMove(MoveId.THROAT_CHOP, PokemonType.DARK, MoveCategory.PHYSICAL, 80, 100, 15, 100, 0, 7) .attr(AddBattlerTagAttr, BattlerTagType.THROAT_CHOPPED), - new AttackMove(Moves.POLLEN_PUFF, PokemonType.BUG, MoveCategory.SPECIAL, 90, 100, 15, -1, 0, 7) + new AttackMove(MoveId.POLLEN_PUFF, PokemonType.BUG, MoveCategory.SPECIAL, 90, 100, 15, -1, 0, 7) .attr(StatusCategoryOnAllyAttr) .attr(HealOnAllyAttr, 0.5, true, false) .ballBombMove(), - new AttackMove(Moves.ANCHOR_SHOT, PokemonType.STEEL, MoveCategory.PHYSICAL, 80, 100, 20, 100, 0, 7) + new AttackMove(MoveId.ANCHOR_SHOT, PokemonType.STEEL, MoveCategory.PHYSICAL, 80, 100, 20, 100, 0, 7) .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, false, 1, 1, true), - new StatusMove(Moves.PSYCHIC_TERRAIN, PokemonType.PSYCHIC, -1, 10, -1, 0, 7) + new StatusMove(MoveId.PSYCHIC_TERRAIN, PokemonType.PSYCHIC, -1, 10, -1, 0, 7) .attr(TerrainChangeAttr, TerrainType.PSYCHIC) .target(MoveTarget.BOTH_SIDES), - new AttackMove(Moves.LUNGE, PokemonType.BUG, MoveCategory.PHYSICAL, 80, 100, 15, 100, 0, 7) + new AttackMove(MoveId.LUNGE, PokemonType.BUG, MoveCategory.PHYSICAL, 80, 100, 15, 100, 0, 7) .attr(StatStageChangeAttr, [ Stat.ATK ], -1), - new AttackMove(Moves.FIRE_LASH, PokemonType.FIRE, MoveCategory.PHYSICAL, 80, 100, 15, 100, 0, 7) + new AttackMove(MoveId.FIRE_LASH, PokemonType.FIRE, MoveCategory.PHYSICAL, 80, 100, 15, 100, 0, 7) .attr(StatStageChangeAttr, [ Stat.DEF ], -1), - new AttackMove(Moves.POWER_TRIP, PokemonType.DARK, MoveCategory.PHYSICAL, 20, 100, 10, -1, 0, 7) + new AttackMove(MoveId.POWER_TRIP, PokemonType.DARK, MoveCategory.PHYSICAL, 20, 100, 10, -1, 0, 7) .attr(PositiveStatStagePowerAttr), - new AttackMove(Moves.BURN_UP, PokemonType.FIRE, MoveCategory.SPECIAL, 130, 100, 5, -1, 0, 7) + new AttackMove(MoveId.BURN_UP, PokemonType.FIRE, MoveCategory.SPECIAL, 130, 100, 5, -1, 0, 7) .condition((user) => { const userTypes = user.getTypes(true); return userTypes.includes(PokemonType.FIRE); @@ -10385,11 +10385,11 @@ export function initMoves() { .attr(RemoveTypeAttr, PokemonType.FIRE, (user) => { globalScene.queueMessage(i18next.t("moveTriggers:burnedItselfOut", { pokemonName: getPokemonNameWithAffix(user) })); }), - new StatusMove(Moves.SPEED_SWAP, PokemonType.PSYCHIC, -1, 10, -1, 0, 7) + new StatusMove(MoveId.SPEED_SWAP, PokemonType.PSYCHIC, -1, 10, -1, 0, 7) .attr(SwapStatAttr, Stat.SPD) .ignoresSubstitute(), - new AttackMove(Moves.SMART_STRIKE, PokemonType.STEEL, MoveCategory.PHYSICAL, 70, -1, 10, -1, 0, 7), - new StatusMove(Moves.PURIFY, PokemonType.POISON, -1, 20, -1, 0, 7) + new AttackMove(MoveId.SMART_STRIKE, PokemonType.STEEL, MoveCategory.PHYSICAL, 70, -1, 10, -1, 0, 7), + new StatusMove(MoveId.PURIFY, PokemonType.POISON, -1, 20, -1, 0, 7) .condition((user, target, move) => { if (!target.status) { return false; @@ -10400,182 +10400,182 @@ export function initMoves() { .attr(HealStatusEffectAttr, false, getNonVolatileStatusEffects()) .triageMove() .reflectable(), - new AttackMove(Moves.REVELATION_DANCE, PokemonType.NORMAL, MoveCategory.SPECIAL, 90, 100, 15, -1, 0, 7) + new AttackMove(MoveId.REVELATION_DANCE, PokemonType.NORMAL, MoveCategory.SPECIAL, 90, 100, 15, -1, 0, 7) .danceMove() .attr(MatchUserTypeAttr), - new AttackMove(Moves.CORE_ENFORCER, PokemonType.DRAGON, MoveCategory.SPECIAL, 100, 100, 10, -1, 0, 7) + new AttackMove(MoveId.CORE_ENFORCER, PokemonType.DRAGON, MoveCategory.SPECIAL, 100, 100, 10, -1, 0, 7) .target(MoveTarget.ALL_NEAR_ENEMIES) .attr(SuppressAbilitiesIfActedAttr), - new AttackMove(Moves.TROP_KICK, PokemonType.GRASS, MoveCategory.PHYSICAL, 70, 100, 15, 100, 0, 7) + new AttackMove(MoveId.TROP_KICK, PokemonType.GRASS, MoveCategory.PHYSICAL, 70, 100, 15, 100, 0, 7) .attr(StatStageChangeAttr, [ Stat.ATK ], -1), - new StatusMove(Moves.INSTRUCT, PokemonType.PSYCHIC, -1, 15, -1, 0, 7) + new StatusMove(MoveId.INSTRUCT, PokemonType.PSYCHIC, -1, 15, -1, 0, 7) .ignoresSubstitute() .attr(RepeatMoveAttr) // incorrect interactions with Gigaton Hammer, Blood Moon & Torment // Also has incorrect interactions with Dancer due to the latter // erroneously adding copied moves to move history. .edgeCase(), - new AttackMove(Moves.BEAK_BLAST, PokemonType.FLYING, MoveCategory.PHYSICAL, 100, 100, 15, -1, -3, 7) + new AttackMove(MoveId.BEAK_BLAST, PokemonType.FLYING, MoveCategory.PHYSICAL, 100, 100, 15, -1, -3, 7) .attr(BeakBlastHeaderAttr) .ballBombMove() .makesContact(false), - new AttackMove(Moves.CLANGING_SCALES, PokemonType.DRAGON, MoveCategory.SPECIAL, 110, 100, 5, -1, 0, 7) + new AttackMove(MoveId.CLANGING_SCALES, PokemonType.DRAGON, MoveCategory.SPECIAL, 110, 100, 5, -1, 0, 7) .attr(StatStageChangeAttr, [ Stat.DEF ], -1, true, { firstTargetOnly: true }) .soundBased() .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.DRAGON_HAMMER, PokemonType.DRAGON, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 7), - new AttackMove(Moves.BRUTAL_SWING, PokemonType.DARK, MoveCategory.PHYSICAL, 60, 100, 20, -1, 0, 7) + new AttackMove(MoveId.DRAGON_HAMMER, PokemonType.DRAGON, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 7), + new AttackMove(MoveId.BRUTAL_SWING, PokemonType.DARK, MoveCategory.PHYSICAL, 60, 100, 20, -1, 0, 7) .target(MoveTarget.ALL_NEAR_OTHERS), - new StatusMove(Moves.AURORA_VEIL, PokemonType.ICE, -1, 20, -1, 0, 7) + new StatusMove(MoveId.AURORA_VEIL, PokemonType.ICE, -1, 20, -1, 0, 7) .condition((user, target, move) => (globalScene.arena.weather?.weatherType === WeatherType.HAIL || globalScene.arena.weather?.weatherType === WeatherType.SNOW) && !globalScene.arena.weather?.isEffectSuppressed()) .attr(AddArenaTagAttr, ArenaTagType.AURORA_VEIL, 5, true) .target(MoveTarget.USER_SIDE), /* Unused */ - new AttackMove(Moves.SINISTER_ARROW_RAID, PokemonType.GHOST, MoveCategory.PHYSICAL, 180, -1, 1, -1, 0, 7) + new AttackMove(MoveId.SINISTER_ARROW_RAID, PokemonType.GHOST, MoveCategory.PHYSICAL, 180, -1, 1, -1, 0, 7) .unimplemented() .makesContact(false) .edgeCase(), // I assume it's because the user needs spirit shackle and decidueye - new AttackMove(Moves.MALICIOUS_MOONSAULT, PokemonType.DARK, MoveCategory.PHYSICAL, 180, -1, 1, -1, 0, 7) + new AttackMove(MoveId.MALICIOUS_MOONSAULT, PokemonType.DARK, MoveCategory.PHYSICAL, 180, -1, 1, -1, 0, 7) .unimplemented() .attr(AlwaysHitMinimizeAttr) .attr(HitsTagAttr, BattlerTagType.MINIMIZED, true) .edgeCase(), // I assume it's because it needs darkest lariat and incineroar - new AttackMove(Moves.OCEANIC_OPERETTA, PokemonType.WATER, MoveCategory.SPECIAL, 195, -1, 1, -1, 0, 7) + new AttackMove(MoveId.OCEANIC_OPERETTA, PokemonType.WATER, MoveCategory.SPECIAL, 195, -1, 1, -1, 0, 7) .unimplemented() .edgeCase(), // I assume it's because it needs sparkling aria and primarina - new AttackMove(Moves.GUARDIAN_OF_ALOLA, PokemonType.FAIRY, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.GUARDIAN_OF_ALOLA, PokemonType.FAIRY, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.SOUL_STEALING_7_STAR_STRIKE, PokemonType.GHOST, MoveCategory.PHYSICAL, 195, -1, 1, -1, 0, 7) + new AttackMove(MoveId.SOUL_STEALING_7_STAR_STRIKE, PokemonType.GHOST, MoveCategory.PHYSICAL, 195, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.STOKED_SPARKSURFER, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 175, -1, 1, 100, 0, 7) + new AttackMove(MoveId.STOKED_SPARKSURFER, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 175, -1, 1, 100, 0, 7) .unimplemented() .edgeCase(), // I assume it's because it needs thunderbolt and Alola Raichu - new AttackMove(Moves.PULVERIZING_PANCAKE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 210, -1, 1, -1, 0, 7) + new AttackMove(MoveId.PULVERIZING_PANCAKE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 210, -1, 1, -1, 0, 7) .unimplemented() .edgeCase(), // I assume it's because it needs giga impact and snorlax - new SelfStatusMove(Moves.EXTREME_EVOBOOST, PokemonType.NORMAL, -1, 1, -1, 0, 7) + new SelfStatusMove(MoveId.EXTREME_EVOBOOST, PokemonType.NORMAL, -1, 1, -1, 0, 7) .unimplemented() .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ], 2, true), - new AttackMove(Moves.GENESIS_SUPERNOVA, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 185, -1, 1, 100, 0, 7) + new AttackMove(MoveId.GENESIS_SUPERNOVA, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 185, -1, 1, 100, 0, 7) .unimplemented() .attr(TerrainChangeAttr, TerrainType.PSYCHIC), /* End Unused */ - new AttackMove(Moves.SHELL_TRAP, PokemonType.FIRE, MoveCategory.SPECIAL, 150, 100, 5, -1, -3, 7) + new AttackMove(MoveId.SHELL_TRAP, PokemonType.FIRE, MoveCategory.SPECIAL, 150, 100, 5, -1, -3, 7) .attr(AddBattlerTagHeaderAttr, BattlerTagType.SHELL_TRAP) .target(MoveTarget.ALL_NEAR_ENEMIES) // Fails if the user was not hit by a physical attack during the turn .condition((user, target, move) => user.getTag(ShellTrapTag)?.activated === true), - new AttackMove(Moves.FLEUR_CANNON, PokemonType.FAIRY, MoveCategory.SPECIAL, 130, 90, 5, -1, 0, 7) + new AttackMove(MoveId.FLEUR_CANNON, PokemonType.FAIRY, MoveCategory.SPECIAL, 130, 90, 5, -1, 0, 7) .attr(StatStageChangeAttr, [ Stat.SPATK ], -2, true), - new AttackMove(Moves.PSYCHIC_FANGS, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, 85, 100, 10, -1, 0, 7) + new AttackMove(MoveId.PSYCHIC_FANGS, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, 85, 100, 10, -1, 0, 7) .bitingMove() .attr(RemoveScreensAttr), - new AttackMove(Moves.STOMPING_TANTRUM, PokemonType.GROUND, MoveCategory.PHYSICAL, 75, 100, 10, -1, 0, 7) + new AttackMove(MoveId.STOMPING_TANTRUM, PokemonType.GROUND, MoveCategory.PHYSICAL, 75, 100, 10, -1, 0, 7) .attr(MovePowerMultiplierAttr, (user, target, move) => user.getLastXMoves(2)[1]?.result === MoveResult.MISS || user.getLastXMoves(2)[1]?.result === MoveResult.FAIL ? 2 : 1), - new AttackMove(Moves.SHADOW_BONE, PokemonType.GHOST, MoveCategory.PHYSICAL, 85, 100, 10, 20, 0, 7) + new AttackMove(MoveId.SHADOW_BONE, PokemonType.GHOST, MoveCategory.PHYSICAL, 85, 100, 10, 20, 0, 7) .attr(StatStageChangeAttr, [ Stat.DEF ], -1) .makesContact(false), - new AttackMove(Moves.ACCELEROCK, PokemonType.ROCK, MoveCategory.PHYSICAL, 40, 100, 20, -1, 1, 7), - new AttackMove(Moves.LIQUIDATION, PokemonType.WATER, MoveCategory.PHYSICAL, 85, 100, 10, 20, 0, 7) + new AttackMove(MoveId.ACCELEROCK, PokemonType.ROCK, MoveCategory.PHYSICAL, 40, 100, 20, -1, 1, 7), + new AttackMove(MoveId.LIQUIDATION, PokemonType.WATER, MoveCategory.PHYSICAL, 85, 100, 10, 20, 0, 7) .attr(StatStageChangeAttr, [ Stat.DEF ], -1), - new AttackMove(Moves.PRISMATIC_LASER, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 160, 100, 10, -1, 0, 7) + new AttackMove(MoveId.PRISMATIC_LASER, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 160, 100, 10, -1, 0, 7) .attr(RechargeAttr), - new AttackMove(Moves.SPECTRAL_THIEF, PokemonType.GHOST, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 7) + new AttackMove(MoveId.SPECTRAL_THIEF, PokemonType.GHOST, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 7) .attr(SpectralThiefAttr) .ignoresSubstitute(), - new AttackMove(Moves.SUNSTEEL_STRIKE, PokemonType.STEEL, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 7) + new AttackMove(MoveId.SUNSTEEL_STRIKE, PokemonType.STEEL, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 7) .ignoresAbilities(), - new AttackMove(Moves.MOONGEIST_BEAM, PokemonType.GHOST, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 7) + new AttackMove(MoveId.MOONGEIST_BEAM, PokemonType.GHOST, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 7) .ignoresAbilities(), - new StatusMove(Moves.TEARFUL_LOOK, PokemonType.NORMAL, -1, 20, -1, 0, 7) + new StatusMove(MoveId.TEARFUL_LOOK, PokemonType.NORMAL, -1, 20, -1, 0, 7) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1) .reflectable(), - new AttackMove(Moves.ZING_ZAP, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 80, 100, 10, 30, 0, 7) + new AttackMove(MoveId.ZING_ZAP, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 80, 100, 10, 30, 0, 7) .attr(FlinchAttr), - new AttackMove(Moves.NATURES_MADNESS, PokemonType.FAIRY, MoveCategory.SPECIAL, -1, 90, 10, -1, 0, 7) + new AttackMove(MoveId.NATURES_MADNESS, PokemonType.FAIRY, MoveCategory.SPECIAL, -1, 90, 10, -1, 0, 7) .attr(TargetHalfHpDamageAttr), - new AttackMove(Moves.MULTI_ATTACK, PokemonType.NORMAL, MoveCategory.PHYSICAL, 120, 100, 10, -1, 0, 7) + new AttackMove(MoveId.MULTI_ATTACK, PokemonType.NORMAL, MoveCategory.PHYSICAL, 120, 100, 10, -1, 0, 7) .attr(FormChangeItemTypeAttr), /* Unused */ - new AttackMove(Moves.TEN_MILLION_VOLT_THUNDERBOLT, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 195, -1, 1, -1, 0, 7) + new AttackMove(MoveId.TEN_MILLION_VOLT_THUNDERBOLT, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 195, -1, 1, -1, 0, 7) .unimplemented() .edgeCase(), // I assume it's because it needs thunderbolt and pikachu in a cap /* End Unused */ - new AttackMove(Moves.MIND_BLOWN, PokemonType.FIRE, MoveCategory.SPECIAL, 150, 100, 5, -1, 0, 7) + new AttackMove(MoveId.MIND_BLOWN, PokemonType.FIRE, MoveCategory.SPECIAL, 150, 100, 5, -1, 0, 7) .condition(failIfDampCondition) .attr(HalfSacrificialAttr) .target(MoveTarget.ALL_NEAR_OTHERS), - new AttackMove(Moves.PLASMA_FISTS, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 100, 100, 15, -1, 0, 7) + new AttackMove(MoveId.PLASMA_FISTS, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 100, 100, 15, -1, 0, 7) .attr(AddArenaTagAttr, ArenaTagType.ION_DELUGE, 1) .punchingMove(), - new AttackMove(Moves.PHOTON_GEYSER, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 7) + new AttackMove(MoveId.PHOTON_GEYSER, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 7) .attr(PhotonGeyserCategoryAttr) .ignoresAbilities(), /* Unused */ - new AttackMove(Moves.LIGHT_THAT_BURNS_THE_SKY, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 200, -1, 1, -1, 0, 7) + new AttackMove(MoveId.LIGHT_THAT_BURNS_THE_SKY, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 200, -1, 1, -1, 0, 7) .unimplemented() .attr(PhotonGeyserCategoryAttr) .ignoresAbilities(), - new AttackMove(Moves.SEARING_SUNRAZE_SMASH, PokemonType.STEEL, MoveCategory.PHYSICAL, 200, -1, 1, -1, 0, 7) + new AttackMove(MoveId.SEARING_SUNRAZE_SMASH, PokemonType.STEEL, MoveCategory.PHYSICAL, 200, -1, 1, -1, 0, 7) .unimplemented() .ignoresAbilities(), - new AttackMove(Moves.MENACING_MOONRAZE_MAELSTROM, PokemonType.GHOST, MoveCategory.SPECIAL, 200, -1, 1, -1, 0, 7) + new AttackMove(MoveId.MENACING_MOONRAZE_MAELSTROM, PokemonType.GHOST, MoveCategory.SPECIAL, 200, -1, 1, -1, 0, 7) .unimplemented() .ignoresAbilities(), - new AttackMove(Moves.LETS_SNUGGLE_FOREVER, PokemonType.FAIRY, MoveCategory.PHYSICAL, 190, -1, 1, -1, 0, 7) + new AttackMove(MoveId.LETS_SNUGGLE_FOREVER, PokemonType.FAIRY, MoveCategory.PHYSICAL, 190, -1, 1, -1, 0, 7) .unimplemented() .edgeCase(), // I assume it needs play rough and mimikyu - new AttackMove(Moves.SPLINTERED_STORMSHARDS, PokemonType.ROCK, MoveCategory.PHYSICAL, 190, -1, 1, -1, 0, 7) + new AttackMove(MoveId.SPLINTERED_STORMSHARDS, PokemonType.ROCK, MoveCategory.PHYSICAL, 190, -1, 1, -1, 0, 7) .unimplemented() .attr(ClearTerrainAttr) .makesContact(false), - new AttackMove(Moves.CLANGOROUS_SOULBLAZE, PokemonType.DRAGON, MoveCategory.SPECIAL, 185, -1, 1, 100, 0, 7) + new AttackMove(MoveId.CLANGOROUS_SOULBLAZE, PokemonType.DRAGON, MoveCategory.SPECIAL, 185, -1, 1, 100, 0, 7) .unimplemented() .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ], 1, true, { firstTargetOnly: true }) .soundBased() .target(MoveTarget.ALL_NEAR_ENEMIES) .edgeCase(), // I assume it needs clanging scales and Kommo-O /* End Unused */ - new AttackMove(Moves.ZIPPY_ZAP, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 50, 100, 15, -1, 2, 7) // LGPE Implementation + new AttackMove(MoveId.ZIPPY_ZAP, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 50, 100, 15, -1, 2, 7) // LGPE Implementation .attr(CritOnlyAttr), - new AttackMove(Moves.SPLISHY_SPLASH, PokemonType.WATER, MoveCategory.SPECIAL, 90, 100, 15, 30, 0, 7) + new AttackMove(MoveId.SPLISHY_SPLASH, PokemonType.WATER, MoveCategory.SPECIAL, 90, 100, 15, 30, 0, 7) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.FLOATY_FALL, PokemonType.FLYING, MoveCategory.PHYSICAL, 90, 95, 15, 30, 0, 7) + new AttackMove(MoveId.FLOATY_FALL, PokemonType.FLYING, MoveCategory.PHYSICAL, 90, 95, 15, 30, 0, 7) .attr(FlinchAttr), - new AttackMove(Moves.PIKA_PAPOW, PokemonType.ELECTRIC, MoveCategory.SPECIAL, -1, -1, 20, -1, 0, 7) + new AttackMove(MoveId.PIKA_PAPOW, PokemonType.ELECTRIC, MoveCategory.SPECIAL, -1, -1, 20, -1, 0, 7) .attr(FriendshipPowerAttr), - new AttackMove(Moves.BOUNCY_BUBBLE, PokemonType.WATER, MoveCategory.SPECIAL, 60, 100, 20, -1, 0, 7) + new AttackMove(MoveId.BOUNCY_BUBBLE, PokemonType.WATER, MoveCategory.SPECIAL, 60, 100, 20, -1, 0, 7) .attr(HitHealAttr, 1) .triageMove(), - new AttackMove(Moves.BUZZY_BUZZ, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 60, 100, 20, 100, 0, 7) + new AttackMove(MoveId.BUZZY_BUZZ, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 60, 100, 20, 100, 0, 7) .attr(StatusEffectAttr, StatusEffect.PARALYSIS), - new AttackMove(Moves.SIZZLY_SLIDE, PokemonType.FIRE, MoveCategory.PHYSICAL, 60, 100, 20, 100, 0, 7) + new AttackMove(MoveId.SIZZLY_SLIDE, PokemonType.FIRE, MoveCategory.PHYSICAL, 60, 100, 20, 100, 0, 7) .attr(StatusEffectAttr, StatusEffect.BURN), - new AttackMove(Moves.GLITZY_GLOW, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 95, 15, -1, 0, 7) + new AttackMove(MoveId.GLITZY_GLOW, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 95, 15, -1, 0, 7) .attr(AddArenaTagAttr, ArenaTagType.LIGHT_SCREEN, 5, false, true), - new AttackMove(Moves.BADDY_BAD, PokemonType.DARK, MoveCategory.SPECIAL, 80, 95, 15, -1, 0, 7) + new AttackMove(MoveId.BADDY_BAD, PokemonType.DARK, MoveCategory.SPECIAL, 80, 95, 15, -1, 0, 7) .attr(AddArenaTagAttr, ArenaTagType.REFLECT, 5, false, true), - new AttackMove(Moves.SAPPY_SEED, PokemonType.GRASS, MoveCategory.PHYSICAL, 100, 90, 10, -1, 0, 7) + new AttackMove(MoveId.SAPPY_SEED, PokemonType.GRASS, MoveCategory.PHYSICAL, 100, 90, 10, -1, 0, 7) .attr(LeechSeedAttr) .makesContact(false), - new AttackMove(Moves.FREEZY_FROST, PokemonType.ICE, MoveCategory.SPECIAL, 100, 90, 10, -1, 0, 7) + new AttackMove(MoveId.FREEZY_FROST, PokemonType.ICE, MoveCategory.SPECIAL, 100, 90, 10, -1, 0, 7) .attr(ResetStatsAttr, true), - new AttackMove(Moves.SPARKLY_SWIRL, PokemonType.FAIRY, MoveCategory.SPECIAL, 120, 85, 5, -1, 0, 7) - .attr(PartyStatusCureAttr, null, Abilities.NONE), - new AttackMove(Moves.VEEVEE_VOLLEY, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, -1, 20, -1, 0, 7) + new AttackMove(MoveId.SPARKLY_SWIRL, PokemonType.FAIRY, MoveCategory.SPECIAL, 120, 85, 5, -1, 0, 7) + .attr(PartyStatusCureAttr, null, AbilityId.NONE), + new AttackMove(MoveId.VEEVEE_VOLLEY, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, -1, 20, -1, 0, 7) .attr(FriendshipPowerAttr), - new AttackMove(Moves.DOUBLE_IRON_BASH, PokemonType.STEEL, MoveCategory.PHYSICAL, 60, 100, 5, 30, 0, 7) + new AttackMove(MoveId.DOUBLE_IRON_BASH, PokemonType.STEEL, MoveCategory.PHYSICAL, 60, 100, 5, 30, 0, 7) .attr(MultiHitAttr, MultiHitType._2) .attr(FlinchAttr) .punchingMove(), /* Unused */ - new SelfStatusMove(Moves.MAX_GUARD, PokemonType.NORMAL, -1, 10, -1, 4, 8) + new SelfStatusMove(MoveId.MAX_GUARD, PokemonType.NORMAL, -1, 10, -1, 4, 8) .unimplemented() .attr(ProtectAttr) .condition(failIfLastCondition), /* End Unused */ - new AttackMove(Moves.DYNAMAX_CANNON, PokemonType.DRAGON, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 8) + new AttackMove(MoveId.DYNAMAX_CANNON, PokemonType.DRAGON, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 8) .attr(MovePowerMultiplierAttr, (user, target, move) => { // Move is only stronger against overleveled foes. if (target.level > globalScene.getMaxExpLevel()) { @@ -10587,13 +10587,13 @@ export function initMoves() { } }), - new AttackMove(Moves.SNIPE_SHOT, PokemonType.WATER, MoveCategory.SPECIAL, 80, 100, 15, -1, 0, 8) + new AttackMove(MoveId.SNIPE_SHOT, PokemonType.WATER, MoveCategory.SPECIAL, 80, 100, 15, -1, 0, 8) .attr(HighCritAttr) .attr(BypassRedirectAttr), - new AttackMove(Moves.JAW_LOCK, PokemonType.DARK, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 8) + new AttackMove(MoveId.JAW_LOCK, PokemonType.DARK, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 8) .attr(JawLockAttr) .bitingMove(), - new SelfStatusMove(Moves.STUFF_CHEEKS, PokemonType.NORMAL, -1, 10, -1, 0, 8) + new SelfStatusMove(MoveId.STUFF_CHEEKS, PokemonType.NORMAL, -1, 10, -1, 0, 8) .attr(EatBerryAttr, true) .attr(StatStageChangeAttr, [ Stat.DEF ], 2, true) .condition((user) => { @@ -10601,475 +10601,475 @@ export function initMoves() { return userBerries.length > 0; }) .edgeCase(), // Stuff Cheeks should not be selectable when the user does not have a berry, see wiki - new SelfStatusMove(Moves.NO_RETREAT, PokemonType.FIGHTING, -1, 5, -1, 0, 8) + new SelfStatusMove(MoveId.NO_RETREAT, PokemonType.FIGHTING, -1, 5, -1, 0, 8) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ], 1, true) .attr(AddBattlerTagAttr, BattlerTagType.NO_RETREAT, true, false) - .condition((user, target, move) => user.getTag(TrappedTag)?.sourceMove !== Moves.NO_RETREAT), // fails if the user is currently trapped by No Retreat - new StatusMove(Moves.TAR_SHOT, PokemonType.ROCK, 100, 15, -1, 0, 8) + .condition((user, target, move) => user.getTag(TrappedTag)?.sourceMove !== MoveId.NO_RETREAT), // fails if the user is currently trapped by No Retreat + new StatusMove(MoveId.TAR_SHOT, PokemonType.ROCK, 100, 15, -1, 0, 8) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) .attr(AddBattlerTagAttr, BattlerTagType.TAR_SHOT, false) .reflectable(), - new StatusMove(Moves.MAGIC_POWDER, PokemonType.PSYCHIC, 100, 20, -1, 0, 8) + new StatusMove(MoveId.MAGIC_POWDER, PokemonType.PSYCHIC, 100, 20, -1, 0, 8) .attr(ChangeTypeAttr, PokemonType.PSYCHIC) .powderMove() .reflectable(), - new AttackMove(Moves.DRAGON_DARTS, PokemonType.DRAGON, MoveCategory.PHYSICAL, 50, 100, 10, -1, 0, 8) + new AttackMove(MoveId.DRAGON_DARTS, PokemonType.DRAGON, MoveCategory.PHYSICAL, 50, 100, 10, -1, 0, 8) .attr(MultiHitAttr, MultiHitType._2) .makesContact(false) .partial(), // smart targetting is unimplemented - new StatusMove(Moves.TEATIME, PokemonType.NORMAL, -1, 10, -1, 0, 8) + new StatusMove(MoveId.TEATIME, PokemonType.NORMAL, -1, 10, -1, 0, 8) .attr(EatBerryAttr, false) .target(MoveTarget.ALL), - new StatusMove(Moves.OCTOLOCK, PokemonType.FIGHTING, 100, 15, -1, 0, 8) + new StatusMove(MoveId.OCTOLOCK, PokemonType.FIGHTING, 100, 15, -1, 0, 8) .condition(failIfGhostTypeCondition) .attr(AddBattlerTagAttr, BattlerTagType.OCTOLOCK, false, true, 1), - new AttackMove(Moves.BOLT_BEAK, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 85, 100, 10, -1, 0, 8) + new AttackMove(MoveId.BOLT_BEAK, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 85, 100, 10, -1, 0, 8) .attr(FirstAttackDoublePowerAttr), - new AttackMove(Moves.FISHIOUS_REND, PokemonType.WATER, MoveCategory.PHYSICAL, 85, 100, 10, -1, 0, 8) + new AttackMove(MoveId.FISHIOUS_REND, PokemonType.WATER, MoveCategory.PHYSICAL, 85, 100, 10, -1, 0, 8) .attr(FirstAttackDoublePowerAttr) .bitingMove(), - new StatusMove(Moves.COURT_CHANGE, PokemonType.NORMAL, 100, 10, -1, 0, 8) + new StatusMove(MoveId.COURT_CHANGE, PokemonType.NORMAL, 100, 10, -1, 0, 8) .attr(SwapArenaTagsAttr, [ ArenaTagType.AURORA_VEIL, ArenaTagType.LIGHT_SCREEN, ArenaTagType.MIST, ArenaTagType.REFLECT, ArenaTagType.SPIKES, ArenaTagType.STEALTH_ROCK, ArenaTagType.STICKY_WEB, ArenaTagType.TAILWIND, ArenaTagType.TOXIC_SPIKES ]), /* Unused */ - new AttackMove(Moves.MAX_FLARE, PokemonType.FIRE, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_FLARE, PokemonType.FIRE, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_FLUTTERBY, PokemonType.BUG, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_FLUTTERBY, PokemonType.BUG, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_LIGHTNING, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_LIGHTNING, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_STRIKE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_STRIKE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_KNUCKLE, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_KNUCKLE, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_PHANTASM, PokemonType.GHOST, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_PHANTASM, PokemonType.GHOST, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_HAILSTORM, PokemonType.ICE, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_HAILSTORM, PokemonType.ICE, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_OOZE, PokemonType.POISON, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_OOZE, PokemonType.POISON, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_GEYSER, PokemonType.WATER, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_GEYSER, PokemonType.WATER, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_AIRSTREAM, PokemonType.FLYING, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_AIRSTREAM, PokemonType.FLYING, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_STARFALL, PokemonType.FAIRY, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_STARFALL, PokemonType.FAIRY, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_WYRMWIND, PokemonType.DRAGON, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_WYRMWIND, PokemonType.DRAGON, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_MINDSTORM, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_MINDSTORM, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_ROCKFALL, PokemonType.ROCK, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_ROCKFALL, PokemonType.ROCK, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_QUAKE, PokemonType.GROUND, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_QUAKE, PokemonType.GROUND, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_DARKNESS, PokemonType.DARK, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_DARKNESS, PokemonType.DARK, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_OVERGROWTH, PokemonType.GRASS, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_OVERGROWTH, PokemonType.GRASS, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_STEELSPIKE, PokemonType.STEEL, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_STEELSPIKE, PokemonType.STEEL, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), /* End Unused */ - new SelfStatusMove(Moves.CLANGOROUS_SOUL, PokemonType.DRAGON, 100, 5, -1, 0, 8) + new SelfStatusMove(MoveId.CLANGOROUS_SOUL, PokemonType.DRAGON, 100, 5, -1, 0, 8) .attr(CutHpStatStageBoostAttr, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ], 1, 3) .soundBased() .danceMove(), - new AttackMove(Moves.BODY_PRESS, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 8) + new AttackMove(MoveId.BODY_PRESS, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 8) .attr(DefAtkAttr), - new StatusMove(Moves.DECORATE, PokemonType.FAIRY, -1, 15, -1, 0, 8) + new StatusMove(MoveId.DECORATE, PokemonType.FAIRY, -1, 15, -1, 0, 8) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], 2) .ignoresProtect(), - new AttackMove(Moves.DRUM_BEATING, PokemonType.GRASS, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 8) + new AttackMove(MoveId.DRUM_BEATING, PokemonType.GRASS, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 8) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) .makesContact(false), - new AttackMove(Moves.SNAP_TRAP, PokemonType.GRASS, MoveCategory.PHYSICAL, 35, 100, 15, -1, 0, 8) + new AttackMove(MoveId.SNAP_TRAP, PokemonType.GRASS, MoveCategory.PHYSICAL, 35, 100, 15, -1, 0, 8) .attr(TrapAttr, BattlerTagType.SNAP_TRAP), - new AttackMove(Moves.PYRO_BALL, PokemonType.FIRE, MoveCategory.PHYSICAL, 120, 90, 5, 10, 0, 8) + new AttackMove(MoveId.PYRO_BALL, PokemonType.FIRE, MoveCategory.PHYSICAL, 120, 90, 5, 10, 0, 8) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) .attr(StatusEffectAttr, StatusEffect.BURN) .ballBombMove() .makesContact(false), - new AttackMove(Moves.BEHEMOTH_BLADE, PokemonType.STEEL, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 8) + new AttackMove(MoveId.BEHEMOTH_BLADE, PokemonType.STEEL, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 8) .slicingMove(), - new AttackMove(Moves.BEHEMOTH_BASH, PokemonType.STEEL, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 8), - new AttackMove(Moves.AURA_WHEEL, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 110, 100, 10, 100, 0, 8) + new AttackMove(MoveId.BEHEMOTH_BASH, PokemonType.STEEL, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 8), + new AttackMove(MoveId.AURA_WHEEL, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 110, 100, 10, 100, 0, 8) .attr(StatStageChangeAttr, [ Stat.SPD ], 1, true) .makesContact(false) .attr(AuraWheelTypeAttr), - new AttackMove(Moves.BREAKING_SWIPE, PokemonType.DRAGON, MoveCategory.PHYSICAL, 60, 100, 15, 100, 0, 8) + new AttackMove(MoveId.BREAKING_SWIPE, PokemonType.DRAGON, MoveCategory.PHYSICAL, 60, 100, 15, 100, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .attr(StatStageChangeAttr, [ Stat.ATK ], -1), - new AttackMove(Moves.BRANCH_POKE, PokemonType.GRASS, MoveCategory.PHYSICAL, 40, 100, 40, -1, 0, 8), - new AttackMove(Moves.OVERDRIVE, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 8) + new AttackMove(MoveId.BRANCH_POKE, PokemonType.GRASS, MoveCategory.PHYSICAL, 40, 100, 40, -1, 0, 8), + new AttackMove(MoveId.OVERDRIVE, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 8) .soundBased() .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.APPLE_ACID, PokemonType.GRASS, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 8) + new AttackMove(MoveId.APPLE_ACID, PokemonType.GRASS, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 8) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -1), - new AttackMove(Moves.GRAV_APPLE, PokemonType.GRASS, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 8) + new AttackMove(MoveId.GRAV_APPLE, PokemonType.GRASS, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 8) .attr(StatStageChangeAttr, [ Stat.DEF ], -1) .attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTag(ArenaTagType.GRAVITY) ? 1.5 : 1) .makesContact(false), - new AttackMove(Moves.SPIRIT_BREAK, PokemonType.FAIRY, MoveCategory.PHYSICAL, 75, 100, 15, 100, 0, 8) + new AttackMove(MoveId.SPIRIT_BREAK, PokemonType.FAIRY, MoveCategory.PHYSICAL, 75, 100, 15, 100, 0, 8) .attr(StatStageChangeAttr, [ Stat.SPATK ], -1), - new AttackMove(Moves.STRANGE_STEAM, PokemonType.FAIRY, MoveCategory.SPECIAL, 90, 95, 10, 20, 0, 8) + new AttackMove(MoveId.STRANGE_STEAM, PokemonType.FAIRY, MoveCategory.SPECIAL, 90, 95, 10, 20, 0, 8) .attr(ConfuseAttr), - new StatusMove(Moves.LIFE_DEW, PokemonType.WATER, -1, 10, -1, 0, 8) + new StatusMove(MoveId.LIFE_DEW, PokemonType.WATER, -1, 10, -1, 0, 8) .attr(HealAttr, 0.25, true, false) .target(MoveTarget.USER_AND_ALLIES) .ignoresProtect(), - new SelfStatusMove(Moves.OBSTRUCT, PokemonType.DARK, 100, 10, -1, 4, 8) + new SelfStatusMove(MoveId.OBSTRUCT, PokemonType.DARK, 100, 10, -1, 4, 8) .attr(ProtectAttr, BattlerTagType.OBSTRUCT) .condition(failIfLastCondition), - new AttackMove(Moves.FALSE_SURRENDER, PokemonType.DARK, MoveCategory.PHYSICAL, 80, -1, 10, -1, 0, 8), - new AttackMove(Moves.METEOR_ASSAULT, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 150, 100, 5, -1, 0, 8) + new AttackMove(MoveId.FALSE_SURRENDER, PokemonType.DARK, MoveCategory.PHYSICAL, 80, -1, 10, -1, 0, 8), + new AttackMove(MoveId.METEOR_ASSAULT, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 150, 100, 5, -1, 0, 8) .attr(RechargeAttr) .makesContact(false), - new AttackMove(Moves.ETERNABEAM, PokemonType.DRAGON, MoveCategory.SPECIAL, 160, 90, 5, -1, 0, 8) + new AttackMove(MoveId.ETERNABEAM, PokemonType.DRAGON, MoveCategory.SPECIAL, 160, 90, 5, -1, 0, 8) .attr(RechargeAttr), - new AttackMove(Moves.STEEL_BEAM, PokemonType.STEEL, MoveCategory.SPECIAL, 140, 95, 5, -1, 0, 8) + new AttackMove(MoveId.STEEL_BEAM, PokemonType.STEEL, MoveCategory.SPECIAL, 140, 95, 5, -1, 0, 8) .attr(HalfSacrificialAttr), - new AttackMove(Moves.EXPANDING_FORCE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 8) + new AttackMove(MoveId.EXPANDING_FORCE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 8) .attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.PSYCHIC && user.isGrounded() ? 1.5 : 1) .attr(VariableTargetAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.PSYCHIC && user.isGrounded() ? MoveTarget.ALL_NEAR_ENEMIES : MoveTarget.NEAR_OTHER), - new AttackMove(Moves.STEEL_ROLLER, PokemonType.STEEL, MoveCategory.PHYSICAL, 130, 100, 5, -1, 0, 8) + new AttackMove(MoveId.STEEL_ROLLER, PokemonType.STEEL, MoveCategory.PHYSICAL, 130, 100, 5, -1, 0, 8) .attr(ClearTerrainAttr) .condition((user, target, move) => !!globalScene.arena.terrain), - new AttackMove(Moves.SCALE_SHOT, PokemonType.DRAGON, MoveCategory.PHYSICAL, 25, 90, 20, -1, 0, 8) + new AttackMove(MoveId.SCALE_SHOT, PokemonType.DRAGON, MoveCategory.PHYSICAL, 25, 90, 20, -1, 0, 8) .attr(StatStageChangeAttr, [ Stat.SPD ], 1, true, { lastHitOnly: true }) .attr(StatStageChangeAttr, [ Stat.DEF ], -1, true, { lastHitOnly: true }) .attr(MultiHitAttr) .makesContact(false), - new ChargingAttackMove(Moves.METEOR_BEAM, PokemonType.ROCK, MoveCategory.SPECIAL, 120, 90, 10, -1, 0, 8) + new ChargingAttackMove(MoveId.METEOR_BEAM, PokemonType.ROCK, MoveCategory.SPECIAL, 120, 90, 10, -1, 0, 8) .chargeText(i18next.t("moveTriggers:isOverflowingWithSpacePower", { pokemonName: "{USER}" })) .chargeAttr(StatStageChangeAttr, [ Stat.SPATK ], 1, true), - new AttackMove(Moves.SHELL_SIDE_ARM, PokemonType.POISON, MoveCategory.SPECIAL, 90, 100, 10, 20, 0, 8) + new AttackMove(MoveId.SHELL_SIDE_ARM, PokemonType.POISON, MoveCategory.SPECIAL, 90, 100, 10, 20, 0, 8) .attr(ShellSideArmCategoryAttr) .attr(StatusEffectAttr, StatusEffect.POISON) .partial(), // Physical version of the move does not make contact - new AttackMove(Moves.MISTY_EXPLOSION, PokemonType.FAIRY, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 8) + new AttackMove(MoveId.MISTY_EXPLOSION, PokemonType.FAIRY, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 8) .attr(SacrificialAttr) .target(MoveTarget.ALL_NEAR_OTHERS) .attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.MISTY && user.isGrounded() ? 1.5 : 1) .condition(failIfDampCondition) .makesContact(false), - new AttackMove(Moves.GRASSY_GLIDE, PokemonType.GRASS, MoveCategory.PHYSICAL, 55, 100, 20, -1, 0, 8) + new AttackMove(MoveId.GRASSY_GLIDE, PokemonType.GRASS, MoveCategory.PHYSICAL, 55, 100, 20, -1, 0, 8) .attr(IncrementMovePriorityAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.GRASSY && user.isGrounded()), - new AttackMove(Moves.RISING_VOLTAGE, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 20, -1, 0, 8) + new AttackMove(MoveId.RISING_VOLTAGE, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 20, -1, 0, 8) .attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.ELECTRIC && target.isGrounded() ? 2 : 1), - new AttackMove(Moves.TERRAIN_PULSE, PokemonType.NORMAL, MoveCategory.SPECIAL, 50, 100, 10, -1, 0, 8) + new AttackMove(MoveId.TERRAIN_PULSE, PokemonType.NORMAL, MoveCategory.SPECIAL, 50, 100, 10, -1, 0, 8) .attr(TerrainPulseTypeAttr) .attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTerrainType() !== TerrainType.NONE && user.isGrounded() ? 2 : 1) .pulseMove(), - new AttackMove(Moves.SKITTER_SMACK, PokemonType.BUG, MoveCategory.PHYSICAL, 70, 90, 10, 100, 0, 8) + new AttackMove(MoveId.SKITTER_SMACK, PokemonType.BUG, MoveCategory.PHYSICAL, 70, 90, 10, 100, 0, 8) .attr(StatStageChangeAttr, [ Stat.SPATK ], -1), - new AttackMove(Moves.BURNING_JEALOUSY, PokemonType.FIRE, MoveCategory.SPECIAL, 70, 100, 5, 100, 0, 8) + new AttackMove(MoveId.BURNING_JEALOUSY, PokemonType.FIRE, MoveCategory.SPECIAL, 70, 100, 5, 100, 0, 8) .attr(StatusIfBoostedAttr, StatusEffect.BURN) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.LASH_OUT, PokemonType.DARK, MoveCategory.PHYSICAL, 75, 100, 5, -1, 0, 8) + new AttackMove(MoveId.LASH_OUT, PokemonType.DARK, MoveCategory.PHYSICAL, 75, 100, 5, -1, 0, 8) .attr(MovePowerMultiplierAttr, (user, _target, _move) => user.turnData.statStagesDecreased ? 2 : 1), - new AttackMove(Moves.POLTERGEIST, PokemonType.GHOST, MoveCategory.PHYSICAL, 110, 90, 5, -1, 0, 8) + new AttackMove(MoveId.POLTERGEIST, PokemonType.GHOST, MoveCategory.PHYSICAL, 110, 90, 5, -1, 0, 8) .condition(failIfNoTargetHeldItemsCondition) .attr(PreMoveMessageAttr, attackedByItemMessageFunc) .makesContact(false), - new StatusMove(Moves.CORROSIVE_GAS, PokemonType.POISON, 100, 40, -1, 0, 8) + new StatusMove(MoveId.CORROSIVE_GAS, PokemonType.POISON, 100, 40, -1, 0, 8) .target(MoveTarget.ALL_NEAR_OTHERS) .reflectable() .unimplemented(), - new StatusMove(Moves.COACHING, PokemonType.FIGHTING, -1, 10, -1, 0, 8) + new StatusMove(MoveId.COACHING, PokemonType.FIGHTING, -1, 10, -1, 0, 8) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF ], 1) .target(MoveTarget.NEAR_ALLY) .condition(failIfSingleBattle), - new AttackMove(Moves.FLIP_TURN, PokemonType.WATER, MoveCategory.PHYSICAL, 60, 100, 20, -1, 0, 8) + new AttackMove(MoveId.FLIP_TURN, PokemonType.WATER, MoveCategory.PHYSICAL, 60, 100, 20, -1, 0, 8) .attr(ForceSwitchOutAttr, true), - new AttackMove(Moves.TRIPLE_AXEL, PokemonType.ICE, MoveCategory.PHYSICAL, 20, 90, 10, -1, 0, 8) + new AttackMove(MoveId.TRIPLE_AXEL, PokemonType.ICE, MoveCategory.PHYSICAL, 20, 90, 10, -1, 0, 8) .attr(MultiHitAttr, MultiHitType._3) .attr(MultiHitPowerIncrementAttr, 3) .checkAllHits(), - new AttackMove(Moves.DUAL_WINGBEAT, PokemonType.FLYING, MoveCategory.PHYSICAL, 40, 90, 10, -1, 0, 8) + new AttackMove(MoveId.DUAL_WINGBEAT, PokemonType.FLYING, MoveCategory.PHYSICAL, 40, 90, 10, -1, 0, 8) .attr(MultiHitAttr, MultiHitType._2), - new AttackMove(Moves.SCORCHING_SANDS, PokemonType.GROUND, MoveCategory.SPECIAL, 70, 100, 10, 30, 0, 8) + new AttackMove(MoveId.SCORCHING_SANDS, PokemonType.GROUND, MoveCategory.SPECIAL, 70, 100, 10, 30, 0, 8) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) .attr(HealStatusEffectAttr, false, StatusEffect.FREEZE) .attr(StatusEffectAttr, StatusEffect.BURN), - new StatusMove(Moves.JUNGLE_HEALING, PokemonType.GRASS, -1, 10, -1, 0, 8) + new StatusMove(MoveId.JUNGLE_HEALING, PokemonType.GRASS, -1, 10, -1, 0, 8) .attr(HealAttr, 0.25, true, false) .attr(HealStatusEffectAttr, false, getNonVolatileStatusEffects()) .target(MoveTarget.USER_AND_ALLIES), - new AttackMove(Moves.WICKED_BLOW, PokemonType.DARK, MoveCategory.PHYSICAL, 75, 100, 5, -1, 0, 8) + new AttackMove(MoveId.WICKED_BLOW, PokemonType.DARK, MoveCategory.PHYSICAL, 75, 100, 5, -1, 0, 8) .attr(CritOnlyAttr) .punchingMove(), - new AttackMove(Moves.SURGING_STRIKES, PokemonType.WATER, MoveCategory.PHYSICAL, 25, 100, 5, -1, 0, 8) + new AttackMove(MoveId.SURGING_STRIKES, PokemonType.WATER, MoveCategory.PHYSICAL, 25, 100, 5, -1, 0, 8) .attr(MultiHitAttr, MultiHitType._3) .attr(CritOnlyAttr) .punchingMove(), - new AttackMove(Moves.THUNDER_CAGE, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 80, 90, 15, -1, 0, 8) + new AttackMove(MoveId.THUNDER_CAGE, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 80, 90, 15, -1, 0, 8) .attr(TrapAttr, BattlerTagType.THUNDER_CAGE), - new AttackMove(Moves.DRAGON_ENERGY, PokemonType.DRAGON, MoveCategory.SPECIAL, 150, 100, 5, -1, 0, 8) + new AttackMove(MoveId.DRAGON_ENERGY, PokemonType.DRAGON, MoveCategory.SPECIAL, 150, 100, 5, -1, 0, 8) .attr(HpPowerAttr) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.FREEZING_GLARE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 8) + new AttackMove(MoveId.FREEZING_GLARE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 8) .attr(StatusEffectAttr, StatusEffect.FREEZE), - new AttackMove(Moves.FIERY_WRATH, PokemonType.DARK, MoveCategory.SPECIAL, 90, 100, 10, 20, 0, 8) + new AttackMove(MoveId.FIERY_WRATH, PokemonType.DARK, MoveCategory.SPECIAL, 90, 100, 10, 20, 0, 8) .attr(FlinchAttr) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.THUNDEROUS_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 90, 100, 10, 100, 0, 8) + new AttackMove(MoveId.THUNDEROUS_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 90, 100, 10, 100, 0, 8) .attr(StatStageChangeAttr, [ Stat.DEF ], -1), - new AttackMove(Moves.GLACIAL_LANCE, PokemonType.ICE, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 8) + new AttackMove(MoveId.GLACIAL_LANCE, PokemonType.ICE, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .makesContact(false), - new AttackMove(Moves.ASTRAL_BARRAGE, PokemonType.GHOST, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 8) + new AttackMove(MoveId.ASTRAL_BARRAGE, PokemonType.GHOST, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.EERIE_SPELL, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 5, 100, 0, 8) + new AttackMove(MoveId.EERIE_SPELL, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 5, 100, 0, 8) .attr(AttackReducePpMoveAttr, 3) .soundBased(), - new AttackMove(Moves.DIRE_CLAW, PokemonType.POISON, MoveCategory.PHYSICAL, 80, 100, 15, 50, 0, 8) + new AttackMove(MoveId.DIRE_CLAW, PokemonType.POISON, MoveCategory.PHYSICAL, 80, 100, 15, 50, 0, 8) .attr(MultiStatusEffectAttr, [ StatusEffect.POISON, StatusEffect.PARALYSIS, StatusEffect.SLEEP ]), - new AttackMove(Moves.PSYSHIELD_BASH, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, 70, 90, 10, 100, 0, 8) + new AttackMove(MoveId.PSYSHIELD_BASH, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, 70, 90, 10, 100, 0, 8) .attr(StatStageChangeAttr, [ Stat.DEF ], 1, true), - new SelfStatusMove(Moves.POWER_SHIFT, PokemonType.NORMAL, -1, 10, -1, 0, 8) + new SelfStatusMove(MoveId.POWER_SHIFT, PokemonType.NORMAL, -1, 10, -1, 0, 8) .target(MoveTarget.USER) .attr(ShiftStatAttr, Stat.ATK, Stat.DEF), - new AttackMove(Moves.STONE_AXE, PokemonType.ROCK, MoveCategory.PHYSICAL, 65, 90, 15, 100, 0, 8) + new AttackMove(MoveId.STONE_AXE, PokemonType.ROCK, MoveCategory.PHYSICAL, 65, 90, 15, 100, 0, 8) .attr(AddArenaTrapTagHitAttr, ArenaTagType.STEALTH_ROCK) .slicingMove(), - new AttackMove(Moves.SPRINGTIDE_STORM, PokemonType.FAIRY, MoveCategory.SPECIAL, 100, 80, 5, 30, 0, 8) + new AttackMove(MoveId.SPRINGTIDE_STORM, PokemonType.FAIRY, MoveCategory.SPECIAL, 100, 80, 5, 30, 0, 8) .attr(StatStageChangeAttr, [ Stat.ATK ], -1) .windMove() .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.MYSTICAL_POWER, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 70, 90, 10, 100, 0, 8) + new AttackMove(MoveId.MYSTICAL_POWER, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 70, 90, 10, 100, 0, 8) .attr(StatStageChangeAttr, [ Stat.SPATK ], 1, true), - new AttackMove(Moves.RAGING_FURY, PokemonType.FIRE, MoveCategory.PHYSICAL, 120, 100, 10, -1, 0, 8) + new AttackMove(MoveId.RAGING_FURY, PokemonType.FIRE, MoveCategory.PHYSICAL, 120, 100, 10, -1, 0, 8) .makesContact(false) .attr(FrenzyAttr) .attr(MissEffectAttr, frenzyMissFunc) .attr(NoEffectAttr, frenzyMissFunc) .target(MoveTarget.RANDOM_NEAR_ENEMY), - new AttackMove(Moves.WAVE_CRASH, PokemonType.WATER, MoveCategory.PHYSICAL, 120, 100, 10, -1, 0, 8) + new AttackMove(MoveId.WAVE_CRASH, PokemonType.WATER, MoveCategory.PHYSICAL, 120, 100, 10, -1, 0, 8) .attr(RecoilAttr, false, 0.33) .recklessMove(), - new AttackMove(Moves.CHLOROBLAST, PokemonType.GRASS, MoveCategory.SPECIAL, 150, 95, 5, -1, 0, 8) + new AttackMove(MoveId.CHLOROBLAST, PokemonType.GRASS, MoveCategory.SPECIAL, 150, 95, 5, -1, 0, 8) .attr(RecoilAttr, true, 0.5), - new AttackMove(Moves.MOUNTAIN_GALE, PokemonType.ICE, MoveCategory.PHYSICAL, 100, 85, 10, 30, 0, 8) + new AttackMove(MoveId.MOUNTAIN_GALE, PokemonType.ICE, MoveCategory.PHYSICAL, 100, 85, 10, 30, 0, 8) .makesContact(false) .attr(FlinchAttr), - new SelfStatusMove(Moves.VICTORY_DANCE, PokemonType.FIGHTING, -1, 10, -1, 0, 8) + new SelfStatusMove(MoveId.VICTORY_DANCE, PokemonType.FIGHTING, -1, 10, -1, 0, 8) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF, Stat.SPD ], 1, true) .danceMove(), - new AttackMove(Moves.HEADLONG_RUSH, PokemonType.GROUND, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 8) + new AttackMove(MoveId.HEADLONG_RUSH, PokemonType.GROUND, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 8) .attr(StatStageChangeAttr, [ Stat.DEF, Stat.SPDEF ], -1, true) .punchingMove(), - new AttackMove(Moves.BARB_BARRAGE, PokemonType.POISON, MoveCategory.PHYSICAL, 60, 100, 10, 50, 0, 8) + new AttackMove(MoveId.BARB_BARRAGE, PokemonType.POISON, MoveCategory.PHYSICAL, 60, 100, 10, 50, 0, 8) .makesContact(false) .attr(MovePowerMultiplierAttr, (user, target, move) => target.status && (target.status.effect === StatusEffect.POISON || target.status.effect === StatusEffect.TOXIC) ? 2 : 1) .attr(StatusEffectAttr, StatusEffect.POISON), - new AttackMove(Moves.ESPER_WING, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 8) + new AttackMove(MoveId.ESPER_WING, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 8) .attr(HighCritAttr) .attr(StatStageChangeAttr, [ Stat.SPD ], 1, true), - new AttackMove(Moves.BITTER_MALICE, PokemonType.GHOST, MoveCategory.SPECIAL, 75, 100, 10, 100, 0, 8) + new AttackMove(MoveId.BITTER_MALICE, PokemonType.GHOST, MoveCategory.SPECIAL, 75, 100, 10, 100, 0, 8) .attr(StatStageChangeAttr, [ Stat.ATK ], -1), - new SelfStatusMove(Moves.SHELTER, PokemonType.STEEL, -1, 10, -1, 0, 8) + new SelfStatusMove(MoveId.SHELTER, PokemonType.STEEL, -1, 10, -1, 0, 8) .attr(StatStageChangeAttr, [ Stat.DEF ], 2, true), - new AttackMove(Moves.TRIPLE_ARROWS, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 90, 100, 10, 30, 0, 8) + new AttackMove(MoveId.TRIPLE_ARROWS, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 90, 100, 10, 30, 0, 8) .makesContact(false) .attr(HighCritAttr) .attr(StatStageChangeAttr, [ Stat.DEF ], -1, false, { effectChanceOverride: 50 }) .attr(FlinchAttr), - new AttackMove(Moves.INFERNAL_PARADE, PokemonType.GHOST, MoveCategory.SPECIAL, 60, 100, 15, 30, 0, 8) + new AttackMove(MoveId.INFERNAL_PARADE, PokemonType.GHOST, MoveCategory.SPECIAL, 60, 100, 15, 30, 0, 8) .attr(StatusEffectAttr, StatusEffect.BURN) .attr(MovePowerMultiplierAttr, (user, target, move) => target.status ? 2 : 1), - new AttackMove(Moves.CEASELESS_EDGE, PokemonType.DARK, MoveCategory.PHYSICAL, 65, 90, 15, 100, 0, 8) + new AttackMove(MoveId.CEASELESS_EDGE, PokemonType.DARK, MoveCategory.PHYSICAL, 65, 90, 15, 100, 0, 8) .attr(AddArenaTrapTagHitAttr, ArenaTagType.SPIKES) .slicingMove(), - new AttackMove(Moves.BLEAKWIND_STORM, PokemonType.FLYING, MoveCategory.SPECIAL, 100, 80, 10, 30, 0, 8) + new AttackMove(MoveId.BLEAKWIND_STORM, PokemonType.FLYING, MoveCategory.SPECIAL, 100, 80, 10, 30, 0, 8) .attr(StormAccuracyAttr) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) .windMove() .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.WILDBOLT_STORM, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 100, 80, 10, 20, 0, 8) + new AttackMove(MoveId.WILDBOLT_STORM, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 100, 80, 10, 20, 0, 8) .attr(StormAccuracyAttr) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .windMove() .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.SANDSEAR_STORM, PokemonType.GROUND, MoveCategory.SPECIAL, 100, 80, 10, 20, 0, 8) + new AttackMove(MoveId.SANDSEAR_STORM, PokemonType.GROUND, MoveCategory.SPECIAL, 100, 80, 10, 20, 0, 8) .attr(StormAccuracyAttr) .attr(StatusEffectAttr, StatusEffect.BURN) .windMove() .target(MoveTarget.ALL_NEAR_ENEMIES), - new StatusMove(Moves.LUNAR_BLESSING, PokemonType.PSYCHIC, -1, 5, -1, 0, 8) + new StatusMove(MoveId.LUNAR_BLESSING, PokemonType.PSYCHIC, -1, 5, -1, 0, 8) .attr(HealAttr, 0.25, true, false) .attr(HealStatusEffectAttr, false, getNonVolatileStatusEffects()) .target(MoveTarget.USER_AND_ALLIES) .triageMove(), - new SelfStatusMove(Moves.TAKE_HEART, PokemonType.PSYCHIC, -1, 10, -1, 0, 8) + new SelfStatusMove(MoveId.TAKE_HEART, PokemonType.PSYCHIC, -1, 10, -1, 0, 8) .attr(StatStageChangeAttr, [ Stat.SPATK, Stat.SPDEF ], 1, true) .attr(HealStatusEffectAttr, true, [ StatusEffect.PARALYSIS, StatusEffect.POISON, StatusEffect.TOXIC, StatusEffect.BURN, StatusEffect.SLEEP ]), /* Unused - new AttackMove(Moves.G_MAX_WILDFIRE, PokemonType.Fire, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_WILDFIRE, PokemonType.Fire, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_BEFUDDLE, Type.BUG, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_BEFUDDLE, Type.BUG, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_VOLT_CRASH, Type.ELECTRIC, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_VOLT_CRASH, Type.ELECTRIC, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_GOLD_RUSH, Type.NORMAL, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_GOLD_RUSH, Type.NORMAL, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_CHI_STRIKE, Type.FIGHTING, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_CHI_STRIKE, Type.FIGHTING, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_TERROR, Type.GHOST, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_TERROR, Type.GHOST, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_RESONANCE, Type.ICE, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_RESONANCE, Type.ICE, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_CUDDLE, Type.NORMAL, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_CUDDLE, Type.NORMAL, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_REPLENISH, Type.NORMAL, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_REPLENISH, Type.NORMAL, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_MALODOR, Type.POISON, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_MALODOR, Type.POISON, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_STONESURGE, Type.WATER, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_STONESURGE, Type.WATER, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_WIND_RAGE, Type.FLYING, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_WIND_RAGE, Type.FLYING, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_STUN_SHOCK, Type.ELECTRIC, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_STUN_SHOCK, Type.ELECTRIC, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_FINALE, Type.FAIRY, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_FINALE, Type.FAIRY, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_DEPLETION, Type.DRAGON, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_DEPLETION, Type.DRAGON, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_GRAVITAS, Type.PSYCHIC, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_GRAVITAS, Type.PSYCHIC, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_VOLCALITH, Type.ROCK, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_VOLCALITH, Type.ROCK, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_SANDBLAST, Type.GROUND, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_SANDBLAST, Type.GROUND, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_SNOOZE, Type.DARK, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_SNOOZE, Type.DARK, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_TARTNESS, Type.GRASS, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_TARTNESS, Type.GRASS, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_SWEETNESS, Type.GRASS, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_SWEETNESS, Type.GRASS, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_SMITE, Type.FAIRY, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_SMITE, Type.FAIRY, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_STEELSURGE, Type.STEEL, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_STEELSURGE, Type.STEEL, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_MELTDOWN, Type.STEEL, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_MELTDOWN, Type.STEEL, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_FOAM_BURST, Type.WATER, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_FOAM_BURST, Type.WATER, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_CENTIFERNO, PokemonType.Fire, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_CENTIFERNO, PokemonType.Fire, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_VINE_LASH, Type.GRASS, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_VINE_LASH, Type.GRASS, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_CANNONADE, Type.WATER, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_CANNONADE, Type.WATER, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_DRUM_SOLO, Type.GRASS, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_DRUM_SOLO, Type.GRASS, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_FIREBALL, PokemonType.Fire, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_FIREBALL, PokemonType.Fire, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_HYDROSNIPE, Type.WATER, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_HYDROSNIPE, Type.WATER, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_ONE_BLOW, Type.DARK, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_ONE_BLOW, Type.DARK, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), - new AttackMove(Moves.G_MAX_RAPID_FLOW, Type.WATER, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.G_MAX_RAPID_FLOW, Type.WATER, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), End Unused */ - new AttackMove(Moves.TERA_BLAST, PokemonType.NORMAL, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 9) + new AttackMove(MoveId.TERA_BLAST, PokemonType.NORMAL, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 9) .attr(TeraMoveCategoryAttr) .attr(TeraBlastTypeAttr) .attr(TeraBlastPowerAttr) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1, true, { condition: (user, target, move) => user.isTerastallized && user.isOfType(PokemonType.STELLAR) }), - new SelfStatusMove(Moves.SILK_TRAP, PokemonType.BUG, -1, 10, -1, 4, 9) + new SelfStatusMove(MoveId.SILK_TRAP, PokemonType.BUG, -1, 10, -1, 4, 9) .attr(ProtectAttr, BattlerTagType.SILK_TRAP) .condition(failIfLastCondition), - new AttackMove(Moves.AXE_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 120, 90, 10, 30, 0, 9) + new AttackMove(MoveId.AXE_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 120, 90, 10, 30, 0, 9) .attr(MissEffectAttr, crashDamageFunc) .attr(NoEffectAttr, crashDamageFunc) .attr(ConfuseAttr) .recklessMove(), - new AttackMove(Moves.LAST_RESPECTS, PokemonType.GHOST, MoveCategory.PHYSICAL, 50, 100, 10, -1, 0, 9) + new AttackMove(MoveId.LAST_RESPECTS, PokemonType.GHOST, MoveCategory.PHYSICAL, 50, 100, 10, -1, 0, 9) .attr(MovePowerMultiplierAttr, (user, target, move) => 1 + Math.min(user.isPlayer() ? globalScene.arena.playerFaints : globalScene.currentBattle.enemyFaints, 100)) .makesContact(false), - new AttackMove(Moves.LUMINA_CRASH, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 9) + new AttackMove(MoveId.LUMINA_CRASH, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 9) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -2), - new AttackMove(Moves.ORDER_UP, PokemonType.DRAGON, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 9) + new AttackMove(MoveId.ORDER_UP, PokemonType.DRAGON, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 9) .attr(OrderUpStatBoostAttr) .makesContact(false), - new AttackMove(Moves.JET_PUNCH, PokemonType.WATER, MoveCategory.PHYSICAL, 60, 100, 15, -1, 1, 9) + new AttackMove(MoveId.JET_PUNCH, PokemonType.WATER, MoveCategory.PHYSICAL, 60, 100, 15, -1, 1, 9) .punchingMove(), - new StatusMove(Moves.SPICY_EXTRACT, PokemonType.GRASS, -1, 15, -1, 0, 9) + new StatusMove(MoveId.SPICY_EXTRACT, PokemonType.GRASS, -1, 15, -1, 0, 9) .attr(StatStageChangeAttr, [ Stat.ATK ], 2) .attr(StatStageChangeAttr, [ Stat.DEF ], -2), - new AttackMove(Moves.SPIN_OUT, PokemonType.STEEL, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 9) + new AttackMove(MoveId.SPIN_OUT, PokemonType.STEEL, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 9) .attr(StatStageChangeAttr, [ Stat.SPD ], -2, true), - new AttackMove(Moves.POPULATION_BOMB, PokemonType.NORMAL, MoveCategory.PHYSICAL, 20, 90, 10, -1, 0, 9) + new AttackMove(MoveId.POPULATION_BOMB, PokemonType.NORMAL, MoveCategory.PHYSICAL, 20, 90, 10, -1, 0, 9) .attr(MultiHitAttr, MultiHitType._10) .slicingMove() .checkAllHits(), - new AttackMove(Moves.ICE_SPINNER, PokemonType.ICE, MoveCategory.PHYSICAL, 80, 100, 15, -1, 0, 9) + new AttackMove(MoveId.ICE_SPINNER, PokemonType.ICE, MoveCategory.PHYSICAL, 80, 100, 15, -1, 0, 9) .attr(ClearTerrainAttr), - new AttackMove(Moves.GLAIVE_RUSH, PokemonType.DRAGON, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 9) + new AttackMove(MoveId.GLAIVE_RUSH, PokemonType.DRAGON, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 9) .attr(AddBattlerTagAttr, BattlerTagType.ALWAYS_GET_HIT, true, false, 0, 0, true) .attr(AddBattlerTagAttr, BattlerTagType.RECEIVE_DOUBLE_DAMAGE, true, false, 0, 0, true) .condition((user, target, move) => { return !(target.getTag(BattlerTagType.PROTECTED)?.tagType === "PROTECTED" || globalScene.arena.getTag(ArenaTagType.MAT_BLOCK)?.tagType === "MAT_BLOCK"); }), - new StatusMove(Moves.REVIVAL_BLESSING, PokemonType.NORMAL, -1, 1, -1, 0, 9) + new StatusMove(MoveId.REVIVAL_BLESSING, PokemonType.NORMAL, -1, 1, -1, 0, 9) .triageMove() .attr(RevivalBlessingAttr) .target(MoveTarget.USER), - new AttackMove(Moves.SALT_CURE, PokemonType.ROCK, MoveCategory.PHYSICAL, 40, 100, 15, 100, 0, 9) + new AttackMove(MoveId.SALT_CURE, PokemonType.ROCK, MoveCategory.PHYSICAL, 40, 100, 15, 100, 0, 9) .attr(AddBattlerTagAttr, BattlerTagType.SALT_CURED) .makesContact(false), - new AttackMove(Moves.TRIPLE_DIVE, PokemonType.WATER, MoveCategory.PHYSICAL, 30, 95, 10, -1, 0, 9) + new AttackMove(MoveId.TRIPLE_DIVE, PokemonType.WATER, MoveCategory.PHYSICAL, 30, 95, 10, -1, 0, 9) .attr(MultiHitAttr, MultiHitType._3), - new AttackMove(Moves.MORTAL_SPIN, PokemonType.POISON, MoveCategory.PHYSICAL, 30, 100, 15, 100, 0, 9) + new AttackMove(MoveId.MORTAL_SPIN, PokemonType.POISON, MoveCategory.PHYSICAL, 30, 100, 15, 100, 0, 9) .attr(LapseBattlerTagAttr, [ BattlerTagType.BIND, BattlerTagType.WRAP, @@ -11086,32 +11086,32 @@ export function initMoves() { .attr(StatusEffectAttr, StatusEffect.POISON) .attr(RemoveArenaTrapAttr) .target(MoveTarget.ALL_NEAR_ENEMIES), - new StatusMove(Moves.DOODLE, PokemonType.NORMAL, 100, 10, -1, 0, 9) + new StatusMove(MoveId.DOODLE, PokemonType.NORMAL, 100, 10, -1, 0, 9) .attr(AbilityCopyAttr, true), - new SelfStatusMove(Moves.FILLET_AWAY, PokemonType.NORMAL, -1, 10, -1, 0, 9) + new SelfStatusMove(MoveId.FILLET_AWAY, PokemonType.NORMAL, -1, 10, -1, 0, 9) .attr(CutHpStatStageBoostAttr, [ Stat.ATK, Stat.SPATK, Stat.SPD ], 2, 2), - new AttackMove(Moves.KOWTOW_CLEAVE, PokemonType.DARK, MoveCategory.PHYSICAL, 85, -1, 10, -1, 0, 9) + new AttackMove(MoveId.KOWTOW_CLEAVE, PokemonType.DARK, MoveCategory.PHYSICAL, 85, -1, 10, -1, 0, 9) .slicingMove(), - new AttackMove(Moves.FLOWER_TRICK, PokemonType.GRASS, MoveCategory.PHYSICAL, 70, -1, 10, -1, 0, 9) + new AttackMove(MoveId.FLOWER_TRICK, PokemonType.GRASS, MoveCategory.PHYSICAL, 70, -1, 10, -1, 0, 9) .attr(CritOnlyAttr) .makesContact(false), - new AttackMove(Moves.TORCH_SONG, PokemonType.FIRE, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 9) + new AttackMove(MoveId.TORCH_SONG, PokemonType.FIRE, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 9) .attr(StatStageChangeAttr, [ Stat.SPATK ], 1, true) .soundBased(), - new AttackMove(Moves.AQUA_STEP, PokemonType.WATER, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 9) + new AttackMove(MoveId.AQUA_STEP, PokemonType.WATER, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 9) .attr(StatStageChangeAttr, [ Stat.SPD ], 1, true) .danceMove(), - new AttackMove(Moves.RAGING_BULL, PokemonType.NORMAL, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 9) + new AttackMove(MoveId.RAGING_BULL, PokemonType.NORMAL, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 9) .attr(RagingBullTypeAttr) .attr(RemoveScreensAttr), - new AttackMove(Moves.MAKE_IT_RAIN, PokemonType.STEEL, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 9) + new AttackMove(MoveId.MAKE_IT_RAIN, PokemonType.STEEL, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 9) .attr(MoneyAttr) .attr(StatStageChangeAttr, [ Stat.SPATK ], -1, true, { firstTargetOnly: true }) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.PSYBLADE, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, 80, 100, 15, -1, 0, 9) + new AttackMove(MoveId.PSYBLADE, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, 80, 100, 15, -1, 0, 9) .attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.ELECTRIC && user.isGrounded() ? 1.5 : 1) .slicingMove(), - new AttackMove(Moves.HYDRO_STEAM, PokemonType.WATER, MoveCategory.SPECIAL, 80, 100, 15, -1, 0, 9) + new AttackMove(MoveId.HYDRO_STEAM, PokemonType.WATER, MoveCategory.SPECIAL, 80, 100, 15, -1, 0, 9) .attr(IgnoreWeatherTypeDebuffAttr, WeatherType.SUNNY) .attr(MovePowerMultiplierAttr, (user, target, move) => { const weather = globalScene.arena.weather; @@ -11120,47 +11120,47 @@ export function initMoves() { } return [ WeatherType.SUNNY, WeatherType.HARSH_SUN ].includes(weather.weatherType) && !weather.isEffectSuppressed() ? 1.5 : 1; }), - new AttackMove(Moves.RUINATION, PokemonType.DARK, MoveCategory.SPECIAL, -1, 90, 10, -1, 0, 9) + new AttackMove(MoveId.RUINATION, PokemonType.DARK, MoveCategory.SPECIAL, -1, 90, 10, -1, 0, 9) .attr(TargetHalfHpDamageAttr), - new AttackMove(Moves.COLLISION_COURSE, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 9) + new AttackMove(MoveId.COLLISION_COURSE, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 9) .attr(MovePowerMultiplierAttr, (user, target, move) => target.getAttackTypeEffectiveness(move.type, user) >= 2 ? 5461 / 4096 : 1), - new AttackMove(Moves.ELECTRO_DRIFT, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 9) + new AttackMove(MoveId.ELECTRO_DRIFT, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 9) .attr(MovePowerMultiplierAttr, (user, target, move) => target.getAttackTypeEffectiveness(move.type, user) >= 2 ? 5461 / 4096 : 1) .makesContact(), - new SelfStatusMove(Moves.SHED_TAIL, PokemonType.NORMAL, -1, 10, -1, 0, 9) + new SelfStatusMove(MoveId.SHED_TAIL, PokemonType.NORMAL, -1, 10, -1, 0, 9) .attr(AddSubstituteAttr, 0.5, true) .attr(ForceSwitchOutAttr, true, SwitchType.SHED_TAIL) .condition(failIfLastInPartyCondition), - new SelfStatusMove(Moves.CHILLY_RECEPTION, PokemonType.ICE, -1, 10, -1, 0, 9) + new SelfStatusMove(MoveId.CHILLY_RECEPTION, PokemonType.ICE, -1, 10, -1, 0, 9) .attr(PreMoveMessageAttr, (user, move) => i18next.t("moveTriggers:chillyReception", { pokemonName: getPokemonNameWithAffix(user) })) .attr(ChillyReceptionAttr, true), - new SelfStatusMove(Moves.TIDY_UP, PokemonType.NORMAL, -1, 10, -1, 0, 9) + new SelfStatusMove(MoveId.TIDY_UP, PokemonType.NORMAL, -1, 10, -1, 0, 9) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPD ], 1, true) .attr(RemoveArenaTrapAttr, true) .attr(RemoveAllSubstitutesAttr), - new StatusMove(Moves.SNOWSCAPE, PokemonType.ICE, -1, 10, -1, 0, 9) + new StatusMove(MoveId.SNOWSCAPE, PokemonType.ICE, -1, 10, -1, 0, 9) .attr(WeatherChangeAttr, WeatherType.SNOW) .target(MoveTarget.BOTH_SIDES), - new AttackMove(Moves.POUNCE, PokemonType.BUG, MoveCategory.PHYSICAL, 50, 100, 20, 100, 0, 9) + new AttackMove(MoveId.POUNCE, PokemonType.BUG, MoveCategory.PHYSICAL, 50, 100, 20, 100, 0, 9) .attr(StatStageChangeAttr, [ Stat.SPD ], -1), - new AttackMove(Moves.TRAILBLAZE, PokemonType.GRASS, MoveCategory.PHYSICAL, 50, 100, 20, 100, 0, 9) + new AttackMove(MoveId.TRAILBLAZE, PokemonType.GRASS, MoveCategory.PHYSICAL, 50, 100, 20, 100, 0, 9) .attr(StatStageChangeAttr, [ Stat.SPD ], 1, true), - new AttackMove(Moves.CHILLING_WATER, PokemonType.WATER, MoveCategory.SPECIAL, 50, 100, 20, 100, 0, 9) + new AttackMove(MoveId.CHILLING_WATER, PokemonType.WATER, MoveCategory.SPECIAL, 50, 100, 20, 100, 0, 9) .attr(StatStageChangeAttr, [ Stat.ATK ], -1), - new AttackMove(Moves.HYPER_DRILL, PokemonType.NORMAL, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 9) + new AttackMove(MoveId.HYPER_DRILL, PokemonType.NORMAL, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 9) .ignoresProtect(), - new AttackMove(Moves.TWIN_BEAM, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 40, 100, 10, -1, 0, 9) + new AttackMove(MoveId.TWIN_BEAM, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 40, 100, 10, -1, 0, 9) .attr(MultiHitAttr, MultiHitType._2), - new AttackMove(Moves.RAGE_FIST, PokemonType.GHOST, MoveCategory.PHYSICAL, 50, 100, 10, -1, 0, 9) + new AttackMove(MoveId.RAGE_FIST, PokemonType.GHOST, MoveCategory.PHYSICAL, 50, 100, 10, -1, 0, 9) .attr(RageFistPowerAttr) .punchingMove(), - new AttackMove(Moves.ARMOR_CANNON, PokemonType.FIRE, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 9) + new AttackMove(MoveId.ARMOR_CANNON, PokemonType.FIRE, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 9) .attr(StatStageChangeAttr, [ Stat.DEF, Stat.SPDEF ], -1, true), - new AttackMove(Moves.BITTER_BLADE, PokemonType.FIRE, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 9) + new AttackMove(MoveId.BITTER_BLADE, PokemonType.FIRE, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 9) .attr(HitHealAttr) .slicingMove() .triageMove(), - new AttackMove(Moves.DOUBLE_SHOCK, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 9) + new AttackMove(MoveId.DOUBLE_SHOCK, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 9) .condition((user) => { const userTypes = user.getTypes(true); return userTypes.includes(PokemonType.ELECTRIC); @@ -11169,71 +11169,71 @@ export function initMoves() { .attr(RemoveTypeAttr, PokemonType.ELECTRIC, (user) => { globalScene.queueMessage(i18next.t("moveTriggers:usedUpAllElectricity", { pokemonName: getPokemonNameWithAffix(user) })); }), - new AttackMove(Moves.GIGATON_HAMMER, PokemonType.STEEL, MoveCategory.PHYSICAL, 160, 100, 5, -1, 0, 9) + new AttackMove(MoveId.GIGATON_HAMMER, PokemonType.STEEL, MoveCategory.PHYSICAL, 160, 100, 5, -1, 0, 9) .makesContact(false) .condition((user, target, move) => { const turnMove = user.getLastXMoves(1); return !turnMove.length || turnMove[0].move !== move.id || turnMove[0].result !== MoveResult.SUCCESS; }), // TODO Add Instruct/Encore interaction - new AttackMove(Moves.COMEUPPANCE, PokemonType.DARK, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 9) + new AttackMove(MoveId.COMEUPPANCE, PokemonType.DARK, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 9) .attr(CounterDamageAttr, (move: Move) => (move.category === MoveCategory.PHYSICAL || move.category === MoveCategory.SPECIAL), 1.5) .redirectCounter() .target(MoveTarget.ATTACKER), - new AttackMove(Moves.AQUA_CUTTER, PokemonType.WATER, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 9) + new AttackMove(MoveId.AQUA_CUTTER, PokemonType.WATER, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 9) .attr(HighCritAttr) .slicingMove() .makesContact(false), - new AttackMove(Moves.BLAZING_TORQUE, PokemonType.FIRE, MoveCategory.PHYSICAL, 80, 100, 10, 30, 0, 9) + new AttackMove(MoveId.BLAZING_TORQUE, PokemonType.FIRE, MoveCategory.PHYSICAL, 80, 100, 10, 30, 0, 9) .attr(StatusEffectAttr, StatusEffect.BURN) .makesContact(false), - new AttackMove(Moves.WICKED_TORQUE, PokemonType.DARK, MoveCategory.PHYSICAL, 80, 100, 10, 10, 0, 9) + new AttackMove(MoveId.WICKED_TORQUE, PokemonType.DARK, MoveCategory.PHYSICAL, 80, 100, 10, 10, 0, 9) .attr(StatusEffectAttr, StatusEffect.SLEEP) .makesContact(false), - new AttackMove(Moves.NOXIOUS_TORQUE, PokemonType.POISON, MoveCategory.PHYSICAL, 100, 100, 10, 30, 0, 9) + new AttackMove(MoveId.NOXIOUS_TORQUE, PokemonType.POISON, MoveCategory.PHYSICAL, 100, 100, 10, 30, 0, 9) .attr(StatusEffectAttr, StatusEffect.POISON) .makesContact(false), - new AttackMove(Moves.COMBAT_TORQUE, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 100, 10, 30, 0, 9) + new AttackMove(MoveId.COMBAT_TORQUE, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 100, 10, 30, 0, 9) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .makesContact(false), - new AttackMove(Moves.MAGICAL_TORQUE, PokemonType.FAIRY, MoveCategory.PHYSICAL, 100, 100, 10, 30, 0, 9) + new AttackMove(MoveId.MAGICAL_TORQUE, PokemonType.FAIRY, MoveCategory.PHYSICAL, 100, 100, 10, 30, 0, 9) .attr(ConfuseAttr) .makesContact(false), - new AttackMove(Moves.BLOOD_MOON, PokemonType.NORMAL, MoveCategory.SPECIAL, 140, 100, 5, -1, 0, 9) + new AttackMove(MoveId.BLOOD_MOON, PokemonType.NORMAL, MoveCategory.SPECIAL, 140, 100, 5, -1, 0, 9) .condition((user, target, move) => { const turnMove = user.getLastXMoves(1); return !turnMove.length || turnMove[0].move !== move.id || turnMove[0].result !== MoveResult.SUCCESS; }), // TODO Add Instruct/Encore interaction - new AttackMove(Moves.MATCHA_GOTCHA, PokemonType.GRASS, MoveCategory.SPECIAL, 80, 90, 15, 20, 0, 9) + new AttackMove(MoveId.MATCHA_GOTCHA, PokemonType.GRASS, MoveCategory.SPECIAL, 80, 90, 15, 20, 0, 9) .attr(HitHealAttr) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) .attr(HealStatusEffectAttr, false, StatusEffect.FREEZE) .attr(StatusEffectAttr, StatusEffect.BURN) .target(MoveTarget.ALL_NEAR_ENEMIES) .triageMove(), - new AttackMove(Moves.SYRUP_BOMB, PokemonType.GRASS, MoveCategory.SPECIAL, 60, 85, 10, 100, 0, 9) + new AttackMove(MoveId.SYRUP_BOMB, PokemonType.GRASS, MoveCategory.SPECIAL, 60, 85, 10, 100, 0, 9) .attr(AddBattlerTagAttr, BattlerTagType.SYRUP_BOMB, false, false, 3) .ballBombMove(), - new AttackMove(Moves.IVY_CUDGEL, PokemonType.GRASS, MoveCategory.PHYSICAL, 100, 100, 10, -1, 0, 9) + new AttackMove(MoveId.IVY_CUDGEL, PokemonType.GRASS, MoveCategory.PHYSICAL, 100, 100, 10, -1, 0, 9) .attr(IvyCudgelTypeAttr) .attr(HighCritAttr) .makesContact(false), - new ChargingAttackMove(Moves.ELECTRO_SHOT, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 130, 100, 10, 100, 0, 9) + new ChargingAttackMove(MoveId.ELECTRO_SHOT, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 130, 100, 10, 100, 0, 9) .chargeText(i18next.t("moveTriggers:absorbedElectricity", { pokemonName: "{USER}" })) .chargeAttr(StatStageChangeAttr, [ Stat.SPATK ], 1, true) .chargeAttr(WeatherInstantChargeAttr, [ WeatherType.RAIN, WeatherType.HEAVY_RAIN ]), - new AttackMove(Moves.TERA_STARSTORM, PokemonType.NORMAL, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 9) + new AttackMove(MoveId.TERA_STARSTORM, PokemonType.NORMAL, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 9) .attr(TeraMoveCategoryAttr) .attr(TeraStarstormTypeAttr) - .attr(VariableTargetAttr, (user, target, move) => user.hasSpecies(Species.TERAPAGOS) && (user.isTerastallized || globalScene.currentBattle.preTurnCommands[user.getFieldIndex()]?.command === Command.TERA) ? MoveTarget.ALL_NEAR_ENEMIES : MoveTarget.NEAR_OTHER) + .attr(VariableTargetAttr, (user, target, move) => user.hasSpecies(SpeciesId.TERAPAGOS) && (user.isTerastallized || globalScene.currentBattle.preTurnCommands[user.getFieldIndex()]?.command === Command.TERA) ? MoveTarget.ALL_NEAR_ENEMIES : MoveTarget.NEAR_OTHER) .partial(), /** Does not ignore abilities that affect stats, relevant in determining the move's category {@see TeraMoveCategoryAttr} */ - new AttackMove(Moves.FICKLE_BEAM, PokemonType.DRAGON, MoveCategory.SPECIAL, 80, 100, 5, 30, 0, 9) + new AttackMove(MoveId.FICKLE_BEAM, PokemonType.DRAGON, MoveCategory.SPECIAL, 80, 100, 5, 30, 0, 9) .attr(PreMoveMessageAttr, doublePowerChanceMessageFunc) .attr(DoublePowerChanceAttr) .edgeCase(), // Should not interact with Sheer Force - new SelfStatusMove(Moves.BURNING_BULWARK, PokemonType.FIRE, -1, 10, -1, 4, 9) + new SelfStatusMove(MoveId.BURNING_BULWARK, PokemonType.FIRE, -1, 10, -1, 4, 9) .attr(ProtectAttr, BattlerTagType.BURNING_BULWARK) .condition(failIfLastCondition), - new AttackMove(Moves.THUNDERCLAP, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 5, -1, 1, 9) + new AttackMove(MoveId.THUNDERCLAP, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 5, -1, 1, 9) .condition((user, target, move) => { const turnCommand = globalScene.currentBattle.turnCommands[target.getBattlerIndex()]; if (!turnCommand || !turnCommand.move) { @@ -11241,35 +11241,35 @@ export function initMoves() { } return (turnCommand.command === Command.FIGHT && !target.turnData.acted && allMoves[turnCommand.move.move].category !== MoveCategory.STATUS); }), - new AttackMove(Moves.MIGHTY_CLEAVE, PokemonType.ROCK, MoveCategory.PHYSICAL, 95, 100, 5, -1, 0, 9) + new AttackMove(MoveId.MIGHTY_CLEAVE, PokemonType.ROCK, MoveCategory.PHYSICAL, 95, 100, 5, -1, 0, 9) .slicingMove() .ignoresProtect(), - new AttackMove(Moves.TACHYON_CUTTER, PokemonType.STEEL, MoveCategory.SPECIAL, 50, -1, 10, -1, 0, 9) + new AttackMove(MoveId.TACHYON_CUTTER, PokemonType.STEEL, MoveCategory.SPECIAL, 50, -1, 10, -1, 0, 9) .attr(MultiHitAttr, MultiHitType._2) .slicingMove(), - new AttackMove(Moves.HARD_PRESS, PokemonType.STEEL, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 9) + new AttackMove(MoveId.HARD_PRESS, PokemonType.STEEL, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 9) .attr(OpponentHighHpPowerAttr, 100), - new StatusMove(Moves.DRAGON_CHEER, PokemonType.DRAGON, -1, 15, -1, 0, 9) + new StatusMove(MoveId.DRAGON_CHEER, PokemonType.DRAGON, -1, 15, -1, 0, 9) .attr(AddBattlerTagAttr, BattlerTagType.DRAGON_CHEER, false, true) .target(MoveTarget.NEAR_ALLY), - new AttackMove(Moves.ALLURING_VOICE, PokemonType.FAIRY, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 9) + new AttackMove(MoveId.ALLURING_VOICE, PokemonType.FAIRY, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 9) .attr(AddBattlerTagIfBoostedAttr, BattlerTagType.CONFUSED) .soundBased(), - new AttackMove(Moves.TEMPER_FLARE, PokemonType.FIRE, MoveCategory.PHYSICAL, 75, 100, 10, -1, 0, 9) + new AttackMove(MoveId.TEMPER_FLARE, PokemonType.FIRE, MoveCategory.PHYSICAL, 75, 100, 10, -1, 0, 9) .attr(MovePowerMultiplierAttr, (user, target, move) => user.getLastXMoves(2)[1]?.result === MoveResult.MISS || user.getLastXMoves(2)[1]?.result === MoveResult.FAIL ? 2 : 1), - new AttackMove(Moves.SUPERCELL_SLAM, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 100, 95, 15, -1, 0, 9) + new AttackMove(MoveId.SUPERCELL_SLAM, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 100, 95, 15, -1, 0, 9) .attr(AlwaysHitMinimizeAttr) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.MINIMIZED) .attr(MissEffectAttr, crashDamageFunc) .attr(NoEffectAttr, crashDamageFunc) .recklessMove(), - new AttackMove(Moves.PSYCHIC_NOISE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 75, 100, 10, 100, 0, 9) + new AttackMove(MoveId.PSYCHIC_NOISE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 75, 100, 10, 100, 0, 9) .soundBased() .attr(AddBattlerTagAttr, BattlerTagType.HEAL_BLOCK, false, false, 2), - new AttackMove(Moves.UPPER_HAND, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 65, 100, 15, 100, 3, 9) + new AttackMove(MoveId.UPPER_HAND, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 65, 100, 15, 100, 3, 9) .attr(FlinchAttr) .condition(new UpperHandCondition()), - new AttackMove(Moves.MALIGNANT_CHAIN, PokemonType.POISON, MoveCategory.SPECIAL, 100, 100, 5, 50, 0, 9) + new AttackMove(MoveId.MALIGNANT_CHAIN, PokemonType.POISON, MoveCategory.SPECIAL, 100, 100, 5, 50, 0, 9) .attr(StatusEffectAttr, StatusEffect.TOXIC) ); allMoves.map(m => { diff --git a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts index 48b36369190..ae5cd2b2a99 100644 --- a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts +++ b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts @@ -12,7 +12,7 @@ import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounte import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { TrainerType } from "#enums/trainer-type"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { getSpriteKeysFromSpecies } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import { randSeedInt } from "#app/utils/common"; import i18next from "i18next"; @@ -54,27 +54,27 @@ export const ATrainersTestEncounter: MysteryEncounter = MysteryEncounterBuilder. switch (randSeedInt(5)) { case 1: trainerType = TrainerType.CHERYL; - spriteKeys = getSpriteKeysFromSpecies(Species.BLISSEY); + spriteKeys = getSpriteKeysFromSpecies(SpeciesId.BLISSEY); trainerNameKey = "cheryl"; break; case 2: trainerType = TrainerType.MARLEY; - spriteKeys = getSpriteKeysFromSpecies(Species.ARCANINE); + spriteKeys = getSpriteKeysFromSpecies(SpeciesId.ARCANINE); trainerNameKey = "marley"; break; case 3: trainerType = TrainerType.MIRA; - spriteKeys = getSpriteKeysFromSpecies(Species.ALAKAZAM, false, 1); + spriteKeys = getSpriteKeysFromSpecies(SpeciesId.ALAKAZAM, false, 1); trainerNameKey = "mira"; break; case 4: trainerType = TrainerType.RILEY; - spriteKeys = getSpriteKeysFromSpecies(Species.LUCARIO, false, 1); + spriteKeys = getSpriteKeysFromSpecies(SpeciesId.LUCARIO, false, 1); trainerNameKey = "riley"; break; default: trainerType = TrainerType.BUCK; - spriteKeys = getSpriteKeysFromSpecies(Species.CLAYDOL); + spriteKeys = getSpriteKeysFromSpecies(SpeciesId.CLAYDOL); trainerNameKey = "buck"; break; } diff --git a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts index acfc8cb16a1..f46e1360b0d 100644 --- a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts +++ b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts @@ -11,7 +11,7 @@ import { EnemyPokemon, PokemonMove } from "#app/field/pokemon"; import type { BerryModifierType, PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; import { modifierTypes } from "#app/modifier/modifier-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { globalScene } from "#app/global-scene"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; @@ -22,7 +22,7 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { BerryModifier, PokemonInstantReviveModifier } from "#app/modifier/modifier"; import { getPokemonSpecies } from "#app/data/pokemon-species"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { BattlerTagType } from "#enums/battler-tag-type"; import { randInt } from "#app/utils/common"; import { BattlerIndex } from "#app/battle"; @@ -59,7 +59,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = MysteryEncounterBuilde // This sprite has the shadow spriteKey: "", fileRoot: "", - species: Species.GREEDENT, + species: SpeciesId.GREEDENT, hasShadow: true, alpha: 0.001, repeat: true, @@ -68,7 +68,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = MysteryEncounterBuilde { spriteKey: "", fileRoot: "", - species: Species.GREEDENT, + species: SpeciesId.GREEDENT, hasShadow: false, repeat: true, x: -5, @@ -228,11 +228,11 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = MysteryEncounterBuilde levelAdditiveModifier: 1, pokemonConfigs: [ { - species: getPokemonSpecies(Species.GREEDENT), + species: getPokemonSpecies(SpeciesId.GREEDENT), isBoss: true, bossSegments: 3, shiny: false, // Shiny lock because of consistency issues between the different options - moveSet: [Moves.THRASH, Moves.CRUNCH, Moves.BODY_PRESS, Moves.SLACK_OFF], + moveSet: [MoveId.THRASH, MoveId.CRUNCH, MoveId.BODY_PRESS, MoveId.SLACK_OFF], modifierConfigs: bossModifierConfigs, tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { @@ -246,7 +246,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = MysteryEncounterBuilde }; encounter.enemyPartyConfigs = [config]; - encounter.setDialogueToken("greedentName", getPokemonSpecies(Species.GREEDENT).getName()); + encounter.setDialogueToken("greedentName", getPokemonSpecies(SpeciesId.GREEDENT).getName()); return true; }) @@ -302,7 +302,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = MysteryEncounterBuilde encounter.startOfBattleEffects.push({ sourceBattlerIndex: BattlerIndex.ENEMY, targets: [BattlerIndex.ENEMY], - move: new PokemonMove(Moves.STUFF_CHEEKS), + move: new PokemonMove(MoveId.STUFF_CHEEKS), ignorePp: true, }); @@ -373,12 +373,12 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = MysteryEncounterBuilde // Let it have the food // Greedent joins the team, level equal to 2 below highest party member (shiny locked) const level = getHighestLevelPlayerPokemon(false, true).level - 2; - const greedent = new EnemyPokemon(getPokemonSpecies(Species.GREEDENT), level, TrainerSlot.NONE, false, true); + const greedent = new EnemyPokemon(getPokemonSpecies(SpeciesId.GREEDENT), level, TrainerSlot.NONE, false, true); greedent.moveset = [ - new PokemonMove(Moves.THRASH), - new PokemonMove(Moves.BODY_PRESS), - new PokemonMove(Moves.STUFF_CHEEKS), - new PokemonMove(Moves.SLACK_OFF), + new PokemonMove(MoveId.THRASH), + new PokemonMove(MoveId.BODY_PRESS), + new PokemonMove(MoveId.STUFF_CHEEKS), + new PokemonMove(MoveId.SLACK_OFF), ]; greedent.passive = true; diff --git a/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts b/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts index b403c5f291c..2f4dfaa5f99 100644 --- a/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts +++ b/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts @@ -6,7 +6,7 @@ import { } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { modifierTypes } from "#app/modifier/modifier-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { globalScene } from "#app/global-scene"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; @@ -50,7 +50,7 @@ export const AnOfferYouCantRefuseEncounter: MysteryEncounter = MysteryEncounterB .withScenePartySizeRequirement(2, 6, true) // Must have at least 2 pokemon in party .withIntroSpriteConfigs([ { - spriteKey: Species.LIEPARD.toString(), + spriteKey: SpeciesId.LIEPARD.toString(), fileRoot: "pokemon", hasShadow: true, repeat: true, @@ -112,7 +112,7 @@ export const AnOfferYouCantRefuseEncounter: MysteryEncounter = MysteryEncounterB const shinyCharm = generateModifierType(modifierTypes.SHINY_CHARM); encounter.setDialogueToken("itemName", shinyCharm?.name ?? i18next.t("modifierType:ModifierType.SHINY_CHARM.name")); - encounter.setDialogueToken("liepardName", getPokemonSpecies(Species.LIEPARD).getName()); + encounter.setDialogueToken("liepardName", getPokemonSpecies(SpeciesId.LIEPARD).getName()); return true; }) @@ -167,7 +167,7 @@ export const AnOfferYouCantRefuseEncounter: MysteryEncounter = MysteryEncounterB // Update money and remove pokemon from party updatePlayerMoney(encounter.misc.price); - setEncounterExp(encounter.options[1].primaryPokemon!.id, getPokemonSpecies(Species.LIEPARD).baseExp, true); + setEncounterExp(encounter.options[1].primaryPokemon!.id, getPokemonSpecies(SpeciesId.LIEPARD).baseExp, true); leaveEncounterWithoutBattle(true); }) diff --git a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts index 17c1c31d55e..c080122f922 100644 --- a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts +++ b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts @@ -21,13 +21,13 @@ import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounte import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { TrainerType } from "#enums/trainer-type"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { PokemonMove } from "#app/field/pokemon"; import { getEncounterText, showEncounterDialogue } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { LearnMovePhase } from "#app/phases/learn-move-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; @@ -59,110 +59,116 @@ import { getSpriteKeysFromSpecies } from "#app/data/mystery-encounters/utils/enc const namespace = "mysteryEncounters/bugTypeSuperfan"; const POOL_1_POKEMON = [ - Species.PARASECT, - Species.VENOMOTH, - Species.LEDIAN, - Species.ARIADOS, - Species.YANMA, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.MASQUERAIN, - Species.NINJASK, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ANORITH, - Species.KRICKETUNE, - Species.WORMADAM, - Species.MOTHIM, - Species.SKORUPI, - Species.JOLTIK, - Species.LARVESTA, - Species.VIVILLON, - Species.CHARJABUG, - Species.RIBOMBEE, - Species.SPIDOPS, - Species.LOKIX, + SpeciesId.PARASECT, + SpeciesId.VENOMOTH, + SpeciesId.LEDIAN, + SpeciesId.ARIADOS, + SpeciesId.YANMA, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.MASQUERAIN, + SpeciesId.NINJASK, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ANORITH, + SpeciesId.KRICKETUNE, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.SKORUPI, + SpeciesId.JOLTIK, + SpeciesId.LARVESTA, + SpeciesId.VIVILLON, + SpeciesId.CHARJABUG, + SpeciesId.RIBOMBEE, + SpeciesId.SPIDOPS, + SpeciesId.LOKIX, ]; const POOL_2_POKEMON = [ - Species.SCYTHER, - Species.PINSIR, - Species.HERACROSS, - Species.FORRETRESS, - Species.SCIZOR, - Species.SHUCKLE, - Species.SHEDINJA, - Species.ARMALDO, - Species.VESPIQUEN, - Species.DRAPION, - Species.YANMEGA, - Species.LEAVANNY, - Species.SCOLIPEDE, - Species.CRUSTLE, - Species.ESCAVALIER, - Species.ACCELGOR, - Species.GALVANTULA, - Species.VIKAVOLT, - Species.ARAQUANID, - Species.ORBEETLE, - Species.CENTISKORCH, - Species.FROSMOTH, - Species.KLEAVOR, + SpeciesId.SCYTHER, + SpeciesId.PINSIR, + SpeciesId.HERACROSS, + SpeciesId.FORRETRESS, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.SHEDINJA, + SpeciesId.ARMALDO, + SpeciesId.VESPIQUEN, + SpeciesId.DRAPION, + SpeciesId.YANMEGA, + SpeciesId.LEAVANNY, + SpeciesId.SCOLIPEDE, + SpeciesId.CRUSTLE, + SpeciesId.ESCAVALIER, + SpeciesId.ACCELGOR, + SpeciesId.GALVANTULA, + SpeciesId.VIKAVOLT, + SpeciesId.ARAQUANID, + SpeciesId.ORBEETLE, + SpeciesId.CENTISKORCH, + SpeciesId.FROSMOTH, + SpeciesId.KLEAVOR, ]; -const POOL_3_POKEMON: { species: Species; formIndex?: number }[] = [ +const POOL_3_POKEMON: { species: SpeciesId; formIndex?: number }[] = [ { - species: Species.PINSIR, + species: SpeciesId.PINSIR, formIndex: 1, }, { - species: Species.SCIZOR, + species: SpeciesId.SCIZOR, formIndex: 1, }, { - species: Species.HERACROSS, + species: SpeciesId.HERACROSS, formIndex: 1, }, { - species: Species.ORBEETLE, + species: SpeciesId.ORBEETLE, formIndex: 1, }, { - species: Species.CENTISKORCH, + species: SpeciesId.CENTISKORCH, formIndex: 1, }, { - species: Species.DURANT, + species: SpeciesId.DURANT, }, { - species: Species.VOLCARONA, + species: SpeciesId.VOLCARONA, }, { - species: Species.GOLISOPOD, + species: SpeciesId.GOLISOPOD, }, ]; -const POOL_4_POKEMON = [Species.GENESECT, Species.SLITHER_WING, Species.BUZZWOLE, Species.PHEROMOSA]; +const POOL_4_POKEMON = [SpeciesId.GENESECT, SpeciesId.SLITHER_WING, SpeciesId.BUZZWOLE, SpeciesId.PHEROMOSA]; -const PHYSICAL_TUTOR_MOVES = [Moves.MEGAHORN, Moves.ATTACK_ORDER, Moves.BUG_BITE, Moves.FIRST_IMPRESSION, Moves.LUNGE]; +const PHYSICAL_TUTOR_MOVES = [ + MoveId.MEGAHORN, + MoveId.ATTACK_ORDER, + MoveId.BUG_BITE, + MoveId.FIRST_IMPRESSION, + MoveId.LUNGE, +]; const SPECIAL_TUTOR_MOVES = [ - Moves.SILVER_WIND, - Moves.SIGNAL_BEAM, - Moves.BUG_BUZZ, - Moves.POLLEN_PUFF, - Moves.STRUGGLE_BUG, + MoveId.SILVER_WIND, + MoveId.SIGNAL_BEAM, + MoveId.BUG_BUZZ, + MoveId.POLLEN_PUFF, + MoveId.STRUGGLE_BUG, ]; const STATUS_TUTOR_MOVES = [ - Moves.STRING_SHOT, - Moves.DEFEND_ORDER, - Moves.RAGE_POWDER, - Moves.STICKY_WEB, - Moves.SILK_TRAP, + MoveId.STRING_SHOT, + MoveId.DEFEND_ORDER, + MoveId.RAGE_POWDER, + MoveId.STICKY_WEB, + MoveId.SILK_TRAP, ]; -const MISC_TUTOR_MOVES = [Moves.LEECH_LIFE, Moves.U_TURN, Moves.HEAL_ORDER, Moves.QUIVER_DANCE, Moves.INFESTATION]; +const MISC_TUTOR_MOVES = [MoveId.LEECH_LIFE, MoveId.U_TURN, MoveId.HEAL_ORDER, MoveId.QUIVER_DANCE, MoveId.INFESTATION]; /** * Wave breakpoints that determine how strong to make the Bug-Type Superfan's team @@ -213,12 +219,12 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = MysteryEncounterBuilde let beedrillKeys: { spriteKey: string; fileRoot: string }, butterfreeKeys: { spriteKey: string; fileRoot: string }; if (globalScene.currentBattle.waveIndex < WAVE_LEVEL_BREAKPOINTS[3]) { - beedrillKeys = getSpriteKeysFromSpecies(Species.BEEDRILL, false); - butterfreeKeys = getSpriteKeysFromSpecies(Species.BUTTERFREE, false); + beedrillKeys = getSpriteKeysFromSpecies(SpeciesId.BEEDRILL, false); + butterfreeKeys = getSpriteKeysFromSpecies(SpeciesId.BUTTERFREE, false); } else { // Mega Beedrill/Gmax Butterfree - beedrillKeys = getSpriteKeysFromSpecies(Species.BEEDRILL, false, 1); - butterfreeKeys = getSpriteKeysFromSpecies(Species.BUTTERFREE, false, 1); + beedrillKeys = getSpriteKeysFromSpecies(SpeciesId.BEEDRILL, false, 1); + butterfreeKeys = getSpriteKeysFromSpecies(SpeciesId.BUTTERFREE, false, 1); } encounter.spriteConfigs = [ @@ -519,26 +525,26 @@ function getTrainerConfigForWave(waveIndex: number) { if (waveIndex < WAVE_LEVEL_BREAKPOINTS[0]) { // Use default template (2 AVG) config - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.BEEDRILL], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.BUTTERFREE], TrainerSlot.TRAINER, true)); + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.BEEDRILL], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.BUTTERFREE], TrainerSlot.TRAINER, true)); } else if (waveIndex < WAVE_LEVEL_BREAKPOINTS[1]) { config .setPartyTemplates(new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE)) - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.BEEDRILL], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.BUTTERFREE], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.BEEDRILL], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.BUTTERFREE], TrainerSlot.TRAINER, true)) .setPartyMemberFunc(2, getRandomPartyMemberFunc(POOL_1_POKEMON, TrainerSlot.TRAINER, true)); } else if (waveIndex < WAVE_LEVEL_BREAKPOINTS[2]) { config .setPartyTemplates(new TrainerPartyTemplate(4, PartyMemberStrength.AVERAGE)) - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.BEEDRILL], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.BUTTERFREE], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.BEEDRILL], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.BUTTERFREE], TrainerSlot.TRAINER, true)) .setPartyMemberFunc(2, getRandomPartyMemberFunc(POOL_1_POKEMON, TrainerSlot.TRAINER, true)) .setPartyMemberFunc(3, getRandomPartyMemberFunc(POOL_2_POKEMON, TrainerSlot.TRAINER, true)); } else if (waveIndex < WAVE_LEVEL_BREAKPOINTS[3]) { config .setPartyTemplates(new TrainerPartyTemplate(5, PartyMemberStrength.AVERAGE)) - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.BEEDRILL], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.BUTTERFREE], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.BEEDRILL], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.BUTTERFREE], TrainerSlot.TRAINER, true)) .setPartyMemberFunc(2, getRandomPartyMemberFunc(POOL_1_POKEMON, TrainerSlot.TRAINER, true)) .setPartyMemberFunc(3, getRandomPartyMemberFunc(POOL_2_POKEMON, TrainerSlot.TRAINER, true)) .setPartyMemberFunc(4, getRandomPartyMemberFunc(POOL_2_POKEMON, TrainerSlot.TRAINER, true)); @@ -547,7 +553,7 @@ function getTrainerConfigForWave(waveIndex: number) { .setPartyTemplates(new TrainerPartyTemplate(5, PartyMemberStrength.AVERAGE)) .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.BEEDRILL], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.BEEDRILL], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; p.generateAndPopulateMoveset(); p.generateName(); @@ -555,7 +561,7 @@ function getTrainerConfigForWave(waveIndex: number) { ) .setPartyMemberFunc( 1, - getRandomPartyMemberFunc([Species.BUTTERFREE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.BUTTERFREE], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; p.generateAndPopulateMoveset(); p.generateName(); @@ -580,7 +586,7 @@ function getTrainerConfigForWave(waveIndex: number) { .setPartyTemplates(new TrainerPartyTemplate(5, PartyMemberStrength.AVERAGE)) .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.BEEDRILL], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.BEEDRILL], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; p.generateAndPopulateMoveset(); p.generateName(); @@ -588,7 +594,7 @@ function getTrainerConfigForWave(waveIndex: number) { ) .setPartyMemberFunc( 1, - getRandomPartyMemberFunc([Species.BUTTERFREE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.BUTTERFREE], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; p.generateAndPopulateMoveset(); p.generateName(); @@ -625,7 +631,7 @@ function getTrainerConfigForWave(waveIndex: number) { ) .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.BEEDRILL], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.BEEDRILL], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; p.generateAndPopulateMoveset(); p.generateName(); @@ -633,7 +639,7 @@ function getTrainerConfigForWave(waveIndex: number) { ) .setPartyMemberFunc( 1, - getRandomPartyMemberFunc([Species.BUTTERFREE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.BUTTERFREE], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; p.generateAndPopulateMoveset(); p.generateName(); @@ -663,7 +669,7 @@ function getTrainerConfigForWave(waveIndex: number) { ) .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.BEEDRILL], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.BEEDRILL], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.formIndex = 1; p.generateAndPopulateMoveset(); @@ -672,7 +678,7 @@ function getTrainerConfigForWave(waveIndex: number) { ) .setPartyMemberFunc( 1, - getRandomPartyMemberFunc([Species.BUTTERFREE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.BUTTERFREE], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.formIndex = 1; p.generateAndPopulateMoveset(); diff --git a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts index ce5eb2cfdd1..19c4948aeab 100644 --- a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts +++ b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts @@ -20,10 +20,10 @@ import { globalScene } from "#app/global-scene"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { TrainerType } from "#enums/trainer-type"; import { getPokemonSpecies } from "#app/data/pokemon-species"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { applyAbilityOverrideToPokemon, applyModifierTypeToPlayerPokemon, @@ -42,7 +42,7 @@ import { Ability } from "#app/data/abilities/ability-class"; import { BerryModifier } from "#app/modifier/modifier"; import { BerryType } from "#enums/berry-type"; import { BattlerIndex } from "#app/battle"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { EncounterBattleAnim } from "#app/data/battle-anims"; import { MoveCategory } from "#enums/MoveCategory"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; @@ -54,21 +54,21 @@ import { Challenges } from "#enums/challenges"; const namespace = "mysteryEncounters/clowningAround"; const RANDOM_ABILITY_POOL = [ - Abilities.STURDY, - Abilities.PICKUP, - Abilities.INTIMIDATE, - Abilities.GUTS, - Abilities.DROUGHT, - Abilities.DRIZZLE, - Abilities.SNOW_WARNING, - Abilities.SAND_STREAM, - Abilities.ELECTRIC_SURGE, - Abilities.PSYCHIC_SURGE, - Abilities.GRASSY_SURGE, - Abilities.MISTY_SURGE, - Abilities.MAGICIAN, - Abilities.SHEER_FORCE, - Abilities.PRANKSTER, + AbilityId.STURDY, + AbilityId.PICKUP, + AbilityId.INTIMIDATE, + AbilityId.GUTS, + AbilityId.DROUGHT, + AbilityId.DRIZZLE, + AbilityId.SNOW_WARNING, + AbilityId.SAND_STREAM, + AbilityId.ELECTRIC_SURGE, + AbilityId.PSYCHIC_SURGE, + AbilityId.GRASSY_SURGE, + AbilityId.MISTY_SURGE, + AbilityId.MAGICIAN, + AbilityId.SHEER_FORCE, + AbilityId.PRANKSTER, ]; /** @@ -86,7 +86,7 @@ export const ClowningAroundEncounter: MysteryEncounter = MysteryEncounterBuilder .withAutoHideIntroVisuals(false) .withIntroSpriteConfigs([ { - spriteKey: Species.MR_MIME.toString(), + spriteKey: SpeciesId.MR_MIME.toString(), fileRoot: "pokemon", hasShadow: true, repeat: true, @@ -96,7 +96,7 @@ export const ClowningAroundEncounter: MysteryEncounter = MysteryEncounterBuilder yShadow: -3, }, { - spriteKey: Species.BLACEPHALON.toString(), + spriteKey: SpeciesId.BLACEPHALON.toString(), fileRoot: "pokemon/exp", hasShadow: true, repeat: true, @@ -154,28 +154,28 @@ export const ClowningAroundEncounter: MysteryEncounter = MysteryEncounterBuilder pokemonConfigs: [ // Overrides first 2 pokemon to be Mr. Mime and Blacephalon { - species: getPokemonSpecies(Species.MR_MIME), + species: getPokemonSpecies(SpeciesId.MR_MIME), isBoss: true, - moveSet: [Moves.TEETER_DANCE, Moves.ALLY_SWITCH, Moves.DAZZLING_GLEAM, Moves.PSYCHIC], + moveSet: [MoveId.TEETER_DANCE, MoveId.ALLY_SWITCH, MoveId.DAZZLING_GLEAM, MoveId.PSYCHIC], }, { // Blacephalon has the random ability from pool, and 2 entirely random types to fit with the theme of the encounter - species: getPokemonSpecies(Species.BLACEPHALON), + species: getPokemonSpecies(SpeciesId.BLACEPHALON), customPokemonData: new CustomPokemonData({ ability: ability, types: [firstType, secondType], }), isBoss: true, - moveSet: [Moves.TRICK, Moves.HYPNOSIS, Moves.SHADOW_BALL, Moves.MIND_BLOWN], + moveSet: [MoveId.TRICK, MoveId.HYPNOSIS, MoveId.SHADOW_BALL, MoveId.MIND_BLOWN], }, ], doubleBattle: true, }); // Load animations/sfx for start of fight moves - loadCustomMovesForEncounter([Moves.ROLE_PLAY, Moves.TAUNT]); + loadCustomMovesForEncounter([MoveId.ROLE_PLAY, MoveId.TAUNT]); - encounter.setDialogueToken("blacephalonName", getPokemonSpecies(Species.BLACEPHALON).getName()); + encounter.setDialogueToken("blacephalonName", getPokemonSpecies(SpeciesId.BLACEPHALON).getName()); return true; }) @@ -208,19 +208,19 @@ export const ClowningAroundEncounter: MysteryEncounter = MysteryEncounterBuilder // Mr. Mime copies the Blacephalon's random ability sourceBattlerIndex: BattlerIndex.ENEMY, targets: [BattlerIndex.ENEMY_2], - move: new PokemonMove(Moves.ROLE_PLAY), + move: new PokemonMove(MoveId.ROLE_PLAY), ignorePp: true, }, { sourceBattlerIndex: BattlerIndex.ENEMY_2, targets: [BattlerIndex.PLAYER], - move: new PokemonMove(Moves.TAUNT), + move: new PokemonMove(MoveId.TAUNT), ignorePp: true, }, { sourceBattlerIndex: BattlerIndex.ENEMY_2, targets: [BattlerIndex.PLAYER_2], - move: new PokemonMove(Moves.TAUNT), + move: new PokemonMove(MoveId.TAUNT), ignorePp: true, }, ); diff --git a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts index bdd4bfaacaa..c7f9a99569d 100644 --- a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts +++ b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts @@ -31,14 +31,14 @@ import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import PokemonData from "#app/system/pokemon-data"; import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Biome } from "#enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { EncounterAnim } from "#enums/encounter-anims"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { PokeballType } from "#enums/pokeball"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import i18next from "i18next"; @@ -47,46 +47,46 @@ const namespace = "mysteryEncounters/dancingLessons"; // Fire form const BAILE_STYLE_BIOMES = [ - Biome.VOLCANO, - Biome.BEACH, - Biome.ISLAND, - Biome.WASTELAND, - Biome.MOUNTAIN, - Biome.BADLANDS, - Biome.DESERT, + BiomeId.VOLCANO, + BiomeId.BEACH, + BiomeId.ISLAND, + BiomeId.WASTELAND, + BiomeId.MOUNTAIN, + BiomeId.BADLANDS, + BiomeId.DESERT, ]; // Electric form const POM_POM_STYLE_BIOMES = [ - Biome.CONSTRUCTION_SITE, - Biome.POWER_PLANT, - Biome.FACTORY, - Biome.LABORATORY, - Biome.SLUM, - Biome.METROPOLIS, - Biome.DOJO, + BiomeId.CONSTRUCTION_SITE, + BiomeId.POWER_PLANT, + BiomeId.FACTORY, + BiomeId.LABORATORY, + BiomeId.SLUM, + BiomeId.METROPOLIS, + BiomeId.DOJO, ]; // Psychic form const PAU_STYLE_BIOMES = [ - Biome.JUNGLE, - Biome.FAIRY_CAVE, - Biome.MEADOW, - Biome.PLAINS, - Biome.GRASS, - Biome.TALL_GRASS, - Biome.FOREST, + BiomeId.JUNGLE, + BiomeId.FAIRY_CAVE, + BiomeId.MEADOW, + BiomeId.PLAINS, + BiomeId.GRASS, + BiomeId.TALL_GRASS, + BiomeId.FOREST, ]; // Ghost form const SENSU_STYLE_BIOMES = [ - Biome.RUINS, - Biome.SWAMP, - Biome.CAVE, - Biome.ABYSS, - Biome.GRAVEYARD, - Biome.LAKE, - Biome.TEMPLE, + BiomeId.RUINS, + BiomeId.SWAMP, + BiomeId.CAVE, + BiomeId.ABYSS, + BiomeId.GRAVEYARD, + BiomeId.LAKE, + BiomeId.TEMPLE, ]; /** @@ -127,14 +127,14 @@ export const DancingLessonsEncounter: MysteryEncounter = MysteryEncounterBuilder .withOnInit(() => { const encounter = globalScene.currentBattle.mysteryEncounter!; - const species = getPokemonSpecies(Species.ORICORIO); + const species = getPokemonSpecies(SpeciesId.ORICORIO); const level = getEncounterPokemonLevelForWave(STANDARD_ENCOUNTER_BOOSTED_LEVEL_MODIFIER); const enemyPokemon = new EnemyPokemon(species, level, TrainerSlot.NONE, false); - if (!enemyPokemon.moveset.some(m => m && m.getMove().id === Moves.REVELATION_DANCE)) { + if (!enemyPokemon.moveset.some(m => m && m.getMove().id === MoveId.REVELATION_DANCE)) { if (enemyPokemon.moveset.length < 4) { - enemyPokemon.moveset.push(new PokemonMove(Moves.REVELATION_DANCE)); + enemyPokemon.moveset.push(new PokemonMove(MoveId.REVELATION_DANCE)); } else { - enemyPokemon.moveset[0] = new PokemonMove(Moves.REVELATION_DANCE); + enemyPokemon.moveset[0] = new PokemonMove(MoveId.REVELATION_DANCE); } } @@ -193,7 +193,7 @@ export const DancingLessonsEncounter: MysteryEncounter = MysteryEncounterBuilder oricorioData, }; - encounter.setDialogueToken("oricorioName", getPokemonSpecies(Species.ORICORIO).getName()); + encounter.setDialogueToken("oricorioName", getPokemonSpecies(SpeciesId.ORICORIO).getName()); return true; }) @@ -215,7 +215,7 @@ export const DancingLessonsEncounter: MysteryEncounter = MysteryEncounterBuilder encounter.startOfBattleEffects.push({ sourceBattlerIndex: BattlerIndex.ENEMY, targets: [BattlerIndex.PLAYER], - move: new PokemonMove(Moves.REVELATION_DANCE), + move: new PokemonMove(MoveId.REVELATION_DANCE), ignorePp: true, }); @@ -246,7 +246,7 @@ export const DancingLessonsEncounter: MysteryEncounter = MysteryEncounterBuilder const onPokemonSelected = (pokemon: PlayerPokemon) => { encounter.setDialogueToken("selectedPokemon", pokemon.getNameToRender()); globalScene.unshiftPhase( - new LearnMovePhase(globalScene.getPlayerParty().indexOf(pokemon), Moves.REVELATION_DANCE), + new LearnMovePhase(globalScene.getPlayerParty().indexOf(pokemon), MoveId.REVELATION_DANCE), ); // Play animation again to "learn" the dance diff --git a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts index e746b13c6a5..c54cb232087 100644 --- a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts +++ b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts @@ -1,7 +1,7 @@ import type { PokemonType } from "#enums/pokemon-type"; import { isNullOrUndefined, randSeedInt } from "#app/utils/common"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { globalScene } from "#app/global-scene"; import { modifierTypes } from "#app/modifier/modifier-type"; import { getPokemonSpecies } from "#app/data/pokemon-species"; @@ -27,68 +27,68 @@ const namespace = "mysteryEncounters/darkDeal"; /** Exclude Ultra Beasts (inludes Cosmog/Solgaleo/Lunala/Necrozma), Paradox (includes Miraidon/Koraidon), Eternatus, and Mythicals */ const excludedBosses = [ - Species.NECROZMA, - Species.COSMOG, - Species.COSMOEM, - Species.SOLGALEO, - Species.LUNALA, - Species.ETERNATUS, - Species.NIHILEGO, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.XURKITREE, - Species.CELESTEELA, - Species.KARTANA, - Species.GUZZLORD, - Species.POIPOLE, - Species.NAGANADEL, - Species.STAKATAKA, - Species.BLACEPHALON, - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.BRUTE_BONNET, - Species.FLUTTER_MANE, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.ROARING_MOON, - Species.KORAIDON, - Species.WALKING_WAKE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.IRON_TREADS, - Species.IRON_BUNDLE, - Species.IRON_HANDS, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.IRON_THORNS, - Species.IRON_VALIANT, - Species.MIRAIDON, - Species.IRON_LEAVES, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.MEW, - Species.CELEBI, - Species.DEOXYS, - Species.JIRACHI, - Species.DARKRAI, - Species.PHIONE, - Species.MANAPHY, - Species.ARCEUS, - Species.SHAYMIN, - Species.VICTINI, - Species.MELOETTA, - Species.KELDEO, - Species.GENESECT, - Species.DIANCIE, - Species.HOOPA, - Species.VOLCANION, - Species.MAGEARNA, - Species.MARSHADOW, - Species.ZERAORA, - Species.ZARUDE, - Species.MELTAN, - Species.MELMETAL, - Species.PECHARUNT, + SpeciesId.NECROZMA, + SpeciesId.COSMOG, + SpeciesId.COSMOEM, + SpeciesId.SOLGALEO, + SpeciesId.LUNALA, + SpeciesId.ETERNATUS, + SpeciesId.NIHILEGO, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.XURKITREE, + SpeciesId.CELESTEELA, + SpeciesId.KARTANA, + SpeciesId.GUZZLORD, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.STAKATAKA, + SpeciesId.BLACEPHALON, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.BRUTE_BONNET, + SpeciesId.FLUTTER_MANE, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.ROARING_MOON, + SpeciesId.KORAIDON, + SpeciesId.WALKING_WAKE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_THORNS, + SpeciesId.IRON_VALIANT, + SpeciesId.MIRAIDON, + SpeciesId.IRON_LEAVES, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, + SpeciesId.MEW, + SpeciesId.CELEBI, + SpeciesId.DEOXYS, + SpeciesId.JIRACHI, + SpeciesId.DARKRAI, + SpeciesId.PHIONE, + SpeciesId.MANAPHY, + SpeciesId.ARCEUS, + SpeciesId.SHAYMIN, + SpeciesId.VICTINI, + SpeciesId.MELOETTA, + SpeciesId.KELDEO, + SpeciesId.GENESECT, + SpeciesId.DIANCIE, + SpeciesId.HOOPA, + SpeciesId.VOLCANION, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.ZERAORA, + SpeciesId.ZARUDE, + SpeciesId.MELTAN, + SpeciesId.MELMETAL, + SpeciesId.PECHARUNT, ]; /** diff --git a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts index 7040bb47d19..8d3d30bcd66 100644 --- a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts +++ b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts @@ -36,7 +36,7 @@ import { randSeedItem } from "#app/utils/common"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { timedEventManager } from "#app/global-event-manager"; /** the i18n namespace for this encounter */ @@ -95,7 +95,7 @@ export const DelibirdyEncounter: MysteryEncounter = MysteryEncounterBuilder.with { spriteKey: "", fileRoot: "", - species: Species.DELIBIRD, + species: SpeciesId.DELIBIRD, hasShadow: true, repeat: true, startFrame: 38, @@ -104,7 +104,7 @@ export const DelibirdyEncounter: MysteryEncounter = MysteryEncounterBuilder.with { spriteKey: "", fileRoot: "", - species: Species.DELIBIRD, + species: SpeciesId.DELIBIRD, hasShadow: true, repeat: true, scale: 1.06, @@ -112,7 +112,7 @@ export const DelibirdyEncounter: MysteryEncounter = MysteryEncounterBuilder.with { spriteKey: "", fileRoot: "", - species: Species.DELIBIRD, + species: SpeciesId.DELIBIRD, hasShadow: true, repeat: true, startFrame: 65, @@ -137,7 +137,7 @@ export const DelibirdyEncounter: MysteryEncounter = MysteryEncounterBuilder.with ]) .withOnInit(() => { const encounter = globalScene.currentBattle.mysteryEncounter!; - encounter.setDialogueToken("delibirdName", getPokemonSpecies(Species.DELIBIRD).getName()); + encounter.setDialogueToken("delibirdName", getPokemonSpecies(SpeciesId.DELIBIRD).getName()); globalScene.loadBgm("mystery_encounter_delibirdy", "mystery_encounter_delibirdy.mp3"); return true; diff --git a/src/data/mystery-encounters/encounters/department-store-sale-encounter.ts b/src/data/mystery-encounters/encounters/department-store-sale-encounter.ts index 39341bef2d5..2b6ac9b7cf3 100644 --- a/src/data/mystery-encounters/encounters/department-store-sale-encounter.ts +++ b/src/data/mystery-encounters/encounters/department-store-sale-encounter.ts @@ -6,7 +6,7 @@ import type { ModifierTypeFunc } from "#app/modifier/modifier-type"; import { modifierTypes } from "#app/modifier/modifier-type"; import { randSeedInt } from "#app/utils/common"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; @@ -35,7 +35,7 @@ export const DepartmentStoreSaleEncounter: MysteryEncounter = MysteryEncounterBu { spriteKey: "", fileRoot: "", - species: Species.FURFROU, + species: SpeciesId.FURFROU, hasShadow: true, repeat: true, x: 30, diff --git a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts index 0364b98abe2..872e6300a29 100644 --- a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts +++ b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts @@ -20,14 +20,14 @@ import { CombinationPokemonRequirement, TypeRequirement, } from "#app/data/mystery-encounters/mystery-encounter-requirements"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { Gender } from "#app/data/gender"; import { PokemonType } from "#enums/pokemon-type"; import { BattlerIndex } from "#app/battle"; import type Pokemon from "#app/field/pokemon"; import { PokemonMove } from "#app/field/pokemon"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { EncounterBattleAnim } from "#app/data/battle-anims"; import { WeatherType } from "#enums/weather-type"; import { isNullOrUndefined, randSeedInt } from "#app/utils/common"; @@ -42,7 +42,7 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { EncounterAnim } from "#enums/encounter-anims"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { Stat } from "#enums/stat"; @@ -83,7 +83,7 @@ export const FieryFalloutEncounter: MysteryEncounter = MysteryEncounterBuilder.w const encounter = globalScene.currentBattle.mysteryEncounter!; // Calculate boss mons - const volcaronaSpecies = getPokemonSpecies(Species.VOLCARONA); + const volcaronaSpecies = getPokemonSpecies(SpeciesId.VOLCARONA); const config: EnemyPartyConfig = { pokemonConfigs: [ { @@ -119,7 +119,7 @@ export const FieryFalloutEncounter: MysteryEncounter = MysteryEncounterBuilder.w { spriteKey: "", fileRoot: "", - species: Species.VOLCARONA, + species: SpeciesId.VOLCARONA, repeat: true, hidden: true, hasShadow: true, @@ -129,7 +129,7 @@ export const FieryFalloutEncounter: MysteryEncounter = MysteryEncounterBuilder.w { spriteKey: "", fileRoot: "", - species: Species.VOLCARONA, + species: SpeciesId.VOLCARONA, repeat: true, hidden: true, hasShadow: true, @@ -138,12 +138,12 @@ export const FieryFalloutEncounter: MysteryEncounter = MysteryEncounterBuilder.w ]; // Load animations/sfx for Volcarona moves - loadCustomMovesForEncounter([Moves.FIRE_SPIN, Moves.QUIVER_DANCE]); + loadCustomMovesForEncounter([MoveId.FIRE_SPIN, MoveId.QUIVER_DANCE]); const pokemon = globalScene.getEnemyPokemon(); globalScene.arena.trySetWeather(WeatherType.SUNNY, pokemon); - encounter.setDialogueToken("volcaronaName", getPokemonSpecies(Species.VOLCARONA).getName()); + encounter.setDialogueToken("volcaronaName", getPokemonSpecies(SpeciesId.VOLCARONA).getName()); return true; }) @@ -193,13 +193,13 @@ export const FieryFalloutEncounter: MysteryEncounter = MysteryEncounterBuilder.w { sourceBattlerIndex: BattlerIndex.ENEMY, targets: [BattlerIndex.PLAYER], - move: new PokemonMove(Moves.FIRE_SPIN), + move: new PokemonMove(MoveId.FIRE_SPIN), ignorePp: true, }, { sourceBattlerIndex: BattlerIndex.ENEMY_2, targets: [BattlerIndex.PLAYER_2], - move: new PokemonMove(Moves.FIRE_SPIN), + move: new PokemonMove(MoveId.FIRE_SPIN), ignorePp: true, }, ); @@ -239,11 +239,11 @@ export const FieryFalloutEncounter: MysteryEncounter = MysteryEncounterBuilder.w if (chosenPokemon.trySetStatus(StatusEffect.BURN)) { // Burn applied encounter.setDialogueToken("burnedPokemon", chosenPokemon.getNameToRender()); - encounter.setDialogueToken("abilityName", new Ability(Abilities.HEATPROOF, 3).name); + encounter.setDialogueToken("abilityName", new Ability(AbilityId.HEATPROOF, 3).name); queueEncounterMessage(`${namespace}:option.2.target_burned`); // Also permanently change the burned Pokemon's ability to Heatproof - applyAbilityOverrideToPokemon(chosenPokemon, Abilities.HEATPROOF); + applyAbilityOverrideToPokemon(chosenPokemon, AbilityId.HEATPROOF); } } @@ -283,7 +283,7 @@ export const FieryFalloutEncounter: MysteryEncounter = MysteryEncounterBuilder.w const primary = encounter.options[2].primaryPokemon!; - setEncounterExp([primary.id], getPokemonSpecies(Species.VOLCARONA).baseExp * 2); + setEncounterExp([primary.id], getPokemonSpecies(SpeciesId.VOLCARONA).baseExp * 2); leaveEncounterWithoutBattle(); }) .build(), diff --git a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts index 2d0828b8c0c..7694f62eac4 100644 --- a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts +++ b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts @@ -19,7 +19,7 @@ import { MoneyRequirement } from "#app/data/mystery-encounters/mystery-encounter import { queueEncounterMessage, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import i18next from "i18next"; import { getPokemonNameWithAffix } from "#app/messages"; import { PlayerGender } from "#enums/player-gender"; @@ -91,7 +91,7 @@ export const FunAndGamesEncounter: MysteryEncounter = MysteryEncounterBuilder.wi .withOnInit(() => { const encounter = globalScene.currentBattle.mysteryEncounter!; globalScene.loadBgm("mystery_encounter_fun_and_games", "mystery_encounter_fun_and_games.mp3"); - encounter.setDialogueToken("wobbuffetName", getPokemonSpecies(Species.WOBBUFFET).getName()); + encounter.setDialogueToken("wobbuffetName", getPokemonSpecies(SpeciesId.WOBBUFFET).getName()); return true; }) .withOnVisualsStart(() => { @@ -214,7 +214,7 @@ async function summonPlayerPokemon() { }); // Also loads Wobbuffet data (cannot be shiny) - const enemySpecies = getPokemonSpecies(Species.WOBBUFFET); + const enemySpecies = getPokemonSpecies(SpeciesId.WOBBUFFET); globalScene.currentBattle.enemyParty = []; const wobbuffet = globalScene.addEnemyPokemon( enemySpecies, diff --git a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts index bb41bc7883c..6ecce46ae24 100644 --- a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts +++ b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts @@ -17,7 +17,7 @@ import { globalScene } from "#app/global-scene"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import type PokemonSpecies from "#app/data/pokemon-species"; import { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species"; import { getTypeRgb } from "#app/data/type"; @@ -64,39 +64,39 @@ const WONDER_TRADE_SHINY_CHANCE = 512; const MAX_WONDER_TRADE_SHINY_CHANCE = 4096; const LEGENDARY_TRADE_POOLS = { - 1: [Species.RATTATA, Species.PIDGEY, Species.WEEDLE], - 2: [Species.SENTRET, Species.HOOTHOOT, Species.LEDYBA], - 3: [Species.POOCHYENA, Species.ZIGZAGOON, Species.TAILLOW], - 4: [Species.BIDOOF, Species.STARLY, Species.KRICKETOT], - 5: [Species.PATRAT, Species.PURRLOIN, Species.PIDOVE], - 6: [Species.BUNNELBY, Species.LITLEO, Species.SCATTERBUG], - 7: [Species.PIKIPEK, Species.YUNGOOS, Species.ROCKRUFF], - 8: [Species.SKWOVET, Species.WOOLOO, Species.ROOKIDEE], - 9: [Species.LECHONK, Species.FIDOUGH, Species.TAROUNTULA], + 1: [SpeciesId.RATTATA, SpeciesId.PIDGEY, SpeciesId.WEEDLE], + 2: [SpeciesId.SENTRET, SpeciesId.HOOTHOOT, SpeciesId.LEDYBA], + 3: [SpeciesId.POOCHYENA, SpeciesId.ZIGZAGOON, SpeciesId.TAILLOW], + 4: [SpeciesId.BIDOOF, SpeciesId.STARLY, SpeciesId.KRICKETOT], + 5: [SpeciesId.PATRAT, SpeciesId.PURRLOIN, SpeciesId.PIDOVE], + 6: [SpeciesId.BUNNELBY, SpeciesId.LITLEO, SpeciesId.SCATTERBUG], + 7: [SpeciesId.PIKIPEK, SpeciesId.YUNGOOS, SpeciesId.ROCKRUFF], + 8: [SpeciesId.SKWOVET, SpeciesId.WOOLOO, SpeciesId.ROOKIDEE], + 9: [SpeciesId.LECHONK, SpeciesId.FIDOUGH, SpeciesId.TAROUNTULA], }; /** Exclude Paradox mons as they aren't considered legendary/mythical */ const EXCLUDED_TRADE_SPECIES = [ - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.BRUTE_BONNET, - Species.FLUTTER_MANE, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.ROARING_MOON, - Species.WALKING_WAKE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.IRON_TREADS, - Species.IRON_BUNDLE, - Species.IRON_HANDS, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.IRON_THORNS, - Species.IRON_VALIANT, - Species.IRON_LEAVES, - Species.IRON_BOULDER, - Species.IRON_CROWN, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.BRUTE_BONNET, + SpeciesId.FLUTTER_MANE, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.ROARING_MOON, + SpeciesId.WALKING_WAKE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_THORNS, + SpeciesId.IRON_VALIANT, + SpeciesId.IRON_LEAVES, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, ]; /** diff --git a/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts b/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts index 6d8a1fc8c6b..009639291de 100644 --- a/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts +++ b/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts @@ -1,6 +1,6 @@ import { getPokemonSpecies } from "#app/data/pokemon-species"; -import { Moves } from "#app/enums/moves"; -import { Species } from "#app/enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { globalScene } from "#app/global-scene"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; @@ -13,8 +13,8 @@ import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { PokemonMove } from "#app/field/pokemon"; -const OPTION_1_REQUIRED_MOVE = Moves.SURF; -const OPTION_2_REQUIRED_MOVE = Moves.FLY; +const OPTION_1_REQUIRED_MOVE = MoveId.SURF; +const OPTION_2_REQUIRED_MOVE = MoveId.FLY; /** * Damage percentage taken when wandering aimlessly. * Can be a number between `0` - `100`. @@ -129,7 +129,7 @@ export const LostAtSeaEncounter: MysteryEncounter = MysteryEncounterBuilder.with * Generic handler for using a guiding pokemon to guide you back. */ function handlePokemonGuidingYouPhase() { - const laprasSpecies = getPokemonSpecies(Species.LAPRAS); + const laprasSpecies = getPokemonSpecies(SpeciesId.LAPRAS); const { mysteryEncounter } = globalScene.currentBattle; if (mysteryEncounter?.selectedOption?.primaryPokemon?.id) { diff --git a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts index e6c11378163..9f699f7d045 100644 --- a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts @@ -19,11 +19,11 @@ import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { GameOverPhase } from "#app/phases/game-over-phase"; import { randSeedInt } from "#app/utils/common"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; /** i18n namespace for encounter */ const namespace = "mysteryEncounters/mysteriousChest"; @@ -86,17 +86,17 @@ export const MysteriousChestEncounter: MysteryEncounter = MysteryEncounterBuilde disableSwitch: true, pokemonConfigs: [ { - species: getPokemonSpecies(Species.GIMMIGHOUL), + species: getPokemonSpecies(SpeciesId.GIMMIGHOUL), formIndex: 0, isBoss: true, - moveSet: [Moves.NASTY_PLOT, Moves.SHADOW_BALL, Moves.POWER_GEM, Moves.THIEF], + moveSet: [MoveId.NASTY_PLOT, MoveId.SHADOW_BALL, MoveId.POWER_GEM, MoveId.THIEF], }, ], }; encounter.enemyPartyConfigs = [config]; - encounter.setDialogueToken("gimmighoulName", getPokemonSpecies(Species.GIMMIGHOUL).getName()); + encounter.setDialogueToken("gimmighoulName", getPokemonSpecies(SpeciesId.GIMMIGHOUL).getName()); encounter.setDialogueToken("trapPercent", TRAP_PERCENT.toString()); encounter.setDialogueToken("commonPercent", COMMON_REWARDS_PERCENT.toString()); encounter.setDialogueToken("ultraPercent", ULTRA_REWARDS_PERCENT.toString()); diff --git a/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts b/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts index daf4d860cdf..1afc67e1d12 100644 --- a/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts +++ b/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts @@ -10,7 +10,7 @@ import type Pokemon from "#app/field/pokemon"; import { modifierTypes } from "#app/modifier/modifier-type"; import { randSeedInt } from "#app/utils/common"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { globalScene } from "#app/global-scene"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; @@ -49,7 +49,7 @@ export const ShadyVitaminDealerEncounter: MysteryEncounter = MysteryEncounterBui .withPrimaryPokemonHealthRatioRequirement([0.51, 1]) // At least 1 Pokemon must have above half HP .withIntroSpriteConfigs([ { - spriteKey: Species.KROOKODILE.toString(), + spriteKey: SpeciesId.KROOKODILE.toString(), fileRoot: "pokemon", hasShadow: true, repeat: true, diff --git a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts index 2654f6b18d8..196d27c3f30 100644 --- a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts +++ b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts @@ -2,7 +2,7 @@ import { STEALING_MOVES } from "#app/data/mystery-encounters/requirements/requir import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; import { modifierTypes } from "#app/modifier/modifier-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { globalScene } from "#app/global-scene"; import { StatusEffect } from "#enums/status-effect"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; @@ -20,7 +20,7 @@ import { } from "../utils/encounter-phase-utils"; import { queueEncounterMessage } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { Nature } from "#enums/nature"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { BattlerIndex } from "#app/battle"; import { AiType, PokemonMove } from "#app/field/pokemon"; import { getPokemonSpecies } from "#app/data/pokemon-species"; @@ -50,7 +50,7 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = MysteryEncounterBuil .withFleeAllowed(false) .withIntroSpriteConfigs([ { - spriteKey: Species.SNORLAX.toString(), + spriteKey: SpeciesId.SNORLAX.toString(), fileRoot: "pokemon", hasShadow: true, tint: 0.25, @@ -69,14 +69,14 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = MysteryEncounterBuil console.log(encounter); // Calculate boss mon - const bossSpecies = getPokemonSpecies(Species.SNORLAX); + const bossSpecies = getPokemonSpecies(SpeciesId.SNORLAX); const pokemonConfig: EnemyPokemonConfig = { species: bossSpecies, isBoss: true, shiny: false, // Shiny lock because shiny is rolled only if the battle option is picked status: [StatusEffect.SLEEP, 6], // Extra turns on timer for Snorlax's start of fight moves nature: Nature.DOCILE, - moveSet: [Moves.BODY_SLAM, Moves.CRUNCH, Moves.SLEEP_TALK, Moves.REST], + moveSet: [MoveId.BODY_SLAM, MoveId.CRUNCH, MoveId.SLEEP_TALK, MoveId.REST], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.BERRY, [BerryType.SITRUS]) as PokemonHeldItemModifierType, @@ -106,9 +106,9 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = MysteryEncounterBuil encounter.enemyPartyConfigs = [config]; // Load animations/sfx for Snorlax fight start moves - loadCustomMovesForEncounter([Moves.SNORE]); + loadCustomMovesForEncounter([MoveId.SNORE]); - encounter.setDialogueToken("snorlaxName", getPokemonSpecies(Species.SNORLAX).getName()); + encounter.setDialogueToken("snorlaxName", getPokemonSpecies(SpeciesId.SNORLAX).getName()); return true; }) @@ -133,14 +133,12 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = MysteryEncounterBuil guaranteedModifierTypeFuncs: [modifierTypes.LEFTOVERS], fillRemaining: true, }); - encounter.startOfBattleEffects.push( - { - sourceBattlerIndex: BattlerIndex.ENEMY, - targets: [BattlerIndex.PLAYER], - move: new PokemonMove(Moves.SNORE), - ignorePp: true, - }, - ); + encounter.startOfBattleEffects.push({ + sourceBattlerIndex: BattlerIndex.ENEMY, + targets: [BattlerIndex.PLAYER], + move: new PokemonMove(MoveId.SNORE), + ignorePp: true, + }); await initBattleWithEnemyConfig(encounter.enemyPartyConfigs[0]); }, ) @@ -183,7 +181,7 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = MysteryEncounterBuil fillRemaining: false, }); // Snorlax exp to Pokemon that did the stealing - setEncounterExp(instance.primaryPokemon!.id, getPokemonSpecies(Species.SNORLAX).baseExp); + setEncounterExp(instance.primaryPokemon!.id, getPokemonSpecies(SpeciesId.SNORLAX).baseExp); leaveEncounterWithoutBattle(); }) .build(), diff --git a/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts b/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts index 28c7fe4644f..f6bf5575120 100644 --- a/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts +++ b/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts @@ -20,7 +20,7 @@ import { queueEncounterMessage, showEncounterText } from "#app/data/mystery-enco import PokemonData from "#app/system/pokemon-data"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; -import { Biome } from "#enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { getBiomeKey } from "#app/field/arena"; import { PokemonType } from "#enums/pokemon-type"; import { getPartyLuckValue, modifierTypes } from "#app/modifier/modifier-type"; @@ -39,7 +39,14 @@ import { const namespace = "mysteryEncounters/teleportingHijinks"; const MONEY_COST_MULTIPLIER = 1.75; -const BIOME_CANDIDATES = [Biome.SPACE, Biome.FAIRY_CAVE, Biome.LABORATORY, Biome.ISLAND, Biome.WASTELAND, Biome.DOJO]; +const BIOME_CANDIDATES = [ + BiomeId.SPACE, + BiomeId.FAIRY_CAVE, + BiomeId.LABORATORY, + BiomeId.ISLAND, + BiomeId.WASTELAND, + BiomeId.DOJO, +]; const MACHINE_INTERFACING_TYPES = [PokemonType.ELECTRIC, PokemonType.STEEL]; /** @@ -229,7 +236,7 @@ async function doBiomeTransitionDialogueAndBattleInit() { return config; } -async function animateBiomeChange(nextBiome: Biome) { +async function animateBiomeChange(nextBiome: BiomeId) { return new Promise(resolve => { globalScene.tweens.add({ targets: [globalScene.arenaEnemy, globalScene.lastEnemyTrainer], diff --git a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts index 74cda6fd205..5c3a4dd1a81 100644 --- a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts @@ -11,14 +11,14 @@ import { randSeedShuffle } from "#app/utils/common"; import type MysteryEncounter from "../mystery-encounter"; import { MysteryEncounterBuilder } from "../mystery-encounter"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import { Biome } from "#enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { TrainerType } from "#enums/trainer-type"; import i18next from "i18next"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { speciesStarterCosts } from "#app/data/balance/starters"; import { Nature } from "#enums/nature"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import type { PlayerPokemon } from "#app/field/pokemon"; import { getEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import type { IEggOptions } from "#app/data/egg"; @@ -42,75 +42,75 @@ const FINAL_STAGE_EVOLUTION_WAVE = 75; const FRIENDSHIP_ADDED = 20; class BreederSpeciesEvolution { - species: Species; + species: SpeciesId; evolution: number; - constructor(species: Species, evolution: number) { + constructor(species: SpeciesId, evolution: number) { this.species = species; this.evolution = evolution; } } -const POOL_1_POKEMON: (Species | BreederSpeciesEvolution)[][] = [ - [Species.MUNCHLAX, new BreederSpeciesEvolution(Species.SNORLAX, SECOND_STAGE_EVOLUTION_WAVE)], +const POOL_1_POKEMON: (SpeciesId | BreederSpeciesEvolution)[][] = [ + [SpeciesId.MUNCHLAX, new BreederSpeciesEvolution(SpeciesId.SNORLAX, SECOND_STAGE_EVOLUTION_WAVE)], [ - Species.HAPPINY, - new BreederSpeciesEvolution(Species.CHANSEY, FIRST_STAGE_EVOLUTION_WAVE), - new BreederSpeciesEvolution(Species.BLISSEY, FINAL_STAGE_EVOLUTION_WAVE), + SpeciesId.HAPPINY, + new BreederSpeciesEvolution(SpeciesId.CHANSEY, FIRST_STAGE_EVOLUTION_WAVE), + new BreederSpeciesEvolution(SpeciesId.BLISSEY, FINAL_STAGE_EVOLUTION_WAVE), ], [ - Species.MAGBY, - new BreederSpeciesEvolution(Species.MAGMAR, FIRST_STAGE_EVOLUTION_WAVE), - new BreederSpeciesEvolution(Species.MAGMORTAR, FINAL_STAGE_EVOLUTION_WAVE), + SpeciesId.MAGBY, + new BreederSpeciesEvolution(SpeciesId.MAGMAR, FIRST_STAGE_EVOLUTION_WAVE), + new BreederSpeciesEvolution(SpeciesId.MAGMORTAR, FINAL_STAGE_EVOLUTION_WAVE), ], [ - Species.ELEKID, - new BreederSpeciesEvolution(Species.ELECTABUZZ, FIRST_STAGE_EVOLUTION_WAVE), - new BreederSpeciesEvolution(Species.ELECTIVIRE, FINAL_STAGE_EVOLUTION_WAVE), + SpeciesId.ELEKID, + new BreederSpeciesEvolution(SpeciesId.ELECTABUZZ, FIRST_STAGE_EVOLUTION_WAVE), + new BreederSpeciesEvolution(SpeciesId.ELECTIVIRE, FINAL_STAGE_EVOLUTION_WAVE), ], - [Species.RIOLU, new BreederSpeciesEvolution(Species.LUCARIO, SECOND_STAGE_EVOLUTION_WAVE)], + [SpeciesId.RIOLU, new BreederSpeciesEvolution(SpeciesId.LUCARIO, SECOND_STAGE_EVOLUTION_WAVE)], [ - Species.BUDEW, - new BreederSpeciesEvolution(Species.ROSELIA, FIRST_STAGE_EVOLUTION_WAVE), - new BreederSpeciesEvolution(Species.ROSERADE, FINAL_STAGE_EVOLUTION_WAVE), + SpeciesId.BUDEW, + new BreederSpeciesEvolution(SpeciesId.ROSELIA, FIRST_STAGE_EVOLUTION_WAVE), + new BreederSpeciesEvolution(SpeciesId.ROSERADE, FINAL_STAGE_EVOLUTION_WAVE), ], - [Species.TOXEL, new BreederSpeciesEvolution(Species.TOXTRICITY, SECOND_STAGE_EVOLUTION_WAVE)], + [SpeciesId.TOXEL, new BreederSpeciesEvolution(SpeciesId.TOXTRICITY, SECOND_STAGE_EVOLUTION_WAVE)], [ - Species.MIME_JR, - new BreederSpeciesEvolution(Species.GALAR_MR_MIME, FIRST_STAGE_EVOLUTION_WAVE), - new BreederSpeciesEvolution(Species.MR_RIME, FINAL_STAGE_EVOLUTION_WAVE), + SpeciesId.MIME_JR, + new BreederSpeciesEvolution(SpeciesId.GALAR_MR_MIME, FIRST_STAGE_EVOLUTION_WAVE), + new BreederSpeciesEvolution(SpeciesId.MR_RIME, FINAL_STAGE_EVOLUTION_WAVE), ], ]; -const POOL_2_POKEMON: (Species | BreederSpeciesEvolution)[][] = [ +const POOL_2_POKEMON: (SpeciesId | BreederSpeciesEvolution)[][] = [ [ - Species.PICHU, - new BreederSpeciesEvolution(Species.PIKACHU, FIRST_STAGE_EVOLUTION_WAVE), - new BreederSpeciesEvolution(Species.RAICHU, FINAL_STAGE_EVOLUTION_WAVE), + SpeciesId.PICHU, + new BreederSpeciesEvolution(SpeciesId.PIKACHU, FIRST_STAGE_EVOLUTION_WAVE), + new BreederSpeciesEvolution(SpeciesId.RAICHU, FINAL_STAGE_EVOLUTION_WAVE), ], [ - Species.PICHU, - new BreederSpeciesEvolution(Species.PIKACHU, FIRST_STAGE_EVOLUTION_WAVE), - new BreederSpeciesEvolution(Species.ALOLA_RAICHU, FINAL_STAGE_EVOLUTION_WAVE), + SpeciesId.PICHU, + new BreederSpeciesEvolution(SpeciesId.PIKACHU, FIRST_STAGE_EVOLUTION_WAVE), + new BreederSpeciesEvolution(SpeciesId.ALOLA_RAICHU, FINAL_STAGE_EVOLUTION_WAVE), ], - [Species.SMOOCHUM, new BreederSpeciesEvolution(Species.JYNX, SECOND_STAGE_EVOLUTION_WAVE)], - [Species.TYROGUE, new BreederSpeciesEvolution(Species.HITMONLEE, SECOND_STAGE_EVOLUTION_WAVE)], - [Species.TYROGUE, new BreederSpeciesEvolution(Species.HITMONCHAN, SECOND_STAGE_EVOLUTION_WAVE)], - [Species.TYROGUE, new BreederSpeciesEvolution(Species.HITMONTOP, SECOND_STAGE_EVOLUTION_WAVE)], + [SpeciesId.SMOOCHUM, new BreederSpeciesEvolution(SpeciesId.JYNX, SECOND_STAGE_EVOLUTION_WAVE)], + [SpeciesId.TYROGUE, new BreederSpeciesEvolution(SpeciesId.HITMONLEE, SECOND_STAGE_EVOLUTION_WAVE)], + [SpeciesId.TYROGUE, new BreederSpeciesEvolution(SpeciesId.HITMONCHAN, SECOND_STAGE_EVOLUTION_WAVE)], + [SpeciesId.TYROGUE, new BreederSpeciesEvolution(SpeciesId.HITMONTOP, SECOND_STAGE_EVOLUTION_WAVE)], [ - Species.IGGLYBUFF, - new BreederSpeciesEvolution(Species.JIGGLYPUFF, FIRST_STAGE_EVOLUTION_WAVE), - new BreederSpeciesEvolution(Species.WIGGLYTUFF, FINAL_STAGE_EVOLUTION_WAVE), + SpeciesId.IGGLYBUFF, + new BreederSpeciesEvolution(SpeciesId.JIGGLYPUFF, FIRST_STAGE_EVOLUTION_WAVE), + new BreederSpeciesEvolution(SpeciesId.WIGGLYTUFF, FINAL_STAGE_EVOLUTION_WAVE), ], [ - Species.AZURILL, - new BreederSpeciesEvolution(Species.MARILL, FIRST_STAGE_EVOLUTION_WAVE), - new BreederSpeciesEvolution(Species.AZUMARILL, FINAL_STAGE_EVOLUTION_WAVE), + SpeciesId.AZURILL, + new BreederSpeciesEvolution(SpeciesId.MARILL, FIRST_STAGE_EVOLUTION_WAVE), + new BreederSpeciesEvolution(SpeciesId.AZUMARILL, FINAL_STAGE_EVOLUTION_WAVE), ], - [Species.WYNAUT, new BreederSpeciesEvolution(Species.WOBBUFFET, SECOND_STAGE_EVOLUTION_WAVE)], - [Species.CHINGLING, new BreederSpeciesEvolution(Species.CHIMECHO, SECOND_STAGE_EVOLUTION_WAVE)], - [Species.BONSLY, new BreederSpeciesEvolution(Species.SUDOWOODO, SECOND_STAGE_EVOLUTION_WAVE)], - [Species.MANTYKE, new BreederSpeciesEvolution(Species.MANTINE, SECOND_STAGE_EVOLUTION_WAVE)], + [SpeciesId.WYNAUT, new BreederSpeciesEvolution(SpeciesId.WOBBUFFET, SECOND_STAGE_EVOLUTION_WAVE)], + [SpeciesId.CHINGLING, new BreederSpeciesEvolution(SpeciesId.CHIMECHO, SECOND_STAGE_EVOLUTION_WAVE)], + [SpeciesId.BONSLY, new BreederSpeciesEvolution(SpeciesId.SUDOWOODO, SECOND_STAGE_EVOLUTION_WAVE)], + [SpeciesId.MANTYKE, new BreederSpeciesEvolution(SpeciesId.MANTINE, SECOND_STAGE_EVOLUTION_WAVE)], ]; /** @@ -144,10 +144,10 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = MysteryEncount const cleffaSpecies = waveIndex < FIRST_STAGE_EVOLUTION_WAVE - ? Species.CLEFFA + ? SpeciesId.CLEFFA : waveIndex < FINAL_STAGE_EVOLUTION_WAVE - ? Species.CLEFAIRY - : Species.CLEFABLE; + ? SpeciesId.CLEFAIRY + : SpeciesId.CLEFABLE; encounter.spriteConfigs = [ { spriteKey: cleffaSpecies.toString(), @@ -466,10 +466,10 @@ function getPartyConfig(): EnemyPartyConfig { // First mon is *always* this special cleffa const cleffaSpecies = waveIndex < FIRST_STAGE_EVOLUTION_WAVE - ? Species.CLEFFA + ? SpeciesId.CLEFFA : waveIndex < FINAL_STAGE_EVOLUTION_WAVE - ? Species.CLEFAIRY - : Species.CLEFABLE; + ? SpeciesId.CLEFAIRY + : SpeciesId.CLEFABLE; const baseConfig: EnemyPartyConfig = { trainerType: TrainerType.EXPERT_POKEMON_BREEDER, pokemonConfigs: [ @@ -482,14 +482,14 @@ function getPartyConfig(): EnemyPartyConfig { abilityIndex: 1, // Magic Guard shiny: false, nature: Nature.ADAMANT, - moveSet: [Moves.FIRE_PUNCH, Moves.ICE_PUNCH, Moves.THUNDER_PUNCH, Moves.METEOR_MASH], + moveSet: [MoveId.FIRE_PUNCH, MoveId.ICE_PUNCH, MoveId.THUNDER_PUNCH, MoveId.METEOR_MASH], ivs: [31, 31, 31, 31, 31, 31], tera: PokemonType.FAIRY, }, ], }; - if (globalScene.arena.biomeType === Biome.SPACE) { + if (globalScene.arena.biomeType === BiomeId.SPACE) { // All 3 members always Cleffa line, but different configs baseConfig.pokemonConfigs!.push( { @@ -502,7 +502,7 @@ function getPartyConfig(): EnemyPartyConfig { shiny: true, variant: 1, nature: Nature.MODEST, - moveSet: [Moves.MOONBLAST, Moves.MYSTICAL_FIRE, Moves.ICE_BEAM, Moves.THUNDERBOLT], + moveSet: [MoveId.MOONBLAST, MoveId.MYSTICAL_FIRE, MoveId.ICE_BEAM, MoveId.THUNDERBOLT], ivs: [31, 31, 31, 31, 31, 31], }, { @@ -515,7 +515,7 @@ function getPartyConfig(): EnemyPartyConfig { shiny: true, variant: 2, nature: Nature.BOLD, - moveSet: [Moves.TRI_ATTACK, Moves.STORED_POWER, Moves.TAKE_HEART, Moves.MOONLIGHT], + moveSet: [MoveId.TRI_ATTACK, MoveId.STORED_POWER, MoveId.TAKE_HEART, MoveId.MOONLIGHT], ivs: [31, 31, 31, 31, 31, 31], }, ); @@ -542,7 +542,7 @@ function getPartyConfig(): EnemyPartyConfig { return baseConfig; } -function getSpeciesFromPool(speciesPool: (Species | BreederSpeciesEvolution)[][], waveIndex: number): Species { +function getSpeciesFromPool(speciesPool: (SpeciesId | BreederSpeciesEvolution)[][], waveIndex: number): SpeciesId { const poolCopy = randSeedShuffle(speciesPool.slice(0)); const speciesEvolutions = poolCopy.pop()!.slice(0); let speciesObject = speciesEvolutions.pop()!; diff --git a/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts b/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts index 50b9c2da78c..0ad209ae4c6 100644 --- a/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts @@ -17,7 +17,7 @@ import { import type PokemonSpecies from "#app/data/pokemon-species"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { speciesStarterCosts } from "#app/data/balance/starters"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { PokeballType } from "#enums/pokeball"; import type { EnemyPokemon } from "#app/field/pokemon"; import { PlayerPokemon } from "#app/field/pokemon"; @@ -27,7 +27,7 @@ import PokemonData from "#app/system/pokemon-data"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { NON_LEGEND_PARADOX_POKEMON, NON_LEGEND_ULTRA_BEASTS } from "#app/data/balance/special-species-groups"; import { timedEventManager } from "#app/global-event-manager"; @@ -81,7 +81,7 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter = MysteryEncounterBui let tries = 0; // Reroll any species that don't have HAs - while ((isNullOrUndefined(species.abilityHidden) || species.abilityHidden === Abilities.NONE) && tries < 5) { + while ((isNullOrUndefined(species.abilityHidden) || species.abilityHidden === AbilityId.NONE) && tries < 5) { species = getSalesmanSpeciesOffer(); tries++; } @@ -110,15 +110,15 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter = MysteryEncounterBui */ if ( r === 0 || - ((isNullOrUndefined(species.abilityHidden) || species.abilityHidden === Abilities.NONE) && + ((isNullOrUndefined(species.abilityHidden) || species.abilityHidden === AbilityId.NONE) && validEventEncounters.length === 0) ) { // If you roll 1%, give shiny Magikarp with random variant - species = getPokemonSpecies(Species.MAGIKARP); + species = getPokemonSpecies(SpeciesId.MAGIKARP); pokemon = new PlayerPokemon(species, 5, 2, undefined, undefined, true); } else if ( validEventEncounters.length > 0 && - (r <= EVENT_THRESHOLD || isNullOrUndefined(species.abilityHidden) || species.abilityHidden === Abilities.NONE) + (r <= EVENT_THRESHOLD || isNullOrUndefined(species.abilityHidden) || species.abilityHidden === AbilityId.NONE) ) { tries = 0; do { @@ -128,7 +128,7 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter = MysteryEncounterBui pokemon = new PlayerPokemon( species, 5, - species.abilityHidden === Abilities.NONE ? undefined : 2, + species.abilityHidden === AbilityId.NONE ? undefined : 2, enc.formIndex, ); pokemon.trySetShinySeed(); @@ -151,7 +151,7 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter = MysteryEncounterBui pokemon.trySetShinySeed(); } else { // If there's, and this would never happen, no eligible event encounters with a hidden ability, just do Magikarp - species = getPokemonSpecies(Species.MAGIKARP); + species = getPokemonSpecies(SpeciesId.MAGIKARP); pokemon = new PlayerPokemon(species, 5, 2, undefined, undefined, true); } } diff --git a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts index 294f1a78b34..33f43617913 100644 --- a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts @@ -14,13 +14,13 @@ import { globalScene } from "#app/global-scene"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { getPokemonSpecies } from "#app/data/pokemon-species"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { Nature } from "#enums/nature"; import type Pokemon from "#app/field/pokemon"; import { PokemonMove } from "#app/field/pokemon"; import { queueEncounterMessage, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { modifyPlayerPokemonBST } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { BattlerIndex } from "#app/battle"; import { BattlerTagType } from "#enums/battler-tag-type"; import { BerryType } from "#enums/berry-type"; @@ -64,7 +64,7 @@ export const TheStrongStuffEncounter: MysteryEncounter = MysteryEncounterBuilder disableAnimation: true, }, { - spriteKey: Species.SHUCKLE.toString(), + spriteKey: SpeciesId.SHUCKLE.toString(), fileRoot: "pokemon", hasShadow: true, repeat: true, @@ -88,13 +88,13 @@ export const TheStrongStuffEncounter: MysteryEncounter = MysteryEncounterBuilder disableSwitch: true, pokemonConfigs: [ { - species: getPokemonSpecies(Species.SHUCKLE), + species: getPokemonSpecies(SpeciesId.SHUCKLE), isBoss: true, bossSegments: 5, shiny: false, // Shiny lock because shiny is rolled only if the battle option is picked customPokemonData: new CustomPokemonData({ spriteScale: 1.25 }), nature: Nature.HARDY, - moveSet: [Moves.INFESTATION, Moves.SALT_CURE, Moves.GASTRO_ACID, Moves.HEAL_ORDER], + moveSet: [MoveId.INFESTATION, MoveId.SALT_CURE, MoveId.GASTRO_ACID, MoveId.HEAL_ORDER], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.BERRY, [BerryType.SITRUS]) as PokemonHeldItemModifierType, @@ -126,9 +126,9 @@ export const TheStrongStuffEncounter: MysteryEncounter = MysteryEncounterBuilder encounter.enemyPartyConfigs = [config]; - loadCustomMovesForEncounter([Moves.GASTRO_ACID, Moves.STEALTH_ROCK]); + loadCustomMovesForEncounter([MoveId.GASTRO_ACID, MoveId.STEALTH_ROCK]); - encounter.setDialogueToken("shuckleName", getPokemonSpecies(Species.SHUCKLE).getName()); + encounter.setDialogueToken("shuckleName", getPokemonSpecies(SpeciesId.SHUCKLE).getName()); return true; }) @@ -210,13 +210,13 @@ export const TheStrongStuffEncounter: MysteryEncounter = MysteryEncounterBuilder { sourceBattlerIndex: BattlerIndex.ENEMY, targets: [BattlerIndex.PLAYER], - move: new PokemonMove(Moves.GASTRO_ACID), + move: new PokemonMove(MoveId.GASTRO_ACID), ignorePp: true, }, { sourceBattlerIndex: BattlerIndex.ENEMY, targets: [BattlerIndex.PLAYER], - move: new PokemonMove(Moves.STEALTH_ROCK), + move: new PokemonMove(MoveId.STEALTH_ROCK), ignorePp: true, }, ); diff --git a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts index 3cbe42591d8..0776d89ed63 100644 --- a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts @@ -15,10 +15,10 @@ import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounte import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { TrainerType } from "#enums/trainer-type"; -import { Species } from "#enums/species"; -import { Abilities } from "#enums/abilities"; +import { SpeciesId } from "#enums/species-id"; +import { AbilityId } from "#enums/ability-id"; import { getPokemonSpecies } from "#app/data/pokemon-species"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { Nature } from "#enums/nature"; import { PokemonType } from "#enums/pokemon-type"; import { BerryType } from "#enums/berry-type"; @@ -215,8 +215,8 @@ function endTrainerBattleAndShowDialogue(): Promise { // Only trigger form change when Eiscue is in Noice form // Hardcoded Eiscue for now in case it is fused with another pokemon if ( - pokemon.species.speciesId === Species.EISCUE && - pokemon.hasAbility(Abilities.ICE_FACE) && + pokemon.species.speciesId === SpeciesId.EISCUE && + pokemon.hasAbility(AbilityId.ICE_FACE) && pokemon.formIndex === 1 ) { globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeAbilityTrigger); @@ -256,11 +256,11 @@ function getVictorTrainerConfig(): EnemyPartyConfig { trainerType: TrainerType.VICTOR, pokemonConfigs: [ { - species: getPokemonSpecies(Species.SWELLOW), + species: getPokemonSpecies(SpeciesId.SWELLOW), isBoss: false, abilityIndex: 0, // Guts nature: Nature.ADAMANT, - moveSet: [Moves.FACADE, Moves.BRAVE_BIRD, Moves.PROTECT, Moves.QUICK_ATTACK], + moveSet: [MoveId.FACADE, MoveId.BRAVE_BIRD, MoveId.PROTECT, MoveId.QUICK_ATTACK], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.FLAME_ORB) as PokemonHeldItemModifierType, @@ -274,11 +274,11 @@ function getVictorTrainerConfig(): EnemyPartyConfig { ], }, { - species: getPokemonSpecies(Species.OBSTAGOON), + species: getPokemonSpecies(SpeciesId.OBSTAGOON), isBoss: false, abilityIndex: 1, // Guts nature: Nature.ADAMANT, - moveSet: [Moves.FACADE, Moves.OBSTRUCT, Moves.NIGHT_SLASH, Moves.FIRE_PUNCH], + moveSet: [MoveId.FACADE, MoveId.OBSTRUCT, MoveId.NIGHT_SLASH, MoveId.FIRE_PUNCH], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.FLAME_ORB) as PokemonHeldItemModifierType, @@ -300,11 +300,11 @@ function getVictoriaTrainerConfig(): EnemyPartyConfig { trainerType: TrainerType.VICTORIA, pokemonConfigs: [ { - species: getPokemonSpecies(Species.ROSERADE), + species: getPokemonSpecies(SpeciesId.ROSERADE), isBoss: false, abilityIndex: 0, // Natural Cure nature: Nature.CALM, - moveSet: [Moves.SYNTHESIS, Moves.SLUDGE_BOMB, Moves.GIGA_DRAIN, Moves.SLEEP_POWDER], + moveSet: [MoveId.SYNTHESIS, MoveId.SLUDGE_BOMB, MoveId.GIGA_DRAIN, MoveId.SLEEP_POWDER], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.SOUL_DEW) as PokemonHeldItemModifierType, @@ -318,11 +318,11 @@ function getVictoriaTrainerConfig(): EnemyPartyConfig { ], }, { - species: getPokemonSpecies(Species.GARDEVOIR), + species: getPokemonSpecies(SpeciesId.GARDEVOIR), isBoss: false, formIndex: 1, nature: Nature.TIMID, - moveSet: [Moves.PSYSHOCK, Moves.MOONBLAST, Moves.SHADOW_BALL, Moves.WILL_O_WISP], + moveSet: [MoveId.PSYSHOCK, MoveId.MOONBLAST, MoveId.SHADOW_BALL, MoveId.WILL_O_WISP], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.ATTACK_TYPE_BOOSTER, [ @@ -349,11 +349,11 @@ function getViviTrainerConfig(): EnemyPartyConfig { trainerType: TrainerType.VIVI, pokemonConfigs: [ { - species: getPokemonSpecies(Species.SEAKING), + species: getPokemonSpecies(SpeciesId.SEAKING), isBoss: false, abilityIndex: 3, // Lightning Rod nature: Nature.ADAMANT, - moveSet: [Moves.WATERFALL, Moves.MEGAHORN, Moves.KNOCK_OFF, Moves.REST], + moveSet: [MoveId.WATERFALL, MoveId.MEGAHORN, MoveId.KNOCK_OFF, MoveId.REST], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.BERRY, [BerryType.LUM]) as PokemonHeldItemModifierType, @@ -368,11 +368,11 @@ function getViviTrainerConfig(): EnemyPartyConfig { ], }, { - species: getPokemonSpecies(Species.BRELOOM), + species: getPokemonSpecies(SpeciesId.BRELOOM), isBoss: false, abilityIndex: 1, // Poison Heal nature: Nature.JOLLY, - moveSet: [Moves.SPORE, Moves.SWORDS_DANCE, Moves.SEED_BOMB, Moves.DRAIN_PUNCH], + moveSet: [MoveId.SPORE, MoveId.SWORDS_DANCE, MoveId.SEED_BOMB, MoveId.DRAIN_PUNCH], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.BASE_STAT_BOOSTER, [Stat.HP]) as PokemonHeldItemModifierType, @@ -386,11 +386,11 @@ function getViviTrainerConfig(): EnemyPartyConfig { ], }, { - species: getPokemonSpecies(Species.CAMERUPT), + species: getPokemonSpecies(SpeciesId.CAMERUPT), isBoss: false, formIndex: 1, nature: Nature.CALM, - moveSet: [Moves.EARTH_POWER, Moves.FIRE_BLAST, Moves.YAWN, Moves.PROTECT], + moveSet: [MoveId.EARTH_POWER, MoveId.FIRE_BLAST, MoveId.YAWN, MoveId.PROTECT], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.QUICK_CLAW) as PokemonHeldItemModifierType, @@ -408,11 +408,11 @@ function getVickyTrainerConfig(): EnemyPartyConfig { trainerType: TrainerType.VICKY, pokemonConfigs: [ { - species: getPokemonSpecies(Species.MEDICHAM), + species: getPokemonSpecies(SpeciesId.MEDICHAM), isBoss: false, formIndex: 1, nature: Nature.IMPISH, - moveSet: [Moves.AXE_KICK, Moves.ICE_PUNCH, Moves.ZEN_HEADBUTT, Moves.BULLET_PUNCH], + moveSet: [MoveId.AXE_KICK, MoveId.ICE_PUNCH, MoveId.ZEN_HEADBUTT, MoveId.BULLET_PUNCH], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.SHELL_BELL) as PokemonHeldItemModifierType, @@ -429,11 +429,11 @@ function getVitoTrainerConfig(): EnemyPartyConfig { trainerType: TrainerType.VITO, pokemonConfigs: [ { - species: getPokemonSpecies(Species.HISUI_ELECTRODE), + species: getPokemonSpecies(SpeciesId.HISUI_ELECTRODE), isBoss: false, abilityIndex: 0, // Soundproof nature: Nature.MODEST, - moveSet: [Moves.THUNDERBOLT, Moves.GIGA_DRAIN, Moves.FOUL_PLAY, Moves.THUNDER_WAVE], + moveSet: [MoveId.THUNDERBOLT, MoveId.GIGA_DRAIN, MoveId.FOUL_PLAY, MoveId.THUNDER_WAVE], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.BASE_STAT_BOOSTER, [Stat.SPD]) as PokemonHeldItemModifierType, @@ -443,11 +443,11 @@ function getVitoTrainerConfig(): EnemyPartyConfig { ], }, { - species: getPokemonSpecies(Species.SWALOT), + species: getPokemonSpecies(SpeciesId.SWALOT), isBoss: false, abilityIndex: 2, // Gluttony nature: Nature.QUIET, - moveSet: [Moves.SLUDGE_BOMB, Moves.GIGA_DRAIN, Moves.ICE_BEAM, Moves.EARTHQUAKE], + moveSet: [MoveId.SLUDGE_BOMB, MoveId.GIGA_DRAIN, MoveId.ICE_BEAM, MoveId.EARTHQUAKE], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.BERRY, [BerryType.SITRUS]) as PokemonHeldItemModifierType, @@ -496,11 +496,11 @@ function getVitoTrainerConfig(): EnemyPartyConfig { ], }, { - species: getPokemonSpecies(Species.DODRIO), + species: getPokemonSpecies(SpeciesId.DODRIO), isBoss: false, abilityIndex: 2, // Tangled Feet nature: Nature.JOLLY, - moveSet: [Moves.DRILL_PECK, Moves.QUICK_ATTACK, Moves.THRASH, Moves.KNOCK_OFF], + moveSet: [MoveId.DRILL_PECK, MoveId.QUICK_ATTACK, MoveId.THRASH, MoveId.KNOCK_OFF], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.KINGS_ROCK) as PokemonHeldItemModifierType, @@ -510,11 +510,11 @@ function getVitoTrainerConfig(): EnemyPartyConfig { ], }, { - species: getPokemonSpecies(Species.ALAKAZAM), + species: getPokemonSpecies(SpeciesId.ALAKAZAM), isBoss: false, formIndex: 1, nature: Nature.BOLD, - moveSet: [Moves.PSYCHIC, Moves.SHADOW_BALL, Moves.FOCUS_BLAST, Moves.THUNDERBOLT], + moveSet: [MoveId.PSYCHIC, MoveId.SHADOW_BALL, MoveId.FOCUS_BLAST, MoveId.THUNDERBOLT], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.WIDE_LENS) as PokemonHeldItemModifierType, @@ -524,11 +524,11 @@ function getVitoTrainerConfig(): EnemyPartyConfig { ], }, { - species: getPokemonSpecies(Species.DARMANITAN), + species: getPokemonSpecies(SpeciesId.DARMANITAN), isBoss: false, abilityIndex: 0, // Sheer Force nature: Nature.IMPISH, - moveSet: [Moves.EARTHQUAKE, Moves.U_TURN, Moves.FLARE_BLITZ, Moves.ROCK_SLIDE], + moveSet: [MoveId.EARTHQUAKE, MoveId.U_TURN, MoveId.FLARE_BLITZ, MoveId.ROCK_SLIDE], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.QUICK_CLAW) as PokemonHeldItemModifierType, diff --git a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts index 1e1db14705a..a0051058d02 100644 --- a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts +++ b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts @@ -16,14 +16,14 @@ import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-en import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { HitHealModifier, PokemonHeldItemModifier, TurnHealModifier } from "#app/modifier/modifier"; import { applyModifierTypeToPlayerPokemon } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import { showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import i18next from "#app/plugins/i18n"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { getPokemonSpecies } from "#app/data/pokemon-species"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { BattlerIndex } from "#app/battle"; import { PokemonMove } from "#app/field/pokemon"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; @@ -51,7 +51,7 @@ export const TrashToTreasureEncounter: MysteryEncounter = MysteryEncounterBuilde .withFleeAllowed(false) .withIntroSpriteConfigs([ { - spriteKey: Species.GARBODOR.toString() + "-gigantamax", + spriteKey: SpeciesId.GARBODOR.toString() + "-gigantamax", fileRoot: "pokemon", hasShadow: false, disableAnimation: true, @@ -74,14 +74,14 @@ export const TrashToTreasureEncounter: MysteryEncounter = MysteryEncounterBuilde const encounter = globalScene.currentBattle.mysteryEncounter!; // Calculate boss mon (shiny locked) - const bossSpecies = getPokemonSpecies(Species.GARBODOR); + const bossSpecies = getPokemonSpecies(SpeciesId.GARBODOR); const pokemonConfig: EnemyPokemonConfig = { species: bossSpecies, isBoss: true, shiny: false, // Shiny lock because of custom intro sprite formIndex: 1, // Gmax bossSegmentModifier: 1, // +1 Segment from normal - moveSet: [Moves.GUNK_SHOT, Moves.STOMPING_TANTRUM, Moves.HAMMER_ARM, Moves.PAYBACK], + moveSet: [MoveId.GUNK_SHOT, MoveId.STOMPING_TANTRUM, MoveId.HAMMER_ARM, MoveId.PAYBACK], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.BERRY) as PokemonHeldItemModifierType, @@ -127,7 +127,7 @@ export const TrashToTreasureEncounter: MysteryEncounter = MysteryEncounterBuilde encounter.enemyPartyConfigs = [config]; // Load animations/sfx for Garbodor fight start moves - loadCustomMovesForEncounter([Moves.TOXIC, Moves.STOCKPILE]); + loadCustomMovesForEncounter([MoveId.TOXIC, MoveId.STOCKPILE]); globalScene.loadSe("PRSFX- Dig2", "battle_anims", "PRSFX- Dig2.wav"); globalScene.loadSe("PRSFX- Venom Drench", "battle_anims", "PRSFX- Venom Drench.wav"); @@ -206,13 +206,13 @@ export const TrashToTreasureEncounter: MysteryEncounter = MysteryEncounterBuilde { sourceBattlerIndex: BattlerIndex.ENEMY, targets: [BattlerIndex.PLAYER], - move: new PokemonMove(Moves.TOXIC), + move: new PokemonMove(MoveId.TOXIC), ignorePp: true, }, { sourceBattlerIndex: BattlerIndex.ENEMY, targets: [BattlerIndex.ENEMY], - move: new PokemonMove(Moves.STOCKPILE), + move: new PokemonMove(MoveId.STOCKPILE), ignorePp: true, }, ); diff --git a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts index f4eec5b0923..e51a8554120 100644 --- a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts +++ b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts @@ -28,7 +28,7 @@ import { } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import PokemonData from "#app/system/pokemon-data"; import { isNullOrUndefined, randSeedInt } from "#app/utils/common"; -import type { Moves } from "#enums/moves"; +import type { MoveId } from "#enums/move-id"; import { BattlerIndex } from "#app/battle"; import { SelfStatusMove } from "#app/data/moves/move"; import { PokeballType } from "#enums/pokeball"; @@ -73,7 +73,7 @@ export const UncommonBreedEncounter: MysteryEncounter = MysteryEncounterBuilder. const eggMoves = pokemon.getEggMoves(); if (eggMoves) { const eggMoveIndex = randSeedInt(4); - const randomEggMove: Moves = eggMoves[eggMoveIndex]; + const randomEggMove: MoveId = eggMoves[eggMoveIndex]; encounter.misc = { eggMove: randomEggMove, pokemon: pokemon, @@ -270,10 +270,10 @@ export const UncommonBreedEncounter: MysteryEncounter = MysteryEncounterBuilder. ) .build(); -function givePokemonExtraEggMove(pokemon: EnemyPokemon, previousEggMove: Moves) { +function givePokemonExtraEggMove(pokemon: EnemyPokemon, previousEggMove: MoveId) { const eggMoves = pokemon.getEggMoves(); if (eggMoves) { - let randomEggMove: Moves = eggMoves[randSeedInt(4)]; + let randomEggMove: MoveId = eggMoves[randSeedInt(4)]; while (randomEggMove === previousEggMove) { randomEggMove = eggMoves[randSeedInt(4)]; } diff --git a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts index cceda25fcb4..25be75b9d5a 100644 --- a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts +++ b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts @@ -1,6 +1,6 @@ import { PokemonType } from "#enums/pokemon-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { globalScene } from "#app/global-scene"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; @@ -49,55 +49,55 @@ const namespace = "mysteryEncounters/weirdDream"; /** Exclude Ultra Beasts, Paradox, Eternatus, and all legendary/mythical/trio pokemon that are below 570 BST */ const EXCLUDED_TRANSFORMATION_SPECIES = [ - Species.ETERNATUS, + SpeciesId.ETERNATUS, /** UBs */ - Species.NIHILEGO, - Species.BUZZWOLE, - Species.PHEROMOSA, - Species.XURKITREE, - Species.CELESTEELA, - Species.KARTANA, - Species.GUZZLORD, - Species.POIPOLE, - Species.NAGANADEL, - Species.STAKATAKA, - Species.BLACEPHALON, + SpeciesId.NIHILEGO, + SpeciesId.BUZZWOLE, + SpeciesId.PHEROMOSA, + SpeciesId.XURKITREE, + SpeciesId.CELESTEELA, + SpeciesId.KARTANA, + SpeciesId.GUZZLORD, + SpeciesId.POIPOLE, + SpeciesId.NAGANADEL, + SpeciesId.STAKATAKA, + SpeciesId.BLACEPHALON, /** Paradox */ - Species.GREAT_TUSK, - Species.SCREAM_TAIL, - Species.BRUTE_BONNET, - Species.FLUTTER_MANE, - Species.SLITHER_WING, - Species.SANDY_SHOCKS, - Species.ROARING_MOON, - Species.WALKING_WAKE, - Species.GOUGING_FIRE, - Species.RAGING_BOLT, - Species.IRON_TREADS, - Species.IRON_BUNDLE, - Species.IRON_HANDS, - Species.IRON_JUGULIS, - Species.IRON_MOTH, - Species.IRON_THORNS, - Species.IRON_VALIANT, - Species.IRON_LEAVES, - Species.IRON_BOULDER, - Species.IRON_CROWN, + SpeciesId.GREAT_TUSK, + SpeciesId.SCREAM_TAIL, + SpeciesId.BRUTE_BONNET, + SpeciesId.FLUTTER_MANE, + SpeciesId.SLITHER_WING, + SpeciesId.SANDY_SHOCKS, + SpeciesId.ROARING_MOON, + SpeciesId.WALKING_WAKE, + SpeciesId.GOUGING_FIRE, + SpeciesId.RAGING_BOLT, + SpeciesId.IRON_TREADS, + SpeciesId.IRON_BUNDLE, + SpeciesId.IRON_HANDS, + SpeciesId.IRON_JUGULIS, + SpeciesId.IRON_MOTH, + SpeciesId.IRON_THORNS, + SpeciesId.IRON_VALIANT, + SpeciesId.IRON_LEAVES, + SpeciesId.IRON_BOULDER, + SpeciesId.IRON_CROWN, /** These are banned so they don't appear in the < 570 BST pool */ - Species.COSMOG, - Species.MELTAN, - Species.KUBFU, - Species.COSMOEM, - Species.POIPOLE, - Species.TERAPAGOS, - Species.TYPE_NULL, - Species.CALYREX, - Species.NAGANADEL, - Species.URSHIFU, - Species.OGERPON, - Species.OKIDOGI, - Species.MUNKIDORI, - Species.FEZANDIPITI, + SpeciesId.COSMOG, + SpeciesId.MELTAN, + SpeciesId.KUBFU, + SpeciesId.COSMOEM, + SpeciesId.POIPOLE, + SpeciesId.TERAPAGOS, + SpeciesId.TYPE_NULL, + SpeciesId.CALYREX, + SpeciesId.NAGANADEL, + SpeciesId.URSHIFU, + SpeciesId.OGERPON, + SpeciesId.OKIDOGI, + SpeciesId.MUNKIDORI, + SpeciesId.FEZANDIPITI, ]; const SUPER_LEGENDARY_BST_THRESHOLD = 600; @@ -500,7 +500,7 @@ async function doNewTeamPostProcess(transformations: PokemonTransformation[]) { async function postProcessTransformedPokemon( previousPokemon: PlayerPokemon, newPokemon: PlayerPokemon, - speciesRootForm: Species, + speciesRootForm: SpeciesId, forBattle = false, ): Promise { let isNewStarter = false; @@ -768,7 +768,7 @@ function doSideBySideTransformations(transformations: PokemonTransformation[]) { */ async function addEggMoveToNewPokemonMoveset( newPokemon: PlayerPokemon, - speciesRootForm: Species, + speciesRootForm: SpeciesId, forBattle = false, ): Promise { let eggMoveIndex: null | number = null; diff --git a/src/data/mystery-encounters/mystery-encounter-option.ts b/src/data/mystery-encounters/mystery-encounter-option.ts index 57dd50fa972..53b53392bb8 100644 --- a/src/data/mystery-encounters/mystery-encounter-option.ts +++ b/src/data/mystery-encounters/mystery-encounter-option.ts @@ -1,5 +1,5 @@ import type { OptionTextDisplay } from "#app/data/mystery-encounters/mystery-encounter-dialogue"; -import type { Moves } from "#app/enums/moves"; +import type { MoveId } from "#enums/move-id"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { globalScene } from "#app/global-scene"; @@ -300,7 +300,7 @@ export class MysteryEncounterOptionBuilder implements Partial !pokemon.moveset.find(m => m.moveId === tm)).includes(reqMove), ); if (includedCompatMoves.length > 0) { - return ["compatibleMove", Moves[includedCompatMoves[0]]]; + return ["compatibleMove", MoveId[includedCompatMoves[0]]]; } return ["compatibleMove", ""]; } } export class AbilityRequirement extends EncounterPokemonRequirement { - requiredAbilities: Abilities[]; + requiredAbilities: AbilityId[]; minNumberOfPokemon: number; invertQuery: boolean; excludeDisallowedPokemon: boolean; constructor( - abilities: Abilities | Abilities[], + abilities: AbilityId | AbilityId[], excludeDisallowedPokemon: boolean, minNumberOfPokemon = 1, invertQuery = false, diff --git a/src/data/mystery-encounters/mystery-encounters.ts b/src/data/mystery-encounters/mystery-encounters.ts index 1a36dc27df2..3a1d3760c83 100644 --- a/src/data/mystery-encounters/mystery-encounters.ts +++ b/src/data/mystery-encounters/mystery-encounters.ts @@ -1,4 +1,4 @@ -import { Biome } from "#enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { DarkDealEncounter } from "./encounters/dark-deal-encounter"; import { DepartmentStoreSaleEncounter } from "./encounters/department-store-sale-encounter"; @@ -71,44 +71,44 @@ export const AVERAGE_ENCOUNTERS_PER_RUN_TARGET = 12; export const ANTI_VARIANCE_WEIGHT_MODIFIER = 15; export const EXTREME_ENCOUNTER_BIOMES = [ - Biome.SEA, - Biome.SEABED, - Biome.BADLANDS, - Biome.DESERT, - Biome.ICE_CAVE, - Biome.VOLCANO, - Biome.WASTELAND, - Biome.ABYSS, - Biome.SPACE, - Biome.END, + BiomeId.SEA, + BiomeId.SEABED, + BiomeId.BADLANDS, + BiomeId.DESERT, + BiomeId.ICE_CAVE, + BiomeId.VOLCANO, + BiomeId.WASTELAND, + BiomeId.ABYSS, + BiomeId.SPACE, + BiomeId.END, ]; export const NON_EXTREME_ENCOUNTER_BIOMES = [ - Biome.TOWN, - Biome.PLAINS, - Biome.GRASS, - Biome.TALL_GRASS, - Biome.METROPOLIS, - Biome.FOREST, - Biome.SWAMP, - Biome.BEACH, - Biome.LAKE, - Biome.MOUNTAIN, - Biome.CAVE, - Biome.MEADOW, - Biome.POWER_PLANT, - Biome.GRAVEYARD, - Biome.DOJO, - Biome.FACTORY, - Biome.RUINS, - Biome.CONSTRUCTION_SITE, - Biome.JUNGLE, - Biome.FAIRY_CAVE, - Biome.TEMPLE, - Biome.SLUM, - Biome.SNOWY_FOREST, - Biome.ISLAND, - Biome.LABORATORY, + BiomeId.TOWN, + BiomeId.PLAINS, + BiomeId.GRASS, + BiomeId.TALL_GRASS, + BiomeId.METROPOLIS, + BiomeId.FOREST, + BiomeId.SWAMP, + BiomeId.BEACH, + BiomeId.LAKE, + BiomeId.MOUNTAIN, + BiomeId.CAVE, + BiomeId.MEADOW, + BiomeId.POWER_PLANT, + BiomeId.GRAVEYARD, + BiomeId.DOJO, + BiomeId.FACTORY, + BiomeId.RUINS, + BiomeId.CONSTRUCTION_SITE, + BiomeId.JUNGLE, + BiomeId.FAIRY_CAVE, + BiomeId.TEMPLE, + BiomeId.SLUM, + BiomeId.SNOWY_FOREST, + BiomeId.ISLAND, + BiomeId.LABORATORY, ]; /** @@ -120,55 +120,55 @@ export const NON_EXTREME_ENCOUNTER_BIOMES = [ * + ICE_CAVE */ export const HUMAN_TRANSITABLE_BIOMES = [ - Biome.TOWN, - Biome.PLAINS, - Biome.GRASS, - Biome.TALL_GRASS, - Biome.METROPOLIS, - Biome.FOREST, - Biome.SWAMP, - Biome.BEACH, - Biome.LAKE, - Biome.MOUNTAIN, - Biome.BADLANDS, - Biome.CAVE, - Biome.DESERT, - Biome.ICE_CAVE, - Biome.MEADOW, - Biome.POWER_PLANT, - Biome.GRAVEYARD, - Biome.DOJO, - Biome.FACTORY, - Biome.RUINS, - Biome.CONSTRUCTION_SITE, - Biome.JUNGLE, - Biome.FAIRY_CAVE, - Biome.TEMPLE, - Biome.SLUM, - Biome.SNOWY_FOREST, - Biome.ISLAND, - Biome.LABORATORY, + BiomeId.TOWN, + BiomeId.PLAINS, + BiomeId.GRASS, + BiomeId.TALL_GRASS, + BiomeId.METROPOLIS, + BiomeId.FOREST, + BiomeId.SWAMP, + BiomeId.BEACH, + BiomeId.LAKE, + BiomeId.MOUNTAIN, + BiomeId.BADLANDS, + BiomeId.CAVE, + BiomeId.DESERT, + BiomeId.ICE_CAVE, + BiomeId.MEADOW, + BiomeId.POWER_PLANT, + BiomeId.GRAVEYARD, + BiomeId.DOJO, + BiomeId.FACTORY, + BiomeId.RUINS, + BiomeId.CONSTRUCTION_SITE, + BiomeId.JUNGLE, + BiomeId.FAIRY_CAVE, + BiomeId.TEMPLE, + BiomeId.SLUM, + BiomeId.SNOWY_FOREST, + BiomeId.ISLAND, + BiomeId.LABORATORY, ]; /** * Places where you could expect a town or city, some form of large civilization */ export const CIVILIZATION_ENCOUNTER_BIOMES = [ - Biome.TOWN, - Biome.PLAINS, - Biome.GRASS, - Biome.TALL_GRASS, - Biome.METROPOLIS, - Biome.BEACH, - Biome.LAKE, - Biome.MEADOW, - Biome.POWER_PLANT, - Biome.GRAVEYARD, - Biome.DOJO, - Biome.FACTORY, - Biome.CONSTRUCTION_SITE, - Biome.SLUM, - Biome.ISLAND, + BiomeId.TOWN, + BiomeId.PLAINS, + BiomeId.GRASS, + BiomeId.TALL_GRASS, + BiomeId.METROPOLIS, + BiomeId.BEACH, + BiomeId.LAKE, + BiomeId.MEADOW, + BiomeId.POWER_PLANT, + BiomeId.GRAVEYARD, + BiomeId.DOJO, + BiomeId.FACTORY, + BiomeId.CONSTRUCTION_SITE, + BiomeId.SLUM, + BiomeId.ISLAND, ]; export const allMysteryEncounters: { @@ -224,41 +224,41 @@ const anyBiomeEncounters: MysteryEncounterType[] = [ * Adding specific Encounters to the mysteryEncountersByBiome map is for specific cases and special circumstances * that biome groups do not cover */ -export const mysteryEncountersByBiome = new Map([ - [Biome.TOWN, []], - [Biome.PLAINS, [MysteryEncounterType.SLUMBERING_SNORLAX]], - [Biome.GRASS, [MysteryEncounterType.SLUMBERING_SNORLAX, MysteryEncounterType.ABSOLUTE_AVARICE]], - [Biome.TALL_GRASS, [MysteryEncounterType.SLUMBERING_SNORLAX, MysteryEncounterType.ABSOLUTE_AVARICE]], - [Biome.METROPOLIS, []], - [Biome.FOREST, [MysteryEncounterType.SAFARI_ZONE, MysteryEncounterType.ABSOLUTE_AVARICE]], - [Biome.SEA, [MysteryEncounterType.LOST_AT_SEA]], - [Biome.SWAMP, [MysteryEncounterType.SAFARI_ZONE]], - [Biome.BEACH, []], - [Biome.LAKE, []], - [Biome.SEABED, []], - [Biome.MOUNTAIN, []], - [Biome.BADLANDS, [MysteryEncounterType.DANCING_LESSONS]], - [Biome.CAVE, [MysteryEncounterType.THE_STRONG_STUFF]], - [Biome.DESERT, [MysteryEncounterType.DANCING_LESSONS]], - [Biome.ICE_CAVE, []], - [Biome.MEADOW, []], - [Biome.POWER_PLANT, []], - [Biome.VOLCANO, [MysteryEncounterType.FIERY_FALLOUT, MysteryEncounterType.DANCING_LESSONS]], - [Biome.GRAVEYARD, []], - [Biome.DOJO, []], - [Biome.FACTORY, []], - [Biome.RUINS, []], - [Biome.WASTELAND, [MysteryEncounterType.DANCING_LESSONS]], - [Biome.ABYSS, [MysteryEncounterType.DANCING_LESSONS]], - [Biome.SPACE, [MysteryEncounterType.THE_EXPERT_POKEMON_BREEDER]], - [Biome.CONSTRUCTION_SITE, []], - [Biome.JUNGLE, [MysteryEncounterType.SAFARI_ZONE]], - [Biome.FAIRY_CAVE, []], - [Biome.TEMPLE, []], - [Biome.SLUM, []], - [Biome.SNOWY_FOREST, []], - [Biome.ISLAND, []], - [Biome.LABORATORY, []], +export const mysteryEncountersByBiome = new Map([ + [BiomeId.TOWN, []], + [BiomeId.PLAINS, [MysteryEncounterType.SLUMBERING_SNORLAX]], + [BiomeId.GRASS, [MysteryEncounterType.SLUMBERING_SNORLAX, MysteryEncounterType.ABSOLUTE_AVARICE]], + [BiomeId.TALL_GRASS, [MysteryEncounterType.SLUMBERING_SNORLAX, MysteryEncounterType.ABSOLUTE_AVARICE]], + [BiomeId.METROPOLIS, []], + [BiomeId.FOREST, [MysteryEncounterType.SAFARI_ZONE, MysteryEncounterType.ABSOLUTE_AVARICE]], + [BiomeId.SEA, [MysteryEncounterType.LOST_AT_SEA]], + [BiomeId.SWAMP, [MysteryEncounterType.SAFARI_ZONE]], + [BiomeId.BEACH, []], + [BiomeId.LAKE, []], + [BiomeId.SEABED, []], + [BiomeId.MOUNTAIN, []], + [BiomeId.BADLANDS, [MysteryEncounterType.DANCING_LESSONS]], + [BiomeId.CAVE, [MysteryEncounterType.THE_STRONG_STUFF]], + [BiomeId.DESERT, [MysteryEncounterType.DANCING_LESSONS]], + [BiomeId.ICE_CAVE, []], + [BiomeId.MEADOW, []], + [BiomeId.POWER_PLANT, []], + [BiomeId.VOLCANO, [MysteryEncounterType.FIERY_FALLOUT, MysteryEncounterType.DANCING_LESSONS]], + [BiomeId.GRAVEYARD, []], + [BiomeId.DOJO, []], + [BiomeId.FACTORY, []], + [BiomeId.RUINS, []], + [BiomeId.WASTELAND, [MysteryEncounterType.DANCING_LESSONS]], + [BiomeId.ABYSS, [MysteryEncounterType.DANCING_LESSONS]], + [BiomeId.SPACE, [MysteryEncounterType.THE_EXPERT_POKEMON_BREEDER]], + [BiomeId.CONSTRUCTION_SITE, []], + [BiomeId.JUNGLE, [MysteryEncounterType.SAFARI_ZONE]], + [BiomeId.FAIRY_CAVE, []], + [BiomeId.TEMPLE, []], + [BiomeId.SLUM, []], + [BiomeId.SNOWY_FOREST, []], + [BiomeId.ISLAND, []], + [BiomeId.LABORATORY, []], ]); export function initMysteryEncounters() { diff --git a/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts b/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts index 37194aef78e..7698be7b15d 100644 --- a/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts +++ b/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts @@ -1,4 +1,4 @@ -import type { Moves } from "#app/enums/moves"; +import type { MoveId } from "#enums/move-id"; import type { PlayerPokemon } from "#app/field/pokemon"; import { PokemonMove } from "#app/field/pokemon"; import { isNullOrUndefined } from "#app/utils/common"; @@ -21,13 +21,13 @@ export interface CanLearnMoveRequirementOptions { * Requires that a pokemon can learn a specific move/moveset. */ export class CanLearnMoveRequirement extends EncounterPokemonRequirement { - private readonly requiredMoves: Moves[]; + private readonly requiredMoves: MoveId[]; private readonly excludeLevelMoves?: boolean; private readonly excludeTmMoves?: boolean; private readonly excludeEggMoves?: boolean; private readonly includeFainted?: boolean; - constructor(requiredMoves: Moves | Moves[], options: CanLearnMoveRequirementOptions = {}) { + constructor(requiredMoves: MoveId | MoveId[], options: CanLearnMoveRequirementOptions = {}) { super(); this.requiredMoves = Array.isArray(requiredMoves) ? requiredMoves : [requiredMoves]; @@ -69,12 +69,12 @@ export class CanLearnMoveRequirement extends EncounterPokemonRequirement { return ["requiredMoves", this.requiredMoves.map(m => new PokemonMove(m).getName()).join(", ")]; } - private getPokemonLevelMoves(pkm: PlayerPokemon): Moves[] { + private getPokemonLevelMoves(pkm: PlayerPokemon): MoveId[] { return pkm.getLevelMoves().map(([_level, move]) => move); } - private getAllPokemonMoves(pkm: PlayerPokemon): Moves[] { - const allPokemonMoves: Moves[] = []; + private getAllPokemonMoves(pkm: PlayerPokemon): MoveId[] { + const allPokemonMoves: MoveId[] = []; if (!this.excludeLevelMoves) { allPokemonMoves.push(...(this.getPokemonLevelMoves(pkm) ?? [])); diff --git a/src/data/mystery-encounters/requirements/requirement-groups.ts b/src/data/mystery-encounters/requirements/requirement-groups.ts index d9d62819fa6..0140a5fe320 100644 --- a/src/data/mystery-encounters/requirements/requirement-groups.ts +++ b/src/data/mystery-encounters/requirements/requirement-groups.ts @@ -1,130 +1,137 @@ -import { Moves } from "#enums/moves"; -import { Abilities } from "#enums/abilities"; +import { MoveId } from "#enums/move-id"; +import { AbilityId } from "#enums/ability-id"; /** * Moves that "steal" things */ -export const STEALING_MOVES = [Moves.PLUCK, Moves.COVET, Moves.KNOCK_OFF, Moves.THIEF, Moves.TRICK, Moves.SWITCHEROO]; +export const STEALING_MOVES = [ + MoveId.PLUCK, + MoveId.COVET, + MoveId.KNOCK_OFF, + MoveId.THIEF, + MoveId.TRICK, + MoveId.SWITCHEROO, +]; /** * Moves that "charm" someone */ export const CHARMING_MOVES = [ - Moves.CHARM, - Moves.FLATTER, - Moves.DRAGON_CHEER, - Moves.ALLURING_VOICE, - Moves.ATTRACT, - Moves.SWEET_SCENT, - Moves.CAPTIVATE, - Moves.AROMATIC_MIST, + MoveId.CHARM, + MoveId.FLATTER, + MoveId.DRAGON_CHEER, + MoveId.ALLURING_VOICE, + MoveId.ATTRACT, + MoveId.SWEET_SCENT, + MoveId.CAPTIVATE, + MoveId.AROMATIC_MIST, ]; /** * Moves for the Dancer ability */ export const DANCING_MOVES = [ - Moves.AQUA_STEP, - Moves.CLANGOROUS_SOUL, - Moves.DRAGON_DANCE, - Moves.FEATHER_DANCE, - Moves.FIERY_DANCE, - Moves.LUNAR_DANCE, - Moves.PETAL_DANCE, - Moves.REVELATION_DANCE, - Moves.QUIVER_DANCE, - Moves.SWORDS_DANCE, - Moves.TEETER_DANCE, - Moves.VICTORY_DANCE, + MoveId.AQUA_STEP, + MoveId.CLANGOROUS_SOUL, + MoveId.DRAGON_DANCE, + MoveId.FEATHER_DANCE, + MoveId.FIERY_DANCE, + MoveId.LUNAR_DANCE, + MoveId.PETAL_DANCE, + MoveId.REVELATION_DANCE, + MoveId.QUIVER_DANCE, + MoveId.SWORDS_DANCE, + MoveId.TEETER_DANCE, + MoveId.VICTORY_DANCE, ]; /** * Moves that can distract someone/something */ export const DISTRACTION_MOVES = [ - Moves.FAKE_OUT, - Moves.FOLLOW_ME, - Moves.TAUNT, - Moves.ROAR, - Moves.TELEPORT, - Moves.CHARM, - Moves.FAKE_TEARS, - Moves.TICKLE, - Moves.CAPTIVATE, - Moves.RAGE_POWDER, - Moves.SUBSTITUTE, - Moves.SHED_TAIL, + MoveId.FAKE_OUT, + MoveId.FOLLOW_ME, + MoveId.TAUNT, + MoveId.ROAR, + MoveId.TELEPORT, + MoveId.CHARM, + MoveId.FAKE_TEARS, + MoveId.TICKLE, + MoveId.CAPTIVATE, + MoveId.RAGE_POWDER, + MoveId.SUBSTITUTE, + MoveId.SHED_TAIL, ]; /** * Moves that protect in some way */ export const PROTECTING_MOVES = [ - Moves.PROTECT, - Moves.WIDE_GUARD, - Moves.MAX_GUARD, - Moves.SAFEGUARD, - Moves.REFLECT, - Moves.BARRIER, - Moves.QUICK_GUARD, - Moves.FLOWER_SHIELD, - Moves.KINGS_SHIELD, - Moves.CRAFTY_SHIELD, - Moves.SPIKY_SHIELD, - Moves.OBSTRUCT, - Moves.DETECT, + MoveId.PROTECT, + MoveId.WIDE_GUARD, + MoveId.MAX_GUARD, + MoveId.SAFEGUARD, + MoveId.REFLECT, + MoveId.BARRIER, + MoveId.QUICK_GUARD, + MoveId.FLOWER_SHIELD, + MoveId.KINGS_SHIELD, + MoveId.CRAFTY_SHIELD, + MoveId.SPIKY_SHIELD, + MoveId.OBSTRUCT, + MoveId.DETECT, ]; /** * Moves that (loosely) can be used to trap/rob someone */ export const EXTORTION_MOVES = [ - Moves.BIND, - Moves.CLAMP, - Moves.INFESTATION, - Moves.SAND_TOMB, - Moves.SNAP_TRAP, - Moves.THUNDER_CAGE, - Moves.WRAP, - Moves.SPIRIT_SHACKLE, - Moves.MEAN_LOOK, - Moves.JAW_LOCK, - Moves.BLOCK, - Moves.SPIDER_WEB, - Moves.ANCHOR_SHOT, - Moves.OCTOLOCK, - Moves.PURSUIT, - Moves.CONSTRICT, - Moves.BEAT_UP, - Moves.COIL, - Moves.WRING_OUT, - Moves.STRING_SHOT, + MoveId.BIND, + MoveId.CLAMP, + MoveId.INFESTATION, + MoveId.SAND_TOMB, + MoveId.SNAP_TRAP, + MoveId.THUNDER_CAGE, + MoveId.WRAP, + MoveId.SPIRIT_SHACKLE, + MoveId.MEAN_LOOK, + MoveId.JAW_LOCK, + MoveId.BLOCK, + MoveId.SPIDER_WEB, + MoveId.ANCHOR_SHOT, + MoveId.OCTOLOCK, + MoveId.PURSUIT, + MoveId.CONSTRICT, + MoveId.BEAT_UP, + MoveId.COIL, + MoveId.WRING_OUT, + MoveId.STRING_SHOT, ]; /** * Abilities that (loosely) can be used to trap/rob someone */ export const EXTORTION_ABILITIES = [ - Abilities.INTIMIDATE, - Abilities.ARENA_TRAP, - Abilities.SHADOW_TAG, - Abilities.SUCTION_CUPS, - Abilities.STICKY_HOLD, + AbilityId.INTIMIDATE, + AbilityId.ARENA_TRAP, + AbilityId.SHADOW_TAG, + AbilityId.SUCTION_CUPS, + AbilityId.STICKY_HOLD, ]; /** * Abilities that signify resistance to fire */ export const FIRE_RESISTANT_ABILITIES = [ - Abilities.FLAME_BODY, - Abilities.FLASH_FIRE, - Abilities.WELL_BAKED_BODY, - Abilities.HEATPROOF, - Abilities.THERMAL_EXCHANGE, - Abilities.THICK_FAT, - Abilities.WATER_BUBBLE, - Abilities.MAGMA_ARMOR, - Abilities.WATER_VEIL, - Abilities.STEAM_ENGINE, - Abilities.PRIMORDIAL_SEA, + AbilityId.FLAME_BODY, + AbilityId.FLASH_FIRE, + AbilityId.WELL_BAKED_BODY, + AbilityId.HEATPROOF, + AbilityId.THERMAL_EXCHANGE, + AbilityId.THICK_FAT, + AbilityId.WATER_BUBBLE, + AbilityId.MAGMA_ARMOR, + AbilityId.WATER_VEIL, + AbilityId.STEAM_ENGINE, + AbilityId.PRIMORDIAL_SEA, ]; diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index 0215928bbe8..060de9c3a9e 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -33,13 +33,13 @@ import { PartyUiMode } from "#app/ui/party-ui-handler"; import { UiMode } from "#enums/ui-mode"; import { isNullOrUndefined, randSeedInt, randomString, randSeedItem } from "#app/utils/common"; import type { BattlerTagType } from "#enums/battler-tag-type"; -import { Biome } from "#enums/biome"; +import { BiomeId } from "#enums/biome-id"; import type { TrainerType } from "#enums/trainer-type"; import i18next from "i18next"; import Trainer, { TrainerVariant } from "#app/field/trainer"; import type { Gender } from "#app/data/gender"; import type { Nature } from "#enums/nature"; -import type { Moves } from "#enums/moves"; +import type { MoveId } from "#enums/move-id"; import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; import { Status } from "#app/data/status-effect"; @@ -106,7 +106,7 @@ export interface EnemyPokemonConfig { level?: number; gender?: Gender; passive?: boolean; - moveSet?: Moves[]; + moveSet?: MoveId[]; nature?: Nature; ivs?: [number, number, number, number, number, number]; shiny?: boolean; @@ -460,7 +460,7 @@ export async function initBattleWithEnemyConfig(partyConfig: EnemyPartyConfig): * This promise does not need to be awaited on if called in an encounter onInit (will just load lazily) * @param moves */ -export function loadCustomMovesForEncounter(moves: Moves | Moves[]) { +export function loadCustomMovesForEncounter(moves: MoveId | MoveId[]) { moves = Array.isArray(moves) ? moves : [moves]; return Promise.all(moves.map(move => initMoveAnim(move))).then(() => loadMoveAnimAssets(moves)); } @@ -1088,16 +1088,16 @@ export function getRandomEncounterSpecies(level: number, isBoss = false, rerollH export function calculateMEAggregateStats(baseSpawnWeight: number) { const numRuns = 1000; let run = 0; - const biomes = Object.keys(Biome).filter(key => Number.isNaN(Number(key))); + const biomes = Object.keys(BiomeId).filter(key => Number.isNaN(Number(key))); const alwaysPickTheseBiomes = [ - Biome.ISLAND, - Biome.ABYSS, - Biome.WASTELAND, - Biome.FAIRY_CAVE, - Biome.TEMPLE, - Biome.LABORATORY, - Biome.SPACE, - Biome.WASTELAND, + BiomeId.ISLAND, + BiomeId.ABYSS, + BiomeId.WASTELAND, + BiomeId.FAIRY_CAVE, + BiomeId.TEMPLE, + BiomeId.LABORATORY, + BiomeId.SPACE, + BiomeId.WASTELAND, ]; const calculateNumEncounters = (): any[] => { @@ -1106,7 +1106,7 @@ export function calculateMEAggregateStats(baseSpawnWeight: number) { let mostRecentEncounterWave = 0; const encountersByBiome = new Map(biomes.map(b => [b, 0])); const validMEfloorsByBiome = new Map(biomes.map(b => [b, 0])); - let currentBiome = Biome.TOWN; + let currentBiome = BiomeId.TOWN; let currentArena = globalScene.newArena(currentBiome); globalScene.setSeed(randomString(24)); globalScene.resetSeed(); @@ -1119,9 +1119,9 @@ export function calculateMEAggregateStats(baseSpawnWeight: number) { // New biome if (i % 10 === 1) { if (Array.isArray(biomeLinks[currentBiome])) { - let biomes: Biome[]; + let biomes: BiomeId[]; globalScene.executeWithSeedOffset(() => { - biomes = (biomeLinks[currentBiome] as (Biome | [Biome, number])[]) + biomes = (biomeLinks[currentBiome] as (BiomeId | [BiomeId, number])[]) .filter(b => { return !Array.isArray(b) || !randSeedInt(b[1]); }) @@ -1136,10 +1136,10 @@ export function calculateMEAggregateStats(baseSpawnWeight: number) { } } } else if (biomeLinks.hasOwnProperty(currentBiome)) { - currentBiome = biomeLinks[currentBiome] as Biome; + currentBiome = biomeLinks[currentBiome] as BiomeId; } else { if (!(i % 50)) { - currentBiome = Biome.END; + currentBiome = BiomeId.END; } else { currentBiome = globalScene.generateRandomBiome(i); } @@ -1161,7 +1161,7 @@ export function calculateMEAggregateStats(baseSpawnWeight: number) { // Otherwise, roll encounter const roll = randSeedInt(256); - validMEfloorsByBiome.set(Biome[currentBiome], (validMEfloorsByBiome.get(Biome[currentBiome]) ?? 0) + 1); + validMEfloorsByBiome.set(BiomeId[currentBiome], (validMEfloorsByBiome.get(BiomeId[currentBiome]) ?? 0) + 1); // If total number of encounters is lower than expected for the run, slightly favor a new encounter // Do the reverse as well @@ -1197,7 +1197,7 @@ export function calculateMEAggregateStats(baseSpawnWeight: number) { : tierValue > rareThreshold ? ++numEncounters[2] : ++numEncounters[3]; - encountersByBiome.set(Biome[currentBiome], (encountersByBiome.get(Biome[currentBiome]) ?? 0) + 1); + encountersByBiome.set(BiomeId[currentBiome], (encountersByBiome.get(BiomeId[currentBiome]) ?? 0) + 1); } else { encounterRate += WEIGHT_INCREMENT_ON_SPAWN_MISS; } diff --git a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts index a6a87b4ab9a..d4102c045c0 100644 --- a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts @@ -17,7 +17,7 @@ import { achvs } from "#app/system/achv"; import { UiMode } from "#enums/ui-mode"; import type { PartyOption } from "#app/ui/party-ui-handler"; import { PartyUiMode } from "#app/ui/party-ui-handler"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import type { PokemonType } from "#enums/pokemon-type"; import type PokemonSpecies from "#app/data/pokemon-species"; import { getPokemonSpecies } from "#app/data/pokemon-species"; @@ -35,7 +35,7 @@ import type { PermanentStat } from "#enums/stat"; import { VictoryPhase } from "#app/phases/victory-phase"; import { SummaryUiMode } from "#app/ui/summary-ui-handler"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; -import type { Abilities } from "#enums/abilities"; +import type { AbilityId } from "#enums/ability-id"; import type { PokeballType } from "#enums/pokeball"; import { StatusEffect } from "#enums/status-effect"; @@ -51,7 +51,7 @@ export const STANDARD_ENCOUNTER_BOOSTED_LEVEL_MODIFIER = 1; * @param variant */ export function getSpriteKeysFromSpecies( - species: Species, + species: SpeciesId, female?: boolean, formIndex?: number, shiny?: boolean, @@ -247,17 +247,17 @@ export function getHighestStatTotalPlayerPokemon(isAllowed = false, isFainted = */ export function getRandomSpeciesByStarterCost( starterTiers: number | [number, number], - excludedSpecies?: Species[], + excludedSpecies?: SpeciesId[], types?: PokemonType[], allowSubLegendary = true, allowLegendary = true, allowMythical = true, -): Species { +): SpeciesId { let min = Array.isArray(starterTiers) ? starterTiers[0] : starterTiers; let max = Array.isArray(starterTiers) ? starterTiers[1] : starterTiers; let filteredSpecies: [PokemonSpecies, number][] = Object.keys(speciesStarterCosts) - .map(s => [Number.parseInt(s) as Species, speciesStarterCosts[s] as number]) + .map(s => [Number.parseInt(s) as SpeciesId, speciesStarterCosts[s] as number]) .filter(s => { const pokemonSpecies = getPokemonSpecies(s[0]); return ( @@ -294,7 +294,7 @@ export function getRandomSpeciesByStarterCost( return Phaser.Math.RND.shuffle(tryFilterStarterTiers)[index][0].speciesId; } - return Species.BULBASAUR; + return SpeciesId.BULBASAUR; } /** @@ -903,34 +903,34 @@ export function doPlayerFlee(pokemon: EnemyPokemon): Promise { /** * Bug Species and their corresponding weights */ -const GOLDEN_BUG_NET_SPECIES_POOL: [Species, number][] = [ - [Species.SCYTHER, 40], - [Species.SCIZOR, 40], - [Species.KLEAVOR, 40], - [Species.PINSIR, 40], - [Species.HERACROSS, 40], - [Species.YANMA, 40], - [Species.YANMEGA, 40], - [Species.SHUCKLE, 40], - [Species.ANORITH, 40], - [Species.ARMALDO, 40], - [Species.ESCAVALIER, 40], - [Species.ACCELGOR, 40], - [Species.JOLTIK, 40], - [Species.GALVANTULA, 40], - [Species.DURANT, 40], - [Species.LARVESTA, 40], - [Species.VOLCARONA, 40], - [Species.DEWPIDER, 40], - [Species.ARAQUANID, 40], - [Species.WIMPOD, 40], - [Species.GOLISOPOD, 40], - [Species.SIZZLIPEDE, 40], - [Species.CENTISKORCH, 40], - [Species.NYMBLE, 40], - [Species.LOKIX, 40], - [Species.BUZZWOLE, 1], - [Species.PHEROMOSA, 1], +const GOLDEN_BUG_NET_SPECIES_POOL: [SpeciesId, number][] = [ + [SpeciesId.SCYTHER, 40], + [SpeciesId.SCIZOR, 40], + [SpeciesId.KLEAVOR, 40], + [SpeciesId.PINSIR, 40], + [SpeciesId.HERACROSS, 40], + [SpeciesId.YANMA, 40], + [SpeciesId.YANMEGA, 40], + [SpeciesId.SHUCKLE, 40], + [SpeciesId.ANORITH, 40], + [SpeciesId.ARMALDO, 40], + [SpeciesId.ESCAVALIER, 40], + [SpeciesId.ACCELGOR, 40], + [SpeciesId.JOLTIK, 40], + [SpeciesId.GALVANTULA, 40], + [SpeciesId.DURANT, 40], + [SpeciesId.LARVESTA, 40], + [SpeciesId.VOLCARONA, 40], + [SpeciesId.DEWPIDER, 40], + [SpeciesId.ARAQUANID, 40], + [SpeciesId.WIMPOD, 40], + [SpeciesId.GOLISOPOD, 40], + [SpeciesId.SIZZLIPEDE, 40], + [SpeciesId.CENTISKORCH, 40], + [SpeciesId.NYMBLE, 40], + [SpeciesId.LOKIX, 40], + [SpeciesId.BUZZWOLE, 1], + [SpeciesId.PHEROMOSA, 1], ]; /** @@ -951,7 +951,7 @@ export function getGoldenBugNetSpecies(level: number): PokemonSpecies { } // Defaults to Scyther - return getPokemonSpecies(Species.SCYTHER); + return getPokemonSpecies(SpeciesId.SCYTHER); } /** @@ -1024,7 +1024,7 @@ export function isPokemonValidForEncounterOptionSelection( * Permanently overrides the ability (not passive) of a pokemon. * If the pokemon is a fusion, instead overrides the fused pokemon's ability. */ -export function applyAbilityOverrideToPokemon(pokemon: Pokemon, ability: Abilities) { +export function applyAbilityOverrideToPokemon(pokemon: Pokemon, ability: AbilityId) { if (pokemon.isFusion()) { if (!pokemon.fusionCustomPokemonData) { pokemon.fusionCustomPokemonData = new CustomPokemonData(); diff --git a/src/data/pokemon-forms.ts b/src/data/pokemon-forms.ts index da594f7c27f..1098ddc4eeb 100644 --- a/src/data/pokemon-forms.ts +++ b/src/data/pokemon-forms.ts @@ -4,9 +4,9 @@ import { StatusEffect } from "#enums/status-effect"; import { allMoves } from "./data-lists"; import { MoveCategory } from "#enums/MoveCategory"; import type { Constructor, nil } from "#app/utils/common"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import type { TimeOfDay } from "#enums/time-of-day"; import { getPokemonNameWithAffix } from "#app/messages"; import i18next from "i18next"; @@ -139,7 +139,7 @@ export type SpeciesFormChangeConditionPredicate = (p: Pokemon) => boolean; export type SpeciesFormChangeConditionEnforceFunc = (p: Pokemon) => void; export class SpeciesFormChange { - public speciesId: Species; + public speciesId: SpeciesId; public preFormKey: string; public formKey: string; public trigger: SpeciesFormChangeTrigger; @@ -147,7 +147,7 @@ export class SpeciesFormChange { public readonly conditions: SpeciesFormChangeCondition[]; constructor( - speciesId: Species, + speciesId: SpeciesId, preFormKey: string, evoFormKey: string, trigger: SpeciesFormChangeTrigger, @@ -341,14 +341,14 @@ export class SpeciesFormChangeStatusEffectTrigger extends SpeciesFormChangeTrigg } export class SpeciesFormChangeMoveLearnedTrigger extends SpeciesFormChangeTrigger { - public move: Moves; + public move: MoveId; public known: boolean; - constructor(move: Moves, known = true) { + constructor(move: MoveId, known = true) { super(); this.move = move; this.known = known; - const moveKey = Moves[this.move] + const moveKey = MoveId[this.move] .split("_") .filter(f => f) .map((f, i) => (i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase())) @@ -368,12 +368,12 @@ export class SpeciesFormChangeMoveLearnedTrigger extends SpeciesFormChangeTrigge } export abstract class SpeciesFormChangeMoveTrigger extends SpeciesFormChangeTrigger { - public movePredicate: (m: Moves) => boolean; + public movePredicate: (m: MoveId) => boolean; public used: boolean; - constructor(move: Moves | ((m: Moves) => boolean), used = true) { + constructor(move: MoveId | ((m: MoveId) => boolean), used = true) { super(); - this.movePredicate = typeof move === "function" ? move : (m: Moves) => m === move; + this.movePredicate = typeof move === "function" ? move : (m: MoveId) => m === move; this.used = used; } } @@ -403,7 +403,7 @@ export class MeloettaFormChangePostMoveTrigger extends SpeciesFormChangePostMove return false; } // Meloetta will not transform if it has the ability Sheer Force when using Relic Song - if (pokemon.hasAbility(Abilities.SHEER_FORCE)) { + if (pokemon.hasAbility(AbilityId.SHEER_FORCE)) { return false; } return super.canChange(pokemon); @@ -453,11 +453,11 @@ export class SpeciesFormChangeLapseTeraTrigger extends SpeciesFormChangeTrigger */ export class SpeciesFormChangeWeatherTrigger extends SpeciesFormChangeTrigger { /** The ability that triggers the form change */ - public ability: Abilities; + public ability: AbilityId; /** The list of weathers that trigger the form change */ public weathers: WeatherType[]; - constructor(ability: Abilities, weathers: WeatherType[]) { + constructor(ability: AbilityId, weathers: WeatherType[]) { super(); this.ability = ability; this.weathers = weathers; @@ -492,11 +492,11 @@ export class SpeciesFormChangeWeatherTrigger extends SpeciesFormChangeTrigger { */ export class SpeciesFormChangeRevertWeatherFormTrigger extends SpeciesFormChangeTrigger { /** The ability that triggers the form change*/ - public ability: Abilities; + public ability: AbilityId; /** The list of weathers that will also trigger a form change to original form */ public weathers: WeatherType[]; - constructor(ability: Abilities, weathers: WeatherType[]) { + constructor(ability: AbilityId, weathers: WeatherType[]) { super(); this.ability = ability; this.weathers = weathers; @@ -515,7 +515,7 @@ export class SpeciesFormChangeRevertWeatherFormTrigger extends SpeciesFormChange const isWeatherSuppressed = globalScene.arena.weather?.isEffectSuppressed(); const isAbilitySuppressed = pokemon.summonData.abilitySuppressed; const summonDataAbility = pokemon.summonData.ability; - const isAbilityChanged = summonDataAbility !== this.ability && summonDataAbility !== Abilities.NONE; + const isAbilityChanged = summonDataAbility !== this.ability && summonDataAbility !== AbilityId.NONE; if (this.weathers.includes(currentWeather) || isWeatherSuppressed || isAbilitySuppressed || isAbilityChanged) { return true; @@ -553,7 +553,7 @@ export function getSpeciesFormChangeMessage(pokemon: Pokemon, formChange: Specie pokemonName: getPokemonNameWithAffix(pokemon), }); } - if (pokemon.getAbility().id === Abilities.DISGUISE) { + if (pokemon.getAbility().id === AbilityId.DISGUISE) { return i18next.t("battlePokemonForm:disguiseChange"); } return i18next.t("battlePokemonForm:formChange", { preName }); @@ -562,10 +562,10 @@ export function getSpeciesFormChangeMessage(pokemon: Pokemon, formChange: Specie /** * Gives a condition for form changing checking if a species is registered as caught in the player's dex data. * Used for fusion forms such as Kyurem and Necrozma. - * @param species {@linkcode Species} + * @param species {@linkcode SpeciesId} * @returns A {@linkcode SpeciesFormChangeCondition} checking if that species is registered as caught */ -function getSpeciesDependentFormChangeCondition(species: Species): SpeciesFormChangeCondition { +function getSpeciesDependentFormChangeCondition(species: SpeciesId): SpeciesFormChangeCondition { return new SpeciesFormChangeCondition(_p => !!globalScene.gameData.dexData[species].caughtAttr); } @@ -575,472 +575,472 @@ interface PokemonFormChanges { // biome-ignore format: manually formatted export const pokemonFormChanges: PokemonFormChanges = { - [Species.VENUSAUR]: [ - new SpeciesFormChange(Species.VENUSAUR, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.VENUSAURITE)), - new SpeciesFormChange(Species.VENUSAUR, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + [SpeciesId.VENUSAUR]: [ + new SpeciesFormChange(SpeciesId.VENUSAUR, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.VENUSAURITE)), + new SpeciesFormChange(SpeciesId.VENUSAUR, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) ], - [Species.BLASTOISE]: [ - new SpeciesFormChange(Species.BLASTOISE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.BLASTOISINITE)), - new SpeciesFormChange(Species.BLASTOISE, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + [SpeciesId.BLASTOISE]: [ + new SpeciesFormChange(SpeciesId.BLASTOISE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.BLASTOISINITE)), + new SpeciesFormChange(SpeciesId.BLASTOISE, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) ], - [Species.CHARIZARD]: [ - new SpeciesFormChange(Species.CHARIZARD, "", SpeciesFormKey.MEGA_X, new SpeciesFormChangeItemTrigger(FormChangeItem.CHARIZARDITE_X)), - new SpeciesFormChange(Species.CHARIZARD, "", SpeciesFormKey.MEGA_Y, new SpeciesFormChangeItemTrigger(FormChangeItem.CHARIZARDITE_Y)), - new SpeciesFormChange(Species.CHARIZARD, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + [SpeciesId.CHARIZARD]: [ + new SpeciesFormChange(SpeciesId.CHARIZARD, "", SpeciesFormKey.MEGA_X, new SpeciesFormChangeItemTrigger(FormChangeItem.CHARIZARDITE_X)), + new SpeciesFormChange(SpeciesId.CHARIZARD, "", SpeciesFormKey.MEGA_Y, new SpeciesFormChangeItemTrigger(FormChangeItem.CHARIZARDITE_Y)), + new SpeciesFormChange(SpeciesId.CHARIZARD, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) ], - [Species.BUTTERFREE]: [ - new SpeciesFormChange(Species.BUTTERFREE, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + [SpeciesId.BUTTERFREE]: [ + new SpeciesFormChange(SpeciesId.BUTTERFREE, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) ], - [Species.BEEDRILL]: [ - new SpeciesFormChange(Species.BEEDRILL, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.BEEDRILLITE)) + [SpeciesId.BEEDRILL]: [ + new SpeciesFormChange(SpeciesId.BEEDRILL, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.BEEDRILLITE)) ], - [Species.PIDGEOT]: [ - new SpeciesFormChange(Species.PIDGEOT, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.PIDGEOTITE)) + [SpeciesId.PIDGEOT]: [ + new SpeciesFormChange(SpeciesId.PIDGEOT, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.PIDGEOTITE)) ], - [Species.PIKACHU]: [ - new SpeciesFormChange(Species.PIKACHU, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), - new SpeciesFormChange(Species.PIKACHU, "partner", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + [SpeciesId.PIKACHU]: [ + new SpeciesFormChange(SpeciesId.PIKACHU, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), + new SpeciesFormChange(SpeciesId.PIKACHU, "partner", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) ], - [Species.MEOWTH]: [ - new SpeciesFormChange(Species.MEOWTH, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + [SpeciesId.MEOWTH]: [ + new SpeciesFormChange(SpeciesId.MEOWTH, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) ], - [Species.ALAKAZAM]: [ - new SpeciesFormChange(Species.ALAKAZAM, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.ALAKAZITE)) + [SpeciesId.ALAKAZAM]: [ + new SpeciesFormChange(SpeciesId.ALAKAZAM, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.ALAKAZITE)) ], - [Species.MACHAMP]: [ - new SpeciesFormChange(Species.MACHAMP, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + [SpeciesId.MACHAMP]: [ + new SpeciesFormChange(SpeciesId.MACHAMP, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) ], - [Species.SLOWBRO]: [ - new SpeciesFormChange(Species.SLOWBRO, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.SLOWBRONITE)) + [SpeciesId.SLOWBRO]: [ + new SpeciesFormChange(SpeciesId.SLOWBRO, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.SLOWBRONITE)) ], - [Species.GENGAR]: [ - new SpeciesFormChange(Species.GENGAR, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.GENGARITE)), - new SpeciesFormChange(Species.GENGAR, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + [SpeciesId.GENGAR]: [ + new SpeciesFormChange(SpeciesId.GENGAR, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.GENGARITE)), + new SpeciesFormChange(SpeciesId.GENGAR, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) ], - [Species.KINGLER]: [ - new SpeciesFormChange(Species.KINGLER, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + [SpeciesId.KINGLER]: [ + new SpeciesFormChange(SpeciesId.KINGLER, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) ], - [Species.KANGASKHAN]: [ - new SpeciesFormChange(Species.KANGASKHAN, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.KANGASKHANITE)) + [SpeciesId.KANGASKHAN]: [ + new SpeciesFormChange(SpeciesId.KANGASKHAN, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.KANGASKHANITE)) ], - [Species.PINSIR]: [ - new SpeciesFormChange(Species.PINSIR, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.PINSIRITE)) + [SpeciesId.PINSIR]: [ + new SpeciesFormChange(SpeciesId.PINSIR, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.PINSIRITE)) ], - [Species.GYARADOS]: [ - new SpeciesFormChange(Species.GYARADOS, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.GYARADOSITE)) + [SpeciesId.GYARADOS]: [ + new SpeciesFormChange(SpeciesId.GYARADOS, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.GYARADOSITE)) ], - [Species.LAPRAS]: [ - new SpeciesFormChange(Species.LAPRAS, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + [SpeciesId.LAPRAS]: [ + new SpeciesFormChange(SpeciesId.LAPRAS, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) ], - [Species.EEVEE]: [ - new SpeciesFormChange(Species.EEVEE, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), - new SpeciesFormChange(Species.EEVEE, "partner", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + [SpeciesId.EEVEE]: [ + new SpeciesFormChange(SpeciesId.EEVEE, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), + new SpeciesFormChange(SpeciesId.EEVEE, "partner", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) ], - [Species.SNORLAX]: [ - new SpeciesFormChange(Species.SNORLAX, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + [SpeciesId.SNORLAX]: [ + new SpeciesFormChange(SpeciesId.SNORLAX, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) ], - [Species.AERODACTYL]: [ - new SpeciesFormChange(Species.AERODACTYL, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.AERODACTYLITE)) + [SpeciesId.AERODACTYL]: [ + new SpeciesFormChange(SpeciesId.AERODACTYL, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.AERODACTYLITE)) ], - [Species.MEWTWO]: [ - new SpeciesFormChange(Species.MEWTWO, "", SpeciesFormKey.MEGA_X, new SpeciesFormChangeItemTrigger(FormChangeItem.MEWTWONITE_X)), - new SpeciesFormChange(Species.MEWTWO, "", SpeciesFormKey.MEGA_Y, new SpeciesFormChangeItemTrigger(FormChangeItem.MEWTWONITE_Y)) + [SpeciesId.MEWTWO]: [ + new SpeciesFormChange(SpeciesId.MEWTWO, "", SpeciesFormKey.MEGA_X, new SpeciesFormChangeItemTrigger(FormChangeItem.MEWTWONITE_X)), + new SpeciesFormChange(SpeciesId.MEWTWO, "", SpeciesFormKey.MEGA_Y, new SpeciesFormChangeItemTrigger(FormChangeItem.MEWTWONITE_Y)) ], - [Species.AMPHAROS]: [ - new SpeciesFormChange(Species.AMPHAROS, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.AMPHAROSITE)) + [SpeciesId.AMPHAROS]: [ + new SpeciesFormChange(SpeciesId.AMPHAROS, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.AMPHAROSITE)) ], - [Species.STEELIX]: [ - new SpeciesFormChange(Species.STEELIX, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.STEELIXITE)) + [SpeciesId.STEELIX]: [ + new SpeciesFormChange(SpeciesId.STEELIX, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.STEELIXITE)) ], - [Species.SCIZOR]: [ - new SpeciesFormChange(Species.SCIZOR, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.SCIZORITE)) + [SpeciesId.SCIZOR]: [ + new SpeciesFormChange(SpeciesId.SCIZOR, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.SCIZORITE)) ], - [Species.HERACROSS]: [ - new SpeciesFormChange(Species.HERACROSS, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.HERACRONITE)) + [SpeciesId.HERACROSS]: [ + new SpeciesFormChange(SpeciesId.HERACROSS, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.HERACRONITE)) ], - [Species.HOUNDOOM]: [ - new SpeciesFormChange(Species.HOUNDOOM, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.HOUNDOOMINITE)) + [SpeciesId.HOUNDOOM]: [ + new SpeciesFormChange(SpeciesId.HOUNDOOM, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.HOUNDOOMINITE)) ], - [Species.TYRANITAR]: [ - new SpeciesFormChange(Species.TYRANITAR, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.TYRANITARITE)) + [SpeciesId.TYRANITAR]: [ + new SpeciesFormChange(SpeciesId.TYRANITAR, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.TYRANITARITE)) ], - [Species.SCEPTILE]: [ - new SpeciesFormChange(Species.SCEPTILE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.SCEPTILITE)) + [SpeciesId.SCEPTILE]: [ + new SpeciesFormChange(SpeciesId.SCEPTILE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.SCEPTILITE)) ], - [Species.BLAZIKEN]: [ - new SpeciesFormChange(Species.BLAZIKEN, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.BLAZIKENITE)) + [SpeciesId.BLAZIKEN]: [ + new SpeciesFormChange(SpeciesId.BLAZIKEN, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.BLAZIKENITE)) ], - [Species.SWAMPERT]: [ - new SpeciesFormChange(Species.SWAMPERT, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.SWAMPERTITE)) + [SpeciesId.SWAMPERT]: [ + new SpeciesFormChange(SpeciesId.SWAMPERT, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.SWAMPERTITE)) ], - [Species.GARDEVOIR]: [ - new SpeciesFormChange(Species.GARDEVOIR, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.GARDEVOIRITE)) + [SpeciesId.GARDEVOIR]: [ + new SpeciesFormChange(SpeciesId.GARDEVOIR, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.GARDEVOIRITE)) ], - [Species.SABLEYE]: [ - new SpeciesFormChange(Species.SABLEYE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.SABLENITE)) + [SpeciesId.SABLEYE]: [ + new SpeciesFormChange(SpeciesId.SABLEYE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.SABLENITE)) ], - [Species.MAWILE]: [ - new SpeciesFormChange(Species.MAWILE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.MAWILITE)) + [SpeciesId.MAWILE]: [ + new SpeciesFormChange(SpeciesId.MAWILE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.MAWILITE)) ], - [Species.AGGRON]: [ - new SpeciesFormChange(Species.AGGRON, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.AGGRONITE)) + [SpeciesId.AGGRON]: [ + new SpeciesFormChange(SpeciesId.AGGRON, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.AGGRONITE)) ], - [Species.MEDICHAM]: [ - new SpeciesFormChange(Species.MEDICHAM, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.MEDICHAMITE)) + [SpeciesId.MEDICHAM]: [ + new SpeciesFormChange(SpeciesId.MEDICHAM, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.MEDICHAMITE)) ], - [Species.MANECTRIC]: [ - new SpeciesFormChange(Species.MANECTRIC, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.MANECTITE)) + [SpeciesId.MANECTRIC]: [ + new SpeciesFormChange(SpeciesId.MANECTRIC, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.MANECTITE)) ], - [Species.SHARPEDO]: [ - new SpeciesFormChange(Species.SHARPEDO, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.SHARPEDONITE)) + [SpeciesId.SHARPEDO]: [ + new SpeciesFormChange(SpeciesId.SHARPEDO, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.SHARPEDONITE)) ], - [Species.CAMERUPT]: [ - new SpeciesFormChange(Species.CAMERUPT, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.CAMERUPTITE)) + [SpeciesId.CAMERUPT]: [ + new SpeciesFormChange(SpeciesId.CAMERUPT, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.CAMERUPTITE)) ], - [Species.ALTARIA]: [ - new SpeciesFormChange(Species.ALTARIA, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.ALTARIANITE)) + [SpeciesId.ALTARIA]: [ + new SpeciesFormChange(SpeciesId.ALTARIA, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.ALTARIANITE)) ], - [Species.CASTFORM]: [ - new SpeciesFormChange(Species.CASTFORM, "", "sunny", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]), true), - new SpeciesFormChange(Species.CASTFORM, "rainy", "sunny", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]), true), - new SpeciesFormChange(Species.CASTFORM, "snowy", "sunny", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]), true), - new SpeciesFormChange(Species.CASTFORM, "", "rainy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [ WeatherType.RAIN, WeatherType.HEAVY_RAIN ]), true), - new SpeciesFormChange(Species.CASTFORM, "sunny", "rainy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [ WeatherType.RAIN, WeatherType.HEAVY_RAIN ]), true), - new SpeciesFormChange(Species.CASTFORM, "snowy", "rainy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [ WeatherType.RAIN, WeatherType.HEAVY_RAIN ]), true), - new SpeciesFormChange(Species.CASTFORM, "", "snowy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [ WeatherType.HAIL, WeatherType.SNOW ]), true), - new SpeciesFormChange(Species.CASTFORM, "sunny", "snowy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [ WeatherType.HAIL, WeatherType.SNOW ]), true), - new SpeciesFormChange(Species.CASTFORM, "rainy", "snowy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [ WeatherType.HAIL, WeatherType.SNOW ]), true), - new SpeciesFormChange(Species.CASTFORM, "sunny", "", new SpeciesFormChangeRevertWeatherFormTrigger(Abilities.FORECAST, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG ]), true), - new SpeciesFormChange(Species.CASTFORM, "rainy", "", new SpeciesFormChangeRevertWeatherFormTrigger(Abilities.FORECAST, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG ]), true), - new SpeciesFormChange(Species.CASTFORM, "snowy", "", new SpeciesFormChangeRevertWeatherFormTrigger(Abilities.FORECAST, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG ]), true), - new SpeciesFormChange(Species.CASTFORM, "sunny", "", new SpeciesFormChangeActiveTrigger(), true), - new SpeciesFormChange(Species.CASTFORM, "rainy", "", new SpeciesFormChangeActiveTrigger(), true), - new SpeciesFormChange(Species.CASTFORM, "snowy", "", new SpeciesFormChangeActiveTrigger(), true) + [SpeciesId.CASTFORM]: [ + new SpeciesFormChange(SpeciesId.CASTFORM, "", "sunny", new SpeciesFormChangeWeatherTrigger(AbilityId.FORECAST, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]), true), + new SpeciesFormChange(SpeciesId.CASTFORM, "rainy", "sunny", new SpeciesFormChangeWeatherTrigger(AbilityId.FORECAST, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]), true), + new SpeciesFormChange(SpeciesId.CASTFORM, "snowy", "sunny", new SpeciesFormChangeWeatherTrigger(AbilityId.FORECAST, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]), true), + new SpeciesFormChange(SpeciesId.CASTFORM, "", "rainy", new SpeciesFormChangeWeatherTrigger(AbilityId.FORECAST, [ WeatherType.RAIN, WeatherType.HEAVY_RAIN ]), true), + new SpeciesFormChange(SpeciesId.CASTFORM, "sunny", "rainy", new SpeciesFormChangeWeatherTrigger(AbilityId.FORECAST, [ WeatherType.RAIN, WeatherType.HEAVY_RAIN ]), true), + new SpeciesFormChange(SpeciesId.CASTFORM, "snowy", "rainy", new SpeciesFormChangeWeatherTrigger(AbilityId.FORECAST, [ WeatherType.RAIN, WeatherType.HEAVY_RAIN ]), true), + new SpeciesFormChange(SpeciesId.CASTFORM, "", "snowy", new SpeciesFormChangeWeatherTrigger(AbilityId.FORECAST, [ WeatherType.HAIL, WeatherType.SNOW ]), true), + new SpeciesFormChange(SpeciesId.CASTFORM, "sunny", "snowy", new SpeciesFormChangeWeatherTrigger(AbilityId.FORECAST, [ WeatherType.HAIL, WeatherType.SNOW ]), true), + new SpeciesFormChange(SpeciesId.CASTFORM, "rainy", "snowy", new SpeciesFormChangeWeatherTrigger(AbilityId.FORECAST, [ WeatherType.HAIL, WeatherType.SNOW ]), true), + new SpeciesFormChange(SpeciesId.CASTFORM, "sunny", "", new SpeciesFormChangeRevertWeatherFormTrigger(AbilityId.FORECAST, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG ]), true), + new SpeciesFormChange(SpeciesId.CASTFORM, "rainy", "", new SpeciesFormChangeRevertWeatherFormTrigger(AbilityId.FORECAST, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG ]), true), + new SpeciesFormChange(SpeciesId.CASTFORM, "snowy", "", new SpeciesFormChangeRevertWeatherFormTrigger(AbilityId.FORECAST, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG ]), true), + new SpeciesFormChange(SpeciesId.CASTFORM, "sunny", "", new SpeciesFormChangeActiveTrigger(), true), + new SpeciesFormChange(SpeciesId.CASTFORM, "rainy", "", new SpeciesFormChangeActiveTrigger(), true), + new SpeciesFormChange(SpeciesId.CASTFORM, "snowy", "", new SpeciesFormChangeActiveTrigger(), true) ], - [Species.BANETTE]: [ - new SpeciesFormChange(Species.BANETTE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.BANETTITE)) + [SpeciesId.BANETTE]: [ + new SpeciesFormChange(SpeciesId.BANETTE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.BANETTITE)) ], - [Species.ABSOL]: [ - new SpeciesFormChange(Species.ABSOL, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.ABSOLITE)) + [SpeciesId.ABSOL]: [ + new SpeciesFormChange(SpeciesId.ABSOL, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.ABSOLITE)) ], - [Species.GLALIE]: [ - new SpeciesFormChange(Species.GLALIE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.GLALITITE)) + [SpeciesId.GLALIE]: [ + new SpeciesFormChange(SpeciesId.GLALIE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.GLALITITE)) ], - [Species.SALAMENCE]: [ - new SpeciesFormChange(Species.SALAMENCE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.SALAMENCITE)) + [SpeciesId.SALAMENCE]: [ + new SpeciesFormChange(SpeciesId.SALAMENCE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.SALAMENCITE)) ], - [Species.METAGROSS]: [ - new SpeciesFormChange(Species.METAGROSS, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.METAGROSSITE)) + [SpeciesId.METAGROSS]: [ + new SpeciesFormChange(SpeciesId.METAGROSS, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.METAGROSSITE)) ], - [Species.LATIAS]: [ - new SpeciesFormChange(Species.LATIAS, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.LATIASITE)) + [SpeciesId.LATIAS]: [ + new SpeciesFormChange(SpeciesId.LATIAS, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.LATIASITE)) ], - [Species.LATIOS]: [ - new SpeciesFormChange(Species.LATIOS, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.LATIOSITE)) + [SpeciesId.LATIOS]: [ + new SpeciesFormChange(SpeciesId.LATIOS, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.LATIOSITE)) ], - [Species.KYOGRE]: [ - new SpeciesFormChange(Species.KYOGRE, "", SpeciesFormKey.PRIMAL, new SpeciesFormChangeItemTrigger(FormChangeItem.BLUE_ORB)) + [SpeciesId.KYOGRE]: [ + new SpeciesFormChange(SpeciesId.KYOGRE, "", SpeciesFormKey.PRIMAL, new SpeciesFormChangeItemTrigger(FormChangeItem.BLUE_ORB)) ], - [Species.GROUDON]: [ - new SpeciesFormChange(Species.GROUDON, "", SpeciesFormKey.PRIMAL, new SpeciesFormChangeItemTrigger(FormChangeItem.RED_ORB)) + [SpeciesId.GROUDON]: [ + new SpeciesFormChange(SpeciesId.GROUDON, "", SpeciesFormKey.PRIMAL, new SpeciesFormChangeItemTrigger(FormChangeItem.RED_ORB)) ], - [Species.RAYQUAZA]: [ - new SpeciesFormChange(Species.RAYQUAZA, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.RAYQUAZITE)) + [SpeciesId.RAYQUAZA]: [ + new SpeciesFormChange(SpeciesId.RAYQUAZA, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.RAYQUAZITE)) ], - [Species.DEOXYS]: [ - new SpeciesFormChange(Species.DEOXYS, "normal", "attack", new SpeciesFormChangeItemTrigger(FormChangeItem.SHARP_METEORITE)), - new SpeciesFormChange(Species.DEOXYS, "normal", "defense", new SpeciesFormChangeItemTrigger(FormChangeItem.HARD_METEORITE)), - new SpeciesFormChange(Species.DEOXYS, "normal", "speed", new SpeciesFormChangeItemTrigger(FormChangeItem.SMOOTH_METEORITE)) + [SpeciesId.DEOXYS]: [ + new SpeciesFormChange(SpeciesId.DEOXYS, "normal", "attack", new SpeciesFormChangeItemTrigger(FormChangeItem.SHARP_METEORITE)), + new SpeciesFormChange(SpeciesId.DEOXYS, "normal", "defense", new SpeciesFormChangeItemTrigger(FormChangeItem.HARD_METEORITE)), + new SpeciesFormChange(SpeciesId.DEOXYS, "normal", "speed", new SpeciesFormChangeItemTrigger(FormChangeItem.SMOOTH_METEORITE)) ], - [Species.CHERRIM]: [ - new SpeciesFormChange(Species.CHERRIM, "overcast", "sunshine", new SpeciesFormChangeWeatherTrigger(Abilities.FLOWER_GIFT, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]), true), - new SpeciesFormChange(Species.CHERRIM, "sunshine", "overcast", new SpeciesFormChangeRevertWeatherFormTrigger(Abilities.FLOWER_GIFT, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG, WeatherType.HAIL, WeatherType.HEAVY_RAIN, WeatherType.SNOW, WeatherType.RAIN ]), true), - new SpeciesFormChange(Species.CHERRIM, "sunshine", "overcast", new SpeciesFormChangeActiveTrigger(), true) + [SpeciesId.CHERRIM]: [ + new SpeciesFormChange(SpeciesId.CHERRIM, "overcast", "sunshine", new SpeciesFormChangeWeatherTrigger(AbilityId.FLOWER_GIFT, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]), true), + new SpeciesFormChange(SpeciesId.CHERRIM, "sunshine", "overcast", new SpeciesFormChangeRevertWeatherFormTrigger(AbilityId.FLOWER_GIFT, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG, WeatherType.HAIL, WeatherType.HEAVY_RAIN, WeatherType.SNOW, WeatherType.RAIN ]), true), + new SpeciesFormChange(SpeciesId.CHERRIM, "sunshine", "overcast", new SpeciesFormChangeActiveTrigger(), true) ], - [Species.LOPUNNY]: [ - new SpeciesFormChange(Species.LOPUNNY, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.LOPUNNITE)) + [SpeciesId.LOPUNNY]: [ + new SpeciesFormChange(SpeciesId.LOPUNNY, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.LOPUNNITE)) ], - [Species.GARCHOMP]: [ - new SpeciesFormChange(Species.GARCHOMP, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.GARCHOMPITE)) + [SpeciesId.GARCHOMP]: [ + new SpeciesFormChange(SpeciesId.GARCHOMP, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.GARCHOMPITE)) ], - [Species.LUCARIO]: [ - new SpeciesFormChange(Species.LUCARIO, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.LUCARIONITE)) + [SpeciesId.LUCARIO]: [ + new SpeciesFormChange(SpeciesId.LUCARIO, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.LUCARIONITE)) ], - [Species.ABOMASNOW]: [ - new SpeciesFormChange(Species.ABOMASNOW, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.ABOMASITE)) + [SpeciesId.ABOMASNOW]: [ + new SpeciesFormChange(SpeciesId.ABOMASNOW, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.ABOMASITE)) ], - [Species.GALLADE]: [ - new SpeciesFormChange(Species.GALLADE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.GALLADITE)) + [SpeciesId.GALLADE]: [ + new SpeciesFormChange(SpeciesId.GALLADE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.GALLADITE)) ], - [Species.AUDINO]: [ - new SpeciesFormChange(Species.AUDINO, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.AUDINITE)) + [SpeciesId.AUDINO]: [ + new SpeciesFormChange(SpeciesId.AUDINO, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.AUDINITE)) ], - [Species.DIALGA]: [ - new SpeciesFormChange(Species.DIALGA, "", SpeciesFormKey.ORIGIN, new SpeciesFormChangeItemTrigger(FormChangeItem.ADAMANT_CRYSTAL)) - ], - [Species.PALKIA]: [ - new SpeciesFormChange(Species.PALKIA, "", SpeciesFormKey.ORIGIN, new SpeciesFormChangeItemTrigger(FormChangeItem.LUSTROUS_GLOBE)) - ], - [Species.GIRATINA]: [ - new SpeciesFormChange(Species.GIRATINA, "altered", SpeciesFormKey.ORIGIN, new SpeciesFormChangeItemTrigger(FormChangeItem.GRISEOUS_CORE)) - ], - [Species.SHAYMIN]: [ - new SpeciesFormChange(Species.SHAYMIN, "land", "sky", new SpeciesFormChangeItemTrigger(FormChangeItem.GRACIDEA)), - ], - [Species.ARCEUS]: [ - new SpeciesFormChange(Species.ARCEUS, "normal", "fighting", new SpeciesFormChangeItemTrigger(FormChangeItem.FIST_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), - new SpeciesFormChange(Species.ARCEUS, "normal", "flying", new SpeciesFormChangeItemTrigger(FormChangeItem.SKY_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), - new SpeciesFormChange(Species.ARCEUS, "normal", "poison", new SpeciesFormChangeItemTrigger(FormChangeItem.TOXIC_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), - new SpeciesFormChange(Species.ARCEUS, "normal", "ground", new SpeciesFormChangeItemTrigger(FormChangeItem.EARTH_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), - new SpeciesFormChange(Species.ARCEUS, "normal", "rock", new SpeciesFormChangeItemTrigger(FormChangeItem.STONE_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), - new SpeciesFormChange(Species.ARCEUS, "normal", "bug", new SpeciesFormChangeItemTrigger(FormChangeItem.INSECT_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), - new SpeciesFormChange(Species.ARCEUS, "normal", "ghost", new SpeciesFormChangeItemTrigger(FormChangeItem.SPOOKY_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), - new SpeciesFormChange(Species.ARCEUS, "normal", "steel", new SpeciesFormChangeItemTrigger(FormChangeItem.IRON_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), - new SpeciesFormChange(Species.ARCEUS, "normal", "fire", new SpeciesFormChangeItemTrigger(FormChangeItem.FLAME_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), - new SpeciesFormChange(Species.ARCEUS, "normal", "water", new SpeciesFormChangeItemTrigger(FormChangeItem.SPLASH_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), - new SpeciesFormChange(Species.ARCEUS, "normal", "grass", new SpeciesFormChangeItemTrigger(FormChangeItem.MEADOW_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), - new SpeciesFormChange(Species.ARCEUS, "normal", "electric", new SpeciesFormChangeItemTrigger(FormChangeItem.ZAP_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), - new SpeciesFormChange(Species.ARCEUS, "normal", "psychic", new SpeciesFormChangeItemTrigger(FormChangeItem.MIND_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), - new SpeciesFormChange(Species.ARCEUS, "normal", "ice", new SpeciesFormChangeItemTrigger(FormChangeItem.ICICLE_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), - new SpeciesFormChange(Species.ARCEUS, "normal", "dragon", new SpeciesFormChangeItemTrigger(FormChangeItem.DRACO_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), - new SpeciesFormChange(Species.ARCEUS, "normal", "dark", new SpeciesFormChangeItemTrigger(FormChangeItem.DREAD_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), - new SpeciesFormChange(Species.ARCEUS, "normal", "fairy", new SpeciesFormChangeItemTrigger(FormChangeItem.PIXIE_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.MULTITYPE))), - ], - [Species.DARMANITAN]: [ - new SpeciesFormChange(Species.DARMANITAN, "", "zen", new SpeciesFormChangeAbilityTrigger(), true), - new SpeciesFormChange(Species.DARMANITAN, "zen", "", new SpeciesFormChangeAbilityTrigger(), true) - ], - [Species.GARBODOR]: [ - new SpeciesFormChange(Species.GARBODOR, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) - ], - [Species.TORNADUS]: [ - new SpeciesFormChange(Species.TORNADUS, SpeciesFormKey.INCARNATE, SpeciesFormKey.THERIAN, new SpeciesFormChangeItemTrigger(FormChangeItem.REVEAL_GLASS)) - ], - [Species.THUNDURUS]: [ - new SpeciesFormChange(Species.THUNDURUS, SpeciesFormKey.INCARNATE, SpeciesFormKey.THERIAN, new SpeciesFormChangeItemTrigger(FormChangeItem.REVEAL_GLASS)) - ], - [Species.LANDORUS]: [ - new SpeciesFormChange(Species.LANDORUS, SpeciesFormKey.INCARNATE, SpeciesFormKey.THERIAN, new SpeciesFormChangeItemTrigger(FormChangeItem.REVEAL_GLASS)) - ], - [Species.KYUREM]: [ - new SpeciesFormChange(Species.KYUREM, "", "black", new SpeciesFormChangeItemTrigger(FormChangeItem.DARK_STONE), false, getSpeciesDependentFormChangeCondition(Species.ZEKROM)), - new SpeciesFormChange(Species.KYUREM, "", "white", new SpeciesFormChangeItemTrigger(FormChangeItem.LIGHT_STONE), false, getSpeciesDependentFormChangeCondition(Species.RESHIRAM)) - ], - [Species.KELDEO]: [ - new SpeciesFormChange(Species.KELDEO, "ordinary", "resolute", new SpeciesFormChangeMoveLearnedTrigger(Moves.SECRET_SWORD), false, new SpeciesFormChangeCondition(() => globalScene.gameMode.isDaily !== true)), - new SpeciesFormChange(Species.KELDEO, "resolute", "ordinary", new SpeciesFormChangeMoveLearnedTrigger(Moves.SECRET_SWORD, false), false, new SpeciesFormChangeCondition(() => globalScene.gameMode.isDaily !== true)) - ], - [Species.MELOETTA]: [ - new SpeciesFormChange(Species.MELOETTA, "aria", "pirouette", new MeloettaFormChangePostMoveTrigger(Moves.RELIC_SONG), true), - new SpeciesFormChange(Species.MELOETTA, "pirouette", "aria", new MeloettaFormChangePostMoveTrigger(Moves.RELIC_SONG), true) - ], - [Species.GENESECT]: [ - new SpeciesFormChange(Species.GENESECT, "", "shock", new SpeciesFormChangeItemTrigger(FormChangeItem.SHOCK_DRIVE)), - new SpeciesFormChange(Species.GENESECT, "", "burn", new SpeciesFormChangeItemTrigger(FormChangeItem.BURN_DRIVE)), - new SpeciesFormChange(Species.GENESECT, "", "chill", new SpeciesFormChangeItemTrigger(FormChangeItem.CHILL_DRIVE)), - new SpeciesFormChange(Species.GENESECT, "", "douse", new SpeciesFormChangeItemTrigger(FormChangeItem.DOUSE_DRIVE)) - ], - [Species.GRENINJA]: [ - new SpeciesFormChange(Species.GRENINJA, "battle-bond", "ash", new SpeciesFormChangeAbilityTrigger(), true), - new SpeciesFormChange(Species.GRENINJA, "ash", "battle-bond", new SpeciesFormChangeAbilityTrigger(), true) - ], - [Species.PALAFIN] : [ - new SpeciesFormChange(Species.PALAFIN, "zero", "hero", new SpeciesFormChangeAbilityTrigger(), true), - new SpeciesFormChange(Species.PALAFIN, "hero", "zero", new SpeciesFormChangeAbilityTrigger(), true) - ], - [Species.AEGISLASH]: [ - new SpeciesFormChange(Species.AEGISLASH, "blade", "shield", new SpeciesFormChangePreMoveTrigger(Moves.KINGS_SHIELD), true, new SpeciesFormChangeCondition(p => p.hasAbility(Abilities.STANCE_CHANGE))), - new SpeciesFormChange(Species.AEGISLASH, "shield", "blade", new SpeciesFormChangePreMoveTrigger(m => allMoves[m].category !== MoveCategory.STATUS), true, new SpeciesFormChangeCondition(p => p.hasAbility(Abilities.STANCE_CHANGE))), - new SpeciesFormChange(Species.AEGISLASH, "blade", "shield", new SpeciesFormChangeActiveTrigger(false), true) - ], - [Species.XERNEAS]: [ - new SpeciesFormChange(Species.XERNEAS, "neutral", "active", new SpeciesFormChangeActiveTrigger(true), true), - new SpeciesFormChange(Species.XERNEAS, "active", "neutral", new SpeciesFormChangeActiveTrigger(false), true) - ], - [Species.ZYGARDE]: [ - new SpeciesFormChange(Species.ZYGARDE, "50-pc", "complete", new SpeciesFormChangeAbilityTrigger(), true), - new SpeciesFormChange(Species.ZYGARDE, "complete", "50-pc", new SpeciesFormChangeAbilityTrigger(), true), - new SpeciesFormChange(Species.ZYGARDE, "10-pc", "10-complete", new SpeciesFormChangeAbilityTrigger(), true), - new SpeciesFormChange(Species.ZYGARDE, "10-complete", "10-pc", new SpeciesFormChangeAbilityTrigger(), true) - ], - [Species.DIANCIE]: [ - new SpeciesFormChange(Species.DIANCIE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.DIANCITE)) - ], - [Species.HOOPA]: [ - new SpeciesFormChange(Species.HOOPA, "", "unbound", new SpeciesFormChangeItemTrigger(FormChangeItem.PRISON_BOTTLE)) - ], - [Species.WISHIWASHI]: [ - new SpeciesFormChange(Species.WISHIWASHI, "", "school", new SpeciesFormChangeAbilityTrigger(), true), - new SpeciesFormChange(Species.WISHIWASHI, "school", "", new SpeciesFormChangeAbilityTrigger(), true) - ], - [Species.SILVALLY]: [ - new SpeciesFormChange(Species.SILVALLY, "normal", "fighting", new SpeciesFormChangeItemTrigger(FormChangeItem.FIGHTING_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), - new SpeciesFormChange(Species.SILVALLY, "normal", "flying", new SpeciesFormChangeItemTrigger(FormChangeItem.FLYING_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), - new SpeciesFormChange(Species.SILVALLY, "normal", "poison", new SpeciesFormChangeItemTrigger(FormChangeItem.POISON_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), - new SpeciesFormChange(Species.SILVALLY, "normal", "ground", new SpeciesFormChangeItemTrigger(FormChangeItem.GROUND_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), - new SpeciesFormChange(Species.SILVALLY, "normal", "rock", new SpeciesFormChangeItemTrigger(FormChangeItem.ROCK_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), - new SpeciesFormChange(Species.SILVALLY, "normal", "bug", new SpeciesFormChangeItemTrigger(FormChangeItem.BUG_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), - new SpeciesFormChange(Species.SILVALLY, "normal", "ghost", new SpeciesFormChangeItemTrigger(FormChangeItem.GHOST_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), - new SpeciesFormChange(Species.SILVALLY, "normal", "steel", new SpeciesFormChangeItemTrigger(FormChangeItem.STEEL_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), - new SpeciesFormChange(Species.SILVALLY, "normal", "fire", new SpeciesFormChangeItemTrigger(FormChangeItem.FIRE_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), - new SpeciesFormChange(Species.SILVALLY, "normal", "water", new SpeciesFormChangeItemTrigger(FormChangeItem.WATER_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), - new SpeciesFormChange(Species.SILVALLY, "normal", "grass", new SpeciesFormChangeItemTrigger(FormChangeItem.GRASS_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), - new SpeciesFormChange(Species.SILVALLY, "normal", "electric", new SpeciesFormChangeItemTrigger(FormChangeItem.ELECTRIC_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), - new SpeciesFormChange(Species.SILVALLY, "normal", "psychic", new SpeciesFormChangeItemTrigger(FormChangeItem.PSYCHIC_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), - new SpeciesFormChange(Species.SILVALLY, "normal", "ice", new SpeciesFormChangeItemTrigger(FormChangeItem.ICE_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), - new SpeciesFormChange(Species.SILVALLY, "normal", "dragon", new SpeciesFormChangeItemTrigger(FormChangeItem.DRAGON_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), - new SpeciesFormChange(Species.SILVALLY, "normal", "dark", new SpeciesFormChangeItemTrigger(FormChangeItem.DARK_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))), - new SpeciesFormChange(Species.SILVALLY, "normal", "fairy", new SpeciesFormChangeItemTrigger(FormChangeItem.FAIRY_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(Abilities.RKS_SYSTEM))) - ], - [Species.MINIOR]: [ - new SpeciesFormChange(Species.MINIOR, "red-meteor", "red", new SpeciesFormChangeAbilityTrigger(), true), - new SpeciesFormChange(Species.MINIOR, "red", "red-meteor", new SpeciesFormChangeAbilityTrigger(), true), - new SpeciesFormChange(Species.MINIOR, "orange-meteor", "orange", new SpeciesFormChangeAbilityTrigger(), true), - new SpeciesFormChange(Species.MINIOR, "orange", "orange-meteor", new SpeciesFormChangeAbilityTrigger(), true), - new SpeciesFormChange(Species.MINIOR, "yellow-meteor", "yellow", new SpeciesFormChangeAbilityTrigger(), true), - new SpeciesFormChange(Species.MINIOR, "yellow", "yellow-meteor", new SpeciesFormChangeAbilityTrigger(), true), - new SpeciesFormChange(Species.MINIOR, "green-meteor", "green", new SpeciesFormChangeAbilityTrigger(), true), - new SpeciesFormChange(Species.MINIOR, "green", "green-meteor", new SpeciesFormChangeAbilityTrigger(), true), - new SpeciesFormChange(Species.MINIOR, "blue-meteor", "blue", new SpeciesFormChangeAbilityTrigger(), true), - new SpeciesFormChange(Species.MINIOR, "blue", "blue-meteor", new SpeciesFormChangeAbilityTrigger(), true), - new SpeciesFormChange(Species.MINIOR, "indigo-meteor", "indigo", new SpeciesFormChangeAbilityTrigger(), true), - new SpeciesFormChange(Species.MINIOR, "indigo", "indigo-meteor", new SpeciesFormChangeAbilityTrigger(), true), - new SpeciesFormChange(Species.MINIOR, "violet-meteor", "violet", new SpeciesFormChangeAbilityTrigger(), true), - new SpeciesFormChange(Species.MINIOR, "violet", "violet-meteor", new SpeciesFormChangeAbilityTrigger(), true) - ], - [Species.MIMIKYU]: [ - new SpeciesFormChange(Species.MIMIKYU, "disguised", "busted", new SpeciesFormChangeAbilityTrigger(), true), - new SpeciesFormChange(Species.MIMIKYU, "busted", "disguised", new SpeciesFormChangeAbilityTrigger(), true) - ], - [Species.NECROZMA]: [ - new SpeciesFormChange(Species.NECROZMA, "", "dawn-wings", new SpeciesFormChangeItemTrigger(FormChangeItem.N_LUNARIZER), false, getSpeciesDependentFormChangeCondition(Species.LUNALA)), - new SpeciesFormChange(Species.NECROZMA, "", "dusk-mane", new SpeciesFormChangeItemTrigger(FormChangeItem.N_SOLARIZER), false, getSpeciesDependentFormChangeCondition(Species.SOLGALEO)), - new SpeciesFormChange(Species.NECROZMA, "dawn-wings", "ultra", new SpeciesFormChangeItemTrigger(FormChangeItem.ULTRANECROZIUM_Z)), - new SpeciesFormChange(Species.NECROZMA, "dusk-mane", "ultra", new SpeciesFormChangeItemTrigger(FormChangeItem.ULTRANECROZIUM_Z)) - ], - [Species.MELMETAL]: [ - new SpeciesFormChange(Species.MELMETAL, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) - ], - [Species.RILLABOOM]: [ - new SpeciesFormChange(Species.RILLABOOM, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) - ], - [Species.CINDERACE]: [ - new SpeciesFormChange(Species.CINDERACE, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) - ], - [Species.INTELEON]: [ - new SpeciesFormChange(Species.INTELEON, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) - ], - [Species.CORVIKNIGHT]: [ - new SpeciesFormChange(Species.CORVIKNIGHT, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) - ], - [Species.ORBEETLE]: [ - new SpeciesFormChange(Species.ORBEETLE, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) - ], - [Species.DREDNAW]: [ - new SpeciesFormChange(Species.DREDNAW, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) - ], - [Species.COALOSSAL]: [ - new SpeciesFormChange(Species.COALOSSAL, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) - ], - [Species.FLAPPLE]: [ - new SpeciesFormChange(Species.FLAPPLE, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) - ], - [Species.APPLETUN]: [ - new SpeciesFormChange(Species.APPLETUN, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) - ], - [Species.SANDACONDA]: [ - new SpeciesFormChange(Species.SANDACONDA, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) - ], - [Species.CRAMORANT]: [ - new SpeciesFormChange(Species.CRAMORANT, "", "gulping", new SpeciesFormChangeAbilityTrigger, true, new SpeciesFormChangeCondition(p => p.getHpRatio() >= .5)), - new SpeciesFormChange(Species.CRAMORANT, "", "gorging", new SpeciesFormChangeAbilityTrigger, true, new SpeciesFormChangeCondition(p => p.getHpRatio() < .5)), - new SpeciesFormChange(Species.CRAMORANT, "gulping", "", new SpeciesFormChangeAbilityTrigger, true), - new SpeciesFormChange(Species.CRAMORANT, "gorging", "", new SpeciesFormChangeAbilityTrigger, true), - new SpeciesFormChange(Species.CRAMORANT, "gulping", "", new SpeciesFormChangeActiveTrigger(false), true), - new SpeciesFormChange(Species.CRAMORANT, "gorging", "", new SpeciesFormChangeActiveTrigger(false), true) - ], - [Species.TOXTRICITY]: [ - new SpeciesFormChange(Species.TOXTRICITY, "amped", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), - new SpeciesFormChange(Species.TOXTRICITY, "lowkey", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), - new SpeciesFormChange(Species.TOXTRICITY, SpeciesFormKey.GIGANTAMAX, "amped", new SpeciesFormChangeCompoundTrigger(new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS, false), new SpeciesDefaultFormMatchTrigger("amped"))), - new SpeciesFormChange(Species.TOXTRICITY, SpeciesFormKey.GIGANTAMAX, "lowkey", new SpeciesFormChangeCompoundTrigger(new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS, false), new SpeciesDefaultFormMatchTrigger("lowkey"))) - ], - [Species.CENTISKORCH]: [ - new SpeciesFormChange(Species.CENTISKORCH, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) - ], - [Species.HATTERENE]: [ - new SpeciesFormChange(Species.HATTERENE, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) - ], - [Species.GRIMMSNARL]: [ - new SpeciesFormChange(Species.GRIMMSNARL, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) - ], - [Species.ALCREMIE]: [ - new SpeciesFormChange(Species.ALCREMIE, "vanilla-cream", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), - new SpeciesFormChange(Species.ALCREMIE, "ruby-cream", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), - new SpeciesFormChange(Species.ALCREMIE, "matcha-cream", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), - new SpeciesFormChange(Species.ALCREMIE, "mint-cream", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), - new SpeciesFormChange(Species.ALCREMIE, "lemon-cream", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), - new SpeciesFormChange(Species.ALCREMIE, "salted-cream", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), - new SpeciesFormChange(Species.ALCREMIE, "ruby-swirl", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), - new SpeciesFormChange(Species.ALCREMIE, "caramel-swirl", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), - new SpeciesFormChange(Species.ALCREMIE, "rainbow-swirl", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) - ], - [Species.EISCUE]: [ - new SpeciesFormChange(Species.EISCUE, "", "no-ice", new SpeciesFormChangeAbilityTrigger(), true), - new SpeciesFormChange(Species.EISCUE, "no-ice", "", new SpeciesFormChangeAbilityTrigger(), true) - ], - [Species.MORPEKO]: [ - new SpeciesFormChange(Species.MORPEKO, "full-belly", "hangry", new SpeciesFormChangeAbilityTrigger(), true), - new SpeciesFormChange(Species.MORPEKO, "hangry", "full-belly", new SpeciesFormChangeAbilityTrigger(), true) - ], - [Species.COPPERAJAH]: [ - new SpeciesFormChange(Species.COPPERAJAH, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) - ], - [Species.DURALUDON]: [ - new SpeciesFormChange(Species.DURALUDON, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) - ], - [Species.ZACIAN]: [ - new SpeciesFormChange(Species.ZACIAN, "hero-of-many-battles", "crowned", new SpeciesFormChangeItemTrigger(FormChangeItem.RUSTED_SWORD)) - ], - [Species.ZAMAZENTA]: [ - new SpeciesFormChange(Species.ZAMAZENTA, "hero-of-many-battles", "crowned", new SpeciesFormChangeItemTrigger(FormChangeItem.RUSTED_SHIELD)) - ], - [Species.ETERNATUS]: [ - new SpeciesFormChange(Species.ETERNATUS, "", SpeciesFormKey.ETERNAMAX, new SpeciesFormChangeManualTrigger()), - new SpeciesFormChange(Species.ETERNATUS, "", SpeciesFormKey.ETERNAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) - ], - [Species.URSHIFU]: [ - new SpeciesFormChange(Species.URSHIFU, "single-strike", SpeciesFormKey.GIGANTAMAX_SINGLE, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), - new SpeciesFormChange(Species.URSHIFU, "rapid-strike", SpeciesFormKey.GIGANTAMAX_RAPID, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) - ], - [Species.CALYREX]: [ - new SpeciesFormChange(Species.CALYREX, "", "ice", new SpeciesFormChangeItemTrigger(FormChangeItem.ICY_REINS_OF_UNITY), false, getSpeciesDependentFormChangeCondition(Species.GLASTRIER)), - new SpeciesFormChange(Species.CALYREX, "", "shadow", new SpeciesFormChangeItemTrigger(FormChangeItem.SHADOW_REINS_OF_UNITY), false, getSpeciesDependentFormChangeCondition(Species.SPECTRIER)) - ], - [Species.ENAMORUS]: [ - new SpeciesFormChange(Species.ENAMORUS, SpeciesFormKey.INCARNATE, SpeciesFormKey.THERIAN, new SpeciesFormChangeItemTrigger(FormChangeItem.REVEAL_GLASS)) - ], - [Species.OGERPON]: [ - new SpeciesFormChange(Species.OGERPON, "teal-mask", "wellspring-mask", new SpeciesFormChangeItemTrigger(FormChangeItem.WELLSPRING_MASK)), - new SpeciesFormChange(Species.OGERPON, "teal-mask", "hearthflame-mask", new SpeciesFormChangeItemTrigger(FormChangeItem.HEARTHFLAME_MASK)), - new SpeciesFormChange(Species.OGERPON, "teal-mask", "cornerstone-mask", new SpeciesFormChangeItemTrigger(FormChangeItem.CORNERSTONE_MASK)), - new SpeciesFormChange(Species.OGERPON, "teal-mask", "teal-mask-tera", new SpeciesFormChangeTeraTrigger(), true), - new SpeciesFormChange(Species.OGERPON, "teal-mask-tera", "teal-mask", new SpeciesFormChangeLapseTeraTrigger(), true), - new SpeciesFormChange(Species.OGERPON, "wellspring-mask", "wellspring-mask-tera", new SpeciesFormChangeTeraTrigger(), true), - new SpeciesFormChange(Species.OGERPON, "wellspring-mask-tera", "wellspring-mask", new SpeciesFormChangeLapseTeraTrigger(), true), - new SpeciesFormChange(Species.OGERPON, "hearthflame-mask", "hearthflame-mask-tera", new SpeciesFormChangeTeraTrigger(), true), - new SpeciesFormChange(Species.OGERPON, "hearthflame-mask-tera", "hearthflame-mask", new SpeciesFormChangeLapseTeraTrigger(), true), - new SpeciesFormChange(Species.OGERPON, "cornerstone-mask", "cornerstone-mask-tera", new SpeciesFormChangeTeraTrigger(), true), - new SpeciesFormChange(Species.OGERPON, "cornerstone-mask-tera", "cornerstone-mask", new SpeciesFormChangeLapseTeraTrigger(), true) - ], - [Species.TERAPAGOS]: [ - new SpeciesFormChange(Species.TERAPAGOS, "", "terastal", new SpeciesFormChangeAbilityTrigger(), true), - new SpeciesFormChange(Species.TERAPAGOS, "terastal", "stellar", new SpeciesFormChangeTeraTrigger(), true), - new SpeciesFormChange(Species.TERAPAGOS, "stellar", "terastal", new SpeciesFormChangeLapseTeraTrigger(), true) - ], - [Species.GALAR_DARMANITAN]: [ - new SpeciesFormChange(Species.GALAR_DARMANITAN, "", "zen", new SpeciesFormChangeAbilityTrigger(), true), - new SpeciesFormChange(Species.GALAR_DARMANITAN, "zen", "", new SpeciesFormChangeAbilityTrigger(), true) + [SpeciesId.DIALGA]: [ + new SpeciesFormChange(SpeciesId.DIALGA, "", SpeciesFormKey.ORIGIN, new SpeciesFormChangeItemTrigger(FormChangeItem.ADAMANT_CRYSTAL)) + ], + [SpeciesId.PALKIA]: [ + new SpeciesFormChange(SpeciesId.PALKIA, "", SpeciesFormKey.ORIGIN, new SpeciesFormChangeItemTrigger(FormChangeItem.LUSTROUS_GLOBE)) + ], + [SpeciesId.GIRATINA]: [ + new SpeciesFormChange(SpeciesId.GIRATINA, "altered", SpeciesFormKey.ORIGIN, new SpeciesFormChangeItemTrigger(FormChangeItem.GRISEOUS_CORE)) + ], + [SpeciesId.SHAYMIN]: [ + new SpeciesFormChange(SpeciesId.SHAYMIN, "land", "sky", new SpeciesFormChangeItemTrigger(FormChangeItem.GRACIDEA)), + ], + [SpeciesId.ARCEUS]: [ + new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "fighting", new SpeciesFormChangeItemTrigger(FormChangeItem.FIST_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))), + new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "flying", new SpeciesFormChangeItemTrigger(FormChangeItem.SKY_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))), + new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "poison", new SpeciesFormChangeItemTrigger(FormChangeItem.TOXIC_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))), + new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "ground", new SpeciesFormChangeItemTrigger(FormChangeItem.EARTH_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))), + new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "rock", new SpeciesFormChangeItemTrigger(FormChangeItem.STONE_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))), + new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "bug", new SpeciesFormChangeItemTrigger(FormChangeItem.INSECT_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))), + new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "ghost", new SpeciesFormChangeItemTrigger(FormChangeItem.SPOOKY_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))), + new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "steel", new SpeciesFormChangeItemTrigger(FormChangeItem.IRON_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))), + new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "fire", new SpeciesFormChangeItemTrigger(FormChangeItem.FLAME_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))), + new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "water", new SpeciesFormChangeItemTrigger(FormChangeItem.SPLASH_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))), + new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "grass", new SpeciesFormChangeItemTrigger(FormChangeItem.MEADOW_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))), + new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "electric", new SpeciesFormChangeItemTrigger(FormChangeItem.ZAP_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))), + new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "psychic", new SpeciesFormChangeItemTrigger(FormChangeItem.MIND_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))), + new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "ice", new SpeciesFormChangeItemTrigger(FormChangeItem.ICICLE_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))), + new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "dragon", new SpeciesFormChangeItemTrigger(FormChangeItem.DRACO_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))), + new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "dark", new SpeciesFormChangeItemTrigger(FormChangeItem.DREAD_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))), + new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "fairy", new SpeciesFormChangeItemTrigger(FormChangeItem.PIXIE_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))), + ], + [SpeciesId.DARMANITAN]: [ + new SpeciesFormChange(SpeciesId.DARMANITAN, "", "zen", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(SpeciesId.DARMANITAN, "zen", "", new SpeciesFormChangeAbilityTrigger(), true) + ], + [SpeciesId.GARBODOR]: [ + new SpeciesFormChange(SpeciesId.GARBODOR, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + ], + [SpeciesId.TORNADUS]: [ + new SpeciesFormChange(SpeciesId.TORNADUS, SpeciesFormKey.INCARNATE, SpeciesFormKey.THERIAN, new SpeciesFormChangeItemTrigger(FormChangeItem.REVEAL_GLASS)) + ], + [SpeciesId.THUNDURUS]: [ + new SpeciesFormChange(SpeciesId.THUNDURUS, SpeciesFormKey.INCARNATE, SpeciesFormKey.THERIAN, new SpeciesFormChangeItemTrigger(FormChangeItem.REVEAL_GLASS)) + ], + [SpeciesId.LANDORUS]: [ + new SpeciesFormChange(SpeciesId.LANDORUS, SpeciesFormKey.INCARNATE, SpeciesFormKey.THERIAN, new SpeciesFormChangeItemTrigger(FormChangeItem.REVEAL_GLASS)) + ], + [SpeciesId.KYUREM]: [ + new SpeciesFormChange(SpeciesId.KYUREM, "", "black", new SpeciesFormChangeItemTrigger(FormChangeItem.DARK_STONE), false, getSpeciesDependentFormChangeCondition(SpeciesId.ZEKROM)), + new SpeciesFormChange(SpeciesId.KYUREM, "", "white", new SpeciesFormChangeItemTrigger(FormChangeItem.LIGHT_STONE), false, getSpeciesDependentFormChangeCondition(SpeciesId.RESHIRAM)) + ], + [SpeciesId.KELDEO]: [ + new SpeciesFormChange(SpeciesId.KELDEO, "ordinary", "resolute", new SpeciesFormChangeMoveLearnedTrigger(MoveId.SECRET_SWORD), false, new SpeciesFormChangeCondition(() => globalScene.gameMode.isDaily !== true)), + new SpeciesFormChange(SpeciesId.KELDEO, "resolute", "ordinary", new SpeciesFormChangeMoveLearnedTrigger(MoveId.SECRET_SWORD, false), false, new SpeciesFormChangeCondition(() => globalScene.gameMode.isDaily !== true)) + ], + [SpeciesId.MELOETTA]: [ + new SpeciesFormChange(SpeciesId.MELOETTA, "aria", "pirouette", new MeloettaFormChangePostMoveTrigger(MoveId.RELIC_SONG), true), + new SpeciesFormChange(SpeciesId.MELOETTA, "pirouette", "aria", new MeloettaFormChangePostMoveTrigger(MoveId.RELIC_SONG), true) + ], + [SpeciesId.GENESECT]: [ + new SpeciesFormChange(SpeciesId.GENESECT, "", "shock", new SpeciesFormChangeItemTrigger(FormChangeItem.SHOCK_DRIVE)), + new SpeciesFormChange(SpeciesId.GENESECT, "", "burn", new SpeciesFormChangeItemTrigger(FormChangeItem.BURN_DRIVE)), + new SpeciesFormChange(SpeciesId.GENESECT, "", "chill", new SpeciesFormChangeItemTrigger(FormChangeItem.CHILL_DRIVE)), + new SpeciesFormChange(SpeciesId.GENESECT, "", "douse", new SpeciesFormChangeItemTrigger(FormChangeItem.DOUSE_DRIVE)) + ], + [SpeciesId.GRENINJA]: [ + new SpeciesFormChange(SpeciesId.GRENINJA, "battle-bond", "ash", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(SpeciesId.GRENINJA, "ash", "battle-bond", new SpeciesFormChangeAbilityTrigger(), true) + ], + [SpeciesId.PALAFIN] : [ + new SpeciesFormChange(SpeciesId.PALAFIN, "zero", "hero", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(SpeciesId.PALAFIN, "hero", "zero", new SpeciesFormChangeAbilityTrigger(), true) + ], + [SpeciesId.AEGISLASH]: [ + new SpeciesFormChange(SpeciesId.AEGISLASH, "blade", "shield", new SpeciesFormChangePreMoveTrigger(MoveId.KINGS_SHIELD), true, new SpeciesFormChangeCondition(p => p.hasAbility(AbilityId.STANCE_CHANGE))), + new SpeciesFormChange(SpeciesId.AEGISLASH, "shield", "blade", new SpeciesFormChangePreMoveTrigger(m => allMoves[m].category !== MoveCategory.STATUS), true, new SpeciesFormChangeCondition(p => p.hasAbility(AbilityId.STANCE_CHANGE))), + new SpeciesFormChange(SpeciesId.AEGISLASH, "blade", "shield", new SpeciesFormChangeActiveTrigger(false), true) + ], + [SpeciesId.XERNEAS]: [ + new SpeciesFormChange(SpeciesId.XERNEAS, "neutral", "active", new SpeciesFormChangeActiveTrigger(true), true), + new SpeciesFormChange(SpeciesId.XERNEAS, "active", "neutral", new SpeciesFormChangeActiveTrigger(false), true) + ], + [SpeciesId.ZYGARDE]: [ + new SpeciesFormChange(SpeciesId.ZYGARDE, "50-pc", "complete", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(SpeciesId.ZYGARDE, "complete", "50-pc", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(SpeciesId.ZYGARDE, "10-pc", "10-complete", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(SpeciesId.ZYGARDE, "10-complete", "10-pc", new SpeciesFormChangeAbilityTrigger(), true) + ], + [SpeciesId.DIANCIE]: [ + new SpeciesFormChange(SpeciesId.DIANCIE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.DIANCITE)) + ], + [SpeciesId.HOOPA]: [ + new SpeciesFormChange(SpeciesId.HOOPA, "", "unbound", new SpeciesFormChangeItemTrigger(FormChangeItem.PRISON_BOTTLE)) + ], + [SpeciesId.WISHIWASHI]: [ + new SpeciesFormChange(SpeciesId.WISHIWASHI, "", "school", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(SpeciesId.WISHIWASHI, "school", "", new SpeciesFormChangeAbilityTrigger(), true) + ], + [SpeciesId.SILVALLY]: [ + new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "fighting", new SpeciesFormChangeItemTrigger(FormChangeItem.FIGHTING_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))), + new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "flying", new SpeciesFormChangeItemTrigger(FormChangeItem.FLYING_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))), + new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "poison", new SpeciesFormChangeItemTrigger(FormChangeItem.POISON_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))), + new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "ground", new SpeciesFormChangeItemTrigger(FormChangeItem.GROUND_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))), + new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "rock", new SpeciesFormChangeItemTrigger(FormChangeItem.ROCK_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))), + new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "bug", new SpeciesFormChangeItemTrigger(FormChangeItem.BUG_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))), + new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "ghost", new SpeciesFormChangeItemTrigger(FormChangeItem.GHOST_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))), + new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "steel", new SpeciesFormChangeItemTrigger(FormChangeItem.STEEL_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))), + new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "fire", new SpeciesFormChangeItemTrigger(FormChangeItem.FIRE_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))), + new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "water", new SpeciesFormChangeItemTrigger(FormChangeItem.WATER_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))), + new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "grass", new SpeciesFormChangeItemTrigger(FormChangeItem.GRASS_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))), + new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "electric", new SpeciesFormChangeItemTrigger(FormChangeItem.ELECTRIC_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))), + new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "psychic", new SpeciesFormChangeItemTrigger(FormChangeItem.PSYCHIC_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))), + new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "ice", new SpeciesFormChangeItemTrigger(FormChangeItem.ICE_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))), + new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "dragon", new SpeciesFormChangeItemTrigger(FormChangeItem.DRAGON_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))), + new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "dark", new SpeciesFormChangeItemTrigger(FormChangeItem.DARK_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))), + new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "fairy", new SpeciesFormChangeItemTrigger(FormChangeItem.FAIRY_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))) + ], + [SpeciesId.MINIOR]: [ + new SpeciesFormChange(SpeciesId.MINIOR, "red-meteor", "red", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(SpeciesId.MINIOR, "red", "red-meteor", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(SpeciesId.MINIOR, "orange-meteor", "orange", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(SpeciesId.MINIOR, "orange", "orange-meteor", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(SpeciesId.MINIOR, "yellow-meteor", "yellow", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(SpeciesId.MINIOR, "yellow", "yellow-meteor", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(SpeciesId.MINIOR, "green-meteor", "green", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(SpeciesId.MINIOR, "green", "green-meteor", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(SpeciesId.MINIOR, "blue-meteor", "blue", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(SpeciesId.MINIOR, "blue", "blue-meteor", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(SpeciesId.MINIOR, "indigo-meteor", "indigo", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(SpeciesId.MINIOR, "indigo", "indigo-meteor", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(SpeciesId.MINIOR, "violet-meteor", "violet", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(SpeciesId.MINIOR, "violet", "violet-meteor", new SpeciesFormChangeAbilityTrigger(), true) + ], + [SpeciesId.MIMIKYU]: [ + new SpeciesFormChange(SpeciesId.MIMIKYU, "disguised", "busted", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(SpeciesId.MIMIKYU, "busted", "disguised", new SpeciesFormChangeAbilityTrigger(), true) + ], + [SpeciesId.NECROZMA]: [ + new SpeciesFormChange(SpeciesId.NECROZMA, "", "dawn-wings", new SpeciesFormChangeItemTrigger(FormChangeItem.N_LUNARIZER), false, getSpeciesDependentFormChangeCondition(SpeciesId.LUNALA)), + new SpeciesFormChange(SpeciesId.NECROZMA, "", "dusk-mane", new SpeciesFormChangeItemTrigger(FormChangeItem.N_SOLARIZER), false, getSpeciesDependentFormChangeCondition(SpeciesId.SOLGALEO)), + new SpeciesFormChange(SpeciesId.NECROZMA, "dawn-wings", "ultra", new SpeciesFormChangeItemTrigger(FormChangeItem.ULTRANECROZIUM_Z)), + new SpeciesFormChange(SpeciesId.NECROZMA, "dusk-mane", "ultra", new SpeciesFormChangeItemTrigger(FormChangeItem.ULTRANECROZIUM_Z)) + ], + [SpeciesId.MELMETAL]: [ + new SpeciesFormChange(SpeciesId.MELMETAL, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + ], + [SpeciesId.RILLABOOM]: [ + new SpeciesFormChange(SpeciesId.RILLABOOM, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + ], + [SpeciesId.CINDERACE]: [ + new SpeciesFormChange(SpeciesId.CINDERACE, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + ], + [SpeciesId.INTELEON]: [ + new SpeciesFormChange(SpeciesId.INTELEON, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + ], + [SpeciesId.CORVIKNIGHT]: [ + new SpeciesFormChange(SpeciesId.CORVIKNIGHT, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + ], + [SpeciesId.ORBEETLE]: [ + new SpeciesFormChange(SpeciesId.ORBEETLE, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + ], + [SpeciesId.DREDNAW]: [ + new SpeciesFormChange(SpeciesId.DREDNAW, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + ], + [SpeciesId.COALOSSAL]: [ + new SpeciesFormChange(SpeciesId.COALOSSAL, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + ], + [SpeciesId.FLAPPLE]: [ + new SpeciesFormChange(SpeciesId.FLAPPLE, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + ], + [SpeciesId.APPLETUN]: [ + new SpeciesFormChange(SpeciesId.APPLETUN, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + ], + [SpeciesId.SANDACONDA]: [ + new SpeciesFormChange(SpeciesId.SANDACONDA, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + ], + [SpeciesId.CRAMORANT]: [ + new SpeciesFormChange(SpeciesId.CRAMORANT, "", "gulping", new SpeciesFormChangeAbilityTrigger, true, new SpeciesFormChangeCondition(p => p.getHpRatio() >= .5)), + new SpeciesFormChange(SpeciesId.CRAMORANT, "", "gorging", new SpeciesFormChangeAbilityTrigger, true, new SpeciesFormChangeCondition(p => p.getHpRatio() < .5)), + new SpeciesFormChange(SpeciesId.CRAMORANT, "gulping", "", new SpeciesFormChangeAbilityTrigger, true), + new SpeciesFormChange(SpeciesId.CRAMORANT, "gorging", "", new SpeciesFormChangeAbilityTrigger, true), + new SpeciesFormChange(SpeciesId.CRAMORANT, "gulping", "", new SpeciesFormChangeActiveTrigger(false), true), + new SpeciesFormChange(SpeciesId.CRAMORANT, "gorging", "", new SpeciesFormChangeActiveTrigger(false), true) + ], + [SpeciesId.TOXTRICITY]: [ + new SpeciesFormChange(SpeciesId.TOXTRICITY, "amped", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), + new SpeciesFormChange(SpeciesId.TOXTRICITY, "lowkey", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), + new SpeciesFormChange(SpeciesId.TOXTRICITY, SpeciesFormKey.GIGANTAMAX, "amped", new SpeciesFormChangeCompoundTrigger(new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS, false), new SpeciesDefaultFormMatchTrigger("amped"))), + new SpeciesFormChange(SpeciesId.TOXTRICITY, SpeciesFormKey.GIGANTAMAX, "lowkey", new SpeciesFormChangeCompoundTrigger(new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS, false), new SpeciesDefaultFormMatchTrigger("lowkey"))) + ], + [SpeciesId.CENTISKORCH]: [ + new SpeciesFormChange(SpeciesId.CENTISKORCH, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + ], + [SpeciesId.HATTERENE]: [ + new SpeciesFormChange(SpeciesId.HATTERENE, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + ], + [SpeciesId.GRIMMSNARL]: [ + new SpeciesFormChange(SpeciesId.GRIMMSNARL, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + ], + [SpeciesId.ALCREMIE]: [ + new SpeciesFormChange(SpeciesId.ALCREMIE, "vanilla-cream", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), + new SpeciesFormChange(SpeciesId.ALCREMIE, "ruby-cream", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), + new SpeciesFormChange(SpeciesId.ALCREMIE, "matcha-cream", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), + new SpeciesFormChange(SpeciesId.ALCREMIE, "mint-cream", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), + new SpeciesFormChange(SpeciesId.ALCREMIE, "lemon-cream", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), + new SpeciesFormChange(SpeciesId.ALCREMIE, "salted-cream", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), + new SpeciesFormChange(SpeciesId.ALCREMIE, "ruby-swirl", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), + new SpeciesFormChange(SpeciesId.ALCREMIE, "caramel-swirl", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), + new SpeciesFormChange(SpeciesId.ALCREMIE, "rainbow-swirl", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + ], + [SpeciesId.EISCUE]: [ + new SpeciesFormChange(SpeciesId.EISCUE, "", "no-ice", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(SpeciesId.EISCUE, "no-ice", "", new SpeciesFormChangeAbilityTrigger(), true) + ], + [SpeciesId.MORPEKO]: [ + new SpeciesFormChange(SpeciesId.MORPEKO, "full-belly", "hangry", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(SpeciesId.MORPEKO, "hangry", "full-belly", new SpeciesFormChangeAbilityTrigger(), true) + ], + [SpeciesId.COPPERAJAH]: [ + new SpeciesFormChange(SpeciesId.COPPERAJAH, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + ], + [SpeciesId.DURALUDON]: [ + new SpeciesFormChange(SpeciesId.DURALUDON, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + ], + [SpeciesId.ZACIAN]: [ + new SpeciesFormChange(SpeciesId.ZACIAN, "hero-of-many-battles", "crowned", new SpeciesFormChangeItemTrigger(FormChangeItem.RUSTED_SWORD)) + ], + [SpeciesId.ZAMAZENTA]: [ + new SpeciesFormChange(SpeciesId.ZAMAZENTA, "hero-of-many-battles", "crowned", new SpeciesFormChangeItemTrigger(FormChangeItem.RUSTED_SHIELD)) + ], + [SpeciesId.ETERNATUS]: [ + new SpeciesFormChange(SpeciesId.ETERNATUS, "", SpeciesFormKey.ETERNAMAX, new SpeciesFormChangeManualTrigger()), + new SpeciesFormChange(SpeciesId.ETERNATUS, "", SpeciesFormKey.ETERNAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + ], + [SpeciesId.URSHIFU]: [ + new SpeciesFormChange(SpeciesId.URSHIFU, "single-strike", SpeciesFormKey.GIGANTAMAX_SINGLE, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), + new SpeciesFormChange(SpeciesId.URSHIFU, "rapid-strike", SpeciesFormKey.GIGANTAMAX_RAPID, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + ], + [SpeciesId.CALYREX]: [ + new SpeciesFormChange(SpeciesId.CALYREX, "", "ice", new SpeciesFormChangeItemTrigger(FormChangeItem.ICY_REINS_OF_UNITY), false, getSpeciesDependentFormChangeCondition(SpeciesId.GLASTRIER)), + new SpeciesFormChange(SpeciesId.CALYREX, "", "shadow", new SpeciesFormChangeItemTrigger(FormChangeItem.SHADOW_REINS_OF_UNITY), false, getSpeciesDependentFormChangeCondition(SpeciesId.SPECTRIER)) + ], + [SpeciesId.ENAMORUS]: [ + new SpeciesFormChange(SpeciesId.ENAMORUS, SpeciesFormKey.INCARNATE, SpeciesFormKey.THERIAN, new SpeciesFormChangeItemTrigger(FormChangeItem.REVEAL_GLASS)) + ], + [SpeciesId.OGERPON]: [ + new SpeciesFormChange(SpeciesId.OGERPON, "teal-mask", "wellspring-mask", new SpeciesFormChangeItemTrigger(FormChangeItem.WELLSPRING_MASK)), + new SpeciesFormChange(SpeciesId.OGERPON, "teal-mask", "hearthflame-mask", new SpeciesFormChangeItemTrigger(FormChangeItem.HEARTHFLAME_MASK)), + new SpeciesFormChange(SpeciesId.OGERPON, "teal-mask", "cornerstone-mask", new SpeciesFormChangeItemTrigger(FormChangeItem.CORNERSTONE_MASK)), + new SpeciesFormChange(SpeciesId.OGERPON, "teal-mask", "teal-mask-tera", new SpeciesFormChangeTeraTrigger(), true), + new SpeciesFormChange(SpeciesId.OGERPON, "teal-mask-tera", "teal-mask", new SpeciesFormChangeLapseTeraTrigger(), true), + new SpeciesFormChange(SpeciesId.OGERPON, "wellspring-mask", "wellspring-mask-tera", new SpeciesFormChangeTeraTrigger(), true), + new SpeciesFormChange(SpeciesId.OGERPON, "wellspring-mask-tera", "wellspring-mask", new SpeciesFormChangeLapseTeraTrigger(), true), + new SpeciesFormChange(SpeciesId.OGERPON, "hearthflame-mask", "hearthflame-mask-tera", new SpeciesFormChangeTeraTrigger(), true), + new SpeciesFormChange(SpeciesId.OGERPON, "hearthflame-mask-tera", "hearthflame-mask", new SpeciesFormChangeLapseTeraTrigger(), true), + new SpeciesFormChange(SpeciesId.OGERPON, "cornerstone-mask", "cornerstone-mask-tera", new SpeciesFormChangeTeraTrigger(), true), + new SpeciesFormChange(SpeciesId.OGERPON, "cornerstone-mask-tera", "cornerstone-mask", new SpeciesFormChangeLapseTeraTrigger(), true) + ], + [SpeciesId.TERAPAGOS]: [ + new SpeciesFormChange(SpeciesId.TERAPAGOS, "", "terastal", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(SpeciesId.TERAPAGOS, "terastal", "stellar", new SpeciesFormChangeTeraTrigger(), true), + new SpeciesFormChange(SpeciesId.TERAPAGOS, "stellar", "terastal", new SpeciesFormChangeLapseTeraTrigger(), true) + ], + [SpeciesId.GALAR_DARMANITAN]: [ + new SpeciesFormChange(SpeciesId.GALAR_DARMANITAN, "", "zen", new SpeciesFormChangeAbilityTrigger(), true), + new SpeciesFormChange(SpeciesId.GALAR_DARMANITAN, "zen", "", new SpeciesFormChangeAbilityTrigger(), true) ], }; diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 5c97f360094..66ed0b09eeb 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -1,7 +1,7 @@ import type { Localizable } from "#app/interfaces/locales"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { PartyMemberStrength } from "#enums/party-member-strength"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { QuantizerCelebi, argbFromRgba, rgbaFromArgb } from "@material/material-color-utilities"; import i18next from "i18next"; import type { AnySound } from "#app/battle-scene"; @@ -44,42 +44,42 @@ export enum Region { } // TODO: this is horrible and will need to be removed once a refactor/cleanup of forms is executed. -export const normalForm: Species[] = [ - Species.PIKACHU, - Species.RAICHU, - Species.EEVEE, - Species.JOLTEON, - Species.FLAREON, - Species.VAPOREON, - Species.ESPEON, - Species.UMBREON, - Species.LEAFEON, - Species.GLACEON, - Species.SYLVEON, - Species.PICHU, - Species.ROTOM, - Species.DIALGA, - Species.PALKIA, - Species.KYUREM, - Species.GENESECT, - Species.FROAKIE, - Species.FROGADIER, - Species.GRENINJA, - Species.ROCKRUFF, - Species.NECROZMA, - Species.MAGEARNA, - Species.MARSHADOW, - Species.CRAMORANT, - Species.ZARUDE, - Species.CALYREX, +export const normalForm: SpeciesId[] = [ + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.EEVEE, + SpeciesId.JOLTEON, + SpeciesId.FLAREON, + SpeciesId.VAPOREON, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.SYLVEON, + SpeciesId.PICHU, + SpeciesId.ROTOM, + SpeciesId.DIALGA, + SpeciesId.PALKIA, + SpeciesId.KYUREM, + SpeciesId.GENESECT, + SpeciesId.FROAKIE, + SpeciesId.FROGADIER, + SpeciesId.GRENINJA, + SpeciesId.ROCKRUFF, + SpeciesId.NECROZMA, + SpeciesId.MAGEARNA, + SpeciesId.MARSHADOW, + SpeciesId.CRAMORANT, + SpeciesId.ZARUDE, + SpeciesId.CALYREX, ]; /** - * Gets the {@linkcode PokemonSpecies} object associated with the {@linkcode Species} enum given + * Gets the {@linkcode PokemonSpecies} object associated with the {@linkcode SpeciesId} enum given * @param species The species to fetch * @returns The associated {@linkcode PokemonSpecies} object */ -export function getPokemonSpecies(species: Species | Species[]): PokemonSpecies { +export function getPokemonSpecies(species: SpeciesId | SpeciesId[]): PokemonSpecies { // If a special pool (named trainers) is used here it CAN happen that they have a array as species (which means choose one of those two). So we catch that with this code block if (Array.isArray(species)) { // Pick a random species from the list @@ -91,7 +91,7 @@ export function getPokemonSpecies(species: Species | Species[]): PokemonSpecies return allSpecies[species - 1]; } -export function getPokemonSpeciesForm(species: Species, formIndex: number): PokemonSpeciesForm { +export function getPokemonSpeciesForm(species: SpeciesId, formIndex: number): PokemonSpeciesForm { const retSpecies: PokemonSpecies = species >= 2000 ? allSpecies.find(s => s.speciesId === species)! // TODO: is the bang correct? @@ -171,16 +171,16 @@ export function getFusedSpeciesName(speciesAName: string, speciesBName: string): export type PokemonSpeciesFilter = (species: PokemonSpecies) => boolean; export abstract class PokemonSpeciesForm { - public speciesId: Species; + public speciesId: SpeciesId; protected _formIndex: number; protected _generation: number; readonly type1: PokemonType; readonly type2: PokemonType | null; readonly height: number; readonly weight: number; - readonly ability1: Abilities; - readonly ability2: Abilities; - readonly abilityHidden: Abilities; + readonly ability1: AbilityId; + readonly ability2: AbilityId; + readonly abilityHidden: AbilityId; readonly baseTotal: number; readonly baseStats: number[]; readonly catchRate: number; @@ -194,9 +194,9 @@ export abstract class PokemonSpeciesForm { type2: PokemonType | null, height: number, weight: number, - ability1: Abilities, - ability2: Abilities, - abilityHidden: Abilities, + ability1: AbilityId, + ability2: AbilityId, + abilityHidden: AbilityId, baseTotal: number, baseHp: number, baseAtk: number, @@ -215,7 +215,7 @@ export abstract class PokemonSpeciesForm { this.height = height; this.weight = weight; this.ability1 = ability1; - this.ability2 = ability2 === Abilities.NONE ? ability1 : ability2; + this.ability2 = ability2 === AbilityId.NONE ? ability1 : ability2; this.abilityHidden = abilityHidden; this.baseTotal = baseTotal; this.baseStats = [baseHp, baseAtk, baseDef, baseSpatk, baseSpdef, baseSpd]; @@ -233,7 +233,7 @@ export abstract class PokemonSpeciesForm { * @param forStarter boolean to get the nonbaby form of a starter * @returns The species */ - getRootSpeciesId(forStarter = false): Species { + getRootSpeciesId(forStarter = false): SpeciesId { let ret = this.speciesId; while (pokemonPrevolutions.hasOwnProperty(ret) && (!forStarter || !speciesStarterCosts.hasOwnProperty(ret))) { ret = pokemonPrevolutions[ret]; @@ -266,7 +266,7 @@ export abstract class PokemonSpeciesForm { * @returns Number of abilities */ getAbilityCount(): number { - return this.abilityHidden !== Abilities.NONE ? 3 : 2; + return this.abilityHidden !== AbilityId.NONE ? 3 : 2; } /** @@ -274,8 +274,8 @@ export abstract class PokemonSpeciesForm { * @param abilityIndex Which ability to get (should only be 0-2) * @returns The id of the Ability */ - getAbility(abilityIndex: number): Abilities { - let ret: Abilities; + getAbility(abilityIndex: number): AbilityId { + let ret: AbilityId; if (abilityIndex === 0) { ret = this.ability1; } else if (abilityIndex === 1) { @@ -291,7 +291,7 @@ export abstract class PokemonSpeciesForm { * @param formIndex The form index to use, defaults to form for this species instance * @returns The id of the ability */ - getPassiveAbility(formIndex?: number): Abilities { + getPassiveAbility(formIndex?: number): AbilityId { if (isNullOrUndefined(formIndex)) { formIndex = this.formIndex; } @@ -308,7 +308,7 @@ export abstract class PokemonSpeciesForm { return starterPassiveAbilities[starterSpeciesId][0]; } console.log("No passive ability found for %s, using run away", this.speciesId); - return Abilities.RUN_AWAY; + return AbilityId.RUN_AWAY; } } return starterPassiveAbilities[starterSpeciesId][formIndex]; @@ -341,7 +341,7 @@ export abstract class PokemonSpeciesForm { } isTrainerForbidden(): boolean { - return [Species.ETERNAL_FLOETTE, Species.BLOODMOON_URSALUNA].includes(this.speciesId); + return [SpeciesId.ETERNAL_FLOETTE, SpeciesId.BLOODMOON_URSALUNA].includes(this.speciesId); } isRareRegional(): boolean { @@ -463,18 +463,18 @@ export abstract class PokemonSpeciesForm { } switch (this.speciesId) { - case Species.DODUO: - case Species.DODRIO: - case Species.MEGANIUM: - case Species.TORCHIC: - case Species.COMBUSKEN: - case Species.BLAZIKEN: - case Species.HIPPOPOTAS: - case Species.HIPPOWDON: - case Species.UNFEZANT: - case Species.FRILLISH: - case Species.JELLICENT: - case Species.PYROAR: + case SpeciesId.DODUO: + case SpeciesId.DODRIO: + case SpeciesId.MEGANIUM: + case SpeciesId.TORCHIC: + case SpeciesId.COMBUSKEN: + case SpeciesId.BLAZIKEN: + case SpeciesId.HIPPOPOTAS: + case SpeciesId.HIPPOWDON: + case SpeciesId.UNFEZANT: + case SpeciesId.FRILLISH: + case SpeciesId.JELLICENT: + case SpeciesId.PYROAR: ret += female ? "-f" : ""; break; } @@ -482,10 +482,10 @@ export abstract class PokemonSpeciesForm { let formSpriteKey = this.getFormSpriteKey(formIndex); if (formSpriteKey) { switch (this.speciesId) { - case Species.DUDUNSPARCE: + case SpeciesId.DUDUNSPARCE: break; - case Species.ZACIAN: - case Species.ZAMAZENTA: + case SpeciesId.ZACIAN: + case SpeciesId.ZAMAZENTA: // biome-ignore lint/suspicious/noFallthroughSwitchClause: Falls through if (formSpriteKey.startsWith("behemoth")) { formSpriteKey = "crowned"; @@ -507,11 +507,11 @@ export abstract class PokemonSpeciesForm { let speciesId = this.speciesId; if (this.speciesId > 2000) { switch (this.speciesId) { - case Species.GALAR_SLOWPOKE: + case SpeciesId.GALAR_SLOWPOKE: break; - case Species.ETERNAL_FLOETTE: + case SpeciesId.ETERNAL_FLOETTE: break; - case Species.BLOODMOON_URSALUNA: + case SpeciesId.BLOODMOON_URSALUNA: break; default: speciesId = speciesId % 2000; @@ -779,7 +779,7 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali readonly forms: PokemonForm[]; constructor( - id: Species, + id: SpeciesId, generation: number, subLegendary: boolean, legendary: boolean, @@ -789,9 +789,9 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali type2: PokemonType | null, height: number, weight: number, - ability1: Abilities, - ability2: Abilities, - abilityHidden: Abilities, + ability1: AbilityId, + ability2: AbilityId, + abilityHidden: AbilityId, baseTotal: number, baseHp: number, baseAtk: number, @@ -904,7 +904,7 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali return this.name; // Other special cases could be put here too } // Everything beyond this point essentially follows the pattern of FORMNAME_SPECIES - return i18next.t(`pokemonForm:appendForm.${Species[this.speciesId].split("_")[0]}`, { pokemonName: this.name }); + return i18next.t(`pokemonForm:appendForm.${SpeciesId[this.speciesId].split("_")[0]}`, { pokemonName: this.name }); } /** @@ -916,11 +916,11 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali getFormNameToDisplay(formIndex = 0, append = false): string { const formKey = this.forms?.[formIndex!]?.formKey; const formText = capitalizeString(formKey, "-", false, false) || ""; - const speciesName = capitalizeString(Species[this.speciesId], "_", true, false); + const speciesName = capitalizeString(SpeciesId[this.speciesId], "_", true, false); let ret = ""; const region = this.getRegion(); - if (this.speciesId === Species.ARCEUS) { + if (this.speciesId === SpeciesId.ARCEUS) { ret = i18next.t(`pokemonInfo:Type.${formText?.toUpperCase()}`); } else if ( [ @@ -939,25 +939,25 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali : i18next.t(`pokemonForm:battleForm.${formKey}`); } else if ( region === Region.NORMAL || - (this.speciesId === Species.GALAR_DARMANITAN && formIndex > 0) || - this.speciesId === Species.PALDEA_TAUROS + (this.speciesId === SpeciesId.GALAR_DARMANITAN && formIndex > 0) || + this.speciesId === SpeciesId.PALDEA_TAUROS ) { // More special cases can be added here const i18key = `pokemonForm:${speciesName}${formText}`; if (i18next.exists(i18key)) { ret = i18next.t(i18key); } else { - const rootSpeciesName = capitalizeString(Species[this.getRootSpeciesId()], "_", true, false); + const rootSpeciesName = capitalizeString(SpeciesId[this.getRootSpeciesId()], "_", true, false); const i18RootKey = `pokemonForm:${rootSpeciesName}${formText}`; ret = i18next.exists(i18RootKey) ? i18next.t(i18RootKey) : formText; } } else if (append) { // Everything beyond this has an expanded name return this.getExpandedSpeciesName(); - } else if (this.speciesId === Species.ETERNAL_FLOETTE) { + } else if (this.speciesId === SpeciesId.ETERNAL_FLOETTE) { // Not a real form, so the key is made up return i18next.t("pokemonForm:floetteEternalFlower"); - } else if (this.speciesId === Species.BLOODMOON_URSALUNA) { + } else if (this.speciesId === SpeciesId.BLOODMOON_URSALUNA) { // Not a real form, so the key is made up return i18next.t("pokemonForm:ursalunaBloodmoon"); } else { @@ -973,10 +973,10 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali } localize(): void { - this.name = i18next.t(`pokemon:${Species[this.speciesId].toLowerCase()}`); + this.name = i18next.t(`pokemon:${SpeciesId[this.speciesId].toLowerCase()}`); } - getWildSpeciesForLevel(level: number, allowEvolving: boolean, isBoss: boolean, gameMode: GameMode): Species { + getWildSpeciesForLevel(level: number, allowEvolving: boolean, isBoss: boolean, gameMode: GameMode): SpeciesId { return this.getSpeciesForLevel( level, allowEvolving, @@ -990,7 +990,7 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali allowEvolving = false, strength: PartyMemberStrength, currentWave = 0, - ): Species { + ): SpeciesId { return this.getSpeciesForLevel(level, allowEvolving, true, strength, currentWave); } @@ -1035,7 +1035,7 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali forTrainer = false, strength: PartyMemberStrength = PartyMemberStrength.WEAKER, currentWave = 0, - ): Species { + ): SpeciesId { const prevolutionLevels = this.getPrevolutionLevels(); if (prevolutionLevels.length) { @@ -1063,7 +1063,7 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali const easeInFunc = Phaser.Tweens.Builders.GetEaseFunction("Sine.easeIn"); const easeOutFunc = Phaser.Tweens.Builders.GetEaseFunction("Sine.easeOut"); - const evolutionPool: Map = new Map(); + const evolutionPool: Map = new Map(); let totalWeight = 0; let noEvolutionChance = 1; @@ -1192,7 +1192,7 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali (!this.forms.length || !e.evoFormKey || e.evoFormKey === this.forms[this.formIndex].formKey) && prevolutionLevels.every(pe => pe[0] !== Number.parseInt(p)) ) { - const speciesId = Number.parseInt(p) as Species; + const speciesId = Number.parseInt(p) as SpeciesId; const level = e.level; prevolutionLevels.push([speciesId, level]); const subPrevolutionLevels = getPokemonSpecies(speciesId).getPrevolutionLevels(); @@ -1276,7 +1276,7 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali species.legendary === legendary && species.mythical === mythical && (this.isTrainerForbidden() || !species.isTrainerForbidden()) && - species.speciesId !== Species.DITTO + species.speciesId !== SpeciesId.DITTO ); }; } @@ -1369,9 +1369,9 @@ export class PokemonForm extends PokemonSpeciesForm { type2: PokemonType | null, height: number, weight: number, - ability1: Abilities, - ability2: Abilities, - abilityHidden: Abilities, + ability1: AbilityId, + ability2: AbilityId, + abilityHidden: AbilityId, baseTotal: number, baseHp: number, baseAtk: number, @@ -1448,1776 +1448,1776 @@ export const allSpecies: PokemonSpecies[] = []; // biome-ignore format: manually formatted export function initSpecies() { allSpecies.push( - new PokemonSpecies(Species.BULBASAUR, 1, false, false, false, "Seed Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.7, 6.9, Abilities.OVERGROW, Abilities.NONE, Abilities.CHLOROPHYLL, 318, 45, 49, 49, 65, 65, 45, 45, 50, 64, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.IVYSAUR, 1, false, false, false, "Seed Pokémon", PokemonType.GRASS, PokemonType.POISON, 1, 13, Abilities.OVERGROW, Abilities.NONE, Abilities.CHLOROPHYLL, 405, 60, 62, 63, 80, 80, 60, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.VENUSAUR, 1, false, false, false, "Seed Pokémon", PokemonType.GRASS, PokemonType.POISON, 2, 100, Abilities.OVERGROW, Abilities.NONE, Abilities.CHLOROPHYLL, 525, 80, 82, 83, 100, 100, 80, 45, 50, 263, GrowthRate.MEDIUM_SLOW, 87.5, true, true, - new PokemonForm("Normal", "", PokemonType.GRASS, PokemonType.POISON, 2, 100, Abilities.OVERGROW, Abilities.NONE, Abilities.CHLOROPHYLL, 525, 80, 82, 83, 100, 100, 80, 45, 50, 263, true, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.GRASS, PokemonType.POISON, 2.4, 155.5, Abilities.THICK_FAT, Abilities.THICK_FAT, Abilities.THICK_FAT, 625, 80, 100, 123, 122, 120, 80, 45, 50, 263, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GRASS, PokemonType.POISON, 24, 999.9, Abilities.EFFECT_SPORE, Abilities.NONE, Abilities.EFFECT_SPORE, 625, 120, 122, 90, 108, 105, 80, 45, 50, 263, true), - ), - new PokemonSpecies(Species.CHARMANDER, 1, false, false, false, "Lizard Pokémon", PokemonType.FIRE, null, 0.6, 8.5, Abilities.BLAZE, Abilities.NONE, Abilities.SOLAR_POWER, 309, 39, 52, 43, 60, 50, 65, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.CHARMELEON, 1, false, false, false, "Flame Pokémon", PokemonType.FIRE, null, 1.1, 19, Abilities.BLAZE, Abilities.NONE, Abilities.SOLAR_POWER, 405, 58, 64, 58, 80, 65, 80, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.CHARIZARD, 1, false, false, false, "Flame Pokémon", PokemonType.FIRE, PokemonType.FLYING, 1.7, 90.5, Abilities.BLAZE, Abilities.NONE, Abilities.SOLAR_POWER, 534, 78, 84, 78, 109, 85, 100, 45, 50, 267, GrowthRate.MEDIUM_SLOW, 87.5, false, true, - new PokemonForm("Normal", "", PokemonType.FIRE, PokemonType.FLYING, 1.7, 90.5, Abilities.BLAZE, Abilities.NONE, Abilities.SOLAR_POWER, 534, 78, 84, 78, 109, 85, 100, 45, 50, 267, false, null, true), - new PokemonForm("Mega X", SpeciesFormKey.MEGA_X, PokemonType.FIRE, PokemonType.DRAGON, 1.7, 110.5, Abilities.TOUGH_CLAWS, Abilities.NONE, Abilities.TOUGH_CLAWS, 634, 78, 130, 111, 130, 85, 100, 45, 50, 267), - new PokemonForm("Mega Y", SpeciesFormKey.MEGA_Y, PokemonType.FIRE, PokemonType.FLYING, 1.7, 100.5, Abilities.DROUGHT, Abilities.NONE, Abilities.DROUGHT, 634, 78, 104, 78, 159, 115, 100, 45, 50, 267), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FIRE, PokemonType.FLYING, 28, 999.9, Abilities.BERSERK, Abilities.NONE, Abilities.BERSERK, 634, 118, 99, 88, 134, 95, 100, 45, 50, 267), - ), - new PokemonSpecies(Species.SQUIRTLE, 1, false, false, false, "Tiny Turtle Pokémon", PokemonType.WATER, null, 0.5, 9, Abilities.TORRENT, Abilities.NONE, Abilities.RAIN_DISH, 314, 44, 48, 65, 50, 64, 43, 45, 50, 63, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.WARTORTLE, 1, false, false, false, "Turtle Pokémon", PokemonType.WATER, null, 1, 22.5, Abilities.TORRENT, Abilities.NONE, Abilities.RAIN_DISH, 405, 59, 63, 80, 65, 80, 58, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.BLASTOISE, 1, false, false, false, "Shellfish Pokémon", PokemonType.WATER, null, 1.6, 85.5, Abilities.TORRENT, Abilities.NONE, Abilities.RAIN_DISH, 530, 79, 83, 100, 85, 105, 78, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, - new PokemonForm("Normal", "", PokemonType.WATER, null, 1.6, 85.5, Abilities.TORRENT, Abilities.NONE, Abilities.RAIN_DISH, 530, 79, 83, 100, 85, 105, 78, 45, 50, 265, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.WATER, null, 1.6, 101.1, Abilities.MEGA_LAUNCHER, Abilities.NONE, Abilities.MEGA_LAUNCHER, 630, 79, 103, 120, 135, 115, 78, 45, 50, 265), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, PokemonType.STEEL, 25, 999.9, Abilities.SHELL_ARMOR, Abilities.NONE, Abilities.SHELL_ARMOR, 630, 119, 108, 125, 105, 110, 63, 45, 50, 265), - ), - new PokemonSpecies(Species.CATERPIE, 1, false, false, false, "Worm Pokémon", PokemonType.BUG, null, 0.3, 2.9, Abilities.SHIELD_DUST, Abilities.NONE, Abilities.RUN_AWAY, 195, 45, 30, 35, 20, 20, 45, 255, 50, 39, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.METAPOD, 1, false, false, false, "Cocoon Pokémon", PokemonType.BUG, null, 0.7, 9.9, Abilities.SHED_SKIN, Abilities.NONE, Abilities.SHED_SKIN, 205, 50, 20, 55, 25, 25, 30, 120, 50, 72, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.BUTTERFREE, 1, false, false, false, "Butterfly Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.1, 32, Abilities.COMPOUND_EYES, Abilities.NONE, Abilities.TINTED_LENS, 395, 60, 45, 50, 90, 80, 70, 45, 50, 198, GrowthRate.MEDIUM_FAST, 50, true, true, - new PokemonForm("Normal", "", PokemonType.BUG, PokemonType.FLYING, 1.1, 32, Abilities.COMPOUND_EYES, Abilities.NONE, Abilities.TINTED_LENS, 395, 60, 45, 50, 90, 80, 70, 45, 50, 198, true, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.BUG, PokemonType.FLYING, 17, 999.9, Abilities.COMPOUND_EYES, Abilities.NONE, Abilities.COMPOUND_EYES, 495, 80, 40, 75, 120, 95, 85, 45, 50, 198, true), - ), - new PokemonSpecies(Species.WEEDLE, 1, false, false, false, "Hairy Bug Pokémon", PokemonType.BUG, PokemonType.POISON, 0.3, 3.2, Abilities.SHIELD_DUST, Abilities.NONE, Abilities.RUN_AWAY, 195, 40, 35, 30, 20, 20, 50, 255, 70, 39, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.KAKUNA, 1, false, false, false, "Cocoon Pokémon", PokemonType.BUG, PokemonType.POISON, 0.6, 10, Abilities.SHED_SKIN, Abilities.NONE, Abilities.SHED_SKIN, 205, 45, 25, 50, 25, 25, 35, 120, 70, 72, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.BEEDRILL, 1, false, false, false, "Poison Bee Pokémon", PokemonType.BUG, PokemonType.POISON, 1, 29.5, Abilities.SWARM, Abilities.NONE, Abilities.SNIPER, 395, 65, 90, 40, 45, 80, 75, 45, 70, 198, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.BUG, PokemonType.POISON, 1, 29.5, Abilities.SWARM, Abilities.NONE, Abilities.SNIPER, 395, 65, 90, 40, 45, 80, 75, 45, 70, 198, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.BUG, PokemonType.POISON, 1.4, 40.5, Abilities.ADAPTABILITY, Abilities.NONE, Abilities.ADAPTABILITY, 495, 65, 150, 40, 15, 80, 145, 45, 70, 198), - ), - new PokemonSpecies(Species.PIDGEY, 1, false, false, false, "Tiny Bird Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.3, 1.8, Abilities.KEEN_EYE, Abilities.TANGLED_FEET, Abilities.BIG_PECKS, 251, 40, 45, 40, 35, 35, 56, 255, 70, 50, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.PIDGEOTTO, 1, false, false, false, "Bird Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.1, 30, Abilities.KEEN_EYE, Abilities.TANGLED_FEET, Abilities.BIG_PECKS, 349, 63, 60, 55, 50, 50, 71, 120, 70, 122, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.PIDGEOT, 1, false, false, false, "Bird Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.5, 39.5, Abilities.KEEN_EYE, Abilities.TANGLED_FEET, Abilities.BIG_PECKS, 479, 83, 80, 75, 70, 70, 101, 45, 70, 240, GrowthRate.MEDIUM_SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.NORMAL, PokemonType.FLYING, 1.5, 39.5, Abilities.KEEN_EYE, Abilities.TANGLED_FEET, Abilities.BIG_PECKS, 479, 83, 80, 75, 70, 70, 101, 45, 70, 240, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.NORMAL, PokemonType.FLYING, 2.2, 50.5, Abilities.NO_GUARD, Abilities.NO_GUARD, Abilities.NO_GUARD, 579, 83, 80, 80, 135, 80, 121, 45, 70, 240), - ), - new PokemonSpecies(Species.RATTATA, 1, false, false, false, "Mouse Pokémon", PokemonType.NORMAL, null, 0.3, 3.5, Abilities.RUN_AWAY, Abilities.GUTS, Abilities.HUSTLE, 253, 30, 56, 35, 25, 35, 72, 255, 70, 51, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.RATICATE, 1, false, false, false, "Mouse Pokémon", PokemonType.NORMAL, null, 0.7, 18.5, Abilities.RUN_AWAY, Abilities.GUTS, Abilities.HUSTLE, 413, 55, 81, 60, 50, 70, 97, 127, 70, 145, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.SPEAROW, 1, false, false, false, "Tiny Bird Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.3, 2, Abilities.KEEN_EYE, Abilities.NONE, Abilities.SNIPER, 262, 40, 60, 30, 31, 31, 70, 255, 70, 52, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.FEAROW, 1, false, false, false, "Beak Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.2, 38, Abilities.KEEN_EYE, Abilities.NONE, Abilities.SNIPER, 442, 65, 90, 65, 61, 61, 100, 90, 70, 155, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.EKANS, 1, false, false, false, "Snake Pokémon", PokemonType.POISON, null, 2, 6.9, Abilities.INTIMIDATE, Abilities.SHED_SKIN, Abilities.UNNERVE, 288, 35, 60, 44, 40, 54, 55, 255, 70, 58, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.ARBOK, 1, false, false, false, "Cobra Pokémon", PokemonType.POISON, null, 3.5, 65, Abilities.INTIMIDATE, Abilities.SHED_SKIN, Abilities.UNNERVE, 448, 60, 95, 69, 65, 79, 80, 90, 70, 157, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.PIKACHU, 1, false, false, false, "Mouse Pokémon", PokemonType.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 320, 35, 55, 40, 50, 50, 90, 190, 50, 112, GrowthRate.MEDIUM_FAST, 50, true, true, - new PokemonForm("Normal", "", PokemonType.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 320, 35, 55, 40, 50, 50, 90, 190, 50, 112, true, null, true), - new PokemonForm("Partner", "partner", PokemonType.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), - new PokemonForm("Cosplay", "cosplay", PokemonType.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom - new PokemonForm("Cool Cosplay", "cool-cosplay", PokemonType.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom - new PokemonForm("Beauty Cosplay", "beauty-cosplay", PokemonType.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom - new PokemonForm("Cute Cosplay", "cute-cosplay", PokemonType.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom - new PokemonForm("Smart Cosplay", "smart-cosplay", PokemonType.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom - new PokemonForm("Tough Cosplay", "tough-cosplay", PokemonType.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.ELECTRIC, null, 21, 999.9, Abilities.LIGHTNING_ROD, Abilities.NONE, Abilities.LIGHTNING_ROD, 530, 125, 95, 60, 90, 70, 90, 190, 50, 112), //+100 BST from Partner Form - ), - new PokemonSpecies(Species.RAICHU, 1, false, false, false, "Mouse Pokémon", PokemonType.ELECTRIC, null, 0.8, 30, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 485, 60, 90, 55, 90, 80, 110, 75, 50, 243, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.SANDSHREW, 1, false, false, false, "Mouse Pokémon", PokemonType.GROUND, null, 0.6, 12, Abilities.SAND_VEIL, Abilities.NONE, Abilities.SAND_RUSH, 300, 50, 75, 85, 20, 30, 40, 255, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.SANDSLASH, 1, false, false, false, "Mouse Pokémon", PokemonType.GROUND, null, 1, 29.5, Abilities.SAND_VEIL, Abilities.NONE, Abilities.SAND_RUSH, 450, 75, 100, 110, 45, 55, 65, 90, 50, 158, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.NIDORAN_F, 1, false, false, false, "Poison Pin Pokémon", PokemonType.POISON, null, 0.4, 7, Abilities.POISON_POINT, Abilities.RIVALRY, Abilities.HUSTLE, 275, 55, 47, 52, 40, 40, 41, 235, 50, 55, GrowthRate.MEDIUM_SLOW, 0, false), - new PokemonSpecies(Species.NIDORINA, 1, false, false, false, "Poison Pin Pokémon", PokemonType.POISON, null, 0.8, 20, Abilities.POISON_POINT, Abilities.RIVALRY, Abilities.HUSTLE, 365, 70, 62, 67, 55, 55, 56, 120, 50, 128, GrowthRate.MEDIUM_SLOW, 0, false), - new PokemonSpecies(Species.NIDOQUEEN, 1, false, false, false, "Drill Pokémon", PokemonType.POISON, PokemonType.GROUND, 1.3, 60, Abilities.POISON_POINT, Abilities.RIVALRY, Abilities.SHEER_FORCE, 505, 90, 92, 87, 75, 85, 76, 45, 50, 253, GrowthRate.MEDIUM_SLOW, 0, false), - new PokemonSpecies(Species.NIDORAN_M, 1, false, false, false, "Poison Pin Pokémon", PokemonType.POISON, null, 0.5, 9, Abilities.POISON_POINT, Abilities.RIVALRY, Abilities.HUSTLE, 273, 46, 57, 40, 40, 40, 50, 235, 50, 55, GrowthRate.MEDIUM_SLOW, 100, false), - new PokemonSpecies(Species.NIDORINO, 1, false, false, false, "Poison Pin Pokémon", PokemonType.POISON, null, 0.9, 19.5, Abilities.POISON_POINT, Abilities.RIVALRY, Abilities.HUSTLE, 365, 61, 72, 57, 55, 55, 65, 120, 50, 128, GrowthRate.MEDIUM_SLOW, 100, false), - new PokemonSpecies(Species.NIDOKING, 1, false, false, false, "Drill Pokémon", PokemonType.POISON, PokemonType.GROUND, 1.4, 62, Abilities.POISON_POINT, Abilities.RIVALRY, Abilities.SHEER_FORCE, 505, 81, 102, 77, 85, 75, 85, 45, 50, 253, GrowthRate.MEDIUM_SLOW, 100, false), - new PokemonSpecies(Species.CLEFAIRY, 1, false, false, false, "Fairy Pokémon", PokemonType.FAIRY, null, 0.6, 7.5, Abilities.CUTE_CHARM, Abilities.MAGIC_GUARD, Abilities.FRIEND_GUARD, 323, 70, 45, 48, 60, 65, 35, 150, 140, 113, GrowthRate.FAST, 25, false), - new PokemonSpecies(Species.CLEFABLE, 1, false, false, false, "Fairy Pokémon", PokemonType.FAIRY, null, 1.3, 40, Abilities.CUTE_CHARM, Abilities.MAGIC_GUARD, Abilities.UNAWARE, 483, 95, 70, 73, 95, 90, 60, 25, 140, 242, GrowthRate.FAST, 25, false), - new PokemonSpecies(Species.VULPIX, 1, false, false, false, "Fox Pokémon", PokemonType.FIRE, null, 0.6, 9.9, Abilities.FLASH_FIRE, Abilities.NONE, Abilities.DROUGHT, 299, 38, 41, 40, 50, 65, 65, 190, 50, 60, GrowthRate.MEDIUM_FAST, 25, false), - new PokemonSpecies(Species.NINETALES, 1, false, false, false, "Fox Pokémon", PokemonType.FIRE, null, 1.1, 19.9, Abilities.FLASH_FIRE, Abilities.NONE, Abilities.DROUGHT, 505, 73, 76, 75, 81, 100, 100, 75, 50, 177, GrowthRate.MEDIUM_FAST, 25, false), - new PokemonSpecies(Species.JIGGLYPUFF, 1, false, false, false, "Balloon Pokémon", PokemonType.NORMAL, PokemonType.FAIRY, 0.5, 5.5, Abilities.CUTE_CHARM, Abilities.COMPETITIVE, Abilities.FRIEND_GUARD, 270, 115, 45, 20, 45, 25, 20, 170, 50, 95, GrowthRate.FAST, 25, false), - new PokemonSpecies(Species.WIGGLYTUFF, 1, false, false, false, "Balloon Pokémon", PokemonType.NORMAL, PokemonType.FAIRY, 1, 12, Abilities.CUTE_CHARM, Abilities.COMPETITIVE, Abilities.FRISK, 435, 140, 70, 45, 85, 50, 45, 50, 50, 218, GrowthRate.FAST, 25, false), - new PokemonSpecies(Species.ZUBAT, 1, false, false, false, "Bat Pokémon", PokemonType.POISON, PokemonType.FLYING, 0.8, 7.5, Abilities.INNER_FOCUS, Abilities.NONE, Abilities.INFILTRATOR, 245, 40, 45, 35, 30, 40, 55, 255, 50, 49, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.GOLBAT, 1, false, false, false, "Bat Pokémon", PokemonType.POISON, PokemonType.FLYING, 1.6, 55, Abilities.INNER_FOCUS, Abilities.NONE, Abilities.INFILTRATOR, 455, 75, 80, 70, 65, 75, 90, 90, 50, 159, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.ODDISH, 1, false, false, false, "Weed Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.5, 5.4, Abilities.CHLOROPHYLL, Abilities.NONE, Abilities.RUN_AWAY, 320, 45, 50, 55, 75, 65, 30, 255, 50, 64, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.GLOOM, 1, false, false, false, "Weed Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.8, 8.6, Abilities.CHLOROPHYLL, Abilities.NONE, Abilities.STENCH, 395, 60, 65, 70, 85, 75, 40, 120, 50, 138, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(Species.VILEPLUME, 1, false, false, false, "Flower Pokémon", PokemonType.GRASS, PokemonType.POISON, 1.2, 18.6, Abilities.CHLOROPHYLL, Abilities.NONE, Abilities.EFFECT_SPORE, 490, 75, 80, 85, 110, 90, 50, 45, 50, 245, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(Species.PARAS, 1, false, false, false, "Mushroom Pokémon", PokemonType.BUG, PokemonType.GRASS, 0.3, 5.4, Abilities.EFFECT_SPORE, Abilities.DRY_SKIN, Abilities.DAMP, 285, 35, 70, 55, 45, 55, 25, 190, 70, 57, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.PARASECT, 1, false, false, false, "Mushroom Pokémon", PokemonType.BUG, PokemonType.GRASS, 1, 29.5, Abilities.EFFECT_SPORE, Abilities.DRY_SKIN, Abilities.DAMP, 405, 60, 95, 80, 60, 80, 30, 75, 70, 142, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.VENONAT, 1, false, false, false, "Insect Pokémon", PokemonType.BUG, PokemonType.POISON, 1, 30, Abilities.COMPOUND_EYES, Abilities.TINTED_LENS, Abilities.RUN_AWAY, 305, 60, 55, 50, 40, 55, 45, 190, 70, 61, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.VENOMOTH, 1, false, false, false, "Poison Moth Pokémon", PokemonType.BUG, PokemonType.POISON, 1.5, 12.5, Abilities.SHIELD_DUST, Abilities.TINTED_LENS, Abilities.WONDER_SKIN, 450, 70, 65, 60, 90, 75, 90, 75, 70, 158, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.DIGLETT, 1, false, false, false, "Mole Pokémon", PokemonType.GROUND, null, 0.2, 0.8, Abilities.SAND_VEIL, Abilities.ARENA_TRAP, Abilities.SAND_FORCE, 265, 10, 55, 25, 35, 45, 95, 255, 50, 53, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.DUGTRIO, 1, false, false, false, "Mole Pokémon", PokemonType.GROUND, null, 0.7, 33.3, Abilities.SAND_VEIL, Abilities.ARENA_TRAP, Abilities.SAND_FORCE, 425, 35, 100, 50, 50, 70, 120, 50, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.MEOWTH, 1, false, false, false, "Scratch Cat Pokémon", PokemonType.NORMAL, null, 0.4, 4.2, Abilities.PICKUP, Abilities.TECHNICIAN, Abilities.UNNERVE, 290, 40, 45, 35, 40, 40, 90, 255, 50, 58, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.NORMAL, null, 0.4, 4.2, Abilities.PICKUP, Abilities.TECHNICIAN, Abilities.UNNERVE, 290, 40, 45, 35, 40, 40, 90, 255, 50, 58, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.NORMAL, null, 33, 999.9, Abilities.TECHNICIAN, Abilities.TECHNICIAN, Abilities.TECHNICIAN, 540, 115, 110, 65, 65, 70, 115, 255, 50, 58), //+100 BST from Persian - ), - new PokemonSpecies(Species.PERSIAN, 1, false, false, false, "Classy Cat Pokémon", PokemonType.NORMAL, null, 1, 32, Abilities.LIMBER, Abilities.TECHNICIAN, Abilities.UNNERVE, 440, 65, 70, 60, 65, 65, 115, 90, 50, 154, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.PSYDUCK, 1, false, false, false, "Duck Pokémon", PokemonType.WATER, null, 0.8, 19.6, Abilities.DAMP, Abilities.CLOUD_NINE, Abilities.SWIFT_SWIM, 320, 50, 52, 48, 65, 50, 55, 190, 50, 64, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.GOLDUCK, 1, false, false, false, "Duck Pokémon", PokemonType.WATER, null, 1.7, 76.6, Abilities.DAMP, Abilities.CLOUD_NINE, Abilities.SWIFT_SWIM, 500, 80, 82, 78, 95, 80, 85, 75, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.MANKEY, 1, false, false, false, "Pig Monkey Pokémon", PokemonType.FIGHTING, null, 0.5, 28, Abilities.VITAL_SPIRIT, Abilities.ANGER_POINT, Abilities.DEFIANT, 305, 40, 80, 35, 35, 45, 70, 190, 70, 61, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.PRIMEAPE, 1, false, false, false, "Pig Monkey Pokémon", PokemonType.FIGHTING, null, 1, 32, Abilities.VITAL_SPIRIT, Abilities.ANGER_POINT, Abilities.DEFIANT, 455, 65, 105, 60, 60, 70, 95, 75, 70, 159, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.GROWLITHE, 1, false, false, false, "Puppy Pokémon", PokemonType.FIRE, null, 0.7, 19, Abilities.INTIMIDATE, Abilities.FLASH_FIRE, Abilities.JUSTIFIED, 350, 55, 70, 45, 70, 50, 60, 190, 50, 70, GrowthRate.SLOW, 75, false), - new PokemonSpecies(Species.ARCANINE, 1, false, false, false, "Legendary Pokémon", PokemonType.FIRE, null, 1.9, 155, Abilities.INTIMIDATE, Abilities.FLASH_FIRE, Abilities.JUSTIFIED, 555, 90, 110, 80, 100, 80, 95, 75, 50, 194, GrowthRate.SLOW, 75, false), - new PokemonSpecies(Species.POLIWAG, 1, false, false, false, "Tadpole Pokémon", PokemonType.WATER, null, 0.6, 12.4, Abilities.WATER_ABSORB, Abilities.DAMP, Abilities.SWIFT_SWIM, 300, 40, 50, 40, 40, 40, 90, 255, 50, 60, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.POLIWHIRL, 1, false, false, false, "Tadpole Pokémon", PokemonType.WATER, null, 1, 20, Abilities.WATER_ABSORB, Abilities.DAMP, Abilities.SWIFT_SWIM, 385, 65, 65, 65, 50, 50, 90, 120, 50, 135, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.POLIWRATH, 1, false, false, false, "Tadpole Pokémon", PokemonType.WATER, PokemonType.FIGHTING, 1.3, 54, Abilities.WATER_ABSORB, Abilities.DAMP, Abilities.SWIFT_SWIM, 510, 90, 95, 95, 70, 90, 70, 45, 50, 255, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.ABRA, 1, false, false, false, "Psi Pokémon", PokemonType.PSYCHIC, null, 0.9, 19.5, Abilities.SYNCHRONIZE, Abilities.INNER_FOCUS, Abilities.MAGIC_GUARD, 310, 25, 20, 15, 105, 55, 90, 200, 50, 62, GrowthRate.MEDIUM_SLOW, 75, false), - new PokemonSpecies(Species.KADABRA, 1, false, false, false, "Psi Pokémon", PokemonType.PSYCHIC, null, 1.3, 56.5, Abilities.SYNCHRONIZE, Abilities.INNER_FOCUS, Abilities.MAGIC_GUARD, 400, 40, 35, 30, 120, 70, 105, 100, 50, 140, GrowthRate.MEDIUM_SLOW, 75, true), - new PokemonSpecies(Species.ALAKAZAM, 1, false, false, false, "Psi Pokémon", PokemonType.PSYCHIC, null, 1.5, 48, Abilities.SYNCHRONIZE, Abilities.INNER_FOCUS, Abilities.MAGIC_GUARD, 500, 55, 50, 45, 135, 95, 120, 50, 50, 250, GrowthRate.MEDIUM_SLOW, 75, true, true, - new PokemonForm("Normal", "", PokemonType.PSYCHIC, null, 1.5, 48, Abilities.SYNCHRONIZE, Abilities.INNER_FOCUS, Abilities.MAGIC_GUARD, 500, 55, 50, 45, 135, 95, 120, 50, 50, 250, true, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.PSYCHIC, null, 1.2, 48, Abilities.TRACE, Abilities.TRACE, Abilities.TRACE, 600, 55, 50, 65, 175, 105, 150, 50, 50, 250, true), - ), - new PokemonSpecies(Species.MACHOP, 1, false, false, false, "Superpower Pokémon", PokemonType.FIGHTING, null, 0.8, 19.5, Abilities.GUTS, Abilities.NO_GUARD, Abilities.STEADFAST, 305, 70, 80, 50, 35, 35, 35, 180, 50, 61, GrowthRate.MEDIUM_SLOW, 75, false), - new PokemonSpecies(Species.MACHOKE, 1, false, false, false, "Superpower Pokémon", PokemonType.FIGHTING, null, 1.5, 70.5, Abilities.GUTS, Abilities.NO_GUARD, Abilities.STEADFAST, 405, 80, 100, 70, 50, 60, 45, 90, 50, 142, GrowthRate.MEDIUM_SLOW, 75, false), - new PokemonSpecies(Species.MACHAMP, 1, false, false, false, "Superpower Pokémon", PokemonType.FIGHTING, null, 1.6, 130, Abilities.GUTS, Abilities.NO_GUARD, Abilities.STEADFAST, 505, 90, 130, 80, 65, 85, 55, 45, 50, 253, GrowthRate.MEDIUM_SLOW, 75, false, true, - new PokemonForm("Normal", "", PokemonType.FIGHTING, null, 1.6, 130, Abilities.GUTS, Abilities.NO_GUARD, Abilities.STEADFAST, 505, 90, 130, 80, 65, 85, 55, 45, 50, 253, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FIGHTING, null, 25, 999.9, Abilities.GUTS, Abilities.GUTS, Abilities.GUTS, 605, 120, 170, 85, 75, 90, 65, 45, 50, 253), - ), - new PokemonSpecies(Species.BELLSPROUT, 1, false, false, false, "Flower Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.7, 4, Abilities.CHLOROPHYLL, Abilities.NONE, Abilities.GLUTTONY, 300, 50, 75, 35, 70, 30, 40, 255, 70, 60, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.WEEPINBELL, 1, false, false, false, "Flycatcher Pokémon", PokemonType.GRASS, PokemonType.POISON, 1, 6.4, Abilities.CHLOROPHYLL, Abilities.NONE, Abilities.GLUTTONY, 390, 65, 90, 50, 85, 45, 55, 120, 70, 137, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.VICTREEBEL, 1, false, false, false, "Flycatcher Pokémon", PokemonType.GRASS, PokemonType.POISON, 1.7, 15.5, Abilities.CHLOROPHYLL, Abilities.NONE, Abilities.GLUTTONY, 490, 80, 105, 65, 100, 70, 70, 45, 70, 245, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.TENTACOOL, 1, false, false, false, "Jellyfish Pokémon", PokemonType.WATER, PokemonType.POISON, 0.9, 45.5, Abilities.CLEAR_BODY, Abilities.LIQUID_OOZE, Abilities.RAIN_DISH, 335, 40, 40, 35, 50, 100, 70, 190, 50, 67, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.TENTACRUEL, 1, false, false, false, "Jellyfish Pokémon", PokemonType.WATER, PokemonType.POISON, 1.6, 55, Abilities.CLEAR_BODY, Abilities.LIQUID_OOZE, Abilities.RAIN_DISH, 515, 80, 70, 65, 80, 120, 100, 60, 50, 180, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.GEODUDE, 1, false, false, false, "Rock Pokémon", PokemonType.ROCK, PokemonType.GROUND, 0.4, 20, Abilities.ROCK_HEAD, Abilities.STURDY, Abilities.SAND_VEIL, 300, 40, 80, 100, 30, 30, 20, 255, 70, 60, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.GRAVELER, 1, false, false, false, "Rock Pokémon", PokemonType.ROCK, PokemonType.GROUND, 1, 105, Abilities.ROCK_HEAD, Abilities.STURDY, Abilities.SAND_VEIL, 390, 55, 95, 115, 45, 45, 35, 120, 70, 137, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.GOLEM, 1, false, false, false, "Megaton Pokémon", PokemonType.ROCK, PokemonType.GROUND, 1.4, 300, Abilities.ROCK_HEAD, Abilities.STURDY, Abilities.SAND_VEIL, 495, 80, 120, 130, 55, 65, 45, 45, 70, 248, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.PONYTA, 1, false, false, false, "Fire Horse Pokémon", PokemonType.FIRE, null, 1, 30, Abilities.RUN_AWAY, Abilities.FLASH_FIRE, Abilities.FLAME_BODY, 410, 50, 85, 55, 65, 65, 90, 190, 50, 82, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.RAPIDASH, 1, false, false, false, "Fire Horse Pokémon", PokemonType.FIRE, null, 1.7, 95, Abilities.RUN_AWAY, Abilities.FLASH_FIRE, Abilities.FLAME_BODY, 500, 65, 100, 70, 80, 80, 105, 60, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.SLOWPOKE, 1, false, false, false, "Dopey Pokémon", PokemonType.WATER, PokemonType.PSYCHIC, 1.2, 36, Abilities.OBLIVIOUS, Abilities.OWN_TEMPO, Abilities.REGENERATOR, 315, 90, 65, 65, 40, 40, 15, 190, 50, 63, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.SLOWBRO, 1, false, false, false, "Hermit Crab Pokémon", PokemonType.WATER, PokemonType.PSYCHIC, 1.6, 78.5, Abilities.OBLIVIOUS, Abilities.OWN_TEMPO, Abilities.REGENERATOR, 490, 95, 75, 110, 100, 80, 30, 75, 50, 172, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.PSYCHIC, 1.6, 78.5, Abilities.OBLIVIOUS, Abilities.OWN_TEMPO, Abilities.REGENERATOR, 490, 95, 75, 110, 100, 80, 30, 75, 50, 172, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.WATER, PokemonType.PSYCHIC, 2, 120, Abilities.SHELL_ARMOR, Abilities.SHELL_ARMOR, Abilities.SHELL_ARMOR, 590, 95, 75, 180, 130, 80, 30, 75, 50, 172), - ), - new PokemonSpecies(Species.MAGNEMITE, 1, false, false, false, "Magnet Pokémon", PokemonType.ELECTRIC, PokemonType.STEEL, 0.3, 6, Abilities.MAGNET_PULL, Abilities.STURDY, Abilities.ANALYTIC, 325, 25, 35, 70, 95, 55, 45, 190, 50, 65, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(Species.MAGNETON, 1, false, false, false, "Magnet Pokémon", PokemonType.ELECTRIC, PokemonType.STEEL, 1, 60, Abilities.MAGNET_PULL, Abilities.STURDY, Abilities.ANALYTIC, 465, 50, 60, 95, 120, 70, 70, 60, 50, 163, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(Species.FARFETCHD, 1, false, false, false, "Wild Duck Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.8, 15, Abilities.KEEN_EYE, Abilities.INNER_FOCUS, Abilities.DEFIANT, 377, 52, 90, 55, 58, 62, 60, 45, 50, 132, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.DODUO, 1, false, false, false, "Twin Bird Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.4, 39.2, Abilities.RUN_AWAY, Abilities.EARLY_BIRD, Abilities.TANGLED_FEET, 310, 35, 85, 45, 35, 35, 75, 190, 70, 62, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.DODRIO, 1, false, false, false, "Triple Bird Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.8, 85.2, Abilities.RUN_AWAY, Abilities.EARLY_BIRD, Abilities.TANGLED_FEET, 470, 60, 110, 70, 60, 60, 110, 45, 70, 165, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.SEEL, 1, false, false, false, "Sea Lion Pokémon", PokemonType.WATER, null, 1.1, 90, Abilities.THICK_FAT, Abilities.HYDRATION, Abilities.ICE_BODY, 325, 65, 45, 55, 45, 70, 45, 190, 70, 65, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.DEWGONG, 1, false, false, false, "Sea Lion Pokémon", PokemonType.WATER, PokemonType.ICE, 1.7, 120, Abilities.THICK_FAT, Abilities.HYDRATION, Abilities.ICE_BODY, 475, 90, 70, 80, 70, 95, 70, 75, 70, 166, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.GRIMER, 1, false, false, false, "Sludge Pokémon", PokemonType.POISON, null, 0.9, 30, Abilities.STENCH, Abilities.STICKY_HOLD, Abilities.POISON_TOUCH, 325, 80, 80, 50, 40, 50, 25, 190, 70, 65, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.MUK, 1, false, false, false, "Sludge Pokémon", PokemonType.POISON, null, 1.2, 30, Abilities.STENCH, Abilities.STICKY_HOLD, Abilities.POISON_TOUCH, 500, 105, 105, 75, 65, 100, 50, 75, 70, 175, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.SHELLDER, 1, false, false, false, "Bivalve Pokémon", PokemonType.WATER, null, 0.3, 4, Abilities.SHELL_ARMOR, Abilities.SKILL_LINK, Abilities.OVERCOAT, 305, 30, 65, 100, 45, 25, 40, 190, 50, 61, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.CLOYSTER, 1, false, false, false, "Bivalve Pokémon", PokemonType.WATER, PokemonType.ICE, 1.5, 132.5, Abilities.SHELL_ARMOR, Abilities.SKILL_LINK, Abilities.OVERCOAT, 525, 50, 95, 180, 85, 45, 70, 60, 50, 184, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.GASTLY, 1, false, false, false, "Gas Pokémon", PokemonType.GHOST, PokemonType.POISON, 1.3, 0.1, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 310, 30, 35, 30, 100, 35, 80, 190, 50, 62, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.HAUNTER, 1, false, false, false, "Gas Pokémon", PokemonType.GHOST, PokemonType.POISON, 1.6, 0.1, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 405, 45, 50, 45, 115, 55, 95, 90, 50, 142, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.GENGAR, 1, false, false, false, "Shadow Pokémon", PokemonType.GHOST, PokemonType.POISON, 1.5, 40.5, Abilities.CURSED_BODY, Abilities.NONE, Abilities.NONE, 500, 60, 65, 60, 130, 75, 110, 45, 50, 250, GrowthRate.MEDIUM_SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.GHOST, PokemonType.POISON, 1.5, 40.5, Abilities.CURSED_BODY, Abilities.NONE, Abilities.NONE, 500, 60, 65, 60, 130, 75, 110, 45, 50, 250, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.GHOST, PokemonType.POISON, 1.4, 40.5, Abilities.SHADOW_TAG, Abilities.NONE, Abilities.NONE, 600, 60, 65, 80, 170, 95, 130, 45, 50, 250), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GHOST, PokemonType.POISON, 20, 999.9, Abilities.CURSED_BODY, Abilities.NONE, Abilities.NONE, 600, 140, 65, 70, 140, 85, 100, 45, 50, 250), - ), - new PokemonSpecies(Species.ONIX, 1, false, false, false, "Rock Snake Pokémon", PokemonType.ROCK, PokemonType.GROUND, 8.8, 210, Abilities.ROCK_HEAD, Abilities.STURDY, Abilities.WEAK_ARMOR, 385, 35, 45, 160, 30, 45, 70, 45, 50, 77, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.DROWZEE, 1, false, false, false, "Hypnosis Pokémon", PokemonType.PSYCHIC, null, 1, 32.4, Abilities.INSOMNIA, Abilities.FOREWARN, Abilities.INNER_FOCUS, 328, 60, 48, 45, 43, 90, 42, 190, 70, 66, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.HYPNO, 1, false, false, false, "Hypnosis Pokémon", PokemonType.PSYCHIC, null, 1.6, 75.6, Abilities.INSOMNIA, Abilities.FOREWARN, Abilities.INNER_FOCUS, 483, 85, 73, 70, 73, 115, 67, 75, 70, 169, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.KRABBY, 1, false, false, false, "River Crab Pokémon", PokemonType.WATER, null, 0.4, 6.5, Abilities.HYPER_CUTTER, Abilities.SHELL_ARMOR, Abilities.SHEER_FORCE, 325, 30, 105, 90, 25, 25, 50, 225, 50, 65, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.KINGLER, 1, false, false, false, "Pincer Pokémon", PokemonType.WATER, null, 1.3, 60, Abilities.HYPER_CUTTER, Abilities.SHELL_ARMOR, Abilities.SHEER_FORCE, 475, 55, 130, 115, 50, 50, 75, 60, 50, 166, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.WATER, null, 1.3, 60, Abilities.HYPER_CUTTER, Abilities.SHELL_ARMOR, Abilities.SHEER_FORCE, 475, 55, 130, 115, 50, 50, 75, 60, 50, 166, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, null, 19, 999.9, Abilities.TOUGH_CLAWS, Abilities.TOUGH_CLAWS, Abilities.TOUGH_CLAWS, 575, 92, 145, 140, 60, 65, 73, 60, 50, 166), - ), - new PokemonSpecies(Species.VOLTORB, 1, false, false, false, "Ball Pokémon", PokemonType.ELECTRIC, null, 0.5, 10.4, Abilities.SOUNDPROOF, Abilities.STATIC, Abilities.AFTERMATH, 330, 40, 30, 50, 55, 55, 100, 190, 70, 66, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(Species.ELECTRODE, 1, false, false, false, "Ball Pokémon", PokemonType.ELECTRIC, null, 1.2, 66.6, Abilities.SOUNDPROOF, Abilities.STATIC, Abilities.AFTERMATH, 490, 60, 50, 70, 80, 80, 150, 60, 70, 172, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(Species.EXEGGCUTE, 1, false, false, false, "Egg Pokémon", PokemonType.GRASS, PokemonType.PSYCHIC, 0.4, 2.5, Abilities.CHLOROPHYLL, Abilities.NONE, Abilities.HARVEST, 325, 60, 40, 80, 60, 45, 40, 90, 50, 65, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.EXEGGUTOR, 1, false, false, false, "Coconut Pokémon", PokemonType.GRASS, PokemonType.PSYCHIC, 2, 120, Abilities.CHLOROPHYLL, Abilities.NONE, Abilities.HARVEST, 530, 95, 95, 85, 125, 75, 55, 45, 50, 186, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.CUBONE, 1, false, false, false, "Lonely Pokémon", PokemonType.GROUND, null, 0.4, 6.5, Abilities.ROCK_HEAD, Abilities.LIGHTNING_ROD, Abilities.BATTLE_ARMOR, 320, 50, 50, 95, 40, 50, 35, 190, 50, 64, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.MAROWAK, 1, false, false, false, "Bone Keeper Pokémon", PokemonType.GROUND, null, 1, 45, Abilities.ROCK_HEAD, Abilities.LIGHTNING_ROD, Abilities.BATTLE_ARMOR, 425, 60, 80, 110, 50, 80, 45, 75, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.HITMONLEE, 1, false, false, false, "Kicking Pokémon", PokemonType.FIGHTING, null, 1.5, 49.8, Abilities.LIMBER, Abilities.RECKLESS, Abilities.UNBURDEN, 455, 50, 120, 53, 35, 110, 87, 45, 50, 159, GrowthRate.MEDIUM_FAST, 100, false), - new PokemonSpecies(Species.HITMONCHAN, 1, false, false, false, "Punching Pokémon", PokemonType.FIGHTING, null, 1.4, 50.2, Abilities.KEEN_EYE, Abilities.IRON_FIST, Abilities.INNER_FOCUS, 455, 50, 105, 79, 35, 110, 76, 45, 50, 159, GrowthRate.MEDIUM_FAST, 100, false), - new PokemonSpecies(Species.LICKITUNG, 1, false, false, false, "Licking Pokémon", PokemonType.NORMAL, null, 1.2, 65.5, Abilities.OWN_TEMPO, Abilities.OBLIVIOUS, Abilities.CLOUD_NINE, 385, 90, 55, 75, 60, 75, 30, 45, 50, 77, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.KOFFING, 1, false, false, false, "Poison Gas Pokémon", PokemonType.POISON, null, 0.6, 1, Abilities.LEVITATE, Abilities.NEUTRALIZING_GAS, Abilities.STENCH, 340, 40, 65, 95, 60, 45, 35, 190, 50, 68, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.WEEZING, 1, false, false, false, "Poison Gas Pokémon", PokemonType.POISON, null, 1.2, 9.5, Abilities.LEVITATE, Abilities.NEUTRALIZING_GAS, Abilities.STENCH, 490, 65, 90, 120, 85, 70, 60, 60, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.RHYHORN, 1, false, false, false, "Spikes Pokémon", PokemonType.GROUND, PokemonType.ROCK, 1, 115, Abilities.LIGHTNING_ROD, Abilities.ROCK_HEAD, Abilities.RECKLESS, 345, 80, 85, 95, 30, 30, 25, 120, 50, 69, GrowthRate.SLOW, 50, true), - new PokemonSpecies(Species.RHYDON, 1, false, false, false, "Drill Pokémon", PokemonType.GROUND, PokemonType.ROCK, 1.9, 120, Abilities.LIGHTNING_ROD, Abilities.ROCK_HEAD, Abilities.RECKLESS, 485, 105, 130, 120, 45, 45, 40, 60, 50, 170, GrowthRate.SLOW, 50, true), - new PokemonSpecies(Species.CHANSEY, 1, false, false, false, "Egg Pokémon", PokemonType.NORMAL, null, 1.1, 34.6, Abilities.NATURAL_CURE, Abilities.SERENE_GRACE, Abilities.HEALER, 450, 250, 5, 5, 35, 105, 50, 30, 140, 395, GrowthRate.FAST, 0, false), - new PokemonSpecies(Species.TANGELA, 1, false, false, false, "Vine Pokémon", PokemonType.GRASS, null, 1, 35, Abilities.CHLOROPHYLL, Abilities.LEAF_GUARD, Abilities.REGENERATOR, 435, 65, 55, 115, 100, 40, 60, 45, 50, 87, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.KANGASKHAN, 1, false, false, false, "Parent Pokémon", PokemonType.NORMAL, null, 2.2, 80, Abilities.EARLY_BIRD, Abilities.SCRAPPY, Abilities.INNER_FOCUS, 490, 105, 95, 80, 40, 80, 90, 45, 50, 172, GrowthRate.MEDIUM_FAST, 0, false, true, - new PokemonForm("Normal", "", PokemonType.NORMAL, null, 2.2, 80, Abilities.EARLY_BIRD, Abilities.SCRAPPY, Abilities.INNER_FOCUS, 490, 105, 95, 80, 40, 80, 90, 45, 50, 172, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.NORMAL, null, 2.2, 100, Abilities.PARENTAL_BOND, Abilities.PARENTAL_BOND, Abilities.PARENTAL_BOND, 590, 105, 125, 100, 60, 100, 100, 45, 50, 172), - ), - new PokemonSpecies(Species.HORSEA, 1, false, false, false, "Dragon Pokémon", PokemonType.WATER, null, 0.4, 8, Abilities.SWIFT_SWIM, Abilities.SNIPER, Abilities.DAMP, 295, 30, 40, 70, 70, 25, 60, 225, 50, 59, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.SEADRA, 1, false, false, false, "Dragon Pokémon", PokemonType.WATER, null, 1.2, 25, Abilities.POISON_POINT, Abilities.SNIPER, Abilities.DAMP, 440, 55, 65, 95, 95, 45, 85, 75, 50, 154, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.GOLDEEN, 1, false, false, false, "Goldfish Pokémon", PokemonType.WATER, null, 0.6, 15, Abilities.SWIFT_SWIM, Abilities.WATER_VEIL, Abilities.LIGHTNING_ROD, 320, 45, 67, 60, 35, 50, 63, 225, 50, 64, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.SEAKING, 1, false, false, false, "Goldfish Pokémon", PokemonType.WATER, null, 1.3, 39, Abilities.SWIFT_SWIM, Abilities.WATER_VEIL, Abilities.LIGHTNING_ROD, 450, 80, 92, 65, 65, 80, 68, 60, 50, 158, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.STARYU, 1, false, false, false, "Star Shape Pokémon", PokemonType.WATER, null, 0.8, 34.5, Abilities.ILLUMINATE, Abilities.NATURAL_CURE, Abilities.ANALYTIC, 340, 30, 45, 55, 70, 55, 85, 225, 50, 68, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.STARMIE, 1, false, false, false, "Mysterious Pokémon", PokemonType.WATER, PokemonType.PSYCHIC, 1.1, 80, Abilities.ILLUMINATE, Abilities.NATURAL_CURE, Abilities.ANALYTIC, 520, 60, 75, 85, 100, 85, 115, 60, 50, 182, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.MR_MIME, 1, false, false, false, "Barrier Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 1.3, 54.5, Abilities.SOUNDPROOF, Abilities.FILTER, Abilities.TECHNICIAN, 460, 40, 45, 65, 100, 120, 90, 45, 50, 161, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.SCYTHER, 1, false, false, false, "Mantis Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.5, 56, Abilities.SWARM, Abilities.TECHNICIAN, Abilities.STEADFAST, 500, 70, 110, 80, 55, 80, 105, 45, 50, 100, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.JYNX, 1, false, false, false, "Human Shape Pokémon", PokemonType.ICE, PokemonType.PSYCHIC, 1.4, 40.6, Abilities.OBLIVIOUS, Abilities.FOREWARN, Abilities.DRY_SKIN, 455, 65, 50, 35, 115, 95, 95, 45, 50, 159, GrowthRate.MEDIUM_FAST, 0, false), - new PokemonSpecies(Species.ELECTABUZZ, 1, false, false, false, "Electric Pokémon", PokemonType.ELECTRIC, null, 1.1, 30, Abilities.STATIC, Abilities.NONE, Abilities.VITAL_SPIRIT, 490, 65, 83, 57, 95, 85, 105, 45, 50, 172, GrowthRate.MEDIUM_FAST, 75, false), - new PokemonSpecies(Species.MAGMAR, 1, false, false, false, "Spitfire Pokémon", PokemonType.FIRE, null, 1.3, 44.5, Abilities.FLAME_BODY, Abilities.NONE, Abilities.VITAL_SPIRIT, 495, 65, 95, 57, 100, 85, 93, 45, 50, 173, GrowthRate.MEDIUM_FAST, 75, false), - new PokemonSpecies(Species.PINSIR, 1, false, false, false, "Stag Beetle Pokémon", PokemonType.BUG, null, 1.5, 55, Abilities.HYPER_CUTTER, Abilities.MOLD_BREAKER, Abilities.MOXIE, 500, 65, 125, 100, 55, 70, 85, 45, 50, 175, GrowthRate.SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.BUG, null, 1.5, 55, Abilities.HYPER_CUTTER, Abilities.MOLD_BREAKER, Abilities.MOXIE, 500, 65, 125, 100, 55, 70, 85, 45, 50, 175, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.BUG, PokemonType.FLYING, 1.7, 59, Abilities.AERILATE, Abilities.AERILATE, Abilities.AERILATE, 600, 65, 155, 120, 65, 90, 105, 45, 50, 175), - ), - new PokemonSpecies(Species.TAUROS, 1, false, false, false, "Wild Bull Pokémon", PokemonType.NORMAL, null, 1.4, 88.4, Abilities.INTIMIDATE, Abilities.ANGER_POINT, Abilities.SHEER_FORCE, 490, 75, 100, 95, 40, 70, 110, 45, 50, 172, GrowthRate.SLOW, 100, false), - new PokemonSpecies(Species.MAGIKARP, 1, false, false, false, "Fish Pokémon", PokemonType.WATER, null, 0.9, 10, Abilities.SWIFT_SWIM, Abilities.NONE, Abilities.RATTLED, 200, 20, 10, 55, 15, 20, 80, 255, 50, 40, GrowthRate.SLOW, 50, true), - new PokemonSpecies(Species.GYARADOS, 1, false, false, false, "Atrocious Pokémon", PokemonType.WATER, PokemonType.FLYING, 6.5, 235, Abilities.INTIMIDATE, Abilities.NONE, Abilities.MOXIE, 540, 95, 125, 79, 60, 100, 81, 45, 50, 189, GrowthRate.SLOW, 50, true, true, - new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.FLYING, 6.5, 235, Abilities.INTIMIDATE, Abilities.NONE, Abilities.MOXIE, 540, 95, 125, 79, 60, 100, 81, 45, 50, 189, true, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.WATER, PokemonType.DARK, 6.5, 305, Abilities.MOLD_BREAKER, Abilities.MOLD_BREAKER, Abilities.MOLD_BREAKER, 640, 95, 155, 109, 70, 130, 81, 45, 50, 189, true), - ), - new PokemonSpecies(Species.LAPRAS, 1, false, false, false, "Transport Pokémon", PokemonType.WATER, PokemonType.ICE, 2.5, 220, Abilities.WATER_ABSORB, Abilities.SHELL_ARMOR, Abilities.HYDRATION, 535, 130, 85, 80, 85, 95, 60, 45, 50, 187, GrowthRate.SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.ICE, 2.5, 220, Abilities.WATER_ABSORB, Abilities.SHELL_ARMOR, Abilities.HYDRATION, 535, 130, 85, 80, 85, 95, 60, 45, 50, 187, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, PokemonType.ICE, 24, 999.9, Abilities.SHIELD_DUST, Abilities.SHIELD_DUST, Abilities.SHIELD_DUST, 635, 170, 97, 85, 107, 111, 65, 45, 50, 187), - ), - new PokemonSpecies(Species.DITTO, 1, false, false, false, "Transform Pokémon", PokemonType.NORMAL, null, 0.3, 4, Abilities.LIMBER, Abilities.NONE, Abilities.IMPOSTER, 288, 48, 48, 48, 48, 48, 48, 35, 50, 101, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(Species.EEVEE, 1, false, false, false, "Evolution Pokémon", PokemonType.NORMAL, null, 0.3, 6.5, Abilities.RUN_AWAY, Abilities.ADAPTABILITY, Abilities.ANTICIPATION, 325, 55, 55, 50, 45, 65, 55, 45, 50, 65, GrowthRate.MEDIUM_FAST, 87.5, false, true, - new PokemonForm("Normal", "", PokemonType.NORMAL, null, 0.3, 6.5, Abilities.RUN_AWAY, Abilities.ADAPTABILITY, Abilities.ANTICIPATION, 325, 55, 55, 50, 45, 65, 55, 45, 50, 65, false, null, true), - new PokemonForm("Partner", "partner", PokemonType.NORMAL, null, 0.3, 6.5, Abilities.RUN_AWAY, Abilities.ADAPTABILITY, Abilities.ANTICIPATION, 435, 65, 75, 70, 65, 85, 75, 45, 50, 65, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.NORMAL, null, 18, 999.9, Abilities.PROTEAN, Abilities.PROTEAN, Abilities.PROTEAN, 535, 110, 95, 70, 90, 85, 85, 45, 50, 65), //+100 BST from Partner Form - ), - new PokemonSpecies(Species.VAPOREON, 1, false, false, false, "Bubble Jet Pokémon", PokemonType.WATER, null, 1, 29, Abilities.WATER_ABSORB, Abilities.NONE, Abilities.HYDRATION, 525, 130, 65, 60, 110, 95, 65, 45, 50, 184, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(Species.JOLTEON, 1, false, false, false, "Lightning Pokémon", PokemonType.ELECTRIC, null, 0.8, 24.5, Abilities.VOLT_ABSORB, Abilities.NONE, Abilities.QUICK_FEET, 525, 65, 65, 60, 110, 95, 130, 45, 50, 184, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(Species.FLAREON, 1, false, false, false, "Flame Pokémon", PokemonType.FIRE, null, 0.9, 25, Abilities.FLASH_FIRE, Abilities.NONE, Abilities.GUTS, 525, 65, 130, 60, 95, 110, 65, 45, 50, 184, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(Species.PORYGON, 1, false, false, false, "Virtual Pokémon", PokemonType.NORMAL, null, 0.8, 36.5, Abilities.TRACE, Abilities.DOWNLOAD, Abilities.ANALYTIC, 395, 65, 60, 70, 85, 75, 40, 45, 50, 79, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(Species.OMANYTE, 1, false, false, false, "Spiral Pokémon", PokemonType.ROCK, PokemonType.WATER, 0.4, 7.5, Abilities.SWIFT_SWIM, Abilities.SHELL_ARMOR, Abilities.WEAK_ARMOR, 355, 35, 40, 100, 90, 55, 35, 45, 50, 71, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(Species.OMASTAR, 1, false, false, false, "Spiral Pokémon", PokemonType.ROCK, PokemonType.WATER, 1, 35, Abilities.SWIFT_SWIM, Abilities.SHELL_ARMOR, Abilities.WEAK_ARMOR, 495, 70, 60, 125, 115, 70, 55, 45, 50, 173, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(Species.KABUTO, 1, false, false, false, "Shellfish Pokémon", PokemonType.ROCK, PokemonType.WATER, 0.5, 11.5, Abilities.SWIFT_SWIM, Abilities.BATTLE_ARMOR, Abilities.WEAK_ARMOR, 355, 30, 80, 90, 55, 45, 55, 45, 50, 71, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(Species.KABUTOPS, 1, false, false, false, "Shellfish Pokémon", PokemonType.ROCK, PokemonType.WATER, 1.3, 40.5, Abilities.SWIFT_SWIM, Abilities.BATTLE_ARMOR, Abilities.WEAK_ARMOR, 495, 60, 115, 105, 65, 70, 80, 45, 50, 173, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(Species.AERODACTYL, 1, false, false, false, "Fossil Pokémon", PokemonType.ROCK, PokemonType.FLYING, 1.8, 59, Abilities.ROCK_HEAD, Abilities.PRESSURE, Abilities.UNNERVE, 515, 80, 105, 65, 60, 75, 130, 45, 50, 180, GrowthRate.SLOW, 87.5, false, true, - new PokemonForm("Normal", "", PokemonType.ROCK, PokemonType.FLYING, 1.8, 59, Abilities.ROCK_HEAD, Abilities.PRESSURE, Abilities.UNNERVE, 515, 80, 105, 65, 60, 75, 130, 45, 50, 180, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.ROCK, PokemonType.FLYING, 2.1, 79, Abilities.TOUGH_CLAWS, Abilities.TOUGH_CLAWS, Abilities.TOUGH_CLAWS, 615, 80, 135, 85, 70, 95, 150, 45, 50, 180), - ), - new PokemonSpecies(Species.SNORLAX, 1, false, false, false, "Sleeping Pokémon", PokemonType.NORMAL, null, 2.1, 460, Abilities.IMMUNITY, Abilities.THICK_FAT, Abilities.GLUTTONY, 540, 160, 110, 65, 65, 110, 30, 25, 50, 189, GrowthRate.SLOW, 87.5, false, true, - new PokemonForm("Normal", "", PokemonType.NORMAL, null, 2.1, 460, Abilities.IMMUNITY, Abilities.THICK_FAT, Abilities.GLUTTONY, 540, 160, 110, 65, 65, 110, 30, 25, 50, 189, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.NORMAL, null, 35, 999.9, Abilities.HARVEST, Abilities.HARVEST, Abilities.HARVEST, 640, 210, 135, 70, 90, 115, 20, 25, 50, 189), - ), - new PokemonSpecies(Species.ARTICUNO, 1, true, false, false, "Freeze Pokémon", PokemonType.ICE, PokemonType.FLYING, 1.7, 55.4, Abilities.PRESSURE, Abilities.NONE, Abilities.SNOW_CLOAK, 580, 90, 85, 100, 95, 125, 85, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.ZAPDOS, 1, true, false, false, "Electric Pokémon", PokemonType.ELECTRIC, PokemonType.FLYING, 1.6, 52.6, Abilities.PRESSURE, Abilities.NONE, Abilities.STATIC, 580, 90, 90, 85, 125, 90, 100, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.MOLTRES, 1, true, false, false, "Flame Pokémon", PokemonType.FIRE, PokemonType.FLYING, 2, 60, Abilities.PRESSURE, Abilities.NONE, Abilities.FLAME_BODY, 580, 90, 100, 90, 125, 85, 90, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.DRATINI, 1, false, false, false, "Dragon Pokémon", PokemonType.DRAGON, null, 1.8, 3.3, Abilities.SHED_SKIN, Abilities.NONE, Abilities.MARVEL_SCALE, 300, 41, 64, 45, 50, 50, 50, 45, 35, 60, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.DRAGONAIR, 1, false, false, false, "Dragon Pokémon", PokemonType.DRAGON, null, 4, 16.5, Abilities.SHED_SKIN, Abilities.NONE, Abilities.MARVEL_SCALE, 420, 61, 84, 65, 70, 70, 70, 45, 35, 147, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.DRAGONITE, 1, false, false, false, "Dragon Pokémon", PokemonType.DRAGON, PokemonType.FLYING, 2.2, 210, Abilities.INNER_FOCUS, Abilities.NONE, Abilities.MULTISCALE, 600, 91, 134, 95, 100, 100, 80, 45, 35, 300, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.MEWTWO, 1, false, true, false, "Genetic Pokémon", PokemonType.PSYCHIC, null, 2, 122, Abilities.PRESSURE, Abilities.NONE, Abilities.UNNERVE, 680, 106, 110, 90, 154, 90, 130, 3, 0, 340, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal", "", PokemonType.PSYCHIC, null, 2, 122, Abilities.PRESSURE, Abilities.NONE, Abilities.UNNERVE, 680, 106, 110, 90, 154, 90, 130, 3, 0, 340, false, null, true), - new PokemonForm("Mega X", SpeciesFormKey.MEGA_X, PokemonType.PSYCHIC, PokemonType.FIGHTING, 2.3, 127, Abilities.STEADFAST, Abilities.NONE, Abilities.STEADFAST, 780, 106, 190, 100, 154, 100, 130, 3, 0, 340), - new PokemonForm("Mega Y", SpeciesFormKey.MEGA_Y, PokemonType.PSYCHIC, null, 1.5, 33, Abilities.INSOMNIA, Abilities.NONE, Abilities.INSOMNIA, 780, 106, 150, 70, 194, 120, 140, 3, 0, 340), - ), - new PokemonSpecies(Species.MEW, 1, false, false, true, "New Species Pokémon", PokemonType.PSYCHIC, null, 0.4, 4, Abilities.SYNCHRONIZE, Abilities.NONE, Abilities.NONE, 600, 100, 100, 100, 100, 100, 100, 45, 100, 300, GrowthRate.MEDIUM_SLOW, null, false), - new PokemonSpecies(Species.CHIKORITA, 2, false, false, false, "Leaf Pokémon", PokemonType.GRASS, null, 0.9, 6.4, Abilities.OVERGROW, Abilities.NONE, Abilities.LEAF_GUARD, 318, 45, 49, 65, 49, 65, 45, 45, 70, 64, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.BAYLEEF, 2, false, false, false, "Leaf Pokémon", PokemonType.GRASS, null, 1.2, 15.8, Abilities.OVERGROW, Abilities.NONE, Abilities.LEAF_GUARD, 405, 60, 62, 80, 63, 80, 60, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.MEGANIUM, 2, false, false, false, "Herb Pokémon", PokemonType.GRASS, null, 1.8, 100.5, Abilities.OVERGROW, Abilities.NONE, Abilities.LEAF_GUARD, 525, 80, 82, 100, 83, 100, 80, 45, 70, 263, GrowthRate.MEDIUM_SLOW, 87.5, true), - new PokemonSpecies(Species.CYNDAQUIL, 2, false, false, false, "Fire Mouse Pokémon", PokemonType.FIRE, null, 0.5, 7.9, Abilities.BLAZE, Abilities.NONE, Abilities.FLASH_FIRE, 309, 39, 52, 43, 60, 50, 65, 45, 70, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.QUILAVA, 2, false, false, false, "Volcano Pokémon", PokemonType.FIRE, null, 0.9, 19, Abilities.BLAZE, Abilities.NONE, Abilities.FLASH_FIRE, 405, 58, 64, 58, 80, 65, 80, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.TYPHLOSION, 2, false, false, false, "Volcano Pokémon", PokemonType.FIRE, null, 1.7, 79.5, Abilities.BLAZE, Abilities.NONE, Abilities.FLASH_FIRE, 534, 78, 84, 78, 109, 85, 100, 45, 70, 267, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.TOTODILE, 2, false, false, false, "Big Jaw Pokémon", PokemonType.WATER, null, 0.6, 9.5, Abilities.TORRENT, Abilities.NONE, Abilities.SHEER_FORCE, 314, 50, 65, 64, 44, 48, 43, 45, 70, 63, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.CROCONAW, 2, false, false, false, "Big Jaw Pokémon", PokemonType.WATER, null, 1.1, 25, Abilities.TORRENT, Abilities.NONE, Abilities.SHEER_FORCE, 405, 65, 80, 80, 59, 63, 58, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.FERALIGATR, 2, false, false, false, "Big Jaw Pokémon", PokemonType.WATER, null, 2.3, 88.8, Abilities.TORRENT, Abilities.NONE, Abilities.SHEER_FORCE, 530, 85, 105, 100, 79, 83, 78, 45, 70, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.SENTRET, 2, false, false, false, "Scout Pokémon", PokemonType.NORMAL, null, 0.8, 6, Abilities.RUN_AWAY, Abilities.KEEN_EYE, Abilities.FRISK, 215, 35, 46, 34, 35, 45, 20, 255, 70, 43, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.FURRET, 2, false, false, false, "Long Body Pokémon", PokemonType.NORMAL, null, 1.8, 32.5, Abilities.RUN_AWAY, Abilities.KEEN_EYE, Abilities.FRISK, 415, 85, 76, 64, 45, 55, 90, 90, 70, 145, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.HOOTHOOT, 2, false, false, false, "Owl Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.7, 21.2, Abilities.INSOMNIA, Abilities.KEEN_EYE, Abilities.TINTED_LENS, 262, 60, 30, 30, 36, 56, 50, 255, 50, 52, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.NOCTOWL, 2, false, false, false, "Owl Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.6, 40.8, Abilities.INSOMNIA, Abilities.KEEN_EYE, Abilities.TINTED_LENS, 452, 100, 50, 50, 86, 96, 70, 90, 50, 158, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.LEDYBA, 2, false, false, false, "Five Star Pokémon", PokemonType.BUG, PokemonType.FLYING, 1, 10.8, Abilities.SWARM, Abilities.EARLY_BIRD, Abilities.RATTLED, 265, 40, 20, 30, 40, 80, 55, 255, 70, 53, GrowthRate.FAST, 50, true), - new PokemonSpecies(Species.LEDIAN, 2, false, false, false, "Five Star Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.4, 35.6, Abilities.SWARM, Abilities.EARLY_BIRD, Abilities.IRON_FIST, 390, 55, 35, 50, 55, 110, 85, 90, 70, 137, GrowthRate.FAST, 50, true), - new PokemonSpecies(Species.SPINARAK, 2, false, false, false, "String Spit Pokémon", PokemonType.BUG, PokemonType.POISON, 0.5, 8.5, Abilities.SWARM, Abilities.INSOMNIA, Abilities.SNIPER, 250, 40, 60, 40, 40, 40, 30, 255, 70, 50, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.ARIADOS, 2, false, false, false, "Long Leg Pokémon", PokemonType.BUG, PokemonType.POISON, 1.1, 33.5, Abilities.SWARM, Abilities.INSOMNIA, Abilities.SNIPER, 400, 70, 90, 70, 60, 70, 40, 90, 70, 140, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.CROBAT, 2, false, false, false, "Bat Pokémon", PokemonType.POISON, PokemonType.FLYING, 1.8, 75, Abilities.INNER_FOCUS, Abilities.NONE, Abilities.INFILTRATOR, 535, 85, 90, 80, 70, 80, 130, 90, 50, 268, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.CHINCHOU, 2, false, false, false, "Angler Pokémon", PokemonType.WATER, PokemonType.ELECTRIC, 0.5, 12, Abilities.VOLT_ABSORB, Abilities.ILLUMINATE, Abilities.WATER_ABSORB, 330, 75, 38, 38, 56, 56, 67, 190, 50, 66, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.LANTURN, 2, false, false, false, "Light Pokémon", PokemonType.WATER, PokemonType.ELECTRIC, 1.2, 22.5, Abilities.VOLT_ABSORB, Abilities.ILLUMINATE, Abilities.WATER_ABSORB, 460, 125, 58, 58, 76, 76, 67, 75, 50, 161, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.PICHU, 2, false, false, false, "Tiny Mouse Pokémon", PokemonType.ELECTRIC, null, 0.3, 2, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 205, 20, 40, 15, 35, 35, 60, 190, 70, 41, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Normal", "", PokemonType.ELECTRIC, null, 1.4, 2, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 205, 20, 40, 15, 35, 35, 60, 190, 70, 41, false, null, true), - new PokemonForm("Spiky-Eared", "spiky", PokemonType.ELECTRIC, null, 1.4, 2, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 205, 20, 40, 15, 35, 35, 60, 190, 70, 41, false, null, true), - ), - new PokemonSpecies(Species.CLEFFA, 2, false, false, false, "Star Shape Pokémon", PokemonType.FAIRY, null, 0.3, 3, Abilities.CUTE_CHARM, Abilities.MAGIC_GUARD, Abilities.FRIEND_GUARD, 218, 50, 25, 28, 45, 55, 15, 150, 140, 44, GrowthRate.FAST, 25, false), - new PokemonSpecies(Species.IGGLYBUFF, 2, false, false, false, "Balloon Pokémon", PokemonType.NORMAL, PokemonType.FAIRY, 0.3, 1, Abilities.CUTE_CHARM, Abilities.COMPETITIVE, Abilities.FRIEND_GUARD, 210, 90, 30, 15, 40, 20, 15, 170, 50, 42, GrowthRate.FAST, 25, false), - new PokemonSpecies(Species.TOGEPI, 2, false, false, false, "Spike Ball Pokémon", PokemonType.FAIRY, null, 0.3, 1.5, Abilities.HUSTLE, Abilities.SERENE_GRACE, Abilities.SUPER_LUCK, 245, 35, 20, 65, 40, 65, 20, 190, 50, 49, GrowthRate.FAST, 87.5, false), - new PokemonSpecies(Species.TOGETIC, 2, false, false, false, "Happiness Pokémon", PokemonType.FAIRY, PokemonType.FLYING, 0.6, 3.2, Abilities.HUSTLE, Abilities.SERENE_GRACE, Abilities.SUPER_LUCK, 405, 55, 40, 85, 80, 105, 40, 75, 50, 142, GrowthRate.FAST, 87.5, false), - new PokemonSpecies(Species.NATU, 2, false, false, false, "Tiny Bird Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 0.2, 2, Abilities.SYNCHRONIZE, Abilities.EARLY_BIRD, Abilities.MAGIC_BOUNCE, 320, 40, 50, 45, 70, 45, 70, 190, 50, 64, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.XATU, 2, false, false, false, "Mystic Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 1.5, 15, Abilities.SYNCHRONIZE, Abilities.EARLY_BIRD, Abilities.MAGIC_BOUNCE, 470, 65, 75, 70, 95, 70, 95, 75, 50, 165, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.MAREEP, 2, false, false, false, "Wool Pokémon", PokemonType.ELECTRIC, null, 0.6, 7.8, Abilities.STATIC, Abilities.NONE, Abilities.PLUS, 280, 55, 40, 40, 65, 45, 35, 235, 70, 56, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.FLAAFFY, 2, false, false, false, "Wool Pokémon", PokemonType.ELECTRIC, null, 0.8, 13.3, Abilities.STATIC, Abilities.NONE, Abilities.PLUS, 365, 70, 55, 55, 80, 60, 45, 120, 70, 128, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.AMPHAROS, 2, false, false, false, "Light Pokémon", PokemonType.ELECTRIC, null, 1.4, 61.5, Abilities.STATIC, Abilities.NONE, Abilities.PLUS, 510, 90, 75, 85, 115, 90, 55, 45, 70, 255, GrowthRate.MEDIUM_SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.ELECTRIC, null, 1.4, 61.5, Abilities.STATIC, Abilities.NONE, Abilities.PLUS, 510, 90, 75, 85, 115, 90, 55, 45, 70, 255, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.ELECTRIC, PokemonType.DRAGON, 1.4, 61.5, Abilities.MOLD_BREAKER, Abilities.NONE, Abilities.MOLD_BREAKER, 610, 90, 95, 105, 165, 110, 45, 45, 70, 255), - ), - new PokemonSpecies(Species.BELLOSSOM, 2, false, false, false, "Flower Pokémon", PokemonType.GRASS, null, 0.4, 5.8, Abilities.CHLOROPHYLL, Abilities.NONE, Abilities.HEALER, 490, 75, 80, 95, 90, 100, 50, 45, 50, 245, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.MARILL, 2, false, false, false, "Aqua Mouse Pokémon", PokemonType.WATER, PokemonType.FAIRY, 0.4, 8.5, Abilities.THICK_FAT, Abilities.HUGE_POWER, Abilities.SAP_SIPPER, 250, 70, 20, 50, 20, 50, 40, 190, 50, 88, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.AZUMARILL, 2, false, false, false, "Aqua Rabbit Pokémon", PokemonType.WATER, PokemonType.FAIRY, 0.8, 28.5, Abilities.THICK_FAT, Abilities.HUGE_POWER, Abilities.SAP_SIPPER, 420, 100, 50, 80, 60, 80, 50, 75, 50, 210, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.SUDOWOODO, 2, false, false, false, "Imitation Pokémon", PokemonType.ROCK, null, 1.2, 38, Abilities.STURDY, Abilities.ROCK_HEAD, Abilities.RATTLED, 410, 70, 100, 115, 30, 65, 30, 65, 50, 144, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.POLITOED, 2, false, false, false, "Frog Pokémon", PokemonType.WATER, null, 1.1, 33.9, Abilities.WATER_ABSORB, Abilities.DAMP, Abilities.DRIZZLE, 500, 90, 75, 75, 90, 100, 70, 45, 50, 250, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(Species.HOPPIP, 2, false, false, false, "Cottonweed Pokémon", PokemonType.GRASS, PokemonType.FLYING, 0.4, 0.5, Abilities.CHLOROPHYLL, Abilities.LEAF_GUARD, Abilities.INFILTRATOR, 250, 35, 35, 40, 35, 55, 50, 255, 70, 50, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.SKIPLOOM, 2, false, false, false, "Cottonweed Pokémon", PokemonType.GRASS, PokemonType.FLYING, 0.6, 1, Abilities.CHLOROPHYLL, Abilities.LEAF_GUARD, Abilities.INFILTRATOR, 340, 55, 45, 50, 45, 65, 80, 120, 70, 119, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.JUMPLUFF, 2, false, false, false, "Cottonweed Pokémon", PokemonType.GRASS, PokemonType.FLYING, 0.8, 3, Abilities.CHLOROPHYLL, Abilities.LEAF_GUARD, Abilities.INFILTRATOR, 460, 75, 55, 70, 55, 95, 110, 45, 70, 230, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.AIPOM, 2, false, false, false, "Long Tail Pokémon", PokemonType.NORMAL, null, 0.8, 11.5, Abilities.RUN_AWAY, Abilities.PICKUP, Abilities.SKILL_LINK, 360, 55, 70, 55, 40, 55, 85, 45, 70, 72, GrowthRate.FAST, 50, true), - new PokemonSpecies(Species.SUNKERN, 2, false, false, false, "Seed Pokémon", PokemonType.GRASS, null, 0.3, 1.8, Abilities.CHLOROPHYLL, Abilities.SOLAR_POWER, Abilities.EARLY_BIRD, 180, 30, 30, 30, 30, 30, 30, 235, 70, 36, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.SUNFLORA, 2, false, false, false, "Sun Pokémon", PokemonType.GRASS, null, 0.8, 8.5, Abilities.CHLOROPHYLL, Abilities.SOLAR_POWER, Abilities.EARLY_BIRD, 425, 75, 75, 55, 105, 85, 30, 120, 70, 149, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.YANMA, 2, false, false, false, "Clear Wing Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.2, 38, Abilities.SPEED_BOOST, Abilities.COMPOUND_EYES, Abilities.FRISK, 390, 65, 65, 45, 75, 45, 95, 75, 70, 78, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.WOOPER, 2, false, false, false, "Water Fish Pokémon", PokemonType.WATER, PokemonType.GROUND, 0.4, 8.5, Abilities.DAMP, Abilities.WATER_ABSORB, Abilities.UNAWARE, 210, 55, 45, 45, 25, 25, 15, 255, 50, 42, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.QUAGSIRE, 2, false, false, false, "Water Fish Pokémon", PokemonType.WATER, PokemonType.GROUND, 1.4, 75, Abilities.DAMP, Abilities.WATER_ABSORB, Abilities.UNAWARE, 430, 95, 85, 85, 65, 65, 35, 90, 50, 151, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.ESPEON, 2, false, false, false, "Sun Pokémon", PokemonType.PSYCHIC, null, 0.9, 26.5, Abilities.SYNCHRONIZE, Abilities.NONE, Abilities.MAGIC_BOUNCE, 525, 65, 65, 60, 130, 95, 110, 45, 50, 184, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(Species.UMBREON, 2, false, false, false, "Moonlight Pokémon", PokemonType.DARK, null, 1, 27, Abilities.SYNCHRONIZE, Abilities.NONE, Abilities.INNER_FOCUS, 525, 95, 65, 110, 60, 130, 65, 45, 35, 184, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(Species.MURKROW, 2, false, false, false, "Darkness Pokémon", PokemonType.DARK, PokemonType.FLYING, 0.5, 2.1, Abilities.INSOMNIA, Abilities.SUPER_LUCK, Abilities.PRANKSTER, 405, 60, 85, 42, 85, 42, 91, 30, 35, 81, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(Species.SLOWKING, 2, false, false, false, "Royal Pokémon", PokemonType.WATER, PokemonType.PSYCHIC, 2, 79.5, Abilities.OBLIVIOUS, Abilities.OWN_TEMPO, Abilities.REGENERATOR, 490, 95, 75, 80, 100, 110, 30, 70, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.MISDREAVUS, 2, false, false, false, "Screech Pokémon", PokemonType.GHOST, null, 0.7, 1, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 435, 60, 60, 60, 85, 85, 85, 45, 35, 87, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.UNOWN, 2, false, false, false, "Symbol Pokémon", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, GrowthRate.MEDIUM_FAST, null, false, false, - new PokemonForm("A", "a", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("B", "b", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("C", "c", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("D", "d", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("E", "e", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("F", "f", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("G", "g", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("H", "h", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("I", "i", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("J", "j", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("K", "k", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("L", "l", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("M", "m", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("N", "n", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("O", "o", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("P", "p", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("Q", "q", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("R", "r", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("S", "s", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("T", "t", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("U", "u", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("V", "v", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("W", "w", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("X", "x", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("Y", "y", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("Z", "z", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("!", "exclamation", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - new PokemonForm("?", "question", PokemonType.PSYCHIC, null, 0.5, 5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), - ), - new PokemonSpecies(Species.WOBBUFFET, 2, false, false, false, "Patient Pokémon", PokemonType.PSYCHIC, null, 1.3, 28.5, Abilities.SHADOW_TAG, Abilities.NONE, Abilities.TELEPATHY, 405, 190, 33, 58, 33, 58, 33, 45, 50, 142, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.GIRAFARIG, 2, false, false, false, "Long Neck Pokémon", PokemonType.NORMAL, PokemonType.PSYCHIC, 1.5, 41.5, Abilities.INNER_FOCUS, Abilities.EARLY_BIRD, Abilities.SAP_SIPPER, 455, 70, 80, 65, 90, 65, 85, 60, 70, 159, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.PINECO, 2, false, false, false, "Bagworm Pokémon", PokemonType.BUG, null, 0.6, 7.2, Abilities.STURDY, Abilities.NONE, Abilities.OVERCOAT, 290, 50, 65, 90, 35, 35, 15, 190, 70, 58, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.FORRETRESS, 2, false, false, false, "Bagworm Pokémon", PokemonType.BUG, PokemonType.STEEL, 1.2, 125.8, Abilities.STURDY, Abilities.NONE, Abilities.OVERCOAT, 465, 75, 90, 140, 60, 60, 40, 75, 70, 163, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.DUNSPARCE, 2, false, false, false, "Land Snake Pokémon", PokemonType.NORMAL, null, 1.5, 14, Abilities.SERENE_GRACE, Abilities.RUN_AWAY, Abilities.RATTLED, 415, 100, 70, 70, 65, 65, 45, 190, 50, 145, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.GLIGAR, 2, false, false, false, "Fly Scorpion Pokémon", PokemonType.GROUND, PokemonType.FLYING, 1.1, 64.8, Abilities.HYPER_CUTTER, Abilities.SAND_VEIL, Abilities.IMMUNITY, 430, 65, 75, 105, 35, 65, 85, 60, 70, 86, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(Species.STEELIX, 2, false, false, false, "Iron Snake Pokémon", PokemonType.STEEL, PokemonType.GROUND, 9.2, 400, Abilities.ROCK_HEAD, Abilities.STURDY, Abilities.SHEER_FORCE, 510, 75, 85, 200, 55, 65, 30, 25, 50, 179, GrowthRate.MEDIUM_FAST, 50, true, true, - new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.GROUND, 9.2, 400, Abilities.ROCK_HEAD, Abilities.STURDY, Abilities.SHEER_FORCE, 510, 75, 85, 200, 55, 65, 30, 25, 50, 179, true, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.STEEL, PokemonType.GROUND, 10.5, 740, Abilities.SAND_FORCE, Abilities.SAND_FORCE, Abilities.SAND_FORCE, 610, 75, 125, 230, 55, 95, 30, 25, 50, 179, true), - ), - new PokemonSpecies(Species.SNUBBULL, 2, false, false, false, "Fairy Pokémon", PokemonType.FAIRY, null, 0.6, 7.8, Abilities.INTIMIDATE, Abilities.RUN_AWAY, Abilities.RATTLED, 300, 60, 80, 50, 40, 40, 30, 190, 70, 60, GrowthRate.FAST, 25, false), - new PokemonSpecies(Species.GRANBULL, 2, false, false, false, "Fairy Pokémon", PokemonType.FAIRY, null, 1.4, 48.7, Abilities.INTIMIDATE, Abilities.QUICK_FEET, Abilities.RATTLED, 450, 90, 120, 75, 60, 60, 45, 75, 70, 158, GrowthRate.FAST, 25, false), - new PokemonSpecies(Species.QWILFISH, 2, false, false, false, "Balloon Pokémon", PokemonType.WATER, PokemonType.POISON, 0.5, 3.9, Abilities.POISON_POINT, Abilities.SWIFT_SWIM, Abilities.INTIMIDATE, 440, 65, 95, 85, 55, 55, 85, 45, 50, 88, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.SCIZOR, 2, false, false, false, "Pincer Pokémon", PokemonType.BUG, PokemonType.STEEL, 1.8, 118, Abilities.SWARM, Abilities.TECHNICIAN, Abilities.LIGHT_METAL, 500, 70, 130, 100, 55, 80, 65, 25, 50, 175, GrowthRate.MEDIUM_FAST, 50, true, true, - new PokemonForm("Normal", "", PokemonType.BUG, PokemonType.STEEL, 1.8, 118, Abilities.SWARM, Abilities.TECHNICIAN, Abilities.LIGHT_METAL, 500, 70, 130, 100, 55, 80, 65, 25, 50, 175, true, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.BUG, PokemonType.STEEL, 2, 125, Abilities.TECHNICIAN, Abilities.TECHNICIAN, Abilities.TECHNICIAN, 600, 70, 150, 140, 65, 100, 75, 25, 50, 175, true), - ), - new PokemonSpecies(Species.SHUCKLE, 2, false, false, false, "Mold Pokémon", PokemonType.BUG, PokemonType.ROCK, 0.6, 20.5, Abilities.STURDY, Abilities.GLUTTONY, Abilities.CONTRARY, 505, 20, 10, 230, 10, 230, 5, 190, 50, 177, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.HERACROSS, 2, false, false, false, "Single Horn Pokémon", PokemonType.BUG, PokemonType.FIGHTING, 1.5, 54, Abilities.SWARM, Abilities.GUTS, Abilities.MOXIE, 500, 80, 125, 75, 40, 95, 85, 45, 50, 175, GrowthRate.SLOW, 50, true, true, - new PokemonForm("Normal", "", PokemonType.BUG, PokemonType.FIGHTING, 1.5, 54, Abilities.SWARM, Abilities.GUTS, Abilities.MOXIE, 500, 80, 125, 75, 40, 95, 85, 45, 50, 175, true, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.BUG, PokemonType.FIGHTING, 1.7, 62.5, Abilities.SKILL_LINK, Abilities.SKILL_LINK, Abilities.SKILL_LINK, 600, 80, 185, 115, 40, 105, 75, 45, 50, 175, true), - ), - new PokemonSpecies(Species.SNEASEL, 2, false, false, false, "Sharp Claw Pokémon", PokemonType.DARK, PokemonType.ICE, 0.9, 28, Abilities.INNER_FOCUS, Abilities.KEEN_EYE, Abilities.PICKPOCKET, 430, 55, 95, 55, 35, 75, 115, 60, 35, 86, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(Species.TEDDIURSA, 2, false, false, false, "Little Bear Pokémon", PokemonType.NORMAL, null, 0.6, 8.8, Abilities.PICKUP, Abilities.QUICK_FEET, Abilities.HONEY_GATHER, 330, 60, 80, 50, 50, 50, 40, 120, 70, 66, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.URSARING, 2, false, false, false, "Hibernator Pokémon", PokemonType.NORMAL, null, 1.8, 125.8, Abilities.GUTS, Abilities.QUICK_FEET, Abilities.UNNERVE, 500, 90, 130, 75, 75, 75, 55, 60, 70, 175, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.SLUGMA, 2, false, false, false, "Lava Pokémon", PokemonType.FIRE, null, 0.7, 35, Abilities.MAGMA_ARMOR, Abilities.FLAME_BODY, Abilities.WEAK_ARMOR, 250, 40, 40, 40, 70, 40, 20, 190, 70, 50, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.MAGCARGO, 2, false, false, false, "Lava Pokémon", PokemonType.FIRE, PokemonType.ROCK, 0.8, 55, Abilities.MAGMA_ARMOR, Abilities.FLAME_BODY, Abilities.WEAK_ARMOR, 430, 60, 50, 120, 90, 80, 30, 75, 70, 151, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.SWINUB, 2, false, false, false, "Pig Pokémon", PokemonType.ICE, PokemonType.GROUND, 0.4, 6.5, Abilities.OBLIVIOUS, Abilities.SNOW_CLOAK, Abilities.THICK_FAT, 250, 50, 50, 40, 30, 30, 50, 225, 50, 50, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.PILOSWINE, 2, false, false, false, "Swine Pokémon", PokemonType.ICE, PokemonType.GROUND, 1.1, 55.8, Abilities.OBLIVIOUS, Abilities.SNOW_CLOAK, Abilities.THICK_FAT, 450, 100, 100, 80, 60, 60, 50, 75, 50, 158, GrowthRate.SLOW, 50, true), - new PokemonSpecies(Species.CORSOLA, 2, false, false, false, "Coral Pokémon", PokemonType.WATER, PokemonType.ROCK, 0.6, 5, Abilities.HUSTLE, Abilities.NATURAL_CURE, Abilities.REGENERATOR, 410, 65, 55, 95, 65, 95, 35, 60, 50, 144, GrowthRate.FAST, 25, false), - new PokemonSpecies(Species.REMORAID, 2, false, false, false, "Jet Pokémon", PokemonType.WATER, null, 0.6, 12, Abilities.HUSTLE, Abilities.SNIPER, Abilities.MOODY, 300, 35, 65, 35, 65, 35, 65, 190, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.OCTILLERY, 2, false, false, false, "Jet Pokémon", PokemonType.WATER, null, 0.9, 28.5, Abilities.SUCTION_CUPS, Abilities.SNIPER, Abilities.MOODY, 480, 75, 105, 75, 105, 75, 45, 75, 50, 168, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.DELIBIRD, 2, false, false, false, "Delivery Pokémon", PokemonType.ICE, PokemonType.FLYING, 0.9, 16, Abilities.VITAL_SPIRIT, Abilities.HUSTLE, Abilities.INSOMNIA, 330, 45, 55, 45, 65, 45, 75, 45, 50, 116, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.MANTINE, 2, false, false, false, "Kite Pokémon", PokemonType.WATER, PokemonType.FLYING, 2.1, 220, Abilities.SWIFT_SWIM, Abilities.WATER_ABSORB, Abilities.WATER_VEIL, 485, 85, 40, 70, 80, 140, 70, 25, 50, 170, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.SKARMORY, 2, false, false, false, "Armor Bird Pokémon", PokemonType.STEEL, PokemonType.FLYING, 1.7, 50.5, Abilities.KEEN_EYE, Abilities.STURDY, Abilities.WEAK_ARMOR, 465, 65, 80, 140, 40, 70, 70, 25, 50, 163, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.HOUNDOUR, 2, false, false, false, "Dark Pokémon", PokemonType.DARK, PokemonType.FIRE, 0.6, 10.8, Abilities.EARLY_BIRD, Abilities.FLASH_FIRE, Abilities.UNNERVE, 330, 45, 60, 30, 80, 50, 65, 120, 35, 66, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.HOUNDOOM, 2, false, false, false, "Dark Pokémon", PokemonType.DARK, PokemonType.FIRE, 1.4, 35, Abilities.EARLY_BIRD, Abilities.FLASH_FIRE, Abilities.UNNERVE, 500, 75, 90, 50, 110, 80, 95, 45, 35, 175, GrowthRate.SLOW, 50, true, true, - new PokemonForm("Normal", "", PokemonType.DARK, PokemonType.FIRE, 1.4, 35, Abilities.EARLY_BIRD, Abilities.FLASH_FIRE, Abilities.UNNERVE, 500, 75, 90, 50, 110, 80, 95, 45, 35, 175, true, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DARK, PokemonType.FIRE, 1.9, 49.5, Abilities.SOLAR_POWER, Abilities.SOLAR_POWER, Abilities.SOLAR_POWER, 600, 75, 90, 90, 140, 90, 115, 45, 35, 175, true), - ), - new PokemonSpecies(Species.KINGDRA, 2, false, false, false, "Dragon Pokémon", PokemonType.WATER, PokemonType.DRAGON, 1.8, 152, Abilities.SWIFT_SWIM, Abilities.SNIPER, Abilities.DAMP, 540, 75, 95, 95, 95, 95, 85, 45, 50, 270, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.PHANPY, 2, false, false, false, "Long Nose Pokémon", PokemonType.GROUND, null, 0.5, 33.5, Abilities.PICKUP, Abilities.NONE, Abilities.SAND_VEIL, 330, 90, 60, 60, 40, 40, 40, 120, 70, 66, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.DONPHAN, 2, false, false, false, "Armor Pokémon", PokemonType.GROUND, null, 1.1, 120, Abilities.STURDY, Abilities.NONE, Abilities.SAND_VEIL, 500, 90, 120, 120, 60, 60, 50, 60, 70, 175, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.PORYGON2, 2, false, false, false, "Virtual Pokémon", PokemonType.NORMAL, null, 0.6, 32.5, Abilities.TRACE, Abilities.DOWNLOAD, Abilities.ANALYTIC, 515, 85, 80, 90, 105, 95, 60, 45, 50, 180, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(Species.STANTLER, 2, false, false, false, "Big Horn Pokémon", PokemonType.NORMAL, null, 1.4, 71.2, Abilities.INTIMIDATE, Abilities.FRISK, Abilities.SAP_SIPPER, 465, 73, 95, 62, 85, 65, 85, 45, 70, 163, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.SMEARGLE, 2, false, false, false, "Painter Pokémon", PokemonType.NORMAL, null, 1.2, 58, Abilities.OWN_TEMPO, Abilities.TECHNICIAN, Abilities.MOODY, 250, 55, 20, 35, 20, 45, 75, 45, 70, 88, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.TYROGUE, 2, false, false, false, "Scuffle Pokémon", PokemonType.FIGHTING, null, 0.7, 21, Abilities.GUTS, Abilities.STEADFAST, Abilities.VITAL_SPIRIT, 210, 35, 35, 35, 35, 35, 35, 75, 50, 42, GrowthRate.MEDIUM_FAST, 100, false), - new PokemonSpecies(Species.HITMONTOP, 2, false, false, false, "Handstand Pokémon", PokemonType.FIGHTING, null, 1.4, 48, Abilities.INTIMIDATE, Abilities.TECHNICIAN, Abilities.STEADFAST, 455, 50, 95, 95, 35, 110, 70, 45, 50, 159, GrowthRate.MEDIUM_FAST, 100, false), - new PokemonSpecies(Species.SMOOCHUM, 2, false, false, false, "Kiss Pokémon", PokemonType.ICE, PokemonType.PSYCHIC, 0.4, 6, Abilities.OBLIVIOUS, Abilities.FOREWARN, Abilities.HYDRATION, 305, 45, 30, 15, 85, 65, 65, 45, 50, 61, GrowthRate.MEDIUM_FAST, 0, false), - new PokemonSpecies(Species.ELEKID, 2, false, false, false, "Electric Pokémon", PokemonType.ELECTRIC, null, 0.6, 23.5, Abilities.STATIC, Abilities.NONE, Abilities.VITAL_SPIRIT, 360, 45, 63, 37, 65, 55, 95, 45, 50, 72, GrowthRate.MEDIUM_FAST, 75, false), - new PokemonSpecies(Species.MAGBY, 2, false, false, false, "Live Coal Pokémon", PokemonType.FIRE, null, 0.7, 21.4, Abilities.FLAME_BODY, Abilities.NONE, Abilities.VITAL_SPIRIT, 365, 45, 75, 37, 70, 55, 83, 45, 50, 73, GrowthRate.MEDIUM_FAST, 75, false), - new PokemonSpecies(Species.MILTANK, 2, false, false, false, "Milk Cow Pokémon", PokemonType.NORMAL, null, 1.2, 75.5, Abilities.THICK_FAT, Abilities.SCRAPPY, Abilities.SAP_SIPPER, 490, 95, 80, 105, 40, 70, 100, 45, 50, 172, GrowthRate.SLOW, 0, false), - new PokemonSpecies(Species.BLISSEY, 2, false, false, false, "Happiness Pokémon", PokemonType.NORMAL, null, 1.5, 46.8, Abilities.NATURAL_CURE, Abilities.SERENE_GRACE, Abilities.HEALER, 540, 255, 10, 10, 75, 135, 55, 30, 140, 608, GrowthRate.FAST, 0, false), - new PokemonSpecies(Species.RAIKOU, 2, true, false, false, "Thunder Pokémon", PokemonType.ELECTRIC, null, 1.9, 178, Abilities.PRESSURE, Abilities.NONE, Abilities.INNER_FOCUS, 580, 90, 85, 75, 115, 100, 115, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.ENTEI, 2, true, false, false, "Volcano Pokémon", PokemonType.FIRE, null, 2.1, 198, Abilities.PRESSURE, Abilities.NONE, Abilities.INNER_FOCUS, 580, 115, 115, 85, 90, 75, 100, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.SUICUNE, 2, true, false, false, "Aurora Pokémon", PokemonType.WATER, null, 2, 187, Abilities.PRESSURE, Abilities.NONE, Abilities.INNER_FOCUS, 580, 100, 75, 115, 90, 115, 85, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.LARVITAR, 2, false, false, false, "Rock Skin Pokémon", PokemonType.ROCK, PokemonType.GROUND, 0.6, 72, Abilities.GUTS, Abilities.NONE, Abilities.SAND_VEIL, 300, 50, 64, 50, 45, 50, 41, 45, 35, 60, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.PUPITAR, 2, false, false, false, "Hard Shell Pokémon", PokemonType.ROCK, PokemonType.GROUND, 1.2, 152, Abilities.SHED_SKIN, Abilities.NONE, Abilities.SHED_SKIN, 410, 70, 84, 70, 65, 70, 51, 45, 35, 144, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.TYRANITAR, 2, false, false, false, "Armor Pokémon", PokemonType.ROCK, PokemonType.DARK, 2, 202, Abilities.SAND_STREAM, Abilities.NONE, Abilities.UNNERVE, 600, 100, 134, 110, 95, 100, 61, 45, 35, 300, GrowthRate.SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.ROCK, PokemonType.DARK, 2, 202, Abilities.SAND_STREAM, Abilities.NONE, Abilities.UNNERVE, 600, 100, 134, 110, 95, 100, 61, 45, 35, 300, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.ROCK, PokemonType.DARK, 2.5, 255, Abilities.SAND_STREAM, Abilities.NONE, Abilities.SAND_STREAM, 700, 100, 164, 150, 95, 120, 71, 45, 35, 300), - ), - new PokemonSpecies(Species.LUGIA, 2, false, true, false, "Diving Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 5.2, 216, Abilities.PRESSURE, Abilities.NONE, Abilities.MULTISCALE, 680, 106, 90, 130, 90, 154, 110, 3, 0, 340, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.HO_OH, 2, false, true, false, "Rainbow Pokémon", PokemonType.FIRE, PokemonType.FLYING, 3.8, 199, Abilities.PRESSURE, Abilities.NONE, Abilities.REGENERATOR, 680, 106, 130, 90, 110, 154, 90, 3, 0, 340, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.CELEBI, 2, false, false, true, "Time Travel Pokémon", PokemonType.PSYCHIC, PokemonType.GRASS, 0.6, 5, Abilities.NATURAL_CURE, Abilities.NONE, Abilities.NONE, 600, 100, 100, 100, 100, 100, 100, 45, 100, 300, GrowthRate.MEDIUM_SLOW, null, false), - new PokemonSpecies(Species.TREECKO, 3, false, false, false, "Wood Gecko Pokémon", PokemonType.GRASS, null, 0.5, 5, Abilities.OVERGROW, Abilities.NONE, Abilities.UNBURDEN, 310, 40, 45, 35, 65, 55, 70, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.GROVYLE, 3, false, false, false, "Wood Gecko Pokémon", PokemonType.GRASS, null, 0.9, 21.6, Abilities.OVERGROW, Abilities.NONE, Abilities.UNBURDEN, 405, 50, 65, 45, 85, 65, 95, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.SCEPTILE, 3, false, false, false, "Forest Pokémon", PokemonType.GRASS, null, 1.7, 52.2, Abilities.OVERGROW, Abilities.NONE, Abilities.UNBURDEN, 530, 70, 85, 65, 105, 85, 120, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, - new PokemonForm("Normal", "", PokemonType.GRASS, null, 1.7, 52.2, Abilities.OVERGROW, Abilities.NONE, Abilities.UNBURDEN, 530, 70, 85, 65, 105, 85, 120, 45, 50, 265, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.GRASS, PokemonType.DRAGON, 1.9, 55.2, Abilities.LIGHTNING_ROD, Abilities.NONE, Abilities.LIGHTNING_ROD, 630, 70, 110, 75, 145, 85, 145, 45, 50, 265), - ), - new PokemonSpecies(Species.TORCHIC, 3, false, false, false, "Chick Pokémon", PokemonType.FIRE, null, 0.4, 2.5, Abilities.BLAZE, Abilities.NONE, Abilities.SPEED_BOOST, 310, 45, 60, 40, 70, 50, 45, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, true), - new PokemonSpecies(Species.COMBUSKEN, 3, false, false, false, "Young Fowl Pokémon", PokemonType.FIRE, PokemonType.FIGHTING, 0.9, 19.5, Abilities.BLAZE, Abilities.NONE, Abilities.SPEED_BOOST, 405, 60, 85, 60, 85, 60, 55, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, true), - new PokemonSpecies(Species.BLAZIKEN, 3, false, false, false, "Blaze Pokémon", PokemonType.FIRE, PokemonType.FIGHTING, 1.9, 52, Abilities.BLAZE, Abilities.NONE, Abilities.SPEED_BOOST, 530, 80, 120, 70, 110, 70, 80, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, true, true, - new PokemonForm("Normal", "", PokemonType.FIRE, PokemonType.FIGHTING, 1.9, 52, Abilities.BLAZE, Abilities.NONE, Abilities.SPEED_BOOST, 530, 80, 120, 70, 110, 70, 80, 45, 50, 265, true, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.FIRE, PokemonType.FIGHTING, 1.9, 52, Abilities.SPEED_BOOST, Abilities.NONE, Abilities.SPEED_BOOST, 630, 80, 160, 80, 130, 80, 100, 45, 50, 265, true), - ), - new PokemonSpecies(Species.MUDKIP, 3, false, false, false, "Mud Fish Pokémon", PokemonType.WATER, null, 0.4, 7.6, Abilities.TORRENT, Abilities.NONE, Abilities.DAMP, 310, 50, 70, 50, 50, 50, 40, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.MARSHTOMP, 3, false, false, false, "Mud Fish Pokémon", PokemonType.WATER, PokemonType.GROUND, 0.7, 28, Abilities.TORRENT, Abilities.NONE, Abilities.DAMP, 405, 70, 85, 70, 60, 70, 50, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.SWAMPERT, 3, false, false, false, "Mud Fish Pokémon", PokemonType.WATER, PokemonType.GROUND, 1.5, 81.9, Abilities.TORRENT, Abilities.NONE, Abilities.DAMP, 535, 100, 110, 90, 85, 90, 60, 45, 50, 268, GrowthRate.MEDIUM_SLOW, 87.5, false, true, - new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.GROUND, 1.5, 81.9, Abilities.TORRENT, Abilities.NONE, Abilities.DAMP, 535, 100, 110, 90, 85, 90, 60, 45, 50, 268, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.WATER, PokemonType.GROUND, 1.9, 102, Abilities.SWIFT_SWIM, Abilities.NONE, Abilities.SWIFT_SWIM, 635, 100, 150, 110, 95, 110, 70, 45, 50, 268), - ), - new PokemonSpecies(Species.POOCHYENA, 3, false, false, false, "Bite Pokémon", PokemonType.DARK, null, 0.5, 13.6, Abilities.RUN_AWAY, Abilities.QUICK_FEET, Abilities.RATTLED, 220, 35, 55, 35, 30, 30, 35, 255, 70, 56, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.MIGHTYENA, 3, false, false, false, "Bite Pokémon", PokemonType.DARK, null, 1, 37, Abilities.INTIMIDATE, Abilities.QUICK_FEET, Abilities.MOXIE, 420, 70, 90, 70, 60, 60, 70, 127, 70, 147, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.ZIGZAGOON, 3, false, false, false, "Tiny Raccoon Pokémon", PokemonType.NORMAL, null, 0.4, 17.5, Abilities.PICKUP, Abilities.GLUTTONY, Abilities.QUICK_FEET, 240, 38, 30, 41, 30, 41, 60, 255, 50, 56, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.LINOONE, 3, false, false, false, "Rushing Pokémon", PokemonType.NORMAL, null, 0.5, 32.5, Abilities.PICKUP, Abilities.GLUTTONY, Abilities.QUICK_FEET, 420, 78, 70, 61, 50, 61, 100, 90, 50, 147, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.WURMPLE, 3, false, false, false, "Worm Pokémon", PokemonType.BUG, null, 0.3, 3.6, Abilities.SHIELD_DUST, Abilities.NONE, Abilities.RUN_AWAY, 195, 45, 45, 35, 20, 30, 20, 255, 70, 56, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.SILCOON, 3, false, false, false, "Cocoon Pokémon", PokemonType.BUG, null, 0.6, 10, Abilities.SHED_SKIN, Abilities.NONE, Abilities.SHED_SKIN, 205, 50, 35, 55, 25, 25, 15, 120, 70, 72, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.BEAUTIFLY, 3, false, false, false, "Butterfly Pokémon", PokemonType.BUG, PokemonType.FLYING, 1, 28.4, Abilities.SWARM, Abilities.NONE, Abilities.RIVALRY, 395, 60, 70, 50, 100, 50, 65, 45, 70, 198, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.CASCOON, 3, false, false, false, "Cocoon Pokémon", PokemonType.BUG, null, 0.7, 11.5, Abilities.SHED_SKIN, Abilities.NONE, Abilities.SHED_SKIN, 205, 50, 35, 55, 25, 25, 15, 120, 70, 72, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.DUSTOX, 3, false, false, false, "Poison Moth Pokémon", PokemonType.BUG, PokemonType.POISON, 1.2, 31.6, Abilities.SHIELD_DUST, Abilities.NONE, Abilities.COMPOUND_EYES, 385, 60, 50, 70, 50, 90, 65, 45, 70, 193, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.LOTAD, 3, false, false, false, "Water Weed Pokémon", PokemonType.WATER, PokemonType.GRASS, 0.5, 2.6, Abilities.SWIFT_SWIM, Abilities.RAIN_DISH, Abilities.OWN_TEMPO, 220, 40, 30, 30, 40, 50, 30, 255, 50, 44, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.LOMBRE, 3, false, false, false, "Jolly Pokémon", PokemonType.WATER, PokemonType.GRASS, 1.2, 32.5, Abilities.SWIFT_SWIM, Abilities.RAIN_DISH, Abilities.OWN_TEMPO, 340, 60, 50, 50, 60, 70, 50, 120, 50, 119, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.LUDICOLO, 3, false, false, false, "Carefree Pokémon", PokemonType.WATER, PokemonType.GRASS, 1.5, 55, Abilities.SWIFT_SWIM, Abilities.RAIN_DISH, Abilities.OWN_TEMPO, 480, 80, 70, 70, 90, 100, 70, 45, 50, 240, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(Species.SEEDOT, 3, false, false, false, "Acorn Pokémon", PokemonType.GRASS, null, 0.5, 4, Abilities.CHLOROPHYLL, Abilities.EARLY_BIRD, Abilities.PICKPOCKET, 220, 40, 40, 50, 30, 30, 30, 255, 50, 44, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.NUZLEAF, 3, false, false, false, "Wily Pokémon", PokemonType.GRASS, PokemonType.DARK, 1, 28, Abilities.CHLOROPHYLL, Abilities.EARLY_BIRD, Abilities.PICKPOCKET, 340, 70, 70, 40, 60, 40, 60, 120, 50, 119, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(Species.SHIFTRY, 3, false, false, false, "Wicked Pokémon", PokemonType.GRASS, PokemonType.DARK, 1.3, 59.6, Abilities.CHLOROPHYLL, Abilities.WIND_RIDER, Abilities.PICKPOCKET, 480, 90, 100, 60, 90, 60, 80, 45, 50, 240, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(Species.TAILLOW, 3, false, false, false, "Tiny Swallow Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.3, 2.3, Abilities.GUTS, Abilities.NONE, Abilities.SCRAPPY, 270, 40, 55, 30, 30, 30, 85, 200, 70, 54, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.SWELLOW, 3, false, false, false, "Swallow Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.7, 19.8, Abilities.GUTS, Abilities.NONE, Abilities.SCRAPPY, 455, 60, 85, 60, 75, 50, 125, 45, 70, 159, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.WINGULL, 3, false, false, false, "Seagull Pokémon", PokemonType.WATER, PokemonType.FLYING, 0.6, 9.5, Abilities.KEEN_EYE, Abilities.HYDRATION, Abilities.RAIN_DISH, 270, 40, 30, 30, 55, 30, 85, 190, 50, 54, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.PELIPPER, 3, false, false, false, "Water Bird Pokémon", PokemonType.WATER, PokemonType.FLYING, 1.2, 28, Abilities.KEEN_EYE, Abilities.DRIZZLE, Abilities.RAIN_DISH, 440, 60, 50, 100, 95, 70, 65, 45, 50, 154, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.RALTS, 3, false, false, false, "Feeling Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 0.4, 6.6, Abilities.SYNCHRONIZE, Abilities.TRACE, Abilities.TELEPATHY, 198, 28, 25, 25, 45, 35, 40, 235, 35, 40, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.KIRLIA, 3, false, false, false, "Emotion Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 0.8, 20.2, Abilities.SYNCHRONIZE, Abilities.TRACE, Abilities.TELEPATHY, 278, 38, 35, 35, 65, 55, 50, 120, 35, 97, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.GARDEVOIR, 3, false, false, false, "Embrace Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 1.6, 48.4, Abilities.SYNCHRONIZE, Abilities.TRACE, Abilities.TELEPATHY, 518, 68, 65, 65, 125, 115, 80, 45, 35, 259, GrowthRate.SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.PSYCHIC, PokemonType.FAIRY, 1.6, 48.4, Abilities.SYNCHRONIZE, Abilities.TRACE, Abilities.TELEPATHY, 518, 68, 65, 65, 125, 115, 80, 45, 35, 259, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.PSYCHIC, PokemonType.FAIRY, 1.6, 48.4, Abilities.PIXILATE, Abilities.PIXILATE, Abilities.PIXILATE, 618, 68, 85, 65, 165, 135, 100, 45, 35, 259), - ), - new PokemonSpecies(Species.SURSKIT, 3, false, false, false, "Pond Skater Pokémon", PokemonType.BUG, PokemonType.WATER, 0.5, 1.7, Abilities.SWIFT_SWIM, Abilities.NONE, Abilities.RAIN_DISH, 269, 40, 30, 32, 50, 52, 65, 200, 70, 54, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.MASQUERAIN, 3, false, false, false, "Eyeball Pokémon", PokemonType.BUG, PokemonType.FLYING, 0.8, 3.6, Abilities.INTIMIDATE, Abilities.NONE, Abilities.UNNERVE, 454, 70, 60, 62, 100, 82, 80, 75, 70, 159, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.SHROOMISH, 3, false, false, false, "Mushroom Pokémon", PokemonType.GRASS, null, 0.4, 4.5, Abilities.EFFECT_SPORE, Abilities.POISON_HEAL, Abilities.QUICK_FEET, 295, 60, 40, 60, 40, 60, 35, 255, 70, 59, GrowthRate.FLUCTUATING, 50, false), - new PokemonSpecies(Species.BRELOOM, 3, false, false, false, "Mushroom Pokémon", PokemonType.GRASS, PokemonType.FIGHTING, 1.2, 39.2, Abilities.EFFECT_SPORE, Abilities.POISON_HEAL, Abilities.TECHNICIAN, 460, 60, 130, 80, 60, 60, 70, 90, 70, 161, GrowthRate.FLUCTUATING, 50, false), - new PokemonSpecies(Species.SLAKOTH, 3, false, false, false, "Slacker Pokémon", PokemonType.NORMAL, null, 0.8, 24, Abilities.TRUANT, Abilities.NONE, Abilities.STALL, 280, 60, 60, 60, 35, 35, 30, 255, 70, 56, GrowthRate.SLOW, 50, false), //Custom Hidden - new PokemonSpecies(Species.VIGOROTH, 3, false, false, false, "Wild Monkey Pokémon", PokemonType.NORMAL, null, 1.4, 46.5, Abilities.VITAL_SPIRIT, Abilities.NONE, Abilities.INSOMNIA, 440, 80, 80, 80, 55, 55, 90, 120, 70, 154, GrowthRate.SLOW, 50, false), //Custom Hidden - new PokemonSpecies(Species.SLAKING, 3, false, false, false, "Lazy Pokémon", PokemonType.NORMAL, null, 2, 130.5, Abilities.TRUANT, Abilities.NONE, Abilities.STALL, 670, 150, 160, 100, 95, 65, 100, 45, 70, 285, GrowthRate.SLOW, 50, false), //Custom Hidden - new PokemonSpecies(Species.NINCADA, 3, false, false, false, "Trainee Pokémon", PokemonType.BUG, PokemonType.GROUND, 0.5, 5.5, Abilities.COMPOUND_EYES, Abilities.NONE, Abilities.RUN_AWAY, 266, 31, 45, 90, 30, 30, 40, 255, 50, 53, GrowthRate.ERRATIC, 50, false), - new PokemonSpecies(Species.NINJASK, 3, false, false, false, "Ninja Pokémon", PokemonType.BUG, PokemonType.FLYING, 0.8, 12, Abilities.SPEED_BOOST, Abilities.NONE, Abilities.INFILTRATOR, 456, 61, 90, 45, 50, 50, 160, 120, 50, 160, GrowthRate.ERRATIC, 50, false), - new PokemonSpecies(Species.SHEDINJA, 3, false, false, false, "Shed Pokémon", PokemonType.BUG, PokemonType.GHOST, 0.8, 1.2, Abilities.WONDER_GUARD, Abilities.NONE, Abilities.NONE, 236, 1, 90, 45, 30, 30, 40, 45, 50, 83, GrowthRate.ERRATIC, null, false), - new PokemonSpecies(Species.WHISMUR, 3, false, false, false, "Whisper Pokémon", PokemonType.NORMAL, null, 0.6, 16.3, Abilities.SOUNDPROOF, Abilities.NONE, Abilities.RATTLED, 240, 64, 51, 23, 51, 23, 28, 190, 50, 48, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.LOUDRED, 3, false, false, false, "Big Voice Pokémon", PokemonType.NORMAL, null, 1, 40.5, Abilities.SOUNDPROOF, Abilities.NONE, Abilities.SCRAPPY, 360, 84, 71, 43, 71, 43, 48, 120, 50, 126, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.EXPLOUD, 3, false, false, false, "Loud Noise Pokémon", PokemonType.NORMAL, null, 1.5, 84, Abilities.SOUNDPROOF, Abilities.NONE, Abilities.SCRAPPY, 490, 104, 91, 63, 91, 73, 68, 45, 50, 245, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.MAKUHITA, 3, false, false, false, "Guts Pokémon", PokemonType.FIGHTING, null, 1, 86.4, Abilities.THICK_FAT, Abilities.GUTS, Abilities.SHEER_FORCE, 237, 72, 60, 30, 20, 30, 25, 180, 70, 47, GrowthRate.FLUCTUATING, 75, false), - new PokemonSpecies(Species.HARIYAMA, 3, false, false, false, "Arm Thrust Pokémon", PokemonType.FIGHTING, null, 2.3, 253.8, Abilities.THICK_FAT, Abilities.GUTS, Abilities.SHEER_FORCE, 474, 144, 120, 60, 40, 60, 50, 200, 70, 166, GrowthRate.FLUCTUATING, 75, false), - new PokemonSpecies(Species.AZURILL, 3, false, false, false, "Polka Dot Pokémon", PokemonType.NORMAL, PokemonType.FAIRY, 0.2, 2, Abilities.THICK_FAT, Abilities.HUGE_POWER, Abilities.SAP_SIPPER, 190, 50, 20, 40, 20, 40, 20, 150, 50, 38, GrowthRate.FAST, 25, false), - new PokemonSpecies(Species.NOSEPASS, 3, false, false, false, "Compass Pokémon", PokemonType.ROCK, null, 1, 97, Abilities.STURDY, Abilities.MAGNET_PULL, Abilities.SAND_FORCE, 375, 30, 45, 135, 45, 90, 30, 255, 70, 75, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.SKITTY, 3, false, false, false, "Kitten Pokémon", PokemonType.NORMAL, null, 0.6, 11, Abilities.CUTE_CHARM, Abilities.NORMALIZE, Abilities.WONDER_SKIN, 260, 50, 45, 45, 35, 35, 50, 255, 70, 52, GrowthRate.FAST, 25, false), - new PokemonSpecies(Species.DELCATTY, 3, false, false, false, "Prim Pokémon", PokemonType.NORMAL, null, 1.1, 32.6, Abilities.CUTE_CHARM, Abilities.NORMALIZE, Abilities.WONDER_SKIN, 400, 70, 65, 65, 55, 55, 90, 60, 70, 140, GrowthRate.FAST, 25, false), - new PokemonSpecies(Species.SABLEYE, 3, false, false, false, "Darkness Pokémon", PokemonType.DARK, PokemonType.GHOST, 0.5, 11, Abilities.KEEN_EYE, Abilities.STALL, Abilities.PRANKSTER, 380, 50, 75, 75, 65, 65, 50, 45, 35, 133, GrowthRate.MEDIUM_SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.DARK, PokemonType.GHOST, 0.5, 11, Abilities.KEEN_EYE, Abilities.STALL, Abilities.PRANKSTER, 380, 50, 75, 75, 65, 65, 50, 45, 35, 133, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DARK, PokemonType.GHOST, 0.5, 161, Abilities.MAGIC_BOUNCE, Abilities.MAGIC_BOUNCE, Abilities.MAGIC_BOUNCE, 480, 50, 85, 125, 85, 115, 20, 45, 35, 133), - ), - new PokemonSpecies(Species.MAWILE, 3, false, false, false, "Deceiver Pokémon", PokemonType.STEEL, PokemonType.FAIRY, 0.6, 11.5, Abilities.HYPER_CUTTER, Abilities.INTIMIDATE, Abilities.SHEER_FORCE, 380, 50, 85, 85, 55, 55, 50, 45, 50, 133, GrowthRate.FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.FAIRY, 0.6, 11.5, Abilities.HYPER_CUTTER, Abilities.INTIMIDATE, Abilities.SHEER_FORCE, 380, 50, 85, 85, 55, 55, 50, 45, 50, 133, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.STEEL, PokemonType.FAIRY, 1, 23.5, Abilities.HUGE_POWER, Abilities.HUGE_POWER, Abilities.HUGE_POWER, 480, 50, 105, 125, 55, 95, 50, 45, 50, 133), - ), - new PokemonSpecies(Species.ARON, 3, false, false, false, "Iron Armor Pokémon", PokemonType.STEEL, PokemonType.ROCK, 0.4, 60, Abilities.STURDY, Abilities.ROCK_HEAD, Abilities.HEAVY_METAL, 330, 50, 70, 100, 40, 40, 30, 180, 35, 66, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.LAIRON, 3, false, false, false, "Iron Armor Pokémon", PokemonType.STEEL, PokemonType.ROCK, 0.9, 120, Abilities.STURDY, Abilities.ROCK_HEAD, Abilities.HEAVY_METAL, 430, 60, 90, 140, 50, 50, 40, 90, 35, 151, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.AGGRON, 3, false, false, false, "Iron Armor Pokémon", PokemonType.STEEL, PokemonType.ROCK, 2.1, 360, Abilities.STURDY, Abilities.ROCK_HEAD, Abilities.HEAVY_METAL, 530, 70, 110, 180, 60, 60, 50, 45, 35, 265, GrowthRate.SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.ROCK, 2.1, 360, Abilities.STURDY, Abilities.ROCK_HEAD, Abilities.HEAVY_METAL, 530, 70, 110, 180, 60, 60, 50, 45, 35, 265, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.STEEL, null, 2.2, 395, Abilities.FILTER, Abilities.FILTER, Abilities.FILTER, 630, 70, 140, 230, 60, 80, 50, 45, 35, 265), - ), - new PokemonSpecies(Species.MEDITITE, 3, false, false, false, "Meditate Pokémon", PokemonType.FIGHTING, PokemonType.PSYCHIC, 0.6, 11.2, Abilities.PURE_POWER, Abilities.NONE, Abilities.TELEPATHY, 280, 30, 40, 55, 40, 55, 60, 180, 70, 56, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.MEDICHAM, 3, false, false, false, "Meditate Pokémon", PokemonType.FIGHTING, PokemonType.PSYCHIC, 1.3, 31.5, Abilities.PURE_POWER, Abilities.NONE, Abilities.TELEPATHY, 410, 60, 60, 75, 60, 75, 80, 90, 70, 144, GrowthRate.MEDIUM_FAST, 50, true, true, - new PokemonForm("Normal", "", PokemonType.FIGHTING, PokemonType.PSYCHIC, 1.3, 31.5, Abilities.PURE_POWER, Abilities.NONE, Abilities.TELEPATHY, 410, 60, 60, 75, 60, 75, 80, 90, 70, 144, true, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.FIGHTING, PokemonType.PSYCHIC, 1.3, 31.5, Abilities.PURE_POWER, Abilities.NONE, Abilities.PURE_POWER, 510, 60, 100, 85, 80, 85, 100, 90, 70, 144, true), - ), - new PokemonSpecies(Species.ELECTRIKE, 3, false, false, false, "Lightning Pokémon", PokemonType.ELECTRIC, null, 0.6, 15.2, Abilities.STATIC, Abilities.LIGHTNING_ROD, Abilities.MINUS, 295, 40, 45, 40, 65, 40, 65, 120, 50, 59, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.MANECTRIC, 3, false, false, false, "Discharge Pokémon", PokemonType.ELECTRIC, null, 1.5, 40.2, Abilities.STATIC, Abilities.LIGHTNING_ROD, Abilities.MINUS, 475, 70, 75, 60, 105, 60, 105, 45, 50, 166, GrowthRate.SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.ELECTRIC, null, 1.5, 40.2, Abilities.STATIC, Abilities.LIGHTNING_ROD, Abilities.MINUS, 475, 70, 75, 60, 105, 60, 105, 45, 50, 166, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.ELECTRIC, null, 1.8, 44, Abilities.INTIMIDATE, Abilities.INTIMIDATE, Abilities.INTIMIDATE, 575, 70, 75, 80, 135, 80, 135, 45, 50, 166), - ), - new PokemonSpecies(Species.PLUSLE, 3, false, false, false, "Cheering Pokémon", PokemonType.ELECTRIC, null, 0.4, 4.2, Abilities.PLUS, Abilities.NONE, Abilities.LIGHTNING_ROD, 405, 60, 50, 40, 85, 75, 95, 200, 70, 142, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.MINUN, 3, false, false, false, "Cheering Pokémon", PokemonType.ELECTRIC, null, 0.4, 4.2, Abilities.MINUS, Abilities.NONE, Abilities.VOLT_ABSORB, 405, 60, 40, 50, 75, 85, 95, 200, 70, 142, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.VOLBEAT, 3, false, false, false, "Firefly Pokémon", PokemonType.BUG, null, 0.7, 17.7, Abilities.ILLUMINATE, Abilities.SWARM, Abilities.PRANKSTER, 430, 65, 73, 75, 47, 85, 85, 150, 70, 151, GrowthRate.ERRATIC, 100, false), - new PokemonSpecies(Species.ILLUMISE, 3, false, false, false, "Firefly Pokémon", PokemonType.BUG, null, 0.6, 17.7, Abilities.OBLIVIOUS, Abilities.TINTED_LENS, Abilities.PRANKSTER, 430, 65, 47, 75, 73, 85, 85, 150, 70, 151, GrowthRate.FLUCTUATING, 0, false), - new PokemonSpecies(Species.ROSELIA, 3, false, false, false, "Thorn Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.3, 2, Abilities.NATURAL_CURE, Abilities.POISON_POINT, Abilities.LEAF_GUARD, 400, 50, 60, 45, 100, 80, 65, 150, 50, 140, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(Species.GULPIN, 3, false, false, false, "Stomach Pokémon", PokemonType.POISON, null, 0.4, 10.3, Abilities.LIQUID_OOZE, Abilities.STICKY_HOLD, Abilities.GLUTTONY, 302, 70, 43, 53, 43, 53, 40, 225, 70, 60, GrowthRate.FLUCTUATING, 50, true), - new PokemonSpecies(Species.SWALOT, 3, false, false, false, "Poison Bag Pokémon", PokemonType.POISON, null, 1.7, 80, Abilities.LIQUID_OOZE, Abilities.STICKY_HOLD, Abilities.GLUTTONY, 467, 100, 73, 83, 73, 83, 55, 75, 70, 163, GrowthRate.FLUCTUATING, 50, true), - new PokemonSpecies(Species.CARVANHA, 3, false, false, false, "Savage Pokémon", PokemonType.WATER, PokemonType.DARK, 0.8, 20.8, Abilities.ROUGH_SKIN, Abilities.NONE, Abilities.SPEED_BOOST, 305, 45, 90, 20, 65, 20, 65, 225, 35, 61, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.SHARPEDO, 3, false, false, false, "Brutal Pokémon", PokemonType.WATER, PokemonType.DARK, 1.8, 88.8, Abilities.ROUGH_SKIN, Abilities.NONE, Abilities.SPEED_BOOST, 460, 70, 120, 40, 95, 40, 95, 60, 35, 161, GrowthRate.SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.DARK, 1.8, 88.8, Abilities.ROUGH_SKIN, Abilities.NONE, Abilities.SPEED_BOOST, 460, 70, 120, 40, 95, 40, 95, 60, 35, 161, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.WATER, PokemonType.DARK, 2.5, 130.3, Abilities.STRONG_JAW, Abilities.NONE, Abilities.STRONG_JAW, 560, 70, 140, 70, 110, 65, 105, 60, 35, 161), - ), - new PokemonSpecies(Species.WAILMER, 3, false, false, false, "Ball Whale Pokémon", PokemonType.WATER, null, 2, 130, Abilities.WATER_VEIL, Abilities.OBLIVIOUS, Abilities.PRESSURE, 400, 130, 70, 35, 70, 35, 60, 125, 50, 80, GrowthRate.FLUCTUATING, 50, false), - new PokemonSpecies(Species.WAILORD, 3, false, false, false, "Float Whale Pokémon", PokemonType.WATER, null, 14.5, 398, Abilities.WATER_VEIL, Abilities.OBLIVIOUS, Abilities.PRESSURE, 500, 170, 90, 45, 90, 45, 60, 60, 50, 175, GrowthRate.FLUCTUATING, 50, false), - new PokemonSpecies(Species.NUMEL, 3, false, false, false, "Numb Pokémon", PokemonType.FIRE, PokemonType.GROUND, 0.7, 24, Abilities.OBLIVIOUS, Abilities.SIMPLE, Abilities.OWN_TEMPO, 305, 60, 60, 40, 65, 45, 35, 255, 70, 61, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.CAMERUPT, 3, false, false, false, "Eruption Pokémon", PokemonType.FIRE, PokemonType.GROUND, 1.9, 220, Abilities.MAGMA_ARMOR, Abilities.SOLID_ROCK, Abilities.ANGER_POINT, 460, 70, 100, 70, 105, 75, 40, 150, 70, 161, GrowthRate.MEDIUM_FAST, 50, true, true, - new PokemonForm("Normal", "", PokemonType.FIRE, PokemonType.GROUND, 1.9, 220, Abilities.MAGMA_ARMOR, Abilities.SOLID_ROCK, Abilities.ANGER_POINT, 460, 70, 100, 70, 105, 75, 40, 150, 70, 161, true, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.FIRE, PokemonType.GROUND, 2.5, 320.5, Abilities.SHEER_FORCE, Abilities.SHEER_FORCE, Abilities.SHEER_FORCE, 560, 70, 120, 100, 145, 105, 20, 150, 70, 161), - ), - new PokemonSpecies(Species.TORKOAL, 3, false, false, false, "Coal Pokémon", PokemonType.FIRE, null, 0.5, 80.4, Abilities.WHITE_SMOKE, Abilities.DROUGHT, Abilities.SHELL_ARMOR, 470, 70, 85, 140, 85, 70, 20, 90, 50, 165, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.SPOINK, 3, false, false, false, "Bounce Pokémon", PokemonType.PSYCHIC, null, 0.7, 30.6, Abilities.THICK_FAT, Abilities.OWN_TEMPO, Abilities.GLUTTONY, 330, 60, 25, 35, 70, 80, 60, 255, 70, 66, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.GRUMPIG, 3, false, false, false, "Manipulate Pokémon", PokemonType.PSYCHIC, null, 0.9, 71.5, Abilities.THICK_FAT, Abilities.OWN_TEMPO, Abilities.GLUTTONY, 470, 80, 45, 65, 90, 110, 80, 60, 70, 165, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.SPINDA, 3, false, false, false, "Spot Panda Pokémon", PokemonType.NORMAL, null, 1.1, 5, Abilities.OWN_TEMPO, Abilities.TANGLED_FEET, Abilities.CONTRARY, 360, 60, 60, 60, 60, 60, 60, 255, 70, 126, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.TRAPINCH, 3, false, false, false, "Ant Pit Pokémon", PokemonType.GROUND, null, 0.7, 15, Abilities.HYPER_CUTTER, Abilities.ARENA_TRAP, Abilities.SHEER_FORCE, 290, 45, 100, 45, 45, 45, 10, 255, 50, 58, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.VIBRAVA, 3, false, false, false, "Vibration Pokémon", PokemonType.GROUND, PokemonType.DRAGON, 1.1, 15.3, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 340, 50, 70, 50, 50, 50, 70, 120, 50, 119, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.FLYGON, 3, false, false, false, "Mystic Pokémon", PokemonType.GROUND, PokemonType.DRAGON, 2, 82, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 520, 80, 100, 80, 80, 80, 100, 45, 50, 260, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.CACNEA, 3, false, false, false, "Cactus Pokémon", PokemonType.GRASS, null, 0.4, 51.3, Abilities.SAND_VEIL, Abilities.NONE, Abilities.WATER_ABSORB, 335, 50, 85, 40, 85, 40, 35, 190, 35, 67, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.CACTURNE, 3, false, false, false, "Scarecrow Pokémon", PokemonType.GRASS, PokemonType.DARK, 1.3, 77.4, Abilities.SAND_VEIL, Abilities.NONE, Abilities.WATER_ABSORB, 475, 70, 115, 60, 115, 60, 55, 60, 35, 166, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(Species.SWABLU, 3, false, false, false, "Cotton Bird Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.4, 1.2, Abilities.NATURAL_CURE, Abilities.NONE, Abilities.CLOUD_NINE, 310, 45, 40, 60, 40, 75, 50, 255, 50, 62, GrowthRate.ERRATIC, 50, false), - new PokemonSpecies(Species.ALTARIA, 3, false, false, false, "Humming Pokémon", PokemonType.DRAGON, PokemonType.FLYING, 1.1, 20.6, Abilities.NATURAL_CURE, Abilities.NONE, Abilities.CLOUD_NINE, 490, 75, 70, 90, 70, 105, 80, 45, 50, 172, GrowthRate.ERRATIC, 50, false, true, - new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.FLYING, 1.1, 20.6, Abilities.NATURAL_CURE, Abilities.NONE, Abilities.CLOUD_NINE, 490, 75, 70, 90, 70, 105, 80, 45, 50, 172, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DRAGON, PokemonType.FAIRY, 1.5, 20.6, Abilities.PIXILATE, Abilities.NONE, Abilities.PIXILATE, 590, 75, 110, 110, 110, 105, 80, 45, 50, 172), - ), - new PokemonSpecies(Species.ZANGOOSE, 3, false, false, false, "Cat Ferret Pokémon", PokemonType.NORMAL, null, 1.3, 40.3, Abilities.IMMUNITY, Abilities.NONE, Abilities.TOXIC_BOOST, 458, 73, 115, 60, 60, 60, 90, 90, 70, 160, GrowthRate.ERRATIC, 50, false), - new PokemonSpecies(Species.SEVIPER, 3, false, false, false, "Fang Snake Pokémon", PokemonType.POISON, null, 2.7, 52.5, Abilities.SHED_SKIN, Abilities.NONE, Abilities.INFILTRATOR, 458, 73, 100, 60, 100, 60, 65, 90, 70, 160, GrowthRate.FLUCTUATING, 50, false), - new PokemonSpecies(Species.LUNATONE, 3, false, false, false, "Meteorite Pokémon", PokemonType.ROCK, PokemonType.PSYCHIC, 1, 168, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 460, 90, 55, 65, 95, 85, 70, 45, 50, 161, GrowthRate.FAST, null, false), - new PokemonSpecies(Species.SOLROCK, 3, false, false, false, "Meteorite Pokémon", PokemonType.ROCK, PokemonType.PSYCHIC, 1.2, 154, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 460, 90, 95, 85, 55, 65, 70, 45, 50, 161, GrowthRate.FAST, null, false), - new PokemonSpecies(Species.BARBOACH, 3, false, false, false, "Whiskers Pokémon", PokemonType.WATER, PokemonType.GROUND, 0.4, 1.9, Abilities.OBLIVIOUS, Abilities.ANTICIPATION, Abilities.HYDRATION, 288, 50, 48, 43, 46, 41, 60, 190, 50, 58, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.WHISCASH, 3, false, false, false, "Whiskers Pokémon", PokemonType.WATER, PokemonType.GROUND, 0.9, 23.6, Abilities.OBLIVIOUS, Abilities.ANTICIPATION, Abilities.HYDRATION, 468, 110, 78, 73, 76, 71, 60, 75, 50, 164, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.CORPHISH, 3, false, false, false, "Ruffian Pokémon", PokemonType.WATER, null, 0.6, 11.5, Abilities.HYPER_CUTTER, Abilities.SHELL_ARMOR, Abilities.ADAPTABILITY, 308, 43, 80, 65, 50, 35, 35, 205, 50, 62, GrowthRate.FLUCTUATING, 50, false), - new PokemonSpecies(Species.CRAWDAUNT, 3, false, false, false, "Rogue Pokémon", PokemonType.WATER, PokemonType.DARK, 1.1, 32.8, Abilities.HYPER_CUTTER, Abilities.SHELL_ARMOR, Abilities.ADAPTABILITY, 468, 63, 120, 85, 90, 55, 55, 155, 50, 164, GrowthRate.FLUCTUATING, 50, false), - new PokemonSpecies(Species.BALTOY, 3, false, false, false, "Clay Doll Pokémon", PokemonType.GROUND, PokemonType.PSYCHIC, 0.5, 21.5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 300, 40, 40, 55, 40, 70, 55, 255, 50, 60, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(Species.CLAYDOL, 3, false, false, false, "Clay Doll Pokémon", PokemonType.GROUND, PokemonType.PSYCHIC, 1.5, 108, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 500, 60, 70, 105, 70, 120, 75, 90, 50, 175, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(Species.LILEEP, 3, false, false, false, "Sea Lily Pokémon", PokemonType.ROCK, PokemonType.GRASS, 1, 23.8, Abilities.SUCTION_CUPS, Abilities.NONE, Abilities.STORM_DRAIN, 355, 66, 41, 77, 61, 87, 23, 45, 50, 71, GrowthRate.ERRATIC, 87.5, false), - new PokemonSpecies(Species.CRADILY, 3, false, false, false, "Barnacle Pokémon", PokemonType.ROCK, PokemonType.GRASS, 1.5, 60.4, Abilities.SUCTION_CUPS, Abilities.NONE, Abilities.STORM_DRAIN, 495, 86, 81, 97, 81, 107, 43, 45, 50, 173, GrowthRate.ERRATIC, 87.5, false), - new PokemonSpecies(Species.ANORITH, 3, false, false, false, "Old Shrimp Pokémon", PokemonType.ROCK, PokemonType.BUG, 0.7, 12.5, Abilities.BATTLE_ARMOR, Abilities.NONE, Abilities.SWIFT_SWIM, 355, 45, 95, 50, 40, 50, 75, 45, 50, 71, GrowthRate.ERRATIC, 87.5, false), - new PokemonSpecies(Species.ARMALDO, 3, false, false, false, "Plate Pokémon", PokemonType.ROCK, PokemonType.BUG, 1.5, 68.2, Abilities.BATTLE_ARMOR, Abilities.NONE, Abilities.SWIFT_SWIM, 495, 75, 125, 100, 70, 80, 45, 45, 50, 173, GrowthRate.ERRATIC, 87.5, false), - new PokemonSpecies(Species.FEEBAS, 3, false, false, false, "Fish Pokémon", PokemonType.WATER, null, 0.6, 7.4, Abilities.SWIFT_SWIM, Abilities.OBLIVIOUS, Abilities.ADAPTABILITY, 200, 20, 15, 20, 10, 55, 80, 255, 50, 40, GrowthRate.ERRATIC, 50, false), - new PokemonSpecies(Species.MILOTIC, 3, false, false, false, "Tender Pokémon", PokemonType.WATER, null, 6.2, 162, Abilities.MARVEL_SCALE, Abilities.COMPETITIVE, Abilities.CUTE_CHARM, 540, 95, 60, 79, 100, 125, 81, 60, 50, 189, GrowthRate.ERRATIC, 50, true), - new PokemonSpecies(Species.CASTFORM, 3, false, false, false, "Weather Pokémon", PokemonType.NORMAL, null, 0.3, 0.8, Abilities.FORECAST, Abilities.NONE, Abilities.NONE, 420, 70, 70, 70, 70, 70, 70, 45, 70, 147, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal Form", "", PokemonType.NORMAL, null, 0.3, 0.8, Abilities.FORECAST, Abilities.NONE, Abilities.NONE, 420, 70, 70, 70, 70, 70, 70, 45, 70, 147, false, null, true), - new PokemonForm("Sunny Form", "sunny", PokemonType.FIRE, null, 0.3, 0.8, Abilities.FORECAST, Abilities.NONE, Abilities.NONE, 420, 70, 70, 70, 70, 70, 70, 45, 70, 147), - new PokemonForm("Rainy Form", "rainy", PokemonType.WATER, null, 0.3, 0.8, Abilities.FORECAST, Abilities.NONE, Abilities.NONE, 420, 70, 70, 70, 70, 70, 70, 45, 70, 147), - new PokemonForm("Snowy Form", "snowy", PokemonType.ICE, null, 0.3, 0.8, Abilities.FORECAST, Abilities.NONE, Abilities.NONE, 420, 70, 70, 70, 70, 70, 70, 45, 70, 147), - ), - new PokemonSpecies(Species.KECLEON, 3, false, false, false, "Color Swap Pokémon", PokemonType.NORMAL, null, 1, 22, Abilities.COLOR_CHANGE, Abilities.NONE, Abilities.PROTEAN, 440, 60, 90, 70, 60, 120, 40, 200, 70, 154, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.SHUPPET, 3, false, false, false, "Puppet Pokémon", PokemonType.GHOST, null, 0.6, 2.3, Abilities.INSOMNIA, Abilities.FRISK, Abilities.CURSED_BODY, 295, 44, 75, 35, 63, 33, 45, 225, 35, 59, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.BANETTE, 3, false, false, false, "Marionette Pokémon", PokemonType.GHOST, null, 1.1, 12.5, Abilities.INSOMNIA, Abilities.FRISK, Abilities.CURSED_BODY, 455, 64, 115, 65, 83, 63, 65, 45, 35, 159, GrowthRate.FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.GHOST, null, 1.1, 12.5, Abilities.INSOMNIA, Abilities.FRISK, Abilities.CURSED_BODY, 455, 64, 115, 65, 83, 63, 65, 45, 35, 159, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.GHOST, null, 1.2, 13, Abilities.PRANKSTER, Abilities.PRANKSTER, Abilities.PRANKSTER, 555, 64, 165, 75, 93, 83, 75, 45, 35, 159), - ), - new PokemonSpecies(Species.DUSKULL, 3, false, false, false, "Requiem Pokémon", PokemonType.GHOST, null, 0.8, 15, Abilities.LEVITATE, Abilities.NONE, Abilities.FRISK, 295, 20, 40, 90, 30, 90, 25, 190, 35, 59, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.DUSCLOPS, 3, false, false, false, "Beckon Pokémon", PokemonType.GHOST, null, 1.6, 30.6, Abilities.PRESSURE, Abilities.NONE, Abilities.FRISK, 455, 40, 70, 130, 60, 130, 25, 90, 35, 159, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.TROPIUS, 3, false, false, false, "Fruit Pokémon", PokemonType.GRASS, PokemonType.FLYING, 2, 100, Abilities.CHLOROPHYLL, Abilities.SOLAR_POWER, Abilities.HARVEST, 460, 99, 68, 83, 72, 87, 51, 200, 70, 161, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.CHIMECHO, 3, false, false, false, "Wind Chime Pokémon", PokemonType.PSYCHIC, null, 0.6, 1, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 455, 75, 50, 80, 95, 90, 65, 45, 70, 159, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.ABSOL, 3, false, false, false, "Disaster Pokémon", PokemonType.DARK, null, 1.2, 47, Abilities.PRESSURE, Abilities.SUPER_LUCK, Abilities.JUSTIFIED, 465, 65, 130, 60, 75, 60, 75, 30, 35, 163, GrowthRate.MEDIUM_SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.DARK, null, 1.2, 47, Abilities.PRESSURE, Abilities.SUPER_LUCK, Abilities.JUSTIFIED, 465, 65, 130, 60, 75, 60, 75, 30, 35, 163, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DARK, null, 1.2, 49, Abilities.MAGIC_BOUNCE, Abilities.MAGIC_BOUNCE, Abilities.MAGIC_BOUNCE, 565, 65, 150, 60, 115, 60, 115, 30, 35, 163), - ), - new PokemonSpecies(Species.WYNAUT, 3, false, false, false, "Bright Pokémon", PokemonType.PSYCHIC, null, 0.6, 14, Abilities.SHADOW_TAG, Abilities.NONE, Abilities.TELEPATHY, 260, 95, 23, 48, 23, 48, 23, 125, 50, 52, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.SNORUNT, 3, false, false, false, "Snow Hat Pokémon", PokemonType.ICE, null, 0.7, 16.8, Abilities.INNER_FOCUS, Abilities.ICE_BODY, Abilities.MOODY, 300, 50, 50, 50, 50, 50, 50, 190, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.GLALIE, 3, false, false, false, "Face Pokémon", PokemonType.ICE, null, 1.5, 256.5, Abilities.INNER_FOCUS, Abilities.ICE_BODY, Abilities.MOODY, 480, 80, 80, 80, 80, 80, 80, 75, 50, 168, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.ICE, null, 1.5, 256.5, Abilities.INNER_FOCUS, Abilities.ICE_BODY, Abilities.MOODY, 480, 80, 80, 80, 80, 80, 80, 75, 50, 168, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.ICE, null, 2.1, 350.2, Abilities.REFRIGERATE, Abilities.REFRIGERATE, Abilities.REFRIGERATE, 580, 80, 120, 80, 120, 80, 100, 75, 50, 168), - ), - new PokemonSpecies(Species.SPHEAL, 3, false, false, false, "Clap Pokémon", PokemonType.ICE, PokemonType.WATER, 0.8, 39.5, Abilities.THICK_FAT, Abilities.ICE_BODY, Abilities.OBLIVIOUS, 290, 70, 40, 50, 55, 50, 25, 255, 50, 58, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.SEALEO, 3, false, false, false, "Ball Roll Pokémon", PokemonType.ICE, PokemonType.WATER, 1.1, 87.6, Abilities.THICK_FAT, Abilities.ICE_BODY, Abilities.OBLIVIOUS, 410, 90, 60, 70, 75, 70, 45, 120, 50, 144, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.WALREIN, 3, false, false, false, "Ice Break Pokémon", PokemonType.ICE, PokemonType.WATER, 1.4, 150.6, Abilities.THICK_FAT, Abilities.ICE_BODY, Abilities.OBLIVIOUS, 530, 110, 80, 90, 95, 90, 65, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.CLAMPERL, 3, false, false, false, "Bivalve Pokémon", PokemonType.WATER, null, 0.4, 52.5, Abilities.SHELL_ARMOR, Abilities.NONE, Abilities.RATTLED, 345, 35, 64, 85, 74, 55, 32, 255, 70, 69, GrowthRate.ERRATIC, 50, false), - new PokemonSpecies(Species.HUNTAIL, 3, false, false, false, "Deep Sea Pokémon", PokemonType.WATER, null, 1.7, 27, Abilities.SWIFT_SWIM, Abilities.NONE, Abilities.WATER_VEIL, 485, 55, 104, 105, 94, 75, 52, 60, 70, 170, GrowthRate.ERRATIC, 50, false), - new PokemonSpecies(Species.GOREBYSS, 3, false, false, false, "South Sea Pokémon", PokemonType.WATER, null, 1.8, 22.6, Abilities.SWIFT_SWIM, Abilities.NONE, Abilities.HYDRATION, 485, 55, 84, 105, 114, 75, 52, 60, 70, 170, GrowthRate.ERRATIC, 50, false), - new PokemonSpecies(Species.RELICANTH, 3, false, false, false, "Longevity Pokémon", PokemonType.WATER, PokemonType.ROCK, 1, 23.4, Abilities.SWIFT_SWIM, Abilities.ROCK_HEAD, Abilities.STURDY, 485, 100, 90, 130, 45, 65, 55, 25, 50, 170, GrowthRate.SLOW, 87.5, true), - new PokemonSpecies(Species.LUVDISC, 3, false, false, false, "Rendezvous Pokémon", PokemonType.WATER, null, 0.6, 8.7, Abilities.SWIFT_SWIM, Abilities.NONE, Abilities.HYDRATION, 330, 43, 30, 55, 40, 65, 97, 225, 70, 116, GrowthRate.FAST, 25, false), - new PokemonSpecies(Species.BAGON, 3, false, false, false, "Rock Head Pokémon", PokemonType.DRAGON, null, 0.6, 42.1, Abilities.ROCK_HEAD, Abilities.NONE, Abilities.SHEER_FORCE, 300, 45, 75, 60, 40, 30, 50, 45, 35, 60, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.SHELGON, 3, false, false, false, "Endurance Pokémon", PokemonType.DRAGON, null, 1.1, 110.5, Abilities.ROCK_HEAD, Abilities.NONE, Abilities.OVERCOAT, 420, 65, 95, 100, 60, 50, 50, 45, 35, 147, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.SALAMENCE, 3, false, false, false, "Dragon Pokémon", PokemonType.DRAGON, PokemonType.FLYING, 1.5, 102.6, Abilities.INTIMIDATE, Abilities.NONE, Abilities.MOXIE, 600, 95, 135, 80, 110, 80, 100, 45, 35, 300, GrowthRate.SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.FLYING, 1.5, 102.6, Abilities.INTIMIDATE, Abilities.NONE, Abilities.MOXIE, 600, 95, 135, 80, 110, 80, 100, 45, 35, 300, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DRAGON, PokemonType.FLYING, 1.8, 112.6, Abilities.AERILATE, Abilities.NONE, Abilities.AERILATE, 700, 95, 145, 130, 120, 90, 120, 45, 35, 300), - ), - new PokemonSpecies(Species.BELDUM, 3, false, false, false, "Iron Ball Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 0.6, 95.2, Abilities.CLEAR_BODY, Abilities.NONE, Abilities.LIGHT_METAL, 300, 40, 55, 80, 35, 60, 30, 45, 35, 60, GrowthRate.SLOW, null, false), //Custom Catchrate, matching Frigibax - new PokemonSpecies(Species.METANG, 3, false, false, false, "Iron Claw Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 1.2, 202.5, Abilities.CLEAR_BODY, Abilities.NONE, Abilities.LIGHT_METAL, 420, 60, 75, 100, 55, 80, 50, 25, 35, 147, GrowthRate.SLOW, null, false), //Custom Catchrate, matching Arctibax - new PokemonSpecies(Species.METAGROSS, 3, false, false, false, "Iron Leg Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 1.6, 550, Abilities.CLEAR_BODY, Abilities.NONE, Abilities.LIGHT_METAL, 600, 80, 135, 130, 95, 90, 70, 10, 35, 300, GrowthRate.SLOW, null, false, true, //Custom Catchrate, matching Baxcalibur - new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.PSYCHIC, 1.6, 550, Abilities.CLEAR_BODY, Abilities.NONE, Abilities.LIGHT_METAL, 600, 80, 135, 130, 95, 90, 70, 3, 35, 300, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.STEEL, PokemonType.PSYCHIC, 2.5, 942.9, Abilities.TOUGH_CLAWS, Abilities.NONE, Abilities.TOUGH_CLAWS, 700, 80, 145, 150, 105, 110, 110, 3, 35, 300), - ), - new PokemonSpecies(Species.REGIROCK, 3, true, false, false, "Rock Peak Pokémon", PokemonType.ROCK, null, 1.7, 230, Abilities.CLEAR_BODY, Abilities.NONE, Abilities.STURDY, 580, 80, 100, 200, 50, 100, 50, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.REGICE, 3, true, false, false, "Iceberg Pokémon", PokemonType.ICE, null, 1.8, 175, Abilities.CLEAR_BODY, Abilities.NONE, Abilities.ICE_BODY, 580, 80, 50, 100, 100, 200, 50, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.REGISTEEL, 3, true, false, false, "Iron Pokémon", PokemonType.STEEL, null, 1.9, 205, Abilities.CLEAR_BODY, Abilities.NONE, Abilities.LIGHT_METAL, 580, 80, 75, 150, 75, 150, 50, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.LATIAS, 3, true, false, false, "Eon Pokémon", PokemonType.DRAGON, PokemonType.PSYCHIC, 1.4, 40, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 600, 80, 80, 90, 110, 130, 110, 3, 90, 300, GrowthRate.SLOW, 0, false, true, - new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.PSYCHIC, 1.4, 40, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 600, 80, 80, 90, 110, 130, 110, 3, 90, 300, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DRAGON, PokemonType.PSYCHIC, 1.8, 52, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 700, 80, 100, 120, 140, 150, 110, 3, 90, 300), - ), - new PokemonSpecies(Species.LATIOS, 3, true, false, false, "Eon Pokémon", PokemonType.DRAGON, PokemonType.PSYCHIC, 2, 60, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 600, 80, 90, 80, 130, 110, 110, 3, 90, 300, GrowthRate.SLOW, 100, false, true, - new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.PSYCHIC, 2, 60, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 600, 80, 90, 80, 130, 110, 110, 3, 90, 300, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DRAGON, PokemonType.PSYCHIC, 2.3, 70, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 700, 80, 130, 100, 160, 120, 110, 3, 90, 300), - ), - new PokemonSpecies(Species.KYOGRE, 3, false, true, false, "Sea Basin Pokémon", PokemonType.WATER, null, 4.5, 352, Abilities.DRIZZLE, Abilities.NONE, Abilities.NONE, 670, 100, 100, 90, 150, 140, 90, 3, 0, 335, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal", "", PokemonType.WATER, null, 4.5, 352, Abilities.DRIZZLE, Abilities.NONE, Abilities.NONE, 670, 100, 100, 90, 150, 140, 90, 3, 0, 335, false, null, true), - new PokemonForm("Primal", "primal", PokemonType.WATER, null, 9.8, 430, Abilities.PRIMORDIAL_SEA, Abilities.NONE, Abilities.NONE, 770, 100, 150, 90, 180, 160, 90, 3, 0, 335), - ), - new PokemonSpecies(Species.GROUDON, 3, false, true, false, "Continent Pokémon", PokemonType.GROUND, null, 3.5, 950, Abilities.DROUGHT, Abilities.NONE, Abilities.NONE, 670, 100, 150, 140, 100, 90, 90, 3, 0, 335, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal", "", PokemonType.GROUND, null, 3.5, 950, Abilities.DROUGHT, Abilities.NONE, Abilities.NONE, 670, 100, 150, 140, 100, 90, 90, 3, 0, 335, false, null, true), - new PokemonForm("Primal", "primal", PokemonType.GROUND, PokemonType.FIRE, 5, 999.7, Abilities.DESOLATE_LAND, Abilities.NONE, Abilities.NONE, 770, 100, 180, 160, 150, 90, 90, 3, 0, 335), - ), - new PokemonSpecies(Species.RAYQUAZA, 3, false, true, false, "Sky High Pokémon", PokemonType.DRAGON, PokemonType.FLYING, 7, 206.5, Abilities.AIR_LOCK, Abilities.NONE, Abilities.NONE, 680, 105, 150, 90, 150, 90, 95, 45, 0, 340, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.FLYING, 7, 206.5, Abilities.AIR_LOCK, Abilities.NONE, Abilities.NONE, 680, 105, 150, 90, 150, 90, 95, 45, 0, 340, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DRAGON, PokemonType.FLYING, 10.8, 392, Abilities.DELTA_STREAM, Abilities.NONE, Abilities.NONE, 780, 105, 180, 100, 180, 100, 115, 45, 0, 340), - ), - new PokemonSpecies(Species.JIRACHI, 3, false, false, true, "Wish Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 0.3, 1.1, Abilities.SERENE_GRACE, Abilities.NONE, Abilities.NONE, 600, 100, 100, 100, 100, 100, 100, 3, 100, 300, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.DEOXYS, 3, false, false, true, "DNA Pokémon", PokemonType.PSYCHIC, null, 1.7, 60.8, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 600, 50, 150, 50, 150, 50, 150, 3, 0, 300, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal Forme", "normal", PokemonType.PSYCHIC, null, 1.7, 60.8, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 600, 50, 150, 50, 150, 50, 150, 3, 0, 300, false, "", true), - new PokemonForm("Attack Forme", "attack", PokemonType.PSYCHIC, null, 1.7, 60.8, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 600, 50, 180, 20, 180, 20, 150, 3, 0, 300), - new PokemonForm("Defense Forme", "defense", PokemonType.PSYCHIC, null, 1.7, 60.8, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 600, 50, 70, 160, 70, 160, 90, 3, 0, 300), - new PokemonForm("Speed Forme", "speed", PokemonType.PSYCHIC, null, 1.7, 60.8, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 600, 50, 95, 90, 95, 90, 180, 3, 0, 300), - ), - new PokemonSpecies(Species.TURTWIG, 4, false, false, false, "Tiny Leaf Pokémon", PokemonType.GRASS, null, 0.4, 10.2, Abilities.OVERGROW, Abilities.NONE, Abilities.SHELL_ARMOR, 318, 55, 68, 64, 45, 55, 31, 45, 70, 64, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.GROTLE, 4, false, false, false, "Grove Pokémon", PokemonType.GRASS, null, 1.1, 97, Abilities.OVERGROW, Abilities.NONE, Abilities.SHELL_ARMOR, 405, 75, 89, 85, 55, 65, 36, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.TORTERRA, 4, false, false, false, "Continent Pokémon", PokemonType.GRASS, PokemonType.GROUND, 2.2, 310, Abilities.OVERGROW, Abilities.NONE, Abilities.SHELL_ARMOR, 525, 95, 109, 105, 75, 85, 56, 45, 70, 263, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.CHIMCHAR, 4, false, false, false, "Chimp Pokémon", PokemonType.FIRE, null, 0.5, 6.2, Abilities.BLAZE, Abilities.NONE, Abilities.IRON_FIST, 309, 44, 58, 44, 58, 44, 61, 45, 70, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.MONFERNO, 4, false, false, false, "Playful Pokémon", PokemonType.FIRE, PokemonType.FIGHTING, 0.9, 22, Abilities.BLAZE, Abilities.NONE, Abilities.IRON_FIST, 405, 64, 78, 52, 78, 52, 81, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.INFERNAPE, 4, false, false, false, "Flame Pokémon", PokemonType.FIRE, PokemonType.FIGHTING, 1.2, 55, Abilities.BLAZE, Abilities.NONE, Abilities.IRON_FIST, 534, 76, 104, 71, 104, 71, 108, 45, 70, 267, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.PIPLUP, 4, false, false, false, "Penguin Pokémon", PokemonType.WATER, null, 0.4, 5.2, Abilities.TORRENT, Abilities.NONE, Abilities.COMPETITIVE, 314, 53, 51, 53, 61, 56, 40, 45, 70, 63, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.PRINPLUP, 4, false, false, false, "Penguin Pokémon", PokemonType.WATER, null, 0.8, 23, Abilities.TORRENT, Abilities.NONE, Abilities.COMPETITIVE, 405, 64, 66, 68, 81, 76, 50, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.EMPOLEON, 4, false, false, false, "Emperor Pokémon", PokemonType.WATER, PokemonType.STEEL, 1.7, 84.5, Abilities.TORRENT, Abilities.NONE, Abilities.COMPETITIVE, 530, 84, 86, 88, 111, 101, 60, 45, 70, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.STARLY, 4, false, false, false, "Starling Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.3, 2, Abilities.KEEN_EYE, Abilities.NONE, Abilities.RECKLESS, 245, 40, 55, 30, 30, 30, 60, 255, 70, 49, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(Species.STARAVIA, 4, false, false, false, "Starling Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 15.5, Abilities.INTIMIDATE, Abilities.NONE, Abilities.RECKLESS, 340, 55, 75, 50, 40, 40, 80, 120, 70, 119, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(Species.STARAPTOR, 4, false, false, false, "Predator Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.2, 24.9, Abilities.INTIMIDATE, Abilities.NONE, Abilities.RECKLESS, 485, 85, 120, 70, 50, 60, 100, 45, 70, 243, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(Species.BIDOOF, 4, false, false, false, "Plump Mouse Pokémon", PokemonType.NORMAL, null, 0.5, 20, Abilities.SIMPLE, Abilities.UNAWARE, Abilities.MOODY, 250, 59, 45, 40, 35, 40, 31, 255, 70, 50, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.BIBAREL, 4, false, false, false, "Beaver Pokémon", PokemonType.NORMAL, PokemonType.WATER, 1, 31.5, Abilities.SIMPLE, Abilities.UNAWARE, Abilities.MOODY, 410, 79, 85, 60, 55, 60, 71, 127, 70, 144, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.KRICKETOT, 4, false, false, false, "Cricket Pokémon", PokemonType.BUG, null, 0.3, 2.2, Abilities.SHED_SKIN, Abilities.NONE, Abilities.RUN_AWAY, 194, 37, 25, 41, 25, 41, 25, 255, 70, 39, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(Species.KRICKETUNE, 4, false, false, false, "Cricket Pokémon", PokemonType.BUG, null, 1, 25.5, Abilities.SWARM, Abilities.NONE, Abilities.TECHNICIAN, 384, 77, 85, 51, 55, 51, 65, 45, 70, 134, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(Species.SHINX, 4, false, false, false, "Flash Pokémon", PokemonType.ELECTRIC, null, 0.5, 9.5, Abilities.RIVALRY, Abilities.INTIMIDATE, Abilities.GUTS, 263, 45, 65, 34, 40, 34, 45, 235, 50, 53, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(Species.LUXIO, 4, false, false, false, "Spark Pokémon", PokemonType.ELECTRIC, null, 0.9, 30.5, Abilities.RIVALRY, Abilities.INTIMIDATE, Abilities.GUTS, 363, 60, 85, 49, 60, 49, 60, 120, 100, 127, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(Species.LUXRAY, 4, false, false, false, "Gleam Eyes Pokémon", PokemonType.ELECTRIC, null, 1.4, 42, Abilities.RIVALRY, Abilities.INTIMIDATE, Abilities.GUTS, 523, 80, 120, 79, 95, 79, 70, 45, 50, 262, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(Species.BUDEW, 4, false, false, false, "Bud Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.2, 1.2, Abilities.NATURAL_CURE, Abilities.POISON_POINT, Abilities.LEAF_GUARD, 280, 40, 30, 35, 50, 70, 55, 255, 50, 56, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.ROSERADE, 4, false, false, false, "Bouquet Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.9, 14.5, Abilities.NATURAL_CURE, Abilities.POISON_POINT, Abilities.TECHNICIAN, 515, 60, 70, 65, 125, 105, 90, 75, 50, 258, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(Species.CRANIDOS, 4, false, false, false, "Head Butt Pokémon", PokemonType.ROCK, null, 0.9, 31.5, Abilities.MOLD_BREAKER, Abilities.NONE, Abilities.SHEER_FORCE, 350, 67, 125, 40, 30, 30, 58, 45, 70, 70, GrowthRate.ERRATIC, 87.5, false), - new PokemonSpecies(Species.RAMPARDOS, 4, false, false, false, "Head Butt Pokémon", PokemonType.ROCK, null, 1.6, 102.5, Abilities.MOLD_BREAKER, Abilities.NONE, Abilities.SHEER_FORCE, 495, 97, 165, 60, 65, 50, 58, 45, 70, 173, GrowthRate.ERRATIC, 87.5, false), - new PokemonSpecies(Species.SHIELDON, 4, false, false, false, "Shield Pokémon", PokemonType.ROCK, PokemonType.STEEL, 0.5, 57, Abilities.STURDY, Abilities.NONE, Abilities.SOUNDPROOF, 350, 30, 42, 118, 42, 88, 30, 45, 70, 70, GrowthRate.ERRATIC, 87.5, false), - new PokemonSpecies(Species.BASTIODON, 4, false, false, false, "Shield Pokémon", PokemonType.ROCK, PokemonType.STEEL, 1.3, 149.5, Abilities.STURDY, Abilities.NONE, Abilities.SOUNDPROOF, 495, 60, 52, 168, 47, 138, 30, 45, 70, 173, GrowthRate.ERRATIC, 87.5, false), - new PokemonSpecies(Species.BURMY, 4, false, false, false, "Bagworm Pokémon", PokemonType.BUG, null, 0.2, 3.4, Abilities.SHED_SKIN, Abilities.NONE, Abilities.OVERCOAT, 224, 40, 29, 45, 29, 45, 36, 120, 70, 45, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Plant Cloak", "plant", PokemonType.BUG, null, 0.2, 3.4, Abilities.SHED_SKIN, Abilities.NONE, Abilities.OVERCOAT, 224, 40, 29, 45, 29, 45, 36, 120, 70, 45, false, null, true), - new PokemonForm("Sandy Cloak", "sandy", PokemonType.BUG, null, 0.2, 3.4, Abilities.SHED_SKIN, Abilities.NONE, Abilities.OVERCOAT, 224, 40, 29, 45, 29, 45, 36, 120, 70, 45, false, null, true), - new PokemonForm("Trash Cloak", "trash", PokemonType.BUG, null, 0.2, 3.4, Abilities.SHED_SKIN, Abilities.NONE, Abilities.OVERCOAT, 224, 40, 29, 45, 29, 45, 36, 120, 70, 45, false, null, true), - ), - new PokemonSpecies(Species.WORMADAM, 4, false, false, false, "Bagworm Pokémon", PokemonType.BUG, PokemonType.GRASS, 0.5, 6.5, Abilities.ANTICIPATION, Abilities.NONE, Abilities.OVERCOAT, 424, 60, 59, 85, 79, 105, 36, 45, 70, 148, GrowthRate.MEDIUM_FAST, 0, false, false, - new PokemonForm("Plant Cloak", "plant", PokemonType.BUG, PokemonType.GRASS, 0.5, 6.5, Abilities.ANTICIPATION, Abilities.NONE, Abilities.OVERCOAT, 424, 60, 59, 85, 79, 105, 36, 45, 70, 148, false, null, true), - new PokemonForm("Sandy Cloak", "sandy", PokemonType.BUG, PokemonType.GROUND, 0.5, 6.5, Abilities.ANTICIPATION, Abilities.NONE, Abilities.OVERCOAT, 424, 60, 79, 105, 59, 85, 36, 45, 70, 148, false, null, true), - new PokemonForm("Trash Cloak", "trash", PokemonType.BUG, PokemonType.STEEL, 0.5, 6.5, Abilities.ANTICIPATION, Abilities.NONE, Abilities.OVERCOAT, 424, 60, 69, 95, 69, 95, 36, 45, 70, 148, false, null, true), - ), - new PokemonSpecies(Species.MOTHIM, 4, false, false, false, "Moth Pokémon", PokemonType.BUG, PokemonType.FLYING, 0.9, 23.3, Abilities.SWARM, Abilities.NONE, Abilities.TINTED_LENS, 424, 70, 94, 50, 94, 50, 66, 45, 70, 148, GrowthRate.MEDIUM_FAST, 100, false), - new PokemonSpecies(Species.COMBEE, 4, false, false, false, "Tiny Bee Pokémon", PokemonType.BUG, PokemonType.FLYING, 0.3, 5.5, Abilities.HONEY_GATHER, Abilities.NONE, Abilities.HUSTLE, 244, 30, 30, 42, 30, 42, 70, 120, 50, 49, GrowthRate.MEDIUM_SLOW, 87.5, true), - new PokemonSpecies(Species.VESPIQUEN, 4, false, false, false, "Beehive Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.2, 38.5, Abilities.PRESSURE, Abilities.NONE, Abilities.UNNERVE, 474, 70, 80, 102, 80, 102, 40, 45, 50, 166, GrowthRate.MEDIUM_SLOW, 0, false), - new PokemonSpecies(Species.PACHIRISU, 4, false, false, false, "EleSquirrel Pokémon", PokemonType.ELECTRIC, null, 0.4, 3.9, Abilities.RUN_AWAY, Abilities.PICKUP, Abilities.VOLT_ABSORB, 405, 60, 45, 70, 45, 90, 95, 200, 100, 142, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.BUIZEL, 4, false, false, false, "Sea Weasel Pokémon", PokemonType.WATER, null, 0.7, 29.5, Abilities.SWIFT_SWIM, Abilities.NONE, Abilities.WATER_VEIL, 330, 55, 65, 35, 60, 30, 85, 190, 70, 66, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.FLOATZEL, 4, false, false, false, "Sea Weasel Pokémon", PokemonType.WATER, null, 1.1, 33.5, Abilities.SWIFT_SWIM, Abilities.NONE, Abilities.WATER_VEIL, 495, 85, 105, 55, 85, 50, 115, 75, 70, 173, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.CHERUBI, 4, false, false, false, "Cherry Pokémon", PokemonType.GRASS, null, 0.4, 3.3, Abilities.CHLOROPHYLL, Abilities.NONE, Abilities.NONE, 275, 45, 35, 45, 62, 53, 35, 190, 50, 55, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.CHERRIM, 4, false, false, false, "Blossom Pokémon", PokemonType.GRASS, null, 0.5, 9.3, Abilities.FLOWER_GIFT, Abilities.NONE, Abilities.NONE, 450, 70, 60, 70, 87, 78, 85, 75, 50, 158, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Overcast Form", "overcast", PokemonType.GRASS, null, 0.5, 9.3, Abilities.FLOWER_GIFT, Abilities.NONE, Abilities.NONE, 450, 70, 60, 70, 87, 78, 85, 75, 50, 158, false, null, true), - new PokemonForm("Sunshine Form", "sunshine", PokemonType.GRASS, null, 0.5, 9.3, Abilities.FLOWER_GIFT, Abilities.NONE, Abilities.NONE, 450, 70, 60, 70, 87, 78, 85, 75, 50, 158), - ), - new PokemonSpecies(Species.SHELLOS, 4, false, false, false, "Sea Slug Pokémon", PokemonType.WATER, null, 0.3, 6.3, Abilities.STICKY_HOLD, Abilities.STORM_DRAIN, Abilities.SAND_FORCE, 325, 76, 48, 48, 57, 62, 34, 190, 50, 65, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("East Sea", "east", PokemonType.WATER, null, 0.3, 6.3, Abilities.STICKY_HOLD, Abilities.STORM_DRAIN, Abilities.SAND_FORCE, 325, 76, 48, 48, 57, 62, 34, 190, 50, 65, false, null, true), - new PokemonForm("West Sea", "west", PokemonType.WATER, null, 0.3, 6.3, Abilities.STICKY_HOLD, Abilities.STORM_DRAIN, Abilities.SAND_FORCE, 325, 76, 48, 48, 57, 62, 34, 190, 50, 65, false, null, true), - ), - new PokemonSpecies(Species.GASTRODON, 4, false, false, false, "Sea Slug Pokémon", PokemonType.WATER, PokemonType.GROUND, 0.9, 29.9, Abilities.STICKY_HOLD, Abilities.STORM_DRAIN, Abilities.SAND_FORCE, 475, 111, 83, 68, 92, 82, 39, 75, 50, 166, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("East Sea", "east", PokemonType.WATER, PokemonType.GROUND, 0.9, 29.9, Abilities.STICKY_HOLD, Abilities.STORM_DRAIN, Abilities.SAND_FORCE, 475, 111, 83, 68, 92, 82, 39, 75, 50, 166, false, null, true), - new PokemonForm("West Sea", "west", PokemonType.WATER, PokemonType.GROUND, 0.9, 29.9, Abilities.STICKY_HOLD, Abilities.STORM_DRAIN, Abilities.SAND_FORCE, 475, 111, 83, 68, 92, 82, 39, 75, 50, 166, false, null, true), - ), - new PokemonSpecies(Species.AMBIPOM, 4, false, false, false, "Long Tail Pokémon", PokemonType.NORMAL, null, 1.2, 20.3, Abilities.TECHNICIAN, Abilities.PICKUP, Abilities.SKILL_LINK, 482, 75, 100, 66, 60, 66, 115, 45, 100, 169, GrowthRate.FAST, 50, true), - new PokemonSpecies(Species.DRIFLOON, 4, false, false, false, "Balloon Pokémon", PokemonType.GHOST, PokemonType.FLYING, 0.4, 1.2, Abilities.AFTERMATH, Abilities.UNBURDEN, Abilities.FLARE_BOOST, 348, 90, 50, 34, 60, 44, 70, 125, 50, 70, GrowthRate.FLUCTUATING, 50, false), - new PokemonSpecies(Species.DRIFBLIM, 4, false, false, false, "Blimp Pokémon", PokemonType.GHOST, PokemonType.FLYING, 1.2, 15, Abilities.AFTERMATH, Abilities.UNBURDEN, Abilities.FLARE_BOOST, 498, 150, 80, 44, 90, 54, 80, 60, 50, 174, GrowthRate.FLUCTUATING, 50, false), - new PokemonSpecies(Species.BUNEARY, 4, false, false, false, "Rabbit Pokémon", PokemonType.NORMAL, null, 0.4, 5.5, Abilities.RUN_AWAY, Abilities.KLUTZ, Abilities.LIMBER, 350, 55, 66, 44, 44, 56, 85, 190, 0, 70, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.LOPUNNY, 4, false, false, false, "Rabbit Pokémon", PokemonType.NORMAL, null, 1.2, 33.3, Abilities.CUTE_CHARM, Abilities.KLUTZ, Abilities.LIMBER, 480, 65, 76, 84, 54, 96, 105, 60, 140, 168, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.NORMAL, null, 1.2, 33.3, Abilities.CUTE_CHARM, Abilities.KLUTZ, Abilities.LIMBER, 480, 65, 76, 84, 54, 96, 105, 60, 140, 168, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.NORMAL, PokemonType.FIGHTING, 1.3, 28.3, Abilities.SCRAPPY, Abilities.SCRAPPY, Abilities.SCRAPPY, 580, 65, 136, 94, 54, 96, 135, 60, 140, 168), - ), - new PokemonSpecies(Species.MISMAGIUS, 4, false, false, false, "Magical Pokémon", PokemonType.GHOST, null, 0.9, 4.4, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 495, 60, 60, 60, 105, 105, 105, 45, 35, 173, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.HONCHKROW, 4, false, false, false, "Big Boss Pokémon", PokemonType.DARK, PokemonType.FLYING, 0.9, 27.3, Abilities.INSOMNIA, Abilities.SUPER_LUCK, Abilities.MOXIE, 505, 100, 125, 52, 105, 52, 71, 30, 35, 177, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.GLAMEOW, 4, false, false, false, "Catty Pokémon", PokemonType.NORMAL, null, 0.5, 3.9, Abilities.LIMBER, Abilities.OWN_TEMPO, Abilities.KEEN_EYE, 310, 49, 55, 42, 42, 37, 85, 190, 70, 62, GrowthRate.FAST, 25, false), - new PokemonSpecies(Species.PURUGLY, 4, false, false, false, "Tiger Cat Pokémon", PokemonType.NORMAL, null, 1, 43.8, Abilities.THICK_FAT, Abilities.OWN_TEMPO, Abilities.DEFIANT, 452, 71, 82, 64, 64, 59, 112, 75, 70, 158, GrowthRate.FAST, 25, false), - new PokemonSpecies(Species.CHINGLING, 4, false, false, false, "Bell Pokémon", PokemonType.PSYCHIC, null, 0.2, 0.6, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 285, 45, 30, 50, 65, 50, 45, 120, 70, 57, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.STUNKY, 4, false, false, false, "Skunk Pokémon", PokemonType.POISON, PokemonType.DARK, 0.4, 19.2, Abilities.STENCH, Abilities.AFTERMATH, Abilities.KEEN_EYE, 329, 63, 63, 47, 41, 41, 74, 225, 50, 66, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.SKUNTANK, 4, false, false, false, "Skunk Pokémon", PokemonType.POISON, PokemonType.DARK, 1, 38, Abilities.STENCH, Abilities.AFTERMATH, Abilities.KEEN_EYE, 479, 103, 93, 67, 71, 61, 84, 60, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.BRONZOR, 4, false, false, false, "Bronze Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 0.5, 60.5, Abilities.LEVITATE, Abilities.HEATPROOF, Abilities.HEAVY_METAL, 300, 57, 24, 86, 24, 86, 23, 255, 50, 60, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(Species.BRONZONG, 4, false, false, false, "Bronze Bell Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 1.3, 187, Abilities.LEVITATE, Abilities.HEATPROOF, Abilities.HEAVY_METAL, 500, 67, 89, 116, 79, 116, 33, 90, 50, 175, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(Species.BONSLY, 4, false, false, false, "Bonsai Pokémon", PokemonType.ROCK, null, 0.5, 15, Abilities.STURDY, Abilities.ROCK_HEAD, Abilities.RATTLED, 290, 50, 80, 95, 10, 45, 10, 255, 50, 58, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.MIME_JR, 4, false, false, false, "Mime Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 0.6, 13, Abilities.SOUNDPROOF, Abilities.FILTER, Abilities.TECHNICIAN, 310, 20, 25, 45, 70, 90, 60, 145, 50, 62, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.HAPPINY, 4, false, false, false, "Playhouse Pokémon", PokemonType.NORMAL, null, 0.6, 24.4, Abilities.NATURAL_CURE, Abilities.SERENE_GRACE, Abilities.FRIEND_GUARD, 220, 100, 5, 5, 15, 65, 30, 130, 140, 110, GrowthRate.FAST, 0, false), - new PokemonSpecies(Species.CHATOT, 4, false, false, false, "Music Note Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.5, 1.9, Abilities.KEEN_EYE, Abilities.TANGLED_FEET, Abilities.BIG_PECKS, 411, 76, 65, 45, 92, 42, 91, 30, 35, 144, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.SPIRITOMB, 4, false, false, false, "Forbidden Pokémon", PokemonType.GHOST, PokemonType.DARK, 1, 108, Abilities.PRESSURE, Abilities.NONE, Abilities.INFILTRATOR, 485, 50, 92, 108, 92, 108, 35, 100, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.GIBLE, 4, false, false, false, "Land Shark Pokémon", PokemonType.DRAGON, PokemonType.GROUND, 0.7, 20.5, Abilities.SAND_VEIL, Abilities.NONE, Abilities.ROUGH_SKIN, 300, 58, 70, 45, 40, 45, 42, 45, 50, 60, GrowthRate.SLOW, 50, true), - new PokemonSpecies(Species.GABITE, 4, false, false, false, "Cave Pokémon", PokemonType.DRAGON, PokemonType.GROUND, 1.4, 56, Abilities.SAND_VEIL, Abilities.NONE, Abilities.ROUGH_SKIN, 410, 68, 90, 65, 50, 55, 82, 45, 50, 144, GrowthRate.SLOW, 50, true), - new PokemonSpecies(Species.GARCHOMP, 4, false, false, false, "Mach Pokémon", PokemonType.DRAGON, PokemonType.GROUND, 1.9, 95, Abilities.SAND_VEIL, Abilities.NONE, Abilities.ROUGH_SKIN, 600, 108, 130, 95, 80, 85, 102, 45, 50, 300, GrowthRate.SLOW, 50, true, true, - new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.GROUND, 1.9, 95, Abilities.SAND_VEIL, Abilities.NONE, Abilities.ROUGH_SKIN, 600, 108, 130, 95, 80, 85, 102, 45, 50, 300, true, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DRAGON, PokemonType.GROUND, 1.9, 95, Abilities.SAND_FORCE, Abilities.NONE, Abilities.SAND_FORCE, 700, 108, 170, 115, 120, 95, 92, 45, 50, 300, true), - ), - new PokemonSpecies(Species.MUNCHLAX, 4, false, false, false, "Big Eater Pokémon", PokemonType.NORMAL, null, 0.6, 105, Abilities.PICKUP, Abilities.THICK_FAT, Abilities.GLUTTONY, 390, 135, 85, 40, 40, 85, 5, 50, 50, 78, GrowthRate.SLOW, 87.5, false), - new PokemonSpecies(Species.RIOLU, 4, false, false, false, "Emanation Pokémon", PokemonType.FIGHTING, null, 0.7, 20.2, Abilities.STEADFAST, Abilities.INNER_FOCUS, Abilities.PRANKSTER, 285, 40, 70, 40, 35, 40, 60, 75, 50, 57, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.LUCARIO, 4, false, false, false, "Aura Pokémon", PokemonType.FIGHTING, PokemonType.STEEL, 1.2, 54, Abilities.STEADFAST, Abilities.INNER_FOCUS, Abilities.JUSTIFIED, 525, 70, 110, 70, 115, 70, 90, 45, 50, 184, GrowthRate.MEDIUM_SLOW, 87.5, false, true, - new PokemonForm("Normal", "", PokemonType.FIGHTING, PokemonType.STEEL, 1.2, 54, Abilities.STEADFAST, Abilities.INNER_FOCUS, Abilities.JUSTIFIED, 525, 70, 110, 70, 115, 70, 90, 45, 50, 184, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.FIGHTING, PokemonType.STEEL, 1.3, 57.5, Abilities.ADAPTABILITY, Abilities.ADAPTABILITY, Abilities.ADAPTABILITY, 625, 70, 145, 88, 140, 70, 112, 45, 50, 184), - ), - new PokemonSpecies(Species.HIPPOPOTAS, 4, false, false, false, "Hippo Pokémon", PokemonType.GROUND, null, 0.8, 49.5, Abilities.SAND_STREAM, Abilities.NONE, Abilities.SAND_FORCE, 330, 68, 72, 78, 38, 42, 32, 140, 50, 66, GrowthRate.SLOW, 50, true), - new PokemonSpecies(Species.HIPPOWDON, 4, false, false, false, "Heavyweight Pokémon", PokemonType.GROUND, null, 2, 300, Abilities.SAND_STREAM, Abilities.NONE, Abilities.SAND_FORCE, 525, 108, 112, 118, 68, 72, 47, 60, 50, 184, GrowthRate.SLOW, 50, true), - new PokemonSpecies(Species.SKORUPI, 4, false, false, false, "Scorpion Pokémon", PokemonType.POISON, PokemonType.BUG, 0.8, 12, Abilities.BATTLE_ARMOR, Abilities.SNIPER, Abilities.KEEN_EYE, 330, 40, 50, 90, 30, 55, 65, 120, 50, 66, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.DRAPION, 4, false, false, false, "Ogre Scorpion Pokémon", PokemonType.POISON, PokemonType.DARK, 1.3, 61.5, Abilities.BATTLE_ARMOR, Abilities.SNIPER, Abilities.KEEN_EYE, 500, 70, 90, 110, 60, 75, 95, 45, 50, 175, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.CROAGUNK, 4, false, false, false, "Toxic Mouth Pokémon", PokemonType.POISON, PokemonType.FIGHTING, 0.7, 23, Abilities.ANTICIPATION, Abilities.DRY_SKIN, Abilities.POISON_TOUCH, 300, 48, 61, 40, 61, 40, 50, 140, 100, 60, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.TOXICROAK, 4, false, false, false, "Toxic Mouth Pokémon", PokemonType.POISON, PokemonType.FIGHTING, 1.3, 44.4, Abilities.ANTICIPATION, Abilities.DRY_SKIN, Abilities.POISON_TOUCH, 490, 83, 106, 65, 86, 65, 85, 75, 50, 172, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.CARNIVINE, 4, false, false, false, "Bug Catcher Pokémon", PokemonType.GRASS, null, 1.4, 27, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 454, 74, 100, 72, 90, 72, 46, 200, 70, 159, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.FINNEON, 4, false, false, false, "Wing Fish Pokémon", PokemonType.WATER, null, 0.4, 7, Abilities.SWIFT_SWIM, Abilities.STORM_DRAIN, Abilities.WATER_VEIL, 330, 49, 49, 56, 49, 61, 66, 190, 70, 66, GrowthRate.ERRATIC, 50, true), - new PokemonSpecies(Species.LUMINEON, 4, false, false, false, "Neon Pokémon", PokemonType.WATER, null, 1.2, 24, Abilities.SWIFT_SWIM, Abilities.STORM_DRAIN, Abilities.WATER_VEIL, 460, 69, 69, 76, 69, 86, 91, 75, 70, 161, GrowthRate.ERRATIC, 50, true), - new PokemonSpecies(Species.MANTYKE, 4, false, false, false, "Kite Pokémon", PokemonType.WATER, PokemonType.FLYING, 1, 65, Abilities.SWIFT_SWIM, Abilities.WATER_ABSORB, Abilities.WATER_VEIL, 345, 45, 20, 50, 60, 120, 50, 25, 50, 69, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.SNOVER, 4, false, false, false, "Frost Tree Pokémon", PokemonType.GRASS, PokemonType.ICE, 1, 50.5, Abilities.SNOW_WARNING, Abilities.NONE, Abilities.SOUNDPROOF, 334, 60, 62, 50, 62, 60, 40, 120, 50, 67, GrowthRate.SLOW, 50, true), - new PokemonSpecies(Species.ABOMASNOW, 4, false, false, false, "Frost Tree Pokémon", PokemonType.GRASS, PokemonType.ICE, 2.2, 135.5, Abilities.SNOW_WARNING, Abilities.NONE, Abilities.SOUNDPROOF, 494, 90, 92, 75, 92, 85, 60, 60, 50, 173, GrowthRate.SLOW, 50, true, true, - new PokemonForm("Normal", "", PokemonType.GRASS, PokemonType.ICE, 2.2, 135.5, Abilities.SNOW_WARNING, Abilities.NONE, Abilities.SOUNDPROOF, 494, 90, 92, 75, 92, 85, 60, 60, 50, 173, true, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.GRASS, PokemonType.ICE, 2.7, 185, Abilities.SNOW_WARNING, Abilities.NONE, Abilities.SNOW_WARNING, 594, 90, 132, 105, 132, 105, 30, 60, 50, 173, true), - ), - new PokemonSpecies(Species.WEAVILE, 4, false, false, false, "Sharp Claw Pokémon", PokemonType.DARK, PokemonType.ICE, 1.1, 34, Abilities.PRESSURE, Abilities.NONE, Abilities.PICKPOCKET, 510, 70, 120, 65, 45, 85, 125, 45, 35, 179, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(Species.MAGNEZONE, 4, false, false, false, "Magnet Area Pokémon", PokemonType.ELECTRIC, PokemonType.STEEL, 1.2, 180, Abilities.MAGNET_PULL, Abilities.STURDY, Abilities.ANALYTIC, 535, 70, 70, 115, 130, 90, 60, 30, 50, 268, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(Species.LICKILICKY, 4, false, false, false, "Licking Pokémon", PokemonType.NORMAL, null, 1.7, 140, Abilities.OWN_TEMPO, Abilities.OBLIVIOUS, Abilities.CLOUD_NINE, 515, 110, 85, 95, 80, 95, 50, 30, 50, 180, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.RHYPERIOR, 4, false, false, false, "Drill Pokémon", PokemonType.GROUND, PokemonType.ROCK, 2.4, 282.8, Abilities.LIGHTNING_ROD, Abilities.SOLID_ROCK, Abilities.RECKLESS, 535, 115, 140, 130, 55, 55, 40, 30, 50, 268, GrowthRate.SLOW, 50, true), - new PokemonSpecies(Species.TANGROWTH, 4, false, false, false, "Vine Pokémon", PokemonType.GRASS, null, 2, 128.6, Abilities.CHLOROPHYLL, Abilities.LEAF_GUARD, Abilities.REGENERATOR, 535, 100, 100, 125, 110, 50, 50, 30, 50, 187, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.ELECTIVIRE, 4, false, false, false, "Thunderbolt Pokémon", PokemonType.ELECTRIC, null, 1.8, 138.6, Abilities.MOTOR_DRIVE, Abilities.NONE, Abilities.VITAL_SPIRIT, 540, 75, 123, 67, 95, 85, 95, 30, 50, 270, GrowthRate.MEDIUM_FAST, 75, false), - new PokemonSpecies(Species.MAGMORTAR, 4, false, false, false, "Blast Pokémon", PokemonType.FIRE, null, 1.6, 68, Abilities.FLAME_BODY, Abilities.NONE, Abilities.VITAL_SPIRIT, 540, 75, 95, 67, 125, 95, 83, 30, 50, 270, GrowthRate.MEDIUM_FAST, 75, false), - new PokemonSpecies(Species.TOGEKISS, 4, false, false, false, "Jubilee Pokémon", PokemonType.FAIRY, PokemonType.FLYING, 1.5, 38, Abilities.HUSTLE, Abilities.SERENE_GRACE, Abilities.SUPER_LUCK, 545, 85, 50, 95, 120, 115, 80, 30, 50, 273, GrowthRate.FAST, 87.5, false), - new PokemonSpecies(Species.YANMEGA, 4, false, false, false, "Ogre Darner Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.9, 51.5, Abilities.SPEED_BOOST, Abilities.TINTED_LENS, Abilities.FRISK, 515, 86, 76, 86, 116, 56, 95, 30, 70, 180, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.LEAFEON, 4, false, false, false, "Verdant Pokémon", PokemonType.GRASS, null, 1, 25.5, Abilities.LEAF_GUARD, Abilities.NONE, Abilities.CHLOROPHYLL, 525, 65, 110, 130, 60, 65, 95, 45, 35, 184, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(Species.GLACEON, 4, false, false, false, "Fresh Snow Pokémon", PokemonType.ICE, null, 0.8, 25.9, Abilities.SNOW_CLOAK, Abilities.NONE, Abilities.ICE_BODY, 525, 65, 60, 110, 130, 95, 65, 45, 35, 184, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(Species.GLISCOR, 4, false, false, false, "Fang Scorpion Pokémon", PokemonType.GROUND, PokemonType.FLYING, 2, 42.5, Abilities.HYPER_CUTTER, Abilities.SAND_VEIL, Abilities.POISON_HEAL, 510, 75, 95, 125, 45, 75, 95, 30, 70, 179, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.MAMOSWINE, 4, false, false, false, "Twin Tusk Pokémon", PokemonType.ICE, PokemonType.GROUND, 2.5, 291, Abilities.OBLIVIOUS, Abilities.SNOW_CLOAK, Abilities.THICK_FAT, 530, 110, 130, 80, 70, 60, 80, 50, 50, 265, GrowthRate.SLOW, 50, true), - new PokemonSpecies(Species.PORYGON_Z, 4, false, false, false, "Virtual Pokémon", PokemonType.NORMAL, null, 0.9, 34, Abilities.ADAPTABILITY, Abilities.DOWNLOAD, Abilities.ANALYTIC, 535, 85, 80, 70, 135, 75, 90, 30, 50, 268, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(Species.GALLADE, 4, false, false, false, "Blade Pokémon", PokemonType.PSYCHIC, PokemonType.FIGHTING, 1.6, 52, Abilities.STEADFAST, Abilities.SHARPNESS, Abilities.JUSTIFIED, 518, 68, 125, 65, 65, 115, 80, 45, 35, 259, GrowthRate.SLOW, 100, false, true, - new PokemonForm("Normal", "", PokemonType.PSYCHIC, PokemonType.FIGHTING, 1.6, 52, Abilities.STEADFAST, Abilities.SHARPNESS, Abilities.JUSTIFIED, 518, 68, 125, 65, 65, 115, 80, 45, 35, 259, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.PSYCHIC, PokemonType.FIGHTING, 1.6, 56.4, Abilities.INNER_FOCUS, Abilities.INNER_FOCUS, Abilities.INNER_FOCUS, 618, 68, 165, 95, 65, 115, 110, 45, 35, 259), - ), - new PokemonSpecies(Species.PROBOPASS, 4, false, false, false, "Compass Pokémon", PokemonType.ROCK, PokemonType.STEEL, 1.4, 340, Abilities.STURDY, Abilities.MAGNET_PULL, Abilities.SAND_FORCE, 525, 60, 55, 145, 75, 150, 40, 60, 70, 184, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.DUSKNOIR, 4, false, false, false, "Gripper Pokémon", PokemonType.GHOST, null, 2.2, 106.6, Abilities.PRESSURE, Abilities.NONE, Abilities.FRISK, 525, 45, 100, 135, 65, 135, 45, 45, 35, 263, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.FROSLASS, 4, false, false, false, "Snow Land Pokémon", PokemonType.ICE, PokemonType.GHOST, 1.3, 26.6, Abilities.SNOW_CLOAK, Abilities.NONE, Abilities.CURSED_BODY, 480, 70, 80, 70, 80, 70, 110, 75, 50, 168, GrowthRate.MEDIUM_FAST, 0, false), - new PokemonSpecies(Species.ROTOM, 4, false, false, false, "Plasma Pokémon", PokemonType.ELECTRIC, PokemonType.GHOST, 0.3, 0.3, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 440, 50, 50, 77, 95, 77, 91, 45, 50, 154, GrowthRate.MEDIUM_FAST, null, false, false, - new PokemonForm("Normal", "", PokemonType.ELECTRIC, PokemonType.GHOST, 0.3, 0.3, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 440, 50, 50, 77, 95, 77, 91, 45, 50, 154, false, null, true), - new PokemonForm("Heat", "heat", PokemonType.ELECTRIC, PokemonType.FIRE, 0.3, 0.3, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 182, false, null, true), - new PokemonForm("Wash", "wash", PokemonType.ELECTRIC, PokemonType.WATER, 0.3, 0.3, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 182, false, null, true), - new PokemonForm("Frost", "frost", PokemonType.ELECTRIC, PokemonType.ICE, 0.3, 0.3, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 182, false, null, true), - new PokemonForm("Fan", "fan", PokemonType.ELECTRIC, PokemonType.FLYING, 0.3, 0.3, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 182, false, null, true), - new PokemonForm("Mow", "mow", PokemonType.ELECTRIC, PokemonType.GRASS, 0.3, 0.3, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 182, false, null, true), - ), - new PokemonSpecies(Species.UXIE, 4, true, false, false, "Knowledge Pokémon", PokemonType.PSYCHIC, null, 0.3, 0.3, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 580, 75, 75, 130, 75, 130, 95, 3, 140, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.MESPRIT, 4, true, false, false, "Emotion Pokémon", PokemonType.PSYCHIC, null, 0.3, 0.3, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 580, 80, 105, 105, 105, 105, 80, 3, 140, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.AZELF, 4, true, false, false, "Willpower Pokémon", PokemonType.PSYCHIC, null, 0.3, 0.3, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 580, 75, 125, 70, 125, 70, 115, 3, 140, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.DIALGA, 4, false, true, false, "Temporal Pokémon", PokemonType.STEEL, PokemonType.DRAGON, 5.4, 683, Abilities.PRESSURE, Abilities.NONE, Abilities.TELEPATHY, 680, 100, 120, 120, 150, 100, 90, 3, 0, 340, GrowthRate.SLOW, null, false, false, - new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.DRAGON, 5.4, 683, Abilities.PRESSURE, Abilities.NONE, Abilities.TELEPATHY, 680, 100, 120, 120, 150, 100, 90, 3, 0, 340, false, null, true), - new PokemonForm("Origin Forme", "origin", PokemonType.STEEL, PokemonType.DRAGON, 7, 848.7, Abilities.PRESSURE, Abilities.NONE, Abilities.TELEPATHY, 680, 100, 100, 120, 150, 120, 90, 3, 0, 340), - ), - new PokemonSpecies(Species.PALKIA, 4, false, true, false, "Spatial Pokémon", PokemonType.WATER, PokemonType.DRAGON, 4.2, 336, Abilities.PRESSURE, Abilities.NONE, Abilities.TELEPATHY, 680, 90, 120, 100, 150, 120, 100, 3, 0, 340, GrowthRate.SLOW, null, false, false, - new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.DRAGON, 4.2, 336, Abilities.PRESSURE, Abilities.NONE, Abilities.TELEPATHY, 680, 90, 120, 100, 150, 120, 100, 3, 0, 340, false, null, true), - new PokemonForm("Origin Forme", "origin", PokemonType.WATER, PokemonType.DRAGON, 6.3, 659, Abilities.PRESSURE, Abilities.NONE, Abilities.TELEPATHY, 680, 90, 100, 100, 150, 120, 120, 3, 0, 340), - ), - new PokemonSpecies(Species.HEATRAN, 4, true, false, false, "Lava Dome Pokémon", PokemonType.FIRE, PokemonType.STEEL, 1.7, 430, Abilities.FLASH_FIRE, Abilities.NONE, Abilities.FLAME_BODY, 600, 91, 90, 106, 130, 106, 77, 3, 100, 300, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.REGIGIGAS, 4, true, false, false, "Colossal Pokémon", PokemonType.NORMAL, null, 3.7, 420, Abilities.SLOW_START, Abilities.NONE, Abilities.NORMALIZE, 670, 110, 160, 110, 80, 110, 100, 3, 0, 335, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.GIRATINA, 4, false, true, false, "Renegade Pokémon", PokemonType.GHOST, PokemonType.DRAGON, 4.5, 750, Abilities.PRESSURE, Abilities.NONE, Abilities.TELEPATHY, 680, 150, 100, 120, 100, 120, 90, 3, 0, 340, GrowthRate.SLOW, null, false, true, - new PokemonForm("Altered Forme", "altered", PokemonType.GHOST, PokemonType.DRAGON, 4.5, 750, Abilities.PRESSURE, Abilities.NONE, Abilities.TELEPATHY, 680, 150, 100, 120, 100, 120, 90, 3, 0, 340, false, null, true), - new PokemonForm("Origin Forme", "origin", PokemonType.GHOST, PokemonType.DRAGON, 6.9, 650, Abilities.LEVITATE, Abilities.NONE, Abilities.LEVITATE, 680, 150, 120, 100, 120, 100, 90, 3, 0, 340), - ), - new PokemonSpecies(Species.CRESSELIA, 4, true, false, false, "Lunar Pokémon", PokemonType.PSYCHIC, null, 1.5, 85.6, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 580, 120, 70, 110, 75, 120, 85, 3, 100, 300, GrowthRate.SLOW, 0, false), - new PokemonSpecies(Species.PHIONE, 4, false, false, true, "Sea Drifter Pokémon", PokemonType.WATER, null, 0.4, 3.1, Abilities.HYDRATION, Abilities.NONE, Abilities.NONE, 480, 80, 80, 80, 80, 80, 80, 30, 70, 240, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.MANAPHY, 4, false, false, true, "Seafaring Pokémon", PokemonType.WATER, null, 0.3, 1.4, Abilities.HYDRATION, Abilities.NONE, Abilities.NONE, 600, 100, 100, 100, 100, 100, 100, 3, 70, 300, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.DARKRAI, 4, false, false, true, "Pitch-Black Pokémon", PokemonType.DARK, null, 1.5, 50.5, Abilities.BAD_DREAMS, Abilities.NONE, Abilities.NONE, 600, 70, 90, 90, 135, 90, 125, 3, 0, 300, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.SHAYMIN, 4, false, false, true, "Gratitude Pokémon", PokemonType.GRASS, null, 0.2, 2.1, Abilities.NATURAL_CURE, Abilities.NONE, Abilities.NONE, 600, 100, 100, 100, 100, 100, 100, 45, 100, 300, GrowthRate.MEDIUM_SLOW, null, false, true, - new PokemonForm("Land Forme", "land", PokemonType.GRASS, null, 0.2, 2.1, Abilities.NATURAL_CURE, Abilities.NONE, Abilities.NONE, 600, 100, 100, 100, 100, 100, 100, 45, 100, 300, false, null, true), - new PokemonForm("Sky Forme", "sky", PokemonType.GRASS, PokemonType.FLYING, 0.4, 5.2, Abilities.SERENE_GRACE, Abilities.NONE, Abilities.NONE, 600, 100, 103, 75, 120, 75, 127, 45, 100, 300), - ), - new PokemonSpecies(Species.ARCEUS, 4, false, false, true, "Alpha Pokémon", PokemonType.NORMAL, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal", "normal", PokemonType.NORMAL, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360, false, null, true), - new PokemonForm("Fighting", "fighting", PokemonType.FIGHTING, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Flying", "flying", PokemonType.FLYING, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Poison", "poison", PokemonType.POISON, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Ground", "ground", PokemonType.GROUND, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Rock", "rock", PokemonType.ROCK, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Bug", "bug", PokemonType.BUG, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Ghost", "ghost", PokemonType.GHOST, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Steel", "steel", PokemonType.STEEL, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Fire", "fire", PokemonType.FIRE, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Water", "water", PokemonType.WATER, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Grass", "grass", PokemonType.GRASS, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Electric", "electric", PokemonType.ELECTRIC, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Psychic", "psychic", PokemonType.PSYCHIC, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Ice", "ice", PokemonType.ICE, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Dragon", "dragon", PokemonType.DRAGON, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Dark", "dark", PokemonType.DARK, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("Fairy", "fairy", PokemonType.FAIRY, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("???", "unknown", PokemonType.UNKNOWN, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360, false, null, false, true), - ), - new PokemonSpecies(Species.VICTINI, 5, false, false, true, "Victory Pokémon", PokemonType.PSYCHIC, PokemonType.FIRE, 0.4, 4, Abilities.VICTORY_STAR, Abilities.NONE, Abilities.NONE, 600, 100, 100, 100, 100, 100, 100, 3, 100, 300, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.SNIVY, 5, false, false, false, "Grass Snake Pokémon", PokemonType.GRASS, null, 0.6, 8.1, Abilities.OVERGROW, Abilities.NONE, Abilities.CONTRARY, 308, 45, 45, 55, 45, 55, 63, 45, 70, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.SERVINE, 5, false, false, false, "Grass Snake Pokémon", PokemonType.GRASS, null, 0.8, 16, Abilities.OVERGROW, Abilities.NONE, Abilities.CONTRARY, 413, 60, 60, 75, 60, 75, 83, 45, 70, 145, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.SERPERIOR, 5, false, false, false, "Regal Pokémon", PokemonType.GRASS, null, 3.3, 63, Abilities.OVERGROW, Abilities.NONE, Abilities.CONTRARY, 528, 75, 75, 95, 75, 95, 113, 45, 70, 264, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.TEPIG, 5, false, false, false, "Fire Pig Pokémon", PokemonType.FIRE, null, 0.5, 9.9, Abilities.BLAZE, Abilities.NONE, Abilities.THICK_FAT, 308, 65, 63, 45, 45, 45, 45, 45, 70, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.PIGNITE, 5, false, false, false, "Fire Pig Pokémon", PokemonType.FIRE, PokemonType.FIGHTING, 1, 55.5, Abilities.BLAZE, Abilities.NONE, Abilities.THICK_FAT, 418, 90, 93, 55, 70, 55, 55, 45, 70, 146, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.EMBOAR, 5, false, false, false, "Mega Fire Pig Pokémon", PokemonType.FIRE, PokemonType.FIGHTING, 1.6, 150, Abilities.BLAZE, Abilities.NONE, Abilities.RECKLESS, 528, 110, 123, 65, 100, 65, 65, 45, 70, 264, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.OSHAWOTT, 5, false, false, false, "Sea Otter Pokémon", PokemonType.WATER, null, 0.5, 5.9, Abilities.TORRENT, Abilities.NONE, Abilities.SHELL_ARMOR, 308, 55, 55, 45, 63, 45, 45, 45, 70, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.DEWOTT, 5, false, false, false, "Discipline Pokémon", PokemonType.WATER, null, 0.8, 24.5, Abilities.TORRENT, Abilities.NONE, Abilities.SHELL_ARMOR, 413, 75, 75, 60, 83, 60, 60, 45, 70, 145, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.SAMUROTT, 5, false, false, false, "Formidable Pokémon", PokemonType.WATER, null, 1.5, 94.6, Abilities.TORRENT, Abilities.NONE, Abilities.SHELL_ARMOR, 528, 95, 100, 85, 108, 70, 70, 45, 70, 264, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.PATRAT, 5, false, false, false, "Scout Pokémon", PokemonType.NORMAL, null, 0.5, 11.6, Abilities.RUN_AWAY, Abilities.KEEN_EYE, Abilities.ANALYTIC, 255, 45, 55, 39, 35, 39, 42, 255, 70, 51, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.WATCHOG, 5, false, false, false, "Lookout Pokémon", PokemonType.NORMAL, null, 1.1, 27, Abilities.ILLUMINATE, Abilities.KEEN_EYE, Abilities.ANALYTIC, 420, 60, 85, 69, 60, 69, 77, 255, 70, 147, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.LILLIPUP, 5, false, false, false, "Puppy Pokémon", PokemonType.NORMAL, null, 0.4, 4.1, Abilities.VITAL_SPIRIT, Abilities.PICKUP, Abilities.RUN_AWAY, 275, 45, 60, 45, 25, 45, 55, 255, 50, 55, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.HERDIER, 5, false, false, false, "Loyal Dog Pokémon", PokemonType.NORMAL, null, 0.9, 14.7, Abilities.INTIMIDATE, Abilities.SAND_RUSH, Abilities.SCRAPPY, 370, 65, 80, 65, 35, 65, 60, 120, 50, 130, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.STOUTLAND, 5, false, false, false, "Big-Hearted Pokémon", PokemonType.NORMAL, null, 1.2, 61, Abilities.INTIMIDATE, Abilities.SAND_RUSH, Abilities.SCRAPPY, 500, 85, 110, 90, 45, 90, 80, 45, 50, 250, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.PURRLOIN, 5, false, false, false, "Devious Pokémon", PokemonType.DARK, null, 0.4, 10.1, Abilities.LIMBER, Abilities.UNBURDEN, Abilities.PRANKSTER, 281, 41, 50, 37, 50, 37, 66, 255, 50, 56, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.LIEPARD, 5, false, false, false, "Cruel Pokémon", PokemonType.DARK, null, 1.1, 37.5, Abilities.LIMBER, Abilities.UNBURDEN, Abilities.PRANKSTER, 446, 64, 88, 50, 88, 50, 106, 90, 50, 156, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.PANSAGE, 5, false, false, false, "Grass Monkey Pokémon", PokemonType.GRASS, null, 0.6, 10.5, Abilities.GLUTTONY, Abilities.NONE, Abilities.OVERGROW, 316, 50, 53, 48, 53, 48, 64, 190, 70, 63, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(Species.SIMISAGE, 5, false, false, false, "Thorn Monkey Pokémon", PokemonType.GRASS, null, 1.1, 30.5, Abilities.GLUTTONY, Abilities.NONE, Abilities.OVERGROW, 498, 75, 98, 63, 98, 63, 101, 75, 70, 174, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(Species.PANSEAR, 5, false, false, false, "High Temp Pokémon", PokemonType.FIRE, null, 0.6, 11, Abilities.GLUTTONY, Abilities.NONE, Abilities.BLAZE, 316, 50, 53, 48, 53, 48, 64, 190, 70, 63, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(Species.SIMISEAR, 5, false, false, false, "Ember Pokémon", PokemonType.FIRE, null, 1, 28, Abilities.GLUTTONY, Abilities.NONE, Abilities.BLAZE, 498, 75, 98, 63, 98, 63, 101, 75, 70, 174, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(Species.PANPOUR, 5, false, false, false, "Spray Pokémon", PokemonType.WATER, null, 0.6, 13.5, Abilities.GLUTTONY, Abilities.NONE, Abilities.TORRENT, 316, 50, 53, 48, 53, 48, 64, 190, 70, 63, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(Species.SIMIPOUR, 5, false, false, false, "Geyser Pokémon", PokemonType.WATER, null, 1, 29, Abilities.GLUTTONY, Abilities.NONE, Abilities.TORRENT, 498, 75, 98, 63, 98, 63, 101, 75, 70, 174, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(Species.MUNNA, 5, false, false, false, "Dream Eater Pokémon", PokemonType.PSYCHIC, null, 0.6, 23.3, Abilities.FOREWARN, Abilities.SYNCHRONIZE, Abilities.TELEPATHY, 292, 76, 25, 45, 67, 55, 24, 190, 50, 58, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.MUSHARNA, 5, false, false, false, "Drowsing Pokémon", PokemonType.PSYCHIC, null, 1.1, 60.5, Abilities.FOREWARN, Abilities.SYNCHRONIZE, Abilities.TELEPATHY, 487, 116, 55, 85, 107, 95, 29, 75, 50, 170, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.PIDOVE, 5, false, false, false, "Tiny Pigeon Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.3, 2.1, Abilities.BIG_PECKS, Abilities.SUPER_LUCK, Abilities.RIVALRY, 264, 50, 55, 50, 36, 30, 43, 255, 50, 53, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.TRANQUILL, 5, false, false, false, "Wild Pigeon Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 15, Abilities.BIG_PECKS, Abilities.SUPER_LUCK, Abilities.RIVALRY, 358, 62, 77, 62, 50, 42, 65, 120, 50, 125, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.UNFEZANT, 5, false, false, false, "Proud Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.2, 29, Abilities.BIG_PECKS, Abilities.SUPER_LUCK, Abilities.RIVALRY, 488, 80, 115, 80, 65, 55, 93, 45, 50, 244, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(Species.BLITZLE, 5, false, false, false, "Electrified Pokémon", PokemonType.ELECTRIC, null, 0.8, 29.8, Abilities.LIGHTNING_ROD, Abilities.MOTOR_DRIVE, Abilities.SAP_SIPPER, 295, 45, 60, 32, 50, 32, 76, 190, 70, 59, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.ZEBSTRIKA, 5, false, false, false, "Thunderbolt Pokémon", PokemonType.ELECTRIC, null, 1.6, 79.5, Abilities.LIGHTNING_ROD, Abilities.MOTOR_DRIVE, Abilities.SAP_SIPPER, 497, 75, 100, 63, 80, 63, 116, 75, 70, 174, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.ROGGENROLA, 5, false, false, false, "Mantle Pokémon", PokemonType.ROCK, null, 0.4, 18, Abilities.STURDY, Abilities.WEAK_ARMOR, Abilities.SAND_FORCE, 280, 55, 75, 85, 25, 25, 15, 255, 50, 56, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.BOLDORE, 5, false, false, false, "Ore Pokémon", PokemonType.ROCK, null, 0.9, 102, Abilities.STURDY, Abilities.WEAK_ARMOR, Abilities.SAND_FORCE, 390, 70, 105, 105, 50, 40, 20, 120, 50, 137, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.GIGALITH, 5, false, false, false, "Compressed Pokémon", PokemonType.ROCK, null, 1.7, 260, Abilities.STURDY, Abilities.SAND_STREAM, Abilities.SAND_FORCE, 515, 85, 135, 130, 60, 80, 25, 45, 50, 258, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.WOOBAT, 5, false, false, false, "Bat Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 0.4, 2.1, Abilities.UNAWARE, Abilities.KLUTZ, Abilities.SIMPLE, 323, 65, 45, 43, 55, 43, 72, 190, 50, 65, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.SWOOBAT, 5, false, false, false, "Courting Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 0.9, 10.5, Abilities.UNAWARE, Abilities.KLUTZ, Abilities.SIMPLE, 425, 67, 57, 55, 77, 55, 114, 45, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.DRILBUR, 5, false, false, false, "Mole Pokémon", PokemonType.GROUND, null, 0.3, 8.5, Abilities.SAND_RUSH, Abilities.SAND_FORCE, Abilities.MOLD_BREAKER, 328, 60, 85, 40, 30, 45, 68, 120, 50, 66, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.EXCADRILL, 5, false, false, false, "Subterrene Pokémon", PokemonType.GROUND, PokemonType.STEEL, 0.7, 40.4, Abilities.SAND_RUSH, Abilities.SAND_FORCE, Abilities.MOLD_BREAKER, 508, 110, 135, 60, 50, 65, 88, 60, 50, 178, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.AUDINO, 5, false, false, false, "Hearing Pokémon", PokemonType.NORMAL, null, 1.1, 31, Abilities.HEALER, Abilities.REGENERATOR, Abilities.KLUTZ, 445, 103, 60, 86, 60, 86, 50, 255, 50, 390, GrowthRate.FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.NORMAL, null, 1.1, 31, Abilities.HEALER, Abilities.REGENERATOR, Abilities.KLUTZ, 445, 103, 60, 86, 60, 86, 50, 255, 50, 390, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.NORMAL, PokemonType.FAIRY, 1.5, 32, Abilities.REGENERATOR, Abilities.REGENERATOR, Abilities.REGENERATOR, 545, 103, 60, 126, 80, 126, 50, 255, 50, 390), //Custom Ability, base form Hidden Ability - ), - new PokemonSpecies(Species.TIMBURR, 5, false, false, false, "Muscular Pokémon", PokemonType.FIGHTING, null, 0.6, 12.5, Abilities.GUTS, Abilities.SHEER_FORCE, Abilities.IRON_FIST, 305, 75, 80, 55, 25, 35, 35, 180, 70, 61, GrowthRate.MEDIUM_SLOW, 75, false), - new PokemonSpecies(Species.GURDURR, 5, false, false, false, "Muscular Pokémon", PokemonType.FIGHTING, null, 1.2, 40, Abilities.GUTS, Abilities.SHEER_FORCE, Abilities.IRON_FIST, 405, 85, 105, 85, 40, 50, 40, 90, 50, 142, GrowthRate.MEDIUM_SLOW, 75, false), - new PokemonSpecies(Species.CONKELDURR, 5, false, false, false, "Muscular Pokémon", PokemonType.FIGHTING, null, 1.4, 87, Abilities.GUTS, Abilities.SHEER_FORCE, Abilities.IRON_FIST, 505, 105, 140, 95, 55, 65, 45, 45, 50, 253, GrowthRate.MEDIUM_SLOW, 75, false), - new PokemonSpecies(Species.TYMPOLE, 5, false, false, false, "Tadpole Pokémon", PokemonType.WATER, null, 0.5, 4.5, Abilities.SWIFT_SWIM, Abilities.HYDRATION, Abilities.WATER_ABSORB, 294, 50, 50, 40, 50, 40, 64, 255, 50, 59, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.PALPITOAD, 5, false, false, false, "Vibration Pokémon", PokemonType.WATER, PokemonType.GROUND, 0.8, 17, Abilities.SWIFT_SWIM, Abilities.HYDRATION, Abilities.WATER_ABSORB, 384, 75, 65, 55, 65, 55, 69, 120, 50, 134, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.SEISMITOAD, 5, false, false, false, "Vibration Pokémon", PokemonType.WATER, PokemonType.GROUND, 1.5, 62, Abilities.SWIFT_SWIM, Abilities.POISON_TOUCH, Abilities.WATER_ABSORB, 509, 105, 95, 75, 85, 75, 74, 45, 50, 255, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.THROH, 5, false, false, false, "Judo Pokémon", PokemonType.FIGHTING, null, 1.3, 55.5, Abilities.GUTS, Abilities.INNER_FOCUS, Abilities.MOLD_BREAKER, 465, 120, 100, 85, 30, 85, 45, 45, 50, 163, GrowthRate.MEDIUM_FAST, 100, false), - new PokemonSpecies(Species.SAWK, 5, false, false, false, "Karate Pokémon", PokemonType.FIGHTING, null, 1.4, 51, Abilities.STURDY, Abilities.INNER_FOCUS, Abilities.MOLD_BREAKER, 465, 75, 125, 75, 30, 75, 85, 45, 50, 163, GrowthRate.MEDIUM_FAST, 100, false), - new PokemonSpecies(Species.SEWADDLE, 5, false, false, false, "Sewing Pokémon", PokemonType.BUG, PokemonType.GRASS, 0.3, 2.5, Abilities.SWARM, Abilities.CHLOROPHYLL, Abilities.OVERCOAT, 310, 45, 53, 70, 40, 60, 42, 255, 70, 62, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.SWADLOON, 5, false, false, false, "Leaf-Wrapped Pokémon", PokemonType.BUG, PokemonType.GRASS, 0.5, 7.3, Abilities.LEAF_GUARD, Abilities.CHLOROPHYLL, Abilities.OVERCOAT, 380, 55, 63, 90, 50, 80, 42, 120, 70, 133, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.LEAVANNY, 5, false, false, false, "Nurturing Pokémon", PokemonType.BUG, PokemonType.GRASS, 1.2, 20.5, Abilities.SWARM, Abilities.CHLOROPHYLL, Abilities.OVERCOAT, 500, 75, 103, 80, 70, 80, 92, 45, 70, 250, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.VENIPEDE, 5, false, false, false, "Centipede Pokémon", PokemonType.BUG, PokemonType.POISON, 0.4, 5.3, Abilities.POISON_POINT, Abilities.SWARM, Abilities.SPEED_BOOST, 260, 30, 45, 59, 30, 39, 57, 255, 50, 52, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.WHIRLIPEDE, 5, false, false, false, "Curlipede Pokémon", PokemonType.BUG, PokemonType.POISON, 1.2, 58.5, Abilities.POISON_POINT, Abilities.SWARM, Abilities.SPEED_BOOST, 360, 40, 55, 99, 40, 79, 47, 120, 50, 126, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.SCOLIPEDE, 5, false, false, false, "Megapede Pokémon", PokemonType.BUG, PokemonType.POISON, 2.5, 200.5, Abilities.POISON_POINT, Abilities.SWARM, Abilities.SPEED_BOOST, 485, 60, 100, 89, 55, 69, 112, 45, 50, 243, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.COTTONEE, 5, false, false, false, "Cotton Puff Pokémon", PokemonType.GRASS, PokemonType.FAIRY, 0.3, 0.6, Abilities.PRANKSTER, Abilities.INFILTRATOR, Abilities.CHLOROPHYLL, 280, 40, 27, 60, 37, 50, 66, 190, 50, 56, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.WHIMSICOTT, 5, false, false, false, "Windveiled Pokémon", PokemonType.GRASS, PokemonType.FAIRY, 0.7, 6.6, Abilities.PRANKSTER, Abilities.INFILTRATOR, Abilities.CHLOROPHYLL, 480, 60, 67, 85, 77, 75, 116, 75, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.PETILIL, 5, false, false, false, "Bulb Pokémon", PokemonType.GRASS, null, 0.5, 6.6, Abilities.CHLOROPHYLL, Abilities.OWN_TEMPO, Abilities.LEAF_GUARD, 280, 45, 35, 50, 70, 50, 30, 190, 50, 56, GrowthRate.MEDIUM_FAST, 0, false), - new PokemonSpecies(Species.LILLIGANT, 5, false, false, false, "Flowering Pokémon", PokemonType.GRASS, null, 1.1, 16.3, Abilities.CHLOROPHYLL, Abilities.OWN_TEMPO, Abilities.LEAF_GUARD, 480, 70, 60, 75, 110, 75, 90, 75, 50, 168, GrowthRate.MEDIUM_FAST, 0, false), - new PokemonSpecies(Species.BASCULIN, 5, false, false, false, "Hostile Pokémon", PokemonType.WATER, null, 1, 18, Abilities.RECKLESS, Abilities.ADAPTABILITY, Abilities.MOLD_BREAKER, 460, 70, 92, 65, 80, 55, 98, 25, 50, 161, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Red-Striped Form", "red-striped", PokemonType.WATER, null, 1, 18, Abilities.RECKLESS, Abilities.ADAPTABILITY, Abilities.MOLD_BREAKER, 460, 70, 92, 65, 80, 55, 98, 25, 50, 161, false, null, true), - new PokemonForm("Blue-Striped Form", "blue-striped", PokemonType.WATER, null, 1, 18, Abilities.ROCK_HEAD, Abilities.ADAPTABILITY, Abilities.MOLD_BREAKER, 460, 70, 92, 65, 80, 55, 98, 25, 50, 161, false, null, true), - new PokemonForm("White-Striped Form", "white-striped", PokemonType.WATER, null, 1, 18, Abilities.RATTLED, Abilities.ADAPTABILITY, Abilities.MOLD_BREAKER, 460, 70, 92, 65, 80, 55, 98, 25, 50, 161, false, null, true), - ), - new PokemonSpecies(Species.SANDILE, 5, false, false, false, "Desert Croc Pokémon", PokemonType.GROUND, PokemonType.DARK, 0.7, 15.2, Abilities.INTIMIDATE, Abilities.MOXIE, Abilities.ANGER_POINT, 292, 50, 72, 35, 35, 35, 65, 180, 50, 58, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.KROKOROK, 5, false, false, false, "Desert Croc Pokémon", PokemonType.GROUND, PokemonType.DARK, 1, 33.4, Abilities.INTIMIDATE, Abilities.MOXIE, Abilities.ANGER_POINT, 351, 60, 82, 45, 45, 45, 74, 90, 50, 123, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.KROOKODILE, 5, false, false, false, "Intimidation Pokémon", PokemonType.GROUND, PokemonType.DARK, 1.5, 96.3, Abilities.INTIMIDATE, Abilities.MOXIE, Abilities.ANGER_POINT, 519, 95, 117, 80, 65, 70, 92, 45, 50, 260, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.DARUMAKA, 5, false, false, false, "Zen Charm Pokémon", PokemonType.FIRE, null, 0.6, 37.5, Abilities.HUSTLE, Abilities.NONE, Abilities.INNER_FOCUS, 315, 70, 90, 45, 15, 45, 50, 120, 50, 63, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.DARMANITAN, 5, false, false, false, "Blazing Pokémon", PokemonType.FIRE, null, 1.3, 92.9, Abilities.SHEER_FORCE, Abilities.NONE, Abilities.ZEN_MODE, 480, 105, 140, 55, 30, 55, 95, 60, 50, 168, GrowthRate.MEDIUM_SLOW, 50, false, true, - new PokemonForm("Standard Mode", "", PokemonType.FIRE, null, 1.3, 92.9, Abilities.SHEER_FORCE, Abilities.NONE, Abilities.ZEN_MODE, 480, 105, 140, 55, 30, 55, 95, 60, 50, 168, false, null, true), - new PokemonForm("Zen Mode", "zen", PokemonType.FIRE, PokemonType.PSYCHIC, 1.3, 92.9, Abilities.SHEER_FORCE, Abilities.NONE, Abilities.ZEN_MODE, 540, 105, 30, 105, 140, 105, 55, 60, 50, 189), - ), - new PokemonSpecies(Species.MARACTUS, 5, false, false, false, "Cactus Pokémon", PokemonType.GRASS, null, 1, 28, Abilities.WATER_ABSORB, Abilities.CHLOROPHYLL, Abilities.STORM_DRAIN, 461, 75, 86, 67, 106, 67, 60, 255, 50, 161, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.DWEBBLE, 5, false, false, false, "Rock Inn Pokémon", PokemonType.BUG, PokemonType.ROCK, 0.3, 14.5, Abilities.STURDY, Abilities.SHELL_ARMOR, Abilities.WEAK_ARMOR, 325, 50, 65, 85, 35, 35, 55, 190, 50, 65, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.CRUSTLE, 5, false, false, false, "Stone Home Pokémon", PokemonType.BUG, PokemonType.ROCK, 1.4, 200, Abilities.STURDY, Abilities.SHELL_ARMOR, Abilities.WEAK_ARMOR, 485, 70, 105, 125, 65, 75, 45, 75, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.SCRAGGY, 5, false, false, false, "Shedding Pokémon", PokemonType.DARK, PokemonType.FIGHTING, 0.6, 11.8, Abilities.SHED_SKIN, Abilities.MOXIE, Abilities.INTIMIDATE, 348, 50, 75, 70, 35, 70, 48, 180, 35, 70, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.SCRAFTY, 5, false, false, false, "Hoodlum Pokémon", PokemonType.DARK, PokemonType.FIGHTING, 1.1, 30, Abilities.SHED_SKIN, Abilities.MOXIE, Abilities.INTIMIDATE, 488, 65, 90, 115, 45, 115, 58, 90, 50, 171, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.SIGILYPH, 5, false, false, false, "Avianoid Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 1.4, 14, Abilities.WONDER_SKIN, Abilities.MAGIC_GUARD, Abilities.TINTED_LENS, 490, 72, 58, 80, 103, 80, 97, 45, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.YAMASK, 5, false, false, false, "Spirit Pokémon", PokemonType.GHOST, null, 0.5, 1.5, Abilities.MUMMY, Abilities.NONE, Abilities.NONE, 303, 38, 30, 85, 55, 65, 30, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.COFAGRIGUS, 5, false, false, false, "Coffin Pokémon", PokemonType.GHOST, null, 1.7, 76.5, Abilities.MUMMY, Abilities.NONE, Abilities.NONE, 483, 58, 50, 145, 95, 105, 30, 90, 50, 169, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.TIRTOUGA, 5, false, false, false, "Prototurtle Pokémon", PokemonType.WATER, PokemonType.ROCK, 0.7, 16.5, Abilities.SOLID_ROCK, Abilities.STURDY, Abilities.SWIFT_SWIM, 355, 54, 78, 103, 53, 45, 22, 45, 50, 71, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(Species.CARRACOSTA, 5, false, false, false, "Prototurtle Pokémon", PokemonType.WATER, PokemonType.ROCK, 1.2, 81, Abilities.SOLID_ROCK, Abilities.STURDY, Abilities.SWIFT_SWIM, 495, 74, 108, 133, 83, 65, 32, 45, 50, 173, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(Species.ARCHEN, 5, false, false, false, "First Bird Pokémon", PokemonType.ROCK, PokemonType.FLYING, 0.5, 9.5, Abilities.DEFEATIST, Abilities.NONE, Abilities.WIMP_OUT, 401, 55, 112, 45, 74, 45, 70, 45, 50, 71, GrowthRate.MEDIUM_FAST, 87.5, false), //Custom Hidden - new PokemonSpecies(Species.ARCHEOPS, 5, false, false, false, "First Bird Pokémon", PokemonType.ROCK, PokemonType.FLYING, 1.4, 32, Abilities.DEFEATIST, Abilities.NONE, Abilities.EMERGENCY_EXIT, 567, 75, 140, 65, 112, 65, 110, 45, 50, 177, GrowthRate.MEDIUM_FAST, 87.5, false), //Custom Hidden - new PokemonSpecies(Species.TRUBBISH, 5, false, false, false, "Trash Bag Pokémon", PokemonType.POISON, null, 0.6, 31, Abilities.STENCH, Abilities.STICKY_HOLD, Abilities.AFTERMATH, 329, 50, 50, 62, 40, 62, 65, 190, 50, 66, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.GARBODOR, 5, false, false, false, "Trash Heap Pokémon", PokemonType.POISON, null, 1.9, 107.3, Abilities.STENCH, Abilities.WEAK_ARMOR, Abilities.AFTERMATH, 474, 80, 95, 82, 60, 82, 75, 60, 50, 166, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.POISON, null, 1.9, 107.3, Abilities.STENCH, Abilities.WEAK_ARMOR, Abilities.AFTERMATH, 474, 80, 95, 82, 60, 82, 75, 60, 50, 166, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.POISON, PokemonType.STEEL, 21, 999.9, Abilities.TOXIC_DEBRIS, Abilities.TOXIC_DEBRIS, Abilities.TOXIC_DEBRIS, 574, 115, 121, 102, 81, 102, 53, 60, 50, 166), - ), - new PokemonSpecies(Species.ZORUA, 5, false, false, false, "Tricky Fox Pokémon", PokemonType.DARK, null, 0.7, 12.5, Abilities.ILLUSION, Abilities.NONE, Abilities.NONE, 330, 40, 65, 40, 80, 40, 65, 75, 50, 66, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.ZOROARK, 5, false, false, false, "Illusion Fox Pokémon", PokemonType.DARK, null, 1.6, 81.1, Abilities.ILLUSION, Abilities.NONE, Abilities.NONE, 510, 60, 105, 60, 120, 60, 105, 45, 50, 179, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.MINCCINO, 5, false, false, false, "Chinchilla Pokémon", PokemonType.NORMAL, null, 0.4, 5.8, Abilities.CUTE_CHARM, Abilities.TECHNICIAN, Abilities.SKILL_LINK, 300, 55, 50, 40, 40, 40, 75, 255, 50, 60, GrowthRate.FAST, 25, false), - new PokemonSpecies(Species.CINCCINO, 5, false, false, false, "Scarf Pokémon", PokemonType.NORMAL, null, 0.5, 7.5, Abilities.CUTE_CHARM, Abilities.TECHNICIAN, Abilities.SKILL_LINK, 470, 75, 95, 60, 65, 60, 115, 60, 50, 165, GrowthRate.FAST, 25, false), - new PokemonSpecies(Species.GOTHITA, 5, false, false, false, "Fixation Pokémon", PokemonType.PSYCHIC, null, 0.4, 5.8, Abilities.FRISK, Abilities.COMPETITIVE, Abilities.SHADOW_TAG, 290, 45, 30, 50, 55, 65, 45, 200, 50, 58, GrowthRate.MEDIUM_SLOW, 25, false), - new PokemonSpecies(Species.GOTHORITA, 5, false, false, false, "Manipulate Pokémon", PokemonType.PSYCHIC, null, 0.7, 18, Abilities.FRISK, Abilities.COMPETITIVE, Abilities.SHADOW_TAG, 390, 60, 45, 70, 75, 85, 55, 100, 50, 137, GrowthRate.MEDIUM_SLOW, 25, false), - new PokemonSpecies(Species.GOTHITELLE, 5, false, false, false, "Astral Body Pokémon", PokemonType.PSYCHIC, null, 1.5, 44, Abilities.FRISK, Abilities.COMPETITIVE, Abilities.SHADOW_TAG, 490, 70, 55, 95, 95, 110, 65, 50, 50, 245, GrowthRate.MEDIUM_SLOW, 25, false), - new PokemonSpecies(Species.SOLOSIS, 5, false, false, false, "Cell Pokémon", PokemonType.PSYCHIC, null, 0.3, 1, Abilities.OVERCOAT, Abilities.MAGIC_GUARD, Abilities.REGENERATOR, 290, 45, 30, 40, 105, 50, 20, 200, 50, 58, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.DUOSION, 5, false, false, false, "Mitosis Pokémon", PokemonType.PSYCHIC, null, 0.6, 8, Abilities.OVERCOAT, Abilities.MAGIC_GUARD, Abilities.REGENERATOR, 370, 65, 40, 50, 125, 60, 30, 100, 50, 130, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.REUNICLUS, 5, false, false, false, "Multiplying Pokémon", PokemonType.PSYCHIC, null, 1, 20.1, Abilities.OVERCOAT, Abilities.MAGIC_GUARD, Abilities.REGENERATOR, 490, 110, 65, 75, 125, 85, 30, 50, 50, 245, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.DUCKLETT, 5, false, false, false, "Water Bird Pokémon", PokemonType.WATER, PokemonType.FLYING, 0.5, 5.5, Abilities.KEEN_EYE, Abilities.BIG_PECKS, Abilities.HYDRATION, 305, 62, 44, 50, 44, 50, 55, 190, 70, 61, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.SWANNA, 5, false, false, false, "White Bird Pokémon", PokemonType.WATER, PokemonType.FLYING, 1.3, 24.2, Abilities.KEEN_EYE, Abilities.BIG_PECKS, Abilities.HYDRATION, 473, 75, 87, 63, 87, 63, 98, 45, 70, 166, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.VANILLITE, 5, false, false, false, "Fresh Snow Pokémon", PokemonType.ICE, null, 0.4, 5.7, Abilities.ICE_BODY, Abilities.SNOW_CLOAK, Abilities.WEAK_ARMOR, 305, 36, 50, 50, 65, 60, 44, 255, 50, 61, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.VANILLISH, 5, false, false, false, "Icy Snow Pokémon", PokemonType.ICE, null, 1.1, 41, Abilities.ICE_BODY, Abilities.SNOW_CLOAK, Abilities.WEAK_ARMOR, 395, 51, 65, 65, 80, 75, 59, 120, 50, 138, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.VANILLUXE, 5, false, false, false, "Snowstorm Pokémon", PokemonType.ICE, null, 1.3, 57.5, Abilities.ICE_BODY, Abilities.SNOW_WARNING, Abilities.WEAK_ARMOR, 535, 71, 95, 85, 110, 95, 79, 45, 50, 268, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.DEERLING, 5, false, false, false, "Season Pokémon", PokemonType.NORMAL, PokemonType.GRASS, 0.6, 19.5, Abilities.CHLOROPHYLL, Abilities.SAP_SIPPER, Abilities.SERENE_GRACE, 335, 60, 60, 50, 40, 50, 75, 190, 70, 67, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Spring Form", "spring", PokemonType.NORMAL, PokemonType.GRASS, 0.6, 19.5, Abilities.CHLOROPHYLL, Abilities.SAP_SIPPER, Abilities.SERENE_GRACE, 335, 60, 60, 50, 40, 50, 75, 190, 70, 67, false, null, true), - new PokemonForm("Summer Form", "summer", PokemonType.NORMAL, PokemonType.GRASS, 0.6, 19.5, Abilities.CHLOROPHYLL, Abilities.SAP_SIPPER, Abilities.SERENE_GRACE, 335, 60, 60, 50, 40, 50, 75, 190, 70, 67, false, null, true), - new PokemonForm("Autumn Form", "autumn", PokemonType.NORMAL, PokemonType.GRASS, 0.6, 19.5, Abilities.CHLOROPHYLL, Abilities.SAP_SIPPER, Abilities.SERENE_GRACE, 335, 60, 60, 50, 40, 50, 75, 190, 70, 67, false, null, true), - new PokemonForm("Winter Form", "winter", PokemonType.NORMAL, PokemonType.GRASS, 0.6, 19.5, Abilities.CHLOROPHYLL, Abilities.SAP_SIPPER, Abilities.SERENE_GRACE, 335, 60, 60, 50, 40, 50, 75, 190, 70, 67, false, null, true), - ), - new PokemonSpecies(Species.SAWSBUCK, 5, false, false, false, "Season Pokémon", PokemonType.NORMAL, PokemonType.GRASS, 1.9, 92.5, Abilities.CHLOROPHYLL, Abilities.SAP_SIPPER, Abilities.SERENE_GRACE, 475, 80, 100, 70, 60, 70, 95, 75, 70, 166, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Spring Form", "spring", PokemonType.NORMAL, PokemonType.GRASS, 1.9, 92.5, Abilities.CHLOROPHYLL, Abilities.SAP_SIPPER, Abilities.SERENE_GRACE, 475, 80, 100, 70, 60, 70, 95, 75, 70, 166, false, null, true), - new PokemonForm("Summer Form", "summer", PokemonType.NORMAL, PokemonType.GRASS, 1.9, 92.5, Abilities.CHLOROPHYLL, Abilities.SAP_SIPPER, Abilities.SERENE_GRACE, 475, 80, 100, 70, 60, 70, 95, 75, 70, 166, false, null, true), - new PokemonForm("Autumn Form", "autumn", PokemonType.NORMAL, PokemonType.GRASS, 1.9, 92.5, Abilities.CHLOROPHYLL, Abilities.SAP_SIPPER, Abilities.SERENE_GRACE, 475, 80, 100, 70, 60, 70, 95, 75, 70, 166, false, null, true), - new PokemonForm("Winter Form", "winter", PokemonType.NORMAL, PokemonType.GRASS, 1.9, 92.5, Abilities.CHLOROPHYLL, Abilities.SAP_SIPPER, Abilities.SERENE_GRACE, 475, 80, 100, 70, 60, 70, 95, 75, 70, 166, false, null, true), - ), - new PokemonSpecies(Species.EMOLGA, 5, false, false, false, "Sky Squirrel Pokémon", PokemonType.ELECTRIC, PokemonType.FLYING, 0.4, 5, Abilities.STATIC, Abilities.NONE, Abilities.MOTOR_DRIVE, 428, 55, 75, 60, 75, 60, 103, 200, 50, 150, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.KARRABLAST, 5, false, false, false, "Clamping Pokémon", PokemonType.BUG, null, 0.5, 5.9, Abilities.SWARM, Abilities.SHED_SKIN, Abilities.NO_GUARD, 315, 50, 75, 45, 40, 45, 60, 200, 50, 63, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.ESCAVALIER, 5, false, false, false, "Cavalry Pokémon", PokemonType.BUG, PokemonType.STEEL, 1, 33, Abilities.SWARM, Abilities.SHELL_ARMOR, Abilities.OVERCOAT, 495, 70, 135, 105, 60, 105, 20, 75, 50, 173, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.FOONGUS, 5, false, false, false, "Mushroom Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.2, 1, Abilities.EFFECT_SPORE, Abilities.NONE, Abilities.REGENERATOR, 294, 69, 55, 45, 55, 55, 15, 190, 50, 59, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.AMOONGUSS, 5, false, false, false, "Mushroom Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.6, 10.5, Abilities.EFFECT_SPORE, Abilities.NONE, Abilities.REGENERATOR, 464, 114, 85, 70, 85, 80, 30, 75, 50, 162, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.FRILLISH, 5, false, false, false, "Floating Pokémon", PokemonType.WATER, PokemonType.GHOST, 1.2, 33, Abilities.WATER_ABSORB, Abilities.CURSED_BODY, Abilities.DAMP, 335, 55, 40, 50, 65, 85, 40, 190, 50, 67, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.JELLICENT, 5, false, false, false, "Floating Pokémon", PokemonType.WATER, PokemonType.GHOST, 2.2, 135, Abilities.WATER_ABSORB, Abilities.CURSED_BODY, Abilities.DAMP, 480, 100, 60, 70, 85, 105, 60, 60, 50, 168, GrowthRate.MEDIUM_FAST, 50, true), - new PokemonSpecies(Species.ALOMOMOLA, 5, false, false, false, "Caring Pokémon", PokemonType.WATER, null, 1.2, 31.6, Abilities.HEALER, Abilities.HYDRATION, Abilities.REGENERATOR, 470, 165, 75, 80, 40, 45, 65, 75, 70, 165, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.JOLTIK, 5, false, false, false, "Attaching Pokémon", PokemonType.BUG, PokemonType.ELECTRIC, 0.1, 0.6, Abilities.COMPOUND_EYES, Abilities.UNNERVE, Abilities.SWARM, 319, 50, 47, 50, 57, 50, 65, 190, 50, 64, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.GALVANTULA, 5, false, false, false, "EleSpider Pokémon", PokemonType.BUG, PokemonType.ELECTRIC, 0.8, 14.3, Abilities.COMPOUND_EYES, Abilities.UNNERVE, Abilities.SWARM, 472, 70, 77, 60, 97, 60, 108, 75, 50, 165, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.FERROSEED, 5, false, false, false, "Thorn Seed Pokémon", PokemonType.GRASS, PokemonType.STEEL, 0.6, 18.8, Abilities.IRON_BARBS, Abilities.NONE, Abilities.ANTICIPATION, 305, 44, 50, 91, 24, 86, 10, 255, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.FERROTHORN, 5, false, false, false, "Thorn Pod Pokémon", PokemonType.GRASS, PokemonType.STEEL, 1, 110, Abilities.IRON_BARBS, Abilities.NONE, Abilities.ANTICIPATION, 489, 74, 94, 131, 54, 116, 20, 90, 50, 171, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.KLINK, 5, false, false, false, "Gear Pokémon", PokemonType.STEEL, null, 0.3, 21, Abilities.PLUS, Abilities.MINUS, Abilities.CLEAR_BODY, 300, 40, 55, 70, 45, 60, 30, 130, 50, 60, GrowthRate.MEDIUM_SLOW, null, false), - new PokemonSpecies(Species.KLANG, 5, false, false, false, "Gear Pokémon", PokemonType.STEEL, null, 0.6, 51, Abilities.PLUS, Abilities.MINUS, Abilities.CLEAR_BODY, 440, 60, 80, 95, 70, 85, 50, 60, 50, 154, GrowthRate.MEDIUM_SLOW, null, false), - new PokemonSpecies(Species.KLINKLANG, 5, false, false, false, "Gear Pokémon", PokemonType.STEEL, null, 0.6, 81, Abilities.PLUS, Abilities.MINUS, Abilities.CLEAR_BODY, 520, 60, 100, 115, 70, 85, 90, 30, 50, 260, GrowthRate.MEDIUM_SLOW, null, false), - new PokemonSpecies(Species.TYNAMO, 5, false, false, false, "EleFish Pokémon", PokemonType.ELECTRIC, null, 0.2, 0.3, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 275, 35, 55, 40, 45, 40, 60, 190, 70, 55, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.EELEKTRIK, 5, false, false, false, "EleFish Pokémon", PokemonType.ELECTRIC, null, 1.2, 22, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 405, 65, 85, 70, 75, 70, 40, 60, 70, 142, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.EELEKTROSS, 5, false, false, false, "EleFish Pokémon", PokemonType.ELECTRIC, null, 2.1, 80.5, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 515, 85, 115, 80, 105, 80, 50, 30, 70, 258, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.ELGYEM, 5, false, false, false, "Cerebral Pokémon", PokemonType.PSYCHIC, null, 0.5, 9, Abilities.TELEPATHY, Abilities.SYNCHRONIZE, Abilities.ANALYTIC, 335, 55, 55, 55, 85, 55, 30, 255, 50, 67, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.BEHEEYEM, 5, false, false, false, "Cerebral Pokémon", PokemonType.PSYCHIC, null, 1, 34.5, Abilities.TELEPATHY, Abilities.SYNCHRONIZE, Abilities.ANALYTIC, 485, 75, 75, 75, 125, 95, 40, 90, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.LITWICK, 5, false, false, false, "Candle Pokémon", PokemonType.GHOST, PokemonType.FIRE, 0.3, 3.1, Abilities.FLASH_FIRE, Abilities.FLAME_BODY, Abilities.INFILTRATOR, 275, 50, 30, 55, 65, 55, 20, 190, 50, 55, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.LAMPENT, 5, false, false, false, "Lamp Pokémon", PokemonType.GHOST, PokemonType.FIRE, 0.6, 13, Abilities.FLASH_FIRE, Abilities.FLAME_BODY, Abilities.INFILTRATOR, 370, 60, 40, 60, 95, 60, 55, 90, 50, 130, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.CHANDELURE, 5, false, false, false, "Luring Pokémon", PokemonType.GHOST, PokemonType.FIRE, 1, 34.3, Abilities.FLASH_FIRE, Abilities.FLAME_BODY, Abilities.INFILTRATOR, 520, 60, 55, 90, 145, 90, 80, 45, 50, 260, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.AXEW, 5, false, false, false, "Tusk Pokémon", PokemonType.DRAGON, null, 0.6, 18, Abilities.RIVALRY, Abilities.MOLD_BREAKER, Abilities.UNNERVE, 320, 46, 87, 60, 30, 40, 57, 75, 35, 64, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.FRAXURE, 5, false, false, false, "Axe Jaw Pokémon", PokemonType.DRAGON, null, 1, 36, Abilities.RIVALRY, Abilities.MOLD_BREAKER, Abilities.UNNERVE, 410, 66, 117, 70, 40, 50, 67, 60, 35, 144, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.HAXORUS, 5, false, false, false, "Axe Jaw Pokémon", PokemonType.DRAGON, null, 1.8, 105.5, Abilities.RIVALRY, Abilities.MOLD_BREAKER, Abilities.UNNERVE, 540, 76, 147, 90, 60, 70, 97, 45, 35, 270, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.CUBCHOO, 5, false, false, false, "Chill Pokémon", PokemonType.ICE, null, 0.5, 8.5, Abilities.SNOW_CLOAK, Abilities.SLUSH_RUSH, Abilities.RATTLED, 305, 55, 70, 40, 60, 40, 40, 120, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.BEARTIC, 5, false, false, false, "Freezing Pokémon", PokemonType.ICE, null, 2.6, 260, Abilities.SNOW_CLOAK, Abilities.SLUSH_RUSH, Abilities.SWIFT_SWIM, 505, 95, 130, 80, 70, 80, 50, 60, 50, 177, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.CRYOGONAL, 5, false, false, false, "Crystallizing Pokémon", PokemonType.ICE, null, 1.1, 148, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 515, 80, 50, 50, 95, 135, 105, 25, 50, 180, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(Species.SHELMET, 5, false, false, false, "Snail Pokémon", PokemonType.BUG, null, 0.4, 7.7, Abilities.HYDRATION, Abilities.SHELL_ARMOR, Abilities.OVERCOAT, 305, 50, 40, 85, 40, 65, 25, 200, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.ACCELGOR, 5, false, false, false, "Shell Out Pokémon", PokemonType.BUG, null, 0.8, 25.3, Abilities.HYDRATION, Abilities.STICKY_HOLD, Abilities.UNBURDEN, 495, 80, 70, 40, 100, 60, 145, 75, 50, 173, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.STUNFISK, 5, false, false, false, "Trap Pokémon", PokemonType.GROUND, PokemonType.ELECTRIC, 0.7, 11, Abilities.STATIC, Abilities.LIMBER, Abilities.SAND_VEIL, 471, 109, 66, 84, 81, 99, 32, 75, 70, 165, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.MIENFOO, 5, false, false, false, "Martial Arts Pokémon", PokemonType.FIGHTING, null, 0.9, 20, Abilities.INNER_FOCUS, Abilities.REGENERATOR, Abilities.RECKLESS, 350, 45, 85, 50, 55, 50, 65, 180, 50, 70, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.MIENSHAO, 5, false, false, false, "Martial Arts Pokémon", PokemonType.FIGHTING, null, 1.4, 35.5, Abilities.INNER_FOCUS, Abilities.REGENERATOR, Abilities.RECKLESS, 510, 65, 125, 60, 95, 60, 105, 45, 50, 179, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.DRUDDIGON, 5, false, false, false, "Cave Pokémon", PokemonType.DRAGON, null, 1.6, 139, Abilities.ROUGH_SKIN, Abilities.SHEER_FORCE, Abilities.MOLD_BREAKER, 485, 77, 120, 90, 60, 90, 48, 45, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.GOLETT, 5, false, false, false, "Automaton Pokémon", PokemonType.GROUND, PokemonType.GHOST, 1, 92, Abilities.IRON_FIST, Abilities.KLUTZ, Abilities.NO_GUARD, 303, 59, 74, 50, 35, 50, 35, 190, 50, 61, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(Species.GOLURK, 5, false, false, false, "Automaton Pokémon", PokemonType.GROUND, PokemonType.GHOST, 2.8, 330, Abilities.IRON_FIST, Abilities.KLUTZ, Abilities.NO_GUARD, 483, 89, 124, 80, 55, 80, 55, 90, 50, 169, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(Species.PAWNIARD, 5, false, false, false, "Sharp Blade Pokémon", PokemonType.DARK, PokemonType.STEEL, 0.5, 10.2, Abilities.DEFIANT, Abilities.INNER_FOCUS, Abilities.PRESSURE, 340, 45, 85, 70, 40, 40, 60, 120, 35, 68, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.BISHARP, 5, false, false, false, "Sword Blade Pokémon", PokemonType.DARK, PokemonType.STEEL, 1.6, 70, Abilities.DEFIANT, Abilities.INNER_FOCUS, Abilities.PRESSURE, 490, 65, 125, 100, 60, 70, 70, 45, 35, 172, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.BOUFFALANT, 5, false, false, false, "Bash Buffalo Pokémon", PokemonType.NORMAL, null, 1.6, 94.6, Abilities.RECKLESS, Abilities.SAP_SIPPER, Abilities.SOUNDPROOF, 490, 95, 110, 95, 40, 95, 55, 45, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.RUFFLET, 5, false, false, false, "Eaglet Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.5, 10.5, Abilities.KEEN_EYE, Abilities.SHEER_FORCE, Abilities.HUSTLE, 350, 70, 83, 50, 37, 50, 60, 190, 50, 70, GrowthRate.SLOW, 100, false), - new PokemonSpecies(Species.BRAVIARY, 5, false, false, false, "Valiant Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.5, 41, Abilities.KEEN_EYE, Abilities.SHEER_FORCE, Abilities.DEFIANT, 510, 100, 123, 75, 57, 75, 80, 60, 50, 179, GrowthRate.SLOW, 100, false), - new PokemonSpecies(Species.VULLABY, 5, false, false, false, "Diapered Pokémon", PokemonType.DARK, PokemonType.FLYING, 0.5, 9, Abilities.BIG_PECKS, Abilities.OVERCOAT, Abilities.WEAK_ARMOR, 370, 70, 55, 75, 45, 65, 60, 190, 35, 74, GrowthRate.SLOW, 0, false), - new PokemonSpecies(Species.MANDIBUZZ, 5, false, false, false, "Bone Vulture Pokémon", PokemonType.DARK, PokemonType.FLYING, 1.2, 39.5, Abilities.BIG_PECKS, Abilities.OVERCOAT, Abilities.WEAK_ARMOR, 510, 110, 65, 105, 55, 95, 80, 60, 35, 179, GrowthRate.SLOW, 0, false), - new PokemonSpecies(Species.HEATMOR, 5, false, false, false, "Anteater Pokémon", PokemonType.FIRE, null, 1.4, 58, Abilities.GLUTTONY, Abilities.FLASH_FIRE, Abilities.WHITE_SMOKE, 484, 85, 97, 66, 105, 66, 65, 90, 50, 169, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.DURANT, 5, false, false, false, "Iron Ant Pokémon", PokemonType.BUG, PokemonType.STEEL, 0.3, 33, Abilities.SWARM, Abilities.HUSTLE, Abilities.TRUANT, 484, 58, 109, 112, 48, 48, 109, 90, 50, 169, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.DEINO, 5, false, false, false, "Irate Pokémon", PokemonType.DARK, PokemonType.DRAGON, 0.8, 17.3, Abilities.HUSTLE, Abilities.NONE, Abilities.NONE, 300, 52, 65, 50, 45, 50, 38, 45, 35, 60, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.ZWEILOUS, 5, false, false, false, "Hostile Pokémon", PokemonType.DARK, PokemonType.DRAGON, 1.4, 50, Abilities.HUSTLE, Abilities.NONE, Abilities.NONE, 420, 72, 85, 70, 65, 70, 58, 45, 35, 147, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.HYDREIGON, 5, false, false, false, "Brutal Pokémon", PokemonType.DARK, PokemonType.DRAGON, 1.8, 160, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 600, 92, 105, 90, 125, 90, 98, 45, 35, 300, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.LARVESTA, 5, false, false, false, "Torch Pokémon", PokemonType.BUG, PokemonType.FIRE, 1.1, 28.8, Abilities.FLAME_BODY, Abilities.NONE, Abilities.SWARM, 360, 55, 85, 55, 50, 55, 60, 45, 50, 72, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.VOLCARONA, 5, false, false, false, "Sun Pokémon", PokemonType.BUG, PokemonType.FIRE, 1.6, 46, Abilities.FLAME_BODY, Abilities.NONE, Abilities.SWARM, 550, 85, 60, 65, 135, 105, 100, 15, 50, 275, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.COBALION, 5, true, false, false, "Iron Will Pokémon", PokemonType.STEEL, PokemonType.FIGHTING, 2.1, 250, Abilities.JUSTIFIED, Abilities.NONE, Abilities.NONE, 580, 91, 90, 129, 90, 72, 108, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.TERRAKION, 5, true, false, false, "Cavern Pokémon", PokemonType.ROCK, PokemonType.FIGHTING, 1.9, 260, Abilities.JUSTIFIED, Abilities.NONE, Abilities.NONE, 580, 91, 129, 90, 72, 90, 108, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.VIRIZION, 5, true, false, false, "Grassland Pokémon", PokemonType.GRASS, PokemonType.FIGHTING, 2, 200, Abilities.JUSTIFIED, Abilities.NONE, Abilities.NONE, 580, 91, 90, 72, 90, 129, 108, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.TORNADUS, 5, true, false, false, "Cyclone Pokémon", PokemonType.FLYING, null, 1.5, 63, Abilities.PRANKSTER, Abilities.NONE, Abilities.DEFIANT, 580, 79, 115, 70, 125, 80, 111, 3, 90, 290, GrowthRate.SLOW, 100, false, true, - new PokemonForm("Incarnate Forme", "incarnate", PokemonType.FLYING, null, 1.5, 63, Abilities.PRANKSTER, Abilities.NONE, Abilities.DEFIANT, 580, 79, 115, 70, 125, 80, 111, 3, 90, 290, false, null, true), - new PokemonForm("Therian Forme", "therian", PokemonType.FLYING, null, 1.4, 63, Abilities.REGENERATOR, Abilities.NONE, Abilities.REGENERATOR, 580, 79, 100, 80, 110, 90, 121, 3, 90, 290), - ), - new PokemonSpecies(Species.THUNDURUS, 5, true, false, false, "Bolt Strike Pokémon", PokemonType.ELECTRIC, PokemonType.FLYING, 1.5, 61, Abilities.PRANKSTER, Abilities.NONE, Abilities.DEFIANT, 580, 79, 115, 70, 125, 80, 111, 3, 90, 290, GrowthRate.SLOW, 100, false, true, - new PokemonForm("Incarnate Forme", "incarnate", PokemonType.ELECTRIC, PokemonType.FLYING, 1.5, 61, Abilities.PRANKSTER, Abilities.NONE, Abilities.DEFIANT, 580, 79, 115, 70, 125, 80, 111, 3, 90, 290, false, null, true), - new PokemonForm("Therian Forme", "therian", PokemonType.ELECTRIC, PokemonType.FLYING, 3, 61, Abilities.VOLT_ABSORB, Abilities.NONE, Abilities.VOLT_ABSORB, 580, 79, 105, 70, 145, 80, 101, 3, 90, 290), - ), - new PokemonSpecies(Species.RESHIRAM, 5, false, true, false, "Vast White Pokémon", PokemonType.DRAGON, PokemonType.FIRE, 3.2, 330, Abilities.TURBOBLAZE, Abilities.NONE, Abilities.NONE, 680, 100, 120, 100, 150, 120, 90, 3, 0, 340, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.ZEKROM, 5, false, true, false, "Deep Black Pokémon", PokemonType.DRAGON, PokemonType.ELECTRIC, 2.9, 345, Abilities.TERAVOLT, Abilities.NONE, Abilities.NONE, 680, 100, 150, 120, 120, 100, 90, 3, 0, 340, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.LANDORUS, 5, true, false, false, "Abundance Pokémon", PokemonType.GROUND, PokemonType.FLYING, 1.5, 68, Abilities.SAND_FORCE, Abilities.NONE, Abilities.SHEER_FORCE, 600, 89, 125, 90, 115, 80, 101, 3, 90, 300, GrowthRate.SLOW, 100, false, true, - new PokemonForm("Incarnate Forme", "incarnate", PokemonType.GROUND, PokemonType.FLYING, 1.5, 68, Abilities.SAND_FORCE, Abilities.NONE, Abilities.SHEER_FORCE, 600, 89, 125, 90, 115, 80, 101, 3, 90, 300, false, null, true), - new PokemonForm("Therian Forme", "therian", PokemonType.GROUND, PokemonType.FLYING, 1.3, 68, Abilities.INTIMIDATE, Abilities.NONE, Abilities.INTIMIDATE, 600, 89, 145, 90, 105, 80, 91, 3, 90, 300), - ), - new PokemonSpecies(Species.KYUREM, 5, false, true, false, "Boundary Pokémon", PokemonType.DRAGON, PokemonType.ICE, 3, 325, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 660, 125, 130, 90, 130, 90, 95, 3, 0, 330, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.ICE, 3, 325, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 660, 125, 130, 90, 130, 90, 95, 3, 0, 330, false, null, true), - new PokemonForm("Black", "black", PokemonType.DRAGON, PokemonType.ICE, 3.3, 325, Abilities.TERAVOLT, Abilities.NONE, Abilities.NONE, 700, 125, 170, 100, 120, 90, 95, 3, 0, 350), - new PokemonForm("White", "white", PokemonType.DRAGON, PokemonType.ICE, 3.6, 325, Abilities.TURBOBLAZE, Abilities.NONE, Abilities.NONE, 700, 125, 120, 90, 170, 100, 95, 3, 0, 350), - ), - new PokemonSpecies(Species.KELDEO, 5, false, false, true, "Colt Pokémon", PokemonType.WATER, PokemonType.FIGHTING, 1.4, 48.5, Abilities.JUSTIFIED, Abilities.NONE, Abilities.NONE, 580, 91, 72, 90, 129, 90, 108, 3, 35, 290, GrowthRate.SLOW, null, false, true, - new PokemonForm("Ordinary Form", "ordinary", PokemonType.WATER, PokemonType.FIGHTING, 1.4, 48.5, Abilities.JUSTIFIED, Abilities.NONE, Abilities.NONE, 580, 91, 72, 90, 129, 90, 108, 3, 35, 290, false, null, true), - new PokemonForm("Resolute", "resolute", PokemonType.WATER, PokemonType.FIGHTING, 1.4, 48.5, Abilities.JUSTIFIED, Abilities.NONE, Abilities.NONE, 580, 91, 72, 90, 129, 90, 108, 3, 35, 290), - ), - new PokemonSpecies(Species.MELOETTA, 5, false, false, true, "Melody Pokémon", PokemonType.NORMAL, PokemonType.PSYCHIC, 0.6, 6.5, Abilities.SERENE_GRACE, Abilities.NONE, Abilities.NONE, 600, 100, 77, 77, 128, 128, 90, 3, 100, 300, GrowthRate.SLOW, null, false, true, - new PokemonForm("Aria Forme", "aria", PokemonType.NORMAL, PokemonType.PSYCHIC, 0.6, 6.5, Abilities.SERENE_GRACE, Abilities.NONE, Abilities.NONE, 600, 100, 77, 77, 128, 128, 90, 3, 100, 300, false, null, true), - new PokemonForm("Pirouette Forme", "pirouette", PokemonType.NORMAL, PokemonType.FIGHTING, 0.6, 6.5, Abilities.SERENE_GRACE, Abilities.NONE, Abilities.NONE, 600, 100, 128, 90, 77, 77, 128, 3, 100, 300, false, null, true), - ), - new PokemonSpecies(Species.GENESECT, 5, false, false, true, "Paleozoic Pokémon", PokemonType.BUG, PokemonType.STEEL, 1.5, 82.5, Abilities.DOWNLOAD, Abilities.NONE, Abilities.NONE, 600, 71, 120, 95, 120, 95, 99, 3, 0, 300, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal", "", PokemonType.BUG, PokemonType.STEEL, 1.5, 82.5, Abilities.DOWNLOAD, Abilities.NONE, Abilities.NONE, 600, 71, 120, 95, 120, 95, 99, 3, 0, 300, false, null, true), - new PokemonForm("Shock Drive", "shock", PokemonType.BUG, PokemonType.STEEL, 1.5, 82.5, Abilities.DOWNLOAD, Abilities.NONE, Abilities.NONE, 600, 71, 120, 95, 120, 95, 99, 3, 0, 300), - new PokemonForm("Burn Drive", "burn", PokemonType.BUG, PokemonType.STEEL, 1.5, 82.5, Abilities.DOWNLOAD, Abilities.NONE, Abilities.NONE, 600, 71, 120, 95, 120, 95, 99, 3, 0, 300), - new PokemonForm("Chill Drive", "chill", PokemonType.BUG, PokemonType.STEEL, 1.5, 82.5, Abilities.DOWNLOAD, Abilities.NONE, Abilities.NONE, 600, 71, 120, 95, 120, 95, 99, 3, 0, 300), - new PokemonForm("Douse Drive", "douse", PokemonType.BUG, PokemonType.STEEL, 1.5, 82.5, Abilities.DOWNLOAD, Abilities.NONE, Abilities.NONE, 600, 71, 120, 95, 120, 95, 99, 3, 0, 300), - ), - new PokemonSpecies(Species.CHESPIN, 6, false, false, false, "Spiny Nut Pokémon", PokemonType.GRASS, null, 0.4, 9, Abilities.OVERGROW, Abilities.NONE, Abilities.BULLETPROOF, 313, 56, 61, 65, 48, 45, 38, 45, 70, 63, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.QUILLADIN, 6, false, false, false, "Spiny Armor Pokémon", PokemonType.GRASS, null, 0.7, 29, Abilities.OVERGROW, Abilities.NONE, Abilities.BULLETPROOF, 405, 61, 78, 95, 56, 58, 57, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.CHESNAUGHT, 6, false, false, false, "Spiny Armor Pokémon", PokemonType.GRASS, PokemonType.FIGHTING, 1.6, 90, Abilities.OVERGROW, Abilities.NONE, Abilities.BULLETPROOF, 530, 88, 107, 122, 74, 75, 64, 45, 70, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.FENNEKIN, 6, false, false, false, "Fox Pokémon", PokemonType.FIRE, null, 0.4, 9.4, Abilities.BLAZE, Abilities.NONE, Abilities.MAGICIAN, 307, 40, 45, 40, 62, 60, 60, 45, 70, 61, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.BRAIXEN, 6, false, false, false, "Fox Pokémon", PokemonType.FIRE, null, 1, 14.5, Abilities.BLAZE, Abilities.NONE, Abilities.MAGICIAN, 409, 59, 59, 58, 90, 70, 73, 45, 70, 143, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.DELPHOX, 6, false, false, false, "Fox Pokémon", PokemonType.FIRE, PokemonType.PSYCHIC, 1.5, 39, Abilities.BLAZE, Abilities.NONE, Abilities.MAGICIAN, 534, 75, 69, 72, 114, 100, 104, 45, 70, 267, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.FROAKIE, 6, false, false, false, "Bubble Frog Pokémon", PokemonType.WATER, null, 0.3, 7, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 314, 41, 56, 40, 62, 44, 71, 45, 70, 63, GrowthRate.MEDIUM_SLOW, 87.5, false, false, - new PokemonForm("Normal", "", PokemonType.WATER, null, 0.3, 7, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 314, 41, 56, 40, 62, 44, 71, 45, 70, 63, false, null, true), - new PokemonForm("Battle Bond", "battle-bond", PokemonType.WATER, null, 0.3, 7, Abilities.TORRENT, Abilities.NONE, Abilities.TORRENT, 314, 41, 56, 40, 62, 44, 71, 45, 70, 63, false, "", true), - ), - new PokemonSpecies(Species.FROGADIER, 6, false, false, false, "Bubble Frog Pokémon", PokemonType.WATER, null, 0.6, 10.9, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 405, 54, 63, 52, 83, 56, 97, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false, false, - new PokemonForm("Normal", "", PokemonType.WATER, null, 0.6, 10.9, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 405, 54, 63, 52, 83, 56, 97, 45, 70, 142, false, null, true), - new PokemonForm("Battle Bond", "battle-bond", PokemonType.WATER, null, 0.6, 10.9, Abilities.TORRENT, Abilities.NONE, Abilities.NONE, 405, 54, 63, 52, 83, 56, 97, 45, 70, 142, false, "", true), - ), - new PokemonSpecies(Species.GRENINJA, 6, false, false, false, "Ninja Pokémon", PokemonType.WATER, PokemonType.DARK, 1.5, 40, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 530, 72, 95, 67, 103, 71, 122, 45, 70, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, false, - new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.DARK, 1.5, 40, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 530, 72, 95, 67, 103, 71, 122, 45, 70, 265, false, null, true), - new PokemonForm("Battle Bond", "battle-bond", PokemonType.WATER, PokemonType.DARK, 1.5, 40, Abilities.BATTLE_BOND, Abilities.NONE, Abilities.BATTLE_BOND, 530, 72, 95, 67, 103, 71, 122, 45, 70, 265, false, "", true), - new PokemonForm("Ash", "ash", PokemonType.WATER, PokemonType.DARK, 1.5, 40, Abilities.BATTLE_BOND, Abilities.NONE, Abilities.NONE, 640, 72, 145, 67, 153, 71, 132, 45, 70, 265), - ), - new PokemonSpecies(Species.BUNNELBY, 6, false, false, false, "Digging Pokémon", PokemonType.NORMAL, null, 0.4, 5, Abilities.PICKUP, Abilities.CHEEK_POUCH, Abilities.HUGE_POWER, 237, 38, 36, 38, 32, 36, 57, 255, 50, 47, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.DIGGERSBY, 6, false, false, false, "Digging Pokémon", PokemonType.NORMAL, PokemonType.GROUND, 1, 42.4, Abilities.PICKUP, Abilities.CHEEK_POUCH, Abilities.HUGE_POWER, 423, 85, 56, 77, 50, 77, 78, 127, 50, 148, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.FLETCHLING, 6, false, false, false, "Tiny Robin Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.3, 1.7, Abilities.BIG_PECKS, Abilities.NONE, Abilities.GALE_WINGS, 278, 45, 50, 43, 40, 38, 62, 255, 50, 56, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.FLETCHINDER, 6, false, false, false, "Ember Pokémon", PokemonType.FIRE, PokemonType.FLYING, 0.7, 16, Abilities.FLAME_BODY, Abilities.NONE, Abilities.GALE_WINGS, 382, 62, 73, 55, 56, 52, 84, 120, 50, 134, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.TALONFLAME, 6, false, false, false, "Scorching Pokémon", PokemonType.FIRE, PokemonType.FLYING, 1.2, 24.5, Abilities.FLAME_BODY, Abilities.NONE, Abilities.GALE_WINGS, 499, 78, 81, 71, 74, 69, 126, 45, 50, 175, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.SCATTERBUG, 6, false, false, false, "Scatterdust Pokémon", PokemonType.BUG, null, 0.3, 2.5, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Meadow Pattern", "meadow", PokemonType.BUG, null, 0.3, 2.5, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Icy Snow Pattern", "icy-snow", PokemonType.BUG, null, 0.3, 2.5, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Polar Pattern", "polar", PokemonType.BUG, null, 0.3, 2.5, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Tundra Pattern", "tundra", PokemonType.BUG, null, 0.3, 2.5, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Continental Pattern", "continental", PokemonType.BUG, null, 0.3, 2.5, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Garden Pattern", "garden", PokemonType.BUG, null, 0.3, 2.5, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Elegant Pattern", "elegant", PokemonType.BUG, null, 0.3, 2.5, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Modern Pattern", "modern", PokemonType.BUG, null, 0.3, 2.5, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Marine Pattern", "marine", PokemonType.BUG, null, 0.3, 2.5, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Archipelago Pattern", "archipelago", PokemonType.BUG, null, 0.3, 2.5, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("High Plains Pattern", "high-plains", PokemonType.BUG, null, 0.3, 2.5, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Sandstorm Pattern", "sandstorm", PokemonType.BUG, null, 0.3, 2.5, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("River Pattern", "river", PokemonType.BUG, null, 0.3, 2.5, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Monsoon Pattern", "monsoon", PokemonType.BUG, null, 0.3, 2.5, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Savanna Pattern", "savanna", PokemonType.BUG, null, 0.3, 2.5, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Sun Pattern", "sun", PokemonType.BUG, null, 0.3, 2.5, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Ocean Pattern", "ocean", PokemonType.BUG, null, 0.3, 2.5, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Jungle Pattern", "jungle", PokemonType.BUG, null, 0.3, 2.5, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Fancy Pattern", "fancy", PokemonType.BUG, null, 0.3, 2.5, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - new PokemonForm("Poké Ball Pattern", "poke-ball", PokemonType.BUG, null, 0.3, 2.5, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), - ), - new PokemonSpecies(Species.SPEWPA, 6, false, false, false, "Scatterdust Pokémon", PokemonType.BUG, null, 0.3, 8.4, Abilities.SHED_SKIN, Abilities.SHED_SKIN, Abilities.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Meadow Pattern", "meadow", PokemonType.BUG, null, 0.3, 8.4, Abilities.SHED_SKIN, Abilities.NONE, Abilities.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Icy Snow Pattern", "icy-snow", PokemonType.BUG, null, 0.3, 8.4, Abilities.SHED_SKIN, Abilities.NONE, Abilities.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Polar Pattern", "polar", PokemonType.BUG, null, 0.3, 8.4, Abilities.SHED_SKIN, Abilities.NONE, Abilities.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Tundra Pattern", "tundra", PokemonType.BUG, null, 0.3, 8.4, Abilities.SHED_SKIN, Abilities.NONE, Abilities.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Continental Pattern", "continental", PokemonType.BUG, null, 0.3, 8.4, Abilities.SHED_SKIN, Abilities.NONE, Abilities.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Garden Pattern", "garden", PokemonType.BUG, null, 0.3, 8.4, Abilities.SHED_SKIN, Abilities.NONE, Abilities.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Elegant Pattern", "elegant", PokemonType.BUG, null, 0.3, 8.4, Abilities.SHED_SKIN, Abilities.NONE, Abilities.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Modern Pattern", "modern", PokemonType.BUG, null, 0.3, 8.4, Abilities.SHED_SKIN, Abilities.NONE, Abilities.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Marine Pattern", "marine", PokemonType.BUG, null, 0.3, 8.4, Abilities.SHED_SKIN, Abilities.NONE, Abilities.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Archipelago Pattern", "archipelago", PokemonType.BUG, null, 0.3, 8.4, Abilities.SHED_SKIN, Abilities.NONE, Abilities.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("High Plains Pattern", "high-plains", PokemonType.BUG, null, 0.3, 8.4, Abilities.SHED_SKIN, Abilities.NONE, Abilities.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Sandstorm Pattern", "sandstorm", PokemonType.BUG, null, 0.3, 8.4, Abilities.SHED_SKIN, Abilities.NONE, Abilities.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("River Pattern", "river", PokemonType.BUG, null, 0.3, 8.4, Abilities.SHED_SKIN, Abilities.NONE, Abilities.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Monsoon Pattern", "monsoon", PokemonType.BUG, null, 0.3, 8.4, Abilities.SHED_SKIN, Abilities.NONE, Abilities.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Savanna Pattern", "savanna", PokemonType.BUG, null, 0.3, 8.4, Abilities.SHED_SKIN, Abilities.NONE, Abilities.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Sun Pattern", "sun", PokemonType.BUG, null, 0.3, 8.4, Abilities.SHED_SKIN, Abilities.NONE, Abilities.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Ocean Pattern", "ocean", PokemonType.BUG, null, 0.3, 8.4, Abilities.SHED_SKIN, Abilities.NONE, Abilities.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Jungle Pattern", "jungle", PokemonType.BUG, null, 0.3, 8.4, Abilities.SHED_SKIN, Abilities.NONE, Abilities.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Fancy Pattern", "fancy", PokemonType.BUG, null, 0.3, 8.4, Abilities.SHED_SKIN, Abilities.NONE, Abilities.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - new PokemonForm("Poké Ball Pattern", "poke-ball", PokemonType.BUG, null, 0.3, 8.4, Abilities.SHED_SKIN, Abilities.NONE, Abilities.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), - ), - new PokemonSpecies(Species.VIVILLON, 6, false, false, false, "Scale Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Meadow Pattern", "meadow", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Icy Snow Pattern", "icy-snow", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Polar Pattern", "polar", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Tundra Pattern", "tundra", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Continental Pattern", "continental", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Garden Pattern", "garden", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Elegant Pattern", "elegant", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Modern Pattern", "modern", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Marine Pattern", "marine", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Archipelago Pattern", "archipelago", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("High Plains Pattern", "high-plains", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Sandstorm Pattern", "sandstorm", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("River Pattern", "river", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Monsoon Pattern", "monsoon", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Savanna Pattern", "savanna", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Sun Pattern", "sun", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Ocean Pattern", "ocean", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Jungle Pattern", "jungle", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Fancy Pattern", "fancy", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - new PokemonForm("Poké Ball Pattern", "poke-ball", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, Abilities.SHIELD_DUST, Abilities.COMPOUND_EYES, Abilities.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), - ), - new PokemonSpecies(Species.LITLEO, 6, false, false, false, "Lion Cub Pokémon", PokemonType.FIRE, PokemonType.NORMAL, 0.6, 13.5, Abilities.RIVALRY, Abilities.UNNERVE, Abilities.MOXIE, 369, 62, 50, 58, 73, 54, 72, 220, 70, 74, GrowthRate.MEDIUM_SLOW, 12.5, false), - new PokemonSpecies(Species.PYROAR, 6, false, false, false, "Royal Pokémon", PokemonType.FIRE, PokemonType.NORMAL, 1.5, 81.5, Abilities.RIVALRY, Abilities.UNNERVE, Abilities.MOXIE, 507, 86, 68, 72, 109, 66, 106, 65, 70, 177, GrowthRate.MEDIUM_SLOW, 12.5, true), - new PokemonSpecies(Species.FLABEBE, 6, false, false, false, "Single Bloom Pokémon", PokemonType.FAIRY, null, 0.1, 0.1, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 303, 44, 38, 39, 61, 79, 42, 225, 70, 61, GrowthRate.MEDIUM_FAST, 0, false, false, - new PokemonForm("Red Flower", "red", PokemonType.FAIRY, null, 0.1, 0.1, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 303, 44, 38, 39, 61, 79, 42, 225, 70, 61, false, null, true), - new PokemonForm("Yellow Flower", "yellow", PokemonType.FAIRY, null, 0.1, 0.1, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 303, 44, 38, 39, 61, 79, 42, 225, 70, 61, false, null, true), - new PokemonForm("Orange Flower", "orange", PokemonType.FAIRY, null, 0.1, 0.1, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 303, 44, 38, 39, 61, 79, 42, 225, 70, 61, false, null, true), - new PokemonForm("Blue Flower", "blue", PokemonType.FAIRY, null, 0.1, 0.1, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 303, 44, 38, 39, 61, 79, 42, 225, 70, 61, false, null, true), - new PokemonForm("White Flower", "white", PokemonType.FAIRY, null, 0.1, 0.1, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 303, 44, 38, 39, 61, 79, 42, 225, 70, 61, false, null, true), - ), - new PokemonSpecies(Species.FLOETTE, 6, false, false, false, "Single Bloom Pokémon", PokemonType.FAIRY, null, 0.2, 0.9, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 371, 54, 45, 47, 75, 98, 52, 120, 70, 130, GrowthRate.MEDIUM_FAST, 0, false, false, - new PokemonForm("Red Flower", "red", PokemonType.FAIRY, null, 0.2, 0.9, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 371, 54, 45, 47, 75, 98, 52, 120, 70, 130, false, null, true), - new PokemonForm("Yellow Flower", "yellow", PokemonType.FAIRY, null, 0.2, 0.9, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 371, 54, 45, 47, 75, 98, 52, 120, 70, 130, false, null, true), - new PokemonForm("Orange Flower", "orange", PokemonType.FAIRY, null, 0.2, 0.9, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 371, 54, 45, 47, 75, 98, 52, 120, 70, 130, false, null, true), - new PokemonForm("Blue Flower", "blue", PokemonType.FAIRY, null, 0.2, 0.9, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 371, 54, 45, 47, 75, 98, 52, 120, 70, 130, false, null, true), - new PokemonForm("White Flower", "white", PokemonType.FAIRY, null, 0.2, 0.9, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 371, 54, 45, 47, 75, 98, 52, 120, 70, 130, false, null, true), - ), - new PokemonSpecies(Species.FLORGES, 6, false, false, false, "Garden Pokémon", PokemonType.FAIRY, null, 1.1, 10, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, GrowthRate.MEDIUM_FAST, 0, false, false, - new PokemonForm("Red Flower", "red", PokemonType.FAIRY, null, 1.1, 10, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, false, null, true), - new PokemonForm("Yellow Flower", "yellow", PokemonType.FAIRY, null, 1.1, 10, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, false, null, true), - new PokemonForm("Orange Flower", "orange", PokemonType.FAIRY, null, 1.1, 10, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, false, null, true), - new PokemonForm("Blue Flower", "blue", PokemonType.FAIRY, null, 1.1, 10, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, false, null, true), - new PokemonForm("White Flower", "white", PokemonType.FAIRY, null, 1.1, 10, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, false, null, true), - ), - new PokemonSpecies(Species.SKIDDO, 6, false, false, false, "Mount Pokémon", PokemonType.GRASS, null, 0.9, 31, Abilities.SAP_SIPPER, Abilities.NONE, Abilities.GRASS_PELT, 350, 66, 65, 48, 62, 57, 52, 200, 70, 70, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.GOGOAT, 6, false, false, false, "Mount Pokémon", PokemonType.GRASS, null, 1.7, 91, Abilities.SAP_SIPPER, Abilities.NONE, Abilities.GRASS_PELT, 531, 123, 100, 62, 97, 81, 68, 45, 70, 186, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.PANCHAM, 6, false, false, false, "Playful Pokémon", PokemonType.FIGHTING, null, 0.6, 8, Abilities.IRON_FIST, Abilities.MOLD_BREAKER, Abilities.SCRAPPY, 348, 67, 82, 62, 46, 48, 43, 220, 50, 70, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.PANGORO, 6, false, false, false, "Daunting Pokémon", PokemonType.FIGHTING, PokemonType.DARK, 2.1, 136, Abilities.IRON_FIST, Abilities.MOLD_BREAKER, Abilities.SCRAPPY, 495, 95, 124, 78, 69, 71, 58, 65, 50, 173, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.FURFROU, 6, false, false, false, "Poodle Pokémon", PokemonType.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Natural Form", "", PokemonType.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), - new PokemonForm("Heart Trim", "heart", PokemonType.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), - new PokemonForm("Star Trim", "star", PokemonType.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), - new PokemonForm("Diamond Trim", "diamond", PokemonType.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), - new PokemonForm("Debutante Trim", "debutante", PokemonType.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), - new PokemonForm("Matron Trim", "matron", PokemonType.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), - new PokemonForm("Dandy Trim", "dandy", PokemonType.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), - new PokemonForm("La Reine Trim", "la-reine", PokemonType.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), - new PokemonForm("Kabuki Trim", "kabuki", PokemonType.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), - new PokemonForm("Pharaoh Trim", "pharaoh", PokemonType.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), - ), - new PokemonSpecies(Species.ESPURR, 6, false, false, false, "Restraint Pokémon", PokemonType.PSYCHIC, null, 0.3, 3.5, Abilities.KEEN_EYE, Abilities.INFILTRATOR, Abilities.OWN_TEMPO, 355, 62, 48, 54, 63, 60, 68, 190, 50, 71, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.MEOWSTIC, 6, false, false, false, "Constraint Pokémon", PokemonType.PSYCHIC, null, 0.6, 8.5, Abilities.KEEN_EYE, Abilities.INFILTRATOR, Abilities.PRANKSTER, 466, 74, 48, 76, 83, 81, 104, 75, 50, 163, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Male", "male", PokemonType.PSYCHIC, null, 0.6, 8.5, Abilities.KEEN_EYE, Abilities.INFILTRATOR, Abilities.PRANKSTER, 466, 74, 48, 76, 83, 81, 104, 75, 50, 163, false, "", true), - new PokemonForm("Female", "female", PokemonType.PSYCHIC, null, 0.6, 8.5, Abilities.KEEN_EYE, Abilities.INFILTRATOR, Abilities.COMPETITIVE, 466, 74, 48, 76, 83, 81, 104, 75, 50, 163, false, null, true), - ), - new PokemonSpecies(Species.HONEDGE, 6, false, false, false, "Sword Pokémon", PokemonType.STEEL, PokemonType.GHOST, 0.8, 2, Abilities.NO_GUARD, Abilities.NONE, Abilities.NONE, 325, 45, 80, 100, 35, 37, 28, 180, 50, 65, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.DOUBLADE, 6, false, false, false, "Sword Pokémon", PokemonType.STEEL, PokemonType.GHOST, 0.8, 4.5, Abilities.NO_GUARD, Abilities.NONE, Abilities.NONE, 448, 59, 110, 150, 45, 49, 35, 90, 50, 157, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.AEGISLASH, 6, false, false, false, "Royal Sword Pokémon", PokemonType.STEEL, PokemonType.GHOST, 1.7, 53, Abilities.STANCE_CHANGE, Abilities.NONE, Abilities.NONE, 500, 60, 50, 140, 50, 140, 60, 45, 50, 250, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Shield Forme", "shield", PokemonType.STEEL, PokemonType.GHOST, 1.7, 53, Abilities.STANCE_CHANGE, Abilities.NONE, Abilities.NONE, 500, 60, 50, 140, 50, 140, 60, 45, 50, 250, false, "", true), - new PokemonForm("Blade Forme", "blade", PokemonType.STEEL, PokemonType.GHOST, 1.7, 53, Abilities.STANCE_CHANGE, Abilities.NONE, Abilities.NONE, 500, 60, 140, 50, 140, 50, 60, 45, 50, 250), - ), - new PokemonSpecies(Species.SPRITZEE, 6, false, false, false, "Perfume Pokémon", PokemonType.FAIRY, null, 0.2, 0.5, Abilities.HEALER, Abilities.NONE, Abilities.AROMA_VEIL, 341, 78, 52, 60, 63, 65, 23, 200, 50, 68, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.AROMATISSE, 6, false, false, false, "Fragrance Pokémon", PokemonType.FAIRY, null, 0.8, 15.5, Abilities.HEALER, Abilities.NONE, Abilities.AROMA_VEIL, 462, 101, 72, 72, 99, 89, 29, 140, 50, 162, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.SWIRLIX, 6, false, false, false, "Cotton Candy Pokémon", PokemonType.FAIRY, null, 0.4, 3.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.UNBURDEN, 341, 62, 48, 66, 59, 57, 49, 200, 50, 68, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.SLURPUFF, 6, false, false, false, "Meringue Pokémon", PokemonType.FAIRY, null, 0.8, 5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.UNBURDEN, 480, 82, 80, 86, 85, 75, 72, 140, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.INKAY, 6, false, false, false, "Revolving Pokémon", PokemonType.DARK, PokemonType.PSYCHIC, 0.4, 3.5, Abilities.CONTRARY, Abilities.SUCTION_CUPS, Abilities.INFILTRATOR, 288, 53, 54, 53, 37, 46, 45, 190, 50, 58, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.MALAMAR, 6, false, false, false, "Overturning Pokémon", PokemonType.DARK, PokemonType.PSYCHIC, 1.5, 47, Abilities.CONTRARY, Abilities.SUCTION_CUPS, Abilities.INFILTRATOR, 482, 86, 92, 88, 68, 75, 73, 80, 50, 169, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.BINACLE, 6, false, false, false, "Two-Handed Pokémon", PokemonType.ROCK, PokemonType.WATER, 0.5, 31, Abilities.TOUGH_CLAWS, Abilities.SNIPER, Abilities.PICKPOCKET, 306, 42, 52, 67, 39, 56, 50, 120, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.BARBARACLE, 6, false, false, false, "Collective Pokémon", PokemonType.ROCK, PokemonType.WATER, 1.3, 96, Abilities.TOUGH_CLAWS, Abilities.SNIPER, Abilities.PICKPOCKET, 500, 72, 105, 115, 54, 86, 68, 45, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.SKRELP, 6, false, false, false, "Mock Kelp Pokémon", PokemonType.POISON, PokemonType.WATER, 0.5, 7.3, Abilities.POISON_POINT, Abilities.POISON_TOUCH, Abilities.ADAPTABILITY, 320, 50, 60, 60, 60, 60, 30, 225, 50, 64, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.DRAGALGE, 6, false, false, false, "Mock Kelp Pokémon", PokemonType.POISON, PokemonType.DRAGON, 1.8, 81.5, Abilities.POISON_POINT, Abilities.POISON_TOUCH, Abilities.ADAPTABILITY, 494, 65, 75, 90, 97, 123, 44, 55, 50, 173, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.CLAUNCHER, 6, false, false, false, "Water Gun Pokémon", PokemonType.WATER, null, 0.5, 8.3, Abilities.MEGA_LAUNCHER, Abilities.NONE, Abilities.NONE, 330, 50, 53, 62, 58, 63, 44, 225, 50, 66, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.CLAWITZER, 6, false, false, false, "Howitzer Pokémon", PokemonType.WATER, null, 1.3, 35.3, Abilities.MEGA_LAUNCHER, Abilities.NONE, Abilities.NONE, 500, 71, 73, 88, 120, 89, 59, 55, 50, 100, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.HELIOPTILE, 6, false, false, false, "Generator Pokémon", PokemonType.ELECTRIC, PokemonType.NORMAL, 0.5, 6, Abilities.DRY_SKIN, Abilities.SAND_VEIL, Abilities.SOLAR_POWER, 289, 44, 38, 33, 61, 43, 70, 190, 50, 58, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.HELIOLISK, 6, false, false, false, "Generator Pokémon", PokemonType.ELECTRIC, PokemonType.NORMAL, 1, 21, Abilities.DRY_SKIN, Abilities.SAND_VEIL, Abilities.SOLAR_POWER, 481, 62, 55, 52, 109, 94, 109, 75, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.TYRUNT, 6, false, false, false, "Royal Heir Pokémon", PokemonType.ROCK, PokemonType.DRAGON, 0.8, 26, Abilities.STRONG_JAW, Abilities.NONE, Abilities.STURDY, 362, 58, 89, 77, 45, 45, 48, 45, 50, 72, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(Species.TYRANTRUM, 6, false, false, false, "Despot Pokémon", PokemonType.ROCK, PokemonType.DRAGON, 2.5, 270, Abilities.STRONG_JAW, Abilities.NONE, Abilities.ROCK_HEAD, 521, 82, 121, 119, 69, 59, 71, 45, 50, 182, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(Species.AMAURA, 6, false, false, false, "Tundra Pokémon", PokemonType.ROCK, PokemonType.ICE, 1.3, 25.2, Abilities.REFRIGERATE, Abilities.NONE, Abilities.SNOW_WARNING, 362, 77, 59, 50, 67, 63, 46, 45, 50, 72, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(Species.AURORUS, 6, false, false, false, "Tundra Pokémon", PokemonType.ROCK, PokemonType.ICE, 2.7, 225, Abilities.REFRIGERATE, Abilities.NONE, Abilities.SNOW_WARNING, 521, 123, 77, 72, 99, 92, 58, 45, 50, 104, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(Species.SYLVEON, 6, false, false, false, "Intertwining Pokémon", PokemonType.FAIRY, null, 1, 23.5, Abilities.CUTE_CHARM, Abilities.NONE, Abilities.PIXILATE, 525, 95, 65, 65, 110, 130, 60, 45, 50, 184, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(Species.HAWLUCHA, 6, false, false, false, "Wrestling Pokémon", PokemonType.FIGHTING, PokemonType.FLYING, 0.8, 21.5, Abilities.LIMBER, Abilities.UNBURDEN, Abilities.MOLD_BREAKER, 500, 78, 92, 75, 74, 63, 118, 100, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.DEDENNE, 6, false, false, false, "Antenna Pokémon", PokemonType.ELECTRIC, PokemonType.FAIRY, 0.2, 2.2, Abilities.CHEEK_POUCH, Abilities.PICKUP, Abilities.PLUS, 431, 67, 58, 57, 81, 67, 101, 180, 50, 151, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.CARBINK, 6, false, false, false, "Jewel Pokémon", PokemonType.ROCK, PokemonType.FAIRY, 0.3, 5.7, Abilities.CLEAR_BODY, Abilities.NONE, Abilities.STURDY, 500, 50, 50, 150, 50, 150, 50, 60, 50, 100, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.GOOMY, 6, false, false, false, "Soft Tissue Pokémon", PokemonType.DRAGON, null, 0.3, 2.8, Abilities.SAP_SIPPER, Abilities.HYDRATION, Abilities.GOOEY, 300, 45, 50, 35, 55, 75, 40, 45, 35, 60, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.SLIGGOO, 6, false, false, false, "Soft Tissue Pokémon", PokemonType.DRAGON, null, 0.8, 17.5, Abilities.SAP_SIPPER, Abilities.HYDRATION, Abilities.GOOEY, 452, 68, 75, 53, 83, 113, 60, 45, 35, 158, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.GOODRA, 6, false, false, false, "Dragon Pokémon", PokemonType.DRAGON, null, 2, 150.5, Abilities.SAP_SIPPER, Abilities.HYDRATION, Abilities.GOOEY, 600, 90, 100, 70, 110, 150, 80, 45, 35, 300, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.KLEFKI, 6, false, false, false, "Key Ring Pokémon", PokemonType.STEEL, PokemonType.FAIRY, 0.2, 3, Abilities.PRANKSTER, Abilities.NONE, Abilities.MAGICIAN, 470, 57, 80, 91, 80, 87, 75, 75, 50, 165, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.PHANTUMP, 6, false, false, false, "Stump Pokémon", PokemonType.GHOST, PokemonType.GRASS, 0.4, 7, Abilities.NATURAL_CURE, Abilities.FRISK, Abilities.HARVEST, 309, 43, 70, 48, 50, 60, 38, 120, 50, 62, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.TREVENANT, 6, false, false, false, "Elder Tree Pokémon", PokemonType.GHOST, PokemonType.GRASS, 1.5, 71, Abilities.NATURAL_CURE, Abilities.FRISK, Abilities.HARVEST, 474, 85, 110, 76, 65, 82, 56, 60, 50, 166, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.PUMPKABOO, 6, false, false, false, "Pumpkin Pokémon", PokemonType.GHOST, PokemonType.GRASS, 0.4, 5, Abilities.PICKUP, Abilities.FRISK, Abilities.INSOMNIA, 335, 49, 66, 70, 44, 55, 51, 120, 50, 67, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Average Size", "", PokemonType.GHOST, PokemonType.GRASS, 0.4, 5, Abilities.PICKUP, Abilities.FRISK, Abilities.INSOMNIA, 335, 49, 66, 70, 44, 55, 51, 120, 50, 67, false, null, true), - new PokemonForm("Small Size", "small", PokemonType.GHOST, PokemonType.GRASS, 0.3, 3.5, Abilities.PICKUP, Abilities.FRISK, Abilities.INSOMNIA, 335, 44, 66, 70, 44, 55, 56, 120, 50, 67, false, "", true), - new PokemonForm("Large Size", "large", PokemonType.GHOST, PokemonType.GRASS, 0.5, 7.5, Abilities.PICKUP, Abilities.FRISK, Abilities.INSOMNIA, 335, 54, 66, 70, 44, 55, 46, 120, 50, 67, false, "", true), - new PokemonForm("Super Size", "super", PokemonType.GHOST, PokemonType.GRASS, 0.8, 15, Abilities.PICKUP, Abilities.FRISK, Abilities.INSOMNIA, 335, 59, 66, 70, 44, 55, 41, 120, 50, 67, false, "", true), - ), - new PokemonSpecies(Species.GOURGEIST, 6, false, false, false, "Pumpkin Pokémon", PokemonType.GHOST, PokemonType.GRASS, 0.9, 12.5, Abilities.PICKUP, Abilities.FRISK, Abilities.INSOMNIA, 494, 65, 90, 122, 58, 75, 84, 60, 50, 173, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Average Size", "", PokemonType.GHOST, PokemonType.GRASS, 0.9, 12.5, Abilities.PICKUP, Abilities.FRISK, Abilities.INSOMNIA, 494, 65, 90, 122, 58, 75, 84, 60, 50, 173, false, null, true), - new PokemonForm("Small Size", "small", PokemonType.GHOST, PokemonType.GRASS, 0.7, 9.5, Abilities.PICKUP, Abilities.FRISK, Abilities.INSOMNIA, 494, 55, 85, 122, 58, 75, 99, 60, 50, 173, false, "", true), - new PokemonForm("Large Size", "large", PokemonType.GHOST, PokemonType.GRASS, 1.1, 14, Abilities.PICKUP, Abilities.FRISK, Abilities.INSOMNIA, 494, 75, 95, 122, 58, 75, 69, 60, 50, 173, false, "", true), - new PokemonForm("Super Size", "super", PokemonType.GHOST, PokemonType.GRASS, 1.7, 39, Abilities.PICKUP, Abilities.FRISK, Abilities.INSOMNIA, 494, 85, 100, 122, 58, 75, 54, 60, 50, 173, false, "", true), - ), - new PokemonSpecies(Species.BERGMITE, 6, false, false, false, "Ice Chunk Pokémon", PokemonType.ICE, null, 1, 99.5, Abilities.OWN_TEMPO, Abilities.ICE_BODY, Abilities.STURDY, 304, 55, 69, 85, 32, 35, 28, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.AVALUGG, 6, false, false, false, "Iceberg Pokémon", PokemonType.ICE, null, 2, 505, Abilities.OWN_TEMPO, Abilities.ICE_BODY, Abilities.STURDY, 514, 95, 117, 184, 44, 46, 28, 55, 50, 180, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.NOIBAT, 6, false, false, false, "Sound Wave Pokémon", PokemonType.FLYING, PokemonType.DRAGON, 0.5, 8, Abilities.FRISK, Abilities.INFILTRATOR, Abilities.TELEPATHY, 245, 40, 30, 35, 45, 40, 55, 190, 50, 49, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.NOIVERN, 6, false, false, false, "Sound Wave Pokémon", PokemonType.FLYING, PokemonType.DRAGON, 1.5, 85, Abilities.FRISK, Abilities.INFILTRATOR, Abilities.TELEPATHY, 535, 85, 70, 80, 97, 80, 123, 45, 50, 187, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.XERNEAS, 6, false, true, false, "Life Pokémon", PokemonType.FAIRY, null, 3, 215, Abilities.FAIRY_AURA, Abilities.NONE, Abilities.NONE, 680, 126, 131, 95, 131, 98, 99, 45, 0, 340, GrowthRate.SLOW, null, false, true, - new PokemonForm("Neutral Mode", "neutral", PokemonType.FAIRY, null, 3, 215, Abilities.FAIRY_AURA, Abilities.NONE, Abilities.NONE, 680, 126, 131, 95, 131, 98, 99, 45, 0, 340, false, null, true), - new PokemonForm("Active Mode", "active", PokemonType.FAIRY, null, 3, 215, Abilities.FAIRY_AURA, Abilities.NONE, Abilities.NONE, 680, 126, 131, 95, 131, 98, 99, 45, 0, 340) - ), - new PokemonSpecies(Species.YVELTAL, 6, false, true, false, "Destruction Pokémon", PokemonType.DARK, PokemonType.FLYING, 5.8, 203, Abilities.DARK_AURA, Abilities.NONE, Abilities.NONE, 680, 126, 131, 95, 131, 98, 99, 45, 0, 340, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.ZYGARDE, 6, false, true, false, "Order Pokémon", PokemonType.DRAGON, PokemonType.GROUND, 5, 305, Abilities.AURA_BREAK, Abilities.NONE, Abilities.NONE, 600, 108, 100, 121, 81, 95, 95, 3, 0, 300, GrowthRate.SLOW, null, false, false, - new PokemonForm("50% Forme", "50", PokemonType.DRAGON, PokemonType.GROUND, 5, 305, Abilities.AURA_BREAK, Abilities.NONE, Abilities.NONE, 600, 108, 100, 121, 81, 95, 95, 3, 0, 300, false, "", true), - new PokemonForm("10% Forme", "10", PokemonType.DRAGON, PokemonType.GROUND, 1.2, 33.5, Abilities.AURA_BREAK, Abilities.NONE, Abilities.NONE, 486, 54, 100, 71, 61, 85, 115, 3, 0, 243, false, null, true), - new PokemonForm("50% Forme Power Construct", "50-pc", PokemonType.DRAGON, PokemonType.GROUND, 5, 305, Abilities.POWER_CONSTRUCT, Abilities.NONE, Abilities.NONE, 600, 108, 100, 121, 81, 95, 95, 3, 0, 300, false, "", true), - new PokemonForm("10% Forme Power Construct", "10-pc", PokemonType.DRAGON, PokemonType.GROUND, 1.2, 33.5, Abilities.POWER_CONSTRUCT, Abilities.NONE, Abilities.NONE, 486, 54, 100, 71, 61, 85, 115, 3, 0, 243, false, "10", true), - new PokemonForm("Complete Forme (50% PC)", "complete", PokemonType.DRAGON, PokemonType.GROUND, 4.5, 610, Abilities.POWER_CONSTRUCT, Abilities.NONE, Abilities.NONE, 708, 216, 100, 121, 91, 95, 85, 3, 0, 354), - new PokemonForm("Complete Forme (10% PC)", "10-complete", PokemonType.DRAGON, PokemonType.GROUND, 4.5, 610, Abilities.POWER_CONSTRUCT, Abilities.NONE, Abilities.NONE, 708, 216, 100, 121, 91, 95, 85, 3, 0, 354, false, "complete"), - ), - new PokemonSpecies(Species.DIANCIE, 6, false, false, true, "Jewel Pokémon", PokemonType.ROCK, PokemonType.FAIRY, 0.7, 8.8, Abilities.CLEAR_BODY, Abilities.NONE, Abilities.NONE, 600, 50, 100, 150, 100, 150, 50, 3, 50, 300, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal", "", PokemonType.ROCK, PokemonType.FAIRY, 0.7, 8.8, Abilities.CLEAR_BODY, Abilities.NONE, Abilities.NONE, 600, 50, 100, 150, 100, 150, 50, 3, 50, 300, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.ROCK, PokemonType.FAIRY, 1.1, 27.8, Abilities.MAGIC_BOUNCE, Abilities.NONE, Abilities.NONE, 700, 50, 160, 110, 160, 110, 110, 3, 50, 300), - ), - new PokemonSpecies(Species.HOOPA, 6, false, false, true, "Mischief Pokémon", PokemonType.PSYCHIC, PokemonType.GHOST, 0.5, 9, Abilities.MAGICIAN, Abilities.NONE, Abilities.NONE, 600, 80, 110, 60, 150, 130, 70, 3, 100, 300, GrowthRate.SLOW, null, false, false, - new PokemonForm("Hoopa Confined", "", PokemonType.PSYCHIC, PokemonType.GHOST, 0.5, 9, Abilities.MAGICIAN, Abilities.NONE, Abilities.NONE, 600, 80, 110, 60, 150, 130, 70, 3, 100, 300, false, null, true), - new PokemonForm("Hoopa Unbound", "unbound", PokemonType.PSYCHIC, PokemonType.DARK, 6.5, 490, Abilities.MAGICIAN, Abilities.NONE, Abilities.NONE, 680, 80, 160, 60, 170, 130, 80, 3, 100, 340), - ), - new PokemonSpecies(Species.VOLCANION, 6, false, false, true, "Steam Pokémon", PokemonType.FIRE, PokemonType.WATER, 1.7, 195, Abilities.WATER_ABSORB, Abilities.NONE, Abilities.NONE, 600, 80, 110, 120, 130, 90, 70, 3, 100, 300, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.ROWLET, 7, false, false, false, "Grass Quill Pokémon", PokemonType.GRASS, PokemonType.FLYING, 0.3, 1.5, Abilities.OVERGROW, Abilities.NONE, Abilities.LONG_REACH, 320, 68, 55, 55, 50, 50, 42, 45, 50, 64, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.DARTRIX, 7, false, false, false, "Blade Quill Pokémon", PokemonType.GRASS, PokemonType.FLYING, 0.7, 16, Abilities.OVERGROW, Abilities.NONE, Abilities.LONG_REACH, 420, 78, 75, 75, 70, 70, 52, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.DECIDUEYE, 7, false, false, false, "Arrow Quill Pokémon", PokemonType.GRASS, PokemonType.GHOST, 1.6, 36.6, Abilities.OVERGROW, Abilities.NONE, Abilities.LONG_REACH, 530, 78, 107, 75, 100, 100, 70, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.LITTEN, 7, false, false, false, "Fire Cat Pokémon", PokemonType.FIRE, null, 0.4, 4.3, Abilities.BLAZE, Abilities.NONE, Abilities.INTIMIDATE, 320, 45, 65, 40, 60, 40, 70, 45, 50, 64, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.TORRACAT, 7, false, false, false, "Fire Cat Pokémon", PokemonType.FIRE, null, 0.7, 25, Abilities.BLAZE, Abilities.NONE, Abilities.INTIMIDATE, 420, 65, 85, 50, 80, 50, 90, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.INCINEROAR, 7, false, false, false, "Heel Pokémon", PokemonType.FIRE, PokemonType.DARK, 1.8, 83, Abilities.BLAZE, Abilities.NONE, Abilities.INTIMIDATE, 530, 95, 115, 90, 80, 90, 60, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.POPPLIO, 7, false, false, false, "Sea Lion Pokémon", PokemonType.WATER, null, 0.4, 7.5, Abilities.TORRENT, Abilities.NONE, Abilities.LIQUID_VOICE, 320, 50, 54, 54, 66, 56, 40, 45, 50, 64, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.BRIONNE, 7, false, false, false, "Pop Star Pokémon", PokemonType.WATER, null, 0.6, 17.5, Abilities.TORRENT, Abilities.NONE, Abilities.LIQUID_VOICE, 420, 60, 69, 69, 91, 81, 50, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.PRIMARINA, 7, false, false, false, "Soloist Pokémon", PokemonType.WATER, PokemonType.FAIRY, 1.8, 44, Abilities.TORRENT, Abilities.NONE, Abilities.LIQUID_VOICE, 530, 80, 74, 74, 126, 116, 60, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.PIKIPEK, 7, false, false, false, "Woodpecker Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.3, 1.2, Abilities.KEEN_EYE, Abilities.SKILL_LINK, Abilities.PICKUP, 265, 35, 75, 30, 30, 30, 65, 255, 70, 53, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.TRUMBEAK, 7, false, false, false, "Bugle Beak Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 14.8, Abilities.KEEN_EYE, Abilities.SKILL_LINK, Abilities.PICKUP, 355, 55, 85, 50, 40, 50, 75, 120, 70, 124, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.TOUCANNON, 7, false, false, false, "Cannon Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.1, 26, Abilities.KEEN_EYE, Abilities.SKILL_LINK, Abilities.SHEER_FORCE, 485, 80, 120, 75, 75, 75, 60, 45, 70, 243, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.YUNGOOS, 7, false, false, false, "Loitering Pokémon", PokemonType.NORMAL, null, 0.4, 6, Abilities.STAKEOUT, Abilities.STRONG_JAW, Abilities.ADAPTABILITY, 253, 48, 70, 30, 30, 30, 45, 255, 70, 51, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.GUMSHOOS, 7, false, false, false, "Stakeout Pokémon", PokemonType.NORMAL, null, 0.7, 14.2, Abilities.STAKEOUT, Abilities.STRONG_JAW, Abilities.ADAPTABILITY, 418, 88, 110, 60, 55, 60, 45, 127, 70, 146, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.GRUBBIN, 7, false, false, false, "Larva Pokémon", PokemonType.BUG, null, 0.4, 4.4, Abilities.SWARM, Abilities.NONE, Abilities.NONE, 300, 47, 62, 45, 55, 45, 46, 255, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.CHARJABUG, 7, false, false, false, "Battery Pokémon", PokemonType.BUG, PokemonType.ELECTRIC, 0.5, 10.5, Abilities.BATTERY, Abilities.NONE, Abilities.NONE, 400, 57, 82, 95, 55, 75, 36, 120, 50, 140, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.VIKAVOLT, 7, false, false, false, "Stag Beetle Pokémon", PokemonType.BUG, PokemonType.ELECTRIC, 1.5, 45, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 500, 77, 70, 90, 145, 75, 43, 45, 50, 250, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.CRABRAWLER, 7, false, false, false, "Boxing Pokémon", PokemonType.FIGHTING, null, 0.6, 7, Abilities.HYPER_CUTTER, Abilities.IRON_FIST, Abilities.ANGER_POINT, 338, 47, 82, 57, 42, 47, 63, 225, 70, 68, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.CRABOMINABLE, 7, false, false, false, "Woolly Crab Pokémon", PokemonType.FIGHTING, PokemonType.ICE, 1.7, 180, Abilities.HYPER_CUTTER, Abilities.IRON_FIST, Abilities.ANGER_POINT, 478, 97, 132, 77, 62, 67, 43, 60, 70, 167, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.ORICORIO, 7, false, false, false, "Dancing Pokémon", PokemonType.FIRE, PokemonType.FLYING, 0.6, 3.4, Abilities.DANCER, Abilities.NONE, Abilities.NONE, 476, 75, 70, 70, 98, 70, 93, 45, 70, 167, GrowthRate.MEDIUM_FAST, 25, false, false, - new PokemonForm("Baile Style", "baile", PokemonType.FIRE, PokemonType.FLYING, 0.6, 3.4, Abilities.DANCER, Abilities.NONE, Abilities.NONE, 476, 75, 70, 70, 98, 70, 93, 45, 70, 167, false, "", true), - new PokemonForm("Pom-Pom Style", "pompom", PokemonType.ELECTRIC, PokemonType.FLYING, 0.6, 3.4, Abilities.DANCER, Abilities.NONE, Abilities.NONE, 476, 75, 70, 70, 98, 70, 93, 45, 70, 167, false, null, true), - new PokemonForm("Pau Style", "pau", PokemonType.PSYCHIC, PokemonType.FLYING, 0.6, 3.4, Abilities.DANCER, Abilities.NONE, Abilities.NONE, 476, 75, 70, 70, 98, 70, 93, 45, 70, 167, false, null, true), - new PokemonForm("Sensu Style", "sensu", PokemonType.GHOST, PokemonType.FLYING, 0.6, 3.4, Abilities.DANCER, Abilities.NONE, Abilities.NONE, 476, 75, 70, 70, 98, 70, 93, 45, 70, 167, false, null, true), - ), - new PokemonSpecies(Species.CUTIEFLY, 7, false, false, false, "Bee Fly Pokémon", PokemonType.BUG, PokemonType.FAIRY, 0.1, 0.2, Abilities.HONEY_GATHER, Abilities.SHIELD_DUST, Abilities.SWEET_VEIL, 304, 40, 45, 40, 55, 40, 84, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.RIBOMBEE, 7, false, false, false, "Bee Fly Pokémon", PokemonType.BUG, PokemonType.FAIRY, 0.2, 0.5, Abilities.HONEY_GATHER, Abilities.SHIELD_DUST, Abilities.SWEET_VEIL, 464, 60, 55, 60, 95, 70, 124, 75, 50, 162, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.ROCKRUFF, 7, false, false, false, "Puppy Pokémon", PokemonType.ROCK, null, 0.5, 9.2, Abilities.KEEN_EYE, Abilities.VITAL_SPIRIT, Abilities.STEADFAST, 280, 45, 65, 40, 30, 40, 60, 190, 50, 56, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Normal", "", PokemonType.ROCK, null, 0.5, 9.2, Abilities.KEEN_EYE, Abilities.VITAL_SPIRIT, Abilities.STEADFAST, 280, 45, 65, 40, 30, 40, 60, 190, 50, 56, false, null, true), - new PokemonForm("Own Tempo", "own-tempo", PokemonType.ROCK, null, 0.5, 9.2, Abilities.OWN_TEMPO, Abilities.NONE, Abilities.OWN_TEMPO, 280, 45, 65, 40, 30, 40, 60, 190, 50, 56, false, "", true), - ), - new PokemonSpecies(Species.LYCANROC, 7, false, false, false, "Wolf Pokémon", PokemonType.ROCK, null, 0.8, 25, Abilities.KEEN_EYE, Abilities.SAND_RUSH, Abilities.STEADFAST, 487, 75, 115, 65, 55, 65, 112, 90, 50, 170, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Midday Form", "midday", PokemonType.ROCK, null, 0.8, 25, Abilities.KEEN_EYE, Abilities.SAND_RUSH, Abilities.STEADFAST, 487, 75, 115, 65, 55, 65, 112, 90, 50, 170, false, "", true), - new PokemonForm("Midnight Form", "midnight", PokemonType.ROCK, null, 1.1, 25, Abilities.KEEN_EYE, Abilities.VITAL_SPIRIT, Abilities.NO_GUARD, 487, 85, 115, 75, 55, 75, 82, 90, 50, 170, false, null, true), - new PokemonForm("Dusk Form", "dusk", PokemonType.ROCK, null, 0.8, 25, Abilities.TOUGH_CLAWS, Abilities.TOUGH_CLAWS, Abilities.TOUGH_CLAWS, 487, 75, 117, 65, 55, 65, 110, 90, 50, 170, false, null, true), - ), - new PokemonSpecies(Species.WISHIWASHI, 7, false, false, false, "Small Fry Pokémon", PokemonType.WATER, null, 0.2, 0.3, Abilities.SCHOOLING, Abilities.NONE, Abilities.NONE, 175, 45, 20, 20, 25, 25, 40, 60, 50, 61, GrowthRate.FAST, 50, false, false, - new PokemonForm("Solo Form", "", PokemonType.WATER, null, 0.2, 0.3, Abilities.SCHOOLING, Abilities.NONE, Abilities.NONE, 175, 45, 20, 20, 25, 25, 40, 60, 50, 61, false, null, true), - new PokemonForm("School", "school", PokemonType.WATER, null, 8.2, 78.6, Abilities.SCHOOLING, Abilities.NONE, Abilities.NONE, 620, 45, 140, 130, 140, 135, 30, 60, 50, 217), - ), - new PokemonSpecies(Species.MAREANIE, 7, false, false, false, "Brutal Star Pokémon", PokemonType.POISON, PokemonType.WATER, 0.4, 8, Abilities.MERCILESS, Abilities.LIMBER, Abilities.REGENERATOR, 305, 50, 53, 62, 43, 52, 45, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.TOXAPEX, 7, false, false, false, "Brutal Star Pokémon", PokemonType.POISON, PokemonType.WATER, 0.7, 14.5, Abilities.MERCILESS, Abilities.LIMBER, Abilities.REGENERATOR, 495, 50, 63, 152, 53, 142, 35, 75, 50, 173, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.MUDBRAY, 7, false, false, false, "Donkey Pokémon", PokemonType.GROUND, null, 1, 110, Abilities.OWN_TEMPO, Abilities.STAMINA, Abilities.INNER_FOCUS, 385, 70, 100, 70, 45, 55, 45, 190, 50, 77, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.MUDSDALE, 7, false, false, false, "Draft Horse Pokémon", PokemonType.GROUND, null, 2.5, 920, Abilities.OWN_TEMPO, Abilities.STAMINA, Abilities.INNER_FOCUS, 500, 100, 125, 100, 55, 85, 35, 60, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.DEWPIDER, 7, false, false, false, "Water Bubble Pokémon", PokemonType.WATER, PokemonType.BUG, 0.3, 4, Abilities.WATER_BUBBLE, Abilities.NONE, Abilities.WATER_ABSORB, 269, 38, 40, 52, 40, 72, 27, 200, 50, 54, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.ARAQUANID, 7, false, false, false, "Water Bubble Pokémon", PokemonType.WATER, PokemonType.BUG, 1.8, 82, Abilities.WATER_BUBBLE, Abilities.NONE, Abilities.WATER_ABSORB, 454, 68, 70, 92, 50, 132, 42, 100, 50, 159, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.FOMANTIS, 7, false, false, false, "Sickle Grass Pokémon", PokemonType.GRASS, null, 0.3, 1.5, Abilities.LEAF_GUARD, Abilities.NONE, Abilities.CONTRARY, 250, 40, 55, 35, 50, 35, 35, 190, 50, 50, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.LURANTIS, 7, false, false, false, "Bloom Sickle Pokémon", PokemonType.GRASS, null, 0.9, 18.5, Abilities.LEAF_GUARD, Abilities.NONE, Abilities.CONTRARY, 480, 70, 105, 90, 80, 90, 45, 75, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.MORELULL, 7, false, false, false, "Illuminating Pokémon", PokemonType.GRASS, PokemonType.FAIRY, 0.2, 1.5, Abilities.ILLUMINATE, Abilities.EFFECT_SPORE, Abilities.RAIN_DISH, 285, 40, 35, 55, 65, 75, 15, 190, 50, 57, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.SHIINOTIC, 7, false, false, false, "Illuminating Pokémon", PokemonType.GRASS, PokemonType.FAIRY, 1, 11.5, Abilities.ILLUMINATE, Abilities.EFFECT_SPORE, Abilities.RAIN_DISH, 405, 60, 45, 80, 90, 100, 30, 75, 50, 142, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.SALANDIT, 7, false, false, false, "Toxic Lizard Pokémon", PokemonType.POISON, PokemonType.FIRE, 0.6, 4.8, Abilities.CORROSION, Abilities.NONE, Abilities.OBLIVIOUS, 320, 48, 44, 40, 71, 40, 77, 120, 50, 64, GrowthRate.MEDIUM_FAST, 87.5, false), - new PokemonSpecies(Species.SALAZZLE, 7, false, false, false, "Toxic Lizard Pokémon", PokemonType.POISON, PokemonType.FIRE, 1.2, 22.2, Abilities.CORROSION, Abilities.NONE, Abilities.OBLIVIOUS, 480, 68, 64, 60, 111, 60, 117, 45, 50, 168, GrowthRate.MEDIUM_FAST, 0, false), - new PokemonSpecies(Species.STUFFUL, 7, false, false, false, "Flailing Pokémon", PokemonType.NORMAL, PokemonType.FIGHTING, 0.5, 6.8, Abilities.FLUFFY, Abilities.KLUTZ, Abilities.CUTE_CHARM, 340, 70, 75, 50, 45, 50, 50, 140, 50, 68, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.BEWEAR, 7, false, false, false, "Strong Arm Pokémon", PokemonType.NORMAL, PokemonType.FIGHTING, 2.1, 135, Abilities.FLUFFY, Abilities.KLUTZ, Abilities.UNNERVE, 500, 120, 125, 80, 55, 60, 60, 70, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.BOUNSWEET, 7, false, false, false, "Fruit Pokémon", PokemonType.GRASS, null, 0.3, 3.2, Abilities.LEAF_GUARD, Abilities.OBLIVIOUS, Abilities.SWEET_VEIL, 210, 42, 30, 38, 30, 38, 32, 235, 50, 42, GrowthRate.MEDIUM_SLOW, 0, false), - new PokemonSpecies(Species.STEENEE, 7, false, false, false, "Fruit Pokémon", PokemonType.GRASS, null, 0.7, 8.2, Abilities.LEAF_GUARD, Abilities.OBLIVIOUS, Abilities.SWEET_VEIL, 290, 52, 40, 48, 40, 48, 62, 120, 50, 102, GrowthRate.MEDIUM_SLOW, 0, false), - new PokemonSpecies(Species.TSAREENA, 7, false, false, false, "Fruit Pokémon", PokemonType.GRASS, null, 1.2, 21.4, Abilities.LEAF_GUARD, Abilities.QUEENLY_MAJESTY, Abilities.SWEET_VEIL, 510, 72, 120, 98, 50, 98, 72, 45, 50, 255, GrowthRate.MEDIUM_SLOW, 0, false), - new PokemonSpecies(Species.COMFEY, 7, false, false, false, "Posy Picker Pokémon", PokemonType.FAIRY, null, 0.1, 0.3, Abilities.FLOWER_VEIL, Abilities.TRIAGE, Abilities.NATURAL_CURE, 485, 51, 52, 90, 82, 110, 100, 60, 50, 170, GrowthRate.FAST, 25, false), - new PokemonSpecies(Species.ORANGURU, 7, false, false, false, "Sage Pokémon", PokemonType.NORMAL, PokemonType.PSYCHIC, 1.5, 76, Abilities.INNER_FOCUS, Abilities.TELEPATHY, Abilities.SYMBIOSIS, 490, 90, 60, 80, 90, 110, 60, 45, 50, 172, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.PASSIMIAN, 7, false, false, false, "Teamwork Pokémon", PokemonType.FIGHTING, null, 2, 82.8, Abilities.RECEIVER, Abilities.NONE, Abilities.DEFIANT, 490, 100, 120, 90, 40, 60, 80, 45, 50, 172, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.WIMPOD, 7, false, false, false, "Turn Tail Pokémon", PokemonType.BUG, PokemonType.WATER, 0.5, 12, Abilities.WIMP_OUT, Abilities.NONE, Abilities.RUN_AWAY, 230, 25, 35, 40, 20, 30, 80, 90, 50, 46, GrowthRate.MEDIUM_FAST, 50, false), //Custom Hidden - new PokemonSpecies(Species.GOLISOPOD, 7, false, false, false, "Hard Scale Pokémon", PokemonType.BUG, PokemonType.WATER, 2, 108, Abilities.EMERGENCY_EXIT, Abilities.NONE, Abilities.ANTICIPATION, 530, 75, 125, 140, 60, 90, 40, 45, 50, 186, GrowthRate.MEDIUM_FAST, 50, false), //Custom Hidden - new PokemonSpecies(Species.SANDYGAST, 7, false, false, false, "Sand Heap Pokémon", PokemonType.GHOST, PokemonType.GROUND, 0.5, 70, Abilities.WATER_COMPACTION, Abilities.NONE, Abilities.SAND_VEIL, 320, 55, 55, 80, 70, 45, 15, 140, 50, 64, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.PALOSSAND, 7, false, false, false, "Sand Castle Pokémon", PokemonType.GHOST, PokemonType.GROUND, 1.3, 250, Abilities.WATER_COMPACTION, Abilities.NONE, Abilities.SAND_VEIL, 480, 85, 75, 110, 100, 75, 35, 60, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.PYUKUMUKU, 7, false, false, false, "Sea Cucumber Pokémon", PokemonType.WATER, null, 0.3, 1.2, Abilities.INNARDS_OUT, Abilities.NONE, Abilities.UNAWARE, 410, 55, 60, 130, 30, 130, 5, 60, 50, 144, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.TYPE_NULL, 7, true, false, false, "Synthetic Pokémon", PokemonType.NORMAL, null, 1.9, 120.5, Abilities.BATTLE_ARMOR, Abilities.NONE, Abilities.NONE, 534, 95, 95, 95, 95, 95, 59, 3, 0, 107, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.SILVALLY, 7, true, false, false, "Synthetic Pokémon", PokemonType.NORMAL, null, 2.3, 100.5, Abilities.RKS_SYSTEM, Abilities.NONE, Abilities.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285, GrowthRate.SLOW, null, false, false, - new PokemonForm("Type: Normal", "normal", PokemonType.NORMAL, null, 2.3, 100.5, Abilities.RKS_SYSTEM, Abilities.NONE, Abilities.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285, false, "", true), - new PokemonForm("Type: Fighting", "fighting", PokemonType.FIGHTING, null, 2.3, 100.5, Abilities.RKS_SYSTEM, Abilities.NONE, Abilities.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Flying", "flying", PokemonType.FLYING, null, 2.3, 100.5, Abilities.RKS_SYSTEM, Abilities.NONE, Abilities.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Poison", "poison", PokemonType.POISON, null, 2.3, 100.5, Abilities.RKS_SYSTEM, Abilities.NONE, Abilities.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Ground", "ground", PokemonType.GROUND, null, 2.3, 100.5, Abilities.RKS_SYSTEM, Abilities.NONE, Abilities.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Rock", "rock", PokemonType.ROCK, null, 2.3, 100.5, Abilities.RKS_SYSTEM, Abilities.NONE, Abilities.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Bug", "bug", PokemonType.BUG, null, 2.3, 100.5, Abilities.RKS_SYSTEM, Abilities.NONE, Abilities.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Ghost", "ghost", PokemonType.GHOST, null, 2.3, 100.5, Abilities.RKS_SYSTEM, Abilities.NONE, Abilities.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Steel", "steel", PokemonType.STEEL, null, 2.3, 100.5, Abilities.RKS_SYSTEM, Abilities.NONE, Abilities.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Fire", "fire", PokemonType.FIRE, null, 2.3, 100.5, Abilities.RKS_SYSTEM, Abilities.NONE, Abilities.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Water", "water", PokemonType.WATER, null, 2.3, 100.5, Abilities.RKS_SYSTEM, Abilities.NONE, Abilities.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Grass", "grass", PokemonType.GRASS, null, 2.3, 100.5, Abilities.RKS_SYSTEM, Abilities.NONE, Abilities.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Electric", "electric", PokemonType.ELECTRIC, null, 2.3, 100.5, Abilities.RKS_SYSTEM, Abilities.NONE, Abilities.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Psychic", "psychic", PokemonType.PSYCHIC, null, 2.3, 100.5, Abilities.RKS_SYSTEM, Abilities.NONE, Abilities.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Ice", "ice", PokemonType.ICE, null, 2.3, 100.5, Abilities.RKS_SYSTEM, Abilities.NONE, Abilities.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Dragon", "dragon", PokemonType.DRAGON, null, 2.3, 100.5, Abilities.RKS_SYSTEM, Abilities.NONE, Abilities.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Dark", "dark", PokemonType.DARK, null, 2.3, 100.5, Abilities.RKS_SYSTEM, Abilities.NONE, Abilities.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - new PokemonForm("Type: Fairy", "fairy", PokemonType.FAIRY, null, 2.3, 100.5, Abilities.RKS_SYSTEM, Abilities.NONE, Abilities.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), - ), - new PokemonSpecies(Species.MINIOR, 7, false, false, false, "Meteor Pokémon", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, GrowthRate.MEDIUM_SLOW, null, false, false, - new PokemonForm("Red Meteor Form", "red-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, "", true), - new PokemonForm("Orange Meteor Form", "orange-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, "", true), - new PokemonForm("Yellow Meteor Form", "yellow-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, "", true), - new PokemonForm("Green Meteor Form", "green-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, "", true), - new PokemonForm("Blue Meteor Form", "blue-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, "", true), - new PokemonForm("Indigo Meteor Form", "indigo-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, "", true), - new PokemonForm("Violet Meteor Form", "violet-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, "", true), - new PokemonForm("Red Core Form", "red", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), - new PokemonForm("Orange Core Form", "orange", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), - new PokemonForm("Yellow Core Form", "yellow", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), - new PokemonForm("Green Core Form", "green", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), - new PokemonForm("Blue Core Form", "blue", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), - new PokemonForm("Indigo Core Form", "indigo", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), - new PokemonForm("Violet Core Form", "violet", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), - ), - new PokemonSpecies(Species.KOMALA, 7, false, false, false, "Drowsing Pokémon", PokemonType.NORMAL, null, 0.4, 19.9, Abilities.COMATOSE, Abilities.NONE, Abilities.NONE, 480, 65, 115, 65, 75, 95, 65, 45, 70, 168, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.TURTONATOR, 7, false, false, false, "Blast Turtle Pokémon", PokemonType.FIRE, PokemonType.DRAGON, 2, 212, Abilities.SHELL_ARMOR, Abilities.NONE, Abilities.NONE, 485, 60, 78, 135, 91, 85, 36, 70, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.TOGEDEMARU, 7, false, false, false, "Roly-Poly Pokémon", PokemonType.ELECTRIC, PokemonType.STEEL, 0.3, 3.3, Abilities.IRON_BARBS, Abilities.LIGHTNING_ROD, Abilities.STURDY, 435, 65, 98, 63, 40, 73, 96, 180, 50, 152, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.MIMIKYU, 7, false, false, false, "Disguise Pokémon", PokemonType.GHOST, PokemonType.FAIRY, 0.2, 0.7, Abilities.DISGUISE, Abilities.NONE, Abilities.NONE, 476, 55, 90, 80, 50, 105, 96, 45, 50, 167, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Disguised Form", "disguised", PokemonType.GHOST, PokemonType.FAIRY, 0.2, 0.7, Abilities.DISGUISE, Abilities.NONE, Abilities.NONE, 476, 55, 90, 80, 50, 105, 96, 45, 50, 167, false, null, true), - new PokemonForm("Busted Form", "busted", PokemonType.GHOST, PokemonType.FAIRY, 0.2, 0.7, Abilities.DISGUISE, Abilities.NONE, Abilities.NONE, 476, 55, 90, 80, 50, 105, 96, 45, 50, 167), - ), - new PokemonSpecies(Species.BRUXISH, 7, false, false, false, "Gnash Teeth Pokémon", PokemonType.WATER, PokemonType.PSYCHIC, 0.9, 19, Abilities.DAZZLING, Abilities.STRONG_JAW, Abilities.WONDER_SKIN, 475, 68, 105, 70, 70, 70, 92, 80, 70, 166, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.DRAMPA, 7, false, false, false, "Placid Pokémon", PokemonType.NORMAL, PokemonType.DRAGON, 3, 185, Abilities.BERSERK, Abilities.SAP_SIPPER, Abilities.CLOUD_NINE, 485, 78, 60, 85, 135, 91, 36, 70, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.DHELMISE, 7, false, false, false, "Sea Creeper Pokémon", PokemonType.GHOST, PokemonType.GRASS, 3.9, 210, Abilities.STEELWORKER, Abilities.NONE, Abilities.NONE, 517, 70, 131, 100, 86, 90, 40, 25, 50, 181, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(Species.JANGMO_O, 7, false, false, false, "Scaly Pokémon", PokemonType.DRAGON, null, 0.6, 29.7, Abilities.BULLETPROOF, Abilities.SOUNDPROOF, Abilities.OVERCOAT, 300, 45, 55, 65, 45, 45, 45, 45, 50, 60, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.HAKAMO_O, 7, false, false, false, "Scaly Pokémon", PokemonType.DRAGON, PokemonType.FIGHTING, 1.2, 47, Abilities.BULLETPROOF, Abilities.SOUNDPROOF, Abilities.OVERCOAT, 420, 55, 75, 90, 65, 70, 65, 45, 50, 147, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.KOMMO_O, 7, false, false, false, "Scaly Pokémon", PokemonType.DRAGON, PokemonType.FIGHTING, 1.6, 78.2, Abilities.BULLETPROOF, Abilities.SOUNDPROOF, Abilities.OVERCOAT, 600, 75, 110, 125, 100, 105, 85, 45, 50, 300, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.TAPU_KOKO, 7, true, false, false, "Land Spirit Pokémon", PokemonType.ELECTRIC, PokemonType.FAIRY, 1.8, 20.5, Abilities.ELECTRIC_SURGE, Abilities.NONE, Abilities.TELEPATHY, 570, 70, 115, 85, 95, 75, 130, 3, 50, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.TAPU_LELE, 7, true, false, false, "Land Spirit Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 1.2, 18.6, Abilities.PSYCHIC_SURGE, Abilities.NONE, Abilities.TELEPATHY, 570, 70, 85, 75, 130, 115, 95, 3, 50, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.TAPU_BULU, 7, true, false, false, "Land Spirit Pokémon", PokemonType.GRASS, PokemonType.FAIRY, 1.9, 45.5, Abilities.GRASSY_SURGE, Abilities.NONE, Abilities.TELEPATHY, 570, 70, 130, 115, 85, 95, 75, 3, 50, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.TAPU_FINI, 7, true, false, false, "Land Spirit Pokémon", PokemonType.WATER, PokemonType.FAIRY, 1.3, 21.2, Abilities.MISTY_SURGE, Abilities.NONE, Abilities.TELEPATHY, 570, 70, 75, 115, 95, 130, 85, 3, 50, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.COSMOG, 7, true, false, false, "Nebula Pokémon", PokemonType.PSYCHIC, null, 0.2, 0.1, Abilities.UNAWARE, Abilities.NONE, Abilities.NONE, 200, 43, 29, 31, 29, 31, 37, 45, 0, 40, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.COSMOEM, 7, true, false, false, "Protostar Pokémon", PokemonType.PSYCHIC, null, 0.1, 999.9, Abilities.STURDY, Abilities.NONE, Abilities.NONE, 400, 43, 29, 131, 29, 131, 37, 45, 0, 140, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.SOLGALEO, 7, false, true, false, "Sunne Pokémon", PokemonType.PSYCHIC, PokemonType.STEEL, 3.4, 230, Abilities.FULL_METAL_BODY, Abilities.NONE, Abilities.NONE, 680, 137, 137, 107, 113, 89, 97, 45, 0, 340, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.LUNALA, 7, false, true, false, "Moone Pokémon", PokemonType.PSYCHIC, PokemonType.GHOST, 4, 120, Abilities.SHADOW_SHIELD, Abilities.NONE, Abilities.NONE, 680, 137, 113, 89, 137, 107, 97, 45, 0, 340, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.NIHILEGO, 7, true, false, false, "Parasite Pokémon", PokemonType.ROCK, PokemonType.POISON, 1.2, 55.5, Abilities.BEAST_BOOST, Abilities.NONE, Abilities.NONE, 570, 109, 53, 47, 127, 131, 103, 45, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.BUZZWOLE, 7, true, false, false, "Swollen Pokémon", PokemonType.BUG, PokemonType.FIGHTING, 2.4, 333.6, Abilities.BEAST_BOOST, Abilities.NONE, Abilities.NONE, 570, 107, 139, 139, 53, 53, 79, 45, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.PHEROMOSA, 7, true, false, false, "Lissome Pokémon", PokemonType.BUG, PokemonType.FIGHTING, 1.8, 25, Abilities.BEAST_BOOST, Abilities.NONE, Abilities.NONE, 570, 71, 137, 37, 137, 37, 151, 45, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.XURKITREE, 7, true, false, false, "Glowing Pokémon", PokemonType.ELECTRIC, null, 3.8, 100, Abilities.BEAST_BOOST, Abilities.NONE, Abilities.NONE, 570, 83, 89, 71, 173, 71, 83, 45, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.CELESTEELA, 7, true, false, false, "Launch Pokémon", PokemonType.STEEL, PokemonType.FLYING, 9.2, 999.9, Abilities.BEAST_BOOST, Abilities.NONE, Abilities.NONE, 570, 97, 101, 103, 107, 101, 61, 45, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.KARTANA, 7, true, false, false, "Drawn Sword Pokémon", PokemonType.GRASS, PokemonType.STEEL, 0.3, 0.1, Abilities.BEAST_BOOST, Abilities.NONE, Abilities.NONE, 570, 59, 181, 131, 59, 31, 109, 45, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.GUZZLORD, 7, true, false, false, "Junkivore Pokémon", PokemonType.DARK, PokemonType.DRAGON, 5.5, 888, Abilities.BEAST_BOOST, Abilities.NONE, Abilities.NONE, 570, 223, 101, 53, 97, 53, 43, 45, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.NECROZMA, 7, false, true, false, "Prism Pokémon", PokemonType.PSYCHIC, null, 2.4, 230, Abilities.PRISM_ARMOR, Abilities.NONE, Abilities.NONE, 600, 97, 107, 101, 127, 89, 79, 255, 0, 300, GrowthRate.SLOW, null, false, false, - new PokemonForm("Normal", "", PokemonType.PSYCHIC, null, 2.4, 230, Abilities.PRISM_ARMOR, Abilities.NONE, Abilities.NONE, 600, 97, 107, 101, 127, 89, 79, 255, 0, 300, false, null, true), - new PokemonForm("Dusk Mane", "dusk-mane", PokemonType.PSYCHIC, PokemonType.STEEL, 3.8, 460, Abilities.PRISM_ARMOR, Abilities.NONE, Abilities.NONE, 680, 97, 157, 127, 113, 109, 77, 255, 0, 340), - new PokemonForm("Dawn Wings", "dawn-wings", PokemonType.PSYCHIC, PokemonType.GHOST, 4.2, 350, Abilities.PRISM_ARMOR, Abilities.NONE, Abilities.NONE, 680, 97, 113, 109, 157, 127, 77, 255, 0, 340), - new PokemonForm("Ultra", "ultra", PokemonType.PSYCHIC, PokemonType.DRAGON, 7.5, 230, Abilities.NEUROFORCE, Abilities.NONE, Abilities.NONE, 754, 97, 167, 97, 167, 97, 129, 255, 0, 377), - ), - new PokemonSpecies(Species.MAGEARNA, 7, false, false, true, "Artificial Pokémon", PokemonType.STEEL, PokemonType.FAIRY, 1, 80.5, Abilities.SOUL_HEART, Abilities.NONE, Abilities.NONE, 600, 80, 95, 115, 130, 115, 65, 3, 0, 300, GrowthRate.SLOW, null, false, false, - new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.FAIRY, 1, 80.5, Abilities.SOUL_HEART, Abilities.NONE, Abilities.NONE, 600, 80, 95, 115, 130, 115, 65, 3, 0, 300, false, null, true), - new PokemonForm("Original", "original", PokemonType.STEEL, PokemonType.FAIRY, 1, 80.5, Abilities.SOUL_HEART, Abilities.NONE, Abilities.NONE, 600, 80, 95, 115, 130, 115, 65, 3, 0, 300, false, null, true), - ), - new PokemonSpecies(Species.MARSHADOW, 7, false, false, true, "Gloomdweller Pokémon", PokemonType.FIGHTING, PokemonType.GHOST, 0.7, 22.2, Abilities.TECHNICIAN, Abilities.NONE, Abilities.NONE, 600, 90, 125, 80, 90, 90, 125, 3, 0, 300, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal", "", PokemonType.FIGHTING, PokemonType.GHOST, 0.7, 22.2, Abilities.TECHNICIAN, Abilities.NONE, Abilities.NONE, 600, 90, 125, 80, 90, 90, 125, 3, 0, 300, false, null, true), - new PokemonForm("Zenith", "zenith", PokemonType.FIGHTING, PokemonType.GHOST, 0.7, 22.2, Abilities.TECHNICIAN, Abilities.NONE, Abilities.NONE, 600, 90, 125, 80, 90, 90, 125, 3, 0, 300, false, null, false, true) - ), - new PokemonSpecies(Species.POIPOLE, 7, true, false, false, "Poison Pin Pokémon", PokemonType.POISON, null, 0.6, 1.8, Abilities.BEAST_BOOST, Abilities.NONE, Abilities.NONE, 420, 67, 73, 67, 73, 67, 73, 45, 0, 210, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.NAGANADEL, 7, true, false, false, "Poison Pin Pokémon", PokemonType.POISON, PokemonType.DRAGON, 3.6, 150, Abilities.BEAST_BOOST, Abilities.NONE, Abilities.NONE, 540, 73, 73, 73, 127, 73, 121, 45, 0, 270, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.STAKATAKA, 7, true, false, false, "Rampart Pokémon", PokemonType.ROCK, PokemonType.STEEL, 5.5, 820, Abilities.BEAST_BOOST, Abilities.NONE, Abilities.NONE, 570, 61, 131, 211, 53, 101, 13, 30, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.BLACEPHALON, 7, true, false, false, "Fireworks Pokémon", PokemonType.FIRE, PokemonType.GHOST, 1.8, 13, Abilities.BEAST_BOOST, Abilities.NONE, Abilities.NONE, 570, 53, 127, 53, 151, 79, 107, 30, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.ZERAORA, 7, false, false, true, "Thunderclap Pokémon", PokemonType.ELECTRIC, null, 1.5, 44.5, Abilities.VOLT_ABSORB, Abilities.NONE, Abilities.NONE, 600, 88, 112, 75, 102, 80, 143, 3, 0, 300, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.MELTAN, 7, false, false, true, "Hex Nut Pokémon", PokemonType.STEEL, null, 0.2, 8, Abilities.MAGNET_PULL, Abilities.NONE, Abilities.NONE, 300, 46, 65, 65, 55, 35, 34, 3, 0, 150, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.MELMETAL, 7, false, false, true, "Hex Nut Pokémon", PokemonType.STEEL, null, 2.5, 800, Abilities.IRON_FIST, Abilities.NONE, Abilities.NONE, 600, 135, 143, 143, 80, 65, 34, 3, 0, 300, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal", "", PokemonType.STEEL, null, 2.5, 800, Abilities.IRON_FIST, Abilities.NONE, Abilities.NONE, 600, 135, 143, 143, 80, 65, 34, 3, 0, 300, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.STEEL, null, 25, 999.9, Abilities.IRON_FIST, Abilities.NONE, Abilities.NONE, 700, 170, 158, 158, 95, 75, 44, 3, 0, 300), - ), - new PokemonSpecies(Species.GROOKEY, 8, false, false, false, "Chimp Pokémon", PokemonType.GRASS, null, 0.3, 5, Abilities.OVERGROW, Abilities.NONE, Abilities.GRASSY_SURGE, 310, 50, 65, 50, 40, 40, 65, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.THWACKEY, 8, false, false, false, "Beat Pokémon", PokemonType.GRASS, null, 0.7, 14, Abilities.OVERGROW, Abilities.NONE, Abilities.GRASSY_SURGE, 420, 70, 85, 70, 55, 60, 80, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.RILLABOOM, 8, false, false, false, "Drummer Pokémon", PokemonType.GRASS, null, 2.1, 90, Abilities.OVERGROW, Abilities.NONE, Abilities.GRASSY_SURGE, 530, 100, 125, 90, 60, 70, 85, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, - new PokemonForm("Normal", "", PokemonType.GRASS, null, 2.1, 90, Abilities.OVERGROW, Abilities.NONE, Abilities.GRASSY_SURGE, 530, 100, 125, 90, 60, 70, 85, 45, 50, 265, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GRASS, null, 28, 999.9, Abilities.GRASSY_SURGE, Abilities.NONE, Abilities.GRASSY_SURGE, 630, 125, 140, 105, 90, 85, 85, 45, 50, 265), - ), - new PokemonSpecies(Species.SCORBUNNY, 8, false, false, false, "Rabbit Pokémon", PokemonType.FIRE, null, 0.3, 4.5, Abilities.BLAZE, Abilities.NONE, Abilities.LIBERO, 310, 50, 71, 40, 40, 40, 69, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.RABOOT, 8, false, false, false, "Rabbit Pokémon", PokemonType.FIRE, null, 0.6, 9, Abilities.BLAZE, Abilities.NONE, Abilities.LIBERO, 420, 65, 86, 60, 55, 60, 94, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.CINDERACE, 8, false, false, false, "Striker Pokémon", PokemonType.FIRE, null, 1.4, 33, Abilities.BLAZE, Abilities.NONE, Abilities.LIBERO, 530, 80, 116, 75, 65, 75, 119, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, - new PokemonForm("Normal", "", PokemonType.FIRE, null, 1.4, 33, Abilities.BLAZE, Abilities.NONE, Abilities.LIBERO, 530, 80, 116, 75, 65, 75, 119, 45, 50, 265, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FIRE, null, 27, 999.9, Abilities.LIBERO, Abilities.NONE, Abilities.LIBERO, 630, 100, 141, 80, 95, 80, 134, 45, 50, 265), - ), - new PokemonSpecies(Species.SOBBLE, 8, false, false, false, "Water Lizard Pokémon", PokemonType.WATER, null, 0.3, 4, Abilities.TORRENT, Abilities.NONE, Abilities.SNIPER, 310, 50, 40, 40, 70, 40, 70, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.DRIZZILE, 8, false, false, false, "Water Lizard Pokémon", PokemonType.WATER, null, 0.7, 11.5, Abilities.TORRENT, Abilities.NONE, Abilities.SNIPER, 420, 65, 60, 55, 95, 55, 90, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.INTELEON, 8, false, false, false, "Secret Agent Pokémon", PokemonType.WATER, null, 1.9, 45.2, Abilities.TORRENT, Abilities.NONE, Abilities.SNIPER, 530, 70, 85, 65, 125, 65, 120, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, - new PokemonForm("Normal", "", PokemonType.WATER, null, 1.9, 45.2, Abilities.TORRENT, Abilities.NONE, Abilities.SNIPER, 530, 70, 85, 65, 125, 65, 120, 45, 50, 265, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, null, 40, 999.9, Abilities.SNIPER, Abilities.NONE, Abilities.SNIPER, 630, 95, 117, 67, 147, 67, 137, 45, 50, 265), - ), - new PokemonSpecies(Species.SKWOVET, 8, false, false, false, "Cheeky Pokémon", PokemonType.NORMAL, null, 0.3, 2.5, Abilities.CHEEK_POUCH, Abilities.NONE, Abilities.GLUTTONY, 275, 70, 55, 55, 35, 35, 25, 255, 50, 55, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.GREEDENT, 8, false, false, false, "Greedy Pokémon", PokemonType.NORMAL, null, 0.6, 6, Abilities.CHEEK_POUCH, Abilities.NONE, Abilities.GLUTTONY, 460, 120, 95, 95, 55, 75, 20, 90, 50, 161, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.ROOKIDEE, 8, false, false, false, "Tiny Bird Pokémon", PokemonType.FLYING, null, 0.2, 1.8, Abilities.KEEN_EYE, Abilities.UNNERVE, Abilities.BIG_PECKS, 245, 38, 47, 35, 33, 35, 57, 255, 50, 49, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.CORVISQUIRE, 8, false, false, false, "Raven Pokémon", PokemonType.FLYING, null, 0.8, 16, Abilities.KEEN_EYE, Abilities.UNNERVE, Abilities.BIG_PECKS, 365, 68, 67, 55, 43, 55, 77, 120, 50, 128, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.CORVIKNIGHT, 8, false, false, false, "Raven Pokémon", PokemonType.FLYING, PokemonType.STEEL, 2.2, 75, Abilities.PRESSURE, Abilities.UNNERVE, Abilities.MIRROR_ARMOR, 495, 98, 87, 105, 53, 85, 67, 45, 50, 248, GrowthRate.MEDIUM_SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.FLYING, PokemonType.STEEL, 2.2, 75, Abilities.PRESSURE, Abilities.UNNERVE, Abilities.MIRROR_ARMOR, 495, 98, 87, 105, 53, 85, 67, 45, 50, 248, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FLYING, PokemonType.STEEL, 14, 999.9, Abilities.MIRROR_ARMOR, Abilities.MIRROR_ARMOR, Abilities.MIRROR_ARMOR, 595, 118, 112, 135, 63, 90, 77, 45, 50, 248), - ), - new PokemonSpecies(Species.BLIPBUG, 8, false, false, false, "Larva Pokémon", PokemonType.BUG, null, 0.4, 8, Abilities.SWARM, Abilities.COMPOUND_EYES, Abilities.TELEPATHY, 180, 25, 20, 20, 25, 45, 45, 255, 50, 36, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.DOTTLER, 8, false, false, false, "Radome Pokémon", PokemonType.BUG, PokemonType.PSYCHIC, 0.4, 19.5, Abilities.SWARM, Abilities.COMPOUND_EYES, Abilities.TELEPATHY, 335, 50, 35, 80, 50, 90, 30, 120, 50, 117, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.ORBEETLE, 8, false, false, false, "Seven Spot Pokémon", PokemonType.BUG, PokemonType.PSYCHIC, 0.4, 40.8, Abilities.SWARM, Abilities.FRISK, Abilities.TELEPATHY, 505, 60, 45, 110, 80, 120, 90, 45, 50, 253, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.BUG, PokemonType.PSYCHIC, 0.4, 40.8, Abilities.SWARM, Abilities.FRISK, Abilities.TELEPATHY, 505, 60, 45, 110, 80, 120, 90, 45, 50, 253, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.BUG, PokemonType.PSYCHIC, 14, 999.9, Abilities.TRACE, Abilities.TRACE, Abilities.TRACE, 605, 75, 50, 140, 100, 150, 90, 45, 50, 253), - ), - new PokemonSpecies(Species.NICKIT, 8, false, false, false, "Fox Pokémon", PokemonType.DARK, null, 0.6, 8.9, Abilities.RUN_AWAY, Abilities.UNBURDEN, Abilities.STAKEOUT, 245, 40, 28, 28, 47, 52, 50, 255, 50, 49, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.THIEVUL, 8, false, false, false, "Fox Pokémon", PokemonType.DARK, null, 1.2, 19.9, Abilities.RUN_AWAY, Abilities.UNBURDEN, Abilities.STAKEOUT, 455, 70, 58, 58, 87, 92, 90, 127, 50, 159, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.GOSSIFLEUR, 8, false, false, false, "Flowering Pokémon", PokemonType.GRASS, null, 0.4, 2.2, Abilities.COTTON_DOWN, Abilities.REGENERATOR, Abilities.EFFECT_SPORE, 250, 40, 40, 60, 40, 60, 10, 190, 50, 50, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.ELDEGOSS, 8, false, false, false, "Cotton Bloom Pokémon", PokemonType.GRASS, null, 0.5, 2.5, Abilities.COTTON_DOWN, Abilities.REGENERATOR, Abilities.EFFECT_SPORE, 460, 60, 50, 90, 80, 120, 60, 75, 50, 161, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.WOOLOO, 8, false, false, false, "Sheep Pokémon", PokemonType.NORMAL, null, 0.6, 6, Abilities.FLUFFY, Abilities.RUN_AWAY, Abilities.BULLETPROOF, 270, 42, 40, 55, 40, 45, 48, 255, 50, 122, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.DUBWOOL, 8, false, false, false, "Sheep Pokémon", PokemonType.NORMAL, null, 1.3, 43, Abilities.FLUFFY, Abilities.STEADFAST, Abilities.BULLETPROOF, 490, 72, 80, 100, 60, 90, 88, 127, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.CHEWTLE, 8, false, false, false, "Snapping Pokémon", PokemonType.WATER, null, 0.3, 8.5, Abilities.STRONG_JAW, Abilities.SHELL_ARMOR, Abilities.SWIFT_SWIM, 284, 50, 64, 50, 38, 38, 44, 255, 50, 57, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.DREDNAW, 8, false, false, false, "Bite Pokémon", PokemonType.WATER, PokemonType.ROCK, 1, 115.5, Abilities.STRONG_JAW, Abilities.SHELL_ARMOR, Abilities.SWIFT_SWIM, 485, 90, 115, 90, 48, 68, 74, 75, 50, 170, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.ROCK, 1, 115.5, Abilities.STRONG_JAW, Abilities.SHELL_ARMOR, Abilities.SWIFT_SWIM, 485, 90, 115, 90, 48, 68, 74, 75, 50, 170, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, PokemonType.ROCK, 24, 999.9, Abilities.STRONG_JAW, Abilities.STRONG_JAW, Abilities.STRONG_JAW, 585, 115, 137, 115, 61, 83, 74, 75, 50, 170), - ), - new PokemonSpecies(Species.YAMPER, 8, false, false, false, "Puppy Pokémon", PokemonType.ELECTRIC, null, 0.3, 13.5, Abilities.BALL_FETCH, Abilities.NONE, Abilities.RATTLED, 270, 59, 45, 50, 40, 50, 26, 255, 50, 54, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.BOLTUND, 8, false, false, false, "Dog Pokémon", PokemonType.ELECTRIC, null, 1, 34, Abilities.STRONG_JAW, Abilities.NONE, Abilities.COMPETITIVE, 490, 69, 90, 60, 90, 60, 121, 45, 50, 172, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.ROLYCOLY, 8, false, false, false, "Coal Pokémon", PokemonType.ROCK, null, 0.3, 12, Abilities.STEAM_ENGINE, Abilities.HEATPROOF, Abilities.FLASH_FIRE, 240, 30, 40, 50, 40, 50, 30, 255, 50, 48, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.CARKOL, 8, false, false, false, "Coal Pokémon", PokemonType.ROCK, PokemonType.FIRE, 1.1, 78, Abilities.STEAM_ENGINE, Abilities.FLAME_BODY, Abilities.FLASH_FIRE, 410, 80, 60, 90, 60, 70, 50, 120, 50, 144, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.COALOSSAL, 8, false, false, false, "Coal Pokémon", PokemonType.ROCK, PokemonType.FIRE, 2.8, 310.5, Abilities.STEAM_ENGINE, Abilities.FLAME_BODY, Abilities.FLASH_FIRE, 510, 110, 80, 120, 80, 90, 30, 45, 50, 255, GrowthRate.MEDIUM_SLOW, 50, false, true, - new PokemonForm("Normal", "", PokemonType.ROCK, PokemonType.FIRE, 2.8, 310.5, Abilities.STEAM_ENGINE, Abilities.FLAME_BODY, Abilities.FLASH_FIRE, 510, 110, 80, 120, 80, 90, 30, 45, 50, 255, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.ROCK, PokemonType.FIRE, 42, 999.9, Abilities.STEAM_ENGINE, Abilities.STEAM_ENGINE, Abilities.STEAM_ENGINE, 610, 140, 100, 132, 95, 100, 43, 45, 50, 255), - ), - new PokemonSpecies(Species.APPLIN, 8, false, false, false, "Apple Core Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 0.2, 0.5, Abilities.RIPEN, Abilities.GLUTTONY, Abilities.BULLETPROOF, 260, 40, 40, 80, 40, 40, 20, 255, 50, 52, GrowthRate.ERRATIC, 50, false), - new PokemonSpecies(Species.FLAPPLE, 8, false, false, false, "Apple Wing Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 0.3, 1, Abilities.RIPEN, Abilities.GLUTTONY, Abilities.HUSTLE, 485, 70, 110, 80, 95, 60, 70, 45, 50, 170, GrowthRate.ERRATIC, 50, false, true, - new PokemonForm("Normal", "", PokemonType.GRASS, PokemonType.DRAGON, 0.3, 1, Abilities.RIPEN, Abilities.GLUTTONY, Abilities.HUSTLE, 485, 70, 110, 80, 95, 60, 70, 45, 50, 170, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GRASS, PokemonType.DRAGON, 24, 999.9, Abilities.HUSTLE, Abilities.HUSTLE, Abilities.HUSTLE, 585, 100, 125, 90, 105, 70, 95, 45, 50, 170), - ), - new PokemonSpecies(Species.APPLETUN, 8, false, false, false, "Apple Nectar Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 0.4, 13, Abilities.RIPEN, Abilities.GLUTTONY, Abilities.THICK_FAT, 485, 110, 85, 80, 100, 80, 30, 45, 50, 170, GrowthRate.ERRATIC, 50, false, true, - new PokemonForm("Normal", "", PokemonType.GRASS, PokemonType.DRAGON, 0.4, 13, Abilities.RIPEN, Abilities.GLUTTONY, Abilities.THICK_FAT, 485, 110, 85, 80, 100, 80, 30, 45, 50, 170, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GRASS, PokemonType.DRAGON, 24, 999.9, Abilities.THICK_FAT, Abilities.THICK_FAT, Abilities.THICK_FAT, 585, 150, 100, 95, 115, 95, 30, 45, 50, 170), - ), - new PokemonSpecies(Species.SILICOBRA, 8, false, false, false, "Sand Snake Pokémon", PokemonType.GROUND, null, 2.2, 7.6, Abilities.SAND_SPIT, Abilities.SHED_SKIN, Abilities.SAND_VEIL, 315, 52, 57, 75, 35, 50, 46, 255, 50, 63, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.SANDACONDA, 8, false, false, false, "Sand Snake Pokémon", PokemonType.GROUND, null, 3.8, 65.5, Abilities.SAND_SPIT, Abilities.SHED_SKIN, Abilities.SAND_VEIL, 510, 72, 107, 125, 65, 70, 71, 120, 50, 179, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.GROUND, null, 3.8, 65.5, Abilities.SAND_SPIT, Abilities.SHED_SKIN, Abilities.SAND_VEIL, 510, 72, 107, 125, 65, 70, 71, 120, 50, 179, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GROUND, null, 22, 999.9, Abilities.SAND_SPIT, Abilities.SAND_SPIT, Abilities.SAND_SPIT, 610, 102, 137, 140, 70, 80, 81, 120, 50, 179), - ), - new PokemonSpecies(Species.CRAMORANT, 8, false, false, false, "Gulp Pokémon", PokemonType.FLYING, PokemonType.WATER, 0.8, 18, Abilities.GULP_MISSILE, Abilities.NONE, Abilities.NONE, 475, 70, 85, 55, 85, 95, 85, 45, 50, 166, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Normal", "", PokemonType.FLYING, PokemonType.WATER, 0.8, 18, Abilities.GULP_MISSILE, Abilities.NONE, Abilities.NONE, 475, 70, 85, 55, 85, 95, 85, 45, 50, 166, false, null, true), - new PokemonForm("Gulping Form", "gulping", PokemonType.FLYING, PokemonType.WATER, 0.8, 18, Abilities.GULP_MISSILE, Abilities.NONE, Abilities.NONE, 475, 70, 85, 55, 85, 95, 85, 45, 50, 166), - new PokemonForm("Gorging Form", "gorging", PokemonType.FLYING, PokemonType.WATER, 0.8, 18, Abilities.GULP_MISSILE, Abilities.NONE, Abilities.NONE, 475, 70, 85, 55, 85, 95, 85, 45, 50, 166), - ), - new PokemonSpecies(Species.ARROKUDA, 8, false, false, false, "Rush Pokémon", PokemonType.WATER, null, 0.5, 1, Abilities.SWIFT_SWIM, Abilities.NONE, Abilities.PROPELLER_TAIL, 280, 41, 63, 40, 40, 30, 66, 255, 50, 56, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.BARRASKEWDA, 8, false, false, false, "Skewer Pokémon", PokemonType.WATER, null, 1.3, 30, Abilities.SWIFT_SWIM, Abilities.NONE, Abilities.PROPELLER_TAIL, 490, 61, 123, 60, 60, 50, 136, 60, 50, 172, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.TOXEL, 8, false, false, false, "Baby Pokémon", PokemonType.ELECTRIC, PokemonType.POISON, 0.4, 11, Abilities.RATTLED, Abilities.STATIC, Abilities.KLUTZ, 242, 40, 38, 35, 54, 35, 40, 75, 50, 48, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.TOXTRICITY, 8, false, false, false, "Punk Pokémon", PokemonType.ELECTRIC, PokemonType.POISON, 1.6, 40, Abilities.PUNK_ROCK, Abilities.PLUS, Abilities.TECHNICIAN, 502, 75, 98, 70, 114, 70, 75, 45, 50, 176, GrowthRate.MEDIUM_SLOW, 50, false, true, - new PokemonForm("Amped Form", "amped", PokemonType.ELECTRIC, PokemonType.POISON, 1.6, 40, Abilities.PUNK_ROCK, Abilities.PLUS, Abilities.TECHNICIAN, 502, 75, 98, 70, 114, 70, 75, 45, 50, 176, false, "", true), - new PokemonForm("Low-Key Form", "lowkey", PokemonType.ELECTRIC, PokemonType.POISON, 1.6, 40, Abilities.PUNK_ROCK, Abilities.MINUS, Abilities.TECHNICIAN, 502, 75, 98, 70, 114, 70, 75, 45, 50, 176, false, "lowkey", true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.ELECTRIC, PokemonType.POISON, 24, 999.9, Abilities.PUNK_ROCK, Abilities.PUNK_ROCK, Abilities.PUNK_ROCK, 602, 114, 105, 82, 137, 82, 82, 45, 50, 176), - ), - new PokemonSpecies(Species.SIZZLIPEDE, 8, false, false, false, "Radiator Pokémon", PokemonType.FIRE, PokemonType.BUG, 0.7, 1, Abilities.FLASH_FIRE, Abilities.WHITE_SMOKE, Abilities.FLAME_BODY, 305, 50, 65, 45, 50, 50, 45, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.CENTISKORCH, 8, false, false, false, "Radiator Pokémon", PokemonType.FIRE, PokemonType.BUG, 3, 120, Abilities.FLASH_FIRE, Abilities.WHITE_SMOKE, Abilities.FLAME_BODY, 525, 100, 115, 65, 90, 90, 65, 75, 50, 184, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.FIRE, PokemonType.BUG, 3, 120, Abilities.FLASH_FIRE, Abilities.WHITE_SMOKE, Abilities.FLAME_BODY, 525, 100, 115, 65, 90, 90, 65, 75, 50, 184, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FIRE, PokemonType.BUG, 75, 999.9, Abilities.FLASH_FIRE, Abilities.FLASH_FIRE, Abilities.FLASH_FIRE, 625, 130, 125, 75, 94, 100, 101, 75, 50, 184), - ), - new PokemonSpecies(Species.CLOBBOPUS, 8, false, false, false, "Tantrum Pokémon", PokemonType.FIGHTING, null, 0.6, 4, Abilities.LIMBER, Abilities.NONE, Abilities.TECHNICIAN, 310, 50, 68, 60, 50, 50, 32, 180, 50, 62, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.GRAPPLOCT, 8, false, false, false, "Jujitsu Pokémon", PokemonType.FIGHTING, null, 1.6, 39, Abilities.LIMBER, Abilities.NONE, Abilities.TECHNICIAN, 480, 80, 118, 90, 70, 80, 42, 45, 50, 168, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.SINISTEA, 8, false, false, false, "Black Tea Pokémon", PokemonType.GHOST, null, 0.1, 0.2, Abilities.WEAK_ARMOR, Abilities.NONE, Abilities.CURSED_BODY, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, GrowthRate.MEDIUM_FAST, null, false, false, - new PokemonForm("Phony Form", "phony", PokemonType.GHOST, null, 0.1, 0.2, Abilities.WEAK_ARMOR, Abilities.NONE, Abilities.CURSED_BODY, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, "", true), - new PokemonForm("Antique Form", "antique", PokemonType.GHOST, null, 0.1, 0.2, Abilities.WEAK_ARMOR, Abilities.NONE, Abilities.CURSED_BODY, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, "", true, true), - ), - new PokemonSpecies(Species.POLTEAGEIST, 8, false, false, false, "Black Tea Pokémon", PokemonType.GHOST, null, 0.2, 0.4, Abilities.WEAK_ARMOR, Abilities.NONE, Abilities.CURSED_BODY, 508, 60, 65, 65, 134, 114, 70, 60, 50, 178, GrowthRate.MEDIUM_FAST, null, false, false, - new PokemonForm("Phony Form", "phony", PokemonType.GHOST, null, 0.2, 0.4, Abilities.WEAK_ARMOR, Abilities.NONE, Abilities.CURSED_BODY, 508, 60, 65, 65, 134, 114, 70, 60, 50, 178, false, "", true), - new PokemonForm("Antique Form", "antique", PokemonType.GHOST, null, 0.2, 0.4, Abilities.WEAK_ARMOR, Abilities.NONE, Abilities.CURSED_BODY, 508, 60, 65, 65, 134, 114, 70, 60, 50, 178, false, "", true, true), - ), - new PokemonSpecies(Species.HATENNA, 8, false, false, false, "Calm Pokémon", PokemonType.PSYCHIC, null, 0.4, 3.4, Abilities.HEALER, Abilities.ANTICIPATION, Abilities.MAGIC_BOUNCE, 265, 42, 30, 45, 56, 53, 39, 235, 50, 53, GrowthRate.SLOW, 0, false), - new PokemonSpecies(Species.HATTREM, 8, false, false, false, "Serene Pokémon", PokemonType.PSYCHIC, null, 0.6, 4.8, Abilities.HEALER, Abilities.ANTICIPATION, Abilities.MAGIC_BOUNCE, 370, 57, 40, 65, 86, 73, 49, 120, 50, 130, GrowthRate.SLOW, 0, false), - new PokemonSpecies(Species.HATTERENE, 8, false, false, false, "Silent Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 2.1, 5.1, Abilities.HEALER, Abilities.ANTICIPATION, Abilities.MAGIC_BOUNCE, 510, 57, 90, 95, 136, 103, 29, 45, 50, 255, GrowthRate.SLOW, 0, false, true, - new PokemonForm("Normal", "", PokemonType.PSYCHIC, PokemonType.FAIRY, 2.1, 5.1, Abilities.HEALER, Abilities.ANTICIPATION, Abilities.MAGIC_BOUNCE, 510, 57, 90, 95, 136, 103, 29, 45, 50, 255, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.PSYCHIC, PokemonType.FAIRY, 26, 999.9, Abilities.MAGIC_BOUNCE, Abilities.MAGIC_BOUNCE, Abilities.MAGIC_BOUNCE, 610, 87, 100, 110, 146, 118, 49, 45, 50, 255), - ), - new PokemonSpecies(Species.IMPIDIMP, 8, false, false, false, "Wily Pokémon", PokemonType.DARK, PokemonType.FAIRY, 0.4, 5.5, Abilities.PRANKSTER, Abilities.FRISK, Abilities.PICKPOCKET, 265, 45, 45, 30, 55, 40, 50, 255, 50, 53, GrowthRate.MEDIUM_FAST, 100, false), - new PokemonSpecies(Species.MORGREM, 8, false, false, false, "Devious Pokémon", PokemonType.DARK, PokemonType.FAIRY, 0.8, 12.5, Abilities.PRANKSTER, Abilities.FRISK, Abilities.PICKPOCKET, 370, 65, 60, 45, 75, 55, 70, 120, 50, 130, GrowthRate.MEDIUM_FAST, 100, false), - new PokemonSpecies(Species.GRIMMSNARL, 8, false, false, false, "Bulk Up Pokémon", PokemonType.DARK, PokemonType.FAIRY, 1.5, 61, Abilities.PRANKSTER, Abilities.FRISK, Abilities.PICKPOCKET, 510, 95, 120, 65, 95, 75, 60, 45, 50, 255, GrowthRate.MEDIUM_FAST, 100, false, true, - new PokemonForm("Normal", "", PokemonType.DARK, PokemonType.FAIRY, 1.5, 61, Abilities.PRANKSTER, Abilities.FRISK, Abilities.PICKPOCKET, 510, 95, 120, 65, 95, 75, 60, 45, 50, 255, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.DARK, PokemonType.FAIRY, 32, 999.9, Abilities.PRANKSTER, Abilities.PRANKSTER, Abilities.PRANKSTER, 610, 130, 138, 75, 110, 92, 65, 45, 50, 255), - ), - new PokemonSpecies(Species.OBSTAGOON, 8, false, false, false, "Blocking Pokémon", PokemonType.DARK, PokemonType.NORMAL, 1.6, 46, Abilities.RECKLESS, Abilities.GUTS, Abilities.DEFIANT, 520, 93, 90, 101, 60, 81, 95, 45, 50, 260, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.PERRSERKER, 8, false, false, false, "Viking Pokémon", PokemonType.STEEL, null, 0.8, 28, Abilities.BATTLE_ARMOR, Abilities.TOUGH_CLAWS, Abilities.STEELY_SPIRIT, 440, 70, 110, 100, 50, 60, 50, 90, 50, 154, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.CURSOLA, 8, false, false, false, "Coral Pokémon", PokemonType.GHOST, null, 1, 0.4, Abilities.WEAK_ARMOR, Abilities.NONE, Abilities.PERISH_BODY, 510, 60, 95, 50, 145, 130, 30, 30, 50, 179, GrowthRate.FAST, 25, false), - new PokemonSpecies(Species.SIRFETCHD, 8, false, false, false, "Wild Duck Pokémon", PokemonType.FIGHTING, null, 0.8, 117, Abilities.STEADFAST, Abilities.NONE, Abilities.SCRAPPY, 507, 62, 135, 95, 68, 82, 65, 45, 50, 177, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.MR_RIME, 8, false, false, false, "Comedian Pokémon", PokemonType.ICE, PokemonType.PSYCHIC, 1.5, 58.2, Abilities.TANGLED_FEET, Abilities.SCREEN_CLEANER, Abilities.ICE_BODY, 520, 80, 85, 75, 110, 100, 70, 45, 50, 182, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.RUNERIGUS, 8, false, false, false, "Grudge Pokémon", PokemonType.GROUND, PokemonType.GHOST, 1.6, 66.6, Abilities.WANDERING_SPIRIT, Abilities.NONE, Abilities.NONE, 483, 58, 95, 145, 50, 105, 30, 90, 50, 169, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.MILCERY, 8, false, false, false, "Cream Pokémon", PokemonType.FAIRY, null, 0.2, 0.3, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 270, 45, 40, 40, 50, 61, 34, 200, 50, 54, GrowthRate.MEDIUM_FAST, 0, false), - new PokemonSpecies(Species.ALCREMIE, 8, false, false, false, "Cream Pokémon", PokemonType.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, GrowthRate.MEDIUM_FAST, 0, false, true, - new PokemonForm("Vanilla Cream", "vanilla-cream", PokemonType.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, "", true), - new PokemonForm("Ruby Cream", "ruby-cream", PokemonType.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), - new PokemonForm("Matcha Cream", "matcha-cream", PokemonType.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), - new PokemonForm("Mint Cream", "mint-cream", PokemonType.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), - new PokemonForm("Lemon Cream", "lemon-cream", PokemonType.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), - new PokemonForm("Salted Cream", "salted-cream", PokemonType.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), - new PokemonForm("Ruby Swirl", "ruby-swirl", PokemonType.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), - new PokemonForm("Caramel Swirl", "caramel-swirl", PokemonType.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), - new PokemonForm("Rainbow Swirl", "rainbow-swirl", PokemonType.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FAIRY, null, 30, 999.9, Abilities.MISTY_SURGE, Abilities.NONE, Abilities.MISTY_SURGE, 595, 105, 70, 85, 130, 141, 64, 100, 50, 173), - ), - new PokemonSpecies(Species.FALINKS, 8, false, false, false, "Formation Pokémon", PokemonType.FIGHTING, null, 3, 62, Abilities.BATTLE_ARMOR, Abilities.NONE, Abilities.DEFIANT, 470, 65, 100, 100, 70, 60, 75, 45, 50, 165, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(Species.PINCURCHIN, 8, false, false, false, "Sea Urchin Pokémon", PokemonType.ELECTRIC, null, 0.3, 1, Abilities.LIGHTNING_ROD, Abilities.NONE, Abilities.ELECTRIC_SURGE, 435, 48, 101, 95, 91, 85, 15, 75, 50, 152, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.SNOM, 8, false, false, false, "Worm Pokémon", PokemonType.ICE, PokemonType.BUG, 0.3, 3.8, Abilities.SHIELD_DUST, Abilities.NONE, Abilities.ICE_SCALES, 185, 30, 25, 35, 45, 30, 20, 190, 50, 37, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.FROSMOTH, 8, false, false, false, "Frost Moth Pokémon", PokemonType.ICE, PokemonType.BUG, 1.3, 42, Abilities.SHIELD_DUST, Abilities.NONE, Abilities.ICE_SCALES, 475, 70, 65, 60, 125, 90, 65, 75, 50, 166, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.STONJOURNER, 8, false, false, false, "Big Rock Pokémon", PokemonType.ROCK, null, 2.5, 520, Abilities.POWER_SPOT, Abilities.NONE, Abilities.NONE, 470, 100, 125, 135, 20, 20, 70, 60, 50, 165, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.EISCUE, 8, false, false, false, "Penguin Pokémon", PokemonType.ICE, null, 1.4, 89, Abilities.ICE_FACE, Abilities.NONE, Abilities.NONE, 470, 75, 80, 110, 65, 90, 50, 60, 50, 165, GrowthRate.SLOW, 50, false, false, - new PokemonForm("Ice Face", "", PokemonType.ICE, null, 1.4, 89, Abilities.ICE_FACE, Abilities.NONE, Abilities.NONE, 470, 75, 80, 110, 65, 90, 50, 60, 50, 165, false, null, true), - new PokemonForm("No Ice", "no-ice", PokemonType.ICE, null, 1.4, 89, Abilities.ICE_FACE, Abilities.NONE, Abilities.NONE, 470, 75, 80, 70, 65, 50, 130, 60, 50, 165), - ), - new PokemonSpecies(Species.INDEEDEE, 8, false, false, false, "Emotion Pokémon", PokemonType.PSYCHIC, PokemonType.NORMAL, 0.9, 28, Abilities.INNER_FOCUS, Abilities.SYNCHRONIZE, Abilities.PSYCHIC_SURGE, 475, 60, 65, 55, 105, 95, 95, 30, 140, 166, GrowthRate.FAST, 50, false, false, - new PokemonForm("Male", "male", PokemonType.PSYCHIC, PokemonType.NORMAL, 0.9, 28, Abilities.INNER_FOCUS, Abilities.SYNCHRONIZE, Abilities.PSYCHIC_SURGE, 475, 60, 65, 55, 105, 95, 95, 30, 140, 166, false, "", true), - new PokemonForm("Female", "female", PokemonType.PSYCHIC, PokemonType.NORMAL, 0.9, 28, Abilities.OWN_TEMPO, Abilities.SYNCHRONIZE, Abilities.PSYCHIC_SURGE, 475, 70, 55, 65, 95, 105, 85, 30, 140, 166, false, null, true), - ), - new PokemonSpecies(Species.MORPEKO, 8, false, false, false, "Two-Sided Pokémon", PokemonType.ELECTRIC, PokemonType.DARK, 0.3, 3, Abilities.HUNGER_SWITCH, Abilities.NONE, Abilities.NONE, 436, 58, 95, 58, 70, 58, 97, 180, 50, 153, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Full Belly Mode", "full-belly", PokemonType.ELECTRIC, PokemonType.DARK, 0.3, 3, Abilities.HUNGER_SWITCH, Abilities.NONE, Abilities.NONE, 436, 58, 95, 58, 70, 58, 97, 180, 50, 153, false, "", true), - new PokemonForm("Hangry Mode", "hangry", PokemonType.ELECTRIC, PokemonType.DARK, 0.3, 3, Abilities.HUNGER_SWITCH, Abilities.NONE, Abilities.NONE, 436, 58, 95, 58, 70, 58, 97, 180, 50, 153), - ), - new PokemonSpecies(Species.CUFANT, 8, false, false, false, "Copperderm Pokémon", PokemonType.STEEL, null, 1.2, 100, Abilities.SHEER_FORCE, Abilities.NONE, Abilities.HEAVY_METAL, 330, 72, 80, 49, 40, 49, 40, 190, 50, 66, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.COPPERAJAH, 8, false, false, false, "Copperderm Pokémon", PokemonType.STEEL, null, 3, 650, Abilities.SHEER_FORCE, Abilities.NONE, Abilities.HEAVY_METAL, 500, 122, 130, 69, 80, 69, 30, 90, 50, 175, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.STEEL, null, 3, 650, Abilities.SHEER_FORCE, Abilities.NONE, Abilities.HEAVY_METAL, 500, 122, 130, 69, 80, 69, 30, 90, 50, 175, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.STEEL, PokemonType.GROUND, 23, 999.9, Abilities.MOLD_BREAKER, Abilities.NONE, Abilities.MOLD_BREAKER, 600, 177, 155, 79, 90, 79, 20, 90, 50, 175), - ), - new PokemonSpecies(Species.DRACOZOLT, 8, false, false, false, "Fossil Pokémon", PokemonType.ELECTRIC, PokemonType.DRAGON, 1.8, 190, Abilities.VOLT_ABSORB, Abilities.HUSTLE, Abilities.SAND_RUSH, 505, 90, 100, 90, 80, 70, 75, 45, 50, 177, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.ARCTOZOLT, 8, false, false, false, "Fossil Pokémon", PokemonType.ELECTRIC, PokemonType.ICE, 2.3, 150, Abilities.VOLT_ABSORB, Abilities.STATIC, Abilities.SLUSH_RUSH, 505, 90, 100, 90, 90, 80, 55, 45, 50, 177, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.DRACOVISH, 8, false, false, false, "Fossil Pokémon", PokemonType.WATER, PokemonType.DRAGON, 2.3, 215, Abilities.WATER_ABSORB, Abilities.STRONG_JAW, Abilities.SAND_RUSH, 505, 90, 90, 100, 70, 80, 75, 45, 50, 177, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.ARCTOVISH, 8, false, false, false, "Fossil Pokémon", PokemonType.WATER, PokemonType.ICE, 2, 175, Abilities.WATER_ABSORB, Abilities.ICE_BODY, Abilities.SLUSH_RUSH, 505, 90, 90, 100, 80, 90, 55, 45, 50, 177, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.DURALUDON, 8, false, false, false, "Alloy Pokémon", PokemonType.STEEL, PokemonType.DRAGON, 1.8, 40, Abilities.LIGHT_METAL, Abilities.HEAVY_METAL, Abilities.STALWART, 535, 70, 95, 115, 120, 50, 85, 45, 50, 187, GrowthRate.MEDIUM_FAST, 50, false, true, - new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.DRAGON, 1.8, 40, Abilities.LIGHT_METAL, Abilities.HEAVY_METAL, Abilities.STALWART, 535, 70, 95, 115, 120, 50, 85, 45, 50, 187, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.STEEL, PokemonType.DRAGON, 43, 999.9, Abilities.LIGHTNING_ROD, Abilities.LIGHTNING_ROD, Abilities.LIGHTNING_ROD, 635, 100, 110, 120, 175, 60, 70, 45, 50, 187), - ), - new PokemonSpecies(Species.DREEPY, 8, false, false, false, "Lingering Pokémon", PokemonType.DRAGON, PokemonType.GHOST, 0.5, 2, Abilities.CLEAR_BODY, Abilities.INFILTRATOR, Abilities.CURSED_BODY, 270, 28, 60, 30, 40, 30, 82, 45, 50, 54, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.DRAKLOAK, 8, false, false, false, "Caretaker Pokémon", PokemonType.DRAGON, PokemonType.GHOST, 1.4, 11, Abilities.CLEAR_BODY, Abilities.INFILTRATOR, Abilities.CURSED_BODY, 410, 68, 80, 50, 60, 50, 102, 45, 50, 144, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.DRAGAPULT, 8, false, false, false, "Stealth Pokémon", PokemonType.DRAGON, PokemonType.GHOST, 3, 50, Abilities.CLEAR_BODY, Abilities.INFILTRATOR, Abilities.CURSED_BODY, 600, 88, 120, 75, 100, 75, 142, 45, 50, 300, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.ZACIAN, 8, false, true, false, "Warrior Pokémon", PokemonType.FAIRY, null, 2.8, 110, Abilities.INTREPID_SWORD, Abilities.NONE, Abilities.NONE, 660, 92, 120, 115, 80, 115, 138, 10, 0, 335, GrowthRate.SLOW, null, false, false, - new PokemonForm("Hero of Many Battles", "hero-of-many-battles", PokemonType.FAIRY, null, 2.8, 110, Abilities.INTREPID_SWORD, Abilities.NONE, Abilities.NONE, 660, 92, 120, 115, 80, 115, 138, 10, 0, 335, false, "", true), - new PokemonForm("Crowned", "crowned", PokemonType.FAIRY, PokemonType.STEEL, 2.8, 355, Abilities.INTREPID_SWORD, Abilities.NONE, Abilities.NONE, 700, 92, 150, 115, 80, 115, 148, 10, 0, 360), - ), - new PokemonSpecies(Species.ZAMAZENTA, 8, false, true, false, "Warrior Pokémon", PokemonType.FIGHTING, null, 2.9, 210, Abilities.DAUNTLESS_SHIELD, Abilities.NONE, Abilities.NONE, 660, 92, 120, 115, 80, 115, 138, 10, 0, 335, GrowthRate.SLOW, null, false, false, - new PokemonForm("Hero of Many Battles", "hero-of-many-battles", PokemonType.FIGHTING, null, 2.9, 210, Abilities.DAUNTLESS_SHIELD, Abilities.NONE, Abilities.NONE, 660, 92, 120, 115, 80, 115, 138, 10, 0, 335, false, "", true), - new PokemonForm("Crowned", "crowned", PokemonType.FIGHTING, PokemonType.STEEL, 2.9, 785, Abilities.DAUNTLESS_SHIELD, Abilities.NONE, Abilities.NONE, 700, 92, 120, 140, 80, 140, 128, 10, 0, 360), - ), - new PokemonSpecies(Species.ETERNATUS, 8, false, true, false, "Gigantic Pokémon", PokemonType.POISON, PokemonType.DRAGON, 20, 950, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 690, 140, 85, 95, 145, 95, 130, 255, 0, 345, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal", "", PokemonType.POISON, PokemonType.DRAGON, 20, 950, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 690, 140, 85, 95, 145, 95, 130, 255, 0, 345, false, null, true), - new PokemonForm("E-Max", "eternamax", PokemonType.POISON, PokemonType.DRAGON, 100, 999.9, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 1125, 255, 115, 250, 125, 250, 130, 255, 0, 345), - ), - new PokemonSpecies(Species.KUBFU, 8, true, false, false, "Wushu Pokémon", PokemonType.FIGHTING, null, 0.6, 12, Abilities.INNER_FOCUS, Abilities.NONE, Abilities.NONE, 385, 60, 90, 60, 53, 50, 72, 3, 50, 77, GrowthRate.SLOW, 87.5, false), - new PokemonSpecies(Species.URSHIFU, 8, true, false, false, "Wushu Pokémon", PokemonType.FIGHTING, PokemonType.DARK, 1.9, 105, Abilities.UNSEEN_FIST, Abilities.NONE, Abilities.NONE, 550, 100, 130, 100, 63, 60, 97, 3, 50, 275, GrowthRate.SLOW, 87.5, false, true, - new PokemonForm("Single Strike Style", "single-strike", PokemonType.FIGHTING, PokemonType.DARK, 1.9, 105, Abilities.UNSEEN_FIST, Abilities.NONE, Abilities.NONE, 550, 100, 130, 100, 63, 60, 97, 3, 50, 275, false, "", true), - new PokemonForm("Rapid Strike Style", "rapid-strike", PokemonType.FIGHTING, PokemonType.WATER, 1.9, 105, Abilities.UNSEEN_FIST, Abilities.NONE, Abilities.NONE, 550, 100, 130, 100, 63, 60, 97, 3, 50, 275, false, null, true), - new PokemonForm("G-Max Single Strike Style", SpeciesFormKey.GIGANTAMAX_SINGLE, PokemonType.FIGHTING, PokemonType.DARK, 29, 999.9, Abilities.UNSEEN_FIST, Abilities.NONE, Abilities.NONE, 650, 125, 145, 115, 83, 70, 112, 3, 50, 275), - new PokemonForm("G-Max Rapid Strike Style", SpeciesFormKey.GIGANTAMAX_RAPID, PokemonType.FIGHTING, PokemonType.WATER, 26, 999.9, Abilities.UNSEEN_FIST, Abilities.NONE, Abilities.NONE, 650, 125, 145, 115, 83, 70, 112, 3, 50, 275), - ), - new PokemonSpecies(Species.ZARUDE, 8, false, false, true, "Rogue Monkey Pokémon", PokemonType.DARK, PokemonType.GRASS, 1.8, 70, Abilities.LEAF_GUARD, Abilities.NONE, Abilities.NONE, 600, 105, 120, 105, 70, 95, 105, 3, 0, 300, GrowthRate.SLOW, null, false, false, - new PokemonForm("Normal", "", PokemonType.DARK, PokemonType.GRASS, 1.8, 70, Abilities.LEAF_GUARD, Abilities.NONE, Abilities.NONE, 600, 105, 120, 105, 70, 95, 105, 3, 0, 300, false, null, true), - new PokemonForm("Dada", "dada", PokemonType.DARK, PokemonType.GRASS, 1.8, 70, Abilities.LEAF_GUARD, Abilities.NONE, Abilities.NONE, 600, 105, 120, 105, 70, 95, 105, 3, 0, 300, false, null, true), - ), - new PokemonSpecies(Species.REGIELEKI, 8, true, false, false, "Electron Pokémon", PokemonType.ELECTRIC, null, 1.2, 145, Abilities.TRANSISTOR, Abilities.NONE, Abilities.NONE, 580, 80, 100, 50, 100, 50, 200, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.REGIDRAGO, 8, true, false, false, "Dragon Orb Pokémon", PokemonType.DRAGON, null, 2.1, 200, Abilities.DRAGONS_MAW, Abilities.NONE, Abilities.NONE, 580, 200, 100, 50, 100, 50, 80, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.GLASTRIER, 8, true, false, false, "Wild Horse Pokémon", PokemonType.ICE, null, 2.2, 800, Abilities.CHILLING_NEIGH, Abilities.NONE, Abilities.NONE, 580, 100, 145, 130, 65, 110, 30, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.SPECTRIER, 8, true, false, false, "Swift Horse Pokémon", PokemonType.GHOST, null, 2, 44.5, Abilities.GRIM_NEIGH, Abilities.NONE, Abilities.NONE, 580, 100, 65, 60, 145, 80, 130, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.CALYREX, 8, false, true, false, "King Pokémon", PokemonType.PSYCHIC, PokemonType.GRASS, 1.1, 7.7, Abilities.UNNERVE, Abilities.NONE, Abilities.NONE, 500, 100, 80, 80, 80, 80, 80, 3, 100, 250, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal", "", PokemonType.PSYCHIC, PokemonType.GRASS, 1.1, 7.7, Abilities.UNNERVE, Abilities.NONE, Abilities.NONE, 500, 100, 80, 80, 80, 80, 80, 3, 100, 250, false, null, true), - new PokemonForm("Ice", "ice", PokemonType.PSYCHIC, PokemonType.ICE, 2.4, 809.1, Abilities.AS_ONE_GLASTRIER, Abilities.NONE, Abilities.NONE, 680, 100, 165, 150, 85, 130, 50, 3, 100, 340), - new PokemonForm("Shadow", "shadow", PokemonType.PSYCHIC, PokemonType.GHOST, 2.4, 53.6, Abilities.AS_ONE_SPECTRIER, Abilities.NONE, Abilities.NONE, 680, 100, 85, 80, 165, 100, 150, 3, 100, 340), - ), - new PokemonSpecies(Species.WYRDEER, 8, false, false, false, "Big Horn Pokémon", PokemonType.NORMAL, PokemonType.PSYCHIC, 1.8, 95.1, Abilities.INTIMIDATE, Abilities.FRISK, Abilities.SAP_SIPPER, 525, 103, 105, 72, 105, 75, 65, 135, 50, 263, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.KLEAVOR, 8, false, false, false, "Axe Pokémon", PokemonType.BUG, PokemonType.ROCK, 1.8, 89, Abilities.SWARM, Abilities.SHEER_FORCE, Abilities.SHARPNESS, 500, 70, 135, 95, 45, 70, 85, 115, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.URSALUNA, 8, false, false, false, "Peat Pokémon", PokemonType.GROUND, PokemonType.NORMAL, 2.4, 290, Abilities.GUTS, Abilities.BULLETPROOF, Abilities.UNNERVE, 550, 130, 140, 105, 45, 80, 50, 75, 50, 275, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.BASCULEGION, 8, false, false, false, "Big Fish Pokémon", PokemonType.WATER, PokemonType.GHOST, 3, 110, Abilities.SWIFT_SWIM, Abilities.ADAPTABILITY, Abilities.MOLD_BREAKER, 530, 120, 112, 65, 80, 75, 78, 135, 50, 265, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Male", "male", PokemonType.WATER, PokemonType.GHOST, 3, 110, Abilities.SWIFT_SWIM, Abilities.ADAPTABILITY, Abilities.MOLD_BREAKER, 530, 120, 112, 65, 80, 75, 78, 135, 50, 265, false, "", true), - new PokemonForm("Female", "female", PokemonType.WATER, PokemonType.GHOST, 3, 110, Abilities.SWIFT_SWIM, Abilities.ADAPTABILITY, Abilities.MOLD_BREAKER, 530, 120, 92, 65, 100, 75, 78, 135, 50, 265, false, null, true), - ), - new PokemonSpecies(Species.SNEASLER, 8, false, false, false, "Free Climb Pokémon", PokemonType.FIGHTING, PokemonType.POISON, 1.3, 43, Abilities.PRESSURE, Abilities.UNBURDEN, Abilities.POISON_TOUCH, 510, 80, 130, 60, 40, 80, 120, 135, 50, 102, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.OVERQWIL, 8, false, false, false, "Pin Cluster Pokémon", PokemonType.DARK, PokemonType.POISON, 2.5, 60.5, Abilities.POISON_POINT, Abilities.SWIFT_SWIM, Abilities.INTIMIDATE, 510, 85, 115, 95, 65, 65, 85, 135, 50, 179, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.ENAMORUS, 8, true, false, false, "Love-Hate Pokémon", PokemonType.FAIRY, PokemonType.FLYING, 1.6, 48, Abilities.CUTE_CHARM, Abilities.NONE, Abilities.CONTRARY, 580, 74, 115, 70, 135, 80, 106, 3, 50, 116, GrowthRate.SLOW, 0, false, true, - new PokemonForm("Incarnate Forme", "incarnate", PokemonType.FAIRY, PokemonType.FLYING, 1.6, 48, Abilities.CUTE_CHARM, Abilities.NONE, Abilities.CONTRARY, 580, 74, 115, 70, 135, 80, 106, 3, 50, 116, false, null, true), - new PokemonForm("Therian Forme", "therian", PokemonType.FAIRY, PokemonType.FLYING, 1.6, 48, Abilities.OVERCOAT, Abilities.NONE, Abilities.OVERCOAT, 580, 74, 115, 110, 135, 100, 46, 3, 50, 116), - ), - new PokemonSpecies(Species.SPRIGATITO, 9, false, false, false, "Grass Cat Pokémon", PokemonType.GRASS, null, 0.4, 4.1, Abilities.OVERGROW, Abilities.NONE, Abilities.PROTEAN, 310, 40, 61, 54, 45, 45, 65, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.FLORAGATO, 9, false, false, false, "Grass Cat Pokémon", PokemonType.GRASS, null, 0.9, 12.2, Abilities.OVERGROW, Abilities.NONE, Abilities.PROTEAN, 410, 61, 80, 63, 60, 63, 83, 45, 50, 144, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.MEOWSCARADA, 9, false, false, false, "Magician Pokémon", PokemonType.GRASS, PokemonType.DARK, 1.5, 31.2, Abilities.OVERGROW, Abilities.NONE, Abilities.PROTEAN, 530, 76, 110, 70, 81, 70, 123, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.FUECOCO, 9, false, false, false, "Fire Croc Pokémon", PokemonType.FIRE, null, 0.4, 9.8, Abilities.BLAZE, Abilities.NONE, Abilities.UNAWARE, 310, 67, 45, 59, 63, 40, 36, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.CROCALOR, 9, false, false, false, "Fire Croc Pokémon", PokemonType.FIRE, null, 1, 30.7, Abilities.BLAZE, Abilities.NONE, Abilities.UNAWARE, 411, 81, 55, 78, 90, 58, 49, 45, 50, 144, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.SKELEDIRGE, 9, false, false, false, "Singer Pokémon", PokemonType.FIRE, PokemonType.GHOST, 1.6, 326.5, Abilities.BLAZE, Abilities.NONE, Abilities.UNAWARE, 530, 104, 75, 100, 110, 75, 66, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.QUAXLY, 9, false, false, false, "Duckling Pokémon", PokemonType.WATER, null, 0.5, 6.1, Abilities.TORRENT, Abilities.NONE, Abilities.MOXIE, 310, 55, 65, 45, 50, 45, 50, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.QUAXWELL, 9, false, false, false, "Practicing Pokémon", PokemonType.WATER, null, 1.2, 21.5, Abilities.TORRENT, Abilities.NONE, Abilities.MOXIE, 410, 70, 85, 65, 65, 60, 65, 45, 50, 144, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.QUAQUAVAL, 9, false, false, false, "Dancer Pokémon", PokemonType.WATER, PokemonType.FIGHTING, 1.8, 61.9, Abilities.TORRENT, Abilities.NONE, Abilities.MOXIE, 530, 85, 120, 80, 85, 75, 85, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.LECHONK, 9, false, false, false, "Hog Pokémon", PokemonType.NORMAL, null, 0.5, 10.2, Abilities.AROMA_VEIL, Abilities.GLUTTONY, Abilities.THICK_FAT, 254, 54, 45, 40, 35, 45, 35, 255, 50, 51, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.OINKOLOGNE, 9, false, false, false, "Hog Pokémon", PokemonType.NORMAL, null, 1, 120, Abilities.LINGERING_AROMA, Abilities.GLUTTONY, Abilities.THICK_FAT, 489, 110, 100, 75, 59, 80, 65, 100, 50, 171, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Male", "male", PokemonType.NORMAL, null, 1, 120, Abilities.LINGERING_AROMA, Abilities.GLUTTONY, Abilities.THICK_FAT, 489, 110, 100, 75, 59, 80, 65, 100, 50, 171, false, "", true), - new PokemonForm("Female", "female", PokemonType.NORMAL, null, 1, 120, Abilities.AROMA_VEIL, Abilities.GLUTTONY, Abilities.THICK_FAT, 489, 115, 90, 70, 59, 90, 65, 100, 50, 171, false, null, true), - ), - new PokemonSpecies(Species.TAROUNTULA, 9, false, false, false, "String Ball Pokémon", PokemonType.BUG, null, 0.3, 4, Abilities.INSOMNIA, Abilities.NONE, Abilities.STAKEOUT, 210, 35, 41, 45, 29, 40, 20, 255, 50, 42, GrowthRate.ERRATIC, 50, false), - new PokemonSpecies(Species.SPIDOPS, 9, false, false, false, "Trap Pokémon", PokemonType.BUG, null, 1, 16.5, Abilities.INSOMNIA, Abilities.NONE, Abilities.STAKEOUT, 404, 60, 79, 92, 52, 86, 35, 120, 50, 141, GrowthRate.ERRATIC, 50, false), - new PokemonSpecies(Species.NYMBLE, 9, false, false, false, "Grasshopper Pokémon", PokemonType.BUG, null, 0.2, 1, Abilities.SWARM, Abilities.NONE, Abilities.TINTED_LENS, 210, 33, 46, 40, 21, 25, 45, 190, 20, 42, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.LOKIX, 9, false, false, false, "Grasshopper Pokémon", PokemonType.BUG, PokemonType.DARK, 1, 17.5, Abilities.SWARM, Abilities.NONE, Abilities.TINTED_LENS, 450, 71, 102, 78, 52, 55, 92, 30, 0, 158, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.PAWMI, 9, false, false, false, "Mouse Pokémon", PokemonType.ELECTRIC, null, 0.3, 2.5, Abilities.STATIC, Abilities.NATURAL_CURE, Abilities.IRON_FIST, 240, 45, 50, 20, 40, 25, 60, 190, 50, 48, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.PAWMO, 9, false, false, false, "Mouse Pokémon", PokemonType.ELECTRIC, PokemonType.FIGHTING, 0.4, 6.5, Abilities.VOLT_ABSORB, Abilities.NATURAL_CURE, Abilities.IRON_FIST, 350, 60, 75, 40, 50, 40, 85, 80, 50, 123, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.PAWMOT, 9, false, false, false, "Hands-On Pokémon", PokemonType.ELECTRIC, PokemonType.FIGHTING, 0.9, 41, Abilities.VOLT_ABSORB, Abilities.NATURAL_CURE, Abilities.IRON_FIST, 490, 70, 115, 70, 70, 60, 105, 45, 50, 245, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.TANDEMAUS, 9, false, false, false, "Couple Pokémon", PokemonType.NORMAL, null, 0.3, 1.8, Abilities.RUN_AWAY, Abilities.PICKUP, Abilities.OWN_TEMPO, 305, 50, 50, 45, 40, 45, 75, 150, 50, 61, GrowthRate.FAST, null, false), - new PokemonSpecies(Species.MAUSHOLD, 9, false, false, false, "Family Pokémon", PokemonType.NORMAL, null, 0.3, 2.3, Abilities.FRIEND_GUARD, Abilities.CHEEK_POUCH, Abilities.TECHNICIAN, 470, 74, 75, 70, 65, 75, 111, 75, 50, 165, GrowthRate.FAST, null, false, false, - new PokemonForm("Family of Four", "four", PokemonType.NORMAL, null, 0.3, 2.8, Abilities.FRIEND_GUARD, Abilities.CHEEK_POUCH, Abilities.TECHNICIAN, 470, 74, 75, 70, 65, 75, 111, 75, 50, 165), - new PokemonForm("Family of Three", "three", PokemonType.NORMAL, null, 0.3, 2.3, Abilities.FRIEND_GUARD, Abilities.CHEEK_POUCH, Abilities.TECHNICIAN, 470, 74, 75, 70, 65, 75, 111, 75, 50, 165), - ), - new PokemonSpecies(Species.FIDOUGH, 9, false, false, false, "Puppy Pokémon", PokemonType.FAIRY, null, 0.3, 10.9, Abilities.OWN_TEMPO, Abilities.NONE, Abilities.KLUTZ, 312, 37, 55, 70, 30, 55, 65, 190, 50, 62, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.DACHSBUN, 9, false, false, false, "Dog Pokémon", PokemonType.FAIRY, null, 0.5, 14.9, Abilities.WELL_BAKED_BODY, Abilities.NONE, Abilities.AROMA_VEIL, 477, 57, 80, 115, 50, 80, 95, 90, 50, 167, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.SMOLIV, 9, false, false, false, "Olive Pokémon", PokemonType.GRASS, PokemonType.NORMAL, 0.3, 6.5, Abilities.EARLY_BIRD, Abilities.NONE, Abilities.HARVEST, 260, 41, 35, 45, 58, 51, 30, 255, 50, 52, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.DOLLIV, 9, false, false, false, "Olive Pokémon", PokemonType.GRASS, PokemonType.NORMAL, 0.6, 11.9, Abilities.EARLY_BIRD, Abilities.NONE, Abilities.HARVEST, 354, 52, 53, 60, 78, 78, 33, 120, 50, 124, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.ARBOLIVA, 9, false, false, false, "Olive Pokémon", PokemonType.GRASS, PokemonType.NORMAL, 1.4, 48.2, Abilities.SEED_SOWER, Abilities.NONE, Abilities.HARVEST, 510, 78, 69, 90, 125, 109, 39, 45, 50, 255, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.SQUAWKABILLY, 9, false, false, false, "Parrot Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 2.4, Abilities.INTIMIDATE, Abilities.HUSTLE, Abilities.GUTS, 417, 82, 96, 51, 45, 51, 92, 190, 50, 146, GrowthRate.ERRATIC, 50, false, false, - new PokemonForm("Green Plumage", "green-plumage", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 2.4, Abilities.INTIMIDATE, Abilities.HUSTLE, Abilities.GUTS, 417, 82, 96, 51, 45, 51, 92, 190, 50, 146, false, null, true), - new PokemonForm("Blue Plumage", "blue-plumage", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 2.4, Abilities.INTIMIDATE, Abilities.HUSTLE, Abilities.GUTS, 417, 82, 96, 51, 45, 51, 92, 190, 50, 146, false, null, true), - new PokemonForm("Yellow Plumage", "yellow-plumage", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 2.4, Abilities.INTIMIDATE, Abilities.HUSTLE, Abilities.SHEER_FORCE, 417, 82, 96, 51, 45, 51, 92, 190, 50, 146, false, null, true), - new PokemonForm("White Plumage", "white-plumage", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 2.4, Abilities.INTIMIDATE, Abilities.HUSTLE, Abilities.SHEER_FORCE, 417, 82, 96, 51, 45, 51, 92, 190, 50, 146, false, null, true), - ), - new PokemonSpecies(Species.NACLI, 9, false, false, false, "Rock Salt Pokémon", PokemonType.ROCK, null, 0.4, 16, Abilities.PURIFYING_SALT, Abilities.STURDY, Abilities.CLEAR_BODY, 280, 55, 55, 75, 35, 35, 25, 255, 50, 56, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.NACLSTACK, 9, false, false, false, "Rock Salt Pokémon", PokemonType.ROCK, null, 0.6, 105, Abilities.PURIFYING_SALT, Abilities.STURDY, Abilities.CLEAR_BODY, 355, 60, 60, 100, 35, 65, 35, 120, 50, 124, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.GARGANACL, 9, false, false, false, "Rock Salt Pokémon", PokemonType.ROCK, null, 2.3, 240, Abilities.PURIFYING_SALT, Abilities.STURDY, Abilities.CLEAR_BODY, 500, 100, 100, 130, 45, 90, 35, 45, 50, 250, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.CHARCADET, 9, false, false, false, "Fire Child Pokémon", PokemonType.FIRE, null, 0.6, 10.5, Abilities.FLASH_FIRE, Abilities.NONE, Abilities.FLAME_BODY, 255, 40, 50, 40, 50, 40, 35, 90, 50, 51, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.ARMAROUGE, 9, false, false, false, "Fire Warrior Pokémon", PokemonType.FIRE, PokemonType.PSYCHIC, 1.5, 85, Abilities.FLASH_FIRE, Abilities.NONE, Abilities.WEAK_ARMOR, 525, 85, 60, 100, 125, 80, 75, 25, 20, 263, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.CERULEDGE, 9, false, false, false, "Fire Blades Pokémon", PokemonType.FIRE, PokemonType.GHOST, 1.6, 62, Abilities.FLASH_FIRE, Abilities.NONE, Abilities.WEAK_ARMOR, 525, 75, 125, 80, 60, 100, 85, 25, 20, 263, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.TADBULB, 9, false, false, false, "EleTadpole Pokémon", PokemonType.ELECTRIC, null, 0.3, 0.4, Abilities.OWN_TEMPO, Abilities.STATIC, Abilities.DAMP, 272, 61, 31, 41, 59, 35, 45, 190, 50, 54, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.BELLIBOLT, 9, false, false, false, "EleFrog Pokémon", PokemonType.ELECTRIC, null, 1.2, 113, Abilities.ELECTROMORPHOSIS, Abilities.STATIC, Abilities.DAMP, 495, 109, 64, 91, 103, 83, 45, 50, 50, 173, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.WATTREL, 9, false, false, false, "Storm Petrel Pokémon", PokemonType.ELECTRIC, PokemonType.FLYING, 0.4, 3.6, Abilities.WIND_POWER, Abilities.VOLT_ABSORB, Abilities.COMPETITIVE, 280, 40, 40, 35, 55, 40, 70, 180, 50, 56, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.KILOWATTREL, 9, false, false, false, "Frigatebird Pokémon", PokemonType.ELECTRIC, PokemonType.FLYING, 1.4, 38.6, Abilities.WIND_POWER, Abilities.VOLT_ABSORB, Abilities.COMPETITIVE, 490, 70, 70, 60, 105, 60, 125, 90, 50, 172, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.MASCHIFF, 9, false, false, false, "Rascal Pokémon", PokemonType.DARK, null, 0.5, 16, Abilities.INTIMIDATE, Abilities.RUN_AWAY, Abilities.STAKEOUT, 340, 60, 78, 60, 40, 51, 51, 150, 50, 68, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.MABOSSTIFF, 9, false, false, false, "Boss Pokémon", PokemonType.DARK, null, 1.1, 61, Abilities.INTIMIDATE, Abilities.GUARD_DOG, Abilities.STAKEOUT, 505, 80, 120, 90, 60, 70, 85, 75, 50, 177, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.SHROODLE, 9, false, false, false, "Toxic Mouse Pokémon", PokemonType.POISON, PokemonType.NORMAL, 0.2, 0.7, Abilities.UNBURDEN, Abilities.PICKPOCKET, Abilities.PRANKSTER, 290, 40, 65, 35, 40, 35, 75, 190, 50, 58, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.GRAFAIAI, 9, false, false, false, "Toxic Monkey Pokémon", PokemonType.POISON, PokemonType.NORMAL, 0.7, 27.2, Abilities.UNBURDEN, Abilities.POISON_TOUCH, Abilities.PRANKSTER, 485, 63, 95, 65, 80, 72, 110, 90, 50, 170, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.BRAMBLIN, 9, false, false, false, "Tumbleweed Pokémon", PokemonType.GRASS, PokemonType.GHOST, 0.6, 0.6, Abilities.WIND_RIDER, Abilities.NONE, Abilities.INFILTRATOR, 275, 40, 65, 30, 45, 35, 60, 190, 50, 55, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.BRAMBLEGHAST, 9, false, false, false, "Tumbleweed Pokémon", PokemonType.GRASS, PokemonType.GHOST, 1.2, 6, Abilities.WIND_RIDER, Abilities.NONE, Abilities.INFILTRATOR, 480, 55, 115, 70, 80, 70, 90, 45, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.TOEDSCOOL, 9, false, false, false, "Woodear Pokémon", PokemonType.GROUND, PokemonType.GRASS, 0.9, 33, Abilities.MYCELIUM_MIGHT, Abilities.NONE, Abilities.NONE, 335, 40, 40, 35, 50, 100, 70, 190, 50, 67, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.TOEDSCRUEL, 9, false, false, false, "Woodear Pokémon", PokemonType.GROUND, PokemonType.GRASS, 1.9, 58, Abilities.MYCELIUM_MIGHT, Abilities.NONE, Abilities.NONE, 515, 80, 70, 65, 80, 120, 100, 90, 50, 180, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.KLAWF, 9, false, false, false, "Ambush Pokémon", PokemonType.ROCK, null, 1.3, 79, Abilities.ANGER_SHELL, Abilities.SHELL_ARMOR, Abilities.REGENERATOR, 450, 70, 100, 115, 35, 55, 75, 120, 50, 158, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.CAPSAKID, 9, false, false, false, "Spicy Pepper Pokémon", PokemonType.GRASS, null, 0.3, 3, Abilities.CHLOROPHYLL, Abilities.INSOMNIA, Abilities.KLUTZ, 304, 50, 62, 40, 62, 40, 50, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.SCOVILLAIN, 9, false, false, false, "Spicy Pepper Pokémon", PokemonType.GRASS, PokemonType.FIRE, 0.9, 15, Abilities.CHLOROPHYLL, Abilities.INSOMNIA, Abilities.MOODY, 486, 65, 108, 65, 108, 65, 75, 75, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.RELLOR, 9, false, false, false, "Rolling Pokémon", PokemonType.BUG, null, 0.2, 1, Abilities.COMPOUND_EYES, Abilities.NONE, Abilities.SHED_SKIN, 270, 41, 50, 60, 31, 58, 30, 190, 50, 54, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.RABSCA, 9, false, false, false, "Rolling Pokémon", PokemonType.BUG, PokemonType.PSYCHIC, 0.3, 3.5, Abilities.SYNCHRONIZE, Abilities.NONE, Abilities.TELEPATHY, 470, 75, 50, 85, 115, 100, 45, 45, 50, 165, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.FLITTLE, 9, false, false, false, "Frill Pokémon", PokemonType.PSYCHIC, null, 0.2, 1.5, Abilities.ANTICIPATION, Abilities.FRISK, Abilities.SPEED_BOOST, 255, 30, 35, 30, 55, 30, 75, 120, 50, 51, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.ESPATHRA, 9, false, false, false, "Ostrich Pokémon", PokemonType.PSYCHIC, null, 1.9, 90, Abilities.OPPORTUNIST, Abilities.FRISK, Abilities.SPEED_BOOST, 481, 95, 60, 60, 101, 60, 105, 60, 50, 168, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.TINKATINK, 9, false, false, false, "Metalsmith Pokémon", PokemonType.FAIRY, PokemonType.STEEL, 0.4, 8.9, Abilities.MOLD_BREAKER, Abilities.OWN_TEMPO, Abilities.PICKPOCKET, 297, 50, 45, 45, 35, 64, 58, 190, 50, 59, GrowthRate.MEDIUM_SLOW, 0, false), - new PokemonSpecies(Species.TINKATUFF, 9, false, false, false, "Hammer Pokémon", PokemonType.FAIRY, PokemonType.STEEL, 0.7, 59.1, Abilities.MOLD_BREAKER, Abilities.OWN_TEMPO, Abilities.PICKPOCKET, 380, 65, 55, 55, 45, 82, 78, 90, 50, 133, GrowthRate.MEDIUM_SLOW, 0, false), - new PokemonSpecies(Species.TINKATON, 9, false, false, false, "Hammer Pokémon", PokemonType.FAIRY, PokemonType.STEEL, 0.7, 112.8, Abilities.MOLD_BREAKER, Abilities.OWN_TEMPO, Abilities.PICKPOCKET, 506, 85, 75, 77, 70, 105, 94, 45, 50, 253, GrowthRate.MEDIUM_SLOW, 0, false), - new PokemonSpecies(Species.WIGLETT, 9, false, false, false, "Garden Eel Pokémon", PokemonType.WATER, null, 1.2, 1.8, Abilities.GOOEY, Abilities.RATTLED, Abilities.SAND_VEIL, 245, 10, 55, 25, 35, 25, 95, 255, 50, 49, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.WUGTRIO, 9, false, false, false, "Garden Eel Pokémon", PokemonType.WATER, null, 1.2, 5.4, Abilities.GOOEY, Abilities.RATTLED, Abilities.SAND_VEIL, 425, 35, 100, 50, 50, 70, 120, 50, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.BOMBIRDIER, 9, false, false, false, "Item Drop Pokémon", PokemonType.FLYING, PokemonType.DARK, 1.5, 42.9, Abilities.BIG_PECKS, Abilities.KEEN_EYE, Abilities.ROCKY_PAYLOAD, 485, 70, 103, 85, 60, 85, 82, 25, 50, 243, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.FINIZEN, 9, false, false, false, "Dolphin Pokémon", PokemonType.WATER, null, 1.3, 60.2, Abilities.WATER_VEIL, Abilities.NONE, Abilities.NONE, 315, 70, 45, 40, 45, 40, 75, 200, 50, 63, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.PALAFIN, 9, false, false, false, "Dolphin Pokémon", PokemonType.WATER, null, 1.3, 60.2, Abilities.ZERO_TO_HERO, Abilities.NONE, Abilities.NONE, 457, 100, 70, 72, 53, 62, 100, 45, 50, 160, GrowthRate.SLOW, 50, false, true, - new PokemonForm("Zero Form", "zero", PokemonType.WATER, null, 1.3, 60.2, Abilities.ZERO_TO_HERO, Abilities.NONE, Abilities.ZERO_TO_HERO, 457, 100, 70, 72, 53, 62, 100, 45, 50, 160, false, null, true), - new PokemonForm("Hero Form", "hero", PokemonType.WATER, null, 1.8, 97.4, Abilities.ZERO_TO_HERO, Abilities.NONE, Abilities.ZERO_TO_HERO, 650, 100, 160, 97, 106, 87, 100, 45, 50, 160), - ), - new PokemonSpecies(Species.VAROOM, 9, false, false, false, "Single-Cyl Pokémon", PokemonType.STEEL, PokemonType.POISON, 1, 35, Abilities.OVERCOAT, Abilities.NONE, Abilities.SLOW_START, 300, 45, 70, 63, 30, 45, 47, 190, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.REVAVROOM, 9, false, false, false, "Multi-Cyl Pokémon", PokemonType.STEEL, PokemonType.POISON, 1.8, 120, Abilities.OVERCOAT, Abilities.NONE, Abilities.FILTER, 500, 80, 119, 90, 54, 67, 90, 75, 50, 175, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.POISON, 1.8, 120, Abilities.OVERCOAT, Abilities.NONE, Abilities.FILTER, 500, 80, 119, 90, 54, 67, 90, 75, 50, 175, false, null, true), - new PokemonForm("Segin Starmobile", "segin-starmobile", PokemonType.STEEL, PokemonType.DARK, 1.8, 240, Abilities.INTIMIDATE, Abilities.NONE, Abilities.INTIMIDATE, 600, 110, 129, 100, 77, 79, 105, 75, 50, 175, false, null, false, true), - new PokemonForm("Schedar Starmobile", "schedar-starmobile", PokemonType.STEEL, PokemonType.FIRE, 1.8, 240, Abilities.SPEED_BOOST, Abilities.NONE, Abilities.SPEED_BOOST, 600, 110, 129, 100, 77, 79, 105, 75, 50, 175, false, null, false, true), - new PokemonForm("Navi Starmobile", "navi-starmobile", PokemonType.STEEL, PokemonType.POISON, 1.8, 240, Abilities.TOXIC_DEBRIS, Abilities.NONE, Abilities.TOXIC_DEBRIS, 600, 110, 129, 100, 77, 79, 105, 75, 50, 175, false, null, false, true), - new PokemonForm("Ruchbah Starmobile", "ruchbah-starmobile", PokemonType.STEEL, PokemonType.FAIRY, 1.8, 240, Abilities.MISTY_SURGE, Abilities.NONE, Abilities.MISTY_SURGE, 600, 110, 129, 100, 77, 79, 105, 75, 50, 175, false, null, false, true), - new PokemonForm("Caph Starmobile", "caph-starmobile", PokemonType.STEEL, PokemonType.FIGHTING, 1.8, 240, Abilities.STAMINA, Abilities.NONE, Abilities.STAMINA, 600, 110, 129, 100, 77, 79, 105, 75, 50, 175, false, null, false, true), - ), - new PokemonSpecies(Species.CYCLIZAR, 9, false, false, false, "Mount Pokémon", PokemonType.DRAGON, PokemonType.NORMAL, 1.6, 63, Abilities.SHED_SKIN, Abilities.NONE, Abilities.REGENERATOR, 501, 70, 95, 65, 85, 65, 121, 190, 50, 175, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.ORTHWORM, 9, false, false, false, "Earthworm Pokémon", PokemonType.STEEL, null, 2.5, 310, Abilities.EARTH_EATER, Abilities.NONE, Abilities.SAND_VEIL, 480, 70, 85, 145, 60, 55, 65, 25, 50, 240, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.GLIMMET, 9, false, false, false, "Ore Pokémon", PokemonType.ROCK, PokemonType.POISON, 0.7, 8, Abilities.TOXIC_DEBRIS, Abilities.NONE, Abilities.CORROSION, 350, 48, 35, 42, 105, 60, 60, 70, 50, 70, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.GLIMMORA, 9, false, false, false, "Ore Pokémon", PokemonType.ROCK, PokemonType.POISON, 1.5, 45, Abilities.TOXIC_DEBRIS, Abilities.NONE, Abilities.CORROSION, 525, 83, 55, 90, 130, 81, 86, 25, 50, 184, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.GREAVARD, 9, false, false, false, "Ghost Dog Pokémon", PokemonType.GHOST, null, 0.6, 35, Abilities.PICKUP, Abilities.NONE, Abilities.FLUFFY, 290, 50, 61, 60, 30, 55, 34, 120, 50, 58, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.HOUNDSTONE, 9, false, false, false, "Ghost Dog Pokémon", PokemonType.GHOST, null, 2, 15, Abilities.SAND_RUSH, Abilities.NONE, Abilities.FLUFFY, 488, 72, 101, 100, 50, 97, 68, 60, 50, 171, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.FLAMIGO, 9, false, false, false, "Synchronize Pokémon", PokemonType.FLYING, PokemonType.FIGHTING, 1.6, 37, Abilities.SCRAPPY, Abilities.TANGLED_FEET, Abilities.COSTAR, 500, 82, 115, 74, 75, 64, 90, 100, 50, 175, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.CETODDLE, 9, false, false, false, "Terra Whale Pokémon", PokemonType.ICE, null, 1.2, 45, Abilities.THICK_FAT, Abilities.SNOW_CLOAK, Abilities.SHEER_FORCE, 334, 108, 68, 45, 30, 40, 43, 150, 50, 67, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.CETITAN, 9, false, false, false, "Terra Whale Pokémon", PokemonType.ICE, null, 4.5, 700, Abilities.THICK_FAT, Abilities.SLUSH_RUSH, Abilities.SHEER_FORCE, 521, 170, 113, 65, 45, 55, 73, 50, 50, 182, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.VELUZA, 9, false, false, false, "Jettison Pokémon", PokemonType.WATER, PokemonType.PSYCHIC, 2.5, 90, Abilities.MOLD_BREAKER, Abilities.NONE, Abilities.SHARPNESS, 478, 90, 102, 73, 78, 65, 70, 100, 50, 167, GrowthRate.FAST, 50, false), - new PokemonSpecies(Species.DONDOZO, 9, false, false, false, "Big Catfish Pokémon", PokemonType.WATER, null, 12, 220, Abilities.UNAWARE, Abilities.OBLIVIOUS, Abilities.WATER_VEIL, 530, 150, 100, 115, 65, 65, 35, 25, 50, 265, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.TATSUGIRI, 9, false, false, false, "Mimicry Pokémon", PokemonType.DRAGON, PokemonType.WATER, 0.3, 8, Abilities.COMMANDER, Abilities.NONE, Abilities.STORM_DRAIN, 475, 68, 50, 60, 120, 95, 82, 100, 50, 166, GrowthRate.MEDIUM_SLOW, 50, false, false, - new PokemonForm("Curly Form", "curly", PokemonType.DRAGON, PokemonType.WATER, 0.3, 8, Abilities.COMMANDER, Abilities.NONE, Abilities.STORM_DRAIN, 475, 68, 50, 60, 120, 95, 82, 100, 50, 166, false, null, true), - new PokemonForm("Droopy Form", "droopy", PokemonType.DRAGON, PokemonType.WATER, 0.3, 8, Abilities.COMMANDER, Abilities.NONE, Abilities.STORM_DRAIN, 475, 68, 50, 60, 120, 95, 82, 100, 50, 166, false, null, true), - new PokemonForm("Stretchy Form", "stretchy", PokemonType.DRAGON, PokemonType.WATER, 0.3, 8, Abilities.COMMANDER, Abilities.NONE, Abilities.STORM_DRAIN, 475, 68, 50, 60, 120, 95, 82, 100, 50, 166, false, null, true), - ), - new PokemonSpecies(Species.ANNIHILAPE, 9, false, false, false, "Rage Monkey Pokémon", PokemonType.FIGHTING, PokemonType.GHOST, 1.2, 56, Abilities.VITAL_SPIRIT, Abilities.INNER_FOCUS, Abilities.DEFIANT, 535, 110, 115, 80, 50, 90, 90, 45, 50, 268, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.CLODSIRE, 9, false, false, false, "Spiny Fish Pokémon", PokemonType.POISON, PokemonType.GROUND, 1.8, 223, Abilities.POISON_POINT, Abilities.WATER_ABSORB, Abilities.UNAWARE, 430, 130, 75, 60, 45, 100, 20, 90, 50, 151, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.FARIGIRAF, 9, false, false, false, "Long Neck Pokémon", PokemonType.NORMAL, PokemonType.PSYCHIC, 3.2, 160, Abilities.CUD_CHEW, Abilities.ARMOR_TAIL, Abilities.SAP_SIPPER, 520, 120, 90, 70, 110, 70, 60, 45, 50, 260, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.DUDUNSPARCE, 9, false, false, false, "Land Snake Pokémon", PokemonType.NORMAL, null, 3.6, 39.2, Abilities.SERENE_GRACE, Abilities.RUN_AWAY, Abilities.RATTLED, 520, 125, 100, 80, 85, 75, 55, 45, 50, 182, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Two-Segment Form", "two-segment", PokemonType.NORMAL, null, 3.6, 39.2, Abilities.SERENE_GRACE, Abilities.RUN_AWAY, Abilities.RATTLED, 520, 125, 100, 80, 85, 75, 55, 45, 50, 182, false, ""), - new PokemonForm("Three-Segment Form", "three-segment", PokemonType.NORMAL, null, 4.5, 47.4, Abilities.SERENE_GRACE, Abilities.RUN_AWAY, Abilities.RATTLED, 520, 125, 100, 80, 85, 75, 55, 45, 50, 182), - ), - new PokemonSpecies(Species.KINGAMBIT, 9, false, false, false, "Big Blade Pokémon", PokemonType.DARK, PokemonType.STEEL, 2, 120, Abilities.DEFIANT, Abilities.SUPREME_OVERLORD, Abilities.PRESSURE, 550, 100, 135, 120, 60, 85, 50, 25, 50, 275, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.GREAT_TUSK, 9, false, false, false, "Paradox Pokémon", PokemonType.GROUND, PokemonType.FIGHTING, 2.2, 320, Abilities.PROTOSYNTHESIS, Abilities.NONE, Abilities.NONE, 570, 115, 131, 131, 53, 53, 87, 30, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.SCREAM_TAIL, 9, false, false, false, "Paradox Pokémon", PokemonType.FAIRY, PokemonType.PSYCHIC, 1.2, 8, Abilities.PROTOSYNTHESIS, Abilities.NONE, Abilities.NONE, 570, 115, 65, 99, 65, 115, 111, 50, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.BRUTE_BONNET, 9, false, false, false, "Paradox Pokémon", PokemonType.GRASS, PokemonType.DARK, 1.2, 21, Abilities.PROTOSYNTHESIS, Abilities.NONE, Abilities.NONE, 570, 111, 127, 99, 79, 99, 55, 50, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.FLUTTER_MANE, 9, false, false, false, "Paradox Pokémon", PokemonType.GHOST, PokemonType.FAIRY, 1.4, 4, Abilities.PROTOSYNTHESIS, Abilities.NONE, Abilities.NONE, 570, 55, 55, 55, 135, 135, 135, 30, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.SLITHER_WING, 9, false, false, false, "Paradox Pokémon", PokemonType.BUG, PokemonType.FIGHTING, 3.2, 92, Abilities.PROTOSYNTHESIS, Abilities.NONE, Abilities.NONE, 570, 85, 135, 79, 85, 105, 81, 30, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.SANDY_SHOCKS, 9, false, false, false, "Paradox Pokémon", PokemonType.ELECTRIC, PokemonType.GROUND, 2.3, 60, Abilities.PROTOSYNTHESIS, Abilities.NONE, Abilities.NONE, 570, 85, 81, 97, 121, 85, 101, 30, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.IRON_TREADS, 9, false, false, false, "Paradox Pokémon", PokemonType.GROUND, PokemonType.STEEL, 0.9, 240, Abilities.QUARK_DRIVE, Abilities.NONE, Abilities.NONE, 570, 90, 112, 120, 72, 70, 106, 30, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.IRON_BUNDLE, 9, false, false, false, "Paradox Pokémon", PokemonType.ICE, PokemonType.WATER, 0.6, 11, Abilities.QUARK_DRIVE, Abilities.NONE, Abilities.NONE, 570, 56, 80, 114, 124, 60, 136, 50, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.IRON_HANDS, 9, false, false, false, "Paradox Pokémon", PokemonType.FIGHTING, PokemonType.ELECTRIC, 1.8, 380.7, Abilities.QUARK_DRIVE, Abilities.NONE, Abilities.NONE, 570, 154, 140, 108, 50, 68, 50, 50, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.IRON_JUGULIS, 9, false, false, false, "Paradox Pokémon", PokemonType.DARK, PokemonType.FLYING, 1.3, 111, Abilities.QUARK_DRIVE, Abilities.NONE, Abilities.NONE, 570, 94, 80, 86, 122, 80, 108, 30, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.IRON_MOTH, 9, false, false, false, "Paradox Pokémon", PokemonType.FIRE, PokemonType.POISON, 1.2, 36, Abilities.QUARK_DRIVE, Abilities.NONE, Abilities.NONE, 570, 80, 70, 60, 140, 110, 110, 30, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.IRON_THORNS, 9, false, false, false, "Paradox Pokémon", PokemonType.ROCK, PokemonType.ELECTRIC, 1.6, 303, Abilities.QUARK_DRIVE, Abilities.NONE, Abilities.NONE, 570, 100, 134, 110, 70, 84, 72, 30, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.FRIGIBAX, 9, false, false, false, "Ice Fin Pokémon", PokemonType.DRAGON, PokemonType.ICE, 0.5, 17, Abilities.THERMAL_EXCHANGE, Abilities.NONE, Abilities.ICE_BODY, 320, 65, 75, 45, 35, 45, 55, 45, 50, 64, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.ARCTIBAX, 9, false, false, false, "Ice Fin Pokémon", PokemonType.DRAGON, PokemonType.ICE, 0.8, 30, Abilities.THERMAL_EXCHANGE, Abilities.NONE, Abilities.ICE_BODY, 423, 90, 95, 66, 45, 65, 62, 25, 50, 148, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.BAXCALIBUR, 9, false, false, false, "Ice Dragon Pokémon", PokemonType.DRAGON, PokemonType.ICE, 2.1, 210, Abilities.THERMAL_EXCHANGE, Abilities.NONE, Abilities.ICE_BODY, 600, 115, 145, 92, 75, 86, 87, 10, 50, 300, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.GIMMIGHOUL, 9, false, false, false, "Coin Chest Pokémon", PokemonType.GHOST, null, 0.3, 5, Abilities.RATTLED, Abilities.NONE, Abilities.NONE, 300, 45, 30, 70, 75, 70, 10, 45, 50, 60, GrowthRate.SLOW, null, false, false, - new PokemonForm("Chest Form", "chest", PokemonType.GHOST, null, 0.3, 5, Abilities.RATTLED, Abilities.NONE, Abilities.NONE, 300, 45, 30, 70, 75, 70, 10, 45, 50, 60, false, "", true), - new PokemonForm("Roaming Form", "roaming", PokemonType.GHOST, null, 0.1, 1, Abilities.RUN_AWAY, Abilities.NONE, Abilities.NONE, 300, 45, 30, 25, 75, 45, 80, 45, 50, 60, false, null, true), - ), - new PokemonSpecies(Species.GHOLDENGO, 9, false, false, false, "Coin Entity Pokémon", PokemonType.STEEL, PokemonType.GHOST, 1.2, 30, Abilities.GOOD_AS_GOLD, Abilities.NONE, Abilities.NONE, 550, 87, 60, 95, 133, 91, 84, 45, 50, 275, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.WO_CHIEN, 9, true, false, false, "Ruinous Pokémon", PokemonType.DARK, PokemonType.GRASS, 1.5, 74.2, Abilities.TABLETS_OF_RUIN, Abilities.NONE, Abilities.NONE, 570, 85, 85, 100, 95, 135, 70, 6, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.CHIEN_PAO, 9, true, false, false, "Ruinous Pokémon", PokemonType.DARK, PokemonType.ICE, 1.9, 152.2, Abilities.SWORD_OF_RUIN, Abilities.NONE, Abilities.NONE, 570, 80, 120, 80, 90, 65, 135, 6, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.TING_LU, 9, true, false, false, "Ruinous Pokémon", PokemonType.DARK, PokemonType.GROUND, 2.7, 699.7, Abilities.VESSEL_OF_RUIN, Abilities.NONE, Abilities.NONE, 570, 155, 110, 125, 55, 80, 45, 6, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.CHI_YU, 9, true, false, false, "Ruinous Pokémon", PokemonType.DARK, PokemonType.FIRE, 0.4, 4.9, Abilities.BEADS_OF_RUIN, Abilities.NONE, Abilities.NONE, 570, 55, 80, 80, 135, 120, 100, 6, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.ROARING_MOON, 9, false, false, false, "Paradox Pokémon", PokemonType.DRAGON, PokemonType.DARK, 2, 380, Abilities.PROTOSYNTHESIS, Abilities.NONE, Abilities.NONE, 590, 105, 139, 71, 55, 101, 119, 10, 0, 295, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.IRON_VALIANT, 9, false, false, false, "Paradox Pokémon", PokemonType.FAIRY, PokemonType.FIGHTING, 1.4, 35, Abilities.QUARK_DRIVE, Abilities.NONE, Abilities.NONE, 590, 74, 130, 90, 120, 60, 116, 10, 0, 295, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.KORAIDON, 9, false, true, false, "Paradox Pokémon", PokemonType.FIGHTING, PokemonType.DRAGON, 2.5, 303, Abilities.ORICHALCUM_PULSE, Abilities.NONE, Abilities.NONE, 670, 100, 135, 115, 85, 100, 135, 3, 0, 335, GrowthRate.SLOW, null, false, false, - new PokemonForm("Apex Build", "apex-build", PokemonType.FIGHTING, PokemonType.DRAGON, 2.5, 303, Abilities.ORICHALCUM_PULSE, Abilities.NONE, Abilities.NONE, 670, 100, 135, 115, 85, 100, 135, 3, 0, 335, false, null, true), - ), - new PokemonSpecies(Species.MIRAIDON, 9, false, true, false, "Paradox Pokémon", PokemonType.ELECTRIC, PokemonType.DRAGON, 3.5, 240, Abilities.HADRON_ENGINE, Abilities.NONE, Abilities.NONE, 670, 100, 85, 100, 135, 115, 135, 3, 0, 335, GrowthRate.SLOW, null, false, false, - new PokemonForm("Ultimate Mode", "ultimate-mode", PokemonType.ELECTRIC, PokemonType.DRAGON, 3.5, 240, Abilities.HADRON_ENGINE, Abilities.NONE, Abilities.NONE, 670, 100, 85, 100, 135, 115, 135, 3, 0, 335, false, null, true), - ), - new PokemonSpecies(Species.WALKING_WAKE, 9, false, false, false, "Paradox Pokémon", PokemonType.WATER, PokemonType.DRAGON, 3.5, 280, Abilities.PROTOSYNTHESIS, Abilities.NONE, Abilities.NONE, 590, 99, 83, 91, 125, 83, 109, 10, 0, 295, GrowthRate.SLOW, null, false), //Custom Catchrate, matching Gouging Fire and Raging Bolt - new PokemonSpecies(Species.IRON_LEAVES, 9, false, false, false, "Paradox Pokémon", PokemonType.GRASS, PokemonType.PSYCHIC, 1.5, 125, Abilities.QUARK_DRIVE, Abilities.NONE, Abilities.NONE, 590, 90, 130, 88, 70, 108, 104, 10, 0, 295, GrowthRate.SLOW, null, false), //Custom Catchrate, matching Iron Boulder and Iron Crown - new PokemonSpecies(Species.DIPPLIN, 9, false, false, false, "Candy Apple Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 0.4, 4.4, Abilities.SUPERSWEET_SYRUP, Abilities.GLUTTONY, Abilities.STICKY_HOLD, 485, 80, 80, 110, 95, 80, 40, 45, 50, 170, GrowthRate.ERRATIC, 50, false), - new PokemonSpecies(Species.POLTCHAGEIST, 9, false, false, false, "Matcha Pokémon", PokemonType.GRASS, PokemonType.GHOST, 0.1, 1.1, Abilities.HOSPITALITY, Abilities.NONE, Abilities.HEATPROOF, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, GrowthRate.SLOW, null, false, false, - new PokemonForm("Counterfeit Form", "counterfeit", PokemonType.GRASS, PokemonType.GHOST, 0.1, 1.1, Abilities.HOSPITALITY, Abilities.NONE, Abilities.HEATPROOF, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, null, true), - new PokemonForm("Artisan Form", "artisan", PokemonType.GRASS, PokemonType.GHOST, 0.1, 1.1, Abilities.HOSPITALITY, Abilities.NONE, Abilities.HEATPROOF, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, null, false, true), - ), - new PokemonSpecies(Species.SINISTCHA, 9, false, false, false, "Matcha Pokémon", PokemonType.GRASS, PokemonType.GHOST, 0.2, 2.2, Abilities.HOSPITALITY, Abilities.NONE, Abilities.HEATPROOF, 508, 71, 60, 106, 121, 80, 70, 60, 50, 178, GrowthRate.SLOW, null, false, false, - new PokemonForm("Unremarkable Form", "unremarkable", PokemonType.GRASS, PokemonType.GHOST, 0.2, 2.2, Abilities.HOSPITALITY, Abilities.NONE, Abilities.HEATPROOF, 508, 71, 60, 106, 121, 80, 70, 60, 50, 178), - new PokemonForm("Masterpiece Form", "masterpiece", PokemonType.GRASS, PokemonType.GHOST, 0.2, 2.2, Abilities.HOSPITALITY, Abilities.NONE, Abilities.HEATPROOF, 508, 71, 60, 106, 121, 80, 70, 60, 50, 178, false, null, false, true), - ), - new PokemonSpecies(Species.OKIDOGI, 9, true, false, false, "Retainer Pokémon", PokemonType.POISON, PokemonType.FIGHTING, 1.8, 92.2, Abilities.TOXIC_CHAIN, Abilities.NONE, Abilities.GUARD_DOG, 555, 88, 128, 115, 58, 86, 80, 3, 0, 276, GrowthRate.SLOW, 100, false), - new PokemonSpecies(Species.MUNKIDORI, 9, true, false, false, "Retainer Pokémon", PokemonType.POISON, PokemonType.PSYCHIC, 1, 12.2, Abilities.TOXIC_CHAIN, Abilities.NONE, Abilities.FRISK, 555, 88, 75, 66, 130, 90, 106, 3, 0, 276, GrowthRate.SLOW, 100, false), - new PokemonSpecies(Species.FEZANDIPITI, 9, true, false, false, "Retainer Pokémon", PokemonType.POISON, PokemonType.FAIRY, 1.4, 30.1, Abilities.TOXIC_CHAIN, Abilities.NONE, Abilities.TECHNICIAN, 555, 88, 91, 82, 70, 125, 99, 3, 0, 276, GrowthRate.SLOW, 100, false), - new PokemonSpecies(Species.OGERPON, 9, true, false, false, "Mask Pokémon", PokemonType.GRASS, null, 1.2, 39.8, Abilities.DEFIANT, Abilities.NONE, Abilities.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275, GrowthRate.SLOW, 0, false, false, - new PokemonForm("Teal Mask", "teal-mask", PokemonType.GRASS, null, 1.2, 39.8, Abilities.DEFIANT, Abilities.NONE, Abilities.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275, false, null, true), - new PokemonForm("Wellspring Mask", "wellspring-mask", PokemonType.GRASS, PokemonType.WATER, 1.2, 39.8, Abilities.WATER_ABSORB, Abilities.NONE, Abilities.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), - new PokemonForm("Hearthflame Mask", "hearthflame-mask", PokemonType.GRASS, PokemonType.FIRE, 1.2, 39.8, Abilities.MOLD_BREAKER, Abilities.NONE, Abilities.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), - new PokemonForm("Cornerstone Mask", "cornerstone-mask", PokemonType.GRASS, PokemonType.ROCK, 1.2, 39.8, Abilities.STURDY, Abilities.NONE, Abilities.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), - new PokemonForm("Teal Mask Terastallized", "teal-mask-tera", PokemonType.GRASS, null, 1.2, 39.8, Abilities.EMBODY_ASPECT_TEAL, Abilities.NONE, Abilities.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), - new PokemonForm("Wellspring Mask Terastallized", "wellspring-mask-tera", PokemonType.GRASS, PokemonType.WATER, 1.2, 39.8, Abilities.EMBODY_ASPECT_WELLSPRING, Abilities.NONE, Abilities.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), - new PokemonForm("Hearthflame Mask Terastallized", "hearthflame-mask-tera", PokemonType.GRASS, PokemonType.FIRE, 1.2, 39.8, Abilities.EMBODY_ASPECT_HEARTHFLAME, Abilities.NONE, Abilities.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), - new PokemonForm("Cornerstone Mask Terastallized", "cornerstone-mask-tera", PokemonType.GRASS, PokemonType.ROCK, 1.2, 39.8, Abilities.EMBODY_ASPECT_CORNERSTONE, Abilities.NONE, Abilities.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), - ), - new PokemonSpecies(Species.ARCHALUDON, 9, false, false, false, "Alloy Pokémon", PokemonType.STEEL, PokemonType.DRAGON, 2, 60, Abilities.STAMINA, Abilities.STURDY, Abilities.STALWART, 600, 90, 105, 130, 125, 65, 85, 10, 50, 300, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.HYDRAPPLE, 9, false, false, false, "Apple Hydra Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 1.8, 93, Abilities.SUPERSWEET_SYRUP, Abilities.REGENERATOR, Abilities.STICKY_HOLD, 540, 106, 80, 110, 120, 80, 44, 10, 50, 270, GrowthRate.ERRATIC, 50, false), - new PokemonSpecies(Species.GOUGING_FIRE, 9, false, false, false, "Paradox Pokémon", PokemonType.FIRE, PokemonType.DRAGON, 3.5, 590, Abilities.PROTOSYNTHESIS, Abilities.NONE, Abilities.NONE, 590, 105, 115, 121, 65, 93, 91, 10, 0, 295, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.RAGING_BOLT, 9, false, false, false, "Paradox Pokémon", PokemonType.ELECTRIC, PokemonType.DRAGON, 5.2, 480, Abilities.PROTOSYNTHESIS, Abilities.NONE, Abilities.NONE, 590, 125, 73, 91, 137, 89, 75, 10, 0, 295, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.IRON_BOULDER, 9, false, false, false, "Paradox Pokémon", PokemonType.ROCK, PokemonType.PSYCHIC, 1.5, 162.5, Abilities.QUARK_DRIVE, Abilities.NONE, Abilities.NONE, 590, 90, 120, 80, 68, 108, 124, 10, 0, 295, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.IRON_CROWN, 9, false, false, false, "Paradox Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 1.6, 156, Abilities.QUARK_DRIVE, Abilities.NONE, Abilities.NONE, 590, 90, 72, 100, 122, 108, 98, 10, 0, 295, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.TERAPAGOS, 9, false, true, false, "Tera Pokémon", PokemonType.NORMAL, null, 0.2, 6.5, Abilities.TERA_SHIFT, Abilities.NONE, Abilities.NONE, 450, 90, 65, 85, 65, 85, 60, 5, 50, 90, GrowthRate.SLOW, 50, false, false, - new PokemonForm("Normal Form", "", PokemonType.NORMAL, null, 0.2, 6.5, Abilities.TERA_SHIFT, Abilities.NONE, Abilities.NONE, 450, 90, 65, 85, 65, 85, 60, 5, 50, 90, false, null, true), - new PokemonForm("Terastal Form", "terastal", PokemonType.NORMAL, null, 0.3, 16, Abilities.TERA_SHELL, Abilities.NONE, Abilities.NONE, 600, 95, 95, 110, 105, 110, 85, 5, 50, 120), - new PokemonForm("Stellar Form", "stellar", PokemonType.NORMAL, null, 1.7, 77, Abilities.TERAFORM_ZERO, Abilities.NONE, Abilities.NONE, 700, 160, 105, 110, 130, 110, 85, 5, 50, 140), - ), - new PokemonSpecies(Species.PECHARUNT, 9, false, false, true, "Subjugation Pokémon", PokemonType.POISON, PokemonType.GHOST, 0.3, 0.3, Abilities.POISON_PUPPETEER, Abilities.NONE, Abilities.NONE, 600, 88, 88, 160, 88, 88, 88, 3, 0, 300, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.ALOLA_RATTATA, 7, false, false, false, "Mouse Pokémon", PokemonType.DARK, PokemonType.NORMAL, 0.3, 3.8, Abilities.GLUTTONY, Abilities.HUSTLE, Abilities.THICK_FAT, 253, 30, 56, 35, 25, 35, 72, 255, 70, 51, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.ALOLA_RATICATE, 7, false, false, false, "Mouse Pokémon", PokemonType.DARK, PokemonType.NORMAL, 0.7, 25.5, Abilities.GLUTTONY, Abilities.HUSTLE, Abilities.THICK_FAT, 413, 75, 71, 70, 40, 80, 77, 127, 70, 145, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.ALOLA_RAICHU, 7, false, false, false, "Mouse Pokémon", PokemonType.ELECTRIC, PokemonType.PSYCHIC, 0.7, 21, Abilities.SURGE_SURFER, Abilities.NONE, Abilities.NONE, 485, 60, 85, 50, 95, 85, 110, 75, 50, 243, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.ALOLA_SANDSHREW, 7, false, false, false, "Mouse Pokémon", PokemonType.ICE, PokemonType.STEEL, 0.7, 40, Abilities.SNOW_CLOAK, Abilities.NONE, Abilities.SLUSH_RUSH, 300, 50, 75, 90, 10, 35, 40, 255, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.ALOLA_SANDSLASH, 7, false, false, false, "Mouse Pokémon", PokemonType.ICE, PokemonType.STEEL, 1.2, 55, Abilities.SNOW_CLOAK, Abilities.NONE, Abilities.SLUSH_RUSH, 450, 75, 100, 120, 25, 65, 65, 90, 50, 158, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.ALOLA_VULPIX, 7, false, false, false, "Fox Pokémon", PokemonType.ICE, null, 0.6, 9.9, Abilities.SNOW_CLOAK, Abilities.NONE, Abilities.SNOW_WARNING, 299, 38, 41, 40, 50, 65, 65, 190, 50, 60, GrowthRate.MEDIUM_FAST, 25, false), - new PokemonSpecies(Species.ALOLA_NINETALES, 7, false, false, false, "Fox Pokémon", PokemonType.ICE, PokemonType.FAIRY, 1.1, 19.9, Abilities.SNOW_CLOAK, Abilities.NONE, Abilities.SNOW_WARNING, 505, 73, 67, 75, 81, 100, 109, 75, 50, 177, GrowthRate.MEDIUM_FAST, 25, false), - new PokemonSpecies(Species.ALOLA_DIGLETT, 7, false, false, false, "Mole Pokémon", PokemonType.GROUND, PokemonType.STEEL, 0.2, 1, Abilities.SAND_VEIL, Abilities.TANGLING_HAIR, Abilities.SAND_FORCE, 265, 10, 55, 30, 35, 45, 90, 255, 50, 53, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.ALOLA_DUGTRIO, 7, false, false, false, "Mole Pokémon", PokemonType.GROUND, PokemonType.STEEL, 0.7, 66.6, Abilities.SAND_VEIL, Abilities.TANGLING_HAIR, Abilities.SAND_FORCE, 425, 35, 100, 60, 50, 70, 110, 50, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.ALOLA_MEOWTH, 7, false, false, false, "Scratch Cat Pokémon", PokemonType.DARK, null, 0.4, 4.2, Abilities.PICKUP, Abilities.TECHNICIAN, Abilities.RATTLED, 290, 40, 35, 35, 50, 40, 90, 255, 50, 58, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.ALOLA_PERSIAN, 7, false, false, false, "Classy Cat Pokémon", PokemonType.DARK, null, 1.1, 33, Abilities.FUR_COAT, Abilities.TECHNICIAN, Abilities.RATTLED, 440, 65, 60, 60, 75, 65, 115, 90, 50, 154, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.ALOLA_GEODUDE, 7, false, false, false, "Rock Pokémon", PokemonType.ROCK, PokemonType.ELECTRIC, 0.4, 20.3, Abilities.MAGNET_PULL, Abilities.STURDY, Abilities.GALVANIZE, 300, 40, 80, 100, 30, 30, 20, 255, 70, 60, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.ALOLA_GRAVELER, 7, false, false, false, "Rock Pokémon", PokemonType.ROCK, PokemonType.ELECTRIC, 1, 110, Abilities.MAGNET_PULL, Abilities.STURDY, Abilities.GALVANIZE, 390, 55, 95, 115, 45, 45, 35, 120, 70, 137, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.ALOLA_GOLEM, 7, false, false, false, "Megaton Pokémon", PokemonType.ROCK, PokemonType.ELECTRIC, 1.7, 316, Abilities.MAGNET_PULL, Abilities.STURDY, Abilities.GALVANIZE, 495, 80, 120, 130, 55, 65, 45, 45, 70, 223, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.ALOLA_GRIMER, 7, false, false, false, "Sludge Pokémon", PokemonType.POISON, PokemonType.DARK, 0.7, 42, Abilities.POISON_TOUCH, Abilities.GLUTTONY, Abilities.POWER_OF_ALCHEMY, 325, 80, 80, 50, 40, 50, 25, 190, 70, 65, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.ALOLA_MUK, 7, false, false, false, "Sludge Pokémon", PokemonType.POISON, PokemonType.DARK, 1, 52, Abilities.POISON_TOUCH, Abilities.GLUTTONY, Abilities.POWER_OF_ALCHEMY, 500, 105, 105, 75, 65, 100, 50, 75, 70, 175, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.ALOLA_EXEGGUTOR, 7, false, false, false, "Coconut Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 10.9, 415.6, Abilities.FRISK, Abilities.NONE, Abilities.HARVEST, 530, 95, 105, 85, 125, 75, 45, 45, 50, 186, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.ALOLA_MAROWAK, 7, false, false, false, "Bone Keeper Pokémon", PokemonType.FIRE, PokemonType.GHOST, 1, 34, Abilities.CURSED_BODY, Abilities.LIGHTNING_ROD, Abilities.ROCK_HEAD, 425, 60, 80, 110, 50, 80, 45, 75, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.ETERNAL_FLOETTE, 6, true, false, false, "Single Bloom Pokémon", PokemonType.FAIRY, null, 0.2, 0.9, Abilities.FLOWER_VEIL, Abilities.NONE, Abilities.SYMBIOSIS, 551, 74, 65, 67, 125, 128, 92, 120, 70, 243, GrowthRate.MEDIUM_FAST, 0, false), //Marked as Sub-Legend, for casing purposes - new PokemonSpecies(Species.GALAR_MEOWTH, 8, false, false, false, "Scratch Cat Pokémon", PokemonType.STEEL, null, 0.4, 7.5, Abilities.PICKUP, Abilities.TOUGH_CLAWS, Abilities.UNNERVE, 290, 50, 65, 55, 40, 40, 40, 255, 50, 58, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.GALAR_PONYTA, 8, false, false, false, "Fire Horse Pokémon", PokemonType.PSYCHIC, null, 0.8, 24, Abilities.RUN_AWAY, Abilities.PASTEL_VEIL, Abilities.ANTICIPATION, 410, 50, 85, 55, 65, 65, 90, 190, 50, 82, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.GALAR_RAPIDASH, 8, false, false, false, "Fire Horse Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 1.7, 80, Abilities.RUN_AWAY, Abilities.PASTEL_VEIL, Abilities.ANTICIPATION, 500, 65, 100, 70, 80, 80, 105, 60, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.GALAR_SLOWPOKE, 8, false, false, false, "Dopey Pokémon", PokemonType.PSYCHIC, null, 1.2, 36, Abilities.GLUTTONY, Abilities.OWN_TEMPO, Abilities.REGENERATOR, 315, 90, 65, 65, 40, 40, 15, 190, 50, 63, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.GALAR_SLOWBRO, 8, false, false, false, "Hermit Crab Pokémon", PokemonType.POISON, PokemonType.PSYCHIC, 1.6, 70.5, Abilities.QUICK_DRAW, Abilities.OWN_TEMPO, Abilities.REGENERATOR, 490, 95, 100, 95, 100, 70, 30, 75, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.GALAR_FARFETCHD, 8, false, false, false, "Wild Duck Pokémon", PokemonType.FIGHTING, null, 0.8, 42, Abilities.STEADFAST, Abilities.NONE, Abilities.SCRAPPY, 377, 52, 95, 55, 58, 62, 55, 45, 50, 132, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.GALAR_WEEZING, 8, false, false, false, "Poison Gas Pokémon", PokemonType.POISON, PokemonType.FAIRY, 3, 16, Abilities.LEVITATE, Abilities.NEUTRALIZING_GAS, Abilities.MISTY_SURGE, 490, 65, 90, 120, 85, 70, 60, 60, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.GALAR_MR_MIME, 8, false, false, false, "Barrier Pokémon", PokemonType.ICE, PokemonType.PSYCHIC, 1.4, 56.8, Abilities.VITAL_SPIRIT, Abilities.SCREEN_CLEANER, Abilities.ICE_BODY, 460, 50, 65, 65, 90, 90, 100, 45, 50, 161, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.GALAR_ARTICUNO, 8, true, false, false, "Freeze Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 1.7, 50.9, Abilities.COMPETITIVE, Abilities.NONE, Abilities.NONE, 580, 90, 85, 85, 125, 100, 95, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.GALAR_ZAPDOS, 8, true, false, false, "Electric Pokémon", PokemonType.FIGHTING, PokemonType.FLYING, 1.6, 58.2, Abilities.DEFIANT, Abilities.NONE, Abilities.NONE, 580, 90, 125, 90, 85, 90, 100, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.GALAR_MOLTRES, 8, true, false, false, "Flame Pokémon", PokemonType.DARK, PokemonType.FLYING, 2, 66, Abilities.BERSERK, Abilities.NONE, Abilities.NONE, 580, 90, 85, 90, 100, 125, 90, 3, 35, 290, GrowthRate.SLOW, null, false), - new PokemonSpecies(Species.GALAR_SLOWKING, 8, false, false, false, "Royal Pokémon", PokemonType.POISON, PokemonType.PSYCHIC, 1.8, 79.5, Abilities.CURIOUS_MEDICINE, Abilities.OWN_TEMPO, Abilities.REGENERATOR, 490, 95, 65, 80, 110, 110, 30, 70, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.GALAR_CORSOLA, 8, false, false, false, "Coral Pokémon", PokemonType.GHOST, null, 0.6, 0.5, Abilities.WEAK_ARMOR, Abilities.NONE, Abilities.CURSED_BODY, 410, 60, 55, 100, 65, 100, 30, 60, 50, 144, GrowthRate.FAST, 25, false), - new PokemonSpecies(Species.GALAR_ZIGZAGOON, 8, false, false, false, "Tiny Raccoon Pokémon", PokemonType.DARK, PokemonType.NORMAL, 0.4, 17.5, Abilities.PICKUP, Abilities.GLUTTONY, Abilities.QUICK_FEET, 240, 38, 30, 41, 30, 41, 60, 255, 50, 56, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.GALAR_LINOONE, 8, false, false, false, "Rushing Pokémon", PokemonType.DARK, PokemonType.NORMAL, 0.5, 32.5, Abilities.PICKUP, Abilities.GLUTTONY, Abilities.QUICK_FEET, 420, 78, 70, 61, 50, 61, 100, 90, 50, 147, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.GALAR_DARUMAKA, 8, false, false, false, "Zen Charm Pokémon", PokemonType.ICE, null, 0.7, 40, Abilities.HUSTLE, Abilities.NONE, Abilities.INNER_FOCUS, 315, 70, 90, 45, 15, 45, 50, 120, 50, 63, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(Species.GALAR_DARMANITAN, 8, false, false, false, "Blazing Pokémon", PokemonType.ICE, null, 1.7, 120, Abilities.GORILLA_TACTICS, Abilities.NONE, Abilities.ZEN_MODE, 480, 105, 140, 55, 30, 55, 95, 60, 50, 168, GrowthRate.MEDIUM_SLOW, 50, false, true, - new PokemonForm("Standard Mode", "", PokemonType.ICE, null, 1.7, 120, Abilities.GORILLA_TACTICS, Abilities.NONE, Abilities.ZEN_MODE, 480, 105, 140, 55, 30, 55, 95, 60, 50, 168, false, null, true), - new PokemonForm("Zen Mode", "zen", PokemonType.ICE, PokemonType.FIRE, 1.7, 120, Abilities.GORILLA_TACTICS, Abilities.NONE, Abilities.ZEN_MODE, 540, 105, 160, 55, 30, 55, 135, 60, 50, 189), - ), - new PokemonSpecies(Species.GALAR_YAMASK, 8, false, false, false, "Spirit Pokémon", PokemonType.GROUND, PokemonType.GHOST, 0.5, 1.5, Abilities.WANDERING_SPIRIT, Abilities.NONE, Abilities.NONE, 303, 38, 55, 85, 30, 65, 30, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.GALAR_STUNFISK, 8, false, false, false, "Trap Pokémon", PokemonType.GROUND, PokemonType.STEEL, 0.7, 20.5, Abilities.MIMICRY, Abilities.NONE, Abilities.NONE, 471, 109, 81, 99, 66, 84, 32, 75, 70, 165, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.HISUI_GROWLITHE, 8, false, false, false, "Puppy Pokémon", PokemonType.FIRE, PokemonType.ROCK, 0.8, 22.7, Abilities.INTIMIDATE, Abilities.FLASH_FIRE, Abilities.ROCK_HEAD, 350, 60, 75, 45, 65, 50, 55, 190, 50, 70, GrowthRate.SLOW, 75, false), - new PokemonSpecies(Species.HISUI_ARCANINE, 8, false, false, false, "Legendary Pokémon", PokemonType.FIRE, PokemonType.ROCK, 2, 168, Abilities.INTIMIDATE, Abilities.FLASH_FIRE, Abilities.ROCK_HEAD, 555, 95, 115, 80, 95, 80, 90, 85, 50, 194, GrowthRate.SLOW, 75, false), - new PokemonSpecies(Species.HISUI_VOLTORB, 8, false, false, false, "Ball Pokémon", PokemonType.ELECTRIC, PokemonType.GRASS, 0.5, 13, Abilities.SOUNDPROOF, Abilities.STATIC, Abilities.AFTERMATH, 330, 40, 30, 50, 55, 55, 100, 190, 80, 66, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(Species.HISUI_ELECTRODE, 8, false, false, false, "Ball Pokémon", PokemonType.ELECTRIC, PokemonType.GRASS, 1.2, 81, Abilities.SOUNDPROOF, Abilities.STATIC, Abilities.AFTERMATH, 490, 60, 50, 70, 80, 80, 150, 60, 70, 172, GrowthRate.MEDIUM_FAST, null, false), - new PokemonSpecies(Species.HISUI_TYPHLOSION, 8, false, false, false, "Volcano Pokémon", PokemonType.FIRE, PokemonType.GHOST, 1.6, 69.8, Abilities.BLAZE, Abilities.NONE, Abilities.FRISK, 534, 73, 84, 78, 119, 85, 95, 45, 70, 240, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.HISUI_QWILFISH, 8, false, false, false, "Balloon Pokémon", PokemonType.DARK, PokemonType.POISON, 0.5, 3.9, Abilities.POISON_POINT, Abilities.SWIFT_SWIM, Abilities.INTIMIDATE, 440, 65, 95, 85, 55, 55, 85, 45, 50, 88, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.HISUI_SNEASEL, 8, false, false, false, "Sharp Claw Pokémon", PokemonType.FIGHTING, PokemonType.POISON, 0.9, 27, Abilities.INNER_FOCUS, Abilities.KEEN_EYE, Abilities.PICKPOCKET, 430, 55, 95, 55, 35, 75, 115, 60, 35, 86, GrowthRate.MEDIUM_SLOW, 50, true), - new PokemonSpecies(Species.HISUI_SAMUROTT, 8, false, false, false, "Formidable Pokémon", PokemonType.WATER, PokemonType.DARK, 1.5, 58.2, Abilities.TORRENT, Abilities.NONE, Abilities.SHARPNESS, 528, 90, 108, 80, 100, 65, 85, 45, 80, 238, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.HISUI_LILLIGANT, 8, false, false, false, "Flowering Pokémon", PokemonType.GRASS, PokemonType.FIGHTING, 1.2, 19.2, Abilities.CHLOROPHYLL, Abilities.HUSTLE, Abilities.LEAF_GUARD, 480, 70, 105, 75, 50, 75, 105, 75, 50, 168, GrowthRate.MEDIUM_FAST, 0, false), - new PokemonSpecies(Species.HISUI_ZORUA, 8, false, false, false, "Tricky Fox Pokémon", PokemonType.NORMAL, PokemonType.GHOST, 0.7, 12.5, Abilities.ILLUSION, Abilities.NONE, Abilities.NONE, 330, 35, 60, 40, 85, 40, 70, 75, 50, 66, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.HISUI_ZOROARK, 8, false, false, false, "Illusion Fox Pokémon", PokemonType.NORMAL, PokemonType.GHOST, 1.6, 83, Abilities.ILLUSION, Abilities.NONE, Abilities.NONE, 510, 55, 100, 60, 125, 60, 110, 45, 50, 179, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.HISUI_BRAVIARY, 8, false, false, false, "Valiant Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 1.7, 43.4, Abilities.KEEN_EYE, Abilities.SHEER_FORCE, Abilities.TINTED_LENS, 510, 110, 83, 70, 112, 70, 65, 60, 50, 179, GrowthRate.SLOW, 100, false), - new PokemonSpecies(Species.HISUI_SLIGGOO, 8, false, false, false, "Soft Tissue Pokémon", PokemonType.STEEL, PokemonType.DRAGON, 0.7, 68.5, Abilities.SAP_SIPPER, Abilities.SHELL_ARMOR, Abilities.GOOEY, 452, 58, 75, 83, 83, 113, 40, 45, 35, 158, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.HISUI_GOODRA, 8, false, false, false, "Dragon Pokémon", PokemonType.STEEL, PokemonType.DRAGON, 1.7, 334.1, Abilities.SAP_SIPPER, Abilities.SHELL_ARMOR, Abilities.GOOEY, 600, 80, 100, 100, 110, 150, 60, 45, 35, 270, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.HISUI_AVALUGG, 8, false, false, false, "Iceberg Pokémon", PokemonType.ICE, PokemonType.ROCK, 1.4, 262.4, Abilities.STRONG_JAW, Abilities.ICE_BODY, Abilities.STURDY, 514, 95, 127, 184, 34, 36, 38, 55, 50, 180, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.HISUI_DECIDUEYE, 8, false, false, false, "Arrow Quill Pokémon", PokemonType.GRASS, PokemonType.FIGHTING, 1.6, 37, Abilities.OVERGROW, Abilities.NONE, Abilities.SCRAPPY, 530, 88, 112, 80, 95, 95, 60, 45, 50, 239, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.PALDEA_TAUROS, 9, false, false, false, "Wild Bull Pokémon", PokemonType.FIGHTING, null, 1.4, 115, Abilities.INTIMIDATE, Abilities.ANGER_POINT, Abilities.CUD_CHEW, 490, 75, 110, 105, 30, 70, 100, 45, 50, 172, GrowthRate.SLOW, 100, false, false, - new PokemonForm("Combat Breed", "combat", PokemonType.FIGHTING, null, 1.4, 115, Abilities.INTIMIDATE, Abilities.ANGER_POINT, Abilities.CUD_CHEW, 490, 75, 110, 105, 30, 70, 100, 45, 50, 172, false, "", true), - new PokemonForm("Blaze Breed", "blaze", PokemonType.FIGHTING, PokemonType.FIRE, 1.4, 85, Abilities.INTIMIDATE, Abilities.ANGER_POINT, Abilities.CUD_CHEW, 490, 75, 110, 105, 30, 70, 100, 45, 50, 172, false, null, true), - new PokemonForm("Aqua Breed", "aqua", PokemonType.FIGHTING, PokemonType.WATER, 1.4, 110, Abilities.INTIMIDATE, Abilities.ANGER_POINT, Abilities.CUD_CHEW, 490, 75, 110, 105, 30, 70, 100, 45, 50, 172, false, null, true), - ), - new PokemonSpecies(Species.PALDEA_WOOPER, 9, false, false, false, "Water Fish Pokémon", PokemonType.POISON, PokemonType.GROUND, 0.4, 11, Abilities.POISON_POINT, Abilities.WATER_ABSORB, Abilities.UNAWARE, 210, 55, 45, 45, 25, 25, 15, 255, 50, 42, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.BLOODMOON_URSALUNA, 9, true, false, false, "Peat Pokémon", PokemonType.GROUND, PokemonType.NORMAL, 2.7, 333, Abilities.MINDS_EYE, Abilities.NONE, Abilities.NONE, 555, 113, 70, 120, 135, 65, 52, 75, 50, 278, GrowthRate.MEDIUM_FAST, 50, false), //Marked as Sub-Legend, for casing purposes + new PokemonSpecies(SpeciesId.BULBASAUR, 1, false, false, false, "Seed Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.7, 6.9, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.CHLOROPHYLL, 318, 45, 49, 49, 65, 65, 45, 45, 50, 64, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.IVYSAUR, 1, false, false, false, "Seed Pokémon", PokemonType.GRASS, PokemonType.POISON, 1, 13, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.CHLOROPHYLL, 405, 60, 62, 63, 80, 80, 60, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.VENUSAUR, 1, false, false, false, "Seed Pokémon", PokemonType.GRASS, PokemonType.POISON, 2, 100, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.CHLOROPHYLL, 525, 80, 82, 83, 100, 100, 80, 45, 50, 263, GrowthRate.MEDIUM_SLOW, 87.5, true, true, + new PokemonForm("Normal", "", PokemonType.GRASS, PokemonType.POISON, 2, 100, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.CHLOROPHYLL, 525, 80, 82, 83, 100, 100, 80, 45, 50, 263, true, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.GRASS, PokemonType.POISON, 2.4, 155.5, AbilityId.THICK_FAT, AbilityId.THICK_FAT, AbilityId.THICK_FAT, 625, 80, 100, 123, 122, 120, 80, 45, 50, 263, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GRASS, PokemonType.POISON, 24, 999.9, AbilityId.EFFECT_SPORE, AbilityId.NONE, AbilityId.EFFECT_SPORE, 625, 120, 122, 90, 108, 105, 80, 45, 50, 263, true), + ), + new PokemonSpecies(SpeciesId.CHARMANDER, 1, false, false, false, "Lizard Pokémon", PokemonType.FIRE, null, 0.6, 8.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.SOLAR_POWER, 309, 39, 52, 43, 60, 50, 65, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.CHARMELEON, 1, false, false, false, "Flame Pokémon", PokemonType.FIRE, null, 1.1, 19, AbilityId.BLAZE, AbilityId.NONE, AbilityId.SOLAR_POWER, 405, 58, 64, 58, 80, 65, 80, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.CHARIZARD, 1, false, false, false, "Flame Pokémon", PokemonType.FIRE, PokemonType.FLYING, 1.7, 90.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.SOLAR_POWER, 534, 78, 84, 78, 109, 85, 100, 45, 50, 267, GrowthRate.MEDIUM_SLOW, 87.5, false, true, + new PokemonForm("Normal", "", PokemonType.FIRE, PokemonType.FLYING, 1.7, 90.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.SOLAR_POWER, 534, 78, 84, 78, 109, 85, 100, 45, 50, 267, false, null, true), + new PokemonForm("Mega X", SpeciesFormKey.MEGA_X, PokemonType.FIRE, PokemonType.DRAGON, 1.7, 110.5, AbilityId.TOUGH_CLAWS, AbilityId.NONE, AbilityId.TOUGH_CLAWS, 634, 78, 130, 111, 130, 85, 100, 45, 50, 267), + new PokemonForm("Mega Y", SpeciesFormKey.MEGA_Y, PokemonType.FIRE, PokemonType.FLYING, 1.7, 100.5, AbilityId.DROUGHT, AbilityId.NONE, AbilityId.DROUGHT, 634, 78, 104, 78, 159, 115, 100, 45, 50, 267), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FIRE, PokemonType.FLYING, 28, 999.9, AbilityId.BERSERK, AbilityId.NONE, AbilityId.BERSERK, 634, 118, 99, 88, 134, 95, 100, 45, 50, 267), + ), + new PokemonSpecies(SpeciesId.SQUIRTLE, 1, false, false, false, "Tiny Turtle Pokémon", PokemonType.WATER, null, 0.5, 9, AbilityId.TORRENT, AbilityId.NONE, AbilityId.RAIN_DISH, 314, 44, 48, 65, 50, 64, 43, 45, 50, 63, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.WARTORTLE, 1, false, false, false, "Turtle Pokémon", PokemonType.WATER, null, 1, 22.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.RAIN_DISH, 405, 59, 63, 80, 65, 80, 58, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.BLASTOISE, 1, false, false, false, "Shellfish Pokémon", PokemonType.WATER, null, 1.6, 85.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.RAIN_DISH, 530, 79, 83, 100, 85, 105, 78, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, + new PokemonForm("Normal", "", PokemonType.WATER, null, 1.6, 85.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.RAIN_DISH, 530, 79, 83, 100, 85, 105, 78, 45, 50, 265, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.WATER, null, 1.6, 101.1, AbilityId.MEGA_LAUNCHER, AbilityId.NONE, AbilityId.MEGA_LAUNCHER, 630, 79, 103, 120, 135, 115, 78, 45, 50, 265), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, PokemonType.STEEL, 25, 999.9, AbilityId.SHELL_ARMOR, AbilityId.NONE, AbilityId.SHELL_ARMOR, 630, 119, 108, 125, 105, 110, 63, 45, 50, 265), + ), + new PokemonSpecies(SpeciesId.CATERPIE, 1, false, false, false, "Worm Pokémon", PokemonType.BUG, null, 0.3, 2.9, AbilityId.SHIELD_DUST, AbilityId.NONE, AbilityId.RUN_AWAY, 195, 45, 30, 35, 20, 20, 45, 255, 50, 39, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.METAPOD, 1, false, false, false, "Cocoon Pokémon", PokemonType.BUG, null, 0.7, 9.9, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.SHED_SKIN, 205, 50, 20, 55, 25, 25, 30, 120, 50, 72, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BUTTERFREE, 1, false, false, false, "Butterfly Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.1, 32, AbilityId.COMPOUND_EYES, AbilityId.NONE, AbilityId.TINTED_LENS, 395, 60, 45, 50, 90, 80, 70, 45, 50, 198, GrowthRate.MEDIUM_FAST, 50, true, true, + new PokemonForm("Normal", "", PokemonType.BUG, PokemonType.FLYING, 1.1, 32, AbilityId.COMPOUND_EYES, AbilityId.NONE, AbilityId.TINTED_LENS, 395, 60, 45, 50, 90, 80, 70, 45, 50, 198, true, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.BUG, PokemonType.FLYING, 17, 999.9, AbilityId.COMPOUND_EYES, AbilityId.NONE, AbilityId.COMPOUND_EYES, 495, 80, 40, 75, 120, 95, 85, 45, 50, 198, true), + ), + new PokemonSpecies(SpeciesId.WEEDLE, 1, false, false, false, "Hairy Bug Pokémon", PokemonType.BUG, PokemonType.POISON, 0.3, 3.2, AbilityId.SHIELD_DUST, AbilityId.NONE, AbilityId.RUN_AWAY, 195, 40, 35, 30, 20, 20, 50, 255, 70, 39, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.KAKUNA, 1, false, false, false, "Cocoon Pokémon", PokemonType.BUG, PokemonType.POISON, 0.6, 10, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.SHED_SKIN, 205, 45, 25, 50, 25, 25, 35, 120, 70, 72, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BEEDRILL, 1, false, false, false, "Poison Bee Pokémon", PokemonType.BUG, PokemonType.POISON, 1, 29.5, AbilityId.SWARM, AbilityId.NONE, AbilityId.SNIPER, 395, 65, 90, 40, 45, 80, 75, 45, 70, 198, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.BUG, PokemonType.POISON, 1, 29.5, AbilityId.SWARM, AbilityId.NONE, AbilityId.SNIPER, 395, 65, 90, 40, 45, 80, 75, 45, 70, 198, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.BUG, PokemonType.POISON, 1.4, 40.5, AbilityId.ADAPTABILITY, AbilityId.NONE, AbilityId.ADAPTABILITY, 495, 65, 150, 40, 15, 80, 145, 45, 70, 198), + ), + new PokemonSpecies(SpeciesId.PIDGEY, 1, false, false, false, "Tiny Bird Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.3, 1.8, AbilityId.KEEN_EYE, AbilityId.TANGLED_FEET, AbilityId.BIG_PECKS, 251, 40, 45, 40, 35, 35, 56, 255, 70, 50, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.PIDGEOTTO, 1, false, false, false, "Bird Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.1, 30, AbilityId.KEEN_EYE, AbilityId.TANGLED_FEET, AbilityId.BIG_PECKS, 349, 63, 60, 55, 50, 50, 71, 120, 70, 122, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.PIDGEOT, 1, false, false, false, "Bird Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.5, 39.5, AbilityId.KEEN_EYE, AbilityId.TANGLED_FEET, AbilityId.BIG_PECKS, 479, 83, 80, 75, 70, 70, 101, 45, 70, 240, GrowthRate.MEDIUM_SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.NORMAL, PokemonType.FLYING, 1.5, 39.5, AbilityId.KEEN_EYE, AbilityId.TANGLED_FEET, AbilityId.BIG_PECKS, 479, 83, 80, 75, 70, 70, 101, 45, 70, 240, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.NORMAL, PokemonType.FLYING, 2.2, 50.5, AbilityId.NO_GUARD, AbilityId.NO_GUARD, AbilityId.NO_GUARD, 579, 83, 80, 80, 135, 80, 121, 45, 70, 240), + ), + new PokemonSpecies(SpeciesId.RATTATA, 1, false, false, false, "Mouse Pokémon", PokemonType.NORMAL, null, 0.3, 3.5, AbilityId.RUN_AWAY, AbilityId.GUTS, AbilityId.HUSTLE, 253, 30, 56, 35, 25, 35, 72, 255, 70, 51, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.RATICATE, 1, false, false, false, "Mouse Pokémon", PokemonType.NORMAL, null, 0.7, 18.5, AbilityId.RUN_AWAY, AbilityId.GUTS, AbilityId.HUSTLE, 413, 55, 81, 60, 50, 70, 97, 127, 70, 145, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.SPEAROW, 1, false, false, false, "Tiny Bird Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.3, 2, AbilityId.KEEN_EYE, AbilityId.NONE, AbilityId.SNIPER, 262, 40, 60, 30, 31, 31, 70, 255, 70, 52, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.FEAROW, 1, false, false, false, "Beak Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.2, 38, AbilityId.KEEN_EYE, AbilityId.NONE, AbilityId.SNIPER, 442, 65, 90, 65, 61, 61, 100, 90, 70, 155, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.EKANS, 1, false, false, false, "Snake Pokémon", PokemonType.POISON, null, 2, 6.9, AbilityId.INTIMIDATE, AbilityId.SHED_SKIN, AbilityId.UNNERVE, 288, 35, 60, 44, 40, 54, 55, 255, 70, 58, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ARBOK, 1, false, false, false, "Cobra Pokémon", PokemonType.POISON, null, 3.5, 65, AbilityId.INTIMIDATE, AbilityId.SHED_SKIN, AbilityId.UNNERVE, 448, 60, 95, 69, 65, 79, 80, 90, 70, 157, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PIKACHU, 1, false, false, false, "Mouse Pokémon", PokemonType.ELECTRIC, null, 0.4, 6, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 320, 35, 55, 40, 50, 50, 90, 190, 50, 112, GrowthRate.MEDIUM_FAST, 50, true, true, + new PokemonForm("Normal", "", PokemonType.ELECTRIC, null, 0.4, 6, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 320, 35, 55, 40, 50, 50, 90, 190, 50, 112, true, null, true), + new PokemonForm("Partner", "partner", PokemonType.ELECTRIC, null, 0.4, 6, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), + new PokemonForm("Cosplay", "cosplay", PokemonType.ELECTRIC, null, 0.4, 6, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom + new PokemonForm("Cool Cosplay", "cool-cosplay", PokemonType.ELECTRIC, null, 0.4, 6, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom + new PokemonForm("Beauty Cosplay", "beauty-cosplay", PokemonType.ELECTRIC, null, 0.4, 6, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom + new PokemonForm("Cute Cosplay", "cute-cosplay", PokemonType.ELECTRIC, null, 0.4, 6, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom + new PokemonForm("Smart Cosplay", "smart-cosplay", PokemonType.ELECTRIC, null, 0.4, 6, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom + new PokemonForm("Tough Cosplay", "tough-cosplay", PokemonType.ELECTRIC, null, 0.4, 6, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.ELECTRIC, null, 21, 999.9, AbilityId.LIGHTNING_ROD, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 530, 125, 95, 60, 90, 70, 90, 190, 50, 112), //+100 BST from Partner Form + ), + new PokemonSpecies(SpeciesId.RAICHU, 1, false, false, false, "Mouse Pokémon", PokemonType.ELECTRIC, null, 0.8, 30, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 485, 60, 90, 55, 90, 80, 110, 75, 50, 243, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.SANDSHREW, 1, false, false, false, "Mouse Pokémon", PokemonType.GROUND, null, 0.6, 12, AbilityId.SAND_VEIL, AbilityId.NONE, AbilityId.SAND_RUSH, 300, 50, 75, 85, 20, 30, 40, 255, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SANDSLASH, 1, false, false, false, "Mouse Pokémon", PokemonType.GROUND, null, 1, 29.5, AbilityId.SAND_VEIL, AbilityId.NONE, AbilityId.SAND_RUSH, 450, 75, 100, 110, 45, 55, 65, 90, 50, 158, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.NIDORAN_F, 1, false, false, false, "Poison Pin Pokémon", PokemonType.POISON, null, 0.4, 7, AbilityId.POISON_POINT, AbilityId.RIVALRY, AbilityId.HUSTLE, 275, 55, 47, 52, 40, 40, 41, 235, 50, 55, GrowthRate.MEDIUM_SLOW, 0, false), + new PokemonSpecies(SpeciesId.NIDORINA, 1, false, false, false, "Poison Pin Pokémon", PokemonType.POISON, null, 0.8, 20, AbilityId.POISON_POINT, AbilityId.RIVALRY, AbilityId.HUSTLE, 365, 70, 62, 67, 55, 55, 56, 120, 50, 128, GrowthRate.MEDIUM_SLOW, 0, false), + new PokemonSpecies(SpeciesId.NIDOQUEEN, 1, false, false, false, "Drill Pokémon", PokemonType.POISON, PokemonType.GROUND, 1.3, 60, AbilityId.POISON_POINT, AbilityId.RIVALRY, AbilityId.SHEER_FORCE, 505, 90, 92, 87, 75, 85, 76, 45, 50, 253, GrowthRate.MEDIUM_SLOW, 0, false), + new PokemonSpecies(SpeciesId.NIDORAN_M, 1, false, false, false, "Poison Pin Pokémon", PokemonType.POISON, null, 0.5, 9, AbilityId.POISON_POINT, AbilityId.RIVALRY, AbilityId.HUSTLE, 273, 46, 57, 40, 40, 40, 50, 235, 50, 55, GrowthRate.MEDIUM_SLOW, 100, false), + new PokemonSpecies(SpeciesId.NIDORINO, 1, false, false, false, "Poison Pin Pokémon", PokemonType.POISON, null, 0.9, 19.5, AbilityId.POISON_POINT, AbilityId.RIVALRY, AbilityId.HUSTLE, 365, 61, 72, 57, 55, 55, 65, 120, 50, 128, GrowthRate.MEDIUM_SLOW, 100, false), + new PokemonSpecies(SpeciesId.NIDOKING, 1, false, false, false, "Drill Pokémon", PokemonType.POISON, PokemonType.GROUND, 1.4, 62, AbilityId.POISON_POINT, AbilityId.RIVALRY, AbilityId.SHEER_FORCE, 505, 81, 102, 77, 85, 75, 85, 45, 50, 253, GrowthRate.MEDIUM_SLOW, 100, false), + new PokemonSpecies(SpeciesId.CLEFAIRY, 1, false, false, false, "Fairy Pokémon", PokemonType.FAIRY, null, 0.6, 7.5, AbilityId.CUTE_CHARM, AbilityId.MAGIC_GUARD, AbilityId.FRIEND_GUARD, 323, 70, 45, 48, 60, 65, 35, 150, 140, 113, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.CLEFABLE, 1, false, false, false, "Fairy Pokémon", PokemonType.FAIRY, null, 1.3, 40, AbilityId.CUTE_CHARM, AbilityId.MAGIC_GUARD, AbilityId.UNAWARE, 483, 95, 70, 73, 95, 90, 60, 25, 140, 242, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.VULPIX, 1, false, false, false, "Fox Pokémon", PokemonType.FIRE, null, 0.6, 9.9, AbilityId.FLASH_FIRE, AbilityId.NONE, AbilityId.DROUGHT, 299, 38, 41, 40, 50, 65, 65, 190, 50, 60, GrowthRate.MEDIUM_FAST, 25, false), + new PokemonSpecies(SpeciesId.NINETALES, 1, false, false, false, "Fox Pokémon", PokemonType.FIRE, null, 1.1, 19.9, AbilityId.FLASH_FIRE, AbilityId.NONE, AbilityId.DROUGHT, 505, 73, 76, 75, 81, 100, 100, 75, 50, 177, GrowthRate.MEDIUM_FAST, 25, false), + new PokemonSpecies(SpeciesId.JIGGLYPUFF, 1, false, false, false, "Balloon Pokémon", PokemonType.NORMAL, PokemonType.FAIRY, 0.5, 5.5, AbilityId.CUTE_CHARM, AbilityId.COMPETITIVE, AbilityId.FRIEND_GUARD, 270, 115, 45, 20, 45, 25, 20, 170, 50, 95, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.WIGGLYTUFF, 1, false, false, false, "Balloon Pokémon", PokemonType.NORMAL, PokemonType.FAIRY, 1, 12, AbilityId.CUTE_CHARM, AbilityId.COMPETITIVE, AbilityId.FRISK, 435, 140, 70, 45, 85, 50, 45, 50, 50, 218, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.ZUBAT, 1, false, false, false, "Bat Pokémon", PokemonType.POISON, PokemonType.FLYING, 0.8, 7.5, AbilityId.INNER_FOCUS, AbilityId.NONE, AbilityId.INFILTRATOR, 245, 40, 45, 35, 30, 40, 55, 255, 50, 49, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.GOLBAT, 1, false, false, false, "Bat Pokémon", PokemonType.POISON, PokemonType.FLYING, 1.6, 55, AbilityId.INNER_FOCUS, AbilityId.NONE, AbilityId.INFILTRATOR, 455, 75, 80, 70, 65, 75, 90, 90, 50, 159, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.ODDISH, 1, false, false, false, "Weed Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.5, 5.4, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.RUN_AWAY, 320, 45, 50, 55, 75, 65, 30, 255, 50, 64, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.GLOOM, 1, false, false, false, "Weed Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.8, 8.6, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.STENCH, 395, 60, 65, 70, 85, 75, 40, 120, 50, 138, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.VILEPLUME, 1, false, false, false, "Flower Pokémon", PokemonType.GRASS, PokemonType.POISON, 1.2, 18.6, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.EFFECT_SPORE, 490, 75, 80, 85, 110, 90, 50, 45, 50, 245, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.PARAS, 1, false, false, false, "Mushroom Pokémon", PokemonType.BUG, PokemonType.GRASS, 0.3, 5.4, AbilityId.EFFECT_SPORE, AbilityId.DRY_SKIN, AbilityId.DAMP, 285, 35, 70, 55, 45, 55, 25, 190, 70, 57, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PARASECT, 1, false, false, false, "Mushroom Pokémon", PokemonType.BUG, PokemonType.GRASS, 1, 29.5, AbilityId.EFFECT_SPORE, AbilityId.DRY_SKIN, AbilityId.DAMP, 405, 60, 95, 80, 60, 80, 30, 75, 70, 142, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.VENONAT, 1, false, false, false, "Insect Pokémon", PokemonType.BUG, PokemonType.POISON, 1, 30, AbilityId.COMPOUND_EYES, AbilityId.TINTED_LENS, AbilityId.RUN_AWAY, 305, 60, 55, 50, 40, 55, 45, 190, 70, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.VENOMOTH, 1, false, false, false, "Poison Moth Pokémon", PokemonType.BUG, PokemonType.POISON, 1.5, 12.5, AbilityId.SHIELD_DUST, AbilityId.TINTED_LENS, AbilityId.WONDER_SKIN, 450, 70, 65, 60, 90, 75, 90, 75, 70, 158, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DIGLETT, 1, false, false, false, "Mole Pokémon", PokemonType.GROUND, null, 0.2, 0.8, AbilityId.SAND_VEIL, AbilityId.ARENA_TRAP, AbilityId.SAND_FORCE, 265, 10, 55, 25, 35, 45, 95, 255, 50, 53, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DUGTRIO, 1, false, false, false, "Mole Pokémon", PokemonType.GROUND, null, 0.7, 33.3, AbilityId.SAND_VEIL, AbilityId.ARENA_TRAP, AbilityId.SAND_FORCE, 425, 35, 100, 50, 50, 70, 120, 50, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MEOWTH, 1, false, false, false, "Scratch Cat Pokémon", PokemonType.NORMAL, null, 0.4, 4.2, AbilityId.PICKUP, AbilityId.TECHNICIAN, AbilityId.UNNERVE, 290, 40, 45, 35, 40, 40, 90, 255, 50, 58, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.NORMAL, null, 0.4, 4.2, AbilityId.PICKUP, AbilityId.TECHNICIAN, AbilityId.UNNERVE, 290, 40, 45, 35, 40, 40, 90, 255, 50, 58, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.NORMAL, null, 33, 999.9, AbilityId.TECHNICIAN, AbilityId.TECHNICIAN, AbilityId.TECHNICIAN, 540, 115, 110, 65, 65, 70, 115, 255, 50, 58), //+100 BST from Persian + ), + new PokemonSpecies(SpeciesId.PERSIAN, 1, false, false, false, "Classy Cat Pokémon", PokemonType.NORMAL, null, 1, 32, AbilityId.LIMBER, AbilityId.TECHNICIAN, AbilityId.UNNERVE, 440, 65, 70, 60, 65, 65, 115, 90, 50, 154, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PSYDUCK, 1, false, false, false, "Duck Pokémon", PokemonType.WATER, null, 0.8, 19.6, AbilityId.DAMP, AbilityId.CLOUD_NINE, AbilityId.SWIFT_SWIM, 320, 50, 52, 48, 65, 50, 55, 190, 50, 64, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GOLDUCK, 1, false, false, false, "Duck Pokémon", PokemonType.WATER, null, 1.7, 76.6, AbilityId.DAMP, AbilityId.CLOUD_NINE, AbilityId.SWIFT_SWIM, 500, 80, 82, 78, 95, 80, 85, 75, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MANKEY, 1, false, false, false, "Pig Monkey Pokémon", PokemonType.FIGHTING, null, 0.5, 28, AbilityId.VITAL_SPIRIT, AbilityId.ANGER_POINT, AbilityId.DEFIANT, 305, 40, 80, 35, 35, 45, 70, 190, 70, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PRIMEAPE, 1, false, false, false, "Pig Monkey Pokémon", PokemonType.FIGHTING, null, 1, 32, AbilityId.VITAL_SPIRIT, AbilityId.ANGER_POINT, AbilityId.DEFIANT, 455, 65, 105, 60, 60, 70, 95, 75, 70, 159, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GROWLITHE, 1, false, false, false, "Puppy Pokémon", PokemonType.FIRE, null, 0.7, 19, AbilityId.INTIMIDATE, AbilityId.FLASH_FIRE, AbilityId.JUSTIFIED, 350, 55, 70, 45, 70, 50, 60, 190, 50, 70, GrowthRate.SLOW, 75, false), + new PokemonSpecies(SpeciesId.ARCANINE, 1, false, false, false, "Legendary Pokémon", PokemonType.FIRE, null, 1.9, 155, AbilityId.INTIMIDATE, AbilityId.FLASH_FIRE, AbilityId.JUSTIFIED, 555, 90, 110, 80, 100, 80, 95, 75, 50, 194, GrowthRate.SLOW, 75, false), + new PokemonSpecies(SpeciesId.POLIWAG, 1, false, false, false, "Tadpole Pokémon", PokemonType.WATER, null, 0.6, 12.4, AbilityId.WATER_ABSORB, AbilityId.DAMP, AbilityId.SWIFT_SWIM, 300, 40, 50, 40, 40, 40, 90, 255, 50, 60, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.POLIWHIRL, 1, false, false, false, "Tadpole Pokémon", PokemonType.WATER, null, 1, 20, AbilityId.WATER_ABSORB, AbilityId.DAMP, AbilityId.SWIFT_SWIM, 385, 65, 65, 65, 50, 50, 90, 120, 50, 135, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.POLIWRATH, 1, false, false, false, "Tadpole Pokémon", PokemonType.WATER, PokemonType.FIGHTING, 1.3, 54, AbilityId.WATER_ABSORB, AbilityId.DAMP, AbilityId.SWIFT_SWIM, 510, 90, 95, 95, 70, 90, 70, 45, 50, 255, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.ABRA, 1, false, false, false, "Psi Pokémon", PokemonType.PSYCHIC, null, 0.9, 19.5, AbilityId.SYNCHRONIZE, AbilityId.INNER_FOCUS, AbilityId.MAGIC_GUARD, 310, 25, 20, 15, 105, 55, 90, 200, 50, 62, GrowthRate.MEDIUM_SLOW, 75, false), + new PokemonSpecies(SpeciesId.KADABRA, 1, false, false, false, "Psi Pokémon", PokemonType.PSYCHIC, null, 1.3, 56.5, AbilityId.SYNCHRONIZE, AbilityId.INNER_FOCUS, AbilityId.MAGIC_GUARD, 400, 40, 35, 30, 120, 70, 105, 100, 50, 140, GrowthRate.MEDIUM_SLOW, 75, true), + new PokemonSpecies(SpeciesId.ALAKAZAM, 1, false, false, false, "Psi Pokémon", PokemonType.PSYCHIC, null, 1.5, 48, AbilityId.SYNCHRONIZE, AbilityId.INNER_FOCUS, AbilityId.MAGIC_GUARD, 500, 55, 50, 45, 135, 95, 120, 50, 50, 250, GrowthRate.MEDIUM_SLOW, 75, true, true, + new PokemonForm("Normal", "", PokemonType.PSYCHIC, null, 1.5, 48, AbilityId.SYNCHRONIZE, AbilityId.INNER_FOCUS, AbilityId.MAGIC_GUARD, 500, 55, 50, 45, 135, 95, 120, 50, 50, 250, true, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.PSYCHIC, null, 1.2, 48, AbilityId.TRACE, AbilityId.TRACE, AbilityId.TRACE, 600, 55, 50, 65, 175, 105, 150, 50, 50, 250, true), + ), + new PokemonSpecies(SpeciesId.MACHOP, 1, false, false, false, "Superpower Pokémon", PokemonType.FIGHTING, null, 0.8, 19.5, AbilityId.GUTS, AbilityId.NO_GUARD, AbilityId.STEADFAST, 305, 70, 80, 50, 35, 35, 35, 180, 50, 61, GrowthRate.MEDIUM_SLOW, 75, false), + new PokemonSpecies(SpeciesId.MACHOKE, 1, false, false, false, "Superpower Pokémon", PokemonType.FIGHTING, null, 1.5, 70.5, AbilityId.GUTS, AbilityId.NO_GUARD, AbilityId.STEADFAST, 405, 80, 100, 70, 50, 60, 45, 90, 50, 142, GrowthRate.MEDIUM_SLOW, 75, false), + new PokemonSpecies(SpeciesId.MACHAMP, 1, false, false, false, "Superpower Pokémon", PokemonType.FIGHTING, null, 1.6, 130, AbilityId.GUTS, AbilityId.NO_GUARD, AbilityId.STEADFAST, 505, 90, 130, 80, 65, 85, 55, 45, 50, 253, GrowthRate.MEDIUM_SLOW, 75, false, true, + new PokemonForm("Normal", "", PokemonType.FIGHTING, null, 1.6, 130, AbilityId.GUTS, AbilityId.NO_GUARD, AbilityId.STEADFAST, 505, 90, 130, 80, 65, 85, 55, 45, 50, 253, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FIGHTING, null, 25, 999.9, AbilityId.GUTS, AbilityId.GUTS, AbilityId.GUTS, 605, 120, 170, 85, 75, 90, 65, 45, 50, 253), + ), + new PokemonSpecies(SpeciesId.BELLSPROUT, 1, false, false, false, "Flower Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.7, 4, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.GLUTTONY, 300, 50, 75, 35, 70, 30, 40, 255, 70, 60, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.WEEPINBELL, 1, false, false, false, "Flycatcher Pokémon", PokemonType.GRASS, PokemonType.POISON, 1, 6.4, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.GLUTTONY, 390, 65, 90, 50, 85, 45, 55, 120, 70, 137, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.VICTREEBEL, 1, false, false, false, "Flycatcher Pokémon", PokemonType.GRASS, PokemonType.POISON, 1.7, 15.5, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.GLUTTONY, 490, 80, 105, 65, 100, 70, 70, 45, 70, 245, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.TENTACOOL, 1, false, false, false, "Jellyfish Pokémon", PokemonType.WATER, PokemonType.POISON, 0.9, 45.5, AbilityId.CLEAR_BODY, AbilityId.LIQUID_OOZE, AbilityId.RAIN_DISH, 335, 40, 40, 35, 50, 100, 70, 190, 50, 67, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.TENTACRUEL, 1, false, false, false, "Jellyfish Pokémon", PokemonType.WATER, PokemonType.POISON, 1.6, 55, AbilityId.CLEAR_BODY, AbilityId.LIQUID_OOZE, AbilityId.RAIN_DISH, 515, 80, 70, 65, 80, 120, 100, 60, 50, 180, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.GEODUDE, 1, false, false, false, "Rock Pokémon", PokemonType.ROCK, PokemonType.GROUND, 0.4, 20, AbilityId.ROCK_HEAD, AbilityId.STURDY, AbilityId.SAND_VEIL, 300, 40, 80, 100, 30, 30, 20, 255, 70, 60, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.GRAVELER, 1, false, false, false, "Rock Pokémon", PokemonType.ROCK, PokemonType.GROUND, 1, 105, AbilityId.ROCK_HEAD, AbilityId.STURDY, AbilityId.SAND_VEIL, 390, 55, 95, 115, 45, 45, 35, 120, 70, 137, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.GOLEM, 1, false, false, false, "Megaton Pokémon", PokemonType.ROCK, PokemonType.GROUND, 1.4, 300, AbilityId.ROCK_HEAD, AbilityId.STURDY, AbilityId.SAND_VEIL, 495, 80, 120, 130, 55, 65, 45, 45, 70, 248, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.PONYTA, 1, false, false, false, "Fire Horse Pokémon", PokemonType.FIRE, null, 1, 30, AbilityId.RUN_AWAY, AbilityId.FLASH_FIRE, AbilityId.FLAME_BODY, 410, 50, 85, 55, 65, 65, 90, 190, 50, 82, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.RAPIDASH, 1, false, false, false, "Fire Horse Pokémon", PokemonType.FIRE, null, 1.7, 95, AbilityId.RUN_AWAY, AbilityId.FLASH_FIRE, AbilityId.FLAME_BODY, 500, 65, 100, 70, 80, 80, 105, 60, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SLOWPOKE, 1, false, false, false, "Dopey Pokémon", PokemonType.WATER, PokemonType.PSYCHIC, 1.2, 36, AbilityId.OBLIVIOUS, AbilityId.OWN_TEMPO, AbilityId.REGENERATOR, 315, 90, 65, 65, 40, 40, 15, 190, 50, 63, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SLOWBRO, 1, false, false, false, "Hermit Crab Pokémon", PokemonType.WATER, PokemonType.PSYCHIC, 1.6, 78.5, AbilityId.OBLIVIOUS, AbilityId.OWN_TEMPO, AbilityId.REGENERATOR, 490, 95, 75, 110, 100, 80, 30, 75, 50, 172, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.PSYCHIC, 1.6, 78.5, AbilityId.OBLIVIOUS, AbilityId.OWN_TEMPO, AbilityId.REGENERATOR, 490, 95, 75, 110, 100, 80, 30, 75, 50, 172, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.WATER, PokemonType.PSYCHIC, 2, 120, AbilityId.SHELL_ARMOR, AbilityId.SHELL_ARMOR, AbilityId.SHELL_ARMOR, 590, 95, 75, 180, 130, 80, 30, 75, 50, 172), + ), + new PokemonSpecies(SpeciesId.MAGNEMITE, 1, false, false, false, "Magnet Pokémon", PokemonType.ELECTRIC, PokemonType.STEEL, 0.3, 6, AbilityId.MAGNET_PULL, AbilityId.STURDY, AbilityId.ANALYTIC, 325, 25, 35, 70, 95, 55, 45, 190, 50, 65, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.MAGNETON, 1, false, false, false, "Magnet Pokémon", PokemonType.ELECTRIC, PokemonType.STEEL, 1, 60, AbilityId.MAGNET_PULL, AbilityId.STURDY, AbilityId.ANALYTIC, 465, 50, 60, 95, 120, 70, 70, 60, 50, 163, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.FARFETCHD, 1, false, false, false, "Wild Duck Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.8, 15, AbilityId.KEEN_EYE, AbilityId.INNER_FOCUS, AbilityId.DEFIANT, 377, 52, 90, 55, 58, 62, 60, 45, 50, 132, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DODUO, 1, false, false, false, "Twin Bird Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.4, 39.2, AbilityId.RUN_AWAY, AbilityId.EARLY_BIRD, AbilityId.TANGLED_FEET, 310, 35, 85, 45, 35, 35, 75, 190, 70, 62, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.DODRIO, 1, false, false, false, "Triple Bird Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.8, 85.2, AbilityId.RUN_AWAY, AbilityId.EARLY_BIRD, AbilityId.TANGLED_FEET, 470, 60, 110, 70, 60, 60, 110, 45, 70, 165, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.SEEL, 1, false, false, false, "Sea Lion Pokémon", PokemonType.WATER, null, 1.1, 90, AbilityId.THICK_FAT, AbilityId.HYDRATION, AbilityId.ICE_BODY, 325, 65, 45, 55, 45, 70, 45, 190, 70, 65, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DEWGONG, 1, false, false, false, "Sea Lion Pokémon", PokemonType.WATER, PokemonType.ICE, 1.7, 120, AbilityId.THICK_FAT, AbilityId.HYDRATION, AbilityId.ICE_BODY, 475, 90, 70, 80, 70, 95, 70, 75, 70, 166, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GRIMER, 1, false, false, false, "Sludge Pokémon", PokemonType.POISON, null, 0.9, 30, AbilityId.STENCH, AbilityId.STICKY_HOLD, AbilityId.POISON_TOUCH, 325, 80, 80, 50, 40, 50, 25, 190, 70, 65, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MUK, 1, false, false, false, "Sludge Pokémon", PokemonType.POISON, null, 1.2, 30, AbilityId.STENCH, AbilityId.STICKY_HOLD, AbilityId.POISON_TOUCH, 500, 105, 105, 75, 65, 100, 50, 75, 70, 175, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SHELLDER, 1, false, false, false, "Bivalve Pokémon", PokemonType.WATER, null, 0.3, 4, AbilityId.SHELL_ARMOR, AbilityId.SKILL_LINK, AbilityId.OVERCOAT, 305, 30, 65, 100, 45, 25, 40, 190, 50, 61, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.CLOYSTER, 1, false, false, false, "Bivalve Pokémon", PokemonType.WATER, PokemonType.ICE, 1.5, 132.5, AbilityId.SHELL_ARMOR, AbilityId.SKILL_LINK, AbilityId.OVERCOAT, 525, 50, 95, 180, 85, 45, 70, 60, 50, 184, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.GASTLY, 1, false, false, false, "Gas Pokémon", PokemonType.GHOST, PokemonType.POISON, 1.3, 0.1, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 310, 30, 35, 30, 100, 35, 80, 190, 50, 62, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.HAUNTER, 1, false, false, false, "Gas Pokémon", PokemonType.GHOST, PokemonType.POISON, 1.6, 0.1, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 405, 45, 50, 45, 115, 55, 95, 90, 50, 142, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.GENGAR, 1, false, false, false, "Shadow Pokémon", PokemonType.GHOST, PokemonType.POISON, 1.5, 40.5, AbilityId.CURSED_BODY, AbilityId.NONE, AbilityId.NONE, 500, 60, 65, 60, 130, 75, 110, 45, 50, 250, GrowthRate.MEDIUM_SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.GHOST, PokemonType.POISON, 1.5, 40.5, AbilityId.CURSED_BODY, AbilityId.NONE, AbilityId.NONE, 500, 60, 65, 60, 130, 75, 110, 45, 50, 250, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.GHOST, PokemonType.POISON, 1.4, 40.5, AbilityId.SHADOW_TAG, AbilityId.NONE, AbilityId.NONE, 600, 60, 65, 80, 170, 95, 130, 45, 50, 250), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GHOST, PokemonType.POISON, 20, 999.9, AbilityId.CURSED_BODY, AbilityId.NONE, AbilityId.NONE, 600, 140, 65, 70, 140, 85, 100, 45, 50, 250), + ), + new PokemonSpecies(SpeciesId.ONIX, 1, false, false, false, "Rock Snake Pokémon", PokemonType.ROCK, PokemonType.GROUND, 8.8, 210, AbilityId.ROCK_HEAD, AbilityId.STURDY, AbilityId.WEAK_ARMOR, 385, 35, 45, 160, 30, 45, 70, 45, 50, 77, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DROWZEE, 1, false, false, false, "Hypnosis Pokémon", PokemonType.PSYCHIC, null, 1, 32.4, AbilityId.INSOMNIA, AbilityId.FOREWARN, AbilityId.INNER_FOCUS, 328, 60, 48, 45, 43, 90, 42, 190, 70, 66, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.HYPNO, 1, false, false, false, "Hypnosis Pokémon", PokemonType.PSYCHIC, null, 1.6, 75.6, AbilityId.INSOMNIA, AbilityId.FOREWARN, AbilityId.INNER_FOCUS, 483, 85, 73, 70, 73, 115, 67, 75, 70, 169, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.KRABBY, 1, false, false, false, "River Crab Pokémon", PokemonType.WATER, null, 0.4, 6.5, AbilityId.HYPER_CUTTER, AbilityId.SHELL_ARMOR, AbilityId.SHEER_FORCE, 325, 30, 105, 90, 25, 25, 50, 225, 50, 65, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.KINGLER, 1, false, false, false, "Pincer Pokémon", PokemonType.WATER, null, 1.3, 60, AbilityId.HYPER_CUTTER, AbilityId.SHELL_ARMOR, AbilityId.SHEER_FORCE, 475, 55, 130, 115, 50, 50, 75, 60, 50, 166, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.WATER, null, 1.3, 60, AbilityId.HYPER_CUTTER, AbilityId.SHELL_ARMOR, AbilityId.SHEER_FORCE, 475, 55, 130, 115, 50, 50, 75, 60, 50, 166, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, null, 19, 999.9, AbilityId.TOUGH_CLAWS, AbilityId.TOUGH_CLAWS, AbilityId.TOUGH_CLAWS, 575, 92, 145, 140, 60, 65, 73, 60, 50, 166), + ), + new PokemonSpecies(SpeciesId.VOLTORB, 1, false, false, false, "Ball Pokémon", PokemonType.ELECTRIC, null, 0.5, 10.4, AbilityId.SOUNDPROOF, AbilityId.STATIC, AbilityId.AFTERMATH, 330, 40, 30, 50, 55, 55, 100, 190, 70, 66, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.ELECTRODE, 1, false, false, false, "Ball Pokémon", PokemonType.ELECTRIC, null, 1.2, 66.6, AbilityId.SOUNDPROOF, AbilityId.STATIC, AbilityId.AFTERMATH, 490, 60, 50, 70, 80, 80, 150, 60, 70, 172, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.EXEGGCUTE, 1, false, false, false, "Egg Pokémon", PokemonType.GRASS, PokemonType.PSYCHIC, 0.4, 2.5, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.HARVEST, 325, 60, 40, 80, 60, 45, 40, 90, 50, 65, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.EXEGGUTOR, 1, false, false, false, "Coconut Pokémon", PokemonType.GRASS, PokemonType.PSYCHIC, 2, 120, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.HARVEST, 530, 95, 95, 85, 125, 75, 55, 45, 50, 186, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.CUBONE, 1, false, false, false, "Lonely Pokémon", PokemonType.GROUND, null, 0.4, 6.5, AbilityId.ROCK_HEAD, AbilityId.LIGHTNING_ROD, AbilityId.BATTLE_ARMOR, 320, 50, 50, 95, 40, 50, 35, 190, 50, 64, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MAROWAK, 1, false, false, false, "Bone Keeper Pokémon", PokemonType.GROUND, null, 1, 45, AbilityId.ROCK_HEAD, AbilityId.LIGHTNING_ROD, AbilityId.BATTLE_ARMOR, 425, 60, 80, 110, 50, 80, 45, 75, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.HITMONLEE, 1, false, false, false, "Kicking Pokémon", PokemonType.FIGHTING, null, 1.5, 49.8, AbilityId.LIMBER, AbilityId.RECKLESS, AbilityId.UNBURDEN, 455, 50, 120, 53, 35, 110, 87, 45, 50, 159, GrowthRate.MEDIUM_FAST, 100, false), + new PokemonSpecies(SpeciesId.HITMONCHAN, 1, false, false, false, "Punching Pokémon", PokemonType.FIGHTING, null, 1.4, 50.2, AbilityId.KEEN_EYE, AbilityId.IRON_FIST, AbilityId.INNER_FOCUS, 455, 50, 105, 79, 35, 110, 76, 45, 50, 159, GrowthRate.MEDIUM_FAST, 100, false), + new PokemonSpecies(SpeciesId.LICKITUNG, 1, false, false, false, "Licking Pokémon", PokemonType.NORMAL, null, 1.2, 65.5, AbilityId.OWN_TEMPO, AbilityId.OBLIVIOUS, AbilityId.CLOUD_NINE, 385, 90, 55, 75, 60, 75, 30, 45, 50, 77, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.KOFFING, 1, false, false, false, "Poison Gas Pokémon", PokemonType.POISON, null, 0.6, 1, AbilityId.LEVITATE, AbilityId.NEUTRALIZING_GAS, AbilityId.STENCH, 340, 40, 65, 95, 60, 45, 35, 190, 50, 68, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.WEEZING, 1, false, false, false, "Poison Gas Pokémon", PokemonType.POISON, null, 1.2, 9.5, AbilityId.LEVITATE, AbilityId.NEUTRALIZING_GAS, AbilityId.STENCH, 490, 65, 90, 120, 85, 70, 60, 60, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.RHYHORN, 1, false, false, false, "Spikes Pokémon", PokemonType.GROUND, PokemonType.ROCK, 1, 115, AbilityId.LIGHTNING_ROD, AbilityId.ROCK_HEAD, AbilityId.RECKLESS, 345, 80, 85, 95, 30, 30, 25, 120, 50, 69, GrowthRate.SLOW, 50, true), + new PokemonSpecies(SpeciesId.RHYDON, 1, false, false, false, "Drill Pokémon", PokemonType.GROUND, PokemonType.ROCK, 1.9, 120, AbilityId.LIGHTNING_ROD, AbilityId.ROCK_HEAD, AbilityId.RECKLESS, 485, 105, 130, 120, 45, 45, 40, 60, 50, 170, GrowthRate.SLOW, 50, true), + new PokemonSpecies(SpeciesId.CHANSEY, 1, false, false, false, "Egg Pokémon", PokemonType.NORMAL, null, 1.1, 34.6, AbilityId.NATURAL_CURE, AbilityId.SERENE_GRACE, AbilityId.HEALER, 450, 250, 5, 5, 35, 105, 50, 30, 140, 395, GrowthRate.FAST, 0, false), + new PokemonSpecies(SpeciesId.TANGELA, 1, false, false, false, "Vine Pokémon", PokemonType.GRASS, null, 1, 35, AbilityId.CHLOROPHYLL, AbilityId.LEAF_GUARD, AbilityId.REGENERATOR, 435, 65, 55, 115, 100, 40, 60, 45, 50, 87, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.KANGASKHAN, 1, false, false, false, "Parent Pokémon", PokemonType.NORMAL, null, 2.2, 80, AbilityId.EARLY_BIRD, AbilityId.SCRAPPY, AbilityId.INNER_FOCUS, 490, 105, 95, 80, 40, 80, 90, 45, 50, 172, GrowthRate.MEDIUM_FAST, 0, false, true, + new PokemonForm("Normal", "", PokemonType.NORMAL, null, 2.2, 80, AbilityId.EARLY_BIRD, AbilityId.SCRAPPY, AbilityId.INNER_FOCUS, 490, 105, 95, 80, 40, 80, 90, 45, 50, 172, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.NORMAL, null, 2.2, 100, AbilityId.PARENTAL_BOND, AbilityId.PARENTAL_BOND, AbilityId.PARENTAL_BOND, 590, 105, 125, 100, 60, 100, 100, 45, 50, 172), + ), + new PokemonSpecies(SpeciesId.HORSEA, 1, false, false, false, "Dragon Pokémon", PokemonType.WATER, null, 0.4, 8, AbilityId.SWIFT_SWIM, AbilityId.SNIPER, AbilityId.DAMP, 295, 30, 40, 70, 70, 25, 60, 225, 50, 59, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SEADRA, 1, false, false, false, "Dragon Pokémon", PokemonType.WATER, null, 1.2, 25, AbilityId.POISON_POINT, AbilityId.SNIPER, AbilityId.DAMP, 440, 55, 65, 95, 95, 45, 85, 75, 50, 154, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GOLDEEN, 1, false, false, false, "Goldfish Pokémon", PokemonType.WATER, null, 0.6, 15, AbilityId.SWIFT_SWIM, AbilityId.WATER_VEIL, AbilityId.LIGHTNING_ROD, 320, 45, 67, 60, 35, 50, 63, 225, 50, 64, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.SEAKING, 1, false, false, false, "Goldfish Pokémon", PokemonType.WATER, null, 1.3, 39, AbilityId.SWIFT_SWIM, AbilityId.WATER_VEIL, AbilityId.LIGHTNING_ROD, 450, 80, 92, 65, 65, 80, 68, 60, 50, 158, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.STARYU, 1, false, false, false, "Star Shape Pokémon", PokemonType.WATER, null, 0.8, 34.5, AbilityId.ILLUMINATE, AbilityId.NATURAL_CURE, AbilityId.ANALYTIC, 340, 30, 45, 55, 70, 55, 85, 225, 50, 68, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.STARMIE, 1, false, false, false, "Mysterious Pokémon", PokemonType.WATER, PokemonType.PSYCHIC, 1.1, 80, AbilityId.ILLUMINATE, AbilityId.NATURAL_CURE, AbilityId.ANALYTIC, 520, 60, 75, 85, 100, 85, 115, 60, 50, 182, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.MR_MIME, 1, false, false, false, "Barrier Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 1.3, 54.5, AbilityId.SOUNDPROOF, AbilityId.FILTER, AbilityId.TECHNICIAN, 460, 40, 45, 65, 100, 120, 90, 45, 50, 161, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SCYTHER, 1, false, false, false, "Mantis Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.5, 56, AbilityId.SWARM, AbilityId.TECHNICIAN, AbilityId.STEADFAST, 500, 70, 110, 80, 55, 80, 105, 45, 50, 100, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.JYNX, 1, false, false, false, "Human Shape Pokémon", PokemonType.ICE, PokemonType.PSYCHIC, 1.4, 40.6, AbilityId.OBLIVIOUS, AbilityId.FOREWARN, AbilityId.DRY_SKIN, 455, 65, 50, 35, 115, 95, 95, 45, 50, 159, GrowthRate.MEDIUM_FAST, 0, false), + new PokemonSpecies(SpeciesId.ELECTABUZZ, 1, false, false, false, "Electric Pokémon", PokemonType.ELECTRIC, null, 1.1, 30, AbilityId.STATIC, AbilityId.NONE, AbilityId.VITAL_SPIRIT, 490, 65, 83, 57, 95, 85, 105, 45, 50, 172, GrowthRate.MEDIUM_FAST, 75, false), + new PokemonSpecies(SpeciesId.MAGMAR, 1, false, false, false, "Spitfire Pokémon", PokemonType.FIRE, null, 1.3, 44.5, AbilityId.FLAME_BODY, AbilityId.NONE, AbilityId.VITAL_SPIRIT, 495, 65, 95, 57, 100, 85, 93, 45, 50, 173, GrowthRate.MEDIUM_FAST, 75, false), + new PokemonSpecies(SpeciesId.PINSIR, 1, false, false, false, "Stag Beetle Pokémon", PokemonType.BUG, null, 1.5, 55, AbilityId.HYPER_CUTTER, AbilityId.MOLD_BREAKER, AbilityId.MOXIE, 500, 65, 125, 100, 55, 70, 85, 45, 50, 175, GrowthRate.SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.BUG, null, 1.5, 55, AbilityId.HYPER_CUTTER, AbilityId.MOLD_BREAKER, AbilityId.MOXIE, 500, 65, 125, 100, 55, 70, 85, 45, 50, 175, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.BUG, PokemonType.FLYING, 1.7, 59, AbilityId.AERILATE, AbilityId.AERILATE, AbilityId.AERILATE, 600, 65, 155, 120, 65, 90, 105, 45, 50, 175), + ), + new PokemonSpecies(SpeciesId.TAUROS, 1, false, false, false, "Wild Bull Pokémon", PokemonType.NORMAL, null, 1.4, 88.4, AbilityId.INTIMIDATE, AbilityId.ANGER_POINT, AbilityId.SHEER_FORCE, 490, 75, 100, 95, 40, 70, 110, 45, 50, 172, GrowthRate.SLOW, 100, false), + new PokemonSpecies(SpeciesId.MAGIKARP, 1, false, false, false, "Fish Pokémon", PokemonType.WATER, null, 0.9, 10, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.RATTLED, 200, 20, 10, 55, 15, 20, 80, 255, 50, 40, GrowthRate.SLOW, 50, true), + new PokemonSpecies(SpeciesId.GYARADOS, 1, false, false, false, "Atrocious Pokémon", PokemonType.WATER, PokemonType.FLYING, 6.5, 235, AbilityId.INTIMIDATE, AbilityId.NONE, AbilityId.MOXIE, 540, 95, 125, 79, 60, 100, 81, 45, 50, 189, GrowthRate.SLOW, 50, true, true, + new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.FLYING, 6.5, 235, AbilityId.INTIMIDATE, AbilityId.NONE, AbilityId.MOXIE, 540, 95, 125, 79, 60, 100, 81, 45, 50, 189, true, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.WATER, PokemonType.DARK, 6.5, 305, AbilityId.MOLD_BREAKER, AbilityId.MOLD_BREAKER, AbilityId.MOLD_BREAKER, 640, 95, 155, 109, 70, 130, 81, 45, 50, 189, true), + ), + new PokemonSpecies(SpeciesId.LAPRAS, 1, false, false, false, "Transport Pokémon", PokemonType.WATER, PokemonType.ICE, 2.5, 220, AbilityId.WATER_ABSORB, AbilityId.SHELL_ARMOR, AbilityId.HYDRATION, 535, 130, 85, 80, 85, 95, 60, 45, 50, 187, GrowthRate.SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.ICE, 2.5, 220, AbilityId.WATER_ABSORB, AbilityId.SHELL_ARMOR, AbilityId.HYDRATION, 535, 130, 85, 80, 85, 95, 60, 45, 50, 187, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, PokemonType.ICE, 24, 999.9, AbilityId.SHIELD_DUST, AbilityId.SHIELD_DUST, AbilityId.SHIELD_DUST, 635, 170, 97, 85, 107, 111, 65, 45, 50, 187), + ), + new PokemonSpecies(SpeciesId.DITTO, 1, false, false, false, "Transform Pokémon", PokemonType.NORMAL, null, 0.3, 4, AbilityId.LIMBER, AbilityId.NONE, AbilityId.IMPOSTER, 288, 48, 48, 48, 48, 48, 48, 35, 50, 101, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.EEVEE, 1, false, false, false, "Evolution Pokémon", PokemonType.NORMAL, null, 0.3, 6.5, AbilityId.RUN_AWAY, AbilityId.ADAPTABILITY, AbilityId.ANTICIPATION, 325, 55, 55, 50, 45, 65, 55, 45, 50, 65, GrowthRate.MEDIUM_FAST, 87.5, false, true, + new PokemonForm("Normal", "", PokemonType.NORMAL, null, 0.3, 6.5, AbilityId.RUN_AWAY, AbilityId.ADAPTABILITY, AbilityId.ANTICIPATION, 325, 55, 55, 50, 45, 65, 55, 45, 50, 65, false, null, true), + new PokemonForm("Partner", "partner", PokemonType.NORMAL, null, 0.3, 6.5, AbilityId.RUN_AWAY, AbilityId.ADAPTABILITY, AbilityId.ANTICIPATION, 435, 65, 75, 70, 65, 85, 75, 45, 50, 65, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.NORMAL, null, 18, 999.9, AbilityId.PROTEAN, AbilityId.PROTEAN, AbilityId.PROTEAN, 535, 110, 95, 70, 90, 85, 85, 45, 50, 65), //+100 BST from Partner Form + ), + new PokemonSpecies(SpeciesId.VAPOREON, 1, false, false, false, "Bubble Jet Pokémon", PokemonType.WATER, null, 1, 29, AbilityId.WATER_ABSORB, AbilityId.NONE, AbilityId.HYDRATION, 525, 130, 65, 60, 110, 95, 65, 45, 50, 184, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.JOLTEON, 1, false, false, false, "Lightning Pokémon", PokemonType.ELECTRIC, null, 0.8, 24.5, AbilityId.VOLT_ABSORB, AbilityId.NONE, AbilityId.QUICK_FEET, 525, 65, 65, 60, 110, 95, 130, 45, 50, 184, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.FLAREON, 1, false, false, false, "Flame Pokémon", PokemonType.FIRE, null, 0.9, 25, AbilityId.FLASH_FIRE, AbilityId.NONE, AbilityId.GUTS, 525, 65, 130, 60, 95, 110, 65, 45, 50, 184, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.PORYGON, 1, false, false, false, "Virtual Pokémon", PokemonType.NORMAL, null, 0.8, 36.5, AbilityId.TRACE, AbilityId.DOWNLOAD, AbilityId.ANALYTIC, 395, 65, 60, 70, 85, 75, 40, 45, 50, 79, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.OMANYTE, 1, false, false, false, "Spiral Pokémon", PokemonType.ROCK, PokemonType.WATER, 0.4, 7.5, AbilityId.SWIFT_SWIM, AbilityId.SHELL_ARMOR, AbilityId.WEAK_ARMOR, 355, 35, 40, 100, 90, 55, 35, 45, 50, 71, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.OMASTAR, 1, false, false, false, "Spiral Pokémon", PokemonType.ROCK, PokemonType.WATER, 1, 35, AbilityId.SWIFT_SWIM, AbilityId.SHELL_ARMOR, AbilityId.WEAK_ARMOR, 495, 70, 60, 125, 115, 70, 55, 45, 50, 173, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.KABUTO, 1, false, false, false, "Shellfish Pokémon", PokemonType.ROCK, PokemonType.WATER, 0.5, 11.5, AbilityId.SWIFT_SWIM, AbilityId.BATTLE_ARMOR, AbilityId.WEAK_ARMOR, 355, 30, 80, 90, 55, 45, 55, 45, 50, 71, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.KABUTOPS, 1, false, false, false, "Shellfish Pokémon", PokemonType.ROCK, PokemonType.WATER, 1.3, 40.5, AbilityId.SWIFT_SWIM, AbilityId.BATTLE_ARMOR, AbilityId.WEAK_ARMOR, 495, 60, 115, 105, 65, 70, 80, 45, 50, 173, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.AERODACTYL, 1, false, false, false, "Fossil Pokémon", PokemonType.ROCK, PokemonType.FLYING, 1.8, 59, AbilityId.ROCK_HEAD, AbilityId.PRESSURE, AbilityId.UNNERVE, 515, 80, 105, 65, 60, 75, 130, 45, 50, 180, GrowthRate.SLOW, 87.5, false, true, + new PokemonForm("Normal", "", PokemonType.ROCK, PokemonType.FLYING, 1.8, 59, AbilityId.ROCK_HEAD, AbilityId.PRESSURE, AbilityId.UNNERVE, 515, 80, 105, 65, 60, 75, 130, 45, 50, 180, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.ROCK, PokemonType.FLYING, 2.1, 79, AbilityId.TOUGH_CLAWS, AbilityId.TOUGH_CLAWS, AbilityId.TOUGH_CLAWS, 615, 80, 135, 85, 70, 95, 150, 45, 50, 180), + ), + new PokemonSpecies(SpeciesId.SNORLAX, 1, false, false, false, "Sleeping Pokémon", PokemonType.NORMAL, null, 2.1, 460, AbilityId.IMMUNITY, AbilityId.THICK_FAT, AbilityId.GLUTTONY, 540, 160, 110, 65, 65, 110, 30, 25, 50, 189, GrowthRate.SLOW, 87.5, false, true, + new PokemonForm("Normal", "", PokemonType.NORMAL, null, 2.1, 460, AbilityId.IMMUNITY, AbilityId.THICK_FAT, AbilityId.GLUTTONY, 540, 160, 110, 65, 65, 110, 30, 25, 50, 189, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.NORMAL, null, 35, 999.9, AbilityId.HARVEST, AbilityId.HARVEST, AbilityId.HARVEST, 640, 210, 135, 70, 90, 115, 20, 25, 50, 189), + ), + new PokemonSpecies(SpeciesId.ARTICUNO, 1, true, false, false, "Freeze Pokémon", PokemonType.ICE, PokemonType.FLYING, 1.7, 55.4, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.SNOW_CLOAK, 580, 90, 85, 100, 95, 125, 85, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.ZAPDOS, 1, true, false, false, "Electric Pokémon", PokemonType.ELECTRIC, PokemonType.FLYING, 1.6, 52.6, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.STATIC, 580, 90, 90, 85, 125, 90, 100, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.MOLTRES, 1, true, false, false, "Flame Pokémon", PokemonType.FIRE, PokemonType.FLYING, 2, 60, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.FLAME_BODY, 580, 90, 100, 90, 125, 85, 90, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.DRATINI, 1, false, false, false, "Dragon Pokémon", PokemonType.DRAGON, null, 1.8, 3.3, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.MARVEL_SCALE, 300, 41, 64, 45, 50, 50, 50, 45, 35, 60, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.DRAGONAIR, 1, false, false, false, "Dragon Pokémon", PokemonType.DRAGON, null, 4, 16.5, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.MARVEL_SCALE, 420, 61, 84, 65, 70, 70, 70, 45, 35, 147, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.DRAGONITE, 1, false, false, false, "Dragon Pokémon", PokemonType.DRAGON, PokemonType.FLYING, 2.2, 210, AbilityId.INNER_FOCUS, AbilityId.NONE, AbilityId.MULTISCALE, 600, 91, 134, 95, 100, 100, 80, 45, 35, 300, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.MEWTWO, 1, false, true, false, "Genetic Pokémon", PokemonType.PSYCHIC, null, 2, 122, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.UNNERVE, 680, 106, 110, 90, 154, 90, 130, 3, 0, 340, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal", "", PokemonType.PSYCHIC, null, 2, 122, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.UNNERVE, 680, 106, 110, 90, 154, 90, 130, 3, 0, 340, false, null, true), + new PokemonForm("Mega X", SpeciesFormKey.MEGA_X, PokemonType.PSYCHIC, PokemonType.FIGHTING, 2.3, 127, AbilityId.STEADFAST, AbilityId.NONE, AbilityId.STEADFAST, 780, 106, 190, 100, 154, 100, 130, 3, 0, 340), + new PokemonForm("Mega Y", SpeciesFormKey.MEGA_Y, PokemonType.PSYCHIC, null, 1.5, 33, AbilityId.INSOMNIA, AbilityId.NONE, AbilityId.INSOMNIA, 780, 106, 150, 70, 194, 120, 140, 3, 0, 340), + ), + new PokemonSpecies(SpeciesId.MEW, 1, false, false, true, "New Species Pokémon", PokemonType.PSYCHIC, null, 0.4, 4, AbilityId.SYNCHRONIZE, AbilityId.NONE, AbilityId.NONE, 600, 100, 100, 100, 100, 100, 100, 45, 100, 300, GrowthRate.MEDIUM_SLOW, null, false), + new PokemonSpecies(SpeciesId.CHIKORITA, 2, false, false, false, "Leaf Pokémon", PokemonType.GRASS, null, 0.9, 6.4, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.LEAF_GUARD, 318, 45, 49, 65, 49, 65, 45, 45, 70, 64, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.BAYLEEF, 2, false, false, false, "Leaf Pokémon", PokemonType.GRASS, null, 1.2, 15.8, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.LEAF_GUARD, 405, 60, 62, 80, 63, 80, 60, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.MEGANIUM, 2, false, false, false, "Herb Pokémon", PokemonType.GRASS, null, 1.8, 100.5, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.LEAF_GUARD, 525, 80, 82, 100, 83, 100, 80, 45, 70, 263, GrowthRate.MEDIUM_SLOW, 87.5, true), + new PokemonSpecies(SpeciesId.CYNDAQUIL, 2, false, false, false, "Fire Mouse Pokémon", PokemonType.FIRE, null, 0.5, 7.9, AbilityId.BLAZE, AbilityId.NONE, AbilityId.FLASH_FIRE, 309, 39, 52, 43, 60, 50, 65, 45, 70, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.QUILAVA, 2, false, false, false, "Volcano Pokémon", PokemonType.FIRE, null, 0.9, 19, AbilityId.BLAZE, AbilityId.NONE, AbilityId.FLASH_FIRE, 405, 58, 64, 58, 80, 65, 80, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.TYPHLOSION, 2, false, false, false, "Volcano Pokémon", PokemonType.FIRE, null, 1.7, 79.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.FLASH_FIRE, 534, 78, 84, 78, 109, 85, 100, 45, 70, 267, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.TOTODILE, 2, false, false, false, "Big Jaw Pokémon", PokemonType.WATER, null, 0.6, 9.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SHEER_FORCE, 314, 50, 65, 64, 44, 48, 43, 45, 70, 63, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.CROCONAW, 2, false, false, false, "Big Jaw Pokémon", PokemonType.WATER, null, 1.1, 25, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SHEER_FORCE, 405, 65, 80, 80, 59, 63, 58, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.FERALIGATR, 2, false, false, false, "Big Jaw Pokémon", PokemonType.WATER, null, 2.3, 88.8, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SHEER_FORCE, 530, 85, 105, 100, 79, 83, 78, 45, 70, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.SENTRET, 2, false, false, false, "Scout Pokémon", PokemonType.NORMAL, null, 0.8, 6, AbilityId.RUN_AWAY, AbilityId.KEEN_EYE, AbilityId.FRISK, 215, 35, 46, 34, 35, 45, 20, 255, 70, 43, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.FURRET, 2, false, false, false, "Long Body Pokémon", PokemonType.NORMAL, null, 1.8, 32.5, AbilityId.RUN_AWAY, AbilityId.KEEN_EYE, AbilityId.FRISK, 415, 85, 76, 64, 45, 55, 90, 90, 70, 145, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.HOOTHOOT, 2, false, false, false, "Owl Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.7, 21.2, AbilityId.INSOMNIA, AbilityId.KEEN_EYE, AbilityId.TINTED_LENS, 262, 60, 30, 30, 36, 56, 50, 255, 50, 52, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.NOCTOWL, 2, false, false, false, "Owl Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.6, 40.8, AbilityId.INSOMNIA, AbilityId.KEEN_EYE, AbilityId.TINTED_LENS, 452, 100, 50, 50, 86, 96, 70, 90, 50, 158, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.LEDYBA, 2, false, false, false, "Five Star Pokémon", PokemonType.BUG, PokemonType.FLYING, 1, 10.8, AbilityId.SWARM, AbilityId.EARLY_BIRD, AbilityId.RATTLED, 265, 40, 20, 30, 40, 80, 55, 255, 70, 53, GrowthRate.FAST, 50, true), + new PokemonSpecies(SpeciesId.LEDIAN, 2, false, false, false, "Five Star Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.4, 35.6, AbilityId.SWARM, AbilityId.EARLY_BIRD, AbilityId.IRON_FIST, 390, 55, 35, 50, 55, 110, 85, 90, 70, 137, GrowthRate.FAST, 50, true), + new PokemonSpecies(SpeciesId.SPINARAK, 2, false, false, false, "String Spit Pokémon", PokemonType.BUG, PokemonType.POISON, 0.5, 8.5, AbilityId.SWARM, AbilityId.INSOMNIA, AbilityId.SNIPER, 250, 40, 60, 40, 40, 40, 30, 255, 70, 50, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.ARIADOS, 2, false, false, false, "Long Leg Pokémon", PokemonType.BUG, PokemonType.POISON, 1.1, 33.5, AbilityId.SWARM, AbilityId.INSOMNIA, AbilityId.SNIPER, 400, 70, 90, 70, 60, 70, 40, 90, 70, 140, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.CROBAT, 2, false, false, false, "Bat Pokémon", PokemonType.POISON, PokemonType.FLYING, 1.8, 75, AbilityId.INNER_FOCUS, AbilityId.NONE, AbilityId.INFILTRATOR, 535, 85, 90, 80, 70, 80, 130, 90, 50, 268, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CHINCHOU, 2, false, false, false, "Angler Pokémon", PokemonType.WATER, PokemonType.ELECTRIC, 0.5, 12, AbilityId.VOLT_ABSORB, AbilityId.ILLUMINATE, AbilityId.WATER_ABSORB, 330, 75, 38, 38, 56, 56, 67, 190, 50, 66, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.LANTURN, 2, false, false, false, "Light Pokémon", PokemonType.WATER, PokemonType.ELECTRIC, 1.2, 22.5, AbilityId.VOLT_ABSORB, AbilityId.ILLUMINATE, AbilityId.WATER_ABSORB, 460, 125, 58, 58, 76, 76, 67, 75, 50, 161, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.PICHU, 2, false, false, false, "Tiny Mouse Pokémon", PokemonType.ELECTRIC, null, 0.3, 2, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 205, 20, 40, 15, 35, 35, 60, 190, 70, 41, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Normal", "", PokemonType.ELECTRIC, null, 1.4, 2, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 205, 20, 40, 15, 35, 35, 60, 190, 70, 41, false, null, true), + new PokemonForm("Spiky-Eared", "spiky", PokemonType.ELECTRIC, null, 1.4, 2, AbilityId.STATIC, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 205, 20, 40, 15, 35, 35, 60, 190, 70, 41, false, null, true), + ), + new PokemonSpecies(SpeciesId.CLEFFA, 2, false, false, false, "Star Shape Pokémon", PokemonType.FAIRY, null, 0.3, 3, AbilityId.CUTE_CHARM, AbilityId.MAGIC_GUARD, AbilityId.FRIEND_GUARD, 218, 50, 25, 28, 45, 55, 15, 150, 140, 44, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.IGGLYBUFF, 2, false, false, false, "Balloon Pokémon", PokemonType.NORMAL, PokemonType.FAIRY, 0.3, 1, AbilityId.CUTE_CHARM, AbilityId.COMPETITIVE, AbilityId.FRIEND_GUARD, 210, 90, 30, 15, 40, 20, 15, 170, 50, 42, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.TOGEPI, 2, false, false, false, "Spike Ball Pokémon", PokemonType.FAIRY, null, 0.3, 1.5, AbilityId.HUSTLE, AbilityId.SERENE_GRACE, AbilityId.SUPER_LUCK, 245, 35, 20, 65, 40, 65, 20, 190, 50, 49, GrowthRate.FAST, 87.5, false), + new PokemonSpecies(SpeciesId.TOGETIC, 2, false, false, false, "Happiness Pokémon", PokemonType.FAIRY, PokemonType.FLYING, 0.6, 3.2, AbilityId.HUSTLE, AbilityId.SERENE_GRACE, AbilityId.SUPER_LUCK, 405, 55, 40, 85, 80, 105, 40, 75, 50, 142, GrowthRate.FAST, 87.5, false), + new PokemonSpecies(SpeciesId.NATU, 2, false, false, false, "Tiny Bird Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 0.2, 2, AbilityId.SYNCHRONIZE, AbilityId.EARLY_BIRD, AbilityId.MAGIC_BOUNCE, 320, 40, 50, 45, 70, 45, 70, 190, 50, 64, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.XATU, 2, false, false, false, "Mystic Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 1.5, 15, AbilityId.SYNCHRONIZE, AbilityId.EARLY_BIRD, AbilityId.MAGIC_BOUNCE, 470, 65, 75, 70, 95, 70, 95, 75, 50, 165, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.MAREEP, 2, false, false, false, "Wool Pokémon", PokemonType.ELECTRIC, null, 0.6, 7.8, AbilityId.STATIC, AbilityId.NONE, AbilityId.PLUS, 280, 55, 40, 40, 65, 45, 35, 235, 70, 56, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.FLAAFFY, 2, false, false, false, "Wool Pokémon", PokemonType.ELECTRIC, null, 0.8, 13.3, AbilityId.STATIC, AbilityId.NONE, AbilityId.PLUS, 365, 70, 55, 55, 80, 60, 45, 120, 70, 128, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.AMPHAROS, 2, false, false, false, "Light Pokémon", PokemonType.ELECTRIC, null, 1.4, 61.5, AbilityId.STATIC, AbilityId.NONE, AbilityId.PLUS, 510, 90, 75, 85, 115, 90, 55, 45, 70, 255, GrowthRate.MEDIUM_SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.ELECTRIC, null, 1.4, 61.5, AbilityId.STATIC, AbilityId.NONE, AbilityId.PLUS, 510, 90, 75, 85, 115, 90, 55, 45, 70, 255, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.ELECTRIC, PokemonType.DRAGON, 1.4, 61.5, AbilityId.MOLD_BREAKER, AbilityId.NONE, AbilityId.MOLD_BREAKER, 610, 90, 95, 105, 165, 110, 45, 45, 70, 255), + ), + new PokemonSpecies(SpeciesId.BELLOSSOM, 2, false, false, false, "Flower Pokémon", PokemonType.GRASS, null, 0.4, 5.8, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.HEALER, 490, 75, 80, 95, 90, 100, 50, 45, 50, 245, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.MARILL, 2, false, false, false, "Aqua Mouse Pokémon", PokemonType.WATER, PokemonType.FAIRY, 0.4, 8.5, AbilityId.THICK_FAT, AbilityId.HUGE_POWER, AbilityId.SAP_SIPPER, 250, 70, 20, 50, 20, 50, 40, 190, 50, 88, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.AZUMARILL, 2, false, false, false, "Aqua Rabbit Pokémon", PokemonType.WATER, PokemonType.FAIRY, 0.8, 28.5, AbilityId.THICK_FAT, AbilityId.HUGE_POWER, AbilityId.SAP_SIPPER, 420, 100, 50, 80, 60, 80, 50, 75, 50, 210, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.SUDOWOODO, 2, false, false, false, "Imitation Pokémon", PokemonType.ROCK, null, 1.2, 38, AbilityId.STURDY, AbilityId.ROCK_HEAD, AbilityId.RATTLED, 410, 70, 100, 115, 30, 65, 30, 65, 50, 144, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.POLITOED, 2, false, false, false, "Frog Pokémon", PokemonType.WATER, null, 1.1, 33.9, AbilityId.WATER_ABSORB, AbilityId.DAMP, AbilityId.DRIZZLE, 500, 90, 75, 75, 90, 100, 70, 45, 50, 250, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.HOPPIP, 2, false, false, false, "Cottonweed Pokémon", PokemonType.GRASS, PokemonType.FLYING, 0.4, 0.5, AbilityId.CHLOROPHYLL, AbilityId.LEAF_GUARD, AbilityId.INFILTRATOR, 250, 35, 35, 40, 35, 55, 50, 255, 70, 50, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.SKIPLOOM, 2, false, false, false, "Cottonweed Pokémon", PokemonType.GRASS, PokemonType.FLYING, 0.6, 1, AbilityId.CHLOROPHYLL, AbilityId.LEAF_GUARD, AbilityId.INFILTRATOR, 340, 55, 45, 50, 45, 65, 80, 120, 70, 119, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.JUMPLUFF, 2, false, false, false, "Cottonweed Pokémon", PokemonType.GRASS, PokemonType.FLYING, 0.8, 3, AbilityId.CHLOROPHYLL, AbilityId.LEAF_GUARD, AbilityId.INFILTRATOR, 460, 75, 55, 70, 55, 95, 110, 45, 70, 230, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.AIPOM, 2, false, false, false, "Long Tail Pokémon", PokemonType.NORMAL, null, 0.8, 11.5, AbilityId.RUN_AWAY, AbilityId.PICKUP, AbilityId.SKILL_LINK, 360, 55, 70, 55, 40, 55, 85, 45, 70, 72, GrowthRate.FAST, 50, true), + new PokemonSpecies(SpeciesId.SUNKERN, 2, false, false, false, "Seed Pokémon", PokemonType.GRASS, null, 0.3, 1.8, AbilityId.CHLOROPHYLL, AbilityId.SOLAR_POWER, AbilityId.EARLY_BIRD, 180, 30, 30, 30, 30, 30, 30, 235, 70, 36, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.SUNFLORA, 2, false, false, false, "Sun Pokémon", PokemonType.GRASS, null, 0.8, 8.5, AbilityId.CHLOROPHYLL, AbilityId.SOLAR_POWER, AbilityId.EARLY_BIRD, 425, 75, 75, 55, 105, 85, 30, 120, 70, 149, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.YANMA, 2, false, false, false, "Clear Wing Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.2, 38, AbilityId.SPEED_BOOST, AbilityId.COMPOUND_EYES, AbilityId.FRISK, 390, 65, 65, 45, 75, 45, 95, 75, 70, 78, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.WOOPER, 2, false, false, false, "Water Fish Pokémon", PokemonType.WATER, PokemonType.GROUND, 0.4, 8.5, AbilityId.DAMP, AbilityId.WATER_ABSORB, AbilityId.UNAWARE, 210, 55, 45, 45, 25, 25, 15, 255, 50, 42, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.QUAGSIRE, 2, false, false, false, "Water Fish Pokémon", PokemonType.WATER, PokemonType.GROUND, 1.4, 75, AbilityId.DAMP, AbilityId.WATER_ABSORB, AbilityId.UNAWARE, 430, 95, 85, 85, 65, 65, 35, 90, 50, 151, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.ESPEON, 2, false, false, false, "Sun Pokémon", PokemonType.PSYCHIC, null, 0.9, 26.5, AbilityId.SYNCHRONIZE, AbilityId.NONE, AbilityId.MAGIC_BOUNCE, 525, 65, 65, 60, 130, 95, 110, 45, 50, 184, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.UMBREON, 2, false, false, false, "Moonlight Pokémon", PokemonType.DARK, null, 1, 27, AbilityId.SYNCHRONIZE, AbilityId.NONE, AbilityId.INNER_FOCUS, 525, 95, 65, 110, 60, 130, 65, 45, 35, 184, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.MURKROW, 2, false, false, false, "Darkness Pokémon", PokemonType.DARK, PokemonType.FLYING, 0.5, 2.1, AbilityId.INSOMNIA, AbilityId.SUPER_LUCK, AbilityId.PRANKSTER, 405, 60, 85, 42, 85, 42, 91, 30, 35, 81, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.SLOWKING, 2, false, false, false, "Royal Pokémon", PokemonType.WATER, PokemonType.PSYCHIC, 2, 79.5, AbilityId.OBLIVIOUS, AbilityId.OWN_TEMPO, AbilityId.REGENERATOR, 490, 95, 75, 80, 100, 110, 30, 70, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MISDREAVUS, 2, false, false, false, "Screech Pokémon", PokemonType.GHOST, null, 0.7, 1, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 435, 60, 60, 60, 85, 85, 85, 45, 35, 87, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.UNOWN, 2, false, false, false, "Symbol Pokémon", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, GrowthRate.MEDIUM_FAST, null, false, false, + new PokemonForm("A", "a", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("B", "b", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("C", "c", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("D", "d", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("E", "e", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("F", "f", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("G", "g", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("H", "h", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("I", "i", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("J", "j", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("K", "k", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("L", "l", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("M", "m", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("N", "n", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("O", "o", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("P", "p", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("Q", "q", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("R", "r", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("S", "s", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("T", "t", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("U", "u", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("V", "v", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("W", "w", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("X", "x", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("Y", "y", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("Z", "z", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("!", "exclamation", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + new PokemonForm("?", "question", PokemonType.PSYCHIC, null, 0.5, 5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 336, 48, 72, 48, 72, 48, 48, 225, 70, 118, false, null, true), + ), + new PokemonSpecies(SpeciesId.WOBBUFFET, 2, false, false, false, "Patient Pokémon", PokemonType.PSYCHIC, null, 1.3, 28.5, AbilityId.SHADOW_TAG, AbilityId.NONE, AbilityId.TELEPATHY, 405, 190, 33, 58, 33, 58, 33, 45, 50, 142, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.GIRAFARIG, 2, false, false, false, "Long Neck Pokémon", PokemonType.NORMAL, PokemonType.PSYCHIC, 1.5, 41.5, AbilityId.INNER_FOCUS, AbilityId.EARLY_BIRD, AbilityId.SAP_SIPPER, 455, 70, 80, 65, 90, 65, 85, 60, 70, 159, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.PINECO, 2, false, false, false, "Bagworm Pokémon", PokemonType.BUG, null, 0.6, 7.2, AbilityId.STURDY, AbilityId.NONE, AbilityId.OVERCOAT, 290, 50, 65, 90, 35, 35, 15, 190, 70, 58, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.FORRETRESS, 2, false, false, false, "Bagworm Pokémon", PokemonType.BUG, PokemonType.STEEL, 1.2, 125.8, AbilityId.STURDY, AbilityId.NONE, AbilityId.OVERCOAT, 465, 75, 90, 140, 60, 60, 40, 75, 70, 163, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DUNSPARCE, 2, false, false, false, "Land Snake Pokémon", PokemonType.NORMAL, null, 1.5, 14, AbilityId.SERENE_GRACE, AbilityId.RUN_AWAY, AbilityId.RATTLED, 415, 100, 70, 70, 65, 65, 45, 190, 50, 145, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GLIGAR, 2, false, false, false, "Fly Scorpion Pokémon", PokemonType.GROUND, PokemonType.FLYING, 1.1, 64.8, AbilityId.HYPER_CUTTER, AbilityId.SAND_VEIL, AbilityId.IMMUNITY, 430, 65, 75, 105, 35, 65, 85, 60, 70, 86, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.STEELIX, 2, false, false, false, "Iron Snake Pokémon", PokemonType.STEEL, PokemonType.GROUND, 9.2, 400, AbilityId.ROCK_HEAD, AbilityId.STURDY, AbilityId.SHEER_FORCE, 510, 75, 85, 200, 55, 65, 30, 25, 50, 179, GrowthRate.MEDIUM_FAST, 50, true, true, + new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.GROUND, 9.2, 400, AbilityId.ROCK_HEAD, AbilityId.STURDY, AbilityId.SHEER_FORCE, 510, 75, 85, 200, 55, 65, 30, 25, 50, 179, true, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.STEEL, PokemonType.GROUND, 10.5, 740, AbilityId.SAND_FORCE, AbilityId.SAND_FORCE, AbilityId.SAND_FORCE, 610, 75, 125, 230, 55, 95, 30, 25, 50, 179, true), + ), + new PokemonSpecies(SpeciesId.SNUBBULL, 2, false, false, false, "Fairy Pokémon", PokemonType.FAIRY, null, 0.6, 7.8, AbilityId.INTIMIDATE, AbilityId.RUN_AWAY, AbilityId.RATTLED, 300, 60, 80, 50, 40, 40, 30, 190, 70, 60, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.GRANBULL, 2, false, false, false, "Fairy Pokémon", PokemonType.FAIRY, null, 1.4, 48.7, AbilityId.INTIMIDATE, AbilityId.QUICK_FEET, AbilityId.RATTLED, 450, 90, 120, 75, 60, 60, 45, 75, 70, 158, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.QWILFISH, 2, false, false, false, "Balloon Pokémon", PokemonType.WATER, PokemonType.POISON, 0.5, 3.9, AbilityId.POISON_POINT, AbilityId.SWIFT_SWIM, AbilityId.INTIMIDATE, 440, 65, 95, 85, 55, 55, 85, 45, 50, 88, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SCIZOR, 2, false, false, false, "Pincer Pokémon", PokemonType.BUG, PokemonType.STEEL, 1.8, 118, AbilityId.SWARM, AbilityId.TECHNICIAN, AbilityId.LIGHT_METAL, 500, 70, 130, 100, 55, 80, 65, 25, 50, 175, GrowthRate.MEDIUM_FAST, 50, true, true, + new PokemonForm("Normal", "", PokemonType.BUG, PokemonType.STEEL, 1.8, 118, AbilityId.SWARM, AbilityId.TECHNICIAN, AbilityId.LIGHT_METAL, 500, 70, 130, 100, 55, 80, 65, 25, 50, 175, true, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.BUG, PokemonType.STEEL, 2, 125, AbilityId.TECHNICIAN, AbilityId.TECHNICIAN, AbilityId.TECHNICIAN, 600, 70, 150, 140, 65, 100, 75, 25, 50, 175, true), + ), + new PokemonSpecies(SpeciesId.SHUCKLE, 2, false, false, false, "Mold Pokémon", PokemonType.BUG, PokemonType.ROCK, 0.6, 20.5, AbilityId.STURDY, AbilityId.GLUTTONY, AbilityId.CONTRARY, 505, 20, 10, 230, 10, 230, 5, 190, 50, 177, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.HERACROSS, 2, false, false, false, "Single Horn Pokémon", PokemonType.BUG, PokemonType.FIGHTING, 1.5, 54, AbilityId.SWARM, AbilityId.GUTS, AbilityId.MOXIE, 500, 80, 125, 75, 40, 95, 85, 45, 50, 175, GrowthRate.SLOW, 50, true, true, + new PokemonForm("Normal", "", PokemonType.BUG, PokemonType.FIGHTING, 1.5, 54, AbilityId.SWARM, AbilityId.GUTS, AbilityId.MOXIE, 500, 80, 125, 75, 40, 95, 85, 45, 50, 175, true, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.BUG, PokemonType.FIGHTING, 1.7, 62.5, AbilityId.SKILL_LINK, AbilityId.SKILL_LINK, AbilityId.SKILL_LINK, 600, 80, 185, 115, 40, 105, 75, 45, 50, 175, true), + ), + new PokemonSpecies(SpeciesId.SNEASEL, 2, false, false, false, "Sharp Claw Pokémon", PokemonType.DARK, PokemonType.ICE, 0.9, 28, AbilityId.INNER_FOCUS, AbilityId.KEEN_EYE, AbilityId.PICKPOCKET, 430, 55, 95, 55, 35, 75, 115, 60, 35, 86, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.TEDDIURSA, 2, false, false, false, "Little Bear Pokémon", PokemonType.NORMAL, null, 0.6, 8.8, AbilityId.PICKUP, AbilityId.QUICK_FEET, AbilityId.HONEY_GATHER, 330, 60, 80, 50, 50, 50, 40, 120, 70, 66, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.URSARING, 2, false, false, false, "Hibernator Pokémon", PokemonType.NORMAL, null, 1.8, 125.8, AbilityId.GUTS, AbilityId.QUICK_FEET, AbilityId.UNNERVE, 500, 90, 130, 75, 75, 75, 55, 60, 70, 175, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.SLUGMA, 2, false, false, false, "Lava Pokémon", PokemonType.FIRE, null, 0.7, 35, AbilityId.MAGMA_ARMOR, AbilityId.FLAME_BODY, AbilityId.WEAK_ARMOR, 250, 40, 40, 40, 70, 40, 20, 190, 70, 50, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MAGCARGO, 2, false, false, false, "Lava Pokémon", PokemonType.FIRE, PokemonType.ROCK, 0.8, 55, AbilityId.MAGMA_ARMOR, AbilityId.FLAME_BODY, AbilityId.WEAK_ARMOR, 430, 60, 50, 120, 90, 80, 30, 75, 70, 151, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SWINUB, 2, false, false, false, "Pig Pokémon", PokemonType.ICE, PokemonType.GROUND, 0.4, 6.5, AbilityId.OBLIVIOUS, AbilityId.SNOW_CLOAK, AbilityId.THICK_FAT, 250, 50, 50, 40, 30, 30, 50, 225, 50, 50, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.PILOSWINE, 2, false, false, false, "Swine Pokémon", PokemonType.ICE, PokemonType.GROUND, 1.1, 55.8, AbilityId.OBLIVIOUS, AbilityId.SNOW_CLOAK, AbilityId.THICK_FAT, 450, 100, 100, 80, 60, 60, 50, 75, 50, 158, GrowthRate.SLOW, 50, true), + new PokemonSpecies(SpeciesId.CORSOLA, 2, false, false, false, "Coral Pokémon", PokemonType.WATER, PokemonType.ROCK, 0.6, 5, AbilityId.HUSTLE, AbilityId.NATURAL_CURE, AbilityId.REGENERATOR, 410, 65, 55, 95, 65, 95, 35, 60, 50, 144, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.REMORAID, 2, false, false, false, "Jet Pokémon", PokemonType.WATER, null, 0.6, 12, AbilityId.HUSTLE, AbilityId.SNIPER, AbilityId.MOODY, 300, 35, 65, 35, 65, 35, 65, 190, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.OCTILLERY, 2, false, false, false, "Jet Pokémon", PokemonType.WATER, null, 0.9, 28.5, AbilityId.SUCTION_CUPS, AbilityId.SNIPER, AbilityId.MOODY, 480, 75, 105, 75, 105, 75, 45, 75, 50, 168, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.DELIBIRD, 2, false, false, false, "Delivery Pokémon", PokemonType.ICE, PokemonType.FLYING, 0.9, 16, AbilityId.VITAL_SPIRIT, AbilityId.HUSTLE, AbilityId.INSOMNIA, 330, 45, 55, 45, 65, 45, 75, 45, 50, 116, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.MANTINE, 2, false, false, false, "Kite Pokémon", PokemonType.WATER, PokemonType.FLYING, 2.1, 220, AbilityId.SWIFT_SWIM, AbilityId.WATER_ABSORB, AbilityId.WATER_VEIL, 485, 85, 40, 70, 80, 140, 70, 25, 50, 170, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.SKARMORY, 2, false, false, false, "Armor Bird Pokémon", PokemonType.STEEL, PokemonType.FLYING, 1.7, 50.5, AbilityId.KEEN_EYE, AbilityId.STURDY, AbilityId.WEAK_ARMOR, 465, 65, 80, 140, 40, 70, 70, 25, 50, 163, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.HOUNDOUR, 2, false, false, false, "Dark Pokémon", PokemonType.DARK, PokemonType.FIRE, 0.6, 10.8, AbilityId.EARLY_BIRD, AbilityId.FLASH_FIRE, AbilityId.UNNERVE, 330, 45, 60, 30, 80, 50, 65, 120, 35, 66, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.HOUNDOOM, 2, false, false, false, "Dark Pokémon", PokemonType.DARK, PokemonType.FIRE, 1.4, 35, AbilityId.EARLY_BIRD, AbilityId.FLASH_FIRE, AbilityId.UNNERVE, 500, 75, 90, 50, 110, 80, 95, 45, 35, 175, GrowthRate.SLOW, 50, true, true, + new PokemonForm("Normal", "", PokemonType.DARK, PokemonType.FIRE, 1.4, 35, AbilityId.EARLY_BIRD, AbilityId.FLASH_FIRE, AbilityId.UNNERVE, 500, 75, 90, 50, 110, 80, 95, 45, 35, 175, true, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DARK, PokemonType.FIRE, 1.9, 49.5, AbilityId.SOLAR_POWER, AbilityId.SOLAR_POWER, AbilityId.SOLAR_POWER, 600, 75, 90, 90, 140, 90, 115, 45, 35, 175, true), + ), + new PokemonSpecies(SpeciesId.KINGDRA, 2, false, false, false, "Dragon Pokémon", PokemonType.WATER, PokemonType.DRAGON, 1.8, 152, AbilityId.SWIFT_SWIM, AbilityId.SNIPER, AbilityId.DAMP, 540, 75, 95, 95, 95, 95, 85, 45, 50, 270, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PHANPY, 2, false, false, false, "Long Nose Pokémon", PokemonType.GROUND, null, 0.5, 33.5, AbilityId.PICKUP, AbilityId.NONE, AbilityId.SAND_VEIL, 330, 90, 60, 60, 40, 40, 40, 120, 70, 66, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DONPHAN, 2, false, false, false, "Armor Pokémon", PokemonType.GROUND, null, 1.1, 120, AbilityId.STURDY, AbilityId.NONE, AbilityId.SAND_VEIL, 500, 90, 120, 120, 60, 60, 50, 60, 70, 175, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.PORYGON2, 2, false, false, false, "Virtual Pokémon", PokemonType.NORMAL, null, 0.6, 32.5, AbilityId.TRACE, AbilityId.DOWNLOAD, AbilityId.ANALYTIC, 515, 85, 80, 90, 105, 95, 60, 45, 50, 180, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.STANTLER, 2, false, false, false, "Big Horn Pokémon", PokemonType.NORMAL, null, 1.4, 71.2, AbilityId.INTIMIDATE, AbilityId.FRISK, AbilityId.SAP_SIPPER, 465, 73, 95, 62, 85, 65, 85, 45, 70, 163, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.SMEARGLE, 2, false, false, false, "Painter Pokémon", PokemonType.NORMAL, null, 1.2, 58, AbilityId.OWN_TEMPO, AbilityId.TECHNICIAN, AbilityId.MOODY, 250, 55, 20, 35, 20, 45, 75, 45, 70, 88, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.TYROGUE, 2, false, false, false, "Scuffle Pokémon", PokemonType.FIGHTING, null, 0.7, 21, AbilityId.GUTS, AbilityId.STEADFAST, AbilityId.VITAL_SPIRIT, 210, 35, 35, 35, 35, 35, 35, 75, 50, 42, GrowthRate.MEDIUM_FAST, 100, false), + new PokemonSpecies(SpeciesId.HITMONTOP, 2, false, false, false, "Handstand Pokémon", PokemonType.FIGHTING, null, 1.4, 48, AbilityId.INTIMIDATE, AbilityId.TECHNICIAN, AbilityId.STEADFAST, 455, 50, 95, 95, 35, 110, 70, 45, 50, 159, GrowthRate.MEDIUM_FAST, 100, false), + new PokemonSpecies(SpeciesId.SMOOCHUM, 2, false, false, false, "Kiss Pokémon", PokemonType.ICE, PokemonType.PSYCHIC, 0.4, 6, AbilityId.OBLIVIOUS, AbilityId.FOREWARN, AbilityId.HYDRATION, 305, 45, 30, 15, 85, 65, 65, 45, 50, 61, GrowthRate.MEDIUM_FAST, 0, false), + new PokemonSpecies(SpeciesId.ELEKID, 2, false, false, false, "Electric Pokémon", PokemonType.ELECTRIC, null, 0.6, 23.5, AbilityId.STATIC, AbilityId.NONE, AbilityId.VITAL_SPIRIT, 360, 45, 63, 37, 65, 55, 95, 45, 50, 72, GrowthRate.MEDIUM_FAST, 75, false), + new PokemonSpecies(SpeciesId.MAGBY, 2, false, false, false, "Live Coal Pokémon", PokemonType.FIRE, null, 0.7, 21.4, AbilityId.FLAME_BODY, AbilityId.NONE, AbilityId.VITAL_SPIRIT, 365, 45, 75, 37, 70, 55, 83, 45, 50, 73, GrowthRate.MEDIUM_FAST, 75, false), + new PokemonSpecies(SpeciesId.MILTANK, 2, false, false, false, "Milk Cow Pokémon", PokemonType.NORMAL, null, 1.2, 75.5, AbilityId.THICK_FAT, AbilityId.SCRAPPY, AbilityId.SAP_SIPPER, 490, 95, 80, 105, 40, 70, 100, 45, 50, 172, GrowthRate.SLOW, 0, false), + new PokemonSpecies(SpeciesId.BLISSEY, 2, false, false, false, "Happiness Pokémon", PokemonType.NORMAL, null, 1.5, 46.8, AbilityId.NATURAL_CURE, AbilityId.SERENE_GRACE, AbilityId.HEALER, 540, 255, 10, 10, 75, 135, 55, 30, 140, 608, GrowthRate.FAST, 0, false), + new PokemonSpecies(SpeciesId.RAIKOU, 2, true, false, false, "Thunder Pokémon", PokemonType.ELECTRIC, null, 1.9, 178, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.INNER_FOCUS, 580, 90, 85, 75, 115, 100, 115, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.ENTEI, 2, true, false, false, "Volcano Pokémon", PokemonType.FIRE, null, 2.1, 198, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.INNER_FOCUS, 580, 115, 115, 85, 90, 75, 100, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.SUICUNE, 2, true, false, false, "Aurora Pokémon", PokemonType.WATER, null, 2, 187, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.INNER_FOCUS, 580, 100, 75, 115, 90, 115, 85, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.LARVITAR, 2, false, false, false, "Rock Skin Pokémon", PokemonType.ROCK, PokemonType.GROUND, 0.6, 72, AbilityId.GUTS, AbilityId.NONE, AbilityId.SAND_VEIL, 300, 50, 64, 50, 45, 50, 41, 45, 35, 60, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.PUPITAR, 2, false, false, false, "Hard Shell Pokémon", PokemonType.ROCK, PokemonType.GROUND, 1.2, 152, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.SHED_SKIN, 410, 70, 84, 70, 65, 70, 51, 45, 35, 144, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.TYRANITAR, 2, false, false, false, "Armor Pokémon", PokemonType.ROCK, PokemonType.DARK, 2, 202, AbilityId.SAND_STREAM, AbilityId.NONE, AbilityId.UNNERVE, 600, 100, 134, 110, 95, 100, 61, 45, 35, 300, GrowthRate.SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.ROCK, PokemonType.DARK, 2, 202, AbilityId.SAND_STREAM, AbilityId.NONE, AbilityId.UNNERVE, 600, 100, 134, 110, 95, 100, 61, 45, 35, 300, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.ROCK, PokemonType.DARK, 2.5, 255, AbilityId.SAND_STREAM, AbilityId.NONE, AbilityId.SAND_STREAM, 700, 100, 164, 150, 95, 120, 71, 45, 35, 300), + ), + new PokemonSpecies(SpeciesId.LUGIA, 2, false, true, false, "Diving Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 5.2, 216, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.MULTISCALE, 680, 106, 90, 130, 90, 154, 110, 3, 0, 340, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.HO_OH, 2, false, true, false, "Rainbow Pokémon", PokemonType.FIRE, PokemonType.FLYING, 3.8, 199, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.REGENERATOR, 680, 106, 130, 90, 110, 154, 90, 3, 0, 340, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.CELEBI, 2, false, false, true, "Time Travel Pokémon", PokemonType.PSYCHIC, PokemonType.GRASS, 0.6, 5, AbilityId.NATURAL_CURE, AbilityId.NONE, AbilityId.NONE, 600, 100, 100, 100, 100, 100, 100, 45, 100, 300, GrowthRate.MEDIUM_SLOW, null, false), + new PokemonSpecies(SpeciesId.TREECKO, 3, false, false, false, "Wood Gecko Pokémon", PokemonType.GRASS, null, 0.5, 5, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.UNBURDEN, 310, 40, 45, 35, 65, 55, 70, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.GROVYLE, 3, false, false, false, "Wood Gecko Pokémon", PokemonType.GRASS, null, 0.9, 21.6, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.UNBURDEN, 405, 50, 65, 45, 85, 65, 95, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.SCEPTILE, 3, false, false, false, "Forest Pokémon", PokemonType.GRASS, null, 1.7, 52.2, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.UNBURDEN, 530, 70, 85, 65, 105, 85, 120, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, + new PokemonForm("Normal", "", PokemonType.GRASS, null, 1.7, 52.2, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.UNBURDEN, 530, 70, 85, 65, 105, 85, 120, 45, 50, 265, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.GRASS, PokemonType.DRAGON, 1.9, 55.2, AbilityId.LIGHTNING_ROD, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 630, 70, 110, 75, 145, 85, 145, 45, 50, 265), + ), + new PokemonSpecies(SpeciesId.TORCHIC, 3, false, false, false, "Chick Pokémon", PokemonType.FIRE, null, 0.4, 2.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.SPEED_BOOST, 310, 45, 60, 40, 70, 50, 45, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, true), + new PokemonSpecies(SpeciesId.COMBUSKEN, 3, false, false, false, "Young Fowl Pokémon", PokemonType.FIRE, PokemonType.FIGHTING, 0.9, 19.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.SPEED_BOOST, 405, 60, 85, 60, 85, 60, 55, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, true), + new PokemonSpecies(SpeciesId.BLAZIKEN, 3, false, false, false, "Blaze Pokémon", PokemonType.FIRE, PokemonType.FIGHTING, 1.9, 52, AbilityId.BLAZE, AbilityId.NONE, AbilityId.SPEED_BOOST, 530, 80, 120, 70, 110, 70, 80, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, true, true, + new PokemonForm("Normal", "", PokemonType.FIRE, PokemonType.FIGHTING, 1.9, 52, AbilityId.BLAZE, AbilityId.NONE, AbilityId.SPEED_BOOST, 530, 80, 120, 70, 110, 70, 80, 45, 50, 265, true, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.FIRE, PokemonType.FIGHTING, 1.9, 52, AbilityId.SPEED_BOOST, AbilityId.NONE, AbilityId.SPEED_BOOST, 630, 80, 160, 80, 130, 80, 100, 45, 50, 265, true), + ), + new PokemonSpecies(SpeciesId.MUDKIP, 3, false, false, false, "Mud Fish Pokémon", PokemonType.WATER, null, 0.4, 7.6, AbilityId.TORRENT, AbilityId.NONE, AbilityId.DAMP, 310, 50, 70, 50, 50, 50, 40, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.MARSHTOMP, 3, false, false, false, "Mud Fish Pokémon", PokemonType.WATER, PokemonType.GROUND, 0.7, 28, AbilityId.TORRENT, AbilityId.NONE, AbilityId.DAMP, 405, 70, 85, 70, 60, 70, 50, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.SWAMPERT, 3, false, false, false, "Mud Fish Pokémon", PokemonType.WATER, PokemonType.GROUND, 1.5, 81.9, AbilityId.TORRENT, AbilityId.NONE, AbilityId.DAMP, 535, 100, 110, 90, 85, 90, 60, 45, 50, 268, GrowthRate.MEDIUM_SLOW, 87.5, false, true, + new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.GROUND, 1.5, 81.9, AbilityId.TORRENT, AbilityId.NONE, AbilityId.DAMP, 535, 100, 110, 90, 85, 90, 60, 45, 50, 268, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.WATER, PokemonType.GROUND, 1.9, 102, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.SWIFT_SWIM, 635, 100, 150, 110, 95, 110, 70, 45, 50, 268), + ), + new PokemonSpecies(SpeciesId.POOCHYENA, 3, false, false, false, "Bite Pokémon", PokemonType.DARK, null, 0.5, 13.6, AbilityId.RUN_AWAY, AbilityId.QUICK_FEET, AbilityId.RATTLED, 220, 35, 55, 35, 30, 30, 35, 255, 70, 56, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MIGHTYENA, 3, false, false, false, "Bite Pokémon", PokemonType.DARK, null, 1, 37, AbilityId.INTIMIDATE, AbilityId.QUICK_FEET, AbilityId.MOXIE, 420, 70, 90, 70, 60, 60, 70, 127, 70, 147, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ZIGZAGOON, 3, false, false, false, "Tiny Raccoon Pokémon", PokemonType.NORMAL, null, 0.4, 17.5, AbilityId.PICKUP, AbilityId.GLUTTONY, AbilityId.QUICK_FEET, 240, 38, 30, 41, 30, 41, 60, 255, 50, 56, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.LINOONE, 3, false, false, false, "Rushing Pokémon", PokemonType.NORMAL, null, 0.5, 32.5, AbilityId.PICKUP, AbilityId.GLUTTONY, AbilityId.QUICK_FEET, 420, 78, 70, 61, 50, 61, 100, 90, 50, 147, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.WURMPLE, 3, false, false, false, "Worm Pokémon", PokemonType.BUG, null, 0.3, 3.6, AbilityId.SHIELD_DUST, AbilityId.NONE, AbilityId.RUN_AWAY, 195, 45, 45, 35, 20, 30, 20, 255, 70, 56, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SILCOON, 3, false, false, false, "Cocoon Pokémon", PokemonType.BUG, null, 0.6, 10, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.SHED_SKIN, 205, 50, 35, 55, 25, 25, 15, 120, 70, 72, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BEAUTIFLY, 3, false, false, false, "Butterfly Pokémon", PokemonType.BUG, PokemonType.FLYING, 1, 28.4, AbilityId.SWARM, AbilityId.NONE, AbilityId.RIVALRY, 395, 60, 70, 50, 100, 50, 65, 45, 70, 198, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.CASCOON, 3, false, false, false, "Cocoon Pokémon", PokemonType.BUG, null, 0.7, 11.5, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.SHED_SKIN, 205, 50, 35, 55, 25, 25, 15, 120, 70, 72, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DUSTOX, 3, false, false, false, "Poison Moth Pokémon", PokemonType.BUG, PokemonType.POISON, 1.2, 31.6, AbilityId.SHIELD_DUST, AbilityId.NONE, AbilityId.COMPOUND_EYES, 385, 60, 50, 70, 50, 90, 65, 45, 70, 193, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.LOTAD, 3, false, false, false, "Water Weed Pokémon", PokemonType.WATER, PokemonType.GRASS, 0.5, 2.6, AbilityId.SWIFT_SWIM, AbilityId.RAIN_DISH, AbilityId.OWN_TEMPO, 220, 40, 30, 30, 40, 50, 30, 255, 50, 44, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.LOMBRE, 3, false, false, false, "Jolly Pokémon", PokemonType.WATER, PokemonType.GRASS, 1.2, 32.5, AbilityId.SWIFT_SWIM, AbilityId.RAIN_DISH, AbilityId.OWN_TEMPO, 340, 60, 50, 50, 60, 70, 50, 120, 50, 119, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.LUDICOLO, 3, false, false, false, "Carefree Pokémon", PokemonType.WATER, PokemonType.GRASS, 1.5, 55, AbilityId.SWIFT_SWIM, AbilityId.RAIN_DISH, AbilityId.OWN_TEMPO, 480, 80, 70, 70, 90, 100, 70, 45, 50, 240, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.SEEDOT, 3, false, false, false, "Acorn Pokémon", PokemonType.GRASS, null, 0.5, 4, AbilityId.CHLOROPHYLL, AbilityId.EARLY_BIRD, AbilityId.PICKPOCKET, 220, 40, 40, 50, 30, 30, 30, 255, 50, 44, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.NUZLEAF, 3, false, false, false, "Wily Pokémon", PokemonType.GRASS, PokemonType.DARK, 1, 28, AbilityId.CHLOROPHYLL, AbilityId.EARLY_BIRD, AbilityId.PICKPOCKET, 340, 70, 70, 40, 60, 40, 60, 120, 50, 119, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.SHIFTRY, 3, false, false, false, "Wicked Pokémon", PokemonType.GRASS, PokemonType.DARK, 1.3, 59.6, AbilityId.CHLOROPHYLL, AbilityId.WIND_RIDER, AbilityId.PICKPOCKET, 480, 90, 100, 60, 90, 60, 80, 45, 50, 240, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.TAILLOW, 3, false, false, false, "Tiny Swallow Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.3, 2.3, AbilityId.GUTS, AbilityId.NONE, AbilityId.SCRAPPY, 270, 40, 55, 30, 30, 30, 85, 200, 70, 54, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.SWELLOW, 3, false, false, false, "Swallow Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.7, 19.8, AbilityId.GUTS, AbilityId.NONE, AbilityId.SCRAPPY, 455, 60, 85, 60, 75, 50, 125, 45, 70, 159, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.WINGULL, 3, false, false, false, "Seagull Pokémon", PokemonType.WATER, PokemonType.FLYING, 0.6, 9.5, AbilityId.KEEN_EYE, AbilityId.HYDRATION, AbilityId.RAIN_DISH, 270, 40, 30, 30, 55, 30, 85, 190, 50, 54, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PELIPPER, 3, false, false, false, "Water Bird Pokémon", PokemonType.WATER, PokemonType.FLYING, 1.2, 28, AbilityId.KEEN_EYE, AbilityId.DRIZZLE, AbilityId.RAIN_DISH, 440, 60, 50, 100, 95, 70, 65, 45, 50, 154, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.RALTS, 3, false, false, false, "Feeling Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 0.4, 6.6, AbilityId.SYNCHRONIZE, AbilityId.TRACE, AbilityId.TELEPATHY, 198, 28, 25, 25, 45, 35, 40, 235, 35, 40, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.KIRLIA, 3, false, false, false, "Emotion Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 0.8, 20.2, AbilityId.SYNCHRONIZE, AbilityId.TRACE, AbilityId.TELEPATHY, 278, 38, 35, 35, 65, 55, 50, 120, 35, 97, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.GARDEVOIR, 3, false, false, false, "Embrace Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 1.6, 48.4, AbilityId.SYNCHRONIZE, AbilityId.TRACE, AbilityId.TELEPATHY, 518, 68, 65, 65, 125, 115, 80, 45, 35, 259, GrowthRate.SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.PSYCHIC, PokemonType.FAIRY, 1.6, 48.4, AbilityId.SYNCHRONIZE, AbilityId.TRACE, AbilityId.TELEPATHY, 518, 68, 65, 65, 125, 115, 80, 45, 35, 259, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.PSYCHIC, PokemonType.FAIRY, 1.6, 48.4, AbilityId.PIXILATE, AbilityId.PIXILATE, AbilityId.PIXILATE, 618, 68, 85, 65, 165, 135, 100, 45, 35, 259), + ), + new PokemonSpecies(SpeciesId.SURSKIT, 3, false, false, false, "Pond Skater Pokémon", PokemonType.BUG, PokemonType.WATER, 0.5, 1.7, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.RAIN_DISH, 269, 40, 30, 32, 50, 52, 65, 200, 70, 54, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MASQUERAIN, 3, false, false, false, "Eyeball Pokémon", PokemonType.BUG, PokemonType.FLYING, 0.8, 3.6, AbilityId.INTIMIDATE, AbilityId.NONE, AbilityId.UNNERVE, 454, 70, 60, 62, 100, 82, 80, 75, 70, 159, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SHROOMISH, 3, false, false, false, "Mushroom Pokémon", PokemonType.GRASS, null, 0.4, 4.5, AbilityId.EFFECT_SPORE, AbilityId.POISON_HEAL, AbilityId.QUICK_FEET, 295, 60, 40, 60, 40, 60, 35, 255, 70, 59, GrowthRate.FLUCTUATING, 50, false), + new PokemonSpecies(SpeciesId.BRELOOM, 3, false, false, false, "Mushroom Pokémon", PokemonType.GRASS, PokemonType.FIGHTING, 1.2, 39.2, AbilityId.EFFECT_SPORE, AbilityId.POISON_HEAL, AbilityId.TECHNICIAN, 460, 60, 130, 80, 60, 60, 70, 90, 70, 161, GrowthRate.FLUCTUATING, 50, false), + new PokemonSpecies(SpeciesId.SLAKOTH, 3, false, false, false, "Slacker Pokémon", PokemonType.NORMAL, null, 0.8, 24, AbilityId.TRUANT, AbilityId.NONE, AbilityId.STALL, 280, 60, 60, 60, 35, 35, 30, 255, 70, 56, GrowthRate.SLOW, 50, false), //Custom Hidden + new PokemonSpecies(SpeciesId.VIGOROTH, 3, false, false, false, "Wild Monkey Pokémon", PokemonType.NORMAL, null, 1.4, 46.5, AbilityId.VITAL_SPIRIT, AbilityId.NONE, AbilityId.INSOMNIA, 440, 80, 80, 80, 55, 55, 90, 120, 70, 154, GrowthRate.SLOW, 50, false), //Custom Hidden + new PokemonSpecies(SpeciesId.SLAKING, 3, false, false, false, "Lazy Pokémon", PokemonType.NORMAL, null, 2, 130.5, AbilityId.TRUANT, AbilityId.NONE, AbilityId.STALL, 670, 150, 160, 100, 95, 65, 100, 45, 70, 285, GrowthRate.SLOW, 50, false), //Custom Hidden + new PokemonSpecies(SpeciesId.NINCADA, 3, false, false, false, "Trainee Pokémon", PokemonType.BUG, PokemonType.GROUND, 0.5, 5.5, AbilityId.COMPOUND_EYES, AbilityId.NONE, AbilityId.RUN_AWAY, 266, 31, 45, 90, 30, 30, 40, 255, 50, 53, GrowthRate.ERRATIC, 50, false), + new PokemonSpecies(SpeciesId.NINJASK, 3, false, false, false, "Ninja Pokémon", PokemonType.BUG, PokemonType.FLYING, 0.8, 12, AbilityId.SPEED_BOOST, AbilityId.NONE, AbilityId.INFILTRATOR, 456, 61, 90, 45, 50, 50, 160, 120, 50, 160, GrowthRate.ERRATIC, 50, false), + new PokemonSpecies(SpeciesId.SHEDINJA, 3, false, false, false, "Shed Pokémon", PokemonType.BUG, PokemonType.GHOST, 0.8, 1.2, AbilityId.WONDER_GUARD, AbilityId.NONE, AbilityId.NONE, 236, 1, 90, 45, 30, 30, 40, 45, 50, 83, GrowthRate.ERRATIC, null, false), + new PokemonSpecies(SpeciesId.WHISMUR, 3, false, false, false, "Whisper Pokémon", PokemonType.NORMAL, null, 0.6, 16.3, AbilityId.SOUNDPROOF, AbilityId.NONE, AbilityId.RATTLED, 240, 64, 51, 23, 51, 23, 28, 190, 50, 48, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.LOUDRED, 3, false, false, false, "Big Voice Pokémon", PokemonType.NORMAL, null, 1, 40.5, AbilityId.SOUNDPROOF, AbilityId.NONE, AbilityId.SCRAPPY, 360, 84, 71, 43, 71, 43, 48, 120, 50, 126, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.EXPLOUD, 3, false, false, false, "Loud Noise Pokémon", PokemonType.NORMAL, null, 1.5, 84, AbilityId.SOUNDPROOF, AbilityId.NONE, AbilityId.SCRAPPY, 490, 104, 91, 63, 91, 73, 68, 45, 50, 245, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.MAKUHITA, 3, false, false, false, "Guts Pokémon", PokemonType.FIGHTING, null, 1, 86.4, AbilityId.THICK_FAT, AbilityId.GUTS, AbilityId.SHEER_FORCE, 237, 72, 60, 30, 20, 30, 25, 180, 70, 47, GrowthRate.FLUCTUATING, 75, false), + new PokemonSpecies(SpeciesId.HARIYAMA, 3, false, false, false, "Arm Thrust Pokémon", PokemonType.FIGHTING, null, 2.3, 253.8, AbilityId.THICK_FAT, AbilityId.GUTS, AbilityId.SHEER_FORCE, 474, 144, 120, 60, 40, 60, 50, 200, 70, 166, GrowthRate.FLUCTUATING, 75, false), + new PokemonSpecies(SpeciesId.AZURILL, 3, false, false, false, "Polka Dot Pokémon", PokemonType.NORMAL, PokemonType.FAIRY, 0.2, 2, AbilityId.THICK_FAT, AbilityId.HUGE_POWER, AbilityId.SAP_SIPPER, 190, 50, 20, 40, 20, 40, 20, 150, 50, 38, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.NOSEPASS, 3, false, false, false, "Compass Pokémon", PokemonType.ROCK, null, 1, 97, AbilityId.STURDY, AbilityId.MAGNET_PULL, AbilityId.SAND_FORCE, 375, 30, 45, 135, 45, 90, 30, 255, 70, 75, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SKITTY, 3, false, false, false, "Kitten Pokémon", PokemonType.NORMAL, null, 0.6, 11, AbilityId.CUTE_CHARM, AbilityId.NORMALIZE, AbilityId.WONDER_SKIN, 260, 50, 45, 45, 35, 35, 50, 255, 70, 52, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.DELCATTY, 3, false, false, false, "Prim Pokémon", PokemonType.NORMAL, null, 1.1, 32.6, AbilityId.CUTE_CHARM, AbilityId.NORMALIZE, AbilityId.WONDER_SKIN, 400, 70, 65, 65, 55, 55, 90, 60, 70, 140, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.SABLEYE, 3, false, false, false, "Darkness Pokémon", PokemonType.DARK, PokemonType.GHOST, 0.5, 11, AbilityId.KEEN_EYE, AbilityId.STALL, AbilityId.PRANKSTER, 380, 50, 75, 75, 65, 65, 50, 45, 35, 133, GrowthRate.MEDIUM_SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.DARK, PokemonType.GHOST, 0.5, 11, AbilityId.KEEN_EYE, AbilityId.STALL, AbilityId.PRANKSTER, 380, 50, 75, 75, 65, 65, 50, 45, 35, 133, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DARK, PokemonType.GHOST, 0.5, 161, AbilityId.MAGIC_BOUNCE, AbilityId.MAGIC_BOUNCE, AbilityId.MAGIC_BOUNCE, 480, 50, 85, 125, 85, 115, 20, 45, 35, 133), + ), + new PokemonSpecies(SpeciesId.MAWILE, 3, false, false, false, "Deceiver Pokémon", PokemonType.STEEL, PokemonType.FAIRY, 0.6, 11.5, AbilityId.HYPER_CUTTER, AbilityId.INTIMIDATE, AbilityId.SHEER_FORCE, 380, 50, 85, 85, 55, 55, 50, 45, 50, 133, GrowthRate.FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.FAIRY, 0.6, 11.5, AbilityId.HYPER_CUTTER, AbilityId.INTIMIDATE, AbilityId.SHEER_FORCE, 380, 50, 85, 85, 55, 55, 50, 45, 50, 133, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.STEEL, PokemonType.FAIRY, 1, 23.5, AbilityId.HUGE_POWER, AbilityId.HUGE_POWER, AbilityId.HUGE_POWER, 480, 50, 105, 125, 55, 95, 50, 45, 50, 133), + ), + new PokemonSpecies(SpeciesId.ARON, 3, false, false, false, "Iron Armor Pokémon", PokemonType.STEEL, PokemonType.ROCK, 0.4, 60, AbilityId.STURDY, AbilityId.ROCK_HEAD, AbilityId.HEAVY_METAL, 330, 50, 70, 100, 40, 40, 30, 180, 35, 66, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.LAIRON, 3, false, false, false, "Iron Armor Pokémon", PokemonType.STEEL, PokemonType.ROCK, 0.9, 120, AbilityId.STURDY, AbilityId.ROCK_HEAD, AbilityId.HEAVY_METAL, 430, 60, 90, 140, 50, 50, 40, 90, 35, 151, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.AGGRON, 3, false, false, false, "Iron Armor Pokémon", PokemonType.STEEL, PokemonType.ROCK, 2.1, 360, AbilityId.STURDY, AbilityId.ROCK_HEAD, AbilityId.HEAVY_METAL, 530, 70, 110, 180, 60, 60, 50, 45, 35, 265, GrowthRate.SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.ROCK, 2.1, 360, AbilityId.STURDY, AbilityId.ROCK_HEAD, AbilityId.HEAVY_METAL, 530, 70, 110, 180, 60, 60, 50, 45, 35, 265, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.STEEL, null, 2.2, 395, AbilityId.FILTER, AbilityId.FILTER, AbilityId.FILTER, 630, 70, 140, 230, 60, 80, 50, 45, 35, 265), + ), + new PokemonSpecies(SpeciesId.MEDITITE, 3, false, false, false, "Meditate Pokémon", PokemonType.FIGHTING, PokemonType.PSYCHIC, 0.6, 11.2, AbilityId.PURE_POWER, AbilityId.NONE, AbilityId.TELEPATHY, 280, 30, 40, 55, 40, 55, 60, 180, 70, 56, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.MEDICHAM, 3, false, false, false, "Meditate Pokémon", PokemonType.FIGHTING, PokemonType.PSYCHIC, 1.3, 31.5, AbilityId.PURE_POWER, AbilityId.NONE, AbilityId.TELEPATHY, 410, 60, 60, 75, 60, 75, 80, 90, 70, 144, GrowthRate.MEDIUM_FAST, 50, true, true, + new PokemonForm("Normal", "", PokemonType.FIGHTING, PokemonType.PSYCHIC, 1.3, 31.5, AbilityId.PURE_POWER, AbilityId.NONE, AbilityId.TELEPATHY, 410, 60, 60, 75, 60, 75, 80, 90, 70, 144, true, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.FIGHTING, PokemonType.PSYCHIC, 1.3, 31.5, AbilityId.PURE_POWER, AbilityId.NONE, AbilityId.PURE_POWER, 510, 60, 100, 85, 80, 85, 100, 90, 70, 144, true), + ), + new PokemonSpecies(SpeciesId.ELECTRIKE, 3, false, false, false, "Lightning Pokémon", PokemonType.ELECTRIC, null, 0.6, 15.2, AbilityId.STATIC, AbilityId.LIGHTNING_ROD, AbilityId.MINUS, 295, 40, 45, 40, 65, 40, 65, 120, 50, 59, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.MANECTRIC, 3, false, false, false, "Discharge Pokémon", PokemonType.ELECTRIC, null, 1.5, 40.2, AbilityId.STATIC, AbilityId.LIGHTNING_ROD, AbilityId.MINUS, 475, 70, 75, 60, 105, 60, 105, 45, 50, 166, GrowthRate.SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.ELECTRIC, null, 1.5, 40.2, AbilityId.STATIC, AbilityId.LIGHTNING_ROD, AbilityId.MINUS, 475, 70, 75, 60, 105, 60, 105, 45, 50, 166, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.ELECTRIC, null, 1.8, 44, AbilityId.INTIMIDATE, AbilityId.INTIMIDATE, AbilityId.INTIMIDATE, 575, 70, 75, 80, 135, 80, 135, 45, 50, 166), + ), + new PokemonSpecies(SpeciesId.PLUSLE, 3, false, false, false, "Cheering Pokémon", PokemonType.ELECTRIC, null, 0.4, 4.2, AbilityId.PLUS, AbilityId.NONE, AbilityId.LIGHTNING_ROD, 405, 60, 50, 40, 85, 75, 95, 200, 70, 142, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MINUN, 3, false, false, false, "Cheering Pokémon", PokemonType.ELECTRIC, null, 0.4, 4.2, AbilityId.MINUS, AbilityId.NONE, AbilityId.VOLT_ABSORB, 405, 60, 40, 50, 75, 85, 95, 200, 70, 142, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.VOLBEAT, 3, false, false, false, "Firefly Pokémon", PokemonType.BUG, null, 0.7, 17.7, AbilityId.ILLUMINATE, AbilityId.SWARM, AbilityId.PRANKSTER, 430, 65, 73, 75, 47, 85, 85, 150, 70, 151, GrowthRate.ERRATIC, 100, false), + new PokemonSpecies(SpeciesId.ILLUMISE, 3, false, false, false, "Firefly Pokémon", PokemonType.BUG, null, 0.6, 17.7, AbilityId.OBLIVIOUS, AbilityId.TINTED_LENS, AbilityId.PRANKSTER, 430, 65, 47, 75, 73, 85, 85, 150, 70, 151, GrowthRate.FLUCTUATING, 0, false), + new PokemonSpecies(SpeciesId.ROSELIA, 3, false, false, false, "Thorn Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.3, 2, AbilityId.NATURAL_CURE, AbilityId.POISON_POINT, AbilityId.LEAF_GUARD, 400, 50, 60, 45, 100, 80, 65, 150, 50, 140, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.GULPIN, 3, false, false, false, "Stomach Pokémon", PokemonType.POISON, null, 0.4, 10.3, AbilityId.LIQUID_OOZE, AbilityId.STICKY_HOLD, AbilityId.GLUTTONY, 302, 70, 43, 53, 43, 53, 40, 225, 70, 60, GrowthRate.FLUCTUATING, 50, true), + new PokemonSpecies(SpeciesId.SWALOT, 3, false, false, false, "Poison Bag Pokémon", PokemonType.POISON, null, 1.7, 80, AbilityId.LIQUID_OOZE, AbilityId.STICKY_HOLD, AbilityId.GLUTTONY, 467, 100, 73, 83, 73, 83, 55, 75, 70, 163, GrowthRate.FLUCTUATING, 50, true), + new PokemonSpecies(SpeciesId.CARVANHA, 3, false, false, false, "Savage Pokémon", PokemonType.WATER, PokemonType.DARK, 0.8, 20.8, AbilityId.ROUGH_SKIN, AbilityId.NONE, AbilityId.SPEED_BOOST, 305, 45, 90, 20, 65, 20, 65, 225, 35, 61, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.SHARPEDO, 3, false, false, false, "Brutal Pokémon", PokemonType.WATER, PokemonType.DARK, 1.8, 88.8, AbilityId.ROUGH_SKIN, AbilityId.NONE, AbilityId.SPEED_BOOST, 460, 70, 120, 40, 95, 40, 95, 60, 35, 161, GrowthRate.SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.DARK, 1.8, 88.8, AbilityId.ROUGH_SKIN, AbilityId.NONE, AbilityId.SPEED_BOOST, 460, 70, 120, 40, 95, 40, 95, 60, 35, 161, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.WATER, PokemonType.DARK, 2.5, 130.3, AbilityId.STRONG_JAW, AbilityId.NONE, AbilityId.STRONG_JAW, 560, 70, 140, 70, 110, 65, 105, 60, 35, 161), + ), + new PokemonSpecies(SpeciesId.WAILMER, 3, false, false, false, "Ball Whale Pokémon", PokemonType.WATER, null, 2, 130, AbilityId.WATER_VEIL, AbilityId.OBLIVIOUS, AbilityId.PRESSURE, 400, 130, 70, 35, 70, 35, 60, 125, 50, 80, GrowthRate.FLUCTUATING, 50, false), + new PokemonSpecies(SpeciesId.WAILORD, 3, false, false, false, "Float Whale Pokémon", PokemonType.WATER, null, 14.5, 398, AbilityId.WATER_VEIL, AbilityId.OBLIVIOUS, AbilityId.PRESSURE, 500, 170, 90, 45, 90, 45, 60, 60, 50, 175, GrowthRate.FLUCTUATING, 50, false), + new PokemonSpecies(SpeciesId.NUMEL, 3, false, false, false, "Numb Pokémon", PokemonType.FIRE, PokemonType.GROUND, 0.7, 24, AbilityId.OBLIVIOUS, AbilityId.SIMPLE, AbilityId.OWN_TEMPO, 305, 60, 60, 40, 65, 45, 35, 255, 70, 61, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.CAMERUPT, 3, false, false, false, "Eruption Pokémon", PokemonType.FIRE, PokemonType.GROUND, 1.9, 220, AbilityId.MAGMA_ARMOR, AbilityId.SOLID_ROCK, AbilityId.ANGER_POINT, 460, 70, 100, 70, 105, 75, 40, 150, 70, 161, GrowthRate.MEDIUM_FAST, 50, true, true, + new PokemonForm("Normal", "", PokemonType.FIRE, PokemonType.GROUND, 1.9, 220, AbilityId.MAGMA_ARMOR, AbilityId.SOLID_ROCK, AbilityId.ANGER_POINT, 460, 70, 100, 70, 105, 75, 40, 150, 70, 161, true, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.FIRE, PokemonType.GROUND, 2.5, 320.5, AbilityId.SHEER_FORCE, AbilityId.SHEER_FORCE, AbilityId.SHEER_FORCE, 560, 70, 120, 100, 145, 105, 20, 150, 70, 161), + ), + new PokemonSpecies(SpeciesId.TORKOAL, 3, false, false, false, "Coal Pokémon", PokemonType.FIRE, null, 0.5, 80.4, AbilityId.WHITE_SMOKE, AbilityId.DROUGHT, AbilityId.SHELL_ARMOR, 470, 70, 85, 140, 85, 70, 20, 90, 50, 165, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SPOINK, 3, false, false, false, "Bounce Pokémon", PokemonType.PSYCHIC, null, 0.7, 30.6, AbilityId.THICK_FAT, AbilityId.OWN_TEMPO, AbilityId.GLUTTONY, 330, 60, 25, 35, 70, 80, 60, 255, 70, 66, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.GRUMPIG, 3, false, false, false, "Manipulate Pokémon", PokemonType.PSYCHIC, null, 0.9, 71.5, AbilityId.THICK_FAT, AbilityId.OWN_TEMPO, AbilityId.GLUTTONY, 470, 80, 45, 65, 90, 110, 80, 60, 70, 165, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.SPINDA, 3, false, false, false, "Spot Panda Pokémon", PokemonType.NORMAL, null, 1.1, 5, AbilityId.OWN_TEMPO, AbilityId.TANGLED_FEET, AbilityId.CONTRARY, 360, 60, 60, 60, 60, 60, 60, 255, 70, 126, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.TRAPINCH, 3, false, false, false, "Ant Pit Pokémon", PokemonType.GROUND, null, 0.7, 15, AbilityId.HYPER_CUTTER, AbilityId.ARENA_TRAP, AbilityId.SHEER_FORCE, 290, 45, 100, 45, 45, 45, 10, 255, 50, 58, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.VIBRAVA, 3, false, false, false, "Vibration Pokémon", PokemonType.GROUND, PokemonType.DRAGON, 1.1, 15.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 340, 50, 70, 50, 50, 50, 70, 120, 50, 119, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.FLYGON, 3, false, false, false, "Mystic Pokémon", PokemonType.GROUND, PokemonType.DRAGON, 2, 82, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 520, 80, 100, 80, 80, 80, 100, 45, 50, 260, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.CACNEA, 3, false, false, false, "Cactus Pokémon", PokemonType.GRASS, null, 0.4, 51.3, AbilityId.SAND_VEIL, AbilityId.NONE, AbilityId.WATER_ABSORB, 335, 50, 85, 40, 85, 40, 35, 190, 35, 67, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.CACTURNE, 3, false, false, false, "Scarecrow Pokémon", PokemonType.GRASS, PokemonType.DARK, 1.3, 77.4, AbilityId.SAND_VEIL, AbilityId.NONE, AbilityId.WATER_ABSORB, 475, 70, 115, 60, 115, 60, 55, 60, 35, 166, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.SWABLU, 3, false, false, false, "Cotton Bird Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.4, 1.2, AbilityId.NATURAL_CURE, AbilityId.NONE, AbilityId.CLOUD_NINE, 310, 45, 40, 60, 40, 75, 50, 255, 50, 62, GrowthRate.ERRATIC, 50, false), + new PokemonSpecies(SpeciesId.ALTARIA, 3, false, false, false, "Humming Pokémon", PokemonType.DRAGON, PokemonType.FLYING, 1.1, 20.6, AbilityId.NATURAL_CURE, AbilityId.NONE, AbilityId.CLOUD_NINE, 490, 75, 70, 90, 70, 105, 80, 45, 50, 172, GrowthRate.ERRATIC, 50, false, true, + new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.FLYING, 1.1, 20.6, AbilityId.NATURAL_CURE, AbilityId.NONE, AbilityId.CLOUD_NINE, 490, 75, 70, 90, 70, 105, 80, 45, 50, 172, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DRAGON, PokemonType.FAIRY, 1.5, 20.6, AbilityId.PIXILATE, AbilityId.NONE, AbilityId.PIXILATE, 590, 75, 110, 110, 110, 105, 80, 45, 50, 172), + ), + new PokemonSpecies(SpeciesId.ZANGOOSE, 3, false, false, false, "Cat Ferret Pokémon", PokemonType.NORMAL, null, 1.3, 40.3, AbilityId.IMMUNITY, AbilityId.NONE, AbilityId.TOXIC_BOOST, 458, 73, 115, 60, 60, 60, 90, 90, 70, 160, GrowthRate.ERRATIC, 50, false), + new PokemonSpecies(SpeciesId.SEVIPER, 3, false, false, false, "Fang Snake Pokémon", PokemonType.POISON, null, 2.7, 52.5, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.INFILTRATOR, 458, 73, 100, 60, 100, 60, 65, 90, 70, 160, GrowthRate.FLUCTUATING, 50, false), + new PokemonSpecies(SpeciesId.LUNATONE, 3, false, false, false, "Meteorite Pokémon", PokemonType.ROCK, PokemonType.PSYCHIC, 1, 168, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 460, 90, 55, 65, 95, 85, 70, 45, 50, 161, GrowthRate.FAST, null, false), + new PokemonSpecies(SpeciesId.SOLROCK, 3, false, false, false, "Meteorite Pokémon", PokemonType.ROCK, PokemonType.PSYCHIC, 1.2, 154, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 460, 90, 95, 85, 55, 65, 70, 45, 50, 161, GrowthRate.FAST, null, false), + new PokemonSpecies(SpeciesId.BARBOACH, 3, false, false, false, "Whiskers Pokémon", PokemonType.WATER, PokemonType.GROUND, 0.4, 1.9, AbilityId.OBLIVIOUS, AbilityId.ANTICIPATION, AbilityId.HYDRATION, 288, 50, 48, 43, 46, 41, 60, 190, 50, 58, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.WHISCASH, 3, false, false, false, "Whiskers Pokémon", PokemonType.WATER, PokemonType.GROUND, 0.9, 23.6, AbilityId.OBLIVIOUS, AbilityId.ANTICIPATION, AbilityId.HYDRATION, 468, 110, 78, 73, 76, 71, 60, 75, 50, 164, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CORPHISH, 3, false, false, false, "Ruffian Pokémon", PokemonType.WATER, null, 0.6, 11.5, AbilityId.HYPER_CUTTER, AbilityId.SHELL_ARMOR, AbilityId.ADAPTABILITY, 308, 43, 80, 65, 50, 35, 35, 205, 50, 62, GrowthRate.FLUCTUATING, 50, false), + new PokemonSpecies(SpeciesId.CRAWDAUNT, 3, false, false, false, "Rogue Pokémon", PokemonType.WATER, PokemonType.DARK, 1.1, 32.8, AbilityId.HYPER_CUTTER, AbilityId.SHELL_ARMOR, AbilityId.ADAPTABILITY, 468, 63, 120, 85, 90, 55, 55, 155, 50, 164, GrowthRate.FLUCTUATING, 50, false), + new PokemonSpecies(SpeciesId.BALTOY, 3, false, false, false, "Clay Doll Pokémon", PokemonType.GROUND, PokemonType.PSYCHIC, 0.5, 21.5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 300, 40, 40, 55, 40, 70, 55, 255, 50, 60, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.CLAYDOL, 3, false, false, false, "Clay Doll Pokémon", PokemonType.GROUND, PokemonType.PSYCHIC, 1.5, 108, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 500, 60, 70, 105, 70, 120, 75, 90, 50, 175, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.LILEEP, 3, false, false, false, "Sea Lily Pokémon", PokemonType.ROCK, PokemonType.GRASS, 1, 23.8, AbilityId.SUCTION_CUPS, AbilityId.NONE, AbilityId.STORM_DRAIN, 355, 66, 41, 77, 61, 87, 23, 45, 50, 71, GrowthRate.ERRATIC, 87.5, false), + new PokemonSpecies(SpeciesId.CRADILY, 3, false, false, false, "Barnacle Pokémon", PokemonType.ROCK, PokemonType.GRASS, 1.5, 60.4, AbilityId.SUCTION_CUPS, AbilityId.NONE, AbilityId.STORM_DRAIN, 495, 86, 81, 97, 81, 107, 43, 45, 50, 173, GrowthRate.ERRATIC, 87.5, false), + new PokemonSpecies(SpeciesId.ANORITH, 3, false, false, false, "Old Shrimp Pokémon", PokemonType.ROCK, PokemonType.BUG, 0.7, 12.5, AbilityId.BATTLE_ARMOR, AbilityId.NONE, AbilityId.SWIFT_SWIM, 355, 45, 95, 50, 40, 50, 75, 45, 50, 71, GrowthRate.ERRATIC, 87.5, false), + new PokemonSpecies(SpeciesId.ARMALDO, 3, false, false, false, "Plate Pokémon", PokemonType.ROCK, PokemonType.BUG, 1.5, 68.2, AbilityId.BATTLE_ARMOR, AbilityId.NONE, AbilityId.SWIFT_SWIM, 495, 75, 125, 100, 70, 80, 45, 45, 50, 173, GrowthRate.ERRATIC, 87.5, false), + new PokemonSpecies(SpeciesId.FEEBAS, 3, false, false, false, "Fish Pokémon", PokemonType.WATER, null, 0.6, 7.4, AbilityId.SWIFT_SWIM, AbilityId.OBLIVIOUS, AbilityId.ADAPTABILITY, 200, 20, 15, 20, 10, 55, 80, 255, 50, 40, GrowthRate.ERRATIC, 50, false), + new PokemonSpecies(SpeciesId.MILOTIC, 3, false, false, false, "Tender Pokémon", PokemonType.WATER, null, 6.2, 162, AbilityId.MARVEL_SCALE, AbilityId.COMPETITIVE, AbilityId.CUTE_CHARM, 540, 95, 60, 79, 100, 125, 81, 60, 50, 189, GrowthRate.ERRATIC, 50, true), + new PokemonSpecies(SpeciesId.CASTFORM, 3, false, false, false, "Weather Pokémon", PokemonType.NORMAL, null, 0.3, 0.8, AbilityId.FORECAST, AbilityId.NONE, AbilityId.NONE, 420, 70, 70, 70, 70, 70, 70, 45, 70, 147, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal Form", "", PokemonType.NORMAL, null, 0.3, 0.8, AbilityId.FORECAST, AbilityId.NONE, AbilityId.NONE, 420, 70, 70, 70, 70, 70, 70, 45, 70, 147, false, null, true), + new PokemonForm("Sunny Form", "sunny", PokemonType.FIRE, null, 0.3, 0.8, AbilityId.FORECAST, AbilityId.NONE, AbilityId.NONE, 420, 70, 70, 70, 70, 70, 70, 45, 70, 147), + new PokemonForm("Rainy Form", "rainy", PokemonType.WATER, null, 0.3, 0.8, AbilityId.FORECAST, AbilityId.NONE, AbilityId.NONE, 420, 70, 70, 70, 70, 70, 70, 45, 70, 147), + new PokemonForm("Snowy Form", "snowy", PokemonType.ICE, null, 0.3, 0.8, AbilityId.FORECAST, AbilityId.NONE, AbilityId.NONE, 420, 70, 70, 70, 70, 70, 70, 45, 70, 147), + ), + new PokemonSpecies(SpeciesId.KECLEON, 3, false, false, false, "Color Swap Pokémon", PokemonType.NORMAL, null, 1, 22, AbilityId.COLOR_CHANGE, AbilityId.NONE, AbilityId.PROTEAN, 440, 60, 90, 70, 60, 120, 40, 200, 70, 154, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.SHUPPET, 3, false, false, false, "Puppet Pokémon", PokemonType.GHOST, null, 0.6, 2.3, AbilityId.INSOMNIA, AbilityId.FRISK, AbilityId.CURSED_BODY, 295, 44, 75, 35, 63, 33, 45, 225, 35, 59, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.BANETTE, 3, false, false, false, "Marionette Pokémon", PokemonType.GHOST, null, 1.1, 12.5, AbilityId.INSOMNIA, AbilityId.FRISK, AbilityId.CURSED_BODY, 455, 64, 115, 65, 83, 63, 65, 45, 35, 159, GrowthRate.FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.GHOST, null, 1.1, 12.5, AbilityId.INSOMNIA, AbilityId.FRISK, AbilityId.CURSED_BODY, 455, 64, 115, 65, 83, 63, 65, 45, 35, 159, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.GHOST, null, 1.2, 13, AbilityId.PRANKSTER, AbilityId.PRANKSTER, AbilityId.PRANKSTER, 555, 64, 165, 75, 93, 83, 75, 45, 35, 159), + ), + new PokemonSpecies(SpeciesId.DUSKULL, 3, false, false, false, "Requiem Pokémon", PokemonType.GHOST, null, 0.8, 15, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.FRISK, 295, 20, 40, 90, 30, 90, 25, 190, 35, 59, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.DUSCLOPS, 3, false, false, false, "Beckon Pokémon", PokemonType.GHOST, null, 1.6, 30.6, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.FRISK, 455, 40, 70, 130, 60, 130, 25, 90, 35, 159, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.TROPIUS, 3, false, false, false, "Fruit Pokémon", PokemonType.GRASS, PokemonType.FLYING, 2, 100, AbilityId.CHLOROPHYLL, AbilityId.SOLAR_POWER, AbilityId.HARVEST, 460, 99, 68, 83, 72, 87, 51, 200, 70, 161, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.CHIMECHO, 3, false, false, false, "Wind Chime Pokémon", PokemonType.PSYCHIC, null, 0.6, 1, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 455, 75, 50, 80, 95, 90, 65, 45, 70, 159, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.ABSOL, 3, false, false, false, "Disaster Pokémon", PokemonType.DARK, null, 1.2, 47, AbilityId.PRESSURE, AbilityId.SUPER_LUCK, AbilityId.JUSTIFIED, 465, 65, 130, 60, 75, 60, 75, 30, 35, 163, GrowthRate.MEDIUM_SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.DARK, null, 1.2, 47, AbilityId.PRESSURE, AbilityId.SUPER_LUCK, AbilityId.JUSTIFIED, 465, 65, 130, 60, 75, 60, 75, 30, 35, 163, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DARK, null, 1.2, 49, AbilityId.MAGIC_BOUNCE, AbilityId.MAGIC_BOUNCE, AbilityId.MAGIC_BOUNCE, 565, 65, 150, 60, 115, 60, 115, 30, 35, 163), + ), + new PokemonSpecies(SpeciesId.WYNAUT, 3, false, false, false, "Bright Pokémon", PokemonType.PSYCHIC, null, 0.6, 14, AbilityId.SHADOW_TAG, AbilityId.NONE, AbilityId.TELEPATHY, 260, 95, 23, 48, 23, 48, 23, 125, 50, 52, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SNORUNT, 3, false, false, false, "Snow Hat Pokémon", PokemonType.ICE, null, 0.7, 16.8, AbilityId.INNER_FOCUS, AbilityId.ICE_BODY, AbilityId.MOODY, 300, 50, 50, 50, 50, 50, 50, 190, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GLALIE, 3, false, false, false, "Face Pokémon", PokemonType.ICE, null, 1.5, 256.5, AbilityId.INNER_FOCUS, AbilityId.ICE_BODY, AbilityId.MOODY, 480, 80, 80, 80, 80, 80, 80, 75, 50, 168, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.ICE, null, 1.5, 256.5, AbilityId.INNER_FOCUS, AbilityId.ICE_BODY, AbilityId.MOODY, 480, 80, 80, 80, 80, 80, 80, 75, 50, 168, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.ICE, null, 2.1, 350.2, AbilityId.REFRIGERATE, AbilityId.REFRIGERATE, AbilityId.REFRIGERATE, 580, 80, 120, 80, 120, 80, 100, 75, 50, 168), + ), + new PokemonSpecies(SpeciesId.SPHEAL, 3, false, false, false, "Clap Pokémon", PokemonType.ICE, PokemonType.WATER, 0.8, 39.5, AbilityId.THICK_FAT, AbilityId.ICE_BODY, AbilityId.OBLIVIOUS, 290, 70, 40, 50, 55, 50, 25, 255, 50, 58, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.SEALEO, 3, false, false, false, "Ball Roll Pokémon", PokemonType.ICE, PokemonType.WATER, 1.1, 87.6, AbilityId.THICK_FAT, AbilityId.ICE_BODY, AbilityId.OBLIVIOUS, 410, 90, 60, 70, 75, 70, 45, 120, 50, 144, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.WALREIN, 3, false, false, false, "Ice Break Pokémon", PokemonType.ICE, PokemonType.WATER, 1.4, 150.6, AbilityId.THICK_FAT, AbilityId.ICE_BODY, AbilityId.OBLIVIOUS, 530, 110, 80, 90, 95, 90, 65, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.CLAMPERL, 3, false, false, false, "Bivalve Pokémon", PokemonType.WATER, null, 0.4, 52.5, AbilityId.SHELL_ARMOR, AbilityId.NONE, AbilityId.RATTLED, 345, 35, 64, 85, 74, 55, 32, 255, 70, 69, GrowthRate.ERRATIC, 50, false), + new PokemonSpecies(SpeciesId.HUNTAIL, 3, false, false, false, "Deep Sea Pokémon", PokemonType.WATER, null, 1.7, 27, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.WATER_VEIL, 485, 55, 104, 105, 94, 75, 52, 60, 70, 170, GrowthRate.ERRATIC, 50, false), + new PokemonSpecies(SpeciesId.GOREBYSS, 3, false, false, false, "South Sea Pokémon", PokemonType.WATER, null, 1.8, 22.6, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.HYDRATION, 485, 55, 84, 105, 114, 75, 52, 60, 70, 170, GrowthRate.ERRATIC, 50, false), + new PokemonSpecies(SpeciesId.RELICANTH, 3, false, false, false, "Longevity Pokémon", PokemonType.WATER, PokemonType.ROCK, 1, 23.4, AbilityId.SWIFT_SWIM, AbilityId.ROCK_HEAD, AbilityId.STURDY, 485, 100, 90, 130, 45, 65, 55, 25, 50, 170, GrowthRate.SLOW, 87.5, true), + new PokemonSpecies(SpeciesId.LUVDISC, 3, false, false, false, "Rendezvous Pokémon", PokemonType.WATER, null, 0.6, 8.7, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.HYDRATION, 330, 43, 30, 55, 40, 65, 97, 225, 70, 116, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.BAGON, 3, false, false, false, "Rock Head Pokémon", PokemonType.DRAGON, null, 0.6, 42.1, AbilityId.ROCK_HEAD, AbilityId.NONE, AbilityId.SHEER_FORCE, 300, 45, 75, 60, 40, 30, 50, 45, 35, 60, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.SHELGON, 3, false, false, false, "Endurance Pokémon", PokemonType.DRAGON, null, 1.1, 110.5, AbilityId.ROCK_HEAD, AbilityId.NONE, AbilityId.OVERCOAT, 420, 65, 95, 100, 60, 50, 50, 45, 35, 147, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.SALAMENCE, 3, false, false, false, "Dragon Pokémon", PokemonType.DRAGON, PokemonType.FLYING, 1.5, 102.6, AbilityId.INTIMIDATE, AbilityId.NONE, AbilityId.MOXIE, 600, 95, 135, 80, 110, 80, 100, 45, 35, 300, GrowthRate.SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.FLYING, 1.5, 102.6, AbilityId.INTIMIDATE, AbilityId.NONE, AbilityId.MOXIE, 600, 95, 135, 80, 110, 80, 100, 45, 35, 300, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DRAGON, PokemonType.FLYING, 1.8, 112.6, AbilityId.AERILATE, AbilityId.NONE, AbilityId.AERILATE, 700, 95, 145, 130, 120, 90, 120, 45, 35, 300), + ), + new PokemonSpecies(SpeciesId.BELDUM, 3, false, false, false, "Iron Ball Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 0.6, 95.2, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.LIGHT_METAL, 300, 40, 55, 80, 35, 60, 30, 45, 35, 60, GrowthRate.SLOW, null, false), //Custom Catchrate, matching Frigibax + new PokemonSpecies(SpeciesId.METANG, 3, false, false, false, "Iron Claw Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 1.2, 202.5, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.LIGHT_METAL, 420, 60, 75, 100, 55, 80, 50, 25, 35, 147, GrowthRate.SLOW, null, false), //Custom Catchrate, matching Arctibax + new PokemonSpecies(SpeciesId.METAGROSS, 3, false, false, false, "Iron Leg Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 1.6, 550, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.LIGHT_METAL, 600, 80, 135, 130, 95, 90, 70, 10, 35, 300, GrowthRate.SLOW, null, false, true, //Custom Catchrate, matching Baxcalibur + new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.PSYCHIC, 1.6, 550, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.LIGHT_METAL, 600, 80, 135, 130, 95, 90, 70, 3, 35, 300, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.STEEL, PokemonType.PSYCHIC, 2.5, 942.9, AbilityId.TOUGH_CLAWS, AbilityId.NONE, AbilityId.TOUGH_CLAWS, 700, 80, 145, 150, 105, 110, 110, 3, 35, 300), + ), + new PokemonSpecies(SpeciesId.REGIROCK, 3, true, false, false, "Rock Peak Pokémon", PokemonType.ROCK, null, 1.7, 230, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.STURDY, 580, 80, 100, 200, 50, 100, 50, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.REGICE, 3, true, false, false, "Iceberg Pokémon", PokemonType.ICE, null, 1.8, 175, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.ICE_BODY, 580, 80, 50, 100, 100, 200, 50, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.REGISTEEL, 3, true, false, false, "Iron Pokémon", PokemonType.STEEL, null, 1.9, 205, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.LIGHT_METAL, 580, 80, 75, 150, 75, 150, 50, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.LATIAS, 3, true, false, false, "Eon Pokémon", PokemonType.DRAGON, PokemonType.PSYCHIC, 1.4, 40, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 600, 80, 80, 90, 110, 130, 110, 3, 90, 300, GrowthRate.SLOW, 0, false, true, + new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.PSYCHIC, 1.4, 40, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 600, 80, 80, 90, 110, 130, 110, 3, 90, 300, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DRAGON, PokemonType.PSYCHIC, 1.8, 52, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 700, 80, 100, 120, 140, 150, 110, 3, 90, 300), + ), + new PokemonSpecies(SpeciesId.LATIOS, 3, true, false, false, "Eon Pokémon", PokemonType.DRAGON, PokemonType.PSYCHIC, 2, 60, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 600, 80, 90, 80, 130, 110, 110, 3, 90, 300, GrowthRate.SLOW, 100, false, true, + new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.PSYCHIC, 2, 60, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 600, 80, 90, 80, 130, 110, 110, 3, 90, 300, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DRAGON, PokemonType.PSYCHIC, 2.3, 70, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 700, 80, 130, 100, 160, 120, 110, 3, 90, 300), + ), + new PokemonSpecies(SpeciesId.KYOGRE, 3, false, true, false, "Sea Basin Pokémon", PokemonType.WATER, null, 4.5, 352, AbilityId.DRIZZLE, AbilityId.NONE, AbilityId.NONE, 670, 100, 100, 90, 150, 140, 90, 3, 0, 335, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal", "", PokemonType.WATER, null, 4.5, 352, AbilityId.DRIZZLE, AbilityId.NONE, AbilityId.NONE, 670, 100, 100, 90, 150, 140, 90, 3, 0, 335, false, null, true), + new PokemonForm("Primal", "primal", PokemonType.WATER, null, 9.8, 430, AbilityId.PRIMORDIAL_SEA, AbilityId.NONE, AbilityId.NONE, 770, 100, 150, 90, 180, 160, 90, 3, 0, 335), + ), + new PokemonSpecies(SpeciesId.GROUDON, 3, false, true, false, "Continent Pokémon", PokemonType.GROUND, null, 3.5, 950, AbilityId.DROUGHT, AbilityId.NONE, AbilityId.NONE, 670, 100, 150, 140, 100, 90, 90, 3, 0, 335, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal", "", PokemonType.GROUND, null, 3.5, 950, AbilityId.DROUGHT, AbilityId.NONE, AbilityId.NONE, 670, 100, 150, 140, 100, 90, 90, 3, 0, 335, false, null, true), + new PokemonForm("Primal", "primal", PokemonType.GROUND, PokemonType.FIRE, 5, 999.7, AbilityId.DESOLATE_LAND, AbilityId.NONE, AbilityId.NONE, 770, 100, 180, 160, 150, 90, 90, 3, 0, 335), + ), + new PokemonSpecies(SpeciesId.RAYQUAZA, 3, false, true, false, "Sky High Pokémon", PokemonType.DRAGON, PokemonType.FLYING, 7, 206.5, AbilityId.AIR_LOCK, AbilityId.NONE, AbilityId.NONE, 680, 105, 150, 90, 150, 90, 95, 45, 0, 340, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.FLYING, 7, 206.5, AbilityId.AIR_LOCK, AbilityId.NONE, AbilityId.NONE, 680, 105, 150, 90, 150, 90, 95, 45, 0, 340, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DRAGON, PokemonType.FLYING, 10.8, 392, AbilityId.DELTA_STREAM, AbilityId.NONE, AbilityId.NONE, 780, 105, 180, 100, 180, 100, 115, 45, 0, 340), + ), + new PokemonSpecies(SpeciesId.JIRACHI, 3, false, false, true, "Wish Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 0.3, 1.1, AbilityId.SERENE_GRACE, AbilityId.NONE, AbilityId.NONE, 600, 100, 100, 100, 100, 100, 100, 3, 100, 300, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.DEOXYS, 3, false, false, true, "DNA Pokémon", PokemonType.PSYCHIC, null, 1.7, 60.8, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 600, 50, 150, 50, 150, 50, 150, 3, 0, 300, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal Forme", "normal", PokemonType.PSYCHIC, null, 1.7, 60.8, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 600, 50, 150, 50, 150, 50, 150, 3, 0, 300, false, "", true), + new PokemonForm("Attack Forme", "attack", PokemonType.PSYCHIC, null, 1.7, 60.8, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 600, 50, 180, 20, 180, 20, 150, 3, 0, 300), + new PokemonForm("Defense Forme", "defense", PokemonType.PSYCHIC, null, 1.7, 60.8, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 600, 50, 70, 160, 70, 160, 90, 3, 0, 300), + new PokemonForm("Speed Forme", "speed", PokemonType.PSYCHIC, null, 1.7, 60.8, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 600, 50, 95, 90, 95, 90, 180, 3, 0, 300), + ), + new PokemonSpecies(SpeciesId.TURTWIG, 4, false, false, false, "Tiny Leaf Pokémon", PokemonType.GRASS, null, 0.4, 10.2, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.SHELL_ARMOR, 318, 55, 68, 64, 45, 55, 31, 45, 70, 64, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.GROTLE, 4, false, false, false, "Grove Pokémon", PokemonType.GRASS, null, 1.1, 97, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.SHELL_ARMOR, 405, 75, 89, 85, 55, 65, 36, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.TORTERRA, 4, false, false, false, "Continent Pokémon", PokemonType.GRASS, PokemonType.GROUND, 2.2, 310, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.SHELL_ARMOR, 525, 95, 109, 105, 75, 85, 56, 45, 70, 263, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.CHIMCHAR, 4, false, false, false, "Chimp Pokémon", PokemonType.FIRE, null, 0.5, 6.2, AbilityId.BLAZE, AbilityId.NONE, AbilityId.IRON_FIST, 309, 44, 58, 44, 58, 44, 61, 45, 70, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.MONFERNO, 4, false, false, false, "Playful Pokémon", PokemonType.FIRE, PokemonType.FIGHTING, 0.9, 22, AbilityId.BLAZE, AbilityId.NONE, AbilityId.IRON_FIST, 405, 64, 78, 52, 78, 52, 81, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.INFERNAPE, 4, false, false, false, "Flame Pokémon", PokemonType.FIRE, PokemonType.FIGHTING, 1.2, 55, AbilityId.BLAZE, AbilityId.NONE, AbilityId.IRON_FIST, 534, 76, 104, 71, 104, 71, 108, 45, 70, 267, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.PIPLUP, 4, false, false, false, "Penguin Pokémon", PokemonType.WATER, null, 0.4, 5.2, AbilityId.TORRENT, AbilityId.NONE, AbilityId.COMPETITIVE, 314, 53, 51, 53, 61, 56, 40, 45, 70, 63, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.PRINPLUP, 4, false, false, false, "Penguin Pokémon", PokemonType.WATER, null, 0.8, 23, AbilityId.TORRENT, AbilityId.NONE, AbilityId.COMPETITIVE, 405, 64, 66, 68, 81, 76, 50, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.EMPOLEON, 4, false, false, false, "Emperor Pokémon", PokemonType.WATER, PokemonType.STEEL, 1.7, 84.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.COMPETITIVE, 530, 84, 86, 88, 111, 101, 60, 45, 70, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.STARLY, 4, false, false, false, "Starling Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.3, 2, AbilityId.KEEN_EYE, AbilityId.NONE, AbilityId.RECKLESS, 245, 40, 55, 30, 30, 30, 60, 255, 70, 49, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.STARAVIA, 4, false, false, false, "Starling Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 15.5, AbilityId.INTIMIDATE, AbilityId.NONE, AbilityId.RECKLESS, 340, 55, 75, 50, 40, 40, 80, 120, 70, 119, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.STARAPTOR, 4, false, false, false, "Predator Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.2, 24.9, AbilityId.INTIMIDATE, AbilityId.NONE, AbilityId.RECKLESS, 485, 85, 120, 70, 50, 60, 100, 45, 70, 243, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.BIDOOF, 4, false, false, false, "Plump Mouse Pokémon", PokemonType.NORMAL, null, 0.5, 20, AbilityId.SIMPLE, AbilityId.UNAWARE, AbilityId.MOODY, 250, 59, 45, 40, 35, 40, 31, 255, 70, 50, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.BIBAREL, 4, false, false, false, "Beaver Pokémon", PokemonType.NORMAL, PokemonType.WATER, 1, 31.5, AbilityId.SIMPLE, AbilityId.UNAWARE, AbilityId.MOODY, 410, 79, 85, 60, 55, 60, 71, 127, 70, 144, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.KRICKETOT, 4, false, false, false, "Cricket Pokémon", PokemonType.BUG, null, 0.3, 2.2, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.RUN_AWAY, 194, 37, 25, 41, 25, 41, 25, 255, 70, 39, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.KRICKETUNE, 4, false, false, false, "Cricket Pokémon", PokemonType.BUG, null, 1, 25.5, AbilityId.SWARM, AbilityId.NONE, AbilityId.TECHNICIAN, 384, 77, 85, 51, 55, 51, 65, 45, 70, 134, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.SHINX, 4, false, false, false, "Flash Pokémon", PokemonType.ELECTRIC, null, 0.5, 9.5, AbilityId.RIVALRY, AbilityId.INTIMIDATE, AbilityId.GUTS, 263, 45, 65, 34, 40, 34, 45, 235, 50, 53, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.LUXIO, 4, false, false, false, "Spark Pokémon", PokemonType.ELECTRIC, null, 0.9, 30.5, AbilityId.RIVALRY, AbilityId.INTIMIDATE, AbilityId.GUTS, 363, 60, 85, 49, 60, 49, 60, 120, 100, 127, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.LUXRAY, 4, false, false, false, "Gleam Eyes Pokémon", PokemonType.ELECTRIC, null, 1.4, 42, AbilityId.RIVALRY, AbilityId.INTIMIDATE, AbilityId.GUTS, 523, 80, 120, 79, 95, 79, 70, 45, 50, 262, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.BUDEW, 4, false, false, false, "Bud Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.2, 1.2, AbilityId.NATURAL_CURE, AbilityId.POISON_POINT, AbilityId.LEAF_GUARD, 280, 40, 30, 35, 50, 70, 55, 255, 50, 56, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.ROSERADE, 4, false, false, false, "Bouquet Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.9, 14.5, AbilityId.NATURAL_CURE, AbilityId.POISON_POINT, AbilityId.TECHNICIAN, 515, 60, 70, 65, 125, 105, 90, 75, 50, 258, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.CRANIDOS, 4, false, false, false, "Head Butt Pokémon", PokemonType.ROCK, null, 0.9, 31.5, AbilityId.MOLD_BREAKER, AbilityId.NONE, AbilityId.SHEER_FORCE, 350, 67, 125, 40, 30, 30, 58, 45, 70, 70, GrowthRate.ERRATIC, 87.5, false), + new PokemonSpecies(SpeciesId.RAMPARDOS, 4, false, false, false, "Head Butt Pokémon", PokemonType.ROCK, null, 1.6, 102.5, AbilityId.MOLD_BREAKER, AbilityId.NONE, AbilityId.SHEER_FORCE, 495, 97, 165, 60, 65, 50, 58, 45, 70, 173, GrowthRate.ERRATIC, 87.5, false), + new PokemonSpecies(SpeciesId.SHIELDON, 4, false, false, false, "Shield Pokémon", PokemonType.ROCK, PokemonType.STEEL, 0.5, 57, AbilityId.STURDY, AbilityId.NONE, AbilityId.SOUNDPROOF, 350, 30, 42, 118, 42, 88, 30, 45, 70, 70, GrowthRate.ERRATIC, 87.5, false), + new PokemonSpecies(SpeciesId.BASTIODON, 4, false, false, false, "Shield Pokémon", PokemonType.ROCK, PokemonType.STEEL, 1.3, 149.5, AbilityId.STURDY, AbilityId.NONE, AbilityId.SOUNDPROOF, 495, 60, 52, 168, 47, 138, 30, 45, 70, 173, GrowthRate.ERRATIC, 87.5, false), + new PokemonSpecies(SpeciesId.BURMY, 4, false, false, false, "Bagworm Pokémon", PokemonType.BUG, null, 0.2, 3.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.OVERCOAT, 224, 40, 29, 45, 29, 45, 36, 120, 70, 45, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Plant Cloak", "plant", PokemonType.BUG, null, 0.2, 3.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.OVERCOAT, 224, 40, 29, 45, 29, 45, 36, 120, 70, 45, false, null, true), + new PokemonForm("Sandy Cloak", "sandy", PokemonType.BUG, null, 0.2, 3.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.OVERCOAT, 224, 40, 29, 45, 29, 45, 36, 120, 70, 45, false, null, true), + new PokemonForm("Trash Cloak", "trash", PokemonType.BUG, null, 0.2, 3.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.OVERCOAT, 224, 40, 29, 45, 29, 45, 36, 120, 70, 45, false, null, true), + ), + new PokemonSpecies(SpeciesId.WORMADAM, 4, false, false, false, "Bagworm Pokémon", PokemonType.BUG, PokemonType.GRASS, 0.5, 6.5, AbilityId.ANTICIPATION, AbilityId.NONE, AbilityId.OVERCOAT, 424, 60, 59, 85, 79, 105, 36, 45, 70, 148, GrowthRate.MEDIUM_FAST, 0, false, false, + new PokemonForm("Plant Cloak", "plant", PokemonType.BUG, PokemonType.GRASS, 0.5, 6.5, AbilityId.ANTICIPATION, AbilityId.NONE, AbilityId.OVERCOAT, 424, 60, 59, 85, 79, 105, 36, 45, 70, 148, false, null, true), + new PokemonForm("Sandy Cloak", "sandy", PokemonType.BUG, PokemonType.GROUND, 0.5, 6.5, AbilityId.ANTICIPATION, AbilityId.NONE, AbilityId.OVERCOAT, 424, 60, 79, 105, 59, 85, 36, 45, 70, 148, false, null, true), + new PokemonForm("Trash Cloak", "trash", PokemonType.BUG, PokemonType.STEEL, 0.5, 6.5, AbilityId.ANTICIPATION, AbilityId.NONE, AbilityId.OVERCOAT, 424, 60, 69, 95, 69, 95, 36, 45, 70, 148, false, null, true), + ), + new PokemonSpecies(SpeciesId.MOTHIM, 4, false, false, false, "Moth Pokémon", PokemonType.BUG, PokemonType.FLYING, 0.9, 23.3, AbilityId.SWARM, AbilityId.NONE, AbilityId.TINTED_LENS, 424, 70, 94, 50, 94, 50, 66, 45, 70, 148, GrowthRate.MEDIUM_FAST, 100, false), + new PokemonSpecies(SpeciesId.COMBEE, 4, false, false, false, "Tiny Bee Pokémon", PokemonType.BUG, PokemonType.FLYING, 0.3, 5.5, AbilityId.HONEY_GATHER, AbilityId.NONE, AbilityId.HUSTLE, 244, 30, 30, 42, 30, 42, 70, 120, 50, 49, GrowthRate.MEDIUM_SLOW, 87.5, true), + new PokemonSpecies(SpeciesId.VESPIQUEN, 4, false, false, false, "Beehive Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.2, 38.5, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.UNNERVE, 474, 70, 80, 102, 80, 102, 40, 45, 50, 166, GrowthRate.MEDIUM_SLOW, 0, false), + new PokemonSpecies(SpeciesId.PACHIRISU, 4, false, false, false, "EleSquirrel Pokémon", PokemonType.ELECTRIC, null, 0.4, 3.9, AbilityId.RUN_AWAY, AbilityId.PICKUP, AbilityId.VOLT_ABSORB, 405, 60, 45, 70, 45, 90, 95, 200, 100, 142, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.BUIZEL, 4, false, false, false, "Sea Weasel Pokémon", PokemonType.WATER, null, 0.7, 29.5, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.WATER_VEIL, 330, 55, 65, 35, 60, 30, 85, 190, 70, 66, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.FLOATZEL, 4, false, false, false, "Sea Weasel Pokémon", PokemonType.WATER, null, 1.1, 33.5, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.WATER_VEIL, 495, 85, 105, 55, 85, 50, 115, 75, 70, 173, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.CHERUBI, 4, false, false, false, "Cherry Pokémon", PokemonType.GRASS, null, 0.4, 3.3, AbilityId.CHLOROPHYLL, AbilityId.NONE, AbilityId.NONE, 275, 45, 35, 45, 62, 53, 35, 190, 50, 55, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CHERRIM, 4, false, false, false, "Blossom Pokémon", PokemonType.GRASS, null, 0.5, 9.3, AbilityId.FLOWER_GIFT, AbilityId.NONE, AbilityId.NONE, 450, 70, 60, 70, 87, 78, 85, 75, 50, 158, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Overcast Form", "overcast", PokemonType.GRASS, null, 0.5, 9.3, AbilityId.FLOWER_GIFT, AbilityId.NONE, AbilityId.NONE, 450, 70, 60, 70, 87, 78, 85, 75, 50, 158, false, null, true), + new PokemonForm("Sunshine Form", "sunshine", PokemonType.GRASS, null, 0.5, 9.3, AbilityId.FLOWER_GIFT, AbilityId.NONE, AbilityId.NONE, 450, 70, 60, 70, 87, 78, 85, 75, 50, 158), + ), + new PokemonSpecies(SpeciesId.SHELLOS, 4, false, false, false, "Sea Slug Pokémon", PokemonType.WATER, null, 0.3, 6.3, AbilityId.STICKY_HOLD, AbilityId.STORM_DRAIN, AbilityId.SAND_FORCE, 325, 76, 48, 48, 57, 62, 34, 190, 50, 65, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("East Sea", "east", PokemonType.WATER, null, 0.3, 6.3, AbilityId.STICKY_HOLD, AbilityId.STORM_DRAIN, AbilityId.SAND_FORCE, 325, 76, 48, 48, 57, 62, 34, 190, 50, 65, false, null, true), + new PokemonForm("West Sea", "west", PokemonType.WATER, null, 0.3, 6.3, AbilityId.STICKY_HOLD, AbilityId.STORM_DRAIN, AbilityId.SAND_FORCE, 325, 76, 48, 48, 57, 62, 34, 190, 50, 65, false, null, true), + ), + new PokemonSpecies(SpeciesId.GASTRODON, 4, false, false, false, "Sea Slug Pokémon", PokemonType.WATER, PokemonType.GROUND, 0.9, 29.9, AbilityId.STICKY_HOLD, AbilityId.STORM_DRAIN, AbilityId.SAND_FORCE, 475, 111, 83, 68, 92, 82, 39, 75, 50, 166, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("East Sea", "east", PokemonType.WATER, PokemonType.GROUND, 0.9, 29.9, AbilityId.STICKY_HOLD, AbilityId.STORM_DRAIN, AbilityId.SAND_FORCE, 475, 111, 83, 68, 92, 82, 39, 75, 50, 166, false, null, true), + new PokemonForm("West Sea", "west", PokemonType.WATER, PokemonType.GROUND, 0.9, 29.9, AbilityId.STICKY_HOLD, AbilityId.STORM_DRAIN, AbilityId.SAND_FORCE, 475, 111, 83, 68, 92, 82, 39, 75, 50, 166, false, null, true), + ), + new PokemonSpecies(SpeciesId.AMBIPOM, 4, false, false, false, "Long Tail Pokémon", PokemonType.NORMAL, null, 1.2, 20.3, AbilityId.TECHNICIAN, AbilityId.PICKUP, AbilityId.SKILL_LINK, 482, 75, 100, 66, 60, 66, 115, 45, 100, 169, GrowthRate.FAST, 50, true), + new PokemonSpecies(SpeciesId.DRIFLOON, 4, false, false, false, "Balloon Pokémon", PokemonType.GHOST, PokemonType.FLYING, 0.4, 1.2, AbilityId.AFTERMATH, AbilityId.UNBURDEN, AbilityId.FLARE_BOOST, 348, 90, 50, 34, 60, 44, 70, 125, 50, 70, GrowthRate.FLUCTUATING, 50, false), + new PokemonSpecies(SpeciesId.DRIFBLIM, 4, false, false, false, "Blimp Pokémon", PokemonType.GHOST, PokemonType.FLYING, 1.2, 15, AbilityId.AFTERMATH, AbilityId.UNBURDEN, AbilityId.FLARE_BOOST, 498, 150, 80, 44, 90, 54, 80, 60, 50, 174, GrowthRate.FLUCTUATING, 50, false), + new PokemonSpecies(SpeciesId.BUNEARY, 4, false, false, false, "Rabbit Pokémon", PokemonType.NORMAL, null, 0.4, 5.5, AbilityId.RUN_AWAY, AbilityId.KLUTZ, AbilityId.LIMBER, 350, 55, 66, 44, 44, 56, 85, 190, 0, 70, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.LOPUNNY, 4, false, false, false, "Rabbit Pokémon", PokemonType.NORMAL, null, 1.2, 33.3, AbilityId.CUTE_CHARM, AbilityId.KLUTZ, AbilityId.LIMBER, 480, 65, 76, 84, 54, 96, 105, 60, 140, 168, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.NORMAL, null, 1.2, 33.3, AbilityId.CUTE_CHARM, AbilityId.KLUTZ, AbilityId.LIMBER, 480, 65, 76, 84, 54, 96, 105, 60, 140, 168, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.NORMAL, PokemonType.FIGHTING, 1.3, 28.3, AbilityId.SCRAPPY, AbilityId.SCRAPPY, AbilityId.SCRAPPY, 580, 65, 136, 94, 54, 96, 135, 60, 140, 168), + ), + new PokemonSpecies(SpeciesId.MISMAGIUS, 4, false, false, false, "Magical Pokémon", PokemonType.GHOST, null, 0.9, 4.4, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 495, 60, 60, 60, 105, 105, 105, 45, 35, 173, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.HONCHKROW, 4, false, false, false, "Big Boss Pokémon", PokemonType.DARK, PokemonType.FLYING, 0.9, 27.3, AbilityId.INSOMNIA, AbilityId.SUPER_LUCK, AbilityId.MOXIE, 505, 100, 125, 52, 105, 52, 71, 30, 35, 177, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.GLAMEOW, 4, false, false, false, "Catty Pokémon", PokemonType.NORMAL, null, 0.5, 3.9, AbilityId.LIMBER, AbilityId.OWN_TEMPO, AbilityId.KEEN_EYE, 310, 49, 55, 42, 42, 37, 85, 190, 70, 62, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.PURUGLY, 4, false, false, false, "Tiger Cat Pokémon", PokemonType.NORMAL, null, 1, 43.8, AbilityId.THICK_FAT, AbilityId.OWN_TEMPO, AbilityId.DEFIANT, 452, 71, 82, 64, 64, 59, 112, 75, 70, 158, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.CHINGLING, 4, false, false, false, "Bell Pokémon", PokemonType.PSYCHIC, null, 0.2, 0.6, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 285, 45, 30, 50, 65, 50, 45, 120, 70, 57, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.STUNKY, 4, false, false, false, "Skunk Pokémon", PokemonType.POISON, PokemonType.DARK, 0.4, 19.2, AbilityId.STENCH, AbilityId.AFTERMATH, AbilityId.KEEN_EYE, 329, 63, 63, 47, 41, 41, 74, 225, 50, 66, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SKUNTANK, 4, false, false, false, "Skunk Pokémon", PokemonType.POISON, PokemonType.DARK, 1, 38, AbilityId.STENCH, AbilityId.AFTERMATH, AbilityId.KEEN_EYE, 479, 103, 93, 67, 71, 61, 84, 60, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BRONZOR, 4, false, false, false, "Bronze Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 0.5, 60.5, AbilityId.LEVITATE, AbilityId.HEATPROOF, AbilityId.HEAVY_METAL, 300, 57, 24, 86, 24, 86, 23, 255, 50, 60, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.BRONZONG, 4, false, false, false, "Bronze Bell Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 1.3, 187, AbilityId.LEVITATE, AbilityId.HEATPROOF, AbilityId.HEAVY_METAL, 500, 67, 89, 116, 79, 116, 33, 90, 50, 175, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.BONSLY, 4, false, false, false, "Bonsai Pokémon", PokemonType.ROCK, null, 0.5, 15, AbilityId.STURDY, AbilityId.ROCK_HEAD, AbilityId.RATTLED, 290, 50, 80, 95, 10, 45, 10, 255, 50, 58, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MIME_JR, 4, false, false, false, "Mime Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 0.6, 13, AbilityId.SOUNDPROOF, AbilityId.FILTER, AbilityId.TECHNICIAN, 310, 20, 25, 45, 70, 90, 60, 145, 50, 62, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.HAPPINY, 4, false, false, false, "Playhouse Pokémon", PokemonType.NORMAL, null, 0.6, 24.4, AbilityId.NATURAL_CURE, AbilityId.SERENE_GRACE, AbilityId.FRIEND_GUARD, 220, 100, 5, 5, 15, 65, 30, 130, 140, 110, GrowthRate.FAST, 0, false), + new PokemonSpecies(SpeciesId.CHATOT, 4, false, false, false, "Music Note Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.5, 1.9, AbilityId.KEEN_EYE, AbilityId.TANGLED_FEET, AbilityId.BIG_PECKS, 411, 76, 65, 45, 92, 42, 91, 30, 35, 144, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.SPIRITOMB, 4, false, false, false, "Forbidden Pokémon", PokemonType.GHOST, PokemonType.DARK, 1, 108, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.INFILTRATOR, 485, 50, 92, 108, 92, 108, 35, 100, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GIBLE, 4, false, false, false, "Land Shark Pokémon", PokemonType.DRAGON, PokemonType.GROUND, 0.7, 20.5, AbilityId.SAND_VEIL, AbilityId.NONE, AbilityId.ROUGH_SKIN, 300, 58, 70, 45, 40, 45, 42, 45, 50, 60, GrowthRate.SLOW, 50, true), + new PokemonSpecies(SpeciesId.GABITE, 4, false, false, false, "Cave Pokémon", PokemonType.DRAGON, PokemonType.GROUND, 1.4, 56, AbilityId.SAND_VEIL, AbilityId.NONE, AbilityId.ROUGH_SKIN, 410, 68, 90, 65, 50, 55, 82, 45, 50, 144, GrowthRate.SLOW, 50, true), + new PokemonSpecies(SpeciesId.GARCHOMP, 4, false, false, false, "Mach Pokémon", PokemonType.DRAGON, PokemonType.GROUND, 1.9, 95, AbilityId.SAND_VEIL, AbilityId.NONE, AbilityId.ROUGH_SKIN, 600, 108, 130, 95, 80, 85, 102, 45, 50, 300, GrowthRate.SLOW, 50, true, true, + new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.GROUND, 1.9, 95, AbilityId.SAND_VEIL, AbilityId.NONE, AbilityId.ROUGH_SKIN, 600, 108, 130, 95, 80, 85, 102, 45, 50, 300, true, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DRAGON, PokemonType.GROUND, 1.9, 95, AbilityId.SAND_FORCE, AbilityId.NONE, AbilityId.SAND_FORCE, 700, 108, 170, 115, 120, 95, 92, 45, 50, 300, true), + ), + new PokemonSpecies(SpeciesId.MUNCHLAX, 4, false, false, false, "Big Eater Pokémon", PokemonType.NORMAL, null, 0.6, 105, AbilityId.PICKUP, AbilityId.THICK_FAT, AbilityId.GLUTTONY, 390, 135, 85, 40, 40, 85, 5, 50, 50, 78, GrowthRate.SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.RIOLU, 4, false, false, false, "Emanation Pokémon", PokemonType.FIGHTING, null, 0.7, 20.2, AbilityId.STEADFAST, AbilityId.INNER_FOCUS, AbilityId.PRANKSTER, 285, 40, 70, 40, 35, 40, 60, 75, 50, 57, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.LUCARIO, 4, false, false, false, "Aura Pokémon", PokemonType.FIGHTING, PokemonType.STEEL, 1.2, 54, AbilityId.STEADFAST, AbilityId.INNER_FOCUS, AbilityId.JUSTIFIED, 525, 70, 110, 70, 115, 70, 90, 45, 50, 184, GrowthRate.MEDIUM_SLOW, 87.5, false, true, + new PokemonForm("Normal", "", PokemonType.FIGHTING, PokemonType.STEEL, 1.2, 54, AbilityId.STEADFAST, AbilityId.INNER_FOCUS, AbilityId.JUSTIFIED, 525, 70, 110, 70, 115, 70, 90, 45, 50, 184, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.FIGHTING, PokemonType.STEEL, 1.3, 57.5, AbilityId.ADAPTABILITY, AbilityId.ADAPTABILITY, AbilityId.ADAPTABILITY, 625, 70, 145, 88, 140, 70, 112, 45, 50, 184), + ), + new PokemonSpecies(SpeciesId.HIPPOPOTAS, 4, false, false, false, "Hippo Pokémon", PokemonType.GROUND, null, 0.8, 49.5, AbilityId.SAND_STREAM, AbilityId.NONE, AbilityId.SAND_FORCE, 330, 68, 72, 78, 38, 42, 32, 140, 50, 66, GrowthRate.SLOW, 50, true), + new PokemonSpecies(SpeciesId.HIPPOWDON, 4, false, false, false, "Heavyweight Pokémon", PokemonType.GROUND, null, 2, 300, AbilityId.SAND_STREAM, AbilityId.NONE, AbilityId.SAND_FORCE, 525, 108, 112, 118, 68, 72, 47, 60, 50, 184, GrowthRate.SLOW, 50, true), + new PokemonSpecies(SpeciesId.SKORUPI, 4, false, false, false, "Scorpion Pokémon", PokemonType.POISON, PokemonType.BUG, 0.8, 12, AbilityId.BATTLE_ARMOR, AbilityId.SNIPER, AbilityId.KEEN_EYE, 330, 40, 50, 90, 30, 55, 65, 120, 50, 66, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.DRAPION, 4, false, false, false, "Ogre Scorpion Pokémon", PokemonType.POISON, PokemonType.DARK, 1.3, 61.5, AbilityId.BATTLE_ARMOR, AbilityId.SNIPER, AbilityId.KEEN_EYE, 500, 70, 90, 110, 60, 75, 95, 45, 50, 175, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.CROAGUNK, 4, false, false, false, "Toxic Mouth Pokémon", PokemonType.POISON, PokemonType.FIGHTING, 0.7, 23, AbilityId.ANTICIPATION, AbilityId.DRY_SKIN, AbilityId.POISON_TOUCH, 300, 48, 61, 40, 61, 40, 50, 140, 100, 60, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.TOXICROAK, 4, false, false, false, "Toxic Mouth Pokémon", PokemonType.POISON, PokemonType.FIGHTING, 1.3, 44.4, AbilityId.ANTICIPATION, AbilityId.DRY_SKIN, AbilityId.POISON_TOUCH, 490, 83, 106, 65, 86, 65, 85, 75, 50, 172, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.CARNIVINE, 4, false, false, false, "Bug Catcher Pokémon", PokemonType.GRASS, null, 1.4, 27, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 454, 74, 100, 72, 90, 72, 46, 200, 70, 159, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.FINNEON, 4, false, false, false, "Wing Fish Pokémon", PokemonType.WATER, null, 0.4, 7, AbilityId.SWIFT_SWIM, AbilityId.STORM_DRAIN, AbilityId.WATER_VEIL, 330, 49, 49, 56, 49, 61, 66, 190, 70, 66, GrowthRate.ERRATIC, 50, true), + new PokemonSpecies(SpeciesId.LUMINEON, 4, false, false, false, "Neon Pokémon", PokemonType.WATER, null, 1.2, 24, AbilityId.SWIFT_SWIM, AbilityId.STORM_DRAIN, AbilityId.WATER_VEIL, 460, 69, 69, 76, 69, 86, 91, 75, 70, 161, GrowthRate.ERRATIC, 50, true), + new PokemonSpecies(SpeciesId.MANTYKE, 4, false, false, false, "Kite Pokémon", PokemonType.WATER, PokemonType.FLYING, 1, 65, AbilityId.SWIFT_SWIM, AbilityId.WATER_ABSORB, AbilityId.WATER_VEIL, 345, 45, 20, 50, 60, 120, 50, 25, 50, 69, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.SNOVER, 4, false, false, false, "Frost Tree Pokémon", PokemonType.GRASS, PokemonType.ICE, 1, 50.5, AbilityId.SNOW_WARNING, AbilityId.NONE, AbilityId.SOUNDPROOF, 334, 60, 62, 50, 62, 60, 40, 120, 50, 67, GrowthRate.SLOW, 50, true), + new PokemonSpecies(SpeciesId.ABOMASNOW, 4, false, false, false, "Frost Tree Pokémon", PokemonType.GRASS, PokemonType.ICE, 2.2, 135.5, AbilityId.SNOW_WARNING, AbilityId.NONE, AbilityId.SOUNDPROOF, 494, 90, 92, 75, 92, 85, 60, 60, 50, 173, GrowthRate.SLOW, 50, true, true, + new PokemonForm("Normal", "", PokemonType.GRASS, PokemonType.ICE, 2.2, 135.5, AbilityId.SNOW_WARNING, AbilityId.NONE, AbilityId.SOUNDPROOF, 494, 90, 92, 75, 92, 85, 60, 60, 50, 173, true, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.GRASS, PokemonType.ICE, 2.7, 185, AbilityId.SNOW_WARNING, AbilityId.NONE, AbilityId.SNOW_WARNING, 594, 90, 132, 105, 132, 105, 30, 60, 50, 173, true), + ), + new PokemonSpecies(SpeciesId.WEAVILE, 4, false, false, false, "Sharp Claw Pokémon", PokemonType.DARK, PokemonType.ICE, 1.1, 34, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.PICKPOCKET, 510, 70, 120, 65, 45, 85, 125, 45, 35, 179, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.MAGNEZONE, 4, false, false, false, "Magnet Area Pokémon", PokemonType.ELECTRIC, PokemonType.STEEL, 1.2, 180, AbilityId.MAGNET_PULL, AbilityId.STURDY, AbilityId.ANALYTIC, 535, 70, 70, 115, 130, 90, 60, 30, 50, 268, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.LICKILICKY, 4, false, false, false, "Licking Pokémon", PokemonType.NORMAL, null, 1.7, 140, AbilityId.OWN_TEMPO, AbilityId.OBLIVIOUS, AbilityId.CLOUD_NINE, 515, 110, 85, 95, 80, 95, 50, 30, 50, 180, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.RHYPERIOR, 4, false, false, false, "Drill Pokémon", PokemonType.GROUND, PokemonType.ROCK, 2.4, 282.8, AbilityId.LIGHTNING_ROD, AbilityId.SOLID_ROCK, AbilityId.RECKLESS, 535, 115, 140, 130, 55, 55, 40, 30, 50, 268, GrowthRate.SLOW, 50, true), + new PokemonSpecies(SpeciesId.TANGROWTH, 4, false, false, false, "Vine Pokémon", PokemonType.GRASS, null, 2, 128.6, AbilityId.CHLOROPHYLL, AbilityId.LEAF_GUARD, AbilityId.REGENERATOR, 535, 100, 100, 125, 110, 50, 50, 30, 50, 187, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.ELECTIVIRE, 4, false, false, false, "Thunderbolt Pokémon", PokemonType.ELECTRIC, null, 1.8, 138.6, AbilityId.MOTOR_DRIVE, AbilityId.NONE, AbilityId.VITAL_SPIRIT, 540, 75, 123, 67, 95, 85, 95, 30, 50, 270, GrowthRate.MEDIUM_FAST, 75, false), + new PokemonSpecies(SpeciesId.MAGMORTAR, 4, false, false, false, "Blast Pokémon", PokemonType.FIRE, null, 1.6, 68, AbilityId.FLAME_BODY, AbilityId.NONE, AbilityId.VITAL_SPIRIT, 540, 75, 95, 67, 125, 95, 83, 30, 50, 270, GrowthRate.MEDIUM_FAST, 75, false), + new PokemonSpecies(SpeciesId.TOGEKISS, 4, false, false, false, "Jubilee Pokémon", PokemonType.FAIRY, PokemonType.FLYING, 1.5, 38, AbilityId.HUSTLE, AbilityId.SERENE_GRACE, AbilityId.SUPER_LUCK, 545, 85, 50, 95, 120, 115, 80, 30, 50, 273, GrowthRate.FAST, 87.5, false), + new PokemonSpecies(SpeciesId.YANMEGA, 4, false, false, false, "Ogre Darner Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.9, 51.5, AbilityId.SPEED_BOOST, AbilityId.TINTED_LENS, AbilityId.FRISK, 515, 86, 76, 86, 116, 56, 95, 30, 70, 180, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.LEAFEON, 4, false, false, false, "Verdant Pokémon", PokemonType.GRASS, null, 1, 25.5, AbilityId.LEAF_GUARD, AbilityId.NONE, AbilityId.CHLOROPHYLL, 525, 65, 110, 130, 60, 65, 95, 45, 35, 184, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.GLACEON, 4, false, false, false, "Fresh Snow Pokémon", PokemonType.ICE, null, 0.8, 25.9, AbilityId.SNOW_CLOAK, AbilityId.NONE, AbilityId.ICE_BODY, 525, 65, 60, 110, 130, 95, 65, 45, 35, 184, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.GLISCOR, 4, false, false, false, "Fang Scorpion Pokémon", PokemonType.GROUND, PokemonType.FLYING, 2, 42.5, AbilityId.HYPER_CUTTER, AbilityId.SAND_VEIL, AbilityId.POISON_HEAL, 510, 75, 95, 125, 45, 75, 95, 30, 70, 179, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.MAMOSWINE, 4, false, false, false, "Twin Tusk Pokémon", PokemonType.ICE, PokemonType.GROUND, 2.5, 291, AbilityId.OBLIVIOUS, AbilityId.SNOW_CLOAK, AbilityId.THICK_FAT, 530, 110, 130, 80, 70, 60, 80, 50, 50, 265, GrowthRate.SLOW, 50, true), + new PokemonSpecies(SpeciesId.PORYGON_Z, 4, false, false, false, "Virtual Pokémon", PokemonType.NORMAL, null, 0.9, 34, AbilityId.ADAPTABILITY, AbilityId.DOWNLOAD, AbilityId.ANALYTIC, 535, 85, 80, 70, 135, 75, 90, 30, 50, 268, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.GALLADE, 4, false, false, false, "Blade Pokémon", PokemonType.PSYCHIC, PokemonType.FIGHTING, 1.6, 52, AbilityId.STEADFAST, AbilityId.SHARPNESS, AbilityId.JUSTIFIED, 518, 68, 125, 65, 65, 115, 80, 45, 35, 259, GrowthRate.SLOW, 100, false, true, + new PokemonForm("Normal", "", PokemonType.PSYCHIC, PokemonType.FIGHTING, 1.6, 52, AbilityId.STEADFAST, AbilityId.SHARPNESS, AbilityId.JUSTIFIED, 518, 68, 125, 65, 65, 115, 80, 45, 35, 259, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.PSYCHIC, PokemonType.FIGHTING, 1.6, 56.4, AbilityId.INNER_FOCUS, AbilityId.INNER_FOCUS, AbilityId.INNER_FOCUS, 618, 68, 165, 95, 65, 115, 110, 45, 35, 259), + ), + new PokemonSpecies(SpeciesId.PROBOPASS, 4, false, false, false, "Compass Pokémon", PokemonType.ROCK, PokemonType.STEEL, 1.4, 340, AbilityId.STURDY, AbilityId.MAGNET_PULL, AbilityId.SAND_FORCE, 525, 60, 55, 145, 75, 150, 40, 60, 70, 184, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DUSKNOIR, 4, false, false, false, "Gripper Pokémon", PokemonType.GHOST, null, 2.2, 106.6, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.FRISK, 525, 45, 100, 135, 65, 135, 45, 45, 35, 263, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.FROSLASS, 4, false, false, false, "Snow Land Pokémon", PokemonType.ICE, PokemonType.GHOST, 1.3, 26.6, AbilityId.SNOW_CLOAK, AbilityId.NONE, AbilityId.CURSED_BODY, 480, 70, 80, 70, 80, 70, 110, 75, 50, 168, GrowthRate.MEDIUM_FAST, 0, false), + new PokemonSpecies(SpeciesId.ROTOM, 4, false, false, false, "Plasma Pokémon", PokemonType.ELECTRIC, PokemonType.GHOST, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 440, 50, 50, 77, 95, 77, 91, 45, 50, 154, GrowthRate.MEDIUM_FAST, null, false, false, + new PokemonForm("Normal", "", PokemonType.ELECTRIC, PokemonType.GHOST, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 440, 50, 50, 77, 95, 77, 91, 45, 50, 154, false, null, true), + new PokemonForm("Heat", "heat", PokemonType.ELECTRIC, PokemonType.FIRE, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 182, false, null, true), + new PokemonForm("Wash", "wash", PokemonType.ELECTRIC, PokemonType.WATER, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 182, false, null, true), + new PokemonForm("Frost", "frost", PokemonType.ELECTRIC, PokemonType.ICE, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 182, false, null, true), + new PokemonForm("Fan", "fan", PokemonType.ELECTRIC, PokemonType.FLYING, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 182, false, null, true), + new PokemonForm("Mow", "mow", PokemonType.ELECTRIC, PokemonType.GRASS, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 520, 50, 65, 107, 105, 107, 86, 45, 50, 182, false, null, true), + ), + new PokemonSpecies(SpeciesId.UXIE, 4, true, false, false, "Knowledge Pokémon", PokemonType.PSYCHIC, null, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 580, 75, 75, 130, 75, 130, 95, 3, 140, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.MESPRIT, 4, true, false, false, "Emotion Pokémon", PokemonType.PSYCHIC, null, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 580, 80, 105, 105, 105, 105, 80, 3, 140, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.AZELF, 4, true, false, false, "Willpower Pokémon", PokemonType.PSYCHIC, null, 0.3, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 580, 75, 125, 70, 125, 70, 115, 3, 140, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.DIALGA, 4, false, true, false, "Temporal Pokémon", PokemonType.STEEL, PokemonType.DRAGON, 5.4, 683, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.TELEPATHY, 680, 100, 120, 120, 150, 100, 90, 3, 0, 340, GrowthRate.SLOW, null, false, false, + new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.DRAGON, 5.4, 683, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.TELEPATHY, 680, 100, 120, 120, 150, 100, 90, 3, 0, 340, false, null, true), + new PokemonForm("Origin Forme", "origin", PokemonType.STEEL, PokemonType.DRAGON, 7, 848.7, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.TELEPATHY, 680, 100, 100, 120, 150, 120, 90, 3, 0, 340), + ), + new PokemonSpecies(SpeciesId.PALKIA, 4, false, true, false, "Spatial Pokémon", PokemonType.WATER, PokemonType.DRAGON, 4.2, 336, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.TELEPATHY, 680, 90, 120, 100, 150, 120, 100, 3, 0, 340, GrowthRate.SLOW, null, false, false, + new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.DRAGON, 4.2, 336, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.TELEPATHY, 680, 90, 120, 100, 150, 120, 100, 3, 0, 340, false, null, true), + new PokemonForm("Origin Forme", "origin", PokemonType.WATER, PokemonType.DRAGON, 6.3, 659, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.TELEPATHY, 680, 90, 100, 100, 150, 120, 120, 3, 0, 340), + ), + new PokemonSpecies(SpeciesId.HEATRAN, 4, true, false, false, "Lava Dome Pokémon", PokemonType.FIRE, PokemonType.STEEL, 1.7, 430, AbilityId.FLASH_FIRE, AbilityId.NONE, AbilityId.FLAME_BODY, 600, 91, 90, 106, 130, 106, 77, 3, 100, 300, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.REGIGIGAS, 4, true, false, false, "Colossal Pokémon", PokemonType.NORMAL, null, 3.7, 420, AbilityId.SLOW_START, AbilityId.NONE, AbilityId.NORMALIZE, 670, 110, 160, 110, 80, 110, 100, 3, 0, 335, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.GIRATINA, 4, false, true, false, "Renegade Pokémon", PokemonType.GHOST, PokemonType.DRAGON, 4.5, 750, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.TELEPATHY, 680, 150, 100, 120, 100, 120, 90, 3, 0, 340, GrowthRate.SLOW, null, false, true, + new PokemonForm("Altered Forme", "altered", PokemonType.GHOST, PokemonType.DRAGON, 4.5, 750, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.TELEPATHY, 680, 150, 100, 120, 100, 120, 90, 3, 0, 340, false, null, true), + new PokemonForm("Origin Forme", "origin", PokemonType.GHOST, PokemonType.DRAGON, 6.9, 650, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.LEVITATE, 680, 150, 120, 100, 120, 100, 90, 3, 0, 340), + ), + new PokemonSpecies(SpeciesId.CRESSELIA, 4, true, false, false, "Lunar Pokémon", PokemonType.PSYCHIC, null, 1.5, 85.6, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 580, 120, 70, 110, 75, 120, 85, 3, 100, 300, GrowthRate.SLOW, 0, false), + new PokemonSpecies(SpeciesId.PHIONE, 4, false, false, true, "Sea Drifter Pokémon", PokemonType.WATER, null, 0.4, 3.1, AbilityId.HYDRATION, AbilityId.NONE, AbilityId.NONE, 480, 80, 80, 80, 80, 80, 80, 30, 70, 240, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.MANAPHY, 4, false, false, true, "Seafaring Pokémon", PokemonType.WATER, null, 0.3, 1.4, AbilityId.HYDRATION, AbilityId.NONE, AbilityId.NONE, 600, 100, 100, 100, 100, 100, 100, 3, 70, 300, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.DARKRAI, 4, false, false, true, "Pitch-Black Pokémon", PokemonType.DARK, null, 1.5, 50.5, AbilityId.BAD_DREAMS, AbilityId.NONE, AbilityId.NONE, 600, 70, 90, 90, 135, 90, 125, 3, 0, 300, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.SHAYMIN, 4, false, false, true, "Gratitude Pokémon", PokemonType.GRASS, null, 0.2, 2.1, AbilityId.NATURAL_CURE, AbilityId.NONE, AbilityId.NONE, 600, 100, 100, 100, 100, 100, 100, 45, 100, 300, GrowthRate.MEDIUM_SLOW, null, false, true, + new PokemonForm("Land Forme", "land", PokemonType.GRASS, null, 0.2, 2.1, AbilityId.NATURAL_CURE, AbilityId.NONE, AbilityId.NONE, 600, 100, 100, 100, 100, 100, 100, 45, 100, 300, false, null, true), + new PokemonForm("Sky Forme", "sky", PokemonType.GRASS, PokemonType.FLYING, 0.4, 5.2, AbilityId.SERENE_GRACE, AbilityId.NONE, AbilityId.NONE, 600, 100, 103, 75, 120, 75, 127, 45, 100, 300), + ), + new PokemonSpecies(SpeciesId.ARCEUS, 4, false, false, true, "Alpha Pokémon", PokemonType.NORMAL, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal", "normal", PokemonType.NORMAL, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360, false, null, true), + new PokemonForm("Fighting", "fighting", PokemonType.FIGHTING, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Flying", "flying", PokemonType.FLYING, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Poison", "poison", PokemonType.POISON, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Ground", "ground", PokemonType.GROUND, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Rock", "rock", PokemonType.ROCK, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Bug", "bug", PokemonType.BUG, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Ghost", "ghost", PokemonType.GHOST, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Steel", "steel", PokemonType.STEEL, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Fire", "fire", PokemonType.FIRE, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Water", "water", PokemonType.WATER, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Grass", "grass", PokemonType.GRASS, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Electric", "electric", PokemonType.ELECTRIC, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Psychic", "psychic", PokemonType.PSYCHIC, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Ice", "ice", PokemonType.ICE, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Dragon", "dragon", PokemonType.DRAGON, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Dark", "dark", PokemonType.DARK, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("Fairy", "fairy", PokemonType.FAIRY, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("???", "unknown", PokemonType.UNKNOWN, null, 3.2, 320, AbilityId.MULTITYPE, AbilityId.NONE, AbilityId.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360, false, null, false, true), + ), + new PokemonSpecies(SpeciesId.VICTINI, 5, false, false, true, "Victory Pokémon", PokemonType.PSYCHIC, PokemonType.FIRE, 0.4, 4, AbilityId.VICTORY_STAR, AbilityId.NONE, AbilityId.NONE, 600, 100, 100, 100, 100, 100, 100, 3, 100, 300, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.SNIVY, 5, false, false, false, "Grass Snake Pokémon", PokemonType.GRASS, null, 0.6, 8.1, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.CONTRARY, 308, 45, 45, 55, 45, 55, 63, 45, 70, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.SERVINE, 5, false, false, false, "Grass Snake Pokémon", PokemonType.GRASS, null, 0.8, 16, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.CONTRARY, 413, 60, 60, 75, 60, 75, 83, 45, 70, 145, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.SERPERIOR, 5, false, false, false, "Regal Pokémon", PokemonType.GRASS, null, 3.3, 63, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.CONTRARY, 528, 75, 75, 95, 75, 95, 113, 45, 70, 264, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.TEPIG, 5, false, false, false, "Fire Pig Pokémon", PokemonType.FIRE, null, 0.5, 9.9, AbilityId.BLAZE, AbilityId.NONE, AbilityId.THICK_FAT, 308, 65, 63, 45, 45, 45, 45, 45, 70, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.PIGNITE, 5, false, false, false, "Fire Pig Pokémon", PokemonType.FIRE, PokemonType.FIGHTING, 1, 55.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.THICK_FAT, 418, 90, 93, 55, 70, 55, 55, 45, 70, 146, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.EMBOAR, 5, false, false, false, "Mega Fire Pig Pokémon", PokemonType.FIRE, PokemonType.FIGHTING, 1.6, 150, AbilityId.BLAZE, AbilityId.NONE, AbilityId.RECKLESS, 528, 110, 123, 65, 100, 65, 65, 45, 70, 264, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.OSHAWOTT, 5, false, false, false, "Sea Otter Pokémon", PokemonType.WATER, null, 0.5, 5.9, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SHELL_ARMOR, 308, 55, 55, 45, 63, 45, 45, 45, 70, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.DEWOTT, 5, false, false, false, "Discipline Pokémon", PokemonType.WATER, null, 0.8, 24.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SHELL_ARMOR, 413, 75, 75, 60, 83, 60, 60, 45, 70, 145, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.SAMUROTT, 5, false, false, false, "Formidable Pokémon", PokemonType.WATER, null, 1.5, 94.6, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SHELL_ARMOR, 528, 95, 100, 85, 108, 70, 70, 45, 70, 264, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.PATRAT, 5, false, false, false, "Scout Pokémon", PokemonType.NORMAL, null, 0.5, 11.6, AbilityId.RUN_AWAY, AbilityId.KEEN_EYE, AbilityId.ANALYTIC, 255, 45, 55, 39, 35, 39, 42, 255, 70, 51, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.WATCHOG, 5, false, false, false, "Lookout Pokémon", PokemonType.NORMAL, null, 1.1, 27, AbilityId.ILLUMINATE, AbilityId.KEEN_EYE, AbilityId.ANALYTIC, 420, 60, 85, 69, 60, 69, 77, 255, 70, 147, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.LILLIPUP, 5, false, false, false, "Puppy Pokémon", PokemonType.NORMAL, null, 0.4, 4.1, AbilityId.VITAL_SPIRIT, AbilityId.PICKUP, AbilityId.RUN_AWAY, 275, 45, 60, 45, 25, 45, 55, 255, 50, 55, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.HERDIER, 5, false, false, false, "Loyal Dog Pokémon", PokemonType.NORMAL, null, 0.9, 14.7, AbilityId.INTIMIDATE, AbilityId.SAND_RUSH, AbilityId.SCRAPPY, 370, 65, 80, 65, 35, 65, 60, 120, 50, 130, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.STOUTLAND, 5, false, false, false, "Big-Hearted Pokémon", PokemonType.NORMAL, null, 1.2, 61, AbilityId.INTIMIDATE, AbilityId.SAND_RUSH, AbilityId.SCRAPPY, 500, 85, 110, 90, 45, 90, 80, 45, 50, 250, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.PURRLOIN, 5, false, false, false, "Devious Pokémon", PokemonType.DARK, null, 0.4, 10.1, AbilityId.LIMBER, AbilityId.UNBURDEN, AbilityId.PRANKSTER, 281, 41, 50, 37, 50, 37, 66, 255, 50, 56, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.LIEPARD, 5, false, false, false, "Cruel Pokémon", PokemonType.DARK, null, 1.1, 37.5, AbilityId.LIMBER, AbilityId.UNBURDEN, AbilityId.PRANKSTER, 446, 64, 88, 50, 88, 50, 106, 90, 50, 156, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PANSAGE, 5, false, false, false, "Grass Monkey Pokémon", PokemonType.GRASS, null, 0.6, 10.5, AbilityId.GLUTTONY, AbilityId.NONE, AbilityId.OVERGROW, 316, 50, 53, 48, 53, 48, 64, 190, 70, 63, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.SIMISAGE, 5, false, false, false, "Thorn Monkey Pokémon", PokemonType.GRASS, null, 1.1, 30.5, AbilityId.GLUTTONY, AbilityId.NONE, AbilityId.OVERGROW, 498, 75, 98, 63, 98, 63, 101, 75, 70, 174, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.PANSEAR, 5, false, false, false, "High Temp Pokémon", PokemonType.FIRE, null, 0.6, 11, AbilityId.GLUTTONY, AbilityId.NONE, AbilityId.BLAZE, 316, 50, 53, 48, 53, 48, 64, 190, 70, 63, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.SIMISEAR, 5, false, false, false, "Ember Pokémon", PokemonType.FIRE, null, 1, 28, AbilityId.GLUTTONY, AbilityId.NONE, AbilityId.BLAZE, 498, 75, 98, 63, 98, 63, 101, 75, 70, 174, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.PANPOUR, 5, false, false, false, "Spray Pokémon", PokemonType.WATER, null, 0.6, 13.5, AbilityId.GLUTTONY, AbilityId.NONE, AbilityId.TORRENT, 316, 50, 53, 48, 53, 48, 64, 190, 70, 63, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.SIMIPOUR, 5, false, false, false, "Geyser Pokémon", PokemonType.WATER, null, 1, 29, AbilityId.GLUTTONY, AbilityId.NONE, AbilityId.TORRENT, 498, 75, 98, 63, 98, 63, 101, 75, 70, 174, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.MUNNA, 5, false, false, false, "Dream Eater Pokémon", PokemonType.PSYCHIC, null, 0.6, 23.3, AbilityId.FOREWARN, AbilityId.SYNCHRONIZE, AbilityId.TELEPATHY, 292, 76, 25, 45, 67, 55, 24, 190, 50, 58, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.MUSHARNA, 5, false, false, false, "Drowsing Pokémon", PokemonType.PSYCHIC, null, 1.1, 60.5, AbilityId.FOREWARN, AbilityId.SYNCHRONIZE, AbilityId.TELEPATHY, 487, 116, 55, 85, 107, 95, 29, 75, 50, 170, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.PIDOVE, 5, false, false, false, "Tiny Pigeon Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.3, 2.1, AbilityId.BIG_PECKS, AbilityId.SUPER_LUCK, AbilityId.RIVALRY, 264, 50, 55, 50, 36, 30, 43, 255, 50, 53, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.TRANQUILL, 5, false, false, false, "Wild Pigeon Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 15, AbilityId.BIG_PECKS, AbilityId.SUPER_LUCK, AbilityId.RIVALRY, 358, 62, 77, 62, 50, 42, 65, 120, 50, 125, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.UNFEZANT, 5, false, false, false, "Proud Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.2, 29, AbilityId.BIG_PECKS, AbilityId.SUPER_LUCK, AbilityId.RIVALRY, 488, 80, 115, 80, 65, 55, 93, 45, 50, 244, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.BLITZLE, 5, false, false, false, "Electrified Pokémon", PokemonType.ELECTRIC, null, 0.8, 29.8, AbilityId.LIGHTNING_ROD, AbilityId.MOTOR_DRIVE, AbilityId.SAP_SIPPER, 295, 45, 60, 32, 50, 32, 76, 190, 70, 59, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ZEBSTRIKA, 5, false, false, false, "Thunderbolt Pokémon", PokemonType.ELECTRIC, null, 1.6, 79.5, AbilityId.LIGHTNING_ROD, AbilityId.MOTOR_DRIVE, AbilityId.SAP_SIPPER, 497, 75, 100, 63, 80, 63, 116, 75, 70, 174, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ROGGENROLA, 5, false, false, false, "Mantle Pokémon", PokemonType.ROCK, null, 0.4, 18, AbilityId.STURDY, AbilityId.WEAK_ARMOR, AbilityId.SAND_FORCE, 280, 55, 75, 85, 25, 25, 15, 255, 50, 56, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.BOLDORE, 5, false, false, false, "Ore Pokémon", PokemonType.ROCK, null, 0.9, 102, AbilityId.STURDY, AbilityId.WEAK_ARMOR, AbilityId.SAND_FORCE, 390, 70, 105, 105, 50, 40, 20, 120, 50, 137, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.GIGALITH, 5, false, false, false, "Compressed Pokémon", PokemonType.ROCK, null, 1.7, 260, AbilityId.STURDY, AbilityId.SAND_STREAM, AbilityId.SAND_FORCE, 515, 85, 135, 130, 60, 80, 25, 45, 50, 258, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.WOOBAT, 5, false, false, false, "Bat Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 0.4, 2.1, AbilityId.UNAWARE, AbilityId.KLUTZ, AbilityId.SIMPLE, 323, 65, 45, 43, 55, 43, 72, 190, 50, 65, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SWOOBAT, 5, false, false, false, "Courting Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 0.9, 10.5, AbilityId.UNAWARE, AbilityId.KLUTZ, AbilityId.SIMPLE, 425, 67, 57, 55, 77, 55, 114, 45, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DRILBUR, 5, false, false, false, "Mole Pokémon", PokemonType.GROUND, null, 0.3, 8.5, AbilityId.SAND_RUSH, AbilityId.SAND_FORCE, AbilityId.MOLD_BREAKER, 328, 60, 85, 40, 30, 45, 68, 120, 50, 66, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.EXCADRILL, 5, false, false, false, "Subterrene Pokémon", PokemonType.GROUND, PokemonType.STEEL, 0.7, 40.4, AbilityId.SAND_RUSH, AbilityId.SAND_FORCE, AbilityId.MOLD_BREAKER, 508, 110, 135, 60, 50, 65, 88, 60, 50, 178, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.AUDINO, 5, false, false, false, "Hearing Pokémon", PokemonType.NORMAL, null, 1.1, 31, AbilityId.HEALER, AbilityId.REGENERATOR, AbilityId.KLUTZ, 445, 103, 60, 86, 60, 86, 50, 255, 50, 390, GrowthRate.FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.NORMAL, null, 1.1, 31, AbilityId.HEALER, AbilityId.REGENERATOR, AbilityId.KLUTZ, 445, 103, 60, 86, 60, 86, 50, 255, 50, 390, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.NORMAL, PokemonType.FAIRY, 1.5, 32, AbilityId.REGENERATOR, AbilityId.REGENERATOR, AbilityId.REGENERATOR, 545, 103, 60, 126, 80, 126, 50, 255, 50, 390), //Custom Ability, base form Hidden Ability + ), + new PokemonSpecies(SpeciesId.TIMBURR, 5, false, false, false, "Muscular Pokémon", PokemonType.FIGHTING, null, 0.6, 12.5, AbilityId.GUTS, AbilityId.SHEER_FORCE, AbilityId.IRON_FIST, 305, 75, 80, 55, 25, 35, 35, 180, 70, 61, GrowthRate.MEDIUM_SLOW, 75, false), + new PokemonSpecies(SpeciesId.GURDURR, 5, false, false, false, "Muscular Pokémon", PokemonType.FIGHTING, null, 1.2, 40, AbilityId.GUTS, AbilityId.SHEER_FORCE, AbilityId.IRON_FIST, 405, 85, 105, 85, 40, 50, 40, 90, 50, 142, GrowthRate.MEDIUM_SLOW, 75, false), + new PokemonSpecies(SpeciesId.CONKELDURR, 5, false, false, false, "Muscular Pokémon", PokemonType.FIGHTING, null, 1.4, 87, AbilityId.GUTS, AbilityId.SHEER_FORCE, AbilityId.IRON_FIST, 505, 105, 140, 95, 55, 65, 45, 45, 50, 253, GrowthRate.MEDIUM_SLOW, 75, false), + new PokemonSpecies(SpeciesId.TYMPOLE, 5, false, false, false, "Tadpole Pokémon", PokemonType.WATER, null, 0.5, 4.5, AbilityId.SWIFT_SWIM, AbilityId.HYDRATION, AbilityId.WATER_ABSORB, 294, 50, 50, 40, 50, 40, 64, 255, 50, 59, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.PALPITOAD, 5, false, false, false, "Vibration Pokémon", PokemonType.WATER, PokemonType.GROUND, 0.8, 17, AbilityId.SWIFT_SWIM, AbilityId.HYDRATION, AbilityId.WATER_ABSORB, 384, 75, 65, 55, 65, 55, 69, 120, 50, 134, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.SEISMITOAD, 5, false, false, false, "Vibration Pokémon", PokemonType.WATER, PokemonType.GROUND, 1.5, 62, AbilityId.SWIFT_SWIM, AbilityId.POISON_TOUCH, AbilityId.WATER_ABSORB, 509, 105, 95, 75, 85, 75, 74, 45, 50, 255, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.THROH, 5, false, false, false, "Judo Pokémon", PokemonType.FIGHTING, null, 1.3, 55.5, AbilityId.GUTS, AbilityId.INNER_FOCUS, AbilityId.MOLD_BREAKER, 465, 120, 100, 85, 30, 85, 45, 45, 50, 163, GrowthRate.MEDIUM_FAST, 100, false), + new PokemonSpecies(SpeciesId.SAWK, 5, false, false, false, "Karate Pokémon", PokemonType.FIGHTING, null, 1.4, 51, AbilityId.STURDY, AbilityId.INNER_FOCUS, AbilityId.MOLD_BREAKER, 465, 75, 125, 75, 30, 75, 85, 45, 50, 163, GrowthRate.MEDIUM_FAST, 100, false), + new PokemonSpecies(SpeciesId.SEWADDLE, 5, false, false, false, "Sewing Pokémon", PokemonType.BUG, PokemonType.GRASS, 0.3, 2.5, AbilityId.SWARM, AbilityId.CHLOROPHYLL, AbilityId.OVERCOAT, 310, 45, 53, 70, 40, 60, 42, 255, 70, 62, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.SWADLOON, 5, false, false, false, "Leaf-Wrapped Pokémon", PokemonType.BUG, PokemonType.GRASS, 0.5, 7.3, AbilityId.LEAF_GUARD, AbilityId.CHLOROPHYLL, AbilityId.OVERCOAT, 380, 55, 63, 90, 50, 80, 42, 120, 70, 133, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.LEAVANNY, 5, false, false, false, "Nurturing Pokémon", PokemonType.BUG, PokemonType.GRASS, 1.2, 20.5, AbilityId.SWARM, AbilityId.CHLOROPHYLL, AbilityId.OVERCOAT, 500, 75, 103, 80, 70, 80, 92, 45, 70, 250, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.VENIPEDE, 5, false, false, false, "Centipede Pokémon", PokemonType.BUG, PokemonType.POISON, 0.4, 5.3, AbilityId.POISON_POINT, AbilityId.SWARM, AbilityId.SPEED_BOOST, 260, 30, 45, 59, 30, 39, 57, 255, 50, 52, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.WHIRLIPEDE, 5, false, false, false, "Curlipede Pokémon", PokemonType.BUG, PokemonType.POISON, 1.2, 58.5, AbilityId.POISON_POINT, AbilityId.SWARM, AbilityId.SPEED_BOOST, 360, 40, 55, 99, 40, 79, 47, 120, 50, 126, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.SCOLIPEDE, 5, false, false, false, "Megapede Pokémon", PokemonType.BUG, PokemonType.POISON, 2.5, 200.5, AbilityId.POISON_POINT, AbilityId.SWARM, AbilityId.SPEED_BOOST, 485, 60, 100, 89, 55, 69, 112, 45, 50, 243, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.COTTONEE, 5, false, false, false, "Cotton Puff Pokémon", PokemonType.GRASS, PokemonType.FAIRY, 0.3, 0.6, AbilityId.PRANKSTER, AbilityId.INFILTRATOR, AbilityId.CHLOROPHYLL, 280, 40, 27, 60, 37, 50, 66, 190, 50, 56, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.WHIMSICOTT, 5, false, false, false, "Windveiled Pokémon", PokemonType.GRASS, PokemonType.FAIRY, 0.7, 6.6, AbilityId.PRANKSTER, AbilityId.INFILTRATOR, AbilityId.CHLOROPHYLL, 480, 60, 67, 85, 77, 75, 116, 75, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PETILIL, 5, false, false, false, "Bulb Pokémon", PokemonType.GRASS, null, 0.5, 6.6, AbilityId.CHLOROPHYLL, AbilityId.OWN_TEMPO, AbilityId.LEAF_GUARD, 280, 45, 35, 50, 70, 50, 30, 190, 50, 56, GrowthRate.MEDIUM_FAST, 0, false), + new PokemonSpecies(SpeciesId.LILLIGANT, 5, false, false, false, "Flowering Pokémon", PokemonType.GRASS, null, 1.1, 16.3, AbilityId.CHLOROPHYLL, AbilityId.OWN_TEMPO, AbilityId.LEAF_GUARD, 480, 70, 60, 75, 110, 75, 90, 75, 50, 168, GrowthRate.MEDIUM_FAST, 0, false), + new PokemonSpecies(SpeciesId.BASCULIN, 5, false, false, false, "Hostile Pokémon", PokemonType.WATER, null, 1, 18, AbilityId.RECKLESS, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 460, 70, 92, 65, 80, 55, 98, 25, 50, 161, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Red-Striped Form", "red-striped", PokemonType.WATER, null, 1, 18, AbilityId.RECKLESS, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 460, 70, 92, 65, 80, 55, 98, 25, 50, 161, false, null, true), + new PokemonForm("Blue-Striped Form", "blue-striped", PokemonType.WATER, null, 1, 18, AbilityId.ROCK_HEAD, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 460, 70, 92, 65, 80, 55, 98, 25, 50, 161, false, null, true), + new PokemonForm("White-Striped Form", "white-striped", PokemonType.WATER, null, 1, 18, AbilityId.RATTLED, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 460, 70, 92, 65, 80, 55, 98, 25, 50, 161, false, null, true), + ), + new PokemonSpecies(SpeciesId.SANDILE, 5, false, false, false, "Desert Croc Pokémon", PokemonType.GROUND, PokemonType.DARK, 0.7, 15.2, AbilityId.INTIMIDATE, AbilityId.MOXIE, AbilityId.ANGER_POINT, 292, 50, 72, 35, 35, 35, 65, 180, 50, 58, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.KROKOROK, 5, false, false, false, "Desert Croc Pokémon", PokemonType.GROUND, PokemonType.DARK, 1, 33.4, AbilityId.INTIMIDATE, AbilityId.MOXIE, AbilityId.ANGER_POINT, 351, 60, 82, 45, 45, 45, 74, 90, 50, 123, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.KROOKODILE, 5, false, false, false, "Intimidation Pokémon", PokemonType.GROUND, PokemonType.DARK, 1.5, 96.3, AbilityId.INTIMIDATE, AbilityId.MOXIE, AbilityId.ANGER_POINT, 519, 95, 117, 80, 65, 70, 92, 45, 50, 260, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.DARUMAKA, 5, false, false, false, "Zen Charm Pokémon", PokemonType.FIRE, null, 0.6, 37.5, AbilityId.HUSTLE, AbilityId.NONE, AbilityId.INNER_FOCUS, 315, 70, 90, 45, 15, 45, 50, 120, 50, 63, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.DARMANITAN, 5, false, false, false, "Blazing Pokémon", PokemonType.FIRE, null, 1.3, 92.9, AbilityId.SHEER_FORCE, AbilityId.NONE, AbilityId.ZEN_MODE, 480, 105, 140, 55, 30, 55, 95, 60, 50, 168, GrowthRate.MEDIUM_SLOW, 50, false, true, + new PokemonForm("Standard Mode", "", PokemonType.FIRE, null, 1.3, 92.9, AbilityId.SHEER_FORCE, AbilityId.NONE, AbilityId.ZEN_MODE, 480, 105, 140, 55, 30, 55, 95, 60, 50, 168, false, null, true), + new PokemonForm("Zen Mode", "zen", PokemonType.FIRE, PokemonType.PSYCHIC, 1.3, 92.9, AbilityId.SHEER_FORCE, AbilityId.NONE, AbilityId.ZEN_MODE, 540, 105, 30, 105, 140, 105, 55, 60, 50, 189), + ), + new PokemonSpecies(SpeciesId.MARACTUS, 5, false, false, false, "Cactus Pokémon", PokemonType.GRASS, null, 1, 28, AbilityId.WATER_ABSORB, AbilityId.CHLOROPHYLL, AbilityId.STORM_DRAIN, 461, 75, 86, 67, 106, 67, 60, 255, 50, 161, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DWEBBLE, 5, false, false, false, "Rock Inn Pokémon", PokemonType.BUG, PokemonType.ROCK, 0.3, 14.5, AbilityId.STURDY, AbilityId.SHELL_ARMOR, AbilityId.WEAK_ARMOR, 325, 50, 65, 85, 35, 35, 55, 190, 50, 65, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CRUSTLE, 5, false, false, false, "Stone Home Pokémon", PokemonType.BUG, PokemonType.ROCK, 1.4, 200, AbilityId.STURDY, AbilityId.SHELL_ARMOR, AbilityId.WEAK_ARMOR, 485, 70, 105, 125, 65, 75, 45, 75, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SCRAGGY, 5, false, false, false, "Shedding Pokémon", PokemonType.DARK, PokemonType.FIGHTING, 0.6, 11.8, AbilityId.SHED_SKIN, AbilityId.MOXIE, AbilityId.INTIMIDATE, 348, 50, 75, 70, 35, 70, 48, 180, 35, 70, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SCRAFTY, 5, false, false, false, "Hoodlum Pokémon", PokemonType.DARK, PokemonType.FIGHTING, 1.1, 30, AbilityId.SHED_SKIN, AbilityId.MOXIE, AbilityId.INTIMIDATE, 488, 65, 90, 115, 45, 115, 58, 90, 50, 171, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SIGILYPH, 5, false, false, false, "Avianoid Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 1.4, 14, AbilityId.WONDER_SKIN, AbilityId.MAGIC_GUARD, AbilityId.TINTED_LENS, 490, 72, 58, 80, 103, 80, 97, 45, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.YAMASK, 5, false, false, false, "Spirit Pokémon", PokemonType.GHOST, null, 0.5, 1.5, AbilityId.MUMMY, AbilityId.NONE, AbilityId.NONE, 303, 38, 30, 85, 55, 65, 30, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.COFAGRIGUS, 5, false, false, false, "Coffin Pokémon", PokemonType.GHOST, null, 1.7, 76.5, AbilityId.MUMMY, AbilityId.NONE, AbilityId.NONE, 483, 58, 50, 145, 95, 105, 30, 90, 50, 169, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.TIRTOUGA, 5, false, false, false, "Prototurtle Pokémon", PokemonType.WATER, PokemonType.ROCK, 0.7, 16.5, AbilityId.SOLID_ROCK, AbilityId.STURDY, AbilityId.SWIFT_SWIM, 355, 54, 78, 103, 53, 45, 22, 45, 50, 71, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.CARRACOSTA, 5, false, false, false, "Prototurtle Pokémon", PokemonType.WATER, PokemonType.ROCK, 1.2, 81, AbilityId.SOLID_ROCK, AbilityId.STURDY, AbilityId.SWIFT_SWIM, 495, 74, 108, 133, 83, 65, 32, 45, 50, 173, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.ARCHEN, 5, false, false, false, "First Bird Pokémon", PokemonType.ROCK, PokemonType.FLYING, 0.5, 9.5, AbilityId.DEFEATIST, AbilityId.NONE, AbilityId.WIMP_OUT, 401, 55, 112, 45, 74, 45, 70, 45, 50, 71, GrowthRate.MEDIUM_FAST, 87.5, false), //Custom Hidden + new PokemonSpecies(SpeciesId.ARCHEOPS, 5, false, false, false, "First Bird Pokémon", PokemonType.ROCK, PokemonType.FLYING, 1.4, 32, AbilityId.DEFEATIST, AbilityId.NONE, AbilityId.EMERGENCY_EXIT, 567, 75, 140, 65, 112, 65, 110, 45, 50, 177, GrowthRate.MEDIUM_FAST, 87.5, false), //Custom Hidden + new PokemonSpecies(SpeciesId.TRUBBISH, 5, false, false, false, "Trash Bag Pokémon", PokemonType.POISON, null, 0.6, 31, AbilityId.STENCH, AbilityId.STICKY_HOLD, AbilityId.AFTERMATH, 329, 50, 50, 62, 40, 62, 65, 190, 50, 66, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GARBODOR, 5, false, false, false, "Trash Heap Pokémon", PokemonType.POISON, null, 1.9, 107.3, AbilityId.STENCH, AbilityId.WEAK_ARMOR, AbilityId.AFTERMATH, 474, 80, 95, 82, 60, 82, 75, 60, 50, 166, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.POISON, null, 1.9, 107.3, AbilityId.STENCH, AbilityId.WEAK_ARMOR, AbilityId.AFTERMATH, 474, 80, 95, 82, 60, 82, 75, 60, 50, 166, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.POISON, PokemonType.STEEL, 21, 999.9, AbilityId.TOXIC_DEBRIS, AbilityId.TOXIC_DEBRIS, AbilityId.TOXIC_DEBRIS, 574, 115, 121, 102, 81, 102, 53, 60, 50, 166), + ), + new PokemonSpecies(SpeciesId.ZORUA, 5, false, false, false, "Tricky Fox Pokémon", PokemonType.DARK, null, 0.7, 12.5, AbilityId.ILLUSION, AbilityId.NONE, AbilityId.NONE, 330, 40, 65, 40, 80, 40, 65, 75, 50, 66, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.ZOROARK, 5, false, false, false, "Illusion Fox Pokémon", PokemonType.DARK, null, 1.6, 81.1, AbilityId.ILLUSION, AbilityId.NONE, AbilityId.NONE, 510, 60, 105, 60, 120, 60, 105, 45, 50, 179, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.MINCCINO, 5, false, false, false, "Chinchilla Pokémon", PokemonType.NORMAL, null, 0.4, 5.8, AbilityId.CUTE_CHARM, AbilityId.TECHNICIAN, AbilityId.SKILL_LINK, 300, 55, 50, 40, 40, 40, 75, 255, 50, 60, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.CINCCINO, 5, false, false, false, "Scarf Pokémon", PokemonType.NORMAL, null, 0.5, 7.5, AbilityId.CUTE_CHARM, AbilityId.TECHNICIAN, AbilityId.SKILL_LINK, 470, 75, 95, 60, 65, 60, 115, 60, 50, 165, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.GOTHITA, 5, false, false, false, "Fixation Pokémon", PokemonType.PSYCHIC, null, 0.4, 5.8, AbilityId.FRISK, AbilityId.COMPETITIVE, AbilityId.SHADOW_TAG, 290, 45, 30, 50, 55, 65, 45, 200, 50, 58, GrowthRate.MEDIUM_SLOW, 25, false), + new PokemonSpecies(SpeciesId.GOTHORITA, 5, false, false, false, "Manipulate Pokémon", PokemonType.PSYCHIC, null, 0.7, 18, AbilityId.FRISK, AbilityId.COMPETITIVE, AbilityId.SHADOW_TAG, 390, 60, 45, 70, 75, 85, 55, 100, 50, 137, GrowthRate.MEDIUM_SLOW, 25, false), + new PokemonSpecies(SpeciesId.GOTHITELLE, 5, false, false, false, "Astral Body Pokémon", PokemonType.PSYCHIC, null, 1.5, 44, AbilityId.FRISK, AbilityId.COMPETITIVE, AbilityId.SHADOW_TAG, 490, 70, 55, 95, 95, 110, 65, 50, 50, 245, GrowthRate.MEDIUM_SLOW, 25, false), + new PokemonSpecies(SpeciesId.SOLOSIS, 5, false, false, false, "Cell Pokémon", PokemonType.PSYCHIC, null, 0.3, 1, AbilityId.OVERCOAT, AbilityId.MAGIC_GUARD, AbilityId.REGENERATOR, 290, 45, 30, 40, 105, 50, 20, 200, 50, 58, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.DUOSION, 5, false, false, false, "Mitosis Pokémon", PokemonType.PSYCHIC, null, 0.6, 8, AbilityId.OVERCOAT, AbilityId.MAGIC_GUARD, AbilityId.REGENERATOR, 370, 65, 40, 50, 125, 60, 30, 100, 50, 130, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.REUNICLUS, 5, false, false, false, "Multiplying Pokémon", PokemonType.PSYCHIC, null, 1, 20.1, AbilityId.OVERCOAT, AbilityId.MAGIC_GUARD, AbilityId.REGENERATOR, 490, 110, 65, 75, 125, 85, 30, 50, 50, 245, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.DUCKLETT, 5, false, false, false, "Water Bird Pokémon", PokemonType.WATER, PokemonType.FLYING, 0.5, 5.5, AbilityId.KEEN_EYE, AbilityId.BIG_PECKS, AbilityId.HYDRATION, 305, 62, 44, 50, 44, 50, 55, 190, 70, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SWANNA, 5, false, false, false, "White Bird Pokémon", PokemonType.WATER, PokemonType.FLYING, 1.3, 24.2, AbilityId.KEEN_EYE, AbilityId.BIG_PECKS, AbilityId.HYDRATION, 473, 75, 87, 63, 87, 63, 98, 45, 70, 166, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.VANILLITE, 5, false, false, false, "Fresh Snow Pokémon", PokemonType.ICE, null, 0.4, 5.7, AbilityId.ICE_BODY, AbilityId.SNOW_CLOAK, AbilityId.WEAK_ARMOR, 305, 36, 50, 50, 65, 60, 44, 255, 50, 61, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.VANILLISH, 5, false, false, false, "Icy Snow Pokémon", PokemonType.ICE, null, 1.1, 41, AbilityId.ICE_BODY, AbilityId.SNOW_CLOAK, AbilityId.WEAK_ARMOR, 395, 51, 65, 65, 80, 75, 59, 120, 50, 138, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.VANILLUXE, 5, false, false, false, "Snowstorm Pokémon", PokemonType.ICE, null, 1.3, 57.5, AbilityId.ICE_BODY, AbilityId.SNOW_WARNING, AbilityId.WEAK_ARMOR, 535, 71, 95, 85, 110, 95, 79, 45, 50, 268, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.DEERLING, 5, false, false, false, "Season Pokémon", PokemonType.NORMAL, PokemonType.GRASS, 0.6, 19.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 335, 60, 60, 50, 40, 50, 75, 190, 70, 67, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Spring Form", "spring", PokemonType.NORMAL, PokemonType.GRASS, 0.6, 19.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 335, 60, 60, 50, 40, 50, 75, 190, 70, 67, false, null, true), + new PokemonForm("Summer Form", "summer", PokemonType.NORMAL, PokemonType.GRASS, 0.6, 19.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 335, 60, 60, 50, 40, 50, 75, 190, 70, 67, false, null, true), + new PokemonForm("Autumn Form", "autumn", PokemonType.NORMAL, PokemonType.GRASS, 0.6, 19.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 335, 60, 60, 50, 40, 50, 75, 190, 70, 67, false, null, true), + new PokemonForm("Winter Form", "winter", PokemonType.NORMAL, PokemonType.GRASS, 0.6, 19.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 335, 60, 60, 50, 40, 50, 75, 190, 70, 67, false, null, true), + ), + new PokemonSpecies(SpeciesId.SAWSBUCK, 5, false, false, false, "Season Pokémon", PokemonType.NORMAL, PokemonType.GRASS, 1.9, 92.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 475, 80, 100, 70, 60, 70, 95, 75, 70, 166, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Spring Form", "spring", PokemonType.NORMAL, PokemonType.GRASS, 1.9, 92.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 475, 80, 100, 70, 60, 70, 95, 75, 70, 166, false, null, true), + new PokemonForm("Summer Form", "summer", PokemonType.NORMAL, PokemonType.GRASS, 1.9, 92.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 475, 80, 100, 70, 60, 70, 95, 75, 70, 166, false, null, true), + new PokemonForm("Autumn Form", "autumn", PokemonType.NORMAL, PokemonType.GRASS, 1.9, 92.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 475, 80, 100, 70, 60, 70, 95, 75, 70, 166, false, null, true), + new PokemonForm("Winter Form", "winter", PokemonType.NORMAL, PokemonType.GRASS, 1.9, 92.5, AbilityId.CHLOROPHYLL, AbilityId.SAP_SIPPER, AbilityId.SERENE_GRACE, 475, 80, 100, 70, 60, 70, 95, 75, 70, 166, false, null, true), + ), + new PokemonSpecies(SpeciesId.EMOLGA, 5, false, false, false, "Sky Squirrel Pokémon", PokemonType.ELECTRIC, PokemonType.FLYING, 0.4, 5, AbilityId.STATIC, AbilityId.NONE, AbilityId.MOTOR_DRIVE, 428, 55, 75, 60, 75, 60, 103, 200, 50, 150, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.KARRABLAST, 5, false, false, false, "Clamping Pokémon", PokemonType.BUG, null, 0.5, 5.9, AbilityId.SWARM, AbilityId.SHED_SKIN, AbilityId.NO_GUARD, 315, 50, 75, 45, 40, 45, 60, 200, 50, 63, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ESCAVALIER, 5, false, false, false, "Cavalry Pokémon", PokemonType.BUG, PokemonType.STEEL, 1, 33, AbilityId.SWARM, AbilityId.SHELL_ARMOR, AbilityId.OVERCOAT, 495, 70, 135, 105, 60, 105, 20, 75, 50, 173, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.FOONGUS, 5, false, false, false, "Mushroom Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.2, 1, AbilityId.EFFECT_SPORE, AbilityId.NONE, AbilityId.REGENERATOR, 294, 69, 55, 45, 55, 55, 15, 190, 50, 59, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.AMOONGUSS, 5, false, false, false, "Mushroom Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.6, 10.5, AbilityId.EFFECT_SPORE, AbilityId.NONE, AbilityId.REGENERATOR, 464, 114, 85, 70, 85, 80, 30, 75, 50, 162, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.FRILLISH, 5, false, false, false, "Floating Pokémon", PokemonType.WATER, PokemonType.GHOST, 1.2, 33, AbilityId.WATER_ABSORB, AbilityId.CURSED_BODY, AbilityId.DAMP, 335, 55, 40, 50, 65, 85, 40, 190, 50, 67, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.JELLICENT, 5, false, false, false, "Floating Pokémon", PokemonType.WATER, PokemonType.GHOST, 2.2, 135, AbilityId.WATER_ABSORB, AbilityId.CURSED_BODY, AbilityId.DAMP, 480, 100, 60, 70, 85, 105, 60, 60, 50, 168, GrowthRate.MEDIUM_FAST, 50, true), + new PokemonSpecies(SpeciesId.ALOMOMOLA, 5, false, false, false, "Caring Pokémon", PokemonType.WATER, null, 1.2, 31.6, AbilityId.HEALER, AbilityId.HYDRATION, AbilityId.REGENERATOR, 470, 165, 75, 80, 40, 45, 65, 75, 70, 165, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.JOLTIK, 5, false, false, false, "Attaching Pokémon", PokemonType.BUG, PokemonType.ELECTRIC, 0.1, 0.6, AbilityId.COMPOUND_EYES, AbilityId.UNNERVE, AbilityId.SWARM, 319, 50, 47, 50, 57, 50, 65, 190, 50, 64, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GALVANTULA, 5, false, false, false, "EleSpider Pokémon", PokemonType.BUG, PokemonType.ELECTRIC, 0.8, 14.3, AbilityId.COMPOUND_EYES, AbilityId.UNNERVE, AbilityId.SWARM, 472, 70, 77, 60, 97, 60, 108, 75, 50, 165, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.FERROSEED, 5, false, false, false, "Thorn Seed Pokémon", PokemonType.GRASS, PokemonType.STEEL, 0.6, 18.8, AbilityId.IRON_BARBS, AbilityId.NONE, AbilityId.ANTICIPATION, 305, 44, 50, 91, 24, 86, 10, 255, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.FERROTHORN, 5, false, false, false, "Thorn Pod Pokémon", PokemonType.GRASS, PokemonType.STEEL, 1, 110, AbilityId.IRON_BARBS, AbilityId.NONE, AbilityId.ANTICIPATION, 489, 74, 94, 131, 54, 116, 20, 90, 50, 171, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.KLINK, 5, false, false, false, "Gear Pokémon", PokemonType.STEEL, null, 0.3, 21, AbilityId.PLUS, AbilityId.MINUS, AbilityId.CLEAR_BODY, 300, 40, 55, 70, 45, 60, 30, 130, 50, 60, GrowthRate.MEDIUM_SLOW, null, false), + new PokemonSpecies(SpeciesId.KLANG, 5, false, false, false, "Gear Pokémon", PokemonType.STEEL, null, 0.6, 51, AbilityId.PLUS, AbilityId.MINUS, AbilityId.CLEAR_BODY, 440, 60, 80, 95, 70, 85, 50, 60, 50, 154, GrowthRate.MEDIUM_SLOW, null, false), + new PokemonSpecies(SpeciesId.KLINKLANG, 5, false, false, false, "Gear Pokémon", PokemonType.STEEL, null, 0.6, 81, AbilityId.PLUS, AbilityId.MINUS, AbilityId.CLEAR_BODY, 520, 60, 100, 115, 70, 85, 90, 30, 50, 260, GrowthRate.MEDIUM_SLOW, null, false), + new PokemonSpecies(SpeciesId.TYNAMO, 5, false, false, false, "EleFish Pokémon", PokemonType.ELECTRIC, null, 0.2, 0.3, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 275, 35, 55, 40, 45, 40, 60, 190, 70, 55, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.EELEKTRIK, 5, false, false, false, "EleFish Pokémon", PokemonType.ELECTRIC, null, 1.2, 22, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 405, 65, 85, 70, 75, 70, 40, 60, 70, 142, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.EELEKTROSS, 5, false, false, false, "EleFish Pokémon", PokemonType.ELECTRIC, null, 2.1, 80.5, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 515, 85, 115, 80, 105, 80, 50, 30, 70, 258, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.ELGYEM, 5, false, false, false, "Cerebral Pokémon", PokemonType.PSYCHIC, null, 0.5, 9, AbilityId.TELEPATHY, AbilityId.SYNCHRONIZE, AbilityId.ANALYTIC, 335, 55, 55, 55, 85, 55, 30, 255, 50, 67, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BEHEEYEM, 5, false, false, false, "Cerebral Pokémon", PokemonType.PSYCHIC, null, 1, 34.5, AbilityId.TELEPATHY, AbilityId.SYNCHRONIZE, AbilityId.ANALYTIC, 485, 75, 75, 75, 125, 95, 40, 90, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.LITWICK, 5, false, false, false, "Candle Pokémon", PokemonType.GHOST, PokemonType.FIRE, 0.3, 3.1, AbilityId.FLASH_FIRE, AbilityId.FLAME_BODY, AbilityId.INFILTRATOR, 275, 50, 30, 55, 65, 55, 20, 190, 50, 55, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.LAMPENT, 5, false, false, false, "Lamp Pokémon", PokemonType.GHOST, PokemonType.FIRE, 0.6, 13, AbilityId.FLASH_FIRE, AbilityId.FLAME_BODY, AbilityId.INFILTRATOR, 370, 60, 40, 60, 95, 60, 55, 90, 50, 130, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.CHANDELURE, 5, false, false, false, "Luring Pokémon", PokemonType.GHOST, PokemonType.FIRE, 1, 34.3, AbilityId.FLASH_FIRE, AbilityId.FLAME_BODY, AbilityId.INFILTRATOR, 520, 60, 55, 90, 145, 90, 80, 45, 50, 260, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.AXEW, 5, false, false, false, "Tusk Pokémon", PokemonType.DRAGON, null, 0.6, 18, AbilityId.RIVALRY, AbilityId.MOLD_BREAKER, AbilityId.UNNERVE, 320, 46, 87, 60, 30, 40, 57, 75, 35, 64, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.FRAXURE, 5, false, false, false, "Axe Jaw Pokémon", PokemonType.DRAGON, null, 1, 36, AbilityId.RIVALRY, AbilityId.MOLD_BREAKER, AbilityId.UNNERVE, 410, 66, 117, 70, 40, 50, 67, 60, 35, 144, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.HAXORUS, 5, false, false, false, "Axe Jaw Pokémon", PokemonType.DRAGON, null, 1.8, 105.5, AbilityId.RIVALRY, AbilityId.MOLD_BREAKER, AbilityId.UNNERVE, 540, 76, 147, 90, 60, 70, 97, 45, 35, 270, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.CUBCHOO, 5, false, false, false, "Chill Pokémon", PokemonType.ICE, null, 0.5, 8.5, AbilityId.SNOW_CLOAK, AbilityId.SLUSH_RUSH, AbilityId.RATTLED, 305, 55, 70, 40, 60, 40, 40, 120, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BEARTIC, 5, false, false, false, "Freezing Pokémon", PokemonType.ICE, null, 2.6, 260, AbilityId.SNOW_CLOAK, AbilityId.SLUSH_RUSH, AbilityId.SWIFT_SWIM, 505, 95, 130, 80, 70, 80, 50, 60, 50, 177, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CRYOGONAL, 5, false, false, false, "Crystallizing Pokémon", PokemonType.ICE, null, 1.1, 148, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 515, 80, 50, 50, 95, 135, 105, 25, 50, 180, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.SHELMET, 5, false, false, false, "Snail Pokémon", PokemonType.BUG, null, 0.4, 7.7, AbilityId.HYDRATION, AbilityId.SHELL_ARMOR, AbilityId.OVERCOAT, 305, 50, 40, 85, 40, 65, 25, 200, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ACCELGOR, 5, false, false, false, "Shell Out Pokémon", PokemonType.BUG, null, 0.8, 25.3, AbilityId.HYDRATION, AbilityId.STICKY_HOLD, AbilityId.UNBURDEN, 495, 80, 70, 40, 100, 60, 145, 75, 50, 173, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.STUNFISK, 5, false, false, false, "Trap Pokémon", PokemonType.GROUND, PokemonType.ELECTRIC, 0.7, 11, AbilityId.STATIC, AbilityId.LIMBER, AbilityId.SAND_VEIL, 471, 109, 66, 84, 81, 99, 32, 75, 70, 165, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MIENFOO, 5, false, false, false, "Martial Arts Pokémon", PokemonType.FIGHTING, null, 0.9, 20, AbilityId.INNER_FOCUS, AbilityId.REGENERATOR, AbilityId.RECKLESS, 350, 45, 85, 50, 55, 50, 65, 180, 50, 70, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.MIENSHAO, 5, false, false, false, "Martial Arts Pokémon", PokemonType.FIGHTING, null, 1.4, 35.5, AbilityId.INNER_FOCUS, AbilityId.REGENERATOR, AbilityId.RECKLESS, 510, 65, 125, 60, 95, 60, 105, 45, 50, 179, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.DRUDDIGON, 5, false, false, false, "Cave Pokémon", PokemonType.DRAGON, null, 1.6, 139, AbilityId.ROUGH_SKIN, AbilityId.SHEER_FORCE, AbilityId.MOLD_BREAKER, 485, 77, 120, 90, 60, 90, 48, 45, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GOLETT, 5, false, false, false, "Automaton Pokémon", PokemonType.GROUND, PokemonType.GHOST, 1, 92, AbilityId.IRON_FIST, AbilityId.KLUTZ, AbilityId.NO_GUARD, 303, 59, 74, 50, 35, 50, 35, 190, 50, 61, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.GOLURK, 5, false, false, false, "Automaton Pokémon", PokemonType.GROUND, PokemonType.GHOST, 2.8, 330, AbilityId.IRON_FIST, AbilityId.KLUTZ, AbilityId.NO_GUARD, 483, 89, 124, 80, 55, 80, 55, 90, 50, 169, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.PAWNIARD, 5, false, false, false, "Sharp Blade Pokémon", PokemonType.DARK, PokemonType.STEEL, 0.5, 10.2, AbilityId.DEFIANT, AbilityId.INNER_FOCUS, AbilityId.PRESSURE, 340, 45, 85, 70, 40, 40, 60, 120, 35, 68, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BISHARP, 5, false, false, false, "Sword Blade Pokémon", PokemonType.DARK, PokemonType.STEEL, 1.6, 70, AbilityId.DEFIANT, AbilityId.INNER_FOCUS, AbilityId.PRESSURE, 490, 65, 125, 100, 60, 70, 70, 45, 35, 172, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BOUFFALANT, 5, false, false, false, "Bash Buffalo Pokémon", PokemonType.NORMAL, null, 1.6, 94.6, AbilityId.RECKLESS, AbilityId.SAP_SIPPER, AbilityId.SOUNDPROOF, 490, 95, 110, 95, 40, 95, 55, 45, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.RUFFLET, 5, false, false, false, "Eaglet Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.5, 10.5, AbilityId.KEEN_EYE, AbilityId.SHEER_FORCE, AbilityId.HUSTLE, 350, 70, 83, 50, 37, 50, 60, 190, 50, 70, GrowthRate.SLOW, 100, false), + new PokemonSpecies(SpeciesId.BRAVIARY, 5, false, false, false, "Valiant Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.5, 41, AbilityId.KEEN_EYE, AbilityId.SHEER_FORCE, AbilityId.DEFIANT, 510, 100, 123, 75, 57, 75, 80, 60, 50, 179, GrowthRate.SLOW, 100, false), + new PokemonSpecies(SpeciesId.VULLABY, 5, false, false, false, "Diapered Pokémon", PokemonType.DARK, PokemonType.FLYING, 0.5, 9, AbilityId.BIG_PECKS, AbilityId.OVERCOAT, AbilityId.WEAK_ARMOR, 370, 70, 55, 75, 45, 65, 60, 190, 35, 74, GrowthRate.SLOW, 0, false), + new PokemonSpecies(SpeciesId.MANDIBUZZ, 5, false, false, false, "Bone Vulture Pokémon", PokemonType.DARK, PokemonType.FLYING, 1.2, 39.5, AbilityId.BIG_PECKS, AbilityId.OVERCOAT, AbilityId.WEAK_ARMOR, 510, 110, 65, 105, 55, 95, 80, 60, 35, 179, GrowthRate.SLOW, 0, false), + new PokemonSpecies(SpeciesId.HEATMOR, 5, false, false, false, "Anteater Pokémon", PokemonType.FIRE, null, 1.4, 58, AbilityId.GLUTTONY, AbilityId.FLASH_FIRE, AbilityId.WHITE_SMOKE, 484, 85, 97, 66, 105, 66, 65, 90, 50, 169, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DURANT, 5, false, false, false, "Iron Ant Pokémon", PokemonType.BUG, PokemonType.STEEL, 0.3, 33, AbilityId.SWARM, AbilityId.HUSTLE, AbilityId.TRUANT, 484, 58, 109, 112, 48, 48, 109, 90, 50, 169, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DEINO, 5, false, false, false, "Irate Pokémon", PokemonType.DARK, PokemonType.DRAGON, 0.8, 17.3, AbilityId.HUSTLE, AbilityId.NONE, AbilityId.NONE, 300, 52, 65, 50, 45, 50, 38, 45, 35, 60, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.ZWEILOUS, 5, false, false, false, "Hostile Pokémon", PokemonType.DARK, PokemonType.DRAGON, 1.4, 50, AbilityId.HUSTLE, AbilityId.NONE, AbilityId.NONE, 420, 72, 85, 70, 65, 70, 58, 45, 35, 147, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.HYDREIGON, 5, false, false, false, "Brutal Pokémon", PokemonType.DARK, PokemonType.DRAGON, 1.8, 160, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 600, 92, 105, 90, 125, 90, 98, 45, 35, 300, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.LARVESTA, 5, false, false, false, "Torch Pokémon", PokemonType.BUG, PokemonType.FIRE, 1.1, 28.8, AbilityId.FLAME_BODY, AbilityId.NONE, AbilityId.SWARM, 360, 55, 85, 55, 50, 55, 60, 45, 50, 72, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.VOLCARONA, 5, false, false, false, "Sun Pokémon", PokemonType.BUG, PokemonType.FIRE, 1.6, 46, AbilityId.FLAME_BODY, AbilityId.NONE, AbilityId.SWARM, 550, 85, 60, 65, 135, 105, 100, 15, 50, 275, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.COBALION, 5, true, false, false, "Iron Will Pokémon", PokemonType.STEEL, PokemonType.FIGHTING, 2.1, 250, AbilityId.JUSTIFIED, AbilityId.NONE, AbilityId.NONE, 580, 91, 90, 129, 90, 72, 108, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.TERRAKION, 5, true, false, false, "Cavern Pokémon", PokemonType.ROCK, PokemonType.FIGHTING, 1.9, 260, AbilityId.JUSTIFIED, AbilityId.NONE, AbilityId.NONE, 580, 91, 129, 90, 72, 90, 108, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.VIRIZION, 5, true, false, false, "Grassland Pokémon", PokemonType.GRASS, PokemonType.FIGHTING, 2, 200, AbilityId.JUSTIFIED, AbilityId.NONE, AbilityId.NONE, 580, 91, 90, 72, 90, 129, 108, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.TORNADUS, 5, true, false, false, "Cyclone Pokémon", PokemonType.FLYING, null, 1.5, 63, AbilityId.PRANKSTER, AbilityId.NONE, AbilityId.DEFIANT, 580, 79, 115, 70, 125, 80, 111, 3, 90, 290, GrowthRate.SLOW, 100, false, true, + new PokemonForm("Incarnate Forme", "incarnate", PokemonType.FLYING, null, 1.5, 63, AbilityId.PRANKSTER, AbilityId.NONE, AbilityId.DEFIANT, 580, 79, 115, 70, 125, 80, 111, 3, 90, 290, false, null, true), + new PokemonForm("Therian Forme", "therian", PokemonType.FLYING, null, 1.4, 63, AbilityId.REGENERATOR, AbilityId.NONE, AbilityId.REGENERATOR, 580, 79, 100, 80, 110, 90, 121, 3, 90, 290), + ), + new PokemonSpecies(SpeciesId.THUNDURUS, 5, true, false, false, "Bolt Strike Pokémon", PokemonType.ELECTRIC, PokemonType.FLYING, 1.5, 61, AbilityId.PRANKSTER, AbilityId.NONE, AbilityId.DEFIANT, 580, 79, 115, 70, 125, 80, 111, 3, 90, 290, GrowthRate.SLOW, 100, false, true, + new PokemonForm("Incarnate Forme", "incarnate", PokemonType.ELECTRIC, PokemonType.FLYING, 1.5, 61, AbilityId.PRANKSTER, AbilityId.NONE, AbilityId.DEFIANT, 580, 79, 115, 70, 125, 80, 111, 3, 90, 290, false, null, true), + new PokemonForm("Therian Forme", "therian", PokemonType.ELECTRIC, PokemonType.FLYING, 3, 61, AbilityId.VOLT_ABSORB, AbilityId.NONE, AbilityId.VOLT_ABSORB, 580, 79, 105, 70, 145, 80, 101, 3, 90, 290), + ), + new PokemonSpecies(SpeciesId.RESHIRAM, 5, false, true, false, "Vast White Pokémon", PokemonType.DRAGON, PokemonType.FIRE, 3.2, 330, AbilityId.TURBOBLAZE, AbilityId.NONE, AbilityId.NONE, 680, 100, 120, 100, 150, 120, 90, 3, 0, 340, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.ZEKROM, 5, false, true, false, "Deep Black Pokémon", PokemonType.DRAGON, PokemonType.ELECTRIC, 2.9, 345, AbilityId.TERAVOLT, AbilityId.NONE, AbilityId.NONE, 680, 100, 150, 120, 120, 100, 90, 3, 0, 340, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.LANDORUS, 5, true, false, false, "Abundance Pokémon", PokemonType.GROUND, PokemonType.FLYING, 1.5, 68, AbilityId.SAND_FORCE, AbilityId.NONE, AbilityId.SHEER_FORCE, 600, 89, 125, 90, 115, 80, 101, 3, 90, 300, GrowthRate.SLOW, 100, false, true, + new PokemonForm("Incarnate Forme", "incarnate", PokemonType.GROUND, PokemonType.FLYING, 1.5, 68, AbilityId.SAND_FORCE, AbilityId.NONE, AbilityId.SHEER_FORCE, 600, 89, 125, 90, 115, 80, 101, 3, 90, 300, false, null, true), + new PokemonForm("Therian Forme", "therian", PokemonType.GROUND, PokemonType.FLYING, 1.3, 68, AbilityId.INTIMIDATE, AbilityId.NONE, AbilityId.INTIMIDATE, 600, 89, 145, 90, 105, 80, 91, 3, 90, 300), + ), + new PokemonSpecies(SpeciesId.KYUREM, 5, false, true, false, "Boundary Pokémon", PokemonType.DRAGON, PokemonType.ICE, 3, 325, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 660, 125, 130, 90, 130, 90, 95, 3, 0, 330, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.ICE, 3, 325, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 660, 125, 130, 90, 130, 90, 95, 3, 0, 330, false, null, true), + new PokemonForm("Black", "black", PokemonType.DRAGON, PokemonType.ICE, 3.3, 325, AbilityId.TERAVOLT, AbilityId.NONE, AbilityId.NONE, 700, 125, 170, 100, 120, 90, 95, 3, 0, 350), + new PokemonForm("White", "white", PokemonType.DRAGON, PokemonType.ICE, 3.6, 325, AbilityId.TURBOBLAZE, AbilityId.NONE, AbilityId.NONE, 700, 125, 120, 90, 170, 100, 95, 3, 0, 350), + ), + new PokemonSpecies(SpeciesId.KELDEO, 5, false, false, true, "Colt Pokémon", PokemonType.WATER, PokemonType.FIGHTING, 1.4, 48.5, AbilityId.JUSTIFIED, AbilityId.NONE, AbilityId.NONE, 580, 91, 72, 90, 129, 90, 108, 3, 35, 290, GrowthRate.SLOW, null, false, true, + new PokemonForm("Ordinary Form", "ordinary", PokemonType.WATER, PokemonType.FIGHTING, 1.4, 48.5, AbilityId.JUSTIFIED, AbilityId.NONE, AbilityId.NONE, 580, 91, 72, 90, 129, 90, 108, 3, 35, 290, false, null, true), + new PokemonForm("Resolute", "resolute", PokemonType.WATER, PokemonType.FIGHTING, 1.4, 48.5, AbilityId.JUSTIFIED, AbilityId.NONE, AbilityId.NONE, 580, 91, 72, 90, 129, 90, 108, 3, 35, 290), + ), + new PokemonSpecies(SpeciesId.MELOETTA, 5, false, false, true, "Melody Pokémon", PokemonType.NORMAL, PokemonType.PSYCHIC, 0.6, 6.5, AbilityId.SERENE_GRACE, AbilityId.NONE, AbilityId.NONE, 600, 100, 77, 77, 128, 128, 90, 3, 100, 300, GrowthRate.SLOW, null, false, true, + new PokemonForm("Aria Forme", "aria", PokemonType.NORMAL, PokemonType.PSYCHIC, 0.6, 6.5, AbilityId.SERENE_GRACE, AbilityId.NONE, AbilityId.NONE, 600, 100, 77, 77, 128, 128, 90, 3, 100, 300, false, null, true), + new PokemonForm("Pirouette Forme", "pirouette", PokemonType.NORMAL, PokemonType.FIGHTING, 0.6, 6.5, AbilityId.SERENE_GRACE, AbilityId.NONE, AbilityId.NONE, 600, 100, 128, 90, 77, 77, 128, 3, 100, 300, false, null, true), + ), + new PokemonSpecies(SpeciesId.GENESECT, 5, false, false, true, "Paleozoic Pokémon", PokemonType.BUG, PokemonType.STEEL, 1.5, 82.5, AbilityId.DOWNLOAD, AbilityId.NONE, AbilityId.NONE, 600, 71, 120, 95, 120, 95, 99, 3, 0, 300, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal", "", PokemonType.BUG, PokemonType.STEEL, 1.5, 82.5, AbilityId.DOWNLOAD, AbilityId.NONE, AbilityId.NONE, 600, 71, 120, 95, 120, 95, 99, 3, 0, 300, false, null, true), + new PokemonForm("Shock Drive", "shock", PokemonType.BUG, PokemonType.STEEL, 1.5, 82.5, AbilityId.DOWNLOAD, AbilityId.NONE, AbilityId.NONE, 600, 71, 120, 95, 120, 95, 99, 3, 0, 300), + new PokemonForm("Burn Drive", "burn", PokemonType.BUG, PokemonType.STEEL, 1.5, 82.5, AbilityId.DOWNLOAD, AbilityId.NONE, AbilityId.NONE, 600, 71, 120, 95, 120, 95, 99, 3, 0, 300), + new PokemonForm("Chill Drive", "chill", PokemonType.BUG, PokemonType.STEEL, 1.5, 82.5, AbilityId.DOWNLOAD, AbilityId.NONE, AbilityId.NONE, 600, 71, 120, 95, 120, 95, 99, 3, 0, 300), + new PokemonForm("Douse Drive", "douse", PokemonType.BUG, PokemonType.STEEL, 1.5, 82.5, AbilityId.DOWNLOAD, AbilityId.NONE, AbilityId.NONE, 600, 71, 120, 95, 120, 95, 99, 3, 0, 300), + ), + new PokemonSpecies(SpeciesId.CHESPIN, 6, false, false, false, "Spiny Nut Pokémon", PokemonType.GRASS, null, 0.4, 9, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.BULLETPROOF, 313, 56, 61, 65, 48, 45, 38, 45, 70, 63, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.QUILLADIN, 6, false, false, false, "Spiny Armor Pokémon", PokemonType.GRASS, null, 0.7, 29, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.BULLETPROOF, 405, 61, 78, 95, 56, 58, 57, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.CHESNAUGHT, 6, false, false, false, "Spiny Armor Pokémon", PokemonType.GRASS, PokemonType.FIGHTING, 1.6, 90, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.BULLETPROOF, 530, 88, 107, 122, 74, 75, 64, 45, 70, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.FENNEKIN, 6, false, false, false, "Fox Pokémon", PokemonType.FIRE, null, 0.4, 9.4, AbilityId.BLAZE, AbilityId.NONE, AbilityId.MAGICIAN, 307, 40, 45, 40, 62, 60, 60, 45, 70, 61, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.BRAIXEN, 6, false, false, false, "Fox Pokémon", PokemonType.FIRE, null, 1, 14.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.MAGICIAN, 409, 59, 59, 58, 90, 70, 73, 45, 70, 143, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.DELPHOX, 6, false, false, false, "Fox Pokémon", PokemonType.FIRE, PokemonType.PSYCHIC, 1.5, 39, AbilityId.BLAZE, AbilityId.NONE, AbilityId.MAGICIAN, 534, 75, 69, 72, 114, 100, 104, 45, 70, 267, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.FROAKIE, 6, false, false, false, "Bubble Frog Pokémon", PokemonType.WATER, null, 0.3, 7, AbilityId.TORRENT, AbilityId.NONE, AbilityId.PROTEAN, 314, 41, 56, 40, 62, 44, 71, 45, 70, 63, GrowthRate.MEDIUM_SLOW, 87.5, false, false, + new PokemonForm("Normal", "", PokemonType.WATER, null, 0.3, 7, AbilityId.TORRENT, AbilityId.NONE, AbilityId.PROTEAN, 314, 41, 56, 40, 62, 44, 71, 45, 70, 63, false, null, true), + new PokemonForm("Battle Bond", "battle-bond", PokemonType.WATER, null, 0.3, 7, AbilityId.TORRENT, AbilityId.NONE, AbilityId.TORRENT, 314, 41, 56, 40, 62, 44, 71, 45, 70, 63, false, "", true), + ), + new PokemonSpecies(SpeciesId.FROGADIER, 6, false, false, false, "Bubble Frog Pokémon", PokemonType.WATER, null, 0.6, 10.9, AbilityId.TORRENT, AbilityId.NONE, AbilityId.PROTEAN, 405, 54, 63, 52, 83, 56, 97, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false, false, + new PokemonForm("Normal", "", PokemonType.WATER, null, 0.6, 10.9, AbilityId.TORRENT, AbilityId.NONE, AbilityId.PROTEAN, 405, 54, 63, 52, 83, 56, 97, 45, 70, 142, false, null, true), + new PokemonForm("Battle Bond", "battle-bond", PokemonType.WATER, null, 0.6, 10.9, AbilityId.TORRENT, AbilityId.NONE, AbilityId.NONE, 405, 54, 63, 52, 83, 56, 97, 45, 70, 142, false, "", true), + ), + new PokemonSpecies(SpeciesId.GRENINJA, 6, false, false, false, "Ninja Pokémon", PokemonType.WATER, PokemonType.DARK, 1.5, 40, AbilityId.TORRENT, AbilityId.NONE, AbilityId.PROTEAN, 530, 72, 95, 67, 103, 71, 122, 45, 70, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, false, + new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.DARK, 1.5, 40, AbilityId.TORRENT, AbilityId.NONE, AbilityId.PROTEAN, 530, 72, 95, 67, 103, 71, 122, 45, 70, 265, false, null, true), + new PokemonForm("Battle Bond", "battle-bond", PokemonType.WATER, PokemonType.DARK, 1.5, 40, AbilityId.BATTLE_BOND, AbilityId.NONE, AbilityId.BATTLE_BOND, 530, 72, 95, 67, 103, 71, 122, 45, 70, 265, false, "", true), + new PokemonForm("Ash", "ash", PokemonType.WATER, PokemonType.DARK, 1.5, 40, AbilityId.BATTLE_BOND, AbilityId.NONE, AbilityId.NONE, 640, 72, 145, 67, 153, 71, 132, 45, 70, 265), + ), + new PokemonSpecies(SpeciesId.BUNNELBY, 6, false, false, false, "Digging Pokémon", PokemonType.NORMAL, null, 0.4, 5, AbilityId.PICKUP, AbilityId.CHEEK_POUCH, AbilityId.HUGE_POWER, 237, 38, 36, 38, 32, 36, 57, 255, 50, 47, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DIGGERSBY, 6, false, false, false, "Digging Pokémon", PokemonType.NORMAL, PokemonType.GROUND, 1, 42.4, AbilityId.PICKUP, AbilityId.CHEEK_POUCH, AbilityId.HUGE_POWER, 423, 85, 56, 77, 50, 77, 78, 127, 50, 148, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.FLETCHLING, 6, false, false, false, "Tiny Robin Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.3, 1.7, AbilityId.BIG_PECKS, AbilityId.NONE, AbilityId.GALE_WINGS, 278, 45, 50, 43, 40, 38, 62, 255, 50, 56, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.FLETCHINDER, 6, false, false, false, "Ember Pokémon", PokemonType.FIRE, PokemonType.FLYING, 0.7, 16, AbilityId.FLAME_BODY, AbilityId.NONE, AbilityId.GALE_WINGS, 382, 62, 73, 55, 56, 52, 84, 120, 50, 134, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.TALONFLAME, 6, false, false, false, "Scorching Pokémon", PokemonType.FIRE, PokemonType.FLYING, 1.2, 24.5, AbilityId.FLAME_BODY, AbilityId.NONE, AbilityId.GALE_WINGS, 499, 78, 81, 71, 74, 69, 126, 45, 50, 175, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.SCATTERBUG, 6, false, false, false, "Scatterdust Pokémon", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Meadow Pattern", "meadow", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Icy Snow Pattern", "icy-snow", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Polar Pattern", "polar", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Tundra Pattern", "tundra", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Continental Pattern", "continental", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Garden Pattern", "garden", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Elegant Pattern", "elegant", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Modern Pattern", "modern", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Marine Pattern", "marine", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Archipelago Pattern", "archipelago", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("High Plains Pattern", "high-plains", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Sandstorm Pattern", "sandstorm", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("River Pattern", "river", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Monsoon Pattern", "monsoon", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Savanna Pattern", "savanna", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Sun Pattern", "sun", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Ocean Pattern", "ocean", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Jungle Pattern", "jungle", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Fancy Pattern", "fancy", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + new PokemonForm("Poké Ball Pattern", "poke-ball", PokemonType.BUG, null, 0.3, 2.5, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 200, 38, 35, 40, 27, 25, 35, 255, 70, 40, false, "", true), + ), + new PokemonSpecies(SpeciesId.SPEWPA, 6, false, false, false, "Scatterdust Pokémon", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.SHED_SKIN, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Meadow Pattern", "meadow", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Icy Snow Pattern", "icy-snow", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Polar Pattern", "polar", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Tundra Pattern", "tundra", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Continental Pattern", "continental", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Garden Pattern", "garden", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Elegant Pattern", "elegant", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Modern Pattern", "modern", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Marine Pattern", "marine", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Archipelago Pattern", "archipelago", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("High Plains Pattern", "high-plains", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Sandstorm Pattern", "sandstorm", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("River Pattern", "river", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Monsoon Pattern", "monsoon", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Savanna Pattern", "savanna", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Sun Pattern", "sun", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Ocean Pattern", "ocean", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Jungle Pattern", "jungle", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Fancy Pattern", "fancy", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + new PokemonForm("Poké Ball Pattern", "poke-ball", PokemonType.BUG, null, 0.3, 8.4, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.FRIEND_GUARD, 213, 45, 22, 60, 27, 30, 29, 120, 70, 75, false, "", true), + ), + new PokemonSpecies(SpeciesId.VIVILLON, 6, false, false, false, "Scale Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Meadow Pattern", "meadow", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Icy Snow Pattern", "icy-snow", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Polar Pattern", "polar", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Tundra Pattern", "tundra", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Continental Pattern", "continental", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Garden Pattern", "garden", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Elegant Pattern", "elegant", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Modern Pattern", "modern", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Marine Pattern", "marine", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Archipelago Pattern", "archipelago", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("High Plains Pattern", "high-plains", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Sandstorm Pattern", "sandstorm", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("River Pattern", "river", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Monsoon Pattern", "monsoon", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Savanna Pattern", "savanna", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Sun Pattern", "sun", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Ocean Pattern", "ocean", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Jungle Pattern", "jungle", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Fancy Pattern", "fancy", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + new PokemonForm("Poké Ball Pattern", "poke-ball", PokemonType.BUG, PokemonType.FLYING, 1.2, 17, AbilityId.SHIELD_DUST, AbilityId.COMPOUND_EYES, AbilityId.FRIEND_GUARD, 411, 80, 52, 50, 90, 50, 89, 45, 70, 206, false, null, true), + ), + new PokemonSpecies(SpeciesId.LITLEO, 6, false, false, false, "Lion Cub Pokémon", PokemonType.FIRE, PokemonType.NORMAL, 0.6, 13.5, AbilityId.RIVALRY, AbilityId.UNNERVE, AbilityId.MOXIE, 369, 62, 50, 58, 73, 54, 72, 220, 70, 74, GrowthRate.MEDIUM_SLOW, 12.5, false), + new PokemonSpecies(SpeciesId.PYROAR, 6, false, false, false, "Royal Pokémon", PokemonType.FIRE, PokemonType.NORMAL, 1.5, 81.5, AbilityId.RIVALRY, AbilityId.UNNERVE, AbilityId.MOXIE, 507, 86, 68, 72, 109, 66, 106, 65, 70, 177, GrowthRate.MEDIUM_SLOW, 12.5, true), + new PokemonSpecies(SpeciesId.FLABEBE, 6, false, false, false, "Single Bloom Pokémon", PokemonType.FAIRY, null, 0.1, 0.1, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 303, 44, 38, 39, 61, 79, 42, 225, 70, 61, GrowthRate.MEDIUM_FAST, 0, false, false, + new PokemonForm("Red Flower", "red", PokemonType.FAIRY, null, 0.1, 0.1, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 303, 44, 38, 39, 61, 79, 42, 225, 70, 61, false, null, true), + new PokemonForm("Yellow Flower", "yellow", PokemonType.FAIRY, null, 0.1, 0.1, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 303, 44, 38, 39, 61, 79, 42, 225, 70, 61, false, null, true), + new PokemonForm("Orange Flower", "orange", PokemonType.FAIRY, null, 0.1, 0.1, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 303, 44, 38, 39, 61, 79, 42, 225, 70, 61, false, null, true), + new PokemonForm("Blue Flower", "blue", PokemonType.FAIRY, null, 0.1, 0.1, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 303, 44, 38, 39, 61, 79, 42, 225, 70, 61, false, null, true), + new PokemonForm("White Flower", "white", PokemonType.FAIRY, null, 0.1, 0.1, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 303, 44, 38, 39, 61, 79, 42, 225, 70, 61, false, null, true), + ), + new PokemonSpecies(SpeciesId.FLOETTE, 6, false, false, false, "Single Bloom Pokémon", PokemonType.FAIRY, null, 0.2, 0.9, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 371, 54, 45, 47, 75, 98, 52, 120, 70, 130, GrowthRate.MEDIUM_FAST, 0, false, false, + new PokemonForm("Red Flower", "red", PokemonType.FAIRY, null, 0.2, 0.9, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 371, 54, 45, 47, 75, 98, 52, 120, 70, 130, false, null, true), + new PokemonForm("Yellow Flower", "yellow", PokemonType.FAIRY, null, 0.2, 0.9, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 371, 54, 45, 47, 75, 98, 52, 120, 70, 130, false, null, true), + new PokemonForm("Orange Flower", "orange", PokemonType.FAIRY, null, 0.2, 0.9, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 371, 54, 45, 47, 75, 98, 52, 120, 70, 130, false, null, true), + new PokemonForm("Blue Flower", "blue", PokemonType.FAIRY, null, 0.2, 0.9, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 371, 54, 45, 47, 75, 98, 52, 120, 70, 130, false, null, true), + new PokemonForm("White Flower", "white", PokemonType.FAIRY, null, 0.2, 0.9, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 371, 54, 45, 47, 75, 98, 52, 120, 70, 130, false, null, true), + ), + new PokemonSpecies(SpeciesId.FLORGES, 6, false, false, false, "Garden Pokémon", PokemonType.FAIRY, null, 1.1, 10, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, GrowthRate.MEDIUM_FAST, 0, false, false, + new PokemonForm("Red Flower", "red", PokemonType.FAIRY, null, 1.1, 10, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, false, null, true), + new PokemonForm("Yellow Flower", "yellow", PokemonType.FAIRY, null, 1.1, 10, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, false, null, true), + new PokemonForm("Orange Flower", "orange", PokemonType.FAIRY, null, 1.1, 10, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, false, null, true), + new PokemonForm("Blue Flower", "blue", PokemonType.FAIRY, null, 1.1, 10, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, false, null, true), + new PokemonForm("White Flower", "white", PokemonType.FAIRY, null, 1.1, 10, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 552, 78, 65, 68, 112, 154, 75, 45, 70, 276, false, null, true), + ), + new PokemonSpecies(SpeciesId.SKIDDO, 6, false, false, false, "Mount Pokémon", PokemonType.GRASS, null, 0.9, 31, AbilityId.SAP_SIPPER, AbilityId.NONE, AbilityId.GRASS_PELT, 350, 66, 65, 48, 62, 57, 52, 200, 70, 70, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GOGOAT, 6, false, false, false, "Mount Pokémon", PokemonType.GRASS, null, 1.7, 91, AbilityId.SAP_SIPPER, AbilityId.NONE, AbilityId.GRASS_PELT, 531, 123, 100, 62, 97, 81, 68, 45, 70, 186, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PANCHAM, 6, false, false, false, "Playful Pokémon", PokemonType.FIGHTING, null, 0.6, 8, AbilityId.IRON_FIST, AbilityId.MOLD_BREAKER, AbilityId.SCRAPPY, 348, 67, 82, 62, 46, 48, 43, 220, 50, 70, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PANGORO, 6, false, false, false, "Daunting Pokémon", PokemonType.FIGHTING, PokemonType.DARK, 2.1, 136, AbilityId.IRON_FIST, AbilityId.MOLD_BREAKER, AbilityId.SCRAPPY, 495, 95, 124, 78, 69, 71, 58, 65, 50, 173, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.FURFROU, 6, false, false, false, "Poodle Pokémon", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Natural Form", "", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), + new PokemonForm("Heart Trim", "heart", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), + new PokemonForm("Star Trim", "star", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), + new PokemonForm("Diamond Trim", "diamond", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), + new PokemonForm("Debutante Trim", "debutante", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), + new PokemonForm("Matron Trim", "matron", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), + new PokemonForm("Dandy Trim", "dandy", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), + new PokemonForm("La Reine Trim", "la-reine", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), + new PokemonForm("Kabuki Trim", "kabuki", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), + new PokemonForm("Pharaoh Trim", "pharaoh", PokemonType.NORMAL, null, 1.2, 28, AbilityId.FUR_COAT, AbilityId.NONE, AbilityId.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, null, true), + ), + new PokemonSpecies(SpeciesId.ESPURR, 6, false, false, false, "Restraint Pokémon", PokemonType.PSYCHIC, null, 0.3, 3.5, AbilityId.KEEN_EYE, AbilityId.INFILTRATOR, AbilityId.OWN_TEMPO, 355, 62, 48, 54, 63, 60, 68, 190, 50, 71, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MEOWSTIC, 6, false, false, false, "Constraint Pokémon", PokemonType.PSYCHIC, null, 0.6, 8.5, AbilityId.KEEN_EYE, AbilityId.INFILTRATOR, AbilityId.PRANKSTER, 466, 74, 48, 76, 83, 81, 104, 75, 50, 163, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Male", "male", PokemonType.PSYCHIC, null, 0.6, 8.5, AbilityId.KEEN_EYE, AbilityId.INFILTRATOR, AbilityId.PRANKSTER, 466, 74, 48, 76, 83, 81, 104, 75, 50, 163, false, "", true), + new PokemonForm("Female", "female", PokemonType.PSYCHIC, null, 0.6, 8.5, AbilityId.KEEN_EYE, AbilityId.INFILTRATOR, AbilityId.COMPETITIVE, 466, 74, 48, 76, 83, 81, 104, 75, 50, 163, false, null, true), + ), + new PokemonSpecies(SpeciesId.HONEDGE, 6, false, false, false, "Sword Pokémon", PokemonType.STEEL, PokemonType.GHOST, 0.8, 2, AbilityId.NO_GUARD, AbilityId.NONE, AbilityId.NONE, 325, 45, 80, 100, 35, 37, 28, 180, 50, 65, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DOUBLADE, 6, false, false, false, "Sword Pokémon", PokemonType.STEEL, PokemonType.GHOST, 0.8, 4.5, AbilityId.NO_GUARD, AbilityId.NONE, AbilityId.NONE, 448, 59, 110, 150, 45, 49, 35, 90, 50, 157, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.AEGISLASH, 6, false, false, false, "Royal Sword Pokémon", PokemonType.STEEL, PokemonType.GHOST, 1.7, 53, AbilityId.STANCE_CHANGE, AbilityId.NONE, AbilityId.NONE, 500, 60, 50, 140, 50, 140, 60, 45, 50, 250, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Shield Forme", "shield", PokemonType.STEEL, PokemonType.GHOST, 1.7, 53, AbilityId.STANCE_CHANGE, AbilityId.NONE, AbilityId.NONE, 500, 60, 50, 140, 50, 140, 60, 45, 50, 250, false, "", true), + new PokemonForm("Blade Forme", "blade", PokemonType.STEEL, PokemonType.GHOST, 1.7, 53, AbilityId.STANCE_CHANGE, AbilityId.NONE, AbilityId.NONE, 500, 60, 140, 50, 140, 50, 60, 45, 50, 250), + ), + new PokemonSpecies(SpeciesId.SPRITZEE, 6, false, false, false, "Perfume Pokémon", PokemonType.FAIRY, null, 0.2, 0.5, AbilityId.HEALER, AbilityId.NONE, AbilityId.AROMA_VEIL, 341, 78, 52, 60, 63, 65, 23, 200, 50, 68, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.AROMATISSE, 6, false, false, false, "Fragrance Pokémon", PokemonType.FAIRY, null, 0.8, 15.5, AbilityId.HEALER, AbilityId.NONE, AbilityId.AROMA_VEIL, 462, 101, 72, 72, 99, 89, 29, 140, 50, 162, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SWIRLIX, 6, false, false, false, "Cotton Candy Pokémon", PokemonType.FAIRY, null, 0.4, 3.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.UNBURDEN, 341, 62, 48, 66, 59, 57, 49, 200, 50, 68, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SLURPUFF, 6, false, false, false, "Meringue Pokémon", PokemonType.FAIRY, null, 0.8, 5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.UNBURDEN, 480, 82, 80, 86, 85, 75, 72, 140, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.INKAY, 6, false, false, false, "Revolving Pokémon", PokemonType.DARK, PokemonType.PSYCHIC, 0.4, 3.5, AbilityId.CONTRARY, AbilityId.SUCTION_CUPS, AbilityId.INFILTRATOR, 288, 53, 54, 53, 37, 46, 45, 190, 50, 58, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MALAMAR, 6, false, false, false, "Overturning Pokémon", PokemonType.DARK, PokemonType.PSYCHIC, 1.5, 47, AbilityId.CONTRARY, AbilityId.SUCTION_CUPS, AbilityId.INFILTRATOR, 482, 86, 92, 88, 68, 75, 73, 80, 50, 169, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BINACLE, 6, false, false, false, "Two-Handed Pokémon", PokemonType.ROCK, PokemonType.WATER, 0.5, 31, AbilityId.TOUGH_CLAWS, AbilityId.SNIPER, AbilityId.PICKPOCKET, 306, 42, 52, 67, 39, 56, 50, 120, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BARBARACLE, 6, false, false, false, "Collective Pokémon", PokemonType.ROCK, PokemonType.WATER, 1.3, 96, AbilityId.TOUGH_CLAWS, AbilityId.SNIPER, AbilityId.PICKPOCKET, 500, 72, 105, 115, 54, 86, 68, 45, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SKRELP, 6, false, false, false, "Mock Kelp Pokémon", PokemonType.POISON, PokemonType.WATER, 0.5, 7.3, AbilityId.POISON_POINT, AbilityId.POISON_TOUCH, AbilityId.ADAPTABILITY, 320, 50, 60, 60, 60, 60, 30, 225, 50, 64, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DRAGALGE, 6, false, false, false, "Mock Kelp Pokémon", PokemonType.POISON, PokemonType.DRAGON, 1.8, 81.5, AbilityId.POISON_POINT, AbilityId.POISON_TOUCH, AbilityId.ADAPTABILITY, 494, 65, 75, 90, 97, 123, 44, 55, 50, 173, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CLAUNCHER, 6, false, false, false, "Water Gun Pokémon", PokemonType.WATER, null, 0.5, 8.3, AbilityId.MEGA_LAUNCHER, AbilityId.NONE, AbilityId.NONE, 330, 50, 53, 62, 58, 63, 44, 225, 50, 66, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.CLAWITZER, 6, false, false, false, "Howitzer Pokémon", PokemonType.WATER, null, 1.3, 35.3, AbilityId.MEGA_LAUNCHER, AbilityId.NONE, AbilityId.NONE, 500, 71, 73, 88, 120, 89, 59, 55, 50, 100, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.HELIOPTILE, 6, false, false, false, "Generator Pokémon", PokemonType.ELECTRIC, PokemonType.NORMAL, 0.5, 6, AbilityId.DRY_SKIN, AbilityId.SAND_VEIL, AbilityId.SOLAR_POWER, 289, 44, 38, 33, 61, 43, 70, 190, 50, 58, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.HELIOLISK, 6, false, false, false, "Generator Pokémon", PokemonType.ELECTRIC, PokemonType.NORMAL, 1, 21, AbilityId.DRY_SKIN, AbilityId.SAND_VEIL, AbilityId.SOLAR_POWER, 481, 62, 55, 52, 109, 94, 109, 75, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.TYRUNT, 6, false, false, false, "Royal Heir Pokémon", PokemonType.ROCK, PokemonType.DRAGON, 0.8, 26, AbilityId.STRONG_JAW, AbilityId.NONE, AbilityId.STURDY, 362, 58, 89, 77, 45, 45, 48, 45, 50, 72, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.TYRANTRUM, 6, false, false, false, "Despot Pokémon", PokemonType.ROCK, PokemonType.DRAGON, 2.5, 270, AbilityId.STRONG_JAW, AbilityId.NONE, AbilityId.ROCK_HEAD, 521, 82, 121, 119, 69, 59, 71, 45, 50, 182, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.AMAURA, 6, false, false, false, "Tundra Pokémon", PokemonType.ROCK, PokemonType.ICE, 1.3, 25.2, AbilityId.REFRIGERATE, AbilityId.NONE, AbilityId.SNOW_WARNING, 362, 77, 59, 50, 67, 63, 46, 45, 50, 72, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.AURORUS, 6, false, false, false, "Tundra Pokémon", PokemonType.ROCK, PokemonType.ICE, 2.7, 225, AbilityId.REFRIGERATE, AbilityId.NONE, AbilityId.SNOW_WARNING, 521, 123, 77, 72, 99, 92, 58, 45, 50, 104, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.SYLVEON, 6, false, false, false, "Intertwining Pokémon", PokemonType.FAIRY, null, 1, 23.5, AbilityId.CUTE_CHARM, AbilityId.NONE, AbilityId.PIXILATE, 525, 95, 65, 65, 110, 130, 60, 45, 50, 184, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.HAWLUCHA, 6, false, false, false, "Wrestling Pokémon", PokemonType.FIGHTING, PokemonType.FLYING, 0.8, 21.5, AbilityId.LIMBER, AbilityId.UNBURDEN, AbilityId.MOLD_BREAKER, 500, 78, 92, 75, 74, 63, 118, 100, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DEDENNE, 6, false, false, false, "Antenna Pokémon", PokemonType.ELECTRIC, PokemonType.FAIRY, 0.2, 2.2, AbilityId.CHEEK_POUCH, AbilityId.PICKUP, AbilityId.PLUS, 431, 67, 58, 57, 81, 67, 101, 180, 50, 151, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CARBINK, 6, false, false, false, "Jewel Pokémon", PokemonType.ROCK, PokemonType.FAIRY, 0.3, 5.7, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.STURDY, 500, 50, 50, 150, 50, 150, 50, 60, 50, 100, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.GOOMY, 6, false, false, false, "Soft Tissue Pokémon", PokemonType.DRAGON, null, 0.3, 2.8, AbilityId.SAP_SIPPER, AbilityId.HYDRATION, AbilityId.GOOEY, 300, 45, 50, 35, 55, 75, 40, 45, 35, 60, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.SLIGGOO, 6, false, false, false, "Soft Tissue Pokémon", PokemonType.DRAGON, null, 0.8, 17.5, AbilityId.SAP_SIPPER, AbilityId.HYDRATION, AbilityId.GOOEY, 452, 68, 75, 53, 83, 113, 60, 45, 35, 158, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.GOODRA, 6, false, false, false, "Dragon Pokémon", PokemonType.DRAGON, null, 2, 150.5, AbilityId.SAP_SIPPER, AbilityId.HYDRATION, AbilityId.GOOEY, 600, 90, 100, 70, 110, 150, 80, 45, 35, 300, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.KLEFKI, 6, false, false, false, "Key Ring Pokémon", PokemonType.STEEL, PokemonType.FAIRY, 0.2, 3, AbilityId.PRANKSTER, AbilityId.NONE, AbilityId.MAGICIAN, 470, 57, 80, 91, 80, 87, 75, 75, 50, 165, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.PHANTUMP, 6, false, false, false, "Stump Pokémon", PokemonType.GHOST, PokemonType.GRASS, 0.4, 7, AbilityId.NATURAL_CURE, AbilityId.FRISK, AbilityId.HARVEST, 309, 43, 70, 48, 50, 60, 38, 120, 50, 62, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.TREVENANT, 6, false, false, false, "Elder Tree Pokémon", PokemonType.GHOST, PokemonType.GRASS, 1.5, 71, AbilityId.NATURAL_CURE, AbilityId.FRISK, AbilityId.HARVEST, 474, 85, 110, 76, 65, 82, 56, 60, 50, 166, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PUMPKABOO, 6, false, false, false, "Pumpkin Pokémon", PokemonType.GHOST, PokemonType.GRASS, 0.4, 5, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 335, 49, 66, 70, 44, 55, 51, 120, 50, 67, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Average Size", "", PokemonType.GHOST, PokemonType.GRASS, 0.4, 5, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 335, 49, 66, 70, 44, 55, 51, 120, 50, 67, false, null, true), + new PokemonForm("Small Size", "small", PokemonType.GHOST, PokemonType.GRASS, 0.3, 3.5, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 335, 44, 66, 70, 44, 55, 56, 120, 50, 67, false, "", true), + new PokemonForm("Large Size", "large", PokemonType.GHOST, PokemonType.GRASS, 0.5, 7.5, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 335, 54, 66, 70, 44, 55, 46, 120, 50, 67, false, "", true), + new PokemonForm("Super Size", "super", PokemonType.GHOST, PokemonType.GRASS, 0.8, 15, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 335, 59, 66, 70, 44, 55, 41, 120, 50, 67, false, "", true), + ), + new PokemonSpecies(SpeciesId.GOURGEIST, 6, false, false, false, "Pumpkin Pokémon", PokemonType.GHOST, PokemonType.GRASS, 0.9, 12.5, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 494, 65, 90, 122, 58, 75, 84, 60, 50, 173, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Average Size", "", PokemonType.GHOST, PokemonType.GRASS, 0.9, 12.5, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 494, 65, 90, 122, 58, 75, 84, 60, 50, 173, false, null, true), + new PokemonForm("Small Size", "small", PokemonType.GHOST, PokemonType.GRASS, 0.7, 9.5, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 494, 55, 85, 122, 58, 75, 99, 60, 50, 173, false, "", true), + new PokemonForm("Large Size", "large", PokemonType.GHOST, PokemonType.GRASS, 1.1, 14, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 494, 75, 95, 122, 58, 75, 69, 60, 50, 173, false, "", true), + new PokemonForm("Super Size", "super", PokemonType.GHOST, PokemonType.GRASS, 1.7, 39, AbilityId.PICKUP, AbilityId.FRISK, AbilityId.INSOMNIA, 494, 85, 100, 122, 58, 75, 54, 60, 50, 173, false, "", true), + ), + new PokemonSpecies(SpeciesId.BERGMITE, 6, false, false, false, "Ice Chunk Pokémon", PokemonType.ICE, null, 1, 99.5, AbilityId.OWN_TEMPO, AbilityId.ICE_BODY, AbilityId.STURDY, 304, 55, 69, 85, 32, 35, 28, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.AVALUGG, 6, false, false, false, "Iceberg Pokémon", PokemonType.ICE, null, 2, 505, AbilityId.OWN_TEMPO, AbilityId.ICE_BODY, AbilityId.STURDY, 514, 95, 117, 184, 44, 46, 28, 55, 50, 180, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.NOIBAT, 6, false, false, false, "Sound Wave Pokémon", PokemonType.FLYING, PokemonType.DRAGON, 0.5, 8, AbilityId.FRISK, AbilityId.INFILTRATOR, AbilityId.TELEPATHY, 245, 40, 30, 35, 45, 40, 55, 190, 50, 49, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.NOIVERN, 6, false, false, false, "Sound Wave Pokémon", PokemonType.FLYING, PokemonType.DRAGON, 1.5, 85, AbilityId.FRISK, AbilityId.INFILTRATOR, AbilityId.TELEPATHY, 535, 85, 70, 80, 97, 80, 123, 45, 50, 187, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.XERNEAS, 6, false, true, false, "Life Pokémon", PokemonType.FAIRY, null, 3, 215, AbilityId.FAIRY_AURA, AbilityId.NONE, AbilityId.NONE, 680, 126, 131, 95, 131, 98, 99, 45, 0, 340, GrowthRate.SLOW, null, false, true, + new PokemonForm("Neutral Mode", "neutral", PokemonType.FAIRY, null, 3, 215, AbilityId.FAIRY_AURA, AbilityId.NONE, AbilityId.NONE, 680, 126, 131, 95, 131, 98, 99, 45, 0, 340, false, null, true), + new PokemonForm("Active Mode", "active", PokemonType.FAIRY, null, 3, 215, AbilityId.FAIRY_AURA, AbilityId.NONE, AbilityId.NONE, 680, 126, 131, 95, 131, 98, 99, 45, 0, 340) + ), + new PokemonSpecies(SpeciesId.YVELTAL, 6, false, true, false, "Destruction Pokémon", PokemonType.DARK, PokemonType.FLYING, 5.8, 203, AbilityId.DARK_AURA, AbilityId.NONE, AbilityId.NONE, 680, 126, 131, 95, 131, 98, 99, 45, 0, 340, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.ZYGARDE, 6, false, true, false, "Order Pokémon", PokemonType.DRAGON, PokemonType.GROUND, 5, 305, AbilityId.AURA_BREAK, AbilityId.NONE, AbilityId.NONE, 600, 108, 100, 121, 81, 95, 95, 3, 0, 300, GrowthRate.SLOW, null, false, false, + new PokemonForm("50% Forme", "50", PokemonType.DRAGON, PokemonType.GROUND, 5, 305, AbilityId.AURA_BREAK, AbilityId.NONE, AbilityId.NONE, 600, 108, 100, 121, 81, 95, 95, 3, 0, 300, false, "", true), + new PokemonForm("10% Forme", "10", PokemonType.DRAGON, PokemonType.GROUND, 1.2, 33.5, AbilityId.AURA_BREAK, AbilityId.NONE, AbilityId.NONE, 486, 54, 100, 71, 61, 85, 115, 3, 0, 243, false, null, true), + new PokemonForm("50% Forme Power Construct", "50-pc", PokemonType.DRAGON, PokemonType.GROUND, 5, 305, AbilityId.POWER_CONSTRUCT, AbilityId.NONE, AbilityId.NONE, 600, 108, 100, 121, 81, 95, 95, 3, 0, 300, false, "", true), + new PokemonForm("10% Forme Power Construct", "10-pc", PokemonType.DRAGON, PokemonType.GROUND, 1.2, 33.5, AbilityId.POWER_CONSTRUCT, AbilityId.NONE, AbilityId.NONE, 486, 54, 100, 71, 61, 85, 115, 3, 0, 243, false, "10", true), + new PokemonForm("Complete Forme (50% PC)", "complete", PokemonType.DRAGON, PokemonType.GROUND, 4.5, 610, AbilityId.POWER_CONSTRUCT, AbilityId.NONE, AbilityId.NONE, 708, 216, 100, 121, 91, 95, 85, 3, 0, 354), + new PokemonForm("Complete Forme (10% PC)", "10-complete", PokemonType.DRAGON, PokemonType.GROUND, 4.5, 610, AbilityId.POWER_CONSTRUCT, AbilityId.NONE, AbilityId.NONE, 708, 216, 100, 121, 91, 95, 85, 3, 0, 354, false, "complete"), + ), + new PokemonSpecies(SpeciesId.DIANCIE, 6, false, false, true, "Jewel Pokémon", PokemonType.ROCK, PokemonType.FAIRY, 0.7, 8.8, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.NONE, 600, 50, 100, 150, 100, 150, 50, 3, 50, 300, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal", "", PokemonType.ROCK, PokemonType.FAIRY, 0.7, 8.8, AbilityId.CLEAR_BODY, AbilityId.NONE, AbilityId.NONE, 600, 50, 100, 150, 100, 150, 50, 3, 50, 300, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.ROCK, PokemonType.FAIRY, 1.1, 27.8, AbilityId.MAGIC_BOUNCE, AbilityId.NONE, AbilityId.NONE, 700, 50, 160, 110, 160, 110, 110, 3, 50, 300), + ), + new PokemonSpecies(SpeciesId.HOOPA, 6, false, false, true, "Mischief Pokémon", PokemonType.PSYCHIC, PokemonType.GHOST, 0.5, 9, AbilityId.MAGICIAN, AbilityId.NONE, AbilityId.NONE, 600, 80, 110, 60, 150, 130, 70, 3, 100, 300, GrowthRate.SLOW, null, false, false, + new PokemonForm("Hoopa Confined", "", PokemonType.PSYCHIC, PokemonType.GHOST, 0.5, 9, AbilityId.MAGICIAN, AbilityId.NONE, AbilityId.NONE, 600, 80, 110, 60, 150, 130, 70, 3, 100, 300, false, null, true), + new PokemonForm("Hoopa Unbound", "unbound", PokemonType.PSYCHIC, PokemonType.DARK, 6.5, 490, AbilityId.MAGICIAN, AbilityId.NONE, AbilityId.NONE, 680, 80, 160, 60, 170, 130, 80, 3, 100, 340), + ), + new PokemonSpecies(SpeciesId.VOLCANION, 6, false, false, true, "Steam Pokémon", PokemonType.FIRE, PokemonType.WATER, 1.7, 195, AbilityId.WATER_ABSORB, AbilityId.NONE, AbilityId.NONE, 600, 80, 110, 120, 130, 90, 70, 3, 100, 300, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.ROWLET, 7, false, false, false, "Grass Quill Pokémon", PokemonType.GRASS, PokemonType.FLYING, 0.3, 1.5, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.LONG_REACH, 320, 68, 55, 55, 50, 50, 42, 45, 50, 64, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.DARTRIX, 7, false, false, false, "Blade Quill Pokémon", PokemonType.GRASS, PokemonType.FLYING, 0.7, 16, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.LONG_REACH, 420, 78, 75, 75, 70, 70, 52, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.DECIDUEYE, 7, false, false, false, "Arrow Quill Pokémon", PokemonType.GRASS, PokemonType.GHOST, 1.6, 36.6, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.LONG_REACH, 530, 78, 107, 75, 100, 100, 70, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.LITTEN, 7, false, false, false, "Fire Cat Pokémon", PokemonType.FIRE, null, 0.4, 4.3, AbilityId.BLAZE, AbilityId.NONE, AbilityId.INTIMIDATE, 320, 45, 65, 40, 60, 40, 70, 45, 50, 64, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.TORRACAT, 7, false, false, false, "Fire Cat Pokémon", PokemonType.FIRE, null, 0.7, 25, AbilityId.BLAZE, AbilityId.NONE, AbilityId.INTIMIDATE, 420, 65, 85, 50, 80, 50, 90, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.INCINEROAR, 7, false, false, false, "Heel Pokémon", PokemonType.FIRE, PokemonType.DARK, 1.8, 83, AbilityId.BLAZE, AbilityId.NONE, AbilityId.INTIMIDATE, 530, 95, 115, 90, 80, 90, 60, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.POPPLIO, 7, false, false, false, "Sea Lion Pokémon", PokemonType.WATER, null, 0.4, 7.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.LIQUID_VOICE, 320, 50, 54, 54, 66, 56, 40, 45, 50, 64, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.BRIONNE, 7, false, false, false, "Pop Star Pokémon", PokemonType.WATER, null, 0.6, 17.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.LIQUID_VOICE, 420, 60, 69, 69, 91, 81, 50, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.PRIMARINA, 7, false, false, false, "Soloist Pokémon", PokemonType.WATER, PokemonType.FAIRY, 1.8, 44, AbilityId.TORRENT, AbilityId.NONE, AbilityId.LIQUID_VOICE, 530, 80, 74, 74, 126, 116, 60, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.PIKIPEK, 7, false, false, false, "Woodpecker Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.3, 1.2, AbilityId.KEEN_EYE, AbilityId.SKILL_LINK, AbilityId.PICKUP, 265, 35, 75, 30, 30, 30, 65, 255, 70, 53, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.TRUMBEAK, 7, false, false, false, "Bugle Beak Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 14.8, AbilityId.KEEN_EYE, AbilityId.SKILL_LINK, AbilityId.PICKUP, 355, 55, 85, 50, 40, 50, 75, 120, 70, 124, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.TOUCANNON, 7, false, false, false, "Cannon Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 1.1, 26, AbilityId.KEEN_EYE, AbilityId.SKILL_LINK, AbilityId.SHEER_FORCE, 485, 80, 120, 75, 75, 75, 60, 45, 70, 243, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.YUNGOOS, 7, false, false, false, "Loitering Pokémon", PokemonType.NORMAL, null, 0.4, 6, AbilityId.STAKEOUT, AbilityId.STRONG_JAW, AbilityId.ADAPTABILITY, 253, 48, 70, 30, 30, 30, 45, 255, 70, 51, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GUMSHOOS, 7, false, false, false, "Stakeout Pokémon", PokemonType.NORMAL, null, 0.7, 14.2, AbilityId.STAKEOUT, AbilityId.STRONG_JAW, AbilityId.ADAPTABILITY, 418, 88, 110, 60, 55, 60, 45, 127, 70, 146, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GRUBBIN, 7, false, false, false, "Larva Pokémon", PokemonType.BUG, null, 0.4, 4.4, AbilityId.SWARM, AbilityId.NONE, AbilityId.NONE, 300, 47, 62, 45, 55, 45, 46, 255, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CHARJABUG, 7, false, false, false, "Battery Pokémon", PokemonType.BUG, PokemonType.ELECTRIC, 0.5, 10.5, AbilityId.BATTERY, AbilityId.NONE, AbilityId.NONE, 400, 57, 82, 95, 55, 75, 36, 120, 50, 140, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.VIKAVOLT, 7, false, false, false, "Stag Beetle Pokémon", PokemonType.BUG, PokemonType.ELECTRIC, 1.5, 45, AbilityId.LEVITATE, AbilityId.NONE, AbilityId.NONE, 500, 77, 70, 90, 145, 75, 43, 45, 50, 250, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CRABRAWLER, 7, false, false, false, "Boxing Pokémon", PokemonType.FIGHTING, null, 0.6, 7, AbilityId.HYPER_CUTTER, AbilityId.IRON_FIST, AbilityId.ANGER_POINT, 338, 47, 82, 57, 42, 47, 63, 225, 70, 68, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CRABOMINABLE, 7, false, false, false, "Woolly Crab Pokémon", PokemonType.FIGHTING, PokemonType.ICE, 1.7, 180, AbilityId.HYPER_CUTTER, AbilityId.IRON_FIST, AbilityId.ANGER_POINT, 478, 97, 132, 77, 62, 67, 43, 60, 70, 167, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ORICORIO, 7, false, false, false, "Dancing Pokémon", PokemonType.FIRE, PokemonType.FLYING, 0.6, 3.4, AbilityId.DANCER, AbilityId.NONE, AbilityId.NONE, 476, 75, 70, 70, 98, 70, 93, 45, 70, 167, GrowthRate.MEDIUM_FAST, 25, false, false, + new PokemonForm("Baile Style", "baile", PokemonType.FIRE, PokemonType.FLYING, 0.6, 3.4, AbilityId.DANCER, AbilityId.NONE, AbilityId.NONE, 476, 75, 70, 70, 98, 70, 93, 45, 70, 167, false, "", true), + new PokemonForm("Pom-Pom Style", "pompom", PokemonType.ELECTRIC, PokemonType.FLYING, 0.6, 3.4, AbilityId.DANCER, AbilityId.NONE, AbilityId.NONE, 476, 75, 70, 70, 98, 70, 93, 45, 70, 167, false, null, true), + new PokemonForm("Pau Style", "pau", PokemonType.PSYCHIC, PokemonType.FLYING, 0.6, 3.4, AbilityId.DANCER, AbilityId.NONE, AbilityId.NONE, 476, 75, 70, 70, 98, 70, 93, 45, 70, 167, false, null, true), + new PokemonForm("Sensu Style", "sensu", PokemonType.GHOST, PokemonType.FLYING, 0.6, 3.4, AbilityId.DANCER, AbilityId.NONE, AbilityId.NONE, 476, 75, 70, 70, 98, 70, 93, 45, 70, 167, false, null, true), + ), + new PokemonSpecies(SpeciesId.CUTIEFLY, 7, false, false, false, "Bee Fly Pokémon", PokemonType.BUG, PokemonType.FAIRY, 0.1, 0.2, AbilityId.HONEY_GATHER, AbilityId.SHIELD_DUST, AbilityId.SWEET_VEIL, 304, 40, 45, 40, 55, 40, 84, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.RIBOMBEE, 7, false, false, false, "Bee Fly Pokémon", PokemonType.BUG, PokemonType.FAIRY, 0.2, 0.5, AbilityId.HONEY_GATHER, AbilityId.SHIELD_DUST, AbilityId.SWEET_VEIL, 464, 60, 55, 60, 95, 70, 124, 75, 50, 162, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ROCKRUFF, 7, false, false, false, "Puppy Pokémon", PokemonType.ROCK, null, 0.5, 9.2, AbilityId.KEEN_EYE, AbilityId.VITAL_SPIRIT, AbilityId.STEADFAST, 280, 45, 65, 40, 30, 40, 60, 190, 50, 56, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Normal", "", PokemonType.ROCK, null, 0.5, 9.2, AbilityId.KEEN_EYE, AbilityId.VITAL_SPIRIT, AbilityId.STEADFAST, 280, 45, 65, 40, 30, 40, 60, 190, 50, 56, false, null, true), + new PokemonForm("Own Tempo", "own-tempo", PokemonType.ROCK, null, 0.5, 9.2, AbilityId.OWN_TEMPO, AbilityId.NONE, AbilityId.OWN_TEMPO, 280, 45, 65, 40, 30, 40, 60, 190, 50, 56, false, "", true), + ), + new PokemonSpecies(SpeciesId.LYCANROC, 7, false, false, false, "Wolf Pokémon", PokemonType.ROCK, null, 0.8, 25, AbilityId.KEEN_EYE, AbilityId.SAND_RUSH, AbilityId.STEADFAST, 487, 75, 115, 65, 55, 65, 112, 90, 50, 170, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Midday Form", "midday", PokemonType.ROCK, null, 0.8, 25, AbilityId.KEEN_EYE, AbilityId.SAND_RUSH, AbilityId.STEADFAST, 487, 75, 115, 65, 55, 65, 112, 90, 50, 170, false, "", true), + new PokemonForm("Midnight Form", "midnight", PokemonType.ROCK, null, 1.1, 25, AbilityId.KEEN_EYE, AbilityId.VITAL_SPIRIT, AbilityId.NO_GUARD, 487, 85, 115, 75, 55, 75, 82, 90, 50, 170, false, null, true), + new PokemonForm("Dusk Form", "dusk", PokemonType.ROCK, null, 0.8, 25, AbilityId.TOUGH_CLAWS, AbilityId.TOUGH_CLAWS, AbilityId.TOUGH_CLAWS, 487, 75, 117, 65, 55, 65, 110, 90, 50, 170, false, null, true), + ), + new PokemonSpecies(SpeciesId.WISHIWASHI, 7, false, false, false, "Small Fry Pokémon", PokemonType.WATER, null, 0.2, 0.3, AbilityId.SCHOOLING, AbilityId.NONE, AbilityId.NONE, 175, 45, 20, 20, 25, 25, 40, 60, 50, 61, GrowthRate.FAST, 50, false, false, + new PokemonForm("Solo Form", "", PokemonType.WATER, null, 0.2, 0.3, AbilityId.SCHOOLING, AbilityId.NONE, AbilityId.NONE, 175, 45, 20, 20, 25, 25, 40, 60, 50, 61, false, null, true), + new PokemonForm("School", "school", PokemonType.WATER, null, 8.2, 78.6, AbilityId.SCHOOLING, AbilityId.NONE, AbilityId.NONE, 620, 45, 140, 130, 140, 135, 30, 60, 50, 217), + ), + new PokemonSpecies(SpeciesId.MAREANIE, 7, false, false, false, "Brutal Star Pokémon", PokemonType.POISON, PokemonType.WATER, 0.4, 8, AbilityId.MERCILESS, AbilityId.LIMBER, AbilityId.REGENERATOR, 305, 50, 53, 62, 43, 52, 45, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.TOXAPEX, 7, false, false, false, "Brutal Star Pokémon", PokemonType.POISON, PokemonType.WATER, 0.7, 14.5, AbilityId.MERCILESS, AbilityId.LIMBER, AbilityId.REGENERATOR, 495, 50, 63, 152, 53, 142, 35, 75, 50, 173, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MUDBRAY, 7, false, false, false, "Donkey Pokémon", PokemonType.GROUND, null, 1, 110, AbilityId.OWN_TEMPO, AbilityId.STAMINA, AbilityId.INNER_FOCUS, 385, 70, 100, 70, 45, 55, 45, 190, 50, 77, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MUDSDALE, 7, false, false, false, "Draft Horse Pokémon", PokemonType.GROUND, null, 2.5, 920, AbilityId.OWN_TEMPO, AbilityId.STAMINA, AbilityId.INNER_FOCUS, 500, 100, 125, 100, 55, 85, 35, 60, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DEWPIDER, 7, false, false, false, "Water Bubble Pokémon", PokemonType.WATER, PokemonType.BUG, 0.3, 4, AbilityId.WATER_BUBBLE, AbilityId.NONE, AbilityId.WATER_ABSORB, 269, 38, 40, 52, 40, 72, 27, 200, 50, 54, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ARAQUANID, 7, false, false, false, "Water Bubble Pokémon", PokemonType.WATER, PokemonType.BUG, 1.8, 82, AbilityId.WATER_BUBBLE, AbilityId.NONE, AbilityId.WATER_ABSORB, 454, 68, 70, 92, 50, 132, 42, 100, 50, 159, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.FOMANTIS, 7, false, false, false, "Sickle Grass Pokémon", PokemonType.GRASS, null, 0.3, 1.5, AbilityId.LEAF_GUARD, AbilityId.NONE, AbilityId.CONTRARY, 250, 40, 55, 35, 50, 35, 35, 190, 50, 50, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.LURANTIS, 7, false, false, false, "Bloom Sickle Pokémon", PokemonType.GRASS, null, 0.9, 18.5, AbilityId.LEAF_GUARD, AbilityId.NONE, AbilityId.CONTRARY, 480, 70, 105, 90, 80, 90, 45, 75, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MORELULL, 7, false, false, false, "Illuminating Pokémon", PokemonType.GRASS, PokemonType.FAIRY, 0.2, 1.5, AbilityId.ILLUMINATE, AbilityId.EFFECT_SPORE, AbilityId.RAIN_DISH, 285, 40, 35, 55, 65, 75, 15, 190, 50, 57, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SHIINOTIC, 7, false, false, false, "Illuminating Pokémon", PokemonType.GRASS, PokemonType.FAIRY, 1, 11.5, AbilityId.ILLUMINATE, AbilityId.EFFECT_SPORE, AbilityId.RAIN_DISH, 405, 60, 45, 80, 90, 100, 30, 75, 50, 142, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SALANDIT, 7, false, false, false, "Toxic Lizard Pokémon", PokemonType.POISON, PokemonType.FIRE, 0.6, 4.8, AbilityId.CORROSION, AbilityId.NONE, AbilityId.OBLIVIOUS, 320, 48, 44, 40, 71, 40, 77, 120, 50, 64, GrowthRate.MEDIUM_FAST, 87.5, false), + new PokemonSpecies(SpeciesId.SALAZZLE, 7, false, false, false, "Toxic Lizard Pokémon", PokemonType.POISON, PokemonType.FIRE, 1.2, 22.2, AbilityId.CORROSION, AbilityId.NONE, AbilityId.OBLIVIOUS, 480, 68, 64, 60, 111, 60, 117, 45, 50, 168, GrowthRate.MEDIUM_FAST, 0, false), + new PokemonSpecies(SpeciesId.STUFFUL, 7, false, false, false, "Flailing Pokémon", PokemonType.NORMAL, PokemonType.FIGHTING, 0.5, 6.8, AbilityId.FLUFFY, AbilityId.KLUTZ, AbilityId.CUTE_CHARM, 340, 70, 75, 50, 45, 50, 50, 140, 50, 68, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BEWEAR, 7, false, false, false, "Strong Arm Pokémon", PokemonType.NORMAL, PokemonType.FIGHTING, 2.1, 135, AbilityId.FLUFFY, AbilityId.KLUTZ, AbilityId.UNNERVE, 500, 120, 125, 80, 55, 60, 60, 70, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BOUNSWEET, 7, false, false, false, "Fruit Pokémon", PokemonType.GRASS, null, 0.3, 3.2, AbilityId.LEAF_GUARD, AbilityId.OBLIVIOUS, AbilityId.SWEET_VEIL, 210, 42, 30, 38, 30, 38, 32, 235, 50, 42, GrowthRate.MEDIUM_SLOW, 0, false), + new PokemonSpecies(SpeciesId.STEENEE, 7, false, false, false, "Fruit Pokémon", PokemonType.GRASS, null, 0.7, 8.2, AbilityId.LEAF_GUARD, AbilityId.OBLIVIOUS, AbilityId.SWEET_VEIL, 290, 52, 40, 48, 40, 48, 62, 120, 50, 102, GrowthRate.MEDIUM_SLOW, 0, false), + new PokemonSpecies(SpeciesId.TSAREENA, 7, false, false, false, "Fruit Pokémon", PokemonType.GRASS, null, 1.2, 21.4, AbilityId.LEAF_GUARD, AbilityId.QUEENLY_MAJESTY, AbilityId.SWEET_VEIL, 510, 72, 120, 98, 50, 98, 72, 45, 50, 255, GrowthRate.MEDIUM_SLOW, 0, false), + new PokemonSpecies(SpeciesId.COMFEY, 7, false, false, false, "Posy Picker Pokémon", PokemonType.FAIRY, null, 0.1, 0.3, AbilityId.FLOWER_VEIL, AbilityId.TRIAGE, AbilityId.NATURAL_CURE, 485, 51, 52, 90, 82, 110, 100, 60, 50, 170, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.ORANGURU, 7, false, false, false, "Sage Pokémon", PokemonType.NORMAL, PokemonType.PSYCHIC, 1.5, 76, AbilityId.INNER_FOCUS, AbilityId.TELEPATHY, AbilityId.SYMBIOSIS, 490, 90, 60, 80, 90, 110, 60, 45, 50, 172, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.PASSIMIAN, 7, false, false, false, "Teamwork Pokémon", PokemonType.FIGHTING, null, 2, 82.8, AbilityId.RECEIVER, AbilityId.NONE, AbilityId.DEFIANT, 490, 100, 120, 90, 40, 60, 80, 45, 50, 172, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.WIMPOD, 7, false, false, false, "Turn Tail Pokémon", PokemonType.BUG, PokemonType.WATER, 0.5, 12, AbilityId.WIMP_OUT, AbilityId.NONE, AbilityId.RUN_AWAY, 230, 25, 35, 40, 20, 30, 80, 90, 50, 46, GrowthRate.MEDIUM_FAST, 50, false), //Custom Hidden + new PokemonSpecies(SpeciesId.GOLISOPOD, 7, false, false, false, "Hard Scale Pokémon", PokemonType.BUG, PokemonType.WATER, 2, 108, AbilityId.EMERGENCY_EXIT, AbilityId.NONE, AbilityId.ANTICIPATION, 530, 75, 125, 140, 60, 90, 40, 45, 50, 186, GrowthRate.MEDIUM_FAST, 50, false), //Custom Hidden + new PokemonSpecies(SpeciesId.SANDYGAST, 7, false, false, false, "Sand Heap Pokémon", PokemonType.GHOST, PokemonType.GROUND, 0.5, 70, AbilityId.WATER_COMPACTION, AbilityId.NONE, AbilityId.SAND_VEIL, 320, 55, 55, 80, 70, 45, 15, 140, 50, 64, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PALOSSAND, 7, false, false, false, "Sand Castle Pokémon", PokemonType.GHOST, PokemonType.GROUND, 1.3, 250, AbilityId.WATER_COMPACTION, AbilityId.NONE, AbilityId.SAND_VEIL, 480, 85, 75, 110, 100, 75, 35, 60, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PYUKUMUKU, 7, false, false, false, "Sea Cucumber Pokémon", PokemonType.WATER, null, 0.3, 1.2, AbilityId.INNARDS_OUT, AbilityId.NONE, AbilityId.UNAWARE, 410, 55, 60, 130, 30, 130, 5, 60, 50, 144, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.TYPE_NULL, 7, true, false, false, "Synthetic Pokémon", PokemonType.NORMAL, null, 1.9, 120.5, AbilityId.BATTLE_ARMOR, AbilityId.NONE, AbilityId.NONE, 534, 95, 95, 95, 95, 95, 59, 3, 0, 107, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.SILVALLY, 7, true, false, false, "Synthetic Pokémon", PokemonType.NORMAL, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285, GrowthRate.SLOW, null, false, false, + new PokemonForm("Type: Normal", "normal", PokemonType.NORMAL, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285, false, "", true), + new PokemonForm("Type: Fighting", "fighting", PokemonType.FIGHTING, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Flying", "flying", PokemonType.FLYING, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Poison", "poison", PokemonType.POISON, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Ground", "ground", PokemonType.GROUND, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Rock", "rock", PokemonType.ROCK, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Bug", "bug", PokemonType.BUG, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Ghost", "ghost", PokemonType.GHOST, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Steel", "steel", PokemonType.STEEL, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Fire", "fire", PokemonType.FIRE, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Water", "water", PokemonType.WATER, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Grass", "grass", PokemonType.GRASS, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Electric", "electric", PokemonType.ELECTRIC, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Psychic", "psychic", PokemonType.PSYCHIC, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Ice", "ice", PokemonType.ICE, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Dragon", "dragon", PokemonType.DRAGON, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Dark", "dark", PokemonType.DARK, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + new PokemonForm("Type: Fairy", "fairy", PokemonType.FAIRY, null, 2.3, 100.5, AbilityId.RKS_SYSTEM, AbilityId.NONE, AbilityId.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), + ), + new PokemonSpecies(SpeciesId.MINIOR, 7, false, false, false, "Meteor Pokémon", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, GrowthRate.MEDIUM_SLOW, null, false, false, + new PokemonForm("Red Meteor Form", "red-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, "", true), + new PokemonForm("Orange Meteor Form", "orange-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, "", true), + new PokemonForm("Yellow Meteor Form", "yellow-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, "", true), + new PokemonForm("Green Meteor Form", "green-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, "", true), + new PokemonForm("Blue Meteor Form", "blue-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, "", true), + new PokemonForm("Indigo Meteor Form", "indigo-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, "", true), + new PokemonForm("Violet Meteor Form", "violet-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, "", true), + new PokemonForm("Red Core Form", "red", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), + new PokemonForm("Orange Core Form", "orange", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), + new PokemonForm("Yellow Core Form", "yellow", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), + new PokemonForm("Green Core Form", "green", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), + new PokemonForm("Blue Core Form", "blue", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), + new PokemonForm("Indigo Core Form", "indigo", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), + new PokemonForm("Violet Core Form", "violet", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, AbilityId.SHIELDS_DOWN, AbilityId.NONE, AbilityId.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), + ), + new PokemonSpecies(SpeciesId.KOMALA, 7, false, false, false, "Drowsing Pokémon", PokemonType.NORMAL, null, 0.4, 19.9, AbilityId.COMATOSE, AbilityId.NONE, AbilityId.NONE, 480, 65, 115, 65, 75, 95, 65, 45, 70, 168, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.TURTONATOR, 7, false, false, false, "Blast Turtle Pokémon", PokemonType.FIRE, PokemonType.DRAGON, 2, 212, AbilityId.SHELL_ARMOR, AbilityId.NONE, AbilityId.NONE, 485, 60, 78, 135, 91, 85, 36, 70, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.TOGEDEMARU, 7, false, false, false, "Roly-Poly Pokémon", PokemonType.ELECTRIC, PokemonType.STEEL, 0.3, 3.3, AbilityId.IRON_BARBS, AbilityId.LIGHTNING_ROD, AbilityId.STURDY, 435, 65, 98, 63, 40, 73, 96, 180, 50, 152, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MIMIKYU, 7, false, false, false, "Disguise Pokémon", PokemonType.GHOST, PokemonType.FAIRY, 0.2, 0.7, AbilityId.DISGUISE, AbilityId.NONE, AbilityId.NONE, 476, 55, 90, 80, 50, 105, 96, 45, 50, 167, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Disguised Form", "disguised", PokemonType.GHOST, PokemonType.FAIRY, 0.2, 0.7, AbilityId.DISGUISE, AbilityId.NONE, AbilityId.NONE, 476, 55, 90, 80, 50, 105, 96, 45, 50, 167, false, null, true), + new PokemonForm("Busted Form", "busted", PokemonType.GHOST, PokemonType.FAIRY, 0.2, 0.7, AbilityId.DISGUISE, AbilityId.NONE, AbilityId.NONE, 476, 55, 90, 80, 50, 105, 96, 45, 50, 167), + ), + new PokemonSpecies(SpeciesId.BRUXISH, 7, false, false, false, "Gnash Teeth Pokémon", PokemonType.WATER, PokemonType.PSYCHIC, 0.9, 19, AbilityId.DAZZLING, AbilityId.STRONG_JAW, AbilityId.WONDER_SKIN, 475, 68, 105, 70, 70, 70, 92, 80, 70, 166, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DRAMPA, 7, false, false, false, "Placid Pokémon", PokemonType.NORMAL, PokemonType.DRAGON, 3, 185, AbilityId.BERSERK, AbilityId.SAP_SIPPER, AbilityId.CLOUD_NINE, 485, 78, 60, 85, 135, 91, 36, 70, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DHELMISE, 7, false, false, false, "Sea Creeper Pokémon", PokemonType.GHOST, PokemonType.GRASS, 3.9, 210, AbilityId.STEELWORKER, AbilityId.NONE, AbilityId.NONE, 517, 70, 131, 100, 86, 90, 40, 25, 50, 181, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.JANGMO_O, 7, false, false, false, "Scaly Pokémon", PokemonType.DRAGON, null, 0.6, 29.7, AbilityId.BULLETPROOF, AbilityId.SOUNDPROOF, AbilityId.OVERCOAT, 300, 45, 55, 65, 45, 45, 45, 45, 50, 60, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.HAKAMO_O, 7, false, false, false, "Scaly Pokémon", PokemonType.DRAGON, PokemonType.FIGHTING, 1.2, 47, AbilityId.BULLETPROOF, AbilityId.SOUNDPROOF, AbilityId.OVERCOAT, 420, 55, 75, 90, 65, 70, 65, 45, 50, 147, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.KOMMO_O, 7, false, false, false, "Scaly Pokémon", PokemonType.DRAGON, PokemonType.FIGHTING, 1.6, 78.2, AbilityId.BULLETPROOF, AbilityId.SOUNDPROOF, AbilityId.OVERCOAT, 600, 75, 110, 125, 100, 105, 85, 45, 50, 300, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.TAPU_KOKO, 7, true, false, false, "Land Spirit Pokémon", PokemonType.ELECTRIC, PokemonType.FAIRY, 1.8, 20.5, AbilityId.ELECTRIC_SURGE, AbilityId.NONE, AbilityId.TELEPATHY, 570, 70, 115, 85, 95, 75, 130, 3, 50, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.TAPU_LELE, 7, true, false, false, "Land Spirit Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 1.2, 18.6, AbilityId.PSYCHIC_SURGE, AbilityId.NONE, AbilityId.TELEPATHY, 570, 70, 85, 75, 130, 115, 95, 3, 50, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.TAPU_BULU, 7, true, false, false, "Land Spirit Pokémon", PokemonType.GRASS, PokemonType.FAIRY, 1.9, 45.5, AbilityId.GRASSY_SURGE, AbilityId.NONE, AbilityId.TELEPATHY, 570, 70, 130, 115, 85, 95, 75, 3, 50, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.TAPU_FINI, 7, true, false, false, "Land Spirit Pokémon", PokemonType.WATER, PokemonType.FAIRY, 1.3, 21.2, AbilityId.MISTY_SURGE, AbilityId.NONE, AbilityId.TELEPATHY, 570, 70, 75, 115, 95, 130, 85, 3, 50, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.COSMOG, 7, true, false, false, "Nebula Pokémon", PokemonType.PSYCHIC, null, 0.2, 0.1, AbilityId.UNAWARE, AbilityId.NONE, AbilityId.NONE, 200, 43, 29, 31, 29, 31, 37, 45, 0, 40, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.COSMOEM, 7, true, false, false, "Protostar Pokémon", PokemonType.PSYCHIC, null, 0.1, 999.9, AbilityId.STURDY, AbilityId.NONE, AbilityId.NONE, 400, 43, 29, 131, 29, 131, 37, 45, 0, 140, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.SOLGALEO, 7, false, true, false, "Sunne Pokémon", PokemonType.PSYCHIC, PokemonType.STEEL, 3.4, 230, AbilityId.FULL_METAL_BODY, AbilityId.NONE, AbilityId.NONE, 680, 137, 137, 107, 113, 89, 97, 45, 0, 340, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.LUNALA, 7, false, true, false, "Moone Pokémon", PokemonType.PSYCHIC, PokemonType.GHOST, 4, 120, AbilityId.SHADOW_SHIELD, AbilityId.NONE, AbilityId.NONE, 680, 137, 113, 89, 137, 107, 97, 45, 0, 340, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.NIHILEGO, 7, true, false, false, "Parasite Pokémon", PokemonType.ROCK, PokemonType.POISON, 1.2, 55.5, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 109, 53, 47, 127, 131, 103, 45, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.BUZZWOLE, 7, true, false, false, "Swollen Pokémon", PokemonType.BUG, PokemonType.FIGHTING, 2.4, 333.6, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 107, 139, 139, 53, 53, 79, 45, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.PHEROMOSA, 7, true, false, false, "Lissome Pokémon", PokemonType.BUG, PokemonType.FIGHTING, 1.8, 25, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 71, 137, 37, 137, 37, 151, 45, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.XURKITREE, 7, true, false, false, "Glowing Pokémon", PokemonType.ELECTRIC, null, 3.8, 100, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 83, 89, 71, 173, 71, 83, 45, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.CELESTEELA, 7, true, false, false, "Launch Pokémon", PokemonType.STEEL, PokemonType.FLYING, 9.2, 999.9, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 97, 101, 103, 107, 101, 61, 45, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.KARTANA, 7, true, false, false, "Drawn Sword Pokémon", PokemonType.GRASS, PokemonType.STEEL, 0.3, 0.1, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 59, 181, 131, 59, 31, 109, 45, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.GUZZLORD, 7, true, false, false, "Junkivore Pokémon", PokemonType.DARK, PokemonType.DRAGON, 5.5, 888, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 223, 101, 53, 97, 53, 43, 45, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.NECROZMA, 7, false, true, false, "Prism Pokémon", PokemonType.PSYCHIC, null, 2.4, 230, AbilityId.PRISM_ARMOR, AbilityId.NONE, AbilityId.NONE, 600, 97, 107, 101, 127, 89, 79, 255, 0, 300, GrowthRate.SLOW, null, false, false, + new PokemonForm("Normal", "", PokemonType.PSYCHIC, null, 2.4, 230, AbilityId.PRISM_ARMOR, AbilityId.NONE, AbilityId.NONE, 600, 97, 107, 101, 127, 89, 79, 255, 0, 300, false, null, true), + new PokemonForm("Dusk Mane", "dusk-mane", PokemonType.PSYCHIC, PokemonType.STEEL, 3.8, 460, AbilityId.PRISM_ARMOR, AbilityId.NONE, AbilityId.NONE, 680, 97, 157, 127, 113, 109, 77, 255, 0, 340), + new PokemonForm("Dawn Wings", "dawn-wings", PokemonType.PSYCHIC, PokemonType.GHOST, 4.2, 350, AbilityId.PRISM_ARMOR, AbilityId.NONE, AbilityId.NONE, 680, 97, 113, 109, 157, 127, 77, 255, 0, 340), + new PokemonForm("Ultra", "ultra", PokemonType.PSYCHIC, PokemonType.DRAGON, 7.5, 230, AbilityId.NEUROFORCE, AbilityId.NONE, AbilityId.NONE, 754, 97, 167, 97, 167, 97, 129, 255, 0, 377), + ), + new PokemonSpecies(SpeciesId.MAGEARNA, 7, false, false, true, "Artificial Pokémon", PokemonType.STEEL, PokemonType.FAIRY, 1, 80.5, AbilityId.SOUL_HEART, AbilityId.NONE, AbilityId.NONE, 600, 80, 95, 115, 130, 115, 65, 3, 0, 300, GrowthRate.SLOW, null, false, false, + new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.FAIRY, 1, 80.5, AbilityId.SOUL_HEART, AbilityId.NONE, AbilityId.NONE, 600, 80, 95, 115, 130, 115, 65, 3, 0, 300, false, null, true), + new PokemonForm("Original", "original", PokemonType.STEEL, PokemonType.FAIRY, 1, 80.5, AbilityId.SOUL_HEART, AbilityId.NONE, AbilityId.NONE, 600, 80, 95, 115, 130, 115, 65, 3, 0, 300, false, null, true), + ), + new PokemonSpecies(SpeciesId.MARSHADOW, 7, false, false, true, "Gloomdweller Pokémon", PokemonType.FIGHTING, PokemonType.GHOST, 0.7, 22.2, AbilityId.TECHNICIAN, AbilityId.NONE, AbilityId.NONE, 600, 90, 125, 80, 90, 90, 125, 3, 0, 300, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal", "", PokemonType.FIGHTING, PokemonType.GHOST, 0.7, 22.2, AbilityId.TECHNICIAN, AbilityId.NONE, AbilityId.NONE, 600, 90, 125, 80, 90, 90, 125, 3, 0, 300, false, null, true), + new PokemonForm("Zenith", "zenith", PokemonType.FIGHTING, PokemonType.GHOST, 0.7, 22.2, AbilityId.TECHNICIAN, AbilityId.NONE, AbilityId.NONE, 600, 90, 125, 80, 90, 90, 125, 3, 0, 300, false, null, false, true) + ), + new PokemonSpecies(SpeciesId.POIPOLE, 7, true, false, false, "Poison Pin Pokémon", PokemonType.POISON, null, 0.6, 1.8, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 420, 67, 73, 67, 73, 67, 73, 45, 0, 210, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.NAGANADEL, 7, true, false, false, "Poison Pin Pokémon", PokemonType.POISON, PokemonType.DRAGON, 3.6, 150, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 540, 73, 73, 73, 127, 73, 121, 45, 0, 270, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.STAKATAKA, 7, true, false, false, "Rampart Pokémon", PokemonType.ROCK, PokemonType.STEEL, 5.5, 820, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 61, 131, 211, 53, 101, 13, 30, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.BLACEPHALON, 7, true, false, false, "Fireworks Pokémon", PokemonType.FIRE, PokemonType.GHOST, 1.8, 13, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 53, 127, 53, 151, 79, 107, 30, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.ZERAORA, 7, false, false, true, "Thunderclap Pokémon", PokemonType.ELECTRIC, null, 1.5, 44.5, AbilityId.VOLT_ABSORB, AbilityId.NONE, AbilityId.NONE, 600, 88, 112, 75, 102, 80, 143, 3, 0, 300, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.MELTAN, 7, false, false, true, "Hex Nut Pokémon", PokemonType.STEEL, null, 0.2, 8, AbilityId.MAGNET_PULL, AbilityId.NONE, AbilityId.NONE, 300, 46, 65, 65, 55, 35, 34, 3, 0, 150, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.MELMETAL, 7, false, false, true, "Hex Nut Pokémon", PokemonType.STEEL, null, 2.5, 800, AbilityId.IRON_FIST, AbilityId.NONE, AbilityId.NONE, 600, 135, 143, 143, 80, 65, 34, 3, 0, 300, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal", "", PokemonType.STEEL, null, 2.5, 800, AbilityId.IRON_FIST, AbilityId.NONE, AbilityId.NONE, 600, 135, 143, 143, 80, 65, 34, 3, 0, 300, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.STEEL, null, 25, 999.9, AbilityId.IRON_FIST, AbilityId.NONE, AbilityId.NONE, 700, 170, 158, 158, 95, 75, 44, 3, 0, 300), + ), + new PokemonSpecies(SpeciesId.GROOKEY, 8, false, false, false, "Chimp Pokémon", PokemonType.GRASS, null, 0.3, 5, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.GRASSY_SURGE, 310, 50, 65, 50, 40, 40, 65, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.THWACKEY, 8, false, false, false, "Beat Pokémon", PokemonType.GRASS, null, 0.7, 14, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.GRASSY_SURGE, 420, 70, 85, 70, 55, 60, 80, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.RILLABOOM, 8, false, false, false, "Drummer Pokémon", PokemonType.GRASS, null, 2.1, 90, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.GRASSY_SURGE, 530, 100, 125, 90, 60, 70, 85, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, + new PokemonForm("Normal", "", PokemonType.GRASS, null, 2.1, 90, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.GRASSY_SURGE, 530, 100, 125, 90, 60, 70, 85, 45, 50, 265, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GRASS, null, 28, 999.9, AbilityId.GRASSY_SURGE, AbilityId.NONE, AbilityId.GRASSY_SURGE, 630, 125, 140, 105, 90, 85, 85, 45, 50, 265), + ), + new PokemonSpecies(SpeciesId.SCORBUNNY, 8, false, false, false, "Rabbit Pokémon", PokemonType.FIRE, null, 0.3, 4.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.LIBERO, 310, 50, 71, 40, 40, 40, 69, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.RABOOT, 8, false, false, false, "Rabbit Pokémon", PokemonType.FIRE, null, 0.6, 9, AbilityId.BLAZE, AbilityId.NONE, AbilityId.LIBERO, 420, 65, 86, 60, 55, 60, 94, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.CINDERACE, 8, false, false, false, "Striker Pokémon", PokemonType.FIRE, null, 1.4, 33, AbilityId.BLAZE, AbilityId.NONE, AbilityId.LIBERO, 530, 80, 116, 75, 65, 75, 119, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, + new PokemonForm("Normal", "", PokemonType.FIRE, null, 1.4, 33, AbilityId.BLAZE, AbilityId.NONE, AbilityId.LIBERO, 530, 80, 116, 75, 65, 75, 119, 45, 50, 265, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FIRE, null, 27, 999.9, AbilityId.LIBERO, AbilityId.NONE, AbilityId.LIBERO, 630, 100, 141, 80, 95, 80, 134, 45, 50, 265), + ), + new PokemonSpecies(SpeciesId.SOBBLE, 8, false, false, false, "Water Lizard Pokémon", PokemonType.WATER, null, 0.3, 4, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SNIPER, 310, 50, 40, 40, 70, 40, 70, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.DRIZZILE, 8, false, false, false, "Water Lizard Pokémon", PokemonType.WATER, null, 0.7, 11.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SNIPER, 420, 65, 60, 55, 95, 55, 90, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.INTELEON, 8, false, false, false, "Secret Agent Pokémon", PokemonType.WATER, null, 1.9, 45.2, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SNIPER, 530, 70, 85, 65, 125, 65, 120, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, + new PokemonForm("Normal", "", PokemonType.WATER, null, 1.9, 45.2, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SNIPER, 530, 70, 85, 65, 125, 65, 120, 45, 50, 265, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, null, 40, 999.9, AbilityId.SNIPER, AbilityId.NONE, AbilityId.SNIPER, 630, 95, 117, 67, 147, 67, 137, 45, 50, 265), + ), + new PokemonSpecies(SpeciesId.SKWOVET, 8, false, false, false, "Cheeky Pokémon", PokemonType.NORMAL, null, 0.3, 2.5, AbilityId.CHEEK_POUCH, AbilityId.NONE, AbilityId.GLUTTONY, 275, 70, 55, 55, 35, 35, 25, 255, 50, 55, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GREEDENT, 8, false, false, false, "Greedy Pokémon", PokemonType.NORMAL, null, 0.6, 6, AbilityId.CHEEK_POUCH, AbilityId.NONE, AbilityId.GLUTTONY, 460, 120, 95, 95, 55, 75, 20, 90, 50, 161, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ROOKIDEE, 8, false, false, false, "Tiny Bird Pokémon", PokemonType.FLYING, null, 0.2, 1.8, AbilityId.KEEN_EYE, AbilityId.UNNERVE, AbilityId.BIG_PECKS, 245, 38, 47, 35, 33, 35, 57, 255, 50, 49, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.CORVISQUIRE, 8, false, false, false, "Raven Pokémon", PokemonType.FLYING, null, 0.8, 16, AbilityId.KEEN_EYE, AbilityId.UNNERVE, AbilityId.BIG_PECKS, 365, 68, 67, 55, 43, 55, 77, 120, 50, 128, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.CORVIKNIGHT, 8, false, false, false, "Raven Pokémon", PokemonType.FLYING, PokemonType.STEEL, 2.2, 75, AbilityId.PRESSURE, AbilityId.UNNERVE, AbilityId.MIRROR_ARMOR, 495, 98, 87, 105, 53, 85, 67, 45, 50, 248, GrowthRate.MEDIUM_SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.FLYING, PokemonType.STEEL, 2.2, 75, AbilityId.PRESSURE, AbilityId.UNNERVE, AbilityId.MIRROR_ARMOR, 495, 98, 87, 105, 53, 85, 67, 45, 50, 248, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FLYING, PokemonType.STEEL, 14, 999.9, AbilityId.MIRROR_ARMOR, AbilityId.MIRROR_ARMOR, AbilityId.MIRROR_ARMOR, 595, 118, 112, 135, 63, 90, 77, 45, 50, 248), + ), + new PokemonSpecies(SpeciesId.BLIPBUG, 8, false, false, false, "Larva Pokémon", PokemonType.BUG, null, 0.4, 8, AbilityId.SWARM, AbilityId.COMPOUND_EYES, AbilityId.TELEPATHY, 180, 25, 20, 20, 25, 45, 45, 255, 50, 36, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DOTTLER, 8, false, false, false, "Radome Pokémon", PokemonType.BUG, PokemonType.PSYCHIC, 0.4, 19.5, AbilityId.SWARM, AbilityId.COMPOUND_EYES, AbilityId.TELEPATHY, 335, 50, 35, 80, 50, 90, 30, 120, 50, 117, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ORBEETLE, 8, false, false, false, "Seven Spot Pokémon", PokemonType.BUG, PokemonType.PSYCHIC, 0.4, 40.8, AbilityId.SWARM, AbilityId.FRISK, AbilityId.TELEPATHY, 505, 60, 45, 110, 80, 120, 90, 45, 50, 253, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.BUG, PokemonType.PSYCHIC, 0.4, 40.8, AbilityId.SWARM, AbilityId.FRISK, AbilityId.TELEPATHY, 505, 60, 45, 110, 80, 120, 90, 45, 50, 253, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.BUG, PokemonType.PSYCHIC, 14, 999.9, AbilityId.TRACE, AbilityId.TRACE, AbilityId.TRACE, 605, 75, 50, 140, 100, 150, 90, 45, 50, 253), + ), + new PokemonSpecies(SpeciesId.NICKIT, 8, false, false, false, "Fox Pokémon", PokemonType.DARK, null, 0.6, 8.9, AbilityId.RUN_AWAY, AbilityId.UNBURDEN, AbilityId.STAKEOUT, 245, 40, 28, 28, 47, 52, 50, 255, 50, 49, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.THIEVUL, 8, false, false, false, "Fox Pokémon", PokemonType.DARK, null, 1.2, 19.9, AbilityId.RUN_AWAY, AbilityId.UNBURDEN, AbilityId.STAKEOUT, 455, 70, 58, 58, 87, 92, 90, 127, 50, 159, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.GOSSIFLEUR, 8, false, false, false, "Flowering Pokémon", PokemonType.GRASS, null, 0.4, 2.2, AbilityId.COTTON_DOWN, AbilityId.REGENERATOR, AbilityId.EFFECT_SPORE, 250, 40, 40, 60, 40, 60, 10, 190, 50, 50, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ELDEGOSS, 8, false, false, false, "Cotton Bloom Pokémon", PokemonType.GRASS, null, 0.5, 2.5, AbilityId.COTTON_DOWN, AbilityId.REGENERATOR, AbilityId.EFFECT_SPORE, 460, 60, 50, 90, 80, 120, 60, 75, 50, 161, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.WOOLOO, 8, false, false, false, "Sheep Pokémon", PokemonType.NORMAL, null, 0.6, 6, AbilityId.FLUFFY, AbilityId.RUN_AWAY, AbilityId.BULLETPROOF, 270, 42, 40, 55, 40, 45, 48, 255, 50, 122, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DUBWOOL, 8, false, false, false, "Sheep Pokémon", PokemonType.NORMAL, null, 1.3, 43, AbilityId.FLUFFY, AbilityId.STEADFAST, AbilityId.BULLETPROOF, 490, 72, 80, 100, 60, 90, 88, 127, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CHEWTLE, 8, false, false, false, "Snapping Pokémon", PokemonType.WATER, null, 0.3, 8.5, AbilityId.STRONG_JAW, AbilityId.SHELL_ARMOR, AbilityId.SWIFT_SWIM, 284, 50, 64, 50, 38, 38, 44, 255, 50, 57, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DREDNAW, 8, false, false, false, "Bite Pokémon", PokemonType.WATER, PokemonType.ROCK, 1, 115.5, AbilityId.STRONG_JAW, AbilityId.SHELL_ARMOR, AbilityId.SWIFT_SWIM, 485, 90, 115, 90, 48, 68, 74, 75, 50, 170, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.ROCK, 1, 115.5, AbilityId.STRONG_JAW, AbilityId.SHELL_ARMOR, AbilityId.SWIFT_SWIM, 485, 90, 115, 90, 48, 68, 74, 75, 50, 170, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, PokemonType.ROCK, 24, 999.9, AbilityId.STRONG_JAW, AbilityId.STRONG_JAW, AbilityId.STRONG_JAW, 585, 115, 137, 115, 61, 83, 74, 75, 50, 170), + ), + new PokemonSpecies(SpeciesId.YAMPER, 8, false, false, false, "Puppy Pokémon", PokemonType.ELECTRIC, null, 0.3, 13.5, AbilityId.BALL_FETCH, AbilityId.NONE, AbilityId.RATTLED, 270, 59, 45, 50, 40, 50, 26, 255, 50, 54, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.BOLTUND, 8, false, false, false, "Dog Pokémon", PokemonType.ELECTRIC, null, 1, 34, AbilityId.STRONG_JAW, AbilityId.NONE, AbilityId.COMPETITIVE, 490, 69, 90, 60, 90, 60, 121, 45, 50, 172, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.ROLYCOLY, 8, false, false, false, "Coal Pokémon", PokemonType.ROCK, null, 0.3, 12, AbilityId.STEAM_ENGINE, AbilityId.HEATPROOF, AbilityId.FLASH_FIRE, 240, 30, 40, 50, 40, 50, 30, 255, 50, 48, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.CARKOL, 8, false, false, false, "Coal Pokémon", PokemonType.ROCK, PokemonType.FIRE, 1.1, 78, AbilityId.STEAM_ENGINE, AbilityId.FLAME_BODY, AbilityId.FLASH_FIRE, 410, 80, 60, 90, 60, 70, 50, 120, 50, 144, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.COALOSSAL, 8, false, false, false, "Coal Pokémon", PokemonType.ROCK, PokemonType.FIRE, 2.8, 310.5, AbilityId.STEAM_ENGINE, AbilityId.FLAME_BODY, AbilityId.FLASH_FIRE, 510, 110, 80, 120, 80, 90, 30, 45, 50, 255, GrowthRate.MEDIUM_SLOW, 50, false, true, + new PokemonForm("Normal", "", PokemonType.ROCK, PokemonType.FIRE, 2.8, 310.5, AbilityId.STEAM_ENGINE, AbilityId.FLAME_BODY, AbilityId.FLASH_FIRE, 510, 110, 80, 120, 80, 90, 30, 45, 50, 255, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.ROCK, PokemonType.FIRE, 42, 999.9, AbilityId.STEAM_ENGINE, AbilityId.STEAM_ENGINE, AbilityId.STEAM_ENGINE, 610, 140, 100, 132, 95, 100, 43, 45, 50, 255), + ), + new PokemonSpecies(SpeciesId.APPLIN, 8, false, false, false, "Apple Core Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 0.2, 0.5, AbilityId.RIPEN, AbilityId.GLUTTONY, AbilityId.BULLETPROOF, 260, 40, 40, 80, 40, 40, 20, 255, 50, 52, GrowthRate.ERRATIC, 50, false), + new PokemonSpecies(SpeciesId.FLAPPLE, 8, false, false, false, "Apple Wing Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 0.3, 1, AbilityId.RIPEN, AbilityId.GLUTTONY, AbilityId.HUSTLE, 485, 70, 110, 80, 95, 60, 70, 45, 50, 170, GrowthRate.ERRATIC, 50, false, true, + new PokemonForm("Normal", "", PokemonType.GRASS, PokemonType.DRAGON, 0.3, 1, AbilityId.RIPEN, AbilityId.GLUTTONY, AbilityId.HUSTLE, 485, 70, 110, 80, 95, 60, 70, 45, 50, 170, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GRASS, PokemonType.DRAGON, 24, 999.9, AbilityId.HUSTLE, AbilityId.HUSTLE, AbilityId.HUSTLE, 585, 100, 125, 90, 105, 70, 95, 45, 50, 170), + ), + new PokemonSpecies(SpeciesId.APPLETUN, 8, false, false, false, "Apple Nectar Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 0.4, 13, AbilityId.RIPEN, AbilityId.GLUTTONY, AbilityId.THICK_FAT, 485, 110, 85, 80, 100, 80, 30, 45, 50, 170, GrowthRate.ERRATIC, 50, false, true, + new PokemonForm("Normal", "", PokemonType.GRASS, PokemonType.DRAGON, 0.4, 13, AbilityId.RIPEN, AbilityId.GLUTTONY, AbilityId.THICK_FAT, 485, 110, 85, 80, 100, 80, 30, 45, 50, 170, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GRASS, PokemonType.DRAGON, 24, 999.9, AbilityId.THICK_FAT, AbilityId.THICK_FAT, AbilityId.THICK_FAT, 585, 150, 100, 95, 115, 95, 30, 45, 50, 170), + ), + new PokemonSpecies(SpeciesId.SILICOBRA, 8, false, false, false, "Sand Snake Pokémon", PokemonType.GROUND, null, 2.2, 7.6, AbilityId.SAND_SPIT, AbilityId.SHED_SKIN, AbilityId.SAND_VEIL, 315, 52, 57, 75, 35, 50, 46, 255, 50, 63, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SANDACONDA, 8, false, false, false, "Sand Snake Pokémon", PokemonType.GROUND, null, 3.8, 65.5, AbilityId.SAND_SPIT, AbilityId.SHED_SKIN, AbilityId.SAND_VEIL, 510, 72, 107, 125, 65, 70, 71, 120, 50, 179, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.GROUND, null, 3.8, 65.5, AbilityId.SAND_SPIT, AbilityId.SHED_SKIN, AbilityId.SAND_VEIL, 510, 72, 107, 125, 65, 70, 71, 120, 50, 179, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GROUND, null, 22, 999.9, AbilityId.SAND_SPIT, AbilityId.SAND_SPIT, AbilityId.SAND_SPIT, 610, 102, 137, 140, 70, 80, 81, 120, 50, 179), + ), + new PokemonSpecies(SpeciesId.CRAMORANT, 8, false, false, false, "Gulp Pokémon", PokemonType.FLYING, PokemonType.WATER, 0.8, 18, AbilityId.GULP_MISSILE, AbilityId.NONE, AbilityId.NONE, 475, 70, 85, 55, 85, 95, 85, 45, 50, 166, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Normal", "", PokemonType.FLYING, PokemonType.WATER, 0.8, 18, AbilityId.GULP_MISSILE, AbilityId.NONE, AbilityId.NONE, 475, 70, 85, 55, 85, 95, 85, 45, 50, 166, false, null, true), + new PokemonForm("Gulping Form", "gulping", PokemonType.FLYING, PokemonType.WATER, 0.8, 18, AbilityId.GULP_MISSILE, AbilityId.NONE, AbilityId.NONE, 475, 70, 85, 55, 85, 95, 85, 45, 50, 166), + new PokemonForm("Gorging Form", "gorging", PokemonType.FLYING, PokemonType.WATER, 0.8, 18, AbilityId.GULP_MISSILE, AbilityId.NONE, AbilityId.NONE, 475, 70, 85, 55, 85, 95, 85, 45, 50, 166), + ), + new PokemonSpecies(SpeciesId.ARROKUDA, 8, false, false, false, "Rush Pokémon", PokemonType.WATER, null, 0.5, 1, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.PROPELLER_TAIL, 280, 41, 63, 40, 40, 30, 66, 255, 50, 56, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.BARRASKEWDA, 8, false, false, false, "Skewer Pokémon", PokemonType.WATER, null, 1.3, 30, AbilityId.SWIFT_SWIM, AbilityId.NONE, AbilityId.PROPELLER_TAIL, 490, 61, 123, 60, 60, 50, 136, 60, 50, 172, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.TOXEL, 8, false, false, false, "Baby Pokémon", PokemonType.ELECTRIC, PokemonType.POISON, 0.4, 11, AbilityId.RATTLED, AbilityId.STATIC, AbilityId.KLUTZ, 242, 40, 38, 35, 54, 35, 40, 75, 50, 48, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.TOXTRICITY, 8, false, false, false, "Punk Pokémon", PokemonType.ELECTRIC, PokemonType.POISON, 1.6, 40, AbilityId.PUNK_ROCK, AbilityId.PLUS, AbilityId.TECHNICIAN, 502, 75, 98, 70, 114, 70, 75, 45, 50, 176, GrowthRate.MEDIUM_SLOW, 50, false, true, + new PokemonForm("Amped Form", "amped", PokemonType.ELECTRIC, PokemonType.POISON, 1.6, 40, AbilityId.PUNK_ROCK, AbilityId.PLUS, AbilityId.TECHNICIAN, 502, 75, 98, 70, 114, 70, 75, 45, 50, 176, false, "", true), + new PokemonForm("Low-Key Form", "lowkey", PokemonType.ELECTRIC, PokemonType.POISON, 1.6, 40, AbilityId.PUNK_ROCK, AbilityId.MINUS, AbilityId.TECHNICIAN, 502, 75, 98, 70, 114, 70, 75, 45, 50, 176, false, "lowkey", true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.ELECTRIC, PokemonType.POISON, 24, 999.9, AbilityId.PUNK_ROCK, AbilityId.PUNK_ROCK, AbilityId.PUNK_ROCK, 602, 114, 105, 82, 137, 82, 82, 45, 50, 176), + ), + new PokemonSpecies(SpeciesId.SIZZLIPEDE, 8, false, false, false, "Radiator Pokémon", PokemonType.FIRE, PokemonType.BUG, 0.7, 1, AbilityId.FLASH_FIRE, AbilityId.WHITE_SMOKE, AbilityId.FLAME_BODY, 305, 50, 65, 45, 50, 50, 45, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CENTISKORCH, 8, false, false, false, "Radiator Pokémon", PokemonType.FIRE, PokemonType.BUG, 3, 120, AbilityId.FLASH_FIRE, AbilityId.WHITE_SMOKE, AbilityId.FLAME_BODY, 525, 100, 115, 65, 90, 90, 65, 75, 50, 184, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.FIRE, PokemonType.BUG, 3, 120, AbilityId.FLASH_FIRE, AbilityId.WHITE_SMOKE, AbilityId.FLAME_BODY, 525, 100, 115, 65, 90, 90, 65, 75, 50, 184, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FIRE, PokemonType.BUG, 75, 999.9, AbilityId.FLASH_FIRE, AbilityId.FLASH_FIRE, AbilityId.FLASH_FIRE, 625, 130, 125, 75, 94, 100, 101, 75, 50, 184), + ), + new PokemonSpecies(SpeciesId.CLOBBOPUS, 8, false, false, false, "Tantrum Pokémon", PokemonType.FIGHTING, null, 0.6, 4, AbilityId.LIMBER, AbilityId.NONE, AbilityId.TECHNICIAN, 310, 50, 68, 60, 50, 50, 32, 180, 50, 62, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.GRAPPLOCT, 8, false, false, false, "Jujitsu Pokémon", PokemonType.FIGHTING, null, 1.6, 39, AbilityId.LIMBER, AbilityId.NONE, AbilityId.TECHNICIAN, 480, 80, 118, 90, 70, 80, 42, 45, 50, 168, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.SINISTEA, 8, false, false, false, "Black Tea Pokémon", PokemonType.GHOST, null, 0.1, 0.2, AbilityId.WEAK_ARMOR, AbilityId.NONE, AbilityId.CURSED_BODY, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, GrowthRate.MEDIUM_FAST, null, false, false, + new PokemonForm("Phony Form", "phony", PokemonType.GHOST, null, 0.1, 0.2, AbilityId.WEAK_ARMOR, AbilityId.NONE, AbilityId.CURSED_BODY, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, "", true), + new PokemonForm("Antique Form", "antique", PokemonType.GHOST, null, 0.1, 0.2, AbilityId.WEAK_ARMOR, AbilityId.NONE, AbilityId.CURSED_BODY, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, "", true, true), + ), + new PokemonSpecies(SpeciesId.POLTEAGEIST, 8, false, false, false, "Black Tea Pokémon", PokemonType.GHOST, null, 0.2, 0.4, AbilityId.WEAK_ARMOR, AbilityId.NONE, AbilityId.CURSED_BODY, 508, 60, 65, 65, 134, 114, 70, 60, 50, 178, GrowthRate.MEDIUM_FAST, null, false, false, + new PokemonForm("Phony Form", "phony", PokemonType.GHOST, null, 0.2, 0.4, AbilityId.WEAK_ARMOR, AbilityId.NONE, AbilityId.CURSED_BODY, 508, 60, 65, 65, 134, 114, 70, 60, 50, 178, false, "", true), + new PokemonForm("Antique Form", "antique", PokemonType.GHOST, null, 0.2, 0.4, AbilityId.WEAK_ARMOR, AbilityId.NONE, AbilityId.CURSED_BODY, 508, 60, 65, 65, 134, 114, 70, 60, 50, 178, false, "", true, true), + ), + new PokemonSpecies(SpeciesId.HATENNA, 8, false, false, false, "Calm Pokémon", PokemonType.PSYCHIC, null, 0.4, 3.4, AbilityId.HEALER, AbilityId.ANTICIPATION, AbilityId.MAGIC_BOUNCE, 265, 42, 30, 45, 56, 53, 39, 235, 50, 53, GrowthRate.SLOW, 0, false), + new PokemonSpecies(SpeciesId.HATTREM, 8, false, false, false, "Serene Pokémon", PokemonType.PSYCHIC, null, 0.6, 4.8, AbilityId.HEALER, AbilityId.ANTICIPATION, AbilityId.MAGIC_BOUNCE, 370, 57, 40, 65, 86, 73, 49, 120, 50, 130, GrowthRate.SLOW, 0, false), + new PokemonSpecies(SpeciesId.HATTERENE, 8, false, false, false, "Silent Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 2.1, 5.1, AbilityId.HEALER, AbilityId.ANTICIPATION, AbilityId.MAGIC_BOUNCE, 510, 57, 90, 95, 136, 103, 29, 45, 50, 255, GrowthRate.SLOW, 0, false, true, + new PokemonForm("Normal", "", PokemonType.PSYCHIC, PokemonType.FAIRY, 2.1, 5.1, AbilityId.HEALER, AbilityId.ANTICIPATION, AbilityId.MAGIC_BOUNCE, 510, 57, 90, 95, 136, 103, 29, 45, 50, 255, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.PSYCHIC, PokemonType.FAIRY, 26, 999.9, AbilityId.MAGIC_BOUNCE, AbilityId.MAGIC_BOUNCE, AbilityId.MAGIC_BOUNCE, 610, 87, 100, 110, 146, 118, 49, 45, 50, 255), + ), + new PokemonSpecies(SpeciesId.IMPIDIMP, 8, false, false, false, "Wily Pokémon", PokemonType.DARK, PokemonType.FAIRY, 0.4, 5.5, AbilityId.PRANKSTER, AbilityId.FRISK, AbilityId.PICKPOCKET, 265, 45, 45, 30, 55, 40, 50, 255, 50, 53, GrowthRate.MEDIUM_FAST, 100, false), + new PokemonSpecies(SpeciesId.MORGREM, 8, false, false, false, "Devious Pokémon", PokemonType.DARK, PokemonType.FAIRY, 0.8, 12.5, AbilityId.PRANKSTER, AbilityId.FRISK, AbilityId.PICKPOCKET, 370, 65, 60, 45, 75, 55, 70, 120, 50, 130, GrowthRate.MEDIUM_FAST, 100, false), + new PokemonSpecies(SpeciesId.GRIMMSNARL, 8, false, false, false, "Bulk Up Pokémon", PokemonType.DARK, PokemonType.FAIRY, 1.5, 61, AbilityId.PRANKSTER, AbilityId.FRISK, AbilityId.PICKPOCKET, 510, 95, 120, 65, 95, 75, 60, 45, 50, 255, GrowthRate.MEDIUM_FAST, 100, false, true, + new PokemonForm("Normal", "", PokemonType.DARK, PokemonType.FAIRY, 1.5, 61, AbilityId.PRANKSTER, AbilityId.FRISK, AbilityId.PICKPOCKET, 510, 95, 120, 65, 95, 75, 60, 45, 50, 255, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.DARK, PokemonType.FAIRY, 32, 999.9, AbilityId.PRANKSTER, AbilityId.PRANKSTER, AbilityId.PRANKSTER, 610, 130, 138, 75, 110, 92, 65, 45, 50, 255), + ), + new PokemonSpecies(SpeciesId.OBSTAGOON, 8, false, false, false, "Blocking Pokémon", PokemonType.DARK, PokemonType.NORMAL, 1.6, 46, AbilityId.RECKLESS, AbilityId.GUTS, AbilityId.DEFIANT, 520, 93, 90, 101, 60, 81, 95, 45, 50, 260, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PERRSERKER, 8, false, false, false, "Viking Pokémon", PokemonType.STEEL, null, 0.8, 28, AbilityId.BATTLE_ARMOR, AbilityId.TOUGH_CLAWS, AbilityId.STEELY_SPIRIT, 440, 70, 110, 100, 50, 60, 50, 90, 50, 154, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CURSOLA, 8, false, false, false, "Coral Pokémon", PokemonType.GHOST, null, 1, 0.4, AbilityId.WEAK_ARMOR, AbilityId.NONE, AbilityId.PERISH_BODY, 510, 60, 95, 50, 145, 130, 30, 30, 50, 179, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.SIRFETCHD, 8, false, false, false, "Wild Duck Pokémon", PokemonType.FIGHTING, null, 0.8, 117, AbilityId.STEADFAST, AbilityId.NONE, AbilityId.SCRAPPY, 507, 62, 135, 95, 68, 82, 65, 45, 50, 177, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MR_RIME, 8, false, false, false, "Comedian Pokémon", PokemonType.ICE, PokemonType.PSYCHIC, 1.5, 58.2, AbilityId.TANGLED_FEET, AbilityId.SCREEN_CLEANER, AbilityId.ICE_BODY, 520, 80, 85, 75, 110, 100, 70, 45, 50, 182, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.RUNERIGUS, 8, false, false, false, "Grudge Pokémon", PokemonType.GROUND, PokemonType.GHOST, 1.6, 66.6, AbilityId.WANDERING_SPIRIT, AbilityId.NONE, AbilityId.NONE, 483, 58, 95, 145, 50, 105, 30, 90, 50, 169, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.MILCERY, 8, false, false, false, "Cream Pokémon", PokemonType.FAIRY, null, 0.2, 0.3, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 270, 45, 40, 40, 50, 61, 34, 200, 50, 54, GrowthRate.MEDIUM_FAST, 0, false), + new PokemonSpecies(SpeciesId.ALCREMIE, 8, false, false, false, "Cream Pokémon", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, GrowthRate.MEDIUM_FAST, 0, false, true, + new PokemonForm("Vanilla Cream", "vanilla-cream", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, "", true), + new PokemonForm("Ruby Cream", "ruby-cream", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), + new PokemonForm("Matcha Cream", "matcha-cream", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), + new PokemonForm("Mint Cream", "mint-cream", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), + new PokemonForm("Lemon Cream", "lemon-cream", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), + new PokemonForm("Salted Cream", "salted-cream", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), + new PokemonForm("Ruby Swirl", "ruby-swirl", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), + new PokemonForm("Caramel Swirl", "caramel-swirl", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), + new PokemonForm("Rainbow Swirl", "rainbow-swirl", PokemonType.FAIRY, null, 0.3, 0.5, AbilityId.SWEET_VEIL, AbilityId.NONE, AbilityId.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FAIRY, null, 30, 999.9, AbilityId.MISTY_SURGE, AbilityId.NONE, AbilityId.MISTY_SURGE, 595, 105, 70, 85, 130, 141, 64, 100, 50, 173), + ), + new PokemonSpecies(SpeciesId.FALINKS, 8, false, false, false, "Formation Pokémon", PokemonType.FIGHTING, null, 3, 62, AbilityId.BATTLE_ARMOR, AbilityId.NONE, AbilityId.DEFIANT, 470, 65, 100, 100, 70, 60, 75, 45, 50, 165, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.PINCURCHIN, 8, false, false, false, "Sea Urchin Pokémon", PokemonType.ELECTRIC, null, 0.3, 1, AbilityId.LIGHTNING_ROD, AbilityId.NONE, AbilityId.ELECTRIC_SURGE, 435, 48, 101, 95, 91, 85, 15, 75, 50, 152, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SNOM, 8, false, false, false, "Worm Pokémon", PokemonType.ICE, PokemonType.BUG, 0.3, 3.8, AbilityId.SHIELD_DUST, AbilityId.NONE, AbilityId.ICE_SCALES, 185, 30, 25, 35, 45, 30, 20, 190, 50, 37, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.FROSMOTH, 8, false, false, false, "Frost Moth Pokémon", PokemonType.ICE, PokemonType.BUG, 1.3, 42, AbilityId.SHIELD_DUST, AbilityId.NONE, AbilityId.ICE_SCALES, 475, 70, 65, 60, 125, 90, 65, 75, 50, 166, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.STONJOURNER, 8, false, false, false, "Big Rock Pokémon", PokemonType.ROCK, null, 2.5, 520, AbilityId.POWER_SPOT, AbilityId.NONE, AbilityId.NONE, 470, 100, 125, 135, 20, 20, 70, 60, 50, 165, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.EISCUE, 8, false, false, false, "Penguin Pokémon", PokemonType.ICE, null, 1.4, 89, AbilityId.ICE_FACE, AbilityId.NONE, AbilityId.NONE, 470, 75, 80, 110, 65, 90, 50, 60, 50, 165, GrowthRate.SLOW, 50, false, false, + new PokemonForm("Ice Face", "", PokemonType.ICE, null, 1.4, 89, AbilityId.ICE_FACE, AbilityId.NONE, AbilityId.NONE, 470, 75, 80, 110, 65, 90, 50, 60, 50, 165, false, null, true), + new PokemonForm("No Ice", "no-ice", PokemonType.ICE, null, 1.4, 89, AbilityId.ICE_FACE, AbilityId.NONE, AbilityId.NONE, 470, 75, 80, 70, 65, 50, 130, 60, 50, 165), + ), + new PokemonSpecies(SpeciesId.INDEEDEE, 8, false, false, false, "Emotion Pokémon", PokemonType.PSYCHIC, PokemonType.NORMAL, 0.9, 28, AbilityId.INNER_FOCUS, AbilityId.SYNCHRONIZE, AbilityId.PSYCHIC_SURGE, 475, 60, 65, 55, 105, 95, 95, 30, 140, 166, GrowthRate.FAST, 50, false, false, + new PokemonForm("Male", "male", PokemonType.PSYCHIC, PokemonType.NORMAL, 0.9, 28, AbilityId.INNER_FOCUS, AbilityId.SYNCHRONIZE, AbilityId.PSYCHIC_SURGE, 475, 60, 65, 55, 105, 95, 95, 30, 140, 166, false, "", true), + new PokemonForm("Female", "female", PokemonType.PSYCHIC, PokemonType.NORMAL, 0.9, 28, AbilityId.OWN_TEMPO, AbilityId.SYNCHRONIZE, AbilityId.PSYCHIC_SURGE, 475, 70, 55, 65, 95, 105, 85, 30, 140, 166, false, null, true), + ), + new PokemonSpecies(SpeciesId.MORPEKO, 8, false, false, false, "Two-Sided Pokémon", PokemonType.ELECTRIC, PokemonType.DARK, 0.3, 3, AbilityId.HUNGER_SWITCH, AbilityId.NONE, AbilityId.NONE, 436, 58, 95, 58, 70, 58, 97, 180, 50, 153, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Full Belly Mode", "full-belly", PokemonType.ELECTRIC, PokemonType.DARK, 0.3, 3, AbilityId.HUNGER_SWITCH, AbilityId.NONE, AbilityId.NONE, 436, 58, 95, 58, 70, 58, 97, 180, 50, 153, false, "", true), + new PokemonForm("Hangry Mode", "hangry", PokemonType.ELECTRIC, PokemonType.DARK, 0.3, 3, AbilityId.HUNGER_SWITCH, AbilityId.NONE, AbilityId.NONE, 436, 58, 95, 58, 70, 58, 97, 180, 50, 153), + ), + new PokemonSpecies(SpeciesId.CUFANT, 8, false, false, false, "Copperderm Pokémon", PokemonType.STEEL, null, 1.2, 100, AbilityId.SHEER_FORCE, AbilityId.NONE, AbilityId.HEAVY_METAL, 330, 72, 80, 49, 40, 49, 40, 190, 50, 66, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.COPPERAJAH, 8, false, false, false, "Copperderm Pokémon", PokemonType.STEEL, null, 3, 650, AbilityId.SHEER_FORCE, AbilityId.NONE, AbilityId.HEAVY_METAL, 500, 122, 130, 69, 80, 69, 30, 90, 50, 175, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.STEEL, null, 3, 650, AbilityId.SHEER_FORCE, AbilityId.NONE, AbilityId.HEAVY_METAL, 500, 122, 130, 69, 80, 69, 30, 90, 50, 175, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.STEEL, PokemonType.GROUND, 23, 999.9, AbilityId.MOLD_BREAKER, AbilityId.NONE, AbilityId.MOLD_BREAKER, 600, 177, 155, 79, 90, 79, 20, 90, 50, 175), + ), + new PokemonSpecies(SpeciesId.DRACOZOLT, 8, false, false, false, "Fossil Pokémon", PokemonType.ELECTRIC, PokemonType.DRAGON, 1.8, 190, AbilityId.VOLT_ABSORB, AbilityId.HUSTLE, AbilityId.SAND_RUSH, 505, 90, 100, 90, 80, 70, 75, 45, 50, 177, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.ARCTOZOLT, 8, false, false, false, "Fossil Pokémon", PokemonType.ELECTRIC, PokemonType.ICE, 2.3, 150, AbilityId.VOLT_ABSORB, AbilityId.STATIC, AbilityId.SLUSH_RUSH, 505, 90, 100, 90, 90, 80, 55, 45, 50, 177, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.DRACOVISH, 8, false, false, false, "Fossil Pokémon", PokemonType.WATER, PokemonType.DRAGON, 2.3, 215, AbilityId.WATER_ABSORB, AbilityId.STRONG_JAW, AbilityId.SAND_RUSH, 505, 90, 90, 100, 70, 80, 75, 45, 50, 177, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.ARCTOVISH, 8, false, false, false, "Fossil Pokémon", PokemonType.WATER, PokemonType.ICE, 2, 175, AbilityId.WATER_ABSORB, AbilityId.ICE_BODY, AbilityId.SLUSH_RUSH, 505, 90, 90, 100, 80, 90, 55, 45, 50, 177, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.DURALUDON, 8, false, false, false, "Alloy Pokémon", PokemonType.STEEL, PokemonType.DRAGON, 1.8, 40, AbilityId.LIGHT_METAL, AbilityId.HEAVY_METAL, AbilityId.STALWART, 535, 70, 95, 115, 120, 50, 85, 45, 50, 187, GrowthRate.MEDIUM_FAST, 50, false, true, + new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.DRAGON, 1.8, 40, AbilityId.LIGHT_METAL, AbilityId.HEAVY_METAL, AbilityId.STALWART, 535, 70, 95, 115, 120, 50, 85, 45, 50, 187, false, null, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.STEEL, PokemonType.DRAGON, 43, 999.9, AbilityId.LIGHTNING_ROD, AbilityId.LIGHTNING_ROD, AbilityId.LIGHTNING_ROD, 635, 100, 110, 120, 175, 60, 70, 45, 50, 187), + ), + new PokemonSpecies(SpeciesId.DREEPY, 8, false, false, false, "Lingering Pokémon", PokemonType.DRAGON, PokemonType.GHOST, 0.5, 2, AbilityId.CLEAR_BODY, AbilityId.INFILTRATOR, AbilityId.CURSED_BODY, 270, 28, 60, 30, 40, 30, 82, 45, 50, 54, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.DRAKLOAK, 8, false, false, false, "Caretaker Pokémon", PokemonType.DRAGON, PokemonType.GHOST, 1.4, 11, AbilityId.CLEAR_BODY, AbilityId.INFILTRATOR, AbilityId.CURSED_BODY, 410, 68, 80, 50, 60, 50, 102, 45, 50, 144, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.DRAGAPULT, 8, false, false, false, "Stealth Pokémon", PokemonType.DRAGON, PokemonType.GHOST, 3, 50, AbilityId.CLEAR_BODY, AbilityId.INFILTRATOR, AbilityId.CURSED_BODY, 600, 88, 120, 75, 100, 75, 142, 45, 50, 300, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.ZACIAN, 8, false, true, false, "Warrior Pokémon", PokemonType.FAIRY, null, 2.8, 110, AbilityId.INTREPID_SWORD, AbilityId.NONE, AbilityId.NONE, 660, 92, 120, 115, 80, 115, 138, 10, 0, 335, GrowthRate.SLOW, null, false, false, + new PokemonForm("Hero of Many Battles", "hero-of-many-battles", PokemonType.FAIRY, null, 2.8, 110, AbilityId.INTREPID_SWORD, AbilityId.NONE, AbilityId.NONE, 660, 92, 120, 115, 80, 115, 138, 10, 0, 335, false, "", true), + new PokemonForm("Crowned", "crowned", PokemonType.FAIRY, PokemonType.STEEL, 2.8, 355, AbilityId.INTREPID_SWORD, AbilityId.NONE, AbilityId.NONE, 700, 92, 150, 115, 80, 115, 148, 10, 0, 360), + ), + new PokemonSpecies(SpeciesId.ZAMAZENTA, 8, false, true, false, "Warrior Pokémon", PokemonType.FIGHTING, null, 2.9, 210, AbilityId.DAUNTLESS_SHIELD, AbilityId.NONE, AbilityId.NONE, 660, 92, 120, 115, 80, 115, 138, 10, 0, 335, GrowthRate.SLOW, null, false, false, + new PokemonForm("Hero of Many Battles", "hero-of-many-battles", PokemonType.FIGHTING, null, 2.9, 210, AbilityId.DAUNTLESS_SHIELD, AbilityId.NONE, AbilityId.NONE, 660, 92, 120, 115, 80, 115, 138, 10, 0, 335, false, "", true), + new PokemonForm("Crowned", "crowned", PokemonType.FIGHTING, PokemonType.STEEL, 2.9, 785, AbilityId.DAUNTLESS_SHIELD, AbilityId.NONE, AbilityId.NONE, 700, 92, 120, 140, 80, 140, 128, 10, 0, 360), + ), + new PokemonSpecies(SpeciesId.ETERNATUS, 8, false, true, false, "Gigantic Pokémon", PokemonType.POISON, PokemonType.DRAGON, 20, 950, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 690, 140, 85, 95, 145, 95, 130, 255, 0, 345, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal", "", PokemonType.POISON, PokemonType.DRAGON, 20, 950, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 690, 140, 85, 95, 145, 95, 130, 255, 0, 345, false, null, true), + new PokemonForm("E-Max", "eternamax", PokemonType.POISON, PokemonType.DRAGON, 100, 999.9, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 1125, 255, 115, 250, 125, 250, 130, 255, 0, 345), + ), + new PokemonSpecies(SpeciesId.KUBFU, 8, true, false, false, "Wushu Pokémon", PokemonType.FIGHTING, null, 0.6, 12, AbilityId.INNER_FOCUS, AbilityId.NONE, AbilityId.NONE, 385, 60, 90, 60, 53, 50, 72, 3, 50, 77, GrowthRate.SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.URSHIFU, 8, true, false, false, "Wushu Pokémon", PokemonType.FIGHTING, PokemonType.DARK, 1.9, 105, AbilityId.UNSEEN_FIST, AbilityId.NONE, AbilityId.NONE, 550, 100, 130, 100, 63, 60, 97, 3, 50, 275, GrowthRate.SLOW, 87.5, false, true, + new PokemonForm("Single Strike Style", "single-strike", PokemonType.FIGHTING, PokemonType.DARK, 1.9, 105, AbilityId.UNSEEN_FIST, AbilityId.NONE, AbilityId.NONE, 550, 100, 130, 100, 63, 60, 97, 3, 50, 275, false, "", true), + new PokemonForm("Rapid Strike Style", "rapid-strike", PokemonType.FIGHTING, PokemonType.WATER, 1.9, 105, AbilityId.UNSEEN_FIST, AbilityId.NONE, AbilityId.NONE, 550, 100, 130, 100, 63, 60, 97, 3, 50, 275, false, null, true), + new PokemonForm("G-Max Single Strike Style", SpeciesFormKey.GIGANTAMAX_SINGLE, PokemonType.FIGHTING, PokemonType.DARK, 29, 999.9, AbilityId.UNSEEN_FIST, AbilityId.NONE, AbilityId.NONE, 650, 125, 145, 115, 83, 70, 112, 3, 50, 275), + new PokemonForm("G-Max Rapid Strike Style", SpeciesFormKey.GIGANTAMAX_RAPID, PokemonType.FIGHTING, PokemonType.WATER, 26, 999.9, AbilityId.UNSEEN_FIST, AbilityId.NONE, AbilityId.NONE, 650, 125, 145, 115, 83, 70, 112, 3, 50, 275), + ), + new PokemonSpecies(SpeciesId.ZARUDE, 8, false, false, true, "Rogue Monkey Pokémon", PokemonType.DARK, PokemonType.GRASS, 1.8, 70, AbilityId.LEAF_GUARD, AbilityId.NONE, AbilityId.NONE, 600, 105, 120, 105, 70, 95, 105, 3, 0, 300, GrowthRate.SLOW, null, false, false, + new PokemonForm("Normal", "", PokemonType.DARK, PokemonType.GRASS, 1.8, 70, AbilityId.LEAF_GUARD, AbilityId.NONE, AbilityId.NONE, 600, 105, 120, 105, 70, 95, 105, 3, 0, 300, false, null, true), + new PokemonForm("Dada", "dada", PokemonType.DARK, PokemonType.GRASS, 1.8, 70, AbilityId.LEAF_GUARD, AbilityId.NONE, AbilityId.NONE, 600, 105, 120, 105, 70, 95, 105, 3, 0, 300, false, null, true), + ), + new PokemonSpecies(SpeciesId.REGIELEKI, 8, true, false, false, "Electron Pokémon", PokemonType.ELECTRIC, null, 1.2, 145, AbilityId.TRANSISTOR, AbilityId.NONE, AbilityId.NONE, 580, 80, 100, 50, 100, 50, 200, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.REGIDRAGO, 8, true, false, false, "Dragon Orb Pokémon", PokemonType.DRAGON, null, 2.1, 200, AbilityId.DRAGONS_MAW, AbilityId.NONE, AbilityId.NONE, 580, 200, 100, 50, 100, 50, 80, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.GLASTRIER, 8, true, false, false, "Wild Horse Pokémon", PokemonType.ICE, null, 2.2, 800, AbilityId.CHILLING_NEIGH, AbilityId.NONE, AbilityId.NONE, 580, 100, 145, 130, 65, 110, 30, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.SPECTRIER, 8, true, false, false, "Swift Horse Pokémon", PokemonType.GHOST, null, 2, 44.5, AbilityId.GRIM_NEIGH, AbilityId.NONE, AbilityId.NONE, 580, 100, 65, 60, 145, 80, 130, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.CALYREX, 8, false, true, false, "King Pokémon", PokemonType.PSYCHIC, PokemonType.GRASS, 1.1, 7.7, AbilityId.UNNERVE, AbilityId.NONE, AbilityId.NONE, 500, 100, 80, 80, 80, 80, 80, 3, 100, 250, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal", "", PokemonType.PSYCHIC, PokemonType.GRASS, 1.1, 7.7, AbilityId.UNNERVE, AbilityId.NONE, AbilityId.NONE, 500, 100, 80, 80, 80, 80, 80, 3, 100, 250, false, null, true), + new PokemonForm("Ice", "ice", PokemonType.PSYCHIC, PokemonType.ICE, 2.4, 809.1, AbilityId.AS_ONE_GLASTRIER, AbilityId.NONE, AbilityId.NONE, 680, 100, 165, 150, 85, 130, 50, 3, 100, 340), + new PokemonForm("Shadow", "shadow", PokemonType.PSYCHIC, PokemonType.GHOST, 2.4, 53.6, AbilityId.AS_ONE_SPECTRIER, AbilityId.NONE, AbilityId.NONE, 680, 100, 85, 80, 165, 100, 150, 3, 100, 340), + ), + new PokemonSpecies(SpeciesId.WYRDEER, 8, false, false, false, "Big Horn Pokémon", PokemonType.NORMAL, PokemonType.PSYCHIC, 1.8, 95.1, AbilityId.INTIMIDATE, AbilityId.FRISK, AbilityId.SAP_SIPPER, 525, 103, 105, 72, 105, 75, 65, 135, 50, 263, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.KLEAVOR, 8, false, false, false, "Axe Pokémon", PokemonType.BUG, PokemonType.ROCK, 1.8, 89, AbilityId.SWARM, AbilityId.SHEER_FORCE, AbilityId.SHARPNESS, 500, 70, 135, 95, 45, 70, 85, 115, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.URSALUNA, 8, false, false, false, "Peat Pokémon", PokemonType.GROUND, PokemonType.NORMAL, 2.4, 290, AbilityId.GUTS, AbilityId.BULLETPROOF, AbilityId.UNNERVE, 550, 130, 140, 105, 45, 80, 50, 75, 50, 275, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BASCULEGION, 8, false, false, false, "Big Fish Pokémon", PokemonType.WATER, PokemonType.GHOST, 3, 110, AbilityId.SWIFT_SWIM, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 530, 120, 112, 65, 80, 75, 78, 135, 50, 265, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Male", "male", PokemonType.WATER, PokemonType.GHOST, 3, 110, AbilityId.SWIFT_SWIM, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 530, 120, 112, 65, 80, 75, 78, 135, 50, 265, false, "", true), + new PokemonForm("Female", "female", PokemonType.WATER, PokemonType.GHOST, 3, 110, AbilityId.SWIFT_SWIM, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 530, 120, 92, 65, 100, 75, 78, 135, 50, 265, false, null, true), + ), + new PokemonSpecies(SpeciesId.SNEASLER, 8, false, false, false, "Free Climb Pokémon", PokemonType.FIGHTING, PokemonType.POISON, 1.3, 43, AbilityId.PRESSURE, AbilityId.UNBURDEN, AbilityId.POISON_TOUCH, 510, 80, 130, 60, 40, 80, 120, 135, 50, 102, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.OVERQWIL, 8, false, false, false, "Pin Cluster Pokémon", PokemonType.DARK, PokemonType.POISON, 2.5, 60.5, AbilityId.POISON_POINT, AbilityId.SWIFT_SWIM, AbilityId.INTIMIDATE, 510, 85, 115, 95, 65, 65, 85, 135, 50, 179, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ENAMORUS, 8, true, false, false, "Love-Hate Pokémon", PokemonType.FAIRY, PokemonType.FLYING, 1.6, 48, AbilityId.CUTE_CHARM, AbilityId.NONE, AbilityId.CONTRARY, 580, 74, 115, 70, 135, 80, 106, 3, 50, 116, GrowthRate.SLOW, 0, false, true, + new PokemonForm("Incarnate Forme", "incarnate", PokemonType.FAIRY, PokemonType.FLYING, 1.6, 48, AbilityId.CUTE_CHARM, AbilityId.NONE, AbilityId.CONTRARY, 580, 74, 115, 70, 135, 80, 106, 3, 50, 116, false, null, true), + new PokemonForm("Therian Forme", "therian", PokemonType.FAIRY, PokemonType.FLYING, 1.6, 48, AbilityId.OVERCOAT, AbilityId.NONE, AbilityId.OVERCOAT, 580, 74, 115, 110, 135, 100, 46, 3, 50, 116), + ), + new PokemonSpecies(SpeciesId.SPRIGATITO, 9, false, false, false, "Grass Cat Pokémon", PokemonType.GRASS, null, 0.4, 4.1, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.PROTEAN, 310, 40, 61, 54, 45, 45, 65, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.FLORAGATO, 9, false, false, false, "Grass Cat Pokémon", PokemonType.GRASS, null, 0.9, 12.2, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.PROTEAN, 410, 61, 80, 63, 60, 63, 83, 45, 50, 144, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.MEOWSCARADA, 9, false, false, false, "Magician Pokémon", PokemonType.GRASS, PokemonType.DARK, 1.5, 31.2, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.PROTEAN, 530, 76, 110, 70, 81, 70, 123, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.FUECOCO, 9, false, false, false, "Fire Croc Pokémon", PokemonType.FIRE, null, 0.4, 9.8, AbilityId.BLAZE, AbilityId.NONE, AbilityId.UNAWARE, 310, 67, 45, 59, 63, 40, 36, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.CROCALOR, 9, false, false, false, "Fire Croc Pokémon", PokemonType.FIRE, null, 1, 30.7, AbilityId.BLAZE, AbilityId.NONE, AbilityId.UNAWARE, 411, 81, 55, 78, 90, 58, 49, 45, 50, 144, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.SKELEDIRGE, 9, false, false, false, "Singer Pokémon", PokemonType.FIRE, PokemonType.GHOST, 1.6, 326.5, AbilityId.BLAZE, AbilityId.NONE, AbilityId.UNAWARE, 530, 104, 75, 100, 110, 75, 66, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.QUAXLY, 9, false, false, false, "Duckling Pokémon", PokemonType.WATER, null, 0.5, 6.1, AbilityId.TORRENT, AbilityId.NONE, AbilityId.MOXIE, 310, 55, 65, 45, 50, 45, 50, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.QUAXWELL, 9, false, false, false, "Practicing Pokémon", PokemonType.WATER, null, 1.2, 21.5, AbilityId.TORRENT, AbilityId.NONE, AbilityId.MOXIE, 410, 70, 85, 65, 65, 60, 65, 45, 50, 144, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.QUAQUAVAL, 9, false, false, false, "Dancer Pokémon", PokemonType.WATER, PokemonType.FIGHTING, 1.8, 61.9, AbilityId.TORRENT, AbilityId.NONE, AbilityId.MOXIE, 530, 85, 120, 80, 85, 75, 85, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.LECHONK, 9, false, false, false, "Hog Pokémon", PokemonType.NORMAL, null, 0.5, 10.2, AbilityId.AROMA_VEIL, AbilityId.GLUTTONY, AbilityId.THICK_FAT, 254, 54, 45, 40, 35, 45, 35, 255, 50, 51, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.OINKOLOGNE, 9, false, false, false, "Hog Pokémon", PokemonType.NORMAL, null, 1, 120, AbilityId.LINGERING_AROMA, AbilityId.GLUTTONY, AbilityId.THICK_FAT, 489, 110, 100, 75, 59, 80, 65, 100, 50, 171, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Male", "male", PokemonType.NORMAL, null, 1, 120, AbilityId.LINGERING_AROMA, AbilityId.GLUTTONY, AbilityId.THICK_FAT, 489, 110, 100, 75, 59, 80, 65, 100, 50, 171, false, "", true), + new PokemonForm("Female", "female", PokemonType.NORMAL, null, 1, 120, AbilityId.AROMA_VEIL, AbilityId.GLUTTONY, AbilityId.THICK_FAT, 489, 115, 90, 70, 59, 90, 65, 100, 50, 171, false, null, true), + ), + new PokemonSpecies(SpeciesId.TAROUNTULA, 9, false, false, false, "String Ball Pokémon", PokemonType.BUG, null, 0.3, 4, AbilityId.INSOMNIA, AbilityId.NONE, AbilityId.STAKEOUT, 210, 35, 41, 45, 29, 40, 20, 255, 50, 42, GrowthRate.ERRATIC, 50, false), + new PokemonSpecies(SpeciesId.SPIDOPS, 9, false, false, false, "Trap Pokémon", PokemonType.BUG, null, 1, 16.5, AbilityId.INSOMNIA, AbilityId.NONE, AbilityId.STAKEOUT, 404, 60, 79, 92, 52, 86, 35, 120, 50, 141, GrowthRate.ERRATIC, 50, false), + new PokemonSpecies(SpeciesId.NYMBLE, 9, false, false, false, "Grasshopper Pokémon", PokemonType.BUG, null, 0.2, 1, AbilityId.SWARM, AbilityId.NONE, AbilityId.TINTED_LENS, 210, 33, 46, 40, 21, 25, 45, 190, 20, 42, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.LOKIX, 9, false, false, false, "Grasshopper Pokémon", PokemonType.BUG, PokemonType.DARK, 1, 17.5, AbilityId.SWARM, AbilityId.NONE, AbilityId.TINTED_LENS, 450, 71, 102, 78, 52, 55, 92, 30, 0, 158, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PAWMI, 9, false, false, false, "Mouse Pokémon", PokemonType.ELECTRIC, null, 0.3, 2.5, AbilityId.STATIC, AbilityId.NATURAL_CURE, AbilityId.IRON_FIST, 240, 45, 50, 20, 40, 25, 60, 190, 50, 48, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PAWMO, 9, false, false, false, "Mouse Pokémon", PokemonType.ELECTRIC, PokemonType.FIGHTING, 0.4, 6.5, AbilityId.VOLT_ABSORB, AbilityId.NATURAL_CURE, AbilityId.IRON_FIST, 350, 60, 75, 40, 50, 40, 85, 80, 50, 123, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.PAWMOT, 9, false, false, false, "Hands-On Pokémon", PokemonType.ELECTRIC, PokemonType.FIGHTING, 0.9, 41, AbilityId.VOLT_ABSORB, AbilityId.NATURAL_CURE, AbilityId.IRON_FIST, 490, 70, 115, 70, 70, 60, 105, 45, 50, 245, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.TANDEMAUS, 9, false, false, false, "Couple Pokémon", PokemonType.NORMAL, null, 0.3, 1.8, AbilityId.RUN_AWAY, AbilityId.PICKUP, AbilityId.OWN_TEMPO, 305, 50, 50, 45, 40, 45, 75, 150, 50, 61, GrowthRate.FAST, null, false), + new PokemonSpecies(SpeciesId.MAUSHOLD, 9, false, false, false, "Family Pokémon", PokemonType.NORMAL, null, 0.3, 2.3, AbilityId.FRIEND_GUARD, AbilityId.CHEEK_POUCH, AbilityId.TECHNICIAN, 470, 74, 75, 70, 65, 75, 111, 75, 50, 165, GrowthRate.FAST, null, false, false, + new PokemonForm("Family of Four", "four", PokemonType.NORMAL, null, 0.3, 2.8, AbilityId.FRIEND_GUARD, AbilityId.CHEEK_POUCH, AbilityId.TECHNICIAN, 470, 74, 75, 70, 65, 75, 111, 75, 50, 165), + new PokemonForm("Family of Three", "three", PokemonType.NORMAL, null, 0.3, 2.3, AbilityId.FRIEND_GUARD, AbilityId.CHEEK_POUCH, AbilityId.TECHNICIAN, 470, 74, 75, 70, 65, 75, 111, 75, 50, 165), + ), + new PokemonSpecies(SpeciesId.FIDOUGH, 9, false, false, false, "Puppy Pokémon", PokemonType.FAIRY, null, 0.3, 10.9, AbilityId.OWN_TEMPO, AbilityId.NONE, AbilityId.KLUTZ, 312, 37, 55, 70, 30, 55, 65, 190, 50, 62, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.DACHSBUN, 9, false, false, false, "Dog Pokémon", PokemonType.FAIRY, null, 0.5, 14.9, AbilityId.WELL_BAKED_BODY, AbilityId.NONE, AbilityId.AROMA_VEIL, 477, 57, 80, 115, 50, 80, 95, 90, 50, 167, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.SMOLIV, 9, false, false, false, "Olive Pokémon", PokemonType.GRASS, PokemonType.NORMAL, 0.3, 6.5, AbilityId.EARLY_BIRD, AbilityId.NONE, AbilityId.HARVEST, 260, 41, 35, 45, 58, 51, 30, 255, 50, 52, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.DOLLIV, 9, false, false, false, "Olive Pokémon", PokemonType.GRASS, PokemonType.NORMAL, 0.6, 11.9, AbilityId.EARLY_BIRD, AbilityId.NONE, AbilityId.HARVEST, 354, 52, 53, 60, 78, 78, 33, 120, 50, 124, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.ARBOLIVA, 9, false, false, false, "Olive Pokémon", PokemonType.GRASS, PokemonType.NORMAL, 1.4, 48.2, AbilityId.SEED_SOWER, AbilityId.NONE, AbilityId.HARVEST, 510, 78, 69, 90, 125, 109, 39, 45, 50, 255, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.SQUAWKABILLY, 9, false, false, false, "Parrot Pokémon", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 2.4, AbilityId.INTIMIDATE, AbilityId.HUSTLE, AbilityId.GUTS, 417, 82, 96, 51, 45, 51, 92, 190, 50, 146, GrowthRate.ERRATIC, 50, false, false, + new PokemonForm("Green Plumage", "green-plumage", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 2.4, AbilityId.INTIMIDATE, AbilityId.HUSTLE, AbilityId.GUTS, 417, 82, 96, 51, 45, 51, 92, 190, 50, 146, false, null, true), + new PokemonForm("Blue Plumage", "blue-plumage", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 2.4, AbilityId.INTIMIDATE, AbilityId.HUSTLE, AbilityId.GUTS, 417, 82, 96, 51, 45, 51, 92, 190, 50, 146, false, null, true), + new PokemonForm("Yellow Plumage", "yellow-plumage", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 2.4, AbilityId.INTIMIDATE, AbilityId.HUSTLE, AbilityId.SHEER_FORCE, 417, 82, 96, 51, 45, 51, 92, 190, 50, 146, false, null, true), + new PokemonForm("White Plumage", "white-plumage", PokemonType.NORMAL, PokemonType.FLYING, 0.6, 2.4, AbilityId.INTIMIDATE, AbilityId.HUSTLE, AbilityId.SHEER_FORCE, 417, 82, 96, 51, 45, 51, 92, 190, 50, 146, false, null, true), + ), + new PokemonSpecies(SpeciesId.NACLI, 9, false, false, false, "Rock Salt Pokémon", PokemonType.ROCK, null, 0.4, 16, AbilityId.PURIFYING_SALT, AbilityId.STURDY, AbilityId.CLEAR_BODY, 280, 55, 55, 75, 35, 35, 25, 255, 50, 56, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.NACLSTACK, 9, false, false, false, "Rock Salt Pokémon", PokemonType.ROCK, null, 0.6, 105, AbilityId.PURIFYING_SALT, AbilityId.STURDY, AbilityId.CLEAR_BODY, 355, 60, 60, 100, 35, 65, 35, 120, 50, 124, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.GARGANACL, 9, false, false, false, "Rock Salt Pokémon", PokemonType.ROCK, null, 2.3, 240, AbilityId.PURIFYING_SALT, AbilityId.STURDY, AbilityId.CLEAR_BODY, 500, 100, 100, 130, 45, 90, 35, 45, 50, 250, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.CHARCADET, 9, false, false, false, "Fire Child Pokémon", PokemonType.FIRE, null, 0.6, 10.5, AbilityId.FLASH_FIRE, AbilityId.NONE, AbilityId.FLAME_BODY, 255, 40, 50, 40, 50, 40, 35, 90, 50, 51, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.ARMAROUGE, 9, false, false, false, "Fire Warrior Pokémon", PokemonType.FIRE, PokemonType.PSYCHIC, 1.5, 85, AbilityId.FLASH_FIRE, AbilityId.NONE, AbilityId.WEAK_ARMOR, 525, 85, 60, 100, 125, 80, 75, 25, 20, 263, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.CERULEDGE, 9, false, false, false, "Fire Blades Pokémon", PokemonType.FIRE, PokemonType.GHOST, 1.6, 62, AbilityId.FLASH_FIRE, AbilityId.NONE, AbilityId.WEAK_ARMOR, 525, 75, 125, 80, 60, 100, 85, 25, 20, 263, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.TADBULB, 9, false, false, false, "EleTadpole Pokémon", PokemonType.ELECTRIC, null, 0.3, 0.4, AbilityId.OWN_TEMPO, AbilityId.STATIC, AbilityId.DAMP, 272, 61, 31, 41, 59, 35, 45, 190, 50, 54, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BELLIBOLT, 9, false, false, false, "EleFrog Pokémon", PokemonType.ELECTRIC, null, 1.2, 113, AbilityId.ELECTROMORPHOSIS, AbilityId.STATIC, AbilityId.DAMP, 495, 109, 64, 91, 103, 83, 45, 50, 50, 173, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.WATTREL, 9, false, false, false, "Storm Petrel Pokémon", PokemonType.ELECTRIC, PokemonType.FLYING, 0.4, 3.6, AbilityId.WIND_POWER, AbilityId.VOLT_ABSORB, AbilityId.COMPETITIVE, 280, 40, 40, 35, 55, 40, 70, 180, 50, 56, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.KILOWATTREL, 9, false, false, false, "Frigatebird Pokémon", PokemonType.ELECTRIC, PokemonType.FLYING, 1.4, 38.6, AbilityId.WIND_POWER, AbilityId.VOLT_ABSORB, AbilityId.COMPETITIVE, 490, 70, 70, 60, 105, 60, 125, 90, 50, 172, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.MASCHIFF, 9, false, false, false, "Rascal Pokémon", PokemonType.DARK, null, 0.5, 16, AbilityId.INTIMIDATE, AbilityId.RUN_AWAY, AbilityId.STAKEOUT, 340, 60, 78, 60, 40, 51, 51, 150, 50, 68, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.MABOSSTIFF, 9, false, false, false, "Boss Pokémon", PokemonType.DARK, null, 1.1, 61, AbilityId.INTIMIDATE, AbilityId.GUARD_DOG, AbilityId.STAKEOUT, 505, 80, 120, 90, 60, 70, 85, 75, 50, 177, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.SHROODLE, 9, false, false, false, "Toxic Mouse Pokémon", PokemonType.POISON, PokemonType.NORMAL, 0.2, 0.7, AbilityId.UNBURDEN, AbilityId.PICKPOCKET, AbilityId.PRANKSTER, 290, 40, 65, 35, 40, 35, 75, 190, 50, 58, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.GRAFAIAI, 9, false, false, false, "Toxic Monkey Pokémon", PokemonType.POISON, PokemonType.NORMAL, 0.7, 27.2, AbilityId.UNBURDEN, AbilityId.POISON_TOUCH, AbilityId.PRANKSTER, 485, 63, 95, 65, 80, 72, 110, 90, 50, 170, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.BRAMBLIN, 9, false, false, false, "Tumbleweed Pokémon", PokemonType.GRASS, PokemonType.GHOST, 0.6, 0.6, AbilityId.WIND_RIDER, AbilityId.NONE, AbilityId.INFILTRATOR, 275, 40, 65, 30, 45, 35, 60, 190, 50, 55, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BRAMBLEGHAST, 9, false, false, false, "Tumbleweed Pokémon", PokemonType.GRASS, PokemonType.GHOST, 1.2, 6, AbilityId.WIND_RIDER, AbilityId.NONE, AbilityId.INFILTRATOR, 480, 55, 115, 70, 80, 70, 90, 45, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.TOEDSCOOL, 9, false, false, false, "Woodear Pokémon", PokemonType.GROUND, PokemonType.GRASS, 0.9, 33, AbilityId.MYCELIUM_MIGHT, AbilityId.NONE, AbilityId.NONE, 335, 40, 40, 35, 50, 100, 70, 190, 50, 67, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.TOEDSCRUEL, 9, false, false, false, "Woodear Pokémon", PokemonType.GROUND, PokemonType.GRASS, 1.9, 58, AbilityId.MYCELIUM_MIGHT, AbilityId.NONE, AbilityId.NONE, 515, 80, 70, 65, 80, 120, 100, 90, 50, 180, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.KLAWF, 9, false, false, false, "Ambush Pokémon", PokemonType.ROCK, null, 1.3, 79, AbilityId.ANGER_SHELL, AbilityId.SHELL_ARMOR, AbilityId.REGENERATOR, 450, 70, 100, 115, 35, 55, 75, 120, 50, 158, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CAPSAKID, 9, false, false, false, "Spicy Pepper Pokémon", PokemonType.GRASS, null, 0.3, 3, AbilityId.CHLOROPHYLL, AbilityId.INSOMNIA, AbilityId.KLUTZ, 304, 50, 62, 40, 62, 40, 50, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SCOVILLAIN, 9, false, false, false, "Spicy Pepper Pokémon", PokemonType.GRASS, PokemonType.FIRE, 0.9, 15, AbilityId.CHLOROPHYLL, AbilityId.INSOMNIA, AbilityId.MOODY, 486, 65, 108, 65, 108, 65, 75, 75, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.RELLOR, 9, false, false, false, "Rolling Pokémon", PokemonType.BUG, null, 0.2, 1, AbilityId.COMPOUND_EYES, AbilityId.NONE, AbilityId.SHED_SKIN, 270, 41, 50, 60, 31, 58, 30, 190, 50, 54, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.RABSCA, 9, false, false, false, "Rolling Pokémon", PokemonType.BUG, PokemonType.PSYCHIC, 0.3, 3.5, AbilityId.SYNCHRONIZE, AbilityId.NONE, AbilityId.TELEPATHY, 470, 75, 50, 85, 115, 100, 45, 45, 50, 165, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.FLITTLE, 9, false, false, false, "Frill Pokémon", PokemonType.PSYCHIC, null, 0.2, 1.5, AbilityId.ANTICIPATION, AbilityId.FRISK, AbilityId.SPEED_BOOST, 255, 30, 35, 30, 55, 30, 75, 120, 50, 51, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.ESPATHRA, 9, false, false, false, "Ostrich Pokémon", PokemonType.PSYCHIC, null, 1.9, 90, AbilityId.OPPORTUNIST, AbilityId.FRISK, AbilityId.SPEED_BOOST, 481, 95, 60, 60, 101, 60, 105, 60, 50, 168, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.TINKATINK, 9, false, false, false, "Metalsmith Pokémon", PokemonType.FAIRY, PokemonType.STEEL, 0.4, 8.9, AbilityId.MOLD_BREAKER, AbilityId.OWN_TEMPO, AbilityId.PICKPOCKET, 297, 50, 45, 45, 35, 64, 58, 190, 50, 59, GrowthRate.MEDIUM_SLOW, 0, false), + new PokemonSpecies(SpeciesId.TINKATUFF, 9, false, false, false, "Hammer Pokémon", PokemonType.FAIRY, PokemonType.STEEL, 0.7, 59.1, AbilityId.MOLD_BREAKER, AbilityId.OWN_TEMPO, AbilityId.PICKPOCKET, 380, 65, 55, 55, 45, 82, 78, 90, 50, 133, GrowthRate.MEDIUM_SLOW, 0, false), + new PokemonSpecies(SpeciesId.TINKATON, 9, false, false, false, "Hammer Pokémon", PokemonType.FAIRY, PokemonType.STEEL, 0.7, 112.8, AbilityId.MOLD_BREAKER, AbilityId.OWN_TEMPO, AbilityId.PICKPOCKET, 506, 85, 75, 77, 70, 105, 94, 45, 50, 253, GrowthRate.MEDIUM_SLOW, 0, false), + new PokemonSpecies(SpeciesId.WIGLETT, 9, false, false, false, "Garden Eel Pokémon", PokemonType.WATER, null, 1.2, 1.8, AbilityId.GOOEY, AbilityId.RATTLED, AbilityId.SAND_VEIL, 245, 10, 55, 25, 35, 25, 95, 255, 50, 49, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.WUGTRIO, 9, false, false, false, "Garden Eel Pokémon", PokemonType.WATER, null, 1.2, 5.4, AbilityId.GOOEY, AbilityId.RATTLED, AbilityId.SAND_VEIL, 425, 35, 100, 50, 50, 70, 120, 50, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BOMBIRDIER, 9, false, false, false, "Item Drop Pokémon", PokemonType.FLYING, PokemonType.DARK, 1.5, 42.9, AbilityId.BIG_PECKS, AbilityId.KEEN_EYE, AbilityId.ROCKY_PAYLOAD, 485, 70, 103, 85, 60, 85, 82, 25, 50, 243, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.FINIZEN, 9, false, false, false, "Dolphin Pokémon", PokemonType.WATER, null, 1.3, 60.2, AbilityId.WATER_VEIL, AbilityId.NONE, AbilityId.NONE, 315, 70, 45, 40, 45, 40, 75, 200, 50, 63, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.PALAFIN, 9, false, false, false, "Dolphin Pokémon", PokemonType.WATER, null, 1.3, 60.2, AbilityId.ZERO_TO_HERO, AbilityId.NONE, AbilityId.NONE, 457, 100, 70, 72, 53, 62, 100, 45, 50, 160, GrowthRate.SLOW, 50, false, true, + new PokemonForm("Zero Form", "zero", PokemonType.WATER, null, 1.3, 60.2, AbilityId.ZERO_TO_HERO, AbilityId.NONE, AbilityId.ZERO_TO_HERO, 457, 100, 70, 72, 53, 62, 100, 45, 50, 160, false, null, true), + new PokemonForm("Hero Form", "hero", PokemonType.WATER, null, 1.8, 97.4, AbilityId.ZERO_TO_HERO, AbilityId.NONE, AbilityId.ZERO_TO_HERO, 650, 100, 160, 97, 106, 87, 100, 45, 50, 160), + ), + new PokemonSpecies(SpeciesId.VAROOM, 9, false, false, false, "Single-Cyl Pokémon", PokemonType.STEEL, PokemonType.POISON, 1, 35, AbilityId.OVERCOAT, AbilityId.NONE, AbilityId.SLOW_START, 300, 45, 70, 63, 30, 45, 47, 190, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.REVAVROOM, 9, false, false, false, "Multi-Cyl Pokémon", PokemonType.STEEL, PokemonType.POISON, 1.8, 120, AbilityId.OVERCOAT, AbilityId.NONE, AbilityId.FILTER, 500, 80, 119, 90, 54, 67, 90, 75, 50, 175, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.POISON, 1.8, 120, AbilityId.OVERCOAT, AbilityId.NONE, AbilityId.FILTER, 500, 80, 119, 90, 54, 67, 90, 75, 50, 175, false, null, true), + new PokemonForm("Segin Starmobile", "segin-starmobile", PokemonType.STEEL, PokemonType.DARK, 1.8, 240, AbilityId.INTIMIDATE, AbilityId.NONE, AbilityId.INTIMIDATE, 600, 110, 129, 100, 77, 79, 105, 75, 50, 175, false, null, false, true), + new PokemonForm("Schedar Starmobile", "schedar-starmobile", PokemonType.STEEL, PokemonType.FIRE, 1.8, 240, AbilityId.SPEED_BOOST, AbilityId.NONE, AbilityId.SPEED_BOOST, 600, 110, 129, 100, 77, 79, 105, 75, 50, 175, false, null, false, true), + new PokemonForm("Navi Starmobile", "navi-starmobile", PokemonType.STEEL, PokemonType.POISON, 1.8, 240, AbilityId.TOXIC_DEBRIS, AbilityId.NONE, AbilityId.TOXIC_DEBRIS, 600, 110, 129, 100, 77, 79, 105, 75, 50, 175, false, null, false, true), + new PokemonForm("Ruchbah Starmobile", "ruchbah-starmobile", PokemonType.STEEL, PokemonType.FAIRY, 1.8, 240, AbilityId.MISTY_SURGE, AbilityId.NONE, AbilityId.MISTY_SURGE, 600, 110, 129, 100, 77, 79, 105, 75, 50, 175, false, null, false, true), + new PokemonForm("Caph Starmobile", "caph-starmobile", PokemonType.STEEL, PokemonType.FIGHTING, 1.8, 240, AbilityId.STAMINA, AbilityId.NONE, AbilityId.STAMINA, 600, 110, 129, 100, 77, 79, 105, 75, 50, 175, false, null, false, true), + ), + new PokemonSpecies(SpeciesId.CYCLIZAR, 9, false, false, false, "Mount Pokémon", PokemonType.DRAGON, PokemonType.NORMAL, 1.6, 63, AbilityId.SHED_SKIN, AbilityId.NONE, AbilityId.REGENERATOR, 501, 70, 95, 65, 85, 65, 121, 190, 50, 175, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.ORTHWORM, 9, false, false, false, "Earthworm Pokémon", PokemonType.STEEL, null, 2.5, 310, AbilityId.EARTH_EATER, AbilityId.NONE, AbilityId.SAND_VEIL, 480, 70, 85, 145, 60, 55, 65, 25, 50, 240, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.GLIMMET, 9, false, false, false, "Ore Pokémon", PokemonType.ROCK, PokemonType.POISON, 0.7, 8, AbilityId.TOXIC_DEBRIS, AbilityId.NONE, AbilityId.CORROSION, 350, 48, 35, 42, 105, 60, 60, 70, 50, 70, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.GLIMMORA, 9, false, false, false, "Ore Pokémon", PokemonType.ROCK, PokemonType.POISON, 1.5, 45, AbilityId.TOXIC_DEBRIS, AbilityId.NONE, AbilityId.CORROSION, 525, 83, 55, 90, 130, 81, 86, 25, 50, 184, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.GREAVARD, 9, false, false, false, "Ghost Dog Pokémon", PokemonType.GHOST, null, 0.6, 35, AbilityId.PICKUP, AbilityId.NONE, AbilityId.FLUFFY, 290, 50, 61, 60, 30, 55, 34, 120, 50, 58, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.HOUNDSTONE, 9, false, false, false, "Ghost Dog Pokémon", PokemonType.GHOST, null, 2, 15, AbilityId.SAND_RUSH, AbilityId.NONE, AbilityId.FLUFFY, 488, 72, 101, 100, 50, 97, 68, 60, 50, 171, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.FLAMIGO, 9, false, false, false, "Synchronize Pokémon", PokemonType.FLYING, PokemonType.FIGHTING, 1.6, 37, AbilityId.SCRAPPY, AbilityId.TANGLED_FEET, AbilityId.COSTAR, 500, 82, 115, 74, 75, 64, 90, 100, 50, 175, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.CETODDLE, 9, false, false, false, "Terra Whale Pokémon", PokemonType.ICE, null, 1.2, 45, AbilityId.THICK_FAT, AbilityId.SNOW_CLOAK, AbilityId.SHEER_FORCE, 334, 108, 68, 45, 30, 40, 43, 150, 50, 67, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.CETITAN, 9, false, false, false, "Terra Whale Pokémon", PokemonType.ICE, null, 4.5, 700, AbilityId.THICK_FAT, AbilityId.SLUSH_RUSH, AbilityId.SHEER_FORCE, 521, 170, 113, 65, 45, 55, 73, 50, 50, 182, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.VELUZA, 9, false, false, false, "Jettison Pokémon", PokemonType.WATER, PokemonType.PSYCHIC, 2.5, 90, AbilityId.MOLD_BREAKER, AbilityId.NONE, AbilityId.SHARPNESS, 478, 90, 102, 73, 78, 65, 70, 100, 50, 167, GrowthRate.FAST, 50, false), + new PokemonSpecies(SpeciesId.DONDOZO, 9, false, false, false, "Big Catfish Pokémon", PokemonType.WATER, null, 12, 220, AbilityId.UNAWARE, AbilityId.OBLIVIOUS, AbilityId.WATER_VEIL, 530, 150, 100, 115, 65, 65, 35, 25, 50, 265, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.TATSUGIRI, 9, false, false, false, "Mimicry Pokémon", PokemonType.DRAGON, PokemonType.WATER, 0.3, 8, AbilityId.COMMANDER, AbilityId.NONE, AbilityId.STORM_DRAIN, 475, 68, 50, 60, 120, 95, 82, 100, 50, 166, GrowthRate.MEDIUM_SLOW, 50, false, false, + new PokemonForm("Curly Form", "curly", PokemonType.DRAGON, PokemonType.WATER, 0.3, 8, AbilityId.COMMANDER, AbilityId.NONE, AbilityId.STORM_DRAIN, 475, 68, 50, 60, 120, 95, 82, 100, 50, 166, false, null, true), + new PokemonForm("Droopy Form", "droopy", PokemonType.DRAGON, PokemonType.WATER, 0.3, 8, AbilityId.COMMANDER, AbilityId.NONE, AbilityId.STORM_DRAIN, 475, 68, 50, 60, 120, 95, 82, 100, 50, 166, false, null, true), + new PokemonForm("Stretchy Form", "stretchy", PokemonType.DRAGON, PokemonType.WATER, 0.3, 8, AbilityId.COMMANDER, AbilityId.NONE, AbilityId.STORM_DRAIN, 475, 68, 50, 60, 120, 95, 82, 100, 50, 166, false, null, true), + ), + new PokemonSpecies(SpeciesId.ANNIHILAPE, 9, false, false, false, "Rage Monkey Pokémon", PokemonType.FIGHTING, PokemonType.GHOST, 1.2, 56, AbilityId.VITAL_SPIRIT, AbilityId.INNER_FOCUS, AbilityId.DEFIANT, 535, 110, 115, 80, 50, 90, 90, 45, 50, 268, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.CLODSIRE, 9, false, false, false, "Spiny Fish Pokémon", PokemonType.POISON, PokemonType.GROUND, 1.8, 223, AbilityId.POISON_POINT, AbilityId.WATER_ABSORB, AbilityId.UNAWARE, 430, 130, 75, 60, 45, 100, 20, 90, 50, 151, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.FARIGIRAF, 9, false, false, false, "Long Neck Pokémon", PokemonType.NORMAL, PokemonType.PSYCHIC, 3.2, 160, AbilityId.CUD_CHEW, AbilityId.ARMOR_TAIL, AbilityId.SAP_SIPPER, 520, 120, 90, 70, 110, 70, 60, 45, 50, 260, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.DUDUNSPARCE, 9, false, false, false, "Land Snake Pokémon", PokemonType.NORMAL, null, 3.6, 39.2, AbilityId.SERENE_GRACE, AbilityId.RUN_AWAY, AbilityId.RATTLED, 520, 125, 100, 80, 85, 75, 55, 45, 50, 182, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Two-Segment Form", "two-segment", PokemonType.NORMAL, null, 3.6, 39.2, AbilityId.SERENE_GRACE, AbilityId.RUN_AWAY, AbilityId.RATTLED, 520, 125, 100, 80, 85, 75, 55, 45, 50, 182, false, ""), + new PokemonForm("Three-Segment Form", "three-segment", PokemonType.NORMAL, null, 4.5, 47.4, AbilityId.SERENE_GRACE, AbilityId.RUN_AWAY, AbilityId.RATTLED, 520, 125, 100, 80, 85, 75, 55, 45, 50, 182), + ), + new PokemonSpecies(SpeciesId.KINGAMBIT, 9, false, false, false, "Big Blade Pokémon", PokemonType.DARK, PokemonType.STEEL, 2, 120, AbilityId.DEFIANT, AbilityId.SUPREME_OVERLORD, AbilityId.PRESSURE, 550, 100, 135, 120, 60, 85, 50, 25, 50, 275, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GREAT_TUSK, 9, false, false, false, "Paradox Pokémon", PokemonType.GROUND, PokemonType.FIGHTING, 2.2, 320, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 570, 115, 131, 131, 53, 53, 87, 30, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.SCREAM_TAIL, 9, false, false, false, "Paradox Pokémon", PokemonType.FAIRY, PokemonType.PSYCHIC, 1.2, 8, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 570, 115, 65, 99, 65, 115, 111, 50, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.BRUTE_BONNET, 9, false, false, false, "Paradox Pokémon", PokemonType.GRASS, PokemonType.DARK, 1.2, 21, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 570, 111, 127, 99, 79, 99, 55, 50, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.FLUTTER_MANE, 9, false, false, false, "Paradox Pokémon", PokemonType.GHOST, PokemonType.FAIRY, 1.4, 4, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 570, 55, 55, 55, 135, 135, 135, 30, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.SLITHER_WING, 9, false, false, false, "Paradox Pokémon", PokemonType.BUG, PokemonType.FIGHTING, 3.2, 92, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 570, 85, 135, 79, 85, 105, 81, 30, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.SANDY_SHOCKS, 9, false, false, false, "Paradox Pokémon", PokemonType.ELECTRIC, PokemonType.GROUND, 2.3, 60, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 570, 85, 81, 97, 121, 85, 101, 30, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.IRON_TREADS, 9, false, false, false, "Paradox Pokémon", PokemonType.GROUND, PokemonType.STEEL, 0.9, 240, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 570, 90, 112, 120, 72, 70, 106, 30, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.IRON_BUNDLE, 9, false, false, false, "Paradox Pokémon", PokemonType.ICE, PokemonType.WATER, 0.6, 11, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 570, 56, 80, 114, 124, 60, 136, 50, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.IRON_HANDS, 9, false, false, false, "Paradox Pokémon", PokemonType.FIGHTING, PokemonType.ELECTRIC, 1.8, 380.7, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 570, 154, 140, 108, 50, 68, 50, 50, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.IRON_JUGULIS, 9, false, false, false, "Paradox Pokémon", PokemonType.DARK, PokemonType.FLYING, 1.3, 111, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 570, 94, 80, 86, 122, 80, 108, 30, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.IRON_MOTH, 9, false, false, false, "Paradox Pokémon", PokemonType.FIRE, PokemonType.POISON, 1.2, 36, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 570, 80, 70, 60, 140, 110, 110, 30, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.IRON_THORNS, 9, false, false, false, "Paradox Pokémon", PokemonType.ROCK, PokemonType.ELECTRIC, 1.6, 303, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 570, 100, 134, 110, 70, 84, 72, 30, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.FRIGIBAX, 9, false, false, false, "Ice Fin Pokémon", PokemonType.DRAGON, PokemonType.ICE, 0.5, 17, AbilityId.THERMAL_EXCHANGE, AbilityId.NONE, AbilityId.ICE_BODY, 320, 65, 75, 45, 35, 45, 55, 45, 50, 64, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.ARCTIBAX, 9, false, false, false, "Ice Fin Pokémon", PokemonType.DRAGON, PokemonType.ICE, 0.8, 30, AbilityId.THERMAL_EXCHANGE, AbilityId.NONE, AbilityId.ICE_BODY, 423, 90, 95, 66, 45, 65, 62, 25, 50, 148, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.BAXCALIBUR, 9, false, false, false, "Ice Dragon Pokémon", PokemonType.DRAGON, PokemonType.ICE, 2.1, 210, AbilityId.THERMAL_EXCHANGE, AbilityId.NONE, AbilityId.ICE_BODY, 600, 115, 145, 92, 75, 86, 87, 10, 50, 300, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.GIMMIGHOUL, 9, false, false, false, "Coin Chest Pokémon", PokemonType.GHOST, null, 0.3, 5, AbilityId.RATTLED, AbilityId.NONE, AbilityId.NONE, 300, 45, 30, 70, 75, 70, 10, 45, 50, 60, GrowthRate.SLOW, null, false, false, + new PokemonForm("Chest Form", "chest", PokemonType.GHOST, null, 0.3, 5, AbilityId.RATTLED, AbilityId.NONE, AbilityId.NONE, 300, 45, 30, 70, 75, 70, 10, 45, 50, 60, false, "", true), + new PokemonForm("Roaming Form", "roaming", PokemonType.GHOST, null, 0.1, 1, AbilityId.RUN_AWAY, AbilityId.NONE, AbilityId.NONE, 300, 45, 30, 25, 75, 45, 80, 45, 50, 60, false, null, true), + ), + new PokemonSpecies(SpeciesId.GHOLDENGO, 9, false, false, false, "Coin Entity Pokémon", PokemonType.STEEL, PokemonType.GHOST, 1.2, 30, AbilityId.GOOD_AS_GOLD, AbilityId.NONE, AbilityId.NONE, 550, 87, 60, 95, 133, 91, 84, 45, 50, 275, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.WO_CHIEN, 9, true, false, false, "Ruinous Pokémon", PokemonType.DARK, PokemonType.GRASS, 1.5, 74.2, AbilityId.TABLETS_OF_RUIN, AbilityId.NONE, AbilityId.NONE, 570, 85, 85, 100, 95, 135, 70, 6, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.CHIEN_PAO, 9, true, false, false, "Ruinous Pokémon", PokemonType.DARK, PokemonType.ICE, 1.9, 152.2, AbilityId.SWORD_OF_RUIN, AbilityId.NONE, AbilityId.NONE, 570, 80, 120, 80, 90, 65, 135, 6, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.TING_LU, 9, true, false, false, "Ruinous Pokémon", PokemonType.DARK, PokemonType.GROUND, 2.7, 699.7, AbilityId.VESSEL_OF_RUIN, AbilityId.NONE, AbilityId.NONE, 570, 155, 110, 125, 55, 80, 45, 6, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.CHI_YU, 9, true, false, false, "Ruinous Pokémon", PokemonType.DARK, PokemonType.FIRE, 0.4, 4.9, AbilityId.BEADS_OF_RUIN, AbilityId.NONE, AbilityId.NONE, 570, 55, 80, 80, 135, 120, 100, 6, 0, 285, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.ROARING_MOON, 9, false, false, false, "Paradox Pokémon", PokemonType.DRAGON, PokemonType.DARK, 2, 380, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 590, 105, 139, 71, 55, 101, 119, 10, 0, 295, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.IRON_VALIANT, 9, false, false, false, "Paradox Pokémon", PokemonType.FAIRY, PokemonType.FIGHTING, 1.4, 35, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 590, 74, 130, 90, 120, 60, 116, 10, 0, 295, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.KORAIDON, 9, false, true, false, "Paradox Pokémon", PokemonType.FIGHTING, PokemonType.DRAGON, 2.5, 303, AbilityId.ORICHALCUM_PULSE, AbilityId.NONE, AbilityId.NONE, 670, 100, 135, 115, 85, 100, 135, 3, 0, 335, GrowthRate.SLOW, null, false, false, + new PokemonForm("Apex Build", "apex-build", PokemonType.FIGHTING, PokemonType.DRAGON, 2.5, 303, AbilityId.ORICHALCUM_PULSE, AbilityId.NONE, AbilityId.NONE, 670, 100, 135, 115, 85, 100, 135, 3, 0, 335, false, null, true), + ), + new PokemonSpecies(SpeciesId.MIRAIDON, 9, false, true, false, "Paradox Pokémon", PokemonType.ELECTRIC, PokemonType.DRAGON, 3.5, 240, AbilityId.HADRON_ENGINE, AbilityId.NONE, AbilityId.NONE, 670, 100, 85, 100, 135, 115, 135, 3, 0, 335, GrowthRate.SLOW, null, false, false, + new PokemonForm("Ultimate Mode", "ultimate-mode", PokemonType.ELECTRIC, PokemonType.DRAGON, 3.5, 240, AbilityId.HADRON_ENGINE, AbilityId.NONE, AbilityId.NONE, 670, 100, 85, 100, 135, 115, 135, 3, 0, 335, false, null, true), + ), + new PokemonSpecies(SpeciesId.WALKING_WAKE, 9, false, false, false, "Paradox Pokémon", PokemonType.WATER, PokemonType.DRAGON, 3.5, 280, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 590, 99, 83, 91, 125, 83, 109, 10, 0, 295, GrowthRate.SLOW, null, false), //Custom Catchrate, matching Gouging Fire and Raging Bolt + new PokemonSpecies(SpeciesId.IRON_LEAVES, 9, false, false, false, "Paradox Pokémon", PokemonType.GRASS, PokemonType.PSYCHIC, 1.5, 125, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 590, 90, 130, 88, 70, 108, 104, 10, 0, 295, GrowthRate.SLOW, null, false), //Custom Catchrate, matching Iron Boulder and Iron Crown + new PokemonSpecies(SpeciesId.DIPPLIN, 9, false, false, false, "Candy Apple Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 0.4, 4.4, AbilityId.SUPERSWEET_SYRUP, AbilityId.GLUTTONY, AbilityId.STICKY_HOLD, 485, 80, 80, 110, 95, 80, 40, 45, 50, 170, GrowthRate.ERRATIC, 50, false), + new PokemonSpecies(SpeciesId.POLTCHAGEIST, 9, false, false, false, "Matcha Pokémon", PokemonType.GRASS, PokemonType.GHOST, 0.1, 1.1, AbilityId.HOSPITALITY, AbilityId.NONE, AbilityId.HEATPROOF, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, GrowthRate.SLOW, null, false, false, + new PokemonForm("Counterfeit Form", "counterfeit", PokemonType.GRASS, PokemonType.GHOST, 0.1, 1.1, AbilityId.HOSPITALITY, AbilityId.NONE, AbilityId.HEATPROOF, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, null, true), + new PokemonForm("Artisan Form", "artisan", PokemonType.GRASS, PokemonType.GHOST, 0.1, 1.1, AbilityId.HOSPITALITY, AbilityId.NONE, AbilityId.HEATPROOF, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, null, false, true), + ), + new PokemonSpecies(SpeciesId.SINISTCHA, 9, false, false, false, "Matcha Pokémon", PokemonType.GRASS, PokemonType.GHOST, 0.2, 2.2, AbilityId.HOSPITALITY, AbilityId.NONE, AbilityId.HEATPROOF, 508, 71, 60, 106, 121, 80, 70, 60, 50, 178, GrowthRate.SLOW, null, false, false, + new PokemonForm("Unremarkable Form", "unremarkable", PokemonType.GRASS, PokemonType.GHOST, 0.2, 2.2, AbilityId.HOSPITALITY, AbilityId.NONE, AbilityId.HEATPROOF, 508, 71, 60, 106, 121, 80, 70, 60, 50, 178), + new PokemonForm("Masterpiece Form", "masterpiece", PokemonType.GRASS, PokemonType.GHOST, 0.2, 2.2, AbilityId.HOSPITALITY, AbilityId.NONE, AbilityId.HEATPROOF, 508, 71, 60, 106, 121, 80, 70, 60, 50, 178, false, null, false, true), + ), + new PokemonSpecies(SpeciesId.OKIDOGI, 9, true, false, false, "Retainer Pokémon", PokemonType.POISON, PokemonType.FIGHTING, 1.8, 92.2, AbilityId.TOXIC_CHAIN, AbilityId.NONE, AbilityId.GUARD_DOG, 555, 88, 128, 115, 58, 86, 80, 3, 0, 276, GrowthRate.SLOW, 100, false), + new PokemonSpecies(SpeciesId.MUNKIDORI, 9, true, false, false, "Retainer Pokémon", PokemonType.POISON, PokemonType.PSYCHIC, 1, 12.2, AbilityId.TOXIC_CHAIN, AbilityId.NONE, AbilityId.FRISK, 555, 88, 75, 66, 130, 90, 106, 3, 0, 276, GrowthRate.SLOW, 100, false), + new PokemonSpecies(SpeciesId.FEZANDIPITI, 9, true, false, false, "Retainer Pokémon", PokemonType.POISON, PokemonType.FAIRY, 1.4, 30.1, AbilityId.TOXIC_CHAIN, AbilityId.NONE, AbilityId.TECHNICIAN, 555, 88, 91, 82, 70, 125, 99, 3, 0, 276, GrowthRate.SLOW, 100, false), + new PokemonSpecies(SpeciesId.OGERPON, 9, true, false, false, "Mask Pokémon", PokemonType.GRASS, null, 1.2, 39.8, AbilityId.DEFIANT, AbilityId.NONE, AbilityId.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275, GrowthRate.SLOW, 0, false, false, + new PokemonForm("Teal Mask", "teal-mask", PokemonType.GRASS, null, 1.2, 39.8, AbilityId.DEFIANT, AbilityId.NONE, AbilityId.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275, false, null, true), + new PokemonForm("Wellspring Mask", "wellspring-mask", PokemonType.GRASS, PokemonType.WATER, 1.2, 39.8, AbilityId.WATER_ABSORB, AbilityId.NONE, AbilityId.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), + new PokemonForm("Hearthflame Mask", "hearthflame-mask", PokemonType.GRASS, PokemonType.FIRE, 1.2, 39.8, AbilityId.MOLD_BREAKER, AbilityId.NONE, AbilityId.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), + new PokemonForm("Cornerstone Mask", "cornerstone-mask", PokemonType.GRASS, PokemonType.ROCK, 1.2, 39.8, AbilityId.STURDY, AbilityId.NONE, AbilityId.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), + new PokemonForm("Teal Mask Terastallized", "teal-mask-tera", PokemonType.GRASS, null, 1.2, 39.8, AbilityId.EMBODY_ASPECT_TEAL, AbilityId.NONE, AbilityId.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), + new PokemonForm("Wellspring Mask Terastallized", "wellspring-mask-tera", PokemonType.GRASS, PokemonType.WATER, 1.2, 39.8, AbilityId.EMBODY_ASPECT_WELLSPRING, AbilityId.NONE, AbilityId.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), + new PokemonForm("Hearthflame Mask Terastallized", "hearthflame-mask-tera", PokemonType.GRASS, PokemonType.FIRE, 1.2, 39.8, AbilityId.EMBODY_ASPECT_HEARTHFLAME, AbilityId.NONE, AbilityId.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), + new PokemonForm("Cornerstone Mask Terastallized", "cornerstone-mask-tera", PokemonType.GRASS, PokemonType.ROCK, 1.2, 39.8, AbilityId.EMBODY_ASPECT_CORNERSTONE, AbilityId.NONE, AbilityId.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), + ), + new PokemonSpecies(SpeciesId.ARCHALUDON, 9, false, false, false, "Alloy Pokémon", PokemonType.STEEL, PokemonType.DRAGON, 2, 60, AbilityId.STAMINA, AbilityId.STURDY, AbilityId.STALWART, 600, 90, 105, 130, 125, 65, 85, 10, 50, 300, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.HYDRAPPLE, 9, false, false, false, "Apple Hydra Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 1.8, 93, AbilityId.SUPERSWEET_SYRUP, AbilityId.REGENERATOR, AbilityId.STICKY_HOLD, 540, 106, 80, 110, 120, 80, 44, 10, 50, 270, GrowthRate.ERRATIC, 50, false), + new PokemonSpecies(SpeciesId.GOUGING_FIRE, 9, false, false, false, "Paradox Pokémon", PokemonType.FIRE, PokemonType.DRAGON, 3.5, 590, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 590, 105, 115, 121, 65, 93, 91, 10, 0, 295, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.RAGING_BOLT, 9, false, false, false, "Paradox Pokémon", PokemonType.ELECTRIC, PokemonType.DRAGON, 5.2, 480, AbilityId.PROTOSYNTHESIS, AbilityId.NONE, AbilityId.NONE, 590, 125, 73, 91, 137, 89, 75, 10, 0, 295, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.IRON_BOULDER, 9, false, false, false, "Paradox Pokémon", PokemonType.ROCK, PokemonType.PSYCHIC, 1.5, 162.5, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 590, 90, 120, 80, 68, 108, 124, 10, 0, 295, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.IRON_CROWN, 9, false, false, false, "Paradox Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 1.6, 156, AbilityId.QUARK_DRIVE, AbilityId.NONE, AbilityId.NONE, 590, 90, 72, 100, 122, 108, 98, 10, 0, 295, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.TERAPAGOS, 9, false, true, false, "Tera Pokémon", PokemonType.NORMAL, null, 0.2, 6.5, AbilityId.TERA_SHIFT, AbilityId.NONE, AbilityId.NONE, 450, 90, 65, 85, 65, 85, 60, 5, 50, 90, GrowthRate.SLOW, 50, false, false, + new PokemonForm("Normal Form", "", PokemonType.NORMAL, null, 0.2, 6.5, AbilityId.TERA_SHIFT, AbilityId.NONE, AbilityId.NONE, 450, 90, 65, 85, 65, 85, 60, 5, 50, 90, false, null, true), + new PokemonForm("Terastal Form", "terastal", PokemonType.NORMAL, null, 0.3, 16, AbilityId.TERA_SHELL, AbilityId.NONE, AbilityId.NONE, 600, 95, 95, 110, 105, 110, 85, 5, 50, 120), + new PokemonForm("Stellar Form", "stellar", PokemonType.NORMAL, null, 1.7, 77, AbilityId.TERAFORM_ZERO, AbilityId.NONE, AbilityId.NONE, 700, 160, 105, 110, 130, 110, 85, 5, 50, 140), + ), + new PokemonSpecies(SpeciesId.PECHARUNT, 9, false, false, true, "Subjugation Pokémon", PokemonType.POISON, PokemonType.GHOST, 0.3, 0.3, AbilityId.POISON_PUPPETEER, AbilityId.NONE, AbilityId.NONE, 600, 88, 88, 160, 88, 88, 88, 3, 0, 300, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.ALOLA_RATTATA, 7, false, false, false, "Mouse Pokémon", PokemonType.DARK, PokemonType.NORMAL, 0.3, 3.8, AbilityId.GLUTTONY, AbilityId.HUSTLE, AbilityId.THICK_FAT, 253, 30, 56, 35, 25, 35, 72, 255, 70, 51, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_RATICATE, 7, false, false, false, "Mouse Pokémon", PokemonType.DARK, PokemonType.NORMAL, 0.7, 25.5, AbilityId.GLUTTONY, AbilityId.HUSTLE, AbilityId.THICK_FAT, 413, 75, 71, 70, 40, 80, 77, 127, 70, 145, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_RAICHU, 7, false, false, false, "Mouse Pokémon", PokemonType.ELECTRIC, PokemonType.PSYCHIC, 0.7, 21, AbilityId.SURGE_SURFER, AbilityId.NONE, AbilityId.NONE, 485, 60, 85, 50, 95, 85, 110, 75, 50, 243, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_SANDSHREW, 7, false, false, false, "Mouse Pokémon", PokemonType.ICE, PokemonType.STEEL, 0.7, 40, AbilityId.SNOW_CLOAK, AbilityId.NONE, AbilityId.SLUSH_RUSH, 300, 50, 75, 90, 10, 35, 40, 255, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_SANDSLASH, 7, false, false, false, "Mouse Pokémon", PokemonType.ICE, PokemonType.STEEL, 1.2, 55, AbilityId.SNOW_CLOAK, AbilityId.NONE, AbilityId.SLUSH_RUSH, 450, 75, 100, 120, 25, 65, 65, 90, 50, 158, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_VULPIX, 7, false, false, false, "Fox Pokémon", PokemonType.ICE, null, 0.6, 9.9, AbilityId.SNOW_CLOAK, AbilityId.NONE, AbilityId.SNOW_WARNING, 299, 38, 41, 40, 50, 65, 65, 190, 50, 60, GrowthRate.MEDIUM_FAST, 25, false), + new PokemonSpecies(SpeciesId.ALOLA_NINETALES, 7, false, false, false, "Fox Pokémon", PokemonType.ICE, PokemonType.FAIRY, 1.1, 19.9, AbilityId.SNOW_CLOAK, AbilityId.NONE, AbilityId.SNOW_WARNING, 505, 73, 67, 75, 81, 100, 109, 75, 50, 177, GrowthRate.MEDIUM_FAST, 25, false), + new PokemonSpecies(SpeciesId.ALOLA_DIGLETT, 7, false, false, false, "Mole Pokémon", PokemonType.GROUND, PokemonType.STEEL, 0.2, 1, AbilityId.SAND_VEIL, AbilityId.TANGLING_HAIR, AbilityId.SAND_FORCE, 265, 10, 55, 30, 35, 45, 90, 255, 50, 53, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_DUGTRIO, 7, false, false, false, "Mole Pokémon", PokemonType.GROUND, PokemonType.STEEL, 0.7, 66.6, AbilityId.SAND_VEIL, AbilityId.TANGLING_HAIR, AbilityId.SAND_FORCE, 425, 35, 100, 60, 50, 70, 110, 50, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_MEOWTH, 7, false, false, false, "Scratch Cat Pokémon", PokemonType.DARK, null, 0.4, 4.2, AbilityId.PICKUP, AbilityId.TECHNICIAN, AbilityId.RATTLED, 290, 40, 35, 35, 50, 40, 90, 255, 50, 58, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_PERSIAN, 7, false, false, false, "Classy Cat Pokémon", PokemonType.DARK, null, 1.1, 33, AbilityId.FUR_COAT, AbilityId.TECHNICIAN, AbilityId.RATTLED, 440, 65, 60, 60, 75, 65, 115, 90, 50, 154, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_GEODUDE, 7, false, false, false, "Rock Pokémon", PokemonType.ROCK, PokemonType.ELECTRIC, 0.4, 20.3, AbilityId.MAGNET_PULL, AbilityId.STURDY, AbilityId.GALVANIZE, 300, 40, 80, 100, 30, 30, 20, 255, 70, 60, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_GRAVELER, 7, false, false, false, "Rock Pokémon", PokemonType.ROCK, PokemonType.ELECTRIC, 1, 110, AbilityId.MAGNET_PULL, AbilityId.STURDY, AbilityId.GALVANIZE, 390, 55, 95, 115, 45, 45, 35, 120, 70, 137, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_GOLEM, 7, false, false, false, "Megaton Pokémon", PokemonType.ROCK, PokemonType.ELECTRIC, 1.7, 316, AbilityId.MAGNET_PULL, AbilityId.STURDY, AbilityId.GALVANIZE, 495, 80, 120, 130, 55, 65, 45, 45, 70, 223, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_GRIMER, 7, false, false, false, "Sludge Pokémon", PokemonType.POISON, PokemonType.DARK, 0.7, 42, AbilityId.POISON_TOUCH, AbilityId.GLUTTONY, AbilityId.POWER_OF_ALCHEMY, 325, 80, 80, 50, 40, 50, 25, 190, 70, 65, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_MUK, 7, false, false, false, "Sludge Pokémon", PokemonType.POISON, PokemonType.DARK, 1, 52, AbilityId.POISON_TOUCH, AbilityId.GLUTTONY, AbilityId.POWER_OF_ALCHEMY, 500, 105, 105, 75, 65, 100, 50, 75, 70, 175, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_EXEGGUTOR, 7, false, false, false, "Coconut Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 10.9, 415.6, AbilityId.FRISK, AbilityId.NONE, AbilityId.HARVEST, 530, 95, 105, 85, 125, 75, 45, 45, 50, 186, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.ALOLA_MAROWAK, 7, false, false, false, "Bone Keeper Pokémon", PokemonType.FIRE, PokemonType.GHOST, 1, 34, AbilityId.CURSED_BODY, AbilityId.LIGHTNING_ROD, AbilityId.ROCK_HEAD, 425, 60, 80, 110, 50, 80, 45, 75, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.ETERNAL_FLOETTE, 6, true, false, false, "Single Bloom Pokémon", PokemonType.FAIRY, null, 0.2, 0.9, AbilityId.FLOWER_VEIL, AbilityId.NONE, AbilityId.SYMBIOSIS, 551, 74, 65, 67, 125, 128, 92, 120, 70, 243, GrowthRate.MEDIUM_FAST, 0, false), //Marked as Sub-Legend, for casing purposes + new PokemonSpecies(SpeciesId.GALAR_MEOWTH, 8, false, false, false, "Scratch Cat Pokémon", PokemonType.STEEL, null, 0.4, 7.5, AbilityId.PICKUP, AbilityId.TOUGH_CLAWS, AbilityId.UNNERVE, 290, 50, 65, 55, 40, 40, 40, 255, 50, 58, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GALAR_PONYTA, 8, false, false, false, "Fire Horse Pokémon", PokemonType.PSYCHIC, null, 0.8, 24, AbilityId.RUN_AWAY, AbilityId.PASTEL_VEIL, AbilityId.ANTICIPATION, 410, 50, 85, 55, 65, 65, 90, 190, 50, 82, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GALAR_RAPIDASH, 8, false, false, false, "Fire Horse Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 1.7, 80, AbilityId.RUN_AWAY, AbilityId.PASTEL_VEIL, AbilityId.ANTICIPATION, 500, 65, 100, 70, 80, 80, 105, 60, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GALAR_SLOWPOKE, 8, false, false, false, "Dopey Pokémon", PokemonType.PSYCHIC, null, 1.2, 36, AbilityId.GLUTTONY, AbilityId.OWN_TEMPO, AbilityId.REGENERATOR, 315, 90, 65, 65, 40, 40, 15, 190, 50, 63, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GALAR_SLOWBRO, 8, false, false, false, "Hermit Crab Pokémon", PokemonType.POISON, PokemonType.PSYCHIC, 1.6, 70.5, AbilityId.QUICK_DRAW, AbilityId.OWN_TEMPO, AbilityId.REGENERATOR, 490, 95, 100, 95, 100, 70, 30, 75, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GALAR_FARFETCHD, 8, false, false, false, "Wild Duck Pokémon", PokemonType.FIGHTING, null, 0.8, 42, AbilityId.STEADFAST, AbilityId.NONE, AbilityId.SCRAPPY, 377, 52, 95, 55, 58, 62, 55, 45, 50, 132, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GALAR_WEEZING, 8, false, false, false, "Poison Gas Pokémon", PokemonType.POISON, PokemonType.FAIRY, 3, 16, AbilityId.LEVITATE, AbilityId.NEUTRALIZING_GAS, AbilityId.MISTY_SURGE, 490, 65, 90, 120, 85, 70, 60, 60, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GALAR_MR_MIME, 8, false, false, false, "Barrier Pokémon", PokemonType.ICE, PokemonType.PSYCHIC, 1.4, 56.8, AbilityId.VITAL_SPIRIT, AbilityId.SCREEN_CLEANER, AbilityId.ICE_BODY, 460, 50, 65, 65, 90, 90, 100, 45, 50, 161, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GALAR_ARTICUNO, 8, true, false, false, "Freeze Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 1.7, 50.9, AbilityId.COMPETITIVE, AbilityId.NONE, AbilityId.NONE, 580, 90, 85, 85, 125, 100, 95, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.GALAR_ZAPDOS, 8, true, false, false, "Electric Pokémon", PokemonType.FIGHTING, PokemonType.FLYING, 1.6, 58.2, AbilityId.DEFIANT, AbilityId.NONE, AbilityId.NONE, 580, 90, 125, 90, 85, 90, 100, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.GALAR_MOLTRES, 8, true, false, false, "Flame Pokémon", PokemonType.DARK, PokemonType.FLYING, 2, 66, AbilityId.BERSERK, AbilityId.NONE, AbilityId.NONE, 580, 90, 85, 90, 100, 125, 90, 3, 35, 290, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.GALAR_SLOWKING, 8, false, false, false, "Royal Pokémon", PokemonType.POISON, PokemonType.PSYCHIC, 1.8, 79.5, AbilityId.CURIOUS_MEDICINE, AbilityId.OWN_TEMPO, AbilityId.REGENERATOR, 490, 95, 65, 80, 110, 110, 30, 70, 50, 172, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GALAR_CORSOLA, 8, false, false, false, "Coral Pokémon", PokemonType.GHOST, null, 0.6, 0.5, AbilityId.WEAK_ARMOR, AbilityId.NONE, AbilityId.CURSED_BODY, 410, 60, 55, 100, 65, 100, 30, 60, 50, 144, GrowthRate.FAST, 25, false), + new PokemonSpecies(SpeciesId.GALAR_ZIGZAGOON, 8, false, false, false, "Tiny Raccoon Pokémon", PokemonType.DARK, PokemonType.NORMAL, 0.4, 17.5, AbilityId.PICKUP, AbilityId.GLUTTONY, AbilityId.QUICK_FEET, 240, 38, 30, 41, 30, 41, 60, 255, 50, 56, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GALAR_LINOONE, 8, false, false, false, "Rushing Pokémon", PokemonType.DARK, PokemonType.NORMAL, 0.5, 32.5, AbilityId.PICKUP, AbilityId.GLUTTONY, AbilityId.QUICK_FEET, 420, 78, 70, 61, 50, 61, 100, 90, 50, 147, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GALAR_DARUMAKA, 8, false, false, false, "Zen Charm Pokémon", PokemonType.ICE, null, 0.7, 40, AbilityId.HUSTLE, AbilityId.NONE, AbilityId.INNER_FOCUS, 315, 70, 90, 45, 15, 45, 50, 120, 50, 63, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.GALAR_DARMANITAN, 8, false, false, false, "Blazing Pokémon", PokemonType.ICE, null, 1.7, 120, AbilityId.GORILLA_TACTICS, AbilityId.NONE, AbilityId.ZEN_MODE, 480, 105, 140, 55, 30, 55, 95, 60, 50, 168, GrowthRate.MEDIUM_SLOW, 50, false, true, + new PokemonForm("Standard Mode", "", PokemonType.ICE, null, 1.7, 120, AbilityId.GORILLA_TACTICS, AbilityId.NONE, AbilityId.ZEN_MODE, 480, 105, 140, 55, 30, 55, 95, 60, 50, 168, false, null, true), + new PokemonForm("Zen Mode", "zen", PokemonType.ICE, PokemonType.FIRE, 1.7, 120, AbilityId.GORILLA_TACTICS, AbilityId.NONE, AbilityId.ZEN_MODE, 540, 105, 160, 55, 30, 55, 135, 60, 50, 189), + ), + new PokemonSpecies(SpeciesId.GALAR_YAMASK, 8, false, false, false, "Spirit Pokémon", PokemonType.GROUND, PokemonType.GHOST, 0.5, 1.5, AbilityId.WANDERING_SPIRIT, AbilityId.NONE, AbilityId.NONE, 303, 38, 55, 85, 30, 65, 30, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.GALAR_STUNFISK, 8, false, false, false, "Trap Pokémon", PokemonType.GROUND, PokemonType.STEEL, 0.7, 20.5, AbilityId.MIMICRY, AbilityId.NONE, AbilityId.NONE, 471, 109, 81, 99, 66, 84, 32, 75, 70, 165, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.HISUI_GROWLITHE, 8, false, false, false, "Puppy Pokémon", PokemonType.FIRE, PokemonType.ROCK, 0.8, 22.7, AbilityId.INTIMIDATE, AbilityId.FLASH_FIRE, AbilityId.ROCK_HEAD, 350, 60, 75, 45, 65, 50, 55, 190, 50, 70, GrowthRate.SLOW, 75, false), + new PokemonSpecies(SpeciesId.HISUI_ARCANINE, 8, false, false, false, "Legendary Pokémon", PokemonType.FIRE, PokemonType.ROCK, 2, 168, AbilityId.INTIMIDATE, AbilityId.FLASH_FIRE, AbilityId.ROCK_HEAD, 555, 95, 115, 80, 95, 80, 90, 85, 50, 194, GrowthRate.SLOW, 75, false), + new PokemonSpecies(SpeciesId.HISUI_VOLTORB, 8, false, false, false, "Ball Pokémon", PokemonType.ELECTRIC, PokemonType.GRASS, 0.5, 13, AbilityId.SOUNDPROOF, AbilityId.STATIC, AbilityId.AFTERMATH, 330, 40, 30, 50, 55, 55, 100, 190, 80, 66, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.HISUI_ELECTRODE, 8, false, false, false, "Ball Pokémon", PokemonType.ELECTRIC, PokemonType.GRASS, 1.2, 81, AbilityId.SOUNDPROOF, AbilityId.STATIC, AbilityId.AFTERMATH, 490, 60, 50, 70, 80, 80, 150, 60, 70, 172, GrowthRate.MEDIUM_FAST, null, false), + new PokemonSpecies(SpeciesId.HISUI_TYPHLOSION, 8, false, false, false, "Volcano Pokémon", PokemonType.FIRE, PokemonType.GHOST, 1.6, 69.8, AbilityId.BLAZE, AbilityId.NONE, AbilityId.FRISK, 534, 73, 84, 78, 119, 85, 95, 45, 70, 240, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.HISUI_QWILFISH, 8, false, false, false, "Balloon Pokémon", PokemonType.DARK, PokemonType.POISON, 0.5, 3.9, AbilityId.POISON_POINT, AbilityId.SWIFT_SWIM, AbilityId.INTIMIDATE, 440, 65, 95, 85, 55, 55, 85, 45, 50, 88, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.HISUI_SNEASEL, 8, false, false, false, "Sharp Claw Pokémon", PokemonType.FIGHTING, PokemonType.POISON, 0.9, 27, AbilityId.INNER_FOCUS, AbilityId.KEEN_EYE, AbilityId.PICKPOCKET, 430, 55, 95, 55, 35, 75, 115, 60, 35, 86, GrowthRate.MEDIUM_SLOW, 50, true), + new PokemonSpecies(SpeciesId.HISUI_SAMUROTT, 8, false, false, false, "Formidable Pokémon", PokemonType.WATER, PokemonType.DARK, 1.5, 58.2, AbilityId.TORRENT, AbilityId.NONE, AbilityId.SHARPNESS, 528, 90, 108, 80, 100, 65, 85, 45, 80, 238, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.HISUI_LILLIGANT, 8, false, false, false, "Flowering Pokémon", PokemonType.GRASS, PokemonType.FIGHTING, 1.2, 19.2, AbilityId.CHLOROPHYLL, AbilityId.HUSTLE, AbilityId.LEAF_GUARD, 480, 70, 105, 75, 50, 75, 105, 75, 50, 168, GrowthRate.MEDIUM_FAST, 0, false), + new PokemonSpecies(SpeciesId.HISUI_ZORUA, 8, false, false, false, "Tricky Fox Pokémon", PokemonType.NORMAL, PokemonType.GHOST, 0.7, 12.5, AbilityId.ILLUSION, AbilityId.NONE, AbilityId.NONE, 330, 35, 60, 40, 85, 40, 70, 75, 50, 66, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.HISUI_ZOROARK, 8, false, false, false, "Illusion Fox Pokémon", PokemonType.NORMAL, PokemonType.GHOST, 1.6, 83, AbilityId.ILLUSION, AbilityId.NONE, AbilityId.NONE, 510, 55, 100, 60, 125, 60, 110, 45, 50, 179, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.HISUI_BRAVIARY, 8, false, false, false, "Valiant Pokémon", PokemonType.PSYCHIC, PokemonType.FLYING, 1.7, 43.4, AbilityId.KEEN_EYE, AbilityId.SHEER_FORCE, AbilityId.TINTED_LENS, 510, 110, 83, 70, 112, 70, 65, 60, 50, 179, GrowthRate.SLOW, 100, false), + new PokemonSpecies(SpeciesId.HISUI_SLIGGOO, 8, false, false, false, "Soft Tissue Pokémon", PokemonType.STEEL, PokemonType.DRAGON, 0.7, 68.5, AbilityId.SAP_SIPPER, AbilityId.SHELL_ARMOR, AbilityId.GOOEY, 452, 58, 75, 83, 83, 113, 40, 45, 35, 158, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.HISUI_GOODRA, 8, false, false, false, "Dragon Pokémon", PokemonType.STEEL, PokemonType.DRAGON, 1.7, 334.1, AbilityId.SAP_SIPPER, AbilityId.SHELL_ARMOR, AbilityId.GOOEY, 600, 80, 100, 100, 110, 150, 60, 45, 35, 270, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.HISUI_AVALUGG, 8, false, false, false, "Iceberg Pokémon", PokemonType.ICE, PokemonType.ROCK, 1.4, 262.4, AbilityId.STRONG_JAW, AbilityId.ICE_BODY, AbilityId.STURDY, 514, 95, 127, 184, 34, 36, 38, 55, 50, 180, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.HISUI_DECIDUEYE, 8, false, false, false, "Arrow Quill Pokémon", PokemonType.GRASS, PokemonType.FIGHTING, 1.6, 37, AbilityId.OVERGROW, AbilityId.NONE, AbilityId.SCRAPPY, 530, 88, 112, 80, 95, 95, 60, 45, 50, 239, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(SpeciesId.PALDEA_TAUROS, 9, false, false, false, "Wild Bull Pokémon", PokemonType.FIGHTING, null, 1.4, 115, AbilityId.INTIMIDATE, AbilityId.ANGER_POINT, AbilityId.CUD_CHEW, 490, 75, 110, 105, 30, 70, 100, 45, 50, 172, GrowthRate.SLOW, 100, false, false, + new PokemonForm("Combat Breed", "combat", PokemonType.FIGHTING, null, 1.4, 115, AbilityId.INTIMIDATE, AbilityId.ANGER_POINT, AbilityId.CUD_CHEW, 490, 75, 110, 105, 30, 70, 100, 45, 50, 172, false, "", true), + new PokemonForm("Blaze Breed", "blaze", PokemonType.FIGHTING, PokemonType.FIRE, 1.4, 85, AbilityId.INTIMIDATE, AbilityId.ANGER_POINT, AbilityId.CUD_CHEW, 490, 75, 110, 105, 30, 70, 100, 45, 50, 172, false, null, true), + new PokemonForm("Aqua Breed", "aqua", PokemonType.FIGHTING, PokemonType.WATER, 1.4, 110, AbilityId.INTIMIDATE, AbilityId.ANGER_POINT, AbilityId.CUD_CHEW, 490, 75, 110, 105, 30, 70, 100, 45, 50, 172, false, null, true), + ), + new PokemonSpecies(SpeciesId.PALDEA_WOOPER, 9, false, false, false, "Water Fish Pokémon", PokemonType.POISON, PokemonType.GROUND, 0.4, 11, AbilityId.POISON_POINT, AbilityId.WATER_ABSORB, AbilityId.UNAWARE, 210, 55, 45, 45, 25, 25, 15, 255, 50, 42, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BLOODMOON_URSALUNA, 9, true, false, false, "Peat Pokémon", PokemonType.GROUND, PokemonType.NORMAL, 2.7, 333, AbilityId.MINDS_EYE, AbilityId.NONE, AbilityId.NONE, 555, 113, 70, 120, 135, 65, 52, 75, 50, 278, GrowthRate.MEDIUM_FAST, 50, false), //Marked as Sub-Legend, for casing purposes ); } diff --git a/src/data/trainers/evil-admin-trainer-pools.ts b/src/data/trainers/evil-admin-trainer-pools.ts index fe68cf50c9c..7c0336e784e 100644 --- a/src/data/trainers/evil-admin-trainer-pools.ts +++ b/src/data/trainers/evil-admin-trainer-pools.ts @@ -1,438 +1,443 @@ import type { TrainerTierPools } from "#app/data/trainers/typedefs"; import { TrainerPoolTier } from "#enums/trainer-pool-tier"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; /** Team Rocket's admin trainer pool. */ const ROCKET: TrainerTierPools = { [TrainerPoolTier.COMMON]: [ - Species.RATTATA, - Species.SPEAROW, - Species.EKANS, - Species.VILEPLUME, - Species.DIGLETT, - Species.GROWLITHE, - Species.GRIMER, - Species.DROWZEE, - Species.VOLTORB, - Species.EXEGGCUTE, - Species.CUBONE, - Species.KOFFING, - Species.MAGIKARP, - Species.ZUBAT, - Species.ONIX, - Species.HOUNDOUR, - Species.MURKROW, + SpeciesId.RATTATA, + SpeciesId.SPEAROW, + SpeciesId.EKANS, + SpeciesId.VILEPLUME, + SpeciesId.DIGLETT, + SpeciesId.GROWLITHE, + SpeciesId.GRIMER, + SpeciesId.DROWZEE, + SpeciesId.VOLTORB, + SpeciesId.EXEGGCUTE, + SpeciesId.CUBONE, + SpeciesId.KOFFING, + SpeciesId.MAGIKARP, + SpeciesId.ZUBAT, + SpeciesId.ONIX, + SpeciesId.HOUNDOUR, + SpeciesId.MURKROW, ], [TrainerPoolTier.UNCOMMON]: [ - Species.ABRA, - Species.GASTLY, - Species.OMANYTE, - Species.KABUTO, - Species.PORYGON, - Species.MANKEY, - Species.SCYTHER, - Species.ELEKID, - Species.MAGBY, - Species.ALOLA_SANDSHREW, - Species.ALOLA_MEOWTH, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRIMER, - Species.PALDEA_TAUROS, + SpeciesId.ABRA, + SpeciesId.GASTLY, + SpeciesId.OMANYTE, + SpeciesId.KABUTO, + SpeciesId.PORYGON, + SpeciesId.MANKEY, + SpeciesId.SCYTHER, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRIMER, + SpeciesId.PALDEA_TAUROS, ], - [TrainerPoolTier.RARE]: [Species.DRATINI, Species.LARVITAR], + [TrainerPoolTier.RARE]: [SpeciesId.DRATINI, SpeciesId.LARVITAR], }; /** Team Magma's admin trainer pool */ const MAGMA: TrainerTierPools = { [TrainerPoolTier.COMMON]: [ - Species.DIGLETT, - Species.GROWLITHE, - Species.VULPIX, - Species.KOFFING, - Species.RHYHORN, - Species.SLUGMA, - Species.HOUNDOUR, - Species.POOCHYENA, - Species.TORKOAL, - Species.ZANGOOSE, - Species.SOLROCK, - Species.BALTOY, - Species.ROLYCOLY, + SpeciesId.DIGLETT, + SpeciesId.GROWLITHE, + SpeciesId.VULPIX, + SpeciesId.KOFFING, + SpeciesId.RHYHORN, + SpeciesId.SLUGMA, + SpeciesId.HOUNDOUR, + SpeciesId.POOCHYENA, + SpeciesId.TORKOAL, + SpeciesId.ZANGOOSE, + SpeciesId.SOLROCK, + SpeciesId.BALTOY, + SpeciesId.ROLYCOLY, ], [TrainerPoolTier.UNCOMMON]: [ - Species.MAGBY, - Species.TRAPINCH, - Species.LILEEP, - Species.ANORITH, - Species.GOLETT, - Species.FLETCHLING, - Species.SALANDIT, - Species.TURTONATOR, - Species.TOEDSCOOL, - Species.CAPSAKID, - Species.HISUI_GROWLITHE, + SpeciesId.MAGBY, + SpeciesId.TRAPINCH, + SpeciesId.LILEEP, + SpeciesId.ANORITH, + SpeciesId.GOLETT, + SpeciesId.FLETCHLING, + SpeciesId.SALANDIT, + SpeciesId.TURTONATOR, + SpeciesId.TOEDSCOOL, + SpeciesId.CAPSAKID, + SpeciesId.HISUI_GROWLITHE, ], - [TrainerPoolTier.RARE]: [Species.CHARCADET, Species.ARON], + [TrainerPoolTier.RARE]: [SpeciesId.CHARCADET, SpeciesId.ARON], }; const AQUA: TrainerTierPools = { [TrainerPoolTier.COMMON]: [ - Species.TENTACOOL, - Species.GRIMER, - Species.AZURILL, - Species.CHINCHOU, - Species.REMORAID, - Species.POOCHYENA, - Species.LOTAD, - Species.WINGULL, - Species.WAILMER, - Species.SEVIPER, - Species.BARBOACH, - Species.CORPHISH, - Species.SPHEAL, - Species.CLAMPERL, + SpeciesId.TENTACOOL, + SpeciesId.GRIMER, + SpeciesId.AZURILL, + SpeciesId.CHINCHOU, + SpeciesId.REMORAID, + SpeciesId.POOCHYENA, + SpeciesId.LOTAD, + SpeciesId.WINGULL, + SpeciesId.WAILMER, + SpeciesId.SEVIPER, + SpeciesId.BARBOACH, + SpeciesId.CORPHISH, + SpeciesId.SPHEAL, + SpeciesId.CLAMPERL, ], [TrainerPoolTier.UNCOMMON]: [ - Species.MANTYKE, - Species.HORSEA, - Species.FEEBAS, - Species.TYMPOLE, - Species.SKRELP, - Species.WIMPOD, - Species.DHELMISE, - Species.ARROKUDA, - Species.CLOBBOPUS, - Species.HISUI_QWILFISH, - Species.WIGLETT, + SpeciesId.MANTYKE, + SpeciesId.HORSEA, + SpeciesId.FEEBAS, + SpeciesId.TYMPOLE, + SpeciesId.SKRELP, + SpeciesId.WIMPOD, + SpeciesId.DHELMISE, + SpeciesId.ARROKUDA, + SpeciesId.CLOBBOPUS, + SpeciesId.HISUI_QWILFISH, + SpeciesId.WIGLETT, ], - [TrainerPoolTier.RARE]: [Species.BASCULEGION, Species.DONDOZO], + [TrainerPoolTier.RARE]: [SpeciesId.BASCULEGION, SpeciesId.DONDOZO], }; const GALACTIC: TrainerTierPools = { [TrainerPoolTier.COMMON]: [ - Species.ZUBAT, - Species.MAGNEMITE, - Species.RHYHORN, - Species.TANGELA, - Species.LICKITUNG, - Species.MAGIKARP, - Species.YANMA, - Species.MURKROW, - Species.SWINUB, - Species.ELEKID, - Species.MAGBY, - Species.BRONZOR, - Species.SKORUPI, + SpeciesId.ZUBAT, + SpeciesId.MAGNEMITE, + SpeciesId.RHYHORN, + SpeciesId.TANGELA, + SpeciesId.LICKITUNG, + SpeciesId.MAGIKARP, + SpeciesId.YANMA, + SpeciesId.MURKROW, + SpeciesId.SWINUB, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.BRONZOR, + SpeciesId.SKORUPI, ], [TrainerPoolTier.UNCOMMON]: [ - Species.ABRA, - Species.GLIGAR, - Species.SNEASEL, - Species.DUSKULL, - Species.DRIFLOON, - Species.CRANIDOS, - Species.SHIELDON, - Species.ROTOM, - Species.HISUI_QWILFISH, + SpeciesId.ABRA, + SpeciesId.GLIGAR, + SpeciesId.SNEASEL, + SpeciesId.DUSKULL, + SpeciesId.DRIFLOON, + SpeciesId.CRANIDOS, + SpeciesId.SHIELDON, + SpeciesId.ROTOM, + SpeciesId.HISUI_QWILFISH, + ], + [TrainerPoolTier.RARE]: [ + SpeciesId.SPIRITOMB, + SpeciesId.TEDDIURSA, + SpeciesId.HISUI_SNEASEL, + SpeciesId.HISUI_LILLIGANT, ], - [TrainerPoolTier.RARE]: [Species.SPIRITOMB, Species.TEDDIURSA, Species.HISUI_SNEASEL, Species.HISUI_LILLIGANT], }; const PLASMA_ZINZOLIN: TrainerTierPools = { [TrainerPoolTier.COMMON]: [ - Species.SNEASEL, - Species.SWINUB, - Species.SNORUNT, - Species.SNOVER, - Species.TIMBURR, - Species.TYMPOLE, - Species.SANDILE, - Species.DARUMAKA, - Species.VANILLITE, - Species.FOONGUS, - Species.FRILLISH, - Species.JOLTIK, - Species.FERROSEED, - Species.CUBCHOO, - Species.GALAR_DARUMAKA, + SpeciesId.SNEASEL, + SpeciesId.SWINUB, + SpeciesId.SNORUNT, + SpeciesId.SNOVER, + SpeciesId.TIMBURR, + SpeciesId.TYMPOLE, + SpeciesId.SANDILE, + SpeciesId.DARUMAKA, + SpeciesId.VANILLITE, + SpeciesId.FOONGUS, + SpeciesId.FRILLISH, + SpeciesId.JOLTIK, + SpeciesId.FERROSEED, + SpeciesId.CUBCHOO, + SpeciesId.GALAR_DARUMAKA, ], [TrainerPoolTier.UNCOMMON]: [ - Species.SPHEAL, - Species.DRILBUR, - Species.SIGILYPH, - Species.YAMASK, - Species.ZORUA, - Species.TYNAMO, - Species.MIENFOO, - Species.GOLETT, - Species.PAWNIARD, - Species.VULLABY, - Species.DURANT, - Species.BERGMITE, - Species.EISCUE, - Species.ALOLA_SANDSHREW, - Species.HISUI_ZORUA, + SpeciesId.SPHEAL, + SpeciesId.DRILBUR, + SpeciesId.SIGILYPH, + SpeciesId.YAMASK, + SpeciesId.ZORUA, + SpeciesId.TYNAMO, + SpeciesId.MIENFOO, + SpeciesId.GOLETT, + SpeciesId.PAWNIARD, + SpeciesId.VULLABY, + SpeciesId.DURANT, + SpeciesId.BERGMITE, + SpeciesId.EISCUE, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.HISUI_ZORUA, ], - [TrainerPoolTier.RARE]: [Species.DEINO, Species.FRIGIBAX, Species.HISUI_BRAVIARY], + [TrainerPoolTier.RARE]: [SpeciesId.DEINO, SpeciesId.FRIGIBAX, SpeciesId.HISUI_BRAVIARY], }; const PLASMA_COLRESS: TrainerTierPools = { [TrainerPoolTier.COMMON]: [ - Species.MAGNEMITE, - Species.GRIMER, - Species.VOLTORB, - Species.PORYGON, - Species.BRONZOR, - Species.ROTOM, - Species.MUNNA, - Species.DWEBBLE, - Species.FERROSEED, - Species.ELGYEM, + SpeciesId.MAGNEMITE, + SpeciesId.GRIMER, + SpeciesId.VOLTORB, + SpeciesId.PORYGON, + SpeciesId.BRONZOR, + SpeciesId.ROTOM, + SpeciesId.MUNNA, + SpeciesId.DWEBBLE, + SpeciesId.FERROSEED, + SpeciesId.ELGYEM, ], [TrainerPoolTier.UNCOMMON]: [ - Species.BELDUM, - Species.SIGILYPH, - Species.TIRTOUGA, - Species.ARCHEN, - Species.TYNAMO, - Species.GOLETT, - Species.BLIPBUG, - Species.VAROOM, - Species.ALOLA_GRIMER, - Species.HISUI_VOLTORB, + SpeciesId.BELDUM, + SpeciesId.SIGILYPH, + SpeciesId.TIRTOUGA, + SpeciesId.ARCHEN, + SpeciesId.TYNAMO, + SpeciesId.GOLETT, + SpeciesId.BLIPBUG, + SpeciesId.VAROOM, + SpeciesId.ALOLA_GRIMER, + SpeciesId.HISUI_VOLTORB, ], - [TrainerPoolTier.RARE]: [Species.ELEKID, Species.MAGBY, Species.PAWNIARD, Species.DURALUDON], + [TrainerPoolTier.RARE]: [SpeciesId.ELEKID, SpeciesId.MAGBY, SpeciesId.PAWNIARD, SpeciesId.DURALUDON], }; const FLARE: TrainerTierPools = { [TrainerPoolTier.COMMON]: [ - Species.ELECTRIKE, - Species.SKORUPI, - Species.PURRLOIN, - Species.FOONGUS, - Species.BUNNELBY, - Species.FLETCHLING, - Species.LITLEO, - Species.PANGORO, - Species.ESPURR, - Species.INKAY, - Species.CLAUNCHER, - Species.HELIOPTILE, + SpeciesId.ELECTRIKE, + SpeciesId.SKORUPI, + SpeciesId.PURRLOIN, + SpeciesId.FOONGUS, + SpeciesId.BUNNELBY, + SpeciesId.FLETCHLING, + SpeciesId.LITLEO, + SpeciesId.PANGORO, + SpeciesId.ESPURR, + SpeciesId.INKAY, + SpeciesId.CLAUNCHER, + SpeciesId.HELIOPTILE, ], [TrainerPoolTier.UNCOMMON]: [ - Species.HOUNDOUR, - Species.SNEASEL, - Species.LITWICK, - Species.HONEDGE, - Species.BINACLE, - Species.SKRELP, - Species.NOIBAT, - Species.PHANTUMP, - Species.PUMPKABOO, + SpeciesId.HOUNDOUR, + SpeciesId.SNEASEL, + SpeciesId.LITWICK, + SpeciesId.HONEDGE, + SpeciesId.BINACLE, + SpeciesId.SKRELP, + SpeciesId.NOIBAT, + SpeciesId.PHANTUMP, + SpeciesId.PUMPKABOO, ], - [TrainerPoolTier.RARE]: [Species.GOOMY, Species.HISUI_AVALUGG], + [TrainerPoolTier.RARE]: [SpeciesId.GOOMY, SpeciesId.HISUI_AVALUGG], }; const AETHER: TrainerTierPools = { [TrainerPoolTier.COMMON]: [ - Species.ABRA, - Species.SLOWPOKE, - Species.MAGNEMITE, - Species.EXEGGUTOR, - Species.NATU, - Species.BALTOY, - Species.MIME_JR, - Species.ELGYEM, - Species.INKAY, - Species.BRUXISH, - Species.BLIPBUG, - Species.ALOLA_RAICHU, + SpeciesId.ABRA, + SpeciesId.SLOWPOKE, + SpeciesId.MAGNEMITE, + SpeciesId.EXEGGUTOR, + SpeciesId.NATU, + SpeciesId.BALTOY, + SpeciesId.MIME_JR, + SpeciesId.ELGYEM, + SpeciesId.INKAY, + SpeciesId.BRUXISH, + SpeciesId.BLIPBUG, + SpeciesId.ALOLA_RAICHU, ], [TrainerPoolTier.UNCOMMON]: [ - Species.RALTS, - Species.MEDITITE, - Species.BELDUM, - Species.SOLOSIS, - Species.HATENNA, - Species.STANTLER, - Species.GIRAFARIG, - Species.ALOLA_GRIMER, - Species.GALAR_SLOWPOKE, + SpeciesId.RALTS, + SpeciesId.MEDITITE, + SpeciesId.BELDUM, + SpeciesId.SOLOSIS, + SpeciesId.HATENNA, + SpeciesId.STANTLER, + SpeciesId.GIRAFARIG, + SpeciesId.ALOLA_GRIMER, + SpeciesId.GALAR_SLOWPOKE, ], - [TrainerPoolTier.RARE]: [Species.PORYGON, Species.ARMAROUGE], + [TrainerPoolTier.RARE]: [SpeciesId.PORYGON, SpeciesId.ARMAROUGE], }; const SKULL: TrainerTierPools = { [TrainerPoolTier.COMMON]: [ - Species.GASTLY, - Species.KOFFING, - Species.ZUBAT, - Species.VENONAT, - Species.STUNKY, - Species.CROAGUNK, - Species.VENIPEDE, - Species.SCRAGGY, - Species.MAREANIE, - Species.FOMANTIS, - Species.ALOLA_GRIMER, + SpeciesId.GASTLY, + SpeciesId.KOFFING, + SpeciesId.ZUBAT, + SpeciesId.VENONAT, + SpeciesId.STUNKY, + SpeciesId.CROAGUNK, + SpeciesId.VENIPEDE, + SpeciesId.SCRAGGY, + SpeciesId.MAREANIE, + SpeciesId.FOMANTIS, + SpeciesId.ALOLA_GRIMER, ], [TrainerPoolTier.UNCOMMON]: [ - Species.NIDORAN_F, - Species.SKORUPI, - Species.PAWNIARD, - Species.VULLABY, - Species.TOXEL, - Species.GLIMMET, - Species.PALDEA_WOOPER, - Species.GALAR_SLOWPOKE, + SpeciesId.NIDORAN_F, + SpeciesId.SKORUPI, + SpeciesId.PAWNIARD, + SpeciesId.VULLABY, + SpeciesId.TOXEL, + SpeciesId.GLIMMET, + SpeciesId.PALDEA_WOOPER, + SpeciesId.GALAR_SLOWPOKE, ], - [TrainerPoolTier.RARE]: [Species.SKRELP, Species.HISUI_SNEASEL], + [TrainerPoolTier.RARE]: [SpeciesId.SKRELP, SpeciesId.HISUI_SNEASEL], }; const MACRO_COSMOS: TrainerTierPools = { [TrainerPoolTier.COMMON]: [ - Species.VULPIX, - Species.FEEBAS, - Species.MAWILE, - Species.FROSLASS, - Species.GOTHITA, - Species.FLABEBE, - Species.SALANDIT, - Species.TSAREENA, - Species.SINISTEA, - Species.HATENNA, - Species.INDEEDEE, - Species.GALAR_PONYTA, + SpeciesId.VULPIX, + SpeciesId.FEEBAS, + SpeciesId.MAWILE, + SpeciesId.FROSLASS, + SpeciesId.GOTHITA, + SpeciesId.FLABEBE, + SpeciesId.SALANDIT, + SpeciesId.TSAREENA, + SpeciesId.SINISTEA, + SpeciesId.HATENNA, + SpeciesId.INDEEDEE, + SpeciesId.GALAR_PONYTA, ], [TrainerPoolTier.UNCOMMON]: [ - Species.TOGEPI, - Species.VULLABY, - Species.MAREANIE, - Species.CUFANT, - Species.TINKATINK, - Species.ALOLA_VULPIX, - Species.GALAR_CORSOLA, + SpeciesId.TOGEPI, + SpeciesId.VULLABY, + SpeciesId.MAREANIE, + SpeciesId.CUFANT, + SpeciesId.TINKATINK, + SpeciesId.ALOLA_VULPIX, + SpeciesId.GALAR_CORSOLA, ], - [TrainerPoolTier.RARE]: [Species.APPLIN, Species.HISUI_LILLIGANT], + [TrainerPoolTier.RARE]: [SpeciesId.APPLIN, SpeciesId.HISUI_LILLIGANT], }; const STAR_DARK: TrainerTierPools = { [TrainerPoolTier.COMMON]: [ - Species.MURKROW, - Species.SEEDOT, - Species.SABLEYE, - Species.CACNEA, - Species.STUNKY, - Species.SANDILE, - Species.INKAY, - Species.NYMBLE, - Species.MASCHIFF, + SpeciesId.MURKROW, + SpeciesId.SEEDOT, + SpeciesId.SABLEYE, + SpeciesId.CACNEA, + SpeciesId.STUNKY, + SpeciesId.SANDILE, + SpeciesId.INKAY, + SpeciesId.NYMBLE, + SpeciesId.MASCHIFF, ], [TrainerPoolTier.UNCOMMON]: [ - Species.UMBREON, - Species.CORPHISH, - Species.SNEASEL, - Species.ZORUA, - Species.IMPIDIMP, - Species.BOMBIRDIER, - Species.GALAR_ZIGZAGOON, + SpeciesId.UMBREON, + SpeciesId.CORPHISH, + SpeciesId.SNEASEL, + SpeciesId.ZORUA, + SpeciesId.IMPIDIMP, + SpeciesId.BOMBIRDIER, + SpeciesId.GALAR_ZIGZAGOON, ], - [TrainerPoolTier.RARE]: [Species.DEINO, Species.SPRIGATITO], + [TrainerPoolTier.RARE]: [SpeciesId.DEINO, SpeciesId.SPRIGATITO], }; const STAR_FIRE: TrainerTierPools = { [TrainerPoolTier.COMMON]: [ - Species.GROWLITHE, - Species.HOUNDOUR, - Species.NUMEL, - Species.TORKOAL, - Species.FLETCHLING, - Species.LITLEO, - Species.SIZZLIPEDE, - Species.ROLYCOLY, - Species.CAPSAKID, + SpeciesId.GROWLITHE, + SpeciesId.HOUNDOUR, + SpeciesId.NUMEL, + SpeciesId.TORKOAL, + SpeciesId.FLETCHLING, + SpeciesId.LITLEO, + SpeciesId.SIZZLIPEDE, + SpeciesId.ROLYCOLY, + SpeciesId.CAPSAKID, ], [TrainerPoolTier.UNCOMMON]: [ - Species.PONYTA, - Species.FLAREON, - Species.MAGBY, - Species.DARUMAKA, - Species.LITWICK, - Species.SALANDIT, - Species.TURTONATOR, + SpeciesId.PONYTA, + SpeciesId.FLAREON, + SpeciesId.MAGBY, + SpeciesId.DARUMAKA, + SpeciesId.LITWICK, + SpeciesId.SALANDIT, + SpeciesId.TURTONATOR, ], - [TrainerPoolTier.RARE]: [Species.LARVESTA, Species.FUECOCO], + [TrainerPoolTier.RARE]: [SpeciesId.LARVESTA, SpeciesId.FUECOCO], }; const STAR_POISON: TrainerTierPools = { [TrainerPoolTier.COMMON]: [ - Species.GRIMER, - Species.VENONAT, - Species.SEVIPER, - Species.STUNKY, - Species.FOONGUS, - Species.MAREANIE, - Species.TOXEL, - Species.GRAFAIAI, - Species.PALDEA_WOOPER, + SpeciesId.GRIMER, + SpeciesId.VENONAT, + SpeciesId.SEVIPER, + SpeciesId.STUNKY, + SpeciesId.FOONGUS, + SpeciesId.MAREANIE, + SpeciesId.TOXEL, + SpeciesId.GRAFAIAI, + SpeciesId.PALDEA_WOOPER, ], [TrainerPoolTier.UNCOMMON]: [ - Species.ZUBAT, - Species.GASTLY, - Species.SKRELP, - Species.OVERQWIL, - Species.ALOLA_GRIMER, - Species.GALAR_SLOWPOKE, + SpeciesId.ZUBAT, + SpeciesId.GASTLY, + SpeciesId.SKRELP, + SpeciesId.OVERQWIL, + SpeciesId.ALOLA_GRIMER, + SpeciesId.GALAR_SLOWPOKE, ], - [TrainerPoolTier.RARE]: [Species.GLIMMET, Species.BULBASAUR], + [TrainerPoolTier.RARE]: [SpeciesId.GLIMMET, SpeciesId.BULBASAUR], }; const STAR_FAIRY: TrainerTierPools = { [TrainerPoolTier.COMMON]: [ - Species.IGGLYBUFF, - Species.AZURILL, - Species.COTTONEE, - Species.FLABEBE, - Species.KLEFKI, - Species.CUTIEFLY, - Species.HATENNA, - Species.TINKATINK, + SpeciesId.IGGLYBUFF, + SpeciesId.AZURILL, + SpeciesId.COTTONEE, + SpeciesId.FLABEBE, + SpeciesId.KLEFKI, + SpeciesId.CUTIEFLY, + SpeciesId.HATENNA, + SpeciesId.TINKATINK, ], [TrainerPoolTier.UNCOMMON]: [ - Species.CLEFFA, - Species.TOGEPI, - Species.GARDEVOIR, - Species.SYLVEON, - Species.MIMIKYU, - Species.IMPIDIMP, - Species.ALOLA_VULPIX, + SpeciesId.CLEFFA, + SpeciesId.TOGEPI, + SpeciesId.GARDEVOIR, + SpeciesId.SYLVEON, + SpeciesId.MIMIKYU, + SpeciesId.IMPIDIMP, + SpeciesId.ALOLA_VULPIX, ], - [TrainerPoolTier.RARE]: [Species.GALAR_PONYTA, Species.POPPLIO], + [TrainerPoolTier.RARE]: [SpeciesId.GALAR_PONYTA, SpeciesId.POPPLIO], }; const STAR_FIGHTING: TrainerTierPools = { [TrainerPoolTier.COMMON]: [ - Species.TYROGUE, - Species.SHROOMISH, - Species.MAKUHITA, - Species.RIOLU, - Species.CROAGUNK, - Species.SCRAGGY, - Species.MIENFOO, - Species.PASSIMIAN, - Species.PAWMI, + SpeciesId.TYROGUE, + SpeciesId.SHROOMISH, + SpeciesId.MAKUHITA, + SpeciesId.RIOLU, + SpeciesId.CROAGUNK, + SpeciesId.SCRAGGY, + SpeciesId.MIENFOO, + SpeciesId.PASSIMIAN, + SpeciesId.PAWMI, ], [TrainerPoolTier.UNCOMMON]: [ - Species.MEDITITE, - Species.GALLADE, - Species.TIMBURR, - Species.HAWLUCHA, - Species.STUFFUL, - Species.FALINKS, - Species.FLAMIGO, - Species.PALDEA_TAUROS, + SpeciesId.MEDITITE, + SpeciesId.GALLADE, + SpeciesId.TIMBURR, + SpeciesId.HAWLUCHA, + SpeciesId.STUFFUL, + SpeciesId.FALINKS, + SpeciesId.FLAMIGO, + SpeciesId.PALDEA_TAUROS, ], - [TrainerPoolTier.RARE]: [Species.JANGMO_O, Species.QUAXLY], + [TrainerPoolTier.RARE]: [SpeciesId.JANGMO_O, SpeciesId.QUAXLY], }; export type EvilTeam = diff --git a/src/data/trainers/trainer-config.ts b/src/data/trainers/trainer-config.ts index 839a1cdc0cc..6408bf94eac 100644 --- a/src/data/trainers/trainer-config.ts +++ b/src/data/trainers/trainer-config.ts @@ -23,11 +23,11 @@ import { evilAdminTrainerPools } from "./evil-admin-trainer-pools"; // Enum imports import { PartyMemberStrength } from "#enums/party-member-strength"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { PokeballType } from "#enums/pokeball"; import { PokemonType } from "#enums/pokemon-type"; -import { Moves } from "#enums/moves"; -import { Abilities } from "#enums/abilities"; +import { MoveId } from "#enums/move-id"; +import { AbilityId } from "#enums/ability-id"; import { TeraAIMode } from "#enums/tera-ai-mode"; import { TrainerPoolTier } from "#enums/trainer-pool-tier"; import { TrainerSlot } from "#enums/trainer-slot"; @@ -445,7 +445,7 @@ export class TrainerConfig { return this; } - setSpeciesPools(speciesPools: TrainerTierPools | Species[]): TrainerConfig { + setSpeciesPools(speciesPools: TrainerTierPools | SpeciesId[]): TrainerConfig { this.speciesPools = (Array.isArray(speciesPools) ? { [TrainerPoolTier.COMMON]: speciesPools } : speciesPools) as unknown as TrainerTierPools; @@ -480,7 +480,7 @@ export class TrainerConfig { const partyMemberIndexes = new Array(party.length) .fill(null) .map((_, i) => i) - .filter(i => shedinjaCanTera || party[i].species.speciesId !== Species.SHEDINJA); // Shedinja can only Tera on Bug specialty type (or no specialty type) + .filter(i => shedinjaCanTera || party[i].species.speciesId !== SpeciesId.SHEDINJA); // Shedinja can only Tera on Bug specialty type (or no specialty type) const setPartySlot = !isNullOrUndefined(slot) ? Phaser.Math.Wrap(slot, 0, party.length) : -1; // If we have a tera slot defined, wrap it to party size. for (let t = 0; t < Math.min(count(), party.length); t++) { const randomIndex = @@ -530,14 +530,14 @@ export class TrainerConfig { * Initializes the trainer configuration for an evil team admin. * @param title The title of the evil team admin. * @param poolName The evil team the admin belongs to. - * @param {Species | Species[]} signatureSpecies The signature species for the evil team leader. + * @param {SpeciesId | SpeciesId[]} signatureSpecies The signature species for the evil team leader. * @param specialtyType The specialty Type of the admin, if they have one * @returns {TrainerConfig} The updated TrainerConfig instance. * **/ initForEvilTeamAdmin( title: string, poolName: EvilTeam, - signatureSpecies: (Species | Species[])[], + signatureSpecies: (SpeciesId | SpeciesId[])[], specialtyType?: PokemonType, ): TrainerConfig { if (!getIsInitialized()) { @@ -600,14 +600,14 @@ export class TrainerConfig { /** * Initializes the trainer configuration for an evil team leader. Temporarily hardcoding evil leader teams though. - * @param {Species | Species[]} signatureSpecies The signature species for the evil team leader. + * @param {SpeciesId | SpeciesId[]} signatureSpecies The signature species for the evil team leader. * @param {PokemonType} specialtyType The specialty type for the evil team Leader. * @param boolean Whether or not this is the rematch fight * @returns {TrainerConfig} The updated TrainerConfig instance. * **/ initForEvilTeamLeader( title: string, - signatureSpecies: (Species | Species[])[], + signatureSpecies: (SpeciesId | SpeciesId[])[], rematch = false, specialtyType?: PokemonType, ): TrainerConfig { @@ -644,7 +644,7 @@ export class TrainerConfig { /** * Initializes the trainer configuration for a Gym Leader. - * @param {Species | Species[]} signatureSpecies The signature species for the Gym Leader. Added to party in reverse order. + * @param {SpeciesId | SpeciesId[]} signatureSpecies The signature species for the Gym Leader. Added to party in reverse order. * @param isMale Whether the Gym Leader is Male or Not (for localization of the title). * @param {PokemonType} specialtyType The specialty type for the Gym Leader. * @param ignoreMinTeraWave Whether the Gym Leader always uses Tera (true), or only Teras after {@linkcode GYM_LEADER_TERA_WAVE} (false). Defaults to false. @@ -652,7 +652,7 @@ export class TrainerConfig { * @returns {TrainerConfig} The updated TrainerConfig instance. * **/ initForGymLeader( - signatureSpecies: (Species | Species[])[], + signatureSpecies: (SpeciesId | SpeciesId[])[], isMale: boolean, specialtyType: PokemonType, ignoreMinTeraWave = false, @@ -714,7 +714,7 @@ export class TrainerConfig { * @returns The updated TrainerConfig instance. **/ initForEliteFour( - signatureSpecies: (Species | Species[])[], + signatureSpecies: (SpeciesId | SpeciesId[])[], isMale: boolean, specialtyType?: PokemonType, teraSlot?: number, @@ -769,7 +769,7 @@ export class TrainerConfig { /** * Initializes the trainer configuration for a Champion. - * @param {Species | Species[]} signatureSpecies The signature species for the Champion. + * @param {SpeciesId | SpeciesId[]} signatureSpecies The signature species for the Champion. * @param isMale Whether the Champion is Male or Female (for localization of the title). * @returns {TrainerConfig} The updated TrainerConfig instance. **/ @@ -989,7 +989,7 @@ let t = 0; * @param postProcess */ export function getRandomPartyMemberFunc( - speciesPool: Species[], + speciesPool: SpeciesId[], trainerSlot: TrainerSlot = TrainerSlot.TRAINER, ignoreEvolution = false, postProcess?: (enemyPokemon: EnemyPokemon) => void, @@ -1057,7 +1057,7 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.ARTIST]: new TrainerConfig(++t) .setEncounterBgm(TrainerType.RICH) .setPartyTemplates(trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.THREE_AVG) - .setSpeciesPools([Species.SMEARGLE]), + .setSpeciesPools([SpeciesId.SMEARGLE]), [TrainerType.BACKERS]: new TrainerConfig(++t) .setHasGenders("Backers") .setDoubleOnly() @@ -1074,33 +1074,33 @@ export const trainerConfigs: TrainerConfigs = { ) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ - Species.RHYHORN, - Species.AIPOM, - Species.MAKUHITA, - Species.MAWILE, - Species.NUMEL, - Species.LILLIPUP, - Species.SANDILE, - Species.WOOLOO, + SpeciesId.RHYHORN, + SpeciesId.AIPOM, + SpeciesId.MAKUHITA, + SpeciesId.MAWILE, + SpeciesId.NUMEL, + SpeciesId.LILLIPUP, + SpeciesId.SANDILE, + SpeciesId.WOOLOO, ], [TrainerPoolTier.UNCOMMON]: [ - Species.GIRAFARIG, - Species.ZANGOOSE, - Species.SEVIPER, - Species.CUBCHOO, - Species.PANCHAM, - Species.SKIDDO, - Species.MUDBRAY, + SpeciesId.GIRAFARIG, + SpeciesId.ZANGOOSE, + SpeciesId.SEVIPER, + SpeciesId.CUBCHOO, + SpeciesId.PANCHAM, + SpeciesId.SKIDDO, + SpeciesId.MUDBRAY, ], [TrainerPoolTier.RARE]: [ - Species.TAUROS, - Species.STANTLER, - Species.DARUMAKA, - Species.BOUFFALANT, - Species.DEERLING, - Species.IMPIDIMP, + SpeciesId.TAUROS, + SpeciesId.STANTLER, + SpeciesId.DARUMAKA, + SpeciesId.BOUFFALANT, + SpeciesId.DEERLING, + SpeciesId.IMPIDIMP, ], - [TrainerPoolTier.SUPER_RARE]: [Species.GALAR_DARUMAKA, Species.TEDDIURSA], + [TrainerPoolTier.SUPER_RARE]: [SpeciesId.GALAR_DARUMAKA, SpeciesId.TEDDIURSA], }), [TrainerType.BAKER]: new TrainerConfig(++t) .setEncounterBgm(TrainerType.CLERK) @@ -1111,23 +1111,23 @@ export const trainerConfigs: TrainerConfigs = { a => !!a && [ - Abilities.WHITE_SMOKE, - Abilities.GLUTTONY, - Abilities.HONEY_GATHER, - Abilities.HARVEST, - Abilities.CHEEK_POUCH, - Abilities.SWEET_VEIL, - Abilities.RIPEN, - Abilities.PURIFYING_SALT, - Abilities.WELL_BAKED_BODY, - Abilities.SUPERSWEET_SYRUP, - Abilities.HOSPITALITY, + AbilityId.WHITE_SMOKE, + AbilityId.GLUTTONY, + AbilityId.HONEY_GATHER, + AbilityId.HARVEST, + AbilityId.CHEEK_POUCH, + AbilityId.SWEET_VEIL, + AbilityId.RIPEN, + AbilityId.PURIFYING_SALT, + AbilityId.WELL_BAKED_BODY, + AbilityId.SUPERSWEET_SYRUP, + AbilityId.HOSPITALITY, ].includes(a), ) || s .getLevelMoves() .some(plm => - [Moves.SOFT_BOILED, Moves.SPORE, Moves.MILK_DRINK, Moves.OVERHEAT, Moves.TEATIME].includes(plm[1]), + [MoveId.SOFT_BOILED, MoveId.SPORE, MoveId.MILK_DRINK, MoveId.OVERHEAT, MoveId.TEATIME].includes(plm[1]), ), ), // Mons with baking related abilities or who learn Overheat, Teatime, Milk Drink, Spore, or Soft-Boiled by level [TrainerType.BEAUTY]: new TrainerConfig(++t) @@ -1143,53 +1143,65 @@ export const trainerConfigs: TrainerConfigs = { ) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ - Species.MEOWTH, - Species.GOLDEEN, - Species.MAREEP, - Species.MARILL, - Species.SKITTY, - Species.GLAMEOW, - Species.PURRLOIN, + SpeciesId.MEOWTH, + SpeciesId.GOLDEEN, + SpeciesId.MAREEP, + SpeciesId.MARILL, + SpeciesId.SKITTY, + SpeciesId.GLAMEOW, + SpeciesId.PURRLOIN, ], [TrainerPoolTier.UNCOMMON]: [ - Species.SMOOCHUM, - Species.ROSELIA, - Species.LUVDISC, - Species.BLITZLE, - Species.SEWADDLE, - Species.PETILIL, - Species.MINCCINO, - Species.GOTHITA, - Species.SPRITZEE, - Species.FLITTLE, + SpeciesId.SMOOCHUM, + SpeciesId.ROSELIA, + SpeciesId.LUVDISC, + SpeciesId.BLITZLE, + SpeciesId.SEWADDLE, + SpeciesId.PETILIL, + SpeciesId.MINCCINO, + SpeciesId.GOTHITA, + SpeciesId.SPRITZEE, + SpeciesId.FLITTLE, ], [TrainerPoolTier.RARE]: [ - Species.FEEBAS, - Species.FURFROU, - Species.SALANDIT, - Species.BRUXISH, - Species.HATENNA, - Species.SNOM, - Species.ALOLA_VULPIX, + SpeciesId.FEEBAS, + SpeciesId.FURFROU, + SpeciesId.SALANDIT, + SpeciesId.BRUXISH, + SpeciesId.HATENNA, + SpeciesId.SNOM, + SpeciesId.ALOLA_VULPIX, + ], + [TrainerPoolTier.SUPER_RARE]: [ + SpeciesId.CLAMPERL, + SpeciesId.AMAURA, + SpeciesId.SYLVEON, + SpeciesId.GOOMY, + SpeciesId.POPPLIO, ], - [TrainerPoolTier.SUPER_RARE]: [Species.CLAMPERL, Species.AMAURA, Species.SYLVEON, Species.GOOMY, Species.POPPLIO], }), [TrainerType.BIKER]: new TrainerConfig(++t) .setMoneyMultiplier(1.4) .setEncounterBgm(TrainerType.ROUGHNECK) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.EKANS, Species.KOFFING, Species.CROAGUNK, Species.VENIPEDE, Species.SCRAGGY], - [TrainerPoolTier.UNCOMMON]: [ - Species.GRIMER, - Species.VOLTORB, - Species.TEDDIURSA, - Species.MAGBY, - Species.SKORUPI, - Species.SANDILE, - Species.PAWNIARD, - Species.SHROODLE, + [TrainerPoolTier.COMMON]: [ + SpeciesId.EKANS, + SpeciesId.KOFFING, + SpeciesId.CROAGUNK, + SpeciesId.VENIPEDE, + SpeciesId.SCRAGGY, ], - [TrainerPoolTier.RARE]: [Species.VAROOM, Species.CYCLIZAR], + [TrainerPoolTier.UNCOMMON]: [ + SpeciesId.GRIMER, + SpeciesId.VOLTORB, + SpeciesId.TEDDIURSA, + SpeciesId.MAGBY, + SpeciesId.SKORUPI, + SpeciesId.SANDILE, + SpeciesId.PAWNIARD, + SpeciesId.SHROODLE, + ], + [TrainerPoolTier.RARE]: [SpeciesId.VAROOM, SpeciesId.CYCLIZAR], }), [TrainerType.BLACK_BELT]: new TrainerConfig(++t) .setHasGenders("Battle Girl", TrainerType.PSYCHIC) @@ -1207,41 +1219,41 @@ export const trainerConfigs: TrainerConfigs = { ) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ - Species.NIDORAN_F, - Species.NIDORAN_M, - Species.MACHOP, - Species.MAKUHITA, - Species.MEDITITE, - Species.CROAGUNK, - Species.TIMBURR, + SpeciesId.NIDORAN_F, + SpeciesId.NIDORAN_M, + SpeciesId.MACHOP, + SpeciesId.MAKUHITA, + SpeciesId.MEDITITE, + SpeciesId.CROAGUNK, + SpeciesId.TIMBURR, ], [TrainerPoolTier.UNCOMMON]: [ - Species.MANKEY, - Species.POLIWRATH, - Species.TYROGUE, - Species.BRELOOM, - Species.SCRAGGY, - Species.MIENFOO, - Species.PANCHAM, - Species.STUFFUL, - Species.CRABRAWLER, + SpeciesId.MANKEY, + SpeciesId.POLIWRATH, + SpeciesId.TYROGUE, + SpeciesId.BRELOOM, + SpeciesId.SCRAGGY, + SpeciesId.MIENFOO, + SpeciesId.PANCHAM, + SpeciesId.STUFFUL, + SpeciesId.CRABRAWLER, ], [TrainerPoolTier.RARE]: [ - Species.HERACROSS, - Species.RIOLU, - Species.THROH, - Species.SAWK, - Species.PASSIMIAN, - Species.CLOBBOPUS, + SpeciesId.HERACROSS, + SpeciesId.RIOLU, + SpeciesId.THROH, + SpeciesId.SAWK, + SpeciesId.PASSIMIAN, + SpeciesId.CLOBBOPUS, ], [TrainerPoolTier.SUPER_RARE]: [ - Species.HITMONTOP, - Species.INFERNAPE, - Species.GALLADE, - Species.HAWLUCHA, - Species.HAKAMO_O, + SpeciesId.HITMONTOP, + SpeciesId.INFERNAPE, + SpeciesId.GALLADE, + SpeciesId.HAWLUCHA, + SpeciesId.HAKAMO_O, ], - [TrainerPoolTier.ULTRA_RARE]: [Species.KUBFU], + [TrainerPoolTier.ULTRA_RARE]: [SpeciesId.KUBFU], }), [TrainerType.BREEDER]: new TrainerConfig(++t) .setMoneyMultiplier(1.325) @@ -1269,21 +1281,21 @@ export const trainerConfigs: TrainerConfigs = { ) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ - Species.MEOWTH, - Species.PSYDUCK, - Species.BUDEW, - Species.PIDOVE, - Species.CINCCINO, - Species.LITLEO, + SpeciesId.MEOWTH, + SpeciesId.PSYDUCK, + SpeciesId.BUDEW, + SpeciesId.PIDOVE, + SpeciesId.CINCCINO, + SpeciesId.LITLEO, ], [TrainerPoolTier.UNCOMMON]: [ - Species.JIGGLYPUFF, - Species.MAGNEMITE, - Species.MARILL, - Species.COTTONEE, - Species.SKIDDO, + SpeciesId.JIGGLYPUFF, + SpeciesId.MAGNEMITE, + SpeciesId.MARILL, + SpeciesId.COTTONEE, + SpeciesId.SKIDDO, ], - [TrainerPoolTier.RARE]: [Species.BUIZEL, Species.SNEASEL, Species.KLEFKI, Species.INDEEDEE], + [TrainerPoolTier.RARE]: [SpeciesId.BUIZEL, SpeciesId.SNEASEL, SpeciesId.KLEFKI, SpeciesId.INDEEDEE], }), [TrainerType.CYCLIST]: new TrainerConfig(++t) .setMoneyMultiplier(1.3) @@ -1292,16 +1304,28 @@ export const trainerConfigs: TrainerConfigs = { .setEncounterBgm(TrainerType.CYCLIST) .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.ONE_AVG) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.DODUO, Species.PICHU, Species.TAILLOW, Species.STARLY, Species.PONYTA], - [TrainerPoolTier.UNCOMMON]: [ - Species.ELECTRIKE, - Species.SHINX, - Species.BLITZLE, - Species.DUCKLETT, - Species.WATTREL, + [TrainerPoolTier.COMMON]: [ + SpeciesId.DODUO, + SpeciesId.PICHU, + SpeciesId.TAILLOW, + SpeciesId.STARLY, + SpeciesId.PONYTA, ], - [TrainerPoolTier.RARE]: [Species.YANMA, Species.NINJASK, Species.WHIRLIPEDE, Species.EMOLGA, Species.SKIDDO], - [TrainerPoolTier.SUPER_RARE]: [Species.ACCELGOR, Species.DREEPY], + [TrainerPoolTier.UNCOMMON]: [ + SpeciesId.ELECTRIKE, + SpeciesId.SHINX, + SpeciesId.BLITZLE, + SpeciesId.DUCKLETT, + SpeciesId.WATTREL, + ], + [TrainerPoolTier.RARE]: [ + SpeciesId.YANMA, + SpeciesId.NINJASK, + SpeciesId.WHIRLIPEDE, + SpeciesId.EMOLGA, + SpeciesId.SKIDDO, + ], + [TrainerPoolTier.SUPER_RARE]: [SpeciesId.ACCELGOR, SpeciesId.DREEPY], }), [TrainerType.DANCER]: new TrainerConfig(++t) .setMoneyMultiplier(1.55) @@ -1313,10 +1337,10 @@ export const trainerConfigs: TrainerConfigs = { trainerPartyTemplates.TWO_WEAK_SAME_TWO_WEAK_SAME, ) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.RALTS, Species.SPOINK, Species.LOTAD, Species.BUDEW], - [TrainerPoolTier.UNCOMMON]: [Species.SPINDA, Species.SWABLU, Species.MARACTUS], - [TrainerPoolTier.RARE]: [Species.BELLOSSOM, Species.HITMONTOP, Species.MIME_JR, Species.ORICORIO], - [TrainerPoolTier.SUPER_RARE]: [Species.QUAXLY, Species.JANGMO_O], + [TrainerPoolTier.COMMON]: [SpeciesId.RALTS, SpeciesId.SPOINK, SpeciesId.LOTAD, SpeciesId.BUDEW], + [TrainerPoolTier.UNCOMMON]: [SpeciesId.SPINDA, SpeciesId.SWABLU, SpeciesId.MARACTUS], + [TrainerPoolTier.RARE]: [SpeciesId.BELLOSSOM, SpeciesId.HITMONTOP, SpeciesId.MIME_JR, SpeciesId.ORICORIO], + [TrainerPoolTier.SUPER_RARE]: [SpeciesId.QUAXLY, SpeciesId.JANGMO_O], }), [TrainerType.DEPOT_AGENT]: new TrainerConfig(++t) .setMoneyMultiplier(1.45) @@ -1333,11 +1357,11 @@ export const trainerConfigs: TrainerConfigs = { .setHasDouble("Medical Team") .setMoneyMultiplier(3) .setEncounterBgm(TrainerType.CLERK) - .setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.HEAL_PULSE)), + .setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === MoveId.HEAL_PULSE)), [TrainerType.FIREBREATHER]: new TrainerConfig(++t) .setMoneyMultiplier(1.4) .setEncounterBgm(TrainerType.ROUGHNECK) - .setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.SMOG) || s.isOfType(PokemonType.FIRE)), + .setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === MoveId.SMOG) || s.isOfType(PokemonType.FIRE)), [TrainerType.FISHERMAN]: new TrainerConfig(++t) .setMoneyMultiplier(1.25) .setEncounterBgm(TrainerType.BACKPACKER) @@ -1351,41 +1375,41 @@ export const trainerConfigs: TrainerConfigs = { ) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ - Species.TENTACOOL, - Species.MAGIKARP, - Species.GOLDEEN, - Species.STARYU, - Species.REMORAID, - Species.SKRELP, - Species.CLAUNCHER, - Species.ARROKUDA, + SpeciesId.TENTACOOL, + SpeciesId.MAGIKARP, + SpeciesId.GOLDEEN, + SpeciesId.STARYU, + SpeciesId.REMORAID, + SpeciesId.SKRELP, + SpeciesId.CLAUNCHER, + SpeciesId.ARROKUDA, ], [TrainerPoolTier.UNCOMMON]: [ - Species.POLIWAG, - Species.SHELLDER, - Species.KRABBY, - Species.HORSEA, - Species.CARVANHA, - Species.BARBOACH, - Species.CORPHISH, - Species.FINNEON, - Species.TYMPOLE, - Species.BASCULIN, - Species.FRILLISH, - Species.INKAY, + SpeciesId.POLIWAG, + SpeciesId.SHELLDER, + SpeciesId.KRABBY, + SpeciesId.HORSEA, + SpeciesId.CARVANHA, + SpeciesId.BARBOACH, + SpeciesId.CORPHISH, + SpeciesId.FINNEON, + SpeciesId.TYMPOLE, + SpeciesId.BASCULIN, + SpeciesId.FRILLISH, + SpeciesId.INKAY, ], [TrainerPoolTier.RARE]: [ - Species.CHINCHOU, - Species.CORSOLA, - Species.WAILMER, - Species.CLAMPERL, - Species.LUVDISC, - Species.MANTYKE, - Species.ALOMOMOLA, - Species.TATSUGIRI, - Species.VELUZA, + SpeciesId.CHINCHOU, + SpeciesId.CORSOLA, + SpeciesId.WAILMER, + SpeciesId.CLAMPERL, + SpeciesId.LUVDISC, + SpeciesId.MANTYKE, + SpeciesId.ALOMOMOLA, + SpeciesId.TATSUGIRI, + SpeciesId.VELUZA, ], - [TrainerPoolTier.SUPER_RARE]: [Species.LAPRAS, Species.FEEBAS, Species.RELICANTH, Species.DONDOZO], + [TrainerPoolTier.SUPER_RARE]: [SpeciesId.LAPRAS, SpeciesId.FEEBAS, SpeciesId.RELICANTH, SpeciesId.DONDOZO], }), [TrainerType.GUITARIST]: new TrainerConfig(++t) .setMoneyMultiplier(1.2) @@ -1394,7 +1418,7 @@ export const trainerConfigs: TrainerConfigs = { .setSpeciesFilter(s => s.isOfType(PokemonType.ELECTRIC)), [TrainerType.HARLEQUIN]: new TrainerConfig(++t) .setEncounterBgm(TrainerType.PSYCHIC) - .setSpeciesFilter(s => tmSpecies[Moves.TRICK_ROOM].indexOf(s.speciesId) > -1), + .setSpeciesFilter(s => tmSpecies[MoveId.TRICK_ROOM].indexOf(s.speciesId) > -1), [TrainerType.HIKER]: new TrainerConfig(++t) .setEncounterBgm(TrainerType.BACKPACKER) .setPartyTemplates( @@ -1406,39 +1430,39 @@ export const trainerConfigs: TrainerConfigs = { ) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ - Species.SANDSHREW, - Species.DIGLETT, - Species.GEODUDE, - Species.MACHOP, - Species.ARON, - Species.ROGGENROLA, - Species.DRILBUR, - Species.NACLI, + SpeciesId.SANDSHREW, + SpeciesId.DIGLETT, + SpeciesId.GEODUDE, + SpeciesId.MACHOP, + SpeciesId.ARON, + SpeciesId.ROGGENROLA, + SpeciesId.DRILBUR, + SpeciesId.NACLI, ], [TrainerPoolTier.UNCOMMON]: [ - Species.ZUBAT, - Species.RHYHORN, - Species.ONIX, - Species.CUBONE, - Species.WOOBAT, - Species.SWINUB, - Species.NOSEPASS, - Species.HIPPOPOTAS, - Species.DWEBBLE, - Species.KLAWF, - Species.TOEDSCOOL, + SpeciesId.ZUBAT, + SpeciesId.RHYHORN, + SpeciesId.ONIX, + SpeciesId.CUBONE, + SpeciesId.WOOBAT, + SpeciesId.SWINUB, + SpeciesId.NOSEPASS, + SpeciesId.HIPPOPOTAS, + SpeciesId.DWEBBLE, + SpeciesId.KLAWF, + SpeciesId.TOEDSCOOL, ], [TrainerPoolTier.RARE]: [ - Species.TORKOAL, - Species.TRAPINCH, - Species.BARBOACH, - Species.GOLETT, - Species.ALOLA_DIGLETT, - Species.ALOLA_GEODUDE, - Species.GALAR_STUNFISK, - Species.PALDEA_WOOPER, + SpeciesId.TORKOAL, + SpeciesId.TRAPINCH, + SpeciesId.BARBOACH, + SpeciesId.GOLETT, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.GALAR_STUNFISK, + SpeciesId.PALDEA_WOOPER, ], - [TrainerPoolTier.SUPER_RARE]: [Species.MAGBY, Species.LARVITAR], + [TrainerPoolTier.SUPER_RARE]: [SpeciesId.MAGBY, SpeciesId.LARVITAR], }), [TrainerType.HOOLIGANS]: new TrainerConfig(++t) .setDoubleOnly() @@ -1466,7 +1490,7 @@ export const trainerConfigs: TrainerConfigs = { trainerPartyTemplates.TWO_WEAK_ONE_AVG, trainerPartyTemplates.TWO_AVG, ) - .setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.SING)), + .setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === MoveId.SING)), [TrainerType.HEX_MANIAC]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) .setEncounterBgm(TrainerType.PSYCHIC) @@ -1490,19 +1514,19 @@ export const trainerConfigs: TrainerConfigs = { ) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ - Species.VULPIX, - Species.GROWLITHE, - Species.SNUBBULL, - Species.POOCHYENA, - Species.ELECTRIKE, - Species.LILLIPUP, - Species.YAMPER, - Species.FIDOUGH, + SpeciesId.VULPIX, + SpeciesId.GROWLITHE, + SpeciesId.SNUBBULL, + SpeciesId.POOCHYENA, + SpeciesId.ELECTRIKE, + SpeciesId.LILLIPUP, + SpeciesId.YAMPER, + SpeciesId.FIDOUGH, ], - [TrainerPoolTier.UNCOMMON]: [Species.HOUNDOUR, Species.ROCKRUFF, Species.MASCHIFF], - [TrainerPoolTier.RARE]: [Species.JOLTEON, Species.RIOLU], + [TrainerPoolTier.UNCOMMON]: [SpeciesId.HOUNDOUR, SpeciesId.ROCKRUFF, SpeciesId.MASCHIFF], + [TrainerPoolTier.RARE]: [SpeciesId.JOLTEON, SpeciesId.RIOLU], [TrainerPoolTier.SUPER_RARE]: [], - [TrainerPoolTier.ULTRA_RARE]: [Species.ENTEI, Species.SUICUNE, Species.RAIKOU], + [TrainerPoolTier.ULTRA_RARE]: [SpeciesId.ENTEI, SpeciesId.SUICUNE, SpeciesId.RAIKOU], }), [TrainerType.PARASOL_LADY]: new TrainerConfig(++t) .setMoneyMultiplier(1.55) @@ -1520,14 +1544,14 @@ export const trainerConfigs: TrainerConfigs = { a => !!a && [ - Abilities.DRIZZLE, - Abilities.SWIFT_SWIM, - Abilities.HYDRATION, - Abilities.RAIN_DISH, - Abilities.DRY_SKIN, - Abilities.WIND_POWER, + AbilityId.DRIZZLE, + AbilityId.SWIFT_SWIM, + AbilityId.HYDRATION, + AbilityId.RAIN_DISH, + AbilityId.DRY_SKIN, + AbilityId.WIND_POWER, ].includes(a), - ) || s.getLevelMoves().some(plm => plm[1] === Moves.RAIN_DANCE), + ) || s.getLevelMoves().some(plm => plm[1] === MoveId.RAIN_DANCE), ), // Mons with rain abilities or who learn Rain Dance by level [TrainerType.PILOT]: new TrainerConfig(++t) .setMoneyMultiplier(1.75) @@ -1538,7 +1562,7 @@ export const trainerConfigs: TrainerConfigs = { trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.THREE_AVG, ) - .setSpeciesFilter(s => tmSpecies[Moves.FLY].indexOf(s.speciesId) > -1), + .setSpeciesFilter(s => tmSpecies[MoveId.FLY].indexOf(s.speciesId) > -1), [TrainerType.POKEFAN]: new TrainerConfig(++t) .setMoneyMultiplier(1.4) .setName("PokéFan") @@ -1554,7 +1578,7 @@ export const trainerConfigs: TrainerConfigs = { trainerPartyTemplates.FIVE_WEAK, trainerPartyTemplates.SIX_WEAKER_SAME, ) - .setSpeciesFilter(s => tmSpecies[Moves.HELPING_HAND].indexOf(s.speciesId) > -1), + .setSpeciesFilter(s => tmSpecies[MoveId.HELPING_HAND].indexOf(s.speciesId) > -1), [TrainerType.PRESCHOOLER]: new TrainerConfig(++t) .setMoneyMultiplier(0.2) .setEncounterBgm(TrainerType.YOUNGSTER) @@ -1568,28 +1592,28 @@ export const trainerConfigs: TrainerConfigs = { ) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ - Species.CATERPIE, - Species.PICHU, - Species.SANDSHREW, - Species.LEDYBA, - Species.BUDEW, - Species.BURMY, - Species.WOOLOO, - Species.PAWMI, - Species.SMOLIV, + SpeciesId.CATERPIE, + SpeciesId.PICHU, + SpeciesId.SANDSHREW, + SpeciesId.LEDYBA, + SpeciesId.BUDEW, + SpeciesId.BURMY, + SpeciesId.WOOLOO, + SpeciesId.PAWMI, + SpeciesId.SMOLIV, ], [TrainerPoolTier.UNCOMMON]: [ - Species.EEVEE, - Species.CLEFFA, - Species.IGGLYBUFF, - Species.SWINUB, - Species.WOOPER, - Species.DRIFLOON, - Species.DEDENNE, - Species.STUFFUL, + SpeciesId.EEVEE, + SpeciesId.CLEFFA, + SpeciesId.IGGLYBUFF, + SpeciesId.SWINUB, + SpeciesId.WOOPER, + SpeciesId.DRIFLOON, + SpeciesId.DEDENNE, + SpeciesId.STUFFUL, ], - [TrainerPoolTier.RARE]: [Species.RALTS, Species.RIOLU, Species.JOLTIK, Species.TANDEMAUS], - [TrainerPoolTier.SUPER_RARE]: [Species.DARUMAKA, Species.TINKATINK], + [TrainerPoolTier.RARE]: [SpeciesId.RALTS, SpeciesId.RIOLU, SpeciesId.JOLTIK, SpeciesId.TANDEMAUS], + [TrainerPoolTier.SUPER_RARE]: [SpeciesId.DARUMAKA, SpeciesId.TINKATINK], }), [TrainerType.PSYCHIC]: new TrainerConfig(++t) .setHasGenders("Psychic Female") @@ -1605,28 +1629,34 @@ export const trainerConfigs: TrainerConfigs = { ) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ - Species.ABRA, - Species.DROWZEE, - Species.RALTS, - Species.SPOINK, - Species.GOTHITA, - Species.SOLOSIS, - Species.BLIPBUG, - Species.ESPURR, - Species.HATENNA, + SpeciesId.ABRA, + SpeciesId.DROWZEE, + SpeciesId.RALTS, + SpeciesId.SPOINK, + SpeciesId.GOTHITA, + SpeciesId.SOLOSIS, + SpeciesId.BLIPBUG, + SpeciesId.ESPURR, + SpeciesId.HATENNA, ], [TrainerPoolTier.UNCOMMON]: [ - Species.MIME_JR, - Species.EXEGGCUTE, - Species.MEDITITE, - Species.NATU, - Species.EXEGGCUTE, - Species.WOOBAT, - Species.INKAY, - Species.ORANGURU, + SpeciesId.MIME_JR, + SpeciesId.EXEGGCUTE, + SpeciesId.MEDITITE, + SpeciesId.NATU, + SpeciesId.EXEGGCUTE, + SpeciesId.WOOBAT, + SpeciesId.INKAY, + SpeciesId.ORANGURU, ], - [TrainerPoolTier.RARE]: [Species.ELGYEM, Species.SIGILYPH, Species.BALTOY, Species.GIRAFARIG, Species.MEOWSTIC], - [TrainerPoolTier.SUPER_RARE]: [Species.BELDUM, Species.ESPEON, Species.STANTLER], + [TrainerPoolTier.RARE]: [ + SpeciesId.ELGYEM, + SpeciesId.SIGILYPH, + SpeciesId.BALTOY, + SpeciesId.GIRAFARIG, + SpeciesId.MEOWSTIC, + ], + [TrainerPoolTier.SUPER_RARE]: [SpeciesId.BELDUM, SpeciesId.ESPEON, SpeciesId.STANTLER], }), [TrainerType.RANGER]: new TrainerConfig(++t) .setMoneyMultiplier(1.4) @@ -1636,44 +1666,44 @@ export const trainerConfigs: TrainerConfigs = { .setHasDouble("Pokémon Rangers") .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ - Species.PICHU, - Species.GROWLITHE, - Species.PONYTA, - Species.ZIGZAGOON, - Species.SEEDOT, - Species.BIDOOF, - Species.RIOLU, - Species.SEWADDLE, - Species.SKIDDO, - Species.SALANDIT, - Species.YAMPER, + SpeciesId.PICHU, + SpeciesId.GROWLITHE, + SpeciesId.PONYTA, + SpeciesId.ZIGZAGOON, + SpeciesId.SEEDOT, + SpeciesId.BIDOOF, + SpeciesId.RIOLU, + SpeciesId.SEWADDLE, + SpeciesId.SKIDDO, + SpeciesId.SALANDIT, + SpeciesId.YAMPER, ], [TrainerPoolTier.UNCOMMON]: [ - Species.AZURILL, - Species.TAUROS, - Species.MAREEP, - Species.FARFETCHD, - Species.TEDDIURSA, - Species.SHROOMISH, - Species.ELECTRIKE, - Species.BUDEW, - Species.BUIZEL, - Species.MUDBRAY, - Species.STUFFUL, + SpeciesId.AZURILL, + SpeciesId.TAUROS, + SpeciesId.MAREEP, + SpeciesId.FARFETCHD, + SpeciesId.TEDDIURSA, + SpeciesId.SHROOMISH, + SpeciesId.ELECTRIKE, + SpeciesId.BUDEW, + SpeciesId.BUIZEL, + SpeciesId.MUDBRAY, + SpeciesId.STUFFUL, ], [TrainerPoolTier.RARE]: [ - Species.EEVEE, - Species.SCYTHER, - Species.KANGASKHAN, - Species.RALTS, - Species.MUNCHLAX, - Species.ZORUA, - Species.PALDEA_TAUROS, - Species.TINKATINK, - Species.CYCLIZAR, - Species.FLAMIGO, + SpeciesId.EEVEE, + SpeciesId.SCYTHER, + SpeciesId.KANGASKHAN, + SpeciesId.RALTS, + SpeciesId.MUNCHLAX, + SpeciesId.ZORUA, + SpeciesId.PALDEA_TAUROS, + SpeciesId.TINKATINK, + SpeciesId.CYCLIZAR, + SpeciesId.FLAMIGO, ], - [TrainerPoolTier.SUPER_RARE]: [Species.LARVESTA], + [TrainerPoolTier.SUPER_RARE]: [SpeciesId.LARVESTA], }), [TrainerType.RICH]: new TrainerConfig(++t) .setMoneyMultiplier(3.25) @@ -1713,40 +1743,46 @@ export const trainerConfigs: TrainerConfigs = { .setMoneyMultiplier(1.7) .setEncounterBgm(TrainerType.SCIENTIST) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.MAGNEMITE, Species.GRIMER, Species.DROWZEE, Species.VOLTORB, Species.KOFFING], + [TrainerPoolTier.COMMON]: [ + SpeciesId.MAGNEMITE, + SpeciesId.GRIMER, + SpeciesId.DROWZEE, + SpeciesId.VOLTORB, + SpeciesId.KOFFING, + ], [TrainerPoolTier.UNCOMMON]: [ - Species.BALTOY, - Species.BRONZOR, - Species.FERROSEED, - Species.KLINK, - Species.CHARJABUG, - Species.BLIPBUG, - Species.HELIOPTILE, + SpeciesId.BALTOY, + SpeciesId.BRONZOR, + SpeciesId.FERROSEED, + SpeciesId.KLINK, + SpeciesId.CHARJABUG, + SpeciesId.BLIPBUG, + SpeciesId.HELIOPTILE, ], [TrainerPoolTier.RARE]: [ - Species.ABRA, - Species.DITTO, - Species.PORYGON, - Species.ELEKID, - Species.SOLOSIS, - Species.GALAR_WEEZING, + SpeciesId.ABRA, + SpeciesId.DITTO, + SpeciesId.PORYGON, + SpeciesId.ELEKID, + SpeciesId.SOLOSIS, + SpeciesId.GALAR_WEEZING, ], [TrainerPoolTier.SUPER_RARE]: [ - Species.OMANYTE, - Species.KABUTO, - Species.AERODACTYL, - Species.LILEEP, - Species.ANORITH, - Species.CRANIDOS, - Species.SHIELDON, - Species.TIRTOUGA, - Species.ARCHEN, - Species.ARCTOVISH, - Species.ARCTOZOLT, - Species.DRACOVISH, - Species.DRACOZOLT, + SpeciesId.OMANYTE, + SpeciesId.KABUTO, + SpeciesId.AERODACTYL, + SpeciesId.LILEEP, + SpeciesId.ANORITH, + SpeciesId.CRANIDOS, + SpeciesId.SHIELDON, + SpeciesId.TIRTOUGA, + SpeciesId.ARCHEN, + SpeciesId.ARCTOVISH, + SpeciesId.ARCTOZOLT, + SpeciesId.DRACOVISH, + SpeciesId.DRACOZOLT, ], - [TrainerPoolTier.ULTRA_RARE]: [Species.ROTOM, Species.MELTAN], + [TrainerPoolTier.ULTRA_RARE]: [SpeciesId.ROTOM, SpeciesId.MELTAN], }), [TrainerType.SMASHER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), [TrainerType.SNOW_WORKER]: new TrainerConfig(++t) @@ -1763,17 +1799,23 @@ export const trainerConfigs: TrainerConfigs = { .setHasDouble("School Kids") .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ - Species.ODDISH, - Species.EXEGGCUTE, - Species.TEDDIURSA, - Species.WURMPLE, - Species.RALTS, - Species.SHROOMISH, - Species.FLETCHLING, + SpeciesId.ODDISH, + SpeciesId.EXEGGCUTE, + SpeciesId.TEDDIURSA, + SpeciesId.WURMPLE, + SpeciesId.RALTS, + SpeciesId.SHROOMISH, + SpeciesId.FLETCHLING, ], - [TrainerPoolTier.UNCOMMON]: [Species.VOLTORB, Species.WHISMUR, Species.MEDITITE, Species.MIME_JR, Species.NYMBLE], - [TrainerPoolTier.RARE]: [Species.TANGELA, Species.EEVEE, Species.YANMA], - [TrainerPoolTier.SUPER_RARE]: [Species.TADBULB], + [TrainerPoolTier.UNCOMMON]: [ + SpeciesId.VOLTORB, + SpeciesId.WHISMUR, + SpeciesId.MEDITITE, + SpeciesId.MIME_JR, + SpeciesId.NYMBLE, + ], + [TrainerPoolTier.RARE]: [SpeciesId.TANGELA, SpeciesId.EEVEE, SpeciesId.YANMA], + [TrainerPoolTier.SUPER_RARE]: [SpeciesId.TADBULB], }), [TrainerType.SWIMMER]: new TrainerConfig(++t) .setMoneyMultiplier(1.3) @@ -1796,28 +1838,28 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc( 0, getRandomPartyMemberFunc([ - Species.PLUSLE, - Species.VOLBEAT, - Species.PACHIRISU, - Species.SILCOON, - Species.METAPOD, - Species.IGGLYBUFF, - Species.PETILIL, - Species.EEVEE, + SpeciesId.PLUSLE, + SpeciesId.VOLBEAT, + SpeciesId.PACHIRISU, + SpeciesId.SILCOON, + SpeciesId.METAPOD, + SpeciesId.IGGLYBUFF, + SpeciesId.PETILIL, + SpeciesId.EEVEE, ]), ) .setPartyMemberFunc( 1, getRandomPartyMemberFunc( [ - Species.MINUN, - Species.ILLUMISE, - Species.EMOLGA, - Species.CASCOON, - Species.KAKUNA, - Species.CLEFFA, - Species.COTTONEE, - Species.EEVEE, + SpeciesId.MINUN, + SpeciesId.ILLUMISE, + SpeciesId.EMOLGA, + SpeciesId.CASCOON, + SpeciesId.KAKUNA, + SpeciesId.CLEFFA, + SpeciesId.COTTONEE, + SpeciesId.EEVEE, ], TrainerSlot.TRAINER_PARTNER, ), @@ -1836,15 +1878,15 @@ export const trainerConfigs: TrainerConfigs = { .setEncounterBgm(TrainerType.CLERK) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ - Species.CLEFFA, - Species.CHATOT, - Species.PANSAGE, - Species.PANSEAR, - Species.PANPOUR, - Species.MINCCINO, + SpeciesId.CLEFFA, + SpeciesId.CHATOT, + SpeciesId.PANSAGE, + SpeciesId.PANSEAR, + SpeciesId.PANPOUR, + SpeciesId.MINCCINO, ], - [TrainerPoolTier.UNCOMMON]: [Species.TROPIUS, Species.PETILIL, Species.BOUNSWEET, Species.INDEEDEE], - [TrainerPoolTier.RARE]: [Species.APPLIN, Species.SINISTEA, Species.POLTCHAGEIST], + [TrainerPoolTier.UNCOMMON]: [SpeciesId.TROPIUS, SpeciesId.PETILIL, SpeciesId.BOUNSWEET, SpeciesId.INDEEDEE], + [TrainerPoolTier.RARE]: [SpeciesId.APPLIN, SpeciesId.SINISTEA, SpeciesId.POLTCHAGEIST], }), [TrainerType.WORKER]: new TrainerConfig(++t) .setHasGenders("Worker Female") @@ -1859,16 +1901,16 @@ export const trainerConfigs: TrainerConfigs = { .setHasDouble("Beginners") .setPartyTemplates(trainerPartyTemplates.TWO_WEAKER) .setSpeciesPools([ - Species.CATERPIE, - Species.WEEDLE, - Species.RATTATA, - Species.SENTRET, - Species.POOCHYENA, - Species.ZIGZAGOON, - Species.WURMPLE, - Species.BIDOOF, - Species.PATRAT, - Species.LILLIPUP, + SpeciesId.CATERPIE, + SpeciesId.WEEDLE, + SpeciesId.RATTATA, + SpeciesId.SENTRET, + SpeciesId.POOCHYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.WURMPLE, + SpeciesId.BIDOOF, + SpeciesId.PATRAT, + SpeciesId.LILLIPUP, ]), [TrainerType.ROCKET_GRUNT]: new TrainerConfig(++t) .setHasGenders("Rocket Grunt Female") @@ -1881,51 +1923,51 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ - Species.WEEDLE, - Species.RATTATA, - Species.EKANS, - Species.SANDSHREW, - Species.ZUBAT, - Species.ODDISH, - Species.GEODUDE, - Species.SLOWPOKE, - Species.GRIMER, - Species.KOFFING, + SpeciesId.WEEDLE, + SpeciesId.RATTATA, + SpeciesId.EKANS, + SpeciesId.SANDSHREW, + SpeciesId.ZUBAT, + SpeciesId.ODDISH, + SpeciesId.GEODUDE, + SpeciesId.SLOWPOKE, + SpeciesId.GRIMER, + SpeciesId.KOFFING, ], [TrainerPoolTier.UNCOMMON]: [ - Species.MANKEY, - Species.GROWLITHE, - Species.MAGNEMITE, - Species.ONIX, - Species.VOLTORB, - Species.EXEGGCUTE, - Species.CUBONE, - Species.LICKITUNG, - Species.TAUROS, - Species.MAGIKARP, - Species.MURKROW, - Species.ELEKID, - Species.MAGBY, + SpeciesId.MANKEY, + SpeciesId.GROWLITHE, + SpeciesId.MAGNEMITE, + SpeciesId.ONIX, + SpeciesId.VOLTORB, + SpeciesId.EXEGGCUTE, + SpeciesId.CUBONE, + SpeciesId.LICKITUNG, + SpeciesId.TAUROS, + SpeciesId.MAGIKARP, + SpeciesId.MURKROW, + SpeciesId.ELEKID, + SpeciesId.MAGBY, ], [TrainerPoolTier.RARE]: [ - Species.ABRA, - Species.GASTLY, - Species.SCYTHER, - Species.PORYGON, - Species.OMANYTE, - Species.KABUTO, - Species.ALOLA_RATTATA, - Species.ALOLA_SANDSHREW, - Species.ALOLA_MEOWTH, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRIMER, - Species.PALDEA_TAUROS, + SpeciesId.ABRA, + SpeciesId.GASTLY, + SpeciesId.SCYTHER, + SpeciesId.PORYGON, + SpeciesId.OMANYTE, + SpeciesId.KABUTO, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_GRIMER, + SpeciesId.PALDEA_TAUROS, ], - [TrainerPoolTier.SUPER_RARE]: [Species.DRATINI, Species.LARVITAR], + [TrainerPoolTier.SUPER_RARE]: [SpeciesId.DRATINI, SpeciesId.LARVITAR], }), [TrainerType.ARCHER]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("rocket_admin", "rocket", [Species.HOUNDOOM]) + .initForEvilTeamAdmin("rocket_admin", "rocket", [SpeciesId.HOUNDOOM]) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_rocket_grunt") @@ -1933,7 +1975,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), [TrainerType.ARIANA]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("rocket_admin_female", "rocket", [Species.ARBOK]) + .initForEvilTeamAdmin("rocket_admin_female", "rocket", [SpeciesId.ARBOK]) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_rocket_grunt") @@ -1941,7 +1983,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), [TrainerType.PROTON]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("rocket_admin", "rocket", [Species.CROBAT]) + .initForEvilTeamAdmin("rocket_admin", "rocket", [SpeciesId.CROBAT]) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_rocket_grunt") @@ -1949,7 +1991,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), [TrainerType.PETREL]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("rocket_admin", "rocket", [Species.WEEZING]) + .initForEvilTeamAdmin("rocket_admin", "rocket", [SpeciesId.WEEZING]) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_rocket_grunt") @@ -1966,39 +2008,39 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ - Species.DIGLETT, - Species.GROWLITHE, - Species.SLUGMA, - Species.POOCHYENA, - Species.ZIGZAGOON, - Species.NUMEL, - Species.TORKOAL, - Species.BALTOY, + SpeciesId.DIGLETT, + SpeciesId.GROWLITHE, + SpeciesId.SLUGMA, + SpeciesId.POOCHYENA, + SpeciesId.ZIGZAGOON, + SpeciesId.NUMEL, + SpeciesId.TORKOAL, + SpeciesId.BALTOY, ], [TrainerPoolTier.UNCOMMON]: [ - Species.RHYHORN, - Species.PHANPY, - Species.MAGBY, - Species.ZANGOOSE, - Species.SOLROCK, - Species.HEATMOR, - Species.ROLYCOLY, - Species.CAPSAKID, + SpeciesId.RHYHORN, + SpeciesId.PHANPY, + SpeciesId.MAGBY, + SpeciesId.ZANGOOSE, + SpeciesId.SOLROCK, + SpeciesId.HEATMOR, + SpeciesId.ROLYCOLY, + SpeciesId.CAPSAKID, ], [TrainerPoolTier.RARE]: [ - Species.TRAPINCH, - Species.LILEEP, - Species.ANORITH, - Species.GOLETT, - Species.TURTONATOR, - Species.TOEDSCOOL, - Species.HISUI_GROWLITHE, + SpeciesId.TRAPINCH, + SpeciesId.LILEEP, + SpeciesId.ANORITH, + SpeciesId.GOLETT, + SpeciesId.TURTONATOR, + SpeciesId.TOEDSCOOL, + SpeciesId.HISUI_GROWLITHE, ], - [TrainerPoolTier.SUPER_RARE]: [Species.CHARCADET, Species.ARON], + [TrainerPoolTier.SUPER_RARE]: [SpeciesId.CHARCADET, SpeciesId.ARON], }), [TrainerType.TABITHA]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("magma_admin", "magma", [Species.CAMERUPT]) + .initForEvilTeamAdmin("magma_admin", "magma", [SpeciesId.CAMERUPT]) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_aqua_magma_grunt") @@ -2006,7 +2048,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), [TrainerType.COURTNEY]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("magma_admin_female", "magma", [Species.CAMERUPT]) + .initForEvilTeamAdmin("magma_admin_female", "magma", [SpeciesId.CAMERUPT]) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_aqua_magma_grunt") @@ -2023,42 +2065,42 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ - Species.QWILFISH, - Species.REMORAID, - Species.ZIGZAGOON, - Species.LOTAD, - Species.WINGULL, - Species.CARVANHA, - Species.WAILMER, - Species.BARBOACH, - Species.CORPHISH, - Species.SPHEAL, + SpeciesId.QWILFISH, + SpeciesId.REMORAID, + SpeciesId.ZIGZAGOON, + SpeciesId.LOTAD, + SpeciesId.WINGULL, + SpeciesId.CARVANHA, + SpeciesId.WAILMER, + SpeciesId.BARBOACH, + SpeciesId.CORPHISH, + SpeciesId.SPHEAL, ], [TrainerPoolTier.UNCOMMON]: [ - Species.TENTACOOL, - Species.HORSEA, - Species.CHINCHOU, - Species.WOOPER, - Species.AZURILL, - Species.SEVIPER, - Species.CLAMPERL, - Species.WIMPOD, - Species.CLOBBOPUS, + SpeciesId.TENTACOOL, + SpeciesId.HORSEA, + SpeciesId.CHINCHOU, + SpeciesId.WOOPER, + SpeciesId.AZURILL, + SpeciesId.SEVIPER, + SpeciesId.CLAMPERL, + SpeciesId.WIMPOD, + SpeciesId.CLOBBOPUS, ], [TrainerPoolTier.RARE]: [ - Species.MANTYKE, - Species.TYMPOLE, - Species.SKRELP, - Species.ARROKUDA, - Species.WIGLETT, - Species.HISUI_QWILFISH, - Species.PALDEA_WOOPER, + SpeciesId.MANTYKE, + SpeciesId.TYMPOLE, + SpeciesId.SKRELP, + SpeciesId.ARROKUDA, + SpeciesId.WIGLETT, + SpeciesId.HISUI_QWILFISH, + SpeciesId.PALDEA_WOOPER, ], - [TrainerPoolTier.SUPER_RARE]: [Species.BASCULEGION, Species.DONDOZO], + [TrainerPoolTier.SUPER_RARE]: [SpeciesId.BASCULEGION, SpeciesId.DONDOZO], }), [TrainerType.MATT]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("aqua_admin", "aqua", [Species.SHARPEDO]) + .initForEvilTeamAdmin("aqua_admin", "aqua", [SpeciesId.SHARPEDO]) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_aqua_magma_grunt") @@ -2066,7 +2108,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), [TrainerType.SHELLY]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("aqua_admin_female", "aqua", [Species.SHARPEDO]) + .initForEvilTeamAdmin("aqua_admin_female", "aqua", [SpeciesId.SHARPEDO]) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_aqua_magma_grunt") @@ -2083,40 +2125,40 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ - Species.WURMPLE, - Species.SHINX, - Species.BURMY, - Species.DRIFLOON, - Species.GLAMEOW, - Species.STUNKY, - Species.BRONZOR, - Species.CROAGUNK, - Species.CARNIVINE, + SpeciesId.WURMPLE, + SpeciesId.SHINX, + SpeciesId.BURMY, + SpeciesId.DRIFLOON, + SpeciesId.GLAMEOW, + SpeciesId.STUNKY, + SpeciesId.BRONZOR, + SpeciesId.CROAGUNK, + SpeciesId.CARNIVINE, ], [TrainerPoolTier.UNCOMMON]: [ - Species.ZUBAT, - Species.LICKITUNG, - Species.RHYHORN, - Species.TANGELA, - Species.YANMA, - Species.GLIGAR, - Species.SWINUB, - Species.SKORUPI, + SpeciesId.ZUBAT, + SpeciesId.LICKITUNG, + SpeciesId.RHYHORN, + SpeciesId.TANGELA, + SpeciesId.YANMA, + SpeciesId.GLIGAR, + SpeciesId.SWINUB, + SpeciesId.SKORUPI, ], [TrainerPoolTier.RARE]: [ - Species.SNEASEL, - Species.TEDDIURSA, - Species.ELEKID, - Species.MAGBY, - Species.DUSKULL, - Species.HISUI_GROWLITHE, - Species.HISUI_QWILFISH, + SpeciesId.SNEASEL, + SpeciesId.TEDDIURSA, + SpeciesId.ELEKID, + SpeciesId.MAGBY, + SpeciesId.DUSKULL, + SpeciesId.HISUI_GROWLITHE, + SpeciesId.HISUI_QWILFISH, ], - [TrainerPoolTier.SUPER_RARE]: [Species.SPIRITOMB, Species.ROTOM, Species.HISUI_SNEASEL], + [TrainerPoolTier.SUPER_RARE]: [SpeciesId.SPIRITOMB, SpeciesId.ROTOM, SpeciesId.HISUI_SNEASEL], }), [TrainerType.JUPITER]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("galactic_commander_female", "galactic", [Species.SKUNTANK]) + .initForEvilTeamAdmin("galactic_commander_female", "galactic", [SpeciesId.SKUNTANK]) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_galactic_admin") @@ -2124,7 +2166,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), [TrainerType.MARS]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("galactic_commander_female", "galactic", [Species.PURUGLY]) + .initForEvilTeamAdmin("galactic_commander_female", "galactic", [SpeciesId.PURUGLY]) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_galactic_admin") @@ -2132,7 +2174,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), [TrainerType.SATURN]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("galactic_commander", "galactic", [Species.TOXICROAK]) + .initForEvilTeamAdmin("galactic_commander", "galactic", [SpeciesId.TOXICROAK]) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_galactic_admin") @@ -2149,42 +2191,42 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ - Species.PATRAT, - Species.LILLIPUP, - Species.PURRLOIN, - Species.WOOBAT, - Species.TYMPOLE, - Species.SANDILE, - Species.SCRAGGY, - Species.TRUBBISH, - Species.VANILLITE, + SpeciesId.PATRAT, + SpeciesId.LILLIPUP, + SpeciesId.PURRLOIN, + SpeciesId.WOOBAT, + SpeciesId.TYMPOLE, + SpeciesId.SANDILE, + SpeciesId.SCRAGGY, + SpeciesId.TRUBBISH, + SpeciesId.VANILLITE, ], [TrainerPoolTier.UNCOMMON]: [ - Species.TIMBURR, - Species.VENIPEDE, - Species.DARUMAKA, - Species.FOONGUS, - Species.FRILLISH, - Species.JOLTIK, - Species.KLINK, - Species.CUBCHOO, - Species.GOLETT, + SpeciesId.TIMBURR, + SpeciesId.VENIPEDE, + SpeciesId.DARUMAKA, + SpeciesId.FOONGUS, + SpeciesId.FRILLISH, + SpeciesId.JOLTIK, + SpeciesId.KLINK, + SpeciesId.CUBCHOO, + SpeciesId.GOLETT, ], [TrainerPoolTier.RARE]: [ - Species.DRILBUR, - Species.ZORUA, - Species.MIENFOO, - Species.PAWNIARD, - Species.BOUFFALANT, - Species.RUFFLET, - Species.VULLABY, - Species.DURANT, + SpeciesId.DRILBUR, + SpeciesId.ZORUA, + SpeciesId.MIENFOO, + SpeciesId.PAWNIARD, + SpeciesId.BOUFFALANT, + SpeciesId.RUFFLET, + SpeciesId.VULLABY, + SpeciesId.DURANT, ], - [TrainerPoolTier.SUPER_RARE]: [Species.AXEW, Species.DRUDDIGON, Species.DEINO, Species.HISUI_ZORUA], + [TrainerPoolTier.SUPER_RARE]: [SpeciesId.AXEW, SpeciesId.DRUDDIGON, SpeciesId.DEINO, SpeciesId.HISUI_ZORUA], }), [TrainerType.ZINZOLIN]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("plasma_sage", "plasma_zinzolin", [Species.CRYOGONAL]) + .initForEvilTeamAdmin("plasma_sage", "plasma_zinzolin", [SpeciesId.CRYOGONAL]) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_plasma_grunt") @@ -2192,7 +2234,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), [TrainerType.COLRESS]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("plasma_boss", "plasma_colress", [Species.KLINKLANG]) + .initForEvilTeamAdmin("plasma_boss", "plasma_colress", [SpeciesId.KLINKLANG]) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_colress") .setMixedBattleBgm("battle_colress") @@ -2209,36 +2251,36 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ - Species.HOUNDOUR, - Species.GULPIN, - Species.SKORUPI, - Species.CROAGUNK, - Species.PURRLOIN, - Species.SCRAGGY, - Species.FLETCHLING, - Species.SCATTERBUG, - Species.LITLEO, - Species.ESPURR, - Species.INKAY, + SpeciesId.HOUNDOUR, + SpeciesId.GULPIN, + SpeciesId.SKORUPI, + SpeciesId.CROAGUNK, + SpeciesId.PURRLOIN, + SpeciesId.SCRAGGY, + SpeciesId.FLETCHLING, + SpeciesId.SCATTERBUG, + SpeciesId.LITLEO, + SpeciesId.ESPURR, + SpeciesId.INKAY, ], [TrainerPoolTier.UNCOMMON]: [ - Species.POOCHYENA, - Species.ELECTRIKE, - Species.FOONGUS, - Species.PANCHAM, - Species.BINACLE, - Species.SKRELP, - Species.CLAUNCHER, - Species.HELIOPTILE, - Species.PHANTUMP, - Species.PUMPKABOO, + SpeciesId.POOCHYENA, + SpeciesId.ELECTRIKE, + SpeciesId.FOONGUS, + SpeciesId.PANCHAM, + SpeciesId.BINACLE, + SpeciesId.SKRELP, + SpeciesId.CLAUNCHER, + SpeciesId.HELIOPTILE, + SpeciesId.PHANTUMP, + SpeciesId.PUMPKABOO, ], - [TrainerPoolTier.RARE]: [Species.SNEASEL, Species.LITWICK, Species.PAWNIARD, Species.NOIBAT], - [TrainerPoolTier.SUPER_RARE]: [Species.SLIGGOO, Species.HISUI_SLIGGOO, Species.HISUI_AVALUGG], + [TrainerPoolTier.RARE]: [SpeciesId.SNEASEL, SpeciesId.LITWICK, SpeciesId.PAWNIARD, SpeciesId.NOIBAT], + [TrainerPoolTier.SUPER_RARE]: [SpeciesId.SLIGGOO, SpeciesId.HISUI_SLIGGOO, SpeciesId.HISUI_AVALUGG], }), [TrainerType.BRYONY]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("flare_admin_female", "flare", [Species.LIEPARD]) + .initForEvilTeamAdmin("flare_admin_female", "flare", [SpeciesId.LIEPARD]) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_flare_grunt") @@ -2246,7 +2288,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), [TrainerType.XEROSIC]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("flare_admin", "flare", [Species.MALAMAR]) + .initForEvilTeamAdmin("flare_admin", "flare", [SpeciesId.MALAMAR]) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_flare_grunt") @@ -2263,49 +2305,49 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ - Species.CORSOLA, - Species.LILLIPUP, - Species.PIKIPEK, - Species.YUNGOOS, - Species.ROCKRUFF, - Species.MORELULL, - Species.BOUNSWEET, - Species.COMFEY, - Species.KOMALA, - Species.TOGEDEMARU, - Species.ALOLA_RAICHU, - Species.ALOLA_DIGLETT, - Species.ALOLA_GEODUDE, - Species.ALOLA_EXEGGUTOR, + SpeciesId.CORSOLA, + SpeciesId.LILLIPUP, + SpeciesId.PIKIPEK, + SpeciesId.YUNGOOS, + SpeciesId.ROCKRUFF, + SpeciesId.MORELULL, + SpeciesId.BOUNSWEET, + SpeciesId.COMFEY, + SpeciesId.KOMALA, + SpeciesId.TOGEDEMARU, + SpeciesId.ALOLA_RAICHU, + SpeciesId.ALOLA_DIGLETT, + SpeciesId.ALOLA_GEODUDE, + SpeciesId.ALOLA_EXEGGUTOR, ], [TrainerPoolTier.UNCOMMON]: [ - Species.POLIWAG, - Species.CRABRAWLER, - Species.ORICORIO, - Species.CUTIEFLY, - Species.WISHIWASHI, - Species.MUDBRAY, - Species.STUFFUL, - Species.ORANGURU, - Species.PASSIMIAN, - Species.PYUKUMUKU, - Species.BRUXISH, - Species.ALOLA_SANDSHREW, - Species.ALOLA_VULPIX, - Species.ALOLA_MAROWAK, + SpeciesId.POLIWAG, + SpeciesId.CRABRAWLER, + SpeciesId.ORICORIO, + SpeciesId.CUTIEFLY, + SpeciesId.WISHIWASHI, + SpeciesId.MUDBRAY, + SpeciesId.STUFFUL, + SpeciesId.ORANGURU, + SpeciesId.PASSIMIAN, + SpeciesId.PYUKUMUKU, + SpeciesId.BRUXISH, + SpeciesId.ALOLA_SANDSHREW, + SpeciesId.ALOLA_VULPIX, + SpeciesId.ALOLA_MAROWAK, ], [TrainerPoolTier.RARE]: [ - Species.MINIOR, - Species.TURTONATOR, - Species.MIMIKYU, - Species.DRAMPA, - Species.GALAR_CORSOLA, + SpeciesId.MINIOR, + SpeciesId.TURTONATOR, + SpeciesId.MIMIKYU, + SpeciesId.DRAMPA, + SpeciesId.GALAR_CORSOLA, ], - [TrainerPoolTier.SUPER_RARE]: [Species.PORYGON, Species.JANGMO_O], + [TrainerPoolTier.SUPER_RARE]: [SpeciesId.PORYGON, SpeciesId.JANGMO_O], }), [TrainerType.FABA]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("aether_admin", "aether", [Species.HYPNO]) + .initForEvilTeamAdmin("aether_admin", "aether", [SpeciesId.HYPNO]) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_aether_grunt") @@ -2322,44 +2364,44 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ - Species.EKANS, - Species.VENONAT, - Species.DROWZEE, - Species.KOFFING, - Species.SPINARAK, - Species.SCRAGGY, - Species.TRUBBISH, - Species.MAREANIE, - Species.SALANDIT, - Species.ALOLA_RATTATA, - Species.ALOLA_MEOWTH, - Species.ALOLA_GRIMER, + SpeciesId.EKANS, + SpeciesId.VENONAT, + SpeciesId.DROWZEE, + SpeciesId.KOFFING, + SpeciesId.SPINARAK, + SpeciesId.SCRAGGY, + SpeciesId.TRUBBISH, + SpeciesId.MAREANIE, + SpeciesId.SALANDIT, + SpeciesId.ALOLA_RATTATA, + SpeciesId.ALOLA_MEOWTH, + SpeciesId.ALOLA_GRIMER, ], [TrainerPoolTier.UNCOMMON]: [ - Species.ZUBAT, - Species.GASTLY, - Species.HOUNDOUR, - Species.SABLEYE, - Species.VENIPEDE, - Species.SANDILE, - Species.VULLABY, - Species.PANCHAM, - Species.FOMANTIS, - Species.ALOLA_MAROWAK, + SpeciesId.ZUBAT, + SpeciesId.GASTLY, + SpeciesId.HOUNDOUR, + SpeciesId.SABLEYE, + SpeciesId.VENIPEDE, + SpeciesId.SANDILE, + SpeciesId.VULLABY, + SpeciesId.PANCHAM, + SpeciesId.FOMANTIS, + SpeciesId.ALOLA_MAROWAK, ], [TrainerPoolTier.RARE]: [ - Species.PAWNIARD, - Species.WISHIWASHI, - Species.SANDYGAST, - Species.MIMIKYU, - Species.DHELMISE, - Species.NYMBLE, + SpeciesId.PAWNIARD, + SpeciesId.WISHIWASHI, + SpeciesId.SANDYGAST, + SpeciesId.MIMIKYU, + SpeciesId.DHELMISE, + SpeciesId.NYMBLE, ], - [TrainerPoolTier.SUPER_RARE]: [Species.GRUBBIN, Species.DEWPIDER], + [TrainerPoolTier.SUPER_RARE]: [SpeciesId.GRUBBIN, SpeciesId.DEWPIDER], }), [TrainerType.PLUMERIA]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("skull_admin", "skull", [Species.SALAZZLE]) + .initForEvilTeamAdmin("skull_admin", "skull", [SpeciesId.SALAZZLE]) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_skull_admin") @@ -2376,43 +2418,43 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ - Species.STEELIX, - Species.MAWILE, - Species.FERROSEED, - Species.KLINK, - Species.SKWOVET, - Species.ROOKIDEE, - Species.ROLYCOLY, - Species.CUFANT, - Species.GALAR_MEOWTH, - Species.GALAR_ZIGZAGOON, + SpeciesId.STEELIX, + SpeciesId.MAWILE, + SpeciesId.FERROSEED, + SpeciesId.KLINK, + SpeciesId.SKWOVET, + SpeciesId.ROOKIDEE, + SpeciesId.ROLYCOLY, + SpeciesId.CUFANT, + SpeciesId.GALAR_MEOWTH, + SpeciesId.GALAR_ZIGZAGOON, ], [TrainerPoolTier.UNCOMMON]: [ - Species.MAGNEMITE, - Species.RIOLU, - Species.DRILBUR, - Species.APPLIN, - Species.CRAMORANT, - Species.ARROKUDA, - Species.SINISTEA, - Species.HATENNA, - Species.FALINKS, - Species.GALAR_PONYTA, - Species.GALAR_YAMASK, + SpeciesId.MAGNEMITE, + SpeciesId.RIOLU, + SpeciesId.DRILBUR, + SpeciesId.APPLIN, + SpeciesId.CRAMORANT, + SpeciesId.ARROKUDA, + SpeciesId.SINISTEA, + SpeciesId.HATENNA, + SpeciesId.FALINKS, + SpeciesId.GALAR_PONYTA, + SpeciesId.GALAR_YAMASK, ], [TrainerPoolTier.RARE]: [ - Species.SCIZOR, - Species.BELDUM, - Species.HONEDGE, - Species.GALAR_FARFETCHD, - Species.GALAR_MR_MIME, - Species.GALAR_DARUMAKA, + SpeciesId.SCIZOR, + SpeciesId.BELDUM, + SpeciesId.HONEDGE, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.GALAR_MR_MIME, + SpeciesId.GALAR_DARUMAKA, ], - [TrainerPoolTier.SUPER_RARE]: [Species.DURALUDON, Species.DREEPY], + [TrainerPoolTier.SUPER_RARE]: [SpeciesId.DURALUDON, SpeciesId.DREEPY], }), [TrainerType.OLEANA]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("macro_admin", "macro_cosmos", [Species.GARBODOR]) + .initForEvilTeamAdmin("macro_admin", "macro_cosmos", [SpeciesId.GARBODOR]) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_oleana") @@ -2429,57 +2471,57 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ - Species.DUNSPARCE, - Species.HOUNDOUR, - Species.AZURILL, - Species.GULPIN, - Species.FOONGUS, - Species.FLETCHLING, - Species.LITLEO, - Species.FLABEBE, - Species.CRABRAWLER, - Species.NYMBLE, - Species.PAWMI, - Species.FIDOUGH, - Species.SQUAWKABILLY, - Species.MASCHIFF, - Species.SHROODLE, - Species.KLAWF, - Species.WIGLETT, - Species.PALDEA_WOOPER, + SpeciesId.DUNSPARCE, + SpeciesId.HOUNDOUR, + SpeciesId.AZURILL, + SpeciesId.GULPIN, + SpeciesId.FOONGUS, + SpeciesId.FLETCHLING, + SpeciesId.LITLEO, + SpeciesId.FLABEBE, + SpeciesId.CRABRAWLER, + SpeciesId.NYMBLE, + SpeciesId.PAWMI, + SpeciesId.FIDOUGH, + SpeciesId.SQUAWKABILLY, + SpeciesId.MASCHIFF, + SpeciesId.SHROODLE, + SpeciesId.KLAWF, + SpeciesId.WIGLETT, + SpeciesId.PALDEA_WOOPER, ], [TrainerPoolTier.UNCOMMON]: [ - Species.KOFFING, - Species.EEVEE, - Species.GIRAFARIG, - Species.RALTS, - Species.TORKOAL, - Species.SEVIPER, - Species.SCRAGGY, - Species.ZORUA, - Species.MIMIKYU, - Species.IMPIDIMP, - Species.FALINKS, - Species.CAPSAKID, - Species.TINKATINK, - Species.BOMBIRDIER, - Species.CYCLIZAR, - Species.FLAMIGO, - Species.PALDEA_TAUROS, + SpeciesId.KOFFING, + SpeciesId.EEVEE, + SpeciesId.GIRAFARIG, + SpeciesId.RALTS, + SpeciesId.TORKOAL, + SpeciesId.SEVIPER, + SpeciesId.SCRAGGY, + SpeciesId.ZORUA, + SpeciesId.MIMIKYU, + SpeciesId.IMPIDIMP, + SpeciesId.FALINKS, + SpeciesId.CAPSAKID, + SpeciesId.TINKATINK, + SpeciesId.BOMBIRDIER, + SpeciesId.CYCLIZAR, + SpeciesId.FLAMIGO, + SpeciesId.PALDEA_TAUROS, ], [TrainerPoolTier.RARE]: [ - Species.MANKEY, - Species.PAWNIARD, - Species.CHARCADET, - Species.FLITTLE, - Species.VAROOM, - Species.ORTHWORM, + SpeciesId.MANKEY, + SpeciesId.PAWNIARD, + SpeciesId.CHARCADET, + SpeciesId.FLITTLE, + SpeciesId.VAROOM, + SpeciesId.ORTHWORM, ], - [TrainerPoolTier.SUPER_RARE]: [Species.DONDOZO, Species.GIMMIGHOUL], + [TrainerPoolTier.SUPER_RARE]: [SpeciesId.DONDOZO, SpeciesId.GIMMIGHOUL], }), [TrainerType.GIACOMO]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("star_admin", "star_dark", [Species.KINGAMBIT], PokemonType.DARK) + .initForEvilTeamAdmin("star_admin", "star_dark", [SpeciesId.KINGAMBIT], PokemonType.DARK) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_star_admin") @@ -2487,19 +2529,19 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.REVAVROOM], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.REVAVROOM], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Segin Starmobile p.moveset = [ - new PokemonMove(Moves.WICKED_TORQUE), - new PokemonMove(Moves.SPIN_OUT), - new PokemonMove(Moves.SHIFT_GEAR), - new PokemonMove(Moves.HIGH_HORSEPOWER), + new PokemonMove(MoveId.WICKED_TORQUE), + new PokemonMove(MoveId.SPIN_OUT), + new PokemonMove(MoveId.SHIFT_GEAR), + new PokemonMove(MoveId.HIGH_HORSEPOWER), ]; }), ), [TrainerType.MELA]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("star_admin", "star_fire", [Species.ARMAROUGE], PokemonType.FIRE) + .initForEvilTeamAdmin("star_admin", "star_fire", [SpeciesId.ARMAROUGE], PokemonType.FIRE) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_star_admin") @@ -2507,19 +2549,19 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.REVAVROOM], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.REVAVROOM], TrainerSlot.TRAINER, true, p => { p.formIndex = 2; // Schedar Starmobile p.moveset = [ - new PokemonMove(Moves.BLAZING_TORQUE), - new PokemonMove(Moves.SPIN_OUT), - new PokemonMove(Moves.SHIFT_GEAR), - new PokemonMove(Moves.HIGH_HORSEPOWER), + new PokemonMove(MoveId.BLAZING_TORQUE), + new PokemonMove(MoveId.SPIN_OUT), + new PokemonMove(MoveId.SHIFT_GEAR), + new PokemonMove(MoveId.HIGH_HORSEPOWER), ]; }), ), [TrainerType.ATTICUS]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("star_admin", "star_poison", [Species.REVAVROOM], PokemonType.POISON) + .initForEvilTeamAdmin("star_admin", "star_poison", [SpeciesId.REVAVROOM], PokemonType.POISON) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_star_admin") @@ -2527,19 +2569,19 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.REVAVROOM], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.REVAVROOM], TrainerSlot.TRAINER, true, p => { p.formIndex = 3; // Navi Starmobile p.moveset = [ - new PokemonMove(Moves.NOXIOUS_TORQUE), - new PokemonMove(Moves.SPIN_OUT), - new PokemonMove(Moves.SHIFT_GEAR), - new PokemonMove(Moves.HIGH_HORSEPOWER), + new PokemonMove(MoveId.NOXIOUS_TORQUE), + new PokemonMove(MoveId.SPIN_OUT), + new PokemonMove(MoveId.SHIFT_GEAR), + new PokemonMove(MoveId.HIGH_HORSEPOWER), ]; }), ), [TrainerType.ORTEGA]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("star_admin", "star_fairy", [Species.DACHSBUN], PokemonType.FAIRY) + .initForEvilTeamAdmin("star_admin", "star_fairy", [SpeciesId.DACHSBUN], PokemonType.FAIRY) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_star_admin") @@ -2547,19 +2589,19 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.REVAVROOM], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.REVAVROOM], TrainerSlot.TRAINER, true, p => { p.formIndex = 4; // Ruchbah Starmobile p.moveset = [ - new PokemonMove(Moves.MAGICAL_TORQUE), - new PokemonMove(Moves.SPIN_OUT), - new PokemonMove(Moves.SHIFT_GEAR), - new PokemonMove(Moves.HIGH_HORSEPOWER), + new PokemonMove(MoveId.MAGICAL_TORQUE), + new PokemonMove(MoveId.SPIN_OUT), + new PokemonMove(MoveId.SHIFT_GEAR), + new PokemonMove(MoveId.HIGH_HORSEPOWER), ]; }), ), [TrainerType.ERI]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("star_admin", "star_fighting", [Species.ANNIHILAPE], PokemonType.FIGHTING) + .initForEvilTeamAdmin("star_admin", "star_fighting", [SpeciesId.ANNIHILAPE], PokemonType.FIGHTING) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_star_admin") @@ -2567,13 +2609,13 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.REVAVROOM], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.REVAVROOM], TrainerSlot.TRAINER, true, p => { p.formIndex = 5; // Caph Starmobile p.moveset = [ - new PokemonMove(Moves.COMBAT_TORQUE), - new PokemonMove(Moves.SPIN_OUT), - new PokemonMove(Moves.SHIFT_GEAR), - new PokemonMove(Moves.HIGH_HORSEPOWER), + new PokemonMove(MoveId.COMBAT_TORQUE), + new PokemonMove(MoveId.SPIN_OUT), + new PokemonMove(MoveId.SHIFT_GEAR), + new PokemonMove(MoveId.HIGH_HORSEPOWER), ]; }), ), @@ -2858,27 +2900,27 @@ export const trainerConfigs: TrainerConfigs = { .setMixedBattleBgm("battle_kanto_gym") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.DEWGONG], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.DEWGONG], TrainerSlot.TRAINER, true, p => { p.abilityIndex = 0; // Thick Fat p.generateAndPopulateMoveset(); }), ) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.SLOWBRO, Species.GALAR_SLOWBRO], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.SLOWBRO, SpeciesId.GALAR_SLOWBRO], TrainerSlot.TRAINER, true, p => { // Tera Ice Slowbro/G-Slowbro p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.ICE_BEAM)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.ICE_BEAM)) { // Check if Ice Beam is in the moveset, if not, replace the third move with Ice Beam. - p.moveset[2] = new PokemonMove(Moves.ICE_BEAM); + p.moveset[2] = new PokemonMove(MoveId.ICE_BEAM); } }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.JYNX])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CLOYSTER, Species.ALOLA_SANDSLASH])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.JYNX])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.CLOYSTER, SpeciesId.ALOLA_SANDSLASH])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.LAPRAS], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.LAPRAS], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -2887,23 +2929,23 @@ export const trainerConfigs: TrainerConfigs = { .initForEliteFour(signatureSpecies["BRUNO"], true, PokemonType.FIGHTING, 2) .setBattleBgm("battle_kanto_gym") .setMixedBattleBgm("battle_kanto_gym") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.HITMONLEE, Species.HITMONCHAN, Species.HITMONTOP])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.HITMONLEE, SpeciesId.HITMONCHAN, SpeciesId.HITMONTOP])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.STEELIX], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.STEELIX], TrainerSlot.TRAINER, true, p => { // Tera Fighting Steelix p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.BODY_PRESS)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.BODY_PRESS)) { // Check if Body Press is in the moveset, if not, replace the third move with Body Press. - p.moveset[2] = new PokemonMove(Moves.BODY_PRESS); + p.moveset[2] = new PokemonMove(MoveId.BODY_PRESS); } }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.POLIWRATH])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ANNIHILAPE])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.POLIWRATH])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.ANNIHILAPE])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.MACHAMP], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.MACHAMP], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -2912,23 +2954,23 @@ export const trainerConfigs: TrainerConfigs = { .initForEliteFour(signatureSpecies["AGATHA"], false, PokemonType.GHOST, 2) .setBattleBgm("battle_kanto_gym") .setMixedBattleBgm("battle_kanto_gym") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.MISMAGIUS])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.MISMAGIUS])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.ARBOK, Species.WEEZING], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.ARBOK, SpeciesId.WEEZING], TrainerSlot.TRAINER, true, p => { // Tera Ghost Arbok/Weezing p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. - p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); + p.moveset[2] = new PokemonMove(MoveId.TERA_BLAST); } }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.ALOLA_MAROWAK])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CURSOLA])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.ALOLA_MAROWAK])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.CURSOLA])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.GENGAR], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.GENGAR], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -2938,23 +2980,23 @@ export const trainerConfigs: TrainerConfigs = { .initForEliteFour(signatureSpecies["LANCE"], true, PokemonType.DRAGON, 2) .setBattleBgm("battle_kanto_gym") .setMixedBattleBgm("battle_kanto_gym") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.KINGDRA])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.KINGDRA])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.GYARADOS, Species.AERODACTYL], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.GYARADOS, SpeciesId.AERODACTYL], TrainerSlot.TRAINER, true, p => { // Tera Dragon Gyarados/Aerodactyl p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. - p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); + p.moveset[2] = new PokemonMove(MoveId.TERA_BLAST); } }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.ALOLA_EXEGGUTOR])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SALAMENCE])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.ALOLA_EXEGGUTOR])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.SALAMENCE])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.DRAGONITE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.DRAGONITE], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -2963,13 +3005,13 @@ export const trainerConfigs: TrainerConfigs = { .initForEliteFour(signatureSpecies["WILL"], true, PokemonType.PSYCHIC, 2) .setBattleBgm("battle_johto_gym") .setMixedBattleBgm("battle_johto_gym") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.JYNX])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SLOWKING, Species.GALAR_SLOWKING])) // Tera Psychic Slowking/G-Slowking - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.EXEGGUTOR])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.WYRDEER, Species.FARIGIRAF])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.JYNX])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.SLOWKING, SpeciesId.GALAR_SLOWKING])) // Tera Psychic Slowking/G-Slowking + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.EXEGGUTOR])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.WYRDEER, SpeciesId.FARIGIRAF])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.XATU], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.XATU], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -2980,17 +3022,17 @@ export const trainerConfigs: TrainerConfigs = { .setMixedBattleBgm("battle_johto_gym") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.VENOMOTH], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.VENOMOTH], TrainerSlot.TRAINER, true, p => { p.abilityIndex = 1; // Tinted Lens p.generateAndPopulateMoveset(); }), ) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.MUK, Species.WEEZING])) // Tera Poison Muk/Weezing - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.TENTACRUEL])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SNEASLER, Species.OVERQWIL])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.MUK, SpeciesId.WEEZING])) // Tera Poison Muk/Weezing + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.TENTACRUEL])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.SNEASLER, SpeciesId.OVERQWIL])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.CROBAT], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.CROBAT], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -2999,23 +3041,23 @@ export const trainerConfigs: TrainerConfigs = { .initForEliteFour(signatureSpecies["KAREN"], false, PokemonType.DARK, 2) .setBattleBgm("battle_johto_gym") .setMixedBattleBgm("battle_johto_gym") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.UMBREON])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.UMBREON])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.GENGAR], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.GENGAR], TrainerSlot.TRAINER, true, p => { // Tera Dark Gengar p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.DARK_PULSE)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.DARK_PULSE)) { // Check if Dark Pulse is in the moveset, if not, replace the third move with Dark Pulse. - p.moveset[2] = new PokemonMove(Moves.DARK_PULSE); + p.moveset[2] = new PokemonMove(MoveId.DARK_PULSE); } }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.HONCHKROW])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.WEAVILE])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.HONCHKROW])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.WEAVILE])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.HOUNDOOM], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.HOUNDOOM], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3025,17 +3067,17 @@ export const trainerConfigs: TrainerConfigs = { .setMixedBattleBgm("battle_hoenn_elite") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.MIGHTYENA], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.MIGHTYENA], TrainerSlot.TRAINER, true, p => { p.abilityIndex = 0; // Intimidate p.generateAndPopulateMoveset(); }), ) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.OBSTAGOON])) // Tera Dark Obstagoon - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.SHIFTRY, Species.CACTURNE])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SHARPEDO, Species.CRAWDAUNT])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.OBSTAGOON])) // Tera Dark Obstagoon + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.SHIFTRY, SpeciesId.CACTURNE])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.SHARPEDO, SpeciesId.CRAWDAUNT])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.ABSOL], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.ABSOL], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3043,19 +3085,19 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.PHOEBE]: new TrainerConfig(++t) .initForEliteFour(signatureSpecies["PHOEBE"], false, PokemonType.GHOST, 2) .setMixedBattleBgm("battle_hoenn_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SABLEYE])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.BANETTE])) // Tera Ghost Banette - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.DRIFBLIM, Species.MISMAGIUS])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.SABLEYE])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.BANETTE])) // Tera Ghost Banette + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.DRIFBLIM, SpeciesId.MISMAGIUS])) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.ORICORIO, Species.ALOLA_MAROWAK], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.ORICORIO, SpeciesId.ALOLA_MAROWAK], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - p.formIndex = p.species.speciesId === Species.ORICORIO ? 3 : 0; // Oricorio-Sensu + p.formIndex = p.species.speciesId === SpeciesId.ORICORIO ? 3 : 0; // Oricorio-Sensu }), ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.DUSKNOIR], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.DUSKNOIR], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3065,17 +3107,17 @@ export const trainerConfigs: TrainerConfigs = { .setMixedBattleBgm("battle_hoenn_elite") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.ABOMASNOW], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.ABOMASNOW], TrainerSlot.TRAINER, true, p => { p.abilityIndex = 0; // Snow Warning p.generateAndPopulateMoveset(); }), ) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.GLALIE])) // Tera Ice Glalie - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.FROSLASS])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ALOLA_NINETALES])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.GLALIE])) // Tera Ice Glalie + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.FROSLASS])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.ALOLA_NINETALES])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.WALREIN], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.WALREIN], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3083,23 +3125,23 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.DRAKE]: new TrainerConfig(++t) .initForEliteFour(signatureSpecies["DRAKE"], true, PokemonType.DRAGON, 2) .setMixedBattleBgm("battle_hoenn_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ALTARIA])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.ALTARIA])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.DHELMISE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.DHELMISE], TrainerSlot.TRAINER, true, p => { // Tera Dragon Dhelmise p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. - p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); + p.moveset[2] = new PokemonMove(MoveId.TERA_BLAST); } }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.FLYGON])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.KINGDRA])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.FLYGON])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.KINGDRA])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.SALAMENCE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.SALAMENCE], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3108,20 +3150,20 @@ export const trainerConfigs: TrainerConfigs = { .initForEliteFour(signatureSpecies["AARON"], true, PokemonType.BUG, 5) .setBattleBgm("battle_sinnoh_gym") .setMixedBattleBgm("battle_sinnoh_gym") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.YANMEGA])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.HERACROSS])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.VESPIQUEN])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SCIZOR, Species.KLEAVOR])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.YANMEGA])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.HERACROSS])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.VESPIQUEN])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.SCIZOR, SpeciesId.KLEAVOR])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.DRAPION], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.DRAPION], TrainerSlot.TRAINER, true, p => { // Tera Bug Drapion p.setBoss(true, 2); p.abilityIndex = 1; // Sniper p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.X_SCISSOR)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.X_SCISSOR)) { // Check if X-Scissor is in the moveset, if not, replace the third move with X-Scissor. - p.moveset[2] = new PokemonMove(Moves.X_SCISSOR); + p.moveset[2] = new PokemonMove(MoveId.X_SCISSOR); } }), ), @@ -3129,20 +3171,20 @@ export const trainerConfigs: TrainerConfigs = { .initForEliteFour(signatureSpecies["BERTHA"], false, PokemonType.GROUND, 2) .setBattleBgm("battle_sinnoh_gym") .setMixedBattleBgm("battle_sinnoh_gym") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.WHISCASH])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.WHISCASH])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.HIPPOWDON], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.HIPPOWDON], TrainerSlot.TRAINER, true, p => { // Tera Ground Hippowdon p.abilityIndex = 0; // Sand Stream p.generateAndPopulateMoveset(); }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GLISCOR])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.MAMOSWINE, Species.URSALUNA])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.GLISCOR])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.MAMOSWINE, SpeciesId.URSALUNA])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.RHYPERIOR], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.RHYPERIOR], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.abilityIndex = 1; // Solid Rock p.generateAndPopulateMoveset(); @@ -3152,23 +3194,23 @@ export const trainerConfigs: TrainerConfigs = { .initForEliteFour(signatureSpecies["FLINT"], true, PokemonType.FIRE, 2) .setBattleBgm("battle_sinnoh_gym") .setMixedBattleBgm("battle_sinnoh_gym") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.RAPIDASH])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.RAPIDASH])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.STEELIX, Species.LOPUNNY], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.STEELIX, SpeciesId.LOPUNNY], TrainerSlot.TRAINER, true, p => { // Tera Fire Steelix/Lopunny p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. - p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); + p.moveset[2] = new PokemonMove(MoveId.TERA_BLAST); } }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.INFERNAPE])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ARCANINE, Species.HISUI_ARCANINE])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.INFERNAPE])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.ARCANINE, SpeciesId.HISUI_ARCANINE])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.MAGMORTAR], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.MAGMORTAR], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3177,13 +3219,13 @@ export const trainerConfigs: TrainerConfigs = { .initForEliteFour(signatureSpecies["LUCIAN"], true, PokemonType.PSYCHIC, 2) .setBattleBgm("battle_sinnoh_gym") .setMixedBattleBgm("battle_sinnoh_gym") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ESPEON, Species.ALAKAZAM])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.FARIGIRAF])) // Tera Psychic Farigiraf - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.BRONZONG])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.MR_RIME, Species.HISUI_BRAVIARY])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.ESPEON, SpeciesId.ALAKAZAM])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.FARIGIRAF])) // Tera Psychic Farigiraf + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.BRONZONG])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.MR_RIME, SpeciesId.HISUI_BRAVIARY])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.GALLADE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.GALLADE], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.abilityIndex = 1; // Sharpness p.generateAndPopulateMoveset(); @@ -3192,13 +3234,13 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.SHAUNTAL]: new TrainerConfig(++t) .initForEliteFour(signatureSpecies["SHAUNTAL"], false, PokemonType.GHOST, 2) .setMixedBattleBgm("battle_unova_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.COFAGRIGUS])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.GOLURK])) // Tera Ghost Golurk - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.JELLICENT])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.MISMAGIUS, Species.FROSLASS])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.COFAGRIGUS])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.GOLURK])) // Tera Ghost Golurk + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.JELLICENT])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.MISMAGIUS, SpeciesId.FROSLASS])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.CHANDELURE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.CHANDELURE], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3206,13 +3248,13 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.MARSHAL]: new TrainerConfig(++t) .initForEliteFour(signatureSpecies["MARSHAL"], true, PokemonType.FIGHTING, 2) .setMixedBattleBgm("battle_unova_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.THROH, Species.SAWK])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.MIENSHAO])) // Tera Fighting Mienshao - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.EMBOAR])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.BRELOOM, Species.TOXICROAK])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.THROH, SpeciesId.SAWK])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.MIENSHAO])) // Tera Fighting Mienshao + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.EMBOAR])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.BRELOOM, SpeciesId.TOXICROAK])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.CONKELDURR], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.CONKELDURR], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3220,13 +3262,13 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.GRIMSLEY]: new TrainerConfig(++t) .initForEliteFour(signatureSpecies["GRIMSLEY"], true, PokemonType.DARK, 2) .setMixedBattleBgm("battle_unova_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.LIEPARD])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.KROOKODILE])) // Tera Dark Krookodile - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.SCRAFTY])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ZOROARK, Species.HISUI_SAMUROTT])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.LIEPARD])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.KROOKODILE])) // Tera Dark Krookodile + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.SCRAFTY])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.ZOROARK, SpeciesId.HISUI_SAMUROTT])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.KINGAMBIT], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.KINGAMBIT], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3234,19 +3276,19 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.CAITLIN]: new TrainerConfig(++t) .initForEliteFour(signatureSpecies["CAITLIN"], false, PokemonType.PSYCHIC, 2) .setMixedBattleBgm("battle_unova_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.MUSHARNA])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.REUNICLUS])) // Tera Psychic Reuniclus + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.MUSHARNA])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.REUNICLUS])) // Tera Psychic Reuniclus .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.GALLADE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.GALLADE], TrainerSlot.TRAINER, true, p => { p.abilityIndex = 1; // Sharpness p.generateAndPopulateMoveset(); }), ) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SIGILYPH, Species.HISUI_BRAVIARY])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.SIGILYPH, SpeciesId.HISUI_BRAVIARY])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.GOTHITELLE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.GOTHITELLE], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3256,23 +3298,23 @@ export const trainerConfigs: TrainerConfigs = { .setMixedBattleBgm("battle_kalos_elite") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.PYROAR], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.PYROAR], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.FEMALE; }), ) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.HOUNDOOM])) // Tera Fire Houndoom + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.HOUNDOOM])) // Tera Fire Houndoom .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.TORKOAL], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.TORKOAL], TrainerSlot.TRAINER, true, p => { p.abilityIndex = 1; // Drought p.generateAndPopulateMoveset(); }), ) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CHANDELURE, Species.DELPHOX])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.CHANDELURE, SpeciesId.DELPHOX])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.TALONFLAME], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.TALONFLAME], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3280,13 +3322,13 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.SIEBOLD]: new TrainerConfig(++t) .initForEliteFour(signatureSpecies["SIEBOLD"], true, PokemonType.WATER, 2) .setMixedBattleBgm("battle_kalos_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.CLAWITZER])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.GYARADOS])) // Tera Water Gyarados - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.STARMIE])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.BLASTOISE, Species.DONDOZO])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.CLAWITZER])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.GYARADOS])) // Tera Water Gyarados + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.STARMIE])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.BLASTOISE, SpeciesId.DONDOZO])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.BARBARACLE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.BARBARACLE], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.abilityIndex = 1; // Tough Claws p.generateAndPopulateMoveset(); @@ -3295,23 +3337,23 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.WIKSTROM]: new TrainerConfig(++t) .initForEliteFour(signatureSpecies["WIKSTROM"], true, PokemonType.STEEL, 2) .setMixedBattleBgm("battle_kalos_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.KLEFKI])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.KLEFKI])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.CERULEDGE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.CERULEDGE], TrainerSlot.TRAINER, true, p => { // Tera Steel Ceruledge p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.IRON_HEAD)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.IRON_HEAD)) { // Check if Iron Head is in the moveset, if not, replace the third move with Iron Head. - p.moveset[2] = new PokemonMove(Moves.IRON_HEAD); + p.moveset[2] = new PokemonMove(MoveId.IRON_HEAD); } }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.SCIZOR])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CORVIKNIGHT])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.SCIZOR])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.CORVIKNIGHT])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.AEGISLASH], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.AEGISLASH], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3319,13 +3361,13 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.DRASNA]: new TrainerConfig(++t) .initForEliteFour(signatureSpecies["DRASNA"], false, PokemonType.DRAGON, 2) .setMixedBattleBgm("battle_kalos_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.DRAGALGE])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.GARCHOMP])) // Tera Dragon Garchomp - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.ALTARIA])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.DRUDDIGON])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.DRAGALGE])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.GARCHOMP])) // Tera Dragon Garchomp + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.ALTARIA])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.DRUDDIGON])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.NOIVERN], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.NOIVERN], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3333,23 +3375,23 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.HALA]: new TrainerConfig(++t) .initForEliteFour(signatureSpecies["HALA"], true, PokemonType.FIGHTING, 2) .setMixedBattleBgm("battle_alola_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.HARIYAMA])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.HARIYAMA])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.INCINEROAR], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.INCINEROAR], TrainerSlot.TRAINER, true, p => { // Tera Fighting Incineroar p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.CROSS_CHOP)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.CROSS_CHOP)) { // Check if Cross Chop is in the moveset, if not, replace the third move with Cross Chop. - p.moveset[2] = new PokemonMove(Moves.CROSS_CHOP); + p.moveset[2] = new PokemonMove(MoveId.CROSS_CHOP); } }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.BEWEAR])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.POLIWRATH, Species.ANNIHILAPE])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.BEWEAR])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.POLIWRATH, SpeciesId.ANNIHILAPE])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.CRABOMINABLE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.CRABOMINABLE], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3357,13 +3399,13 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.MOLAYNE]: new TrainerConfig(++t) .initForEliteFour(signatureSpecies["MOLAYNE"], true, PokemonType.STEEL, 2) .setMixedBattleBgm("battle_alola_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.KLEFKI])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.ALOLA_SANDSLASH])) // Tera Steel A-Sandslash - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.MAGNEZONE])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.METAGROSS, Species.KINGAMBIT])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.KLEFKI])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.ALOLA_SANDSLASH])) // Tera Steel A-Sandslash + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.MAGNEZONE])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.METAGROSS, SpeciesId.KINGAMBIT])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.ALOLA_DUGTRIO], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.ALOLA_DUGTRIO], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3373,17 +3415,17 @@ export const trainerConfigs: TrainerConfigs = { .setMixedBattleBgm("battle_alola_elite") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.GIGALITH], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.GIGALITH], TrainerSlot.TRAINER, true, p => { p.abilityIndex = 1; // Sand Stream p.generateAndPopulateMoveset(); }), ) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.PROBOPASS])) // Tera Rock Probopass - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.ALOLA_GOLEM])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.RELICANTH, Species.CARBINK])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.PROBOPASS])) // Tera Rock Probopass + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.ALOLA_GOLEM])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.RELICANTH, SpeciesId.CARBINK])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.LYCANROC], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.LYCANROC], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.formIndex = 1; p.generateAndPopulateMoveset(); @@ -3392,13 +3434,13 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.ACEROLA]: new TrainerConfig(++t) .initForEliteFour(signatureSpecies["ACEROLA"], false, PokemonType.GHOST, 2) .setMixedBattleBgm("battle_alola_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.DRIFBLIM])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.MIMIKYU])) // Tera Ghost Mimikyu - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.DHELMISE])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.FROSLASS])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.DRIFBLIM])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.MIMIKYU])) // Tera Ghost Mimikyu + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.DHELMISE])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.FROSLASS])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.PALOSSAND], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.PALOSSAND], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3406,23 +3448,23 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.KAHILI]: new TrainerConfig(++t) .initForEliteFour(signatureSpecies["KAHILI"], false, PokemonType.FLYING, 2) .setMixedBattleBgm("battle_alola_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.HAWLUCHA])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.HAWLUCHA])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.DECIDUEYE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.DECIDUEYE], TrainerSlot.TRAINER, true, p => { // Tera Flying Decidueye p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.BRAVE_BIRD)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.BRAVE_BIRD)) { // Check if Brave Bird is in the moveset, if not, replace the third move with Brave Bird. - p.moveset[2] = new PokemonMove(Moves.BRAVE_BIRD); + p.moveset[2] = new PokemonMove(MoveId.BRAVE_BIRD); } }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.BRAVIARY, Species.MANDIBUZZ])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ORICORIO])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.BRAVIARY, SpeciesId.MANDIBUZZ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.ORICORIO])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.TOUCANNON], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.TOUCANNON], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3431,23 +3473,23 @@ export const trainerConfigs: TrainerConfigs = { .setName("Marnie") .initForEliteFour(signatureSpecies["MARNIE_ELITE"], false, PokemonType.DARK, 2) .setMixedBattleBgm("battle_galar_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.LIEPARD])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.LIEPARD])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.TOXICROAK], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.TOXICROAK], TrainerSlot.TRAINER, true, p => { // Tera Dark Toxicroak p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.SUCKER_PUNCH)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.SUCKER_PUNCH)) { // Check if Sucker Punch is in the moveset, if not, replace the third move with Sucker Punch. - p.moveset[2] = new PokemonMove(Moves.SUCKER_PUNCH); + p.moveset[2] = new PokemonMove(MoveId.SUCKER_PUNCH); } }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.SCRAFTY, Species.PANGORO])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.MORPEKO])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.SCRAFTY, SpeciesId.PANGORO])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.MORPEKO])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.GRIMMSNARL], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.GRIMMSNARL], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3456,29 +3498,29 @@ export const trainerConfigs: TrainerConfigs = { .setName("Nessa") .initForEliteFour(signatureSpecies["NESSA_ELITE"], false, PokemonType.WATER, 2) .setMixedBattleBgm("battle_galar_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.GOLISOPOD])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.GOLISOPOD])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.EISCUE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.EISCUE], TrainerSlot.TRAINER, true, p => { // Tera Water Eiscue p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.LIQUIDATION)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.LIQUIDATION)) { // Check if Liquidation is in the moveset, if not, replace the third move with Liquidation. - p.moveset[2] = new PokemonMove(Moves.LIQUIDATION); + p.moveset[2] = new PokemonMove(MoveId.LIQUIDATION); } }), ) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.PELIPPER], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.PELIPPER], TrainerSlot.TRAINER, true, p => { p.abilityIndex = 1; // Drizzle p.generateAndPopulateMoveset(); }), ) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.TOXAPEX])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.TOXAPEX])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.DREDNAW], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.DREDNAW], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3487,13 +3529,13 @@ export const trainerConfigs: TrainerConfigs = { .setName("Bea") .initForEliteFour(signatureSpecies["BEA_ELITE"], false, PokemonType.FIGHTING, 2) .setMixedBattleBgm("battle_galar_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.HAWLUCHA])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SIRFETCHD])) // Tera Fighting Sirfetch'd - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GRAPPLOCT, Species.FALINKS])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.HITMONTOP])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.HAWLUCHA])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.SIRFETCHD])) // Tera Fighting Sirfetch'd + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.GRAPPLOCT, SpeciesId.FALINKS])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.HITMONTOP])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.MACHAMP], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.MACHAMP], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3502,13 +3544,13 @@ export const trainerConfigs: TrainerConfigs = { .setName("Allister") .initForEliteFour(signatureSpecies["ALLISTER_ELITE"], true, PokemonType.GHOST, 2) .setMixedBattleBgm("battle_galar_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.DUSKNOIR])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.RUNERIGUS])) // Tera Ghost Runerigus - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.POLTEAGEIST, Species.SINISTCHA])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CURSOLA])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.DUSKNOIR])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.RUNERIGUS])) // Tera Ghost Runerigus + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.POLTEAGEIST, SpeciesId.SINISTCHA])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.CURSOLA])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.GENGAR], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.GENGAR], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3517,24 +3559,24 @@ export const trainerConfigs: TrainerConfigs = { .setName("Raihan") .initForEliteFour(signatureSpecies["RAIHAN_ELITE"], true, PokemonType.DRAGON, 2) .setMixedBattleBgm("battle_galar_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.FLYGON])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.FLYGON])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.TORKOAL], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.TORKOAL], TrainerSlot.TRAINER, true, p => { // Tera Dragon Torkoal p.abilityIndex = 1; // Drought p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. - p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); + p.moveset[2] = new PokemonMove(MoveId.TERA_BLAST); } }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GOODRA])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.TURTONATOR])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.GOODRA])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.TURTONATOR])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.ARCHALUDON], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.ARCHALUDON], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3542,13 +3584,13 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.RIKA]: new TrainerConfig(++t) .initForEliteFour(signatureSpecies["RIKA"], false, PokemonType.GROUND, 5) .setMixedBattleBgm("battle_paldea_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.DUGTRIO])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.DONPHAN])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.SWAMPERT, Species.TORTERRA])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CAMERUPT])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.DUGTRIO])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.DONPHAN])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.SWAMPERT, SpeciesId.TORTERRA])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.CAMERUPT])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.CLODSIRE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.CLODSIRE], TrainerSlot.TRAINER, true, p => { // Tera Ground Clodsire p.setBoss(true, 2); p.generateAndPopulateMoveset(); @@ -3557,19 +3599,19 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.POPPY]: new TrainerConfig(++t) .initForEliteFour(signatureSpecies["POPPY"], false, PokemonType.STEEL, 5) .setMixedBattleBgm("battle_paldea_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.COPPERAJAH])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.MAGNEZONE])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.COPPERAJAH])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.MAGNEZONE])) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.BRONZONG, Species.CORVIKNIGHT], TrainerSlot.TRAINER, true, p => { - p.abilityIndex = p.species.speciesId === Species.BRONZONG ? 0 : 1; // Levitate Bronzong, Unnerve Corviknight + getRandomPartyMemberFunc([SpeciesId.BRONZONG, SpeciesId.CORVIKNIGHT], TrainerSlot.TRAINER, true, p => { + p.abilityIndex = p.species.speciesId === SpeciesId.BRONZONG ? 0 : 1; // Levitate Bronzong, Unnerve Corviknight p.generateAndPopulateMoveset(); }), ) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.STEELIX])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.STEELIX])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.TINKATON], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.TINKATON], TrainerSlot.TRAINER, true, p => { // Tera Steel Tinkaton p.setBoss(true, 2); p.generateAndPopulateMoveset(); @@ -3579,13 +3621,13 @@ export const trainerConfigs: TrainerConfigs = { .setName("Larry") .initForEliteFour(signatureSpecies["LARRY_ELITE"], true, PokemonType.FLYING, 5) .setMixedBattleBgm("battle_paldea_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ALTARIA])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.BOMBIRDIER])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.TROPIUS])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.STARAPTOR])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.ALTARIA])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.BOMBIRDIER])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.TROPIUS])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.STARAPTOR])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.FLAMIGO], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.FLAMIGO], TrainerSlot.TRAINER, true, p => { // Tera Flying Flamigo p.setBoss(true, 2); p.generateAndPopulateMoveset(); @@ -3594,13 +3636,13 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.HASSEL]: new TrainerConfig(++t) .initForEliteFour(signatureSpecies["HASSEL"], true, PokemonType.DRAGON, 5) .setMixedBattleBgm("battle_paldea_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.NOIVERN])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.DRAGALGE])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.FLAPPLE, Species.APPLETUN, Species.HYDRAPPLE])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.HAXORUS])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.NOIVERN])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.DRAGALGE])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.FLAPPLE, SpeciesId.APPLETUN, SpeciesId.HYDRAPPLE])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.HAXORUS])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.BAXCALIBUR], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.BAXCALIBUR], TrainerSlot.TRAINER, true, p => { // Tera Dragon Baxcalibur p.setBoss(true, 2); p.generateAndPopulateMoveset(); @@ -3611,36 +3653,36 @@ export const trainerConfigs: TrainerConfigs = { .setMixedBattleBgm("battle_bb_elite") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.ROTOM], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.ROTOM], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Heat Rotom p.generateAndPopulateMoveset(); }), ) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.EXEGGUTOR], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.EXEGGUTOR], TrainerSlot.TRAINER, true, p => { // Tera Fire Exeggutor p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. - p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); + p.moveset[2] = new PokemonMove(MoveId.TERA_BLAST); } }), ) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.TALONFLAME], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.TALONFLAME], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.SUNNY_DAY)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.SUNNY_DAY)) { // Check if Sunny Day is in the moveset, if not, replace the third move with Sunny Day. - p.moveset[2] = new PokemonMove(Moves.SUNNY_DAY); + p.moveset[2] = new PokemonMove(MoveId.SUNNY_DAY); } }), ) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.MAGMORTAR])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.MAGMORTAR])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.BLAZIKEN], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.BLAZIKEN], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3648,23 +3690,23 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.AMARYS]: new TrainerConfig(++t) .initForEliteFour(signatureSpecies["AMARYS"], false, PokemonType.STEEL, 2) .setMixedBattleBgm("battle_bb_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SKARMORY])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.SKARMORY])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.REUNICLUS], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.REUNICLUS], TrainerSlot.TRAINER, true, p => { // Tera Steel Reuniclus p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.FLASH_CANNON)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.FLASH_CANNON)) { // Check if Flash Cannon is in the moveset, if not, replace the third move with Flash Cannon. - p.moveset[2] = new PokemonMove(Moves.FLASH_CANNON); + p.moveset[2] = new PokemonMove(MoveId.FLASH_CANNON); } }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.EMPOLEON])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SCIZOR])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.EMPOLEON])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.SCIZOR])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.METAGROSS], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.METAGROSS], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3672,42 +3714,42 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.LACEY]: new TrainerConfig(++t) .initForEliteFour(signatureSpecies["LACEY"], false, PokemonType.FAIRY, 5) .setMixedBattleBgm("battle_bb_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.WHIMSICOTT])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.PRIMARINA])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GRANBULL])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ALCREMIE])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.WHIMSICOTT])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.PRIMARINA])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.GRANBULL])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.ALCREMIE])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.EXCADRILL], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.EXCADRILL], TrainerSlot.TRAINER, true, p => { // Tera Fairy Excadrill p.setBoss(true, 2); p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. - p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); + p.moveset[2] = new PokemonMove(MoveId.TERA_BLAST); } }), ), [TrainerType.DRAYTON]: new TrainerConfig(++t) .initForEliteFour(signatureSpecies["DRAYTON"], true, PokemonType.DRAGON, 2) .setMixedBattleBgm("battle_bb_elite") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.DRAGONITE])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.DRAGONITE])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.SCEPTILE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.SCEPTILE], TrainerSlot.TRAINER, true, p => { // Tera Dragon Sceptile p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.DUAL_CHOP)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.DUAL_CHOP)) { // Check if Dual Chop is in the moveset, if not, replace the third move with Dual Chop. - p.moveset[2] = new PokemonMove(Moves.DUAL_CHOP); + p.moveset[2] = new PokemonMove(MoveId.DUAL_CHOP); } }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.HAXORUS])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.KINGDRA, Species.DRACOVISH])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.HAXORUS])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.KINGDRA, SpeciesId.DRACOVISH])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.ARCHALUDON], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.ARCHALUDON], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), @@ -3720,20 +3762,20 @@ export const trainerConfigs: TrainerConfigs = { .setHasDouble("blue_red_double") .setDoubleTrainerType(TrainerType.RED) .setDoubleTitle("champion_double") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ALAKAZAM])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.MACHAMP])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.ALAKAZAM])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.MACHAMP])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.HO_OH], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.HO_OH], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.RHYPERIOR, Species.ELECTIVIRE])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.RHYPERIOR, SpeciesId.ELECTIVIRE])) .setPartyMemberFunc( 4, getRandomPartyMemberFunc( - [Species.ARCANINE, Species.EXEGGUTOR, Species.GYARADOS], + [SpeciesId.ARCANINE, SpeciesId.EXEGGUTOR, SpeciesId.GYARADOS], TrainerSlot.TRAINER, true, p => { @@ -3744,7 +3786,7 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.PIDGEOT], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.PIDGEOT], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Pidgeot p.generateAndPopulateMoveset(); p.generateName(); @@ -3761,25 +3803,25 @@ export const trainerConfigs: TrainerConfigs = { .setDoubleTitle("champion_double") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.PIKACHU], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.PIKACHU], TrainerSlot.TRAINER, true, p => { p.formIndex = 8; // G-Max Pikachu p.generateAndPopulateMoveset(); p.generateName(); p.gender = Gender.MALE; }), ) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.ESPEON, Species.UMBREON, Species.SYLVEON])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.ESPEON, SpeciesId.UMBREON, SpeciesId.SYLVEON])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.LUGIA], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.LUGIA], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.MEGANIUM, SpeciesId.TYPHLOSION, SpeciesId.FERALIGATR])) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.SNORLAX], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.SNORLAX], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.setBoss(true, 2); }), @@ -3787,7 +3829,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc( 5, getRandomPartyMemberFunc( - [Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE], + [SpeciesId.VENUSAUR, SpeciesId.CHARIZARD, SpeciesId.BLASTOISE], TrainerSlot.TRAINER, true, p => { @@ -3804,28 +3846,33 @@ export const trainerConfigs: TrainerConfigs = { .initForChampion(true) .setBattleBgm("battle_johto_champion") .setMixedBattleBgm("battle_johto_champion") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.GYARADOS, Species.KINGDRA])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.AERODACTYL])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.GYARADOS, SpeciesId.KINGDRA])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.AERODACTYL])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.SALAMENCE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.SALAMENCE], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Salamence p.generateAndPopulateMoveset(); p.generateName(); }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.CHARIZARD])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.CHARIZARD])) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.TYRANITAR, Species.GARCHOMP, Species.KOMMO_O], TrainerSlot.TRAINER, true, p => { - p.teraType = PokemonType.DRAGON; - p.generateAndPopulateMoveset(); - p.abilityIndex = p.species.speciesId === Species.KOMMO_O ? 1 : 2; // Soundproof Kommo-o, Unnerve Tyranitar, Rough Skin Garchomp - }), + getRandomPartyMemberFunc( + [SpeciesId.TYRANITAR, SpeciesId.GARCHOMP, SpeciesId.KOMMO_O], + TrainerSlot.TRAINER, + true, + p => { + p.teraType = PokemonType.DRAGON; + p.generateAndPopulateMoveset(); + p.abilityIndex = p.species.speciesId === SpeciesId.KOMMO_O ? 1 : 2; // Soundproof Kommo-o, Unnerve Tyranitar, Rough Skin Garchomp + }, + ), ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.DRAGONITE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.DRAGONITE], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; p.setBoss(true, 2); @@ -3839,26 +3886,31 @@ export const trainerConfigs: TrainerConfigs = { .setHasDouble("steven_wallace_double") .setDoubleTrainerType(TrainerType.WALLACE) .setDoubleTitle("champion_double") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SKARMORY])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.CRADILY, Species.ARMALDO])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.SKARMORY])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.CRADILY, SpeciesId.ARMALDO])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.AGGRON], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.AGGRON], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.setBoss(true, 2); }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GOLURK, Species.RUNERIGUS])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.GOLURK, SpeciesId.RUNERIGUS])) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.REGIROCK, Species.REGICE, Species.REGISTEEL], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - }), + getRandomPartyMemberFunc( + [SpeciesId.REGIROCK, SpeciesId.REGICE, SpeciesId.REGISTEEL], + TrainerSlot.TRAINER, + true, + p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + }, + ), ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.METAGROSS], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.METAGROSS], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Metagross p.generateAndPopulateMoveset(); p.generateName(); @@ -3874,32 +3926,32 @@ export const trainerConfigs: TrainerConfigs = { .setDoubleTitle("champion_double") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.PELIPPER], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.PELIPPER], TrainerSlot.TRAINER, true, p => { p.abilityIndex = 1; // Drizzle p.generateAndPopulateMoveset(); }), ) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.LUDICOLO])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.LUDICOLO])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.LATIAS, Species.LATIOS], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.LATIAS, SpeciesId.LATIOS], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Latios or Mega Latias p.generateAndPopulateMoveset(); p.generateName(); p.pokeball = PokeballType.MASTER_BALL; }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.SWAMPERT, Species.GASTRODON, Species.SEISMITOAD])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.SWAMPERT, SpeciesId.GASTRODON, SpeciesId.SEISMITOAD])) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.REGIELEKI, Species.REGIDRAGO], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.REGIELEKI, SpeciesId.REGIDRAGO], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.MILOTIC], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.MILOTIC], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.FEMALE; p.setBoss(true, 2); @@ -3910,11 +3962,11 @@ export const trainerConfigs: TrainerConfigs = { .initForChampion(false) .setBattleBgm("battle_sinnoh_champion") .setMixedBattleBgm("battle_sinnoh_champion") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SPIRITOMB])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.LUCARIO])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.SPIRITOMB])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.LUCARIO])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.GIRATINA], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.GIRATINA], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), @@ -3922,7 +3974,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc( 3, getRandomPartyMemberFunc( - [Species.MILOTIC, Species.ROSERADE, Species.HISUI_ARCANINE], + [SpeciesId.MILOTIC, SpeciesId.ROSERADE, SpeciesId.HISUI_ARCANINE], TrainerSlot.TRAINER, true, p => { @@ -3933,14 +3985,14 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.TOGEKISS], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.TOGEKISS], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.setBoss(true, 2); }), ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.GARCHOMP], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.GARCHOMP], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Garchomp p.generateAndPopulateMoveset(); p.generateName(); @@ -3955,11 +4007,11 @@ export const trainerConfigs: TrainerConfigs = { .setDoubleTitle("champion_double") .setBattleBgm("battle_champion_alder") .setMixedBattleBgm("battle_champion_alder") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.BOUFFALANT, Species.BRAVIARY])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.BOUFFALANT, SpeciesId.BRAVIARY])) .setPartyMemberFunc( 1, getRandomPartyMemberFunc( - [Species.HISUI_LILLIGANT, Species.HISUI_ZOROARK, Species.BASCULEGION], + [SpeciesId.HISUI_LILLIGANT, SpeciesId.HISUI_ZOROARK, SpeciesId.BASCULEGION], TrainerSlot.TRAINER, true, p => { @@ -3970,14 +4022,14 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.ZEKROM], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.ZEKROM], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.KELDEO], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.KELDEO], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), @@ -3985,18 +4037,18 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc( 4, getRandomPartyMemberFunc( - [Species.CHANDELURE, Species.KROOKODILE, Species.REUNICLUS, Species.CONKELDURR], + [SpeciesId.CHANDELURE, SpeciesId.KROOKODILE, SpeciesId.REUNICLUS, SpeciesId.CONKELDURR], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - p.teraType = p.species.speciesId === Species.KROOKODILE ? PokemonType.DARK : p.species.type1; + p.teraType = p.species.speciesId === SpeciesId.KROOKODILE ? PokemonType.DARK : p.species.type1; }, ), ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.VOLCARONA], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.VOLCARONA], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; p.setBoss(true, 2); @@ -4010,11 +4062,11 @@ export const trainerConfigs: TrainerConfigs = { .setHasDouble("iris_alder_double") .setDoubleTrainerType(TrainerType.ALDER) .setDoubleTitle("champion_double") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.DRUDDIGON])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.ARCHEOPS])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.DRUDDIGON])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.ARCHEOPS])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.RESHIRAM], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.RESHIRAM], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), @@ -4022,7 +4074,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc( 3, getRandomPartyMemberFunc( - [Species.SALAMENCE, Species.HYDREIGON, Species.ARCHALUDON], + [SpeciesId.SALAMENCE, SpeciesId.HYDREIGON, SpeciesId.ARCHALUDON], TrainerSlot.TRAINER, true, p => { @@ -4033,7 +4085,7 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.LAPRAS], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.LAPRAS], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // G-Max Lapras p.generateAndPopulateMoveset(); p.generateName(); @@ -4041,7 +4093,7 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.HAXORUS], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.HAXORUS], TrainerSlot.TRAINER, true, p => { p.abilityIndex = 1; // Mold Breaker p.generateAndPopulateMoveset(); p.gender = Gender.FEMALE; @@ -4054,21 +4106,21 @@ export const trainerConfigs: TrainerConfigs = { .setMixedBattleBgm("battle_kalos_champion") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.HAWLUCHA], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.HAWLUCHA], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); }), ) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.TREVENANT, Species.GOURGEIST])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.TREVENANT, SpeciesId.GOURGEIST])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.XERNEAS], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.XERNEAS], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.TYRANTRUM, Species.AURORUS], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.TYRANTRUM, SpeciesId.AURORUS], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.abilityIndex = 2; // Rock Head Tyrantrum, Snow Warning Aurorus p.teraType = p.species.type2!; @@ -4076,14 +4128,14 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.GOODRA], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.GOODRA], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.setBoss(true, 2); }), ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.GARDEVOIR], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.GARDEVOIR], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Gardevoir p.generateAndPopulateMoveset(); p.generateName(); @@ -4096,16 +4148,16 @@ export const trainerConfigs: TrainerConfigs = { .setMixedBattleBgm("battle_champion_kukui") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.LYCANROC], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.LYCANROC], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.formIndex = 2; // Dusk Lycanroc }), ) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.MAGNEZONE, Species.ALOLA_NINETALES])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.MAGNEZONE, SpeciesId.ALOLA_NINETALES])) .setPartyMemberFunc( 2, getRandomPartyMemberFunc( - [Species.TORNADUS, Species.THUNDURUS, Species.LANDORUS], + [SpeciesId.TORNADUS, SpeciesId.THUNDURUS, SpeciesId.LANDORUS], TrainerSlot.TRAINER, true, p => { @@ -4117,7 +4169,7 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.TAPU_KOKO, Species.TAPU_FINI], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.TAPU_KOKO, SpeciesId.TAPU_FINI], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.setBoss(true, 2); p.pokeball = PokeballType.ULTRA_BALL; @@ -4125,14 +4177,14 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.SNORLAX], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.SNORLAX], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.formIndex = 1; // G-Max Snorlax }), ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.INCINEROAR, Species.HISUI_DECIDUEYE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.INCINEROAR, SpeciesId.HISUI_DECIDUEYE], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; p.teraType = p.species.type2!; @@ -4142,18 +4194,18 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.HAU]: new TrainerConfig(++t) .initForChampion(true) .setMixedBattleBgm("battle_alola_champion") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ALOLA_RAICHU])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.NOIVERN])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.ALOLA_RAICHU])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.NOIVERN])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.SOLGALEO], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.SOLGALEO], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.TAPU_LELE, Species.TAPU_BULU], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.TAPU_LELE, SpeciesId.TAPU_BULU], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.teraType = p.species.type1; @@ -4161,7 +4213,7 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.ZYGARDE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.ZYGARDE], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Zygarde 10% forme, Aura Break p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ROGUE_BALL; @@ -4169,30 +4221,30 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.DECIDUEYE, Species.PRIMARINA], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.DECIDUEYE, SpeciesId.PRIMARINA], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.setBoss(true, 2); - p.gender = p.species.speciesId === Species.PRIMARINA ? Gender.FEMALE : Gender.MALE; + p.gender = p.species.speciesId === SpeciesId.PRIMARINA ? Gender.FEMALE : Gender.MALE; }), ) .setInstantTera(3), // Tera Psychic Tapu Lele / Grass Tapu Bulu [TrainerType.LEON]: new TrainerConfig(++t) .initForChampion(true) .setMixedBattleBgm("battle_galar_champion") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.AEGISLASH])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.RHYPERIOR, Species.SEISMITOAD, Species.MR_RIME])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.AEGISLASH])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.RHYPERIOR, SpeciesId.SEISMITOAD, SpeciesId.MR_RIME])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.ZACIAN], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.ZACIAN], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.DRAGAPULT])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.DRAGAPULT])) .setPartyMemberFunc( 4, getRandomPartyMemberFunc( - [Species.RILLABOOM, Species.CINDERACE, Species.INTELEON], + [SpeciesId.RILLABOOM, SpeciesId.CINDERACE, SpeciesId.INTELEON], TrainerSlot.TRAINER, true, p => { @@ -4203,7 +4255,7 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.CHARIZARD], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.CHARIZARD], TrainerSlot.TRAINER, true, p => { p.formIndex = 3; // G-Max Charizard p.generateAndPopulateMoveset(); p.generateName(); @@ -4216,21 +4268,21 @@ export const trainerConfigs: TrainerConfigs = { .setMixedBattleBgm("battle_mustard") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.CORVIKNIGHT], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.CORVIKNIGHT], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), ) .setPartyMemberFunc( 1, - getRandomPartyMemberFunc([Species.KOMMO_O], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.KOMMO_O], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), ) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.GALAR_SLOWBRO, Species.GALAR_SLOWKING], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.GALAR_SLOWBRO, SpeciesId.GALAR_SLOWKING], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.teraType = p.species.type1; @@ -4238,14 +4290,14 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.GALAR_DARMANITAN], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.GALAR_DARMANITAN], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), ) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.BLASTOISE, Species.VENUSAUR], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.BLASTOISE, SpeciesId.VENUSAUR], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.setBoss(true, 2); p.pokeball = PokeballType.ULTRA_BALL; @@ -4253,7 +4305,7 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.URSHIFU], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.URSHIFU], TrainerSlot.TRAINER, true, p => { p.formIndex = randSeedIntRange(2, 3); // Random G-Max Urshifu p.generateAndPopulateMoveset(); p.generateName(); @@ -4267,29 +4319,29 @@ export const trainerConfigs: TrainerConfigs = { .setMixedBattleBgm("battle_champion_geeta") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.GLIMMORA], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.GLIMMORA], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; p.setBoss(true, 2); }), ) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.ESPATHRA, Species.VELUZA])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.ESPATHRA, SpeciesId.VELUZA])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.MIRAIDON], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.MIRAIDON], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.BAXCALIBUR])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.BAXCALIBUR])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.CHESNAUGHT, SpeciesId.DELPHOX, SpeciesId.GRENINJA])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.KINGAMBIT], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.KINGAMBIT], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. - p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); + p.moveset[2] = new PokemonMove(MoveId.TERA_BLAST); } p.abilityIndex = 1; // Supreme Overlord p.teraType = PokemonType.FLYING; @@ -4301,23 +4353,23 @@ export const trainerConfigs: TrainerConfigs = { .setMixedBattleBgm("battle_champion_nemona") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.LYCANROC], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.LYCANROC], TrainerSlot.TRAINER, true, p => { p.formIndex = 0; // Midday form p.generateAndPopulateMoveset(); }), ) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PAWMOT])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.PAWMOT])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.KORAIDON], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.KORAIDON], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GHOLDENGO])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.GHOLDENGO])) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.ARMAROUGE, Species.CERULEDGE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.ARMAROUGE, SpeciesId.CERULEDGE], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.teraType = p.species.type2!; }), @@ -4325,7 +4377,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc( 5, getRandomPartyMemberFunc( - [Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], + [SpeciesId.MEOWSCARADA, SpeciesId.SKELEDIRGE, SpeciesId.QUAQUAVAL], TrainerSlot.TRAINER, true, p => { @@ -4339,43 +4391,43 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.KIERAN]: new TrainerConfig(++t) .initForChampion(true) .setMixedBattleBgm("battle_champion_kieran") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.POLIWRATH, Species.POLITOED])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.POLIWRATH, SpeciesId.POLITOED])) .setPartyMemberFunc( 1, - getRandomPartyMemberFunc([Species.INCINEROAR, Species.GRIMMSNARL], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.INCINEROAR, SpeciesId.GRIMMSNARL], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - p.abilityIndex = p.species.speciesId === Species.INCINEROAR ? 2 : 0; // Intimidate Incineroar, Prankster Grimmsnarl + p.abilityIndex = p.species.speciesId === SpeciesId.INCINEROAR ? 2 : 0; // Intimidate Incineroar, Prankster Grimmsnarl }), ) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.TERAPAGOS], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.TERAPAGOS], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; }), ) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.URSALUNA, Species.BLOODMOON_URSALUNA], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.URSALUNA, SpeciesId.BLOODMOON_URSALUNA], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), ) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.OGERPON], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.OGERPON], TrainerSlot.TRAINER, true, p => { p.formIndex = randSeedInt(4); // Random Ogerpon Tera Mask p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.IVY_CUDGEL)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.IVY_CUDGEL)) { // Check if Ivy Cudgel is in the moveset, if not, replace the first move with Ivy Cudgel. - p.moveset[0] = new PokemonMove(Moves.IVY_CUDGEL); + p.moveset[0] = new PokemonMove(MoveId.IVY_CUDGEL); } }), ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.HYDRAPPLE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.HYDRAPPLE], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; p.setBoss(true, 2); @@ -4401,33 +4453,33 @@ export const trainerConfigs: TrainerConfigs = { 0, getRandomPartyMemberFunc( [ - Species.BULBASAUR, - Species.CHARMANDER, - Species.SQUIRTLE, - Species.CHIKORITA, - Species.CYNDAQUIL, - Species.TOTODILE, - Species.TREECKO, - Species.TORCHIC, - Species.MUDKIP, - Species.TURTWIG, - Species.CHIMCHAR, - Species.PIPLUP, - Species.SNIVY, - Species.TEPIG, - Species.OSHAWOTT, - Species.CHESPIN, - Species.FENNEKIN, - Species.FROAKIE, - Species.ROWLET, - Species.LITTEN, - Species.POPPLIO, - Species.GROOKEY, - Species.SCORBUNNY, - Species.SOBBLE, - Species.SPRIGATITO, - Species.FUECOCO, - Species.QUAXLY, + SpeciesId.BULBASAUR, + SpeciesId.CHARMANDER, + SpeciesId.SQUIRTLE, + SpeciesId.CHIKORITA, + SpeciesId.CYNDAQUIL, + SpeciesId.TOTODILE, + SpeciesId.TREECKO, + SpeciesId.TORCHIC, + SpeciesId.MUDKIP, + SpeciesId.TURTWIG, + SpeciesId.CHIMCHAR, + SpeciesId.PIPLUP, + SpeciesId.SNIVY, + SpeciesId.TEPIG, + SpeciesId.OSHAWOTT, + SpeciesId.CHESPIN, + SpeciesId.FENNEKIN, + SpeciesId.FROAKIE, + SpeciesId.ROWLET, + SpeciesId.LITTEN, + SpeciesId.POPPLIO, + SpeciesId.GROOKEY, + SpeciesId.SCORBUNNY, + SpeciesId.SOBBLE, + SpeciesId.SPRIGATITO, + SpeciesId.FUECOCO, + SpeciesId.QUAXLY, ], TrainerSlot.TRAINER, true, @@ -4438,15 +4490,15 @@ export const trainerConfigs: TrainerConfigs = { 1, getRandomPartyMemberFunc( [ - Species.PIDGEY, - Species.HOOTHOOT, - Species.TAILLOW, - Species.STARLY, - Species.PIDOVE, - Species.FLETCHLING, - Species.PIKIPEK, - Species.ROOKIDEE, - Species.WATTREL, + SpeciesId.PIDGEY, + SpeciesId.HOOTHOOT, + SpeciesId.TAILLOW, + SpeciesId.STARLY, + SpeciesId.PIDOVE, + SpeciesId.FLETCHLING, + SpeciesId.PIKIPEK, + SpeciesId.ROOKIDEE, + SpeciesId.WATTREL, ], TrainerSlot.TRAINER, true, @@ -4468,33 +4520,33 @@ export const trainerConfigs: TrainerConfigs = { 0, getRandomPartyMemberFunc( [ - Species.IVYSAUR, - Species.CHARMELEON, - Species.WARTORTLE, - Species.BAYLEEF, - Species.QUILAVA, - Species.CROCONAW, - Species.GROVYLE, - Species.COMBUSKEN, - Species.MARSHTOMP, - Species.GROTLE, - Species.MONFERNO, - Species.PRINPLUP, - Species.SERVINE, - Species.PIGNITE, - Species.DEWOTT, - Species.QUILLADIN, - Species.BRAIXEN, - Species.FROGADIER, - Species.DARTRIX, - Species.TORRACAT, - Species.BRIONNE, - Species.THWACKEY, - Species.RABOOT, - Species.DRIZZILE, - Species.FLORAGATO, - Species.CROCALOR, - Species.QUAXWELL, + SpeciesId.IVYSAUR, + SpeciesId.CHARMELEON, + SpeciesId.WARTORTLE, + SpeciesId.BAYLEEF, + SpeciesId.QUILAVA, + SpeciesId.CROCONAW, + SpeciesId.GROVYLE, + SpeciesId.COMBUSKEN, + SpeciesId.MARSHTOMP, + SpeciesId.GROTLE, + SpeciesId.MONFERNO, + SpeciesId.PRINPLUP, + SpeciesId.SERVINE, + SpeciesId.PIGNITE, + SpeciesId.DEWOTT, + SpeciesId.QUILLADIN, + SpeciesId.BRAIXEN, + SpeciesId.FROGADIER, + SpeciesId.DARTRIX, + SpeciesId.TORRACAT, + SpeciesId.BRIONNE, + SpeciesId.THWACKEY, + SpeciesId.RABOOT, + SpeciesId.DRIZZILE, + SpeciesId.FLORAGATO, + SpeciesId.CROCALOR, + SpeciesId.QUAXWELL, ], TrainerSlot.TRAINER, true, @@ -4505,15 +4557,15 @@ export const trainerConfigs: TrainerConfigs = { 1, getRandomPartyMemberFunc( [ - Species.PIDGEOTTO, - Species.HOOTHOOT, - Species.TAILLOW, - Species.STARAVIA, - Species.TRANQUILL, - Species.FLETCHINDER, - Species.TRUMBEAK, - Species.CORVISQUIRE, - Species.WATTREL, + SpeciesId.PIDGEOTTO, + SpeciesId.HOOTHOOT, + SpeciesId.TAILLOW, + SpeciesId.STARAVIA, + SpeciesId.TRANQUILL, + SpeciesId.FLETCHINDER, + SpeciesId.TRUMBEAK, + SpeciesId.CORVISQUIRE, + SpeciesId.WATTREL, ], TrainerSlot.TRAINER, true, @@ -4543,33 +4595,33 @@ export const trainerConfigs: TrainerConfigs = { 0, getRandomPartyMemberFunc( [ - Species.VENUSAUR, - Species.CHARIZARD, - Species.BLASTOISE, - Species.MEGANIUM, - Species.TYPHLOSION, - Species.FERALIGATR, - Species.SCEPTILE, - Species.BLAZIKEN, - Species.SWAMPERT, - Species.TORTERRA, - Species.INFERNAPE, - Species.EMPOLEON, - Species.SERPERIOR, - Species.EMBOAR, - Species.SAMUROTT, - Species.CHESNAUGHT, - Species.DELPHOX, - Species.GRENINJA, - Species.DECIDUEYE, - Species.INCINEROAR, - Species.PRIMARINA, - Species.RILLABOOM, - Species.CINDERACE, - Species.INTELEON, - Species.MEOWSCARADA, - Species.SKELEDIRGE, - Species.QUAQUAVAL, + SpeciesId.VENUSAUR, + SpeciesId.CHARIZARD, + SpeciesId.BLASTOISE, + SpeciesId.MEGANIUM, + SpeciesId.TYPHLOSION, + SpeciesId.FERALIGATR, + SpeciesId.SCEPTILE, + SpeciesId.BLAZIKEN, + SpeciesId.SWAMPERT, + SpeciesId.TORTERRA, + SpeciesId.INFERNAPE, + SpeciesId.EMPOLEON, + SpeciesId.SERPERIOR, + SpeciesId.EMBOAR, + SpeciesId.SAMUROTT, + SpeciesId.CHESNAUGHT, + SpeciesId.DELPHOX, + SpeciesId.GRENINJA, + SpeciesId.DECIDUEYE, + SpeciesId.INCINEROAR, + SpeciesId.PRIMARINA, + SpeciesId.RILLABOOM, + SpeciesId.CINDERACE, + SpeciesId.INTELEON, + SpeciesId.MEOWSCARADA, + SpeciesId.SKELEDIRGE, + SpeciesId.QUAQUAVAL, ], TrainerSlot.TRAINER, true, @@ -4580,15 +4632,15 @@ export const trainerConfigs: TrainerConfigs = { 1, getRandomPartyMemberFunc( [ - Species.PIDGEOT, - Species.NOCTOWL, - Species.SWELLOW, - Species.STARAPTOR, - Species.UNFEZANT, - Species.TALONFLAME, - Species.TOUCANNON, - Species.CORVIKNIGHT, - Species.KILOWATTREL, + SpeciesId.PIDGEOT, + SpeciesId.NOCTOWL, + SpeciesId.SWELLOW, + SpeciesId.STARAPTOR, + SpeciesId.UNFEZANT, + SpeciesId.TALONFLAME, + SpeciesId.TOUCANNON, + SpeciesId.CORVIKNIGHT, + SpeciesId.KILOWATTREL, ], TrainerSlot.TRAINER, true, @@ -4621,33 +4673,33 @@ export const trainerConfigs: TrainerConfigs = { 0, getRandomPartyMemberFunc( [ - Species.VENUSAUR, - Species.CHARIZARD, - Species.BLASTOISE, - Species.MEGANIUM, - Species.TYPHLOSION, - Species.FERALIGATR, - Species.SCEPTILE, - Species.BLAZIKEN, - Species.SWAMPERT, - Species.TORTERRA, - Species.INFERNAPE, - Species.EMPOLEON, - Species.SERPERIOR, - Species.EMBOAR, - Species.SAMUROTT, - Species.CHESNAUGHT, - Species.DELPHOX, - Species.GRENINJA, - Species.DECIDUEYE, - Species.INCINEROAR, - Species.PRIMARINA, - Species.RILLABOOM, - Species.CINDERACE, - Species.INTELEON, - Species.MEOWSCARADA, - Species.SKELEDIRGE, - Species.QUAQUAVAL, + SpeciesId.VENUSAUR, + SpeciesId.CHARIZARD, + SpeciesId.BLASTOISE, + SpeciesId.MEGANIUM, + SpeciesId.TYPHLOSION, + SpeciesId.FERALIGATR, + SpeciesId.SCEPTILE, + SpeciesId.BLAZIKEN, + SpeciesId.SWAMPERT, + SpeciesId.TORTERRA, + SpeciesId.INFERNAPE, + SpeciesId.EMPOLEON, + SpeciesId.SERPERIOR, + SpeciesId.EMBOAR, + SpeciesId.SAMUROTT, + SpeciesId.CHESNAUGHT, + SpeciesId.DELPHOX, + SpeciesId.GRENINJA, + SpeciesId.DECIDUEYE, + SpeciesId.INCINEROAR, + SpeciesId.PRIMARINA, + SpeciesId.RILLABOOM, + SpeciesId.CINDERACE, + SpeciesId.INTELEON, + SpeciesId.MEOWSCARADA, + SpeciesId.SKELEDIRGE, + SpeciesId.QUAQUAVAL, ], TrainerSlot.TRAINER, true, @@ -4661,15 +4713,15 @@ export const trainerConfigs: TrainerConfigs = { 1, getRandomPartyMemberFunc( [ - Species.PIDGEOT, - Species.NOCTOWL, - Species.SWELLOW, - Species.STARAPTOR, - Species.UNFEZANT, - Species.TALONFLAME, - Species.TOUCANNON, - Species.CORVIKNIGHT, - Species.KILOWATTREL, + SpeciesId.PIDGEOT, + SpeciesId.NOCTOWL, + SpeciesId.SWELLOW, + SpeciesId.STARAPTOR, + SpeciesId.UNFEZANT, + SpeciesId.TALONFLAME, + SpeciesId.TOUCANNON, + SpeciesId.CORVIKNIGHT, + SpeciesId.KILOWATTREL, ], TrainerSlot.TRAINER, true, @@ -4702,33 +4754,33 @@ export const trainerConfigs: TrainerConfigs = { 0, getRandomPartyMemberFunc( [ - Species.VENUSAUR, - Species.CHARIZARD, - Species.BLASTOISE, - Species.MEGANIUM, - Species.TYPHLOSION, - Species.FERALIGATR, - Species.SCEPTILE, - Species.BLAZIKEN, - Species.SWAMPERT, - Species.TORTERRA, - Species.INFERNAPE, - Species.EMPOLEON, - Species.SERPERIOR, - Species.EMBOAR, - Species.SAMUROTT, - Species.CHESNAUGHT, - Species.DELPHOX, - Species.GRENINJA, - Species.DECIDUEYE, - Species.INCINEROAR, - Species.PRIMARINA, - Species.RILLABOOM, - Species.CINDERACE, - Species.INTELEON, - Species.MEOWSCARADA, - Species.SKELEDIRGE, - Species.QUAQUAVAL, + SpeciesId.VENUSAUR, + SpeciesId.CHARIZARD, + SpeciesId.BLASTOISE, + SpeciesId.MEGANIUM, + SpeciesId.TYPHLOSION, + SpeciesId.FERALIGATR, + SpeciesId.SCEPTILE, + SpeciesId.BLAZIKEN, + SpeciesId.SWAMPERT, + SpeciesId.TORTERRA, + SpeciesId.INFERNAPE, + SpeciesId.EMPOLEON, + SpeciesId.SERPERIOR, + SpeciesId.EMBOAR, + SpeciesId.SAMUROTT, + SpeciesId.CHESNAUGHT, + SpeciesId.DELPHOX, + SpeciesId.GRENINJA, + SpeciesId.DECIDUEYE, + SpeciesId.INCINEROAR, + SpeciesId.PRIMARINA, + SpeciesId.RILLABOOM, + SpeciesId.CINDERACE, + SpeciesId.INTELEON, + SpeciesId.MEOWSCARADA, + SpeciesId.SKELEDIRGE, + SpeciesId.QUAQUAVAL, ], TrainerSlot.TRAINER, true, @@ -4743,15 +4795,15 @@ export const trainerConfigs: TrainerConfigs = { 1, getRandomPartyMemberFunc( [ - Species.PIDGEOT, - Species.NOCTOWL, - Species.SWELLOW, - Species.STARAPTOR, - Species.UNFEZANT, - Species.TALONFLAME, - Species.TOUCANNON, - Species.CORVIKNIGHT, - Species.KILOWATTREL, + SpeciesId.PIDGEOT, + SpeciesId.NOCTOWL, + SpeciesId.SWELLOW, + SpeciesId.STARAPTOR, + SpeciesId.UNFEZANT, + SpeciesId.TALONFLAME, + SpeciesId.TOUCANNON, + SpeciesId.CORVIKNIGHT, + SpeciesId.KILOWATTREL, ], TrainerSlot.TRAINER, true, @@ -4769,7 +4821,7 @@ export const trainerConfigs: TrainerConfigs = { .setSpeciesFilter(species => species.baseTotal >= 540) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.RAYQUAZA], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.RAYQUAZA], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 3); p.pokeball = PokeballType.MASTER_BALL; p.shiny = timedEventManager.getClassicTrainerShinyChance() === 0; @@ -4793,33 +4845,33 @@ export const trainerConfigs: TrainerConfigs = { 0, getRandomPartyMemberFunc( [ - Species.VENUSAUR, - Species.CHARIZARD, - Species.BLASTOISE, - Species.MEGANIUM, - Species.TYPHLOSION, - Species.FERALIGATR, - Species.SCEPTILE, - Species.BLAZIKEN, - Species.SWAMPERT, - Species.TORTERRA, - Species.INFERNAPE, - Species.EMPOLEON, - Species.SERPERIOR, - Species.EMBOAR, - Species.SAMUROTT, - Species.CHESNAUGHT, - Species.DELPHOX, - Species.GRENINJA, - Species.DECIDUEYE, - Species.INCINEROAR, - Species.PRIMARINA, - Species.RILLABOOM, - Species.CINDERACE, - Species.INTELEON, - Species.MEOWSCARADA, - Species.SKELEDIRGE, - Species.QUAQUAVAL, + SpeciesId.VENUSAUR, + SpeciesId.CHARIZARD, + SpeciesId.BLASTOISE, + SpeciesId.MEGANIUM, + SpeciesId.TYPHLOSION, + SpeciesId.FERALIGATR, + SpeciesId.SCEPTILE, + SpeciesId.BLAZIKEN, + SpeciesId.SWAMPERT, + SpeciesId.TORTERRA, + SpeciesId.INFERNAPE, + SpeciesId.EMPOLEON, + SpeciesId.SERPERIOR, + SpeciesId.EMBOAR, + SpeciesId.SAMUROTT, + SpeciesId.CHESNAUGHT, + SpeciesId.DELPHOX, + SpeciesId.GRENINJA, + SpeciesId.DECIDUEYE, + SpeciesId.INCINEROAR, + SpeciesId.PRIMARINA, + SpeciesId.RILLABOOM, + SpeciesId.CINDERACE, + SpeciesId.INTELEON, + SpeciesId.MEOWSCARADA, + SpeciesId.SKELEDIRGE, + SpeciesId.QUAQUAVAL, ], TrainerSlot.TRAINER, true, @@ -4835,15 +4887,15 @@ export const trainerConfigs: TrainerConfigs = { 1, getRandomPartyMemberFunc( [ - Species.PIDGEOT, - Species.NOCTOWL, - Species.SWELLOW, - Species.STARAPTOR, - Species.UNFEZANT, - Species.TALONFLAME, - Species.TOUCANNON, - Species.CORVIKNIGHT, - Species.KILOWATTREL, + SpeciesId.PIDGEOT, + SpeciesId.NOCTOWL, + SpeciesId.SWELLOW, + SpeciesId.STARAPTOR, + SpeciesId.UNFEZANT, + SpeciesId.TALONFLAME, + SpeciesId.TOUCANNON, + SpeciesId.CORVIKNIGHT, + SpeciesId.KILOWATTREL, ], TrainerSlot.TRAINER, true, @@ -4865,7 +4917,7 @@ export const trainerConfigs: TrainerConfigs = { .setSpeciesFilter(species => species.baseTotal >= 540) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.RAYQUAZA], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.RAYQUAZA], TrainerSlot.TRAINER, true, p => { p.setBoss(); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; @@ -4884,17 +4936,17 @@ export const trainerConfigs: TrainerConfigs = { .setVictoryBgm("victory_team_plasma") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.PERSIAN], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.PERSIAN], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; }), ) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.DUGTRIO, Species.ALOLA_DUGTRIO])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.HONCHKROW])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.NIDOQUEEN, Species.NIDOKING])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.DUGTRIO, SpeciesId.ALOLA_DUGTRIO])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.HONCHKROW])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.NIDOQUEEN, SpeciesId.NIDOKING])) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.RHYPERIOR], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.RHYPERIOR], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.abilityIndex = 1; // Solid Rock @@ -4902,7 +4954,7 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.KANGASKHAN], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.KANGASKHAN], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; @@ -4917,7 +4969,7 @@ export const trainerConfigs: TrainerConfigs = { .setVictoryBgm("victory_team_plasma") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.TYRANITAR], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.TYRANITAR], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; @@ -4925,29 +4977,29 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 1, - getRandomPartyMemberFunc([Species.GASTRODON, Species.SEISMITOAD], TrainerSlot.TRAINER, true, p => { - if (p.species.speciesId === Species.GASTRODON) { + getRandomPartyMemberFunc([SpeciesId.GASTRODON, SpeciesId.SEISMITOAD], TrainerSlot.TRAINER, true, p => { + if (p.species.speciesId === SpeciesId.GASTRODON) { p.abilityIndex = 0; // Storm Drain - } else if (p.species.speciesId === Species.SEISMITOAD) { + } else if (p.species.speciesId === SpeciesId.SEISMITOAD) { p.abilityIndex = 2; // Water Absorb } }), ) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.GARCHOMP, Species.EXCADRILL], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.GARCHOMP, SpeciesId.EXCADRILL], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; - if (p.species.speciesId === Species.GARCHOMP) { + if (p.species.speciesId === SpeciesId.GARCHOMP) { p.abilityIndex = 2; // Rough Skin - } else if (p.species.speciesId === Species.EXCADRILL) { + } else if (p.species.speciesId === SpeciesId.EXCADRILL) { p.abilityIndex = 0; // Sand Rush } }), ) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.RHYPERIOR], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.RHYPERIOR], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.abilityIndex = 1; // Solid Rock @@ -4955,7 +5007,7 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.KANGASKHAN], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.KANGASKHAN], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; @@ -4965,7 +5017,7 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.MEWTWO], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.MEWTWO], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; @@ -4976,20 +5028,20 @@ export const trainerConfigs: TrainerConfigs = { .initForEvilTeamLeader("Magma Boss", []) .setMixedBattleBgm("battle_aqua_magma_boss") .setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SOLROCK])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.TALONFLAME])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.WEEZING, Species.GALAR_WEEZING])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.SOLROCK])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.TALONFLAME])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.WEEZING, SpeciesId.GALAR_WEEZING])) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.TORKOAL], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.TORKOAL], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.abilityIndex = 1; // Drought }), ) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.DONPHAN])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.DONPHAN])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.CAMERUPT], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.CAMERUPT], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; @@ -5005,7 +5057,7 @@ export const trainerConfigs: TrainerConfigs = { .setVictoryBgm("victory_team_plasma") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.TYPHLOSION, Species.SOLROCK], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.TYPHLOSION, SpeciesId.SOLROCK], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; @@ -5013,32 +5065,32 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 1, - getRandomPartyMemberFunc([Species.NINETALES, Species.TORKOAL], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.NINETALES, SpeciesId.TORKOAL], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - if (p.species.speciesId === Species.NINETALES) { + if (p.species.speciesId === SpeciesId.NINETALES) { p.abilityIndex = 2; // Drought - } else if (p.species.speciesId === Species.TORKOAL) { + } else if (p.species.speciesId === SpeciesId.TORKOAL) { p.abilityIndex = 1; // Drought } }), ) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.SCOVILLAIN], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.SCOVILLAIN], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.abilityIndex = 0; // Chlorophyll }), ) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.GREAT_TUSK], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.GREAT_TUSK], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ROGUE_BALL; }), ) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.CAMERUPT], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.CAMERUPT], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; @@ -5049,7 +5101,7 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.GROUDON], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.GROUDON], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; @@ -5060,26 +5112,26 @@ export const trainerConfigs: TrainerConfigs = { .initForEvilTeamLeader("Aqua Boss", []) .setMixedBattleBgm("battle_aqua_magma_boss") .setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.LUDICOLO])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.LUDICOLO])) .setPartyMemberFunc( 1, - getRandomPartyMemberFunc([Species.PELIPPER], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.PELIPPER], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.abilityIndex = 1; // Drizzle }), ) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.MUK, Species.ALOLA_MUK])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.WAILORD])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.MUK, SpeciesId.ALOLA_MUK])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.WAILORD])) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.QWILFISH], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.QWILFISH], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.abilityIndex = 1; // Swift Swim }), ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.SHARPEDO], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.SHARPEDO], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; @@ -5095,7 +5147,7 @@ export const trainerConfigs: TrainerConfigs = { .setVictoryBgm("victory_team_plasma") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.LUDICOLO, Species.EMPOLEON], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.LUDICOLO, SpeciesId.EMPOLEON], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; @@ -5103,26 +5155,26 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 1, - getRandomPartyMemberFunc([Species.POLITOED, Species.PELIPPER], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.POLITOED, SpeciesId.PELIPPER], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - if (p.species.speciesId === Species.POLITOED) { + if (p.species.speciesId === SpeciesId.POLITOED) { p.abilityIndex = 2; // Drizzle - } else if (p.species.speciesId === Species.PELIPPER) { + } else if (p.species.speciesId === SpeciesId.PELIPPER) { p.abilityIndex = 1; // Drizzle } }), ) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.DHELMISE])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.DHELMISE])) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.OVERQWIL], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.OVERQWIL], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.abilityIndex = 1; // Swift Swim }), ) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.SHARPEDO], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.SHARPEDO], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; @@ -5133,7 +5185,7 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.KYOGRE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.KYOGRE], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; @@ -5144,13 +5196,13 @@ export const trainerConfigs: TrainerConfigs = { .initForEvilTeamLeader("Galactic Boss", []) .setMixedBattleBgm("battle_galactic_boss") .setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.GYARADOS])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.HONCHKROW, Species.HISUI_BRAVIARY])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.MAGNEZONE])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.UXIE, Species.MESPRIT, Species.AZELF])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.GYARADOS])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.HONCHKROW, SpeciesId.HISUI_BRAVIARY])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.MAGNEZONE])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.UXIE, SpeciesId.MESPRIT, SpeciesId.AZELF])) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.HOUNDOOM], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.HOUNDOOM], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.formIndex = 1; // Mega Houndoom @@ -5159,7 +5211,7 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.WEAVILE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.WEAVILE], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; @@ -5173,22 +5225,22 @@ export const trainerConfigs: TrainerConfigs = { .setVictoryBgm("victory_team_plasma") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.CROBAT], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.CROBAT], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), ) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.MAGNEZONE])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.MAGNEZONE])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.UXIE, Species.MESPRIT, Species.AZELF], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.UXIE, SpeciesId.MESPRIT, SpeciesId.AZELF], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ROGUE_BALL; }), ) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.HOUNDOOM], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.HOUNDOOM], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.formIndex = 1; // Mega Houndoom @@ -5197,7 +5249,7 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.WEAVILE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.WEAVILE], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; @@ -5206,7 +5258,7 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.DIALGA, Species.PALKIA], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.DIALGA, SpeciesId.PALKIA], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; @@ -5217,14 +5269,14 @@ export const trainerConfigs: TrainerConfigs = { .initForEvilTeamLeader("Plasma Boss", []) .setMixedBattleBgm("battle_plasma_boss") .setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.COFAGRIGUS])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.SEISMITOAD])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.GALVANTULA, Species.EELEKTROSS])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.DRAPION, Species.TOXICROAK])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.KINGAMBIT])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.COFAGRIGUS])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.SEISMITOAD])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.GALVANTULA, SpeciesId.EELEKTROSS])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.DRAPION, SpeciesId.TOXICROAK])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.KINGAMBIT])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.HYDREIGON], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.HYDREIGON], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; @@ -5238,43 +5290,43 @@ export const trainerConfigs: TrainerConfigs = { .setVictoryBgm("victory_team_plasma") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.RUNERIGUS], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.RUNERIGUS], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); }), ) .setPartyMemberFunc( 1, - getRandomPartyMemberFunc([Species.JELLICENT, Species.BASCULEGION], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.JELLICENT, SpeciesId.BASCULEGION], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; p.formIndex = 0; }), ) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.KINGAMBIT])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.KINGAMBIT])) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.VOLCARONA, Species.IRON_MOTH], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.VOLCARONA, SpeciesId.IRON_MOTH], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ROGUE_BALL; }), ) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.HYDREIGON, Species.IRON_JUGULIS], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.HYDREIGON, SpeciesId.IRON_JUGULIS], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; - if (p.species.speciesId === Species.HYDREIGON) { + if (p.species.speciesId === SpeciesId.HYDREIGON) { p.gender = Gender.MALE; - } else if (p.species.speciesId === Species.IRON_JUGULIS) { + } else if (p.species.speciesId === SpeciesId.IRON_JUGULIS) { p.gender = Gender.GENDERLESS; } }), ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.KYUREM], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.KYUREM], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; @@ -5285,36 +5337,36 @@ export const trainerConfigs: TrainerConfigs = { .initForEvilTeamLeader("Flare Boss", []) .setMixedBattleBgm("battle_flare_boss") .setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.MIENSHAO])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.HONCHKROW, Species.TALONFLAME])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.MIENSHAO])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.HONCHKROW, SpeciesId.TALONFLAME])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.PYROAR], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.PYROAR], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; }), ) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.DRAGALGE, Species.CLAWITZER], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.DRAGALGE, SpeciesId.CLAWITZER], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - if (p.species.speciesId === Species.DRAGALGE) { + if (p.species.speciesId === SpeciesId.DRAGALGE) { p.abilityIndex = 2; // Adaptability - } else if (p.species.speciesId === Species.CLAWITZER) { + } else if (p.species.speciesId === SpeciesId.CLAWITZER) { p.abilityIndex = 0; // Mega Launcher } }), ) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.GALLADE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.GALLADE], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.abilityIndex = 1; // Sharpness }), ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.GYARADOS], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.GYARADOS], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; @@ -5330,7 +5382,7 @@ export const trainerConfigs: TrainerConfigs = { .setVictoryBgm("victory_team_plasma") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.PYROAR], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.PYROAR], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.gender = Gender.MALE; @@ -5338,26 +5390,26 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 1, - getRandomPartyMemberFunc([Species.DRAGALGE, Species.CLAWITZER], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.DRAGALGE, SpeciesId.CLAWITZER], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - if (p.species.speciesId === Species.DRAGALGE) { + if (p.species.speciesId === SpeciesId.DRAGALGE) { p.abilityIndex = 2; // Adaptability - } else if (p.species.speciesId === Species.CLAWITZER) { + } else if (p.species.speciesId === SpeciesId.CLAWITZER) { p.abilityIndex = 0; // Mega Launcher } }), ) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.AEGISLASH, Species.HISUI_GOODRA])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.AEGISLASH, SpeciesId.HISUI_GOODRA])) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.IRON_VALIANT], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.IRON_VALIANT], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ROGUE_BALL; }), ) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.GYARADOS], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.GYARADOS], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; @@ -5368,7 +5420,7 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.ZYGARDE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.ZYGARDE], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; @@ -5382,18 +5434,18 @@ export const trainerConfigs: TrainerConfigs = { .setVictoryBgm("victory_team_plasma") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.CLEFABLE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.CLEFABLE], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.gender = Gender.FEMALE; }), ) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.LILLIGANT, Species.HISUI_LILLIGANT])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.MILOTIC, Species.PRIMARINA])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GALAR_SLOWBRO, Species.GALAR_SLOWKING])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.BEWEAR])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.LILLIGANT, SpeciesId.HISUI_LILLIGANT])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.MILOTIC, SpeciesId.PRIMARINA])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.GALAR_SLOWBRO, SpeciesId.GALAR_SLOWKING])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.BEWEAR])) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.NIHILEGO], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.NIHILEGO], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ROGUE_BALL; @@ -5406,35 +5458,35 @@ export const trainerConfigs: TrainerConfigs = { .setVictoryBgm("victory_team_plasma") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.CLEFABLE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.CLEFABLE], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.gender = Gender.FEMALE; }), ) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.MILOTIC, Species.PRIMARINA])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.MILOTIC, SpeciesId.PRIMARINA])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.SILVALLY], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.SILVALLY], TrainerSlot.TRAINER, true, p => { p.formIndex = randSeedInt(18); // Random Silvally Form p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ROGUE_BALL; - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.MULTI_ATTACK)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.MULTI_ATTACK)) { // Check if Multi Attack is in the moveset, if not, replace the first move with Multi Attack. - p.moveset[0] = new PokemonMove(Moves.MULTI_ATTACK); + p.moveset[0] = new PokemonMove(MoveId.MULTI_ATTACK); } }), ) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.PHEROMOSA], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.PHEROMOSA], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ROGUE_BALL; }), ) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.NIHILEGO], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.NIHILEGO], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ROGUE_BALL; @@ -5442,7 +5494,7 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.NECROZMA], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.NECROZMA], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.formIndex = 2; // Dawn Wings p.generateAndPopulateMoveset(); @@ -5456,31 +5508,31 @@ export const trainerConfigs: TrainerConfigs = { .setVictoryBgm("victory_team_plasma") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.YANMEGA, Species.LOKIX], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.YANMEGA, SpeciesId.LOKIX], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - if (p.species.speciesId === Species.YANMEGA) { + if (p.species.speciesId === SpeciesId.YANMEGA) { p.abilityIndex = 1; // Tinted Lens - } else if (p.species.speciesId === Species.LOKIX) { + } else if (p.species.speciesId === SpeciesId.LOKIX) { p.abilityIndex = 2; // Tinted Lens } }), ) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.HERACROSS])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.HERACROSS])) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.SCIZOR, Species.KLEAVOR], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.SCIZOR, SpeciesId.KLEAVOR], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - if (p.species.speciesId === Species.SCIZOR) { + if (p.species.speciesId === SpeciesId.SCIZOR) { p.abilityIndex = 1; // Technician - } else if (p.species.speciesId === Species.KLEAVOR) { + } else if (p.species.speciesId === SpeciesId.KLEAVOR) { p.abilityIndex = 2; // Sharpness } }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GALVANTULA, Species.VIKAVOLT])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.GALVANTULA, SpeciesId.VIKAVOLT])) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.PINSIR], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.PINSIR], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.formIndex = 1; // Mega Pinsir p.pokeball = PokeballType.ULTRA_BALL; @@ -5489,7 +5541,7 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.GOLISOPOD], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.GOLISOPOD], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.gender = Gender.MALE; @@ -5502,7 +5554,7 @@ export const trainerConfigs: TrainerConfigs = { .setVictoryBgm("victory_team_plasma") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.GOLISOPOD], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.GOLISOPOD], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.abilityIndex = 2; // Anticipation @@ -5511,41 +5563,41 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 1, - getRandomPartyMemberFunc([Species.BUZZWOLE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.BUZZWOLE], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ROGUE_BALL; }), ) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.CRAWDAUNT, Species.HISUI_SAMUROTT], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.CRAWDAUNT, SpeciesId.HISUI_SAMUROTT], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.abilityIndex = 2; // Sharpness Hisuian Samurott, Adaptability Crawdaunt }), ) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.XURKITREE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.XURKITREE], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ROGUE_BALL; }), ) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.GENESECT], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.GENESECT], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.formIndex = randSeedInt(4, 1); // Shock, Burn, Chill, or Douse Drive - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TECHNO_BLAST)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.TECHNO_BLAST)) { // Check if Techno Blast is in the moveset, if not, replace the third move with Techno Blast. - p.moveset[2] = new PokemonMove(Moves.TECHNO_BLAST); + p.moveset[2] = new PokemonMove(MoveId.TECHNO_BLAST); } }), ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.PINSIR], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.PINSIR], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.formIndex = 1; // Mega Pinsir p.generateAndPopulateMoveset(); @@ -5560,42 +5612,42 @@ export const trainerConfigs: TrainerConfigs = { .setVictoryBgm("victory_team_plasma") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.ARCHALUDON], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.ARCHALUDON], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), ) .setPartyMemberFunc( 1, - getRandomPartyMemberFunc([Species.ESCAVALIER, Species.FERROTHORN], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.ESCAVALIER, SpeciesId.FERROTHORN], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), ) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.SIRFETCHD, Species.MR_RIME], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.SIRFETCHD, SpeciesId.MR_RIME], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), ) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.CORVIKNIGHT], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.CORVIKNIGHT], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), ) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.KLINKLANG, Species.PERRSERKER], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.KLINKLANG, SpeciesId.PERRSERKER], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.COPPERAJAH], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.COPPERAJAH], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.formIndex = 1; // G-Max Copperajah @@ -5611,7 +5663,7 @@ export const trainerConfigs: TrainerConfigs = { .setVictoryBgm("victory_team_plasma") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.ARCHALUDON], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.ARCHALUDON], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; @@ -5619,14 +5671,14 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 1, - getRandomPartyMemberFunc([Species.AEGISLASH, Species.GHOLDENGO], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.AEGISLASH, SpeciesId.GHOLDENGO], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), ) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.DRACOZOLT, Species.DRACOVISH], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.DRACOZOLT, SpeciesId.DRACOVISH], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.abilityIndex = 1; // Strong Jaw Dracovish, Hustle Dracozolt @@ -5634,7 +5686,7 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.MELMETAL], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.MELMETAL], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), @@ -5642,7 +5694,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc( 4, getRandomPartyMemberFunc( - [Species.GALAR_ARTICUNO, Species.GALAR_ZAPDOS, Species.GALAR_MOLTRES], + [SpeciesId.GALAR_ARTICUNO, SpeciesId.GALAR_ZAPDOS, SpeciesId.GALAR_MOLTRES], TrainerSlot.TRAINER, true, p => { @@ -5654,7 +5706,7 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.COPPERAJAH], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.COPPERAJAH], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.formIndex = 1; // G-Max Copperajah @@ -5668,13 +5720,13 @@ export const trainerConfigs: TrainerConfigs = { .initForEvilTeamLeader("Star Boss", []) .setMixedBattleBgm("battle_star_boss") .setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.JOLTEON, Species.LEAFEON])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.VAPOREON, Species.UMBREON])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.ESPEON, Species.GLACEON])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.FLAREON])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.JOLTEON, SpeciesId.LEAFEON])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.VAPOREON, SpeciesId.UMBREON])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.ESPEON, SpeciesId.GLACEON])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.FLAREON])) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.SYLVEON], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.SYLVEON], TrainerSlot.TRAINER, true, p => { p.abilityIndex = 2; // Pixilate p.generateAndPopulateMoveset(); p.gender = Gender.FEMALE; @@ -5682,7 +5734,7 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.EEVEE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.EEVEE], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.formIndex = 2; // G-Max Eevee @@ -5698,7 +5750,7 @@ export const trainerConfigs: TrainerConfigs = { .setVictoryBgm("victory_team_plasma") .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.SYLVEON], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.SYLVEON], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.abilityIndex = 2; // Pixilate p.generateAndPopulateMoveset(); @@ -5707,21 +5759,21 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 1, - getRandomPartyMemberFunc([Species.ROTOM], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.ROTOM], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.formIndex = randSeedInt(5, 1); // Heat, Wash, Frost, Fan, or Mow }), ) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.RAIKOU, Species.ENTEI, Species.SUICUNE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.RAIKOU, SpeciesId.ENTEI, SpeciesId.SUICUNE], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; }), ) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.REVAVROOM], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.REVAVROOM], TrainerSlot.TRAINER, true, p => { p.formIndex = randSeedInt(5, 1); // Random Starmobile form p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ROGUE_BALL; @@ -5729,7 +5781,7 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 4, - getRandomPartyMemberFunc([Species.ZAMAZENTA], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.ZAMAZENTA], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; @@ -5737,7 +5789,7 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.EEVEE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.EEVEE], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.formIndex = 2; @@ -5751,7 +5803,7 @@ export const trainerConfigs: TrainerConfigs = { .initForStatTrainer(true) .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.CLAYDOL], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.CLAYDOL], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 3); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; @@ -5759,10 +5811,10 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 1, - getRandomPartyMemberFunc([Species.VENUSAUR, Species.COALOSSAL], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.VENUSAUR, SpeciesId.COALOSSAL], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.GREAT_BALL; - if (p.species.speciesId === Species.VENUSAUR) { + if (p.species.speciesId === SpeciesId.VENUSAUR) { p.formIndex = 2; // Gmax p.abilityIndex = 2; // Venusaur gets Chlorophyll } else { @@ -5773,7 +5825,7 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.AGGRON], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.AGGRON], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.formIndex = 1; // Mega p.generateName(); @@ -5781,15 +5833,15 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 3, - getRandomPartyMemberFunc([Species.TORKOAL], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.TORKOAL], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.abilityIndex = 1; // Drought }), ) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.GREAT_TUSK], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.GREAT_TUSK], TrainerSlot.TRAINER, true)) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.HEATRAN], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.HEATRAN], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; @@ -5800,7 +5852,7 @@ export const trainerConfigs: TrainerConfigs = { .initForStatTrainer() .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.BLISSEY], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.BLISSEY], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 3); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; @@ -5808,7 +5860,7 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 1, - getRandomPartyMemberFunc([Species.SNORLAX, Species.LAPRAS], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.SNORLAX, SpeciesId.LAPRAS], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.GREAT_BALL; p.formIndex = 1; // Gmax @@ -5817,20 +5869,20 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.AUDINO], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.AUDINO], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.formIndex = 1; // Mega p.generateName(); }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GOODRA], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.IRON_HANDS], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.GOODRA], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.IRON_HANDS], TrainerSlot.TRAINER, true)) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.CRESSELIA, Species.ENAMORUS], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.CRESSELIA, SpeciesId.ENAMORUS], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); - if (p.species.speciesId === Species.ENAMORUS) { + if (p.species.speciesId === SpeciesId.ENAMORUS) { p.formIndex = 1; // Therian p.generateName(); } @@ -5842,7 +5894,7 @@ export const trainerConfigs: TrainerConfigs = { .initForStatTrainer() .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.ARCANINE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.ARCANINE], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 3); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; @@ -5850,7 +5902,7 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 1, - getRandomPartyMemberFunc([Species.CINDERACE, Species.INTELEON], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.CINDERACE, SpeciesId.INTELEON], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.GREAT_BALL; p.formIndex = 1; // Gmax @@ -5859,17 +5911,17 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 2, - getRandomPartyMemberFunc([Species.AERODACTYL], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.AERODACTYL], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.formIndex = 1; // Mega p.generateName(); }), ) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.DRAGAPULT], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.IRON_BUNDLE], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.DRAGAPULT], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.IRON_BUNDLE], TrainerSlot.TRAINER, true)) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.REGIELEKI], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.REGIELEKI], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; @@ -5880,7 +5932,7 @@ export const trainerConfigs: TrainerConfigs = { .initForStatTrainer() .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.ALAKAZAM], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.ALAKAZAM], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.formIndex = 1; @@ -5890,19 +5942,19 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 1, - getRandomPartyMemberFunc([Species.GENGAR, Species.HATTERENE], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.GENGAR, SpeciesId.HATTERENE], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.GREAT_BALL; - p.formIndex = p.species.speciesId === Species.GENGAR ? 2 : 1; // Gmax + p.formIndex = p.species.speciesId === SpeciesId.GENGAR ? 2 : 1; // Gmax p.generateName(); }), ) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.FLUTTER_MANE], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.HYDREIGON], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.MAGNEZONE], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.FLUTTER_MANE], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.HYDREIGON], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.MAGNEZONE], TrainerSlot.TRAINER, true)) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.LATIOS, Species.LATIAS], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.LATIOS, SpeciesId.LATIAS], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; @@ -5913,7 +5965,7 @@ export const trainerConfigs: TrainerConfigs = { .initForStatTrainer(true) .setPartyMemberFunc( 0, - getRandomPartyMemberFunc([Species.LUCARIO], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.LUCARIO], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.formIndex = 1; @@ -5923,22 +5975,22 @@ export const trainerConfigs: TrainerConfigs = { ) .setPartyMemberFunc( 1, - getRandomPartyMemberFunc([Species.RILLABOOM, Species.CENTISKORCH], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.RILLABOOM, SpeciesId.CENTISKORCH], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.GREAT_BALL; p.formIndex = 1; // Gmax p.generateName(); }), ) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.TYRANITAR], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.ROARING_MOON], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.URSALUNA], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.TYRANITAR], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.ROARING_MOON], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.URSALUNA], TrainerSlot.TRAINER, true)) .setPartyMemberFunc( 5, - getRandomPartyMemberFunc([Species.REGIGIGAS, Species.LANDORUS], TrainerSlot.TRAINER, true, p => { + getRandomPartyMemberFunc([SpeciesId.REGIGIGAS, SpeciesId.LANDORUS], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); - if (p.species.speciesId === Species.LANDORUS) { + if (p.species.speciesId === SpeciesId.LANDORUS) { p.formIndex = 1; // Therian p.generateName(); } diff --git a/src/data/trainers/typedefs.ts b/src/data/trainers/typedefs.ts index c6d286e961e..3df2ba3f5f8 100644 --- a/src/data/trainers/typedefs.ts +++ b/src/data/trainers/typedefs.ts @@ -1,7 +1,7 @@ import type { EnemyPokemon } from "#app/field/pokemon"; import type { PersistentModifier } from "#app/modifier/modifier"; import type { PartyMemberStrength } from "#enums/party-member-strength"; -import type { Species } from "#enums/species"; +import type { SpeciesId } from "#enums/species-id"; import type { TrainerConfig } from "./trainer-config"; import type { TrainerPartyTemplate } from "./TrainerPartyTemplate"; @@ -11,7 +11,7 @@ export type GenModifiersFunc = (party: EnemyPokemon[]) => PersistentModifier[]; export type GenAIFunc = (party: EnemyPokemon[]) => void; export interface TrainerTierPools { - [key: number]: Species[]; + [key: number]: SpeciesId[]; } export interface TrainerConfigs { [key: number]: TrainerConfig; diff --git a/src/data/weather.ts b/src/data/weather.ts index be9107798df..3bd2e38824d 100644 --- a/src/data/weather.ts +++ b/src/data/weather.ts @@ -1,4 +1,4 @@ -import { Biome } from "#enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { WeatherType } from "#enums/weather-type"; import { getPokemonNameWithAffix } from "../messages"; import type Pokemon from "../field/pokemon"; @@ -289,13 +289,13 @@ export function getRandomWeatherType(arena: Arena): WeatherType { let weatherPool: WeatherPoolEntry[] = []; const hasSun = arena.getTimeOfDay() < 2; switch (arena.biomeType) { - case Biome.GRASS: + case BiomeId.GRASS: weatherPool = [{ weatherType: WeatherType.NONE, weight: 7 }]; if (hasSun) { weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 3 }); } break; - case Biome.TALL_GRASS: + case BiomeId.TALL_GRASS: weatherPool = [ { weatherType: WeatherType.NONE, weight: 8 }, { weatherType: WeatherType.RAIN, weight: 5 }, @@ -304,26 +304,26 @@ export function getRandomWeatherType(arena: Arena): WeatherType { weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 8 }); } break; - case Biome.FOREST: + case BiomeId.FOREST: weatherPool = [ { weatherType: WeatherType.NONE, weight: 8 }, { weatherType: WeatherType.RAIN, weight: 5 }, ]; break; - case Biome.SEA: + case BiomeId.SEA: weatherPool = [ { weatherType: WeatherType.NONE, weight: 3 }, { weatherType: WeatherType.RAIN, weight: 12 }, ]; break; - case Biome.SWAMP: + case BiomeId.SWAMP: weatherPool = [ { weatherType: WeatherType.NONE, weight: 3 }, { weatherType: WeatherType.RAIN, weight: 4 }, { weatherType: WeatherType.FOG, weight: 1 }, ]; break; - case Biome.BEACH: + case BiomeId.BEACH: weatherPool = [ { weatherType: WeatherType.NONE, weight: 8 }, { weatherType: WeatherType.RAIN, weight: 3 }, @@ -332,17 +332,17 @@ export function getRandomWeatherType(arena: Arena): WeatherType { weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 5 }); } break; - case Biome.LAKE: + case BiomeId.LAKE: weatherPool = [ { weatherType: WeatherType.NONE, weight: 10 }, { weatherType: WeatherType.RAIN, weight: 5 }, { weatherType: WeatherType.FOG, weight: 1 }, ]; break; - case Biome.SEABED: + case BiomeId.SEABED: weatherPool = [{ weatherType: WeatherType.RAIN, weight: 1 }]; break; - case Biome.BADLANDS: + case BiomeId.BADLANDS: weatherPool = [ { weatherType: WeatherType.NONE, weight: 8 }, { weatherType: WeatherType.SANDSTORM, weight: 2 }, @@ -351,26 +351,26 @@ export function getRandomWeatherType(arena: Arena): WeatherType { weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 5 }); } break; - case Biome.DESERT: + case BiomeId.DESERT: weatherPool = [{ weatherType: WeatherType.SANDSTORM, weight: 2 }]; if (hasSun) { weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 2 }); } break; - case Biome.ICE_CAVE: + case BiomeId.ICE_CAVE: weatherPool = [ { weatherType: WeatherType.NONE, weight: 3 }, { weatherType: WeatherType.SNOW, weight: 4 }, { weatherType: WeatherType.HAIL, weight: 1 }, ]; break; - case Biome.MEADOW: + case BiomeId.MEADOW: weatherPool = [{ weatherType: WeatherType.NONE, weight: 2 }]; if (hasSun) { weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 2 }); } break; - case Biome.VOLCANO: + case BiomeId.VOLCANO: weatherPool = [ { weatherType: hasSun ? WeatherType.SUNNY : WeatherType.NONE, @@ -378,25 +378,25 @@ export function getRandomWeatherType(arena: Arena): WeatherType { }, ]; break; - case Biome.GRAVEYARD: + case BiomeId.GRAVEYARD: weatherPool = [ { weatherType: WeatherType.NONE, weight: 3 }, { weatherType: WeatherType.FOG, weight: 1 }, ]; break; - case Biome.JUNGLE: + case BiomeId.JUNGLE: weatherPool = [ { weatherType: WeatherType.NONE, weight: 8 }, { weatherType: WeatherType.RAIN, weight: 2 }, ]; break; - case Biome.SNOWY_FOREST: + case BiomeId.SNOWY_FOREST: weatherPool = [ { weatherType: WeatherType.SNOW, weight: 7 }, { weatherType: WeatherType.HAIL, weight: 1 }, ]; break; - case Biome.ISLAND: + case BiomeId.ISLAND: weatherPool = [ { weatherType: WeatherType.NONE, weight: 5 }, { weatherType: WeatherType.RAIN, weight: 1 }, @@ -407,7 +407,7 @@ export function getRandomWeatherType(arena: Arena): WeatherType { break; } - if (arena.biomeType === Biome.TOWN && timedEventManager.isEventActive()) { + if (arena.biomeType === BiomeId.TOWN && timedEventManager.isEventActive()) { timedEventManager.getWeather()?.map(w => weatherPool.push(w)); } diff --git a/src/enums/MoveFlags.ts b/src/enums/MoveFlags.ts index 0fc85fddec6..1155417da6d 100644 --- a/src/enums/MoveFlags.ts +++ b/src/enums/MoveFlags.ts @@ -4,11 +4,11 @@ export enum MoveFlags { IGNORE_PROTECT = 1 << 1, /** * Sound-based moves have the following effects: - * - Pokemon with the {@linkcode Abilities.SOUNDPROOF Soundproof Ability} are unaffected by other Pokemon's sound-based moves. - * - Pokemon affected by {@linkcode Moves.THROAT_CHOP Throat Chop} cannot use sound-based moves for two turns. - * - Sound-based moves used by a Pokemon with {@linkcode Abilities.LIQUID_VOICE Liquid Voice} become Water-type moves. - * - Sound-based moves used by a Pokemon with {@linkcode Abilities.PUNK_ROCK Punk Rock} are boosted by 30%. Pokemon with Punk Rock also take half damage from sound-based moves. - * - All sound-based moves (except Howl) can hit Pokemon behind an active {@linkcode Moves.SUBSTITUTE Substitute}. + * - Pokemon with the {@linkcode AbilityId.SOUNDPROOF Soundproof Ability} are unaffected by other Pokemon's sound-based moves. + * - Pokemon affected by {@linkcode MoveId.THROAT_CHOP Throat Chop} cannot use sound-based moves for two turns. + * - Sound-based moves used by a Pokemon with {@linkcode AbilityId.LIQUID_VOICE Liquid Voice} become Water-type moves. + * - Sound-based moves used by a Pokemon with {@linkcode AbilityId.PUNK_ROCK Punk Rock} are boosted by 30%. Pokemon with Punk Rock also take half damage from sound-based moves. + * - All sound-based moves (except Howl) can hit Pokemon behind an active {@linkcode MoveId.SUBSTITUTE Substitute}. * * cf https://bulbapedia.bulbagarden.net/wiki/Sound-based_move */ @@ -20,19 +20,19 @@ export enum MoveFlags { PUNCHING_MOVE = 1 << 7, SLICING_MOVE = 1 << 8, /** - * Indicates a move should be affected by {@linkcode Abilities.RECKLESS} + * Indicates a move should be affected by {@linkcode AbilityId.RECKLESS} * @see {@linkcode Move.recklessMove()} */ RECKLESS_MOVE = 1 << 9, - /** Indicates a move should be affected by {@linkcode Abilities.BULLETPROOF} */ + /** Indicates a move should be affected by {@linkcode AbilityId.BULLETPROOF} */ BALLBOMB_MOVE = 1 << 10, - /** Grass types and pokemon with {@linkcode Abilities.OVERCOAT} are immune to powder moves */ + /** Grass types and pokemon with {@linkcode AbilityId.OVERCOAT} are immune to powder moves */ POWDER_MOVE = 1 << 11, - /** Indicates a move should trigger {@linkcode Abilities.DANCER} */ + /** Indicates a move should trigger {@linkcode AbilityId.DANCER} */ DANCE_MOVE = 1 << 12, - /** Indicates a move should trigger {@linkcode Abilities.WIND_RIDER} */ + /** Indicates a move should trigger {@linkcode AbilityId.WIND_RIDER} */ WIND_MOVE = 1 << 13, - /** Indicates a move should trigger {@linkcode Abilities.TRIAGE} */ + /** Indicates a move should trigger {@linkcode AbilityId.TRIAGE} */ TRIAGE_MOVE = 1 << 14, IGNORE_ABILITIES = 1 << 15, /** Enables all hits of a multi-hit move to be accuracy checked individually */ @@ -41,6 +41,6 @@ export enum MoveFlags { IGNORE_SUBSTITUTE = 1 << 17, /** Indicates a move is able to be redirected to allies in a double battle if the attacker faints */ REDIRECT_COUNTER = 1 << 18, - /** Indicates a move is able to be reflected by {@linkcode Abilities.MAGIC_BOUNCE} and {@linkcode Moves.MAGIC_COAT} */ + /** Indicates a move is able to be reflected by {@linkcode AbilityId.MAGIC_BOUNCE} and {@linkcode MoveId.MAGIC_COAT} */ REFLECTABLE = 1 << 19 } diff --git a/src/enums/abilities.ts b/src/enums/ability-id.ts similarity index 99% rename from src/enums/abilities.ts rename to src/enums/ability-id.ts index 4bf1b4984a9..c9681fb1109 100644 --- a/src/enums/abilities.ts +++ b/src/enums/ability-id.ts @@ -1,4 +1,4 @@ -export enum Abilities { +export enum AbilityId { /**{@link https://bulbapedia.bulbagarden.net/wiki/None_(ability) | Source} */ NONE, /**{@link https://bulbapedia.bulbagarden.net/wiki/Stench_(ability) | Source} */ diff --git a/src/enums/biome.ts b/src/enums/biome-id.ts similarity index 95% rename from src/enums/biome.ts rename to src/enums/biome-id.ts index 7284528767d..08a0d742738 100644 --- a/src/enums/biome.ts +++ b/src/enums/biome-id.ts @@ -1,4 +1,4 @@ -export enum Biome { +export enum BiomeId { // TODO: Should -1 be part of the enum signature (for "unknown place") TOWN, PLAINS, diff --git a/src/enums/moves.ts b/src/enums/move-id.ts similarity index 99% rename from src/enums/moves.ts rename to src/enums/move-id.ts index ee685e85fbe..e9894d9138d 100644 --- a/src/enums/moves.ts +++ b/src/enums/move-id.ts @@ -1,4 +1,4 @@ -export enum Moves { +export enum MoveId { /**{@link https://bulbapedia.bulbagarden.net/wiki/None_(move) | Source} */ NONE, /**{@link https://bulbapedia.bulbagarden.net/wiki/Pound_(move) | Source} */ diff --git a/src/enums/species.ts b/src/enums/species-id.ts similarity index 99% rename from src/enums/species.ts rename to src/enums/species-id.ts index 3d410deec1a..4eaec4ad9b5 100644 --- a/src/enums/species.ts +++ b/src/enums/species-id.ts @@ -1,4 +1,4 @@ -export enum Species { +export enum SpeciesId { /**{@link https://bulbapedia.bulbagarden.net/wiki/Bulbasaur_(Pokémon) | Source} */ BULBASAUR = 1, /**{@link https://bulbapedia.bulbagarden.net/wiki/Ivysaur_(Pokémon) | Source} */ diff --git a/src/field/arena.ts b/src/field/arena.ts index f083180490b..2ec98c53afa 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -31,19 +31,19 @@ import type Pokemon from "#app/field/pokemon"; import Overrides from "#app/overrides"; import { TagAddedEvent, TagRemovedEvent, TerrainChangedEvent, WeatherChangedEvent } from "#app/events/arena"; import type { ArenaTagType } from "#enums/arena-tag-type"; -import { Biome } from "#enums/biome"; -import type { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { BiomeId } from "#enums/biome-id"; +import type { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { TimeOfDay } from "#enums/time-of-day"; import { TrainerType } from "#enums/trainer-type"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { SpeciesFormChangeRevertWeatherFormTrigger, SpeciesFormChangeWeatherTrigger } from "#app/data/pokemon-forms"; import { CommonAnimPhase } from "#app/phases/common-anim-phase"; import { WeatherType } from "#enums/weather-type"; import { FieldEffectModifier } from "#app/modifier/modifier"; export class Arena { - public biomeType: Biome; + public biomeType: BiomeId; public weather: Weather | null; public terrain: Terrain | null; public tags: ArenaTag[]; @@ -64,7 +64,7 @@ export class Arena { public readonly eventTarget: EventTarget = new EventTarget(); - constructor(biome: Biome, bgm: string, playerFaints = 0) { + constructor(biome: BiomeId, bgm: string, playerFaints = 0) { this.biomeType = biome; this.tags = []; this.bgm = bgm; @@ -116,7 +116,7 @@ export class Arena { const isBossSpecies = !!globalScene.getEncounterBossSegments(waveIndex, level) && !!this.pokemonPool[BiomePoolTier.BOSS].length && - (this.biomeType !== Biome.END || globalScene.gameMode.isClassic || globalScene.gameMode.isWaveFinal(waveIndex)); + (this.biomeType !== BiomeId.END || globalScene.gameMode.isClassic || globalScene.gameMode.isWaveFinal(waveIndex)); const randVal = isBossSpecies ? 64 : 512; // luck influences encounter rarity let luckModifier = 0; @@ -153,9 +153,9 @@ export class Arena { ret = globalScene.randomSpecies(waveIndex, level); } else { const entry = tierPool[randSeedInt(tierPool.length)]; - let species: Species; + let species: SpeciesId; if (typeof entry === "number") { - species = entry as Species; + species = entry as SpeciesId; } else { const levelThresholds = Object.keys(entry); for (let l = levelThresholds.length - 1; l >= 0; l--) { @@ -199,7 +199,7 @@ export class Arena { const newSpeciesId = ret.getWildSpeciesForLevel(level, true, isBoss ?? isBossSpecies, globalScene.gameMode); if (newSpeciesId !== ret.speciesId) { - console.log("Replaced", Species[ret.speciesId], "with", Species[newSpeciesId]); + console.log("Replaced", SpeciesId[ret.speciesId], "with", SpeciesId[newSpeciesId]); ret = getPokemonSpecies(newSpeciesId); } return ret; @@ -239,30 +239,30 @@ export class Arena { getSpeciesFormIndex(species: PokemonSpecies): number { switch (species.speciesId) { - case Species.BURMY: - case Species.WORMADAM: + case SpeciesId.BURMY: + case SpeciesId.WORMADAM: switch (this.biomeType) { - case Biome.BEACH: + case BiomeId.BEACH: return 1; - case Biome.SLUM: + case BiomeId.SLUM: return 2; } break; - case Species.ROTOM: + case SpeciesId.ROTOM: switch (this.biomeType) { - case Biome.VOLCANO: + case BiomeId.VOLCANO: return 1; - case Biome.SEA: + case BiomeId.SEA: return 2; - case Biome.ICE_CAVE: + case BiomeId.ICE_CAVE: return 3; - case Biome.MOUNTAIN: + case BiomeId.MOUNTAIN: return 4; - case Biome.TALL_GRASS: + case BiomeId.TALL_GRASS: return 5; } break; - case Species.LYCANROC: + case SpeciesId.LYCANROC: const timeOfDay = this.getTimeOfDay(); switch (timeOfDay) { case TimeOfDay.DAY: @@ -281,9 +281,9 @@ export class Arena { getBgTerrainColorRatioForBiome(): number { switch (this.biomeType) { - case Biome.SPACE: + case BiomeId.SPACE: return 1; - case Biome.END: + case BiomeId.END: return 0; } @@ -372,8 +372,8 @@ export class Arena { */ triggerWeatherBasedFormChanges(): void { globalScene.getField(true).forEach(p => { - const isCastformWithForecast = p.hasAbility(Abilities.FORECAST) && p.species.speciesId === Species.CASTFORM; - const isCherrimWithFlowerGift = p.hasAbility(Abilities.FLOWER_GIFT) && p.species.speciesId === Species.CHERRIM; + const isCastformWithForecast = p.hasAbility(AbilityId.FORECAST) && p.species.speciesId === SpeciesId.CASTFORM; + const isCherrimWithFlowerGift = p.hasAbility(AbilityId.FLOWER_GIFT) && p.species.speciesId === SpeciesId.CHERRIM; if (isCastformWithForecast || isCherrimWithFlowerGift) { globalScene.triggerPokemonFormChange(p, SpeciesFormChangeWeatherTrigger); @@ -387,9 +387,9 @@ export class Arena { triggerWeatherBasedFormChangesToNormal(): void { globalScene.getField(true).forEach(p => { const isCastformWithForecast = - p.hasAbility(Abilities.FORECAST, false, true) && p.species.speciesId === Species.CASTFORM; + p.hasAbility(AbilityId.FORECAST, false, true) && p.species.speciesId === SpeciesId.CASTFORM; const isCherrimWithFlowerGift = - p.hasAbility(Abilities.FLOWER_GIFT, false, true) && p.species.speciesId === Species.CHERRIM; + p.hasAbility(AbilityId.FLOWER_GIFT, false, true) && p.species.speciesId === SpeciesId.CHERRIM; if (isCastformWithForecast || isCherrimWithFlowerGift) { return globalScene.triggerPokemonFormChange(p, SpeciesFormChangeRevertWeatherFormTrigger); @@ -488,42 +488,42 @@ export class Arena { */ getTrainerChance(): number { switch (this.biomeType) { - case Biome.METROPOLIS: + case BiomeId.METROPOLIS: return 2; - case Biome.SLUM: - case Biome.BEACH: - case Biome.DOJO: - case Biome.CONSTRUCTION_SITE: + case BiomeId.SLUM: + case BiomeId.BEACH: + case BiomeId.DOJO: + case BiomeId.CONSTRUCTION_SITE: return 4; - case Biome.PLAINS: - case Biome.GRASS: - case Biome.LAKE: - case Biome.CAVE: + case BiomeId.PLAINS: + case BiomeId.GRASS: + case BiomeId.LAKE: + case BiomeId.CAVE: return 6; - case Biome.TALL_GRASS: - case Biome.FOREST: - case Biome.SEA: - case Biome.SWAMP: - case Biome.MOUNTAIN: - case Biome.BADLANDS: - case Biome.DESERT: - case Biome.MEADOW: - case Biome.POWER_PLANT: - case Biome.GRAVEYARD: - case Biome.FACTORY: - case Biome.SNOWY_FOREST: + case BiomeId.TALL_GRASS: + case BiomeId.FOREST: + case BiomeId.SEA: + case BiomeId.SWAMP: + case BiomeId.MOUNTAIN: + case BiomeId.BADLANDS: + case BiomeId.DESERT: + case BiomeId.MEADOW: + case BiomeId.POWER_PLANT: + case BiomeId.GRAVEYARD: + case BiomeId.FACTORY: + case BiomeId.SNOWY_FOREST: return 8; - case Biome.ICE_CAVE: - case Biome.VOLCANO: - case Biome.RUINS: - case Biome.WASTELAND: - case Biome.JUNGLE: - case Biome.FAIRY_CAVE: + case BiomeId.ICE_CAVE: + case BiomeId.VOLCANO: + case BiomeId.RUINS: + case BiomeId.WASTELAND: + case BiomeId.JUNGLE: + case BiomeId.FAIRY_CAVE: return 12; - case Biome.SEABED: - case Biome.ABYSS: - case Biome.SPACE: - case Biome.TEMPLE: + case BiomeId.SEABED: + case BiomeId.ABYSS: + case BiomeId.SPACE: + case BiomeId.TEMPLE: return 16; default: return 0; @@ -532,7 +532,7 @@ export class Arena { getTimeOfDay(): TimeOfDay { switch (this.biomeType) { - case Biome.ABYSS: + case BiomeId.ABYSS: return TimeOfDay.NIGHT; } @@ -555,16 +555,16 @@ export class Arena { isOutside(): boolean { switch (this.biomeType) { - case Biome.SEABED: - case Biome.CAVE: - case Biome.ICE_CAVE: - case Biome.POWER_PLANT: - case Biome.DOJO: - case Biome.FACTORY: - case Biome.ABYSS: - case Biome.FAIRY_CAVE: - case Biome.TEMPLE: - case Biome.LABORATORY: + case BiomeId.SEABED: + case BiomeId.CAVE: + case BiomeId.ICE_CAVE: + case BiomeId.POWER_PLANT: + case BiomeId.DOJO: + case BiomeId.FACTORY: + case BiomeId.ABYSS: + case BiomeId.FAIRY_CAVE: + case BiomeId.TEMPLE: + case BiomeId.LABORATORY: return false; default: return true; @@ -589,7 +589,7 @@ export class Arena { return this.overrideTint(); } switch (this.biomeType) { - case Biome.ABYSS: + case BiomeId.ABYSS: return [64, 64, 64]; default: return [128, 128, 128]; @@ -615,9 +615,9 @@ export class Arena { return this.overrideTint(); } switch (this.biomeType) { - case Biome.ABYSS: - case Biome.SPACE: - case Biome.END: + case BiomeId.ABYSS: + case BiomeId.SPACE: + case BiomeId.END: return this.getDayTint(); } @@ -674,7 +674,7 @@ export class Arena { * Adds a new tag to the arena * @param tagType {@linkcode ArenaTagType} the tag being added * @param turnCount How many turns the tag lasts - * @param sourceMove {@linkcode Moves} the move the tag came from, or `undefined` if not from a move + * @param sourceMove {@linkcode MoveId} the move the tag came from, or `undefined` if not from a move * @param sourceId The ID of the pokemon in play the tag came from (see {@linkcode BattleScene.getPokemonById}) * @param side {@linkcode ArenaTagSide} which side(s) the tag applies to * @param quiet If a message should be queued on screen to announce the tag being added @@ -684,7 +684,7 @@ export class Arena { addTag( tagType: ArenaTagType, turnCount: number, - sourceMove: Moves | undefined, + sourceMove: MoveId | undefined, sourceId: number, side: ArenaTagSide = ArenaTagSide.BOTH, quiet = false, @@ -835,78 +835,78 @@ export class Arena { /** The loop point of any given biome track, read as seconds and milliseconds. */ getBgmLoopPoint(): number { switch (this.biomeType) { - case Biome.TOWN: + case BiomeId.TOWN: return 7.288; - case Biome.PLAINS: + case BiomeId.PLAINS: return 17.485; - case Biome.GRASS: + case BiomeId.GRASS: return 1.995; - case Biome.TALL_GRASS: + case BiomeId.TALL_GRASS: return 9.608; - case Biome.METROPOLIS: + case BiomeId.METROPOLIS: return 141.47; - case Biome.FOREST: + case BiomeId.FOREST: return 0.341; - case Biome.SEA: + case BiomeId.SEA: return 0.024; - case Biome.SWAMP: + case BiomeId.SWAMP: return 4.461; - case Biome.BEACH: + case BiomeId.BEACH: return 3.462; - case Biome.LAKE: + case BiomeId.LAKE: return 7.215; - case Biome.SEABED: + case BiomeId.SEABED: return 2.6; - case Biome.MOUNTAIN: + case BiomeId.MOUNTAIN: return 4.018; - case Biome.BADLANDS: + case BiomeId.BADLANDS: return 17.79; - case Biome.CAVE: + case BiomeId.CAVE: return 14.24; - case Biome.DESERT: + case BiomeId.DESERT: return 1.143; - case Biome.ICE_CAVE: + case BiomeId.ICE_CAVE: return 0.0; - case Biome.MEADOW: + case BiomeId.MEADOW: return 3.891; - case Biome.POWER_PLANT: + case BiomeId.POWER_PLANT: return 9.447; - case Biome.VOLCANO: + case BiomeId.VOLCANO: return 17.637; - case Biome.GRAVEYARD: + case BiomeId.GRAVEYARD: return 13.711; - case Biome.DOJO: + case BiomeId.DOJO: return 6.205; - case Biome.FACTORY: + case BiomeId.FACTORY: return 4.985; - case Biome.RUINS: + case BiomeId.RUINS: return 0.0; - case Biome.WASTELAND: + case BiomeId.WASTELAND: return 6.336; - case Biome.ABYSS: + case BiomeId.ABYSS: return 5.13; - case Biome.SPACE: + case BiomeId.SPACE: return 20.036; - case Biome.CONSTRUCTION_SITE: + case BiomeId.CONSTRUCTION_SITE: return 1.222; - case Biome.JUNGLE: + case BiomeId.JUNGLE: return 0.0; - case Biome.FAIRY_CAVE: + case BiomeId.FAIRY_CAVE: return 4.542; - case Biome.TEMPLE: + case BiomeId.TEMPLE: return 2.547; - case Biome.ISLAND: + case BiomeId.ISLAND: return 2.751; - case Biome.LABORATORY: + case BiomeId.LABORATORY: return 114.862; - case Biome.SLUM: + case BiomeId.SLUM: return 0.0; - case Biome.SNOWY_FOREST: + case BiomeId.SNOWY_FOREST: return 3.047; - case Biome.END: + case BiomeId.END: return 17.153; default: - console.warn(`missing bgm loop-point for biome "${Biome[this.biomeType]}" (=${this.biomeType})`); + console.warn(`missing bgm loop-point for biome "${BiomeId[this.biomeType]}" (=${this.biomeType})`); return 0; } } @@ -916,37 +916,37 @@ export class Arena { } } -export function getBiomeKey(biome: Biome): string { - return Biome[biome].toLowerCase(); +export function getBiomeKey(biome: BiomeId): string { + return BiomeId[biome].toLowerCase(); } -export function getBiomeHasProps(biomeType: Biome): boolean { +export function getBiomeHasProps(biomeType: BiomeId): boolean { switch (biomeType) { - case Biome.METROPOLIS: - case Biome.BEACH: - case Biome.LAKE: - case Biome.SEABED: - case Biome.MOUNTAIN: - case Biome.BADLANDS: - case Biome.CAVE: - case Biome.DESERT: - case Biome.ICE_CAVE: - case Biome.MEADOW: - case Biome.POWER_PLANT: - case Biome.VOLCANO: - case Biome.GRAVEYARD: - case Biome.FACTORY: - case Biome.RUINS: - case Biome.WASTELAND: - case Biome.ABYSS: - case Biome.CONSTRUCTION_SITE: - case Biome.JUNGLE: - case Biome.FAIRY_CAVE: - case Biome.TEMPLE: - case Biome.SNOWY_FOREST: - case Biome.ISLAND: - case Biome.LABORATORY: - case Biome.END: + case BiomeId.METROPOLIS: + case BiomeId.BEACH: + case BiomeId.LAKE: + case BiomeId.SEABED: + case BiomeId.MOUNTAIN: + case BiomeId.BADLANDS: + case BiomeId.CAVE: + case BiomeId.DESERT: + case BiomeId.ICE_CAVE: + case BiomeId.MEADOW: + case BiomeId.POWER_PLANT: + case BiomeId.VOLCANO: + case BiomeId.GRAVEYARD: + case BiomeId.FACTORY: + case BiomeId.RUINS: + case BiomeId.WASTELAND: + case BiomeId.ABYSS: + case BiomeId.CONSTRUCTION_SITE: + case BiomeId.JUNGLE: + case BiomeId.FAIRY_CAVE: + case BiomeId.TEMPLE: + case BiomeId.SNOWY_FOREST: + case BiomeId.ISLAND: + case BiomeId.LABORATORY: + case BiomeId.END: return true; } @@ -955,7 +955,7 @@ export function getBiomeHasProps(biomeType: Biome): boolean { export class ArenaBase extends Phaser.GameObjects.Container { public player: boolean; - public biome: Biome; + public biome: BiomeId; public propValue: number; public base: Phaser.GameObjects.Sprite; public props: Phaser.GameObjects.Sprite[]; @@ -978,7 +978,7 @@ export class ArenaBase extends Phaser.GameObjects.Container { : []; } - setBiome(biome: Biome, propValue?: number): void { + setBiome(biome: BiomeId, propValue?: number): void { const hasProps = getBiomeHasProps(biome); const biomeKey = getBiomeKey(biome); const baseKey = `${biomeKey}_${this.player ? "a" : "b"}`; diff --git a/src/field/mystery-encounter-intro.ts b/src/field/mystery-encounter-intro.ts index b6212b6b031..f6702c690bd 100644 --- a/src/field/mystery-encounter-intro.ts +++ b/src/field/mystery-encounter-intro.ts @@ -1,13 +1,13 @@ import type { GameObjects } from "phaser"; import { globalScene } from "#app/global-scene"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; -import type { Species } from "#enums/species"; +import type { SpeciesId } from "#enums/species-id"; import { isNullOrUndefined } from "#app/utils/common"; import { getSpriteKeysFromSpecies } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import type { Variant } from "#app/sprites/variant"; import { doShinySparkleAnim } from "#app/field/anims"; -import PlayAnimationConfig = Phaser.Types.Animations.PlayAnimationConfig; import { loadPokemonVariantAssets } from "#app/sprites/pokemon-sprite"; +import PlayAnimationConfig = Phaser.Types.Animations.PlayAnimationConfig; type KnownFileRoot = | "arenas" @@ -39,7 +39,7 @@ export class MysteryEncounterSpriteConfig { /** Refer to [/public/images](../../public/images) directorty for all folder names */ fileRoot: (KnownFileRoot & string) | string; /** Optional replacement for `spriteKey`/`fileRoot`. Just know this defaults to male/genderless, form 0, no shiny */ - species?: Species; + species?: SpeciesId; /** Enable shadow. Defaults to `false` */ hasShadow?: boolean = false; /** Disable animation. Defaults to `false` */ diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 329ba06fd09..cd8563cfb30 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -220,14 +220,14 @@ import i18next from "i18next"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { applyChallenges, ChallengeType } from "#app/data/challenge"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattleSpec } from "#enums/battle-spec"; import { BattlerTagType } from "#enums/battler-tag-type"; import type { BerryType } from "#enums/berry-type"; -import { Biome } from "#enums/biome"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { BiomeId } from "#enums/biome-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { getPokemonNameWithAffix } from "#app/messages"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { FaintPhase } from "#app/phases/faint-phase"; @@ -333,8 +333,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { public status: Status | null; public friendship: number; public metLevel: number; - public metBiome: Biome | -1; - public metSpecies: Species; + public metBiome: BiomeId | -1; + public metSpecies: SpeciesId; public metWave: number; public luck: number; public pauseEvolutions: boolean; @@ -381,7 +381,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { public maskEnabled: boolean; public maskSprite: Phaser.GameObjects.Sprite | null; - public usedTMs: Moves[]; + public usedTMs: MoveId[]; private shinySparkle: Phaser.GameObjects.Sprite; @@ -1123,7 +1123,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** * Get this {@linkcode Pokemon}'s {@linkcode PokemonSpeciesForm}. - * @param ignoreOverride - Whether to ignore overridden species from {@linkcode Moves.TRANSFORM}, default `false`. + * @param ignoreOverride - Whether to ignore overridden species from {@linkcode MoveId.TRANSFORM}, default `false`. * This overrides `useIllusion` if `true`. * @param useIllusion - `true` to use the speciesForm of the illusion; default `false`. */ @@ -1571,7 +1571,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (this.status && this.status.effect === StatusEffect.PARALYSIS) { ret >>= 1; } - if (this.getTag(BattlerTagType.UNBURDEN) && this.hasAbility(Abilities.UNBURDEN)) { + if (this.getTag(BattlerTagType.UNBURDEN) && this.hasAbility(AbilityId.UNBURDEN)) { ret *= 2; } break; @@ -1601,7 +1601,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (s === Stat.HP) { statHolder.value = statHolder.value + this.level + 10; globalScene.applyModifier(PokemonIncrementingStatModifier, this.isPlayer(), this, s, statHolder); - if (this.hasAbility(Abilities.WONDER_GUARD, false, true)) { + if (this.hasAbility(AbilityId.WONDER_GUARD, false, true)) { statHolder.value = 1; } if (this.hp > statHolder.value || this.hp === undefined) { @@ -1817,21 +1817,21 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } /** - * Checks if the {@linkcode Pokemon} has a fusion with the specified {@linkcode Species}. - * @param species the pokemon {@linkcode Species} to check - * @returns `true` if the {@linkcode Pokemon} has a fusion with the specified {@linkcode Species}, `false` otherwise + * Checks if the {@linkcode Pokemon} has a fusion with the specified {@linkcode SpeciesId}. + * @param species the pokemon {@linkcode SpeciesId} to check + * @returns `true` if the {@linkcode Pokemon} has a fusion with the specified {@linkcode SpeciesId}, `false` otherwise */ - hasFusionSpecies(species: Species): boolean { + hasFusionSpecies(species: SpeciesId): boolean { return this.fusionSpecies?.speciesId === species; } /** - * Checks if the {@linkcode Pokemon} has is the specified {@linkcode Species} or is fused with it. - * @param species the pokemon {@linkcode Species} to check + * Checks if the {@linkcode Pokemon} has is the specified {@linkcode SpeciesId} or is fused with it. + * @param species the pokemon {@linkcode SpeciesId} to check * @param formKey If provided, requires the species to be in that form * @returns `true` if the pokemon is the species or is fused with it, `false` otherwise */ - hasSpecies(species: Species, formKey?: string): boolean { + hasSpecies(species: SpeciesId, formKey?: string): boolean { if (isNullOrUndefined(formKey)) { return this.species.speciesId === species || this.fusionSpecies?.speciesId === species; } @@ -1848,7 +1848,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const ret = !ignoreOverride && this.summonData.moveset ? this.summonData.moveset : this.moveset; // Overrides moveset based on arrays specified in overrides.ts - let overrideArray: Moves | Array = this.isPlayer() + let overrideArray: MoveId | Array = this.isPlayer() ? Overrides.MOVESET_OVERRIDE : Overrides.OPP_MOVESET_OVERRIDE; if (!Array.isArray(overrideArray)) { @@ -1858,7 +1858,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (!this.isPlayer()) { this.moveset = []; } - overrideArray.forEach((move: Moves, index: number) => { + overrideArray.forEach((move: MoveId, index: number) => { const ppUsed = this.moveset[index]?.ppUsed ?? 0; this.moveset[index] = new PokemonMove(move, Math.min(ppUsed, allMoves[move].pp)); }); @@ -1871,11 +1871,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * Checks which egg moves have been unlocked for the {@linkcode Pokemon} based * on the species it was met at or by the first {@linkcode Pokemon} in its evolution * line that can act as a starter and provides those egg moves. - * @returns an array of {@linkcode Moves}, the length of which is determined by how many + * @returns an array of {@linkcode MoveId}, the length of which is determined by how many * egg moves are unlocked for that species. */ - getUnlockedEggMoves(): Moves[] { - const moves: Moves[] = []; + getUnlockedEggMoves(): MoveId[] { + const moves: MoveId[] = []; const species = this.metSpecies in speciesEggMoves ? this.metSpecies : this.getSpeciesForm(true).getRootSpeciesId(true); if (species in speciesEggMoves) { @@ -1894,10 +1894,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * * Available egg moves are only included if the {@linkcode Pokemon} was * in the starting party of the run and if Fresh Start is not active. - * @returns an array of {@linkcode Moves}, the length of which is determined + * @returns an array of {@linkcode MoveId}, the length of which is determined * by how many learnable moves there are for the {@linkcode Pokemon}. */ - public getLearnableLevelMoves(): Moves[] { + public getLearnableLevelMoves(): MoveId[] { let levelMoves = this.getLevelMoves(1, true, false, true).map(lm => lm[1]); if (this.metBiome === -1 && !globalScene.gameMode.isFreshStartChallenge() && !globalScene.gameMode.isDaily) { levelMoves = this.getUnlockedEggMoves().concat(levelMoves); @@ -2071,7 +2071,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return allAbilities[this.customPokemonData.ability]; } let abilityId = this.getSpeciesForm(ignoreOverride).getAbility(this.abilityIndex); - if (abilityId === Abilities.NONE) { + if (abilityId === AbilityId.NONE) { abilityId = this.species.ability1; } return allAbilities[abilityId]; @@ -2165,9 +2165,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return false; } if ( - ((Overrides.PASSIVE_ABILITY_OVERRIDE !== Abilities.NONE || Overrides.HAS_PASSIVE_ABILITY_OVERRIDE) && + ((Overrides.PASSIVE_ABILITY_OVERRIDE !== AbilityId.NONE || Overrides.HAS_PASSIVE_ABILITY_OVERRIDE) && this.isPlayer()) || - ((Overrides.OPP_PASSIVE_ABILITY_OVERRIDE !== Abilities.NONE || Overrides.OPP_HAS_PASSIVE_ABILITY_OVERRIDE) && + ((Overrides.OPP_PASSIVE_ABILITY_OVERRIDE !== AbilityId.NONE || Overrides.OPP_HAS_PASSIVE_ABILITY_OVERRIDE) && !this.isPlayer()) ) { return true; @@ -2238,7 +2238,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param ignoreOverride Whether to ignore ability changing effects; default `false` * @returns `true` if the ability is present and active */ - public hasAbility(ability: Abilities, canApply = true, ignoreOverride = false): boolean { + public hasAbility(ability: AbilityId, canApply = true, ignoreOverride = false): boolean { if (this.getAbility(ignoreOverride).id === ability && (!canApply || this.canApplyAbility())) { return true; } @@ -2291,11 +2291,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @returns the pokemon's current tera {@linkcode PokemonType} */ getTeraType(): PokemonType { - if (this.hasSpecies(Species.TERAPAGOS)) { + if (this.hasSpecies(SpeciesId.TERAPAGOS)) { return PokemonType.STELLAR; } - if (this.hasSpecies(Species.OGERPON)) { - const ogerponForm = this.species.speciesId === Species.OGERPON ? this.formIndex : this.fusionFormIndex; + if (this.hasSpecies(SpeciesId.OGERPON)) { + const ogerponForm = this.species.speciesId === SpeciesId.OGERPON ? this.formIndex : this.fusionFormIndex; switch (ogerponForm) { case 0: case 4: @@ -2311,7 +2311,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return PokemonType.ROCK; } } - if (this.hasSpecies(Species.SHEDINJA)) { + if (this.hasSpecies(SpeciesId.SHEDINJA)) { return PokemonType.BUG; } return this.teraType; @@ -2321,7 +2321,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return ( !!this.getTag(GroundedTag) || (!this.isOfType(PokemonType.FLYING, true, true) && - !this.hasAbility(Abilities.LEVITATE) && + !this.hasAbility(AbilityId.LEVITATE) && !this.getTag(BattlerTagType.FLOATING) && !this.getTag(SemiInvulnerableTag)) ); @@ -2382,8 +2382,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // then bypass the check for ion deluge and electrify if ( this.isTerastallized && - (move.id === Moves.TERA_BLAST || - (move.id === Moves.TERA_STARSTORM && moveTypeHolder.value === PokemonType.STELLAR)) + (move.id === MoveId.TERA_BLAST || + (move.id === MoveId.TERA_STARSTORM && moveTypeHolder.value === PokemonType.STELLAR)) ) { return moveTypeHolder.value as PokemonType; } @@ -2780,7 +2780,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param ret the output array to be pushed into. */ private getUniqueMoves(levelMoves: LevelMoves, ret: LevelMoves): void { - const uniqueMoves: Moves[] = []; + const uniqueMoves: MoveId[] = []; for (const lm of levelMoves) { if (!uniqueMoves.find(m => m === lm[1])) { uniqueMoves.push(lm[1]); @@ -2794,12 +2794,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * * @returns list of egg moves */ - getEggMoves(): Moves[] | undefined { + getEggMoves(): MoveId[] | undefined { return speciesEggMoves[this.getSpeciesForm().getRootSpeciesId()]; } - setMove(moveIndex: number, moveId: Moves): void { - if (moveId === Moves.NONE) { + setMove(moveIndex: number, moveId: MoveId): void { + if (moveId === MoveId.NONE) { return; } const move = new PokemonMove(moveId); @@ -2822,7 +2822,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { */ trySetShiny(thresholdOverride?: number): boolean { // Shiny Pokemon should not spawn in the end biome in endless - if (globalScene.gameMode.isEndless && globalScene.arena.biomeType === Biome.END) { + if (globalScene.gameMode.isEndless && globalScene.arena.biomeType === BiomeId.END) { return false; } @@ -2987,7 +2987,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { !species.mythical && !species.isTrainerForbidden() && species.speciesId !== this.species.speciesId && - species.speciesId !== Species.DITTO + species.speciesId !== SpeciesId.DITTO ); }; @@ -3050,7 +3050,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** Generates a semi-random moveset for a Pokemon */ public generateAndPopulateMoveset(): void { this.moveset = []; - let movePool: [Moves, number][] = []; + let movePool: [MoveId, number][] = []; const allLevelMoves = this.getLevelMoves(1, true, true); if (!allLevelMoves) { console.warn("Error encountered trying to generate moveset for:", this.species.name); @@ -3079,7 +3079,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (this.hasTrainer()) { const tms = Object.keys(tmSpecies); for (const tm of tms) { - const moveId = Number.parseInt(tm) as Moves; + const moveId = Number.parseInt(tm) as MoveId; let compatible = false; for (const p of tmSpecies[tm]) { if (Array.isArray(p)) { @@ -3202,7 +3202,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (this.isBoss()) { weightMultiplier += 0.4; } - const baseWeights: [Moves, number][] = movePool.map(m => [m[0], Math.ceil(Math.pow(m[1], weightMultiplier) * 100)]); + const baseWeights: [MoveId, number][] = movePool.map(m => [ + m[0], + Math.ceil(Math.pow(m[1], weightMultiplier) * 100), + ]); // All Pokemon force a STAB move first const stabMovePool = baseWeights.filter( @@ -3656,7 +3659,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if ( source.isTerastallized && source.getTeraType() === PokemonType.STELLAR && - (!source.stellarTypesBoosted.includes(moveType) || source.hasSpecies(Species.TERAPAGOS)) + (!source.stellarTypesBoosted.includes(moveType) || source.hasSpecies(SpeciesId.TERAPAGOS)) ) { stabMultiplier.value += matchesSourceType ? 0.5 : 0.2; } @@ -3724,7 +3727,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (cancelled.value || isTypeImmune) { return { cancelled: cancelled.value, - result: move.id === Moves.SHEER_COLD ? HitResult.IMMUNE : HitResult.NO_EFFECT, + result: move.id === MoveId.SHEER_COLD ? HitResult.IMMUNE : HitResult.NO_EFFECT, damage: 0, }; } @@ -4131,7 +4134,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return !cancelled.value; } - addTag(tagType: BattlerTagType, turnCount = 0, sourceMove?: Moves, sourceId?: number): boolean { + addTag(tagType: BattlerTagType, turnCount = 0, sourceMove?: MoveId, sourceId?: number): boolean { const existingTag = this.getTag(tagType); if (existingTag) { existingTag.onOverlap(this); @@ -4281,7 +4284,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if ( !tag.isBatonPassable || (tag.tagType === BattlerTagType.TELEKINESIS && - this.species.speciesId === Species.GENGAR && + this.species.speciesId === SpeciesId.GENGAR && this.getFormKey() === "mega") ) { continue; @@ -4300,19 +4303,19 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** * Gets whether the given move is currently disabled for this Pokemon. * - * @param moveId - The {@linkcode Moves} ID of the move to check + * @param moveId - The {@linkcode MoveId} ID of the move to check * @returns `true` if the move is disabled for this Pokemon, otherwise `false` * * @see {@linkcode MoveRestrictionBattlerTag} */ - public isMoveRestricted(moveId: Moves, pokemon?: Pokemon): boolean { + public isMoveRestricted(moveId: MoveId, pokemon?: Pokemon): boolean { return this.getRestrictingTag(moveId, pokemon) !== null; } /** * Gets whether the given move is currently disabled for the user based on the player's target selection * - * @param moveId - The {@linkcode Moves} ID of the move to check + * @param moveId - The {@linkcode MoveId} ID of the move to check * @param user - The move user * @param target - The target of the move * @@ -4320,7 +4323,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * * @see {@linkcode MoveRestrictionBattlerTag} */ - isMoveTargetRestricted(moveId: Moves, user: Pokemon, target: Pokemon): boolean { + isMoveTargetRestricted(moveId: MoveId, user: Pokemon, target: Pokemon): boolean { for (const tag of this.findTags(t => t instanceof MoveRestrictionBattlerTag)) { if ((tag as MoveRestrictionBattlerTag).isMoveTargetRestricted(moveId, user, target)) { return (tag as MoveRestrictionBattlerTag) !== null; @@ -4332,12 +4335,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** * Gets the {@link MoveRestrictionBattlerTag} that is restricting a move, if it exists. * - * @param moveId - {@linkcode Moves} ID of the move to check + * @param moveId - {@linkcode MoveId} ID of the move to check * @param user - {@linkcode Pokemon} the move user, optional and used when the target is a factor in the move's restricted status * @param target - {@linkcode Pokemon} the target of the move, optional and used when the target is a factor in the move's restricted status * @returns The first tag on this Pokemon that restricts the move, or `null` if the move is not restricted. */ - getRestrictingTag(moveId: Moves, user?: Pokemon, target?: Pokemon): MoveRestrictionBattlerTag | null { + getRestrictingTag(moveId: MoveId, user?: Pokemon, target?: Pokemon): MoveRestrictionBattlerTag | null { for (const tag of this.findTags(t => t instanceof MoveRestrictionBattlerTag)) { if ((tag as MoveRestrictionBattlerTag).isMoveRestricted(moveId, user)) { return tag as MoveRestrictionBattlerTag; @@ -4899,7 +4902,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if ( this.hasAbilityWithAttr(CommanderAbAttr) && globalScene.currentBattle.double && - this.getAlly()?.species.speciesId === Species.DONDOZO + this.getAlly()?.species.speciesId === SpeciesId.DONDOZO ) { this.setVisible(false); } @@ -5509,7 +5512,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { export class PlayerPokemon extends Pokemon { protected battleInfo: PlayerBattleInfo; - public compatibleTms: Moves[]; + public compatibleTms: MoveId[]; constructor( species: PokemonSpecies, @@ -5580,7 +5583,7 @@ export class PlayerPokemon extends Pokemon { const tms = Object.keys(tmSpecies); for (const tm of tms) { - const moveId = Number.parseInt(tm) as Moves; + const moveId = Number.parseInt(tm) as MoveId; let compatible = false; for (const p of tmSpecies[tm]) { if (Array.isArray(p)) { @@ -5677,7 +5680,7 @@ export class PlayerPokemon extends Pokemon { } // Add to candy progress for this mon's starter species and its fused species (if it has one) starterData.forEach((sd: StarterDataEntry, i: number) => { - const speciesId = !i ? starterSpeciesId : (fusionStarterSpeciesId as Species); + const speciesId = !i ? starterSpeciesId : (fusionStarterSpeciesId as SpeciesId); sd.friendship = (sd.friendship || 0) + starterAmount.value; if (sd.friendship >= getStarterValueFriendshipCap(speciesStarterCosts[speciesId])) { globalScene.gameData.addStarterCandy(getPokemonSpecies(speciesId), 1); @@ -5812,7 +5815,7 @@ export class PlayerPokemon extends Pokemon { this.updateInfo(true).then(() => resolve()); }); }; - if (preEvolution.speciesId === Species.GIMMIGHOUL) { + if (preEvolution.speciesId === SpeciesId.GIMMIGHOUL) { const evotracker = this.getHeldItems().filter(m => m instanceof EvoTrackerModifier)[0] ?? null; if (evotracker) { globalScene.removeModifier(evotracker); @@ -5832,7 +5835,7 @@ export class PlayerPokemon extends Pokemon { const isFusion = evolution instanceof FusionSpeciesFormEvolution; const evoSpecies = !isFusion ? this.species : this.fusionSpecies; - if (evoSpecies?.speciesId === Species.NINCADA && evolution.speciesId === Species.NINJASK) { + if (evoSpecies?.speciesId === SpeciesId.NINCADA && evolution.speciesId === SpeciesId.NINJASK) { const newEvolution = pokemonEvolutions[evoSpecies.speciesId][1]; if (newEvolution.condition?.predicate(this)) { @@ -6108,7 +6111,7 @@ export class EnemyPokemon extends Pokemon { this.luck = (this.shiny ? this.variant + 1 : 0) + (this.fusionShiny ? this.fusionVariant + 1 : 0); - let prevolution: Species; + let prevolution: SpeciesId; let speciesId = species.speciesId; while ((prevolution = pokemonPrevolutions[speciesId])) { const evolution = pokemonEvolutions[prevolution].find( @@ -6164,30 +6167,30 @@ export class EnemyPokemon extends Pokemon { generateAndPopulateMoveset(formIndex?: number): void { switch (true) { - case this.species.speciesId === Species.SMEARGLE: + case this.species.speciesId === SpeciesId.SMEARGLE: this.moveset = [ - new PokemonMove(Moves.SKETCH), - new PokemonMove(Moves.SKETCH), - new PokemonMove(Moves.SKETCH), - new PokemonMove(Moves.SKETCH), + new PokemonMove(MoveId.SKETCH), + new PokemonMove(MoveId.SKETCH), + new PokemonMove(MoveId.SKETCH), + new PokemonMove(MoveId.SKETCH), ]; break; - case this.species.speciesId === Species.ETERNATUS: + case this.species.speciesId === SpeciesId.ETERNATUS: this.moveset = (formIndex !== undefined ? formIndex : this.formIndex) ? [ - new PokemonMove(Moves.DYNAMAX_CANNON), - new PokemonMove(Moves.CROSS_POISON), - new PokemonMove(Moves.FLAMETHROWER), - new PokemonMove(Moves.RECOVER, 0, -4), + new PokemonMove(MoveId.DYNAMAX_CANNON), + new PokemonMove(MoveId.CROSS_POISON), + new PokemonMove(MoveId.FLAMETHROWER), + new PokemonMove(MoveId.RECOVER, 0, -4), ] : [ - new PokemonMove(Moves.ETERNABEAM), - new PokemonMove(Moves.SLUDGE_BOMB), - new PokemonMove(Moves.FLAMETHROWER), - new PokemonMove(Moves.COSMIC_POWER), + new PokemonMove(MoveId.ETERNABEAM), + new PokemonMove(MoveId.SLUDGE_BOMB), + new PokemonMove(MoveId.FLAMETHROWER), + new PokemonMove(MoveId.COSMIC_POWER), ]; if (globalScene.gameMode.hasChallenge(Challenges.INVERSE_BATTLE)) { - this.moveset[2] = new PokemonMove(Moves.THUNDERBOLT); + this.moveset[2] = new PokemonMove(MoveId.THUNDERBOLT); } break; default: @@ -6273,7 +6276,7 @@ export class EnemyPokemon extends Pokemon { moveTargets.some(p => { const doesNotFail = move.applyConditions(this, p, move) || - [Moves.SUCKER_PUNCH, Moves.UPPER_HAND, Moves.THUNDERCLAP].includes(move.id); + [MoveId.SUCKER_PUNCH, MoveId.UPPER_HAND, MoveId.THUNDERCLAP].includes(move.id); return ( doesNotFail && p.getAttackDamage({ @@ -6332,7 +6335,7 @@ export class EnemyPokemon extends Pokemon { */ if ( (move.name.endsWith(" (N)") || !move.applyConditions(this, target, move)) && - ![Moves.SUCKER_PUNCH, Moves.UPPER_HAND, Moves.THUNDERCLAP].includes(move.id) + ![MoveId.SUCKER_PUNCH, MoveId.UPPER_HAND, MoveId.THUNDERCLAP].includes(move.id) ) { targetScore = -20; } else if (move instanceof AttackMove) { @@ -6417,17 +6420,17 @@ export class EnemyPokemon extends Pokemon { } return { - move: Moves.STRUGGLE, - targets: this.getNextTargets(Moves.STRUGGLE), + move: MoveId.STRUGGLE, + targets: this.getNextTargets(MoveId.STRUGGLE), }; } /** * Determines the Pokemon the given move would target if used by this Pokemon - * @param moveId {@linkcode Moves} The move to be used + * @param moveId {@linkcode MoveId} The move to be used * @returns The indexes of the Pokemon the given move would target */ - getNextTargets(moveId: Moves): BattlerIndex[] { + getNextTargets(moveId: MoveId): BattlerIndex[] { const moveTargets = getMoveTargets(this, moveId); const targets = globalScene.getField(true).filter(p => moveTargets.targets.indexOf(p.getBattlerIndex()) > -1); // If the move is multi-target, return all targets' indexes @@ -6702,7 +6705,6 @@ export class EnemyPokemon extends Pokemon { return ret; } - /** * Show or hide the type effectiveness multiplier window * Passing undefined will hide the window @@ -6735,7 +6737,7 @@ interface IllusionData { fusionVariant: Variant; }; /** The species of the illusion */ - species: Species; + species: SpeciesId; /** The formIndex of the illusion */ formIndex: number; /** The gender of the illusion */ @@ -6753,7 +6755,7 @@ interface IllusionData { } export interface TurnMove { - move: Moves; + move: MoveId; targets: BattlerIndex[]; result?: MoveResult; virtual?: boolean; @@ -6762,7 +6764,7 @@ export interface TurnMove { } export interface AttackMoveResult { - move: Moves; + move: MoveId; result: DamageResult; damage: number; critical: boolean; @@ -6785,8 +6787,8 @@ export class PokemonSummonData { // TODO: Move these into a separate class & add rage fist hit count public speciesForm: PokemonSpeciesForm | null = null; public fusionSpeciesForm: PokemonSpeciesForm | null = null; - public ability: Abilities | undefined; - public passiveAbility: Abilities | undefined; + public ability: AbilityId | undefined; + public passiveAbility: AbilityId | undefined; public gender: Gender | undefined; public fusionGender: Gender | undefined; public stats: number[] = [0, 0, 0, 0, 0, 0]; @@ -6800,7 +6802,7 @@ export class PokemonSummonData { public illusion: IllusionData | null = null; public illusionBroken = false; - /** Array containing all berries eaten in the last turn; used by {@linkcode Abilities.CUD_CHEW} */ + /** Array containing all berries eaten in the last turn; used by {@linkcode AbilityId.CUD_CHEW} */ public berriesEatenLast: BerryType[] = []; /** @@ -6849,7 +6851,7 @@ export class PokemonTempSummonData { * Reset on switch and new wave, but not stored in `SummonData` to avoid being written to the save file. * Used to evaluate "first turn only" conditions such as - * {@linkcode Moves.FAKE_OUT | Fake Out} and {@linkcode Moves.FIRST_IMPRESSION | First Impression}). + * {@linkcode MoveId.FAKE_OUT | Fake Out} and {@linkcode MoveId.FIRST_IMPRESSION | First Impression}). */ waveTurnCount = 1; } @@ -6859,11 +6861,11 @@ export class PokemonTempSummonData { * Resets at the start of a new battle (but not on switch). */ export class PokemonBattleData { - /** Counter tracking direct hits this Pokemon has received during this battle; used for {@linkcode Moves.RAGE_FIST} */ + /** Counter tracking direct hits this Pokemon has received during this battle; used for {@linkcode MoveId.RAGE_FIST} */ public hitCount = 0; - /** Whether this Pokemon has eaten a berry this battle; used for {@linkcode Moves.BELCH} */ + /** Whether this Pokemon has eaten a berry this battle; used for {@linkcode MoveId.BELCH} */ public hasEatenBerry = false; - /** Array containing all berries eaten and not yet recovered during this current battle; used by {@linkcode Abilities.HARVEST} */ + /** Array containing all berries eaten and not yet recovered during this current battle; used by {@linkcode AbilityId.HARVEST} */ public berriesEaten: BerryType[] = []; constructor(source?: PokemonBattleData | Partial) { @@ -6886,7 +6888,7 @@ export class PokemonWaveData { * A set of all the abilities this {@linkcode Pokemon} has used in this wave. * Used to track once per battle conditions, as well as (hopefully) by the updated AI for move effectiveness. */ - public abilitiesApplied: Set = new Set(); + public abilitiesApplied: Set = new Set(); /** Whether the pokemon's ability has been revealed or not */ public abilityRevealed = false; } @@ -6913,7 +6915,7 @@ export class PokemonTurnData { public statStagesIncreased = false; public statStagesDecreased = false; public moveEffectiveness: TypeDamageMultiplier | null = null; - public combiningPledge?: Moves; + public combiningPledge?: MoveId; public switchedInThisTurn = false; public failedRunAway = false; public joinedRound = false; @@ -6924,7 +6926,7 @@ export class PokemonTurnData { public extraTurns = 0; /** * All berries eaten by this pokemon in this turn. - * Saved into {@linkcode PokemonSummonData | SummonData} by {@linkcode Abilities.CUD_CHEW} on turn end. + * Saved into {@linkcode PokemonSummonData | SummonData} by {@linkcode AbilityId.CUD_CHEW} on turn end. * @see {@linkcode PokemonSummonData.berriesEatenLast} */ public berriesEaten: BerryType[] = []; @@ -6993,7 +6995,7 @@ export interface DamageCalculationResult { * @see {@linkcode getName} - returns name of {@linkcode Move}. **/ export class PokemonMove { - public moveId: Moves; + public moveId: MoveId; public ppUsed: number; public ppUp: number; public virtual: boolean; @@ -7004,7 +7006,7 @@ export class PokemonMove { */ public maxPpOverride?: number; - constructor(moveId: Moves, ppUsed = 0, ppUp = 0, virtual = false, maxPpOverride?: number) { + constructor(moveId: MoveId, ppUsed = 0, ppUp = 0, virtual = false, maxPpOverride?: number) { this.moveId = moveId; this.ppUsed = ppUsed; this.ppUp = ppUp; diff --git a/src/field/trainer.ts b/src/field/trainer.ts index 6b0a54b2103..244a23185da 100644 --- a/src/field/trainer.ts +++ b/src/field/trainer.ts @@ -17,7 +17,7 @@ import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; import { getIsInitialized, initI18n } from "#app/plugins/i18n"; import i18next from "i18next"; import { PartyMemberStrength } from "#enums/party-member-strength"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { TrainerType } from "#enums/trainer-type"; import { signatureSpecies } from "#app/data/balance/signature-species"; @@ -358,7 +358,7 @@ export default class Trainer extends Phaser.GameObjects.Container { } // Create an empty species pool (which will be set to one of the species pools based on the index) - let newSpeciesPool: Species[] = []; + let newSpeciesPool: SpeciesId[] = []; let useNewSpeciesPool = false; // If we are in a double battle of named trainers, we need to use alternate species pools (generate half the party from each trainer) @@ -399,9 +399,9 @@ export default class Trainer extends Phaser.GameObjects.Container { if (!(index % 2)) { // Since the only currently allowed double battle with named trainers is Tate & Liza, we need to make sure that Solrock is the first pokemon in the party for Tate and Lunatone for Liza if (index === 0 && TrainerType[this.config.trainerType] === TrainerType[TrainerType.TATE]) { - newSpeciesPool = [Species.SOLROCK]; + newSpeciesPool = [SpeciesId.SOLROCK]; } else if (index === 0 && TrainerType[this.config.trainerType] === TrainerType[TrainerType.LIZA]) { - newSpeciesPool = [Species.LUNATONE]; + newSpeciesPool = [SpeciesId.LUNATONE]; } else { newSpeciesPool = speciesPoolFiltered; } @@ -409,9 +409,9 @@ export default class Trainer extends Phaser.GameObjects.Container { // If the index is odd, use the species pool for the partner trainer (that way he only uses his own pokemon in battle) // Since the only currently allowed double battle with named trainers is Tate & Liza, we need to make sure that Solrock is the first pokemon in the party for Tate and Lunatone for Liza if (index === 1 && TrainerType[this.config.trainerTypeDouble] === TrainerType[TrainerType.TATE]) { - newSpeciesPool = [Species.SOLROCK]; + newSpeciesPool = [SpeciesId.SOLROCK]; } else if (index === 1 && TrainerType[this.config.trainerTypeDouble] === TrainerType[TrainerType.LIZA]) { - newSpeciesPool = [Species.LUNATONE]; + newSpeciesPool = [SpeciesId.LUNATONE]; } else { newSpeciesPool = speciesPoolPartnerFiltered; } @@ -542,10 +542,10 @@ export default class Trainer extends Phaser.GameObjects.Container { /** * Checks if the enemy trainer already has the Pokemon species in their party - * @param baseSpecies - The base {@linkcode Species} of the current Pokemon + * @param baseSpecies - The base {@linkcode SpeciesId} of the current Pokemon * @returns `true` if the species is already present in the party */ - checkDuplicateSpecies(baseSpecies: Species): boolean { + checkDuplicateSpecies(baseSpecies: SpeciesId): boolean { const staticSpecies = (signatureSpecies[TrainerType[this.config.trainerType]] ?? []).flat(1).map(s => { let root = s; while (pokemonPrevolutions.hasOwnProperty(root)) { diff --git a/src/game-mode.ts b/src/game-mode.ts index 97398d2b0a9..7ad8a6a83e9 100644 --- a/src/game-mode.ts +++ b/src/game-mode.ts @@ -8,8 +8,8 @@ import { allSpecies } from "./data/pokemon-species"; import type { Arena } from "./field/arena"; import Overrides from "#app/overrides"; import { isNullOrUndefined, randSeedInt, randSeedItem } from "#app/utils/common"; -import { Biome } from "#enums/biome"; -import { Species } from "#enums/species"; +import { BiomeId } from "#enums/biome-id"; +import { SpeciesId } from "#enums/species-id"; import { Challenges } from "./enums/challenges"; import { globalScene } from "#app/global-scene"; import { getDailyStartingBiome } from "./data/daily-run"; @@ -128,7 +128,7 @@ export class GameMode implements GameModeConfig { * - random biome for Daily mode * - Town */ - getStartingBiome(): Biome { + getStartingBiome(): BiomeId { if (!isNullOrUndefined(Overrides.STARTING_BIOME_OVERRIDE)) { return Overrides.STARTING_BIOME_OVERRIDE; } @@ -137,7 +137,7 @@ export class GameMode implements GameModeConfig { case GameModes.DAILY: return getDailyStartingBiome(); default: - return Biome.TOWN; + return BiomeId.TOWN; } } @@ -202,14 +202,14 @@ export class GameMode implements GameModeConfig { return false; } - isTrainerBoss(waveIndex: number, biomeType: Biome, offsetGym: boolean): boolean { + isTrainerBoss(waveIndex: number, biomeType: BiomeId, offsetGym: boolean): boolean { switch (this.modeId) { case GameModes.DAILY: return waveIndex > 10 && waveIndex < 50 && !(waveIndex % 10); default: return ( waveIndex % 30 === (offsetGym ? 0 : 20) && - (biomeType !== Biome.END || this.isClassic || this.isWaveFinal(waveIndex)) + (biomeType !== BiomeId.END || this.isClassic || this.isWaveFinal(waveIndex)) ); } } @@ -220,8 +220,8 @@ export class GameMode implements GameModeConfig { s => (s.subLegendary || s.legendary || s.mythical) && s.baseTotal >= 600 && - s.speciesId !== Species.ETERNATUS && - s.speciesId !== Species.ARCEUS, + s.speciesId !== SpeciesId.ETERNATUS && + s.speciesId !== SpeciesId.ARCEUS, ); return randSeedItem(allFinalBossSpecies); } diff --git a/src/loading-scene.ts b/src/loading-scene.ts index 914e6e961e2..67ca9a28bc5 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -18,7 +18,7 @@ import { initChallenges } from "#app/data/challenge"; import i18next from "i18next"; import { initStatsKeys } from "#app/ui/game-stats-ui-handler"; import { initVouchers } from "#app/system/voucher"; -import { Biome } from "#enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { initMysteryEncounters } from "#app/data/mystery-encounters/mystery-encounters"; import { timedEventManager } from "./global-event-manager"; @@ -177,8 +177,8 @@ export class LoadingScene extends SceneBase { this.loadImage("default_bg", "arenas"); // Load arena images - getEnumValues(Biome).map(bt => { - const btKey = Biome[bt].toLowerCase(); + getEnumValues(BiomeId).map(bt => { + const btKey = BiomeId[bt].toLowerCase(); const isBaseAnimated = btKey === "end"; const baseAKey = `${btKey}_a`; const baseBKey = `${btKey}_b`; diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 912e12f19dc..ccbc202407b 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -116,13 +116,13 @@ import { padInt, randSeedInt, } from "#app/utils/common"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; import { BerryType } from "#enums/berry-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { Nature } from "#enums/nature"; import { PokeballType } from "#enums/pokeball"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { SpeciesFormKey } from "#enums/species-form-key"; import type { PermanentStat, TempBattleStat } from "#enums/stat"; import { getStatKey, Stat, TEMP_BATTLE_STATS } from "#enums/stat"; @@ -430,7 +430,7 @@ export class TerastallizeModifierType extends PokemonModifierType { (pokemon: PlayerPokemon) => { if ( [pokemon.species.speciesId, pokemon.fusionSpecies?.speciesId].filter( - s => s === Species.TERAPAGOS || s === Species.OGERPON || s === Species.SHEDINJA, + s => s === SpeciesId.TERAPAGOS || s === SpeciesId.OGERPON || s === SpeciesId.SHEDINJA, ).length > 0 ) { return PartyUiHandler.NoEffectMessage; @@ -1165,9 +1165,9 @@ export class PokemonMultiHitModifierType extends PokemonHeldItemModifierType { } export class TmModifierType extends PokemonModifierType { - public moveId: Moves; + public moveId: MoveId; - constructor(moveId: Moves) { + constructor(moveId: MoveId) { super( "", `tm_${PokemonType[allMoves[moveId].type].toLowerCase()}`, @@ -1439,37 +1439,37 @@ class SpeciesStatBoosterModifierTypeGenerator extends ModifierTypeGenerator { LIGHT_BALL: { stats: [Stat.ATK, Stat.SPATK], multiplier: 2, - species: [Species.PIKACHU], + species: [SpeciesId.PIKACHU], rare: true, }, THICK_CLUB: { stats: [Stat.ATK], multiplier: 2, - species: [Species.CUBONE, Species.MAROWAK, Species.ALOLA_MAROWAK], + species: [SpeciesId.CUBONE, SpeciesId.MAROWAK, SpeciesId.ALOLA_MAROWAK], rare: true, }, METAL_POWDER: { stats: [Stat.DEF], multiplier: 2, - species: [Species.DITTO], + species: [SpeciesId.DITTO], rare: true, }, QUICK_POWDER: { stats: [Stat.SPD], multiplier: 2, - species: [Species.DITTO], + species: [SpeciesId.DITTO], rare: true, }, DEEP_SEA_SCALE: { stats: [Stat.SPDEF], multiplier: 2, - species: [Species.CLAMPERL], + species: [SpeciesId.CLAMPERL], rare: false, }, DEEP_SEA_TOOTH: { stats: [Stat.SPATK], multiplier: 2, - species: [Species.CLAMPERL], + species: [SpeciesId.CLAMPERL], rare: false, }, }; @@ -1498,7 +1498,7 @@ class SpeciesStatBoosterModifierTypeGenerator extends ModifierTypeGenerator { const speciesId = p.getSpeciesForm(true).speciesId; const fusionSpeciesId = p.isFusion() ? p.getFusionSpeciesForm(true).speciesId : null; // TODO: Use commented boolean when Fling is implemented - const hasFling = false; /* p.getMoveset(true).some(m => m.moveId === Moves.FLING) */ + const hasFling = false; /* p.getMoveset(true).some(m => m.moveId === MoveId.FLING) */ for (const i in values) { const checkedSpecies = values[i].species; @@ -1517,7 +1517,7 @@ class SpeciesStatBoosterModifierTypeGenerator extends ModifierTypeGenerator { if (checkedSpecies.includes(speciesId) || (!!fusionSpeciesId && checkedSpecies.includes(fusionSpeciesId))) { // Add weight if party member has a matching species or, if applicable, a matching fusion species weights[i]++; - } else if (checkedSpecies.includes(Species.PIKACHU) && hasFling) { + } else if (checkedSpecies.includes(SpeciesId.PIKACHU) && hasFling) { // Add weight to Light Ball if party member has Fling weights[i]++; } @@ -1553,8 +1553,8 @@ class SpeciesStatBoosterModifierTypeGenerator extends ModifierTypeGenerator { class TmModifierTypeGenerator extends ModifierTypeGenerator { constructor(tier: ModifierTier) { super((party: Pokemon[], pregenArgs?: any[]) => { - if (pregenArgs && pregenArgs.length === 1 && pregenArgs[0] in Moves) { - return new TmModifierType(pregenArgs[0] as Moves); + if (pregenArgs && pregenArgs.length === 1 && pregenArgs[0] in MoveId) { + return new TmModifierType(pregenArgs[0] as MoveId); } const partyMemberCompatibleTms = party.map(p => { const previousLevelMoves = p.getLearnableLevelMoves(); @@ -1588,7 +1588,9 @@ class EvolutionItemModifierTypeGenerator extends ModifierTypeGenerator { .filter( p => pokemonEvolutions.hasOwnProperty(p.species.speciesId) && - (!p.pauseEvolutions || p.species.speciesId === Species.SLOWPOKE || p.species.speciesId === Species.EEVEE), + (!p.pauseEvolutions || + p.species.speciesId === SpeciesId.SLOWPOKE || + p.species.speciesId === SpeciesId.EEVEE), ) .flatMap(p => { const evolutions = pokemonEvolutions[p.species.speciesId]; @@ -1606,8 +1608,8 @@ class EvolutionItemModifierTypeGenerator extends ModifierTypeGenerator { p.fusionSpecies && pokemonEvolutions.hasOwnProperty(p.fusionSpecies.speciesId) && (!p.pauseEvolutions || - p.fusionSpecies.speciesId === Species.SLOWPOKE || - p.fusionSpecies.speciesId === Species.EEVEE), + p.fusionSpecies.speciesId === SpeciesId.SLOWPOKE || + p.fusionSpecies.speciesId === SpeciesId.EEVEE), ) .flatMap(p => { const evolutions = pokemonEvolutions[p.fusionSpecies!.speciesId]; @@ -1671,7 +1673,7 @@ class FormChangeItemModifierTypeGenerator extends ModifierTypeGenerator { ), ); - if (p.species.speciesId === Species.NECROZMA) { + if (p.species.speciesId === SpeciesId.NECROZMA) { // technically we could use a simplified version and check for formChanges.length > 3, but in case any code changes later, this might break... let foundULTRA_Z = false, foundN_LUNA = false, @@ -1904,7 +1906,7 @@ export type GeneratorModifierOverride = { } | { name: keyof Pick; - type?: Moves; + type?: MoveId; } ); @@ -1932,7 +1934,7 @@ export const modifierTypes = { new PokemonHeldItemModifierType( "modifierType:ModifierType.EVOLUTION_TRACKER_GIMMIGHOUL", "relic_gold", - (type, args) => new EvoTrackerModifier(type, (args[0] as Pokemon).id, Species.GIMMIGHOUL, 10), + (type, args) => new EvoTrackerModifier(type, (args[0] as Pokemon).id, SpeciesId.GIMMIGHOUL, 10), ), MEGA_BRACELET: () => @@ -2046,7 +2048,9 @@ export const modifierTypes = { } const teraTypes: PokemonType[] = []; for (const p of party) { - if (!(p.hasSpecies(Species.TERAPAGOS) || p.hasSpecies(Species.OGERPON) || p.hasSpecies(Species.SHEDINJA))) { + if ( + !(p.hasSpecies(SpeciesId.TERAPAGOS) || p.hasSpecies(SpeciesId.OGERPON) || p.hasSpecies(SpeciesId.SHEDINJA)) + ) { teraTypes.push(p.teraType); } } @@ -2125,9 +2129,9 @@ export const modifierTypes = { "leek", (type, args) => new SpeciesCritBoosterModifier(type, (args[0] as Pokemon).id, 2, [ - Species.FARFETCHD, - Species.GALAR_FARFETCHD, - Species.SIRFETCHD, + SpeciesId.FARFETCHD, + SpeciesId.GALAR_FARFETCHD, + SpeciesId.SIRFETCHD, ]), ), @@ -2674,7 +2678,8 @@ const modifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.BASE_STAT_BOOSTER, 3), new WeightedModifierType(modifierTypes.TERA_SHARD, (party: Pokemon[]) => party.filter( - p => !(p.hasSpecies(Species.TERAPAGOS) || p.hasSpecies(Species.OGERPON) || p.hasSpecies(Species.SHEDINJA)), + p => + !(p.hasSpecies(SpeciesId.TERAPAGOS) || p.hasSpecies(SpeciesId.OGERPON) || p.hasSpecies(SpeciesId.SHEDINJA)), ).length > 0 ? 1 : 0, @@ -2744,7 +2749,7 @@ const modifierPool: ModifierPool = { new WeightedModifierType( modifierTypes.LEEK, (party: Pokemon[]) => { - const checkedSpecies = [Species.FARFETCHD, Species.GALAR_FARFETCHD, Species.SIRFETCHD]; + const checkedSpecies = [SpeciesId.FARFETCHD, SpeciesId.GALAR_FARFETCHD, SpeciesId.SIRFETCHD]; // If a party member doesn't already have a Leek and is one of the relevant species, Leek can appear return party.some( p => @@ -2771,25 +2776,25 @@ const modifierPool: ModifierPool = { const canSetStatus = p.canSetStatus(StatusEffect.TOXIC, true, true, null, true); // Moves that take advantage of obtaining the actual status effect - const hasStatusMoves = [Moves.FACADE, Moves.PSYCHO_SHIFT].some(m => moveset.includes(m)); + const hasStatusMoves = [MoveId.FACADE, MoveId.PSYCHO_SHIFT].some(m => moveset.includes(m)); // Moves that take advantage of being able to give the target a status orb // TODO: Take moves (Trick, Fling, Switcheroo) from comment when they are implemented const hasItemMoves = [ - /* Moves.TRICK, Moves.FLING, Moves.SWITCHEROO */ + /* MoveId.TRICK, MoveId.FLING, MoveId.SWITCHEROO */ ].some(m => moveset.includes(m)); if (canSetStatus) { // Abilities that take advantage of obtaining the actual status effect, separated based on specificity to the orb const hasGeneralAbility = [ - Abilities.QUICK_FEET, - Abilities.GUTS, - Abilities.MARVEL_SCALE, - Abilities.MAGIC_GUARD, + AbilityId.QUICK_FEET, + AbilityId.GUTS, + AbilityId.MARVEL_SCALE, + AbilityId.MAGIC_GUARD, ].some(a => p.hasAbility(a, false, true)); - const hasSpecificAbility = [Abilities.TOXIC_BOOST, Abilities.POISON_HEAL].some(a => + const hasSpecificAbility = [AbilityId.TOXIC_BOOST, AbilityId.POISON_HEAL].some(a => p.hasAbility(a, false, true), ); - const hasOppositeAbility = [Abilities.FLARE_BOOST].some(a => p.hasAbility(a, false, true)); + const hasOppositeAbility = [AbilityId.FLARE_BOOST].some(a => p.hasAbility(a, false, true)); return hasSpecificAbility || (hasGeneralAbility && !hasOppositeAbility) || hasStatusMoves; } @@ -2817,23 +2822,23 @@ const modifierPool: ModifierPool = { const canSetStatus = p.canSetStatus(StatusEffect.BURN, true, true, null, true); // Moves that take advantage of obtaining the actual status effect - const hasStatusMoves = [Moves.FACADE, Moves.PSYCHO_SHIFT].some(m => moveset.includes(m)); + const hasStatusMoves = [MoveId.FACADE, MoveId.PSYCHO_SHIFT].some(m => moveset.includes(m)); // Moves that take advantage of being able to give the target a status orb // TODO: Take moves (Trick, Fling, Switcheroo) from comment when they are implemented const hasItemMoves = [ - /* Moves.TRICK, Moves.FLING, Moves.SWITCHEROO */ + /* MoveId.TRICK, MoveId.FLING, MoveId.SWITCHEROO */ ].some(m => moveset.includes(m)); if (canSetStatus) { // Abilities that take advantage of obtaining the actual status effect, separated based on specificity to the orb const hasGeneralAbility = [ - Abilities.QUICK_FEET, - Abilities.GUTS, - Abilities.MARVEL_SCALE, - Abilities.MAGIC_GUARD, + AbilityId.QUICK_FEET, + AbilityId.GUTS, + AbilityId.MARVEL_SCALE, + AbilityId.MAGIC_GUARD, ].some(a => p.hasAbility(a, false, true)); - const hasSpecificAbility = [Abilities.FLARE_BOOST].some(a => p.hasAbility(a, false, true)); - const hasOppositeAbility = [Abilities.TOXIC_BOOST, Abilities.POISON_HEAL].some(a => + const hasSpecificAbility = [AbilityId.FLARE_BOOST].some(a => p.hasAbility(a, false, true)); + const hasOppositeAbility = [AbilityId.TOXIC_BOOST, AbilityId.POISON_HEAL].some(a => p.hasAbility(a, false, true), ); @@ -2865,31 +2870,31 @@ const modifierPool: ModifierPool = { const moveset = p.getMoveset(true).map(m => m.moveId); const hasAbility = [ - Abilities.DROUGHT, - Abilities.ORICHALCUM_PULSE, - Abilities.DRIZZLE, - Abilities.SAND_STREAM, - Abilities.SAND_SPIT, - Abilities.SNOW_WARNING, - Abilities.ELECTRIC_SURGE, - Abilities.HADRON_ENGINE, - Abilities.PSYCHIC_SURGE, - Abilities.GRASSY_SURGE, - Abilities.SEED_SOWER, - Abilities.MISTY_SURGE, + AbilityId.DROUGHT, + AbilityId.ORICHALCUM_PULSE, + AbilityId.DRIZZLE, + AbilityId.SAND_STREAM, + AbilityId.SAND_SPIT, + AbilityId.SNOW_WARNING, + AbilityId.ELECTRIC_SURGE, + AbilityId.HADRON_ENGINE, + AbilityId.PSYCHIC_SURGE, + AbilityId.GRASSY_SURGE, + AbilityId.SEED_SOWER, + AbilityId.MISTY_SURGE, ].some(a => p.hasAbility(a, false, true)); const hasMoves = [ - Moves.SUNNY_DAY, - Moves.RAIN_DANCE, - Moves.SANDSTORM, - Moves.SNOWSCAPE, - Moves.HAIL, - Moves.CHILLY_RECEPTION, - Moves.ELECTRIC_TERRAIN, - Moves.PSYCHIC_TERRAIN, - Moves.GRASSY_TERRAIN, - Moves.MISTY_TERRAIN, + MoveId.SUNNY_DAY, + MoveId.RAIN_DANCE, + MoveId.SANDSTORM, + MoveId.SNOWSCAPE, + MoveId.HAIL, + MoveId.CHILLY_RECEPTION, + MoveId.ELECTRIC_TERRAIN, + MoveId.PSYCHIC_TERRAIN, + MoveId.GRASSY_TERRAIN, + MoveId.MISTY_TERRAIN, ].some(m => moveset.includes(m)); return hasAbility || hasMoves; diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 42e0155bdd8..11631b64451 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -18,10 +18,10 @@ import { addTextObject, TextStyle } from "#app/ui/text"; import { BooleanHolder, hslToHex, isNullOrUndefined, NumberHolder, toDmgValue } from "#app/utils/common"; import { BattlerTagType } from "#enums/battler-tag-type"; import { BerryType } from "#enums/berry-type"; -import type { Moves } from "#enums/moves"; +import type { MoveId } from "#enums/move-id"; import type { Nature } from "#enums/nature"; import type { PokeballType } from "#enums/pokeball"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { type PermanentStat, type TempBattleStat, BATTLE_STATS, Stat, TEMP_BATTLE_STATS } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; import type { PokemonType } from "#enums/pokemon-type"; @@ -873,11 +873,11 @@ export class BaseStatModifier extends PokemonHeldItemModifier { } export class EvoTrackerModifier extends PokemonHeldItemModifier { - protected species: Species; + protected species: SpeciesId; protected required: number; public isTransferable = false; - constructor(type: ModifierType, pokemonId: number, species: Species, required: number, stackCount?: number) { + constructor(type: ModifierType, pokemonId: number, species: SpeciesId, required: number, stackCount?: number) { super(type, pokemonId, stackCount); this.species = species; this.required = required; @@ -1268,20 +1268,20 @@ export class EvolutionStatBoosterModifier extends StatBoosterModifier { /** * Modifier used for held items that Applies {@linkcode Stat} boost(s) using a - * multiplier if the holder is of a specific {@linkcode Species}. + * multiplier if the holder is of a specific {@linkcode SpeciesId}. * @extends StatBoosterModifier * @see {@linkcode apply} */ export class SpeciesStatBoosterModifier extends StatBoosterModifier { /** The species that the held item's stat boost(s) apply to */ - private species: Species[]; + private species: SpeciesId[]; constructor( type: ModifierType, pokemonId: number, stats: Stat[], multiplier: number, - species: Species[], + species: SpeciesId[], stackCount?: number, ) { super(type, pokemonId, stats, multiplier, stackCount); @@ -1316,7 +1316,7 @@ export class SpeciesStatBoosterModifier extends StatBoosterModifier { } /** - * Checks if the incoming stat is listed in {@linkcode stats} and if the holder's {@linkcode Species} + * Checks if the incoming stat is listed in {@linkcode stats} and if the holder's {@linkcode SpeciesId} * (or its fused species) is listed in {@linkcode species}. * @param pokemon {@linkcode Pokemon} that holds the item * @param stat {@linkcode Stat} being checked at the time @@ -1333,11 +1333,11 @@ export class SpeciesStatBoosterModifier extends StatBoosterModifier { /** * Checks if either parameter is included in the corresponding lists - * @param speciesId {@linkcode Species} being checked + * @param speciesId {@linkcode SpeciesId} being checked * @param stat {@linkcode Stat} being checked * @returns `true` if both parameters are in {@linkcode species} and {@linkcode stats} respectively, false otherwise */ - contains(speciesId: Species, stat: Stat): boolean { + contains(speciesId: SpeciesId, stat: Stat): boolean { return this.species.includes(speciesId) && this.stats.includes(stat); } } @@ -1391,15 +1391,21 @@ export class CritBoosterModifier extends PokemonHeldItemModifier { /** * Modifier used for held items that apply critical-hit stage boost(s) - * if the holder is of a specific {@linkcode Species}. + * if the holder is of a specific {@linkcode SpeciesId}. * @extends CritBoosterModifier * @see {@linkcode shouldApply} */ export class SpeciesCritBoosterModifier extends CritBoosterModifier { /** The species that the held item's critical-hit stage boost applies to */ - private species: Species[]; + private species: SpeciesId[]; - constructor(type: ModifierType, pokemonId: number, stageIncrement: number, species: Species[], stackCount?: number) { + constructor( + type: ModifierType, + pokemonId: number, + stageIncrement: number, + species: SpeciesId[], + stackCount?: number, + ) { super(type, pokemonId, stageIncrement, stackCount); this.species = species; @@ -1424,7 +1430,7 @@ export class SpeciesCritBoosterModifier extends CritBoosterModifier { } /** - * Checks if the holder's {@linkcode Species} (or its fused species) is listed + * Checks if the holder's {@linkcode SpeciesId} (or its fused species) is listed * in {@linkcode species}. * @param pokemon {@linkcode Pokemon} that holds the held item * @param critStage {@linkcode NumberHolder} that holds the resulting critical-hit level @@ -1621,7 +1627,7 @@ export class BypassSpeedChanceModifier extends PokemonHeldItemModifier { /** * Class for Pokemon held items like King's Rock - * Because King's Rock can be stacked in PokeRogue, unlike mainline, it does not receive a boost from Abilities.SERENE_GRACE + * Because King's Rock can be stacked in PokeRogue, unlike mainline, it does not receive a boost from AbilityId.SERENE_GRACE */ export class FlinchChanceModifier extends PokemonHeldItemModifier { private chance: number; @@ -2112,7 +2118,7 @@ export class TerrastalizeModifier extends ConsumablePokemonModifier { return ( super.shouldApply(playerPokemon) && [playerPokemon?.species.speciesId, playerPokemon?.fusionSpecies?.speciesId].filter( - s => s === Species.TERAPAGOS || s === Species.OGERPON || s === Species.SHEDINJA, + s => s === SpeciesId.TERAPAGOS || s === SpeciesId.OGERPON || s === SpeciesId.SHEDINJA, ).length === 0 ); } @@ -2774,14 +2780,14 @@ export class PokemonMultiHitModifier extends PokemonHeldItemModifier { /** * For each stack, converts 25 percent of attack damage into an additional strike. * @param pokemon The {@linkcode Pokemon} using the move - * @param moveId The {@linkcode Moves | identifier} for the move being used + * @param moveId The {@linkcode MoveId | identifier} for the move being used * @param count {@linkcode NumberHolder} holding the move's hit count for this turn * @param damageMultiplier {@linkcode NumberHolder} holding a damage multiplier applied to a strike of this move * @returns always `true` */ override apply( pokemon: Pokemon, - moveId: Moves, + moveId: MoveId, count: NumberHolder | null = null, damageMultiplier: NumberHolder | null = null, ): boolean { @@ -2924,7 +2930,7 @@ export class MoneyRewardModifier extends ConsumableModifier { globalScene.addMoney(moneyAmount.value); globalScene.getPlayerParty().map(p => { - if (p.species?.speciesId === Species.GIMMIGHOUL || p.fusionSpecies?.speciesId === Species.GIMMIGHOUL) { + if (p.species?.speciesId === SpeciesId.GIMMIGHOUL || p.fusionSpecies?.speciesId === SpeciesId.GIMMIGHOUL) { p.evoCounter ? (p.evoCounter += Math.min(Math.floor(this.moneyMultiplier), 3)) : (p.evoCounter = Math.min(Math.floor(this.moneyMultiplier), 3)); diff --git a/src/overrides.ts b/src/overrides.ts index 95c758d7c43..86e1708248d 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -5,17 +5,17 @@ import { FormChangeItem } from "#app/data/pokemon-forms"; import { type ModifierOverride } from "#app/modifier/modifier-type"; import { Variant } from "#app/sprites/variant"; import { Unlockables } from "#app/system/unlockables"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BattleType } from "#enums/battle-type"; import { BerryType } from "#enums/berry-type"; -import { Biome } from "#enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { EggTier } from "#enums/egg-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { PokeballType } from "#enums/pokeball"; import { PokemonType } from "#enums/pokemon-type"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; import { TimeOfDay } from "#enums/time-of-day"; @@ -38,8 +38,8 @@ import { WeatherType } from "#enums/weather-type"; * @example * ``` * const overrides = { - * ABILITY_OVERRIDE: Abilities.PROTEAN, - * PASSIVE_ABILITY_OVERRIDE: Abilities.PIXILATE, + * ABILITY_OVERRIDE: AbilityId.PROTEAN, + * PASSIVE_ABILITY_OVERRIDE: AbilityId.PIXILATE, * } * ``` */ @@ -73,7 +73,7 @@ class DefaultOverrides { */ readonly BATTLE_STYLE_OVERRIDE: BattleStyle | null = null; readonly STARTING_WAVE_OVERRIDE: number = 0; - readonly STARTING_BIOME_OVERRIDE: Biome | null = null; + readonly STARTING_BIOME_OVERRIDE: BiomeId | null = null; readonly ARENA_TINT_OVERRIDE: TimeOfDay | null = null; /** Multiplies XP gained by this value including 0. Set to null to ignore the override. */ readonly XP_MULTIPLIER_OVERRIDE: number | null = null; @@ -124,11 +124,11 @@ class DefaultOverrides { * @example * ``` * const STARTER_FORM_OVERRIDES = { - * [Species.DARMANITAN]: 1 + * [SpeciesId.DARMANITAN]: 1 * } * ``` */ - readonly STARTER_FORM_OVERRIDES: Partial> = {}; + readonly STARTER_FORM_OVERRIDES: Partial> = {}; /** default 5 or 20 for Daily */ readonly STARTING_LEVEL_OVERRIDE: number = 0; @@ -136,9 +136,9 @@ class DefaultOverrides { * SPECIES OVERRIDE * will only apply to the first starter in your party or each enemy pokemon * default is 0 to not override - * @example SPECIES_OVERRIDE = Species.Bulbasaur; + * @example SPECIES_OVERRIDE = SpeciesId.Bulbasaur; */ - readonly STARTER_SPECIES_OVERRIDE: Species | number = 0; + readonly STARTER_SPECIES_OVERRIDE: SpeciesId | number = 0; /** * This will force your starter to be a random fusion */ @@ -146,20 +146,20 @@ class DefaultOverrides { /** * This will override the species of the fusion */ - readonly STARTER_FUSION_SPECIES_OVERRIDE: Species | number = 0; - readonly ABILITY_OVERRIDE: Abilities = Abilities.NONE; - readonly PASSIVE_ABILITY_OVERRIDE: Abilities = Abilities.NONE; + readonly STARTER_FUSION_SPECIES_OVERRIDE: SpeciesId | number = 0; + readonly ABILITY_OVERRIDE: AbilityId = AbilityId.NONE; + readonly PASSIVE_ABILITY_OVERRIDE: AbilityId = AbilityId.NONE; readonly HAS_PASSIVE_ABILITY_OVERRIDE: boolean | null = null; readonly STATUS_OVERRIDE: StatusEffect = StatusEffect.NONE; readonly GENDER_OVERRIDE: Gender | null = null; - readonly MOVESET_OVERRIDE: Moves | Array = []; + readonly MOVESET_OVERRIDE: MoveId | Array = []; readonly SHINY_OVERRIDE: boolean | null = null; readonly VARIANT_OVERRIDE: Variant | null = null; // -------------------------- // OPPONENT / ENEMY OVERRIDES // -------------------------- - readonly OPP_SPECIES_OVERRIDE: Species | number = 0; + readonly OPP_SPECIES_OVERRIDE: SpeciesId | number = 0; /** * This will make all opponents fused Pokemon */ @@ -167,18 +167,18 @@ class DefaultOverrides { /** * This will override the species of the fusion only when the opponent is already a fusion */ - readonly OPP_FUSION_SPECIES_OVERRIDE: Species | number = 0; + readonly OPP_FUSION_SPECIES_OVERRIDE: SpeciesId | number = 0; readonly OPP_LEVEL_OVERRIDE: number = 0; - readonly OPP_ABILITY_OVERRIDE: Abilities = Abilities.NONE; - readonly OPP_PASSIVE_ABILITY_OVERRIDE: Abilities = Abilities.NONE; + readonly OPP_ABILITY_OVERRIDE: AbilityId = AbilityId.NONE; + readonly OPP_PASSIVE_ABILITY_OVERRIDE: AbilityId = AbilityId.NONE; readonly OPP_HAS_PASSIVE_ABILITY_OVERRIDE: boolean | null = null; readonly OPP_STATUS_OVERRIDE: StatusEffect = StatusEffect.NONE; readonly OPP_GENDER_OVERRIDE: Gender | null = null; - readonly OPP_MOVESET_OVERRIDE: Moves | Array = []; + readonly OPP_MOVESET_OVERRIDE: MoveId | Array = []; readonly OPP_SHINY_OVERRIDE: boolean | null = null; readonly OPP_VARIANT_OVERRIDE: Variant | null = null; readonly OPP_IVS_OVERRIDE: number | number[] = []; - readonly OPP_FORM_OVERRIDES: Partial> = {}; + readonly OPP_FORM_OVERRIDES: Partial> = {}; /** * Override to give the enemy Pokemon a given amount of health segments * diff --git a/src/phases/berry-phase.ts b/src/phases/berry-phase.ts index b027469ea5e..989f19c944f 100644 --- a/src/phases/berry-phase.ts +++ b/src/phases/berry-phase.ts @@ -71,7 +71,7 @@ export class BerryPhase extends FieldPhase { } globalScene.updateModifiers(pokemon.isPlayer()); - // Abilities.CHEEK_POUCH only works once per round of nom noms + // AbilityId.CHEEK_POUCH only works once per round of nom noms applyAbAttrs(HealFromBerryUseAbAttr, pokemon, new BooleanHolder(false)); } } diff --git a/src/phases/command-phase.ts b/src/phases/command-phase.ts index c3e558e1d86..3f18ea95777 100644 --- a/src/phases/command-phase.ts +++ b/src/phases/command-phase.ts @@ -6,10 +6,10 @@ import { TrappedTag } from "#app/data/battler-tags"; import type { MoveTargetSet } from "#app/data/moves/move"; import { getMoveTargets } from "#app/data/moves/move"; import { speciesStarterCosts } from "#app/data/balance/starters"; -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#app/enums/battler-tag-type"; -import { Biome } from "#app/enums/biome"; -import { Moves } from "#app/enums/moves"; +import { BiomeId } from "#enums/biome-id"; +import { MoveId } from "#enums/move-id"; import { PokeballType } from "#enums/pokeball"; import type { PlayerPokemon, TurnMove } from "#app/field/pokemon"; import { FieldPosition } from "#app/field/pokemon"; @@ -44,7 +44,7 @@ export class CommandPhase extends FieldPhase { const cursorResetEvent = globalScene.currentBattle.battleType === BattleType.MYSTERY_ENCOUNTER || globalScene.currentBattle.battleType === BattleType.TRAINER || - globalScene.arena.biomeType === Biome.END; + globalScene.arena.biomeType === BiomeId.END; if (commandUiHandler) { if ( @@ -80,7 +80,7 @@ export class CommandPhase extends FieldPhase { ) { globalScene.currentBattle.turnCommands[this.fieldIndex] = { command: Command.FIGHT, - move: { move: Moves.NONE, targets: [] }, + move: { move: MoveId.NONE, targets: [] }, skip: true, }; } @@ -157,15 +157,15 @@ export class CommandPhase extends FieldPhase { playerPokemon.trySelectMove(cursor, args[0] as boolean) || (useStruggle = cursor > -1 && !playerPokemon.getMoveset().filter(m => m.isUsable(playerPokemon)).length) ) { - let moveId: Moves; + let moveId: MoveId; if (useStruggle) { - moveId = Moves.STRUGGLE; + moveId = MoveId.STRUGGLE; } else if (turnMove !== undefined) { moveId = turnMove.move; } else if (cursor > -1) { moveId = playerPokemon.getMoveset()[cursor].moveId; } else { - moveId = Moves.NONE; + moveId = MoveId.NONE; } const turnCommand: TurnCommand = { @@ -241,7 +241,7 @@ export class CommandPhase extends FieldPhase { .some(p => !globalScene.gameData.dexData[p.species.speciesId].caughtAttr) && globalScene.gameData.getStarterCount(d => !!d.caughtAttr) < Object.keys(speciesStarterCosts).length - 1; if ( - globalScene.arena.biomeType === Biome.END && + globalScene.arena.biomeType === BiomeId.END && (!globalScene.gameMode.isClassic || globalScene.gameMode.isFreshStartChallenge() || notInDex) ) { globalScene.ui.setMode(UiMode.COMMAND, this.fieldIndex); @@ -308,7 +308,7 @@ export class CommandPhase extends FieldPhase { if ( targetPokemon?.isBoss() && targetPokemon?.bossSegmentIndex >= 1 && - !targetPokemon?.hasAbility(Abilities.WONDER_GUARD, false, true) && + !targetPokemon?.hasAbility(AbilityId.WONDER_GUARD, false, true) && cursor < PokeballType.MASTER_BALL ) { globalScene.ui.setMode(UiMode.COMMAND, this.fieldIndex); @@ -344,7 +344,7 @@ export class CommandPhase extends FieldPhase { const mysteryEncounterFleeAllowed = currentBattle.mysteryEncounter?.fleeAllowed; if ( !isSwitch && - (arena.biomeType === Biome.END || + (arena.biomeType === BiomeId.END || (!isNullOrUndefined(mysteryEncounterFleeAllowed) && !mysteryEncounterFleeAllowed)) ) { globalScene.ui.setMode(UiMode.COMMAND, this.fieldIndex); diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index 3cfd2b9a901..c7308fc5a64 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -37,10 +37,10 @@ import { handleTutorial, Tutorial } from "#app/tutorial"; import { UiMode } from "#enums/ui-mode"; import { randSeedInt, randSeedItem } from "#app/utils/common"; import { BattleSpec } from "#enums/battle-spec"; -import { Biome } from "#enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; import { PlayerGender } from "#enums/player-gender"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { overrideHeldItems, overrideModifiers } from "#app/modifier/modifier"; import i18next from "i18next"; import { WEIGHT_INCREMENT_ON_SPAWN_MISS } from "#app/data/mystery-encounters/mystery-encounters"; @@ -120,7 +120,7 @@ export class EncounterPhase extends BattlePhase { if ( globalScene.findModifier(m => m instanceof BoostBugSpawnModifier) && !globalScene.gameMode.isBoss(battle.waveIndex) && - globalScene.arena.biomeType !== Biome.END && + globalScene.arena.biomeType !== BiomeId.END && randSeedInt(10) === 0 ) { enemySpecies = getGoldenBugNetSpecies(level); @@ -158,7 +158,7 @@ export class EncounterPhase extends BattlePhase { ); } - if (enemyPokemon.species.speciesId === Species.ETERNATUS) { + if (enemyPokemon.species.speciesId === SpeciesId.ETERNATUS) { if ( globalScene.gameMode.isClassic && (battle.battleSpec === BattleSpec.FINAL_BOSS || globalScene.gameMode.isWaveFinal(battle.waveIndex)) @@ -556,7 +556,7 @@ export class EncounterPhase extends BattlePhase { } /** This sets Eternatus' held item to be untransferrable, preventing it from being stolen */ if ( - enemyPokemon.species.speciesId === Species.ETERNATUS && + enemyPokemon.species.speciesId === SpeciesId.ETERNATUS && (globalScene.gameMode.isBattleClassicFinalBoss(globalScene.currentBattle.waveIndex) || globalScene.gameMode.isEndlessMajorBoss(globalScene.currentBattle.waveIndex)) ) { diff --git a/src/phases/enemy-command-phase.ts b/src/phases/enemy-command-phase.ts index 166b8c1ae2d..2a1719f9002 100644 --- a/src/phases/enemy-command-phase.ts +++ b/src/phases/enemy-command-phase.ts @@ -2,7 +2,7 @@ import { globalScene } from "#app/global-scene"; import { BattlerIndex } from "#app/battle"; import { Command } from "#app/ui/command-ui-handler"; import { FieldPhase } from "./field-phase"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; /** @@ -38,7 +38,7 @@ export class EnemyCommandPhase extends FieldPhase { if ( battle.double && - enemyPokemon.hasAbility(Abilities.COMMANDER) && + enemyPokemon.hasAbility(AbilityId.COMMANDER) && enemyPokemon.getAlly()?.getTag(BattlerTagType.COMMANDED) ) { this.skipTurn = true; diff --git a/src/phases/learn-move-phase.ts b/src/phases/learn-move-phase.ts index c585679ba4f..65679a7ade7 100644 --- a/src/phases/learn-move-phase.ts +++ b/src/phases/learn-move-phase.ts @@ -3,7 +3,7 @@ import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims"; import type Move from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; import { SpeciesFormChangeMoveLearnedTrigger } from "#app/data/pokemon-forms"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { getPokemonNameWithAffix } from "#app/messages"; import Overrides from "#app/overrides"; import EvolutionSceneHandler from "#app/ui/evolution-scene-handler"; @@ -24,14 +24,14 @@ export enum LearnMoveType { } export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { - private moveId: Moves; + private moveId: MoveId; private messageMode: UiMode; private learnMoveType: LearnMoveType; private cost: number; constructor( partyMemberIndex: number, - moveId: Moves, + moveId: MoveId, learnMoveType: LearnMoveType = LearnMoveType.LEARN_MOVE, cost = -1, ) { @@ -49,7 +49,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { const currentMoveset = pokemon.getMoveset(); // The game first checks if the Pokemon already has the move and ends the phase if it does. - const hasMoveAlready = currentMoveset.some(m => m.moveId === move.id) && this.moveId !== Moves.SKETCH; + const hasMoveAlready = currentMoveset.some(m => m.moveId === move.id) && this.moveId !== MoveId.SKETCH; if (hasMoveAlready) { return this.end(); } diff --git a/src/phases/load-move-anim-phase.ts b/src/phases/load-move-anim-phase.ts index 3d914f738a7..c0b6cd58c54 100644 --- a/src/phases/load-move-anim-phase.ts +++ b/src/phases/load-move-anim-phase.ts @@ -1,5 +1,5 @@ import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims"; -import type { Moves } from "#enums/moves"; +import type { MoveId } from "#enums/move-id"; import { Phase } from "#app/phase"; /** @@ -8,7 +8,7 @@ import { Phase } from "#app/phase"; * isn't already loaded (e.g. for Metronome) */ export class LoadMoveAnimPhase extends Phase { - constructor(protected moveId: Moves) { + constructor(protected moveId: MoveId) { super(); } diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index e3773952214..636f85f0f82 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -48,7 +48,7 @@ import { MoveTarget } from "#enums/MoveTarget"; import { MoveCategory } from "#enums/MoveCategory"; import { SpeciesFormChangePostMoveTrigger } from "#app/data/pokemon-forms"; import { PokemonType } from "#enums/pokemon-type"; -import { DamageResult, PokemonMove, type TurnMove } from "#app/field/pokemon"; +import { type DamageResult, PokemonMove, type TurnMove } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { HitResult, MoveResult } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; @@ -65,14 +65,14 @@ import { PokemonPhase } from "#app/phases/pokemon-phase"; import { BooleanHolder, isNullOrUndefined, NumberHolder } from "#app/utils/common"; import type { nil } from "#app/utils/common"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import i18next from "i18next"; import type { Phase } from "#app/phase"; import { ShowAbilityPhase } from "./show-ability-phase"; import { MovePhase } from "./move-phase"; import { MoveEndPhase } from "./move-end-phase"; import { HideAbilityPhase } from "#app/phases/hide-ability-phase"; -import { TypeDamageMultiplier } from "#app/data/type"; +import type { TypeDamageMultiplier } from "#app/data/type"; import { HitCheckResult } from "#enums/hit-check-result"; import type Move from "#app/data/moves/move"; import { isFieldTargeted } from "#app/data/moves/move-utils"; @@ -220,7 +220,7 @@ export class MoveEffectPhase extends PokemonPhase { break; case HitCheckResult.NO_EFFECT: globalScene.queueMessage( - i18next.t(this.move.id === Moves.SHEER_COLD ? "battle:hitResultImmune" : "battle:hitResultNoEffect", { + i18next.t(this.move.id === MoveId.SHEER_COLD ? "battle:hitResultImmune" : "battle:hitResultNoEffect", { pokemonName: getPokemonNameWithAffix(target), }), ); @@ -351,7 +351,7 @@ export class MoveEffectPhase extends PokemonPhase { ) { const firstTarget = this.getFirstTarget(); new MoveAnim( - move.id as Moves, + move.id as MoveId, user, firstTarget?.getBattlerIndex() ?? BattlerIndex.ATTACKER, // Some moves used in mystery encounters should be played even on an empty field @@ -609,12 +609,12 @@ export class MoveEffectPhase extends PokemonPhase { * @returns `true` if the move should bypass accuracy and semi-invulnerability * * Accuracy and semi-invulnerability can be bypassed by: - * - An ability like {@linkcode Abilities.NO_GUARD | No Guard} - * - A poison type using {@linkcode Moves.TOXIC | Toxic} - * - A move like {@linkcode Moves.LOCK_ON | Lock-On} or {@linkcode Moves.MIND_READER | Mind Reader}. + * - An ability like {@linkcode AbilityId.NO_GUARD | No Guard} + * - A poison type using {@linkcode MoveId.TOXIC | Toxic} + * - A move like {@linkcode MoveId.LOCK_ON | Lock-On} or {@linkcode MoveId.MIND_READER | Mind Reader}. * - A field-targeted move like spikes * - * Does *not* check against effects {@linkcode Moves.GLAIVE_RUSH | Glaive Rush} status (which + * Does *not* check against effects {@linkcode MoveId.GLAIVE_RUSH | Glaive Rush} status (which * should not bypass semi-invulnerability), or interactions like Earthquake hitting against Dig, * (which should not bypass the accuracy check). * @@ -809,7 +809,7 @@ export class MoveEffectPhase extends PokemonPhase { */ applyMoveAttrs(StatChangeBeforeDmgCalcAttr, user, target, this.move); - const { result: result, damage: dmg } = target.getAttackDamage({ + const { result, damage: dmg } = target.getAttackDamage({ source: user, move: this.move, ignoreAbility: false, diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index d7cbf1b9a6f..1ccf5b7957e 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -44,10 +44,10 @@ import { MoveChargePhase } from "#app/phases/move-charge-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; import { NumberHolder } from "#app/utils/common"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { StatusEffect } from "#enums/status-effect"; import i18next from "i18next"; @@ -138,7 +138,7 @@ export class MovePhase extends BattlePhase { /** * Shows whether the current move has been forced to the end of the turn - * Needed for speed order, see {@linkcode Moves.QUASH} + * Needed for speed order, see {@linkcode MoveId.QUASH} * */ public isForcedLast(): boolean { return this.forcedLast; @@ -147,7 +147,7 @@ export class MovePhase extends BattlePhase { public start(): void { super.start(); - console.log(Moves[this.move.moveId]); + console.log(MoveId[this.move.moveId]); // Check if move is unusable (e.g. because it's out of PP due to a mid-turn Spite). if (!this.canMove(true)) { @@ -201,14 +201,14 @@ export class MovePhase extends BattlePhase { this.end(); } - /** Check for cancellation edge cases - no targets remaining, or {@linkcode Moves.NONE} is in the queue */ + /** Check for cancellation edge cases - no targets remaining, or {@linkcode MoveId.NONE} is in the queue */ protected resolveFinalPreMoveCancellationChecks(): void { const targets = this.getActiveTargetPokemon(); const moveQueue = this.pokemon.getMoveQueue(); if ( (targets.length === 0 && !this.move.getMove().hasAttr(AddArenaTrapTagAttr)) || - (moveQueue.length && moveQueue[0].move === Moves.NONE) + (moveQueue.length && moveQueue[0].move === MoveId.NONE) ) { this.showMoveText(); this.showFailedText(); @@ -294,7 +294,7 @@ export class MovePhase extends BattlePhase { protected lapsePreMoveAndMoveTags(): void { this.pokemon.lapseTags(BattlerTagLapseType.PRE_MOVE); - // TODO: does this intentionally happen before the no targets/Moves.NONE on queue cancellation case is checked? + // TODO: does this intentionally happen before the no targets/MoveId.NONE on queue cancellation case is checked? if (!this.followUp && this.canMove() && !this.cancelled) { this.pokemon.lapseTags(BattlerTagLapseType.MOVE); } @@ -410,7 +410,7 @@ export class MovePhase extends BattlePhase { new MoveEffectPhase(this.pokemon.getBattlerIndex(), this.targets, move, this.reflected, this.move.virtual), ); } else { - if ([Moves.ROAR, Moves.WHIRLWIND, Moves.TRICK_OR_TREAT, Moves.FORESTS_CURSE].includes(this.move.moveId)) { + if ([MoveId.ROAR, MoveId.WHIRLWIND, MoveId.TRICK_OR_TREAT, MoveId.FORESTS_CURSE].includes(this.move.moveId)) { applyPreAttackAbAttrs(PokemonTypeChangeAbAttr, this.pokemon, null, this.move.getMove()); } @@ -486,7 +486,7 @@ export class MovePhase extends BattlePhase { } /** - * Applies PP increasing abilities (currently only {@link Abilities.PRESSURE Pressure}) if they exist on the target pokemon. + * Applies PP increasing abilities (currently only {@link AbilityId.PRESSURE Pressure}) if they exist on the target pokemon. * Note that targets must include only active pokemon. * * TODO: This hardcodes the PP increase at 1 per opponent, rather than deferring to the ability. @@ -526,7 +526,7 @@ export class MovePhase extends BattlePhase { if ( redirectTag && (!redirectTag.powder || - (!this.pokemon.isOfType(PokemonType.GRASS) && !this.pokemon.hasAbility(Abilities.OVERCOAT))) + (!this.pokemon.isOfType(PokemonType.GRASS) && !this.pokemon.hasAbility(AbilityId.OVERCOAT))) ) { redirectTarget.value = p.getBattlerIndex(); redirectedByAbility = false; @@ -594,8 +594,8 @@ export class MovePhase extends BattlePhase { /** * Handles the case where the move was cancelled or failed: - * - Uses PP if the move failed (not cancelled) and should use PP (failed moves are not affected by {@link Abilities.PRESSURE Pressure}) - * - Records a cancelled OR failed move in move history, so abilities like {@link Abilities.TRUANT Truant} don't trigger on the + * - Uses PP if the move failed (not cancelled) and should use PP (failed moves are not affected by {@link AbilityId.PRESSURE Pressure}) + * - Records a cancelled OR failed move in move history, so abilities like {@link AbilityId.TRUANT Truant} don't trigger on the * next turn and soft-lock. * - Lapses `MOVE_EFFECT` tags: * - Semi-invulnerable battler tags (Fly/Dive/etc.) are intended to lapse on move effects, but also need @@ -603,7 +603,7 @@ export class MovePhase extends BattlePhase { * * TODO: ...this seems weird. * - Lapses `AFTER_MOVE` tags: - * - This handles the effects of {@link Moves.SUBSTITUTE Substitute} + * - This handles the effects of {@link MoveId.SUBSTITUTE Substitute} * - Removes the second turn of charge moves */ protected handlePreMoveFailures(): void { @@ -623,7 +623,7 @@ export class MovePhase extends BattlePhase { } this.pokemon.pushMoveHistory({ - move: Moves.NONE, + move: MoveId.NONE, result: MoveResult.FAIL, targets: this.targets, }); @@ -636,11 +636,11 @@ export class MovePhase extends BattlePhase { } /** - * Displays the move's usage text to the player, unless it's a charge turn (ie: {@link Moves.SOLAR_BEAM Solar Beam}), - * the pokemon is on a recharge turn (ie: {@link Moves.HYPER_BEAM Hyper Beam}), or a 2-turn move was interrupted (ie: {@link Moves.FLY Fly}). + * Displays the move's usage text to the player, unless it's a charge turn (ie: {@link MoveId.SOLAR_BEAM Solar Beam}), + * the pokemon is on a recharge turn (ie: {@link MoveId.HYPER_BEAM Hyper Beam}), or a 2-turn move was interrupted (ie: {@link MoveId.FLY Fly}). */ public showMoveText(): void { - if (this.move.moveId === Moves.NONE) { + if (this.move.moveId === MoveId.NONE) { return; } diff --git a/src/phases/pokemon-anim-phase.ts b/src/phases/pokemon-anim-phase.ts index 1889b238f05..e9f0097459a 100644 --- a/src/phases/pokemon-anim-phase.ts +++ b/src/phases/pokemon-anim-phase.ts @@ -4,7 +4,7 @@ import type Pokemon from "#app/field/pokemon"; import { BattlePhase } from "#app/phases/battle-phase"; import { isNullOrUndefined } from "#app/utils/common"; import { PokemonAnimType } from "#enums/pokemon-anim-type"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; export class PokemonAnimPhase extends BattlePhase { /** The type of animation to play in this phase */ @@ -247,7 +247,7 @@ export class PokemonAnimPhase extends BattlePhase { } const dondozo = this.pokemon.getAlly(); - if (dondozo?.species?.speciesId !== Species.DONDOZO) { + if (dondozo?.species?.speciesId !== SpeciesId.DONDOZO) { return this.end(); } diff --git a/src/phases/pokemon-transform-phase.ts b/src/phases/pokemon-transform-phase.ts index b33689321b5..23a9a983bae 100644 --- a/src/phases/pokemon-transform-phase.ts +++ b/src/phases/pokemon-transform-phase.ts @@ -1,6 +1,6 @@ import type { BattlerIndex } from "#app/battle"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { EFFECTIVE_STATS, BATTLE_STATS } from "#enums/stat"; import { PokemonMove } from "#app/field/pokemon"; import { globalScene } from "#app/global-scene"; @@ -54,7 +54,7 @@ export class PokemonTransformPhase extends PokemonPhase { return new PokemonMove(m.moveId, 0, 0, false, Math.min(m.getMove().pp, 5)); } console.warn(`Transform: somehow iterating over a ${m} value when copying moveset!`); - return new PokemonMove(Moves.NONE); + return new PokemonMove(MoveId.NONE); }); user.summonData.types = target.getTypes(); diff --git a/src/phases/select-biome-phase.ts b/src/phases/select-biome-phase.ts index efd376eb5ba..a7736b16811 100644 --- a/src/phases/select-biome-phase.ts +++ b/src/phases/select-biome-phase.ts @@ -1,6 +1,6 @@ import { globalScene } from "#app/global-scene"; import { biomeLinks, getBiomeName } from "#app/data/balance/biomes"; -import { Biome } from "#app/enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { MoneyInterestModifier, MapModifier } from "#app/modifier/modifier"; import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import { UiMode } from "#enums/ui-mode"; @@ -18,7 +18,7 @@ export class SelectBiomePhase extends BattlePhase { const currentBiome = globalScene.arena.biomeType; const nextWaveIndex = globalScene.currentBattle.waveIndex + 1; - const setNextBiome = (nextBiome: Biome) => { + const setNextBiome = (nextBiome: BiomeId) => { if (nextWaveIndex % 10 === 1) { globalScene.applyModifiers(MoneyInterestModifier, true); globalScene.unshiftPhase(new PartyHealPhase(false)); @@ -32,11 +32,11 @@ export class SelectBiomePhase extends BattlePhase { (globalScene.gameMode.isDaily && globalScene.gameMode.isWaveFinal(nextWaveIndex)) || (globalScene.gameMode.hasShortBiomes && !(nextWaveIndex % 50)) ) { - setNextBiome(Biome.END); + setNextBiome(BiomeId.END); } else if (globalScene.gameMode.hasRandomBiomes) { setNextBiome(this.generateNextBiome(nextWaveIndex)); } else if (Array.isArray(biomeLinks[currentBiome])) { - const biomes: Biome[] = (biomeLinks[currentBiome] as (Biome | [Biome, number])[]) + const biomes: BiomeId[] = (biomeLinks[currentBiome] as (BiomeId | [BiomeId, number])[]) .filter(b => !Array.isArray(b) || !randSeedInt(b[1])) .map(b => (!Array.isArray(b) ? b : b[0])); @@ -60,15 +60,15 @@ export class SelectBiomePhase extends BattlePhase { setNextBiome(biomes[randSeedInt(biomes.length)]); } } else if (biomeLinks.hasOwnProperty(currentBiome)) { - setNextBiome(biomeLinks[currentBiome] as Biome); + setNextBiome(biomeLinks[currentBiome] as BiomeId); } else { setNextBiome(this.generateNextBiome(nextWaveIndex)); } } - generateNextBiome(waveIndex: number): Biome { + generateNextBiome(waveIndex: number): BiomeId { if (!(waveIndex % 50)) { - return Biome.END; + return BiomeId.END; } return globalScene.generateRandomBiome(waveIndex); } diff --git a/src/phases/select-starter-phase.ts b/src/phases/select-starter-phase.ts index 0a76df31a2c..6d333f4001c 100644 --- a/src/phases/select-starter-phase.ts +++ b/src/phases/select-starter-phase.ts @@ -10,7 +10,7 @@ import { TitlePhase } from "#app/phases/title-phase"; import { SaveSlotUiMode } from "#app/ui/save-slot-select-ui-handler"; import type { Starter } from "#app/ui/starter-select-ui-handler"; import { UiMode } from "#enums/ui-mode"; -import type { Species } from "#enums/species"; +import type { SpeciesId } from "#enums/species-id"; import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; import { isNullOrUndefined } from "#app/utils/common"; @@ -43,7 +43,7 @@ export class SelectStarterPhase extends Phase { const loadPokemonAssets: Promise[] = []; starters.forEach((starter: Starter, i: number) => { if (!i && Overrides.STARTER_SPECIES_OVERRIDE) { - starter.species = getPokemonSpecies(Overrides.STARTER_SPECIES_OVERRIDE as Species); + starter.species = getPokemonSpecies(Overrides.STARTER_SPECIES_OVERRIDE as SpeciesId); } const starterProps = globalScene.gameData.getSpeciesDexAttrProps(starter.species, starter.dexAttr); let starterFormIndex = Math.min(starterProps.formIndex, Math.max(starter.species.forms.length - 1, 0)); diff --git a/src/phases/switch-biome-phase.ts b/src/phases/switch-biome-phase.ts index f708830318e..69a6c97cd9a 100644 --- a/src/phases/switch-biome-phase.ts +++ b/src/phases/switch-biome-phase.ts @@ -1,12 +1,12 @@ import { globalScene } from "#app/global-scene"; -import type { Biome } from "#app/enums/biome"; +import type { BiomeId } from "#enums/biome-id"; import { getBiomeKey } from "#app/field/arena"; import { BattlePhase } from "./battle-phase"; export class SwitchBiomePhase extends BattlePhase { - private nextBiome: Biome; + private nextBiome: BiomeId; - constructor(nextBiome: Biome) { + constructor(nextBiome: BiomeId) { super(); this.nextBiome = nextBiome; diff --git a/src/phases/trainer-victory-phase.ts b/src/phases/trainer-victory-phase.ts index f7005b1300d..daf5c38e57b 100644 --- a/src/phases/trainer-victory-phase.ts +++ b/src/phases/trainer-victory-phase.ts @@ -9,7 +9,7 @@ import { ModifierRewardPhase } from "./modifier-reward-phase"; import { MoneyRewardPhase } from "./money-reward-phase"; import { TrainerSlot } from "#enums/trainer-slot"; import { globalScene } from "#app/global-scene"; -import { Biome } from "#app/enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { achvs } from "#app/system/achv"; import { timedEventManager } from "#app/global-event-manager"; @@ -57,7 +57,7 @@ export class TrainerVictoryPhase extends BattlePhase { } // Breeders in Space achievement if ( - globalScene.arena.biomeType === Biome.SPACE && + globalScene.arena.biomeType === BiomeId.SPACE && (trainerType === TrainerType.BREEDER || trainerType === TrainerType.EXPERT_POKEMON_BREEDER) ) { globalScene.validateAchv(achvs.BREEDERS_IN_SPACE); diff --git a/src/phases/turn-start-phase.ts b/src/phases/turn-start-phase.ts index de510ef07d7..a02d869af10 100644 --- a/src/phases/turn-start-phase.ts +++ b/src/phases/turn-start-phase.ts @@ -1,7 +1,7 @@ import { applyAbAttrs, BypassSpeedChanceAbAttr, PreventBypassSpeedChanceAbAttr } from "#app/data/abilities/ability"; import { MoveHeaderAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { Stat } from "#app/enums/stat"; import type Pokemon from "#app/field/pokemon"; import { PokemonMove } from "#app/field/pokemon"; @@ -228,7 +228,7 @@ export class TurnStartPhase extends FieldPhase { ? playerActivePokemon[0] : playerActivePokemon[1]; // check if either active pokemon has the ability "Run Away" - const hasRunAway = playerActivePokemon.find(p => p.hasAbility(Abilities.RUN_AWAY)); + const hasRunAway = playerActivePokemon.find(p => p.hasAbility(AbilityId.RUN_AWAY)); runningPokemon = hasRunAway !== undefined ? hasRunAway : fasterPokemon; } } diff --git a/src/sprites/pokemon-asset-loader.ts b/src/sprites/pokemon-asset-loader.ts index 4ce88f4f1fb..980d242a880 100644 --- a/src/sprites/pokemon-asset-loader.ts +++ b/src/sprites/pokemon-asset-loader.ts @@ -1,11 +1,11 @@ -import type { Moves } from "#enums/moves"; +import type { MoveId } from "#enums/move-id"; import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims"; /** * Asynchronously load the animations and assets for the provided moves. * @param moveIds - An array of move IDs to load assets for. */ -export async function loadMoveAnimations(moveIds: Moves[]): Promise { +export async function loadMoveAnimations(moveIds: MoveId[]): Promise { await Promise.allSettled(moveIds.map(m => initMoveAnim(m))); await loadMoveAnimAssets(moveIds); } diff --git a/src/system/arena-data.ts b/src/system/arena-data.ts index 07396b31d1b..29423d10207 100644 --- a/src/system/arena-data.ts +++ b/src/system/arena-data.ts @@ -1,12 +1,12 @@ import { Arena } from "../field/arena"; import type { ArenaTag } from "../data/arena-tag"; import { loadArenaTag } from "../data/arena-tag"; -import type { Biome } from "#enums/biome"; +import type { BiomeId } from "#enums/biome-id"; import { Weather } from "../data/weather"; import { Terrain } from "#app/data/terrain"; export default class ArenaData { - public biome: Biome; + public biome: BiomeId; public weather: Weather | null; public terrain: Terrain | null; public tags: ArenaTag[]; diff --git a/src/system/egg-data.ts b/src/system/egg-data.ts index 8fb8335bcf7..63f9e17d7be 100644 --- a/src/system/egg-data.ts +++ b/src/system/egg-data.ts @@ -1,5 +1,5 @@ import type { EggTier } from "#enums/egg-type"; -import type { Species } from "#enums/species"; +import type { SpeciesId } from "#enums/species-id"; import type { VariantTier } from "#enums/variant-tier"; import { EGG_SEED, Egg } from "../data/egg"; import type { EggSourceType } from "#app/enums/egg-source-types"; @@ -12,7 +12,7 @@ export default class EggData { public timestamp: number; public variantTier: VariantTier; public isShiny: boolean; - public species: Species; + public species: SpeciesId; public eggMoveIndex: number; public overrideHiddenAbility: boolean; diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 5711ad338c3..bc74ab15930 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -43,9 +43,9 @@ import { StatusEffect } from "#enums/status-effect"; import ChallengeData from "#app/system/challenge-data"; import { Device } from "#enums/devices"; import { GameDataType } from "#enums/game-data-type"; -import type { Moves } from "#enums/moves"; +import type { MoveId } from "#enums/move-id"; import { PlayerGender } from "#enums/player-gender"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { applyChallenges, ChallengeType } from "#app/data/challenge"; import { WeatherType } from "#enums/weather-type"; import { TerrainType } from "#app/data/terrain"; @@ -63,34 +63,34 @@ import { ArenaTrapTag } from "#app/data/arena-tag"; import { pokemonFormChanges } from "#app/data/pokemon-forms"; import type { PokemonType } from "#enums/pokemon-type"; -export const defaultStarterSpecies: Species[] = [ - Species.BULBASAUR, - Species.CHARMANDER, - Species.SQUIRTLE, - Species.CHIKORITA, - Species.CYNDAQUIL, - Species.TOTODILE, - Species.TREECKO, - Species.TORCHIC, - Species.MUDKIP, - Species.TURTWIG, - Species.CHIMCHAR, - Species.PIPLUP, - Species.SNIVY, - Species.TEPIG, - Species.OSHAWOTT, - Species.CHESPIN, - Species.FENNEKIN, - Species.FROAKIE, - Species.ROWLET, - Species.LITTEN, - Species.POPPLIO, - Species.GROOKEY, - Species.SCORBUNNY, - Species.SOBBLE, - Species.SPRIGATITO, - Species.FUECOCO, - Species.QUAXLY, +export const defaultStarterSpecies: SpeciesId[] = [ + SpeciesId.BULBASAUR, + SpeciesId.CHARMANDER, + SpeciesId.SQUIRTLE, + SpeciesId.CHIKORITA, + SpeciesId.CYNDAQUIL, + SpeciesId.TOTODILE, + SpeciesId.TREECKO, + SpeciesId.TORCHIC, + SpeciesId.MUDKIP, + SpeciesId.TURTWIG, + SpeciesId.CHIMCHAR, + SpeciesId.PIPLUP, + SpeciesId.SNIVY, + SpeciesId.TEPIG, + SpeciesId.OSHAWOTT, + SpeciesId.CHESPIN, + SpeciesId.FENNEKIN, + SpeciesId.FROAKIE, + SpeciesId.ROWLET, + SpeciesId.LITTEN, + SpeciesId.POPPLIO, + SpeciesId.GROOKEY, + SpeciesId.SCORBUNNY, + SpeciesId.SOBBLE, + SpeciesId.SPRIGATITO, + SpeciesId.FUECOCO, + SpeciesId.QUAXLY, ]; const saveKey = "x0i2O7WRiANTqPmZ"; // Temporary; secure encryption is not yet necessary @@ -205,7 +205,7 @@ export interface DexEntry { ivs: number[]; } -export type StarterMoveset = [Moves] | [Moves, Moves] | [Moves, Moves, Moves] | [Moves, Moves, Moves, Moves]; +export type StarterMoveset = [MoveId] | [MoveId, MoveId] | [MoveId, MoveId, MoveId] | [MoveId, MoveId, MoveId, MoveId]; export interface StarterFormMoveData { [key: number]: StarterMoveset; @@ -555,7 +555,7 @@ export class GameData { this.migrateStarterAbilities(systemData, this.starterData); - const starterIds = Object.keys(this.starterData).map(s => Number.parseInt(s) as Species); + const starterIds = Object.keys(this.starterData).map(s => Number.parseInt(s) as SpeciesId); for (const s of starterIds) { this.starterData[s].candyCount += systemData.dexData[s].caughtCount; this.starterData[s].candyCount += systemData.dexData[s].hatchedCount * 2; @@ -1720,7 +1720,7 @@ export class GameData { private initStarterData(): void { const starterData: StarterData = {}; - const starterSpeciesIds = Object.keys(speciesStarterCosts).map(k => Number.parseInt(k) as Species); + const starterSpeciesIds = Object.keys(speciesStarterCosts).map(k => Number.parseInt(k) as SpeciesId); for (const speciesId of starterSpeciesIds) { starterData[speciesId] = { @@ -1815,16 +1815,16 @@ export class GameData { const formKey = pokemon.getFormKey(); if (formIndex > 0) { // In case a Pikachu with formIndex > 0 was unlocked, base form Pichu is also unlocked - if (pokemon.species.speciesId === Species.PIKACHU && species.speciesId === Species.PICHU) { + if (pokemon.species.speciesId === SpeciesId.PIKACHU && species.speciesId === SpeciesId.PICHU) { dexEntry.caughtAttr |= globalScene.gameData.getFormAttr(0); } - if (pokemon.species.speciesId === Species.URSHIFU) { + if (pokemon.species.speciesId === SpeciesId.URSHIFU) { if (formIndex === 2) { dexEntry.caughtAttr |= globalScene.gameData.getFormAttr(0); } else if (formIndex === 3) { dexEntry.caughtAttr |= globalScene.gameData.getFormAttr(1); } - } else if (pokemon.species.speciesId === Species.ZYGARDE) { + } else if (pokemon.species.speciesId === SpeciesId.ZYGARDE) { if (formIndex === 4) { dexEntry.caughtAttr |= globalScene.gameData.getFormAttr(2); } else if (formIndex === 5) { @@ -1929,7 +1929,7 @@ export class GameData { } incrementRibbonCount(species: PokemonSpecies, forStarter = false): number { - const speciesIdToIncrement: Species = species.getRootSpeciesId(forStarter); + const speciesIdToIncrement: SpeciesId = species.getRootSpeciesId(forStarter); if (!this.starterData[speciesIdToIncrement].classicWinCount) { this.starterData[speciesIdToIncrement].classicWinCount = 0; @@ -2040,7 +2040,7 @@ export class GameData { } //recursively unlock nature for species and prevolutions - const _unlockSpeciesNature = (speciesId: Species) => { + const _unlockSpeciesNature = (speciesId: SpeciesId) => { this.dexData[speciesId].natureAttr |= 1 << (nature + 1); if (pokemonPrevolutions.hasOwnProperty(speciesId)) { _unlockSpeciesNature(pokemonPrevolutions[speciesId]); @@ -2049,7 +2049,7 @@ export class GameData { _unlockSpeciesNature(species.speciesId); } - updateSpeciesDexIvs(speciesId: Species, ivs: number[]): void { + updateSpeciesDexIvs(speciesId: SpeciesId, ivs: number[]): void { let dexEntry: DexEntry; do { dexEntry = globalScene.gameData.dexData[speciesId]; @@ -2180,7 +2180,7 @@ export class GameData { return ret; } - getSpeciesStarterValue(speciesId: Species): number { + getSpeciesStarterValue(speciesId: SpeciesId): number { const baseValue = speciesStarterCosts[speciesId]; let value = baseValue; @@ -2231,7 +2231,7 @@ export class GameData { } migrateStarterAbilities(systemData: SystemSaveData, initialStarterData?: StarterData): void { - const starterIds = Object.keys(this.starterData).map(s => Number.parseInt(s) as Species); + const starterIds = Object.keys(this.starterData).map(s => Number.parseInt(s) as SpeciesId); const starterData = initialStarterData || systemData.starterData; const dexData = systemData.dexData; for (const s of starterIds) { diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index 00169678ed0..62fb2f4a2e4 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -8,16 +8,16 @@ import { Status } from "../data/status-effect"; import Pokemon, { EnemyPokemon, PokemonBattleData, PokemonMove, PokemonSummonData } from "../field/pokemon"; import { TrainerSlot } from "#enums/trainer-slot"; import type { Variant } from "#app/sprites/variant"; -import type { Biome } from "#enums/biome"; -import type { Moves } from "#enums/moves"; -import type { Species } from "#enums/species"; +import type { BiomeId } from "#enums/biome-id"; +import type { MoveId } from "#enums/move-id"; +import type { SpeciesId } from "#enums/species-id"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import type { PokemonType } from "#enums/pokemon-type"; export default class PokemonData { public id: number; public player: boolean; - public species: Species; + public species: SpeciesId; public nickname: string; public formIndex: number; public abilityIndex: number; @@ -37,19 +37,19 @@ export default class PokemonData { public status: Status | null; public friendship: number; public metLevel: number; - public metBiome: Biome | -1; // -1 for starters - public metSpecies: Species; + public metBiome: BiomeId | -1; // -1 for starters + public metSpecies: SpeciesId; public metWave: number; // 0 for unknown (previous saves), -1 for starters public luck: number; public pauseEvolutions: boolean; public pokerus: boolean; - public usedTMs: Moves[]; + public usedTMs: MoveId[]; public evoCounter: number; public teraType: PokemonType; public isTerastallized: boolean; public stellarTypesBoosted: PokemonType[]; - public fusionSpecies: Species; + public fusionSpecies: SpeciesId; public fusionFormIndex: number; public fusionAbilityIndex: number; public fusionShiny: boolean; diff --git a/src/system/version_migration/versions/v1_8_3.ts b/src/system/version_migration/versions/v1_8_3.ts index 6e2d96d3673..cce37a53767 100644 --- a/src/system/version_migration/versions/v1_8_3.ts +++ b/src/system/version_migration/versions/v1_8_3.ts @@ -1,7 +1,7 @@ import type { SystemSaveMigrator } from "#app/@types/SystemSaveMigrator"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { DexAttr, type SystemSaveData } from "#app/system/game-data"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; /** * If a starter is caught, but the only forms registered as caught are not starterSelectable, @@ -17,7 +17,7 @@ const migratePichuForms: SystemSaveMigrator = { const caughtAttr = data.dexData[sd]?.caughtAttr; const species = getPokemonSpecies(sd); // An extra check because you never know - if (species.speciesId === Species.PICHU && caughtAttr) { + if (species.speciesId === SpeciesId.PICHU && caughtAttr) { // Ensuring that only existing forms are unlocked data.dexData[sd].caughtAttr &= species.getFullUnlocksData(); // If no forms are unlocked now, since Pichu is caught, we unlock form 0 diff --git a/src/system/version_migration/versions/v1_9_0.ts b/src/system/version_migration/versions/v1_9_0.ts index c517896cf45..0f22b85d072 100644 --- a/src/system/version_migration/versions/v1_9_0.ts +++ b/src/system/version_migration/versions/v1_9_0.ts @@ -2,7 +2,7 @@ import type { SessionSaveMigrator } from "#app/@types/SessionSaveMigrator"; import { PokemonMove } from "#app/field/pokemon"; import type { SessionSaveData } from "#app/system/game-data"; import type PokemonData from "#app/system/pokemon-data"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; /** * Migrate all lingering rage fist data inside `CustomPokemonData`, @@ -15,7 +15,7 @@ const migratePartyData: SessionSaveMigrator = { // this stuff is copied straight from the constructor fwiw const mapParty = (pkmnData: PokemonData) => { // remove empty moves from moveset - pkmnData.moveset = (pkmnData.moveset ?? [new PokemonMove(Moves.TACKLE), new PokemonMove(Moves.GROWL)]) + pkmnData.moveset = (pkmnData.moveset ?? [new PokemonMove(MoveId.TACKLE), new PokemonMove(MoveId.GROWL)]) .filter(m => !!m) .map(m => PokemonMove.loadMove(m)); // only edit summondata moveset if exists diff --git a/src/timed-event-manager.ts b/src/timed-event-manager.ts index 163afdc098b..976463a16a7 100644 --- a/src/timed-event-manager.ts +++ b/src/timed-event-manager.ts @@ -3,7 +3,7 @@ import { TextStyle, addTextObject } from "#app/ui/text"; import type { nil } from "#app/utils/common"; import { isNullOrUndefined } from "#app/utils/common"; import i18next from "i18next"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import type { WeatherPoolEntry } from "#app/data/weather"; import { WeatherType } from "#enums/weather-type"; import { CLASSIC_CANDY_FRIENDSHIP_MULTIPLIER } from "./data/balance/starters"; @@ -26,7 +26,7 @@ interface EventBanner { } interface EventEncounter { - species: Species; + species: SpeciesId; blockEvolution?: boolean; formIndex?: number; } @@ -62,7 +62,7 @@ interface TimedEvent extends EventBanner { delibirdyBuff?: string[]; weather?: WeatherPoolEntry[]; mysteryEncounterTierChanges?: EventMysteryEncounterTier[]; - luckBoostedSpecies?: Species[]; + luckBoostedSpecies?: SpeciesId[]; boostFusions?: boolean; //MODIFIER REWORK PLEASE classicWaveRewards?: EventWaveReward[]; // Rival battle rewards trainerShinyChance?: number; // Odds over 65536 of trainer mon generating as shiny @@ -82,26 +82,26 @@ const timedEvents: TimedEvent[] = [ scale: 0.21, availableLangs: ["en", "de", "it", "fr", "ja", "ko", "es-ES", "pt-BR", "zh-CN"], eventEncounters: [ - { species: Species.GIMMIGHOUL, blockEvolution: true }, - { species: Species.DELIBIRD }, - { species: Species.STANTLER }, - { species: Species.CYNDAQUIL }, - { species: Species.PIPLUP }, - { species: Species.CHESPIN }, - { species: Species.BALTOY }, - { species: Species.SNOVER }, - { species: Species.CHINGLING }, - { species: Species.LITWICK }, - { species: Species.CUBCHOO }, - { species: Species.SWIRLIX }, - { species: Species.AMAURA }, - { species: Species.MUDBRAY }, - { species: Species.ROLYCOLY }, - { species: Species.MILCERY }, - { species: Species.SMOLIV }, - { species: Species.ALOLA_VULPIX }, - { species: Species.GALAR_DARUMAKA }, - { species: Species.IRON_BUNDLE }, + { species: SpeciesId.GIMMIGHOUL, blockEvolution: true }, + { species: SpeciesId.DELIBIRD }, + { species: SpeciesId.STANTLER }, + { species: SpeciesId.CYNDAQUIL }, + { species: SpeciesId.PIPLUP }, + { species: SpeciesId.CHESPIN }, + { species: SpeciesId.BALTOY }, + { species: SpeciesId.SNOVER }, + { species: SpeciesId.CHINGLING }, + { species: SpeciesId.LITWICK }, + { species: SpeciesId.CUBCHOO }, + { species: SpeciesId.SWIRLIX }, + { species: SpeciesId.AMAURA }, + { species: SpeciesId.MUDBRAY }, + { species: SpeciesId.ROLYCOLY }, + { species: SpeciesId.MILCERY }, + { species: SpeciesId.SMOLIV }, + { species: SpeciesId.ALOLA_VULPIX }, + { species: SpeciesId.GALAR_DARUMAKA }, + { species: SpeciesId.IRON_BUNDLE }, ], delibirdyBuff: ["CATCHING_CHARM", "SHINY_CHARM", "ABILITY_CHARM", "EXP_CHARM", "SUPER_EXP_CHARM", "HEALING_CHARM"], weather: [{ weatherType: WeatherType.SNOW, weight: 1 }], @@ -138,59 +138,59 @@ const timedEvents: TimedEvent[] = [ scale: 0.21, availableLangs: ["en", "de", "it", "fr", "ja", "ko", "es-ES", "pt-BR", "zh-CN"], eventEncounters: [ - { species: Species.EKANS }, - { species: Species.ONIX }, - { species: Species.DRATINI }, - { species: Species.CLEFFA }, - { species: Species.UMBREON }, - { species: Species.DUNSPARCE }, - { species: Species.TEDDIURSA }, - { species: Species.SEVIPER }, - { species: Species.LUNATONE }, - { species: Species.CHINGLING }, - { species: Species.SNIVY }, - { species: Species.DARUMAKA }, - { species: Species.DRAMPA }, - { species: Species.SILICOBRA }, - { species: Species.BLOODMOON_URSALUNA }, + { species: SpeciesId.EKANS }, + { species: SpeciesId.ONIX }, + { species: SpeciesId.DRATINI }, + { species: SpeciesId.CLEFFA }, + { species: SpeciesId.UMBREON }, + { species: SpeciesId.DUNSPARCE }, + { species: SpeciesId.TEDDIURSA }, + { species: SpeciesId.SEVIPER }, + { species: SpeciesId.LUNATONE }, + { species: SpeciesId.CHINGLING }, + { species: SpeciesId.SNIVY }, + { species: SpeciesId.DARUMAKA }, + { species: SpeciesId.DRAMPA }, + { species: SpeciesId.SILICOBRA }, + { species: SpeciesId.BLOODMOON_URSALUNA }, ], luckBoostedSpecies: [ - Species.EKANS, - Species.ARBOK, - Species.ONIX, - Species.STEELIX, - Species.DRATINI, - Species.DRAGONAIR, - Species.DRAGONITE, - Species.CLEFFA, - Species.CLEFAIRY, - Species.CLEFABLE, - Species.UMBREON, - Species.DUNSPARCE, - Species.DUDUNSPARCE, - Species.TEDDIURSA, - Species.URSARING, - Species.URSALUNA, - Species.SEVIPER, - Species.LUNATONE, - Species.RAYQUAZA, - Species.CHINGLING, - Species.CHIMECHO, - Species.CRESSELIA, - Species.DARKRAI, - Species.SNIVY, - Species.SERVINE, - Species.SERPERIOR, - Species.DARUMAKA, - Species.DARMANITAN, - Species.ZYGARDE, - Species.DRAMPA, - Species.LUNALA, - Species.BLACEPHALON, - Species.SILICOBRA, - Species.SANDACONDA, - Species.ROARING_MOON, - Species.BLOODMOON_URSALUNA, + SpeciesId.EKANS, + SpeciesId.ARBOK, + SpeciesId.ONIX, + SpeciesId.STEELIX, + SpeciesId.DRATINI, + SpeciesId.DRAGONAIR, + SpeciesId.DRAGONITE, + SpeciesId.CLEFFA, + SpeciesId.CLEFAIRY, + SpeciesId.CLEFABLE, + SpeciesId.UMBREON, + SpeciesId.DUNSPARCE, + SpeciesId.DUDUNSPARCE, + SpeciesId.TEDDIURSA, + SpeciesId.URSARING, + SpeciesId.URSALUNA, + SpeciesId.SEVIPER, + SpeciesId.LUNATONE, + SpeciesId.RAYQUAZA, + SpeciesId.CHINGLING, + SpeciesId.CHIMECHO, + SpeciesId.CRESSELIA, + SpeciesId.DARKRAI, + SpeciesId.SNIVY, + SpeciesId.SERVINE, + SpeciesId.SERPERIOR, + SpeciesId.DARUMAKA, + SpeciesId.DARMANITAN, + SpeciesId.ZYGARDE, + SpeciesId.DRAMPA, + SpeciesId.LUNALA, + SpeciesId.BLACEPHALON, + SpeciesId.SILICOBRA, + SpeciesId.SANDACONDA, + SpeciesId.ROARING_MOON, + SpeciesId.BLOODMOON_URSALUNA, ], classicWaveRewards: [ { wave: 8, type: "SHINY_CHARM" }, @@ -210,28 +210,28 @@ const timedEvents: TimedEvent[] = [ scale: 0.21, availableLangs: ["en", "de", "it", "fr", "ja", "ko", "es-ES", "pt-BR", "zh-CN"], eventEncounters: [ - { species: Species.NIDORAN_F }, - { species: Species.NIDORAN_M }, - { species: Species.IGGLYBUFF }, - { species: Species.SMOOCHUM }, - { species: Species.VOLBEAT }, - { species: Species.ILLUMISE }, - { species: Species.ROSELIA }, - { species: Species.LUVDISC }, - { species: Species.WOOBAT }, - { species: Species.FRILLISH }, - { species: Species.ALOMOMOLA }, - { species: Species.FURFROU, formIndex: 1 }, // Heart Trim - { species: Species.ESPURR }, - { species: Species.SPRITZEE }, - { species: Species.SWIRLIX }, - { species: Species.APPLIN }, - { species: Species.MILCERY }, - { species: Species.INDEEDEE }, - { species: Species.TANDEMAUS }, - { species: Species.ENAMORUS }, + { species: SpeciesId.NIDORAN_F }, + { species: SpeciesId.NIDORAN_M }, + { species: SpeciesId.IGGLYBUFF }, + { species: SpeciesId.SMOOCHUM }, + { species: SpeciesId.VOLBEAT }, + { species: SpeciesId.ILLUMISE }, + { species: SpeciesId.ROSELIA }, + { species: SpeciesId.LUVDISC }, + { species: SpeciesId.WOOBAT }, + { species: SpeciesId.FRILLISH }, + { species: SpeciesId.ALOMOMOLA }, + { species: SpeciesId.FURFROU, formIndex: 1 }, // Heart Trim + { species: SpeciesId.ESPURR }, + { species: SpeciesId.SPRITZEE }, + { species: SpeciesId.SWIRLIX }, + { species: SpeciesId.APPLIN }, + { species: SpeciesId.MILCERY }, + { species: SpeciesId.INDEEDEE }, + { species: SpeciesId.TANDEMAUS }, + { species: SpeciesId.ENAMORUS }, ], - luckBoostedSpecies: [Species.LUVDISC], + luckBoostedSpecies: [SpeciesId.LUVDISC], classicWaveRewards: [ { wave: 8, type: "SHINY_CHARM" }, { wave: 8, type: "ABILITY_CHARM" }, @@ -249,39 +249,39 @@ const timedEvents: TimedEvent[] = [ scale: 0.21, availableLangs: ["en", "de", "it", "fr", "ja", "ko", "es-ES", "pt-BR", "zh-CN"], eventEncounters: [ - { species: Species.PIKACHU, formIndex: 1, blockEvolution: true }, // Partner Form - { species: Species.EEVEE, formIndex: 1, blockEvolution: true }, // Partner Form - { species: Species.CHIKORITA }, - { species: Species.TOTODILE }, - { species: Species.TEPIG }, + { species: SpeciesId.PIKACHU, formIndex: 1, blockEvolution: true }, // Partner Form + { species: SpeciesId.EEVEE, formIndex: 1, blockEvolution: true }, // Partner Form + { species: SpeciesId.CHIKORITA }, + { species: SpeciesId.TOTODILE }, + { species: SpeciesId.TEPIG }, ], luckBoostedSpecies: [ - Species.PICHU, - Species.PIKACHU, - Species.RAICHU, - Species.ALOLA_RAICHU, - Species.PSYDUCK, - Species.GOLDUCK, - Species.EEVEE, - Species.FLAREON, - Species.JOLTEON, - Species.VAPOREON, - Species.ESPEON, - Species.UMBREON, - Species.LEAFEON, - Species.GLACEON, - Species.SYLVEON, - Species.CHIKORITA, - Species.BAYLEEF, - Species.MEGANIUM, - Species.TOTODILE, - Species.CROCONAW, - Species.FERALIGATR, - Species.TEPIG, - Species.PIGNITE, - Species.EMBOAR, - Species.ZYGARDE, - Species.ETERNAL_FLOETTE, + SpeciesId.PICHU, + SpeciesId.PIKACHU, + SpeciesId.RAICHU, + SpeciesId.ALOLA_RAICHU, + SpeciesId.PSYDUCK, + SpeciesId.GOLDUCK, + SpeciesId.EEVEE, + SpeciesId.FLAREON, + SpeciesId.JOLTEON, + SpeciesId.VAPOREON, + SpeciesId.ESPEON, + SpeciesId.UMBREON, + SpeciesId.LEAFEON, + SpeciesId.GLACEON, + SpeciesId.SYLVEON, + SpeciesId.CHIKORITA, + SpeciesId.BAYLEEF, + SpeciesId.MEGANIUM, + SpeciesId.TOTODILE, + SpeciesId.CROCONAW, + SpeciesId.FERALIGATR, + SpeciesId.TEPIG, + SpeciesId.PIGNITE, + SpeciesId.EMBOAR, + SpeciesId.ZYGARDE, + SpeciesId.ETERNAL_FLOETTE, ], classicWaveRewards: [ { wave: 8, type: "SHINY_CHARM" }, @@ -321,28 +321,28 @@ const timedEvents: TimedEvent[] = [ shinyMultiplier: 2, upgradeUnlockedVouchers: true, eventEncounters: [ - { species: Species.HOPPIP }, - { species: Species.CELEBI }, - { species: Species.VOLBEAT }, - { species: Species.ILLUMISE }, - { species: Species.SPOINK }, - { species: Species.LILEEP }, - { species: Species.SHINX }, - { species: Species.PACHIRISU }, - { species: Species.CHERUBI }, - { species: Species.MUNCHLAX }, - { species: Species.TEPIG }, - { species: Species.PANSAGE }, - { species: Species.PANSEAR }, - { species: Species.PANPOUR }, - { species: Species.DARUMAKA }, - { species: Species.ARCHEN }, - { species: Species.DEERLING, formIndex: 0 }, // Spring Deerling - { species: Species.CLAUNCHER }, - { species: Species.WISHIWASHI }, - { species: Species.DRAMPA }, - { species: Species.JANGMO_O }, - { species: Species.APPLIN }, + { species: SpeciesId.HOPPIP }, + { species: SpeciesId.CELEBI }, + { species: SpeciesId.VOLBEAT }, + { species: SpeciesId.ILLUMISE }, + { species: SpeciesId.SPOINK }, + { species: SpeciesId.LILEEP }, + { species: SpeciesId.SHINX }, + { species: SpeciesId.PACHIRISU }, + { species: SpeciesId.CHERUBI }, + { species: SpeciesId.MUNCHLAX }, + { species: SpeciesId.TEPIG }, + { species: SpeciesId.PANSAGE }, + { species: SpeciesId.PANSEAR }, + { species: SpeciesId.PANPOUR }, + { species: SpeciesId.DARUMAKA }, + { species: SpeciesId.ARCHEN }, + { species: SpeciesId.DEERLING, formIndex: 0 }, // Spring Deerling + { species: SpeciesId.CLAUNCHER }, + { species: SpeciesId.WISHIWASHI }, + { species: SpeciesId.DRAMPA }, + { species: SpeciesId.JANGMO_O }, + { species: SpeciesId.APPLIN }, ], classicWaveRewards: [ { wave: 8, type: "SHINY_CHARM" }, @@ -510,8 +510,8 @@ export class TimedEventManager { return ret; } - getEventLuckBoostedSpecies(): Species[] { - const ret: Species[] = []; + getEventLuckBoostedSpecies(): SpeciesId[] { + const ret: SpeciesId[] = []; timedEvents .filter(te => this.isActive(te)) .map(te => { diff --git a/src/ui/battle-flyout.ts b/src/ui/battle-flyout.ts index f8ef5fc1ec4..9a2180eccee 100644 --- a/src/ui/battle-flyout.ts +++ b/src/ui/battle-flyout.ts @@ -6,7 +6,7 @@ import type Move from "#app/data/moves/move"; import type { BerryUsedEvent, MoveUsedEvent } from "../events/battle-scene"; import { BattleSceneEventType } from "../events/battle-scene"; import { BerryType } from "#enums/berry-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { UiTheme } from "#enums/ui-theme"; import { getPokemonNameWithAffix } from "#app/messages"; @@ -154,7 +154,7 @@ export default class BattleFlyout extends Phaser.GameObjects.Container { /** Updates all of the {@linkcode MoveInfo} objects in the moveInfo array */ private onMoveUsed(event: Event) { const moveUsedEvent = event as MoveUsedEvent; - if (!moveUsedEvent || moveUsedEvent.pokemonId !== this.pokemon?.id || moveUsedEvent.move.id === Moves.STRUGGLE) { + if (!moveUsedEvent || moveUsedEvent.pokemonId !== this.pokemon?.id || moveUsedEvent.move.id === MoveId.STRUGGLE) { // Ignore Struggle return; } diff --git a/src/ui/candy-bar.ts b/src/ui/candy-bar.ts index f7a01b83093..189a418eec8 100644 --- a/src/ui/candy-bar.ts +++ b/src/ui/candy-bar.ts @@ -3,14 +3,14 @@ import { globalScene } from "#app/global-scene"; import { TextStyle, addTextObject } from "./text"; import { argbFromRgba } from "@material/material-color-utilities"; import { rgbHexToRgba } from "#app/utils/common"; -import type { Species } from "#enums/species"; +import type { SpeciesId } from "#enums/species-id"; export default class CandyBar extends Phaser.GameObjects.Container { private bg: Phaser.GameObjects.NineSlice; private candyIcon: Phaser.GameObjects.Sprite; private candyOverlayIcon: Phaser.GameObjects.Sprite; private countText: Phaser.GameObjects.Text; - private speciesId: Species; + private speciesId: SpeciesId; private tween: Phaser.Tweens.Tween | null; private autoHideTimer: NodeJS.Timeout | null; @@ -47,7 +47,7 @@ export default class CandyBar extends Phaser.GameObjects.Container { this.shown = false; } - showStarterSpeciesCandy(starterSpeciesId: Species, count: number): Promise { + showStarterSpeciesCandy(starterSpeciesId: SpeciesId, count: number): Promise { return new Promise(resolve => { if (this.shown) { if (this.speciesId === starterSpeciesId) { diff --git a/src/ui/command-ui-handler.ts b/src/ui/command-ui-handler.ts index ff27e9c41c0..fbfd4d2623b 100644 --- a/src/ui/command-ui-handler.ts +++ b/src/ui/command-ui-handler.ts @@ -10,7 +10,7 @@ import { globalScene } from "#app/global-scene"; import { TerastallizeAccessModifier } from "#app/modifier/modifier"; import { PokemonType } from "#enums/pokemon-type"; import { getTypeRgb } from "#app/data/type"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; export enum Command { FIGHT = 0, @@ -198,7 +198,7 @@ export default class CommandUiHandler extends UiHandler { const hasTeraMod = !!globalScene.getModifiers(TerastallizeAccessModifier).length; const activePokemon = globalScene.getField()[this.fieldIndex]; const isBlockedForm = - activePokemon.isMega() || activePokemon.isMax() || activePokemon.hasSpecies(Species.NECROZMA, "ultra"); + activePokemon.isMega() || activePokemon.isMax() || activePokemon.hasSpecies(SpeciesId.NECROZMA, "ultra"); const currentTeras = globalScene.arena.playerTerasUsed; const plannedTera = globalScene.currentBattle.preTurnCommands[0]?.command === Command.TERA && this.fieldIndex > 0 ? 1 : 0; diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 74d4e5bcb17..452ffcf5192 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -25,8 +25,8 @@ import { applyChallenges, ChallengeType } from "#app/data/challenge"; import MoveInfoOverlay from "#app/ui/move-info-overlay"; import i18next from "i18next"; import type BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { getPokemonNameWithAffix } from "#app/messages"; import type { CommandPhase } from "#app/phases/command-phase"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; @@ -184,7 +184,7 @@ export default class PartyUiHandler extends MessageUiHandler { private selectCallback: PartySelectCallback | PartyModifierTransferSelectCallback | null; private selectFilter: PokemonSelectFilter | PokemonModifierTransferSelectFilter; private moveSelectFilter: PokemonMoveSelectFilter; - private tmMoveId: Moves; + private tmMoveId: MoveId; private showMovePp: boolean; private iconAnimHandler: PokemonIconAnimHandler; @@ -346,7 +346,7 @@ export default class PartyUiHandler extends MessageUiHandler { args.length > 4 && args[4] instanceof Function ? (args[4] as PokemonMoveSelectFilter) : PartyUiHandler.FilterAllMoves; - this.tmMoveId = args.length > 5 && args[5] ? args[5] : Moves.NONE; + this.tmMoveId = args.length > 5 && args[5] ? args[5] : MoveId.NONE; this.showMovePp = args.length > 6 && args[6]; this.partyContainer.setVisible(true); @@ -1165,8 +1165,7 @@ export default class PartyUiHandler extends MessageUiHandler { this.partyUiMode !== PartyUiMode.FAINT_SWITCH && globalScene.findModifier( m => - m instanceof SwitchEffectTransferModifier && - m.pokemonId === globalScene.getPlayerField()[this.fieldIndex].id, + m instanceof SwitchEffectTransferModifier && m.pokemonId === globalScene.getPlayerField()[this.fieldIndex].id, ) ); } @@ -1579,7 +1578,7 @@ export default class PartyUiHandler extends MessageUiHandler { formChangeItemModifiers = formChangeItemModifiers.filter( m => m.active || m.formChangeItem === FormChangeItem.ULTRANECROZIUM_Z, ); - } else if (pokemon.species.speciesId === Species.NECROZMA) { + } else if (pokemon.species.speciesId === SpeciesId.NECROZMA) { // no form is currently active. the user has to activate some form, except ULTRANECROZIUM_Z formChangeItemModifiers = formChangeItemModifiers.filter( m => m.formChangeItem !== FormChangeItem.ULTRANECROZIUM_Z, @@ -1654,7 +1653,7 @@ class PartySlot extends Phaser.GameObjects.Container { pokemon: PlayerPokemon, iconAnimHandler: PokemonIconAnimHandler, partyUiMode: PartyUiMode, - tmMoveId: Moves, + tmMoveId: MoveId, ) { super( globalScene, @@ -1677,7 +1676,7 @@ class PartySlot extends Phaser.GameObjects.Container { return this.pokemon; } - setup(partyUiMode: PartyUiMode, tmMoveId: Moves) { + setup(partyUiMode: PartyUiMode, tmMoveId: MoveId) { const currentLanguage = i18next.resolvedLanguage ?? "en"; const offsetJa = currentLanguage === "ja"; diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index ab729db8c26..263842bd4f9 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -36,8 +36,8 @@ import MoveInfoOverlay from "#app/ui/move-info-overlay"; import PokedexInfoOverlay from "#app/ui/pokedex-info-overlay"; import { getEggTierForSpecies } from "#app/data/egg"; import { Device } from "#enums/devices"; -import type { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import type { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Button } from "#enums/buttons"; import { EggSourceType } from "#enums/egg-source-types"; import { @@ -58,9 +58,9 @@ import { getEnumKeys } from "#app/utils/common"; import { speciesTmMoves } from "#app/data/balance/tms"; import type { BiomeTierTod } from "#app/data/balance/biomes"; import { BiomePoolTier, catchableSpecies } from "#app/data/balance/biomes"; -import { Biome } from "#app/enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { TimeOfDay } from "#app/enums/time-of-day"; -import type { Abilities } from "#app/enums/abilities"; +import type { AbilityId } from "#enums/ability-id"; import { BaseStatsOverlay } from "#app/ui/base-stats-overlay"; import { globalScene } from "#app/global-scene"; import type BBCodeText from "phaser3-rex-plugins/plugins/gameobjects/tagtext/bbcodetext/BBCodeText"; @@ -203,15 +203,15 @@ export default class PokedexPageUiHandler extends MessageUiHandler { private species: PokemonSpecies; private starterId: number; private formIndex: number; - private speciesLoaded: Map = new Map(); + private speciesLoaded: Map = new Map(); private levelMoves: LevelMoves; - private eggMoves: Moves[] = []; + private eggMoves: MoveId[] = []; private hasEggMoves: boolean[] = []; - private tmMoves: Moves[] = []; - private ability1: Abilities; - private ability2: Abilities | undefined; - private abilityHidden: Abilities | undefined; - private passive: Abilities; + private tmMoves: MoveId[] = []; + private ability1: AbilityId; + private ability2: AbilityId | undefined; + private abilityHidden: AbilityId | undefined; + private passive: AbilityId; private hasPassive: boolean; private hasAbilities: number[]; private biomes: BiomeTierTod[]; @@ -256,7 +256,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { protected scale = 0.1666666667; private menuDescriptions: string[]; private isFormGender: boolean; - private filteredIndices: Species[] | null = null; + private filteredIndices: SpeciesId[] | null = null; private availableVariants: number; private unlockedVariants: boolean[]; @@ -824,7 +824,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { const allBiomes = catchableSpecies[species.speciesId] ?? []; this.preBiomes = this.sanitizeBiomes( (catchableSpecies[this.starterId] ?? []).filter( - b => !allBiomes.some(bm => b.biome === bm.biome && b.tier === bm.tier) && !(b.biome === Biome.TOWN), + b => !allBiomes.some(bm => b.biome === bm.biome && b.tier === bm.tier) && !(b.biome === BiomeId.TOWN), ), this.starterId, ); @@ -863,13 +863,13 @@ export default class PokedexPageUiHandler extends MessageUiHandler { // Function to ensure that forms appear in the appropriate biome and tod sanitizeBiomes(biomes: BiomeTierTod[], speciesId: number): BiomeTierTod[] { - if (speciesId === Species.BURMY || speciesId === Species.WORMADAM) { + if (speciesId === SpeciesId.BURMY || speciesId === SpeciesId.WORMADAM) { return biomes.filter(b => { const formIndex = (() => { switch (b.biome) { - case Biome.BEACH: + case BiomeId.BEACH: return 1; - case Biome.SLUM: + case BiomeId.SLUM: return 2; default: return 0; @@ -878,19 +878,19 @@ export default class PokedexPageUiHandler extends MessageUiHandler { return this.formIndex === formIndex; }); } - if (speciesId === Species.ROTOM) { + if (speciesId === SpeciesId.ROTOM) { return biomes.filter(b => { const formIndex = (() => { switch (b.biome) { - case Biome.VOLCANO: + case BiomeId.VOLCANO: return 1; - case Biome.SEA: + case BiomeId.SEA: return 2; - case Biome.ICE_CAVE: + case BiomeId.ICE_CAVE: return 3; - case Biome.MOUNTAIN: + case BiomeId.MOUNTAIN: return 4; - case Biome.TALL_GRASS: + case BiomeId.TALL_GRASS: return 5; default: return 0; @@ -899,7 +899,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { return this.formIndex === formIndex; }); } - if (speciesId === Species.LYCANROC) { + if (speciesId === SpeciesId.LYCANROC) { return biomes.filter(b => { const formIndex = (() => { switch (b.tod[0]) { @@ -1089,11 +1089,11 @@ export default class PokedexPageUiHandler extends MessageUiHandler { * @returns the id of the corresponding starter */ getStarterSpeciesId(speciesId): number { - if (speciesId === Species.PIKACHU) { + if (speciesId === SpeciesId.PIKACHU) { if ([0, 1, 8].includes(this.formIndex)) { - return Species.PICHU; + return SpeciesId.PICHU; } - return Species.PIKACHU; + return SpeciesId.PIKACHU; } if (speciesStarterCosts.hasOwnProperty(speciesId)) { return speciesId; @@ -1477,7 +1477,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.biomes.map(b => { options.push({ label: - i18next.t(`biome:${Biome[b.biome].toUpperCase()}`) + + i18next.t(`biome:${BiomeId[b.biome].toUpperCase()}`) + " - " + i18next.t(`biome:${BiomePoolTier[b.tier].toUpperCase()}`) + (b.tod.length === 1 && b.tod[0] === -1 @@ -1498,7 +1498,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.preBiomes.map(b => { options.push({ label: - i18next.t(`biome:${Biome[b.biome].toUpperCase()}`) + + i18next.t(`biome:${BiomeId[b.biome].toUpperCase()}`) + " - " + i18next.t(`biome:${BiomePoolTier[b.tier].toUpperCase()}`) + (b.tod.length === 1 && b.tod[0] === -1 @@ -2581,7 +2581,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.pokemonUncaughtText.setVisible(false); this.pokemonCaughtCountText.setText(`${this.speciesStarterDexEntry?.caughtCount}`); - if (species.speciesId === Species.MANAPHY || species.speciesId === Species.PHIONE) { + if (species.speciesId === SpeciesId.MANAPHY || species.speciesId === SpeciesId.PHIONE) { this.pokemonHatchedIcon.setFrame("manaphy"); } else { this.pokemonHatchedIcon.setFrame(getEggTierForSpecies(species)); @@ -2614,7 +2614,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.pokemonCandyIcon.setTint(argbFromRgba(rgbHexToRgba(colorScheme[0]))); this.pokemonCandyOverlayIcon.setTint(argbFromRgba(rgbHexToRgba(colorScheme[1]))); this.pokemonCandyCountText.setText( - `x${species.speciesId === Species.PIKACHU ? 0 : globalScene.gameData.starterData[this.starterId].candyCount}`, + `x${species.speciesId === SpeciesId.PIKACHU ? 0 : globalScene.gameData.starterData[this.starterId].candyCount}`, ); this.pokemonCandyContainer.setVisible(true); diff --git a/src/ui/pokedex-ui-handler.ts b/src/ui/pokedex-ui-handler.ts index 179d5b4664b..8b3633d7422 100644 --- a/src/ui/pokedex-ui-handler.ts +++ b/src/ui/pokedex-ui-handler.ts @@ -19,14 +19,14 @@ import { TextStyle, addTextObject } from "#app/ui/text"; import { UiMode } from "#enums/ui-mode"; import { SettingKeyboard } from "#app/system/settings/settings-keyboard"; import { Passive as PassiveAttr } from "#enums/passive"; -import type { Species } from "#enums/species"; +import type { SpeciesId } from "#enums/species-id"; import { Button } from "#enums/buttons"; import { DropDown, DropDownLabel, DropDownOption, DropDownState, DropDownType, SortCriteria } from "#app/ui/dropdown"; import { PokedexMonContainer } from "#app/ui/pokedex-mon-container"; import { FilterBar } from "#app/ui/filter-bar"; import { DropDownColumn } from "#enums/drop-down-column"; import { ScrollBar } from "#app/ui/scroll-bar"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { getPassiveCandyCount, getValueReductionCandyCounts, @@ -41,7 +41,7 @@ import { allAbilities } from "#app/data/data-lists"; import { allMoves } from "#app/data/data-lists"; import { speciesTmMoves } from "#app/data/balance/tms"; import { pokemonStarters } from "#app/data/balance/pokemon-evolutions"; -import { Biome } from "#enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { globalScene } from "#app/global-scene"; interface LanguageSetting { @@ -175,7 +175,7 @@ export default class PokedexUiHandler extends MessageUiHandler { private oldCursor = -1; private lastSpecies: PokemonSpecies; - private speciesLoaded: Map = new Map(); + private speciesLoaded: Map = new Map(); private pokerusSpecies: PokemonSpecies[] = []; private speciesStarterDexEntry: DexEntry | null; @@ -227,7 +227,7 @@ export default class PokedexUiHandler extends MessageUiHandler { private showFormTrayIconElement: Phaser.GameObjects.Sprite; private showFormTrayLabel: Phaser.GameObjects.Text; private canShowFormTray: boolean; - private filteredIndices: Species[]; + private filteredIndices: SpeciesId[]; constructor() { super(UiMode.POKEDEX); @@ -314,11 +314,11 @@ export default class PokedexUiHandler extends MessageUiHandler { ); // biome filter, making an entry in the dropdown for each biome - const biomeOptions = Object.values(Biome) + const biomeOptions = Object.values(BiomeId) .filter(value => typeof value === "number") // Filter numeric values from the enum .map( (biomeValue, index) => - new DropDownOption(index, new DropDownLabel(i18next.t(`biome:${Biome[biomeValue].toUpperCase()}`))), + new DropDownOption(index, new DropDownLabel(i18next.t(`biome:${BiomeId[biomeValue].toUpperCase()}`))), ); biomeOptions.push(new DropDownOption(biomeOptions.length, new DropDownLabel(i18next.t("filterBar:uncatchable")))); const biomeDropDown: DropDown = new DropDown(0, 0, biomeOptions, this.updateStarters, DropDownType.HYBRID); @@ -1459,7 +1459,7 @@ export default class PokedexUiHandler extends MessageUiHandler { // Biome filter const indexToBiome = new Map( - Object.values(Biome) + Object.values(BiomeId) .map((value, index) => (typeof value === "string" ? [index, value] : undefined)) .filter((entry): entry is [number, string] => entry !== undefined), ); @@ -1467,7 +1467,7 @@ export default class PokedexUiHandler extends MessageUiHandler { // We get biomes for both the mon and its starters to ensure that evolutions get the correct filters. // TODO: We might also need to do it the other way around. - const biomes = catchableSpecies[species.speciesId].concat(catchableSpecies[starterId]).map(b => Biome[b.biome]); + const biomes = catchableSpecies[species.speciesId].concat(catchableSpecies[starterId]).map(b => BiomeId[b.biome]); if (biomes.length === 0) { biomes.push("Uncatchable"); } @@ -1590,7 +1590,7 @@ export default class PokedexUiHandler extends MessageUiHandler { // HA Filter const speciesHasHiddenAbility = - species.abilityHidden !== species.ability1 && species.abilityHidden !== Abilities.NONE; + species.abilityHidden !== species.ability1 && species.abilityHidden !== AbilityId.NONE; const hasHA = starterData.abilityAttr & AbilityAttr.ABILITY_HIDDEN; const fitsHA = this.filterBar.getVals(DropDownColumn.MISC).some(misc => { if (misc.val === "HIDDEN_ABILITY" && misc.state === DropDownState.ON) { diff --git a/src/ui/pokemon-hatch-info-container.ts b/src/ui/pokemon-hatch-info-container.ts index 5471a769d95..afc58c63953 100644 --- a/src/ui/pokemon-hatch-info-container.ts +++ b/src/ui/pokemon-hatch-info-container.ts @@ -5,7 +5,7 @@ import { rgbHexToRgba, padInt } from "#app/utils/common"; import { TextStyle, addTextObject } from "#app/ui/text"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { allMoves } from "#app/data/data-lists"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { getEggTierForSpecies } from "#app/data/egg"; import { starterColors } from "#app/global-vars/starter-colors"; import { globalScene } from "#app/global-scene"; @@ -182,7 +182,7 @@ export default class PokemonHatchInfoContainer extends PokemonInfoContainer { // will always have at least one egg move this.pokemonEggMovesContainer.setVisible(true); - if (species.speciesId === Species.MANAPHY || species.speciesId === Species.PHIONE) { + if (species.speciesId === SpeciesId.MANAPHY || species.speciesId === SpeciesId.PHIONE) { this.pokemonHatchedIcon.setFrame("manaphy"); } else { this.pokemonHatchedIcon.setFrame(getEggTierForSpecies(species)); diff --git a/src/ui/run-info-ui-handler.ts b/src/ui/run-info-ui-handler.ts index 8487533f465..c8dade8878f 100644 --- a/src/ui/run-info-ui-handler.ts +++ b/src/ui/run-info-ui-handler.ts @@ -21,7 +21,7 @@ import { getNatureStatMultiplier, getNatureName } from "../data/nature"; import { getVariantTint } from "#app/sprites/variant"; // biome-ignore lint/style/noNamespaceImport: See `src/system/game-data.ts` import * as Modifier from "#app/modifier/modifier"; -import type { Species } from "#enums/species"; +import type { SpeciesId } from "#enums/species-id"; import { PlayerGender } from "#enums/player-gender"; import { SettingKeyboard } from "#app/system/settings/settings-keyboard"; import { getBiomeName } from "#app/data/balance/biomes"; @@ -1025,7 +1025,7 @@ export default class RunInfoUiHandler extends UiHandler { ignoreTimeTint: true, }); this.hallofFameContainer.add(pokemonSprite); - const speciesLoaded: Map = new Map(); + const speciesLoaded: Map = new Map(); speciesLoaded.set(id, false); const female = pkmn.gender === 1; diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 945ddaa6ed4..3bea0b08698 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -47,8 +47,8 @@ import { applyChallenges, ChallengeType } from "#app/data/challenge"; import MoveInfoOverlay from "#app/ui/move-info-overlay"; import { getEggTierForSpecies } from "#app/data/egg"; import { Device } from "#enums/devices"; -import type { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import type { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Button } from "#enums/buttons"; import { EggSourceType } from "#enums/egg-source-types"; import { DropDown, DropDownLabel, DropDownOption, DropDownState, DropDownType, SortCriteria } from "#app/ui/dropdown"; @@ -59,7 +59,7 @@ import { ScrollBar } from "#app/ui/scroll-bar"; import { SelectChallengePhase } from "#app/phases/select-challenge-phase"; import { EncounterPhase } from "#app/phases/encounter-phase"; import { TitlePhase } from "#app/phases/title-phase"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { getPassiveCandyCount, getValueReductionCandyCounts, @@ -162,15 +162,15 @@ const languageSettings: { [key: string]: LanguageSetting } = { starterInfoYOffset: 0.5, starterInfoXPos: 29, }, - da:{ + da: { starterInfoTextSize: "56px", instructionTextSize: "38px", }, - tr:{ + tr: { starterInfoTextSize: "56px", instructionTextSize: "38px", }, - ro:{ + ro: { starterInfoTextSize: "56px", instructionTextSize: "38px", }, @@ -356,7 +356,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { private allSpecies: PokemonSpecies[] = []; private lastSpecies: PokemonSpecies; - private speciesLoaded: Map = new Map(); + private speciesLoaded: Map = new Map(); public starterSpecies: PokemonSpecies[] = []; private pokerusSpecies: PokemonSpecies[] = []; private starterAttr: bigint[] = []; @@ -365,7 +365,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { private starterTeras: PokemonType[] = []; private starterMovesets: StarterMoveset[] = []; private speciesStarterDexEntry: DexEntry | null; - private speciesStarterMoves: Moves[]; + private speciesStarterMoves: MoveId[]; private canCycleShiny: boolean; private canCycleForm: boolean; private canCycleGender: boolean; @@ -795,7 +795,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.randomCursorObj.setOrigin(0, 0); this.starterSelectContainer.add(this.randomCursorObj); - const starterSpecies: Species[] = []; + const starterSpecies: SpeciesId[] = []; const starterBoxContainer = globalScene.add.container(speciesContainerX + 6, 9); //115 @@ -1970,7 +1970,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { ui.setModeWithoutClear(UiMode.OPTION_SELECT, { options: moveset - .map((m: Moves, i: number) => { + .map((m: MoveId, i: number) => { const option: OptionSelectItem = { label: allMoves[m].name, handler: () => { @@ -1980,7 +1980,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { `${i18next.t("starterSelectUiHandler:selectMoveSwapWith")} ${allMoves[m].name}.`, null, () => { - const possibleMoves = this.speciesStarterMoves.filter((sm: Moves) => sm !== m); + const possibleMoves = this.speciesStarterMoves.filter((sm: MoveId) => sm !== m); this.moveInfoOverlay.show(allMoves[possibleMoves[0]]); ui.setModeWithoutClear(UiMode.OPTION_SELECT, { @@ -2765,7 +2765,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.checkIconId(this.starterIcons[index], species, props.female, props.formIndex, props.shiny, props.variant); } - switchMoveHandler(i: number, newMove: Moves, move: Moves) { + switchMoveHandler(i: number, newMove: MoveId, move: MoveId) { const speciesId = this.lastSpecies.speciesId; const existingMoveIndex = this.starterMoveset?.indexOf(newMove)!; // TODO: is this bang correct? this.starterMoveset![i] = newMove; // TODO: is this bang correct? @@ -3171,7 +3171,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { // HA Filter const speciesHasHiddenAbility = container.species.abilityHidden !== container.species.ability1 && - container.species.abilityHidden !== Abilities.NONE; + container.species.abilityHidden !== AbilityId.NONE; const hasHA = starterData.abilityAttr & AbilityAttr.ABILITY_HIDDEN; const fitsHA = this.filterBar.getVals(DropDownColumn.MISC).some(misc => { if (misc.val === "HIDDEN_ABILITY" && misc.state === DropDownState.ON) { @@ -3537,7 +3537,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonPassiveLabelText.setVisible(true); this.pokemonNatureLabelText.setVisible(true); this.pokemonCaughtCountText.setText(`${this.speciesStarterDexEntry.caughtCount}`); - if (species.speciesId === Species.MANAPHY || species.speciesId === Species.PHIONE) { + if (species.speciesId === SpeciesId.MANAPHY || species.speciesId === SpeciesId.PHIONE) { this.pokemonHatchedIcon.setFrame("manaphy"); } else { this.pokemonHatchedIcon.setFrame(getEggTierForSpecies(species)); diff --git a/src/ui/target-select-ui-handler.ts b/src/ui/target-select-ui-handler.ts index 5e14e5f7771..a2f89d38970 100644 --- a/src/ui/target-select-ui-handler.ts +++ b/src/ui/target-select-ui-handler.ts @@ -4,7 +4,7 @@ import UiHandler from "./ui-handler"; import { isNullOrUndefined, fixedInt } from "#app/utils/common"; import { getMoveTargets } from "../data/moves/move"; import { Button } from "#enums/buttons"; -import type { Moves } from "#enums/moves"; +import type { MoveId } from "#enums/move-id"; import type Pokemon from "#app/field/pokemon"; import type { ModifierBar } from "#app/modifier/modifier"; import { SubstituteTag } from "#app/data/battler-tags"; @@ -14,7 +14,7 @@ export type TargetSelectCallback = (targets: BattlerIndex[]) => void; export default class TargetSelectUiHandler extends UiHandler { private fieldIndex: number; - private move: Moves; + private move: MoveId; private targetSelectCallback: TargetSelectCallback; private cursor0: number; // associated with BattlerIndex.PLAYER private cursor1: number; // associated with BattlerIndex.PLAYER_2 @@ -42,7 +42,7 @@ export default class TargetSelectUiHandler extends UiHandler { super.show(args); this.fieldIndex = args[0] as number; - this.move = args[1] as Moves; + this.move = args[1] as MoveId; this.targetSelectCallback = args[2] as TargetSelectCallback; const user = globalScene.getPlayerField()[this.fieldIndex]; diff --git a/src/ui/title-ui-handler.ts b/src/ui/title-ui-handler.ts index bed4d568481..29a354dbe01 100644 --- a/src/ui/title-ui-handler.ts +++ b/src/ui/title-ui-handler.ts @@ -8,7 +8,7 @@ import { TimedEventDisplay } from "#app/timed-event-manager"; import { version } from "../../package.json"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; import { globalScene } from "#app/global-scene"; -import type { Species } from "#enums/species"; +import type { SpeciesId } from "#enums/species-id"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { PlayerGender } from "#enums/player-gender"; import { timedEventManager } from "#app/global-event-manager"; @@ -105,7 +105,7 @@ export default class TitleUiHandler extends OptionSelectUiHandler { /** Used solely to display a random Pokémon name in a splash message. */ randomPokemon(): void { const rand = randInt(1025, 1); - const pokemon = getPokemonSpecies(rand as Species); + const pokemon = getPokemonSpecies(rand as SpeciesId); if ( this.splashMessage === "splashMessages:underratedPokemon" || this.splashMessage === "splashMessages:dontTalkAboutThePokemonIncident" || diff --git a/src/utils/common.ts b/src/utils/common.ts index 1c7ea60da16..29923d7ddd4 100644 --- a/src/utils/common.ts +++ b/src/utils/common.ts @@ -1,5 +1,5 @@ import { MoneyFormat } from "#enums/money-format"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import i18next from "i18next"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; import type { Variant } from "#app/sprites/variant"; @@ -567,8 +567,8 @@ export function isBetween(num: number, min: number, max: number): boolean { * * @param move the move for which the animation filename is needed */ -export function animationFileName(move: Moves): string { - return Moves[move].toLowerCase().replace(/\_/g, "-"); +export function animationFileName(move: MoveId): string { + return MoveId[move].toLowerCase().replace(/\_/g, "-"); } /** diff --git a/test/abilities/ability_duplication.test.ts b/test/abilities/ability_duplication.test.ts index de429045bb8..d392b7043e4 100644 --- a/test/abilities/ability_duplication.test.ts +++ b/test/abilities/ability_duplication.test.ts @@ -1,7 +1,7 @@ import { Stat } from "#app/enums/stat"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; @@ -23,17 +23,17 @@ describe("Ability Duplication", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .battleStyle("single") - .ability(Abilities.HUGE_POWER) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .ability(AbilityId.HUGE_POWER) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("huge power should only be applied once if both normal and passive", async () => { - game.override.passiveAbility(Abilities.HUGE_POWER); + game.override.passiveAbility(AbilityId.HUGE_POWER); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const [magikarp] = game.scene.getPlayerField(); const magikarpAttack = magikarp.getEffectiveStat(Stat.ATK); @@ -44,9 +44,9 @@ describe("Ability Duplication", () => { }); it("huge power should stack with pure power", async () => { - game.override.passiveAbility(Abilities.PURE_POWER); + game.override.passiveAbility(AbilityId.PURE_POWER); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const [magikarp] = game.scene.getPlayerField(); const magikarpAttack = magikarp.getEffectiveStat(Stat.ATK); diff --git a/test/abilities/ability_timing.test.ts b/test/abilities/ability_timing.test.ts index 6128a3e6196..2ba1e821f8a 100644 --- a/test/abilities/ability_timing.test.ts +++ b/test/abilities/ability_timing.test.ts @@ -3,8 +3,8 @@ import { CommandPhase } from "#app/phases/command-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; import i18next from "#app/plugins/i18n"; import { UiMode } from "#enums/ui-mode"; -import { Abilities } from "#enums/abilities"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -28,15 +28,15 @@ describe("Ability Timing", () => { game.override .battleStyle("single") - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.INTIMIDATE) - .ability(Abilities.BALL_FETCH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.INTIMIDATE) + .ability(AbilityId.BALL_FETCH); vi.spyOn(i18next, "t"); }); it("should trigger after switch check", async () => { game.settings.battleStyle = BattleStyle.SWITCH; - await game.classicMode.runToSummon([Species.EEVEE, Species.FEEBAS]); + await game.classicMode.runToSummon([SpeciesId.EEVEE, SpeciesId.FEEBAS]); game.onNextPrompt( "CheckSwitchPhase", diff --git a/test/abilities/analytic.test.ts b/test/abilities/analytic.test.ts index 108c712da00..bf6ef72c3f1 100644 --- a/test/abilities/analytic.test.ts +++ b/test/abilities/analytic.test.ts @@ -1,8 +1,8 @@ import { BattlerIndex } from "#app/battle"; import { isBetween, toDmgValue } from "#app/utils/common"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -24,29 +24,29 @@ describe("Abilities - Analytic", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.TACKLE]) - .ability(Abilities.ANALYTIC) + .moveset([MoveId.SPLASH, MoveId.TACKLE]) + .ability(AbilityId.ANALYTIC) .battleStyle("single") .disableCrits() .startingLevel(200) .enemyLevel(200) - .enemySpecies(Species.SNORLAX) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.SNORLAX) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should increase damage if the user moves last", async () => { - await game.classicMode.startBattle([Species.ARCEUS]); + await game.classicMode.startBattle([SpeciesId.ARCEUS]); const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); const damage1 = enemy.getInverseHp(); enemy.hp = enemy.getMaxHp(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); expect(isBetween(enemy.getInverseHp(), toDmgValue(damage1 * 1.3) - 3, toDmgValue(damage1 * 1.3) + 3)).toBe(true); @@ -54,26 +54,26 @@ describe("Abilities - Analytic", () => { it("should increase damage only if the user moves last in doubles", async () => { game.override.battleStyle("double"); - await game.classicMode.startBattle([Species.GENGAR, Species.SHUCKLE]); + await game.classicMode.startBattle([SpeciesId.GENGAR, SpeciesId.SHUCKLE]); const [enemy] = game.scene.getEnemyField(); - game.move.select(Moves.TACKLE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.TACKLE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.toNextTurn(); const damage1 = enemy.getInverseHp(); enemy.hp = enemy.getMaxHp(); - game.move.select(Moves.TACKLE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.TACKLE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER]); await game.toNextTurn(); expect(isBetween(enemy.getInverseHp(), toDmgValue(damage1 * 1.3) - 3, toDmgValue(damage1 * 1.3) + 3)).toBe(true); enemy.hp = enemy.getMaxHp(); - game.move.select(Moves.TACKLE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.TACKLE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("BerryPhase"); expect(enemy.getInverseHp()).toBe(damage1); diff --git a/test/abilities/arena_trap.test.ts b/test/abilities/arena_trap.test.ts index f37b8a2859f..cc6888be102 100644 --- a/test/abilities/arena_trap.test.ts +++ b/test/abilities/arena_trap.test.ts @@ -1,7 +1,7 @@ import { allAbilities } from "#app/data/data-lists"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; @@ -23,11 +23,11 @@ describe("Abilities - Arena Trap", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Moves.SPLASH) - .ability(Abilities.ARENA_TRAP) - .enemySpecies(Species.RALTS) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.TELEPORT); + .moveset(MoveId.SPLASH) + .ability(AbilityId.ARENA_TRAP) + .enemySpecies(SpeciesId.RALTS) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.TELEPORT); }); // TODO: Enable test when Issue #935 is addressed @@ -38,7 +38,7 @@ describe("Abilities - Arena Trap", () => { const enemy = game.scene.getEnemyPokemon(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); @@ -54,32 +54,32 @@ describe("Abilities - Arena Trap", () => { }); /** - * This checks if the Player Pokemon is able to switch out/run away after the Enemy Pokemon with {@linkcode Abilities.ARENA_TRAP} - * is forcefully moved out of the field from moves such as Roar {@linkcode Moves.ROAR} + * This checks if the Player Pokemon is able to switch out/run away after the Enemy Pokemon with {@linkcode AbilityId.ARENA_TRAP} + * is forcefully moved out of the field from moves such as Roar {@linkcode MoveId.ROAR} * * Note: It should be able to switch out/run away */ it("should lift if pokemon with this ability leaves the field", async () => { game.override .battleStyle("double") - .enemyMoveset(Moves.SPLASH) - .moveset([Moves.ROAR, Moves.SPLASH]) - .ability(Abilities.BALL_FETCH); - await game.classicMode.startBattle([Species.MAGIKARP, Species.SUDOWOODO, Species.LUNATONE]); + .enemyMoveset(MoveId.SPLASH) + .moveset([MoveId.ROAR, MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.SUDOWOODO, SpeciesId.LUNATONE]); const [enemy1, enemy2] = game.scene.getEnemyField(); const [player1, player2] = game.scene.getPlayerField(); - vi.spyOn(enemy1, "getAbility").mockReturnValue(allAbilities[Abilities.ARENA_TRAP]); + vi.spyOn(enemy1, "getAbility").mockReturnValue(allAbilities[AbilityId.ARENA_TRAP]); - game.move.select(Moves.ROAR); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.ROAR); + game.move.select(MoveId.SPLASH, 1); // This runs the fist command phase where the moves are selected await game.toNextTurn(); // During the next command phase the player pokemons should not be trapped anymore - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(player1.isTrapped()).toBe(false); diff --git a/test/abilities/aroma_veil.test.ts b/test/abilities/aroma_veil.test.ts index aeec33eccf7..00baa6b6268 100644 --- a/test/abilities/aroma_veil.test.ts +++ b/test/abilities/aroma_veil.test.ts @@ -1,6 +1,6 @@ -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; -import { Abilities } from "#enums/abilities"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; +import { AbilityId } from "#enums/ability-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -26,21 +26,21 @@ describe("Moves - Aroma Veil", () => { game = new GameManager(phaserGame); game.override .battleStyle("double") - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset([Moves.HEAL_BLOCK, Moves.IMPRISON, Moves.SPLASH]) - .enemySpecies(Species.SHUCKLE) - .ability(Abilities.AROMA_VEIL) - .moveset([Moves.GROWL]); + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset([MoveId.HEAL_BLOCK, MoveId.IMPRISON, MoveId.SPLASH]) + .enemySpecies(SpeciesId.SHUCKLE) + .ability(AbilityId.AROMA_VEIL) + .moveset([MoveId.GROWL]); }); it("Aroma Veil protects the Pokemon's side against most Move Restriction Battler Tags", async () => { - await game.classicMode.startBattle([Species.REGIELEKI, Species.BULBASAUR]); + await game.classicMode.startBattle([SpeciesId.REGIELEKI, SpeciesId.BULBASAUR]); const party = game.scene.getPlayerParty()! as PlayerPokemon[]; - game.move.select(Moves.GROWL); - game.move.select(Moves.GROWL); - await game.move.selectEnemyMove(Moves.HEAL_BLOCK); + game.move.select(MoveId.GROWL); + game.move.select(MoveId.GROWL); + await game.move.selectEnemyMove(MoveId.HEAL_BLOCK); await game.toNextTurn(); party.forEach(p => { expect(p.getTag(BattlerTagType.HEAL_BLOCK)).toBeUndefined(); @@ -48,14 +48,14 @@ describe("Moves - Aroma Veil", () => { }); it("Aroma Veil does not protect against Imprison", async () => { - await game.classicMode.startBattle([Species.REGIELEKI, Species.BULBASAUR]); + await game.classicMode.startBattle([SpeciesId.REGIELEKI, SpeciesId.BULBASAUR]); const party = game.scene.getPlayerParty()! as PlayerPokemon[]; - game.move.select(Moves.GROWL); - game.move.select(Moves.GROWL, 1); - await game.move.selectEnemyMove(Moves.IMPRISON, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.GROWL); + game.move.select(MoveId.GROWL, 1); + await game.move.selectEnemyMove(MoveId.IMPRISON, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); expect(game.scene.arena.getTag(ArenaTagType.IMPRISON)).toBeDefined(); party.forEach(p => { diff --git a/test/abilities/aura_break.test.ts b/test/abilities/aura_break.test.ts index 5b2211d7b3c..657d363bd97 100644 --- a/test/abilities/aura_break.test.ts +++ b/test/abilities/aura_break.test.ts @@ -1,7 +1,7 @@ import { allMoves } from "#app/data/data-lists"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -26,49 +26,49 @@ describe("Abilities - Aura Break", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .moveset([Moves.MOONBLAST, Moves.DARK_PULSE]) - .enemyMoveset(Moves.SPLASH) - .enemyAbility(Abilities.AURA_BREAK) - .enemySpecies(Species.SHUCKLE); + .moveset([MoveId.MOONBLAST, MoveId.DARK_PULSE]) + .enemyMoveset(MoveId.SPLASH) + .enemyAbility(AbilityId.AURA_BREAK) + .enemySpecies(SpeciesId.SHUCKLE); }); it("reverses the effect of Fairy Aura", async () => { - const moveToCheck = allMoves[Moves.MOONBLAST]; + const moveToCheck = allMoves[MoveId.MOONBLAST]; const basePower = moveToCheck.power; - game.override.ability(Abilities.FAIRY_AURA); + game.override.ability(AbilityId.FAIRY_AURA); vi.spyOn(moveToCheck, "calculateBattlePower"); - await game.classicMode.startBattle([Species.PIKACHU]); - game.move.select(Moves.MOONBLAST); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); + game.move.select(MoveId.MOONBLAST); await game.phaseInterceptor.to("MoveEffectPhase"); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(expect.closeTo(basePower * auraBreakMultiplier)); }); it("reverses the effect of Dark Aura", async () => { - const moveToCheck = allMoves[Moves.DARK_PULSE]; + const moveToCheck = allMoves[MoveId.DARK_PULSE]; const basePower = moveToCheck.power; - game.override.ability(Abilities.DARK_AURA); + game.override.ability(AbilityId.DARK_AURA); vi.spyOn(moveToCheck, "calculateBattlePower"); - await game.classicMode.startBattle([Species.PIKACHU]); - game.move.select(Moves.DARK_PULSE); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); + game.move.select(MoveId.DARK_PULSE); await game.phaseInterceptor.to("MoveEffectPhase"); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(expect.closeTo(basePower * auraBreakMultiplier)); }); it("has no effect if neither Fairy Aura nor Dark Aura are present", async () => { - const moveToCheck = allMoves[Moves.MOONBLAST]; + const moveToCheck = allMoves[MoveId.MOONBLAST]; const basePower = moveToCheck.power; - game.override.ability(Abilities.BALL_FETCH); + game.override.ability(AbilityId.BALL_FETCH); vi.spyOn(moveToCheck, "calculateBattlePower"); - await game.classicMode.startBattle([Species.PIKACHU]); - game.move.select(Moves.MOONBLAST); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); + game.move.select(MoveId.MOONBLAST); await game.phaseInterceptor.to("MoveEffectPhase"); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(basePower); diff --git a/test/abilities/battery.test.ts b/test/abilities/battery.test.ts index 123889c24af..980eaa5b381 100644 --- a/test/abilities/battery.test.ts +++ b/test/abilities/battery.test.ts @@ -1,9 +1,9 @@ import { allMoves } from "#app/data/data-lists"; -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -27,52 +27,52 @@ describe("Abilities - Battery", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleStyle("double"); - game.override.enemySpecies(Species.SHUCKLE); - game.override.enemyAbility(Abilities.BALL_FETCH); - game.override.moveset([Moves.TACKLE, Moves.BREAKING_SWIPE, Moves.SPLASH, Moves.DAZZLING_GLEAM]); - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemySpecies(SpeciesId.SHUCKLE); + game.override.enemyAbility(AbilityId.BALL_FETCH); + game.override.moveset([MoveId.TACKLE, MoveId.BREAKING_SWIPE, MoveId.SPLASH, MoveId.DAZZLING_GLEAM]); + game.override.enemyMoveset(MoveId.SPLASH); }); it("raises the power of allies' special moves by 30%", async () => { - const moveToCheck = allMoves[Moves.DAZZLING_GLEAM]; + const moveToCheck = allMoves[MoveId.DAZZLING_GLEAM]; const basePower = moveToCheck.power; vi.spyOn(moveToCheck, "calculateBattlePower"); - await game.classicMode.startBattle([Species.PIKACHU, Species.CHARJABUG]); + await game.classicMode.startBattle([SpeciesId.PIKACHU, SpeciesId.CHARJABUG]); - game.move.select(Moves.DAZZLING_GLEAM); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.DAZZLING_GLEAM); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(MoveEffectPhase); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(basePower * batteryMultiplier); }); it("does not raise the power of allies' non-special moves", async () => { - const moveToCheck = allMoves[Moves.BREAKING_SWIPE]; + const moveToCheck = allMoves[MoveId.BREAKING_SWIPE]; const basePower = moveToCheck.power; vi.spyOn(moveToCheck, "calculateBattlePower"); - await game.classicMode.startBattle([Species.PIKACHU, Species.CHARJABUG]); + await game.classicMode.startBattle([SpeciesId.PIKACHU, SpeciesId.CHARJABUG]); - game.move.select(Moves.BREAKING_SWIPE); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.BREAKING_SWIPE); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(MoveEffectPhase); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(basePower); }); it("does not raise the power of the ability owner's special moves", async () => { - const moveToCheck = allMoves[Moves.DAZZLING_GLEAM]; + const moveToCheck = allMoves[MoveId.DAZZLING_GLEAM]; const basePower = moveToCheck.power; vi.spyOn(moveToCheck, "calculateBattlePower"); - await game.classicMode.startBattle([Species.CHARJABUG, Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.CHARJABUG, SpeciesId.PIKACHU]); - game.move.select(Moves.DAZZLING_GLEAM); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.DAZZLING_GLEAM); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(TurnEndPhase); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(basePower); diff --git a/test/abilities/battle_bond.test.ts b/test/abilities/battle_bond.test.ts index d9f7b0bd0dc..b4ce73d107b 100644 --- a/test/abilities/battle_bond.test.ts +++ b/test/abilities/battle_bond.test.ts @@ -2,9 +2,9 @@ import { MultiHitAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; import { MultiHitType } from "#enums/MultiHitType"; import { Status } from "#app/data/status-effect"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -31,17 +31,17 @@ describe("Abilities - BATTLE BOND", () => { game.override .battleStyle("single") .startingWave(4) // Leads to arena reset on Wave 5 trainer battle - .ability(Abilities.BATTLE_BOND) - .starterForms({ [Species.GRENINJA]: ashForm }) - .moveset([Moves.SPLASH, Moves.WATER_SHURIKEN]) - .enemySpecies(Species.BULBASAUR) - .enemyMoveset(Moves.SPLASH) + .ability(AbilityId.BATTLE_BOND) + .starterForms({ [SpeciesId.GRENINJA]: ashForm }) + .moveset([MoveId.SPLASH, MoveId.WATER_SHURIKEN]) + .enemySpecies(SpeciesId.BULBASAUR) + .enemyMoveset(MoveId.SPLASH) .startingLevel(100) // Avoid levelling up .enemyLevel(1000); // Avoid opponent dying before `doKillOpponents()` }); it("check if fainted pokemon switches to base form on arena reset", async () => { - await game.classicMode.startBattle([Species.MAGIKARP, Species.GRENINJA]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.GRENINJA]); const greninja = game.scene.getPlayerParty()[1]; expect(greninja.formIndex).toBe(ashForm); @@ -50,7 +50,7 @@ describe("Abilities - BATTLE BOND", () => { greninja.status = new Status(StatusEffect.FAINT); expect(greninja.isFainted()).toBe(true); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to("TurnEndPhase"); game.doSelectModifier(); @@ -60,9 +60,9 @@ describe("Abilities - BATTLE BOND", () => { }); it("should not keep buffing Water Shuriken after Greninja switches to base form", async () => { - await game.classicMode.startBattle([Species.GRENINJA]); + await game.classicMode.startBattle([SpeciesId.GRENINJA]); - const waterShuriken = allMoves[Moves.WATER_SHURIKEN]; + const waterShuriken = allMoves[MoveId.WATER_SHURIKEN]; vi.spyOn(waterShuriken, "calculateBattlePower"); let actualMultiHitType: MultiHitType | null = null; @@ -76,7 +76,7 @@ describe("Abilities - BATTLE BOND", () => { let expectedBattlePower = 20; let expectedMultiHitType = MultiHitType._3; - game.move.select(Moves.WATER_SHURIKEN); + game.move.select(MoveId.WATER_SHURIKEN); await game.phaseInterceptor.to("BerryPhase", false); expect(waterShuriken.calculateBattlePower).toHaveLastReturnedWith(expectedBattlePower); expect(actualMultiHitType).toBe(expectedMultiHitType); @@ -88,7 +88,7 @@ describe("Abilities - BATTLE BOND", () => { expectedBattlePower = 15; expectedMultiHitType = MultiHitType._2_TO_5; - game.move.select(Moves.WATER_SHURIKEN); + game.move.select(MoveId.WATER_SHURIKEN); await game.phaseInterceptor.to("BerryPhase", false); expect(waterShuriken.calculateBattlePower).toHaveLastReturnedWith(expectedBattlePower); expect(actualMultiHitType).toBe(expectedMultiHitType); diff --git a/test/abilities/beast_boost.test.ts b/test/abilities/beast_boost.test.ts index a6b6ec0aacf..17ba4020961 100644 --- a/test/abilities/beast_boost.test.ts +++ b/test/abilities/beast_boost.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -25,16 +25,16 @@ describe("Abilities - Beast Boost", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemySpecies(Species.BULBASAUR) - .enemyAbility(Abilities.BEAST_BOOST) - .ability(Abilities.BEAST_BOOST) + .enemySpecies(SpeciesId.BULBASAUR) + .enemyAbility(AbilityId.BEAST_BOOST) + .ability(AbilityId.BEAST_BOOST) .startingLevel(2000) - .moveset([Moves.FLAMETHROWER]) - .enemyMoveset(Moves.SPLASH); + .moveset([MoveId.FLAMETHROWER]) + .enemyMoveset(MoveId.SPLASH); }); it("should prefer highest stat to boost its corresponding stat stage by 1 when winning a battle", async () => { - await game.classicMode.startBattle([Species.SLOWBRO]); + await game.classicMode.startBattle([SpeciesId.SLOWBRO]); const playerPokemon = game.scene.getPlayerPokemon()!; // Set the pokemon's highest stat to DEF, so it should be picked by Beast Boost @@ -43,16 +43,16 @@ describe("Abilities - Beast Boost", () => { expect(playerPokemon.getStatStage(Stat.DEF)).toBe(0); - game.move.select(Moves.FLAMETHROWER); + game.move.select(MoveId.FLAMETHROWER); await game.phaseInterceptor.to("VictoryPhase"); expect(playerPokemon.getStatStage(Stat.DEF)).toBe(1); }, 20000); it("should use in-battle overriden stats when determining the stat stage to raise by 1", async () => { - game.override.enemyMoveset([Moves.GUARD_SPLIT]); + game.override.enemyMoveset([MoveId.GUARD_SPLIT]); - await game.classicMode.startBattle([Species.SLOWBRO]); + await game.classicMode.startBattle([SpeciesId.SLOWBRO]); const playerPokemon = game.scene.getPlayerPokemon()!; // If the opponent uses Guard Split, the pokemon's second highest stat (SPATK) should be chosen @@ -60,7 +60,7 @@ describe("Abilities - Beast Boost", () => { expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(0); - game.move.select(Moves.FLAMETHROWER); + game.move.select(MoveId.FLAMETHROWER); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("VictoryPhase"); @@ -70,7 +70,7 @@ describe("Abilities - Beast Boost", () => { it("should have order preference in case of stat ties", async () => { // Order preference follows the order of EFFECTIVE_STAT - await game.classicMode.startBattle([Species.SLOWBRO]); + await game.classicMode.startBattle([SpeciesId.SLOWBRO]); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -79,7 +79,7 @@ describe("Abilities - Beast Boost", () => { expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(0); - game.move.select(Moves.FLAMETHROWER); + game.move.select(MoveId.FLAMETHROWER); await game.phaseInterceptor.to("VictoryPhase"); diff --git a/test/abilities/commander.test.ts b/test/abilities/commander.test.ts index 0fddb8e9bf6..bb2670ec2f0 100644 --- a/test/abilities/commander.test.ts +++ b/test/abilities/commander.test.ts @@ -6,9 +6,9 @@ import { Stat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; import { WeatherType } from "#enums/weather-type"; import { MoveResult } from "#app/field/pokemon"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -32,19 +32,19 @@ describe("Abilities - Commander", () => { game.override .startingLevel(100) .enemyLevel(100) - .moveset([Moves.LIQUIDATION, Moves.MEMENTO, Moves.SPLASH, Moves.FLIP_TURN]) - .ability(Abilities.COMMANDER) + .moveset([MoveId.LIQUIDATION, MoveId.MEMENTO, MoveId.SPLASH, MoveId.FLIP_TURN]) + .ability(AbilityId.COMMANDER) .battleStyle("double") .disableCrits() - .enemySpecies(Species.SNORLAX) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.TACKLE); + .enemySpecies(SpeciesId.SNORLAX) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.TACKLE); vi.spyOn(game.scene, "triggerPokemonBattleAnim").mockReturnValue(true); }); it("causes the source to jump into Dondozo's mouth, granting a stat boost and hiding the source", async () => { - await game.classicMode.startBattle([Species.TATSUGIRI, Species.DONDOZO]); + await game.classicMode.startBattle([SpeciesId.TATSUGIRI, SpeciesId.DONDOZO]); const [tatsugiri, dondozo] = game.scene.getPlayerField(); @@ -54,13 +54,13 @@ describe("Abilities - Commander", () => { expect(dondozo.getTag(BattlerTagType.COMMANDED)).toBeDefined(); affectedStats.forEach(stat => expect(dondozo.getStatStage(stat)).toBe(2)); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); expect(game.scene.currentBattle.turnCommands[0]?.skip).toBeTruthy(); // Force both enemies to target the Tatsugiri - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER); await game.phaseInterceptor.to("BerryPhase", false); game.scene.getEnemyField().forEach(enemy => expect(enemy.getLastXMoves(1)[0].result).toBe(MoveResult.MISS)); @@ -68,13 +68,13 @@ describe("Abilities - Commander", () => { }); it("should activate when a Dondozo switches in and cancel the source's move", async () => { - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); - await game.classicMode.startBattle([Species.TATSUGIRI, Species.MAGIKARP, Species.DONDOZO]); + await game.classicMode.startBattle([SpeciesId.TATSUGIRI, SpeciesId.MAGIKARP, SpeciesId.DONDOZO]); const tatsugiri = game.scene.getPlayerField()[0]; - game.move.select(Moves.LIQUIDATION, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.LIQUIDATION, 0, BattlerIndex.ENEMY); game.doSwitchPokemon(2); await game.phaseInterceptor.to("MovePhase", false); @@ -89,19 +89,19 @@ describe("Abilities - Commander", () => { }); it("source should reenter the field when Dondozo faints", async () => { - await game.classicMode.startBattle([Species.TATSUGIRI, Species.DONDOZO]); + await game.classicMode.startBattle([SpeciesId.TATSUGIRI, SpeciesId.DONDOZO]); const [tatsugiri, dondozo] = game.scene.getPlayerField(); expect(game.scene.triggerPokemonBattleAnim).toHaveBeenLastCalledWith(tatsugiri, PokemonAnimType.COMMANDER_APPLY); expect(dondozo.getTag(BattlerTagType.COMMANDED)).toBeDefined(); - game.move.select(Moves.MEMENTO, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.MEMENTO, 1, BattlerIndex.ENEMY); expect(game.scene.currentBattle.turnCommands[0]?.skip).toBeTruthy(); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER]); @@ -114,16 +114,16 @@ describe("Abilities - Commander", () => { }); it("source should still take damage from Poison while hidden", async () => { - game.override.statusEffect(StatusEffect.POISON).enemyMoveset(Moves.SPLASH); + game.override.statusEffect(StatusEffect.POISON).enemyMoveset(MoveId.SPLASH); - await game.classicMode.startBattle([Species.TATSUGIRI, Species.DONDOZO]); + await game.classicMode.startBattle([SpeciesId.TATSUGIRI, SpeciesId.DONDOZO]); const [tatsugiri, dondozo] = game.scene.getPlayerField(); expect(game.scene.triggerPokemonBattleAnim).toHaveBeenLastCalledWith(tatsugiri, PokemonAnimType.COMMANDER_APPLY); expect(dondozo.getTag(BattlerTagType.COMMANDED)).toBeDefined(); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); expect(game.scene.currentBattle.turnCommands[0]?.skip).toBeTruthy(); @@ -132,18 +132,18 @@ describe("Abilities - Commander", () => { }); it("source should still take damage from Salt Cure while hidden", async () => { - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); - await game.classicMode.startBattle([Species.TATSUGIRI, Species.DONDOZO]); + await game.classicMode.startBattle([SpeciesId.TATSUGIRI, SpeciesId.DONDOZO]); const [tatsugiri, dondozo] = game.scene.getPlayerField(); expect(game.scene.triggerPokemonBattleAnim).toHaveBeenLastCalledWith(tatsugiri, PokemonAnimType.COMMANDER_APPLY); expect(dondozo.getTag(BattlerTagType.COMMANDED)).toBeDefined(); - tatsugiri.addTag(BattlerTagType.SALT_CURED, 0, Moves.NONE, game.scene.getField()[BattlerIndex.ENEMY].id); + tatsugiri.addTag(BattlerTagType.SALT_CURED, 0, MoveId.NONE, game.scene.getField()[BattlerIndex.ENEMY].id); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); expect(game.scene.currentBattle.turnCommands[0]?.skip).toBeTruthy(); @@ -152,16 +152,16 @@ describe("Abilities - Commander", () => { }); it("source should still take damage from Sandstorm while hidden", async () => { - game.override.weather(WeatherType.SANDSTORM).enemyMoveset(Moves.SPLASH); + game.override.weather(WeatherType.SANDSTORM).enemyMoveset(MoveId.SPLASH); - await game.classicMode.startBattle([Species.TATSUGIRI, Species.DONDOZO]); + await game.classicMode.startBattle([SpeciesId.TATSUGIRI, SpeciesId.DONDOZO]); const [tatsugiri, dondozo] = game.scene.getPlayerField(); expect(game.scene.triggerPokemonBattleAnim).toHaveBeenLastCalledWith(tatsugiri, PokemonAnimType.COMMANDER_APPLY); expect(dondozo.getTag(BattlerTagType.COMMANDED)).toBeDefined(); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); expect(game.scene.currentBattle.turnCommands[0]?.skip).toBeTruthy(); @@ -170,21 +170,21 @@ describe("Abilities - Commander", () => { }); it("should make Dondozo immune to being forced out", async () => { - game.override.enemyMoveset([Moves.SPLASH, Moves.WHIRLWIND]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.WHIRLWIND]); - await game.classicMode.startBattle([Species.TATSUGIRI, Species.DONDOZO]); + await game.classicMode.startBattle([SpeciesId.TATSUGIRI, SpeciesId.DONDOZO]); const [tatsugiri, dondozo] = game.scene.getPlayerField(); expect(game.scene.triggerPokemonBattleAnim).toHaveBeenLastCalledWith(tatsugiri, PokemonAnimType.COMMANDER_APPLY); expect(dondozo.getTag(BattlerTagType.COMMANDED)).toBeDefined(); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); expect(game.scene.currentBattle.turnCommands[0]?.skip).toBeTruthy(); - await game.move.selectEnemyMove(Moves.WHIRLWIND, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.WHIRLWIND, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.SPLASH); // Test may time out here if Whirlwind forced out a Pokemon await game.phaseInterceptor.to("TurnEndPhase"); @@ -192,14 +192,14 @@ describe("Abilities - Commander", () => { }); it("should interrupt the source's semi-invulnerability", async () => { - game.override.moveset([Moves.SPLASH, Moves.DIVE]).enemyMoveset(Moves.SPLASH); + game.override.moveset([MoveId.SPLASH, MoveId.DIVE]).enemyMoveset(MoveId.SPLASH); - await game.classicMode.startBattle([Species.TATSUGIRI, Species.MAGIKARP, Species.DONDOZO]); + await game.classicMode.startBattle([SpeciesId.TATSUGIRI, SpeciesId.MAGIKARP, SpeciesId.DONDOZO]); const tatsugiri = game.scene.getPlayerField()[0]; - game.move.select(Moves.DIVE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.DIVE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("CommandPhase"); await game.toNextTurn(); diff --git a/test/abilities/competitive.test.ts b/test/abilities/competitive.test.ts index 1e0b5fcf40e..f12b06837dc 100644 --- a/test/abilities/competitive.test.ts +++ b/test/abilities/competitive.test.ts @@ -1,8 +1,8 @@ import { Stat } from "#enums/stat"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -26,18 +26,18 @@ describe("Abilities - Competitive", () => { game.override .battleStyle("single") - .enemySpecies(Species.BEEDRILL) - .enemyMoveset(Moves.TICKLE) + .enemySpecies(SpeciesId.BEEDRILL) + .enemyMoveset(MoveId.TICKLE) .startingLevel(1) - .moveset([Moves.SPLASH, Moves.CLOSE_COMBAT]) - .ability(Abilities.COMPETITIVE); + .moveset([MoveId.SPLASH, MoveId.CLOSE_COMBAT]) + .ability(AbilityId.COMPETITIVE); }); it("lower atk and def by 1 via tickle, then increase spatk by 4 via competitive", async () => { - await game.classicMode.startBattle([Species.FLYGON]); + await game.classicMode.startBattle([SpeciesId.FLYGON]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnInitPhase); expect(playerPokemon.getStatStage(Stat.ATK)).toBe(-1); @@ -46,11 +46,11 @@ describe("Abilities - Competitive", () => { }); it("lowering your own stats should not trigger competitive", async () => { - game.override.enemyMoveset(Moves.SPLASH); - await game.classicMode.startBattle([Species.FLYGON]); + game.override.enemyMoveset(MoveId.SPLASH); + await game.classicMode.startBattle([SpeciesId.FLYGON]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.CLOSE_COMBAT); + game.move.select(MoveId.CLOSE_COMBAT); await game.phaseInterceptor.to(TurnInitPhase); expect(playerPokemon.getStatStage(Stat.SPDEF)).toBe(-1); @@ -60,10 +60,10 @@ describe("Abilities - Competitive", () => { it("white herb should remove only the negative effects", async () => { game.override.startingHeldItems([{ name: "WHITE_HERB" }]); - await game.classicMode.startBattle([Species.FLYGON]); + await game.classicMode.startBattle([SpeciesId.FLYGON]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnInitPhase); expect(playerPokemon.getStatStage(Stat.ATK)).toBe(0); diff --git a/test/abilities/contrary.test.ts b/test/abilities/contrary.test.ts index 99c5208f561..0e47862f3e8 100644 --- a/test/abilities/contrary.test.ts +++ b/test/abilities/contrary.test.ts @@ -1,6 +1,6 @@ -import { Moves } from "#app/enums/moves"; -import { Abilities } from "#enums/abilities"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { AbilityId } from "#enums/ability-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,14 +24,14 @@ describe("Abilities - Contrary", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemySpecies(Species.BULBASAUR) - .enemyAbility(Abilities.CONTRARY) - .ability(Abilities.INTIMIDATE) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.BULBASAUR) + .enemyAbility(AbilityId.CONTRARY) + .ability(AbilityId.INTIMIDATE) + .enemyMoveset(MoveId.SPLASH); }); it("should invert stat changes when applied", async () => { - await game.classicMode.startBattle([Species.SLOWBRO]); + await game.classicMode.startBattle([SpeciesId.SLOWBRO]); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -40,28 +40,28 @@ describe("Abilities - Contrary", () => { describe("With Clear Body", () => { it("should apply positive effects", async () => { - game.override.enemyPassiveAbility(Abilities.CLEAR_BODY).moveset([Moves.TAIL_WHIP]); - await game.classicMode.startBattle([Species.SLOWBRO]); + game.override.enemyPassiveAbility(AbilityId.CLEAR_BODY).moveset([MoveId.TAIL_WHIP]); + await game.classicMode.startBattle([SpeciesId.SLOWBRO]); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(1); - game.move.select(Moves.TAIL_WHIP); + game.move.select(MoveId.TAIL_WHIP); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(1); }); it("should block negative effects", async () => { - game.override.enemyPassiveAbility(Abilities.CLEAR_BODY).enemyMoveset(Moves.HOWL).moveset([Moves.SPLASH]); - await game.classicMode.startBattle([Species.SLOWBRO]); + game.override.enemyPassiveAbility(AbilityId.CLEAR_BODY).enemyMoveset(MoveId.HOWL).moveset([MoveId.SPLASH]); + await game.classicMode.startBattle([SpeciesId.SLOWBRO]); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(1); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(1); diff --git a/test/abilities/corrosion.test.ts b/test/abilities/corrosion.test.ts index c72aef9f0a3..81b04ef340c 100644 --- a/test/abilities/corrosion.test.ts +++ b/test/abilities/corrosion.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -22,23 +22,23 @@ describe("Abilities - Corrosion", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .battleStyle("single") .disableCrits() - .enemySpecies(Species.GRIMER) - .enemyAbility(Abilities.CORROSION) - .enemyMoveset(Moves.TOXIC); + .enemySpecies(SpeciesId.GRIMER) + .enemyAbility(AbilityId.CORROSION) + .enemyMoveset(MoveId.TOXIC); }); it("If a Poison- or Steel-type Pokémon with this Ability poisons a target with Synchronize, Synchronize does not gain the ability to poison Poison- or Steel-type Pokémon.", async () => { - game.override.ability(Abilities.SYNCHRONIZE); - await game.classicMode.startBattle([Species.FEEBAS]); + game.override.ability(AbilityId.SYNCHRONIZE); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const playerPokemon = game.scene.getPlayerPokemon(); const enemyPokemon = game.scene.getEnemyPokemon(); expect(playerPokemon!.status).toBeUndefined(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(playerPokemon!.status).toBeDefined(); expect(enemyPokemon!.status).toBeUndefined(); diff --git a/test/abilities/costar.test.ts b/test/abilities/costar.test.ts index 02d607c2e9f..ae09aeea096 100644 --- a/test/abilities/costar.test.ts +++ b/test/abilities/costar.test.ts @@ -1,7 +1,7 @@ import { Stat } from "#enums/stat"; -import { Abilities } from "#app/enums/abilities"; -import { Moves } from "#app/enums/moves"; -import { Species } from "#app/enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { CommandPhase } from "#app/phases/command-phase"; import { MessagePhase } from "#app/phases/message-phase"; import GameManager from "#test/testUtils/gameManager"; @@ -25,27 +25,27 @@ describe("Abilities - COSTAR", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleStyle("double"); - game.override.ability(Abilities.COSTAR); - game.override.moveset([Moves.SPLASH, Moves.NASTY_PLOT]); - game.override.enemyMoveset(Moves.SPLASH); + game.override.ability(AbilityId.COSTAR); + game.override.moveset([MoveId.SPLASH, MoveId.NASTY_PLOT]); + game.override.enemyMoveset(MoveId.SPLASH); }); test("ability copies positive stat stages", async () => { - game.override.enemyAbility(Abilities.BALL_FETCH); + game.override.enemyAbility(AbilityId.BALL_FETCH); - await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP, Species.FLAMIGO]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP, SpeciesId.FLAMIGO]); let [leftPokemon, rightPokemon] = game.scene.getPlayerField(); - game.move.select(Moves.NASTY_PLOT); + game.move.select(MoveId.NASTY_PLOT); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(leftPokemon.getStatStage(Stat.SPATK)).toBe(2); expect(rightPokemon.getStatStage(Stat.SPATK)).toBe(0); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(CommandPhase); game.doSwitchPokemon(2); await game.phaseInterceptor.to(MessagePhase); @@ -56,16 +56,16 @@ describe("Abilities - COSTAR", () => { }); test("ability copies negative stat stages", async () => { - game.override.enemyAbility(Abilities.INTIMIDATE); + game.override.enemyAbility(AbilityId.INTIMIDATE); - await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP, Species.FLAMIGO]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP, SpeciesId.FLAMIGO]); let [leftPokemon, rightPokemon] = game.scene.getPlayerField(); expect(leftPokemon.getStatStage(Stat.ATK)).toBe(-2); expect(leftPokemon.getStatStage(Stat.ATK)).toBe(-2); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(CommandPhase); game.doSwitchPokemon(2); await game.phaseInterceptor.to(MessagePhase); diff --git a/test/abilities/cud_chew.test.ts b/test/abilities/cud_chew.test.ts index 60205b62b70..3c918f01330 100644 --- a/test/abilities/cud_chew.test.ts +++ b/test/abilities/cud_chew.test.ts @@ -2,10 +2,10 @@ import { RepeatBerryNextTurnAbAttr } from "#app/data/abilities/ability"; import Pokemon from "#app/field/pokemon"; import { globalScene } from "#app/global-scene"; import { getPokemonNameWithAffix } from "#app/messages"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BerryType } from "#enums/berry-type"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import i18next from "i18next"; @@ -29,24 +29,24 @@ describe("Abilities - Cud Chew", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.BUG_BITE, Moves.SPLASH, Moves.HYPER_VOICE, Moves.STUFF_CHEEKS]) + .moveset([MoveId.BUG_BITE, MoveId.SPLASH, MoveId.HYPER_VOICE, MoveId.STUFF_CHEEKS]) .startingHeldItems([{ name: "BERRY", type: BerryType.SITRUS, count: 1 }]) - .ability(Abilities.CUD_CHEW) + .ability(AbilityId.CUD_CHEW) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); describe("tracks berries eaten", () => { it("stores inside summonData at end of turn", async () => { - await game.classicMode.startBattle([Species.FARIGIRAF]); + await game.classicMode.startBattle([SpeciesId.FARIGIRAF]); const farigiraf = game.scene.getPlayerPokemon()!; farigiraf.hp = 1; // needed to allow sitrus procs - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); // berries tracked in turnData; not moved to battleData yet @@ -68,15 +68,15 @@ describe("Abilities - Cud Chew", () => { it("shows ability popup for eating berry, even if berry is useless", async () => { const abDisplaySpy = vi.spyOn(globalScene, "queueAbilityDisplay"); - game.override.enemyMoveset([Moves.SPLASH, Moves.HEAL_PULSE]); - await game.classicMode.startBattle([Species.FARIGIRAF]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.HEAL_PULSE]); + await game.classicMode.startBattle([SpeciesId.FARIGIRAF]); const farigiraf = game.scene.getPlayerPokemon()!; // Dip below half to eat berry farigiraf.hp = farigiraf.getMaxHp() / 2 - 1; - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); // doesn't trigger since cud chew hasn't eaten berry yet @@ -85,8 +85,8 @@ describe("Abilities - Cud Chew", () => { await game.toNextTurn(); // get heal pulsed back to full before the cud chew proc - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.HEAL_PULSE); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.HEAL_PULSE); await game.phaseInterceptor.to("TurnEndPhase"); // globalScene.queueAbilityDisplay should be called twice: @@ -117,13 +117,13 @@ describe("Abilities - Cud Chew", () => { { name: "BERRY", type: BerryType.PETAYA, count: 3 }, { name: "BERRY", type: BerryType.LIECHI, count: 3 }, ]) - .enemyMoveset(Moves.TEATIME); - await game.classicMode.startBattle([Species.FARIGIRAF]); + .enemyMoveset(MoveId.TEATIME); + await game.classicMode.startBattle([SpeciesId.FARIGIRAF]); const farigiraf = game.scene.getPlayerPokemon()!; farigiraf.hp = 1; // needed to allow berry procs - game.move.select(Moves.STUFF_CHEEKS); + game.move.select(MoveId.STUFF_CHEEKS); await game.toNextTurn(); // Ate 2 petayas from moves + 1 of each at turn end; all 4 get tallied on turn end @@ -135,7 +135,7 @@ describe("Abilities - Cud Chew", () => { ]); expect(farigiraf.turnData.berriesEaten).toEqual([]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // previous berries eaten and deleted from summon data as remaining eaten berries move to replace them @@ -146,13 +146,13 @@ describe("Abilities - Cud Chew", () => { }); it("should reset both arrays on switch", async () => { - await game.classicMode.startBattle([Species.FARIGIRAF, Species.GIRAFARIG]); + await game.classicMode.startBattle([SpeciesId.FARIGIRAF, SpeciesId.GIRAFARIG]); const farigiraf = game.scene.getPlayerPokemon()!; farigiraf.hp = 1; // eat berry turn 1, switch out turn 2 - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); const turn1Hp = farigiraf.hp; @@ -174,13 +174,13 @@ describe("Abilities - Cud Chew", () => { }); it("clears array if disabled", async () => { - game.override.enemyAbility(Abilities.NEUTRALIZING_GAS); - await game.classicMode.startBattle([Species.FARIGIRAF]); + game.override.enemyAbility(AbilityId.NEUTRALIZING_GAS); + await game.classicMode.startBattle([SpeciesId.FARIGIRAF]); const farigiraf = game.scene.getPlayerPokemon()!; farigiraf.hp = 1; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(farigiraf.summonData.berriesEatenLast).toEqual([]); @@ -197,12 +197,12 @@ describe("Abilities - Cud Chew", () => { describe("regurgiates berries", () => { it("re-triggers effects on eater without pushing to array", async () => { const apply = vi.spyOn(RepeatBerryNextTurnAbAttr.prototype, "apply"); - await game.classicMode.startBattle([Species.FARIGIRAF]); + await game.classicMode.startBattle([SpeciesId.FARIGIRAF]); const farigiraf = game.scene.getPlayerPokemon()!; farigiraf.hp = 1; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // ate 1 sitrus the turn prior, spitball pending @@ -212,7 +212,7 @@ describe("Abilities - Cud Chew", () => { const turn1Hp = farigiraf.hp; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); // healed back up to half without adding any more to array @@ -222,15 +222,15 @@ describe("Abilities - Cud Chew", () => { }); it("bypasses unnerve", async () => { - game.override.enemyAbility(Abilities.UNNERVE); - await game.classicMode.startBattle([Species.FARIGIRAF]); + game.override.enemyAbility(AbilityId.UNNERVE); + await game.classicMode.startBattle([SpeciesId.FARIGIRAF]); const farigiraf = game.scene.getPlayerPokemon()!; farigiraf.hp = 1; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); // Turn end proc set the berriesEatenLast array back to being empty @@ -240,13 +240,13 @@ describe("Abilities - Cud Chew", () => { }); it("doesn't trigger on non-eating removal", async () => { - game.override.enemyMoveset(Moves.INCINERATE); - await game.classicMode.startBattle([Species.FARIGIRAF]); + game.override.enemyMoveset(MoveId.INCINERATE); + await game.classicMode.startBattle([SpeciesId.FARIGIRAF]); const farigiraf = game.scene.getPlayerPokemon()!; farigiraf.hp = farigiraf.getMaxHp() / 4; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // no berries eaten due to getting cooked @@ -257,17 +257,17 @@ describe("Abilities - Cud Chew", () => { it("works with pluck", async () => { game.override - .enemySpecies(Species.BLAZIKEN) + .enemySpecies(SpeciesId.BLAZIKEN) .enemyHeldItems([{ name: "BERRY", type: BerryType.PETAYA, count: 1 }]) .startingHeldItems([]); - await game.classicMode.startBattle([Species.FARIGIRAF]); + await game.classicMode.startBattle([SpeciesId.FARIGIRAF]); const farigiraf = game.scene.getPlayerPokemon()!; - game.move.select(Moves.BUG_BITE); + game.move.select(MoveId.BUG_BITE); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // berry effect triggered twice - once for bug bite, once for cud chew @@ -275,15 +275,15 @@ describe("Abilities - Cud Chew", () => { }); it("works with Ripen", async () => { - game.override.passiveAbility(Abilities.RIPEN); - await game.classicMode.startBattle([Species.FARIGIRAF]); + game.override.passiveAbility(AbilityId.RIPEN); + await game.classicMode.startBattle([SpeciesId.FARIGIRAF]); const farigiraf = game.scene.getPlayerPokemon()!; farigiraf.hp = 1; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // Rounding errors only ever cost a maximum of 4 hp @@ -292,12 +292,12 @@ describe("Abilities - Cud Chew", () => { it("is preserved on reload/wave clear", async () => { game.override.enemyLevel(1); - await game.classicMode.startBattle([Species.FARIGIRAF]); + await game.classicMode.startBattle([SpeciesId.FARIGIRAF]); const farigiraf = game.scene.getPlayerPokemon()!; farigiraf.hp = 1; - game.move.select(Moves.HYPER_VOICE); + game.move.select(MoveId.HYPER_VOICE); await game.toNextWave(); // berry went yummy yummy in big fat giraffe tummy @@ -313,7 +313,7 @@ describe("Abilities - Cud Chew", () => { const wave1Hp = farigirafReloaded.hp; // blow up next wave and we should proc the repeat eating - game.move.select(Moves.HYPER_VOICE); + game.move.select(MoveId.HYPER_VOICE); await game.toNextWave(); expect(farigirafReloaded.hp).toBeGreaterThan(wave1Hp); diff --git a/test/abilities/dancer.test.ts b/test/abilities/dancer.test.ts index b85fc7bdcd4..7b4edb84789 100644 --- a/test/abilities/dancer.test.ts +++ b/test/abilities/dancer.test.ts @@ -1,8 +1,8 @@ import { BattlerIndex } from "#app/battle"; import type { MovePhase } from "#app/phases/move-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -29,22 +29,22 @@ describe("Abilities - Dancer", () => { // Reference Link: https://bulbapedia.bulbagarden.net/wiki/Dancer_(Ability) it("triggers when dance moves are used, doesn't consume extra PP", async () => { - game.override.enemyAbility(Abilities.DANCER).enemySpecies(Species.MAGIKARP).enemyMoveset(Moves.VICTORY_DANCE); - await game.classicMode.startBattle([Species.ORICORIO, Species.FEEBAS]); + game.override.enemyAbility(AbilityId.DANCER).enemySpecies(SpeciesId.MAGIKARP).enemyMoveset(MoveId.VICTORY_DANCE); + await game.classicMode.startBattle([SpeciesId.ORICORIO, SpeciesId.FEEBAS]); const [oricorio, feebas] = game.scene.getPlayerField(); - game.move.changeMoveset(oricorio, [Moves.SWORDS_DANCE, Moves.VICTORY_DANCE, Moves.SPLASH]); - game.move.changeMoveset(feebas, [Moves.SWORDS_DANCE, Moves.SPLASH]); + game.move.changeMoveset(oricorio, [MoveId.SWORDS_DANCE, MoveId.VICTORY_DANCE, MoveId.SPLASH]); + game.move.changeMoveset(feebas, [MoveId.SWORDS_DANCE, MoveId.SPLASH]); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SWORDS_DANCE, 1); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SWORDS_DANCE, 1); await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("MovePhase"); // feebas uses swords dance await game.phaseInterceptor.to("MovePhase", false); // oricorio copies swords dance let currentPhase = game.scene.getCurrentPhase() as MovePhase; expect(currentPhase.pokemon).toBe(oricorio); - expect(currentPhase.move.moveId).toBe(Moves.SWORDS_DANCE); + expect(currentPhase.move.moveId).toBe(MoveId.SWORDS_DANCE); await game.phaseInterceptor.to("MoveEndPhase"); // end oricorio's move await game.phaseInterceptor.to("MovePhase"); // magikarp 1 copies swords dance @@ -54,7 +54,7 @@ describe("Abilities - Dancer", () => { currentPhase = game.scene.getCurrentPhase() as MovePhase; expect(currentPhase.pokemon).toBe(oricorio); - expect(currentPhase.move.moveId).toBe(Moves.VICTORY_DANCE); + expect(currentPhase.move.moveId).toBe(MoveId.VICTORY_DANCE); await game.phaseInterceptor.to("BerryPhase"); // finish the turn @@ -66,37 +66,37 @@ describe("Abilities - Dancer", () => { // TODO: Enable after Dancer rework to not push to move history it.todo("should not count as the last move used for mirror move/instruct", async () => { game.override - .moveset([Moves.FIERY_DANCE, Moves.REVELATION_DANCE]) - .enemyMoveset([Moves.INSTRUCT, Moves.MIRROR_MOVE, Moves.SPLASH]) - .enemySpecies(Species.SHUCKLE) + .moveset([MoveId.FIERY_DANCE, MoveId.REVELATION_DANCE]) + .enemyMoveset([MoveId.INSTRUCT, MoveId.MIRROR_MOVE, MoveId.SPLASH]) + .enemySpecies(SpeciesId.SHUCKLE) .enemyLevel(10); - await game.classicMode.startBattle([Species.ORICORIO, Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.ORICORIO, SpeciesId.FEEBAS]); const [oricorio] = game.scene.getPlayerField(); const [, shuckle2] = game.scene.getEnemyField(); - game.move.select(Moves.REVELATION_DANCE, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2); - game.move.select(Moves.FIERY_DANCE, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY_2); - await game.move.selectEnemyMove(Moves.INSTRUCT, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.MIRROR_MOVE, BattlerIndex.PLAYER); + game.move.select(MoveId.REVELATION_DANCE, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2); + game.move.select(MoveId.FIERY_DANCE, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY_2); + await game.move.selectEnemyMove(MoveId.INSTRUCT, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.MIRROR_MOVE, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY_2, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MovePhase"); // Oricorio rev dance await game.phaseInterceptor.to("MovePhase"); // Feebas fiery dance await game.phaseInterceptor.to("MovePhase"); // Oricorio fiery dance (from dancer) await game.phaseInterceptor.to("MoveEndPhase", false); // dancer copied move doesn't appear in move history - expect(oricorio.getLastXMoves(-1)[0].move).toBe(Moves.REVELATION_DANCE); + expect(oricorio.getLastXMoves(-1)[0].move).toBe(MoveId.REVELATION_DANCE); await game.phaseInterceptor.to("MovePhase"); // shuckle 2 mirror moves oricorio await game.phaseInterceptor.to("MovePhase"); // calls instructed rev dance let currentPhase = game.scene.getCurrentPhase() as MovePhase; expect(currentPhase.pokemon).toBe(shuckle2); - expect(currentPhase.move.moveId).toBe(Moves.REVELATION_DANCE); + expect(currentPhase.move.moveId).toBe(MoveId.REVELATION_DANCE); await game.phaseInterceptor.to("MovePhase"); // shuckle 1 instructs oricorio await game.phaseInterceptor.to("MovePhase"); currentPhase = game.scene.getCurrentPhase() as MovePhase; expect(currentPhase.pokemon).toBe(oricorio); - expect(currentPhase.move.moveId).toBe(Moves.REVELATION_DANCE); + expect(currentPhase.move.moveId).toBe(MoveId.REVELATION_DANCE); }); }); diff --git a/test/abilities/defiant.test.ts b/test/abilities/defiant.test.ts index d06aef4d785..ef26b5bfca3 100644 --- a/test/abilities/defiant.test.ts +++ b/test/abilities/defiant.test.ts @@ -1,8 +1,8 @@ import { Stat } from "#enums/stat"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -26,18 +26,18 @@ describe("Abilities - Defiant", () => { game.override .battleStyle("single") - .enemySpecies(Species.BEEDRILL) - .enemyMoveset(Moves.TICKLE) + .enemySpecies(SpeciesId.BEEDRILL) + .enemyMoveset(MoveId.TICKLE) .startingLevel(1) - .moveset([Moves.SPLASH, Moves.CLOSE_COMBAT]) - .ability(Abilities.DEFIANT); + .moveset([MoveId.SPLASH, MoveId.CLOSE_COMBAT]) + .ability(AbilityId.DEFIANT); }); it("lower atk and def by 1 via tickle, then increase atk by 4 via defiant", async () => { - await game.classicMode.startBattle([Species.FLYGON]); + await game.classicMode.startBattle([SpeciesId.FLYGON]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnInitPhase); expect(playerPokemon.getStatStage(Stat.ATK)).toBe(3); @@ -45,11 +45,11 @@ describe("Abilities - Defiant", () => { }); it("lowering your own stats should not trigger defiant", async () => { - game.override.enemyMoveset(Moves.SPLASH); - await game.classicMode.startBattle([Species.FLYGON]); + game.override.enemyMoveset(MoveId.SPLASH); + await game.classicMode.startBattle([SpeciesId.FLYGON]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.CLOSE_COMBAT); + game.move.select(MoveId.CLOSE_COMBAT); await game.phaseInterceptor.to(TurnInitPhase); expect(playerPokemon.getStatStage(Stat.SPDEF)).toBe(-1); @@ -59,10 +59,10 @@ describe("Abilities - Defiant", () => { it("white herb should remove only the negative effects", async () => { game.override.startingHeldItems([{ name: "WHITE_HERB" }]); - await game.classicMode.startBattle([Species.FLYGON]); + await game.classicMode.startBattle([SpeciesId.FLYGON]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnInitPhase); expect(playerPokemon.getStatStage(Stat.DEF)).toBe(0); diff --git a/test/abilities/desolate-land.test.ts b/test/abilities/desolate-land.test.ts index da2c285e38f..c5238a40762 100644 --- a/test/abilities/desolate-land.test.ts +++ b/test/abilities/desolate-land.test.ts @@ -2,9 +2,9 @@ import { PokeballType } from "#app/enums/pokeball"; import { WeatherType } from "#app/enums/weather-type"; import type { CommandPhase } from "#app/phases/command-phase"; import { Command } from "#app/ui/command-ui-handler"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; @@ -26,20 +26,25 @@ describe("Abilities - Desolate Land", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Moves.SPLASH) + .moveset(MoveId.SPLASH) .hasPassiveAbility(true) - .enemySpecies(Species.RALTS) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.RALTS) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); /** - * This checks that the weather has changed after the Enemy Pokemon with {@linkcode Abilities.DESOLATE_LAND} - * is forcefully moved out of the field from moves such as Roar {@linkcode Moves.ROAR} + * This checks that the weather has changed after the Enemy Pokemon with {@linkcode AbilityId.DESOLATE_LAND} + * is forcefully moved out of the field from moves such as Roar {@linkcode MoveId.ROAR} */ it("should lift only when all pokemon with this ability leave the field", async () => { - game.override.battleStyle("double").enemyMoveset([Moves.SPLASH, Moves.ROAR]); - await game.classicMode.startBattle([Species.MAGCARGO, Species.MAGCARGO, Species.MAGIKARP, Species.MAGIKARP]); + game.override.battleStyle("double").enemyMoveset([MoveId.SPLASH, MoveId.ROAR]); + await game.classicMode.startBattle([ + SpeciesId.MAGCARGO, + SpeciesId.MAGCARGO, + SpeciesId.MAGIKARP, + SpeciesId.MAGIKARP, + ]); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN); @@ -47,11 +52,11 @@ describe("Abilities - Desolate Land", () => { return min; }); - game.move.select(Moves.SPLASH, 0, 2); - game.move.select(Moves.SPLASH, 1, 2); + game.move.select(MoveId.SPLASH, 0, 2); + game.move.select(MoveId.SPLASH, 1, 2); - await game.move.selectEnemyMove(Moves.ROAR, 0); - await game.move.selectEnemyMove(Moves.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.ROAR, 0); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -63,11 +68,11 @@ describe("Abilities - Desolate Land", () => { return min + 1; }); - game.move.select(Moves.SPLASH, 0, 2); - game.move.select(Moves.SPLASH, 1, 2); + game.move.select(MoveId.SPLASH, 0, 2); + game.move.select(MoveId.SPLASH, 1, 2); - await game.move.selectEnemyMove(Moves.ROAR, 1); - await game.move.selectEnemyMove(Moves.SPLASH, 0); + await game.move.selectEnemyMove(MoveId.ROAR, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, 0); await game.phaseInterceptor.to("TurnEndPhase"); @@ -77,18 +82,18 @@ describe("Abilities - Desolate Land", () => { it("should lift when enemy faints", async () => { game.override .battleStyle("single") - .moveset([Moves.SHEER_COLD]) - .ability(Abilities.NO_GUARD) + .moveset([MoveId.SHEER_COLD]) + .ability(AbilityId.NO_GUARD) .startingLevel(100) .enemyLevel(1) - .enemyMoveset([Moves.SPLASH]) - .enemySpecies(Species.MAGCARGO) + .enemyMoveset([MoveId.SPLASH]) + .enemySpecies(SpeciesId.MAGCARGO) .enemyHasPassiveAbility(true); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN); - game.move.select(Moves.SHEER_COLD); + game.move.select(MoveId.SHEER_COLD); await game.phaseInterceptor.to("TurnEndPhase"); @@ -96,15 +101,15 @@ describe("Abilities - Desolate Land", () => { }); it("should lift when pokemon returns upon switching from double to single battle", async () => { - game.override.battleStyle("even-doubles").enemyMoveset([Moves.SPLASH, Moves.MEMENTO]).startingWave(12); - await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGCARGO]); + game.override.battleStyle("even-doubles").enemyMoveset([MoveId.SPLASH, MoveId.MEMENTO]).startingWave(12); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGCARGO]); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN); - game.move.select(Moves.SPLASH, 0, 2); - game.move.select(Moves.SPLASH, 1, 2); - await game.move.selectEnemyMove(Moves.MEMENTO, 0); - await game.move.selectEnemyMove(Moves.MEMENTO, 1); + game.move.select(MoveId.SPLASH, 0, 2); + game.move.select(MoveId.SPLASH, 1, 2); + await game.move.selectEnemyMove(MoveId.MEMENTO, 0); + await game.move.selectEnemyMove(MoveId.MEMENTO, 1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -118,10 +123,10 @@ describe("Abilities - Desolate Land", () => { it("should lift when enemy is captured", async () => { game.override .battleStyle("single") - .enemyMoveset([Moves.SPLASH]) - .enemySpecies(Species.MAGCARGO) + .enemyMoveset([MoveId.SPLASH]) + .enemySpecies(SpeciesId.MAGCARGO) .enemyHasPassiveAbility(true); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN); @@ -135,8 +140,8 @@ describe("Abilities - Desolate Land", () => { }); it("should lift after fleeing from a wild pokemon", async () => { - game.override.enemyAbility(Abilities.DESOLATE_LAND).ability(Abilities.BALL_FETCH); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.enemyAbility(AbilityId.DESOLATE_LAND).ability(AbilityId.BALL_FETCH); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN); vi.spyOn(game.scene.getPlayerPokemon()!, "randBattleSeedInt").mockReturnValue(0); diff --git a/test/abilities/disguise.test.ts b/test/abilities/disguise.test.ts index 0e62b8ad448..dd05c540620 100644 --- a/test/abilities/disguise.test.ts +++ b/test/abilities/disguise.test.ts @@ -1,8 +1,8 @@ import { BattlerIndex } from "#app/battle"; import { toDmgValue } from "#app/utils/common"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -28,10 +28,10 @@ describe("Abilities - Disguise", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemySpecies(Species.MIMIKYU) - .enemyMoveset(Moves.SPLASH) - .starterSpecies(Species.REGIELEKI) - .moveset([Moves.SHADOW_SNEAK, Moves.VACUUM_WAVE, Moves.TOXIC_THREAD, Moves.SPLASH]); + .enemySpecies(SpeciesId.MIMIKYU) + .enemyMoveset(MoveId.SPLASH) + .starterSpecies(SpeciesId.REGIELEKI) + .moveset([MoveId.SHADOW_SNEAK, MoveId.VACUUM_WAVE, MoveId.TOXIC_THREAD, MoveId.SPLASH]); }); it("takes no damage from attacking move and transforms to Busted form, takes 1/8 max HP damage from the disguise breaking", async () => { @@ -43,7 +43,7 @@ describe("Abilities - Disguise", () => { expect(mimikyu.formIndex).toBe(disguisedForm); - game.move.select(Moves.SHADOW_SNEAK); + game.move.select(MoveId.SHADOW_SNEAK); await game.phaseInterceptor.to("MoveEndPhase"); @@ -58,7 +58,7 @@ describe("Abilities - Disguise", () => { expect(mimikyu.formIndex).toBe(disguisedForm); - game.move.select(Moves.VACUUM_WAVE); + game.move.select(MoveId.VACUUM_WAVE); await game.phaseInterceptor.to("MoveEndPhase"); @@ -66,7 +66,7 @@ describe("Abilities - Disguise", () => { }); it("takes no damage from the first hit of a multihit move and transforms to Busted form, then takes damage from the second hit", async () => { - game.override.moveset([Moves.SURGING_STRIKES]); + game.override.moveset([MoveId.SURGING_STRIKES]); game.override.enemyLevel(5); await game.classicMode.startBattle(); @@ -76,7 +76,7 @@ describe("Abilities - Disguise", () => { expect(mimikyu.formIndex).toBe(disguisedForm); - game.move.select(Moves.SURGING_STRIKES); + game.move.select(MoveId.SURGING_STRIKES); // First hit await game.phaseInterceptor.to("MoveEffectPhase"); @@ -95,7 +95,7 @@ describe("Abilities - Disguise", () => { const mimikyu = game.scene.getEnemyPokemon()!; expect(mimikyu.hp).toBe(mimikyu.getMaxHp()); - game.move.select(Moves.TOXIC_THREAD); + game.move.select(MoveId.TOXIC_THREAD); await game.phaseInterceptor.to("TurnEndPhase"); @@ -106,16 +106,16 @@ describe("Abilities - Disguise", () => { }); it("persists form change when switched out", async () => { - game.override.enemyMoveset([Moves.SHADOW_SNEAK]); + game.override.enemyMoveset([MoveId.SHADOW_SNEAK]); game.override.starterSpecies(0); - await game.classicMode.startBattle([Species.MIMIKYU, Species.FURRET]); + await game.classicMode.startBattle([SpeciesId.MIMIKYU, SpeciesId.FURRET]); const mimikyu = game.scene.getPlayerPokemon()!; const maxHp = mimikyu.getMaxHp(); const disguiseDamage = toDmgValue(maxHp / 8); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); @@ -133,14 +133,14 @@ describe("Abilities - Disguise", () => { it("persists form change when wave changes with no arena reset", async () => { game.override.starterSpecies(0); game.override.starterForms({ - [Species.MIMIKYU]: bustedForm, + [SpeciesId.MIMIKYU]: bustedForm, }); - await game.classicMode.startBattle([Species.FURRET, Species.MIMIKYU]); + await game.classicMode.startBattle([SpeciesId.FURRET, SpeciesId.MIMIKYU]); const mimikyu = game.scene.getPlayerParty()[1]!; expect(mimikyu.formIndex).toBe(bustedForm); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.toNextWave(); @@ -149,9 +149,9 @@ describe("Abilities - Disguise", () => { it("reverts to Disguised form on arena reset", async () => { game.override.startingWave(4); - game.override.starterSpecies(Species.MIMIKYU); + game.override.starterSpecies(SpeciesId.MIMIKYU); game.override.starterForms({ - [Species.MIMIKYU]: bustedForm, + [SpeciesId.MIMIKYU]: bustedForm, }); await game.classicMode.startBattle(); @@ -160,7 +160,7 @@ describe("Abilities - Disguise", () => { expect(mimikyu.formIndex).toBe(bustedForm); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.toNextWave(); @@ -171,20 +171,20 @@ describe("Abilities - Disguise", () => { game.override.startingWave(10); game.override.starterSpecies(0); game.override.starterForms({ - [Species.MIMIKYU]: bustedForm, + [SpeciesId.MIMIKYU]: bustedForm, }); - await game.classicMode.startBattle([Species.MIMIKYU, Species.FURRET]); + await game.classicMode.startBattle([SpeciesId.MIMIKYU, SpeciesId.FURRET]); const mimikyu1 = game.scene.getPlayerPokemon()!; expect(mimikyu1.formIndex).toBe(bustedForm); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.killPokemon(mimikyu1); game.doSelectPartyPokemon(1); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to("QuietFormChangePhase"); @@ -192,13 +192,13 @@ describe("Abilities - Disguise", () => { }); it("doesn't faint twice when fainting due to Disguise break damage, nor prevent faint from Disguise break damage if using Endure", async () => { - game.override.enemyMoveset([Moves.ENDURE]); + game.override.enemyMoveset([MoveId.ENDURE]); await game.classicMode.startBattle(); const mimikyu = game.scene.getEnemyPokemon()!; mimikyu.hp = 1; - game.move.select(Moves.SHADOW_SNEAK); + game.move.select(MoveId.SHADOW_SNEAK); await game.toNextWave(); expect(game.scene.getCurrentPhase()?.constructor.name).toBe("CommandPhase"); @@ -206,8 +206,8 @@ describe("Abilities - Disguise", () => { }); it("activates when Aerilate circumvents immunity to the move's base type", async () => { - game.override.ability(Abilities.AERILATE); - game.override.moveset([Moves.TACKLE]); + game.override.ability(AbilityId.AERILATE); + game.override.moveset([MoveId.TACKLE]); await game.classicMode.startBattle(); @@ -215,7 +215,7 @@ describe("Abilities - Disguise", () => { const maxHp = mimikyu.getMaxHp(); const disguiseDamage = toDmgValue(maxHp / 8); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("MoveEndPhase"); @@ -224,10 +224,10 @@ describe("Abilities - Disguise", () => { }); it("doesn't trigger if user is behind a substitute", async () => { - game.override.enemyMoveset(Moves.SUBSTITUTE).moveset(Moves.POWER_TRIP); + game.override.enemyMoveset(MoveId.SUBSTITUTE).moveset(MoveId.POWER_TRIP); await game.classicMode.startBattle(); - game.move.select(Moves.POWER_TRIP); + game.move.select(MoveId.POWER_TRIP); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); diff --git a/test/abilities/dry_skin.test.ts b/test/abilities/dry_skin.test.ts index 398d09393ab..549bb45ba9a 100644 --- a/test/abilities/dry_skin.test.ts +++ b/test/abilities/dry_skin.test.ts @@ -1,6 +1,6 @@ -import { Species } from "#app/enums/species"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; +import { SpeciesId } from "#enums/species-id"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -24,12 +24,12 @@ describe("Abilities - Dry Skin", () => { game.override .battleStyle("single") .disableCrits() - .enemyAbility(Abilities.DRY_SKIN) - .enemyMoveset(Moves.SPLASH) - .enemySpecies(Species.CHARMANDER) - .ability(Abilities.BALL_FETCH) - .moveset([Moves.SUNNY_DAY, Moves.RAIN_DANCE, Moves.SPLASH, Moves.WATER_GUN]) - .starterSpecies(Species.CHANDELURE); + .enemyAbility(AbilityId.DRY_SKIN) + .enemyMoveset(MoveId.SPLASH) + .enemySpecies(SpeciesId.CHARMANDER) + .ability(AbilityId.BALL_FETCH) + .moveset([MoveId.SUNNY_DAY, MoveId.RAIN_DANCE, MoveId.SPLASH, MoveId.WATER_GUN]) + .starterSpecies(SpeciesId.CHANDELURE); }); it("during sunlight, lose 1/8 of maximum health at the end of each turn", async () => { @@ -38,13 +38,13 @@ describe("Abilities - Dry Skin", () => { const enemy = game.scene.getEnemyPokemon()!; // first turn - game.move.select(Moves.SUNNY_DAY); + game.move.select(MoveId.SUNNY_DAY); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.hp).toBeLessThan(enemy.getMaxHp()); // second turn enemy.hp = enemy.getMaxHp(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.hp).toBeLessThan(enemy.getMaxHp()); }); @@ -57,19 +57,19 @@ describe("Abilities - Dry Skin", () => { enemy.hp = 1; // first turn - game.move.select(Moves.RAIN_DANCE); + game.move.select(MoveId.RAIN_DANCE); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.hp).toBeGreaterThan(1); // second turn enemy.hp = 1; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.hp).toBeGreaterThan(1); }); it("opposing fire attacks do 25% more damage", async () => { - game.override.moveset([Moves.FLAMETHROWER]); + game.override.moveset([MoveId.FLAMETHROWER]); await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; @@ -77,15 +77,15 @@ describe("Abilities - Dry Skin", () => { enemy.hp = initialHP; // first turn - game.move.select(Moves.FLAMETHROWER); + game.move.select(MoveId.FLAMETHROWER); await game.phaseInterceptor.to("TurnEndPhase"); const fireDamageTakenWithDrySkin = initialHP - enemy.hp; enemy.hp = initialHP; - game.override.enemyAbility(Abilities.NONE); + game.override.enemyAbility(AbilityId.NONE); // second turn - game.move.select(Moves.FLAMETHROWER); + game.move.select(MoveId.FLAMETHROWER); await game.phaseInterceptor.to("TurnEndPhase"); const fireDamageTakenWithoutDrySkin = initialHP - enemy.hp; @@ -99,13 +99,13 @@ describe("Abilities - Dry Skin", () => { enemy.hp = 1; - game.move.select(Moves.WATER_GUN); + game.move.select(MoveId.WATER_GUN); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.hp).toBeGreaterThan(1); }); it("opposing water attacks do not heal if they were protected from", async () => { - game.override.enemyMoveset([Moves.PROTECT]); + game.override.enemyMoveset([MoveId.PROTECT]); await game.classicMode.startBattle(); @@ -113,13 +113,13 @@ describe("Abilities - Dry Skin", () => { enemy.hp = 1; - game.move.select(Moves.WATER_GUN); + game.move.select(MoveId.WATER_GUN); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.hp).toBe(1); }); it("multi-strike water attacks only heal once", async () => { - game.override.moveset([Moves.WATER_GUN, Moves.WATER_SHURIKEN]); + game.override.moveset([MoveId.WATER_GUN, MoveId.WATER_SHURIKEN]); await game.classicMode.startBattle(); @@ -128,14 +128,14 @@ describe("Abilities - Dry Skin", () => { enemy.hp = 1; // first turn - game.move.select(Moves.WATER_SHURIKEN); + game.move.select(MoveId.WATER_SHURIKEN); await game.phaseInterceptor.to("TurnEndPhase"); const healthGainedFromWaterShuriken = enemy.hp - 1; enemy.hp = 1; // second turn - game.move.select(Moves.WATER_GUN); + game.move.select(MoveId.WATER_GUN); await game.phaseInterceptor.to("TurnEndPhase"); const healthGainedFromWaterGun = enemy.hp - 1; @@ -147,7 +147,7 @@ describe("Abilities - Dry Skin", () => { const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.WATER_GUN); + game.move.select(MoveId.WATER_GUN); enemy.hp = enemy.hp - 1; await game.phaseInterceptor.to("MoveEffectPhase"); diff --git a/test/abilities/early_bird.test.ts b/test/abilities/early_bird.test.ts index 0f298ba479d..e158ce1888b 100644 --- a/test/abilities/early_bird.test.ts +++ b/test/abilities/early_bird.test.ts @@ -1,8 +1,8 @@ import { Status } from "#app/data/status-effect"; import { MoveResult } from "#app/field/pokemon"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -25,34 +25,34 @@ describe("Abilities - Early Bird", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.REST, Moves.BELLY_DRUM, Moves.SPLASH]) - .ability(Abilities.EARLY_BIRD) + .moveset([MoveId.REST, MoveId.BELLY_DRUM, MoveId.SPLASH]) + .ability(AbilityId.EARLY_BIRD) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("reduces Rest's sleep time to 1 turn", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const player = game.scene.getPlayerPokemon()!; - game.move.select(Moves.BELLY_DRUM); + game.move.select(MoveId.BELLY_DRUM); await game.toNextTurn(); - game.move.select(Moves.REST); + game.move.select(MoveId.REST); await game.toNextTurn(); expect(player.status?.effect).toBe(StatusEffect.SLEEP); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(player.status?.effect).toBe(StatusEffect.SLEEP); expect(player.getLastXMoves(1)[0].result).toBe(MoveResult.FAIL); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(player.status?.effect).toBeUndefined(); @@ -60,18 +60,18 @@ describe("Abilities - Early Bird", () => { }); it("reduces 3-turn sleep to 1 turn", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const player = game.scene.getPlayerPokemon()!; player.status = new Status(StatusEffect.SLEEP, 0, 4); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(player.status?.effect).toBe(StatusEffect.SLEEP); expect(player.getLastXMoves(1)[0].result).toBe(MoveResult.FAIL); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(player.status?.effect).toBeUndefined(); @@ -79,12 +79,12 @@ describe("Abilities - Early Bird", () => { }); it("reduces 1-turn sleep to 0 turns", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const player = game.scene.getPlayerPokemon()!; player.status = new Status(StatusEffect.SLEEP, 0, 2); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(player.status?.effect).toBeUndefined(); diff --git a/test/abilities/flash_fire.test.ts b/test/abilities/flash_fire.test.ts index 8d94d21adf8..8fabda95c80 100644 --- a/test/abilities/flash_fire.test.ts +++ b/test/abilities/flash_fire.test.ts @@ -1,10 +1,10 @@ import { BattlerIndex } from "#app/battle"; import { BattlerTagType } from "#app/enums/battler-tag-type"; -import { Species } from "#app/enums/species"; +import { SpeciesId } from "#enums/species-id"; import { MovePhase } from "#app/phases/move-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -28,42 +28,42 @@ describe("Abilities - Flash Fire", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .ability(Abilities.FLASH_FIRE) - .enemyAbility(Abilities.BALL_FETCH) + .ability(AbilityId.FLASH_FIRE) + .enemyAbility(AbilityId.BALL_FETCH) .startingLevel(20) .enemyLevel(20) .disableCrits(); }); it("immune to Fire-type moves", async () => { - game.override.enemyMoveset([Moves.EMBER]).moveset(Moves.SPLASH); - await game.classicMode.startBattle([Species.BLISSEY]); + game.override.enemyMoveset([MoveId.EMBER]).moveset(MoveId.SPLASH); + await game.classicMode.startBattle([SpeciesId.BLISSEY]); const blissey = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); expect(blissey.hp).toBe(blissey.getMaxHp()); }, 20000); it("not activate if the Pokémon is protected from the Fire-type move", async () => { - game.override.enemyMoveset([Moves.EMBER]).moveset([Moves.PROTECT]); - await game.classicMode.startBattle([Species.BLISSEY]); + game.override.enemyMoveset([MoveId.EMBER]).moveset([MoveId.PROTECT]); + await game.classicMode.startBattle([SpeciesId.BLISSEY]); const blissey = game.scene.getPlayerPokemon()!; - game.move.select(Moves.PROTECT); + game.move.select(MoveId.PROTECT); await game.phaseInterceptor.to(TurnEndPhase); expect(blissey!.getTag(BattlerTagType.FIRE_BOOST)).toBeUndefined(); }, 20000); it("activated by Will-O-Wisp", async () => { - game.override.enemyMoveset([Moves.WILL_O_WISP]).moveset(Moves.SPLASH); - await game.classicMode.startBattle([Species.BLISSEY]); + game.override.enemyMoveset([MoveId.WILL_O_WISP]).moveset(MoveId.SPLASH); + await game.classicMode.startBattle([SpeciesId.BLISSEY]); const blissey = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.move.forceHit(); await game.phaseInterceptor.to(MovePhase, false); await game.move.forceHit(); @@ -73,44 +73,44 @@ describe("Abilities - Flash Fire", () => { }, 20000); it("activated after being frozen", async () => { - game.override.enemyMoveset([Moves.EMBER]).moveset(Moves.SPLASH); + game.override.enemyMoveset([MoveId.EMBER]).moveset(MoveId.SPLASH); game.override.statusEffect(StatusEffect.FREEZE); - await game.classicMode.startBattle([Species.BLISSEY]); + await game.classicMode.startBattle([SpeciesId.BLISSEY]); const blissey = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); expect(blissey!.getTag(BattlerTagType.FIRE_BOOST)).toBeDefined(); }, 20000); it("not passing with baton pass", async () => { - game.override.enemyMoveset([Moves.EMBER]).moveset([Moves.BATON_PASS]); - await game.classicMode.startBattle([Species.BLISSEY, Species.CHANSEY]); + game.override.enemyMoveset([MoveId.EMBER]).moveset([MoveId.BATON_PASS]); + await game.classicMode.startBattle([SpeciesId.BLISSEY, SpeciesId.CHANSEY]); // ensure use baton pass after enemy moved - game.move.select(Moves.BATON_PASS); + game.move.select(MoveId.BATON_PASS); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to(TurnEndPhase); const chansey = game.scene.getPlayerPokemon()!; - expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(Species.CHANSEY); + expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(SpeciesId.CHANSEY); expect(chansey!.getTag(BattlerTagType.FIRE_BOOST)).toBeUndefined(); }, 20000); it("boosts Fire-type move when the ability is activated", async () => { - game.override.enemyMoveset([Moves.FIRE_PLEDGE]).moveset([Moves.EMBER, Moves.SPLASH]); - game.override.enemyAbility(Abilities.FLASH_FIRE).ability(Abilities.NONE); - await game.classicMode.startBattle([Species.BLISSEY]); + game.override.enemyMoveset([MoveId.FIRE_PLEDGE]).moveset([MoveId.EMBER, MoveId.SPLASH]); + game.override.enemyAbility(AbilityId.FLASH_FIRE).ability(AbilityId.NONE); + await game.classicMode.startBattle([SpeciesId.BLISSEY]); const blissey = game.scene.getPlayerPokemon()!; const initialHP = 1000; blissey.hp = initialHP; // first turn - game.move.select(Moves.EMBER); + game.move.select(MoveId.EMBER); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to(TurnEndPhase); const originalDmg = initialHP - blissey.hp; @@ -119,7 +119,7 @@ describe("Abilities - Flash Fire", () => { blissey.hp = initialHP; // second turn - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); const flashFireDmg = initialHP - blissey.hp; @@ -127,17 +127,17 @@ describe("Abilities - Flash Fire", () => { }, 20000); it("still activates regardless of accuracy check", async () => { - game.override.moveset(Moves.FIRE_PLEDGE).enemyMoveset(Moves.EMBER); - game.override.enemyAbility(Abilities.NONE).ability(Abilities.FLASH_FIRE); - game.override.enemySpecies(Species.BLISSEY); - await game.classicMode.startBattle([Species.RATTATA]); + game.override.moveset(MoveId.FIRE_PLEDGE).enemyMoveset(MoveId.EMBER); + game.override.enemyAbility(AbilityId.NONE).ability(AbilityId.FLASH_FIRE); + game.override.enemySpecies(SpeciesId.BLISSEY); + await game.classicMode.startBattle([SpeciesId.RATTATA]); const blissey = game.scene.getEnemyPokemon()!; const initialHP = 1000; blissey.hp = initialHP; // first turn - game.move.select(Moves.FIRE_PLEDGE); + game.move.select(MoveId.FIRE_PLEDGE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); await game.move.forceMiss(); @@ -148,7 +148,7 @@ describe("Abilities - Flash Fire", () => { blissey.hp = initialHP; // second turn - game.move.select(Moves.FIRE_PLEDGE); + game.move.select(MoveId.FIRE_PLEDGE); await game.phaseInterceptor.to(TurnEndPhase); const flashFireDmg = initialHP - blissey.hp; diff --git a/test/abilities/flower_gift.test.ts b/test/abilities/flower_gift.test.ts index df8830bca6d..d4a03bb2330 100644 --- a/test/abilities/flower_gift.test.ts +++ b/test/abilities/flower_gift.test.ts @@ -1,11 +1,11 @@ import { BattlerIndex } from "#app/battle"; import { allAbilities } from "#app/data/data-lists"; -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { Stat } from "#app/enums/stat"; import { WeatherType } from "#app/enums/weather-type"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -19,13 +19,13 @@ describe("Abilities - Flower Gift", () => { /** * Tests reverting to normal form when Cloud Nine/Air Lock is active on the field * @param {GameManager} game The game manager instance - * @param {Abilities} ability The ability that is active on the field + * @param {AbilityId} ability The ability that is active on the field */ - const testRevertFormAgainstAbility = async (game: GameManager, ability: Abilities) => { - game.override.starterForms({ [Species.CASTFORM]: SUNSHINE_FORM }).enemyAbility(ability); - await game.classicMode.startBattle([Species.CASTFORM]); + const testRevertFormAgainstAbility = async (game: GameManager, ability: AbilityId) => { + game.override.starterForms({ [SpeciesId.CASTFORM]: SUNSHINE_FORM }).enemyAbility(ability); + await game.classicMode.startBattle([SpeciesId.CASTFORM]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); expect(game.scene.getPlayerPokemon()?.formIndex).toBe(OVERCAST_FORM); }; @@ -42,21 +42,21 @@ describe("Abilities - Flower Gift", () => { */ const testDamageDealt = async ( game: GameManager, - move: Moves, + move: MoveId, allyAttacker: boolean, - allyAbility = Abilities.BALL_FETCH, - enemyAbility = Abilities.BALL_FETCH, + allyAbility = AbilityId.BALL_FETCH, + enemyAbility = AbilityId.BALL_FETCH, ): Promise<[number, number]> => { game.override.battleStyle("double"); - game.override.moveset([Moves.SPLASH, Moves.SUNNY_DAY, move, Moves.HEAL_PULSE]); - game.override.enemyMoveset([Moves.SPLASH, Moves.HEAL_PULSE]); + game.override.moveset([MoveId.SPLASH, MoveId.SUNNY_DAY, move, MoveId.HEAL_PULSE]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.HEAL_PULSE]); const target_index = allyAttacker ? BattlerIndex.ENEMY : BattlerIndex.PLAYER_2; const attacker_index = allyAttacker ? BattlerIndex.PLAYER_2 : BattlerIndex.ENEMY; - const ally_move = allyAttacker ? move : Moves.SPLASH; - const enemy_move = allyAttacker ? Moves.SPLASH : move; + const ally_move = allyAttacker ? move : MoveId.SPLASH; + const enemy_move = allyAttacker ? MoveId.SPLASH : move; const ally_target = allyAttacker ? BattlerIndex.ENEMY : null; - await game.classicMode.startBattle([Species.CHERRIM, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.CHERRIM, SpeciesId.MAGIKARP]); const target = allyAttacker ? game.scene.getEnemyField()[0] : game.scene.getPlayerField()[1]; const initialHp = target.getMaxHp(); @@ -65,10 +65,10 @@ describe("Abilities - Flower Gift", () => { vi.spyOn(game.scene.getEnemyField()[0], "getAbility").mockReturnValue(allAbilities[enemyAbility]); // turn 1 - game.move.select(Moves.SUNNY_DAY, 0); + game.move.select(MoveId.SUNNY_DAY, 0); game.move.select(ally_move, 1, ally_target); await game.move.selectEnemyMove(enemy_move, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); // Ensure sunny day is used last. await game.setTurnOrder([attacker_index, target_index, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER]); await game.phaseInterceptor.to(TurnEndPhase); @@ -77,10 +77,10 @@ describe("Abilities - Flower Gift", () => { target.hp = initialHp; // turn 2. Make target use recover to reset hp calculation. - game.move.select(Moves.SPLASH, 0, target_index); + game.move.select(MoveId.SPLASH, 0, target_index); game.move.select(ally_move, 1, ally_target); await game.move.selectEnemyMove(enemy_move, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, target_index, attacker_index]); await game.phaseInterceptor.to(TurnEndPhase); const damageWithGift = initialHp - target.hp; @@ -101,17 +101,17 @@ describe("Abilities - Flower Gift", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.SUNSTEEL_STRIKE, Moves.SUNNY_DAY, Moves.MUD_SLAP]) - .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.SPLASH) - .enemyAbility(Abilities.BALL_FETCH) + .moveset([MoveId.SPLASH, MoveId.SUNSTEEL_STRIKE, MoveId.SUNNY_DAY, MoveId.MUD_SLAP]) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyMoveset(MoveId.SPLASH) + .enemyAbility(AbilityId.BALL_FETCH) .enemyLevel(100) .startingLevel(100); }); it("increases the ATK and SPDEF stat stages of the Pokémon with this Ability and its allies by 1.5× during Harsh Sunlight", async () => { game.override.battleStyle("double"); - await game.classicMode.startBattle([Species.CHERRIM, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.CHERRIM, SpeciesId.MAGIKARP]); const [cherrim, magikarp] = game.scene.getPlayerField(); const cherrimAtkStat = cherrim.getEffectiveStat(Stat.ATK); @@ -120,8 +120,8 @@ describe("Abilities - Flower Gift", () => { const magikarpAtkStat = magikarp.getEffectiveStat(Stat.ATK); const magikarpSpDefStat = magikarp.getEffectiveStat(Stat.SPDEF); - game.move.select(Moves.SUNNY_DAY, 0); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SUNNY_DAY, 0); + game.move.select(MoveId.SPLASH, 1); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -134,59 +134,64 @@ describe("Abilities - Flower Gift", () => { }); it("should not increase the damage of an ally using an ability ignoring move", async () => { - const [damageWithGift, damageWithoutGift] = await testDamageDealt(game, Moves.SUNSTEEL_STRIKE, true); + const [damageWithGift, damageWithoutGift] = await testDamageDealt(game, MoveId.SUNSTEEL_STRIKE, true); expect(damageWithGift).toBe(damageWithoutGift); }); it("should not increase the damage of a mold breaker ally", async () => { - const [damageWithGift, damageWithoutGift] = await testDamageDealt(game, Moves.TACKLE, true, Abilities.MOLD_BREAKER); + const [damageWithGift, damageWithoutGift] = await testDamageDealt( + game, + MoveId.TACKLE, + true, + AbilityId.MOLD_BREAKER, + ); expect(damageWithGift).toBe(damageWithoutGift); }); it("should decrease the damage an ally takes from a special attack", async () => { - const [damageWithoutGift, damageWithGift] = await testDamageDealt(game, Moves.MUD_SLAP, false); + const [damageWithoutGift, damageWithGift] = await testDamageDealt(game, MoveId.MUD_SLAP, false); expect(damageWithGift).toBeLessThan(damageWithoutGift); }); it("should not decrease the damage an ally takes from a mold breaker enemy using a special attack", async () => { const [damageWithoutGift, damageWithGift] = await testDamageDealt( game, - Moves.MUD_SLAP, + MoveId.MUD_SLAP, false, - Abilities.BALL_FETCH, - Abilities.MOLD_BREAKER, + AbilityId.BALL_FETCH, + AbilityId.MOLD_BREAKER, ); expect(damageWithGift).toBe(damageWithoutGift); }); it("changes the Pokemon's form during Harsh Sunlight", async () => { game.override.weather(WeatherType.HARSH_SUN); - await game.classicMode.startBattle([Species.CHERRIM]); + await game.classicMode.startBattle([SpeciesId.CHERRIM]); const cherrim = game.scene.getPlayerPokemon()!; expect(cherrim.formIndex).toBe(SUNSHINE_FORM); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); }); it("reverts to Overcast Form if a Pokémon on the field has Air Lock", async () => { - await testRevertFormAgainstAbility(game, Abilities.AIR_LOCK); + await testRevertFormAgainstAbility(game, AbilityId.AIR_LOCK); }); it("reverts to Overcast Form if a Pokémon on the field has Cloud Nine", async () => { - await testRevertFormAgainstAbility(game, Abilities.CLOUD_NINE); + await testRevertFormAgainstAbility(game, AbilityId.CLOUD_NINE); }); it("reverts to Overcast Form when the Flower Gift is suppressed, changes form under Harsh Sunlight/Sunny when it regains it", async () => { - game.override.enemyMoveset([Moves.GASTRO_ACID]).weather(WeatherType.HARSH_SUN); + game.override.enemyMoveset([MoveId.GASTRO_ACID]).weather(WeatherType.HARSH_SUN); - await game.classicMode.startBattle([Species.CHERRIM, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.CHERRIM, SpeciesId.MAGIKARP]); const cherrim = game.scene.getPlayerPokemon()!; expect(cherrim.formIndex).toBe(SUNSHINE_FORM); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -208,7 +213,7 @@ describe("Abilities - Flower Gift", () => { it("should be in Overcast Form after the user is switched out", async () => { game.override.weather(WeatherType.SUNNY); - await game.classicMode.startBattle([Species.CASTFORM, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.CASTFORM, SpeciesId.MAGIKARP]); const cherrim = game.scene.getPlayerPokemon()!; expect(cherrim.formIndex).toBe(SUNSHINE_FORM); diff --git a/test/abilities/flower_veil.test.ts b/test/abilities/flower_veil.test.ts index 7f51414d8a5..bd76541495d 100644 --- a/test/abilities/flower_veil.test.ts +++ b/test/abilities/flower_veil.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -28,14 +28,14 @@ describe("Abilities - Flower Veil", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) - .enemySpecies(Species.BULBASAUR) - .ability(Abilities.FLOWER_VEIL) + .moveset([MoveId.SPLASH]) + .enemySpecies(SpeciesId.BULBASAUR) + .ability(AbilityId.FLOWER_VEIL) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); /*********************************************** @@ -43,36 +43,36 @@ describe("Abilities - Flower Veil", () => { ***********************************************/ it("should not prevent any source of self-inflicted status conditions", async () => { game.override - .enemyMoveset([Moves.TACKLE, Moves.SPLASH]) - .moveset([Moves.REST, Moves.SPLASH]) + .enemyMoveset([MoveId.TACKLE, MoveId.SPLASH]) + .moveset([MoveId.REST, MoveId.SPLASH]) .startingHeldItems([{ name: "FLAME_ORB" }]); - await game.classicMode.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const user = game.scene.getPlayerPokemon()!; - game.move.select(Moves.REST); - await game.move.selectEnemyMove(Moves.TACKLE); + game.move.select(MoveId.REST); + await game.move.selectEnemyMove(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); expect(user.status?.effect).toBe(StatusEffect.SLEEP); // remove sleep status so we can get burn from the orb user.resetStatus(); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); expect(user.status?.effect).toBe(StatusEffect.BURN); }); it("should prevent drowsiness from yawn for a grass user and its grass allies", async () => { - game.override.enemyMoveset([Moves.YAWN]).moveset([Moves.SPLASH]).battleStyle("double"); - await game.classicMode.startBattle([Species.BULBASAUR, Species.BULBASAUR]); + game.override.enemyMoveset([MoveId.YAWN]).moveset([MoveId.SPLASH]).battleStyle("double"); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.BULBASAUR]); // Clear the ability of the ally to isolate the test const ally = game.scene.getPlayerField()[1]!; - vi.spyOn(ally, "getAbility").mockReturnValue(allAbilities[Abilities.BALL_FETCH]); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.YAWN, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.YAWN, BattlerIndex.PLAYER_2); + vi.spyOn(ally, "getAbility").mockReturnValue(allAbilities[AbilityId.BALL_FETCH]); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.YAWN, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.YAWN, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase"); const user = game.scene.getPlayerPokemon()!; @@ -81,28 +81,28 @@ describe("Abilities - Flower Veil", () => { }); it("should prevent status conditions from moves like Thunder Wave for a grass user and its grass allies", async () => { - game.override.enemyMoveset([Moves.THUNDER_WAVE]).moveset([Moves.SPLASH]).battleStyle("double"); - vi.spyOn(allMoves[Moves.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100); - await game.classicMode.startBattle([Species.BULBASAUR]); + game.override.enemyMoveset([MoveId.THUNDER_WAVE]).moveset([MoveId.SPLASH]).battleStyle("double"); + vi.spyOn(allMoves[MoveId.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.THUNDER_WAVE); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.THUNDER_WAVE); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); - vi.spyOn(allMoves[Moves.THUNDER_WAVE], "accuracy", "get").mockClear(); + vi.spyOn(allMoves[MoveId.THUNDER_WAVE], "accuracy", "get").mockClear(); }); it("should not prevent status conditions for a non-grass user and its non-grass allies", async () => { - game.override.enemyMoveset([Moves.THUNDER_WAVE]).moveset([Moves.SPLASH]).battleStyle("double"); - await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); + game.override.enemyMoveset([MoveId.THUNDER_WAVE]).moveset([MoveId.SPLASH]).battleStyle("double"); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]); const [user, ally] = game.scene.getPlayerField(); - vi.spyOn(allMoves[Moves.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100); + vi.spyOn(allMoves[MoveId.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100); // Clear the ally ability to isolate the test - vi.spyOn(ally, "getAbility").mockReturnValue(allAbilities[Abilities.BALL_FETCH]); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.THUNDER_WAVE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.THUNDER_WAVE, BattlerIndex.PLAYER_2); + vi.spyOn(ally, "getAbility").mockReturnValue(allAbilities[AbilityId.BALL_FETCH]); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.THUNDER_WAVE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.THUNDER_WAVE, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase"); expect(user.status?.effect).toBe(StatusEffect.PARALYSIS); expect(ally.status?.effect).toBe(StatusEffect.PARALYSIS); @@ -113,40 +113,40 @@ describe("Abilities - Flower Veil", () => { *******************************************/ it("should prevent the status drops from enemies for the a grass user and its grass allies", async () => { - game.override.enemyMoveset([Moves.GROWL]).moveset([Moves.SPLASH]).battleStyle("double"); - await game.classicMode.startBattle([Species.BULBASAUR, Species.BULBASAUR]); + game.override.enemyMoveset([MoveId.GROWL]).moveset([MoveId.SPLASH]).battleStyle("double"); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.BULBASAUR]); const [user, ally] = game.scene.getPlayerField(); // Clear the ally ability to isolate the test - vi.spyOn(ally, "getAbility").mockReturnValue(allAbilities[Abilities.BALL_FETCH]); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH); + vi.spyOn(ally, "getAbility").mockReturnValue(allAbilities[AbilityId.BALL_FETCH]); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(user.getStatStage(Stat.ATK)).toBe(0); expect(ally.getStatStage(Stat.ATK)).toBe(0); }); it("should not prevent status drops for a non-grass user and its non-grass allies", async () => { - game.override.enemyMoveset([Moves.GROWL]).moveset([Moves.SPLASH]).battleStyle("double"); - await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); + game.override.enemyMoveset([MoveId.GROWL]).moveset([MoveId.SPLASH]).battleStyle("double"); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]); const [user, ally] = game.scene.getPlayerField(); // Clear the ally ability to isolate the test - vi.spyOn(ally, "getAbility").mockReturnValue(allAbilities[Abilities.BALL_FETCH]); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH); + vi.spyOn(ally, "getAbility").mockReturnValue(allAbilities[AbilityId.BALL_FETCH]); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(user.getStatStage(Stat.ATK)).toBe(-2); expect(ally.getStatStage(Stat.ATK)).toBe(-2); }); it("should not prevent self-inflicted stat drops from moves like Close Combat for a user or its allies", async () => { - game.override.moveset([Moves.CLOSE_COMBAT]).battleStyle("double"); - await game.classicMode.startBattle([Species.BULBASAUR, Species.BULBASAUR]); + game.override.moveset([MoveId.CLOSE_COMBAT]).battleStyle("double"); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.BULBASAUR]); const [user, ally] = game.scene.getPlayerField(); // Clear the ally ability to isolate the test - vi.spyOn(ally, "getAbility").mockReturnValue(allAbilities[Abilities.BALL_FETCH]); + vi.spyOn(ally, "getAbility").mockReturnValue(allAbilities[AbilityId.BALL_FETCH]); - game.move.select(Moves.CLOSE_COMBAT, 0, BattlerIndex.ENEMY); - game.move.select(Moves.CLOSE_COMBAT, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.CLOSE_COMBAT, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.CLOSE_COMBAT, 1, BattlerIndex.ENEMY_2); await game.phaseInterceptor.to("BerryPhase"); expect(user.getStatStage(Stat.DEF)).toBe(-1); expect(user.getStatStage(Stat.SPDEF)).toBe(-1); @@ -155,10 +155,10 @@ describe("Abilities - Flower Veil", () => { }); it("should prevent the drops while retaining the boosts from spicy extract", async () => { - game.override.enemyMoveset([Moves.SPICY_EXTRACT]).moveset([Moves.SPLASH]); - await game.classicMode.startBattle([Species.BULBASAUR]); + game.override.enemyMoveset([MoveId.SPICY_EXTRACT]).moveset([MoveId.SPLASH]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const user = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(user.getStatStage(Stat.ATK)).toBe(2); expect(user.getStatStage(Stat.DEF)).toBe(0); diff --git a/test/abilities/forecast.test.ts b/test/abilities/forecast.test.ts index f2aa350ef37..b87519ae80a 100644 --- a/test/abilities/forecast.test.ts +++ b/test/abilities/forecast.test.ts @@ -1,14 +1,14 @@ import { BattlerIndex } from "#app/battle"; import { allAbilities } from "#app/data/data-lists"; -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { WeatherType } from "#app/enums/weather-type"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { MovePhase } from "#app/phases/move-phase"; import { PostSummonPhase } from "#app/phases/post-summon-phase"; import { QuietFormChangePhase } from "#app/phases/quiet-form-change-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -29,10 +29,10 @@ describe("Abilities - Forecast", () => { * @param initialForm The initial form pre form change */ const testWeatherFormChange = async (game: GameManager, weather: WeatherType, form: number, initialForm?: number) => { - game.override.weather(weather).starterForms({ [Species.CASTFORM]: initialForm }); - await game.classicMode.startBattle([Species.CASTFORM]); + game.override.weather(weather).starterForms({ [SpeciesId.CASTFORM]: initialForm }); + await game.classicMode.startBattle([SpeciesId.CASTFORM]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); expect(game.scene.getPlayerPokemon()?.formIndex).toBe(form); }; @@ -40,13 +40,13 @@ describe("Abilities - Forecast", () => { /** * Tests reverting to normal form when Cloud Nine/Air Lock is active on the field * @param {GameManager} game The game manager instance - * @param {Abilities} ability The ability that is active on the field + * @param {AbilityId} ability The ability that is active on the field */ - const testRevertFormAgainstAbility = async (game: GameManager, ability: Abilities) => { - game.override.starterForms({ [Species.CASTFORM]: SUNNY_FORM }).enemyAbility(ability); - await game.classicMode.startBattle([Species.CASTFORM]); + const testRevertFormAgainstAbility = async (game: GameManager, ability: AbilityId) => { + game.override.starterForms({ [SpeciesId.CASTFORM]: SUNNY_FORM }).enemyAbility(ability); + await game.classicMode.startBattle([SpeciesId.CASTFORM]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); expect(game.scene.getPlayerPokemon()?.formIndex).toBe(NORMAL_FORM); }; @@ -64,117 +64,117 @@ describe("Abilities - Forecast", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.RAIN_DANCE, Moves.SUNNY_DAY, Moves.TACKLE]) - .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.SPLASH) - .enemyAbility(Abilities.BALL_FETCH); + .moveset([MoveId.SPLASH, MoveId.RAIN_DANCE, MoveId.SUNNY_DAY, MoveId.TACKLE]) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyMoveset(MoveId.SPLASH) + .enemyAbility(AbilityId.BALL_FETCH); }); it( "changes form based on weather", async () => { game.override - .moveset([Moves.RAIN_DANCE, Moves.SUNNY_DAY, Moves.SNOWSCAPE, Moves.SPLASH]) + .moveset([MoveId.RAIN_DANCE, MoveId.SUNNY_DAY, MoveId.SNOWSCAPE, MoveId.SPLASH]) .battleStyle("double") .starterForms({ - [Species.KYOGRE]: 1, - [Species.GROUDON]: 1, - [Species.RAYQUAZA]: 1, + [SpeciesId.KYOGRE]: 1, + [SpeciesId.GROUDON]: 1, + [SpeciesId.RAYQUAZA]: 1, }); await game.classicMode.startBattle([ - Species.CASTFORM, - Species.FEEBAS, - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.ALTARIA, + SpeciesId.CASTFORM, + SpeciesId.FEEBAS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.ALTARIA, ]); - vi.spyOn(game.scene.getPlayerParty()[5], "getAbility").mockReturnValue(allAbilities[Abilities.CLOUD_NINE]); + vi.spyOn(game.scene.getPlayerParty()[5], "getAbility").mockReturnValue(allAbilities[AbilityId.CLOUD_NINE]); const castform = game.scene.getPlayerField()[0]; expect(castform.formIndex).toBe(NORMAL_FORM); - game.move.select(Moves.RAIN_DANCE); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.RAIN_DANCE); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("MovePhase"); await game.toNextTurn(); expect(castform.formIndex).toBe(RAINY_FORM); - game.move.select(Moves.SUNNY_DAY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SUNNY_DAY); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("MovePhase"); await game.toNextTurn(); expect(castform.formIndex).toBe(SUNNY_FORM); - game.move.select(Moves.SNOWSCAPE); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SNOWSCAPE); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("MovePhase"); await game.toNextTurn(); expect(castform.formIndex).toBe(SNOWY_FORM); - game.override.moveset([Moves.HAIL, Moves.SANDSTORM, Moves.SNOWSCAPE, Moves.SPLASH]); + game.override.moveset([MoveId.HAIL, MoveId.SANDSTORM, MoveId.SNOWSCAPE, MoveId.SPLASH]); - game.move.select(Moves.SANDSTORM); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SANDSTORM); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("MovePhase"); await game.toNextTurn(); expect(castform.formIndex).toBe(NORMAL_FORM); - game.move.select(Moves.HAIL); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.HAIL); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("MovePhase"); await game.toNextTurn(); expect(castform.formIndex).toBe(SNOWY_FORM); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSwitchPokemon(2); // Feebas now 2, Kyogre 1 await game.phaseInterceptor.to("MovePhase"); await game.toNextTurn(); expect(castform.formIndex).toBe(RAINY_FORM); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSwitchPokemon(3); // Kyogre now 3, Groudon 1 await game.phaseInterceptor.to("MovePhase"); await game.toNextTurn(); expect(castform.formIndex).toBe(SUNNY_FORM); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSwitchPokemon(4); // Groudon now 4, Rayquaza 1 await game.phaseInterceptor.to("MovePhase"); await game.toNextTurn(); expect(castform.formIndex).toBe(NORMAL_FORM); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSwitchPokemon(2); // Rayquaza now 2, Feebas 1 await game.phaseInterceptor.to("MovePhase"); await game.toNextTurn(); expect(castform.formIndex).toBe(NORMAL_FORM); - game.move.select(Moves.SNOWSCAPE); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SNOWSCAPE); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("MovePhase"); await game.toNextTurn(); expect(castform.formIndex).toBe(SNOWY_FORM); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSwitchPokemon(5); // Feebas now 5, Altaria 1 await game.phaseInterceptor.to("MovePhase"); await game.toNextTurn(); expect(castform.formIndex).toBe(NORMAL_FORM); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSwitchPokemon(5); // Altaria now 5, Feebas 1 await game.phaseInterceptor.to("MovePhase"); await game.toNextTurn(); @@ -182,8 +182,8 @@ describe("Abilities - Forecast", () => { expect(castform.formIndex).toBe(SNOWY_FORM); game.scene.arena.trySetWeather(WeatherType.FOG); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("TurnStartPhase"); expect(castform.formIndex).toBe(NORMAL_FORM); @@ -196,14 +196,14 @@ describe("Abilities - Forecast", () => { }); it("reverts to Normal Form if a Pokémon on the field has Air Lock", async () => { - await testRevertFormAgainstAbility(game, Abilities.AIR_LOCK); + await testRevertFormAgainstAbility(game, AbilityId.AIR_LOCK); }); it("has no effect on Pokémon other than Castform", async () => { - game.override.enemyAbility(Abilities.FORECAST).enemySpecies(Species.SHUCKLE); - await game.classicMode.startBattle([Species.CASTFORM]); + game.override.enemyAbility(AbilityId.FORECAST).enemySpecies(SpeciesId.SHUCKLE); + await game.classicMode.startBattle([SpeciesId.CASTFORM]); - game.move.select(Moves.RAIN_DANCE); + game.move.select(MoveId.RAIN_DANCE); await game.phaseInterceptor.to(TurnEndPhase); expect(game.scene.getPlayerPokemon()?.formIndex).toBe(RAINY_FORM); @@ -211,14 +211,14 @@ describe("Abilities - Forecast", () => { }); it("reverts to Normal Form when Forecast is suppressed, changes form to match the weather when it regains it", async () => { - game.override.enemyMoveset([Moves.GASTRO_ACID]).weather(WeatherType.RAIN); - await game.classicMode.startBattle([Species.CASTFORM, Species.PIKACHU]); + game.override.enemyMoveset([MoveId.GASTRO_ACID]).weather(WeatherType.RAIN); + await game.classicMode.startBattle([SpeciesId.CASTFORM, SpeciesId.PIKACHU]); const castform = game.scene.getPlayerPokemon()!; expect(castform.formIndex).toBe(RAINY_FORM); // First turn - Forecast is suppressed - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.move.forceHit(); @@ -242,11 +242,11 @@ describe("Abilities - Forecast", () => { }); it("does not change Castform's form until after Stealth Rock deals damage", async () => { - game.override.weather(WeatherType.RAIN).enemyMoveset([Moves.STEALTH_ROCK]); - await game.classicMode.startBattle([Species.PIKACHU, Species.CASTFORM]); + game.override.weather(WeatherType.RAIN).enemyMoveset([MoveId.STEALTH_ROCK]); + await game.classicMode.startBattle([SpeciesId.PIKACHU, SpeciesId.CASTFORM]); // First turn - set up stealth rock - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // Second turn - switch in Castform, regains Forecast @@ -267,7 +267,7 @@ describe("Abilities - Forecast", () => { it("should be in Normal Form after the user is switched out", async () => { game.override.weather(WeatherType.RAIN); - await game.classicMode.startBattle([Species.CASTFORM, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.CASTFORM, SpeciesId.MAGIKARP]); const castform = game.scene.getPlayerPokemon()!; expect(castform.formIndex).toBe(RAINY_FORM); diff --git a/test/abilities/friend_guard.test.ts b/test/abilities/friend_guard.test.ts index 350ff737c58..d401fa96feb 100644 --- a/test/abilities/friend_guard.test.ts +++ b/test/abilities/friend_guard.test.ts @@ -1,6 +1,6 @@ -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; -import { Abilities } from "#enums/abilities"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; +import { AbilityId } from "#enums/ability-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -27,24 +27,24 @@ describe("Moves - Friend Guard", () => { game = new GameManager(phaserGame); game.override .battleStyle("double") - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset([Moves.TACKLE, Moves.SPLASH, Moves.DRAGON_RAGE]) - .enemySpecies(Species.SHUCKLE) - .moveset([Moves.SPLASH]) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset([MoveId.TACKLE, MoveId.SPLASH, MoveId.DRAGON_RAGE]) + .enemySpecies(SpeciesId.SHUCKLE) + .moveset([MoveId.SPLASH]) .startingLevel(100); }); it("should reduce damage that other allied Pokémon receive from attacks (from any Pokémon) by 25%", async () => { - await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER]); const [player1, player2] = game.scene.getPlayerField(); const spy = vi.spyOn(player1, "getAttackDamage"); const enemy1 = game.scene.getEnemyField()[0]; - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); // Get the last return value from `getAttackDamage` @@ -52,16 +52,16 @@ describe("Moves - Friend Guard", () => { // Making sure the test is controlled; turn 1 damage is equal to base damage (after rounding) expect(turn1Damage).toBe( Math.floor( - player1.getBaseDamage({ source: enemy1, move: allMoves[Moves.TACKLE], moveCategory: MoveCategory.PHYSICAL }), + player1.getBaseDamage({ source: enemy1, move: allMoves[MoveId.TACKLE], moveCategory: MoveCategory.PHYSICAL }), ), ); - vi.spyOn(player2, "getAbility").mockReturnValue(allAbilities[Abilities.FRIEND_GUARD]); + vi.spyOn(player2, "getAbility").mockReturnValue(allAbilities[AbilityId.FRIEND_GUARD]); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); // Get the last return value from `getAttackDamage` @@ -69,32 +69,32 @@ describe("Moves - Friend Guard", () => { // With the ally's Friend Guard, damage should have been reduced from base damage by 25% expect(turn2Damage).toBe( Math.floor( - player1.getBaseDamage({ source: enemy1, move: allMoves[Moves.TACKLE], moveCategory: MoveCategory.PHYSICAL }) * + player1.getBaseDamage({ source: enemy1, move: allMoves[MoveId.TACKLE], moveCategory: MoveCategory.PHYSICAL }) * 0.75, ), ); }); it("should NOT reduce damage to pokemon with friend guard", async () => { - await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER]); const player2 = game.scene.getPlayerField()[1]; const spy = vi.spyOn(player2, "getAttackDamage"); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); const turn1Damage = spy.mock.results[spy.mock.results.length - 1].value.damage; - vi.spyOn(player2, "getAbility").mockReturnValue(allAbilities[Abilities.FRIEND_GUARD]); + vi.spyOn(player2, "getAbility").mockReturnValue(allAbilities[AbilityId.FRIEND_GUARD]); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); const turn2Damage = spy.mock.results[spy.mock.results.length - 1].value.damage; @@ -102,26 +102,26 @@ describe("Moves - Friend Guard", () => { }); it("should NOT reduce damage from fixed damage attacks", async () => { - await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER]); const [player1, player2] = game.scene.getPlayerField(); const spy = vi.spyOn(player1, "getAttackDamage"); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.DRAGON_RAGE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.DRAGON_RAGE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); const turn1Damage = spy.mock.results[spy.mock.results.length - 1].value.damage; expect(turn1Damage).toBe(40); - vi.spyOn(player2, "getAbility").mockReturnValue(allAbilities[Abilities.FRIEND_GUARD]); + vi.spyOn(player2, "getAbility").mockReturnValue(allAbilities[AbilityId.FRIEND_GUARD]); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.DRAGON_RAGE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.DRAGON_RAGE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); const turn2Damage = spy.mock.results[spy.mock.results.length - 1].value.damage; diff --git a/test/abilities/good_as_gold.test.ts b/test/abilities/good_as_gold.test.ts index adb54810381..d6c80a5347f 100644 --- a/test/abilities/good_as_gold.test.ts +++ b/test/abilities/good_as_gold.test.ts @@ -6,9 +6,9 @@ import { BattlerTagType } from "#app/enums/battler-tag-type"; import { Stat } from "#app/enums/stat"; import { StatusEffect } from "#app/enums/status-effect"; import { WeatherType } from "#app/enums/weather-type"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -30,33 +30,33 @@ describe("Abilities - Good As Gold", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) - .ability(Abilities.GOOD_AS_GOLD) + .moveset([MoveId.SPLASH]) + .ability(AbilityId.GOOD_AS_GOLD) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should block normal status moves", async () => { - game.override.enemyMoveset([Moves.GROWL]); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.enemyMoveset([MoveId.GROWL]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const player = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH, 0); + game.move.select(MoveId.SPLASH, 0); await game.phaseInterceptor.to("BerryPhase"); - expect(player.waveData.abilitiesApplied).toContain(Abilities.GOOD_AS_GOLD); + expect(player.waveData.abilitiesApplied).toContain(AbilityId.GOOD_AS_GOLD); expect(player.getStatStage(Stat.ATK)).toBe(0); }); it("should block memento and prevent the user from fainting", async () => { - game.override.enemyMoveset([Moves.MEMENTO]); - await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.MEMENTO); + game.override.enemyMoveset([MoveId.MEMENTO]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); + game.move.select(MoveId.MEMENTO); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.isFainted()).toBe(false); expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(0); @@ -64,21 +64,21 @@ describe("Abilities - Good As Gold", () => { it("should not block any status moves that target the field, one side, or all pokemon", async () => { game.override.battleStyle("double"); - game.override.enemyMoveset([Moves.STEALTH_ROCK, Moves.HAZE]); - game.override.moveset([Moves.SWORDS_DANCE, Moves.SAFEGUARD]); - await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); + game.override.enemyMoveset([MoveId.STEALTH_ROCK, MoveId.HAZE]); + game.override.moveset([MoveId.SWORDS_DANCE, MoveId.SAFEGUARD]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS]); const [good_as_gold, ball_fetch] = game.scene.getPlayerField(); // Force second pokemon to have ball fetch to isolate to a single mon. - vi.spyOn(ball_fetch, "getAbility").mockReturnValue(allAbilities[Abilities.BALL_FETCH]); + vi.spyOn(ball_fetch, "getAbility").mockReturnValue(allAbilities[AbilityId.BALL_FETCH]); - game.move.select(Moves.SWORDS_DANCE, 0); - game.move.select(Moves.SAFEGUARD, 1); - await game.move.selectEnemyMove(Moves.STEALTH_ROCK); - await game.move.selectEnemyMove(Moves.HAZE); + game.move.select(MoveId.SWORDS_DANCE, 0); + game.move.select(MoveId.SAFEGUARD, 1); + await game.move.selectEnemyMove(MoveId.STEALTH_ROCK); + await game.move.selectEnemyMove(MoveId.HAZE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("BerryPhase"); - expect(good_as_gold.getAbility().id).toBe(Abilities.GOOD_AS_GOLD); + expect(good_as_gold.getAbility().id).toBe(AbilityId.GOOD_AS_GOLD); expect(good_as_gold.getStatStage(Stat.ATK)).toBe(0); expect(game.scene.arena.getTagOnSide(ArenaTagType.STEALTH_ROCK, ArenaTagSide.PLAYER)).toBeDefined(); expect(game.scene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, ArenaTagSide.PLAYER)).toBeDefined(); @@ -86,10 +86,10 @@ describe("Abilities - Good As Gold", () => { it("should not block field targeted effects in singles", async () => { game.override.battleStyle("single"); - game.override.enemyMoveset([Moves.SPIKES]); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.enemyMoveset([MoveId.SPIKES]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(Moves.SPLASH, 0); + game.move.select(MoveId.SPLASH, 0); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.PLAYER)).toBeDefined(); @@ -97,11 +97,11 @@ describe("Abilities - Good As Gold", () => { it("should block the ally's helping hand", async () => { game.override.battleStyle("double"); - game.override.moveset([Moves.HELPING_HAND, Moves.TACKLE]); - await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); + game.override.moveset([MoveId.HELPING_HAND, MoveId.TACKLE]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS]); - game.move.select(Moves.HELPING_HAND, 0); - game.move.select(Moves.TACKLE, 1); + game.move.select(MoveId.HELPING_HAND, 0); + game.move.select(MoveId.TACKLE, 1); await game.phaseInterceptor.to("MoveEndPhase", true); expect(game.scene.getPlayerField()[1].getTag(BattlerTagType.HELPING_HAND)).toBeUndefined(); @@ -110,30 +110,30 @@ describe("Abilities - Good As Gold", () => { // TODO: re-enable when heal bell is fixed it.todo("should block the ally's heal bell, but only if the good as gold user is on the field", async () => { game.override.battleStyle("double").statusEffect(StatusEffect.BURN); - await game.classicMode.startBattle([Species.MILOTIC, Species.FEEBAS, Species.ABRA]); + await game.classicMode.startBattle([SpeciesId.MILOTIC, SpeciesId.FEEBAS, SpeciesId.ABRA]); const [milotic, feebas, abra] = game.scene.getPlayerParty(); - game.field.mockAbility(milotic, Abilities.GOOD_AS_GOLD); - game.field.mockAbility(feebas, Abilities.BALL_FETCH); - game.field.mockAbility(abra, Abilities.BALL_FETCH); + game.field.mockAbility(milotic, AbilityId.GOOD_AS_GOLD); + game.field.mockAbility(feebas, AbilityId.BALL_FETCH); + game.field.mockAbility(abra, AbilityId.BALL_FETCH); // turn 1 - game.move.use(Moves.SPLASH, 0); - game.move.use(Moves.HEAL_BELL, 1); + game.move.use(MoveId.SPLASH, 0); + game.move.use(MoveId.HEAL_BELL, 1); await game.toNextTurn(); expect(milotic.status?.effect).toBe(StatusEffect.BURN); game.doSwitchPokemon(2); - game.move.use(Moves.HEAL_BELL, 1); + game.move.use(MoveId.HEAL_BELL, 1); await game.toNextTurn(); expect(milotic.status?.effect).toBeUndefined(); }); it("should not block field targeted effects like rain dance", async () => { game.override.battleStyle("single"); - game.override.enemyMoveset([Moves.RAIN_DANCE]); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.enemyMoveset([MoveId.RAIN_DANCE]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.use(Moves.SPLASH, 0); + game.move.use(MoveId.SPLASH, 0); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.RAIN); diff --git a/test/abilities/gorilla_tactics.test.ts b/test/abilities/gorilla_tactics.test.ts index 06f0c1d0e3d..55b8a4addcd 100644 --- a/test/abilities/gorilla_tactics.test.ts +++ b/test/abilities/gorilla_tactics.test.ts @@ -1,8 +1,8 @@ import { BattlerIndex } from "#app/battle"; -import { Moves } from "#app/enums/moves"; -import { Species } from "#app/enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#app/enums/stat"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -24,46 +24,46 @@ describe("Abilities - Gorilla Tactics", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset([Moves.SPLASH, Moves.DISABLE]) - .enemySpecies(Species.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset([MoveId.SPLASH, MoveId.DISABLE]) + .enemySpecies(SpeciesId.MAGIKARP) .enemyLevel(30) - .moveset([Moves.SPLASH, Moves.TACKLE, Moves.GROWL]) - .ability(Abilities.GORILLA_TACTICS); + .moveset([MoveId.SPLASH, MoveId.TACKLE, MoveId.GROWL]) + .ability(AbilityId.GORILLA_TACTICS); }); it("boosts the Pokémon's Attack by 50%, but limits the Pokémon to using only one move", async () => { - await game.classicMode.startBattle([Species.GALAR_DARMANITAN]); + await game.classicMode.startBattle([SpeciesId.GALAR_DARMANITAN]); const darmanitan = game.scene.getPlayerPokemon()!; const initialAtkStat = darmanitan.getStat(Stat.ATK); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(darmanitan.getStat(Stat.ATK, false)).toBeCloseTo(initialAtkStat * 1.5); // Other moves should be restricted - expect(darmanitan.isMoveRestricted(Moves.TACKLE)).toBe(true); - expect(darmanitan.isMoveRestricted(Moves.SPLASH)).toBe(false); + expect(darmanitan.isMoveRestricted(MoveId.TACKLE)).toBe(true); + expect(darmanitan.isMoveRestricted(MoveId.SPLASH)).toBe(false); }); it("should struggle if the only usable move is disabled", async () => { - await game.classicMode.startBattle([Species.GALAR_DARMANITAN]); + await game.classicMode.startBattle([SpeciesId.GALAR_DARMANITAN]); const darmanitan = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; // First turn, lock move to Growl - game.move.select(Moves.GROWL); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.GROWL); + await game.move.selectEnemyMove(MoveId.SPLASH); // Second turn, Growl is interrupted by Disable await game.toNextTurn(); - game.move.select(Moves.GROWL); - await game.move.selectEnemyMove(Moves.DISABLE); + game.move.select(MoveId.GROWL); + await game.move.selectEnemyMove(MoveId.DISABLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -72,7 +72,7 @@ describe("Abilities - Gorilla Tactics", () => { // Third turn, Struggle is used await game.toNextTurn(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); diff --git a/test/abilities/gulp_missile.test.ts b/test/abilities/gulp_missile.test.ts index 64cd106cc5e..b56b316484f 100644 --- a/test/abilities/gulp_missile.test.ts +++ b/test/abilities/gulp_missile.test.ts @@ -1,9 +1,9 @@ import { BattlerIndex } from "#app/battle"; import type Pokemon from "#app/field/pokemon"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -43,20 +43,20 @@ describe("Abilities - Gulp Missile", () => { game.override .disableCrits() .battleStyle("single") - .moveset([Moves.SURF, Moves.DIVE, Moves.SPLASH, Moves.SUBSTITUTE]) - .enemySpecies(Species.SNORLAX) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .moveset([MoveId.SURF, MoveId.DIVE, MoveId.SPLASH, MoveId.SUBSTITUTE]) + .enemySpecies(SpeciesId.SNORLAX) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(5); }); it("changes to Gulping Form if HP is over half when Surf or Dive is used", async () => { - await game.classicMode.startBattle([Species.CRAMORANT]); + await game.classicMode.startBattle([SpeciesId.CRAMORANT]); const cramorant = game.scene.getPlayerPokemon()!; - game.move.select(Moves.DIVE); + game.move.select(MoveId.DIVE); await game.toNextTurn(); - game.move.select(Moves.DIVE); + game.move.select(MoveId.DIVE); await game.phaseInterceptor.to("MoveEndPhase"); expect(cramorant.getHpRatio()).toBeGreaterThanOrEqual(0.5); @@ -65,13 +65,13 @@ describe("Abilities - Gulp Missile", () => { }); it("changes to Gorging Form if HP is under half when Surf or Dive is used", async () => { - await game.classicMode.startBattle([Species.CRAMORANT]); + await game.classicMode.startBattle([SpeciesId.CRAMORANT]); const cramorant = game.scene.getPlayerPokemon()!; vi.spyOn(cramorant, "getHpRatio").mockReturnValue(0.49); expect(cramorant.getHpRatio()).toBe(0.49); - game.move.select(Moves.SURF); + game.move.select(MoveId.SURF); await game.phaseInterceptor.to("MoveEndPhase"); expect(cramorant.getTag(BattlerTagType.GULP_MISSILE_PIKACHU)).toBeDefined(); @@ -79,10 +79,10 @@ describe("Abilities - Gulp Missile", () => { }); it("changes to base form when switched out after Surf or Dive is used", async () => { - await game.classicMode.startBattle([Species.CRAMORANT, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.CRAMORANT, SpeciesId.MAGIKARP]); const cramorant = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SURF); + game.move.select(MoveId.SURF); await game.toNextTurn(); game.doSwitchPokemon(1); @@ -94,10 +94,10 @@ describe("Abilities - Gulp Missile", () => { }); it("changes form during Dive's charge turn", async () => { - await game.classicMode.startBattle([Species.CRAMORANT]); + await game.classicMode.startBattle([SpeciesId.CRAMORANT]); const cramorant = game.scene.getPlayerPokemon()!; - game.move.select(Moves.DIVE); + game.move.select(MoveId.DIVE); await game.phaseInterceptor.to("MoveEndPhase"); expect(cramorant.getTag(BattlerTagType.GULP_MISSILE_ARROKUDA)).toBeDefined(); @@ -105,26 +105,26 @@ describe("Abilities - Gulp Missile", () => { }); it("deals 1/4 of the attacker's maximum HP when hit by a damaging attack", async () => { - game.override.enemyMoveset(Moves.TACKLE); - await game.classicMode.startBattle([Species.CRAMORANT]); + game.override.enemyMoveset(MoveId.TACKLE); + await game.classicMode.startBattle([SpeciesId.CRAMORANT]); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "damageAndUpdate"); - game.move.select(Moves.SURF); + game.move.select(MoveId.SURF); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.damageAndUpdate).toHaveReturnedWith(getEffectDamage(enemy)); }); it("does not have any effect when hit by non-damaging attack", async () => { - game.override.enemyMoveset(Moves.TAIL_WHIP); - await game.classicMode.startBattle([Species.CRAMORANT]); + game.override.enemyMoveset(MoveId.TAIL_WHIP); + await game.classicMode.startBattle([SpeciesId.CRAMORANT]); const cramorant = game.scene.getPlayerPokemon()!; vi.spyOn(cramorant, "getHpRatio").mockReturnValue(0.55); - game.move.select(Moves.SURF); + game.move.select(MoveId.SURF); await game.phaseInterceptor.to("MoveEndPhase"); expect(cramorant.getTag(BattlerTagType.GULP_MISSILE_ARROKUDA)).toBeDefined(); @@ -137,8 +137,8 @@ describe("Abilities - Gulp Missile", () => { }); it("lowers attacker's DEF stat stage by 1 when hit in Gulping form", async () => { - game.override.enemyMoveset(Moves.TACKLE); - await game.classicMode.startBattle([Species.CRAMORANT]); + game.override.enemyMoveset(MoveId.TACKLE); + await game.classicMode.startBattle([SpeciesId.CRAMORANT]); const cramorant = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -146,7 +146,7 @@ describe("Abilities - Gulp Missile", () => { vi.spyOn(enemy, "damageAndUpdate"); vi.spyOn(cramorant, "getHpRatio").mockReturnValue(0.55); - game.move.select(Moves.SURF); + game.move.select(MoveId.SURF); await game.phaseInterceptor.to("MoveEndPhase"); expect(cramorant.getTag(BattlerTagType.GULP_MISSILE_ARROKUDA)).toBeDefined(); @@ -161,8 +161,8 @@ describe("Abilities - Gulp Missile", () => { }); it("paralyzes the enemy when hit in Gorging form", async () => { - game.override.enemyMoveset(Moves.TACKLE); - await game.classicMode.startBattle([Species.CRAMORANT]); + game.override.enemyMoveset(MoveId.TACKLE); + await game.classicMode.startBattle([SpeciesId.CRAMORANT]); const cramorant = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -170,7 +170,7 @@ describe("Abilities - Gulp Missile", () => { vi.spyOn(enemy, "damageAndUpdate"); vi.spyOn(cramorant, "getHpRatio").mockReturnValue(0.45); - game.move.select(Moves.SURF); + game.move.select(MoveId.SURF); await game.phaseInterceptor.to("MoveEndPhase"); expect(cramorant.getTag(BattlerTagType.GULP_MISSILE_PIKACHU)).toBeDefined(); @@ -185,12 +185,12 @@ describe("Abilities - Gulp Missile", () => { }); it("does not activate the ability when underwater", async () => { - game.override.enemyMoveset(Moves.SURF); - await game.classicMode.startBattle([Species.CRAMORANT]); + game.override.enemyMoveset(MoveId.SURF); + await game.classicMode.startBattle([SpeciesId.CRAMORANT]); const cramorant = game.scene.getPlayerPokemon()!; - game.move.select(Moves.DIVE); + game.move.select(MoveId.DIVE); await game.phaseInterceptor.to("BerryPhase", false); expect(cramorant.getTag(BattlerTagType.GULP_MISSILE_ARROKUDA)).toBeDefined(); @@ -198,15 +198,15 @@ describe("Abilities - Gulp Missile", () => { }); it("prevents effect damage but inflicts secondary effect on attacker with Magic Guard", async () => { - game.override.enemyMoveset(Moves.TACKLE).enemyAbility(Abilities.MAGIC_GUARD); - await game.classicMode.startBattle([Species.CRAMORANT]); + game.override.enemyMoveset(MoveId.TACKLE).enemyAbility(AbilityId.MAGIC_GUARD); + await game.classicMode.startBattle([SpeciesId.CRAMORANT]); const cramorant = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(cramorant, "getHpRatio").mockReturnValue(0.55); - game.move.select(Moves.SURF); + game.move.select(MoveId.SURF); await game.phaseInterceptor.to("MoveEndPhase"); const enemyHpPreEffect = enemy.hp; @@ -222,12 +222,12 @@ describe("Abilities - Gulp Missile", () => { }); it("activates on faint", async () => { - game.override.enemyMoveset(Moves.THUNDERBOLT); - await game.classicMode.startBattle([Species.CRAMORANT]); + game.override.enemyMoveset(MoveId.THUNDERBOLT); + await game.classicMode.startBattle([SpeciesId.CRAMORANT]); const cramorant = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SURF); + game.move.select(MoveId.SURF); await game.phaseInterceptor.to("FaintPhase"); expect(cramorant.hp).toBe(0); @@ -237,17 +237,17 @@ describe("Abilities - Gulp Missile", () => { }); it("doesn't trigger if user is behind a substitute", async () => { - game.override.enemyAbility(Abilities.STURDY).enemyMoveset([Moves.SPLASH, Moves.POWER_TRIP]); - await game.classicMode.startBattle([Species.CRAMORANT]); + game.override.enemyAbility(AbilityId.STURDY).enemyMoveset([MoveId.SPLASH, MoveId.POWER_TRIP]); + await game.classicMode.startBattle([SpeciesId.CRAMORANT]); - game.move.select(Moves.SURF); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SURF); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!.formIndex).toBe(GULPING_FORM); - game.move.select(Moves.SUBSTITUTE); - await game.move.selectEnemyMove(Moves.POWER_TRIP); + game.move.select(MoveId.SUBSTITUTE); + await game.move.selectEnemyMove(MoveId.POWER_TRIP); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); @@ -255,13 +255,13 @@ describe("Abilities - Gulp Missile", () => { }); it("cannot be suppressed", async () => { - game.override.enemyMoveset(Moves.GASTRO_ACID); - await game.classicMode.startBattle([Species.CRAMORANT]); + game.override.enemyMoveset(MoveId.GASTRO_ACID); + await game.classicMode.startBattle([SpeciesId.CRAMORANT]); const cramorant = game.scene.getPlayerPokemon()!; vi.spyOn(cramorant, "getHpRatio").mockReturnValue(0.55); - game.move.select(Moves.SURF); + game.move.select(MoveId.SURF); await game.phaseInterceptor.to("MoveEndPhase"); expect(cramorant.getTag(BattlerTagType.GULP_MISSILE_ARROKUDA)).toBeDefined(); @@ -269,19 +269,19 @@ describe("Abilities - Gulp Missile", () => { await game.phaseInterceptor.to("TurnEndPhase"); - expect(cramorant.hasAbility(Abilities.GULP_MISSILE)).toBe(true); + expect(cramorant.hasAbility(AbilityId.GULP_MISSILE)).toBe(true); expect(cramorant.getTag(BattlerTagType.GULP_MISSILE_ARROKUDA)).toBeDefined(); expect(cramorant.formIndex).toBe(GULPING_FORM); }); it("cannot be swapped with another ability", async () => { - game.override.enemyMoveset(Moves.SKILL_SWAP); - await game.classicMode.startBattle([Species.CRAMORANT]); + game.override.enemyMoveset(MoveId.SKILL_SWAP); + await game.classicMode.startBattle([SpeciesId.CRAMORANT]); const cramorant = game.scene.getPlayerPokemon()!; vi.spyOn(cramorant, "getHpRatio").mockReturnValue(0.55); - game.move.select(Moves.SURF); + game.move.select(MoveId.SURF); await game.phaseInterceptor.to("MoveEndPhase"); expect(cramorant.getTag(BattlerTagType.GULP_MISSILE_ARROKUDA)).toBeDefined(); @@ -289,18 +289,18 @@ describe("Abilities - Gulp Missile", () => { await game.phaseInterceptor.to("TurnEndPhase"); - expect(cramorant.hasAbility(Abilities.GULP_MISSILE)).toBe(true); + expect(cramorant.hasAbility(AbilityId.GULP_MISSILE)).toBe(true); expect(cramorant.getTag(BattlerTagType.GULP_MISSILE_ARROKUDA)).toBeDefined(); expect(cramorant.formIndex).toBe(GULPING_FORM); }); it("cannot be copied", async () => { - game.override.enemyAbility(Abilities.TRACE); + game.override.enemyAbility(AbilityId.TRACE); - await game.classicMode.startBattle([Species.CRAMORANT]); - game.move.select(Moves.SPLASH); + await game.classicMode.startBattle([SpeciesId.CRAMORANT]); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnStartPhase"); - expect(game.scene.getEnemyPokemon()?.hasAbility(Abilities.GULP_MISSILE)).toBe(false); + expect(game.scene.getEnemyPokemon()?.hasAbility(AbilityId.GULP_MISSILE)).toBe(false); }); }); diff --git a/test/abilities/harvest.test.ts b/test/abilities/harvest.test.ts index 36b1b879598..5a6ddf35459 100644 --- a/test/abilities/harvest.test.ts +++ b/test/abilities/harvest.test.ts @@ -4,10 +4,10 @@ import type Pokemon from "#app/field/pokemon"; import { BerryModifier, PreserveBerryModifier } from "#app/modifier/modifier"; import type { ModifierOverride } from "#app/modifier/modifier-type"; import type { BooleanHolder } from "#app/utils/common"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BerryType } from "#enums/berry-type"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import { WeatherType } from "#enums/weather-type"; import GameManager from "#test/testUtils/gameManager"; @@ -43,25 +43,25 @@ describe("Abilities - Harvest", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.NATURAL_GIFT, Moves.FALSE_SWIPE, Moves.GASTRO_ACID]) - .ability(Abilities.HARVEST) + .moveset([MoveId.SPLASH, MoveId.NATURAL_GIFT, MoveId.FALSE_SWIPE, MoveId.GASTRO_ACID]) + .ability(AbilityId.HARVEST) .startingLevel(100) .battleStyle("single") .disableCrits() .statusActivation(false) // Since we're using nuzzle to proc both enigma and sitrus berries .weather(WeatherType.SUNNY) // guaranteed recovery .enemyLevel(1) - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset([Moves.SPLASH, Moves.NUZZLE, Moves.KNOCK_OFF, Moves.INCINERATE]); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset([MoveId.SPLASH, MoveId.NUZZLE, MoveId.KNOCK_OFF, MoveId.INCINERATE]); }); it("replenishes eaten berries", async () => { game.override.startingHeldItems([{ name: "BERRY", type: BerryType.LUM, count: 1 }]); - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.NUZZLE); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.NUZZLE); await game.phaseInterceptor.to("BerryPhase"); expect(getPlayerBerries()).toHaveLength(0); expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toHaveLength(1); @@ -79,15 +79,15 @@ describe("Abilities - Harvest", () => { { name: "BERRY", type: BerryType.ENIGMA, count: 2 }, { name: "BERRY", type: BerryType.LUM, count: 2 }, ]) - .enemyAbility(Abilities.NEUTRALIZING_GAS); - await game.classicMode.startBattle([Species.MILOTIC]); + .enemyAbility(AbilityId.NEUTRALIZING_GAS); + await game.classicMode.startBattle([SpeciesId.MILOTIC]); const milotic = game.scene.getPlayerPokemon()!; expect(milotic).toBeDefined(); // Chug a few berries without harvest (should get tracked) - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.NUZZLE); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.NUZZLE); await game.toNextTurn(); expect(milotic.battleData.berriesEaten).toEqual(expect.arrayContaining([BerryType.ENIGMA, BerryType.LUM])); @@ -96,9 +96,9 @@ describe("Abilities - Harvest", () => { // Give ourselves harvest and disable enemy neut gas, // but force our roll to fail so we don't accidentally recover anything vi.spyOn(PostTurnRestoreBerryAbAttr.prototype, "canApplyPostTurn").mockReturnValueOnce(false); - game.override.ability(Abilities.HARVEST); - game.move.select(Moves.GASTRO_ACID); - await game.move.selectEnemyMove(Moves.NUZZLE); + game.override.ability(AbilityId.HARVEST); + game.move.select(MoveId.GASTRO_ACID); + await game.move.selectEnemyMove(MoveId.NUZZLE); await game.toNextTurn(); @@ -108,8 +108,8 @@ describe("Abilities - Harvest", () => { expect(getPlayerBerries()).toHaveLength(0); // proc a high roll and we _should_ get a berry back! - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); expect(milotic.battleData.berriesEaten).toHaveLength(3); @@ -119,14 +119,14 @@ describe("Abilities - Harvest", () => { it("remembers berries eaten array across waves", async () => { game.override .startingHeldItems([{ name: "BERRY", type: BerryType.PETAYA, count: 2 }]) - .ability(Abilities.BALL_FETCH); // don't actually need harvest for this test - await game.classicMode.startBattle([Species.REGIELEKI]); + .ability(AbilityId.BALL_FETCH); // don't actually need harvest for this test + await game.classicMode.startBattle([SpeciesId.REGIELEKI]); const regieleki = game.scene.getPlayerPokemon()!; regieleki.hp = 1; - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to("TurnEndPhase"); @@ -145,16 +145,16 @@ describe("Abilities - Harvest", () => { it("keeps harvested berries across reloads", async () => { game.override .startingHeldItems([{ name: "BERRY", type: BerryType.PETAYA, count: 1 }]) - .moveset([Moves.SPLASH, Moves.EARTHQUAKE]) - .enemyMoveset([Moves.SUPER_FANG, Moves.HEAL_PULSE]) - .enemyAbility(Abilities.COMPOUND_EYES); - await game.classicMode.startBattle([Species.REGIELEKI]); + .moveset([MoveId.SPLASH, MoveId.EARTHQUAKE]) + .enemyMoveset([MoveId.SUPER_FANG, MoveId.HEAL_PULSE]) + .enemyAbility(AbilityId.COMPOUND_EYES); + await game.classicMode.startBattle([SpeciesId.REGIELEKI]); const regieleki = game.scene.getPlayerPokemon()!; regieleki.hp = regieleki.getMaxHp() / 4 + 1; - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SUPER_FANG); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SUPER_FANG); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); @@ -164,8 +164,8 @@ describe("Abilities - Harvest", () => { expect(game.scene.getPlayerPokemon()?.getStatStage(Stat.SPATK)).toBe(1); // heal up so harvest doesn't proc and kill enemy - game.move.select(Moves.EARTHQUAKE); - await game.move.selectEnemyMove(Moves.HEAL_PULSE); + game.move.select(MoveId.EARTHQUAKE); + await game.move.selectEnemyMove(MoveId.HEAL_PULSE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextWave(); @@ -185,13 +185,13 @@ describe("Abilities - Harvest", () => { { name: "BERRY", type: BerryType.STARF, count: 2 }, ]; game.override.startingHeldItems(initBerries); - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const feebas = game.scene.getPlayerPokemon()!; feebas.battleData.berriesEaten = [BerryType.LUM, BerryType.STARF]; - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); // Force RNG roll to hit the first berry we find that matches. @@ -213,13 +213,13 @@ describe("Abilities - Harvest", () => { { name: "BERRY", type: BerryType.STARF, count: 3 }, ]; game.override.startingHeldItems(initBerries); - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const player = game.scene.getPlayerPokemon()!; player.battleData.berriesEaten = [BerryType.LUM, BerryType.STARF]; - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expectBerriesContaining(...initBerries); @@ -228,10 +228,10 @@ describe("Abilities - Harvest", () => { describe("move/ability interactions", () => { it("cannot restore incinerated berries", async () => { game.override.startingHeldItems([{ name: "BERRY", type: BerryType.STARF, count: 3 }]); - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.INCINERATE); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.INCINERATE); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toEqual([]); @@ -239,10 +239,10 @@ describe("Abilities - Harvest", () => { it("cannot restore knocked off berries", async () => { game.override.startingHeldItems([{ name: "BERRY", type: BerryType.STARF, count: 3 }]); - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.KNOCK_OFF); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.KNOCK_OFF); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toEqual([]); @@ -250,11 +250,11 @@ describe("Abilities - Harvest", () => { it("can restore berries eaten by Teatime", async () => { const initBerries: ModifierOverride[] = [{ name: "BERRY", type: BerryType.STARF, count: 1 }]; - game.override.startingHeldItems(initBerries).enemyMoveset(Moves.TEATIME); - await game.classicMode.startBattle([Species.FEEBAS]); + game.override.startingHeldItems(initBerries).enemyMoveset(MoveId.TEATIME); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); // nom nom the berr berr yay yay - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toEqual([]); @@ -263,11 +263,11 @@ describe("Abilities - Harvest", () => { it("cannot restore Plucked berries for either side", async () => { const initBerries: ModifierOverride[] = [{ name: "BERRY", type: BerryType.PETAYA, count: 1 }]; - game.override.startingHeldItems(initBerries).enemyAbility(Abilities.HARVEST).enemyMoveset(Moves.PLUCK); - await game.classicMode.startBattle([Species.FEEBAS]); + game.override.startingHeldItems(initBerries).enemyAbility(AbilityId.HARVEST).enemyMoveset(MoveId.PLUCK); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); // gobble gobble gobble - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); // pluck triggers harvest for neither side @@ -287,9 +287,9 @@ describe("Abilities - Harvest", () => { const initBerries: ModifierOverride[] = [{ name: "BERRY", type: BerryType.PETAYA, count: 1 }]; game.override.startingHeldItems(initBerries).startingModifier([{ name: "BERRY_POUCH", count: 1 }]); - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase", false); // won't trigger harvest since we didn't lose the berry (it just doesn't ever add it to the array) @@ -299,16 +299,16 @@ describe("Abilities - Harvest", () => { it("can restore stolen berries", async () => { const initBerries: ModifierOverride[] = [{ name: "BERRY", type: BerryType.SITRUS, count: 1 }]; - game.override.enemyHeldItems(initBerries).passiveAbility(Abilities.MAGICIAN).hasPassiveAbility(true); - await game.classicMode.startBattle([Species.MEOWSCARADA]); + game.override.enemyHeldItems(initBerries).passiveAbility(AbilityId.MAGICIAN).hasPassiveAbility(true); + await game.classicMode.startBattle([SpeciesId.MEOWSCARADA]); // pre damage const player = game.scene.getPlayerPokemon()!; player.hp = 1; // steal a sitrus and immediately consume it - game.move.select(Moves.FALSE_SWIPE); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.FALSE_SWIPE); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(player.battleData.berriesEaten).toEqual([BerryType.SITRUS]); @@ -320,10 +320,10 @@ describe("Abilities - Harvest", () => { // TODO: Enable once fling actually works...??? it.todo("can restore berries flung at user", async () => { - game.override.enemyHeldItems([{ name: "BERRY", type: BerryType.STARF, count: 1 }]).enemyMoveset(Moves.FLING); - await game.classicMode.startBattle([Species.FEEBAS]); + game.override.enemyHeldItems([{ name: "BERRY", type: BerryType.STARF, count: 1 }]).enemyMoveset(MoveId.FLING); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toBe([]); @@ -334,9 +334,9 @@ describe("Abilities - Harvest", () => { it.todo("can restore berries consumed via Natural Gift", async () => { const initBerries: ModifierOverride[] = [{ name: "BERRY", type: BerryType.STARF, count: 1 }]; game.override.startingHeldItems(initBerries); - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.NATURAL_GIFT); + game.move.select(MoveId.NATURAL_GIFT); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toHaveLength(0); diff --git a/test/abilities/healer.test.ts b/test/abilities/healer.test.ts index d292ad0f625..7f71be7b86e 100644 --- a/test/abilities/healer.test.ts +++ b/test/abilities/healer.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -30,29 +30,29 @@ describe("Abilities - Healer", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH) .battleStyle("double") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); - healerAttr = allAbilities[Abilities.HEALER].getAttrs(PostTurnResetStatusAbAttr)[0]; + healerAttr = allAbilities[AbilityId.HEALER].getAttrs(PostTurnResetStatusAbAttr)[0]; healerAttrSpy = vi .spyOn(healerAttr, "getCondition") .mockReturnValue((pokemon: Pokemon) => !isNullOrUndefined(pokemon.getAlly())); }); it("should not queue a message phase for healing if the ally has fainted", async () => { - game.override.moveset([Moves.SPLASH, Moves.LUNAR_DANCE]); - await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); + game.override.moveset([MoveId.SPLASH, MoveId.LUNAR_DANCE]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]); const user = game.scene.getPlayerPokemon()!; // Only want one magikarp to have the ability. - vi.spyOn(user, "getAbility").mockReturnValue(allAbilities[Abilities.HEALER]); - game.move.select(Moves.SPLASH); + vi.spyOn(user, "getAbility").mockReturnValue(allAbilities[AbilityId.HEALER]); + game.move.select(MoveId.SPLASH); // faint the ally - game.move.select(Moves.LUNAR_DANCE, 1); + game.move.select(MoveId.LUNAR_DANCE, 1); const abSpy = vi.spyOn(healerAttr, "canApplyPostTurn"); await game.phaseInterceptor.to("TurnEndPhase"); @@ -65,13 +65,13 @@ describe("Abilities - Healer", () => { }); it("should heal the status of an ally if the ally has a status", async () => { - await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]); const [user, ally] = game.scene.getPlayerField(); // Only want one magikarp to have the ability. - vi.spyOn(user, "getAbility").mockReturnValue(allAbilities[Abilities.HEALER]); + vi.spyOn(user, "getAbility").mockReturnValue(allAbilities[AbilityId.HEALER]); expect(ally.trySetStatus(StatusEffect.BURN)).toBe(true); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("TurnEndPhase"); await game.toNextTurn(); @@ -81,13 +81,13 @@ describe("Abilities - Healer", () => { // TODO: Healer is currently checked before the it.todo("should heal a burn before its end of turn damage", async () => { - await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]); const [user, ally] = game.scene.getPlayerField(); // Only want one magikarp to have the ability. - vi.spyOn(user, "getAbility").mockReturnValue(allAbilities[Abilities.HEALER]); + vi.spyOn(user, "getAbility").mockReturnValue(allAbilities[AbilityId.HEALER]); expect(ally.trySetStatus(StatusEffect.BURN)).toBe(true); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("TurnEndPhase"); await game.toNextTurn(); diff --git a/test/abilities/heatproof.test.ts b/test/abilities/heatproof.test.ts index 0bec7e4a3db..f705e8bf785 100644 --- a/test/abilities/heatproof.test.ts +++ b/test/abilities/heatproof.test.ts @@ -1,9 +1,9 @@ -import { Species } from "#app/enums/species"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#app/enums/status-effect"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { toDmgValue } from "#app/utils/common"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -27,13 +27,13 @@ describe("Abilities - Heatproof", () => { game.override .battleStyle("single") .disableCrits() - .enemySpecies(Species.CHARMANDER) - .enemyAbility(Abilities.HEATPROOF) - .enemyMoveset(Moves.SPLASH) + .enemySpecies(SpeciesId.CHARMANDER) + .enemyAbility(AbilityId.HEATPROOF) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(100) - .starterSpecies(Species.CHANDELURE) - .ability(Abilities.BALL_FETCH) - .moveset([Moves.FLAMETHROWER, Moves.SPLASH]) + .starterSpecies(SpeciesId.CHANDELURE) + .ability(AbilityId.BALL_FETCH) + .moveset([MoveId.FLAMETHROWER, MoveId.SPLASH]) .startingLevel(100); }); @@ -44,14 +44,14 @@ describe("Abilities - Heatproof", () => { const initialHP = 1000; enemy.hp = initialHP; - game.move.select(Moves.FLAMETHROWER); + game.move.select(MoveId.FLAMETHROWER); await game.phaseInterceptor.to(TurnEndPhase); const heatproofDamage = initialHP - enemy.hp; enemy.hp = initialHP; - game.override.enemyAbility(Abilities.BALL_FETCH); + game.override.enemyAbility(AbilityId.BALL_FETCH); - game.move.select(Moves.FLAMETHROWER); + game.move.select(MoveId.FLAMETHROWER); await game.phaseInterceptor.to(TurnEndPhase); const regularDamage = initialHP - enemy.hp; @@ -60,12 +60,12 @@ describe("Abilities - Heatproof", () => { }); it("reduces Burn damage by half", async () => { - game.override.enemyStatusEffect(StatusEffect.BURN).enemySpecies(Species.ABRA); + game.override.enemyStatusEffect(StatusEffect.BURN).enemySpecies(SpeciesId.ABRA); await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // Normal burn damage is /16 diff --git a/test/abilities/honey_gather.test.ts b/test/abilities/honey_gather.test.ts index a74a40c9c1e..e2f87f0af37 100644 --- a/test/abilities/honey_gather.test.ts +++ b/test/abilities/honey_gather.test.ts @@ -1,8 +1,8 @@ import type { CommandPhase } from "#app/phases/command-phase"; import { Command } from "#app/ui/command-ui-handler"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -24,32 +24,32 @@ describe("Abilities - Honey Gather", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.ROAR, Moves.THUNDERBOLT]) + .moveset([MoveId.SPLASH, MoveId.ROAR, MoveId.THUNDERBOLT]) .startingLevel(100) - .ability(Abilities.HONEY_GATHER) - .passiveAbility(Abilities.RUN_AWAY) + .ability(AbilityId.HONEY_GATHER) + .passiveAbility(AbilityId.RUN_AWAY) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should give money when winning a battle", async () => { - await game.classicMode.startBattle([Species.MILOTIC]); + await game.classicMode.startBattle([SpeciesId.MILOTIC]); game.scene.money = 1000; - game.move.select(Moves.THUNDERBOLT); + game.move.select(MoveId.THUNDERBOLT); await game.toNextWave(); expect(game.scene.money).toBeGreaterThan(1000); }); it("should not give money when the enemy pokemon flees", async () => { - await game.classicMode.startBattle([Species.MILOTIC]); + await game.classicMode.startBattle([SpeciesId.MILOTIC]); game.scene.money = 1000; - game.move.select(Moves.ROAR); + game.move.select(MoveId.ROAR); await game.toNextTurn(); expect(game.scene.money).toBe(1000); @@ -57,7 +57,7 @@ describe("Abilities - Honey Gather", () => { }); it("should not give money when the player flees", async () => { - await game.classicMode.startBattle([Species.MILOTIC]); + await game.classicMode.startBattle([SpeciesId.MILOTIC]); game.scene.money = 1000; // something weird is going on with the test framework, so this is required to prevent a crash diff --git a/test/abilities/hustle.test.ts b/test/abilities/hustle.test.ts index 85b6e611d6d..58aa01bb39a 100644 --- a/test/abilities/hustle.test.ts +++ b/test/abilities/hustle.test.ts @@ -1,8 +1,8 @@ import { allMoves } from "#app/data/data-lists"; -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { Stat } from "#app/enums/stat"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -24,23 +24,23 @@ describe("Abilities - Hustle", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .ability(Abilities.HUSTLE) - .moveset([Moves.TACKLE, Moves.GIGA_DRAIN, Moves.FISSURE]) + .ability(AbilityId.HUSTLE) + .moveset([MoveId.TACKLE, MoveId.GIGA_DRAIN, MoveId.FISSURE]) .disableCrits() .battleStyle("single") - .enemyMoveset(Moves.SPLASH) - .enemySpecies(Species.SHUCKLE) - .enemyAbility(Abilities.BALL_FETCH); + .enemyMoveset(MoveId.SPLASH) + .enemySpecies(SpeciesId.SHUCKLE) + .enemyAbility(AbilityId.BALL_FETCH); }); it("increases the user's Attack stat by 50%", async () => { - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); const pikachu = game.scene.getPlayerPokemon()!; const atk = pikachu.stats[Stat.ATK]; vi.spyOn(pikachu, "getEffectiveStat"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.move.forceHit(); await game.phaseInterceptor.to("DamageAnimPhase"); @@ -48,26 +48,26 @@ describe("Abilities - Hustle", () => { }); it("lowers the accuracy of the user's physical moves by 20%", async () => { - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); const pikachu = game.scene.getPlayerPokemon()!; vi.spyOn(pikachu, "getAccuracyMultiplier"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("MoveEffectPhase"); expect(pikachu.getAccuracyMultiplier).toHaveReturnedWith(0.8); }); it("does not affect non-physical moves", async () => { - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); const pikachu = game.scene.getPlayerPokemon()!; const spatk = pikachu.stats[Stat.SPATK]; vi.spyOn(pikachu, "getEffectiveStat"); vi.spyOn(pikachu, "getAccuracyMultiplier"); - game.move.select(Moves.GIGA_DRAIN); + game.move.select(MoveId.GIGA_DRAIN); await game.phaseInterceptor.to("DamageAnimPhase"); expect(pikachu.getEffectiveStat).toHaveReturnedWith(spatk); @@ -78,18 +78,18 @@ describe("Abilities - Hustle", () => { game.override.startingLevel(100); game.override.enemyLevel(30); - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); const pikachu = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; vi.spyOn(pikachu, "getAccuracyMultiplier"); - vi.spyOn(allMoves[Moves.FISSURE], "calculateBattleAccuracy"); + vi.spyOn(allMoves[MoveId.FISSURE], "calculateBattleAccuracy"); - game.move.select(Moves.FISSURE); + game.move.select(MoveId.FISSURE); await game.phaseInterceptor.to("DamageAnimPhase"); expect(enemyPokemon.turnData.damageTaken).toBe(enemyPokemon.getMaxHp()); expect(pikachu.getAccuracyMultiplier).toHaveReturnedWith(1); - expect(allMoves[Moves.FISSURE].calculateBattleAccuracy).toHaveReturnedWith(100); + expect(allMoves[MoveId.FISSURE].calculateBattleAccuracy).toHaveReturnedWith(100); }); }); diff --git a/test/abilities/hyper_cutter.test.ts b/test/abilities/hyper_cutter.test.ts index 76b66c2990e..211be9a0533 100644 --- a/test/abilities/hyper_cutter.test.ts +++ b/test/abilities/hyper_cutter.test.ts @@ -1,7 +1,7 @@ import { Stat } from "#enums/stat"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -24,11 +24,11 @@ describe("Abilities - Hyper Cutter", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .moveset([Moves.SAND_ATTACK, Moves.NOBLE_ROAR, Moves.DEFOG, Moves.OCTOLOCK]) - .ability(Abilities.BALL_FETCH) - .enemySpecies(Species.SHUCKLE) - .enemyAbility(Abilities.HYPER_CUTTER) - .enemyMoveset(Moves.SPLASH); + .moveset([MoveId.SAND_ATTACK, MoveId.NOBLE_ROAR, MoveId.DEFOG, MoveId.OCTOLOCK]) + .ability(AbilityId.BALL_FETCH) + .enemySpecies(SpeciesId.SHUCKLE) + .enemyAbility(AbilityId.HYPER_CUTTER) + .enemyMoveset(MoveId.SPLASH); }); // Reference Link: https://bulbapedia.bulbagarden.net/wiki/Hyper_Cutter_(Ability) @@ -38,16 +38,16 @@ describe("Abilities - Hyper Cutter", () => { const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.OCTOLOCK); + game.move.select(MoveId.OCTOLOCK); await game.toNextTurn(); - game.move.select(Moves.DEFOG); + game.move.select(MoveId.DEFOG); await game.toNextTurn(); - game.move.select(Moves.NOBLE_ROAR); + game.move.select(MoveId.NOBLE_ROAR); await game.toNextTurn(); - game.move.select(Moves.SAND_ATTACK); + game.move.select(MoveId.SAND_ATTACK); await game.toNextTurn(); - game.override.moveset([Moves.STRING_SHOT]); - game.move.select(Moves.STRING_SHOT); + game.override.moveset([MoveId.STRING_SHOT]); + game.move.select(MoveId.STRING_SHOT); await game.toNextTurn(); expect(enemy.getStatStage(Stat.ATK)).toEqual(0); diff --git a/test/abilities/ice_face.test.ts b/test/abilities/ice_face.test.ts index cb9530fe355..6ef91981cf3 100644 --- a/test/abilities/ice_face.test.ts +++ b/test/abilities/ice_face.test.ts @@ -4,10 +4,10 @@ import { MoveEndPhase } from "#app/phases/move-end-phase"; import { QuietFormChangePhase } from "#app/phases/quiet-form-change-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -31,15 +31,15 @@ describe("Abilities - Ice Face", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleStyle("single"); - game.override.enemySpecies(Species.EISCUE); - game.override.enemyAbility(Abilities.ICE_FACE); - game.override.moveset([Moves.TACKLE, Moves.ICE_BEAM, Moves.TOXIC_THREAD, Moves.HAIL]); + game.override.enemySpecies(SpeciesId.EISCUE); + game.override.enemyAbility(AbilityId.ICE_FACE); + game.override.moveset([MoveId.TACKLE, MoveId.ICE_BEAM, MoveId.TOXIC_THREAD, MoveId.HAIL]); }); it("takes no damage from physical move and transforms to Noice", async () => { - await game.classicMode.startBattle([Species.HITMONLEE]); + await game.classicMode.startBattle([SpeciesId.HITMONLEE]); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(MoveEndPhase); @@ -51,11 +51,11 @@ describe("Abilities - Ice Face", () => { }); it("takes no damage from the first hit of multihit physical move and transforms to Noice", async () => { - game.override.moveset([Moves.SURGING_STRIKES]); + game.override.moveset([MoveId.SURGING_STRIKES]); game.override.enemyLevel(1); - await game.classicMode.startBattle([Species.HITMONLEE]); + await game.classicMode.startBattle([SpeciesId.HITMONLEE]); - game.move.select(Moves.SURGING_STRIKES); + game.move.select(MoveId.SURGING_STRIKES); const eiscue = game.scene.getEnemyPokemon()!; expect(eiscue.getTag(BattlerTagType.ICE_FACE)).toBeDefined(); @@ -79,9 +79,9 @@ describe("Abilities - Ice Face", () => { }); it("takes damage from special moves", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(Moves.ICE_BEAM); + game.move.select(MoveId.ICE_BEAM); await game.phaseInterceptor.to(MoveEndPhase); @@ -93,9 +93,9 @@ describe("Abilities - Ice Face", () => { }); it("takes effects from status moves", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(Moves.TOXIC_THREAD); + game.move.select(MoveId.TOXIC_THREAD); await game.phaseInterceptor.to(MoveEndPhase); @@ -106,11 +106,11 @@ describe("Abilities - Ice Face", () => { }); it("transforms to Ice Face when Hail or Snow starts", async () => { - game.override.moveset([Moves.QUICK_ATTACK]).enemyMoveset(Moves.HAIL); + game.override.moveset([MoveId.QUICK_ATTACK]).enemyMoveset(MoveId.HAIL); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(Moves.QUICK_ATTACK); + game.move.select(MoveId.QUICK_ATTACK); await game.phaseInterceptor.to(MoveEndPhase); @@ -127,11 +127,11 @@ describe("Abilities - Ice Face", () => { }); it("transforms to Ice Face when summoned on arena with active Snow or Hail", async () => { - game.override.enemyMoveset(Moves.TACKLE).moveset([Moves.SNOWSCAPE]); + game.override.enemyMoveset(MoveId.TACKLE).moveset([MoveId.SNOWSCAPE]); - await game.classicMode.startBattle([Species.EISCUE, Species.NINJASK]); + await game.classicMode.startBattle([SpeciesId.EISCUE, SpeciesId.NINJASK]); - game.move.select(Moves.SNOWSCAPE); + game.move.select(MoveId.SNOWSCAPE); await game.phaseInterceptor.to(TurnEndPhase); let eiscue = game.scene.getPlayerPokemon()!; @@ -153,11 +153,11 @@ describe("Abilities - Ice Face", () => { }); it("will not revert to its Ice Face if there is already Hail when it changes into Noice", async () => { - game.override.enemySpecies(Species.SHUCKLE).enemyMoveset(Moves.TACKLE); + game.override.enemySpecies(SpeciesId.SHUCKLE).enemyMoveset(MoveId.TACKLE); - await game.classicMode.startBattle([Species.EISCUE]); + await game.classicMode.startBattle([SpeciesId.EISCUE]); - game.move.select(Moves.HAIL); + game.move.select(MoveId.HAIL); const eiscue = game.scene.getPlayerPokemon()!; await game.phaseInterceptor.to(QuietFormChangePhase); @@ -172,11 +172,11 @@ describe("Abilities - Ice Face", () => { }); it("persists form change when switched out", async () => { - game.override.enemyMoveset(Moves.QUICK_ATTACK); + game.override.enemyMoveset(MoveId.QUICK_ATTACK); - await game.classicMode.startBattle([Species.EISCUE, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.EISCUE, SpeciesId.MAGIKARP]); - game.move.select(Moves.ICE_BEAM); + game.move.select(MoveId.ICE_BEAM); await game.phaseInterceptor.to(TurnEndPhase); let eiscue = game.scene.getPlayerPokemon()!; @@ -198,19 +198,19 @@ describe("Abilities - Ice Face", () => { it("reverts to Ice Face on arena reset", async () => { game.override.startingWave(4); game.override.startingLevel(4); - game.override.enemySpecies(Species.MAGIKARP); + game.override.enemySpecies(SpeciesId.MAGIKARP); game.override.starterForms({ - [Species.EISCUE]: noiceForm, + [SpeciesId.EISCUE]: noiceForm, }); - await game.classicMode.startBattle([Species.EISCUE]); + await game.classicMode.startBattle([SpeciesId.EISCUE]); const eiscue = game.scene.getPlayerPokemon()!; expect(eiscue.formIndex).toBe(noiceForm); expect(eiscue.getTag(BattlerTagType.ICE_FACE)).toBeUndefined(); - game.move.select(Moves.ICE_BEAM); + game.move.select(MoveId.ICE_BEAM); await game.doKillOpponents(); await game.phaseInterceptor.to(TurnEndPhase); game.doSelectModifier(); @@ -221,10 +221,10 @@ describe("Abilities - Ice Face", () => { }); it("doesn't trigger if user is behind a substitute", async () => { - game.override.enemyMoveset(Moves.SUBSTITUTE).moveset(Moves.POWER_TRIP); + game.override.enemyMoveset(MoveId.SUBSTITUTE).moveset(MoveId.POWER_TRIP); await game.classicMode.startBattle(); - game.move.select(Moves.POWER_TRIP); + game.move.select(MoveId.POWER_TRIP); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); @@ -232,11 +232,11 @@ describe("Abilities - Ice Face", () => { }); it("cannot be suppressed", async () => { - game.override.moveset([Moves.GASTRO_ACID]); + game.override.moveset([MoveId.GASTRO_ACID]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(Moves.GASTRO_ACID); + game.move.select(MoveId.GASTRO_ACID); await game.phaseInterceptor.to(TurnEndPhase); @@ -248,11 +248,11 @@ describe("Abilities - Ice Face", () => { }); it("cannot be swapped with another ability", async () => { - game.override.moveset([Moves.SKILL_SWAP]); + game.override.moveset([MoveId.SKILL_SWAP]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(Moves.SKILL_SWAP); + game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to(TurnEndPhase); @@ -260,15 +260,15 @@ describe("Abilities - Ice Face", () => { expect(eiscue.getTag(BattlerTagType.ICE_FACE)).not.toBe(undefined); expect(eiscue.formIndex).toBe(icefaceForm); - expect(eiscue.hasAbility(Abilities.ICE_FACE)).toBe(true); + expect(eiscue.hasAbility(AbilityId.ICE_FACE)).toBe(true); }); it("cannot be copied", async () => { - game.override.ability(Abilities.TRACE); + game.override.ability(AbilityId.TRACE); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(Moves.SIMPLE_BEAM); + game.move.select(MoveId.SIMPLE_BEAM); await game.phaseInterceptor.to(TurnInitPhase); @@ -276,6 +276,6 @@ describe("Abilities - Ice Face", () => { expect(eiscue.getTag(BattlerTagType.ICE_FACE)).not.toBe(undefined); expect(eiscue.formIndex).toBe(icefaceForm); - expect(game.scene.getPlayerPokemon()!.hasAbility(Abilities.TRACE)).toBe(true); + expect(game.scene.getPlayerPokemon()!.hasAbility(AbilityId.TRACE)).toBe(true); }); }); diff --git a/test/abilities/illuminate.test.ts b/test/abilities/illuminate.test.ts index ba26ed3b7af..ec4f6436041 100644 --- a/test/abilities/illuminate.test.ts +++ b/test/abilities/illuminate.test.ts @@ -1,6 +1,6 @@ import { Stat } from "#app/enums/stat"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; @@ -22,10 +22,10 @@ describe("Abilities - Illuminate", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Moves.SPLASH) - .ability(Abilities.ILLUMINATE) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SAND_ATTACK); + .moveset(MoveId.SPLASH) + .ability(AbilityId.ILLUMINATE) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SAND_ATTACK); }); it("should prevent ACC stat stage from being lowered", async () => { @@ -37,7 +37,7 @@ describe("Abilities - Illuminate", () => { expect(player.getStatStage(Stat.ACC)).toBe(0); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); diff --git a/test/abilities/illusion.test.ts b/test/abilities/illusion.test.ts index 8aae433b6c0..37e2ca59c6a 100644 --- a/test/abilities/illusion.test.ts +++ b/test/abilities/illusion.test.ts @@ -1,8 +1,8 @@ import { Gender } from "#app/data/gender"; import { PokeballType } from "#app/enums/pokeball"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -25,16 +25,16 @@ describe("Abilities - Illusion", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemySpecies(Species.ZORUA) - .enemyAbility(Abilities.ILLUSION) - .enemyMoveset(Moves.TACKLE) + .enemySpecies(SpeciesId.ZORUA) + .enemyAbility(AbilityId.ILLUSION) + .enemyMoveset(MoveId.TACKLE) .enemyHeldItems([{ name: "WIDE_LENS", count: 3 }]) - .moveset([Moves.WORRY_SEED, Moves.SOAK, Moves.TACKLE]) + .moveset([MoveId.WORRY_SEED, MoveId.SOAK, MoveId.TACKLE]) .startingHeldItems([{ name: "WIDE_LENS", count: 3 }]); }); it("creates illusion at the start", async () => { - await game.classicMode.startBattle([Species.ZOROARK, Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.ZOROARK, SpeciesId.FEEBAS]); const zoroark = game.scene.getPlayerPokemon()!; const zorua = game.scene.getEnemyPokemon()!; @@ -43,8 +43,8 @@ describe("Abilities - Illusion", () => { }); it("break after receiving damaging move", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.TACKLE); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("TurnEndPhase"); @@ -55,8 +55,8 @@ describe("Abilities - Illusion", () => { }); it("break after getting ability changed", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.WORRY_SEED); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); + game.move.select(MoveId.WORRY_SEED); await game.phaseInterceptor.to("TurnEndPhase"); @@ -66,8 +66,8 @@ describe("Abilities - Illusion", () => { }); it("breaks with neutralizing gas", async () => { - game.override.enemyAbility(Abilities.NEUTRALIZING_GAS); - await game.classicMode.startBattle([Species.KOFFING]); + game.override.enemyAbility(AbilityId.NEUTRALIZING_GAS); + await game.classicMode.startBattle([SpeciesId.KOFFING]); const zorua = game.scene.getEnemyPokemon()!; @@ -76,11 +76,11 @@ describe("Abilities - Illusion", () => { it("does not activate if neutralizing gas is active", async () => { game.override - .enemyAbility(Abilities.NEUTRALIZING_GAS) - .ability(Abilities.ILLUSION) - .moveset(Moves.SPLASH) - .enemyMoveset(Moves.SPLASH); - await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS, Species.MAGIKARP]); + .enemyAbility(AbilityId.NEUTRALIZING_GAS) + .ability(AbilityId.ILLUSION) + .moveset(MoveId.SPLASH) + .enemyMoveset(MoveId.SPLASH); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS, SpeciesId.MAGIKARP]); game.doSwitchPokemon(1); await game.toNextTurn(); @@ -89,8 +89,8 @@ describe("Abilities - Illusion", () => { }); it("causes enemy AI to consider the illusion's type instead of the actual type when considering move effectiveness", async () => { - game.override.enemyMoveset([Moves.FLAMETHROWER, Moves.PSYCHIC, Moves.TACKLE]); - await game.classicMode.startBattle([Species.ZOROARK, Species.FEEBAS]); + game.override.enemyMoveset([MoveId.FLAMETHROWER, MoveId.PSYCHIC, MoveId.TACKLE]); + await game.classicMode.startBattle([SpeciesId.ZOROARK, SpeciesId.FEEBAS]); const enemy = game.scene.getEnemyPokemon()!; const zoroark = game.scene.getPlayerPokemon()!; @@ -117,14 +117,14 @@ describe("Abilities - Illusion", () => { }); it("does not break from indirect damage", async () => { - game.override.enemySpecies(Species.GIGALITH); - game.override.enemyAbility(Abilities.SAND_STREAM); - game.override.enemyMoveset(Moves.WILL_O_WISP); - game.override.moveset([Moves.FLARE_BLITZ]); + game.override.enemySpecies(SpeciesId.GIGALITH); + game.override.enemyAbility(AbilityId.SAND_STREAM); + game.override.enemyMoveset(MoveId.WILL_O_WISP); + game.override.moveset([MoveId.FLARE_BLITZ]); - await game.classicMode.startBattle([Species.ZOROARK, Species.AZUMARILL]); + await game.classicMode.startBattle([SpeciesId.ZOROARK, SpeciesId.AZUMARILL]); - game.move.select(Moves.FLARE_BLITZ); + game.move.select(MoveId.FLARE_BLITZ); await game.phaseInterceptor.to("TurnEndPhase"); @@ -134,8 +134,8 @@ describe("Abilities - Illusion", () => { }); it("copies the the name, nickname, gender, shininess, and pokeball from the illusion source", async () => { - game.override.enemyMoveset(Moves.SPLASH); - await game.classicMode.startBattle([Species.ABRA, Species.ZOROARK, Species.AXEW]); + game.override.enemyMoveset(MoveId.SPLASH); + await game.classicMode.startBattle([SpeciesId.ABRA, SpeciesId.ZOROARK, SpeciesId.AXEW]); const axew = game.scene.getPlayerParty().at(2)!; axew.shiny = true; axew.nickname = btoa(unescape(encodeURIComponent("axew nickname"))); @@ -156,13 +156,13 @@ describe("Abilities - Illusion", () => { }); it("breaks when suppressed", async () => { - game.override.moveset(Moves.GASTRO_ACID); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.moveset(MoveId.GASTRO_ACID); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const zorua = game.scene.getEnemyPokemon()!; expect(!!zorua.summonData?.illusion).toBe(true); - game.move.select(Moves.GASTRO_ACID); + game.move.select(MoveId.GASTRO_ACID); await game.phaseInterceptor.to("BerryPhase"); expect(zorua.isFullHp()).toBe(true); diff --git a/test/abilities/immunity.test.ts b/test/abilities/immunity.test.ts index dd9026cac50..b6ca34bfaa3 100644 --- a/test/abilities/immunity.test.ts +++ b/test/abilities/immunity.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,27 +23,27 @@ describe("Abilities - Immunity", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should remove poison when gained", async () => { game.override - .ability(Abilities.IMMUNITY) - .enemyAbility(Abilities.BALL_FETCH) - .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH); - await game.classicMode.startBattle([Species.FEEBAS]); + .ability(AbilityId.IMMUNITY) + .enemyAbility(AbilityId.BALL_FETCH) + .moveset(MoveId.SKILL_SWAP) + .enemyMoveset(MoveId.SPLASH); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.trySetStatus(StatusEffect.POISON); expect(enemy?.status?.effect).toBe(StatusEffect.POISON); - game.move.select(Moves.SKILL_SWAP); + game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); expect(enemy?.status).toBeNull(); diff --git a/test/abilities/imposter.test.ts b/test/abilities/imposter.test.ts index b5e902f442f..c27e679ec54 100644 --- a/test/abilities/imposter.test.ts +++ b/test/abilities/imposter.test.ts @@ -1,11 +1,11 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { Stat, BATTLE_STATS, EFFECTIVE_STATS } from "#enums/stat"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; // TODO: Add more tests once Imposter is fully implemented describe("Abilities - Imposter", () => { @@ -26,19 +26,19 @@ describe("Abilities - Imposter", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemySpecies(Species.MEW) + .enemySpecies(SpeciesId.MEW) .enemyLevel(200) - .enemyAbility(Abilities.BEAST_BOOST) - .enemyPassiveAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) - .ability(Abilities.IMPOSTER) - .moveset(Moves.SPLASH); + .enemyAbility(AbilityId.BEAST_BOOST) + .enemyPassiveAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) + .ability(AbilityId.IMPOSTER) + .moveset(MoveId.SPLASH); }); it("should copy species, ability, gender, all stats except HP, all stat stages, moveset, and types of target", async () => { - await game.classicMode.startBattle([Species.DITTO]); + await game.classicMode.startBattle([SpeciesId.DITTO]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); const player = game.scene.getPlayerPokemon()!; @@ -75,9 +75,9 @@ describe("Abilities - Imposter", () => { }); it("should copy in-battle overridden stats", async () => { - game.override.enemyMoveset([Moves.POWER_SPLIT]); + game.override.enemyMoveset([MoveId.POWER_SPLIT]); - await game.classicMode.startBattle([Species.DITTO]); + await game.classicMode.startBattle([SpeciesId.DITTO]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -85,7 +85,7 @@ describe("Abilities - Imposter", () => { const avgAtk = Math.floor((player.getStat(Stat.ATK, false) + enemy.getStat(Stat.ATK, false)) / 2); const avgSpAtk = Math.floor((player.getStat(Stat.SPATK, false) + enemy.getStat(Stat.SPATK, false)) / 2); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); expect(player.getStat(Stat.ATK, false)).toBe(avgAtk); @@ -96,18 +96,18 @@ describe("Abilities - Imposter", () => { }); it("should set each move's pp to a maximum of 5", async () => { - game.override.enemyMoveset([Moves.SWORDS_DANCE, Moves.GROWL, Moves.SKETCH, Moves.RECOVER]); + game.override.enemyMoveset([MoveId.SWORDS_DANCE, MoveId.GROWL, MoveId.SKETCH, MoveId.RECOVER]); - await game.classicMode.startBattle([Species.DITTO]); + await game.classicMode.startBattle([SpeciesId.DITTO]); const player = game.scene.getPlayerPokemon()!; - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); player.getMoveset().forEach(move => { // Should set correct maximum PP without touching `ppUp` if (move) { - if (move.moveId === Moves.SKETCH) { + if (move.moveId === MoveId.SKETCH) { expect(move.getMovePp()).toBe(1); } else { expect(move.getMovePp()).toBe(5); @@ -118,25 +118,25 @@ describe("Abilities - Imposter", () => { }); it("should activate its ability if it copies one that activates on summon", async () => { - game.override.enemyAbility(Abilities.INTIMIDATE); + game.override.enemyAbility(AbilityId.INTIMIDATE); - await game.classicMode.startBattle([Species.DITTO]); + await game.classicMode.startBattle([SpeciesId.DITTO]); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("MoveEndPhase"); expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(-1); }); it("should persist transformed attributes across reloads", async () => { - game.override.moveset([Moves.ABSORB]); + game.override.moveset([MoveId.ABSORB]); - await game.classicMode.startBattle([Species.DITTO]); + await game.classicMode.startBattle([SpeciesId.DITTO]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.toNextWave(); @@ -158,13 +158,13 @@ describe("Abilities - Imposter", () => { } expect(playerMoveset.length).toEqual(1); - expect(playerMoveset[0]?.moveId).toEqual(Moves.SPLASH); + expect(playerMoveset[0]?.moveId).toEqual(MoveId.SPLASH); }); it("should stay transformed with the correct form after reload", async () => { - game.override.moveset([Moves.ABSORB]); - game.override.enemySpecies(Species.UNOWN); - await game.classicMode.startBattle([Species.DITTO]); + game.override.moveset([MoveId.ABSORB]); + game.override.enemySpecies(SpeciesId.UNOWN); + await game.classicMode.startBattle([SpeciesId.DITTO]); const enemy = game.scene.getEnemyPokemon()!; @@ -172,7 +172,7 @@ describe("Abilities - Imposter", () => { enemy.species.forms[5]; enemy.species.formIndex = 5; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.toNextWave(); diff --git a/test/abilities/infiltrator.test.ts b/test/abilities/infiltrator.test.ts index aeeb681e73c..891a716f7a4 100644 --- a/test/abilities/infiltrator.test.ts +++ b/test/abilities/infiltrator.test.ts @@ -4,9 +4,9 @@ import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; import { Stat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -28,13 +28,13 @@ describe("Abilities - Infiltrator", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.TACKLE, Moves.WATER_GUN, Moves.SPORE, Moves.BABY_DOLL_EYES]) - .ability(Abilities.INFILTRATOR) + .moveset([MoveId.TACKLE, MoveId.WATER_GUN, MoveId.SPORE, MoveId.BABY_DOLL_EYES]) + .ability(AbilityId.INFILTRATOR) .battleStyle("single") .disableCrits() - .enemySpecies(Species.SNORLAX) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemySpecies(SpeciesId.SNORLAX) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) .startingLevel(100) .enemyLevel(100); }); @@ -43,77 +43,77 @@ describe("Abilities - Infiltrator", () => { { effectName: "Light Screen", tagType: ArenaTagType.LIGHT_SCREEN, - move: Moves.WATER_GUN, + move: MoveId.WATER_GUN, }, { effectName: "Reflect", tagType: ArenaTagType.REFLECT, - move: Moves.TACKLE, + move: MoveId.TACKLE, }, { effectName: "Aurora Veil", tagType: ArenaTagType.AURORA_VEIL, - move: Moves.TACKLE, + move: MoveId.TACKLE, }, ])("should bypass the target's $effectName", async ({ tagType, move }) => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; const preScreenDmg = enemy.getAttackDamage({ source: player, move: allMoves[move] }).damage; - game.scene.arena.addTag(tagType, 1, Moves.NONE, enemy.id, ArenaTagSide.ENEMY, true); + game.scene.arena.addTag(tagType, 1, MoveId.NONE, enemy.id, ArenaTagSide.ENEMY, true); const postScreenDmg = enemy.getAttackDamage({ source: player, move: allMoves[move] }).damage; expect(postScreenDmg).toBe(preScreenDmg); - expect(player.waveData.abilitiesApplied).toContain(Abilities.INFILTRATOR); + expect(player.waveData.abilitiesApplied).toContain(AbilityId.INFILTRATOR); }); it("should bypass the target's Safeguard", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - game.scene.arena.addTag(ArenaTagType.SAFEGUARD, 1, Moves.NONE, enemy.id, ArenaTagSide.ENEMY, true); + game.scene.arena.addTag(ArenaTagType.SAFEGUARD, 1, MoveId.NONE, enemy.id, ArenaTagSide.ENEMY, true); - game.move.select(Moves.SPORE); + game.move.select(MoveId.SPORE); await game.phaseInterceptor.to("BerryPhase", false); expect(enemy.status?.effect).toBe(StatusEffect.SLEEP); - expect(player.waveData.abilitiesApplied).toContain(Abilities.INFILTRATOR); + expect(player.waveData.abilitiesApplied).toContain(AbilityId.INFILTRATOR); }); // TODO: fix this interaction to pass this test it.todo("should bypass the target's Mist", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - game.scene.arena.addTag(ArenaTagType.MIST, 1, Moves.NONE, enemy.id, ArenaTagSide.ENEMY, true); + game.scene.arena.addTag(ArenaTagType.MIST, 1, MoveId.NONE, enemy.id, ArenaTagSide.ENEMY, true); - game.move.select(Moves.BABY_DOLL_EYES); + game.move.select(MoveId.BABY_DOLL_EYES); await game.phaseInterceptor.to("MoveEndPhase"); expect(enemy.getStatStage(Stat.ATK)).toBe(-1); - expect(player.waveData.abilitiesApplied).toContain(Abilities.INFILTRATOR); + expect(player.waveData.abilitiesApplied).toContain(AbilityId.INFILTRATOR); }); it("should bypass the target's Substitute", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - enemy.addTag(BattlerTagType.SUBSTITUTE, 1, Moves.NONE, enemy.id); + enemy.addTag(BattlerTagType.SUBSTITUTE, 1, MoveId.NONE, enemy.id); - game.move.select(Moves.BABY_DOLL_EYES); + game.move.select(MoveId.BABY_DOLL_EYES); await game.phaseInterceptor.to("MoveEndPhase"); expect(enemy.getStatStage(Stat.ATK)).toBe(-1); - expect(player.waveData.abilitiesApplied).toContain(Abilities.INFILTRATOR); + expect(player.waveData.abilitiesApplied).toContain(AbilityId.INFILTRATOR); }); }); diff --git a/test/abilities/insomnia.test.ts b/test/abilities/insomnia.test.ts index 49765a641b0..418e0ed1345 100644 --- a/test/abilities/insomnia.test.ts +++ b/test/abilities/insomnia.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,27 +23,27 @@ describe("Abilities - Insomnia", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should remove sleep when gained", async () => { game.override - .ability(Abilities.INSOMNIA) - .enemyAbility(Abilities.BALL_FETCH) - .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH); - await game.classicMode.startBattle([Species.FEEBAS]); + .ability(AbilityId.INSOMNIA) + .enemyAbility(AbilityId.BALL_FETCH) + .moveset(MoveId.SKILL_SWAP) + .enemyMoveset(MoveId.SPLASH); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.trySetStatus(StatusEffect.SLEEP); expect(enemy?.status?.effect).toBe(StatusEffect.SLEEP); - game.move.select(Moves.SKILL_SWAP); + game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); expect(enemy?.status).toBeNull(); diff --git a/test/abilities/intimidate.test.ts b/test/abilities/intimidate.test.ts index 8db39270dcf..e72b9669b6e 100644 --- a/test/abilities/intimidate.test.ts +++ b/test/abilities/intimidate.test.ts @@ -4,9 +4,9 @@ import GameManager from "#test/testUtils/gameManager"; import { UiMode } from "#enums/ui-mode"; import { Stat } from "#enums/stat"; import { getMovePosition } from "#test/testUtils/gameManagerUtils"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; describe("Abilities - Intimidate", () => { let phaserGame: Phaser.Game; @@ -26,16 +26,16 @@ describe("Abilities - Intimidate", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemySpecies(Species.RATTATA) - .enemyAbility(Abilities.INTIMIDATE) - .enemyPassiveAbility(Abilities.HYDRATION) - .ability(Abilities.INTIMIDATE) + .enemySpecies(SpeciesId.RATTATA) + .enemyAbility(AbilityId.INTIMIDATE) + .enemyPassiveAbility(AbilityId.HYDRATION) + .ability(AbilityId.INTIMIDATE) .startingWave(3) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should lower ATK stat stage by 1 of enemy Pokemon on entry and player switch", async () => { - await game.classicMode.runToSummon([Species.MIGHTYENA, Species.POOCHYENA]); + await game.classicMode.runToSummon([SpeciesId.MIGHTYENA, SpeciesId.POOCHYENA]); game.onNextPrompt( "CheckSwitchPhase", UiMode.CONFIRM, @@ -50,7 +50,7 @@ describe("Abilities - Intimidate", () => { let playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - expect(playerPokemon.species.speciesId).toBe(Species.MIGHTYENA); + expect(playerPokemon.species.speciesId).toBe(SpeciesId.MIGHTYENA); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(-1); expect(playerPokemon.getStatStage(Stat.ATK)).toBe(-1); @@ -59,14 +59,14 @@ describe("Abilities - Intimidate", () => { await game.phaseInterceptor.to("CommandPhase"); playerPokemon = game.scene.getPlayerPokemon()!; - expect(playerPokemon.species.speciesId).toBe(Species.POOCHYENA); + expect(playerPokemon.species.speciesId).toBe(SpeciesId.POOCHYENA); expect(playerPokemon.getStatStage(Stat.ATK)).toBe(0); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(-2); }, 20000); it("should lower ATK stat stage by 1 for every enemy Pokemon in a double battle on entry", async () => { game.override.battleStyle("double").startingWave(3); - await game.classicMode.runToSummon([Species.MIGHTYENA, Species.POOCHYENA]); + await game.classicMode.runToSummon([SpeciesId.MIGHTYENA, SpeciesId.POOCHYENA]); game.onNextPrompt( "CheckSwitchPhase", UiMode.CONFIRM, @@ -89,8 +89,8 @@ describe("Abilities - Intimidate", () => { it("should not activate again if there is no switch or new entry", async () => { game.override.startingWave(2); - game.override.moveset([Moves.SPLASH]); - await game.classicMode.startBattle([Species.MIGHTYENA, Species.POOCHYENA]); + game.override.moveset([MoveId.SPLASH]); + await game.classicMode.startBattle([SpeciesId.MIGHTYENA, SpeciesId.POOCHYENA]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -98,7 +98,7 @@ describe("Abilities - Intimidate", () => { expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(-1); expect(playerPokemon.getStatStage(Stat.ATK)).toBe(-1); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(-1); @@ -106,8 +106,8 @@ describe("Abilities - Intimidate", () => { }, 20000); it("should lower ATK stat stage by 1 for every switch", async () => { - game.override.moveset([Moves.SPLASH]).enemyMoveset([Moves.VOLT_SWITCH]).startingWave(5); - await game.classicMode.startBattle([Species.MIGHTYENA, Species.POOCHYENA]); + game.override.moveset([MoveId.SPLASH]).enemyMoveset([MoveId.VOLT_SWITCH]).startingWave(5); + await game.classicMode.startBattle([SpeciesId.MIGHTYENA, SpeciesId.POOCHYENA]); const playerPokemon = game.scene.getPlayerPokemon()!; let enemyPokemon = game.scene.getEnemyPokemon()!; @@ -115,7 +115,7 @@ describe("Abilities - Intimidate", () => { expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(-1); expect(playerPokemon.getStatStage(Stat.ATK)).toBe(-1); - game.move.select(getMovePosition(game.scene, 0, Moves.SPLASH)); + game.move.select(getMovePosition(game.scene, 0, MoveId.SPLASH)); await game.toNextTurn(); enemyPokemon = game.scene.getEnemyPokemon()!; @@ -123,7 +123,7 @@ describe("Abilities - Intimidate", () => { expect(playerPokemon.getStatStage(Stat.ATK)).toBe(-2); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(0); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/test/abilities/intrepid_sword.test.ts b/test/abilities/intrepid_sword.test.ts index b30ae4a9bd0..7cfa9581bb9 100644 --- a/test/abilities/intrepid_sword.test.ts +++ b/test/abilities/intrepid_sword.test.ts @@ -1,8 +1,8 @@ import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import { CommandPhase } from "#app/phases/command-phase"; -import { Abilities } from "#enums/abilities"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { SpeciesId } from "#enums/species-id"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -23,13 +23,13 @@ describe("Abilities - Intrepid Sword", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleStyle("single"); - game.override.enemySpecies(Species.ZACIAN); - game.override.enemyAbility(Abilities.INTREPID_SWORD); - game.override.ability(Abilities.INTREPID_SWORD); + game.override.enemySpecies(SpeciesId.ZACIAN); + game.override.enemyAbility(AbilityId.INTREPID_SWORD); + game.override.ability(AbilityId.INTREPID_SWORD); }); it("should raise ATK stat stage by 1 on entry", async () => { - await game.classicMode.runToSummon([Species.ZACIAN]); + await game.classicMode.runToSummon([SpeciesId.ZACIAN]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/test/abilities/libero.test.ts b/test/abilities/libero.test.ts index a099e6ff047..6cae83219fd 100644 --- a/test/abilities/libero.test.ts +++ b/test/abilities/libero.test.ts @@ -3,11 +3,11 @@ import { PokemonType } from "#enums/pokemon-type"; import { Weather } from "#app/data/weather"; import type { PlayerPokemon } from "#app/field/pokemon"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Biome } from "#enums/biome"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { BiomeId } from "#enums/biome-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { WeatherType } from "#enums/weather-type"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -31,46 +31,46 @@ describe("Abilities - Libero", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .ability(Abilities.LIBERO) + .ability(AbilityId.LIBERO) .startingLevel(100) - .enemySpecies(Species.RATTATA) - .enemyMoveset(Moves.ENDURE); + .enemySpecies(SpeciesId.RATTATA) + .enemyMoveset(MoveId.ENDURE); }); test("ability applies and changes a pokemon's type", async () => { - game.override.moveset([Moves.SPLASH]); + game.override.moveset([MoveId.SPLASH]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.SPLASH); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.SPLASH); }); // Test for Gen9+ functionality, we are using previous funcionality test.skip("ability applies only once per switch in", async () => { - game.override.moveset([Moves.SPLASH, Moves.AGILITY]); + game.override.moveset([MoveId.SPLASH, MoveId.AGILITY]); - await game.classicMode.startBattle([Species.MAGIKARP, Species.BULBASAUR]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.BULBASAUR]); let leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.SPLASH); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.SPLASH); - game.move.select(Moves.AGILITY); + game.move.select(MoveId.AGILITY); await game.phaseInterceptor.to(TurnEndPhase); - expect(leadPokemon.waveData.abilitiesApplied).toContain(Abilities.LIBERO); + expect(leadPokemon.waveData.abilitiesApplied).toContain(AbilityId.LIBERO); const leadPokemonType = PokemonType[leadPokemon.getTypes()[0]]; - const moveType = PokemonType[allMoves[Moves.AGILITY].type]; + const moveType = PokemonType[allMoves[MoveId.AGILITY].type]; expect(leadPokemonType).not.toBe(moveType); await game.toNextTurn(); @@ -82,25 +82,25 @@ describe("Abilities - Libero", () => { leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.SPLASH); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.SPLASH); }); test("ability applies correctly even if the pokemon's move has a variable type", async () => { - game.override.moveset([Moves.WEATHER_BALL]); + game.override.moveset([MoveId.WEATHER_BALL]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); game.scene.arena.weather = new Weather(WeatherType.SUNNY); - game.move.select(Moves.WEATHER_BALL); + game.move.select(MoveId.WEATHER_BALL); await game.phaseInterceptor.to(TurnEndPhase); - expect(leadPokemon.waveData.abilitiesApplied).toContain(Abilities.LIBERO); + expect(leadPokemon.waveData.abilitiesApplied).toContain(AbilityId.LIBERO); expect(leadPokemon.getTypes()).toHaveLength(1); const leadPokemonType = PokemonType[leadPokemon.getTypes()[0]], moveType = PokemonType[PokemonType.FIRE]; @@ -108,18 +108,18 @@ describe("Abilities - Libero", () => { }); test("ability applies correctly even if the type has changed by another ability", async () => { - game.override.moveset([Moves.TACKLE]); - game.override.passiveAbility(Abilities.REFRIGERATE); + game.override.moveset([MoveId.TACKLE]); + game.override.passiveAbility(AbilityId.REFRIGERATE); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); - expect(leadPokemon.waveData.abilitiesApplied).toContain(Abilities.LIBERO); + expect(leadPokemon.waveData.abilitiesApplied).toContain(AbilityId.LIBERO); expect(leadPokemon.getTypes()).toHaveLength(1); const leadPokemonType = PokemonType[leadPokemon.getTypes()[0]], moveType = PokemonType[PokemonType.ICE]; @@ -127,173 +127,173 @@ describe("Abilities - Libero", () => { }); test("ability applies correctly even if the pokemon's move calls another move", async () => { - game.override.moveset([Moves.NATURE_POWER]); + game.override.moveset([MoveId.NATURE_POWER]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.scene.arena.biomeType = Biome.MOUNTAIN; - game.move.select(Moves.NATURE_POWER); + game.scene.arena.biomeType = BiomeId.MOUNTAIN; + game.move.select(MoveId.NATURE_POWER); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.AIR_SLASH); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.AIR_SLASH); }); test("ability applies correctly even if the pokemon's move is delayed / charging", async () => { - game.override.moveset([Moves.DIG]); + game.override.moveset([MoveId.DIG]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.DIG); + game.move.select(MoveId.DIG); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.DIG); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.DIG); }); test("ability applies correctly even if the pokemon's move misses", async () => { - game.override.moveset([Moves.TACKLE]); - game.override.enemyMoveset(Moves.SPLASH); + game.override.moveset([MoveId.TACKLE]); + game.override.enemyMoveset(MoveId.SPLASH); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.move.forceMiss(); await game.phaseInterceptor.to(TurnEndPhase); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon.isFullHp()).toBe(true); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.TACKLE); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.TACKLE); }); test("ability applies correctly even if the pokemon's move is protected against", async () => { - game.override.moveset([Moves.TACKLE]).enemyMoveset(Moves.PROTECT); + game.override.moveset([MoveId.TACKLE]).enemyMoveset(MoveId.PROTECT); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.TACKLE); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.TACKLE); }); test("ability applies correctly even if the pokemon's move fails because of type immunity", async () => { - game.override.moveset([Moves.TACKLE]); - game.override.enemySpecies(Species.GASTLY); + game.override.moveset([MoveId.TACKLE]); + game.override.enemySpecies(SpeciesId.GASTLY); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.TACKLE); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.TACKLE); }); test("ability is not applied if pokemon's type is the same as the move's type", async () => { - game.override.moveset([Moves.SPLASH]); + game.override.moveset([MoveId.SPLASH]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - leadPokemon.summonData.types = [allMoves[Moves.SPLASH].type]; - game.move.select(Moves.SPLASH); + leadPokemon.summonData.types = [allMoves[MoveId.SPLASH].type]; + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); - expect(leadPokemon.waveData.abilitiesApplied).not.toContain(Abilities.LIBERO); + expect(leadPokemon.waveData.abilitiesApplied).not.toContain(AbilityId.LIBERO); }); test("ability is not applied if pokemon is terastallized", async () => { - game.override.moveset([Moves.SPLASH]); + game.override.moveset([MoveId.SPLASH]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); leadPokemon.isTerastallized = true; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); - expect(leadPokemon.waveData.abilitiesApplied).not.toContain(Abilities.LIBERO); + expect(leadPokemon.waveData.abilitiesApplied).not.toContain(AbilityId.LIBERO); }); test("ability is not applied if pokemon uses struggle", async () => { - game.override.moveset([Moves.STRUGGLE]); + game.override.moveset([MoveId.STRUGGLE]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.STRUGGLE); + game.move.select(MoveId.STRUGGLE); await game.phaseInterceptor.to(TurnEndPhase); - expect(leadPokemon.waveData.abilitiesApplied).not.toContain(Abilities.LIBERO); + expect(leadPokemon.waveData.abilitiesApplied).not.toContain(AbilityId.LIBERO); }); test("ability is not applied if the pokemon's move fails", async () => { - game.override.moveset([Moves.BURN_UP]); + game.override.moveset([MoveId.BURN_UP]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.BURN_UP); + game.move.select(MoveId.BURN_UP); await game.phaseInterceptor.to(TurnEndPhase); - expect(leadPokemon.waveData.abilitiesApplied).not.toContain(Abilities.LIBERO); + expect(leadPokemon.waveData.abilitiesApplied).not.toContain(AbilityId.LIBERO); }); test("ability applies correctly even if the pokemon's Trick-or-Treat fails", async () => { - game.override.moveset([Moves.TRICK_OR_TREAT]); - game.override.enemySpecies(Species.GASTLY); + game.override.moveset([MoveId.TRICK_OR_TREAT]); + game.override.enemySpecies(SpeciesId.GASTLY); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.TRICK_OR_TREAT); + game.move.select(MoveId.TRICK_OR_TREAT); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.TRICK_OR_TREAT); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.TRICK_OR_TREAT); }); test("ability applies correctly and the pokemon curses itself", async () => { - game.override.moveset([Moves.CURSE]); + game.override.moveset([MoveId.CURSE]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.CURSE); + game.move.select(MoveId.CURSE); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.CURSE); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.CURSE); expect(leadPokemon.getTag(BattlerTagType.CURSED)).not.toBe(undefined); }); }); -function testPokemonTypeMatchesDefaultMoveType(pokemon: PlayerPokemon, move: Moves) { - expect(pokemon.waveData.abilitiesApplied).toContain(Abilities.LIBERO); +function testPokemonTypeMatchesDefaultMoveType(pokemon: PlayerPokemon, move: MoveId) { + expect(pokemon.waveData.abilitiesApplied).toContain(AbilityId.LIBERO); expect(pokemon.getTypes()).toHaveLength(1); const pokemonType = PokemonType[pokemon.getTypes()[0]], moveType = PokemonType[allMoves[move].type]; diff --git a/test/abilities/lightningrod.test.ts b/test/abilities/lightningrod.test.ts index 21a03baf12b..777ccb88ba9 100644 --- a/test/abilities/lightningrod.test.ts +++ b/test/abilities/lightningrod.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,55 +24,55 @@ describe("Abilities - Lightningrod", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.SHOCK_WAVE]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.SPLASH, MoveId.SHOCK_WAVE]) + .ability(AbilityId.BALL_FETCH) .battleStyle("double") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should redirect electric type moves", async () => { - await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MAGIKARP]); const enemy1 = game.scene.getEnemyField()[0]; const enemy2 = game.scene.getEnemyField()[1]; - enemy2.summonData.ability = Abilities.LIGHTNING_ROD; + enemy2.summonData.ability = AbilityId.LIGHTNING_ROD; - game.move.select(Moves.SHOCK_WAVE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); + game.move.select(MoveId.SHOCK_WAVE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase"); expect(enemy1.isFullHp()).toBe(true); }); it("should not redirect non-electric type moves", async () => { - game.override.moveset([Moves.SPLASH, Moves.AERIAL_ACE]); - await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); + game.override.moveset([MoveId.SPLASH, MoveId.AERIAL_ACE]); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MAGIKARP]); const enemy1 = game.scene.getEnemyField()[0]; const enemy2 = game.scene.getEnemyField()[1]; - enemy2.summonData.ability = Abilities.LIGHTNING_ROD; + enemy2.summonData.ability = AbilityId.LIGHTNING_ROD; - game.move.select(Moves.AERIAL_ACE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); + game.move.select(MoveId.AERIAL_ACE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase"); expect(enemy1.isFullHp()).toBe(false); }); it("should boost the user's spatk without damaging", async () => { - await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MAGIKARP]); const enemy2 = game.scene.getEnemyField()[1]; - enemy2.summonData.ability = Abilities.LIGHTNING_ROD; + enemy2.summonData.ability = AbilityId.LIGHTNING_ROD; - game.move.select(Moves.SHOCK_WAVE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); + game.move.select(MoveId.SHOCK_WAVE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase"); expect(enemy2.isFullHp()).toBe(true); @@ -80,32 +80,32 @@ describe("Abilities - Lightningrod", () => { }); it("should not redirect moves changed from electric type via ability", async () => { - game.override.ability(Abilities.NORMALIZE); - await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); + game.override.ability(AbilityId.NORMALIZE); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MAGIKARP]); const enemy1 = game.scene.getEnemyField()[0]; const enemy2 = game.scene.getEnemyField()[1]; - enemy2.summonData.ability = Abilities.LIGHTNING_ROD; + enemy2.summonData.ability = AbilityId.LIGHTNING_ROD; - game.move.select(Moves.SHOCK_WAVE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); + game.move.select(MoveId.SHOCK_WAVE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase"); expect(enemy1.isFullHp()).toBe(false); }); it("should redirect moves changed to electric type via ability", async () => { - game.override.ability(Abilities.GALVANIZE).moveset(Moves.TACKLE); - await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); + game.override.ability(AbilityId.GALVANIZE).moveset(MoveId.TACKLE); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MAGIKARP]); const enemy1 = game.scene.getEnemyField()[0]; const enemy2 = game.scene.getEnemyField()[1]; - enemy2.summonData.ability = Abilities.LIGHTNING_ROD; + enemy2.summonData.ability = AbilityId.LIGHTNING_ROD; - game.move.select(Moves.TACKLE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); + game.move.select(MoveId.TACKLE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase"); expect(enemy1.isFullHp()).toBe(true); diff --git a/test/abilities/limber.test.ts b/test/abilities/limber.test.ts index 4cdaa86f44c..2ca469dcaa1 100644 --- a/test/abilities/limber.test.ts +++ b/test/abilities/limber.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,27 +23,27 @@ describe("Abilities - Limber", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should remove paralysis when gained", async () => { game.override - .ability(Abilities.LIMBER) - .enemyAbility(Abilities.BALL_FETCH) - .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH); - await game.classicMode.startBattle([Species.FEEBAS]); + .ability(AbilityId.LIMBER) + .enemyAbility(AbilityId.BALL_FETCH) + .moveset(MoveId.SKILL_SWAP) + .enemyMoveset(MoveId.SPLASH); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.trySetStatus(StatusEffect.PARALYSIS); expect(enemy?.status?.effect).toBe(StatusEffect.PARALYSIS); - game.move.select(Moves.SKILL_SWAP); + game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); expect(enemy?.status).toBeNull(); diff --git a/test/abilities/magic_bounce.test.ts b/test/abilities/magic_bounce.test.ts index be1ad2b413a..8c3eeec974c 100644 --- a/test/abilities/magic_bounce.test.ts +++ b/test/abilities/magic_bounce.test.ts @@ -6,9 +6,9 @@ import { ArenaTagType } from "#app/enums/arena-tag-type"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { Stat } from "#app/enums/stat"; import { StatusEffect } from "#app/enums/status-effect"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -29,30 +29,30 @@ describe("Abilities - Magic Bounce", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .ability(Abilities.BALL_FETCH) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .moveset([Moves.GROWL, Moves.SPLASH]) + .moveset([MoveId.GROWL, MoveId.SPLASH]) .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.MAGIC_BOUNCE) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.MAGIC_BOUNCE) + .enemyMoveset(MoveId.SPLASH); }); it("should reflect basic status moves", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); }); it("should not bounce moves while the target is in the semi-invulnerable state", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); - game.override.moveset([Moves.GROWL]); - game.override.enemyMoveset([Moves.FLY]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); + game.override.moveset([MoveId.GROWL]); + game.override.enemyMoveset([MoveId.FLY]); - game.move.select(Moves.GROWL); - await game.move.selectEnemyMove(Moves.FLY); + game.move.select(MoveId.GROWL); + await game.move.selectEnemyMove(MoveId.FLY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); @@ -61,11 +61,11 @@ describe("Abilities - Magic Bounce", () => { it("should individually bounce back multi-target moves", async () => { game.override.battleStyle("double"); - game.override.moveset([Moves.GROWL, Moves.SPLASH]); - await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); + game.override.moveset([MoveId.GROWL, MoveId.SPLASH]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]); - game.move.select(Moves.GROWL, 0); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.GROWL, 0); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); const user = game.scene.getPlayerField()[0]; @@ -73,41 +73,41 @@ describe("Abilities - Magic Bounce", () => { }); it("should still bounce back a move that would otherwise fail", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); game.scene.getEnemyPokemon()?.setStatStage(Stat.ATK, -6); - game.override.moveset([Moves.GROWL]); + game.override.moveset([MoveId.GROWL]); - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); }); it("should not bounce back a move that was just bounced", async () => { - game.override.ability(Abilities.MAGIC_BOUNCE); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.ability(AbilityId.MAGIC_BOUNCE); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); }); it("should receive the stat change after reflecting a move back to a mirror armor user", async () => { - game.override.ability(Abilities.MIRROR_ARMOR); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.ability(AbilityId.MIRROR_ARMOR); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-1); }); it("should not bounce back a move from a mold breaker user", async () => { - game.override.ability(Abilities.MOLD_BREAKER); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.ability(AbilityId.MOLD_BREAKER); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-1); @@ -115,12 +115,12 @@ describe("Abilities - Magic Bounce", () => { it("should bounce back a spread status move against both pokemon", async () => { game.override.battleStyle("double"); - game.override.moveset([Moves.GROWL, Moves.SPLASH]); - game.override.enemyMoveset([Moves.SPLASH]); - await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); + game.override.moveset([MoveId.GROWL, MoveId.SPLASH]); + game.override.enemyMoveset([MoveId.SPLASH]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]); - game.move.select(Moves.GROWL, 0); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.GROWL, 0); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerField().every(p => p.getStatStage(Stat.ATK) === -2)).toBeTruthy(); @@ -128,10 +128,10 @@ describe("Abilities - Magic Bounce", () => { it("should only bounce spikes back once in doubles when both targets have magic bounce", async () => { game.override.battleStyle("double"); - await game.classicMode.startBattle([Species.MAGIKARP]); - game.override.moveset([Moves.SPIKES]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); + game.override.moveset([MoveId.SPIKES]); - game.move.select(Moves.SPIKES); + game.move.select(MoveId.SPIKES); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.PLAYER)!["layers"]).toBe(1); @@ -139,105 +139,105 @@ describe("Abilities - Magic Bounce", () => { }); it("should bounce spikes even when the target is protected", async () => { - game.override.moveset([Moves.SPIKES]); - game.override.enemyMoveset([Moves.PROTECT]); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.moveset([MoveId.SPIKES]); + game.override.enemyMoveset([MoveId.PROTECT]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(Moves.SPIKES); + game.move.select(MoveId.SPIKES); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.PLAYER)!["layers"]).toBe(1); }); it("should not bounce spikes when the target is in the semi-invulnerable state", async () => { - game.override.moveset([Moves.SPIKES]); - game.override.enemyMoveset([Moves.FLY]); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.moveset([MoveId.SPIKES]); + game.override.enemyMoveset([MoveId.FLY]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(Moves.SPIKES); + game.move.select(MoveId.SPIKES); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.ENEMY)!["layers"]).toBe(1); }); it("should not bounce back curse", async () => { - game.override.starterSpecies(Species.GASTLY); - await game.classicMode.startBattle([Species.GASTLY]); - game.override.moveset([Moves.CURSE]); + game.override.starterSpecies(SpeciesId.GASTLY); + await game.classicMode.startBattle([SpeciesId.GASTLY]); + game.override.moveset([MoveId.CURSE]); - game.move.select(Moves.CURSE); + game.move.select(MoveId.CURSE); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.getTag(BattlerTagType.CURSED)).toBeDefined(); }); it("should not cause encore to be interrupted after bouncing", async () => { - game.override.moveset([Moves.SPLASH, Moves.GROWL, Moves.ENCORE]); - game.override.enemyMoveset([Moves.TACKLE, Moves.GROWL]); - // game.override.ability(Abilities.MOLD_BREAKER); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.moveset([MoveId.SPLASH, MoveId.GROWL, MoveId.ENCORE]); + game.override.enemyMoveset([MoveId.TACKLE, MoveId.GROWL]); + // game.override.ability(AbilityId.MOLD_BREAKER); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; // Give the player MOLD_BREAKER for this turn to bypass Magic Bounce. - vi.spyOn(playerPokemon, "getAbility").mockReturnValue(allAbilities[Abilities.MOLD_BREAKER]); + vi.spyOn(playerPokemon, "getAbility").mockReturnValue(allAbilities[AbilityId.MOLD_BREAKER]); // turn 1 - game.move.select(Moves.ENCORE); - await game.move.selectEnemyMove(Moves.TACKLE); + game.move.select(MoveId.ENCORE); + await game.move.selectEnemyMove(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); - expect(enemyPokemon.getTag(BattlerTagType.ENCORE)!["moveId"]).toBe(Moves.TACKLE); + expect(enemyPokemon.getTag(BattlerTagType.ENCORE)!["moveId"]).toBe(MoveId.TACKLE); // turn 2 vi.spyOn(playerPokemon, "getAbility").mockRestore(); - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase"); - expect(enemyPokemon.getTag(BattlerTagType.ENCORE)!["moveId"]).toBe(Moves.TACKLE); - expect(enemyPokemon.getLastXMoves()[0].move).toBe(Moves.TACKLE); + expect(enemyPokemon.getTag(BattlerTagType.ENCORE)!["moveId"]).toBe(MoveId.TACKLE); + expect(enemyPokemon.getLastXMoves()[0].move).toBe(MoveId.TACKLE); }); // TODO: encore is failing if the last move was virtual. it.todo("should not cause the bounced move to count for encore", async () => { - game.override.moveset([Moves.SPLASH, Moves.GROWL, Moves.ENCORE]); - game.override.enemyMoveset([Moves.GROWL, Moves.TACKLE]); - game.override.enemyAbility(Abilities.MAGIC_BOUNCE); + game.override.moveset([MoveId.SPLASH, MoveId.GROWL, MoveId.ENCORE]); + game.override.enemyMoveset([MoveId.GROWL, MoveId.TACKLE]); + game.override.enemyAbility(AbilityId.MAGIC_BOUNCE); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; // turn 1 - game.move.select(Moves.GROWL); - await game.move.selectEnemyMove(Moves.TACKLE); + game.move.select(MoveId.GROWL); + await game.move.selectEnemyMove(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); // Give the player MOLD_BREAKER for this turn to bypass Magic Bounce. - vi.spyOn(playerPokemon, "getAbility").mockReturnValue(allAbilities[Abilities.MOLD_BREAKER]); + vi.spyOn(playerPokemon, "getAbility").mockReturnValue(allAbilities[AbilityId.MOLD_BREAKER]); // turn 2 - game.move.select(Moves.ENCORE); - await game.move.selectEnemyMove(Moves.TACKLE); + game.move.select(MoveId.ENCORE); + await game.move.selectEnemyMove(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase"); - expect(enemyPokemon.getTag(BattlerTagType.ENCORE)!["moveId"]).toBe(Moves.TACKLE); - expect(enemyPokemon.getLastXMoves()[0].move).toBe(Moves.TACKLE); + expect(enemyPokemon.getTag(BattlerTagType.ENCORE)!["moveId"]).toBe(MoveId.TACKLE); + expect(enemyPokemon.getLastXMoves()[0].move).toBe(MoveId.TACKLE); }); // TODO: stomping tantrum should consider moves that were bounced. it.todo("should cause stomping tantrum to double in power when the last move was bounced", async () => { game.override.battleStyle("single"); - await game.classicMode.startBattle([Species.MAGIKARP]); - game.override.moveset([Moves.STOMPING_TANTRUM, Moves.CHARM]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); + game.override.moveset([MoveId.STOMPING_TANTRUM, MoveId.CHARM]); - const stomping_tantrum = allMoves[Moves.STOMPING_TANTRUM]; + const stomping_tantrum = allMoves[MoveId.STOMPING_TANTRUM]; vi.spyOn(stomping_tantrum, "calculateBattlePower"); - game.move.select(Moves.CHARM); + game.move.select(MoveId.CHARM); await game.toNextTurn(); - game.move.select(Moves.STOMPING_TANTRUM); + game.move.select(MoveId.STOMPING_TANTRUM); await game.phaseInterceptor.to("BerryPhase"); expect(stomping_tantrum.calculateBattlePower).toHaveReturnedWith(150); }); @@ -246,15 +246,15 @@ describe("Abilities - Magic Bounce", () => { it.todo( "should properly cause the enemy's stomping tantrum to be doubled in power after bouncing and failing", async () => { - game.override.enemyMoveset([Moves.STOMPING_TANTRUM, Moves.SPLASH, Moves.CHARM]); - await game.classicMode.startBattle([Species.BULBASAUR]); + game.override.enemyMoveset([MoveId.STOMPING_TANTRUM, MoveId.SPLASH, MoveId.CHARM]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const stomping_tantrum = allMoves[Moves.STOMPING_TANTRUM]; + const stomping_tantrum = allMoves[MoveId.STOMPING_TANTRUM]; const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(stomping_tantrum, "calculateBattlePower"); - game.move.select(Moves.SPORE); - await game.move.selectEnemyMove(Moves.CHARM); + game.move.select(MoveId.SPORE); + await game.move.selectEnemyMove(MoveId.CHARM); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.getLastXMoves(1)[0].result).toBe("success"); @@ -262,64 +262,64 @@ describe("Abilities - Magic Bounce", () => { expect(stomping_tantrum.calculateBattlePower).toHaveReturnedWith(75); await game.toNextTurn(); - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(stomping_tantrum.calculateBattlePower).toHaveReturnedWith(75); }, ); it("should respect immunities when bouncing a move", async () => { - vi.spyOn(allMoves[Moves.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100); - game.override.moveset([Moves.THUNDER_WAVE, Moves.GROWL]); - game.override.ability(Abilities.SOUNDPROOF); - await game.classicMode.startBattle([Species.PHANPY]); + vi.spyOn(allMoves[MoveId.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100); + game.override.moveset([MoveId.THUNDER_WAVE, MoveId.GROWL]); + game.override.ability(AbilityId.SOUNDPROOF); + await game.classicMode.startBattle([SpeciesId.PHANPY]); // Turn 1 - thunder wave immunity test - game.move.select(Moves.THUNDER_WAVE); + game.move.select(MoveId.THUNDER_WAVE); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); // Turn 2 - soundproof immunity test - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(0); }); it("should bounce back a move before the accuracy check", async () => { - game.override.moveset([Moves.SPORE]); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.moveset([MoveId.SPORE]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const attacker = game.scene.getPlayerPokemon()!; vi.spyOn(attacker, "getAccuracyMultiplier").mockReturnValue(0.0); - game.move.select(Moves.SPORE); + game.move.select(MoveId.SPORE); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.status?.effect).toBe(StatusEffect.SLEEP); }); it("should take the accuracy of the magic bounce user into account", async () => { - game.override.moveset([Moves.SPORE]); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.moveset([MoveId.SPORE]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const opponent = game.scene.getEnemyPokemon()!; vi.spyOn(opponent, "getAccuracyMultiplier").mockReturnValue(0); - game.move.select(Moves.SPORE); + game.move.select(MoveId.SPORE); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); }); it("should always apply the leftmost available target's magic bounce when bouncing moves like sticky webs in doubles", async () => { game.override.battleStyle("double"); - game.override.moveset([Moves.STICKY_WEB, Moves.SPLASH, Moves.TRICK_ROOM]); + game.override.moveset([MoveId.STICKY_WEB, MoveId.SPLASH, MoveId.TRICK_ROOM]); - await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]); const [enemy_1, enemy_2] = game.scene.getEnemyField(); // set speed just incase logic erroneously checks for speed order enemy_1.setStat(Stat.SPD, enemy_2.getStat(Stat.SPD) + 1); // turn 1 - game.move.select(Moves.STICKY_WEB, 0); - game.move.select(Moves.TRICK_ROOM, 1); + game.move.select(MoveId.STICKY_WEB, 0); + game.move.select(MoveId.TRICK_ROOM, 1); await game.phaseInterceptor.to("TurnEndPhase"); expect( @@ -331,8 +331,8 @@ describe("Abilities - Magic Bounce", () => { game.scene.arena.removeTagOnSide(ArenaTagType.STICKY_WEB, ArenaTagSide.PLAYER, true); // turn 2 - game.move.select(Moves.STICKY_WEB, 0); - game.move.select(Moves.TRICK_ROOM, 1); + game.move.select(MoveId.STICKY_WEB, 0); + game.move.select(MoveId.TRICK_ROOM, 1); await game.phaseInterceptor.to("BerryPhase"); expect( game.scene.arena @@ -343,17 +343,17 @@ describe("Abilities - Magic Bounce", () => { }); it("should not bounce back status moves that hit through semi-invulnerable states", async () => { - game.override.moveset([Moves.TOXIC, Moves.CHARM]); - await game.classicMode.startBattle([Species.BULBASAUR]); - game.move.select(Moves.TOXIC); - await game.move.selectEnemyMove(Moves.FLY); + game.override.moveset([MoveId.TOXIC, MoveId.CHARM]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); + game.move.select(MoveId.TOXIC); + await game.move.selectEnemyMove(MoveId.FLY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.status?.effect).toBe(StatusEffect.TOXIC); expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); - game.override.ability(Abilities.NO_GUARD); - game.move.select(Moves.CHARM); + game.override.ability(AbilityId.NO_GUARD); + game.move.select(MoveId.CHARM); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-2); diff --git a/test/abilities/magic_guard.test.ts b/test/abilities/magic_guard.test.ts index 61d06a74c58..c36b35c09b7 100644 --- a/test/abilities/magic_guard.test.ts +++ b/test/abilities/magic_guard.test.ts @@ -1,11 +1,11 @@ import { ArenaTagSide, getArenaTag } from "#app/data/arena-tag"; import { getStatusEffectCatchRateMultiplier } from "#app/data/status-effect"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import { WeatherType } from "#enums/weather-type"; import GameManager from "#test/testUtils/gameManager"; @@ -30,14 +30,14 @@ describe("Abilities - Magic Guard", () => { game = new GameManager(phaserGame); /** Player Pokemon overrides */ - game.override.ability(Abilities.MAGIC_GUARD); - game.override.moveset([Moves.SPLASH]); + game.override.ability(AbilityId.MAGIC_GUARD); + game.override.moveset([MoveId.SPLASH]); game.override.startingLevel(100); /** Enemy Pokemon overrides */ - game.override.enemySpecies(Species.SNORLAX); - game.override.enemyAbility(Abilities.INSOMNIA); - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemySpecies(SpeciesId.SNORLAX); + game.override.enemyAbility(AbilityId.INSOMNIA); + game.override.enemyMoveset(MoveId.SPLASH); game.override.enemyLevel(100); }); @@ -46,14 +46,14 @@ describe("Abilities - Magic Guard", () => { it("ability should prevent damage caused by weather", async () => { game.override.weather(WeatherType.SANDSTORM); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon).toBeDefined(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); @@ -70,11 +70,11 @@ describe("Abilities - Magic Guard", () => { //Toxic keeps track of the turn counters -> important that Magic Guard keeps track of post-Toxic turns game.override.statusEffect(StatusEffect.POISON); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); @@ -88,14 +88,14 @@ describe("Abilities - Magic Guard", () => { }); it("ability effect should not persist when the ability is replaced", async () => { - game.override.enemyMoveset([Moves.WORRY_SEED, Moves.WORRY_SEED, Moves.WORRY_SEED, Moves.WORRY_SEED]); + game.override.enemyMoveset([MoveId.WORRY_SEED, MoveId.WORRY_SEED, MoveId.WORRY_SEED, MoveId.WORRY_SEED]); game.override.statusEffect(StatusEffect.POISON); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); @@ -108,11 +108,11 @@ describe("Abilities - Magic Guard", () => { it("Magic Guard prevents damage caused by burn but other non-damaging effects are still applied", async () => { game.override.enemyStatusEffect(StatusEffect.BURN); - game.override.enemyAbility(Abilities.MAGIC_GUARD); + game.override.enemyAbility(AbilityId.MAGIC_GUARD); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -130,11 +130,11 @@ describe("Abilities - Magic Guard", () => { it("Magic Guard prevents damage caused by toxic but other non-damaging effects are still applied", async () => { game.override.enemyStatusEffect(StatusEffect.TOXIC); - game.override.enemyAbility(Abilities.MAGIC_GUARD); + game.override.enemyAbility(AbilityId.MAGIC_GUARD); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -156,13 +156,13 @@ describe("Abilities - Magic Guard", () => { it("Magic Guard prevents damage caused by entry hazards", async () => { //Adds and applies Spikes to both sides of the arena - const newTag = getArenaTag(ArenaTagType.SPIKES, 5, Moves.SPIKES, 0, 0, ArenaTagSide.BOTH)!; + const newTag = getArenaTag(ArenaTagType.SPIKES, 5, MoveId.SPIKES, 0, 0, ArenaTagSide.BOTH)!; game.scene.arena.tags.push(newTag); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -179,15 +179,15 @@ describe("Abilities - Magic Guard", () => { it("Magic Guard does not prevent poison from Toxic Spikes", async () => { //Adds and applies Spikes to both sides of the arena - const playerTag = getArenaTag(ArenaTagType.TOXIC_SPIKES, 5, Moves.TOXIC_SPIKES, 0, 0, ArenaTagSide.PLAYER)!; - const enemyTag = getArenaTag(ArenaTagType.TOXIC_SPIKES, 5, Moves.TOXIC_SPIKES, 0, 0, ArenaTagSide.ENEMY)!; + const playerTag = getArenaTag(ArenaTagType.TOXIC_SPIKES, 5, MoveId.TOXIC_SPIKES, 0, 0, ArenaTagSide.PLAYER)!; + const enemyTag = getArenaTag(ArenaTagType.TOXIC_SPIKES, 5, MoveId.TOXIC_SPIKES, 0, 0, ArenaTagSide.ENEMY)!; game.scene.arena.tags.push(playerTag); game.scene.arena.tags.push(enemyTag); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -206,13 +206,13 @@ describe("Abilities - Magic Guard", () => { }); it("Magic Guard prevents against damage from volatile status effects", async () => { - await game.classicMode.startBattle([Species.DUSKULL]); - game.override.moveset([Moves.CURSE]); - game.override.enemyAbility(Abilities.MAGIC_GUARD); + await game.classicMode.startBattle([SpeciesId.DUSKULL]); + game.override.moveset([MoveId.CURSE]); + game.override.enemyAbility(AbilityId.MAGIC_GUARD); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.CURSE); + game.move.select(MoveId.CURSE); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -230,12 +230,12 @@ describe("Abilities - Magic Guard", () => { }); it("Magic Guard prevents crash damage", async () => { - game.override.moveset([Moves.HIGH_JUMP_KICK]); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.moveset([MoveId.HIGH_JUMP_KICK]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.HIGH_JUMP_KICK); + game.move.select(MoveId.HIGH_JUMP_KICK); await game.move.forceMiss(); await game.phaseInterceptor.to(TurnEndPhase); @@ -248,12 +248,12 @@ describe("Abilities - Magic Guard", () => { }); it("Magic Guard prevents damage from recoil", async () => { - game.override.moveset([Moves.TAKE_DOWN]); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.moveset([MoveId.TAKE_DOWN]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.TAKE_DOWN); + game.move.select(MoveId.TAKE_DOWN); await game.phaseInterceptor.to(TurnEndPhase); @@ -265,12 +265,12 @@ describe("Abilities - Magic Guard", () => { }); it("Magic Guard does not prevent damage from Struggle's recoil", async () => { - game.override.moveset([Moves.STRUGGLE]); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.moveset([MoveId.STRUGGLE]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.STRUGGLE); + game.move.select(MoveId.STRUGGLE); await game.phaseInterceptor.to(TurnEndPhase); @@ -283,12 +283,12 @@ describe("Abilities - Magic Guard", () => { //This tests different move attributes than the recoil tests above it("Magic Guard prevents self-damage from attacking moves", async () => { - game.override.moveset([Moves.STEEL_BEAM]); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.moveset([MoveId.STEEL_BEAM]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.STEEL_BEAM); + game.move.select(MoveId.STEEL_BEAM); await game.phaseInterceptor.to(TurnEndPhase); @@ -301,21 +301,21 @@ describe("Abilities - Magic Guard", () => { /* it("Magic Guard does not prevent self-damage from confusion", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(Moves.CHARM); + game.move.select(MoveId.CHARM); await game.phaseInterceptor.to(TurnEndPhase); }); */ it("Magic Guard does not prevent self-damage from non-attacking moves", async () => { - game.override.moveset([Moves.BELLY_DRUM]); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.moveset([MoveId.BELLY_DRUM]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.BELLY_DRUM); + game.move.select(MoveId.BELLY_DRUM); await game.phaseInterceptor.to(TurnEndPhase); @@ -330,14 +330,14 @@ describe("Abilities - Magic Guard", () => { //Tests the ability Bad Dreams game.override.statusEffect(StatusEffect.SLEEP); //enemy pokemon is given Spore just in case player pokemon somehow awakens during test - game.override.enemyMoveset([Moves.SPORE, Moves.SPORE, Moves.SPORE, Moves.SPORE]); - game.override.enemyAbility(Abilities.BAD_DREAMS); + game.override.enemyMoveset([MoveId.SPORE, MoveId.SPORE, MoveId.SPORE, MoveId.SPORE]); + game.override.enemyAbility(AbilityId.BAD_DREAMS); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); @@ -352,17 +352,17 @@ describe("Abilities - Magic Guard", () => { it("Magic Guard prevents damage from abilities with PostFaintContactDamageAbAttr", async () => { //Tests the abilities Innards Out/Aftermath - game.override.moveset([Moves.TACKLE]); - game.override.enemyAbility(Abilities.AFTERMATH); + game.override.moveset([MoveId.TACKLE]); + game.override.enemyAbility(AbilityId.AFTERMATH); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; enemyPokemon.hp = 1; - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); /** @@ -376,16 +376,16 @@ describe("Abilities - Magic Guard", () => { it("Magic Guard prevents damage from abilities with PostDefendContactDamageAbAttr", async () => { //Tests the abilities Iron Barbs/Rough Skin - game.override.moveset([Moves.TACKLE]); - game.override.enemyAbility(Abilities.IRON_BARBS); + game.override.moveset([MoveId.TACKLE]); + game.override.enemyAbility(AbilityId.IRON_BARBS); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); /** @@ -399,16 +399,16 @@ describe("Abilities - Magic Guard", () => { it("Magic Guard prevents damage from abilities with ReverseDrainAbAttr", async () => { //Tests the ability Liquid Ooze - game.override.moveset([Moves.ABSORB]); - game.override.enemyAbility(Abilities.LIQUID_OOZE); + game.override.moveset([MoveId.ABSORB]); + game.override.enemyAbility(AbilityId.LIQUID_OOZE); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.ABSORB); + game.move.select(MoveId.ABSORB); await game.phaseInterceptor.to(TurnEndPhase); /** @@ -422,12 +422,12 @@ describe("Abilities - Magic Guard", () => { it("Magic Guard prevents HP loss from abilities with PostWeatherLapseDamageAbAttr", async () => { //Tests the abilities Solar Power/Dry Skin - game.override.passiveAbility(Abilities.SOLAR_POWER); + game.override.passiveAbility(AbilityId.SOLAR_POWER); game.override.weather(WeatherType.SUNNY); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); /** diff --git a/test/abilities/magma_armor.test.ts b/test/abilities/magma_armor.test.ts index c5af522ca6f..74493fac365 100644 --- a/test/abilities/magma_armor.test.ts +++ b/test/abilities/magma_armor.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,27 +23,27 @@ describe("Abilities - Magma Armor", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should remove freeze when gained", async () => { game.override - .ability(Abilities.MAGMA_ARMOR) - .enemyAbility(Abilities.BALL_FETCH) - .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH); - await game.classicMode.startBattle([Species.FEEBAS]); + .ability(AbilityId.MAGMA_ARMOR) + .enemyAbility(AbilityId.BALL_FETCH) + .moveset(MoveId.SKILL_SWAP) + .enemyMoveset(MoveId.SPLASH); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.trySetStatus(StatusEffect.FREEZE); expect(enemy?.status?.effect).toBe(StatusEffect.FREEZE); - game.move.select(Moves.SKILL_SWAP); + game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); expect(enemy?.status).toBeNull(); diff --git a/test/abilities/mimicry.test.ts b/test/abilities/mimicry.test.ts index de196ffc939..df6facc3755 100644 --- a/test/abilities/mimicry.test.ts +++ b/test/abilities/mimicry.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { PokemonType } from "#enums/pokemon-type"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,20 +23,20 @@ describe("Abilities - Mimicry", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) - .ability(Abilities.MIMICRY) + .moveset([MoveId.SPLASH]) + .ability(AbilityId.MIMICRY) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyMoveset(MoveId.SPLASH); }); it("Mimicry activates after the Pokémon with Mimicry is switched in while terrain is present, or whenever there is a change in terrain", async () => { - game.override.enemyAbility(Abilities.MISTY_SURGE); - await game.classicMode.startBattle([Species.FEEBAS, Species.ABRA]); + game.override.enemyAbility(AbilityId.MISTY_SURGE); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.ABRA]); const [playerPokemon1, playerPokemon2] = game.scene.getPlayerParty(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(playerPokemon1.getTypes().includes(PokemonType.FAIRY)).toBe(true); @@ -48,14 +48,14 @@ describe("Abilities - Mimicry", () => { it("Pokemon should revert back to its original, root type once terrain ends", async () => { game.override - .moveset([Moves.SPLASH, Moves.TRANSFORM]) - .enemyAbility(Abilities.MIMICRY) - .enemyMoveset([Moves.SPLASH, Moves.PSYCHIC_TERRAIN]); - await game.classicMode.startBattle([Species.REGIELEKI]); + .moveset([MoveId.SPLASH, MoveId.TRANSFORM]) + .enemyAbility(AbilityId.MIMICRY) + .enemyMoveset([MoveId.SPLASH, MoveId.PSYCHIC_TERRAIN]); + await game.classicMode.startBattle([SpeciesId.REGIELEKI]); const playerPokemon = game.scene.getPlayerPokemon(); - game.move.select(Moves.TRANSFORM); - await game.move.selectEnemyMove(Moves.PSYCHIC_TERRAIN); + game.move.select(MoveId.TRANSFORM); + await game.move.selectEnemyMove(MoveId.PSYCHIC_TERRAIN); await game.toNextTurn(); expect(playerPokemon?.getTypes().includes(PokemonType.PSYCHIC)).toBe(true); @@ -63,25 +63,25 @@ describe("Abilities - Mimicry", () => { game.scene.arena.terrain.turnsLeft = 1; } - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); expect(playerPokemon?.getTypes().includes(PokemonType.ELECTRIC)).toBe(true); }); it("If the Pokemon is under the effect of a type-adding move and an equivalent terrain activates, the move's effect disappears", async () => { - game.override.enemyMoveset([Moves.FORESTS_CURSE, Moves.GRASSY_TERRAIN]); - await game.classicMode.startBattle([Species.FEEBAS]); + game.override.enemyMoveset([MoveId.FORESTS_CURSE, MoveId.GRASSY_TERRAIN]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const playerPokemon = game.scene.getPlayerPokemon(); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.FORESTS_CURSE); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.FORESTS_CURSE); await game.toNextTurn(); expect(playerPokemon?.summonData.addedType).toBe(PokemonType.GRASS); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.GRASSY_TERRAIN); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.GRASSY_TERRAIN); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon?.summonData.addedType).toBeNull(); diff --git a/test/abilities/mirror_armor.test.ts b/test/abilities/mirror_armor.test.ts index 5f9c63531d4..319e47cbfb3 100644 --- a/test/abilities/mirror_armor.test.ts +++ b/test/abilities/mirror_armor.test.ts @@ -1,7 +1,7 @@ import { Stat } from "#enums/stat"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -28,25 +28,25 @@ describe("Ability - Mirror Armor", () => { game.override .battleStyle("single") - .enemySpecies(Species.RATTATA) - .enemyMoveset([Moves.SPLASH, Moves.STICKY_WEB, Moves.TICKLE, Moves.OCTOLOCK]) - .enemyAbility(Abilities.BALL_FETCH) + .enemySpecies(SpeciesId.RATTATA) + .enemyMoveset([MoveId.SPLASH, MoveId.STICKY_WEB, MoveId.TICKLE, MoveId.OCTOLOCK]) + .enemyAbility(AbilityId.BALL_FETCH) .startingLevel(2000) - .moveset([Moves.SPLASH, Moves.STICKY_WEB, Moves.TICKLE, Moves.OCTOLOCK]) - .ability(Abilities.BALL_FETCH); + .moveset([MoveId.SPLASH, MoveId.STICKY_WEB, MoveId.TICKLE, MoveId.OCTOLOCK]) + .ability(AbilityId.BALL_FETCH); }); it("Player side + single battle Intimidate - opponent loses stats", async () => { - game.override.ability(Abilities.MIRROR_ARMOR); - game.override.enemyAbility(Abilities.INTIMIDATE); - await game.classicMode.startBattle([Species.BULBASAUR]); + game.override.ability(AbilityId.MIRROR_ARMOR); + game.override.enemyAbility(AbilityId.INTIMIDATE); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const enemyPokemon = game.scene.getEnemyPokemon()!; const userPokemon = game.scene.getPlayerPokemon()!; // Enemy has intimidate, enemy should lose -1 atk - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER); await game.toNextTurn(); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(-1); @@ -54,16 +54,16 @@ describe("Ability - Mirror Armor", () => { }); it("Enemy side + single battle Intimidate - player loses stats", async () => { - game.override.enemyAbility(Abilities.MIRROR_ARMOR); - game.override.ability(Abilities.INTIMIDATE); - await game.classicMode.startBattle([Species.BULBASAUR]); + game.override.enemyAbility(AbilityId.MIRROR_ARMOR); + game.override.ability(AbilityId.INTIMIDATE); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const enemyPokemon = game.scene.getEnemyPokemon()!; const userPokemon = game.scene.getPlayerPokemon()!; // Enemy has intimidate, enemy should lose -1 atk - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER); await game.toNextTurn(); expect(userPokemon.getStatStage(Stat.ATK)).toBe(-1); @@ -72,18 +72,18 @@ describe("Ability - Mirror Armor", () => { it("Player side + double battle Intimidate - opponents each lose -2 atk", async () => { game.override.battleStyle("double"); - game.override.ability(Abilities.MIRROR_ARMOR); - game.override.enemyAbility(Abilities.INTIMIDATE); - await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER]); + game.override.ability(AbilityId.MIRROR_ARMOR); + game.override.enemyAbility(AbilityId.INTIMIDATE); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER]); const [enemy1, enemy2] = game.scene.getEnemyField(); const [player1, player2] = game.scene.getPlayerField(); // Enemy has intimidate, enemy should lose -2 atk each - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER_2); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.toNextTurn(); expect(enemy1.getStatStage(Stat.ATK)).toBe(-2); @@ -94,18 +94,18 @@ describe("Ability - Mirror Armor", () => { it("Enemy side + double battle Intimidate - players each lose -2 atk", async () => { game.override.battleStyle("double"); - game.override.enemyAbility(Abilities.MIRROR_ARMOR); - game.override.ability(Abilities.INTIMIDATE); - await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER]); + game.override.enemyAbility(AbilityId.MIRROR_ARMOR); + game.override.ability(AbilityId.INTIMIDATE); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER]); const [enemy1, enemy2] = game.scene.getEnemyField(); const [player1, player2] = game.scene.getPlayerField(); // Enemy has intimidate, enemy should lose -1 atk - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER_2); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.toNextTurn(); expect(enemy1.getStatStage(Stat.ATK)).toBe(0); @@ -115,16 +115,16 @@ describe("Ability - Mirror Armor", () => { }); it("Player side + single battle Intimidate + Tickle - opponent loses stats", async () => { - game.override.ability(Abilities.MIRROR_ARMOR); - game.override.enemyAbility(Abilities.INTIMIDATE); - await game.classicMode.startBattle([Species.BULBASAUR]); + game.override.ability(AbilityId.MIRROR_ARMOR); + game.override.enemyAbility(AbilityId.INTIMIDATE); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const enemyPokemon = game.scene.getEnemyPokemon()!; const userPokemon = game.scene.getPlayerPokemon()!; // Enemy has intimidate and uses tickle, enemy receives -2 atk and -1 defense - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.TICKLE, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.TICKLE, BattlerIndex.PLAYER); await game.toNextTurn(); expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(-1); @@ -135,17 +135,17 @@ describe("Ability - Mirror Armor", () => { it("Player side + double battle Intimidate + Tickle - opponents each lose -3 atk, -1 def", async () => { game.override.battleStyle("double"); - game.override.ability(Abilities.MIRROR_ARMOR); - game.override.enemyAbility(Abilities.INTIMIDATE); - await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER]); + game.override.ability(AbilityId.MIRROR_ARMOR); + game.override.enemyAbility(AbilityId.INTIMIDATE); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER]); const [enemy1, enemy2] = game.scene.getEnemyField(); const [player1, player2] = game.scene.getPlayerField(); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.TICKLE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.TICKLE, BattlerIndex.PLAYER_2); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.TICKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.TICKLE, BattlerIndex.PLAYER_2); await game.toNextTurn(); expect(player1.getStatStage(Stat.ATK)).toBe(0); @@ -159,16 +159,16 @@ describe("Ability - Mirror Armor", () => { }); it("Enemy side + single battle Intimidate + Tickle - player loses stats", async () => { - game.override.enemyAbility(Abilities.MIRROR_ARMOR); - game.override.ability(Abilities.INTIMIDATE); - await game.classicMode.startBattle([Species.BULBASAUR]); + game.override.enemyAbility(AbilityId.MIRROR_ARMOR); + game.override.ability(AbilityId.INTIMIDATE); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const enemyPokemon = game.scene.getEnemyPokemon()!; const userPokemon = game.scene.getPlayerPokemon()!; // Enemy has intimidate and uses tickle, enemy receives -2 atk and -1 defense - game.move.select(Moves.TICKLE); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.TICKLE); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER); await game.toNextTurn(); expect(userPokemon.getStatStage(Stat.DEF)).toBe(-1); @@ -178,16 +178,16 @@ describe("Ability - Mirror Armor", () => { }); it("Player side + single battle Intimidate + oppoenent has white smoke - no one loses stats", async () => { - game.override.enemyAbility(Abilities.WHITE_SMOKE); - game.override.ability(Abilities.MIRROR_ARMOR); - await game.classicMode.startBattle([Species.BULBASAUR]); + game.override.enemyAbility(AbilityId.WHITE_SMOKE); + game.override.ability(AbilityId.MIRROR_ARMOR); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const enemyPokemon = game.scene.getEnemyPokemon()!; const userPokemon = game.scene.getPlayerPokemon()!; // Enemy has intimidate and uses tickle, enemy has white smoke, no one loses stats - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.TICKLE, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.TICKLE, BattlerIndex.PLAYER); await game.toNextTurn(); expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(0); @@ -197,16 +197,16 @@ describe("Ability - Mirror Armor", () => { }); it("Enemy side + single battle Intimidate + player has white smoke - no one loses stats", async () => { - game.override.ability(Abilities.WHITE_SMOKE); - game.override.enemyAbility(Abilities.MIRROR_ARMOR); - await game.classicMode.startBattle([Species.BULBASAUR]); + game.override.ability(AbilityId.WHITE_SMOKE); + game.override.enemyAbility(AbilityId.MIRROR_ARMOR); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const enemyPokemon = game.scene.getEnemyPokemon()!; const userPokemon = game.scene.getPlayerPokemon()!; // Enemy has intimidate and uses tickle, enemy has white smoke, no one loses stats - game.move.select(Moves.TICKLE); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.TICKLE); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER); await game.toNextTurn(); expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(0); @@ -216,15 +216,15 @@ describe("Ability - Mirror Armor", () => { }); it("Player side + single battle + opponent uses octolock - does not interact with mirror armor, player loses stats", async () => { - game.override.ability(Abilities.MIRROR_ARMOR); - await game.classicMode.startBattle([Species.BULBASAUR]); + game.override.ability(AbilityId.MIRROR_ARMOR); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const enemyPokemon = game.scene.getEnemyPokemon()!; const userPokemon = game.scene.getPlayerPokemon()!; // Enemy uses octolock, player loses stats at end of turn - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.OCTOLOCK, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.OCTOLOCK, BattlerIndex.PLAYER); await game.toNextTurn(); expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(0); @@ -234,15 +234,15 @@ describe("Ability - Mirror Armor", () => { }); it("Enemy side + single battle + player uses octolock - does not interact with mirror armor, opponent loses stats", async () => { - game.override.enemyAbility(Abilities.MIRROR_ARMOR); - await game.classicMode.startBattle([Species.BULBASAUR]); + game.override.enemyAbility(AbilityId.MIRROR_ARMOR); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const enemyPokemon = game.scene.getEnemyPokemon()!; const userPokemon = game.scene.getPlayerPokemon()!; // Player uses octolock, enemy loses stats at end of turn - game.move.select(Moves.OCTOLOCK); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.OCTOLOCK); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER); await game.toNextTurn(); expect(userPokemon.getStatStage(Stat.DEF)).toBe(0); @@ -252,16 +252,16 @@ describe("Ability - Mirror Armor", () => { }); it("Both sides have mirror armor - does not loop, player loses attack", async () => { - game.override.enemyAbility(Abilities.MIRROR_ARMOR); - game.override.ability(Abilities.MIRROR_ARMOR); - game.override.ability(Abilities.INTIMIDATE); - await game.classicMode.startBattle([Species.BULBASAUR]); + game.override.enemyAbility(AbilityId.MIRROR_ARMOR); + game.override.ability(AbilityId.MIRROR_ARMOR); + game.override.ability(AbilityId.INTIMIDATE); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const enemyPokemon = game.scene.getEnemyPokemon()!; const userPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER); await game.toNextTurn(); expect(userPokemon.getStatStage(Stat.ATK)).toBe(-1); @@ -269,18 +269,18 @@ describe("Ability - Mirror Armor", () => { }); it("Single battle + sticky web applied player side - player switches out and enemy should lose -1 speed", async () => { - game.override.ability(Abilities.MIRROR_ARMOR); - await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); + game.override.ability(AbilityId.MIRROR_ARMOR); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER, SpeciesId.SQUIRTLE]); const enemyPokemon = game.scene.getEnemyPokemon()!; const userPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.STICKY_WEB, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.STICKY_WEB, BattlerIndex.PLAYER); await game.toNextTurn(); game.doSwitchPokemon(1); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER); await game.toNextTurn(); expect(userPokemon.getStatStage(Stat.SPD)).toBe(0); @@ -289,22 +289,22 @@ describe("Ability - Mirror Armor", () => { it("Double battle + sticky web applied player side - player switches out and enemy 1 should lose -1 speed", async () => { game.override.battleStyle("double"); - game.override.ability(Abilities.MIRROR_ARMOR); - await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); + game.override.ability(AbilityId.MIRROR_ARMOR); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER, SpeciesId.SQUIRTLE]); const [enemy1, enemy2] = game.scene.getEnemyField(); const [player1, player2] = game.scene.getPlayerField(); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.STICKY_WEB, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER_2); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.STICKY_WEB, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.toNextTurn(); game.doSwitchPokemon(2); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER_2); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.toNextTurn(); expect(enemy1.getStatStage(Stat.SPD)).toBe(-1); diff --git a/test/abilities/mold_breaker.test.ts b/test/abilities/mold_breaker.test.ts index ba33909364f..099fb54c998 100644 --- a/test/abilities/mold_breaker.test.ts +++ b/test/abilities/mold_breaker.test.ts @@ -1,8 +1,8 @@ import { BattlerIndex } from "#app/battle"; import { globalScene } from "#app/global-scene"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -24,27 +24,27 @@ describe("Abilities - Mold Breaker", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) - .ability(Abilities.MOLD_BREAKER) + .moveset([MoveId.SPLASH]) + .ability(AbilityId.MOLD_BREAKER) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should turn off the ignore abilities arena variable after the user's move", async () => { game.override - .enemyMoveset(Moves.SPLASH) - .ability(Abilities.MOLD_BREAKER) - .moveset([Moves.ERUPTION]) + .enemyMoveset(MoveId.SPLASH) + .ability(AbilityId.MOLD_BREAKER) + .moveset([MoveId.ERUPTION]) .startingLevel(100) .enemyLevel(2); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const enemy = game.scene.getEnemyPokemon()!; expect(enemy.isFainted()).toBe(false); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase", true); expect(globalScene.arena.ignoreAbilities).toBe(false); diff --git a/test/abilities/moody.test.ts b/test/abilities/moody.test.ts index 9b658820391..a3e321928b8 100644 --- a/test/abilities/moody.test.ts +++ b/test/abilities/moody.test.ts @@ -1,7 +1,7 @@ import { BATTLE_STATS, EFFECTIVE_STATS } from "#enums/stat"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -25,18 +25,18 @@ describe("Abilities - Moody", () => { game.override .battleStyle("single") - .enemySpecies(Species.RATTATA) - .enemyAbility(Abilities.BALL_FETCH) - .ability(Abilities.MOODY) - .enemyMoveset(Moves.SPLASH) - .moveset(Moves.SPLASH); + .enemySpecies(SpeciesId.RATTATA) + .enemyAbility(AbilityId.BALL_FETCH) + .ability(AbilityId.MOODY) + .enemyMoveset(MoveId.SPLASH) + .moveset(MoveId.SPLASH); }); it("should increase one stat stage by 2 and decrease a different stat stage by 1", async () => { await game.classicMode.startBattle(); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // Find the increased and decreased stats, make sure they are different. @@ -57,7 +57,7 @@ describe("Abilities - Moody", () => { // Set all stat stages to -6 vi.spyOn(playerPokemon.summonData, "statStages", "get").mockReturnValue(new Array(BATTLE_STATS.length).fill(-6)); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // Should increase one stat stage by 2 (from -6, meaning it will be -4) @@ -75,7 +75,7 @@ describe("Abilities - Moody", () => { // Set all stat stages to 6 vi.spyOn(playerPokemon.summonData, "statStages", "get").mockReturnValue(new Array(BATTLE_STATS.length).fill(6)); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // Should decrease one stat stage by 1 (from 6, meaning it will be 5) diff --git a/test/abilities/moxie.test.ts b/test/abilities/moxie.test.ts index d4e1927e077..04ca68325e6 100644 --- a/test/abilities/moxie.test.ts +++ b/test/abilities/moxie.test.ts @@ -1,8 +1,8 @@ import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import { BattlerIndex } from "#app/battle"; @@ -26,19 +26,19 @@ describe("Abilities - Moxie", () => { beforeEach(() => { game = new GameManager(phaserGame); - const moveToUse = Moves.AERIAL_ACE; + const moveToUse = MoveId.AERIAL_ACE; game.override.battleStyle("single"); - game.override.enemySpecies(Species.RATTATA); - game.override.enemyAbility(Abilities.MOXIE); - game.override.ability(Abilities.MOXIE); + game.override.enemySpecies(SpeciesId.RATTATA); + game.override.enemyAbility(AbilityId.MOXIE); + game.override.ability(AbilityId.MOXIE); game.override.startingLevel(2000); game.override.moveset([moveToUse]); - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); }); it("should raise ATK stat stage by 1 when winning a battle", async () => { - const moveToUse = Moves.AERIAL_ACE; - await game.classicMode.startBattle([Species.MIGHTYENA, Species.MIGHTYENA]); + const moveToUse = MoveId.AERIAL_ACE; + await game.classicMode.startBattle([SpeciesId.MIGHTYENA, SpeciesId.MIGHTYENA]); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -55,8 +55,8 @@ describe("Abilities - Moxie", () => { "should raise ATK stat stage by 1 when defeating an ally Pokemon", async () => { game.override.battleStyle("double"); - const moveToUse = Moves.AERIAL_ACE; - await game.classicMode.startBattle([Species.MIGHTYENA, Species.MIGHTYENA]); + const moveToUse = MoveId.AERIAL_ACE; + await game.classicMode.startBattle([SpeciesId.MIGHTYENA, SpeciesId.MIGHTYENA]); const [firstPokemon, secondPokemon] = game.scene.getPlayerField(); diff --git a/test/abilities/mummy.test.ts b/test/abilities/mummy.test.ts index c53b0b33598..2b35e801677 100644 --- a/test/abilities/mummy.test.ts +++ b/test/abilities/mummy.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -22,31 +22,31 @@ describe("Abilities - Mummy", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) - .ability(Abilities.MUMMY) + .moveset([MoveId.SPLASH]) + .ability(AbilityId.MUMMY) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.TACKLE); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.TACKLE); }); it("should set the enemy's ability to mummy when hit by a contact move", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(Abilities.MUMMY); + expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(AbilityId.MUMMY); }); it("should not change the enemy's ability hit by a non-contact move", async () => { - game.override.enemyMoveset(Moves.EARTHQUAKE); - await game.classicMode.startBattle([Species.FEEBAS]); + game.override.enemyMoveset(MoveId.EARTHQUAKE); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(Abilities.BALL_FETCH); + expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(AbilityId.BALL_FETCH); }); }); diff --git a/test/abilities/mycelium_might.test.ts b/test/abilities/mycelium_might.test.ts index 9c898063201..6e4da4bc933 100644 --- a/test/abilities/mycelium_might.test.ts +++ b/test/abilities/mycelium_might.test.ts @@ -1,10 +1,10 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { TurnStartPhase } from "#app/phases/turn-start-phase"; import GameManager from "#test/testUtils/gameManager"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { Stat } from "#enums/stat"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -27,12 +27,12 @@ describe("Abilities - Mycelium Might", () => { game.override .battleStyle("single") .disableCrits() - .enemySpecies(Species.SHUCKLE) - .enemyAbility(Abilities.CLEAR_BODY) + .enemySpecies(SpeciesId.SHUCKLE) + .enemyAbility(AbilityId.CLEAR_BODY) - .enemyMoveset(Moves.QUICK_ATTACK) - .ability(Abilities.MYCELIUM_MIGHT) - .moveset([Moves.QUICK_ATTACK, Moves.BABY_DOLL_EYES]); + .enemyMoveset(MoveId.QUICK_ATTACK) + .ability(AbilityId.MYCELIUM_MIGHT) + .moveset([MoveId.QUICK_ATTACK, MoveId.BABY_DOLL_EYES]); }); /** @@ -43,13 +43,13 @@ describe("Abilities - Mycelium Might", () => { **/ it("will move last in its priority bracket and ignore protective abilities", async () => { - await game.classicMode.startBattle([Species.REGIELEKI]); + await game.classicMode.startBattle([SpeciesId.REGIELEKI]); const enemyPokemon = game.scene.getEnemyPokemon(); const playerIndex = game.scene.getPlayerPokemon()?.getBattlerIndex(); const enemyIndex = enemyPokemon?.getBattlerIndex(); - game.move.select(Moves.BABY_DOLL_EYES); + game.move.select(MoveId.BABY_DOLL_EYES); await game.phaseInterceptor.to(TurnStartPhase, false); const phase = game.scene.getCurrentPhase() as TurnStartPhase; @@ -66,14 +66,14 @@ describe("Abilities - Mycelium Might", () => { }, 20000); it("will still go first if a status move that is in a higher priority bracket than the opponent's move is used", async () => { - game.override.enemyMoveset(Moves.TACKLE); - await game.classicMode.startBattle([Species.REGIELEKI]); + game.override.enemyMoveset(MoveId.TACKLE); + await game.classicMode.startBattle([SpeciesId.REGIELEKI]); const enemyPokemon = game.scene.getEnemyPokemon(); const playerIndex = game.scene.getPlayerPokemon()?.getBattlerIndex(); const enemyIndex = enemyPokemon?.getBattlerIndex(); - game.move.select(Moves.BABY_DOLL_EYES); + game.move.select(MoveId.BABY_DOLL_EYES); await game.phaseInterceptor.to(TurnStartPhase, false); const phase = game.scene.getCurrentPhase() as TurnStartPhase; @@ -89,12 +89,12 @@ describe("Abilities - Mycelium Might", () => { }, 20000); it("will not affect non-status moves", async () => { - await game.classicMode.startBattle([Species.REGIELEKI]); + await game.classicMode.startBattle([SpeciesId.REGIELEKI]); const playerIndex = game.scene.getPlayerPokemon()!.getBattlerIndex(); const enemyIndex = game.scene.getEnemyPokemon()!.getBattlerIndex(); - game.move.select(Moves.QUICK_ATTACK); + game.move.select(MoveId.QUICK_ATTACK); await game.phaseInterceptor.to(TurnStartPhase, false); const phase = game.scene.getCurrentPhase() as TurnStartPhase; diff --git a/test/abilities/neutralizing_gas.test.ts b/test/abilities/neutralizing_gas.test.ts index cf19f36c9d0..7c78cc9db64 100644 --- a/test/abilities/neutralizing_gas.test.ts +++ b/test/abilities/neutralizing_gas.test.ts @@ -2,11 +2,11 @@ import { BattlerIndex } from "#app/battle"; import type { CommandPhase } from "#app/phases/command-phase"; import { Command } from "#app/ui/command-ui-handler"; import { PostSummonWeatherChangeAbAttr } from "#app/data/abilities/ability"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { PokeballType } from "#enums/pokeball"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -29,20 +29,20 @@ describe("Abilities - Neutralizing Gas", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) - .ability(Abilities.NEUTRALIZING_GAS) + .moveset([MoveId.SPLASH]) + .ability(AbilityId.NEUTRALIZING_GAS) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should prevent other abilities from activating", async () => { - game.override.enemyAbility(Abilities.INTIMIDATE); - await game.classicMode.startBattle([Species.FEEBAS]); + game.override.enemyAbility(AbilityId.INTIMIDATE); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); // Intimidate is suppressed, so the attack stat should not be lowered @@ -50,21 +50,21 @@ describe("Abilities - Neutralizing Gas", () => { }); it("should allow the user's passive to activate", async () => { - game.override.passiveAbility(Abilities.INTREPID_SWORD); - await game.classicMode.startBattle([Species.FEEBAS]); + game.override.passiveAbility(AbilityId.INTREPID_SWORD); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.getPlayerPokemon()?.getStatStage(Stat.ATK)).toBe(1); }); it.todo("should activate before other abilities", async () => { - game.override.enemySpecies(Species.ACCELGOR).enemyLevel(100).enemyAbility(Abilities.INTIMIDATE); + game.override.enemySpecies(SpeciesId.ACCELGOR).enemyLevel(100).enemyAbility(AbilityId.INTIMIDATE); - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); // Intimidate is suppressed even when the user's speed is lower @@ -73,17 +73,17 @@ describe("Abilities - Neutralizing Gas", () => { it("should activate other abilities when removed", async () => { game.override - .enemyAbility(Abilities.INTREPID_SWORD) - .enemyPassiveAbility(Abilities.DAUNTLESS_SHIELD) - .enemyMoveset(Moves.ENTRAINMENT); + .enemyAbility(AbilityId.INTREPID_SWORD) + .enemyPassiveAbility(AbilityId.DAUNTLESS_SHIELD) + .enemyMoveset(MoveId.ENTRAINMENT); - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const enemyPokemon = game.scene.getEnemyPokemon(); expect(enemyPokemon?.getStatStage(Stat.ATK)).toBe(0); expect(enemyPokemon?.getStatStage(Stat.DEF)).toBe(0); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); // Enemy removes user's ability, so both abilities are activated expect(enemyPokemon?.getStatStage(Stat.ATK)).toBe(1); @@ -91,56 +91,56 @@ describe("Abilities - Neutralizing Gas", () => { }); it("should not activate the user's other ability when removed", async () => { - game.override.passiveAbility(Abilities.INTIMIDATE).enemyMoveset(Moves.ENTRAINMENT); + game.override.passiveAbility(AbilityId.INTIMIDATE).enemyMoveset(MoveId.ENTRAINMENT); - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); // Neutralising gas user's passive is still active const enemyPokemon = game.scene.getEnemyPokemon(); expect(enemyPokemon?.getStatStage(Stat.ATK)).toBe(-1); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); // Intimidate did not reactivate after neutralizing gas was removed expect(enemyPokemon?.getStatStage(Stat.ATK)).toBe(-1); }); it("should only deactivate when all setters are off the field", async () => { - game.override.enemyMoveset([Moves.ENTRAINMENT, Moves.SPLASH]).battleStyle("double"); + game.override.enemyMoveset([MoveId.ENTRAINMENT, MoveId.SPLASH]).battleStyle("double"); - await game.classicMode.startBattle([Species.ACCELGOR, Species.ACCELGOR]); - game.move.select(Moves.SPLASH, 0); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.ENTRAINMENT, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.classicMode.startBattle([SpeciesId.ACCELGOR, SpeciesId.ACCELGOR]); + game.move.select(MoveId.SPLASH, 0); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.ENTRAINMENT, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeDefined(); // Now one neut gas user is left - game.move.select(Moves.SPLASH, 0); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.ENTRAINMENT, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH, 0); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.ENTRAINMENT, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeUndefined(); // No neut gas users are left }); it("should deactivate when suppressed by gastro acid", async () => { - game.override.enemyMoveset(Moves.GASTRO_ACID); + game.override.enemyMoveset(MoveId.GASTRO_ACID); - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeUndefined(); }); it("should deactivate when the pokemon faints", async () => { - game.override.ability(Abilities.BALL_FETCH).enemyAbility(Abilities.NEUTRALIZING_GAS); + game.override.ability(AbilityId.BALL_FETCH).enemyAbility(AbilityId.NEUTRALIZING_GAS); - await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.SPLASH); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); + game.move.select(MoveId.SPLASH); expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeDefined(); await game.doKillOpponents(); @@ -148,8 +148,8 @@ describe("Abilities - Neutralizing Gas", () => { }); it("should deactivate upon catching a wild pokemon", async () => { - game.override.battleStyle("single").enemyAbility(Abilities.NEUTRALIZING_GAS).ability(Abilities.BALL_FETCH); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.battleStyle("single").enemyAbility(AbilityId.NEUTRALIZING_GAS).ability(AbilityId.BALL_FETCH); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeDefined(); game.scene.pokeballCounts[PokeballType.MASTER_BALL] = 1; @@ -160,8 +160,8 @@ describe("Abilities - Neutralizing Gas", () => { }); it("should deactivate after fleeing from a wild pokemon", async () => { - game.override.enemyAbility(Abilities.NEUTRALIZING_GAS).ability(Abilities.BALL_FETCH); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.enemyAbility(AbilityId.NEUTRALIZING_GAS).ability(AbilityId.BALL_FETCH); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeDefined(); vi.spyOn(game.scene.getPlayerPokemon()!, "randBattleSeedInt").mockReturnValue(0); @@ -174,8 +174,8 @@ describe("Abilities - Neutralizing Gas", () => { }); it("should not activate abilities of pokemon no longer on the field", async () => { - game.override.battleStyle("single").ability(Abilities.NEUTRALIZING_GAS).enemyAbility(Abilities.DELTA_STREAM); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.battleStyle("single").ability(AbilityId.NEUTRALIZING_GAS).enemyAbility(AbilityId.DELTA_STREAM); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const enemy = game.scene.getEnemyPokemon()!; const weatherChangeAttr = enemy.getAbilityAttrs(PostSummonWeatherChangeAbAttr, false)[0]; @@ -183,7 +183,7 @@ describe("Abilities - Neutralizing Gas", () => { expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeDefined(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.killPokemon(enemy); await game.killPokemon(game.scene.getPlayerPokemon()!); diff --git a/test/abilities/no_guard.test.ts b/test/abilities/no_guard.test.ts index a09e16388ee..1cb5945e9ff 100644 --- a/test/abilities/no_guard.test.ts +++ b/test/abilities/no_guard.test.ts @@ -1,9 +1,9 @@ import { BattlerIndex } from "#app/battle"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { HitCheckResult } from "#enums/hit-check-result"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -26,20 +26,20 @@ describe("Abilities - No Guard", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Moves.ZAP_CANNON) - .ability(Abilities.NO_GUARD) + .moveset(MoveId.ZAP_CANNON) + .ability(AbilityId.NO_GUARD) .enemyLevel(200) - .enemySpecies(Species.SNORLAX) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.SNORLAX) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should make moves always hit regardless of move accuracy", async () => { game.override.battleStyle("single"); - await game.classicMode.startBattle([Species.REGIELEKI]); + await game.classicMode.startBattle([SpeciesId.REGIELEKI]); - game.move.select(Moves.ZAP_CANNON); + game.move.select(MoveId.ZAP_CANNON); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); diff --git a/test/abilities/normal-move-type-change.test.ts b/test/abilities/normal-move-type-change.test.ts index 88a7b49e26b..578a6ad2a21 100644 --- a/test/abilities/normal-move-type-change.test.ts +++ b/test/abilities/normal-move-type-change.test.ts @@ -1,9 +1,9 @@ import { BattlerIndex } from "#app/battle"; import { allMoves } from "#app/data/data-lists"; import { PokemonType } from "#enums/pokemon-type"; -import { Abilities } from "#app/enums/abilities"; -import { Moves } from "#app/enums/moves"; -import { Species } from "#app/enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -24,10 +24,10 @@ import { toDmgValue } from "#app/utils/common"; */ describe.each([ - { ab: Abilities.GALVANIZE, ab_name: "Galvanize", ty: PokemonType.ELECTRIC, tyName: "electric" }, - { ab: Abilities.PIXILATE, ab_name: "Pixilate", ty: PokemonType.FAIRY, tyName: "fairy" }, - { ab: Abilities.REFRIGERATE, ab_name: "Refrigerate", ty: PokemonType.ICE, tyName: "ice" }, - { ab: Abilities.AERILATE, ab_name: "Aerilate", ty: PokemonType.FLYING, tyName: "flying" }, + { ab: AbilityId.GALVANIZE, ab_name: "Galvanize", ty: PokemonType.ELECTRIC, tyName: "electric" }, + { ab: AbilityId.PIXILATE, ab_name: "Pixilate", ty: PokemonType.FAIRY, tyName: "fairy" }, + { ab: AbilityId.REFRIGERATE, ab_name: "Refrigerate", ty: PokemonType.ICE, tyName: "ice" }, + { ab: AbilityId.AERILATE, ab_name: "Aerilate", ty: PokemonType.FLYING, tyName: "flying" }, ])("Abilities - $ab_name", ({ ab, ty, tyName }) => { let phaserGame: Phaser.Game; let game: GameManager; @@ -48,12 +48,12 @@ describe.each([ game.override .battleStyle("single") .startingLevel(100) - .starterSpecies(Species.MAGIKARP) + .starterSpecies(SpeciesId.MAGIKARP) .ability(ab) - .moveset([Moves.TACKLE, Moves.REVELATION_DANCE, Moves.FURY_SWIPES]) - .enemySpecies(Species.DUSCLOPS) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .moveset([MoveId.TACKLE, MoveId.REVELATION_DANCE, MoveId.FURY_SWIPES]) + .enemySpecies(SpeciesId.DUSCLOPS) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(100); }); @@ -65,9 +65,9 @@ describe.each([ const enemyPokemon = game.scene.getEnemyPokemon()!; const enemySpy = vi.spyOn(enemyPokemon, "getMoveEffectiveness"); - const powerSpy = vi.spyOn(allMoves[Moves.TACKLE], "calculateBattlePower"); + const powerSpy = vi.spyOn(allMoves[MoveId.TACKLE], "calculateBattlePower"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("BerryPhase", false); @@ -78,9 +78,9 @@ describe.each([ }); // Galvanize specifically would like to check for volt absorb's activation - if (ab === Abilities.GALVANIZE) { + if (ab === AbilityId.GALVANIZE) { it("should cause Normal-type attacks to activate Volt Absorb", async () => { - game.override.enemyAbility(Abilities.VOLT_ABSORB); + game.override.enemyAbility(AbilityId.VOLT_ABSORB); await game.classicMode.startBattle(); @@ -92,7 +92,7 @@ describe.each([ enemyPokemon.hp = Math.floor(enemyPokemon.getMaxHp() * 0.8); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("BerryPhase", false); @@ -103,20 +103,20 @@ describe.each([ } it.each([ - { moveName: "Revelation Dance", move: Moves.REVELATION_DANCE, expected_ty: PokemonType.WATER }, - { moveName: "Judgement", move: Moves.JUDGMENT, expected_ty: PokemonType.NORMAL }, - { moveName: "Terrain Pulse", move: Moves.TERRAIN_PULSE, expected_ty: PokemonType.NORMAL }, - { moveName: "Weather Ball", move: Moves.WEATHER_BALL, expected_ty: PokemonType.NORMAL }, - { moveName: "Multi Attack", move: Moves.MULTI_ATTACK, expected_ty: PokemonType.NORMAL }, - { moveName: "Techno Blast", move: Moves.TECHNO_BLAST, expected_ty: PokemonType.NORMAL }, + { moveName: "Revelation Dance", move: MoveId.REVELATION_DANCE, expected_ty: PokemonType.WATER }, + { moveName: "Judgement", move: MoveId.JUDGMENT, expected_ty: PokemonType.NORMAL }, + { moveName: "Terrain Pulse", move: MoveId.TERRAIN_PULSE, expected_ty: PokemonType.NORMAL }, + { moveName: "Weather Ball", move: MoveId.WEATHER_BALL, expected_ty: PokemonType.NORMAL }, + { moveName: "Multi Attack", move: MoveId.MULTI_ATTACK, expected_ty: PokemonType.NORMAL }, + { moveName: "Techno Blast", move: MoveId.TECHNO_BLAST, expected_ty: PokemonType.NORMAL }, ])("should not change the type of $moveName", async ({ move, expected_ty: expectedTy }) => { game.override - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) .moveset([move]) - .starterSpecies(Species.MAGIKARP); + .starterSpecies(SpeciesId.MAGIKARP); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; const tySpy = vi.spyOn(playerPokemon, "getMoveType"); @@ -135,7 +135,7 @@ describe.each([ const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.FURY_SWIPES); + game.move.select(MoveId.FURY_SWIPES); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceHit(); @@ -156,7 +156,7 @@ describe.each([ game.override.startingHeldItems([{ name: "ATTACK_TYPE_BOOSTER", count: 1, type: PokemonType.NORMAL }]); await game.classicMode.startBattle(); - const testMoveInstance = allMoves[Moves.TACKLE]; + const testMoveInstance = allMoves[MoveId.TACKLE]; // get the power boost from the ability so we can compare it to the item // @ts-expect-error power multiplier is private @@ -165,7 +165,7 @@ describe.each([ const powerSpy = vi.spyOn(testMoveInstance, "calculateBattlePower"); const typeSpy = vi.spyOn(game.scene.getPlayerPokemon()!, "getMoveType"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("BerryPhase", false); expect(typeSpy, "type was not changed").toHaveLastReturnedWith(ty); expect(powerSpy).toHaveLastReturnedWith(toDmgValue(testMoveInstance.power * boost)); @@ -180,10 +180,10 @@ describe.each([ const boost = allAbilities[ab]?.getAttrs(MoveTypeChangeAbAttr)[0]?.powerMultiplier; expect(boost, "power boost should be defined").toBeDefined(); - const tackle = allMoves[Moves.TACKLE]; + const tackle = allMoves[MoveId.TACKLE]; const spy = vi.spyOn(tackle, "calculateBattlePower"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("BerryPhase", false); expect(spy).toHaveLastReturnedWith(toDmgValue(tackle.power * boost * (1 + TYPE_BOOST_ITEM_BOOST_PERCENT / 100))); }); diff --git a/test/abilities/normalize.test.ts b/test/abilities/normalize.test.ts index a299294f543..821ce9589a1 100644 --- a/test/abilities/normalize.test.ts +++ b/test/abilities/normalize.test.ts @@ -1,10 +1,10 @@ import { TYPE_BOOST_ITEM_BOOST_PERCENT } from "#app/constants"; import { allMoves } from "#app/data/data-lists"; import { toDmgValue } from "#app/utils/common"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; import { PokemonType } from "#enums/pokemon-type"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -26,63 +26,63 @@ describe("Abilities - Normalize", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.TACKLE]) - .ability(Abilities.NORMALIZE) + .moveset([MoveId.TACKLE]) + .ability(AbilityId.NORMALIZE) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should boost the power of normal type moves by 20%", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); - const powerSpy = vi.spyOn(allMoves[Moves.TACKLE], "calculateBattlePower"); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); + const powerSpy = vi.spyOn(allMoves[MoveId.TACKLE], "calculateBattlePower"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("BerryPhase"); - expect(powerSpy).toHaveLastReturnedWith(toDmgValue(allMoves[Moves.TACKLE].power * 1.2)); + expect(powerSpy).toHaveLastReturnedWith(toDmgValue(allMoves[MoveId.TACKLE].power * 1.2)); }); it("should not apply the old type boost item after changing a move's type", async () => { game.override.startingHeldItems([{ name: "ATTACK_TYPE_BOOSTER", count: 1, type: PokemonType.GRASS }]); - game.override.moveset([Moves.LEAFAGE]); + game.override.moveset([MoveId.LEAFAGE]); - const powerSpy = vi.spyOn(allMoves[Moves.LEAFAGE], "calculateBattlePower"); - await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.LEAFAGE); + const powerSpy = vi.spyOn(allMoves[MoveId.LEAFAGE], "calculateBattlePower"); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); + game.move.select(MoveId.LEAFAGE); await game.phaseInterceptor.to("BerryPhase"); // It should return with 1.2 (that is, only the power boost from the ability) - expect(powerSpy).toHaveLastReturnedWith(toDmgValue(allMoves[Moves.LEAFAGE].power * 1.2)); + expect(powerSpy).toHaveLastReturnedWith(toDmgValue(allMoves[MoveId.LEAFAGE].power * 1.2)); }); it("should apply silk scarf's power boost after changing a move's type", async () => { game.override.startingHeldItems([{ name: "ATTACK_TYPE_BOOSTER", count: 1, type: PokemonType.NORMAL }]); - game.override.moveset([Moves.LEAFAGE]); + game.override.moveset([MoveId.LEAFAGE]); - const powerSpy = vi.spyOn(allMoves[Moves.LEAFAGE], "calculateBattlePower"); - await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.LEAFAGE); + const powerSpy = vi.spyOn(allMoves[MoveId.LEAFAGE], "calculateBattlePower"); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); + game.move.select(MoveId.LEAFAGE); await game.phaseInterceptor.to("BerryPhase"); // 1.2 from normalize boost, second 1.2 from expect(powerSpy).toHaveLastReturnedWith( - toDmgValue(allMoves[Moves.LEAFAGE].power * 1.2 * (1 + TYPE_BOOST_ITEM_BOOST_PERCENT / 100)), + toDmgValue(allMoves[MoveId.LEAFAGE].power * 1.2 * (1 + TYPE_BOOST_ITEM_BOOST_PERCENT / 100)), ); }); it.each([ - { moveName: "Revelation Dance", move: Moves.REVELATION_DANCE }, - { moveName: "Judgement", move: Moves.JUDGMENT, expected_ty: PokemonType.NORMAL }, - { moveName: "Terrain Pulse", move: Moves.TERRAIN_PULSE }, - { moveName: "Weather Ball", move: Moves.WEATHER_BALL }, - { moveName: "Multi Attack", move: Moves.MULTI_ATTACK }, - { moveName: "Techno Blast", move: Moves.TECHNO_BLAST }, - { moveName: "Hidden Power", move: Moves.HIDDEN_POWER }, + { moveName: "Revelation Dance", move: MoveId.REVELATION_DANCE }, + { moveName: "Judgement", move: MoveId.JUDGMENT, expected_ty: PokemonType.NORMAL }, + { moveName: "Terrain Pulse", move: MoveId.TERRAIN_PULSE }, + { moveName: "Weather Ball", move: MoveId.WEATHER_BALL }, + { moveName: "Multi Attack", move: MoveId.MULTI_ATTACK }, + { moveName: "Techno Blast", move: MoveId.TECHNO_BLAST }, + { moveName: "Hidden Power", move: MoveId.HIDDEN_POWER }, ])("should not boost the power of $moveName", async ({ move }) => { game.override.moveset([move]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const powerSpy = vi.spyOn(allMoves[move], "calculateBattlePower"); game.move.select(move); diff --git a/test/abilities/oblivious.test.ts b/test/abilities/oblivious.test.ts index a86899ec9c6..e340d3c867d 100644 --- a/test/abilities/oblivious.test.ts +++ b/test/abilities/oblivious.test.ts @@ -1,7 +1,7 @@ -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -23,27 +23,27 @@ describe("Abilities - Oblivious", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should remove taunt when gained", async () => { game.override - .ability(Abilities.OBLIVIOUS) - .enemyAbility(Abilities.BALL_FETCH) - .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH); - await game.classicMode.startBattle([Species.FEEBAS]); + .ability(AbilityId.OBLIVIOUS) + .enemyAbility(AbilityId.BALL_FETCH) + .moveset(MoveId.SKILL_SWAP) + .enemyMoveset(MoveId.SPLASH); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.addTag(BattlerTagType.TAUNT); expect(enemy?.getTag(BattlerTagType.TAUNT)).toBeTruthy(); - game.move.select(Moves.SKILL_SWAP); + game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); expect(enemy?.getTag(BattlerTagType.TAUNT)).toBeFalsy(); @@ -51,17 +51,17 @@ describe("Abilities - Oblivious", () => { it("should remove infatuation when gained", async () => { game.override - .ability(Abilities.OBLIVIOUS) - .enemyAbility(Abilities.BALL_FETCH) - .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH); - await game.classicMode.startBattle([Species.FEEBAS]); + .ability(AbilityId.OBLIVIOUS) + .enemyAbility(AbilityId.BALL_FETCH) + .moveset(MoveId.SKILL_SWAP) + .enemyMoveset(MoveId.SPLASH); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); vi.spyOn(enemy!, "isOppositeGender").mockReturnValue(true); - enemy?.addTag(BattlerTagType.INFATUATED, 5, Moves.JUDGMENT, game.scene.getPlayerPokemon()?.id); // sourceID needs to be defined + enemy?.addTag(BattlerTagType.INFATUATED, 5, MoveId.JUDGMENT, game.scene.getPlayerPokemon()?.id); // sourceID needs to be defined expect(enemy?.getTag(BattlerTagType.INFATUATED)).toBeTruthy(); - game.move.select(Moves.SKILL_SWAP); + game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); expect(enemy?.getTag(BattlerTagType.INFATUATED)).toBeFalsy(); diff --git a/test/abilities/own_tempo.test.ts b/test/abilities/own_tempo.test.ts index b2f2c2f3030..1d6d8aa76e5 100644 --- a/test/abilities/own_tempo.test.ts +++ b/test/abilities/own_tempo.test.ts @@ -1,7 +1,7 @@ -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -23,27 +23,27 @@ describe("Abilities - Own Tempo", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should remove confusion when gained", async () => { game.override - .ability(Abilities.OWN_TEMPO) - .enemyAbility(Abilities.BALL_FETCH) - .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH); - await game.classicMode.startBattle([Species.FEEBAS]); + .ability(AbilityId.OWN_TEMPO) + .enemyAbility(AbilityId.BALL_FETCH) + .moveset(MoveId.SKILL_SWAP) + .enemyMoveset(MoveId.SPLASH); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.addTag(BattlerTagType.CONFUSED); expect(enemy?.getTag(BattlerTagType.CONFUSED)).toBeTruthy(); - game.move.select(Moves.SKILL_SWAP); + game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); expect(enemy?.getTag(BattlerTagType.CONFUSED)).toBeFalsy(); diff --git a/test/abilities/parental_bond.test.ts b/test/abilities/parental_bond.test.ts index a75fea82830..73efd0f57e2 100644 --- a/test/abilities/parental_bond.test.ts +++ b/test/abilities/parental_bond.test.ts @@ -1,9 +1,9 @@ import { PokemonType } from "#enums/pokemon-type"; import { BattlerTagType } from "#enums/battler-tag-type"; import { toDmgValue } from "#app/utils/common"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -28,25 +28,25 @@ describe("Abilities - Parental Bond", () => { game = new GameManager(phaserGame); game.override.battleStyle("single"); game.override.disableCrits(); - game.override.ability(Abilities.PARENTAL_BOND); - game.override.enemySpecies(Species.SNORLAX); - game.override.enemyAbility(Abilities.FUR_COAT); - game.override.enemyMoveset(Moves.SPLASH); + game.override.ability(AbilityId.PARENTAL_BOND); + game.override.enemySpecies(SpeciesId.SNORLAX); + game.override.enemyAbility(AbilityId.FUR_COAT); + game.override.enemyMoveset(MoveId.SPLASH); game.override.startingLevel(100); game.override.enemyLevel(100); }); it("should add second strike to attack move", async () => { - game.override.moveset([Moves.TACKLE]); + game.override.moveset([MoveId.TACKLE]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; let enemyStartingHp = enemyPokemon.hp; - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("DamageAnimPhase"); const firstStrikeDamage = enemyStartingHp - enemyPokemon.hp; @@ -61,14 +61,14 @@ describe("Abilities - Parental Bond", () => { }); it("should apply secondary effects to both strikes", async () => { - game.override.moveset([Moves.POWER_UP_PUNCH]); - game.override.enemySpecies(Species.AMOONGUSS); + game.override.moveset([MoveId.POWER_UP_PUNCH]); + game.override.enemySpecies(SpeciesId.AMOONGUSS); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.POWER_UP_PUNCH); + game.move.select(MoveId.POWER_UP_PUNCH); await game.phaseInterceptor.to("BerryPhase", false); @@ -77,13 +77,13 @@ describe("Abilities - Parental Bond", () => { }); it("should not apply to Status moves", async () => { - game.override.moveset([Moves.BABY_DOLL_EYES]); + game.override.moveset([MoveId.BABY_DOLL_EYES]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.BABY_DOLL_EYES); + game.move.select(MoveId.BABY_DOLL_EYES); await game.phaseInterceptor.to("BerryPhase", false); @@ -91,13 +91,13 @@ describe("Abilities - Parental Bond", () => { }); it("should not apply to multi-hit moves", async () => { - game.override.moveset([Moves.DOUBLE_HIT]); + game.override.moveset([MoveId.DOUBLE_HIT]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.DOUBLE_HIT); + game.move.select(MoveId.DOUBLE_HIT); await game.move.forceHit(); await game.phaseInterceptor.to("BerryPhase", false); @@ -106,13 +106,13 @@ describe("Abilities - Parental Bond", () => { }); it("should not apply to self-sacrifice moves", async () => { - game.override.moveset([Moves.SELF_DESTRUCT]); + game.override.moveset([MoveId.SELF_DESTRUCT]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SELF_DESTRUCT); + game.move.select(MoveId.SELF_DESTRUCT); await game.phaseInterceptor.to("DamageAnimPhase", false); @@ -120,13 +120,13 @@ describe("Abilities - Parental Bond", () => { }); it("should not apply to Rollout", async () => { - game.override.moveset([Moves.ROLLOUT]); + game.override.moveset([MoveId.ROLLOUT]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.ROLLOUT); + game.move.select(MoveId.ROLLOUT); await game.move.forceHit(); await game.phaseInterceptor.to("DamageAnimPhase", false); @@ -135,28 +135,28 @@ describe("Abilities - Parental Bond", () => { }); it("should not apply multiplier to fixed-damage moves", async () => { - game.override.moveset([Moves.DRAGON_RAGE]); + game.override.moveset([MoveId.DRAGON_RAGE]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DRAGON_RAGE); + game.move.select(MoveId.DRAGON_RAGE); await game.phaseInterceptor.to("BerryPhase", false); expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp() - 80); }); it("should not apply multiplier to counter moves", async () => { - game.override.moveset([Moves.COUNTER]); - game.override.enemyMoveset([Moves.TACKLE]); + game.override.moveset([MoveId.COUNTER]); + game.override.enemyMoveset([MoveId.TACKLE]); - await game.classicMode.startBattle([Species.SHUCKLE]); + await game.classicMode.startBattle([SpeciesId.SHUCKLE]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.COUNTER); + game.move.select(MoveId.COUNTER); await game.phaseInterceptor.to("DamageAnimPhase"); const playerDamage = leadPokemon.getMaxHp() - leadPokemon.hp; @@ -168,15 +168,15 @@ describe("Abilities - Parental Bond", () => { it("should not apply to multi-target moves", async () => { game.override.battleStyle("double"); - game.override.moveset([Moves.EARTHQUAKE]); - game.override.passiveAbility(Abilities.LEVITATE); + game.override.moveset([MoveId.EARTHQUAKE]); + game.override.passiveAbility(AbilityId.LEVITATE); - await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS]); const playerPokemon = game.scene.getPlayerField(); - game.move.select(Moves.EARTHQUAKE); - game.move.select(Moves.EARTHQUAKE, 1); + game.move.select(MoveId.EARTHQUAKE); + game.move.select(MoveId.EARTHQUAKE, 1); await game.phaseInterceptor.to("BerryPhase", false); @@ -184,26 +184,26 @@ describe("Abilities - Parental Bond", () => { }); it("should apply to multi-target moves when hitting only one target", async () => { - game.override.moveset([Moves.EARTHQUAKE]); + game.override.moveset([MoveId.EARTHQUAKE]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.EARTHQUAKE); + game.move.select(MoveId.EARTHQUAKE); await game.phaseInterceptor.to("DamageAnimPhase", false); expect(leadPokemon.turnData.hitCount).toBe(2); }); it("should only trigger post-target move effects once", async () => { - game.override.moveset([Moves.MIND_BLOWN]); + game.override.moveset([MoveId.MIND_BLOWN]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.MIND_BLOWN); + game.move.select(MoveId.MIND_BLOWN); await game.phaseInterceptor.to("DamageAnimPhase", false); @@ -216,14 +216,14 @@ describe("Abilities - Parental Bond", () => { }); it("Burn Up only removes type after the second strike", async () => { - game.override.moveset([Moves.BURN_UP]); + game.override.moveset([MoveId.BURN_UP]); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.BURN_UP); + game.move.select(MoveId.BURN_UP); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -237,14 +237,14 @@ describe("Abilities - Parental Bond", () => { }); it("Moves boosted by this ability and Multi-Lens should strike 3 times", async () => { - game.override.moveset([Moves.TACKLE]); + game.override.moveset([MoveId.TACKLE]); game.override.startingHeldItems([{ name: "MULTI_LENS", count: 1 }]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("DamageAnimPhase"); @@ -252,17 +252,17 @@ describe("Abilities - Parental Bond", () => { }); it("Seismic Toss boosted by this ability and Multi-Lens should strike 3 times", async () => { - game.override.moveset([Moves.SEISMIC_TOSS]); + game.override.moveset([MoveId.SEISMIC_TOSS]); game.override.startingHeldItems([{ name: "MULTI_LENS", count: 1 }]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; const enemyStartingHp = enemyPokemon.hp; - game.move.select(Moves.SEISMIC_TOSS); + game.move.select(MoveId.SEISMIC_TOSS); await game.move.forceHit(); await game.phaseInterceptor.to("DamageAnimPhase"); @@ -275,13 +275,13 @@ describe("Abilities - Parental Bond", () => { }); it("Hyper Beam boosted by this ability should strike twice, then recharge", async () => { - game.override.moveset([Moves.HYPER_BEAM]); + game.override.moveset([MoveId.HYPER_BEAM]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.HYPER_BEAM); + game.move.select(MoveId.HYPER_BEAM); await game.move.forceHit(); await game.phaseInterceptor.to("DamageAnimPhase"); @@ -295,14 +295,14 @@ describe("Abilities - Parental Bond", () => { }); it("Anchor Shot boosted by this ability should only trap the target after the second hit", async () => { - game.override.moveset([Moves.ANCHOR_SHOT]); + game.override.moveset([MoveId.ANCHOR_SHOT]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.ANCHOR_SHOT); + game.move.select(MoveId.ANCHOR_SHOT); await game.move.forceHit(); await game.phaseInterceptor.to("DamageAnimPhase"); @@ -319,14 +319,14 @@ describe("Abilities - Parental Bond", () => { }); it("Smack Down boosted by this ability should only ground the target after the second hit", async () => { - game.override.moveset([Moves.SMACK_DOWN]); + game.override.moveset([MoveId.SMACK_DOWN]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SMACK_DOWN); + game.move.select(MoveId.SMACK_DOWN); await game.move.forceHit(); await game.phaseInterceptor.to("DamageAnimPhase"); @@ -340,13 +340,13 @@ describe("Abilities - Parental Bond", () => { }); it("U-turn boosted by this ability should strike twice before forcing a switch", async () => { - game.override.moveset([Moves.U_TURN]); + game.override.moveset([MoveId.U_TURN]); - await game.classicMode.startBattle([Species.MAGIKARP, Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.U_TURN); + game.move.select(MoveId.U_TURN); await game.move.forceHit(); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -357,14 +357,14 @@ describe("Abilities - Parental Bond", () => { }); it("Wake-Up Slap boosted by this ability should only wake up the target after the second hit", async () => { - game.override.moveset([Moves.WAKE_UP_SLAP]).enemyStatusEffect(StatusEffect.SLEEP); + game.override.moveset([MoveId.WAKE_UP_SLAP]).enemyStatusEffect(StatusEffect.SLEEP); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.WAKE_UP_SLAP); + game.move.select(MoveId.WAKE_UP_SLAP); await game.move.forceHit(); await game.phaseInterceptor.to("DamageAnimPhase"); @@ -378,14 +378,14 @@ describe("Abilities - Parental Bond", () => { }); it("should not cause user to hit into King's Shield more than once", async () => { - game.override.moveset([Moves.TACKLE]); - game.override.enemyMoveset([Moves.KINGS_SHIELD]); + game.override.moveset([MoveId.TACKLE]); + game.override.enemyMoveset([MoveId.KINGS_SHIELD]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("BerryPhase", false); @@ -393,14 +393,14 @@ describe("Abilities - Parental Bond", () => { }); it("should not cause user to hit into Storm Drain more than once", async () => { - game.override.moveset([Moves.WATER_GUN]); - game.override.enemyAbility(Abilities.STORM_DRAIN); + game.override.moveset([MoveId.WATER_GUN]); + game.override.enemyAbility(AbilityId.STORM_DRAIN); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.WATER_GUN); + game.move.select(MoveId.WATER_GUN); await game.phaseInterceptor.to("BerryPhase", false); @@ -408,13 +408,13 @@ describe("Abilities - Parental Bond", () => { }); it("should not allow Future Sight to hit infinitely many times if the user switches out", async () => { - game.override.enemyLevel(1000).moveset(Moves.FUTURE_SIGHT); - await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); + game.override.enemyLevel(1000).moveset(MoveId.FUTURE_SIGHT); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER, SpeciesId.SQUIRTLE]); const enemyPokemon = game.scene.getEnemyPokemon()!; vi.spyOn(enemyPokemon, "damageAndUpdate"); - game.move.select(Moves.FUTURE_SIGHT); + game.move.select(MoveId.FUTURE_SIGHT); await game.toNextTurn(); game.doSwitchPokemon(1); diff --git a/test/abilities/pastel_veil.test.ts b/test/abilities/pastel_veil.test.ts index 21da1d1353d..8a3aec918d0 100644 --- a/test/abilities/pastel_veil.test.ts +++ b/test/abilities/pastel_veil.test.ts @@ -1,9 +1,9 @@ import { BattlerIndex } from "#app/battle"; -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { CommandPhase } from "#app/phases/command-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -27,22 +27,22 @@ describe("Abilities - Pastel Veil", () => { game = new GameManager(phaserGame); game.override .battleStyle("double") - .moveset([Moves.TOXIC_THREAD, Moves.SPLASH]) - .enemyAbility(Abilities.BALL_FETCH) - .enemySpecies(Species.SUNKERN) - .enemyMoveset(Moves.SPLASH); + .moveset([MoveId.TOXIC_THREAD, MoveId.SPLASH]) + .enemyAbility(AbilityId.BALL_FETCH) + .enemySpecies(SpeciesId.SUNKERN) + .enemyMoveset(MoveId.SPLASH); }); it("prevents the user and its allies from being afflicted by poison", async () => { - await game.classicMode.startBattle([Species.MAGIKARP, Species.GALAR_PONYTA]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.GALAR_PONYTA]); const ponyta = game.scene.getPlayerField()[1]; const magikarp = game.scene.getPlayerField()[0]; ponyta.abilityIndex = 1; - expect(ponyta.hasAbility(Abilities.PASTEL_VEIL)).toBe(true); + expect(ponyta.hasAbility(AbilityId.PASTEL_VEIL)).toBe(true); - game.move.select(Moves.SPLASH); - game.move.select(Moves.TOXIC_THREAD, 1, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.TOXIC_THREAD, 1, BattlerIndex.PLAYER); await game.phaseInterceptor.to(TurnEndPhase); @@ -50,21 +50,21 @@ describe("Abilities - Pastel Veil", () => { }); it("it heals the poisoned status condition of allies if user is sent out into battle", async () => { - await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS, Species.GALAR_PONYTA]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS, SpeciesId.GALAR_PONYTA]); const ponyta = game.scene.getPlayerParty()[2]; const magikarp = game.scene.getPlayerField()[0]; ponyta.abilityIndex = 1; - expect(ponyta.hasAbility(Abilities.PASTEL_VEIL)).toBe(true); + expect(ponyta.hasAbility(AbilityId.PASTEL_VEIL)).toBe(true); - game.move.select(Moves.SPLASH); - game.move.select(Moves.TOXIC_THREAD, 1, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.TOXIC_THREAD, 1, BattlerIndex.PLAYER); await game.phaseInterceptor.to(TurnEndPhase); expect(magikarp.status?.effect).toBe(StatusEffect.POISON); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSwitchPokemon(2); await game.phaseInterceptor.to(TurnEndPhase); diff --git a/test/abilities/perish_body.test.ts b/test/abilities/perish_body.test.ts index 140e087843c..9668bf349a8 100644 --- a/test/abilities/perish_body.test.ts +++ b/test/abilities/perish_body.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -24,21 +24,21 @@ describe("Abilities - Perish Song", () => { game.override.battleStyle("single"); game.override.disableCrits(); - game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyAbility(Abilities.BALL_FETCH); + game.override.enemySpecies(SpeciesId.MAGIKARP); + game.override.enemyAbility(AbilityId.BALL_FETCH); - game.override.starterSpecies(Species.CURSOLA); - game.override.ability(Abilities.PERISH_BODY); - game.override.moveset([Moves.SPLASH]); + game.override.starterSpecies(SpeciesId.CURSOLA); + game.override.ability(AbilityId.PERISH_BODY); + game.override.moveset([MoveId.SPLASH]); }); it("should trigger when hit with damaging move", async () => { - game.override.enemyMoveset([Moves.AQUA_JET]); + game.override.enemyMoveset([MoveId.AQUA_JET]); await game.classicMode.startBattle(); const cursola = game.scene.getPlayerPokemon(); const magikarp = game.scene.getEnemyPokemon(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(cursola?.summonData.tags[0].turnCount).toBe(3); @@ -46,11 +46,11 @@ describe("Abilities - Perish Song", () => { }); it("should trigger even when fainting", async () => { - game.override.enemyMoveset([Moves.AQUA_JET]).enemyLevel(100).startingLevel(1); - await game.classicMode.startBattle([Species.CURSOLA, Species.FEEBAS]); + game.override.enemyMoveset([MoveId.AQUA_JET]).enemyLevel(100).startingLevel(1); + await game.classicMode.startBattle([SpeciesId.CURSOLA, SpeciesId.FEEBAS]); const magikarp = game.scene.getEnemyPokemon(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -58,28 +58,28 @@ describe("Abilities - Perish Song", () => { }); it("should not activate if attacker already has perish song", async () => { - game.override.enemyMoveset([Moves.PERISH_SONG, Moves.AQUA_JET, Moves.SPLASH]); - await game.classicMode.startBattle([Species.FEEBAS, Species.CURSOLA]); + game.override.enemyMoveset([MoveId.PERISH_SONG, MoveId.AQUA_JET, MoveId.SPLASH]); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.CURSOLA]); const feebas = game.scene.getPlayerPokemon(); const magikarp = game.scene.getEnemyPokemon(); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.PERISH_SONG); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.PERISH_SONG); await game.toNextTurn(); expect(feebas?.summonData.tags[0].turnCount).toBe(3); expect(magikarp?.summonData.tags[0].turnCount).toBe(3); game.doSwitchPokemon(1); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); const cursola = game.scene.getPlayerPokemon(); expect(cursola?.summonData.tags.length).toBe(0); expect(magikarp?.summonData.tags[0].turnCount).toBe(2); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.AQUA_JET); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.AQUA_JET); await game.toNextTurn(); expect(cursola?.summonData.tags.length).toBe(0); @@ -87,22 +87,22 @@ describe("Abilities - Perish Song", () => { }); it("should activate if cursola already has perish song, but not reset its counter", async () => { - game.override.enemyMoveset([Moves.PERISH_SONG, Moves.AQUA_JET, Moves.SPLASH]); - game.override.moveset([Moves.WHIRLWIND, Moves.SPLASH]); + game.override.enemyMoveset([MoveId.PERISH_SONG, MoveId.AQUA_JET, MoveId.SPLASH]); + game.override.moveset([MoveId.WHIRLWIND, MoveId.SPLASH]); game.override.startingWave(5); - await game.classicMode.startBattle([Species.CURSOLA]); + await game.classicMode.startBattle([SpeciesId.CURSOLA]); const cursola = game.scene.getPlayerPokemon(); - game.move.select(Moves.WHIRLWIND); - await game.move.selectEnemyMove(Moves.PERISH_SONG); + game.move.select(MoveId.WHIRLWIND); + await game.move.selectEnemyMove(MoveId.PERISH_SONG); await game.toNextTurn(); const magikarp = game.scene.getEnemyPokemon(); expect(cursola?.summonData.tags[0].turnCount).toBe(3); expect(magikarp?.summonData.tags.length).toBe(0); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.AQUA_JET); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.AQUA_JET); await game.toNextTurn(); expect(cursola?.summonData.tags[0].turnCount).toBe(2); diff --git a/test/abilities/power_construct.test.ts b/test/abilities/power_construct.test.ts index 67005f5c87e..f8e3de802e6 100644 --- a/test/abilities/power_construct.test.ts +++ b/test/abilities/power_construct.test.ts @@ -1,9 +1,9 @@ import { Status } from "#app/data/status-effect"; import { QuietFormChangePhase } from "#app/phases/quiet-form-change-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; @@ -24,12 +24,12 @@ describe("Abilities - POWER CONSTRUCT", () => { beforeEach(() => { game = new GameManager(phaserGame); - const moveToUse = Moves.SPLASH; + const moveToUse = MoveId.SPLASH; game.override .battleStyle("single") - .ability(Abilities.POWER_CONSTRUCT) + .ability(AbilityId.POWER_CONSTRUCT) .moveset([moveToUse]) - .enemyMoveset(Moves.TACKLE); + .enemyMoveset(MoveId.TACKLE); }); test("check if fainted 50% Power Construct Pokemon switches to base form on arena reset", async () => { @@ -37,12 +37,12 @@ describe("Abilities - POWER CONSTRUCT", () => { completeForm = 4; game.override.startingWave(4); game.override.starterForms({ - [Species.ZYGARDE]: completeForm, + [SpeciesId.ZYGARDE]: completeForm, }); - await game.classicMode.startBattle([Species.MAGIKARP, Species.ZYGARDE]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.ZYGARDE]); - const zygarde = game.scene.getPlayerParty().find(p => p.species.speciesId === Species.ZYGARDE); + const zygarde = game.scene.getPlayerParty().find(p => p.species.speciesId === SpeciesId.ZYGARDE); expect(zygarde).not.toBe(undefined); expect(zygarde!.formIndex).toBe(completeForm); @@ -50,7 +50,7 @@ describe("Abilities - POWER CONSTRUCT", () => { zygarde!.status = new Status(StatusEffect.FAINT); expect(zygarde!.isFainted()).toBe(true); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to(TurnEndPhase); game.doSelectModifier(); @@ -64,12 +64,12 @@ describe("Abilities - POWER CONSTRUCT", () => { completeForm = 5; game.override.startingWave(4); game.override.starterForms({ - [Species.ZYGARDE]: completeForm, + [SpeciesId.ZYGARDE]: completeForm, }); - await game.classicMode.startBattle([Species.MAGIKARP, Species.ZYGARDE]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.ZYGARDE]); - const zygarde = game.scene.getPlayerParty().find(p => p.species.speciesId === Species.ZYGARDE); + const zygarde = game.scene.getPlayerParty().find(p => p.species.speciesId === SpeciesId.ZYGARDE); expect(zygarde).not.toBe(undefined); expect(zygarde!.formIndex).toBe(completeForm); @@ -77,7 +77,7 @@ describe("Abilities - POWER CONSTRUCT", () => { zygarde!.status = new Status(StatusEffect.FAINT); expect(zygarde!.isFainted()).toBe(true); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to(TurnEndPhase); game.doSelectModifier(); diff --git a/test/abilities/power_spot.test.ts b/test/abilities/power_spot.test.ts index 0a062537202..5e6cbce7742 100644 --- a/test/abilities/power_spot.test.ts +++ b/test/abilities/power_spot.test.ts @@ -1,9 +1,9 @@ import { allMoves } from "#app/data/data-lists"; -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -27,49 +27,49 @@ describe("Abilities - Power Spot", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleStyle("double"); - game.override.moveset([Moves.TACKLE, Moves.BREAKING_SWIPE, Moves.SPLASH, Moves.DAZZLING_GLEAM]); - game.override.enemyMoveset(Moves.SPLASH); - game.override.enemySpecies(Species.SHUCKLE); - game.override.enemyAbility(Abilities.BALL_FETCH); + game.override.moveset([MoveId.TACKLE, MoveId.BREAKING_SWIPE, MoveId.SPLASH, MoveId.DAZZLING_GLEAM]); + game.override.enemyMoveset(MoveId.SPLASH); + game.override.enemySpecies(SpeciesId.SHUCKLE); + game.override.enemyAbility(AbilityId.BALL_FETCH); }); it("raises the power of allies' special moves by 30%", async () => { - const moveToCheck = allMoves[Moves.DAZZLING_GLEAM]; + const moveToCheck = allMoves[MoveId.DAZZLING_GLEAM]; const basePower = moveToCheck.power; vi.spyOn(moveToCheck, "calculateBattlePower"); - await game.classicMode.startBattle([Species.REGIELEKI, Species.STONJOURNER]); - game.move.select(Moves.DAZZLING_GLEAM); - game.move.select(Moves.SPLASH, 1); + await game.classicMode.startBattle([SpeciesId.REGIELEKI, SpeciesId.STONJOURNER]); + game.move.select(MoveId.DAZZLING_GLEAM); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(MoveEffectPhase); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(basePower * powerSpotMultiplier); }); it("raises the power of allies' physical moves by 30%", async () => { - const moveToCheck = allMoves[Moves.BREAKING_SWIPE]; + const moveToCheck = allMoves[MoveId.BREAKING_SWIPE]; const basePower = moveToCheck.power; vi.spyOn(moveToCheck, "calculateBattlePower"); - await game.classicMode.startBattle([Species.REGIELEKI, Species.STONJOURNER]); - game.move.select(Moves.BREAKING_SWIPE); - game.move.select(Moves.SPLASH, 1); + await game.classicMode.startBattle([SpeciesId.REGIELEKI, SpeciesId.STONJOURNER]); + game.move.select(MoveId.BREAKING_SWIPE); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(MoveEffectPhase); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(basePower * powerSpotMultiplier); }); it("does not raise the power of the ability owner's moves", async () => { - const moveToCheck = allMoves[Moves.BREAKING_SWIPE]; + const moveToCheck = allMoves[MoveId.BREAKING_SWIPE]; const basePower = moveToCheck.power; vi.spyOn(moveToCheck, "calculateBattlePower"); - await game.classicMode.startBattle([Species.STONJOURNER, Species.REGIELEKI]); - game.move.select(Moves.BREAKING_SWIPE); - game.move.select(Moves.SPLASH, 1); + await game.classicMode.startBattle([SpeciesId.STONJOURNER, SpeciesId.REGIELEKI]); + game.move.select(MoveId.BREAKING_SWIPE); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(TurnEndPhase); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(basePower); diff --git a/test/abilities/protean.test.ts b/test/abilities/protean.test.ts index e868be8e231..a0b04fa0be5 100644 --- a/test/abilities/protean.test.ts +++ b/test/abilities/protean.test.ts @@ -3,11 +3,11 @@ import { PokemonType } from "#enums/pokemon-type"; import { Weather } from "#app/data/weather"; import type { PlayerPokemon } from "#app/field/pokemon"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Biome } from "#enums/biome"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { BiomeId } from "#enums/biome-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { WeatherType } from "#enums/weather-type"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -31,46 +31,46 @@ describe("Abilities - Protean", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .ability(Abilities.PROTEAN) + .ability(AbilityId.PROTEAN) .startingLevel(100) - .enemySpecies(Species.RATTATA) - .enemyMoveset(Moves.ENDURE); + .enemySpecies(SpeciesId.RATTATA) + .enemyMoveset(MoveId.ENDURE); }); test("ability applies and changes a pokemon's type", async () => { - game.override.moveset([Moves.SPLASH]); + game.override.moveset([MoveId.SPLASH]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.SPLASH); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.SPLASH); }); // Test for Gen9+ functionality, we are using previous funcionality test.skip("ability applies only once per switch in", async () => { - game.override.moveset([Moves.SPLASH, Moves.AGILITY]); + game.override.moveset([MoveId.SPLASH, MoveId.AGILITY]); - await game.classicMode.startBattle([Species.MAGIKARP, Species.BULBASAUR]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.BULBASAUR]); let leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.SPLASH); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.SPLASH); - game.move.select(Moves.AGILITY); + game.move.select(MoveId.AGILITY); await game.phaseInterceptor.to(TurnEndPhase); - expect(leadPokemon.waveData.abilitiesApplied).toContain(Abilities.PROTEAN); + expect(leadPokemon.waveData.abilitiesApplied).toContain(AbilityId.PROTEAN); const leadPokemonType = PokemonType[leadPokemon.getTypes()[0]]; - const moveType = PokemonType[allMoves[Moves.AGILITY].type]; + const moveType = PokemonType[allMoves[MoveId.AGILITY].type]; expect(leadPokemonType).not.toBe(moveType); await game.toNextTurn(); @@ -82,25 +82,25 @@ describe("Abilities - Protean", () => { leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.SPLASH); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.SPLASH); }); test("ability applies correctly even if the pokemon's move has a variable type", async () => { - game.override.moveset([Moves.WEATHER_BALL]); + game.override.moveset([MoveId.WEATHER_BALL]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); game.scene.arena.weather = new Weather(WeatherType.SUNNY); - game.move.select(Moves.WEATHER_BALL); + game.move.select(MoveId.WEATHER_BALL); await game.phaseInterceptor.to(TurnEndPhase); - expect(leadPokemon.waveData.abilitiesApplied).toContain(Abilities.PROTEAN); + expect(leadPokemon.waveData.abilitiesApplied).toContain(AbilityId.PROTEAN); expect(leadPokemon.getTypes()).toHaveLength(1); const leadPokemonType = PokemonType[leadPokemon.getTypes()[0]], moveType = PokemonType[PokemonType.FIRE]; @@ -108,18 +108,18 @@ describe("Abilities - Protean", () => { }); test("ability applies correctly even if the type has changed by another ability", async () => { - game.override.moveset([Moves.TACKLE]); - game.override.passiveAbility(Abilities.REFRIGERATE); + game.override.moveset([MoveId.TACKLE]); + game.override.passiveAbility(AbilityId.REFRIGERATE); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); - expect(leadPokemon.waveData.abilitiesApplied).toContain(Abilities.PROTEAN); + expect(leadPokemon.waveData.abilitiesApplied).toContain(AbilityId.PROTEAN); expect(leadPokemon.getTypes()).toHaveLength(1); const leadPokemonType = PokemonType[leadPokemon.getTypes()[0]], moveType = PokemonType[PokemonType.ICE]; @@ -127,173 +127,173 @@ describe("Abilities - Protean", () => { }); test("ability applies correctly even if the pokemon's move calls another move", async () => { - game.override.moveset([Moves.NATURE_POWER]); + game.override.moveset([MoveId.NATURE_POWER]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.scene.arena.biomeType = Biome.MOUNTAIN; - game.move.select(Moves.NATURE_POWER); + game.scene.arena.biomeType = BiomeId.MOUNTAIN; + game.move.select(MoveId.NATURE_POWER); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.AIR_SLASH); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.AIR_SLASH); }); test("ability applies correctly even if the pokemon's move is delayed / charging", async () => { - game.override.moveset([Moves.DIG]); + game.override.moveset([MoveId.DIG]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.DIG); + game.move.select(MoveId.DIG); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.DIG); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.DIG); }); test("ability applies correctly even if the pokemon's move misses", async () => { - game.override.moveset([Moves.TACKLE]); - game.override.enemyMoveset(Moves.SPLASH); + game.override.moveset([MoveId.TACKLE]); + game.override.enemyMoveset(MoveId.SPLASH); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.move.forceMiss(); await game.phaseInterceptor.to(TurnEndPhase); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon.isFullHp()).toBe(true); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.TACKLE); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.TACKLE); }); test("ability applies correctly even if the pokemon's move is protected against", async () => { - game.override.moveset([Moves.TACKLE]).enemyMoveset(Moves.PROTECT); + game.override.moveset([MoveId.TACKLE]).enemyMoveset(MoveId.PROTECT); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.TACKLE); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.TACKLE); }); test("ability applies correctly even if the pokemon's move fails because of type immunity", async () => { - game.override.moveset([Moves.TACKLE]); - game.override.enemySpecies(Species.GASTLY); + game.override.moveset([MoveId.TACKLE]); + game.override.enemySpecies(SpeciesId.GASTLY); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.TACKLE); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.TACKLE); }); test("ability is not applied if pokemon's type is the same as the move's type", async () => { - game.override.moveset([Moves.SPLASH]); + game.override.moveset([MoveId.SPLASH]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - leadPokemon.summonData.types = [allMoves[Moves.SPLASH].type]; - game.move.select(Moves.SPLASH); + leadPokemon.summonData.types = [allMoves[MoveId.SPLASH].type]; + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); - expect(leadPokemon.waveData.abilitiesApplied).not.toContain(Abilities.PROTEAN); + expect(leadPokemon.waveData.abilitiesApplied).not.toContain(AbilityId.PROTEAN); }); test("ability is not applied if pokemon is terastallized", async () => { - game.override.moveset([Moves.SPLASH]); + game.override.moveset([MoveId.SPLASH]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); leadPokemon.isTerastallized = true; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); - expect(leadPokemon.waveData.abilitiesApplied).not.toContain(Abilities.PROTEAN); + expect(leadPokemon.waveData.abilitiesApplied).not.toContain(AbilityId.PROTEAN); }); test("ability is not applied if pokemon uses struggle", async () => { - game.override.moveset([Moves.STRUGGLE]); + game.override.moveset([MoveId.STRUGGLE]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.STRUGGLE); + game.move.select(MoveId.STRUGGLE); await game.phaseInterceptor.to(TurnEndPhase); - expect(leadPokemon.waveData.abilitiesApplied).not.toContain(Abilities.PROTEAN); + expect(leadPokemon.waveData.abilitiesApplied).not.toContain(AbilityId.PROTEAN); }); test("ability is not applied if the pokemon's move fails", async () => { - game.override.moveset([Moves.BURN_UP]); + game.override.moveset([MoveId.BURN_UP]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.BURN_UP); + game.move.select(MoveId.BURN_UP); await game.phaseInterceptor.to(TurnEndPhase); - expect(leadPokemon.waveData.abilitiesApplied).not.toContain(Abilities.PROTEAN); + expect(leadPokemon.waveData.abilitiesApplied).not.toContain(AbilityId.PROTEAN); }); test("ability applies correctly even if the pokemon's Trick-or-Treat fails", async () => { - game.override.moveset([Moves.TRICK_OR_TREAT]); - game.override.enemySpecies(Species.GASTLY); + game.override.moveset([MoveId.TRICK_OR_TREAT]); + game.override.enemySpecies(SpeciesId.GASTLY); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.TRICK_OR_TREAT); + game.move.select(MoveId.TRICK_OR_TREAT); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.TRICK_OR_TREAT); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.TRICK_OR_TREAT); }); test("ability applies correctly and the pokemon curses itself", async () => { - game.override.moveset([Moves.CURSE]); + game.override.moveset([MoveId.CURSE]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.CURSE); + game.move.select(MoveId.CURSE); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.CURSE); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.CURSE); expect(leadPokemon.getTag(BattlerTagType.CURSED)).not.toBe(undefined); }); }); -function testPokemonTypeMatchesDefaultMoveType(pokemon: PlayerPokemon, move: Moves) { - expect(pokemon.waveData.abilitiesApplied).toContain(Abilities.PROTEAN); +function testPokemonTypeMatchesDefaultMoveType(pokemon: PlayerPokemon, move: MoveId) { + expect(pokemon.waveData.abilitiesApplied).toContain(AbilityId.PROTEAN); expect(pokemon.getTypes()).toHaveLength(1); const pokemonType = PokemonType[pokemon.getTypes()[0]], moveType = PokemonType[allMoves[move].type]; diff --git a/test/abilities/protosynthesis.test.ts b/test/abilities/protosynthesis.test.ts index e312ebd572c..3bf74acaca7 100644 --- a/test/abilities/protosynthesis.test.ts +++ b/test/abilities/protosynthesis.test.ts @@ -1,7 +1,7 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; import { Nature } from "#enums/nature"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -25,23 +25,23 @@ describe("Abilities - Protosynthesis", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.TACKLE]) - .ability(Abilities.PROTOSYNTHESIS) + .moveset([MoveId.SPLASH, MoveId.TACKLE]) + .ability(AbilityId.PROTOSYNTHESIS) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should not consider temporary items when determining which stat to boost", async () => { // Mew has uniform base stats game.override .startingModifier([{ name: "TEMP_STAT_STAGE_BOOSTER", type: Stat.DEF }]) - .enemyMoveset(Moves.SUNNY_DAY) + .enemyMoveset(MoveId.SUNNY_DAY) .startingLevel(100) .enemyLevel(100); - await game.classicMode.startBattle([Species.MEW]); + await game.classicMode.startBattle([SpeciesId.MEW]); const mew = game.scene.getPlayerPokemon()!; // Nature of starting mon is randomized. We need to fix it to a neutral nature for the automated test. mew.setNature(Nature.HARDY); @@ -69,7 +69,7 @@ describe("Abilities - Protosynthesis", () => { true, ); const initialHp = enemy.hp; - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); const unboosted_dmg = initialHp - enemy.hp; @@ -96,7 +96,7 @@ describe("Abilities - Protosynthesis", () => { false, true, ); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); const boosted_dmg = initialHp - enemy.hp; diff --git a/test/abilities/quick_draw.test.ts b/test/abilities/quick_draw.test.ts index e761d236a93..70b8637aa37 100644 --- a/test/abilities/quick_draw.test.ts +++ b/test/abilities/quick_draw.test.ts @@ -1,9 +1,9 @@ import { BypassSpeedChanceAbAttr } from "#app/data/abilities/ability"; import { allAbilities } from "#app/data/data-lists"; import { FaintPhase } from "#app/phases/faint-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; @@ -26,16 +26,16 @@ describe("Abilities - Quick Draw", () => { game = new GameManager(phaserGame); game.override.battleStyle("single"); - game.override.starterSpecies(Species.MAGIKARP); - game.override.ability(Abilities.QUICK_DRAW); - game.override.moveset([Moves.TACKLE, Moves.TAIL_WHIP]); + game.override.starterSpecies(SpeciesId.MAGIKARP); + game.override.ability(AbilityId.QUICK_DRAW); + game.override.moveset([MoveId.TACKLE, MoveId.TAIL_WHIP]); game.override.enemyLevel(100); - game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyAbility(Abilities.BALL_FETCH); - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemySpecies(SpeciesId.MAGIKARP); + game.override.enemyAbility(AbilityId.BALL_FETCH); + game.override.enemyMoveset([MoveId.TACKLE]); - vi.spyOn(allAbilities[Abilities.QUICK_DRAW].getAttrs(BypassSpeedChanceAbAttr)[0], "chance", "get").mockReturnValue( + vi.spyOn(allAbilities[AbilityId.QUICK_DRAW].getAttrs(BypassSpeedChanceAbAttr)[0], "chance", "get").mockReturnValue( 100, ); }); @@ -49,12 +49,12 @@ describe("Abilities - Quick Draw", () => { pokemon.hp = 1; enemy.hp = 1; - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(FaintPhase, false); expect(pokemon.isFainted()).toBe(false); expect(enemy.isFainted()).toBe(true); - expect(pokemon.waveData.abilitiesApplied).contain(Abilities.QUICK_DRAW); + expect(pokemon.waveData.abilitiesApplied).contain(AbilityId.QUICK_DRAW); }, 20000); test( @@ -71,17 +71,17 @@ describe("Abilities - Quick Draw", () => { pokemon.hp = 1; enemy.hp = 1; - game.move.select(Moves.TAIL_WHIP); + game.move.select(MoveId.TAIL_WHIP); await game.phaseInterceptor.to(FaintPhase, false); expect(pokemon.isFainted()).toBe(true); expect(enemy.isFainted()).toBe(false); - expect(pokemon.waveData.abilitiesApplied).not.contain(Abilities.QUICK_DRAW); + expect(pokemon.waveData.abilitiesApplied).not.contain(AbilityId.QUICK_DRAW); }, ); test("does not increase priority", async () => { - game.override.enemyMoveset([Moves.EXTREME_SPEED]); + game.override.enemyMoveset([MoveId.EXTREME_SPEED]); await game.classicMode.startBattle(); @@ -91,11 +91,11 @@ describe("Abilities - Quick Draw", () => { pokemon.hp = 1; enemy.hp = 1; - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(FaintPhase, false); expect(pokemon.isFainted()).toBe(true); expect(enemy.isFainted()).toBe(false); - expect(pokemon.waveData.abilitiesApplied).contain(Abilities.QUICK_DRAW); + expect(pokemon.waveData.abilitiesApplied).contain(AbilityId.QUICK_DRAW); }, 20000); }); diff --git a/test/abilities/sand_spit.test.ts b/test/abilities/sand_spit.test.ts index 2b655f92466..96e6380ae88 100644 --- a/test/abilities/sand_spit.test.ts +++ b/test/abilities/sand_spit.test.ts @@ -1,7 +1,7 @@ import { WeatherType } from "#app/enums/weather-type"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -25,29 +25,29 @@ describe("Abilities - Sand Spit", () => { game.override.battleStyle("single"); game.override.disableCrits(); - game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyAbility(Abilities.BALL_FETCH); + game.override.enemySpecies(SpeciesId.MAGIKARP); + game.override.enemyAbility(AbilityId.BALL_FETCH); - game.override.starterSpecies(Species.SILICOBRA); - game.override.ability(Abilities.SAND_SPIT); - game.override.moveset([Moves.SPLASH, Moves.COIL]); + game.override.starterSpecies(SpeciesId.SILICOBRA); + game.override.ability(AbilityId.SAND_SPIT); + game.override.moveset([MoveId.SPLASH, MoveId.COIL]); }); it("should trigger when hit with damaging move", async () => { - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemyMoveset([MoveId.TACKLE]); await game.classicMode.startBattle(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SANDSTORM); }, 20000); it("should trigger even when fainting", async () => { - game.override.enemyMoveset([Moves.TACKLE]).enemyLevel(100).startingLevel(1); - await game.classicMode.startBattle([Species.SILICOBRA, Species.MAGIKARP]); + game.override.enemyMoveset([MoveId.TACKLE]).enemyLevel(100).startingLevel(1); + await game.classicMode.startBattle([SpeciesId.SILICOBRA, SpeciesId.MAGIKARP]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -55,10 +55,10 @@ describe("Abilities - Sand Spit", () => { }); it("should not trigger when targetted with status moves", async () => { - game.override.enemyMoveset([Moves.GROWL]); + game.override.enemyMoveset([MoveId.GROWL]); await game.classicMode.startBattle(); - game.move.select(Moves.COIL); + game.move.select(MoveId.COIL); await game.toNextTurn(); expect(game.scene.arena.weather?.weatherType).not.toBe(WeatherType.SANDSTORM); diff --git a/test/abilities/sand_veil.test.ts b/test/abilities/sand_veil.test.ts index a74538fef16..f4b322dc2e9 100644 --- a/test/abilities/sand_veil.test.ts +++ b/test/abilities/sand_veil.test.ts @@ -3,9 +3,9 @@ import { allAbilities } from "#app/data/data-lists"; import { CommandPhase } from "#app/phases/command-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import { WeatherType } from "#enums/weather-type"; import GameManager from "#test/testUtils/gameManager"; @@ -29,10 +29,10 @@ describe("Abilities - Sand Veil", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) - .enemySpecies(Species.MEOWSCARADA) - .enemyAbility(Abilities.INSOMNIA) - .enemyMoveset(Moves.TWISTER) + .moveset([MoveId.SPLASH]) + .enemySpecies(SpeciesId.MEOWSCARADA) + .enemyAbility(AbilityId.INSOMNIA) + .enemyMoveset(MoveId.TWISTER) .startingLevel(100) .enemyLevel(100) .weather(WeatherType.SANDSTORM) @@ -40,13 +40,13 @@ describe("Abilities - Sand Veil", () => { }); test("ability should increase the evasiveness of the source", async () => { - await game.classicMode.startBattle([Species.SNORLAX, Species.BLISSEY]); + await game.classicMode.startBattle([SpeciesId.SNORLAX, SpeciesId.BLISSEY]); const leadPokemon = game.scene.getPlayerField(); - vi.spyOn(leadPokemon[0], "getAbility").mockReturnValue(allAbilities[Abilities.SAND_VEIL]); + vi.spyOn(leadPokemon[0], "getAbility").mockReturnValue(allAbilities[AbilityId.SAND_VEIL]); - const sandVeilAttr = allAbilities[Abilities.SAND_VEIL].getAttrs(StatMultiplierAbAttr)[0]; + const sandVeilAttr = allAbilities[AbilityId.SAND_VEIL].getAttrs(StatMultiplierAbAttr)[0]; vi.spyOn(sandVeilAttr, "applyStatStage").mockImplementation( (_pokemon, _passive, _simulated, stat, statValue, _args) => { if (stat === Stat.EVA && game.scene.arena.weather?.weatherType === WeatherType.SANDSTORM) { @@ -57,14 +57,14 @@ describe("Abilities - Sand Veil", () => { }, ); - expect(leadPokemon[0].hasAbility(Abilities.SAND_VEIL)).toBe(true); - expect(leadPokemon[1].hasAbility(Abilities.SAND_VEIL)).toBe(false); + expect(leadPokemon[0].hasAbility(AbilityId.SAND_VEIL)).toBe(true); + expect(leadPokemon[1].hasAbility(AbilityId.SAND_VEIL)).toBe(false); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(MoveEffectPhase, false); diff --git a/test/abilities/sap_sipper.test.ts b/test/abilities/sap_sipper.test.ts index 03a6ee5d398..16559fb563f 100644 --- a/test/abilities/sap_sipper.test.ts +++ b/test/abilities/sap_sipper.test.ts @@ -2,10 +2,10 @@ import { Stat } from "#enums/stat"; import { TerrainType } from "#app/data/terrain"; import { MoveEndPhase } from "#app/phases/move-end-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -32,18 +32,18 @@ describe("Abilities - Sap Sipper", () => { game.override .battleStyle("single") .disableCrits() - .ability(Abilities.SAP_SIPPER) - .enemySpecies(Species.RATTATA) - .enemyAbility(Abilities.SAP_SIPPER) - .enemyMoveset(Moves.SPLASH); + .ability(AbilityId.SAP_SIPPER) + .enemySpecies(SpeciesId.RATTATA) + .enemyAbility(AbilityId.SAP_SIPPER) + .enemyMoveset(MoveId.SPLASH); }); it("raises ATK stat stage by 1 and block effects when activated against a grass attack", async () => { - const moveToUse = Moves.LEAFAGE; + const moveToUse = MoveId.LEAFAGE; game.override.moveset(moveToUse); - await game.classicMode.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const enemyPokemon = game.scene.getEnemyPokemon()!; const initialEnemyHp = enemyPokemon.hp; @@ -57,11 +57,11 @@ describe("Abilities - Sap Sipper", () => { }); it("raises ATK stat stage by 1 and block effects when activated against a grass status move", async () => { - const moveToUse = Moves.SPORE; + const moveToUse = MoveId.SPORE; game.override.moveset(moveToUse); - await game.classicMode.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -74,11 +74,11 @@ describe("Abilities - Sap Sipper", () => { }); it("do not activate against status moves that target the field", async () => { - const moveToUse = Moves.GRASSY_TERRAIN; + const moveToUse = MoveId.GRASSY_TERRAIN; game.override.moveset(moveToUse); - await game.classicMode.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); game.move.select(moveToUse); @@ -90,11 +90,11 @@ describe("Abilities - Sap Sipper", () => { }); it("activate once against multi-hit grass attacks", async () => { - const moveToUse = Moves.BULLET_SEED; + const moveToUse = MoveId.BULLET_SEED; game.override.moveset(moveToUse); - await game.classicMode.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const enemyPokemon = game.scene.getEnemyPokemon()!; const initialEnemyHp = enemyPokemon.hp; @@ -108,11 +108,11 @@ describe("Abilities - Sap Sipper", () => { }); it("do not activate against status moves that target the user", async () => { - const moveToUse = Moves.SPIKY_SHIELD; + const moveToUse = MoveId.SPIKY_SHIELD; game.override.moveset(moveToUse); - await game.classicMode.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -129,14 +129,16 @@ describe("Abilities - Sap Sipper", () => { }); it("activate once against multi-hit grass attacks (metronome)", async () => { - const moveToUse = Moves.METRONOME; + const moveToUse = MoveId.METRONOME; - const randomMoveAttr = allMoves[Moves.METRONOME].findAttr(attr => attr instanceof RandomMoveAttr) as RandomMoveAttr; - vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(Moves.BULLET_SEED); + const randomMoveAttr = allMoves[MoveId.METRONOME].findAttr( + attr => attr instanceof RandomMoveAttr, + ) as RandomMoveAttr; + vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(MoveId.BULLET_SEED); game.override.moveset(moveToUse); - await game.classicMode.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const enemyPokemon = game.scene.getEnemyPokemon()!; const initialEnemyHp = enemyPokemon.hp; @@ -150,13 +152,13 @@ describe("Abilities - Sap Sipper", () => { }); it("still activates regardless of accuracy check", async () => { - game.override.moveset(Moves.LEAF_BLADE); + game.override.moveset(MoveId.LEAF_BLADE); - await game.classicMode.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.LEAF_BLADE); + game.move.select(MoveId.LEAF_BLADE); await game.phaseInterceptor.to("MoveEffectPhase"); await game.move.forceMiss(); diff --git a/test/abilities/schooling.test.ts b/test/abilities/schooling.test.ts index a94b76e38ff..728e9bb7024 100644 --- a/test/abilities/schooling.test.ts +++ b/test/abilities/schooling.test.ts @@ -1,9 +1,9 @@ import { Status } from "#app/data/status-effect"; import { QuietFormChangePhase } from "#app/phases/quiet-form-change-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; @@ -24,8 +24,8 @@ describe("Abilities - SCHOOLING", () => { beforeEach(() => { game = new GameManager(phaserGame); - const moveToUse = Moves.SPLASH; - game.override.battleStyle("single").ability(Abilities.SCHOOLING).moveset([moveToUse]).enemyMoveset(Moves.TACKLE); + const moveToUse = MoveId.SPLASH; + game.override.battleStyle("single").ability(AbilityId.SCHOOLING).moveset([moveToUse]).enemyMoveset(MoveId.TACKLE); }); test("check if fainted pokemon switches to base form on arena reset", async () => { @@ -33,12 +33,12 @@ describe("Abilities - SCHOOLING", () => { schoolForm = 1; game.override.startingWave(4); game.override.starterForms({ - [Species.WISHIWASHI]: schoolForm, + [SpeciesId.WISHIWASHI]: schoolForm, }); - await game.classicMode.startBattle([Species.MAGIKARP, Species.WISHIWASHI]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.WISHIWASHI]); - const wishiwashi = game.scene.getPlayerParty().find(p => p.species.speciesId === Species.WISHIWASHI)!; + const wishiwashi = game.scene.getPlayerParty().find(p => p.species.speciesId === SpeciesId.WISHIWASHI)!; expect(wishiwashi).not.toBe(undefined); expect(wishiwashi.formIndex).toBe(schoolForm); @@ -46,7 +46,7 @@ describe("Abilities - SCHOOLING", () => { wishiwashi.status = new Status(StatusEffect.FAINT); expect(wishiwashi.isFainted()).toBe(true); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to(TurnEndPhase); game.doSelectModifier(); diff --git a/test/abilities/screen_cleaner.test.ts b/test/abilities/screen_cleaner.test.ts index f96f7bf99e2..619cc08bccf 100644 --- a/test/abilities/screen_cleaner.test.ts +++ b/test/abilities/screen_cleaner.test.ts @@ -1,9 +1,9 @@ import { ArenaTagType } from "#app/enums/arena-tag-type"; import { PostSummonPhase } from "#app/phases/post-summon-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -25,16 +25,16 @@ describe("Abilities - Screen Cleaner", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleStyle("single"); - game.override.ability(Abilities.SCREEN_CLEANER); - game.override.enemySpecies(Species.SHUCKLE); + game.override.ability(AbilityId.SCREEN_CLEANER); + game.override.enemySpecies(SpeciesId.SHUCKLE); }); it("removes Aurora Veil", async () => { - game.override.moveset([Moves.HAIL]).enemyMoveset(Moves.AURORA_VEIL); + game.override.moveset([MoveId.HAIL]).enemyMoveset(MoveId.AURORA_VEIL); - await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]); - game.move.select(Moves.HAIL); + game.move.select(MoveId.HAIL); await game.phaseInterceptor.to(TurnEndPhase); expect(game.scene.arena.getTag(ArenaTagType.AURORA_VEIL)).toBeDefined(); @@ -47,11 +47,11 @@ describe("Abilities - Screen Cleaner", () => { }); it("removes Light Screen", async () => { - game.override.enemyMoveset(Moves.LIGHT_SCREEN); + game.override.enemyMoveset(MoveId.LIGHT_SCREEN); - await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); expect(game.scene.arena.getTag(ArenaTagType.LIGHT_SCREEN)).toBeDefined(); @@ -64,11 +64,11 @@ describe("Abilities - Screen Cleaner", () => { }); it("removes Reflect", async () => { - game.override.enemyMoveset(Moves.REFLECT); + game.override.enemyMoveset(MoveId.REFLECT); - await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); expect(game.scene.arena.getTag(ArenaTagType.REFLECT)).toBeDefined(); diff --git a/test/abilities/seed_sower.test.ts b/test/abilities/seed_sower.test.ts index d8edbe59857..761342bfb27 100644 --- a/test/abilities/seed_sower.test.ts +++ b/test/abilities/seed_sower.test.ts @@ -1,7 +1,7 @@ import { TerrainType } from "#app/data/terrain"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -25,29 +25,29 @@ describe("Abilities - Seed Sower", () => { game.override.battleStyle("single"); game.override.disableCrits(); - game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyAbility(Abilities.BALL_FETCH); + game.override.enemySpecies(SpeciesId.MAGIKARP); + game.override.enemyAbility(AbilityId.BALL_FETCH); - game.override.starterSpecies(Species.ARBOLIVA); - game.override.ability(Abilities.SEED_SOWER); - game.override.moveset([Moves.SPLASH]); + game.override.starterSpecies(SpeciesId.ARBOLIVA); + game.override.ability(AbilityId.SEED_SOWER); + game.override.moveset([MoveId.SPLASH]); }); it("should trigger when hit with damaging move", async () => { - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemyMoveset([MoveId.TACKLE]); await game.classicMode.startBattle(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(game.scene.arena.terrain?.terrainType).toBe(TerrainType.GRASSY); }); it("should trigger even when fainting", async () => { - game.override.enemyMoveset([Moves.TACKLE]).enemyLevel(100).startingLevel(1); - await game.classicMode.startBattle([Species.ARBOLIVA, Species.MAGIKARP]); + game.override.enemyMoveset([MoveId.TACKLE]).enemyLevel(100).startingLevel(1); + await game.classicMode.startBattle([SpeciesId.ARBOLIVA, SpeciesId.MAGIKARP]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -55,10 +55,10 @@ describe("Abilities - Seed Sower", () => { }); it("should not trigger when targetted with status moves", async () => { - game.override.enemyMoveset([Moves.GROWL]); + game.override.enemyMoveset([MoveId.GROWL]); await game.classicMode.startBattle(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(game.scene.arena.terrain?.terrainType).not.toBe(TerrainType.GRASSY); diff --git a/test/abilities/serene_grace.test.ts b/test/abilities/serene_grace.test.ts index 191d5a44f19..bfdbd5324bb 100644 --- a/test/abilities/serene_grace.test.ts +++ b/test/abilities/serene_grace.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { allMoves } from "#app/data/data-lists"; @@ -27,22 +27,22 @@ describe("Abilities - Serene Grace", () => { game.override .disableCrits() .battleStyle("single") - .ability(Abilities.SERENE_GRACE) - .moveset([Moves.AIR_SLASH]) - .enemySpecies(Species.ALOLA_GEODUDE) + .ability(AbilityId.SERENE_GRACE) + .moveset([MoveId.AIR_SLASH]) + .enemySpecies(SpeciesId.ALOLA_GEODUDE) .enemyLevel(10) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset([Moves.SPLASH]); + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset([MoveId.SPLASH]); }); it("Serene Grace should double the secondary effect chance of a move", async () => { - await game.classicMode.startBattle([Species.SHUCKLE]); + await game.classicMode.startBattle([SpeciesId.SHUCKLE]); - const airSlashMove = allMoves[Moves.AIR_SLASH]; + const airSlashMove = allMoves[MoveId.AIR_SLASH]; const airSlashFlinchAttr = airSlashMove.getAttrs(FlinchAttr)[0]; vi.spyOn(airSlashFlinchAttr, "getMoveChance"); - game.move.select(Moves.AIR_SLASH); + game.move.select(MoveId.AIR_SLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceHit(); await game.phaseInterceptor.to("BerryPhase"); diff --git a/test/abilities/sheer_force.test.ts b/test/abilities/sheer_force.test.ts index 6bb0a631124..a5b1cf3b5b2 100644 --- a/test/abilities/sheer_force.test.ts +++ b/test/abilities/sheer_force.test.ts @@ -1,8 +1,8 @@ import { BattlerIndex } from "#app/battle"; import { PokemonType } from "#enums/pokemon-type"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -28,25 +28,25 @@ describe("Abilities - Sheer Force", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .ability(Abilities.SHEER_FORCE) - .enemySpecies(Species.ONIX) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset([Moves.SPLASH]) + .ability(AbilityId.SHEER_FORCE) + .enemySpecies(SpeciesId.ONIX) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset([MoveId.SPLASH]) .disableCrits(); }); const SHEER_FORCE_MULT = 1.3; it("Sheer Force should boost the power of the move but disable secondary effects", async () => { - game.override.moveset([Moves.AIR_SLASH]); - await game.classicMode.startBattle([Species.SHUCKLE]); + game.override.moveset([MoveId.AIR_SLASH]); + await game.classicMode.startBattle([SpeciesId.SHUCKLE]); - const airSlashMove = allMoves[Moves.AIR_SLASH]; + const airSlashMove = allMoves[MoveId.AIR_SLASH]; vi.spyOn(airSlashMove, "calculateBattlePower"); const airSlashFlinchAttr = airSlashMove.getAttrs(FlinchAttr)[0]; vi.spyOn(airSlashFlinchAttr, "getMoveChance"); - game.move.select(Moves.AIR_SLASH); + game.move.select(MoveId.AIR_SLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceHit(); @@ -57,13 +57,13 @@ describe("Abilities - Sheer Force", () => { }); it("Sheer Force does not affect the base damage or secondary effects of binding moves", async () => { - game.override.moveset([Moves.BIND]); - await game.classicMode.startBattle([Species.SHUCKLE]); + game.override.moveset([MoveId.BIND]); + await game.classicMode.startBattle([SpeciesId.SHUCKLE]); - const bindMove = allMoves[Moves.BIND]; + const bindMove = allMoves[MoveId.BIND]; vi.spyOn(bindMove, "calculateBattlePower"); - game.move.select(Moves.BIND); + game.move.select(MoveId.BIND); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceHit(); @@ -73,13 +73,13 @@ describe("Abilities - Sheer Force", () => { }, 20000); it("Sheer Force does not boost the base damage of moves with no secondary effect", async () => { - game.override.moveset([Moves.TACKLE]); - await game.classicMode.startBattle([Species.PIDGEOT]); + game.override.moveset([MoveId.TACKLE]); + await game.classicMode.startBattle([SpeciesId.PIDGEOT]); - const tackleMove = allMoves[Moves.TACKLE]; + const tackleMove = allMoves[MoveId.TACKLE]; vi.spyOn(tackleMove, "calculateBattlePower"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceHit(); await game.phaseInterceptor.to("BerryPhase", false); @@ -89,19 +89,19 @@ describe("Abilities - Sheer Force", () => { it("Sheer Force can disable the on-hit activation of specific abilities", async () => { game.override - .moveset([Moves.HEADBUTT]) - .enemySpecies(Species.SQUIRTLE) + .moveset([MoveId.HEADBUTT]) + .enemySpecies(SpeciesId.SQUIRTLE) .enemyLevel(10) - .enemyAbility(Abilities.COLOR_CHANGE); + .enemyAbility(AbilityId.COLOR_CHANGE); - await game.classicMode.startBattle([Species.PIDGEOT]); + await game.classicMode.startBattle([SpeciesId.PIDGEOT]); const enemyPokemon = game.scene.getEnemyPokemon(); - const headbuttMove = allMoves[Moves.HEADBUTT]; + const headbuttMove = allMoves[MoveId.HEADBUTT]; vi.spyOn(headbuttMove, "calculateBattlePower"); const headbuttFlinchAttr = headbuttMove.getAttrs(FlinchAttr)[0]; vi.spyOn(headbuttFlinchAttr, "getMoveChance"); - game.move.select(Moves.HEADBUTT); + game.move.select(MoveId.HEADBUTT); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceHit(); @@ -113,14 +113,14 @@ describe("Abilities - Sheer Force", () => { }); it("Two Pokemon with abilities disabled by Sheer Force hitting each other should not cause a crash", async () => { - const moveToUse = Moves.CRUNCH; + const moveToUse = MoveId.CRUNCH; game.override - .enemyAbility(Abilities.COLOR_CHANGE) - .ability(Abilities.COLOR_CHANGE) + .enemyAbility(AbilityId.COLOR_CHANGE) + .ability(AbilityId.COLOR_CHANGE) .moveset(moveToUse) .enemyMoveset(moveToUse); - await game.classicMode.startBattle([Species.PIDGEOT]); + await game.classicMode.startBattle([SpeciesId.PIDGEOT]); const pidgeot = game.scene.getPlayerParty()[0]; const onix = game.scene.getEnemyParty()[0]; @@ -139,16 +139,16 @@ describe("Abilities - Sheer Force", () => { it("Sheer Force should disable Meloetta's transformation from Relic Song", async () => { game.override - .ability(Abilities.SHEER_FORCE) - .moveset([Moves.RELIC_SONG]) - .enemyMoveset([Moves.SPLASH]) + .ability(AbilityId.SHEER_FORCE) + .moveset([MoveId.RELIC_SONG]) + .enemyMoveset([MoveId.SPLASH]) .enemyLevel(100); - await game.classicMode.startBattle([Species.MELOETTA]); + await game.classicMode.startBattle([SpeciesId.MELOETTA]); const playerPokemon = game.scene.getPlayerPokemon(); const formKeyStart = playerPokemon?.getFormKey(); - game.move.select(Moves.RELIC_SONG); + game.move.select(MoveId.RELIC_SONG); await game.phaseInterceptor.to("TurnEndPhase"); expect(formKeyStart).toBe(playerPokemon?.getFormKey()); }); diff --git a/test/abilities/shield_dust.test.ts b/test/abilities/shield_dust.test.ts index 4ab58e8c2a6..e99b7563cb7 100644 --- a/test/abilities/shield_dust.test.ts +++ b/test/abilities/shield_dust.test.ts @@ -7,9 +7,9 @@ import { } from "#app/data/abilities/ability"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { NumberHolder } from "#app/utils/common"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -32,20 +32,20 @@ describe("Abilities - Shield Dust", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleStyle("single"); - game.override.enemySpecies(Species.ONIX); - game.override.enemyAbility(Abilities.SHIELD_DUST); + game.override.enemySpecies(SpeciesId.ONIX); + game.override.enemyAbility(AbilityId.SHIELD_DUST); game.override.startingLevel(100); - game.override.moveset(Moves.AIR_SLASH); - game.override.enemyMoveset(Moves.TACKLE); + game.override.moveset(MoveId.AIR_SLASH); + game.override.enemyMoveset(MoveId.TACKLE); }); it("Shield Dust", async () => { - await game.classicMode.startBattle([Species.PIDGEOT]); + await game.classicMode.startBattle([SpeciesId.PIDGEOT]); game.scene.getEnemyPokemon()!.stats[Stat.SPDEF] = 10000; expect(game.scene.getPlayerPokemon()!.formIndex).toBe(0); - game.move.select(Moves.AIR_SLASH); + game.move.select(MoveId.AIR_SLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase, false); @@ -53,7 +53,7 @@ describe("Abilities - Shield Dust", () => { // Shield Dust negates secondary effect const phase = game.scene.getCurrentPhase() as MoveEffectPhase; const move = phase.move; - expect(move.id).toBe(Moves.AIR_SLASH); + expect(move.id).toBe(MoveId.AIR_SLASH); const chance = new NumberHolder(move.chance); await applyAbAttrs( diff --git a/test/abilities/shields_down.test.ts b/test/abilities/shields_down.test.ts index 444b1fabf73..0a7270dff31 100644 --- a/test/abilities/shields_down.test.ts +++ b/test/abilities/shields_down.test.ts @@ -2,9 +2,9 @@ import { Status } from "#app/data/status-effect"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { QuietFormChangePhase } from "#app/phases/quiet-form-change-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; @@ -25,11 +25,11 @@ describe("Abilities - SHIELDS DOWN", () => { beforeEach(() => { game = new GameManager(phaserGame); - const moveToUse = Moves.SPLASH; + const moveToUse = MoveId.SPLASH; game.override.battleStyle("single"); - game.override.ability(Abilities.SHIELDS_DOWN); + game.override.ability(AbilityId.SHIELDS_DOWN); game.override.moveset([moveToUse]); - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemyMoveset([MoveId.TACKLE]); }); test("check if fainted pokemon switched to base form on arena reset", async () => { @@ -37,12 +37,12 @@ describe("Abilities - SHIELDS DOWN", () => { coreForm = 7; game.override.startingWave(4); game.override.starterForms({ - [Species.MINIOR]: coreForm, + [SpeciesId.MINIOR]: coreForm, }); - await game.classicMode.startBattle([Species.MAGIKARP, Species.MINIOR]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MINIOR]); - const minior = game.scene.getPlayerParty().find(p => p.species.speciesId === Species.MINIOR)!; + const minior = game.scene.getPlayerParty().find(p => p.species.speciesId === SpeciesId.MINIOR)!; expect(minior).not.toBe(undefined); expect(minior.formIndex).toBe(coreForm); @@ -50,7 +50,7 @@ describe("Abilities - SHIELDS DOWN", () => { minior.status = new Status(StatusEffect.FAINT); expect(minior.isFainted()).toBe(true); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to(TurnEndPhase); game.doSelectModifier(); @@ -60,46 +60,46 @@ describe("Abilities - SHIELDS DOWN", () => { }); test("should ignore non-volatile status moves", async () => { - game.override.enemyMoveset([Moves.SPORE]); + game.override.enemyMoveset([MoveId.SPORE]); - await game.classicMode.startBattle([Species.MINIOR]); - game.move.select(Moves.SPLASH); + await game.classicMode.startBattle([SpeciesId.MINIOR]); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); expect(game.scene.getPlayerPokemon()!.status).toBe(undefined); }); test("should still ignore non-volatile status moves used by a pokemon with mold breaker", async () => { - game.override.enemyAbility(Abilities.MOLD_BREAKER); - game.override.enemyMoveset([Moves.SPORE]); + game.override.enemyAbility(AbilityId.MOLD_BREAKER); + game.override.enemyMoveset([MoveId.SPORE]); - await game.classicMode.startBattle([Species.MINIOR]); + await game.classicMode.startBattle([SpeciesId.MINIOR]); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPORE); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPORE); await game.phaseInterceptor.to(TurnEndPhase); expect(game.scene.getPlayerPokemon()!.status).toBe(undefined); }); test("should ignore non-volatile secondary status effects", async () => { - game.override.enemyMoveset([Moves.NUZZLE]); + game.override.enemyMoveset([MoveId.NUZZLE]); - await game.classicMode.startBattle([Species.MINIOR]); + await game.classicMode.startBattle([SpeciesId.MINIOR]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); expect(game.scene.getPlayerPokemon()!.status).toBe(undefined); }); test("should ignore status moves even through mold breaker", async () => { - game.override.enemyMoveset([Moves.SPORE]); - game.override.enemyAbility(Abilities.MOLD_BREAKER); + game.override.enemyMoveset([MoveId.SPORE]); + game.override.enemyAbility(AbilityId.MOLD_BREAKER); - await game.classicMode.startBattle([Species.MINIOR]); + await game.classicMode.startBattle([SpeciesId.MINIOR]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); @@ -108,45 +108,45 @@ describe("Abilities - SHIELDS DOWN", () => { // toxic spikes currently does not poison flying types when gravity is in effect test.todo("should become poisoned by toxic spikes when grounded", async () => { - game.override.enemyMoveset([Moves.GRAVITY, Moves.TOXIC_SPIKES, Moves.SPLASH]); - game.override.moveset([Moves.GRAVITY, Moves.SPLASH]); + game.override.enemyMoveset([MoveId.GRAVITY, MoveId.TOXIC_SPIKES, MoveId.SPLASH]); + game.override.moveset([MoveId.GRAVITY, MoveId.SPLASH]); - await game.classicMode.startBattle([Species.MAGIKARP, Species.MINIOR]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MINIOR]); // turn 1 - game.move.select(Moves.GRAVITY); - await game.move.selectEnemyMove(Moves.TOXIC_SPIKES); + game.move.select(MoveId.GRAVITY); + await game.move.selectEnemyMove(MoveId.TOXIC_SPIKES); await game.toNextTurn(); // turn 2 game.doSwitchPokemon(1); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); - expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(Species.MINIOR); + expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(SpeciesId.MINIOR); expect(game.scene.getPlayerPokemon()!.species.formIndex).toBe(0); expect(game.scene.getPlayerPokemon()!.status?.effect).toBe(StatusEffect.POISON); }); test("should ignore yawn", async () => { - game.override.enemyMoveset([Moves.YAWN]); + game.override.enemyMoveset([MoveId.YAWN]); - await game.classicMode.startBattle([Species.MAGIKARP, Species.MINIOR]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MINIOR]); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.YAWN); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.YAWN); await game.phaseInterceptor.to(TurnEndPhase); expect(game.scene.getPlayerPokemon()!.findTag(tag => tag.tagType === BattlerTagType.DROWSY)).toBe(undefined); }); test("should not ignore volatile status effects", async () => { - game.override.enemyMoveset([Moves.CONFUSE_RAY]); + game.override.enemyMoveset([MoveId.CONFUSE_RAY]); - await game.classicMode.startBattle([Species.MINIOR]); + await game.classicMode.startBattle([SpeciesId.MINIOR]); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.CONFUSE_RAY); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.CONFUSE_RAY); await game.phaseInterceptor.to(TurnEndPhase); @@ -155,29 +155,29 @@ describe("Abilities - SHIELDS DOWN", () => { // the `NoTransformAbilityAbAttr` attribute is not checked anywhere, so this test cannot pass. test.todo("ditto should not be immune to status after transforming", async () => { - game.override.enemySpecies(Species.DITTO); - game.override.enemyAbility(Abilities.IMPOSTER); - game.override.moveset([Moves.SPLASH, Moves.SPORE]); + game.override.enemySpecies(SpeciesId.DITTO); + game.override.enemyAbility(AbilityId.IMPOSTER); + game.override.moveset([MoveId.SPLASH, MoveId.SPORE]); - await game.classicMode.startBattle([Species.MINIOR]); + await game.classicMode.startBattle([SpeciesId.MINIOR]); - game.move.select(Moves.SPORE); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPORE); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); expect(game.scene.getEnemyPokemon()!.status?.effect).toBe(StatusEffect.SLEEP); }); test("should not prevent minior from receiving the fainted status effect in trainer battles", async () => { - game.override.enemyMoveset([Moves.TACKLE]); - game.override.moveset([Moves.THUNDERBOLT]); + game.override.enemyMoveset([MoveId.TACKLE]); + game.override.moveset([MoveId.THUNDERBOLT]); game.override.startingLevel(100); game.override.startingWave(5); - game.override.enemySpecies(Species.MINIOR); - await game.classicMode.startBattle([Species.REGIELEKI]); + game.override.enemySpecies(SpeciesId.MINIOR); + await game.classicMode.startBattle([SpeciesId.REGIELEKI]); const minior = game.scene.getEnemyPokemon()!; - game.move.select(Moves.THUNDERBOLT); + game.move.select(MoveId.THUNDERBOLT); await game.toNextTurn(); expect(minior.isFainted()).toBe(true); expect(minior.status?.effect).toBe(StatusEffect.FAINT); diff --git a/test/abilities/simple.test.ts b/test/abilities/simple.test.ts index cf3a692a7b0..9df70848f70 100644 --- a/test/abilities/simple.test.ts +++ b/test/abilities/simple.test.ts @@ -1,6 +1,6 @@ -import { Moves } from "#app/enums/moves"; -import { Abilities } from "#enums/abilities"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { AbilityId } from "#enums/ability-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,14 +24,14 @@ describe("Abilities - Simple", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemySpecies(Species.BULBASAUR) - .enemyAbility(Abilities.SIMPLE) - .ability(Abilities.INTIMIDATE) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.BULBASAUR) + .enemyAbility(AbilityId.SIMPLE) + .ability(AbilityId.INTIMIDATE) + .enemyMoveset(MoveId.SPLASH); }); it("should double stat changes when applied", async () => { - await game.classicMode.startBattle([Species.SLOWBRO]); + await game.classicMode.startBattle([SpeciesId.SLOWBRO]); const enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/test/abilities/speed_boost.test.ts b/test/abilities/speed_boost.test.ts index 45ee54ffb07..9890f22ffcd 100644 --- a/test/abilities/speed_boost.test.ts +++ b/test/abilities/speed_boost.test.ts @@ -1,7 +1,7 @@ import { Stat } from "#enums/stat"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -28,75 +28,75 @@ describe("Abilities - Speed Boost", () => { game.override .battleStyle("single") - .enemySpecies(Species.SHUCKLE) - .enemyAbility(Abilities.BALL_FETCH) + .enemySpecies(SpeciesId.SHUCKLE) + .enemyAbility(AbilityId.BALL_FETCH) .enemyLevel(100) - .ability(Abilities.SPEED_BOOST) - .enemyMoveset(Moves.SPLASH) - .moveset([Moves.SPLASH, Moves.U_TURN]); + .ability(AbilityId.SPEED_BOOST) + .enemyMoveset(MoveId.SPLASH) + .moveset([MoveId.SPLASH, MoveId.U_TURN]); }); it("should increase speed by 1 stage at end of turn", async () => { await game.classicMode.startBattle(); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(playerPokemon.getStatStage(Stat.SPD)).toBe(1); }); it("should not trigger this turn if pokemon was switched into combat via attack, but the turn after", async () => { - await game.classicMode.startBattle([Species.SHUCKLE, Species.NINJASK]); + await game.classicMode.startBattle([SpeciesId.SHUCKLE, SpeciesId.NINJASK]); - game.move.select(Moves.U_TURN); + game.move.select(MoveId.U_TURN); game.doSelectPartyPokemon(1); await game.toNextTurn(); const playerPokemon = game.scene.getPlayerPokemon()!; expect(playerPokemon.getStatStage(Stat.SPD)).toBe(0); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(playerPokemon.getStatStage(Stat.SPD)).toBe(1); }); it("checking back to back swtiches", async () => { - await game.classicMode.startBattle([Species.SHUCKLE, Species.NINJASK]); + await game.classicMode.startBattle([SpeciesId.SHUCKLE, SpeciesId.NINJASK]); const [shuckle, ninjask] = game.scene.getPlayerParty(); - game.move.select(Moves.U_TURN); + game.move.select(MoveId.U_TURN); game.doSelectPartyPokemon(1); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!).toBe(ninjask); expect(ninjask.getStatStage(Stat.SPD)).toBe(0); - game.move.select(Moves.U_TURN); + game.move.select(MoveId.U_TURN); game.doSelectPartyPokemon(1); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!).toBe(shuckle); expect(shuckle.getStatStage(Stat.SPD)).toBe(0); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(shuckle.getStatStage(Stat.SPD)).toBe(1); }); it("should not trigger this turn if pokemon was switched into combat via normal switch, but the turn after", async () => { - await game.classicMode.startBattle([Species.SHUCKLE, Species.NINJASK]); + await game.classicMode.startBattle([SpeciesId.SHUCKLE, SpeciesId.NINJASK]); game.doSwitchPokemon(1); await game.toNextTurn(); const playerPokemon = game.scene.getPlayerPokemon()!; expect(playerPokemon.getStatStage(Stat.SPD)).toBe(0); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(playerPokemon.getStatStage(Stat.SPD)).toBe(1); }); it("should not trigger if pokemon fails to escape", async () => { - await game.classicMode.startBattle([Species.SHUCKLE]); + await game.classicMode.startBattle([SpeciesId.SHUCKLE]); const commandPhase = game.scene.getCurrentPhase() as CommandPhase; commandPhase.handleCommand(Command.RUN, 0); @@ -108,7 +108,7 @@ describe("Abilities - Speed Boost", () => { const playerPokemon = game.scene.getPlayerPokemon()!; expect(playerPokemon.getStatStage(Stat.SPD)).toBe(0); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(playerPokemon.getStatStage(Stat.SPD)).toBe(1); }); diff --git a/test/abilities/stakeout.test.ts b/test/abilities/stakeout.test.ts index d986046a7e1..24c8c47df5c 100644 --- a/test/abilities/stakeout.test.ts +++ b/test/abilities/stakeout.test.ts @@ -1,8 +1,8 @@ import { BattlerIndex } from "#app/battle"; import { isBetween } from "#app/utils/common"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -24,34 +24,34 @@ describe("Abilities - Stakeout", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.SURF]) - .ability(Abilities.STAKEOUT) + .moveset([MoveId.SPLASH, MoveId.SURF]) + .ability(AbilityId.STAKEOUT) .battleStyle("single") .disableCrits() .startingLevel(100) .enemyLevel(100) - .enemySpecies(Species.SNORLAX) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset([Moves.SPLASH, Moves.FLIP_TURN]) + .enemySpecies(SpeciesId.SNORLAX) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset([MoveId.SPLASH, MoveId.FLIP_TURN]) .startingWave(5); }); it("should do double damage to a pokemon that switched out", async () => { - await game.classicMode.startBattle([Species.MILOTIC]); + await game.classicMode.startBattle([SpeciesId.MILOTIC]); const [enemy1] = game.scene.getEnemyParty(); - game.move.select(Moves.SURF); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SURF); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); const damage1 = enemy1.getInverseHp(); enemy1.hp = enemy1.getMaxHp(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.forceEnemyToSwitch(); await game.toNextTurn(); - game.move.select(Moves.SURF); + game.move.select(MoveId.SURF); game.forceEnemyToSwitch(); await game.toNextTurn(); @@ -60,22 +60,22 @@ describe("Abilities - Stakeout", () => { }); it("should do double damage to a pokemon that switched out via U-Turn/etc", async () => { - await game.classicMode.startBattle([Species.MILOTIC]); + await game.classicMode.startBattle([SpeciesId.MILOTIC]); const [enemy1] = game.scene.getEnemyParty(); - game.move.select(Moves.SURF); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SURF); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); const damage1 = enemy1.getInverseHp(); enemy1.hp = enemy1.getMaxHp(); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.FLIP_TURN); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.FLIP_TURN); await game.toNextTurn(); - game.move.select(Moves.SURF); - await game.move.selectEnemyMove(Moves.FLIP_TURN); + game.move.select(MoveId.SURF); + await game.move.selectEnemyMove(MoveId.FLIP_TURN); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); diff --git a/test/abilities/stall.test.ts b/test/abilities/stall.test.ts index 6e6fe04a183..78e7d49b48b 100644 --- a/test/abilities/stall.test.ts +++ b/test/abilities/stall.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -25,10 +25,10 @@ describe("Abilities - Stall", () => { game.override .battleStyle("single") .disableCrits() - .enemySpecies(Species.REGIELEKI) - .enemyAbility(Abilities.STALL) - .enemyMoveset(Moves.QUICK_ATTACK) - .moveset([Moves.QUICK_ATTACK, Moves.TACKLE]); + .enemySpecies(SpeciesId.REGIELEKI) + .enemyAbility(AbilityId.STALL) + .enemyMoveset(MoveId.QUICK_ATTACK) + .moveset([MoveId.QUICK_ATTACK, MoveId.TACKLE]); }); /** @@ -38,12 +38,12 @@ describe("Abilities - Stall", () => { **/ it("Pokemon with Stall should move last in its priority bracket regardless of speed", async () => { - await game.classicMode.startBattle([Species.SHUCKLE]); + await game.classicMode.startBattle([SpeciesId.SHUCKLE]); const playerIndex = game.scene.getPlayerPokemon()!.getBattlerIndex(); const enemyIndex = game.scene.getEnemyPokemon()!.getBattlerIndex(); - game.move.select(Moves.QUICK_ATTACK); + game.move.select(MoveId.QUICK_ATTACK); await game.phaseInterceptor.to(TurnStartPhase, false); const phase = game.scene.getCurrentPhase() as TurnStartPhase; @@ -56,12 +56,12 @@ describe("Abilities - Stall", () => { }, 20000); it("Pokemon with Stall will go first if a move that is in a higher priority bracket than the opponent's move is used", async () => { - await game.classicMode.startBattle([Species.SHUCKLE]); + await game.classicMode.startBattle([SpeciesId.SHUCKLE]); const playerIndex = game.scene.getPlayerPokemon()!.getBattlerIndex(); const enemyIndex = game.scene.getEnemyPokemon()!.getBattlerIndex(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnStartPhase, false); const phase = game.scene.getCurrentPhase() as TurnStartPhase; @@ -74,13 +74,13 @@ describe("Abilities - Stall", () => { }, 20000); it("If both Pokemon have stall and use the same move, speed is used to determine who goes first.", async () => { - game.override.ability(Abilities.STALL); - await game.classicMode.startBattle([Species.SHUCKLE]); + game.override.ability(AbilityId.STALL); + await game.classicMode.startBattle([SpeciesId.SHUCKLE]); const playerIndex = game.scene.getPlayerPokemon()!.getBattlerIndex(); const enemyIndex = game.scene.getEnemyPokemon()!.getBattlerIndex(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnStartPhase, false); const phase = game.scene.getCurrentPhase() as TurnStartPhase; diff --git a/test/abilities/steely_spirit.test.ts b/test/abilities/steely_spirit.test.ts index 09805d61e14..481e037fb4b 100644 --- a/test/abilities/steely_spirit.test.ts +++ b/test/abilities/steely_spirit.test.ts @@ -1,8 +1,8 @@ import { allAbilities } from "#app/data/data-lists"; import { allMoves } from "#app/data/data-lists"; -import { Abilities } from "#app/enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -11,7 +11,7 @@ describe("Abilities - Steely Spirit", () => { let phaserGame: Phaser.Game; let game: GameManager; const steelySpiritMultiplier = 1.5; - const moveToCheck = Moves.IRON_HEAD; + const moveToCheck = MoveId.IRON_HEAD; let ironHeadPower: number; @@ -29,38 +29,38 @@ describe("Abilities - Steely Spirit", () => { ironHeadPower = allMoves[moveToCheck].power; game = new GameManager(phaserGame); game.override.battleStyle("double"); - game.override.enemySpecies(Species.SHUCKLE); - game.override.enemyAbility(Abilities.BALL_FETCH); - game.override.moveset([Moves.IRON_HEAD, Moves.SPLASH]); - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemySpecies(SpeciesId.SHUCKLE); + game.override.enemyAbility(AbilityId.BALL_FETCH); + game.override.moveset([MoveId.IRON_HEAD, MoveId.SPLASH]); + game.override.enemyMoveset(MoveId.SPLASH); vi.spyOn(allMoves[moveToCheck], "calculateBattlePower"); }); it("increases Steel-type moves' power used by the user and its allies by 50%", async () => { - await game.classicMode.startBattle([Species.PIKACHU, Species.SHUCKLE]); + await game.classicMode.startBattle([SpeciesId.PIKACHU, SpeciesId.SHUCKLE]); const boostSource = game.scene.getPlayerField()[1]; const enemyToCheck = game.scene.getEnemyPokemon()!; - vi.spyOn(boostSource, "getAbility").mockReturnValue(allAbilities[Abilities.STEELY_SPIRIT]); + vi.spyOn(boostSource, "getAbility").mockReturnValue(allAbilities[AbilityId.STEELY_SPIRIT]); - expect(boostSource.hasAbility(Abilities.STEELY_SPIRIT)).toBe(true); + expect(boostSource.hasAbility(AbilityId.STEELY_SPIRIT)).toBe(true); game.move.select(moveToCheck, 0, enemyToCheck.getBattlerIndex()); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("MoveEffectPhase"); expect(allMoves[moveToCheck].calculateBattlePower).toHaveReturnedWith(ironHeadPower * steelySpiritMultiplier); }); it("stacks if multiple users with this ability are on the field.", async () => { - await game.classicMode.startBattle([Species.PIKACHU, Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU, SpeciesId.PIKACHU]); const enemyToCheck = game.scene.getEnemyPokemon()!; game.scene.getPlayerField().forEach(p => { - vi.spyOn(p, "getAbility").mockReturnValue(allAbilities[Abilities.STEELY_SPIRIT]); + vi.spyOn(p, "getAbility").mockReturnValue(allAbilities[AbilityId.STEELY_SPIRIT]); }); - expect(game.scene.getPlayerField().every(p => p.hasAbility(Abilities.STEELY_SPIRIT))).toBe(true); + expect(game.scene.getPlayerField().every(p => p.hasAbility(AbilityId.STEELY_SPIRIT))).toBe(true); game.move.select(moveToCheck, 0, enemyToCheck.getBattlerIndex()); game.move.select(moveToCheck, 1, enemyToCheck.getBattlerIndex()); @@ -72,34 +72,34 @@ describe("Abilities - Steely Spirit", () => { }); it("does not take effect when suppressed", async () => { - await game.classicMode.startBattle([Species.PIKACHU, Species.SHUCKLE]); + await game.classicMode.startBattle([SpeciesId.PIKACHU, SpeciesId.SHUCKLE]); const boostSource = game.scene.getPlayerField()[1]; const enemyToCheck = game.scene.getEnemyPokemon()!; - vi.spyOn(boostSource, "getAbility").mockReturnValue(allAbilities[Abilities.STEELY_SPIRIT]); - expect(boostSource.hasAbility(Abilities.STEELY_SPIRIT)).toBe(true); + vi.spyOn(boostSource, "getAbility").mockReturnValue(allAbilities[AbilityId.STEELY_SPIRIT]); + expect(boostSource.hasAbility(AbilityId.STEELY_SPIRIT)).toBe(true); boostSource.summonData.abilitySuppressed = true; - expect(boostSource.hasAbility(Abilities.STEELY_SPIRIT)).toBe(false); + expect(boostSource.hasAbility(AbilityId.STEELY_SPIRIT)).toBe(false); expect(boostSource.summonData.abilitySuppressed).toBe(true); game.move.select(moveToCheck, 0, enemyToCheck.getBattlerIndex()); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("MoveEffectPhase"); expect(allMoves[moveToCheck].calculateBattlePower).toHaveReturnedWith(ironHeadPower); }); it("affects variable-type moves if their resolved type is Steel", async () => { - game.override.ability(Abilities.STEELY_SPIRIT).moveset([Moves.REVELATION_DANCE]); + game.override.ability(AbilityId.STEELY_SPIRIT).moveset([MoveId.REVELATION_DANCE]); - const revelationDance = allMoves[Moves.REVELATION_DANCE]; + const revelationDance = allMoves[MoveId.REVELATION_DANCE]; vi.spyOn(revelationDance, "calculateBattlePower"); - await game.classicMode.startBattle([Species.KLINKLANG]); + await game.classicMode.startBattle([SpeciesId.KLINKLANG]); - game.move.select(Moves.REVELATION_DANCE); + game.move.select(MoveId.REVELATION_DANCE); await game.phaseInterceptor.to("MoveEffectPhase"); diff --git a/test/abilities/storm_drain.test.ts b/test/abilities/storm_drain.test.ts index 0cbad796ad8..36a2112edda 100644 --- a/test/abilities/storm_drain.test.ts +++ b/test/abilities/storm_drain.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,55 +24,55 @@ describe("Abilities - Storm Drain", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.WATER_GUN]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.SPLASH, MoveId.WATER_GUN]) + .ability(AbilityId.BALL_FETCH) .battleStyle("double") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should redirect water type moves", async () => { - await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MAGIKARP]); const enemy1 = game.scene.getEnemyField()[0]; const enemy2 = game.scene.getEnemyField()[1]; - enemy2.summonData.ability = Abilities.STORM_DRAIN; + enemy2.summonData.ability = AbilityId.STORM_DRAIN; - game.move.select(Moves.WATER_GUN, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); + game.move.select(MoveId.WATER_GUN, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase"); expect(enemy1.isFullHp()).toBe(true); }); it("should not redirect non-water type moves", async () => { - game.override.moveset([Moves.SPLASH, Moves.AERIAL_ACE]); - await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); + game.override.moveset([MoveId.SPLASH, MoveId.AERIAL_ACE]); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MAGIKARP]); const enemy1 = game.scene.getEnemyField()[0]; const enemy2 = game.scene.getEnemyField()[1]; - enemy2.summonData.ability = Abilities.STORM_DRAIN; + enemy2.summonData.ability = AbilityId.STORM_DRAIN; - game.move.select(Moves.AERIAL_ACE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); + game.move.select(MoveId.AERIAL_ACE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase"); expect(enemy1.isFullHp()).toBe(false); }); it("should boost the user's spatk without damaging", async () => { - await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MAGIKARP]); const enemy2 = game.scene.getEnemyField()[1]; - enemy2.summonData.ability = Abilities.STORM_DRAIN; + enemy2.summonData.ability = AbilityId.STORM_DRAIN; - game.move.select(Moves.WATER_GUN, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); + game.move.select(MoveId.WATER_GUN, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase"); expect(enemy2.isFullHp()).toBe(true); @@ -80,32 +80,32 @@ describe("Abilities - Storm Drain", () => { }); it("should not redirect moves changed from water type via ability", async () => { - game.override.ability(Abilities.NORMALIZE); - await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); + game.override.ability(AbilityId.NORMALIZE); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MAGIKARP]); const enemy1 = game.scene.getEnemyField()[0]; const enemy2 = game.scene.getEnemyField()[1]; - enemy2.summonData.ability = Abilities.STORM_DRAIN; + enemy2.summonData.ability = AbilityId.STORM_DRAIN; - game.move.select(Moves.WATER_GUN, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); + game.move.select(MoveId.WATER_GUN, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase"); expect(enemy1.isFullHp()).toBe(false); }); it("should redirect moves changed to water type via ability", async () => { - game.override.ability(Abilities.LIQUID_VOICE).moveset(Moves.PSYCHIC_NOISE); - await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); + game.override.ability(AbilityId.LIQUID_VOICE).moveset(MoveId.PSYCHIC_NOISE); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MAGIKARP]); const enemy1 = game.scene.getEnemyField()[0]; const enemy2 = game.scene.getEnemyField()[1]; - enemy2.summonData.ability = Abilities.STORM_DRAIN; + enemy2.summonData.ability = AbilityId.STORM_DRAIN; - game.move.select(Moves.PSYCHIC_NOISE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); + game.move.select(MoveId.PSYCHIC_NOISE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase"); expect(enemy1.isFullHp()).toBe(true); diff --git a/test/abilities/sturdy.test.ts b/test/abilities/sturdy.test.ts index dbdd1b4570e..a50e2075fea 100644 --- a/test/abilities/sturdy.test.ts +++ b/test/abilities/sturdy.test.ts @@ -1,9 +1,9 @@ import type { EnemyPokemon } from "#app/field/pokemon"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; @@ -26,18 +26,18 @@ describe("Abilities - Sturdy", () => { game = new GameManager(phaserGame); game.override.battleStyle("single"); - game.override.starterSpecies(Species.LUCARIO); + game.override.starterSpecies(SpeciesId.LUCARIO); game.override.startingLevel(100); - game.override.moveset([Moves.CLOSE_COMBAT, Moves.FISSURE]); + game.override.moveset([MoveId.CLOSE_COMBAT, MoveId.FISSURE]); - game.override.enemySpecies(Species.ARON); + game.override.enemySpecies(SpeciesId.ARON); game.override.enemyLevel(5); - game.override.enemyAbility(Abilities.STURDY); + game.override.enemyAbility(AbilityId.STURDY); }); test("Sturdy activates when user is at full HP", async () => { await game.classicMode.startBattle(); - game.move.select(Moves.CLOSE_COMBAT); + game.move.select(MoveId.CLOSE_COMBAT); await game.phaseInterceptor.to(MoveEndPhase); expect(game.scene.getEnemyParty()[0].hp).toBe(1); }); @@ -48,7 +48,7 @@ describe("Abilities - Sturdy", () => { const enemyPokemon: EnemyPokemon = game.scene.getEnemyParty()[0]; enemyPokemon.hp = enemyPokemon.getMaxHp() - 1; - game.move.select(Moves.CLOSE_COMBAT); + game.move.select(MoveId.CLOSE_COMBAT); await game.phaseInterceptor.to(DamageAnimPhase); expect(enemyPokemon.hp).toBe(0); @@ -57,18 +57,18 @@ describe("Abilities - Sturdy", () => { test("Sturdy pokemon should be immune to OHKO moves", async () => { await game.classicMode.startBattle(); - game.move.select(Moves.FISSURE); + game.move.select(MoveId.FISSURE); await game.phaseInterceptor.to(MoveEndPhase); const enemyPokemon: EnemyPokemon = game.scene.getEnemyParty()[0]; expect(enemyPokemon.isFullHp()).toBe(true); }); - test("Sturdy is ignored by pokemon with `Abilities.MOLD_BREAKER`", async () => { - game.override.ability(Abilities.MOLD_BREAKER); + test("Sturdy is ignored by pokemon with `AbilityId.MOLD_BREAKER`", async () => { + game.override.ability(AbilityId.MOLD_BREAKER); await game.classicMode.startBattle(); - game.move.select(Moves.CLOSE_COMBAT); + game.move.select(MoveId.CLOSE_COMBAT); await game.phaseInterceptor.to(DamageAnimPhase); const enemyPokemon: EnemyPokemon = game.scene.getEnemyParty()[0]; diff --git a/test/abilities/super_luck.test.ts b/test/abilities/super_luck.test.ts index fbcbd02bdd2..e94a4cf21f0 100644 --- a/test/abilities/super_luck.test.ts +++ b/test/abilities/super_luck.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -22,19 +22,19 @@ describe("Abilities - Super Luck", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.TACKLE]) - .ability(Abilities.SUPER_LUCK) + .moveset([MoveId.TACKLE]) + .ability(AbilityId.SUPER_LUCK) .battleStyle("single") - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should increase the crit stage of a user by 1", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const enemy = game.scene.getEnemyPokemon()!; const fn = vi.spyOn(enemy, "getCritStage"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("BerryPhase"); expect(fn).toHaveReturnedWith(1); fn.mockRestore(); diff --git a/test/abilities/supreme_overlord.test.ts b/test/abilities/supreme_overlord.test.ts index 4c0be80daea..6c2ca2d3677 100644 --- a/test/abilities/supreme_overlord.test.ts +++ b/test/abilities/supreme_overlord.test.ts @@ -1,7 +1,7 @@ -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#enums/move-id"; import type Move from "#app/data/moves/move"; -import { Abilities } from "#enums/abilities"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { SpeciesId } from "#enums/species-id"; import { BattlerIndex } from "#app/battle"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import GameManager from "#test/testUtils/gameManager"; @@ -27,36 +27,36 @@ describe("Abilities - Supreme Overlord", () => { }); beforeEach(() => { - move = allMoves[Moves.TACKLE]; + move = allMoves[MoveId.TACKLE]; basePower = move.power; game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemySpecies(Species.MAGIKARP) + .enemySpecies(SpeciesId.MAGIKARP) .enemyLevel(100) .startingLevel(1) - .enemyAbility(Abilities.BALL_FETCH) - .ability(Abilities.SUPREME_OVERLORD) - .enemyMoveset([Moves.SPLASH]) - .moveset([Moves.TACKLE, Moves.EXPLOSION, Moves.LUNAR_DANCE]); + .enemyAbility(AbilityId.BALL_FETCH) + .ability(AbilityId.SUPREME_OVERLORD) + .enemyMoveset([MoveId.SPLASH]) + .moveset([MoveId.TACKLE, MoveId.EXPLOSION, MoveId.LUNAR_DANCE]); vi.spyOn(move, "calculateBattlePower"); }); it("should increase Power by 20% if 2 Pokemon are fainted in the party", async () => { - await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER, SpeciesId.SQUIRTLE]); - game.move.select(Moves.EXPLOSION); + game.move.select(MoveId.EXPLOSION); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); game.doSelectPartyPokemon(1); await game.toNextTurn(); - game.move.select(Moves.EXPLOSION); + game.move.select(MoveId.EXPLOSION); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); game.doSelectPartyPokemon(2); await game.toNextTurn(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -64,12 +64,12 @@ describe("Abilities - Supreme Overlord", () => { }); it("should increase Power by 30% if an ally fainted twice and another one once", async () => { - await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER, SpeciesId.SQUIRTLE]); /** * Bulbasur faints once */ - game.move.select(Moves.EXPLOSION); + game.move.select(MoveId.EXPLOSION); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -78,7 +78,7 @@ describe("Abilities - Supreme Overlord", () => { * Charmander faints once */ game.doRevivePokemon(1); - game.move.select(Moves.EXPLOSION); + game.move.select(MoveId.EXPLOSION); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -86,12 +86,12 @@ describe("Abilities - Supreme Overlord", () => { /** * Bulbasur faints twice */ - game.move.select(Moves.EXPLOSION); + game.move.select(MoveId.EXPLOSION); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); game.doSelectPartyPokemon(2); await game.toNextTurn(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -99,14 +99,14 @@ describe("Abilities - Supreme Overlord", () => { }); it("should maintain its power during next battle if it is within the same arena encounter", async () => { - game.override.enemySpecies(Species.MAGIKARP).startingWave(1).enemyLevel(1).startingLevel(100); + game.override.enemySpecies(SpeciesId.MAGIKARP).startingWave(1).enemyLevel(1).startingLevel(100); - await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER, SpeciesId.SQUIRTLE]); /** * The first Pokemon faints and another Pokemon in the party is selected. */ - game.move.select(Moves.LUNAR_DANCE); + game.move.select(MoveId.LUNAR_DANCE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -114,11 +114,11 @@ describe("Abilities - Supreme Overlord", () => { /** * Enemy Pokemon faints and new wave is entered. */ - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextWave(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -126,20 +126,20 @@ describe("Abilities - Supreme Overlord", () => { }); it("should reset playerFaints count if we enter new trainer battle", async () => { - game.override.enemySpecies(Species.MAGIKARP).startingWave(4).enemyLevel(1).startingLevel(100); + game.override.enemySpecies(SpeciesId.MAGIKARP).startingWave(4).enemyLevel(1).startingLevel(100); - await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER, SpeciesId.SQUIRTLE]); - game.move.select(Moves.LUNAR_DANCE); + game.move.select(MoveId.LUNAR_DANCE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); game.doSelectPartyPokemon(1); await game.toNextTurn(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextWave(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase", false); @@ -147,20 +147,20 @@ describe("Abilities - Supreme Overlord", () => { }); it("should reset playerFaints count if we enter new biome", async () => { - game.override.enemySpecies(Species.MAGIKARP).startingWave(10).enemyLevel(1).startingLevel(100); + game.override.enemySpecies(SpeciesId.MAGIKARP).startingWave(10).enemyLevel(1).startingLevel(100); - await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER, SpeciesId.SQUIRTLE]); - game.move.select(Moves.LUNAR_DANCE); + game.move.select(MoveId.LUNAR_DANCE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); game.doSelectPartyPokemon(1); await game.toNextTurn(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextWave(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase", false); diff --git a/test/abilities/sweet_veil.test.ts b/test/abilities/sweet_veil.test.ts index e294938acd4..131feaf7f56 100644 --- a/test/abilities/sweet_veil.test.ts +++ b/test/abilities/sweet_veil.test.ts @@ -1,10 +1,10 @@ import { BattlerIndex } from "#app/battle"; -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { CommandPhase } from "#app/phases/command-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -27,17 +27,17 @@ describe("Abilities - Sweet Veil", () => { game = new GameManager(phaserGame); game.override .battleStyle("double") - .moveset([Moves.SPLASH, Moves.REST, Moves.YAWN]) - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.POWDER); + .moveset([MoveId.SPLASH, MoveId.REST, MoveId.YAWN]) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.POWDER); }); it("prevents the user and its allies from falling asleep", async () => { - await game.classicMode.startBattle([Species.SWIRLIX, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.SWIRLIX, SpeciesId.MAGIKARP]); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(TurnEndPhase); @@ -45,11 +45,11 @@ describe("Abilities - Sweet Veil", () => { }); it("causes Rest to fail when used by the user or its allies", async () => { - game.override.enemyMoveset(Moves.SPLASH); - await game.classicMode.startBattle([Species.SWIRLIX, Species.MAGIKARP]); + game.override.enemyMoveset(MoveId.SPLASH); + await game.classicMode.startBattle([SpeciesId.SWIRLIX, SpeciesId.MAGIKARP]); - game.move.select(Moves.SPLASH); - game.move.select(Moves.REST, 1); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.REST, 1); await game.phaseInterceptor.to(TurnEndPhase); @@ -57,11 +57,11 @@ describe("Abilities - Sweet Veil", () => { }); it("causes Yawn to fail if used on the user or its allies", async () => { - game.override.enemyMoveset(Moves.YAWN); - await game.classicMode.startBattle([Species.SWIRLIX, Species.MAGIKARP]); + game.override.enemyMoveset(MoveId.YAWN); + await game.classicMode.startBattle([SpeciesId.SWIRLIX, SpeciesId.MAGIKARP]); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(TurnEndPhase); @@ -69,22 +69,22 @@ describe("Abilities - Sweet Veil", () => { }); it("prevents the user and its allies already drowsy due to Yawn from falling asleep.", async () => { - game.override.enemySpecies(Species.PIKACHU); + game.override.enemySpecies(SpeciesId.PIKACHU); game.override.enemyLevel(5); game.override.startingLevel(5); - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); - await game.classicMode.startBattle([Species.SHUCKLE, Species.SHUCKLE, Species.SWIRLIX]); + await game.classicMode.startBattle([SpeciesId.SHUCKLE, SpeciesId.SHUCKLE, SpeciesId.SWIRLIX]); - game.move.select(Moves.SPLASH); - game.move.select(Moves.YAWN, 1, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.YAWN, 1, BattlerIndex.PLAYER); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerField().some(p => !!p.getTag(BattlerTagType.DROWSY))).toBe(true); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSwitchPokemon(2); expect(game.scene.getPlayerField().every(p => p.status?.effect)).toBe(false); diff --git a/test/abilities/synchronize.test.ts b/test/abilities/synchronize.test.ts index e781d55fe10..030509ac4e6 100644 --- a/test/abilities/synchronize.test.ts +++ b/test/abilities/synchronize.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -26,16 +26,16 @@ describe("Abilities - Synchronize", () => { game.override .battleStyle("single") .startingLevel(100) - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.SYNCHRONIZE) - .moveset([Moves.SPLASH, Moves.THUNDER_WAVE, Moves.SPORE, Moves.PSYCHO_SHIFT]) - .ability(Abilities.NO_GUARD); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.SYNCHRONIZE) + .moveset([MoveId.SPLASH, MoveId.THUNDER_WAVE, MoveId.SPORE, MoveId.PSYCHO_SHIFT]) + .ability(AbilityId.NO_GUARD); }); it("does not trigger when no status is applied by opponent Pokemon", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); @@ -43,9 +43,9 @@ describe("Abilities - Synchronize", () => { }); it("sets the status of the source pokemon to Paralysis when paralyzed by it", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.THUNDER_WAVE); + game.move.select(MoveId.THUNDER_WAVE); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.status?.effect).toBe(StatusEffect.PARALYSIS); @@ -56,7 +56,7 @@ describe("Abilities - Synchronize", () => { it("does not trigger on Sleep", async () => { await game.classicMode.startBattle(); - game.move.select(Moves.SPORE); + game.move.select(MoveId.SPORE); await game.phaseInterceptor.to("BerryPhase"); @@ -66,11 +66,11 @@ describe("Abilities - Synchronize", () => { }); it("does not trigger when Pokemon is statused by Toxic Spikes", async () => { - game.override.ability(Abilities.SYNCHRONIZE).enemyAbility(Abilities.BALL_FETCH).enemyMoveset(Moves.TOXIC_SPIKES); + game.override.ability(AbilityId.SYNCHRONIZE).enemyAbility(AbilityId.BALL_FETCH).enemyMoveset(MoveId.TOXIC_SPIKES); - await game.classicMode.startBattle([Species.FEEBAS, Species.MILOTIC]); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MILOTIC]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); game.doSwitchPokemon(1); @@ -82,9 +82,9 @@ describe("Abilities - Synchronize", () => { }); it("shows ability even if it fails to set the status of the opponent Pokemon", async () => { - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); - game.move.select(Moves.THUNDER_WAVE); + game.move.select(MoveId.THUNDER_WAVE); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.status?.effect).toBeUndefined(); diff --git a/test/abilities/tera_shell.test.ts b/test/abilities/tera_shell.test.ts index fdbcb14947d..5889115ee95 100644 --- a/test/abilities/tera_shell.test.ts +++ b/test/abilities/tera_shell.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; -import { Abilities } from "#app/enums/abilities"; -import { Moves } from "#app/enums/moves"; -import { Species } from "#app/enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -24,71 +24,71 @@ describe("Abilities - Tera Shell", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .ability(Abilities.TERA_SHELL) - .moveset([Moves.SPLASH]) - .enemySpecies(Species.SNORLAX) - .enemyAbility(Abilities.INSOMNIA) - .enemyMoveset([Moves.MACH_PUNCH]) + .ability(AbilityId.TERA_SHELL) + .moveset([MoveId.SPLASH]) + .enemySpecies(SpeciesId.SNORLAX) + .enemyAbility(AbilityId.INSOMNIA) + .enemyMoveset([MoveId.MACH_PUNCH]) .startingLevel(100) .enemyLevel(100); }); it("should change the effectiveness of non-resisted attacks when the source is at full HP", async () => { - await game.classicMode.startBattle([Species.SNORLAX]); + await game.classicMode.startBattle([SpeciesId.SNORLAX]); const playerPokemon = game.scene.getPlayerPokemon()!; vi.spyOn(playerPokemon, "getMoveEffectiveness"); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("MoveEndPhase"); expect(playerPokemon.getMoveEffectiveness).toHaveLastReturnedWith(0.5); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("MoveEndPhase"); expect(playerPokemon.getMoveEffectiveness).toHaveLastReturnedWith(2); }); it("should not override type immunities", async () => { - game.override.enemyMoveset([Moves.SHADOW_SNEAK]); + game.override.enemyMoveset([MoveId.SHADOW_SNEAK]); - await game.classicMode.startBattle([Species.SNORLAX]); + await game.classicMode.startBattle([SpeciesId.SNORLAX]); const playerPokemon = game.scene.getPlayerPokemon()!; vi.spyOn(playerPokemon, "getMoveEffectiveness"); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("MoveEndPhase"); expect(playerPokemon.getMoveEffectiveness).toHaveLastReturnedWith(0); }); it("should not override type multipliers less than 0.5x", async () => { - game.override.enemyMoveset([Moves.QUICK_ATTACK]); + game.override.enemyMoveset([MoveId.QUICK_ATTACK]); - await game.classicMode.startBattle([Species.AGGRON]); + await game.classicMode.startBattle([SpeciesId.AGGRON]); const playerPokemon = game.scene.getPlayerPokemon()!; vi.spyOn(playerPokemon, "getMoveEffectiveness"); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("MoveEndPhase"); expect(playerPokemon.getMoveEffectiveness).toHaveLastReturnedWith(0.25); }); it("should not affect the effectiveness of fixed-damage moves", async () => { - game.override.enemyMoveset([Moves.DRAGON_RAGE]); + game.override.enemyMoveset([MoveId.DRAGON_RAGE]); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const playerPokemon = game.scene.getPlayerPokemon()!; const spy = vi.spyOn(playerPokemon, "getMoveEffectiveness"); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase", false); expect(spy).toHaveLastReturnedWith(1); @@ -98,14 +98,14 @@ describe("Abilities - Tera Shell", () => { }); it("should change the effectiveness of all strikes of a multi-strike move", async () => { - game.override.enemyMoveset([Moves.DOUBLE_HIT]); + game.override.enemyMoveset([MoveId.DOUBLE_HIT]); - await game.classicMode.startBattle([Species.SNORLAX]); + await game.classicMode.startBattle([SpeciesId.SNORLAX]); const playerPokemon = game.scene.getPlayerPokemon()!; const spy = vi.spyOn(playerPokemon, "getMoveEffectiveness"); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.move.forceHit(); diff --git a/test/abilities/thermal_exchange.test.ts b/test/abilities/thermal_exchange.test.ts index c33b296d5ae..f27e6da1d3b 100644 --- a/test/abilities/thermal_exchange.test.ts +++ b/test/abilities/thermal_exchange.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,27 +23,27 @@ describe("Abilities - Thermal Exchange", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should remove burn when gained", async () => { game.override - .ability(Abilities.THERMAL_EXCHANGE) - .enemyAbility(Abilities.BALL_FETCH) - .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH); - await game.classicMode.startBattle([Species.FEEBAS]); + .ability(AbilityId.THERMAL_EXCHANGE) + .enemyAbility(AbilityId.BALL_FETCH) + .moveset(MoveId.SKILL_SWAP) + .enemyMoveset(MoveId.SPLASH); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.trySetStatus(StatusEffect.BURN); expect(enemy?.status?.effect).toBe(StatusEffect.BURN); - game.move.select(Moves.SKILL_SWAP); + game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); expect(enemy?.status).toBeNull(); diff --git a/test/abilities/trace.test.ts b/test/abilities/trace.test.ts index 7ec8d62ab51..9bfd2f021c8 100644 --- a/test/abilities/trace.test.ts +++ b/test/abilities/trace.test.ts @@ -1,7 +1,7 @@ import { Stat } from "#app/enums/stat"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -23,29 +23,29 @@ describe("Abilities - Trace", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) - .ability(Abilities.TRACE) + .moveset([MoveId.SPLASH]) + .ability(AbilityId.TRACE) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should copy the opponent's ability", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(Abilities.BALL_FETCH); + expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(AbilityId.BALL_FETCH); }); it("should activate a copied post-summon ability", async () => { - game.override.enemyAbility(Abilities.INTIMIDATE); - await game.classicMode.startBattle([Species.FEEBAS]); + game.override.enemyAbility(AbilityId.INTIMIDATE); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(-1); diff --git a/test/abilities/unburden.test.ts b/test/abilities/unburden.test.ts index ea4f84545aa..b1b10c378a3 100644 --- a/test/abilities/unburden.test.ts +++ b/test/abilities/unburden.test.ts @@ -4,11 +4,11 @@ import { StealHeldItemChanceAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; import type Pokemon from "#app/field/pokemon"; import type { ContactHeldItemTransferChanceModifier } from "#app/modifier/modifier"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; import { BerryType } from "#enums/berry-type"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -44,36 +44,36 @@ describe("Abilities - Unburden", () => { game.override .battleStyle("single") .startingLevel(1) - .ability(Abilities.UNBURDEN) - .moveset([Moves.SPLASH, Moves.KNOCK_OFF, Moves.PLUCK, Moves.FALSE_SWIPE]) + .ability(AbilityId.UNBURDEN) + .moveset([MoveId.SPLASH, MoveId.KNOCK_OFF, MoveId.PLUCK, MoveId.FALSE_SWIPE]) .startingHeldItems([ { name: "BERRY", count: 1, type: BerryType.SITRUS }, { name: "BERRY", count: 2, type: BerryType.APICOT }, { name: "BERRY", count: 2, type: BerryType.LUM }, ]) - .enemySpecies(Species.NINJASK) + .enemySpecies(SpeciesId.NINJASK) .enemyLevel(100) - .enemyMoveset(Moves.SPLASH) - .enemyAbility(Abilities.UNBURDEN) - .enemyPassiveAbility(Abilities.NO_GUARD) + .enemyMoveset(MoveId.SPLASH) + .enemyAbility(AbilityId.UNBURDEN) + .enemyPassiveAbility(AbilityId.NO_GUARD) .enemyHeldItems([ { name: "BERRY", type: BerryType.SITRUS, count: 1 }, { name: "BERRY", type: BerryType.LUM, count: 1 }, ]); // For the various tests that use Thief, give it a 100% steal rate - vi.spyOn(allMoves[Moves.THIEF], "attrs", "get").mockReturnValue([new StealHeldItemChanceAttr(1.0)]); + vi.spyOn(allMoves[MoveId.THIEF], "attrs", "get").mockReturnValue([new StealHeldItemChanceAttr(1.0)]); }); it("should activate when a berry is eaten", async () => { - game.override.enemyMoveset(Moves.FALSE_SWIPE); - await game.classicMode.startBattle([Species.TREECKO]); + game.override.enemyMoveset(MoveId.FALSE_SWIPE); + await game.classicMode.startBattle([SpeciesId.TREECKO]); const playerPokemon = game.scene.getPlayerPokemon()!; const playerHeldItems = getHeldItemCount(playerPokemon); const initialPlayerSpeed = playerPokemon.getStat(Stat.SPD); // Player gets hit by False Swipe and eats its own Sitrus Berry - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(getHeldItemCount(playerPokemon)).toBeLessThan(playerHeldItems); @@ -81,15 +81,15 @@ describe("Abilities - Unburden", () => { }); it("should activate when a berry is eaten, even if Berry Pouch preserves the berry", async () => { - game.override.enemyMoveset(Moves.FALSE_SWIPE).startingModifier([{ name: "BERRY_POUCH", count: 5850 }]); - await game.classicMode.startBattle([Species.TREECKO]); + game.override.enemyMoveset(MoveId.FALSE_SWIPE).startingModifier([{ name: "BERRY_POUCH", count: 5850 }]); + await game.classicMode.startBattle([SpeciesId.TREECKO]); const playerPokemon = game.scene.getPlayerPokemon()!; const playerHeldItems = getHeldItemCount(playerPokemon); const initialPlayerSpeed = playerPokemon.getStat(Stat.SPD); // Player gets hit by False Swipe and eats its own Sitrus Berry - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(getHeldItemCount(playerPokemon)).toBe(playerHeldItems); @@ -97,7 +97,7 @@ describe("Abilities - Unburden", () => { }); it("should activate for the target, and not the stealer, when a berry is stolen", async () => { - await game.classicMode.startBattle([Species.TREECKO]); + await game.classicMode.startBattle([SpeciesId.TREECKO]); const playerPokemon = game.scene.getPlayerPokemon()!; const initialPlayerSpeed = playerPokemon.getStat(Stat.SPD); @@ -106,7 +106,7 @@ describe("Abilities - Unburden", () => { const initialEnemySpeed = enemyPokemon.getStat(Stat.SPD); // Player uses Pluck and eats the opponent's berry - game.move.select(Moves.PLUCK); + game.move.select(MoveId.PLUCK); await game.toNextTurn(); expect(getHeldItemCount(enemyPokemon)).toBeLessThan(enemyHeldItemCt); @@ -115,14 +115,14 @@ describe("Abilities - Unburden", () => { }); it("should activate when an item is knocked off", async () => { - await game.classicMode.startBattle([Species.TREECKO]); + await game.classicMode.startBattle([SpeciesId.TREECKO]); const enemyPokemon = game.scene.getEnemyPokemon()!; const enemyHeldItemCt = getHeldItemCount(enemyPokemon); const initialEnemySpeed = enemyPokemon.getStat(Stat.SPD); // Player uses Knock Off and removes the opponent's item - game.move.select(Moves.KNOCK_OFF); + game.move.select(MoveId.KNOCK_OFF); await game.toNextTurn(); expect(getHeldItemCount(enemyPokemon)).toBeLessThan(enemyHeldItemCt); @@ -130,15 +130,15 @@ describe("Abilities - Unburden", () => { }); it("should activate when an item is stolen via attacking ability", async () => { - game.override.ability(Abilities.MAGICIAN).startingHeldItems([]); // Remove player's full stacks of held items so it can steal opponent's held items - await game.classicMode.startBattle([Species.TREECKO]); + game.override.ability(AbilityId.MAGICIAN).startingHeldItems([]); // Remove player's full stacks of held items so it can steal opponent's held items + await game.classicMode.startBattle([SpeciesId.TREECKO]); const enemyPokemon = game.scene.getEnemyPokemon()!; const enemyHeldItemCt = getHeldItemCount(enemyPokemon); const initialEnemySpeed = enemyPokemon.getStat(Stat.SPD); // Player steals the opponent's item via ability Magician - game.move.select(Moves.FALSE_SWIPE); + game.move.select(MoveId.FALSE_SWIPE); await game.toNextTurn(); expect(getHeldItemCount(enemyPokemon)).toBeLessThan(enemyHeldItemCt); @@ -146,15 +146,15 @@ describe("Abilities - Unburden", () => { }); it("should activate when an item is stolen via defending ability", async () => { - game.override.enemyAbility(Abilities.PICKPOCKET).enemyHeldItems([]); // Remove opponent's full stacks of held items so it can steal player's held items - await game.classicMode.startBattle([Species.TREECKO]); + game.override.enemyAbility(AbilityId.PICKPOCKET).enemyHeldItems([]); // Remove opponent's full stacks of held items so it can steal player's held items + await game.classicMode.startBattle([SpeciesId.TREECKO]); const playerPokemon = game.scene.getPlayerPokemon()!; const playerHeldItems = getHeldItemCount(playerPokemon); const initialPlayerSpeed = playerPokemon.getStat(Stat.SPD); // Player's item gets stolen via ability Pickpocket - game.move.select(Moves.FALSE_SWIPE); + game.move.select(MoveId.FALSE_SWIPE); await game.toNextTurn(); expect(getHeldItemCount(playerPokemon)).toBeLessThan(playerHeldItems); @@ -162,15 +162,15 @@ describe("Abilities - Unburden", () => { }); it("should activate when an item is stolen via move", async () => { - game.override.moveset(Moves.THIEF).startingHeldItems([]); // Remove player's full stacks of held items so it can steal opponent's held items - await game.classicMode.startBattle([Species.TREECKO]); + game.override.moveset(MoveId.THIEF).startingHeldItems([]); // Remove player's full stacks of held items so it can steal opponent's held items + await game.classicMode.startBattle([SpeciesId.TREECKO]); const enemyPokemon = game.scene.getEnemyPokemon()!; const enemyHeldItemCt = getHeldItemCount(enemyPokemon); const initialEnemySpeed = enemyPokemon.getStat(Stat.SPD); // Player uses Thief and steals the opponent's item - game.move.select(Moves.THIEF); + game.move.select(MoveId.THIEF); await game.toNextTurn(); expect(getHeldItemCount(enemyPokemon)).toBeLessThan(enemyHeldItemCt); @@ -179,7 +179,7 @@ describe("Abilities - Unburden", () => { it("should activate when an item is stolen via grip claw", async () => { game.override.startingHeldItems([{ name: "GRIP_CLAW", count: 1 }]); - await game.classicMode.startBattle([Species.TREECKO]); + await game.classicMode.startBattle([SpeciesId.TREECKO]); const playerPokemon = game.scene.getPlayerPokemon()!; const gripClaw = playerPokemon.getHeldItems()[0] as ContactHeldItemTransferChanceModifier; @@ -190,7 +190,7 @@ describe("Abilities - Unburden", () => { const initialEnemySpeed = enemyPokemon.getStat(Stat.SPD); // Player steals the opponent's item using Grip Claw - game.move.select(Moves.FALSE_SWIPE); + game.move.select(MoveId.FALSE_SWIPE); await game.toNextTurn(); expect(getHeldItemCount(enemyPokemon)).toBeLessThan(enemyHeldItemCt); @@ -198,15 +198,15 @@ describe("Abilities - Unburden", () => { }); it("should not activate when a neutralizing ability is present", async () => { - game.override.enemyAbility(Abilities.NEUTRALIZING_GAS).enemyMoveset(Moves.FALSE_SWIPE); - await game.classicMode.startBattle([Species.TREECKO]); + game.override.enemyAbility(AbilityId.NEUTRALIZING_GAS).enemyMoveset(MoveId.FALSE_SWIPE); + await game.classicMode.startBattle([SpeciesId.TREECKO]); const playerPokemon = game.scene.getPlayerPokemon()!; const playerHeldItems = getHeldItemCount(playerPokemon); const initialPlayerSpeed = playerPokemon.getStat(Stat.SPD); // Player gets hit by False Swipe and eats Sitrus Berry, which should not trigger Unburden - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(getHeldItemCount(playerPokemon)).toBeLessThan(playerHeldItems); @@ -215,8 +215,8 @@ describe("Abilities - Unburden", () => { }); it("should activate when a move that consumes a berry is used", async () => { - game.override.moveset(Moves.STUFF_CHEEKS); - await game.classicMode.startBattle([Species.TREECKO]); + game.override.moveset(MoveId.STUFF_CHEEKS); + await game.classicMode.startBattle([SpeciesId.TREECKO]); const playerPokemon = game.scene.getPlayerPokemon()!; const playerHeldItemCt = getHeldItemCount(playerPokemon); @@ -224,7 +224,7 @@ describe("Abilities - Unburden", () => { // Player uses Stuff Cheeks and eats its own berry // Caution: Do not test this using opponent, there is a known issue where opponent can randomly generate with Salac Berry - game.move.select(Moves.STUFF_CHEEKS); + game.move.select(MoveId.STUFF_CHEEKS); await game.toNextTurn(); expect(getHeldItemCount(playerPokemon)).toBeLessThan(playerHeldItemCt); @@ -232,8 +232,8 @@ describe("Abilities - Unburden", () => { }); it("should deactivate temporarily when a neutralizing gas user is on the field", async () => { - game.override.battleStyle("double").ability(Abilities.NONE); // Disable ability override so that we can properly set abilities below - await game.classicMode.startBattle([Species.TREECKO, Species.MEOWTH, Species.WEEZING]); + game.override.battleStyle("double").ability(AbilityId.NONE); // Disable ability override so that we can properly set abilities below + await game.classicMode.startBattle([SpeciesId.TREECKO, SpeciesId.MEOWTH, SpeciesId.WEEZING]); const [treecko, _meowth, weezing] = game.scene.getPlayerParty(); treecko.abilityIndex = 2; // Treecko has Unburden @@ -242,10 +242,10 @@ describe("Abilities - Unburden", () => { const initialPlayerSpeed = treecko.getStat(Stat.SPD); // Turn 1: Treecko gets hit by False Swipe and eats Sitrus Berry, activating Unburden - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.FALSE_SWIPE, 0); - await game.move.selectEnemyMove(Moves.FALSE_SWIPE, 0); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.FALSE_SWIPE, 0); + await game.move.selectEnemyMove(MoveId.FALSE_SWIPE, 0); await game.phaseInterceptor.to("TurnEndPhase"); expect(getHeldItemCount(treecko)).toBeLessThan(playerHeldItems); @@ -253,7 +253,7 @@ describe("Abilities - Unburden", () => { // Turn 2: Switch Meowth to Weezing, activating Neutralizing Gas await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSwitchPokemon(2); await game.phaseInterceptor.to("TurnEndPhase"); @@ -262,7 +262,7 @@ describe("Abilities - Unburden", () => { // Turn 3: Switch Weezing to Meowth, deactivating Neutralizing Gas await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSwitchPokemon(2); await game.phaseInterceptor.to("TurnEndPhase"); @@ -271,8 +271,8 @@ describe("Abilities - Unburden", () => { }); it("should not activate when passing a baton to a teammate switching in", async () => { - game.override.startingHeldItems([{ name: "BATON" }]).moveset(Moves.BATON_PASS); - await game.classicMode.startBattle([Species.TREECKO, Species.PURRLOIN]); + game.override.startingHeldItems([{ name: "BATON" }]).moveset(MoveId.BATON_PASS); + await game.classicMode.startBattle([SpeciesId.TREECKO, SpeciesId.PURRLOIN]); const [treecko, purrloin] = game.scene.getPlayerParty(); const initialTreeckoSpeed = treecko.getStat(Stat.SPD); @@ -281,7 +281,7 @@ describe("Abilities - Unburden", () => { vi.spyOn(unburdenAttr, "applyPostItemLost"); // Player uses Baton Pass, which also passes the Baton item - game.move.select(Moves.BATON_PASS); + game.move.select(MoveId.BATON_PASS); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -293,24 +293,24 @@ describe("Abilities - Unburden", () => { }); it("should not speed up a Pokemon after it loses the ability Unburden", async () => { - game.override.enemyMoveset([Moves.FALSE_SWIPE, Moves.WORRY_SEED]); - await game.classicMode.startBattle([Species.PURRLOIN]); + game.override.enemyMoveset([MoveId.FALSE_SWIPE, MoveId.WORRY_SEED]); + await game.classicMode.startBattle([SpeciesId.PURRLOIN]); const playerPokemon = game.scene.getPlayerPokemon()!; const playerHeldItems = getHeldItemCount(playerPokemon); const initialPlayerSpeed = playerPokemon.getStat(Stat.SPD); // Turn 1: Get hit by False Swipe and eat Sitrus Berry, activating Unburden - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.FALSE_SWIPE); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.FALSE_SWIPE); await game.toNextTurn(); expect(getHeldItemCount(playerPokemon)).toBeLessThan(playerHeldItems); expect(playerPokemon.getEffectiveStat(Stat.SPD)).toBe(initialPlayerSpeed * 2); // Turn 2: Get hit by Worry Seed, deactivating Unburden - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.WORRY_SEED); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.WORRY_SEED); await game.toNextTurn(); expect(getHeldItemCount(playerPokemon)).toBeLessThan(playerHeldItems); @@ -318,15 +318,15 @@ describe("Abilities - Unburden", () => { }); it("should activate when a reviver seed is used", async () => { - game.override.startingHeldItems([{ name: "REVIVER_SEED" }]).enemyMoveset([Moves.WING_ATTACK]); - await game.classicMode.startBattle([Species.TREECKO]); + game.override.startingHeldItems([{ name: "REVIVER_SEED" }]).enemyMoveset([MoveId.WING_ATTACK]); + await game.classicMode.startBattle([SpeciesId.TREECKO]); const playerPokemon = game.scene.getPlayerPokemon()!; const playerHeldItems = getHeldItemCount(playerPokemon); const initialPlayerSpeed = playerPokemon.getStat(Stat.SPD); // Turn 1: Get hit by Wing Attack and faint, activating Reviver Seed - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(getHeldItemCount(playerPokemon)).toBeLessThan(playerHeldItems); @@ -335,21 +335,21 @@ describe("Abilities - Unburden", () => { // test for `.bypassFaint()` - singles it("shouldn't persist when revived normally if activated while fainting", async () => { - game.override.enemyMoveset([Moves.SPLASH, Moves.THIEF]); - await game.classicMode.startBattle([Species.TREECKO, Species.FEEBAS]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.THIEF]); + await game.classicMode.startBattle([SpeciesId.TREECKO, SpeciesId.FEEBAS]); const treecko = game.scene.getPlayerPokemon()!; const treeckoInitialHeldItems = getHeldItemCount(treecko); const initialSpeed = treecko.getStat(Stat.SPD); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.THIEF); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.THIEF); game.doSelectPartyPokemon(1); await game.toNextTurn(); game.doRevivePokemon(1); game.doSwitchPokemon(1); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!).toBe(treecko); @@ -361,19 +361,19 @@ describe("Abilities - Unburden", () => { it("shouldn't persist when revived by revival blessing if activated while fainting", async () => { game.override .battleStyle("double") - .enemyMoveset([Moves.SPLASH, Moves.THIEF]) - .moveset([Moves.SPLASH, Moves.REVIVAL_BLESSING]) + .enemyMoveset([MoveId.SPLASH, MoveId.THIEF]) + .moveset([MoveId.SPLASH, MoveId.REVIVAL_BLESSING]) .startingHeldItems([{ name: "WIDE_LENS" }]); - await game.classicMode.startBattle([Species.TREECKO, Species.FEEBAS, Species.MILOTIC]); + await game.classicMode.startBattle([SpeciesId.TREECKO, SpeciesId.FEEBAS, SpeciesId.MILOTIC]); const treecko = game.scene.getPlayerField()[0]; const treeckoInitialHeldItems = getHeldItemCount(treecko); const initialSpeed = treecko.getStat(Stat.SPD); - game.move.select(Moves.SPLASH); - game.move.select(Moves.REVIVAL_BLESSING, 1); - await game.move.selectEnemyMove(Moves.THIEF, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.REVIVAL_BLESSING, 1); + await game.move.selectEnemyMove(MoveId.THIEF, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2]); game.doSelectPartyPokemon(0, "RevivalBlessingPhase"); await game.toNextTurn(); diff --git a/test/abilities/unseen_fist.test.ts b/test/abilities/unseen_fist.test.ts index d78ce8c5bbf..56408c6cbc3 100644 --- a/test/abilities/unseen_fist.test.ts +++ b/test/abilities/unseen_fist.test.ts @@ -1,7 +1,7 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -26,40 +26,40 @@ describe("Abilities - Unseen Fist", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .starterSpecies(Species.URSHIFU) - .enemySpecies(Species.SNORLAX) - .enemyMoveset(Moves.PROTECT) + .starterSpecies(SpeciesId.URSHIFU) + .enemySpecies(SpeciesId.SNORLAX) + .enemyMoveset(MoveId.PROTECT) .startingLevel(100) .enemyLevel(100); }); it("should cause a contact move to ignore Protect", async () => - await testUnseenFistHitResult(game, Moves.QUICK_ATTACK, Moves.PROTECT, true)); + await testUnseenFistHitResult(game, MoveId.QUICK_ATTACK, MoveId.PROTECT, true)); it("should not cause a non-contact move to ignore Protect", async () => - await testUnseenFistHitResult(game, Moves.ABSORB, Moves.PROTECT, false)); + await testUnseenFistHitResult(game, MoveId.ABSORB, MoveId.PROTECT, false)); it("should not apply if the source has Long Reach", async () => { - game.override.passiveAbility(Abilities.LONG_REACH); - await testUnseenFistHitResult(game, Moves.QUICK_ATTACK, Moves.PROTECT, false); + game.override.passiveAbility(AbilityId.LONG_REACH); + await testUnseenFistHitResult(game, MoveId.QUICK_ATTACK, MoveId.PROTECT, false); }); it("should cause a contact move to ignore Wide Guard", async () => - await testUnseenFistHitResult(game, Moves.BREAKING_SWIPE, Moves.WIDE_GUARD, true)); + await testUnseenFistHitResult(game, MoveId.BREAKING_SWIPE, MoveId.WIDE_GUARD, true)); it("should not cause a non-contact move to ignore Wide Guard", async () => - await testUnseenFistHitResult(game, Moves.BULLDOZE, Moves.WIDE_GUARD, false)); + await testUnseenFistHitResult(game, MoveId.BULLDOZE, MoveId.WIDE_GUARD, false)); it("should cause a contact move to ignore Protect, but not Substitute", async () => { game.override.enemyLevel(1); - game.override.moveset([Moves.TACKLE]); + game.override.moveset([MoveId.TACKLE]); await game.classicMode.startBattle(); const enemyPokemon = game.scene.getEnemyPokemon()!; - enemyPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, enemyPokemon.id); + enemyPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, enemyPokemon.id); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(BerryPhase, false); @@ -70,8 +70,8 @@ describe("Abilities - Unseen Fist", () => { async function testUnseenFistHitResult( game: GameManager, - attackMove: Moves, - protectMove: Moves, + attackMove: MoveId, + protectMove: MoveId, shouldSucceed = true, ): Promise { game.override.moveset([attackMove]).enemyMoveset(protectMove); diff --git a/test/abilities/victory_star.test.ts b/test/abilities/victory_star.test.ts index f3c0b5ad6b7..77f5de41bb1 100644 --- a/test/abilities/victory_star.test.ts +++ b/test/abilities/victory_star.test.ts @@ -1,8 +1,8 @@ import { BattlerIndex } from "#app/battle"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -24,35 +24,35 @@ describe("Abilities - Victory Star", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.TACKLE, Moves.SPLASH]) + .moveset([MoveId.TACKLE, MoveId.SPLASH]) .battleStyle("double") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should increase the accuracy of its user", async () => { - await game.classicMode.startBattle([Species.VICTINI, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.VICTINI, SpeciesId.MAGIKARP]); const user = game.scene.getPlayerField()[0]; vi.spyOn(user, "getAccuracyMultiplier"); - game.move.select(Moves.TACKLE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.TACKLE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(TurnEndPhase); expect(user.getAccuracyMultiplier).toHaveReturnedWith(1.1); }); it("should increase the accuracy of its user's ally", async () => { - await game.classicMode.startBattle([Species.MAGIKARP, Species.VICTINI]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.VICTINI]); const ally = game.scene.getPlayerField()[0]; vi.spyOn(ally, "getAccuracyMultiplier"); - game.move.select(Moves.TACKLE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.TACKLE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(TurnEndPhase); expect(ally.getAccuracyMultiplier).toHaveReturnedWith(1.1); diff --git a/test/abilities/vital_spirit.test.ts b/test/abilities/vital_spirit.test.ts index bb274310cc0..c32454e9d31 100644 --- a/test/abilities/vital_spirit.test.ts +++ b/test/abilities/vital_spirit.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,27 +23,27 @@ describe("Abilities - Vital Spirit", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should remove sleep when gained", async () => { game.override - .ability(Abilities.INSOMNIA) - .enemyAbility(Abilities.BALL_FETCH) - .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH); - await game.classicMode.startBattle([Species.FEEBAS]); + .ability(AbilityId.INSOMNIA) + .enemyAbility(AbilityId.BALL_FETCH) + .moveset(MoveId.SKILL_SWAP) + .enemyMoveset(MoveId.SPLASH); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.trySetStatus(StatusEffect.SLEEP); expect(enemy?.status?.effect).toBe(StatusEffect.SLEEP); - game.move.select(Moves.SKILL_SWAP); + game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); expect(enemy?.status).toBeNull(); diff --git a/test/abilities/volt_absorb.test.ts b/test/abilities/volt_absorb.test.ts index 920c822eb90..2e6abf30885 100644 --- a/test/abilities/volt_absorb.test.ts +++ b/test/abilities/volt_absorb.test.ts @@ -1,9 +1,9 @@ import { Stat } from "#enums/stat"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -31,14 +31,14 @@ describe("Abilities - Volt Absorb", () => { }); it("does not activate when CHARGE is used", async () => { - const moveToUse = Moves.CHARGE; - const ability = Abilities.VOLT_ABSORB; + const moveToUse = MoveId.CHARGE; + const ability = AbilityId.VOLT_ABSORB; game.override.moveset([moveToUse]); game.override.ability(ability); - game.override.enemyMoveset([Moves.SPLASH, Moves.NONE, Moves.NONE, Moves.NONE]); - game.override.enemySpecies(Species.DUSKULL); - game.override.enemyAbility(Abilities.BALL_FETCH); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.NONE, MoveId.NONE, MoveId.NONE]); + game.override.enemySpecies(SpeciesId.DUSKULL); + game.override.enemyAbility(AbilityId.BALL_FETCH); await game.classicMode.startBattle(); @@ -54,16 +54,16 @@ describe("Abilities - Volt Absorb", () => { }); it("should activate regardless of accuracy checks", async () => { - game.override.moveset(Moves.THUNDERBOLT); - game.override.enemyMoveset(Moves.SPLASH); - game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyAbility(Abilities.VOLT_ABSORB); + game.override.moveset(MoveId.THUNDERBOLT); + game.override.enemyMoveset(MoveId.SPLASH); + game.override.enemySpecies(SpeciesId.MAGIKARP); + game.override.enemyAbility(AbilityId.VOLT_ABSORB); await game.classicMode.startBattle(); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.THUNDERBOLT); + game.move.select(MoveId.THUNDERBOLT); enemyPokemon.hp = enemyPokemon.hp - 1; await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -74,16 +74,16 @@ describe("Abilities - Volt Absorb", () => { }); it("regardless of accuracy should not trigger on pokemon in semi invulnerable state", async () => { - game.override.moveset(Moves.THUNDERBOLT); - game.override.enemyMoveset(Moves.DIVE); - game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyAbility(Abilities.VOLT_ABSORB); + game.override.moveset(MoveId.THUNDERBOLT); + game.override.enemyMoveset(MoveId.DIVE); + game.override.enemySpecies(SpeciesId.MAGIKARP); + game.override.enemyAbility(AbilityId.VOLT_ABSORB); await game.classicMode.startBattle(); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.THUNDERBOLT); + game.move.select(MoveId.THUNDERBOLT); enemyPokemon.hp = enemyPokemon.hp - 1; await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); diff --git a/test/abilities/wandering_spirit.test.ts b/test/abilities/wandering_spirit.test.ts index 639241aecc8..360eedda4c9 100644 --- a/test/abilities/wandering_spirit.test.ts +++ b/test/abilities/wandering_spirit.test.ts @@ -1,7 +1,7 @@ import { Stat } from "#app/enums/stat"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -23,41 +23,41 @@ describe("Abilities - Wandering Spirit", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) - .ability(Abilities.WANDERING_SPIRIT) + .moveset([MoveId.SPLASH]) + .ability(AbilityId.WANDERING_SPIRIT) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.TACKLE); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.TACKLE); }); it("should exchange abilities when hit with a contact move", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(Abilities.BALL_FETCH); - expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(Abilities.WANDERING_SPIRIT); + expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(AbilityId.BALL_FETCH); + expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(AbilityId.WANDERING_SPIRIT); }); it("should not exchange abilities when hit with a non-contact move", async () => { - game.override.enemyMoveset(Moves.EARTHQUAKE); - await game.classicMode.startBattle([Species.FEEBAS]); + game.override.enemyMoveset(MoveId.EARTHQUAKE); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(Abilities.WANDERING_SPIRIT); - expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(Abilities.BALL_FETCH); + expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(AbilityId.WANDERING_SPIRIT); + expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(AbilityId.BALL_FETCH); }); it("should activate post-summon abilities", async () => { - game.override.enemyAbility(Abilities.INTIMIDATE); - await game.classicMode.startBattle([Species.FEEBAS]); + game.override.enemyAbility(AbilityId.INTIMIDATE); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(-1); diff --git a/test/abilities/water_bubble.test.ts b/test/abilities/water_bubble.test.ts index c1e2acbd468..412c4a25035 100644 --- a/test/abilities/water_bubble.test.ts +++ b/test/abilities/water_bubble.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,27 +23,27 @@ describe("Abilities - Water Bubble", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should remove burn when gained", async () => { game.override - .ability(Abilities.THERMAL_EXCHANGE) - .enemyAbility(Abilities.BALL_FETCH) - .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH); - await game.classicMode.startBattle([Species.FEEBAS]); + .ability(AbilityId.THERMAL_EXCHANGE) + .enemyAbility(AbilityId.BALL_FETCH) + .moveset(MoveId.SKILL_SWAP) + .enemyMoveset(MoveId.SPLASH); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.trySetStatus(StatusEffect.BURN); expect(enemy?.status?.effect).toBe(StatusEffect.BURN); - game.move.select(Moves.SKILL_SWAP); + game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); expect(enemy?.status).toBeNull(); diff --git a/test/abilities/water_veil.test.ts b/test/abilities/water_veil.test.ts index 8e187ad8e58..e67287d250f 100644 --- a/test/abilities/water_veil.test.ts +++ b/test/abilities/water_veil.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,27 +23,27 @@ describe("Abilities - Water Veil", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should remove burn when gained", async () => { game.override - .ability(Abilities.THERMAL_EXCHANGE) - .enemyAbility(Abilities.BALL_FETCH) - .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH); - await game.classicMode.startBattle([Species.FEEBAS]); + .ability(AbilityId.THERMAL_EXCHANGE) + .enemyAbility(AbilityId.BALL_FETCH) + .moveset(MoveId.SKILL_SWAP) + .enemyMoveset(MoveId.SPLASH); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.trySetStatus(StatusEffect.BURN); expect(enemy?.status?.effect).toBe(StatusEffect.BURN); - game.move.select(Moves.SKILL_SWAP); + game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); expect(enemy?.status).toBeNull(); diff --git a/test/abilities/wimp_out.test.ts b/test/abilities/wimp_out.test.ts index 32a627f20f9..2c2ab636961 100644 --- a/test/abilities/wimp_out.test.ts +++ b/test/abilities/wimp_out.test.ts @@ -3,11 +3,11 @@ import { ArenaTagSide } from "#app/data/arena-tag"; import { allMoves } from "#app/data/data-lists"; import GameManager from "#test/testUtils/gameManager"; import { toDmgValue } from "#app/utils/common"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; import { WeatherType } from "#enums/weather-type"; @@ -32,13 +32,13 @@ describe("Abilities - Wimp Out", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .ability(Abilities.WIMP_OUT) - .enemySpecies(Species.NINJASK) - .enemyPassiveAbility(Abilities.NO_GUARD) + .ability(AbilityId.WIMP_OUT) + .enemySpecies(SpeciesId.NINJASK) + .enemyPassiveAbility(AbilityId.NO_GUARD) .startingLevel(90) .enemyLevel(70) - .moveset([Moves.SPLASH, Moves.FALSE_SWIPE, Moves.ENDURE]) - .enemyMoveset(Moves.FALSE_SWIPE) + .moveset([MoveId.SPLASH, MoveId.FALSE_SWIPE, MoveId.ENDURE]) + .enemyMoveset(MoveId.FALSE_SWIPE) .disableCrits(); }); @@ -47,9 +47,9 @@ describe("Abilities - Wimp Out", () => { expect(game.phaseInterceptor.log).toContain("SwitchSummonPhase"); - expect(pokemon1.species.speciesId).not.toBe(Species.WIMPOD); + expect(pokemon1.species.speciesId).not.toBe(SpeciesId.WIMPOD); - expect(pokemon2.species.speciesId).toBe(Species.WIMPOD); + expect(pokemon2.species.speciesId).toBe(SpeciesId.WIMPOD); expect(pokemon2.isFainted()).toBe(false); expect(pokemon2.getHpRatio()).toBeLessThan(0.5); } @@ -59,20 +59,20 @@ describe("Abilities - Wimp Out", () => { expect(game.phaseInterceptor.log).not.toContain("SwitchSummonPhase"); - expect(pokemon2.species.speciesId).not.toBe(Species.WIMPOD); + expect(pokemon2.species.speciesId).not.toBe(SpeciesId.WIMPOD); - expect(pokemon1.species.speciesId).toBe(Species.WIMPOD); + expect(pokemon1.species.speciesId).toBe(SpeciesId.WIMPOD); expect(pokemon1.isFainted()).toBe(false); expect(pokemon1.getHpRatio()).toBeLessThan(0.5); } it("triggers regenerator passive single time when switching out with wimp out", async () => { - game.override.passiveAbility(Abilities.REGENERATOR).startingLevel(5).enemyLevel(100); - await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); + game.override.passiveAbility(AbilityId.REGENERATOR).startingLevel(5).enemyLevel(100); + await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); const wimpod = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -81,13 +81,13 @@ describe("Abilities - Wimp Out", () => { }); it("It makes wild pokemon flee if triggered", async () => { - game.override.enemyAbility(Abilities.WIMP_OUT); - await game.classicMode.startBattle([Species.GOLISOPOD, Species.TYRUNT]); + game.override.enemyAbility(AbilityId.WIMP_OUT); + await game.classicMode.startBattle([SpeciesId.GOLISOPOD, SpeciesId.TYRUNT]); const enemyPokemon = game.scene.getEnemyPokemon()!; enemyPokemon.hp *= 0.52; - game.move.select(Moves.FALSE_SWIPE); + game.move.select(MoveId.FALSE_SWIPE); await game.phaseInterceptor.to("BerryPhase"); const isVisible = enemyPokemon.visible; @@ -96,11 +96,11 @@ describe("Abilities - Wimp Out", () => { }); it("Does not trigger when HP already below half", async () => { - await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); + await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); const wimpod = game.scene.getPlayerPokemon()!; wimpod.hp = 5; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(wimpod.hp).toEqual(1); @@ -108,10 +108,10 @@ describe("Abilities - Wimp Out", () => { }); it("Trapping moves do not prevent Wimp Out from activating.", async () => { - game.override.enemyMoveset([Moves.SPIRIT_SHACKLE]).startingLevel(53).enemyLevel(45); - await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); + game.override.enemyMoveset([MoveId.SPIRIT_SHACKLE]).startingLevel(53).enemyLevel(45); + await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -123,10 +123,10 @@ describe("Abilities - Wimp Out", () => { }); it("If this Ability activates due to being hit by U-turn or Volt Switch, the user of that move will not be switched out.", async () => { - game.override.startingLevel(95).enemyMoveset([Moves.U_TURN]); - await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); + game.override.startingLevel(95).enemyMoveset([MoveId.U_TURN]); + await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -137,36 +137,36 @@ describe("Abilities - Wimp Out", () => { }); it("If this Ability does not activate due to being hit by U-turn or Volt Switch, the user of that move will be switched out.", async () => { - game.override.startingLevel(190).startingWave(8).enemyMoveset([Moves.U_TURN]); - await game.classicMode.startBattle([Species.GOLISOPOD, Species.TYRUNT]); + game.override.startingLevel(190).startingWave(8).enemyMoveset([MoveId.U_TURN]); + await game.classicMode.startBattle([SpeciesId.GOLISOPOD, SpeciesId.TYRUNT]); const RIVAL_NINJASK1 = game.scene.getEnemyPokemon()?.id; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase", false); expect(game.scene.getEnemyPokemon()?.id !== RIVAL_NINJASK1); }); it("Dragon Tail and Circle Throw switch out Pokémon before the Ability activates.", async () => { - game.override.startingLevel(69).enemyMoveset([Moves.DRAGON_TAIL]); - await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); + game.override.startingLevel(69).enemyMoveset([MoveId.DRAGON_TAIL]); + await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); const wimpod = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("SwitchSummonPhase", false); - expect(wimpod.waveData.abilitiesApplied).not.toContain(Abilities.WIMP_OUT); + expect(wimpod.waveData.abilitiesApplied).not.toContain(AbilityId.WIMP_OUT); await game.phaseInterceptor.to("TurnEndPhase"); - expect(game.scene.getPlayerPokemon()!.species.speciesId).not.toBe(Species.WIMPOD); + expect(game.scene.getPlayerPokemon()!.species.speciesId).not.toBe(SpeciesId.WIMPOD); }); it("triggers when recoil damage is taken", async () => { - game.override.moveset([Moves.HEAD_SMASH]).enemyMoveset([Moves.SPLASH]); - await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); + game.override.moveset([MoveId.HEAD_SMASH]).enemyMoveset([MoveId.SPLASH]); + await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); - game.move.select(Moves.HEAD_SMASH); + game.move.select(MoveId.HEAD_SMASH); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -174,23 +174,23 @@ describe("Abilities - Wimp Out", () => { }); it("It does not activate when the Pokémon cuts its own HP", async () => { - game.override.moveset([Moves.SUBSTITUTE]).enemyMoveset([Moves.SPLASH]); - await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); + game.override.moveset([MoveId.SUBSTITUTE]).enemyMoveset([MoveId.SPLASH]); + await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); const wimpod = game.scene.getPlayerPokemon()!; wimpod.hp *= 0.52; - game.move.select(Moves.SUBSTITUTE); + game.move.select(MoveId.SUBSTITUTE); await game.phaseInterceptor.to("TurnEndPhase"); confirmNoSwitch(); }); it("Does not trigger when neutralized", async () => { - game.override.enemyAbility(Abilities.NEUTRALIZING_GAS).startingLevel(5); - await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); + game.override.enemyAbility(AbilityId.NEUTRALIZING_GAS).startingLevel(5); + await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); confirmNoSwitch(); @@ -203,33 +203,33 @@ describe("Abilities - Wimp Out", () => { "If it falls below half and recovers back above half from a Shell Bell, Wimp Out will activate even after the Shell Bell recovery", async () => { game.override - .moveset([Moves.DOUBLE_EDGE]) - .enemyMoveset([Moves.SPLASH]) + .moveset([MoveId.DOUBLE_EDGE]) + .enemyMoveset([MoveId.SPLASH]) .startingHeldItems([{ name: "SHELL_BELL", count: 4 }]); - await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); + await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); const wimpod = game.scene.getPlayerPokemon()!; wimpod.damageAndUpdate(toDmgValue(wimpod.getMaxHp() * 0.4)); - game.move.select(Moves.DOUBLE_EDGE); + game.move.select(MoveId.DOUBLE_EDGE); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.getPlayerParty()[1]).toBe(wimpod); expect(wimpod.hp).toBeGreaterThan(toDmgValue(wimpod.getMaxHp() / 2)); expect(game.phaseInterceptor.log).toContain("SwitchSummonPhase"); - expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(Species.TYRUNT); + expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(SpeciesId.TYRUNT); }, ); it("Wimp Out will activate due to weather damage", async () => { - game.override.weather(WeatherType.HAIL).enemyMoveset([Moves.SPLASH]); - await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); + game.override.weather(WeatherType.HAIL).enemyMoveset([MoveId.SPLASH]); + await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); game.scene.getPlayerPokemon()!.hp *= 0.51; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -237,24 +237,24 @@ describe("Abilities - Wimp Out", () => { }); it("Does not trigger when enemy has sheer force", async () => { - game.override.enemyAbility(Abilities.SHEER_FORCE).enemyMoveset(Moves.SLUDGE_BOMB).startingLevel(95); - await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); + game.override.enemyAbility(AbilityId.SHEER_FORCE).enemyMoveset(MoveId.SLUDGE_BOMB).startingLevel(95); + await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); game.scene.getPlayerPokemon()!.hp *= 0.51; - game.move.select(Moves.ENDURE); + game.move.select(MoveId.ENDURE); await game.phaseInterceptor.to("TurnEndPhase"); confirmNoSwitch(); }); it("Wimp Out will activate due to post turn status damage", async () => { - game.override.statusEffect(StatusEffect.POISON).enemyMoveset([Moves.SPLASH]); - await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); + game.override.statusEffect(StatusEffect.POISON).enemyMoveset([MoveId.SPLASH]); + await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); game.scene.getPlayerPokemon()!.hp *= 0.51; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -262,12 +262,12 @@ describe("Abilities - Wimp Out", () => { }); it("Wimp Out will activate due to bad dreams", async () => { - game.override.statusEffect(StatusEffect.SLEEP).enemyAbility(Abilities.BAD_DREAMS); - await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); + game.override.statusEffect(StatusEffect.SLEEP).enemyAbility(AbilityId.BAD_DREAMS); + await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); game.scene.getPlayerPokemon()!.hp *= 0.52; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -275,11 +275,11 @@ describe("Abilities - Wimp Out", () => { }); it("Wimp Out will activate due to leech seed", async () => { - game.override.enemyMoveset([Moves.LEECH_SEED]); - await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); + game.override.enemyMoveset([MoveId.LEECH_SEED]); + await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); game.scene.getPlayerPokemon()!.hp *= 0.52; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -287,11 +287,11 @@ describe("Abilities - Wimp Out", () => { }); it("Wimp Out will activate due to curse damage", async () => { - game.override.enemySpecies(Species.DUSKNOIR).enemyMoveset([Moves.CURSE]); - await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); + game.override.enemySpecies(SpeciesId.DUSKNOIR).enemyMoveset([MoveId.CURSE]); + await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); game.scene.getPlayerPokemon()!.hp *= 0.52; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -299,11 +299,11 @@ describe("Abilities - Wimp Out", () => { }); it("Wimp Out will activate due to salt cure damage", async () => { - game.override.enemySpecies(Species.NACLI).enemyMoveset([Moves.SALT_CURE]).enemyLevel(1); - await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); + game.override.enemySpecies(SpeciesId.NACLI).enemyMoveset([MoveId.SALT_CURE]).enemyLevel(1); + await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); game.scene.getPlayerPokemon()!.hp *= 0.7; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -311,11 +311,11 @@ describe("Abilities - Wimp Out", () => { }); it("Wimp Out will activate due to damaging trap damage", async () => { - game.override.enemySpecies(Species.MAGIKARP).enemyMoveset([Moves.WHIRLPOOL]).enemyLevel(1); - await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); + game.override.enemySpecies(SpeciesId.MAGIKARP).enemyMoveset([MoveId.WHIRLPOOL]).enemyLevel(1); + await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); game.scene.getPlayerPokemon()!.hp *= 0.55; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -323,32 +323,32 @@ describe("Abilities - Wimp Out", () => { }); it("Magic Guard passive should not allow indirect damage to trigger Wimp Out", async () => { - game.scene.arena.addTag(ArenaTagType.STEALTH_ROCK, 1, Moves.STEALTH_ROCK, 0, ArenaTagSide.ENEMY); - game.scene.arena.addTag(ArenaTagType.SPIKES, 1, Moves.SPIKES, 0, ArenaTagSide.ENEMY); + game.scene.arena.addTag(ArenaTagType.STEALTH_ROCK, 1, MoveId.STEALTH_ROCK, 0, ArenaTagSide.ENEMY); + game.scene.arena.addTag(ArenaTagType.SPIKES, 1, MoveId.SPIKES, 0, ArenaTagSide.ENEMY); game.override - .passiveAbility(Abilities.MAGIC_GUARD) - .enemyMoveset([Moves.LEECH_SEED]) + .passiveAbility(AbilityId.MAGIC_GUARD) + .enemyMoveset([MoveId.LEECH_SEED]) .weather(WeatherType.HAIL) .statusEffect(StatusEffect.POISON); - await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); + await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); game.scene.getPlayerPokemon()!.hp *= 0.51; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.getPlayerParty()[0].getHpRatio()).toEqual(0.51); expect(game.phaseInterceptor.log).not.toContain("SwitchSummonPhase"); - expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(Species.WIMPOD); + expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(SpeciesId.WIMPOD); }); it("Wimp Out activating should not cancel a double battle", async () => { - game.override.battleStyle("double").enemyAbility(Abilities.WIMP_OUT).enemyMoveset([Moves.SPLASH]).enemyLevel(1); - await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); + game.override.battleStyle("double").enemyAbility(AbilityId.WIMP_OUT).enemyMoveset([MoveId.SPLASH]).enemyLevel(1); + await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); const enemyLeadPokemon = game.scene.getEnemyParty()[0]; const enemySecPokemon = game.scene.getEnemyParty()[1]; - game.move.select(Moves.FALSE_SWIPE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.FALSE_SWIPE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); @@ -363,15 +363,15 @@ describe("Abilities - Wimp Out", () => { it("Wimp Out will activate due to aftermath", async () => { game.override - .moveset([Moves.THUNDER_PUNCH]) - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.AFTERMATH) - .enemyMoveset([Moves.SPLASH]) + .moveset([MoveId.THUNDER_PUNCH]) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.AFTERMATH) + .enemyMoveset([MoveId.SPLASH]) .enemyLevel(1); - await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); + await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); game.scene.getPlayerPokemon()!.hp *= 0.51; - game.move.select(Moves.THUNDER_PUNCH); + game.move.select(MoveId.THUNDER_PUNCH); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -379,21 +379,21 @@ describe("Abilities - Wimp Out", () => { }); it("Activates due to entry hazards", async () => { - game.scene.arena.addTag(ArenaTagType.STEALTH_ROCK, 1, Moves.STEALTH_ROCK, 0, ArenaTagSide.ENEMY); - game.scene.arena.addTag(ArenaTagType.SPIKES, 1, Moves.SPIKES, 0, ArenaTagSide.ENEMY); - game.override.enemySpecies(Species.CENTISKORCH).enemyAbility(Abilities.WIMP_OUT).startingWave(4); - await game.classicMode.startBattle([Species.TYRUNT]); + game.scene.arena.addTag(ArenaTagType.STEALTH_ROCK, 1, MoveId.STEALTH_ROCK, 0, ArenaTagSide.ENEMY); + game.scene.arena.addTag(ArenaTagType.SPIKES, 1, MoveId.SPIKES, 0, ArenaTagSide.ENEMY); + game.override.enemySpecies(SpeciesId.CENTISKORCH).enemyAbility(AbilityId.WIMP_OUT).startingWave(4); + await game.classicMode.startBattle([SpeciesId.TYRUNT]); expect(game.phaseInterceptor.log).not.toContain("MovePhase"); expect(game.phaseInterceptor.log).toContain("BattleEndPhase"); }); it("Wimp Out will activate due to Nightmare", async () => { - game.override.enemyMoveset([Moves.NIGHTMARE]).statusEffect(StatusEffect.SLEEP); - await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); + game.override.enemyMoveset([MoveId.NIGHTMARE]).statusEffect(StatusEffect.SLEEP); + await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); game.scene.getPlayerPokemon()!.hp *= 0.65; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -401,11 +401,11 @@ describe("Abilities - Wimp Out", () => { }); it("triggers status on the wimp out user before a new pokemon is switched in", async () => { - game.override.enemyMoveset(Moves.SLUDGE_BOMB).startingLevel(80); - await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); - vi.spyOn(allMoves[Moves.SLUDGE_BOMB], "chance", "get").mockReturnValue(100); + game.override.enemyMoveset(MoveId.SLUDGE_BOMB).startingLevel(80); + await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); + vi.spyOn(allMoves[MoveId.SLUDGE_BOMB], "chance", "get").mockReturnValue(100); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -414,12 +414,12 @@ describe("Abilities - Wimp Out", () => { }); it("triggers after last hit of multi hit move", async () => { - game.override.enemyMoveset(Moves.BULLET_SEED).enemyAbility(Abilities.SKILL_LINK); - await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); + game.override.enemyMoveset(MoveId.BULLET_SEED).enemyAbility(AbilityId.SKILL_LINK); + await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); game.scene.getPlayerPokemon()!.hp *= 0.51; - game.move.select(Moves.ENDURE); + game.move.select(MoveId.ENDURE); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -430,12 +430,12 @@ describe("Abilities - Wimp Out", () => { }); it("triggers after last hit of multi hit move (multi lens)", async () => { - game.override.enemyMoveset(Moves.TACKLE).enemyHeldItems([{ name: "MULTI_LENS", count: 1 }]); - await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); + game.override.enemyMoveset(MoveId.TACKLE).enemyHeldItems([{ name: "MULTI_LENS", count: 1 }]); + await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); game.scene.getPlayerPokemon()!.hp *= 0.51; - game.move.select(Moves.ENDURE); + game.move.select(MoveId.ENDURE); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -445,12 +445,12 @@ describe("Abilities - Wimp Out", () => { confirmSwitch(); }); it("triggers after last hit of Parental Bond", async () => { - game.override.enemyMoveset(Moves.TACKLE).enemyAbility(Abilities.PARENTAL_BOND); - await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); + game.override.enemyMoveset(MoveId.TACKLE).enemyAbility(AbilityId.PARENTAL_BOND); + await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); game.scene.getPlayerPokemon()!.hp *= 0.51; - game.move.select(Moves.ENDURE); + game.move.select(MoveId.ENDURE); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -464,8 +464,8 @@ describe("Abilities - Wimp Out", () => { it.todo( "Wimp Out will not activate if the Pokémon's HP falls below half due to hurting itself in confusion", async () => { - game.override.moveset([Moves.SWORDS_DANCE]).enemyMoveset([Moves.SWAGGER]); - await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); + game.override.moveset([MoveId.SWORDS_DANCE]).enemyMoveset([MoveId.SWAGGER]); + await game.classicMode.startBattle([SpeciesId.WIMPOD, SpeciesId.TYRUNT]); const playerPokemon = game.scene.getPlayerPokemon()!; playerPokemon.hp *= 0.51; playerPokemon.setStatStage(Stat.ATK, 6); @@ -474,7 +474,7 @@ describe("Abilities - Wimp Out", () => { // TODO: add helper function to force confusion self-hits while (playerPokemon.getHpRatio() > 0.49) { - game.move.select(Moves.SWORDS_DANCE); + game.move.select(MoveId.SWORDS_DANCE); await game.phaseInterceptor.to("TurnEndPhase"); } @@ -483,15 +483,15 @@ describe("Abilities - Wimp Out", () => { ); it("should not activate on wave X0 bosses", async () => { - game.override.enemyAbility(Abilities.WIMP_OUT).startingLevel(5850).startingWave(10); - await game.classicMode.startBattle([Species.GOLISOPOD]); + game.override.enemyAbility(AbilityId.WIMP_OUT).startingLevel(5850).startingWave(10); + await game.classicMode.startBattle([SpeciesId.GOLISOPOD]); const enemyPokemon = game.scene.getEnemyPokemon()!; // Use 2 turns of False Swipe due to opponent's health bar shield - game.move.select(Moves.FALSE_SWIPE); + game.move.select(MoveId.FALSE_SWIPE); await game.toNextTurn(); - game.move.select(Moves.FALSE_SWIPE); + game.move.select(MoveId.FALSE_SWIPE); await game.toNextTurn(); const isVisible = enemyPokemon.visible; @@ -502,19 +502,19 @@ describe("Abilities - Wimp Out", () => { it("wimp out will not skip battles when triggered in a double battle", async () => { const wave = 2; game.override - .enemyMoveset(Moves.SPLASH) - .enemySpecies(Species.WIMPOD) - .enemyAbility(Abilities.WIMP_OUT) - .moveset([Moves.MATCHA_GOTCHA, Moves.FALSE_SWIPE]) + .enemyMoveset(MoveId.SPLASH) + .enemySpecies(SpeciesId.WIMPOD) + .enemyAbility(AbilityId.WIMP_OUT) + .moveset([MoveId.MATCHA_GOTCHA, MoveId.FALSE_SWIPE]) .startingLevel(50) .enemyLevel(1) .battleStyle("double") .startingWave(wave); - await game.classicMode.startBattle([Species.RAICHU, Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.RAICHU, SpeciesId.PIKACHU]); const [wimpod0, wimpod1] = game.scene.getEnemyField(); - game.move.select(Moves.FALSE_SWIPE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.MATCHA_GOTCHA, 1); + game.move.select(MoveId.FALSE_SWIPE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.MATCHA_GOTCHA, 1); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -530,22 +530,22 @@ describe("Abilities - Wimp Out", () => { it("wimp out should not skip battles when triggering the same turn as another enemy faints", async () => { const wave = 2; game.override - .enemySpecies(Species.WIMPOD) - .enemyAbility(Abilities.WIMP_OUT) + .enemySpecies(SpeciesId.WIMPOD) + .enemyAbility(AbilityId.WIMP_OUT) .startingLevel(50) .enemyLevel(1) - .enemyMoveset([Moves.SPLASH, Moves.ENDURE]) + .enemyMoveset([MoveId.SPLASH, MoveId.ENDURE]) .battleStyle("double") - .moveset([Moves.DRAGON_ENERGY, Moves.SPLASH]) + .moveset([MoveId.DRAGON_ENERGY, MoveId.SPLASH]) .startingWave(wave); - await game.classicMode.startBattle([Species.REGIDRAGO, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.REGIDRAGO, SpeciesId.MAGIKARP]); // turn 1 - game.move.select(Moves.DRAGON_ENERGY, 0); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.ENDURE); + game.move.select(MoveId.DRAGON_ENERGY, 0); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.ENDURE); await game.phaseInterceptor.to("SelectModifierPhase"); expect(game.scene.currentBattle.waveIndex).toBe(wave + 1); diff --git a/test/abilities/wind_power.test.ts b/test/abilities/wind_power.test.ts index 11585520c73..a7b4d525a56 100644 --- a/test/abilities/wind_power.test.ts +++ b/test/abilities/wind_power.test.ts @@ -1,8 +1,8 @@ import { BattlerTagType } from "#app/enums/battler-tag-type"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -24,51 +24,51 @@ describe("Abilities - Wind Power", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleStyle("single"); - game.override.enemySpecies(Species.SHIFTRY); - game.override.enemyAbility(Abilities.WIND_POWER); - game.override.moveset([Moves.TAILWIND, Moves.SPLASH, Moves.PETAL_BLIZZARD, Moves.SANDSTORM]); - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemySpecies(SpeciesId.SHIFTRY); + game.override.enemyAbility(AbilityId.WIND_POWER); + game.override.moveset([MoveId.TAILWIND, MoveId.SPLASH, MoveId.PETAL_BLIZZARD, MoveId.SANDSTORM]); + game.override.enemyMoveset(MoveId.SPLASH); }); it("it becomes charged when hit by wind moves", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const shiftry = game.scene.getEnemyPokemon()!; expect(shiftry.getTag(BattlerTagType.CHARGED)).toBeUndefined(); - game.move.select(Moves.PETAL_BLIZZARD); + game.move.select(MoveId.PETAL_BLIZZARD); await game.phaseInterceptor.to(TurnEndPhase); expect(shiftry.getTag(BattlerTagType.CHARGED)).toBeDefined(); }); it("it becomes charged when Tailwind takes effect on its side", async () => { - game.override.ability(Abilities.WIND_POWER); - game.override.enemySpecies(Species.MAGIKARP); + game.override.ability(AbilityId.WIND_POWER); + game.override.enemySpecies(SpeciesId.MAGIKARP); - await game.classicMode.startBattle([Species.SHIFTRY]); + await game.classicMode.startBattle([SpeciesId.SHIFTRY]); const shiftry = game.scene.getPlayerPokemon()!; expect(shiftry.getTag(BattlerTagType.CHARGED)).toBeUndefined(); - game.move.select(Moves.TAILWIND); + game.move.select(MoveId.TAILWIND); await game.phaseInterceptor.to(TurnEndPhase); expect(shiftry.getTag(BattlerTagType.CHARGED)).toBeDefined(); }); it("does not become charged when Tailwind takes effect on opposing side", async () => { - game.override.enemySpecies(Species.MAGIKARP); - game.override.ability(Abilities.WIND_POWER); + game.override.enemySpecies(SpeciesId.MAGIKARP); + game.override.ability(AbilityId.WIND_POWER); - await game.classicMode.startBattle([Species.SHIFTRY]); + await game.classicMode.startBattle([SpeciesId.SHIFTRY]); const magikarp = game.scene.getEnemyPokemon()!; const shiftry = game.scene.getPlayerPokemon()!; expect(shiftry.getTag(BattlerTagType.CHARGED)).toBeUndefined(); expect(magikarp.getTag(BattlerTagType.CHARGED)).toBeUndefined(); - game.move.select(Moves.TAILWIND); + game.move.select(MoveId.TAILWIND); await game.phaseInterceptor.to(TurnEndPhase); @@ -77,14 +77,14 @@ describe("Abilities - Wind Power", () => { }); it("does not interact with Sandstorm", async () => { - game.override.enemySpecies(Species.MAGIKARP); + game.override.enemySpecies(SpeciesId.MAGIKARP); - await game.classicMode.startBattle([Species.SHIFTRY]); + await game.classicMode.startBattle([SpeciesId.SHIFTRY]); const shiftry = game.scene.getPlayerPokemon()!; expect(shiftry.getTag(BattlerTagType.CHARGED)).toBeUndefined(); - game.move.select(Moves.SANDSTORM); + game.move.select(MoveId.SANDSTORM); await game.phaseInterceptor.to(TurnEndPhase); diff --git a/test/abilities/wind_rider.test.ts b/test/abilities/wind_rider.test.ts index f8301aa03fc..ea1747fcae9 100644 --- a/test/abilities/wind_rider.test.ts +++ b/test/abilities/wind_rider.test.ts @@ -1,8 +1,8 @@ import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -24,19 +24,19 @@ describe("Abilities - Wind Rider", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemySpecies(Species.SHIFTRY) - .enemyAbility(Abilities.WIND_RIDER) - .moveset([Moves.TAILWIND, Moves.SPLASH, Moves.PETAL_BLIZZARD, Moves.SANDSTORM]) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.SHIFTRY) + .enemyAbility(AbilityId.WIND_RIDER) + .moveset([MoveId.TAILWIND, MoveId.SPLASH, MoveId.PETAL_BLIZZARD, MoveId.SANDSTORM]) + .enemyMoveset(MoveId.SPLASH); }); it("takes no damage from wind moves and its ATK stat stage is raised by 1 when hit by one", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const shiftry = game.scene.getEnemyPokemon()!; expect(shiftry.getStatStage(Stat.ATK)).toBe(0); - game.move.select(Moves.PETAL_BLIZZARD); + game.move.select(MoveId.PETAL_BLIZZARD); await game.phaseInterceptor.to("TurnEndPhase"); @@ -45,14 +45,14 @@ describe("Abilities - Wind Rider", () => { }); it("ATK stat stage is raised by 1 when Tailwind is present on its side", async () => { - game.override.enemySpecies(Species.MAGIKARP).ability(Abilities.WIND_RIDER); + game.override.enemySpecies(SpeciesId.MAGIKARP).ability(AbilityId.WIND_RIDER); - await game.classicMode.startBattle([Species.SHIFTRY]); + await game.classicMode.startBattle([SpeciesId.SHIFTRY]); const shiftry = game.scene.getPlayerPokemon()!; expect(shiftry.getStatStage(Stat.ATK)).toBe(0); - game.move.select(Moves.TAILWIND); + game.move.select(MoveId.TAILWIND); await game.phaseInterceptor.to("TurnEndPhase"); @@ -60,16 +60,16 @@ describe("Abilities - Wind Rider", () => { }); it("does not raise ATK stat stage when Tailwind is present on opposing side", async () => { - game.override.enemySpecies(Species.MAGIKARP).ability(Abilities.WIND_RIDER); + game.override.enemySpecies(SpeciesId.MAGIKARP).ability(AbilityId.WIND_RIDER); - await game.classicMode.startBattle([Species.SHIFTRY]); + await game.classicMode.startBattle([SpeciesId.SHIFTRY]); const magikarp = game.scene.getEnemyPokemon()!; const shiftry = game.scene.getPlayerPokemon()!; expect(shiftry.getStatStage(Stat.ATK)).toBe(0); expect(magikarp.getStatStage(Stat.ATK)).toBe(0); - game.move.select(Moves.TAILWIND); + game.move.select(MoveId.TAILWIND); await game.phaseInterceptor.to("TurnEndPhase"); @@ -78,16 +78,16 @@ describe("Abilities - Wind Rider", () => { }); it("does not raise ATK stat stage when Tailwind is present on opposing side", async () => { - game.override.enemySpecies(Species.MAGIKARP).ability(Abilities.WIND_RIDER); + game.override.enemySpecies(SpeciesId.MAGIKARP).ability(AbilityId.WIND_RIDER); - await game.classicMode.startBattle([Species.SHIFTRY]); + await game.classicMode.startBattle([SpeciesId.SHIFTRY]); const magikarp = game.scene.getEnemyPokemon()!; const shiftry = game.scene.getPlayerPokemon()!; expect(shiftry.getStatStage(Stat.ATK)).toBe(0); expect(magikarp.getStatStage(Stat.ATK)).toBe(0); - game.move.select(Moves.TAILWIND); + game.move.select(MoveId.TAILWIND); await game.phaseInterceptor.to("TurnEndPhase"); @@ -96,15 +96,15 @@ describe("Abilities - Wind Rider", () => { }); it("does not interact with Sandstorm", async () => { - game.override.enemySpecies(Species.MAGIKARP); + game.override.enemySpecies(SpeciesId.MAGIKARP); - await game.classicMode.startBattle([Species.SHIFTRY]); + await game.classicMode.startBattle([SpeciesId.SHIFTRY]); const shiftry = game.scene.getPlayerPokemon()!; expect(shiftry.getStatStage(Stat.ATK)).toBe(0); expect(shiftry.isFullHp()).toBe(true); - game.move.select(Moves.SANDSTORM); + game.move.select(MoveId.SANDSTORM); await game.phaseInterceptor.to("TurnEndPhase"); diff --git a/test/abilities/wonder_skin.test.ts b/test/abilities/wonder_skin.test.ts index cb5dd4e117f..933d3653580 100644 --- a/test/abilities/wonder_skin.test.ts +++ b/test/abilities/wonder_skin.test.ts @@ -1,8 +1,8 @@ import { allMoves } from "#app/data/data-lists"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -24,53 +24,53 @@ describe("Abilities - Wonder Skin", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleStyle("single"); - game.override.moveset([Moves.TACKLE, Moves.CHARM]); - game.override.ability(Abilities.BALL_FETCH); - game.override.enemySpecies(Species.SHUCKLE); - game.override.enemyAbility(Abilities.WONDER_SKIN); - game.override.enemyMoveset(Moves.SPLASH); + game.override.moveset([MoveId.TACKLE, MoveId.CHARM]); + game.override.ability(AbilityId.BALL_FETCH); + game.override.enemySpecies(SpeciesId.SHUCKLE); + game.override.enemyAbility(AbilityId.WONDER_SKIN); + game.override.enemyMoveset(MoveId.SPLASH); }); it("lowers accuracy of status moves to 50%", async () => { - const moveToCheck = allMoves[Moves.CHARM]; + const moveToCheck = allMoves[MoveId.CHARM]; vi.spyOn(moveToCheck, "calculateBattleAccuracy"); - await game.classicMode.startBattle([Species.PIKACHU]); - game.move.select(Moves.CHARM); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); + game.move.select(MoveId.CHARM); await game.phaseInterceptor.to(MoveEffectPhase); expect(moveToCheck.calculateBattleAccuracy).toHaveReturnedWith(50); }); it("does not lower accuracy of non-status moves", async () => { - const moveToCheck = allMoves[Moves.TACKLE]; + const moveToCheck = allMoves[MoveId.TACKLE]; vi.spyOn(moveToCheck, "calculateBattleAccuracy"); - await game.classicMode.startBattle([Species.PIKACHU]); - game.move.select(Moves.TACKLE); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(MoveEffectPhase); expect(moveToCheck.calculateBattleAccuracy).toHaveReturnedWith(100); }); const bypassAbilities = [ - [Abilities.MOLD_BREAKER, "Mold Breaker"], - [Abilities.TERAVOLT, "Teravolt"], - [Abilities.TURBOBLAZE, "Turboblaze"], + [AbilityId.MOLD_BREAKER, "Mold Breaker"], + [AbilityId.TERAVOLT, "Teravolt"], + [AbilityId.TURBOBLAZE, "Turboblaze"], ]; bypassAbilities.forEach(ability => { it(`does not affect pokemon with ${ability[1]}`, async () => { - const moveToCheck = allMoves[Moves.CHARM]; + const moveToCheck = allMoves[MoveId.CHARM]; // @ts-ignore ts doesn't know that ability[0] is an ability and not a string... game.override.ability(ability[0]); vi.spyOn(moveToCheck, "calculateBattleAccuracy"); - await game.classicMode.startBattle([Species.PIKACHU]); - game.move.select(Moves.CHARM); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); + game.move.select(MoveId.CHARM); await game.phaseInterceptor.to(MoveEffectPhase); expect(moveToCheck.calculateBattleAccuracy).toHaveReturnedWith(100); diff --git a/test/abilities/zen_mode.test.ts b/test/abilities/zen_mode.test.ts index 1eb27a8f6c7..163df7b1853 100644 --- a/test/abilities/zen_mode.test.ts +++ b/test/abilities/zen_mode.test.ts @@ -1,7 +1,7 @@ import { Status } from "#app/data/status-effect"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -28,20 +28,20 @@ describe("Abilities - ZEN MODE", () => { game.override .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) .enemyLevel(5) - .ability(Abilities.ZEN_MODE) - .moveset(Moves.SPLASH) - .enemyMoveset(Moves.SEISMIC_TOSS); + .ability(AbilityId.ZEN_MODE) + .moveset(MoveId.SPLASH) + .enemyMoveset(MoveId.SEISMIC_TOSS); }); it("shouldn't change form when taking damage if not dropping below 50% HP", async () => { - await game.classicMode.startBattle([Species.DARMANITAN]); + await game.classicMode.startBattle([SpeciesId.DARMANITAN]); const darmanitan = game.scene.getPlayerPokemon()!; expect(darmanitan.formIndex).toBe(baseForm); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(darmanitan.getHpRatio()).toBeLessThan(1); @@ -50,13 +50,13 @@ describe("Abilities - ZEN MODE", () => { }); it("should change form when falling below 50% HP", async () => { - await game.classicMode.startBattle([Species.DARMANITAN]); + await game.classicMode.startBattle([SpeciesId.DARMANITAN]); const darmanitan = game.scene.getPlayerPokemon()!; darmanitan.hp = darmanitan.getMaxHp() / 2 + 1; expect(darmanitan.formIndex).toBe(baseForm); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(darmanitan.getHpRatio()).toBeLessThan(0.5); @@ -64,18 +64,18 @@ describe("Abilities - ZEN MODE", () => { }); it("should stay zen mode when fainted", async () => { - await game.classicMode.startBattle([Species.DARMANITAN, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.DARMANITAN, SpeciesId.CHARIZARD]); const darmanitan = game.scene.getPlayerPokemon()!; darmanitan.hp = darmanitan.getMaxHp() / 2 + 1; expect(darmanitan.formIndex).toBe(baseForm); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(darmanitan.getHpRatio()).toBeLessThan(0.5); expect(darmanitan.formIndex).toBe(zenForm); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.killPokemon(darmanitan); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -87,10 +87,10 @@ describe("Abilities - ZEN MODE", () => { it("should switch to base form on arena reset", async () => { game.override.startingWave(4); game.override.starterForms({ - [Species.DARMANITAN]: zenForm, + [SpeciesId.DARMANITAN]: zenForm, }); - await game.classicMode.startBattle([Species.MAGIKARP, Species.DARMANITAN]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.DARMANITAN]); const darmanitan = game.scene.getPlayerParty()[1]; darmanitan.hp = 1; @@ -100,7 +100,7 @@ describe("Abilities - ZEN MODE", () => { darmanitan.status = new Status(StatusEffect.FAINT); expect(darmanitan.isFainted()).toBe(true); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.toNextWave(); diff --git a/test/abilities/zero_to_hero.test.ts b/test/abilities/zero_to_hero.test.ts index c159d007765..90e10c89ca1 100644 --- a/test/abilities/zero_to_hero.test.ts +++ b/test/abilities/zero_to_hero.test.ts @@ -1,9 +1,9 @@ import { Status } from "#app/data/status-effect"; import { QuietFormChangePhase } from "#app/phases/quiet-form-change-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -28,18 +28,18 @@ describe("Abilities - ZERO TO HERO", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .moveset(Moves.SPLASH) - .enemyMoveset(Moves.SPLASH) - .enemyAbility(Abilities.BALL_FETCH); + .moveset(MoveId.SPLASH) + .enemyMoveset(MoveId.SPLASH) + .enemyAbility(AbilityId.BALL_FETCH); }); it("should swap to base form on arena reset", async () => { game.override.startingWave(4); game.override.starterForms({ - [Species.PALAFIN]: heroForm, + [SpeciesId.PALAFIN]: heroForm, }); - await game.classicMode.startBattle([Species.FEEBAS, Species.PALAFIN, Species.PALAFIN]); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.PALAFIN, SpeciesId.PALAFIN]); const palafin1 = game.scene.getPlayerParty()[1]; const palafin2 = game.scene.getPlayerParty()[2]; @@ -49,7 +49,7 @@ describe("Abilities - ZERO TO HERO", () => { palafin2.status = new Status(StatusEffect.FAINT); expect(palafin2.isFainted()).toBe(true); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to(TurnEndPhase); game.doSelectModifier(); @@ -61,7 +61,7 @@ describe("Abilities - ZERO TO HERO", () => { }); it("should swap to Hero form when switching out during a battle", async () => { - await game.classicMode.startBattle([Species.PALAFIN, Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.PALAFIN, SpeciesId.FEEBAS]); const palafin = game.scene.getPlayerPokemon()!; expect(palafin.formIndex).toBe(baseForm); @@ -72,12 +72,12 @@ describe("Abilities - ZERO TO HERO", () => { }); it("should not swap to Hero form if switching due to faint", async () => { - await game.classicMode.startBattle([Species.PALAFIN, Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.PALAFIN, SpeciesId.FEEBAS]); const palafin = game.scene.getPlayerPokemon()!; expect(palafin.formIndex).toBe(baseForm); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.killPokemon(palafin); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -86,15 +86,15 @@ describe("Abilities - ZERO TO HERO", () => { it("should stay hero form if fainted and then revived", async () => { game.override.starterForms({ - [Species.PALAFIN]: heroForm, + [SpeciesId.PALAFIN]: heroForm, }); - await game.classicMode.startBattle([Species.PALAFIN, Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.PALAFIN, SpeciesId.FEEBAS]); const palafin = game.scene.getPlayerPokemon()!; expect(palafin.formIndex).toBe(heroForm); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.killPokemon(palafin); game.doSelectPartyPokemon(1); await game.toNextTurn(); diff --git a/test/arena/arena_gravity.test.ts b/test/arena/arena_gravity.test.ts index 33a1631ad18..776bfa0a564 100644 --- a/test/arena/arena_gravity.test.ts +++ b/test/arena/arena_gravity.test.ts @@ -1,10 +1,10 @@ import { BattlerIndex } from "#app/battle"; import { allMoves } from "#app/data/data-lists"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -27,31 +27,31 @@ describe("Arena - Gravity", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .moveset([Moves.TACKLE, Moves.GRAVITY, Moves.FISSURE]) - .ability(Abilities.UNNERVE) - .enemyAbility(Abilities.BALL_FETCH) - .enemySpecies(Species.SHUCKLE) - .enemyMoveset(Moves.SPLASH) + .moveset([MoveId.TACKLE, MoveId.GRAVITY, MoveId.FISSURE]) + .ability(AbilityId.UNNERVE) + .enemyAbility(AbilityId.BALL_FETCH) + .enemySpecies(SpeciesId.SHUCKLE) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(5); }); // Reference: https://bulbapedia.bulbagarden.net/wiki/Gravity_(move) it("non-OHKO move accuracy is multiplied by 1.67", async () => { - const moveToCheck = allMoves[Moves.TACKLE]; + const moveToCheck = allMoves[MoveId.TACKLE]; vi.spyOn(moveToCheck, "calculateBattleAccuracy"); // Setup Gravity on first turn - await game.classicMode.startBattle([Species.PIKACHU]); - game.move.select(Moves.GRAVITY); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); + game.move.select(MoveId.GRAVITY); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.arena.getTag(ArenaTagType.GRAVITY)).toBeDefined(); // Use non-OHKO move on second turn await game.toNextTurn(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("MoveEffectPhase"); expect(moveToCheck.calculateBattleAccuracy).toHaveLastReturnedWith(100 * 1.67); @@ -59,20 +59,20 @@ describe("Arena - Gravity", () => { it("OHKO move accuracy is not affected", async () => { /** See Fissure {@link https://bulbapedia.bulbagarden.net/wiki/Fissure_(move)} */ - const moveToCheck = allMoves[Moves.FISSURE]; + const moveToCheck = allMoves[MoveId.FISSURE]; vi.spyOn(moveToCheck, "calculateBattleAccuracy"); // Setup Gravity on first turn - await game.classicMode.startBattle([Species.PIKACHU]); - game.move.select(Moves.GRAVITY); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); + game.move.select(MoveId.GRAVITY); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.arena.getTag(ArenaTagType.GRAVITY)).toBeDefined(); // Use OHKO move on second turn await game.toNextTurn(); - game.move.select(Moves.FISSURE); + game.move.select(MoveId.FISSURE); await game.phaseInterceptor.to("MoveEffectPhase"); expect(moveToCheck.calculateBattleAccuracy).toHaveLastReturnedWith(30); @@ -80,51 +80,51 @@ describe("Arena - Gravity", () => { describe("Against flying types", () => { it("can be hit by ground-type moves now", async () => { - game.override.enemySpecies(Species.PIDGEOT).moveset([Moves.GRAVITY, Moves.EARTHQUAKE]); + game.override.enemySpecies(SpeciesId.PIDGEOT).moveset([MoveId.GRAVITY, MoveId.EARTHQUAKE]); - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); const pidgeot = game.scene.getEnemyPokemon()!; vi.spyOn(pidgeot, "getAttackTypeEffectiveness"); // Try earthquake on 1st turn (fails!); - game.move.select(Moves.EARTHQUAKE); + game.move.select(MoveId.EARTHQUAKE); await game.phaseInterceptor.to("TurnEndPhase"); expect(pidgeot.getAttackTypeEffectiveness).toHaveLastReturnedWith(0); // Setup Gravity on 2nd turn await game.toNextTurn(); - game.move.select(Moves.GRAVITY); + game.move.select(MoveId.GRAVITY); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.arena.getTag(ArenaTagType.GRAVITY)).toBeDefined(); // Use ground move on 3rd turn await game.toNextTurn(); - game.move.select(Moves.EARTHQUAKE); + game.move.select(MoveId.EARTHQUAKE); await game.phaseInterceptor.to("TurnEndPhase"); expect(pidgeot.getAttackTypeEffectiveness).toHaveLastReturnedWith(1); }); it("keeps super-effective moves super-effective after using gravity", async () => { - game.override.enemySpecies(Species.PIDGEOT).moveset([Moves.GRAVITY, Moves.THUNDERBOLT]); + game.override.enemySpecies(SpeciesId.PIDGEOT).moveset([MoveId.GRAVITY, MoveId.THUNDERBOLT]); - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); const pidgeot = game.scene.getEnemyPokemon()!; vi.spyOn(pidgeot, "getAttackTypeEffectiveness"); // Setup Gravity on 1st turn - game.move.select(Moves.GRAVITY); + game.move.select(MoveId.GRAVITY); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.arena.getTag(ArenaTagType.GRAVITY)).toBeDefined(); // Use electric move on 2nd turn await game.toNextTurn(); - game.move.select(Moves.THUNDERBOLT); + game.move.select(MoveId.THUNDERBOLT); await game.phaseInterceptor.to("TurnEndPhase"); expect(pidgeot.getAttackTypeEffectiveness).toHaveLastReturnedWith(2); @@ -132,19 +132,19 @@ describe("Arena - Gravity", () => { }); it("cancels Fly if its user is semi-invulnerable", async () => { - game.override.enemySpecies(Species.SNORLAX).enemyMoveset(Moves.FLY).moveset([Moves.GRAVITY, Moves.SPLASH]); + game.override.enemySpecies(SpeciesId.SNORLAX).enemyMoveset(MoveId.FLY).moveset([MoveId.GRAVITY, MoveId.SPLASH]); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const charizard = game.scene.getPlayerPokemon()!; const snorlax = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(snorlax.getTag(BattlerTagType.FLYING)).toBeDefined(); - game.move.select(Moves.GRAVITY); + game.move.select(MoveId.GRAVITY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); diff --git a/test/arena/grassy_terrain.test.ts b/test/arena/grassy_terrain.test.ts index 05b57d210de..832f4400cf4 100644 --- a/test/arena/grassy_terrain.test.ts +++ b/test/arena/grassy_terrain.test.ts @@ -1,7 +1,7 @@ import { allMoves } from "#app/data/data-lists"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -25,43 +25,43 @@ describe("Arena - Grassy Terrain", () => { .battleStyle("single") .disableCrits() .enemyLevel(1) - .enemySpecies(Species.SHUCKLE) - .enemyAbility(Abilities.STURDY) - .enemyMoveset(Moves.FLY) - .moveset([Moves.GRASSY_TERRAIN, Moves.EARTHQUAKE]) - .ability(Abilities.NO_GUARD); + .enemySpecies(SpeciesId.SHUCKLE) + .enemyAbility(AbilityId.STURDY) + .enemyMoveset(MoveId.FLY) + .moveset([MoveId.GRASSY_TERRAIN, MoveId.EARTHQUAKE]) + .ability(AbilityId.NO_GUARD); }); it("halves the damage of Earthquake", async () => { - await game.classicMode.startBattle([Species.TAUROS]); + await game.classicMode.startBattle([SpeciesId.TAUROS]); - const eq = allMoves[Moves.EARTHQUAKE]; + const eq = allMoves[MoveId.EARTHQUAKE]; vi.spyOn(eq, "calculateBattlePower"); - game.move.select(Moves.EARTHQUAKE); + game.move.select(MoveId.EARTHQUAKE); await game.toNextTurn(); expect(eq.calculateBattlePower).toHaveReturnedWith(100); - game.move.select(Moves.GRASSY_TERRAIN); + game.move.select(MoveId.GRASSY_TERRAIN); await game.toNextTurn(); - game.move.select(Moves.EARTHQUAKE); + game.move.select(MoveId.EARTHQUAKE); await game.phaseInterceptor.to("BerryPhase"); expect(eq.calculateBattlePower).toHaveReturnedWith(50); }); it("Does not halve the damage of Earthquake if opponent is not grounded", async () => { - await game.classicMode.startBattle([Species.NINJASK]); + await game.classicMode.startBattle([SpeciesId.NINJASK]); - const eq = allMoves[Moves.EARTHQUAKE]; + const eq = allMoves[MoveId.EARTHQUAKE]; vi.spyOn(eq, "calculateBattlePower"); - game.move.select(Moves.GRASSY_TERRAIN); + game.move.select(MoveId.GRASSY_TERRAIN); await game.toNextTurn(); - game.move.select(Moves.EARTHQUAKE); + game.move.select(MoveId.EARTHQUAKE); await game.phaseInterceptor.to("BerryPhase"); expect(eq.calculateBattlePower).toHaveReturnedWith(100); diff --git a/test/arena/weather_fog.test.ts b/test/arena/weather_fog.test.ts index 69f167b8cf1..24c07d26cba 100644 --- a/test/arena/weather_fog.test.ts +++ b/test/arena/weather_fog.test.ts @@ -1,8 +1,8 @@ import { allMoves } from "#app/data/data-lists"; -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { WeatherType } from "#enums/weather-type"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -25,20 +25,20 @@ describe("Weather - Fog", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.weather(WeatherType.FOG).battleStyle("single"); - game.override.moveset([Moves.TACKLE]); - game.override.ability(Abilities.BALL_FETCH); - game.override.enemyAbility(Abilities.BALL_FETCH); - game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyMoveset([Moves.SPLASH]); + game.override.moveset([MoveId.TACKLE]); + game.override.ability(AbilityId.BALL_FETCH); + game.override.enemyAbility(AbilityId.BALL_FETCH); + game.override.enemySpecies(SpeciesId.MAGIKARP); + game.override.enemyMoveset([MoveId.SPLASH]); }); it("move accuracy is multiplied by 90%", async () => { - const moveToCheck = allMoves[Moves.TACKLE]; + const moveToCheck = allMoves[MoveId.TACKLE]; vi.spyOn(moveToCheck, "calculateBattleAccuracy"); - await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.TACKLE); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(MoveEffectPhase); expect(moveToCheck.calculateBattleAccuracy).toHaveReturnedWith(100 * 0.9); diff --git a/test/arena/weather_hail.test.ts b/test/arena/weather_hail.test.ts index 2fa4f71d8ca..072fbd20498 100644 --- a/test/arena/weather_hail.test.ts +++ b/test/arena/weather_hail.test.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { WeatherType } from "#enums/weather-type"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -25,15 +25,15 @@ describe("Weather - Hail", () => { game.override .weather(WeatherType.HAIL) .battleStyle("single") - .moveset(Moves.SPLASH) - .enemyMoveset(Moves.SPLASH) - .enemySpecies(Species.MAGIKARP); + .moveset(MoveId.SPLASH) + .enemyMoveset(MoveId.SPLASH) + .enemySpecies(SpeciesId.MAGIKARP); }); it("inflicts damage equal to 1/16 of Pokemon's max HP at turn end", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -44,10 +44,10 @@ describe("Weather - Hail", () => { }); it("does not inflict damage to a Pokemon that is underwater (Dive) or underground (Dig)", async () => { - game.override.moveset([Moves.DIG]); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.moveset([MoveId.DIG]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(Moves.DIG); + game.move.select(MoveId.DIG); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -60,9 +60,9 @@ describe("Weather - Hail", () => { }); it("does not inflict damage to Ice type Pokemon", async () => { - await game.classicMode.startBattle([Species.CLOYSTER]); + await game.classicMode.startBattle([SpeciesId.CLOYSTER]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); diff --git a/test/arena/weather_sandstorm.test.ts b/test/arena/weather_sandstorm.test.ts index e7620f6cf30..61001abe1f4 100644 --- a/test/arena/weather_sandstorm.test.ts +++ b/test/arena/weather_sandstorm.test.ts @@ -1,7 +1,7 @@ -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { Stat } from "#app/enums/stat"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { WeatherType } from "#enums/weather-type"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -26,15 +26,15 @@ describe("Weather - Sandstorm", () => { game.override .weather(WeatherType.SANDSTORM) .battleStyle("single") - .moveset(Moves.SPLASH) - .enemyMoveset(Moves.SPLASH) - .enemySpecies(Species.MAGIKARP); + .moveset(MoveId.SPLASH) + .enemyMoveset(MoveId.SPLASH) + .enemySpecies(SpeciesId.MAGIKARP); }); it("inflicts damage equal to 1/16 of Pokemon's max HP at turn end", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); @@ -44,10 +44,10 @@ describe("Weather - Sandstorm", () => { }); it("does not inflict damage to a Pokemon that is underwater (Dive) or underground (Dig)", async () => { - game.override.moveset([Moves.DIVE]); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.moveset([MoveId.DIVE]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(Moves.DIVE); + game.move.select(MoveId.DIVE); await game.phaseInterceptor.to("TurnEndPhase"); @@ -61,14 +61,14 @@ describe("Weather - Sandstorm", () => { it("does not inflict damage to Rock, Ground and Steel type Pokemon", async () => { game.override .battleStyle("double") - .enemySpecies(Species.SANDSHREW) - .ability(Abilities.BALL_FETCH) - .enemyAbility(Abilities.BALL_FETCH); + .enemySpecies(SpeciesId.SANDSHREW) + .ability(AbilityId.BALL_FETCH) + .enemyAbility(AbilityId.BALL_FETCH); - await game.classicMode.startBattle([Species.ROCKRUFF, Species.KLINK]); + await game.classicMode.startBattle([SpeciesId.ROCKRUFF, SpeciesId.KLINK]); - game.move.select(Moves.SPLASH, 0); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 0); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -78,7 +78,7 @@ describe("Weather - Sandstorm", () => { }); it("increases Rock type Pokemon Sp.Def by 50%", async () => { - await game.classicMode.startBattle([Species.ROCKRUFF]); + await game.classicMode.startBattle([SpeciesId.ROCKRUFF]); const playerPokemon = game.scene.getPlayerPokemon()!; const playerSpdef = playerPokemon.getStat(Stat.SPDEF); diff --git a/test/arena/weather_strong_winds.test.ts b/test/arena/weather_strong_winds.test.ts index b996d8bf62a..8b3c2562e6f 100644 --- a/test/arena/weather_strong_winds.test.ts +++ b/test/arena/weather_strong_winds.test.ts @@ -1,9 +1,9 @@ import { allMoves } from "#app/data/data-lists"; import { StatusEffect } from "#app/enums/status-effect"; import { TurnStartPhase } from "#app/phases/turn-start-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -26,66 +26,66 @@ describe("Weather - Strong Winds", () => { game = new GameManager(phaserGame); game.override.battleStyle("single"); game.override.startingLevel(10); - game.override.enemySpecies(Species.TAILLOW); - game.override.enemyAbility(Abilities.DELTA_STREAM); - game.override.moveset([Moves.THUNDERBOLT, Moves.ICE_BEAM, Moves.ROCK_SLIDE]); + game.override.enemySpecies(SpeciesId.TAILLOW); + game.override.enemyAbility(AbilityId.DELTA_STREAM); + game.override.moveset([MoveId.THUNDERBOLT, MoveId.ICE_BEAM, MoveId.ROCK_SLIDE]); }); it("electric type move is not very effective on Rayquaza", async () => { - game.override.enemySpecies(Species.RAYQUAZA); + game.override.enemySpecies(SpeciesId.RAYQUAZA); - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); const pikachu = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.THUNDERBOLT); + game.move.select(MoveId.THUNDERBOLT); await game.phaseInterceptor.to(TurnStartPhase); - expect(enemy.getAttackTypeEffectiveness(allMoves[Moves.THUNDERBOLT].type, pikachu)).toBe(0.5); + expect(enemy.getAttackTypeEffectiveness(allMoves[MoveId.THUNDERBOLT].type, pikachu)).toBe(0.5); }); it("electric type move is neutral for flying type pokemon", async () => { - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); const pikachu = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.THUNDERBOLT); + game.move.select(MoveId.THUNDERBOLT); await game.phaseInterceptor.to(TurnStartPhase); - expect(enemy.getAttackTypeEffectiveness(allMoves[Moves.THUNDERBOLT].type, pikachu)).toBe(1); + expect(enemy.getAttackTypeEffectiveness(allMoves[MoveId.THUNDERBOLT].type, pikachu)).toBe(1); }); it("ice type move is neutral for flying type pokemon", async () => { - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); const pikachu = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.ICE_BEAM); + game.move.select(MoveId.ICE_BEAM); await game.phaseInterceptor.to(TurnStartPhase); - expect(enemy.getAttackTypeEffectiveness(allMoves[Moves.ICE_BEAM].type, pikachu)).toBe(1); + expect(enemy.getAttackTypeEffectiveness(allMoves[MoveId.ICE_BEAM].type, pikachu)).toBe(1); }); it("rock type move is neutral for flying type pokemon", async () => { - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); const pikachu = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.ROCK_SLIDE); + game.move.select(MoveId.ROCK_SLIDE); await game.phaseInterceptor.to(TurnStartPhase); - expect(enemy.getAttackTypeEffectiveness(allMoves[Moves.ROCK_SLIDE].type, pikachu)).toBe(1); + expect(enemy.getAttackTypeEffectiveness(allMoves[MoveId.ROCK_SLIDE].type, pikachu)).toBe(1); }); it("weather goes away when last trainer pokemon dies to indirect damage", async () => { game.override.enemyStatusEffect(StatusEffect.POISON); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const enemy = game.scene.getEnemyPokemon()!; enemy.hp = 1; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.arena.weather?.weatherType).toBeUndefined(); diff --git a/test/battle/ability_swap.test.ts b/test/battle/ability_swap.test.ts index c9f91df3a48..64446d703ac 100644 --- a/test/battle/ability_swap.test.ts +++ b/test/battle/ability_swap.test.ts @@ -1,8 +1,8 @@ import { allAbilities } from "#app/data/data-lists"; import { Stat } from "#app/enums/stat"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -24,42 +24,42 @@ describe("Test Ability Swapping", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should activate post-summon abilities", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.SPLASH); - game.scene.getPlayerPokemon()?.setTempAbility(allAbilities[Abilities.INTIMIDATE]); + game.move.select(MoveId.SPLASH); + game.scene.getPlayerPokemon()?.setTempAbility(allAbilities[AbilityId.INTIMIDATE]); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(-1); }); it("should remove primal weather when the setter's ability is removed", async () => { - game.override.ability(Abilities.DESOLATE_LAND); - await game.classicMode.startBattle([Species.FEEBAS]); + game.override.ability(AbilityId.DESOLATE_LAND); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.SPLASH); - game.scene.getPlayerPokemon()?.setTempAbility(allAbilities[Abilities.BALL_FETCH]); + game.move.select(MoveId.SPLASH); + game.scene.getPlayerPokemon()?.setTempAbility(allAbilities[AbilityId.BALL_FETCH]); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.weather?.weatherType).toBeUndefined(); }); it("should not activate passive abilities", async () => { - game.override.passiveAbility(Abilities.INTREPID_SWORD); - await game.classicMode.startBattle([Species.FEEBAS]); + game.override.passiveAbility(AbilityId.INTREPID_SWORD); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.SPLASH); - game.scene.getPlayerPokemon()?.setTempAbility(allAbilities[Abilities.BALL_FETCH]); + game.move.select(MoveId.SPLASH); + game.scene.getPlayerPokemon()?.setTempAbility(allAbilities[AbilityId.BALL_FETCH]); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()?.getStatStage(Stat.ATK)).toBe(1); // would be 2 if passive activated again @@ -67,10 +67,10 @@ describe("Test Ability Swapping", () => { // Pickup and Honey Gather are special cases as they're the only abilities to be Unsuppressable but not Unswappable it("should be able to swap pickup", async () => { - game.override.ability(Abilities.PICKUP).enemyAbility(Abilities.INTIMIDATE).moveset(Moves.ROLE_PLAY); - await game.classicMode.startBattle([Species.FEEBAS]); + game.override.ability(AbilityId.PICKUP).enemyAbility(AbilityId.INTIMIDATE).moveset(MoveId.ROLE_PLAY); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.ROLE_PLAY); + game.move.select(MoveId.ROLE_PLAY); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(-1); diff --git a/test/battle/battle-order.test.ts b/test/battle/battle-order.test.ts index 876730169f9..7983f1db1d2 100644 --- a/test/battle/battle-order.test.ts +++ b/test/battle/battle-order.test.ts @@ -1,9 +1,9 @@ import { EnemyCommandPhase } from "#app/phases/enemy-command-phase"; import { SelectTargetPhase } from "#app/phases/select-target-phase"; import { TurnStartPhase } from "#app/phases/turn-start-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -25,21 +25,21 @@ describe("Battle order", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleStyle("single"); - game.override.enemySpecies(Species.MEWTWO); - game.override.enemyAbility(Abilities.INSOMNIA); - game.override.ability(Abilities.INSOMNIA); - game.override.moveset([Moves.TACKLE]); + game.override.enemySpecies(SpeciesId.MEWTWO); + game.override.enemyAbility(AbilityId.INSOMNIA); + game.override.ability(AbilityId.INSOMNIA); + game.override.moveset([MoveId.TACKLE]); }); it("opponent faster than player 50 vs 150", async () => { - await game.classicMode.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; vi.spyOn(playerPokemon, "stats", "get").mockReturnValue([20, 20, 20, 20, 20, 50]); // set playerPokemon's speed to 50 vi.spyOn(enemyPokemon, "stats", "get").mockReturnValue([20, 20, 20, 20, 20, 150]); // set enemyPokemon's speed to 150 - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.run(EnemyCommandPhase); const playerPokemonIndex = playerPokemon.getBattlerIndex(); @@ -51,14 +51,14 @@ describe("Battle order", () => { }, 20000); it("Player faster than opponent 150 vs 50", async () => { - await game.classicMode.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; vi.spyOn(playerPokemon, "stats", "get").mockReturnValue([20, 20, 20, 20, 20, 150]); // set playerPokemon's speed to 150 vi.spyOn(enemyPokemon, "stats", "get").mockReturnValue([20, 20, 20, 20, 20, 50]); // set enemyPokemon's speed to 50 - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.run(EnemyCommandPhase); const playerPokemonIndex = playerPokemon.getBattlerIndex(); @@ -71,7 +71,7 @@ describe("Battle order", () => { it("double - both opponents faster than player 50/50 vs 150/150", async () => { game.override.battleStyle("double"); - await game.classicMode.startBattle([Species.BULBASAUR, Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.BLASTOISE]); const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); @@ -81,8 +81,8 @@ describe("Battle order", () => { const playerIndices = playerPokemon.map(p => p?.getBattlerIndex()); const enemyIndices = enemyPokemon.map(p => p?.getBattlerIndex()); - game.move.select(Moves.TACKLE); - game.move.select(Moves.TACKLE, 1); + game.move.select(MoveId.TACKLE); + game.move.select(MoveId.TACKLE, 1); await game.phaseInterceptor.runFrom(SelectTargetPhase).to(TurnStartPhase, false); const phase = game.scene.getCurrentPhase() as TurnStartPhase; @@ -95,7 +95,7 @@ describe("Battle order", () => { it("double - speed tie except 1 - 100/100 vs 100/150", async () => { game.override.battleStyle("double"); - await game.classicMode.startBattle([Species.BULBASAUR, Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.BLASTOISE]); const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); @@ -105,8 +105,8 @@ describe("Battle order", () => { const playerIndices = playerPokemon.map(p => p?.getBattlerIndex()); const enemyIndices = enemyPokemon.map(p => p?.getBattlerIndex()); - game.move.select(Moves.TACKLE); - game.move.select(Moves.TACKLE, 1); + game.move.select(MoveId.TACKLE); + game.move.select(MoveId.TACKLE, 1); await game.phaseInterceptor.runFrom(SelectTargetPhase).to(TurnStartPhase, false); const phase = game.scene.getCurrentPhase() as TurnStartPhase; @@ -119,7 +119,7 @@ describe("Battle order", () => { it("double - speed tie 100/150 vs 100/150", async () => { game.override.battleStyle("double"); - await game.classicMode.startBattle([Species.BULBASAUR, Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.BLASTOISE]); const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); @@ -130,8 +130,8 @@ describe("Battle order", () => { const playerIndices = playerPokemon.map(p => p?.getBattlerIndex()); const enemyIndices = enemyPokemon.map(p => p?.getBattlerIndex()); - game.move.select(Moves.TACKLE); - game.move.select(Moves.TACKLE, 1); + game.move.select(MoveId.TACKLE); + game.move.select(MoveId.TACKLE, 1); await game.phaseInterceptor.runFrom(SelectTargetPhase).to(TurnStartPhase, false); const phase = game.scene.getCurrentPhase() as TurnStartPhase; diff --git a/test/battle/battle.test.ts b/test/battle/battle.test.ts index 8c4315dcabc..03faf369dd7 100644 --- a/test/battle/battle.test.ts +++ b/test/battle/battle.test.ts @@ -19,13 +19,13 @@ import { VictoryPhase } from "#app/phases/victory-phase"; import GameManager from "#test/testUtils/gameManager"; import { generateStarter } from "#test/testUtils/gameManagerUtils"; import { UiMode } from "#enums/ui-mode"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; import { PlayerGender } from "#enums/player-gender"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { Biome } from "#app/enums/biome"; +import { BiomeId } from "#enums/biome-id"; describe("Test Battle Phase", () => { let phaserGame: Phaser.Game; @@ -91,29 +91,29 @@ describe("Test Battle Phase", () => { }, 20000); it("do attack wave 3 - single battle - regular - OHKO", async () => { - game.override.starterSpecies(Species.MEWTWO); - game.override.enemySpecies(Species.RATTATA); + game.override.starterSpecies(SpeciesId.MEWTWO); + game.override.enemySpecies(SpeciesId.RATTATA); game.override.startingLevel(2000); game.override.startingWave(3).battleStyle("single"); - game.override.moveset([Moves.TACKLE]); - game.override.enemyAbility(Abilities.HYDRATION); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.moveset([MoveId.TACKLE]); + game.override.enemyAbility(AbilityId.HYDRATION); + game.override.enemyMoveset([MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE]); await game.classicMode.startBattle(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.runFrom(EnemyCommandPhase).to(SelectModifierPhase, false); }, 20000); it("do attack wave 3 - single battle - regular - NO OHKO with opponent using non damage attack", async () => { - game.override.starterSpecies(Species.MEWTWO); - game.override.enemySpecies(Species.RATTATA); + game.override.starterSpecies(SpeciesId.MEWTWO); + game.override.enemySpecies(SpeciesId.RATTATA); game.override.startingLevel(5); game.override.startingWave(3); - game.override.moveset([Moves.TACKLE]); - game.override.enemyAbility(Abilities.HYDRATION); - game.override.enemyMoveset([Moves.TAIL_WHIP, Moves.TAIL_WHIP, Moves.TAIL_WHIP, Moves.TAIL_WHIP]); + game.override.moveset([MoveId.TACKLE]); + game.override.enemyAbility(AbilityId.HYDRATION); + game.override.enemyMoveset([MoveId.TAIL_WHIP, MoveId.TAIL_WHIP, MoveId.TAIL_WHIP, MoveId.TAIL_WHIP]); game.override.battleStyle("single"); await game.classicMode.startBattle(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.runFrom(EnemyCommandPhase).to(TurnInitPhase, false); }, 20000); @@ -127,10 +127,10 @@ describe("Test Battle Phase", () => { }, 20000); it("start battle with selected team", async () => { - await game.classicMode.startBattle([Species.CHARIZARD, Species.CHANSEY, Species.MEW]); - expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(Species.CHARIZARD); - expect(game.scene.getPlayerParty()[1].species.speciesId).toBe(Species.CHANSEY); - expect(game.scene.getPlayerParty()[2].species.speciesId).toBe(Species.MEW); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.CHANSEY, SpeciesId.MEW]); + expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(SpeciesId.CHARIZARD); + expect(game.scene.getPlayerParty()[1].species.speciesId).toBe(SpeciesId.CHANSEY); + expect(game.scene.getPlayerParty()[2].species.speciesId).toBe(SpeciesId.MEW); }, 20000); it("test remove random battle seed int", async () => { @@ -204,58 +204,58 @@ describe("Test Battle Phase", () => { it("2vs1", async () => { game.override.battleStyle("single"); - game.override.enemySpecies(Species.MIGHTYENA); - game.override.enemyAbility(Abilities.HYDRATION); - game.override.ability(Abilities.HYDRATION); - await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + game.override.enemySpecies(SpeciesId.MIGHTYENA); + game.override.enemyAbility(AbilityId.HYDRATION); + game.override.ability(AbilityId.HYDRATION); + await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("1vs1", async () => { game.override.battleStyle("single"); - game.override.enemySpecies(Species.MIGHTYENA); - game.override.enemyAbility(Abilities.HYDRATION); - game.override.ability(Abilities.HYDRATION); - await game.classicMode.startBattle([Species.BLASTOISE]); + game.override.enemySpecies(SpeciesId.MIGHTYENA); + game.override.enemyAbility(AbilityId.HYDRATION); + game.override.ability(AbilityId.HYDRATION); + await game.classicMode.startBattle([SpeciesId.BLASTOISE]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("2vs2", async () => { game.override.battleStyle("double"); - game.override.enemySpecies(Species.MIGHTYENA); - game.override.enemyAbility(Abilities.HYDRATION); - game.override.ability(Abilities.HYDRATION); + game.override.enemySpecies(SpeciesId.MIGHTYENA); + game.override.enemyAbility(AbilityId.HYDRATION); + game.override.ability(AbilityId.HYDRATION); game.override.startingWave(3); - await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("4vs2", async () => { game.override.battleStyle("double"); - game.override.enemySpecies(Species.MIGHTYENA); - game.override.enemyAbility(Abilities.HYDRATION); - game.override.ability(Abilities.HYDRATION); + game.override.enemySpecies(SpeciesId.MIGHTYENA); + game.override.enemyAbility(AbilityId.HYDRATION); + game.override.ability(AbilityId.HYDRATION); game.override.startingWave(3); - await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD, Species.DARKRAI, Species.GABITE]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD, SpeciesId.DARKRAI, SpeciesId.GABITE]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("kill opponent pokemon", async () => { - const moveToUse = Moves.SPLASH; + const moveToUse = MoveId.SPLASH; game.override.battleStyle("single"); - game.override.starterSpecies(Species.MEWTWO); - game.override.enemySpecies(Species.RATTATA); - game.override.enemyAbility(Abilities.HYDRATION); - game.override.ability(Abilities.ZEN_MODE); + game.override.starterSpecies(SpeciesId.MEWTWO); + game.override.enemySpecies(SpeciesId.RATTATA); + game.override.enemyAbility(AbilityId.HYDRATION); + game.override.ability(AbilityId.ZEN_MODE); game.override.startingLevel(2000); game.override.startingWave(3); game.override.moveset([moveToUse]); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); - await game.classicMode.startBattle([Species.DARMANITAN, Species.CHARIZARD]); + game.override.enemyMoveset([MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE]); + await game.classicMode.startBattle([SpeciesId.DARMANITAN, SpeciesId.CHARIZARD]); game.move.select(moveToUse); await game.phaseInterceptor.to(DamageAnimPhase, false); @@ -265,16 +265,16 @@ describe("Test Battle Phase", () => { }, 200000); it("to next turn", async () => { - const moveToUse = Moves.SPLASH; + const moveToUse = MoveId.SPLASH; game.override.battleStyle("single"); - game.override.starterSpecies(Species.MEWTWO); - game.override.enemySpecies(Species.RATTATA); - game.override.enemyAbility(Abilities.HYDRATION); - game.override.ability(Abilities.ZEN_MODE); + game.override.starterSpecies(SpeciesId.MEWTWO); + game.override.enemySpecies(SpeciesId.RATTATA); + game.override.enemyAbility(AbilityId.HYDRATION); + game.override.ability(AbilityId.ZEN_MODE); game.override.startingLevel(2000); game.override.startingWave(3); game.override.moveset([moveToUse]); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.enemyMoveset([MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE]); await game.classicMode.startBattle(); const turn = game.scene.currentBattle.turn; game.move.select(moveToUse); @@ -283,18 +283,18 @@ describe("Test Battle Phase", () => { }, 20000); it("does not set new weather if staying in same biome", async () => { - const moveToUse = Moves.SPLASH; + const moveToUse = MoveId.SPLASH; game.override .battleStyle("single") - .starterSpecies(Species.MEWTWO) - .enemySpecies(Species.RATTATA) - .enemyAbility(Abilities.HYDRATION) - .ability(Abilities.ZEN_MODE) + .starterSpecies(SpeciesId.MEWTWO) + .enemySpecies(SpeciesId.RATTATA) + .enemyAbility(AbilityId.HYDRATION) + .ability(AbilityId.ZEN_MODE) .startingLevel(2000) .startingWave(3) - .startingBiome(Biome.LAKE) + .startingBiome(BiomeId.LAKE) .moveset([moveToUse]); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.enemyMoveset([MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE]); await game.classicMode.startBattle(); const waveIndex = game.scene.currentBattle.waveIndex; game.move.select(moveToUse); @@ -307,15 +307,15 @@ describe("Test Battle Phase", () => { }, 20000); it("does not force switch if active pokemon faints at same time as enemy mon and is revived in post-battle", async () => { - const moveToUse = Moves.TAKE_DOWN; + const moveToUse = MoveId.TAKE_DOWN; game.override .battleStyle("single") - .starterSpecies(Species.SAWK) - .enemySpecies(Species.RATTATA) + .starterSpecies(SpeciesId.SAWK) + .enemySpecies(SpeciesId.RATTATA) .startingWave(1) .startingLevel(100) .moveset([moveToUse]) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .startingHeldItems([{ name: "TEMP_STAT_STAGE_BOOSTER", type: Stat.ACC }]); await game.classicMode.startBattle(); diff --git a/test/battle/damage_calculation.test.ts b/test/battle/damage_calculation.test.ts index 1d027a96792..a054ad0f468 100644 --- a/test/battle/damage_calculation.test.ts +++ b/test/battle/damage_calculation.test.ts @@ -1,10 +1,10 @@ import { allMoves } from "#app/data/data-lists"; import type { EnemyPersistentModifier } from "#app/modifier/modifier"; import { modifierTypes } from "#app/modifier/modifier-type"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -27,17 +27,17 @@ describe("Battle Mechanics - Damage Calculation", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemySpecies(Species.SNORLAX) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemySpecies(SpeciesId.SNORLAX) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) .startingLevel(100) .enemyLevel(100) .disableCrits() - .moveset([Moves.TACKLE, Moves.DRAGON_RAGE, Moves.FISSURE, Moves.JUMP_KICK]); + .moveset([MoveId.TACKLE, MoveId.DRAGON_RAGE, MoveId.FISSURE, MoveId.JUMP_KICK]); }); it("Tackle deals expected base damage", async () => { - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const playerPokemon = game.scene.getPlayerPokemon()!; vi.spyOn(playerPokemon, "getEffectiveStat").mockReturnValue(80); @@ -47,19 +47,19 @@ describe("Battle Mechanics - Damage Calculation", () => { // expected base damage = [(2*level/5 + 2) * power * playerATK / enemyDEF / 50] + 2 // = 31.8666... - expect(enemyPokemon.getAttackDamage({ source: playerPokemon, move: allMoves[Moves.TACKLE] }).damage).toBeCloseTo( + expect(enemyPokemon.getAttackDamage({ source: playerPokemon, move: allMoves[MoveId.TACKLE] }).damage).toBeCloseTo( 31, ); }); it("Attacks deal 1 damage at minimum", async () => { - game.override.startingLevel(1).enemySpecies(Species.AGGRON); + game.override.startingLevel(1).enemySpecies(SpeciesId.AGGRON); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const aggron = game.scene.getEnemyPokemon()!; - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("BerryPhase", false); @@ -68,9 +68,9 @@ describe("Battle Mechanics - Damage Calculation", () => { }); it("Attacks deal 1 damage at minimum even with many tokens", async () => { - game.override.startingLevel(1).enemySpecies(Species.AGGRON).enemyAbility(Abilities.STURDY).enemyLevel(10000); + game.override.startingLevel(1).enemySpecies(SpeciesId.AGGRON).enemyAbility(AbilityId.STURDY).enemyLevel(10000); - await game.classicMode.startBattle([Species.SHUCKLE]); + await game.classicMode.startBattle([SpeciesId.SHUCKLE]); const dmg_redux_modifier = modifierTypes.ENEMY_DAMAGE_REDUCTION().newModifier() as EnemyPersistentModifier; dmg_redux_modifier.stackCount = 1000; @@ -78,7 +78,7 @@ describe("Battle Mechanics - Damage Calculation", () => { const aggron = game.scene.getEnemyPokemon()!; - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("BerryPhase", false); @@ -86,35 +86,35 @@ describe("Battle Mechanics - Damage Calculation", () => { }); it("Fixed-damage moves ignore damage multipliers", async () => { - game.override.enemySpecies(Species.DRAGONITE).enemyAbility(Abilities.MULTISCALE); + game.override.enemySpecies(SpeciesId.DRAGONITE).enemyAbility(AbilityId.MULTISCALE); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const magikarp = game.scene.getPlayerPokemon()!; const dragonite = game.scene.getEnemyPokemon()!; - expect(dragonite.getAttackDamage({ source: magikarp, move: allMoves[Moves.DRAGON_RAGE] }).damage).toBe(40); + expect(dragonite.getAttackDamage({ source: magikarp, move: allMoves[MoveId.DRAGON_RAGE] }).damage).toBe(40); }); it("One-hit KO moves ignore damage multipliers", async () => { - game.override.enemySpecies(Species.AGGRON).enemyAbility(Abilities.MULTISCALE); + game.override.enemySpecies(SpeciesId.AGGRON).enemyAbility(AbilityId.MULTISCALE); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const magikarp = game.scene.getPlayerPokemon()!; const aggron = game.scene.getEnemyPokemon()!; - expect(aggron.getAttackDamage({ source: magikarp, move: allMoves[Moves.FISSURE] }).damage).toBe(aggron.hp); + expect(aggron.getAttackDamage({ source: magikarp, move: allMoves[MoveId.FISSURE] }).damage).toBe(aggron.hp); }); it("When the user fails to use Jump Kick with Wonder Guard ability, the damage should be 1.", async () => { - game.override.enemySpecies(Species.GASTLY).ability(Abilities.WONDER_GUARD); + game.override.enemySpecies(SpeciesId.GASTLY).ability(AbilityId.WONDER_GUARD); - await game.classicMode.startBattle([Species.SHEDINJA]); + await game.classicMode.startBattle([SpeciesId.SHEDINJA]); const shedinja = game.scene.getPlayerPokemon()!; - game.move.select(Moves.JUMP_KICK); + game.move.select(MoveId.JUMP_KICK); await game.phaseInterceptor.to("DamageAnimPhase"); @@ -122,10 +122,10 @@ describe("Battle Mechanics - Damage Calculation", () => { }); it("Charizard with odd HP survives Stealth Rock damage twice", async () => { - game.scene.arena.addTag(ArenaTagType.STEALTH_ROCK, 1, Moves.STEALTH_ROCK, 0); - game.override.seed("Charizard Stealth Rock test").enemySpecies(Species.CHARIZARD).enemyAbility(Abilities.BLAZE); + game.scene.arena.addTag(ArenaTagType.STEALTH_ROCK, 1, MoveId.STEALTH_ROCK, 0); + game.override.seed("Charizard Stealth Rock test").enemySpecies(SpeciesId.CHARIZARD).enemyAbility(AbilityId.BLAZE); - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); const charizard = game.scene.getEnemyPokemon()!; diff --git a/test/battle/double_battle.test.ts b/test/battle/double_battle.test.ts index 99c52ea5add..31bfc480c47 100644 --- a/test/battle/double_battle.test.ts +++ b/test/battle/double_battle.test.ts @@ -1,10 +1,10 @@ import { Status } from "#app/data/status-effect"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { GameModes, getGameMode } from "#app/game-mode"; import { BattleEndPhase } from "#app/phases/battle-end-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -33,11 +33,11 @@ describe("Double Battles", () => { // double-battle player's pokemon both fainted in same round, then revive one, and next double battle summons two player's pokemon successfully. // (There were bugs that either only summon one when can summon two, player stuck in switchPhase etc) it("3v2 edge case: player summons 2 pokemon on the next battle after being fainted and revived", async () => { - game.override.battleStyle("double").enemyMoveset(Moves.SPLASH).moveset(Moves.SPLASH); - await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARIZARD, Species.SQUIRTLE]); + game.override.battleStyle("double").enemyMoveset(MoveId.SPLASH).moveset(MoveId.SPLASH); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARIZARD, SpeciesId.SQUIRTLE]); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); for (const pokemon of game.scene.getPlayerField()) { pokemon.hp = 0; @@ -50,7 +50,7 @@ describe("Double Battles", () => { await game.phaseInterceptor.to(BattleEndPhase); game.doSelectModifier(); - const charizard = game.scene.getPlayerParty().findIndex(p => p.species.speciesId === Species.CHARIZARD); + const charizard = game.scene.getPlayerParty().findIndex(p => p.species.speciesId === SpeciesId.CHARIZARD); game.doRevivePokemon(charizard); await game.phaseInterceptor.to(TurnInitPhase); @@ -67,19 +67,19 @@ describe("Double Battles", () => { }); game.override - .enemyMoveset(Moves.SPLASH) - .moveset(Moves.SPLASH) - .enemyAbility(Abilities.BALL_FETCH) - .ability(Abilities.BALL_FETCH); + .enemyMoveset(MoveId.SPLASH) + .moveset(MoveId.SPLASH) + .enemyAbility(AbilityId.BALL_FETCH) + .ability(AbilityId.BALL_FETCH); // Play through endless, waves 1 to 9, counting number of double battles from waves 2 to 9 - await game.classicMode.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); game.scene.gameMode = getGameMode(GameModes.ENDLESS); for (let i = 0; i < DOUBLE_CHANCE; i++) { rngSweepProgress = (i + 0.5) / DOUBLE_CHANCE; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.toNextWave(); diff --git a/test/battle/inverse_battle.test.ts b/test/battle/inverse_battle.test.ts index 168df0b9505..b0d9c7bb755 100644 --- a/test/battle/inverse_battle.test.ts +++ b/test/battle/inverse_battle.test.ts @@ -1,10 +1,10 @@ import { BattlerIndex } from "#app/battle"; import { PokemonType } from "#enums/pokemon-type"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; import { Challenges } from "#enums/challenges"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -31,22 +31,22 @@ describe("Inverse Battle", () => { game.override .battleStyle("single") - .starterSpecies(Species.FEEBAS) - .ability(Abilities.BALL_FETCH) - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .starterSpecies(SpeciesId.FEEBAS) + .ability(AbilityId.BALL_FETCH) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("Immune types are 2x effective - Thunderbolt against Ground Type", async () => { - game.override.moveset([Moves.THUNDERBOLT]).enemySpecies(Species.SANDSHREW); + game.override.moveset([MoveId.THUNDERBOLT]).enemySpecies(SpeciesId.SANDSHREW); await game.challengeMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.THUNDERBOLT); + game.move.select(MoveId.THUNDERBOLT); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -54,14 +54,14 @@ describe("Inverse Battle", () => { }); it("2x effective types are 0.5x effective - Thunderbolt against Flying Type", async () => { - game.override.moveset([Moves.THUNDERBOLT]).enemySpecies(Species.PIDGEY); + game.override.moveset([MoveId.THUNDERBOLT]).enemySpecies(SpeciesId.PIDGEY); await game.challengeMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.THUNDERBOLT); + game.move.select(MoveId.THUNDERBOLT); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -69,14 +69,14 @@ describe("Inverse Battle", () => { }); it("0.5x effective types are 2x effective - Thunderbolt against Electric Type", async () => { - game.override.moveset([Moves.THUNDERBOLT]).enemySpecies(Species.CHIKORITA); + game.override.moveset([MoveId.THUNDERBOLT]).enemySpecies(SpeciesId.CHIKORITA); await game.challengeMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.THUNDERBOLT); + game.move.select(MoveId.THUNDERBOLT); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -84,8 +84,8 @@ describe("Inverse Battle", () => { }); it("Stealth Rock follows the inverse matchups - Stealth Rock against Charizard deals 1/32 of max HP", async () => { - game.scene.arena.addTag(ArenaTagType.STEALTH_ROCK, 1, Moves.STEALTH_ROCK, 0); - game.override.enemySpecies(Species.CHARIZARD).enemyLevel(100); + game.scene.arena.addTag(ArenaTagType.STEALTH_ROCK, 1, MoveId.STEALTH_ROCK, 0); + game.override.enemySpecies(SpeciesId.CHARIZARD).enemyLevel(100); await game.challengeMode.startBattle(); @@ -107,14 +107,14 @@ describe("Inverse Battle", () => { }); it("Freeze Dry is 2x effective against Water Type like other Ice type Move - Freeze Dry against Squirtle", async () => { - game.override.moveset([Moves.FREEZE_DRY]).enemySpecies(Species.SQUIRTLE); + game.override.moveset([MoveId.FREEZE_DRY]).enemySpecies(SpeciesId.SQUIRTLE); await game.challengeMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -122,13 +122,13 @@ describe("Inverse Battle", () => { }); it("Water Absorb should heal against water moves - Water Absorb against Water gun", async () => { - game.override.moveset([Moves.WATER_GUN]).enemyAbility(Abilities.WATER_ABSORB); + game.override.moveset([MoveId.WATER_GUN]).enemyAbility(AbilityId.WATER_ABSORB); await game.challengeMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; enemy.hp = enemy.getMaxHp() - 1; - game.move.select(Moves.WATER_GUN); + game.move.select(MoveId.WATER_GUN); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -136,13 +136,13 @@ describe("Inverse Battle", () => { }); it("Fire type does not get burned - Will-O-Wisp against Charmander", async () => { - game.override.moveset([Moves.WILL_O_WISP]).enemySpecies(Species.CHARMANDER); + game.override.moveset([MoveId.WILL_O_WISP]).enemySpecies(SpeciesId.CHARMANDER); await game.challengeMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.WILL_O_WISP); + game.move.select(MoveId.WILL_O_WISP); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceHit(); await game.phaseInterceptor.to("MoveEndPhase"); @@ -151,13 +151,13 @@ describe("Inverse Battle", () => { }); it("Electric type does not get paralyzed - Nuzzle against Pikachu", async () => { - game.override.moveset([Moves.NUZZLE]).enemySpecies(Species.PIKACHU).enemyLevel(50); + game.override.moveset([MoveId.NUZZLE]).enemySpecies(SpeciesId.PIKACHU).enemyLevel(50); await game.challengeMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.NUZZLE); + game.move.select(MoveId.NUZZLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -165,13 +165,13 @@ describe("Inverse Battle", () => { }); it("Ground type is not immune to Thunder Wave - Thunder Wave against Sandshrew", async () => { - game.override.moveset([Moves.THUNDER_WAVE]).enemySpecies(Species.SANDSHREW); + game.override.moveset([MoveId.THUNDER_WAVE]).enemySpecies(SpeciesId.SANDSHREW); await game.challengeMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.THUNDER_WAVE); + game.move.select(MoveId.THUNDER_WAVE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceHit(); await game.phaseInterceptor.to("MoveEndPhase"); @@ -180,21 +180,21 @@ describe("Inverse Battle", () => { }); it("Anticipation should trigger on 2x effective moves", async () => { - game.override.moveset([Moves.THUNDERBOLT]).enemySpecies(Species.SANDSHREW).enemyAbility(Abilities.ANTICIPATION); + game.override.moveset([MoveId.THUNDERBOLT]).enemySpecies(SpeciesId.SANDSHREW).enemyAbility(AbilityId.ANTICIPATION); await game.challengeMode.startBattle(); - expect(game.scene.getEnemyPokemon()?.waveData.abilitiesApplied).toContain(Abilities.ANTICIPATION); + expect(game.scene.getEnemyPokemon()?.waveData.abilitiesApplied).toContain(AbilityId.ANTICIPATION); }); it("Conversion 2 should change the type to the resistive type - Conversion 2 against Dragonite", async () => { - game.override.moveset([Moves.CONVERSION_2]).enemyMoveset(Moves.DRAGON_CLAW); + game.override.moveset([MoveId.CONVERSION_2]).enemyMoveset(MoveId.DRAGON_CLAW); await game.challengeMode.startBattle(); const player = game.scene.getPlayerPokemon()!; - game.move.select(Moves.CONVERSION_2); + game.move.select(MoveId.CONVERSION_2); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -203,14 +203,14 @@ describe("Inverse Battle", () => { }); it("Flying Press should be 0.25x effective against Grass + Dark Type - Flying Press against Meowscarada", async () => { - game.override.moveset([Moves.FLYING_PRESS]).enemySpecies(Species.MEOWSCARADA); + game.override.moveset([MoveId.FLYING_PRESS]).enemySpecies(SpeciesId.MEOWSCARADA); await game.challengeMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FLYING_PRESS); + game.move.select(MoveId.FLYING_PRESS); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -218,14 +218,14 @@ describe("Inverse Battle", () => { }); it("Scrappy ability has no effect - Tackle against Ghost Type still 2x effective with Scrappy", async () => { - game.override.moveset([Moves.TACKLE]).ability(Abilities.SCRAPPY).enemySpecies(Species.GASTLY); + game.override.moveset([MoveId.TACKLE]).ability(AbilityId.SCRAPPY).enemySpecies(SpeciesId.GASTLY); await game.challengeMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -233,18 +233,18 @@ describe("Inverse Battle", () => { }); it("FORESIGHT has no effect - Tackle against Ghost Type still 2x effective with Foresight", async () => { - game.override.moveset([Moves.FORESIGHT, Moves.TACKLE]).enemySpecies(Species.GASTLY); + game.override.moveset([MoveId.FORESIGHT, MoveId.TACKLE]).enemySpecies(SpeciesId.GASTLY); await game.challengeMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FORESIGHT); + game.move.select(MoveId.FORESIGHT); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); diff --git a/test/battle/special_battle.test.ts b/test/battle/special_battle.test.ts index 8d75e530ca6..c1a948a0759 100644 --- a/test/battle/special_battle.test.ts +++ b/test/battle/special_battle.test.ts @@ -1,8 +1,8 @@ import { CommandPhase } from "#app/phases/command-phase"; import { UiMode } from "#enums/ui-mode"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -24,73 +24,73 @@ describe("Test Battle Phase", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .enemySpecies(Species.RATTATA) + .enemySpecies(SpeciesId.RATTATA) .startingLevel(2000) - .moveset([Moves.TACKLE]) - .enemyAbility(Abilities.HYDRATION) - .ability(Abilities.HYDRATION) - .enemyMoveset(Moves.TACKLE); + .moveset([MoveId.TACKLE]) + .enemyAbility(AbilityId.HYDRATION) + .ability(AbilityId.HYDRATION) + .enemyMoveset(MoveId.TACKLE); }); it("startBattle 2vs1 boss", async () => { game.override.battleStyle("single").startingWave(10); - await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs2 boss", async () => { game.override.battleStyle("double").startingWave(10); - await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs2 trainer", async () => { game.override.battleStyle("double").startingWave(5); - await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs1 trainer", async () => { game.override.battleStyle("single").startingWave(5); - await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs1 rival", async () => { game.override.battleStyle("single").startingWave(8); - await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs2 rival", async () => { game.override.battleStyle("double").startingWave(8); - await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 1vs1 trainer", async () => { game.override.battleStyle("single").startingWave(5); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs2 trainer", async () => { game.override.battleStyle("double").startingWave(5); - await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 4vs2 trainer", async () => { game.override.battleStyle("double").startingWave(5); - await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD, Species.DARKRAI, Species.GABITE]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD, SpeciesId.DARKRAI, SpeciesId.GABITE]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); diff --git a/test/battlerTags/substitute.test.ts b/test/battlerTags/substitute.test.ts index 827b9f48f85..ce16cfdbcd9 100644 --- a/test/battlerTags/substitute.test.ts +++ b/test/battlerTags/substitute.test.ts @@ -4,7 +4,7 @@ import type Pokemon from "#app/field/pokemon"; import { MoveResult } from "#app/field/pokemon"; import type BattleScene from "#app/battle-scene"; import { BattlerTagLapseType, BindTag, SubstituteTag } from "#app/data/battler-tags"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#enums/move-id"; import { PokemonAnimType } from "#app/enums/pokemon-anim-type"; import * as messages from "#app/messages"; import { allMoves } from "#app/data/data-lists"; @@ -52,7 +52,7 @@ describe("BattlerTag - SubstituteTag", () => { }); it("sets the tag's HP to 1/4 of the source's max HP (rounded down)", async () => { - const subject = new SubstituteTag(Moves.SUBSTITUTE, mockPokemon.id); + const subject = new SubstituteTag(MoveId.SUBSTITUTE, mockPokemon.id); vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockReturnValue(true); vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); @@ -63,7 +63,7 @@ describe("BattlerTag - SubstituteTag", () => { }); it("triggers on-add effects that bring the source out of focus", async () => { - const subject = new SubstituteTag(Moves.SUBSTITUTE, mockPokemon.id); + const subject = new SubstituteTag(MoveId.SUBSTITUTE, mockPokemon.id); vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockImplementation( (_pokemon, battleAnimType, _fieldAssets?, _delayed?) => { @@ -82,7 +82,7 @@ describe("BattlerTag - SubstituteTag", () => { }); it("removes effects that trap the source", async () => { - const subject = new SubstituteTag(Moves.SUBSTITUTE, mockPokemon.id); + const subject = new SubstituteTag(MoveId.SUBSTITUTE, mockPokemon.id); vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); @@ -104,7 +104,7 @@ describe("BattlerTag - SubstituteTag", () => { }); it("triggers on-remove animation and message", async () => { - const subject = new SubstituteTag(Moves.SUBSTITUTE, mockPokemon.id); + const subject = new SubstituteTag(MoveId.SUBSTITUTE, mockPokemon.id); subject.sourceInFocus = false; vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockImplementation( @@ -133,7 +133,7 @@ describe("BattlerTag - SubstituteTag", () => { getLastXMoves: vi .fn() .mockReturnValue([ - { move: Moves.TACKLE, result: MoveResult.SUCCESS } as TurnMove, + { move: MoveId.TACKLE, result: MoveResult.SUCCESS } as TurnMove, ]) as Pokemon["getLastXMoves"], } as unknown as Pokemon; @@ -141,7 +141,7 @@ describe("BattlerTag - SubstituteTag", () => { }); it("PRE_MOVE lapse triggers pre-move animation", async () => { - const subject = new SubstituteTag(Moves.SUBSTITUTE, mockPokemon.id); + const subject = new SubstituteTag(MoveId.SUBSTITUTE, mockPokemon.id); vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockImplementation( (_pokemon, battleAnimType, _fieldAssets?, _delayed?) => { @@ -160,7 +160,7 @@ describe("BattlerTag - SubstituteTag", () => { }); it("AFTER_MOVE lapse triggers post-move animation", async () => { - const subject = new SubstituteTag(Moves.SUBSTITUTE, mockPokemon.id); + const subject = new SubstituteTag(MoveId.SUBSTITUTE, mockPokemon.id); vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockImplementation( (_pokemon, battleAnimType, _fieldAssets?, _delayed?) => { @@ -180,18 +180,18 @@ describe("BattlerTag - SubstituteTag", () => { // TODO: Figure out how to mock a MoveEffectPhase correctly for this test it.todo("HIT lapse triggers on-hit message", async () => { - const subject = new SubstituteTag(Moves.SUBSTITUTE, mockPokemon.id); + const subject = new SubstituteTag(MoveId.SUBSTITUTE, mockPokemon.id); vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockReturnValue(true); vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); const moveEffectPhase = { - move: allMoves[Moves.TACKLE], + move: allMoves[MoveId.TACKLE], getUserPokemon: vi.fn().mockReturnValue(undefined) as MoveEffectPhase["getUserPokemon"], } as MoveEffectPhase; vi.spyOn(mockPokemon.scene as BattleScene, "getCurrentPhase").mockReturnValue(moveEffectPhase); - vi.spyOn(allMoves[Moves.TACKLE], "hitsSubstitute").mockReturnValue(true); + vi.spyOn(allMoves[MoveId.TACKLE], "hitsSubstitute").mockReturnValue(true); expect(subject.lapse(mockPokemon, BattlerTagLapseType.HIT)).toBeTruthy(); @@ -200,7 +200,7 @@ describe("BattlerTag - SubstituteTag", () => { }); it("CUSTOM lapse flags the tag for removal", async () => { - const subject = new SubstituteTag(Moves.SUBSTITUTE, mockPokemon.id); + const subject = new SubstituteTag(MoveId.SUBSTITUTE, mockPokemon.id); vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockReturnValue(true); vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); @@ -209,7 +209,7 @@ describe("BattlerTag - SubstituteTag", () => { }); it("Unsupported lapse type does nothing", async () => { - const subject = new SubstituteTag(Moves.SUBSTITUTE, mockPokemon.id); + const subject = new SubstituteTag(MoveId.SUBSTITUTE, mockPokemon.id); vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockReturnValue(true); vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); diff --git a/test/boss-pokemon.test.ts b/test/boss-pokemon.test.ts index ef95ae9bcc2..fdfca9249f7 100644 --- a/test/boss-pokemon.test.ts +++ b/test/boss-pokemon.test.ts @@ -1,9 +1,9 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import GameManager from "#test/testUtils/gameManager"; -import { Species } from "#app/enums/species"; +import { SpeciesId } from "#enums/species-id"; import { getPokemonSpecies } from "#app/data/pokemon-species"; -import { Abilities } from "#app/enums/abilities"; -import { Moves } from "#app/enums/moves"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; import { EFFECTIVE_STATS } from "#app/enums/stat"; import type { EnemyPokemon } from "#app/field/pokemon"; import { toDmgValue } from "#app/utils/common"; @@ -29,12 +29,12 @@ describe("Boss Pokemon / Shields", () => { .battleStyle("single") .disableTrainerWaves() .disableCrits() - .enemySpecies(Species.RATTATA) - .enemyMoveset(Moves.SPLASH) + .enemySpecies(SpeciesId.RATTATA) + .enemyMoveset(MoveId.SPLASH) .enemyHeldItems([]) .startingLevel(1000) - .moveset([Moves.FALSE_SWIPE, Moves.SUPER_FANG, Moves.SPLASH, Moves.PSYCHIC]) - .ability(Abilities.NO_GUARD); + .moveset([MoveId.FALSE_SWIPE, MoveId.SUPER_FANG, MoveId.SPLASH, MoveId.PSYCHIC]) + .ability(AbilityId.NO_GUARD); }); it("Pokemon should get shields based on their Species and level and the current wave", async () => { @@ -42,30 +42,30 @@ describe("Boss Pokemon / Shields", () => { let wave = 5; // On normal waves, no shields... - expect(game.scene.getEncounterBossSegments(wave, level, getPokemonSpecies(Species.RATTATA))).toBe(0); + expect(game.scene.getEncounterBossSegments(wave, level, getPokemonSpecies(SpeciesId.RATTATA))).toBe(0); // ... expect (sub)-legendary and mythical Pokemon who always get shields - expect(game.scene.getEncounterBossSegments(wave, level, getPokemonSpecies(Species.MEW))).toBe(2); + expect(game.scene.getEncounterBossSegments(wave, level, getPokemonSpecies(SpeciesId.MEW))).toBe(2); // Pokemon with 670+ BST get an extra shield - expect(game.scene.getEncounterBossSegments(wave, level, getPokemonSpecies(Species.MEWTWO))).toBe(3); + expect(game.scene.getEncounterBossSegments(wave, level, getPokemonSpecies(SpeciesId.MEWTWO))).toBe(3); // Every 10 waves will always be a boss Pokemon with shield(s) wave = 50; - expect(game.scene.getEncounterBossSegments(wave, level, getPokemonSpecies(Species.RATTATA))).toBe(2); + expect(game.scene.getEncounterBossSegments(wave, level, getPokemonSpecies(SpeciesId.RATTATA))).toBe(2); // Every extra 250 waves adds a shield wave += 250; - expect(game.scene.getEncounterBossSegments(wave, level, getPokemonSpecies(Species.RATTATA))).toBe(3); + expect(game.scene.getEncounterBossSegments(wave, level, getPokemonSpecies(SpeciesId.RATTATA))).toBe(3); wave += 750; - expect(game.scene.getEncounterBossSegments(wave, level, getPokemonSpecies(Species.RATTATA))).toBe(6); + expect(game.scene.getEncounterBossSegments(wave, level, getPokemonSpecies(SpeciesId.RATTATA))).toBe(6); // Pokemon above level 100 get an extra shield level = 100; - expect(game.scene.getEncounterBossSegments(wave, level, getPokemonSpecies(Species.RATTATA))).toBe(7); + expect(game.scene.getEncounterBossSegments(wave, level, getPokemonSpecies(SpeciesId.RATTATA))).toBe(7); }); it("should reduce the number of shields if we are in a double battle", async () => { game.override.battleStyle("double").startingWave(150); // Floor 150 > 2 shields / 3 health segments - await game.classicMode.startBattle([Species.MEWTWO]); + await game.classicMode.startBattle([SpeciesId.MEWTWO]); const boss1: EnemyPokemon = game.scene.getEnemyParty()[0]!; const boss2: EnemyPokemon = game.scene.getEnemyParty()[1]!; @@ -78,7 +78,7 @@ describe("Boss Pokemon / Shields", () => { it("shields should stop overflow damage and give stat stage boosts when broken", async () => { game.override.startingWave(150); // Floor 150 > 2 shields / 3 health segments - await game.classicMode.startBattle([Species.MEWTWO]); + await game.classicMode.startBattle([SpeciesId.MEWTWO]); const enemyPokemon = game.scene.getEnemyPokemon()!; const segmentHp = enemyPokemon.getMaxHp() / enemyPokemon.bossSegments; @@ -86,7 +86,7 @@ describe("Boss Pokemon / Shields", () => { expect(enemyPokemon.bossSegments).toBe(3); expect(getTotalStatStageBoosts(enemyPokemon)).toBe(0); - game.move.select(Moves.SUPER_FANG); // Enough to break the first shield + game.move.select(MoveId.SUPER_FANG); // Enough to break the first shield await game.toNextTurn(); // Broke 1st of 2 shields, health at 2/3rd @@ -95,7 +95,7 @@ describe("Boss Pokemon / Shields", () => { // Breaking the shield gives a +1 boost to ATK, DEF, SP ATK, SP DEF or SPD expect(getTotalStatStageBoosts(enemyPokemon)).toBe(1); - game.move.select(Moves.FALSE_SWIPE); // Enough to break last shield but not kill + game.move.select(MoveId.FALSE_SWIPE); // Enough to break last shield but not kill await game.toNextTurn(); expect(enemyPokemon.bossSegmentIndex).toBe(0); @@ -107,7 +107,7 @@ describe("Boss Pokemon / Shields", () => { it("breaking multiple shields at once requires extra damage", async () => { game.override.battleStyle("double").enemyHealthSegments(5); - await game.classicMode.startBattle([Species.MEWTWO]); + await game.classicMode.startBattle([SpeciesId.MEWTWO]); // In this test we want to break through 3 shields at once const brokenShields = 3; @@ -142,7 +142,7 @@ describe("Boss Pokemon / Shields", () => { game.override.battleStyle("double").enemyHealthSegments(shieldsToBreak + 1); - await game.classicMode.startBattle([Species.MEWTWO]); + await game.classicMode.startBattle([SpeciesId.MEWTWO]); const boss1: EnemyPokemon = game.scene.getEnemyParty()[0]!; const boss1SegmentHp = boss1.getMaxHp() / boss1.bossSegments; @@ -160,7 +160,7 @@ describe("Boss Pokemon / Shields", () => { expect(boss1.bossSegmentIndex).toBe(shieldsToBreak - i); expect(boss1.hp).toBe(boss1.getMaxHp() - toDmgValue(boss1SegmentHp * i)); // Do nothing and go to next turn so that the StatStageChangePhase gets applied - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // All broken shields give +1 stat boost, except the last two that gives +2 totalStatStages += i >= shieldsToBreak - 1 ? 2 : 1; @@ -181,22 +181,22 @@ describe("Boss Pokemon / Shields", () => { expect(boss2.bossSegmentIndex).toBe(0); expect(boss2.hp).toBe(boss2.getMaxHp() - toDmgValue(boss2SegmentHp * shieldsToBreak)); // Do nothing and go to next turn so that the StatStageChangePhase gets applied - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(getTotalStatStageBoosts(boss2)).toBe(totalStatStages); }); it("the boss enduring does not proc an extra stat boost", async () => { - game.override.enemyHealthSegments(2).enemyAbility(Abilities.STURDY); + game.override.enemyHealthSegments(2).enemyAbility(AbilityId.STURDY); - await game.classicMode.startBattle([Species.MEWTWO]); + await game.classicMode.startBattle([SpeciesId.MEWTWO]); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon.isBoss()).toBe(true); expect(enemyPokemon.bossSegments).toBe(2); expect(getTotalStatStageBoosts(enemyPokemon)).toBe(0); - game.move.select(Moves.PSYCHIC); + game.move.select(MoveId.PSYCHIC); await game.toNextTurn(); // Enemy survived with Sturdy diff --git a/test/daily_mode.test.ts b/test/daily_mode.test.ts index a5901da4821..41dcf51ccf6 100644 --- a/test/daily_mode.test.ts +++ b/test/daily_mode.test.ts @@ -1,9 +1,9 @@ -import { Biome } from "#app/enums/biome"; -import { Moves } from "#app/enums/moves"; +import { BiomeId } from "#enums/biome-id"; +import { MoveId } from "#enums/move-id"; import { MapModifier } from "#app/modifier/modifier"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { UiMode } from "#enums/ui-mode"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import GameManager from "#test/testUtils/gameManager"; @@ -56,12 +56,12 @@ describe("Shop modifications", async () => { game.override .startingWave(9) - .startingBiome(Biome.ICE_CAVE) + .startingBiome(BiomeId.ICE_CAVE) .battleStyle("single") .startingLevel(100) // Avoid levelling up .disableTrainerWaves() - .moveset([Moves.SPLASH]) - .enemyMoveset(Moves.SPLASH); + .moveset([MoveId.SPLASH]) + .enemyMoveset(MoveId.SPLASH); game.modifiers.addCheck("EVIOLITE").addCheck("MINI_BLACK_HOLE"); vi.spyOn(pokerogueApi.daily, "getSeed").mockResolvedValue("test-seed"); }); @@ -72,8 +72,8 @@ describe("Shop modifications", async () => { }); it("should not have Eviolite and Mini Black Hole available in Classic if not unlocked", async () => { - await game.classicMode.startBattle([Species.BULBASAUR]); - game.move.select(Moves.SPLASH); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to("BattleEndPhase"); game.onNextPrompt("SelectModifierPhase", UiMode.MODIFIER_SELECT, () => { @@ -84,7 +84,7 @@ describe("Shop modifications", async () => { it("should have Eviolite and Mini Black Hole available in Daily", async () => { await game.dailyMode.startBattle(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to("BattleEndPhase"); game.onNextPrompt("SelectModifierPhase", UiMode.MODIFIER_SELECT, () => { diff --git a/test/data/status_effect.test.ts b/test/data/status_effect.test.ts index 111136bf0a2..4a543a04a1b 100644 --- a/test/data/status_effect.test.ts +++ b/test/data/status_effect.test.ts @@ -7,9 +7,9 @@ import { getStatusEffectOverlapText, } from "#app/data/status-effect"; import { MoveResult } from "#app/field/pokemon"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import { mockI18next } from "#test/testUtils/testUtils"; @@ -319,18 +319,18 @@ describe("Status Effects", () => { game = new GameManager(phaserGame); game.override - .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.SPLASH) - .enemyAbility(Abilities.BALL_FETCH) - .moveset([Moves.QUICK_ATTACK]) - .ability(Abilities.BALL_FETCH) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyMoveset(MoveId.SPLASH) + .enemyAbility(AbilityId.BALL_FETCH) + .moveset([MoveId.QUICK_ATTACK]) + .ability(AbilityId.BALL_FETCH) .statusEffect(StatusEffect.PARALYSIS); }); it("causes the pokemon's move to fail when activated", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.QUICK_ATTACK); + game.move.select(MoveId.QUICK_ATTACK); await game.move.forceStatusActivation(true); await game.toNextTurn(); @@ -356,38 +356,38 @@ describe("Status Effects", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should last the appropriate number of turns", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const player = game.scene.getPlayerPokemon()!; player.status = new Status(StatusEffect.SLEEP, 0, 4); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(player.status.effect).toBe(StatusEffect.SLEEP); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(player.status.effect).toBe(StatusEffect.SLEEP); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(player.status.effect).toBe(StatusEffect.SLEEP); expect(player.getLastXMoves(1)[0].result).toBe(MoveResult.FAIL); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(player.status?.effect).toBeUndefined(); @@ -412,18 +412,18 @@ describe("Status Effects", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.NUZZLE) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.NUZZLE) .enemyLevel(2000); }); it("should not inflict a 0 HP mon with a status", async () => { - await game.classicMode.startBattle([Species.FEEBAS, Species.MILOTIC]); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MILOTIC]); const player = game.scene.getPlayerPokemon()!; player.hp = 0; diff --git a/test/eggs/egg.test.ts b/test/eggs/egg.test.ts index 0110aa5fdaf..e37a7c00aa9 100644 --- a/test/eggs/egg.test.ts +++ b/test/eggs/egg.test.ts @@ -6,7 +6,7 @@ import { EggTier } from "#app/enums/egg-type"; import { VariantTier } from "#app/enums/variant-tier"; import EggData from "#app/system/egg-data"; import * as Utils from "#app/utils/common"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -34,7 +34,7 @@ describe("Egg Generation Tests", () => { it("should return Kyogre for the 10th of June", () => { const timestamp = new Date(2024, 5, 10, 15, 0, 0, 0).getTime(); - const expectedSpecies = Species.KYOGRE; + const expectedSpecies = SpeciesId.KYOGRE; const result = getLegendaryGachaSpeciesForTimestamp(timestamp); @@ -42,7 +42,7 @@ describe("Egg Generation Tests", () => { }); it("should return Kyogre for the 10th of July", () => { const timestamp = new Date(2024, 6, 10, 15, 0, 0, 0).getTime(); - const expectedSpecies = Species.KYOGRE; + const expectedSpecies = SpeciesId.KYOGRE; const result = getLegendaryGachaSpeciesForTimestamp(timestamp); @@ -51,7 +51,7 @@ describe("Egg Generation Tests", () => { it("should hatch a Kyogre around half the time. Set from legendary gacha", async () => { const scene = game.scene; const timestamp = new Date(2024, 6, 10, 15, 0, 0, 0).getTime(); - const expectedSpecies = Species.KYOGRE; + const expectedSpecies = SpeciesId.KYOGRE; let gachaSpeciesCount = 0; for (let i = 0; i < EGG_HATCH_COUNT; i++) { @@ -73,11 +73,11 @@ describe("Egg Generation Tests", () => { const validLegendaryGachaSpecies = getValidLegendaryGachaSpecies(); expect(validLegendaryGachaSpecies.every(s => speciesEggTiers[s] === EggTier.LEGENDARY)).toBe(true); expect(validLegendaryGachaSpecies.every(s => allSpecies[s].isObtainable())).toBe(true); - expect(validLegendaryGachaSpecies.includes(Species.ETERNATUS)).toBe(false); + expect(validLegendaryGachaSpecies.includes(SpeciesId.ETERNATUS)).toBe(false); }); it("should hatch an Arceus. Set from species", () => { const scene = game.scene; - const expectedSpecies = Species.ARCEUS; + const expectedSpecies = SpeciesId.ARCEUS; const result = new Egg({ scene, @@ -122,7 +122,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const expectedResult = true; - const result = new Egg({ scene, species: Species.MANAPHY }).isManaphyEgg(); + const result = new Egg({ scene, species: SpeciesId.MANAPHY }).isManaphyEgg(); expect(result).toBe(expectedResult); }); @@ -153,7 +153,7 @@ describe("Egg Generation Tests", () => { const result = new Egg({ scene, isShiny: expectedResult, - species: Species.BULBASAUR, + species: SpeciesId.BULBASAUR, }) .generatePlayerPokemon() .isShiny(); @@ -168,7 +168,7 @@ describe("Egg Generation Tests", () => { scene, isShiny: true, variantTier: expectedVariantTier, - species: Species.BULBASAUR, + species: SpeciesId.BULBASAUR, }).generatePlayerPokemon().variant; expect(result).toBe(expectedVariantTier); @@ -181,7 +181,7 @@ describe("Egg Generation Tests", () => { scene, isShiny: true, variantTier: expectedVariantTier, - species: Species.BULBASAUR, + species: SpeciesId.BULBASAUR, }).generatePlayerPokemon().variant; expect(result).toBe(expectedVariantTier); @@ -194,7 +194,7 @@ describe("Egg Generation Tests", () => { scene, isShiny: true, variantTier: expectedVariantTier, - species: Species.BULBASAUR, + species: SpeciesId.BULBASAUR, }).generatePlayerPokemon().variant; expect(result).toBe(expectedVariantTier); @@ -221,7 +221,7 @@ describe("Egg Generation Tests", () => { const playerPokemon = new Egg({ scene, overrideHiddenAbility: true, - species: Species.BULBASAUR, + species: SpeciesId.BULBASAUR, }).generatePlayerPokemon(); const expectedAbilityIndex = playerPokemon.species.ability2 ? 2 : 1; @@ -246,7 +246,7 @@ describe("Egg Generation Tests", () => { const result = new Egg({ scene, tier: EggTier.LEGENDARY, - species: Species.BULBASAUR, + species: SpeciesId.BULBASAUR, }).tier; expect(result).toBe(expectedEggTier); @@ -258,7 +258,7 @@ describe("Egg Generation Tests", () => { const result = new Egg({ scene, tier: EggTier.LEGENDARY, - species: Species.BULBASAUR, + species: SpeciesId.BULBASAUR, }).hatchWaves; expect(result).toBe(expectedHatchWaves); @@ -325,7 +325,7 @@ describe("Egg Generation Tests", () => { scene, sourceType: EggSourceType.GACHA_MOVE, pulled: true, - species: Species.BULBASAUR, + species: SpeciesId.BULBASAUR, }); } @@ -412,7 +412,7 @@ describe("Egg Generation Tests", () => { scene, isShiny: true, variantTier: VariantTier.EPIC, - species: Species.MIRAIDON, + species: SpeciesId.MIRAIDON, }); expect(egg.variantTier).toBe(VariantTier.EPIC); @@ -461,7 +461,7 @@ describe("Egg Generation Tests", () => { scene.setSeed("ABCDEFGHIJKLMNOPQRSTUVWXYZ"); scene.resetSeed(); - const firstEgg = new Egg({ scene, species: Species.BULBASAUR }); + const firstEgg = new Egg({ scene, species: SpeciesId.BULBASAUR }); const firstHatch = firstEgg.generatePlayerPokemon(); let diffEggMove = false; let diffSpecies = false; @@ -471,7 +471,7 @@ describe("Egg Generation Tests", () => { scene.setSeed("ABCDEFGHIJKLMNOPQRSTUVWXYZ"); scene.resetSeed(); // Make sure that eggs are unpredictable even if using same seed - const newEgg = new Egg({ scene, species: Species.BULBASAUR }); + const newEgg = new Egg({ scene, species: SpeciesId.BULBASAUR }); const newHatch = newEgg.generatePlayerPokemon(); diffEggMove = diffEggMove || newEgg.eggMoveIndex !== firstEgg.eggMoveIndex; diffSpecies = diffSpecies || newHatch.species.speciesId !== firstHatch.species.speciesId; diff --git a/test/eggs/manaphy-egg.test.ts b/test/eggs/manaphy-egg.test.ts index 1e7f67a7bb5..4dc38ef10b6 100644 --- a/test/eggs/manaphy-egg.test.ts +++ b/test/eggs/manaphy-egg.test.ts @@ -1,7 +1,7 @@ import { Egg } from "#app/data/egg"; import { EggSourceType } from "#app/enums/egg-source-types"; import { EggTier } from "#app/enums/egg-type"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -54,9 +54,9 @@ describe("Manaphy Eggs", () => { id: 204, }); const newHatch = newEgg.generatePlayerPokemon(); - if (newHatch.species.speciesId === Species.MANAPHY) { + if (newHatch.species.speciesId === SpeciesId.MANAPHY) { manaphyCount++; - } else if (newHatch.species.speciesId === Species.PHIONE) { + } else if (newHatch.species.speciesId === SpeciesId.PHIONE) { phioneCount++; } if (newEgg.eggMoveIndex === 3) { @@ -80,13 +80,13 @@ describe("Manaphy Eggs", () => { const newEgg = new Egg({ scene, - species: Species.PHIONE, + species: SpeciesId.PHIONE, sourceType: EggSourceType.SAME_SPECIES_EGG, }); const newHatch = newEgg.generatePlayerPokemon(); - if (newHatch.species.speciesId === Species.MANAPHY) { + if (newHatch.species.speciesId === SpeciesId.MANAPHY) { manaphyCount++; - } else if (newHatch.species.speciesId === Species.PHIONE) { + } else if (newHatch.species.speciesId === SpeciesId.PHIONE) { phioneCount++; } if (newEgg.eggMoveIndex === 3) { @@ -110,13 +110,13 @@ describe("Manaphy Eggs", () => { const newEgg = new Egg({ scene, - species: Species.MANAPHY, + species: SpeciesId.MANAPHY, sourceType: EggSourceType.SAME_SPECIES_EGG, }); const newHatch = newEgg.generatePlayerPokemon(); - if (newHatch.species.speciesId === Species.MANAPHY) { + if (newHatch.species.speciesId === SpeciesId.MANAPHY) { manaphyCount++; - } else if (newHatch.species.speciesId === Species.PHIONE) { + } else if (newHatch.species.speciesId === SpeciesId.PHIONE) { phioneCount++; } if (newEgg.eggMoveIndex === 3) { diff --git a/test/endless_boss.test.ts b/test/endless_boss.test.ts index 4be1e379215..05c6594bad6 100644 --- a/test/endless_boss.test.ts +++ b/test/endless_boss.test.ts @@ -1,5 +1,5 @@ -import { Biome } from "#app/enums/biome"; -import { Species } from "#app/enums/species"; +import { BiomeId } from "#enums/biome-id"; +import { SpeciesId } from "#enums/species-id"; import { GameModes } from "#app/game-mode"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import GameManager from "#test/testUtils/gameManager"; @@ -21,7 +21,7 @@ describe("Endless Boss", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.startingBiome(Biome.END).disableCrits(); + game.override.startingBiome(BiomeId.END).disableCrits(); }); afterEach(() => { @@ -30,57 +30,57 @@ describe("Endless Boss", () => { it(`should spawn a minor boss every ${EndlessBossWave.Minor} waves in END biome in Endless`, async () => { game.override.startingWave(EndlessBossWave.Minor); - await game.runToFinalBossEncounter([Species.BIDOOF], GameModes.ENDLESS); + await game.runToFinalBossEncounter([SpeciesId.BIDOOF], GameModes.ENDLESS); expect(game.scene.currentBattle.waveIndex).toBe(EndlessBossWave.Minor); - expect(game.scene.arena.biomeType).toBe(Biome.END); + expect(game.scene.arena.biomeType).toBe(BiomeId.END); const eternatus = game.scene.getEnemyPokemon(); - expect(eternatus?.species.speciesId).toBe(Species.ETERNATUS); + expect(eternatus?.species.speciesId).toBe(SpeciesId.ETERNATUS); expect(eternatus?.hasPassive()).toBe(false); expect(eternatus?.formIndex).toBe(0); }); it(`should spawn a major boss every ${EndlessBossWave.Major} waves in END biome in Endless`, async () => { game.override.startingWave(EndlessBossWave.Major); - await game.runToFinalBossEncounter([Species.BIDOOF], GameModes.ENDLESS); + await game.runToFinalBossEncounter([SpeciesId.BIDOOF], GameModes.ENDLESS); expect(game.scene.currentBattle.waveIndex).toBe(EndlessBossWave.Major); - expect(game.scene.arena.biomeType).toBe(Biome.END); + expect(game.scene.arena.biomeType).toBe(BiomeId.END); const eternatus = game.scene.getEnemyPokemon(); - expect(eternatus?.species.speciesId).toBe(Species.ETERNATUS); + expect(eternatus?.species.speciesId).toBe(SpeciesId.ETERNATUS); expect(eternatus?.hasPassive()).toBe(false); expect(eternatus?.formIndex).toBe(1); }); it(`should spawn a minor boss every ${EndlessBossWave.Minor} waves in END biome in Spliced Endless`, async () => { game.override.startingWave(EndlessBossWave.Minor); - await game.runToFinalBossEncounter([Species.BIDOOF], GameModes.SPLICED_ENDLESS); + await game.runToFinalBossEncounter([SpeciesId.BIDOOF], GameModes.SPLICED_ENDLESS); expect(game.scene.currentBattle.waveIndex).toBe(EndlessBossWave.Minor); - expect(game.scene.arena.biomeType).toBe(Biome.END); + expect(game.scene.arena.biomeType).toBe(BiomeId.END); const eternatus = game.scene.getEnemyPokemon(); - expect(eternatus?.species.speciesId).toBe(Species.ETERNATUS); + expect(eternatus?.species.speciesId).toBe(SpeciesId.ETERNATUS); expect(eternatus?.hasPassive()).toBe(false); expect(eternatus?.formIndex).toBe(0); }); it(`should spawn a major boss every ${EndlessBossWave.Major} waves in END biome in Spliced Endless`, async () => { game.override.startingWave(EndlessBossWave.Major); - await game.runToFinalBossEncounter([Species.BIDOOF], GameModes.SPLICED_ENDLESS); + await game.runToFinalBossEncounter([SpeciesId.BIDOOF], GameModes.SPLICED_ENDLESS); expect(game.scene.currentBattle.waveIndex).toBe(EndlessBossWave.Major); - expect(game.scene.arena.biomeType).toBe(Biome.END); + expect(game.scene.arena.biomeType).toBe(BiomeId.END); const eternatus = game.scene.getEnemyPokemon(); - expect(eternatus?.species.speciesId).toBe(Species.ETERNATUS); + expect(eternatus?.species.speciesId).toBe(SpeciesId.ETERNATUS); expect(eternatus?.hasPassive()).toBe(false); expect(eternatus?.formIndex).toBe(1); }); it(`should NOT spawn major or minor boss outside wave ${EndlessBossWave.Minor}s in END biome`, async () => { game.override.startingWave(EndlessBossWave.Minor - 1); - await game.runToFinalBossEncounter([Species.BIDOOF], GameModes.ENDLESS); + await game.runToFinalBossEncounter([SpeciesId.BIDOOF], GameModes.ENDLESS); expect(game.scene.currentBattle.waveIndex).not.toBe(EndlessBossWave.Minor); - expect(game.scene.getEnemyPokemon()!.species.speciesId).not.toBe(Species.ETERNATUS); + expect(game.scene.getEnemyPokemon()!.species.speciesId).not.toBe(SpeciesId.ETERNATUS); }); }); diff --git a/test/enemy_command.test.ts b/test/enemy_command.test.ts index e5199847702..8d6d1756a69 100644 --- a/test/enemy_command.test.ts +++ b/test/enemy_command.test.ts @@ -1,9 +1,9 @@ import type BattleScene from "#app/battle-scene"; import { allMoves } from "#app/data/data-lists"; import { MoveCategory } from "#enums/MoveCategory"; -import { Abilities } from "#app/enums/abilities"; -import { Moves } from "#app/enums/moves"; -import { Species } from "#app/enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import type { EnemyPokemon } from "#app/field/pokemon"; import { AiType } from "#app/field/pokemon"; import { randSeedInt } from "#app/utils/common"; @@ -49,17 +49,17 @@ describe("Enemy Commands - Move Selection", () => { game = new GameManager(phaserGame); globalScene = game.scene; - game.override.ability(Abilities.BALL_FETCH).enemyAbility(Abilities.BALL_FETCH); + game.override.ability(AbilityId.BALL_FETCH).enemyAbility(AbilityId.BALL_FETCH); }); it("should never use Status moves if an attack can KO", async () => { game.override - .enemySpecies(Species.ETERNATUS) - .enemyMoveset([Moves.ETERNABEAM, Moves.SLUDGE_BOMB, Moves.DRAGON_DANCE, Moves.COSMIC_POWER]) + .enemySpecies(SpeciesId.ETERNATUS) + .enemyMoveset([MoveId.ETERNABEAM, MoveId.SLUDGE_BOMB, MoveId.DRAGON_DANCE, MoveId.COSMIC_POWER]) .startingLevel(1) .enemyLevel(100); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const enemyPokemon = game.scene.getEnemyPokemon()!; enemyPokemon.aiType = AiType.SMART_RANDOM; @@ -78,12 +78,12 @@ describe("Enemy Commands - Move Selection", () => { it("should not select Last Resort if it would fail, even if the move KOs otherwise", async () => { game.override - .enemySpecies(Species.KANGASKHAN) - .enemyMoveset([Moves.LAST_RESORT, Moves.GIGA_IMPACT, Moves.SPLASH, Moves.SWORDS_DANCE]) + .enemySpecies(SpeciesId.KANGASKHAN) + .enemyMoveset([MoveId.LAST_RESORT, MoveId.GIGA_IMPACT, MoveId.SPLASH, MoveId.SWORDS_DANCE]) .startingLevel(1) .enemyLevel(100); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const enemyPokemon = game.scene.getEnemyPokemon()!; enemyPokemon.aiType = AiType.SMART_RANDOM; @@ -94,7 +94,7 @@ describe("Enemy Commands - Move Selection", () => { getEnemyMoveChoices(enemyPokemon, moveChoices); enemyMoveset.forEach(mv => { - if (mv?.getMove().category === MoveCategory.STATUS || mv?.moveId === Moves.LAST_RESORT) { + if (mv?.getMove().category === MoveCategory.STATUS || mv?.moveId === MoveId.LAST_RESORT) { expect(moveChoices[mv.moveId]).toBe(0); } }); diff --git a/test/escape-calculations.test.ts b/test/escape-calculations.test.ts index 56333432cee..854274eb948 100644 --- a/test/escape-calculations.test.ts +++ b/test/escape-calculations.test.ts @@ -2,8 +2,8 @@ import { AttemptRunPhase } from "#app/phases/attempt-run-phase"; import type { CommandPhase } from "#app/phases/command-phase"; import { Command } from "#app/ui/command-ui-handler"; import { NumberHolder } from "#app/utils/common"; -import { Abilities } from "#enums/abilities"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -26,13 +26,13 @@ describe("Escape chance calculations", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemySpecies(Species.BULBASAUR) - .enemyAbility(Abilities.INSOMNIA) - .ability(Abilities.INSOMNIA); + .enemySpecies(SpeciesId.BULBASAUR) + .enemyAbility(AbilityId.INSOMNIA) + .ability(AbilityId.INSOMNIA); }); it("single non-boss opponent", async () => { - await game.classicMode.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const playerPokemon = game.scene.getPlayerField(); const enemyField = game.scene.getEnemyField(); @@ -98,7 +98,7 @@ describe("Escape chance calculations", () => { it("double non-boss opponent", async () => { game.override.battleStyle("double"); - await game.classicMode.startBattle([Species.BULBASAUR, Species.ABOMASNOW]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.ABOMASNOW]); const playerPokemon = game.scene.getPlayerField(); const enemyField = game.scene.getEnemyField(); @@ -184,7 +184,7 @@ describe("Escape chance calculations", () => { it("single boss opponent", async () => { game.override.startingWave(10); - await game.classicMode.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const playerPokemon = game.scene.getPlayerField()!; const enemyField = game.scene.getEnemyField()!; @@ -264,7 +264,7 @@ describe("Escape chance calculations", () => { it("double boss opponent", async () => { game.override.battleStyle("double"); game.override.startingWave(10); - await game.classicMode.startBattle([Species.BULBASAUR, Species.ABOMASNOW]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.ABOMASNOW]); const playerPokemon = game.scene.getPlayerField(); const enemyField = game.scene.getEnemyField(); diff --git a/test/evolution.test.ts b/test/evolution.test.ts index a453d744da8..b2e7a9243d0 100644 --- a/test/evolution.test.ts +++ b/test/evolution.test.ts @@ -3,9 +3,9 @@ import { SpeciesFormEvolution, SpeciesWildEvolutionDelay, } from "#app/data/balance/pokemon-evolutions"; -import { Abilities } from "#app/enums/abilities"; -import { Moves } from "#app/enums/moves"; -import { Species } from "#app/enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import * as Utils from "#app/utils/common"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -30,61 +30,61 @@ describe("Evolution", () => { game.override.battleStyle("single"); - game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyAbility(Abilities.BALL_FETCH); + game.override.enemySpecies(SpeciesId.MAGIKARP); + game.override.enemyAbility(AbilityId.BALL_FETCH); game.override.startingLevel(60); }); it("should keep hidden ability after evolving", async () => { - await game.classicMode.runToSummon([Species.EEVEE, Species.TRAPINCH]); + await game.classicMode.runToSummon([SpeciesId.EEVEE, SpeciesId.TRAPINCH]); const eevee = game.scene.getPlayerParty()[0]; const trapinch = game.scene.getPlayerParty()[1]; eevee.abilityIndex = 2; trapinch.abilityIndex = 2; - await eevee.evolve(pokemonEvolutions[Species.EEVEE][6], eevee.getSpeciesForm()); + await eevee.evolve(pokemonEvolutions[SpeciesId.EEVEE][6], eevee.getSpeciesForm()); expect(eevee.abilityIndex).toBe(2); - await trapinch.evolve(pokemonEvolutions[Species.TRAPINCH][0], trapinch.getSpeciesForm()); + await trapinch.evolve(pokemonEvolutions[SpeciesId.TRAPINCH][0], trapinch.getSpeciesForm()); expect(trapinch.abilityIndex).toBe(1); }); it("should keep same ability slot after evolving", async () => { - await game.classicMode.runToSummon([Species.BULBASAUR, Species.CHARMANDER]); + await game.classicMode.runToSummon([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER]); const bulbasaur = game.scene.getPlayerParty()[0]; const charmander = game.scene.getPlayerParty()[1]; bulbasaur.abilityIndex = 0; charmander.abilityIndex = 1; - await bulbasaur.evolve(pokemonEvolutions[Species.BULBASAUR][0], bulbasaur.getSpeciesForm()); + await bulbasaur.evolve(pokemonEvolutions[SpeciesId.BULBASAUR][0], bulbasaur.getSpeciesForm()); expect(bulbasaur.abilityIndex).toBe(0); - await charmander.evolve(pokemonEvolutions[Species.CHARMANDER][0], charmander.getSpeciesForm()); + await charmander.evolve(pokemonEvolutions[SpeciesId.CHARMANDER][0], charmander.getSpeciesForm()); expect(charmander.abilityIndex).toBe(1); }); it("should handle illegal abilityIndex values", async () => { - await game.classicMode.runToSummon([Species.SQUIRTLE]); + await game.classicMode.runToSummon([SpeciesId.SQUIRTLE]); const squirtle = game.scene.getPlayerPokemon()!; squirtle.abilityIndex = 5; - await squirtle.evolve(pokemonEvolutions[Species.SQUIRTLE][0], squirtle.getSpeciesForm()); + await squirtle.evolve(pokemonEvolutions[SpeciesId.SQUIRTLE][0], squirtle.getSpeciesForm()); expect(squirtle.abilityIndex).toBe(0); }); it("should handle nincada's unique evolution", async () => { - await game.classicMode.runToSummon([Species.NINCADA]); + await game.classicMode.runToSummon([SpeciesId.NINCADA]); const nincada = game.scene.getPlayerPokemon()!; nincada.abilityIndex = 2; nincada.metBiome = -1; nincada.gender = 1; - await nincada.evolve(pokemonEvolutions[Species.NINCADA][0], nincada.getSpeciesForm()); + await nincada.evolve(pokemonEvolutions[SpeciesId.NINCADA][0], nincada.getSpeciesForm()); const ninjask = game.scene.getPlayerParty()[0]; const shedinja = game.scene.getPlayerParty()[1]; expect(ninjask.abilityIndex).toBe(2); @@ -96,21 +96,21 @@ describe("Evolution", () => { }); it("should set wild delay to NONE by default", () => { - const speciesFormEvo = new SpeciesFormEvolution(Species.ABRA, null, null, 1000, null, null); + const speciesFormEvo = new SpeciesFormEvolution(SpeciesId.ABRA, null, null, 1000, null, null); expect(speciesFormEvo.wildDelay).toBe(SpeciesWildEvolutionDelay.NONE); }); it("should increase both HP and max HP when evolving", async () => { game.override - .moveset([Moves.SURF]) - .enemySpecies(Species.GOLEM) - .enemyMoveset(Moves.SPLASH) + .moveset([MoveId.SURF]) + .enemySpecies(SpeciesId.GOLEM) + .enemyMoveset(MoveId.SPLASH) .startingWave(21) .startingLevel(16) .enemyLevel(50); - await game.classicMode.startBattle([Species.TOTODILE]); + await game.classicMode.startBattle([SpeciesId.TOTODILE]); const totodile = game.scene.getPlayerPokemon()!; const hpBefore = totodile.hp; @@ -122,7 +122,7 @@ describe("Evolution", () => { expect(golem.hp).toBe(1); - game.move.select(Moves.SURF); + game.move.select(MoveId.SURF); await game.phaseInterceptor.to("EndEvolutionPhase"); expect(totodile.hp).toBe(totodile.getMaxHp()); @@ -131,14 +131,14 @@ describe("Evolution", () => { it("should not fully heal HP when evolving", async () => { game.override - .moveset([Moves.SURF]) - .enemySpecies(Species.GOLEM) - .enemyMoveset(Moves.SPLASH) + .moveset([MoveId.SURF]) + .enemySpecies(SpeciesId.GOLEM) + .enemyMoveset(MoveId.SPLASH) .startingWave(21) .startingLevel(13) .enemyLevel(30); - await game.classicMode.startBattle([Species.CYNDAQUIL]); + await game.classicMode.startBattle([SpeciesId.CYNDAQUIL]); const cyndaquil = game.scene.getPlayerPokemon()!; cyndaquil.hp = Math.floor(cyndaquil.getMaxHp() / 2); @@ -152,7 +152,7 @@ describe("Evolution", () => { expect(golem.hp).toBe(1); - game.move.select(Moves.SURF); + game.move.select(MoveId.SURF); await game.phaseInterceptor.to("EndEvolutionPhase"); expect(cyndaquil.getMaxHp()).toBeGreaterThan(maxHpBefore); @@ -171,7 +171,7 @@ describe("Evolution", () => { * If the value is 0, it's a 3 family maushold, whereas if the value is * 1, 2 or 3, it's a 4 family maushold */ - await game.classicMode.startBattle([Species.TANDEMAUS]); // starts us off with a tandemaus + await game.classicMode.startBattle([SpeciesId.TANDEMAUS]); // starts us off with a tandemaus const playerPokemon = game.scene.getPlayerPokemon()!; playerPokemon.level = 25; // tandemaus evolves at level 25 vi.spyOn(Utils, "randSeedInt").mockReturnValue(0); // setting the random generator to be 0 to force a three family maushold diff --git a/test/field/pokemon.test.ts b/test/field/pokemon.test.ts index f763ab2c401..74ad973b51d 100644 --- a/test/field/pokemon.test.ts +++ b/test/field/pokemon.test.ts @@ -1,9 +1,9 @@ -import { Species } from "#app/enums/species"; +import { SpeciesId } from "#enums/species-id"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import GameManager from "#test/testUtils/gameManager"; import { PokeballType } from "#enums/pokeball"; import type BattleScene from "#app/battle-scene"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#enums/move-id"; import { PokemonType } from "#enums/pokemon-type"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; @@ -26,7 +26,7 @@ describe("Spec - Pokemon", () => { }); it("should not crash when trying to set status of undefined", async () => { - await game.classicMode.runToSummon([Species.ABRA]); + await game.classicMode.runToSummon([SpeciesId.ABRA]); const pkm = game.scene.getPlayerPokemon()!; expect(pkm).toBeDefined(); @@ -38,8 +38,14 @@ describe("Spec - Pokemon", () => { let scene: BattleScene; beforeEach(async () => { - game.override.enemySpecies(Species.ZUBAT); - await game.classicMode.runToSummon([Species.ABRA, Species.ABRA, Species.ABRA, Species.ABRA, Species.ABRA]); // 5 Abra, only 1 slot left + game.override.enemySpecies(SpeciesId.ZUBAT); + await game.classicMode.runToSummon([ + SpeciesId.ABRA, + SpeciesId.ABRA, + SpeciesId.ABRA, + SpeciesId.ABRA, + SpeciesId.ABRA, + ]); // 5 Abra, only 1 slot left scene = game.scene; }); @@ -50,7 +56,7 @@ describe("Spec - Pokemon", () => { const party = scene.getPlayerParty(); expect(party).toHaveLength(6); party.forEach((pkm, index) => { - expect(pkm.species.speciesId).toBe(index === 5 ? Species.ZUBAT : Species.ABRA); + expect(pkm.species.speciesId).toBe(index === 5 ? SpeciesId.ZUBAT : SpeciesId.ABRA); }); }); @@ -62,34 +68,34 @@ describe("Spec - Pokemon", () => { const party = scene.getPlayerParty(); expect(party).toHaveLength(6); party.forEach((pkm, index) => { - expect(pkm.species.speciesId).toBe(index === slotIndex ? Species.ZUBAT : Species.ABRA); + expect(pkm.species.speciesId).toBe(index === slotIndex ? SpeciesId.ZUBAT : SpeciesId.ABRA); }); }); }); it("should not share tms between different forms", async () => { - game.override.starterForms({ [Species.ROTOM]: 4 }); + game.override.starterForms({ [SpeciesId.ROTOM]: 4 }); - await game.classicMode.startBattle([Species.ROTOM]); + await game.classicMode.startBattle([SpeciesId.ROTOM]); const fanRotom = game.scene.getPlayerPokemon()!; - expect(fanRotom.compatibleTms).not.toContain(Moves.BLIZZARD); - expect(fanRotom.compatibleTms).toContain(Moves.AIR_SLASH); + expect(fanRotom.compatibleTms).not.toContain(MoveId.BLIZZARD); + expect(fanRotom.compatibleTms).toContain(MoveId.AIR_SLASH); }); describe("Get correct fusion type", () => { let scene: BattleScene; beforeEach(async () => { - game.override.enemySpecies(Species.ZUBAT); - game.override.starterSpecies(Species.ABRA); + game.override.enemySpecies(SpeciesId.ZUBAT); + game.override.starterSpecies(SpeciesId.ABRA); game.override.enableStarterFusion(); scene = game.scene; }); it("Fusing two mons with a single type", async () => { - game.override.starterFusionSpecies(Species.CHARMANDER); + game.override.starterFusionSpecies(SpeciesId.CHARMANDER); await game.classicMode.startBattle(); const pokemon = scene.getPlayerParty()[0]; @@ -130,7 +136,7 @@ describe("Spec - Pokemon", () => { }); it("Fusing two mons with same single type", async () => { - game.override.starterFusionSpecies(Species.DROWZEE); + game.override.starterFusionSpecies(SpeciesId.DROWZEE); await game.classicMode.startBattle(); const pokemon = scene.getPlayerParty()[0]; @@ -140,8 +146,8 @@ describe("Spec - Pokemon", () => { }); it("Fusing mons with one and two types", async () => { - game.override.starterSpecies(Species.CHARMANDER); - game.override.starterFusionSpecies(Species.HOUNDOUR); + game.override.starterSpecies(SpeciesId.CHARMANDER); + game.override.starterFusionSpecies(SpeciesId.HOUNDOUR); await game.classicMode.startBattle(); const pokemon = scene.getPlayerParty()[0]; @@ -151,8 +157,8 @@ describe("Spec - Pokemon", () => { }); it("Fusing mons with two and one types", async () => { - game.override.starterSpecies(Species.NUMEL); - game.override.starterFusionSpecies(Species.CHARMANDER); + game.override.starterSpecies(SpeciesId.NUMEL); + game.override.starterFusionSpecies(SpeciesId.CHARMANDER); await game.classicMode.startBattle(); const pokemon = scene.getPlayerParty()[0]; @@ -162,8 +168,8 @@ describe("Spec - Pokemon", () => { }); it("Fusing two mons with two types", async () => { - game.override.starterSpecies(Species.NATU); - game.override.starterFusionSpecies(Species.HOUNDOUR); + game.override.starterSpecies(SpeciesId.NATU); + game.override.starterFusionSpecies(SpeciesId.HOUNDOUR); await game.classicMode.startBattle(); const pokemon = scene.getPlayerParty()[0]; @@ -214,7 +220,7 @@ describe("Spec - Pokemon", () => { "should set minimum IVs for enemy trainer pokemon based on wave (%i)", async wave => { game.override.startingWave(wave); - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const { waveIndex } = game.scene.currentBattle; for (const pokemon of game.scene.getEnemyParty()) { diff --git a/test/final_boss.test.ts b/test/final_boss.test.ts index 1b0cdce60a0..f1f894a5984 100644 --- a/test/final_boss.test.ts +++ b/test/final_boss.test.ts @@ -1,9 +1,9 @@ import { GameModes } from "#app/game-mode"; import { TurnHeldItemTransferModifier } from "#app/modifier/modifier"; -import { Abilities } from "#enums/abilities"; -import { Biome } from "#enums/biome"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { BiomeId } from "#enums/biome-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -26,10 +26,10 @@ describe("Final Boss", () => { game = new GameManager(phaserGame); game.override .startingWave(FinalWave.Classic) - .startingBiome(Biome.END) + .startingBiome(BiomeId.END) .disableCrits() - .enemyMoveset(Moves.SPLASH) - .moveset([Moves.SPLASH, Moves.WILL_O_WISP, Moves.DRAGON_PULSE]) + .enemyMoveset(MoveId.SPLASH) + .moveset([MoveId.SPLASH, MoveId.WILL_O_WISP, MoveId.DRAGON_PULSE]) .startingLevel(10000); }); @@ -38,56 +38,56 @@ describe("Final Boss", () => { }); it("should spawn Eternatus on wave 200 in END biome", async () => { - await game.runToFinalBossEncounter([Species.BIDOOF], GameModes.CLASSIC); + await game.runToFinalBossEncounter([SpeciesId.BIDOOF], GameModes.CLASSIC); expect(game.scene.currentBattle.waveIndex).toBe(FinalWave.Classic); - expect(game.scene.arena.biomeType).toBe(Biome.END); - expect(game.scene.getEnemyPokemon()!.species.speciesId).toBe(Species.ETERNATUS); + expect(game.scene.arena.biomeType).toBe(BiomeId.END); + expect(game.scene.getEnemyPokemon()!.species.speciesId).toBe(SpeciesId.ETERNATUS); }); it("should NOT spawn Eternatus before wave 200 in END biome", async () => { game.override.startingWave(FinalWave.Classic - 1); - await game.runToFinalBossEncounter([Species.BIDOOF], GameModes.CLASSIC); + await game.runToFinalBossEncounter([SpeciesId.BIDOOF], GameModes.CLASSIC); expect(game.scene.currentBattle.waveIndex).not.toBe(FinalWave.Classic); - expect(game.scene.arena.biomeType).toBe(Biome.END); - expect(game.scene.getEnemyPokemon()!.species.speciesId).not.toBe(Species.ETERNATUS); + expect(game.scene.arena.biomeType).toBe(BiomeId.END); + expect(game.scene.getEnemyPokemon()!.species.speciesId).not.toBe(SpeciesId.ETERNATUS); }); it("should NOT spawn Eternatus outside of END biome", async () => { - game.override.startingBiome(Biome.FOREST); - await game.runToFinalBossEncounter([Species.BIDOOF], GameModes.CLASSIC); + game.override.startingBiome(BiomeId.FOREST); + await game.runToFinalBossEncounter([SpeciesId.BIDOOF], GameModes.CLASSIC); expect(game.scene.currentBattle.waveIndex).toBe(FinalWave.Classic); - expect(game.scene.arena.biomeType).not.toBe(Biome.END); - expect(game.scene.getEnemyPokemon()!.species.speciesId).not.toBe(Species.ETERNATUS); + expect(game.scene.arena.biomeType).not.toBe(BiomeId.END); + expect(game.scene.getEnemyPokemon()!.species.speciesId).not.toBe(SpeciesId.ETERNATUS); }); it("should not have passive enabled on Eternatus", async () => { - await game.runToFinalBossEncounter([Species.BIDOOF], GameModes.CLASSIC); + await game.runToFinalBossEncounter([SpeciesId.BIDOOF], GameModes.CLASSIC); const eternatus = game.scene.getEnemyPokemon()!; - expect(eternatus.species.speciesId).toBe(Species.ETERNATUS); + expect(eternatus.species.speciesId).toBe(SpeciesId.ETERNATUS); expect(eternatus.hasPassive()).toBe(false); }); it("should change form on direct hit down to last boss fragment", async () => { - await game.runToFinalBossEncounter([Species.KYUREM], GameModes.CLASSIC); + await game.runToFinalBossEncounter([SpeciesId.KYUREM], GameModes.CLASSIC); await game.phaseInterceptor.to("CommandPhase"); // Eternatus phase 1 const eternatus = game.scene.getEnemyPokemon()!; const phase1Hp = eternatus.getMaxHp(); - expect(eternatus.species.speciesId).toBe(Species.ETERNATUS); + expect(eternatus.species.speciesId).toBe(SpeciesId.ETERNATUS); expect(eternatus.formIndex).toBe(0); expect(eternatus.bossSegments).toBe(4); expect(eternatus.bossSegmentIndex).toBe(3); - game.move.select(Moves.DRAGON_PULSE); + game.move.select(MoveId.DRAGON_PULSE); await game.toNextTurn(); // Eternatus phase 2: changed form, healed and restored its shields - expect(eternatus.species.speciesId).toBe(Species.ETERNATUS); + expect(eternatus.species.speciesId).toBe(SpeciesId.ETERNATUS); expect(eternatus.hp).toBeGreaterThan(phase1Hp); expect(eternatus.hp).toBe(eternatus.getMaxHp()); expect(eternatus.formIndex).toBe(1); @@ -99,20 +99,20 @@ describe("Final Boss", () => { }); it("should change form on status damage down to last boss fragment", async () => { - game.override.ability(Abilities.NO_GUARD); + game.override.ability(AbilityId.NO_GUARD); - await game.runToFinalBossEncounter([Species.BIDOOF], GameModes.CLASSIC); + await game.runToFinalBossEncounter([SpeciesId.BIDOOF], GameModes.CLASSIC); await game.phaseInterceptor.to("CommandPhase"); // Eternatus phase 1 const eternatus = game.scene.getEnemyPokemon()!; const phase1Hp = eternatus.getMaxHp(); - expect(eternatus.species.speciesId).toBe(Species.ETERNATUS); + expect(eternatus.species.speciesId).toBe(SpeciesId.ETERNATUS); expect(eternatus.formIndex).toBe(0); expect(eternatus.bossSegments).toBe(4); expect(eternatus.bossSegmentIndex).toBe(3); - game.move.select(Moves.WILL_O_WISP); + game.move.select(MoveId.WILL_O_WISP); await game.toNextTurn(); expect(eternatus.status?.effect).toBe(StatusEffect.BURN); @@ -120,13 +120,13 @@ describe("Final Boss", () => { const lastShieldHp = Math.ceil(phase1Hp / eternatus.bossSegments); // Stall until the burn is one hit away from breaking the last shield while (eternatus.hp - tickDamage > lastShieldHp) { - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); } expect(eternatus.bossSegmentIndex).toBe(1); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // Eternatus phase 2: changed form, healed and restored its shields diff --git a/test/imports.test.ts b/test/imports.test.ts index 128308dbd14..540620d8bb4 100644 --- a/test/imports.test.ts +++ b/test/imports.test.ts @@ -5,7 +5,7 @@ async function importModule() { try { initStatsKeys(); const { PokemonMove } = await import("#app/field/pokemon"); - const { Species } = await import("#enums/species"); + const { SpeciesId: Species } = await import("#enums/species-id"); return { PokemonMove, Species, diff --git a/test/internals.test.ts b/test/internals.test.ts index 558b363caf0..bd603ec22fc 100644 --- a/test/internals.test.ts +++ b/test/internals.test.ts @@ -1,5 +1,5 @@ -import { Abilities } from "#app/enums/abilities"; -import { Species } from "#app/enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -23,18 +23,18 @@ describe("Internals", () => { }); it("should provide Eevee with 3 defined abilities", async () => { - await game.classicMode.runToSummon([Species.EEVEE]); + await game.classicMode.runToSummon([SpeciesId.EEVEE]); const eevee = game.scene.getPlayerPokemon()!; expect(eevee.getSpeciesForm().getAbilityCount()).toBe(3); - expect(eevee.getSpeciesForm().getAbility(0)).toBe(Abilities.RUN_AWAY); - expect(eevee.getSpeciesForm().getAbility(1)).toBe(Abilities.ADAPTABILITY); - expect(eevee.getSpeciesForm().getAbility(2)).toBe(Abilities.ANTICIPATION); + expect(eevee.getSpeciesForm().getAbility(0)).toBe(AbilityId.RUN_AWAY); + expect(eevee.getSpeciesForm().getAbility(1)).toBe(AbilityId.ADAPTABILITY); + expect(eevee.getSpeciesForm().getAbility(2)).toBe(AbilityId.ANTICIPATION); }); it("should set Eeeve abilityIndex between 0-2", async () => { - await game.classicMode.runToSummon([Species.EEVEE]); + await game.classicMode.runToSummon([SpeciesId.EEVEE]); const eevee = game.scene.getPlayerPokemon()!; expect(eevee.abilityIndex).toBeGreaterThanOrEqual(0); diff --git a/test/items/dire_hit.test.ts b/test/items/dire_hit.test.ts index e848bceb514..f60adebac36 100644 --- a/test/items/dire_hit.test.ts +++ b/test/items/dire_hit.test.ts @@ -1,6 +1,6 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -32,21 +32,21 @@ describe("Items - Dire Hit", () => { game = new GameManager(phaserGame); game.override - .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.SPLASH) - .moveset([Moves.POUND]) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyMoveset(MoveId.SPLASH) + .moveset([MoveId.POUND]) .startingHeldItems([{ name: "DIRE_HIT" }]) .battleStyle("single"); }, 20000); it("should raise CRIT stage by 1", async () => { - await game.classicMode.startBattle([Species.GASTLY]); + await game.classicMode.startBattle([SpeciesId.GASTLY]); const enemyPokemon = game.scene.getEnemyPokemon()!; vi.spyOn(enemyPokemon, "getCritStage"); - game.move.select(Moves.POUND); + game.move.select(MoveId.POUND); await game.phaseInterceptor.to(TurnEndPhase); @@ -56,9 +56,9 @@ describe("Items - Dire Hit", () => { it("should renew how many battles are left of existing DIRE_HIT when picking up new DIRE_HIT", async () => { game.override.itemRewards([{ name: "DIRE_HIT" }]); - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); diff --git a/test/items/double_battle_chance_booster.test.ts b/test/items/double_battle_chance_booster.test.ts index 68a29ef823e..d1a9e826cda 100644 --- a/test/items/double_battle_chance_booster.test.ts +++ b/test/items/double_battle_chance_booster.test.ts @@ -1,5 +1,5 @@ -import { Moves } from "#app/enums/moves"; -import { Species } from "#app/enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { DoubleBattleChanceBoosterModifier } from "#app/modifier/modifier"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -50,12 +50,12 @@ describe("Items - Double Battle Chance Boosters", () => { game.override .startingModifier([{ name: "LURE" }]) .itemRewards([{ name: "LURE" }]) - .moveset(Moves.SPLASH) + .moveset(MoveId.SPLASH) .startingLevel(200); - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); diff --git a/test/items/eviolite.test.ts b/test/items/eviolite.test.ts index fafc0f4a10c..353cdbf91b4 100644 --- a/test/items/eviolite.test.ts +++ b/test/items/eviolite.test.ts @@ -1,6 +1,6 @@ import { StatBoosterModifier } from "#app/modifier/modifier"; import { NumberHolder, randItem } from "#app/utils/common"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; @@ -26,7 +26,7 @@ describe("Items - Eviolite", () => { }); it("should provide 50% boost to DEF and SPDEF for unevolved, unfused pokemon", async () => { - await game.classicMode.startBattle([Species.PICHU]); + await game.classicMode.startBattle([SpeciesId.PICHU]); const partyMember = game.scene.getPlayerPokemon()!; @@ -47,7 +47,7 @@ describe("Items - Eviolite", () => { }); it("should not provide a boost for fully evolved, unfused pokemon", async () => { - await game.classicMode.startBattle([Species.RAICHU]); + await game.classicMode.startBattle([SpeciesId.RAICHU]); const partyMember = game.scene.getPlayerPokemon()!; @@ -68,7 +68,7 @@ describe("Items - Eviolite", () => { }); it("should provide 50% boost to DEF and SPDEF for completely unevolved, fused pokemon", async () => { - await game.classicMode.startBattle([Species.PICHU, Species.CLEFFA]); + await game.classicMode.startBattle([SpeciesId.PICHU, SpeciesId.CLEFFA]); const [partyMember, ally] = game.scene.getPlayerParty(); @@ -98,7 +98,7 @@ describe("Items - Eviolite", () => { }); it("should provide 25% boost to DEF and SPDEF for partially unevolved (base), fused pokemon", async () => { - await game.classicMode.startBattle([Species.PICHU, Species.CLEFABLE]); + await game.classicMode.startBattle([SpeciesId.PICHU, SpeciesId.CLEFABLE]); const [partyMember, ally] = game.scene.getPlayerParty(); @@ -128,7 +128,7 @@ describe("Items - Eviolite", () => { }); it("should provide 25% boost to DEF and SPDEF for partially unevolved (fusion), fused pokemon", async () => { - await game.classicMode.startBattle([Species.RAICHU, Species.CLEFFA]); + await game.classicMode.startBattle([SpeciesId.RAICHU, SpeciesId.CLEFFA]); const [partyMember, ally] = game.scene.getPlayerParty(); @@ -158,7 +158,7 @@ describe("Items - Eviolite", () => { }); it("should not provide a boost for fully evolved, fused pokemon", async () => { - await game.classicMode.startBattle([Species.RAICHU, Species.CLEFABLE]); + await game.classicMode.startBattle([SpeciesId.RAICHU, SpeciesId.CLEFABLE]); const [partyMember, ally] = game.scene.getPlayerParty(); @@ -189,13 +189,13 @@ describe("Items - Eviolite", () => { it("should not provide a boost for Gigantamax Pokémon", async () => { game.override.starterForms({ - [Species.PIKACHU]: 8, - [Species.EEVEE]: 2, - [Species.DURALUDON]: 1, - [Species.MEOWTH]: 1, + [SpeciesId.PIKACHU]: 8, + [SpeciesId.EEVEE]: 2, + [SpeciesId.DURALUDON]: 1, + [SpeciesId.MEOWTH]: 1, }); - const gMaxablePokemon = [Species.PIKACHU, Species.EEVEE, Species.DURALUDON, Species.MEOWTH]; + const gMaxablePokemon = [SpeciesId.PIKACHU, SpeciesId.EEVEE, SpeciesId.DURALUDON, SpeciesId.MEOWTH]; await game.classicMode.startBattle([randItem(gMaxablePokemon)]); diff --git a/test/items/exp_booster.test.ts b/test/items/exp_booster.test.ts index 106574b6849..f5273a78a55 100644 --- a/test/items/exp_booster.test.ts +++ b/test/items/exp_booster.test.ts @@ -1,4 +1,4 @@ -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { PokemonExpBoosterModifier } from "#app/modifier/modifier"; import { NumberHolder } from "#app/utils/common"; import GameManager from "#test/testUtils/gameManager"; @@ -22,8 +22,8 @@ describe("EXP Modifier Items", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.enemyAbility(Abilities.BALL_FETCH); - game.override.ability(Abilities.BALL_FETCH); + game.override.enemyAbility(AbilityId.BALL_FETCH); + game.override.ability(AbilityId.BALL_FETCH); game.override.battleStyle("single"); }); diff --git a/test/items/grip_claw.test.ts b/test/items/grip_claw.test.ts index 2396a7ca072..3c51e7f868d 100644 --- a/test/items/grip_claw.test.ts +++ b/test/items/grip_claw.test.ts @@ -1,10 +1,10 @@ import { BattlerIndex } from "#app/battle"; import type Pokemon from "#app/field/pokemon"; import type { ContactHeldItemTransferChanceModifier } from "#app/modifier/modifier"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BerryType } from "#enums/berry-type"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -28,12 +28,12 @@ describe("Items - Grip Claw", () => { game.override .battleStyle("double") - .moveset([Moves.TACKLE, Moves.SPLASH, Moves.ATTRACT]) + .moveset([MoveId.TACKLE, MoveId.SPLASH, MoveId.ATTRACT]) .startingHeldItems([{ name: "GRIP_CLAW", count: 1 }]) - .enemySpecies(Species.SNORLAX) - .enemyAbility(Abilities.UNNERVE) - .ability(Abilities.UNNERVE) - .enemyMoveset(Moves.SPLASH) + .enemySpecies(SpeciesId.SNORLAX) + .enemyAbility(AbilityId.UNNERVE) + .ability(AbilityId.UNNERVE) + .enemyMoveset(MoveId.SPLASH) .enemyHeldItems([ { name: "BERRY", type: BerryType.SITRUS, count: 2 }, { name: "BERRY", type: BerryType.LUM, count: 2 }, @@ -42,7 +42,7 @@ describe("Items - Grip Claw", () => { }); it("should steal items on contact and only from the attack target", async () => { - await game.classicMode.startBattle([Species.FEEBAS, Species.MILOTIC]); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MILOTIC]); const [playerPokemon] = game.scene.getPlayerField(); @@ -56,8 +56,8 @@ describe("Items - Grip Claw", () => { const enemy2HeldItemCount = getHeldItemCount(enemyPokemon[1]); expect(enemy2HeldItemCount).toBeGreaterThan(0); - game.move.select(Moves.TACKLE, 0, BattlerIndex.ENEMY_2); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.TACKLE, 0, BattlerIndex.ENEMY_2); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase", false); @@ -71,7 +71,7 @@ describe("Items - Grip Claw", () => { }); it("should not steal items when using a targetted, non attack move", async () => { - await game.classicMode.startBattle([Species.FEEBAS, Species.MILOTIC]); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MILOTIC]); const [playerPokemon] = game.scene.getPlayerField(); @@ -85,8 +85,8 @@ describe("Items - Grip Claw", () => { const enemy2HeldItemCount = getHeldItemCount(enemyPokemon[1]); expect(enemy2HeldItemCount).toBeGreaterThan(0); - game.move.select(Moves.ATTRACT, 0, BattlerIndex.ENEMY_2); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.ATTRACT, 0, BattlerIndex.ENEMY_2); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase", false); @@ -102,12 +102,12 @@ describe("Items - Grip Claw", () => { it("should not allow Pollen Puff to steal items when healing ally", async () => { game.override .battleStyle("double") - .moveset([Moves.POLLEN_PUFF, Moves.ENDURE]) + .moveset([MoveId.POLLEN_PUFF, MoveId.ENDURE]) .startingHeldItems([ { name: "GRIP_CLAW", count: 1 }, { name: "BERRY", type: BerryType.LUM, count: 1 }, ]); - await game.classicMode.startBattle([Species.BULBASAUR, Species.OMANYTE]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.OMANYTE]); const [leftPokemon, rightPokemon] = game.scene.getPlayerField(); @@ -116,8 +116,8 @@ describe("Items - Grip Claw", () => { const heldItemCountBefore = getHeldItemCount(rightPokemon); - game.move.select(Moves.POLLEN_PUFF, 0, BattlerIndex.PLAYER_2); - game.move.select(Moves.ENDURE, 1); + game.move.select(MoveId.POLLEN_PUFF, 0, BattlerIndex.PLAYER_2); + game.move.select(MoveId.ENDURE, 1); await game.toNextTurn(); diff --git a/test/items/leek.test.ts b/test/items/leek.test.ts index be2aa73299c..05ee77c991a 100644 --- a/test/items/leek.test.ts +++ b/test/items/leek.test.ts @@ -1,7 +1,7 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { randInt } from "#app/utils/common"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -24,21 +24,21 @@ describe("Items - Leek", () => { game = new GameManager(phaserGame); game.override - .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.SPLASH) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyMoveset(MoveId.SPLASH) .startingHeldItems([{ name: "LEEK" }]) - .moveset([Moves.TACKLE]) + .moveset([MoveId.TACKLE]) .battleStyle("single"); }); it("should raise CRIT stage by 2 when held by FARFETCHD", async () => { - await game.classicMode.startBattle([Species.FARFETCHD]); + await game.classicMode.startBattle([SpeciesId.FARFETCHD]); const enemyMember = game.scene.getEnemyPokemon()!; vi.spyOn(enemyMember, "getCritStage"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); @@ -46,13 +46,13 @@ describe("Items - Leek", () => { }, 20000); it("should raise CRIT stage by 2 when held by GALAR_FARFETCHD", async () => { - await game.classicMode.startBattle([Species.GALAR_FARFETCHD]); + await game.classicMode.startBattle([SpeciesId.GALAR_FARFETCHD]); const enemyMember = game.scene.getEnemyPokemon()!; vi.spyOn(enemyMember, "getCritStage"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); @@ -60,13 +60,13 @@ describe("Items - Leek", () => { }, 20000); it("should raise CRIT stage by 2 when held by SIRFETCHD", async () => { - await game.classicMode.startBattle([Species.SIRFETCHD]); + await game.classicMode.startBattle([SpeciesId.SIRFETCHD]); const enemyMember = game.scene.getEnemyPokemon()!; vi.spyOn(enemyMember, "getCritStage"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); @@ -75,9 +75,9 @@ describe("Items - Leek", () => { it("should raise CRIT stage by 2 when held by FARFETCHD line fused with Pokemon", async () => { // Randomly choose from the Farfetch'd line - const species = [Species.FARFETCHD, Species.GALAR_FARFETCHD, Species.SIRFETCHD]; + const species = [SpeciesId.FARFETCHD, SpeciesId.GALAR_FARFETCHD, SpeciesId.SIRFETCHD]; - await game.classicMode.startBattle([species[randInt(species.length)], Species.PIKACHU]); + await game.classicMode.startBattle([species[randInt(species.length)], SpeciesId.PIKACHU]); const [partyMember, ally] = game.scene.getPlayerParty(); @@ -94,7 +94,7 @@ describe("Items - Leek", () => { vi.spyOn(enemyMember, "getCritStage"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); @@ -103,9 +103,9 @@ describe("Items - Leek", () => { it("should raise CRIT stage by 2 when held by Pokemon fused with FARFETCHD line", async () => { // Randomly choose from the Farfetch'd line - const species = [Species.FARFETCHD, Species.GALAR_FARFETCHD, Species.SIRFETCHD]; + const species = [SpeciesId.FARFETCHD, SpeciesId.GALAR_FARFETCHD, SpeciesId.SIRFETCHD]; - await game.classicMode.startBattle([Species.PIKACHU, species[randInt(species.length)]]); + await game.classicMode.startBattle([SpeciesId.PIKACHU, species[randInt(species.length)]]); const [partyMember, ally] = game.scene.getPlayerParty(); @@ -122,7 +122,7 @@ describe("Items - Leek", () => { vi.spyOn(enemyMember, "getCritStage"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); @@ -130,13 +130,13 @@ describe("Items - Leek", () => { }, 20000); it("should not raise CRIT stage when held by a Pokemon outside of FARFETCHD line", async () => { - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); const enemyMember = game.scene.getEnemyPokemon()!; vi.spyOn(enemyMember, "getCritStage"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); diff --git a/test/items/leftovers.test.ts b/test/items/leftovers.test.ts index a31b711eb63..1f42dbcf537 100644 --- a/test/items/leftovers.test.ts +++ b/test/items/leftovers.test.ts @@ -1,8 +1,8 @@ import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -26,16 +26,16 @@ describe("Items - Leftovers", () => { game.override .battleStyle("single") .startingLevel(2000) - .ability(Abilities.UNNERVE) - .moveset([Moves.SPLASH]) - .enemySpecies(Species.SHUCKLE) - .enemyAbility(Abilities.UNNERVE) - .enemyMoveset(Moves.TACKLE) + .ability(AbilityId.UNNERVE) + .moveset([MoveId.SPLASH]) + .enemySpecies(SpeciesId.SHUCKLE) + .enemyAbility(AbilityId.UNNERVE) + .enemyMoveset(MoveId.TACKLE) .startingHeldItems([{ name: "LEFTOVERS", count: 1 }]); }); it("leftovers works", async () => { - await game.classicMode.startBattle([Species.ARCANINE]); + await game.classicMode.startBattle([SpeciesId.ARCANINE]); // Make sure leftovers are there expect(game.scene.modifiers[0].type.id).toBe("LEFTOVERS"); @@ -45,7 +45,7 @@ describe("Items - Leftovers", () => { // We should have full hp expect(leadPokemon.isFullHp()).toBe(true); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); // We should have less hp after the attack await game.phaseInterceptor.to(DamageAnimPhase, false); diff --git a/test/items/light_ball.test.ts b/test/items/light_ball.test.ts index 214f6f624e6..84a1689260f 100644 --- a/test/items/light_ball.test.ts +++ b/test/items/light_ball.test.ts @@ -3,7 +3,7 @@ import { SpeciesStatBoosterModifier } from "#app/modifier/modifier"; import { modifierTypes } from "#app/modifier/modifier-type"; import i18next from "#app/plugins/i18n"; import { NumberHolder } from "#app/utils/common"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -31,7 +31,7 @@ describe("Items - Light Ball", () => { it("LIGHT_BALL activates in battle correctly", async () => { game.override.startingHeldItems([{ name: "RARE_SPECIES_STAT_BOOSTER", type: "LIGHT_BALL" }]); const consoleSpy = vi.spyOn(console, "log"); - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); const partyMember = game.scene.getPlayerParty()[0]; @@ -82,7 +82,7 @@ describe("Items - Light Ball", () => { }); it("LIGHT_BALL held by PIKACHU", async () => { - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); const partyMember = game.scene.getPlayerParty()[0]; @@ -111,7 +111,7 @@ describe("Items - Light Ball", () => { }, 20000); it("LIGHT_BALL held by fused PIKACHU (base)", async () => { - await game.classicMode.startBattle([Species.PIKACHU, Species.MAROWAK]); + await game.classicMode.startBattle([SpeciesId.PIKACHU, SpeciesId.MAROWAK]); const partyMember = game.scene.getPlayerParty()[0]; const ally = game.scene.getPlayerParty()[1]; @@ -150,7 +150,7 @@ describe("Items - Light Ball", () => { }, 20000); it("LIGHT_BALL held by fused PIKACHU (part)", async () => { - await game.classicMode.startBattle([Species.MAROWAK, Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.MAROWAK, SpeciesId.PIKACHU]); const partyMember = game.scene.getPlayerParty()[0]; const ally = game.scene.getPlayerParty()[1]; @@ -189,7 +189,7 @@ describe("Items - Light Ball", () => { }, 20000); it("LIGHT_BALL not held by PIKACHU", async () => { - await game.classicMode.startBattle([Species.MAROWAK]); + await game.classicMode.startBattle([SpeciesId.MAROWAK]); const partyMember = game.scene.getPlayerParty()[0]; diff --git a/test/items/lock_capsule.test.ts b/test/items/lock_capsule.test.ts index 19829578d87..15a1b4e73d1 100644 --- a/test/items/lock_capsule.test.ts +++ b/test/items/lock_capsule.test.ts @@ -1,5 +1,5 @@ -import { Abilities } from "#app/enums/abilities"; -import { Moves } from "#app/enums/moves"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import { UiMode } from "#enums/ui-mode"; @@ -27,8 +27,8 @@ describe("Items - Lock Capsule", () => { game.override .battleStyle("single") .startingLevel(200) - .moveset([Moves.SURF]) - .enemyAbility(Abilities.BALL_FETCH) + .moveset([MoveId.SURF]) + .enemyAbility(AbilityId.BALL_FETCH) .startingModifier([{ name: "LOCK_CAPSULE" }]); }); diff --git a/test/items/metal_powder.test.ts b/test/items/metal_powder.test.ts index a9a81072622..20b0b90a766 100644 --- a/test/items/metal_powder.test.ts +++ b/test/items/metal_powder.test.ts @@ -3,7 +3,7 @@ import { SpeciesStatBoosterModifier } from "#app/modifier/modifier"; import { modifierTypes } from "#app/modifier/modifier-type"; import i18next from "#app/plugins/i18n"; import { NumberHolder } from "#app/utils/common"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -31,7 +31,7 @@ describe("Items - Metal Powder", () => { it("METAL_POWDER activates in battle correctly", async () => { game.override.startingHeldItems([{ name: "RARE_SPECIES_STAT_BOOSTER", type: "METAL_POWDER" }]); const consoleSpy = vi.spyOn(console, "log"); - await game.classicMode.startBattle([Species.DITTO]); + await game.classicMode.startBattle([SpeciesId.DITTO]); const partyMember = game.scene.getPlayerParty()[0]; @@ -82,7 +82,7 @@ describe("Items - Metal Powder", () => { }); it("METAL_POWDER held by DITTO", async () => { - await game.classicMode.startBattle([Species.DITTO]); + await game.classicMode.startBattle([SpeciesId.DITTO]); const partyMember = game.scene.getPlayerParty()[0]; @@ -105,7 +105,7 @@ describe("Items - Metal Powder", () => { }, 20000); it("METAL_POWDER held by fused DITTO (base)", async () => { - await game.classicMode.startBattle([Species.DITTO, Species.MAROWAK]); + await game.classicMode.startBattle([SpeciesId.DITTO, SpeciesId.MAROWAK]); const partyMember = game.scene.getPlayerParty()[0]; const ally = game.scene.getPlayerParty()[1]; @@ -138,7 +138,7 @@ describe("Items - Metal Powder", () => { }, 20000); it("METAL_POWDER held by fused DITTO (part)", async () => { - await game.classicMode.startBattle([Species.MAROWAK, Species.DITTO]); + await game.classicMode.startBattle([SpeciesId.MAROWAK, SpeciesId.DITTO]); const partyMember = game.scene.getPlayerParty()[0]; const ally = game.scene.getPlayerParty()[1]; @@ -171,7 +171,7 @@ describe("Items - Metal Powder", () => { }, 20000); it("METAL_POWDER not held by DITTO", async () => { - await game.classicMode.startBattle([Species.MAROWAK]); + await game.classicMode.startBattle([SpeciesId.MAROWAK]); const partyMember = game.scene.getPlayerParty()[0]; diff --git a/test/items/multi_lens.test.ts b/test/items/multi_lens.test.ts index ff6154b8283..be697eabcf8 100644 --- a/test/items/multi_lens.test.ts +++ b/test/items/multi_lens.test.ts @@ -1,8 +1,8 @@ import { BattlerIndex } from "#app/battle"; import { Stat } from "#enums/stat"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -24,14 +24,14 @@ describe("Items - Multi Lens", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.TACKLE, Moves.TRAILBLAZE, Moves.TACHYON_CUTTER, Moves.FUTURE_SIGHT]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.TACKLE, MoveId.TRAILBLAZE, MoveId.TACHYON_CUTTER, MoveId.FUTURE_SIGHT]) + .ability(AbilityId.BALL_FETCH) .startingHeldItems([{ name: "MULTI_LENS" }]) .battleStyle("single") .disableCrits() - .enemySpecies(Species.SNORLAX) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemySpecies(SpeciesId.SNORLAX) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) .startingLevel(99) // Check for proper rounding on Seismic Toss damage reduction .enemyLevel(99); }); @@ -44,13 +44,13 @@ describe("Items - Multi Lens", () => { async ({ stackCount, firstHitDamage }) => { game.override.startingHeldItems([{ name: "MULTI_LENS", count: stackCount }]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const enemyPokemon = game.scene.getEnemyPokemon()!; const spy = vi.spyOn(enemyPokemon, "getAttackDamage"); vi.spyOn(enemyPokemon, "getBaseDamage").mockReturnValue(100); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -63,13 +63,13 @@ describe("Items - Multi Lens", () => { ); it("should stack additively with Parental Bond", async () => { - game.override.ability(Abilities.PARENTAL_BOND); + game.override.ability(AbilityId.PARENTAL_BOND); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -77,36 +77,36 @@ describe("Items - Multi Lens", () => { }); it("should apply secondary effects on each hit", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.TRAILBLAZE); + game.move.select(MoveId.TRAILBLAZE); await game.phaseInterceptor.to("BerryPhase", false); expect(playerPokemon.getStatStage(Stat.SPD)).toBe(2); }); it("should not enhance multi-hit moves", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.TACHYON_CUTTER); + game.move.select(MoveId.TACHYON_CUTTER); await game.phaseInterceptor.to("BerryPhase", false); expect(playerPokemon.turnData.hitCount).toBe(2); }); it("should enhance multi-target moves", async () => { - game.override.battleStyle("double").moveset([Moves.SWIFT, Moves.SPLASH]); + game.override.battleStyle("double").moveset([MoveId.SWIFT, MoveId.SPLASH]); - await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS]); const [magikarp] = game.scene.getPlayerField(); - game.move.select(Moves.SWIFT, 0); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SWIFT, 0); + game.move.select(MoveId.SPLASH, 1); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); @@ -116,15 +116,15 @@ describe("Items - Multi Lens", () => { }); it("should enhance fixed-damage moves while also applying damage reduction", async () => { - game.override.startingHeldItems([{ name: "MULTI_LENS", count: 1 }]).moveset(Moves.SEISMIC_TOSS); + game.override.startingHeldItems([{ name: "MULTI_LENS", count: 1 }]).moveset(MoveId.SEISMIC_TOSS); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; const spy = vi.spyOn(enemyPokemon, "getAttackDamage"); - game.move.select(Moves.SEISMIC_TOSS); + game.move.select(MoveId.SEISMIC_TOSS); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -138,16 +138,16 @@ describe("Items - Multi Lens", () => { it("should result in correct damage for hp% attacks with 1 lens", async () => { game.override .startingHeldItems([{ name: "MULTI_LENS", count: 1 }]) - .moveset(Moves.SUPER_FANG) - .ability(Abilities.COMPOUND_EYES) + .moveset(MoveId.SUPER_FANG) + .ability(AbilityId.COMPOUND_EYES) .enemyLevel(1000) - .enemySpecies(Species.BLISSEY); // allows for unrealistically high levels of accuracy + .enemySpecies(SpeciesId.BLISSEY); // allows for unrealistically high levels of accuracy - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SUPER_FANG); + game.move.select(MoveId.SUPER_FANG); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); expect(enemyPokemon.getHpRatio()).toBeCloseTo(0.5, 5); @@ -156,17 +156,17 @@ describe("Items - Multi Lens", () => { it("should result in correct damage for hp% attacks with 2 lenses", async () => { game.override .startingHeldItems([{ name: "MULTI_LENS", count: 2 }]) - .moveset(Moves.SUPER_FANG) - .ability(Abilities.COMPOUND_EYES) - .enemyMoveset(Moves.SPLASH) + .moveset(MoveId.SUPER_FANG) + .ability(AbilityId.COMPOUND_EYES) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(1000) - .enemySpecies(Species.BLISSEY); // allows for unrealistically high levels of accuracy + .enemySpecies(SpeciesId.BLISSEY); // allows for unrealistically high levels of accuracy - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SUPER_FANG); + game.move.select(MoveId.SUPER_FANG); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); expect(enemyPokemon.getHpRatio()).toBeCloseTo(0.5, 5); @@ -175,18 +175,18 @@ describe("Items - Multi Lens", () => { it("should result in correct damage for hp% attacks with 2 lenses + Parental Bond", async () => { game.override .startingHeldItems([{ name: "MULTI_LENS", count: 2 }]) - .moveset(Moves.SUPER_FANG) - .ability(Abilities.PARENTAL_BOND) - .passiveAbility(Abilities.COMPOUND_EYES) - .enemyMoveset(Moves.SPLASH) + .moveset(MoveId.SUPER_FANG) + .ability(AbilityId.PARENTAL_BOND) + .passiveAbility(AbilityId.COMPOUND_EYES) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(1000) - .enemySpecies(Species.BLISSEY); // allows for unrealistically high levels of accuracy + .enemySpecies(SpeciesId.BLISSEY); // allows for unrealistically high levels of accuracy - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SUPER_FANG); + game.move.select(MoveId.SUPER_FANG); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); expect(enemyPokemon.getHpRatio()).toBeCloseTo(0.25, 5); @@ -194,12 +194,12 @@ describe("Items - Multi Lens", () => { it("should not allow Future Sight to hit infinitely many times if the user switches out", async () => { game.override.enemyLevel(1000); - await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER, SpeciesId.SQUIRTLE]); const enemyPokemon = game.scene.getEnemyPokemon()!; vi.spyOn(enemyPokemon, "damageAndUpdate"); - game.move.select(Moves.FUTURE_SIGHT); + game.move.select(MoveId.FUTURE_SIGHT); await game.toNextTurn(); game.doSwitchPokemon(1); @@ -213,15 +213,15 @@ describe("Items - Multi Lens", () => { }); it("should not allow Pollen Puff to heal ally more than once", async () => { - game.override.battleStyle("double").moveset([Moves.POLLEN_PUFF, Moves.ENDURE]); - await game.classicMode.startBattle([Species.BULBASAUR, Species.OMANYTE]); + game.override.battleStyle("double").moveset([MoveId.POLLEN_PUFF, MoveId.ENDURE]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.OMANYTE]); const [, rightPokemon] = game.scene.getPlayerField(); rightPokemon.damageAndUpdate(rightPokemon.hp - 1); - game.move.select(Moves.POLLEN_PUFF, 0, BattlerIndex.PLAYER_2); - game.move.select(Moves.ENDURE, 1); + game.move.select(MoveId.POLLEN_PUFF, 0, BattlerIndex.PLAYER_2); + game.move.select(MoveId.ENDURE, 1); await game.toNextTurn(); diff --git a/test/items/mystical_rock.test.ts b/test/items/mystical_rock.test.ts index 59119ce8611..091815aa604 100644 --- a/test/items/mystical_rock.test.ts +++ b/test/items/mystical_rock.test.ts @@ -1,7 +1,7 @@ import { globalScene } from "#app/global-scene"; -import { Moves } from "#enums/moves"; -import { Abilities } from "#enums/abilities"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { AbilityId } from "#enums/ability-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -24,18 +24,18 @@ describe("Items - Mystical Rock", () => { game = new GameManager(phaserGame); game.override - .enemySpecies(Species.SHUCKLE) - .enemyMoveset(Moves.SPLASH) - .enemyAbility(Abilities.BALL_FETCH) - .moveset([Moves.SUNNY_DAY, Moves.GRASSY_TERRAIN]) + .enemySpecies(SpeciesId.SHUCKLE) + .enemyMoveset(MoveId.SPLASH) + .enemyAbility(AbilityId.BALL_FETCH) + .moveset([MoveId.SUNNY_DAY, MoveId.GRASSY_TERRAIN]) .startingHeldItems([{ name: "MYSTICAL_ROCK", count: 2 }]) .battleStyle("single"); }); it("should increase weather duration by +2 turns per stack", async () => { - await game.classicMode.startBattle([Species.GASTLY]); + await game.classicMode.startBattle([SpeciesId.GASTLY]); - game.move.select(Moves.SUNNY_DAY); + game.move.select(MoveId.SUNNY_DAY); await game.phaseInterceptor.to("MoveEndPhase"); @@ -46,9 +46,9 @@ describe("Items - Mystical Rock", () => { }); it("should increase terrain duration by +2 turns per stack", async () => { - await game.classicMode.startBattle([Species.GASTLY]); + await game.classicMode.startBattle([SpeciesId.GASTLY]); - game.move.select(Moves.GRASSY_TERRAIN); + game.move.select(MoveId.GRASSY_TERRAIN); await game.phaseInterceptor.to("MoveEndPhase"); diff --git a/test/items/quick_powder.test.ts b/test/items/quick_powder.test.ts index fb08d6bc71e..0192dec4635 100644 --- a/test/items/quick_powder.test.ts +++ b/test/items/quick_powder.test.ts @@ -3,7 +3,7 @@ import { SpeciesStatBoosterModifier } from "#app/modifier/modifier"; import { modifierTypes } from "#app/modifier/modifier-type"; import i18next from "#app/plugins/i18n"; import { NumberHolder } from "#app/utils/common"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -31,7 +31,7 @@ describe("Items - Quick Powder", () => { it("QUICK_POWDER activates in battle correctly", async () => { game.override.startingHeldItems([{ name: "RARE_SPECIES_STAT_BOOSTER", type: "QUICK_POWDER" }]); const consoleSpy = vi.spyOn(console, "log"); - await game.classicMode.startBattle([Species.DITTO]); + await game.classicMode.startBattle([SpeciesId.DITTO]); const partyMember = game.scene.getPlayerParty()[0]; @@ -82,7 +82,7 @@ describe("Items - Quick Powder", () => { }); it("QUICK_POWDER held by DITTO", async () => { - await game.classicMode.startBattle([Species.DITTO]); + await game.classicMode.startBattle([SpeciesId.DITTO]); const partyMember = game.scene.getPlayerParty()[0]; @@ -105,7 +105,7 @@ describe("Items - Quick Powder", () => { }); it("QUICK_POWDER held by fused DITTO (base)", async () => { - await game.classicMode.startBattle([Species.DITTO, Species.MAROWAK]); + await game.classicMode.startBattle([SpeciesId.DITTO, SpeciesId.MAROWAK]); const partyMember = game.scene.getPlayerParty()[0]; const ally = game.scene.getPlayerParty()[1]; @@ -138,7 +138,7 @@ describe("Items - Quick Powder", () => { }); it("QUICK_POWDER held by fused DITTO (part)", async () => { - await game.classicMode.startBattle([Species.MAROWAK, Species.DITTO]); + await game.classicMode.startBattle([SpeciesId.MAROWAK, SpeciesId.DITTO]); const partyMember = game.scene.getPlayerParty()[0]; const ally = game.scene.getPlayerParty()[1]; @@ -171,7 +171,7 @@ describe("Items - Quick Powder", () => { }); it("QUICK_POWDER not held by DITTO", async () => { - await game.classicMode.startBattle([Species.MAROWAK]); + await game.classicMode.startBattle([SpeciesId.MAROWAK]); const partyMember = game.scene.getPlayerParty()[0]; diff --git a/test/items/reviver_seed.test.ts b/test/items/reviver_seed.test.ts index 13aaf98249e..2ab3c5ffe74 100644 --- a/test/items/reviver_seed.test.ts +++ b/test/items/reviver_seed.test.ts @@ -2,9 +2,9 @@ import { BattlerIndex } from "#app/battle"; import { allMoves } from "#app/data/data-lists"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import type { PokemonInstantReviveModifier } from "#app/modifier/modifier"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -26,46 +26,46 @@ describe("Items - Reviver Seed", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.TACKLE, Moves.ENDURE]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.SPLASH, MoveId.TACKLE, MoveId.ENDURE]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) .startingHeldItems([{ name: "REVIVER_SEED" }]) .enemyHeldItems([{ name: "REVIVER_SEED" }]) - .enemyMoveset(Moves.SPLASH); - vi.spyOn(allMoves[Moves.SHEER_COLD], "accuracy", "get").mockReturnValue(100); - vi.spyOn(allMoves[Moves.LEECH_SEED], "accuracy", "get").mockReturnValue(100); - vi.spyOn(allMoves[Moves.WHIRLPOOL], "accuracy", "get").mockReturnValue(100); - vi.spyOn(allMoves[Moves.WILL_O_WISP], "accuracy", "get").mockReturnValue(100); + .enemyMoveset(MoveId.SPLASH); + vi.spyOn(allMoves[MoveId.SHEER_COLD], "accuracy", "get").mockReturnValue(100); + vi.spyOn(allMoves[MoveId.LEECH_SEED], "accuracy", "get").mockReturnValue(100); + vi.spyOn(allMoves[MoveId.WHIRLPOOL], "accuracy", "get").mockReturnValue(100); + vi.spyOn(allMoves[MoveId.WILL_O_WISP], "accuracy", "get").mockReturnValue(100); }); it.each([ - { moveType: "Special Move", move: Moves.WATER_GUN }, - { moveType: "Physical Move", move: Moves.TACKLE }, - { moveType: "Fixed Damage Move", move: Moves.SEISMIC_TOSS }, - { moveType: "Final Gambit", move: Moves.FINAL_GAMBIT }, - { moveType: "Counter", move: Moves.COUNTER }, - { moveType: "OHKO", move: Moves.SHEER_COLD }, + { moveType: "Special Move", move: MoveId.WATER_GUN }, + { moveType: "Physical Move", move: MoveId.TACKLE }, + { moveType: "Fixed Damage Move", move: MoveId.SEISMIC_TOSS }, + { moveType: "Final Gambit", move: MoveId.FINAL_GAMBIT }, + { moveType: "Counter", move: MoveId.COUNTER }, + { moveType: "OHKO", move: MoveId.SHEER_COLD }, ])("should activate the holder's reviver seed from a $moveType", async ({ move }) => { game.override.enemyLevel(100).startingLevel(1).enemyMoveset(move); - await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS]); const player = game.scene.getPlayerPokemon()!; player.damageAndUpdate(player.hp - 1); const reviverSeed = player.getHeldItems()[0] as PokemonInstantReviveModifier; vi.spyOn(reviverSeed, "apply"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("BerryPhase"); expect(player.isFainted()).toBeFalsy(); }); it("should activate the holder's reviver seed from confusion self-hit", async () => { - game.override.enemyLevel(1).startingLevel(100).enemyMoveset(Moves.SPLASH); - await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); + game.override.enemyLevel(1).startingLevel(100).enemyMoveset(MoveId.SPLASH); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS]); const player = game.scene.getPlayerPokemon()!; player.damageAndUpdate(player.hp - 1); player.addTag(BattlerTagType.CONFUSED, 3); @@ -74,7 +74,7 @@ describe("Items - Reviver Seed", () => { vi.spyOn(reviverSeed, "apply"); vi.spyOn(player, "randBattleSeedInt").mockReturnValue(0); // Force confusion self-hit - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("BerryPhase"); expect(player.isFainted()).toBeFalsy(); @@ -82,19 +82,19 @@ describe("Items - Reviver Seed", () => { // Damaging opponents tests it.each([ - { moveType: "Damaging Move Chip Damage", move: Moves.SALT_CURE }, - { moveType: "Chip Damage", move: Moves.LEECH_SEED }, - { moveType: "Trapping Chip Damage", move: Moves.WHIRLPOOL }, - { moveType: "Status Effect Damage", move: Moves.WILL_O_WISP }, - { moveType: "Weather", move: Moves.SANDSTORM }, + { moveType: "Damaging Move Chip Damage", move: MoveId.SALT_CURE }, + { moveType: "Chip Damage", move: MoveId.LEECH_SEED }, + { moveType: "Trapping Chip Damage", move: MoveId.WHIRLPOOL }, + { moveType: "Status Effect Damage", move: MoveId.WILL_O_WISP }, + { moveType: "Weather", move: MoveId.SANDSTORM }, ])("should not activate the holder's reviver seed from $moveType", async ({ move }) => { game.override .enemyLevel(1) .startingLevel(100) - .enemySpecies(Species.MAGIKARP) + .enemySpecies(SpeciesId.MAGIKARP) .moveset(move) - .enemyMoveset(Moves.ENDURE); - await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); + .enemyMoveset(MoveId.ENDURE); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS]); const enemy = game.scene.getEnemyPokemon()!; enemy.damageAndUpdate(enemy.hp - 1); @@ -106,19 +106,19 @@ describe("Items - Reviver Seed", () => { // Self-damage tests it.each([ - { moveType: "Recoil", move: Moves.DOUBLE_EDGE }, - { moveType: "Self-KO", move: Moves.EXPLOSION }, - { moveType: "Self-Deduction", move: Moves.CURSE }, - { moveType: "Liquid Ooze", move: Moves.GIGA_DRAIN }, + { moveType: "Recoil", move: MoveId.DOUBLE_EDGE }, + { moveType: "Self-KO", move: MoveId.EXPLOSION }, + { moveType: "Self-Deduction", move: MoveId.CURSE }, + { moveType: "Liquid Ooze", move: MoveId.GIGA_DRAIN }, ])("should not activate the holder's reviver seed from $moveType", async ({ move }) => { game.override .enemyLevel(100) .startingLevel(1) - .enemySpecies(Species.MAGIKARP) + .enemySpecies(SpeciesId.MAGIKARP) .moveset(move) - .enemyAbility(Abilities.LIQUID_OOZE) - .enemyMoveset(Moves.SPLASH); - await game.classicMode.startBattle([Species.GASTLY, Species.FEEBAS]); + .enemyAbility(AbilityId.LIQUID_OOZE) + .enemyMoveset(MoveId.SPLASH); + await game.classicMode.startBattle([SpeciesId.GASTLY, SpeciesId.FEEBAS]); const player = game.scene.getPlayerPokemon()!; player.damageAndUpdate(player.hp - 1); @@ -135,16 +135,16 @@ describe("Items - Reviver Seed", () => { game.override .enemyLevel(100) .startingLevel(1) - .enemySpecies(Species.MAGIKARP) - .moveset(Moves.DESTINY_BOND) + .enemySpecies(SpeciesId.MAGIKARP) + .moveset(MoveId.DESTINY_BOND) .startingHeldItems([]) // reset held items to nothing so user doesn't revive and not trigger Destiny Bond - .enemyMoveset(Moves.TACKLE); - await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); + .enemyMoveset(MoveId.TACKLE); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS]); const player = game.scene.getPlayerPokemon()!; player.damageAndUpdate(player.hp - 1); const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DESTINY_BOND); + game.move.select(MoveId.DESTINY_BOND); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("TurnEndPhase"); diff --git a/test/items/scope_lens.test.ts b/test/items/scope_lens.test.ts index c8061ea3696..2ec5260d092 100644 --- a/test/items/scope_lens.test.ts +++ b/test/items/scope_lens.test.ts @@ -1,6 +1,6 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -23,21 +23,21 @@ describe("Items - Scope Lens", () => { game = new GameManager(phaserGame); game.override - .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.SPLASH) - .moveset([Moves.POUND]) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyMoveset(MoveId.SPLASH) + .moveset([MoveId.POUND]) .startingHeldItems([{ name: "SCOPE_LENS" }]) .battleStyle("single"); }, 20000); it("should raise CRIT stage by 1", async () => { - await game.classicMode.startBattle([Species.GASTLY]); + await game.classicMode.startBattle([SpeciesId.GASTLY]); const enemyPokemon = game.scene.getEnemyPokemon()!; vi.spyOn(enemyPokemon, "getCritStage"); - game.move.select(Moves.POUND); + game.move.select(MoveId.POUND); await game.phaseInterceptor.to(TurnEndPhase); diff --git a/test/items/temp_stat_stage_booster.test.ts b/test/items/temp_stat_stage_booster.test.ts index a3cfc3256bb..a58c2d611c9 100644 --- a/test/items/temp_stat_stage_booster.test.ts +++ b/test/items/temp_stat_stage_booster.test.ts @@ -1,11 +1,11 @@ import { BATTLE_STATS, Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#enums/move-id"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { TempStatStageBoosterModifier } from "#app/modifier/modifier"; import { UiMode } from "#enums/ui-mode"; import { Button } from "#app/enums/buttons"; @@ -31,21 +31,21 @@ describe("Items - Temporary Stat Stage Boosters", () => { game.override .battleStyle("single") - .enemySpecies(Species.SHUCKLE) - .enemyMoveset(Moves.SPLASH) - .enemyAbility(Abilities.BALL_FETCH) - .moveset([Moves.TACKLE, Moves.SPLASH, Moves.HONE_CLAWS, Moves.BELLY_DRUM]) + .enemySpecies(SpeciesId.SHUCKLE) + .enemyMoveset(MoveId.SPLASH) + .enemyAbility(AbilityId.BALL_FETCH) + .moveset([MoveId.TACKLE, MoveId.SPLASH, MoveId.HONE_CLAWS, MoveId.BELLY_DRUM]) .startingModifier([{ name: "TEMP_STAT_STAGE_BOOSTER", type: Stat.ATK }]); }); it("should provide a x1.3 stat stage multiplier", async () => { - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); const partyMember = game.scene.getPlayerPokemon()!; vi.spyOn(partyMember, "getStatStageMultiplier"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.runFrom("EnemyCommandPhase").to(TurnEndPhase); @@ -53,20 +53,20 @@ describe("Items - Temporary Stat Stage Boosters", () => { }, 20000); it("should increase existing ACC stat stage by 1 for X_ACCURACY only", async () => { - game.override.startingModifier([{ name: "TEMP_STAT_STAGE_BOOSTER", type: Stat.ACC }]).ability(Abilities.SIMPLE); + game.override.startingModifier([{ name: "TEMP_STAT_STAGE_BOOSTER", type: Stat.ACC }]).ability(AbilityId.SIMPLE); - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); const partyMember = game.scene.getPlayerPokemon()!; vi.spyOn(partyMember, "getAccuracyMultiplier"); // Raise ACC by +2 stat stages - game.move.select(Moves.HONE_CLAWS); + game.move.select(MoveId.HONE_CLAWS); await game.phaseInterceptor.to(TurnEndPhase); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); @@ -75,18 +75,18 @@ describe("Items - Temporary Stat Stage Boosters", () => { }, 20000); it("should increase existing stat stage multiplier by 3/10 for the rest of the boosters", async () => { - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); const partyMember = game.scene.getPlayerPokemon()!; vi.spyOn(partyMember, "getStatStageMultiplier"); // Raise ATK by +1 stat stage - game.move.select(Moves.HONE_CLAWS); + game.move.select(MoveId.HONE_CLAWS); await game.phaseInterceptor.to(TurnEndPhase); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); @@ -100,7 +100,7 @@ describe("Items - Temporary Stat Stage Boosters", () => { { name: "TEMP_STAT_STAGE_BOOSTER", type: Stat.ATK }, ]); - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); const partyMember = game.scene.getPlayerPokemon()!; @@ -110,7 +110,7 @@ describe("Items - Temporary Stat Stage Boosters", () => { // Set all stat stages to 6 vi.spyOn(partyMember.summonData, "statStages", "get").mockReturnValue(new Array(BATTLE_STATS.length).fill(6)); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); @@ -121,9 +121,9 @@ describe("Items - Temporary Stat Stage Boosters", () => { it("should renew how many battles are left of existing booster when picking up new booster of same type", async () => { game.override.startingLevel(200).itemRewards([{ name: "TEMP_STAT_STAGE_BOOSTER", type: Stat.ATK }]); - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); diff --git a/test/items/thick_club.test.ts b/test/items/thick_club.test.ts index 350735a363c..cff080d0e42 100644 --- a/test/items/thick_club.test.ts +++ b/test/items/thick_club.test.ts @@ -3,7 +3,7 @@ import { SpeciesStatBoosterModifier } from "#app/modifier/modifier"; import { modifierTypes } from "#app/modifier/modifier-type"; import i18next from "#app/plugins/i18n"; import { NumberHolder, randInt } from "#app/utils/common"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -31,7 +31,7 @@ describe("Items - Thick Club", () => { it("THICK_CLUB activates in battle correctly", async () => { game.override.startingHeldItems([{ name: "RARE_SPECIES_STAT_BOOSTER", type: "THICK_CLUB" }]); const consoleSpy = vi.spyOn(console, "log"); - await game.classicMode.startBattle([Species.CUBONE]); + await game.classicMode.startBattle([SpeciesId.CUBONE]); const partyMember = game.scene.getPlayerParty()[0]; @@ -82,7 +82,7 @@ describe("Items - Thick Club", () => { }); it("THICK_CLUB held by CUBONE", async () => { - await game.classicMode.startBattle([Species.CUBONE]); + await game.classicMode.startBattle([SpeciesId.CUBONE]); const partyMember = game.scene.getPlayerParty()[0]; @@ -105,7 +105,7 @@ describe("Items - Thick Club", () => { }); it("THICK_CLUB held by MAROWAK", async () => { - await game.classicMode.startBattle([Species.MAROWAK]); + await game.classicMode.startBattle([SpeciesId.MAROWAK]); const partyMember = game.scene.getPlayerParty()[0]; @@ -128,7 +128,7 @@ describe("Items - Thick Club", () => { }); it("THICK_CLUB held by ALOLA_MAROWAK", async () => { - await game.classicMode.startBattle([Species.ALOLA_MAROWAK]); + await game.classicMode.startBattle([SpeciesId.ALOLA_MAROWAK]); const partyMember = game.scene.getPlayerParty()[0]; @@ -152,10 +152,10 @@ describe("Items - Thick Club", () => { it("THICK_CLUB held by fused CUBONE line (base)", async () => { // Randomly choose from the Cubone line - const species = [Species.CUBONE, Species.MAROWAK, Species.ALOLA_MAROWAK]; + const species = [SpeciesId.CUBONE, SpeciesId.MAROWAK, SpeciesId.ALOLA_MAROWAK]; const randSpecies = randInt(species.length); - await game.classicMode.startBattle([species[randSpecies], Species.PIKACHU]); + await game.classicMode.startBattle([species[randSpecies], SpeciesId.PIKACHU]); const partyMember = game.scene.getPlayerParty()[0]; const ally = game.scene.getPlayerParty()[1]; @@ -189,10 +189,10 @@ describe("Items - Thick Club", () => { it("THICK_CLUB held by fused CUBONE line (part)", async () => { // Randomly choose from the Cubone line - const species = [Species.CUBONE, Species.MAROWAK, Species.ALOLA_MAROWAK]; + const species = [SpeciesId.CUBONE, SpeciesId.MAROWAK, SpeciesId.ALOLA_MAROWAK]; const randSpecies = randInt(species.length); - await game.classicMode.startBattle([Species.PIKACHU, species[randSpecies]]); + await game.classicMode.startBattle([SpeciesId.PIKACHU, species[randSpecies]]); const partyMember = game.scene.getPlayerParty()[0]; const ally = game.scene.getPlayerParty()[1]; @@ -225,7 +225,7 @@ describe("Items - Thick Club", () => { }); it("THICK_CLUB not held by CUBONE", async () => { - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); const partyMember = game.scene.getPlayerParty()[0]; diff --git a/test/items/toxic_orb.test.ts b/test/items/toxic_orb.test.ts index d02679e17c1..e0d86655028 100644 --- a/test/items/toxic_orb.test.ts +++ b/test/items/toxic_orb.test.ts @@ -1,7 +1,7 @@ import i18next from "#app/plugins/i18n"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -25,11 +25,11 @@ describe("Items - Toxic orb", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemySpecies(Species.MAGIKARP) - .ability(Abilities.BALL_FETCH) - .enemyAbility(Abilities.BALL_FETCH) - .moveset(Moves.SPLASH) - .enemyMoveset(Moves.SPLASH) + .enemySpecies(SpeciesId.MAGIKARP) + .ability(AbilityId.BALL_FETCH) + .enemyAbility(AbilityId.BALL_FETCH) + .moveset(MoveId.SPLASH) + .enemyMoveset(MoveId.SPLASH) .startingHeldItems([ { name: "TOXIC_ORB", @@ -40,12 +40,12 @@ describe("Items - Toxic orb", () => { }); it("should badly poison the holder", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const player = game.scene.getPlayerPokemon()!; expect(player.getHeldItems()[0].type.id).toBe("TOXIC_ORB"); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); await game.phaseInterceptor.to("MessagePhase"); diff --git a/test/moves/after_you.test.ts b/test/moves/after_you.test.ts index 3fa7c9ceb0a..adf9cae707a 100644 --- a/test/moves/after_you.test.ts +++ b/test/moves/after_you.test.ts @@ -1,9 +1,9 @@ import { BattlerIndex } from "#app/battle"; -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { MoveResult } from "#app/field/pokemon"; import { MovePhase } from "#app/phases/move-phase"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -27,18 +27,18 @@ describe("Moves - After You", () => { game.override .battleStyle("double") .enemyLevel(5) - .enemySpecies(Species.PIKACHU) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) - .ability(Abilities.BALL_FETCH) - .moveset([Moves.AFTER_YOU, Moves.SPLASH]); + .enemySpecies(SpeciesId.PIKACHU) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) + .ability(AbilityId.BALL_FETCH) + .moveset([MoveId.AFTER_YOU, MoveId.SPLASH]); }); it("makes the target move immediately after the user", async () => { - await game.classicMode.startBattle([Species.REGIELEKI, Species.SHUCKLE]); + await game.classicMode.startBattle([SpeciesId.REGIELEKI, SpeciesId.SHUCKLE]); - game.move.select(Moves.AFTER_YOU, 0, BattlerIndex.PLAYER_2); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.AFTER_YOU, 0, BattlerIndex.PLAYER_2); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("MoveEffectPhase"); await game.phaseInterceptor.to(MovePhase, false); @@ -48,11 +48,11 @@ describe("Moves - After You", () => { }); it("fails if target already moved", async () => { - game.override.enemySpecies(Species.SHUCKLE); - await game.classicMode.startBattle([Species.REGIELEKI, Species.PIKACHU]); + game.override.enemySpecies(SpeciesId.SHUCKLE); + await game.classicMode.startBattle([SpeciesId.REGIELEKI, SpeciesId.PIKACHU]); - game.move.select(Moves.SPLASH); - game.move.select(Moves.AFTER_YOU, 1, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.AFTER_YOU, 1, BattlerIndex.PLAYER); await game.phaseInterceptor.to("MoveEndPhase"); await game.phaseInterceptor.to("MoveEndPhase"); diff --git a/test/moves/alluring_voice.test.ts b/test/moves/alluring_voice.test.ts index 9265c5f970d..2cfb7a76317 100644 --- a/test/moves/alluring_voice.test.ts +++ b/test/moves/alluring_voice.test.ts @@ -1,9 +1,9 @@ import { BattlerIndex } from "#app/battle"; -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { BerryPhase } from "#app/phases/berry-phase"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -27,20 +27,20 @@ describe("Moves - Alluring Voice", () => { game.override .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.ICE_SCALES) - .enemyMoveset(Moves.HOWL) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.ICE_SCALES) + .enemyMoveset(MoveId.HOWL) .startingLevel(10) .enemyLevel(10) - .ability(Abilities.BALL_FETCH); + .ability(AbilityId.BALL_FETCH); }); it("should confuse the opponent if their stat stages were raised", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const enemy = game.scene.getEnemyPokemon()!; - game.move.use(Moves.ALLURING_VOICE); + game.move.use(MoveId.ALLURING_VOICE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to(BerryPhase); diff --git a/test/moves/aromatherapy.test.ts b/test/moves/aromatherapy.test.ts index c361f4e8bbd..bfe315a1390 100644 --- a/test/moves/aromatherapy.test.ts +++ b/test/moves/aromatherapy.test.ts @@ -1,8 +1,8 @@ import { StatusEffect } from "#app/enums/status-effect"; import { CommandPhase } from "#app/phases/command-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; @@ -24,24 +24,24 @@ describe("Moves - Aromatherapy", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.AROMATHERAPY, Moves.SPLASH]) + .moveset([MoveId.AROMATHERAPY, MoveId.SPLASH]) .statusEffect(StatusEffect.BURN) .battleStyle("double") - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should cure status effect of the user, its ally, and all party pokemon", async () => { - await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA, Species.RATTATA]); + await game.classicMode.startBattle([SpeciesId.RATTATA, SpeciesId.RATTATA, SpeciesId.RATTATA]); const [leftPlayer, rightPlayer, partyPokemon] = game.scene.getPlayerParty(); vi.spyOn(leftPlayer, "resetStatus"); vi.spyOn(rightPlayer, "resetStatus"); vi.spyOn(partyPokemon, "resetStatus"); - game.move.select(Moves.AROMATHERAPY, 0); + game.move.select(MoveId.AROMATHERAPY, 0); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(leftPlayer.resetStatus).toHaveBeenCalledOnce(); @@ -55,15 +55,15 @@ describe("Moves - Aromatherapy", () => { it("should not cure status effect of the target/target's allies", async () => { game.override.enemyStatusEffect(StatusEffect.BURN); - await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA]); + await game.classicMode.startBattle([SpeciesId.RATTATA, SpeciesId.RATTATA]); const [leftOpp, rightOpp] = game.scene.getEnemyField(); vi.spyOn(leftOpp, "resetStatus"); vi.spyOn(rightOpp, "resetStatus"); - game.move.select(Moves.AROMATHERAPY, 0); + game.move.select(MoveId.AROMATHERAPY, 0); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(leftOpp.resetStatus).toHaveBeenCalledTimes(0); @@ -77,17 +77,17 @@ describe("Moves - Aromatherapy", () => { }); it("should not cure status effect of allies ON FIELD with Sap Sipper, should still cure allies in party", async () => { - game.override.ability(Abilities.SAP_SIPPER); - await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA, Species.RATTATA]); + game.override.ability(AbilityId.SAP_SIPPER); + await game.classicMode.startBattle([SpeciesId.RATTATA, SpeciesId.RATTATA, SpeciesId.RATTATA]); const [leftPlayer, rightPlayer, partyPokemon] = game.scene.getPlayerParty(); vi.spyOn(leftPlayer, "resetStatus"); vi.spyOn(rightPlayer, "resetStatus"); vi.spyOn(partyPokemon, "resetStatus"); - game.move.select(Moves.AROMATHERAPY, 0); + game.move.select(MoveId.AROMATHERAPY, 0); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(leftPlayer.resetStatus).toHaveBeenCalledOnce(); diff --git a/test/moves/assist.test.ts b/test/moves/assist.test.ts index d0385399811..c0bdf2deea2 100644 --- a/test/moves/assist.test.ts +++ b/test/moves/assist.test.ts @@ -2,9 +2,9 @@ import { BattlerIndex } from "#app/battle"; import { Stat } from "#app/enums/stat"; import { MoveResult } from "#app/field/pokemon"; import { CommandPhase } from "#app/phases/command-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -28,26 +28,26 @@ describe("Moves - Assist", () => { // Manual moveset overrides are required for the player pokemon in these tests // because the normal moveset override doesn't allow for accurate testing of moveset changes game.override - .ability(Abilities.BALL_FETCH) + .ability(AbilityId.BALL_FETCH) .battleStyle("double") .disableCrits() - .enemySpecies(Species.MAGIKARP) + .enemySpecies(SpeciesId.MAGIKARP) .enemyLevel(100) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should only use an ally's moves", async () => { - game.override.enemyMoveset(Moves.SWORDS_DANCE); - await game.classicMode.startBattle([Species.FEEBAS, Species.SHUCKLE]); + game.override.enemyMoveset(MoveId.SWORDS_DANCE); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.SHUCKLE]); const [feebas, shuckle] = game.scene.getPlayerField(); // These are all moves Assist cannot call; Sketch will be used to test that it can call other moves properly - game.move.changeMoveset(feebas, [Moves.ASSIST, Moves.SKETCH, Moves.PROTECT, Moves.DRAGON_TAIL]); - game.move.changeMoveset(shuckle, [Moves.ASSIST, Moves.SKETCH, Moves.PROTECT, Moves.DRAGON_TAIL]); + game.move.changeMoveset(feebas, [MoveId.ASSIST, MoveId.SKETCH, MoveId.PROTECT, MoveId.DRAGON_TAIL]); + game.move.changeMoveset(shuckle, [MoveId.ASSIST, MoveId.SKETCH, MoveId.PROTECT, MoveId.DRAGON_TAIL]); - game.move.select(Moves.ASSIST, 0); - game.move.select(Moves.SKETCH, 1); + game.move.select(MoveId.ASSIST, 0); + game.move.select(MoveId.SKETCH, 1); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER]); // Player_2 uses Sketch, copies Swords Dance, Player_1 uses Assist, uses Player_2's Sketched Swords Dance await game.toNextTurn(); @@ -56,48 +56,48 @@ describe("Moves - Assist", () => { }); it("should fail if there are no allies", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const feebas = game.scene.getPlayerPokemon()!; - game.move.changeMoveset(feebas, [Moves.ASSIST, Moves.SKETCH, Moves.PROTECT, Moves.DRAGON_TAIL]); + game.move.changeMoveset(feebas, [MoveId.ASSIST, MoveId.SKETCH, MoveId.PROTECT, MoveId.DRAGON_TAIL]); - game.move.select(Moves.ASSIST, 0); + game.move.select(MoveId.ASSIST, 0); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); it("should fail if ally has no usable moves and user has usable moves", async () => { - game.override.enemyMoveset(Moves.SWORDS_DANCE); - await game.classicMode.startBattle([Species.FEEBAS, Species.SHUCKLE]); + game.override.enemyMoveset(MoveId.SWORDS_DANCE); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.SHUCKLE]); const [feebas, shuckle] = game.scene.getPlayerField(); - game.move.changeMoveset(feebas, [Moves.ASSIST, Moves.SKETCH, Moves.PROTECT, Moves.DRAGON_TAIL]); - game.move.changeMoveset(shuckle, [Moves.ASSIST, Moves.SKETCH, Moves.PROTECT, Moves.DRAGON_TAIL]); + game.move.changeMoveset(feebas, [MoveId.ASSIST, MoveId.SKETCH, MoveId.PROTECT, MoveId.DRAGON_TAIL]); + game.move.changeMoveset(shuckle, [MoveId.ASSIST, MoveId.SKETCH, MoveId.PROTECT, MoveId.DRAGON_TAIL]); - game.move.select(Moves.SKETCH, 0); - game.move.select(Moves.PROTECT, 1); + game.move.select(MoveId.SKETCH, 0); + game.move.select(MoveId.PROTECT, 1); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2]); // Player uses Sketch to copy Swords Dance, Player_2 stalls a turn. Player will attempt Assist and should have no usable moves await game.toNextTurn(); - game.move.select(Moves.ASSIST, 0); + game.move.select(MoveId.ASSIST, 0); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.PROTECT, 1); + game.move.select(MoveId.PROTECT, 1); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); it("should apply secondary effects of a move", async () => { - game.override.moveset([Moves.ASSIST, Moves.WOOD_HAMMER, Moves.WOOD_HAMMER, Moves.WOOD_HAMMER]); - await game.classicMode.startBattle([Species.FEEBAS, Species.SHUCKLE]); + game.override.moveset([MoveId.ASSIST, MoveId.WOOD_HAMMER, MoveId.WOOD_HAMMER, MoveId.WOOD_HAMMER]); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.SHUCKLE]); const [feebas, shuckle] = game.scene.getPlayerField(); - game.move.changeMoveset(feebas, [Moves.ASSIST, Moves.SKETCH, Moves.PROTECT, Moves.DRAGON_TAIL]); - game.move.changeMoveset(shuckle, [Moves.ASSIST, Moves.SKETCH, Moves.PROTECT, Moves.DRAGON_TAIL]); + game.move.changeMoveset(feebas, [MoveId.ASSIST, MoveId.SKETCH, MoveId.PROTECT, MoveId.DRAGON_TAIL]); + game.move.changeMoveset(shuckle, [MoveId.ASSIST, MoveId.SKETCH, MoveId.PROTECT, MoveId.DRAGON_TAIL]); - game.move.select(Moves.ASSIST, 0); + game.move.select(MoveId.ASSIST, 0); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.ASSIST, 1); + game.move.select(MoveId.ASSIST, 1); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!.isFullHp()).toBeFalsy(); // should receive recoil damage from Wood Hammer diff --git a/test/moves/astonish.test.ts b/test/moves/astonish.test.ts index c07b0d7d2c5..48deadf7a01 100644 --- a/test/moves/astonish.test.ts +++ b/test/moves/astonish.test.ts @@ -4,9 +4,9 @@ import { BerryPhase } from "#app/phases/berry-phase"; import { CommandPhase } from "#app/phases/command-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; @@ -29,24 +29,24 @@ describe("Moves - Astonish", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .moveset([Moves.ASTONISH, Moves.SPLASH]) - .enemySpecies(Species.BLASTOISE) - .enemyAbility(Abilities.INSOMNIA) - .enemyMoveset(Moves.TACKLE) + .moveset([MoveId.ASTONISH, MoveId.SPLASH]) + .enemySpecies(SpeciesId.BLASTOISE) + .enemyAbility(AbilityId.INSOMNIA) + .enemyMoveset(MoveId.TACKLE) .startingLevel(100) .enemyLevel(100); - vi.spyOn(allMoves[Moves.ASTONISH], "chance", "get").mockReturnValue(100); + vi.spyOn(allMoves[MoveId.ASTONISH], "chance", "get").mockReturnValue(100); }); test("move effect should cancel the target's move on the turn it applies", async () => { - await game.classicMode.startBattle([Species.MEOWSCARADA]); + await game.classicMode.startBattle([SpeciesId.MEOWSCARADA]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.ASTONISH); + game.move.select(MoveId.ASTONISH); await game.phaseInterceptor.to(MoveEndPhase, false); @@ -59,7 +59,7 @@ describe("Moves - Astonish", () => { await game.phaseInterceptor.to(CommandPhase, false); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(BerryPhase, false); diff --git a/test/moves/aurora_veil.test.ts b/test/moves/aurora_veil.test.ts index 76569ac4a0e..7a00be40d3d 100644 --- a/test/moves/aurora_veil.test.ts +++ b/test/moves/aurora_veil.test.ts @@ -7,9 +7,9 @@ import { ArenaTagType } from "#app/enums/arena-tag-type"; import type Pokemon from "#app/field/pokemon"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { NumberHolder } from "#app/utils/common"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { WeatherType } from "#enums/weather-type"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -38,18 +38,18 @@ describe("Moves - Aurora Veil", () => { globalScene = game.scene; game.override .battleStyle("single") - .ability(Abilities.BALL_FETCH) - .moveset([Moves.ABSORB, Moves.ROCK_SLIDE, Moves.TACKLE]) + .ability(AbilityId.BALL_FETCH) + .moveset([MoveId.ABSORB, MoveId.ROCK_SLIDE, MoveId.TACKLE]) .enemyLevel(100) - .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.AURORA_VEIL) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyMoveset(MoveId.AURORA_VEIL) .disableCrits() .weather(WeatherType.HAIL); }); it("reduces damage of physical attacks by half in a single battle", async () => { - const moveToUse = Moves.TACKLE; - await game.classicMode.startBattle([Species.SHUCKLE]); + const moveToUse = MoveId.TACKLE; + await game.classicMode.startBattle([SpeciesId.SHUCKLE]); game.move.select(moveToUse); @@ -66,8 +66,8 @@ describe("Moves - Aurora Veil", () => { it("reduces damage of physical attacks by a third in a double battle", async () => { game.override.battleStyle("double"); - const moveToUse = Moves.ROCK_SLIDE; - await game.classicMode.startBattle([Species.SHUCKLE, Species.SHUCKLE]); + const moveToUse = MoveId.ROCK_SLIDE; + await game.classicMode.startBattle([SpeciesId.SHUCKLE, SpeciesId.SHUCKLE]); game.move.select(moveToUse); game.move.select(moveToUse, 1); @@ -83,8 +83,8 @@ describe("Moves - Aurora Veil", () => { }); it("reduces damage of special attacks by half in a single battle", async () => { - const moveToUse = Moves.ABSORB; - await game.classicMode.startBattle([Species.SHUCKLE]); + const moveToUse = MoveId.ABSORB; + await game.classicMode.startBattle([SpeciesId.SHUCKLE]); game.move.select(moveToUse); @@ -102,8 +102,8 @@ describe("Moves - Aurora Veil", () => { it("reduces damage of special attacks by a third in a double battle", async () => { game.override.battleStyle("double"); - const moveToUse = Moves.DAZZLING_GLEAM; - await game.classicMode.startBattle([Species.SHUCKLE, Species.SHUCKLE]); + const moveToUse = MoveId.DAZZLING_GLEAM; + await game.classicMode.startBattle([SpeciesId.SHUCKLE, SpeciesId.SHUCKLE]); game.move.select(moveToUse); game.move.select(moveToUse, 1); @@ -119,9 +119,9 @@ describe("Moves - Aurora Veil", () => { }); it("does not affect physical critical hits", async () => { - game.override.moveset([Moves.WICKED_BLOW]); - const moveToUse = Moves.WICKED_BLOW; - await game.classicMode.startBattle([Species.SHUCKLE]); + game.override.moveset([MoveId.WICKED_BLOW]); + const moveToUse = MoveId.WICKED_BLOW; + await game.classicMode.startBattle([SpeciesId.SHUCKLE]); game.move.select(moveToUse); await game.phaseInterceptor.to(TurnEndPhase); @@ -135,10 +135,10 @@ describe("Moves - Aurora Veil", () => { }); it("does not affect critical hits", async () => { - game.override.moveset([Moves.FROST_BREATH]); - const moveToUse = Moves.FROST_BREATH; - vi.spyOn(allMoves[Moves.FROST_BREATH], "accuracy", "get").mockReturnValue(100); - await game.classicMode.startBattle([Species.SHUCKLE]); + game.override.moveset([MoveId.FROST_BREATH]); + const moveToUse = MoveId.FROST_BREATH; + vi.spyOn(allMoves[MoveId.FROST_BREATH], "accuracy", "get").mockReturnValue(100); + await game.classicMode.startBattle([SpeciesId.SHUCKLE]); game.move.select(moveToUse); await game.phaseInterceptor.to(TurnEndPhase); @@ -153,7 +153,7 @@ describe("Moves - Aurora Veil", () => { }); /** - * Calculates the damage of a move multiplied by screen's multiplier, Auroa Veil in this case {@linkcode Moves.AURORA_VEIL}. + * Calculates the damage of a move multiplied by screen's multiplier, Auroa Veil in this case {@linkcode MoveId.AURORA_VEIL}. * Please note this does not consider other damage calculations except the screen multiplier. * * @param defender - The defending Pokémon. diff --git a/test/moves/autotomize.test.ts b/test/moves/autotomize.test.ts index 08e55f242bc..000dd19b8f5 100644 --- a/test/moves/autotomize.test.ts +++ b/test/moves/autotomize.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; @@ -23,10 +23,10 @@ describe("Moves - Autotomize", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.AUTOTOMIZE, Moves.KINGS_SHIELD, Moves.FALSE_SWIPE]) + .moveset([MoveId.AUTOTOMIZE, MoveId.KINGS_SHIELD, MoveId.FALSE_SWIPE]) .battleStyle("single") - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it( @@ -37,18 +37,18 @@ describe("Moves - Autotomize", () => { const twoAutotomizeDracozoltWeight = 0.1; const threeAutotomizeDracozoltWeight = 0.1; - await game.classicMode.startBattle([Species.DRACOZOLT]); + await game.classicMode.startBattle([SpeciesId.DRACOZOLT]); const playerPokemon = game.scene.getPlayerPokemon()!; expect(playerPokemon.getWeight()).toBe(baseDracozoltWeight); - game.move.select(Moves.AUTOTOMIZE); + game.move.select(MoveId.AUTOTOMIZE); await game.toNextTurn(); expect(playerPokemon.getWeight()).toBe(oneAutotomizeDracozoltWeight); - game.move.select(Moves.AUTOTOMIZE); + game.move.select(MoveId.AUTOTOMIZE); await game.toNextTurn(); expect(playerPokemon.getWeight()).toBe(twoAutotomizeDracozoltWeight); - game.move.select(Moves.AUTOTOMIZE); + game.move.select(MoveId.AUTOTOMIZE); await game.toNextTurn(); expect(playerPokemon.getWeight()).toBe(threeAutotomizeDracozoltWeight); }, @@ -61,30 +61,30 @@ describe("Moves - Autotomize", () => { const baseAegislashWeight = 53; const autotomizeAegislashWeight = 0.1; - await game.classicMode.startBattle([Species.AEGISLASH]); + await game.classicMode.startBattle([SpeciesId.AEGISLASH]); const playerPokemon = game.scene.getPlayerPokemon()!; expect(playerPokemon.getWeight()).toBe(baseAegislashWeight); - game.move.select(Moves.AUTOTOMIZE); + game.move.select(MoveId.AUTOTOMIZE); await game.toNextTurn(); expect(playerPokemon.getWeight()).toBe(autotomizeAegislashWeight); // Transform to sword form - game.move.select(Moves.FALSE_SWIPE); + game.move.select(MoveId.FALSE_SWIPE); await game.toNextTurn(); expect(playerPokemon.getWeight()).toBe(baseAegislashWeight); - game.move.select(Moves.AUTOTOMIZE); + game.move.select(MoveId.AUTOTOMIZE); await game.toNextTurn(); expect(playerPokemon.getWeight()).toBe(autotomizeAegislashWeight); // Transform to shield form - game.move.select(Moves.KINGS_SHIELD); + game.move.select(MoveId.KINGS_SHIELD); await game.toNextTurn(); expect(playerPokemon.getWeight()).toBe(baseAegislashWeight); - game.move.select(Moves.AUTOTOMIZE); + game.move.select(MoveId.AUTOTOMIZE); await game.toNextTurn(); expect(playerPokemon.getWeight()).toBe(autotomizeAegislashWeight); }, @@ -96,11 +96,11 @@ describe("Moves - Autotomize", () => { async () => { const baseLightGroudonWeight = 475; const autotomizeLightGroudonWeight = 425; - game.override.ability(Abilities.LIGHT_METAL); - await game.classicMode.startBattle([Species.GROUDON]); + game.override.ability(AbilityId.LIGHT_METAL); + await game.classicMode.startBattle([SpeciesId.GROUDON]); const playerPokemon = game.scene.getPlayerPokemon()!; expect(playerPokemon.getWeight()).toBe(baseLightGroudonWeight); - game.move.select(Moves.AUTOTOMIZE); + game.move.select(MoveId.AUTOTOMIZE); await game.toNextTurn(); expect(playerPokemon.getWeight()).toBe(autotomizeLightGroudonWeight); }, diff --git a/test/moves/baddy_bad.test.ts b/test/moves/baddy_bad.test.ts index ed6c9239eea..ffdf9f0309c 100644 --- a/test/moves/baddy_bad.test.ts +++ b/test/moves/baddy_bad.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -21,19 +21,19 @@ describe("Moves - Baddy Bad", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .battleStyle("single") - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) - .ability(Abilities.BALL_FETCH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) + .ability(AbilityId.BALL_FETCH); }); it("should not activate Reflect if the move fails due to Protect", async () => { - game.override.enemyMoveset(Moves.PROTECT); - await game.classicMode.startBattle([Species.FEEBAS]); + game.override.enemyMoveset(MoveId.PROTECT); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.BADDY_BAD); + game.move.select(MoveId.BADDY_BAD); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.tags.length).toBe(0); diff --git a/test/moves/baneful_bunker.test.ts b/test/moves/baneful_bunker.test.ts index 4d0d7237c00..80b9b5470b1 100644 --- a/test/moves/baneful_bunker.test.ts +++ b/test/moves/baneful_bunker.test.ts @@ -1,9 +1,9 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; import GameManager from "#test/testUtils/gameManager"; -import { Species } from "#enums/species"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; +import { SpeciesId } from "#enums/species-id"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; import { BattlerIndex } from "#app/battle"; import { StatusEffect } from "#app/enums/status-effect"; @@ -26,34 +26,34 @@ describe("Moves - Baneful Bunker", () => { game.override.battleStyle("single"); - game.override.moveset(Moves.SLASH); + game.override.moveset(MoveId.SLASH); - game.override.enemySpecies(Species.SNORLAX); - game.override.enemyAbility(Abilities.INSOMNIA); - game.override.enemyMoveset(Moves.BANEFUL_BUNKER); + game.override.enemySpecies(SpeciesId.SNORLAX); + game.override.enemyAbility(AbilityId.INSOMNIA); + game.override.enemyMoveset(MoveId.BANEFUL_BUNKER); game.override.startingLevel(100); game.override.enemyLevel(100); }); test("should protect the user and poison attackers that make contact", async () => { - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SLASH); + game.move.select(MoveId.SLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase", false); expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); expect(leadPokemon.status?.effect === StatusEffect.POISON).toBeTruthy(); }); test("should protect the user and poison attackers that make contact, regardless of accuracy checks", async () => { - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SLASH); + game.move.select(MoveId.SLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -64,13 +64,13 @@ describe("Moves - Baneful Bunker", () => { }); test("should not poison attackers that don't make contact", async () => { - game.override.moveset(Moves.FLASH_CANNON); - await game.classicMode.startBattle([Species.CHARIZARD]); + game.override.moveset(MoveId.FLASH_CANNON); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.FLASH_CANNON); + game.move.select(MoveId.FLASH_CANNON); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("MoveEffectPhase"); diff --git a/test/moves/baton_pass.test.ts b/test/moves/baton_pass.test.ts index 143ed285023..b39e51428b1 100644 --- a/test/moves/baton_pass.test.ts +++ b/test/moves/baton_pass.test.ts @@ -1,9 +1,9 @@ import { BattlerIndex } from "#app/battle"; import GameManager from "#test/testUtils/gameManager"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -26,20 +26,20 @@ describe("Moves - Baton Pass", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .moveset([Moves.BATON_PASS, Moves.NASTY_PLOT, Moves.SPLASH]) - .ability(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .moveset([MoveId.BATON_PASS, MoveId.NASTY_PLOT, MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) .disableCrits(); }); it("transfers all stat stages when player uses it", async () => { // arrange - await game.classicMode.startBattle([Species.RAICHU, Species.SHUCKLE]); + await game.classicMode.startBattle([SpeciesId.RAICHU, SpeciesId.SHUCKLE]); // round 1 - buff - game.move.select(Moves.NASTY_PLOT); + game.move.select(MoveId.NASTY_PLOT); await game.toNextTurn(); let playerPokemon = game.scene.getPlayerPokemon()!; @@ -47,32 +47,32 @@ describe("Moves - Baton Pass", () => { expect(playerPokemon.getStatStage(Stat.SPATK)).toEqual(2); // round 2 - baton pass - game.move.select(Moves.BATON_PASS); + game.move.select(MoveId.BATON_PASS); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); // assert playerPokemon = game.scene.getPlayerPokemon()!; - expect(playerPokemon.species.speciesId).toEqual(Species.SHUCKLE); + expect(playerPokemon.species.speciesId).toEqual(SpeciesId.SHUCKLE); expect(playerPokemon.getStatStage(Stat.SPATK)).toEqual(2); }, 20000); it("passes stat stage buffs when AI uses it", async () => { // arrange - game.override.startingWave(5).enemyMoveset(new Array(4).fill([Moves.NASTY_PLOT])); - await game.classicMode.startBattle([Species.RAICHU, Species.SHUCKLE]); + game.override.startingWave(5).enemyMoveset(new Array(4).fill([MoveId.NASTY_PLOT])); + await game.classicMode.startBattle([SpeciesId.RAICHU, SpeciesId.SHUCKLE]); // round 1 - ai buffs - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // round 2 - baton pass game.scene.getEnemyPokemon()!.hp = 100; - game.override.enemyMoveset([Moves.BATON_PASS]); + game.override.enemyMoveset([MoveId.BATON_PASS]); // Force moveset to update mid-battle // TODO: replace with enemy ai control function when it's added game.scene.getEnemyParty()[0].getMoveset(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("PostSummonPhase", false); // assert @@ -90,12 +90,12 @@ describe("Moves - Baton Pass", () => { }, 20000); it("doesn't transfer effects that aren't transferrable", async () => { - game.override.enemyMoveset([Moves.SALT_CURE]); - await game.classicMode.startBattle([Species.PIKACHU, Species.FEEBAS]); + game.override.enemyMoveset([MoveId.SALT_CURE]); + await game.classicMode.startBattle([SpeciesId.PIKACHU, SpeciesId.FEEBAS]); const [player1, player2] = game.scene.getPlayerParty(); - game.move.select(Moves.BATON_PASS); + game.move.select(MoveId.BATON_PASS); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("MoveEndPhase"); expect(player1.findTag(t => t.tagType === BattlerTagType.SALT_CURED)).toBeTruthy(); @@ -106,13 +106,13 @@ describe("Moves - Baton Pass", () => { }, 20000); it("doesn't allow binding effects from the user to persist", async () => { - game.override.moveset([Moves.FIRE_SPIN, Moves.BATON_PASS]); + game.override.moveset([MoveId.FIRE_SPIN, MoveId.BATON_PASS]); - await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS]); const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.FIRE_SPIN); + game.move.select(MoveId.FIRE_SPIN); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceHit(); @@ -120,7 +120,7 @@ describe("Moves - Baton Pass", () => { expect(enemy.getTag(BattlerTagType.FIRE_SPIN)).toBeDefined(); - game.move.select(Moves.BATON_PASS); + game.move.select(MoveId.BATON_PASS); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); game.doSelectPartyPokemon(1); diff --git a/test/moves/beak_blast.test.ts b/test/moves/beak_blast.test.ts index 45841cecd52..ad2959e5101 100644 --- a/test/moves/beak_blast.test.ts +++ b/test/moves/beak_blast.test.ts @@ -3,9 +3,9 @@ import { StatusEffect } from "#app/enums/status-effect"; import { BerryPhase } from "#app/phases/berry-phase"; import { MovePhase } from "#app/phases/move-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -28,22 +28,22 @@ describe("Moves - Beak Blast", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .ability(Abilities.UNNERVE) - .moveset([Moves.BEAK_BLAST]) - .enemySpecies(Species.SNORLAX) - .enemyAbility(Abilities.INSOMNIA) - .enemyMoveset([Moves.TACKLE]) + .ability(AbilityId.UNNERVE) + .moveset([MoveId.BEAK_BLAST]) + .enemySpecies(SpeciesId.SNORLAX) + .enemyAbility(AbilityId.INSOMNIA) + .enemyMoveset([MoveId.TACKLE]) .startingLevel(100) .enemyLevel(100); }); it("should add a charge effect that burns attackers on contact", async () => { - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.BEAK_BLAST); + game.move.select(MoveId.BEAK_BLAST); await game.phaseInterceptor.to(MovePhase, false); expect(leadPokemon.getTag(BattlerTagType.BEAK_BLAST_CHARGING)).toBeDefined(); @@ -55,12 +55,12 @@ describe("Moves - Beak Blast", () => { it("should still charge and burn opponents if the user is sleeping", async () => { game.override.statusEffect(StatusEffect.SLEEP); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.BEAK_BLAST); + game.move.select(MoveId.BEAK_BLAST); await game.phaseInterceptor.to(MovePhase, false); expect(leadPokemon.getTag(BattlerTagType.BEAK_BLAST_CHARGING)).toBeDefined(); @@ -70,14 +70,14 @@ describe("Moves - Beak Blast", () => { }); it("should not burn attackers that don't make contact", async () => { - game.override.enemyMoveset([Moves.WATER_GUN]); + game.override.enemyMoveset([MoveId.WATER_GUN]); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.BEAK_BLAST); + game.move.select(MoveId.BEAK_BLAST); await game.phaseInterceptor.to(MovePhase, false); expect(leadPokemon.getTag(BattlerTagType.BEAK_BLAST_CHARGING)).toBeDefined(); @@ -89,25 +89,25 @@ describe("Moves - Beak Blast", () => { it("should only hit twice with Multi-Lens", async () => { game.override.startingHeldItems([{ name: "MULTI_LENS", count: 1 }]); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.BEAK_BLAST); + game.move.select(MoveId.BEAK_BLAST); await game.phaseInterceptor.to(BerryPhase, false); expect(leadPokemon.turnData.hitCount).toBe(2); }); it("should be blocked by Protect", async () => { - game.override.enemyMoveset([Moves.PROTECT]); + game.override.enemyMoveset([MoveId.PROTECT]); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.BEAK_BLAST); + game.move.select(MoveId.BEAK_BLAST); await game.phaseInterceptor.to(MovePhase, false); expect(leadPokemon.getTag(BattlerTagType.BEAK_BLAST_CHARGING)).toBeDefined(); @@ -118,21 +118,21 @@ describe("Moves - Beak Blast", () => { }); it("should still burn the enemy if the user is knocked out", async () => { - game.override.ability(Abilities.BALL_FETCH); - await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); + game.override.ability(AbilityId.BALL_FETCH); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]); const enemyPokemon = game.scene.getEnemyPokemon()!; const user = game.scene.getPlayerPokemon()!; user.hp = 1; - game.move.select(Moves.BEAK_BLAST); + game.move.select(MoveId.BEAK_BLAST); await game.phaseInterceptor.to("BerryPhase", false); expect(enemyPokemon.status?.effect).toBe(StatusEffect.BURN); }); it("should not burn a long reach enemy that hits the user with a contact move", async () => { - game.override.enemyAbility(Abilities.LONG_REACH); - game.override.enemyMoveset([Moves.FALSE_SWIPE]).enemyLevel(100); - await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.BEAK_BLAST); + game.override.enemyAbility(AbilityId.LONG_REACH); + game.override.enemyMoveset([MoveId.FALSE_SWIPE]).enemyLevel(100); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); + game.move.select(MoveId.BEAK_BLAST); await game.phaseInterceptor.to("BerryPhase", false); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon.status?.effect).not.toBe(StatusEffect.BURN); diff --git a/test/moves/beat_up.test.ts b/test/moves/beat_up.test.ts index 09166dafb9d..184204a91aa 100644 --- a/test/moves/beat_up.test.ts +++ b/test/moves/beat_up.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#app/enums/abilities"; -import { Moves } from "#app/enums/moves"; -import { Species } from "#app/enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#app/enums/status-effect"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import GameManager from "#test/testUtils/gameManager"; @@ -25,30 +25,30 @@ describe("Moves - Beat Up", () => { game = new GameManager(phaserGame); game.override.battleStyle("single"); - game.override.enemySpecies(Species.SNORLAX); + game.override.enemySpecies(SpeciesId.SNORLAX); game.override.enemyLevel(100); - game.override.enemyMoveset([Moves.SPLASH]); - game.override.enemyAbility(Abilities.INSOMNIA); + game.override.enemyMoveset([MoveId.SPLASH]); + game.override.enemyAbility(AbilityId.INSOMNIA); game.override.startingLevel(100); - game.override.moveset([Moves.BEAT_UP]); + game.override.moveset([MoveId.BEAT_UP]); }); it("should hit once for each healthy player Pokemon", async () => { await game.classicMode.startBattle([ - Species.MAGIKARP, - Species.BULBASAUR, - Species.CHARMANDER, - Species.SQUIRTLE, - Species.PIKACHU, - Species.EEVEE, + SpeciesId.MAGIKARP, + SpeciesId.BULBASAUR, + SpeciesId.CHARMANDER, + SpeciesId.SQUIRTLE, + SpeciesId.PIKACHU, + SpeciesId.EEVEE, ]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; let enemyStartingHp = enemyPokemon.hp; - game.move.select(Moves.BEAT_UP); + game.move.select(MoveId.BEAT_UP); await game.phaseInterceptor.to(MoveEffectPhase); @@ -64,19 +64,19 @@ describe("Moves - Beat Up", () => { it("should not count player Pokemon with status effects towards hit count", async () => { await game.classicMode.startBattle([ - Species.MAGIKARP, - Species.BULBASAUR, - Species.CHARMANDER, - Species.SQUIRTLE, - Species.PIKACHU, - Species.EEVEE, + SpeciesId.MAGIKARP, + SpeciesId.BULBASAUR, + SpeciesId.CHARMANDER, + SpeciesId.SQUIRTLE, + SpeciesId.PIKACHU, + SpeciesId.EEVEE, ]); const playerPokemon = game.scene.getPlayerPokemon()!; game.scene.getPlayerParty()[1].trySetStatus(StatusEffect.BURN); - game.move.select(Moves.BEAT_UP); + game.move.select(MoveId.BEAT_UP); await game.phaseInterceptor.to(MoveEffectPhase); diff --git a/test/moves/belly_drum.test.ts b/test/moves/belly_drum.test.ts index 9deff207446..239b3c3d794 100644 --- a/test/moves/belly_drum.test.ts +++ b/test/moves/belly_drum.test.ts @@ -1,12 +1,12 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { toDmgValue } from "#app/utils/common"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; // RATIO : HP Cost of Move const RATIO = 2; @@ -30,24 +30,24 @@ describe("Moves - BELLY DRUM", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .starterSpecies(Species.MAGIKARP) - .enemySpecies(Species.SNORLAX) + .starterSpecies(SpeciesId.MAGIKARP) + .enemySpecies(SpeciesId.SNORLAX) .startingLevel(100) .enemyLevel(100) - .moveset([Moves.BELLY_DRUM]) - .enemyMoveset(Moves.SPLASH) - .enemyAbility(Abilities.BALL_FETCH); + .moveset([MoveId.BELLY_DRUM]) + .enemyMoveset(MoveId.SPLASH) + .enemyAbility(AbilityId.BALL_FETCH); }); // Bulbapedia Reference: https://bulbapedia.bulbagarden.net/wiki/Belly_Drum_(move) test("raises the user's ATK stat stage to its max, at the cost of 1/2 of its maximum HP", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = toDmgValue(leadPokemon.getMaxHp() / RATIO); - game.move.select(Moves.BELLY_DRUM); + game.move.select(MoveId.BELLY_DRUM); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp() - hpLost); @@ -55,7 +55,7 @@ describe("Moves - BELLY DRUM", () => { }); test("will still take effect if an uninvolved stat stage is at max", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = toDmgValue(leadPokemon.getMaxHp() / RATIO); @@ -64,7 +64,7 @@ describe("Moves - BELLY DRUM", () => { leadPokemon.setStatStage(Stat.ATK, -3); leadPokemon.setStatStage(Stat.SPATK, 6); - game.move.select(Moves.BELLY_DRUM); + game.move.select(MoveId.BELLY_DRUM); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp() - hpLost); @@ -73,13 +73,13 @@ describe("Moves - BELLY DRUM", () => { }); test("fails if the pokemon's ATK stat stage is at its maximum", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; leadPokemon.setStatStage(Stat.ATK, 6); - game.move.select(Moves.BELLY_DRUM); + game.move.select(MoveId.BELLY_DRUM); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp()); @@ -87,13 +87,13 @@ describe("Moves - BELLY DRUM", () => { }); test("fails if the user's health is less than 1/2", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = toDmgValue(leadPokemon.getMaxHp() / RATIO); leadPokemon.hp = hpLost - PREDAMAGE; - game.move.select(Moves.BELLY_DRUM); + game.move.select(MoveId.BELLY_DRUM); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.hp).toBe(hpLost - PREDAMAGE); diff --git a/test/moves/burning_jealousy.test.ts b/test/moves/burning_jealousy.test.ts index 1d9ba974687..2a74f661922 100644 --- a/test/moves/burning_jealousy.test.ts +++ b/test/moves/burning_jealousy.test.ts @@ -1,9 +1,9 @@ import { BattlerIndex } from "#app/battle"; import { allMoves } from "#app/data/data-lists"; -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { StatusEffect } from "#app/enums/status-effect"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -27,14 +27,14 @@ describe("Moves - Burning Jealousy", () => { game.override .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.ICE_SCALES) - .enemyMoveset([Moves.HOWL]) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.ICE_SCALES) + .enemyMoveset([MoveId.HOWL]) .startingLevel(10) .enemyLevel(10) - .starterSpecies(Species.FEEBAS) - .ability(Abilities.BALL_FETCH) - .moveset([Moves.BURNING_JEALOUSY, Moves.GROWL]); + .starterSpecies(SpeciesId.FEEBAS) + .ability(AbilityId.BALL_FETCH) + .moveset([MoveId.BURNING_JEALOUSY, MoveId.GROWL]); }); it("should burn the opponent if their stat stages were raised", async () => { @@ -42,7 +42,7 @@ describe("Moves - Burning Jealousy", () => { const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.BURNING_JEALOUSY); + game.move.select(MoveId.BURNING_JEALOUSY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); @@ -51,12 +51,12 @@ describe("Moves - Burning Jealousy", () => { it("should still burn the opponent if their stat stages were both raised and lowered in the same turn", async () => { game.override.starterSpecies(0).battleStyle("double"); - await game.classicMode.startBattle([Species.FEEBAS, Species.ABRA]); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.ABRA]); const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.BURNING_JEALOUSY); - game.move.select(Moves.GROWL, 1); + game.move.select(MoveId.BURNING_JEALOUSY); + game.move.select(MoveId.GROWL, 1); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("BerryPhase"); @@ -64,12 +64,12 @@ describe("Moves - Burning Jealousy", () => { }); it("should ignore stat stages raised by IMPOSTER", async () => { - game.override.enemySpecies(Species.DITTO).enemyAbility(Abilities.IMPOSTER).enemyMoveset(Moves.SPLASH); + game.override.enemySpecies(SpeciesId.DITTO).enemyAbility(AbilityId.IMPOSTER).enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.BURNING_JEALOUSY); + game.move.select(MoveId.BURNING_JEALOUSY); await game.phaseInterceptor.to("BerryPhase"); expect(enemy.status?.effect).toBeUndefined(); @@ -81,15 +81,15 @@ describe("Moves - Burning Jealousy", () => { }); it("should be boosted by Sheer Force even if opponent didn't raise stat stages", async () => { - game.override.ability(Abilities.SHEER_FORCE).enemyMoveset(Moves.SPLASH); - vi.spyOn(allMoves[Moves.BURNING_JEALOUSY], "calculateBattlePower"); + game.override.ability(AbilityId.SHEER_FORCE).enemyMoveset(MoveId.SPLASH); + vi.spyOn(allMoves[MoveId.BURNING_JEALOUSY], "calculateBattlePower"); await game.classicMode.startBattle(); - game.move.select(Moves.BURNING_JEALOUSY); + game.move.select(MoveId.BURNING_JEALOUSY); await game.phaseInterceptor.to("BerryPhase"); - expect(allMoves[Moves.BURNING_JEALOUSY].calculateBattlePower).toHaveReturnedWith( - allMoves[Moves.BURNING_JEALOUSY].power * 1.3, + expect(allMoves[MoveId.BURNING_JEALOUSY].calculateBattlePower).toHaveReturnedWith( + allMoves[MoveId.BURNING_JEALOUSY].power * 1.3, ); }); }); diff --git a/test/moves/camouflage.test.ts b/test/moves/camouflage.test.ts index 38cdef80fc1..53c44f1386b 100644 --- a/test/moves/camouflage.test.ts +++ b/test/moves/camouflage.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { TerrainType } from "#app/data/terrain"; import { PokemonType } from "#enums/pokemon-type"; import { BattlerIndex } from "#app/battle"; @@ -25,21 +25,21 @@ describe("Moves - Camouflage", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.CAMOUFLAGE]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.CAMOUFLAGE]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.REGIELEKI) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.PSYCHIC_TERRAIN); + .enemySpecies(SpeciesId.REGIELEKI) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.PSYCHIC_TERRAIN); }); it("Camouflage should look at terrain first when selecting a type to change into", async () => { - await game.classicMode.startBattle([Species.SHUCKLE]); + await game.classicMode.startBattle([SpeciesId.SHUCKLE]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.CAMOUFLAGE); + game.move.select(MoveId.CAMOUFLAGE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTerrainType()).toBe(TerrainType.PSYCHIC); diff --git a/test/moves/ceaseless_edge.test.ts b/test/moves/ceaseless_edge.test.ts index e88b301239d..65f9b69509d 100644 --- a/test/moves/ceaseless_edge.test.ts +++ b/test/moves/ceaseless_edge.test.ts @@ -1,11 +1,11 @@ import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; import { allMoves } from "#app/data/data-lists"; -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; @@ -27,24 +27,24 @@ describe("Moves - Ceaseless Edge", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleStyle("single"); - game.override.enemySpecies(Species.RATTATA); - game.override.enemyAbility(Abilities.RUN_AWAY); - game.override.enemyPassiveAbility(Abilities.RUN_AWAY); + game.override.enemySpecies(SpeciesId.RATTATA); + game.override.enemyAbility(AbilityId.RUN_AWAY); + game.override.enemyPassiveAbility(AbilityId.RUN_AWAY); game.override.startingLevel(100); game.override.enemyLevel(100); - game.override.moveset([Moves.CEASELESS_EDGE, Moves.SPLASH, Moves.ROAR]); - game.override.enemyMoveset(Moves.SPLASH); - vi.spyOn(allMoves[Moves.CEASELESS_EDGE], "accuracy", "get").mockReturnValue(100); + game.override.moveset([MoveId.CEASELESS_EDGE, MoveId.SPLASH, MoveId.ROAR]); + game.override.enemyMoveset(MoveId.SPLASH); + vi.spyOn(allMoves[MoveId.CEASELESS_EDGE], "accuracy", "get").mockReturnValue(100); }); test("move should hit and apply spikes", async () => { - await game.classicMode.startBattle([Species.ILLUMISE]); + await game.classicMode.startBattle([SpeciesId.ILLUMISE]); const enemyPokemon = game.scene.getEnemyPokemon()!; const enemyStartingHp = enemyPokemon.hp; - game.move.select(Moves.CEASELESS_EDGE); + game.move.select(MoveId.CEASELESS_EDGE); await game.phaseInterceptor.to(MoveEffectPhase, false); // Spikes should not have any layers before move effect is applied @@ -60,13 +60,13 @@ describe("Moves - Ceaseless Edge", () => { test("move should hit twice with multi lens and apply two layers of spikes", async () => { game.override.startingHeldItems([{ name: "MULTI_LENS" }]); - await game.classicMode.startBattle([Species.ILLUMISE]); + await game.classicMode.startBattle([SpeciesId.ILLUMISE]); const enemyPokemon = game.scene.getEnemyPokemon()!; const enemyStartingHp = enemyPokemon.hp; - game.move.select(Moves.CEASELESS_EDGE); + game.move.select(MoveId.CEASELESS_EDGE); await game.phaseInterceptor.to(MoveEffectPhase, false); // Spikes should not have any layers before move effect is applied @@ -84,9 +84,9 @@ describe("Moves - Ceaseless Edge", () => { game.override.startingHeldItems([{ name: "MULTI_LENS" }]); game.override.startingWave(25); - await game.classicMode.startBattle([Species.ILLUMISE]); + await game.classicMode.startBattle([SpeciesId.ILLUMISE]); - game.move.select(Moves.CEASELESS_EDGE); + game.move.select(MoveId.CEASELESS_EDGE); await game.phaseInterceptor.to(MoveEffectPhase, false); // Spikes should not have any layers before move effect is applied const tagBefore = game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.ENEMY) as ArenaTrapTag; @@ -100,7 +100,7 @@ describe("Moves - Ceaseless Edge", () => { const hpBeforeSpikes = game.scene.currentBattle.enemyParty[1].hp; // Check HP of pokemon that WILL BE switched in (index 1) game.forceEnemyToSwitch(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase, false); expect(game.scene.currentBattle.enemyParty[0].hp).toBeLessThan(hpBeforeSpikes); }); diff --git a/test/moves/chilly_reception.test.ts b/test/moves/chilly_reception.test.ts index 2c04e0e7313..14141208161 100644 --- a/test/moves/chilly_reception.test.ts +++ b/test/moves/chilly_reception.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#app/enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { WeatherType } from "#enums/weather-type"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -25,56 +25,56 @@ describe("Moves - Chilly Reception", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .moveset([Moves.CHILLY_RECEPTION, Moves.SNOWSCAPE]) - .enemyMoveset(Moves.SPLASH) - .enemyAbility(Abilities.BALL_FETCH) - .ability(Abilities.BALL_FETCH); + .moveset([MoveId.CHILLY_RECEPTION, MoveId.SNOWSCAPE]) + .enemyMoveset(MoveId.SPLASH) + .enemyAbility(AbilityId.BALL_FETCH) + .ability(AbilityId.BALL_FETCH); }); it("should still change the weather if user can't switch out", async () => { - await game.classicMode.startBattle([Species.SLOWKING]); + await game.classicMode.startBattle([SpeciesId.SLOWKING]); - game.move.select(Moves.CHILLY_RECEPTION); + game.move.select(MoveId.CHILLY_RECEPTION); await game.phaseInterceptor.to("BerryPhase", false); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SNOW); }); it("should switch out even if it's snowing", async () => { - await game.classicMode.startBattle([Species.SLOWKING, Species.MEOWTH]); + await game.classicMode.startBattle([SpeciesId.SLOWKING, SpeciesId.MEOWTH]); // first turn set up snow with snowscape, try chilly reception on second turn - game.move.select(Moves.SNOWSCAPE); + game.move.select(MoveId.SNOWSCAPE); await game.phaseInterceptor.to("BerryPhase", false); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SNOW); await game.phaseInterceptor.to("TurnInitPhase", false); - game.move.select(Moves.CHILLY_RECEPTION); + game.move.select(MoveId.CHILLY_RECEPTION); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("BerryPhase", false); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SNOW); - expect(game.scene.getPlayerField()[0].species.speciesId).toBe(Species.MEOWTH); + expect(game.scene.getPlayerField()[0].species.speciesId).toBe(SpeciesId.MEOWTH); }); it("happy case - switch out and weather changes", async () => { - await game.classicMode.startBattle([Species.SLOWKING, Species.MEOWTH]); + await game.classicMode.startBattle([SpeciesId.SLOWKING, SpeciesId.MEOWTH]); - game.move.select(Moves.CHILLY_RECEPTION); + game.move.select(MoveId.CHILLY_RECEPTION); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("BerryPhase", false); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SNOW); - expect(game.scene.getPlayerField()[0].species.speciesId).toBe(Species.MEOWTH); + expect(game.scene.getPlayerField()[0].species.speciesId).toBe(SpeciesId.MEOWTH); }); // enemy uses another move and weather doesn't change it("check case - enemy not selecting chilly reception doesn't change weather ", async () => { - game.override.battleStyle("single").enemyMoveset([Moves.CHILLY_RECEPTION, Moves.TACKLE]).moveset(Moves.SPLASH); + game.override.battleStyle("single").enemyMoveset([MoveId.CHILLY_RECEPTION, MoveId.TACKLE]).moveset(MoveId.SPLASH); - await game.classicMode.startBattle([Species.SLOWKING, Species.MEOWTH]); + await game.classicMode.startBattle([SpeciesId.SLOWKING, SpeciesId.MEOWTH]); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.TACKLE); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.TACKLE); await game.phaseInterceptor.to("BerryPhase", false); expect(game.scene.arena.weather?.weatherType).toBe(undefined); @@ -84,27 +84,27 @@ describe("Moves - Chilly Reception", () => { game.override .battleStyle("single") .startingWave(8) - .enemyMoveset(Moves.CHILLY_RECEPTION) - .enemySpecies(Species.MAGIKARP) - .moveset([Moves.SPLASH, Moves.THUNDERBOLT]); + .enemyMoveset(MoveId.CHILLY_RECEPTION) + .enemySpecies(SpeciesId.MAGIKARP) + .moveset([MoveId.SPLASH, MoveId.THUNDERBOLT]); - await game.classicMode.startBattle([Species.JOLTEON]); + await game.classicMode.startBattle([SpeciesId.JOLTEON]); const RIVAL_MAGIKARP1 = game.scene.getEnemyPokemon()?.id; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase", false); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SNOW); expect(game.scene.getEnemyPokemon()?.id !== RIVAL_MAGIKARP1); await game.phaseInterceptor.to("TurnInitPhase", false); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); // second chilly reception should still switch out await game.phaseInterceptor.to("BerryPhase", false); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SNOW); await game.phaseInterceptor.to("TurnInitPhase", false); expect(game.scene.getEnemyPokemon()?.id === RIVAL_MAGIKARP1); - game.move.select(Moves.THUNDERBOLT); + game.move.select(MoveId.THUNDERBOLT); // enemy chilly recep move should fail: it's snowing and no option to switch out // no crashing @@ -112,7 +112,7 @@ describe("Moves - Chilly Reception", () => { expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SNOW); await game.phaseInterceptor.to("TurnInitPhase", false); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SNOW); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase", false); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SNOW); }); diff --git a/test/moves/chloroblast.test.ts b/test/moves/chloroblast.test.ts index b2130da83eb..02f7ac2165c 100644 --- a/test/moves/chloroblast.test.ts +++ b/test/moves/chloroblast.test.ts @@ -1,7 +1,7 @@ import { MoveResult } from "#app/field/pokemon"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -23,23 +23,23 @@ describe("Moves - Chloroblast", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .ability(Abilities.BALL_FETCH) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH); }); it("should not deal recoil damage if the opponent uses protect", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.use(Moves.CHLOROBLAST); - await game.move.forceEnemyMove(Moves.PROTECT); + game.move.use(MoveId.CHLOROBLAST); + await game.move.forceEnemyMove(MoveId.PROTECT); await game.toEndOfTurn(); const player = game.field.getPlayerPokemon(); expect(player.isFullHp()).toBe(true); - expect(player.getLastXMoves()[0]).toMatchObject({ result: MoveResult.MISS, move: Moves.CHLOROBLAST }); + expect(player.getLastXMoves()[0]).toMatchObject({ result: MoveResult.MISS, move: MoveId.CHLOROBLAST }); }); }); diff --git a/test/moves/clangorous_soul.test.ts b/test/moves/clangorous_soul.test.ts index c7165a0a881..6f4c18852b0 100644 --- a/test/moves/clangorous_soul.test.ts +++ b/test/moves/clangorous_soul.test.ts @@ -2,8 +2,8 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; /** HP Cost of Move */ @@ -27,23 +27,23 @@ describe("Moves - Clangorous Soul", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.starterSpecies(Species.MAGIKARP); - game.override.enemySpecies(Species.SNORLAX); + game.override.starterSpecies(SpeciesId.MAGIKARP); + game.override.enemySpecies(SpeciesId.SNORLAX); game.override.startingLevel(100); game.override.enemyLevel(100); - game.override.moveset([Moves.CLANGOROUS_SOUL]); - game.override.enemyMoveset(Moves.SPLASH); + game.override.moveset([MoveId.CLANGOROUS_SOUL]); + game.override.enemyMoveset(MoveId.SPLASH); }); //Bulbapedia Reference: https://bulbapedia.bulbagarden.net/wiki/Clangorous_Soul_(move) it("raises the user's ATK, DEF, SPATK, SPDEF, and SPD stat stages by 1 each at the cost of 1/3 of its maximum HP", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = Math.floor(leadPokemon.getMaxHp() / RATIO); - game.move.select(Moves.CLANGOROUS_SOUL); + game.move.select(MoveId.CLANGOROUS_SOUL); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp() - hpLost); @@ -55,7 +55,7 @@ describe("Moves - Clangorous Soul", () => { }); it("will still take effect if one or more of the involved stat stages are not at max", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = Math.floor(leadPokemon.getMaxHp() / RATIO); @@ -66,7 +66,7 @@ describe("Moves - Clangorous Soul", () => { leadPokemon.setStatStage(Stat.SPATK, 6); leadPokemon.setStatStage(Stat.SPDEF, 4); - game.move.select(Moves.CLANGOROUS_SOUL); + game.move.select(MoveId.CLANGOROUS_SOUL); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp() - hpLost); @@ -78,7 +78,7 @@ describe("Moves - Clangorous Soul", () => { }); it("fails if all stat stages involved are at max", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -88,7 +88,7 @@ describe("Moves - Clangorous Soul", () => { leadPokemon.setStatStage(Stat.SPDEF, 6); leadPokemon.setStatStage(Stat.SPD, 6); - game.move.select(Moves.CLANGOROUS_SOUL); + game.move.select(MoveId.CLANGOROUS_SOUL); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp()); @@ -100,13 +100,13 @@ describe("Moves - Clangorous Soul", () => { }); it("fails if the user's health is less than 1/3", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = Math.floor(leadPokemon.getMaxHp() / RATIO); leadPokemon.hp = hpLost - PREDAMAGE; - game.move.select(Moves.CLANGOROUS_SOUL); + game.move.select(MoveId.CLANGOROUS_SOUL); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.hp).toBe(hpLost - PREDAMAGE); diff --git a/test/moves/copycat.test.ts b/test/moves/copycat.test.ts index 96c21723ab9..51d7d36535f 100644 --- a/test/moves/copycat.test.ts +++ b/test/moves/copycat.test.ts @@ -3,9 +3,9 @@ import { RandomMoveAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; import { Stat } from "#app/enums/stat"; import { MoveResult } from "#app/field/pokemon"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -27,51 +27,51 @@ describe("Moves - Copycat", () => { }); beforeEach(() => { - randomMoveAttr = allMoves[Moves.METRONOME].getAttrs(RandomMoveAttr)[0]; + randomMoveAttr = allMoves[MoveId.METRONOME].getAttrs(RandomMoveAttr)[0]; game = new GameManager(phaserGame); game.override - .moveset([Moves.COPYCAT, Moves.SPIKY_SHIELD, Moves.SWORDS_DANCE, Moves.SPLASH]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.COPYCAT, MoveId.SPIKY_SHIELD, MoveId.SWORDS_DANCE, MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .starterSpecies(Species.FEEBAS) - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .starterSpecies(SpeciesId.FEEBAS) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should copy the last move successfully executed", async () => { - game.override.enemyMoveset(Moves.SUCKER_PUNCH); + game.override.enemyMoveset(MoveId.SUCKER_PUNCH); await game.classicMode.startBattle(); - game.move.select(Moves.SWORDS_DANCE); + game.move.select(MoveId.SWORDS_DANCE); await game.toNextTurn(); - game.move.select(Moves.COPYCAT); // Last successful move should be Swords Dance + game.move.select(MoveId.COPYCAT); // Last successful move should be Swords Dance await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(4); }); it("should fail when the last move used is not a valid Copycat move", async () => { - game.override.enemyMoveset(Moves.PROTECT); // Protect is not a valid move for Copycat to copy + game.override.enemyMoveset(MoveId.PROTECT); // Protect is not a valid move for Copycat to copy await game.classicMode.startBattle(); - game.move.select(Moves.SPIKY_SHIELD); // Spiky Shield is not a valid move for Copycat to copy + game.move.select(MoveId.SPIKY_SHIELD); // Spiky Shield is not a valid move for Copycat to copy await game.toNextTurn(); - game.move.select(Moves.COPYCAT); + game.move.select(MoveId.COPYCAT); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); it("should copy the called move when the last move successfully calls another", async () => { - game.override.moveset([Moves.SPLASH, Moves.METRONOME]).enemyMoveset(Moves.COPYCAT); + game.override.moveset([MoveId.SPLASH, MoveId.METRONOME]).enemyMoveset(MoveId.COPYCAT); await game.classicMode.startBattle(); - vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(Moves.SWORDS_DANCE); + vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(MoveId.SWORDS_DANCE); - game.move.select(Moves.METRONOME); + game.move.select(MoveId.METRONOME); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); // Player moves first, so enemy can copy Swords Dance await game.toNextTurn(); @@ -79,10 +79,10 @@ describe("Moves - Copycat", () => { }); it("should apply secondary effects of a move", async () => { - game.override.enemyMoveset(Moves.ACID_SPRAY); // Secondary effect lowers SpDef by 2 stages + game.override.enemyMoveset(MoveId.ACID_SPRAY); // Secondary effect lowers SpDef by 2 stages await game.classicMode.startBattle(); - game.move.select(Moves.COPYCAT); + game.move.select(MoveId.COPYCAT); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); diff --git a/test/moves/crafty_shield.test.ts b/test/moves/crafty_shield.test.ts index ec4c87fa060..01ab0416e5a 100644 --- a/test/moves/crafty_shield.test.ts +++ b/test/moves/crafty_shield.test.ts @@ -1,9 +1,9 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; import GameManager from "#test/testUtils/gameManager"; -import { Species } from "#enums/species"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; +import { SpeciesId } from "#enums/species-id"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; import { Stat } from "#enums/stat"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { BerryPhase } from "#app/phases/berry-phase"; @@ -28,26 +28,26 @@ describe("Moves - Crafty Shield", () => { game.override.battleStyle("double"); - game.override.moveset([Moves.CRAFTY_SHIELD, Moves.SPLASH, Moves.SWORDS_DANCE]); + game.override.moveset([MoveId.CRAFTY_SHIELD, MoveId.SPLASH, MoveId.SWORDS_DANCE]); - game.override.enemySpecies(Species.SNORLAX); - game.override.enemyMoveset([Moves.GROWL]); - game.override.enemyAbility(Abilities.INSOMNIA); + game.override.enemySpecies(SpeciesId.SNORLAX); + game.override.enemyMoveset([MoveId.GROWL]); + game.override.enemyAbility(AbilityId.INSOMNIA); game.override.startingLevel(100); game.override.enemyLevel(100); }); test("should protect the user and allies from status moves", async () => { - await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerField(); - game.move.select(Moves.CRAFTY_SHIELD); + game.move.select(MoveId.CRAFTY_SHIELD); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(BerryPhase, false); @@ -55,17 +55,17 @@ describe("Moves - Crafty Shield", () => { }); test("should not protect the user and allies from attack moves", async () => { - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemyMoveset([MoveId.TACKLE]); - await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerField(); - game.move.select(Moves.CRAFTY_SHIELD); + game.move.select(MoveId.CRAFTY_SHIELD); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(BerryPhase, false); @@ -73,18 +73,18 @@ describe("Moves - Crafty Shield", () => { }); test("should protect the user and allies from moves that ignore other protection", async () => { - game.override.enemySpecies(Species.DUSCLOPS); - game.override.enemyMoveset([Moves.CURSE]); + game.override.enemySpecies(SpeciesId.DUSCLOPS); + game.override.enemyMoveset([MoveId.CURSE]); - await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerField(); - game.move.select(Moves.CRAFTY_SHIELD); + game.move.select(MoveId.CRAFTY_SHIELD); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(BerryPhase, false); @@ -92,15 +92,15 @@ describe("Moves - Crafty Shield", () => { }); test("should not block allies' self-targeted moves", async () => { - await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerField(); - game.move.select(Moves.CRAFTY_SHIELD); + game.move.select(MoveId.CRAFTY_SHIELD); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SWORDS_DANCE, 1); + game.move.select(MoveId.SWORDS_DANCE, 1); await game.phaseInterceptor.to(BerryPhase, false); diff --git a/test/moves/defog.test.ts b/test/moves/defog.test.ts index 87c3845d55c..d42682c7f3f 100644 --- a/test/moves/defog.test.ts +++ b/test/moves/defog.test.ts @@ -1,7 +1,7 @@ import { Stat } from "#enums/stat"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -23,23 +23,23 @@ describe("Moves - Defog", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.MIST, Moves.SAFEGUARD, Moves.SPLASH]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.MIST, MoveId.SAFEGUARD, MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.SHUCKLE) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset([Moves.DEFOG, Moves.GROWL]); + .enemySpecies(SpeciesId.SHUCKLE) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset([MoveId.DEFOG, MoveId.GROWL]); }); it("should not allow Safeguard to be active", async () => { - await game.classicMode.startBattle([Species.REGIELEKI]); + await game.classicMode.startBattle([SpeciesId.REGIELEKI]); const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.SAFEGUARD); - await game.move.selectEnemyMove(Moves.DEFOG); + game.move.select(MoveId.SAFEGUARD); + await game.move.selectEnemyMove(MoveId.DEFOG); await game.phaseInterceptor.to("BerryPhase"); expect(playerPokemon[0].isSafeguarded(enemyPokemon[0])).toBe(false); @@ -48,17 +48,17 @@ describe("Moves - Defog", () => { }); it("should not allow Mist to be active", async () => { - await game.classicMode.startBattle([Species.REGIELEKI]); + await game.classicMode.startBattle([SpeciesId.REGIELEKI]); const playerPokemon = game.scene.getPlayerField(); - game.move.select(Moves.MIST); - await game.move.selectEnemyMove(Moves.DEFOG); + game.move.select(MoveId.MIST); + await game.move.selectEnemyMove(MoveId.DEFOG); await game.toNextTurn(); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.GROWL); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); diff --git a/test/moves/destiny_bond.test.ts b/test/moves/destiny_bond.test.ts index 16014677f39..81c17551bec 100644 --- a/test/moves/destiny_bond.test.ts +++ b/test/moves/destiny_bond.test.ts @@ -1,10 +1,10 @@ import type { ArenaTrapTag } from "#app/data/arena-tag"; import { ArenaTagSide } from "#app/data/arena-tag"; import { allMoves } from "#app/data/data-lists"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -16,7 +16,7 @@ describe("Moves - Destiny Bond", () => { let phaserGame: Phaser.Game; let game: GameManager; - const defaultParty = [Species.BULBASAUR, Species.SQUIRTLE]; + const defaultParty = [SpeciesId.BULBASAUR, SpeciesId.SQUIRTLE]; const enemyFirst = [BattlerIndex.ENEMY, BattlerIndex.PLAYER]; const playerFirst = [BattlerIndex.PLAYER, BattlerIndex.ENEMY]; @@ -34,16 +34,16 @@ describe("Moves - Destiny Bond", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .ability(Abilities.UNNERVE) // Pre-emptively prevent flakiness from opponent berries - .enemySpecies(Species.RATTATA) - .enemyAbility(Abilities.RUN_AWAY) + .ability(AbilityId.UNNERVE) // Pre-emptively prevent flakiness from opponent berries + .enemySpecies(SpeciesId.RATTATA) + .enemyAbility(AbilityId.RUN_AWAY) .startingLevel(100) // Make sure tested moves KO .enemyLevel(5) - .enemyMoveset(Moves.DESTINY_BOND); + .enemyMoveset(MoveId.DESTINY_BOND); }); it("should KO the opponent on the same turn", async () => { - const moveToUse = Moves.TACKLE; + const moveToUse = MoveId.TACKLE; game.override.moveset(moveToUse); await game.classicMode.startBattle(defaultParty); @@ -60,16 +60,16 @@ describe("Moves - Destiny Bond", () => { }); it("should KO the opponent on the next turn", async () => { - const moveToUse = Moves.TACKLE; + const moveToUse = MoveId.TACKLE; - game.override.moveset([Moves.SPLASH, moveToUse]); + game.override.moveset([MoveId.SPLASH, moveToUse]); await game.classicMode.startBattle(defaultParty); const enemyPokemon = game.scene.getEnemyPokemon(); const playerPokemon = game.scene.getPlayerPokemon(); // Turn 1: Enemy uses Destiny Bond and doesn't faint - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder(playerFirst); await game.toNextTurn(); @@ -86,16 +86,16 @@ describe("Moves - Destiny Bond", () => { }); it("should fail if used twice in a row", async () => { - const moveToUse = Moves.TACKLE; + const moveToUse = MoveId.TACKLE; - game.override.moveset([Moves.SPLASH, moveToUse]); + game.override.moveset([MoveId.SPLASH, moveToUse]); await game.classicMode.startBattle(defaultParty); const enemyPokemon = game.scene.getEnemyPokemon(); const playerPokemon = game.scene.getPlayerPokemon(); // Turn 1: Enemy uses Destiny Bond and doesn't faint - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder(enemyFirst); await game.toNextTurn(); @@ -113,9 +113,9 @@ describe("Moves - Destiny Bond", () => { it("should not KO the opponent if the user dies to weather", async () => { // Opponent will be reduced to 1 HP by False Swipe, then faint to Sandstorm - const moveToUse = Moves.FALSE_SWIPE; + const moveToUse = MoveId.FALSE_SWIPE; - game.override.moveset(moveToUse).ability(Abilities.SAND_STREAM); + game.override.moveset(moveToUse).ability(AbilityId.SAND_STREAM); await game.classicMode.startBattle(defaultParty); const enemyPokemon = game.scene.getEnemyPokemon(); @@ -130,16 +130,16 @@ describe("Moves - Destiny Bond", () => { }); it("should not KO the opponent if the user had another turn", async () => { - const moveToUse = Moves.TACKLE; + const moveToUse = MoveId.TACKLE; - game.override.moveset([Moves.SPORE, moveToUse]); + game.override.moveset([MoveId.SPORE, moveToUse]); await game.classicMode.startBattle(defaultParty); const enemyPokemon = game.scene.getEnemyPokemon(); const playerPokemon = game.scene.getPlayerPokemon(); // Turn 1: Enemy uses Destiny Bond and doesn't faint - game.move.select(Moves.SPORE); + game.move.select(MoveId.SPORE); await game.setTurnOrder(enemyFirst); await game.toNextTurn(); @@ -157,8 +157,8 @@ describe("Moves - Destiny Bond", () => { }); it("should not KO an ally", async () => { - game.override.moveset([Moves.DESTINY_BOND, Moves.CRUNCH]).battleStyle("double"); - await game.classicMode.startBattle([Species.SHEDINJA, Species.BULBASAUR, Species.SQUIRTLE]); + game.override.moveset([MoveId.DESTINY_BOND, MoveId.CRUNCH]).battleStyle("double"); + await game.classicMode.startBattle([SpeciesId.SHEDINJA, SpeciesId.BULBASAUR, SpeciesId.SQUIRTLE]); const enemyPokemon0 = game.scene.getEnemyField()[0]; const enemyPokemon1 = game.scene.getEnemyField()[1]; @@ -166,8 +166,8 @@ describe("Moves - Destiny Bond", () => { const playerPokemon1 = game.scene.getPlayerField()[1]; // Shedinja uses Destiny Bond, then ally Bulbasaur KO's Shedinja with Crunch - game.move.select(Moves.DESTINY_BOND, 0); - game.move.select(Moves.CRUNCH, 1, BattlerIndex.PLAYER); + game.move.select(MoveId.DESTINY_BOND, 0); + game.move.select(MoveId.CRUNCH, 1, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("BerryPhase"); @@ -178,7 +178,7 @@ describe("Moves - Destiny Bond", () => { }); it("should not cause a crash if the user is KO'd by Ceaseless Edge", async () => { - const moveToUse = Moves.CEASELESS_EDGE; + const moveToUse = MoveId.CEASELESS_EDGE; vi.spyOn(allMoves[moveToUse], "accuracy", "get").mockReturnValue(100); game.override.moveset(moveToUse); @@ -201,7 +201,7 @@ describe("Moves - Destiny Bond", () => { }); it("should not cause a crash if the user is KO'd by Pledge moves", async () => { - game.override.moveset([Moves.GRASS_PLEDGE, Moves.WATER_PLEDGE]).battleStyle("double"); + game.override.moveset([MoveId.GRASS_PLEDGE, MoveId.WATER_PLEDGE]).battleStyle("double"); await game.classicMode.startBattle(defaultParty); const enemyPokemon0 = game.scene.getEnemyField()[0]; @@ -209,8 +209,8 @@ describe("Moves - Destiny Bond", () => { const playerPokemon0 = game.scene.getPlayerField()[0]; const playerPokemon1 = game.scene.getPlayerField()[1]; - game.move.select(Moves.GRASS_PLEDGE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.WATER_PLEDGE, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.GRASS_PLEDGE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.WATER_PLEDGE, 1, BattlerIndex.ENEMY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2]); await game.phaseInterceptor.to("BerryPhase"); @@ -230,7 +230,7 @@ describe("Moves - Destiny Bond", () => { * from occurring with fainting by KO'ing a Destiny Bond user with U-Turn. */ it("should not allow the opponent to revive via Reviver Seed", async () => { - const moveToUse = Moves.TACKLE; + const moveToUse = MoveId.TACKLE; game.override.moveset(moveToUse).startingHeldItems([{ name: "REVIVER_SEED" }]); await game.classicMode.startBattle(defaultParty); diff --git a/test/moves/diamond_storm.test.ts b/test/moves/diamond_storm.test.ts index 1e64babacfb..20067b3a0f3 100644 --- a/test/moves/diamond_storm.test.ts +++ b/test/moves/diamond_storm.test.ts @@ -1,7 +1,7 @@ import { allMoves } from "#app/data/data-lists"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,21 +24,21 @@ describe("Moves - Diamond Storm", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.DIAMOND_STORM]) + .moveset([MoveId.DIAMOND_STORM]) .battleStyle("single") - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should only increase defense once even if hitting 2 pokemon", async () => { game.override.battleStyle("double"); - const diamondStorm = allMoves[Moves.DIAMOND_STORM]; + const diamondStorm = allMoves[MoveId.DIAMOND_STORM]; vi.spyOn(diamondStorm, "chance", "get").mockReturnValue(100); vi.spyOn(diamondStorm, "accuracy", "get").mockReturnValue(100); - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.DIAMOND_STORM); + game.move.select(MoveId.DIAMOND_STORM); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.DEF)).toBe(2); diff --git a/test/moves/dig.test.ts b/test/moves/dig.test.ts index e8f39c05fd8..052845ec50d 100644 --- a/test/moves/dig.test.ts +++ b/test/moves/dig.test.ts @@ -1,9 +1,9 @@ import { BattlerIndex } from "#app/battle"; import { allMoves } from "#app/data/data-lists"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import { MoveResult } from "#app/field/pokemon"; import { describe, beforeAll, afterEach, beforeEach, it, expect } from "vitest"; @@ -26,48 +26,48 @@ describe("Moves - Dig", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Moves.DIG) + .moveset(MoveId.DIG) .battleStyle("single") .startingLevel(100) - .enemySpecies(Species.SNORLAX) + .enemySpecies(SpeciesId.SNORLAX) .enemyLevel(100) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.TACKLE); + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.TACKLE); }); it("should make the user semi-invulnerable, then attack over 2 turns", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DIG); + game.move.select(MoveId.DIG); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getTag(BattlerTagType.UNDERGROUND)).toBeDefined(); expect(enemyPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.MISS); expect(playerPokemon.hp).toBe(playerPokemon.getMaxHp()); expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); - expect(playerPokemon.getMoveQueue()[0].move).toBe(Moves.DIG); + expect(playerPokemon.getMoveQueue()[0].move).toBe(MoveId.DIG); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getTag(BattlerTagType.UNDERGROUND)).toBeUndefined(); expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); expect(playerPokemon.getMoveHistory()).toHaveLength(2); - const playerDig = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.DIG); + const playerDig = playerPokemon.getMoveset().find(mv => mv && mv.moveId === MoveId.DIG); expect(playerDig?.ppUsed).toBe(1); }); it("should not allow the user to evade attacks from Pokemon with No Guard", async () => { - game.override.enemyAbility(Abilities.NO_GUARD); + game.override.enemyAbility(AbilityId.NO_GUARD); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DIG); + game.move.select(MoveId.DIG); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.hp).toBeLessThan(playerPokemon.getMaxHp()); @@ -75,41 +75,41 @@ describe("Moves - Dig", () => { }); it("should not expend PP when the attack phase is cancelled", async () => { - game.override.enemyAbility(Abilities.NO_GUARD).enemyMoveset(Moves.SPORE); + game.override.enemyAbility(AbilityId.NO_GUARD).enemyMoveset(MoveId.SPORE); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.DIG); + game.move.select(MoveId.DIG); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getTag(BattlerTagType.UNDERGROUND)).toBeUndefined(); expect(playerPokemon.status?.effect).toBe(StatusEffect.SLEEP); - const playerDig = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.DIG); + const playerDig = playerPokemon.getMoveset().find(mv => mv && mv.moveId === MoveId.DIG); expect(playerDig?.ppUsed).toBe(0); }); it("should cause the user to take double damage from Earthquake", async () => { - await game.classicMode.startBattle([Species.DONDOZO]); + await game.classicMode.startBattle([SpeciesId.DONDOZO]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; const preDigEarthquakeDmg = playerPokemon.getAttackDamage({ source: enemyPokemon, - move: allMoves[Moves.EARTHQUAKE], + move: allMoves[MoveId.EARTHQUAKE], }).damage; - game.move.select(Moves.DIG); + game.move.select(MoveId.DIG); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); const postDigEarthquakeDmg = playerPokemon.getAttackDamage({ source: enemyPokemon, - move: allMoves[Moves.EARTHQUAKE], + move: allMoves[MoveId.EARTHQUAKE], }).damage; // these hopefully get avoid rounding errors :shrug: expect(postDigEarthquakeDmg).toBeGreaterThanOrEqual(2 * preDigEarthquakeDmg); diff --git a/test/moves/disable.test.ts b/test/moves/disable.test.ts index 5b2b687bd5d..eacf8bf4857 100644 --- a/test/moves/disable.test.ts +++ b/test/moves/disable.test.ts @@ -1,8 +1,8 @@ import { BattlerIndex } from "#app/battle"; import { MoveResult } from "#app/field/pokemon"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -24,12 +24,12 @@ describe("Moves - Disable", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .ability(Abilities.BALL_FETCH) - .enemyAbility(Abilities.BALL_FETCH) - .moveset([Moves.DISABLE, Moves.SPLASH]) - .enemyMoveset(Moves.SPLASH) - .starterSpecies(Species.PIKACHU) - .enemySpecies(Species.SHUCKLE); + .ability(AbilityId.BALL_FETCH) + .enemyAbility(AbilityId.BALL_FETCH) + .moveset([MoveId.DISABLE, MoveId.SPLASH]) + .enemyMoveset(MoveId.SPLASH) + .starterSpecies(SpeciesId.PIKACHU) + .enemySpecies(SpeciesId.SHUCKLE); }); it("restricts moves", async () => { @@ -37,12 +37,12 @@ describe("Moves - Disable", () => { const enemyMon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DISABLE); + game.move.select(MoveId.DISABLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); expect(enemyMon.getMoveHistory()).toHaveLength(1); - expect(enemyMon.isMoveRestricted(Moves.SPLASH)).toBe(true); + expect(enemyMon.isMoveRestricted(MoveId.SPLASH)).toBe(true); }); it("fails if enemy has no move history", async () => { @@ -51,15 +51,15 @@ describe("Moves - Disable", () => { const playerMon = game.scene.getPlayerPokemon()!; const enemyMon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DISABLE); + game.move.select(MoveId.DISABLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); expect(playerMon.getMoveHistory()[0]).toMatchObject({ - move: Moves.DISABLE, + move: MoveId.DISABLE, result: MoveResult.FAIL, }); - expect(enemyMon.isMoveRestricted(Moves.SPLASH)).toBe(false); + expect(enemyMon.isMoveRestricted(MoveId.SPLASH)).toBe(false); }, 20000); it("causes STRUGGLE if all usable moves are disabled", async () => { @@ -67,33 +67,33 @@ describe("Moves - Disable", () => { const enemyMon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DISABLE); + game.move.select(MoveId.DISABLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); const enemyHistory = enemyMon.getMoveHistory(); expect(enemyHistory).toHaveLength(2); - expect(enemyHistory[0].move).toBe(Moves.SPLASH); - expect(enemyHistory[1].move).toBe(Moves.STRUGGLE); + expect(enemyHistory[0].move).toBe(MoveId.SPLASH); + expect(enemyHistory[1].move).toBe(MoveId.STRUGGLE); }, 20000); it("cannot disable STRUGGLE", async () => { - game.override.enemyMoveset([Moves.STRUGGLE]); + game.override.enemyMoveset([MoveId.STRUGGLE]); await game.classicMode.startBattle(); const playerMon = game.scene.getPlayerPokemon()!; const enemyMon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DISABLE); + game.move.select(MoveId.DISABLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); expect(playerMon.getLastXMoves()[0].result).toBe(MoveResult.FAIL); - expect(enemyMon.getLastXMoves()[0].move).toBe(Moves.STRUGGLE); - expect(enemyMon.isMoveRestricted(Moves.STRUGGLE)).toBe(false); + expect(enemyMon.getLastXMoves()[0].move).toBe(MoveId.STRUGGLE); + expect(enemyMon.isMoveRestricted(MoveId.STRUGGLE)).toBe(false); }, 20000); it("interrupts target's move when target moves after", async () => { @@ -101,54 +101,54 @@ describe("Moves - Disable", () => { const enemyMon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // Both mons just used Splash last turn; now have player use Disable. - game.move.select(Moves.DISABLE); + game.move.select(MoveId.DISABLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); const enemyHistory = enemyMon.getMoveHistory(); expect(enemyHistory).toHaveLength(2); expect(enemyHistory[0]).toMatchObject({ - move: Moves.SPLASH, + move: MoveId.SPLASH, result: MoveResult.SUCCESS, }); expect(enemyHistory[1].result).toBe(MoveResult.FAIL); }, 20000); it("disables NATURE POWER, not the move invoked by it", async () => { - game.override.enemyMoveset([Moves.NATURE_POWER]); + game.override.enemyMoveset([MoveId.NATURE_POWER]); await game.classicMode.startBattle(); const enemyMon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DISABLE); + game.move.select(MoveId.DISABLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); - expect(enemyMon.isMoveRestricted(Moves.NATURE_POWER)).toBe(true); + expect(enemyMon.isMoveRestricted(MoveId.NATURE_POWER)).toBe(true); expect(enemyMon.isMoveRestricted(enemyMon.getLastXMoves(2)[0].move)).toBe(false); }, 20000); it("disables most recent move", async () => { - game.override.enemyMoveset([Moves.SPLASH, Moves.TACKLE]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.TACKLE]); await game.classicMode.startBattle(); const enemyMon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); - game.move.select(Moves.DISABLE); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); + game.move.select(MoveId.DISABLE); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); - expect(enemyMon.isMoveRestricted(Moves.TACKLE)).toBe(true); - expect(enemyMon.isMoveRestricted(Moves.SPLASH)).toBe(false); + expect(enemyMon.isMoveRestricted(MoveId.TACKLE)).toBe(true); + expect(enemyMon.isMoveRestricted(MoveId.SPLASH)).toBe(false); }, 20000); }); diff --git a/test/moves/dive.test.ts b/test/moves/dive.test.ts index 95c3349c8a6..cce1b5a6d26 100644 --- a/test/moves/dive.test.ts +++ b/test/moves/dive.test.ts @@ -1,9 +1,9 @@ import { BattlerTagType } from "#enums/battler-tag-type"; import { StatusEffect } from "#enums/status-effect"; import { MoveResult } from "#app/field/pokemon"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; @@ -26,48 +26,48 @@ describe("Moves - Dive", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Moves.DIVE) + .moveset(MoveId.DIVE) .battleStyle("single") .startingLevel(100) - .enemySpecies(Species.SNORLAX) + .enemySpecies(SpeciesId.SNORLAX) .enemyLevel(100) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.TACKLE); + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.TACKLE); }); it("should make the user semi-invulnerable, then attack over 2 turns", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DIVE); + game.move.select(MoveId.DIVE); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getTag(BattlerTagType.UNDERWATER)).toBeDefined(); expect(enemyPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.MISS); expect(playerPokemon.hp).toBe(playerPokemon.getMaxHp()); expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); - expect(playerPokemon.getMoveQueue()[0].move).toBe(Moves.DIVE); + expect(playerPokemon.getMoveQueue()[0].move).toBe(MoveId.DIVE); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getTag(BattlerTagType.UNDERWATER)).toBeUndefined(); expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); expect(playerPokemon.getMoveHistory()).toHaveLength(2); - const playerDive = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.DIVE); + const playerDive = playerPokemon.getMoveset().find(mv => mv && mv.moveId === MoveId.DIVE); expect(playerDive?.ppUsed).toBe(1); }); it("should not allow the user to evade attacks from Pokemon with No Guard", async () => { - game.override.enemyAbility(Abilities.NO_GUARD); + game.override.enemyAbility(AbilityId.NO_GUARD); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DIVE); + game.move.select(MoveId.DIVE); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.hp).toBeLessThan(playerPokemon.getMaxHp()); @@ -75,48 +75,48 @@ describe("Moves - Dive", () => { }); it("should not expend PP when the attack phase is cancelled", async () => { - game.override.enemyAbility(Abilities.NO_GUARD).enemyMoveset(Moves.SPORE); + game.override.enemyAbility(AbilityId.NO_GUARD).enemyMoveset(MoveId.SPORE); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.DIVE); + game.move.select(MoveId.DIVE); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getTag(BattlerTagType.UNDERWATER)).toBeUndefined(); expect(playerPokemon.status?.effect).toBe(StatusEffect.SLEEP); - const playerDive = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.DIVE); + const playerDive = playerPokemon.getMoveset().find(mv => mv && mv.moveId === MoveId.DIVE); expect(playerDive?.ppUsed).toBe(0); }); it("should trigger on-contact post-defend ability effects", async () => { - game.override.enemyAbility(Abilities.ROUGH_SKIN).enemyMoveset(Moves.SPLASH); + game.override.enemyAbility(AbilityId.ROUGH_SKIN).enemyMoveset(MoveId.SPLASH); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DIVE); + game.move.select(MoveId.DIVE); await game.phaseInterceptor.to("TurnEndPhase"); await game.phaseInterceptor.to("MoveEndPhase"); expect(playerPokemon.hp).toBeLessThan(playerPokemon.getMaxHp()); - expect(enemyPokemon.waveData.abilitiesApplied).toContain(Abilities.ROUGH_SKIN); + expect(enemyPokemon.waveData.abilitiesApplied).toContain(AbilityId.ROUGH_SKIN); }); it("should cancel attack after Harsh Sunlight is set", async () => { - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DIVE); + game.move.select(MoveId.DIVE); await game.phaseInterceptor.to("TurnEndPhase"); await game.phaseInterceptor.to("TurnStartPhase", false); @@ -127,7 +127,7 @@ describe("Moves - Dive", () => { expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); expect(playerPokemon.getTag(BattlerTagType.UNDERWATER)).toBeUndefined(); - const playerDive = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.DIVE); + const playerDive = playerPokemon.getMoveset().find(mv => mv && mv.moveId === MoveId.DIVE); expect(playerDive?.ppUsed).toBe(1); }); }); diff --git a/test/moves/doodle.test.ts b/test/moves/doodle.test.ts index 25dc0ddaede..686bef144dd 100644 --- a/test/moves/doodle.test.ts +++ b/test/moves/doodle.test.ts @@ -1,8 +1,8 @@ import { BattlerIndex } from "#app/battle"; import { Stat } from "#app/enums/stat"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -24,43 +24,43 @@ describe("Moves - Doodle", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.DOODLE]) - .ability(Abilities.ADAPTABILITY) + .moveset([MoveId.SPLASH, MoveId.DOODLE]) + .ability(AbilityId.ADAPTABILITY) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should copy the opponent's ability in singles", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.DOODLE); + game.move.select(MoveId.DOODLE); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(Abilities.BALL_FETCH); + expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(AbilityId.BALL_FETCH); }); it("should copy the opponent's ability to itself and its ally in doubles", async () => { game.override.battleStyle("double"); - await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MAGIKARP]); - game.move.select(Moves.DOODLE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.DOODLE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerField()[0].getAbility().id).toBe(Abilities.BALL_FETCH); - expect(game.scene.getPlayerField()[1].getAbility().id).toBe(Abilities.BALL_FETCH); + expect(game.scene.getPlayerField()[0].getAbility().id).toBe(AbilityId.BALL_FETCH); + expect(game.scene.getPlayerField()[1].getAbility().id).toBe(AbilityId.BALL_FETCH); }); it("should activate post-summon abilities", async () => { - game.override.battleStyle("double").enemyAbility(Abilities.INTIMIDATE); + game.override.battleStyle("double").enemyAbility(AbilityId.INTIMIDATE); - await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MAGIKARP]); - game.move.select(Moves.DOODLE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.DOODLE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); // Enemies should have been intimidated twice diff --git a/test/moves/double_team.test.ts b/test/moves/double_team.test.ts index aa07ee5f688..9a17a542f47 100644 --- a/test/moves/double_team.test.ts +++ b/test/moves/double_team.test.ts @@ -1,8 +1,8 @@ import { Stat } from "#enums/stat"; -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -25,16 +25,16 @@ describe("Moves - Double Team", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .moveset([Moves.DOUBLE_TEAM]) + .moveset([MoveId.DOUBLE_TEAM]) .disableCrits() - .ability(Abilities.BALL_FETCH) - .enemySpecies(Species.SHUCKLE) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.TACKLE); + .ability(AbilityId.BALL_FETCH) + .enemySpecies(SpeciesId.SHUCKLE) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.TACKLE); }); it("raises the user's EVA stat stage by 1", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const ally = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -42,7 +42,7 @@ describe("Moves - Double Team", () => { vi.spyOn(enemy, "getAccuracyMultiplier"); expect(ally.getStatStage(Stat.EVA)).toBe(0); - game.move.select(Moves.DOUBLE_TEAM); + game.move.select(MoveId.DOUBLE_TEAM); await game.phaseInterceptor.to(TurnEndPhase); await game.toNextTurn(); diff --git a/test/moves/dragon_cheer.test.ts b/test/moves/dragon_cheer.test.ts index dcf7f13eb65..b1eaa3ad747 100644 --- a/test/moves/dragon_cheer.test.ts +++ b/test/moves/dragon_cheer.test.ts @@ -1,8 +1,8 @@ import { BattlerIndex } from "#app/battle"; import { PokemonType } from "#enums/pokemon-type"; -import { Moves } from "#app/enums/moves"; -import { Species } from "#app/enums/species"; -import { Abilities } from "#enums/abilities"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; +import { AbilityId } from "#enums/ability-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -24,21 +24,21 @@ describe("Moves - Dragon Cheer", () => { game = new GameManager(phaserGame); game.override .battleStyle("double") - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(20) - .moveset([Moves.DRAGON_CHEER, Moves.TACKLE, Moves.SPLASH]); + .moveset([MoveId.DRAGON_CHEER, MoveId.TACKLE, MoveId.SPLASH]); }); it("increases the user's allies' critical hit ratio by one stage", async () => { - await game.classicMode.startBattle([Species.DRAGONAIR, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.DRAGONAIR, SpeciesId.MAGIKARP]); const enemy = game.scene.getEnemyField()[0]; vi.spyOn(enemy, "getCritStage"); - game.move.select(Moves.DRAGON_CHEER, 0); - game.move.select(Moves.TACKLE, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.DRAGON_CHEER, 0); + game.move.select(MoveId.TACKLE, 1, BattlerIndex.ENEMY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); @@ -48,14 +48,14 @@ describe("Moves - Dragon Cheer", () => { }); it("increases the user's Dragon-type allies' critical hit ratio by two stages", async () => { - await game.classicMode.startBattle([Species.MAGIKARP, Species.DRAGONAIR]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.DRAGONAIR]); const enemy = game.scene.getEnemyField()[0]; vi.spyOn(enemy, "getCritStage"); - game.move.select(Moves.DRAGON_CHEER, 0); - game.move.select(Moves.TACKLE, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.DRAGON_CHEER, 0); + game.move.select(MoveId.TACKLE, 1, BattlerIndex.ENEMY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); @@ -65,15 +65,15 @@ describe("Moves - Dragon Cheer", () => { }); it("applies the effect based on the allies' type upon use of the move, and do not change if the allies' type changes later in battle", async () => { - await game.classicMode.startBattle([Species.DRAGONAIR, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.DRAGONAIR, SpeciesId.MAGIKARP]); const magikarp = game.scene.getPlayerField()[1]; const enemy = game.scene.getEnemyField()[0]; vi.spyOn(enemy, "getCritStage"); - game.move.select(Moves.DRAGON_CHEER, 0); - game.move.select(Moves.TACKLE, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.DRAGON_CHEER, 0); + game.move.select(MoveId.TACKLE, 1, BattlerIndex.ENEMY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); @@ -87,8 +87,8 @@ describe("Moves - Dragon Cheer", () => { vi.spyOn(magikarp, "getTypes").mockReturnValue([PokemonType.DRAGON]); expect(magikarp.getTypes()).toEqual([PokemonType.DRAGON]); - game.move.select(Moves.SPLASH, 0); - game.move.select(Moves.TACKLE, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 0); + game.move.select(MoveId.TACKLE, 1, BattlerIndex.ENEMY); await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); diff --git a/test/moves/dragon_rage.test.ts b/test/moves/dragon_rage.test.ts index 188c1511f37..c2a0a1bc979 100644 --- a/test/moves/dragon_rage.test.ts +++ b/test/moves/dragon_rage.test.ts @@ -1,11 +1,11 @@ import { Stat } from "#enums/stat"; import { PokemonType } from "#enums/pokemon-type"; -import { Species } from "#app/enums/species"; +import { SpeciesId } from "#enums/species-id"; import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -33,16 +33,16 @@ describe("Moves - Dragon Rage", () => { game.override.battleStyle("single"); - game.override.starterSpecies(Species.SNORLAX); - game.override.moveset([Moves.DRAGON_RAGE]); - game.override.ability(Abilities.BALL_FETCH); - game.override.passiveAbility(Abilities.BALL_FETCH); + game.override.starterSpecies(SpeciesId.SNORLAX); + game.override.moveset([MoveId.DRAGON_RAGE]); + game.override.ability(AbilityId.BALL_FETCH); + game.override.passiveAbility(AbilityId.BALL_FETCH); game.override.startingLevel(100); - game.override.enemySpecies(Species.SNORLAX); - game.override.enemyMoveset(Moves.SPLASH); - game.override.enemyAbility(Abilities.BALL_FETCH); - game.override.enemyPassiveAbility(Abilities.BALL_FETCH); + game.override.enemySpecies(SpeciesId.SNORLAX); + game.override.enemyMoveset(MoveId.SPLASH); + game.override.enemyAbility(AbilityId.BALL_FETCH); + game.override.enemyPassiveAbility(AbilityId.BALL_FETCH); game.override.enemyLevel(100); await game.classicMode.startBattle(); @@ -55,7 +55,7 @@ describe("Moves - Dragon Rage", () => { game.override.disableCrits(); vi.spyOn(enemyPokemon, "getTypes").mockReturnValue([PokemonType.DRAGON]); - game.move.select(Moves.DRAGON_RAGE); + game.move.select(MoveId.DRAGON_RAGE); await game.phaseInterceptor.to(TurnEndPhase); expect(enemyPokemon.getInverseHp()).toBe(dragonRageDamage); @@ -65,7 +65,7 @@ describe("Moves - Dragon Rage", () => { game.override.disableCrits(); vi.spyOn(enemyPokemon, "getTypes").mockReturnValue([PokemonType.STEEL]); - game.move.select(Moves.DRAGON_RAGE); + game.move.select(MoveId.DRAGON_RAGE); await game.phaseInterceptor.to(TurnEndPhase); expect(enemyPokemon.getInverseHp()).toBe(dragonRageDamage); @@ -75,7 +75,7 @@ describe("Moves - Dragon Rage", () => { game.override.disableCrits(); partyPokemon.setStatStage(Stat.SPATK, 2); - game.move.select(Moves.DRAGON_RAGE); + game.move.select(MoveId.DRAGON_RAGE); await game.phaseInterceptor.to(TurnEndPhase); expect(enemyPokemon.getInverseHp()).toBe(dragonRageDamage); @@ -85,7 +85,7 @@ describe("Moves - Dragon Rage", () => { game.override.disableCrits(); vi.spyOn(partyPokemon, "getTypes").mockReturnValue([PokemonType.DRAGON]); - game.move.select(Moves.DRAGON_RAGE); + game.move.select(MoveId.DRAGON_RAGE); await game.phaseInterceptor.to(TurnEndPhase); expect(enemyPokemon.getInverseHp()).toBe(dragonRageDamage); @@ -94,7 +94,7 @@ describe("Moves - Dragon Rage", () => { it("ignores criticals", async () => { partyPokemon.addTag(BattlerTagType.ALWAYS_CRIT, 99); - game.move.select(Moves.DRAGON_RAGE); + game.move.select(MoveId.DRAGON_RAGE); await game.phaseInterceptor.to(TurnEndPhase); expect(enemyPokemon.getInverseHp()).toBe(dragonRageDamage); @@ -102,9 +102,9 @@ describe("Moves - Dragon Rage", () => { it("ignores damage modification from abilities, for example ICE_SCALES", async () => { game.override.disableCrits(); - game.override.enemyAbility(Abilities.ICE_SCALES); + game.override.enemyAbility(AbilityId.ICE_SCALES); - game.move.select(Moves.DRAGON_RAGE); + game.move.select(MoveId.DRAGON_RAGE); await game.phaseInterceptor.to(TurnEndPhase); expect(enemyPokemon.getInverseHp()).toBe(dragonRageDamage); diff --git a/test/moves/dragon_tail.test.ts b/test/moves/dragon_tail.test.ts index 409ce7e28f8..07441d9fb2d 100644 --- a/test/moves/dragon_tail.test.ts +++ b/test/moves/dragon_tail.test.ts @@ -4,9 +4,9 @@ import { Status } from "#app/data/status-effect"; import { Challenges } from "#enums/challenges"; import { StatusEffect } from "#enums/status-effect"; import { PokemonType } from "#enums/pokemon-type"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -29,21 +29,21 @@ describe("Moves - Dragon Tail", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .moveset([Moves.DRAGON_TAIL, Moves.SPLASH, Moves.FLAMETHROWER]) - .enemySpecies(Species.WAILORD) - .enemyMoveset(Moves.SPLASH) + .moveset([MoveId.DRAGON_TAIL, MoveId.SPLASH, MoveId.FLAMETHROWER]) + .enemySpecies(SpeciesId.WAILORD) + .enemyMoveset(MoveId.SPLASH) .startingLevel(5) .enemyLevel(5); - vi.spyOn(allMoves[Moves.DRAGON_TAIL], "accuracy", "get").mockReturnValue(100); + vi.spyOn(allMoves[MoveId.DRAGON_TAIL], "accuracy", "get").mockReturnValue(100); }); it("should cause opponent to flee, and not crash", async () => { - await game.classicMode.startBattle([Species.DRATINI]); + await game.classicMode.startBattle([SpeciesId.DRATINI]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DRAGON_TAIL); + game.move.select(MoveId.DRAGON_TAIL); await game.phaseInterceptor.to("BerryPhase"); @@ -56,13 +56,13 @@ describe("Moves - Dragon Tail", () => { }); it("should cause opponent to flee, display ability, and not crash", async () => { - game.override.enemyAbility(Abilities.ROUGH_SKIN); - await game.classicMode.startBattle([Species.DRATINI]); + game.override.enemyAbility(AbilityId.ROUGH_SKIN); + await game.classicMode.startBattle([SpeciesId.DRATINI]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DRAGON_TAIL); + game.move.select(MoveId.DRAGON_TAIL); await game.phaseInterceptor.to("BerryPhase"); @@ -73,16 +73,16 @@ describe("Moves - Dragon Tail", () => { }); it("should proceed without crashing in a double battle", async () => { - game.override.battleStyle("double").enemyMoveset(Moves.SPLASH).enemyAbility(Abilities.ROUGH_SKIN); - await game.classicMode.startBattle([Species.DRATINI, Species.DRATINI, Species.WAILORD, Species.WAILORD]); + game.override.battleStyle("double").enemyMoveset(MoveId.SPLASH).enemyAbility(AbilityId.ROUGH_SKIN); + await game.classicMode.startBattle([SpeciesId.DRATINI, SpeciesId.DRATINI, SpeciesId.WAILORD, SpeciesId.WAILORD]); const leadPokemon = game.scene.getPlayerParty()[0]!; const enemyLeadPokemon = game.scene.getEnemyParty()[0]!; const enemySecPokemon = game.scene.getEnemyParty()[1]!; - game.move.select(Moves.DRAGON_TAIL, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.DRAGON_TAIL, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -94,16 +94,16 @@ describe("Moves - Dragon Tail", () => { expect(leadPokemon.hp).toBeLessThan(leadPokemon.getMaxHp()); // second turn - game.move.select(Moves.FLAMETHROWER, 0, BattlerIndex.ENEMY_2); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.FLAMETHROWER, 0, BattlerIndex.ENEMY_2); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); expect(enemySecPokemon.hp).toBeLessThan(enemySecPokemon.getMaxHp()); }); it("should redirect targets upon opponent flee", async () => { - game.override.battleStyle("double").enemyMoveset(Moves.SPLASH).enemyAbility(Abilities.ROUGH_SKIN); - await game.classicMode.startBattle([Species.DRATINI, Species.DRATINI, Species.WAILORD, Species.WAILORD]); + game.override.battleStyle("double").enemyMoveset(MoveId.SPLASH).enemyAbility(AbilityId.ROUGH_SKIN); + await game.classicMode.startBattle([SpeciesId.DRATINI, SpeciesId.DRATINI, SpeciesId.WAILORD, SpeciesId.WAILORD]); const leadPokemon = game.scene.getPlayerParty()[0]!; const secPokemon = game.scene.getPlayerParty()[1]!; @@ -111,9 +111,9 @@ describe("Moves - Dragon Tail", () => { const enemyLeadPokemon = game.scene.getEnemyParty()[0]!; const enemySecPokemon = game.scene.getEnemyParty()[1]!; - game.move.select(Moves.DRAGON_TAIL, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.DRAGON_TAIL, 0, BattlerIndex.ENEMY); // target the same pokemon, second move should be redirected after first flees - game.move.select(Moves.DRAGON_TAIL, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.DRAGON_TAIL, 1, BattlerIndex.ENEMY); await game.phaseInterceptor.to("BerryPhase"); @@ -129,12 +129,12 @@ describe("Moves - Dragon Tail", () => { }); it("doesn't switch out if the target has suction cups", async () => { - game.override.enemyAbility(Abilities.SUCTION_CUPS); - await game.classicMode.startBattle([Species.REGIELEKI]); + game.override.enemyAbility(AbilityId.SUCTION_CUPS); + await game.classicMode.startBattle([SpeciesId.REGIELEKI]); const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DRAGON_TAIL); + game.move.select(MoveId.DRAGON_TAIL); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.isFullHp()).toBe(false); @@ -142,9 +142,9 @@ describe("Moves - Dragon Tail", () => { it("should force a switch upon fainting an opponent normally", async () => { game.override.startingWave(5).startingLevel(1000); // To make sure Dragon Tail KO's the opponent - await game.classicMode.startBattle([Species.DRATINI]); + await game.classicMode.startBattle([SpeciesId.DRATINI]); - game.move.select(Moves.DRAGON_TAIL); + game.move.select(MoveId.DRAGON_TAIL); await game.toNextTurn(); @@ -164,9 +164,9 @@ describe("Moves - Dragon Tail", () => { .startingWave(5) .enemyHeldItems([{ name: "REVIVER_SEED" }]) .startingLevel(1000); // To make sure Dragon Tail KO's the opponent - await game.classicMode.startBattle([Species.DRATINI]); + await game.classicMode.startBattle([SpeciesId.DRATINI]); - game.move.select(Moves.DRAGON_TAIL); + game.move.select(MoveId.DRAGON_TAIL); await game.toNextTurn(); @@ -180,11 +180,11 @@ describe("Moves - Dragon Tail", () => { it("should not cause a softlock when activating a player's reviver seed", async () => { game.override .startingHeldItems([{ name: "REVIVER_SEED" }]) - .enemyMoveset(Moves.DRAGON_TAIL) + .enemyMoveset(MoveId.DRAGON_TAIL) .enemyLevel(1000); // To make sure Dragon Tail KO's the player - await game.classicMode.startBattle([Species.DRATINI, Species.BULBASAUR]); + await game.classicMode.startBattle([SpeciesId.DRATINI, SpeciesId.BULBASAUR]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); @@ -196,8 +196,8 @@ describe("Moves - Dragon Tail", () => { }); it("should force switches randomly", async () => { - game.override.enemyMoveset(Moves.DRAGON_TAIL).startingLevel(100).enemyLevel(1); - await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); + game.override.enemyMoveset(MoveId.DRAGON_TAIL).startingLevel(100).enemyLevel(1); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER, SpeciesId.SQUIRTLE]); const [bulbasaur, charmander, squirtle] = game.scene.getPlayerParty(); @@ -205,8 +205,8 @@ describe("Moves - Dragon Tail", () => { vi.spyOn(game.scene, "randBattleSeedInt").mockImplementation((_range, min = 0) => { return min; }); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.DRAGON_TAIL); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.DRAGON_TAIL); await game.toNextTurn(); expect(bulbasaur.isOnField()).toBe(false); @@ -218,7 +218,7 @@ describe("Moves - Dragon Tail", () => { vi.spyOn(game.scene, "randBattleSeedInt").mockImplementation((_range, min = 0) => { return min + 1; }); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(bulbasaur.isOnField()).toBe(false); @@ -228,10 +228,10 @@ describe("Moves - Dragon Tail", () => { }); it("should not force a switch to a challenge-ineligible Pokemon", async () => { - game.override.enemyMoveset(Moves.DRAGON_TAIL).startingLevel(100).enemyLevel(1); + game.override.enemyMoveset(MoveId.DRAGON_TAIL).startingLevel(100).enemyLevel(1); // Mono-Water challenge, Eevee is ineligible game.challengeMode.addChallenge(Challenges.SINGLE_TYPE, PokemonType.WATER + 1, 0); - await game.challengeMode.startBattle([Species.LAPRAS, Species.EEVEE, Species.TOXAPEX, Species.PRIMARINA]); + await game.challengeMode.startBattle([SpeciesId.LAPRAS, SpeciesId.EEVEE, SpeciesId.TOXAPEX, SpeciesId.PRIMARINA]); const [lapras, eevee, toxapex, primarina] = game.scene.getPlayerParty(); @@ -239,7 +239,7 @@ describe("Moves - Dragon Tail", () => { vi.spyOn(game.scene, "randBattleSeedInt").mockImplementation((_range, min = 0) => { return min; }); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(lapras.isOnField()).toBe(false); @@ -250,8 +250,8 @@ describe("Moves - Dragon Tail", () => { }); it("should not force a switch to a fainted Pokemon", async () => { - game.override.enemyMoveset([Moves.SPLASH, Moves.DRAGON_TAIL]).startingLevel(100).enemyLevel(1); - await game.classicMode.startBattle([Species.LAPRAS, Species.EEVEE, Species.TOXAPEX, Species.PRIMARINA]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.DRAGON_TAIL]).startingLevel(100).enemyLevel(1); + await game.classicMode.startBattle([SpeciesId.LAPRAS, SpeciesId.EEVEE, SpeciesId.TOXAPEX, SpeciesId.PRIMARINA]); const [lapras, eevee, toxapex, primarina] = game.scene.getPlayerParty(); @@ -259,16 +259,16 @@ describe("Moves - Dragon Tail", () => { eevee.hp = 0; eevee.status = new Status(StatusEffect.FAINT); expect(eevee.isFainted()).toBe(true); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); // Turn 2: Mock an RNG call that would normally call for switching to Eevee, but it is fainted vi.spyOn(game.scene, "randBattleSeedInt").mockImplementation((_range, min = 0) => { return min; }); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.DRAGON_TAIL); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.DRAGON_TAIL); await game.toNextTurn(); expect(lapras.isOnField()).toBe(false); @@ -279,8 +279,8 @@ describe("Moves - Dragon Tail", () => { }); it("should not force a switch if there are no available Pokemon to switch into", async () => { - game.override.enemyMoveset([Moves.SPLASH, Moves.DRAGON_TAIL]).startingLevel(100).enemyLevel(1); - await game.classicMode.startBattle([Species.LAPRAS, Species.EEVEE]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.DRAGON_TAIL]).startingLevel(100).enemyLevel(1); + await game.classicMode.startBattle([SpeciesId.LAPRAS, SpeciesId.EEVEE]); const [lapras, eevee] = game.scene.getPlayerParty(); @@ -288,16 +288,16 @@ describe("Moves - Dragon Tail", () => { eevee.hp = 0; eevee.status = new Status(StatusEffect.FAINT); expect(eevee.isFainted()).toBe(true); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); // Turn 2: Mock an RNG call that would normally call for switching to Eevee, but it is fainted vi.spyOn(game.scene, "randBattleSeedInt").mockImplementation((_range, min = 0) => { return min; }); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.DRAGON_TAIL); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.DRAGON_TAIL); await game.toNextTurn(); expect(lapras.isOnField()).toBe(true); diff --git a/test/moves/dynamax_cannon.test.ts b/test/moves/dynamax_cannon.test.ts index 19a15225653..ada3361f3ef 100644 --- a/test/moves/dynamax_cannon.test.ts +++ b/test/moves/dynamax_cannon.test.ts @@ -2,9 +2,9 @@ import { BattlerIndex } from "#app/battle"; import { allMoves } from "#app/data/data-lists"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import type Move from "#app/data/moves/move"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -26,32 +26,32 @@ describe("Moves - Dynamax Cannon", () => { }); beforeEach(() => { - dynamaxCannon = allMoves[Moves.DYNAMAX_CANNON]; + dynamaxCannon = allMoves[MoveId.DYNAMAX_CANNON]; game = new GameManager(phaserGame); game.override - .moveset(Moves.DYNAMAX_CANNON) + .moveset(MoveId.DYNAMAX_CANNON) .startingLevel(200) .levelCap(10) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyMoveset(MoveId.SPLASH); // Note that, for Waves 1-10, the level cap is 10 game.override.startingWave(1); game.override.battleStyle("single"); game.override.disableCrits(); - game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyMoveset([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); + game.override.enemySpecies(SpeciesId.MAGIKARP); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.SPLASH, MoveId.SPLASH, MoveId.SPLASH]); vi.spyOn(dynamaxCannon, "calculateBattlePower"); }); it("should return 100 power against an enemy below level cap", async () => { game.override.enemyLevel(1); - await game.classicMode.startBattle([Species.ETERNATUS]); + await game.classicMode.startBattle([SpeciesId.ETERNATUS]); game.move.select(dynamaxCannon.id); @@ -63,7 +63,7 @@ describe("Moves - Dynamax Cannon", () => { it("should return 100 power against an enemy at level cap", async () => { game.override.enemyLevel(10); - await game.classicMode.startBattle([Species.ETERNATUS]); + await game.classicMode.startBattle([SpeciesId.ETERNATUS]); game.move.select(dynamaxCannon.id); @@ -75,7 +75,7 @@ describe("Moves - Dynamax Cannon", () => { it("should return 120 power against an enemy 1% above level cap", async () => { game.override.enemyLevel(101); - await game.classicMode.startBattle([Species.ETERNATUS]); + await game.classicMode.startBattle([SpeciesId.ETERNATUS]); game.move.select(dynamaxCannon.id); @@ -90,7 +90,7 @@ describe("Moves - Dynamax Cannon", () => { it("should return 140 power against an enemy 2% above level capp", async () => { game.override.enemyLevel(102); - await game.classicMode.startBattle([Species.ETERNATUS]); + await game.classicMode.startBattle([SpeciesId.ETERNATUS]); game.move.select(dynamaxCannon.id); @@ -105,7 +105,7 @@ describe("Moves - Dynamax Cannon", () => { it("should return 160 power against an enemy 3% above level cap", async () => { game.override.enemyLevel(103); - await game.classicMode.startBattle([Species.ETERNATUS]); + await game.classicMode.startBattle([SpeciesId.ETERNATUS]); game.move.select(dynamaxCannon.id); @@ -120,7 +120,7 @@ describe("Moves - Dynamax Cannon", () => { it("should return 180 power against an enemy 4% above level cap", async () => { game.override.enemyLevel(104); - await game.classicMode.startBattle([Species.ETERNATUS]); + await game.classicMode.startBattle([SpeciesId.ETERNATUS]); game.move.select(dynamaxCannon.id); @@ -135,7 +135,7 @@ describe("Moves - Dynamax Cannon", () => { it("should return 200 power against an enemy 5% above level cap", async () => { game.override.enemyLevel(105); - await game.classicMode.startBattle([Species.ETERNATUS]); + await game.classicMode.startBattle([SpeciesId.ETERNATUS]); game.move.select(dynamaxCannon.id); @@ -150,7 +150,7 @@ describe("Moves - Dynamax Cannon", () => { it("should return 200 power against an enemy way above level cap", async () => { game.override.enemyLevel(999); - await game.classicMode.startBattle([Species.ETERNATUS]); + await game.classicMode.startBattle([SpeciesId.ETERNATUS]); game.move.select(dynamaxCannon.id); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); diff --git a/test/moves/effectiveness.test.ts b/test/moves/effectiveness.test.ts index 9fc6c7b8ce7..b906e00e1a0 100644 --- a/test/moves/effectiveness.test.ts +++ b/test/moves/effectiveness.test.ts @@ -2,9 +2,9 @@ import { allMoves } from "#app/data/data-lists"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { TrainerSlot } from "#enums/trainer-slot"; import { PokemonType } from "#enums/pokemon-type"; -import { Abilities } from "#app/enums/abilities"; -import { Moves } from "#app/enums/moves"; -import { Species } from "#app/enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import * as Messages from "#app/messages"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -12,17 +12,17 @@ import { afterEach, beforeAll, describe, expect, it, vi } from "vitest"; function testMoveEffectiveness( game: GameManager, - move: Moves, - targetSpecies: Species, + move: MoveId, + targetSpecies: SpeciesId, expected: number, - targetAbility: Abilities = Abilities.BALL_FETCH, + targetAbility: AbilityId = AbilityId.BALL_FETCH, teraType?: PokemonType, ): void { // Suppress getPokemonNameWithAffix because it calls on a null battle spec vi.spyOn(Messages, "getPokemonNameWithAffix").mockReturnValue(""); game.override.enemyAbility(targetAbility); - const user = game.scene.addPlayerPokemon(getPokemonSpecies(Species.SNORLAX), 5); + const user = game.scene.addPlayerPokemon(getPokemonSpecies(SpeciesId.SNORLAX), 5); const target = game.scene.addEnemyPokemon(getPokemonSpecies(targetSpecies), 5, TrainerSlot.NONE); if (teraType !== undefined) { @@ -45,7 +45,7 @@ describe("Moves - Type Effectiveness", () => { }); game = new GameManager(phaserGame); - game.override.ability(Abilities.BALL_FETCH); + game.override.ability(AbilityId.BALL_FETCH); }); afterEach(() => { @@ -53,48 +53,48 @@ describe("Moves - Type Effectiveness", () => { }); it("Normal-type attacks are neutrally effective against Normal-type Pokemon", () => - testMoveEffectiveness(game, Moves.TACKLE, Species.SNORLAX, 1)); + testMoveEffectiveness(game, MoveId.TACKLE, SpeciesId.SNORLAX, 1)); it("Normal-type attacks are not very effective against Steel-type Pokemon", () => - testMoveEffectiveness(game, Moves.TACKLE, Species.REGISTEEL, 0.5)); + testMoveEffectiveness(game, MoveId.TACKLE, SpeciesId.REGISTEEL, 0.5)); it("Normal-type attacks are doubly resisted by Steel/Rock-type Pokemon", () => - testMoveEffectiveness(game, Moves.TACKLE, Species.AGGRON, 0.25)); + testMoveEffectiveness(game, MoveId.TACKLE, SpeciesId.AGGRON, 0.25)); it("Normal-type attacks have no effect on Ghost-type Pokemon", () => - testMoveEffectiveness(game, Moves.TACKLE, Species.DUSCLOPS, 0)); + testMoveEffectiveness(game, MoveId.TACKLE, SpeciesId.DUSCLOPS, 0)); it("Normal-type status moves are not affected by type matchups", () => - testMoveEffectiveness(game, Moves.GROWL, Species.DUSCLOPS, 1)); + testMoveEffectiveness(game, MoveId.GROWL, SpeciesId.DUSCLOPS, 1)); it("Electric-type attacks are super-effective against Water-type Pokemon", () => - testMoveEffectiveness(game, Moves.THUNDERBOLT, Species.BLASTOISE, 2)); + testMoveEffectiveness(game, MoveId.THUNDERBOLT, SpeciesId.BLASTOISE, 2)); it("Ghost-type attacks have no effect on Normal-type Pokemon", () => - testMoveEffectiveness(game, Moves.SHADOW_BALL, Species.URSALUNA, 0)); + testMoveEffectiveness(game, MoveId.SHADOW_BALL, SpeciesId.URSALUNA, 0)); it("Electric-type attacks are doubly super-effective against Water/Flying-type Pokemon", () => - testMoveEffectiveness(game, Moves.THUNDERBOLT, Species.GYARADOS, 4)); + testMoveEffectiveness(game, MoveId.THUNDERBOLT, SpeciesId.GYARADOS, 4)); it("Electric-type attacks are negated by Volt Absorb", () => - testMoveEffectiveness(game, Moves.THUNDERBOLT, Species.GYARADOS, 0, Abilities.VOLT_ABSORB)); + testMoveEffectiveness(game, MoveId.THUNDERBOLT, SpeciesId.GYARADOS, 0, AbilityId.VOLT_ABSORB)); it("Electric-type attacks are super-effective against Tera-Water Pokemon", () => - testMoveEffectiveness(game, Moves.THUNDERBOLT, Species.EXCADRILL, 2, Abilities.BALL_FETCH, PokemonType.WATER)); + testMoveEffectiveness(game, MoveId.THUNDERBOLT, SpeciesId.EXCADRILL, 2, AbilityId.BALL_FETCH, PokemonType.WATER)); it("Powder moves have no effect on Grass-type Pokemon", () => - testMoveEffectiveness(game, Moves.SLEEP_POWDER, Species.AMOONGUSS, 0)); + testMoveEffectiveness(game, MoveId.SLEEP_POWDER, SpeciesId.AMOONGUSS, 0)); it("Powder moves have no effect on Tera-Grass Pokemon", () => - testMoveEffectiveness(game, Moves.SLEEP_POWDER, Species.SNORLAX, 0, Abilities.BALL_FETCH, PokemonType.GRASS)); + testMoveEffectiveness(game, MoveId.SLEEP_POWDER, SpeciesId.SNORLAX, 0, AbilityId.BALL_FETCH, PokemonType.GRASS)); it("Prankster-boosted status moves have no effect on Dark-type Pokemon", () => { - game.override.ability(Abilities.PRANKSTER); - testMoveEffectiveness(game, Moves.BABY_DOLL_EYES, Species.MIGHTYENA, 0); + game.override.ability(AbilityId.PRANKSTER); + testMoveEffectiveness(game, MoveId.BABY_DOLL_EYES, SpeciesId.MIGHTYENA, 0); }); it("Prankster-boosted status moves have no effect on Tera-Dark Pokemon", () => { - game.override.ability(Abilities.PRANKSTER); - testMoveEffectiveness(game, Moves.BABY_DOLL_EYES, Species.SNORLAX, 0, Abilities.BALL_FETCH, PokemonType.DARK); + game.override.ability(AbilityId.PRANKSTER); + testMoveEffectiveness(game, MoveId.BABY_DOLL_EYES, SpeciesId.SNORLAX, 0, AbilityId.BALL_FETCH, PokemonType.DARK); }); }); diff --git a/test/moves/electrify.test.ts b/test/moves/electrify.test.ts index 25529e0b552..00f96d570a3 100644 --- a/test/moves/electrify.test.ts +++ b/test/moves/electrify.test.ts @@ -1,8 +1,8 @@ import { BattlerIndex } from "#app/battle"; import { PokemonType } from "#enums/pokemon-type"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; @@ -24,23 +24,23 @@ describe("Moves - Electrify", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Moves.ELECTRIFY) + .moveset(MoveId.ELECTRIFY) .battleStyle("single") .startingLevel(100) - .enemySpecies(Species.SNORLAX) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.TACKLE) + .enemySpecies(SpeciesId.SNORLAX) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.TACKLE) .enemyLevel(100); }); it("should convert attacks to Electric type", async () => { - await game.classicMode.startBattle([Species.EXCADRILL]); + await game.classicMode.startBattle([SpeciesId.EXCADRILL]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; vi.spyOn(enemyPokemon, "getMoveType"); - game.move.select(Moves.ELECTRIFY); + game.move.select(MoveId.ELECTRIFY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); @@ -50,15 +50,15 @@ describe("Moves - Electrify", () => { }); it("should override type changes from abilities", async () => { - game.override.enemyAbility(Abilities.PIXILATE); + game.override.enemyAbility(AbilityId.PIXILATE); - await game.classicMode.startBattle([Species.EXCADRILL]); + await game.classicMode.startBattle([SpeciesId.EXCADRILL]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getPlayerPokemon()!; vi.spyOn(enemyPokemon, "getMoveType"); - game.move.select(Moves.ELECTRIFY); + game.move.select(MoveId.ELECTRIFY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); diff --git a/test/moves/electro_shot.test.ts b/test/moves/electro_shot.test.ts index 0122bf04281..160f90163e3 100644 --- a/test/moves/electro_shot.test.ts +++ b/test/moves/electro_shot.test.ts @@ -2,9 +2,9 @@ import { BattlerTagType } from "#enums/battler-tag-type"; import { Stat } from "#enums/stat"; import { WeatherType } from "#enums/weather-type"; import { MoveResult } from "#app/field/pokemon"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; @@ -26,22 +26,22 @@ describe("Moves - Electro Shot", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Moves.ELECTRO_SHOT) + .moveset(MoveId.ELECTRO_SHOT) .battleStyle("single") .startingLevel(100) - .enemySpecies(Species.SNORLAX) + .enemySpecies(SpeciesId.SNORLAX) .enemyLevel(100) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should increase the user's Sp. Atk on the first turn, then attack on the second turn", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.ELECTRO_SHOT); + game.move.select(MoveId.ELECTRO_SHOT); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getTag(BattlerTagType.CHARGING)).toBeDefined(); @@ -56,7 +56,7 @@ describe("Moves - Electro Shot", () => { expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(1); expect(playerPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); - const playerElectroShot = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.ELECTRO_SHOT); + const playerElectroShot = playerPokemon.getMoveset().find(mv => mv && mv.moveId === MoveId.ELECTRO_SHOT); expect(playerElectroShot?.ppUsed).toBe(1); }); @@ -66,12 +66,12 @@ describe("Moves - Electro Shot", () => { ])("should fully resolve in one turn if $name is active", async ({ weatherType }) => { game.override.weather(weatherType); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.ELECTRO_SHOT); + game.move.select(MoveId.ELECTRO_SHOT); await game.phaseInterceptor.to("MoveEffectPhase", false); expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(1); @@ -82,18 +82,18 @@ describe("Moves - Electro Shot", () => { expect(playerPokemon.getMoveHistory()).toHaveLength(2); expect(playerPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); - const playerElectroShot = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.ELECTRO_SHOT); + const playerElectroShot = playerPokemon.getMoveset().find(mv => mv && mv.moveId === MoveId.ELECTRO_SHOT); expect(playerElectroShot?.ppUsed).toBe(1); }); it("should only increase Sp. Atk once with Multi-Lens", async () => { game.override.weather(WeatherType.RAIN).startingHeldItems([{ name: "MULTI_LENS", count: 1 }]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.ELECTRO_SHOT); + game.move.select(MoveId.ELECTRO_SHOT); await game.phaseInterceptor.to("MoveEndPhase"); expect(playerPokemon.turnData.hitCount).toBe(1); diff --git a/test/moves/encore.test.ts b/test/moves/encore.test.ts index f941328fc90..cded90c4a73 100644 --- a/test/moves/encore.test.ts +++ b/test/moves/encore.test.ts @@ -1,9 +1,9 @@ import { BattlerTagType } from "#enums/battler-tag-type"; import { BattlerIndex } from "#app/battle"; import { MoveResult } from "#app/field/pokemon"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -25,58 +25,58 @@ describe("Moves - Encore", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.ENCORE]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.SPLASH, MoveId.ENCORE]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset([Moves.SPLASH, Moves.TACKLE]) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset([MoveId.SPLASH, MoveId.TACKLE]) .startingLevel(100) .enemyLevel(100); }); it("should prevent the target from using any move except the last used move", async () => { - await game.classicMode.startBattle([Species.SNORLAX]); + await game.classicMode.startBattle([SpeciesId.SNORLAX]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.ENCORE); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.ENCORE); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); expect(enemyPokemon.getTag(BattlerTagType.ENCORE)).toBeDefined(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); // The enemy AI would normally be inclined to use Tackle, but should be // forced into using Splash. await game.phaseInterceptor.to("BerryPhase", false); - expect(enemyPokemon.getLastXMoves().every(turnMove => turnMove.move === Moves.SPLASH)).toBeTruthy(); + expect(enemyPokemon.getLastXMoves().every(turnMove => turnMove.move === MoveId.SPLASH)).toBeTruthy(); }); describe("should fail against the following moves:", () => { it.each([ - { moveId: Moves.TRANSFORM, name: "Transform", delay: false }, - { moveId: Moves.MIMIC, name: "Mimic", delay: true }, - { moveId: Moves.SKETCH, name: "Sketch", delay: true }, - { moveId: Moves.ENCORE, name: "Encore", delay: false }, - { moveId: Moves.STRUGGLE, name: "Struggle", delay: false }, + { moveId: MoveId.TRANSFORM, name: "Transform", delay: false }, + { moveId: MoveId.MIMIC, name: "Mimic", delay: true }, + { moveId: MoveId.SKETCH, name: "Sketch", delay: true }, + { moveId: MoveId.ENCORE, name: "Encore", delay: false }, + { moveId: MoveId.STRUGGLE, name: "Struggle", delay: false }, ])("$name", async ({ moveId, delay }) => { game.override.enemyMoveset(moveId); - await game.classicMode.startBattle([Species.SNORLAX]); + await game.classicMode.startBattle([SpeciesId.SNORLAX]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; if (delay) { - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); } - game.move.select(Moves.ENCORE); + game.move.select(MoveId.ENCORE); const turnOrder = delay ? [BattlerIndex.PLAYER, BattlerIndex.ENEMY] : [BattlerIndex.ENEMY, BattlerIndex.PLAYER]; await game.setTurnOrder(turnOrder); @@ -89,26 +89,26 @@ describe("Moves - Encore", () => { it("Pokemon under both Encore and Torment should alternate between Struggle and restricted move", async () => { const turnOrder = [BattlerIndex.ENEMY, BattlerIndex.PLAYER]; - game.override.moveset([Moves.ENCORE, Moves.TORMENT, Moves.SPLASH]); - await game.classicMode.startBattle([Species.FEEBAS]); + game.override.moveset([MoveId.ENCORE, MoveId.TORMENT, MoveId.SPLASH]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const enemyPokemon = game.scene.getEnemyPokemon(); - game.move.select(Moves.ENCORE); + game.move.select(MoveId.ENCORE); await game.setTurnOrder(turnOrder); await game.phaseInterceptor.to("BerryPhase"); expect(enemyPokemon?.getTag(BattlerTagType.ENCORE)).toBeDefined(); await game.toNextTurn(); - game.move.select(Moves.TORMENT); + game.move.select(MoveId.TORMENT); await game.setTurnOrder(turnOrder); await game.phaseInterceptor.to("BerryPhase"); expect(enemyPokemon?.getTag(BattlerTagType.TORMENT)).toBeDefined(); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder(turnOrder); await game.phaseInterceptor.to("BerryPhase"); const lastMove = enemyPokemon?.getLastXMoves()[0]; - expect(lastMove?.move).toBe(Moves.STRUGGLE); + expect(lastMove?.move).toBe(MoveId.STRUGGLE); }); }); diff --git a/test/moves/endure.test.ts b/test/moves/endure.test.ts index 190a689f46e..799be22ba45 100644 --- a/test/moves/endure.test.ts +++ b/test/moves/endure.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -22,39 +22,39 @@ describe("Moves - Endure", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.THUNDER, Moves.BULLET_SEED, Moves.TOXIC, Moves.SHEER_COLD]) - .ability(Abilities.SKILL_LINK) + .moveset([MoveId.THUNDER, MoveId.BULLET_SEED, MoveId.TOXIC, MoveId.SHEER_COLD]) + .ability(AbilityId.SKILL_LINK) .startingLevel(100) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.NO_GUARD) - .enemyMoveset(Moves.ENDURE); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.NO_GUARD) + .enemyMoveset(MoveId.ENDURE); }); it("should let the pokemon survive with 1 HP", async () => { - await game.classicMode.startBattle([Species.ARCEUS]); + await game.classicMode.startBattle([SpeciesId.ARCEUS]); - game.move.select(Moves.THUNDER); + game.move.select(MoveId.THUNDER); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.hp).toBe(1); }); it("should let the pokemon survive with 1 HP when hit with a multihit move", async () => { - await game.classicMode.startBattle([Species.ARCEUS]); + await game.classicMode.startBattle([SpeciesId.ARCEUS]); - game.move.select(Moves.BULLET_SEED); + game.move.select(MoveId.BULLET_SEED); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.hp).toBe(1); }); it("should let the pokemon survive against OHKO moves", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SHEER_COLD); + game.move.select(MoveId.SHEER_COLD); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.isFainted()).toBeFalsy(); @@ -62,19 +62,19 @@ describe("Moves - Endure", () => { // comprehensive indirect damage test copied from Reviver Seed test it.each([ - { moveType: "Damaging Move Chip Damage", move: Moves.SALT_CURE }, - { moveType: "Chip Damage", move: Moves.LEECH_SEED }, - { moveType: "Trapping Chip Damage", move: Moves.WHIRLPOOL }, - { moveType: "Status Effect Damage", move: Moves.TOXIC }, - { moveType: "Weather", move: Moves.SANDSTORM }, + { moveType: "Damaging Move Chip Damage", move: MoveId.SALT_CURE }, + { moveType: "Chip Damage", move: MoveId.LEECH_SEED }, + { moveType: "Trapping Chip Damage", move: MoveId.WHIRLPOOL }, + { moveType: "Status Effect Damage", move: MoveId.TOXIC }, + { moveType: "Weather", move: MoveId.SANDSTORM }, ])("should not prevent fainting from $moveType", async ({ move }) => { game.override .enemyLevel(1) .startingLevel(100) - .enemySpecies(Species.MAGIKARP) + .enemySpecies(SpeciesId.MAGIKARP) .moveset(move) - .enemyMoveset(Moves.ENDURE); - await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); + .enemyMoveset(MoveId.ENDURE); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS]); const enemy = game.scene.getEnemyPokemon()!; enemy.damageAndUpdate(enemy.hp - 1); diff --git a/test/moves/entrainment.test.ts b/test/moves/entrainment.test.ts index 31a8ffcab85..0a0cbd3b5f9 100644 --- a/test/moves/entrainment.test.ts +++ b/test/moves/entrainment.test.ts @@ -1,7 +1,7 @@ import { Stat } from "#app/enums/stat"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -23,29 +23,29 @@ describe("Moves - Entrainment", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.ENTRAINMENT]) - .ability(Abilities.ADAPTABILITY) + .moveset([MoveId.SPLASH, MoveId.ENTRAINMENT]) + .ability(AbilityId.ADAPTABILITY) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("gives its ability to the target", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.ENTRAINMENT); + game.move.select(MoveId.ENTRAINMENT); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(Abilities.ADAPTABILITY); + expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(AbilityId.ADAPTABILITY); }); it("should activate post-summon abilities", async () => { - game.override.ability(Abilities.INTIMIDATE); - await game.classicMode.startBattle([Species.FEEBAS]); + game.override.ability(AbilityId.INTIMIDATE); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.ENTRAINMENT); + game.move.select(MoveId.ENTRAINMENT); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()?.getStatStage(Stat.ATK)).toBe(-1); diff --git a/test/moves/fairy_lock.test.ts b/test/moves/fairy_lock.test.ts index faffdee2304..5624d038595 100644 --- a/test/moves/fairy_lock.test.ts +++ b/test/moves/fairy_lock.test.ts @@ -1,8 +1,8 @@ import { ArenaTagSide } from "#app/data/arena-tag"; import { ArenaTagType } from "#app/enums/arena-tag-type"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -24,34 +24,34 @@ describe("Moves - Fairy Lock", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.FAIRY_LOCK, Moves.SPLASH]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.FAIRY_LOCK, MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH) .battleStyle("double") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset([Moves.SPLASH, Moves.U_TURN]); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset([MoveId.SPLASH, MoveId.U_TURN]); }); it("Applies Fairy Lock tag for two turns", async () => { - await game.classicMode.startBattle([Species.KLEFKI, Species.TYRUNT]); + await game.classicMode.startBattle([SpeciesId.KLEFKI, SpeciesId.TYRUNT]); const playerPokemon = game.scene.getPlayerField(); const enemyField = game.scene.getEnemyField(); - game.move.select(Moves.FAIRY_LOCK); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH, 1); + game.move.select(MoveId.FAIRY_LOCK); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.PLAYER)).toBeDefined(); expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.ENEMY)).toBeDefined(); await game.toNextTurn(); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); expect(playerPokemon[0].isTrapped()).toEqual(true); expect(playerPokemon[1].isTrapped()).toEqual(true); @@ -66,12 +66,12 @@ describe("Moves - Fairy Lock", () => { }); it("Ghost types can escape Fairy Lock", async () => { - await game.classicMode.startBattle([Species.DUSKNOIR, Species.GENGAR, Species.TYRUNT]); + await game.classicMode.startBattle([SpeciesId.DUSKNOIR, SpeciesId.GENGAR, SpeciesId.TYRUNT]); - game.move.select(Moves.FAIRY_LOCK); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH, 1); + game.move.select(MoveId.FAIRY_LOCK); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.PLAYER)).toBeDefined(); @@ -82,61 +82,61 @@ describe("Moves - Fairy Lock", () => { expect(game.scene.getPlayerField()[0].isTrapped()).toEqual(false); expect(game.scene.getPlayerField()[1].isTrapped()).toEqual(false); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSwitchPokemon(2); - await game.move.selectEnemyMove(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); await game.toNextTurn(); - expect(game.scene.getPlayerField()[1].species.speciesId).not.toBe(Species.GENGAR); + expect(game.scene.getPlayerField()[1].species.speciesId).not.toBe(SpeciesId.GENGAR); }); it("Phasing moves will still switch out", async () => { - game.override.enemyMoveset([Moves.SPLASH, Moves.WHIRLWIND]); - await game.classicMode.startBattle([Species.KLEFKI, Species.TYRUNT, Species.ZYGARDE]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.WHIRLWIND]); + await game.classicMode.startBattle([SpeciesId.KLEFKI, SpeciesId.TYRUNT, SpeciesId.ZYGARDE]); - game.move.select(Moves.FAIRY_LOCK); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH, 1); + game.move.select(MoveId.FAIRY_LOCK); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.PLAYER)).toBeDefined(); expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.ENEMY)).toBeDefined(); await game.toNextTurn(); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.WHIRLWIND, 0); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.WHIRLWIND, 0); game.doSelectPartyPokemon(2); - await game.move.selectEnemyMove(Moves.WHIRLWIND, 1); + await game.move.selectEnemyMove(MoveId.WHIRLWIND, 1); game.doSelectPartyPokemon(2); await game.phaseInterceptor.to("BerryPhase"); await game.toNextTurn(); - expect(game.scene.getPlayerField()[0].species.speciesId).not.toBe(Species.KLEFKI); - expect(game.scene.getPlayerField()[1].species.speciesId).not.toBe(Species.TYRUNT); + expect(game.scene.getPlayerField()[0].species.speciesId).not.toBe(SpeciesId.KLEFKI); + expect(game.scene.getPlayerField()[1].species.speciesId).not.toBe(SpeciesId.TYRUNT); }); it("If a Pokemon faints and is replaced the replacement is also trapped", async () => { - game.override.moveset([Moves.FAIRY_LOCK, Moves.SPLASH, Moves.MEMENTO]); - await game.classicMode.startBattle([Species.KLEFKI, Species.GUZZLORD, Species.TYRUNT, Species.ZYGARDE]); + game.override.moveset([MoveId.FAIRY_LOCK, MoveId.SPLASH, MoveId.MEMENTO]); + await game.classicMode.startBattle([SpeciesId.KLEFKI, SpeciesId.GUZZLORD, SpeciesId.TYRUNT, SpeciesId.ZYGARDE]); - game.move.select(Moves.FAIRY_LOCK); - game.move.select(Moves.MEMENTO, 1); + game.move.select(MoveId.FAIRY_LOCK); + game.move.select(MoveId.MEMENTO, 1); game.doSelectPartyPokemon(2); - await game.move.selectEnemyMove(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.PLAYER)).toBeDefined(); expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.ENEMY)).toBeDefined(); await game.toNextTurn(); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerField()[0].isTrapped()).toEqual(true); expect(game.scene.getPlayerField()[1].isTrapped()).toEqual(true); diff --git a/test/moves/fake_out.test.ts b/test/moves/fake_out.test.ts index 404473c8fa0..95f69fe792e 100644 --- a/test/moves/fake_out.test.ts +++ b/test/moves/fake_out.test.ts @@ -1,6 +1,6 @@ import GameManager from "#test/testUtils/gameManager"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -22,26 +22,26 @@ describe("Moves - Fake Out", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemySpecies(Species.CORVIKNIGHT) - .moveset([Moves.FAKE_OUT, Moves.SPLASH]) - .enemyMoveset(Moves.SPLASH) + .enemySpecies(SpeciesId.CORVIKNIGHT) + .moveset([MoveId.FAKE_OUT, MoveId.SPLASH]) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(10) .startingLevel(1) // prevent LevelUpPhase from happening .disableCrits(); }); it("should only work the first turn a pokemon is sent out in a battle", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const corv = game.scene.getEnemyPokemon()!; - game.move.select(Moves.FAKE_OUT); + game.move.select(MoveId.FAKE_OUT); await game.toNextTurn(); expect(corv.hp).toBeLessThan(corv.getMaxHp()); const postTurnOneHp = corv.hp; - game.move.select(Moves.FAKE_OUT); + game.move.select(MoveId.FAKE_OUT); await game.toNextTurn(); expect(corv.hp).toBe(postTurnOneHp); @@ -49,14 +49,14 @@ describe("Moves - Fake Out", () => { // This is a PokeRogue buff to Fake Out it("should succeed at the start of each new wave, even if user wasn't recalled", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); // set hp to 1 for easy knockout game.scene.getEnemyPokemon()!.hp = 1; - game.move.select(Moves.FAKE_OUT); + game.move.select(MoveId.FAKE_OUT); await game.toNextWave(); - game.move.select(Moves.FAKE_OUT); + game.move.select(MoveId.FAKE_OUT); await game.toNextTurn(); const corv = game.scene.getEnemyPokemon()!; @@ -66,14 +66,14 @@ describe("Moves - Fake Out", () => { // This is a PokeRogue buff to Fake Out it("should succeed at the start of each new wave, even if user wasn't recalled", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); // set hp to 1 for easy knockout game.scene.getEnemyPokemon()!.hp = 1; - game.move.select(Moves.FAKE_OUT); + game.move.select(MoveId.FAKE_OUT); await game.toNextWave(); - game.move.select(Moves.FAKE_OUT); + game.move.select(MoveId.FAKE_OUT); await game.toNextTurn(); const corv = game.scene.getEnemyPokemon()!; @@ -82,9 +82,9 @@ describe("Moves - Fake Out", () => { }); it("should succeed if recalled and sent back out", async () => { - await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MAGIKARP]); - game.move.select(Moves.FAKE_OUT); + game.move.select(MoveId.FAKE_OUT); await game.toNextTurn(); const corv = game.scene.getEnemyPokemon()!; @@ -98,7 +98,7 @@ describe("Moves - Fake Out", () => { game.doSwitchPokemon(1); await game.toNextTurn(); - game.move.select(Moves.FAKE_OUT); + game.move.select(MoveId.FAKE_OUT); await game.toNextTurn(); expect(corv.hp).toBeLessThan(corv.getMaxHp()); diff --git a/test/moves/false_swipe.test.ts b/test/moves/false_swipe.test.ts index d6743477cae..48e4de6fb65 100644 --- a/test/moves/false_swipe.test.ts +++ b/test/moves/false_swipe.test.ts @@ -1,7 +1,7 @@ import { MoveResult } from "#app/field/pokemon"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -23,31 +23,31 @@ describe("Moves - False Swipe", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.FALSE_SWIPE]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.FALSE_SWIPE]) + .ability(AbilityId.BALL_FETCH) .startingLevel(1000) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should reduce the target to 1 HP", async () => { - await game.classicMode.startBattle([Species.MILOTIC]); + await game.classicMode.startBattle([SpeciesId.MILOTIC]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.FALSE_SWIPE); + game.move.select(MoveId.FALSE_SWIPE); await game.toNextTurn(); - game.move.select(Moves.FALSE_SWIPE); + game.move.select(MoveId.FALSE_SWIPE); await game.phaseInterceptor.to("BerryPhase"); expect(enemy.hp).toBe(1); const falseSwipeHistory = player .getMoveHistory() - .every(turnMove => turnMove.move === Moves.FALSE_SWIPE && turnMove.result === MoveResult.SUCCESS); + .every(turnMove => turnMove.move === MoveId.FALSE_SWIPE && turnMove.result === MoveResult.SUCCESS); expect(falseSwipeHistory).toBe(true); }); }); diff --git a/test/moves/fell_stinger.test.ts b/test/moves/fell_stinger.test.ts index 50813029c05..d5081a3ba30 100644 --- a/test/moves/fell_stinger.test.ts +++ b/test/moves/fell_stinger.test.ts @@ -1,9 +1,9 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import GameManager from "#test/testUtils/gameManager"; -import { Species } from "#enums/species"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; +import { SpeciesId } from "#enums/species-id"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; import { Stat } from "#enums/stat"; import { StatusEffect } from "#app/enums/status-effect"; import { WeatherType } from "#app/enums/weather-type"; @@ -28,21 +28,21 @@ describe("Moves - Fell Stinger", () => { game.override .battleStyle("single") - .moveset([Moves.FELL_STINGER, Moves.SALT_CURE, Moves.BIND, Moves.LEECH_SEED]) + .moveset([MoveId.FELL_STINGER, MoveId.SALT_CURE, MoveId.BIND, MoveId.LEECH_SEED]) .startingLevel(50) .disableCrits() - .enemyAbility(Abilities.STURDY) - .enemySpecies(Species.HYPNO) - .enemyMoveset(Moves.SPLASH) + .enemyAbility(AbilityId.STURDY) + .enemySpecies(SpeciesId.HYPNO) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(5); }); it("should not grant stat boost if opponent gets KO'd by recoil", async () => { - game.override.enemyMoveset([Moves.DOUBLE_EDGE]); + game.override.enemyMoveset([MoveId.DOUBLE_EDGE]); - await game.classicMode.startBattle([Species.LEAVANNY]); + await game.classicMode.startBattle([SpeciesId.LEAVANNY]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.FELL_STINGER); + game.move.select(MoveId.FELL_STINGER); await game.phaseInterceptor.to("VictoryPhase"); @@ -50,11 +50,11 @@ describe("Moves - Fell Stinger", () => { }); it("should not grant stat boost if enemy is KO'd by status effect", async () => { - game.override.enemyMoveset(Moves.SPLASH).enemyStatusEffect(StatusEffect.BURN); + game.override.enemyMoveset(MoveId.SPLASH).enemyStatusEffect(StatusEffect.BURN); - await game.classicMode.startBattle([Species.LEAVANNY]); + await game.classicMode.startBattle([SpeciesId.LEAVANNY]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.FELL_STINGER); + game.move.select(MoveId.FELL_STINGER); await game.phaseInterceptor.to("VictoryPhase"); @@ -64,10 +64,10 @@ describe("Moves - Fell Stinger", () => { it("should not grant stat boost if enemy is KO'd by damaging weather", async () => { game.override.weather(WeatherType.HAIL); - await game.classicMode.startBattle([Species.LEAVANNY]); + await game.classicMode.startBattle([SpeciesId.LEAVANNY]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.FELL_STINGER); + game.move.select(MoveId.FELL_STINGER); await game.phaseInterceptor.to("VictoryPhase"); @@ -75,12 +75,12 @@ describe("Moves - Fell Stinger", () => { }); it("should not grant stat boost if enemy is KO'd by Dry Skin + Harsh Sunlight", async () => { - game.override.enemyPassiveAbility(Abilities.STURDY).enemyAbility(Abilities.DRY_SKIN).weather(WeatherType.HARSH_SUN); + game.override.enemyPassiveAbility(AbilityId.STURDY).enemyAbility(AbilityId.DRY_SKIN).weather(WeatherType.HARSH_SUN); - await game.challengeMode.startBattle([Species.LEAVANNY]); + await game.challengeMode.startBattle([SpeciesId.LEAVANNY]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.FELL_STINGER); + game.move.select(MoveId.FELL_STINGER); await game.phaseInterceptor.to("VictoryPhase"); @@ -88,11 +88,11 @@ describe("Moves - Fell Stinger", () => { }); it("should not grant stat boost if enemy is saved by Reviver Seed", async () => { - game.override.enemyAbility(Abilities.BALL_FETCH).enemyHeldItems([{ name: "REVIVER_SEED" }]); + game.override.enemyAbility(AbilityId.BALL_FETCH).enemyHeldItems([{ name: "REVIVER_SEED" }]); - await game.classicMode.startBattle([Species.LEAVANNY]); + await game.classicMode.startBattle([SpeciesId.LEAVANNY]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.FELL_STINGER); + game.move.select(MoveId.FELL_STINGER); await game.phaseInterceptor.to("TurnEndPhase"); expect(leadPokemon.getStatStage(Stat.ATK)).toBe(0); @@ -100,23 +100,23 @@ describe("Moves - Fell Stinger", () => { it("should not grant stat boost if enemy is KO'd by Salt Cure", async () => { game.override.battleStyle("double").startingLevel(5); - const saltCure = allMoves[Moves.SALT_CURE]; - const fellStinger = allMoves[Moves.FELL_STINGER]; + const saltCure = allMoves[MoveId.SALT_CURE]; + const fellStinger = allMoves[MoveId.FELL_STINGER]; vi.spyOn(saltCure, "accuracy", "get").mockReturnValue(100); vi.spyOn(fellStinger, "power", "get").mockReturnValue(50000); - await game.classicMode.startBattle([Species.LEAVANNY]); + await game.classicMode.startBattle([SpeciesId.LEAVANNY]); const leadPokemon = game.scene.getPlayerPokemon()!; const leftEnemy = game.scene.getEnemyField()[0]!; // Turn 1: set Salt Cure, enemy splashes and does nothing - game.move.select(Moves.SALT_CURE, 0, leftEnemy.getBattlerIndex()); + game.move.select(MoveId.SALT_CURE, 0, leftEnemy.getBattlerIndex()); // Turn 2: enemy Endures Fell Stinger, then dies to Salt Cure await game.toNextTurn(); expect(leftEnemy.isFainted()).toBe(false); leftEnemy.heal(leftEnemy.getMaxHp()); - game.move.select(Moves.FELL_STINGER); + game.move.select(MoveId.FELL_STINGER); await game.toNextTurn(); expect(leftEnemy.isFainted()).toBe(true); @@ -125,21 +125,21 @@ describe("Moves - Fell Stinger", () => { it("should not grant stat boost if enemy dies to Bind or a similar effect", async () => { game.override.battleStyle("double").startingLevel(5); - vi.spyOn(allMoves[Moves.BIND], "accuracy", "get").mockReturnValue(100); - vi.spyOn(allMoves[Moves.FELL_STINGER], "power", "get").mockReturnValue(50000); + vi.spyOn(allMoves[MoveId.BIND], "accuracy", "get").mockReturnValue(100); + vi.spyOn(allMoves[MoveId.FELL_STINGER], "power", "get").mockReturnValue(50000); - await game.classicMode.startBattle([Species.LEAVANNY]); + await game.classicMode.startBattle([SpeciesId.LEAVANNY]); const leadPokemon = game.scene.getPlayerPokemon()!; const leftEnemy = game.scene.getEnemyField()[0]!; // Turn 1: set Bind, enemy splashes and does nothing - game.move.select(Moves.BIND, 0, leftEnemy.getBattlerIndex()); + game.move.select(MoveId.BIND, 0, leftEnemy.getBattlerIndex()); // Turn 2: enemy Endures Fell Stinger, then dies to Bind await game.toNextTurn(); expect(leftEnemy.isFainted()).toBe(false); leftEnemy.heal(leftEnemy.getMaxHp()); - game.move.select(Moves.FELL_STINGER, 0, leftEnemy.getBattlerIndex()); + game.move.select(MoveId.FELL_STINGER, 0, leftEnemy.getBattlerIndex()); await game.toNextTurn(); expect(leftEnemy.isFainted()).toBe(true); @@ -148,21 +148,21 @@ describe("Moves - Fell Stinger", () => { it("should not grant stat boost if enemy dies to Leech Seed", async () => { game.override.battleStyle("double").startingLevel(5); - vi.spyOn(allMoves[Moves.LEECH_SEED], "accuracy", "get").mockReturnValue(100); - vi.spyOn(allMoves[Moves.FELL_STINGER], "power", "get").mockReturnValue(50000); + vi.spyOn(allMoves[MoveId.LEECH_SEED], "accuracy", "get").mockReturnValue(100); + vi.spyOn(allMoves[MoveId.FELL_STINGER], "power", "get").mockReturnValue(50000); - await game.classicMode.startBattle([Species.LEAVANNY]); + await game.classicMode.startBattle([SpeciesId.LEAVANNY]); const leadPokemon = game.scene.getPlayerPokemon()!; const leftEnemy = game.scene.getEnemyField()[0]!; // Turn 1: set Leech Seed, enemy splashes and does nothing - game.move.select(Moves.LEECH_SEED, 0, leftEnemy.getBattlerIndex()); + game.move.select(MoveId.LEECH_SEED, 0, leftEnemy.getBattlerIndex()); // Turn 2: enemy Endures Fell Stinger, then dies to Leech Seed await game.toNextTurn(); expect(leftEnemy.isFainted()).toBe(false); leftEnemy.heal(leftEnemy.getMaxHp()); - game.move.select(Moves.FELL_STINGER, 0, leftEnemy.getBattlerIndex()); + game.move.select(MoveId.FELL_STINGER, 0, leftEnemy.getBattlerIndex()); await game.toNextTurn(); expect(leftEnemy.isFainted()).toBe(true); @@ -170,11 +170,11 @@ describe("Moves - Fell Stinger", () => { }); it("should grant stat boost if enemy dies directly to hit", async () => { - game.override.enemyAbility(Abilities.KLUTZ); + game.override.enemyAbility(AbilityId.KLUTZ); - await game.classicMode.startBattle([Species.LEAVANNY]); + await game.classicMode.startBattle([SpeciesId.LEAVANNY]); const leadPokemon = game.scene.getPlayerPokemon(); - game.move.select(Moves.FELL_STINGER); + game.move.select(MoveId.FELL_STINGER); await game.phaseInterceptor.to("TurnEndPhase"); diff --git a/test/moves/fillet_away.test.ts b/test/moves/fillet_away.test.ts index 9de237b28a1..a24b5c4ae04 100644 --- a/test/moves/fillet_away.test.ts +++ b/test/moves/fillet_away.test.ts @@ -1,7 +1,7 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { toDmgValue } from "#app/utils/common"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -28,23 +28,23 @@ describe("Moves - FILLET AWAY", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.starterSpecies(Species.MAGIKARP); - game.override.enemySpecies(Species.SNORLAX); + game.override.starterSpecies(SpeciesId.MAGIKARP); + game.override.enemySpecies(SpeciesId.SNORLAX); game.override.startingLevel(100); game.override.enemyLevel(100); - game.override.moveset([Moves.FILLET_AWAY]); - game.override.enemyMoveset(Moves.SPLASH); + game.override.moveset([MoveId.FILLET_AWAY]); + game.override.enemyMoveset(MoveId.SPLASH); }); //Bulbapedia Reference: https://bulbapedia.bulbagarden.net/wiki/fillet_away_(move) test("raises the user's ATK, SPATK, and SPD stat stages by 2 each, at the cost of 1/2 of its maximum HP", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = toDmgValue(leadPokemon.getMaxHp() / RATIO); - game.move.select(Moves.FILLET_AWAY); + game.move.select(MoveId.FILLET_AWAY); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp() - hpLost); @@ -54,7 +54,7 @@ describe("Moves - FILLET AWAY", () => { }); test("still takes effect if one or more of the involved stat stages are not at max", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = toDmgValue(leadPokemon.getMaxHp() / RATIO); @@ -63,7 +63,7 @@ describe("Moves - FILLET AWAY", () => { leadPokemon.setStatStage(Stat.ATK, 6); leadPokemon.setStatStage(Stat.SPATK, 3); - game.move.select(Moves.FILLET_AWAY); + game.move.select(MoveId.FILLET_AWAY); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp() - hpLost); @@ -73,7 +73,7 @@ describe("Moves - FILLET AWAY", () => { }); test("fails if all stat stages involved are at max", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -81,7 +81,7 @@ describe("Moves - FILLET AWAY", () => { leadPokemon.setStatStage(Stat.SPATK, 6); leadPokemon.setStatStage(Stat.SPD, 6); - game.move.select(Moves.FILLET_AWAY); + game.move.select(MoveId.FILLET_AWAY); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp()); @@ -91,13 +91,13 @@ describe("Moves - FILLET AWAY", () => { }); test("fails if the user's health is less than 1/2", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = toDmgValue(leadPokemon.getMaxHp() / RATIO); leadPokemon.hp = hpLost - PREDAMAGE; - game.move.select(Moves.FILLET_AWAY); + game.move.select(MoveId.FILLET_AWAY); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.hp).toBe(hpLost - PREDAMAGE); diff --git a/test/moves/fissure.test.ts b/test/moves/fissure.test.ts index be6be079cf0..53327b505c4 100644 --- a/test/moves/fissure.test.ts +++ b/test/moves/fissure.test.ts @@ -1,10 +1,10 @@ import { Stat } from "#enums/stat"; -import { Species } from "#app/enums/species"; +import { SpeciesId } from "#enums/species-id"; import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -31,14 +31,14 @@ describe("Moves - Fissure", () => { game.override.battleStyle("single"); game.override.disableCrits(); - game.override.starterSpecies(Species.SNORLAX); - game.override.moveset([Moves.FISSURE]); - game.override.passiveAbility(Abilities.BALL_FETCH); + game.override.starterSpecies(SpeciesId.SNORLAX); + game.override.moveset([MoveId.FISSURE]); + game.override.passiveAbility(AbilityId.BALL_FETCH); game.override.startingLevel(100); - game.override.enemySpecies(Species.SNORLAX); - game.override.enemyMoveset(Moves.SPLASH); - game.override.enemyPassiveAbility(Abilities.BALL_FETCH); + game.override.enemySpecies(SpeciesId.SNORLAX); + game.override.enemyMoveset(MoveId.SPLASH); + game.override.enemyPassiveAbility(AbilityId.BALL_FETCH); game.override.enemyLevel(100); await game.classicMode.startBattle(); @@ -48,10 +48,10 @@ describe("Moves - Fissure", () => { }); it("ignores damage modification from abilities, for example FUR_COAT", async () => { - game.override.ability(Abilities.NO_GUARD); - game.override.enemyAbility(Abilities.FUR_COAT); + game.override.ability(AbilityId.NO_GUARD); + game.override.enemyAbility(AbilityId.FUR_COAT); - game.move.select(Moves.FISSURE); + game.move.select(MoveId.FISSURE); await game.phaseInterceptor.to(DamageAnimPhase, true); expect(enemyPokemon.isFainted()).toBe(true); @@ -62,7 +62,7 @@ describe("Moves - Fissure", () => { partyPokemon.setStatStage(Stat.ACC, -6); - game.move.select(Moves.FISSURE); + game.move.select(MoveId.FISSURE); // wait for TurnEndPhase instead of DamagePhase as fissure might not actually inflict damage await game.phaseInterceptor.to(TurnEndPhase); @@ -75,7 +75,7 @@ describe("Moves - Fissure", () => { enemyPokemon.setStatStage(Stat.EVA, 6); - game.move.select(Moves.FISSURE); + game.move.select(MoveId.FISSURE); // wait for TurnEndPhase instead of DamagePhase as fissure might not actually inflict damage await game.phaseInterceptor.to(TurnEndPhase); diff --git a/test/moves/flame_burst.test.ts b/test/moves/flame_burst.test.ts index 963b0f04a9a..1d61daaacb5 100644 --- a/test/moves/flame_burst.test.ts +++ b/test/moves/flame_burst.test.ts @@ -1,9 +1,9 @@ import { allAbilities } from "#app/data/data-lists"; -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import type Pokemon from "#app/field/pokemon"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -36,21 +36,21 @@ describe("Moves - Flame Burst", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleStyle("double"); - game.override.moveset([Moves.FLAME_BURST, Moves.SPLASH]); + game.override.moveset([MoveId.FLAME_BURST, MoveId.SPLASH]); game.override.disableCrits(); - game.override.ability(Abilities.UNNERVE); + game.override.ability(AbilityId.UNNERVE); game.override.startingWave(4); - game.override.enemySpecies(Species.SHUCKLE); - game.override.enemyAbility(Abilities.BALL_FETCH); - game.override.enemyMoveset([Moves.SPLASH]); + game.override.enemySpecies(SpeciesId.SHUCKLE); + game.override.enemyAbility(AbilityId.BALL_FETCH); + game.override.enemyMoveset([MoveId.SPLASH]); }); it("inflicts damage to the target's ally equal to 1/16 of its max HP", async () => { - await game.classicMode.startBattle([Species.PIKACHU, Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU, SpeciesId.PIKACHU]); const [leftEnemy, rightEnemy] = game.scene.getEnemyField(); - game.move.select(Moves.FLAME_BURST, 0, leftEnemy.getBattlerIndex()); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.FLAME_BURST, 0, leftEnemy.getBattlerIndex()); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(TurnEndPhase); expect(leftEnemy.hp).toBeLessThan(leftEnemy.getMaxHp()); @@ -58,13 +58,13 @@ describe("Moves - Flame Burst", () => { }); it("does not inflict damage to the target's ally if the target was not affected by Flame Burst", async () => { - game.override.enemyAbility(Abilities.FLASH_FIRE); + game.override.enemyAbility(AbilityId.FLASH_FIRE); - await game.classicMode.startBattle([Species.PIKACHU, Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU, SpeciesId.PIKACHU]); const [leftEnemy, rightEnemy] = game.scene.getEnemyField(); - game.move.select(Moves.FLAME_BURST, 0, leftEnemy.getBattlerIndex()); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.FLAME_BURST, 0, leftEnemy.getBattlerIndex()); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(TurnEndPhase); expect(leftEnemy.hp).toBe(leftEnemy.getMaxHp()); @@ -72,13 +72,13 @@ describe("Moves - Flame Burst", () => { }); it("does not interact with the target ally's abilities", async () => { - await game.classicMode.startBattle([Species.PIKACHU, Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU, SpeciesId.PIKACHU]); const [leftEnemy, rightEnemy] = game.scene.getEnemyField(); - vi.spyOn(rightEnemy, "getAbility").mockReturnValue(allAbilities[Abilities.FLASH_FIRE]); + vi.spyOn(rightEnemy, "getAbility").mockReturnValue(allAbilities[AbilityId.FLASH_FIRE]); - game.move.select(Moves.FLAME_BURST, 0, leftEnemy.getBattlerIndex()); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.FLAME_BURST, 0, leftEnemy.getBattlerIndex()); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(TurnEndPhase); expect(leftEnemy.hp).toBeLessThan(leftEnemy.getMaxHp()); @@ -86,13 +86,13 @@ describe("Moves - Flame Burst", () => { }); it("effect damage is prevented by Magic Guard", async () => { - await game.classicMode.startBattle([Species.PIKACHU, Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU, SpeciesId.PIKACHU]); const [leftEnemy, rightEnemy] = game.scene.getEnemyField(); - vi.spyOn(rightEnemy, "getAbility").mockReturnValue(allAbilities[Abilities.MAGIC_GUARD]); + vi.spyOn(rightEnemy, "getAbility").mockReturnValue(allAbilities[AbilityId.MAGIC_GUARD]); - game.move.select(Moves.FLAME_BURST, 0, leftEnemy.getBattlerIndex()); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.FLAME_BURST, 0, leftEnemy.getBattlerIndex()); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(TurnEndPhase); expect(leftEnemy.hp).toBeLessThan(leftEnemy.getMaxHp()); diff --git a/test/moves/flower_shield.test.ts b/test/moves/flower_shield.test.ts index 30a367f873d..3561d396ef9 100644 --- a/test/moves/flower_shield.test.ts +++ b/test/moves/flower_shield.test.ts @@ -1,11 +1,11 @@ import { Stat } from "#enums/stat"; import { SemiInvulnerableTag } from "#app/data/battler-tags"; import { PokemonType } from "#enums/pokemon-type"; -import { Biome } from "#app/enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -26,24 +26,24 @@ describe("Moves - Flower Shield", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.ability(Abilities.NONE); - game.override.enemyAbility(Abilities.NONE); + game.override.ability(AbilityId.NONE); + game.override.enemyAbility(AbilityId.NONE); game.override.battleStyle("single"); - game.override.moveset([Moves.FLOWER_SHIELD, Moves.SPLASH]); - game.override.enemyMoveset(Moves.SPLASH); + game.override.moveset([MoveId.FLOWER_SHIELD, MoveId.SPLASH]); + game.override.enemyMoveset(MoveId.SPLASH); }); it("raises DEF stat stage by 1 for all Grass-type Pokemon on the field by one stage - single battle", async () => { - game.override.enemySpecies(Species.CHERRIM); + game.override.enemySpecies(SpeciesId.CHERRIM); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const cherrim = game.scene.getEnemyPokemon()!; const magikarp = game.scene.getPlayerPokemon()!; expect(magikarp.getStatStage(Stat.DEF)).toBe(0); expect(cherrim.getStatStage(Stat.DEF)).toBe(0); - game.move.select(Moves.FLOWER_SHIELD); + game.move.select(MoveId.FLOWER_SHIELD); await game.phaseInterceptor.to(TurnEndPhase); expect(magikarp.getStatStage(Stat.DEF)).toBe(0); @@ -51,9 +51,9 @@ describe("Moves - Flower Shield", () => { }); it("raises DEF stat stage by 1 for all Grass-type Pokemon on the field by one stage - double battle", async () => { - game.override.enemySpecies(Species.MAGIKARP).startingBiome(Biome.GRASS).battleStyle("double"); + game.override.enemySpecies(SpeciesId.MAGIKARP).startingBiome(BiomeId.GRASS).battleStyle("double"); - await game.classicMode.startBattle([Species.CHERRIM, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.CHERRIM, SpeciesId.MAGIKARP]); const field = game.scene.getField(true); const grassPokemons = field.filter(p => p.getTypes().includes(PokemonType.GRASS)); @@ -62,8 +62,8 @@ describe("Moves - Flower Shield", () => { grassPokemons.forEach(p => expect(p.getStatStage(Stat.DEF)).toBe(0)); nonGrassPokemons.forEach(p => expect(p.getStatStage(Stat.DEF)).toBe(0)); - game.move.select(Moves.FLOWER_SHIELD); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.FLOWER_SHIELD); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(TurnEndPhase); grassPokemons.forEach(p => expect(p.getStatStage(Stat.DEF)).toBe(1)); @@ -74,9 +74,9 @@ describe("Moves - Flower Shield", () => { * See semi-vulnerable state tags. {@linkcode SemiInvulnerableTag} */ it("does not raise DEF stat stage for a Pokemon in semi-vulnerable state", async () => { - game.override.enemySpecies(Species.PARAS).enemyMoveset(Moves.DIG).enemyLevel(50); + game.override.enemySpecies(SpeciesId.PARAS).enemyMoveset(MoveId.DIG).enemyLevel(50); - await game.classicMode.startBattle([Species.CHERRIM]); + await game.classicMode.startBattle([SpeciesId.CHERRIM]); const paras = game.scene.getEnemyPokemon()!; const cherrim = game.scene.getPlayerPokemon()!; @@ -84,7 +84,7 @@ describe("Moves - Flower Shield", () => { expect(cherrim.getStatStage(Stat.DEF)).toBe(0); expect(paras.getTag(SemiInvulnerableTag)).toBeUndefined; - game.move.select(Moves.FLOWER_SHIELD); + game.move.select(MoveId.FLOWER_SHIELD); await game.phaseInterceptor.to(TurnEndPhase); expect(paras.getTag(SemiInvulnerableTag)).toBeDefined(); @@ -93,16 +93,16 @@ describe("Moves - Flower Shield", () => { }); it("does nothing if there are no Grass-type Pokemon on the field", async () => { - game.override.enemySpecies(Species.MAGIKARP); + game.override.enemySpecies(SpeciesId.MAGIKARP); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const enemy = game.scene.getEnemyPokemon()!; const ally = game.scene.getPlayerPokemon()!; expect(enemy.getStatStage(Stat.DEF)).toBe(0); expect(ally.getStatStage(Stat.DEF)).toBe(0); - game.move.select(Moves.FLOWER_SHIELD); + game.move.select(MoveId.FLOWER_SHIELD); await game.phaseInterceptor.to(TurnEndPhase); expect(enemy.getStatStage(Stat.DEF)).toBe(0); diff --git a/test/moves/fly.test.ts b/test/moves/fly.test.ts index 81d04f53ff8..964d1b65a1e 100644 --- a/test/moves/fly.test.ts +++ b/test/moves/fly.test.ts @@ -1,9 +1,9 @@ import { BattlerTagType } from "#enums/battler-tag-type"; import { StatusEffect } from "#enums/status-effect"; import { MoveResult } from "#app/field/pokemon"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; @@ -27,50 +27,50 @@ describe("Moves - Fly", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Moves.FLY) + .moveset(MoveId.FLY) .battleStyle("single") .startingLevel(100) - .enemySpecies(Species.SNORLAX) + .enemySpecies(SpeciesId.SNORLAX) .enemyLevel(100) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.TACKLE); + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.TACKLE); - vi.spyOn(allMoves[Moves.FLY], "accuracy", "get").mockReturnValue(100); + vi.spyOn(allMoves[MoveId.FLY], "accuracy", "get").mockReturnValue(100); }); it("should make the user semi-invulnerable, then attack over 2 turns", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.FLY); + game.move.select(MoveId.FLY); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getTag(BattlerTagType.FLYING)).toBeDefined(); expect(enemyPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.MISS); expect(playerPokemon.hp).toBe(playerPokemon.getMaxHp()); expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); - expect(playerPokemon.getMoveQueue()[0].move).toBe(Moves.FLY); + expect(playerPokemon.getMoveQueue()[0].move).toBe(MoveId.FLY); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getTag(BattlerTagType.FLYING)).toBeUndefined(); expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); expect(playerPokemon.getMoveHistory()).toHaveLength(2); - const playerFly = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.FLY); + const playerFly = playerPokemon.getMoveset().find(mv => mv && mv.moveId === MoveId.FLY); expect(playerFly?.ppUsed).toBe(1); }); it("should not allow the user to evade attacks from Pokemon with No Guard", async () => { - game.override.enemyAbility(Abilities.NO_GUARD); + game.override.enemyAbility(AbilityId.NO_GUARD); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.FLY); + game.move.select(MoveId.FLY); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.hp).toBeLessThan(playerPokemon.getMaxHp()); @@ -78,43 +78,43 @@ describe("Moves - Fly", () => { }); it("should not expend PP when the attack phase is cancelled", async () => { - game.override.enemyAbility(Abilities.NO_GUARD).enemyMoveset(Moves.SPORE); + game.override.enemyAbility(AbilityId.NO_GUARD).enemyMoveset(MoveId.SPORE); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.FLY); + game.move.select(MoveId.FLY); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getTag(BattlerTagType.FLYING)).toBeUndefined(); expect(playerPokemon.status?.effect).toBe(StatusEffect.SLEEP); - const playerFly = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.FLY); + const playerFly = playerPokemon.getMoveset().find(mv => mv && mv.moveId === MoveId.FLY); expect(playerFly?.ppUsed).toBe(0); }); it("should be cancelled when another Pokemon uses Gravity", async () => { - game.override.enemyMoveset([Moves.SPLASH, Moves.GRAVITY]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.GRAVITY]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.FLY); + game.move.select(MoveId.FLY); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); - await game.move.selectEnemyMove(Moves.GRAVITY); + await game.move.selectEnemyMove(MoveId.GRAVITY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.FAIL); expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); - const playerFly = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.FLY); + const playerFly = playerPokemon.getMoveset().find(mv => mv && mv.moveId === MoveId.FLY); expect(playerFly?.ppUsed).toBe(0); }); }); diff --git a/test/moves/focus_punch.test.ts b/test/moves/focus_punch.test.ts index e05eb008af7..9734f9f6422 100644 --- a/test/moves/focus_punch.test.ts +++ b/test/moves/focus_punch.test.ts @@ -3,9 +3,9 @@ import { MessagePhase } from "#app/phases/message-phase"; import { MoveHeaderPhase } from "#app/phases/move-header-phase"; import { SwitchSummonPhase } from "#app/phases/switch-summon-phase"; import { TurnStartPhase } from "#app/phases/turn-start-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import i18next from "i18next"; import Phaser from "phaser"; @@ -29,24 +29,24 @@ describe("Moves - Focus Punch", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .ability(Abilities.UNNERVE) - .moveset([Moves.FOCUS_PUNCH]) - .enemySpecies(Species.GROUDON) - .enemyAbility(Abilities.INSOMNIA) - .enemyMoveset(Moves.SPLASH) + .ability(AbilityId.UNNERVE) + .moveset([MoveId.FOCUS_PUNCH]) + .enemySpecies(SpeciesId.GROUDON) + .enemyAbility(AbilityId.INSOMNIA) + .enemyMoveset(MoveId.SPLASH) .startingLevel(100) .enemyLevel(100); }); it("should deal damage at the end of turn if uninterrupted", async () => { - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; const enemyStartingHp = enemyPokemon.hp; - game.move.select(Moves.FOCUS_PUNCH); + game.move.select(MoveId.FOCUS_PUNCH); await game.phaseInterceptor.to(MessagePhase); @@ -61,16 +61,16 @@ describe("Moves - Focus Punch", () => { }); it("should fail if the user is hit", async () => { - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemyMoveset([MoveId.TACKLE]); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; const enemyStartingHp = enemyPokemon.hp; - game.move.select(Moves.FOCUS_PUNCH); + game.move.select(MoveId.FOCUS_PUNCH); await game.phaseInterceptor.to(MessagePhase); @@ -85,14 +85,14 @@ describe("Moves - Focus Punch", () => { }); it("should be cancelled if the user falls asleep mid-turn", async () => { - game.override.enemyMoveset([Moves.SPORE]); + game.override.enemyMoveset([MoveId.SPORE]); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.FOCUS_PUNCH); + game.move.select(MoveId.FOCUS_PUNCH); await game.phaseInterceptor.to(MessagePhase); // Header message @@ -108,10 +108,10 @@ describe("Moves - Focus Punch", () => { /** Guarantee a Trainer battle with multiple enemy Pokemon */ game.override.startingWave(25); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); game.forceEnemyToSwitch(); - game.move.select(Moves.FOCUS_PUNCH); + game.move.select(MoveId.FOCUS_PUNCH); await game.phaseInterceptor.to(TurnStartPhase); @@ -119,10 +119,10 @@ describe("Moves - Focus Punch", () => { expect(game.scene.phaseQueue.find(phase => phase instanceof MoveHeaderPhase)).toBeDefined(); }); it("should replace the 'but it failed' text when the user gets hit", async () => { - game.override.enemyMoveset([Moves.TACKLE]); - await game.classicMode.startBattle([Species.CHARIZARD]); + game.override.enemyMoveset([MoveId.TACKLE]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - game.move.select(Moves.FOCUS_PUNCH); + game.move.select(MoveId.FOCUS_PUNCH); await game.phaseInterceptor.to("MoveEndPhase", true); await game.phaseInterceptor.to("MessagePhase", false); const consoleSpy = vi.spyOn(console, "log"); diff --git a/test/moves/follow_me.test.ts b/test/moves/follow_me.test.ts index 228a835b17d..567320a18e9 100644 --- a/test/moves/follow_me.test.ts +++ b/test/moves/follow_me.test.ts @@ -1,9 +1,9 @@ import { Stat } from "#enums/stat"; import { BattlerIndex } from "#app/battle"; -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; @@ -25,26 +25,26 @@ describe("Moves - Follow Me", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleStyle("double"); - game.override.starterSpecies(Species.AMOONGUSS); - game.override.ability(Abilities.BALL_FETCH); - game.override.enemySpecies(Species.SNORLAX); + game.override.starterSpecies(SpeciesId.AMOONGUSS); + game.override.ability(AbilityId.BALL_FETCH); + game.override.enemySpecies(SpeciesId.SNORLAX); game.override.startingLevel(100); game.override.enemyLevel(100); - game.override.moveset([Moves.FOLLOW_ME, Moves.RAGE_POWDER, Moves.SPOTLIGHT, Moves.QUICK_ATTACK]); - game.override.enemyMoveset([Moves.TACKLE, Moves.FOLLOW_ME, Moves.SPLASH]); + game.override.moveset([MoveId.FOLLOW_ME, MoveId.RAGE_POWDER, MoveId.SPOTLIGHT, MoveId.QUICK_ATTACK]); + game.override.enemyMoveset([MoveId.TACKLE, MoveId.FOLLOW_ME, MoveId.SPLASH]); }); test("move should redirect enemy attacks to the user", async () => { - await game.classicMode.startBattle([Species.AMOONGUSS, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.AMOONGUSS, SpeciesId.CHARIZARD]); const playerPokemon = game.scene.getPlayerField(); - game.move.select(Moves.FOLLOW_ME); - game.move.select(Moves.QUICK_ATTACK, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.FOLLOW_ME); + game.move.select(MoveId.QUICK_ATTACK, 1, BattlerIndex.ENEMY); // Force both enemies to target the player Pokemon that did not use Follow Me - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to(TurnEndPhase, false); @@ -53,16 +53,16 @@ describe("Moves - Follow Me", () => { }); test("move should redirect enemy attacks to the first ally that uses it", async () => { - await game.classicMode.startBattle([Species.AMOONGUSS, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.AMOONGUSS, SpeciesId.CHARIZARD]); const playerPokemon = game.scene.getPlayerField(); - game.move.select(Moves.FOLLOW_ME); - game.move.select(Moves.FOLLOW_ME, 1); + game.move.select(MoveId.FOLLOW_ME); + game.move.select(MoveId.FOLLOW_ME, 1); // Each player is targeted by an enemy - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to(TurnEndPhase, false); @@ -73,19 +73,19 @@ describe("Moves - Follow Me", () => { }); test("move effect should be bypassed by Stalwart", async () => { - game.override.ability(Abilities.STALWART); - game.override.moveset([Moves.QUICK_ATTACK]); + game.override.ability(AbilityId.STALWART); + game.override.moveset([MoveId.QUICK_ATTACK]); - await game.classicMode.startBattle([Species.AMOONGUSS, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.AMOONGUSS, SpeciesId.CHARIZARD]); const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.QUICK_ATTACK, 0, BattlerIndex.ENEMY); - game.move.select(Moves.QUICK_ATTACK, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.QUICK_ATTACK, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.QUICK_ATTACK, 1, BattlerIndex.ENEMY_2); // Target doesn't need to be specified if the move is self-targeted - await game.move.selectEnemyMove(Moves.FOLLOW_ME); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.FOLLOW_ME); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase, false); @@ -95,17 +95,17 @@ describe("Moves - Follow Me", () => { }); test("move effect should be bypassed by Snipe Shot", async () => { - game.override.moveset([Moves.SNIPE_SHOT]); + game.override.moveset([MoveId.SNIPE_SHOT]); - await game.classicMode.startBattle([Species.AMOONGUSS, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.AMOONGUSS, SpeciesId.CHARIZARD]); const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.SNIPE_SHOT, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SNIPE_SHOT, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.SNIPE_SHOT, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SNIPE_SHOT, 1, BattlerIndex.ENEMY_2); - await game.move.selectEnemyMove(Moves.FOLLOW_ME); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.FOLLOW_ME); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase, false); diff --git a/test/moves/foresight.test.ts b/test/moves/foresight.test.ts index 82a39eceae5..a30b4d6a444 100644 --- a/test/moves/foresight.test.ts +++ b/test/moves/foresight.test.ts @@ -1,5 +1,5 @@ -import { Moves } from "#app/enums/moves"; -import { Species } from "#app/enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,11 +23,11 @@ describe("Moves - Foresight", () => { game = new GameManager(phaserGame); game.override .disableCrits() - .enemySpecies(Species.GASTLY) - .enemyMoveset(Moves.SPLASH) + .enemySpecies(SpeciesId.GASTLY) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(5) - .starterSpecies(Species.MAGIKARP) - .moveset([Moves.FORESIGHT, Moves.QUICK_ATTACK, Moves.MACH_PUNCH]); + .starterSpecies(SpeciesId.MAGIKARP) + .moveset([MoveId.FORESIGHT, MoveId.QUICK_ATTACK, MoveId.MACH_PUNCH]); }); it("should allow Normal and Fighting moves to hit Ghost types", async () => { @@ -35,34 +35,34 @@ describe("Moves - Foresight", () => { const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.QUICK_ATTACK); + game.move.select(MoveId.QUICK_ATTACK); await game.toNextTurn(); expect(enemy.hp).toBe(enemy.getMaxHp()); - game.move.select(Moves.FORESIGHT); + game.move.select(MoveId.FORESIGHT); await game.toNextTurn(); - game.move.select(Moves.QUICK_ATTACK); + game.move.select(MoveId.QUICK_ATTACK); await game.toNextTurn(); expect(enemy.hp).toBeLessThan(enemy.getMaxHp()); enemy.hp = enemy.getMaxHp(); - game.move.select(Moves.MACH_PUNCH); + game.move.select(MoveId.MACH_PUNCH); await game.phaseInterceptor.to(MoveEffectPhase); expect(enemy.hp).toBeLessThan(enemy.getMaxHp()); }); it("should ignore target's evasiveness boosts", async () => { - game.override.enemyMoveset([Moves.MINIMIZE]); + game.override.enemyMoveset([MoveId.MINIMIZE]); await game.classicMode.startBattle(); const pokemon = game.scene.getPlayerPokemon()!; vi.spyOn(pokemon, "getAccuracyMultiplier"); - game.move.select(Moves.FORESIGHT); + game.move.select(MoveId.FORESIGHT); await game.toNextTurn(); - game.move.select(Moves.QUICK_ATTACK); + game.move.select(MoveId.QUICK_ATTACK); await game.phaseInterceptor.to(MoveEffectPhase); expect(pokemon.getAccuracyMultiplier).toHaveReturnedWith(1); diff --git a/test/moves/forests_curse.test.ts b/test/moves/forests_curse.test.ts index f363fdbd19d..77fec5d277d 100644 --- a/test/moves/forests_curse.test.ts +++ b/test/moves/forests_curse.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { PokemonType } from "#enums/pokemon-type"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,24 +23,24 @@ describe("Moves - Forest's Curse", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.FORESTS_CURSE, Moves.TRICK_OR_TREAT]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.FORESTS_CURSE, MoveId.TRICK_OR_TREAT]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("will replace the added type from Trick Or Treat", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const enemyPokemon = game.scene.getEnemyPokemon(); - game.move.select(Moves.TRICK_OR_TREAT); + game.move.select(MoveId.TRICK_OR_TREAT); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyPokemon!.summonData.addedType).toBe(PokemonType.GHOST); - game.move.select(Moves.FORESTS_CURSE); + game.move.select(MoveId.FORESTS_CURSE); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyPokemon?.summonData.addedType).toBe(PokemonType.GRASS); }); diff --git a/test/moves/freeze_dry.test.ts b/test/moves/freeze_dry.test.ts index 62168afb960..dc6af507b16 100644 --- a/test/moves/freeze_dry.test.ts +++ b/test/moves/freeze_dry.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; -import { Abilities } from "#app/enums/abilities"; -import { Moves } from "#app/enums/moves"; -import { Species } from "#app/enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { PokemonType } from "#enums/pokemon-type"; import { Challenges } from "#enums/challenges"; import GameManager from "#test/testUtils/gameManager"; @@ -25,12 +25,12 @@ describe("Moves - Freeze-Dry", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) - .starterSpecies(Species.FEEBAS) - .ability(Abilities.BALL_FETCH) - .moveset([Moves.FREEZE_DRY, Moves.FORESTS_CURSE, Moves.SOAK]); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) + .starterSpecies(SpeciesId.FEEBAS) + .ability(AbilityId.BALL_FETCH) + .moveset([MoveId.FREEZE_DRY, MoveId.FORESTS_CURSE, MoveId.SOAK]); }); it("should deal 2x damage to pure water types", async () => { @@ -39,7 +39,7 @@ describe("Moves - Freeze-Dry", () => { const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -47,13 +47,13 @@ describe("Moves - Freeze-Dry", () => { }); it("should deal 4x damage to water/flying types", async () => { - game.override.enemySpecies(Species.WINGULL); + game.override.enemySpecies(SpeciesId.WINGULL); await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -61,13 +61,13 @@ describe("Moves - Freeze-Dry", () => { }); it("should deal 1x damage to water/fire types", async () => { - game.override.enemySpecies(Species.VOLCANION); + game.override.enemySpecies(SpeciesId.VOLCANION); await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -79,20 +79,20 @@ describe("Moves - Freeze-Dry", () => { */ it("should deal 2x dmg against soaked wonder guard target", async () => { game.override - .enemySpecies(Species.SHEDINJA) - .enemyMoveset(Moves.SPLASH) - .starterSpecies(Species.MAGIKARP) - .moveset([Moves.SOAK, Moves.FREEZE_DRY]); + .enemySpecies(SpeciesId.SHEDINJA) + .enemyMoveset(MoveId.SPLASH) + .starterSpecies(SpeciesId.MAGIKARP) + .moveset([MoveId.SOAK, MoveId.FREEZE_DRY]); await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.SOAK); + game.move.select(MoveId.SOAK); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.phaseInterceptor.to("MoveEffectPhase"); expect(enemy.getMoveEffectiveness).toHaveReturnedWith(2); @@ -100,16 +100,16 @@ describe("Moves - Freeze-Dry", () => { }); it("should deal 8x damage to water/ground/grass type under Forest's Curse", async () => { - game.override.enemySpecies(Species.QUAGSIRE); + game.override.enemySpecies(SpeciesId.QUAGSIRE); await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FORESTS_CURSE); + game.move.select(MoveId.FORESTS_CURSE); await game.toNextTurn(); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -117,7 +117,7 @@ describe("Moves - Freeze-Dry", () => { }); it("should deal 2x damage to steel type terastallized into water", async () => { - game.override.enemySpecies(Species.SKARMORY); + game.override.enemySpecies(SpeciesId.SKARMORY); await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; @@ -125,7 +125,7 @@ describe("Moves - Freeze-Dry", () => { enemy.isTerastallized = true; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -133,7 +133,7 @@ describe("Moves - Freeze-Dry", () => { }); it("should deal 0.5x damage to water type terastallized into fire", async () => { - game.override.enemySpecies(Species.PELIPPER); + game.override.enemySpecies(SpeciesId.PELIPPER); await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; @@ -141,7 +141,7 @@ describe("Moves - Freeze-Dry", () => { enemy.isTerastallized = true; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -149,16 +149,16 @@ describe("Moves - Freeze-Dry", () => { }); it("should deal 0.5x damage to water type Terapagos with Tera Shell", async () => { - game.override.enemySpecies(Species.TERAPAGOS).enemyAbility(Abilities.TERA_SHELL); + game.override.enemySpecies(SpeciesId.TERAPAGOS).enemyAbility(AbilityId.TERA_SHELL); await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.SOAK); + game.move.select(MoveId.SOAK); await game.toNextTurn(); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -166,13 +166,13 @@ describe("Moves - Freeze-Dry", () => { }); it("should deal 2x damage to water type under Normalize", async () => { - game.override.ability(Abilities.NORMALIZE); + game.override.ability(AbilityId.NORMALIZE); await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -180,13 +180,13 @@ describe("Moves - Freeze-Dry", () => { }); it("should deal 0.25x damage to rock/steel type under Normalize", async () => { - game.override.ability(Abilities.NORMALIZE).enemySpecies(Species.SHIELDON); + game.override.ability(AbilityId.NORMALIZE).enemySpecies(SpeciesId.SHIELDON); await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -194,13 +194,13 @@ describe("Moves - Freeze-Dry", () => { }); it("should deal 0x damage to water/ghost type under Normalize", async () => { - game.override.ability(Abilities.NORMALIZE).enemySpecies(Species.JELLICENT); + game.override.ability(AbilityId.NORMALIZE).enemySpecies(SpeciesId.JELLICENT); await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase"); @@ -208,13 +208,13 @@ describe("Moves - Freeze-Dry", () => { }); it("should deal 2x damage to water type under Electrify", async () => { - game.override.enemyMoveset([Moves.ELECTRIFY]); + game.override.enemyMoveset([MoveId.ELECTRIFY]); await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); @@ -222,13 +222,13 @@ describe("Moves - Freeze-Dry", () => { }); it("should deal 4x damage to water/flying type under Electrify", async () => { - game.override.enemyMoveset([Moves.ELECTRIFY]).enemySpecies(Species.GYARADOS); + game.override.enemyMoveset([MoveId.ELECTRIFY]).enemySpecies(SpeciesId.GYARADOS); await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); @@ -236,13 +236,13 @@ describe("Moves - Freeze-Dry", () => { }); it("should deal 0x damage to water/ground type under Electrify", async () => { - game.override.enemyMoveset([Moves.ELECTRIFY]).enemySpecies(Species.BARBOACH); + game.override.enemyMoveset([MoveId.ELECTRIFY]).enemySpecies(SpeciesId.BARBOACH); await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); @@ -250,13 +250,13 @@ describe("Moves - Freeze-Dry", () => { }); it("should deal 0.25x damage to Grass/Dragon type under Electrify", async () => { - game.override.enemyMoveset([Moves.ELECTRIFY]).enemySpecies(Species.FLAPPLE); + game.override.enemyMoveset([MoveId.ELECTRIFY]).enemySpecies(SpeciesId.FLAPPLE); await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); @@ -264,7 +264,7 @@ describe("Moves - Freeze-Dry", () => { }); it("should deal 2x damage to Water type during inverse battle", async () => { - game.override.moveset([Moves.FREEZE_DRY]).enemySpecies(Species.MAGIKARP); + game.override.moveset([MoveId.FREEZE_DRY]).enemySpecies(SpeciesId.MAGIKARP); game.challengeMode.addChallenge(Challenges.INVERSE_BATTLE, 1, 1); await game.challengeMode.startBattle(); @@ -272,7 +272,7 @@ describe("Moves - Freeze-Dry", () => { const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -280,7 +280,7 @@ describe("Moves - Freeze-Dry", () => { }); it("should deal 2x damage to Water type during inverse battle under Normalize", async () => { - game.override.moveset([Moves.FREEZE_DRY]).ability(Abilities.NORMALIZE).enemySpecies(Species.MAGIKARP); + game.override.moveset([MoveId.FREEZE_DRY]).ability(AbilityId.NORMALIZE).enemySpecies(SpeciesId.MAGIKARP); game.challengeMode.addChallenge(Challenges.INVERSE_BATTLE, 1, 1); await game.challengeMode.startBattle(); @@ -288,7 +288,7 @@ describe("Moves - Freeze-Dry", () => { const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -296,7 +296,7 @@ describe("Moves - Freeze-Dry", () => { }); it("should deal 2x damage to Water type during inverse battle under Electrify", async () => { - game.override.moveset([Moves.FREEZE_DRY]).enemySpecies(Species.MAGIKARP).enemyMoveset([Moves.ELECTRIFY]); + game.override.moveset([MoveId.FREEZE_DRY]).enemySpecies(SpeciesId.MAGIKARP).enemyMoveset([MoveId.ELECTRIFY]); game.challengeMode.addChallenge(Challenges.INVERSE_BATTLE, 1, 1); await game.challengeMode.startBattle(); @@ -304,7 +304,7 @@ describe("Moves - Freeze-Dry", () => { const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -312,7 +312,7 @@ describe("Moves - Freeze-Dry", () => { }); it("should deal 1x damage to water/flying type during inverse battle under Electrify", async () => { - game.override.enemyMoveset([Moves.ELECTRIFY]).enemySpecies(Species.GYARADOS); + game.override.enemyMoveset([MoveId.ELECTRIFY]).enemySpecies(SpeciesId.GYARADOS); game.challengeMode.addChallenge(Challenges.INVERSE_BATTLE, 1, 1); @@ -321,7 +321,7 @@ describe("Moves - Freeze-Dry", () => { const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); diff --git a/test/moves/freezy_frost.test.ts b/test/moves/freezy_frost.test.ts index 2b2e06bfe74..55f67de085f 100644 --- a/test/moves/freezy_frost.test.ts +++ b/test/moves/freezy_frost.test.ts @@ -1,7 +1,7 @@ import { Stat } from "#enums/stat"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -25,29 +25,29 @@ describe("Moves - Freezy Frost", () => { game.override .battleStyle("single") - .enemySpecies(Species.RATTATA) + .enemySpecies(SpeciesId.RATTATA) .enemyLevel(100) - .enemyMoveset(Moves.HOWL) - .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(MoveId.HOWL) + .enemyAbility(AbilityId.BALL_FETCH) .startingLevel(100) - .moveset([Moves.FREEZY_FROST, Moves.HOWL, Moves.SPLASH]) - .ability(Abilities.BALL_FETCH); + .moveset([MoveId.FREEZY_FROST, MoveId.HOWL, MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH); - vi.spyOn(allMoves[Moves.FREEZY_FROST], "accuracy", "get").mockReturnValue(100); + vi.spyOn(allMoves[MoveId.FREEZY_FROST], "accuracy", "get").mockReturnValue(100); }); it("should clear stat changes of user and opponent", async () => { - await game.classicMode.startBattle([Species.SHUCKLE]); + await game.classicMode.startBattle([SpeciesId.SHUCKLE]); const user = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.HOWL); + game.move.select(MoveId.HOWL); await game.toNextTurn(); expect(user.getStatStage(Stat.ATK)).toBe(1); expect(enemy.getStatStage(Stat.ATK)).toBe(1); - game.move.select(Moves.FREEZY_FROST); + game.move.select(MoveId.FREEZY_FROST); await game.toNextTurn(); expect(user.getStatStage(Stat.ATK)).toBe(0); @@ -55,30 +55,30 @@ describe("Moves - Freezy Frost", () => { }); it("should clear all stat changes even when enemy uses the move", async () => { - game.override.enemyMoveset(Moves.FREEZY_FROST); - await game.classicMode.startBattle([Species.SHUCKLE]); // Shuckle for slower Howl on first turn so Freezy Frost doesn't affect it. + game.override.enemyMoveset(MoveId.FREEZY_FROST); + await game.classicMode.startBattle([SpeciesId.SHUCKLE]); // Shuckle for slower Howl on first turn so Freezy Frost doesn't affect it. const user = game.scene.getPlayerPokemon()!; - game.move.select(Moves.HOWL); + game.move.select(MoveId.HOWL); await game.toNextTurn(); const userAtkBefore = user.getStatStage(Stat.ATK); expect(userAtkBefore).toBe(1); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(user.getStatStage(Stat.ATK)).toBe(0); }); it("should clear all stat changes in double battle", async () => { game.override.battleStyle("double"); - await game.classicMode.startBattle([Species.SHUCKLE, Species.RATTATA]); + await game.classicMode.startBattle([SpeciesId.SHUCKLE, SpeciesId.RATTATA]); const [leftPlayer, rightPlayer] = game.scene.getPlayerField(); const [leftOpp, rightOpp] = game.scene.getEnemyField(); - game.move.select(Moves.HOWL, 0); + game.move.select(MoveId.HOWL, 0); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(leftPlayer.getStatStage(Stat.ATK)).toBe(1); @@ -86,9 +86,9 @@ describe("Moves - Freezy Frost", () => { expect(leftOpp.getStatStage(Stat.ATK)).toBe(2); // Both enemies use Howl expect(rightOpp.getStatStage(Stat.ATK)).toBe(2); - game.move.select(Moves.FREEZY_FROST, 0, leftOpp.getBattlerIndex()); + game.move.select(MoveId.FREEZY_FROST, 0, leftOpp.getBattlerIndex()); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(leftPlayer.getStatStage(Stat.ATK)).toBe(0); diff --git a/test/moves/fusion_bolt.test.ts b/test/moves/fusion_bolt.test.ts index 3fc8dae1b85..a5263bfa364 100644 --- a/test/moves/fusion_bolt.test.ts +++ b/test/moves/fusion_bolt.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -9,7 +9,7 @@ describe("Moves - Fusion Bolt", () => { let phaserGame: Phaser.Game; let game: GameManager; - const fusionBolt = Moves.FUSION_BOLT; + const fusionBolt = MoveId.FUSION_BOLT; beforeAll(() => { phaserGame = new Phaser.Game({ @@ -26,16 +26,16 @@ describe("Moves - Fusion Bolt", () => { game.override .moveset([fusionBolt]) .startingLevel(1) - .enemySpecies(Species.RESHIRAM) - .enemyAbility(Abilities.ROUGH_SKIN) - .enemyMoveset(Moves.SPLASH) + .enemySpecies(SpeciesId.RESHIRAM) + .enemyAbility(AbilityId.ROUGH_SKIN) + .enemyMoveset(MoveId.SPLASH) .battleStyle("single") .startingWave(97) .disableCrits(); }); it("should not make contact", async () => { - await game.classicMode.startBattle([Species.ZEKROM]); + await game.classicMode.startBattle([SpeciesId.ZEKROM]); const partyMember = game.scene.getPlayerPokemon()!; const initialHp = partyMember.hp; diff --git a/test/moves/fusion_flare.test.ts b/test/moves/fusion_flare.test.ts index 9f16b94da5c..df6d390686f 100644 --- a/test/moves/fusion_flare.test.ts +++ b/test/moves/fusion_flare.test.ts @@ -1,6 +1,6 @@ import { TurnStartPhase } from "#app/phases/turn-start-phase"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -10,7 +10,7 @@ describe("Moves - Fusion Flare", () => { let phaserGame: Phaser.Game; let game: GameManager; - const fusionFlare = Moves.FUSION_FLARE; + const fusionFlare = MoveId.FUSION_FLARE; beforeAll(() => { phaserGame = new Phaser.Game({ @@ -27,15 +27,15 @@ describe("Moves - Fusion Flare", () => { game.override .moveset([fusionFlare]) .startingLevel(1) - .enemySpecies(Species.RATTATA) - .enemyMoveset(Moves.REST) + .enemySpecies(SpeciesId.RATTATA) + .enemyMoveset(MoveId.REST) .battleStyle("single") .startingWave(97) .disableCrits(); }); it("should thaw freeze status condition", async () => { - await game.classicMode.startBattle([Species.RESHIRAM]); + await game.classicMode.startBattle([SpeciesId.RESHIRAM]); const partyMember = game.scene.getPlayerPokemon()!; diff --git a/test/moves/fusion_flare_bolt.test.ts b/test/moves/fusion_flare_bolt.test.ts index 2b66a1a6d2f..bceb2c862b5 100644 --- a/test/moves/fusion_flare_bolt.test.ts +++ b/test/moves/fusion_flare_bolt.test.ts @@ -6,8 +6,8 @@ import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; import { MovePhase } from "#app/phases/move-phase"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -30,14 +30,14 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { }); beforeEach(() => { - fusionFlare = allMoves[Moves.FUSION_FLARE]; - fusionBolt = allMoves[Moves.FUSION_BOLT]; + fusionFlare = allMoves[MoveId.FUSION_FLARE]; + fusionBolt = allMoves[MoveId.FUSION_BOLT]; game = new GameManager(phaserGame); game.override .moveset([fusionFlare.id, fusionBolt.id]) .startingLevel(1) - .enemySpecies(Species.RESHIRAM) - .enemyMoveset(Moves.REST) + .enemySpecies(SpeciesId.RESHIRAM) + .enemyMoveset(MoveId.REST) .battleStyle("double") .startingWave(97) .disableCrits(); @@ -47,7 +47,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { }); it("FUSION_FLARE should double power of subsequent FUSION_BOLT", async () => { - await game.classicMode.startBattle([Species.ZEKROM, Species.ZEKROM]); + await game.classicMode.startBattle([SpeciesId.ZEKROM, SpeciesId.ZEKROM]); game.move.select(fusionFlare.id, 0, BattlerIndex.ENEMY); game.move.select(fusionBolt.id, 1, BattlerIndex.ENEMY); @@ -67,7 +67,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { }, 20000); it("FUSION_BOLT should double power of subsequent FUSION_FLARE", async () => { - await game.classicMode.startBattle([Species.ZEKROM, Species.ZEKROM]); + await game.classicMode.startBattle([SpeciesId.ZEKROM, SpeciesId.ZEKROM]); game.move.select(fusionBolt.id, 0, BattlerIndex.ENEMY); game.move.select(fusionFlare.id, 1, BattlerIndex.ENEMY); @@ -87,7 +87,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { }, 20000); it("FUSION_FLARE should double power of subsequent FUSION_BOLT if a move failed in between", async () => { - await game.classicMode.startBattle([Species.ZEKROM, Species.ZEKROM]); + await game.classicMode.startBattle([SpeciesId.ZEKROM, SpeciesId.ZEKROM]); game.move.select(fusionFlare.id, 0, BattlerIndex.PLAYER); game.move.select(fusionBolt.id, 1, BattlerIndex.PLAYER); @@ -112,8 +112,8 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { }, 20000); it("FUSION_FLARE should not double power of subsequent FUSION_BOLT if a move succeeded in between", async () => { - game.override.enemyMoveset(Moves.SPLASH); - await game.classicMode.startBattle([Species.ZEKROM, Species.ZEKROM]); + game.override.enemyMoveset(MoveId.SPLASH); + await game.classicMode.startBattle([SpeciesId.ZEKROM, SpeciesId.ZEKROM]); game.move.select(fusionFlare.id, 0, BattlerIndex.ENEMY); game.move.select(fusionBolt.id, 1, BattlerIndex.ENEMY); @@ -137,7 +137,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { }, 20000); it("FUSION_FLARE should double power of subsequent FUSION_BOLT if moves are aimed at allies", async () => { - await game.classicMode.startBattle([Species.ZEKROM, Species.RESHIRAM]); + await game.classicMode.startBattle([SpeciesId.ZEKROM, SpeciesId.RESHIRAM]); game.move.select(fusionBolt.id, 0, BattlerIndex.PLAYER_2); game.move.select(fusionFlare.id, 1, BattlerIndex.PLAYER); @@ -158,7 +158,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { it("FUSION_FLARE and FUSION_BOLT alternating throughout turn should double power of subsequent moves", async () => { game.override.enemyMoveset(fusionFlare.id); - await game.classicMode.startBattle([Species.ZEKROM, Species.ZEKROM]); + await game.classicMode.startBattle([SpeciesId.ZEKROM, SpeciesId.ZEKROM]); const party = game.scene.getPlayerParty(); const enemyParty = game.scene.getEnemyParty(); @@ -212,7 +212,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { it("FUSION_FLARE and FUSION_BOLT alternating throughout turn should double power of subsequent moves if moves are aimed at allies", async () => { game.override.enemyMoveset(fusionFlare.id); - await game.classicMode.startBattle([Species.ZEKROM, Species.ZEKROM]); + await game.classicMode.startBattle([SpeciesId.ZEKROM, SpeciesId.ZEKROM]); const party = game.scene.getPlayerParty(); const enemyParty = game.scene.getEnemyParty(); diff --git a/test/moves/future_sight.test.ts b/test/moves/future_sight.test.ts index 48be2451195..7de70a88d10 100644 --- a/test/moves/future_sight.test.ts +++ b/test/moves/future_sight.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -23,21 +23,21 @@ describe("Moves - Future Sight", () => { game = new GameManager(phaserGame); game.override .startingLevel(50) - .moveset([Moves.FUTURE_SIGHT, Moves.SPLASH]) + .moveset([MoveId.FUTURE_SIGHT, MoveId.SPLASH]) .battleStyle("single") - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.STURDY) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.STURDY) + .enemyMoveset(MoveId.SPLASH); }); it("hits 2 turns after use, ignores user switch out", async () => { - await game.classicMode.startBattle([Species.FEEBAS, Species.MILOTIC]); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MILOTIC]); - game.move.select(Moves.FUTURE_SIGHT); + game.move.select(MoveId.FUTURE_SIGHT); await game.toNextTurn(); game.doSwitchPokemon(1); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(game.scene.getEnemyPokemon()!.isFullHp()).toBe(false); diff --git a/test/moves/gastro_acid.test.ts b/test/moves/gastro_acid.test.ts index 333619d16db..6e06f441959 100644 --- a/test/moves/gastro_acid.test.ts +++ b/test/moves/gastro_acid.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; -import { Abilities } from "#app/enums/abilities"; -import { Moves } from "#app/enums/moves"; -import { Species } from "#app/enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { MoveResult } from "#app/field/pokemon"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -25,11 +25,11 @@ describe("Moves - Gastro Acid", () => { game.override.battleStyle("double"); game.override.startingLevel(1); game.override.enemyLevel(100); - game.override.ability(Abilities.BALL_FETCH); - game.override.moveset([Moves.GASTRO_ACID, Moves.WATER_GUN, Moves.SPLASH, Moves.CORE_ENFORCER]); - game.override.enemySpecies(Species.BIDOOF); - game.override.enemyMoveset(Moves.SPLASH); - game.override.enemyAbility(Abilities.WATER_ABSORB); + game.override.ability(AbilityId.BALL_FETCH); + game.override.moveset([MoveId.GASTRO_ACID, MoveId.WATER_GUN, MoveId.SPLASH, MoveId.CORE_ENFORCER]); + game.override.enemySpecies(SpeciesId.BIDOOF); + game.override.enemyMoveset(MoveId.SPLASH); + game.override.enemyAbility(AbilityId.WATER_ABSORB); }); it("suppresses effect of ability", async () => { @@ -42,8 +42,8 @@ describe("Moves - Gastro Acid", () => { await game.classicMode.startBattle(); - game.move.select(Moves.GASTRO_ACID, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.GASTRO_ACID, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("TurnInitPhase"); @@ -51,8 +51,8 @@ describe("Moves - Gastro Acid", () => { expect(enemyField[0].summonData.abilitySuppressed).toBe(true); expect(enemyField[1].summonData.abilitySuppressed).toBe(false); - game.move.select(Moves.WATER_GUN, 0, BattlerIndex.ENEMY); - game.move.select(Moves.WATER_GUN, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.WATER_GUN, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.WATER_GUN, 1, BattlerIndex.ENEMY_2); await game.phaseInterceptor.to("TurnEndPhase"); @@ -65,13 +65,13 @@ describe("Moves - Gastro Acid", () => { await game.classicMode.startBattle(); - game.move.select(Moves.CORE_ENFORCER); + game.move.select(MoveId.CORE_ENFORCER); // Force player to be slower to enable Core Enforcer to proc its suppression effect await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnInitPhase"); - game.move.select(Moves.GASTRO_ACID); + game.move.select(MoveId.GASTRO_ACID); await game.phaseInterceptor.to("TurnInitPhase"); @@ -80,22 +80,22 @@ describe("Moves - Gastro Acid", () => { it("should suppress the passive of a target even if its main ability is unsuppressable and not suppress main abli", async () => { game.override - .enemyAbility(Abilities.COMATOSE) - .enemyPassiveAbility(Abilities.WATER_ABSORB) - .moveset([Moves.SPLASH, Moves.GASTRO_ACID, Moves.WATER_GUN]); - await game.classicMode.startBattle([Species.MAGIKARP]); + .enemyAbility(AbilityId.COMATOSE) + .enemyPassiveAbility(AbilityId.WATER_ABSORB) + .moveset([MoveId.SPLASH, MoveId.GASTRO_ACID, MoveId.WATER_GUN]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const enemyPokemon = game.scene.getEnemyPokemon(); - game.move.select(Moves.GASTRO_ACID); + game.move.select(MoveId.GASTRO_ACID); await game.toNextTurn(); expect(enemyPokemon?.summonData.abilitySuppressed).toBe(true); - game.move.select(Moves.WATER_GUN); + game.move.select(MoveId.WATER_GUN); await game.toNextTurn(); expect(enemyPokemon?.getHpRatio()).toBeLessThan(1); - game.move.select(Moves.SPORE); + game.move.select(MoveId.SPORE); await game.phaseInterceptor.to("BerryPhase"); expect(enemyPokemon?.status?.effect).toBeFalsy(); diff --git a/test/moves/geomancy.test.ts b/test/moves/geomancy.test.ts index 51659f01b12..16244fed93f 100644 --- a/test/moves/geomancy.test.ts +++ b/test/moves/geomancy.test.ts @@ -1,9 +1,9 @@ import type { EffectiveStat } from "#enums/stat"; import { Stat } from "#enums/stat"; import { MoveResult } from "#app/field/pokemon"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; @@ -25,22 +25,22 @@ describe("Moves - Geomancy", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Moves.GEOMANCY) + .moveset(MoveId.GEOMANCY) .battleStyle("single") .startingLevel(100) - .enemySpecies(Species.SNORLAX) + .enemySpecies(SpeciesId.SNORLAX) .enemyLevel(100) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should boost the user's stats on the second turn of use", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const player = game.scene.getPlayerPokemon()!; const affectedStats: EffectiveStat[] = [Stat.SPATK, Stat.SPDEF, Stat.SPD]; - game.move.select(Moves.GEOMANCY); + game.move.select(MoveId.GEOMANCY); await game.phaseInterceptor.to("TurnEndPhase"); affectedStats.forEach(stat => expect(player.getStatStage(stat)).toBe(0)); @@ -51,17 +51,17 @@ describe("Moves - Geomancy", () => { expect(player.getMoveHistory()).toHaveLength(2); expect(player.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); - const playerGeomancy = player.getMoveset().find(mv => mv && mv.moveId === Moves.GEOMANCY); + const playerGeomancy = player.getMoveset().find(mv => mv && mv.moveId === MoveId.GEOMANCY); expect(playerGeomancy?.ppUsed).toBe(1); }); it("should execute over 2 turns between waves", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const player = game.scene.getPlayerPokemon()!; const affectedStats: EffectiveStat[] = [Stat.SPATK, Stat.SPDEF, Stat.SPD]; - game.move.select(Moves.GEOMANCY); + game.move.select(MoveId.GEOMANCY); await game.phaseInterceptor.to("MoveEndPhase", false); await game.doKillOpponents(); @@ -73,7 +73,7 @@ describe("Moves - Geomancy", () => { expect(player.getMoveHistory()).toHaveLength(2); expect(player.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); - const playerGeomancy = player.getMoveset().find(mv => mv && mv.moveId === Moves.GEOMANCY); + const playerGeomancy = player.getMoveset().find(mv => mv && mv.moveId === MoveId.GEOMANCY); expect(playerGeomancy?.ppUsed).toBe(1); }); }); diff --git a/test/moves/gigaton_hammer.test.ts b/test/moves/gigaton_hammer.test.ts index 6275e5d2dcb..e61a383acc5 100644 --- a/test/moves/gigaton_hammer.test.ts +++ b/test/moves/gigaton_hammer.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import GameManager from "#test/testUtils/gameManager"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -23,12 +23,12 @@ describe("Moves - Gigaton Hammer", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemySpecies(Species.MAGIKARP) - .starterSpecies(Species.FEEBAS) - .moveset([Moves.GIGATON_HAMMER]) + .enemySpecies(SpeciesId.MAGIKARP) + .starterSpecies(SpeciesId.FEEBAS) + .moveset([MoveId.GIGATON_HAMMER]) .startingLevel(10) .enemyLevel(100) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .disableCrits(); }); @@ -37,7 +37,7 @@ describe("Moves - Gigaton Hammer", () => { const enemy1 = game.scene.getEnemyPokemon()!; - game.move.select(Moves.GIGATON_HAMMER); + game.move.select(MoveId.GIGATON_HAMMER); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -46,7 +46,7 @@ describe("Moves - Gigaton Hammer", () => { await game.doKillOpponents(); await game.toNextWave(); - game.move.select(Moves.GIGATON_HAMMER); + game.move.select(MoveId.GIGATON_HAMMER); await game.toNextTurn(); const enemy2 = game.scene.getEnemyPokemon()!; @@ -60,7 +60,7 @@ describe("Moves - Gigaton Hammer", () => { const enemy1 = game.scene.getEnemyPokemon()!; - game.move.select(Moves.GIGATON_HAMMER); + game.move.select(MoveId.GIGATON_HAMMER); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -69,7 +69,7 @@ describe("Moves - Gigaton Hammer", () => { await game.doKillOpponents(); await game.toNextWave(); - game.move.select(Moves.GIGATON_HAMMER); + game.move.select(MoveId.GIGATON_HAMMER); await game.toNextTurn(); const enemy2 = game.scene.getEnemyPokemon()!; diff --git a/test/moves/glaive_rush.test.ts b/test/moves/glaive_rush.test.ts index 979c26ca20f..768c4a691b0 100644 --- a/test/moves/glaive_rush.test.ts +++ b/test/moves/glaive_rush.test.ts @@ -1,7 +1,7 @@ import { allMoves } from "#app/data/data-lists"; -import { Abilities } from "#app/enums/abilities"; -import { Moves } from "#app/enums/moves"; -import { Species } from "#app/enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -25,12 +25,12 @@ describe("Moves - Glaive Rush", () => { game.override .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset([Moves.GLAIVE_RUSH]) - .starterSpecies(Species.KLINK) - .ability(Abilities.BALL_FETCH) - .moveset([Moves.SHADOW_SNEAK, Moves.AVALANCHE, Moves.SPLASH, Moves.GLAIVE_RUSH]); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset([MoveId.GLAIVE_RUSH]) + .starterSpecies(SpeciesId.KLINK) + .ability(AbilityId.BALL_FETCH) + .moveset([MoveId.SHADOW_SNEAK, MoveId.AVALANCHE, MoveId.SPLASH, MoveId.GLAIVE_RUSH]); }); it("takes double damage from attacks", async () => { @@ -39,11 +39,11 @@ describe("Moves - Glaive Rush", () => { const enemy = game.scene.getEnemyPokemon()!; enemy.hp = 1000; - game.move.select(Moves.SHADOW_SNEAK); + game.move.select(MoveId.SHADOW_SNEAK); await game.phaseInterceptor.to("DamageAnimPhase"); const damageDealt = 1000 - enemy.hp; await game.phaseInterceptor.to("TurnEndPhase"); - game.move.select(Moves.SHADOW_SNEAK); + game.move.select(MoveId.SHADOW_SNEAK); await game.phaseInterceptor.to("DamageAnimPhase"); expect(enemy.hp).toBeLessThanOrEqual(1001 - damageDealt * 3); }); @@ -54,14 +54,14 @@ describe("Moves - Glaive Rush", () => { const enemy = game.scene.getEnemyPokemon()!; enemy.hp = 1000; - allMoves[Moves.AVALANCHE].accuracy = 0; - game.move.select(Moves.AVALANCHE); + allMoves[MoveId.AVALANCHE].accuracy = 0; + game.move.select(MoveId.AVALANCHE); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.hp).toBeLessThan(1000); }); it("interacts properly with multi-lens", async () => { - game.override.startingHeldItems([{ name: "MULTI_LENS", count: 2 }]).enemyMoveset([Moves.AVALANCHE]); + game.override.startingHeldItems([{ name: "MULTI_LENS", count: 2 }]).enemyMoveset([MoveId.AVALANCHE]); await game.classicMode.startBattle(); const player = game.scene.getPlayerPokemon()!; @@ -70,18 +70,18 @@ describe("Moves - Glaive Rush", () => { enemy.hp = 1000; player.hp = 1000; - allMoves[Moves.AVALANCHE].accuracy = 0; - game.move.select(Moves.GLAIVE_RUSH); + allMoves[MoveId.AVALANCHE].accuracy = 0; + game.move.select(MoveId.GLAIVE_RUSH); await game.phaseInterceptor.to("TurnEndPhase"); expect(player.hp).toBeLessThan(1000); player.hp = 1000; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(player.hp).toBe(1000); }); it("secondary effects only last until next move", async () => { - game.override.enemyMoveset([Moves.SHADOW_SNEAK]); + game.override.enemyMoveset([MoveId.SHADOW_SNEAK]); await game.classicMode.startBattle(); const player = game.scene.getPlayerPokemon()!; @@ -89,33 +89,33 @@ describe("Moves - Glaive Rush", () => { enemy.hp = 1000; player.hp = 1000; - allMoves[Moves.SHADOW_SNEAK].accuracy = 0; + allMoves[MoveId.SHADOW_SNEAK].accuracy = 0; - game.move.select(Moves.GLAIVE_RUSH); + game.move.select(MoveId.GLAIVE_RUSH); await game.phaseInterceptor.to("TurnEndPhase"); expect(player.hp).toBe(1000); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); const damagedHp = player.hp; expect(player.hp).toBeLessThan(1000); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(player.hp).toBe(damagedHp); }); it("secondary effects are removed upon switching", async () => { - game.override.enemyMoveset([Moves.SHADOW_SNEAK]).starterSpecies(0); - await game.classicMode.startBattle([Species.KLINK, Species.FEEBAS]); + game.override.enemyMoveset([MoveId.SHADOW_SNEAK]).starterSpecies(0); + await game.classicMode.startBattle([SpeciesId.KLINK, SpeciesId.FEEBAS]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; enemy.hp = 1000; - allMoves[Moves.SHADOW_SNEAK].accuracy = 0; + allMoves[MoveId.SHADOW_SNEAK].accuracy = 0; - game.move.select(Moves.GLAIVE_RUSH); + game.move.select(MoveId.GLAIVE_RUSH); await game.phaseInterceptor.to("TurnEndPhase"); expect(player.hp).toBe(player.getMaxHp()); @@ -127,7 +127,7 @@ describe("Moves - Glaive Rush", () => { }); it("secondary effects don't activate if move fails", async () => { - game.override.moveset([Moves.SHADOW_SNEAK, Moves.PROTECT, Moves.SPLASH, Moves.GLAIVE_RUSH]); + game.override.moveset([MoveId.SHADOW_SNEAK, MoveId.PROTECT, MoveId.SPLASH, MoveId.GLAIVE_RUSH]); await game.classicMode.startBattle(); const player = game.scene.getPlayerPokemon()!; @@ -136,16 +136,16 @@ describe("Moves - Glaive Rush", () => { enemy.hp = 1000; player.hp = 1000; - game.move.select(Moves.PROTECT); + game.move.select(MoveId.PROTECT); await game.phaseInterceptor.to("TurnEndPhase"); - game.move.select(Moves.SHADOW_SNEAK); + game.move.select(MoveId.SHADOW_SNEAK); await game.phaseInterceptor.to("TurnEndPhase"); - game.override.enemyMoveset([Moves.SPLASH]); + game.override.enemyMoveset([MoveId.SPLASH]); const damagedHP1 = 1000 - enemy.hp; enemy.hp = 1000; - game.move.select(Moves.SHADOW_SNEAK); + game.move.select(MoveId.SHADOW_SNEAK); await game.phaseInterceptor.to("TurnEndPhase"); const damagedHP2 = 1000 - enemy.hp; diff --git a/test/moves/growth.test.ts b/test/moves/growth.test.ts index 2e3ebfcde52..d468523aca7 100644 --- a/test/moves/growth.test.ts +++ b/test/moves/growth.test.ts @@ -1,8 +1,8 @@ import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import { EnemyCommandPhase } from "#app/phases/enemy-command-phase"; @@ -25,20 +25,20 @@ describe("Moves - Growth", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleStyle("single"); - game.override.enemyAbility(Abilities.MOXIE); - game.override.ability(Abilities.INSOMNIA); - game.override.moveset([Moves.GROWTH]); - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyAbility(AbilityId.MOXIE); + game.override.ability(AbilityId.INSOMNIA); + game.override.moveset([MoveId.GROWTH]); + game.override.enemyMoveset(MoveId.SPLASH); }); it("should raise SPATK stat stage by 1", async () => { - await game.classicMode.startBattle([Species.MIGHTYENA]); + await game.classicMode.startBattle([SpeciesId.MIGHTYENA]); const playerPokemon = game.scene.getPlayerPokemon()!; expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(0); - game.move.select(Moves.GROWTH); + game.move.select(MoveId.GROWTH); await game.phaseInterceptor.runFrom(EnemyCommandPhase).to(TurnInitPhase); expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(1); diff --git a/test/moves/grudge.test.ts b/test/moves/grudge.test.ts index 48bb79c5f02..b6ef25d41ff 100644 --- a/test/moves/grudge.test.ts +++ b/test/moves/grudge.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { BattlerIndex } from "#app/battle"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,44 +23,44 @@ describe("Moves - Grudge", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.EMBER, Moves.SPLASH]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.EMBER, MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.SHEDINJA) - .enemyAbility(Abilities.WONDER_GUARD) - .enemyMoveset([Moves.GRUDGE, Moves.SPLASH]); + .enemySpecies(SpeciesId.SHEDINJA) + .enemyAbility(AbilityId.WONDER_GUARD) + .enemyMoveset([MoveId.GRUDGE, MoveId.SPLASH]); }); it("should reduce the PP of the Pokemon's move to 0 when the user has fainted", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const playerPokemon = game.scene.getPlayerPokemon(); - game.move.select(Moves.EMBER); - await game.move.selectEnemyMove(Moves.GRUDGE); + game.move.select(MoveId.EMBER); + await game.move.selectEnemyMove(MoveId.GRUDGE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); - const playerMove = playerPokemon?.getMoveset().find(m => m.moveId === Moves.EMBER); + const playerMove = playerPokemon?.getMoveset().find(m => m.moveId === MoveId.EMBER); expect(playerMove?.getPpRatio()).toBe(0); }); it("should remain in effect until the user's next move", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const playerPokemon = game.scene.getPlayerPokemon(); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.GRUDGE); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.GRUDGE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); - game.move.select(Moves.EMBER); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.EMBER); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase"); - const playerMove = playerPokemon?.getMoveset().find(m => m.moveId === Moves.EMBER); + const playerMove = playerPokemon?.getMoveset().find(m => m.moveId === MoveId.EMBER); expect(playerMove?.getPpRatio()).toBe(0); }); @@ -68,23 +68,23 @@ describe("Moves - Grudge", () => { it("should not reduce the opponent's PP if the user dies to weather/indirect damage", async () => { // Opponent will be reduced to 1 HP by False Swipe, then faint to Sandstorm game.override - .moveset([Moves.FALSE_SWIPE]) + .moveset([MoveId.FALSE_SWIPE]) .startingLevel(100) - .ability(Abilities.SAND_STREAM) - .enemySpecies(Species.RATTATA); - await game.classicMode.startBattle([Species.GEODUDE]); + .ability(AbilityId.SAND_STREAM) + .enemySpecies(SpeciesId.RATTATA); + await game.classicMode.startBattle([SpeciesId.GEODUDE]); const enemyPokemon = game.scene.getEnemyPokemon(); const playerPokemon = game.scene.getPlayerPokemon(); - game.move.select(Moves.FALSE_SWIPE); - await game.move.selectEnemyMove(Moves.GRUDGE); + game.move.select(MoveId.FALSE_SWIPE); + await game.move.selectEnemyMove(MoveId.GRUDGE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); expect(enemyPokemon?.isFainted()).toBe(true); - const playerMove = playerPokemon?.getMoveset().find(m => m.moveId === Moves.FALSE_SWIPE); + const playerMove = playerPokemon?.getMoveset().find(m => m.moveId === MoveId.FALSE_SWIPE); expect(playerMove?.getPpRatio()).toBeGreaterThan(0); }); }); diff --git a/test/moves/guard_split.test.ts b/test/moves/guard_split.test.ts index 0f5c69c7d85..47edba49c9a 100644 --- a/test/moves/guard_split.test.ts +++ b/test/moves/guard_split.test.ts @@ -1,11 +1,11 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { Stat } from "#enums/stat"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; describe("Moves - Guard Split", () => { let phaserGame: Phaser.Game; @@ -25,16 +25,16 @@ describe("Moves - Guard Split", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemyAbility(Abilities.NONE) - .enemySpecies(Species.MEW) + .enemyAbility(AbilityId.NONE) + .enemySpecies(SpeciesId.MEW) .enemyLevel(200) - .moveset([Moves.GUARD_SPLIT]) - .ability(Abilities.NONE); + .moveset([MoveId.GUARD_SPLIT]) + .ability(AbilityId.NONE); }); it("should average the user's DEF and SPDEF stats with those of the target", async () => { - game.override.enemyMoveset(Moves.SPLASH); - await game.classicMode.startBattle([Species.INDEEDEE]); + game.override.enemyMoveset(MoveId.SPLASH); + await game.classicMode.startBattle([SpeciesId.INDEEDEE]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -42,7 +42,7 @@ describe("Moves - Guard Split", () => { const avgDef = Math.floor((player.getStat(Stat.DEF, false) + enemy.getStat(Stat.DEF, false)) / 2); const avgSpDef = Math.floor((player.getStat(Stat.SPDEF, false) + enemy.getStat(Stat.SPDEF, false)) / 2); - game.move.select(Moves.GUARD_SPLIT); + game.move.select(MoveId.GUARD_SPLIT); await game.phaseInterceptor.to(TurnEndPhase); expect(player.getStat(Stat.DEF, false)).toBe(avgDef); @@ -53,8 +53,8 @@ describe("Moves - Guard Split", () => { }, 20000); it("should be idempotent", async () => { - game.override.enemyMoveset([Moves.GUARD_SPLIT]); - await game.classicMode.startBattle([Species.INDEEDEE]); + game.override.enemyMoveset([MoveId.GUARD_SPLIT]); + await game.classicMode.startBattle([SpeciesId.INDEEDEE]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -62,10 +62,10 @@ describe("Moves - Guard Split", () => { const avgDef = Math.floor((player.getStat(Stat.DEF, false) + enemy.getStat(Stat.DEF, false)) / 2); const avgSpDef = Math.floor((player.getStat(Stat.SPDEF, false) + enemy.getStat(Stat.SPDEF, false)) / 2); - game.move.select(Moves.GUARD_SPLIT); + game.move.select(MoveId.GUARD_SPLIT); await game.phaseInterceptor.to(TurnEndPhase); - game.move.select(Moves.GUARD_SPLIT); + game.move.select(MoveId.GUARD_SPLIT); await game.phaseInterceptor.to(TurnEndPhase); expect(player.getStat(Stat.DEF, false)).toBe(avgDef); diff --git a/test/moves/guard_swap.test.ts b/test/moves/guard_swap.test.ts index 2076f92ccb1..d2c33e45df0 100644 --- a/test/moves/guard_swap.test.ts +++ b/test/moves/guard_swap.test.ts @@ -1,11 +1,11 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { Stat, BATTLE_STATS } from "#enums/stat"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { MoveEndPhase } from "#app/phases/move-end-phase"; describe("Moves - Guard Swap", () => { @@ -25,23 +25,23 @@ describe("Moves - Guard Swap", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) - .enemySpecies(Species.INDEEDEE) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) + .enemySpecies(SpeciesId.INDEEDEE) .enemyLevel(200) - .moveset([Moves.GUARD_SWAP]) - .ability(Abilities.NONE); + .moveset([MoveId.GUARD_SWAP]) + .ability(AbilityId.NONE); }); it("should swap the user's DEF and SPDEF stat stages with the target's", async () => { - await game.classicMode.startBattle([Species.INDEEDEE]); + await game.classicMode.startBattle([SpeciesId.INDEEDEE]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy.summonData, "statStages", "get").mockReturnValue(new Array(BATTLE_STATS.length).fill(1)); - game.move.select(Moves.GUARD_SWAP); + game.move.select(MoveId.GUARD_SWAP); await game.phaseInterceptor.to(MoveEndPhase); diff --git a/test/moves/hard_press.test.ts b/test/moves/hard_press.test.ts index 12cf049a022..88a8c4a025b 100644 --- a/test/moves/hard_press.test.ts +++ b/test/moves/hard_press.test.ts @@ -1,8 +1,8 @@ import { allMoves } from "#app/data/data-lists"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -25,60 +25,60 @@ describe("Moves - Hard Press", () => { }); beforeEach(() => { - moveToCheck = allMoves[Moves.HARD_PRESS]; + moveToCheck = allMoves[MoveId.HARD_PRESS]; game = new GameManager(phaserGame); game.override.battleStyle("single"); - game.override.ability(Abilities.BALL_FETCH); - game.override.enemySpecies(Species.MUNCHLAX); - game.override.enemyAbility(Abilities.BALL_FETCH); - game.override.enemyMoveset(Moves.SPLASH); - game.override.moveset([Moves.HARD_PRESS]); + game.override.ability(AbilityId.BALL_FETCH); + game.override.enemySpecies(SpeciesId.MUNCHLAX); + game.override.enemyAbility(AbilityId.BALL_FETCH); + game.override.enemyMoveset(MoveId.SPLASH); + game.override.moveset([MoveId.HARD_PRESS]); vi.spyOn(moveToCheck, "calculateBattlePower"); }); it("should return 100 power if target HP ratio is at 100%", async () => { - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); - game.move.select(Moves.HARD_PRESS); + game.move.select(MoveId.HARD_PRESS); await game.phaseInterceptor.to(MoveEffectPhase); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(100); }); it("should return 50 power if target HP ratio is at 50%", async () => { - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); const targetHpRatio = 0.5; const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getHpRatio").mockReturnValue(targetHpRatio); - game.move.select(Moves.HARD_PRESS); + game.move.select(MoveId.HARD_PRESS); await game.phaseInterceptor.to(MoveEffectPhase); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(50); }); it("should return 1 power if target HP ratio is at 1%", async () => { - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); const targetHpRatio = 0.01; const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getHpRatio").mockReturnValue(targetHpRatio); - game.move.select(Moves.HARD_PRESS); + game.move.select(MoveId.HARD_PRESS); await game.phaseInterceptor.to(MoveEffectPhase); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(1); }); it("should return 1 power if target HP ratio is less than 1%", async () => { - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); const targetHpRatio = 0.005; const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getHpRatio").mockReturnValue(targetHpRatio); - game.move.select(Moves.HARD_PRESS); + game.move.select(MoveId.HARD_PRESS); await game.phaseInterceptor.to(MoveEffectPhase); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(1); diff --git a/test/moves/haze.test.ts b/test/moves/haze.test.ts index 33d4fe2dfda..e77542227b8 100644 --- a/test/moves/haze.test.ts +++ b/test/moves/haze.test.ts @@ -1,8 +1,8 @@ import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; @@ -25,34 +25,34 @@ describe("Moves - Haze", () => { game.override.battleStyle("single"); - game.override.enemySpecies(Species.RATTATA); + game.override.enemySpecies(SpeciesId.RATTATA); game.override.enemyLevel(100); - game.override.enemyMoveset(Moves.SPLASH); - game.override.enemyAbility(Abilities.NONE); + game.override.enemyMoveset(MoveId.SPLASH); + game.override.enemyAbility(AbilityId.NONE); game.override.startingLevel(100); - game.override.moveset([Moves.HAZE, Moves.SWORDS_DANCE, Moves.CHARM, Moves.SPLASH]); - game.override.ability(Abilities.NONE); + game.override.moveset([MoveId.HAZE, MoveId.SWORDS_DANCE, MoveId.CHARM, MoveId.SPLASH]); + game.override.ability(AbilityId.NONE); }); it("should reset all stat changes of all Pokemon on field", async () => { - await game.classicMode.startBattle([Species.RATTATA]); + await game.classicMode.startBattle([SpeciesId.RATTATA]); const user = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; expect(user.getStatStage(Stat.ATK)).toBe(0); expect(enemy.getStatStage(Stat.ATK)).toBe(0); - game.move.select(Moves.SWORDS_DANCE); + game.move.select(MoveId.SWORDS_DANCE); await game.phaseInterceptor.to(TurnInitPhase); - game.move.select(Moves.CHARM); + game.move.select(MoveId.CHARM); await game.phaseInterceptor.to(TurnInitPhase); expect(user.getStatStage(Stat.ATK)).toBe(2); expect(enemy.getStatStage(Stat.ATK)).toBe(-2); - game.move.select(Moves.HAZE); + game.move.select(MoveId.HAZE); await game.phaseInterceptor.to(TurnInitPhase); expect(user.getStatStage(Stat.ATK)).toBe(0); diff --git a/test/moves/heal_bell.test.ts b/test/moves/heal_bell.test.ts index 8ffb602c24f..914307b4795 100644 --- a/test/moves/heal_bell.test.ts +++ b/test/moves/heal_bell.test.ts @@ -1,8 +1,8 @@ import { StatusEffect } from "#app/enums/status-effect"; import { CommandPhase } from "#app/phases/command-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; @@ -24,24 +24,24 @@ describe("Moves - Heal Bell", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.HEAL_BELL, Moves.SPLASH]) + .moveset([MoveId.HEAL_BELL, MoveId.SPLASH]) .statusEffect(StatusEffect.BURN) .battleStyle("double") - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should cure status effect of the user, its ally, and all party pokemon", async () => { - await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA, Species.RATTATA]); + await game.classicMode.startBattle([SpeciesId.RATTATA, SpeciesId.RATTATA, SpeciesId.RATTATA]); const [leftPlayer, rightPlayer, partyPokemon] = game.scene.getPlayerParty(); vi.spyOn(leftPlayer, "resetStatus"); vi.spyOn(rightPlayer, "resetStatus"); vi.spyOn(partyPokemon, "resetStatus"); - game.move.select(Moves.HEAL_BELL, 0); + game.move.select(MoveId.HEAL_BELL, 0); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(leftPlayer.resetStatus).toHaveBeenCalledOnce(); @@ -55,15 +55,15 @@ describe("Moves - Heal Bell", () => { it("should not cure status effect of the target/target's allies", async () => { game.override.enemyStatusEffect(StatusEffect.BURN); - await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA]); + await game.classicMode.startBattle([SpeciesId.RATTATA, SpeciesId.RATTATA]); const [leftOpp, rightOpp] = game.scene.getEnemyField(); vi.spyOn(leftOpp, "resetStatus"); vi.spyOn(rightOpp, "resetStatus"); - game.move.select(Moves.HEAL_BELL, 0); + game.move.select(MoveId.HEAL_BELL, 0); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(leftOpp.resetStatus).toHaveBeenCalledTimes(0); @@ -77,17 +77,17 @@ describe("Moves - Heal Bell", () => { }); it("should not cure status effect of allies ON FIELD with Soundproof, should still cure allies in party", async () => { - game.override.ability(Abilities.SOUNDPROOF); - await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA, Species.RATTATA]); + game.override.ability(AbilityId.SOUNDPROOF); + await game.classicMode.startBattle([SpeciesId.RATTATA, SpeciesId.RATTATA, SpeciesId.RATTATA]); const [leftPlayer, rightPlayer, partyPokemon] = game.scene.getPlayerParty(); vi.spyOn(leftPlayer, "resetStatus"); vi.spyOn(rightPlayer, "resetStatus"); vi.spyOn(partyPokemon, "resetStatus"); - game.move.select(Moves.HEAL_BELL, 0); + game.move.select(MoveId.HEAL_BELL, 0); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(leftPlayer.resetStatus).toHaveBeenCalledOnce(); diff --git a/test/moves/heal_block.test.ts b/test/moves/heal_block.test.ts index 4ef67214a91..58e1a5e04a5 100644 --- a/test/moves/heal_block.test.ts +++ b/test/moves/heal_block.test.ts @@ -1,11 +1,11 @@ import { BattlerIndex } from "#app/battle"; import { ArenaTagSide } from "#app/data/arena-tag"; import GameManager from "#test/testUtils/gameManager"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { WeatherType } from "#enums/weather-type"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -28,23 +28,23 @@ describe("Moves - Heal Block", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.ABSORB, Moves.WISH, Moves.SPLASH, Moves.AQUA_RING]) - .enemyMoveset(Moves.HEAL_BLOCK) - .ability(Abilities.NO_GUARD) - .enemyAbility(Abilities.BALL_FETCH) - .enemySpecies(Species.BLISSEY) + .moveset([MoveId.ABSORB, MoveId.WISH, MoveId.SPLASH, MoveId.AQUA_RING]) + .enemyMoveset(MoveId.HEAL_BLOCK) + .ability(AbilityId.NO_GUARD) + .enemyAbility(AbilityId.BALL_FETCH) + .enemySpecies(SpeciesId.BLISSEY) .disableCrits(); }); it("shouldn't stop damage from HP-drain attacks, just HP restoration", async () => { - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; player.damageAndUpdate(enemy.getMaxHp() - 1); - game.move.select(Moves.ABSORB); + game.move.select(MoveId.ABSORB); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -53,14 +53,14 @@ describe("Moves - Heal Block", () => { }); it("shouldn't stop Liquid Ooze from dealing damage", async () => { - game.override.enemyAbility(Abilities.LIQUID_OOZE); + game.override.enemyAbility(AbilityId.LIQUID_OOZE); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.ABSORB); + game.move.select(MoveId.ABSORB); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -69,18 +69,18 @@ describe("Moves - Heal Block", () => { }); it("should stop delayed heals, such as from Wish", async () => { - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const player = game.scene.getPlayerPokemon()!; player.damageAndUpdate(player.getMaxHp() - 1); - game.move.select(Moves.WISH); + game.move.select(MoveId.WISH); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.arena.getTagOnSide(ArenaTagType.WISH, ArenaTagSide.PLAYER)).toBeDefined(); while (game.scene.arena.getTagOnSide(ArenaTagType.WISH, ArenaTagSide.PLAYER)) { - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); } @@ -88,28 +88,28 @@ describe("Moves - Heal Block", () => { }); it("should prevent Grassy Terrain from restoring HP", async () => { - game.override.enemyAbility(Abilities.GRASSY_SURGE); + game.override.enemyAbility(AbilityId.GRASSY_SURGE); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const player = game.scene.getPlayerPokemon()!; player.damageAndUpdate(player.getMaxHp() - 1); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(player.hp).toBe(1); }); it("should prevent healing from heal-over-time moves", async () => { - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const player = game.scene.getPlayerPokemon()!; player.damageAndUpdate(player.getMaxHp() - 1); - game.move.select(Moves.AQUA_RING); + game.move.select(MoveId.AQUA_RING); await game.phaseInterceptor.to("TurnEndPhase"); expect(player.getTag(BattlerTagType.AQUA_RING)).toBeDefined(); @@ -117,15 +117,15 @@ describe("Moves - Heal Block", () => { }); it("should prevent abilities from restoring HP", async () => { - game.override.weather(WeatherType.RAIN).ability(Abilities.RAIN_DISH); + game.override.weather(WeatherType.RAIN).ability(AbilityId.RAIN_DISH); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const player = game.scene.getPlayerPokemon()!; player.damageAndUpdate(player.getMaxHp() - 1); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(player.hp).toBe(1); @@ -134,12 +134,12 @@ describe("Moves - Heal Block", () => { it("should stop healing from items", async () => { game.override.startingHeldItems([{ name: "LEFTOVERS" }]); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const player = game.scene.getPlayerPokemon()!; player.damageAndUpdate(player.getMaxHp() - 1); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(player.hp).toBe(1); diff --git a/test/moves/heart_swap.test.ts b/test/moves/heart_swap.test.ts index 009db731951..e9e407b6b30 100644 --- a/test/moves/heart_swap.test.ts +++ b/test/moves/heart_swap.test.ts @@ -1,11 +1,11 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { BATTLE_STATS } from "#enums/stat"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { MoveEndPhase } from "#app/phases/move-end-phase"; describe("Moves - Heart Swap", () => { @@ -25,23 +25,23 @@ describe("Moves - Heart Swap", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) - .enemySpecies(Species.INDEEDEE) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) + .enemySpecies(SpeciesId.INDEEDEE) .enemyLevel(200) - .moveset([Moves.HEART_SWAP]) - .ability(Abilities.NONE); + .moveset([MoveId.HEART_SWAP]) + .ability(AbilityId.NONE); }); it("should swap all of the user's stat stages with the target's", async () => { - await game.classicMode.startBattle([Species.MANAPHY]); + await game.classicMode.startBattle([SpeciesId.MANAPHY]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy.summonData, "statStages", "get").mockReturnValue(new Array(BATTLE_STATS.length).fill(1)); - game.move.select(Moves.HEART_SWAP); + game.move.select(MoveId.HEART_SWAP); await game.phaseInterceptor.to(MoveEndPhase); diff --git a/test/moves/hyper_beam.test.ts b/test/moves/hyper_beam.test.ts index a4cbf7d9245..083482d16ef 100644 --- a/test/moves/hyper_beam.test.ts +++ b/test/moves/hyper_beam.test.ts @@ -1,8 +1,8 @@ import { allMoves } from "#app/data/data-lists"; -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#app/enums/battler-tag-type"; -import { Moves } from "#app/enums/moves"; -import { Species } from "#app/enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { BerryPhase } from "#app/phases/berry-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import GameManager from "#test/testUtils/gameManager"; @@ -27,23 +27,23 @@ describe("Moves - Hyper Beam", () => { game = new GameManager(phaserGame); game.override.battleStyle("single"); - game.override.ability(Abilities.BALL_FETCH); - game.override.enemySpecies(Species.SNORLAX); - game.override.enemyAbility(Abilities.BALL_FETCH); - game.override.enemyMoveset([Moves.SPLASH]); + game.override.ability(AbilityId.BALL_FETCH); + game.override.enemySpecies(SpeciesId.SNORLAX); + game.override.enemyAbility(AbilityId.BALL_FETCH); + game.override.enemyMoveset([MoveId.SPLASH]); game.override.enemyLevel(100); - game.override.moveset([Moves.HYPER_BEAM, Moves.TACKLE]); - vi.spyOn(allMoves[Moves.HYPER_BEAM], "accuracy", "get").mockReturnValue(100); + game.override.moveset([MoveId.HYPER_BEAM, MoveId.TACKLE]); + vi.spyOn(allMoves[MoveId.HYPER_BEAM], "accuracy", "get").mockReturnValue(100); }); it("should force the user to recharge on the next turn (and only that turn)", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.HYPER_BEAM); + game.move.select(MoveId.HYPER_BEAM); await game.phaseInterceptor.to(TurnEndPhase); @@ -58,7 +58,7 @@ describe("Moves - Hyper Beam", () => { expect(enemyPokemon.hp).toBe(enemyPostAttackHp); expect(leadPokemon.getTag(BattlerTagType.RECHARGING)).toBeUndefined(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(BerryPhase, false); diff --git a/test/moves/imprison.test.ts b/test/moves/imprison.test.ts index dfa3b3ad757..26eadb685f9 100644 --- a/test/moves/imprison.test.ts +++ b/test/moves/imprison.test.ts @@ -1,6 +1,6 @@ -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; -import { Abilities } from "#enums/abilities"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; +import { AbilityId } from "#enums/ability-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -24,19 +24,19 @@ describe("Moves - Imprison", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset([Moves.IMPRISON, Moves.SPLASH, Moves.GROWL]) - .enemySpecies(Species.SHUCKLE) - .moveset([Moves.TRANSFORM, Moves.SPLASH]); + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset([MoveId.IMPRISON, MoveId.SPLASH, MoveId.GROWL]) + .enemySpecies(SpeciesId.SHUCKLE) + .moveset([MoveId.TRANSFORM, MoveId.SPLASH]); }); it("Pokemon under Imprison cannot use shared moves", async () => { - await game.classicMode.startBattle([Species.REGIELEKI]); + await game.classicMode.startBattle([SpeciesId.REGIELEKI]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.TRANSFORM); - await game.move.selectEnemyMove(Moves.IMPRISON); + game.move.select(MoveId.TRANSFORM); + await game.move.selectEnemyMove(MoveId.IMPRISON); await game.toNextTurn(); const playerMoveset = playerPokemon.getMoveset().map(x => x?.moveId); const enemyMoveset = game.scene @@ -50,20 +50,20 @@ describe("Moves - Imprison", () => { expect(imprisonBattlerTag).toBeDefined(); // Second turn, Imprison forces Struggle to occur - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); const move1 = playerPokemon.getLastXMoves(1)[0]!; - expect(move1.move).toBe(Moves.STRUGGLE); + expect(move1.move).toBe(MoveId.STRUGGLE); }); it("Imprison applies to Pokemon switched into Battle", async () => { - await game.classicMode.startBattle([Species.REGIELEKI, Species.BULBASAUR]); + await game.classicMode.startBattle([SpeciesId.REGIELEKI, SpeciesId.BULBASAUR]); const playerPokemon1 = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.IMPRISON); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.IMPRISON); await game.toNextTurn(); const imprisonArenaTag = game.scene.arena.getTag(ArenaTagType.IMPRISON); const imprisonBattlerTag1 = playerPokemon1.getTag(BattlerTagType.IMPRISON); @@ -72,7 +72,7 @@ describe("Moves - Imprison", () => { // Second turn, Imprison forces Struggle to occur game.doSwitchPokemon(1); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); const playerPokemon2 = game.scene.getPlayerPokemon()!; const imprisonBattlerTag2 = playerPokemon2.getTag(BattlerTagType.IMPRISON); @@ -81,18 +81,18 @@ describe("Moves - Imprison", () => { }); it("The effects of Imprison only end when the source is no longer active", async () => { - game.override.moveset([Moves.SPLASH, Moves.IMPRISON]); - await game.classicMode.startBattle([Species.REGIELEKI, Species.BULBASAUR]); + game.override.moveset([MoveId.SPLASH, MoveId.IMPRISON]); + await game.classicMode.startBattle([SpeciesId.REGIELEKI, SpeciesId.BULBASAUR]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.IMPRISON); - await game.move.selectEnemyMove(Moves.GROWL); + game.move.select(MoveId.IMPRISON); + await game.move.selectEnemyMove(MoveId.GROWL); await game.toNextTurn(); expect(game.scene.arena.getTag(ArenaTagType.IMPRISON)).toBeDefined(); expect(enemyPokemon.getTag(BattlerTagType.IMPRISON)).toBeDefined(); game.doSwitchPokemon(1); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); expect(playerPokemon.isActive(true)).toBeFalsy(); expect(game.scene.arena.getTag(ArenaTagType.IMPRISON)).toBeUndefined(); diff --git a/test/moves/instruct.test.ts b/test/moves/instruct.test.ts index 719349760dc..56ac8d9d04d 100644 --- a/test/moves/instruct.test.ts +++ b/test/moves/instruct.test.ts @@ -2,9 +2,9 @@ import { BattlerIndex } from "#app/battle"; import type Pokemon from "#app/field/pokemon"; import { MoveResult } from "#app/field/pokemon"; import type { MovePhase } from "#app/phases/move-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -13,7 +13,7 @@ describe("Moves - Instruct", () => { let phaserGame: Phaser.Game; let game: GameManager; - function instructSuccess(target: Pokemon, move: Moves): void { + function instructSuccess(target: Pokemon, move: MoveId): void { expect(target.getLastXMoves(-1)[0].move).toBe(move); expect(target.getLastXMoves(-1)[1].move).toBe(target.getLastXMoves()[0].move); expect(target.getMoveset().find(m => m?.moveId === move)?.ppUsed).toBe(2); @@ -33,22 +33,22 @@ describe("Moves - Instruct", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemySpecies(Species.SHUCKLE) - .enemyAbility(Abilities.NO_GUARD) + .enemySpecies(SpeciesId.SHUCKLE) + .enemyAbility(AbilityId.NO_GUARD) .enemyLevel(100) .startingLevel(100) .disableCrits(); }); it("should repeat target's last used move", async () => { - game.override.moveset(Moves.INSTRUCT).enemyLevel(1000); // ensures shuckle no die - await game.classicMode.startBattle([Species.AMOONGUSS]); + game.override.moveset(MoveId.INSTRUCT).enemyLevel(1000); // ensures shuckle no die + await game.classicMode.startBattle([SpeciesId.AMOONGUSS]); const enemy = game.scene.getEnemyPokemon()!; - game.move.changeMoveset(enemy, Moves.SONIC_BOOM); + game.move.changeMoveset(enemy, MoveId.SONIC_BOOM); - game.move.select(Moves.INSTRUCT); - await game.move.selectEnemyMove(Moves.SONIC_BOOM); + game.move.select(MoveId.INSTRUCT); + await game.move.selectEnemyMove(MoveId.SONIC_BOOM); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("MovePhase"); // enemy attacks us @@ -60,93 +60,93 @@ describe("Moves - Instruct", () => { await game.phaseInterceptor.to("MovePhase", false); // enemy repeats move currentPhase = game.scene.getCurrentPhase() as MovePhase; expect(currentPhase.pokemon).toBe(enemy); - expect(currentPhase.move.moveId).toBe(Moves.SONIC_BOOM); + expect(currentPhase.move.moveId).toBe(MoveId.SONIC_BOOM); await game.phaseInterceptor.to("TurnEndPhase", false); - instructSuccess(enemy, Moves.SONIC_BOOM); + instructSuccess(enemy, MoveId.SONIC_BOOM); expect(game.scene.getPlayerPokemon()?.getInverseHp()).toBe(40); }); it("should repeat enemy's move through substitute", async () => { - game.override.moveset([Moves.INSTRUCT, Moves.SPLASH]); - await game.classicMode.startBattle([Species.AMOONGUSS]); + game.override.moveset([MoveId.INSTRUCT, MoveId.SPLASH]); + await game.classicMode.startBattle([SpeciesId.AMOONGUSS]); const enemy = game.scene.getEnemyPokemon()!; - game.move.changeMoveset(enemy, [Moves.SONIC_BOOM, Moves.SUBSTITUTE]); + game.move.changeMoveset(enemy, [MoveId.SONIC_BOOM, MoveId.SUBSTITUTE]); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SUBSTITUTE); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SUBSTITUTE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); - game.move.select(Moves.INSTRUCT); - await game.move.selectEnemyMove(Moves.SONIC_BOOM); + game.move.select(MoveId.INSTRUCT); + await game.move.selectEnemyMove(MoveId.SONIC_BOOM); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase", false); - instructSuccess(game.scene.getEnemyPokemon()!, Moves.SONIC_BOOM); + instructSuccess(game.scene.getEnemyPokemon()!, MoveId.SONIC_BOOM); expect(game.scene.getPlayerPokemon()?.getInverseHp()).toBe(40); }); it("should repeat ally's attack on enemy", async () => { - game.override.battleStyle("double").enemyMoveset(Moves.SPLASH); - await game.classicMode.startBattle([Species.AMOONGUSS, Species.SHUCKLE]); + game.override.battleStyle("double").enemyMoveset(MoveId.SPLASH); + await game.classicMode.startBattle([SpeciesId.AMOONGUSS, SpeciesId.SHUCKLE]); const [amoonguss, shuckle] = game.scene.getPlayerField(); - game.move.changeMoveset(amoonguss, [Moves.INSTRUCT, Moves.SONIC_BOOM]); - game.move.changeMoveset(shuckle, [Moves.INSTRUCT, Moves.SONIC_BOOM]); + game.move.changeMoveset(amoonguss, [MoveId.INSTRUCT, MoveId.SONIC_BOOM]); + game.move.changeMoveset(shuckle, [MoveId.INSTRUCT, MoveId.SONIC_BOOM]); - game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2); - game.move.select(Moves.SONIC_BOOM, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); + game.move.select(MoveId.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2); + game.move.select(MoveId.SONIC_BOOM, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("TurnEndPhase", false); - instructSuccess(shuckle, Moves.SONIC_BOOM); + instructSuccess(shuckle, MoveId.SONIC_BOOM); expect(game.scene.getEnemyField()[0].getInverseHp()).toBe(40); }); // TODO: Enable test case once gigaton hammer (and blood moon) are reworked it.todo("should repeat enemy's Gigaton Hammer", async () => { - game.override.moveset(Moves.INSTRUCT).enemyLevel(5); - await game.classicMode.startBattle([Species.AMOONGUSS]); + game.override.moveset(MoveId.INSTRUCT).enemyLevel(5); + await game.classicMode.startBattle([SpeciesId.AMOONGUSS]); const enemy = game.scene.getEnemyPokemon()!; - game.move.changeMoveset(enemy, [Moves.GIGATON_HAMMER, Moves.BLOOD_MOON]); + game.move.changeMoveset(enemy, [MoveId.GIGATON_HAMMER, MoveId.BLOOD_MOON]); - game.move.select(Moves.INSTRUCT); + game.move.select(MoveId.INSTRUCT); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); - instructSuccess(enemy, Moves.GIGATON_HAMMER); + instructSuccess(enemy, MoveId.GIGATON_HAMMER); expect(game.scene.getPlayerPokemon()!.turnData.attacksReceived.length).toBe(2); }); it("should add moves to move queue for copycat", async () => { - game.override.battleStyle("double").moveset(Moves.INSTRUCT).enemyLevel(5); - await game.classicMode.startBattle([Species.AMOONGUSS]); + game.override.battleStyle("double").moveset(MoveId.INSTRUCT).enemyLevel(5); + await game.classicMode.startBattle([SpeciesId.AMOONGUSS]); const [enemy1, enemy2] = game.scene.getEnemyField()!; - game.move.changeMoveset(enemy1, Moves.WATER_GUN); - game.move.changeMoveset(enemy2, Moves.COPYCAT); + game.move.changeMoveset(enemy1, MoveId.WATER_GUN); + game.move.changeMoveset(enemy2, MoveId.COPYCAT); - game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.ENEMY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("BerryPhase"); - instructSuccess(enemy1, Moves.WATER_GUN); + instructSuccess(enemy1, MoveId.WATER_GUN); // amoonguss gets hit by water gun thrice; once by original attack, once by instructed use and once by copycat expect(game.scene.getPlayerPokemon()!.turnData.attacksReceived.length).toBe(3); }); it("should respect enemy's status condition", async () => { - game.override.moveset([Moves.INSTRUCT, Moves.THUNDER_WAVE]).enemyMoveset(Moves.SONIC_BOOM); - await game.classicMode.startBattle([Species.AMOONGUSS]); + game.override.moveset([MoveId.INSTRUCT, MoveId.THUNDER_WAVE]).enemyMoveset(MoveId.SONIC_BOOM); + await game.classicMode.startBattle([SpeciesId.AMOONGUSS]); - game.move.select(Moves.THUNDER_WAVE); + game.move.select(MoveId.THUNDER_WAVE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); - game.move.select(Moves.INSTRUCT); + game.move.select(MoveId.INSTRUCT); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MovePhase"); // force enemy's instructed move to bork and then immediately thaw out @@ -155,21 +155,21 @@ describe("Moves - Instruct", () => { await game.phaseInterceptor.to("TurnEndPhase", false); const moveHistory = game.scene.getEnemyPokemon()?.getLastXMoves(-1)!; - expect(moveHistory.map(m => m.move)).toEqual([Moves.SONIC_BOOM, Moves.NONE, Moves.SONIC_BOOM]); + expect(moveHistory.map(m => m.move)).toEqual([MoveId.SONIC_BOOM, MoveId.NONE, MoveId.SONIC_BOOM]); expect(game.scene.getPlayerPokemon()?.getInverseHp()).toBe(40); }); it("should not repeat enemy's out of pp move", async () => { - game.override.moveset(Moves.INSTRUCT).enemySpecies(Species.UNOWN); - await game.classicMode.startBattle([Species.AMOONGUSS]); + game.override.moveset(MoveId.INSTRUCT).enemySpecies(SpeciesId.UNOWN); + await game.classicMode.startBattle([SpeciesId.AMOONGUSS]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.changeMoveset(enemyPokemon, Moves.HIDDEN_POWER); - const moveUsed = enemyPokemon.moveset.find(m => m?.moveId === Moves.HIDDEN_POWER)!; + game.move.changeMoveset(enemyPokemon, MoveId.HIDDEN_POWER); + const moveUsed = enemyPokemon.moveset.find(m => m?.moveId === MoveId.HIDDEN_POWER)!; moveUsed.ppUsed = moveUsed.getMovePp() - 1; - game.move.select(Moves.INSTRUCT); - await game.move.selectEnemyMove(Moves.HIDDEN_POWER); + game.move.select(MoveId.INSTRUCT); + await game.move.selectEnemyMove(MoveId.HIDDEN_POWER); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase", false); @@ -179,15 +179,15 @@ describe("Moves - Instruct", () => { }); it("should redirect attacking moves if enemy faints", async () => { - game.override.battleStyle("double").enemyMoveset(Moves.SPLASH).enemySpecies(Species.MAGIKARP).enemyLevel(1); - await game.classicMode.startBattle([Species.HISUI_ELECTRODE, Species.KOMMO_O]); + game.override.battleStyle("double").enemyMoveset(MoveId.SPLASH).enemySpecies(SpeciesId.MAGIKARP).enemyLevel(1); + await game.classicMode.startBattle([SpeciesId.HISUI_ELECTRODE, SpeciesId.KOMMO_O]); const [electrode, kommo_o] = game.scene.getPlayerField()!; - game.move.changeMoveset(electrode, Moves.CHLOROBLAST); - game.move.changeMoveset(kommo_o, Moves.INSTRUCT); + game.move.changeMoveset(electrode, MoveId.CHLOROBLAST); + game.move.changeMoveset(kommo_o, MoveId.INSTRUCT); - game.move.select(Moves.CHLOROBLAST, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); + game.move.select(MoveId.CHLOROBLAST, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("BerryPhase"); @@ -201,36 +201,36 @@ describe("Moves - Instruct", () => { expect(karp2.isFainted()).toBe(true); }); it("should allow for dancer copying of instructed dance move", async () => { - game.override.battleStyle("double").enemyMoveset([Moves.INSTRUCT, Moves.SPLASH]).enemyLevel(1000); - await game.classicMode.startBattle([Species.ORICORIO, Species.VOLCARONA]); + game.override.battleStyle("double").enemyMoveset([MoveId.INSTRUCT, MoveId.SPLASH]).enemyLevel(1000); + await game.classicMode.startBattle([SpeciesId.ORICORIO, SpeciesId.VOLCARONA]); const [oricorio, volcarona] = game.scene.getPlayerField(); - game.move.changeMoveset(oricorio, Moves.SPLASH); - game.move.changeMoveset(volcarona, Moves.FIERY_DANCE); + game.move.changeMoveset(oricorio, MoveId.SPLASH); + game.move.changeMoveset(volcarona, MoveId.FIERY_DANCE); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER); - game.move.select(Moves.FIERY_DANCE, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); - await game.move.selectEnemyMove(Moves.INSTRUCT, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.FIERY_DANCE, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); + await game.move.selectEnemyMove(MoveId.INSTRUCT, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("BerryPhase"); // fiery dance triggered dancer successfully for a total of 4 hits // Enemy level is set to a high value so that it does not faint even after all 4 hits - instructSuccess(volcarona, Moves.FIERY_DANCE); + instructSuccess(volcarona, MoveId.FIERY_DANCE); expect(game.scene.getEnemyField()[0].turnData.attacksReceived.length).toBe(4); }); it("should not repeat move when switching out", async () => { - game.override.enemyMoveset(Moves.INSTRUCT).enemySpecies(Species.UNOWN); - await game.classicMode.startBattle([Species.AMOONGUSS, Species.TOXICROAK]); + game.override.enemyMoveset(MoveId.INSTRUCT).enemySpecies(SpeciesId.UNOWN); + await game.classicMode.startBattle([SpeciesId.AMOONGUSS, SpeciesId.TOXICROAK]); const amoonguss = game.scene.getPlayerPokemon()!; - game.move.changeMoveset(amoonguss, Moves.SEED_BOMB); + game.move.changeMoveset(amoonguss, MoveId.SEED_BOMB); amoonguss.summonData.moveHistory = [ { - move: Moves.SEED_BOMB, + move: MoveId.SEED_BOMB, targets: [BattlerIndex.ENEMY], result: MoveResult.SUCCESS, }, @@ -244,11 +244,11 @@ describe("Moves - Instruct", () => { }); it("should fail if no move has yet been used by target", async () => { - game.override.moveset(Moves.INSTRUCT).enemyMoveset(Moves.SPLASH); - await game.classicMode.startBattle([Species.AMOONGUSS]); + game.override.moveset(MoveId.INSTRUCT).enemyMoveset(MoveId.SPLASH); + await game.classicMode.startBattle([SpeciesId.AMOONGUSS]); - game.move.select(Moves.INSTRUCT); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.INSTRUCT); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("TurnEndPhase", false); @@ -256,16 +256,16 @@ describe("Moves - Instruct", () => { }); it("should attempt to call enemy's disabled move, but move use itself should fail", async () => { - game.override.moveset([Moves.INSTRUCT, Moves.DISABLE]).battleStyle("double"); - await game.classicMode.startBattle([Species.AMOONGUSS, Species.DROWZEE]); + game.override.moveset([MoveId.INSTRUCT, MoveId.DISABLE]).battleStyle("double"); + await game.classicMode.startBattle([SpeciesId.AMOONGUSS, SpeciesId.DROWZEE]); const [enemy1, enemy2] = game.scene.getEnemyField(); - game.move.changeMoveset(enemy1, Moves.SONIC_BOOM); - game.move.changeMoveset(enemy2, Moves.SPLASH); + game.move.changeMoveset(enemy1, MoveId.SONIC_BOOM); + game.move.changeMoveset(enemy2, MoveId.SPLASH); - game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.DISABLE, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); - await game.move.selectEnemyMove(Moves.SONIC_BOOM, BattlerIndex.PLAYER); + game.move.select(MoveId.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.DISABLE, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); + await game.move.selectEnemyMove(MoveId.SONIC_BOOM, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("TurnEndPhase", false); @@ -276,49 +276,49 @@ describe("Moves - Instruct", () => { game.scene .getEnemyField()[0] .getMoveset() - .find(m => m?.moveId === Moves.SONIC_BOOM)?.ppUsed, + .find(m => m?.moveId === MoveId.SONIC_BOOM)?.ppUsed, ).toBe(1); }); it("should not repeat enemy's move through protect", async () => { - game.override.moveset([Moves.INSTRUCT]); - await game.classicMode.startBattle([Species.AMOONGUSS]); + game.override.moveset([MoveId.INSTRUCT]); + await game.classicMode.startBattle([SpeciesId.AMOONGUSS]); const enemy = game.scene.getEnemyPokemon()!; - game.move.changeMoveset(enemy, Moves.PROTECT); - game.move.select(Moves.INSTRUCT); + game.move.changeMoveset(enemy, MoveId.PROTECT); + game.move.select(MoveId.INSTRUCT); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase", false); - expect(enemy.getLastXMoves(-1)[0].move).toBe(Moves.PROTECT); + expect(enemy.getLastXMoves(-1)[0].move).toBe(MoveId.PROTECT); expect(enemy.getLastXMoves(-1)[1]).toBeUndefined(); // undefined because instruct failed and didn't repeat - expect(enemy.getMoveset().find(m => m?.moveId === Moves.PROTECT)?.ppUsed).toBe(1); + expect(enemy.getMoveset().find(m => m?.moveId === MoveId.PROTECT)?.ppUsed).toBe(1); }); it("should not repeat enemy's charging move", async () => { - game.override.moveset([Moves.INSTRUCT]).enemyMoveset([Moves.SONIC_BOOM, Moves.HYPER_BEAM]); - await game.classicMode.startBattle([Species.SHUCKLE]); + game.override.moveset([MoveId.INSTRUCT]).enemyMoveset([MoveId.SONIC_BOOM, MoveId.HYPER_BEAM]); + await game.classicMode.startBattle([SpeciesId.SHUCKLE]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; enemy.summonData.moveHistory = [ { - move: Moves.SONIC_BOOM, + move: MoveId.SONIC_BOOM, targets: [BattlerIndex.PLAYER], result: MoveResult.SUCCESS, virtual: false, }, ]; - game.move.select(Moves.INSTRUCT); - await game.move.selectEnemyMove(Moves.HYPER_BEAM); + game.move.select(MoveId.INSTRUCT); + await game.move.selectEnemyMove(MoveId.HYPER_BEAM); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); // instruct fails at copying last move due to charging turn (rather than instructing sonic boom) expect(player.getLastXMoves()[0].result).toBe(MoveResult.FAIL); - game.move.select(Moves.INSTRUCT); + game.move.select(MoveId.INSTRUCT); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase", false); @@ -326,114 +326,114 @@ describe("Moves - Instruct", () => { }); it("should not repeat move since forgotten by target", async () => { - game.override.enemyMoveset(Moves.INSTRUCT); - await game.classicMode.startBattle([Species.REGIELEKI]); + game.override.enemyMoveset(MoveId.INSTRUCT); + await game.classicMode.startBattle([SpeciesId.REGIELEKI]); const regieleki = game.scene.getPlayerPokemon()!; regieleki.pushMoveHistory({ - move: Moves.ELECTRO_DRIFT, + move: MoveId.ELECTRO_DRIFT, targets: [BattlerIndex.PLAYER], result: MoveResult.SUCCESS, virtual: false, }); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toEndOfTurn(); expect(game.field.getEnemyPokemon().getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); it("should disregard priority of instructed move on use", async () => { - game.override.enemyMoveset([Moves.SPLASH, Moves.WHIRLWIND]).moveset(Moves.INSTRUCT); - await game.classicMode.startBattle([Species.LUCARIO, Species.BANETTE]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.WHIRLWIND]).moveset(MoveId.INSTRUCT); + await game.classicMode.startBattle([SpeciesId.LUCARIO, SpeciesId.BANETTE]); const enemyPokemon = game.scene.getEnemyPokemon()!; enemyPokemon.summonData.moveHistory = [ { - move: Moves.WHIRLWIND, + move: MoveId.WHIRLWIND, targets: [BattlerIndex.PLAYER], result: MoveResult.SUCCESS, virtual: false, }, ]; - game.move.select(Moves.INSTRUCT); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.INSTRUCT); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase", false); // lucario instructed enemy whirlwind at 0 priority to switch itself out const instructedMove = enemyPokemon.getLastXMoves(-1)[1]; expect(instructedMove.result).toBe(MoveResult.SUCCESS); - expect(instructedMove.move).toBe(Moves.WHIRLWIND); - expect(game.scene.getPlayerPokemon()?.species.speciesId).toBe(Species.BANETTE); + expect(instructedMove.move).toBe(MoveId.WHIRLWIND); + expect(game.scene.getPlayerPokemon()?.species.speciesId).toBe(SpeciesId.BANETTE); }); it("should respect moves' original priority for psychic terrain", async () => { game.override .battleStyle("double") - .moveset([Moves.QUICK_ATTACK, Moves.SPLASH, Moves.INSTRUCT]) - .enemyMoveset([Moves.SPLASH, Moves.PSYCHIC_TERRAIN]); - await game.classicMode.startBattle([Species.BANETTE, Species.KLEFKI]); + .moveset([MoveId.QUICK_ATTACK, MoveId.SPLASH, MoveId.INSTRUCT]) + .enemyMoveset([MoveId.SPLASH, MoveId.PSYCHIC_TERRAIN]); + await game.classicMode.startBattle([SpeciesId.BANETTE, SpeciesId.KLEFKI]); - game.move.select(Moves.QUICK_ATTACK, BattlerIndex.PLAYER, BattlerIndex.ENEMY); // succeeds due to terrain no - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.PSYCHIC_TERRAIN); + game.move.select(MoveId.QUICK_ATTACK, BattlerIndex.PLAYER, BattlerIndex.ENEMY); // succeeds due to terrain no + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.PSYCHIC_TERRAIN); await game.toNextTurn(); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER); - game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("TurnEndPhase", false); // quick attack failed when instructed const banette = game.scene.getPlayerPokemon()!; - expect(banette.getLastXMoves(-1)[1].move).toBe(Moves.QUICK_ATTACK); + expect(banette.getLastXMoves(-1)[1].move).toBe(MoveId.QUICK_ATTACK); expect(banette.getLastXMoves(-1)[1].result).toBe(MoveResult.FAIL); }); it("should still work w/ prankster in psychic terrain", async () => { - game.override.battleStyle("double").enemyMoveset([Moves.SPLASH, Moves.PSYCHIC_TERRAIN]); - await game.classicMode.startBattle([Species.BANETTE, Species.KLEFKI]); + game.override.battleStyle("double").enemyMoveset([MoveId.SPLASH, MoveId.PSYCHIC_TERRAIN]); + await game.classicMode.startBattle([SpeciesId.BANETTE, SpeciesId.KLEFKI]); const [banette, klefki] = game.scene.getPlayerField()!; - game.move.changeMoveset(banette, [Moves.VINE_WHIP, Moves.SPLASH]); - game.move.changeMoveset(klefki, [Moves.INSTRUCT, Moves.SPLASH]); + game.move.changeMoveset(banette, [MoveId.VINE_WHIP, MoveId.SPLASH]); + game.move.changeMoveset(klefki, [MoveId.INSTRUCT, MoveId.SPLASH]); - game.move.select(Moves.VINE_WHIP, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.PSYCHIC_TERRAIN); + game.move.select(MoveId.VINE_WHIP, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.PSYCHIC_TERRAIN); await game.toNextTurn(); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER); - game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); // copies vine whip + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); // copies vine whip await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("TurnEndPhase", false); - expect(banette.getLastXMoves(-1)[1].move).toBe(Moves.VINE_WHIP); - expect(banette.getLastXMoves(-1)[2].move).toBe(Moves.VINE_WHIP); - expect(banette.getMoveset().find(m => m?.moveId === Moves.VINE_WHIP)?.ppUsed).toBe(2); + expect(banette.getLastXMoves(-1)[1].move).toBe(MoveId.VINE_WHIP); + expect(banette.getLastXMoves(-1)[2].move).toBe(MoveId.VINE_WHIP); + expect(banette.getMoveset().find(m => m?.moveId === MoveId.VINE_WHIP)?.ppUsed).toBe(2); }); it("should cause spread moves to correctly hit targets in doubles after singles", async () => { game.override .battleStyle("even-doubles") - .moveset([Moves.BREAKING_SWIPE, Moves.INSTRUCT, Moves.SPLASH]) - .enemyMoveset(Moves.SONIC_BOOM) - .enemySpecies(Species.AXEW) + .moveset([MoveId.BREAKING_SWIPE, MoveId.INSTRUCT, MoveId.SPLASH]) + .enemyMoveset(MoveId.SONIC_BOOM) + .enemySpecies(SpeciesId.AXEW) .startingLevel(500); - await game.classicMode.startBattle([Species.KORAIDON, Species.KLEFKI]); + await game.classicMode.startBattle([SpeciesId.KORAIDON, SpeciesId.KLEFKI]); const koraidon = game.scene.getPlayerField()[0]!; - game.move.select(Moves.BREAKING_SWIPE); + game.move.select(MoveId.BREAKING_SWIPE); await game.phaseInterceptor.to("TurnEndPhase", false); expect(koraidon.getInverseHp()).toBe(0); expect(koraidon.getLastXMoves(-1)[0].targets).toEqual([BattlerIndex.ENEMY]); await game.toNextWave(); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER); - game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("TurnEndPhase", false); // did not take damage since enemies died beforehand; @@ -445,23 +445,23 @@ describe("Moves - Instruct", () => { it("should cause AoE moves to correctly hit everyone in doubles after singles", async () => { game.override .battleStyle("even-doubles") - .moveset([Moves.BRUTAL_SWING, Moves.INSTRUCT, Moves.SPLASH]) - .enemySpecies(Species.AXEW) - .enemyMoveset(Moves.SONIC_BOOM) + .moveset([MoveId.BRUTAL_SWING, MoveId.INSTRUCT, MoveId.SPLASH]) + .enemySpecies(SpeciesId.AXEW) + .enemyMoveset(MoveId.SONIC_BOOM) .startingLevel(500); - await game.classicMode.startBattle([Species.KORAIDON, Species.KLEFKI]); + await game.classicMode.startBattle([SpeciesId.KORAIDON, SpeciesId.KLEFKI]); const koraidon = game.scene.getPlayerField()[0]!; - game.move.select(Moves.BRUTAL_SWING); + game.move.select(MoveId.BRUTAL_SWING); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("TurnEndPhase", false); expect(koraidon.getInverseHp()).toBe(0); expect(koraidon.getLastXMoves(-1)[0].targets).toEqual([BattlerIndex.ENEMY]); await game.toNextWave(); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER); - game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("TurnEndPhase", false); // did not take damage since enemies died beforehand; @@ -476,24 +476,24 @@ describe("Moves - Instruct", () => { it("should cause multi-hit moves to hit the appropriate number of times in singles", async () => { game.override - .enemyAbility(Abilities.SKILL_LINK) - .moveset([Moves.SPLASH, Moves.INSTRUCT]) - .enemyMoveset(Moves.BULLET_SEED); - await game.classicMode.startBattle([Species.BULBASAUR]); + .enemyAbility(AbilityId.SKILL_LINK) + .moveset([MoveId.SPLASH, MoveId.INSTRUCT]) + .enemyMoveset(MoveId.BULLET_SEED); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const bulbasaur = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); - game.move.select(Moves.INSTRUCT); + game.move.select(MoveId.INSTRUCT); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase"); expect(bulbasaur.turnData.attacksReceived.length).toBe(10); await game.toNextTurn(); - game.move.select(Moves.INSTRUCT); + game.move.select(MoveId.INSTRUCT); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); @@ -503,34 +503,34 @@ describe("Moves - Instruct", () => { it("should cause multi-hit moves to hit the appropriate number of times in doubles", async () => { game.override .battleStyle("double") - .enemyAbility(Abilities.SKILL_LINK) - .moveset([Moves.SPLASH, Moves.INSTRUCT]) - .enemyMoveset([Moves.BULLET_SEED, Moves.SPLASH]) + .enemyAbility(AbilityId.SKILL_LINK) + .moveset([MoveId.SPLASH, MoveId.INSTRUCT]) + .enemyMoveset([MoveId.BULLET_SEED, MoveId.SPLASH]) .enemyLevel(5); - await game.classicMode.startBattle([Species.BULBASAUR, Species.IVYSAUR]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.IVYSAUR]); const [, ivysaur] = game.scene.getPlayerField(); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.BULLET_SEED, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.BULLET_SEED, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); - game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); - await game.move.selectEnemyMove(Moves.BULLET_SEED, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); + await game.move.selectEnemyMove(MoveId.BULLET_SEED, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("BerryPhase"); expect(ivysaur.turnData.attacksReceived.length).toBe(15); await game.toNextTurn(); - game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); - await game.move.selectEnemyMove(Moves.BULLET_SEED, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); + await game.move.selectEnemyMove(MoveId.BULLET_SEED, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2]); await game.phaseInterceptor.to("BerryPhase"); diff --git a/test/moves/jaw_lock.test.ts b/test/moves/jaw_lock.test.ts index 85750b6efda..6084a47ad99 100644 --- a/test/moves/jaw_lock.test.ts +++ b/test/moves/jaw_lock.test.ts @@ -1,13 +1,13 @@ import { BattlerIndex } from "#app/battle"; -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { BerryPhase } from "#app/phases/berry-phase"; import { FaintPhase } from "#app/phases/faint-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import GameManager from "#test/testUtils/gameManager"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -30,22 +30,22 @@ describe("Moves - Jaw Lock", () => { game.override .battleStyle("single") - .enemySpecies(Species.SNORLAX) - .enemyAbility(Abilities.INSOMNIA) - .enemyMoveset(Moves.SPLASH) - .moveset([Moves.JAW_LOCK, Moves.SPLASH]) + .enemySpecies(SpeciesId.SNORLAX) + .enemyAbility(AbilityId.INSOMNIA) + .enemyMoveset(MoveId.SPLASH) + .moveset([MoveId.JAW_LOCK, MoveId.SPLASH]) .startingLevel(100) .enemyLevel(100) .disableCrits(); }); it("should trap the move's user and target", async () => { - await game.classicMode.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.JAW_LOCK); + game.move.select(MoveId.JAW_LOCK); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase, false); @@ -61,12 +61,12 @@ describe("Moves - Jaw Lock", () => { it("should not trap either pokemon if the target faints", async () => { game.override.enemyLevel(1); - await game.classicMode.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.JAW_LOCK); + game.move.select(MoveId.JAW_LOCK); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase, false); @@ -86,12 +86,12 @@ describe("Moves - Jaw Lock", () => { }); it("should only trap the user until the target faints", async () => { - await game.classicMode.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.JAW_LOCK); + game.move.select(MoveId.JAW_LOCK); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -109,13 +109,13 @@ describe("Moves - Jaw Lock", () => { it("should not trap other targets after the first target is trapped", async () => { game.override.battleStyle("double"); - await game.classicMode.startBattle([Species.CHARMANDER, Species.BULBASAUR]); + await game.classicMode.startBattle([SpeciesId.CHARMANDER, SpeciesId.BULBASAUR]); const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.JAW_LOCK, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.JAW_LOCK, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -125,8 +125,8 @@ describe("Moves - Jaw Lock", () => { await game.toNextTurn(); - game.move.select(Moves.JAW_LOCK, 0, BattlerIndex.ENEMY_2); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.JAW_LOCK, 0, BattlerIndex.ENEMY_2); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(MoveEffectPhase); @@ -136,14 +136,14 @@ describe("Moves - Jaw Lock", () => { }); it("should not trap either pokemon if the target is protected", async () => { - game.override.enemyMoveset([Moves.PROTECT]); + game.override.enemyMoveset([MoveId.PROTECT]); - await game.classicMode.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.JAW_LOCK); + game.move.select(MoveId.JAW_LOCK); await game.phaseInterceptor.to(BerryPhase, false); diff --git a/test/moves/lash_out.test.ts b/test/moves/lash_out.test.ts index e45df4fc998..a63ab2a467c 100644 --- a/test/moves/lash_out.test.ts +++ b/test/moves/lash_out.test.ts @@ -1,8 +1,8 @@ import { BattlerIndex } from "#app/battle"; import { allMoves } from "#app/data/data-lists"; -import { Abilities } from "#app/enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -26,24 +26,24 @@ describe("Moves - Lash Out", () => { game.override .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.FUR_COAT) - .enemyMoveset([Moves.GROWL]) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.FUR_COAT) + .enemyMoveset([MoveId.GROWL]) .startingLevel(10) .enemyLevel(10) - .starterSpecies(Species.FEEBAS) - .ability(Abilities.BALL_FETCH) - .moveset([Moves.LASH_OUT]); + .starterSpecies(SpeciesId.FEEBAS) + .ability(AbilityId.BALL_FETCH) + .moveset([MoveId.LASH_OUT]); }); it("should deal double damage if the user's stat stages were lowered this turn", async () => { - vi.spyOn(allMoves[Moves.LASH_OUT], "calculateBattlePower"); + vi.spyOn(allMoves[MoveId.LASH_OUT], "calculateBattlePower"); await game.classicMode.startBattle(); - game.move.select(Moves.LASH_OUT); + game.move.select(MoveId.LASH_OUT); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); - expect(allMoves[Moves.LASH_OUT].calculateBattlePower).toHaveReturnedWith(150); + expect(allMoves[MoveId.LASH_OUT].calculateBattlePower).toHaveReturnedWith(150); }); }); diff --git a/test/moves/last-resort.test.ts b/test/moves/last-resort.test.ts index 65b50bc4e89..0e6c1a6ba15 100644 --- a/test/moves/last-resort.test.ts +++ b/test/moves/last-resort.test.ts @@ -1,8 +1,8 @@ import { BattlerIndex } from "#app/battle"; import { MoveResult } from "#app/field/pokemon"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -14,7 +14,7 @@ describe("Moves - Last Resort", () => { function expectLastResortFail() { expect(game.scene.getPlayerPokemon()?.getLastXMoves()[0]).toEqual( expect.objectContaining({ - move: Moves.LAST_RESORT, + move: MoveId.LAST_RESORT, result: MoveResult.FAIL, }), ); @@ -32,45 +32,45 @@ describe("Moves - Last Resort", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .ability(Abilities.BALL_FETCH) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should fail unless all other moves (excluding itself) has been used at least once", async () => { - game.override.moveset([Moves.LAST_RESORT, Moves.SPLASH, Moves.GROWL, Moves.GROWTH]); - await game.classicMode.startBattle([Species.BLISSEY]); + game.override.moveset([MoveId.LAST_RESORT, MoveId.SPLASH, MoveId.GROWL, MoveId.GROWTH]); + await game.classicMode.startBattle([SpeciesId.BLISSEY]); const blissey = game.scene.getPlayerPokemon()!; expect(blissey).toBeDefined(); // Last resort by itself - game.move.select(Moves.LAST_RESORT); + game.move.select(MoveId.LAST_RESORT); await game.phaseInterceptor.to("TurnEndPhase"); expectLastResortFail(); // Splash (1/3) - blissey.pushMoveHistory({ move: Moves.SPLASH, targets: [BattlerIndex.PLAYER] }); - game.move.select(Moves.LAST_RESORT); + blissey.pushMoveHistory({ move: MoveId.SPLASH, targets: [BattlerIndex.PLAYER] }); + game.move.select(MoveId.LAST_RESORT); await game.phaseInterceptor.to("TurnEndPhase"); expectLastResortFail(); // Growl (2/3) - blissey.pushMoveHistory({ move: Moves.GROWL, targets: [BattlerIndex.ENEMY] }); - game.move.select(Moves.LAST_RESORT); + blissey.pushMoveHistory({ move: MoveId.GROWL, targets: [BattlerIndex.ENEMY] }); + game.move.select(MoveId.LAST_RESORT); await game.phaseInterceptor.to("TurnEndPhase"); expectLastResortFail(); // Were last resort itself counted, it would error here // Growth (3/3) - blissey.pushMoveHistory({ move: Moves.GROWTH, targets: [BattlerIndex.PLAYER] }); - game.move.select(Moves.LAST_RESORT); + blissey.pushMoveHistory({ move: MoveId.GROWTH, targets: [BattlerIndex.PLAYER] }); + game.move.select(MoveId.LAST_RESORT); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.getPlayerPokemon()?.getLastXMoves()[0]).toEqual( expect.objectContaining({ - move: Moves.LAST_RESORT, + move: MoveId.LAST_RESORT, result: MoveResult.SUCCESS, }), ); @@ -78,59 +78,59 @@ describe("Moves - Last Resort", () => { it("should disregard virtually invoked moves", async () => { game.override - .moveset([Moves.LAST_RESORT, Moves.SWORDS_DANCE, Moves.ABSORB, Moves.MIRROR_MOVE]) - .enemyMoveset([Moves.SWORDS_DANCE, Moves.ABSORB]) - .ability(Abilities.DANCER) - .enemySpecies(Species.ABOMASNOW); // magikarp has 50% chance to be okho'd on absorb crit - await game.classicMode.startBattle([Species.BLISSEY]); + .moveset([MoveId.LAST_RESORT, MoveId.SWORDS_DANCE, MoveId.ABSORB, MoveId.MIRROR_MOVE]) + .enemyMoveset([MoveId.SWORDS_DANCE, MoveId.ABSORB]) + .ability(AbilityId.DANCER) + .enemySpecies(SpeciesId.ABOMASNOW); // magikarp has 50% chance to be okho'd on absorb crit + await game.classicMode.startBattle([SpeciesId.BLISSEY]); // use mirror move normally to trigger absorb virtually - game.move.select(Moves.MIRROR_MOVE); - await game.move.selectEnemyMove(Moves.ABSORB); + game.move.select(MoveId.MIRROR_MOVE); + await game.move.selectEnemyMove(MoveId.ABSORB); await game.toNextTurn(); - game.move.select(Moves.LAST_RESORT); - await game.move.selectEnemyMove(Moves.SWORDS_DANCE); // goes first to proc dancer ahead of time + game.move.select(MoveId.LAST_RESORT); + await game.move.selectEnemyMove(MoveId.SWORDS_DANCE); // goes first to proc dancer ahead of time await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); expectLastResortFail(); }); it("should fail if no other moves in moveset", async () => { - game.override.moveset(Moves.LAST_RESORT); - await game.classicMode.startBattle([Species.BLISSEY]); + game.override.moveset(MoveId.LAST_RESORT); + await game.classicMode.startBattle([SpeciesId.BLISSEY]); - game.move.select(Moves.LAST_RESORT); + game.move.select(MoveId.LAST_RESORT); await game.phaseInterceptor.to("TurnEndPhase"); expectLastResortFail(); }); it("should work if invoked virtually when all other moves have been used", async () => { - game.override.moveset([Moves.LAST_RESORT, Moves.SLEEP_TALK]).ability(Abilities.COMATOSE); - await game.classicMode.startBattle([Species.KOMALA]); + game.override.moveset([MoveId.LAST_RESORT, MoveId.SLEEP_TALK]).ability(AbilityId.COMATOSE); + await game.classicMode.startBattle([SpeciesId.KOMALA]); - game.move.select(Moves.SLEEP_TALK); + game.move.select(MoveId.SLEEP_TALK); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.getPlayerPokemon()?.getLastXMoves(-1)).toEqual([ expect.objectContaining({ - move: Moves.LAST_RESORT, + move: MoveId.LAST_RESORT, result: MoveResult.SUCCESS, virtual: true, }), expect.objectContaining({ - move: Moves.SLEEP_TALK, + move: MoveId.SLEEP_TALK, result: MoveResult.SUCCESS, }), ]); }); it("should preserve usability status on reload", async () => { - game.override.moveset([Moves.LAST_RESORT, Moves.SPLASH]).ability(Abilities.COMATOSE); - await game.classicMode.startBattle([Species.BLISSEY]); + game.override.moveset([MoveId.LAST_RESORT, MoveId.SPLASH]).ability(AbilityId.COMATOSE); + await game.classicMode.startBattle([SpeciesId.BLISSEY]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.toNextWave(); @@ -141,7 +141,7 @@ describe("Moves - Last Resort", () => { expect(oldMoveHistory).toEqual(newMoveHistory); // use last resort and it should kill the karp just fine - game.move.select(Moves.LAST_RESORT); + game.move.select(MoveId.LAST_RESORT); game.scene.getEnemyPokemon()!.hp = 1; await game.phaseInterceptor.to("TurnEndPhase"); @@ -149,15 +149,15 @@ describe("Moves - Last Resort", () => { }); it("should fail if used while not in moveset", async () => { - game.override.moveset(Moves.MIRROR_MOVE).enemyMoveset([Moves.ABSORB, Moves.LAST_RESORT]); - await game.classicMode.startBattle([Species.BLISSEY]); + game.override.moveset(MoveId.MIRROR_MOVE).enemyMoveset([MoveId.ABSORB, MoveId.LAST_RESORT]); + await game.classicMode.startBattle([SpeciesId.BLISSEY]); // ensure enemy last resort succeeds - game.move.select(Moves.MIRROR_MOVE); - await game.move.selectEnemyMove(Moves.ABSORB); + game.move.select(MoveId.MIRROR_MOVE); + await game.move.selectEnemyMove(MoveId.ABSORB); await game.phaseInterceptor.to("TurnEndPhase"); - game.move.select(Moves.MIRROR_MOVE); - await game.move.selectEnemyMove(Moves.LAST_RESORT); + game.move.select(MoveId.MIRROR_MOVE); + await game.move.selectEnemyMove(MoveId.LAST_RESORT); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); diff --git a/test/moves/last_respects.test.ts b/test/moves/last_respects.test.ts index e271a5dec62..96a8b5955d0 100644 --- a/test/moves/last_respects.test.ts +++ b/test/moves/last_respects.test.ts @@ -1,7 +1,7 @@ -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { BattlerIndex } from "#app/battle"; -import { Species } from "#enums/species"; -import { Abilities } from "#enums/abilities"; +import { SpeciesId } from "#enums/species-id"; +import { AbilityId } from "#enums/ability-id"; import GameManager from "#test/testUtils/gameManager"; import { allMoves } from "#app/data/data-lists"; import type Move from "#app/data/moves/move"; @@ -28,16 +28,16 @@ describe("Moves - Last Respects", () => { beforeEach(() => { game = new GameManager(phaserGame); - move = allMoves[Moves.LAST_RESPECTS]; + move = allMoves[MoveId.LAST_RESPECTS]; basePower = move.power; game.override .battleStyle("single") .disableCrits() - .moveset([Moves.LAST_RESPECTS, Moves.EXPLOSION, Moves.LUNAR_DANCE]) - .ability(Abilities.BALL_FETCH) - .enemyAbility(Abilities.BALL_FETCH) - .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.SPLASH) + .moveset([MoveId.LAST_RESPECTS, MoveId.EXPLOSION, MoveId.LUNAR_DANCE]) + .ability(AbilityId.BALL_FETCH) + .enemyAbility(AbilityId.BALL_FETCH) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyMoveset(MoveId.SPLASH) .startingLevel(1) .enemyLevel(100); @@ -45,12 +45,12 @@ describe("Moves - Last Respects", () => { }); it("should have 150 power if 2 allies faint before using move", async () => { - await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER, SpeciesId.SQUIRTLE]); /** * Bulbasur faints once */ - game.move.select(Moves.EXPLOSION); + game.move.select(MoveId.EXPLOSION); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -58,12 +58,12 @@ describe("Moves - Last Respects", () => { /** * Charmander faints once */ - game.move.select(Moves.EXPLOSION); + game.move.select(MoveId.EXPLOSION); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); game.doSelectPartyPokemon(2); await game.toNextTurn(); - game.move.select(Moves.LAST_RESPECTS); + game.move.select(MoveId.LAST_RESPECTS); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -71,12 +71,12 @@ describe("Moves - Last Respects", () => { }); it("should have 200 power if an ally fainted twice and another one once", async () => { - await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER, SpeciesId.SQUIRTLE]); /** * Bulbasur faints once */ - game.move.select(Moves.EXPLOSION); + game.move.select(MoveId.EXPLOSION); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -85,7 +85,7 @@ describe("Moves - Last Respects", () => { * Charmander faints once */ game.doRevivePokemon(1); - game.move.select(Moves.EXPLOSION); + game.move.select(MoveId.EXPLOSION); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -93,12 +93,12 @@ describe("Moves - Last Respects", () => { /** * Bulbasur faints twice */ - game.move.select(Moves.EXPLOSION); + game.move.select(MoveId.EXPLOSION); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); game.doSelectPartyPokemon(2); await game.toNextTurn(); - game.move.select(Moves.LAST_RESPECTS); + game.move.select(MoveId.LAST_RESPECTS); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -107,18 +107,18 @@ describe("Moves - Last Respects", () => { it("should maintain its power for the player during the next battle if it is within the same arena encounter", async () => { game.override - .enemySpecies(Species.MAGIKARP) + .enemySpecies(SpeciesId.MAGIKARP) .startingWave(1) .enemyLevel(1) .startingLevel(100) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); - await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER, SpeciesId.SQUIRTLE]); /** * The first Pokemon faints and another Pokemon in the party is selected. */ - game.move.select(Moves.LUNAR_DANCE); + game.move.select(MoveId.LUNAR_DANCE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -126,12 +126,12 @@ describe("Moves - Last Respects", () => { /** * Enemy Pokemon faints and new wave is entered. */ - game.move.select(Moves.LAST_RESPECTS); + game.move.select(MoveId.LAST_RESPECTS); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextWave(); expect(game.scene.arena.playerFaints).toBe(1); - game.move.select(Moves.LAST_RESPECTS); + game.move.select(MoveId.LAST_RESPECTS); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); expect(move.calculateBattlePower).toHaveLastReturnedWith(basePower + 1 * 50); @@ -139,19 +139,19 @@ describe("Moves - Last Respects", () => { it("should reset enemyFaints count on progressing to the next wave.", async () => { game.override - .enemySpecies(Species.MAGIKARP) + .enemySpecies(SpeciesId.MAGIKARP) .startingWave(1) .enemyLevel(1) .startingLevel(100) - .enemyMoveset(Moves.LAST_RESPECTS) - .moveset([Moves.LUNAR_DANCE, Moves.LAST_RESPECTS, Moves.SPLASH]); + .enemyMoveset(MoveId.LAST_RESPECTS) + .moveset([MoveId.LUNAR_DANCE, MoveId.LAST_RESPECTS, MoveId.SPLASH]); - await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER, SpeciesId.SQUIRTLE]); /** * The first Pokemon faints and another Pokemon in the party is selected. */ - game.move.select(Moves.LUNAR_DANCE); + game.move.select(MoveId.LUNAR_DANCE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -159,12 +159,12 @@ describe("Moves - Last Respects", () => { /** * Enemy Pokemon faints and new wave is entered. */ - game.move.select(Moves.LAST_RESPECTS); + game.move.select(MoveId.LAST_RESPECTS); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextWave(); expect(game.scene.currentBattle.enemyFaints).toBe(0); - game.move.select(Moves.LAST_RESPECTS); + game.move.select(MoveId.LAST_RESPECTS); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -176,20 +176,20 @@ describe("Moves - Last Respects", () => { }); it("should reset playerFaints count if we enter new trainer battle", async () => { - game.override.enemySpecies(Species.MAGIKARP).startingWave(4).enemyLevel(1).startingLevel(100); + game.override.enemySpecies(SpeciesId.MAGIKARP).startingWave(4).enemyLevel(1).startingLevel(100); - await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER, SpeciesId.SQUIRTLE]); - game.move.select(Moves.LUNAR_DANCE); + game.move.select(MoveId.LUNAR_DANCE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); game.doSelectPartyPokemon(1); await game.toNextTurn(); - game.move.select(Moves.LAST_RESPECTS); + game.move.select(MoveId.LAST_RESPECTS); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextWave(); - game.move.select(Moves.LAST_RESPECTS); + game.move.select(MoveId.LAST_RESPECTS); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase", false); @@ -197,20 +197,20 @@ describe("Moves - Last Respects", () => { }); it("should reset playerFaints count if we enter new biome", async () => { - game.override.enemySpecies(Species.MAGIKARP).startingWave(10).enemyLevel(1).startingLevel(100); + game.override.enemySpecies(SpeciesId.MAGIKARP).startingWave(10).enemyLevel(1).startingLevel(100); - await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER, SpeciesId.SQUIRTLE]); - game.move.select(Moves.LUNAR_DANCE); + game.move.select(MoveId.LUNAR_DANCE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); game.doSelectPartyPokemon(1); await game.toNextTurn(); - game.move.select(Moves.LAST_RESPECTS); + game.move.select(MoveId.LAST_RESPECTS); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextWave(); - game.move.select(Moves.LAST_RESPECTS); + game.move.select(MoveId.LAST_RESPECTS); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase", false); diff --git a/test/moves/light_screen.test.ts b/test/moves/light_screen.test.ts index 6ce51da68cd..4230790e688 100644 --- a/test/moves/light_screen.test.ts +++ b/test/moves/light_screen.test.ts @@ -3,13 +3,13 @@ import { ArenaTagSide } from "#app/data/arena-tag"; import type Move from "#app/data/moves/move"; import { CritOnlyAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import type Pokemon from "#app/field/pokemon"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { NumberHolder } from "#app/utils/common"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -37,17 +37,17 @@ describe("Moves - Light Screen", () => { globalScene = game.scene; game.override .battleStyle("single") - .ability(Abilities.BALL_FETCH) - .moveset([Moves.ABSORB, Moves.DAZZLING_GLEAM, Moves.TACKLE]) + .ability(AbilityId.BALL_FETCH) + .moveset([MoveId.ABSORB, MoveId.DAZZLING_GLEAM, MoveId.TACKLE]) .enemyLevel(100) - .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.LIGHT_SCREEN) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyMoveset(MoveId.LIGHT_SCREEN) .disableCrits(); }); it("reduces damage of special attacks by half in a single battle", async () => { - const moveToUse = Moves.ABSORB; - await game.classicMode.startBattle([Species.SHUCKLE]); + const moveToUse = MoveId.ABSORB; + await game.classicMode.startBattle([SpeciesId.SHUCKLE]); game.move.select(moveToUse); @@ -65,8 +65,8 @@ describe("Moves - Light Screen", () => { it("reduces damage of special attacks by a third in a double battle", async () => { game.override.battleStyle("double"); - const moveToUse = Moves.DAZZLING_GLEAM; - await game.classicMode.startBattle([Species.SHUCKLE, Species.SHUCKLE]); + const moveToUse = MoveId.DAZZLING_GLEAM; + await game.classicMode.startBattle([SpeciesId.SHUCKLE, SpeciesId.SHUCKLE]); game.move.select(moveToUse); game.move.select(moveToUse, 1); @@ -82,8 +82,8 @@ describe("Moves - Light Screen", () => { }); it("does not affect physical attacks", async () => { - const moveToUse = Moves.TACKLE; - await game.classicMode.startBattle([Species.SHUCKLE]); + const moveToUse = MoveId.TACKLE; + await game.classicMode.startBattle([SpeciesId.SHUCKLE]); game.move.select(moveToUse); @@ -98,10 +98,10 @@ describe("Moves - Light Screen", () => { }); it("does not affect critical hits", async () => { - game.override.moveset([Moves.FROST_BREATH]); - const moveToUse = Moves.FROST_BREATH; - vi.spyOn(allMoves[Moves.FROST_BREATH], "accuracy", "get").mockReturnValue(100); - await game.classicMode.startBattle([Species.SHUCKLE]); + game.override.moveset([MoveId.FROST_BREATH]); + const moveToUse = MoveId.FROST_BREATH; + vi.spyOn(allMoves[MoveId.FROST_BREATH], "accuracy", "get").mockReturnValue(100); + await game.classicMode.startBattle([SpeciesId.SHUCKLE]); game.move.select(moveToUse); await game.phaseInterceptor.to(TurnEndPhase); @@ -116,7 +116,7 @@ describe("Moves - Light Screen", () => { }); /** - * Calculates the damage of a move multiplied by screen's multiplier, Light Screen in this case {@linkcode Moves.LIGHT_SCREEN}. + * Calculates the damage of a move multiplied by screen's multiplier, Light Screen in this case {@linkcode MoveId.LIGHT_SCREEN}. * Please note this does not consider other damage calculations except the screen multiplier. * * @param defender - The defending Pokémon. diff --git a/test/moves/lucky_chant.test.ts b/test/moves/lucky_chant.test.ts index 9fa6ff43eab..58944027398 100644 --- a/test/moves/lucky_chant.test.ts +++ b/test/moves/lucky_chant.test.ts @@ -1,7 +1,7 @@ -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#app/enums/battler-tag-type"; -import { Moves } from "#app/enums/moves"; -import { Species } from "#app/enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { BerryPhase } from "#app/phases/berry-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -26,26 +26,26 @@ describe("Moves - Lucky Chant", () => { game.override .battleStyle("single") - .moveset([Moves.LUCKY_CHANT, Moves.SPLASH, Moves.FOLLOW_ME]) - .enemySpecies(Species.SNORLAX) - .enemyAbility(Abilities.INSOMNIA) - .enemyMoveset([Moves.FLOWER_TRICK]) + .moveset([MoveId.LUCKY_CHANT, MoveId.SPLASH, MoveId.FOLLOW_ME]) + .enemySpecies(SpeciesId.SNORLAX) + .enemyAbility(AbilityId.INSOMNIA) + .enemyMoveset([MoveId.FLOWER_TRICK]) .startingLevel(100) .enemyLevel(100); }); it("should prevent critical hits from moves", async () => { - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); const firstTurnDamage = playerPokemon.getMaxHp() - playerPokemon.hp; - game.move.select(Moves.LUCKY_CHANT); + game.move.select(MoveId.LUCKY_CHANT); await game.phaseInterceptor.to(BerryPhase, false); @@ -56,19 +56,19 @@ describe("Moves - Lucky Chant", () => { it("should prevent critical hits against the user's ally", async () => { game.override.battleStyle("double"); - await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); const playerPokemon = game.scene.getPlayerField(); - game.move.select(Moves.FOLLOW_ME); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.FOLLOW_ME); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(TurnEndPhase); const firstTurnDamage = playerPokemon[0].getMaxHp() - playerPokemon[0].hp; - game.move.select(Moves.FOLLOW_ME); - game.move.select(Moves.LUCKY_CHANT, 1); + game.move.select(MoveId.FOLLOW_ME); + game.move.select(MoveId.LUCKY_CHANT, 1); await game.phaseInterceptor.to(BerryPhase, false); @@ -77,22 +77,22 @@ describe("Moves - Lucky Chant", () => { }); it("should prevent critical hits from field effects", async () => { - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemyMoveset([MoveId.TACKLE]); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - enemyPokemon.addTag(BattlerTagType.ALWAYS_CRIT, 2, Moves.NONE, 0); + enemyPokemon.addTag(BattlerTagType.ALWAYS_CRIT, 2, MoveId.NONE, 0); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); const firstTurnDamage = playerPokemon.getMaxHp() - playerPokemon.hp; - game.move.select(Moves.LUCKY_CHANT); + game.move.select(MoveId.LUCKY_CHANT); await game.phaseInterceptor.to(BerryPhase, false); diff --git a/test/moves/lunar_blessing.test.ts b/test/moves/lunar_blessing.test.ts index 5021a47ff7f..59d0c662859 100644 --- a/test/moves/lunar_blessing.test.ts +++ b/test/moves/lunar_blessing.test.ts @@ -1,8 +1,8 @@ import { StatusEffect } from "#app/enums/status-effect"; import { CommandPhase } from "#app/phases/command-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -24,16 +24,16 @@ describe("Moves - Lunar Blessing", () => { game.override.battleStyle("double"); - game.override.enemySpecies(Species.SHUCKLE); - game.override.enemyMoveset(Moves.SPLASH); - game.override.enemyAbility(Abilities.BALL_FETCH); + game.override.enemySpecies(SpeciesId.SHUCKLE); + game.override.enemyMoveset(MoveId.SPLASH); + game.override.enemyAbility(AbilityId.BALL_FETCH); - game.override.moveset([Moves.LUNAR_BLESSING, Moves.SPLASH]); - game.override.ability(Abilities.BALL_FETCH); + game.override.moveset([MoveId.LUNAR_BLESSING, MoveId.SPLASH]); + game.override.ability(AbilityId.BALL_FETCH); }); it("should restore 25% HP of the user and its ally", async () => { - await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA]); + await game.classicMode.startBattle([SpeciesId.RATTATA, SpeciesId.RATTATA]); const [leftPlayer, rightPlayer] = game.scene.getPlayerField(); vi.spyOn(leftPlayer, "getMaxHp").mockReturnValue(100); @@ -47,9 +47,9 @@ describe("Moves - Lunar Blessing", () => { vi.spyOn(leftPlayer, "heal"); vi.spyOn(rightPlayer, "heal"); - game.move.select(Moves.LUNAR_BLESSING, 0); + game.move.select(MoveId.LUNAR_BLESSING, 0); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(leftPlayer.heal).toHaveBeenCalledOnce(); @@ -61,15 +61,15 @@ describe("Moves - Lunar Blessing", () => { it("should cure status effect of the user and its ally", async () => { game.override.statusEffect(StatusEffect.BURN); - await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA]); + await game.classicMode.startBattle([SpeciesId.RATTATA, SpeciesId.RATTATA]); const [leftPlayer, rightPlayer] = game.scene.getPlayerField(); vi.spyOn(leftPlayer, "resetStatus"); vi.spyOn(rightPlayer, "resetStatus"); - game.move.select(Moves.LUNAR_BLESSING, 0); + game.move.select(MoveId.LUNAR_BLESSING, 0); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(leftPlayer.resetStatus).toHaveBeenCalledOnce(); diff --git a/test/moves/lunar_dance.test.ts b/test/moves/lunar_dance.test.ts index 30abe765291..aea1e31b616 100644 --- a/test/moves/lunar_dance.test.ts +++ b/test/moves/lunar_dance.test.ts @@ -1,8 +1,8 @@ import { StatusEffect } from "#app/enums/status-effect"; import { CommandPhase } from "#app/phases/command-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; @@ -26,20 +26,20 @@ describe("Moves - Lunar Dance", () => { game.override .statusEffect(StatusEffect.BURN) .battleStyle("double") - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should full restore HP, PP and status of switched in pokemon, then fail second use because no remaining backup pokemon in party", async () => { - await game.classicMode.startBattle([Species.BULBASAUR, Species.ODDISH, Species.RATTATA]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.ODDISH, SpeciesId.RATTATA]); const [bulbasaur, oddish, rattata] = game.scene.getPlayerParty(); - game.move.changeMoveset(bulbasaur, [Moves.LUNAR_DANCE, Moves.SPLASH]); - game.move.changeMoveset(oddish, [Moves.LUNAR_DANCE, Moves.SPLASH]); - game.move.changeMoveset(rattata, [Moves.LUNAR_DANCE, Moves.SPLASH]); + game.move.changeMoveset(bulbasaur, [MoveId.LUNAR_DANCE, MoveId.SPLASH]); + game.move.changeMoveset(oddish, [MoveId.LUNAR_DANCE, MoveId.SPLASH]); + game.move.changeMoveset(rattata, [MoveId.LUNAR_DANCE, MoveId.SPLASH]); - game.move.select(Moves.SPLASH, 0); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 0); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(CommandPhase); await game.toNextTurn(); @@ -50,12 +50,12 @@ describe("Moves - Lunar Dance", () => { // Switch out Bulbasaur for Rattata so we can swtich bulbasaur back in with lunar dance game.doSwitchPokemon(2); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(CommandPhase); await game.toNextTurn(); - game.move.select(Moves.SPLASH, 0); - game.move.select(Moves.LUNAR_DANCE); + game.move.select(MoveId.SPLASH, 0); + game.move.select(MoveId.LUNAR_DANCE); game.doSelectPartyPokemon(2); await game.phaseInterceptor.to("SwitchPhase", false); await game.toNextTurn(); @@ -65,8 +65,8 @@ describe("Moves - Lunar Dance", () => { expect(bulbasaur.moveset[1]?.ppUsed).toBe(0); expect(bulbasaur.isFullHp()).toBe(true); - game.move.select(Moves.SPLASH, 0); - game.move.select(Moves.LUNAR_DANCE); + game.move.select(MoveId.SPLASH, 0); + game.move.select(MoveId.LUNAR_DANCE); await game.phaseInterceptor.to(CommandPhase); await game.toNextTurn(); diff --git a/test/moves/magic_coat.test.ts b/test/moves/magic_coat.test.ts index ad0bd47d7cf..4f9e3977305 100644 --- a/test/moves/magic_coat.test.ts +++ b/test/moves/magic_coat.test.ts @@ -6,9 +6,9 @@ import { BattlerTagType } from "#app/enums/battler-tag-type"; import { Stat } from "#app/enums/stat"; import { StatusEffect } from "#app/enums/status-effect"; import { MoveResult } from "#app/field/pokemon"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -29,65 +29,65 @@ describe("Moves - Magic Coat", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .ability(Abilities.BALL_FETCH) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.MAGIC_COAT); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.MAGIC_COAT); }); it("should fail if the user goes last in the turn", async () => { - game.override.moveset([Moves.PROTECT]); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.moveset([MoveId.PROTECT]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(Moves.PROTECT); + game.move.select(MoveId.PROTECT); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); it("should fail if called again in the same turn due to moves like instruct", async () => { - game.override.moveset([Moves.INSTRUCT]); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.moveset([MoveId.INSTRUCT]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(Moves.INSTRUCT); + game.move.select(MoveId.INSTRUCT); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); it("should not reflect moves used on the next turn", async () => { - game.override.moveset([Moves.GROWL, Moves.SPLASH]); - game.override.enemyMoveset([Moves.MAGIC_COAT, Moves.SPLASH]); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.moveset([MoveId.GROWL, MoveId.SPLASH]); + game.override.enemyMoveset([MoveId.MAGIC_COAT, MoveId.SPLASH]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); // turn 1 - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.MAGIC_COAT); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.MAGIC_COAT); await game.toNextTurn(); // turn 2 - game.move.select(Moves.GROWL); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.GROWL); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-1); }); it("should reflect basic status moves", async () => { - game.override.moveset([Moves.GROWL]); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.moveset([MoveId.GROWL]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); }); it("should individually bounce back multi-target moves when used by both targets in doubles", async () => { game.override.battleStyle("double"); - game.override.moveset([Moves.GROWL, Moves.SPLASH]); - await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); + game.override.moveset([MoveId.GROWL, MoveId.SPLASH]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]); - game.move.select(Moves.GROWL, 0); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.GROWL, 0); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); const user = game.scene.getPlayerField()[0]; @@ -96,25 +96,25 @@ describe("Moves - Magic Coat", () => { it("should bounce back a spread status move against both pokemon", async () => { game.override.battleStyle("double"); - game.override.moveset([Moves.GROWL, Moves.SPLASH]); - game.override.enemyMoveset([Moves.SPLASH, Moves.MAGIC_COAT]); - await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); + game.override.moveset([MoveId.GROWL, MoveId.SPLASH]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.MAGIC_COAT]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]); - game.move.select(Moves.GROWL, 0); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.MAGIC_COAT); + game.move.select(MoveId.GROWL, 0); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.MAGIC_COAT); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerField().every(p => p.getStatStage(Stat.ATK) === -1)).toBeTruthy(); }); it("should still bounce back a move that would otherwise fail", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); game.scene.getEnemyPokemon()?.setStatStage(Stat.ATK, -6); - game.override.moveset([Moves.GROWL]); + game.override.moveset([MoveId.GROWL]); - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); @@ -122,15 +122,15 @@ describe("Moves - Magic Coat", () => { it("should not bounce back a move that was just bounced", async () => { game.override.battleStyle("double"); - game.override.ability(Abilities.MAGIC_BOUNCE); - game.override.moveset([Moves.GROWL, Moves.MAGIC_COAT]); - game.override.enemyMoveset([Moves.SPLASH, Moves.MAGIC_COAT]); - await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); + game.override.ability(AbilityId.MAGIC_BOUNCE); + game.override.moveset([MoveId.GROWL, MoveId.MAGIC_COAT]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.MAGIC_COAT]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]); - game.move.select(Moves.MAGIC_COAT, 0); - game.move.select(Moves.GROWL, 1); - await game.move.selectEnemyMove(Moves.MAGIC_COAT); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.MAGIC_COAT, 0); + game.move.select(MoveId.GROWL, 1); + await game.move.selectEnemyMove(MoveId.MAGIC_COAT); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyField()[0].getStatStage(Stat.ATK)).toBe(0); @@ -138,20 +138,20 @@ describe("Moves - Magic Coat", () => { // todo while Mirror Armor is not implemented it.todo("should receive the stat change after reflecting a move back to a mirror armor user", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-1); }); it("should still bounce back a move from a mold breaker user", async () => { - game.override.ability(Abilities.MOLD_BREAKER); - game.override.moveset([Moves.GROWL]); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.ability(AbilityId.MOLD_BREAKER); + game.override.moveset([MoveId.GROWL]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(0); @@ -160,10 +160,10 @@ describe("Moves - Magic Coat", () => { it("should only bounce spikes back once when both targets use magic coat in doubles", async () => { game.override.battleStyle("double"); - await game.classicMode.startBattle([Species.MAGIKARP]); - game.override.moveset([Moves.SPIKES]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); + game.override.moveset([MoveId.SPIKES]); - game.move.select(Moves.SPIKES); + game.move.select(MoveId.SPIKES); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.PLAYER)!["layers"]).toBe(1); @@ -171,11 +171,11 @@ describe("Moves - Magic Coat", () => { }); it("should not bounce back curse", async () => { - game.override.starterSpecies(Species.GASTLY); - await game.classicMode.startBattle([Species.GASTLY]); - game.override.moveset([Moves.CURSE]); + game.override.starterSpecies(SpeciesId.GASTLY); + await game.classicMode.startBattle([SpeciesId.GASTLY]); + game.override.moveset([MoveId.CURSE]); - game.move.select(Moves.CURSE); + game.move.select(MoveId.CURSE); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.getTag(BattlerTagType.CURSED)).toBeDefined(); @@ -183,40 +183,40 @@ describe("Moves - Magic Coat", () => { // TODO: encore is failing if the last move was virtual. it.todo("should not cause the bounced move to count for encore", async () => { - game.override.moveset([Moves.GROWL, Moves.ENCORE]); - game.override.enemyMoveset([Moves.MAGIC_COAT, Moves.TACKLE]); - game.override.enemyAbility(Abilities.MAGIC_BOUNCE); + game.override.moveset([MoveId.GROWL, MoveId.ENCORE]); + game.override.enemyMoveset([MoveId.MAGIC_COAT, MoveId.TACKLE]); + game.override.enemyAbility(AbilityId.MAGIC_BOUNCE); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const enemyPokemon = game.scene.getEnemyPokemon()!; // turn 1 - game.move.select(Moves.GROWL); - await game.move.selectEnemyMove(Moves.MAGIC_COAT); + game.move.select(MoveId.GROWL); + await game.move.selectEnemyMove(MoveId.MAGIC_COAT); await game.toNextTurn(); // turn 2 - game.move.select(Moves.ENCORE); - await game.move.selectEnemyMove(Moves.TACKLE); + game.move.select(MoveId.ENCORE); + await game.move.selectEnemyMove(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase"); - expect(enemyPokemon.getTag(BattlerTagType.ENCORE)!["moveId"]).toBe(Moves.TACKLE); - expect(enemyPokemon.getLastXMoves()[0].move).toBe(Moves.TACKLE); + expect(enemyPokemon.getTag(BattlerTagType.ENCORE)!["moveId"]).toBe(MoveId.TACKLE); + expect(enemyPokemon.getLastXMoves()[0].move).toBe(MoveId.TACKLE); }); // TODO: stomping tantrum should consider moves that were bounced. it.todo("should cause stomping tantrum to double in power when the last move was bounced", async () => { game.override.battleStyle("single"); - await game.classicMode.startBattle([Species.MAGIKARP]); - game.override.moveset([Moves.STOMPING_TANTRUM, Moves.CHARM]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); + game.override.moveset([MoveId.STOMPING_TANTRUM, MoveId.CHARM]); - const stomping_tantrum = allMoves[Moves.STOMPING_TANTRUM]; + const stomping_tantrum = allMoves[MoveId.STOMPING_TANTRUM]; vi.spyOn(stomping_tantrum, "calculateBattlePower"); - game.move.select(Moves.CHARM); + game.move.select(MoveId.CHARM); await game.toNextTurn(); - game.move.select(Moves.STOMPING_TANTRUM); + game.move.select(MoveId.STOMPING_TANTRUM); await game.phaseInterceptor.to("BerryPhase"); expect(stomping_tantrum.calculateBattlePower).toHaveReturnedWith(150); }); @@ -225,15 +225,15 @@ describe("Moves - Magic Coat", () => { it.todo( "should properly cause the enemy's stomping tantrum to be doubled in power after bouncing and failing", async () => { - game.override.enemyMoveset([Moves.STOMPING_TANTRUM, Moves.SPLASH, Moves.CHARM]); - await game.classicMode.startBattle([Species.BULBASAUR]); + game.override.enemyMoveset([MoveId.STOMPING_TANTRUM, MoveId.SPLASH, MoveId.CHARM]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const stomping_tantrum = allMoves[Moves.STOMPING_TANTRUM]; + const stomping_tantrum = allMoves[MoveId.STOMPING_TANTRUM]; const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(stomping_tantrum, "calculateBattlePower"); - game.move.select(Moves.SPORE); - await game.move.selectEnemyMove(Moves.CHARM); + game.move.select(MoveId.SPORE); + await game.move.selectEnemyMove(MoveId.CHARM); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.getLastXMoves(1)[0].result).toBe("success"); @@ -241,48 +241,48 @@ describe("Moves - Magic Coat", () => { expect(stomping_tantrum.calculateBattlePower).toHaveReturnedWith(75); await game.toNextTurn(); - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(stomping_tantrum.calculateBattlePower).toHaveReturnedWith(75); }, ); it("should respect immunities when bouncing a move", async () => { - vi.spyOn(allMoves[Moves.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100); - game.override.moveset([Moves.THUNDER_WAVE, Moves.GROWL]); - game.override.ability(Abilities.SOUNDPROOF); - await game.classicMode.startBattle([Species.PHANPY]); + vi.spyOn(allMoves[MoveId.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100); + game.override.moveset([MoveId.THUNDER_WAVE, MoveId.GROWL]); + game.override.ability(AbilityId.SOUNDPROOF); + await game.classicMode.startBattle([SpeciesId.PHANPY]); // Turn 1 - thunder wave immunity test - game.move.select(Moves.THUNDER_WAVE); + game.move.select(MoveId.THUNDER_WAVE); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); // Turn 2 - soundproof immunity test - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(0); }); it("should bounce back a move before the accuracy check", async () => { - game.override.moveset([Moves.SPORE]); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.moveset([MoveId.SPORE]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const attacker = game.scene.getPlayerPokemon()!; vi.spyOn(attacker, "getAccuracyMultiplier").mockReturnValue(0.0); - game.move.select(Moves.SPORE); + game.move.select(MoveId.SPORE); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.status?.effect).toBe(StatusEffect.SLEEP); }); it("should take the accuracy of the magic bounce user into account", async () => { - game.override.moveset([Moves.SPORE]); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.moveset([MoveId.SPORE]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const opponent = game.scene.getEnemyPokemon()!; vi.spyOn(opponent, "getAccuracyMultiplier").mockReturnValue(0); - game.move.select(Moves.SPORE); + game.move.select(MoveId.SPORE); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); }); diff --git a/test/moves/magnet_rise.test.ts b/test/moves/magnet_rise.test.ts index 5d5ae91c4fe..16f449899ef 100644 --- a/test/moves/magnet_rise.test.ts +++ b/test/moves/magnet_rise.test.ts @@ -1,7 +1,7 @@ import { CommandPhase } from "#app/phases/command-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -9,7 +9,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; describe("Moves - Magnet Rise", () => { let phaserGame: Phaser.Game; let game: GameManager; - const moveToUse = Moves.MAGNET_RISE; + const moveToUse = MoveId.MAGNET_RISE; beforeAll(() => { phaserGame = new Phaser.Game({ @@ -25,12 +25,12 @@ describe("Moves - Magnet Rise", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .starterSpecies(Species.MAGNEZONE) - .enemySpecies(Species.RATTATA) - .enemyMoveset(Moves.DRILL_RUN) + .starterSpecies(SpeciesId.MAGNEZONE) + .enemySpecies(SpeciesId.RATTATA) + .enemyMoveset(MoveId.DRILL_RUN) .disableCrits() .enemyLevel(1) - .moveset([moveToUse, Moves.SPLASH, Moves.GRAVITY, Moves.BATON_PASS]); + .moveset([moveToUse, MoveId.SPLASH, MoveId.GRAVITY, MoveId.BATON_PASS]); }); it("MAGNET RISE", async () => { @@ -53,7 +53,7 @@ describe("Moves - Magnet Rise", () => { let finalHp = game.scene.getPlayerParty()[0].hp; let hpLost = finalHp - startingHp; expect(hpLost).toBe(0); - game.move.select(Moves.GRAVITY); + game.move.select(MoveId.GRAVITY); await game.phaseInterceptor.to(TurnEndPhase); finalHp = game.scene.getPlayerParty()[0].hp; hpLost = finalHp - startingHp; diff --git a/test/moves/make_it_rain.test.ts b/test/moves/make_it_rain.test.ts index b897304662d..0089dfb642d 100644 --- a/test/moves/make_it_rain.test.ts +++ b/test/moves/make_it_rain.test.ts @@ -1,7 +1,7 @@ import { Stat } from "#enums/stat"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -25,21 +25,21 @@ describe("Moves - Make It Rain", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleStyle("double"); - game.override.moveset([Moves.MAKE_IT_RAIN, Moves.SPLASH]); - game.override.enemySpecies(Species.SNORLAX); - game.override.enemyAbility(Abilities.INSOMNIA); - game.override.enemyMoveset(Moves.SPLASH); + game.override.moveset([MoveId.MAKE_IT_RAIN, MoveId.SPLASH]); + game.override.enemySpecies(SpeciesId.SNORLAX); + game.override.enemyAbility(AbilityId.INSOMNIA); + game.override.enemyMoveset(MoveId.SPLASH); game.override.startingLevel(100); game.override.enemyLevel(100); }); it("should only lower SPATK stat stage by 1 once in a double battle", async () => { - await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.MAKE_IT_RAIN); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.MAKE_IT_RAIN); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(MoveEndPhase); @@ -50,12 +50,12 @@ describe("Moves - Make It Rain", () => { game.override.enemyLevel(1); // ensures the enemy will faint game.override.battleStyle("single"); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.MAKE_IT_RAIN); + game.move.select(MoveId.MAKE_IT_RAIN); await game.phaseInterceptor.to(StatStageChangePhase); @@ -66,13 +66,13 @@ describe("Moves - Make It Rain", () => { it("should reduce Sp. Atk. once after KOing two enemies", async () => { game.override.enemyLevel(1); // ensures the enemy will faint - await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.MAKE_IT_RAIN); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.MAKE_IT_RAIN); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(StatStageChangePhase); @@ -81,12 +81,12 @@ describe("Moves - Make It Rain", () => { }); it("should lower SPATK stat stage by 1 if it only hits the second target", async () => { - await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.MAKE_IT_RAIN); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.MAKE_IT_RAIN); + game.move.select(MoveId.SPLASH, 1); // Make Make It Rain miss the first target await game.move.forceMiss(true); diff --git a/test/moves/mat_block.test.ts b/test/moves/mat_block.test.ts index 3e7958d665b..c512503c9c4 100644 --- a/test/moves/mat_block.test.ts +++ b/test/moves/mat_block.test.ts @@ -1,9 +1,9 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; import GameManager from "#test/testUtils/gameManager"; -import { Species } from "#enums/species"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; +import { SpeciesId } from "#enums/species-id"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; import { Stat } from "#enums/stat"; import { BerryPhase } from "#app/phases/berry-phase"; import { CommandPhase } from "#app/phases/command-phase"; @@ -28,26 +28,26 @@ describe("Moves - Mat Block", () => { game.override.battleStyle("double"); - game.override.moveset([Moves.MAT_BLOCK, Moves.SPLASH]); + game.override.moveset([MoveId.MAT_BLOCK, MoveId.SPLASH]); - game.override.enemySpecies(Species.SNORLAX); - game.override.enemyMoveset([Moves.TACKLE]); - game.override.enemyAbility(Abilities.INSOMNIA); + game.override.enemySpecies(SpeciesId.SNORLAX); + game.override.enemyMoveset([MoveId.TACKLE]); + game.override.enemyAbility(AbilityId.INSOMNIA); game.override.startingLevel(100); game.override.enemyLevel(100); }); test("should protect the user and allies from attack moves", async () => { - await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerField(); - game.move.select(Moves.MAT_BLOCK); + game.move.select(MoveId.MAT_BLOCK); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(BerryPhase, false); @@ -55,17 +55,17 @@ describe("Moves - Mat Block", () => { }); test("should not protect the user and allies from status moves", async () => { - game.override.enemyMoveset([Moves.GROWL]); + game.override.enemyMoveset([MoveId.GROWL]); - await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerField(); - game.move.select(Moves.MAT_BLOCK); + game.move.select(MoveId.MAT_BLOCK); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(BerryPhase, false); @@ -73,22 +73,22 @@ describe("Moves - Mat Block", () => { }); test("should fail when used after the first turn", async () => { - await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); const leadPokemon = game.scene.getPlayerField(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(TurnEndPhase); const leadStartingHp = leadPokemon.map(p => p.hp); await game.phaseInterceptor.to(CommandPhase, false); - game.move.select(Moves.MAT_BLOCK); + game.move.select(MoveId.MAT_BLOCK); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.MAT_BLOCK, 1); + game.move.select(MoveId.MAT_BLOCK, 1); await game.phaseInterceptor.to(BerryPhase, false); diff --git a/test/moves/metal_burst.test.ts b/test/moves/metal_burst.test.ts index cadcbe07a0d..0222dd222be 100644 --- a/test/moves/metal_burst.test.ts +++ b/test/moves/metal_burst.test.ts @@ -1,8 +1,8 @@ import { BattlerIndex } from "#app/battle"; import { MoveResult } from "#app/field/pokemon"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -24,26 +24,26 @@ describe("Moves - Metal Burst", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.METAL_BURST, Moves.FISSURE, Moves.PRECIPICE_BLADES]) - .ability(Abilities.PURE_POWER) + .moveset([MoveId.METAL_BURST, MoveId.FISSURE, MoveId.PRECIPICE_BLADES]) + .ability(AbilityId.PURE_POWER) .startingLevel(10) .battleStyle("double") .disableCrits() - .enemySpecies(Species.PICHU) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.TACKLE); + .enemySpecies(SpeciesId.PICHU) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.TACKLE); }); it("should redirect target if intended target faints", async () => { - await game.classicMode.startBattle([Species.FEEBAS, Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.FEEBAS]); const [, enemy2] = game.scene.getEnemyField(); - game.move.select(Moves.METAL_BURST); - game.move.select(Moves.FISSURE, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.METAL_BURST); + game.move.select(MoveId.FISSURE, 1, BattlerIndex.ENEMY); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER_2); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2]); @@ -56,15 +56,15 @@ describe("Moves - Metal Burst", () => { }); it("should not crash if both opponents faint before the move is used", async () => { - await game.classicMode.startBattle([Species.FEEBAS, Species.ARCEUS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.ARCEUS]); const [enemy1, enemy2] = game.scene.getEnemyField(); - game.move.select(Moves.METAL_BURST); - game.move.select(Moves.PRECIPICE_BLADES, 1); + game.move.select(MoveId.METAL_BURST); + game.move.select(MoveId.PRECIPICE_BLADES, 1); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER_2); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2]); diff --git a/test/moves/metronome.test.ts b/test/moves/metronome.test.ts index 75b4b7190e6..0e6db09ae5c 100644 --- a/test/moves/metronome.test.ts +++ b/test/moves/metronome.test.ts @@ -1,11 +1,11 @@ import { RechargingTag, SemiInvulnerableTag } from "#app/data/battler-tags"; import { RandomMoveAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { Stat } from "#app/enums/stat"; import { CommandPhase } from "#app/phases/command-phase"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; @@ -27,26 +27,26 @@ describe("Moves - Metronome", () => { }); beforeEach(() => { - randomMoveAttr = allMoves[Moves.METRONOME].getAttrs(RandomMoveAttr)[0]; + randomMoveAttr = allMoves[MoveId.METRONOME].getAttrs(RandomMoveAttr)[0]; game = new GameManager(phaserGame); game.override - .moveset([Moves.METRONOME, Moves.SPLASH]) + .moveset([MoveId.METRONOME, MoveId.SPLASH]) .battleStyle("single") .startingLevel(100) - .starterSpecies(Species.REGIELEKI) + .starterSpecies(SpeciesId.REGIELEKI) .enemyLevel(100) - .enemySpecies(Species.SHUCKLE) - .enemyMoveset(Moves.SPLASH) - .enemyAbility(Abilities.BALL_FETCH); + .enemySpecies(SpeciesId.SHUCKLE) + .enemyMoveset(MoveId.SPLASH) + .enemyAbility(AbilityId.BALL_FETCH); }); it("should have one semi-invulnerable turn and deal damage on the second turn when a semi-invulnerable move is called", async () => { await game.classicMode.startBattle(); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(Moves.DIVE); + vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(MoveId.DIVE); - game.move.select(Moves.METRONOME); + game.move.select(MoveId.METRONOME); await game.toNextTurn(); expect(player.getTag(SemiInvulnerableTag)).toBeTruthy(); @@ -59,9 +59,9 @@ describe("Moves - Metronome", () => { it("should apply secondary effects of a move", async () => { await game.classicMode.startBattle(); const player = game.scene.getPlayerPokemon()!; - vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(Moves.WOOD_HAMMER); + vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(MoveId.WOOD_HAMMER); - game.move.select(Moves.METRONOME); + game.move.select(MoveId.METRONOME); await game.toNextTurn(); expect(player.isFullHp()).toBeFalsy(); @@ -70,10 +70,10 @@ describe("Moves - Metronome", () => { it("should recharge after using recharge move", async () => { await game.classicMode.startBattle(); const player = game.scene.getPlayerPokemon()!; - vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(Moves.HYPER_BEAM); - vi.spyOn(allMoves[Moves.HYPER_BEAM], "accuracy", "get").mockReturnValue(100); + vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(MoveId.HYPER_BEAM); + vi.spyOn(allMoves[MoveId.HYPER_BEAM], "accuracy", "get").mockReturnValue(100); - game.move.select(Moves.METRONOME); + game.move.select(MoveId.METRONOME); await game.toNextTurn(); expect(player.getTag(RechargingTag)).toBeTruthy(); @@ -81,14 +81,14 @@ describe("Moves - Metronome", () => { it("should only target ally for Aromatic Mist", async () => { game.override.battleStyle("double"); - await game.classicMode.startBattle([Species.REGIELEKI, Species.RATTATA]); + await game.classicMode.startBattle([SpeciesId.REGIELEKI, SpeciesId.RATTATA]); const [leftPlayer, rightPlayer] = game.scene.getPlayerField(); const [leftOpp, rightOpp] = game.scene.getEnemyField(); - vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(Moves.AROMATIC_MIST); + vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(MoveId.AROMATIC_MIST); - game.move.select(Moves.METRONOME, 0); + game.move.select(MoveId.METRONOME, 0); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(rightPlayer.getStatStage(Stat.SPDEF)).toBe(1); @@ -99,11 +99,11 @@ describe("Moves - Metronome", () => { it("should cause opponent to flee, and not crash for Roar", async () => { await game.classicMode.startBattle(); - vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(Moves.ROAR); + vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(MoveId.ROAR); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.METRONOME); + game.move.select(MoveId.METRONOME); await game.phaseInterceptor.to("BerryPhase"); const isVisible = enemyPokemon.visible; diff --git a/test/moves/miracle_eye.test.ts b/test/moves/miracle_eye.test.ts index 2dbfb962540..dd5fb1c355b 100644 --- a/test/moves/miracle_eye.test.ts +++ b/test/moves/miracle_eye.test.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; -import { Moves } from "#app/enums/moves"; -import { Species } from "#app/enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,11 +24,11 @@ describe("Moves - Miracle Eye", () => { game = new GameManager(phaserGame); game.override .disableCrits() - .enemySpecies(Species.UMBREON) - .enemyMoveset(Moves.SPLASH) + .enemySpecies(SpeciesId.UMBREON) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(5) - .starterSpecies(Species.MAGIKARP) - .moveset([Moves.MIRACLE_EYE, Moves.CONFUSION]); + .starterSpecies(SpeciesId.MAGIKARP) + .moveset([MoveId.MIRACLE_EYE, MoveId.CONFUSION]); }); it("should allow Psychic moves to hit Dark types", async () => { @@ -36,13 +36,13 @@ describe("Moves - Miracle Eye", () => { const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.CONFUSION); + game.move.select(MoveId.CONFUSION); await game.toNextTurn(); expect(enemy.hp).toBe(enemy.getMaxHp()); - game.move.select(Moves.MIRACLE_EYE); + game.move.select(MoveId.MIRACLE_EYE); await game.toNextTurn(); - game.move.select(Moves.CONFUSION); + game.move.select(MoveId.CONFUSION); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); diff --git a/test/moves/mirror_move.test.ts b/test/moves/mirror_move.test.ts index 6a73e3a1f05..18e115745b9 100644 --- a/test/moves/mirror_move.test.ts +++ b/test/moves/mirror_move.test.ts @@ -1,9 +1,9 @@ import { BattlerIndex } from "#app/battle"; import { Stat } from "#app/enums/stat"; import { MoveResult } from "#app/field/pokemon"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -25,23 +25,23 @@ describe("Moves - Mirror Move", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.MIRROR_MOVE, Moves.SPLASH]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.MIRROR_MOVE, MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should use the last move that the target used on the user", async () => { - game.override.battleStyle("double").enemyMoveset([Moves.TACKLE, Moves.GROWL]); - await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); + game.override.battleStyle("double").enemyMoveset([MoveId.TACKLE, MoveId.GROWL]); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MAGIKARP]); - game.move.select(Moves.MIRROR_MOVE, 0, BattlerIndex.ENEMY); // target's last move is Tackle, enemy should receive damage from Mirror Move copying Tackle - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.GROWL, BattlerIndex.PLAYER_2); + game.move.select(MoveId.MIRROR_MOVE, 0, BattlerIndex.ENEMY); // target's last move is Tackle, enemy should receive damage from Mirror Move copying Tackle + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.GROWL, BattlerIndex.PLAYER_2); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER]); await game.toNextTurn(); @@ -49,10 +49,10 @@ describe("Moves - Mirror Move", () => { }); it("should apply secondary effects of a move", async () => { - game.override.enemyMoveset(Moves.ACID_SPRAY); - await game.classicMode.startBattle([Species.FEEBAS]); + game.override.enemyMoveset(MoveId.ACID_SPRAY); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.MIRROR_MOVE); + game.move.select(MoveId.MIRROR_MOVE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); @@ -60,10 +60,10 @@ describe("Moves - Mirror Move", () => { }); it("should be able to copy status moves", async () => { - game.override.enemyMoveset(Moves.GROWL); - await game.classicMode.startBattle([Species.FEEBAS]); + game.override.enemyMoveset(MoveId.GROWL); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.MIRROR_MOVE); + game.move.select(MoveId.MIRROR_MOVE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); @@ -71,9 +71,9 @@ describe("Moves - Mirror Move", () => { }); it("should fail if the target has not used any moves", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.MIRROR_MOVE); + game.move.select(MoveId.MIRROR_MOVE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); diff --git a/test/moves/mist.test.ts b/test/moves/mist.test.ts index 70cdf5b55a0..ea4eb95a1eb 100644 --- a/test/moves/mist.test.ts +++ b/test/moves/mist.test.ts @@ -1,7 +1,7 @@ import { Stat } from "#enums/stat"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -23,22 +23,22 @@ describe("Moves - Mist", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.MIST, Moves.SPLASH]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.MIST, MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH) .battleStyle("double") .disableCrits() - .enemySpecies(Species.SNORLAX) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.GROWL); + .enemySpecies(SpeciesId.SNORLAX) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.GROWL); }); it("should prevent the user's side from having stats lowered", async () => { - await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS]); const playerPokemon = game.scene.getPlayerField(); - game.move.select(Moves.MIST, 0); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.MIST, 0); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); diff --git a/test/moves/moongeist_beam.test.ts b/test/moves/moongeist_beam.test.ts index 29398776f7f..f462d81943f 100644 --- a/test/moves/moongeist_beam.test.ts +++ b/test/moves/moongeist_beam.test.ts @@ -1,8 +1,8 @@ import { RandomMoveAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -24,23 +24,23 @@ describe("Moves - Moongeist Beam", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.MOONGEIST_BEAM, Moves.METRONOME]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.MOONGEIST_BEAM, MoveId.METRONOME]) + .ability(AbilityId.BALL_FETCH) .startingLevel(200) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.STURDY) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.STURDY) + .enemyMoveset(MoveId.SPLASH); }); // Also covers Photon Geyser and Sunsteel Strike it("should ignore enemy abilities", async () => { - await game.classicMode.startBattle([Species.MILOTIC]); + await game.classicMode.startBattle([SpeciesId.MILOTIC]); const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.MOONGEIST_BEAM); + game.move.select(MoveId.MOONGEIST_BEAM); await game.phaseInterceptor.to("BerryPhase"); expect(enemy.isFainted()).toBe(true); @@ -48,15 +48,15 @@ describe("Moves - Moongeist Beam", () => { // Also covers Photon Geyser and Sunsteel Strike it("should not ignore enemy abilities when called by another move, such as metronome", async () => { - await game.classicMode.startBattle([Species.MILOTIC]); - vi.spyOn(allMoves[Moves.METRONOME].getAttrs(RandomMoveAttr)[0], "getMoveOverride").mockReturnValue( - Moves.MOONGEIST_BEAM, + await game.classicMode.startBattle([SpeciesId.MILOTIC]); + vi.spyOn(allMoves[MoveId.METRONOME].getAttrs(RandomMoveAttr)[0], "getMoveOverride").mockReturnValue( + MoveId.MOONGEIST_BEAM, ); - game.move.select(Moves.METRONOME); + game.move.select(MoveId.METRONOME); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.isFainted()).toBe(false); - expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].move).toBe(Moves.MOONGEIST_BEAM); + expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].move).toBe(MoveId.MOONGEIST_BEAM); }); }); diff --git a/test/moves/multi_target.test.ts b/test/moves/multi_target.test.ts index af98c9a89f4..4572097296c 100644 --- a/test/moves/multi_target.test.ts +++ b/test/moves/multi_target.test.ts @@ -1,8 +1,8 @@ import { BattlerIndex } from "#app/battle"; -import { Abilities } from "#app/enums/abilities"; -import { Species } from "#app/enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { SpeciesId } from "#enums/species-id"; import { toDmgValue } from "#app/utils/common"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -28,20 +28,20 @@ describe("Multi-target damage reduction", () => { .battleStyle("double") .enemyLevel(100) .startingLevel(100) - .enemySpecies(Species.POLIWAG) - .enemyMoveset(Moves.SPLASH) - .enemyAbility(Abilities.BALL_FETCH) - .moveset([Moves.TACKLE, Moves.DAZZLING_GLEAM, Moves.EARTHQUAKE, Moves.SPLASH]) - .ability(Abilities.BALL_FETCH); + .enemySpecies(SpeciesId.POLIWAG) + .enemyMoveset(MoveId.SPLASH) + .enemyAbility(AbilityId.BALL_FETCH) + .moveset([MoveId.TACKLE, MoveId.DAZZLING_GLEAM, MoveId.EARTHQUAKE, MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH); }); it("should reduce d.gleam damage when multiple enemies but not tackle", async () => { - await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS]); const [enemy1, enemy2] = game.scene.getEnemyField(); - game.move.select(Moves.DAZZLING_GLEAM); - game.move.select(Moves.TACKLE, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.DAZZLING_GLEAM); + game.move.select(MoveId.TACKLE, 1, BattlerIndex.ENEMY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -56,8 +56,8 @@ describe("Multi-target damage reduction", () => { await game.killPokemon(enemy2); await game.toNextTurn(); - game.move.select(Moves.DAZZLING_GLEAM); - game.move.select(Moves.TACKLE, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.DAZZLING_GLEAM); + game.move.select(MoveId.TACKLE, 1, BattlerIndex.ENEMY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -76,13 +76,13 @@ describe("Multi-target damage reduction", () => { }); it("should reduce earthquake when more than one pokemon other than user is not fainted", async () => { - await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS]); const player2 = game.scene.getPlayerParty()[1]; const [enemy1, enemy2] = game.scene.getEnemyField(); - game.move.select(Moves.EARTHQUAKE); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.EARTHQUAKE); + game.move.select(MoveId.SPLASH, 1); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -96,8 +96,8 @@ describe("Multi-target damage reduction", () => { await game.killPokemon(enemy2); await game.toNextTurn(); - game.move.select(Moves.EARTHQUAKE); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.EARTHQUAKE); + game.move.select(MoveId.SPLASH, 1); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -115,7 +115,7 @@ describe("Multi-target damage reduction", () => { await game.killPokemon(player2); await game.toNextTurn(); - game.move.select(Moves.EARTHQUAKE); + game.move.select(MoveId.EARTHQUAKE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); diff --git a/test/moves/nightmare.test.ts b/test/moves/nightmare.test.ts index 044856ae33d..e005def85ad 100644 --- a/test/moves/nightmare.test.ts +++ b/test/moves/nightmare.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -25,27 +25,27 @@ describe("Moves - Nightmare", () => { game.override .battleStyle("single") - .enemySpecies(Species.RATTATA) - .enemyMoveset(Moves.SPLASH) - .enemyAbility(Abilities.BALL_FETCH) + .enemySpecies(SpeciesId.RATTATA) + .enemyMoveset(MoveId.SPLASH) + .enemyAbility(AbilityId.BALL_FETCH) .enemyStatusEffect(StatusEffect.SLEEP) .startingLevel(5) - .moveset([Moves.NIGHTMARE, Moves.SPLASH]); + .moveset([MoveId.NIGHTMARE, MoveId.SPLASH]); }); it("lowers enemy hp by 1/4 each turn while asleep", async () => { - await game.classicMode.startBattle([Species.HYPNO]); + await game.classicMode.startBattle([SpeciesId.HYPNO]); const enemyPokemon = game.scene.getEnemyPokemon()!; const enemyMaxHP = enemyPokemon.hp; - game.move.select(Moves.NIGHTMARE); + game.move.select(MoveId.NIGHTMARE); await game.toNextTurn(); expect(enemyPokemon.hp).toBe(enemyMaxHP - Math.floor(enemyMaxHP / 4)); // take a second turn to make sure damage occurs again - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(enemyPokemon.hp).toBe(enemyMaxHP - Math.floor(enemyMaxHP / 4) - Math.floor(enemyMaxHP / 4)); diff --git a/test/moves/obstruct.test.ts b/test/moves/obstruct.test.ts index f35a5964bcb..fc534180bef 100644 --- a/test/moves/obstruct.test.ts +++ b/test/moves/obstruct.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,18 +23,18 @@ describe("Moves - Obstruct", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.TACKLE) - .enemyAbility(Abilities.BALL_FETCH) - .ability(Abilities.BALL_FETCH) - .moveset([Moves.OBSTRUCT]) - .starterSpecies(Species.FEEBAS); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyMoveset(MoveId.TACKLE) + .enemyAbility(AbilityId.BALL_FETCH) + .ability(AbilityId.BALL_FETCH) + .moveset([MoveId.OBSTRUCT]) + .starterSpecies(SpeciesId.FEEBAS); }); it("protects from contact damaging moves and lowers the opponent's defense by 2 stages", async () => { await game.classicMode.startBattle(); - game.move.select(Moves.OBSTRUCT); + game.move.select(MoveId.OBSTRUCT); await game.phaseInterceptor.to("BerryPhase"); const player = game.scene.getPlayerPokemon()!; @@ -47,7 +47,7 @@ describe("Moves - Obstruct", () => { it("bypasses accuracy checks when applying protection and defense reduction", async () => { await game.classicMode.startBattle(); - game.move.select(Moves.OBSTRUCT); + game.move.select(MoveId.OBSTRUCT); await game.phaseInterceptor.to("MoveEffectPhase"); await game.move.forceMiss(); @@ -60,10 +60,10 @@ describe("Moves - Obstruct", () => { }); it("protects from non-contact damaging moves and doesn't lower the opponent's defense by 2 stages", async () => { - game.override.enemyMoveset(Moves.WATER_GUN); + game.override.enemyMoveset(MoveId.WATER_GUN); await game.classicMode.startBattle(); - game.move.select(Moves.OBSTRUCT); + game.move.select(MoveId.OBSTRUCT); await game.phaseInterceptor.to("BerryPhase"); const player = game.scene.getPlayerPokemon()!; @@ -74,10 +74,10 @@ describe("Moves - Obstruct", () => { }); it("doesn't protect from status moves", async () => { - game.override.enemyMoveset(Moves.GROWL); + game.override.enemyMoveset(MoveId.GROWL); await game.classicMode.startBattle(); - game.move.select(Moves.OBSTRUCT); + game.move.select(MoveId.OBSTRUCT); await game.phaseInterceptor.to("BerryPhase"); const player = game.scene.getPlayerPokemon()!; @@ -86,10 +86,10 @@ describe("Moves - Obstruct", () => { }); it("doesn't reduce the stats of an opponent with Clear Body/etc", async () => { - game.override.enemyAbility(Abilities.CLEAR_BODY); + game.override.enemyAbility(AbilityId.CLEAR_BODY); await game.classicMode.startBattle(); - game.move.select(Moves.OBSTRUCT); + game.move.select(MoveId.OBSTRUCT); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.DEF)).toBe(0); diff --git a/test/moves/octolock.test.ts b/test/moves/octolock.test.ts index fb57d0bfad5..2a2f8743ad2 100644 --- a/test/moves/octolock.test.ts +++ b/test/moves/octolock.test.ts @@ -1,7 +1,7 @@ import { TrappedTag } from "#app/data/battler-tags"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -26,28 +26,28 @@ describe("Moves - Octolock", () => { game.override .battleStyle("single") - .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.SPLASH) - .enemyAbility(Abilities.BALL_FETCH) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyMoveset(MoveId.SPLASH) + .enemyAbility(AbilityId.BALL_FETCH) .startingLevel(2000) - .moveset([Moves.OCTOLOCK, Moves.SPLASH, Moves.TRICK_OR_TREAT]) - .ability(Abilities.BALL_FETCH); + .moveset([MoveId.OCTOLOCK, MoveId.SPLASH, MoveId.TRICK_OR_TREAT]) + .ability(AbilityId.BALL_FETCH); }); it("lowers DEF and SPDEF stat stages of the target Pokemon by 1 each turn", async () => { - await game.classicMode.startBattle([Species.GRAPPLOCT]); + await game.classicMode.startBattle([SpeciesId.GRAPPLOCT]); const enemyPokemon = game.scene.getEnemyPokemon()!; // use Octolock and advance to init phase of next turn to check for stat changes - game.move.select(Moves.OCTOLOCK); + game.move.select(MoveId.OCTOLOCK); await game.toNextTurn(); expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(-1); expect(enemyPokemon.getStatStage(Stat.SPDEF)).toBe(-1); // take a second turn to make sure stat changes occur again - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(-2); @@ -55,13 +55,13 @@ describe("Moves - Octolock", () => { }); it("if target pokemon has BIG_PECKS, should only lower SPDEF stat stage by 1", async () => { - game.override.enemyAbility(Abilities.BIG_PECKS); - await game.classicMode.startBattle([Species.GRAPPLOCT]); + game.override.enemyAbility(AbilityId.BIG_PECKS); + await game.classicMode.startBattle([SpeciesId.GRAPPLOCT]); const enemyPokemon = game.scene.getEnemyPokemon()!; // use Octolock and advance to init phase of next turn to check for stat changes - game.move.select(Moves.OCTOLOCK); + game.move.select(MoveId.OCTOLOCK); await game.toNextTurn(); expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(0); @@ -69,13 +69,13 @@ describe("Moves - Octolock", () => { }); it("if target pokemon has WHITE_SMOKE, should not reduce any stat stages", async () => { - game.override.enemyAbility(Abilities.WHITE_SMOKE); - await game.classicMode.startBattle([Species.GRAPPLOCT]); + game.override.enemyAbility(AbilityId.WHITE_SMOKE); + await game.classicMode.startBattle([SpeciesId.GRAPPLOCT]); const enemyPokemon = game.scene.getEnemyPokemon()!; // use Octolock and advance to init phase of next turn to check for stat changes - game.move.select(Moves.OCTOLOCK); + game.move.select(MoveId.OCTOLOCK); await game.toNextTurn(); expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(0); @@ -83,13 +83,13 @@ describe("Moves - Octolock", () => { }); it("if target pokemon has CLEAR_BODY, should not reduce any stat stages", async () => { - game.override.enemyAbility(Abilities.CLEAR_BODY); - await game.classicMode.startBattle([Species.GRAPPLOCT]); + game.override.enemyAbility(AbilityId.CLEAR_BODY); + await game.classicMode.startBattle([SpeciesId.GRAPPLOCT]); const enemyPokemon = game.scene.getEnemyPokemon()!; // use Octolock and advance to init phase of next turn to check for stat changes - game.move.select(Moves.OCTOLOCK); + game.move.select(MoveId.OCTOLOCK); await game.toNextTurn(); expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(0); @@ -97,14 +97,14 @@ describe("Moves - Octolock", () => { }); it("traps the target pokemon", async () => { - await game.classicMode.startBattle([Species.GRAPPLOCT]); + await game.classicMode.startBattle([SpeciesId.GRAPPLOCT]); const enemyPokemon = game.scene.getEnemyPokemon()!; // before Octolock - enemy should not be trapped expect(enemyPokemon.findTag(t => t instanceof TrappedTag)).toBeUndefined(); - game.move.select(Moves.OCTOLOCK); + game.move.select(MoveId.OCTOLOCK); // after Octolock - enemy should be trapped await game.phaseInterceptor.to("MoveEndPhase"); @@ -112,15 +112,15 @@ describe("Moves - Octolock", () => { }); it("does not work on ghost type pokemon", async () => { - game.override.enemyMoveset(Moves.OCTOLOCK); - await game.classicMode.startBattle([Species.GASTLY]); + game.override.enemyMoveset(MoveId.OCTOLOCK); + await game.classicMode.startBattle([SpeciesId.GASTLY]); const playerPokemon = game.scene.getPlayerPokemon()!; // before Octolock - player should not be trapped expect(playerPokemon.findTag(t => t instanceof TrappedTag)).toBeUndefined(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // after Octolock - player should still not be trapped, and no stat loss @@ -130,16 +130,16 @@ describe("Moves - Octolock", () => { }); it("does not work on pokemon with added ghost type via Trick-or-Treat", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const enemy = game.scene.getEnemyPokemon()!; // before Octolock - pokemon should not be trapped expect(enemy.findTag(t => t instanceof TrappedTag)).toBeUndefined(); - game.move.select(Moves.TRICK_OR_TREAT); + game.move.select(MoveId.TRICK_OR_TREAT); await game.toNextTurn(); - game.move.select(Moves.OCTOLOCK); + game.move.select(MoveId.OCTOLOCK); await game.toNextTurn(); // after Octolock - pokemon should still not be trapped, and no stat loss diff --git a/test/moves/order_up.test.ts b/test/moves/order_up.test.ts index b5df5bfba41..c6ca7ac06da 100644 --- a/test/moves/order_up.test.ts +++ b/test/moves/order_up.test.ts @@ -3,9 +3,9 @@ import { BattlerTagType } from "#enums/battler-tag-type"; import { PokemonAnimType } from "#enums/pokemon-anim-type"; import type { EffectiveStat } from "#enums/stat"; import { Stat } from "#enums/stat"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -27,13 +27,13 @@ describe("Moves - Order Up", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Moves.ORDER_UP) - .ability(Abilities.COMMANDER) + .moveset(MoveId.ORDER_UP) + .ability(AbilityId.COMMANDER) .battleStyle("double") .disableCrits() - .enemySpecies(Species.SNORLAX) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemySpecies(SpeciesId.SNORLAX) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) .startingLevel(100) .enemyLevel(100); @@ -47,16 +47,16 @@ describe("Moves - Order Up", () => { ])( "should raise the user's $statName when the user is commanded by a $formName Tatsugiri", async ({ formIndex, stat }) => { - game.override.starterForms({ [Species.TATSUGIRI]: formIndex }); + game.override.starterForms({ [SpeciesId.TATSUGIRI]: formIndex }); - await game.classicMode.startBattle([Species.TATSUGIRI, Species.DONDOZO]); + await game.classicMode.startBattle([SpeciesId.TATSUGIRI, SpeciesId.DONDOZO]); const [tatsugiri, dondozo] = game.scene.getPlayerField(); expect(game.scene.triggerPokemonBattleAnim).toHaveBeenLastCalledWith(tatsugiri, PokemonAnimType.COMMANDER_APPLY); expect(dondozo.getTag(BattlerTagType.COMMANDED)).toBeDefined(); - game.move.select(Moves.ORDER_UP, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.ORDER_UP, 1, BattlerIndex.ENEMY); expect(game.scene.currentBattle.turnCommands[0]?.skip).toBeTruthy(); await game.phaseInterceptor.to("BerryPhase", false); @@ -67,21 +67,21 @@ describe("Moves - Order Up", () => { ); it("should be boosted by Sheer Force while still applying a stat boost", async () => { - game.override.passiveAbility(Abilities.SHEER_FORCE).starterForms({ [Species.TATSUGIRI]: 0 }); + game.override.passiveAbility(AbilityId.SHEER_FORCE).starterForms({ [SpeciesId.TATSUGIRI]: 0 }); - await game.classicMode.startBattle([Species.TATSUGIRI, Species.DONDOZO]); + await game.classicMode.startBattle([SpeciesId.TATSUGIRI, SpeciesId.DONDOZO]); const [tatsugiri, dondozo] = game.scene.getPlayerField(); expect(game.scene.triggerPokemonBattleAnim).toHaveBeenLastCalledWith(tatsugiri, PokemonAnimType.COMMANDER_APPLY); expect(dondozo.getTag(BattlerTagType.COMMANDED)).toBeDefined(); - game.move.select(Moves.ORDER_UP, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.ORDER_UP, 1, BattlerIndex.ENEMY); expect(game.scene.currentBattle.turnCommands[0]?.skip).toBeTruthy(); await game.phaseInterceptor.to("BerryPhase", false); - expect(dondozo.waveData.abilitiesApplied.has(Abilities.SHEER_FORCE)).toBeTruthy(); + expect(dondozo.waveData.abilitiesApplied.has(AbilityId.SHEER_FORCE)).toBeTruthy(); expect(dondozo.getStatStage(Stat.ATK)).toBe(3); }); }); diff --git a/test/moves/parting_shot.test.ts b/test/moves/parting_shot.test.ts index 26f8790d3b9..f7a1b86fb34 100644 --- a/test/moves/parting_shot.test.ts +++ b/test/moves/parting_shot.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, test } from "vitest"; import GameManager from "#test/testUtils/gameManager"; @@ -27,69 +27,69 @@ describe("Moves - Parting Shot", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleStyle("single"); - game.override.moveset([Moves.PARTING_SHOT, Moves.SPLASH]); - game.override.enemyMoveset(Moves.SPLASH); + game.override.moveset([MoveId.PARTING_SHOT, MoveId.SPLASH]); + game.override.enemyMoveset(MoveId.SPLASH); game.override.startingLevel(5); game.override.enemyLevel(5); }); test("Parting Shot when buffed by prankster should fail against dark types", async () => { - game.override.enemySpecies(Species.POOCHYENA).ability(Abilities.PRANKSTER); - await game.classicMode.startBattle([Species.MURKROW, Species.MEOWTH]); + game.override.enemySpecies(SpeciesId.POOCHYENA).ability(AbilityId.PRANKSTER); + await game.classicMode.startBattle([SpeciesId.MURKROW, SpeciesId.MEOWTH]); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon).toBeDefined(); - game.move.select(Moves.PARTING_SHOT); + game.move.select(MoveId.PARTING_SHOT); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(0); expect(enemyPokemon.getStatStage(Stat.SPATK)).toBe(0); - expect(game.scene.getPlayerField()[0].species.speciesId).toBe(Species.MURKROW); + expect(game.scene.getPlayerField()[0].species.speciesId).toBe(SpeciesId.MURKROW); }); test("Parting shot should fail against good as gold ability", async () => { - game.override.enemySpecies(Species.GHOLDENGO).enemyAbility(Abilities.GOOD_AS_GOLD); - await game.classicMode.startBattle([Species.MURKROW, Species.MEOWTH]); + game.override.enemySpecies(SpeciesId.GHOLDENGO).enemyAbility(AbilityId.GOOD_AS_GOLD); + await game.classicMode.startBattle([SpeciesId.MURKROW, SpeciesId.MEOWTH]); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon).toBeDefined(); - game.move.select(Moves.PARTING_SHOT); + game.move.select(MoveId.PARTING_SHOT); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(0); expect(enemyPokemon.getStatStage(Stat.SPATK)).toBe(0); - expect(game.scene.getPlayerField()[0].species.speciesId).toBe(Species.MURKROW); + expect(game.scene.getPlayerField()[0].species.speciesId).toBe(SpeciesId.MURKROW); }); it.todo( // TODO: fix this bug to pass the test! "Parting shot should fail if target is -6/-6 de-buffed", async () => { - game.override.moveset([Moves.PARTING_SHOT, Moves.MEMENTO, Moves.SPLASH]); + game.override.moveset([MoveId.PARTING_SHOT, MoveId.MEMENTO, MoveId.SPLASH]); await game.classicMode.startBattle([ - Species.MEOWTH, - Species.MEOWTH, - Species.MEOWTH, - Species.MURKROW, - Species.ABRA, + SpeciesId.MEOWTH, + SpeciesId.MEOWTH, + SpeciesId.MEOWTH, + SpeciesId.MURKROW, + SpeciesId.ABRA, ]); // use Memento 3 times to debuff enemy - game.move.select(Moves.MEMENTO); + game.move.select(MoveId.MEMENTO); await game.phaseInterceptor.to(FaintPhase); expect(game.scene.getPlayerParty()[0].isFainted()).toBe(true); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to(TurnInitPhase, false); - game.move.select(Moves.MEMENTO); + game.move.select(MoveId.MEMENTO); await game.phaseInterceptor.to(FaintPhase); expect(game.scene.getPlayerParty()[0].isFainted()).toBe(true); game.doSelectPartyPokemon(2); await game.phaseInterceptor.to(TurnInitPhase, false); - game.move.select(Moves.MEMENTO); + game.move.select(MoveId.MEMENTO); await game.phaseInterceptor.to(FaintPhase); expect(game.scene.getPlayerParty()[0].isFainted()).toBe(true); game.doSelectPartyPokemon(3); @@ -103,12 +103,12 @@ describe("Moves - Parting Shot", () => { expect(enemyPokemon.getStatStage(Stat.SPATK)).toBe(-6); // now parting shot should fail - game.move.select(Moves.PARTING_SHOT); + game.move.select(MoveId.PARTING_SHOT); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(-6); expect(enemyPokemon.getStatStage(Stat.SPATK)).toBe(-6); - expect(game.scene.getPlayerField()[0].species.speciesId).toBe(Species.MURKROW); + expect(game.scene.getPlayerField()[0].species.speciesId).toBe(SpeciesId.MURKROW); }, ); @@ -116,18 +116,18 @@ describe("Moves - Parting Shot", () => { // TODO: fix this bug to pass the test! "Parting shot shouldn't allow switch out when mist is active", async () => { - game.override.enemySpecies(Species.ALTARIA).enemyAbility(Abilities.NONE).enemyMoveset([Moves.MIST]); - await game.classicMode.startBattle([Species.SNORLAX, Species.MEOWTH]); + game.override.enemySpecies(SpeciesId.ALTARIA).enemyAbility(AbilityId.NONE).enemyMoveset([MoveId.MIST]); + await game.classicMode.startBattle([SpeciesId.SNORLAX, SpeciesId.MEOWTH]); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon).toBeDefined(); - game.move.select(Moves.PARTING_SHOT); + game.move.select(MoveId.PARTING_SHOT); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(0); expect(enemyPokemon.getStatStage(Stat.SPATK)).toBe(0); - expect(game.scene.getPlayerField()[0].species.speciesId).toBe(Species.MURKROW); + expect(game.scene.getPlayerField()[0].species.speciesId).toBe(SpeciesId.MURKROW); }, ); @@ -135,18 +135,18 @@ describe("Moves - Parting Shot", () => { // TODO: fix this bug to pass the test! "Parting shot shouldn't allow switch out against clear body ability", async () => { - game.override.enemySpecies(Species.TENTACOOL).enemyAbility(Abilities.CLEAR_BODY); - await game.classicMode.startBattle([Species.SNORLAX, Species.MEOWTH]); + game.override.enemySpecies(SpeciesId.TENTACOOL).enemyAbility(AbilityId.CLEAR_BODY); + await game.classicMode.startBattle([SpeciesId.SNORLAX, SpeciesId.MEOWTH]); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon).toBeDefined(); - game.move.select(Moves.PARTING_SHOT); + game.move.select(MoveId.PARTING_SHOT); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(0); expect(enemyPokemon.getStatStage(Stat.SPATK)).toBe(0); - expect(game.scene.getPlayerField()[0].species.speciesId).toBe(Species.MURKROW); + expect(game.scene.getPlayerField()[0].species.speciesId).toBe(SpeciesId.MURKROW); }, ); @@ -154,17 +154,17 @@ describe("Moves - Parting Shot", () => { // TODO: fix this bug to pass the test! "Parting shot should de-buff and not fail if no party available to switch - party size 1", async () => { - await game.classicMode.startBattle([Species.MURKROW]); + await game.classicMode.startBattle([SpeciesId.MURKROW]); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon).toBeDefined(); - game.move.select(Moves.PARTING_SHOT); + game.move.select(MoveId.PARTING_SHOT); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(-1); expect(enemyPokemon.getStatStage(Stat.SPATK)).toBe(-1); - expect(game.scene.getPlayerField()[0].species.speciesId).toBe(Species.MURKROW); + expect(game.scene.getPlayerField()[0].species.speciesId).toBe(SpeciesId.MURKROW); }, ); @@ -172,8 +172,8 @@ describe("Moves - Parting Shot", () => { // TODO: fix this bug to pass the test! "Parting shot regularly not fail if no party available to switch - party fainted", async () => { - await game.classicMode.startBattle([Species.MURKROW, Species.MEOWTH]); - game.move.select(Moves.SPLASH); + await game.classicMode.startBattle([SpeciesId.MURKROW, SpeciesId.MEOWTH]); + game.move.select(MoveId.SPLASH); // intentionally kill party pokemon, switch to second slot (now 1 party mon is fainted) await game.killPokemon(game.scene.getPlayerParty()[0]); @@ -182,13 +182,13 @@ describe("Moves - Parting Shot", () => { game.doSelectPartyPokemon(1); await game.phaseInterceptor.to(TurnInitPhase, false); - game.move.select(Moves.PARTING_SHOT); + game.move.select(MoveId.PARTING_SHOT); await game.phaseInterceptor.to(BerryPhase, false); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(0); expect(enemyPokemon.getStatStage(Stat.SPATK)).toBe(0); - expect(game.scene.getPlayerField()[0].species.speciesId).toBe(Species.MEOWTH); + expect(game.scene.getPlayerField()[0].species.speciesId).toBe(SpeciesId.MEOWTH); }, ); }); diff --git a/test/moves/plasma_fists.test.ts b/test/moves/plasma_fists.test.ts index 0c3412d8e60..9493f69d70f 100644 --- a/test/moves/plasma_fists.test.ts +++ b/test/moves/plasma_fists.test.ts @@ -1,8 +1,8 @@ import { BattlerIndex } from "#app/battle"; import { PokemonType } from "#enums/pokemon-type"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; @@ -24,26 +24,26 @@ describe("Moves - Plasma Fists", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.PLASMA_FISTS, Moves.TACKLE]) + .moveset([MoveId.PLASMA_FISTS, MoveId.TACKLE]) .battleStyle("double") .startingLevel(100) - .enemySpecies(Species.DUSCLOPS) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.TACKLE) + .enemySpecies(SpeciesId.DUSCLOPS) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.TACKLE) .enemyLevel(100); }); it("should convert all subsequent Normal-type attacks to Electric-type", async () => { - await game.classicMode.startBattle([Species.DUSCLOPS, Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.DUSCLOPS, SpeciesId.BLASTOISE]); const field = game.scene.getField(true); field.forEach(p => vi.spyOn(p, "getMoveType")); - game.move.select(Moves.PLASMA_FISTS, 0, BattlerIndex.ENEMY); - game.move.select(Moves.TACKLE, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.PLASMA_FISTS, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.TACKLE, 1, BattlerIndex.ENEMY_2); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER_2); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); @@ -56,15 +56,15 @@ describe("Moves - Plasma Fists", () => { }); it("should not affect Normal-type attacks boosted by Pixilate", async () => { - game.override.battleStyle("single").enemyAbility(Abilities.PIXILATE); + game.override.battleStyle("single").enemyAbility(AbilityId.PIXILATE); - await game.classicMode.startBattle([Species.ONIX]); + await game.classicMode.startBattle([SpeciesId.ONIX]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; vi.spyOn(enemyPokemon, "getMoveType"); - game.move.select(Moves.PLASMA_FISTS); + game.move.select(MoveId.PLASMA_FISTS); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase", false); @@ -74,15 +74,15 @@ describe("Moves - Plasma Fists", () => { }); it("should affect moves that become Normal type due to Normalize", async () => { - game.override.battleStyle("single").enemyAbility(Abilities.NORMALIZE).enemyMoveset(Moves.WATER_GUN); + game.override.battleStyle("single").enemyAbility(AbilityId.NORMALIZE).enemyMoveset(MoveId.WATER_GUN); - await game.classicMode.startBattle([Species.DUSCLOPS]); + await game.classicMode.startBattle([SpeciesId.DUSCLOPS]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; vi.spyOn(enemyPokemon, "getMoveType"); - game.move.select(Moves.PLASMA_FISTS); + game.move.select(MoveId.PLASMA_FISTS); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase", false); diff --git a/test/moves/pledge_moves.test.ts b/test/moves/pledge_moves.test.ts index 6c66c4bbe2d..2500563d44e 100644 --- a/test/moves/pledge_moves.test.ts +++ b/test/moves/pledge_moves.test.ts @@ -7,9 +7,9 @@ import { PokemonType } from "#enums/pokemon-type"; import { ArenaTagType } from "#enums/arena-tag-type"; import { Stat } from "#enums/stat"; import { toDmgValue } from "#app/utils/common"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; @@ -33,24 +33,24 @@ describe("Moves - Pledge Moves", () => { game.override .battleStyle("double") .startingLevel(100) - .moveset([Moves.FIRE_PLEDGE, Moves.GRASS_PLEDGE, Moves.WATER_PLEDGE, Moves.SPLASH]) - .enemySpecies(Species.SNORLAX) + .moveset([MoveId.FIRE_PLEDGE, MoveId.GRASS_PLEDGE, MoveId.WATER_PLEDGE, MoveId.SPLASH]) + .enemySpecies(SpeciesId.SNORLAX) .enemyLevel(100) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("Fire Pledge - should be an 80-power Fire-type attack outside of combination", async () => { - await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); - const firePledge = allMoves[Moves.FIRE_PLEDGE]; + const firePledge = allMoves[MoveId.FIRE_PLEDGE]; vi.spyOn(firePledge, "calculateBattlePower"); const playerPokemon = game.scene.getPlayerField(); vi.spyOn(playerPokemon[0], "getMoveType"); - game.move.select(Moves.FIRE_PLEDGE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.FIRE_PLEDGE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("MoveEndPhase", false); @@ -60,9 +60,9 @@ describe("Moves - Pledge Moves", () => { }); it("Fire Pledge - should not combine with an ally using Fire Pledge", async () => { - await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); - const firePledge = allMoves[Moves.FIRE_PLEDGE]; + const firePledge = allMoves[MoveId.FIRE_PLEDGE]; vi.spyOn(firePledge, "calculateBattlePower"); const playerPokemon = game.scene.getPlayerField(); @@ -70,8 +70,8 @@ describe("Moves - Pledge Moves", () => { const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.FIRE_PLEDGE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.FIRE_PLEDGE, 0, BattlerIndex.ENEMY_2); + game.move.select(MoveId.FIRE_PLEDGE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.FIRE_PLEDGE, 0, BattlerIndex.ENEMY_2); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); @@ -87,14 +87,14 @@ describe("Moves - Pledge Moves", () => { }); it("Fire Pledge - should not combine with an enemy's Pledge move", async () => { - game.override.battleStyle("single").enemyMoveset(Moves.GRASS_PLEDGE); + game.override.battleStyle("single").enemyMoveset(MoveId.GRASS_PLEDGE); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.FIRE_PLEDGE); + game.move.select(MoveId.FIRE_PLEDGE); await game.toNextTurn(); @@ -106,9 +106,9 @@ describe("Moves - Pledge Moves", () => { }); it("Grass Pledge - should combine with Fire Pledge to form a 150-power Fire-type attack that creates a 'sea of fire'", async () => { - await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); - const grassPledge = allMoves[Moves.GRASS_PLEDGE]; + const grassPledge = allMoves[MoveId.GRASS_PLEDGE]; vi.spyOn(grassPledge, "calculateBattlePower"); const playerPokemon = game.scene.getPlayerField(); @@ -117,8 +117,8 @@ describe("Moves - Pledge Moves", () => { vi.spyOn(playerPokemon[1], "getMoveType"); const baseDmgMock = vi.spyOn(enemyPokemon[0], "getBaseDamage"); - game.move.select(Moves.FIRE_PLEDGE, 0, BattlerIndex.ENEMY_2); - game.move.select(Moves.GRASS_PLEDGE, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.FIRE_PLEDGE, 0, BattlerIndex.ENEMY_2); + game.move.select(MoveId.GRASS_PLEDGE, 1, BattlerIndex.ENEMY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); // advance to the end of PLAYER_2's move this turn @@ -139,11 +139,11 @@ describe("Moves - Pledge Moves", () => { }); it("Fire Pledge - should combine with Water Pledge to form a 150-power Water-type attack that creates a 'rainbow'", async () => { - game.override.moveset([Moves.FIRE_PLEDGE, Moves.WATER_PLEDGE, Moves.FIERY_DANCE, Moves.SPLASH]); + game.override.moveset([MoveId.FIRE_PLEDGE, MoveId.WATER_PLEDGE, MoveId.FIERY_DANCE, MoveId.SPLASH]); - await game.classicMode.startBattle([Species.BLASTOISE, Species.VENUSAUR]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.VENUSAUR]); - const firePledge = allMoves[Moves.FIRE_PLEDGE]; + const firePledge = allMoves[MoveId.FIRE_PLEDGE]; vi.spyOn(firePledge, "calculateBattlePower"); const playerPokemon = game.scene.getPlayerField(); @@ -151,8 +151,8 @@ describe("Moves - Pledge Moves", () => { vi.spyOn(playerPokemon[1], "getMoveType"); - game.move.select(Moves.WATER_PLEDGE, 0, BattlerIndex.ENEMY_2); - game.move.select(Moves.FIRE_PLEDGE, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.WATER_PLEDGE, 0, BattlerIndex.ENEMY_2); + game.move.select(MoveId.FIRE_PLEDGE, 1, BattlerIndex.ENEMY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); // advance to the end of PLAYER_2's move this turn @@ -166,8 +166,8 @@ describe("Moves - Pledge Moves", () => { await game.toNextTurn(); - game.move.select(Moves.FIERY_DANCE, 0, BattlerIndex.ENEMY_2); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.FIERY_DANCE, 0, BattlerIndex.ENEMY_2); + game.move.select(MoveId.SPLASH, 1); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -176,9 +176,9 @@ describe("Moves - Pledge Moves", () => { }); it("Water Pledge - should combine with Grass Pledge to form a 150-power Grass-type attack that creates a 'swamp'", async () => { - await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); - const waterPledge = allMoves[Moves.WATER_PLEDGE]; + const waterPledge = allMoves[MoveId.WATER_PLEDGE]; vi.spyOn(waterPledge, "calculateBattlePower"); const playerPokemon = game.scene.getPlayerField(); @@ -187,8 +187,8 @@ describe("Moves - Pledge Moves", () => { vi.spyOn(playerPokemon[1], "getMoveType"); - game.move.select(Moves.GRASS_PLEDGE, 0, BattlerIndex.ENEMY_2); - game.move.select(Moves.WATER_PLEDGE, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.GRASS_PLEDGE, 0, BattlerIndex.ENEMY_2); + game.move.select(MoveId.WATER_PLEDGE, 1, BattlerIndex.ENEMY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); // advance to the end of PLAYER_2's move this turn @@ -205,12 +205,12 @@ describe("Moves - Pledge Moves", () => { }); it("Pledge Moves - should alter turn order when used in combination", async () => { - await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.WATER_PLEDGE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.FIRE_PLEDGE, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.WATER_PLEDGE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.FIRE_PLEDGE, 1, BattlerIndex.ENEMY_2); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2]); // PLAYER_2 should act with a combined move immediately after PLAYER as the second move in the turn @@ -223,23 +223,23 @@ describe("Moves - Pledge Moves", () => { it("Pledge Moves - 'rainbow' effect should not stack with Serene Grace when applied to flinching moves", async () => { game.override - .ability(Abilities.SERENE_GRACE) - .moveset([Moves.FIRE_PLEDGE, Moves.WATER_PLEDGE, Moves.IRON_HEAD, Moves.SPLASH]); + .ability(AbilityId.SERENE_GRACE) + .moveset([MoveId.FIRE_PLEDGE, MoveId.WATER_PLEDGE, MoveId.IRON_HEAD, MoveId.SPLASH]); - await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); - const ironHeadFlinchAttr = allMoves[Moves.IRON_HEAD].getAttrs(FlinchAttr)[0]; + const ironHeadFlinchAttr = allMoves[MoveId.IRON_HEAD].getAttrs(FlinchAttr)[0]; vi.spyOn(ironHeadFlinchAttr, "getMoveChance"); - game.move.select(Moves.WATER_PLEDGE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.FIRE_PLEDGE, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.WATER_PLEDGE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.FIRE_PLEDGE, 1, BattlerIndex.ENEMY_2); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.arena.getTagOnSide(ArenaTagType.WATER_FIRE_PLEDGE, ArenaTagSide.PLAYER)).toBeDefined(); - game.move.select(Moves.IRON_HEAD, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.IRON_HEAD, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase", false); @@ -247,17 +247,17 @@ describe("Moves - Pledge Moves", () => { }); it("Pledge Moves - should have no effect when the second ally's move is cancelled", async () => { - game.override.enemyMoveset([Moves.SPLASH, Moves.SPORE]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.SPORE]); - await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.FIRE_PLEDGE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.GRASS_PLEDGE, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.FIRE_PLEDGE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.GRASS_PLEDGE, 1, BattlerIndex.ENEMY_2); - await game.move.selectEnemyMove(Moves.SPORE, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.SPORE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY_2]); @@ -267,13 +267,13 @@ describe("Moves - Pledge Moves", () => { }); it("Pledge Moves - should ignore redirection from another Pokemon's Storm Drain", async () => { - await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); const enemyPokemon = game.scene.getEnemyField(); - vi.spyOn(enemyPokemon[1], "getAbility").mockReturnValue(allAbilities[Abilities.STORM_DRAIN]); + vi.spyOn(enemyPokemon[1], "getAbility").mockReturnValue(allAbilities[AbilityId.STORM_DRAIN]); - game.move.select(Moves.WATER_PLEDGE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.WATER_PLEDGE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); @@ -284,14 +284,14 @@ describe("Moves - Pledge Moves", () => { }); it("Pledge Moves - should not ignore redirection from another Pokemon's Follow Me", async () => { - game.override.enemyMoveset([Moves.FOLLOW_ME, Moves.SPLASH]); - await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + game.override.enemyMoveset([MoveId.FOLLOW_ME, MoveId.SPLASH]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); - game.move.select(Moves.WATER_PLEDGE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.WATER_PLEDGE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.FOLLOW_ME); + await game.move.selectEnemyMove(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.FOLLOW_ME); await game.phaseInterceptor.to("BerryPhase", false); diff --git a/test/moves/pollen_puff.test.ts b/test/moves/pollen_puff.test.ts index 31d5950b47d..d61303bcfcc 100644 --- a/test/moves/pollen_puff.test.ts +++ b/test/moves/pollen_puff.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -23,25 +23,25 @@ describe("Moves - Pollen Puff", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.POLLEN_PUFF]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.POLLEN_PUFF]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should not heal more than once when the user has a source of multi-hit", async () => { - game.override.battleStyle("double").moveset([Moves.POLLEN_PUFF, Moves.ENDURE]).ability(Abilities.PARENTAL_BOND); - await game.classicMode.startBattle([Species.BULBASAUR, Species.OMANYTE]); + game.override.battleStyle("double").moveset([MoveId.POLLEN_PUFF, MoveId.ENDURE]).ability(AbilityId.PARENTAL_BOND); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.OMANYTE]); const [_, rightPokemon] = game.scene.getPlayerField(); rightPokemon.damageAndUpdate(rightPokemon.hp - 1); - game.move.select(Moves.POLLEN_PUFF, 0, BattlerIndex.PLAYER_2); - game.move.select(Moves.ENDURE, 1); + game.move.select(MoveId.POLLEN_PUFF, 0, BattlerIndex.PLAYER_2); + game.move.select(MoveId.ENDURE, 1); await game.phaseInterceptor.to("BerryPhase"); @@ -50,12 +50,12 @@ describe("Moves - Pollen Puff", () => { }); it("should damage an enemy multiple times when the user has a source of multi-hit", async () => { - game.override.moveset([Moves.POLLEN_PUFF]).ability(Abilities.PARENTAL_BOND).enemyLevel(100); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.moveset([MoveId.POLLEN_PUFF]).ability(AbilityId.PARENTAL_BOND).enemyLevel(100); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const target = game.scene.getEnemyPokemon()!; - game.move.select(Moves.POLLEN_PUFF); + game.move.select(MoveId.POLLEN_PUFF); await game.phaseInterceptor.to("BerryPhase"); diff --git a/test/moves/powder.test.ts b/test/moves/powder.test.ts index f076923d746..d335e29996e 100644 --- a/test/moves/powder.test.ts +++ b/test/moves/powder.test.ts @@ -2,10 +2,10 @@ import { BattlerIndex } from "#app/battle"; import { MoveResult, PokemonMove } from "#app/field/pokemon"; import { BerryPhase } from "#app/phases/berry-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; import { PokemonType } from "#enums/pokemon-type"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -30,23 +30,23 @@ describe("Moves - Powder", () => { game.override.battleStyle("single"); game.override - .enemySpecies(Species.SNORLAX) + .enemySpecies(SpeciesId.SNORLAX) .enemyLevel(100) - .enemyMoveset(Moves.EMBER) - .enemyAbility(Abilities.INSOMNIA) + .enemyMoveset(MoveId.EMBER) + .enemyAbility(AbilityId.INSOMNIA) .startingLevel(100) - .moveset([Moves.POWDER, Moves.SPLASH, Moves.FIERY_DANCE, Moves.ROAR]); + .moveset([MoveId.POWDER, MoveId.SPLASH, MoveId.FIERY_DANCE, MoveId.ROAR]); }); it("should cancel the target's Fire-type move, damage the target, and still consume the target's PP", async () => { // Cannot use enemy moveset override for this test, since it interferes with checking PP game.override.enemyMoveset([]); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const enemyPokemon = game.scene.getEnemyPokemon()!; - enemyPokemon.moveset = [new PokemonMove(Moves.EMBER)]; + enemyPokemon.moveset = [new PokemonMove(MoveId.EMBER)]; - game.move.select(Moves.POWDER); + game.move.select(MoveId.POWDER); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.FAIL); @@ -55,7 +55,7 @@ describe("Moves - Powder", () => { await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); @@ -64,13 +64,13 @@ describe("Moves - Powder", () => { }); it("should have no effect against Grass-type Pokemon", async () => { - game.override.enemySpecies(Species.AMOONGUSS); + game.override.enemySpecies(SpeciesId.AMOONGUSS); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.POWDER); + game.move.select(MoveId.POWDER); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); @@ -78,13 +78,13 @@ describe("Moves - Powder", () => { }); it("should have no effect against Pokemon with Overcoat", async () => { - game.override.enemyAbility(Abilities.OVERCOAT); + game.override.enemyAbility(AbilityId.OVERCOAT); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.POWDER); + game.move.select(MoveId.POWDER); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); @@ -92,13 +92,13 @@ describe("Moves - Powder", () => { }); it("should not damage the target if the target has Magic Guard", async () => { - game.override.enemyAbility(Abilities.MAGIC_GUARD); + game.override.enemyAbility(AbilityId.MAGIC_GUARD); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.POWDER); + game.move.select(MoveId.POWDER); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.FAIL); @@ -106,13 +106,13 @@ describe("Moves - Powder", () => { }); it("should not damage the target if Primordial Sea is active", async () => { - game.override.enemyAbility(Abilities.PRIMORDIAL_SEA); + game.override.enemyAbility(AbilityId.PRIMORDIAL_SEA); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.POWDER); + game.move.select(MoveId.POWDER); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.FAIL); @@ -120,13 +120,13 @@ describe("Moves - Powder", () => { }); it("should not prevent the target from thawing out with Flame Wheel", async () => { - game.override.enemyMoveset(Moves.FLAME_WHEEL).enemyStatusEffect(StatusEffect.FREEZE); + game.override.enemyMoveset(MoveId.FLAME_WHEEL).enemyStatusEffect(StatusEffect.FREEZE); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.POWDER); + game.move.select(MoveId.POWDER); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.status?.effect).not.toBe(StatusEffect.FREEZE); @@ -135,13 +135,13 @@ describe("Moves - Powder", () => { }); it("should not allow a target with Protean to change to Fire type", async () => { - game.override.enemyAbility(Abilities.PROTEAN); + game.override.enemyAbility(AbilityId.PROTEAN); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.POWDER); + game.move.select(MoveId.POWDER); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.FAIL); @@ -150,22 +150,22 @@ describe("Moves - Powder", () => { }); it("should cancel Fire-type moves generated by the target's Dancer ability", async () => { - game.override.battleStyle("double").enemySpecies(Species.BLASTOISE).enemyAbility(Abilities.DANCER); + game.override.battleStyle("double").enemySpecies(SpeciesId.BLASTOISE).enemyAbility(AbilityId.DANCER); - await game.classicMode.startBattle([Species.CHARIZARD, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.CHARIZARD]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; // Turn 1: Roar away 1 opponent - game.move.select(Moves.ROAR, 0, BattlerIndex.ENEMY_2); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.ROAR, 0, BattlerIndex.ENEMY_2); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); // Turn 2: Enemy should activate Powder twice: From using Ember, and from copying Fiery Dance via Dancer playerPokemon.hp = playerPokemon.getMaxHp(); - game.move.select(Moves.FIERY_DANCE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.POWDER, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.FIERY_DANCE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.POWDER, 1, BattlerIndex.ENEMY); await game.phaseInterceptor.to(MoveEffectPhase); const enemyStartingHp = enemyPokemon.hp; @@ -182,29 +182,29 @@ describe("Moves - Powder", () => { }); it("should cancel Fiery Dance, then prevent it from triggering Dancer", async () => { - game.override.ability(Abilities.DANCER).enemyMoveset(Moves.FIERY_DANCE); + game.override.ability(AbilityId.DANCER).enemyMoveset(MoveId.FIERY_DANCE); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.POWDER); + game.move.select(MoveId.POWDER); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.FAIL); expect(enemyPokemon.hp).toBe(Math.ceil((3 * enemyPokemon.getMaxHp()) / 4)); - expect(playerPokemon.getLastXMoves()[0].move).toBe(Moves.POWDER); + expect(playerPokemon.getLastXMoves()[0].move).toBe(MoveId.POWDER); }); it("should cancel Revelation Dance if it becomes a Fire-type move", async () => { - game.override.enemySpecies(Species.CHARIZARD).enemyMoveset(Moves.REVELATION_DANCE); + game.override.enemySpecies(SpeciesId.CHARIZARD).enemyMoveset(MoveId.REVELATION_DANCE); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.POWDER); + game.move.select(MoveId.POWDER); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.FAIL); @@ -212,13 +212,13 @@ describe("Moves - Powder", () => { }); it("should cancel Shell Trap and damage the target, even if the move would fail", async () => { - game.override.enemyMoveset(Moves.SHELL_TRAP); + game.override.enemyMoveset(MoveId.SHELL_TRAP); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.POWDER); + game.move.select(MoveId.POWDER); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.FAIL); @@ -226,15 +226,15 @@ describe("Moves - Powder", () => { }); it("should cancel Grass Pledge if used after ally's Fire Pledge", async () => { - game.override.enemyMoveset([Moves.FIRE_PLEDGE, Moves.GRASS_PLEDGE]).battleStyle("double"); + game.override.enemyMoveset([MoveId.FIRE_PLEDGE, MoveId.GRASS_PLEDGE]).battleStyle("double"); - await game.classicMode.startBattle([Species.CHARIZARD, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.CHARIZARD]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.POWDER, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.GRASS_PLEDGE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.FIRE_PLEDGE, BattlerIndex.PLAYER); + game.move.select(MoveId.POWDER, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.GRASS_PLEDGE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.FIRE_PLEDGE, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY_2, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(BerryPhase, false); @@ -243,15 +243,15 @@ describe("Moves - Powder", () => { }); it("should cancel Fire Pledge if used before ally's Water Pledge", async () => { - game.override.enemyMoveset([Moves.FIRE_PLEDGE, Moves.WATER_PLEDGE]).battleStyle("double"); + game.override.enemyMoveset([MoveId.FIRE_PLEDGE, MoveId.WATER_PLEDGE]).battleStyle("double"); - await game.classicMode.startBattle([Species.CHARIZARD, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.CHARIZARD]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.POWDER, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.FIRE_PLEDGE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.WATER_PLEDGE, BattlerIndex.PLAYER); + game.move.select(MoveId.POWDER, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.FIRE_PLEDGE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.WATER_PLEDGE, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to(BerryPhase, false); @@ -260,15 +260,15 @@ describe("Moves - Powder", () => { }); it("should NOT cancel Fire Pledge if used after ally's Water Pledge", async () => { - game.override.enemyMoveset([Moves.FIRE_PLEDGE, Moves.WATER_PLEDGE]).battleStyle("double"); + game.override.enemyMoveset([MoveId.FIRE_PLEDGE, MoveId.WATER_PLEDGE]).battleStyle("double"); - await game.classicMode.startBattle([Species.CHARIZARD, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.CHARIZARD]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.POWDER, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.FIRE_PLEDGE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.WATER_PLEDGE, BattlerIndex.PLAYER); + game.move.select(MoveId.POWDER, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.FIRE_PLEDGE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.WATER_PLEDGE, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY_2, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(BerryPhase, false); diff --git a/test/moves/power_shift.test.ts b/test/moves/power_shift.test.ts index 0fee044f5ad..cd5252c3f2f 100644 --- a/test/moves/power_shift.test.ts +++ b/test/moves/power_shift.test.ts @@ -1,7 +1,7 @@ -import { Moves } from "#app/enums/moves"; -import { Species } from "#app/enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#app/enums/stat"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -22,22 +22,22 @@ describe("Moves - Power Shift", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.POWER_SHIFT, Moves.BULK_UP]) + .moveset([MoveId.POWER_SHIFT, MoveId.BULK_UP]) .battleStyle("single") - .ability(Abilities.BALL_FETCH) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .ability(AbilityId.BALL_FETCH) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("switches the user's raw Attack stat with its raw Defense stat", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; playerPokemon.setStat(Stat.ATK, 10, false); playerPokemon.setStat(Stat.DEF, 20, false); - game.move.select(Moves.BULK_UP); + game.move.select(MoveId.BULK_UP); await game.phaseInterceptor.to("TurnEndPhase"); @@ -47,7 +47,7 @@ describe("Moves - Power Shift", () => { await game.toNextTurn(); - game.move.select(Moves.POWER_SHIFT); + game.move.select(MoveId.POWER_SHIFT); await game.phaseInterceptor.to("TurnEndPhase"); diff --git a/test/moves/power_split.test.ts b/test/moves/power_split.test.ts index ca712f0a64e..6e0763fb87d 100644 --- a/test/moves/power_split.test.ts +++ b/test/moves/power_split.test.ts @@ -1,11 +1,11 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { Stat } from "#enums/stat"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; describe("Moves - Power Split", () => { let phaserGame: Phaser.Game; @@ -25,16 +25,16 @@ describe("Moves - Power Split", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemyAbility(Abilities.NONE) - .enemySpecies(Species.MEW) + .enemyAbility(AbilityId.NONE) + .enemySpecies(SpeciesId.MEW) .enemyLevel(200) - .moveset([Moves.POWER_SPLIT]) - .ability(Abilities.NONE); + .moveset([MoveId.POWER_SPLIT]) + .ability(AbilityId.NONE); }); it("should average the user's ATK and SPATK stats with those of the target", async () => { - game.override.enemyMoveset(Moves.SPLASH); - await game.classicMode.startBattle([Species.INDEEDEE]); + game.override.enemyMoveset(MoveId.SPLASH); + await game.classicMode.startBattle([SpeciesId.INDEEDEE]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -42,7 +42,7 @@ describe("Moves - Power Split", () => { const avgAtk = Math.floor((player.getStat(Stat.ATK, false) + enemy.getStat(Stat.ATK, false)) / 2); const avgSpAtk = Math.floor((player.getStat(Stat.SPATK, false) + enemy.getStat(Stat.SPATK, false)) / 2); - game.move.select(Moves.POWER_SPLIT); + game.move.select(MoveId.POWER_SPLIT); await game.phaseInterceptor.to(TurnEndPhase); expect(player.getStat(Stat.ATK, false)).toBe(avgAtk); @@ -53,8 +53,8 @@ describe("Moves - Power Split", () => { }, 20000); it("should be idempotent", async () => { - game.override.enemyMoveset([Moves.POWER_SPLIT]); - await game.classicMode.startBattle([Species.INDEEDEE]); + game.override.enemyMoveset([MoveId.POWER_SPLIT]); + await game.classicMode.startBattle([SpeciesId.INDEEDEE]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -62,10 +62,10 @@ describe("Moves - Power Split", () => { const avgAtk = Math.floor((player.getStat(Stat.ATK, false) + enemy.getStat(Stat.ATK, false)) / 2); const avgSpAtk = Math.floor((player.getStat(Stat.SPATK, false) + enemy.getStat(Stat.SPATK, false)) / 2); - game.move.select(Moves.POWER_SPLIT); + game.move.select(MoveId.POWER_SPLIT); await game.phaseInterceptor.to(TurnEndPhase); - game.move.select(Moves.POWER_SPLIT); + game.move.select(MoveId.POWER_SPLIT); await game.phaseInterceptor.to(TurnEndPhase); expect(player.getStat(Stat.ATK, false)).toBe(avgAtk); diff --git a/test/moves/power_swap.test.ts b/test/moves/power_swap.test.ts index 5f6aa022a51..82662850c77 100644 --- a/test/moves/power_swap.test.ts +++ b/test/moves/power_swap.test.ts @@ -1,11 +1,11 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { Stat, BATTLE_STATS } from "#enums/stat"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { MoveEndPhase } from "#app/phases/move-end-phase"; describe("Moves - Power Swap", () => { @@ -25,23 +25,23 @@ describe("Moves - Power Swap", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) - .enemySpecies(Species.INDEEDEE) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) + .enemySpecies(SpeciesId.INDEEDEE) .enemyLevel(200) - .moveset([Moves.POWER_SWAP]) - .ability(Abilities.NONE); + .moveset([MoveId.POWER_SWAP]) + .ability(AbilityId.NONE); }); it("should swap the user's ATK and SPATK stat stages with the target's", async () => { - await game.classicMode.startBattle([Species.INDEEDEE]); + await game.classicMode.startBattle([SpeciesId.INDEEDEE]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy.summonData, "statStages", "get").mockReturnValue(new Array(BATTLE_STATS.length).fill(1)); - game.move.select(Moves.POWER_SWAP); + game.move.select(MoveId.POWER_SWAP); await game.phaseInterceptor.to(MoveEndPhase); diff --git a/test/moves/power_trick.test.ts b/test/moves/power_trick.test.ts index 181eeca81bc..af90525d263 100644 --- a/test/moves/power_trick.test.ts +++ b/test/moves/power_trick.test.ts @@ -1,11 +1,11 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { Stat } from "#enums/stat"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; describe("Moves - Power Trick", () => { @@ -26,22 +26,22 @@ describe("Moves - Power Trick", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) - .enemySpecies(Species.MEW) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) + .enemySpecies(SpeciesId.MEW) .enemyLevel(200) - .moveset([Moves.POWER_TRICK]) - .ability(Abilities.BALL_FETCH); + .moveset([MoveId.POWER_TRICK]) + .ability(AbilityId.BALL_FETCH); }); it("swaps the user's ATK and DEF stats", async () => { - await game.classicMode.startBattle([Species.SHUCKLE]); + await game.classicMode.startBattle([SpeciesId.SHUCKLE]); const player = game.scene.getPlayerPokemon()!; const baseATK = player.getStat(Stat.ATK, false); const baseDEF = player.getStat(Stat.DEF, false); - game.move.select(Moves.POWER_TRICK); + game.move.select(MoveId.POWER_TRICK); await game.phaseInterceptor.to(TurnEndPhase); @@ -51,17 +51,17 @@ describe("Moves - Power Trick", () => { }); it("resets initial ATK and DEF stat swap when used consecutively", async () => { - await game.classicMode.startBattle([Species.SHUCKLE]); + await game.classicMode.startBattle([SpeciesId.SHUCKLE]); const player = game.scene.getPlayerPokemon()!; const baseATK = player.getStat(Stat.ATK, false); const baseDEF = player.getStat(Stat.DEF, false); - game.move.select(Moves.POWER_TRICK); + game.move.select(MoveId.POWER_TRICK); await game.phaseInterceptor.to(TurnEndPhase); - game.move.select(Moves.POWER_TRICK); + game.move.select(MoveId.POWER_TRICK); await game.phaseInterceptor.to(TurnEndPhase); @@ -71,13 +71,13 @@ describe("Moves - Power Trick", () => { }); it("should pass effect when using BATON_PASS", async () => { - await game.classicMode.startBattle([Species.SHUCKLE, Species.SHUCKLE]); - await game.override.moveset([Moves.POWER_TRICK, Moves.BATON_PASS]); + await game.classicMode.startBattle([SpeciesId.SHUCKLE, SpeciesId.SHUCKLE]); + await game.override.moveset([MoveId.POWER_TRICK, MoveId.BATON_PASS]); const player = game.scene.getPlayerPokemon()!; player.addTag(BattlerTagType.POWER_TRICK); - game.move.select(Moves.BATON_PASS); + game.move.select(MoveId.BATON_PASS); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to(TurnEndPhase); @@ -92,13 +92,13 @@ describe("Moves - Power Trick", () => { }); it("should remove effect after using Transform", async () => { - await game.classicMode.startBattle([Species.SHUCKLE, Species.SHUCKLE]); - await game.override.moveset([Moves.POWER_TRICK, Moves.TRANSFORM]); + await game.classicMode.startBattle([SpeciesId.SHUCKLE, SpeciesId.SHUCKLE]); + await game.override.moveset([MoveId.POWER_TRICK, MoveId.TRANSFORM]); const player = game.scene.getPlayerPokemon()!; player.addTag(BattlerTagType.POWER_TRICK); - game.move.select(Moves.TRANSFORM); + game.move.select(MoveId.TRANSFORM); await game.phaseInterceptor.to(TurnEndPhase); diff --git a/test/moves/protect.test.ts b/test/moves/protect.test.ts index 14844019b31..519021023fa 100644 --- a/test/moves/protect.test.ts +++ b/test/moves/protect.test.ts @@ -1,9 +1,9 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; import GameManager from "#test/testUtils/gameManager"; -import { Species } from "#enums/species"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; +import { SpeciesId } from "#enums/species-id"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; import { Stat } from "#enums/stat"; import { allMoves } from "#app/data/data-lists"; import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; @@ -29,22 +29,22 @@ describe("Moves - Protect", () => { game.override.battleStyle("single"); - game.override.moveset([Moves.PROTECT]); - game.override.enemySpecies(Species.SNORLAX); + game.override.moveset([MoveId.PROTECT]); + game.override.enemySpecies(SpeciesId.SNORLAX); - game.override.enemyAbility(Abilities.INSOMNIA); - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemyAbility(AbilityId.INSOMNIA); + game.override.enemyMoveset([MoveId.TACKLE]); game.override.startingLevel(100); game.override.enemyLevel(100); }); test("should protect the user from attacks", async () => { - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.PROTECT); + game.move.select(MoveId.PROTECT); await game.phaseInterceptor.to("BerryPhase", false); @@ -52,14 +52,14 @@ describe("Moves - Protect", () => { }); test("should prevent secondary effects from the opponent's attack", async () => { - game.override.enemyMoveset([Moves.CEASELESS_EDGE]); - vi.spyOn(allMoves[Moves.CEASELESS_EDGE], "accuracy", "get").mockReturnValue(100); + game.override.enemyMoveset([MoveId.CEASELESS_EDGE]); + vi.spyOn(allMoves[MoveId.CEASELESS_EDGE], "accuracy", "get").mockReturnValue(100); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.PROTECT); + game.move.select(MoveId.PROTECT); await game.phaseInterceptor.to("BerryPhase", false); @@ -68,13 +68,13 @@ describe("Moves - Protect", () => { }); test("should protect the user from status moves", async () => { - game.override.enemyMoveset([Moves.CHARM]); + game.override.enemyMoveset([MoveId.CHARM]); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.PROTECT); + game.move.select(MoveId.PROTECT); await game.phaseInterceptor.to("BerryPhase", false); @@ -82,14 +82,14 @@ describe("Moves - Protect", () => { }); test("should stop subsequent hits of a multi-hit move", async () => { - game.override.enemyMoveset([Moves.TACHYON_CUTTER]); + game.override.enemyMoveset([MoveId.TACHYON_CUTTER]); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.PROTECT); + game.move.select(MoveId.PROTECT); await game.phaseInterceptor.to("BerryPhase", false); @@ -98,14 +98,14 @@ describe("Moves - Protect", () => { }); test("should fail if the user is the last to move in the turn", async () => { - game.override.enemyMoveset([Moves.PROTECT]); + game.override.enemyMoveset([MoveId.PROTECT]); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.PROTECT); + game.move.select(MoveId.PROTECT); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); diff --git a/test/moves/psycho_shift.test.ts b/test/moves/psycho_shift.test.ts index 678742906c7..f92eea5fd38 100644 --- a/test/moves/psycho_shift.test.ts +++ b/test/moves/psycho_shift.test.ts @@ -1,7 +1,7 @@ import { StatusEffect } from "#app/enums/status-effect"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -23,25 +23,25 @@ describe("Moves - Psycho Shift", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.PSYCHO_SHIFT]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.PSYCHO_SHIFT]) + .ability(AbilityId.BALL_FETCH) .statusEffect(StatusEffect.POISON) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) + .enemySpecies(SpeciesId.MAGIKARP) .enemyLevel(20) - .enemyAbility(Abilities.SYNCHRONIZE) - .enemyMoveset(Moves.SPLASH); + .enemyAbility(AbilityId.SYNCHRONIZE) + .enemyMoveset(MoveId.SPLASH); }); it("If Psycho Shift is used on a Pokémon with Synchronize, the user of Psycho Shift will already be afflicted with a status condition when Synchronize activates", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const playerPokemon = game.scene.getPlayerPokemon(); const enemyPokemon = game.scene.getEnemyPokemon(); expect(enemyPokemon?.status).toBeUndefined(); - game.move.select(Moves.PSYCHO_SHIFT); + game.move.select(MoveId.PSYCHO_SHIFT); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon?.status).toBeNull(); expect(enemyPokemon?.status).toBeDefined(); diff --git a/test/moves/purify.test.ts b/test/moves/purify.test.ts index 0439ba39108..cab0a70818f 100644 --- a/test/moves/purify.test.ts +++ b/test/moves/purify.test.ts @@ -2,8 +2,8 @@ import { BattlerIndex } from "#app/battle"; import { Status } from "#app/data/status-effect"; import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; import { MoveEndPhase } from "#app/phases/move-end-phase"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -27,13 +27,13 @@ describe("Moves - Purify", () => { game = new GameManager(phaserGame); game.override.battleStyle("single"); - game.override.starterSpecies(Species.PYUKUMUKU); + game.override.starterSpecies(SpeciesId.PYUKUMUKU); game.override.startingLevel(10); - game.override.moveset([Moves.PURIFY, Moves.SIZZLY_SLIDE]); + game.override.moveset([MoveId.PURIFY, MoveId.SIZZLY_SLIDE]); - game.override.enemySpecies(Species.MAGIKARP); + game.override.enemySpecies(SpeciesId.MAGIKARP); game.override.enemyLevel(10); - game.override.enemyMoveset([Moves.SPLASH, Moves.NONE, Moves.NONE, Moves.NONE]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.NONE, MoveId.NONE, MoveId.NONE]); }); test("Purify heals opponent status effect and restores user hp", async () => { @@ -45,7 +45,7 @@ describe("Moves - Purify", () => { playerPokemon.hp = playerPokemon.getMaxHp() - 1; enemyPokemon.status = new Status(StatusEffect.BURN); - game.move.select(Moves.PURIFY); + game.move.select(MoveId.PURIFY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEndPhase); @@ -61,7 +61,7 @@ describe("Moves - Purify", () => { playerPokemon.hp = playerPokemon.getMaxHp() - 1; const playerInitialHp = playerPokemon.hp; - game.move.select(Moves.PURIFY); + game.move.select(MoveId.PURIFY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEndPhase); diff --git a/test/moves/quash.test.ts b/test/moves/quash.test.ts index f242dafe365..88cb0aba31f 100644 --- a/test/moves/quash.test.ts +++ b/test/moves/quash.test.ts @@ -1,6 +1,6 @@ -import { Species } from "#enums/species"; -import { Moves } from "#enums/moves"; -import { Abilities } from "#app/enums/abilities"; +import { SpeciesId } from "#enums/species-id"; +import { MoveId } from "#enums/move-id"; +import { AbilityId } from "#enums/ability-id"; import { BattlerIndex } from "#app/battle"; import { WeatherType } from "#enums/weather-type"; import { MoveResult } from "#app/field/pokemon"; @@ -27,20 +27,20 @@ describe("Moves - Quash", () => { game.override .battleStyle("double") .enemyLevel(1) - .enemySpecies(Species.SLOWPOKE) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset([Moves.RAIN_DANCE, Moves.SPLASH]) - .ability(Abilities.BALL_FETCH) - .moveset([Moves.QUASH, Moves.SUNNY_DAY, Moves.RAIN_DANCE, Moves.SPLASH]); + .enemySpecies(SpeciesId.SLOWPOKE) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset([MoveId.RAIN_DANCE, MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH) + .moveset([MoveId.QUASH, MoveId.SUNNY_DAY, MoveId.RAIN_DANCE, MoveId.SPLASH]); }); it("makes the target move last in a turn, ignoring priority", async () => { - await game.classicMode.startBattle([Species.ACCELGOR, Species.RATTATA]); + await game.classicMode.startBattle([SpeciesId.ACCELGOR, SpeciesId.RATTATA]); - game.move.select(Moves.QUASH, 0, BattlerIndex.PLAYER_2); - game.move.select(Moves.SUNNY_DAY, 1); - await game.move.selectEnemyMove(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.RAIN_DANCE); + game.move.select(MoveId.QUASH, 0, BattlerIndex.PLAYER_2); + game.move.select(MoveId.SUNNY_DAY, 1); + await game.move.selectEnemyMove(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.RAIN_DANCE); await game.phaseInterceptor.to("TurnEndPhase", false); // will be sunny if player_2 moved last because of quash, rainy otherwise @@ -48,9 +48,9 @@ describe("Moves - Quash", () => { }); it("fails if the target has already moved", async () => { - await game.classicMode.startBattle([Species.ACCELGOR, Species.RATTATA]); - game.move.select(Moves.SPLASH, 0); - game.move.select(Moves.QUASH, 1, BattlerIndex.PLAYER); + await game.classicMode.startBattle([SpeciesId.ACCELGOR, SpeciesId.RATTATA]); + game.move.select(MoveId.SPLASH, 0); + game.move.select(MoveId.QUASH, 1, BattlerIndex.PLAYER); await game.phaseInterceptor.to("MoveEndPhase"); await game.phaseInterceptor.to("MoveEndPhase"); @@ -59,37 +59,37 @@ describe("Moves - Quash", () => { }); it("makes multiple quashed targets move in speed order at the end of the turn", async () => { - game.override.enemySpecies(Species.NINJASK).enemyLevel(100); + game.override.enemySpecies(SpeciesId.NINJASK).enemyLevel(100); - await game.classicMode.startBattle([Species.ACCELGOR, Species.RATTATA]); + await game.classicMode.startBattle([SpeciesId.ACCELGOR, SpeciesId.RATTATA]); // both users are quashed - rattata is slower so sun should be up at end of turn - game.move.select(Moves.RAIN_DANCE, 0); - game.move.select(Moves.SUNNY_DAY, 1); + game.move.select(MoveId.RAIN_DANCE, 0); + game.move.select(MoveId.SUNNY_DAY, 1); - await game.move.selectEnemyMove(Moves.QUASH, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.QUASH, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.QUASH, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.QUASH, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("TurnEndPhase", false); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SUNNY); }); it("respects trick room", async () => { - game.override.enemyMoveset([Moves.RAIN_DANCE, Moves.SPLASH, Moves.TRICK_ROOM]); + game.override.enemyMoveset([MoveId.RAIN_DANCE, MoveId.SPLASH, MoveId.TRICK_ROOM]); - await game.classicMode.startBattle([Species.ACCELGOR, Species.RATTATA]); - game.move.select(Moves.SPLASH, 0); - game.move.select(Moves.SPLASH, 1); + await game.classicMode.startBattle([SpeciesId.ACCELGOR, SpeciesId.RATTATA]); + game.move.select(MoveId.SPLASH, 0); + game.move.select(MoveId.SPLASH, 1); - await game.move.selectEnemyMove(Moves.TRICK_ROOM); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.TRICK_ROOM); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("TurnInitPhase"); // both users are quashed - accelgor should move last w/ TR so rain should be up at end of turn - game.move.select(Moves.RAIN_DANCE, 0); - game.move.select(Moves.SUNNY_DAY, 1); + game.move.select(MoveId.RAIN_DANCE, 0); + game.move.select(MoveId.SUNNY_DAY, 1); - await game.move.selectEnemyMove(Moves.QUASH, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.QUASH, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.QUASH, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.QUASH, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("TurnEndPhase", false); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.RAIN); diff --git a/test/moves/quick_guard.test.ts b/test/moves/quick_guard.test.ts index d9970ce64fa..0c0ab8d6ad0 100644 --- a/test/moves/quick_guard.test.ts +++ b/test/moves/quick_guard.test.ts @@ -1,9 +1,9 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; import GameManager from "#test/testUtils/gameManager"; -import { Species } from "#enums/species"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; +import { SpeciesId } from "#enums/species-id"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; import { Stat } from "#enums/stat"; import { BattlerIndex } from "#app/battle"; import { MoveResult } from "#app/field/pokemon"; @@ -27,23 +27,23 @@ describe("Moves - Quick Guard", () => { game.override.battleStyle("double"); - game.override.moveset([Moves.QUICK_GUARD, Moves.SPLASH, Moves.FOLLOW_ME]); + game.override.moveset([MoveId.QUICK_GUARD, MoveId.SPLASH, MoveId.FOLLOW_ME]); - game.override.enemySpecies(Species.SNORLAX); - game.override.enemyMoveset([Moves.QUICK_ATTACK]); - game.override.enemyAbility(Abilities.INSOMNIA); + game.override.enemySpecies(SpeciesId.SNORLAX); + game.override.enemyMoveset([MoveId.QUICK_ATTACK]); + game.override.enemyAbility(AbilityId.INSOMNIA); game.override.startingLevel(100); game.override.enemyLevel(100); }); test("should protect the user and allies from priority moves", async () => { - await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); const playerPokemon = game.scene.getPlayerField(); - game.move.select(Moves.QUICK_GUARD); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.QUICK_GUARD); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase", false); @@ -51,15 +51,15 @@ describe("Moves - Quick Guard", () => { }); test("should protect the user and allies from Prankster-boosted moves", async () => { - game.override.enemyAbility(Abilities.PRANKSTER); - game.override.enemyMoveset([Moves.GROWL]); + game.override.enemyAbility(AbilityId.PRANKSTER); + game.override.enemyMoveset([MoveId.GROWL]); - await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); const playerPokemon = game.scene.getPlayerField(); - game.move.select(Moves.QUICK_GUARD); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.QUICK_GUARD); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase", false); @@ -67,15 +67,15 @@ describe("Moves - Quick Guard", () => { }); test("should stop subsequent hits of a multi-hit priority move", async () => { - game.override.enemyMoveset([Moves.WATER_SHURIKEN]); + game.override.enemyMoveset([MoveId.WATER_SHURIKEN]); - await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.QUICK_GUARD); - game.move.select(Moves.FOLLOW_ME, 1); + game.move.select(MoveId.QUICK_GUARD); + game.move.select(MoveId.FOLLOW_ME, 1); await game.phaseInterceptor.to("BerryPhase", false); @@ -85,14 +85,14 @@ describe("Moves - Quick Guard", () => { test("should fail if the user is the last to move in the turn", async () => { game.override.battleStyle("single"); - game.override.enemyMoveset([Moves.QUICK_GUARD]); + game.override.enemyMoveset([MoveId.QUICK_GUARD]); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.QUICK_GUARD); + game.move.select(MoveId.QUICK_GUARD); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); diff --git a/test/moves/rage_fist.test.ts b/test/moves/rage_fist.test.ts index 9e5810039a8..cd9147637a5 100644 --- a/test/moves/rage_fist.test.ts +++ b/test/moves/rage_fist.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { allMoves } from "#app/data/data-lists"; import type Move from "#app/data/moves/move"; import GameManager from "#test/testUtils/gameManager"; @@ -25,24 +25,24 @@ describe("Moves - Rage Fist", () => { }); beforeEach(() => { - move = allMoves[Moves.RAGE_FIST]; + move = allMoves[MoveId.RAGE_FIST]; game = new GameManager(phaserGame); game.override .battleStyle("single") - .moveset([Moves.RAGE_FIST, Moves.SPLASH, Moves.SUBSTITUTE, Moves.TIDY_UP]) + .moveset([MoveId.RAGE_FIST, MoveId.SPLASH, MoveId.SUBSTITUTE, MoveId.TIDY_UP]) .startingLevel(100) .enemyLevel(1) - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.DOUBLE_KICK); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.DOUBLE_KICK); vi.spyOn(move, "calculateBattlePower"); }); it("should gain power per hit taken", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.RAGE_FIST); + game.move.select(MoveId.RAGE_FIST); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -50,17 +50,17 @@ describe("Moves - Rage Fist", () => { }); it("caps at 6 hits taken", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); // spam splash against magikarp hitting us 2 times per turn - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); - game.move.select(Moves.RAGE_FIST); + game.move.select(MoveId.RAGE_FIST); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -70,12 +70,12 @@ describe("Moves - Rage Fist", () => { }); it("should not count substitute hits or confusion damage", async () => { - game.override.enemySpecies(Species.SHUCKLE).enemyMoveset([Moves.CONFUSE_RAY, Moves.DOUBLE_KICK]); + game.override.enemySpecies(SpeciesId.SHUCKLE).enemyMoveset([MoveId.CONFUSE_RAY, MoveId.DOUBLE_KICK]); - await game.classicMode.startBattle([Species.REGIROCK]); + await game.classicMode.startBattle([SpeciesId.REGIROCK]); - game.move.select(Moves.SUBSTITUTE); - await game.move.selectEnemyMove(Moves.DOUBLE_KICK); + game.move.select(MoveId.SUBSTITUTE); + await game.move.selectEnemyMove(MoveId.DOUBLE_KICK); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); @@ -83,13 +83,13 @@ describe("Moves - Rage Fist", () => { expect(game.scene.getPlayerPokemon()?.battleData.hitCount).toBe(0); // remove substitute and get confused - game.move.select(Moves.TIDY_UP); - await game.move.selectEnemyMove(Moves.CONFUSE_RAY); + game.move.select(MoveId.TIDY_UP); + await game.move.selectEnemyMove(MoveId.CONFUSE_RAY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); - game.move.select(Moves.RAGE_FIST); - await game.move.selectEnemyMove(Moves.CONFUSE_RAY); + game.move.select(MoveId.RAGE_FIST); + await game.move.selectEnemyMove(MoveId.CONFUSE_RAY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceConfusionActivation(true); await game.toNextTurn(); @@ -99,15 +99,15 @@ describe("Moves - Rage Fist", () => { }); it("should maintain hits recieved between wild waves", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.RAGE_FIST); + game.move.select(MoveId.RAGE_FIST); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextWave(); expect(game.scene.getPlayerPokemon()?.battleData.hitCount).toBe(2); - game.move.select(Moves.RAGE_FIST); + game.move.select(MoveId.RAGE_FIST); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -116,14 +116,14 @@ describe("Moves - Rage Fist", () => { }); it("should reset hits recieved before trainer battles", async () => { - await game.classicMode.startBattle([Species.IRON_HANDS]); + await game.classicMode.startBattle([SpeciesId.IRON_HANDS]); const ironHands = game.scene.getPlayerPokemon()!; expect(ironHands).toBeDefined(); // beat up a magikarp - game.move.select(Moves.RAGE_FIST); - await game.move.selectEnemyMove(Moves.DOUBLE_KICK); + game.move.select(MoveId.RAGE_FIST); + await game.move.selectEnemyMove(MoveId.DOUBLE_KICK); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -138,15 +138,15 @@ describe("Moves - Rage Fist", () => { }); it("should reset hits recieved before new biome", async () => { - game.override.enemySpecies(Species.MAGIKARP).startingWave(10); + game.override.enemySpecies(SpeciesId.MAGIKARP).startingWave(10); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(Moves.RAGE_FIST); + game.move.select(MoveId.RAGE_FIST); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); - game.move.select(Moves.RAGE_FIST); + game.move.select(MoveId.RAGE_FIST); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase", false); @@ -154,7 +154,7 @@ describe("Moves - Rage Fist", () => { }); it("should not reset if switched out or on reload", async () => { - game.override.enemyMoveset(Moves.TACKLE); + game.override.enemyMoveset(MoveId.TACKLE); const getPartyHitCount = () => game.scene @@ -162,10 +162,10 @@ describe("Moves - Rage Fist", () => { .filter(p => !!p) .map(m => m.battleData.hitCount); - await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); // Charizard hit - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); expect(getPartyHitCount()).toEqual([1, 0]); @@ -181,12 +181,12 @@ describe("Moves - Rage Fist", () => { expect(getPartyHitCount()).toEqual([2, 1]); // Charizard rage fist - game.move.select(Moves.RAGE_FIST); + game.move.select(MoveId.RAGE_FIST); await game.phaseInterceptor.to("MoveEndPhase"); const charizard = game.scene.getPlayerPokemon()!; expect(charizard).toBeDefined(); - expect(charizard.species.speciesId).toBe(Species.CHARIZARD); + expect(charizard.species.speciesId).toBe(SpeciesId.CHARIZARD); expect(move.calculateBattlePower).toHaveLastReturnedWith(150); // go to new wave, reload game and beat up another poor sap @@ -195,7 +195,7 @@ describe("Moves - Rage Fist", () => { await game.reload.reloadSession(); // outsped and oneshot means power rmains same as prior - game.move.select(Moves.RAGE_FIST); + game.move.select(MoveId.RAGE_FIST); await game.phaseInterceptor.to("MoveEndPhase"); expect(move.calculateBattlePower).toHaveLastReturnedWith(150); }); diff --git a/test/moves/rage_powder.test.ts b/test/moves/rage_powder.test.ts index 206fd590896..e3212e9876c 100644 --- a/test/moves/rage_powder.test.ts +++ b/test/moves/rage_powder.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; @@ -23,23 +23,23 @@ describe("Moves - Rage Powder", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleStyle("double"); - game.override.enemySpecies(Species.SNORLAX); + game.override.enemySpecies(SpeciesId.SNORLAX); game.override.startingLevel(100); game.override.enemyLevel(100); - game.override.moveset([Moves.FOLLOW_ME, Moves.RAGE_POWDER, Moves.SPOTLIGHT, Moves.QUICK_ATTACK]); - game.override.enemyMoveset([Moves.RAGE_POWDER, Moves.TACKLE, Moves.SPLASH]); + game.override.moveset([MoveId.FOLLOW_ME, MoveId.RAGE_POWDER, MoveId.SPOTLIGHT, MoveId.QUICK_ATTACK]); + game.override.enemyMoveset([MoveId.RAGE_POWDER, MoveId.TACKLE, MoveId.SPLASH]); }); test("move effect should be bypassed by Grass type", async () => { - await game.classicMode.startBattle([Species.AMOONGUSS, Species.VENUSAUR]); + await game.classicMode.startBattle([SpeciesId.AMOONGUSS, SpeciesId.VENUSAUR]); const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.QUICK_ATTACK, 0, BattlerIndex.ENEMY); - game.move.select(Moves.QUICK_ATTACK, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.QUICK_ATTACK, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.QUICK_ATTACK, 1, BattlerIndex.ENEMY_2); - await game.move.selectEnemyMove(Moves.RAGE_POWDER); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.RAGE_POWDER); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase", false); @@ -49,20 +49,20 @@ describe("Moves - Rage Powder", () => { }); test("move effect should be bypassed by Overcoat", async () => { - game.override.ability(Abilities.OVERCOAT); + game.override.ability(AbilityId.OVERCOAT); // Test with two non-Grass type player Pokemon - await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); const enemyPokemon = game.scene.getEnemyField(); const enemyStartingHp = enemyPokemon.map(p => p.hp); - game.move.select(Moves.QUICK_ATTACK, 0, BattlerIndex.ENEMY); - game.move.select(Moves.QUICK_ATTACK, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.QUICK_ATTACK, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.QUICK_ATTACK, 1, BattlerIndex.ENEMY_2); - await game.move.selectEnemyMove(Moves.RAGE_POWDER); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.RAGE_POWDER); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase", false); diff --git a/test/moves/reflect.test.ts b/test/moves/reflect.test.ts index 191a1a45a09..d13fb7a095c 100644 --- a/test/moves/reflect.test.ts +++ b/test/moves/reflect.test.ts @@ -3,13 +3,13 @@ import { ArenaTagSide } from "#app/data/arena-tag"; import type Move from "#app/data/moves/move"; import { CritOnlyAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import type Pokemon from "#app/field/pokemon"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { NumberHolder } from "#app/utils/common"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -37,17 +37,17 @@ describe("Moves - Reflect", () => { globalScene = game.scene; game.override .battleStyle("single") - .ability(Abilities.NONE) - .moveset([Moves.ABSORB, Moves.ROCK_SLIDE, Moves.TACKLE]) + .ability(AbilityId.NONE) + .moveset([MoveId.ABSORB, MoveId.ROCK_SLIDE, MoveId.TACKLE]) .enemyLevel(100) - .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.REFLECT) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyMoveset(MoveId.REFLECT) .disableCrits(); }); it("reduces damage of physical attacks by half in a single battle", async () => { - const moveToUse = Moves.TACKLE; - await game.classicMode.startBattle([Species.SHUCKLE]); + const moveToUse = MoveId.TACKLE; + await game.classicMode.startBattle([SpeciesId.SHUCKLE]); game.move.select(moveToUse); @@ -64,8 +64,8 @@ describe("Moves - Reflect", () => { it("reduces damage of physical attacks by a third in a double battle", async () => { game.override.battleStyle("double"); - const moveToUse = Moves.ROCK_SLIDE; - await game.classicMode.startBattle([Species.SHUCKLE, Species.SHUCKLE]); + const moveToUse = MoveId.ROCK_SLIDE; + await game.classicMode.startBattle([SpeciesId.SHUCKLE, SpeciesId.SHUCKLE]); game.move.select(moveToUse); game.move.select(moveToUse, 1); @@ -81,8 +81,8 @@ describe("Moves - Reflect", () => { }); it("does not affect special attacks", async () => { - const moveToUse = Moves.ABSORB; - await game.classicMode.startBattle([Species.SHUCKLE]); + const moveToUse = MoveId.ABSORB; + await game.classicMode.startBattle([SpeciesId.SHUCKLE]); game.move.select(moveToUse); @@ -98,9 +98,9 @@ describe("Moves - Reflect", () => { }); it("does not affect critical hits", async () => { - game.override.moveset([Moves.WICKED_BLOW]); - const moveToUse = Moves.WICKED_BLOW; - await game.classicMode.startBattle([Species.SHUCKLE]); + game.override.moveset([MoveId.WICKED_BLOW]); + const moveToUse = MoveId.WICKED_BLOW; + await game.classicMode.startBattle([SpeciesId.SHUCKLE]); game.move.select(moveToUse); await game.phaseInterceptor.to(TurnEndPhase); @@ -115,9 +115,9 @@ describe("Moves - Reflect", () => { }); it("does not affect critical hits", async () => { - game.override.moveset([Moves.WICKED_BLOW]); - const moveToUse = Moves.WICKED_BLOW; - await game.classicMode.startBattle([Species.SHUCKLE]); + game.override.moveset([MoveId.WICKED_BLOW]); + const moveToUse = MoveId.WICKED_BLOW; + await game.classicMode.startBattle([SpeciesId.SHUCKLE]); game.move.select(moveToUse); await game.phaseInterceptor.to(TurnEndPhase); @@ -132,7 +132,7 @@ describe("Moves - Reflect", () => { }); /** - * Calculates the damage of a move multiplied by screen's multiplier, Reflect in this case {@linkcode Moves.REFLECT}. + * Calculates the damage of a move multiplied by screen's multiplier, Reflect in this case {@linkcode MoveId.REFLECT}. * Please note this does not consider other damage calculations except the screen multiplier. * * @param defender - The defending Pokémon. diff --git a/test/moves/reflect_type.test.ts b/test/moves/reflect_type.test.ts index 63772aa746f..86c70ed62f1 100644 --- a/test/moves/reflect_type.test.ts +++ b/test/moves/reflect_type.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { PokemonType } from "#enums/pokemon-type"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -22,32 +22,32 @@ describe("Moves - Reflect Type", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.ability(Abilities.BALL_FETCH).battleStyle("single").disableCrits().enemyAbility(Abilities.BALL_FETCH); + game.override.ability(AbilityId.BALL_FETCH).battleStyle("single").disableCrits().enemyAbility(AbilityId.BALL_FETCH); }); it("will make the user Normal/Grass if targetting a typeless Pokemon affected by Forest's Curse", async () => { game.override - .moveset([Moves.FORESTS_CURSE, Moves.REFLECT_TYPE]) + .moveset([MoveId.FORESTS_CURSE, MoveId.REFLECT_TYPE]) .startingLevel(60) - .enemySpecies(Species.CHARMANDER) - .enemyMoveset([Moves.BURN_UP, Moves.SPLASH]); - await game.classicMode.startBattle([Species.FEEBAS]); + .enemySpecies(SpeciesId.CHARMANDER) + .enemyMoveset([MoveId.BURN_UP, MoveId.SPLASH]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const playerPokemon = game.scene.getPlayerPokemon(); const enemyPokemon = game.scene.getEnemyPokemon(); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.BURN_UP); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.BURN_UP); await game.toNextTurn(); - game.move.select(Moves.FORESTS_CURSE); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.FORESTS_CURSE); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); expect(enemyPokemon?.getTypes().includes(PokemonType.UNKNOWN)).toBe(true); expect(enemyPokemon?.getTypes().includes(PokemonType.GRASS)).toBe(true); - game.move.select(Moves.REFLECT_TYPE); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.REFLECT_TYPE); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon?.getTypes()[0]).toBe(PokemonType.NORMAL); expect(playerPokemon?.getTypes().includes(PokemonType.GRASS)).toBe(true); diff --git a/test/moves/relic_song.test.ts b/test/moves/relic_song.test.ts index 86195e81a24..b3dd400a202 100644 --- a/test/moves/relic_song.test.ts +++ b/test/moves/relic_song.test.ts @@ -1,8 +1,8 @@ import { PokemonType } from "#enums/pokemon-type"; import { Challenges } from "#app/enums/challenges"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -23,25 +23,25 @@ describe("Moves - Relic Song", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.RELIC_SONG, Moves.SPLASH]) + .moveset([MoveId.RELIC_SONG, MoveId.SPLASH]) .battleStyle("single") - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) - .enemySpecies(Species.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) + .enemySpecies(SpeciesId.MAGIKARP) .enemyLevel(100); }); it("swaps Meloetta's form between Aria and Pirouette", async () => { - await game.classicMode.startBattle([Species.MELOETTA]); + await game.classicMode.startBattle([SpeciesId.MELOETTA]); const meloetta = game.scene.getPlayerPokemon()!; - game.move.select(Moves.RELIC_SONG); + game.move.select(MoveId.RELIC_SONG); await game.toNextTurn(); expect(meloetta.formIndex).toBe(1); - game.move.select(Moves.RELIC_SONG); + game.move.select(MoveId.RELIC_SONG); await game.phaseInterceptor.to("BerryPhase"); expect(meloetta.formIndex).toBe(0); @@ -49,13 +49,13 @@ describe("Moves - Relic Song", () => { it("doesn't swap Meloetta's form during a mono-type challenge", async () => { game.challengeMode.addChallenge(Challenges.SINGLE_TYPE, PokemonType.PSYCHIC + 1, 0); - await game.challengeMode.startBattle([Species.MELOETTA]); + await game.challengeMode.startBattle([SpeciesId.MELOETTA]); const meloetta = game.scene.getPlayerPokemon()!; expect(meloetta.formIndex).toBe(0); - game.move.select(Moves.RELIC_SONG); + game.move.select(MoveId.RELIC_SONG); await game.phaseInterceptor.to("BerryPhase"); await game.toNextTurn(); @@ -63,12 +63,12 @@ describe("Moves - Relic Song", () => { }); it("doesn't swap Meloetta's form during biome change (arena reset)", async () => { - game.override.starterForms({ [Species.MELOETTA]: 1 }).startingWave(10); - await game.classicMode.startBattle([Species.MELOETTA]); + game.override.starterForms({ [SpeciesId.MELOETTA]: 1 }).startingWave(10); + await game.classicMode.startBattle([SpeciesId.MELOETTA]); const meloetta = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.toNextWave(); diff --git a/test/moves/retaliate.test.ts b/test/moves/retaliate.test.ts index 24d0cd542cb..16261c71dc3 100644 --- a/test/moves/retaliate.test.ts +++ b/test/moves/retaliate.test.ts @@ -1,8 +1,8 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; -import { Species } from "#enums/species"; -import { Moves } from "#enums/moves"; +import { SpeciesId } from "#enums/species-id"; +import { MoveId } from "#enums/move-id"; import { allMoves } from "#app/data/data-lists"; import type Move from "#app/data/moves/move"; @@ -23,28 +23,28 @@ describe("Moves - Retaliate", () => { }); beforeEach(() => { - retaliate = allMoves[Moves.RETALIATE]; + retaliate = allMoves[MoveId.RETALIATE]; game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemySpecies(Species.SNORLAX) - .enemyMoveset(Moves.RETALIATE) + .enemySpecies(SpeciesId.SNORLAX) + .enemyMoveset(MoveId.RETALIATE) .enemyLevel(100) - .moveset([Moves.RETALIATE, Moves.SPLASH]) + .moveset([MoveId.RETALIATE, MoveId.SPLASH]) .startingLevel(80) .disableCrits(); }); it("increases power if ally died previous turn", async () => { vi.spyOn(retaliate, "calculateBattlePower"); - await game.classicMode.startBattle([Species.ABRA, Species.COBALION]); - game.move.select(Moves.RETALIATE); + await game.classicMode.startBattle([SpeciesId.ABRA, SpeciesId.COBALION]); + game.move.select(MoveId.RETALIATE); await game.phaseInterceptor.to("TurnEndPhase"); expect(retaliate.calculateBattlePower).toHaveLastReturnedWith(70); game.doSelectPartyPokemon(1); await game.toNextTurn(); - game.move.select(Moves.RETALIATE); + game.move.select(MoveId.RETALIATE); await game.phaseInterceptor.to("MoveEffectPhase"); expect(retaliate.calculateBattlePower).toHaveReturnedWith(140); }); diff --git a/test/moves/revival_blessing.test.ts b/test/moves/revival_blessing.test.ts index ded18e3ffb8..07ebf657c66 100644 --- a/test/moves/revival_blessing.test.ts +++ b/test/moves/revival_blessing.test.ts @@ -1,9 +1,9 @@ import { BattlerIndex } from "#app/battle"; import { MoveResult } from "#app/field/pokemon"; import { toDmgValue } from "#app/utils/common"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -25,26 +25,26 @@ describe("Moves - Revival Blessing", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.REVIVAL_BLESSING, Moves.MEMENTO]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.SPLASH, MoveId.REVIVAL_BLESSING, MoveId.MEMENTO]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should revive a selected fainted Pokemon when used by the player", async () => { - await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MAGIKARP]); - game.move.select(Moves.MEMENTO); + game.move.select(MoveId.MEMENTO); game.doSelectPartyPokemon(1, "SwitchPhase"); await game.toNextTurn(); const player = game.scene.getPlayerPokemon()!; - expect(player.species.speciesId).toBe(Species.MAGIKARP); - game.move.select(Moves.REVIVAL_BLESSING); + expect(player.species.speciesId).toBe(SpeciesId.MAGIKARP); + game.move.select(MoveId.REVIVAL_BLESSING); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); game.doSelectPartyPokemon(1, "RevivalBlessingPhase"); @@ -57,15 +57,15 @@ describe("Moves - Revival Blessing", () => { }); it("should revive a random fainted enemy when used by an enemy Trainer", async () => { - game.override.enemyMoveset(Moves.REVIVAL_BLESSING).startingWave(8); + game.override.enemyMoveset(MoveId.REVIVAL_BLESSING).startingWave(8); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("MoveEndPhase", false); @@ -76,9 +76,9 @@ describe("Moves - Revival Blessing", () => { }); it("should fail when there are no fainted Pokemon to target", async () => { - await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MAGIKARP]); - game.move.select(Moves.REVIVAL_BLESSING); + game.move.select(MoveId.REVIVAL_BLESSING); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase", false); @@ -89,17 +89,17 @@ describe("Moves - Revival Blessing", () => { it("should revive a player pokemon and immediately send it back out if used in the same turn it fainted in doubles", async () => { game.override .battleStyle("double") - .enemyMoveset([Moves.SPLASH, Moves.FISSURE]) - .enemyAbility(Abilities.NO_GUARD) + .enemyMoveset([MoveId.SPLASH, MoveId.FISSURE]) + .enemyAbility(AbilityId.NO_GUARD) .enemyLevel(100); - await game.classicMode.startBattle([Species.FEEBAS, Species.MILOTIC, Species.GYARADOS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MILOTIC, SpeciesId.GYARADOS]); const feebas = game.scene.getPlayerField()[0]; - game.move.select(Moves.SPLASH); - game.move.select(Moves.REVIVAL_BLESSING, 1); - await game.move.selectEnemyMove(Moves.FISSURE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.REVIVAL_BLESSING, 1); + await game.move.selectEnemyMove(MoveId.FISSURE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -116,13 +116,17 @@ describe("Moves - Revival Blessing", () => { }); it("should not summon multiple pokemon to the same slot when reviving the enemy ally in doubles", async () => { - game.override.battleStyle("double").enemyMoveset([Moves.REVIVAL_BLESSING]).moveset([Moves.SPLASH]).startingWave(25); // 2nd rival battle - must have 3+ pokemon - await game.classicMode.startBattle([Species.ARCEUS, Species.GIRATINA]); + game.override + .battleStyle("double") + .enemyMoveset([MoveId.REVIVAL_BLESSING]) + .moveset([MoveId.SPLASH]) + .startingWave(25); // 2nd rival battle - must have 3+ pokemon + await game.classicMode.startBattle([SpeciesId.ARCEUS, SpeciesId.GIRATINA]); const enemyFainting = game.scene.getEnemyField()[0]; - game.move.select(Moves.SPLASH, 0); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 0); + game.move.select(MoveId.SPLASH, 1); await game.killPokemon(enemyFainting); await game.phaseInterceptor.to("BerryPhase"); diff --git a/test/moves/role_play.test.ts b/test/moves/role_play.test.ts index d4893212003..3c3f0afb1a3 100644 --- a/test/moves/role_play.test.ts +++ b/test/moves/role_play.test.ts @@ -1,7 +1,7 @@ import { Stat } from "#app/enums/stat"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -23,29 +23,29 @@ describe("Moves - Role Play", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.ROLE_PLAY]) - .ability(Abilities.ADAPTABILITY) + .moveset([MoveId.SPLASH, MoveId.ROLE_PLAY]) + .ability(AbilityId.ADAPTABILITY) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should set the user's ability to the target's ability", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.ROLE_PLAY); + game.move.select(MoveId.ROLE_PLAY); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(Abilities.BALL_FETCH); + expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(AbilityId.BALL_FETCH); }); it("should activate post-summon abilities", async () => { - game.override.enemyAbility(Abilities.INTIMIDATE); - await game.classicMode.startBattle([Species.FEEBAS]); + game.override.enemyAbility(AbilityId.INTIMIDATE); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.ROLE_PLAY); + game.move.select(MoveId.ROLE_PLAY); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(-1); diff --git a/test/moves/rollout.test.ts b/test/moves/rollout.test.ts index dafa72dd5fa..de990a1a750 100644 --- a/test/moves/rollout.test.ts +++ b/test/moves/rollout.test.ts @@ -1,8 +1,8 @@ import { allMoves } from "#app/data/data-lists"; import { CommandPhase } from "#app/phases/command-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -25,18 +25,18 @@ describe("Moves - Rollout", () => { game = new GameManager(phaserGame); game.override.disableCrits(); game.override.battleStyle("single"); - game.override.starterSpecies(Species.RATTATA); - game.override.ability(Abilities.BALL_FETCH); - game.override.enemySpecies(Species.BIDOOF); - game.override.enemyAbility(Abilities.BALL_FETCH); + game.override.starterSpecies(SpeciesId.RATTATA); + game.override.ability(AbilityId.BALL_FETCH); + game.override.enemySpecies(SpeciesId.BIDOOF); + game.override.enemyAbility(AbilityId.BALL_FETCH); game.override.startingLevel(100); game.override.enemyLevel(100); - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); }); it("should double it's dmg on sequential uses but reset after 5", async () => { - game.override.moveset([Moves.ROLLOUT]); - vi.spyOn(allMoves[Moves.ROLLOUT], "accuracy", "get").mockReturnValue(100); //always hit + game.override.moveset([MoveId.ROLLOUT]); + vi.spyOn(allMoves[MoveId.ROLLOUT], "accuracy", "get").mockReturnValue(100); //always hit const variance = 5; const turns = 6; @@ -55,7 +55,7 @@ describe("Moves - Rollout", () => { let previousHp = enemyPkm.hp; for (let i = 0; i < turns; i++) { - game.move.select(Moves.ROLLOUT); + game.move.select(MoveId.ROLLOUT); await game.phaseInterceptor.to(CommandPhase); dmgHistory.push(previousHp - enemyPkm.hp); diff --git a/test/moves/roost.test.ts b/test/moves/roost.test.ts index e55c76ca220..76aab1e572f 100644 --- a/test/moves/roost.test.ts +++ b/test/moves/roost.test.ts @@ -1,8 +1,8 @@ import { BattlerIndex } from "#app/battle"; import { PokemonType } from "#enums/pokemon-type"; import { BattlerTagType } from "#app/enums/battler-tag-type"; -import { Moves } from "#app/enums/moves"; -import { Species } from "#app/enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import GameManager from "#test/testUtils/gameManager"; @@ -26,11 +26,11 @@ describe("Moves - Roost", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleStyle("single"); - game.override.enemySpecies(Species.RELICANTH); + game.override.enemySpecies(SpeciesId.RELICANTH); game.override.startingLevel(100); game.override.enemyLevel(100); - game.override.enemyMoveset(Moves.EARTHQUAKE); - game.override.moveset([Moves.ROOST, Moves.BURN_UP, Moves.DOUBLE_SHOCK]); + game.override.enemyMoveset(MoveId.EARTHQUAKE); + game.override.moveset([MoveId.ROOST, MoveId.BURN_UP, MoveId.DOUBLE_SHOCK]); }); /** @@ -47,10 +47,10 @@ describe("Moves - Roost", () => { */ test("Non flying type uses roost -> no type change, took damage", async () => { - await game.classicMode.startBattle([Species.DUNSPARCE]); + await game.classicMode.startBattle([SpeciesId.DUNSPARCE]); const playerPokemon = game.scene.getPlayerPokemon()!; const playerPokemonStartingHP = playerPokemon.hp; - game.move.select(Moves.ROOST); + game.move.select(MoveId.ROOST); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -71,10 +71,10 @@ describe("Moves - Roost", () => { }); test("Pure flying type -> becomes normal after roost and takes damage from ground moves -> regains flying", async () => { - await game.classicMode.startBattle([Species.TORNADUS]); + await game.classicMode.startBattle([SpeciesId.TORNADUS]); const playerPokemon = game.scene.getPlayerPokemon()!; const playerPokemonStartingHP = playerPokemon.hp; - game.move.select(Moves.ROOST); + game.move.select(MoveId.ROOST); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -95,10 +95,10 @@ describe("Moves - Roost", () => { }); test("Dual X/flying type -> becomes type X after roost and takes damage from ground moves -> regains flying", async () => { - await game.classicMode.startBattle([Species.HAWLUCHA]); + await game.classicMode.startBattle([SpeciesId.HAWLUCHA]); const playerPokemon = game.scene.getPlayerPokemon()!; const playerPokemonStartingHP = playerPokemon.hp; - game.move.select(Moves.ROOST); + game.move.select(MoveId.ROOST); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -119,11 +119,11 @@ describe("Moves - Roost", () => { }); test("Pokemon with levitate after using roost should lose flying type but still be unaffected by ground moves", async () => { - game.override.starterForms({ [Species.ROTOM]: 4 }); - await game.classicMode.startBattle([Species.ROTOM]); + game.override.starterForms({ [SpeciesId.ROTOM]: 4 }); + await game.classicMode.startBattle([SpeciesId.ROTOM]); const playerPokemon = game.scene.getPlayerPokemon()!; const playerPokemonStartingHP = playerPokemon.hp; - game.move.select(Moves.ROOST); + game.move.select(MoveId.ROOST); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -144,10 +144,10 @@ describe("Moves - Roost", () => { }); test("A fire/flying type that uses burn up, then roost should be typeless until end of turn", async () => { - await game.classicMode.startBattle([Species.MOLTRES]); + await game.classicMode.startBattle([SpeciesId.MOLTRES]); const playerPokemon = game.scene.getPlayerPokemon()!; const playerPokemonStartingHP = playerPokemon.hp; - game.move.select(Moves.BURN_UP); + game.move.select(MoveId.BURN_UP); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -157,7 +157,7 @@ describe("Moves - Roost", () => { expect(playerPokemonTypes.length === 1).toBeTruthy(); await game.phaseInterceptor.to(TurnEndPhase); - game.move.select(Moves.ROOST); + game.move.select(MoveId.ROOST); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -179,11 +179,11 @@ describe("Moves - Roost", () => { }); test("An electric/flying type that uses double shock, then roost should be typeless until end of turn", async () => { - game.override.enemySpecies(Species.ZEKROM); - await game.classicMode.startBattle([Species.ZAPDOS]); + game.override.enemySpecies(SpeciesId.ZEKROM); + await game.classicMode.startBattle([SpeciesId.ZAPDOS]); const playerPokemon = game.scene.getPlayerPokemon()!; const playerPokemonStartingHP = playerPokemon.hp; - game.move.select(Moves.DOUBLE_SHOCK); + game.move.select(MoveId.DOUBLE_SHOCK); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -193,7 +193,7 @@ describe("Moves - Roost", () => { expect(playerPokemonTypes.length === 1).toBeTruthy(); await game.phaseInterceptor.to(TurnEndPhase); - game.move.select(Moves.ROOST); + game.move.select(MoveId.ROOST); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -216,14 +216,14 @@ describe("Moves - Roost", () => { test("Dual Type Pokemon afflicted with Forests Curse/Trick or Treat and post roost will become dual type and then become 3 type at end of turn", async () => { game.override.enemyMoveset([ - Moves.TRICK_OR_TREAT, - Moves.TRICK_OR_TREAT, - Moves.TRICK_OR_TREAT, - Moves.TRICK_OR_TREAT, + MoveId.TRICK_OR_TREAT, + MoveId.TRICK_OR_TREAT, + MoveId.TRICK_OR_TREAT, + MoveId.TRICK_OR_TREAT, ]); - await game.classicMode.startBattle([Species.MOLTRES]); + await game.classicMode.startBattle([SpeciesId.MOLTRES]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.ROOST); + game.move.select(MoveId.ROOST); await game.phaseInterceptor.to(MoveEffectPhase); let playerPokemonTypes = playerPokemon.getTypes(); diff --git a/test/moves/round.test.ts b/test/moves/round.test.ts index ccdf4cbf089..c42734bdc41 100644 --- a/test/moves/round.test.ts +++ b/test/moves/round.test.ts @@ -1,9 +1,9 @@ import { BattlerIndex } from "#app/battle"; import { allMoves } from "#app/data/data-lists"; import type { MoveEffectPhase } from "#app/phases/move-effect-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -25,28 +25,28 @@ describe("Moves - Round", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.ROUND]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.SPLASH, MoveId.ROUND]) + .ability(AbilityId.BALL_FETCH) .battleStyle("double") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset([Moves.SPLASH, Moves.ROUND]) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset([MoveId.SPLASH, MoveId.ROUND]) .startingLevel(100) .enemyLevel(100); }); it("should cue other instances of Round together in Speed order", async () => { - await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS]); - const round = allMoves[Moves.ROUND]; + const round = allMoves[MoveId.ROUND]; const spy = vi.spyOn(round, "calculateBattlePower"); - game.move.select(Moves.ROUND, 0, BattlerIndex.ENEMY); - game.move.select(Moves.ROUND, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.ROUND, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.ROUND, 1, BattlerIndex.ENEMY_2); - await game.move.selectEnemyMove(Moves.ROUND, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.ROUND, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY]); diff --git a/test/moves/safeguard.test.ts b/test/moves/safeguard.test.ts index 7804b63f5c5..fc8bef80d6d 100644 --- a/test/moves/safeguard.test.ts +++ b/test/moves/safeguard.test.ts @@ -1,11 +1,11 @@ import { BattlerIndex } from "#app/battle"; import { PostDefendContactApplyStatusEffectAbAttr } from "#app/data/abilities/ability"; import { allAbilities } from "#app/data/data-lists"; -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { StatusEffect } from "#app/enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -27,20 +27,20 @@ describe("Moves - Safeguard", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemySpecies(Species.DRATINI) - .enemyMoveset([Moves.SAFEGUARD]) - .enemyAbility(Abilities.BALL_FETCH) + .enemySpecies(SpeciesId.DRATINI) + .enemyMoveset([MoveId.SAFEGUARD]) + .enemyAbility(AbilityId.BALL_FETCH) .enemyLevel(5) - .starterSpecies(Species.DRATINI) - .moveset([Moves.NUZZLE, Moves.SPORE, Moves.YAWN, Moves.SPLASH]) - .ability(Abilities.UNNERVE); // Stop wild Pokemon from potentially eating Lum Berry + .starterSpecies(SpeciesId.DRATINI) + .moveset([MoveId.NUZZLE, MoveId.SPORE, MoveId.YAWN, MoveId.SPLASH]) + .ability(AbilityId.UNNERVE); // Stop wild Pokemon from potentially eating Lum Berry }); it("protects from damaging moves with additional effects", async () => { await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.NUZZLE); + game.move.select(MoveId.NUZZLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); @@ -51,7 +51,7 @@ describe("Moves - Safeguard", () => { await game.classicMode.startBattle(); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SPORE); + game.move.select(MoveId.SPORE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); @@ -59,11 +59,11 @@ describe("Moves - Safeguard", () => { }); it("protects from confusion", async () => { - game.override.moveset([Moves.CONFUSE_RAY]); + game.override.moveset([MoveId.CONFUSE_RAY]); await game.classicMode.startBattle(); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.CONFUSE_RAY); + game.move.select(MoveId.CONFUSE_RAY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); @@ -75,8 +75,8 @@ describe("Moves - Safeguard", () => { await game.classicMode.startBattle(); - game.move.select(Moves.SPORE, 0, BattlerIndex.ENEMY_2); - game.move.select(Moves.NUZZLE, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.SPORE, 0, BattlerIndex.ENEMY_2); + game.move.select(MoveId.NUZZLE, 1, BattlerIndex.ENEMY_2); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY_2]); @@ -92,7 +92,7 @@ describe("Moves - Safeguard", () => { await game.classicMode.startBattle(); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.YAWN); + game.move.select(MoveId.YAWN); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); @@ -103,11 +103,11 @@ describe("Moves - Safeguard", () => { await game.classicMode.startBattle(); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.YAWN); + game.move.select(MoveId.YAWN); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(enemyPokemon.status?.effect).toEqual(StatusEffect.SLEEP); @@ -118,18 +118,18 @@ describe("Moves - Safeguard", () => { await game.classicMode.startBattle(); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); enemyPokemon.damageAndUpdate(1); expect(enemyPokemon.status?.effect).toEqual(StatusEffect.BURN); - game.override.enemyMoveset([Moves.REST]); + game.override.enemyMoveset([MoveId.REST]); // Force the moveset to update mid-battle // TODO: Remove after enemy AI rework is in enemyPokemon.getMoveset(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); enemyPokemon.damageAndUpdate(1); await game.toNextTurn(); @@ -137,20 +137,20 @@ describe("Moves - Safeguard", () => { }); it("protects from ability-inflicted status", async () => { - game.override.ability(Abilities.STATIC); + game.override.ability(AbilityId.STATIC); vi.spyOn( - allAbilities[Abilities.STATIC].getAttrs(PostDefendContactApplyStatusEffectAbAttr)[0], + allAbilities[AbilityId.STATIC].getAttrs(PostDefendContactApplyStatusEffectAbAttr)[0], "chance", "get", ).mockReturnValue(100); await game.classicMode.startBattle(); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); - game.override.enemyMoveset([Moves.TACKLE]); - game.move.select(Moves.SPLASH); + game.override.enemyMoveset([MoveId.TACKLE]); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(enemyPokemon.status).toBeUndefined(); diff --git a/test/moves/scale_shot.test.ts b/test/moves/scale_shot.test.ts index 49e68c75450..f61a9a1e276 100644 --- a/test/moves/scale_shot.test.ts +++ b/test/moves/scale_shot.test.ts @@ -4,9 +4,9 @@ import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -29,21 +29,21 @@ describe("Moves - Scale Shot", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SCALE_SHOT]) + .moveset([MoveId.SCALE_SHOT]) .battleStyle("single") .disableCrits() - .ability(Abilities.NO_GUARD) - .passiveAbility(Abilities.SKILL_LINK) - .enemyMoveset(Moves.SPLASH) + .ability(AbilityId.NO_GUARD) + .passiveAbility(AbilityId.SKILL_LINK) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(3); }); it("applies stat changes after last hit", async () => { - game.override.enemySpecies(Species.FORRETRESS); + game.override.enemySpecies(SpeciesId.FORRETRESS); - await game.classicMode.startBattle([Species.MINCCINO]); + await game.classicMode.startBattle([SpeciesId.MINCCINO]); const minccino = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SCALE_SHOT); + game.move.select(MoveId.SCALE_SHOT); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); @@ -62,17 +62,17 @@ describe("Moves - Scale Shot", () => { }); it("unaffected by sheer force", async () => { - const moveToCheck = allMoves[Moves.SCALE_SHOT]; + const moveToCheck = allMoves[MoveId.SCALE_SHOT]; const basePower = moveToCheck.power; - game.override.enemySpecies(Species.WOBBUFFET); + game.override.enemySpecies(SpeciesId.WOBBUFFET); vi.spyOn(moveToCheck, "calculateBattlePower"); - await game.classicMode.startBattle([Species.MINCCINO]); + await game.classicMode.startBattle([SpeciesId.MINCCINO]); const minccino = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SCALE_SHOT); + game.move.select(MoveId.SCALE_SHOT); await game.phaseInterceptor.to(TurnEndPhase); //effect not nullified by sheer force diff --git a/test/moves/secret_power.test.ts b/test/moves/secret_power.test.ts index 99945002b8d..ac06f03698c 100644 --- a/test/moves/secret_power.test.ts +++ b/test/moves/secret_power.test.ts @@ -1,9 +1,9 @@ -import { Abilities } from "#enums/abilities"; -import { Biome } from "#enums/biome"; -import { Moves } from "#enums/moves"; +import { AbilityId } from "#enums/ability-id"; +import { BiomeId } from "#enums/biome-id"; +import { MoveId } from "#enums/move-id"; import { Stat } from "#enums/stat"; import { allMoves } from "#app/data/data-lists"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -31,48 +31,48 @@ describe("Moves - Secret Power", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SECRET_POWER]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.SECRET_POWER]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) + .enemySpecies(SpeciesId.MAGIKARP) .enemyLevel(60) - .enemyAbility(Abilities.BALL_FETCH); + .enemyAbility(AbilityId.BALL_FETCH); }); it("Secret Power checks for an active terrain first then looks at the biome for its secondary effect", async () => { - game.override.startingBiome(Biome.VOLCANO).enemyMoveset([Moves.SPLASH, Moves.MISTY_TERRAIN]); - vi.spyOn(allMoves[Moves.SECRET_POWER], "chance", "get").mockReturnValue(100); - await game.classicMode.startBattle([Species.FEEBAS]); + game.override.startingBiome(BiomeId.VOLCANO).enemyMoveset([MoveId.SPLASH, MoveId.MISTY_TERRAIN]); + vi.spyOn(allMoves[MoveId.SECRET_POWER], "chance", "get").mockReturnValue(100); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const enemyPokemon = game.scene.getEnemyPokemon()!; - // No Terrain + Biome.VOLCANO --> Burn - game.move.select(Moves.SECRET_POWER); - await game.move.selectEnemyMove(Moves.SPLASH); + // No Terrain + BiomeId.VOLCANO --> Burn + game.move.select(MoveId.SECRET_POWER); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyPokemon.status?.effect).toBe(StatusEffect.BURN); // Misty Terrain --> SpAtk -1 - game.move.select(Moves.SECRET_POWER); - await game.move.selectEnemyMove(Moves.MISTY_TERRAIN); + game.move.select(MoveId.SECRET_POWER); + await game.move.selectEnemyMove(MoveId.MISTY_TERRAIN); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyPokemon.getStatStage(Stat.SPATK)).toBe(-1); }); it("Secret Power's effect chance is doubled by Serene Grace, but not by the 'rainbow' effect from Fire/Water Pledge", async () => { game.override - .moveset([Moves.FIRE_PLEDGE, Moves.WATER_PLEDGE, Moves.SECRET_POWER, Moves.SPLASH]) - .ability(Abilities.SERENE_GRACE) - .enemyMoveset([Moves.SPLASH]) + .moveset([MoveId.FIRE_PLEDGE, MoveId.WATER_PLEDGE, MoveId.SECRET_POWER, MoveId.SPLASH]) + .ability(AbilityId.SERENE_GRACE) + .enemyMoveset([MoveId.SPLASH]) .battleStyle("double"); - await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); - const sereneGraceAttr = allAbilities[Abilities.SERENE_GRACE].getAttrs(MoveEffectChanceMultiplierAbAttr)[0]; + const sereneGraceAttr = allAbilities[AbilityId.SERENE_GRACE].getAttrs(MoveEffectChanceMultiplierAbAttr)[0]; vi.spyOn(sereneGraceAttr, "canApply"); - game.move.select(Moves.WATER_PLEDGE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.FIRE_PLEDGE, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.WATER_PLEDGE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.FIRE_PLEDGE, 1, BattlerIndex.ENEMY_2); await game.phaseInterceptor.to("TurnEndPhase"); @@ -82,8 +82,8 @@ describe("Moves - Secret Power", () => { rainbowEffect = rainbowEffect!; vi.spyOn(rainbowEffect, "apply"); - game.move.select(Moves.SECRET_POWER, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SECRET_POWER, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase", false); diff --git a/test/moves/shed_tail.test.ts b/test/moves/shed_tail.test.ts index 845399f6c27..84a5d5ba914 100644 --- a/test/moves/shed_tail.test.ts +++ b/test/moves/shed_tail.test.ts @@ -1,8 +1,8 @@ import { SubstituteTag } from "#app/data/battler-tags"; import { MoveResult } from "#app/field/pokemon"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; @@ -24,19 +24,19 @@ describe("Moves - Shed Tail", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SHED_TAIL]) + .moveset([MoveId.SHED_TAIL]) .battleStyle("single") - .enemySpecies(Species.SNORLAX) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.SNORLAX) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("transfers a Substitute doll to the switched in Pokemon", async () => { - await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS]); const magikarp = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SHED_TAIL); + game.move.select(MoveId.SHED_TAIL); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase", false); @@ -53,12 +53,12 @@ describe("Moves - Shed Tail", () => { }); it("should fail if no ally is available to switch in", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const magikarp = game.scene.getPlayerPokemon()!; expect(game.scene.getPlayerParty().length).toBe(1); - game.move.select(Moves.SHED_TAIL); + game.move.select(MoveId.SHED_TAIL); await game.phaseInterceptor.to("TurnEndPhase", false); diff --git a/test/moves/shell_side_arm.test.ts b/test/moves/shell_side_arm.test.ts index 4d7ae7025a1..ad79091a5e3 100644 --- a/test/moves/shell_side_arm.test.ts +++ b/test/moves/shell_side_arm.test.ts @@ -2,9 +2,9 @@ import { BattlerIndex } from "#app/battle"; import { ShellSideArmCategoryAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; import type Move from "#app/data/moves/move"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -26,55 +26,55 @@ describe("Moves - Shell Side Arm", () => { }); beforeEach(() => { - shellSideArm = allMoves[Moves.SHELL_SIDE_ARM]; + shellSideArm = allMoves[MoveId.SHELL_SIDE_ARM]; shellSideArmAttr = shellSideArm.getAttrs(ShellSideArmCategoryAttr)[0]; game = new GameManager(phaserGame); game.override - .moveset([Moves.SHELL_SIDE_ARM, Moves.SPLASH]) + .moveset([MoveId.SHELL_SIDE_ARM, MoveId.SPLASH]) .battleStyle("single") .startingLevel(100) .enemyLevel(100) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("becomes a physical attack if forecasted to deal more damage as physical", async () => { - game.override.enemySpecies(Species.SNORLAX); + game.override.enemySpecies(SpeciesId.SNORLAX); - await game.classicMode.startBattle([Species.RAMPARDOS]); + await game.classicMode.startBattle([SpeciesId.RAMPARDOS]); vi.spyOn(shellSideArmAttr, "apply"); - game.move.select(Moves.SHELL_SIDE_ARM); + game.move.select(MoveId.SHELL_SIDE_ARM); await game.phaseInterceptor.to("MoveEffectPhase"); expect(shellSideArmAttr.apply).toHaveLastReturnedWith(true); }); it("remains a special attack if forecasted to deal more damage as special", async () => { - game.override.enemySpecies(Species.SLOWBRO); + game.override.enemySpecies(SpeciesId.SLOWBRO); - await game.classicMode.startBattle([Species.XURKITREE]); + await game.classicMode.startBattle([SpeciesId.XURKITREE]); vi.spyOn(shellSideArmAttr, "apply"); - game.move.select(Moves.SHELL_SIDE_ARM); + game.move.select(MoveId.SHELL_SIDE_ARM); await game.phaseInterceptor.to("MoveEffectPhase"); expect(shellSideArmAttr.apply).toHaveLastReturnedWith(false); }); it("respects stat stage changes when forecasting base damage", async () => { - game.override.enemySpecies(Species.SNORLAX).enemyMoveset(Moves.COTTON_GUARD); + game.override.enemySpecies(SpeciesId.SNORLAX).enemyMoveset(MoveId.COTTON_GUARD); - await game.classicMode.startBattle([Species.MANAPHY]); + await game.classicMode.startBattle([SpeciesId.MANAPHY]); vi.spyOn(shellSideArmAttr, "apply"); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); - game.move.select(Moves.SHELL_SIDE_ARM); + game.move.select(MoveId.SHELL_SIDE_ARM); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase", false); diff --git a/test/moves/shell_trap.test.ts b/test/moves/shell_trap.test.ts index 2aa4712152d..4dfc0e72d0a 100644 --- a/test/moves/shell_trap.test.ts +++ b/test/moves/shell_trap.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { allMoves } from "#app/data/data-lists"; -import { Moves } from "#app/enums/moves"; -import { Species } from "#app/enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { MoveResult } from "#app/field/pokemon"; import { BerryPhase } from "#app/phases/berry-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; @@ -28,23 +28,23 @@ describe("Moves - Shell Trap", () => { game = new GameManager(phaserGame); game.override .battleStyle("double") - .moveset([Moves.SHELL_TRAP, Moves.SPLASH, Moves.BULLDOZE]) - .enemySpecies(Species.SNORLAX) - .enemyMoveset([Moves.RAZOR_LEAF]) + .moveset([MoveId.SHELL_TRAP, MoveId.SPLASH, MoveId.BULLDOZE]) + .enemySpecies(SpeciesId.SNORLAX) + .enemyMoveset([MoveId.RAZOR_LEAF]) .startingLevel(100) .enemyLevel(100); - vi.spyOn(allMoves[Moves.RAZOR_LEAF], "accuracy", "get").mockReturnValue(100); + vi.spyOn(allMoves[MoveId.RAZOR_LEAF], "accuracy", "get").mockReturnValue(100); }); it("should activate after the user is hit by a physical attack", async () => { - await game.classicMode.startBattle([Species.CHARIZARD, Species.TURTONATOR]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.TURTONATOR]); const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SHELL_TRAP, 1); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SHELL_TRAP, 1); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2]); @@ -59,15 +59,15 @@ describe("Moves - Shell Trap", () => { }); it("should fail if the user is only hit by special attacks", async () => { - game.override.enemyMoveset([Moves.SWIFT]); + game.override.enemyMoveset([MoveId.SWIFT]); - await game.classicMode.startBattle([Species.CHARIZARD, Species.TURTONATOR]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.TURTONATOR]); const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SHELL_TRAP, 1); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SHELL_TRAP, 1); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2]); @@ -82,15 +82,15 @@ describe("Moves - Shell Trap", () => { }); it("should fail if the user isn't hit with any attack", async () => { - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); - await game.classicMode.startBattle([Species.CHARIZARD, Species.TURTONATOR]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.TURTONATOR]); const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SHELL_TRAP, 1); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SHELL_TRAP, 1); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2]); @@ -105,15 +105,15 @@ describe("Moves - Shell Trap", () => { }); it("should not activate from an ally's attack", async () => { - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); - await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.SHELL_TRAP); - game.move.select(Moves.BULLDOZE, 1); + game.move.select(MoveId.SHELL_TRAP); + game.move.select(MoveId.BULLDOZE, 1); await game.phaseInterceptor.to(MoveEndPhase); @@ -129,14 +129,14 @@ describe("Moves - Shell Trap", () => { it("should not activate from a subsequent physical attack", async () => { game.override.battleStyle("single"); - vi.spyOn(allMoves[Moves.RAZOR_LEAF], "priority", "get").mockReturnValue(-4); + vi.spyOn(allMoves[MoveId.RAZOR_LEAF], "priority", "get").mockReturnValue(-4); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SHELL_TRAP); + game.move.select(MoveId.SHELL_TRAP); await game.phaseInterceptor.to(BerryPhase, false); diff --git a/test/moves/simple_beam.test.ts b/test/moves/simple_beam.test.ts index 225fda28083..94609c3c4ac 100644 --- a/test/moves/simple_beam.test.ts +++ b/test/moves/simple_beam.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -22,21 +22,21 @@ describe("Moves - Simple Beam", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.SIMPLE_BEAM]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.SPLASH, MoveId.SIMPLE_BEAM]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("sets the target's ability to simple", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.SIMPLE_BEAM); + game.move.select(MoveId.SIMPLE_BEAM); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(Abilities.SIMPLE); + expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(AbilityId.SIMPLE); }); }); diff --git a/test/moves/sketch.test.ts b/test/moves/sketch.test.ts index fc38d6a1147..23e7f4ef3ab 100644 --- a/test/moves/sketch.test.ts +++ b/test/moves/sketch.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { MoveResult, PokemonMove } from "#app/field/pokemon"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -27,73 +27,75 @@ describe("Moves - Sketch", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .ability(Abilities.BALL_FETCH) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.SHUCKLE) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.SHUCKLE) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("Sketch should not fail even if a previous Sketch failed to retrieve a valid move and ran out of PP", async () => { - await game.classicMode.startBattle([Species.REGIELEKI]); + await game.classicMode.startBattle([SpeciesId.REGIELEKI]); const playerPokemon = game.scene.getPlayerPokemon()!; // can't use normal moveset override because we need to check moveset changes - playerPokemon.moveset = [new PokemonMove(Moves.SKETCH), new PokemonMove(Moves.SKETCH)]; + playerPokemon.moveset = [new PokemonMove(MoveId.SKETCH), new PokemonMove(MoveId.SKETCH)]; - game.move.select(Moves.SKETCH); + game.move.select(MoveId.SKETCH); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getLastXMoves()[0].result).toBe(MoveResult.FAIL); const moveSlot0 = playerPokemon.getMoveset()[0]!; - expect(moveSlot0.moveId).toBe(Moves.SKETCH); + expect(moveSlot0.moveId).toBe(MoveId.SKETCH); expect(moveSlot0.getPpRatio()).toBe(0); await game.toNextTurn(); - game.move.select(Moves.SKETCH); + game.move.select(MoveId.SKETCH); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); - expect(playerPokemon.moveset[0]?.moveId).toBe(Moves.SPLASH); - expect(playerPokemon.moveset[1]?.moveId).toBe(Moves.SKETCH); + expect(playerPokemon.moveset[0]?.moveId).toBe(MoveId.SPLASH); + expect(playerPokemon.moveset[1]?.moveId).toBe(MoveId.SKETCH); }); it("Sketch should retrieve the most recent valid move from its target history", async () => { game.override.enemyStatusEffect(StatusEffect.PARALYSIS); - await game.classicMode.startBattle([Species.REGIELEKI]); + await game.classicMode.startBattle([SpeciesId.REGIELEKI]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - playerPokemon.moveset = [new PokemonMove(Moves.SKETCH), new PokemonMove(Moves.GROWL)]; + playerPokemon.moveset = [new PokemonMove(MoveId.SKETCH), new PokemonMove(MoveId.GROWL)]; - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.move.forceStatusActivation(false); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); await game.toNextTurn(); - game.move.select(Moves.SKETCH); + game.move.select(MoveId.SKETCH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.move.forceStatusActivation(true); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); - expect(playerPokemon.moveset[0]?.moveId).toBe(Moves.SPLASH); - expect(playerPokemon.moveset[1]?.moveId).toBe(Moves.GROWL); + expect(playerPokemon.moveset[0]?.moveId).toBe(MoveId.SPLASH); + expect(playerPokemon.moveset[1]?.moveId).toBe(MoveId.GROWL); }); it("should sketch moves that call other moves", async () => { - const randomMoveAttr = allMoves[Moves.METRONOME].findAttr(attr => attr instanceof RandomMoveAttr) as RandomMoveAttr; - vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(Moves.FALSE_SWIPE); + const randomMoveAttr = allMoves[MoveId.METRONOME].findAttr( + attr => attr instanceof RandomMoveAttr, + ) as RandomMoveAttr; + vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(MoveId.FALSE_SWIPE); - game.override.enemyMoveset([Moves.METRONOME]); - await game.classicMode.startBattle([Species.REGIELEKI]); + game.override.enemyMoveset([MoveId.METRONOME]); + await game.classicMode.startBattle([SpeciesId.REGIELEKI]); const playerPokemon = game.scene.getPlayerPokemon()!; - playerPokemon.moveset = [new PokemonMove(Moves.SKETCH)]; + playerPokemon.moveset = [new PokemonMove(MoveId.SKETCH)]; // Opponent uses Metronome -> False Swipe, then player uses Sketch, which should sketch Metronome - game.move.select(Moves.SKETCH); + game.move.select(MoveId.SKETCH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); - expect(playerPokemon.moveset[0]?.moveId).toBe(Moves.METRONOME); + expect(playerPokemon.moveset[0]?.moveId).toBe(MoveId.METRONOME); expect(playerPokemon.hp).toBeLessThan(playerPokemon.getMaxHp()); // Make sure opponent actually used False Swipe }); }); diff --git a/test/moves/skill_swap.test.ts b/test/moves/skill_swap.test.ts index 562e4bb56ed..c4fb6005e28 100644 --- a/test/moves/skill_swap.test.ts +++ b/test/moves/skill_swap.test.ts @@ -1,7 +1,7 @@ import { Stat } from "#app/enums/stat"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -23,31 +23,31 @@ describe("Moves - Skill Swap", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.SKILL_SWAP]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.SPLASH, MoveId.SKILL_SWAP]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should swap the two abilities", async () => { - game.override.ability(Abilities.ADAPTABILITY); - await game.classicMode.startBattle([Species.FEEBAS]); + game.override.ability(AbilityId.ADAPTABILITY); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.SKILL_SWAP); + game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(Abilities.BALL_FETCH); - expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(Abilities.ADAPTABILITY); + expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(AbilityId.BALL_FETCH); + expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(AbilityId.ADAPTABILITY); }); it("should activate post-summon abilities", async () => { - game.override.ability(Abilities.INTIMIDATE); - await game.classicMode.startBattle([Species.FEEBAS]); + game.override.ability(AbilityId.INTIMIDATE); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.SKILL_SWAP); + game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); // player atk should be -1 after opponent gains intimidate and it activates diff --git a/test/moves/sleep_talk.test.ts b/test/moves/sleep_talk.test.ts index cbe3b6d7d3a..820a5f9082a 100644 --- a/test/moves/sleep_talk.test.ts +++ b/test/moves/sleep_talk.test.ts @@ -1,9 +1,9 @@ import { Stat } from "#app/enums/stat"; import { StatusEffect } from "#app/enums/status-effect"; import { MoveResult } from "#app/field/pokemon"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -25,49 +25,49 @@ describe("Moves - Sleep Talk", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.SLEEP_TALK]) + .moveset([MoveId.SPLASH, MoveId.SLEEP_TALK]) .statusEffect(StatusEffect.SLEEP) - .ability(Abilities.BALL_FETCH) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(100); }); it("should fail when the user is not asleep", async () => { game.override.statusEffect(StatusEffect.NONE); - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.SLEEP_TALK); + game.move.select(MoveId.SLEEP_TALK); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); it("should fail if the user has no valid moves", async () => { - game.override.moveset([Moves.SLEEP_TALK, Moves.DIG, Moves.METRONOME, Moves.SOLAR_BEAM]); - await game.classicMode.startBattle([Species.FEEBAS]); + game.override.moveset([MoveId.SLEEP_TALK, MoveId.DIG, MoveId.METRONOME, MoveId.SOLAR_BEAM]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.SLEEP_TALK); + game.move.select(MoveId.SLEEP_TALK); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); it("should call a random valid move if the user is asleep", async () => { - game.override.moveset([Moves.SLEEP_TALK, Moves.DIG, Moves.FLY, Moves.SWORDS_DANCE]); // Dig and Fly are invalid moves, Swords Dance should always be called - await game.classicMode.startBattle([Species.FEEBAS]); + game.override.moveset([MoveId.SLEEP_TALK, MoveId.DIG, MoveId.FLY, MoveId.SWORDS_DANCE]); // Dig and Fly are invalid moves, Swords Dance should always be called + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.SLEEP_TALK); + game.move.select(MoveId.SLEEP_TALK); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)); }); it("should apply secondary effects of a move", async () => { - game.override.moveset([Moves.SLEEP_TALK, Moves.DIG, Moves.FLY, Moves.WOOD_HAMMER]); // Dig and Fly are invalid moves, Wood Hammer should always be called + game.override.moveset([MoveId.SLEEP_TALK, MoveId.DIG, MoveId.FLY, MoveId.WOOD_HAMMER]); // Dig and Fly are invalid moves, Wood Hammer should always be called await game.classicMode.startBattle(); - game.move.select(Moves.SLEEP_TALK); + game.move.select(MoveId.SLEEP_TALK); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!.isFullHp()).toBeFalsy(); // Wood Hammer recoil effect should be applied diff --git a/test/moves/solar_beam.test.ts b/test/moves/solar_beam.test.ts index 8566859a4bc..7515843a13f 100644 --- a/test/moves/solar_beam.test.ts +++ b/test/moves/solar_beam.test.ts @@ -2,9 +2,9 @@ import { allMoves } from "#app/data/data-lists"; import { BattlerTagType } from "#enums/battler-tag-type"; import { WeatherType } from "#enums/weather-type"; import { MoveResult } from "#app/field/pokemon"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; @@ -26,22 +26,22 @@ describe("Moves - Solar Beam", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Moves.SOLAR_BEAM) + .moveset(MoveId.SOLAR_BEAM) .battleStyle("single") .startingLevel(100) - .enemySpecies(Species.SNORLAX) + .enemySpecies(SpeciesId.SNORLAX) .enemyLevel(100) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should deal damage in two turns if no weather is active", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SOLAR_BEAM); + game.move.select(MoveId.SOLAR_BEAM); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getTag(BattlerTagType.CHARGING)).toBeDefined(); @@ -54,7 +54,7 @@ describe("Moves - Solar Beam", () => { expect(playerPokemon.getMoveHistory()).toHaveLength(2); expect(playerPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); - const playerSolarBeam = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.SOLAR_BEAM); + const playerSolarBeam = playerPokemon.getMoveset().find(mv => mv && mv.moveId === MoveId.SOLAR_BEAM); expect(playerSolarBeam?.ppUsed).toBe(1); }); @@ -64,12 +64,12 @@ describe("Moves - Solar Beam", () => { ])("should deal damage in one turn if $name is active", async ({ weatherType }) => { game.override.weather(weatherType); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SOLAR_BEAM); + game.move.select(MoveId.SOLAR_BEAM); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getTag(BattlerTagType.CHARGING)).toBeUndefined(); @@ -77,7 +77,7 @@ describe("Moves - Solar Beam", () => { expect(playerPokemon.getMoveHistory()).toHaveLength(2); expect(playerPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); - const playerSolarBeam = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.SOLAR_BEAM); + const playerSolarBeam = playerPokemon.getMoveset().find(mv => mv && mv.moveId === MoveId.SOLAR_BEAM); expect(playerSolarBeam?.ppUsed).toBe(1); }); @@ -87,13 +87,13 @@ describe("Moves - Solar Beam", () => { ])("should have its power halved in $name", async ({ weatherType }) => { game.override.weather(weatherType); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const solarBeam = allMoves[Moves.SOLAR_BEAM]; + const solarBeam = allMoves[MoveId.SOLAR_BEAM]; vi.spyOn(solarBeam, "calculateBattlePower"); - game.move.select(Moves.SOLAR_BEAM); + game.move.select(MoveId.SOLAR_BEAM); await game.phaseInterceptor.to("TurnEndPhase"); await game.phaseInterceptor.to("TurnEndPhase"); diff --git a/test/moves/sparkly_swirl.test.ts b/test/moves/sparkly_swirl.test.ts index 9eb018d4be7..d1cbdd70107 100644 --- a/test/moves/sparkly_swirl.test.ts +++ b/test/moves/sparkly_swirl.test.ts @@ -1,9 +1,9 @@ import { allMoves } from "#app/data/data-lists"; import { StatusEffect } from "#app/enums/status-effect"; import { CommandPhase } from "#app/phases/command-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -23,19 +23,19 @@ describe("Moves - Sparkly Swirl", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .enemySpecies(Species.SHUCKLE) + .enemySpecies(SpeciesId.SHUCKLE) .enemyLevel(100) - .enemyMoveset(Moves.SPLASH) - .enemyAbility(Abilities.BALL_FETCH) - .moveset([Moves.SPARKLY_SWIRL, Moves.SPLASH]) - .ability(Abilities.BALL_FETCH); + .enemyMoveset(MoveId.SPLASH) + .enemyAbility(AbilityId.BALL_FETCH) + .moveset([MoveId.SPARKLY_SWIRL, MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH); - vi.spyOn(allMoves[Moves.SPARKLY_SWIRL], "accuracy", "get").mockReturnValue(100); + vi.spyOn(allMoves[MoveId.SPARKLY_SWIRL], "accuracy", "get").mockReturnValue(100); }); it("should cure status effect of the user, its ally, and all party pokemon", async () => { game.override.battleStyle("double").statusEffect(StatusEffect.BURN); - await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA, Species.RATTATA]); + await game.classicMode.startBattle([SpeciesId.RATTATA, SpeciesId.RATTATA, SpeciesId.RATTATA]); const [leftPlayer, rightPlayer, partyPokemon] = game.scene.getPlayerParty(); const leftOpp = game.scene.getEnemyPokemon()!; @@ -43,9 +43,9 @@ describe("Moves - Sparkly Swirl", () => { vi.spyOn(rightPlayer, "resetStatus"); vi.spyOn(partyPokemon, "resetStatus"); - game.move.select(Moves.SPARKLY_SWIRL, 0, leftOpp.getBattlerIndex()); + game.move.select(MoveId.SPARKLY_SWIRL, 0, leftOpp.getBattlerIndex()); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(leftPlayer.resetStatus).toHaveBeenCalledOnce(); @@ -59,15 +59,15 @@ describe("Moves - Sparkly Swirl", () => { it("should not cure status effect of the target/target's allies", async () => { game.override.battleStyle("double").enemyStatusEffect(StatusEffect.BURN); - await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA]); + await game.classicMode.startBattle([SpeciesId.RATTATA, SpeciesId.RATTATA]); const [leftOpp, rightOpp] = game.scene.getEnemyField(); vi.spyOn(leftOpp, "resetStatus"); vi.spyOn(rightOpp, "resetStatus"); - game.move.select(Moves.SPARKLY_SWIRL, 0, leftOpp.getBattlerIndex()); + game.move.select(MoveId.SPARKLY_SWIRL, 0, leftOpp.getBattlerIndex()); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(leftOpp.resetStatus).toHaveBeenCalledTimes(0); diff --git a/test/moves/spectral_thief.test.ts b/test/moves/spectral_thief.test.ts index 4c2e9f96274..df560169078 100644 --- a/test/moves/spectral_thief.test.ts +++ b/test/moves/spectral_thief.test.ts @@ -1,9 +1,9 @@ -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BattlerIndex } from "#app/battle"; import { Stat } from "#enums/stat"; import { allMoves } from "#app/data/data-lists"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,12 +24,12 @@ describe("Moves - Spectral Thief", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .enemySpecies(Species.SHUCKLE) + .enemySpecies(SpeciesId.SHUCKLE) .enemyLevel(100) - .enemyMoveset(Moves.SPLASH) - .enemyAbility(Abilities.BALL_FETCH) - .moveset([Moves.SPECTRAL_THIEF, Moves.SPLASH]) - .ability(Abilities.BALL_FETCH).disableCrits; + .enemyMoveset(MoveId.SPLASH) + .enemyAbility(AbilityId.BALL_FETCH) + .moveset([MoveId.SPECTRAL_THIEF, MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH).disableCrits; }); it("should steal max possible positive stat changes and ignore negative ones.", async () => { @@ -50,7 +50,7 @@ describe("Moves - Spectral Thief", () => { player.setStatStage(Stat.SPDEF, 0); player.setStatStage(Stat.SPD, -2); - game.move.select(Moves.SPECTRAL_THIEF); + game.move.select(MoveId.SPECTRAL_THIEF); await game.phaseInterceptor.to(TurnEndPhase); /** @@ -65,26 +65,26 @@ describe("Moves - Spectral Thief", () => { }); it("should steal stat stages before dmg calculation", async () => { - game.override.enemySpecies(Species.MAGIKARP).enemyLevel(50); + game.override.enemySpecies(SpeciesId.MAGIKARP).enemyLevel(50); await game.classicMode.startBattle(); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - const moveToCheck = allMoves[Moves.SPECTRAL_THIEF]; + const moveToCheck = allMoves[MoveId.SPECTRAL_THIEF]; const dmgBefore = enemy.getAttackDamage({ source: player, move: moveToCheck }).damage; enemy.setStatStage(Stat.ATK, 6); player.setStatStage(Stat.ATK, 0); - game.move.select(Moves.SPECTRAL_THIEF); + game.move.select(MoveId.SPECTRAL_THIEF); await game.phaseInterceptor.to(TurnEndPhase); expect(dmgBefore).toBeLessThan(enemy.getAttackDamage({ source: player, move: moveToCheck }).damage); }); it("should steal stat stages as a negative value with Contrary.", async () => { - game.override.ability(Abilities.CONTRARY); + game.override.ability(AbilityId.CONTRARY); await game.classicMode.startBattle(); const player = game.scene.getPlayerPokemon()!; @@ -94,7 +94,7 @@ describe("Moves - Spectral Thief", () => { player.setStatStage(Stat.ATK, 0); - game.move.select(Moves.SPECTRAL_THIEF); + game.move.select(MoveId.SPECTRAL_THIEF); await game.phaseInterceptor.to(TurnEndPhase); expect(player.getStatStage(Stat.ATK)).toEqual(-6); @@ -102,7 +102,7 @@ describe("Moves - Spectral Thief", () => { }); it("should steal double the stat stages with Simple.", async () => { - game.override.ability(Abilities.SIMPLE); + game.override.ability(AbilityId.SIMPLE); await game.classicMode.startBattle(); const player = game.scene.getPlayerPokemon()!; @@ -112,7 +112,7 @@ describe("Moves - Spectral Thief", () => { player.setStatStage(Stat.ATK, 0); - game.move.select(Moves.SPECTRAL_THIEF); + game.move.select(MoveId.SPECTRAL_THIEF); await game.phaseInterceptor.to(TurnEndPhase); expect(player.getStatStage(Stat.ATK)).toEqual(6); @@ -120,7 +120,7 @@ describe("Moves - Spectral Thief", () => { }); it("should steal the stat stages through Clear Body.", async () => { - game.override.enemyAbility(Abilities.CLEAR_BODY); + game.override.enemyAbility(AbilityId.CLEAR_BODY); await game.classicMode.startBattle(); const player = game.scene.getPlayerPokemon()!; @@ -130,7 +130,7 @@ describe("Moves - Spectral Thief", () => { player.setStatStage(Stat.ATK, 0); - game.move.select(Moves.SPECTRAL_THIEF); + game.move.select(MoveId.SPECTRAL_THIEF); await game.phaseInterceptor.to(TurnEndPhase); expect(player.getStatStage(Stat.ATK)).toEqual(3); @@ -138,7 +138,7 @@ describe("Moves - Spectral Thief", () => { }); it("should steal the stat stages through White Smoke.", async () => { - game.override.enemyAbility(Abilities.WHITE_SMOKE); + game.override.enemyAbility(AbilityId.WHITE_SMOKE); await game.classicMode.startBattle(); const player = game.scene.getPlayerPokemon()!; @@ -148,7 +148,7 @@ describe("Moves - Spectral Thief", () => { player.setStatStage(Stat.ATK, 0); - game.move.select(Moves.SPECTRAL_THIEF); + game.move.select(MoveId.SPECTRAL_THIEF); await game.phaseInterceptor.to(TurnEndPhase); expect(player.getStatStage(Stat.ATK)).toEqual(3); @@ -156,7 +156,7 @@ describe("Moves - Spectral Thief", () => { }); it("should steal the stat stages through Hyper Cutter.", async () => { - game.override.enemyAbility(Abilities.HYPER_CUTTER); + game.override.enemyAbility(AbilityId.HYPER_CUTTER); await game.classicMode.startBattle(); const player = game.scene.getPlayerPokemon()!; @@ -166,7 +166,7 @@ describe("Moves - Spectral Thief", () => { player.setStatStage(Stat.ATK, 0); - game.move.select(Moves.SPECTRAL_THIEF); + game.move.select(MoveId.SPECTRAL_THIEF); await game.phaseInterceptor.to(TurnEndPhase); expect(player.getStatStage(Stat.ATK)).toEqual(3); @@ -174,7 +174,7 @@ describe("Moves - Spectral Thief", () => { }); it("should bypass Substitute.", async () => { - game.override.enemyMoveset(Moves.SUBSTITUTE); + game.override.enemyMoveset(MoveId.SUBSTITUTE); await game.classicMode.startBattle(); const player = game.scene.getPlayerPokemon()!; @@ -184,7 +184,7 @@ describe("Moves - Spectral Thief", () => { player.setStatStage(Stat.ATK, 0); - game.move.select(Moves.SPECTRAL_THIEF); + game.move.select(MoveId.SPECTRAL_THIEF); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to(TurnEndPhase); @@ -194,7 +194,7 @@ describe("Moves - Spectral Thief", () => { }); it("should get blocked by protect.", async () => { - game.override.enemyMoveset(Moves.PROTECT); + game.override.enemyMoveset(MoveId.PROTECT); await game.classicMode.startBattle(); const player = game.scene.getPlayerPokemon()!; @@ -204,7 +204,7 @@ describe("Moves - Spectral Thief", () => { player.setStatStage(Stat.ATK, 0); - game.move.select(Moves.SPECTRAL_THIEF); + game.move.select(MoveId.SPECTRAL_THIEF); await game.phaseInterceptor.to(TurnEndPhase); expect(player.getStatStage(Stat.ATK)).toEqual(0); diff --git a/test/moves/speed_swap.test.ts b/test/moves/speed_swap.test.ts index f2be761b64e..aef0d981e98 100644 --- a/test/moves/speed_swap.test.ts +++ b/test/moves/speed_swap.test.ts @@ -1,11 +1,11 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { Stat } from "#enums/stat"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; describe("Moves - Speed Swap", () => { let phaserGame: Phaser.Game; @@ -25,16 +25,16 @@ describe("Moves - Speed Swap", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemyAbility(Abilities.NONE) - .enemyMoveset(Moves.SPLASH) - .enemySpecies(Species.MEW) + .enemyAbility(AbilityId.NONE) + .enemyMoveset(MoveId.SPLASH) + .enemySpecies(SpeciesId.MEW) .enemyLevel(200) - .moveset([Moves.SPEED_SWAP]) - .ability(Abilities.NONE); + .moveset([MoveId.SPEED_SWAP]) + .ability(AbilityId.NONE); }); it("should swap the user's SPD and the target's SPD stats", async () => { - await game.classicMode.startBattle([Species.INDEEDEE]); + await game.classicMode.startBattle([SpeciesId.INDEEDEE]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -42,7 +42,7 @@ describe("Moves - Speed Swap", () => { const playerSpd = player.getStat(Stat.SPD, false); const enemySpd = enemy.getStat(Stat.SPD, false); - game.move.select(Moves.SPEED_SWAP); + game.move.select(MoveId.SPEED_SWAP); await game.phaseInterceptor.to(TurnEndPhase); expect(player.getStat(Stat.SPD, false)).toBe(enemySpd); diff --git a/test/moves/spikes.test.ts b/test/moves/spikes.test.ts index f37b54a2904..278c4510239 100644 --- a/test/moves/spikes.test.ts +++ b/test/moves/spikes.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -24,20 +24,20 @@ describe("Moves - Spikes", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .ability(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) - .moveset([Moves.SPIKES, Moves.SPLASH, Moves.ROAR]); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .ability(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) + .moveset([MoveId.SPIKES, MoveId.SPLASH, MoveId.ROAR]); }); it("should not damage the team that set them", async () => { - await game.classicMode.startBattle([Species.MIGHTYENA, Species.POOCHYENA]); + await game.classicMode.startBattle([SpeciesId.MIGHTYENA, SpeciesId.POOCHYENA]); - game.move.select(Moves.SPIKES); + game.move.select(MoveId.SPIKES); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); game.doSwitchPokemon(1); @@ -52,12 +52,12 @@ describe("Moves - Spikes", () => { it("should damage opposing pokemon that are forced to switch in", async () => { game.override.startingWave(5); - await game.classicMode.startBattle([Species.MIGHTYENA, Species.POOCHYENA]); + await game.classicMode.startBattle([SpeciesId.MIGHTYENA, SpeciesId.POOCHYENA]); - game.move.select(Moves.SPIKES); + game.move.select(MoveId.SPIKES); await game.toNextTurn(); - game.move.select(Moves.ROAR); + game.move.select(MoveId.ROAR); await game.toNextTurn(); const enemy = game.scene.getEnemyParty()[0]; @@ -66,12 +66,12 @@ describe("Moves - Spikes", () => { it("should damage opposing pokemon that choose to switch in", async () => { game.override.startingWave(5); - await game.classicMode.startBattle([Species.MIGHTYENA, Species.POOCHYENA]); + await game.classicMode.startBattle([SpeciesId.MIGHTYENA, SpeciesId.POOCHYENA]); - game.move.select(Moves.SPIKES); + game.move.select(MoveId.SPIKES); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.forceEnemyToSwitch(); await game.toNextTurn(); @@ -80,13 +80,13 @@ describe("Moves - Spikes", () => { }, 20000); it("should work when all targets fainted", async () => { - game.override.enemySpecies(Species.DIGLETT); + game.override.enemySpecies(SpeciesId.DIGLETT); game.override.battleStyle("double"); game.override.startingLevel(50); - await game.classicMode.startBattle([Species.RAYQUAZA, Species.ROWLET]); + await game.classicMode.startBattle([SpeciesId.RAYQUAZA, SpeciesId.ROWLET]); - game.move.select(Moves.EARTHQUAKE); - game.move.select(Moves.SPIKES, 1); + game.move.select(MoveId.EARTHQUAKE); + game.move.select(MoveId.SPIKES, 1); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.arena.getTagOnSide(ArenaTrapTag, ArenaTagSide.ENEMY)).toBeDefined(); diff --git a/test/moves/spit_up.test.ts b/test/moves/spit_up.test.ts index b11d74da64a..2d576168f4c 100644 --- a/test/moves/spit_up.test.ts +++ b/test/moves/spit_up.test.ts @@ -5,10 +5,10 @@ import { BattlerTagType } from "#app/enums/battler-tag-type"; import type { TurnMove } from "#app/field/pokemon"; import { MoveResult } from "#app/field/pokemon"; import GameManager from "#test/testUtils/gameManager"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; import type Move from "#app/data/moves/move"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { MovePhase } from "#app/phases/move-phase"; @@ -29,18 +29,18 @@ describe("Moves - Spit Up", () => { }); beforeEach(() => { - spitUp = allMoves[Moves.SPIT_UP]; + spitUp = allMoves[MoveId.SPIT_UP]; game = new GameManager(phaserGame); game.override.battleStyle("single"); - game.override.enemySpecies(Species.RATTATA); - game.override.enemyMoveset(Moves.SPLASH); - game.override.enemyAbility(Abilities.NONE); + game.override.enemySpecies(SpeciesId.RATTATA); + game.override.enemyMoveset(MoveId.SPLASH); + game.override.enemyAbility(AbilityId.NONE); game.override.enemyLevel(2000); game.override.moveset(new Array(4).fill(spitUp.id)); - game.override.ability(Abilities.NONE); + game.override.ability(AbilityId.NONE); vi.spyOn(spitUp, "calculateBattlePower"); }); @@ -50,7 +50,7 @@ describe("Moves - Spit Up", () => { const stacksToSetup = 1; const expectedPower = 100; - await game.classicMode.startBattle([Species.ABOMASNOW]); + await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); const pokemon = game.scene.getPlayerPokemon()!; pokemon.addTag(BattlerTagType.STOCKPILING); @@ -59,7 +59,7 @@ describe("Moves - Spit Up", () => { expect(stockpilingTag).toBeDefined(); expect(stockpilingTag.stockpiledCount).toBe(stacksToSetup); - game.move.select(Moves.SPIT_UP); + game.move.select(MoveId.SPIT_UP); await game.phaseInterceptor.to(TurnInitPhase); expect(spitUp.calculateBattlePower).toHaveBeenCalledOnce(); @@ -72,7 +72,7 @@ describe("Moves - Spit Up", () => { const stacksToSetup = 2; const expectedPower = 200; - await game.classicMode.startBattle([Species.ABOMASNOW]); + await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); const pokemon = game.scene.getPlayerPokemon()!; pokemon.addTag(BattlerTagType.STOCKPILING); @@ -82,7 +82,7 @@ describe("Moves - Spit Up", () => { expect(stockpilingTag).toBeDefined(); expect(stockpilingTag.stockpiledCount).toBe(stacksToSetup); - game.move.select(Moves.SPIT_UP); + game.move.select(MoveId.SPIT_UP); await game.phaseInterceptor.to(TurnInitPhase); expect(spitUp.calculateBattlePower).toHaveBeenCalledOnce(); @@ -95,7 +95,7 @@ describe("Moves - Spit Up", () => { const stacksToSetup = 3; const expectedPower = 300; - await game.classicMode.startBattle([Species.ABOMASNOW]); + await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); const pokemon = game.scene.getPlayerPokemon()!; pokemon.addTag(BattlerTagType.STOCKPILING); @@ -106,7 +106,7 @@ describe("Moves - Spit Up", () => { expect(stockpilingTag).toBeDefined(); expect(stockpilingTag.stockpiledCount).toBe(stacksToSetup); - game.move.select(Moves.SPIT_UP); + game.move.select(MoveId.SPIT_UP); await game.phaseInterceptor.to(TurnInitPhase); expect(spitUp.calculateBattlePower).toHaveBeenCalledOnce(); @@ -117,18 +117,18 @@ describe("Moves - Spit Up", () => { }); it("fails without stacks", async () => { - await game.classicMode.startBattle([Species.ABOMASNOW]); + await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); const pokemon = game.scene.getPlayerPokemon()!; const stockpilingTag = pokemon.getTag(StockpilingTag)!; expect(stockpilingTag).toBeUndefined(); - game.move.select(Moves.SPIT_UP); + game.move.select(MoveId.SPIT_UP); await game.phaseInterceptor.to(TurnInitPhase); expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ - move: Moves.SPIT_UP, + move: MoveId.SPIT_UP, result: MoveResult.FAIL, targets: [game.scene.getEnemyPokemon()!.getBattlerIndex()], }); @@ -138,7 +138,7 @@ describe("Moves - Spit Up", () => { describe("restores stat boosts granted by stacks", () => { it("decreases stats based on stored values (both boosts equal)", async () => { - await game.classicMode.startBattle([Species.ABOMASNOW]); + await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); const pokemon = game.scene.getPlayerPokemon()!; pokemon.addTag(BattlerTagType.STOCKPILING); @@ -146,7 +146,7 @@ describe("Moves - Spit Up", () => { const stockpilingTag = pokemon.getTag(StockpilingTag)!; expect(stockpilingTag).toBeDefined(); - game.move.select(Moves.SPIT_UP); + game.move.select(MoveId.SPIT_UP); await game.phaseInterceptor.to(MovePhase); expect(pokemon.getStatStage(Stat.DEF)).toBe(1); @@ -155,7 +155,7 @@ describe("Moves - Spit Up", () => { await game.phaseInterceptor.to(TurnInitPhase); expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ - move: Moves.SPIT_UP, + move: MoveId.SPIT_UP, result: MoveResult.SUCCESS, targets: [game.scene.getEnemyPokemon()!.getBattlerIndex()], }); @@ -169,7 +169,7 @@ describe("Moves - Spit Up", () => { }); it("decreases stats based on stored values (different boosts)", async () => { - await game.classicMode.startBattle([Species.ABOMASNOW]); + await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); const pokemon = game.scene.getPlayerPokemon()!; pokemon.addTag(BattlerTagType.STOCKPILING); @@ -183,11 +183,11 @@ describe("Moves - Spit Up", () => { [Stat.SPDEF]: 2, }; - game.move.select(Moves.SPIT_UP); + game.move.select(MoveId.SPIT_UP); await game.phaseInterceptor.to(TurnInitPhase); expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ - move: Moves.SPIT_UP, + move: MoveId.SPIT_UP, result: MoveResult.SUCCESS, targets: [game.scene.getEnemyPokemon()!.getBattlerIndex()], }); diff --git a/test/moves/spotlight.test.ts b/test/moves/spotlight.test.ts index e617682bdd5..2798dfa282a 100644 --- a/test/moves/spotlight.test.ts +++ b/test/moves/spotlight.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; @@ -23,24 +23,24 @@ describe("Moves - Spotlight", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleStyle("double"); - game.override.starterSpecies(Species.AMOONGUSS); - game.override.enemySpecies(Species.SNORLAX); + game.override.starterSpecies(SpeciesId.AMOONGUSS); + game.override.enemySpecies(SpeciesId.SNORLAX); game.override.startingLevel(100); game.override.enemyLevel(100); - game.override.moveset([Moves.FOLLOW_ME, Moves.RAGE_POWDER, Moves.SPOTLIGHT, Moves.QUICK_ATTACK]); - game.override.enemyMoveset([Moves.FOLLOW_ME, Moves.SPLASH]); + game.override.moveset([MoveId.FOLLOW_ME, MoveId.RAGE_POWDER, MoveId.SPOTLIGHT, MoveId.QUICK_ATTACK]); + game.override.enemyMoveset([MoveId.FOLLOW_ME, MoveId.SPLASH]); }); test("move should redirect attacks to the target", async () => { - await game.classicMode.startBattle([Species.AMOONGUSS, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.AMOONGUSS, SpeciesId.CHARIZARD]); const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.SPOTLIGHT, 0, BattlerIndex.ENEMY); - game.move.select(Moves.QUICK_ATTACK, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.SPOTLIGHT, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.QUICK_ATTACK, 1, BattlerIndex.ENEMY_2); - await game.move.selectEnemyMove(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase, false); @@ -49,15 +49,15 @@ describe("Moves - Spotlight", () => { }); test("move should cause other redirection moves to fail", async () => { - await game.classicMode.startBattle([Species.AMOONGUSS, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.AMOONGUSS, SpeciesId.CHARIZARD]); const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.SPOTLIGHT, 0, BattlerIndex.ENEMY); - game.move.select(Moves.QUICK_ATTACK, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.SPOTLIGHT, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.QUICK_ATTACK, 1, BattlerIndex.ENEMY_2); - await game.move.selectEnemyMove(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.FOLLOW_ME); + await game.move.selectEnemyMove(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.FOLLOW_ME); await game.phaseInterceptor.to("BerryPhase", false); diff --git a/test/moves/steamroller.test.ts b/test/moves/steamroller.test.ts index a77a30321e1..f4f8131ff7b 100644 --- a/test/moves/steamroller.test.ts +++ b/test/moves/steamroller.test.ts @@ -2,9 +2,9 @@ import { BattlerIndex } from "#app/battle"; import { allMoves } from "#app/data/data-lists"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import type { DamageCalculationResult } from "#app/field/pokemon"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -25,26 +25,26 @@ describe("Moves - Steamroller", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.moveset([Moves.STEAMROLLER]).battleStyle("single").enemyAbility(Abilities.BALL_FETCH); + game.override.moveset([MoveId.STEAMROLLER]).battleStyle("single").enemyAbility(AbilityId.BALL_FETCH); }); it("should always hit a minimzed target with double damage", async () => { - game.override.enemySpecies(Species.DITTO).enemyMoveset(Moves.MINIMIZE); - await game.classicMode.startBattle([Species.IRON_BOULDER]); + game.override.enemySpecies(SpeciesId.DITTO).enemyMoveset(MoveId.MINIMIZE); + await game.classicMode.startBattle([SpeciesId.IRON_BOULDER]); const ditto = game.scene.getEnemyPokemon()!; vi.spyOn(ditto, "getAttackDamage"); ditto.hp = 5000; - const steamroller = allMoves[Moves.STEAMROLLER]; + const steamroller = allMoves[MoveId.STEAMROLLER]; vi.spyOn(steamroller, "calculateBattleAccuracy"); const ironBoulder = game.scene.getPlayerPokemon()!; vi.spyOn(ironBoulder, "getAccuracyMultiplier"); // Turn 1 - game.move.select(Moves.STEAMROLLER); + game.move.select(MoveId.STEAMROLLER); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); // Turn 2 - game.move.select(Moves.STEAMROLLER); + game.move.select(MoveId.STEAMROLLER); await game.toNextTurn(); const [dmgCalcTurn1, dmgCalcTurn2]: DamageCalculationResult[] = vi diff --git a/test/moves/stockpile.test.ts b/test/moves/stockpile.test.ts index 196a1d8ca9a..5bf2b74d4d9 100644 --- a/test/moves/stockpile.test.ts +++ b/test/moves/stockpile.test.ts @@ -4,9 +4,9 @@ import type { TurnMove } from "#app/field/pokemon"; import { MoveResult } from "#app/field/pokemon"; import { CommandPhase } from "#app/phases/command-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -29,17 +29,17 @@ describe("Moves - Stockpile", () => { game.override.battleStyle("single"); - game.override.enemySpecies(Species.RATTATA); - game.override.enemyMoveset(Moves.SPLASH); - game.override.enemyAbility(Abilities.NONE); + game.override.enemySpecies(SpeciesId.RATTATA); + game.override.enemyMoveset(MoveId.SPLASH); + game.override.enemyAbility(AbilityId.NONE); game.override.startingLevel(2000); - game.override.moveset([Moves.STOCKPILE, Moves.SPLASH]); - game.override.ability(Abilities.NONE); + game.override.moveset([MoveId.STOCKPILE, MoveId.SPLASH]); + game.override.ability(AbilityId.NONE); }); it("gains a stockpile stack and raises user's DEF and SPDEF stat stages by 1 on each use, fails at max stacks (3)", async () => { - await game.classicMode.startBattle([Species.ABOMASNOW]); + await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); const user = game.scene.getPlayerPokemon()!; @@ -56,7 +56,7 @@ describe("Moves - Stockpile", () => { await game.phaseInterceptor.to(CommandPhase); } - game.move.select(Moves.STOCKPILE); + game.move.select(MoveId.STOCKPILE); await game.phaseInterceptor.to(TurnInitPhase); const stockpilingTag = user.getTag(StockpilingTag)!; @@ -75,7 +75,7 @@ describe("Moves - Stockpile", () => { expect(stockpilingTag.stockpiledCount).toBe(3); expect(user.getMoveHistory().at(-1)).toMatchObject({ result: MoveResult.FAIL, - move: Moves.STOCKPILE, + move: MoveId.STOCKPILE, targets: [user.getBattlerIndex()], }); } @@ -83,7 +83,7 @@ describe("Moves - Stockpile", () => { }); it("gains a stockpile stack even if user's DEF and SPDEF stat stages are at +6", async () => { - await game.classicMode.startBattle([Species.ABOMASNOW]); + await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); const user = game.scene.getPlayerPokemon()!; @@ -94,7 +94,7 @@ describe("Moves - Stockpile", () => { expect(user.getStatStage(Stat.DEF)).toBe(6); expect(user.getStatStage(Stat.SPDEF)).toBe(6); - game.move.select(Moves.STOCKPILE); + game.move.select(MoveId.STOCKPILE); await game.phaseInterceptor.to(TurnInitPhase); const stockpilingTag = user.getTag(StockpilingTag)!; @@ -106,7 +106,7 @@ describe("Moves - Stockpile", () => { // do it again, just for good measure await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.STOCKPILE); + game.move.select(MoveId.STOCKPILE); await game.phaseInterceptor.to(TurnInitPhase); const stockpilingTagAgain = user.getTag(StockpilingTag)!; diff --git a/test/moves/struggle.test.ts b/test/moves/struggle.test.ts index 61c6cd23e10..cd3c65217ed 100644 --- a/test/moves/struggle.test.ts +++ b/test/moves/struggle.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -22,21 +22,21 @@ describe("Moves - Struggle", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should not have its power boosted by adaptability or stab", async () => { - game.override.moveset([Moves.STRUGGLE]).ability(Abilities.ADAPTABILITY); - await game.classicMode.startBattle([Species.RATTATA]); + game.override.moveset([MoveId.STRUGGLE]).ability(AbilityId.ADAPTABILITY); + await game.classicMode.startBattle([SpeciesId.RATTATA]); const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.STRUGGLE); + game.move.select(MoveId.STRUGGLE); const stabSpy = vi.spyOn(enemy, "calculateStabMultiplier"); @@ -48,11 +48,11 @@ describe("Moves - Struggle", () => { }); it("should ignore type effectiveness", async () => { - game.override.moveset([Moves.STRUGGLE]); - await game.classicMode.startBattle([Species.GASTLY]); + game.override.moveset([MoveId.STRUGGLE]); + await game.classicMode.startBattle([SpeciesId.GASTLY]); const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.STRUGGLE); + game.move.select(MoveId.STRUGGLE); const moveEffectivenessSpy = vi.spyOn(enemy, "getMoveEffectiveness"); diff --git a/test/moves/substitute.test.ts b/test/moves/substitute.test.ts index 6d0995d3a26..97296be7d8f 100644 --- a/test/moves/substitute.test.ts +++ b/test/moves/substitute.test.ts @@ -8,12 +8,12 @@ import type { CommandPhase } from "#app/phases/command-phase"; import GameManager from "#test/testUtils/gameManager"; import { Command } from "#app/ui/command-ui-handler"; import { UiMode } from "#enums/ui-mode"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; import { BerryType } from "#enums/berry-type"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; import Phaser from "phaser"; @@ -38,20 +38,20 @@ describe("Moves - Substitute", () => { game.override .battleStyle("single") - .moveset([Moves.SUBSTITUTE, Moves.SWORDS_DANCE, Moves.TACKLE, Moves.SPLASH]) - .enemySpecies(Species.SNORLAX) - .enemyAbility(Abilities.INSOMNIA) - .enemyMoveset(Moves.SPLASH) + .moveset([MoveId.SUBSTITUTE, MoveId.SWORDS_DANCE, MoveId.TACKLE, MoveId.SPLASH]) + .enemySpecies(SpeciesId.SNORLAX) + .enemyAbility(AbilityId.INSOMNIA) + .enemyMoveset(MoveId.SPLASH) .startingLevel(100) .enemyLevel(100); }); it("should cause the user to take damage", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SUBSTITUTE); + game.move.select(MoveId.SUBSTITUTE); await game.phaseInterceptor.to("MoveEndPhase", false); @@ -59,13 +59,13 @@ describe("Moves - Substitute", () => { }); it("should redirect enemy attack damage to the Substitute doll", async () => { - game.override.enemyMoveset(Moves.TACKLE); + game.override.enemyMoveset(MoveId.TACKLE); - await game.classicMode.startBattle([Species.SKARMORY]); + await game.classicMode.startBattle([SpeciesId.SKARMORY]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SUBSTITUTE); + game.move.select(MoveId.SUBSTITUTE); await game.phaseInterceptor.to("MoveEndPhase", false); @@ -81,14 +81,14 @@ describe("Moves - Substitute", () => { it("should fade after redirecting more damage than its remaining HP", async () => { // Giga Impact OHKOs Magikarp if substitute isn't up - game.override.enemyMoveset(Moves.GIGA_IMPACT); - vi.spyOn(allMoves[Moves.GIGA_IMPACT], "accuracy", "get").mockReturnValue(100); + game.override.enemyMoveset(MoveId.GIGA_IMPACT); + vi.spyOn(allMoves[MoveId.GIGA_IMPACT], "accuracy", "get").mockReturnValue(100); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SUBSTITUTE); + game.move.select(MoveId.SUBSTITUTE); await game.phaseInterceptor.to("MoveEndPhase", false); @@ -103,13 +103,13 @@ describe("Moves - Substitute", () => { }); it("should block stat changes from status moves", async () => { - game.override.enemyMoveset(Moves.CHARM); + game.override.enemyMoveset(MoveId.CHARM); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SUBSTITUTE); + game.move.select(MoveId.SUBSTITUTE); await game.phaseInterceptor.to("BerryPhase", false); @@ -118,13 +118,13 @@ describe("Moves - Substitute", () => { }); it("should be bypassed by sound-based moves", async () => { - game.override.enemyMoveset(Moves.ECHOED_VOICE); + game.override.enemyMoveset(MoveId.ECHOED_VOICE); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SUBSTITUTE); + game.move.select(MoveId.SUBSTITUTE); await game.phaseInterceptor.to("MoveEndPhase"); @@ -138,14 +138,14 @@ describe("Moves - Substitute", () => { }); it("should be bypassed by attackers with Infiltrator", async () => { - game.override.enemyMoveset(Moves.TACKLE); - game.override.enemyAbility(Abilities.INFILTRATOR); + game.override.enemyMoveset(MoveId.TACKLE); + game.override.enemyAbility(AbilityId.INFILTRATOR); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SUBSTITUTE); + game.move.select(MoveId.SUBSTITUTE); await game.phaseInterceptor.to("MoveEndPhase"); @@ -159,16 +159,16 @@ describe("Moves - Substitute", () => { }); it("shouldn't block the user's own status moves", async () => { - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SUBSTITUTE); + game.move.select(MoveId.SUBSTITUTE); await game.phaseInterceptor.to("MoveEndPhase"); await game.toNextTurn(); - game.move.select(Moves.SWORDS_DANCE); + game.move.select(MoveId.SWORDS_DANCE); await game.phaseInterceptor.to("MoveEndPhase", false); @@ -176,16 +176,16 @@ describe("Moves - Substitute", () => { }); it("shouldn't block moves that target the user's side of the field", async () => { - game.override.moveset(Moves.LIGHT_SCREEN); + game.override.moveset(MoveId.LIGHT_SCREEN); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; vi.spyOn(leadPokemon, "getMoveEffectiveness"); - leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, leadPokemon.id); + leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); - game.move.select(Moves.LIGHT_SCREEN); + game.move.select(MoveId.LIGHT_SCREEN); await game.toNextTurn(); @@ -194,14 +194,14 @@ describe("Moves - Substitute", () => { }); it("shouldn't block the opponent from setting hazards", async () => { - game.override.enemyMoveset(Moves.STEALTH_ROCK); + game.override.enemyMoveset(MoveId.STEALTH_ROCK); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; vi.spyOn(leadPokemon, "getMoveEffectiveness"); - game.move.select(Moves.SUBSTITUTE); + game.move.select(MoveId.SUBSTITUTE); await game.toNextTurn(); @@ -210,17 +210,17 @@ describe("Moves - Substitute", () => { }); it("shouldn't block moves that target both sides of the field", async () => { - game.override.moveset(Moves.TRICK_ROOM).enemyMoveset(Moves.GRAVITY); + game.override.moveset(MoveId.TRICK_ROOM).enemyMoveset(MoveId.GRAVITY); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE]); const pokemon = game.scene.getField(true); pokemon.forEach(p => { vi.spyOn(p, "getMoveEffectiveness"); - p.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, p.id); + p.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, p.id); }); - game.move.select(Moves.TRICK_ROOM); + game.move.select(MoveId.TRICK_ROOM); await game.toNextTurn(); @@ -230,17 +230,17 @@ describe("Moves - Substitute", () => { }); it("should protect the user from flinching", async () => { - game.override.enemyMoveset(Moves.FAKE_OUT); + game.override.enemyMoveset(MoveId.FAKE_OUT); game.override.startingLevel(1); // Ensures the Substitute will break - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, leadPokemon.id); + leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("BerryPhase", false); @@ -248,16 +248,16 @@ describe("Moves - Substitute", () => { }); it("should protect the user from being trapped", async () => { - vi.spyOn(allMoves[Moves.SAND_TOMB], "accuracy", "get").mockReturnValue(100); - game.override.enemyMoveset(Moves.SAND_TOMB); + vi.spyOn(allMoves[MoveId.SAND_TOMB], "accuracy", "get").mockReturnValue(100); + game.override.enemyMoveset(MoveId.SAND_TOMB); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; - leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, leadPokemon.id); + leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase", false); @@ -265,16 +265,16 @@ describe("Moves - Substitute", () => { }); it("should prevent the user's stats from being lowered", async () => { - vi.spyOn(allMoves[Moves.LIQUIDATION], "chance", "get").mockReturnValue(100); - game.override.enemyMoveset(Moves.LIQUIDATION); + vi.spyOn(allMoves[MoveId.LIQUIDATION], "chance", "get").mockReturnValue(100); + game.override.enemyMoveset(MoveId.LIQUIDATION); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; - leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, leadPokemon.id); + leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase", false); @@ -282,15 +282,15 @@ describe("Moves - Substitute", () => { }); it("should protect the user from being afflicted with status effects", async () => { - game.override.enemyMoveset(Moves.NUZZLE); + game.override.enemyMoveset(MoveId.NUZZLE); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; - leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, leadPokemon.id); + leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase", false); @@ -298,17 +298,17 @@ describe("Moves - Substitute", () => { }); it("should prevent the user's items from being stolen", async () => { - game.override.enemyMoveset(Moves.THIEF); - vi.spyOn(allMoves[Moves.THIEF], "attrs", "get").mockReturnValue([new StealHeldItemChanceAttr(1.0)]); // give Thief 100% steal rate + game.override.enemyMoveset(MoveId.THIEF); + vi.spyOn(allMoves[MoveId.THIEF], "attrs", "get").mockReturnValue([new StealHeldItemChanceAttr(1.0)]); // give Thief 100% steal rate game.override.startingHeldItems([{ name: "BERRY", type: BerryType.SITRUS }]); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; - leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, leadPokemon.id); + leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase", false); @@ -316,17 +316,17 @@ describe("Moves - Substitute", () => { }); it("should prevent the user's items from being removed", async () => { - game.override.moveset([Moves.KNOCK_OFF]); + game.override.moveset([MoveId.KNOCK_OFF]); game.override.enemyHeldItems([{ name: "BERRY", type: BerryType.SITRUS }]); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE]); const enemyPokemon = game.scene.getEnemyPokemon()!; - enemyPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, enemyPokemon.id); + enemyPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, enemyPokemon.id); const enemyNumItems = enemyPokemon.getHeldItems().length; - game.move.select(Moves.KNOCK_OFF); + game.move.select(MoveId.KNOCK_OFF); await game.phaseInterceptor.to("MoveEndPhase", false); @@ -334,17 +334,17 @@ describe("Moves - Substitute", () => { }); it("move effect should prevent the user's berries from being stolen and eaten", async () => { - game.override.enemyMoveset(Moves.BUG_BITE); + game.override.enemyMoveset(MoveId.BUG_BITE); game.override.startingHeldItems([{ name: "BERRY", type: BerryType.SITRUS }]); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, leadPokemon.id); + leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("MoveEndPhase", false); const enemyPostAttackHp = enemyPokemon.hp; @@ -356,15 +356,15 @@ describe("Moves - Substitute", () => { }); it("should prevent the user's stats from being reset by Clear Smog", async () => { - game.override.enemyMoveset(Moves.CLEAR_SMOG); + game.override.enemyMoveset(MoveId.CLEAR_SMOG); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; - leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, leadPokemon.id); + leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); - game.move.select(Moves.SWORDS_DANCE); + game.move.select(MoveId.SWORDS_DANCE); await game.phaseInterceptor.to("BerryPhase", false); @@ -372,16 +372,16 @@ describe("Moves - Substitute", () => { }); it("should prevent the user from becoming confused", async () => { - game.override.enemyMoveset(Moves.MAGICAL_TORQUE); - vi.spyOn(allMoves[Moves.MAGICAL_TORQUE], "chance", "get").mockReturnValue(100); + game.override.enemyMoveset(MoveId.MAGICAL_TORQUE); + vi.spyOn(allMoves[MoveId.MAGICAL_TORQUE], "chance", "get").mockReturnValue(100); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; - leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, leadPokemon.id); + leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); - game.move.select(Moves.SWORDS_DANCE); + game.move.select(MoveId.SWORDS_DANCE); await game.phaseInterceptor.to("BerryPhase", false); @@ -390,13 +390,13 @@ describe("Moves - Substitute", () => { }); it("should transfer to the switched in Pokemon when the source uses Baton Pass", async () => { - game.override.moveset([Moves.SUBSTITUTE, Moves.BATON_PASS]); + game.override.moveset([MoveId.SUBSTITUTE, MoveId.BATON_PASS]); - await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); const leadPokemon = game.scene.getPlayerPokemon()!; - leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, leadPokemon.id); + leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); // Simulate a Baton switch for the player this turn game.onNextPrompt("CommandPhase", UiMode.COMMAND, () => { @@ -412,14 +412,14 @@ describe("Moves - Substitute", () => { }); it("should prevent the source's Rough Skin from activating when hit", async () => { - game.override.enemyMoveset(Moves.TACKLE); - game.override.ability(Abilities.ROUGH_SKIN); + game.override.enemyMoveset(MoveId.TACKLE); + game.override.ability(AbilityId.ROUGH_SKIN); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SUBSTITUTE); + game.move.select(MoveId.SUBSTITUTE); await game.phaseInterceptor.to("BerryPhase", false); @@ -427,20 +427,20 @@ describe("Moves - Substitute", () => { }); it("should prevent the source's Focus Punch from failing when hit", async () => { - game.override.enemyMoveset(Moves.TACKLE); - game.override.moveset([Moves.FOCUS_PUNCH]); + game.override.enemyMoveset(MoveId.TACKLE); + game.override.moveset([MoveId.FOCUS_PUNCH]); // Make Focus Punch 40 power to avoid a KO - vi.spyOn(allMoves[Moves.FOCUS_PUNCH], "calculateBattlePower").mockReturnValue(40); + vi.spyOn(allMoves[MoveId.FOCUS_PUNCH], "calculateBattlePower").mockReturnValue(40); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - playerPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, playerPokemon.id); + playerPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, playerPokemon.id); - game.move.select(Moves.FOCUS_PUNCH); + game.move.select(MoveId.FOCUS_PUNCH); await game.phaseInterceptor.to("BerryPhase", false); @@ -449,16 +449,16 @@ describe("Moves - Substitute", () => { }); it("should not allow Shell Trap to activate when attacked", async () => { - game.override.enemyMoveset(Moves.TACKLE); - game.override.moveset([Moves.SHELL_TRAP]); + game.override.enemyMoveset(MoveId.TACKLE); + game.override.moveset([MoveId.SHELL_TRAP]); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE]); const playerPokemon = game.scene.getPlayerPokemon()!; - playerPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, playerPokemon.id); + playerPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, playerPokemon.id); - game.move.select(Moves.SHELL_TRAP); + game.move.select(MoveId.SHELL_TRAP); await game.phaseInterceptor.to("BerryPhase", false); @@ -466,17 +466,17 @@ describe("Moves - Substitute", () => { }); it("should not allow Beak Blast to burn opponents when hit", async () => { - game.override.enemyMoveset(Moves.TACKLE); - game.override.moveset([Moves.BEAK_BLAST]); + game.override.enemyMoveset(MoveId.TACKLE); + game.override.moveset([MoveId.BEAK_BLAST]); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - playerPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, playerPokemon.id); + playerPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, playerPokemon.id); - game.move.select(Moves.BEAK_BLAST); + game.move.select(MoveId.BEAK_BLAST); await game.phaseInterceptor.to("MoveEndPhase"); @@ -484,17 +484,17 @@ describe("Moves - Substitute", () => { }); it("should cause incoming attacks to not activate Counter", async () => { - game.override.enemyMoveset(Moves.TACKLE); - game.override.moveset([Moves.COUNTER]); + game.override.enemyMoveset(MoveId.TACKLE); + game.override.moveset([MoveId.COUNTER]); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.BLASTOISE]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - playerPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, playerPokemon.id); + playerPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, playerPokemon.id); - game.move.select(Moves.COUNTER); + game.move.select(MoveId.COUNTER); await game.phaseInterceptor.to("BerryPhase", false); @@ -503,15 +503,15 @@ describe("Moves - Substitute", () => { }); it("should prevent Sappy Seed from applying its Leech Seed effect to the user", async () => { - game.override.enemyMoveset(Moves.SAPPY_SEED); + game.override.enemyMoveset(MoveId.SAPPY_SEED); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const playerPokemon = game.scene.getPlayerPokemon()!; - playerPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, playerPokemon.id); + playerPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, playerPokemon.id); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); // enemy uses Sappy Seed first await game.move.forceHit(); // forces Sappy Seed to hit diff --git a/test/moves/swallow.test.ts b/test/moves/swallow.test.ts index 6a2fa8840ea..4452636c3af 100644 --- a/test/moves/swallow.test.ts +++ b/test/moves/swallow.test.ts @@ -5,9 +5,9 @@ import type { TurnMove } from "#app/field/pokemon"; import { MoveResult } from "#app/field/pokemon"; import { MovePhase } from "#app/phases/move-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -29,12 +29,12 @@ describe("Moves - Swallow", () => { game.override .battleStyle("single") - .enemySpecies(Species.RATTATA) - .enemyMoveset(Moves.SPLASH) - .enemyAbility(Abilities.NONE) + .enemySpecies(SpeciesId.RATTATA) + .enemyMoveset(MoveId.SPLASH) + .enemyAbility(AbilityId.NONE) .enemyLevel(2000) - .moveset(Moves.SWALLOW) - .ability(Abilities.NONE); + .moveset(MoveId.SWALLOW) + .ability(AbilityId.NONE); }); describe("consumes all stockpile stacks to heal (scaling with stacks)", () => { @@ -42,7 +42,7 @@ describe("Moves - Swallow", () => { const stacksToSetup = 1; const expectedHeal = 25; - await game.classicMode.startBattle([Species.ABOMASNOW]); + await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); const pokemon = game.scene.getPlayerPokemon()!; vi.spyOn(pokemon, "getMaxHp").mockReturnValue(100); @@ -56,7 +56,7 @@ describe("Moves - Swallow", () => { vi.spyOn(pokemon, "heal"); - game.move.select(Moves.SWALLOW); + game.move.select(MoveId.SWALLOW); await game.phaseInterceptor.to(TurnInitPhase); expect(pokemon.heal).toHaveBeenCalledOnce(); @@ -69,7 +69,7 @@ describe("Moves - Swallow", () => { const stacksToSetup = 2; const expectedHeal = 50; - await game.classicMode.startBattle([Species.ABOMASNOW]); + await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); const pokemon = game.scene.getPlayerPokemon()!; vi.spyOn(pokemon, "getMaxHp").mockReturnValue(100); @@ -84,7 +84,7 @@ describe("Moves - Swallow", () => { vi.spyOn(pokemon, "heal"); - game.move.select(Moves.SWALLOW); + game.move.select(MoveId.SWALLOW); await game.phaseInterceptor.to(TurnInitPhase); expect(pokemon.heal).toHaveBeenCalledOnce(); @@ -97,7 +97,7 @@ describe("Moves - Swallow", () => { const stacksToSetup = 3; const expectedHeal = 100; - await game.classicMode.startBattle([Species.ABOMASNOW]); + await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); const pokemon = game.scene.getPlayerPokemon()!; vi.spyOn(pokemon, "getMaxHp").mockReturnValue(100); @@ -113,7 +113,7 @@ describe("Moves - Swallow", () => { vi.spyOn(pokemon, "heal"); - game.move.select(Moves.SWALLOW); + game.move.select(MoveId.SWALLOW); await game.phaseInterceptor.to(TurnInitPhase); expect(pokemon.heal).toHaveBeenCalledOnce(); @@ -124,18 +124,18 @@ describe("Moves - Swallow", () => { }); it("fails without stacks", async () => { - await game.classicMode.startBattle([Species.ABOMASNOW]); + await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); const pokemon = game.scene.getPlayerPokemon()!; const stockpilingTag = pokemon.getTag(StockpilingTag)!; expect(stockpilingTag).toBeUndefined(); - game.move.select(Moves.SWALLOW); + game.move.select(MoveId.SWALLOW); await game.phaseInterceptor.to(TurnInitPhase); expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ - move: Moves.SWALLOW, + move: MoveId.SWALLOW, result: MoveResult.FAIL, targets: [pokemon.getBattlerIndex()], }); @@ -143,7 +143,7 @@ describe("Moves - Swallow", () => { describe("restores stat stage boosts granted by stacks", () => { it("decreases stats based on stored values (both boosts equal)", async () => { - await game.classicMode.startBattle([Species.ABOMASNOW]); + await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); const pokemon = game.scene.getPlayerPokemon()!; pokemon.addTag(BattlerTagType.STOCKPILING); @@ -151,7 +151,7 @@ describe("Moves - Swallow", () => { const stockpilingTag = pokemon.getTag(StockpilingTag)!; expect(stockpilingTag).toBeDefined(); - game.move.select(Moves.SWALLOW); + game.move.select(MoveId.SWALLOW); await game.phaseInterceptor.to(MovePhase); expect(pokemon.getStatStage(Stat.DEF)).toBe(1); @@ -160,7 +160,7 @@ describe("Moves - Swallow", () => { await game.phaseInterceptor.to(TurnInitPhase); expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ - move: Moves.SWALLOW, + move: MoveId.SWALLOW, result: MoveResult.SUCCESS, targets: [pokemon.getBattlerIndex()], }); @@ -172,7 +172,7 @@ describe("Moves - Swallow", () => { }); it("lower stat stages based on stored values (different boosts)", async () => { - await game.classicMode.startBattle([Species.ABOMASNOW]); + await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); const pokemon = game.scene.getPlayerPokemon()!; pokemon.addTag(BattlerTagType.STOCKPILING); @@ -186,12 +186,12 @@ describe("Moves - Swallow", () => { [Stat.SPDEF]: 2, }; - game.move.select(Moves.SWALLOW); + game.move.select(MoveId.SWALLOW); await game.phaseInterceptor.to(TurnInitPhase); expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ - move: Moves.SWALLOW, + move: MoveId.SWALLOW, result: MoveResult.SUCCESS, targets: [pokemon.getBattlerIndex()], }); diff --git a/test/moves/synchronoise.test.ts b/test/moves/synchronoise.test.ts index 0f59bce26b4..176137c8180 100644 --- a/test/moves/synchronoise.test.ts +++ b/test/moves/synchronoise.test.ts @@ -1,7 +1,7 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; import { PokemonType } from "#enums/pokemon-type"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -23,24 +23,24 @@ describe("Moves - Synchronoise", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SYNCHRONOISE]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.SYNCHRONOISE]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should consider the user's tera type if it is terastallized", async () => { - await game.classicMode.startBattle([Species.BIDOOF]); + await game.classicMode.startBattle([SpeciesId.BIDOOF]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; // force the player to be terastallized playerPokemon.teraType = PokemonType.WATER; playerPokemon.isTerastallized = true; - game.move.select(Moves.SYNCHRONOISE); + game.move.select(MoveId.SYNCHRONOISE); await game.phaseInterceptor.to("BerryPhase"); expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); }); diff --git a/test/moves/syrup_bomb.test.ts b/test/moves/syrup_bomb.test.ts index 8e9134497d0..76bc7e7bae0 100644 --- a/test/moves/syrup_bomb.test.ts +++ b/test/moves/syrup_bomb.test.ts @@ -1,6 +1,6 @@ -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; -import { Abilities } from "#enums/abilities"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; +import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; @@ -26,48 +26,48 @@ describe("Moves - SYRUP BOMB", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemySpecies(Species.SNORLAX) - .enemyAbility(Abilities.BALL_FETCH) - .ability(Abilities.BALL_FETCH) + .enemySpecies(SpeciesId.SNORLAX) + .enemyAbility(AbilityId.BALL_FETCH) + .ability(AbilityId.BALL_FETCH) .startingLevel(30) .enemyLevel(100) - .moveset([Moves.SYRUP_BOMB, Moves.SPLASH]) - .enemyMoveset(Moves.SPLASH); + .moveset([MoveId.SYRUP_BOMB, MoveId.SPLASH]) + .enemyMoveset(MoveId.SPLASH); }); //Bulbapedia Reference: https://bulbapedia.bulbagarden.net/wiki/syrup_bomb_(move) it("decreases the target Pokemon's speed stat once per turn for 3 turns", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const targetPokemon = game.scene.getEnemyPokemon()!; expect(targetPokemon.getStatStage(Stat.SPD)).toBe(0); - game.move.select(Moves.SYRUP_BOMB); + game.move.select(MoveId.SYRUP_BOMB); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceHit(); await game.toNextTurn(); expect(targetPokemon.getTag(BattlerTagType.SYRUP_BOMB)).toBeDefined(); expect(targetPokemon.getStatStage(Stat.SPD)).toBe(-1); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(targetPokemon.getTag(BattlerTagType.SYRUP_BOMB)).toBeDefined(); expect(targetPokemon.getStatStage(Stat.SPD)).toBe(-2); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(targetPokemon.getTag(BattlerTagType.SYRUP_BOMB)).toBeUndefined(); expect(targetPokemon.getStatStage(Stat.SPD)).toBe(-3); }); it("does not affect Pokemon with the ability Bulletproof", async () => { - game.override.enemyAbility(Abilities.BULLETPROOF); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.enemyAbility(AbilityId.BULLETPROOF); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const targetPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SYRUP_BOMB); + game.move.select(MoveId.SYRUP_BOMB); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceHit(); await game.toNextTurn(); @@ -77,9 +77,9 @@ describe("Moves - SYRUP BOMB", () => { }); it("stops lowering the target's speed if the user leaves the field", async () => { - await game.classicMode.startBattle([Species.FEEBAS, Species.MILOTIC]); + await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MILOTIC]); - game.move.select(Moves.SYRUP_BOMB); + game.move.select(MoveId.SYRUP_BOMB); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceHit(); await game.toNextTurn(); diff --git a/test/moves/tackle.test.ts b/test/moves/tackle.test.ts index ecd8750d17f..83a267dc7e4 100644 --- a/test/moves/tackle.test.ts +++ b/test/moves/tackle.test.ts @@ -1,8 +1,8 @@ import { Stat } from "#enums/stat"; import { EnemyCommandPhase } from "#app/phases/enemy-command-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -23,21 +23,21 @@ describe("Moves - Tackle", () => { beforeEach(() => { game = new GameManager(phaserGame); - const moveToUse = Moves.TACKLE; + const moveToUse = MoveId.TACKLE; game.override .battleStyle("single") - .enemySpecies(Species.MAGIKARP) + .enemySpecies(SpeciesId.MAGIKARP) .startingLevel(1) .startingWave(97) .moveset([moveToUse]) - .enemyMoveset(Moves.GROWTH) + .enemyMoveset(MoveId.GROWTH) .disableCrits(); }); it("TACKLE against ghost", async () => { - const moveToUse = Moves.TACKLE; - game.override.enemySpecies(Species.GENGAR); - await game.classicMode.startBattle([Species.MIGHTYENA]); + const moveToUse = MoveId.TACKLE; + game.override.enemySpecies(SpeciesId.GENGAR); + await game.classicMode.startBattle([SpeciesId.MIGHTYENA]); const hpOpponent = game.scene.currentBattle.enemyParty[0].hp; game.move.select(moveToUse); await game.phaseInterceptor.runFrom(EnemyCommandPhase).to(TurnEndPhase); @@ -46,8 +46,8 @@ describe("Moves - Tackle", () => { }, 20000); it("TACKLE against not resistant", async () => { - const moveToUse = Moves.TACKLE; - await game.classicMode.startBattle([Species.MIGHTYENA]); + const moveToUse = MoveId.TACKLE; + await game.classicMode.startBattle([SpeciesId.MIGHTYENA]); game.scene.currentBattle.enemyParty[0].stats[Stat.DEF] = 50; game.scene.getPlayerParty()[0].stats[Stat.ATK] = 50; diff --git a/test/moves/tail_whip.test.ts b/test/moves/tail_whip.test.ts index d15864dd671..5118897a7cb 100644 --- a/test/moves/tail_whip.test.ts +++ b/test/moves/tail_whip.test.ts @@ -1,8 +1,8 @@ import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import { EnemyCommandPhase } from "#app/phases/enemy-command-phase"; @@ -24,19 +24,19 @@ describe("Moves - Tail whip", () => { beforeEach(() => { game = new GameManager(phaserGame); - const moveToUse = Moves.TAIL_WHIP; + const moveToUse = MoveId.TAIL_WHIP; game.override.battleStyle("single"); - game.override.enemySpecies(Species.RATTATA); - game.override.enemyAbility(Abilities.INSOMNIA); - game.override.ability(Abilities.INSOMNIA); + game.override.enemySpecies(SpeciesId.RATTATA); + game.override.enemyAbility(AbilityId.INSOMNIA); + game.override.ability(AbilityId.INSOMNIA); game.override.startingLevel(2000); game.override.moveset([moveToUse]); - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); }); it("should lower DEF stat stage by 1", async () => { - const moveToUse = Moves.TAIL_WHIP; - await game.classicMode.startBattle([Species.MIGHTYENA, Species.MIGHTYENA]); + const moveToUse = MoveId.TAIL_WHIP; + await game.classicMode.startBattle([SpeciesId.MIGHTYENA, SpeciesId.MIGHTYENA]); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(0); diff --git a/test/moves/tailwind.test.ts b/test/moves/tailwind.test.ts index 40bae67b514..83078d7bf58 100644 --- a/test/moves/tailwind.test.ts +++ b/test/moves/tailwind.test.ts @@ -1,8 +1,8 @@ import { ArenaTagSide } from "#app/data/arena-tag"; import { ArenaTagType } from "#app/enums/arena-tag-type"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -26,14 +26,14 @@ describe("Moves - Tailwind", () => { game = new GameManager(phaserGame); game.override .battleStyle("double") - .moveset([Moves.TAILWIND, Moves.SPLASH]) - .enemyMoveset(Moves.SPLASH) - .enemyAbility(Abilities.BALL_FETCH) - .ability(Abilities.BALL_FETCH); + .moveset([MoveId.TAILWIND, MoveId.SPLASH]) + .enemyMoveset(MoveId.SPLASH) + .enemyAbility(AbilityId.BALL_FETCH) + .ability(AbilityId.BALL_FETCH); }); it("doubles the Speed stat of the Pokemons on its side", async () => { - await game.classicMode.startBattle([Species.MAGIKARP, Species.MEOWTH]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MEOWTH]); const magikarp = game.scene.getPlayerField()[0]; const meowth = game.scene.getPlayerField()[1]; @@ -43,8 +43,8 @@ describe("Moves - Tailwind", () => { expect(magikarp.getEffectiveStat(Stat.SPD)).equal(magikarpSpd); expect(meowth.getEffectiveStat(Stat.SPD)).equal(meowthSpd); - game.move.select(Moves.TAILWIND); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.TAILWIND); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -56,21 +56,21 @@ describe("Moves - Tailwind", () => { it("lasts for 4 turns", async () => { game.override.battleStyle("single"); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(Moves.TAILWIND); + game.move.select(MoveId.TAILWIND); await game.toNextTurn(); expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.PLAYER)).toBeDefined(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.PLAYER)).toBeDefined(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.PLAYER)).toBeDefined(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.PLAYER)).toBeUndefined(); @@ -79,7 +79,7 @@ describe("Moves - Tailwind", () => { it("does not affect the opposing side", async () => { game.override.battleStyle("single"); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const ally = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -92,7 +92,7 @@ describe("Moves - Tailwind", () => { expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.PLAYER)).toBeUndefined(); expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.ENEMY)).toBeUndefined(); - game.move.select(Moves.TAILWIND); + game.move.select(MoveId.TAILWIND); await game.phaseInterceptor.to("TurnEndPhase"); diff --git a/test/moves/tar_shot.test.ts b/test/moves/tar_shot.test.ts index 68f19e3ab51..21eace0ef1f 100644 --- a/test/moves/tar_shot.test.ts +++ b/test/moves/tar_shot.test.ts @@ -1,9 +1,9 @@ import { BattlerIndex } from "#app/battle"; import { PokemonType } from "#enums/pokemon-type"; -import { Moves } from "#app/enums/moves"; -import { Species } from "#app/enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#app/enums/stat"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -25,29 +25,29 @@ describe("Moves - Tar Shot", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) - .enemySpecies(Species.TANGELA) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) + .enemySpecies(SpeciesId.TANGELA) .enemyLevel(1000) - .moveset([Moves.TAR_SHOT, Moves.FIRE_PUNCH]) + .moveset([MoveId.TAR_SHOT, MoveId.FIRE_PUNCH]) .disableCrits(); }); it("lowers the target's Speed stat by one stage and doubles the effectiveness of Fire-type moves used on the target", async () => { - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.TAR_SHOT); + game.move.select(MoveId.TAR_SHOT); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.getStatStage(Stat.SPD)).toBe(-1); await game.toNextTurn(); - game.move.select(Moves.FIRE_PUNCH); + game.move.select(MoveId.FIRE_PUNCH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -55,27 +55,27 @@ describe("Moves - Tar Shot", () => { }); it("will not double the effectiveness of Fire-type moves used on a target that is already under the effect of Tar Shot (but may still lower its Speed)", async () => { - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.TAR_SHOT); + game.move.select(MoveId.TAR_SHOT); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.getStatStage(Stat.SPD)).toBe(-1); await game.toNextTurn(); - game.move.select(Moves.TAR_SHOT); + game.move.select(MoveId.TAR_SHOT); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.getStatStage(Stat.SPD)).toBe(-2); await game.toNextTurn(); - game.move.select(Moves.FIRE_PUNCH); + game.move.select(MoveId.FIRE_PUNCH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -83,8 +83,8 @@ describe("Moves - Tar Shot", () => { }); it("does not double the effectiveness of Fire-type moves against a Pokémon that is Terastallized", async () => { - game.override.enemySpecies(Species.SPRIGATITO); - await game.classicMode.startBattle([Species.PIKACHU]); + game.override.enemySpecies(SpeciesId.SPRIGATITO); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); const enemy = game.scene.getEnemyPokemon()!; enemy.teraType = PokemonType.GRASS; @@ -92,14 +92,14 @@ describe("Moves - Tar Shot", () => { vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.TAR_SHOT); + game.move.select(MoveId.TAR_SHOT); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.getStatStage(Stat.SPD)).toBe(-1); await game.toNextTurn(); - game.move.select(Moves.FIRE_PUNCH); + game.move.select(MoveId.FIRE_PUNCH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -107,14 +107,14 @@ describe("Moves - Tar Shot", () => { }); it("doubles the effectiveness of Fire-type moves against a Pokémon that is already under the effects of Tar Shot before it Terastallized", async () => { - game.override.enemySpecies(Species.SPRIGATITO); - await game.classicMode.startBattle([Species.PIKACHU]); + game.override.enemySpecies(SpeciesId.SPRIGATITO); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.TAR_SHOT); + game.move.select(MoveId.TAR_SHOT); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.getStatStage(Stat.SPD)).toBe(-1); @@ -124,7 +124,7 @@ describe("Moves - Tar Shot", () => { enemy.teraType = PokemonType.GRASS; enemy.isTerastallized = true; - game.move.select(Moves.FIRE_PUNCH); + game.move.select(MoveId.FIRE_PUNCH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); diff --git a/test/moves/taunt.test.ts b/test/moves/taunt.test.ts index bcb4789f888..e214bd77ef7 100644 --- a/test/moves/taunt.test.ts +++ b/test/moves/taunt.test.ts @@ -1,6 +1,6 @@ -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; -import { Abilities } from "#enums/abilities"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; +import { AbilityId } from "#enums/ability-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -24,31 +24,31 @@ describe("Moves - Taunt", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset([Moves.TAUNT, Moves.SPLASH]) - .enemySpecies(Species.SHUCKLE) - .moveset([Moves.GROWL]); + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset([MoveId.TAUNT, MoveId.SPLASH]) + .enemySpecies(SpeciesId.SHUCKLE) + .moveset([MoveId.GROWL]); }); it("Pokemon should not be able to use Status Moves", async () => { - await game.classicMode.startBattle([Species.REGIELEKI]); + await game.classicMode.startBattle([SpeciesId.REGIELEKI]); const playerPokemon = game.scene.getPlayerPokemon()!; // First turn, Player Pokemon succeeds using Growl without Taunt - game.move.select(Moves.GROWL); - await game.move.selectEnemyMove(Moves.TAUNT); + game.move.select(MoveId.GROWL); + await game.move.selectEnemyMove(MoveId.TAUNT); await game.toNextTurn(); const move1 = playerPokemon.getLastXMoves(1)[0]!; - expect(move1.move).toBe(Moves.GROWL); + expect(move1.move).toBe(MoveId.GROWL); expect(move1.result).toBe(MoveResult.SUCCESS); expect(playerPokemon?.getTag(BattlerTagType.TAUNT)).toBeDefined(); // Second turn, Taunt forces Struggle to occur - game.move.select(Moves.GROWL); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.GROWL); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); const move2 = playerPokemon.getLastXMoves(1)[0]!; - expect(move2.move).toBe(Moves.STRUGGLE); + expect(move2.move).toBe(MoveId.STRUGGLE); }); }); diff --git a/test/moves/telekinesis.test.ts b/test/moves/telekinesis.test.ts index e5a21e915fa..18df17f1587 100644 --- a/test/moves/telekinesis.test.ts +++ b/test/moves/telekinesis.test.ts @@ -1,8 +1,8 @@ import { BattlerTagType } from "#enums/battler-tag-type"; import { allMoves } from "#app/data/data-lists"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { MoveResult } from "#app/field/pokemon"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -26,95 +26,95 @@ describe("Moves - Telekinesis", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.TELEKINESIS, Moves.TACKLE, Moves.MUD_SHOT, Moves.SMACK_DOWN]) + .moveset([MoveId.TELEKINESIS, MoveId.TACKLE, MoveId.MUD_SHOT, MoveId.SMACK_DOWN]) .battleStyle("single") - .enemySpecies(Species.SNORLAX) + .enemySpecies(SpeciesId.SNORLAX) .enemyLevel(60) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset([Moves.SPLASH]); + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset([MoveId.SPLASH]); }); it("Telekinesis makes the affected vulnerable to most attacking moves regardless of accuracy", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const enemyOpponent = game.scene.getEnemyPokemon()!; - game.move.select(Moves.TELEKINESIS); + game.move.select(MoveId.TELEKINESIS); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyOpponent.getTag(BattlerTagType.TELEKINESIS)).toBeDefined(); expect(enemyOpponent.getTag(BattlerTagType.FLOATING)).toBeDefined(); await game.toNextTurn(); - vi.spyOn(allMoves[Moves.TACKLE], "accuracy", "get").mockReturnValue(0); - game.move.select(Moves.TACKLE); + vi.spyOn(allMoves[MoveId.TACKLE], "accuracy", "get").mockReturnValue(0); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyOpponent.isFullHp()).toBe(false); }); it("Telekinesis makes the affected airborne and immune to most Ground-moves", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const enemyOpponent = game.scene.getEnemyPokemon()!; - game.move.select(Moves.TELEKINESIS); + game.move.select(MoveId.TELEKINESIS); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyOpponent.getTag(BattlerTagType.TELEKINESIS)).toBeDefined(); expect(enemyOpponent.getTag(BattlerTagType.FLOATING)).toBeDefined(); await game.toNextTurn(); - vi.spyOn(allMoves[Moves.MUD_SHOT], "accuracy", "get").mockReturnValue(100); - game.move.select(Moves.MUD_SHOT); + vi.spyOn(allMoves[MoveId.MUD_SHOT], "accuracy", "get").mockReturnValue(100); + game.move.select(MoveId.MUD_SHOT); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyOpponent.isFullHp()).toBe(true); }); it("Telekinesis can still affect Pokemon that have been transformed into invalid Pokemon", async () => { - game.override.enemyMoveset(Moves.TRANSFORM); - await game.classicMode.startBattle([Species.DIGLETT]); + game.override.enemyMoveset(MoveId.TRANSFORM); + await game.classicMode.startBattle([SpeciesId.DIGLETT]); const enemyOpponent = game.scene.getEnemyPokemon()!; - game.move.select(Moves.TELEKINESIS); + game.move.select(MoveId.TELEKINESIS); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyOpponent.getTag(BattlerTagType.TELEKINESIS)).toBeDefined(); expect(enemyOpponent.getTag(BattlerTagType.FLOATING)).toBeDefined(); - expect(enemyOpponent.summonData.speciesForm?.speciesId).toBe(Species.DIGLETT); + expect(enemyOpponent.summonData.speciesForm?.speciesId).toBe(SpeciesId.DIGLETT); }); it("Moves like Smack Down and 1000 Arrows remove all effects of Telekinesis from the target Pokemon", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const enemyOpponent = game.scene.getEnemyPokemon()!; - game.move.select(Moves.TELEKINESIS); + game.move.select(MoveId.TELEKINESIS); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyOpponent.getTag(BattlerTagType.TELEKINESIS)).toBeDefined(); expect(enemyOpponent.getTag(BattlerTagType.FLOATING)).toBeDefined(); await game.toNextTurn(); - game.move.select(Moves.SMACK_DOWN); + game.move.select(MoveId.SMACK_DOWN); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyOpponent.getTag(BattlerTagType.TELEKINESIS)).toBeUndefined(); expect(enemyOpponent.getTag(BattlerTagType.FLOATING)).toBeUndefined(); }); it("Ingrain will remove the floating effect of Telekinesis, but not the 100% hit", async () => { - game.override.enemyMoveset([Moves.SPLASH, Moves.INGRAIN]); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.INGRAIN]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyOpponent = game.scene.getEnemyPokemon()!; - game.move.select(Moves.TELEKINESIS); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.TELEKINESIS); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyOpponent.getTag(BattlerTagType.TELEKINESIS)).toBeDefined(); expect(enemyOpponent.getTag(BattlerTagType.FLOATING)).toBeDefined(); await game.toNextTurn(); - vi.spyOn(allMoves[Moves.MUD_SHOT], "accuracy", "get").mockReturnValue(0); - game.move.select(Moves.MUD_SHOT); - await game.move.selectEnemyMove(Moves.INGRAIN); + vi.spyOn(allMoves[MoveId.MUD_SHOT], "accuracy", "get").mockReturnValue(0); + game.move.select(MoveId.MUD_SHOT); + await game.move.selectEnemyMove(MoveId.INGRAIN); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyOpponent.getTag(BattlerTagType.TELEKINESIS)).toBeDefined(); expect(enemyOpponent.getTag(BattlerTagType.INGRAIN)).toBeDefined(); @@ -125,12 +125,12 @@ describe("Moves - Telekinesis", () => { it("should not be baton passed onto a mega gengar", async () => { game.override - .moveset([Moves.BATON_PASS]) - .enemyMoveset([Moves.TELEKINESIS]) - .starterForms({ [Species.GENGAR]: 1 }); + .moveset([MoveId.BATON_PASS]) + .enemyMoveset([MoveId.TELEKINESIS]) + .starterForms({ [SpeciesId.GENGAR]: 1 }); - await game.classicMode.startBattle([Species.MAGIKARP, Species.GENGAR]); - game.move.select(Moves.BATON_PASS); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.GENGAR]); + game.move.select(MoveId.BATON_PASS); game.doSelectPartyPokemon(1); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); diff --git a/test/moves/tera_blast.test.ts b/test/moves/tera_blast.test.ts index c18c7f25498..4e3f9c6869b 100644 --- a/test/moves/tera_blast.test.ts +++ b/test/moves/tera_blast.test.ts @@ -4,9 +4,9 @@ import { TeraMoveCategoryAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; import type Move from "#app/data/moves/move"; import { PokemonType } from "#enums/pokemon-type"; -import { Abilities } from "#app/enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -22,7 +22,7 @@ describe("Moves - Tera Blast", () => { phaserGame = new Phaser.Game({ type: Phaser.HEADLESS, }); - moveToCheck = allMoves[Moves.TERA_BLAST]; + moveToCheck = allMoves[MoveId.TERA_BLAST]; teraBlastAttr = moveToCheck.getAttrs(TeraMoveCategoryAttr)[0]; }); @@ -36,19 +36,19 @@ describe("Moves - Tera Blast", () => { game.override .battleStyle("single") .disableCrits() - .starterSpecies(Species.FEEBAS) - .moveset([Moves.TERA_BLAST]) - .ability(Abilities.BALL_FETCH) - .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.SPLASH) - .enemyAbility(Abilities.STURDY) + .starterSpecies(SpeciesId.FEEBAS) + .moveset([MoveId.TERA_BLAST]) + .ability(AbilityId.BALL_FETCH) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyMoveset(MoveId.SPLASH) + .enemyAbility(AbilityId.STURDY) .enemyLevel(50); vi.spyOn(moveToCheck, "calculateBattlePower"); }); it("changes type to match user's tera type", async () => { - game.override.enemySpecies(Species.FURRET); + game.override.enemySpecies(SpeciesId.FURRET); await game.classicMode.startBattle(); const enemyPokemon = game.scene.getEnemyPokemon()!; const spy = vi.spyOn(enemyPokemon, "getMoveEffectiveness"); @@ -57,7 +57,7 @@ describe("Moves - Tera Blast", () => { playerPokemon.teraType = PokemonType.FIGHTING; playerPokemon.isTerastallized = true; - game.move.select(Moves.TERA_BLAST); + game.move.select(MoveId.TERA_BLAST); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -71,7 +71,7 @@ describe("Moves - Tera Blast", () => { playerPokemon.teraType = PokemonType.STELLAR; playerPokemon.isTerastallized = true; - game.move.select(Moves.TERA_BLAST); + game.move.select(MoveId.TERA_BLAST); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -89,7 +89,7 @@ describe("Moves - Tera Blast", () => { const spy = vi.spyOn(enemyPokemon, "getMoveEffectiveness"); enemyPokemon.isTerastallized = true; - game.move.select(Moves.TERA_BLAST); + game.move.select(MoveId.TERA_BLAST); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -106,7 +106,7 @@ describe("Moves - Tera Blast", () => { vi.spyOn(teraBlastAttr, "apply"); - game.move.select(Moves.TERA_BLAST); + game.move.select(MoveId.TERA_BLAST); await game.toNextTurn(); expect(teraBlastAttr.apply).toHaveLastReturnedWith(true); }); @@ -120,13 +120,13 @@ describe("Moves - Tera Blast", () => { vi.spyOn(teraBlastAttr, "apply"); - game.move.select(Moves.TERA_BLAST); + game.move.select(MoveId.TERA_BLAST); await game.toNextTurn(); expect(teraBlastAttr.apply).toHaveLastReturnedWith(false); }); it("should stay as a special move if ATK turns lower than SPATK mid-turn", async () => { - game.override.enemyMoveset([Moves.CHARM]); + game.override.enemyMoveset([MoveId.CHARM]); await game.classicMode.startBattle(); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -135,7 +135,7 @@ describe("Moves - Tera Blast", () => { vi.spyOn(teraBlastAttr, "apply"); - game.move.select(Moves.TERA_BLAST); + game.move.select(MoveId.TERA_BLAST); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); expect(teraBlastAttr.apply).toHaveLastReturnedWith(false); @@ -144,7 +144,7 @@ describe("Moves - Tera Blast", () => { it("does not change its move category from stat changes due to held items", async () => { game.override .startingHeldItems([{ name: "SPECIES_STAT_BOOSTER", type: "THICK_CLUB" }]) - .starterSpecies(Species.CUBONE); + .starterSpecies(SpeciesId.CUBONE); await game.classicMode.startBattle(); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -154,7 +154,7 @@ describe("Moves - Tera Blast", () => { vi.spyOn(teraBlastAttr, "apply"); - game.move.select(Moves.TERA_BLAST); + game.move.select(MoveId.TERA_BLAST); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); @@ -162,7 +162,7 @@ describe("Moves - Tera Blast", () => { }); it("does not change its move category from stat changes due to abilities", async () => { - game.override.ability(Abilities.HUGE_POWER); + game.override.ability(AbilityId.HUGE_POWER); await game.classicMode.startBattle(); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -171,7 +171,7 @@ describe("Moves - Tera Blast", () => { vi.spyOn(teraBlastAttr, "apply"); - game.move.select(Moves.TERA_BLAST); + game.move.select(MoveId.TERA_BLAST); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); expect(teraBlastAttr.apply).toHaveLastReturnedWith(false); @@ -184,7 +184,7 @@ describe("Moves - Tera Blast", () => { playerPokemon.teraType = PokemonType.STELLAR; playerPokemon.isTerastallized = true; - game.move.select(Moves.TERA_BLAST); + game.move.select(MoveId.TERA_BLAST); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -193,29 +193,29 @@ describe("Moves - Tera Blast", () => { }); it.each([ - { ab: "galvanize", ty: "electric", ab_id: Abilities.GALVANIZE, ty_id: PokemonType.ELECTRIC }, - { ab: "refrigerate", ty: "ice", ab_id: Abilities.REFRIGERATE, ty_id: PokemonType.ICE }, - { ab: "pixilate", ty: "fairy", ab_id: Abilities.PIXILATE, ty_id: PokemonType.FAIRY }, - { ab: "aerilate", ty: "flying", ab_id: Abilities.AERILATE, ty_id: PokemonType.FLYING }, + { ab: "galvanize", ty: "electric", ab_id: AbilityId.GALVANIZE, ty_id: PokemonType.ELECTRIC }, + { ab: "refrigerate", ty: "ice", ab_id: AbilityId.REFRIGERATE, ty_id: PokemonType.ICE }, + { ab: "pixilate", ty: "fairy", ab_id: AbilityId.PIXILATE, ty_id: PokemonType.FAIRY }, + { ab: "aerilate", ty: "flying", ab_id: AbilityId.AERILATE, ty_id: PokemonType.FLYING }, ])("should be $ty type if the user has $ab", async ({ ab_id, ty_id }) => { - game.override.ability(ab_id).moveset([Moves.TERA_BLAST]).enemyAbility(Abilities.BALL_FETCH); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.ability(ab_id).moveset([MoveId.TERA_BLAST]).enemyAbility(AbilityId.BALL_FETCH); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; - expect(playerPokemon.getMoveType(allMoves[Moves.TERA_BLAST])).toBe(ty_id); + expect(playerPokemon.getMoveType(allMoves[MoveId.TERA_BLAST])).toBe(ty_id); }); it("should not be affected by normalize when the user is terastallized with tera normal", async () => { - game.override.moveset([Moves.TERA_BLAST]).ability(Abilities.NORMALIZE); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.moveset([MoveId.TERA_BLAST]).ability(AbilityId.NORMALIZE); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; // override the tera state for the pokemon playerPokemon.isTerastallized = true; playerPokemon.teraType = PokemonType.NORMAL; - const move = allMoves[Moves.TERA_BLAST]; + const move = allMoves[MoveId.TERA_BLAST]; const powerSpy = vi.spyOn(move, "calculateBattlePower"); - game.move.select(Moves.TERA_BLAST); + game.move.select(MoveId.TERA_BLAST); await game.phaseInterceptor.to("BerryPhase"); expect(powerSpy).toHaveLastReturnedWith(move.power); }); diff --git a/test/moves/tera_starstorm.test.ts b/test/moves/tera_starstorm.test.ts index 5ae0c575599..bd1fa14398d 100644 --- a/test/moves/tera_starstorm.test.ts +++ b/test/moves/tera_starstorm.test.ts @@ -1,8 +1,8 @@ import { BattlerIndex } from "#app/battle"; import { PokemonType } from "#enums/pokemon-type"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; @@ -24,37 +24,37 @@ describe("Moves - Tera Starstorm", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.TERA_STARSTORM, Moves.SPLASH]) + .moveset([MoveId.TERA_STARSTORM, MoveId.SPLASH]) .battleStyle("double") - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(30) - .enemySpecies(Species.MAGIKARP); + .enemySpecies(SpeciesId.MAGIKARP); }); it("changes type to Stellar when used by Terapagos in its Stellar Form", async () => { game.override.battleStyle("single"); - await game.classicMode.startBattle([Species.TERAPAGOS]); + await game.classicMode.startBattle([SpeciesId.TERAPAGOS]); const terapagos = game.scene.getPlayerPokemon()!; terapagos.isTerastallized = true; vi.spyOn(terapagos, "getMoveType"); - game.move.select(Moves.TERA_STARSTORM); + game.move.select(MoveId.TERA_STARSTORM); await game.phaseInterceptor.to("TurnEndPhase"); expect(terapagos.getMoveType).toHaveReturnedWith(PokemonType.STELLAR); }); it("targets both opponents in a double battle when used by Terapagos in its Stellar Form", async () => { - await game.classicMode.startBattle([Species.MAGIKARP, Species.TERAPAGOS]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.TERAPAGOS]); const terapagos = game.scene.getPlayerParty()[1]; terapagos.isTerastallized = true; - game.move.select(Moves.TERA_STARSTORM, 0, BattlerIndex.ENEMY); - game.move.select(Moves.TERA_STARSTORM, 1); + game.move.select(MoveId.TERA_STARSTORM, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.TERA_STARSTORM, 1); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); @@ -70,12 +70,12 @@ describe("Moves - Tera Starstorm", () => { }); it("targets both opponents in a double battle when used by Terapagos immediately after terastallizing", async () => { - await game.classicMode.startBattle([Species.TERAPAGOS]); + await game.classicMode.startBattle([SpeciesId.TERAPAGOS]); const terapagos = game.scene.getPlayerParty()[0]; terapagos.isTerastallized = false; - game.move.selectWithTera(Moves.TERA_STARSTORM, 0); + game.move.selectWithTera(MoveId.TERA_STARSTORM, 0); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); @@ -87,12 +87,12 @@ describe("Moves - Tera Starstorm", () => { }); it("targets only one opponent in a double battle when used by Terapagos without terastallizing", async () => { - await game.classicMode.startBattle([Species.TERAPAGOS]); + await game.classicMode.startBattle([SpeciesId.TERAPAGOS]); const terapagos = game.scene.getPlayerParty()[0]; terapagos.isTerastallized = false; - game.move.select(Moves.TERA_STARSTORM, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.TERA_STARSTORM, 0, BattlerIndex.ENEMY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); @@ -104,7 +104,7 @@ describe("Moves - Tera Starstorm", () => { }); it("applies the effects when Terapagos in Stellar Form is fused with another Pokemon", async () => { - await game.classicMode.startBattle([Species.TERAPAGOS, Species.CHARMANDER, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.TERAPAGOS, SpeciesId.CHARMANDER, SpeciesId.MAGIKARP]); const fusionedMon = game.scene.getPlayerParty()[0]; const magikarp = game.scene.getPlayerParty()[2]; @@ -122,8 +122,8 @@ describe("Moves - Tera Starstorm", () => { vi.spyOn(fusionedMon, "getMoveType"); - game.move.select(Moves.TERA_STARSTORM, 0); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.TERA_STARSTORM, 0); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("TurnEndPhase"); // Fusion and terastallized diff --git a/test/moves/thousand_arrows.test.ts b/test/moves/thousand_arrows.test.ts index 39bc8617767..428e7c4fbe4 100644 --- a/test/moves/thousand_arrows.test.ts +++ b/test/moves/thousand_arrows.test.ts @@ -1,9 +1,9 @@ -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { BerryPhase } from "#app/phases/berry-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -25,19 +25,19 @@ describe("Moves - Thousand Arrows", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleStyle("single"); - game.override.enemySpecies(Species.TOGETIC); + game.override.enemySpecies(SpeciesId.TOGETIC); game.override.startingLevel(100); game.override.enemyLevel(100); - game.override.moveset([Moves.THOUSAND_ARROWS]); - game.override.enemyMoveset([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); + game.override.moveset([MoveId.THOUSAND_ARROWS]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.SPLASH, MoveId.SPLASH, MoveId.SPLASH]); }); it("move should hit and ground Flying-type targets", async () => { - await game.classicMode.startBattle([Species.ILLUMISE]); + await game.classicMode.startBattle([SpeciesId.ILLUMISE]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.THOUSAND_ARROWS); + game.move.select(MoveId.THOUSAND_ARROWS); await game.phaseInterceptor.to(MoveEffectPhase, false); // Enemy should not be grounded before move effect is applied @@ -50,14 +50,14 @@ describe("Moves - Thousand Arrows", () => { }); it("move should hit and ground targets with Levitate", async () => { - game.override.enemySpecies(Species.SNORLAX); - game.override.enemyAbility(Abilities.LEVITATE); + game.override.enemySpecies(SpeciesId.SNORLAX); + game.override.enemyAbility(AbilityId.LEVITATE); - await game.classicMode.startBattle([Species.ILLUMISE]); + await game.classicMode.startBattle([SpeciesId.ILLUMISE]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.THOUSAND_ARROWS); + game.move.select(MoveId.THOUSAND_ARROWS); await game.phaseInterceptor.to(MoveEffectPhase, false); // Enemy should not be grounded before move effect is applied @@ -70,15 +70,15 @@ describe("Moves - Thousand Arrows", () => { }); it("move should hit and ground targets under the effects of Magnet Rise", async () => { - game.override.enemySpecies(Species.SNORLAX); + game.override.enemySpecies(SpeciesId.SNORLAX); - await game.classicMode.startBattle([Species.ILLUMISE]); + await game.classicMode.startBattle([SpeciesId.ILLUMISE]); const enemyPokemon = game.scene.getEnemyPokemon()!; - enemyPokemon.addTag(BattlerTagType.FLOATING, undefined, Moves.MAGNET_RISE); + enemyPokemon.addTag(BattlerTagType.FLOATING, undefined, MoveId.MAGNET_RISE); - game.move.select(Moves.THOUSAND_ARROWS); + game.move.select(MoveId.THOUSAND_ARROWS); await game.phaseInterceptor.to(BerryPhase, false); diff --git a/test/moves/throat_chop.test.ts b/test/moves/throat_chop.test.ts index 8e504633707..c1c9c4e94ad 100644 --- a/test/moves/throat_chop.test.ts +++ b/test/moves/throat_chop.test.ts @@ -1,8 +1,8 @@ import { BattlerIndex } from "#app/battle"; -import { Moves } from "#app/enums/moves"; -import { Species } from "#app/enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { Stat } from "#app/enums/stat"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; @@ -23,20 +23,20 @@ describe("Moves - Throat Chop", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Moves.GROWL) + .moveset(MoveId.GROWL) .battleStyle("single") - .ability(Abilities.BALL_FETCH) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.THROAT_CHOP) - .enemySpecies(Species.MAGIKARP); + .ability(AbilityId.BALL_FETCH) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.THROAT_CHOP) + .enemySpecies(SpeciesId.MAGIKARP); }); it("prevents the target from using sound-based moves for two turns", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); // First turn, move is interrupted @@ -46,7 +46,7 @@ describe("Moves - Throat Chop", () => { // Second turn, struggle if no valid moves await game.toNextTurn(); - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); diff --git a/test/moves/thunder_wave.test.ts b/test/moves/thunder_wave.test.ts index 326d7ecbdc0..7d2692fdfa3 100644 --- a/test/moves/thunder_wave.test.ts +++ b/test/moves/thunder_wave.test.ts @@ -1,7 +1,7 @@ import type { EnemyPokemon } from "#app/field/pokemon"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -25,20 +25,20 @@ describe("Moves - Thunder Wave", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .starterSpecies(Species.PIKACHU) - .moveset([Moves.THUNDER_WAVE]) - .enemyMoveset(Moves.SPLASH); + .starterSpecies(SpeciesId.PIKACHU) + .moveset([MoveId.THUNDER_WAVE]) + .enemyMoveset(MoveId.SPLASH); }); // References: https://bulbapedia.bulbagarden.net/wiki/Thunder_Wave_(move) it("paralyzes non-statused Pokemon that are not Ground types", async () => { - game.override.enemySpecies(Species.MAGIKARP); + game.override.enemySpecies(SpeciesId.MAGIKARP); await game.classicMode.startBattle(); const enemyPokemon: EnemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.THUNDER_WAVE); + game.move.select(MoveId.THUNDER_WAVE); await game.move.forceHit(); await game.phaseInterceptor.to("BerryPhase", false); @@ -46,12 +46,12 @@ describe("Moves - Thunder Wave", () => { }); it("does not paralyze if the Pokemon is a Ground-type", async () => { - game.override.enemySpecies(Species.DIGLETT); + game.override.enemySpecies(SpeciesId.DIGLETT); await game.classicMode.startBattle(); const enemyPokemon: EnemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.THUNDER_WAVE); + game.move.select(MoveId.THUNDER_WAVE); await game.move.forceHit(); await game.phaseInterceptor.to("BerryPhase", false); @@ -59,12 +59,12 @@ describe("Moves - Thunder Wave", () => { }); it("does not paralyze if the Pokemon already has a status effect", async () => { - game.override.enemySpecies(Species.MAGIKARP).enemyStatusEffect(StatusEffect.BURN); + game.override.enemySpecies(SpeciesId.MAGIKARP).enemyStatusEffect(StatusEffect.BURN); await game.classicMode.startBattle(); const enemyPokemon: EnemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.THUNDER_WAVE); + game.move.select(MoveId.THUNDER_WAVE); await game.move.forceHit(); await game.phaseInterceptor.to("BerryPhase", false); @@ -72,12 +72,12 @@ describe("Moves - Thunder Wave", () => { }); it("affects Ground types if the user has Normalize", async () => { - game.override.ability(Abilities.NORMALIZE).enemySpecies(Species.DIGLETT); + game.override.ability(AbilityId.NORMALIZE).enemySpecies(SpeciesId.DIGLETT); await game.classicMode.startBattle(); const enemyPokemon: EnemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.THUNDER_WAVE); + game.move.select(MoveId.THUNDER_WAVE); await game.move.forceHit(); await game.phaseInterceptor.to("BerryPhase", false); @@ -85,12 +85,12 @@ describe("Moves - Thunder Wave", () => { }); it("does not affect Ghost types if the user has Normalize", async () => { - game.override.ability(Abilities.NORMALIZE).enemySpecies(Species.HAUNTER); + game.override.ability(AbilityId.NORMALIZE).enemySpecies(SpeciesId.HAUNTER); await game.classicMode.startBattle(); const enemyPokemon: EnemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.THUNDER_WAVE); + game.move.select(MoveId.THUNDER_WAVE); await game.move.forceHit(); await game.phaseInterceptor.to("BerryPhase", false); diff --git a/test/moves/tidy_up.test.ts b/test/moves/tidy_up.test.ts index 103b2d0a1c5..8e79b6b130a 100644 --- a/test/moves/tidy_up.test.ts +++ b/test/moves/tidy_up.test.ts @@ -2,9 +2,9 @@ import { Stat } from "#enums/stat"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import { MoveEndPhase } from "#app/phases/move-end-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -27,68 +27,68 @@ describe("Moves - Tidy Up", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleStyle("single"); - game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyAbility(Abilities.BALL_FETCH); - game.override.enemyMoveset(Moves.SPLASH); - game.override.starterSpecies(Species.FEEBAS); - game.override.ability(Abilities.BALL_FETCH); - game.override.moveset([Moves.TIDY_UP]); + game.override.enemySpecies(SpeciesId.MAGIKARP); + game.override.enemyAbility(AbilityId.BALL_FETCH); + game.override.enemyMoveset(MoveId.SPLASH); + game.override.starterSpecies(SpeciesId.FEEBAS); + game.override.ability(AbilityId.BALL_FETCH); + game.override.moveset([MoveId.TIDY_UP]); game.override.startingLevel(50); }); it("spikes are cleared", async () => { - game.override.moveset([Moves.SPIKES, Moves.TIDY_UP]).enemyMoveset(Moves.SPIKES); + game.override.moveset([MoveId.SPIKES, MoveId.TIDY_UP]).enemyMoveset(MoveId.SPIKES); await game.classicMode.startBattle(); - game.move.select(Moves.SPIKES); + game.move.select(MoveId.SPIKES); await game.phaseInterceptor.to(TurnEndPhase); - game.move.select(Moves.TIDY_UP); + game.move.select(MoveId.TIDY_UP); await game.phaseInterceptor.to(MoveEndPhase); expect(game.scene.arena.getTag(ArenaTagType.SPIKES)).toBeUndefined(); }, 20000); it("stealth rocks are cleared", async () => { - game.override.moveset([Moves.STEALTH_ROCK, Moves.TIDY_UP]).enemyMoveset(Moves.STEALTH_ROCK); + game.override.moveset([MoveId.STEALTH_ROCK, MoveId.TIDY_UP]).enemyMoveset(MoveId.STEALTH_ROCK); await game.classicMode.startBattle(); - game.move.select(Moves.STEALTH_ROCK); + game.move.select(MoveId.STEALTH_ROCK); await game.phaseInterceptor.to(TurnEndPhase); - game.move.select(Moves.TIDY_UP); + game.move.select(MoveId.TIDY_UP); await game.phaseInterceptor.to(MoveEndPhase); expect(game.scene.arena.getTag(ArenaTagType.STEALTH_ROCK)).toBeUndefined(); }, 20000); it("toxic spikes are cleared", async () => { - game.override.moveset([Moves.TOXIC_SPIKES, Moves.TIDY_UP]).enemyMoveset(Moves.TOXIC_SPIKES); + game.override.moveset([MoveId.TOXIC_SPIKES, MoveId.TIDY_UP]).enemyMoveset(MoveId.TOXIC_SPIKES); await game.classicMode.startBattle(); - game.move.select(Moves.TOXIC_SPIKES); + game.move.select(MoveId.TOXIC_SPIKES); await game.phaseInterceptor.to(TurnEndPhase); - game.move.select(Moves.TIDY_UP); + game.move.select(MoveId.TIDY_UP); await game.phaseInterceptor.to(MoveEndPhase); expect(game.scene.arena.getTag(ArenaTagType.TOXIC_SPIKES)).toBeUndefined(); }, 20000); it("sticky webs are cleared", async () => { - game.override.moveset([Moves.STICKY_WEB, Moves.TIDY_UP]).enemyMoveset(Moves.STICKY_WEB); + game.override.moveset([MoveId.STICKY_WEB, MoveId.TIDY_UP]).enemyMoveset(MoveId.STICKY_WEB); await game.classicMode.startBattle(); - game.move.select(Moves.STICKY_WEB); + game.move.select(MoveId.STICKY_WEB); await game.phaseInterceptor.to(TurnEndPhase); - game.move.select(Moves.TIDY_UP); + game.move.select(MoveId.TIDY_UP); await game.phaseInterceptor.to(MoveEndPhase); expect(game.scene.arena.getTag(ArenaTagType.STICKY_WEB)).toBeUndefined(); }, 20000); it("substitutes are cleared", async () => { - game.override.moveset([Moves.SUBSTITUTE, Moves.TIDY_UP]).enemyMoveset(Moves.SUBSTITUTE); + game.override.moveset([MoveId.SUBSTITUTE, MoveId.TIDY_UP]).enemyMoveset(MoveId.SUBSTITUTE); await game.classicMode.startBattle(); - game.move.select(Moves.SUBSTITUTE); + game.move.select(MoveId.SUBSTITUTE); await game.phaseInterceptor.to(TurnEndPhase); - game.move.select(Moves.TIDY_UP); + game.move.select(MoveId.TIDY_UP); await game.phaseInterceptor.to(MoveEndPhase); const pokemon = [game.scene.getPlayerPokemon()!, game.scene.getEnemyPokemon()!]; @@ -106,7 +106,7 @@ describe("Moves - Tidy Up", () => { expect(playerPokemon.getStatStage(Stat.ATK)).toBe(0); expect(playerPokemon.getStatStage(Stat.SPD)).toBe(0); - game.move.select(Moves.TIDY_UP); + game.move.select(MoveId.TIDY_UP); await game.phaseInterceptor.to(TurnEndPhase); expect(playerPokemon.getStatStage(Stat.ATK)).toBe(1); diff --git a/test/moves/torment.test.ts b/test/moves/torment.test.ts index d11de46bf10..b35b16249ef 100644 --- a/test/moves/torment.test.ts +++ b/test/moves/torment.test.ts @@ -1,6 +1,6 @@ -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; -import { Abilities } from "#enums/abilities"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; +import { AbilityId } from "#enums/ability-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -25,40 +25,40 @@ describe("Moves - Torment", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset([Moves.TORMENT, Moves.SPLASH]) - .enemySpecies(Species.SHUCKLE) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset([MoveId.TORMENT, MoveId.SPLASH]) + .enemySpecies(SpeciesId.SHUCKLE) .enemyLevel(30) - .moveset([Moves.TACKLE]) - .ability(Abilities.BALL_FETCH); + .moveset([MoveId.TACKLE]) + .ability(AbilityId.BALL_FETCH); }); it("Pokemon should not be able to use the same move consecutively", async () => { - await game.classicMode.startBattle([Species.CHANSEY]); + await game.classicMode.startBattle([SpeciesId.CHANSEY]); const playerPokemon = game.scene.getPlayerPokemon()!; // First turn, Player Pokemon uses Tackle successfully - game.move.select(Moves.TACKLE); - await game.move.selectEnemyMove(Moves.TORMENT); + game.move.select(MoveId.TACKLE); + await game.move.selectEnemyMove(MoveId.TORMENT); await game.toNextTurn(); const move1 = playerPokemon.getLastXMoves(1)[0]!; - expect(move1.move).toBe(Moves.TACKLE); + expect(move1.move).toBe(MoveId.TACKLE); expect(move1.result).toBe(MoveResult.SUCCESS); expect(playerPokemon?.getTag(BattlerTagType.TORMENT)).toBeDefined(); // Second turn, Torment forces Struggle to occur - game.move.select(Moves.TACKLE); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.TACKLE); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); const move2 = playerPokemon.getLastXMoves(1)[0]!; - expect(move2.move).toBe(Moves.STRUGGLE); + expect(move2.move).toBe(MoveId.STRUGGLE); // Third turn, Tackle can be used. - game.move.select(Moves.TACKLE); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.TACKLE); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); const move3 = playerPokemon.getLastXMoves(1)[0]!; - expect(move3.move).toBe(Moves.TACKLE); + expect(move3.move).toBe(MoveId.TACKLE); }); }); diff --git a/test/moves/toxic.test.ts b/test/moves/toxic.test.ts index c773abb5bd3..5cdfe78d502 100644 --- a/test/moves/toxic.test.ts +++ b/test/moves/toxic.test.ts @@ -1,5 +1,5 @@ -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -23,35 +23,39 @@ describe("Moves - Toxic", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single").moveset(Moves.TOXIC).enemySpecies(Species.MAGIKARP).enemyMoveset(Moves.SPLASH); + game.override + .battleStyle("single") + .moveset(MoveId.TOXIC) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyMoveset(MoveId.SPLASH); }); it("should be guaranteed to hit if user is Poison-type", async () => { - vi.spyOn(allMoves[Moves.TOXIC], "accuracy", "get").mockReturnValue(0); - await game.classicMode.startBattle([Species.TOXAPEX]); + vi.spyOn(allMoves[MoveId.TOXIC], "accuracy", "get").mockReturnValue(0); + await game.classicMode.startBattle([SpeciesId.TOXAPEX]); - game.move.select(Moves.TOXIC); + game.move.select(MoveId.TOXIC); await game.phaseInterceptor.to("BerryPhase", false); expect(game.scene.getEnemyPokemon()!.status?.effect).toBe(StatusEffect.TOXIC); }); it("may miss if user is not Poison-type", async () => { - vi.spyOn(allMoves[Moves.TOXIC], "accuracy", "get").mockReturnValue(0); - await game.classicMode.startBattle([Species.UMBREON]); + vi.spyOn(allMoves[MoveId.TOXIC], "accuracy", "get").mockReturnValue(0); + await game.classicMode.startBattle([SpeciesId.UMBREON]); - game.move.select(Moves.TOXIC); + game.move.select(MoveId.TOXIC); await game.phaseInterceptor.to("BerryPhase", false); expect(game.scene.getEnemyPokemon()!.status).toBeUndefined(); }); it("should hit semi-invulnerable targets if user is Poison-type", async () => { - vi.spyOn(allMoves[Moves.TOXIC], "accuracy", "get").mockReturnValue(0); - game.override.enemyMoveset(Moves.FLY); - await game.classicMode.startBattle([Species.TOXAPEX]); + vi.spyOn(allMoves[MoveId.TOXIC], "accuracy", "get").mockReturnValue(0); + game.override.enemyMoveset(MoveId.FLY); + await game.classicMode.startBattle([SpeciesId.TOXAPEX]); - game.move.select(Moves.TOXIC); + game.move.select(MoveId.TOXIC); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase", false); @@ -59,11 +63,11 @@ describe("Moves - Toxic", () => { }); it("should miss semi-invulnerable targets if user is not Poison-type", async () => { - vi.spyOn(allMoves[Moves.TOXIC], "accuracy", "get").mockReturnValue(-1); - game.override.enemyMoveset(Moves.FLY); - await game.classicMode.startBattle([Species.UMBREON]); + vi.spyOn(allMoves[MoveId.TOXIC], "accuracy", "get").mockReturnValue(-1); + game.override.enemyMoveset(MoveId.FLY); + await game.classicMode.startBattle([SpeciesId.UMBREON]); - game.move.select(Moves.TOXIC); + game.move.select(MoveId.TOXIC); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase", false); @@ -71,11 +75,11 @@ describe("Moves - Toxic", () => { }); it("moves other than Toxic should not hit semi-invulnerable targets even if user is Poison-type", async () => { - game.override.moveset(Moves.SWIFT); - game.override.enemyMoveset(Moves.FLY); - await game.classicMode.startBattle([Species.TOXAPEX]); + game.override.moveset(MoveId.SWIFT); + game.override.enemyMoveset(MoveId.FLY); + await game.classicMode.startBattle([SpeciesId.TOXAPEX]); - game.move.select(Moves.SWIFT); + game.move.select(MoveId.SWIFT); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase", false); diff --git a/test/moves/toxic_spikes.test.ts b/test/moves/toxic_spikes.test.ts index b1fdc7f39c2..11ed7514633 100644 --- a/test/moves/toxic_spikes.test.ts +++ b/test/moves/toxic_spikes.test.ts @@ -2,10 +2,10 @@ import type { ArenaTrapTag } from "#app/data/arena-tag"; import { ArenaTagSide } from "#app/data/arena-tag"; import type { SessionSaveData } from "#app/system/game-data"; import { decrypt, encrypt, GameData } from "#app/system/game-data"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -30,21 +30,21 @@ describe("Moves - Toxic Spikes", () => { game.override .battleStyle("single") .startingWave(5) - .enemySpecies(Species.RATTATA) - .enemyAbility(Abilities.BALL_FETCH) - .ability(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) - .moveset([Moves.TOXIC_SPIKES, Moves.SPLASH, Moves.ROAR, Moves.COURT_CHANGE]); + .enemySpecies(SpeciesId.RATTATA) + .enemyAbility(AbilityId.BALL_FETCH) + .ability(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) + .moveset([MoveId.TOXIC_SPIKES, MoveId.SPLASH, MoveId.ROAR, MoveId.COURT_CHANGE]); }); it("should not affect the opponent if they do not switch", async () => { - await game.classicMode.runToSummon([Species.MIGHTYENA, Species.POOCHYENA]); + await game.classicMode.runToSummon([SpeciesId.MIGHTYENA, SpeciesId.POOCHYENA]); const enemy = game.scene.getEnemyField()[0]; - game.move.select(Moves.TOXIC_SPIKES); + game.move.select(MoveId.TOXIC_SPIKES); await game.phaseInterceptor.to("TurnEndPhase"); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); game.doSwitchPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -54,11 +54,11 @@ describe("Moves - Toxic Spikes", () => { }); it("should poison the opponent if they switch into 1 layer", async () => { - await game.classicMode.runToSummon([Species.MIGHTYENA]); + await game.classicMode.runToSummon([SpeciesId.MIGHTYENA]); - game.move.select(Moves.TOXIC_SPIKES); + game.move.select(MoveId.TOXIC_SPIKES); await game.phaseInterceptor.to("TurnEndPhase"); - game.move.select(Moves.ROAR); + game.move.select(MoveId.ROAR); await game.phaseInterceptor.to("TurnEndPhase"); const enemy = game.scene.getEnemyField()[0]; @@ -68,13 +68,13 @@ describe("Moves - Toxic Spikes", () => { }); it("should badly poison the opponent if they switch into 2 layers", async () => { - await game.classicMode.runToSummon([Species.MIGHTYENA]); + await game.classicMode.runToSummon([SpeciesId.MIGHTYENA]); - game.move.select(Moves.TOXIC_SPIKES); + game.move.select(MoveId.TOXIC_SPIKES); await game.phaseInterceptor.to("TurnEndPhase"); - game.move.select(Moves.TOXIC_SPIKES); + game.move.select(MoveId.TOXIC_SPIKES); await game.phaseInterceptor.to("TurnEndPhase"); - game.move.select(Moves.ROAR); + game.move.select(MoveId.ROAR); await game.phaseInterceptor.to("TurnEndPhase"); const enemy = game.scene.getEnemyField()[0]; @@ -83,21 +83,21 @@ describe("Moves - Toxic Spikes", () => { }); it("should be removed if a grounded poison pokemon switches in", async () => { - await game.classicMode.runToSummon([Species.MUK, Species.PIDGEY]); + await game.classicMode.runToSummon([SpeciesId.MUK, SpeciesId.PIDGEY]); const muk = game.scene.getPlayerPokemon()!; - game.move.select(Moves.TOXIC_SPIKES); + game.move.select(MoveId.TOXIC_SPIKES); await game.toNextTurn(); // also make sure the toxic spikes are removed even if the pokemon // that set them up is the one switching in (https://github.com/pagefaultgames/pokerogue/issues/935) - game.move.select(Moves.COURT_CHANGE); + game.move.select(MoveId.COURT_CHANGE); await game.toNextTurn(); game.doSwitchPokemon(1); await game.toNextTurn(); game.doSwitchPokemon(1); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(muk.isFullHp()).toBe(true); @@ -106,9 +106,9 @@ describe("Moves - Toxic Spikes", () => { }); it("shouldn't create multiple layers per use in doubles", async () => { - await game.classicMode.runToSummon([Species.MIGHTYENA, Species.POOCHYENA]); + await game.classicMode.runToSummon([SpeciesId.MIGHTYENA, SpeciesId.POOCHYENA]); - game.move.select(Moves.TOXIC_SPIKES); + game.move.select(MoveId.TOXIC_SPIKES); await game.phaseInterceptor.to("TurnEndPhase"); const arenaTags = game.scene.arena.getTagOnSide(ArenaTagType.TOXIC_SPIKES, ArenaTagSide.ENEMY) as ArenaTrapTag; @@ -120,11 +120,11 @@ describe("Moves - Toxic Spikes", () => { game.override.startingWave(1); const gameData = new GameData(); - await game.classicMode.runToSummon([Species.MIGHTYENA]); + await game.classicMode.runToSummon([SpeciesId.MIGHTYENA]); - game.move.select(Moves.TOXIC_SPIKES); + game.move.select(MoveId.TOXIC_SPIKES); await game.phaseInterceptor.to("TurnEndPhase"); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to("BattleEndPhase"); await game.toNextWave(); diff --git a/test/moves/transform.test.ts b/test/moves/transform.test.ts index 8bfe7df688b..e8ed133b827 100644 --- a/test/moves/transform.test.ts +++ b/test/moves/transform.test.ts @@ -1,11 +1,11 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { Stat, EFFECTIVE_STATS } from "#enums/stat"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BattlerIndex } from "#app/battle"; // TODO: Add more tests once Transform is fully implemented @@ -27,19 +27,19 @@ describe("Moves - Transform", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemySpecies(Species.MEW) + .enemySpecies(SpeciesId.MEW) .enemyLevel(200) - .enemyAbility(Abilities.BEAST_BOOST) - .enemyPassiveAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) - .ability(Abilities.INTIMIDATE) - .moveset([Moves.TRANSFORM]); + .enemyAbility(AbilityId.BEAST_BOOST) + .enemyPassiveAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) + .ability(AbilityId.INTIMIDATE) + .moveset([MoveId.TRANSFORM]); }); it("should copy species, ability, gender, all stats except HP, all stat stages, moveset, and types of target", async () => { - await game.classicMode.startBattle([Species.DITTO]); + await game.classicMode.startBattle([SpeciesId.DITTO]); - game.move.select(Moves.TRANSFORM); + game.move.select(MoveId.TRANSFORM); await game.phaseInterceptor.to(TurnEndPhase); const player = game.scene.getPlayerPokemon()!; @@ -64,9 +64,9 @@ describe("Moves - Transform", () => { }); it("should copy in-battle overridden stats", async () => { - game.override.enemyMoveset([Moves.POWER_SPLIT]); + game.override.enemyMoveset([MoveId.POWER_SPLIT]); - await game.classicMode.startBattle([Species.DITTO]); + await game.classicMode.startBattle([SpeciesId.DITTO]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -74,7 +74,7 @@ describe("Moves - Transform", () => { const avgAtk = Math.floor((player.getStat(Stat.ATK, false) + enemy.getStat(Stat.ATK, false)) / 2); const avgSpAtk = Math.floor((player.getStat(Stat.SPATK, false) + enemy.getStat(Stat.SPATK, false)) / 2); - game.move.select(Moves.TRANSFORM); + game.move.select(MoveId.TRANSFORM); await game.phaseInterceptor.to(TurnEndPhase); expect(player.getStat(Stat.ATK, false)).toBe(avgAtk); @@ -85,18 +85,18 @@ describe("Moves - Transform", () => { }); it("should set each move's pp to a maximum of 5", async () => { - game.override.enemyMoveset([Moves.SWORDS_DANCE, Moves.GROWL, Moves.SKETCH, Moves.RECOVER]); + game.override.enemyMoveset([MoveId.SWORDS_DANCE, MoveId.GROWL, MoveId.SKETCH, MoveId.RECOVER]); - await game.classicMode.startBattle([Species.DITTO]); + await game.classicMode.startBattle([SpeciesId.DITTO]); const player = game.scene.getPlayerPokemon()!; - game.move.select(Moves.TRANSFORM); + game.move.select(MoveId.TRANSFORM); await game.phaseInterceptor.to(TurnEndPhase); player.getMoveset().forEach(move => { // Should set correct maximum PP without touching `ppUp` if (move) { - if (move.moveId === Moves.SKETCH) { + if (move.moveId === MoveId.SKETCH) { expect(move.getMovePp()).toBe(1); } else { expect(move.getMovePp()).toBe(5); @@ -107,10 +107,10 @@ describe("Moves - Transform", () => { }); it("should activate its ability if it copies one that activates on summon", async () => { - game.override.enemyAbility(Abilities.INTIMIDATE).ability(Abilities.BALL_FETCH); + game.override.enemyAbility(AbilityId.INTIMIDATE).ability(AbilityId.BALL_FETCH); - await game.classicMode.startBattle([Species.DITTO]); - game.move.select(Moves.TRANSFORM); + await game.classicMode.startBattle([SpeciesId.DITTO]); + game.move.select(MoveId.TRANSFORM); await game.phaseInterceptor.to("BerryPhase"); @@ -120,15 +120,15 @@ describe("Moves - Transform", () => { it("should persist transformed attributes across reloads", async () => { game.override.enemyMoveset([]).moveset([]); - await game.classicMode.startBattle([Species.DITTO]); + await game.classicMode.startBattle([SpeciesId.DITTO]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - game.move.changeMoveset(player, Moves.TRANSFORM); - game.move.changeMoveset(enemy, Moves.MEMENTO); + game.move.changeMoveset(player, MoveId.TRANSFORM); + game.move.changeMoveset(enemy, MoveId.MEMENTO); - game.move.select(Moves.TRANSFORM); + game.move.select(MoveId.TRANSFORM); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextWave(); @@ -150,14 +150,14 @@ describe("Moves - Transform", () => { } expect(playerMoveset.length).toEqual(1); - expect(playerMoveset[0]?.moveId).toEqual(Moves.MEMENTO); + expect(playerMoveset[0]?.moveId).toEqual(MoveId.MEMENTO); }); it("should stay transformed with the correct form after reload", async () => { game.override.enemyMoveset([]).moveset([]); - game.override.enemySpecies(Species.DARMANITAN); + game.override.enemySpecies(SpeciesId.DARMANITAN); - await game.classicMode.startBattle([Species.DITTO]); + await game.classicMode.startBattle([SpeciesId.DITTO]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -166,10 +166,10 @@ describe("Moves - Transform", () => { enemy.species.forms[1]; enemy.species.formIndex = 1; - game.move.changeMoveset(player, Moves.TRANSFORM); - game.move.changeMoveset(enemy, Moves.MEMENTO); + game.move.changeMoveset(player, MoveId.TRANSFORM); + game.move.changeMoveset(enemy, MoveId.MEMENTO); - game.move.select(Moves.TRANSFORM); + game.move.select(MoveId.TRANSFORM); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextWave(); diff --git a/test/moves/trick_or_treat.test.ts b/test/moves/trick_or_treat.test.ts index 3b32e09f72d..366c6ee60fe 100644 --- a/test/moves/trick_or_treat.test.ts +++ b/test/moves/trick_or_treat.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { PokemonType } from "#enums/pokemon-type"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,24 +23,24 @@ describe("Moves - Trick Or Treat", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.FORESTS_CURSE, Moves.TRICK_OR_TREAT]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.FORESTS_CURSE, MoveId.TRICK_OR_TREAT]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("will replace added type from Forest's Curse", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const enemyPokemon = game.scene.getEnemyPokemon(); - game.move.select(Moves.FORESTS_CURSE); + game.move.select(MoveId.FORESTS_CURSE); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyPokemon!.summonData.addedType).toBe(PokemonType.GRASS); - game.move.select(Moves.TRICK_OR_TREAT); + game.move.select(MoveId.TRICK_OR_TREAT); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyPokemon?.summonData.addedType).toBe(PokemonType.GHOST); }); diff --git a/test/moves/triple_arrows.test.ts b/test/moves/triple_arrows.test.ts index bd061f4059d..6a14a7642fa 100644 --- a/test/moves/triple_arrows.test.ts +++ b/test/moves/triple_arrows.test.ts @@ -1,9 +1,9 @@ import { FlinchAttr, StatStageChangeAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; import type Move from "#app/data/moves/move"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -19,7 +19,7 @@ describe("Moves - Triple Arrows", () => { phaserGame = new Phaser.Game({ type: Phaser.HEADLESS, }); - tripleArrows = allMoves[Moves.TRIPLE_ARROWS]; + tripleArrows = allMoves[MoveId.TRIPLE_ARROWS]; flinchAttr = tripleArrows.getAttrs(FlinchAttr)[0]; defDropAttr = tripleArrows.getAttrs(StatStageChangeAttr)[0]; }); @@ -31,21 +31,21 @@ describe("Moves - Triple Arrows", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .ability(Abilities.BALL_FETCH) - .moveset([Moves.TRIPLE_ARROWS]) + .ability(AbilityId.BALL_FETCH) + .moveset([MoveId.TRIPLE_ARROWS]) .battleStyle("single") - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.STURDY) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.STURDY) + .enemyMoveset(MoveId.SPLASH); vi.spyOn(flinchAttr, "getMoveChance"); vi.spyOn(defDropAttr, "getMoveChance"); }); it("has a 30% flinch chance and 50% defense drop chance", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.TRIPLE_ARROWS); + game.move.select(MoveId.TRIPLE_ARROWS); await game.phaseInterceptor.to("BerryPhase"); expect(flinchAttr.getMoveChance).toHaveReturnedWith(30); @@ -53,10 +53,10 @@ describe("Moves - Triple Arrows", () => { }); it("is affected normally by Serene Grace", async () => { - game.override.ability(Abilities.SERENE_GRACE); - await game.classicMode.startBattle([Species.FEEBAS]); + game.override.ability(AbilityId.SERENE_GRACE); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(Moves.TRIPLE_ARROWS); + game.move.select(MoveId.TRIPLE_ARROWS); await game.phaseInterceptor.to("BerryPhase"); expect(flinchAttr.getMoveChance).toHaveReturnedWith(60); diff --git a/test/moves/u_turn.test.ts b/test/moves/u_turn.test.ts index 9dca29414a1..4212802298e 100644 --- a/test/moves/u_turn.test.ts +++ b/test/moves/u_turn.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,23 +24,23 @@ describe("Moves - U-turn", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .enemySpecies(Species.GENGAR) + .enemySpecies(SpeciesId.GENGAR) .startingLevel(90) .startingWave(97) - .moveset([Moves.U_TURN]) - .enemyMoveset(Moves.SPLASH) + .moveset([MoveId.U_TURN]) + .enemyMoveset(MoveId.SPLASH) .disableCrits(); }); it("triggers regenerator a single time when a regenerator user switches out with u-turn", async () => { // arrange const playerHp = 1; - game.override.ability(Abilities.REGENERATOR); - await game.classicMode.startBattle([Species.RAICHU, Species.SHUCKLE]); + game.override.ability(AbilityId.REGENERATOR); + await game.classicMode.startBattle([SpeciesId.RAICHU, SpeciesId.SHUCKLE]); game.scene.getPlayerPokemon()!.hp = playerHp; // act - game.move.select(Moves.U_TURN); + game.move.select(MoveId.U_TURN); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -49,16 +49,16 @@ describe("Moves - U-turn", () => { Math.floor(game.scene.getPlayerParty()[1].getMaxHp() * 0.33 + playerHp), ); expect(game.phaseInterceptor.log).toContain("SwitchSummonPhase"); - expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(Species.SHUCKLE); + expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(SpeciesId.SHUCKLE); }, 20000); it("triggers rough skin on the u-turn user before a new pokemon is switched in", async () => { // arrange - game.override.enemyAbility(Abilities.ROUGH_SKIN); - await game.classicMode.startBattle([Species.RAICHU, Species.SHUCKLE]); + game.override.enemyAbility(AbilityId.ROUGH_SKIN); + await game.classicMode.startBattle([SpeciesId.RAICHU, SpeciesId.SHUCKLE]); // act - game.move.select(Moves.U_TURN); + game.move.select(MoveId.U_TURN); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("SwitchPhase", false); @@ -66,41 +66,41 @@ describe("Moves - U-turn", () => { const playerPkm = game.scene.getPlayerPokemon()!; expect(playerPkm.hp).not.toEqual(playerPkm.getMaxHp()); expect(game.scene.getEnemyPokemon()!.waveData.abilityRevealed).toBe(true); // proxy for asserting ability activated - expect(playerPkm.species.speciesId).toEqual(Species.RAICHU); + expect(playerPkm.species.speciesId).toEqual(SpeciesId.RAICHU); expect(game.phaseInterceptor.log).not.toContain("SwitchSummonPhase"); }, 20000); it("triggers contact abilities on the u-turn user (eg poison point) before a new pokemon is switched in", async () => { // arrange - game.override.enemyAbility(Abilities.POISON_POINT); - await game.classicMode.startBattle([Species.RAICHU, Species.SHUCKLE]); + game.override.enemyAbility(AbilityId.POISON_POINT); + await game.classicMode.startBattle([SpeciesId.RAICHU, SpeciesId.SHUCKLE]); vi.spyOn(game.scene.getEnemyPokemon()!, "randBattleSeedInt").mockReturnValue(0); // act - game.move.select(Moves.U_TURN); + game.move.select(MoveId.U_TURN); await game.phaseInterceptor.to("SwitchPhase", false); // assert const playerPkm = game.scene.getPlayerPokemon()!; expect(playerPkm.status?.effect).toEqual(StatusEffect.POISON); - expect(playerPkm.species.speciesId).toEqual(Species.RAICHU); + expect(playerPkm.species.speciesId).toEqual(SpeciesId.RAICHU); expect(game.scene.getEnemyPokemon()!.waveData.abilityRevealed).toBe(true); // proxy for asserting ability activated expect(game.phaseInterceptor.log).not.toContain("SwitchSummonPhase"); }, 20000); it("still forces a switch if u-turn KO's the opponent", async () => { game.override.startingLevel(1000); // Ensure that U-Turn KO's the opponent - await game.classicMode.startBattle([Species.RAICHU, Species.SHUCKLE]); + await game.classicMode.startBattle([SpeciesId.RAICHU, SpeciesId.SHUCKLE]); const enemy = game.scene.getEnemyPokemon()!; // KO the opponent with U-Turn - game.move.select(Moves.U_TURN); + game.move.select(MoveId.U_TURN); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.isFainted()).toBe(true); // Check that U-Turn forced a switch expect(game.phaseInterceptor.log).toContain("SwitchSummonPhase"); - expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(Species.SHUCKLE); + expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(SpeciesId.SHUCKLE); }); }); diff --git a/test/moves/upper_hand.test.ts b/test/moves/upper_hand.test.ts index 66359a94ccb..741594c7e47 100644 --- a/test/moves/upper_hand.test.ts +++ b/test/moves/upper_hand.test.ts @@ -1,8 +1,8 @@ import { BattlerIndex } from "#app/battle"; import { MoveResult } from "#app/field/pokemon"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -24,24 +24,24 @@ describe("Moves - Upper Hand", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Moves.UPPER_HAND) - .ability(Abilities.BALL_FETCH) + .moveset(MoveId.UPPER_HAND) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.QUICK_ATTACK) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.QUICK_ATTACK) .startingLevel(100) .enemyLevel(100); }); it("should flinch the opponent before they use a priority attack", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const feebas = game.scene.getPlayerPokemon()!; const magikarp = game.scene.getEnemyPokemon()!; - game.move.select(Moves.UPPER_HAND); + game.move.select(MoveId.UPPER_HAND); await game.phaseInterceptor.to("BerryPhase"); expect(feebas.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); @@ -50,30 +50,30 @@ describe("Moves - Upper Hand", () => { }); it.each([ - { descriptor: "non-priority attack", move: Moves.TACKLE }, - { descriptor: "status move", move: Moves.BABY_DOLL_EYES }, + { descriptor: "non-priority attack", move: MoveId.TACKLE }, + { descriptor: "status move", move: MoveId.BABY_DOLL_EYES }, ])("should fail when the opponent selects a $descriptor", async ({ move }) => { game.override.enemyMoveset(move); - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const feebas = game.scene.getPlayerPokemon()!; - game.move.select(Moves.UPPER_HAND); + game.move.select(MoveId.UPPER_HAND); await game.phaseInterceptor.to("BerryPhase"); expect(feebas.getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); it("should flinch the opponent before they use an attack boosted by Gale Wings", async () => { - game.override.enemyAbility(Abilities.GALE_WINGS).enemyMoveset(Moves.GUST); + game.override.enemyAbility(AbilityId.GALE_WINGS).enemyMoveset(MoveId.GUST); - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const feebas = game.scene.getPlayerPokemon()!; const magikarp = game.scene.getEnemyPokemon()!; - game.move.select(Moves.UPPER_HAND); + game.move.select(MoveId.UPPER_HAND); await game.phaseInterceptor.to("BerryPhase"); expect(feebas.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); @@ -82,13 +82,13 @@ describe("Moves - Upper Hand", () => { }); it("should fail if the target has already moved", async () => { - game.override.enemyMoveset(Moves.FAKE_OUT).enemyAbility(Abilities.SHEER_FORCE); + game.override.enemyMoveset(MoveId.FAKE_OUT).enemyAbility(AbilityId.SHEER_FORCE); - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const feebas = game.scene.getPlayerPokemon()!; - game.move.select(Moves.UPPER_HAND); + game.move.select(MoveId.UPPER_HAND); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); diff --git a/test/moves/whirlwind.test.ts b/test/moves/whirlwind.test.ts index 3558f968c66..56c4017fbb5 100644 --- a/test/moves/whirlwind.test.ts +++ b/test/moves/whirlwind.test.ts @@ -2,9 +2,9 @@ import { BattlerTagType } from "#enums/battler-tag-type"; import { Challenges } from "#enums/challenges"; import { PokemonType } from "#enums/pokemon-type"; import { MoveResult } from "#app/field/pokemon"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -33,25 +33,25 @@ describe("Moves - Whirlwind", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .moveset([Moves.SPLASH]) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset([Moves.SPLASH, Moves.WHIRLWIND]) - .enemySpecies(Species.PIDGEY); + .moveset([MoveId.SPLASH]) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset([MoveId.SPLASH, MoveId.WHIRLWIND]) + .enemySpecies(SpeciesId.PIDGEY); }); it.each([ - { move: Moves.FLY, name: "Fly" }, - { move: Moves.BOUNCE, name: "Bounce" }, - { move: Moves.SKY_DROP, name: "Sky Drop" }, + { move: MoveId.FLY, name: "Fly" }, + { move: MoveId.BOUNCE, name: "Bounce" }, + { move: MoveId.SKY_DROP, name: "Sky Drop" }, ])("should not hit a flying target: $name (=$move)", async ({ move }) => { game.override.moveset([move]); // Must have a pokemon in the back so that the move misses instead of fails. - await game.classicMode.startBattle([Species.STARAPTOR, Species.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.STARAPTOR, SpeciesId.MAGIKARP]); const staraptor = game.scene.getPlayerPokemon()!; game.move.select(move); - await game.move.selectEnemyMove(Moves.WHIRLWIND); + await game.move.selectEnemyMove(MoveId.WHIRLWIND); await game.phaseInterceptor.to("BerryPhase", false); @@ -60,7 +60,7 @@ describe("Moves - Whirlwind", () => { }); it("should force switches randomly", async () => { - await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER, SpeciesId.SQUIRTLE]); const [bulbasaur, charmander, squirtle] = game.scene.getPlayerParty(); @@ -68,8 +68,8 @@ describe("Moves - Whirlwind", () => { vi.spyOn(game.scene, "randBattleSeedInt").mockImplementation((_range, min = 0) => { return min; }); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.WHIRLWIND); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.WHIRLWIND); await game.toNextTurn(); expect(bulbasaur.isOnField()).toBe(false); @@ -80,8 +80,8 @@ describe("Moves - Whirlwind", () => { vi.spyOn(game.scene, "randBattleSeedInt").mockImplementation((_range, min = 0) => { return min + 1; }); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.WHIRLWIND); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.WHIRLWIND); await game.toNextTurn(); expect(bulbasaur.isOnField()).toBe(false); @@ -92,7 +92,7 @@ describe("Moves - Whirlwind", () => { it("should not force a switch to a challenge-ineligible Pokemon", async () => { // Mono-Water challenge, Eevee is ineligible game.challengeMode.addChallenge(Challenges.SINGLE_TYPE, PokemonType.WATER + 1, 0); - await game.challengeMode.startBattle([Species.LAPRAS, Species.EEVEE, Species.TOXAPEX, Species.PRIMARINA]); + await game.challengeMode.startBattle([SpeciesId.LAPRAS, SpeciesId.EEVEE, SpeciesId.TOXAPEX, SpeciesId.PRIMARINA]); const [lapras, eevee, toxapex, primarina] = game.scene.getPlayerParty(); @@ -100,8 +100,8 @@ describe("Moves - Whirlwind", () => { vi.spyOn(game.scene, "randBattleSeedInt").mockImplementation((_range, min = 0) => { return min; }); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.WHIRLWIND); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.WHIRLWIND); await game.toNextTurn(); expect(lapras.isOnField()).toBe(false); @@ -111,7 +111,7 @@ describe("Moves - Whirlwind", () => { }); it("should not force a switch to a fainted Pokemon", async () => { - await game.classicMode.startBattle([Species.LAPRAS, Species.EEVEE, Species.TOXAPEX, Species.PRIMARINA]); + await game.classicMode.startBattle([SpeciesId.LAPRAS, SpeciesId.EEVEE, SpeciesId.TOXAPEX, SpeciesId.PRIMARINA]); const [lapras, eevee, toxapex, primarina] = game.scene.getPlayerParty(); @@ -119,16 +119,16 @@ describe("Moves - Whirlwind", () => { eevee.hp = 0; eevee.status = new Status(StatusEffect.FAINT); expect(eevee.isFainted()).toBe(true); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); // Turn 2: Mock an RNG call that would normally call for switching to Eevee, but it is fainted vi.spyOn(game.scene, "randBattleSeedInt").mockImplementation((_range, min = 0) => { return min; }); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.WHIRLWIND); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.WHIRLWIND); await game.toNextTurn(); expect(lapras.isOnField()).toBe(false); @@ -138,7 +138,7 @@ describe("Moves - Whirlwind", () => { }); it("should not force a switch if there are no available Pokemon to switch into", async () => { - await game.classicMode.startBattle([Species.LAPRAS, Species.EEVEE]); + await game.classicMode.startBattle([SpeciesId.LAPRAS, SpeciesId.EEVEE]); const [lapras, eevee] = game.scene.getPlayerParty(); @@ -146,16 +146,16 @@ describe("Moves - Whirlwind", () => { eevee.hp = 0; eevee.status = new Status(StatusEffect.FAINT); expect(eevee.isFainted()).toBe(true); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); // Turn 2: Mock an RNG call that would normally call for switching to Eevee, but it is fainted vi.spyOn(game.scene, "randBattleSeedInt").mockImplementation((_range, min = 0) => { return min; }); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.WHIRLWIND); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.WHIRLWIND); await game.toNextTurn(); expect(lapras.isOnField()).toBe(true); @@ -164,7 +164,7 @@ describe("Moves - Whirlwind", () => { it("should fail when player uses Whirlwind against an opponent with only one available Pokémon", async () => { // Set up the battle scenario with the player knowing Whirlwind - game.override.startingWave(5).enemySpecies(Species.PIDGEY).moveset([Moves.WHIRLWIND]); + game.override.startingWave(5).enemySpecies(SpeciesId.PIDGEY).moveset([MoveId.WHIRLWIND]); await game.classicMode.startBattle(); const enemyParty = game.scene.getEnemyParty(); @@ -183,8 +183,8 @@ describe("Moves - Whirlwind", () => { const queueSpy = vi.spyOn(globalScene, "queueMessage"); // Player uses Whirlwind; opponent uses Splash - game.move.select(Moves.WHIRLWIND); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.WHIRLWIND); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); // Verify that the failure message is displayed for Whirlwind @@ -201,9 +201,9 @@ describe("Moves - Whirlwind", () => { trainerType: TrainerType.BREEDER, alwaysDouble: true, }) - .enemyMoveset([Moves.SPLASH, Moves.LUNAR_DANCE]) - .moveset([Moves.WHIRLWIND, Moves.SPLASH]); - await game.classicMode.startBattle([Species.MAGIKARP, Species.TOTODILE]); + .enemyMoveset([MoveId.SPLASH, MoveId.LUNAR_DANCE]) + .moveset([MoveId.WHIRLWIND, MoveId.SPLASH]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.TOTODILE]); // expect the enemy to have at least 4 pokemon, necessary for this check to even work expect(game.scene.getEnemyParty().length, "enemy must have exactly 4 pokemon").toBe(4); @@ -212,21 +212,21 @@ describe("Moves - Whirlwind", () => { console.log(user.getMoveset(false)); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.MEMENTO); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.MEMENTO); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); // Get the enemy pokemon id so we can check if is the same after switch. const enemy_id = game.scene.getEnemyPokemon()!.id; // Hit the enemy that fainted with whirlwind. - game.move.select(Moves.WHIRLWIND, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.WHIRLWIND, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); @@ -237,14 +237,14 @@ describe("Moves - Whirlwind", () => { it("should force a wild pokemon to flee", async () => { game.override .battleType(BattleType.WILD) - .moveset([Moves.WHIRLWIND, Moves.SPLASH]) - .enemyMoveset(Moves.SPLASH) - .ability(Abilities.BALL_FETCH); - await game.classicMode.startBattle([Species.MAGIKARP]); + .moveset([MoveId.WHIRLWIND, MoveId.SPLASH]) + .enemyMoveset(MoveId.SPLASH) + .ability(AbilityId.BALL_FETCH); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const user = game.scene.getPlayerPokemon()!; - game.move.select(Moves.WHIRLWIND); + game.move.select(MoveId.WHIRLWIND); await game.phaseInterceptor.to("BerryPhase"); expect(user.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); diff --git a/test/moves/wide_guard.test.ts b/test/moves/wide_guard.test.ts index 08357476e5e..65c3a0a805f 100644 --- a/test/moves/wide_guard.test.ts +++ b/test/moves/wide_guard.test.ts @@ -1,9 +1,9 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; import GameManager from "#test/testUtils/gameManager"; -import { Species } from "#enums/species"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; +import { SpeciesId } from "#enums/species-id"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; import { Stat } from "#enums/stat"; import { BerryPhase } from "#app/phases/berry-phase"; import { CommandPhase } from "#app/phases/command-phase"; @@ -27,26 +27,26 @@ describe("Moves - Wide Guard", () => { game.override.battleStyle("double"); - game.override.moveset([Moves.WIDE_GUARD, Moves.SPLASH, Moves.SURF]); + game.override.moveset([MoveId.WIDE_GUARD, MoveId.SPLASH, MoveId.SURF]); - game.override.enemySpecies(Species.SNORLAX); - game.override.enemyMoveset([Moves.SWIFT]); - game.override.enemyAbility(Abilities.INSOMNIA); + game.override.enemySpecies(SpeciesId.SNORLAX); + game.override.enemyMoveset([MoveId.SWIFT]); + game.override.enemyAbility(AbilityId.INSOMNIA); game.override.startingLevel(100); game.override.enemyLevel(100); }); test("should protect the user and allies from multi-target attack moves", async () => { - await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerField(); - game.move.select(Moves.WIDE_GUARD); + game.move.select(MoveId.WIDE_GUARD); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(BerryPhase, false); @@ -54,17 +54,17 @@ describe("Moves - Wide Guard", () => { }); test("should protect the user and allies from multi-target status moves", async () => { - game.override.enemyMoveset([Moves.GROWL]); + game.override.enemyMoveset([MoveId.GROWL]); - await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerField(); - game.move.select(Moves.WIDE_GUARD); + game.move.select(MoveId.WIDE_GUARD); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(BerryPhase, false); @@ -72,17 +72,17 @@ describe("Moves - Wide Guard", () => { }); test("should not protect the user and allies from single-target moves", async () => { - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemyMoveset([MoveId.TACKLE]); - await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerField(); - game.move.select(Moves.WIDE_GUARD); + game.move.select(MoveId.WIDE_GUARD); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(BerryPhase, false); @@ -90,18 +90,18 @@ describe("Moves - Wide Guard", () => { }); test("should protect the user from its ally's multi-target move", async () => { - game.override.enemyMoveset([Moves.SPLASH]); + game.override.enemyMoveset([MoveId.SPLASH]); - await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); const leadPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.WIDE_GUARD); + game.move.select(MoveId.WIDE_GUARD); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SURF, 1); + game.move.select(MoveId.SURF, 1); await game.phaseInterceptor.to(BerryPhase, false); diff --git a/test/moves/will_o_wisp.test.ts b/test/moves/will_o_wisp.test.ts index b4e4975896b..ce747dbad0b 100644 --- a/test/moves/will_o_wisp.test.ts +++ b/test/moves/will_o_wisp.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,28 +24,28 @@ describe("Moves - Will-O-Wisp", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.WILL_O_WISP, Moves.SPLASH]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.WILL_O_WISP, MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("should burn the opponent", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.WILL_O_WISP); + game.move.select(MoveId.WILL_O_WISP); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceHit(); await game.toNextTurn(); expect(enemy.status?.effect).toBe(StatusEffect.BURN); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(enemy.status?.effect).toBe(StatusEffect.BURN); diff --git a/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts b/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts index a4c043ad13f..3c6305a77dc 100644 --- a/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts +++ b/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts @@ -1,8 +1,8 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; import { HUMAN_TRANSITABLE_BIOMES } from "#app/data/mystery-encounters/mystery-encounters"; -import { Biome } from "#app/enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; -import { Species } from "#app/enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; @@ -22,8 +22,8 @@ import { PartyHealPhase } from "#app/phases/party-heal-phase"; import i18next from "i18next"; const namespace = "mysteryEncounters/aTrainersTest"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; -const defaultBiome = Biome.CAVE; +const defaultParty = [SpeciesId.LAPRAS, SpeciesId.GENGAR, SpeciesId.ABRA]; +const defaultBiome = BiomeId.CAVE; const defaultWave = 45; describe("A Trainer's Test - Mystery Encounter", () => { @@ -43,8 +43,8 @@ describe("A Trainer's Test - Mystery Encounter", () => { game.override.startingBiome(defaultBiome); game.override.disableTrainerWaves(); - const biomeMap = new Map([ - [Biome.VOLCANO, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], + const biomeMap = new Map([ + [BiomeId.VOLCANO, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], ]); HUMAN_TRANSITABLE_BIOMES.forEach(biome => { biomeMap.set(biome, [MysteryEncounterType.A_TRAINERS_TEST]); diff --git a/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts b/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts index 36a284880c1..f13f6e0b072 100644 --- a/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts +++ b/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts @@ -1,6 +1,6 @@ -import { Biome } from "#app/enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; -import { Species } from "#app/enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; @@ -15,15 +15,15 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encount import { BerryModifier, PokemonHeldItemModifier } from "#app/modifier/modifier"; import { BerryType } from "#enums/berry-type"; import { AbsoluteAvariceEncounter } from "#app/data/mystery-encounters/encounters/absolute-avarice-encounter"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { CommandPhase } from "#app/phases/command-phase"; import { MovePhase } from "#app/phases/move-phase"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import i18next from "i18next"; const namespace = "mysteryEncounters/absoluteAvarice"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; -const defaultBiome = Biome.TALL_GRASS; +const defaultParty = [SpeciesId.LAPRAS, SpeciesId.GENGAR, SpeciesId.ABRA]; +const defaultBiome = BiomeId.TALL_GRASS; const defaultWave = 45; describe("Absolute Avarice - Mystery Encounter", () => { @@ -44,9 +44,9 @@ describe("Absolute Avarice - Mystery Encounter", () => { game.override.disableTrainerWaves(); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( - new Map([ - [Biome.TALL_GRASS, [MysteryEncounterType.ABSOLUTE_AVARICE]], - [Biome.VOLCANO, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], + new Map([ + [BiomeId.TALL_GRASS, [MysteryEncounterType.ABSOLUTE_AVARICE]], + [BiomeId.VOLCANO, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], ]), ); }); @@ -72,7 +72,7 @@ describe("Absolute Avarice - Mystery Encounter", () => { it("should not spawn outside of proper biomes", async () => { game.override.mysteryEncounterTier(MysteryEncounterTier.GREAT); - game.override.startingBiome(Biome.VOLCANO); + game.override.startingBiome(BiomeId.VOLCANO); await game.runToMysteryEncounter(); expect(game.scene.currentBattle.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.ABSOLUTE_AVARICE); @@ -137,14 +137,14 @@ describe("Absolute Avarice - Mystery Encounter", () => { const enemyField = scene.getEnemyField(); expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyField.length).toBe(1); - expect(enemyField[0].species.speciesId).toBe(Species.GREEDENT); + expect(enemyField[0].species.speciesId).toBe(SpeciesId.GREEDENT); const moveset = enemyField[0].moveset.map(m => m.moveId); expect(moveset?.length).toBe(4); - expect(moveset).toEqual([Moves.THRASH, Moves.CRUNCH, Moves.BODY_PRESS, Moves.SLACK_OFF]); + expect(moveset).toEqual([MoveId.THRASH, MoveId.CRUNCH, MoveId.BODY_PRESS, MoveId.SLACK_OFF]); const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof MovePhase).map(p => p[0]); expect(movePhases.length).toBe(1); - expect(movePhases.filter(p => (p as MovePhase).move.moveId === Moves.STUFF_CHEEKS).length).toBe(1); // Stuff Cheeks used before battle + expect(movePhases.filter(p => (p as MovePhase).move.moveId === MoveId.STUFF_CHEEKS).length).toBe(1); // Stuff Cheeks used before battle }); it("should give reviver seed to each pokemon after battle", async () => { @@ -260,10 +260,10 @@ describe("Absolute Avarice - Mystery Encounter", () => { expect(partyCountBefore + 1).toBe(partyCountAfter); const greedent = scene.getPlayerParty()[scene.getPlayerParty().length - 1]; - expect(greedent.species.speciesId).toBe(Species.GREEDENT); + expect(greedent.species.speciesId).toBe(SpeciesId.GREEDENT); const moveset = greedent.moveset.map(m => m.moveId); expect(moveset?.length).toBe(4); - expect(moveset).toEqual([Moves.THRASH, Moves.BODY_PRESS, Moves.STUFF_CHEEKS, Moves.SLACK_OFF]); + expect(moveset).toEqual([MoveId.THRASH, MoveId.BODY_PRESS, MoveId.STUFF_CHEEKS, MoveId.SLACK_OFF]); }); it("should leave encounter without battle", async () => { diff --git a/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts b/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts index 3c7bda8febd..f39ce753b10 100644 --- a/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts +++ b/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts @@ -1,8 +1,8 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; import { HUMAN_TRANSITABLE_BIOMES } from "#app/data/mystery-encounters/mystery-encounters"; -import { Biome } from "#app/enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; -import { Species } from "#app/enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; @@ -14,16 +14,16 @@ import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; import { getPokemonSpecies } from "#app/data/pokemon-species"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { ShinyRateBoosterModifier } from "#app/modifier/modifier"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import i18next from "i18next"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; const namespace = "mysteryEncounters/anOfferYouCantRefuse"; /** Gyarados for Indimidate */ -const defaultParty = [Species.GYARADOS, Species.GENGAR, Species.ABRA]; -const defaultBiome = Biome.CAVE; +const defaultParty = [SpeciesId.GYARADOS, SpeciesId.GENGAR, SpeciesId.ABRA]; +const defaultBiome = BiomeId.CAVE; const defaultWave = 45; describe("An Offer You Can't Refuse - Mystery Encounter", () => { @@ -43,10 +43,10 @@ describe("An Offer You Can't Refuse - Mystery Encounter", () => { .startingWave(defaultWave) .startingBiome(defaultBiome) .disableTrainerWaves() - .ability(Abilities.INTIMIDATE); // Extortion ability + .ability(AbilityId.INTIMIDATE); // Extortion ability - const biomeMap = new Map([ - [Biome.VOLCANO, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], + const biomeMap = new Map([ + [BiomeId.VOLCANO, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], ]); HUMAN_TRANSITABLE_BIOMES.forEach(biome => { biomeMap.set(biome, [MysteryEncounterType.AN_OFFER_YOU_CANT_REFUSE]); @@ -80,7 +80,7 @@ describe("An Offer You Can't Refuse - Mystery Encounter", () => { it("should not spawn outside of HUMAN_TRANSITABLE_BIOMES", async () => { game.override.mysteryEncounterTier(MysteryEncounterTier.GREAT); - game.override.startingBiome(Biome.VOLCANO); + game.override.startingBiome(BiomeId.VOLCANO); await game.runToMysteryEncounter(); expect(scene.currentBattle?.mysteryEncounter?.encounterType).not.toBe( @@ -196,29 +196,31 @@ describe("An Offer You Can't Refuse - Mystery Encounter", () => { it("should award EXP to a pokemon with an ability in EXTORTION_ABILITIES", async () => { await game.runToMysteryEncounter(MysteryEncounterType.AN_OFFER_YOU_CANT_REFUSE, defaultParty); const party = scene.getPlayerParty(); - const gyarados = party.find(pkm => pkm.species.speciesId === Species.GYARADOS)!; + const gyarados = party.find(pkm => pkm.species.speciesId === SpeciesId.GYARADOS)!; const expBefore = gyarados.exp; await runMysteryEncounterToEnd(game, 2); await game.phaseInterceptor.to(SelectModifierPhase, false); expect(gyarados.exp).toBe( - expBefore + Math.floor((getPokemonSpecies(Species.LIEPARD).baseExp * defaultWave) / 5 + 1), + expBefore + Math.floor((getPokemonSpecies(SpeciesId.LIEPARD).baseExp * defaultWave) / 5 + 1), ); }); it("should award EXP to a pokemon with a move in EXTORTION_MOVES", async () => { - game.override.ability(Abilities.SYNCHRONIZE); // Not an extortion ability, so we can test extortion move - await game.runToMysteryEncounter(MysteryEncounterType.AN_OFFER_YOU_CANT_REFUSE, [Species.ABRA]); + game.override.ability(AbilityId.SYNCHRONIZE); // Not an extortion ability, so we can test extortion move + await game.runToMysteryEncounter(MysteryEncounterType.AN_OFFER_YOU_CANT_REFUSE, [SpeciesId.ABRA]); const party = scene.getPlayerParty(); - const abra = party.find(pkm => pkm.species.speciesId === Species.ABRA)!; - abra.moveset = [new PokemonMove(Moves.BEAT_UP)]; + const abra = party.find(pkm => pkm.species.speciesId === SpeciesId.ABRA)!; + abra.moveset = [new PokemonMove(MoveId.BEAT_UP)]; const expBefore = abra.exp; await runMysteryEncounterToEnd(game, 2); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(abra.exp).toBe(expBefore + Math.floor((getPokemonSpecies(Species.LIEPARD).baseExp * defaultWave) / 5 + 1)); + expect(abra.exp).toBe( + expBefore + Math.floor((getPokemonSpecies(SpeciesId.LIEPARD).baseExp * defaultWave) / 5 + 1), + ); }); it("Should update the player's money properly", async () => { diff --git a/test/mystery-encounter/encounters/berries-abound-encounter.test.ts b/test/mystery-encounter/encounters/berries-abound-encounter.test.ts index 3f85b0b89d9..c3af2d9fe13 100644 --- a/test/mystery-encounter/encounters/berries-abound-encounter.test.ts +++ b/test/mystery-encounter/encounters/berries-abound-encounter.test.ts @@ -1,7 +1,7 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; -import { Biome } from "#app/enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; -import { Species } from "#app/enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { @@ -20,11 +20,11 @@ import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encount import * as EncounterDialogueUtils from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { CommandPhase } from "#app/phases/command-phase"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; const namespace = "mysteryEncounters/berriesAbound"; -const defaultParty = [Species.PYUKUMUKU, Species.MAGIKARP, Species.PIKACHU]; -const defaultBiome = Biome.CAVE; +const defaultParty = [SpeciesId.PYUKUMUKU, SpeciesId.MAGIKARP, SpeciesId.PIKACHU]; +const defaultBiome = BiomeId.CAVE; const defaultWave = 45; describe("Berries Abound - Mystery Encounter", () => { @@ -47,11 +47,11 @@ describe("Berries Abound - Mystery Encounter", () => { .disableTrainerWaves() .startingModifier([]) .startingHeldItems([]) - .enemyAbility(Abilities.BALL_FETCH) - .enemyPassiveAbility(Abilities.BALL_FETCH); + .enemyAbility(AbilityId.BALL_FETCH) + .enemyPassiveAbility(AbilityId.BALL_FETCH); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( - new Map([[Biome.CAVE, [MysteryEncounterType.BERRIES_ABOUND]]]), + new Map([[BiomeId.CAVE, [MysteryEncounterType.BERRIES_ABOUND]]]), ); }); diff --git a/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts b/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts index 455a5d28194..0cc990a405a 100644 --- a/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts +++ b/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts @@ -1,7 +1,7 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; -import { Biome } from "#app/enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; -import { Species } from "#app/enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { @@ -9,7 +9,7 @@ import { runSelectMysteryEncounterOption, skipBattleRunMysteryEncounterRewardsPhase, } from "#test/mystery-encounter/encounter-test-utils"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import type BattleScene from "#app/battle-scene"; import { PokemonMove } from "#app/field/pokemon"; import { UiMode } from "#enums/ui-mode"; @@ -26,127 +26,121 @@ import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; const namespace = "mysteryEncounters/bugTypeSuperfan"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.WEEDLE]; -const defaultBiome = Biome.CAVE; +const defaultParty = [SpeciesId.LAPRAS, SpeciesId.GENGAR, SpeciesId.WEEDLE]; +const defaultBiome = BiomeId.CAVE; const defaultWave = 24; const POOL_1_POKEMON = [ - Species.PARASECT, - Species.VENOMOTH, - Species.LEDIAN, - Species.ARIADOS, - Species.YANMA, - Species.BEAUTIFLY, - Species.DUSTOX, - Species.MASQUERAIN, - Species.NINJASK, - Species.VOLBEAT, - Species.ILLUMISE, - Species.ANORITH, - Species.KRICKETUNE, - Species.WORMADAM, - Species.MOTHIM, - Species.SKORUPI, - Species.JOLTIK, - Species.LARVESTA, - Species.VIVILLON, - Species.CHARJABUG, - Species.RIBOMBEE, - Species.SPIDOPS, - Species.LOKIX, + SpeciesId.PARASECT, + SpeciesId.VENOMOTH, + SpeciesId.LEDIAN, + SpeciesId.ARIADOS, + SpeciesId.YANMA, + SpeciesId.BEAUTIFLY, + SpeciesId.DUSTOX, + SpeciesId.MASQUERAIN, + SpeciesId.NINJASK, + SpeciesId.VOLBEAT, + SpeciesId.ILLUMISE, + SpeciesId.ANORITH, + SpeciesId.KRICKETUNE, + SpeciesId.WORMADAM, + SpeciesId.MOTHIM, + SpeciesId.SKORUPI, + SpeciesId.JOLTIK, + SpeciesId.LARVESTA, + SpeciesId.VIVILLON, + SpeciesId.CHARJABUG, + SpeciesId.RIBOMBEE, + SpeciesId.SPIDOPS, + SpeciesId.LOKIX, ]; const POOL_2_POKEMON = [ - Species.SCYTHER, - Species.PINSIR, - Species.HERACROSS, - Species.FORRETRESS, - Species.SCIZOR, - Species.SHUCKLE, - Species.SHEDINJA, - Species.ARMALDO, - Species.VESPIQUEN, - Species.DRAPION, - Species.YANMEGA, - Species.LEAVANNY, - Species.SCOLIPEDE, - Species.CRUSTLE, - Species.ESCAVALIER, - Species.ACCELGOR, - Species.GALVANTULA, - Species.VIKAVOLT, - Species.ARAQUANID, - Species.ORBEETLE, - Species.CENTISKORCH, - Species.FROSMOTH, - Species.KLEAVOR, + SpeciesId.SCYTHER, + SpeciesId.PINSIR, + SpeciesId.HERACROSS, + SpeciesId.FORRETRESS, + SpeciesId.SCIZOR, + SpeciesId.SHUCKLE, + SpeciesId.SHEDINJA, + SpeciesId.ARMALDO, + SpeciesId.VESPIQUEN, + SpeciesId.DRAPION, + SpeciesId.YANMEGA, + SpeciesId.LEAVANNY, + SpeciesId.SCOLIPEDE, + SpeciesId.CRUSTLE, + SpeciesId.ESCAVALIER, + SpeciesId.ACCELGOR, + SpeciesId.GALVANTULA, + SpeciesId.VIKAVOLT, + SpeciesId.ARAQUANID, + SpeciesId.ORBEETLE, + SpeciesId.CENTISKORCH, + SpeciesId.FROSMOTH, + SpeciesId.KLEAVOR, ]; -const POOL_3_POKEMON: { species: Species; formIndex?: number }[] = [ +const POOL_3_POKEMON: { species: SpeciesId; formIndex?: number }[] = [ { - species: Species.PINSIR, + species: SpeciesId.PINSIR, formIndex: 1, }, { - species: Species.SCIZOR, + species: SpeciesId.SCIZOR, formIndex: 1, }, { - species: Species.HERACROSS, + species: SpeciesId.HERACROSS, formIndex: 1, }, { - species: Species.ORBEETLE, + species: SpeciesId.ORBEETLE, formIndex: 1, }, { - species: Species.CENTISKORCH, + species: SpeciesId.CENTISKORCH, formIndex: 1, }, { - species: Species.DURANT, + species: SpeciesId.DURANT, }, { - species: Species.VOLCARONA, + species: SpeciesId.VOLCARONA, }, { - species: Species.GOLISOPOD, + species: SpeciesId.GOLISOPOD, }, ]; -const POOL_4_POKEMON = [Species.GENESECT, Species.SLITHER_WING, Species.BUZZWOLE, Species.PHEROMOSA]; +const POOL_4_POKEMON = [SpeciesId.GENESECT, SpeciesId.SLITHER_WING, SpeciesId.BUZZWOLE, SpeciesId.PHEROMOSA]; const PHYSICAL_TUTOR_MOVES = [ - Moves.MEGAHORN, - Moves.ATTACK_ORDER, - Moves.BUG_BITE, - Moves.FIRST_IMPRESSION, - Moves.LUNGE + MoveId.MEGAHORN, + MoveId.ATTACK_ORDER, + MoveId.BUG_BITE, + MoveId.FIRST_IMPRESSION, + MoveId.LUNGE, ]; const SPECIAL_TUTOR_MOVES = [ - Moves.SILVER_WIND, - Moves.SIGNAL_BEAM, - Moves.BUG_BUZZ, - Moves.POLLEN_PUFF, - Moves.STRUGGLE_BUG + MoveId.SILVER_WIND, + MoveId.SIGNAL_BEAM, + MoveId.BUG_BUZZ, + MoveId.POLLEN_PUFF, + MoveId.STRUGGLE_BUG, ]; const STATUS_TUTOR_MOVES = [ - Moves.STRING_SHOT, - Moves.DEFEND_ORDER, - Moves.RAGE_POWDER, - Moves.STICKY_WEB, - Moves.SILK_TRAP + MoveId.STRING_SHOT, + MoveId.DEFEND_ORDER, + MoveId.RAGE_POWDER, + MoveId.STICKY_WEB, + MoveId.SILK_TRAP, ]; -const MISC_TUTOR_MOVES = [ - Moves.LEECH_LIFE, - Moves.U_TURN, - Moves.HEAL_ORDER, - Moves.QUIVER_DANCE, - Moves.INFESTATION, -]; +const MISC_TUTOR_MOVES = [MoveId.LEECH_LIFE, MoveId.U_TURN, MoveId.HEAL_ORDER, MoveId.QUIVER_DANCE, MoveId.INFESTATION]; describe("Bug-Type Superfan - Mystery Encounter", () => { let phaserGame: Phaser.Game; @@ -166,7 +160,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { game.override.disableTrainerWaves(); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( - new Map([[Biome.CAVE, [MysteryEncounterType.BUG_TYPE_SUPERFAN]]]), + new Map([[BiomeId.CAVE, [MysteryEncounterType.BUG_TYPE_SUPERFAN]]]), ); }); @@ -241,8 +235,8 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyParty.length).toBe(2); expect(scene.currentBattle.trainer?.config.trainerType).toBe(TrainerType.BUG_TYPE_SUPERFAN); - expect(enemyParty[0].species.speciesId).toBe(Species.BEEDRILL); - expect(enemyParty[1].species.speciesId).toBe(Species.BUTTERFREE); + expect(enemyParty[0].species.speciesId).toBe(SpeciesId.BEEDRILL); + expect(enemyParty[1].species.speciesId).toBe(SpeciesId.BUTTERFREE); }); it("should start battle against the Bug-Type Superfan with wave 50 party template", async () => { @@ -254,8 +248,8 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyParty.length).toBe(3); expect(scene.currentBattle.trainer?.config.trainerType).toBe(TrainerType.BUG_TYPE_SUPERFAN); - expect(enemyParty[0].species.speciesId).toBe(Species.BEEDRILL); - expect(enemyParty[1].species.speciesId).toBe(Species.BUTTERFREE); + expect(enemyParty[0].species.speciesId).toBe(SpeciesId.BEEDRILL); + expect(enemyParty[1].species.speciesId).toBe(SpeciesId.BUTTERFREE); expect(POOL_1_POKEMON.includes(enemyParty[2].species.speciesId)).toBe(true); }); @@ -268,8 +262,8 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyParty.length).toBe(4); expect(scene.currentBattle.trainer?.config.trainerType).toBe(TrainerType.BUG_TYPE_SUPERFAN); - expect(enemyParty[0].species.speciesId).toBe(Species.BEEDRILL); - expect(enemyParty[1].species.speciesId).toBe(Species.BUTTERFREE); + expect(enemyParty[0].species.speciesId).toBe(SpeciesId.BEEDRILL); + expect(enemyParty[1].species.speciesId).toBe(SpeciesId.BUTTERFREE); expect(POOL_1_POKEMON.includes(enemyParty[2].species.speciesId)).toBe(true); expect(POOL_2_POKEMON.includes(enemyParty[3].species.speciesId)).toBe(true); }); @@ -283,8 +277,8 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyParty.length).toBe(5); expect(scene.currentBattle.trainer?.config.trainerType).toBe(TrainerType.BUG_TYPE_SUPERFAN); - expect(enemyParty[0].species.speciesId).toBe(Species.BEEDRILL); - expect(enemyParty[1].species.speciesId).toBe(Species.BUTTERFREE); + expect(enemyParty[0].species.speciesId).toBe(SpeciesId.BEEDRILL); + expect(enemyParty[1].species.speciesId).toBe(SpeciesId.BUTTERFREE); expect(POOL_1_POKEMON.includes(enemyParty[2].species.speciesId)).toBe(true); expect(POOL_2_POKEMON.includes(enemyParty[3].species.speciesId)).toBe(true); expect(POOL_2_POKEMON.includes(enemyParty[4].species.speciesId)).toBe(true); @@ -299,9 +293,9 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyParty.length).toBe(5); expect(scene.currentBattle.trainer?.config.trainerType).toBe(TrainerType.BUG_TYPE_SUPERFAN); - expect(enemyParty[0].species.speciesId).toBe(Species.BEEDRILL); + expect(enemyParty[0].species.speciesId).toBe(SpeciesId.BEEDRILL); expect(enemyParty[0].formIndex).toBe(1); - expect(enemyParty[1].species.speciesId).toBe(Species.BUTTERFREE); + expect(enemyParty[1].species.speciesId).toBe(SpeciesId.BUTTERFREE); expect(enemyParty[1].formIndex).toBe(1); expect(POOL_2_POKEMON.includes(enemyParty[2].species.speciesId)).toBe(true); expect(POOL_2_POKEMON.includes(enemyParty[3].species.speciesId)).toBe(true); @@ -317,9 +311,9 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyParty.length).toBe(5); expect(scene.currentBattle.trainer?.config.trainerType).toBe(TrainerType.BUG_TYPE_SUPERFAN); - expect(enemyParty[0].species.speciesId).toBe(Species.BEEDRILL); + expect(enemyParty[0].species.speciesId).toBe(SpeciesId.BEEDRILL); expect(enemyParty[0].formIndex).toBe(1); - expect(enemyParty[1].species.speciesId).toBe(Species.BUTTERFREE); + expect(enemyParty[1].species.speciesId).toBe(SpeciesId.BUTTERFREE); expect(enemyParty[1].formIndex).toBe(1); expect(POOL_2_POKEMON.includes(enemyParty[2].species.speciesId)).toBe(true); expect(POOL_3_POKEMON.some(config => enemyParty[3].species.speciesId === config.species)).toBe(true); @@ -335,9 +329,9 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyParty.length).toBe(5); expect(scene.currentBattle.trainer?.config.trainerType).toBe(TrainerType.BUG_TYPE_SUPERFAN); - expect(enemyParty[0].species.speciesId).toBe(Species.BEEDRILL); + expect(enemyParty[0].species.speciesId).toBe(SpeciesId.BEEDRILL); expect(enemyParty[0].formIndex).toBe(1); - expect(enemyParty[1].species.speciesId).toBe(Species.BUTTERFREE); + expect(enemyParty[1].species.speciesId).toBe(SpeciesId.BUTTERFREE); expect(enemyParty[1].formIndex).toBe(1); expect(POOL_2_POKEMON.includes(enemyParty[2].species.speciesId)).toBe(true); expect(POOL_3_POKEMON.some(config => enemyParty[3].species.speciesId === config.species)).toBe(true); @@ -353,11 +347,11 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyParty.length).toBe(5); expect(scene.currentBattle.trainer?.config.trainerType).toBe(TrainerType.BUG_TYPE_SUPERFAN); - expect(enemyParty[0].species.speciesId).toBe(Species.BEEDRILL); + expect(enemyParty[0].species.speciesId).toBe(SpeciesId.BEEDRILL); expect(enemyParty[0].formIndex).toBe(1); expect(enemyParty[0].isBoss()).toBe(true); expect(enemyParty[0].bossSegments).toBe(2); - expect(enemyParty[1].species.speciesId).toBe(Species.BUTTERFREE); + expect(enemyParty[1].species.speciesId).toBe(SpeciesId.BUTTERFREE); expect(enemyParty[1].formIndex).toBe(1); expect(enemyParty[1].isBoss()).toBe(true); expect(enemyParty[1].bossSegments).toBe(2); @@ -401,7 +395,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { }); it("should NOT be selectable if the player doesn't have any Bug types", async () => { - await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, [Species.ABRA]); + await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, [SpeciesId.ABRA]); await game.phaseInterceptor.to(MysteryEncounterPhase, false); const encounterPhase = scene.getCurrentPhase(); @@ -436,7 +430,10 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { }); it("should proceed to rewards screen with 2-3 Bug Types reward options", async () => { - await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, [Species.BUTTERFREE, Species.BEEDRILL]); + await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, [ + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + ]); await runMysteryEncounterToEnd(game, 2); expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); @@ -454,10 +451,10 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { it("should proceed to rewards screen with 4-5 Bug Types reward options", async () => { await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, [ - Species.BUTTERFREE, - Species.BEEDRILL, - Species.GALVANTULA, - Species.VOLCARONA, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.GALVANTULA, + SpeciesId.VOLCARONA, ]); await runMysteryEncounterToEnd(game, 2); @@ -476,12 +473,12 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { it("should proceed to rewards screen with 6 Bug Types reward options (including form change item)", async () => { await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, [ - Species.BUTTERFREE, - Species.BEEDRILL, - Species.GALVANTULA, - Species.VOLCARONA, - Species.ANORITH, - Species.GENESECT, + SpeciesId.BUTTERFREE, + SpeciesId.BEEDRILL, + SpeciesId.GALVANTULA, + SpeciesId.VOLCARONA, + SpeciesId.ANORITH, + SpeciesId.GENESECT, ]); await runMysteryEncounterToEnd(game, 2); @@ -554,7 +551,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { it("should remove the gifted item and proceed to rewards screen", async () => { game.override.startingHeldItems([{ name: "GRIP_CLAW", count: 1 }]); - await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, [Species.BUTTERFREE]); + await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, [SpeciesId.BUTTERFREE]); const gripClawCountBefore = scene.findModifier(m => m instanceof ContactHeldItemTransferChanceModifier)?.stackCount ?? 0; @@ -581,7 +578,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { game.override.startingHeldItems([{ name: "GRIP_CLAW", count: 1 }]); const leaveEncounterWithoutBattleSpy = vi.spyOn(encounterPhaseUtils, "leaveEncounterWithoutBattle"); - await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, [Species.BUTTERFREE]); + await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, [SpeciesId.BUTTERFREE]); await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1 }); expect(leaveEncounterWithoutBattleSpy).toBeCalled(); diff --git a/test/mystery-encounter/encounters/clowning-around-encounter.test.ts b/test/mystery-encounter/encounters/clowning-around-encounter.test.ts index afc4a83e9bf..d83f8d0642c 100644 --- a/test/mystery-encounter/encounters/clowning-around-encounter.test.ts +++ b/test/mystery-encounter/encounters/clowning-around-encounter.test.ts @@ -1,7 +1,7 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; -import { Biome } from "#app/enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; -import { Species } from "#app/enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { getPokemonSpecies } from "#app/data/pokemon-species"; @@ -12,7 +12,7 @@ import { runMysteryEncounterToEnd, skipBattleRunMysteryEncounterRewardsPhase, } from "#test/mystery-encounter/encounter-test-utils"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import type BattleScene from "#app/battle-scene"; import type Pokemon from "#app/field/pokemon"; import { PokemonMove } from "#app/field/pokemon"; @@ -23,7 +23,7 @@ import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils import { ModifierTier } from "#app/modifier/modifier-tier"; import { ClowningAroundEncounter } from "#app/data/mystery-encounters/encounters/clowning-around-encounter"; import { TrainerType } from "#enums/trainer-type"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { PostMysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import { Button } from "#enums/buttons"; import type PartyUiHandler from "#app/ui/party-ui-handler"; @@ -39,8 +39,8 @@ import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import { NewBattlePhase } from "#app/phases/new-battle-phase"; const namespace = "mysteryEncounters/clowningAround"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; -const defaultBiome = Biome.CAVE; +const defaultParty = [SpeciesId.LAPRAS, SpeciesId.GENGAR, SpeciesId.ABRA]; +const defaultBiome = BiomeId.CAVE; const defaultWave = 45; describe("Clowning Around - Mystery Encounter", () => { @@ -61,7 +61,7 @@ describe("Clowning Around - Mystery Encounter", () => { game.override.disableTrainerWaves(); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( - new Map([[Biome.CAVE, [MysteryEncounterType.CLOWNING_AROUND]]]), + new Map([[BiomeId.CAVE, [MysteryEncounterType.CLOWNING_AROUND]]]), ); }); @@ -115,33 +115,33 @@ describe("Clowning Around - Mystery Encounter", () => { expect(config.doubleBattle).toBe(true); expect(config.trainerConfig?.trainerType).toBe(TrainerType.HARLEQUIN); expect(config.pokemonConfigs?.[0]).toEqual({ - species: getPokemonSpecies(Species.MR_MIME), + species: getPokemonSpecies(SpeciesId.MR_MIME), isBoss: true, - moveSet: [Moves.TEETER_DANCE, Moves.ALLY_SWITCH, Moves.DAZZLING_GLEAM, Moves.PSYCHIC], + moveSet: [MoveId.TEETER_DANCE, MoveId.ALLY_SWITCH, MoveId.DAZZLING_GLEAM, MoveId.PSYCHIC], }); expect(config.pokemonConfigs?.[1]).toEqual({ - species: getPokemonSpecies(Species.BLACEPHALON), + species: getPokemonSpecies(SpeciesId.BLACEPHALON), customPokemonData: expect.anything(), isBoss: true, - moveSet: [Moves.TRICK, Moves.HYPNOSIS, Moves.SHADOW_BALL, Moves.MIND_BLOWN], + moveSet: [MoveId.TRICK, MoveId.HYPNOSIS, MoveId.SHADOW_BALL, MoveId.MIND_BLOWN], }); expect(config.pokemonConfigs?.[1].customPokemonData?.types.length).toBe(2); expect([ - Abilities.STURDY, - Abilities.PICKUP, - Abilities.INTIMIDATE, - Abilities.GUTS, - Abilities.DROUGHT, - Abilities.DRIZZLE, - Abilities.SNOW_WARNING, - Abilities.SAND_STREAM, - Abilities.ELECTRIC_SURGE, - Abilities.PSYCHIC_SURGE, - Abilities.GRASSY_SURGE, - Abilities.MISTY_SURGE, - Abilities.MAGICIAN, - Abilities.SHEER_FORCE, - Abilities.PRANKSTER, + AbilityId.STURDY, + AbilityId.PICKUP, + AbilityId.INTIMIDATE, + AbilityId.GUTS, + AbilityId.DROUGHT, + AbilityId.DRIZZLE, + AbilityId.SNOW_WARNING, + AbilityId.SAND_STREAM, + AbilityId.ELECTRIC_SURGE, + AbilityId.PSYCHIC_SURGE, + AbilityId.GRASSY_SURGE, + AbilityId.MISTY_SURGE, + AbilityId.MAGICIAN, + AbilityId.SHEER_FORCE, + AbilityId.PRANKSTER, ]).toContain(config.pokemonConfigs?.[1].customPokemonData?.ability); expect(ClowningAroundEncounter.misc.ability).toBe(config.pokemonConfigs?.[1].customPokemonData?.ability); await vi.waitFor(() => expect(moveInitSpy).toHaveBeenCalled()); @@ -175,26 +175,26 @@ describe("Clowning Around - Mystery Encounter", () => { const enemyField = scene.getEnemyField(); expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyField.length).toBe(2); - expect(enemyField[0].species.speciesId).toBe(Species.MR_MIME); + expect(enemyField[0].species.speciesId).toBe(SpeciesId.MR_MIME); expect(enemyField[0].moveset).toEqual([ - new PokemonMove(Moves.TEETER_DANCE), - new PokemonMove(Moves.ALLY_SWITCH), - new PokemonMove(Moves.DAZZLING_GLEAM), - new PokemonMove(Moves.PSYCHIC), + new PokemonMove(MoveId.TEETER_DANCE), + new PokemonMove(MoveId.ALLY_SWITCH), + new PokemonMove(MoveId.DAZZLING_GLEAM), + new PokemonMove(MoveId.PSYCHIC), ]); - expect(enemyField[1].species.speciesId).toBe(Species.BLACEPHALON); + expect(enemyField[1].species.speciesId).toBe(SpeciesId.BLACEPHALON); expect(enemyField[1].moveset).toEqual([ - new PokemonMove(Moves.TRICK), - new PokemonMove(Moves.HYPNOSIS), - new PokemonMove(Moves.SHADOW_BALL), - new PokemonMove(Moves.MIND_BLOWN), + new PokemonMove(MoveId.TRICK), + new PokemonMove(MoveId.HYPNOSIS), + new PokemonMove(MoveId.SHADOW_BALL), + new PokemonMove(MoveId.MIND_BLOWN), ]); // Should have used moves pre-battle const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof MovePhase).map(p => p[0]); expect(movePhases.length).toBe(3); - expect(movePhases.filter(p => (p as MovePhase).move.moveId === Moves.ROLE_PLAY).length).toBe(1); - expect(movePhases.filter(p => (p as MovePhase).move.moveId === Moves.TAUNT).length).toBe(2); + expect(movePhases.filter(p => (p as MovePhase).move.moveId === MoveId.ROLE_PLAY).length).toBe(1); + expect(movePhases.filter(p => (p as MovePhase).move.moveId === MoveId.TAUNT).length).toBe(2); }); it("should let the player gain the ability after battle completion", async () => { @@ -264,7 +264,7 @@ describe("Clowning Around - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.CLOWNING_AROUND, defaultParty); // Set some moves on party for attack type booster generation - scene.getPlayerParty()[0].moveset = [new PokemonMove(Moves.TACKLE), new PokemonMove(Moves.THIEF)]; + scene.getPlayerParty()[0].moveset = [new PokemonMove(MoveId.TACKLE), new PokemonMove(MoveId.THIEF)]; // 2 Sitrus Berries on lead scene.modifiers = []; @@ -349,9 +349,9 @@ describe("Clowning Around - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.CLOWNING_AROUND, defaultParty); // Same type moves on lead - scene.getPlayerParty()[0].moveset = [new PokemonMove(Moves.ICE_BEAM), new PokemonMove(Moves.SURF)]; + scene.getPlayerParty()[0].moveset = [new PokemonMove(MoveId.ICE_BEAM), new PokemonMove(MoveId.SURF)]; // Different type moves on second - scene.getPlayerParty()[1].moveset = [new PokemonMove(Moves.GRASS_KNOT), new PokemonMove(Moves.ELECTRO_BALL)]; + scene.getPlayerParty()[1].moveset = [new PokemonMove(MoveId.GRASS_KNOT), new PokemonMove(MoveId.ELECTRO_BALL)]; // No moves on third scene.getPlayerParty()[2].moveset = []; await runMysteryEncounterToEnd(game, 3); diff --git a/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts b/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts index 873bed2f213..501ff0c45e8 100644 --- a/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts +++ b/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts @@ -1,6 +1,6 @@ -import { Biome } from "#app/enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; -import { Species } from "#app/enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; @@ -13,7 +13,7 @@ import type BattleScene from "#app/battle-scene"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { DancingLessonsEncounter } from "#app/data/mystery-encounters/encounters/dancing-lessons-encounter"; import { UiMode } from "#enums/ui-mode"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; @@ -25,8 +25,8 @@ import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import { LearnMovePhase } from "#app/phases/learn-move-phase"; const namespace = "mysteryEncounters/dancingLessons"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; -const defaultBiome = Biome.PLAINS; +const defaultParty = [SpeciesId.LAPRAS, SpeciesId.GENGAR, SpeciesId.ABRA]; +const defaultBiome = BiomeId.PLAINS; const defaultWave = 45; describe("Dancing Lessons - Mystery Encounter", () => { @@ -47,9 +47,9 @@ describe("Dancing Lessons - Mystery Encounter", () => { game.override.disableTrainerWaves(); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( - new Map([ - [Biome.PLAINS, [MysteryEncounterType.DANCING_LESSONS]], - [Biome.SPACE, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], + new Map([ + [BiomeId.PLAINS, [MysteryEncounterType.DANCING_LESSONS]], + [BiomeId.SPACE, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], ]), ); }); @@ -75,7 +75,7 @@ describe("Dancing Lessons - Mystery Encounter", () => { it("should not spawn outside of proper biomes", async () => { game.override.mysteryEncounterTier(MysteryEncounterTier.GREAT); - game.override.startingBiome(Biome.SPACE); + game.override.startingBiome(BiomeId.SPACE); await game.runToMysteryEncounter(); expect(game.scene.currentBattle.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.DANCING_LESSONS); @@ -110,14 +110,14 @@ describe("Dancing Lessons - Mystery Encounter", () => { const enemyField = scene.getEnemyField(); expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyField.length).toBe(1); - expect(enemyField[0].species.speciesId).toBe(Species.ORICORIO); + expect(enemyField[0].species.speciesId).toBe(SpeciesId.ORICORIO); expect(enemyField[0].summonData.statStages).toEqual([1, 1, 1, 1, 0, 0, 0]); const moveset = enemyField[0].moveset.map(m => m.moveId); - expect(moveset.some(m => m === Moves.REVELATION_DANCE)).toBeTruthy(); + expect(moveset.some(m => m === MoveId.REVELATION_DANCE)).toBeTruthy(); const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof MovePhase).map(p => p[0]); expect(movePhases.length).toBe(1); - expect(movePhases.filter(p => (p as MovePhase).move.moveId === Moves.REVELATION_DANCE).length).toBe(1); // Revelation Dance used before battle + expect(movePhases.filter(p => (p as MovePhase).move.moveId === MoveId.REVELATION_DANCE).length).toBe(1); // Revelation Dance used before battle }); it("should have a Baton in the rewards after battle", async () => { @@ -166,7 +166,7 @@ describe("Dancing Lessons - Mystery Encounter", () => { const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof LearnMovePhase).map(p => p[0]); expect(movePhases.length).toBe(1); - expect(movePhases.filter(p => (p as LearnMovePhase)["moveId"] === Moves.REVELATION_DANCE).length).toBe(1); // Revelation Dance taught to pokemon + expect(movePhases.filter(p => (p as LearnMovePhase)["moveId"] === MoveId.REVELATION_DANCE).length).toBe(1); // Revelation Dance taught to pokemon }); it("should leave encounter without battle", async () => { @@ -201,16 +201,16 @@ describe("Dancing Lessons - Mystery Encounter", () => { it("should add Oricorio to the party", async () => { await game.runToMysteryEncounter(MysteryEncounterType.DANCING_LESSONS, defaultParty); const partyCountBefore = scene.getPlayerParty().length; - scene.getPlayerParty()[0].moveset = [new PokemonMove(Moves.DRAGON_DANCE)]; + scene.getPlayerParty()[0].moveset = [new PokemonMove(MoveId.DRAGON_DANCE)]; await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1 }); const partyCountAfter = scene.getPlayerParty().length; expect(partyCountBefore + 1).toBe(partyCountAfter); const oricorio = scene.getPlayerParty()[scene.getPlayerParty().length - 1]; - expect(oricorio.species.speciesId).toBe(Species.ORICORIO); + expect(oricorio.species.speciesId).toBe(SpeciesId.ORICORIO); const moveset = oricorio.moveset.map(m => m.moveId); - expect(moveset?.some(m => m === Moves.REVELATION_DANCE)).toBeTruthy(); - expect(moveset?.some(m => m === Moves.DRAGON_DANCE)).toBeTruthy(); + expect(moveset?.some(m => m === MoveId.REVELATION_DANCE)).toBeTruthy(); + expect(moveset?.some(m => m === MoveId.DRAGON_DANCE)).toBeTruthy(); }); it("should NOT be selectable if the player doesn't have a Dance type move", async () => { @@ -240,7 +240,7 @@ describe("Dancing Lessons - Mystery Encounter", () => { const leaveEncounterWithoutBattleSpy = vi.spyOn(EncounterPhaseUtils, "leaveEncounterWithoutBattle"); await game.runToMysteryEncounter(MysteryEncounterType.DANCING_LESSONS, defaultParty); - scene.getPlayerParty()[0].moveset = [new PokemonMove(Moves.DRAGON_DANCE)]; + scene.getPlayerParty()[0].moveset = [new PokemonMove(MoveId.DRAGON_DANCE)]; await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1 }); expect(leaveEncounterWithoutBattleSpy).toBeCalled(); diff --git a/test/mystery-encounter/encounters/delibirdy-encounter.test.ts b/test/mystery-encounter/encounters/delibirdy-encounter.test.ts index 94faf070a39..58496e957c0 100644 --- a/test/mystery-encounter/encounters/delibirdy-encounter.test.ts +++ b/test/mystery-encounter/encounters/delibirdy-encounter.test.ts @@ -1,6 +1,6 @@ -import { Biome } from "#app/enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; -import { Species } from "#app/enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; @@ -30,8 +30,8 @@ import { modifierTypes } from "#app/modifier/modifier-type"; import { BerryType } from "#enums/berry-type"; const namespace = "mysteryEncounters/delibirdy"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; -const defaultBiome = Biome.CAVE; +const defaultParty = [SpeciesId.LAPRAS, SpeciesId.GENGAR, SpeciesId.ABRA]; +const defaultBiome = BiomeId.CAVE; const defaultWave = 45; describe("Delibird-y - Mystery Encounter", () => { @@ -52,7 +52,7 @@ describe("Delibird-y - Mystery Encounter", () => { game.override.disableTrainerWaves(); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( - new Map([[Biome.CAVE, [MysteryEncounterType.DELIBIRDY]]]), + new Map([[BiomeId.CAVE, [MysteryEncounterType.DELIBIRDY]]]), ); }); diff --git a/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts b/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts index 2488d12dad1..c2974def16e 100644 --- a/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts +++ b/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts @@ -1,7 +1,7 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; -import { Biome } from "#app/enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; -import { Species } from "#app/enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; @@ -16,8 +16,8 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; const namespace = "mysteryEncounters/departmentStoreSale"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; -const defaultBiome = Biome.PLAINS; +const defaultParty = [SpeciesId.LAPRAS, SpeciesId.GENGAR, SpeciesId.ABRA]; +const defaultBiome = BiomeId.PLAINS; const defaultWave = 37; describe("Department Store Sale - Mystery Encounter", () => { @@ -37,8 +37,8 @@ describe("Department Store Sale - Mystery Encounter", () => { game.override.startingBiome(defaultBiome); game.override.disableTrainerWaves(); - const biomeMap = new Map([ - [Biome.VOLCANO, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], + const biomeMap = new Map([ + [BiomeId.VOLCANO, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], ]); CIVILIZATION_ENCOUNTER_BIOMES.forEach(biome => { biomeMap.set(biome, [MysteryEncounterType.DEPARTMENT_STORE_SALE]); @@ -75,7 +75,7 @@ describe("Department Store Sale - Mystery Encounter", () => { it("should not spawn outside of CIVILIZATION_ENCOUNTER_BIOMES", async () => { game.override.mysteryEncounterTier(MysteryEncounterTier.COMMON); - game.override.startingBiome(Biome.VOLCANO); + game.override.startingBiome(BiomeId.VOLCANO); await game.runToMysteryEncounter(); expect(scene.currentBattle?.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.DEPARTMENT_STORE_SALE); diff --git a/test/mystery-encounter/encounters/field-trip-encounter.test.ts b/test/mystery-encounter/encounters/field-trip-encounter.test.ts index 75a6fe77492..f93de7dc955 100644 --- a/test/mystery-encounter/encounters/field-trip-encounter.test.ts +++ b/test/mystery-encounter/encounters/field-trip-encounter.test.ts @@ -1,6 +1,6 @@ -import { Biome } from "#app/enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; -import { Species } from "#app/enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; @@ -10,15 +10,15 @@ import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; import { FieldTripEncounter } from "#app/data/mystery-encounters/encounters/field-trip-encounter"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import { UiMode } from "#enums/ui-mode"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import i18next from "i18next"; const namespace = "mysteryEncounters/fieldTrip"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; -const defaultBiome = Biome.CAVE; +const defaultParty = [SpeciesId.LAPRAS, SpeciesId.GENGAR, SpeciesId.ABRA]; +const defaultBiome = BiomeId.CAVE; const defaultWave = 45; describe("Field Trip - Mystery Encounter", () => { @@ -37,10 +37,10 @@ describe("Field Trip - Mystery Encounter", () => { game.override.startingWave(defaultWave); game.override.startingBiome(defaultBiome); game.override.disableTrainerWaves(); - game.override.moveset([Moves.TACKLE, Moves.UPROAR, Moves.SWORDS_DANCE]); + game.override.moveset([MoveId.TACKLE, MoveId.UPROAR, MoveId.SWORDS_DANCE]); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( - new Map([[Biome.CAVE, [MysteryEncounterType.FIELD_TRIP]]]), + new Map([[BiomeId.CAVE, [MysteryEncounterType.FIELD_TRIP]]]), ); }); diff --git a/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts b/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts index 3d311134d4e..ba9ea4126da 100644 --- a/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts +++ b/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts @@ -1,7 +1,7 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; -import { Biome } from "#enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { FieryFalloutEncounter } from "#app/data/mystery-encounters/encounters/fiery-fallout-encounter"; @@ -14,7 +14,7 @@ import { runSelectMysteryEncounterOption, skipBattleRunMysteryEncounterRewardsPhase, } from "#test/mystery-encounter/encounter-test-utils"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import type BattleScene from "#app/battle-scene"; import { AttackTypeBoosterModifier, PokemonHeldItemModifier } from "#app/modifier/modifier"; import { PokemonType } from "#enums/pokemon-type"; @@ -27,14 +27,14 @@ import { CommandPhase } from "#app/phases/command-phase"; import { MovePhase } from "#app/phases/move-phase"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import i18next from "i18next"; import { StatusEffect } from "#enums/status-effect"; const namespace = "mysteryEncounters/fieryFallout"; /** Arcanine and Ninetails for 2 Fire types. Lapras, Gengar, Abra for burnable mon. */ -const defaultParty = [Species.ARCANINE, Species.NINETALES, Species.LAPRAS, Species.GENGAR, Species.ABRA]; -const defaultBiome = Biome.VOLCANO; +const defaultParty = [SpeciesId.ARCANINE, SpeciesId.NINETALES, SpeciesId.LAPRAS, SpeciesId.GENGAR, SpeciesId.ABRA]; +const defaultBiome = BiomeId.VOLCANO; const defaultWave = 56; describe("Fiery Fallout - Mystery Encounter", () => { @@ -54,12 +54,12 @@ describe("Fiery Fallout - Mystery Encounter", () => { .startingWave(defaultWave) .startingBiome(defaultBiome) .disableTrainerWaves() - .moveset([Moves.PAYBACK, Moves.THUNDERBOLT]); // Required for attack type booster item generation + .moveset([MoveId.PAYBACK, MoveId.THUNDERBOLT]); // Required for attack type booster item generation vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( - new Map([ - [Biome.VOLCANO, [MysteryEncounterType.FIERY_FALLOUT]], - [Biome.MOUNTAIN, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], + new Map([ + [BiomeId.VOLCANO, [MysteryEncounterType.FIERY_FALLOUT]], + [BiomeId.MOUNTAIN, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], ]), ); }); @@ -84,7 +84,7 @@ describe("Fiery Fallout - Mystery Encounter", () => { }); it("should not spawn outside of volcano biome", async () => { - game.override.startingBiome(Biome.MOUNTAIN); + game.override.startingBiome(BiomeId.MOUNTAIN); await game.runToMysteryEncounter(); expect(scene.currentBattle?.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.FIERY_FALLOUT); @@ -116,14 +116,14 @@ describe("Fiery Fallout - Mystery Encounter", () => { { pokemonConfigs: [ { - species: getPokemonSpecies(Species.VOLCARONA), + species: getPokemonSpecies(SpeciesId.VOLCARONA), isBoss: false, gender: Gender.MALE, tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], mysteryEncounterBattleEffects: expect.any(Function), }, { - species: getPokemonSpecies(Species.VOLCARONA), + species: getPokemonSpecies(SpeciesId.VOLCARONA), isBoss: false, gender: Gender.FEMALE, tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], @@ -165,13 +165,13 @@ describe("Fiery Fallout - Mystery Encounter", () => { const enemyField = scene.getEnemyField(); expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyField.length).toBe(2); - expect(enemyField[0].species.speciesId).toBe(Species.VOLCARONA); - expect(enemyField[1].species.speciesId).toBe(Species.VOLCARONA); + expect(enemyField[0].species.speciesId).toBe(SpeciesId.VOLCARONA); + expect(enemyField[1].species.speciesId).toBe(SpeciesId.VOLCARONA); expect(enemyField[0].gender).not.toEqual(enemyField[1].gender); // Should be opposite gender const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof MovePhase).map(p => p[0]); expect(movePhases.length).toBe(2); - expect(movePhases.filter(p => (p as MovePhase).move.moveId === Moves.FIRE_SPIN).length).toBe(2); // Fire spin used twice before battle + expect(movePhases.filter(p => (p as MovePhase).move.moveId === MoveId.FIRE_SPIN).length).toBe(2); // Fire spin used twice before battle }); it("should give attack type boosting item to lead pokemon", async () => { @@ -211,9 +211,9 @@ describe("Fiery Fallout - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.FIERY_FALLOUT, defaultParty); const party = scene.getPlayerParty(); - const lapras = party.find(pkm => pkm.species.speciesId === Species.LAPRAS)!; + const lapras = party.find(pkm => pkm.species.speciesId === SpeciesId.LAPRAS)!; lapras.status = new Status(StatusEffect.POISON); - const abra = party.find(pkm => pkm.species.speciesId === Species.ABRA)!; + const abra = party.find(pkm => pkm.species.speciesId === SpeciesId.ABRA)!; vi.spyOn(abra, "isAllowedInBattle").mockReturnValue(false); await runMysteryEncounterToEnd(game, 2); @@ -231,7 +231,7 @@ describe("Fiery Fallout - Mystery Encounter", () => { ); }); expect(burnablePokemon.some(pkm => pkm.status?.effect === StatusEffect.BURN)).toBeTruthy(); - expect(burnablePokemon.some(pkm => pkm.customPokemonData.ability === Abilities.HEATPROOF)); + expect(burnablePokemon.some(pkm => pkm.customPokemonData.ability === AbilityId.HEATPROOF)); notBurnablePokemon.forEach(pkm => expect(pkm.hp, `${pkm.name} should be full hp: ${pkm.hp} / ${pkm.getMaxHp()} HP`).toBe(pkm.getMaxHp()), ); @@ -285,7 +285,7 @@ describe("Fiery Fallout - Mystery Encounter", () => { }); it("should be disabled if not enough FIRE types are in party", async () => { - await game.runToMysteryEncounter(MysteryEncounterType.FIERY_FALLOUT, [Species.MAGIKARP]); + await game.runToMysteryEncounter(MysteryEncounterType.FIERY_FALLOUT, [SpeciesId.MAGIKARP]); await game.phaseInterceptor.to(MysteryEncounterPhase, false); const encounterPhase = scene.getCurrentPhase(); diff --git a/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts b/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts index d47266268ee..1b5bd9fc649 100644 --- a/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts +++ b/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts @@ -1,7 +1,7 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; -import { Biome } from "#app/enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; -import { Species } from "#app/enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { @@ -9,7 +9,7 @@ import { runSelectMysteryEncounterOption, skipBattleRunMysteryEncounterRewardsPhase, } from "#test/mystery-encounter/encounter-test-utils"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import type BattleScene from "#app/battle-scene"; import { PokemonMove } from "#app/field/pokemon"; import { UiMode } from "#enums/ui-mode"; @@ -24,8 +24,8 @@ import { CommandPhase } from "#app/phases/command-phase"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; const namespace = "mysteryEncounters/fightOrFlight"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; -const defaultBiome = Biome.CAVE; +const defaultParty = [SpeciesId.LAPRAS, SpeciesId.GENGAR, SpeciesId.ABRA]; +const defaultBiome = BiomeId.CAVE; const defaultWave = 45; describe("Fight or Flight - Mystery Encounter", () => { @@ -46,7 +46,7 @@ describe("Fight or Flight - Mystery Encounter", () => { game.override.disableTrainerWaves(); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( - new Map([[Biome.CAVE, [MysteryEncounterType.FIGHT_OR_FLIGHT]]]), + new Map([[BiomeId.CAVE, [MysteryEncounterType.FIGHT_OR_FLIGHT]]]), ); }); @@ -179,7 +179,7 @@ describe("Fight or Flight - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.FIGHT_OR_FLIGHT, defaultParty); // Mock moveset - scene.getPlayerParty()[0].moveset = [new PokemonMove(Moves.KNOCK_OFF)]; + scene.getPlayerParty()[0].moveset = [new PokemonMove(MoveId.KNOCK_OFF)]; const item = game.scene.currentBattle.mysteryEncounter!.misc; await runMysteryEncounterToEnd(game, 2); diff --git a/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts b/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts index f8375c1aa78..fcc2eda28f7 100644 --- a/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts +++ b/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts @@ -1,8 +1,8 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; import { HUMAN_TRANSITABLE_BIOMES } from "#app/data/mystery-encounters/mystery-encounters"; -import { Biome } from "#app/enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; -import { Species } from "#app/enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { @@ -21,13 +21,13 @@ import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import { CommandPhase } from "#app/phases/command-phase"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import { FunAndGamesEncounter } from "#app/data/mystery-encounters/encounters/fun-and-games-encounter"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { Command } from "#app/ui/command-ui-handler"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; const namespace = "mysteryEncounters/funAndGames"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; -const defaultBiome = Biome.CAVE; +const defaultParty = [SpeciesId.LAPRAS, SpeciesId.GENGAR, SpeciesId.ABRA]; +const defaultBiome = BiomeId.CAVE; const defaultWave = 45; describe("Fun And Games! - Mystery Encounter", () => { @@ -47,7 +47,9 @@ describe("Fun And Games! - Mystery Encounter", () => { game.override.startingBiome(defaultBiome); game.override.disableTrainerWaves(); - const biomeMap = new Map([[Biome.VOLCANO, [MysteryEncounterType.FIGHT_OR_FLIGHT]]]); + const biomeMap = new Map([ + [BiomeId.VOLCANO, [MysteryEncounterType.FIGHT_OR_FLIGHT]], + ]); HUMAN_TRANSITABLE_BIOMES.forEach(biome => { biomeMap.set(biome, [MysteryEncounterType.FUN_AND_GAMES]); }); @@ -80,7 +82,7 @@ describe("Fun And Games! - Mystery Encounter", () => { it("should not spawn outside of CIVILIZATIONN biomes", async () => { game.override.mysteryEncounterTier(MysteryEncounterTier.GREAT); - game.override.startingBiome(Biome.VOLCANO); + game.override.startingBiome(BiomeId.VOLCANO); await game.runToMysteryEncounter(); expect(scene.currentBattle?.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.FUN_AND_GAMES); @@ -138,12 +140,12 @@ describe("Fun And Games! - Mystery Encounter", () => { it("should get 3 turns to attack the Wobbuffet for a reward", async () => { scene.money = 20000; - game.override.moveset([Moves.TACKLE]); + game.override.moveset([MoveId.TACKLE]); await game.runToMysteryEncounter(MysteryEncounterType.FUN_AND_GAMES, defaultParty); await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1 }, true); expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); - expect(scene.getEnemyPokemon()?.species.speciesId).toBe(Species.WOBBUFFET); + expect(scene.getEnemyPokemon()?.species.speciesId).toBe(SpeciesId.WOBBUFFET); expect(scene.getEnemyPokemon()?.ivs).toEqual([0, 0, 0, 0, 0, 0]); expect(scene.getEnemyPokemon()?.nature).toBe(Nature.MILD); @@ -195,7 +197,7 @@ describe("Fun And Games! - Mystery Encounter", () => { it("should have Wide Lens item in rewards if Wubboffet is at 15-33% HP remaining", async () => { scene.money = 20000; - game.override.moveset([Moves.SPLASH]); + game.override.moveset([MoveId.SPLASH]); await game.runToMysteryEncounter(MysteryEncounterType.FUN_AND_GAMES, defaultParty); await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1 }, true); @@ -225,7 +227,7 @@ describe("Fun And Games! - Mystery Encounter", () => { it("should have Scope Lens item in rewards if Wubboffet is at 3-15% HP remaining", async () => { scene.money = 20000; - game.override.moveset([Moves.SPLASH]); + game.override.moveset([MoveId.SPLASH]); await game.runToMysteryEncounter(MysteryEncounterType.FUN_AND_GAMES, defaultParty); await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1 }, true); @@ -255,7 +257,7 @@ describe("Fun And Games! - Mystery Encounter", () => { it("should have Multi Lens item in rewards if Wubboffet is at <3% HP remaining", async () => { scene.money = 20000; - game.override.moveset([Moves.SPLASH]); + game.override.moveset([MoveId.SPLASH]); await game.runToMysteryEncounter(MysteryEncounterType.FUN_AND_GAMES, defaultParty); await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1 }, true); diff --git a/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts b/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts index 576e99c4e18..73bf3cc4eba 100644 --- a/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts +++ b/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts @@ -1,6 +1,6 @@ -import { Biome } from "#app/enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; -import { Species } from "#app/enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; @@ -21,8 +21,8 @@ import { ModifierTier } from "#app/modifier/modifier-tier"; import * as Utils from "#app/utils/common"; const namespace = "mysteryEncounters/globalTradeSystem"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; -const defaultBiome = Biome.CAVE; +const defaultParty = [SpeciesId.LAPRAS, SpeciesId.GENGAR, SpeciesId.ABRA]; +const defaultBiome = BiomeId.CAVE; const defaultWave = 45; describe("Global Trade System - Mystery Encounter", () => { @@ -42,8 +42,8 @@ describe("Global Trade System - Mystery Encounter", () => { game.override.startingBiome(defaultBiome); game.override.disableTrainerWaves(); - const biomeMap = new Map([ - [Biome.VOLCANO, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], + const biomeMap = new Map([ + [BiomeId.VOLCANO, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], ]); CIVILIZATION_ENCOUNTER_BIOMES.forEach(biome => { biomeMap.set(biome, [MysteryEncounterType.GLOBAL_TRADE_SYSTEM]); @@ -71,7 +71,7 @@ describe("Global Trade System - Mystery Encounter", () => { }); it("should not loop infinitely when generating trade options for extreme BST non-legendaries", async () => { - const extremeBstTeam = [Species.SLAKING, Species.WISHIWASHI, Species.SUNKERN]; + const extremeBstTeam = [SpeciesId.SLAKING, SpeciesId.WISHIWASHI, SpeciesId.SUNKERN]; await game.runToMysteryEncounter(MysteryEncounterType.GLOBAL_TRADE_SYSTEM, extremeBstTeam); expect(GlobalTradeSystemEncounter.encounterType).toBe(MysteryEncounterType.GLOBAL_TRADE_SYSTEM); @@ -86,7 +86,7 @@ describe("Global Trade System - Mystery Encounter", () => { it("should not spawn outside of CIVILIZATION_ENCOUNTER_BIOMES", async () => { game.override.mysteryEncounterTier(MysteryEncounterTier.COMMON); - game.override.startingBiome(Biome.VOLCANO); + game.override.startingBiome(BiomeId.VOLCANO); await game.runToMysteryEncounter(); expect(scene.currentBattle?.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.GLOBAL_TRADE_SYSTEM); diff --git a/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts b/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts index f23bc8738f2..10b96d84667 100644 --- a/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts +++ b/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts @@ -2,9 +2,9 @@ import { LostAtSeaEncounter } from "#app/data/mystery-encounters/encounters/lost import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { getPokemonSpecies } from "#app/data/pokemon-species"; -import { Biome } from "#app/enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; -import { Species } from "#app/enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { runMysteryEncounterToEnd, runSelectMysteryEncounterOption } from "../encounter-test-utils"; @@ -18,8 +18,8 @@ import i18next from "i18next"; const namespace = "mysteryEncounters/lostAtSea"; /** Blastoise for surf. Pidgeot for fly. Abra for none. */ -const defaultParty = [Species.BLASTOISE, Species.PIDGEOT, Species.ABRA]; -const defaultBiome = Biome.SEA; +const defaultParty = [SpeciesId.BLASTOISE, SpeciesId.PIDGEOT, SpeciesId.ABRA]; +const defaultBiome = BiomeId.SEA; const defaultWave = 33; describe("Lost at Sea - Mystery Encounter", () => { @@ -40,9 +40,9 @@ describe("Lost at Sea - Mystery Encounter", () => { game.override.disableTrainerWaves(); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( - new Map([ - [Biome.SEA, [MysteryEncounterType.LOST_AT_SEA]], - [Biome.MOUNTAIN, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], + new Map([ + [BiomeId.SEA, [MysteryEncounterType.LOST_AT_SEA]], + [BiomeId.MOUNTAIN, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], ]), ); }); @@ -68,7 +68,7 @@ describe("Lost at Sea - Mystery Encounter", () => { it("should not spawn outside of sea biome", async () => { game.override.mysteryEncounterTier(MysteryEncounterTier.COMMON); - game.override.startingBiome(Biome.MOUNTAIN); + game.override.startingBiome(BiomeId.MOUNTAIN); await game.runToMysteryEncounter(); expect(game.scene.currentBattle.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.LOST_AT_SEA); @@ -110,11 +110,11 @@ describe("Lost at Sea - Mystery Encounter", () => { }); it("should award exp to surfable PKM (Blastoise)", async () => { - const laprasSpecies = getPokemonSpecies(Species.LAPRAS); + const laprasSpecies = getPokemonSpecies(SpeciesId.LAPRAS); await game.runToMysteryEncounter(MysteryEncounterType.LOST_AT_SEA, defaultParty); const party = game.scene.getPlayerParty(); - const blastoise = party.find(pkm => pkm.species.speciesId === Species.BLASTOISE); + const blastoise = party.find(pkm => pkm.species.speciesId === SpeciesId.BLASTOISE); const expBefore = blastoise!.exp; await runMysteryEncounterToEnd(game, 1); @@ -134,7 +134,7 @@ describe("Lost at Sea - Mystery Encounter", () => { }); it("should be disabled if no surfable PKM is in party", async () => { - await game.runToMysteryEncounter(MysteryEncounterType.LOST_AT_SEA, [Species.ARCANINE]); + await game.runToMysteryEncounter(MysteryEncounterType.LOST_AT_SEA, [SpeciesId.ARCANINE]); await game.phaseInterceptor.to(MysteryEncounterPhase, false); const encounterPhase = scene.getCurrentPhase(); @@ -179,7 +179,7 @@ describe("Lost at Sea - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.LOST_AT_SEA, defaultParty); const party = game.scene.getPlayerParty(); - const pidgeot = party.find(pkm => pkm.species.speciesId === Species.PIDGEOT); + const pidgeot = party.find(pkm => pkm.species.speciesId === SpeciesId.PIDGEOT); const expBefore = pidgeot!.exp; await runMysteryEncounterToEnd(game, 2); @@ -199,7 +199,7 @@ describe("Lost at Sea - Mystery Encounter", () => { }); it("should be disabled if no flyable PKM is in party", async () => { - await game.runToMysteryEncounter(MysteryEncounterType.LOST_AT_SEA, [Species.ARCANINE]); + await game.runToMysteryEncounter(MysteryEncounterType.LOST_AT_SEA, [SpeciesId.ARCANINE]); await game.phaseInterceptor.to(MysteryEncounterPhase, false); const encounterPhase = scene.getCurrentPhase(); @@ -241,7 +241,7 @@ describe("Lost at Sea - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.LOST_AT_SEA, defaultParty); const party = game.scene.getPlayerParty(); - const abra = party.find(pkm => pkm.species.speciesId === Species.ABRA)!; + const abra = party.find(pkm => pkm.species.speciesId === SpeciesId.ABRA)!; vi.spyOn(abra, "isAllowedInBattle").mockReturnValue(false); await runMysteryEncounterToEnd(game, 3); diff --git a/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts b/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts index 2c61d03b29d..b93fbeb2673 100644 --- a/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts +++ b/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts @@ -1,8 +1,8 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; import { HUMAN_TRANSITABLE_BIOMES } from "#app/data/mystery-encounters/mystery-encounters"; -import { Biome } from "#app/enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; -import { Species } from "#app/enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { @@ -27,8 +27,8 @@ import { CommandPhase } from "#app/phases/command-phase"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; const namespace = "mysteryEncounters/mysteriousChallengers"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; -const defaultBiome = Biome.CAVE; +const defaultParty = [SpeciesId.LAPRAS, SpeciesId.GENGAR, SpeciesId.ABRA]; +const defaultBiome = BiomeId.CAVE; const defaultWave = 45; describe("Mysterious Challengers - Mystery Encounter", () => { @@ -48,7 +48,9 @@ describe("Mysterious Challengers - Mystery Encounter", () => { game.override.startingBiome(defaultBiome); game.override.disableTrainerWaves(); - const biomeMap = new Map([[Biome.VOLCANO, [MysteryEncounterType.FIGHT_OR_FLIGHT]]]); + const biomeMap = new Map([ + [BiomeId.VOLCANO, [MysteryEncounterType.FIGHT_OR_FLIGHT]], + ]); HUMAN_TRANSITABLE_BIOMES.forEach(biome => { biomeMap.set(biome, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]); }); @@ -78,7 +80,7 @@ describe("Mysterious Challengers - Mystery Encounter", () => { it("should not spawn outside of HUMAN_TRANSITABLE_BIOMES", async () => { game.override.mysteryEncounterTier(MysteryEncounterTier.GREAT); - game.override.startingBiome(Biome.VOLCANO); + game.override.startingBiome(BiomeId.VOLCANO); await game.runToMysteryEncounter(); expect(scene.currentBattle?.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.MYSTERIOUS_CHALLENGERS); diff --git a/test/mystery-encounter/encounters/part-timer-encounter.test.ts b/test/mystery-encounter/encounters/part-timer-encounter.test.ts index 639a2e140ff..1b9d24b5ce6 100644 --- a/test/mystery-encounter/encounters/part-timer-encounter.test.ts +++ b/test/mystery-encounter/encounters/part-timer-encounter.test.ts @@ -1,7 +1,7 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; -import { Biome } from "#app/enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; -import { Species } from "#app/enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; @@ -15,13 +15,13 @@ import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { PartTimerEncounter } from "#app/data/mystery-encounters/encounters/part-timer-encounter"; import { PokemonMove } from "#app/field/pokemon"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; const namespace = "mysteryEncounters/partTimer"; // Pyukumuku for lowest speed, Regieleki for highest speed, Feebas for lowest "bulk", Melmetal for highest "bulk" -const defaultParty = [Species.PYUKUMUKU, Species.REGIELEKI, Species.FEEBAS, Species.MELMETAL]; -const defaultBiome = Biome.PLAINS; +const defaultParty = [SpeciesId.PYUKUMUKU, SpeciesId.REGIELEKI, SpeciesId.FEEBAS, SpeciesId.MELMETAL]; +const defaultBiome = BiomeId.PLAINS; const defaultWave = 37; describe("Part-Timer - Mystery Encounter", () => { @@ -41,8 +41,8 @@ describe("Part-Timer - Mystery Encounter", () => { game.override.startingBiome(defaultBiome); game.override.disableTrainerWaves(); - const biomeMap = new Map([ - [Biome.VOLCANO, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], + const biomeMap = new Map([ + [BiomeId.VOLCANO, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], ]); CIVILIZATION_ENCOUNTER_BIOMES.forEach(biome => { biomeMap.set(biome, [MysteryEncounterType.PART_TIMER]); @@ -77,7 +77,7 @@ describe("Part-Timer - Mystery Encounter", () => { it("should not spawn outside of CIVILIZATION_ENCOUNTER_BIOMES", async () => { game.override.mysteryEncounterTier(MysteryEncounterTier.COMMON); - game.override.startingBiome(Biome.VOLCANO); + game.override.startingBiome(BiomeId.VOLCANO); await game.runToMysteryEncounter(); expect(scene.currentBattle?.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.PART_TIMER); @@ -259,7 +259,7 @@ describe("Part-Timer - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.PART_TIMER, defaultParty); // Mock moveset - scene.getPlayerParty()[0].moveset = [new PokemonMove(Moves.ATTRACT)]; + scene.getPlayerParty()[0].moveset = [new PokemonMove(MoveId.ATTRACT)]; await runMysteryEncounterToEnd(game, 3); expect(EncounterPhaseUtils.updatePlayerMoney).toHaveBeenCalledWith(scene.getWaveMoneyAmount(2.5), true, false); diff --git a/test/mystery-encounter/encounters/safari-zone.test.ts b/test/mystery-encounter/encounters/safari-zone.test.ts index 3506020aae4..c6bde3a7e7a 100644 --- a/test/mystery-encounter/encounters/safari-zone.test.ts +++ b/test/mystery-encounter/encounters/safari-zone.test.ts @@ -1,7 +1,7 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; -import { Biome } from "#enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { @@ -22,8 +22,8 @@ import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encount import { NON_LEGEND_PARADOX_POKEMON } from "#app/data/balance/special-species-groups"; const namespace = "mysteryEncounters/safariZone"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; -const defaultBiome = Biome.SWAMP; +const defaultParty = [SpeciesId.LAPRAS, SpeciesId.GENGAR, SpeciesId.ABRA]; +const defaultBiome = BiomeId.SWAMP; const defaultWave = 45; describe("Safari Zone - Mystery Encounter", () => { @@ -43,11 +43,11 @@ describe("Safari Zone - Mystery Encounter", () => { game.override.startingBiome(defaultBiome); game.override.disableTrainerWaves(); - const biomeMap = new Map([ - [Biome.VOLCANO, [MysteryEncounterType.FIGHT_OR_FLIGHT]], - [Biome.FOREST, [MysteryEncounterType.SAFARI_ZONE]], - [Biome.SWAMP, [MysteryEncounterType.SAFARI_ZONE]], - [Biome.JUNGLE, [MysteryEncounterType.SAFARI_ZONE]], + const biomeMap = new Map([ + [BiomeId.VOLCANO, [MysteryEncounterType.FIGHT_OR_FLIGHT]], + [BiomeId.FOREST, [MysteryEncounterType.SAFARI_ZONE]], + [BiomeId.SWAMP, [MysteryEncounterType.SAFARI_ZONE]], + [BiomeId.JUNGLE, [MysteryEncounterType.SAFARI_ZONE]], ]); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue(biomeMap); }); @@ -73,7 +73,7 @@ describe("Safari Zone - Mystery Encounter", () => { it("should not spawn outside of the forest, swamp, or jungle biomes", async () => { game.override.mysteryEncounterTier(MysteryEncounterTier.GREAT); - game.override.startingBiome(Biome.VOLCANO); + game.override.startingBiome(BiomeId.VOLCANO); await game.runToMysteryEncounter(); expect(scene.currentBattle?.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.SAFARI_ZONE); diff --git a/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts b/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts index 4ff94c5a9bd..039b1dacf31 100644 --- a/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts +++ b/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts @@ -1,10 +1,10 @@ import type BattleScene from "#app/battle-scene"; import { TeleportingHijinksEncounter } from "#app/data/mystery-encounters/encounters/teleporting-hijinks-encounter"; import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; -import { Abilities } from "#enums/abilities"; -import { Biome } from "#enums/biome"; +import { AbilityId } from "#enums/ability-id"; +import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { CommandPhase } from "#app/phases/command-phase"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; @@ -23,11 +23,18 @@ import i18next from "i18next"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; const namespace = "mysteryEncounters/teleportingHijinks"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; -const defaultBiome = Biome.CAVE; +const defaultParty = [SpeciesId.LAPRAS, SpeciesId.GENGAR, SpeciesId.ABRA]; +const defaultBiome = BiomeId.CAVE; const defaultWave = 45; -const TRANSPORT_BIOMES = [Biome.SPACE, Biome.ISLAND, Biome.LABORATORY, Biome.FAIRY_CAVE, Biome.WASTELAND, Biome.DOJO]; +const TRANSPORT_BIOMES = [ + BiomeId.SPACE, + BiomeId.ISLAND, + BiomeId.LABORATORY, + BiomeId.FAIRY_CAVE, + BiomeId.WASTELAND, + BiomeId.DOJO, +]; describe("Teleporting Hijinks - Mystery Encounter", () => { let phaserGame: Phaser.Game; @@ -47,11 +54,11 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { .startingWave(defaultWave) .startingBiome(defaultBiome) .disableTrainerWaves() - .enemyAbility(Abilities.BALL_FETCH) - .enemyPassiveAbility(Abilities.BALL_FETCH); + .enemyAbility(AbilityId.BALL_FETCH) + .enemyPassiveAbility(AbilityId.BALL_FETCH); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( - new Map([[Biome.CAVE, [MysteryEncounterType.TELEPORTING_HIJINKS]]]), + new Map([[BiomeId.CAVE, [MysteryEncounterType.TELEPORTING_HIJINKS]]]), ); }); @@ -215,7 +222,7 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { }); it("should NOT be selectable if the player doesn't the right type pokemon", async () => { - await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, [Species.BLASTOISE]); + await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, [SpeciesId.BLASTOISE]); await game.phaseInterceptor.to(MysteryEncounterPhase, false); const encounterPhase = scene.getCurrentPhase(); @@ -234,14 +241,14 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { }); it("should be selectable if the player has the right type pokemon", async () => { - await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, [Species.METAGROSS]); + await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, [SpeciesId.METAGROSS]); await runMysteryEncounterToEnd(game, 2, undefined, true); expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); }); it("should transport to a new area", async () => { - await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, [Species.PIKACHU]); + await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, [SpeciesId.PIKACHU]); const previousBiome = scene.arena.biomeType; @@ -252,7 +259,7 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { }); it("should start a battle against an enraged boss below wave 50", async () => { - await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, [Species.PIKACHU]); + await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, [SpeciesId.PIKACHU]); await runMysteryEncounterToEnd(game, 2, undefined, true); const enemyField = scene.getEnemyField(); expect(enemyField[0].summonData.statStages).toEqual([0, 1, 0, 1, 1, 0, 0]); @@ -261,7 +268,7 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { it("should start a battle against an extra enraged boss above wave 50", { retry: 5 }, async () => { game.override.startingWave(56); - await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, [Species.PIKACHU]); + await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, [SpeciesId.PIKACHU]); await runMysteryEncounterToEnd(game, 2, undefined, true); const enemyField = scene.getEnemyField(); expect(enemyField[0].summonData.statStages).toEqual([1, 1, 1, 1, 1, 0, 0]); diff --git a/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts b/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts index 9160126ffc3..14c9287f5f3 100644 --- a/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts @@ -1,8 +1,8 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; import { HUMAN_TRANSITABLE_BIOMES } from "#app/data/mystery-encounters/mystery-encounters"; -import { Biome } from "#app/enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; -import { Species } from "#app/enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { @@ -24,8 +24,8 @@ import { PostMysteryEncounterPhase } from "#app/phases/mystery-encounter-phases" import { FRIENDSHIP_GAIN_FROM_BATTLE } from "#app/data/balance/starters"; const namespace = "mysteryEncounters/theExpertPokemonBreeder"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; -const defaultBiome = Biome.CAVE; +const defaultParty = [SpeciesId.LAPRAS, SpeciesId.GENGAR, SpeciesId.ABRA]; +const defaultBiome = BiomeId.CAVE; const defaultWave = 45; describe("The Expert Pokémon Breeder - Mystery Encounter", () => { @@ -45,7 +45,9 @@ describe("The Expert Pokémon Breeder - Mystery Encounter", () => { game.override.startingBiome(defaultBiome); game.override.disableTrainerWaves(); - const biomeMap = new Map([[Biome.VOLCANO, [MysteryEncounterType.FIGHT_OR_FLIGHT]]]); + const biomeMap = new Map([ + [BiomeId.VOLCANO, [MysteryEncounterType.FIGHT_OR_FLIGHT]], + ]); HUMAN_TRANSITABLE_BIOMES.forEach(biome => { biomeMap.set(biome, [MysteryEncounterType.THE_EXPERT_POKEMON_BREEDER]); }); @@ -83,7 +85,7 @@ describe("The Expert Pokémon Breeder - Mystery Encounter", () => { it("should not spawn outside of HUMAN_TRANSITABLE_BIOMES", async () => { game.override.mysteryEncounterTier(MysteryEncounterTier.GREAT); - game.override.startingBiome(Biome.VOLCANO); + game.override.startingBiome(BiomeId.VOLCANO); await game.runToMysteryEncounter(); expect(scene.currentBattle?.mysteryEncounter?.encounterType).not.toBe( diff --git a/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts b/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts index 4adb8c6b076..15fc3ffb00b 100644 --- a/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts @@ -1,7 +1,7 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; -import { Biome } from "#app/enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; -import { Species } from "#app/enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; @@ -23,8 +23,8 @@ import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import { NON_LEGEND_PARADOX_POKEMON } from "#app/data/balance/special-species-groups"; const namespace = "mysteryEncounters/thePokemonSalesman"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; -const defaultBiome = Biome.CAVE; +const defaultParty = [SpeciesId.LAPRAS, SpeciesId.GENGAR, SpeciesId.ABRA]; +const defaultBiome = BiomeId.CAVE; const defaultWave = 45; describe("The Pokemon Salesman - Mystery Encounter", () => { @@ -44,8 +44,8 @@ describe("The Pokemon Salesman - Mystery Encounter", () => { game.override.startingBiome(defaultBiome); game.override.disableTrainerWaves(); - const biomeMap = new Map([ - [Biome.VOLCANO, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], + const biomeMap = new Map([ + [BiomeId.VOLCANO, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], ]); HUMAN_TRANSITABLE_BIOMES.forEach(biome => { biomeMap.set(biome, [MysteryEncounterType.THE_POKEMON_SALESMAN]); @@ -80,7 +80,7 @@ describe("The Pokemon Salesman - Mystery Encounter", () => { it("should not spawn outside of HUMAN_TRANSITABLE_BIOMES", async () => { game.override.mysteryEncounterTier(MysteryEncounterTier.ULTRA); - game.override.startingBiome(Biome.VOLCANO); + game.override.startingBiome(BiomeId.VOLCANO); await game.runToMysteryEncounter(); expect(scene.currentBattle?.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.THE_POKEMON_SALESMAN); diff --git a/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts b/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts index e3440aee9e0..2187bad5775 100644 --- a/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts @@ -1,7 +1,7 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; -import { Biome } from "#enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { getPokemonSpecies } from "#app/data/pokemon-species"; @@ -11,7 +11,7 @@ import { runMysteryEncounterToEnd, skipBattleRunMysteryEncounterRewardsPhase, } from "#test/mystery-encounter/encounter-test-utils"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import type BattleScene from "#app/battle-scene"; import { TheStrongStuffEncounter } from "#app/data/mystery-encounters/encounters/the-strong-stuff-encounter"; import { Nature } from "#enums/nature"; @@ -28,11 +28,11 @@ import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import { CommandPhase } from "#app/phases/command-phase"; import { MovePhase } from "#app/phases/move-phase"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; const namespace = "mysteryEncounters/theStrongStuff"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; -const defaultBiome = Biome.CAVE; +const defaultParty = [SpeciesId.LAPRAS, SpeciesId.GENGAR, SpeciesId.ABRA]; +const defaultBiome = BiomeId.CAVE; const defaultWave = 45; describe("The Strong Stuff - Mystery Encounter", () => { @@ -52,13 +52,13 @@ describe("The Strong Stuff - Mystery Encounter", () => { .startingWave(defaultWave) .startingBiome(defaultBiome) .disableTrainerWaves() - .enemyAbility(Abilities.BALL_FETCH) - .enemyPassiveAbility(Abilities.BALL_FETCH); + .enemyAbility(AbilityId.BALL_FETCH) + .enemyPassiveAbility(AbilityId.BALL_FETCH); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( - new Map([ - [Biome.CAVE, [MysteryEncounterType.THE_STRONG_STUFF]], - [Biome.MOUNTAIN, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], + new Map([ + [BiomeId.CAVE, [MysteryEncounterType.THE_STRONG_STUFF]], + [BiomeId.MOUNTAIN, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], ]), ); }); @@ -84,7 +84,7 @@ describe("The Strong Stuff - Mystery Encounter", () => { it("should not spawn outside of CAVE biome", async () => { game.override.mysteryEncounterTier(MysteryEncounterTier.COMMON); - game.override.startingBiome(Biome.MOUNTAIN); + game.override.startingBiome(BiomeId.MOUNTAIN); await game.runToMysteryEncounter(); expect(scene.currentBattle?.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.THE_STRONG_STUFF); @@ -109,13 +109,13 @@ describe("The Strong Stuff - Mystery Encounter", () => { disableSwitch: true, pokemonConfigs: [ { - species: getPokemonSpecies(Species.SHUCKLE), + species: getPokemonSpecies(SpeciesId.SHUCKLE), isBoss: true, bossSegments: 5, shiny: false, customPokemonData: new CustomPokemonData({ spriteScale: 1.25 }), nature: Nature.HARDY, - moveSet: [Moves.INFESTATION, Moves.SALT_CURE, Moves.GASTRO_ACID, Moves.HEAL_ORDER], + moveSet: [MoveId.INFESTATION, MoveId.SALT_CURE, MoveId.GASTRO_ACID, MoveId.HEAL_ORDER], modifierConfigs: expect.any(Array), tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], mysteryEncounterBattleEffects: expect.any(Function), @@ -197,7 +197,7 @@ describe("The Strong Stuff - Mystery Encounter", () => { const enemyField = scene.getEnemyField(); expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyField.length).toBe(1); - expect(enemyField[0].species.speciesId).toBe(Species.SHUCKLE); + expect(enemyField[0].species.speciesId).toBe(SpeciesId.SHUCKLE); expect(enemyField[0].summonData.statStages).toEqual([0, 1, 0, 1, 0, 0, 0]); const shuckleItems = enemyField[0].getHeldItems(); expect(shuckleItems.length).toBe(5); @@ -215,17 +215,17 @@ describe("The Strong Stuff - Mystery Encounter", () => { ); expect(shuckleItems.find(m => m instanceof BerryModifier && m.berryType === BerryType.LUM)?.stackCount).toBe(2); expect(enemyField[0].moveset).toEqual([ - new PokemonMove(Moves.INFESTATION), - new PokemonMove(Moves.SALT_CURE), - new PokemonMove(Moves.GASTRO_ACID), - new PokemonMove(Moves.HEAL_ORDER), + new PokemonMove(MoveId.INFESTATION), + new PokemonMove(MoveId.SALT_CURE), + new PokemonMove(MoveId.GASTRO_ACID), + new PokemonMove(MoveId.HEAL_ORDER), ]); // Should have used moves pre-battle const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof MovePhase).map(p => p[0]); expect(movePhases.length).toBe(2); - expect(movePhases.filter(p => (p as MovePhase).move.moveId === Moves.GASTRO_ACID).length).toBe(1); - expect(movePhases.filter(p => (p as MovePhase).move.moveId === Moves.STEALTH_ROCK).length).toBe(1); + expect(movePhases.filter(p => (p as MovePhase).move.moveId === MoveId.GASTRO_ACID).length).toBe(1); + expect(movePhases.filter(p => (p as MovePhase).move.moveId === MoveId.STEALTH_ROCK).length).toBe(1); }); it("should have Soul Dew in rewards", async () => { diff --git a/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts b/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts index 4cb712ce779..57b6e881683 100644 --- a/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts @@ -1,8 +1,8 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; import { HUMAN_TRANSITABLE_BIOMES } from "#app/data/mystery-encounters/mystery-encounters"; -import { Biome } from "#enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { runMysteryEncounterToEnd } from "#test/mystery-encounter/encounter-test-utils"; @@ -16,7 +16,7 @@ import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { TrainerType } from "#enums/trainer-type"; import { Nature } from "#enums/nature"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { TheWinstrateChallengeEncounter } from "#app/data/mystery-encounters/encounters/the-winstrate-challenge-encounter"; import { Status } from "#app/data/status-effect"; @@ -28,8 +28,8 @@ import { VictoryPhase } from "#app/phases/victory-phase"; import { StatusEffect } from "#enums/status-effect"; const namespace = "mysteryEncounters/theWinstrateChallenge"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; -const defaultBiome = Biome.CAVE; +const defaultParty = [SpeciesId.LAPRAS, SpeciesId.GENGAR, SpeciesId.ABRA]; +const defaultBiome = BiomeId.CAVE; const defaultWave = 45; describe("The Winstrate Challenge - Mystery Encounter", () => { @@ -49,7 +49,9 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { game.override.startingBiome(defaultBiome); game.override.disableTrainerWaves(); - const biomeMap = new Map([[Biome.VOLCANO, [MysteryEncounterType.FIGHT_OR_FLIGHT]]]); + const biomeMap = new Map([ + [BiomeId.VOLCANO, [MysteryEncounterType.FIGHT_OR_FLIGHT]], + ]); HUMAN_TRANSITABLE_BIOMES.forEach(biome => { biomeMap.set(biome, [MysteryEncounterType.THE_WINSTRATE_CHALLENGE]); }); @@ -85,7 +87,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { it("should not spawn outside of HUMAN_TRANSITABLE_BIOMES", async () => { game.override.mysteryEncounterTier(MysteryEncounterTier.GREAT); - game.override.startingBiome(Biome.VOLCANO); + game.override.startingBiome(BiomeId.VOLCANO); await game.runToMysteryEncounter(); expect(scene.currentBattle?.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.THE_WINSTRATE_CHALLENGE); @@ -111,43 +113,43 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { trainerType: TrainerType.VITO, pokemonConfigs: [ { - species: getPokemonSpecies(Species.HISUI_ELECTRODE), + species: getPokemonSpecies(SpeciesId.HISUI_ELECTRODE), isBoss: false, abilityIndex: 0, // Soundproof nature: Nature.MODEST, - moveSet: [Moves.THUNDERBOLT, Moves.GIGA_DRAIN, Moves.FOUL_PLAY, Moves.THUNDER_WAVE], + moveSet: [MoveId.THUNDERBOLT, MoveId.GIGA_DRAIN, MoveId.FOUL_PLAY, MoveId.THUNDER_WAVE], modifierConfigs: expect.any(Array), }, { - species: getPokemonSpecies(Species.SWALOT), + species: getPokemonSpecies(SpeciesId.SWALOT), isBoss: false, abilityIndex: 2, // Gluttony nature: Nature.QUIET, - moveSet: [Moves.SLUDGE_BOMB, Moves.GIGA_DRAIN, Moves.ICE_BEAM, Moves.EARTHQUAKE], + moveSet: [MoveId.SLUDGE_BOMB, MoveId.GIGA_DRAIN, MoveId.ICE_BEAM, MoveId.EARTHQUAKE], modifierConfigs: expect.any(Array), }, { - species: getPokemonSpecies(Species.DODRIO), + species: getPokemonSpecies(SpeciesId.DODRIO), isBoss: false, abilityIndex: 2, // Tangled Feet nature: Nature.JOLLY, - moveSet: [Moves.DRILL_PECK, Moves.QUICK_ATTACK, Moves.THRASH, Moves.KNOCK_OFF], + moveSet: [MoveId.DRILL_PECK, MoveId.QUICK_ATTACK, MoveId.THRASH, MoveId.KNOCK_OFF], modifierConfigs: expect.any(Array), }, { - species: getPokemonSpecies(Species.ALAKAZAM), + species: getPokemonSpecies(SpeciesId.ALAKAZAM), isBoss: false, formIndex: 1, nature: Nature.BOLD, - moveSet: [Moves.PSYCHIC, Moves.SHADOW_BALL, Moves.FOCUS_BLAST, Moves.THUNDERBOLT], + moveSet: [MoveId.PSYCHIC, MoveId.SHADOW_BALL, MoveId.FOCUS_BLAST, MoveId.THUNDERBOLT], modifierConfigs: expect.any(Array), }, { - species: getPokemonSpecies(Species.DARMANITAN), + species: getPokemonSpecies(SpeciesId.DARMANITAN), isBoss: false, abilityIndex: 0, // Sheer Force nature: Nature.IMPISH, - moveSet: [Moves.EARTHQUAKE, Moves.U_TURN, Moves.FLARE_BLITZ, Moves.ROCK_SLIDE], + moveSet: [MoveId.EARTHQUAKE, MoveId.U_TURN, MoveId.FLARE_BLITZ, MoveId.ROCK_SLIDE], modifierConfigs: expect.any(Array), }, ], @@ -156,11 +158,11 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { trainerType: TrainerType.VICKY, pokemonConfigs: [ { - species: getPokemonSpecies(Species.MEDICHAM), + species: getPokemonSpecies(SpeciesId.MEDICHAM), isBoss: false, formIndex: 1, nature: Nature.IMPISH, - moveSet: [Moves.AXE_KICK, Moves.ICE_PUNCH, Moves.ZEN_HEADBUTT, Moves.BULLET_PUNCH], + moveSet: [MoveId.AXE_KICK, MoveId.ICE_PUNCH, MoveId.ZEN_HEADBUTT, MoveId.BULLET_PUNCH], modifierConfigs: expect.any(Array), }, ], @@ -169,27 +171,27 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { trainerType: TrainerType.VIVI, pokemonConfigs: [ { - species: getPokemonSpecies(Species.SEAKING), + species: getPokemonSpecies(SpeciesId.SEAKING), isBoss: false, abilityIndex: 3, // Lightning Rod nature: Nature.ADAMANT, - moveSet: [Moves.WATERFALL, Moves.MEGAHORN, Moves.KNOCK_OFF, Moves.REST], + moveSet: [MoveId.WATERFALL, MoveId.MEGAHORN, MoveId.KNOCK_OFF, MoveId.REST], modifierConfigs: expect.any(Array), }, { - species: getPokemonSpecies(Species.BRELOOM), + species: getPokemonSpecies(SpeciesId.BRELOOM), isBoss: false, abilityIndex: 1, // Poison Heal nature: Nature.JOLLY, - moveSet: [Moves.SPORE, Moves.SWORDS_DANCE, Moves.SEED_BOMB, Moves.DRAIN_PUNCH], + moveSet: [MoveId.SPORE, MoveId.SWORDS_DANCE, MoveId.SEED_BOMB, MoveId.DRAIN_PUNCH], modifierConfigs: expect.any(Array), }, { - species: getPokemonSpecies(Species.CAMERUPT), + species: getPokemonSpecies(SpeciesId.CAMERUPT), isBoss: false, formIndex: 1, nature: Nature.CALM, - moveSet: [Moves.EARTH_POWER, Moves.FIRE_BLAST, Moves.YAWN, Moves.PROTECT], + moveSet: [MoveId.EARTH_POWER, MoveId.FIRE_BLAST, MoveId.YAWN, MoveId.PROTECT], modifierConfigs: expect.any(Array), }, ], @@ -198,19 +200,19 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { trainerType: TrainerType.VICTORIA, pokemonConfigs: [ { - species: getPokemonSpecies(Species.ROSERADE), + species: getPokemonSpecies(SpeciesId.ROSERADE), isBoss: false, abilityIndex: 0, // Natural Cure nature: Nature.CALM, - moveSet: [Moves.SYNTHESIS, Moves.SLUDGE_BOMB, Moves.GIGA_DRAIN, Moves.SLEEP_POWDER], + moveSet: [MoveId.SYNTHESIS, MoveId.SLUDGE_BOMB, MoveId.GIGA_DRAIN, MoveId.SLEEP_POWDER], modifierConfigs: expect.any(Array), }, { - species: getPokemonSpecies(Species.GARDEVOIR), + species: getPokemonSpecies(SpeciesId.GARDEVOIR), isBoss: false, formIndex: 1, nature: Nature.TIMID, - moveSet: [Moves.PSYSHOCK, Moves.MOONBLAST, Moves.SHADOW_BALL, Moves.WILL_O_WISP], + moveSet: [MoveId.PSYSHOCK, MoveId.MOONBLAST, MoveId.SHADOW_BALL, MoveId.WILL_O_WISP], modifierConfigs: expect.any(Array), }, ], @@ -219,19 +221,19 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { trainerType: TrainerType.VICTOR, pokemonConfigs: [ { - species: getPokemonSpecies(Species.SWELLOW), + species: getPokemonSpecies(SpeciesId.SWELLOW), isBoss: false, abilityIndex: 0, // Guts nature: Nature.ADAMANT, - moveSet: [Moves.FACADE, Moves.BRAVE_BIRD, Moves.PROTECT, Moves.QUICK_ATTACK], + moveSet: [MoveId.FACADE, MoveId.BRAVE_BIRD, MoveId.PROTECT, MoveId.QUICK_ATTACK], modifierConfigs: expect.any(Array), }, { - species: getPokemonSpecies(Species.OBSTAGOON), + species: getPokemonSpecies(SpeciesId.OBSTAGOON), isBoss: false, abilityIndex: 1, // Guts nature: Nature.ADAMANT, - moveSet: [Moves.FACADE, Moves.OBSTRUCT, Moves.NIGHT_SLASH, Moves.FIRE_PUNCH], + moveSet: [MoveId.FACADE, MoveId.OBSTRUCT, MoveId.NIGHT_SLASH, MoveId.FIRE_PUNCH], modifierConfigs: expect.any(Array), }, ], diff --git a/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts b/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts index 2f910a9250f..94011b4b01d 100644 --- a/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts +++ b/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts @@ -9,9 +9,9 @@ import { generateModifierType, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { getPokemonSpecies } from "#app/data/pokemon-species"; -import { Biome } from "#app/enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; -import { Species } from "#app/enums/species"; +import { SpeciesId } from "#enums/species-id"; import { PokemonMove } from "#app/field/pokemon"; import { HealShopCostModifier, HitHealModifier, TurnHealModifier } from "#app/modifier/modifier"; import { ModifierTier } from "#app/modifier/modifier-tier"; @@ -22,7 +22,7 @@ import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { UiMode } from "#enums/ui-mode"; import * as Utils from "#app/utils/common"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { @@ -34,8 +34,8 @@ import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; const namespace = "mysteryEncounters/trashToTreasure"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; -const defaultBiome = Biome.CAVE; +const defaultParty = [SpeciesId.LAPRAS, SpeciesId.GENGAR, SpeciesId.ABRA]; +const defaultBiome = BiomeId.CAVE; const defaultWave = 45; describe("Trash to Treasure - Mystery Encounter", () => { @@ -56,7 +56,7 @@ describe("Trash to Treasure - Mystery Encounter", () => { game.override.disableTrainerWaves(); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( - new Map([[Biome.CAVE, [MysteryEncounterType.TRASH_TO_TREASURE]]]), + new Map([[BiomeId.CAVE, [MysteryEncounterType.TRASH_TO_TREASURE]]]), ); }); @@ -93,14 +93,14 @@ describe("Trash to Treasure - Mystery Encounter", () => { TrashToTreasureEncounter.populateDialogueTokensFromRequirements(); const onInitResult = onInit!(); - const bossSpecies = getPokemonSpecies(Species.GARBODOR); + const bossSpecies = getPokemonSpecies(SpeciesId.GARBODOR); const pokemonConfig: EnemyPokemonConfig = { species: bossSpecies, isBoss: true, shiny: false, // Shiny lock because of custom intro sprite formIndex: 1, // Gmax bossSegmentModifier: 1, // +1 Segment from normal - moveSet: [Moves.GUNK_SHOT, Moves.STOMPING_TANTRUM, Moves.HAMMER_ARM, Moves.PAYBACK], + moveSet: [MoveId.GUNK_SHOT, MoveId.STOMPING_TANTRUM, MoveId.HAMMER_ARM, MoveId.PAYBACK], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.BERRY) as PokemonHeldItemModifierType, @@ -223,19 +223,19 @@ describe("Trash to Treasure - Mystery Encounter", () => { const enemyField = scene.getEnemyField(); expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyField.length).toBe(1); - expect(enemyField[0].species.speciesId).toBe(Species.GARBODOR); + expect(enemyField[0].species.speciesId).toBe(SpeciesId.GARBODOR); expect(enemyField[0].moveset).toEqual([ - new PokemonMove(Moves.GUNK_SHOT), - new PokemonMove(Moves.STOMPING_TANTRUM), - new PokemonMove(Moves.HAMMER_ARM), - new PokemonMove(Moves.PAYBACK), + new PokemonMove(MoveId.GUNK_SHOT), + new PokemonMove(MoveId.STOMPING_TANTRUM), + new PokemonMove(MoveId.HAMMER_ARM), + new PokemonMove(MoveId.PAYBACK), ]); // Should have used moves pre-battle const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof MovePhase).map(p => p[0]); expect(movePhases.length).toBe(2); - expect(movePhases.filter(p => (p as MovePhase).move.moveId === Moves.TOXIC).length).toBe(1); - expect(movePhases.filter(p => (p as MovePhase).move.moveId === Moves.STOCKPILE).length).toBe(1); + expect(movePhases.filter(p => (p as MovePhase).move.moveId === MoveId.TOXIC).length).toBe(1); + expect(movePhases.filter(p => (p as MovePhase).move.moveId === MoveId.STOCKPILE).length).toBe(1); }); it("should have 2 Rogue, 1 Ultra, 1 Great in rewards", async () => { diff --git a/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts b/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts index 452dfcf3784..4fb0a231853 100644 --- a/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts +++ b/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts @@ -1,14 +1,14 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; -import { Biome } from "#app/enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; -import { Species } from "#app/enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { runMysteryEncounterToEnd, runSelectMysteryEncounterOption, } from "#test/mystery-encounter/encounter-test-utils"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import type BattleScene from "#app/battle-scene"; import { PokemonMove } from "#app/field/pokemon"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; @@ -27,11 +27,11 @@ import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { Stat } from "#enums/stat"; import type { BerryModifier } from "#app/modifier/modifier"; import { modifierTypes } from "#app/modifier/modifier-type"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; const namespace = "mysteryEncounters/uncommonBreed"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; -const defaultBiome = Biome.CAVE; +const defaultParty = [SpeciesId.LAPRAS, SpeciesId.GENGAR, SpeciesId.ABRA]; +const defaultBiome = BiomeId.CAVE; const defaultWave = 45; describe("Uncommon Breed - Mystery Encounter", () => { @@ -52,11 +52,11 @@ describe("Uncommon Breed - Mystery Encounter", () => { .startingWave(defaultWave) .startingBiome(defaultBiome) .disableTrainerWaves() - .enemyAbility(Abilities.BALL_FETCH) - .enemyPassiveAbility(Abilities.BALL_FETCH); + .enemyAbility(AbilityId.BALL_FETCH) + .enemyPassiveAbility(AbilityId.BALL_FETCH); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( - new Map([[Biome.CAVE, [MysteryEncounterType.UNCOMMON_BREED]]]), + new Map([[BiomeId.CAVE, [MysteryEncounterType.UNCOMMON_BREED]]]), ); }); @@ -133,7 +133,7 @@ describe("Uncommon Breed - Mystery Encounter", () => { // Should have used its egg move pre-battle const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof MovePhase).map(p => p[0]); expect(movePhases.length).toBe(1); - const eggMoves: Moves[] = speciesEggMoves[getPokemonSpecies(speciesToSpawn).getRootSpeciesId()]; + const eggMoves: MoveId[] = speciesEggMoves[getPokemonSpecies(speciesToSpawn).getRootSpeciesId()]; const usedMove = (movePhases[0] as MovePhase).move.moveId; expect(eggMoves.includes(usedMove)).toBe(true); }); @@ -160,7 +160,7 @@ describe("Uncommon Breed - Mystery Encounter", () => { // Should have used its egg move pre-battle const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof MovePhase).map(p => p[0]); expect(movePhases.length).toBe(1); - const eggMoves: Moves[] = speciesEggMoves[getPokemonSpecies(speciesToSpawn).getRootSpeciesId()]; + const eggMoves: MoveId[] = speciesEggMoves[getPokemonSpecies(speciesToSpawn).getRootSpeciesId()]; const usedMove = (movePhases[0] as MovePhase).move.moveId; expect(eggMoves.includes(usedMove)).toBe(true); }); @@ -272,7 +272,7 @@ describe("Uncommon Breed - Mystery Encounter", () => { const leaveEncounterWithoutBattleSpy = vi.spyOn(EncounterPhaseUtils, "leaveEncounterWithoutBattle"); await game.runToMysteryEncounter(MysteryEncounterType.UNCOMMON_BREED, defaultParty); // Mock moveset - scene.getPlayerParty()[0].moveset = [new PokemonMove(Moves.CHARM)]; + scene.getPlayerParty()[0].moveset = [new PokemonMove(MoveId.CHARM)]; await runMysteryEncounterToEnd(game, 3); expect(leaveEncounterWithoutBattleSpy).toBeCalled(); diff --git a/test/mystery-encounter/encounters/weird-dream-encounter.test.ts b/test/mystery-encounter/encounters/weird-dream-encounter.test.ts index f51ab45e4d4..163a15a715f 100644 --- a/test/mystery-encounter/encounters/weird-dream-encounter.test.ts +++ b/test/mystery-encounter/encounters/weird-dream-encounter.test.ts @@ -1,7 +1,7 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; -import { Biome } from "#app/enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; -import { Species } from "#app/enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; @@ -22,8 +22,8 @@ import { CommandPhase } from "#app/phases/command-phase"; import { ModifierTier } from "#app/modifier/modifier-tier"; const namespace = "mysteryEncounters/weirdDream"; -const defaultParty = [Species.MAGBY, Species.HAUNTER, Species.ABRA]; -const defaultBiome = Biome.CAVE; +const defaultParty = [SpeciesId.MAGBY, SpeciesId.HAUNTER, SpeciesId.ABRA]; +const defaultBiome = BiomeId.CAVE; const defaultWave = 45; describe("Weird Dream - Mystery Encounter", () => { @@ -47,7 +47,7 @@ describe("Weird Dream - Mystery Encounter", () => { ); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( - new Map([[Biome.CAVE, [MysteryEncounterType.WEIRD_DREAM]]]), + new Map([[BiomeId.CAVE, [MysteryEncounterType.WEIRD_DREAM]]]), ); }); diff --git a/test/mystery-encounter/mystery-encounter-utils.test.ts b/test/mystery-encounter/mystery-encounter-utils.test.ts index 1c4a2cf89bd..cd29a203e62 100644 --- a/test/mystery-encounter/mystery-encounter-utils.test.ts +++ b/test/mystery-encounter/mystery-encounter-utils.test.ts @@ -18,7 +18,7 @@ import { getPokemonSpecies } from "#app/data/pokemon-species"; import { PokemonType } from "#enums/pokemon-type"; import { MessagePhase } from "#app/phases/message-phase"; import GameManager from "#test/testUtils/gameManager"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; import Phaser from "phaser"; @@ -42,7 +42,7 @@ describe("Mystery Encounter Utils", () => { beforeEach(() => { game = new GameManager(phaserGame); scene = game.scene; - initSceneWithoutEncounterPhase(game.scene, [Species.ARCEUS, Species.MANAPHY]); + initSceneWithoutEncounterPhase(game.scene, [SpeciesId.ARCEUS, SpeciesId.MANAPHY]); }); describe("getRandomPlayerPokemon", () => { @@ -51,12 +51,12 @@ describe("Mystery Encounter Utils", () => { game.override.seed("random"); let result = getRandomPlayerPokemon(); - expect(result.species.speciesId).toBe(Species.MANAPHY); + expect(result.species.speciesId).toBe(SpeciesId.MANAPHY); game.override.seed("random2"); result = getRandomPlayerPokemon(); - expect(result.species.speciesId).toBe(Species.ARCEUS); + expect(result.species.speciesId).toBe(SpeciesId.ARCEUS); }); it("gets a fainted pokemon from player party if isAllowedInBattle is false", async () => { @@ -71,12 +71,12 @@ describe("Mystery Encounter Utils", () => { game.override.seed("random"); let result = getRandomPlayerPokemon(); - expect(result.species.speciesId).toBe(Species.MANAPHY); + expect(result.species.speciesId).toBe(SpeciesId.MANAPHY); game.override.seed("random2"); result = getRandomPlayerPokemon(); - expect(result.species.speciesId).toBe(Species.ARCEUS); + expect(result.species.speciesId).toBe(SpeciesId.ARCEUS); }); it("gets an unfainted legal pokemon from player party if isAllowed is true and isFainted is false", async () => { @@ -90,12 +90,12 @@ describe("Mystery Encounter Utils", () => { game.override.seed("random"); let result = getRandomPlayerPokemon(true); - expect(result.species.speciesId).toBe(Species.MANAPHY); + expect(result.species.speciesId).toBe(SpeciesId.MANAPHY); game.override.seed("random2"); result = getRandomPlayerPokemon(true); - expect(result.species.speciesId).toBe(Species.MANAPHY); + expect(result.species.speciesId).toBe(SpeciesId.MANAPHY); }); it("returns last unfainted pokemon if doNotReturnLastAbleMon is false", async () => { @@ -109,12 +109,12 @@ describe("Mystery Encounter Utils", () => { game.override.seed("random"); let result = getRandomPlayerPokemon(true, false); - expect(result.species.speciesId).toBe(Species.MANAPHY); + expect(result.species.speciesId).toBe(SpeciesId.MANAPHY); game.override.seed("random2"); result = getRandomPlayerPokemon(true, false); - expect(result.species.speciesId).toBe(Species.MANAPHY); + expect(result.species.speciesId).toBe(SpeciesId.MANAPHY); }); it("never returns last unfainted pokemon if doNotReturnLastAbleMon is true", async () => { @@ -128,12 +128,12 @@ describe("Mystery Encounter Utils", () => { game.override.seed("random"); let result = getRandomPlayerPokemon(true, false, true); - expect(result.species.speciesId).toBe(Species.ARCEUS); + expect(result.species.speciesId).toBe(SpeciesId.ARCEUS); game.override.seed("random2"); result = getRandomPlayerPokemon(true, false, true); - expect(result.species.speciesId).toBe(Species.ARCEUS); + expect(result.species.speciesId).toBe(SpeciesId.ARCEUS); }); }); @@ -143,7 +143,7 @@ describe("Mystery Encounter Utils", () => { party[0].level = 100; const result = getHighestLevelPlayerPokemon(); - expect(result.species.speciesId).toBe(Species.ARCEUS); + expect(result.species.speciesId).toBe(SpeciesId.ARCEUS); }); it("gets highest level pokemon at different index", () => { @@ -151,7 +151,7 @@ describe("Mystery Encounter Utils", () => { party[1].level = 100; const result = getHighestLevelPlayerPokemon(); - expect(result.species.speciesId).toBe(Species.MANAPHY); + expect(result.species.speciesId).toBe(SpeciesId.MANAPHY); }); it("breaks ties by getting returning lower index", () => { @@ -160,7 +160,7 @@ describe("Mystery Encounter Utils", () => { party[1].level = 100; const result = getHighestLevelPlayerPokemon(); - expect(result.species.speciesId).toBe(Species.ARCEUS); + expect(result.species.speciesId).toBe(SpeciesId.ARCEUS); }); it("returns highest level unfainted if unfainted is true", async () => { @@ -172,7 +172,7 @@ describe("Mystery Encounter Utils", () => { party[1].level = 10; const result = getHighestLevelPlayerPokemon(true); - expect(result.species.speciesId).toBe(Species.MANAPHY); + expect(result.species.speciesId).toBe(SpeciesId.MANAPHY); }); }); @@ -182,7 +182,7 @@ describe("Mystery Encounter Utils", () => { party[0].level = 100; const result = getLowestLevelPlayerPokemon(); - expect(result.species.speciesId).toBe(Species.MANAPHY); + expect(result.species.speciesId).toBe(SpeciesId.MANAPHY); }); it("gets lowest level pokemon at different index", () => { @@ -190,7 +190,7 @@ describe("Mystery Encounter Utils", () => { party[1].level = 100; const result = getLowestLevelPlayerPokemon(); - expect(result.species.speciesId).toBe(Species.ARCEUS); + expect(result.species.speciesId).toBe(SpeciesId.ARCEUS); }); it("breaks ties by getting returning lower index", () => { @@ -199,7 +199,7 @@ describe("Mystery Encounter Utils", () => { party[1].level = 100; const result = getLowestLevelPlayerPokemon(); - expect(result.species.speciesId).toBe(Species.ARCEUS); + expect(result.species.speciesId).toBe(SpeciesId.ARCEUS); }); it("returns lowest level unfainted if unfainted is true", async () => { @@ -211,7 +211,7 @@ describe("Mystery Encounter Utils", () => { party[1].level = 100; const result = getLowestLevelPlayerPokemon(true); - expect(result.species.speciesId).toBe(Species.MANAPHY); + expect(result.species.speciesId).toBe(SpeciesId.MANAPHY); }); }); @@ -236,23 +236,23 @@ describe("Mystery Encounter Utils", () => { it("excludes species from search", () => { // Only 9 tiers are: Kyogre, Groudon, Rayquaza, Arceus, Zacian, Koraidon, Miraidon, Terapagos const result = getRandomSpeciesByStarterCost(9, [ - Species.KYOGRE, - Species.GROUDON, - Species.RAYQUAZA, - Species.ARCEUS, - Species.KORAIDON, - Species.MIRAIDON, - Species.TERAPAGOS, + SpeciesId.KYOGRE, + SpeciesId.GROUDON, + SpeciesId.RAYQUAZA, + SpeciesId.ARCEUS, + SpeciesId.KORAIDON, + SpeciesId.MIRAIDON, + SpeciesId.TERAPAGOS, ]); const pokeSpecies = getPokemonSpecies(result); - expect(pokeSpecies.speciesId).toBe(Species.ZACIAN); + expect(pokeSpecies.speciesId).toBe(SpeciesId.ZACIAN); }); it("gets species of specified types", () => { // Only 9 tiers are: Kyogre, Groudon, Rayquaza, Arceus, Zacian, Koraidon, Miraidon, Terapagos const result = getRandomSpeciesByStarterCost(9, undefined, [PokemonType.GROUND]); const pokeSpecies = getPokemonSpecies(result); - expect(pokeSpecies.speciesId).toBe(Species.GROUDON); + expect(pokeSpecies.speciesId).toBe(SpeciesId.GROUDON); }); }); diff --git a/test/mystery-encounter/mystery-encounter.test.ts b/test/mystery-encounter/mystery-encounter.test.ts index c9d31f28717..19dd17d5381 100644 --- a/test/mystery-encounter/mystery-encounter.test.ts +++ b/test/mystery-encounter/mystery-encounter.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeAll, beforeEach, expect, describe, it } from "vitest"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import type BattleScene from "#app/battle-scene"; @@ -30,8 +30,8 @@ describe("Mystery Encounters", () => { it("Spawns a mystery encounter", async () => { await game.runToMysteryEncounter(MysteryEncounterType.MYSTERIOUS_CHALLENGERS, [ - Species.CHARIZARD, - Species.VOLCARONA, + SpeciesId.CHARIZARD, + SpeciesId.VOLCARONA, ]); await game.phaseInterceptor.to(MysteryEncounterPhase, false); diff --git a/test/phases/form-change-phase.test.ts b/test/phases/form-change-phase.test.ts index 974c64d9e5a..8531375a48b 100644 --- a/test/phases/form-change-phase.test.ts +++ b/test/phases/form-change-phase.test.ts @@ -1,6 +1,6 @@ -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -25,17 +25,17 @@ describe("Form Change Phase", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); it("Zacian should successfully change into Crowned form", async () => { - await game.classicMode.startBattle([Species.ZACIAN]); + await game.classicMode.startBattle([SpeciesId.ZACIAN]); // Before the form change: Should be Hero form const zacian = game.scene.getPlayerParty()[0]; @@ -48,7 +48,7 @@ describe("Form Change Phase", () => { const rustedSword = rustedSwordType.newModifier(zacian); await game.scene.addModifier(rustedSword); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // After the form change: Should be Crowned form diff --git a/test/phases/frenzy-move-reset.test.ts b/test/phases/frenzy-move-reset.test.ts index 6d3ec767722..1879a14d301 100644 --- a/test/phases/frenzy-move-reset.test.ts +++ b/test/phases/frenzy-move-reset.test.ts @@ -1,9 +1,9 @@ import { BattlerIndex } from "#app/battle"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; import { StatusEffect } from "#enums/status-effect"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; @@ -27,13 +27,13 @@ describe("Frenzy Move Reset", () => { game.override .battleStyle("single") .disableCrits() - .starterSpecies(Species.MAGIKARP) - .moveset(Moves.THRASH) + .starterSpecies(SpeciesId.MAGIKARP) + .moveset(MoveId.THRASH) .statusEffect(StatusEffect.PARALYSIS) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(100) - .enemySpecies(Species.SHUCKLE) - .enemyAbility(Abilities.BALL_FETCH); + .enemySpecies(SpeciesId.SHUCKLE) + .enemyAbility(AbilityId.BALL_FETCH); }); /* @@ -54,7 +54,7 @@ describe("Frenzy Move Reset", () => { const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.THRASH); + game.move.select(MoveId.THRASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceStatusActivation(false); await game.toNextTurn(); diff --git a/test/phases/game-over-phase.test.ts b/test/phases/game-over-phase.test.ts index 40473a022cb..c430223b774 100644 --- a/test/phases/game-over-phase.test.ts +++ b/test/phases/game-over-phase.test.ts @@ -1,7 +1,7 @@ -import { Biome } from "#enums/biome"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { BiomeId } from "#enums/biome-id"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -25,28 +25,28 @@ describe("Game Over Phase", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.MEMENTO, Moves.ICE_BEAM, Moves.SPLASH]) - .ability(Abilities.BALL_FETCH) + .moveset([MoveId.MEMENTO, MoveId.ICE_BEAM, MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) .startingWave(200) - .startingBiome(Biome.END) + .startingBiome(BiomeId.END) .startingLevel(10000); }); it("winning a run should give rewards", async () => { - await game.classicMode.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); vi.spyOn(game.scene, "validateAchv"); // Note: `game.doKillOpponents()` does not properly handle final boss // Final boss phase 1 - game.move.select(Moves.ICE_BEAM); + game.move.select(MoveId.ICE_BEAM); await game.toNextTurn(); // Final boss phase 2 - game.move.select(Moves.ICE_BEAM); + game.move.select(MoveId.ICE_BEAM); await game.phaseInterceptor.to("PostGameOverPhase", false); // The game refused to actually give the vouchers during tests, @@ -60,10 +60,10 @@ describe("Game Over Phase", () => { }); it("losing a run should not give rewards", async () => { - await game.classicMode.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); vi.spyOn(game.scene, "validateAchv"); - game.move.select(Moves.MEMENTO); + game.move.select(MoveId.MEMENTO); await game.phaseInterceptor.to("PostGameOverPhase", false); expect(game.phaseInterceptor.log.includes("GameOverPhase")).toBe(true); diff --git a/test/phases/learn-move-phase.test.ts b/test/phases/learn-move-phase.test.ts index b8b718a9669..88b8187069b 100644 --- a/test/phases/learn-move-phase.test.ts +++ b/test/phases/learn-move-phase.test.ts @@ -1,8 +1,8 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; -import { Species } from "#enums/species"; -import { Moves } from "#enums/moves"; +import { SpeciesId } from "#enums/species-id"; +import { MoveId } from "#enums/move-id"; import { LearnMovePhase } from "#app/phases/learn-move-phase"; import { UiMode } from "#enums/ui-mode"; import { Button } from "#app/enums/buttons"; @@ -27,11 +27,11 @@ describe("Learn Move Phase", () => { }); it("If Pokemon has less than 4 moves, its newest move will be added to the lowest empty index", async () => { - game.override.moveset([Moves.SPLASH]); - await game.classicMode.startBattle([Species.BULBASAUR]); + game.override.moveset([MoveId.SPLASH]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const pokemon = game.scene.getPlayerPokemon()!; const newMovePos = pokemon?.getMoveset().length; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to(LearnMovePhase); const levelMove = pokemon.getLevelMoves(5)[0]; @@ -42,13 +42,13 @@ describe("Learn Move Phase", () => { }); it("If a pokemon has 4 move slots filled, the chosen move will be deleted and replaced", async () => { - await game.classicMode.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const bulbasaur = game.scene.getPlayerPokemon()!; - const prevMoveset = [Moves.SPLASH, Moves.ABSORB, Moves.ACID, Moves.VINE_WHIP]; + const prevMoveset = [MoveId.SPLASH, MoveId.ABSORB, MoveId.ACID, MoveId.VINE_WHIP]; const moveSlotNum = 3; game.move.changeMoveset(bulbasaur, prevMoveset); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); // queue up inputs to confirm dialog boxes @@ -67,18 +67,18 @@ describe("Learn Move Phase", () => { expect(bulbasaur.level).toBeGreaterThanOrEqual(levelReq); // Check each of mr mime's moveslots to make sure the changed move (and ONLY the changed move) is different bulbasaur.getMoveset().forEach((move, index) => { - const expectedMove: Moves = index === moveSlotNum ? levelMoveId : prevMoveset[index]; + const expectedMove: MoveId = index === moveSlotNum ? levelMoveId : prevMoveset[index]; expect(move?.moveId).toBe(expectedMove); }); }); it("selecting the newly deleted move will reject it and keep old moveset", async () => { - await game.classicMode.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const bulbasaur = game.scene.getPlayerPokemon()!; - const prevMoveset = [Moves.SPLASH, Moves.ABSORB, Moves.ACID, Moves.VINE_WHIP]; + const prevMoveset = [MoveId.SPLASH, MoveId.ABSORB, MoveId.ACID, MoveId.VINE_WHIP]; - game.move.changeMoveset(bulbasaur, [Moves.SPLASH, Moves.ABSORB, Moves.ACID, Moves.VINE_WHIP]); - game.move.select(Moves.SPLASH); + game.move.changeMoveset(bulbasaur, [MoveId.SPLASH, MoveId.ABSORB, MoveId.ACID, MoveId.VINE_WHIP]); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); // queue up inputs to confirm dialog boxes diff --git a/test/phases/mystery-encounter-phase.test.ts b/test/phases/mystery-encounter-phase.test.ts index 34078b65039..ece5a221e00 100644 --- a/test/phases/mystery-encounter-phase.test.ts +++ b/test/phases/mystery-encounter-phase.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeAll, beforeEach, expect, describe, it, vi } from "vitest"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { MysteryEncounterOptionSelectedPhase, MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import { UiMode } from "#enums/ui-mode"; import { Button } from "#enums/buttons"; @@ -36,8 +36,8 @@ describe("Mystery Encounter Phases", () => { describe("MysteryEncounterPhase", () => { it("Runs to MysteryEncounterPhase", async () => { await game.runToMysteryEncounter(MysteryEncounterType.MYSTERIOUS_CHALLENGERS, [ - Species.CHARIZARD, - Species.VOLCARONA, + SpeciesId.CHARIZARD, + SpeciesId.VOLCARONA, ]); await game.phaseInterceptor.to(MysteryEncounterPhase, false); @@ -46,8 +46,8 @@ describe("Mystery Encounter Phases", () => { it("Runs MysteryEncounterPhase", async () => { await game.runToMysteryEncounter(MysteryEncounterType.MYSTERIOUS_CHALLENGERS, [ - Species.CHARIZARD, - Species.VOLCARONA, + SpeciesId.CHARIZARD, + SpeciesId.VOLCARONA, ]); game.onNextPrompt("MysteryEncounterPhase", UiMode.MYSTERY_ENCOUNTER, () => { @@ -69,8 +69,8 @@ describe("Mystery Encounter Phases", () => { vi.spyOn(ui, "showDialogue"); vi.spyOn(ui, "showText"); await game.runToMysteryEncounter(MysteryEncounterType.MYSTERIOUS_CHALLENGERS, [ - Species.CHARIZARD, - Species.VOLCARONA, + SpeciesId.CHARIZARD, + SpeciesId.VOLCARONA, ]); game.onNextPrompt("MysteryEncounterPhase", UiMode.MESSAGE, () => { diff --git a/test/phases/select-modifier-phase.test.ts b/test/phases/select-modifier-phase.test.ts index 85f8b472c4a..72496d5f17b 100644 --- a/test/phases/select-modifier-phase.test.ts +++ b/test/phases/select-modifier-phase.test.ts @@ -8,10 +8,10 @@ import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { UiMode } from "#enums/ui-mode"; import { shiftCharCodes } from "#app/utils/common"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { Button } from "#enums/buttons"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; import Phaser from "phaser"; @@ -33,10 +33,10 @@ describe("SelectModifierPhase", () => { scene = game.scene; game.override - .moveset([Moves.FISSURE, Moves.SPLASH]) - .ability(Abilities.NO_GUARD) + .moveset([MoveId.FISSURE, MoveId.SPLASH]) + .ability(AbilityId.NO_GUARD) .startingLevel(200) - .enemySpecies(Species.MAGIKARP); + .enemySpecies(SpeciesId.MAGIKARP); }); afterEach(() => { @@ -46,7 +46,7 @@ describe("SelectModifierPhase", () => { }); it("should start a select modifier phase", async () => { - initSceneWithoutEncounterPhase(scene, [Species.ABRA, Species.VOLCARONA]); + initSceneWithoutEncounterPhase(scene, [SpeciesId.ABRA, SpeciesId.VOLCARONA]); const selectModifierPhase = new SelectModifierPhase(); scene.unshiftPhase(selectModifierPhase); await game.phaseInterceptor.to(SelectModifierPhase); @@ -55,8 +55,8 @@ describe("SelectModifierPhase", () => { }); it("should generate random modifiers", async () => { - await game.classicMode.startBattle([Species.ABRA, Species.VOLCARONA]); - game.move.select(Moves.FISSURE); + await game.classicMode.startBattle([SpeciesId.ABRA, SpeciesId.VOLCARONA]); + game.move.select(MoveId.FISSURE); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -67,7 +67,7 @@ describe("SelectModifierPhase", () => { }); it("should modify reroll cost", async () => { - initSceneWithoutEncounterPhase(scene, [Species.ABRA, Species.VOLCARONA]); + initSceneWithoutEncounterPhase(scene, [SpeciesId.ABRA, SpeciesId.VOLCARONA]); const options = [ new ModifierTypeOption(modifierTypes.POTION(), 0, 100), new ModifierTypeOption(modifierTypes.ETHER(), 0, 400), @@ -88,11 +88,11 @@ describe("SelectModifierPhase", () => { }); it.todo("should generate random modifiers from reroll", async () => { - await game.classicMode.startBattle([Species.ABRA, Species.VOLCARONA]); + await game.classicMode.startBattle([SpeciesId.ABRA, SpeciesId.VOLCARONA]); scene.money = 1000000; scene.shopCursorTarget = 0; - game.move.select(Moves.FISSURE); + game.move.select(MoveId.FISSURE); await game.phaseInterceptor.to("SelectModifierPhase"); // TODO: nagivate the ui to reroll somehow @@ -112,7 +112,7 @@ describe("SelectModifierPhase", () => { it.todo("should generate random modifiers of same tier for reroll with reroll lock", async () => { game.override.startingModifier([{ name: "LOCK_CAPSULE" }]); - await game.classicMode.startBattle([Species.ABRA, Species.VOLCARONA]); + await game.classicMode.startBattle([SpeciesId.ABRA, SpeciesId.VOLCARONA]); scene.money = 1000000; // Just use fully random seed for this test vi.spyOn(scene, "resetSeed").mockImplementation(() => { @@ -122,7 +122,7 @@ describe("SelectModifierPhase", () => { scene.rngCounter = 0; }); - game.move.select(Moves.FISSURE); + game.move.select(MoveId.FISSURE); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -152,7 +152,7 @@ describe("SelectModifierPhase", () => { }); it("should generate custom modifiers", async () => { - await game.classicMode.startBattle([Species.ABRA, Species.VOLCARONA]); + await game.classicMode.startBattle([SpeciesId.ABRA, SpeciesId.VOLCARONA]); scene.money = 1000000; const customModifiers: CustomModifierSettings = { guaranteedModifierTypeFuncs: [ @@ -165,7 +165,7 @@ describe("SelectModifierPhase", () => { }; const selectModifierPhase = new SelectModifierPhase(0, undefined, customModifiers); scene.unshiftPhase(selectModifierPhase); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -181,7 +181,7 @@ describe("SelectModifierPhase", () => { }); it("should generate custom modifier tiers that can upgrade from luck", async () => { - await game.classicMode.startBattle([Species.ABRA, Species.VOLCARONA]); + await game.classicMode.startBattle([SpeciesId.ABRA, SpeciesId.VOLCARONA]); scene.money = 1000000; const customModifiers: CustomModifierSettings = { guaranteedModifierTiers: [ @@ -192,7 +192,7 @@ describe("SelectModifierPhase", () => { ModifierTier.MASTER, ], }; - const pokemon = new PlayerPokemon(getPokemonSpecies(Species.BULBASAUR), 10, undefined, 0, undefined, true, 2); + const pokemon = new PlayerPokemon(getPokemonSpecies(SpeciesId.BULBASAUR), 10, undefined, 0, undefined, true, 2); // Fill party with max shinies while (scene.getPlayerParty().length > 0) { @@ -202,7 +202,7 @@ describe("SelectModifierPhase", () => { const selectModifierPhase = new SelectModifierPhase(0, undefined, customModifiers); scene.unshiftPhase(selectModifierPhase); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -233,7 +233,7 @@ describe("SelectModifierPhase", () => { }); it("should generate custom modifiers and modifier tiers together", async () => { - await game.classicMode.startBattle([Species.ABRA, Species.VOLCARONA]); + await game.classicMode.startBattle([SpeciesId.ABRA, SpeciesId.VOLCARONA]); scene.money = 1000000; const customModifiers: CustomModifierSettings = { guaranteedModifierTypeFuncs: [modifierTypes.MEMORY_MUSHROOM, modifierTypes.TM_COMMON], @@ -241,7 +241,7 @@ describe("SelectModifierPhase", () => { }; const selectModifierPhase = new SelectModifierPhase(0, undefined, customModifiers); scene.unshiftPhase(selectModifierPhase); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -256,7 +256,7 @@ describe("SelectModifierPhase", () => { }); it("should fill remaining modifiers if fillRemaining is true with custom modifiers", async () => { - await game.classicMode.startBattle([Species.ABRA, Species.VOLCARONA]); + await game.classicMode.startBattle([SpeciesId.ABRA, SpeciesId.VOLCARONA]); scene.money = 1000000; const customModifiers: CustomModifierSettings = { guaranteedModifierTypeFuncs: [modifierTypes.MEMORY_MUSHROOM], @@ -265,7 +265,7 @@ describe("SelectModifierPhase", () => { }; const selectModifierPhase = new SelectModifierPhase(0, undefined, customModifiers); scene.unshiftPhase(selectModifierPhase); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); diff --git a/test/reload.test.ts b/test/reload.test.ts index 93823e06cce..6c535ca4722 100644 --- a/test/reload.test.ts +++ b/test/reload.test.ts @@ -2,10 +2,10 @@ import { GameModes } from "#app/game-mode"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; import type OptionSelectUiHandler from "#app/ui/settings/option-select-ui-handler"; import { UiMode } from "#enums/ui-mode"; -import { Biome } from "#enums/biome"; +import { BiomeId } from "#enums/biome-id"; import { Button } from "#enums/buttons"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import type { MockClock } from "#test/testUtils/mocks/mockClock"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -51,12 +51,12 @@ describe("Reload", () => { .battleStyle("single") .startingLevel(100) // Avoid levelling up .disableTrainerWaves() - .moveset([Moves.SPLASH]) - .enemyMoveset(Moves.SPLASH); + .moveset([MoveId.SPLASH]) + .enemyMoveset(MoveId.SPLASH); await game.dailyMode.startBattle(); // Transition from Wave 10 to Wave 11 in order to trigger biome switch - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); game.onNextPrompt("SelectBiomePhase", UiMode.OPTION_SELECT, () => { (game.scene.time as MockClock).overrideDelay = null; @@ -80,16 +80,16 @@ describe("Reload", () => { it("should not have weather inconsistencies after a biome switch", async () => { game.override .startingWave(10) - .startingBiome(Biome.ICE_CAVE) // Will lead to Snowy Forest with randomly generated weather + .startingBiome(BiomeId.ICE_CAVE) // Will lead to Snowy Forest with randomly generated weather .battleStyle("single") .startingLevel(100) // Avoid levelling up .disableTrainerWaves() - .moveset([Moves.SPLASH]) - .enemyMoveset(Moves.SPLASH); + .moveset([MoveId.SPLASH]) + .enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle(); // Apparently daily mode would override the biome // Transition from Wave 10 to Wave 11 in order to trigger biome switch - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.toNextWave(); expect(game.phaseInterceptor.log).toContain("NewBiomeEncounterPhase"); @@ -156,7 +156,7 @@ describe("Reload", () => { it("should not have RNG inconsistencies at a Daily run wave 50 Boss fight", async () => { game.override.battleStyle("single").startingWave(50); - await game.runToFinalBossEncounter([Species.BULBASAUR], GameModes.DAILY); + await game.runToFinalBossEncounter([SpeciesId.BULBASAUR], GameModes.DAILY); const preReloadRngState = Phaser.Math.RND.state(); diff --git a/test/system/game_data.test.ts b/test/system/game_data.test.ts index 900fb672320..b9011cd934f 100644 --- a/test/system/game_data.test.ts +++ b/test/system/game_data.test.ts @@ -1,8 +1,8 @@ import * as bypassLoginModule from "#app/global-vars/bypass-login"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; import type { SessionSaveData } from "#app/system/game-data"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -21,10 +21,10 @@ describe("System - Game Data", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .battleStyle("single") - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); }); afterEach(() => { diff --git a/test/testUtils/gameManager.ts b/test/testUtils/gameManager.ts index 39b6000e308..68d218b3988 100644 --- a/test/testUtils/gameManager.ts +++ b/test/testUtils/gameManager.ts @@ -34,7 +34,7 @@ import { ExpGainsSpeed } from "#enums/exp-gains-speed"; import { ExpNotification } from "#enums/exp-notification"; import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { PlayerGender } from "#enums/player-gender"; -import type { Species } from "#enums/species"; +import type { SpeciesId } from "#enums/species-id"; import { UiMode } from "#enums/ui-mode"; import ErrorInterceptor from "#test/testUtils/errorInterceptor"; import { generateStarter, waitUntil } from "#test/testUtils/gameManagerUtils"; @@ -203,7 +203,7 @@ export default class GameManager { * @param species * @param mode */ - async runToFinalBossEncounter(species: Species[], mode: GameModes) { + async runToFinalBossEncounter(species: SpeciesId[], mode: GameModes) { console.log("===to final boss encounter==="); await this.runToTitle(); @@ -232,7 +232,7 @@ export default class GameManager { * @param species Optional array of species for party. * @returns A promise that resolves when the EncounterPhase ends. */ - async runToMysteryEncounter(encounterType?: MysteryEncounterType, species?: Species[]) { + async runToMysteryEncounter(encounterType?: MysteryEncounterType, species?: SpeciesId[]) { if (!isNullOrUndefined(encounterType)) { this.override.disableTrainerWaves(); this.override.mysteryEncounter(encounterType); diff --git a/test/testUtils/gameManagerUtils.ts b/test/testUtils/gameManagerUtils.ts index 9e9c8f15f96..18dd83995a3 100644 --- a/test/testUtils/gameManagerUtils.ts +++ b/test/testUtils/gameManagerUtils.ts @@ -8,8 +8,8 @@ import { PlayerPokemon } from "#app/field/pokemon"; import { GameModes, getGameMode } from "#app/game-mode"; import type { StarterMoveset } from "#app/system/game-data"; import type { Starter } from "#app/ui/starter-select-ui-handler"; -import { Moves } from "#enums/moves"; -import type { Species } from "#enums/species"; +import { MoveId } from "#enums/move-id"; +import type { SpeciesId } from "#enums/species-id"; /** Function to convert Blob to string */ export function blobToString(blob) { @@ -32,7 +32,7 @@ export function holdOn(ms: number) { return new Promise(resolve => setTimeout(resolve, ms)); } -export function generateStarter(scene: BattleScene, species?: Species[]): Starter[] { +export function generateStarter(scene: BattleScene, species?: SpeciesId[]): Starter[] { const seed = "test"; const starters = getTestRunStarters(seed, species); const startingLevel = scene.gameMode.getStartingLevel(); @@ -52,7 +52,7 @@ export function generateStarter(scene: BattleScene, species?: Species[]): Starte undefined, starter.nature, ); - const moveset: Moves[] = []; + const moveset: MoveId[] = []; starterPokemon.moveset.forEach(move => { moveset.push(move!.getMove().id); }); @@ -61,7 +61,7 @@ export function generateStarter(scene: BattleScene, species?: Species[]): Starte return starters; } -function getTestRunStarters(seed: string, species?: Species[]): Starter[] { +function getTestRunStarters(seed: string, species?: SpeciesId[]): Starter[] { if (!species) { return getDailyRunStarters(seed); } @@ -97,18 +97,18 @@ export function waitUntil(truth): Promise { } /** Get the index of `move` from the moveset of the pokemon on the player's field at location `pokemonIndex` */ -export function getMovePosition(scene: BattleScene, pokemonIndex: 0 | 1, move: Moves): number { +export function getMovePosition(scene: BattleScene, pokemonIndex: 0 | 1, move: MoveId): number { const playerPokemon = scene.getPlayerField()[pokemonIndex]; const moveSet = playerPokemon.getMoveset(); const index = moveSet.findIndex(m => m.moveId === move && m.ppUsed < m.getMovePp()); - console.log(`Move position for ${Moves[move]} (=${move}):`, index); + console.log(`Move position for ${MoveId[move]} (=${move}):`, index); return index; } /** * Useful for populating party, wave index, etc. without having to spin up and run through an entire EncounterPhase */ -export function initSceneWithoutEncounterPhase(scene: BattleScene, species?: Species[]): void { +export function initSceneWithoutEncounterPhase(scene: BattleScene, species?: SpeciesId[]): void { const starters = generateStarter(scene, species); starters.forEach(starter => { const starterProps = scene.gameData.getSpeciesDexAttrProps(starter.species, starter.dexAttr); diff --git a/test/testUtils/helpers/challengeModeHelper.ts b/test/testUtils/helpers/challengeModeHelper.ts index 3a4f2adcd09..d0533d3b5ba 100644 --- a/test/testUtils/helpers/challengeModeHelper.ts +++ b/test/testUtils/helpers/challengeModeHelper.ts @@ -1,5 +1,5 @@ import { BattleStyle } from "#app/enums/battle-style"; -import type { Species } from "#app/enums/species"; +import type { SpeciesId } from "#enums/species-id"; import overrides from "#app/overrides"; import { EncounterPhase } from "#app/phases/encounter-phase"; import { SelectStarterPhase } from "#app/phases/select-starter-phase"; @@ -34,7 +34,7 @@ export class ChallengeModeHelper extends GameManagerHelper { * @param gameMode - Optional game mode to set. * @returns A promise that resolves when the summon phase is reached. */ - async runToSummon(species?: Species[]) { + async runToSummon(species?: SpeciesId[]) { await this.game.runToTitle(); if (this.game.override.disableShinies) { @@ -60,7 +60,7 @@ export class ChallengeModeHelper extends GameManagerHelper { * @param species - Optional array of species to start the battle with. * @returns A promise that resolves when the battle is started. */ - async startBattle(species?: Species[]) { + async startBattle(species?: SpeciesId[]) { await this.runToSummon(species); if (this.game.scene.battleStyle === BattleStyle.SWITCH) { diff --git a/test/testUtils/helpers/classicModeHelper.ts b/test/testUtils/helpers/classicModeHelper.ts index 8e1ac95c733..d5f0ceb4072 100644 --- a/test/testUtils/helpers/classicModeHelper.ts +++ b/test/testUtils/helpers/classicModeHelper.ts @@ -1,5 +1,5 @@ import { BattleStyle } from "#app/enums/battle-style"; -import type { Species } from "#app/enums/species"; +import type { SpeciesId } from "#enums/species-id"; import { GameModes, getGameMode } from "#app/game-mode"; import overrides from "#app/overrides"; import { CommandPhase } from "#app/phases/command-phase"; @@ -19,7 +19,7 @@ export class ClassicModeHelper extends GameManagerHelper { * @param species - Optional array of species to summon. * @returns A promise that resolves when the summon phase is reached. */ - async runToSummon(species?: Species[]): Promise { + async runToSummon(species?: SpeciesId[]): Promise { await this.game.runToTitle(); if (this.game.override.disableShinies) { @@ -45,7 +45,7 @@ export class ClassicModeHelper extends GameManagerHelper { * @param species - Optional array of species to start the battle with. * @returns A promise that resolves when the battle is started. */ - async startBattle(species?: Species[]): Promise { + async startBattle(species?: SpeciesId[]): Promise { await this.runToSummon(species); if (this.game.scene.battleStyle === BattleStyle.SWITCH) { diff --git a/test/testUtils/helpers/field-helper.ts b/test/testUtils/helpers/field-helper.ts index 6d762853cad..08b7a210e68 100644 --- a/test/testUtils/helpers/field-helper.ts +++ b/test/testUtils/helpers/field-helper.ts @@ -8,7 +8,7 @@ import type { Ability } from "#app/data/abilities/ability-class"; import { allAbilities } from "#app/data/data-lists"; import type Pokemon from "#app/field/pokemon"; import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; -import type { Abilities } from "#enums/abilities"; +import type { AbilityId } from "#enums/ability-id"; import type { PokemonType } from "#enums/pokemon-type"; import { Stat } from "#enums/stat"; import { GameManagerHelper } from "#test/testUtils/helpers/gameManagerHelper"; @@ -67,7 +67,7 @@ export class FieldHelper extends GameManagerHelper { * @see {@linkcode vi.spyOn} * @see https://vitest.dev/api/mock#mockreturnvalue */ - public mockAbility(pokemon: Pokemon, ability: Abilities): MockInstance<(baseOnly?: boolean) => Ability> { + public mockAbility(pokemon: Pokemon, ability: AbilityId): MockInstance<(baseOnly?: boolean) => Ability> { return vi.spyOn(pokemon, "getAbility").mockReturnValue(allAbilities[ability]); } diff --git a/test/testUtils/helpers/moveHelper.ts b/test/testUtils/helpers/moveHelper.ts index b3cdffeb636..02b1efd837f 100644 --- a/test/testUtils/helpers/moveHelper.ts +++ b/test/testUtils/helpers/moveHelper.ts @@ -7,7 +7,7 @@ import type { CommandPhase } from "#app/phases/command-phase"; import type { EnemyCommandPhase } from "#app/phases/enemy-command-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Command } from "#app/ui/command-ui-handler"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/move-id"; import { UiMode } from "#enums/ui-mode"; import { getMovePosition } from "#test/testUtils/gameManagerUtils"; import { GameManagerHelper } from "#test/testUtils/helpers/gameManagerHelper"; @@ -50,7 +50,7 @@ export class MoveHelper extends GameManagerHelper { * @param pkmIndex - the pokemon index. Relevant for double-battles only (defaults to 0) * @param targetIndex - The {@linkcode BattlerIndex} of the Pokemon to target for single-target moves, or `null` if a manual call to `selectTarget()` is required */ - public select(move: Moves, pkmIndex: 0 | 1 = 0, targetIndex?: BattlerIndex | null) { + public select(move: MoveId, pkmIndex: 0 | 1 = 0, targetIndex?: BattlerIndex | null) { const movePosition = getMovePosition(this.game.scene, pkmIndex, move); this.game.onNextPrompt("CommandPhase", UiMode.COMMAND, () => { @@ -72,7 +72,7 @@ export class MoveHelper extends GameManagerHelper { * @param pkmIndex - the pokemon index. Relevant for double-battles only (defaults to 0) * @param targetIndex - The {@linkcode BattlerIndex} of the Pokemon to target for single-target moves, or `null` if a manual call to `selectTarget()` is required */ - public selectWithTera(move: Moves, pkmIndex: 0 | 1 = 0, targetIndex?: BattlerIndex | null) { + public selectWithTera(move: MoveId, pkmIndex: 0 | 1 = 0, targetIndex?: BattlerIndex | null) { const movePosition = getMovePosition(this.game.scene, pkmIndex, move); this.game.scene.getPlayerParty()[pkmIndex].isTerastallized = false; @@ -105,7 +105,7 @@ export class MoveHelper extends GameManagerHelper { * @param targetIndex - (optional) The {@linkcode BattlerIndex} of the Pokemon to target for single-target moves, or `null` if a manual call to `selectTarget()` is required * @param useTera - If `true`, the Pokemon also chooses to Terastallize. This does not require a Tera Orb. Default: `false`. */ - public use(moveId: Moves, pkmIndex: 0 | 1 = 0, targetIndex?: BattlerIndex | null, useTera = false): void { + public use(moveId: MoveId, pkmIndex: 0 | 1 = 0, targetIndex?: BattlerIndex | null, useTera = false): void { if ([Overrides.MOVESET_OVERRIDE].flat().length > 0) { vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([]); console.warn("Warning: `use` overwrites the Pokemon's moveset and disables the player moveset override!"); @@ -147,9 +147,9 @@ export class MoveHelper extends GameManagerHelper { * Changes a pokemon's moveset to the given move(s). * Used when the normal moveset override can't be used (such as when it's necessary to check or update properties of the moveset). * @param pokemon - The {@linkcode Pokemon} being modified - * @param moveset - The {@linkcode Moves} (single or array) to change the Pokemon's moveset to + * @param moveset - The {@linkcode MoveId} (single or array) to change the Pokemon's moveset to */ - public changeMoveset(pokemon: Pokemon, moveset: Moves | Moves[]): void { + public changeMoveset(pokemon: Pokemon, moveset: MoveId | MoveId[]): void { if (!Array.isArray(moveset)) { moveset = [moveset]; } @@ -157,7 +157,7 @@ export class MoveHelper extends GameManagerHelper { moveset.forEach(move => { pokemon.moveset.push(new PokemonMove(move)); }); - const movesetStr = moveset.map(moveId => Moves[moveId]).join(", "); + const movesetStr = moveset.map(moveId => MoveId[moveId]).join(", "); console.log(`Pokemon ${pokemon.species.name}'s moveset manually set to ${movesetStr} (=[${moveset.join(", ")}])!`); } @@ -167,7 +167,7 @@ export class MoveHelper extends GameManagerHelper { * @param moveId The {@linkcode MoveId | move} the enemy will use * @param target (Optional) the {@linkcode BattlerIndex | target} which the enemy will use the given move against */ - public async selectEnemyMove(moveId: Moves, target?: BattlerIndex) { + public async selectEnemyMove(moveId: MoveId, target?: BattlerIndex) { // Wait for the next EnemyCommandPhase to start await this.game.phaseInterceptor.to("EnemyCommandPhase", false); const enemy = @@ -200,7 +200,7 @@ export class MoveHelper extends GameManagerHelper { * @param moveId The {@linkcode MoveId | move} the enemy will use * @param target (Optional) the {@linkcode BattlerIndex | target} which the enemy will use the given move against */ - public async forceEnemyMove(moveId: Moves, target?: BattlerIndex) { + public async forceEnemyMove(moveId: MoveId, target?: BattlerIndex) { // Wait for the next EnemyCommandPhase to start await this.game.phaseInterceptor.to("EnemyCommandPhase", false); diff --git a/test/testUtils/helpers/overridesHelper.ts b/test/testUtils/helpers/overridesHelper.ts index acc2e4d5cd0..32219fa833c 100644 --- a/test/testUtils/helpers/overridesHelper.ts +++ b/test/testUtils/helpers/overridesHelper.ts @@ -1,15 +1,15 @@ import type { Variant } from "#app/sprites/variant"; import { Weather } from "#app/data/weather"; -import { Abilities } from "#app/enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import type { ModifierOverride } from "#app/modifier/modifier-type"; import type { BattleStyle } from "#app/overrides"; import Overrides, { defaultOverrides } from "#app/overrides"; import type { Unlockables } from "#app/system/unlockables"; -import { Biome } from "#enums/biome"; -import { Moves } from "#enums/moves"; +import { BiomeId } from "#enums/biome-id"; +import { MoveId } from "#enums/move-id"; import type { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import type { WeatherType } from "#enums/weather-type"; import { expect, vi } from "vitest"; @@ -32,9 +32,9 @@ export class OverridesHelper extends GameManagerHelper { * @warning Any event listeners that are attached to [NewArenaEvent](events\battle-scene.ts) may need to be handled down the line * @param biome - The biome to set */ - public startingBiome(biome: Biome): this { + public startingBiome(biome: BiomeId): this { this.game.scene.newArena(biome); - this.log(`Starting biome set to ${Biome[biome]} (=${biome})!`); + this.log(`Starting biome set to ${BiomeId[biome]} (=${biome})!`); return this; } @@ -54,7 +54,7 @@ export class OverridesHelper extends GameManagerHelper { * @param level - The level to set * @returns `this` */ - public startingLevel(level: Species | number): this { + public startingLevel(level: SpeciesId | number): this { vi.spyOn(Overrides, "STARTING_LEVEL_OVERRIDE", "get").mockReturnValue(level); this.log(`Player Pokemon starting level set to ${level}!`); return this; @@ -103,13 +103,13 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Override the player pokemon's {@linkcode Species | species} - * @param species - The {@linkcode Species | species} to set + * Override the player pokemon's {@linkcode SpeciesId | species} + * @param species - The {@linkcode SpeciesId | species} to set * @returns `this` */ - public starterSpecies(species: Species | number): this { + public starterSpecies(species: SpeciesId | number): this { vi.spyOn(Overrides, "STARTER_SPECIES_OVERRIDE", "get").mockReturnValue(species); - this.log(`Player Pokemon species set to ${Species[species]} (=${species})!`); + this.log(`Player Pokemon species set to ${SpeciesId[species]} (=${species})!`); return this; } @@ -128,9 +128,9 @@ export class OverridesHelper extends GameManagerHelper { * @param species - The fusion species to set * @returns `this` */ - public starterFusionSpecies(species: Species | number): this { + public starterFusionSpecies(species: SpeciesId | number): this { vi.spyOn(Overrides, "STARTER_FUSION_SPECIES_OVERRIDE", "get").mockReturnValue(species); - this.log(`Player Pokemon fusion species set to ${Species[species]} (=${species})!`); + this.log(`Player Pokemon fusion species set to ${SpeciesId[species]} (=${species})!`); return this; } @@ -139,10 +139,10 @@ export class OverridesHelper extends GameManagerHelper { * @param forms - The forms to set * @returns `this` */ - public starterForms(forms: Partial>): this { + public starterForms(forms: Partial>): this { vi.spyOn(Overrides, "STARTER_FORM_OVERRIDES", "get").mockReturnValue(forms); const formsStr = Object.entries(forms) - .map(([speciesId, formIndex]) => `${Species[speciesId]}=${formIndex}`) + .map(([speciesId, formIndex]) => `${SpeciesId[speciesId]}=${formIndex}`) .join(", "); this.log(`Player Pokemon form set to: ${formsStr}!`); return this; @@ -160,29 +160,29 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Override the player pokemon's {@linkcode Abilities | ability}. - * @param ability - The {@linkcode Abilities | ability} to set + * Override the player pokemon's {@linkcode AbilityId | ability}. + * @param ability - The {@linkcode AbilityId | ability} to set * @returns `this` */ - public ability(ability: Abilities): this { + public ability(ability: AbilityId): this { vi.spyOn(Overrides, "ABILITY_OVERRIDE", "get").mockReturnValue(ability); - this.log(`Player Pokemon ability set to ${Abilities[ability]} (=${ability})!`); + this.log(`Player Pokemon ability set to ${AbilityId[ability]} (=${ability})!`); return this; } /** - * Override the player pokemon's **passive** {@linkcode Abilities | ability} - * @param passiveAbility - The **passive** {@linkcode Abilities | ability} to set + * Override the player pokemon's **passive** {@linkcode AbilityId | ability} + * @param passiveAbility - The **passive** {@linkcode AbilityId | ability} to set * @returns `this` */ - public passiveAbility(passiveAbility: Abilities): this { + public passiveAbility(passiveAbility: AbilityId): this { vi.spyOn(Overrides, "PASSIVE_ABILITY_OVERRIDE", "get").mockReturnValue(passiveAbility); - this.log(`Player Pokemon PASSIVE ability set to ${Abilities[passiveAbility]} (=${passiveAbility})!`); + this.log(`Player Pokemon PASSIVE ability set to ${AbilityId[passiveAbility]} (=${passiveAbility})!`); return this; } /** - * Forces the status of the player pokemon **passive** {@linkcode Abilities | ability} + * Forces the status of the player pokemon **passive** {@linkcode AbilityId | ability} * @param hasPassiveAbility - Forces the passive to be active if `true`, inactive if `false` * @returns `this` */ @@ -196,16 +196,16 @@ export class OverridesHelper extends GameManagerHelper { return this; } /** - * Override the player pokemon's {@linkcode Moves | moves}set - * @param moveset - The {@linkcode Moves | moves}set to set + * Override the player pokemon's {@linkcode MoveId | moves}set + * @param moveset - The {@linkcode MoveId | moves}set to set * @returns `this` */ - public moveset(moveset: Moves | Moves[]): this { + public moveset(moveset: MoveId | MoveId[]): this { vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue(moveset); if (!Array.isArray(moveset)) { moveset = [moveset]; } - const movesetStr = moveset.map(moveId => Moves[moveId]).join(", "); + const movesetStr = moveset.map(moveId => MoveId[moveId]).join(", "); this.log(`Player Pokemon moveset set to ${movesetStr} (=[${moveset.join(", ")}])!`); return this; } @@ -307,13 +307,13 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Override the {@linkcode Species | species} of enemy pokemon - * @param species - The {@linkcode Species | species} to set + * Override the {@linkcode SpeciesId | species} of enemy pokemon + * @param species - The {@linkcode SpeciesId | species} to set * @returns `this` */ - public enemySpecies(species: Species | number): this { + public enemySpecies(species: SpeciesId | number): this { vi.spyOn(Overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(species); - this.log(`Enemy Pokemon species set to ${Species[species]} (=${species})!`); + this.log(`Enemy Pokemon species set to ${SpeciesId[species]} (=${species})!`); return this; } @@ -332,36 +332,36 @@ export class OverridesHelper extends GameManagerHelper { * @param species - The fusion species to set * @returns `this` */ - public enemyFusionSpecies(species: Species | number): this { + public enemyFusionSpecies(species: SpeciesId | number): this { vi.spyOn(Overrides, "OPP_FUSION_SPECIES_OVERRIDE", "get").mockReturnValue(species); - this.log(`Enemy Pokemon fusion species set to ${Species[species]} (=${species})!`); + this.log(`Enemy Pokemon fusion species set to ${SpeciesId[species]} (=${species})!`); return this; } /** - * Override the {@linkcode Abilities | ability} of enemy pokemon - * @param ability - The {@linkcode Abilities | ability} to set + * Override the {@linkcode AbilityId | ability} of enemy pokemon + * @param ability - The {@linkcode AbilityId | ability} to set * @returns `this` */ - public enemyAbility(ability: Abilities): this { + public enemyAbility(ability: AbilityId): this { vi.spyOn(Overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(ability); - this.log(`Enemy Pokemon ability set to ${Abilities[ability]} (=${ability})!`); + this.log(`Enemy Pokemon ability set to ${AbilityId[ability]} (=${ability})!`); return this; } /** - * Override the **passive** {@linkcode Abilities | ability} of enemy pokemon - * @param passiveAbility - The **passive** {@linkcode Abilities | ability} to set + * Override the **passive** {@linkcode AbilityId | ability} of enemy pokemon + * @param passiveAbility - The **passive** {@linkcode AbilityId | ability} to set * @returns `this` */ - public enemyPassiveAbility(passiveAbility: Abilities): this { + public enemyPassiveAbility(passiveAbility: AbilityId): this { vi.spyOn(Overrides, "OPP_PASSIVE_ABILITY_OVERRIDE", "get").mockReturnValue(passiveAbility); - this.log(`Enemy Pokemon PASSIVE ability set to ${Abilities[passiveAbility]} (=${passiveAbility})!`); + this.log(`Enemy Pokemon PASSIVE ability set to ${AbilityId[passiveAbility]} (=${passiveAbility})!`); return this; } /** - * Forces the status of the enemy pokemon **passive** {@linkcode Abilities | ability} + * Forces the status of the enemy pokemon **passive** {@linkcode AbilityId | ability} * @param hasPassiveAbility - Forces the passive to be active if `true`, inactive if `false` * @returns `this` */ @@ -376,16 +376,16 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Override the {@linkcode Moves | move}set of enemy pokemon - * @param moveset - The {@linkcode Moves | move}set to set + * Override the {@linkcode MoveId | move}set of enemy pokemon + * @param moveset - The {@linkcode MoveId | move}set to set * @returns `this` */ - public enemyMoveset(moveset: Moves | Moves[]): this { + public enemyMoveset(moveset: MoveId | MoveId[]): this { vi.spyOn(Overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue(moveset); if (!Array.isArray(moveset)) { moveset = [moveset]; } - const movesetStr = moveset.map(moveId => Moves[moveId]).join(", "); + const movesetStr = moveset.map(moveId => MoveId[moveId]).join(", "); this.log(`Enemy Pokemon moveset set to ${movesetStr} (=[${moveset.join(", ")}])!`); return this; } diff --git a/test/ui/battle_info.test.ts b/test/ui/battle_info.test.ts index c4548adc49c..3049424e3d2 100644 --- a/test/ui/battle_info.test.ts +++ b/test/ui/battle_info.test.ts @@ -1,8 +1,8 @@ import { ExpGainsSpeed } from "#app/enums/exp-gains-speed"; -import { Species } from "#app/enums/species"; +import { SpeciesId } from "#enums/species-id"; import { ExpPhase } from "#app/phases/exp-phase"; -import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -31,11 +31,11 @@ describe("UI - Battle Info", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.GUILLOTINE, Moves.SPLASH]) + .moveset([MoveId.GUILLOTINE, MoveId.SPLASH]) .battleStyle("single") - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) - .enemySpecies(Species.CATERPIE); + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) + .enemySpecies(SpeciesId.CATERPIE); }); it.each([ExpGainsSpeed.FAST, ExpGainsSpeed.FASTER, ExpGainsSpeed.SKIP])( @@ -44,9 +44,9 @@ describe("UI - Battle Info", () => { game.settings.expGainsSpeed(expGainsSpeed); vi.spyOn(Math, "pow"); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to(ExpPhase, true); diff --git a/test/ui/pokedex.test.ts b/test/ui/pokedex.test.ts index 007fc43c3b9..573ce3fef89 100644 --- a/test/ui/pokedex.test.ts +++ b/test/ui/pokedex.test.ts @@ -4,8 +4,8 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, type MockInstan import PokedexUiHandler from "#app/ui/pokedex-ui-handler"; import { FilterTextRow } from "#app/ui/filter-text"; import { allAbilities } from "#app/data/data-lists"; -import { Abilities } from "#enums/abilities"; -import { Species } from "#enums/species"; +import { AbilityId } from "#enums/ability-id"; +import { SpeciesId } from "#enums/species-id"; import { allSpecies, getPokemonSpecies, type PokemonForm } from "#app/data/pokemon-species"; import { Button } from "#enums/buttons"; import { DropDownColumn } from "#enums/drop-down-column"; @@ -106,8 +106,8 @@ describe("UI - Pokedex", () => { * Compute a set of pokemon that have a specific ability in allAbilities * @param ability - The ability to filter for */ - function getSpeciesWithAbility(ability: Abilities): Set { - const speciesSet = new Set(); + function getSpeciesWithAbility(ability: AbilityId): Set { + const speciesSet = new Set(); for (const pkmn of allSpecies) { if ( [pkmn.ability1, pkmn.ability2, pkmn.getPassiveAbility(), pkmn.abilityHidden].includes(ability) || @@ -127,8 +127,8 @@ describe("UI - Pokedex", () => { * Includes all forms of the pokemon * @param types - The types to filter for */ - function getSpeciesWithType(...types: PokemonType[]): Set { - const speciesSet = new Set(); + function getSpeciesWithType(...types: PokemonType[]): Set { + const speciesSet = new Set(); const tySet = new Set(types); // get the pokemon and its forms @@ -164,18 +164,18 @@ describe("UI - Pokedex", () => { * @param setForms - Whether to also overwrite the abilities for each of the species' forms (defaults to `true`) */ function createAbilityMocks( - species: Species, + species: SpeciesId, { - ability = Abilities.NONE, - ability2 = Abilities.NONE, - hidden = Abilities.NONE, - passive = Abilities.NONE, + ability = AbilityId.NONE, + ability2 = AbilityId.NONE, + hidden = AbilityId.NONE, + passive = AbilityId.NONE, setForms = true, }: { - ability?: Abilities; - ability2?: Abilities; - hidden?: Abilities; - passive?: Abilities; + ability?: AbilityId; + ability2?: AbilityId; + hidden?: AbilityId; + passive?: AbilityId; setForms?: boolean; }, ) { @@ -201,13 +201,13 @@ describe("UI - Pokedex", () => { const pokedexHandler = await runToOpenPokedex(); // Get name of overgrow - const overgrow = allAbilities[Abilities.OVERGROW].name; + const overgrow = allAbilities[AbilityId.OVERGROW].name; // @ts-expect-error `filterText` is private pokedexHandler.filterText.setValue(FilterTextRow.ABILITY_1, overgrow); // filter all species to be the pokemon that have overgrow - const overgrowSpecies = getSpeciesWithAbility(Abilities.OVERGROW); + const overgrowSpecies = getSpeciesWithAbility(AbilityId.OVERGROW); // @ts-expect-error - `filteredPokemonData` is private const filteredSpecies = new Set(pokedexHandler.filteredPokemonData.map(pokemon => pokemon.species.speciesId)); @@ -216,34 +216,34 @@ describe("UI - Pokedex", () => { it("should filter to show only pokemon with ability and passive when filtering by 2 abilities", async () => { // Setup mocks for the ability and passive combinations - const whitelist: Species[] = []; - const blacklist: Species[] = []; + const whitelist: SpeciesId[] = []; + const blacklist: SpeciesId[] = []; - const filter_ab1 = Abilities.OVERGROW; - const filter_ab2 = Abilities.ADAPTABILITY; + const filter_ab1 = AbilityId.OVERGROW; + const filter_ab2 = AbilityId.ADAPTABILITY; const ab1_instance = allAbilities[filter_ab1]; const ab2_instance = allAbilities[filter_ab2]; // Create a species with passive set and each "ability" field const baseObj = { - ability: Abilities.BALL_FETCH, - ability2: Abilities.NONE, - hidden: Abilities.BLAZE, - passive: Abilities.TORRENT, + ability: AbilityId.BALL_FETCH, + ability2: AbilityId.NONE, + hidden: AbilityId.BLAZE, + passive: AbilityId.TORRENT, }; // Mock pokemon to have the exhaustive combination of the two selected abilities const attrs: (keyof typeof baseObj)[] = ["ability", "ability2", "hidden", "passive"]; for (const [idx, value] of permutations(attrs, 2).entries()) { - createAbilityMocks(Species.BULBASAUR + idx, { + createAbilityMocks(SpeciesId.BULBASAUR + idx, { ...baseObj, [value[0]]: filter_ab1, [value[1]]: filter_ab2, }); if (value.includes("passive")) { - whitelist.push(Species.BULBASAUR + idx); + whitelist.push(SpeciesId.BULBASAUR + idx); } else { - blacklist.push(Species.BULBASAUR + idx); + blacklist.push(SpeciesId.BULBASAUR + idx); } } @@ -318,12 +318,12 @@ describe("UI - Pokedex", () => { } const expectedPokemon = new Set([ - Species.CHIKORITA, - Species.CYNDAQUIL, - Species.TORCHIC, - Species.TURTWIG, - Species.EKANS, - Species.MUDKIP, + SpeciesId.CHIKORITA, + SpeciesId.CYNDAQUIL, + SpeciesId.TORCHIC, + SpeciesId.TURTWIG, + SpeciesId.EKANS, + SpeciesId.MUDKIP, ]); expect( // @ts-expect-error - `filteredPokemonData` is private @@ -345,7 +345,7 @@ describe("UI - Pokedex", () => { expect( // @ts-expect-error - `filteredPokemonData` is private pokedexHandler.filteredPokemonData.every( - pokemon => pokedexHandler.getStarterSpeciesId(pokemon.species.speciesId) === Species.MUDKIP, + pokemon => pokedexHandler.getStarterSpeciesId(pokemon.species.speciesId) === SpeciesId.MUDKIP, ), ).toBe(true); }); @@ -359,11 +359,11 @@ describe("UI - Pokedex", () => { // Cycling 4 times to get to the "can unlock" for passive const expectedPokemon = new Set([ - Species.EKANS, - Species.CHIKORITA, - Species.CYNDAQUIL, - Species.TORCHIC, - Species.TURTWIG, + SpeciesId.EKANS, + SpeciesId.CHIKORITA, + SpeciesId.CYNDAQUIL, + SpeciesId.TORCHIC, + SpeciesId.TURTWIG, ]); // cycling twice to get to the "can unlock" for passive @@ -382,7 +382,7 @@ describe("UI - Pokedex", () => { await game.importData("./test/testUtils/saves/data_pokedex_tests.prsv"); const pokedexHandler = await runToOpenPokedex(); - const expectedPokemon = new Set([Species.TREECKO, Species.CYNDAQUIL, Species.TOTODILE]); + const expectedPokemon = new Set([SpeciesId.TREECKO, SpeciesId.CYNDAQUIL, SpeciesId.TOTODILE]); // @ts-expect-error - `filterBar` is private const filter = pokedexHandler.filterBar.getFilter(DropDownColumn.UNLOCKS); @@ -401,7 +401,7 @@ describe("UI - Pokedex", () => { await game.importData("./test/testUtils/saves/data_pokedex_tests.prsv"); const pokedexHandler = await runToOpenPokedex(); - const expectedPokemon = new Set([Species.CYNDAQUIL, Species.TOTODILE]); + const expectedPokemon = new Set([SpeciesId.CYNDAQUIL, SpeciesId.TOTODILE]); // @ts-expect-error - `filterBar` is private const filter = pokedexHandler.filterBar.getFilter(DropDownColumn.UNLOCKS); @@ -431,7 +431,7 @@ describe("UI - Pokedex", () => { expect( // @ts-expect-error - `filteredPokemonData` is private pokedexHandler.filteredPokemonData.every( - pokemon => pokedexHandler.getStarterSpeciesId(pokemon.species.speciesId) === Species.TREECKO, + pokemon => pokedexHandler.getStarterSpeciesId(pokemon.species.speciesId) === SpeciesId.TREECKO, ), ).toBe(true); }); @@ -448,7 +448,7 @@ describe("UI - Pokedex", () => { // Red shiny expect(filteredPokemon.length).toBe(1); - expect(filteredPokemon[0], "tier 1 shiny").toBe(Species.CATERPIE); + expect(filteredPokemon[0], "tier 1 shiny").toBe(SpeciesId.CATERPIE); // tier 2 shiny filter.toggleOptionState(3); @@ -457,14 +457,14 @@ describe("UI - Pokedex", () => { // @ts-expect-error - `filteredPokemonData` is private filteredPokemon = pokedexHandler.filteredPokemonData.map(pokemon => pokemon.species.speciesId); expect(filteredPokemon.length).toBe(1); - expect(filteredPokemon[0], "tier 2 shiny").toBe(Species.RATTATA); + expect(filteredPokemon[0], "tier 2 shiny").toBe(SpeciesId.RATTATA); filter.toggleOptionState(2); filter.toggleOptionState(1); // @ts-expect-error - `filteredPokemonData` is private filteredPokemon = pokedexHandler.filteredPokemonData.map(pokemon => pokemon.species.speciesId); expect(filteredPokemon.length).toBe(1); - expect(filteredPokemon[0], "tier 3 shiny").toBe(Species.EKANS); + expect(filteredPokemon[0], "tier 3 shiny").toBe(SpeciesId.EKANS); // filter by no shiny filter.toggleOptionState(1); @@ -473,9 +473,9 @@ describe("UI - Pokedex", () => { // @ts-expect-error - `filteredPokemonData` is private filteredPokemon = pokedexHandler.filteredPokemonData.map(pokemon => pokemon.species.speciesId); expect(filteredPokemon.length).toBe(27); - expect(filteredPokemon, "not shiny").not.toContain(Species.CATERPIE); - expect(filteredPokemon, "not shiny").not.toContain(Species.RATTATA); - expect(filteredPokemon, "not shiny").not.toContain(Species.EKANS); + expect(filteredPokemon, "not shiny").not.toContain(SpeciesId.CATERPIE); + expect(filteredPokemon, "not shiny").not.toContain(SpeciesId.RATTATA); + expect(filteredPokemon, "not shiny").not.toContain(SpeciesId.EKANS); }); /**************************** @@ -518,10 +518,10 @@ describe("UI - Pokedex", () => { it("should show caught battle form as caught", async () => { await game.importData("./test/testUtils/saves/data_pokedex_tests_v2.prsv"); - const pageHandler = await runToPokedexPage(getPokemonSpecies(Species.VENUSAUR), { form: 1 }); + const pageHandler = await runToPokedexPage(getPokemonSpecies(SpeciesId.VENUSAUR), { form: 1 }); // @ts-expect-error - `species` is private - expect(pageHandler.species.speciesId).toEqual(Species.VENUSAUR); + expect(pageHandler.species.speciesId).toEqual(SpeciesId.VENUSAUR); // @ts-expect-error - `formIndex` is private expect(pageHandler.formIndex).toEqual(1); @@ -533,10 +533,10 @@ describe("UI - Pokedex", () => { //TODO: check tint of the sprite it("should show uncaught battle form as seen", async () => { await game.importData("./test/testUtils/saves/data_pokedex_tests_v2.prsv"); - const pageHandler = await runToPokedexPage(getPokemonSpecies(Species.VENUSAUR), { form: 2 }); + const pageHandler = await runToPokedexPage(getPokemonSpecies(SpeciesId.VENUSAUR), { form: 2 }); // @ts-expect-error - `species` is private - expect(pageHandler.species.speciesId).toEqual(Species.VENUSAUR); + expect(pageHandler.species.speciesId).toEqual(SpeciesId.VENUSAUR); // @ts-expect-error - `formIndex` is private expect(pageHandler.formIndex).toEqual(2); diff --git a/test/ui/starter-select.test.ts b/test/ui/starter-select.test.ts index b402e02e2d7..10a804b805d 100644 --- a/test/ui/starter-select.test.ts +++ b/test/ui/starter-select.test.ts @@ -10,9 +10,9 @@ import type SaveSlotSelectUiHandler from "#app/ui/save-slot-select-ui-handler"; import type OptionSelectUiHandler from "#app/ui/settings/option-select-ui-handler"; import type StarterSelectUiHandler from "#app/ui/starter-select-ui-handler"; import { UiMode } from "#enums/ui-mode"; -import { Abilities } from "#enums/abilities"; +import { AbilityId } from "#enums/ability-id"; import { Button } from "#enums/buttons"; -import { Species } from "#enums/species"; +import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import i18next from "i18next"; import Phaser from "phaser"; @@ -90,7 +90,7 @@ describe("UI - Starter select", () => { }); await game.phaseInterceptor.whenAboutToRun(EncounterPhase); - expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(Species.BULBASAUR); + expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(SpeciesId.BULBASAUR); expect(game.scene.getPlayerParty()[0].shiny).toBe(true); expect(game.scene.getPlayerParty()[0].variant).toBe(2); expect(game.scene.getPlayerParty()[0].gender).toBe(Gender.MALE); @@ -151,11 +151,11 @@ describe("UI - Starter select", () => { }); await game.phaseInterceptor.whenAboutToRun(EncounterPhase); - expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(Species.BULBASAUR); + expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(SpeciesId.BULBASAUR); expect(game.scene.getPlayerParty()[0].shiny).toBe(true); expect(game.scene.getPlayerParty()[0].variant).toBe(2); expect(game.scene.getPlayerParty()[0].nature).toBe(Nature.HARDY); - expect(game.scene.getPlayerParty()[0].getAbility().id).toBe(Abilities.OVERGROW); + expect(game.scene.getPlayerParty()[0].getAbility().id).toBe(AbilityId.OVERGROW); }, 20000); it("Bulbasaur - shiny - variant 2 female lonely chlorophyl", async () => { @@ -215,12 +215,12 @@ describe("UI - Starter select", () => { }); await game.phaseInterceptor.whenAboutToRun(EncounterPhase); - expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(Species.BULBASAUR); + expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(SpeciesId.BULBASAUR); expect(game.scene.getPlayerParty()[0].shiny).toBe(true); expect(game.scene.getPlayerParty()[0].variant).toBe(2); expect(game.scene.getPlayerParty()[0].gender).toBe(Gender.FEMALE); expect(game.scene.getPlayerParty()[0].nature).toBe(Nature.LONELY); - expect(game.scene.getPlayerParty()[0].getAbility().id).toBe(Abilities.CHLOROPHYLL); + expect(game.scene.getPlayerParty()[0].getAbility().id).toBe(AbilityId.CHLOROPHYLL); }, 20000); it("Bulbasaur - shiny - variant 2 female", async () => { @@ -278,7 +278,7 @@ describe("UI - Starter select", () => { }); await game.phaseInterceptor.whenAboutToRun(EncounterPhase); - expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(Species.BULBASAUR); + expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(SpeciesId.BULBASAUR); expect(game.scene.getPlayerParty()[0].shiny).toBe(true); expect(game.scene.getPlayerParty()[0].variant).toBe(2); expect(game.scene.getPlayerParty()[0].gender).toBe(Gender.FEMALE); @@ -339,7 +339,7 @@ describe("UI - Starter select", () => { }); await game.phaseInterceptor.whenAboutToRun(EncounterPhase); - expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(Species.BULBASAUR); + expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(SpeciesId.BULBASAUR); expect(game.scene.getPlayerParty()[0].shiny).toBe(false); expect(game.scene.getPlayerParty()[0].variant).toBe(0); }, 20000); @@ -401,7 +401,7 @@ describe("UI - Starter select", () => { }); await game.phaseInterceptor.whenAboutToRun(EncounterPhase); - expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(Species.BULBASAUR); + expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(SpeciesId.BULBASAUR); expect(game.scene.getPlayerParty()[0].shiny).toBe(true); expect(game.scene.getPlayerParty()[0].variant).toBe(1); }, 20000); @@ -462,7 +462,7 @@ describe("UI - Starter select", () => { }); await game.phaseInterceptor.whenAboutToRun(EncounterPhase); - expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(Species.BULBASAUR); + expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(SpeciesId.BULBASAUR); expect(game.scene.getPlayerParty()[0].shiny).toBe(true); expect(game.scene.getPlayerParty()[0].variant).toBe(0); }, 20000); @@ -528,7 +528,7 @@ describe("UI - Starter select", () => { saveSlotSelectUiHandler.processInput(Button.ACTION); }); await game.phaseInterceptor.whenAboutToRun(EncounterPhase); - expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(Species.CATERPIE); + expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(SpeciesId.CATERPIE); }, 20000); it("Check if first pokemon in party is nidoran_m from gen 1 and 2nd row, 4th column (cursor (9+4)-1)", async () => { @@ -594,6 +594,6 @@ describe("UI - Starter select", () => { saveSlotSelectUiHandler.processInput(Button.ACTION); }); await game.phaseInterceptor.whenAboutToRun(EncounterPhase); - expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(Species.NIDORAN_M); + expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(SpeciesId.NIDORAN_M); }, 20000); }); diff --git a/test/ui/transfer-item.test.ts b/test/ui/transfer-item.test.ts index f0ea8f84005..b08c9823dcd 100644 --- a/test/ui/transfer-item.test.ts +++ b/test/ui/transfer-item.test.ts @@ -1,7 +1,7 @@ import { BerryType } from "#app/enums/berry-type"; import { Button } from "#app/enums/buttons"; -import { Moves } from "#app/enums/moves"; -import { Species } from "#app/enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import PartyUiHandler, { PartyUiMode } from "#app/ui/party-ui-handler"; import { UiMode } from "#enums/ui-mode"; @@ -34,13 +34,13 @@ describe("UI - Transfer Items", () => { { name: "BERRY", count: 2, type: BerryType.APICOT }, { name: "BERRY", count: 2, type: BerryType.LUM }, ]); - game.override.moveset([Moves.DRAGON_CLAW]); - game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyMoveset([Moves.SPLASH]); + game.override.moveset([MoveId.DRAGON_CLAW]); + game.override.enemySpecies(SpeciesId.MAGIKARP); + game.override.enemyMoveset([MoveId.SPLASH]); - await game.classicMode.startBattle([Species.RAYQUAZA, Species.RAYQUAZA, Species.RAYQUAZA]); + await game.classicMode.startBattle([SpeciesId.RAYQUAZA, SpeciesId.RAYQUAZA, SpeciesId.RAYQUAZA]); - game.move.select(Moves.DRAGON_CLAW); + game.move.select(MoveId.DRAGON_CLAW); game.onNextPrompt("SelectModifierPhase", UiMode.MODIFIER_SELECT, () => { expect(game.scene.ui.getHandler()).toBeInstanceOf(ModifierSelectUiHandler); diff --git a/test/ui/type-hints.test.ts b/test/ui/type-hints.test.ts index b32f5ed9b88..6b0bc6e5ea5 100644 --- a/test/ui/type-hints.test.ts +++ b/test/ui/type-hints.test.ts @@ -1,6 +1,6 @@ import { Button } from "#app/enums/buttons"; -import { Moves } from "#app/enums/moves"; -import { Species } from "#app/enums/species"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; import { CommandPhase } from "#app/phases/command-phase"; import FightUiHandler from "#app/ui/fight-ui-handler"; import { UiMode } from "#enums/ui-mode"; @@ -27,7 +27,7 @@ describe("UI - Type Hints", () => { beforeEach(async () => { game = new GameManager(phaserGame); game.settings.typeHints(true); //activate type hints - game.override.battleStyle("single").startingLevel(100).startingWave(1).enemyMoveset(Moves.SPLASH); + game.override.battleStyle("single").startingLevel(100).startingWave(1).enemyMoveset(MoveId.SPLASH); }); it("check immunity color", async () => { @@ -35,12 +35,12 @@ describe("UI - Type Hints", () => { .battleStyle("single") .startingLevel(100) .startingWave(1) - .enemySpecies(Species.FLORGES) - .enemyMoveset(Moves.SPLASH) - .moveset([Moves.DRAGON_CLAW]); + .enemySpecies(SpeciesId.FLORGES) + .enemyMoveset(MoveId.SPLASH) + .moveset([MoveId.DRAGON_CLAW]); game.settings.typeHints(true); //activate type hints - await game.classicMode.startBattle([Species.RAYQUAZA]); + await game.classicMode.startBattle([SpeciesId.RAYQUAZA]); game.onNextPrompt("CommandPhase", UiMode.COMMAND, () => { const { ui } = game.scene; @@ -63,9 +63,9 @@ describe("UI - Type Hints", () => { }); it("check status move color", async () => { - game.override.enemySpecies(Species.FLORGES).moveset([Moves.GROWL]); + game.override.enemySpecies(SpeciesId.FLORGES).moveset([MoveId.GROWL]); - await game.classicMode.startBattle([Species.RAYQUAZA]); + await game.classicMode.startBattle([SpeciesId.RAYQUAZA]); game.onNextPrompt("CommandPhase", UiMode.COMMAND, () => { const { ui } = game.scene; @@ -89,18 +89,18 @@ describe("UI - Type Hints", () => { it("should show the proper hint for a move in doubles after one of the enemy pokemon flees", async () => { game.override - .enemySpecies(Species.ABRA) - .moveset([Moves.SPLASH, Moves.SHADOW_BALL, Moves.SOAK]) - .enemyMoveset([Moves.SPLASH, Moves.TELEPORT]) + .enemySpecies(SpeciesId.ABRA) + .moveset([MoveId.SPLASH, MoveId.SHADOW_BALL, MoveId.SOAK]) + .enemyMoveset([MoveId.SPLASH, MoveId.TELEPORT]) .battleStyle("double"); - await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); - game.move.select(Moves.SPLASH); + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]); + game.move.select(MoveId.SPLASH); // Use soak to change type of remaining abra to water - game.move.select(Moves.SOAK, 1); + game.move.select(MoveId.SOAK, 1); - await game.move.selectEnemyMove(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.TELEPORT); + await game.move.selectEnemyMove(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.TELEPORT); await game.toNextTurn(); game.onNextPrompt("CommandPhase", UiMode.COMMAND, () => { From fb6d6f5b697e253dff1f6434f705ea86692992aa Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Wed, 4 Jun 2025 23:57:10 -0500 Subject: [PATCH 197/262] [Dev] Add non type imports depcruiser check (#5901) * Forbid non type imports in type and enum files * Allow orphans in src/@types --- .dependency-cruiser.cjs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.dependency-cruiser.cjs b/.dependency-cruiser.cjs index b7de80a70de..40a9785aeaf 100644 --- a/.dependency-cruiser.cjs +++ b/.dependency-cruiser.cjs @@ -1,6 +1,17 @@ /** @type {import('dependency-cruiser').IConfiguration} */ module.exports = { forbidden: [ + { + name: "only-type-imports", + severity: "error", + comment: "Files in enums and @types may only use type imports.", + from: { + path: ["(^|/)src/@types", "(^|/)src/enums"], + }, + to: { + dependencyTypesNot: ["type-only"], + }, + }, { name: "no-circular-at-runtime", severity: "warn", @@ -31,6 +42,8 @@ module.exports = { "[.]d[.]ts$", // TypeScript declaration files "(^|/)tsconfig[.]json$", // TypeScript config "(^|/)(?:babel|webpack)[.]config[.](?:js|cjs|mjs|ts|cts|mts|json)$", // other configs + // anything in src/@types + "(^|/)src/@types/", ], }, to: {}, From 39b8dc9a85de11ad7441bb1fd9020cdc9b02fe8d Mon Sep 17 00:00:00 2001 From: Wlowscha <54003515+Wlowscha@users.noreply.github.com> Date: Thu, 5 Jun 2025 23:54:50 +0200 Subject: [PATCH 198/262] [Refactor] Removing unused logic for mbh/grip claw (#5914) * Removing unused logic for mbh/grip claw * Updated docstring --------- Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> --- src/modifier/modifier.ts | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 11631b64451..2bebbcae90c 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -40,7 +40,6 @@ import { type TerastallizeModifierType, type TmModifierType, getModifierType, - ModifierPoolType, ModifierTypeGenerator, modifierTypes, PokemonHeldItemModifierType, @@ -3232,8 +3231,7 @@ export abstract class HeldItemTransferModifier extends PokemonHeldItemModifier { } /** - * Steals an item from a set of target Pokemon. - * This prioritizes high-tier held items when selecting the item to steal. + * Steals an item, chosen randomly, from a set of target Pokemon. * @param pokemon The {@linkcode Pokemon} holding this item * @param target The {@linkcode Pokemon} to steal from (optional) * @param _args N/A @@ -3253,30 +3251,15 @@ export abstract class HeldItemTransferModifier extends PokemonHeldItemModifier { return false; } - const poolType = pokemon.isPlayer() - ? ModifierPoolType.PLAYER - : pokemon.hasTrainer() - ? ModifierPoolType.TRAINER - : ModifierPoolType.WILD; - const transferredModifierTypes: ModifierType[] = []; const itemModifiers = globalScene.findModifiers( m => m instanceof PokemonHeldItemModifier && m.pokemonId === targetPokemon.id && m.isTransferable, targetPokemon.isPlayer(), ) as PokemonHeldItemModifier[]; - let highestItemTier = itemModifiers - .map(m => m.type.getOrInferTier(poolType)) - .reduce((highestTier, tier) => Math.max(tier!, highestTier), 0); // TODO: is this bang correct? - let tierItemModifiers = itemModifiers.filter(m => m.type.getOrInferTier(poolType) === highestItemTier); for (let i = 0; i < transferredItemCount; i++) { - if (!tierItemModifiers.length) { - while (highestItemTier-- && !tierItemModifiers.length) { - tierItemModifiers = itemModifiers.filter(m => m.type.tier === highestItemTier); - } - if (!tierItemModifiers.length) { - break; - } + if (!itemModifiers.length) { + break; } const randItemIndex = pokemon.randBattleSeedInt(itemModifiers.length); const randItem = itemModifiers[randItemIndex]; From 193c5ffb0ca9b0669d687170ab175c6d4c617b56 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Thu, 5 Jun 2025 17:18:07 -0500 Subject: [PATCH 199/262] [UI/UX] Move Reload Required text to bottom of settings (#5928) * Move Reload Required text to bottom of settings * Remove unneeded reloadRequiredText field --- src/ui/settings/abstract-settings-ui-handler.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/ui/settings/abstract-settings-ui-handler.ts b/src/ui/settings/abstract-settings-ui-handler.ts index 27ca95c25ac..1fb4b6d34dc 100644 --- a/src/ui/settings/abstract-settings-ui-handler.ts +++ b/src/ui/settings/abstract-settings-ui-handler.ts @@ -108,10 +108,12 @@ export default class AbstractSettingsUiHandler extends MessageUiHandler { this.reloadSettings = this.settings.filter(s => s?.requireReload); + let anyReloadRequired = false; this.settings.forEach((setting, s) => { let settingName = setting.label; if (setting?.requireReload) { - settingName += ` (${i18next.t("settings:requireReload")})`; + settingName += "*"; + anyReloadRequired = true; } this.settingLabels[s] = addTextObject(8, 28 + s * 16, settingName, TextStyle.SETTINGS_LABEL); @@ -187,6 +189,14 @@ export default class AbstractSettingsUiHandler extends MessageUiHandler { this.settingsContainer.add(iconAction); this.settingsContainer.add(iconCancel); this.settingsContainer.add(actionText); + // Only add the ReloadRequired text on pages that have settings that require a reload. + if (anyReloadRequired) { + const reloadRequired = addTextObject(0, 0, `*${i18next.t("settings:requireReload")}`, TextStyle.SETTINGS_LABEL) + .setOrigin(0, 0.15) + .setPositionRelative(actionsBg, 6, 0) + .setY(actionText.y); + this.settingsContainer.add(reloadRequired); + } this.settingsContainer.add(cancelText); this.settingsContainer.add(this.messageBoxContainer); From 0c54fc1be064a815b5bf6609208e4b2e4801d56e Mon Sep 17 00:00:00 2001 From: PrabbyDD <147005742+PrabbyDD@users.noreply.github.com> Date: Thu, 5 Jun 2025 15:22:27 -0700 Subject: [PATCH 200/262] [Bug] Fix no EXP awarded if all active pokemon faint (#4688) Party pokemon will now gain EXP from EXP Share even if all the active pokemon are fainted --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/phases/faint-phase.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index bf0adf77061..cd40026e55f 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -78,10 +78,15 @@ export class FaintPhase extends PokemonPhase { } } - /** In case the current pokemon was just switched in, make sure it is counted as participating in the combat */ + /** + * In case the current pokemon was just switched in, make sure it is counted as participating in the combat. + * For EXP_SHARE purposes, if the current pokemon faints as the combat ends and it was the ONLY player pokemon + * involved in combat, it needs to be counted as a participant so the other party pokemon can get their EXP, + * so the fainted pokemon has been included. + */ for (const pokemon of globalScene.getPlayerField()) { - if (pokemon?.isActive(true) && pokemon.isPlayer()) { - globalScene.currentBattle.addParticipant(pokemon as PlayerPokemon); + if (pokemon?.isActive() || pokemon?.isFainted()) { + globalScene.currentBattle.addParticipant(pokemon); } } From e82e18250761a2d33af09c3af06487812c830378 Mon Sep 17 00:00:00 2001 From: Lugiad <2070109+Adri1@users.noreply.github.com> Date: Fri, 6 Jun 2025 18:33:13 +0200 Subject: [PATCH 201/262] [UI/UX] [Localization] Russian Gatcha Text Resize (#5929) Russian Gatch Text Resize Co-authored-by: Wlowscha <54003515+Wlowscha@users.noreply.github.com> --- src/ui/egg-gacha-ui-handler.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ui/egg-gacha-ui-handler.ts b/src/ui/egg-gacha-ui-handler.ts index 1bb7124d935..a9a978548a8 100644 --- a/src/ui/egg-gacha-ui-handler.ts +++ b/src/ui/egg-gacha-ui-handler.ts @@ -108,7 +108,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { let pokemonIconX = -20; let pokemonIconY = 6; - if (["de", "es-ES", "es-MX", "fr", "ko", "pt-BR"].includes(currentLanguage)) { + if (["de", "es-ES", "es-MX", "fr", "ko", "pt-BR", "ru"].includes(currentLanguage)) { gachaTextStyle = TextStyle.SMALLER_WINDOW_ALT; gachaX = 2; gachaY = 2; @@ -150,7 +150,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { gachaInfoContainer.add(pokemonIcon); break; case GachaType.MOVE: - if (["de", "es-ES", "fr", "pt-BR"].includes(currentLanguage)) { + if (["de", "es-ES", "fr", "pt-BR", "ru"].includes(currentLanguage)) { gachaUpLabel.setAlign("center"); gachaUpLabel.setY(0); } @@ -160,7 +160,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { gachaUpLabel.setOrigin(0.5, 0); break; case GachaType.SHINY: - if (["de", "fr", "ko"].includes(currentLanguage)) { + if (["de", "fr", "ko", "ru"].includes(currentLanguage)) { gachaUpLabel.setAlign("center"); gachaUpLabel.setY(0); } From 178de207f1885769e2c9a8440343d5ea98fb1d61 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Fri, 6 Jun 2025 14:34:38 -0500 Subject: [PATCH 202/262] [Refactor] Cleanup egg list ui handler (#5890) Cleanup egg list ui handler Co-authored-by: Wlowscha <54003515+Wlowscha@users.noreply.github.com> --- src/ui/egg-list-ui-handler.ts | 93 +++++++++++++++-------------------- 1 file changed, 39 insertions(+), 54 deletions(-) diff --git a/src/ui/egg-list-ui-handler.ts b/src/ui/egg-list-ui-handler.ts index 9f41feea8ab..9a1b1f51e25 100644 --- a/src/ui/egg-list-ui-handler.ts +++ b/src/ui/egg-list-ui-handler.ts @@ -35,81 +35,70 @@ export default class EggListUiHandler extends MessageUiHandler { setup() { const ui = this.getUi(); - this.eggListContainer = globalScene.add.container(0, -globalScene.game.canvas.height / 6); - this.eggListContainer.setVisible(false); + this.eggListContainer = globalScene.add.container(0, -globalScene.game.canvas.height / 6).setVisible(false); ui.add(this.eggListContainer); - const bgColor = globalScene.add.rectangle( - 0, - 0, - globalScene.game.canvas.width / 6, - globalScene.game.canvas.height / 6, - 0x006860, - ); - bgColor.setOrigin(0, 0); - this.eggListContainer.add(bgColor); + const bgColor = globalScene.add + .rectangle(0, 0, globalScene.game.canvas.width / 6, globalScene.game.canvas.height / 6, 0x006860) + .setOrigin(0); - const eggListBg = globalScene.add.image(0, 0, "egg_list_bg"); - eggListBg.setOrigin(0, 0); - this.eggListContainer.add(eggListBg); - - this.eggListContainer.add(addWindow(1, 85, 106, 22)); - this.eggListContainer.add(addWindow(1, 102, 106, 50, true)); - this.eggListContainer.add(addWindow(1, 147, 106, 32, true)); - this.eggListContainer.add(addWindow(107, 1, 212, 178)); + const eggListBg = globalScene.add.image(0, 0, "egg_list_bg").setOrigin(0); this.iconAnimHandler = new PokemonIconAnimHandler(); this.iconAnimHandler.setup(); - this.eggNameText = addTextObject(8, 68, "", TextStyle.SUMMARY); - this.eggNameText.setOrigin(0, 0); - this.eggListContainer.add(this.eggNameText); + this.eggNameText = addTextObject(8, 68, "", TextStyle.SUMMARY).setOrigin(0); this.eggDateText = addTextObject(8, 91, "", TextStyle.TOOLTIP_CONTENT); - this.eggListContainer.add(this.eggDateText); - this.eggHatchWavesText = addTextObject(8, 108, "", TextStyle.TOOLTIP_CONTENT); - this.eggHatchWavesText.setWordWrapWidth(540); - this.eggListContainer.add(this.eggHatchWavesText); + this.eggHatchWavesText = addTextObject(8, 108, "", TextStyle.TOOLTIP_CONTENT).setWordWrapWidth(540); - this.eggGachaInfoText = addTextObject(8, 152, "", TextStyle.TOOLTIP_CONTENT); - this.eggGachaInfoText.setWordWrapWidth(540); - this.eggListContainer.add(this.eggGachaInfoText); + this.eggGachaInfoText = addTextObject(8, 152, "", TextStyle.TOOLTIP_CONTENT).setWordWrapWidth(540); this.eggListIconContainer = globalScene.add.container(113, 5); - this.eggListContainer.add(this.eggListIconContainer); - this.cursorObj = globalScene.add.image(0, 0, "select_cursor"); - this.cursorObj.setOrigin(0, 0); - this.eggListContainer.add(this.cursorObj); + this.cursorObj = globalScene.add.image(0, 0, "select_cursor").setOrigin(0); this.eggSprite = globalScene.add.sprite(54, 37, "egg"); - this.eggListContainer.add(this.eggSprite); const scrollBar = new ScrollBar(310, 5, 4, 170, this.ROWS); - this.eggListContainer.add(scrollBar); this.scrollGridHandler = new ScrollableGridUiHandler(this, this.ROWS, this.COLUMNS) .withScrollBar(scrollBar) .withUpdateGridCallBack(() => this.updateEggIcons()) .withUpdateSingleElementCallback((i: number) => this.setEggDetails(i)); - this.eggListMessageBoxContainer = globalScene.add.container(0, globalScene.game.canvas.height / 6); - this.eggListMessageBoxContainer.setVisible(false); - this.eggListContainer.add(this.eggListMessageBoxContainer); + this.eggListMessageBoxContainer = globalScene.add + .container(0, globalScene.game.canvas.height / 6) + .setVisible(false); - const eggListMessageBox = addWindow(1, -1, 318, 28); - eggListMessageBox.setOrigin(0, 1); + const eggListMessageBox = addWindow(1, -1, 318, 28).setOrigin(0, 1); this.eggListMessageBoxContainer.add(eggListMessageBox); - this.message = addTextObject(8, -8, "", TextStyle.WINDOW, { maxLines: 1 }); - this.message.setOrigin(0, 1); - this.eggListMessageBoxContainer.add(this.message); + // Message isn't used, but is expected to exist as this subclasses MessageUiHandler + this.message = addTextObject(8, -8, "", TextStyle.WINDOW, { maxLines: 1 }).setActive(false).setVisible(false); this.cursor = -1; + + this.eggListContainer.add([ + bgColor, + eggListBg, + addWindow(1, 85, 106, 22), + addWindow(1, 102, 106, 50, true), + addWindow(1, 147, 106, 32, true), + addWindow(107, 1, 212, 178), + this.eggNameText, + this.eggDateText, + this.eggHatchWavesText, + this.eggGachaInfoText, + this.eggListIconContainer, + this.cursorObj, + this.eggSprite, + scrollBar, + ]); } - show(args: any[]): boolean { + override show(args: any[]): boolean { super.show(args); this.initEggIcons(); @@ -134,9 +123,10 @@ export default class EggListUiHandler extends MessageUiHandler { for (let i = 0; i < Math.min(this.ROWS * this.COLUMNS, globalScene.gameData.eggs.length); i++) { const x = (i % this.COLUMNS) * 18; const y = Math.floor(i / this.COLUMNS) * 18; - const icon = globalScene.add.sprite(x - 2, y + 2, "egg_icons"); - icon.setScale(0.5); - icon.setOrigin(0, 0); + const icon = globalScene.add + .sprite(x - 2, y + 2, "egg_icons") + .setScale(0.5) + .setOrigin(0); this.eggListIconContainer.add(icon); this.eggIcons.push(icon); } @@ -148,15 +138,13 @@ export default class EggListUiHandler extends MessageUiHandler { private updateEggIcons() { const indexOffset = this.scrollGridHandler.getItemOffset(); const eggsToShow = Math.min(this.eggIcons.length, globalScene.gameData.eggs.length - indexOffset); - this.eggIcons.forEach((icon, i) => { if (i !== this.cursor) { this.iconAnimHandler.addOrUpdate(icon, PokemonIconAnimMode.NONE); } if (i < eggsToShow) { const egg = globalScene.gameData.eggs[i + indexOffset]; - icon.setFrame(egg.getKey()); - icon.setVisible(true); + icon.setFrame(egg.getKey()).setVisible(true); } else { icon.setVisible(false); } @@ -187,7 +175,6 @@ export default class EggListUiHandler extends MessageUiHandler { const ui = this.getUi(); let success = false; - const error = false; if (button === Button.CANCEL) { ui.revertMode(); @@ -198,11 +185,9 @@ export default class EggListUiHandler extends MessageUiHandler { if (success) { ui.playSelect(); - } else if (error) { - ui.playError(); } - return success || error; + return success; } setCursor(cursor: number): boolean { From 2a769e2733f7b05a297e62fd7bd2866af5b43b3a Mon Sep 17 00:00:00 2001 From: ShinigamiHolo <128856544+ShinigamiHolo@users.noreply.github.com> Date: Fri, 6 Jun 2025 22:45:12 +0300 Subject: [PATCH 203/262] [UI/UX] Adding more space in Egg Gacha for another languge (#5934) --- src/ui/egg-gacha-ui-handler.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/ui/egg-gacha-ui-handler.ts b/src/ui/egg-gacha-ui-handler.ts index a9a978548a8..eb3c6c75d97 100644 --- a/src/ui/egg-gacha-ui-handler.ts +++ b/src/ui/egg-gacha-ui-handler.ts @@ -206,7 +206,17 @@ export default class EggGachaUiHandler extends MessageUiHandler { this.eggGachaOptionsContainer = globalScene.add.container(globalScene.game.canvas.width / 6, 148); this.eggGachaContainer.add(this.eggGachaOptionsContainer); - this.eggGachaOptionSelectBg = addWindow(0, 0, 96, 16 + 576 * this.scale); + // Increase egg box width on certain languages + let eggGachaOptionSelectWidth = 0; + switch (i18next.resolvedLanguage) { + case "ru": + eggGachaOptionSelectWidth = 100; + break; + default: + eggGachaOptionSelectWidth = 96; + } + + this.eggGachaOptionSelectBg = addWindow(0, 0, eggGachaOptionSelectWidth, 16 + 576 * this.scale); this.eggGachaOptionSelectBg.setOrigin(1, 1); this.eggGachaOptionsContainer.add(this.eggGachaOptionSelectBg); From 9021e4b41e67636e523811aa8266d59351904152 Mon Sep 17 00:00:00 2001 From: Lugiad <2070109+Adri1@users.noreply.github.com> Date: Fri, 6 Jun 2025 21:52:35 +0200 Subject: [PATCH 204/262] [i18n] More Controller settings localization (#5920) --- src/system/settings/settings-gamepad.ts | 9 +++++---- src/ui/settings/gamepad-binding-ui-handler.ts | 5 +++-- src/ui/settings/keyboard-binding-ui-handler.ts | 3 ++- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/system/settings/settings-gamepad.ts b/src/system/settings/settings-gamepad.ts index 12add905096..d39d5cf5a41 100644 --- a/src/system/settings/settings-gamepad.ts +++ b/src/system/settings/settings-gamepad.ts @@ -4,6 +4,7 @@ import { truncateString } from "../../utils/common"; import { Button } from "#enums/buttons"; import { SettingKeyboard } from "#app/system/settings/settings-keyboard"; import { globalScene } from "#app/global-scene"; +import i18next from "i18next"; export enum SettingGamepad { Controller = "CONTROLLER", @@ -27,11 +28,11 @@ export enum SettingGamepad { Button_Submit = "BUTTON_SUBMIT", } -const pressAction = "Press action to assign"; +const pressAction = i18next.t("settings:pressActionToAssign"); export const settingGamepadOptions = { - [SettingGamepad.Controller]: ["Default", "Change"], - [SettingGamepad.Gamepad_Support]: ["Auto", "Disabled"], + [SettingGamepad.Controller]: [i18next.t("settings:controllerDefault"), i18next.t("settings:controllerChange")], + [SettingGamepad.Gamepad_Support]: [i18next.t("settings:gamepadSupportAuto"), i18next.t("settings:gamepadSupportDisabled")], [SettingGamepad.Button_Up]: [`KEY ${Button.UP.toString()}`, pressAction], [SettingGamepad.Button_Down]: [`KEY ${Button.DOWN.toString()}`, pressAction], [SettingGamepad.Button_Left]: [`KEY ${Button.LEFT.toString()}`, pressAction], @@ -140,7 +141,7 @@ export function setSettingGamepad(setting: SettingGamepad, value: number): boole handler: () => changeGamepadHandler(g), })), { - label: "Cancel", + label: i18next.t("settings:cancelContollerChoice"), handler: cancelHandler, }, ], diff --git a/src/ui/settings/gamepad-binding-ui-handler.ts b/src/ui/settings/gamepad-binding-ui-handler.ts index 0f226ddcafa..9ddb54131d5 100644 --- a/src/ui/settings/gamepad-binding-ui-handler.ts +++ b/src/ui/settings/gamepad-binding-ui-handler.ts @@ -4,6 +4,7 @@ import { Device } from "#enums/devices"; import { getIconWithSettingName, getKeyWithKeycode } from "#app/configs/inputs/configHandler"; import { addTextObject, TextStyle } from "#app/ui/text"; import { globalScene } from "#app/global-scene"; +import i18next from "i18next"; export default class GamepadBindingUiHandler extends AbstractBindingUiHandler { constructor(mode: UiMode | null = null) { @@ -19,7 +20,7 @@ export default class GamepadBindingUiHandler extends AbstractBindingUiHandler { this.newButtonIcon.setOrigin(0.5); this.newButtonIcon.setVisible(false); - this.swapText = addTextObject(0, 0, "will swap with", TextStyle.WINDOW); + this.swapText = addTextObject(0, 0, i18next.t("settings:willSwapWith"), TextStyle.WINDOW); this.swapText.setOrigin(0.5); this.swapText.setPositionRelative( this.optionSelectBg, @@ -33,7 +34,7 @@ export default class GamepadBindingUiHandler extends AbstractBindingUiHandler { this.targetButtonIcon.setOrigin(0.5); this.targetButtonIcon.setVisible(false); - this.actionLabel = addTextObject(0, 0, "Confirm swap", TextStyle.SETTINGS_LABEL); + this.actionLabel = addTextObject(0, 0, i18next.t("settings:confirmSwap"), TextStyle.SETTINGS_LABEL); this.actionLabel.setOrigin(0, 0.5); this.actionLabel.setPositionRelative(this.actionBg, this.actionBg.width - 75, this.actionBg.height / 2); this.actionsContainer.add(this.actionLabel); diff --git a/src/ui/settings/keyboard-binding-ui-handler.ts b/src/ui/settings/keyboard-binding-ui-handler.ts index c05a31ca91e..183b8269e78 100644 --- a/src/ui/settings/keyboard-binding-ui-handler.ts +++ b/src/ui/settings/keyboard-binding-ui-handler.ts @@ -4,6 +4,7 @@ import { getKeyWithKeycode } from "#app/configs/inputs/configHandler"; import { Device } from "#enums/devices"; import { addTextObject, TextStyle } from "#app/ui/text"; import { globalScene } from "#app/global-scene"; +import i18next from "i18next"; export default class KeyboardBindingUiHandler extends AbstractBindingUiHandler { constructor(mode: UiMode | null = null) { @@ -21,7 +22,7 @@ export default class KeyboardBindingUiHandler extends AbstractBindingUiHandler { this.newButtonIcon.setOrigin(0.5); this.newButtonIcon.setVisible(false); - this.actionLabel = addTextObject(0, 0, "Assign button", TextStyle.SETTINGS_LABEL); + this.actionLabel = addTextObject(0, 0, i18next.t("settings:assignButton"), TextStyle.SETTINGS_LABEL); this.actionLabel.setOrigin(0, 0.5); this.actionLabel.setPositionRelative(this.actionBg, this.actionBg.width - 80, this.actionBg.height / 2); this.actionsContainer.add(this.actionLabel); From 1fc42b32312d8069deb9da1f3e461c14601495b1 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Fri, 6 Jun 2025 16:08:23 -0500 Subject: [PATCH 205/262] [Misc] Add `phase#is` method to help reduce circular imports (#5868) * Move phase types out of phase interceptor * Create isXPhase method and add properties to each phase * Replace instanceof phase with isXPhase * Fix missing union types for phaseName * Update doc comment in phase.ts * Fix incomplete comment in encounter-phase * Make phaseName as public and fix more uses * Move phaseName property declaration before constructor in move anim phase Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Rename isXPhase to is --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/@types/phase-types.ts | 286 ++++++++++++++++++ src/battle-scene.ts | 11 +- src/data/abilities/ability.ts | 4 +- src/data/arena-tag.ts | 2 +- src/data/battler-tags.ts | 20 +- src/data/moves/move.ts | 14 +- .../utils/encounter-phase-utils.ts | 2 +- src/field/pokemon.ts | 5 +- src/phase.ts | 26 +- src/phases/add-enemy-buff-modifier-phase.ts | 1 + src/phases/attempt-capture-phase.ts | 1 + src/phases/attempt-run-phase.ts | 1 + src/phases/battle-end-phase.ts | 5 +- src/phases/battle-phase.ts | 2 +- src/phases/berry-phase.ts | 1 + src/phases/check-status-effect-phase.ts | 1 + src/phases/check-switch-phase.ts | 1 + src/phases/command-phase.ts | 1 + src/phases/common-anim-phase.ts | 3 + src/phases/damage-anim-phase.ts | 1 + src/phases/egg-hatch-phase.ts | 3 +- src/phases/egg-lapse-phase.ts | 1 + src/phases/egg-summary-phase.ts | 1 + src/phases/encounter-phase.ts | 2 + src/phases/end-card-phase.ts | 1 + src/phases/end-evolution-phase.ts | 1 + src/phases/enemy-command-phase.ts | 1 + src/phases/evolution-phase.ts | 3 + src/phases/exp-phase.ts | 1 + src/phases/faint-phase.ts | 1 + src/phases/form-change-phase.ts | 1 + src/phases/game-over-modifier-reward-phase.ts | 1 + src/phases/game-over-phase.ts | 1 + src/phases/hide-ability-phase.ts | 1 + src/phases/hide-party-exp-bar-phase.ts | 1 + src/phases/learn-move-phase.ts | 6 +- src/phases/level-cap-phase.ts | 1 + src/phases/level-up-phase.ts | 1 + src/phases/load-move-anim-phase.ts | 1 + src/phases/login-phase.ts | 1 + src/phases/message-phase.ts | 1 + src/phases/modifier-reward-phase.ts | 4 + src/phases/money-reward-phase.ts | 1 + src/phases/move-anim-phase.ts | 2 + src/phases/move-charge-phase.ts | 4 +- src/phases/move-effect-phase.ts | 1 + src/phases/move-end-phase.ts | 1 + src/phases/move-header-phase.ts | 1 + src/phases/move-phase.ts | 1 + src/phases/mystery-encounter-phases.ts | 13 +- src/phases/new-battle-phase.ts | 5 +- src/phases/new-biome-encounter-phase.ts | 1 + src/phases/next-encounter-phase.ts | 1 + src/phases/obtain-status-effect-phase.ts | 1 + src/phases/party-exp-phase.ts | 1 + src/phases/party-heal-phase.ts | 1 + src/phases/pokemon-anim-phase.ts | 1 + src/phases/pokemon-heal-phase.ts | 1 + src/phases/pokemon-transform-phase.ts | 1 + src/phases/post-game-over-phase.ts | 1 + src/phases/post-summon-phase.ts | 1 + src/phases/post-turn-status-effect-phase.ts | 1 + src/phases/quiet-form-change-phase.ts | 5 +- src/phases/reload-session-phase.ts | 1 + src/phases/reset-status-phase.ts | 1 + src/phases/return-phase.ts | 1 + src/phases/revival-blessing-phase.ts | 1 + src/phases/ribbon-modifier-reward-phase.ts | 1 + src/phases/scan-ivs-phase.ts | 1 + src/phases/select-biome-phase.ts | 1 + src/phases/select-challenge-phase.ts | 1 + src/phases/select-gender-phase.ts | 1 + src/phases/select-modifier-phase.ts | 1 + src/phases/select-starter-phase.ts | 1 + src/phases/select-target-phase.ts | 1 + src/phases/shiny-sparkle-phase.ts | 1 + src/phases/show-ability-phase.ts | 1 + src/phases/show-party-exp-bar-phase.ts | 1 + src/phases/show-trainer-phase.ts | 1 + src/phases/stat-stage-change-phase.ts | 9 +- src/phases/summon-missing-phase.ts | 1 + src/phases/summon-phase.ts | 2 + src/phases/switch-biome-phase.ts | 1 + src/phases/switch-phase.ts | 4 +- src/phases/switch-summon-phase.ts | 1 + src/phases/tera-phase.ts | 1 + src/phases/title-phase.ts | 1 + src/phases/toggle-double-position-phase.ts | 1 + src/phases/trainer-victory-phase.ts | 1 + src/phases/turn-end-phase.ts | 1 + src/phases/turn-init-phase.ts | 1 + src/phases/turn-start-phase.ts | 1 + src/phases/unavailable-phase.ts | 1 + src/phases/unlock-phase.ts | 1 + src/phases/victory-phase.ts | 1 + src/phases/weather-effect-phase.ts | 1 + src/ui/command-ui-handler.ts | 4 +- src/ui/egg-hatch-scene-handler.ts | 3 +- src/ui/egg-summary-ui-handler.ts | 3 +- src/ui/menu-ui-handler.ts | 3 +- src/ui/party-ui-handler.ts | 5 +- src/ui/pokedex-page-ui-handler.ts | 2 +- test/testUtils/phaseInterceptor.ts | 122 +------- 103 files changed, 468 insertions(+), 187 deletions(-) create mode 100644 src/@types/phase-types.ts diff --git a/src/@types/phase-types.ts b/src/@types/phase-types.ts new file mode 100644 index 00000000000..596d9b15723 --- /dev/null +++ b/src/@types/phase-types.ts @@ -0,0 +1,286 @@ +import type { MoveAnim } from "#app/data/battle-anims"; +import type { AddEnemyBuffModifierPhase } from "#app/phases/add-enemy-buff-modifier-phase"; +import type { AttemptCapturePhase } from "#app/phases/attempt-capture-phase"; +import type { AttemptRunPhase } from "#app/phases/attempt-run-phase"; +import type { BattleEndPhase } from "#app/phases/battle-end-phase"; +import type { BerryPhase } from "#app/phases/berry-phase"; +import type { CheckStatusEffectPhase } from "#app/phases/check-status-effect-phase"; +import type { CheckSwitchPhase } from "#app/phases/check-switch-phase"; +import type { CommandPhase } from "#app/phases/command-phase"; +import type { CommonAnimPhase } from "#app/phases/common-anim-phase"; +import type { DamageAnimPhase } from "#app/phases/damage-anim-phase"; +import type { EggHatchPhase } from "#app/phases/egg-hatch-phase"; +import type { EggLapsePhase } from "#app/phases/egg-lapse-phase"; +import type { EggSummaryPhase } from "#app/phases/egg-summary-phase"; +import type { EncounterPhase } from "#app/phases/encounter-phase"; +import type { EndCardPhase } from "#app/phases/end-card-phase"; +import type { EndEvolutionPhase } from "#app/phases/end-evolution-phase"; +import type { EnemyCommandPhase } from "#app/phases/enemy-command-phase"; +import type { EvolutionPhase } from "#app/phases/evolution-phase"; +import type { ExpPhase } from "#app/phases/exp-phase"; +import type { FaintPhase } from "#app/phases/faint-phase"; +import type { FormChangePhase } from "#app/phases/form-change-phase"; +import type { GameOverModifierRewardPhase } from "#app/phases/game-over-modifier-reward-phase"; +import type { GameOverPhase } from "#app/phases/game-over-phase"; +import type { HideAbilityPhase } from "#app/phases/hide-ability-phase"; +import type { HidePartyExpBarPhase } from "#app/phases/hide-party-exp-bar-phase"; +import type { LearnMovePhase } from "#app/phases/learn-move-phase"; +import type { LevelCapPhase } from "#app/phases/level-cap-phase"; +import type { LevelUpPhase } from "#app/phases/level-up-phase"; +import type { LoadMoveAnimPhase } from "#app/phases/load-move-anim-phase"; +import type { LoginPhase } from "#app/phases/login-phase"; +import type { MessagePhase } from "#app/phases/message-phase"; +import type { ModifierRewardPhase } from "#app/phases/modifier-reward-phase"; +import type { MoneyRewardPhase } from "#app/phases/money-reward-phase"; +import type { MoveAnimPhase } from "#app/phases/move-anim-phase"; +import type { MoveChargePhase } from "#app/phases/move-charge-phase"; +import type { MoveEffectPhase } from "#app/phases/move-effect-phase"; +import type { MoveEndPhase } from "#app/phases/move-end-phase"; +import type { MoveHeaderPhase } from "#app/phases/move-header-phase"; +import type { MovePhase } from "#app/phases/move-phase"; +import type { + MysteryEncounterPhase, + MysteryEncounterOptionSelectedPhase, + MysteryEncounterBattlePhase, + MysteryEncounterRewardsPhase, + PostMysteryEncounterPhase, + MysteryEncounterBattleStartCleanupPhase, +} from "#app/phases/mystery-encounter-phases"; +import type { NewBattlePhase } from "#app/phases/new-battle-phase"; +import type { NewBiomeEncounterPhase } from "#app/phases/new-biome-encounter-phase"; +import type { NextEncounterPhase } from "#app/phases/next-encounter-phase"; +import type { ObtainStatusEffectPhase } from "#app/phases/obtain-status-effect-phase"; +import type { PartyExpPhase } from "#app/phases/party-exp-phase"; +import type { PartyHealPhase } from "#app/phases/party-heal-phase"; +import type { PokemonAnimPhase } from "#app/phases/pokemon-anim-phase"; +import type { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; +import type { PokemonTransformPhase } from "#app/phases/pokemon-transform-phase"; +import type { PostGameOverPhase } from "#app/phases/post-game-over-phase"; +import type { PostSummonPhase } from "#app/phases/post-summon-phase"; +import type { PostTurnStatusEffectPhase } from "#app/phases/post-turn-status-effect-phase"; +import type { QuietFormChangePhase } from "#app/phases/quiet-form-change-phase"; +import type { ReloadSessionPhase } from "#app/phases/reload-session-phase"; +import type { ResetStatusPhase } from "#app/phases/reset-status-phase"; +import type { ReturnPhase } from "#app/phases/return-phase"; +import type { RevivalBlessingPhase } from "#app/phases/revival-blessing-phase"; +import type { RibbonModifierRewardPhase } from "#app/phases/ribbon-modifier-reward-phase"; +import type { ScanIvsPhase } from "#app/phases/scan-ivs-phase"; +import type { SelectBiomePhase } from "#app/phases/select-biome-phase"; +import type { SelectChallengePhase } from "#app/phases/select-challenge-phase"; +import type { SelectGenderPhase } from "#app/phases/select-gender-phase"; +import type { SelectModifierPhase } from "#app/phases/select-modifier-phase"; +import type { SelectStarterPhase } from "#app/phases/select-starter-phase"; +import type { SelectTargetPhase } from "#app/phases/select-target-phase"; +import type { ShinySparklePhase } from "#app/phases/shiny-sparkle-phase"; +import type { ShowAbilityPhase } from "#app/phases/show-ability-phase"; +import type { ShowPartyExpBarPhase } from "#app/phases/show-party-exp-bar-phase"; +import type { ShowTrainerPhase } from "#app/phases/show-trainer-phase"; +import type { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; +import type { SummonMissingPhase } from "#app/phases/summon-missing-phase"; +import type { SummonPhase } from "#app/phases/summon-phase"; +import type { SwitchBiomePhase } from "#app/phases/switch-biome-phase"; +import type { SwitchPhase } from "#app/phases/switch-phase"; +import type { SwitchSummonPhase } from "#app/phases/switch-summon-phase"; +import type { TeraPhase } from "#app/phases/tera-phase"; +import type { TitlePhase } from "#app/phases/title-phase"; +import type { ToggleDoublePositionPhase } from "#app/phases/toggle-double-position-phase"; +import type { TrainerVictoryPhase } from "#app/phases/trainer-victory-phase"; +import type { TurnEndPhase } from "#app/phases/turn-end-phase"; +import type { TurnInitPhase } from "#app/phases/turn-init-phase"; +import type { TurnStartPhase } from "#app/phases/turn-start-phase"; +import type { UnavailablePhase } from "#app/phases/unavailable-phase"; +import type { UnlockPhase } from "#app/phases/unlock-phase"; +import type { VictoryPhase } from "#app/phases/victory-phase"; +import type { WeatherEffectPhase } from "#app/phases/weather-effect-phase"; + +export type PhaseClass = + | typeof AddEnemyBuffModifierPhase + | typeof AttemptCapturePhase + | typeof AttemptRunPhase + | typeof BattleEndPhase + | typeof BerryPhase + | typeof CheckStatusEffectPhase + | typeof CheckSwitchPhase + | typeof CommandPhase + | typeof CommonAnimPhase + | typeof DamageAnimPhase + | typeof EggHatchPhase + | typeof EggLapsePhase + | typeof EggSummaryPhase + | typeof EncounterPhase + | typeof EndCardPhase + | typeof EndEvolutionPhase + | typeof EnemyCommandPhase + | typeof EvolutionPhase + | typeof FormChangePhase + | typeof ExpPhase + | typeof FaintPhase + | typeof FormChangePhase + | typeof GameOverPhase + | typeof GameOverModifierRewardPhase + | typeof HideAbilityPhase + | typeof HidePartyExpBarPhase + | typeof LearnMovePhase + | typeof LevelUpPhase + | typeof LevelCapPhase + | typeof LoadMoveAnimPhase + | typeof LoginPhase + | typeof MessagePhase + | typeof ModifierRewardPhase + | typeof MoneyRewardPhase + | typeof MoveAnimPhase + | typeof MoveChargePhase + | typeof MoveEffectPhase + | typeof MoveEndPhase + | typeof MoveHeaderPhase + | typeof MovePhase + | typeof MysteryEncounterPhase + | typeof MysteryEncounterOptionSelectedPhase + | typeof MysteryEncounterBattlePhase + | typeof MysteryEncounterRewardsPhase + | typeof MysteryEncounterBattleStartCleanupPhase + | typeof MysteryEncounterRewardsPhase + | typeof PostMysteryEncounterPhase + | typeof NewBattlePhase + | typeof NewBiomeEncounterPhase + | typeof NextEncounterPhase + | typeof ObtainStatusEffectPhase + | typeof PartyExpPhase + | typeof PartyHealPhase + | typeof PokemonAnimPhase + | typeof PokemonHealPhase + | typeof PokemonTransformPhase + | typeof PostGameOverPhase + | typeof PostSummonPhase + | typeof PostTurnStatusEffectPhase + | typeof QuietFormChangePhase + | typeof ReloadSessionPhase + | typeof ResetStatusPhase + | typeof ReturnPhase + | typeof RevivalBlessingPhase + | typeof RibbonModifierRewardPhase + | typeof ScanIvsPhase + | typeof SelectBiomePhase + | typeof SelectChallengePhase + | typeof SelectGenderPhase + | typeof SelectModifierPhase + | typeof SelectStarterPhase + | typeof SelectTargetPhase + | typeof ShinySparklePhase + | typeof ShowAbilityPhase + | typeof ShowTrainerPhase + | typeof ShowPartyExpBarPhase + | typeof StatStageChangePhase + | typeof SummonMissingPhase + | typeof SummonPhase + | typeof SwitchBiomePhase + | typeof SwitchPhase + | typeof SwitchSummonPhase + | typeof TeraPhase + | typeof TitlePhase + | typeof ToggleDoublePositionPhase + | typeof TrainerVictoryPhase + | typeof TurnEndPhase + | typeof TurnInitPhase + | typeof TurnStartPhase + | typeof UnavailablePhase + | typeof UnlockPhase + | typeof VictoryPhase + | typeof WeatherEffectPhase; + +/** Typescript map used to map a string phase to the actual phase type */ +export type PhaseMap = { + AddEnemyBuffModifierPhase: AddEnemyBuffModifierPhase; + AttemptCapturePhase: AttemptCapturePhase; + AttemptRunPhase: AttemptRunPhase; + BattleEndPhase: BattleEndPhase; + BerryPhase: BerryPhase; + CheckStatusEffectPhase: CheckStatusEffectPhase; + CheckSwitchPhase: CheckSwitchPhase; + CommandPhase: CommandPhase; + CommonAnimPhase: CommonAnimPhase; + DamageAnimPhase: DamageAnimPhase; + EggHatchPhase: EggHatchPhase; + EggLapsePhase: EggLapsePhase; + EggSummaryPhase: EggSummaryPhase; + EncounterPhase: EncounterPhase; + EndCardPhase: EndCardPhase; + EndEvolutionPhase: EndEvolutionPhase; + EnemyCommandPhase: EnemyCommandPhase; + EvolutionPhase: EvolutionPhase; + ExpPhase: ExpPhase; + FaintPhase: FaintPhase; + FormChangePhase: FormChangePhase; + GameOverPhase: GameOverPhase; + GameOverModifierRewardPhase: GameOverModifierRewardPhase; + HideAbilityPhase: HideAbilityPhase; + HidePartyExpBarPhase: HidePartyExpBarPhase; + LearnMovePhase: LearnMovePhase; + LevelCapPhase: LevelCapPhase; + LevelUpPhase: LevelUpPhase; + LoadMoveAnimPhase: LoadMoveAnimPhase; + LoginPhase: LoginPhase; + MessagePhase: MessagePhase; + ModifierRewardPhase: ModifierRewardPhase; + MoneyRewardPhase: MoneyRewardPhase; + MoveAnimPhase: MoveAnimPhase; + MoveChargePhase: MoveChargePhase; + MoveEffectPhase: MoveEffectPhase; + MoveEndPhase: MoveEndPhase; + MoveHeaderPhase: MoveHeaderPhase; + MovePhase: MovePhase; + MysteryEncounterPhase: MysteryEncounterPhase; + MysteryEncounterOptionSelectedPhase: MysteryEncounterOptionSelectedPhase; + MysteryEncounterBattlePhase: MysteryEncounterBattlePhase; + MysteryEncounterBattleStartCleanupPhase: MysteryEncounterBattleStartCleanupPhase; + MysteryEncounterRewardsPhase: MysteryEncounterRewardsPhase; + PostMysteryEncounterPhase: PostMysteryEncounterPhase; + NewBattlePhase: NewBattlePhase; + NewBiomeEncounterPhase: NewBiomeEncounterPhase; + NextEncounterPhase: NextEncounterPhase; + ObtainStatusEffectPhase: ObtainStatusEffectPhase; + PartyExpPhase: PartyExpPhase; + PartyHealPhase: PartyHealPhase; + PokemonAnimPhase: PokemonAnimPhase; + PokemonHealPhase: PokemonHealPhase; + PokemonTransformPhase: PokemonTransformPhase; + PostGameOverPhase: PostGameOverPhase; + PostSummonPhase: PostSummonPhase; + PostTurnStatusEffectPhase: PostTurnStatusEffectPhase; + QuietFormChangePhase: QuietFormChangePhase; + ReloadSessionPhase: ReloadSessionPhase; + ResetStatusPhase: ResetStatusPhase; + ReturnPhase: ReturnPhase; + RevivalBlessingPhase: RevivalBlessingPhase; + RibbonModifierRewardPhase: RibbonModifierRewardPhase; + ScanIvsPhase: ScanIvsPhase; + SelectBiomePhase: SelectBiomePhase; + SelectChallengePhase: SelectChallengePhase; + SelectGenderPhase: SelectGenderPhase; + SelectModifierPhase: SelectModifierPhase; + SelectStarterPhase: SelectStarterPhase; + SelectTargetPhase: SelectTargetPhase; + ShinySparklePhase: ShinySparklePhase; + ShowAbilityPhase: ShowAbilityPhase; + ShowPartyExpBarPhase: ShowPartyExpBarPhase; + ShowTrainerPhase: ShowTrainerPhase; + StatStageChangePhase: StatStageChangePhase; + SummonMissingPhase: SummonMissingPhase; + SummonPhase: SummonPhase; + SwitchBiomePhase: SwitchBiomePhase; + SwitchPhase: SwitchPhase; + SwitchSummonPhase: SwitchSummonPhase; + TeraPhase: TeraPhase; + TitlePhase: TitlePhase; + ToggleDoublePositionPhase: ToggleDoublePositionPhase; + TrainerVictoryPhase: TrainerVictoryPhase; + TurnEndPhase: TurnEndPhase; + TurnInitPhase: TurnInitPhase; + TurnStartPhase: TurnStartPhase; + UnavailablePhase: UnavailablePhase; + UnlockPhase: UnlockPhase; + VictoryPhase: VictoryPhase; + WeatherEffectPhase: WeatherEffectPhase; +}; + +export type PhaseString = keyof PhaseMap; diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 34d26b3975c..f2f952ea301 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -145,7 +145,7 @@ import { LoadingScene } from "#app/loading-scene"; import { LevelCapPhase } from "#app/phases/level-cap-phase"; import { LoginPhase } from "#app/phases/login-phase"; import { MessagePhase } from "#app/phases/message-phase"; -import { MovePhase } from "#app/phases/move-phase"; +import type { MovePhase } from "#app/phases/move-phase"; import { NewBiomeEncounterPhase } from "#app/phases/new-biome-encounter-phase"; import { NextEncounterPhase } from "#app/phases/next-encounter-phase"; import { PokemonAnimPhase } from "#app/phases/pokemon-anim-phase"; @@ -153,7 +153,6 @@ import { QuietFormChangePhase } from "#app/phases/quiet-form-change-phase"; import { ReturnPhase } from "#app/phases/return-phase"; import { ShowTrainerPhase } from "#app/phases/show-trainer-phase"; import { SummonPhase } from "#app/phases/summon-phase"; -import { SwitchPhase } from "#app/phases/switch-phase"; import { TitlePhase } from "#app/phases/title-phase"; import { ToggleDoublePositionPhase } from "#app/phases/toggle-double-position-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; @@ -901,7 +900,7 @@ export default class BattleScene extends SceneBase { do { targetingMovePhase = this.findPhase( mp => - mp instanceof MovePhase && + mp.is("MovePhase") && mp.targets.length === 1 && mp.targets[0] === removedPokemon.getBattlerIndex() && mp.pokemon.isPlayer() !== allyPokemon.isPlayer(), @@ -1450,7 +1449,7 @@ export default class BattleScene extends SceneBase { } if (lastBattle?.double && !newDouble) { - this.tryRemovePhase(p => p instanceof SwitchPhase); + this.tryRemovePhase((p: Phase) => p.is("SwitchPhase")); for (const p of this.getPlayerField()) { p.lapseTag(BattlerTagType.COMMANDED); } @@ -1588,9 +1587,7 @@ export default class BattleScene extends SceneBase { return 0; } - const isEggPhase: boolean = ["EggLapsePhase", "EggHatchPhase"].includes( - this.getCurrentPhase()?.constructor.name ?? "", - ); + const isEggPhase: boolean = ["EggLapsePhase", "EggHatchPhase"].includes(this.getCurrentPhase()?.phaseName ?? ""); if ( // Give trainers with specialty types an appropriately-typed form for Wormadam, Rotom, Arceus, Oricorio, Silvally, or Paldean Tauros. diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 8f5f267f7ef..1bd71df32e0 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -2828,7 +2828,7 @@ export class CommanderAbAttr extends AbAttr { // Apply boosts from this effect to the ally Dondozo pokemon.getAlly()?.addTag(BattlerTagType.COMMANDED, 0, MoveId.NONE, pokemon.id); // Cancel the source Pokemon's next move (if a move is queued) - globalScene.tryRemovePhase((phase) => phase instanceof MovePhase && phase.pokemon === pokemon); + globalScene.tryRemovePhase((phase) => phase.is("MovePhase") && phase.pokemon === pokemon); } } } @@ -6897,7 +6897,7 @@ export function initAbilities() { .ignorable(), new Ability(AbilityId.ANALYTIC, 5) .attr(MovePowerBoostAbAttr, (user, target, move) => { - const movePhase = globalScene.findPhase((phase) => phase instanceof MovePhase && phase.pokemon.id !== user?.id); + const movePhase = globalScene.findPhase((phase) => phase.is("MovePhase") && phase.pokemon.id !== user?.id); return isNullOrUndefined(movePhase); }, 1.3), new Ability(AbilityId.ILLUSION, 5) diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index 590319a01c0..0254aab37e1 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -383,7 +383,7 @@ const QuickGuardConditionFunc: ProtectConditionFunc = (_arena, moveId) => { const move = allMoves[moveId]; const effectPhase = globalScene.getCurrentPhase(); - if (effectPhase instanceof MoveEffectPhase) { + if (effectPhase?.is("MoveEffectPhase")) { const attacker = effectPhase.getUserPokemon(); if (attacker) { return move.getPriority(attacker) > 0; diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 4f263fc152b..c047f424591 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -28,7 +28,7 @@ import type Pokemon from "#app/field/pokemon"; import { HitResult, MoveResult } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { CommonAnimPhase } from "#app/phases/common-anim-phase"; -import { MoveEffectPhase } from "#app/phases/move-effect-phase"; +import type { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { MovePhase } from "#app/phases/move-phase"; import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; import type { StatStageChangeCallback } from "#app/phases/stat-stage-change-phase"; @@ -553,9 +553,9 @@ export class ShellTrapTag extends BattlerTag { // Trap should only be triggered by opponent's Physical moves if (phaseData?.move.category === MoveCategory.PHYSICAL && pokemon.isOpponent(phaseData.attacker)) { const shellTrapPhaseIndex = globalScene.phaseQueue.findIndex( - phase => phase instanceof MovePhase && phase.pokemon === pokemon, + phase => phase.is("MovePhase") && phase.pokemon === pokemon, ); - const firstMovePhaseIndex = globalScene.phaseQueue.findIndex(phase => phase instanceof MovePhase); + const firstMovePhaseIndex = globalScene.phaseQueue.findIndex(phase => phase.is("MovePhase")); // Only shift MovePhase timing if it's not already next up if (shellTrapPhaseIndex !== -1 && shellTrapPhaseIndex !== firstMovePhaseIndex) { @@ -1027,7 +1027,7 @@ export class PowderTag extends BattlerTag { lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { if (lapseType === BattlerTagLapseType.PRE_MOVE) { const movePhase = globalScene.getCurrentPhase(); - if (movePhase instanceof MovePhase) { + if (movePhase?.is("MovePhase")) { const move = movePhase.move.getMove(); const weather = globalScene.arena.weather; if ( @@ -1183,13 +1183,13 @@ export class EncoreTag extends MoveRestrictionBattlerTag { }), ); - const movePhase = globalScene.findPhase(m => m instanceof MovePhase && m.pokemon === pokemon); + const movePhase = globalScene.findPhase(m => m.is("MovePhase") && m.pokemon === pokemon); if (movePhase) { const movesetMove = pokemon.getMoveset().find(m => m.moveId === this.moveId); if (movesetMove) { const lastMove = pokemon.getLastXMoves(1)[0]; globalScene.tryReplacePhase( - m => m instanceof MovePhase && m.pokemon === pokemon, + m => m.is("MovePhase") && m.pokemon === pokemon, new MovePhase(pokemon, lastMove.targets ?? [], movesetMove), ); } @@ -1624,7 +1624,7 @@ export class ProtectedTag extends BattlerTag { // Stop multi-hit moves early const effectPhase = globalScene.getCurrentPhase(); - if (effectPhase instanceof MoveEffectPhase) { + if (effectPhase?.is("MoveEffectPhase")) { effectPhase.stopMultiHit(pokemon); } return true; @@ -2646,7 +2646,7 @@ export class GulpMissileTag extends BattlerTag { } const moveEffectPhase = globalScene.getCurrentPhase(); - if (moveEffectPhase instanceof MoveEffectPhase) { + if (moveEffectPhase?.is("MoveEffectPhase")) { const attacker = moveEffectPhase.getUserPokemon(); if (!attacker) { @@ -3004,7 +3004,7 @@ export class SubstituteTag extends BattlerTag { /** If the Substitute redirects damage, queue a message to indicate it. */ onHit(pokemon: Pokemon): void { const moveEffectPhase = globalScene.getCurrentPhase(); - if (moveEffectPhase instanceof MoveEffectPhase) { + if (moveEffectPhase?.is("MoveEffectPhase")) { const attacker = moveEffectPhase.getUserPokemon(); if (!attacker) { return; @@ -3693,7 +3693,7 @@ export function loadBattlerTag(source: BattlerTag | any): BattlerTag { */ function getMoveEffectPhaseData(_pokemon: Pokemon): { phase: MoveEffectPhase; attacker: Pokemon; move: Move } | null { const phase = globalScene.getCurrentPhase(); - if (phase instanceof MoveEffectPhase) { + if (phase?.is("MoveEffectPhase")) { return { phase: phase, attacker: phase.getPokemon(), diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 7e9f99e28c1..91cc6350daa 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -3109,7 +3109,7 @@ export class AwaitCombinedPledgeAttr extends OverrideMoveEffectAttr { const overridden = args[0] as BooleanHolder; - const allyMovePhase = globalScene.findPhase((phase) => phase instanceof MovePhase && phase.pokemon.isPlayer() === user.isPlayer()); + const allyMovePhase = globalScene.findPhase((phase) => phase.is("MovePhase") && phase.pokemon.isPlayer() === user.isPlayer()); if (allyMovePhase) { const allyMove = allyMovePhase.move.getMove(); if (allyMove !== move && allyMove.hasAttr(AwaitCombinedPledgeAttr)) { @@ -3123,7 +3123,7 @@ export class AwaitCombinedPledgeAttr extends OverrideMoveEffectAttr { // Move the ally's MovePhase (if needed) so that the ally moves next const allyMovePhaseIndex = globalScene.phaseQueue.indexOf(allyMovePhase); - const firstMovePhaseIndex = globalScene.phaseQueue.findIndex((phase) => phase instanceof MovePhase); + const firstMovePhaseIndex = globalScene.phaseQueue.findIndex((phase) => phase.is("MovePhase")); if (allyMovePhaseIndex !== firstMovePhaseIndex) { globalScene.prependToPhase(globalScene.phaseQueue.splice(allyMovePhaseIndex, 1)[0], MovePhase); } @@ -4477,7 +4477,7 @@ export class CueNextRoundAttr extends MoveEffectAttr { override apply(user: Pokemon, target: Pokemon, move: Move, args?: any[]): boolean { const nextRoundPhase = globalScene.findPhase(phase => - phase instanceof MovePhase && phase.move.moveId === MoveId.ROUND + phase.is("MovePhase") && phase.move.moveId === MoveId.ROUND ); if (!nextRoundPhase) { @@ -4486,7 +4486,7 @@ export class CueNextRoundAttr extends MoveEffectAttr { // Update the phase queue so that the next Pokemon using Round moves next const nextRoundIndex = globalScene.phaseQueue.indexOf(nextRoundPhase); - const nextMoveIndex = globalScene.phaseQueue.findIndex(phase => phase instanceof MovePhase); + const nextMoveIndex = globalScene.phaseQueue.findIndex(phase => phase.is("MovePhase")); if (nextRoundIndex !== nextMoveIndex) { globalScene.prependToPhase(globalScene.phaseQueue.splice(nextRoundIndex, 1)[0], MovePhase); } @@ -6177,7 +6177,7 @@ export class RevivalBlessingAttr extends MoveEffectAttr { // Handle cases where revived pokemon needs to get switched in on same turn if (allyPokemon.isFainted() || allyPokemon === pokemon) { // Enemy switch phase should be removed and replaced with the revived pkmn switching in - globalScene.tryRemovePhase((phase: SwitchSummonPhase) => phase instanceof SwitchSummonPhase && phase.getPokemon() === pokemon); + globalScene.tryRemovePhase((phase: SwitchSummonPhase) => phase.is("SwitchSummonPhase") && phase.getPokemon() === pokemon); // If the pokemon being revived was alive earlier in the turn, cancel its move // (revived pokemon can't move in the turn they're brought back) globalScene.findPhase((phase: MovePhase) => phase.pokemon === pokemon)?.cancel(); @@ -7896,7 +7896,7 @@ export class ForceLastAttr extends MoveEffectAttr { // Either the end of the turn or in front of another, slower move which has also been forced last const prependPhase = globalScene.findPhase((phase) => [ MovePhase, MoveEndPhase ].every(cls => !(phase instanceof cls)) - || (phase instanceof MovePhase) && phaseForcedSlower(phase, target, !!globalScene.arena.getTag(ArenaTagType.TRICK_ROOM)) + || (phase.is("MovePhase")) && phaseForcedSlower(phase, target, !!globalScene.arena.getTag(ArenaTagType.TRICK_ROOM)) ); if (prependPhase) { globalScene.phaseQueue.splice( @@ -7942,7 +7942,7 @@ const userSleptOrComatoseCondition: MoveConditionFunc = (user: Pokemon, target: const targetSleptOrComatoseCondition: MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => target.status?.effect === StatusEffect.SLEEP || target.hasAbility(AbilityId.COMATOSE); -const failIfLastCondition: MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => globalScene.phaseQueue.find(phase => phase instanceof MovePhase) !== undefined; +const failIfLastCondition: MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => globalScene.phaseQueue.find(phase => phase.is("MovePhase")) !== undefined; const failIfLastInPartyCondition: MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => { const party: Pokemon[] = user.isPlayer() ? globalScene.getPlayerParty() : globalScene.getEnemyParty(); diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index 060de9c3a9e..c9eaa2e6968 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -769,7 +769,7 @@ export function setEncounterRewards( if (customShopRewards) { globalScene.unshiftPhase(new SelectModifierPhase(0, undefined, customShopRewards)); } else { - globalScene.tryRemovePhase(p => p instanceof SelectModifierPhase); + globalScene.tryRemovePhase(p => p.is("MysteryEncounterRewardsPhase")); } if (eggRewards) { diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index cd8563cfb30..d06553f2227 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -232,7 +232,6 @@ import { getPokemonNameWithAffix } from "#app/messages"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { FaintPhase } from "#app/phases/faint-phase"; import { LearnMovePhase } from "#app/phases/learn-move-phase"; -import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; import { ObtainStatusEffectPhase } from "#app/phases/obtain-status-effect-phase"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; @@ -1300,7 +1299,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // During the Pokemon's MoveEffect phase, the offset is removed to put the Pokemon "in focus" const currentPhase = globalScene.getCurrentPhase(); - if (currentPhase instanceof MoveEffectPhase && currentPhase.getPokemon() === this) { + if (currentPhase?.is("MoveEffectPhase") && currentPhase.getPokemon() === this) { return false; } return true; @@ -4775,7 +4774,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { */ if (effect === StatusEffect.SLEEP || effect === StatusEffect.FREEZE) { const currentPhase = globalScene.getCurrentPhase(); - if (currentPhase instanceof MoveEffectPhase && currentPhase.getUserPokemon() === this) { + if (currentPhase?.is("MoveEffectPhase") && currentPhase.getUserPokemon() === this) { this.turnData.hitCount = 1; this.turnData.hitsLeft = 1; } diff --git a/src/phase.ts b/src/phase.ts index 20cc7cc4063..9e2468ebdff 100644 --- a/src/phase.ts +++ b/src/phase.ts @@ -1,9 +1,33 @@ import { globalScene } from "#app/global-scene"; +import type { PhaseMap, PhaseString } from "./@types/phase-types"; -export class Phase { +export abstract class Phase { start() {} end() { globalScene.shiftPhase(); } + + /** + * The string name of the phase, used to identify the phase type for {@linkcode is} + * + * @privateremarks + * + * When implementing a phase, you must set the `phaseName` property to the name of the phase. + */ + public abstract readonly phaseName: PhaseString; + + /** + * Check if the phase is of the given type without requiring `instanceof`. + * + * @param phase - The string name of the phase to check. + * @returns Whether this phase is of the provided type. + * + * @remarks + * This does not check for subclasses! It only checks if the phase is *exactly* the given type. + * This method exists to avoid circular import issues, as using `instanceof` would require importing each phase. + */ + is(phase: K): this is PhaseMap[K] { + return this.phaseName === phase; + } } diff --git a/src/phases/add-enemy-buff-modifier-phase.ts b/src/phases/add-enemy-buff-modifier-phase.ts index 16ed78e6d0d..28eaf0dc4df 100644 --- a/src/phases/add-enemy-buff-modifier-phase.ts +++ b/src/phases/add-enemy-buff-modifier-phase.ts @@ -9,6 +9,7 @@ import { Phase } from "#app/phase"; import { globalScene } from "#app/global-scene"; export class AddEnemyBuffModifierPhase extends Phase { + public readonly phaseName = "AddEnemyBuffModifierPhase"; start() { super.start(); diff --git a/src/phases/attempt-capture-phase.ts b/src/phases/attempt-capture-phase.ts index 8592cd98508..6c2f5f4dd76 100644 --- a/src/phases/attempt-capture-phase.ts +++ b/src/phases/attempt-capture-phase.ts @@ -27,6 +27,7 @@ import { globalScene } from "#app/global-scene"; import { Gender } from "#app/data/gender"; export class AttemptCapturePhase extends PokemonPhase { + public readonly phaseName = "AttemptCapturePhase"; private pokeballType: PokeballType; private pokeball: Phaser.GameObjects.Sprite; private originalY: number; diff --git a/src/phases/attempt-run-phase.ts b/src/phases/attempt-run-phase.ts index 15c521c01fc..ced81567c43 100644 --- a/src/phases/attempt-run-phase.ts +++ b/src/phases/attempt-run-phase.ts @@ -17,6 +17,7 @@ import { globalScene } from "#app/global-scene"; import { SelectBiomePhase } from "./select-biome-phase"; export class AttemptRunPhase extends PokemonPhase { + public readonly phaseName = "AttemptRunPhase"; /** For testing purposes: this is to force the pokemon to fail and escape */ public forceFailEscape = false; diff --git a/src/phases/battle-end-phase.ts b/src/phases/battle-end-phase.ts index b4bb28fe55e..96f6d02b1fc 100644 --- a/src/phases/battle-end-phase.ts +++ b/src/phases/battle-end-phase.ts @@ -5,6 +5,7 @@ import { BattlePhase } from "./battle-phase"; import { GameOverPhase } from "./game-over-phase"; export class BattleEndPhase extends BattlePhase { + public readonly phaseName = "BattleEndPhase"; /** If true, will increment battles won */ isVictory: boolean; @@ -19,7 +20,7 @@ export class BattleEndPhase extends BattlePhase { // cull any extra `BattleEnd` phases from the queue. globalScene.phaseQueue = globalScene.phaseQueue.filter(phase => { - if (phase instanceof BattleEndPhase) { + if (phase.is("BattleEndPhase")) { this.isVictory ||= phase.isVictory; return false; } @@ -28,7 +29,7 @@ export class BattleEndPhase extends BattlePhase { // `phaseQueuePrepend` is private, so we have to use this inefficient loop. while ( globalScene.tryRemoveUnshiftedPhase(phase => { - if (phase instanceof BattleEndPhase) { + if (phase.is("BattleEndPhase")) { this.isVictory ||= phase.isVictory; return true; } diff --git a/src/phases/battle-phase.ts b/src/phases/battle-phase.ts index d70b3909639..7cefd0369d9 100644 --- a/src/phases/battle-phase.ts +++ b/src/phases/battle-phase.ts @@ -2,7 +2,7 @@ import { globalScene } from "#app/global-scene"; import { TrainerSlot } from "#enums/trainer-slot"; import { Phase } from "#app/phase"; -export class BattlePhase extends Phase { +export abstract class BattlePhase extends Phase { showEnemyTrainer(trainerSlot: TrainerSlot = TrainerSlot.NONE): void { if (!globalScene.currentBattle.trainer) { console.warn("Enemy trainer is missing!"); diff --git a/src/phases/berry-phase.ts b/src/phases/berry-phase.ts index 989f19c944f..8d66d498039 100644 --- a/src/phases/berry-phase.ts +++ b/src/phases/berry-phase.ts @@ -20,6 +20,7 @@ import type Pokemon from "#app/field/pokemon"; * Also triggers Cud Chew's "repeat berry use" effects */ export class BerryPhase extends FieldPhase { + public readonly phaseName = "BerryPhase"; start() { super.start(); diff --git a/src/phases/check-status-effect-phase.ts b/src/phases/check-status-effect-phase.ts index f59dfea9f02..0c5884bbac7 100644 --- a/src/phases/check-status-effect-phase.ts +++ b/src/phases/check-status-effect-phase.ts @@ -4,6 +4,7 @@ import type { BattlerIndex } from "#app/battle"; import { globalScene } from "#app/global-scene"; export class CheckStatusEffectPhase extends Phase { + public readonly phaseName = "CheckStatusEffectPhase"; private order: BattlerIndex[]; constructor(order: BattlerIndex[]) { super(); diff --git a/src/phases/check-switch-phase.ts b/src/phases/check-switch-phase.ts index 9d73411fd37..0506cd36c46 100644 --- a/src/phases/check-switch-phase.ts +++ b/src/phases/check-switch-phase.ts @@ -10,6 +10,7 @@ import { SwitchPhase } from "./switch-phase"; import { SwitchType } from "#enums/switch-type"; export class CheckSwitchPhase extends BattlePhase { + public readonly phaseName = "CheckSwitchPhase"; protected fieldIndex: number; protected useName: boolean; diff --git a/src/phases/command-phase.ts b/src/phases/command-phase.ts index 3f18ea95777..209c1eefc85 100644 --- a/src/phases/command-phase.ts +++ b/src/phases/command-phase.ts @@ -25,6 +25,7 @@ import { ArenaTagSide } from "#app/data/arena-tag"; import { ArenaTagType } from "#app/enums/arena-tag-type"; export class CommandPhase extends FieldPhase { + public readonly phaseName = "CommandPhase"; protected fieldIndex: number; constructor(fieldIndex: number) { diff --git a/src/phases/common-anim-phase.ts b/src/phases/common-anim-phase.ts index 5be5e112389..4a27db3a651 100644 --- a/src/phases/common-anim-phase.ts +++ b/src/phases/common-anim-phase.ts @@ -5,6 +5,9 @@ import { CommonBattleAnim } from "#app/data/battle-anims"; import { PokemonPhase } from "./pokemon-phase"; export class CommonAnimPhase extends PokemonPhase { + // PokemonHealPhase extends CommonAnimPhase, and to make typescript happy, + // we need to allow phaseName to be a union of the two + public readonly phaseName: "CommonAnimPhase" | "PokemonHealPhase" | "WeatherEffectPhase" = "CommonAnimPhase"; private anim: CommonAnim | null; private targetIndex?: BattlerIndex; private playOnEmptyField: boolean; diff --git a/src/phases/damage-anim-phase.ts b/src/phases/damage-anim-phase.ts index b9581573f2e..85cb26e0a09 100644 --- a/src/phases/damage-anim-phase.ts +++ b/src/phases/damage-anim-phase.ts @@ -6,6 +6,7 @@ import { fixedInt } from "#app/utils/common"; import { PokemonPhase } from "#app/phases/pokemon-phase"; export class DamageAnimPhase extends PokemonPhase { + public readonly phaseName = "DamageAnimPhase"; private amount: number; private damageResult: DamageResult; private critical: boolean; diff --git a/src/phases/egg-hatch-phase.ts b/src/phases/egg-hatch-phase.ts index 69bcf741383..dfcdc05f9a2 100644 --- a/src/phases/egg-hatch-phase.ts +++ b/src/phases/egg-hatch-phase.ts @@ -20,6 +20,7 @@ import { doShinySparkleAnim } from "#app/field/anims"; * Class that represents egg hatching */ export class EggHatchPhase extends Phase { + public readonly phaseName = "EggHatchPhase"; /** The egg that is hatching */ private egg: Egg; /** The new EggHatchData for the egg/pokemon that hatches */ @@ -224,7 +225,7 @@ export class EggHatchPhase extends Phase { } end() { - if (globalScene.findPhase(p => p instanceof EggHatchPhase)) { + if (globalScene.findPhase(p => p.is("EggHatchPhase"))) { this.eggHatchHandler.clear(); } else { globalScene.time.delayedCall(250, () => globalScene.setModifiersVisible(true)); diff --git a/src/phases/egg-lapse-phase.ts b/src/phases/egg-lapse-phase.ts index 4632e264c1d..182d6f304d6 100644 --- a/src/phases/egg-lapse-phase.ts +++ b/src/phases/egg-lapse-phase.ts @@ -16,6 +16,7 @@ import { EggHatchData } from "#app/data/egg-hatch-data"; * Also handles prompts for skipping animation, and calling the egg summary phase */ export class EggLapsePhase extends Phase { + public readonly phaseName = "EggLapsePhase"; private eggHatchData: EggHatchData[] = []; private readonly minEggsToSkip: number = 2; diff --git a/src/phases/egg-summary-phase.ts b/src/phases/egg-summary-phase.ts index d16cafa7611..cc7857426bc 100644 --- a/src/phases/egg-summary-phase.ts +++ b/src/phases/egg-summary-phase.ts @@ -9,6 +9,7 @@ import type { EggHatchData } from "#app/data/egg-hatch-data"; * Phase is handled mostly by the egg-hatch-scene-handler UI */ export class EggSummaryPhase extends Phase { + public readonly phaseName = "EggSummaryPhase"; private eggHatchData: EggHatchData[]; constructor(eggHatchData: EggHatchData[]) { diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index c7308fc5a64..df84f8f8ff4 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -47,6 +47,8 @@ import { WEIGHT_INCREMENT_ON_SPAWN_MISS } from "#app/data/mystery-encounters/mys import { getNatureName } from "#app/data/nature"; export class EncounterPhase extends BattlePhase { + // Union type is necessary as this is subclassed, and typescript will otherwise complain + public readonly phaseName: "EncounterPhase" | "NextEncounterPhase" | "NewBiomeEncounterPhase" = "EncounterPhase"; private loaded: boolean; constructor(loaded = false) { diff --git a/src/phases/end-card-phase.ts b/src/phases/end-card-phase.ts index 41775248b67..bb64969514f 100644 --- a/src/phases/end-card-phase.ts +++ b/src/phases/end-card-phase.ts @@ -5,6 +5,7 @@ import { addTextObject, TextStyle } from "#app/ui/text"; import i18next from "i18next"; export class EndCardPhase extends Phase { + public readonly phaseName = "EndCardPhase"; public endCard: Phaser.GameObjects.Image; public text: Phaser.GameObjects.Text; start(): void { diff --git a/src/phases/end-evolution-phase.ts b/src/phases/end-evolution-phase.ts index 579920dde90..cfc0d89fc31 100644 --- a/src/phases/end-evolution-phase.ts +++ b/src/phases/end-evolution-phase.ts @@ -3,6 +3,7 @@ import { Phase } from "#app/phase"; import { UiMode } from "#enums/ui-mode"; export class EndEvolutionPhase extends Phase { + public readonly phaseName = "EndEvolutionPhase"; start() { super.start(); diff --git a/src/phases/enemy-command-phase.ts b/src/phases/enemy-command-phase.ts index 2a1719f9002..a81fc4d2107 100644 --- a/src/phases/enemy-command-phase.ts +++ b/src/phases/enemy-command-phase.ts @@ -15,6 +15,7 @@ import { BattlerTagType } from "#enums/battler-tag-type"; * @see {@linkcode EnemyPokemon.getNextMove} */ export class EnemyCommandPhase extends FieldPhase { + public readonly phaseName = "EnemyCommandPhase"; protected fieldIndex: number; protected skipTurn = false; diff --git a/src/phases/evolution-phase.ts b/src/phases/evolution-phase.ts index 8fc8a8be031..5e635f4cd82 100644 --- a/src/phases/evolution-phase.ts +++ b/src/phases/evolution-phase.ts @@ -19,6 +19,9 @@ import { EndEvolutionPhase } from "#app/phases/end-evolution-phase"; import { EVOLVE_MOVE } from "#app/data/balance/pokemon-level-moves"; export class EvolutionPhase extends Phase { + // FormChangePhase inherits from this, but EvolutionPhase is not abstract. + // We have to use the union here + public readonly phaseName: "EvolutionPhase" | "FormChangePhase" = "EvolutionPhase"; protected pokemon: PlayerPokemon; protected lastLevel: number; diff --git a/src/phases/exp-phase.ts b/src/phases/exp-phase.ts index 8841a90d5b1..14d7d7578f8 100644 --- a/src/phases/exp-phase.ts +++ b/src/phases/exp-phase.ts @@ -7,6 +7,7 @@ import { PlayerPartyMemberPokemonPhase } from "./player-party-member-pokemon-pha import { LevelUpPhase } from "./level-up-phase"; export class ExpPhase extends PlayerPartyMemberPokemonPhase { + public readonly phaseName = "ExpPhase"; private expValue: number; constructor(partyMemberIndex: number, expValue: number) { diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index cd40026e55f..7332d6b9462 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -35,6 +35,7 @@ import { FRIENDSHIP_LOSS_FROM_FAINT } from "#app/data/balance/starters"; import { BattlerTagType } from "#enums/battler-tag-type"; export class FaintPhase extends PokemonPhase { + public readonly phaseName = "FaintPhase"; /** * Whether or not instant revive should be prevented */ diff --git a/src/phases/form-change-phase.ts b/src/phases/form-change-phase.ts index 5517fb0f402..f5e428c6d3d 100644 --- a/src/phases/form-change-phase.ts +++ b/src/phases/form-change-phase.ts @@ -13,6 +13,7 @@ import { BattlerTagType } from "#enums/battler-tag-type"; import { SpeciesFormKey } from "#enums/species-form-key"; export class FormChangePhase extends EvolutionPhase { + public readonly phaseName = "FormChangePhase"; private formChange: SpeciesFormChange; private modal: boolean; diff --git a/src/phases/game-over-modifier-reward-phase.ts b/src/phases/game-over-modifier-reward-phase.ts index ab6f6554c99..13c8f48abad 100644 --- a/src/phases/game-over-modifier-reward-phase.ts +++ b/src/phases/game-over-modifier-reward-phase.ts @@ -4,6 +4,7 @@ import i18next from "i18next"; import { ModifierRewardPhase } from "./modifier-reward-phase"; export class GameOverModifierRewardPhase extends ModifierRewardPhase { + public readonly phaseName = "GameOverModifierRewardPhase"; doReward(): Promise { return new Promise(resolve => { const newModifier = this.modifierType.newModifier(); diff --git a/src/phases/game-over-phase.ts b/src/phases/game-over-phase.ts index 3a3305fd45e..1d03739d610 100644 --- a/src/phases/game-over-phase.ts +++ b/src/phases/game-over-phase.ts @@ -34,6 +34,7 @@ import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; import { MessagePhase } from "./message-phase"; export class GameOverPhase extends BattlePhase { + public readonly phaseName = "GameOverPhase"; private isVictory: boolean; private firstRibbons: PokemonSpecies[] = []; diff --git a/src/phases/hide-ability-phase.ts b/src/phases/hide-ability-phase.ts index 142bb4b251d..b0a12da24b1 100644 --- a/src/phases/hide-ability-phase.ts +++ b/src/phases/hide-ability-phase.ts @@ -2,6 +2,7 @@ import { globalScene } from "#app/global-scene"; import { Phase } from "#app/phase"; export class HideAbilityPhase extends Phase { + public readonly phaseName = "HideAbilityPhase"; start() { super.start(); diff --git a/src/phases/hide-party-exp-bar-phase.ts b/src/phases/hide-party-exp-bar-phase.ts index 52cfd1f71d6..9ee08280cd4 100644 --- a/src/phases/hide-party-exp-bar-phase.ts +++ b/src/phases/hide-party-exp-bar-phase.ts @@ -2,6 +2,7 @@ import { globalScene } from "#app/global-scene"; import { BattlePhase } from "./battle-phase"; export class HidePartyExpBarPhase extends BattlePhase { + public readonly phaseName = "HidePartyExpBarPhase"; start() { super.start(); diff --git a/src/phases/learn-move-phase.ts b/src/phases/learn-move-phase.ts index 65679a7ade7..d455ed35591 100644 --- a/src/phases/learn-move-phase.ts +++ b/src/phases/learn-move-phase.ts @@ -12,7 +12,6 @@ import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; import { PlayerPartyMemberPokemonPhase } from "#app/phases/player-party-member-pokemon-phase"; import type Pokemon from "#app/field/pokemon"; -import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; export enum LearnMoveType { /** For learning a move via level-up, evolution, or other non-item-based event */ @@ -24,6 +23,7 @@ export enum LearnMoveType { } export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { + public readonly phaseName = "LearnMovePhase"; private moveId: MoveId; private messageMode: UiMode; private learnMoveType: LearnMoveType; @@ -195,7 +195,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { pokemon.usedTMs = []; } pokemon.usedTMs.push(this.moveId); - globalScene.tryRemovePhase(phase => phase instanceof SelectModifierPhase); + globalScene.tryRemovePhase(phase => phase.is("SelectModifierPhase")); } else if (this.learnMoveType === LearnMoveType.MEMORY) { if (this.cost !== -1) { if (!Overrides.WAIVE_ROLL_FEE_OVERRIDE) { @@ -205,7 +205,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { } globalScene.playSound("se/buy"); } else { - globalScene.tryRemovePhase(phase => phase instanceof SelectModifierPhase); + globalScene.tryRemovePhase(phase => phase.is("SelectModifierPhase")); } } pokemon.setMove(index, this.moveId); diff --git a/src/phases/level-cap-phase.ts b/src/phases/level-cap-phase.ts index 6f3fa6fdb39..12d4d64e8e2 100644 --- a/src/phases/level-cap-phase.ts +++ b/src/phases/level-cap-phase.ts @@ -4,6 +4,7 @@ import i18next from "i18next"; import { FieldPhase } from "./field-phase"; export class LevelCapPhase extends FieldPhase { + public readonly phaseName = "LevelCapPhase"; start(): void { super.start(); diff --git a/src/phases/level-up-phase.ts b/src/phases/level-up-phase.ts index 8c4f4f58095..7cf86a313df 100644 --- a/src/phases/level-up-phase.ts +++ b/src/phases/level-up-phase.ts @@ -10,6 +10,7 @@ import { NumberHolder } from "#app/utils/common"; import i18next from "i18next"; export class LevelUpPhase extends PlayerPartyMemberPokemonPhase { + public readonly phaseName = "LevelUpPhase"; protected lastLevel: number; protected level: number; protected pokemon: PlayerPokemon = this.getPlayerPokemon(); diff --git a/src/phases/load-move-anim-phase.ts b/src/phases/load-move-anim-phase.ts index c0b6cd58c54..c9b78797407 100644 --- a/src/phases/load-move-anim-phase.ts +++ b/src/phases/load-move-anim-phase.ts @@ -8,6 +8,7 @@ import { Phase } from "#app/phase"; * isn't already loaded (e.g. for Metronome) */ export class LoadMoveAnimPhase extends Phase { + public readonly phaseName = "LoadMoveAnimPhase"; constructor(protected moveId: MoveId) { super(); } diff --git a/src/phases/login-phase.ts b/src/phases/login-phase.ts index 673b94b1148..ec12b5ddaa4 100644 --- a/src/phases/login-phase.ts +++ b/src/phases/login-phase.ts @@ -11,6 +11,7 @@ import { SelectGenderPhase } from "./select-gender-phase"; import { UnavailablePhase } from "./unavailable-phase"; export class LoginPhase extends Phase { + public readonly phaseName = "LoginPhase"; private showText: boolean; constructor(showText = true) { diff --git a/src/phases/message-phase.ts b/src/phases/message-phase.ts index b277d67de82..335258abe5c 100644 --- a/src/phases/message-phase.ts +++ b/src/phases/message-phase.ts @@ -2,6 +2,7 @@ import { globalScene } from "#app/global-scene"; import { Phase } from "#app/phase"; export class MessagePhase extends Phase { + public readonly phaseName = "MessagePhase"; private text: string; private callbackDelay?: number | null; private prompt?: boolean | null; diff --git a/src/phases/modifier-reward-phase.ts b/src/phases/modifier-reward-phase.ts index c94c4deb819..83bd8704f59 100644 --- a/src/phases/modifier-reward-phase.ts +++ b/src/phases/modifier-reward-phase.ts @@ -5,6 +5,10 @@ import i18next from "i18next"; import { BattlePhase } from "./battle-phase"; export class ModifierRewardPhase extends BattlePhase { + // RibbonModifierRewardPhase extends ModifierRewardPhase and to make typescript happy + // we need to use a union type here + public readonly phaseName: "ModifierRewardPhase" | "RibbonModifierRewardPhase" | "GameOverModifierRewardPhase" = + "ModifierRewardPhase"; protected modifierType: ModifierType; constructor(modifierTypeFunc: ModifierTypeFunc) { diff --git a/src/phases/money-reward-phase.ts b/src/phases/money-reward-phase.ts index 708bb3a2fa8..52cb9ecb3ff 100644 --- a/src/phases/money-reward-phase.ts +++ b/src/phases/money-reward-phase.ts @@ -6,6 +6,7 @@ import { NumberHolder } from "#app/utils/common"; import { BattlePhase } from "./battle-phase"; export class MoneyRewardPhase extends BattlePhase { + public readonly phaseName = "MoneyRewardPhase"; private moneyMultiplier: number; constructor(moneyMultiplier: number) { diff --git a/src/phases/move-anim-phase.ts b/src/phases/move-anim-phase.ts index 830e72cb8be..383841a0146 100644 --- a/src/phases/move-anim-phase.ts +++ b/src/phases/move-anim-phase.ts @@ -5,6 +5,8 @@ import { Phase } from "#app/phase"; * Plays the given {@linkcode MoveAnim} sequentially. */ export class MoveAnimPhase extends Phase { + public readonly phaseName = "MoveAnimPhase"; + constructor( protected anim: Anim, protected onSubstitute = false, diff --git a/src/phases/move-charge-phase.ts b/src/phases/move-charge-phase.ts index ea43f1ddb88..789651623fa 100644 --- a/src/phases/move-charge-phase.ts +++ b/src/phases/move-charge-phase.ts @@ -9,13 +9,13 @@ import { BooleanHolder } from "#app/utils/common"; import { MovePhase } from "#app/phases/move-phase"; import { PokemonPhase } from "#app/phases/pokemon-phase"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { MoveEndPhase } from "#app/phases/move-end-phase"; /** * Phase for the "charging turn" of two-turn moves (e.g. Dig). * @extends {@linkcode PokemonPhase} */ export class MoveChargePhase extends PokemonPhase { + public readonly phaseName = "MoveChargePhase"; /** The move instance that this phase applies */ public move: PokemonMove; /** The field index targeted by the move (Charging moves assume single target) */ @@ -62,7 +62,7 @@ export class MoveChargePhase extends PokemonPhase { if (instantCharge.value) { // this MoveEndPhase will be duplicated by the queued MovePhase if not removed - globalScene.tryRemovePhase(phase => phase instanceof MoveEndPhase && phase.getPokemon() === user); + globalScene.tryRemovePhase(phase => phase.is("MoveEndPhase") && phase.getPokemon() === user); // queue a new MovePhase for this move's attack phase globalScene.unshiftPhase(new MovePhase(user, [this.targetIndex], this.move, false)); } else { diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index 636f85f0f82..3160d848624 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -82,6 +82,7 @@ import { DamageAchv } from "#app/system/achv"; type HitCheckEntry = [HitCheckResult, TypeDamageMultiplier]; export class MoveEffectPhase extends PokemonPhase { + public readonly phaseName = "MoveEffectPhase"; public move: Move; private virtual = false; protected targets: BattlerIndex[]; diff --git a/src/phases/move-end-phase.ts b/src/phases/move-end-phase.ts index 037596dca59..6642b97773b 100644 --- a/src/phases/move-end-phase.ts +++ b/src/phases/move-end-phase.ts @@ -6,6 +6,7 @@ import { applyPostSummonAbAttrs, PostSummonRemoveEffectAbAttr } from "#app/data/ import type Pokemon from "#app/field/pokemon"; export class MoveEndPhase extends PokemonPhase { + public readonly phaseName = "MoveEndPhase"; private wasFollowUp: boolean; /** Targets from the preceding MovePhase */ diff --git a/src/phases/move-header-phase.ts b/src/phases/move-header-phase.ts index c320df462d1..50100e827d6 100644 --- a/src/phases/move-header-phase.ts +++ b/src/phases/move-header-phase.ts @@ -4,6 +4,7 @@ import type Pokemon from "#app/field/pokemon"; import { BattlePhase } from "./battle-phase"; export class MoveHeaderPhase extends BattlePhase { + public readonly phaseName = "MoveHeaderPhase"; public pokemon: Pokemon; public move: PokemonMove; diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index 1ccf5b7957e..300c27e01fc 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -52,6 +52,7 @@ import { StatusEffect } from "#enums/status-effect"; import i18next from "i18next"; export class MovePhase extends BattlePhase { + public readonly phaseName = "MovePhase"; protected _pokemon: Pokemon; protected _move: PokemonMove; protected _targets: BattlerIndex[]; diff --git a/src/phases/mystery-encounter-phases.ts b/src/phases/mystery-encounter-phases.ts index fd0c4ef7949..5365ab3da32 100644 --- a/src/phases/mystery-encounter-phases.ts +++ b/src/phases/mystery-encounter-phases.ts @@ -6,7 +6,6 @@ import { getEncounterText } from "#app/data/mystery-encounters/utils/encounter-d import { CheckSwitchPhase } from "#app/phases/check-switch-phase"; import { GameOverPhase } from "#app/phases/game-over-phase"; import { NewBattlePhase } from "#app/phases/new-battle-phase"; -import { PostTurnStatusEffectPhase } from "#app/phases/post-turn-status-effect-phase"; import { ReturnPhase } from "#app/phases/return-phase"; import { ScanIvsPhase } from "#app/phases/scan-ivs-phase"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; @@ -39,6 +38,7 @@ import { SelectBiomePhase } from "./select-biome-phase"; * - Queuing of the {@linkcode MysteryEncounterOptionSelectedPhase} */ export class MysteryEncounterPhase extends Phase { + public readonly phaseName = "MysteryEncounterPhase"; private readonly FIRST_DIALOGUE_PROMPT_DELAY = 300; optionSelectSettings?: OptionSelectSettings; @@ -180,6 +180,7 @@ export class MysteryEncounterPhase extends Phase { * Any phase that is meant to follow this one MUST be queued via the onOptionSelect() logic of the selected option */ export class MysteryEncounterOptionSelectedPhase extends Phase { + public readonly phaseName = "MysteryEncounterOptionSelectedPhase"; onOptionSelect: OptionPhaseCallback; constructor() { @@ -221,6 +222,7 @@ export class MysteryEncounterOptionSelectedPhase extends Phase { * See {@linkcode TurnEndPhase} for more details */ export class MysteryEncounterBattleStartCleanupPhase extends Phase { + public readonly phaseName = "MysteryEncounterBattleStartCleanupPhase"; /** * Cleans up `TURN_END` tags, any {@linkcode PostTurnStatusEffectPhase}s, checks for Pokemon switches, then continues */ @@ -245,8 +247,8 @@ export class MysteryEncounterBattleStartCleanupPhase extends Phase { }); // Remove any status tick phases - while (globalScene.findPhase(p => p instanceof PostTurnStatusEffectPhase)) { - globalScene.tryRemovePhase(p => p instanceof PostTurnStatusEffectPhase); + while (globalScene.findPhase(p => p.is("PostTurnStatusEffectPhase"))) { + globalScene.tryRemovePhase(p => p.is("PostTurnStatusEffectPhase")); } // The total number of Pokemon in the player's party that can legally fight @@ -284,6 +286,7 @@ export class MysteryEncounterBattleStartCleanupPhase extends Phase { * - Queue the {@linkcode SummonPhase}s, {@linkcode PostSummonPhase}s, etc., required to initialize the phase queue for a battle */ export class MysteryEncounterBattlePhase extends Phase { + public readonly phaseName = "MysteryEncounterBattlePhase"; disableSwitch: boolean; constructor(disableSwitch = false) { @@ -513,6 +516,7 @@ export class MysteryEncounterBattlePhase extends Phase { * - Queuing of the {@linkcode PostMysteryEncounterPhase} */ export class MysteryEncounterRewardsPhase extends Phase { + public readonly phaseName = "MysteryEncounterRewardsPhase"; addHealPhase: boolean; constructor(addHealPhase = false) { @@ -558,7 +562,7 @@ export class MysteryEncounterRewardsPhase extends Phase { if (encounter.doEncounterRewards) { encounter.doEncounterRewards(); } else if (this.addHealPhase) { - globalScene.tryRemovePhase(p => p instanceof SelectModifierPhase); + globalScene.tryRemovePhase(p => p.is("SelectModifierPhase")); globalScene.unshiftPhase( new SelectModifierPhase(0, undefined, { fillRemaining: false, @@ -580,6 +584,7 @@ export class MysteryEncounterRewardsPhase extends Phase { * - Queuing of the next wave */ export class PostMysteryEncounterPhase extends Phase { + public readonly phaseName = "PostMysteryEncounterPhase"; private readonly FIRST_DIALOGUE_PROMPT_DELAY = 750; onPostOptionSelect?: OptionPhaseCallback; diff --git a/src/phases/new-battle-phase.ts b/src/phases/new-battle-phase.ts index 09b8ab1d335..c4cfc72fb53 100644 --- a/src/phases/new-battle-phase.ts +++ b/src/phases/new-battle-phase.ts @@ -2,13 +2,14 @@ import { globalScene } from "#app/global-scene"; import { BattlePhase } from "./battle-phase"; export class NewBattlePhase extends BattlePhase { + public readonly phaseName = "NewBattlePhase"; start() { super.start(); // cull any extra `NewBattle` phases from the queue. - globalScene.phaseQueue = globalScene.phaseQueue.filter(phase => !(phase instanceof NewBattlePhase)); + globalScene.phaseQueue = globalScene.phaseQueue.filter(phase => !phase.is("NewBattlePhase")); // `phaseQueuePrepend` is private, so we have to use this inefficient loop. - while (globalScene.tryRemoveUnshiftedPhase(phase => phase instanceof NewBattlePhase)) {} + while (globalScene.tryRemoveUnshiftedPhase(phase => phase.is("NewBattlePhase"))) {} globalScene.newBattle(); diff --git a/src/phases/new-biome-encounter-phase.ts b/src/phases/new-biome-encounter-phase.ts index ef027bfd77a..29ba67cb797 100644 --- a/src/phases/new-biome-encounter-phase.ts +++ b/src/phases/new-biome-encounter-phase.ts @@ -4,6 +4,7 @@ import { getRandomWeatherType } from "#app/data/weather"; import { NextEncounterPhase } from "./next-encounter-phase"; export class NewBiomeEncounterPhase extends NextEncounterPhase { + public readonly phaseName = "NewBiomeEncounterPhase"; doEncounter(): void { globalScene.playBgm(undefined, true); diff --git a/src/phases/next-encounter-phase.ts b/src/phases/next-encounter-phase.ts index 30b4004363c..c31b4b5bbc3 100644 --- a/src/phases/next-encounter-phase.ts +++ b/src/phases/next-encounter-phase.ts @@ -6,6 +6,7 @@ import { EncounterPhase } from "./encounter-phase"; * Handles generating, loading and preparing for it. */ export class NextEncounterPhase extends EncounterPhase { + public readonly phaseName: "NextEncounterPhase" | "NewBiomeEncounterPhase" = "NextEncounterPhase"; start() { super.start(); } diff --git a/src/phases/obtain-status-effect-phase.ts b/src/phases/obtain-status-effect-phase.ts index 47cae2dcbf6..820db910681 100644 --- a/src/phases/obtain-status-effect-phase.ts +++ b/src/phases/obtain-status-effect-phase.ts @@ -11,6 +11,7 @@ import { applyPostSetStatusAbAttrs, PostSetStatusAbAttr } from "#app/data/abilit import { isNullOrUndefined } from "#app/utils/common"; export class ObtainStatusEffectPhase extends PokemonPhase { + public readonly phaseName = "ObtainStatusEffectPhase"; private statusEffect?: StatusEffect; private turnsRemaining?: number; private sourceText?: string | null; diff --git a/src/phases/party-exp-phase.ts b/src/phases/party-exp-phase.ts index 8fd9e1cf0f6..30fc97d9105 100644 --- a/src/phases/party-exp-phase.ts +++ b/src/phases/party-exp-phase.ts @@ -6,6 +6,7 @@ import { Phase } from "#app/phase"; * Intended to be used as a more 1-off phase to provide exp to the party (such as during MEs), rather than cleanup a battle entirely */ export class PartyExpPhase extends Phase { + public readonly phaseName = "PartyExpPhase"; expValue: number; useWaveIndexMultiplier?: boolean; pokemonParticipantIds?: Set; diff --git a/src/phases/party-heal-phase.ts b/src/phases/party-heal-phase.ts index 4a9f8a0c888..765c7dbad8e 100644 --- a/src/phases/party-heal-phase.ts +++ b/src/phases/party-heal-phase.ts @@ -3,6 +3,7 @@ import { fixedInt } from "#app/utils/common"; import { BattlePhase } from "./battle-phase"; export class PartyHealPhase extends BattlePhase { + public readonly phaseName = "PartyHealPhase"; private resumeBgm: boolean; constructor(resumeBgm: boolean) { diff --git a/src/phases/pokemon-anim-phase.ts b/src/phases/pokemon-anim-phase.ts index e9f0097459a..b1a21446996 100644 --- a/src/phases/pokemon-anim-phase.ts +++ b/src/phases/pokemon-anim-phase.ts @@ -7,6 +7,7 @@ import { PokemonAnimType } from "#enums/pokemon-anim-type"; import { SpeciesId } from "#enums/species-id"; export class PokemonAnimPhase extends BattlePhase { + public readonly phaseName = "PokemonAnimPhase"; /** The type of animation to play in this phase */ protected key: PokemonAnimType; /** The Pokemon to which this animation applies */ diff --git a/src/phases/pokemon-heal-phase.ts b/src/phases/pokemon-heal-phase.ts index 7cb013251f6..60bbb17c30a 100644 --- a/src/phases/pokemon-heal-phase.ts +++ b/src/phases/pokemon-heal-phase.ts @@ -14,6 +14,7 @@ import { BattlerTagType } from "#app/enums/battler-tag-type"; import type { HealBlockTag } from "#app/data/battler-tags"; export class PokemonHealPhase extends CommonAnimPhase { + public readonly phaseName = "PokemonHealPhase"; private hpHealed: number; private message: string | null; private showFullHpMessage: boolean; diff --git a/src/phases/pokemon-transform-phase.ts b/src/phases/pokemon-transform-phase.ts index 23a9a983bae..c0f3b048003 100644 --- a/src/phases/pokemon-transform-phase.ts +++ b/src/phases/pokemon-transform-phase.ts @@ -13,6 +13,7 @@ import i18next from "i18next"; * Used for Transform (move) and Imposter (ability) */ export class PokemonTransformPhase extends PokemonPhase { + public readonly phaseName = "PokemonTransformPhase"; protected targetIndex: BattlerIndex; private playSound: boolean; diff --git a/src/phases/post-game-over-phase.ts b/src/phases/post-game-over-phase.ts index 753251e992f..f985419da7a 100644 --- a/src/phases/post-game-over-phase.ts +++ b/src/phases/post-game-over-phase.ts @@ -4,6 +4,7 @@ import type { EndCardPhase } from "./end-card-phase"; import { TitlePhase } from "./title-phase"; export class PostGameOverPhase extends Phase { + public readonly phaseName = "PostGameOverPhase"; private endCardPhase?: EndCardPhase; constructor(endCardPhase?: EndCardPhase) { diff --git a/src/phases/post-summon-phase.ts b/src/phases/post-summon-phase.ts index 446d45bb2fa..a7faf614292 100644 --- a/src/phases/post-summon-phase.ts +++ b/src/phases/post-summon-phase.ts @@ -7,6 +7,7 @@ import { MysteryEncounterPostSummonTag } from "#app/data/battler-tags"; import { BattlerTagType } from "#enums/battler-tag-type"; export class PostSummonPhase extends PokemonPhase { + public readonly phaseName = "PostSummonPhase"; start() { super.start(); diff --git a/src/phases/post-turn-status-effect-phase.ts b/src/phases/post-turn-status-effect-phase.ts index 9b530d48196..47a84059745 100644 --- a/src/phases/post-turn-status-effect-phase.ts +++ b/src/phases/post-turn-status-effect-phase.ts @@ -17,6 +17,7 @@ import { BooleanHolder, NumberHolder } from "#app/utils/common"; import { PokemonPhase } from "./pokemon-phase"; export class PostTurnStatusEffectPhase extends PokemonPhase { + public readonly phaseName = "PostTurnStatusEffectPhase"; // biome-ignore lint/complexity/noUselessConstructor: Not unnecessary as it makes battlerIndex required constructor(battlerIndex: BattlerIndex) { super(battlerIndex); diff --git a/src/phases/quiet-form-change-phase.ts b/src/phases/quiet-form-change-phase.ts index 76411f62f77..9f6b5cb3361 100644 --- a/src/phases/quiet-form-change-phase.ts +++ b/src/phases/quiet-form-change-phase.ts @@ -9,7 +9,7 @@ import type Pokemon from "#app/field/pokemon"; import { EnemyPokemon } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { BattlePhase } from "./battle-phase"; -import { MovePhase } from "./move-phase"; +import type { MovePhase } from "./move-phase"; import { PokemonHealPhase } from "./pokemon-heal-phase"; import { applyAbAttrs, @@ -19,6 +19,7 @@ import { } from "#app/data/abilities/ability"; export class QuietFormChangePhase extends BattlePhase { + public readonly phaseName = "QuietFormChangePhase"; protected pokemon: Pokemon; protected formChange: SpeciesFormChange; @@ -168,7 +169,7 @@ export class QuietFormChangePhase extends BattlePhase { this.pokemon.initBattleInfo(); this.pokemon.cry(); - const movePhase = globalScene.findPhase(p => p instanceof MovePhase && p.pokemon === this.pokemon) as MovePhase; + const movePhase = globalScene.findPhase(p => p.is("MovePhase") && p.pokemon === this.pokemon) as MovePhase; if (movePhase) { movePhase.cancel(); } diff --git a/src/phases/reload-session-phase.ts b/src/phases/reload-session-phase.ts index 8cd5f67b43a..ac9337753c4 100644 --- a/src/phases/reload-session-phase.ts +++ b/src/phases/reload-session-phase.ts @@ -4,6 +4,7 @@ import { UiMode } from "#enums/ui-mode"; import { fixedInt } from "#app/utils/common"; export class ReloadSessionPhase extends Phase { + public readonly phaseName = "ReloadSessionPhase"; private systemDataStr?: string; constructor(systemDataStr?: string) { diff --git a/src/phases/reset-status-phase.ts b/src/phases/reset-status-phase.ts index 19bfc3027e2..779f375d7e2 100644 --- a/src/phases/reset-status-phase.ts +++ b/src/phases/reset-status-phase.ts @@ -7,6 +7,7 @@ import { BattlePhase } from "#app/phases/battle-phase"; * This is necessary to perform in a phase primarly to ensure that the status icon disappears at the correct time in the battle */ export class ResetStatusPhase extends BattlePhase { + public readonly phaseName = "ResetStatusPhase"; private readonly pokemon: Pokemon; private readonly affectConfusion: boolean; private readonly reloadAssets: boolean; diff --git a/src/phases/return-phase.ts b/src/phases/return-phase.ts index 6dee982a4f0..6365256d40a 100644 --- a/src/phases/return-phase.ts +++ b/src/phases/return-phase.ts @@ -4,6 +4,7 @@ import { SwitchType } from "#enums/switch-type"; import { SwitchSummonPhase } from "./switch-summon-phase"; export class ReturnPhase extends SwitchSummonPhase { + public readonly phaseName = "ReturnPhase"; constructor(fieldIndex: number) { super(SwitchType.SWITCH, fieldIndex, -1, true); } diff --git a/src/phases/revival-blessing-phase.ts b/src/phases/revival-blessing-phase.ts index 428acaf9ed4..3f70c93dd7a 100644 --- a/src/phases/revival-blessing-phase.ts +++ b/src/phases/revival-blessing-phase.ts @@ -15,6 +15,7 @@ import type { PlayerPokemon } from "#app/field/pokemon"; * when used by one of the player's Pokemon. */ export class RevivalBlessingPhase extends BattlePhase { + public readonly phaseName = "RevivalBlessingPhase"; constructor(protected user: PlayerPokemon) { super(); } diff --git a/src/phases/ribbon-modifier-reward-phase.ts b/src/phases/ribbon-modifier-reward-phase.ts index 21114ab3de9..949f7af0302 100644 --- a/src/phases/ribbon-modifier-reward-phase.ts +++ b/src/phases/ribbon-modifier-reward-phase.ts @@ -6,6 +6,7 @@ import i18next from "i18next"; import { ModifierRewardPhase } from "./modifier-reward-phase"; export class RibbonModifierRewardPhase extends ModifierRewardPhase { + public readonly phaseName = "RibbonModifierRewardPhase"; private species: PokemonSpecies; constructor(modifierTypeFunc: ModifierTypeFunc, species: PokemonSpecies) { diff --git a/src/phases/scan-ivs-phase.ts b/src/phases/scan-ivs-phase.ts index d79a32bd47e..df68a2d1cab 100644 --- a/src/phases/scan-ivs-phase.ts +++ b/src/phases/scan-ivs-phase.ts @@ -8,6 +8,7 @@ import i18next from "i18next"; import { PokemonPhase } from "./pokemon-phase"; export class ScanIvsPhase extends PokemonPhase { + public readonly phaseName = "ScanIvsPhase"; // biome-ignore lint/complexity/noUselessConstructor: This changes `battlerIndex` to be required constructor(battlerIndex: BattlerIndex) { super(battlerIndex); diff --git a/src/phases/select-biome-phase.ts b/src/phases/select-biome-phase.ts index a7736b16811..ef6b39e8b8f 100644 --- a/src/phases/select-biome-phase.ts +++ b/src/phases/select-biome-phase.ts @@ -10,6 +10,7 @@ import { PartyHealPhase } from "./party-heal-phase"; import { SwitchBiomePhase } from "./switch-biome-phase"; export class SelectBiomePhase extends BattlePhase { + public readonly phaseName = "SelectBiomePhase"; start() { super.start(); diff --git a/src/phases/select-challenge-phase.ts b/src/phases/select-challenge-phase.ts index 76ac8a60c4f..dcf72d1b441 100644 --- a/src/phases/select-challenge-phase.ts +++ b/src/phases/select-challenge-phase.ts @@ -3,6 +3,7 @@ import { Phase } from "#app/phase"; import { UiMode } from "#enums/ui-mode"; export class SelectChallengePhase extends Phase { + public readonly phaseName = "SelectChallengePhase"; start() { super.start(); diff --git a/src/phases/select-gender-phase.ts b/src/phases/select-gender-phase.ts index a1171c1a5db..ad8515e312e 100644 --- a/src/phases/select-gender-phase.ts +++ b/src/phases/select-gender-phase.ts @@ -6,6 +6,7 @@ import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; export class SelectGenderPhase extends Phase { + public readonly phaseName = "SelectGenderPhase"; start(): void { super.start(); diff --git a/src/phases/select-modifier-phase.ts b/src/phases/select-modifier-phase.ts index 5f11441333b..6e429d9ad7f 100644 --- a/src/phases/select-modifier-phase.ts +++ b/src/phases/select-modifier-phase.ts @@ -32,6 +32,7 @@ import type { CustomModifierSettings } from "#app/modifier/modifier-type"; import { isNullOrUndefined, NumberHolder } from "#app/utils/common"; export class SelectModifierPhase extends BattlePhase { + public readonly phaseName = "SelectModifierPhase"; private rerollCount: number; private modifierTiers?: ModifierTier[]; private customModifierSettings?: CustomModifierSettings; diff --git a/src/phases/select-starter-phase.ts b/src/phases/select-starter-phase.ts index 6d333f4001c..d25c2dd7211 100644 --- a/src/phases/select-starter-phase.ts +++ b/src/phases/select-starter-phase.ts @@ -15,6 +15,7 @@ import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; import { isNullOrUndefined } from "#app/utils/common"; export class SelectStarterPhase extends Phase { + public readonly phaseName = "SelectStarterPhase"; start() { super.start(); diff --git a/src/phases/select-target-phase.ts b/src/phases/select-target-phase.ts index f8a8ecfbf18..46ba378a56c 100644 --- a/src/phases/select-target-phase.ts +++ b/src/phases/select-target-phase.ts @@ -8,6 +8,7 @@ import i18next from "#app/plugins/i18n"; import { allMoves } from "#app/data/data-lists"; export class SelectTargetPhase extends PokemonPhase { + public readonly phaseName = "SelectTargetPhase"; // biome-ignore lint/complexity/noUselessConstructor: This makes `fieldIndex` required constructor(fieldIndex: number) { super(fieldIndex); diff --git a/src/phases/shiny-sparkle-phase.ts b/src/phases/shiny-sparkle-phase.ts index 87a7db29cf6..93d7dd67209 100644 --- a/src/phases/shiny-sparkle-phase.ts +++ b/src/phases/shiny-sparkle-phase.ts @@ -3,6 +3,7 @@ import type { BattlerIndex } from "#app/battle"; import { PokemonPhase } from "./pokemon-phase"; export class ShinySparklePhase extends PokemonPhase { + public readonly phaseName = "ShinySparklePhase"; // biome-ignore lint/complexity/noUselessConstructor: This makes `battlerIndex` required constructor(battlerIndex: BattlerIndex) { super(battlerIndex); diff --git a/src/phases/show-ability-phase.ts b/src/phases/show-ability-phase.ts index d6193ac3946..81aa69537e5 100644 --- a/src/phases/show-ability-phase.ts +++ b/src/phases/show-ability-phase.ts @@ -5,6 +5,7 @@ import { getPokemonNameWithAffix } from "#app/messages"; import { HideAbilityPhase } from "#app/phases/hide-ability-phase"; export class ShowAbilityPhase extends PokemonPhase { + public readonly phaseName = "ShowAbilityPhase"; private passive: boolean; private pokemonName: string; private abilityName: string; diff --git a/src/phases/show-party-exp-bar-phase.ts b/src/phases/show-party-exp-bar-phase.ts index 89bec6d8fdd..6b4236f0868 100644 --- a/src/phases/show-party-exp-bar-phase.ts +++ b/src/phases/show-party-exp-bar-phase.ts @@ -8,6 +8,7 @@ import { LevelUpPhase } from "./level-up-phase"; import { PlayerPartyMemberPokemonPhase } from "./player-party-member-pokemon-phase"; export class ShowPartyExpBarPhase extends PlayerPartyMemberPokemonPhase { + public readonly phaseName = "ShowPartyExpBarPhase"; private expValue: number; constructor(partyMemberIndex: number, expValue: number) { diff --git a/src/phases/show-trainer-phase.ts b/src/phases/show-trainer-phase.ts index b6c1e345c70..bae6ecd839c 100644 --- a/src/phases/show-trainer-phase.ts +++ b/src/phases/show-trainer-phase.ts @@ -3,6 +3,7 @@ import { PlayerGender } from "#app/enums/player-gender"; import { BattlePhase } from "./battle-phase"; export class ShowTrainerPhase extends BattlePhase { + public readonly phaseName = "ShowTrainerPhase"; start() { super.start(); diff --git a/src/phases/stat-stage-change-phase.ts b/src/phases/stat-stage-change-phase.ts index 6731e45025c..baa93c63099 100644 --- a/src/phases/stat-stage-change-phase.ts +++ b/src/phases/stat-stage-change-phase.ts @@ -31,6 +31,7 @@ export type StatStageChangeCallback = ( ) => void; export class StatStageChangePhase extends PokemonPhase { + public readonly phaseName = "StatStageChangePhase"; private stats: BattleStat[]; private selfTarget: boolean; private stages: number; @@ -235,9 +236,9 @@ export class StatStageChangePhase extends PokemonPhase { // Look for any other stat change phases; if this is the last one, do White Herb check const existingPhase = globalScene.findPhase( - p => p instanceof StatStageChangePhase && p.battlerIndex === this.battlerIndex, + p => p.is("StatStageChangePhase") && p.battlerIndex === this.battlerIndex, ); - if (!(existingPhase instanceof StatStageChangePhase)) { + if (!existingPhase?.is("StatStageChangePhase")) { // Apply White Herb if needed const whiteHerb = globalScene.applyModifier( ResetNegativeStatStageModifier, @@ -316,7 +317,7 @@ export class StatStageChangePhase extends PokemonPhase { while ( (existingPhase = globalScene.findPhase( p => - p instanceof StatStageChangePhase && + p.is("StatStageChangePhase") && p.battlerIndex === this.battlerIndex && p.stats.length === 1 && p.stats[0] === this.stats[0] && @@ -335,7 +336,7 @@ export class StatStageChangePhase extends PokemonPhase { while ( (existingPhase = globalScene.findPhase( p => - p instanceof StatStageChangePhase && + p.is("StatStageChangePhase") && p.battlerIndex === this.battlerIndex && p.selfTarget === this.selfTarget && accEva.some(s => p.stats.includes(s)) === isAccEva && diff --git a/src/phases/summon-missing-phase.ts b/src/phases/summon-missing-phase.ts index a692455ce47..ce3e982055e 100644 --- a/src/phases/summon-missing-phase.ts +++ b/src/phases/summon-missing-phase.ts @@ -4,6 +4,7 @@ import { SummonPhase } from "./summon-phase"; import { globalScene } from "#app/global-scene"; export class SummonMissingPhase extends SummonPhase { + public readonly phaseName = "SummonMissingPhase"; preSummon(): void { globalScene.ui.showText( i18next.t("battle:sendOutPokemon", { diff --git a/src/phases/summon-phase.ts b/src/phases/summon-phase.ts index c217583f163..2cd7b122bb3 100644 --- a/src/phases/summon-phase.ts +++ b/src/phases/summon-phase.ts @@ -17,6 +17,8 @@ import { applyPreSummonAbAttrs, PreSummonAbAttr } from "#app/data/abilities/abil import { globalScene } from "#app/global-scene"; export class SummonPhase extends PartyMemberPokemonPhase { + // The union type is needed to keep typescript happy as these phases extend from SummonPhase + public readonly phaseName: "SummonPhase" | "SummonMissingPhase" | "SwitchSummonPhase" | "ReturnPhase" = "SummonPhase"; private loaded: boolean; constructor(fieldIndex: number, player = true, loaded = false) { diff --git a/src/phases/switch-biome-phase.ts b/src/phases/switch-biome-phase.ts index 69a6c97cd9a..f84f1d517b4 100644 --- a/src/phases/switch-biome-phase.ts +++ b/src/phases/switch-biome-phase.ts @@ -4,6 +4,7 @@ import { getBiomeKey } from "#app/field/arena"; import { BattlePhase } from "./battle-phase"; export class SwitchBiomePhase extends BattlePhase { + public readonly phaseName = "SwitchBiomePhase"; private nextBiome: BiomeId; constructor(nextBiome: BiomeId) { diff --git a/src/phases/switch-phase.ts b/src/phases/switch-phase.ts index c056b186021..6017aa0fa70 100644 --- a/src/phases/switch-phase.ts +++ b/src/phases/switch-phase.ts @@ -3,7 +3,6 @@ import PartyUiHandler, { PartyOption, PartyUiMode } from "#app/ui/party-ui-handl import { UiMode } from "#enums/ui-mode"; import { SwitchType } from "#enums/switch-type"; import { BattlePhase } from "./battle-phase"; -import { PostSummonPhase } from "./post-summon-phase"; import { SwitchSummonPhase } from "./switch-summon-phase"; /** @@ -11,6 +10,7 @@ import { SwitchSummonPhase } from "./switch-summon-phase"; * for the player (if a switch would be valid for the current battle state). */ export class SwitchPhase extends BattlePhase { + public readonly phaseName = "SwitchPhase"; protected readonly fieldIndex: number; private readonly switchType: SwitchType; private readonly isModal: boolean; @@ -76,7 +76,7 @@ export class SwitchPhase extends BattlePhase { if (slotIndex >= globalScene.currentBattle.getBattlerCount() && slotIndex < 6) { // Remove any pre-existing PostSummonPhase under the same field index. // Pre-existing PostSummonPhases may occur when this phase is invoked during a prompt to switch at the start of a wave. - globalScene.tryRemovePhase(p => p instanceof PostSummonPhase && p.player && p.fieldIndex === this.fieldIndex); + globalScene.tryRemovePhase(p => p.is("PostSummonPhase") && p.player && p.fieldIndex === this.fieldIndex); const switchType = option === PartyOption.PASS_BATON ? SwitchType.BATON_PASS : this.switchType; globalScene.unshiftPhase(new SwitchSummonPhase(switchType, fieldIndex, slotIndex, this.doReturn)); } diff --git a/src/phases/switch-summon-phase.ts b/src/phases/switch-summon-phase.ts index 6bdbb66be14..d81ca6029c5 100644 --- a/src/phases/switch-summon-phase.ts +++ b/src/phases/switch-summon-phase.ts @@ -22,6 +22,7 @@ import { SubstituteTag } from "#app/data/battler-tags"; import { SwitchType } from "#enums/switch-type"; export class SwitchSummonPhase extends SummonPhase { + public readonly phaseName: "SwitchSummonPhase" | "ReturnPhase" = "SwitchSummonPhase"; private readonly switchType: SwitchType; private readonly slotIndex: number; private readonly doReturn: boolean; diff --git a/src/phases/tera-phase.ts b/src/phases/tera-phase.ts index c9320daf12f..5e4ea2fe54e 100644 --- a/src/phases/tera-phase.ts +++ b/src/phases/tera-phase.ts @@ -9,6 +9,7 @@ import { SpeciesFormChangeTeraTrigger } from "#app/data/pokemon-forms"; import { CommonAnim, CommonBattleAnim } from "#app/data/battle-anims"; export class TeraPhase extends BattlePhase { + public readonly phaseName = "TeraPhase"; public pokemon: Pokemon; constructor(pokemon: Pokemon) { diff --git a/src/phases/title-phase.ts b/src/phases/title-phase.ts index 56057c23372..aa9ae49ca8b 100644 --- a/src/phases/title-phase.ts +++ b/src/phases/title-phase.ts @@ -29,6 +29,7 @@ import { globalScene } from "#app/global-scene"; import Overrides from "#app/overrides"; export class TitlePhase extends Phase { + public readonly phaseName = "TitlePhase"; private loaded = false; private lastSessionData: SessionSaveData; public gameMode: GameModes; diff --git a/src/phases/toggle-double-position-phase.ts b/src/phases/toggle-double-position-phase.ts index 37f47d5cf95..a6b8705f580 100644 --- a/src/phases/toggle-double-position-phase.ts +++ b/src/phases/toggle-double-position-phase.ts @@ -3,6 +3,7 @@ import { FieldPosition } from "#app/field/pokemon"; import { BattlePhase } from "./battle-phase"; export class ToggleDoublePositionPhase extends BattlePhase { + public readonly phaseName = "ToggleDoublePositionPhase"; private double: boolean; constructor(double: boolean) { diff --git a/src/phases/trainer-victory-phase.ts b/src/phases/trainer-victory-phase.ts index daf5c38e57b..bd035248530 100644 --- a/src/phases/trainer-victory-phase.ts +++ b/src/phases/trainer-victory-phase.ts @@ -14,6 +14,7 @@ import { achvs } from "#app/system/achv"; import { timedEventManager } from "#app/global-event-manager"; export class TrainerVictoryPhase extends BattlePhase { + public readonly phaseName = "TrainerVictoryPhase"; start() { globalScene.disableMenu = true; diff --git a/src/phases/turn-end-phase.ts b/src/phases/turn-end-phase.ts index 756c497802b..4d486c4bbd6 100644 --- a/src/phases/turn-end-phase.ts +++ b/src/phases/turn-end-phase.ts @@ -18,6 +18,7 @@ import { PokemonHealPhase } from "./pokemon-heal-phase"; import { globalScene } from "#app/global-scene"; export class TurnEndPhase extends FieldPhase { + public readonly phaseName = "TurnEndPhase"; start() { super.start(); diff --git a/src/phases/turn-init-phase.ts b/src/phases/turn-init-phase.ts index 0c110024af7..7f94acd3b32 100644 --- a/src/phases/turn-init-phase.ts +++ b/src/phases/turn-init-phase.ts @@ -15,6 +15,7 @@ import { TurnStartPhase } from "./turn-start-phase"; import { globalScene } from "#app/global-scene"; export class TurnInitPhase extends FieldPhase { + public readonly phaseName = "TurnInitPhase"; start() { super.start(); diff --git a/src/phases/turn-start-phase.ts b/src/phases/turn-start-phase.ts index a02d869af10..2d009b30bf3 100644 --- a/src/phases/turn-start-phase.ts +++ b/src/phases/turn-start-phase.ts @@ -25,6 +25,7 @@ import { globalScene } from "#app/global-scene"; import { TeraPhase } from "./tera-phase"; export class TurnStartPhase extends FieldPhase { + public readonly phaseName = "TurnStartPhase"; /** * This orders the active Pokemon on the field by speed into an BattlerIndex array and returns that array. * It also checks for Trick Room and reverses the array if it is present. diff --git a/src/phases/unavailable-phase.ts b/src/phases/unavailable-phase.ts index e5f1d899191..4c4333ceb90 100644 --- a/src/phases/unavailable-phase.ts +++ b/src/phases/unavailable-phase.ts @@ -4,6 +4,7 @@ import { UiMode } from "#enums/ui-mode"; import { LoginPhase } from "./login-phase"; export class UnavailablePhase extends Phase { + public readonly phaseName = "UnavailablePhase"; start(): void { globalScene.ui.setMode(UiMode.UNAVAILABLE, () => { globalScene.unshiftPhase(new LoginPhase(true)); diff --git a/src/phases/unlock-phase.ts b/src/phases/unlock-phase.ts index 7a69fc207bb..839ac31dc5d 100644 --- a/src/phases/unlock-phase.ts +++ b/src/phases/unlock-phase.ts @@ -6,6 +6,7 @@ import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; export class UnlockPhase extends Phase { + public readonly phaseName = "UnlockPhase"; private unlockable: Unlockables; constructor(unlockable: Unlockables) { diff --git a/src/phases/victory-phase.ts b/src/phases/victory-phase.ts index 1204877fec2..2d21f8abc08 100644 --- a/src/phases/victory-phase.ts +++ b/src/phases/victory-phase.ts @@ -18,6 +18,7 @@ import { timedEventManager } from "#app/global-event-manager"; import { SelectBiomePhase } from "./select-biome-phase"; export class VictoryPhase extends PokemonPhase { + public readonly phaseName = "VictoryPhase"; /** If true, indicates that the phase is intended for EXP purposes only, and not to continue a battle to next phase */ isExpOnly: boolean; diff --git a/src/phases/weather-effect-phase.ts b/src/phases/weather-effect-phase.ts index d89c78e96c7..cd91b89771c 100644 --- a/src/phases/weather-effect-phase.ts +++ b/src/phases/weather-effect-phase.ts @@ -19,6 +19,7 @@ import { BooleanHolder, toDmgValue } from "#app/utils/common"; import { CommonAnimPhase } from "./common-anim-phase"; export class WeatherEffectPhase extends CommonAnimPhase { + public readonly phaseName = "WeatherEffectPhase"; public weather: Weather | null; constructor() { diff --git a/src/ui/command-ui-handler.ts b/src/ui/command-ui-handler.ts index fbfd4d2623b..0d67fdea624 100644 --- a/src/ui/command-ui-handler.ts +++ b/src/ui/command-ui-handler.ts @@ -5,7 +5,7 @@ import UiHandler from "./ui-handler"; import i18next from "i18next"; import { Button } from "#enums/buttons"; import { getPokemonNameWithAffix } from "#app/messages"; -import { CommandPhase } from "#app/phases/command-phase"; +import type { CommandPhase } from "#app/phases/command-phase"; import { globalScene } from "#app/global-scene"; import { TerastallizeAccessModifier } from "#app/modifier/modifier"; import { PokemonType } from "#enums/pokemon-type"; @@ -75,7 +75,7 @@ export default class CommandUiHandler extends UiHandler { let commandPhase: CommandPhase; const currentPhase = globalScene.getCurrentPhase(); - if (currentPhase instanceof CommandPhase) { + if (currentPhase?.is("CommandPhase")) { commandPhase = currentPhase; } else { commandPhase = globalScene.getStandbyPhase() as CommandPhase; diff --git a/src/ui/egg-hatch-scene-handler.ts b/src/ui/egg-hatch-scene-handler.ts index 76e2c54f4b6..b2863a213f8 100644 --- a/src/ui/egg-hatch-scene-handler.ts +++ b/src/ui/egg-hatch-scene-handler.ts @@ -1,7 +1,6 @@ import { UiMode } from "#enums/ui-mode"; import UiHandler from "./ui-handler"; import { Button } from "#enums/buttons"; -import { EggHatchPhase } from "#app/phases/egg-hatch-phase"; import { globalScene } from "#app/global-scene"; export default class EggHatchSceneHandler extends UiHandler { @@ -46,7 +45,7 @@ export default class EggHatchSceneHandler extends UiHandler { processInput(button: Button): boolean { if (button === Button.ACTION || button === Button.CANCEL) { const phase = globalScene.getCurrentPhase(); - if (phase instanceof EggHatchPhase && phase.trySkip()) { + if (phase?.is("EggHatchPhase") && phase.trySkip()) { return true; } } diff --git a/src/ui/egg-summary-ui-handler.ts b/src/ui/egg-summary-ui-handler.ts index ddc536fe1ad..ed2506ba0c1 100644 --- a/src/ui/egg-summary-ui-handler.ts +++ b/src/ui/egg-summary-ui-handler.ts @@ -4,7 +4,6 @@ import MessageUiHandler from "./message-ui-handler"; import { getEggTierForSpecies } from "../data/egg"; import { Button } from "#enums/buttons"; import PokemonHatchInfoContainer from "./pokemon-hatch-info-container"; -import { EggSummaryPhase } from "#app/phases/egg-summary-phase"; import type { EggHatchData } from "#app/data/egg-hatch-data"; import ScrollableGridUiHandler from "./scrollable-grid-handler"; import { HatchedPokemonContainer } from "./hatched-pokemon-container"; @@ -223,7 +222,7 @@ export default class EggSummaryUiHandler extends MessageUiHandler { if (button === Button.CANCEL) { if (!this.blockExit) { const phase = globalScene.getCurrentPhase(); - if (phase instanceof EggSummaryPhase) { + if (phase?.is("EggSummaryPhase")) { phase.end(); } success = true; diff --git a/src/ui/menu-ui-handler.ts b/src/ui/menu-ui-handler.ts index cc684111617..b6c3a9d7b8e 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -15,7 +15,6 @@ import { Button } from "#enums/buttons"; import { GameDataType } from "#enums/game-data-type"; import BgmBar from "#app/ui/bgm-bar"; import type AwaitableUiHandler from "./awaitable-ui-handler"; -import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import { AdminMode, getAdminModeName } from "./admin-ui-handler"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; @@ -126,7 +125,7 @@ export default class MenuUiHandler extends MessageUiHandler { const ui = this.getUi(); this.excludedMenus = () => [ { - condition: globalScene.getCurrentPhase() instanceof SelectModifierPhase, + condition: !!globalScene.getCurrentPhase()?.is("SelectModifierPhase"), options: [MenuOptions.EGG_GACHA], }, { condition: bypassLogin, options: [MenuOptions.LOG_OUT] }, diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 452ffcf5192..e26ecb531e9 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -29,7 +29,6 @@ import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; import { getPokemonNameWithAffix } from "#app/messages"; import type { CommandPhase } from "#app/phases/command-phase"; -import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import { globalScene } from "#app/global-scene"; const defaultMessage = i18next.t("partyUiHandler:choosePokemon"); @@ -751,7 +750,7 @@ export default class PartyUiHandler extends MessageUiHandler { // TODO: This risks hitting the other options (.MOVE_i and ALL) so does it? Do we need an extra check? if ( option >= PartyOption.FORM_CHANGE_ITEM && - globalScene.getCurrentPhase() instanceof SelectModifierPhase && + globalScene.getCurrentPhase()?.is("SelectModifierPhase") && this.partyUiMode === PartyUiMode.CHECK ) { const formChangeItemModifiers = this.getFormChangeItemsModifiers(pokemon); @@ -1338,7 +1337,7 @@ export default class PartyUiHandler extends MessageUiHandler { this.addCommonOptions(pokemon); break; case PartyUiMode.CHECK: - if (globalScene.getCurrentPhase() instanceof SelectModifierPhase) { + if (globalScene.getCurrentPhase()?.is("SelectModifierPhase")) { const formChangeItemModifiers = this.getFormChangeItemsModifiers(pokemon); for (let i = 0; i < formChangeItemModifiers.length; i++) { this.options.push(PartyOption.FORM_CHANGE_ITEM + i); diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index 263842bd4f9..00e166f075d 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -665,7 +665,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { show(args: any[]): boolean { // Allow the use of candies if we are in one of the whitelisted phases this.canUseCandies = ["TitlePhase", "SelectStarterPhase", "CommandPhase"].includes( - globalScene.getCurrentPhase()?.constructor.name ?? "", + globalScene.getCurrentPhase()?.phaseName ?? "", ); if (args.length >= 1 && args[0] === "refresh") { diff --git a/test/testUtils/phaseInterceptor.ts b/test/testUtils/phaseInterceptor.ts index b1d76ecd4a6..b7577550568 100644 --- a/test/testUtils/phaseInterceptor.ts +++ b/test/testUtils/phaseInterceptor.ts @@ -63,6 +63,8 @@ import { UnlockPhase } from "#app/phases/unlock-phase"; import { PostGameOverPhase } from "#app/phases/post-game-over-phase"; import { RevivalBlessingPhase } from "#app/phases/revival-blessing-phase"; +import type { PhaseClass, PhaseString } from "#app/@types/phase-types"; + export interface PromptHandler { phaseTarget?: string; mode?: UiMode; @@ -71,126 +73,6 @@ export interface PromptHandler { awaitingActionInput?: boolean; } -type PhaseClass = - | typeof LoginPhase - | typeof TitlePhase - | typeof SelectGenderPhase - | typeof NewBiomeEncounterPhase - | typeof SelectStarterPhase - | typeof PostSummonPhase - | typeof SummonPhase - | typeof ToggleDoublePositionPhase - | typeof CheckSwitchPhase - | typeof ShowAbilityPhase - | typeof MessagePhase - | typeof TurnInitPhase - | typeof CommandPhase - | typeof EnemyCommandPhase - | typeof TurnStartPhase - | typeof MovePhase - | typeof MoveEffectPhase - | typeof DamageAnimPhase - | typeof FaintPhase - | typeof BerryPhase - | typeof TurnEndPhase - | typeof BattleEndPhase - | typeof EggLapsePhase - | typeof SelectModifierPhase - | typeof NextEncounterPhase - | typeof NewBattlePhase - | typeof VictoryPhase - | typeof LearnMovePhase - | typeof MoveEndPhase - | typeof StatStageChangePhase - | typeof ShinySparklePhase - | typeof SelectTargetPhase - | typeof UnavailablePhase - | typeof QuietFormChangePhase - | typeof SwitchPhase - | typeof SwitchSummonPhase - | typeof PartyHealPhase - | typeof FormChangePhase - | typeof EvolutionPhase - | typeof EndEvolutionPhase - | typeof LevelCapPhase - | typeof AttemptRunPhase - | typeof SelectBiomePhase - | typeof MysteryEncounterPhase - | typeof MysteryEncounterOptionSelectedPhase - | typeof MysteryEncounterBattlePhase - | typeof MysteryEncounterRewardsPhase - | typeof PostMysteryEncounterPhase - | typeof RibbonModifierRewardPhase - | typeof GameOverModifierRewardPhase - | typeof ModifierRewardPhase - | typeof PartyExpPhase - | typeof ExpPhase - | typeof EncounterPhase - | typeof GameOverPhase - | typeof UnlockPhase - | typeof PostGameOverPhase - | typeof RevivalBlessingPhase; - -type PhaseString = - | "LoginPhase" - | "TitlePhase" - | "SelectGenderPhase" - | "NewBiomeEncounterPhase" - | "SelectStarterPhase" - | "PostSummonPhase" - | "SummonPhase" - | "ToggleDoublePositionPhase" - | "CheckSwitchPhase" - | "ShowAbilityPhase" - | "MessagePhase" - | "TurnInitPhase" - | "CommandPhase" - | "EnemyCommandPhase" - | "TurnStartPhase" - | "MovePhase" - | "MoveEffectPhase" - | "DamageAnimPhase" - | "FaintPhase" - | "BerryPhase" - | "TurnEndPhase" - | "BattleEndPhase" - | "EggLapsePhase" - | "SelectModifierPhase" - | "NextEncounterPhase" - | "NewBattlePhase" - | "VictoryPhase" - | "LearnMovePhase" - | "MoveEndPhase" - | "StatStageChangePhase" - | "ShinySparklePhase" - | "SelectTargetPhase" - | "UnavailablePhase" - | "QuietFormChangePhase" - | "SwitchPhase" - | "SwitchSummonPhase" - | "PartyHealPhase" - | "FormChangePhase" - | "EvolutionPhase" - | "EndEvolutionPhase" - | "LevelCapPhase" - | "AttemptRunPhase" - | "SelectBiomePhase" - | "MysteryEncounterPhase" - | "MysteryEncounterOptionSelectedPhase" - | "MysteryEncounterBattlePhase" - | "MysteryEncounterRewardsPhase" - | "PostMysteryEncounterPhase" - | "RibbonModifierRewardPhase" - | "GameOverModifierRewardPhase" - | "ModifierRewardPhase" - | "PartyExpPhase" - | "ExpPhase" - | "EncounterPhase" - | "GameOverPhase" - | "UnlockPhase" - | "PostGameOverPhase" - | "RevivalBlessingPhase"; - type PhaseInterceptorPhase = PhaseClass | PhaseString; export default class PhaseInterceptor { From 855868bfea4206bda9a027d6945fb3bd0f9c78dd Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Fri, 6 Jun 2025 16:15:13 -0500 Subject: [PATCH 206/262] [Refactor] Cleanup achvs ui handler (#5919) --- src/system/game-data.ts | 4 +- src/ui/achvs-ui-handler.ts | 464 ++++++++++++++++++++----------------- 2 files changed, 254 insertions(+), 214 deletions(-) diff --git a/src/system/game-data.ts b/src/system/game-data.ts index bc74ab15930..ab907d2f768 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -179,11 +179,11 @@ interface Unlocks { [key: number]: boolean; } -interface AchvUnlocks { +export interface AchvUnlocks { [key: string]: number; } -interface VoucherUnlocks { +export interface VoucherUnlocks { [key: string]: number; } diff --git a/src/ui/achvs-ui-handler.ts b/src/ui/achvs-ui-handler.ts index d0c8b716c7a..8588530d370 100644 --- a/src/ui/achvs-ui-handler.ts +++ b/src/ui/achvs-ui-handler.ts @@ -11,20 +11,20 @@ import { addWindow } from "#app/ui/ui-theme"; import { ScrollBar } from "#app/ui/scroll-bar"; import { PlayerGender } from "#enums/player-gender"; import { globalScene } from "#app/global-scene"; +import type { AchvUnlocks, VoucherUnlocks } from "#app/system/game-data"; -enum Page { - ACHIEVEMENTS, - VOUCHERS, -} +const Page = { + ACHIEVEMENTS: 0, + VOUCHERS: 1, +} as const; +type Page = (typeof Page)[keyof typeof Page]; interface LanguageSetting { TextSize: string; } const languageSettings: { [key: string]: LanguageSetting } = { - de: { - TextSize: "80px", - }, + de: { TextSize: "80px" }, }; export default class AchvsUiHandler extends MessageUiHandler { @@ -70,44 +70,35 @@ export default class AchvsUiHandler extends MessageUiHandler { setup() { const ui = this.getUi(); - this.mainContainer = globalScene.add.container(1, -(globalScene.game.canvas.height / 6) + 1); + /** Width of the global canvas / 6 */ + const WIDTH = globalScene.game.canvas.width / 6; + /** Height of the global canvas / 6 */ + const HEIGHT = globalScene.game.canvas.height / 6; - this.mainContainer.setInteractive( - new Phaser.Geom.Rectangle(0, 0, globalScene.game.canvas.width / 6, globalScene.game.canvas.height / 6), - Phaser.Geom.Rectangle.Contains, - ); + this.mainContainer = globalScene.add.container(1, -HEIGHT + 1); - this.headerBg = addWindow(0, 0, globalScene.game.canvas.width / 6 - 2, 24); - this.headerBg.setOrigin(0, 0); + this.mainContainer.setInteractive(new Phaser.Geom.Rectangle(0, 0, WIDTH, HEIGHT), Phaser.Geom.Rectangle.Contains); - this.headerText = addTextObject(0, 0, "", TextStyle.SETTINGS_LABEL); - this.headerText.setOrigin(0, 0); - this.headerText.setPositionRelative(this.headerBg, 8, 4); - this.headerActionButton = new Phaser.GameObjects.Sprite(globalScene, 0, 0, "keyboard", "ACTION.png"); - this.headerActionButton.setOrigin(0, 0); - this.headerActionButton.setPositionRelative(this.headerBg, 236, 6); - this.headerActionText = addTextObject(0, 0, "", TextStyle.WINDOW, { - fontSize: "60px", - }); - this.headerActionText.setOrigin(0, 0); - this.headerActionText.setPositionRelative(this.headerBg, 264, 8); + this.headerBg = addWindow(0, 0, WIDTH - 2, 24); + + this.headerText = addTextObject(0, 0, "", TextStyle.SETTINGS_LABEL) + .setOrigin(0) + .setPositionRelative(this.headerBg, 8, 4); + this.headerActionButton = new Phaser.GameObjects.Sprite(globalScene, 0, 0, "keyboard", "ACTION.png") + .setOrigin(0) + .setPositionRelative(this.headerBg, 236, 6); + this.headerActionText = addTextObject(0, 0, "", TextStyle.WINDOW, { fontSize: "60px" }) + .setOrigin(0) + .setPositionRelative(this.headerBg, 264, 8); // We need to get the player gender from the game data to add the correct prefix to the achievement name const genderIndex = globalScene.gameData.gender ?? PlayerGender.MALE; const genderStr = PlayerGender[genderIndex].toLowerCase(); - this.achvsName = i18next.t("achv:Achievements.name", { - context: genderStr, - }); + this.achvsName = i18next.t("achv:Achievements.name", { context: genderStr }); this.vouchersName = i18next.t("voucher:vouchers"); - this.iconsBg = addWindow( - 0, - this.headerBg.height, - globalScene.game.canvas.width / 6 - 2, - globalScene.game.canvas.height / 6 - this.headerBg.height - 68, - ); - this.iconsBg.setOrigin(0, 0); + this.iconsBg = addWindow(0, this.headerBg.height, WIDTH - 2, HEIGHT - this.headerBg.height - 68).setOrigin(0); const yOffset = 6; this.scrollBar = new ScrollBar( @@ -126,68 +117,59 @@ export default class AchvsUiHandler extends MessageUiHandler { const x = (a % this.COLS) * 18; const y = Math.floor(a / this.COLS) * 18; - const icon = globalScene.add.sprite(x, y, "items", "unknown"); - icon.setOrigin(0, 0); - icon.setScale(0.5); + const icon = globalScene.add.sprite(x, y, "items", "unknown").setOrigin(0).setScale(0.5); this.icons.push(icon); this.iconsContainer.add(icon); } const titleBg = addWindow(0, this.headerBg.height + this.iconsBg.height, 174, 24); - titleBg.setOrigin(0, 0); this.titleBg = titleBg; - this.titleText = addTextObject(0, 0, "", TextStyle.WINDOW); + this.titleText = addTextObject(0, 0, "", TextStyle.WINDOW).setOrigin(); const textSize = languageSettings[i18next.language]?.TextSize ?? this.titleText.style.fontSize; this.titleText.setFontSize(textSize); const titleBgCenterX = titleBg.x + titleBg.width / 2; const titleBgCenterY = titleBg.y + titleBg.height / 2; - this.titleText.setOrigin(0.5, 0.5); this.titleText.setPosition(titleBgCenterX, titleBgCenterY); this.scoreContainer = globalScene.add.container(titleBg.x + titleBg.width, titleBg.y); const scoreBg = addWindow(0, 0, 46, 24); - scoreBg.setOrigin(0, 0); - this.scoreContainer.add(scoreBg); - this.scoreText = addTextObject(scoreBg.width / 2, scoreBg.height / 2, "", TextStyle.WINDOW); - this.scoreText.setOrigin(0.5, 0.5); - this.scoreContainer.add(this.scoreText); + this.scoreText = addTextObject(scoreBg.width / 2, scoreBg.height / 2, "", TextStyle.WINDOW).setOrigin(); + this.scoreContainer.add([scoreBg, this.scoreText]); const unlockBg = addWindow(this.scoreContainer.x + scoreBg.width, titleBg.y, 98, 24); - unlockBg.setOrigin(0, 0); - this.unlockText = addTextObject(0, 0, "", TextStyle.WINDOW); - this.unlockText.setOrigin(0.5, 0.5); - this.unlockText.setPositionRelative(unlockBg, unlockBg.width / 2, unlockBg.height / 2); + this.unlockText = addTextObject(0, 0, "", TextStyle.WINDOW) + .setPositionRelative(unlockBg, unlockBg.width / 2, unlockBg.height / 2) + .setOrigin(); - const descriptionBg = addWindow(0, titleBg.y + titleBg.height, globalScene.game.canvas.width / 6 - 2, 42); - descriptionBg.setOrigin(0, 0); + const descriptionBg = addWindow(0, titleBg.y + titleBg.height, WIDTH - 2, 42); - const descriptionText = addTextObject(0, 0, "", TextStyle.WINDOW, { - maxLines: 2, - }); - descriptionText.setWordWrapWidth(1870); - descriptionText.setOrigin(0, 0); - descriptionText.setPositionRelative(descriptionBg, 8, 4); + const descriptionText = addTextObject(0, 0, "", TextStyle.WINDOW, { maxLines: 2 }) + .setWordWrapWidth(1870) + .setOrigin(0) + .setPositionRelative(descriptionBg, 8, 4); this.message = descriptionText; - this.mainContainer.add(this.headerBg); - this.mainContainer.add(this.headerActionButton); - this.mainContainer.add(this.headerText); - this.mainContainer.add(this.headerActionText); - this.mainContainer.add(this.iconsBg); - this.mainContainer.add(this.scrollBar); - this.mainContainer.add(this.iconsContainer); - this.mainContainer.add(titleBg); - this.mainContainer.add(this.titleText); - this.mainContainer.add(this.scoreContainer); - this.mainContainer.add(unlockBg); - this.mainContainer.add(this.unlockText); - this.mainContainer.add(descriptionBg); - this.mainContainer.add(descriptionText); + this.mainContainer.add([ + this.headerBg, + this.headerActionButton, + this.headerText, + this.headerActionText, + this.iconsBg, + this.scrollBar, + this.iconsContainer, + titleBg, + this.titleText, + this.scoreContainer, + unlockBg, + this.unlockText, + descriptionBg, + descriptionText, + ]); ui.add(this.mainContainer); @@ -246,87 +228,132 @@ export default class AchvsUiHandler extends MessageUiHandler { ); } - processInput(button: Button): boolean { - const ui = this.getUi(); + // #region Input Processing + /** + * Submethod of {@linkcode processInput} that handles the action button input + * @returns Whether the success sound should be played + */ + private processActionInput(): true { + this.setScrollCursor(0); + if (this.currentPage === Page.ACHIEVEMENTS) { + this.currentPage = Page.VOUCHERS; + this.updateVoucherIcons(); + } else if (this.currentPage === Page.VOUCHERS) { + this.currentPage = Page.ACHIEVEMENTS; + this.updateAchvIcons(); + } + this.setCursor(0, true); + this.scrollBar.setTotalRows(Math.ceil(this.currentTotal / this.COLS)); + this.scrollBar.setScrollCursor(0); + this.mainContainer.update(); + return true; + } + /** + * Submethod of {@linkcode processInput} that handles the up button input + * @returns Whether the success sound should be played + */ + private processUpInput(): boolean { + if (this.cursor >= this.COLS) { + return this.setCursor(this.cursor - this.COLS); + } + if (this.scrollCursor) { + return this.setScrollCursor(this.scrollCursor - 1); + } + + // Wrap around to the last row + const success = this.setScrollCursor(Math.ceil(this.currentTotal / this.COLS) - this.ROWS); + let newCursorIndex = this.cursor + (this.ROWS - 1) * this.COLS; + if (newCursorIndex > this.currentTotal - this.scrollCursor * this.COLS - 1) { + newCursorIndex -= this.COLS; + } + return success && this.setCursor(newCursorIndex); + } + + /** + * Submethod of {@linkcode processInput} that handles the down button input + * @returns Whether the success sound should be played + */ + private processDownInput(): boolean { + const rowIndex = Math.floor(this.cursor / this.COLS); + const itemOffset = this.scrollCursor * this.COLS; + const canMoveDown = itemOffset + 1 < this.currentTotal; + + if (rowIndex >= this.ROWS - 1) { + if (this.scrollCursor < Math.ceil(this.currentTotal / this.COLS) - this.ROWS && canMoveDown) { + // scroll down one row + return this.setScrollCursor(this.scrollCursor + 1); + } + // wrap back to the first row + return this.setScrollCursor(0) && this.setCursor(this.cursor % this.COLS); + } + if (canMoveDown) { + return this.setCursor(Math.min(this.cursor + this.COLS, this.currentTotal - itemOffset - 1)); + } + return false; + } + + /** + * Submethod of {@linkcode processInput} that handles the left button input + * @returns Whether the success sound should be played + */ + private processLeftInput(): boolean { + const itemOffset = this.scrollCursor * this.COLS; + if (this.cursor % this.COLS === 0) { + return this.setCursor(Math.min(this.cursor + this.COLS - 1, this.currentTotal - itemOffset - 1)); + } + return this.setCursor(this.cursor - 1); + } + + /** + * Submethod of {@linkcode processInput} that handles the right button input + * @returns Whether the success sound should be played + */ + private processRightInput(): boolean { + const itemOffset = this.scrollCursor * this.COLS; + if ((this.cursor + 1) % this.COLS === 0 || this.cursor + itemOffset === this.currentTotal - 1) { + return this.setCursor(this.cursor - (this.cursor % this.COLS)); + } + return this.setCursor(this.cursor + 1); + } + + /** + * Process user input to navigate through the achievements and vouchers UI. + * @param button - The button that was pressed + * @returns Whether an action was successfully processed + */ + processInput(button: Button): boolean { let success = false; - if (button === Button.ACTION) { - success = true; - this.setScrollCursor(0); - if (this.currentPage === Page.ACHIEVEMENTS) { - this.currentPage = Page.VOUCHERS; - this.updateVoucherIcons(); - } else if (this.currentPage === Page.VOUCHERS) { - this.currentPage = Page.ACHIEVEMENTS; - this.updateAchvIcons(); - } - this.setCursor(0, true); - this.scrollBar.setTotalRows(Math.ceil(this.currentTotal / this.COLS)); - this.scrollBar.setScrollCursor(0); - this.mainContainer.update(); - } - if (button === Button.CANCEL) { - success = true; - globalScene.ui.revertMode(); - } else { - const rowIndex = Math.floor(this.cursor / this.COLS); - const itemOffset = this.scrollCursor * this.COLS; - switch (button) { - case Button.UP: - if (this.cursor < this.COLS) { - if (this.scrollCursor) { - success = this.setScrollCursor(this.scrollCursor - 1); - } else { - // Wrap around to the last row - success = this.setScrollCursor(Math.ceil(this.currentTotal / this.COLS) - this.ROWS); - let newCursorIndex = this.cursor + (this.ROWS - 1) * this.COLS; - if (newCursorIndex > this.currentTotal - this.scrollCursor * this.COLS - 1) { - newCursorIndex -= this.COLS; - } - success = success && this.setCursor(newCursorIndex); - } - } else { - success = this.setCursor(this.cursor - this.COLS); - } - break; - case Button.DOWN: - const canMoveDown = itemOffset + 1 < this.currentTotal; - if (rowIndex >= this.ROWS - 1) { - if (this.scrollCursor < Math.ceil(this.currentTotal / this.COLS) - this.ROWS && canMoveDown) { - // scroll down one row - success = this.setScrollCursor(this.scrollCursor + 1); - } else { - // wrap back to the first row - success = this.setScrollCursor(0) && this.setCursor(this.cursor % this.COLS); - } - } else if (canMoveDown) { - success = this.setCursor(Math.min(this.cursor + this.COLS, this.currentTotal - itemOffset - 1)); - } - break; - case Button.LEFT: - if (this.cursor % this.COLS === 0) { - success = this.setCursor(Math.min(this.cursor + this.COLS - 1, this.currentTotal - itemOffset - 1)); - } else { - success = this.setCursor(this.cursor - 1); - } - break; - case Button.RIGHT: - if ((this.cursor + 1) % this.COLS === 0 || this.cursor + itemOffset === this.currentTotal - 1) { - success = this.setCursor(this.cursor - (this.cursor % this.COLS)); - } else { - success = this.setCursor(this.cursor + 1); - } - break; - } + switch (button) { + case Button.ACTION: + success = this.processActionInput(); + break; + case Button.CANCEL: + success = true; + globalScene.ui.revertMode(); + break; + case Button.UP: + success = this.processUpInput(); + break; + case Button.DOWN: + success = this.processDownInput(); + break; + case Button.LEFT: + success = this.processLeftInput(); + break; + case Button.RIGHT: + success = this.processRightInput(); + break; } if (success) { - ui.playSelect(); + this.getUi().playSelect(); } return success; } + // #endregion Input Processing setCursor(cursor: number, pageChange?: boolean): boolean { const ret = super.setCursor(cursor); @@ -334,33 +361,35 @@ export default class AchvsUiHandler extends MessageUiHandler { let update = ret; if (!this.cursorObj) { - this.cursorObj = globalScene.add.nineslice(0, 0, "select_cursor_highlight", undefined, 16, 16, 1, 1, 1, 1); - this.cursorObj.setOrigin(0, 0); + this.cursorObj = globalScene.add + .nineslice(0, 0, "select_cursor_highlight", undefined, 16, 16, 1, 1, 1, 1) + .setOrigin(0); this.iconsContainer.add(this.cursorObj); update = true; } this.cursorObj.setPositionRelative(this.icons[this.cursor], 0, 0); + if (!update && !pageChange) { + return ret; + } - if (update || pageChange) { - switch (this.currentPage) { - case Page.ACHIEVEMENTS: - if (pageChange) { - this.titleBg.width = 174; - this.titleText.x = this.titleBg.width / 2; - this.scoreContainer.setVisible(true); - } - this.showAchv(achvs[Object.keys(achvs)[cursor + this.scrollCursor * this.COLS]]); - break; - case Page.VOUCHERS: - if (pageChange) { - this.titleBg.width = 220; - this.titleText.x = this.titleBg.width / 2; - this.scoreContainer.setVisible(false); - } - this.showVoucher(vouchers[Object.keys(vouchers)[cursor + this.scrollCursor * this.COLS]]); - break; - } + switch (this.currentPage) { + case Page.ACHIEVEMENTS: + if (pageChange) { + this.titleBg.width = 174; + this.titleText.x = this.titleBg.width / 2; + this.scoreContainer.setVisible(true); + } + this.showAchv(achvs[Object.keys(achvs)[cursor + this.scrollCursor * this.COLS]]); + break; + case Page.VOUCHERS: + if (pageChange) { + this.titleBg.width = 220; + this.titleText.x = this.titleBg.width / 2; + this.scoreContainer.setVisible(false); + } + this.showVoucher(vouchers[Object.keys(vouchers)[cursor + this.scrollCursor * this.COLS]]); + break; } return ret; } @@ -399,30 +428,50 @@ export default class AchvsUiHandler extends MessageUiHandler { } /** - * updateAchvIcons(): void - * Determines what data is to be displayed on the UI and updates it accordingly based on the current value of this.scrollCursor + * Updates the icons displayed on the UI based on the current page and scroll cursor. + * @param items - The items to display (achievements or vouchers). + * @param unlocks - The unlocks data for the items. + * @param getIconFrame - A function to determine the frame for each item. + * @param headerText - The text for the header. + * @param actionText - The text for the action button. + * @param totalItems - The total number of items. + * @param forAchievements - `True` when updating icons for the achievements page, `false` for the vouchers page. */ - updateAchvIcons(): void { - this.headerText.text = this.achvsName; - this.headerActionText.text = this.vouchersName; + private updateIcons( + items: T extends true ? Achv[] : Voucher[], + unlocks: T extends true ? AchvUnlocks : VoucherUnlocks, + headerText: string, + actionText: string, + totalItems: number, + forAchievements: T, + ): void { + // type ItemType = T extends true ? Achv : Voucher; + // type RangeType = ItemType[]; + this.headerText.text = headerText; + this.headerActionText.text = actionText; const textPosition = this.headerBgX - this.headerActionText.displayWidth - 8; this.headerActionText.setX(textPosition); this.headerActionButton.setX(textPosition - this.headerActionButton.displayWidth - 4); - const achvUnlocks = globalScene.gameData.achvUnlocks; - const itemOffset = this.scrollCursor * this.COLS; const itemLimit = this.ROWS * this.COLS; - const achvRange = Object.values(achvs).slice(itemOffset, itemLimit + itemOffset); + const itemRange = items.slice(itemOffset, itemLimit + itemOffset); - achvRange.forEach((achv: Achv, i: number) => { + itemRange.forEach((item: (typeof itemRange)[0], i: number) => { const icon = this.icons[i]; - const unlocked = achvUnlocks.hasOwnProperty(achv.id); - const hidden = !unlocked && achv.secret && (!achv.parentId || !achvUnlocks.hasOwnProperty(achv.parentId)); - const tinted = !hidden && !unlocked; + const unlocked = unlocks.hasOwnProperty(item.id); + let tinted = !unlocked; + if (forAchievements) { + // Typescript cannot properly infer the type of `item` here, so we need to cast it + const achv = item as Achv; + const hidden = !unlocked && achv.secret && (!achv.parentId || !unlocks.hasOwnProperty(achv.parentId)); + tinted &&= !hidden; + icon.setFrame(!hidden ? achv.iconImage : "unknown"); + } else { + icon.setFrame(getVoucherTypeIcon((item as Voucher).voucherType)); + } - icon.setFrame(!hidden ? achv.iconImage : "unknown"); icon.setVisible(true); if (tinted) { icon.setTintFill(0); @@ -431,48 +480,39 @@ export default class AchvsUiHandler extends MessageUiHandler { } }); - if (achvRange.length < this.icons.length) { - this.icons.slice(achvRange.length).map(i => i.setVisible(false)); + if (itemRange.length < this.icons.length) { + this.icons.slice(itemRange.length).forEach(i => i.setVisible(false)); } - this.currentTotal = this.achvsTotal; + this.currentTotal = totalItems; } /** - * updateVoucherIcons(): void - * Determines what data is to be displayed on the UI and updates it accordingly based on the current value of this.scrollCursor + * Update the achievement icons displayed on the UI based on the current scroll cursor. + */ + updateAchvIcons(): void { + this.updateIcons( + Object.values(achvs), + globalScene.gameData.achvUnlocks, + this.achvsName, + this.vouchersName, + this.achvsTotal, + true, + ); + } + + /** + * Update the voucher icons displayed on the UI based on the current scroll cursor. */ updateVoucherIcons(): void { - this.headerText.text = this.vouchersName; - this.headerActionText.text = this.achvsName; - const textPosition = this.headerBgX - this.headerActionText.displayWidth - 8; - this.headerActionText.setX(textPosition); - this.headerActionButton.setX(textPosition - this.headerActionButton.displayWidth - 4); - - const voucherUnlocks = globalScene.gameData.voucherUnlocks; - - const itemOffset = this.scrollCursor * this.COLS; - const itemLimit = this.ROWS * this.COLS; - - const voucherRange = Object.values(vouchers).slice(itemOffset, itemLimit + itemOffset); - - voucherRange.forEach((voucher: Voucher, i: number) => { - const icon = this.icons[i]; - const unlocked = voucherUnlocks.hasOwnProperty(voucher.id); - - icon.setFrame(getVoucherTypeIcon(voucher.voucherType)); - icon.setVisible(true); - if (!unlocked) { - icon.setTintFill(0); - } else { - icon.clearTint(); - } - }); - - if (voucherRange.length < this.icons.length) { - this.icons.slice(voucherRange.length).map(i => i.setVisible(false)); - } - this.currentTotal = this.vouchersTotal; + this.updateIcons( + Object.values(vouchers), + globalScene.gameData.voucherUnlocks, + this.vouchersName, + this.achvsName, + this.vouchersTotal, + false, + ); } clear() { From 03368587083ccf7583923d1d35f07a5cd347f535 Mon Sep 17 00:00:00 2001 From: SmhMyHead <191356399+SmhMyHead@users.noreply.github.com> Date: Fri, 6 Jun 2025 23:20:02 +0200 Subject: [PATCH 207/262] [UI/UX] Legendary UP Gacha timer (#5921) * [UI/UIX] Legendary UP Gacha timer * Update egg-gacha-ui-handler.ts Seems "fixedInt" was needed on the delay of the playTimeTimer so the game speed doesn't affect it. * New timer container by damocleas. * gacha_legendary.png second version from @damocleas * Use phaser object chaining methods --------- Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> --- public/images/egg/gacha_legendary.png | Bin 2015 -> 3810 bytes src/ui/egg-gacha-ui-handler.ts | 46 ++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/public/images/egg/gacha_legendary.png b/public/images/egg/gacha_legendary.png index 8cd6fa38e295fcfb306a6ffbdb017bb1f101eeba..6eb41e55099a0ef71e946b7f89f0213b6e0996d7 100644 GIT binary patch literal 3810 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 delta 2002 zcmV;@2QB#G9p4X-BYy{`Nkl#N^;PkIUgU`*94LA6~!_kVIb>+4*o&u4ml+l`%p ze`b>F7>0KqKXf0eut`f$?f6~4INSNW_4$)*uDJDOw!i4y^x!`;$#oQD;{54vKY0+^ zB3NA$mS8mE$B=G^i?g{*;RqmUhPJGxKdiM)U@G@W7T+ubOn?9;z!CJ(FMb|=V;Ra} zA%w8?&^ibpMSoaXS!ut0?V5!sm-g1ymZQNH;|8m6{Oa@b7Ni6kJI|k^`0kAxK?JMi zdzPSj@vG0zhch!X7NjK3%*=!{Gc#f7(xvdTM^r&*Td}GoDgCYn0&$)Ldb05+qiW%tpD~` zM}D4G?0@%a?>3v>pa>Hn*~KsG@NL|>d+2-7*9QqyN9Mk$eN?TdTU%ST z-Db0Wb$vZF8jVn|*ETP_<@W8wmoNIMIca{k*}1te=m87U-e~fuRbf|_mpfBnKk*o*QJ`MUqv zpP&Fzo)AXjLCktOJT91{vcD`Iz3%l5=l#tIAe9JW_jH&<5z!px1b31L6$FqGm=2Rj z8_lAFnKo!*h5(Ma>B-}7?xzO_Cw~gYNv6!AqYeTne2Fd_g;0BC%^di&iZ73U;I)`cL*RAc7O3--;Lnu zsj1Z05s&6iKmD}w@e?-$aLghY|NNs@UP*jL2~;`<;44FRN7`bABU7*`I0 zzyKDerY(X1GHkV3YXAZWAb6RV;8^?NX-7do009#6L}*fp zZ*K3!&JeR#@GC(;0LR=yeSbcL)|W&3`DbIN-8!4|iBrWE0i^Q&^!Rbu{_3mz9u!`D zG5pd&Ari6=u)?+*I~D;G1zqNY3^MMHvMoPbZet)880)(;DD}I6~ zfB*sr!?M@ojoJ4O4tjn)tLYB`gi=N@`gh(h!4pRTgrQG+QRt$n@9gAcA@Msdg4_F^ zdLw|4WBek|TCH5BJ`cfFz(eeJXT{hpUO z>WDB1AR{voo|>3A6o0?&P2~852m(kYr@(m7dWEiED8&x}q|%sn&p*{$CC5Qk*()jg@SFafE9UO$0rl!KFiHRepJ%3Xm0!Zma6JNi{?d;@a z_-uba@e$rZr@*u?gY&XE0fgMA#O_cY7fm<`e>s#ce9`Bp zN1Z4E1dz(VD_s0(EoD5yI}W#j079BSnDeJIyRIaWGX)}mjHR;1E`B7q%1=f|02$*5 zdP)ldNGh$*pG#N-1d!pg`So3&JT3lZX%2!2Ab { + this.legendaryExpiration.setText(this.getLegendaryGachaTimeLeft()); + }, + }); + } + + getLegendaryGachaTimeLeft(): string { + // 86400000 is the number of miliseconds in one day + const msUntilMidnight = 86400000 - (Date.now() % 86400000); + const hours = `${Math.floor(msUntilMidnight / 3600000)}`; + const minutes = `${Math.floor((msUntilMidnight % 3600000) / 60000)}`; + const seconds = `${Math.floor((msUntilMidnight % 60000) / 1000)}`; + + return `${hours.padStart(2, "0")}:${minutes.padStart(2, "0")}:${seconds.padStart(2, "0")}`; + } + clear(): void { super.clear(); this.setGachaCursor(-1); this.eggGachaContainer.setVisible(false); + if (this.playTimeTimer) { + this.playTimeTimer.destroy(); + this.playTimeTimer = null; + } } } From 3ca11e83a6591801b592587d75963fba6dc96e98 Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Fri, 6 Jun 2025 19:27:58 -0400 Subject: [PATCH 208/262] [Dev] Add lefthook script to update submodules post-checkout (#5941) --- lefthook.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lefthook.yml b/lefthook.yml index ff0ac00f9e5..0f91f658171 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -9,6 +9,11 @@ pre-commit: - rebase post-merge: + commands: + update-submodules: + run: git submodule update --init --recursive + +post-checkout: commands: update-submodules: run: git submodule update --init --recursive \ No newline at end of file From 88e4ab978bc4ad98e6a90ec1419ef15d2984a2ac Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Fri, 6 Jun 2025 20:00:09 -0400 Subject: [PATCH 209/262] [Misc] Removed cases of `a ? true : false` and useless `super` calls from subclasses (#5943) * Removed cases of `if (a) {return true}' return false` * Removed useless `super.xyz` calls from functions * Fixde missing issur * Use early return in `Pokemon#isOffsetBySubstitute` --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/battle-scene.ts | 34 ++++++-------- src/configs/inputs/configHandler.ts | 5 +- src/data/abilities/ability.ts | 46 ++++--------------- src/data/battler-tags.ts | 25 ++-------- src/data/moves/move.ts | 15 +----- .../mystery-encounter-requirements.ts | 31 ++++--------- src/data/pokemon-forms.ts | 6 +-- src/data/pokemon-species.ts | 4 -- src/field/pokemon.ts | 32 ++++--------- src/modifier/modifier.ts | 8 ---- src/sprites/sprite-utils.ts | 5 +- 11 files changed, 50 insertions(+), 161 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index f2f952ea301..9a46baba899 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -3566,21 +3566,18 @@ export default class BattleScene extends SceneBase { gameMode: this.currentBattle ? this.gameMode.getName() : "Title", biome: this.currentBattle ? getBiomeName(this.arena.biomeType) : "", wave: this.currentBattle?.waveIndex ?? 0, - party: this.party - ? this.party.map(p => { - return { - name: p.name, - form: p.getFormKey(), - types: p.getTypes().map(type => PokemonType[type]), - teraType: PokemonType[p.getTeraType()], - isTerastallized: p.isTerastallized, - level: p.level, - currentHP: p.hp, - maxHP: p.getMaxHp(), - status: p.status?.effect ? StatusEffect[p.status.effect] : "", - }; - }) - : [], + party: + this.party?.map(p => ({ + name: p.name, + form: p.getFormKey(), + types: p.getTypes().map(type => PokemonType[type]), + teraType: PokemonType[p.getTeraType()], + isTerastallized: p.isTerastallized, + level: p.level, + currentHP: p.hp, + maxHP: p.getMaxHp(), + status: p.status?.effect ? StatusEffect[p.status.effect] : "", + })) ?? [], // TODO: review if this can be nullish modeChain: this.ui?.getModeChain() ?? [], }; (window as any).gameInfo = gameInfo; @@ -3963,16 +3960,13 @@ export default class BattleScene extends SceneBase { if (previousEncounter !== null && encounterType === previousEncounter) { return false; } - if ( + return !( this.mysteryEncounterSaveData.encounteredEvents.length > 0 && encounterCandidate.maxAllowedEncounters && encounterCandidate.maxAllowedEncounters > 0 && this.mysteryEncounterSaveData.encounteredEvents.filter(e => e.type === encounterType).length >= encounterCandidate.maxAllowedEncounters - ) { - return false; - } - return true; + ); }) .map(m => allMysteryEncounters[m]); // Decrement tier diff --git a/src/configs/inputs/configHandler.ts b/src/configs/inputs/configHandler.ts index b896f303cb3..227c2b964b9 100644 --- a/src/configs/inputs/configHandler.ts +++ b/src/configs/inputs/configHandler.ts @@ -197,10 +197,7 @@ export function canIAssignThisKey(config, key) { export function canIOverrideThisSetting(config, settingName) { const key = getKeyWithSettingName(config, settingName); // || isTheLatestBind(config, settingName) no longer needed since action and cancel are protected - if (config.blacklist?.includes(key)) { - return false; - } - return true; + return !config.blacklist?.includes(key); } export function canIDeleteThisKey(config, key) { diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 1bd71df32e0..6e6c00b8a43 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -1246,7 +1246,7 @@ export class MoveTypeChangeAbAttr extends PreAttackAbAttr { /** * Determine if the move type change attribute can be applied - * + * * Can be applied if: * - The ability's condition is met, e.g. pixilate only boosts normal moves, * - The move is not forbidden from having its type changed by an ability, e.g. {@linkcode MoveId.MULTI_ATTACK} @@ -1262,7 +1262,7 @@ export class MoveTypeChangeAbAttr extends PreAttackAbAttr { */ override canApplyPreAttack(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _defender: Pokemon | null, move: Move, _args: [NumberHolder?, NumberHolder?, ...any]): boolean { return (!this.condition || this.condition(pokemon, _defender, move)) && - !noAbilityTypeOverrideMoves.has(move.id) && + !noAbilityTypeOverrideMoves.has(move.id) && (!pokemon.isTerastallized || (move.id !== MoveId.TERA_BLAST && (move.id !== MoveId.TERA_STARSTORM || pokemon.getTeraType() !== PokemonType.STELLAR || !pokemon.hasSpecies(SpeciesId.TERAPAGOS)))); @@ -2653,11 +2653,7 @@ export class PostSummonCopyAllyStatsAbAttr extends PostSummonAbAttr { } const ally = pokemon.getAlly(); - if (isNullOrUndefined(ally) || ally.getStatStages().every(s => s === 0)) { - return false; - } - - return true; + return !(isNullOrUndefined(ally) || ally.getStatStages().every(s => s === 0)); } override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { @@ -2723,11 +2719,7 @@ export class PostSummonTransformAbAttr extends PostSummonAbAttr { } // transforming from or into fusion pokemon causes various problems (including crashes and save corruption) - if (this.getTarget(targets).fusionSpecies || pokemon.fusionSpecies) { - return false; - } - - return true; + return !(this.getTarget(targets).fusionSpecies || pokemon.fusionSpecies); } override applyPostSummon(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { @@ -3544,10 +3536,7 @@ export class BlockStatusDamageAbAttr extends AbAttr { } override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - if (pokemon.status && this.effects.includes(pokemon.status.effect)) { - return true; - } - return false; + return !!pokemon.status?.effect && this.effects.includes(pokemon.status.effect); } /** @@ -4803,11 +4792,7 @@ export class PostFaintContactDamageAbAttr extends PostFaintAbAttr { const diedToDirectDamage = move !== undefined && attacker !== undefined && move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}); const cancelled = new BooleanHolder(false); globalScene.getField(true).map(p => applyAbAttrs(FieldPreventExplosiveMovesAbAttr, p, cancelled, simulated)); - if (!diedToDirectDamage || cancelled.value || attacker!.hasAbilityWithAttr(BlockNonDirectDamageAbAttr)) { - return false; - } - - return true; + return !(!diedToDirectDamage || cancelled.value || attacker!.hasAbilityWithAttr(BlockNonDirectDamageAbAttr)); } override applyPostFaint(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker?: Pokemon, move?: Move, hitResult?: HitResult, ...args: any[]): void { @@ -6508,12 +6493,7 @@ export function initAbilities() { new Ability(AbilityId.INTIMIDATE, 3) .attr(PostSummonStatStageChangeAbAttr, [ Stat.ATK ], -1, false, true), new Ability(AbilityId.SHADOW_TAG, 3) - .attr(ArenaTrapAbAttr, (user, target) => { - if (target.hasAbility(AbilityId.SHADOW_TAG)) { - return false; - } - return true; - }), + .attr(ArenaTrapAbAttr, (_user, target) => !target.hasAbility(AbilityId.SHADOW_TAG)), new Ability(AbilityId.ROUGH_SKIN, 3) .attr(PostDefendContactDamageAbAttr, 8) .bypassFaint(), @@ -6573,10 +6553,7 @@ export function initAbilities() { .ignorable(), new Ability(AbilityId.MAGNET_PULL, 3) .attr(ArenaTrapAbAttr, (user, target) => { - if (target.getTypes(true).includes(PokemonType.STEEL) || (target.getTypes(true).includes(PokemonType.STELLAR) && target.getTypes().includes(PokemonType.STEEL))) { - return true; - } - return false; + return target.getTypes(true).includes(PokemonType.STEEL) || (target.getTypes(true).includes(PokemonType.STELLAR) && target.getTypes().includes(PokemonType.STEEL)); }), new Ability(AbilityId.SOUNDPROOF, 3) .attr(MoveImmunityAbAttr, (pokemon, attacker, move) => pokemon !== attacker && move.hasFlag(MoveFlags.SOUND_BASED)) @@ -6654,12 +6631,7 @@ export function initAbilities() { .attr(PostSummonWeatherChangeAbAttr, WeatherType.SUNNY) .attr(PostBiomeChangeWeatherChangeAbAttr, WeatherType.SUNNY), new Ability(AbilityId.ARENA_TRAP, 3) - .attr(ArenaTrapAbAttr, (user, target) => { - if (target.isGrounded()) { - return true; - } - return false; - }) + .attr(ArenaTrapAbAttr, (user, target) => target.isGrounded()) .attr(DoubleBattleChanceAbAttr), new Ability(AbilityId.VITAL_SPIRIT, 3) .attr(StatusEffectImmunityAbAttr, StatusEffect.SLEEP) diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index c047f424591..4d99fd18ac0 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -1203,10 +1203,7 @@ export class EncoreTag extends MoveRestrictionBattlerTag { override lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { if (lapseType === BattlerTagLapseType.CUSTOM) { const encoredMove = pokemon.getMoveset().find(m => m.moveId === this.moveId); - if (encoredMove && encoredMove?.getPpRatio() > 0) { - return true; - } - return false; + return !isNullOrUndefined(encoredMove) && encoredMove.getPpRatio() > 0; } return super.lapse(pokemon, lapseType); } @@ -1218,10 +1215,7 @@ export class EncoreTag extends MoveRestrictionBattlerTag { * @returns `true` if the move does not match with the moveId stored and as a result, restricted */ override isMoveRestricted(move: MoveId, _user?: Pokemon): boolean { - if (move !== this.moveId) { - return true; - } - return false; + return move !== this.moveId; } override selectionDeniedText(_pokemon: Pokemon, move: MoveId): string { @@ -2768,10 +2762,7 @@ export class HealBlockTag extends MoveRestrictionBattlerTag { * @returns `true` if the move has a TRIAGE_MOVE flag and is a status move */ override isMoveRestricted(move: MoveId): boolean { - if (allMoves[move].hasFlag(MoveFlags.TRIAGE_MOVE) && allMoves[move].category === MoveCategory.STATUS) { - return true; - } - return false; + return allMoves[move].hasFlag(MoveFlags.TRIAGE_MOVE) && allMoves[move].category === MoveCategory.STATUS; } /** @@ -2785,10 +2776,7 @@ export class HealBlockTag extends MoveRestrictionBattlerTag { override isMoveTargetRestricted(move: MoveId, user: Pokemon, target: Pokemon) { const moveCategory = new NumberHolder(allMoves[move].category); applyMoveAttrs(StatusCategoryOnAllyAttr, user, target, allMoves[move], moveCategory); - if (allMoves[move].hasAttr(HealOnAllyAttr) && moveCategory.value === MoveCategory.STATUS) { - return true; - } - return false; + return allMoves[move].hasAttr(HealOnAllyAttr) && moveCategory.value === MoveCategory.STATUS; } /** @@ -3126,10 +3114,7 @@ export class TormentTag extends MoveRestrictionBattlerTag { const moveObj = allMoves[lastMove.move]; const isUnaffected = moveObj.hasAttr(ConsecutiveUseDoublePowerAttr) || user.getTag(BattlerTagType.FRENZY); const validLastMoveResult = lastMove.result === MoveResult.SUCCESS || lastMove.result === MoveResult.MISS; - if (lastMove.move === move && validLastMoveResult && lastMove.move !== MoveId.STRUGGLE && !isUnaffected) { - return true; - } - return false; + return lastMove.move === move && validLastMoveResult && lastMove.move !== MoveId.STRUGGLE && !isUnaffected; } override selectionDeniedText(pokemon: Pokemon, _move: MoveId): string { diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 91cc6350daa..e98b28e2a48 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -5472,13 +5472,6 @@ export class AddBattlerTagAttr extends MoveEffectAttr { this.failOnOverlap = !!failOnOverlap; } - canApply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - if (!super.canApply(user, target, move, args)) { - return false; - } - return true; - } - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (!super.apply(user, target, move, args)) { return false; @@ -6832,7 +6825,7 @@ export class RandomMovesetMoveAttr extends CallMoveAttr { return false; } - this.moveId = moves[user.randBattleSeedInt(moves.length)]!.moveId; + this.moveId = moves[user.randBattleSeedInt(moves.length)].moveId; return true; }; } @@ -7367,11 +7360,7 @@ export class SketchAttr extends MoveEffectAttr { return false; } - if (user.getMoveset().find(m => m.moveId === targetMove.move)) { - return false; - } - - return true; + return !user.getMoveset().some(m => m.moveId === targetMove.move); }; } } diff --git a/src/data/mystery-encounters/mystery-encounter-requirements.ts b/src/data/mystery-encounters/mystery-encounter-requirements.ts index ec78408ea83..88d9ba402a9 100644 --- a/src/data/mystery-encounters/mystery-encounter-requirements.ts +++ b/src/data/mystery-encounters/mystery-encounter-requirements.ts @@ -275,15 +275,11 @@ export class TimeOfDayRequirement extends EncounterSceneRequirement { override meetsRequirement(): boolean { const timeOfDay = globalScene.arena?.getTimeOfDay(); - if ( + return !( !isNullOrUndefined(timeOfDay) && this.requiredTimeOfDay?.length > 0 && !this.requiredTimeOfDay.includes(timeOfDay) - ) { - return false; - } - - return true; + ); } override getDialogueToken(_pokemon?: PlayerPokemon): [string, string] { @@ -301,15 +297,11 @@ export class WeatherRequirement extends EncounterSceneRequirement { override meetsRequirement(): boolean { const currentWeather = globalScene.arena.weather?.weatherType; - if ( + return !( !isNullOrUndefined(currentWeather) && this.requiredWeather?.length > 0 && !this.requiredWeather.includes(currentWeather!) - ) { - return false; - } - - return true; + ); } override getDialogueToken(_pokemon?: PlayerPokemon): [string, string] { @@ -803,7 +795,7 @@ export class CanFormChangeWithItemRequirement extends EncounterPokemonRequiremen } filterByForm(pokemon, formChangeItem) { - if ( + return ( pokemonFormChanges.hasOwnProperty(pokemon.species.speciesId) && // Get all form changes for this species with an item trigger, including any compound triggers pokemonFormChanges[pokemon.species.speciesId] @@ -812,10 +804,7 @@ export class CanFormChangeWithItemRequirement extends EncounterPokemonRequiremen .flatMap(fc => fc.findTrigger(SpeciesFormChangeItemTrigger) as SpeciesFormChangeItemTrigger) .flatMap(fc => fc.item) .includes(formChangeItem) - ) { - return true; - } - return false; + ); } override queryParty(partyPokemon: PlayerPokemon[]): PlayerPokemon[] { @@ -873,17 +862,15 @@ export class CanEvolveWithItemRequirement extends EncounterPokemonRequirement { ) { return true; } - if ( + + return ( pokemon.isFusion() && pokemonEvolutions.hasOwnProperty(pokemon.fusionSpecies.speciesId) && pokemonEvolutions[pokemon.fusionSpecies.speciesId].filter( e => e.item === evolutionItem && (!e.condition || e.condition.predicate(pokemon)), ).length && pokemon.getFusionFormKey() !== SpeciesFormKey.GIGANTAMAX - ) { - return true; - } - return false; + ); } override queryParty(partyPokemon: PlayerPokemon[]): PlayerPokemon[] { diff --git a/src/data/pokemon-forms.ts b/src/data/pokemon-forms.ts index 1098ddc4eeb..47eb355c8b6 100644 --- a/src/data/pokemon-forms.ts +++ b/src/data/pokemon-forms.ts @@ -186,11 +186,7 @@ export class SpeciesFormChange { } } - if (!this.trigger.canChange(pokemon)) { - return false; - } - - return true; + return this.trigger.canChange(pokemon); } findTrigger(triggerType: Constructor): SpeciesFormChangeTrigger | nil { diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 66ed0b09eeb..df7a8c118d5 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -1281,10 +1281,6 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali }; } - isObtainable() { - return super.isObtainable(); - } - hasVariants() { let variantDataIndex: string | number = this.speciesId; if (this.forms.length > 0) { diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index d06553f2227..df953f06834 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1292,19 +1292,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { */ isOffsetBySubstitute(): boolean { const substitute = this.getTag(SubstituteTag); - if (substitute) { - if (substitute.sprite === undefined) { - return false; - } - - // During the Pokemon's MoveEffect phase, the offset is removed to put the Pokemon "in focus" - const currentPhase = globalScene.getCurrentPhase(); - if (currentPhase?.is("MoveEffectPhase") && currentPhase.getPokemon() === this) { - return false; - } - return true; + if (!substitute || substitute.sprite === undefined) { + return false; } - return false; + // During the Pokemon's MoveEffect phase, the offset is removed to put the Pokemon "in focus" + const currentPhase = globalScene.getCurrentPhase(); + return !(currentPhase?.is("MoveEffectPhase") && currentPhase.getPokemon() === this); } /** If this Pokemon has a Substitute on the field, removes its sprite from the field. */ @@ -2241,10 +2234,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (this.getAbility(ignoreOverride).id === ability && (!canApply || this.canApplyAbility())) { return true; } - if (this.getPassiveAbility().id === ability && this.hasPassive() && (!canApply || this.canApplyAbility(true))) { - return true; - } - return false; + return this.getPassiveAbility().id === ability && this.hasPassive() && (!canApply || this.canApplyAbility(true)); } /** @@ -2261,10 +2251,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if ((!canApply || this.canApplyAbility()) && this.getAbility(ignoreOverride).hasAttr(attrType)) { return true; } - if (this.hasPassive() && (!canApply || this.canApplyAbility(true)) && this.getPassiveAbility().hasAttr(attrType)) { - return true; - } - return false; + return this.hasPassive() && (!canApply || this.canApplyAbility(true)) && this.getPassiveAbility().hasAttr(attrType); } /** @@ -5464,10 +5451,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if ((ownedAbilityAttrs & 2) > 0 && this.hasSameAbilityInRootForm(1)) { return true; } - if ((ownedAbilityAttrs & 4) > 0 && this.hasSameAbilityInRootForm(2)) { - return true; - } - return false; + return (ownedAbilityAttrs & 4) > 0 && this.hasSameAbilityInRootForm(2); } /** diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 2bebbcae90c..f8c71b2c891 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -1090,10 +1090,6 @@ export class PokemonIncrementingStatModifier extends PokemonHeldItemModifier { return new PokemonIncrementingStatModifier(this.type, this.pokemonId, this.stackCount); } - getArgs(): any[] { - return super.getArgs(); - } - /** * Checks if the {@linkcode PokemonIncrementingStatModifier} should be applied to the {@linkcode Pokemon}. * @param pokemon The {@linkcode Pokemon} that holds the item @@ -1216,10 +1212,6 @@ export class StatBoosterModifier extends PokemonHeldItemModifier { * @see {@linkcode apply} */ export class EvolutionStatBoosterModifier extends StatBoosterModifier { - clone() { - return super.clone() as EvolutionStatBoosterModifier; - } - matchType(modifier: Modifier): boolean { return modifier instanceof EvolutionStatBoosterModifier; } diff --git a/src/sprites/sprite-utils.ts b/src/sprites/sprite-utils.ts index 8a352de3d55..0f4adf7882f 100644 --- a/src/sprites/sprite-utils.ts +++ b/src/sprites/sprite-utils.ts @@ -21,8 +21,5 @@ export function hasExpSprite(key: string): boolean { if (keyMatch[5]) { k += keyMatch[5]; } - if (!expSpriteKeys.has(k)) { - return false; - } - return true; + return expSpriteKeys.has(k); } From a818c2b33f5981381615d29da92c850f5131b1c7 Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Fri, 6 Jun 2025 23:50:16 -0400 Subject: [PATCH 210/262] [Bug] Dancer no longer breaks "last hit only" moves, respects flinch + steadfast (#5945) * WIP * Fixed Dancer last hit, flinch move interaction * Fixed steadfast interaction * Fixed comment + flaky test --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/data/abilities/ability.ts | 1 + src/data/battler-tags.ts | 18 ++++++--------- test/abilities/dancer.test.ts | 41 +++++++++++++++++++++++++++++++++++ test/moves/instruct.test.ts | 30 +++++++++++++++++++++++-- 4 files changed, 77 insertions(+), 13 deletions(-) diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 6e6c00b8a43..d20eddcb3cb 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -4438,6 +4438,7 @@ export class PostDancingMoveAbAttr extends PostMoveUsedAbAttr { simulated: boolean, args: any[]): void { if (!simulated) { + dancer.turnData.extraTurns++; // If the move is an AttackMove or a StatusMove the Dancer must replicate the move on the source of the Dance if (move.getMove() instanceof AttackMove || move.getMove() instanceof StatusMove) { const target = this.getTarget(dancer, source, targets); diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 4d99fd18ac0..456f519a34c 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -649,20 +649,14 @@ class NoRetreatTag extends TrappedTag { */ export class FlinchedTag extends BattlerTag { constructor(sourceMove: MoveId) { - super(BattlerTagType.FLINCHED, [BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.TURN_END], 0, sourceMove); - } - - onAdd(pokemon: Pokemon): void { - super.onAdd(pokemon); - - applyAbAttrs(FlinchEffectAbAttr, pokemon, null); + super(BattlerTagType.FLINCHED, [BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.TURN_END], 1, sourceMove); } /** - * Cancels the Pokemon's next Move on the turn this tag is applied - * @param pokemon The {@linkcode Pokemon} with this tag - * @param lapseType The {@linkcode BattlerTagLapseType lapse type} used for this function call - * @returns `false` (This tag is always removed after applying its effects) + * Cancels the flinched Pokemon's currently used move this turn if called mid-execution, or removes the tag at end of turn. + * @param pokemon - The {@linkcode Pokemon} with this tag. + * @param lapseType - The {@linkcode BattlerTagLapseType | lapse type} used for this function call. + * @returns Whether the tag should remain active. */ lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { if (lapseType === BattlerTagLapseType.PRE_MOVE) { @@ -672,6 +666,8 @@ export class FlinchedTag extends BattlerTag { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), ); + applyAbAttrs(FlinchEffectAbAttr, pokemon, null); + return true; } return super.lapse(pokemon, lapseType); diff --git a/test/abilities/dancer.test.ts b/test/abilities/dancer.test.ts index 7b4edb84789..086c69300b4 100644 --- a/test/abilities/dancer.test.ts +++ b/test/abilities/dancer.test.ts @@ -1,8 +1,10 @@ import { BattlerIndex } from "#app/battle"; +import { MoveResult } from "#app/field/pokemon"; import type { MovePhase } from "#app/phases/move-phase"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; +import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -99,4 +101,43 @@ describe("Abilities - Dancer", () => { expect(currentPhase.pokemon).toBe(oricorio); expect(currentPhase.move.moveId).toBe(MoveId.REVELATION_DANCE); }); + + it("should not break subsequent last hit only moves", async () => { + game.override.battleStyle("single"); + await game.classicMode.startBattle([SpeciesId.ORICORIO, SpeciesId.FEEBAS]); + + const [oricorio, feebas] = game.scene.getPlayerParty(); + + game.move.use(MoveId.BATON_PASS); + game.doSelectPartyPokemon(1); + await game.move.forceEnemyMove(MoveId.SWORDS_DANCE); + await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(game.phaseInterceptor.log).toContain("SwitchSummonPhase"); + expect(game.field.getPlayerPokemon()).toBe(feebas); + expect(feebas.getStatStage(Stat.ATK)).toBe(2); + expect(oricorio.isOnField()).toBe(false); + expect(oricorio.visible).toBe(false); + }); + + it("should not trigger while flinched", async () => { + game.override.battleStyle("double").moveset(MoveId.SPLASH).enemyMoveset([MoveId.SWORDS_DANCE, MoveId.FAKE_OUT]); + await game.classicMode.startBattle([SpeciesId.ORICORIO]); + + const oricorio = game.scene.getPlayerPokemon()!; + expect(oricorio).toBeDefined(); + + // get faked out and copy swords dance + game.move.select(MoveId.SPLASH); + await game.move.forceEnemyMove(MoveId.SWORDS_DANCE); + await game.move.forceEnemyMove(MoveId.FAKE_OUT, BattlerIndex.PLAYER); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(oricorio.getLastXMoves(-1)[0]).toMatchObject({ + move: MoveId.NONE, + result: MoveResult.FAIL, + }); + expect(oricorio.getStatStage(Stat.ATK)).toBe(0); + }); }); diff --git a/test/moves/instruct.test.ts b/test/moves/instruct.test.ts index 56ac8d9d04d..4a701ed6ac5 100644 --- a/test/moves/instruct.test.ts +++ b/test/moves/instruct.test.ts @@ -1,13 +1,15 @@ import { BattlerIndex } from "#app/battle"; +import { allMoves } from "#app/data/data-lists"; import type Pokemon from "#app/field/pokemon"; import { MoveResult } from "#app/field/pokemon"; import type { MovePhase } from "#app/phases/move-phase"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; +import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; describe("Moves - Instruct", () => { let phaserGame: Phaser.Game; @@ -34,7 +36,8 @@ describe("Moves - Instruct", () => { game.override .battleStyle("single") .enemySpecies(SpeciesId.SHUCKLE) - .enemyAbility(AbilityId.NO_GUARD) + .enemyAbility(AbilityId.BALL_FETCH) + .passiveAbility(AbilityId.NO_GUARD) .enemyLevel(100) .startingLevel(100) .disableCrits(); @@ -536,4 +539,27 @@ describe("Moves - Instruct", () => { expect(ivysaur.turnData.attacksReceived.length).toBe(15); }); + + it("should respect prior flinches and trigger Steadfast", async () => { + game.override.battleStyle("double"); + vi.spyOn(allMoves[MoveId.AIR_SLASH], "chance", "get").mockReturnValue(100); + await game.classicMode.startBattle([SpeciesId.AUDINO, SpeciesId.ABRA]); + + // Fake enemy 1 having attacked prior + const [, player2, enemy1, enemy2] = game.scene.getField(); + enemy1.pushMoveHistory({ move: MoveId.ABSORB, targets: [BattlerIndex.PLAYER] }); + game.field.mockAbility(enemy1, AbilityId.STEADFAST); + + game.move.use(MoveId.AIR_SLASH, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.use(MoveId.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); + await game.move.forceEnemyMove(MoveId.ABSORB); + await game.move.forceEnemyMove(MoveId.INSTRUCT, BattlerIndex.ENEMY); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY_2]); + await game.toEndOfTurn(); + + expect(enemy1.getLastXMoves(-1).map(m => m.move)).toEqual([MoveId.NONE, MoveId.NONE, MoveId.NONE, MoveId.ABSORB]); + expect(enemy1.getStatStage(Stat.SPD)).toBe(3); + expect(player2.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); + expect(enemy2.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); + }); }); From c5db8273815b012fbe4d2990cc8a31480c219b94 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Fri, 6 Jun 2025 23:09:23 -0700 Subject: [PATCH 211/262] [Dev] Enable Biome linting of `move-effect-phase.ts` (#5947) --- biome.jsonc | 3 --- src/phases/move-effect-phase.ts | 6 ++++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/biome.jsonc b/biome.jsonc index 40301b3e0bc..141c44dc87d 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -42,9 +42,6 @@ // TODO: Remove if we ever get down to 0 circular imports "organizeImports": { "enabled": false }, "linter": { - "ignore": [ - "src/phases/move-effect-phase.ts" // TODO: unignore after move-effect-phase refactor - ], "enabled": true, "rules": { "recommended": true, diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index 3160d848624..d80fdc89e6f 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -219,6 +219,7 @@ export class MoveEffectPhase extends PokemonPhase { return; } break; + // biome-ignore lint/suspicious/noFallthroughSwitchClause: The fallthrough is intentional case HitCheckResult.NO_EFFECT: globalScene.queueMessage( i18next.t(this.move.id === MoveId.SHEER_COLD ? "battle:hitResultImmune" : "battle:hitResultNoEffect", { @@ -294,7 +295,8 @@ export class MoveEffectPhase extends PokemonPhase { // If other effects were overriden, stop this phase before they can be applied if (overridden.value) { - return this.end(); + this.end(); + return; } // Lapse `MOVE_EFFECT` effects (i.e. semi-invulnerability) when applicable @@ -743,7 +745,7 @@ export class MoveEffectPhase extends PokemonPhase { firstTarget?: boolean | null, selfTarget?: boolean, ): void { - return applyFilteredMoveAttrs( + applyFilteredMoveAttrs( (attr: MoveAttr) => attr instanceof MoveEffectAttr && attr.trigger === triggerType && From 1ff45687c5259dfc109bf2bf96d64a61da78b22e Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Sat, 7 Jun 2025 20:28:01 -0400 Subject: [PATCH 212/262] [Refactor] Merged `interfaces/` into `@types/`; removed runtime orphan modules https://github.com/pagefaultgames/pokerogue/pull/5951 --- src/@types/{DexData.ts => dex-data.ts} | 11 ++++------ .../held-modifier-config.ts | 0 src/{interfaces => @types}/locales.ts | 3 --- .../typedefs.ts => @types/trainer-funcs.ts} | 4 ++-- src/battle-scene.ts | 4 ++-- src/data/abilities/ability-class.ts | 2 +- src/data/egg-hatch-data.ts | 3 ++- src/data/moves/move.ts | 2 +- .../encounters/absolute-avarice-encounter.ts | 2 +- .../encounters/training-session-encounter.ts | 2 +- .../encounters/weird-dream-encounter.ts | 2 +- .../utils/encounter-phase-utils.ts | 2 +- src/data/pokemon-species.ts | 2 +- src/data/trainers/evil-admin-trainer-pools.ts | 2 +- src/data/trainers/trainer-config.ts | 2 +- src/debug.js | 17 -------------- src/global-vars/starter-colors.ts | 5 ++--- src/starter-colors.ts | 4 ---- src/system/game-data.ts | 16 ++------------ src/system/session-history.ts | 22 ------------------- src/ui/pokedex-page-ui-handler.ts | 3 ++- src/ui/pokedex-ui-handler.ts | 3 ++- src/ui/pokemon-info-container.ts | 3 ++- src/ui/starter-select-ui-handler.ts | 9 ++------ 24 files changed, 31 insertions(+), 94 deletions(-) rename src/@types/{DexData.ts => dex-data.ts} (82%) rename src/{interfaces => @types}/held-modifier-config.ts (100%) rename src/{interfaces => @types}/locales.ts (95%) rename src/{data/trainers/typedefs.ts => @types/trainer-funcs.ts} (83%) delete mode 100644 src/debug.js delete mode 100644 src/starter-colors.ts delete mode 100644 src/system/session-history.ts diff --git a/src/@types/DexData.ts b/src/@types/dex-data.ts similarity index 82% rename from src/@types/DexData.ts rename to src/@types/dex-data.ts index 19bb0357471..88cc16886bd 100644 --- a/src/@types/DexData.ts +++ b/src/@types/dex-data.ts @@ -1,6 +1,7 @@ -/** - * Dex entry for a single Pokemon Species - */ +export interface DexData { + [key: number]: DexEntry; +} + export interface DexEntry { seenAttr: bigint; caughtAttr: bigint; @@ -10,7 +11,3 @@ export interface DexEntry { hatchedCount: number; ivs: number[]; } - -export interface DexData { - [key: number]: DexEntry; -} diff --git a/src/interfaces/held-modifier-config.ts b/src/@types/held-modifier-config.ts similarity index 100% rename from src/interfaces/held-modifier-config.ts rename to src/@types/held-modifier-config.ts diff --git a/src/interfaces/locales.ts b/src/@types/locales.ts similarity index 95% rename from src/interfaces/locales.ts rename to src/@types/locales.ts index 2d26911f82f..3b5a1477e19 100644 --- a/src/interfaces/locales.ts +++ b/src/@types/locales.ts @@ -2,9 +2,6 @@ export interface Localizable { localize(): void; } -export interface TranslationEntries { - [key: string]: string | { [key: string]: string }; -} export interface SimpleTranslationEntries { [key: string]: string; } diff --git a/src/data/trainers/typedefs.ts b/src/@types/trainer-funcs.ts similarity index 83% rename from src/data/trainers/typedefs.ts rename to src/@types/trainer-funcs.ts index 3df2ba3f5f8..0546dd53024 100644 --- a/src/data/trainers/typedefs.ts +++ b/src/@types/trainer-funcs.ts @@ -2,8 +2,8 @@ import type { EnemyPokemon } from "#app/field/pokemon"; import type { PersistentModifier } from "#app/modifier/modifier"; import type { PartyMemberStrength } from "#enums/party-member-strength"; import type { SpeciesId } from "#enums/species-id"; -import type { TrainerConfig } from "./trainer-config"; -import type { TrainerPartyTemplate } from "./TrainerPartyTemplate"; +import type { TrainerConfig } from "../data/trainers/trainer-config"; +import type { TrainerPartyTemplate } from "../data/trainers/TrainerPartyTemplate"; export type PartyTemplateFunc = () => TrainerPartyTemplate; export type PartyMemberFunc = (level: number, strength: PartyMemberStrength) => EnemyPokemon; diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 9a46baba899..598ab64881a 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -120,7 +120,7 @@ import { SceneBase } from "#app/scene-base"; import CandyBar from "#app/ui/candy-bar"; import type { Variant } from "#app/sprites/variant"; import { variantData, clearVariantData } from "#app/sprites/variant"; -import type { Localizable } from "#app/interfaces/locales"; +import type { Localizable } from "#app/@types/locales"; import Overrides from "#app/overrides"; import { InputsController } from "#app/inputs-controller"; import { UiInputs } from "#app/ui-inputs"; @@ -169,7 +169,7 @@ import { import { MysteryEncounterSaveData } from "#app/data/mystery-encounters/mystery-encounter-save-data"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import type HeldModifierConfig from "#app/interfaces/held-modifier-config"; +import type HeldModifierConfig from "#app/@types/held-modifier-config"; import { ExpPhase } from "#app/phases/exp-phase"; import { ShowPartyExpBarPhase } from "#app/phases/show-party-exp-bar-phase"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; diff --git a/src/data/abilities/ability-class.ts b/src/data/abilities/ability-class.ts index 9da83a32c4d..10bd01f3987 100644 --- a/src/data/abilities/ability-class.ts +++ b/src/data/abilities/ability-class.ts @@ -2,7 +2,7 @@ import { AbilityId } from "#enums/ability-id"; import type { AbAttrCondition } from "#app/@types/ability-types"; import type { AbAttr } from "#app/data/abilities/ab-attrs/ab-attr"; import i18next from "i18next"; -import type { Localizable } from "#app/interfaces/locales"; +import type { Localizable } from "#app/@types/locales"; import type { Constructor } from "#app/utils/common"; export class Ability implements Localizable { diff --git a/src/data/egg-hatch-data.ts b/src/data/egg-hatch-data.ts index 949ed1af063..e81ae69515c 100644 --- a/src/data/egg-hatch-data.ts +++ b/src/data/egg-hatch-data.ts @@ -1,6 +1,7 @@ import { globalScene } from "#app/global-scene"; import type { PlayerPokemon } from "#app/field/pokemon"; -import type { DexEntry, StarterDataEntry } from "#app/system/game-data"; +import type { StarterDataEntry } from "#app/system/game-data"; +import type { DexEntry } from "#app/@types/dex-data"; /** * Stores data associated with a specific egg and the hatched pokemon diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index e98b28e2a48..1bd6db97005 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -81,7 +81,7 @@ import { TerrainType } from "../terrain"; import { ModifierPoolType } from "#app/modifier/modifier-type"; import { Command } from "../../ui/command-ui-handler"; import i18next from "i18next"; -import type { Localizable } from "#app/interfaces/locales"; +import type { Localizable } from "#app/@types/locales"; import { getBerryEffectFunc } from "../berry"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; diff --git a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts index f46e1360b0d..b14caa4e2c3 100644 --- a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts +++ b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts @@ -33,7 +33,7 @@ import { } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import { TrainerSlot } from "#enums/trainer-slot"; import { PokeballType } from "#enums/pokeball"; -import type HeldModifierConfig from "#app/interfaces/held-modifier-config"; +import type HeldModifierConfig from "#app/@types/held-modifier-config"; import type { BerryType } from "#enums/berry-type"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { Stat } from "#enums/stat"; diff --git a/src/data/mystery-encounters/encounters/training-session-encounter.ts b/src/data/mystery-encounters/encounters/training-session-encounter.ts index 597a6b009b3..b17a39ae694 100644 --- a/src/data/mystery-encounters/encounters/training-session-encounter.ts +++ b/src/data/mystery-encounters/encounters/training-session-encounter.ts @@ -25,7 +25,7 @@ import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/myst import { queueEncounterMessage, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; -import type HeldModifierConfig from "#app/interfaces/held-modifier-config"; +import type HeldModifierConfig from "#app/@types/held-modifier-config"; import i18next from "i18next"; import { getStatKey } from "#enums/stat"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; diff --git a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts index 25be75b9d5a..2b1f775b78e 100644 --- a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts +++ b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts @@ -39,7 +39,7 @@ import { PlayerGender } from "#enums/player-gender"; import { TrainerType } from "#enums/trainer-type"; import PokemonData from "#app/system/pokemon-data"; import { Nature } from "#enums/nature"; -import type HeldModifierConfig from "#app/interfaces/held-modifier-config"; +import type HeldModifierConfig from "#app/@types/held-modifier-config"; import { trainerConfigs } from "#app/data/trainers/trainer-config"; import { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate"; import { PartyMemberStrength } from "#enums/party-member-strength"; diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index c9eaa2e6968..5736835d98a 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -50,7 +50,7 @@ import type PokemonSpecies from "#app/data/pokemon-species"; import type { IEggOptions } from "#app/data/egg"; import { Egg } from "#app/data/egg"; import type { CustomPokemonData } from "#app/data/custom-pokemon-data"; -import type HeldModifierConfig from "#app/interfaces/held-modifier-config"; +import type HeldModifierConfig from "#app/@types/held-modifier-config"; import { MovePhase } from "#app/phases/move-phase"; import { EggLapsePhase } from "#app/phases/egg-lapse-phase"; import { TrainerVictoryPhase } from "#app/phases/trainer-victory-phase"; diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index df7a8c118d5..e946b526960 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -1,4 +1,4 @@ -import type { Localizable } from "#app/interfaces/locales"; +import type { Localizable } from "#app/@types/locales"; import { AbilityId } from "#enums/ability-id"; import { PartyMemberStrength } from "#enums/party-member-strength"; import { SpeciesId } from "#enums/species-id"; diff --git a/src/data/trainers/evil-admin-trainer-pools.ts b/src/data/trainers/evil-admin-trainer-pools.ts index 7c0336e784e..74ee3e8cb3d 100644 --- a/src/data/trainers/evil-admin-trainer-pools.ts +++ b/src/data/trainers/evil-admin-trainer-pools.ts @@ -1,4 +1,4 @@ -import type { TrainerTierPools } from "#app/data/trainers/typedefs"; +import type { TrainerTierPools } from "#app/@types/trainer-funcs"; import { TrainerPoolTier } from "#enums/trainer-pool-tier"; import { SpeciesId } from "#enums/species-id"; diff --git a/src/data/trainers/trainer-config.ts b/src/data/trainers/trainer-config.ts index 6408bf94eac..8e704b0b301 100644 --- a/src/data/trainers/trainer-config.ts +++ b/src/data/trainers/trainer-config.ts @@ -48,7 +48,7 @@ import type { TrainerTierPools, TrainerConfigs, PartyMemberFuncs, -} from "./typedefs"; +} from "../../@types/trainer-funcs"; /** Minimum BST for Pokemon generated onto the Elite Four's teams */ const ELITE_FOUR_MINIMUM_BST = 460; diff --git a/src/debug.js b/src/debug.js deleted file mode 100644 index 6ddf6046c7a..00000000000 --- a/src/debug.js +++ /dev/null @@ -1,17 +0,0 @@ -export function getData() { - const dataStr = localStorage.getItem("data"); - if (!dataStr) { - return null; - } - return JSON.parse(atob(dataStr), (k, v) => - k.endsWith("Attr") && !["natureAttr", "abilityAttr", "passiveAttr"].includes(k) ? BigInt(v) : v, - ); -} - -export function getSession() { - const sessionStr = localStorage.getItem("sessionData"); - if (!sessionStr) { - return null; - } - return JSON.parse(atob(sessionStr)); -} diff --git a/src/global-vars/starter-colors.ts b/src/global-vars/starter-colors.ts index 6abe028be99..6b019bd5c34 100644 --- a/src/global-vars/starter-colors.ts +++ b/src/global-vars/starter-colors.ts @@ -1,4 +1,3 @@ -export const starterColors: StarterColors = {}; -interface StarterColors { +export const starterColors: { [key: string]: [string, string]; -} +} = {}; diff --git a/src/starter-colors.ts b/src/starter-colors.ts deleted file mode 100644 index 6abe028be99..00000000000 --- a/src/starter-colors.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const starterColors: StarterColors = {}; -interface StarterColors { - [key: string]: [string, string]; -} diff --git a/src/system/game-data.ts b/src/system/game-data.ts index ab907d2f768..d9b8d73d3c3 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -62,6 +62,7 @@ import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; import { ArenaTrapTag } from "#app/data/arena-tag"; import { pokemonFormChanges } from "#app/data/pokemon-forms"; import type { PokemonType } from "#enums/pokemon-type"; +import type { DexData, DexEntry } from "../@types/dex-data"; export const defaultStarterSpecies: SpeciesId[] = [ SpeciesId.BULBASAUR, @@ -131,6 +132,7 @@ export function decrypt(data: string, bypassLogin: boolean): string { )(data); } +// TODO: Move all these exported interfaces to @types export interface SystemSaveData { trainerId: number; secretId: number; @@ -191,20 +193,6 @@ export interface VoucherCounts { [type: string]: number; } -export interface DexData { - [key: number]: DexEntry; -} - -export interface DexEntry { - seenAttr: bigint; - caughtAttr: bigint; - natureAttr: number; - seenCount: number; - caughtCount: number; - hatchedCount: number; - ivs: number[]; -} - export type StarterMoveset = [MoveId] | [MoveId, MoveId] | [MoveId, MoveId, MoveId] | [MoveId, MoveId, MoveId, MoveId]; export interface StarterFormMoveData { diff --git a/src/system/session-history.ts b/src/system/session-history.ts deleted file mode 100644 index 8eb81cb6efe..00000000000 --- a/src/system/session-history.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { GameModes } from "../game-mode"; -import type PokemonData from "./pokemon-data"; -import type PersistentModifierData from "./modifier-data"; - -export enum SessionHistoryResult { - ACTIVE, - WIN, - LOSS, -} - -export interface SessionHistory { - seed: string; - playTime: number; - result: SessionHistoryResult; - gameMode: GameModes; - party: PokemonData[]; - modifiers: PersistentModifierData[]; - money: number; - waveIndex: number; - gameVersion: string; - timestamp: number; -} diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index 00e166f075d..5875e3394a2 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -20,7 +20,8 @@ import { allSpecies, getPokemonSpecies, getPokemonSpeciesForm, normalForm } from import { getStarterValueFriendshipCap, speciesStarterCosts } from "#app/data/balance/starters"; import { starterPassiveAbilities } from "#app/data/balance/passives"; import { PokemonType } from "#enums/pokemon-type"; -import type { DexEntry, StarterAttributes } from "#app/system/game-data"; +import type { StarterAttributes } from "#app/system/game-data"; +import type { DexEntry } from "#app/@types/dex-data"; import { AbilityAttr, DexAttr } from "#app/system/game-data"; import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import MessageUiHandler from "#app/ui/message-ui-handler"; diff --git a/src/ui/pokedex-ui-handler.ts b/src/ui/pokedex-ui-handler.ts index 8b3633d7422..96451041306 100644 --- a/src/ui/pokedex-ui-handler.ts +++ b/src/ui/pokedex-ui-handler.ts @@ -11,7 +11,8 @@ import { allSpecies, getPokemonSpeciesForm, getPokerusStarters, normalForm } fro import { getStarterValueFriendshipCap, speciesStarterCosts, POKERUS_STARTER_COUNT } from "#app/data/balance/starters"; import { catchableSpecies } from "#app/data/balance/biomes"; import { PokemonType } from "#enums/pokemon-type"; -import type { DexAttrProps, DexEntry, StarterAttributes, StarterPreferences } from "#app/system/game-data"; +import type { DexAttrProps, StarterAttributes, StarterPreferences } from "#app/system/game-data"; +import type { DexEntry } from "#app/@types/dex-data"; import { AbilityAttr, DexAttr, loadStarterPreferences } from "#app/system/game-data"; import MessageUiHandler from "#app/ui/message-ui-handler"; import PokemonIconAnimHandler, { PokemonIconAnimMode } from "#app/ui/pokemon-icon-anim-handler"; diff --git a/src/ui/pokemon-info-container.ts b/src/ui/pokemon-info-container.ts index d8012a58875..3dbe3b7af7d 100644 --- a/src/ui/pokemon-info-container.ts +++ b/src/ui/pokemon-info-container.ts @@ -6,7 +6,8 @@ import { getNatureName } from "../data/nature"; import { PokemonType } from "#enums/pokemon-type"; import type Pokemon from "../field/pokemon"; import i18next from "i18next"; -import type { DexEntry, StarterDataEntry } from "../system/game-data"; +import type { StarterDataEntry } from "../system/game-data"; +import type { DexEntry } from "#app/@types/dex-data"; import { DexAttr } from "../system/game-data"; import { fixedInt, getShinyDescriptor } from "#app/utils/common"; import ConfirmUiHandler from "./confirm-ui-handler"; diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 3bea0b08698..b7a7e0f3e6e 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -23,13 +23,8 @@ import { allSpecies, getPokemonSpeciesForm, getPokerusStarters } from "#app/data import { getStarterValueFriendshipCap, speciesStarterCosts, POKERUS_STARTER_COUNT } from "#app/data/balance/starters"; import { PokemonType } from "#enums/pokemon-type"; import { GameModes } from "#app/game-mode"; -import type { - DexAttrProps, - DexEntry, - StarterMoveset, - StarterAttributes, - StarterPreferences, -} from "#app/system/game-data"; +import type { DexAttrProps, StarterMoveset, StarterAttributes, StarterPreferences } from "#app/system/game-data"; +import type { DexEntry } from "#app/@types/dex-data"; import { AbilityAttr, DexAttr, loadStarterPreferences, saveStarterPreferences } from "#app/system/game-data"; import { Tutorial, handleTutorial } from "#app/tutorial"; import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; From d3bc33cd4ea8a315ce32623a526530c1af928a48 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Sat, 7 Jun 2025 17:37:09 -0700 Subject: [PATCH 213/262] [Misc] Remove `debug.js` reference from `index.html` --- index.html | 1 - 1 file changed, 1 deletion(-) diff --git a/index.html b/index.html index 111464b5e5c..d503617c13c 100644 --- a/index.html +++ b/index.html @@ -145,6 +145,5 @@ - \ No newline at end of file From ef6029ae4bf2f3b6517837d1d7b282e511049f69 Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Sat, 7 Jun 2025 20:44:58 -0400 Subject: [PATCH 214/262] [Refactor] Add methods `isPlayer` and `isEnemy` to reduce circular imports https://github.com/pagefaultgames/pokerogue/pull/5902 * Added functions `isPlayer` and `isEnemy` for type checking * Apply suggestions from Kev code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Fix merge issue * Split imports --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/battle-scene.ts | 13 ++--- src/data/abilities/ability.ts | 8 +-- src/data/moves/move.ts | 22 ++++---- src/field/pokemon.ts | 52 ++++++++++++------- src/messages.ts | 4 +- src/phases/faint-phase.ts | 5 +- src/phases/move-effect-phase.ts | 2 +- src/phases/quiet-form-change-phase.ts | 3 +- src/phases/switch-summon-phase.ts | 1 - ...an-offer-you-cant-refuse-encounter.test.ts | 4 +- .../the-pokemon-salesman-encounter.test.ts | 3 +- 11 files changed, 63 insertions(+), 54 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 598ab64881a..762e11ec9f5 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -811,6 +811,7 @@ export default class BattleScene extends SceneBase { } } + // TODO: Add a `getPartyOnSide` function for getting the party of a pokemon public getPlayerParty(): PlayerPokemon[] { return this.party; } @@ -3086,9 +3087,9 @@ export default class BattleScene extends SceneBase { const removeOld = itemModifier.stackCount === 0; - if (!removeOld || !source || this.removeModifier(itemModifier, !source.isPlayer())) { + if (!removeOld || !source || this.removeModifier(itemModifier, source.isEnemy())) { const addModifier = () => { - if (!matchingModifier || this.removeModifier(matchingModifier, !target.isPlayer())) { + if (!matchingModifier || this.removeModifier(matchingModifier, target.isEnemy())) { if (target.isPlayer()) { this.addModifier(newItemModifier, ignoreUpdate, playSound, false, instant); if (source && itemLost) { @@ -3492,12 +3493,12 @@ export default class BattleScene extends SceneBase { } if (matchingFormChange) { let phase: Phase; - if (pokemon instanceof PlayerPokemon && !matchingFormChange.quiet) { + if (pokemon.isPlayer() && !matchingFormChange.quiet) { phase = new FormChangePhase(pokemon, matchingFormChange, modal); } else { phase = new QuietFormChangePhase(pokemon, matchingFormChange); } - if (pokemon instanceof PlayerPokemon && !matchingFormChange.quiet && modal) { + if (pokemon.isPlayer() && !matchingFormChange.quiet && modal) { this.overridePhase(phase); } else if (delayed) { this.pushPhase(phase); @@ -3595,7 +3596,7 @@ export default class BattleScene extends SceneBase { activePokemon = activePokemon.concat(this.getEnemyParty()); for (const p of activePokemon) { keys.push(p.getSpriteKey(true)); - if (p instanceof PlayerPokemon) { + if (p.isPlayer()) { keys.push(p.getBattleSpriteKey(true, true)); } keys.push(p.species.getCryKey(p.formIndex)); @@ -3611,7 +3612,7 @@ export default class BattleScene extends SceneBase { * @param pokemon The (enemy) pokemon */ initFinalBossPhaseTwo(pokemon: Pokemon): void { - if (pokemon instanceof EnemyPokemon && pokemon.isBoss() && !pokemon.formIndex && pokemon.bossSegmentIndex < 1) { + if (pokemon.isEnemy() && pokemon.isBoss() && !pokemon.formIndex && pokemon.bossSegmentIndex < 1) { this.fadeOutBgm(fixedInt(2000), false); this.ui.showDialogue( battleSpecDialogue[BattleSpec.FINAL_BOSS].firstStageWin, diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index d20eddcb3cb..4d307b2ce6f 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -2617,7 +2617,7 @@ export class PostSummonUserFieldRemoveStatusEffectAbAttr extends PostSummonAbAtt } override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - const party = pokemon instanceof PlayerPokemon ? globalScene.getPlayerField() : globalScene.getEnemyField(); + const party = pokemon.isPlayer() ? globalScene.getPlayerField() : globalScene.getEnemyField(); return party.filter(p => p.isAllowedInBattle()).length > 0; } @@ -2629,7 +2629,7 @@ export class PostSummonUserFieldRemoveStatusEffectAbAttr extends PostSummonAbAtt * @param args - n/a */ override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { - const party = pokemon instanceof PlayerPokemon ? globalScene.getPlayerField() : globalScene.getEnemyField(); + const party = pokemon.isPlayer() ? globalScene.getPlayerField() : globalScene.getEnemyField(); const allowedParty = party.filter(p => p.isAllowedInBattle()); if (!simulated) { @@ -5539,7 +5539,7 @@ class ForceSwitchOutHelper { * - Whether there are available party members to switch in. * - If the Pokémon is still alive (hp > 0), and if so, it leaves the field and a new SwitchPhase is initiated. */ - if (switchOutTarget instanceof PlayerPokemon) { + if (switchOutTarget.isPlayer()) { if (globalScene.getPlayerParty().filter((p) => p.isAllowedInBattle() && !p.isOnField()).length < 1) { return false; } @@ -5608,7 +5608,7 @@ class ForceSwitchOutHelper { */ public getSwitchOutCondition(pokemon: Pokemon, opponent: Pokemon): boolean { const switchOutTarget = pokemon; - const player = switchOutTarget instanceof PlayerPokemon; + const player = switchOutTarget.isPlayer(); if (player) { const blockedByAbility = new BooleanHolder(false); diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 1bd6db97005..f610c745fd2 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -837,7 +837,7 @@ export default class Move implements Localizable { aura.applyPreAttack(source, null, simulated, target, this, [ power ]); } - const alliedField: Pokemon[] = source instanceof PlayerPokemon ? globalScene.getPlayerField() : globalScene.getEnemyField(); + const alliedField: Pokemon[] = source.isPlayer() ? globalScene.getPlayerField() : globalScene.getEnemyField(); alliedField.forEach(p => applyPreAttackAbAttrs(UserFieldMoveTypePowerBoostAbAttr, p, target, this, simulated, power)); power.value *= typeChangeMovePowerMultiplier.value; @@ -4125,7 +4125,7 @@ export class FriendshipPowerAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const power = args[0] as NumberHolder; - const friendshipPower = Math.floor(Math.min(user instanceof PlayerPokemon ? user.friendship : user.species.baseFriendship, 255) / 2.5); + const friendshipPower = Math.floor(Math.min(user.isPlayer() ? user.friendship : user.species.baseFriendship, 255) / 2.5); power.value = Math.max(!this.invert ? friendshipPower : 102 - friendshipPower, 1); return true; @@ -6149,14 +6149,14 @@ export class RevivalBlessingAttr extends MoveEffectAttr { * @param target {@linkcode Pokemon} target of this move * @param move {@linkcode Move} being used * @param args N/A - * @returns Promise, true if function succeeds. + * @returns `true` if function succeeds. */ override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { // If user is player, checks if the user has fainted pokemon - if (user instanceof PlayerPokemon) { + if (user.isPlayer()) { globalScene.unshiftPhase(new RevivalBlessingPhase(user)); return true; - } else if (user instanceof EnemyPokemon && user.hasTrainer() && globalScene.getEnemyParty().findIndex((p) => p.isFainted() && !p.isBoss()) > -1) { + } else if (user.isEnemy() && user.hasTrainer() && globalScene.getEnemyParty().findIndex((p) => p.isFainted() && !p.isBoss()) > -1) { // If used by an enemy trainer with at least one fainted non-boss Pokemon, this // revives one of said Pokemon selected at random. const faintedPokemon = globalScene.getEnemyParty().filter((p) => p.isFainted() && !p.isBoss()); @@ -6187,10 +6187,8 @@ export class RevivalBlessingAttr extends MoveEffectAttr { getCondition(): MoveConditionFunc { return (user, target, move) => - (user instanceof PlayerPokemon && globalScene.getPlayerParty().some((p) => p.isFainted())) || - (user instanceof EnemyPokemon && - user.hasTrainer() && - globalScene.getEnemyParty().some((p) => p.isFainted() && !p.isBoss())); + user.hasTrainer() && + (user.isPlayer() ? globalScene.getPlayerParty() : globalScene.getEnemyParty()).some((p: Pokemon) => p.isFainted() && !p.isBoss()); } override getUserBenefitScore(user: Pokemon, _target: Pokemon, _move: Move): number { @@ -6228,7 +6226,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { // (e.g. when it uses Flip Turn), make it spit out the Tatsugiri before switching out. switchOutTarget.lapseTag(BattlerTagType.COMMANDED); - if (switchOutTarget instanceof PlayerPokemon) { + if (switchOutTarget.isPlayer()) { /** * Check if Wimp Out/Emergency Exit activates due to being hit by U-turn or Volt Switch * If it did, the user of U-turn or Volt Switch will not be switched out. @@ -6382,7 +6380,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { getSwitchOutCondition(): MoveConditionFunc { return (user, target, move) => { const switchOutTarget = (this.selfSwitch ? user : target); - const player = switchOutTarget instanceof PlayerPokemon; + const player = switchOutTarget.isPlayer(); const forceSwitchAttr = move.getAttrs(ForceSwitchOutAttr).find(attr => attr.switchType === SwitchType.FORCE_SWITCH); if (!this.selfSwitch) { @@ -9857,7 +9855,7 @@ export function initMoves() { const lastEnemyFaint = globalScene.currentBattle.enemyFaintsHistory[globalScene.currentBattle.enemyFaintsHistory.length - 1]; return ( (lastPlayerFaint !== undefined && turn - lastPlayerFaint.turn === 1 && user.isPlayer()) || - (lastEnemyFaint !== undefined && turn - lastEnemyFaint.turn === 1 && !user.isPlayer()) + (lastEnemyFaint !== undefined && turn - lastEnemyFaint.turn === 1 && user.isEnemy()) ) ? 2 : 1; }), new AttackMove(MoveId.FINAL_GAMBIT, PokemonType.FIGHTING, MoveCategory.SPECIAL, -1, 100, 5, -1, 0, 5) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index df953f06834..d26dfd193f9 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -503,7 +503,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (level > 1) { const fused = new BooleanHolder(globalScene.gameMode.isSplicedOnly); - if (!fused.value && !this.isPlayer() && !this.hasTrainer()) { + if (!fused.value && this.isEnemy() && !this.hasTrainer()) { globalScene.applyModifier(EnemyFusionChanceModifier, false, fused); } @@ -788,7 +788,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return true; } - abstract isPlayer(): boolean; + abstract isPlayer(): this is PlayerPokemon; + + abstract isEnemy(): this is EnemyPokemon; abstract hasTrainer(): boolean; @@ -2050,7 +2052,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (Overrides.ABILITY_OVERRIDE && this.isPlayer()) { return allAbilities[Overrides.ABILITY_OVERRIDE]; } - if (Overrides.OPP_ABILITY_OVERRIDE && !this.isPlayer()) { + if (Overrides.OPP_ABILITY_OVERRIDE && this.isEnemy()) { return allAbilities[Overrides.OPP_ABILITY_OVERRIDE]; } if (this.isFusion()) { @@ -2080,7 +2082,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (Overrides.PASSIVE_ABILITY_OVERRIDE && this.isPlayer()) { return allAbilities[Overrides.PASSIVE_ABILITY_OVERRIDE]; } - if (Overrides.OPP_PASSIVE_ABILITY_OVERRIDE && !this.isPlayer()) { + if (Overrides.OPP_PASSIVE_ABILITY_OVERRIDE && this.isEnemy()) { return allAbilities[Overrides.OPP_PASSIVE_ABILITY_OVERRIDE]; } if (!isNullOrUndefined(this.customPokemonData.passive) && this.customPokemonData.passive !== -1) { @@ -2152,7 +2154,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // returns override if valid for current case if ( (Overrides.HAS_PASSIVE_ABILITY_OVERRIDE === false && this.isPlayer()) || - (Overrides.OPP_HAS_PASSIVE_ABILITY_OVERRIDE === false && !this.isPlayer()) + (Overrides.OPP_HAS_PASSIVE_ABILITY_OVERRIDE === false && this.isEnemy()) ) { return false; } @@ -2160,7 +2162,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ((Overrides.PASSIVE_ABILITY_OVERRIDE !== AbilityId.NONE || Overrides.HAS_PASSIVE_ABILITY_OVERRIDE) && this.isPlayer()) || ((Overrides.OPP_PASSIVE_ABILITY_OVERRIDE !== AbilityId.NONE || Overrides.OPP_HAS_PASSIVE_ABILITY_OVERRIDE) && - !this.isPlayer()) + this.isEnemy()) ) { return true; } @@ -2169,7 +2171,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const { currentBattle, gameMode } = globalScene; const waveIndex = currentBattle?.waveIndex; if ( - this instanceof EnemyPokemon && + this.isEnemy() && (currentBattle?.battleSpec === BattleSpec.FINAL_BOSS || gameMode.isEndlessMinorBoss(waveIndex) || gameMode.isEndlessMajorBoss(waveIndex)) @@ -2979,9 +2981,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { let fusionOverride: PokemonSpecies | undefined = undefined; - if (forStarter && this instanceof PlayerPokemon && Overrides.STARTER_FUSION_SPECIES_OVERRIDE) { + if (forStarter && this.isPlayer() && Overrides.STARTER_FUSION_SPECIES_OVERRIDE) { fusionOverride = getPokemonSpecies(Overrides.STARTER_FUSION_SPECIES_OVERRIDE); - } else if (this instanceof EnemyPokemon && Overrides.OPP_FUSION_SPECIES_OVERRIDE) { + } else if (this.isEnemy() && Overrides.OPP_FUSION_SPECIES_OVERRIDE) { fusionOverride = getPokemonSpecies(Overrides.OPP_FUSION_SPECIES_OVERRIDE); } @@ -3292,7 +3294,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.battleInfo.setX(this.battleInfo.x + (this.isPlayer() ? 150 : !this.isBoss() ? -150 : -198)); this.battleInfo.setVisible(true); if (this.isPlayer()) { - this.battleInfo.expMaskRect.x += 150; + // TODO: How do you get this to not require a private property access? + this["battleInfo"].expMaskRect.x += 150; } globalScene.tweens.add({ targets: [this.battleInfo, this.battleInfo.expMaskRect], @@ -3313,7 +3316,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ease: "Cubic.easeIn", onComplete: () => { if (this.isPlayer()) { - this.battleInfo.expMaskRect.x -= 150; + // TODO: How do you get this to not require a private property access? + this["battleInfo"].expMaskRect.x -= 150; } this.battleInfo.setVisible(false); this.battleInfo.setX(this.battleInfo.x - (this.isPlayer() ? 150 : !this.isBoss() ? -150 : -198)); @@ -3408,7 +3412,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @returns An array of Pokémon on the allied field. */ getAlliedField(): Pokemon[] { - return this instanceof PlayerPokemon ? globalScene.getPlayerField() : globalScene.getEnemyField(); + return this.isPlayer() ? globalScene.getPlayerField() : globalScene.getEnemyField(); } /** @@ -4260,7 +4264,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // Copy all stat stages for (const s of BATTLE_STATS) { const sourceStage = source.getStatStage(s); - if (this instanceof PlayerPokemon && sourceStage === 6) { + if (this.isPlayer() && sourceStage === 6) { globalScene.validateAchv(achvs.TRANSFER_MAX_STAT_STAGE); } this.setStatStage(s, sourceStage); @@ -5468,7 +5472,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { heldItem.stackCount--; if (heldItem.stackCount <= 0) { - globalScene.removeModifier(heldItem, !this.isPlayer()); + globalScene.removeModifier(heldItem, this.isEnemy()); } if (forBattle) { applyPostItemLostAbAttrs(PostItemLostAbAttr, this, false); @@ -5541,15 +5545,19 @@ export class PlayerPokemon extends Pokemon { this.battleInfo.initInfo(this); } - isPlayer(): boolean { + override isPlayer(): this is PlayerPokemon { return true; } - hasTrainer(): boolean { + override isEnemy(): this is EnemyPokemon { + return false; + } + + override hasTrainer(): boolean { return true; } - isBoss(): boolean { + override isBoss(): boolean { return false; } @@ -6494,15 +6502,19 @@ export class EnemyPokemon extends Pokemon { return [sortedBenefitScores[targetIndex][0]]; } - isPlayer() { + override isPlayer(): this is PlayerPokemon { return false; } - hasTrainer(): boolean { + override isEnemy(): this is EnemyPokemon { + return true; + } + + override hasTrainer(): boolean { return !!this.trainerSlot; } - isBoss(): boolean { + override isBoss(): boolean { return !!this.bossSegments; } diff --git a/src/messages.ts b/src/messages.ts index c29151a98b3..21473eb8361 100644 --- a/src/messages.ts +++ b/src/messages.ts @@ -16,7 +16,7 @@ export function getPokemonNameWithAffix(pokemon: Pokemon | undefined, useIllusio switch (globalScene.currentBattle.battleSpec) { case BattleSpec.DEFAULT: - return !pokemon.isPlayer() + return pokemon.isEnemy() ? pokemon.hasTrainer() ? i18next.t("battle:foePokemonWithAffix", { pokemonName: pokemon.getNameToRender(useIllusion), @@ -26,7 +26,7 @@ export function getPokemonNameWithAffix(pokemon: Pokemon | undefined, useIllusio }) : pokemon.getNameToRender(useIllusion); case BattleSpec.FINAL_BOSS: - return !pokemon.isPlayer() + return pokemon.isEnemy() ? i18next.t("battle:foePokemonWithAffix", { pokemonName: pokemon.getNameToRender(useIllusion) }) : pokemon.getNameToRender(useIllusion); default: diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index 7332d6b9462..fac0947c4e7 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -18,7 +18,8 @@ import { BattleSpec } from "#app/enums/battle-spec"; import { StatusEffect } from "#app/enums/status-effect"; import type { EnemyPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { HitResult, PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import { HitResult, PokemonMove } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { PokemonInstantReviveModifier } from "#app/modifier/modifier"; import { SwitchType } from "#enums/switch-type"; @@ -203,7 +204,7 @@ export class FaintPhase extends PokemonPhase { } pokemon.faintCry(() => { - if (pokemon instanceof PlayerPokemon) { + if (pokemon.isPlayer()) { pokemon.addFriendship(-FRIENDSHIP_LOSS_FROM_FAINT); } pokemon.hideInfo(); diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index d80fdc89e6f..e62f65b029b 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -887,7 +887,7 @@ export class MoveEffectPhase extends PokemonPhase { sourceBattlerIndex: user.getBattlerIndex(), }); - if (user.isPlayer() && !target.isPlayer()) { + if (user.isPlayer() && target.isEnemy()) { globalScene.applyModifiers(DamageMoneyRewardModifier, true, user, new NumberHolder(damage)); } diff --git a/src/phases/quiet-form-change-phase.ts b/src/phases/quiet-form-change-phase.ts index 9f6b5cb3361..f677dcc48df 100644 --- a/src/phases/quiet-form-change-phase.ts +++ b/src/phases/quiet-form-change-phase.ts @@ -6,7 +6,6 @@ import { getTypeRgb } from "#app/data/type"; import { BattleSpec } from "#app/enums/battle-spec"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import type Pokemon from "#app/field/pokemon"; -import { EnemyPokemon } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { BattlePhase } from "./battle-phase"; import type { MovePhase } from "./move-phase"; @@ -158,7 +157,7 @@ export class QuietFormChangePhase extends BattlePhase { end(): void { this.pokemon.findAndRemoveTags(t => t.tagType === BattlerTagType.AUTOTOMIZED); - if (globalScene?.currentBattle.battleSpec === BattleSpec.FINAL_BOSS && this.pokemon instanceof EnemyPokemon) { + if (globalScene?.currentBattle.battleSpec === BattleSpec.FINAL_BOSS && this.pokemon.isEnemy()) { globalScene.playBgm(); globalScene.unshiftPhase( new PokemonHealPhase(this.pokemon.getBattlerIndex(), this.pokemon.getMaxHp(), null, false, false, false, true), diff --git a/src/phases/switch-summon-phase.ts b/src/phases/switch-summon-phase.ts index d81ca6029c5..1872dae1f1f 100644 --- a/src/phases/switch-summon-phase.ts +++ b/src/phases/switch-summon-phase.ts @@ -139,7 +139,6 @@ export class SwitchSummonPhase extends SummonPhase { return; } - if (this.switchType === SwitchType.BATON_PASS) { // If switching via baton pass, update opposing tags coming from the prior pokemon (this.player ? globalScene.getEnemyField() : globalScene.getPlayerField()).forEach((enemyPokemon: Pokemon) => diff --git a/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts b/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts index f39ce753b10..786090aa8d6 100644 --- a/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts +++ b/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts @@ -8,7 +8,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vite import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { runMysteryEncounterToEnd } from "#test/mystery-encounter/encounter-test-utils"; import type BattleScene from "#app/battle-scene"; -import { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/field/pokemon"; import { AnOfferYouCantRefuseEncounter } from "#app/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; @@ -105,7 +105,7 @@ describe("An Offer You Can't Refuse - Mystery Encounter", () => { i18next.t("ability:intimidate.name"), ); expect(AnOfferYouCantRefuseEncounter.dialogueTokens?.moveOrAbility).toBe(i18next.t("ability:intimidate.name")); - expect(AnOfferYouCantRefuseEncounter.misc.pokemon instanceof PlayerPokemon).toBeTruthy(); + expect(AnOfferYouCantRefuseEncounter.misc.pokemon.isPlayer()).toBeTruthy(); expect(AnOfferYouCantRefuseEncounter.misc?.price?.toString()).toBe( AnOfferYouCantRefuseEncounter.dialogueTokens?.price, ); diff --git a/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts b/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts index 15fc3ffb00b..73632990dbf 100644 --- a/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts @@ -10,7 +10,6 @@ import { runSelectMysteryEncounterOption, } from "#test/mystery-encounter/encounter-test-utils"; import type BattleScene from "#app/battle-scene"; -import { PlayerPokemon } from "#app/field/pokemon"; import { HUMAN_TRANSITABLE_BIOMES } from "#app/data/mystery-encounters/mystery-encounters"; import { getSalesmanSpeciesOffer, @@ -99,7 +98,7 @@ describe("The Pokemon Salesman - Mystery Encounter", () => { expect(ThePokemonSalesmanEncounter.dialogueTokens?.purchasePokemon).toBeDefined(); expect(ThePokemonSalesmanEncounter.dialogueTokens?.price).toBeDefined(); - expect(ThePokemonSalesmanEncounter.misc.pokemon instanceof PlayerPokemon).toBeTruthy(); + expect(ThePokemonSalesmanEncounter.misc.pokemon.isPlayer()).toBeTruthy(); expect(ThePokemonSalesmanEncounter.misc?.price?.toString()).toBe(ThePokemonSalesmanEncounter.dialogueTokens?.price); expect(onInitResult).toBe(true); }); From 31140356733b1eda36546d1089165e24a7e0f150 Mon Sep 17 00:00:00 2001 From: Jimmybald1 <122436263+Jimmybald1@users.noreply.github.com> Date: Sun, 8 Jun 2025 02:54:33 +0200 Subject: [PATCH 215/262] [Balance] Update catch rates to Gen 9 (#5954) Updated catch rates to gen 9w Co-authored-by: Jimmybald1 <147992650+IBBCalc@users.noreply.github.com> --- src/data/pokemon-species.ts | 48 ++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index e946b526960..c5d798b5841 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -2022,9 +2022,9 @@ export function initSpecies() { new PokemonForm("Normal", "", PokemonType.GROUND, null, 3.5, 950, AbilityId.DROUGHT, AbilityId.NONE, AbilityId.NONE, 670, 100, 150, 140, 100, 90, 90, 3, 0, 335, false, null, true), new PokemonForm("Primal", "primal", PokemonType.GROUND, PokemonType.FIRE, 5, 999.7, AbilityId.DESOLATE_LAND, AbilityId.NONE, AbilityId.NONE, 770, 100, 180, 160, 150, 90, 90, 3, 0, 335), ), - new PokemonSpecies(SpeciesId.RAYQUAZA, 3, false, true, false, "Sky High Pokémon", PokemonType.DRAGON, PokemonType.FLYING, 7, 206.5, AbilityId.AIR_LOCK, AbilityId.NONE, AbilityId.NONE, 680, 105, 150, 90, 150, 90, 95, 45, 0, 340, GrowthRate.SLOW, null, false, true, - new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.FLYING, 7, 206.5, AbilityId.AIR_LOCK, AbilityId.NONE, AbilityId.NONE, 680, 105, 150, 90, 150, 90, 95, 45, 0, 340, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DRAGON, PokemonType.FLYING, 10.8, 392, AbilityId.DELTA_STREAM, AbilityId.NONE, AbilityId.NONE, 780, 105, 180, 100, 180, 100, 115, 45, 0, 340), + new PokemonSpecies(SpeciesId.RAYQUAZA, 3, false, true, false, "Sky High Pokémon", PokemonType.DRAGON, PokemonType.FLYING, 7, 206.5, AbilityId.AIR_LOCK, AbilityId.NONE, AbilityId.NONE, 680, 105, 150, 90, 150, 90, 95, 3, 0, 340, GrowthRate.SLOW, null, false, true, + new PokemonForm("Normal", "", PokemonType.DRAGON, PokemonType.FLYING, 7, 206.5, AbilityId.AIR_LOCK, AbilityId.NONE, AbilityId.NONE, 680, 105, 150, 90, 150, 90, 95, 3, 0, 340, false, null, true), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.DRAGON, PokemonType.FLYING, 10.8, 392, AbilityId.DELTA_STREAM, AbilityId.NONE, AbilityId.NONE, 780, 105, 180, 100, 180, 100, 115, 3, 0, 340), ), new PokemonSpecies(SpeciesId.JIRACHI, 3, false, false, true, "Wish Pokémon", PokemonType.STEEL, PokemonType.PSYCHIC, 0.3, 1.1, AbilityId.SERENE_GRACE, AbilityId.NONE, AbilityId.NONE, 600, 100, 100, 100, 100, 100, 100, 3, 100, 300, GrowthRate.SLOW, null, false), new PokemonSpecies(SpeciesId.DEOXYS, 3, false, false, true, "DNA Pokémon", PokemonType.PSYCHIC, null, 1.7, 60.8, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 600, 50, 150, 50, 150, 50, 150, 3, 0, 300, GrowthRate.SLOW, null, false, true, @@ -2270,10 +2270,10 @@ export function initSpecies() { new PokemonSpecies(SpeciesId.WHIMSICOTT, 5, false, false, false, "Windveiled Pokémon", PokemonType.GRASS, PokemonType.FAIRY, 0.7, 6.6, AbilityId.PRANKSTER, AbilityId.INFILTRATOR, AbilityId.CHLOROPHYLL, 480, 60, 67, 85, 77, 75, 116, 75, 50, 168, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(SpeciesId.PETILIL, 5, false, false, false, "Bulb Pokémon", PokemonType.GRASS, null, 0.5, 6.6, AbilityId.CHLOROPHYLL, AbilityId.OWN_TEMPO, AbilityId.LEAF_GUARD, 280, 45, 35, 50, 70, 50, 30, 190, 50, 56, GrowthRate.MEDIUM_FAST, 0, false), new PokemonSpecies(SpeciesId.LILLIGANT, 5, false, false, false, "Flowering Pokémon", PokemonType.GRASS, null, 1.1, 16.3, AbilityId.CHLOROPHYLL, AbilityId.OWN_TEMPO, AbilityId.LEAF_GUARD, 480, 70, 60, 75, 110, 75, 90, 75, 50, 168, GrowthRate.MEDIUM_FAST, 0, false), - new PokemonSpecies(SpeciesId.BASCULIN, 5, false, false, false, "Hostile Pokémon", PokemonType.WATER, null, 1, 18, AbilityId.RECKLESS, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 460, 70, 92, 65, 80, 55, 98, 25, 50, 161, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Red-Striped Form", "red-striped", PokemonType.WATER, null, 1, 18, AbilityId.RECKLESS, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 460, 70, 92, 65, 80, 55, 98, 25, 50, 161, false, null, true), - new PokemonForm("Blue-Striped Form", "blue-striped", PokemonType.WATER, null, 1, 18, AbilityId.ROCK_HEAD, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 460, 70, 92, 65, 80, 55, 98, 25, 50, 161, false, null, true), - new PokemonForm("White-Striped Form", "white-striped", PokemonType.WATER, null, 1, 18, AbilityId.RATTLED, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 460, 70, 92, 65, 80, 55, 98, 25, 50, 161, false, null, true), + new PokemonSpecies(SpeciesId.BASCULIN, 5, false, false, false, "Hostile Pokémon", PokemonType.WATER, null, 1, 18, AbilityId.RECKLESS, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 460, 70, 92, 65, 80, 55, 98, 190, 50, 161, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Red-Striped Form", "red-striped", PokemonType.WATER, null, 1, 18, AbilityId.RECKLESS, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 460, 70, 92, 65, 80, 55, 98, 190, 50, 161, false, null, true), + new PokemonForm("Blue-Striped Form", "blue-striped", PokemonType.WATER, null, 1, 18, AbilityId.ROCK_HEAD, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 460, 70, 92, 65, 80, 55, 98, 190, 50, 161, false, null, true), + new PokemonForm("White-Striped Form", "white-striped", PokemonType.WATER, null, 1, 18, AbilityId.RATTLED, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 460, 70, 92, 65, 80, 55, 98, 190, 50, 161, false, null, true), ), new PokemonSpecies(SpeciesId.SANDILE, 5, false, false, false, "Desert Croc Pokémon", PokemonType.GROUND, PokemonType.DARK, 0.7, 15.2, AbilityId.INTIMIDATE, AbilityId.MOXIE, AbilityId.ANGER_POINT, 292, 50, 72, 35, 35, 35, 65, 180, 50, 58, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(SpeciesId.KROKOROK, 5, false, false, false, "Desert Croc Pokémon", PokemonType.GROUND, PokemonType.DARK, 1, 33.4, AbilityId.INTIMIDATE, AbilityId.MOXIE, AbilityId.ANGER_POINT, 351, 60, 82, 45, 45, 45, 74, 90, 50, 123, GrowthRate.MEDIUM_SLOW, 50, false), @@ -2740,10 +2740,10 @@ export function initSpecies() { new PokemonSpecies(SpeciesId.TAPU_LELE, 7, true, false, false, "Land Spirit Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 1.2, 18.6, AbilityId.PSYCHIC_SURGE, AbilityId.NONE, AbilityId.TELEPATHY, 570, 70, 85, 75, 130, 115, 95, 3, 50, 285, GrowthRate.SLOW, null, false), new PokemonSpecies(SpeciesId.TAPU_BULU, 7, true, false, false, "Land Spirit Pokémon", PokemonType.GRASS, PokemonType.FAIRY, 1.9, 45.5, AbilityId.GRASSY_SURGE, AbilityId.NONE, AbilityId.TELEPATHY, 570, 70, 130, 115, 85, 95, 75, 3, 50, 285, GrowthRate.SLOW, null, false), new PokemonSpecies(SpeciesId.TAPU_FINI, 7, true, false, false, "Land Spirit Pokémon", PokemonType.WATER, PokemonType.FAIRY, 1.3, 21.2, AbilityId.MISTY_SURGE, AbilityId.NONE, AbilityId.TELEPATHY, 570, 70, 75, 115, 95, 130, 85, 3, 50, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.COSMOG, 7, true, false, false, "Nebula Pokémon", PokemonType.PSYCHIC, null, 0.2, 0.1, AbilityId.UNAWARE, AbilityId.NONE, AbilityId.NONE, 200, 43, 29, 31, 29, 31, 37, 45, 0, 40, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.COSMOEM, 7, true, false, false, "Protostar Pokémon", PokemonType.PSYCHIC, null, 0.1, 999.9, AbilityId.STURDY, AbilityId.NONE, AbilityId.NONE, 400, 43, 29, 131, 29, 131, 37, 45, 0, 140, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.SOLGALEO, 7, false, true, false, "Sunne Pokémon", PokemonType.PSYCHIC, PokemonType.STEEL, 3.4, 230, AbilityId.FULL_METAL_BODY, AbilityId.NONE, AbilityId.NONE, 680, 137, 137, 107, 113, 89, 97, 45, 0, 340, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.LUNALA, 7, false, true, false, "Moone Pokémon", PokemonType.PSYCHIC, PokemonType.GHOST, 4, 120, AbilityId.SHADOW_SHIELD, AbilityId.NONE, AbilityId.NONE, 680, 137, 113, 89, 137, 107, 97, 45, 0, 340, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.COSMOG, 7, true, false, false, "Nebula Pokémon", PokemonType.PSYCHIC, null, 0.2, 0.1, AbilityId.UNAWARE, AbilityId.NONE, AbilityId.NONE, 200, 43, 29, 31, 29, 31, 37, 3, 0, 40, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.COSMOEM, 7, true, false, false, "Protostar Pokémon", PokemonType.PSYCHIC, null, 0.1, 999.9, AbilityId.STURDY, AbilityId.NONE, AbilityId.NONE, 400, 43, 29, 131, 29, 131, 37, 3, 0, 140, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.SOLGALEO, 7, false, true, false, "Sunne Pokémon", PokemonType.PSYCHIC, PokemonType.STEEL, 3.4, 230, AbilityId.FULL_METAL_BODY, AbilityId.NONE, AbilityId.NONE, 680, 137, 137, 107, 113, 89, 97, 3, 0, 340, GrowthRate.SLOW, null, false), + new PokemonSpecies(SpeciesId.LUNALA, 7, false, true, false, "Moone Pokémon", PokemonType.PSYCHIC, PokemonType.GHOST, 4, 120, AbilityId.SHADOW_SHIELD, AbilityId.NONE, AbilityId.NONE, 680, 137, 113, 89, 137, 107, 97, 3, 0, 340, GrowthRate.SLOW, null, false), new PokemonSpecies(SpeciesId.NIHILEGO, 7, true, false, false, "Parasite Pokémon", PokemonType.ROCK, PokemonType.POISON, 1.2, 55.5, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 109, 53, 47, 127, 131, 103, 45, 0, 285, GrowthRate.SLOW, null, false), new PokemonSpecies(SpeciesId.BUZZWOLE, 7, true, false, false, "Swollen Pokémon", PokemonType.BUG, PokemonType.FIGHTING, 2.4, 333.6, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 107, 139, 139, 53, 53, 79, 45, 0, 285, GrowthRate.SLOW, null, false), new PokemonSpecies(SpeciesId.PHEROMOSA, 7, true, false, false, "Lissome Pokémon", PokemonType.BUG, PokemonType.FIGHTING, 1.8, 25, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 71, 137, 37, 137, 37, 151, 45, 0, 285, GrowthRate.SLOW, null, false), @@ -2751,11 +2751,11 @@ export function initSpecies() { new PokemonSpecies(SpeciesId.CELESTEELA, 7, true, false, false, "Launch Pokémon", PokemonType.STEEL, PokemonType.FLYING, 9.2, 999.9, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 97, 101, 103, 107, 101, 61, 45, 0, 285, GrowthRate.SLOW, null, false), new PokemonSpecies(SpeciesId.KARTANA, 7, true, false, false, "Drawn Sword Pokémon", PokemonType.GRASS, PokemonType.STEEL, 0.3, 0.1, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 59, 181, 131, 59, 31, 109, 45, 0, 285, GrowthRate.SLOW, null, false), new PokemonSpecies(SpeciesId.GUZZLORD, 7, true, false, false, "Junkivore Pokémon", PokemonType.DARK, PokemonType.DRAGON, 5.5, 888, AbilityId.BEAST_BOOST, AbilityId.NONE, AbilityId.NONE, 570, 223, 101, 53, 97, 53, 43, 45, 0, 285, GrowthRate.SLOW, null, false), - new PokemonSpecies(SpeciesId.NECROZMA, 7, false, true, false, "Prism Pokémon", PokemonType.PSYCHIC, null, 2.4, 230, AbilityId.PRISM_ARMOR, AbilityId.NONE, AbilityId.NONE, 600, 97, 107, 101, 127, 89, 79, 255, 0, 300, GrowthRate.SLOW, null, false, false, - new PokemonForm("Normal", "", PokemonType.PSYCHIC, null, 2.4, 230, AbilityId.PRISM_ARMOR, AbilityId.NONE, AbilityId.NONE, 600, 97, 107, 101, 127, 89, 79, 255, 0, 300, false, null, true), - new PokemonForm("Dusk Mane", "dusk-mane", PokemonType.PSYCHIC, PokemonType.STEEL, 3.8, 460, AbilityId.PRISM_ARMOR, AbilityId.NONE, AbilityId.NONE, 680, 97, 157, 127, 113, 109, 77, 255, 0, 340), - new PokemonForm("Dawn Wings", "dawn-wings", PokemonType.PSYCHIC, PokemonType.GHOST, 4.2, 350, AbilityId.PRISM_ARMOR, AbilityId.NONE, AbilityId.NONE, 680, 97, 113, 109, 157, 127, 77, 255, 0, 340), - new PokemonForm("Ultra", "ultra", PokemonType.PSYCHIC, PokemonType.DRAGON, 7.5, 230, AbilityId.NEUROFORCE, AbilityId.NONE, AbilityId.NONE, 754, 97, 167, 97, 167, 97, 129, 255, 0, 377), + new PokemonSpecies(SpeciesId.NECROZMA, 7, false, true, false, "Prism Pokémon", PokemonType.PSYCHIC, null, 2.4, 230, AbilityId.PRISM_ARMOR, AbilityId.NONE, AbilityId.NONE, 600, 97, 107, 101, 127, 89, 79, 3, 0, 300, GrowthRate.SLOW, null, false, false, + new PokemonForm("Normal", "", PokemonType.PSYCHIC, null, 2.4, 230, AbilityId.PRISM_ARMOR, AbilityId.NONE, AbilityId.NONE, 600, 97, 107, 101, 127, 89, 79, 3, 0, 300, false, null, true), + new PokemonForm("Dusk Mane", "dusk-mane", PokemonType.PSYCHIC, PokemonType.STEEL, 3.8, 460, AbilityId.PRISM_ARMOR, AbilityId.NONE, AbilityId.NONE, 680, 97, 157, 127, 113, 109, 77, 3, 0, 340), + new PokemonForm("Dawn Wings", "dawn-wings", PokemonType.PSYCHIC, PokemonType.GHOST, 4.2, 350, AbilityId.PRISM_ARMOR, AbilityId.NONE, AbilityId.NONE, 680, 97, 113, 109, 157, 127, 77, 3, 0, 340), + new PokemonForm("Ultra", "ultra", PokemonType.PSYCHIC, PokemonType.DRAGON, 7.5, 230, AbilityId.NEUROFORCE, AbilityId.NONE, AbilityId.NONE, 754, 97, 167, 97, 167, 97, 129, 3, 0, 377), ), new PokemonSpecies(SpeciesId.MAGEARNA, 7, false, false, true, "Artificial Pokémon", PokemonType.STEEL, PokemonType.FAIRY, 1, 80.5, AbilityId.SOUL_HEART, AbilityId.NONE, AbilityId.NONE, 600, 80, 95, 115, 130, 115, 65, 3, 0, 300, GrowthRate.SLOW, null, false, false, new PokemonForm("Normal", "", PokemonType.STEEL, PokemonType.FAIRY, 1, 80.5, AbilityId.SOUL_HEART, AbilityId.NONE, AbilityId.NONE, 600, 80, 95, 115, 130, 115, 65, 3, 0, 300, false, null, true), @@ -2964,15 +2964,15 @@ export function initSpecies() { new PokemonForm("Ice", "ice", PokemonType.PSYCHIC, PokemonType.ICE, 2.4, 809.1, AbilityId.AS_ONE_GLASTRIER, AbilityId.NONE, AbilityId.NONE, 680, 100, 165, 150, 85, 130, 50, 3, 100, 340), new PokemonForm("Shadow", "shadow", PokemonType.PSYCHIC, PokemonType.GHOST, 2.4, 53.6, AbilityId.AS_ONE_SPECTRIER, AbilityId.NONE, AbilityId.NONE, 680, 100, 85, 80, 165, 100, 150, 3, 100, 340), ), - new PokemonSpecies(SpeciesId.WYRDEER, 8, false, false, false, "Big Horn Pokémon", PokemonType.NORMAL, PokemonType.PSYCHIC, 1.8, 95.1, AbilityId.INTIMIDATE, AbilityId.FRISK, AbilityId.SAP_SIPPER, 525, 103, 105, 72, 105, 75, 65, 135, 50, 263, GrowthRate.SLOW, 50, false), - new PokemonSpecies(SpeciesId.KLEAVOR, 8, false, false, false, "Axe Pokémon", PokemonType.BUG, PokemonType.ROCK, 1.8, 89, AbilityId.SWARM, AbilityId.SHEER_FORCE, AbilityId.SHARPNESS, 500, 70, 135, 95, 45, 70, 85, 115, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.URSALUNA, 8, false, false, false, "Peat Pokémon", PokemonType.GROUND, PokemonType.NORMAL, 2.4, 290, AbilityId.GUTS, AbilityId.BULLETPROOF, AbilityId.UNNERVE, 550, 130, 140, 105, 45, 80, 50, 75, 50, 275, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(SpeciesId.BASCULEGION, 8, false, false, false, "Big Fish Pokémon", PokemonType.WATER, PokemonType.GHOST, 3, 110, AbilityId.SWIFT_SWIM, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 530, 120, 112, 65, 80, 75, 78, 135, 50, 265, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Male", "male", PokemonType.WATER, PokemonType.GHOST, 3, 110, AbilityId.SWIFT_SWIM, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 530, 120, 112, 65, 80, 75, 78, 135, 50, 265, false, "", true), - new PokemonForm("Female", "female", PokemonType.WATER, PokemonType.GHOST, 3, 110, AbilityId.SWIFT_SWIM, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 530, 120, 92, 65, 100, 75, 78, 135, 50, 265, false, null, true), + new PokemonSpecies(SpeciesId.WYRDEER, 8, false, false, false, "Big Horn Pokémon", PokemonType.NORMAL, PokemonType.PSYCHIC, 1.8, 95.1, AbilityId.INTIMIDATE, AbilityId.FRISK, AbilityId.SAP_SIPPER, 525, 103, 105, 72, 105, 75, 65, 45, 50, 263, GrowthRate.SLOW, 50, false), + new PokemonSpecies(SpeciesId.KLEAVOR, 8, false, false, false, "Axe Pokémon", PokemonType.BUG, PokemonType.ROCK, 1.8, 89, AbilityId.SWARM, AbilityId.SHEER_FORCE, AbilityId.SHARPNESS, 500, 70, 135, 95, 45, 70, 85, 15, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.URSALUNA, 8, false, false, false, "Peat Pokémon", PokemonType.GROUND, PokemonType.NORMAL, 2.4, 290, AbilityId.GUTS, AbilityId.BULLETPROOF, AbilityId.UNNERVE, 550, 130, 140, 105, 45, 80, 50, 20, 50, 275, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.BASCULEGION, 8, false, false, false, "Big Fish Pokémon", PokemonType.WATER, PokemonType.GHOST, 3, 110, AbilityId.SWIFT_SWIM, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 530, 120, 112, 65, 80, 75, 78, 45, 50, 265, GrowthRate.MEDIUM_FAST, 50, false, false, + new PokemonForm("Male", "male", PokemonType.WATER, PokemonType.GHOST, 3, 110, AbilityId.SWIFT_SWIM, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 530, 120, 112, 65, 80, 75, 78, 45, 50, 265, false, "", true), + new PokemonForm("Female", "female", PokemonType.WATER, PokemonType.GHOST, 3, 110, AbilityId.SWIFT_SWIM, AbilityId.ADAPTABILITY, AbilityId.MOLD_BREAKER, 530, 120, 92, 65, 100, 75, 78, 45, 50, 265, false, null, true), ), - new PokemonSpecies(SpeciesId.SNEASLER, 8, false, false, false, "Free Climb Pokémon", PokemonType.FIGHTING, PokemonType.POISON, 1.3, 43, AbilityId.PRESSURE, AbilityId.UNBURDEN, AbilityId.POISON_TOUCH, 510, 80, 130, 60, 40, 80, 120, 135, 50, 102, GrowthRate.MEDIUM_SLOW, 50, false), - new PokemonSpecies(SpeciesId.OVERQWIL, 8, false, false, false, "Pin Cluster Pokémon", PokemonType.DARK, PokemonType.POISON, 2.5, 60.5, AbilityId.POISON_POINT, AbilityId.SWIFT_SWIM, AbilityId.INTIMIDATE, 510, 85, 115, 95, 65, 65, 85, 135, 50, 179, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(SpeciesId.SNEASLER, 8, false, false, false, "Free Climb Pokémon", PokemonType.FIGHTING, PokemonType.POISON, 1.3, 43, AbilityId.PRESSURE, AbilityId.UNBURDEN, AbilityId.POISON_TOUCH, 510, 80, 130, 60, 40, 80, 120, 20, 50, 102, GrowthRate.MEDIUM_SLOW, 50, false), + new PokemonSpecies(SpeciesId.OVERQWIL, 8, false, false, false, "Pin Cluster Pokémon", PokemonType.DARK, PokemonType.POISON, 2.5, 60.5, AbilityId.POISON_POINT, AbilityId.SWIFT_SWIM, AbilityId.INTIMIDATE, 510, 85, 115, 95, 65, 65, 85, 45, 50, 179, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(SpeciesId.ENAMORUS, 8, true, false, false, "Love-Hate Pokémon", PokemonType.FAIRY, PokemonType.FLYING, 1.6, 48, AbilityId.CUTE_CHARM, AbilityId.NONE, AbilityId.CONTRARY, 580, 74, 115, 70, 135, 80, 106, 3, 50, 116, GrowthRate.SLOW, 0, false, true, new PokemonForm("Incarnate Forme", "incarnate", PokemonType.FAIRY, PokemonType.FLYING, 1.6, 48, AbilityId.CUTE_CHARM, AbilityId.NONE, AbilityId.CONTRARY, 580, 74, 115, 70, 135, 80, 106, 3, 50, 116, false, null, true), new PokemonForm("Therian Forme", "therian", PokemonType.FAIRY, PokemonType.FLYING, 1.6, 48, AbilityId.OVERCOAT, AbilityId.NONE, AbilityId.OVERCOAT, 580, 74, 115, 110, 135, 100, 46, 3, 50, 116), From 93745f14b76309e8d34887b868a6fd561e28f10d Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Sat, 7 Jun 2025 19:59:30 -0500 Subject: [PATCH 216/262] [Refactor] Decouple phase system from battle-scene (#5953) * Move phase logic into its own class * Move ts ignore comment --- src/battle-scene.ts | 353 ++---------------- src/battle.ts | 2 +- src/data/abilities/ability.ts | 122 +++--- src/data/arena-tag.ts | 108 +++--- src/data/battler-tags.ts | 246 ++++++------ src/data/berry.ts | 16 +- src/data/moves/move.ts | 224 +++++------ .../encounters/a-trainers-test-encounter.ts | 2 +- .../encounters/absolute-avarice-encounter.ts | 2 +- .../an-offer-you-cant-refuse-encounter.ts | 2 +- .../encounters/berries-abound-encounter.ts | 2 +- .../encounters/bug-type-superfan-encounter.ts | 2 +- .../encounters/dancing-lessons-encounter.ts | 4 +- .../encounters/dark-deal-encounter.ts | 2 +- .../encounters/delibirdy-encounter.ts | 12 +- .../encounters/fiery-fallout-encounter.ts | 4 +- .../encounters/fight-or-flight-encounter.ts | 4 +- .../encounters/fun-and-games-encounter.ts | 4 +- .../encounters/mysterious-chest-encounter.ts | 4 +- .../encounters/safari-zone-encounter.ts | 8 +- .../slumbering-snorlax-encounter.ts | 2 +- .../teleporting-hijinks-encounter.ts | 4 +- .../the-expert-pokemon-breeder-encounter.ts | 4 +- .../encounters/the-strong-stuff-encounter.ts | 2 +- .../the-winstrate-challenge-encounter.ts | 6 +- .../encounters/uncommon-breed-encounter.ts | 2 +- .../utils/encounter-dialogue-utils.ts | 2 +- .../utils/encounter-phase-utils.ts | 52 +-- .../utils/encounter-pokemon-utils.ts | 2 +- src/field/arena.ts | 24 +- src/field/pokemon.ts | 30 +- src/modifier/modifier.ts | 30 +- src/phase-manager.ts | 311 +++++++++++++++ src/phase.ts | 2 +- src/phases/attempt-capture-phase.ts | 2 +- src/phases/attempt-run-phase.ts | 10 +- src/phases/battle-end-phase.ts | 8 +- src/phases/berry-phase.ts | 4 +- src/phases/check-status-effect-phase.ts | 2 +- src/phases/check-switch-phase.ts | 6 +- src/phases/command-phase.ts | 8 +- src/phases/egg-hatch-phase.ts | 2 +- src/phases/egg-lapse-phase.ts | 8 +- src/phases/encounter-phase.ts | 28 +- src/phases/evolution-phase.ts | 8 +- src/phases/exp-phase.ts | 2 +- src/phases/faint-phase.ts | 16 +- src/phases/form-change-phase.ts | 2 +- src/phases/game-over-phase.ts | 42 ++- src/phases/learn-move-phase.ts | 4 +- src/phases/level-up-phase.ts | 4 +- src/phases/login-phase.ts | 6 +- src/phases/message-phase.ts | 2 +- src/phases/move-charge-phase.ts | 4 +- src/phases/move-effect-phase.ts | 18 +- src/phases/move-phase.ts | 22 +- src/phases/mystery-encounter-phases.ts | 50 +-- src/phases/new-battle-phase.ts | 6 +- src/phases/obtain-status-effect-phase.ts | 4 +- src/phases/pokemon-heal-phase.ts | 8 +- src/phases/pokemon-transform-phase.ts | 2 +- src/phases/post-game-over-phase.ts | 2 +- src/phases/post-turn-status-effect-phase.ts | 2 +- src/phases/quiet-form-change-phase.ts | 6 +- src/phases/revival-blessing-phase.ts | 10 +- src/phases/select-biome-phase.ts | 4 +- src/phases/select-modifier-phase.ts | 4 +- src/phases/select-starter-phase.ts | 4 +- src/phases/select-target-phase.ts | 4 +- src/phases/show-ability-phase.ts | 4 +- src/phases/show-party-exp-bar-phase.ts | 4 +- src/phases/stat-stage-change-phase.ts | 14 +- src/phases/summon-phase.ts | 8 +- src/phases/switch-phase.ts | 8 +- src/phases/switch-summon-phase.ts | 2 +- src/phases/tera-phase.ts | 2 +- src/phases/title-phase.ts | 22 +- src/phases/trainer-victory-phase.ts | 10 +- src/phases/turn-end-phase.ts | 4 +- src/phases/turn-init-phase.ts | 18 +- src/phases/turn-start-phase.ts | 28 +- src/phases/unavailable-phase.ts | 2 +- src/phases/victory-phase.ts | 34 +- src/phases/weather-effect-phase.ts | 2 +- src/system/game-data.ts | 24 +- src/ui/ball-ui-handler.ts | 2 +- src/ui/challenges-select-ui-handler.ts | 10 +- src/ui/command-ui-handler.ts | 18 +- src/ui/egg-hatch-scene-handler.ts | 2 +- src/ui/egg-summary-ui-handler.ts | 2 +- src/ui/fight-ui-handler.ts | 12 +- src/ui/menu-ui-handler.ts | 2 +- src/ui/mystery-encounter-ui-handler.ts | 4 +- src/ui/party-ui-handler.ts | 6 +- src/ui/pokedex-page-ui-handler.ts | 2 +- src/ui/starter-select-ui-handler.ts | 10 +- test/abilities/cud_chew.test.ts | 4 +- test/abilities/dancer.test.ts | 8 +- test/abilities/desolate-land.test.ts | 2 +- test/abilities/disguise.test.ts | 2 +- test/abilities/honey_gather.test.ts | 2 +- test/abilities/imposter.test.ts | 4 +- test/abilities/mycelium_might.test.ts | 6 +- test/abilities/neutralizing_gas.test.ts | 2 +- test/abilities/no_guard.test.ts | 2 +- test/abilities/shield_dust.test.ts | 2 +- test/abilities/speed_boost.test.ts | 4 +- test/abilities/stall.test.ts | 6 +- test/battle/battle-order.test.ts | 10 +- test/battle/battle.test.ts | 12 +- test/battle/special_battle.test.ts | 18 +- test/battlerTags/octolock.test.ts | 4 +- test/battlerTags/stockpiling.test.ts | 32 +- test/battlerTags/substitute.test.ts | 31 +- test/escape-calculations.test.ts | 16 +- test/items/lock_capsule.test.ts | 4 +- test/moves/after_you.test.ts | 2 +- test/moves/dynamax_cannon.test.ts | 16 +- test/moves/focus_punch.test.ts | 4 +- test/moves/fusion_flare_bolt.test.ts | 36 +- test/moves/instruct.test.ts | 4 +- test/moves/round.test.ts | 4 +- test/moves/shell_trap.test.ts | 8 +- test/moves/substitute.test.ts | 2 +- test/moves/transform.test.ts | 4 +- test/moves/whirlwind.test.ts | 2 +- .../mystery-encounter/encounter-test-utils.ts | 12 +- .../a-trainers-test-encounter.test.ts | 8 +- .../absolute-avarice-encounter.test.ts | 6 +- .../berries-abound-encounter.test.ts | 12 +- .../bug-type-superfan-encounter.test.ts | 36 +- .../clowning-around-encounter.test.ts | 8 +- .../dancing-lessons-encounter.test.ts | 12 +- .../encounters/delibirdy-encounter.test.ts | 12 +- .../department-store-sale-encounter.test.ts | 8 +- .../fiery-fallout-encounter.test.ts | 12 +- .../fight-or-flight-encounter.test.ts | 10 +- .../fun-and-games-encounter.test.ts | 38 +- .../global-trade-system-encounter.test.ts | 2 +- .../encounters/lost-at-sea-encounter.test.ts | 8 +- .../mysterious-challengers-encounter.test.ts | 12 +- .../encounters/part-timer-encounter.test.ts | 4 +- .../encounters/safari-zone.test.ts | 4 +- .../teleporting-hijinks-encounter.test.ts | 14 +- .../the-expert-breeder-encounter.test.ts | 12 +- .../the-pokemon-salesman-encounter.test.ts | 4 +- .../the-strong-stuff-encounter.test.ts | 6 +- .../the-winstrate-challenge-encounter.test.ts | 14 +- .../trash-to-treasure-encounter.test.ts | 8 +- .../uncommon-breed-encounter.test.ts | 20 +- .../encounters/weird-dream-encounter.test.ts | 8 +- .../mystery-encounter-utils.test.ts | 4 +- .../mystery-encounter.test.ts | 2 +- test/phases/mystery-encounter-phase.test.ts | 6 +- test/phases/phases.test.ts | 6 +- test/phases/select-modifier-phase.test.ts | 12 +- test/testUtils/gameManager.ts | 22 +- test/testUtils/helpers/challengeModeHelper.ts | 2 +- test/testUtils/helpers/classicModeHelper.ts | 2 +- test/testUtils/helpers/moveHelper.ts | 27 +- test/testUtils/helpers/reloadHelper.ts | 4 +- test/testUtils/phaseInterceptor.ts | 12 +- test/ui/starter-select.test.ts | 18 +- 163 files changed, 1465 insertions(+), 1361 deletions(-) create mode 100644 src/phase-manager.ts diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 762e11ec9f5..23601910e4d 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -144,7 +144,6 @@ import { battleSpecDialogue } from "#app/data/dialogue"; import { LoadingScene } from "#app/loading-scene"; import { LevelCapPhase } from "#app/phases/level-cap-phase"; import { LoginPhase } from "#app/phases/login-phase"; -import { MessagePhase } from "#app/phases/message-phase"; import type { MovePhase } from "#app/phases/move-phase"; import { NewBiomeEncounterPhase } from "#app/phases/new-biome-encounter-phase"; import { NextEncounterPhase } from "#app/phases/next-encounter-phase"; @@ -155,7 +154,6 @@ import { ShowTrainerPhase } from "#app/phases/show-trainer-phase"; import { SummonPhase } from "#app/phases/summon-phase"; import { TitlePhase } from "#app/phases/title-phase"; import { ToggleDoublePositionPhase } from "#app/phases/toggle-double-position-phase"; -import { TurnInitPhase } from "#app/phases/turn-init-phase"; import { ShopCursorTarget } from "#app/enums/shop-cursor-target"; import MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { @@ -178,13 +176,12 @@ import { BattlerTagType } from "#enums/battler-tag-type"; import { FRIENDSHIP_GAIN_FROM_BATTLE } from "#app/data/balance/starters"; import { StatusEffect } from "#enums/status-effect"; import { initGlobalScene } from "#app/global-scene"; -import { ShowAbilityPhase } from "#app/phases/show-ability-phase"; -import { HideAbilityPhase } from "#app/phases/hide-ability-phase"; import { expSpriteKeys } from "./sprites/sprite-keys"; import { hasExpSprite } from "./sprites/sprite-utils"; import { timedEventManager } from "./global-event-manager"; import { starterColors } from "./global-vars/starter-colors"; import { startingWave } from "./starting-wave"; +import { PhaseManager } from "./phase-manager"; const DEBUG_RNG = false; @@ -297,18 +294,8 @@ export default class BattleScene extends SceneBase { public gameData: GameData; public sessionSlotId: number; - /** PhaseQueue: dequeue/remove the first element to get the next phase */ - public phaseQueue: Phase[]; - public conditionalQueue: Array<[() => boolean, Phase]>; - /** PhaseQueuePrepend: is a temp storage of what will be added to PhaseQueue */ - private phaseQueuePrepend: Phase[]; - - /** overrides default of inserting phases to end of phaseQueuePrepend array, useful or inserting Phases "out of order" */ - private phaseQueuePrependSpliceIndex: number; - private nextCommandPhaseQueue: Phase[]; - - private currentPhase: Phase | null; - private standbyPhase: Phase | null; + /** Manager for the phases active in the battle scene */ + public readonly phaseManager: PhaseManager; public field: Phaser.GameObjects.Container; public fieldUI: Phaser.GameObjects.Container; public charSprite: CharSprite; @@ -396,11 +383,7 @@ export default class BattleScene extends SceneBase { constructor() { super("battle"); - this.phaseQueue = []; - this.phaseQueuePrepend = []; - this.conditionalQueue = []; - this.phaseQueuePrependSpliceIndex = -1; - this.nextCommandPhaseQueue = []; + this.phaseManager = new PhaseManager(); this.eventManager = new TimedEventManager(); this.updateGameInfo(); initGlobalScene(this); @@ -716,10 +699,10 @@ export default class BattleScene extends SceneBase { ).then(() => loadMoveAnimAssets(defaultMoves, true)), this.initStarterColors(), ]).then(() => { - this.pushPhase(new LoginPhase()); - this.pushPhase(new TitlePhase()); + this.phaseManager.pushPhase(new LoginPhase()); + this.phaseManager.pushPhase(new TitlePhase()); - this.shiftPhase(); + this.phaseManager.shiftPhase(); }); } @@ -899,7 +882,7 @@ export default class BattleScene extends SceneBase { if (allyPokemon?.isActive(true)) { let targetingMovePhase: MovePhase; do { - targetingMovePhase = this.findPhase( + targetingMovePhase = this.phaseManager.findPhase( mp => mp.is("MovePhase") && mp.targets.length === 1 && @@ -1277,7 +1260,7 @@ export default class BattleScene extends SceneBase { duration: 250, ease: "Sine.easeInOut", onComplete: () => { - this.clearPhaseQueue(); + this.phaseManager.clearPhaseQueue(); this.ui.freeUIData(); this.uiContainer.remove(this.ui, true); @@ -1450,7 +1433,7 @@ export default class BattleScene extends SceneBase { } if (lastBattle?.double && !newDouble) { - this.tryRemovePhase((p: Phase) => p.is("SwitchPhase")); + this.phaseManager.tryRemovePhase((p: Phase) => p.is("SwitchPhase")); for (const p of this.getPlayerField()) { p.lapseTag(BattlerTagType.COMMANDED); } @@ -1492,7 +1475,7 @@ export default class BattleScene extends SceneBase { playerField.forEach((pokemon, p) => { if (pokemon.isOnField()) { - this.pushPhase(new ReturnPhase(p)); + this.phaseManager.pushPhase(new ReturnPhase(p)); } }); @@ -1509,7 +1492,7 @@ export default class BattleScene extends SceneBase { } if (!this.trainer.visible) { - this.pushPhase(new ShowTrainerPhase()); + this.phaseManager.pushPhase(new ShowTrainerPhase()); } } @@ -1518,13 +1501,13 @@ export default class BattleScene extends SceneBase { } if (!this.gameMode.hasRandomBiomes && !isNewBiome) { - this.pushPhase(new NextEncounterPhase()); + this.phaseManager.pushPhase(new NextEncounterPhase()); } else { - this.pushPhase(new NewBiomeEncounterPhase()); + this.phaseManager.pushPhase(new NewBiomeEncounterPhase()); const newMaxExpLevel = this.getMaxExpLevel(); if (newMaxExpLevel > maxExpLevel) { - this.pushPhase(new LevelCapPhase()); + this.phaseManager.pushPhase(new LevelCapPhase()); } } } @@ -1588,7 +1571,9 @@ export default class BattleScene extends SceneBase { return 0; } - const isEggPhase: boolean = ["EggLapsePhase", "EggHatchPhase"].includes(this.getCurrentPhase()?.phaseName ?? ""); + const isEggPhase: boolean = ["EggLapsePhase", "EggHatchPhase"].includes( + this.phaseManager.getCurrentPhase()?.phaseName ?? "", + ); if ( // Give trainers with specialty types an appropriately-typed form for Wormadam, Rotom, Arceus, Oricorio, Silvally, or Paldean Tauros. @@ -2615,286 +2600,6 @@ export default class BattleScene extends SceneBase { } } - /* Phase Functions */ - getCurrentPhase(): Phase | null { - return this.currentPhase; - } - - getStandbyPhase(): Phase | null { - return this.standbyPhase; - } - - /** - * Adds a phase to the conditional queue and ensures it is executed only when the specified condition is met. - * - * This method allows deferring the execution of a phase until certain conditions are met, which is useful for handling - * situations like abilities and entry hazards that depend on specific game states. - * - * @param {Phase} phase - The phase to be added to the conditional queue. - * @param {() => boolean} condition - A function that returns a boolean indicating whether the phase should be executed. - * - */ - pushConditionalPhase(phase: Phase, condition: () => boolean): void { - this.conditionalQueue.push([condition, phase]); - } - - /** - * Adds a phase to nextCommandPhaseQueue, as long as boolean passed in is false - * @param phase {@linkcode Phase} the phase to add - * @param defer boolean on which queue to add to, defaults to false, and adds to phaseQueue - */ - pushPhase(phase: Phase, defer = false): void { - (!defer ? this.phaseQueue : this.nextCommandPhaseQueue).push(phase); - } - - /** - * Adds Phase(s) to the end of phaseQueuePrepend, or at phaseQueuePrependSpliceIndex - * @param phases {@linkcode Phase} the phase(s) to add - */ - unshiftPhase(...phases: Phase[]): void { - if (this.phaseQueuePrependSpliceIndex === -1) { - this.phaseQueuePrepend.push(...phases); - } else { - this.phaseQueuePrepend.splice(this.phaseQueuePrependSpliceIndex, 0, ...phases); - } - } - - /** - * Clears the phaseQueue - */ - clearPhaseQueue(): void { - this.phaseQueue.splice(0, this.phaseQueue.length); - } - - /** - * Clears all phase-related stuff, including all phase queues, the current and standby phases, and a splice index - */ - clearAllPhases(): void { - for (const queue of [this.phaseQueue, this.phaseQueuePrepend, this.conditionalQueue, this.nextCommandPhaseQueue]) { - queue.splice(0, queue.length); - } - this.currentPhase = null; - this.standbyPhase = null; - this.clearPhaseQueueSplice(); - } - - /** - * Used by function unshiftPhase(), sets index to start inserting at current length instead of the end of the array, useful if phaseQueuePrepend gets longer with Phases - */ - setPhaseQueueSplice(): void { - this.phaseQueuePrependSpliceIndex = this.phaseQueuePrepend.length; - } - - /** - * Resets phaseQueuePrependSpliceIndex to -1, implies that calls to unshiftPhase will insert at end of phaseQueuePrepend - */ - clearPhaseQueueSplice(): void { - this.phaseQueuePrependSpliceIndex = -1; - } - - /** - * Is called by each Phase implementations "end()" by default - * We dump everything from phaseQueuePrepend to the start of of phaseQueue - * then removes first Phase and starts it - */ - shiftPhase(): void { - if (this.standbyPhase) { - this.currentPhase = this.standbyPhase; - this.standbyPhase = null; - return; - } - - if (this.phaseQueuePrependSpliceIndex > -1) { - this.clearPhaseQueueSplice(); - } - if (this.phaseQueuePrepend.length) { - while (this.phaseQueuePrepend.length) { - const poppedPhase = this.phaseQueuePrepend.pop(); - if (poppedPhase) { - this.phaseQueue.unshift(poppedPhase); - } - } - } - if (!this.phaseQueue.length) { - this.populatePhaseQueue(); - // Clear the conditionalQueue if there are no phases left in the phaseQueue - this.conditionalQueue = []; - } - - this.currentPhase = this.phaseQueue.shift() ?? null; - - // Check if there are any conditional phases queued - if (this.conditionalQueue?.length) { - // Retrieve the first conditional phase from the queue - const conditionalPhase = this.conditionalQueue.shift(); - // Evaluate the condition associated with the phase - if (conditionalPhase?.[0]()) { - // If the condition is met, add the phase to the phase queue - this.pushPhase(conditionalPhase[1]); - } else if (conditionalPhase) { - // If the condition is not met, re-add the phase back to the front of the conditional queue - this.conditionalQueue.unshift(conditionalPhase); - } else { - console.warn("condition phase is undefined/null!", conditionalPhase); - } - } - - if (this.currentPhase) { - console.log(`%cStart Phase ${this.currentPhase.constructor.name}`, "color:green;"); - this.currentPhase.start(); - } - } - - overridePhase(phase: Phase): boolean { - if (this.standbyPhase) { - return false; - } - - this.standbyPhase = this.currentPhase; - this.currentPhase = phase; - console.log(`%cStart Phase ${phase.constructor.name}`, "color:green;"); - phase.start(); - - return true; - } - - /** - * Find a specific {@linkcode Phase} in the phase queue. - * - * @param phaseFilter filter function to use to find the wanted phase - * @returns the found phase or undefined if none found - */ - findPhase

      (phaseFilter: (phase: P) => boolean): P | undefined { - return this.phaseQueue.find(phaseFilter) as P; - } - - tryReplacePhase(phaseFilter: (phase: Phase) => boolean, phase: Phase): boolean { - const phaseIndex = this.phaseQueue.findIndex(phaseFilter); - if (phaseIndex > -1) { - this.phaseQueue[phaseIndex] = phase; - return true; - } - return false; - } - - tryRemovePhase(phaseFilter: (phase: Phase) => boolean): boolean { - const phaseIndex = this.phaseQueue.findIndex(phaseFilter); - if (phaseIndex > -1) { - this.phaseQueue.splice(phaseIndex, 1); - return true; - } - return false; - } - - /** - * Will search for a specific phase in {@linkcode phaseQueuePrepend} via filter, and remove the first result if a match is found. - * @param phaseFilter filter function - */ - tryRemoveUnshiftedPhase(phaseFilter: (phase: Phase) => boolean): boolean { - const phaseIndex = this.phaseQueuePrepend.findIndex(phaseFilter); - if (phaseIndex > -1) { - this.phaseQueuePrepend.splice(phaseIndex, 1); - return true; - } - return false; - } - - /** - * Tries to add the input phase to index before target phase in the phaseQueue, else simply calls unshiftPhase() - * @param phase {@linkcode Phase} the phase to be added - * @param targetPhase {@linkcode Phase} the type of phase to search for in phaseQueue - * @returns boolean if a targetPhase was found and added - */ - prependToPhase(phase: Phase | Phase[], targetPhase: Constructor): boolean { - if (!Array.isArray(phase)) { - phase = [phase]; - } - const targetIndex = this.phaseQueue.findIndex(ph => ph instanceof targetPhase); - - if (targetIndex !== -1) { - this.phaseQueue.splice(targetIndex, 0, ...phase); - return true; - } - this.unshiftPhase(...phase); - return false; - } - - /** - * Tries to add the input phase(s) to index after target phase in the {@linkcode phaseQueue}, else simply calls {@linkcode unshiftPhase()} - * @param phase {@linkcode Phase} the phase(s) to be added - * @param targetPhase {@linkcode Phase} the type of phase to search for in {@linkcode phaseQueue} - * @returns `true` if a `targetPhase` was found to append to - */ - appendToPhase(phase: Phase | Phase[], targetPhase: Constructor): boolean { - if (!Array.isArray(phase)) { - phase = [phase]; - } - const targetIndex = this.phaseQueue.findIndex(ph => ph instanceof targetPhase); - - if (targetIndex !== -1 && this.phaseQueue.length > targetIndex) { - this.phaseQueue.splice(targetIndex + 1, 0, ...phase); - return true; - } - this.unshiftPhase(...phase); - return false; - } - - /** - * Adds a MessagePhase, either to PhaseQueuePrepend or nextCommandPhaseQueue - * @param message string for MessagePhase - * @param callbackDelay optional param for MessagePhase constructor - * @param prompt optional param for MessagePhase constructor - * @param promptDelay optional param for MessagePhase constructor - * @param defer boolean for which queue to add it to, false -> add to PhaseQueuePrepend, true -> nextCommandPhaseQueue - */ - queueMessage( - message: string, - callbackDelay?: number | null, - prompt?: boolean | null, - promptDelay?: number | null, - defer?: boolean | null, - ) { - const phase = new MessagePhase(message, callbackDelay, prompt, promptDelay); - if (!defer) { - // adds to the end of PhaseQueuePrepend - this.unshiftPhase(phase); - } else { - //remember that pushPhase adds it to nextCommandPhaseQueue - this.pushPhase(phase); - } - } - - /** - * Queues an ability bar flyout phase - * @param pokemon The pokemon who has the ability - * @param passive Whether the ability is a passive - * @param show Whether to show or hide the bar - */ - public queueAbilityDisplay(pokemon: Pokemon, passive: boolean, show: boolean): void { - this.unshiftPhase(show ? new ShowAbilityPhase(pokemon.getBattlerIndex(), passive) : new HideAbilityPhase()); - this.clearPhaseQueueSplice(); - } - - /** - * Hides the ability bar if it is currently visible - */ - public hideAbilityBar(): void { - if (this.abilityBar.isVisible()) { - this.unshiftPhase(new HideAbilityPhase()); - } - } - - /** - * Moves everything from nextCommandPhaseQueue to phaseQueue (keeping order) - */ - populatePhaseQueue(): void { - if (this.nextCommandPhaseQueue.length) { - this.phaseQueue.push(...this.nextCommandPhaseQueue); - this.nextCommandPhaseQueue.splice(0, this.nextCommandPhaseQueue.length); - } - this.phaseQueue.push(new TurnInitPhase()); - } - addMoney(amount: number): void { this.money = Math.min(this.money + amount, Number.MAX_SAFE_INTEGER); this.updateMoneyText(); @@ -2942,7 +2647,7 @@ export default class BattleScene extends SceneBase { } } else if (!virtual) { const defaultModifierType = getDefaultModifierTypeForTier(modifier.type.tier); - this.queueMessage( + this.phaseManager.queueMessage( i18next.t("battle:itemStackFull", { fullItemName: modifier.type.name, itemName: defaultModifierType.name, @@ -3499,11 +3204,11 @@ export default class BattleScene extends SceneBase { phase = new QuietFormChangePhase(pokemon, matchingFormChange); } if (pokemon.isPlayer() && !matchingFormChange.quiet && modal) { - this.overridePhase(phase); + this.phaseManager.overridePhase(phase); } else if (delayed) { - this.pushPhase(phase); + this.phaseManager.pushPhase(phase); } else { - this.unshiftPhase(phase); + this.phaseManager.unshiftPhase(phase); } return true; } @@ -3520,9 +3225,9 @@ export default class BattleScene extends SceneBase { ): boolean { const phase: Phase = new PokemonAnimPhase(battleAnimType, pokemon, fieldAssets); if (delayed) { - this.pushPhase(phase); + this.phaseManager.pushPhase(phase); } else { - this.unshiftPhase(phase); + this.phaseManager.unshiftPhase(phase); } return true; } @@ -3630,19 +3335,19 @@ export default class BattleScene extends SceneBase { this.currentBattle.double = true; const availablePartyMembers = this.getPlayerParty().filter(p => p.isAllowedInBattle()); if (availablePartyMembers.length > 1) { - this.pushPhase(new ToggleDoublePositionPhase(true)); + this.phaseManager.pushPhase(new ToggleDoublePositionPhase(true)); if (!availablePartyMembers[1].isOnField()) { - this.pushPhase(new SummonPhase(1)); + this.phaseManager.pushPhase(new SummonPhase(1)); } } - this.shiftPhase(); + this.phaseManager.shiftPhase(); }, ); return; } - this.shiftPhase(); + this.phaseManager.shiftPhase(); } /** @@ -3754,7 +3459,7 @@ export default class BattleScene extends SceneBase { if (exp) { const partyMemberIndex = party.indexOf(expPartyMembers[pm]); - this.unshiftPhase( + this.phaseManager.unshiftPhase( expPartyMembers[pm].isOnField() ? new ExpPhase(partyMemberIndex, exp) : new ShowPartyExpBarPhase(partyMemberIndex, exp), diff --git a/src/battle.ts b/src/battle.ts index 8e63a680c06..dbfed57ae41 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -205,7 +205,7 @@ export default class Battle { const message = i18next.t("battle:moneyPickedUp", { moneyAmount: formattedMoneyAmount, }); - globalScene.queueMessage(message, undefined, true); + globalScene.phaseManager.queueMessage(message, undefined, true); globalScene.currentBattle.moneyScattered = 0; } diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 4d307b2ce6f..e680a12f9fe 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -159,7 +159,7 @@ export class PostTeraFormChangeStatChangeAbAttr extends AbAttr { statStageChangePhases.push(new StatStageChangePhase(pokemon.getBattlerIndex(), true, this.stats, this.stages)); for (const statStageChangePhase of statStageChangePhases) { - globalScene.unshiftPhase(statStageChangePhase); + globalScene.phaseManager.unshiftPhase(statStageChangePhase); } } } @@ -410,7 +410,7 @@ export class TypeImmunityHealAbAttr extends TypeImmunityAbAttr { super.applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); if (!pokemon.isFullHp() && !simulated) { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; - globalScene.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), + globalScene.phaseManager.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), toDmgValue(pokemon.getMaxHp() / 4), i18next.t("abilityTriggers:typeImmunityHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }), true)); cancelled.value = true; // Suppresses "No Effect" message } @@ -436,7 +436,7 @@ class TypeImmunityStatStageChangeAbAttr extends TypeImmunityAbAttr { super.applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); cancelled.value = true; // Suppresses "No Effect" message if (!simulated) { - globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ this.stat ], this.stages)); + globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ this.stat ], this.stages)); } } } @@ -648,7 +648,7 @@ export class MoveImmunityStatStageChangeAbAttr extends MoveImmunityAbAttr { override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { super.applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); - globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ this.stat ], this.stages)); + globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ this.stat ], this.stages)); } } /** @@ -675,7 +675,7 @@ export class ReverseDrainAbAttr extends PostDefendAbAttr { */ override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { if (!simulated) { - globalScene.queueMessage(i18next.t("abilityTriggers:reverseDrain", { pokemonNameWithAffix: getPokemonNameWithAffix(attacker) })); + globalScene.phaseManager.queueMessage(i18next.t("abilityTriggers:reverseDrain", { pokemonNameWithAffix: getPokemonNameWithAffix(attacker) })); } } } @@ -710,10 +710,10 @@ export class PostDefendStatStageChangeAbAttr extends PostDefendAbAttr { const ally = pokemon.getAlly(); const otherPokemon = !isNullOrUndefined(ally) ? pokemon.getOpponents().concat([ ally ]) : pokemon.getOpponents(); for (const other of otherPokemon) { - globalScene.unshiftPhase(new StatStageChangePhase((other).getBattlerIndex(), false, [ this.stat ], this.stages)); + globalScene.phaseManager.unshiftPhase(new StatStageChangePhase((other).getBattlerIndex(), false, [ this.stat ], this.stages)); } } else { - globalScene.unshiftPhase(new StatStageChangePhase((this.selfTarget ? pokemon : attacker).getBattlerIndex(), this.selfTarget, [ this.stat ], this.stages)); + globalScene.phaseManager.unshiftPhase(new StatStageChangePhase((this.selfTarget ? pokemon : attacker).getBattlerIndex(), this.selfTarget, [ this.stat ], this.stages)); } } } @@ -744,7 +744,7 @@ export class PostDefendHpGatedStatStageChangeAbAttr extends PostDefendAbAttr { override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { if (!simulated) { - globalScene.unshiftPhase(new StatStageChangePhase((this.selfTarget ? pokemon : attacker).getBattlerIndex(), true, this.stats, this.stages)); + globalScene.phaseManager.unshiftPhase(new StatStageChangePhase((this.selfTarget ? pokemon : attacker).getBattlerIndex(), true, this.stats, this.stages)); } } } @@ -790,7 +790,7 @@ export class PostDefendApplyBattlerTagAbAttr extends PostDefendAbAttr { override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { if (!pokemon.getTag(this.tagType) && !simulated) { pokemon.addTag(this.tagType, undefined, undefined, pokemon.id); - globalScene.queueMessage(i18next.t("abilityTriggers:windPowerCharged", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: move.name })); + globalScene.phaseManager.queueMessage(i18next.t("abilityTriggers:windPowerCharged", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: move.name })); } } } @@ -915,7 +915,7 @@ export class PostDefendCritStatStageChangeAbAttr extends PostDefendAbAttr { override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { if (!simulated) { - globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ this.stat ], this.stages)); + globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ this.stat ], this.stages)); } } @@ -1099,7 +1099,7 @@ export class PostStatStageChangeStatStageChangeAbAttr extends PostStatStageChang override applyPostStatStageChange(pokemon: Pokemon, simulated: boolean, statStagesChanged: BattleStat[], stagesChanged: number, selfTarget: boolean, args: any[]): void { if (!simulated) { - globalScene.unshiftPhase(new StatStageChangePhase((pokemon).getBattlerIndex(), true, this.statsToChange, this.stages)); + globalScene.phaseManager.unshiftPhase(new StatStageChangePhase((pokemon).getBattlerIndex(), true, this.statsToChange, this.stages)); } } } @@ -1765,7 +1765,7 @@ export class PostAttackStealHeldItemAbAttr extends PostAttackAbAttr { this.stolenItem = heldItems[pokemon.randBattleSeedInt(heldItems.length)]; } if (globalScene.tryTransferHeldItemModifier(this.stolenItem, pokemon, false)) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("abilityTriggers:postAttackStealHeldItem", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), defenderName: defender.name, @@ -1892,7 +1892,7 @@ export class PostDefendStealHeldItemAbAttr extends PostDefendAbAttr { this.stolenItem = heldItems[pokemon.randBattleSeedInt(heldItems.length)]; } if (globalScene.tryTransferHeldItemModifier(this.stolenItem, pokemon, false)) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("abilityTriggers:postDefendStealHeldItem", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), attackerName: attacker.name, @@ -1999,7 +1999,7 @@ class PostVictoryStatStageChangeAbAttr extends PostVictoryAbAttr { override applyPostVictory(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { const stat = typeof this.stat === "function" ? this.stat(pokemon) : this.stat; if (!simulated) { - globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ stat ], this.stages)); + globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ stat ], this.stages)); } } } @@ -2047,7 +2047,7 @@ export class PostKnockOutStatStageChangeAbAttr extends PostKnockOutAbAttr { override applyPostKnockOut(pokemon: Pokemon, passive: boolean, simulated: boolean, knockedOut: Pokemon, args: any[]): void { const stat = typeof this.stat === "function" ? this.stat(pokemon) : this.stat; if (!simulated) { - globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ stat ], this.stages)); + globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ stat ], this.stages)); } } } @@ -2064,7 +2064,7 @@ export class CopyFaintedAllyAbilityAbAttr extends PostKnockOutAbAttr { override applyPostKnockOut(pokemon: Pokemon, passive: boolean, simulated: boolean, knockedOut: Pokemon, args: any[]): void { if (!simulated) { pokemon.setTempAbility(knockedOut.getAbility()); - globalScene.queueMessage(i18next.t("abilityTriggers:copyFaintedAllyAbility", { pokemonNameWithAffix: getPokemonNameWithAffix(knockedOut), abilityName: allAbilities[knockedOut.getAbility().id].name })); + globalScene.phaseManager.queueMessage(i18next.t("abilityTriggers:copyFaintedAllyAbility", { pokemonNameWithAffix: getPokemonNameWithAffix(knockedOut), abilityName: allAbilities[knockedOut.getAbility().id].name })); } } } @@ -2130,7 +2130,7 @@ export class PostIntimidateStatStageChangeAbAttr extends AbAttr { override apply(pokemon: Pokemon, passive: boolean, simulated:boolean, cancelled: BooleanHolder, args: any[]): void { if (!simulated) { - globalScene.pushPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), false, this.stats, this.stages)); + globalScene.phaseManager.pushPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), false, this.stats, this.stages)); } cancelled.value = this.overwrites; } @@ -2240,7 +2240,7 @@ export class PostSummonMessageAbAttr extends PostSummonAbAttr { override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { if (!simulated) { - globalScene.queueMessage(this.messageFunc(pokemon)); + globalScene.phaseManager.queueMessage(this.messageFunc(pokemon)); } } } @@ -2257,7 +2257,7 @@ export class PostSummonUnnamedMessageAbAttr extends PostSummonAbAttr { override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { if (!simulated) { - globalScene.queueMessage(this.message); + globalScene.phaseManager.queueMessage(this.message); } } } @@ -2332,7 +2332,7 @@ export class PostSummonStatStageChangeAbAttr extends PostSummonAbAttr { if (this.selfTarget) { // we unshift the StatStageChangePhase to put it right after the showAbility and not at the end of the // phase list (which could be after CommandPhase for example) - globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, this.stats, this.stages)); + globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, this.stats, this.stages)); } else { for (const opponent of pokemon.getOpponents()) { const cancelled = new BooleanHolder(false); @@ -2345,7 +2345,7 @@ export class PostSummonStatStageChangeAbAttr extends PostSummonAbAttr { } } if (!cancelled.value) { - globalScene.unshiftPhase(new StatStageChangePhase(opponent.getBattlerIndex(), false, this.stats, this.stages)); + globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(opponent.getBattlerIndex(), false, this.stats, this.stages)); } } } @@ -2370,7 +2370,7 @@ export class PostSummonAllyHealAbAttr extends PostSummonAbAttr { override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { const target = pokemon.getAlly(); if (!simulated && !isNullOrUndefined(target)) { - globalScene.unshiftPhase(new PokemonHealPhase(target.getBattlerIndex(), + globalScene.phaseManager.unshiftPhase(new PokemonHealPhase(target.getBattlerIndex(), toDmgValue(pokemon.getMaxHp() / this.healRatio), i18next.t("abilityTriggers:postSummonAllyHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(target), pokemonName: pokemon.name }), true, !this.showAnim)); } } @@ -2400,7 +2400,7 @@ export class PostSummonClearAllyStatStagesAbAttr extends PostSummonAbAttr { target.setStatStage(s, 0); } - globalScene.queueMessage(i18next.t("abilityTriggers:postSummonClearAllyStats", { pokemonNameWithAffix: getPokemonNameWithAffix(target) })); + globalScene.phaseManager.queueMessage(i18next.t("abilityTriggers:postSummonClearAllyStats", { pokemonNameWithAffix: getPokemonNameWithAffix(target) })); } } } @@ -2448,7 +2448,7 @@ export class DownloadAbAttr extends PostSummonAbAttr { } if (!simulated) { - globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), false, this.stats, 1)); + globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), false, this.stats, 1)); } } } @@ -2635,7 +2635,7 @@ export class PostSummonUserFieldRemoveStatusEffectAbAttr extends PostSummonAbAtt if (!simulated) { for (const pokemon of allowedParty) { if (pokemon.status && this.statusEffect.includes(pokemon.status.effect)) { - globalScene.queueMessage(getStatusEffectHealText(pokemon.status.effect, getPokemonNameWithAffix(pokemon))); + globalScene.phaseManager.queueMessage(getStatusEffectHealText(pokemon.status.effect, getPokemonNameWithAffix(pokemon))); pokemon.resetStatus(false); pokemon.updateInfo(); } @@ -2725,7 +2725,7 @@ export class PostSummonTransformAbAttr extends PostSummonAbAttr { override applyPostSummon(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { const target = this.getTarget(pokemon.getOpponents()); - globalScene.unshiftPhase(new PokemonTransformPhase(pokemon.getBattlerIndex(), target.getBattlerIndex(), true)); + globalScene.phaseManager.unshiftPhase(new PokemonTransformPhase(pokemon.getBattlerIndex(), target.getBattlerIndex(), true)); } } @@ -2820,7 +2820,7 @@ export class CommanderAbAttr extends AbAttr { // Apply boosts from this effect to the ally Dondozo pokemon.getAlly()?.addTag(BattlerTagType.COMMANDED, 0, MoveId.NONE, pokemon.id); // Cancel the source Pokemon's next move (if a move is queued) - globalScene.tryRemovePhase((phase) => phase.is("MovePhase") && phase.pokemon === pokemon); + globalScene.phaseManager.tryRemovePhase((phase) => phase.is("MovePhase") && phase.pokemon === pokemon); } } } @@ -3076,7 +3076,7 @@ export class ReflectStatStageChangeAbAttr extends PreStatStageChangeAbAttr { const stages = args[1]; this.reflectedStat = stat; if (!simulated) { - globalScene.unshiftPhase(new StatStageChangePhase(attacker.getBattlerIndex(), false, [ stat ], stages, true, false, true, null, true)); + globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(attacker.getBattlerIndex(), false, [ stat ], stages, true, false, true, null, true)); } cancelled.value = true; } @@ -3768,7 +3768,7 @@ export class ForewarnAbAttr extends PostSummonAbAttr { } } if (!simulated) { - globalScene.queueMessage(i18next.t("abilityTriggers:forewarn", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: maxMove })); + globalScene.phaseManager.queueMessage(i18next.t("abilityTriggers:forewarn", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: maxMove })); } } } @@ -3781,7 +3781,7 @@ export class FriskAbAttr extends PostSummonAbAttr { override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { if (!simulated) { for (const opponent of pokemon.getOpponents()) { - globalScene.queueMessage(i18next.t("abilityTriggers:frisk", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), opponentName: opponent.name, opponentAbilityName: opponent.getAbility().name })); + globalScene.phaseManager.queueMessage(i18next.t("abilityTriggers:frisk", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), opponentName: opponent.name, opponentAbilityName: opponent.getAbility().name })); setAbilityRevealed(opponent); } } @@ -3913,7 +3913,7 @@ export class PostWeatherLapseHealAbAttr extends PostWeatherLapseAbAttr { override applyPostWeatherLapse(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: Weather, args: any[]): void { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; if (!simulated) { - globalScene.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), + globalScene.phaseManager.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), toDmgValue(pokemon.getMaxHp() / (16 / this.healFactor)), i18next.t("abilityTriggers:postWeatherLapseHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }), true)); } } @@ -3935,7 +3935,7 @@ export class PostWeatherLapseDamageAbAttr extends PostWeatherLapseAbAttr { override applyPostWeatherLapse(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: Weather, args: any[]): void { if (!simulated) { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; - globalScene.queueMessage(i18next.t("abilityTriggers:postWeatherLapseDamage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName })); + globalScene.phaseManager.queueMessage(i18next.t("abilityTriggers:postWeatherLapseDamage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName })); pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / (16 / this.damageFactor)), { result: HitResult.INDIRECT }); } } @@ -4015,7 +4015,7 @@ export class PostTurnStatusHealAbAttr extends PostTurnAbAttr { override applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { if (!simulated) { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; - globalScene.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), + globalScene.phaseManager.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), toDmgValue(pokemon.getMaxHp() / 8), i18next.t("abilityTriggers:poisonHeal", { pokemonName: getPokemonNameWithAffix(pokemon), abilityName }), true)); } } @@ -4047,7 +4047,7 @@ export class PostTurnResetStatusAbAttr extends PostTurnAbAttr { override applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { if (!simulated && this.target?.status) { - globalScene.queueMessage(getStatusEffectHealText(this.target.status?.effect, getPokemonNameWithAffix(this.target))); + globalScene.phaseManager.queueMessage(getStatusEffectHealText(this.target.status?.effect, getPokemonNameWithAffix(this.target))); this.target.resetStatus(false); this.target.updateInfo(); } @@ -4132,7 +4132,7 @@ export class PostTurnRestoreBerryAbAttr extends PostTurnAbAttr { } globalScene.updateModifiers(pokemon.isPlayer()); - globalScene.queueMessage(i18next.t("abilityTriggers:postTurnLootCreateEatenBerry", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), berryName: chosenBerry.name })); + globalScene.phaseManager.queueMessage(i18next.t("abilityTriggers:postTurnLootCreateEatenBerry", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), berryName: chosenBerry.name })); return true; } } @@ -4162,7 +4162,7 @@ export class RepeatBerryNextTurnAbAttr extends PostTurnAbAttr { * @param _args - N/A */ override apply(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _cancelled: BooleanHolder | null, _args: any[]): void { - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new CommonAnimPhase(pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.USE_ITEM), ); @@ -4226,11 +4226,11 @@ export class MoodyAbAttr extends PostTurnAbAttr { if (canRaise.length > 0) { const raisedStat = canRaise[pokemon.randBattleSeedInt(canRaise.length)]; canLower = canRaise.filter(s => s !== raisedStat); - globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ raisedStat ], 2)); + globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ raisedStat ], 2)); } if (canLower.length > 0) { const loweredStat = canLower[pokemon.randBattleSeedInt(canLower.length)]; - globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ loweredStat ], -1)); + globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ loweredStat ], -1)); } } } @@ -4247,7 +4247,7 @@ export class SpeedBoostAbAttr extends PostTurnAbAttr { } override applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { - globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ Stat.SPD ], 1)); + globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ Stat.SPD ], 1)); } } @@ -4259,7 +4259,7 @@ export class PostTurnHealAbAttr extends PostTurnAbAttr { override applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { if (!simulated) { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; - globalScene.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), + globalScene.phaseManager.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), toDmgValue(pokemon.getMaxHp() / 16), i18next.t("abilityTriggers:postTurnHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }), true)); } } @@ -4305,7 +4305,7 @@ export class PostTurnHurtIfSleepingAbAttr extends PostTurnAbAttr { if ((opp.status?.effect === StatusEffect.SLEEP || opp.hasAbility(AbilityId.COMATOSE)) && !opp.hasAbilityWithAttr(BlockNonDirectDamageAbAttr) && !opp.switchOutStatus) { if (!simulated) { opp.damageAndUpdate(toDmgValue(opp.getMaxHp() / 8), { result: HitResult.INDIRECT }); - globalScene.queueMessage(i18next.t("abilityTriggers:badDreams", { pokemonName: getPokemonNameWithAffix(opp) })); + globalScene.phaseManager.queueMessage(i18next.t("abilityTriggers:badDreams", { pokemonName: getPokemonNameWithAffix(opp) })); } } } @@ -4336,7 +4336,7 @@ export class FetchBallAbAttr extends PostTurnAbAttr { const lastUsed = globalScene.currentBattle.lastUsedPokeball; globalScene.pokeballCounts[lastUsed!]++; globalScene.currentBattle.lastUsedPokeball = null; - globalScene.queueMessage(i18next.t("abilityTriggers:fetchBall", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), pokeballName: getPokeballName(lastUsed!) })); + globalScene.phaseManager.queueMessage(i18next.t("abilityTriggers:fetchBall", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), pokeballName: getPokeballName(lastUsed!) })); } } @@ -4442,10 +4442,10 @@ export class PostDancingMoveAbAttr extends PostMoveUsedAbAttr { // If the move is an AttackMove or a StatusMove the Dancer must replicate the move on the source of the Dance if (move.getMove() instanceof AttackMove || move.getMove() instanceof StatusMove) { const target = this.getTarget(dancer, source, targets); - globalScene.unshiftPhase(new MovePhase(dancer, target, move, true, true)); + globalScene.phaseManager.unshiftPhase(new MovePhase(dancer, target, move, true, true)); } else if (move.getMove() instanceof SelfStatusMove) { // If the move is a SelfStatusMove (ie. Swords Dance) the Dancer should replicate it on itself - globalScene.unshiftPhase(new MovePhase(dancer, [ dancer.getBattlerIndex() ], move, true, true)); + globalScene.phaseManager.unshiftPhase(new MovePhase(dancer, [ dancer.getBattlerIndex() ], move, true, true)); } } } @@ -4525,7 +4525,7 @@ export class StatStageChangeCopyAbAttr extends AbAttr { args: any[], ): void { if (!simulated) { - globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, (args[0] as BattleStat[]), (args[1] as number), true, false, false)); + globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, (args[0] as BattleStat[]), (args[1] as number), true, false, false)); } } } @@ -4606,7 +4606,7 @@ export class HealFromBerryUseAbAttr extends AbAttr { } const { name: abilityName } = passive ? pokemon.getPassiveAbility() : pokemon.getAbility(); - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new PokemonHealPhase( pokemon.getBattlerIndex(), toDmgValue(pokemon.getMaxHp() * this.healPercent), @@ -4739,7 +4739,7 @@ export class PostBattleLootAbAttr extends PostBattleAbAttr { if (globalScene.tryTransferHeldItemModifier(this.randItem, pokemon, true, 1, true, undefined, false)) { postBattleLoot.splice(postBattleLoot.indexOf(this.randItem), 1); - globalScene.queueMessage(i18next.t("abilityTriggers:postBattleLoot", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), itemName: this.randItem.type.name })); + globalScene.phaseManager.queueMessage(i18next.t("abilityTriggers:postBattleLoot", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), itemName: this.randItem.type.name })); } this.randItem = undefined; } @@ -4927,7 +4927,7 @@ export class FlinchStatStageChangeAbAttr extends FlinchEffectAbAttr { override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { if (!simulated) { - globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, this.stats, this.stages)); + globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, this.stats, this.stages)); } } } @@ -5495,16 +5495,16 @@ function applySingleAbAttrs( continue; } - globalScene.setPhaseQueueSplice(); + globalScene.phaseManager.setPhaseQueueSplice(); if (attr.showAbility && !simulated) { - globalScene.queueAbilityDisplay(pokemon, passive, true); + globalScene.phaseManager.queueAbilityDisplay(pokemon, passive, true); abShown = true; } const message = attr.getTriggerMessage(pokemon, ability.name, args); if (message) { if (!simulated) { - globalScene.queueMessage(message); + globalScene.phaseManager.queueMessage(message); } messages.push(message); } @@ -5512,14 +5512,14 @@ function applySingleAbAttrs( applyFunc(attr, passive); if (abShown) { - globalScene.queueAbilityDisplay(pokemon, passive, false); + globalScene.phaseManager.queueAbilityDisplay(pokemon, passive, false); } if (!simulated) { pokemon.waveData.abilitiesApplied.add(ability.id); } - globalScene.clearPhaseQueueSplice(); + globalScene.phaseManager.clearPhaseQueueSplice(); } } @@ -5546,7 +5546,7 @@ class ForceSwitchOutHelper { if (switchOutTarget.hp > 0) { switchOutTarget.leaveField(this.switchType === SwitchType.SWITCH); - globalScene.prependToPhase(new SwitchPhase(this.switchType, switchOutTarget.getFieldIndex(), true, true), MoveEndPhase); + globalScene.phaseManager.prependToPhase(new SwitchPhase(this.switchType, switchOutTarget.getFieldIndex(), true, true), MoveEndPhase); return true; } /** @@ -5560,7 +5560,7 @@ class ForceSwitchOutHelper { if (switchOutTarget.hp > 0) { switchOutTarget.leaveField(this.switchType === SwitchType.SWITCH); const summonIndex = (globalScene.currentBattle.trainer ? globalScene.currentBattle.trainer.getNextSummonIndex((switchOutTarget as EnemyPokemon).trainerSlot) : 0); - globalScene.prependToPhase(new SwitchSummonPhase(this.switchType, switchOutTarget.getFieldIndex(), summonIndex, false, false), MoveEndPhase); + globalScene.phaseManager.prependToPhase(new SwitchSummonPhase(this.switchType, switchOutTarget.getFieldIndex(), summonIndex, false, false), MoveEndPhase); return true; } /** @@ -5576,7 +5576,7 @@ class ForceSwitchOutHelper { if (switchOutTarget.hp > 0) { switchOutTarget.leaveField(false); - globalScene.queueMessage(i18next.t("moveTriggers:fled", { pokemonName: getPokemonNameWithAffix(switchOutTarget) }), null, true, 500); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:fled", { pokemonName: getPokemonNameWithAffix(switchOutTarget) }), null, true, 500); if (globalScene.currentBattle.double && !isNullOrUndefined(allyPokemon)) { globalScene.redirectPokemonMoves(switchOutTarget, allyPokemon); } @@ -5586,13 +5586,13 @@ class ForceSwitchOutHelper { globalScene.clearEnemyHeldItemModifiers(); if (switchOutTarget.hp) { - globalScene.pushPhase(new BattleEndPhase(false)); + globalScene.phaseManager.pushPhase(new BattleEndPhase(false)); if (globalScene.gameMode.hasRandomBiomes || globalScene.isNewBiome()) { - globalScene.pushPhase(new SelectBiomePhase()); + globalScene.phaseManager.pushPhase(new SelectBiomePhase()); } - globalScene.pushPhase(new NewBattlePhase()); + globalScene.phaseManager.pushPhase(new NewBattlePhase()); } } } @@ -5792,7 +5792,7 @@ function applyAbAttrsInternal( for (const passive of [ false, true ]) { if (pokemon) { applySingleAbAttrs(pokemon, passive, attrType, applyFunc, successFunc, args, gainedMidTurn, simulated, messages); - globalScene.clearPhaseQueueSplice(); + globalScene.phaseManager.clearPhaseQueueSplice(); } } } @@ -6870,7 +6870,7 @@ export function initAbilities() { .ignorable(), new Ability(AbilityId.ANALYTIC, 5) .attr(MovePowerBoostAbAttr, (user, target, move) => { - const movePhase = globalScene.findPhase((phase) => phase.is("MovePhase") && phase.pokemon.id !== user?.id); + const movePhase = globalScene.phaseManager.findPhase((phase) => phase.is("MovePhase") && phase.pokemon.id !== user?.id); return isNullOrUndefined(movePhase); }, 1.3), new Ability(AbilityId.ILLUSION, 5) diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index 0254aab37e1..70fceb17c49 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -54,7 +54,7 @@ export abstract class ArenaTag { onRemove(_arena: Arena, quiet = false): void { if (!quiet) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t( `arenaTag:arenaOnRemove${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`, { moveName: this.getMoveName() }, @@ -126,7 +126,7 @@ export class MistTag extends ArenaTag { const source = globalScene.getPokemonById(this.sourceId); if (!quiet && source) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("arenaTag:mistOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(source), }), @@ -161,7 +161,7 @@ export class MistTag extends ArenaTag { cancelled.value = true; if (!simulated) { - globalScene.queueMessage(i18next.t("arenaTag:mistApply")); + globalScene.phaseManager.queueMessage(i18next.t("arenaTag:mistApply")); } return true; @@ -239,7 +239,7 @@ class ReflectTag extends WeakenMoveScreenTag { onAdd(_arena: Arena, quiet = false): void { if (!quiet) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t( `arenaTag:reflectOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`, ), @@ -259,7 +259,7 @@ class LightScreenTag extends WeakenMoveScreenTag { onAdd(_arena: Arena, quiet = false): void { if (!quiet) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t( `arenaTag:lightScreenOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`, ), @@ -282,7 +282,7 @@ class AuroraVeilTag extends WeakenMoveScreenTag { onAdd(_arena: Arena, quiet = false): void { if (!quiet) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t( `arenaTag:auroraVeilOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`, ), @@ -318,7 +318,7 @@ export class ConditionalProtectTag extends ArenaTag { } onAdd(_arena: Arena): void { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t( `arenaTag:conditionalProtectOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`, { moveName: super.getMoveName() }, @@ -355,7 +355,7 @@ export class ConditionalProtectTag extends ArenaTag { isProtected.value = true; if (!simulated) { new CommonBattleAnim(CommonAnim.PROTECT, defender).play(); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("arenaTag:conditionalProtectApply", { moveName: super.getMoveName(), pokemonNameWithAffix: getPokemonNameWithAffix(defender), @@ -381,7 +381,7 @@ export class ConditionalProtectTag extends ArenaTag { */ const QuickGuardConditionFunc: ProtectConditionFunc = (_arena, moveId) => { const move = allMoves[moveId]; - const effectPhase = globalScene.getCurrentPhase(); + const effectPhase = globalScene.phaseManager.getCurrentPhase(); if (effectPhase?.is("MoveEffectPhase")) { const attacker = effectPhase.getUserPokemon(); @@ -458,7 +458,7 @@ class MatBlockTag extends ConditionalProtectTag { if (this.sourceId) { const source = globalScene.getPokemonById(this.sourceId); if (source) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("arenaTag:matBlockOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(source), }), @@ -517,7 +517,7 @@ export class NoCritTag extends ArenaTag { /** Queues a message upon adding this effect to the field */ onAdd(_arena: Arena): void { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t(`arenaTag:noCritOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : "Enemy"}`, { moveName: this.getMoveName(), }), @@ -527,7 +527,7 @@ export class NoCritTag extends ArenaTag { /** Queues a message upon removing this effect from the field */ onRemove(_arena: Arena): void { const source = globalScene.getPokemonById(this.sourceId!); // TODO: is this bang correct? - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("arenaTag:noCritOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(source ?? undefined), moveName: this.getMoveName(), @@ -567,8 +567,10 @@ class WishTag extends ArenaTag { onRemove(_arena: Arena): void { const target = globalScene.getField()[this.battlerIndex]; if (target?.isActive(true)) { - globalScene.queueMessage(this.triggerMessage); - globalScene.unshiftPhase(new PokemonHealPhase(target.getBattlerIndex(), this.healHp, null, true, false)); + globalScene.phaseManager.queueMessage(this.triggerMessage); + globalScene.phaseManager.unshiftPhase( + new PokemonHealPhase(target.getBattlerIndex(), this.healHp, null, true, false), + ); } } } @@ -621,11 +623,11 @@ class MudSportTag extends WeakenMoveTypeTag { } onAdd(_arena: Arena): void { - globalScene.queueMessage(i18next.t("arenaTag:mudSportOnAdd")); + globalScene.phaseManager.queueMessage(i18next.t("arenaTag:mudSportOnAdd")); } onRemove(_arena: Arena): void { - globalScene.queueMessage(i18next.t("arenaTag:mudSportOnRemove")); + globalScene.phaseManager.queueMessage(i18next.t("arenaTag:mudSportOnRemove")); } } @@ -639,11 +641,11 @@ class WaterSportTag extends WeakenMoveTypeTag { } onAdd(_arena: Arena): void { - globalScene.queueMessage(i18next.t("arenaTag:waterSportOnAdd")); + globalScene.phaseManager.queueMessage(i18next.t("arenaTag:waterSportOnAdd")); } onRemove(_arena: Arena): void { - globalScene.queueMessage(i18next.t("arenaTag:waterSportOnRemove")); + globalScene.phaseManager.queueMessage(i18next.t("arenaTag:waterSportOnRemove")); } } @@ -659,7 +661,7 @@ export class IonDelugeTag extends ArenaTag { /** Queues an on-add message */ onAdd(_arena: Arena): void { - globalScene.queueMessage(i18next.t("arenaTag:plasmaFistsOnAdd")); + globalScene.phaseManager.queueMessage(i18next.t("arenaTag:plasmaFistsOnAdd")); } onRemove(_arena: Arena): void {} // Removes default on-remove message @@ -758,7 +760,7 @@ class SpikesTag extends ArenaTrapTag { const source = this.sourceId ? globalScene.getPokemonById(this.sourceId) : null; if (!quiet && source) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("arenaTag:spikesOnAdd", { moveName: this.getMoveName(), opponentDesc: source.getOpponentDescriptor(), @@ -781,7 +783,7 @@ class SpikesTag extends ArenaTrapTag { const damageHpRatio = 1 / (10 - 2 * this.layers); const damage = toDmgValue(pokemon.getMaxHp() * damageHpRatio); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("arenaTag:spikesActivateTrap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -811,7 +813,7 @@ class ToxicSpikesTag extends ArenaTrapTag { const source = this.sourceId ? globalScene.getPokemonById(this.sourceId) : null; if (!quiet && source) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("arenaTag:toxicSpikesOnAdd", { moveName: this.getMoveName(), opponentDesc: source.getOpponentDescriptor(), @@ -834,7 +836,7 @@ class ToxicSpikesTag extends ArenaTrapTag { if (pokemon.isOfType(PokemonType.POISON)) { this.neutralized = true; if (globalScene.arena.removeTag(this.tagType)) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("arenaTag:toxicSpikesActivateTrapPoison", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: this.getMoveName(), @@ -891,7 +893,7 @@ export class DelayedAttackTag extends ArenaTag { const ret = super.lapse(arena); if (!ret) { - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new MoveEffectPhase(this.sourceId!, [this.targetIndex], allMoves[this.sourceMove!], false, true), ); // TODO: are those bangs correct? } @@ -917,7 +919,7 @@ class StealthRockTag extends ArenaTrapTag { const source = this.sourceId ? globalScene.getPokemonById(this.sourceId) : null; if (!quiet && source) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("arenaTag:stealthRockOnAdd", { opponentDesc: source.getOpponentDescriptor(), }), @@ -971,7 +973,7 @@ class StealthRockTag extends ArenaTrapTag { } const damage = toDmgValue(pokemon.getMaxHp() * damageHpRatio); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("arenaTag:stealthRockActivateTrap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -1001,7 +1003,7 @@ class StickyWebTag extends ArenaTrapTag { super.onAdd(arena); const source = this.sourceId ? globalScene.getPokemonById(this.sourceId) : null; if (!quiet && source) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("arenaTag:stickyWebOnAdd", { moveName: this.getMoveName(), opponentDesc: source.getOpponentDescriptor(), @@ -1020,13 +1022,13 @@ class StickyWebTag extends ArenaTrapTag { } if (!cancelled.value) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("arenaTag:stickyWebActivateTrap", { pokemonName: pokemon.getNameToRender(), }), ); const stages = new NumberHolder(-1); - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new StatStageChangePhase( pokemon.getBattlerIndex(), false, @@ -1074,7 +1076,7 @@ export class TrickRoomTag extends ArenaTag { onAdd(_arena: Arena): void { const source = this.sourceId ? globalScene.getPokemonById(this.sourceId) : null; if (source) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("arenaTag:trickRoomOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(source), }), @@ -1083,7 +1085,7 @@ export class TrickRoomTag extends ArenaTag { } onRemove(_arena: Arena): void { - globalScene.queueMessage(i18next.t("arenaTag:trickRoomOnRemove")); + globalScene.phaseManager.queueMessage(i18next.t("arenaTag:trickRoomOnRemove")); } } @@ -1098,7 +1100,7 @@ export class GravityTag extends ArenaTag { } onAdd(_arena: Arena): void { - globalScene.queueMessage(i18next.t("arenaTag:gravityOnAdd")); + globalScene.phaseManager.queueMessage(i18next.t("arenaTag:gravityOnAdd")); globalScene.getField(true).forEach(pokemon => { if (pokemon !== null) { pokemon.removeTag(BattlerTagType.FLOATING); @@ -1111,7 +1113,7 @@ export class GravityTag extends ArenaTag { } onRemove(_arena: Arena): void { - globalScene.queueMessage(i18next.t("arenaTag:gravityOnRemove")); + globalScene.phaseManager.queueMessage(i18next.t("arenaTag:gravityOnRemove")); } } @@ -1127,7 +1129,7 @@ class TailwindTag extends ArenaTag { onAdd(_arena: Arena, quiet = false): void { if (!quiet) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t( `arenaTag:tailwindOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`, ), @@ -1141,7 +1143,7 @@ class TailwindTag extends ArenaTag { // Apply the CHARGED tag to party members with the WIND_POWER ability if (pokemon.hasAbility(AbilityId.WIND_POWER) && !pokemon.getTag(BattlerTagType.CHARGED)) { pokemon.addTag(BattlerTagType.CHARGED); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("abilityTriggers:windPowerCharged", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: this.getMoveName(), @@ -1151,16 +1153,18 @@ class TailwindTag extends ArenaTag { // Raise attack by one stage if party member has WIND_RIDER ability // TODO: Ability displays should be handled by the ability if (pokemon.hasAbility(AbilityId.WIND_RIDER)) { - globalScene.queueAbilityDisplay(pokemon, false, true); - globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [Stat.ATK], 1, true)); - globalScene.queueAbilityDisplay(pokemon, false, false); + globalScene.phaseManager.queueAbilityDisplay(pokemon, false, true); + globalScene.phaseManager.unshiftPhase( + new StatStageChangePhase(pokemon.getBattlerIndex(), true, [Stat.ATK], 1, true), + ); + globalScene.phaseManager.queueAbilityDisplay(pokemon, false, false); } } } onRemove(_arena: Arena, quiet = false): void { if (!quiet) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t( `arenaTag:tailwindOnRemove${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`, ), @@ -1179,11 +1183,11 @@ class HappyHourTag extends ArenaTag { } onAdd(_arena: Arena): void { - globalScene.queueMessage(i18next.t("arenaTag:happyHourOnAdd")); + globalScene.phaseManager.queueMessage(i18next.t("arenaTag:happyHourOnAdd")); } onRemove(_arena: Arena): void { - globalScene.queueMessage(i18next.t("arenaTag:happyHourOnRemove")); + globalScene.phaseManager.queueMessage(i18next.t("arenaTag:happyHourOnRemove")); } } @@ -1193,7 +1197,7 @@ class SafeguardTag extends ArenaTag { } onAdd(_arena: Arena): void { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t( `arenaTag:safeguardOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`, ), @@ -1201,7 +1205,7 @@ class SafeguardTag extends ArenaTag { } onRemove(_arena: Arena): void { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t( `arenaTag:safeguardOnRemove${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`, ), @@ -1237,7 +1241,7 @@ class ImprisonTag extends ArenaTrapTag { p.addTag(BattlerTagType.IMPRISON, 1, MoveId.IMPRISON, this.sourceId); } }); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:imprisonOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(source), }), @@ -1294,7 +1298,7 @@ class FireGrassPledgeTag extends ArenaTag { override onAdd(_arena: Arena): void { // "A sea of fire enveloped your/the opposing team!" - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t( `arenaTag:fireGrassPledgeOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`, ), @@ -1309,13 +1313,13 @@ class FireGrassPledgeTag extends ArenaTag { .filter(pokemon => !pokemon.isOfType(PokemonType.FIRE) && !pokemon.switchOutStatus) .forEach(pokemon => { // "{pokemonNameWithAffix} was hurt by the sea of fire!" - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("arenaTag:fireGrassPledgeLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), ); // TODO: Replace this with a proper animation - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new CommonAnimPhase(pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.MAGMA_STORM), ); pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 8), { result: HitResult.INDIRECT }); @@ -1339,7 +1343,7 @@ class WaterFirePledgeTag extends ArenaTag { override onAdd(_arena: Arena): void { // "A rainbow appeared in the sky on your/the opposing team's side!" - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t( `arenaTag:waterFirePledgeOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`, ), @@ -1373,7 +1377,7 @@ class GrassWaterPledgeTag extends ArenaTag { override onAdd(_arena: Arena): void { // "A swamp enveloped your/the opposing team!" - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t( `arenaTag:grassWaterPledgeOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`, ), @@ -1394,7 +1398,7 @@ export class FairyLockTag extends ArenaTag { } onAdd(_arena: Arena): void { - globalScene.queueMessage(i18next.t("arenaTag:fairyLockOnAdd")); + globalScene.phaseManager.queueMessage(i18next.t("arenaTag:fairyLockOnAdd")); } } @@ -1451,7 +1455,7 @@ export class SuppressAbilitiesTag extends ArenaTag { public override onRemove(_arena: Arena, quiet = false) { this.beingRemoved = true; if (!quiet) { - globalScene.queueMessage(i18next.t("arenaTag:neutralizingGasOnRemove")); + globalScene.phaseManager.queueMessage(i18next.t("arenaTag:neutralizingGasOnRemove")); } for (const pokemon of globalScene.getField(true)) { @@ -1472,7 +1476,7 @@ export class SuppressAbilitiesTag extends ArenaTag { private playActivationMessage(pokemon: Pokemon | null) { if (pokemon) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("arenaTag:neutralizingGasOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 456f519a34c..d0b4620d8eb 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -164,12 +164,12 @@ export abstract class MoveRestrictionBattlerTag extends BattlerTag { override lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { if (lapseType === BattlerTagLapseType.PRE_MOVE) { // Cancel the affected pokemon's selected move - const phase = globalScene.getCurrentPhase() as MovePhase; + const phase = globalScene.phaseManager.getCurrentPhase() as MovePhase; const move = phase.move; if (this.isMoveRestricted(move.moveId, pokemon)) { if (this.interruptedText(pokemon, move.moveId)) { - globalScene.queueMessage(this.interruptedText(pokemon, move.moveId)); + globalScene.phaseManager.queueMessage(this.interruptedText(pokemon, move.moveId)); } phase.cancel(); } @@ -315,7 +315,7 @@ export class DisabledTag extends MoveRestrictionBattlerTag { this.moveId = move.move; - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:disabledOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[this.moveId].name, @@ -327,7 +327,7 @@ export class DisabledTag extends MoveRestrictionBattlerTag { override onRemove(pokemon: Pokemon): void { super.onRemove(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:disabledLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[this.moveId].name, @@ -456,12 +456,12 @@ export class RechargingTag extends BattlerTag { /** Cancels the source's move this turn and queues a "__ must recharge!" message */ lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { if (lapseType === BattlerTagLapseType.PRE_MOVE) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:rechargingLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), ); - (globalScene.getCurrentPhase() as MovePhase).cancel(); + (globalScene.phaseManager.getCurrentPhase() as MovePhase).cancel(); pokemon.getMoveQueue().shift(); } return super.lapse(pokemon, lapseType); @@ -488,7 +488,7 @@ export class BeakBlastChargingTag extends BattlerTag { new MoveChargeAnim(ChargeAnim.BEAK_BLAST_CHARGING, this.sourceMove, pokemon).play(); // Queue Beak Blast's header message - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("moveTriggers:startedHeatingUpBeak", { pokemonName: getPokemonNameWithAffix(pokemon), }), @@ -533,7 +533,7 @@ export class ShellTrapTag extends BattlerTag { } onAdd(pokemon: Pokemon): void { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("moveTriggers:setUpShellTrap", { pokemonName: getPokemonNameWithAffix(pokemon), }), @@ -552,15 +552,15 @@ export class ShellTrapTag extends BattlerTag { // Trap should only be triggered by opponent's Physical moves if (phaseData?.move.category === MoveCategory.PHYSICAL && pokemon.isOpponent(phaseData.attacker)) { - const shellTrapPhaseIndex = globalScene.phaseQueue.findIndex( + const shellTrapPhaseIndex = globalScene.phaseManager.phaseQueue.findIndex( phase => phase.is("MovePhase") && phase.pokemon === pokemon, ); - const firstMovePhaseIndex = globalScene.phaseQueue.findIndex(phase => phase.is("MovePhase")); + const firstMovePhaseIndex = globalScene.phaseManager.phaseQueue.findIndex(phase => phase.is("MovePhase")); // Only shift MovePhase timing if it's not already next up if (shellTrapPhaseIndex !== -1 && shellTrapPhaseIndex !== firstMovePhaseIndex) { - const shellTrapMovePhase = globalScene.phaseQueue.splice(shellTrapPhaseIndex, 1)[0]; - globalScene.prependToPhase(shellTrapMovePhase, MovePhase); + const shellTrapMovePhase = globalScene.phaseManager.phaseQueue.splice(shellTrapPhaseIndex, 1)[0]; + globalScene.phaseManager.prependToPhase(shellTrapMovePhase, MovePhase); } this.activated = true; @@ -598,13 +598,13 @@ export class TrappedTag extends BattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - globalScene.queueMessage(this.getTrapMessage(pokemon)); + globalScene.phaseManager.queueMessage(this.getTrapMessage(pokemon)); } onRemove(pokemon: Pokemon): void { super.onRemove(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:trappedOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: this.getMoveName(), @@ -660,8 +660,8 @@ export class FlinchedTag extends BattlerTag { */ lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { if (lapseType === BattlerTagLapseType.PRE_MOVE) { - (globalScene.getCurrentPhase() as MovePhase).cancel(); - globalScene.queueMessage( + (globalScene.phaseManager.getCurrentPhase() as MovePhase).cancel(); + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:flinchedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -699,7 +699,7 @@ export class InterruptedTag extends BattlerTag { } lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { - (globalScene.getCurrentPhase() as MovePhase).cancel(); + (globalScene.phaseManager.getCurrentPhase() as MovePhase).cancel(); return super.lapse(pokemon, lapseType); } } @@ -719,8 +719,10 @@ export class ConfusedTag extends BattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - globalScene.unshiftPhase(new CommonAnimPhase(pokemon.getBattlerIndex(), undefined, CommonAnim.CONFUSION)); - globalScene.queueMessage( + globalScene.phaseManager.unshiftPhase( + new CommonAnimPhase(pokemon.getBattlerIndex(), undefined, CommonAnim.CONFUSION), + ); + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:confusedOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -730,7 +732,7 @@ export class ConfusedTag extends BattlerTag { onRemove(pokemon: Pokemon): void { super.onRemove(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:confusedOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -740,7 +742,7 @@ export class ConfusedTag extends BattlerTag { onOverlap(pokemon: Pokemon): void { super.onOverlap(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:confusedOnOverlap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -754,12 +756,14 @@ export class ConfusedTag extends BattlerTag { return false; } - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:confusedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), ); - globalScene.unshiftPhase(new CommonAnimPhase(pokemon.getBattlerIndex(), undefined, CommonAnim.CONFUSION)); + globalScene.phaseManager.unshiftPhase( + new CommonAnimPhase(pokemon.getBattlerIndex(), undefined, CommonAnim.CONFUSION), + ); // 1/3 chance of hitting self with a 40 base power move if (pokemon.randBattleSeedInt(3) === 0 || Overrides.CONFUSION_ACTIVATION_OVERRIDE === true) { @@ -769,9 +773,9 @@ export class ConfusedTag extends BattlerTag { ((((2 * pokemon.level) / 5 + 2) * 40 * atk) / def / 50 + 2) * (pokemon.randBattleSeedIntRange(85, 100) / 100), ); // Intentionally don't increment rage fist's hitCount - globalScene.queueMessage(i18next.t("battlerTags:confusedLapseHurtItself")); + globalScene.phaseManager.queueMessage(i18next.t("battlerTags:confusedLapseHurtItself")); pokemon.damageAndUpdate(damage, { result: HitResult.CONFUSION }); - (globalScene.getCurrentPhase() as MovePhase).cancel(); + (globalScene.phaseManager.getCurrentPhase() as MovePhase).cancel(); } return true; @@ -815,7 +819,7 @@ export class DestinyBondTag extends BattlerTag { } if (pokemon.isBossImmune()) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:destinyBondLapseIsBoss", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -823,7 +827,7 @@ export class DestinyBondTag extends BattlerTag { return false; } - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:destinyBondLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(source), pokemonNameWithAffix2: getPokemonNameWithAffix(pokemon), @@ -856,7 +860,7 @@ export class InfatuatedTag extends BattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:infatuatedOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), sourcePokemonName: getPokemonNameWithAffix(globalScene.getPokemonById(this.sourceId!) ?? undefined), // TODO: is that bang correct? @@ -867,7 +871,7 @@ export class InfatuatedTag extends BattlerTag { onOverlap(pokemon: Pokemon): void { super.onOverlap(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:infatuatedOnOverlap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -878,21 +882,23 @@ export class InfatuatedTag extends BattlerTag { const ret = lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType); if (ret) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:infatuatedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), sourcePokemonName: getPokemonNameWithAffix(globalScene.getPokemonById(this.sourceId!) ?? undefined), // TODO: is that bang correct? }), ); - globalScene.unshiftPhase(new CommonAnimPhase(pokemon.getBattlerIndex(), undefined, CommonAnim.ATTRACT)); + globalScene.phaseManager.unshiftPhase( + new CommonAnimPhase(pokemon.getBattlerIndex(), undefined, CommonAnim.ATTRACT), + ); if (pokemon.randBattleSeedInt(2)) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:infatuatedLapseImmobilize", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), ); - (globalScene.getCurrentPhase() as MovePhase).cancel(); + (globalScene.phaseManager.getCurrentPhase() as MovePhase).cancel(); } } @@ -902,7 +908,7 @@ export class InfatuatedTag extends BattlerTag { onRemove(pokemon: Pokemon): void { super.onRemove(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:infatuatedOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -941,7 +947,7 @@ export class SeedTag extends BattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:seededOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -959,13 +965,13 @@ export class SeedTag extends BattlerTag { applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); if (!cancelled.value) { - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new CommonAnimPhase(source.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.LEECH_SEED), ); const damage = pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 8), { result: HitResult.INDIRECT }); const reverseDrain = pokemon.hasAbilityWithAttr(ReverseDrainAbAttr, false); - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new PokemonHealPhase( source.getBattlerIndex(), !reverseDrain ? damage : damage * -1, @@ -1006,7 +1012,7 @@ export class PowderTag extends BattlerTag { super.onAdd(pokemon); // "{Pokemon} is covered in powder!" - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:powderOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -1022,7 +1028,7 @@ export class PowderTag extends BattlerTag { */ lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { if (lapseType === BattlerTagLapseType.PRE_MOVE) { - const movePhase = globalScene.getCurrentPhase(); + const movePhase = globalScene.phaseManager.getCurrentPhase(); if (movePhase?.is("MovePhase")) { const move = movePhase.move.getMove(); const weather = globalScene.arena.weather; @@ -1033,7 +1039,7 @@ export class PowderTag extends BattlerTag { movePhase.fail(); movePhase.showMoveText(); - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new CommonAnimPhase(pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.POWDER), ); @@ -1044,7 +1050,7 @@ export class PowderTag extends BattlerTag { } // "When the flame touched the powder\non the Pokémon, it exploded!" - globalScene.queueMessage(i18next.t("battlerTags:powderLapse", { moveName: move.name })); + globalScene.phaseManager.queueMessage(i18next.t("battlerTags:powderLapse", { moveName: move.name })); } } return true; @@ -1061,7 +1067,7 @@ export class NightmareTag extends BattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:nightmareOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -1071,7 +1077,7 @@ export class NightmareTag extends BattlerTag { onOverlap(pokemon: Pokemon): void { super.onOverlap(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:nightmareOnOverlap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -1082,12 +1088,14 @@ export class NightmareTag extends BattlerTag { const ret = lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType); if (ret) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:nightmareLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), ); - globalScene.unshiftPhase(new CommonAnimPhase(pokemon.getBattlerIndex(), undefined, CommonAnim.CURSE)); // TODO: Update animation type + globalScene.phaseManager.unshiftPhase( + new CommonAnimPhase(pokemon.getBattlerIndex(), undefined, CommonAnim.CURSE), + ); // TODO: Update animation type const cancelled = new BooleanHolder(false); applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); @@ -1173,18 +1181,18 @@ export class EncoreTag extends MoveRestrictionBattlerTag { onAdd(pokemon: Pokemon): void { super.onRemove(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:encoreOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), ); - const movePhase = globalScene.findPhase(m => m.is("MovePhase") && m.pokemon === pokemon); + const movePhase = globalScene.phaseManager.findPhase(m => m.is("MovePhase") && m.pokemon === pokemon); if (movePhase) { const movesetMove = pokemon.getMoveset().find(m => m.moveId === this.moveId); if (movesetMove) { const lastMove = pokemon.getLastXMoves(1)[0]; - globalScene.tryReplacePhase( + globalScene.phaseManager.tryReplacePhase( m => m.is("MovePhase") && m.pokemon === pokemon, new MovePhase(pokemon, lastMove.targets ?? [], movesetMove), ); @@ -1221,7 +1229,7 @@ export class EncoreTag extends MoveRestrictionBattlerTag { onRemove(pokemon: Pokemon): void { super.onRemove(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:encoreOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -1235,7 +1243,7 @@ export class HelpingHandTag extends BattlerTag { } onAdd(pokemon: Pokemon): void { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:helpingHandOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(globalScene.getPokemonById(this.sourceId!) ?? undefined), // TODO: is that bang correct? pokemonName: getPokemonNameWithAffix(pokemon), @@ -1268,7 +1276,7 @@ export class IngrainTag extends TrappedTag { const ret = lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType); if (ret) { - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new PokemonHealPhase( pokemon.getBattlerIndex(), toDmgValue(pokemon.getMaxHp() / 16), @@ -1307,7 +1315,9 @@ export class OctolockTag extends TrappedTag { const shouldLapse = lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType); if (shouldLapse) { - globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), false, [Stat.DEF, Stat.SPDEF], -1)); + globalScene.phaseManager.unshiftPhase( + new StatStageChangePhase(pokemon.getBattlerIndex(), false, [Stat.DEF, Stat.SPDEF], -1), + ); return true; } @@ -1323,7 +1333,7 @@ export class AquaRingTag extends BattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:aquaRingOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -1334,7 +1344,7 @@ export class AquaRingTag extends BattlerTag { const ret = lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType); if (ret) { - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new PokemonHealPhase( pokemon.getBattlerIndex(), toDmgValue(pokemon.getMaxHp() / 16), @@ -1382,7 +1392,7 @@ export class DrowsyTag extends BattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:drowsyOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -1435,13 +1445,13 @@ export abstract class DamagingTrapTag extends TrappedTag { const ret = super.lapse(pokemon, lapseType); if (ret) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:damagingTrapLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: this.getMoveName(), }), ); - globalScene.unshiftPhase(new CommonAnimPhase(pokemon.getBattlerIndex(), undefined, this.commonAnim)); + globalScene.phaseManager.unshiftPhase(new CommonAnimPhase(pokemon.getBattlerIndex(), undefined, this.commonAnim)); const cancelled = new BooleanHolder(false); applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); @@ -1596,7 +1606,7 @@ export class ProtectedTag extends BattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:protectedOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -1606,14 +1616,14 @@ export class ProtectedTag extends BattlerTag { lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { if (lapseType === BattlerTagLapseType.CUSTOM) { new CommonBattleAnim(CommonAnim.PROTECT, pokemon).play(); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:protectedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), ); // Stop multi-hit moves early - const effectPhase = globalScene.getCurrentPhase(); + const effectPhase = globalScene.phaseManager.getCurrentPhase(); if (effectPhase?.is("MoveEffectPhase")) { effectPhase.stopMultiHit(pokemon); } @@ -1754,7 +1764,9 @@ export class ContactStatStageChangeProtectedTag extends DamageProtectedTag { * @param user - The pokemon that is being attacked and has the tag */ override onContact(attacker: Pokemon, _user: Pokemon): void { - globalScene.unshiftPhase(new StatStageChangePhase(attacker.getBattlerIndex(), false, [this.stat], this.levels)); + globalScene.phaseManager.unshiftPhase( + new StatStageChangePhase(attacker.getBattlerIndex(), false, [this.stat], this.levels), + ); } } @@ -1771,7 +1783,7 @@ export class EnduringTag extends BattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:enduringOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -1780,7 +1792,7 @@ export class EnduringTag extends BattlerTag { lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { if (lapseType === BattlerTagLapseType.CUSTOM) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:enduringLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -1799,7 +1811,7 @@ export class SturdyTag extends BattlerTag { lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { if (lapseType === BattlerTagLapseType.CUSTOM) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:sturdyLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -1824,7 +1836,7 @@ export class PerishSongTag extends BattlerTag { const ret = super.lapse(pokemon, lapseType); if (ret) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:perishSongLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), turnCount: this.turnCount, @@ -1861,7 +1873,7 @@ export class CenterOfAttentionTag extends BattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:centerOfAttentionOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -1918,15 +1930,15 @@ export class TruantTag extends AbilityBattlerTag { const lastMove = pokemon.getLastXMoves().find(() => true); if (lastMove && lastMove.move !== MoveId.NONE) { - (globalScene.getCurrentPhase() as MovePhase).cancel(); + (globalScene.phaseManager.getCurrentPhase() as MovePhase).cancel(); // TODO: Ability displays should be handled by the ability - globalScene.queueAbilityDisplay(pokemon, passive, true); - globalScene.queueMessage( + globalScene.phaseManager.queueAbilityDisplay(pokemon, passive, true); + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:truantLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), ); - globalScene.queueAbilityDisplay(pokemon, passive, false); + globalScene.phaseManager.queueAbilityDisplay(pokemon, passive, false); } return true; @@ -1941,7 +1953,7 @@ export class SlowStartTag extends AbilityBattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:slowStartOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -1959,7 +1971,7 @@ export class SlowStartTag extends AbilityBattlerTag { onRemove(pokemon: Pokemon): void { super.onRemove(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:slowStartOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -2006,7 +2018,7 @@ export class HighestStatBoostTag extends AbilityBattlerTag { this.stat = highestStat; this.multiplier = this.stat === Stat.SPD ? 1.5 : 1.3; - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:highestStatBoostOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), statName: i18next.t(getStatKey(highestStat)), @@ -2021,7 +2033,7 @@ export class HighestStatBoostTag extends AbilityBattlerTag { onRemove(pokemon: Pokemon): void { super.onRemove(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:highestStatBoostOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName: allAbilities[this.ability].name, @@ -2119,7 +2131,7 @@ export class FloatingTag extends TypeImmuneTag { super.onAdd(pokemon); if (this.sourceMove === MoveId.MAGNET_RISE) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:magnetRisenOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -2130,7 +2142,7 @@ export class FloatingTag extends TypeImmuneTag { onRemove(pokemon: Pokemon): void { super.onRemove(pokemon); if (this.sourceMove === MoveId.MAGNET_RISE) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:magnetRisenOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -2174,7 +2186,7 @@ export class TypeBoostTag extends BattlerTag { } override onAdd(pokemon: Pokemon): void { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("abilityTriggers:typeImmunityPowerBoost", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), typeName: i18next.t(`pokemonInfo:Type.${PokemonType[this.boostedType]}`), @@ -2183,7 +2195,7 @@ export class TypeBoostTag extends BattlerTag { } override onOverlap(pokemon: Pokemon): void { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("abilityTriggers:moveImmunity", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), ); } @@ -2197,7 +2209,7 @@ export class CritBoostTag extends BattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:critBoostOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -2211,7 +2223,7 @@ export class CritBoostTag extends BattlerTag { onRemove(pokemon: Pokemon): void { super.onRemove(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:critBoostOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -2257,7 +2269,7 @@ export class SaltCuredTag extends BattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:saltCuredOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -2269,7 +2281,7 @@ export class SaltCuredTag extends BattlerTag { const ret = lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType); if (ret) { - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new CommonAnimPhase(pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.SALT_CURE), ); @@ -2282,7 +2294,7 @@ export class SaltCuredTag extends BattlerTag { result: HitResult.INDIRECT, }); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:saltCuredLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: this.getMoveName(), @@ -2320,7 +2332,7 @@ export class CursedTag extends BattlerTag { const ret = lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType); if (ret) { - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new CommonAnimPhase(pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.SALT_CURE), ); @@ -2329,7 +2341,7 @@ export class CursedTag extends BattlerTag { if (!cancelled.value) { pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 4), { result: HitResult.INDIRECT }); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:cursedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -2497,7 +2509,7 @@ export class CommandedTag extends BattlerTag { /** Caches the Tatsugiri's form key and sharply boosts the tagged Pokemon's stats */ override onAdd(pokemon: Pokemon): void { this._tatsugiriFormKey = this.getSourcePokemon()?.getFormKey() ?? "curly"; - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new StatStageChangePhase( pokemon.getBattlerIndex(), true, @@ -2572,7 +2584,7 @@ export class StockpilingTag extends BattlerTag { if (this.stockpiledCount < 3) { this.stockpiledCount++; - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:stockpilingOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), stockpiledCount: this.stockpiledCount, @@ -2580,7 +2592,7 @@ export class StockpilingTag extends BattlerTag { ); // Attempt to increase DEF and SPDEF by one stage, keeping track of successful changes. - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new StatStageChangePhase( pokemon.getBattlerIndex(), true, @@ -2608,13 +2620,13 @@ export class StockpilingTag extends BattlerTag { const spDefChange = this.statChangeCounts[Stat.SPDEF]; if (defChange) { - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new StatStageChangePhase(pokemon.getBattlerIndex(), true, [Stat.DEF], -defChange, true, false, true), ); } if (spDefChange) { - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new StatStageChangePhase(pokemon.getBattlerIndex(), true, [Stat.SPDEF], -spDefChange, true, false, true), ); } @@ -2635,7 +2647,7 @@ export class GulpMissileTag extends BattlerTag { return true; } - const moveEffectPhase = globalScene.getCurrentPhase(); + const moveEffectPhase = globalScene.phaseManager.getCurrentPhase(); if (moveEffectPhase?.is("MoveEffectPhase")) { const attacker = moveEffectPhase.getUserPokemon(); @@ -2655,7 +2667,9 @@ export class GulpMissileTag extends BattlerTag { } if (this.tagType === BattlerTagType.GULP_MISSILE_ARROKUDA) { - globalScene.unshiftPhase(new StatStageChangePhase(attacker.getBattlerIndex(), false, [Stat.DEF], -1)); + globalScene.phaseManager.unshiftPhase( + new StatStageChangePhase(attacker.getBattlerIndex(), false, [Stat.DEF], -1), + ); } else { attacker.trySetStatus(StatusEffect.PARALYSIS, true, pokemon); } @@ -2803,7 +2817,7 @@ export class HealBlockTag extends MoveRestrictionBattlerTag { override onRemove(pokemon: Pokemon): void { super.onRemove(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battle:battlerTagsHealBlockOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -2833,7 +2847,7 @@ export class TarShotTag extends BattlerTag { } override onAdd(pokemon: Pokemon): void { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:tarShotOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -2852,7 +2866,7 @@ export class ElectrifiedTag extends BattlerTag { override onAdd(pokemon: Pokemon): void { // "{pokemonNameWithAffix}'s moves have been electrified!" - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:electrifiedOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -2878,7 +2892,7 @@ export class AutotomizedTag extends BattlerTag { onAdd(pokemon: Pokemon): void { const minWeight = 0.1; if (pokemon.getWeight() > minWeight) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:autotomizeOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -2924,14 +2938,14 @@ export class SubstituteTag extends BattlerTag { // Queue battle animation and message globalScene.triggerPokemonBattleAnim(pokemon, PokemonAnimType.SUBSTITUTE_ADD); if (this.sourceMove === MoveId.SHED_TAIL) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:shedTailOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), 1500, ); } else { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:substituteOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -2951,7 +2965,7 @@ export class SubstituteTag extends BattlerTag { } else { this.sprite.destroy(); } - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:substituteOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -2987,7 +3001,7 @@ export class SubstituteTag extends BattlerTag { /** If the Substitute redirects damage, queue a message to indicate it. */ onHit(pokemon: Pokemon): void { - const moveEffectPhase = globalScene.getCurrentPhase(); + const moveEffectPhase = globalScene.phaseManager.getCurrentPhase(); if (moveEffectPhase?.is("MoveEffectPhase")) { const attacker = moveEffectPhase.getUserPokemon(); if (!attacker) { @@ -2997,7 +3011,7 @@ export class SubstituteTag extends BattlerTag { const firstHit = attacker.turnData.hitCount === attacker.turnData.hitsLeft; if (firstHit && move.hitsSubstitute(attacker, pokemon)) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:substituteOnHit", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -3074,7 +3088,7 @@ export class TormentTag extends MoveRestrictionBattlerTag { */ override onAdd(pokemon: Pokemon) { super.onAdd(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:tormentOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -3132,7 +3146,7 @@ export class TauntTag extends MoveRestrictionBattlerTag { override onAdd(pokemon: Pokemon) { super.onAdd(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:tauntOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -3143,7 +3157,7 @@ export class TauntTag extends MoveRestrictionBattlerTag { public override onRemove(pokemon: Pokemon): void { super.onRemove(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:tauntOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -3253,7 +3267,7 @@ export class SyrupBombTag extends BattlerTag { */ override onAdd(pokemon: Pokemon) { super.onAdd(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:syrupBombOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -3271,12 +3285,12 @@ export class SyrupBombTag extends BattlerTag { return false; } // Custom message in lieu of an animation in mainline - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:syrupBombLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), ); - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new StatStageChangePhase(pokemon.getBattlerIndex(), true, [Stat.SPD], -1, true, false, true), ); return --this.turnCount > 0; @@ -3302,7 +3316,7 @@ export class TelekinesisTag extends BattlerTag { } override onAdd(pokemon: Pokemon) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:telekinesisOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -3321,7 +3335,7 @@ export class PowerTrickTag extends BattlerTag { onAdd(pokemon: Pokemon): void { this.swapStat(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:powerTrickActive", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -3330,7 +3344,7 @@ export class PowerTrickTag extends BattlerTag { onRemove(pokemon: Pokemon): void { this.swapStat(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:powerTrickActive", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -3368,7 +3382,7 @@ export class GrudgeTag extends BattlerTag { onAdd(pokemon: Pokemon) { super.onAdd(pokemon); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:grudgeOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -3389,7 +3403,7 @@ export class GrudgeTag extends BattlerTag { const lastMoveData = sourcePokemon.getMoveset().find(m => m.moveId === lastMove.move); if (lastMoveData && lastMove.move !== MoveId.STRUGGLE) { lastMoveData.ppUsed = lastMoveData.getMovePp(); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:grudgeLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: lastMoveData.getName(), @@ -3417,7 +3431,9 @@ export class PsychoShiftTag extends BattlerTag { */ override lapse(pokemon: Pokemon, _lapseType: BattlerTagLapseType): boolean { if (pokemon.status && pokemon.isActive(true)) { - globalScene.queueMessage(getStatusEffectHealText(pokemon.status.effect, getPokemonNameWithAffix(pokemon))); + globalScene.phaseManager.queueMessage( + getStatusEffectHealText(pokemon.status.effect, getPokemonNameWithAffix(pokemon)), + ); pokemon.resetStatus(); pokemon.updateInfo(); } @@ -3439,7 +3455,7 @@ export class MagicCoatTag extends BattlerTag { */ override onAdd(pokemon: Pokemon) { // "{pokemonNameWithAffix} shrouded itself with Magic Coat!" - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:magicCoatOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -3673,7 +3689,7 @@ export function loadBattlerTag(source: BattlerTag | any): BattlerTag { * corresponding {@linkcode Move} and user {@linkcode Pokemon} */ function getMoveEffectPhaseData(_pokemon: Pokemon): { phase: MoveEffectPhase; attacker: Pokemon; move: Move } | null { - const phase = globalScene.getCurrentPhase(); + const phase = globalScene.phaseManager.getCurrentPhase(); if (phase?.is("MoveEffectPhase")) { return { phase: phase, diff --git a/src/data/berry.ts b/src/data/berry.ts index ecc3e92ca64..defc9b85541 100644 --- a/src/data/berry.ts +++ b/src/data/berry.ts @@ -3,11 +3,7 @@ import type Pokemon from "../field/pokemon"; import { HitResult } from "../field/pokemon"; import { getStatusEffectHealText } from "./status-effect"; import { NumberHolder, toDmgValue, randSeedInt } from "#app/utils/common"; -import { - DoubleBerryEffectAbAttr, - ReduceBerryUseThresholdAbAttr, - applyAbAttrs, -} from "./abilities/ability"; +import { DoubleBerryEffectAbAttr, ReduceBerryUseThresholdAbAttr, applyAbAttrs } from "./abilities/ability"; import i18next from "i18next"; import { BattlerTagType } from "#enums/battler-tag-type"; import { BerryType } from "#enums/berry-type"; @@ -79,7 +75,7 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { { const hpHealed = new NumberHolder(toDmgValue(consumer.getMaxHp() / 4)); applyAbAttrs(DoubleBerryEffectAbAttr, consumer, null, false, hpHealed); - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new PokemonHealPhase( consumer.getBattlerIndex(), hpHealed.value, @@ -95,7 +91,7 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { case BerryType.LUM: { if (consumer.status) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( getStatusEffectHealText(consumer.status.effect, getPokemonNameWithAffix(consumer)), ); } @@ -113,7 +109,7 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { const stat: BattleStat = berryType - BerryType.ENIGMA; const statStages = new NumberHolder(1); applyAbAttrs(DoubleBerryEffectAbAttr, consumer, null, false, statStages); - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new StatStageChangePhase(consumer.getBattlerIndex(), true, [stat], statStages.value), ); } @@ -130,7 +126,7 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { const randStat = randSeedInt(Stat.SPD, Stat.ATK); const stages = new NumberHolder(2); applyAbAttrs(DoubleBerryEffectAbAttr, consumer, null, false, stages); - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new StatStageChangePhase(consumer.getBattlerIndex(), true, [randStat], stages.value), ); } @@ -144,7 +140,7 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { consumer.getMoveset().find(m => m.ppUsed < m.getMovePp()); if (ppRestoreMove) { ppRestoreMove.ppUsed = Math.max(ppRestoreMove.ppUsed - 10, 0); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battle:ppHealBerry", { pokemonNameWithAffix: getPokemonNameWithAffix(consumer), moveName: ppRestoreMove.getName(), diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index f610c745fd2..94d0ae50523 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -1048,7 +1048,7 @@ function ChargeMove(Base: TBase) { * @param target the {@linkcode Pokemon} targeted by this move (optional) */ showChargeText(user: Pokemon, target?: Pokemon): void { - globalScene.queueMessage(this._chargeText + globalScene.phaseManager.queueMessage(this._chargeText .replace("{USER}", getPokemonNameWithAffix(user)) .replace("{TARGET}", getPokemonNameWithAffix(target)) ); @@ -1310,7 +1310,7 @@ export class MessageHeaderAttr extends MoveHeaderAttr { : this.message(user, move); if (message) { - globalScene.queueMessage(message); + globalScene.phaseManager.queueMessage(message); return true; } return false; @@ -1363,7 +1363,7 @@ export class PreMoveMessageAttr extends MoveAttr { ? this.message as string : this.message(user, target, move); if (message) { - globalScene.queueMessage(message, 500); + globalScene.phaseManager.queueMessage(message, 500); return true; } return false; @@ -1620,14 +1620,14 @@ export class SurviveDamageAttr extends ModifiedDamageAttr { export class SplashAttr extends MoveEffectAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - globalScene.queueMessage(i18next.t("moveTriggers:splash")); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:splash")); return true; } } export class CelebrateAttr extends MoveEffectAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - globalScene.queueMessage(i18next.t("moveTriggers:celebrate", { playerName: loggedInUser?.username })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:celebrate", { playerName: loggedInUser?.username })); return true; } } @@ -1677,7 +1677,7 @@ export class RecoilAttr extends MoveEffectAttr { } user.damageAndUpdate(recoilDamage, { result: HitResult.INDIRECT, ignoreSegments: true }); - globalScene.queueMessage(i18next.t("moveTriggers:hitWithRecoil", { pokemonName: getPokemonNameWithAffix(user) })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:hitWithRecoil", { pokemonName: getPokemonNameWithAffix(user) })); user.turnData.damageTaken += recoilDamage; return true; @@ -1789,7 +1789,7 @@ export class HalfSacrificialAttr extends MoveEffectAttr { applyAbAttrs(BlockNonDirectDamageAbAttr, user, cancelled); if (!cancelled.value) { user.damageAndUpdate(toDmgValue(user.getMaxHp() / 2), { result: HitResult.INDIRECT, ignoreSegments: true }); - globalScene.queueMessage(i18next.t("moveTriggers:cutHpPowerUpMove", { pokemonName: getPokemonNameWithAffix(user) })); // Queue recoil message + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:cutHpPowerUpMove", { pokemonName: getPokemonNameWithAffix(user) })); // Queue recoil message } return true; } @@ -1890,7 +1890,7 @@ export class HealAttr extends MoveEffectAttr { * This heals the target and shows the appropriate message. */ addHealPhase(target: Pokemon, healRatio: number) { - globalScene.unshiftPhase(new PokemonHealPhase(target.getBattlerIndex(), + globalScene.phaseManager.unshiftPhase(new PokemonHealPhase(target.getBattlerIndex(), toDmgValue(target.getMaxHp() * healRatio), i18next.t("moveTriggers:healHp", { pokemonName: getPokemonNameWithAffix(target) }), true, !this.showAnim)); } @@ -1934,7 +1934,7 @@ export class PartyStatusCureAttr extends MoveEffectAttr { partyPokemon.forEach(p => this.cureStatus(p, user.id)); if (this.message) { - globalScene.queueMessage(this.message); + globalScene.phaseManager.queueMessage(this.message); } return true; @@ -1954,8 +1954,8 @@ export class PartyStatusCureAttr extends MoveEffectAttr { pokemon.updateInfo(); } else { // TODO: Ability displays should be handled by the ability - globalScene.queueAbilityDisplay(pokemon, pokemon.getPassiveAbility()?.id === this.abilityCondition, true); - globalScene.queueAbilityDisplay(pokemon, pokemon.getPassiveAbility()?.id === this.abilityCondition, false); + globalScene.phaseManager.queueAbilityDisplay(pokemon, pokemon.getPassiveAbility()?.id === this.abilityCondition, true); + globalScene.phaseManager.queueAbilityDisplay(pokemon, pokemon.getPassiveAbility()?.id === this.abilityCondition, false); } } } @@ -2021,7 +2021,7 @@ export class SacrificialFullRestoreAttr extends SacrificialAttr { const party = user.isPlayer() ? globalScene.getPlayerParty() : globalScene.getEnemyParty(); const maxPartyMemberHp = party.map(p => p.getMaxHp()).reduce((maxHp: number, hp: number) => Math.max(hp, maxHp), 0); - globalScene.pushPhase( + globalScene.phaseManager.pushPhase( new PokemonHealPhase( user.getBattlerIndex(), maxPartyMemberHp, @@ -2233,7 +2233,7 @@ export class HitHealAttr extends MoveEffectAttr { message = ""; } } - globalScene.unshiftPhase(new PokemonHealPhase(user.getBattlerIndex(), healAmount, message, false, true)); + globalScene.phaseManager.unshiftPhase(new PokemonHealPhase(user.getBattlerIndex(), healAmount, message, false, true)); return true; } @@ -2565,7 +2565,7 @@ export class StealHeldItemChanceAttr extends MoveEffectAttr { return false; } - globalScene.queueMessage(i18next.t("moveTriggers:stoleItem", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), itemName: stolenItem.type.name })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:stoleItem", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), itemName: stolenItem.type.name })); return true; } @@ -2643,9 +2643,9 @@ export class RemoveHeldItemAttr extends MoveEffectAttr { globalScene.updateModifiers(target.isPlayer()); if (this.berriesOnly) { - globalScene.queueMessage(i18next.t("moveTriggers:incineratedItem", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), itemName: removedItem.type.name })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:incineratedItem", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), itemName: removedItem.type.name })); } else { - globalScene.queueMessage(i18next.t("moveTriggers:knockedOffItem", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), itemName: removedItem.type.name })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:knockedOffItem", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), itemName: removedItem.type.name })); } return true; @@ -2777,7 +2777,7 @@ export class StealEatBerryAttr extends EatBerryAttr { this.chosenBerry = heldBerries[user.randBattleSeedInt(heldBerries.length)]; applyPostItemLostAbAttrs(PostItemLostAbAttr, target, false); const message = i18next.t("battle:stealEatBerry", { pokemonName: user.name, targetName: target.name, berryName: this.chosenBerry.type.name }); - globalScene.queueMessage(message); + globalScene.phaseManager.queueMessage(message); this.reduceBerryModifier(target); this.eatBerry(user, target); @@ -2822,7 +2822,7 @@ export class HealStatusEffectAttr extends MoveEffectAttr { const pokemon = this.selfTarget ? user : target; if (pokemon.status && this.effects.includes(pokemon.status.effect)) { - globalScene.queueMessage(getStatusEffectHealText(pokemon.status.effect, getPokemonNameWithAffix(pokemon))); + globalScene.phaseManager.queueMessage(getStatusEffectHealText(pokemon.status.effect, getPokemonNameWithAffix(pokemon))); pokemon.resetStatus(); pokemon.updateInfo(); @@ -3067,13 +3067,13 @@ export class DelayedAttackAttr extends OverrideMoveEffectAttr { if (!virtual) { overridden.value = true; - globalScene.unshiftPhase(new MoveAnimPhase(new MoveChargeAnim(this.chargeAnim, move.id, user))); - globalScene.queueMessage(this.chargeText.replace("{TARGET}", getPokemonNameWithAffix(target)).replace("{USER}", getPokemonNameWithAffix(user))); + globalScene.phaseManager.unshiftPhase(new MoveAnimPhase(new MoveChargeAnim(this.chargeAnim, move.id, user))); + globalScene.phaseManager.queueMessage(this.chargeText.replace("{TARGET}", getPokemonNameWithAffix(target)).replace("{USER}", getPokemonNameWithAffix(user))); user.pushMoveHistory({ move: move.id, targets: [ target.getBattlerIndex() ], result: MoveResult.OTHER }); const side = target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; globalScene.arena.addTag(this.tagType, 3, move.id, user.id, side, false, target.getBattlerIndex()); } else { - globalScene.queueMessage(i18next.t("moveTriggers:tookMoveAttack", { pokemonName: getPokemonNameWithAffix(globalScene.getPokemonById(target.id) ?? undefined), moveName: move.name })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:tookMoveAttack", { pokemonName: getPokemonNameWithAffix(globalScene.getPokemonById(target.id) ?? undefined), moveName: move.name })); } return true; @@ -3103,29 +3103,29 @@ export class AwaitCombinedPledgeAttr extends OverrideMoveEffectAttr { override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (user.turnData.combiningPledge) { // "The two moves have become one!\nIt's a combined move!" - globalScene.queueMessage(i18next.t("moveTriggers:combiningPledge")); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:combiningPledge")); return false; } const overridden = args[0] as BooleanHolder; - const allyMovePhase = globalScene.findPhase((phase) => phase.is("MovePhase") && phase.pokemon.isPlayer() === user.isPlayer()); + const allyMovePhase = globalScene.phaseManager.findPhase((phase) => phase.is("MovePhase") && phase.pokemon.isPlayer() === user.isPlayer()); if (allyMovePhase) { const allyMove = allyMovePhase.move.getMove(); if (allyMove !== move && allyMove.hasAttr(AwaitCombinedPledgeAttr)) { [ user, allyMovePhase.pokemon ].forEach((p) => p.turnData.combiningPledge = move.id); // "{userPokemonName} is waiting for {allyPokemonName}'s move..." - globalScene.queueMessage(i18next.t("moveTriggers:awaitingPledge", { + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:awaitingPledge", { userPokemonName: getPokemonNameWithAffix(user), allyPokemonName: getPokemonNameWithAffix(allyMovePhase.pokemon) })); // Move the ally's MovePhase (if needed) so that the ally moves next - const allyMovePhaseIndex = globalScene.phaseQueue.indexOf(allyMovePhase); - const firstMovePhaseIndex = globalScene.phaseQueue.findIndex((phase) => phase.is("MovePhase")); + const allyMovePhaseIndex = globalScene.phaseManager.phaseQueue.indexOf(allyMovePhase); + const firstMovePhaseIndex = globalScene.phaseManager.phaseQueue.findIndex((phase) => phase.is("MovePhase")); if (allyMovePhaseIndex !== firstMovePhaseIndex) { - globalScene.prependToPhase(globalScene.phaseQueue.splice(allyMovePhaseIndex, 1)[0], MovePhase); + globalScene.phaseManager.prependToPhase(globalScene.phaseManager.phaseQueue.splice(allyMovePhaseIndex, 1)[0], MovePhase); } overridden.value = true; @@ -3207,7 +3207,7 @@ export class StatStageChangeAttr extends MoveEffectAttr { const moveChance = this.getMoveChance(user, target, move, this.selfTarget, true); if (moveChance < 0 || moveChance === 100 || user.randBattleSeedInt(100) < moveChance) { const stages = this.getLevels(user); - globalScene.unshiftPhase(new StatStageChangePhase((this.selfTarget ? user : target).getBattlerIndex(), this.selfTarget, this.stats, stages, this.showMessage)); + globalScene.phaseManager.unshiftPhase(new StatStageChangePhase((this.selfTarget ? user : target).getBattlerIndex(), this.selfTarget, this.stats, stages, this.showMessage)); return true; } @@ -3432,7 +3432,7 @@ export class AcupressureStatStageChangeAttr extends MoveEffectAttr { const randStats = BATTLE_STATS.filter((s) => target.getStatStage(s) < 6); if (randStats.length > 0) { const boostStat = [ randStats[user.randBattleSeedInt(randStats.length)] ]; - globalScene.unshiftPhase(new StatStageChangePhase(target.getBattlerIndex(), this.selfTarget, boostStat, 2)); + globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(target.getBattlerIndex(), this.selfTarget, boostStat, 2)); return true; } return false; @@ -3510,7 +3510,7 @@ export class OrderUpStatBoostAttr extends MoveEffectAttr { break; } - globalScene.unshiftPhase(new StatStageChangePhase(user.getBattlerIndex(), this.selfTarget, [ increasedStat ], 1)); + globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(user.getBattlerIndex(), this.selfTarget, [ increasedStat ], 1)); return true; } } @@ -3533,7 +3533,7 @@ export class CopyStatsAttr extends MoveEffectAttr { } target.updateInfo(); user.updateInfo(); - globalScene.queueMessage(i18next.t("moveTriggers:copiedStatChanges", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:copiedStatChanges", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) })); return true; } @@ -3552,7 +3552,7 @@ export class InvertStatsAttr extends MoveEffectAttr { target.updateInfo(); user.updateInfo(); - globalScene.queueMessage(i18next.t("moveTriggers:invertStats", { pokemonName: getPokemonNameWithAffix(target) })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:invertStats", { pokemonName: getPokemonNameWithAffix(target) })); return true; } @@ -3570,10 +3570,10 @@ export class ResetStatsAttr extends MoveEffectAttr { // Target all pokemon on the field when Freezy Frost or Haze are used const activePokemon = globalScene.getField(true); activePokemon.forEach((p) => this.resetStats(p)); - globalScene.queueMessage(i18next.t("moveTriggers:statEliminated")); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:statEliminated")); } else { // Affects only the single target when Clear Smog is used this.resetStats(target); - globalScene.queueMessage(i18next.t("moveTriggers:resetStats", { pokemonName: getPokemonNameWithAffix(target) })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:resetStats", { pokemonName: getPokemonNameWithAffix(target) })); } return true; } @@ -3623,9 +3623,9 @@ export class SwapStatStagesAttr extends MoveEffectAttr { user.updateInfo(); if (this.stats.length === 7) { - globalScene.queueMessage(i18next.t("moveTriggers:switchedStatChanges", { pokemonName: getPokemonNameWithAffix(user) })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:switchedStatChanges", { pokemonName: getPokemonNameWithAffix(user) })); } else if (this.stats.length === 2) { - globalScene.queueMessage(i18next.t("moveTriggers:switchedTwoStatChanges", { + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:switchedTwoStatChanges", { pokemonName: getPokemonNameWithAffix(user), firstStat: i18next.t(getStatKey(this.stats[0])), secondStat: i18next.t(getStatKey(this.stats[1])) @@ -4227,7 +4227,7 @@ export class PresentPowerAttr extends VariablePowerAttr { // If this move is multi-hit, disable all other hits user.turnData.hitCount = 1; user.turnData.hitsLeft = 1; - globalScene.unshiftPhase(new PokemonHealPhase(target.getBattlerIndex(), + globalScene.phaseManager.unshiftPhase(new PokemonHealPhase(target.getBattlerIndex(), toDmgValue(target.getMaxHp() / 4), i18next.t("moveTriggers:regainedHealth", { pokemonName: getPokemonNameWithAffix(target) }), true)); } @@ -4476,7 +4476,7 @@ export class CueNextRoundAttr extends MoveEffectAttr { } override apply(user: Pokemon, target: Pokemon, move: Move, args?: any[]): boolean { - const nextRoundPhase = globalScene.findPhase(phase => + const nextRoundPhase = globalScene.phaseManager.findPhase(phase => phase.is("MovePhase") && phase.move.moveId === MoveId.ROUND ); @@ -4485,10 +4485,10 @@ export class CueNextRoundAttr extends MoveEffectAttr { } // Update the phase queue so that the next Pokemon using Round moves next - const nextRoundIndex = globalScene.phaseQueue.indexOf(nextRoundPhase); - const nextMoveIndex = globalScene.phaseQueue.findIndex(phase => phase.is("MovePhase")); + const nextRoundIndex = globalScene.phaseManager.phaseQueue.indexOf(nextRoundPhase); + const nextMoveIndex = globalScene.phaseManager.phaseQueue.findIndex(phase => phase.is("MovePhase")); if (nextRoundIndex !== nextMoveIndex) { - globalScene.prependToPhase(globalScene.phaseQueue.splice(nextRoundIndex, 1)[0], MovePhase); + globalScene.phaseManager.prependToPhase(globalScene.phaseManager.phaseQueue.splice(nextRoundIndex, 1)[0], MovePhase); } // Mark the corresponding Pokemon as having "joined the Round" (for doubling power later) @@ -4546,14 +4546,14 @@ export class SpectralThiefAttr extends StatChangeBeforeDmgCalcAttr { */ const availableToSteal = Math.min(statStageValueTarget, 6 - statStageValueUser); - globalScene.unshiftPhase(new StatStageChangePhase(user.getBattlerIndex(), this.selfTarget, [ s ], availableToSteal)); + globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(user.getBattlerIndex(), this.selfTarget, [ s ], availableToSteal)); target.setStatStage(s, statStageValueTarget - availableToSteal); } } target.updateInfo(); user.updateInfo(); - globalScene.queueMessage(i18next.t("moveTriggers:stealPositiveStats", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:stealPositiveStats", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) })); return true; } @@ -5368,7 +5368,7 @@ const crashDamageFunc = (user: Pokemon, move: Move) => { } user.damageAndUpdate(toDmgValue(user.getMaxHp() / 2), { result: HitResult.INDIRECT }); - globalScene.queueMessage(i18next.t("moveTriggers:keptGoingAndCrashed", { pokemonName: getPokemonNameWithAffix(user) })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:keptGoingAndCrashed", { pokemonName: getPokemonNameWithAffix(user) })); user.turnData.damageTaken += toDmgValue(user.getMaxHp() / 2); return true; @@ -5581,7 +5581,7 @@ export class FallDownAttr extends AddBattlerTagAttr { */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (!target.isGrounded()) { - globalScene.queueMessage(i18next.t("moveTriggers:fallDown", { targetPokemonName: getPokemonNameWithAffix(target) })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:fallDown", { targetPokemonName: getPokemonNameWithAffix(target) })); } return super.apply(user, target, move, args); } @@ -5665,12 +5665,12 @@ export class CurseAttr extends MoveEffectAttr { apply(user: Pokemon, target: Pokemon, move:Move, args: any[]): boolean { if (user.getTypes(true).includes(PokemonType.GHOST)) { if (target.getTag(BattlerTagType.CURSED)) { - globalScene.queueMessage(i18next.t("battle:attackFailed")); + globalScene.phaseManager.queueMessage(i18next.t("battle:attackFailed")); return false; } const curseRecoilDamage = Math.max(1, Math.floor(user.getMaxHp() / 2)); user.damageAndUpdate(curseRecoilDamage, { result: HitResult.INDIRECT, ignoreSegments: true }); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battlerTags:cursedOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(user), pokemonName: getPokemonNameWithAffix(target) @@ -5680,8 +5680,8 @@ export class CurseAttr extends MoveEffectAttr { target.addTag(BattlerTagType.CURSED, 0, move.id, user.id); return true; } else { - globalScene.unshiftPhase(new StatStageChangePhase(user.getBattlerIndex(), true, [ Stat.ATK, Stat.DEF ], 1)); - globalScene.unshiftPhase(new StatStageChangePhase(user.getBattlerIndex(), true, [ Stat.SPD ], -1)); + globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(user.getBattlerIndex(), true, [ Stat.ATK, Stat.DEF ], 1)); + globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(user.getBattlerIndex(), true, [ Stat.SPD ], -1)); return true; } } @@ -5745,7 +5745,7 @@ export class ConfuseAttr extends AddBattlerTagAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (!this.selfTarget && target.isSafeguarded(user)) { if (move.category === MoveCategory.STATUS) { - globalScene.queueMessage(i18next.t("moveTriggers:safeguard", { targetName: getPokemonNameWithAffix(target) })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:safeguard", { targetName: getPokemonNameWithAffix(target) })); } return false; } @@ -5802,7 +5802,7 @@ export class IgnoreAccuracyAttr extends AddBattlerTagAttr { return false; } - globalScene.queueMessage(i18next.t("moveTriggers:tookAimAtTarget", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:tookAimAtTarget", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) })); return true; } @@ -5818,7 +5818,7 @@ export class FaintCountdownAttr extends AddBattlerTagAttr { return false; } - globalScene.queueMessage(i18next.t("moveTriggers:faintCountdown", { pokemonName: getPokemonNameWithAffix(target), turnCount: this.turnCountMin - 1 })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:faintCountdown", { pokemonName: getPokemonNameWithAffix(target), turnCount: this.turnCountMin - 1 })); return true; } @@ -6102,7 +6102,7 @@ export class SwapArenaTagsAttr extends MoveEffectAttr { } - globalScene.queueMessage(i18next.t("moveTriggers:swapArenaTags", { pokemonName: getPokemonNameWithAffix(user) })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:swapArenaTags", { pokemonName: getPokemonNameWithAffix(user) })); return true; } } @@ -6154,7 +6154,7 @@ export class RevivalBlessingAttr extends MoveEffectAttr { override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { // If user is player, checks if the user has fainted pokemon if (user.isPlayer()) { - globalScene.unshiftPhase(new RevivalBlessingPhase(user)); + globalScene.phaseManager.unshiftPhase(new RevivalBlessingPhase(user)); return true; } else if (user.isEnemy() && user.hasTrainer() && globalScene.getEnemyParty().findIndex((p) => p.isFainted() && !p.isBoss()) > -1) { // If used by an enemy trainer with at least one fainted non-boss Pokemon, this @@ -6164,20 +6164,20 @@ export class RevivalBlessingAttr extends MoveEffectAttr { const slotIndex = globalScene.getEnemyParty().findIndex((p) => pokemon.id === p.id); pokemon.resetStatus(true, false, false, true); pokemon.heal(Math.min(toDmgValue(0.5 * pokemon.getMaxHp()), pokemon.getMaxHp())); - globalScene.queueMessage(i18next.t("moveTriggers:revivalBlessing", { pokemonName: getPokemonNameWithAffix(pokemon) }), 0, true); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:revivalBlessing", { pokemonName: getPokemonNameWithAffix(pokemon) }), 0, true); const allyPokemon = user.getAlly(); if (globalScene.currentBattle.double && globalScene.getEnemyParty().length > 1 && !isNullOrUndefined(allyPokemon)) { // Handle cases where revived pokemon needs to get switched in on same turn if (allyPokemon.isFainted() || allyPokemon === pokemon) { // Enemy switch phase should be removed and replaced with the revived pkmn switching in - globalScene.tryRemovePhase((phase: SwitchSummonPhase) => phase.is("SwitchSummonPhase") && phase.getPokemon() === pokemon); + globalScene.phaseManager.tryRemovePhase((phase: SwitchSummonPhase) => phase.is("SwitchSummonPhase") && phase.getPokemon() === pokemon); // If the pokemon being revived was alive earlier in the turn, cancel its move // (revived pokemon can't move in the turn they're brought back) - globalScene.findPhase((phase: MovePhase) => phase.pokemon === pokemon)?.cancel(); + globalScene.phaseManager.findPhase((phase: MovePhase) => phase.pokemon === pokemon)?.cancel(); if (user.fieldPosition === FieldPosition.CENTER) { user.setFieldPosition(FieldPosition.LEFT); } - globalScene.unshiftPhase(new SwitchSummonPhase(SwitchType.SWITCH, allyPokemon.getFieldIndex(), slotIndex, false, false)); + globalScene.phaseManager.unshiftPhase(new SwitchSummonPhase(SwitchType.SWITCH, allyPokemon.getFieldIndex(), slotIndex, false, false)); } } return true; @@ -6255,7 +6255,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { if (this.switchType === SwitchType.FORCE_SWITCH) { switchOutTarget.leaveField(true); const slotIndex = eligibleNewIndices[user.randBattleSeedInt(eligibleNewIndices.length)]; - globalScene.prependToPhase( + globalScene.phaseManager.prependToPhase( new SwitchSummonPhase( this.switchType, switchOutTarget.getFieldIndex(), @@ -6267,7 +6267,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { ); } else { switchOutTarget.leaveField(this.switchType === SwitchType.SWITCH); - globalScene.prependToPhase( + globalScene.phaseManager.prependToPhase( new SwitchPhase( this.switchType, switchOutTarget.getFieldIndex(), @@ -6298,7 +6298,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { if (this.switchType === SwitchType.FORCE_SWITCH) { switchOutTarget.leaveField(true); const slotIndex = eligibleNewIndices[user.randBattleSeedInt(eligibleNewIndices.length)]; - globalScene.prependToPhase( + globalScene.phaseManager.prependToPhase( new SwitchSummonPhase( this.switchType, switchOutTarget.getFieldIndex(), @@ -6310,7 +6310,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { ); } else { switchOutTarget.leaveField(this.switchType === SwitchType.SWITCH); - globalScene.prependToPhase( + globalScene.phaseManager.prependToPhase( new SwitchSummonPhase( this.switchType, switchOutTarget.getFieldIndex(), @@ -6339,7 +6339,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { if (switchOutTarget.hp > 0) { switchOutTarget.leaveField(false); - globalScene.queueMessage(i18next.t("moveTriggers:fled", { pokemonName: getPokemonNameWithAffix(switchOutTarget) }), null, true, 500); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:fled", { pokemonName: getPokemonNameWithAffix(switchOutTarget) }), null, true, 500); // in double battles redirect potential moves off fled pokemon if (globalScene.currentBattle.double && !isNullOrUndefined(allyPokemon)) { @@ -6351,13 +6351,13 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { globalScene.clearEnemyHeldItemModifiers(switchOutTarget); if (!allyPokemon?.isActive(true) && switchOutTarget.hp) { - globalScene.pushPhase(new BattleEndPhase(false)); + globalScene.phaseManager.pushPhase(new BattleEndPhase(false)); if (globalScene.gameMode.hasRandomBiomes || globalScene.isNewBiome()) { - globalScene.pushPhase(new SelectBiomePhase()); + globalScene.phaseManager.pushPhase(new SelectBiomePhase()); } - globalScene.pushPhase(new NewBattlePhase()); + globalScene.phaseManager.pushPhase(new NewBattlePhase()); } } @@ -6525,7 +6525,7 @@ export class CopyTypeAttr extends MoveEffectAttr { user.summonData.types = targetTypes; user.updateInfo(); - globalScene.queueMessage(i18next.t("moveTriggers:copyType", { pokemonName: getPokemonNameWithAffix(user), targetPokemonName: getPokemonNameWithAffix(target) })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:copyType", { pokemonName: getPokemonNameWithAffix(user), targetPokemonName: getPokemonNameWithAffix(target) })); return true; } @@ -6556,7 +6556,7 @@ export class CopyBiomeTypeAttr extends MoveEffectAttr { user.summonData.types = [ typeChange ]; user.updateInfo(); - globalScene.queueMessage(i18next.t("moveTriggers:transformedIntoType", { pokemonName: getPokemonNameWithAffix(user), typeName: i18next.t(`pokemonInfo:Type.${PokemonType[typeChange]}`) })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:transformedIntoType", { pokemonName: getPokemonNameWithAffix(user), typeName: i18next.t(`pokemonInfo:Type.${PokemonType[typeChange]}`) })); return true; } @@ -6661,7 +6661,7 @@ export class ChangeTypeAttr extends MoveEffectAttr { target.summonData.types = [ this.type ]; target.updateInfo(); - globalScene.queueMessage(i18next.t("moveTriggers:transformedIntoType", { pokemonName: getPokemonNameWithAffix(target), typeName: i18next.t(`pokemonInfo:Type.${PokemonType[this.type]}`) })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:transformedIntoType", { pokemonName: getPokemonNameWithAffix(target), typeName: i18next.t(`pokemonInfo:Type.${PokemonType[this.type]}`) })); return true; } @@ -6684,7 +6684,7 @@ export class AddTypeAttr extends MoveEffectAttr { target.summonData.addedType = this.type; target.updateInfo(); - globalScene.queueMessage(i18next.t("moveTriggers:addType", { typeName: i18next.t(`pokemonInfo:Type.${PokemonType[this.type]}`), pokemonName: getPokemonNameWithAffix(target) })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:addType", { typeName: i18next.t(`pokemonInfo:Type.${PokemonType[this.type]}`), pokemonName: getPokemonNameWithAffix(target) })); return true; } @@ -6706,7 +6706,7 @@ export class FirstMoveTypeAttr extends MoveEffectAttr { const firstMoveType = target.getMoveset()[0].getMove().type; user.summonData.types = [ firstMoveType ]; - globalScene.queueMessage(i18next.t("battle:transformedIntoType", { pokemonName: getPokemonNameWithAffix(user), type: i18next.t(`pokemonInfo:Type.${PokemonType[firstMoveType]}`) })); + globalScene.phaseManager.queueMessage(i18next.t("battle:transformedIntoType", { pokemonName: getPokemonNameWithAffix(user), type: i18next.t(`pokemonInfo:Type.${PokemonType[firstMoveType]}`) })); return true; } @@ -6725,7 +6725,7 @@ class CallMoveAttr extends OverrideMoveEffectAttr { const replaceMoveTarget = move.moveTarget === MoveTarget.NEAR_OTHER ? MoveTarget.NEAR_ENEMY : undefined; const moveTargets = getMoveTargets(user, move.id, replaceMoveTarget); if (moveTargets.targets.length === 0) { - globalScene.queueMessage(i18next.t("battle:attackFailed")); + globalScene.phaseManager.queueMessage(i18next.t("battle:attackFailed")); console.log("CallMoveAttr failed due to no targets."); return false; } @@ -6733,8 +6733,8 @@ class CallMoveAttr extends OverrideMoveEffectAttr { ? moveTargets.targets : [ this.hasTarget ? target.getBattlerIndex() : moveTargets.targets[user.randBattleSeedInt(moveTargets.targets.length)] ]; // account for Mirror Move having a target already user.getMoveQueue().push({ move: move.id, targets: targets, virtual: true, ignorePP: true }); - globalScene.unshiftPhase(new LoadMoveAnimPhase(move.id)); - globalScene.unshiftPhase(new MovePhase(user, targets, new PokemonMove(move.id, 0, 0, true), true, true)); + globalScene.phaseManager.unshiftPhase(new LoadMoveAnimPhase(move.id)); + globalScene.phaseManager.unshiftPhase(new MovePhase(user, targets, new PokemonMove(move.id, 0, 0, true), true, true)); return true; } } @@ -6962,8 +6962,8 @@ export class NaturePowerAttr extends OverrideMoveEffectAttr { } user.getMoveQueue().push({ move: moveId, targets: [ target.getBattlerIndex() ], ignorePP: true }); - globalScene.unshiftPhase(new LoadMoveAnimPhase(moveId)); - globalScene.unshiftPhase(new MovePhase(user, [ target.getBattlerIndex() ], new PokemonMove(moveId, 0, 0, true), true)); + globalScene.phaseManager.unshiftPhase(new LoadMoveAnimPhase(moveId)); + globalScene.phaseManager.unshiftPhase(new MovePhase(user, [ target.getBattlerIndex() ], new PokemonMove(moveId, 0, 0, true), true)); return true; } } @@ -7044,13 +7044,13 @@ export class RepeatMoveAttr extends MoveEffectAttr { } } - globalScene.queueMessage(i18next.t("moveTriggers:instructingMove", { + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:instructingMove", { userPokemonName: getPokemonNameWithAffix(user), targetPokemonName: getPokemonNameWithAffix(target) })); target.getMoveQueue().unshift({ move: lastMove.move, targets: moveTargets, ignorePP: false }); target.turnData.extraTurns++; - globalScene.appendToPhase(new MovePhase(target, moveTargets, movesetMove), MoveEndPhase); + globalScene.phaseManager.appendToPhase(new MovePhase(target, moveTargets, movesetMove), MoveEndPhase); return true; } @@ -7165,7 +7165,7 @@ export class ReducePpMoveAttr extends MoveEffectAttr { const message = i18next.t("battle:ppReduced", { targetName: getPokemonNameWithAffix(target), moveName: movesetMove.getName(), reduction: (movesetMove.ppUsed) - lastPpUsed }); globalScene.eventTarget.dispatchEvent(new MoveUsedEvent(target.id, movesetMove.getMove(), movesetMove.ppUsed)); - globalScene.queueMessage(message); + globalScene.phaseManager.queueMessage(message); return true; } @@ -7276,7 +7276,7 @@ export class MovesetCopyMoveAttr extends OverrideMoveEffectAttr { user.summonData.moveset = user.getMoveset().slice(0); user.summonData.moveset[thisMoveIndex] = new PokemonMove(copiedMove.id, 0, 0); - globalScene.queueMessage(i18next.t("moveTriggers:copiedMove", { pokemonName: getPokemonNameWithAffix(user), moveName: copiedMove.name })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:copiedMove", { pokemonName: getPokemonNameWithAffix(user), moveName: copiedMove.name })); return true; } @@ -7326,7 +7326,7 @@ export class SketchAttr extends MoveEffectAttr { user.setMove(sketchIndex, sketchedMove.id); - globalScene.queueMessage(i18next.t("moveTriggers:sketchedMove", { pokemonName: getPokemonNameWithAffix(user), moveName: sketchedMove.name })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:sketchedMove", { pokemonName: getPokemonNameWithAffix(user), moveName: sketchedMove.name })); return true; } @@ -7381,9 +7381,9 @@ export class AbilityChangeAttr extends MoveEffectAttr { globalScene.triggerPokemonFormChange(moveTarget, SpeciesFormChangeRevertWeatherFormTrigger); if (moveTarget.breakIllusion()) { - globalScene.queueMessage(i18next.t("abilityTriggers:illusionBreak", { pokemonName: getPokemonNameWithAffix(moveTarget) })); + globalScene.phaseManager.queueMessage(i18next.t("abilityTriggers:illusionBreak", { pokemonName: getPokemonNameWithAffix(moveTarget) })); } - globalScene.queueMessage(i18next.t("moveTriggers:acquiredAbility", { pokemonName: getPokemonNameWithAffix(moveTarget), abilityName: allAbilities[this.ability].name })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:acquiredAbility", { pokemonName: getPokemonNameWithAffix(moveTarget), abilityName: allAbilities[this.ability].name })); moveTarget.setTempAbility(allAbilities[this.ability]); globalScene.triggerPokemonFormChange(moveTarget, SpeciesFormChangeRevertWeatherFormTrigger); return true; @@ -7408,13 +7408,13 @@ export class AbilityCopyAttr extends MoveEffectAttr { return false; } - globalScene.queueMessage(i18next.t("moveTriggers:copiedTargetAbility", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), abilityName: allAbilities[target.getAbility().id].name })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:copiedTargetAbility", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), abilityName: allAbilities[target.getAbility().id].name })); user.setTempAbility(target.getAbility()); const ally = user.getAlly(); if (this.copyToPartner && globalScene.currentBattle?.double && !isNullOrUndefined(ally) && ally.hp) { // TODO is this the best way to check that the ally is active? - globalScene.queueMessage(i18next.t("moveTriggers:copiedTargetAbility", { pokemonName: getPokemonNameWithAffix(ally), targetName: getPokemonNameWithAffix(target), abilityName: allAbilities[target.getAbility().id].name })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:copiedTargetAbility", { pokemonName: getPokemonNameWithAffix(ally), targetName: getPokemonNameWithAffix(target), abilityName: allAbilities[target.getAbility().id].name })); ally.setTempAbility(target.getAbility()); } @@ -7447,7 +7447,7 @@ export class AbilityGiveAttr extends MoveEffectAttr { return false; } - globalScene.queueMessage(i18next.t("moveTriggers:acquiredAbility", { pokemonName: getPokemonNameWithAffix(target), abilityName: allAbilities[user.getAbility().id].name })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:acquiredAbility", { pokemonName: getPokemonNameWithAffix(target), abilityName: allAbilities[user.getAbility().id].name })); target.setTempAbility(user.getAbility()); @@ -7467,7 +7467,7 @@ export class SwitchAbilitiesAttr extends MoveEffectAttr { const tempAbility = user.getAbility(); - globalScene.queueMessage(i18next.t("moveTriggers:swappedAbilitiesWithTarget", { pokemonName: getPokemonNameWithAffix(user) })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:swappedAbilitiesWithTarget", { pokemonName: getPokemonNameWithAffix(user) })); user.setTempAbility(target.getAbility()); target.setTempAbility(tempAbility); @@ -7497,7 +7497,7 @@ export class SuppressAbilitiesAttr extends MoveEffectAttr { return false; } - globalScene.queueMessage(i18next.t("moveTriggers:suppressAbilities", { pokemonName: getPokemonNameWithAffix(target) })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:suppressAbilities", { pokemonName: getPokemonNameWithAffix(target) })); target.suppressAbility(); @@ -7550,9 +7550,9 @@ export class TransformAttr extends MoveEffectAttr { return false; } - globalScene.unshiftPhase(new PokemonTransformPhase(user.getBattlerIndex(), target.getBattlerIndex())); + globalScene.phaseManager.unshiftPhase(new PokemonTransformPhase(user.getBattlerIndex(), target.getBattlerIndex())); - globalScene.queueMessage(i18next.t("moveTriggers:transformedIntoTarget", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:transformedIntoTarget", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) })); return true; } @@ -7589,7 +7589,7 @@ export class SwapStatAttr extends MoveEffectAttr { user.setStat(this.stat, target.getStat(this.stat, false), false); target.setStat(this.stat, temp, false); - globalScene.queueMessage(i18next.t("moveTriggers:switchedStat", { + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:switchedStat", { pokemonName: getPokemonNameWithAffix(user), stat: i18next.t(getStatKey(this.stat)), })); @@ -7635,7 +7635,7 @@ export class ShiftStatAttr extends MoveEffectAttr { user.setStat(this.statToSwitch, secondStat, false); user.setStat(this.statToSwitchWith, firstStat, false); - globalScene.queueMessage(i18next.t("moveTriggers:shiftedStats", { + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:shiftedStats", { pokemonName: getPokemonNameWithAffix(user), statToSwitch: i18next.t(getStatKey(this.statToSwitch)), statToSwitchWith: i18next.t(getStatKey(this.statToSwitchWith)) @@ -7694,7 +7694,7 @@ export class AverageStatsAttr extends MoveEffectAttr { target.setStat(s, avg, false); } - globalScene.queueMessage(i18next.t(this.msgKey, { pokemonName: getPokemonNameWithAffix(user) })); + globalScene.phaseManager.queueMessage(i18next.t(this.msgKey, { pokemonName: getPokemonNameWithAffix(user) })); return true; } @@ -7709,7 +7709,7 @@ export class MoneyAttr extends MoveEffectAttr { apply(user: Pokemon, target: Pokemon, move: Move): boolean { globalScene.currentBattle.moneyScattered += globalScene.getWaveMoneyAmount(0.2); - globalScene.queueMessage(i18next.t("moveTriggers:coinsScatteredEverywhere")); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:coinsScatteredEverywhere")); return true; } } @@ -7733,7 +7733,7 @@ export class DestinyBondAttr extends MoveEffectAttr { * @returns true */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - globalScene.queueMessage(`${i18next.t("moveTriggers:tryingToTakeFoeDown", { pokemonName: getPokemonNameWithAffix(user) })}`); + globalScene.phaseManager.queueMessage(`${i18next.t("moveTriggers:tryingToTakeFoeDown", { pokemonName: getPokemonNameWithAffix(user) })}`); user.addTag(BattlerTagType.DESTINY_BOND, undefined, move.id, user.id); return true; } @@ -7847,12 +7847,12 @@ export class AfterYouAttr extends MoveEffectAttr { * @returns true */ override apply(user: Pokemon, target: Pokemon, _move: Move, _args: any[]): boolean { - globalScene.queueMessage(i18next.t("moveTriggers:afterYou", { targetName: getPokemonNameWithAffix(target) })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:afterYou", { targetName: getPokemonNameWithAffix(target) })); //Will find next acting phase of the targeted pokémon, delete it and queue it next on successful delete. - const nextAttackPhase = globalScene.findPhase((phase) => phase.pokemon === target); - if (nextAttackPhase && globalScene.tryRemovePhase((phase: MovePhase) => phase.pokemon === target)) { - globalScene.prependToPhase(new MovePhase(target, [ ...nextAttackPhase.targets ], nextAttackPhase.move), MovePhase); + const nextAttackPhase = globalScene.phaseManager.findPhase((phase) => phase.pokemon === target); + if (nextAttackPhase && globalScene.phaseManager.tryRemovePhase((phase: MovePhase) => phase.pokemon === target)) { + globalScene.phaseManager.prependToPhase(new MovePhase(target, [ ...nextAttackPhase.targets ], nextAttackPhase.move), MovePhase); } return true; @@ -7875,19 +7875,19 @@ export class ForceLastAttr extends MoveEffectAttr { * @returns true */ override apply(user: Pokemon, target: Pokemon, _move: Move, _args: any[]): boolean { - globalScene.queueMessage(i18next.t("moveTriggers:forceLast", { targetPokemonName: getPokemonNameWithAffix(target) })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:forceLast", { targetPokemonName: getPokemonNameWithAffix(target) })); - const targetMovePhase = globalScene.findPhase((phase) => phase.pokemon === target); - if (targetMovePhase && !targetMovePhase.isForcedLast() && globalScene.tryRemovePhase((phase: MovePhase) => phase.pokemon === target)) { + const targetMovePhase = globalScene.phaseManager.findPhase((phase) => phase.pokemon === target); + if (targetMovePhase && !targetMovePhase.isForcedLast() && globalScene.phaseManager.tryRemovePhase((phase: MovePhase) => phase.pokemon === target)) { // Finding the phase to insert the move in front of - // Either the end of the turn or in front of another, slower move which has also been forced last - const prependPhase = globalScene.findPhase((phase) => + const prependPhase = globalScene.phaseManager.findPhase((phase) => [ MovePhase, MoveEndPhase ].every(cls => !(phase instanceof cls)) || (phase.is("MovePhase")) && phaseForcedSlower(phase, target, !!globalScene.arena.getTag(ArenaTagType.TRICK_ROOM)) ); if (prependPhase) { - globalScene.phaseQueue.splice( - globalScene.phaseQueue.indexOf(prependPhase), + globalScene.phaseManager.phaseQueue.splice( + globalScene.phaseManager.phaseQueue.indexOf(prependPhase), 0, new MovePhase(target, [ ...targetMovePhase.targets ], targetMovePhase.move, false, false, false, true) ); @@ -7920,7 +7920,7 @@ const failIfDampCondition: MoveConditionFunc = (user, target, move) => { globalScene.getField(true).map(p=>applyAbAttrs(FieldPreventExplosiveMovesAbAttr, p, cancelled)); // Queue a message if an ability prevented usage of the move if (cancelled.value) { - globalScene.queueMessage(i18next.t("moveTriggers:cannotUseMove", { pokemonName: getPokemonNameWithAffix(user), moveName: move.name })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:cannotUseMove", { pokemonName: getPokemonNameWithAffix(user), moveName: move.name })); } return !cancelled.value; }; @@ -7929,7 +7929,7 @@ const userSleptOrComatoseCondition: MoveConditionFunc = (user: Pokemon, target: const targetSleptOrComatoseCondition: MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => target.status?.effect === StatusEffect.SLEEP || target.hasAbility(AbilityId.COMATOSE); -const failIfLastCondition: MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => globalScene.phaseQueue.find(phase => phase.is("MovePhase")) !== undefined; +const failIfLastCondition: MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => globalScene.phaseManager.phaseQueue.find(phase => phase.is("MovePhase")) !== undefined; const failIfLastInPartyCondition: MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => { const party: Pokemon[] = user.isPlayer() ? globalScene.getPlayerParty() : globalScene.getEnemyParty(); @@ -8107,7 +8107,7 @@ export class ResistLastMoveTypeAttr extends MoveEffectAttr { } const type = validTypes[user.randBattleSeedInt(validTypes.length)]; user.summonData.types = [ type ]; - globalScene.queueMessage(i18next.t("battle:transformedIntoType", { pokemonName: getPokemonNameWithAffix(user), type: toReadableString(PokemonType[type]) })); + globalScene.phaseManager.queueMessage(i18next.t("battle:transformedIntoType", { pokemonName: getPokemonNameWithAffix(user), type: toReadableString(PokemonType[type]) })); user.updateInfo(); return true; @@ -8166,7 +8166,7 @@ export class ExposedMoveAttr extends AddBattlerTagAttr { return false; } - globalScene.queueMessage(i18next.t("moveTriggers:exposedMove", { pokemonName: getPokemonNameWithAffix(user), targetPokemonName: getPokemonNameWithAffix(target) })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:exposedMove", { pokemonName: getPokemonNameWithAffix(user), targetPokemonName: getPokemonNameWithAffix(target) })); return true; } @@ -8802,7 +8802,7 @@ export function initMoves() { .reflectable(), new SelfStatusMove(MoveId.BELLY_DRUM, PokemonType.NORMAL, -1, 10, -1, 0, 2) .attr(CutHpStatStageBoostAttr, [ Stat.ATK ], 12, 2, (user) => { - globalScene.queueMessage(i18next.t("moveTriggers:cutOwnHpAndMaximizedStat", { pokemonName: getPokemonNameWithAffix(user), statName: i18next.t(getStatKey(Stat.ATK)) })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:cutOwnHpAndMaximizedStat", { pokemonName: getPokemonNameWithAffix(user), statName: i18next.t(getStatKey(Stat.ATK)) })); }), new AttackMove(MoveId.SLUDGE_BOMB, PokemonType.POISON, MoveCategory.SPECIAL, 90, 100, 10, 30, 0, 2) .attr(StatusEffectAttr, StatusEffect.POISON) @@ -10370,7 +10370,7 @@ export function initMoves() { .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) .attr(AddBattlerTagAttr, BattlerTagType.BURNED_UP, true, false) .attr(RemoveTypeAttr, PokemonType.FIRE, (user) => { - globalScene.queueMessage(i18next.t("moveTriggers:burnedItselfOut", { pokemonName: getPokemonNameWithAffix(user) })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:burnedItselfOut", { pokemonName: getPokemonNameWithAffix(user) })); }), new StatusMove(MoveId.SPEED_SWAP, PokemonType.PSYCHIC, -1, 10, -1, 0, 7) .attr(SwapStatAttr, Stat.SPD) @@ -11154,7 +11154,7 @@ export function initMoves() { }) .attr(AddBattlerTagAttr, BattlerTagType.DOUBLE_SHOCKED, true, false) .attr(RemoveTypeAttr, PokemonType.ELECTRIC, (user) => { - globalScene.queueMessage(i18next.t("moveTriggers:usedUpAllElectricity", { pokemonName: getPokemonNameWithAffix(user) })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:usedUpAllElectricity", { pokemonName: getPokemonNameWithAffix(user) })); }), new AttackMove(MoveId.GIGATON_HAMMER, PokemonType.STEEL, MoveCategory.PHYSICAL, 160, 100, 5, -1, 0, 9) .makesContact(false) diff --git a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts index ae5cd2b2a99..5f69090064f 100644 --- a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts +++ b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts @@ -182,7 +182,7 @@ export const ATrainersTestEncounter: MysteryEncounter = MysteryEncounterBuilder. async () => { const encounter = globalScene.currentBattle.mysteryEncounter!; // Full heal party - globalScene.unshiftPhase(new PartyHealPhase(true)); + globalScene.phaseManager.unshiftPhase(new PartyHealPhase(true)); const eggOptions: IEggOptions = { pulled: false, diff --git a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts index b14caa4e2c3..e23b5024599 100644 --- a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts +++ b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts @@ -237,7 +237,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = MysteryEncounterBuilde tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { queueEncounterMessage(`${namespace}:option.1.boss_enraged`); - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new StatStageChangePhase(pokemon.getBattlerIndex(), true, statChangesForBattle, 1), ); }, diff --git a/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts b/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts index 2f4dfaa5f99..87cd8f207c4 100644 --- a/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts +++ b/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts @@ -137,7 +137,7 @@ export const AnOfferYouCantRefuseEncounter: MysteryEncounter = MysteryEncounterB }) .withOptionPhase(async () => { // Give the player a Shiny Charm - globalScene.unshiftPhase(new ModifierRewardPhase(modifierTypes.SHINY_CHARM)); + globalScene.phaseManager.unshiftPhase(new ModifierRewardPhase(modifierTypes.SHINY_CHARM)); leaveEncounterWithoutBattle(true); }) .build(), diff --git a/src/data/mystery-encounters/encounters/berries-abound-encounter.ts b/src/data/mystery-encounters/encounters/berries-abound-encounter.ts index 7f54e51565e..3de16c7086e 100644 --- a/src/data/mystery-encounters/encounters/berries-abound-encounter.ts +++ b/src/data/mystery-encounters/encounters/berries-abound-encounter.ts @@ -237,7 +237,7 @@ export const BerriesAboundEncounter: MysteryEncounter = MysteryEncounterBuilder. config.pokemonConfigs![0].tags = [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON]; config.pokemonConfigs![0].mysteryEncounterBattleEffects = (pokemon: Pokemon) => { queueEncounterMessage(`${namespace}:option.2.boss_enraged`); - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new StatStageChangePhase(pokemon.getBattlerIndex(), true, statChangesForBattle, 1), ); }; diff --git a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts index c080122f922..cd8289163eb 100644 --- a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts +++ b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts @@ -766,7 +766,7 @@ function doBugTypeMoveTutor(): Promise { // Option select complete, handle if they are learning a move if (result && result.selectedOptionIndex < moveOptions.length) { - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new LearnMovePhase(result.selectedPokemonIndex, moveOptions[result.selectedOptionIndex].moveId), ); } diff --git a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts index c7f9a99569d..66cd1ae0509 100644 --- a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts +++ b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts @@ -176,7 +176,7 @@ export const DancingLessonsEncounter: MysteryEncounter = MysteryEncounterBuilder tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { queueEncounterMessage(`${namespace}:option.1.boss_enraged`); - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new StatStageChangePhase( pokemon.getBattlerIndex(), true, @@ -245,7 +245,7 @@ export const DancingLessonsEncounter: MysteryEncounter = MysteryEncounterBuilder const onPokemonSelected = (pokemon: PlayerPokemon) => { encounter.setDialogueToken("selectedPokemon", pokemon.getNameToRender()); - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new LearnMovePhase(globalScene.getPlayerParty().indexOf(pokemon), MoveId.REVELATION_DANCE), ); diff --git a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts index c54cb232087..1385e9c5a75 100644 --- a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts +++ b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts @@ -165,7 +165,7 @@ export const DarkDealEncounter: MysteryEncounter = MysteryEncounterBuilder.withE .withOptionPhase(async () => { // Give the player 5 Rogue Balls const encounter = globalScene.currentBattle.mysteryEncounter!; - globalScene.unshiftPhase(new ModifierRewardPhase(modifierTypes.ROGUE_BALL)); + globalScene.phaseManager.unshiftPhase(new ModifierRewardPhase(modifierTypes.ROGUE_BALL)); // Start encounter with random legendary (7-10 starter strength) that has level additive // If this is a mono-type challenge, always ensure the required type is filtered for diff --git a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts index 8d3d30bcd66..c321b5f9674 100644 --- a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts +++ b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts @@ -65,10 +65,10 @@ const doEventReward = () => { return !(existingCharm && existingCharm.getStackCount() >= existingCharm.getMaxStackCount()); }); if (candidates.length > 0) { - globalScene.unshiftPhase(new ModifierRewardPhase(modifierTypes[randSeedItem(candidates)])); + globalScene.phaseManager.unshiftPhase(new ModifierRewardPhase(modifierTypes[randSeedItem(candidates)])); } else { // At max stacks, give a Voucher instead - globalScene.unshiftPhase(new ModifierRewardPhase(modifierTypes.VOUCHER)); + globalScene.phaseManager.unshiftPhase(new ModifierRewardPhase(modifierTypes.VOUCHER)); } } }; @@ -181,7 +181,7 @@ export const DelibirdyEncounter: MysteryEncounter = MysteryEncounterBuilder.with ); doEventReward(); } else { - globalScene.unshiftPhase(new ModifierRewardPhase(modifierTypes.AMULET_COIN)); + globalScene.phaseManager.unshiftPhase(new ModifierRewardPhase(modifierTypes.AMULET_COIN)); doEventReward(); } @@ -266,7 +266,7 @@ export const DelibirdyEncounter: MysteryEncounter = MysteryEncounterBuilder.with ); doEventReward(); } else { - globalScene.unshiftPhase(new ModifierRewardPhase(modifierTypes.CANDY_JAR)); + globalScene.phaseManager.unshiftPhase(new ModifierRewardPhase(modifierTypes.CANDY_JAR)); doEventReward(); } } else { @@ -288,7 +288,7 @@ export const DelibirdyEncounter: MysteryEncounter = MysteryEncounterBuilder.with ); doEventReward(); } else { - globalScene.unshiftPhase(new ModifierRewardPhase(modifierTypes.BERRY_POUCH)); + globalScene.phaseManager.unshiftPhase(new ModifierRewardPhase(modifierTypes.BERRY_POUCH)); doEventReward(); } } @@ -372,7 +372,7 @@ export const DelibirdyEncounter: MysteryEncounter = MysteryEncounterBuilder.with ); doEventReward(); } else { - globalScene.unshiftPhase(new ModifierRewardPhase(modifierTypes.HEALING_CHARM)); + globalScene.phaseManager.unshiftPhase(new ModifierRewardPhase(modifierTypes.HEALING_CHARM)); doEventReward(); } diff --git a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts index 872e6300a29..ced04ce224d 100644 --- a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts +++ b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts @@ -92,7 +92,7 @@ export const FieryFalloutEncounter: MysteryEncounter = MysteryEncounterBuilder.w gender: Gender.MALE, tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new StatStageChangePhase(pokemon.getBattlerIndex(), true, [Stat.SPDEF, Stat.SPD], 1), ); }, @@ -103,7 +103,7 @@ export const FieryFalloutEncounter: MysteryEncounter = MysteryEncounterBuilder.w gender: Gender.FEMALE, tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new StatStageChangePhase(pokemon.getBattlerIndex(), true, [Stat.SPDEF, Stat.SPD], 1), ); }, diff --git a/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts b/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts index ecc2e17a06f..6df8ca8b167 100644 --- a/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts +++ b/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts @@ -76,7 +76,9 @@ export const FightOrFlightEncounter: MysteryEncounter = MysteryEncounterBuilder. queueEncounterMessage(`${namespace}:option.1.stat_boost`); // Randomly boost 1 stat 2 stages // Cannot boost Spd, Acc, or Evasion - globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [randSeedInt(4, 1)], 2)); + globalScene.phaseManager.unshiftPhase( + new StatStageChangePhase(pokemon.getBattlerIndex(), true, [randSeedInt(4, 1)], 2), + ); }, }, ], diff --git a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts index 7694f62eac4..42bfe76d98e 100644 --- a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts +++ b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts @@ -411,13 +411,13 @@ function summonPlayerPokemonAnimation(pokemon: PlayerPokemon): Promise { pokemon.resetSummonData(); globalScene.time.delayedCall(1000, () => { if (pokemon.isShiny()) { - globalScene.unshiftPhase(new ShinySparklePhase(pokemon.getBattlerIndex())); + globalScene.phaseManager.unshiftPhase(new ShinySparklePhase(pokemon.getBattlerIndex())); } pokemon.resetTurnData(); globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeActiveTrigger, true); - globalScene.pushPhase(new PostSummonPhase(pokemon.getBattlerIndex())); + globalScene.phaseManager.pushPhase(new PostSummonPhase(pokemon.getBattlerIndex())); resolve(); }); }, diff --git a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts index 9f699f7d045..42167d240f9 100644 --- a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts @@ -189,8 +189,8 @@ export const MysteriousChestEncounter: MysteryEncounter = MysteryEncounterBuilde const allowedPokemon = globalScene.getPokemonAllowedInBattle(); if (allowedPokemon.length === 0) { // If there are no longer any legal pokemon in the party, game over. - globalScene.clearPhaseQueue(); - globalScene.unshiftPhase(new GameOverPhase()); + globalScene.phaseManager.clearPhaseQueue(); + globalScene.phaseManager.unshiftPhase(new GameOverPhase()); } else { // Show which Pokemon was KOed, then start battle against Gimmighoul await transitionMysteryEncounterIntroVisuals(true, true, 500); diff --git a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts index 7a12c86edff..54e15dcb102 100644 --- a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts +++ b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts @@ -276,7 +276,7 @@ async function summonSafariPokemon() { const encounter = globalScene.currentBattle.mysteryEncounter!; // Message pokemon remaining encounter.setDialogueToken("remainingCount", encounter.misc.safariPokemonRemaining); - globalScene.queueMessage(getEncounterText(`${namespace}:safari.remaining_count`) ?? "", null, true); + globalScene.phaseManager.queueMessage(getEncounterText(`${namespace}:safari.remaining_count`) ?? "", null, true); // Generate pokemon using safariPokemonRemaining so they are always the same pokemon no matter how many turns are taken // Safari pokemon roll twice on shiny and HA chances, but are otherwise normal @@ -325,7 +325,7 @@ async function summonSafariPokemon() { encounter.misc.pokemon = pokemon; encounter.misc.safariPokemonRemaining -= 1; - globalScene.unshiftPhase(new SummonPhase(0, false)); + globalScene.phaseManager.unshiftPhase(new SummonPhase(0, false)); encounter.setDialogueToken("pokemonName", getPokemonNameWithAffix(pokemon)); @@ -336,7 +336,7 @@ async function summonSafariPokemon() { const ivScannerModifier = globalScene.findModifier(m => m instanceof IvScannerModifier); if (ivScannerModifier) { - globalScene.pushPhase(new ScanIvsPhase(pokemon.getBattlerIndex())); + globalScene.phaseManager.pushPhase(new ScanIvsPhase(pokemon.getBattlerIndex())); } } @@ -559,7 +559,7 @@ async function doEndTurn(cursorIndex: number) { leaveEncounterWithoutBattle(true); } } else { - globalScene.queueMessage(getEncounterText(`${namespace}:safari.watching`) ?? "", 0, null, 1000); + globalScene.phaseManager.queueMessage(getEncounterText(`${namespace}:safari.watching`) ?? "", 0, null, 1000); initSubsequentOptionSelect({ overrideOptions: safariZoneGameOptions, startingCursorIndex: cursorIndex, diff --git a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts index 196d27c3f30..a0898f7cfec 100644 --- a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts +++ b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts @@ -155,7 +155,7 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = MysteryEncounterBuil async () => { // Fall asleep waiting for Snorlax // Full heal party - globalScene.unshiftPhase(new PartyHealPhase(true)); + globalScene.phaseManager.unshiftPhase(new PartyHealPhase(true)); queueEncounterMessage(`${namespace}:option.2.rest_result`); leaveEncounterWithoutBattle(); }, diff --git a/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts b/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts index f6bf5575120..b101837adb9 100644 --- a/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts +++ b/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts @@ -227,7 +227,9 @@ async function doBiomeTransitionDialogueAndBattleInit() { tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { queueEncounterMessage(`${namespace}:boss_enraged`); - globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, statChangesForBattle, 1)); + globalScene.phaseManager.unshiftPhase( + new StatStageChangePhase(pokemon.getBattlerIndex(), true, statChangesForBattle, 1), + ); }, }, ], diff --git a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts index 5c3a4dd1a81..fdfcc8f2f13 100644 --- a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts @@ -658,8 +658,8 @@ function onGameOver() { globalScene.playBgm(globalScene.arena.bgm); // Clear any leftover battle phases - globalScene.clearPhaseQueue(); - globalScene.clearPhaseQueueSplice(); + globalScene.phaseManager.clearPhaseQueue(); + globalScene.phaseManager.clearPhaseQueueSplice(); // Return enemy Pokemon const pokemon = globalScene.getEnemyPokemon(); diff --git a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts index 33f43617913..e2b6d62745b 100644 --- a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts @@ -116,7 +116,7 @@ export const TheStrongStuffEncounter: MysteryEncounter = MysteryEncounterBuilder tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { queueEncounterMessage(`${namespace}:option.2.stat_boost`); - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new StatStageChangePhase(pokemon.getBattlerIndex(), true, [Stat.DEF, Stat.SPDEF], 1), ); }, diff --git a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts index 0776d89ed63..05e036e9189 100644 --- a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts @@ -143,7 +143,7 @@ export const TheWinstrateChallengeEncounter: MysteryEncounter = MysteryEncounter }, async () => { // Refuse the challenge, they full heal the party and give the player a Rarer Candy - globalScene.unshiftPhase(new PartyHealPhase(true)); + globalScene.phaseManager.unshiftPhase(new PartyHealPhase(true)); setEncounterRewards({ guaranteedModifierTypeFuncs: [modifierTypes.RARER_CANDY], fillRemaining: false, @@ -209,7 +209,7 @@ function endTrainerBattleAndShowDialogue(): Promise { for (const pokemon of playerField) { pokemon.lapseTag(BattlerTagType.COMMANDED); } - playerField.forEach((_, p) => globalScene.unshiftPhase(new ReturnPhase(p))); + playerField.forEach((_, p) => globalScene.phaseManager.unshiftPhase(new ReturnPhase(p))); for (const pokemon of globalScene.getPlayerParty()) { // Only trigger form change when Eiscue is in Noice form @@ -227,7 +227,7 @@ function endTrainerBattleAndShowDialogue(): Promise { applyPostBattleInitAbAttrs(PostBattleInitAbAttr, pokemon); } - globalScene.unshiftPhase(new ShowTrainerPhase()); + globalScene.phaseManager.unshiftPhase(new ShowTrainerPhase()); // Hide the trainer and init next battle const trainer = globalScene.currentBattle.trainer; // Unassign previous trainer from battle so it isn't destroyed before animation completes diff --git a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts index e51a8554120..e917574a065 100644 --- a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts +++ b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts @@ -103,7 +103,7 @@ export const UncommonBreedEncounter: MysteryEncounter = MysteryEncounterBuilder. tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { queueEncounterMessage(`${namespace}:option.1.stat_boost`); - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new StatStageChangePhase(pokemon.getBattlerIndex(), true, statChangesForBattle, 1), ); }, diff --git a/src/data/mystery-encounters/utils/encounter-dialogue-utils.ts b/src/data/mystery-encounters/utils/encounter-dialogue-utils.ts index 296d94093d9..e1055f57496 100644 --- a/src/data/mystery-encounters/utils/encounter-dialogue-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-dialogue-utils.ts @@ -51,7 +51,7 @@ function getTextWithDialogueTokens(keyOrString: string): string | null { */ export function queueEncounterMessage(contentKey: string): void { const text: string | null = getEncounterText(contentKey); - globalScene.queueMessage(text ?? "", null, true); + globalScene.phaseManager.queueMessage(text ?? "", null, true); } /** diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index 5736835d98a..c566ed68476 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -428,7 +428,7 @@ export async function initBattleWithEnemyConfig(partyConfig: EnemyPartyConfig): console.log("Moveset:", moveset); }); - globalScene.pushPhase(new MysteryEncounterBattlePhase(partyConfig.disableSwitch)); + globalScene.phaseManager.pushPhase(new MysteryEncounterBattlePhase(partyConfig.disableSwitch)); await Promise.all(loadEnemyAssets); battle.enemyParty.forEach((enemyPokemon_2, e_1) => { @@ -480,7 +480,7 @@ export function updatePlayerMoney(changeValue: number, playSound = true, showMes } if (showMessage) { if (changeValue < 0) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("mysteryEncounterMessages:paid_money", { amount: -changeValue, }), @@ -488,7 +488,7 @@ export function updatePlayerMoney(changeValue: number, playSound = true, showMes true, ); } else { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("mysteryEncounterMessages:receive_money", { amount: changeValue, }), @@ -767,9 +767,9 @@ export function setEncounterRewards( } if (customShopRewards) { - globalScene.unshiftPhase(new SelectModifierPhase(0, undefined, customShopRewards)); + globalScene.phaseManager.unshiftPhase(new SelectModifierPhase(0, undefined, customShopRewards)); } else { - globalScene.tryRemovePhase(p => p.is("MysteryEncounterRewardsPhase")); + globalScene.phaseManager.tryRemovePhase(p => p.is("MysteryEncounterRewardsPhase")); } if (eggRewards) { @@ -807,7 +807,7 @@ export function setEncounterExp(participantId: number | number[], baseExpValue: const participantIds = Array.isArray(participantId) ? participantId : [participantId]; globalScene.currentBattle.mysteryEncounter!.doEncounterExp = () => { - globalScene.unshiftPhase(new PartyExpPhase(baseExpValue, useWaveIndex, new Set(participantIds))); + globalScene.phaseManager.unshiftPhase(new PartyExpPhase(baseExpValue, useWaveIndex, new Set(participantIds))); return true; }; @@ -829,7 +829,7 @@ export class OptionSelectSettings { * @param optionSelectSettings */ export function initSubsequentOptionSelect(optionSelectSettings: OptionSelectSettings) { - globalScene.pushPhase(new MysteryEncounterPhase(optionSelectSettings)); + globalScene.phaseManager.pushPhase(new MysteryEncounterPhase(optionSelectSettings)); } /** @@ -843,8 +843,8 @@ export function leaveEncounterWithoutBattle( encounterMode: MysteryEncounterMode = MysteryEncounterMode.NO_BATTLE, ) { globalScene.currentBattle.mysteryEncounter!.encounterMode = encounterMode; - globalScene.clearPhaseQueue(); - globalScene.clearPhaseQueueSplice(); + globalScene.phaseManager.clearPhaseQueue(); + globalScene.phaseManager.clearPhaseQueueSplice(); handleMysteryEncounterVictory(addHealPhase); } @@ -857,8 +857,8 @@ export function handleMysteryEncounterVictory(addHealPhase = false, doNotContinu const allowedPkm = globalScene.getPlayerParty().filter(pkm => pkm.isAllowedInBattle()); if (allowedPkm.length === 0) { - globalScene.clearPhaseQueue(); - globalScene.unshiftPhase(new GameOverPhase()); + globalScene.phaseManager.clearPhaseQueue(); + globalScene.phaseManager.unshiftPhase(new GameOverPhase()); return; } @@ -869,8 +869,8 @@ export function handleMysteryEncounterVictory(addHealPhase = false, doNotContinu return; } if (encounter.encounterMode === MysteryEncounterMode.NO_BATTLE) { - globalScene.pushPhase(new MysteryEncounterRewardsPhase(addHealPhase)); - globalScene.pushPhase(new EggLapsePhase()); + globalScene.phaseManager.pushPhase(new MysteryEncounterRewardsPhase(addHealPhase)); + globalScene.phaseManager.pushPhase(new EggLapsePhase()); } else if ( !globalScene .getEnemyParty() @@ -878,15 +878,15 @@ export function handleMysteryEncounterVictory(addHealPhase = false, doNotContinu encounter.encounterMode !== MysteryEncounterMode.TRAINER_BATTLE ? p.isOnField() : !p?.isFainted(true), ) ) { - globalScene.pushPhase(new BattleEndPhase(true)); + globalScene.phaseManager.pushPhase(new BattleEndPhase(true)); if (encounter.encounterMode === MysteryEncounterMode.TRAINER_BATTLE) { - globalScene.pushPhase(new TrainerVictoryPhase()); + globalScene.phaseManager.pushPhase(new TrainerVictoryPhase()); } if (globalScene.gameMode.isEndless || !globalScene.gameMode.isWaveFinal(globalScene.currentBattle.waveIndex)) { - globalScene.pushPhase(new MysteryEncounterRewardsPhase(addHealPhase)); + globalScene.phaseManager.pushPhase(new MysteryEncounterRewardsPhase(addHealPhase)); if (!encounter.doContinueEncounter) { // Only lapse eggs once for multi-battle encounters - globalScene.pushPhase(new EggLapsePhase()); + globalScene.phaseManager.pushPhase(new EggLapsePhase()); } } } @@ -900,8 +900,8 @@ export function handleMysteryEncounterBattleFailed(addHealPhase = false, doNotCo const allowedPkm = globalScene.getPlayerParty().filter(pkm => pkm.isAllowedInBattle()); if (allowedPkm.length === 0) { - globalScene.clearPhaseQueue(); - globalScene.unshiftPhase(new GameOverPhase()); + globalScene.phaseManager.clearPhaseQueue(); + globalScene.phaseManager.unshiftPhase(new GameOverPhase()); return; } @@ -912,14 +912,14 @@ export function handleMysteryEncounterBattleFailed(addHealPhase = false, doNotCo return; } if (encounter.encounterMode !== MysteryEncounterMode.NO_BATTLE) { - globalScene.pushPhase(new BattleEndPhase(false)); + globalScene.phaseManager.pushPhase(new BattleEndPhase(false)); } - globalScene.pushPhase(new MysteryEncounterRewardsPhase(addHealPhase)); + globalScene.phaseManager.pushPhase(new MysteryEncounterRewardsPhase(addHealPhase)); if (!encounter.doContinueEncounter) { // Only lapse eggs once for multi-battle encounters - globalScene.pushPhase(new EggLapsePhase()); + globalScene.phaseManager.pushPhase(new EggLapsePhase()); } } @@ -1004,12 +1004,14 @@ export function handleMysteryEncounterBattleStartEffects() { } else { source = globalScene.getEnemyField()[0]; } - // @ts-ignore: source cannot be undefined - globalScene.pushPhase(new MovePhase(source, effect.targets, effect.move, effect.followUp, effect.ignorePp)); + globalScene.phaseManager.pushPhase( + // @ts-ignore: source cannot be undefined + new MovePhase(source, effect.targets, effect.move, effect.followUp, effect.ignorePp), + ); }); // Pseudo turn end phase to reset flinch states, Endure, etc. - globalScene.pushPhase(new MysteryEncounterBattleStartCleanupPhase()); + globalScene.phaseManager.pushPhase(new MysteryEncounterBattleStartCleanupPhase()); encounter.startOfBattleEffectsComplete = true; } diff --git a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts index d4102c045c0..757d8173820 100644 --- a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts @@ -675,7 +675,7 @@ export async function catchPokemon( if (!globalScene.getEnemyParty().some(p => p.id === pokemon.id)) { globalScene.getEnemyParty().push(pokemon); } - globalScene.unshiftPhase(new VictoryPhase(pokemon.id, true)); + globalScene.phaseManager.unshiftPhase(new VictoryPhase(pokemon.id, true)); globalScene.pokemonInfoContainer.hide(); if (pokeball) { removePb(pokeball); diff --git a/src/field/arena.ts b/src/field/arena.ts index 2ec98c53afa..1c54382c89b 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -297,8 +297,8 @@ export class Arena { */ trySetWeatherOverride(weather: WeatherType): boolean { this.weather = new Weather(weather, 0); - globalScene.unshiftPhase(new CommonAnimPhase(undefined, undefined, CommonAnim.SUNNY + (weather - 1))); - globalScene.queueMessage(getWeatherStartMessage(weather)!); // TODO: is this bang correct? + globalScene.phaseManager.unshiftPhase(new CommonAnimPhase(undefined, undefined, CommonAnim.SUNNY + (weather - 1))); + globalScene.phaseManager.queueMessage(getWeatherStartMessage(weather)!); // TODO: is this bang correct? return true; } @@ -328,10 +328,10 @@ export class Arena { this.weather?.isImmutable() && ![WeatherType.HARSH_SUN, WeatherType.HEAVY_RAIN, WeatherType.STRONG_WINDS, WeatherType.NONE].includes(weather) ) { - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new CommonAnimPhase(undefined, undefined, CommonAnim.SUNNY + (oldWeatherType - 1), true), ); - globalScene.queueMessage(getLegendaryWeatherContinuesMessage(oldWeatherType)!); + globalScene.phaseManager.queueMessage(getLegendaryWeatherContinuesMessage(oldWeatherType)!); return false; } @@ -348,10 +348,12 @@ export class Arena { ); // TODO: is this bang correct? if (this.weather) { - globalScene.unshiftPhase(new CommonAnimPhase(undefined, undefined, CommonAnim.SUNNY + (weather - 1), true)); - globalScene.queueMessage(getWeatherStartMessage(weather)!); // TODO: is this bang correct? + globalScene.phaseManager.unshiftPhase( + new CommonAnimPhase(undefined, undefined, CommonAnim.SUNNY + (weather - 1), true), + ); + globalScene.phaseManager.queueMessage(getWeatherStartMessage(weather)!); // TODO: is this bang correct? } else { - globalScene.queueMessage(getWeatherClearMessage(oldWeatherType)!); // TODO: is this bang correct? + globalScene.phaseManager.queueMessage(getWeatherClearMessage(oldWeatherType)!); // TODO: is this bang correct? } globalScene @@ -431,11 +433,13 @@ export class Arena { if (this.terrain) { if (!ignoreAnim) { - globalScene.unshiftPhase(new CommonAnimPhase(undefined, undefined, CommonAnim.MISTY_TERRAIN + (terrain - 1))); + globalScene.phaseManager.unshiftPhase( + new CommonAnimPhase(undefined, undefined, CommonAnim.MISTY_TERRAIN + (terrain - 1)), + ); } - globalScene.queueMessage(getTerrainStartMessage(terrain)!); // TODO: is this bang correct? + globalScene.phaseManager.queueMessage(getTerrainStartMessage(terrain)!); // TODO: is this bang correct? } else { - globalScene.queueMessage(getTerrainClearMessage(oldTerrainType)!); // TODO: is this bang correct? + globalScene.phaseManager.queueMessage(getTerrainClearMessage(oldTerrainType)!); // TODO: is this bang correct? } globalScene diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index d26dfd193f9..a6d41074700 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1298,7 +1298,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return false; } // During the Pokemon's MoveEffect phase, the offset is removed to put the Pokemon "in focus" - const currentPhase = globalScene.getCurrentPhase(); + const currentPhase = globalScene.phaseManager.getCurrentPhase(); return !(currentPhase?.is("MoveEffectPhase") && currentPhase.getPokemon() === this); } @@ -2537,7 +2537,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ) { multiplier /= 2; if (!simulated) { - globalScene.queueMessage(i18next.t("weather:strongWindsEffectMessage")); + globalScene.phaseManager.queueMessage(i18next.t("weather:strongWindsEffectMessage")); } } return multiplier as TypeDamageMultiplier; @@ -4011,8 +4011,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * * Once the MoveEffectPhase is over (and calls it's .end() function, shiftPhase() will reset the PhaseQueueSplice via clearPhaseQueueSplice() ) */ - globalScene.setPhaseQueueSplice(); - globalScene.unshiftPhase(new FaintPhase(this.getBattlerIndex(), preventEndure)); + globalScene.phaseManager.setPhaseQueueSplice(); + globalScene.phaseManager.unshiftPhase(new FaintPhase(this.getBattlerIndex(), preventEndure)); this.destroySubstitute(); this.lapseTag(BattlerTagType.COMMANDED); } @@ -4049,7 +4049,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ): number { const isIndirectDamage = [HitResult.INDIRECT, HitResult.INDIRECT_KO].includes(result); const damagePhase = new DamageAnimPhase(this.getBattlerIndex(), damage, result as DamageResult, isCritical); - globalScene.unshiftPhase(damagePhase); + globalScene.phaseManager.unshiftPhase(damagePhase); if (this.switchOutStatus && source) { damage = 0; } @@ -4615,7 +4615,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { : i18next.t("abilityTriggers:moveImmunity", { pokemonNameWithAffix: getPokemonNameWithAffix(this), }); - globalScene.queueMessage(message); + globalScene.phaseManager.queueMessage(message); } /** @@ -4735,7 +4735,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (sourcePokemon && sourcePokemon !== this && this.isSafeguarded(sourcePokemon)) { if (!quiet) { - globalScene.queueMessage(i18next.t("moveTriggers:safeguard", { targetName: getPokemonNameWithAffix(this) })); + globalScene.phaseManager.queueMessage( + i18next.t("moveTriggers:safeguard", { targetName: getPokemonNameWithAffix(this) }), + ); } return false; } @@ -4764,7 +4766,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * cancel the attack's subsequent hits. */ if (effect === StatusEffect.SLEEP || effect === StatusEffect.FREEZE) { - const currentPhase = globalScene.getCurrentPhase(); + const currentPhase = globalScene.phaseManager.getCurrentPhase(); if (currentPhase?.is("MoveEffectPhase") && currentPhase.getUserPokemon() === this) { this.turnData.hitCount = 1; this.turnData.hitsLeft = 1; @@ -4775,7 +4777,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (overrideStatus) { this.resetStatus(false); } - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new ObtainStatusEffectPhase(this.getBattlerIndex(), effect, turnsRemaining, sourceText, sourcePokemon), ); return true; @@ -4825,7 +4827,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } if (asPhase) { - globalScene.unshiftPhase(new ResetStatusPhase(this, confusion, reloadAssets)); + globalScene.phaseManager.unshiftPhase(new ResetStatusPhase(this, confusion, reloadAssets)); } else { this.clearStatus(confusion, reloadAssets); } @@ -5632,7 +5634,7 @@ export class PlayerPokemon extends Pokemon { this.getFieldIndex(), (slotIndex: number, _option: PartyOption) => { if (slotIndex >= globalScene.currentBattle.getBattlerCount() && slotIndex < 6) { - globalScene.prependToPhase( + globalScene.phaseManager.prependToPhase( new SwitchSummonPhase(switchType, this.getFieldIndex(), slotIndex, false), MoveEndPhase, ); @@ -5997,7 +5999,9 @@ export class PlayerPokemon extends Pokemon { const newPartyMemberIndex = globalScene.getPlayerParty().indexOf(this); pokemon .getMoveset(true) - .map((m: PokemonMove) => globalScene.unshiftPhase(new LearnMovePhase(newPartyMemberIndex, m.getMove().id))); + .map((m: PokemonMove) => + globalScene.phaseManager.unshiftPhase(new LearnMovePhase(newPartyMemberIndex, m.getMove().id)), + ); pokemon.destroy(); this.updateFusionPalette(); } @@ -6639,7 +6643,7 @@ export class EnemyPokemon extends Pokemon { stages++; } - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new StatStageChangePhase(this.getBattlerIndex(), true, [boostedStat!], stages, true, true), ); this.bossSegmentIndex--; diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index f8c71b2c891..e1517b3bcde 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -1548,7 +1548,7 @@ export class SurviveDamageModifier extends PokemonHeldItemModifier { if (!surviveDamage.value && pokemon.randBattleSeedInt(10) < this.getStackCount()) { surviveDamage.value = true; - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("modifier:surviveDamageApply", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), typeName: this.type.name, @@ -1598,7 +1598,7 @@ export class BypassSpeedChanceModifier extends PokemonHeldItemModifier { const hasQuickClaw = this.type instanceof PokemonHeldItemModifierType && this.type.id === "QUICK_CLAW"; if (isCommandFight && hasQuickClaw) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("modifier:bypassSpeedChanceApply", { pokemonName: getPokemonNameWithAffix(pokemon), itemName: i18next.t("modifierType:ModifierType.QUICK_CLAW.name"), @@ -1684,7 +1684,7 @@ export class TurnHealModifier extends PokemonHeldItemModifier { */ override apply(pokemon: Pokemon): boolean { if (!pokemon.isFullHp()) { - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new PokemonHealPhase( pokemon.getBattlerIndex(), toDmgValue(pokemon.getMaxHp() / 16) * this.stackCount, @@ -1782,7 +1782,7 @@ export class HitHealModifier extends PokemonHeldItemModifier { override apply(pokemon: Pokemon): boolean { if (pokemon.turnData.totalDamageDealt && !pokemon.isFullHp()) { // TODO: this shouldn't be undefined AFAIK - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new PokemonHealPhase( pokemon.getBattlerIndex(), toDmgValue(pokemon.turnData.totalDamageDealt / 8) * this.stackCount, @@ -1950,7 +1950,7 @@ export class PokemonInstantReviveModifier extends PokemonHeldItemModifier { */ override apply(pokemon: Pokemon): boolean { // Restore the Pokemon to half HP - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new PokemonHealPhase( pokemon.getBattlerIndex(), toDmgValue(pokemon.getMaxHp() / 2), @@ -2012,7 +2012,7 @@ export class ResetNegativeStatStageModifier extends PokemonHeldItemModifier { } if (statRestored) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("modifier:resetNegativeStatStageApply", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), typeName: this.type.name, @@ -2323,7 +2323,7 @@ export class PokemonLevelIncrementModifier extends ConsumablePokemonModifier { playerPokemon.addFriendship(FRIENDSHIP_GAIN_FROM_RARE_CANDY); - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new LevelUpPhase( globalScene.getPlayerParty().indexOf(playerPokemon), playerPokemon.level - levelCount.value, @@ -2344,7 +2344,7 @@ export class TmModifier extends ConsumablePokemonModifier { * @returns always `true` */ override apply(playerPokemon: PlayerPokemon): boolean { - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new LearnMovePhase(globalScene.getPlayerParty().indexOf(playerPokemon), this.type.moveId, LearnMoveType.TM), ); @@ -2367,7 +2367,7 @@ export class RememberMoveModifier extends ConsumablePokemonModifier { * @returns always `true` */ override apply(playerPokemon: PlayerPokemon, cost?: number): boolean { - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new LearnMovePhase( globalScene.getPlayerParty().indexOf(playerPokemon), playerPokemon.getLearnableLevelMoves()[this.levelMoveIndex], @@ -2410,7 +2410,9 @@ export class EvolutionItemModifier extends ConsumablePokemonModifier { } if (matchingEvolution) { - globalScene.unshiftPhase(new EvolutionPhase(playerPokemon, matchingEvolution, playerPokemon.level - 1)); + globalScene.phaseManager.unshiftPhase( + new EvolutionPhase(playerPokemon, matchingEvolution, playerPokemon.level - 1), + ); return true; } @@ -3008,7 +3010,7 @@ export class MoneyInterestModifier extends PersistentModifier { moneyAmount: formattedMoneyAmount, typeName: this.type.name, }); - globalScene.queueMessage(message, undefined, true); + globalScene.phaseManager.queueMessage(message, undefined, true); return true; } @@ -3262,7 +3264,7 @@ export abstract class HeldItemTransferModifier extends PokemonHeldItemModifier { } for (const mt of transferredModifierTypes) { - globalScene.queueMessage(this.getTransferMessage(pokemon, targetPokemon, mt)); + globalScene.phaseManager.queueMessage(this.getTransferMessage(pokemon, targetPokemon, mt)); } return !!transferredModifierTypes.length; @@ -3572,7 +3574,7 @@ export class EnemyTurnHealModifier extends EnemyPersistentModifier { */ override apply(enemyPokemon: Pokemon): boolean { if (!enemyPokemon.isFullHp()) { - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new PokemonHealPhase( enemyPokemon.getBattlerIndex(), Math.max(Math.floor(enemyPokemon.getMaxHp() / (100 / this.healPercent)) * this.stackCount, 1), @@ -3668,7 +3670,7 @@ export class EnemyStatusEffectHealChanceModifier extends EnemyPersistentModifier */ override apply(enemyPokemon: Pokemon): boolean { if (enemyPokemon.status && Phaser.Math.RND.realInRange(0, 1) < this.chance * this.getStackCount()) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( getStatusEffectHealText(enemyPokemon.status.effect, getPokemonNameWithAffix(enemyPokemon)), ); enemyPokemon.resetStatus(); diff --git a/src/phase-manager.ts b/src/phase-manager.ts new file mode 100644 index 00000000000..8869f4b27b7 --- /dev/null +++ b/src/phase-manager.ts @@ -0,0 +1,311 @@ +import { HideAbilityPhase } from "./phases/hide-ability-phase"; +import { ShowAbilityPhase } from "./phases/show-ability-phase"; +import { TurnInitPhase } from "./phases/turn-init-phase"; +import type { Phase } from "#app/phase"; +import type { default as Pokemon } from "#app/field/pokemon"; +import type { Constructor } from "#app/utils/common"; +import { MessagePhase } from "./phases/message-phase"; +import { globalScene } from "#app/global-scene"; + +/** + * Manager for phases used by battle scene. + * + * *This file must not be imported or used directly. The manager is exclusively used by the battle scene and is not intended for external use.* + */ + +export class PhaseManager { + /** PhaseQueue: dequeue/remove the first element to get the next phase */ + public phaseQueue: Phase[] = []; + public conditionalQueue: Array<[() => boolean, Phase]> = []; + /** PhaseQueuePrepend: is a temp storage of what will be added to PhaseQueue */ + private phaseQueuePrepend: Phase[] = []; + + /** overrides default of inserting phases to end of phaseQueuePrepend array. Useful for inserting Phases "out of order" */ + private phaseQueuePrependSpliceIndex = -1; + private nextCommandPhaseQueue: Phase[] = []; + + private currentPhase: Phase | null = null; + private standbyPhase: Phase | null = null; + + /* Phase Functions */ + getCurrentPhase(): Phase | null { + return this.currentPhase; + } + + getStandbyPhase(): Phase | null { + return this.standbyPhase; + } + + /** + * Adds a phase to the conditional queue and ensures it is executed only when the specified condition is met. + * + * This method allows deferring the execution of a phase until certain conditions are met, which is useful for handling + * situations like abilities and entry hazards that depend on specific game states. + * + * @param phase - The phase to be added to the conditional queue. + * @param condition - A function that returns a boolean indicating whether the phase should be executed. + * + */ + pushConditionalPhase(phase: Phase, condition: () => boolean): void { + this.conditionalQueue.push([condition, phase]); + } + + /** + * Adds a phase to nextCommandPhaseQueue, as long as boolean passed in is false + * @param phase {@linkcode Phase} the phase to add + * @param defer boolean on which queue to add to, defaults to false, and adds to phaseQueue + */ + pushPhase(phase: Phase, defer = false): void { + (!defer ? this.phaseQueue : this.nextCommandPhaseQueue).push(phase); + } + + /** + * Adds Phase(s) to the end of phaseQueuePrepend, or at phaseQueuePrependSpliceIndex + * @param phases {@linkcode Phase} the phase(s) to add + */ + unshiftPhase(...phases: Phase[]): void { + if (this.phaseQueuePrependSpliceIndex === -1) { + this.phaseQueuePrepend.push(...phases); + } else { + this.phaseQueuePrepend.splice(this.phaseQueuePrependSpliceIndex, 0, ...phases); + } + } + + /** + * Clears the phaseQueue + */ + clearPhaseQueue(): void { + this.phaseQueue.splice(0, this.phaseQueue.length); + } + + /** + * Clears all phase-related stuff, including all phase queues, the current and standby phases, and a splice index + */ + clearAllPhases(): void { + for (const queue of [this.phaseQueue, this.phaseQueuePrepend, this.conditionalQueue, this.nextCommandPhaseQueue]) { + queue.splice(0, queue.length); + } + this.currentPhase = null; + this.standbyPhase = null; + this.clearPhaseQueueSplice(); + } + + /** + * Used by function unshiftPhase(), sets index to start inserting at current length instead of the end of the array, useful if phaseQueuePrepend gets longer with Phases + */ + setPhaseQueueSplice(): void { + this.phaseQueuePrependSpliceIndex = this.phaseQueuePrepend.length; + } + + /** + * Resets phaseQueuePrependSpliceIndex to -1, implies that calls to unshiftPhase will insert at end of phaseQueuePrepend + */ + clearPhaseQueueSplice(): void { + this.phaseQueuePrependSpliceIndex = -1; + } + + /** + * Is called by each Phase implementations "end()" by default + * We dump everything from phaseQueuePrepend to the start of of phaseQueue + * then removes first Phase and starts it + */ + shiftPhase(): void { + if (this.standbyPhase) { + this.currentPhase = this.standbyPhase; + this.standbyPhase = null; + return; + } + + if (this.phaseQueuePrependSpliceIndex > -1) { + this.clearPhaseQueueSplice(); + } + if (this.phaseQueuePrepend.length) { + while (this.phaseQueuePrepend.length) { + const poppedPhase = this.phaseQueuePrepend.pop(); + if (poppedPhase) { + this.phaseQueue.unshift(poppedPhase); + } + } + } + if (!this.phaseQueue.length) { + this.populatePhaseQueue(); + // Clear the conditionalQueue if there are no phases left in the phaseQueue + this.conditionalQueue = []; + } + + this.currentPhase = this.phaseQueue.shift() ?? null; + + // Check if there are any conditional phases queued + if (this.conditionalQueue?.length) { + // Retrieve the first conditional phase from the queue + const conditionalPhase = this.conditionalQueue.shift(); + // Evaluate the condition associated with the phase + if (conditionalPhase?.[0]()) { + // If the condition is met, add the phase to the phase queue + this.pushPhase(conditionalPhase[1]); + } else if (conditionalPhase) { + // If the condition is not met, re-add the phase back to the front of the conditional queue + this.conditionalQueue.unshift(conditionalPhase); + } else { + console.warn("condition phase is undefined/null!", conditionalPhase); + } + } + + if (this.currentPhase) { + console.log(`%cStart Phase ${this.currentPhase.constructor.name}`, "color:green;"); + this.currentPhase.start(); + } + } + + overridePhase(phase: Phase): boolean { + if (this.standbyPhase) { + return false; + } + + this.standbyPhase = this.currentPhase; + this.currentPhase = phase; + console.log(`%cStart Phase ${phase.constructor.name}`, "color:green;"); + phase.start(); + + return true; + } + + /** + * Find a specific {@linkcode Phase} in the phase queue. + * + * @param phaseFilter filter function to use to find the wanted phase + * @returns the found phase or undefined if none found + */ + findPhase

      (phaseFilter: (phase: P) => boolean): P | undefined { + return this.phaseQueue.find(phaseFilter) as P; + } + + tryReplacePhase(phaseFilter: (phase: Phase) => boolean, phase: Phase): boolean { + const phaseIndex = this.phaseQueue.findIndex(phaseFilter); + if (phaseIndex > -1) { + this.phaseQueue[phaseIndex] = phase; + return true; + } + return false; + } + + tryRemovePhase(phaseFilter: (phase: Phase) => boolean): boolean { + const phaseIndex = this.phaseQueue.findIndex(phaseFilter); + if (phaseIndex > -1) { + this.phaseQueue.splice(phaseIndex, 1); + return true; + } + return false; + } + + /** + * Will search for a specific phase in {@linkcode phaseQueuePrepend} via filter, and remove the first result if a match is found. + * @param phaseFilter filter function + */ + tryRemoveUnshiftedPhase(phaseFilter: (phase: Phase) => boolean): boolean { + const phaseIndex = this.phaseQueuePrepend.findIndex(phaseFilter); + if (phaseIndex > -1) { + this.phaseQueuePrepend.splice(phaseIndex, 1); + return true; + } + return false; + } + + /** + * Tries to add the input phase to index before target phase in the phaseQueue, else simply calls unshiftPhase() + * @param phase {@linkcode Phase} the phase to be added + * @param targetPhase {@linkcode Phase} the type of phase to search for in phaseQueue + * @returns boolean if a targetPhase was found and added + */ + prependToPhase(phase: Phase | Phase[], targetPhase: Constructor): boolean { + if (!Array.isArray(phase)) { + phase = [phase]; + } + const targetIndex = this.phaseQueue.findIndex(ph => ph instanceof targetPhase); + + if (targetIndex !== -1) { + this.phaseQueue.splice(targetIndex, 0, ...phase); + return true; + } + this.unshiftPhase(...phase); + return false; + } + + /** + * Attempt to add the input phase(s) to index after target phase in the {@linkcode phaseQueue}, else simply calls {@linkcode unshiftPhase()} + * @param phase - The phase(s) to be added + * @param targetPhase - The type of phase to search for in {@linkcode phaseQueue} + * @returns `true` if a `targetPhase` was found to append to + */ + appendToPhase(phase: Phase | Phase[], targetPhase: Constructor): boolean { + if (!Array.isArray(phase)) { + phase = [phase]; + } + const targetIndex = this.phaseQueue.findIndex(ph => ph instanceof targetPhase); + + if (targetIndex !== -1 && this.phaseQueue.length > targetIndex) { + this.phaseQueue.splice(targetIndex + 1, 0, ...phase); + return true; + } + this.unshiftPhase(...phase); + return false; + } + + /** + * Adds a MessagePhase, either to PhaseQueuePrepend or nextCommandPhaseQueue + * @param message - string for MessagePhase + * @param callbackDelay - optional param for MessagePhase constructor + * @param prompt - optional param for MessagePhase constructor + * @param promptDelay - optional param for MessagePhase constructor + * @param defer - Whether to allow the phase to be deferred + * + * @see {@linkcode MessagePhase} for more details on the parameters + */ + queueMessage( + message: string, + callbackDelay?: number | null, + prompt?: boolean | null, + promptDelay?: number | null, + defer?: boolean | null, + ) { + const phase = new MessagePhase(message, callbackDelay, prompt, promptDelay); + if (!defer) { + // adds to the end of PhaseQueuePrepend + this.unshiftPhase(phase); + } else { + //remember that pushPhase adds it to nextCommandPhaseQueue + this.pushPhase(phase); + } + } + + /** + * Queues an ability bar flyout phase + * @param pokemon The pokemon who has the ability + * @param passive Whether the ability is a passive + * @param show Whether to show or hide the bar + */ + public queueAbilityDisplay(pokemon: Pokemon, passive: boolean, show: boolean): void { + this.unshiftPhase(show ? new ShowAbilityPhase(pokemon.getBattlerIndex(), passive) : new HideAbilityPhase()); + this.clearPhaseQueueSplice(); + } + + /** + * Hides the ability bar if it is currently visible + */ + public hideAbilityBar(): void { + if (globalScene.abilityBar.isVisible()) { + this.unshiftPhase(new HideAbilityPhase()); + } + } + + /** + * Moves everything from nextCommandPhaseQueue to phaseQueue (keeping order) + */ + private populatePhaseQueue(): void { + if (this.nextCommandPhaseQueue.length) { + this.phaseQueue.push(...this.nextCommandPhaseQueue); + this.nextCommandPhaseQueue.splice(0, this.nextCommandPhaseQueue.length); + } + this.phaseQueue.push(new TurnInitPhase()); + } +} diff --git a/src/phase.ts b/src/phase.ts index 9e2468ebdff..5e81679d29e 100644 --- a/src/phase.ts +++ b/src/phase.ts @@ -5,7 +5,7 @@ export abstract class Phase { start() {} end() { - globalScene.shiftPhase(); + globalScene.phaseManager.shiftPhase(); } /** diff --git a/src/phases/attempt-capture-phase.ts b/src/phases/attempt-capture-phase.ts index 6c2f5f4dd76..09eeb6e0a19 100644 --- a/src/phases/attempt-capture-phase.ts +++ b/src/phases/attempt-capture-phase.ts @@ -257,7 +257,7 @@ export class AttemptCapturePhase extends PokemonPhase { null, () => { const end = () => { - globalScene.unshiftPhase(new VictoryPhase(this.battlerIndex)); + globalScene.phaseManager.unshiftPhase(new VictoryPhase(this.battlerIndex)); globalScene.pokemonInfoContainer.hide(); this.removePb(); this.end(); diff --git a/src/phases/attempt-run-phase.ts b/src/phases/attempt-run-phase.ts index ced81567c43..2bf6ba2fb5b 100644 --- a/src/phases/attempt-run-phase.ts +++ b/src/phases/attempt-run-phase.ts @@ -39,7 +39,7 @@ export class AttemptRunPhase extends PokemonPhase { enemyField.forEach(enemyPokemon => applyPreLeaveFieldAbAttrs(PreLeaveFieldAbAttr, enemyPokemon)); globalScene.playSound("se/flee"); - globalScene.queueMessage(i18next.t("battle:runAwaySuccess"), null, true, 500); + globalScene.phaseManager.queueMessage(i18next.t("battle:runAwaySuccess"), null, true, 500); globalScene.tweens.add({ targets: [globalScene.arenaEnemy, enemyField].flat(), @@ -60,16 +60,16 @@ export class AttemptRunPhase extends PokemonPhase { enemyPokemon.trySetStatus(StatusEffect.FAINT); }); - globalScene.pushPhase(new BattleEndPhase(false)); + globalScene.phaseManager.pushPhase(new BattleEndPhase(false)); if (globalScene.gameMode.hasRandomBiomes || globalScene.isNewBiome()) { - globalScene.pushPhase(new SelectBiomePhase()); + globalScene.phaseManager.pushPhase(new SelectBiomePhase()); } - globalScene.pushPhase(new NewBattlePhase()); + globalScene.phaseManager.pushPhase(new NewBattlePhase()); } else { playerPokemon.turnData.failedRunAway = true; - globalScene.queueMessage(i18next.t("battle:runAwayCannotEscape"), null, true, 500); + globalScene.phaseManager.queueMessage(i18next.t("battle:runAwayCannotEscape"), null, true, 500); } this.end(); diff --git a/src/phases/battle-end-phase.ts b/src/phases/battle-end-phase.ts index 96f6d02b1fc..4e3543be03a 100644 --- a/src/phases/battle-end-phase.ts +++ b/src/phases/battle-end-phase.ts @@ -19,7 +19,7 @@ export class BattleEndPhase extends BattlePhase { super.start(); // cull any extra `BattleEnd` phases from the queue. - globalScene.phaseQueue = globalScene.phaseQueue.filter(phase => { + globalScene.phaseManager.phaseQueue = globalScene.phaseManager.phaseQueue.filter(phase => { if (phase.is("BattleEndPhase")) { this.isVictory ||= phase.isVictory; return false; @@ -28,7 +28,7 @@ export class BattleEndPhase extends BattlePhase { }); // `phaseQueuePrepend` is private, so we have to use this inefficient loop. while ( - globalScene.tryRemoveUnshiftedPhase(phase => { + globalScene.phaseManager.tryRemoveUnshiftedPhase(phase => { if (phase.is("BattleEndPhase")) { this.isVictory ||= phase.isVictory; return true; @@ -55,8 +55,8 @@ export class BattleEndPhase extends BattlePhase { // Endless graceful end if (globalScene.gameMode.isEndless && globalScene.currentBattle.waveIndex >= 5850) { - globalScene.clearPhaseQueue(); - globalScene.unshiftPhase(new GameOverPhase(true)); + globalScene.phaseManager.clearPhaseQueue(); + globalScene.phaseManager.unshiftPhase(new GameOverPhase(true)); } for (const pokemon of globalScene.getField()) { diff --git a/src/phases/berry-phase.ts b/src/phases/berry-phase.ts index 8d66d498039..e9e177a8fe4 100644 --- a/src/phases/berry-phase.ts +++ b/src/phases/berry-phase.ts @@ -50,7 +50,7 @@ export class BerryPhase extends FieldPhase { const cancelled = new BooleanHolder(false); pokemon.getOpponents().forEach(opp => applyAbAttrs(PreventBerryUseAbAttr, opp, cancelled)); if (cancelled.value) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("abilityTriggers:preventBerryUse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -58,7 +58,7 @@ export class BerryPhase extends FieldPhase { return; } - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new CommonAnimPhase(pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.USE_ITEM), ); diff --git a/src/phases/check-status-effect-phase.ts b/src/phases/check-status-effect-phase.ts index 0c5884bbac7..ec15676ebcc 100644 --- a/src/phases/check-status-effect-phase.ts +++ b/src/phases/check-status-effect-phase.ts @@ -15,7 +15,7 @@ export class CheckStatusEffectPhase extends Phase { const field = globalScene.getField(); for (const o of this.order) { if (field[o].status?.isPostTurn()) { - globalScene.unshiftPhase(new PostTurnStatusEffectPhase(o)); + globalScene.phaseManager.unshiftPhase(new PostTurnStatusEffectPhase(o)); } } this.end(); diff --git a/src/phases/check-switch-phase.ts b/src/phases/check-switch-phase.ts index 0506cd36c46..2299bf0c0a5 100644 --- a/src/phases/check-switch-phase.ts +++ b/src/phases/check-switch-phase.ts @@ -35,7 +35,7 @@ export class CheckSwitchPhase extends BattlePhase { // ...if the checked Pokemon is somehow not on the field if (globalScene.field.getAll().indexOf(pokemon) === -1) { - globalScene.unshiftPhase(new SummonMissingPhase(this.fieldIndex)); + globalScene.phaseManager.unshiftPhase(new SummonMissingPhase(this.fieldIndex)); return super.end(); } @@ -68,7 +68,9 @@ export class CheckSwitchPhase extends BattlePhase { UiMode.CONFIRM, () => { globalScene.ui.setMode(UiMode.MESSAGE); - globalScene.unshiftPhase(new SwitchPhase(SwitchType.INITIAL_SWITCH, this.fieldIndex, false, true)); + globalScene.phaseManager.unshiftPhase( + new SwitchPhase(SwitchType.INITIAL_SWITCH, this.fieldIndex, false, true), + ); this.end(); }, () => { diff --git a/src/phases/command-phase.ts b/src/phases/command-phase.ts index 209c1eefc85..7a2e427ecce 100644 --- a/src/phases/command-phase.ts +++ b/src/phases/command-phase.ts @@ -192,7 +192,7 @@ export class CommandPhase extends FieldPhase { } console.log(moveTargets, getPokemonNameWithAffix(playerPokemon)); if (moveTargets.targets.length > 1 && moveTargets.multiple) { - globalScene.unshiftPhase(new SelectTargetPhase(this.fieldIndex)); + globalScene.phaseManager.unshiftPhase(new SelectTargetPhase(this.fieldIndex)); } if (turnCommand.move && (moveTargets.targets.length <= 1 || moveTargets.multiple)) { turnCommand.move.targets = moveTargets.targets; @@ -203,7 +203,7 @@ export class CommandPhase extends FieldPhase { ) { turnCommand.move.targets = playerPokemon.getMoveQueue()[0].targets; } else { - globalScene.unshiftPhase(new SelectTargetPhase(this.fieldIndex)); + globalScene.phaseManager.unshiftPhase(new SelectTargetPhase(this.fieldIndex)); } globalScene.currentBattle.preTurnCommands[this.fieldIndex] = preTurnCommand; globalScene.currentBattle.turnCommands[this.fieldIndex] = turnCommand; @@ -457,8 +457,8 @@ export class CommandPhase extends FieldPhase { cancel() { if (this.fieldIndex) { - globalScene.unshiftPhase(new CommandPhase(0)); - globalScene.unshiftPhase(new CommandPhase(1)); + globalScene.phaseManager.unshiftPhase(new CommandPhase(0)); + globalScene.phaseManager.unshiftPhase(new CommandPhase(1)); this.end(); } } diff --git a/src/phases/egg-hatch-phase.ts b/src/phases/egg-hatch-phase.ts index dfcdc05f9a2..d6c40a1510e 100644 --- a/src/phases/egg-hatch-phase.ts +++ b/src/phases/egg-hatch-phase.ts @@ -225,7 +225,7 @@ export class EggHatchPhase extends Phase { } end() { - if (globalScene.findPhase(p => p.is("EggHatchPhase"))) { + if (globalScene.phaseManager.findPhase(p => p.is("EggHatchPhase"))) { this.eggHatchHandler.clear(); } else { globalScene.time.delayedCall(250, () => globalScene.setModifiersVisible(true)); diff --git a/src/phases/egg-lapse-phase.ts b/src/phases/egg-lapse-phase.ts index 182d6f304d6..a19bf8f50e5 100644 --- a/src/phases/egg-lapse-phase.ts +++ b/src/phases/egg-lapse-phase.ts @@ -62,12 +62,12 @@ export class EggLapsePhase extends Phase { true, ); } else if (eggsToHatchCount >= this.minEggsToSkip && globalScene.eggSkipPreference === 2) { - globalScene.queueMessage(i18next.t("battle:eggHatching")); + globalScene.phaseManager.queueMessage(i18next.t("battle:eggHatching")); this.hatchEggsSkipped(eggsToHatch); this.showSummary(); } else { // regular hatches, no summary - globalScene.queueMessage(i18next.t("battle:eggHatching")); + globalScene.phaseManager.queueMessage(i18next.t("battle:eggHatching")); this.hatchEggsRegular(eggsToHatch); this.end(); } @@ -83,7 +83,7 @@ export class EggLapsePhase extends Phase { hatchEggsRegular(eggsToHatch: Egg[]) { let eggsToHatchCount: number = eggsToHatch.length; for (const egg of eggsToHatch) { - globalScene.unshiftPhase(new EggHatchPhase(this, egg, eggsToHatchCount)); + globalScene.phaseManager.unshiftPhase(new EggHatchPhase(this, egg, eggsToHatchCount)); eggsToHatchCount--; } } @@ -99,7 +99,7 @@ export class EggLapsePhase extends Phase { } showSummary() { - globalScene.unshiftPhase(new EggSummaryPhase(this.eggHatchData)); + globalScene.phaseManager.unshiftPhase(new EggSummaryPhase(this.eggHatchData)); this.end(); } diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index df84f8f8ff4..cdd17c6d6d6 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -68,7 +68,7 @@ export class EncounterPhase extends BattlePhase { // Failsafe if players somehow skip floor 200 in classic mode if (globalScene.gameMode.isClassic && globalScene.currentBattle.waveIndex > 200) { - globalScene.unshiftPhase(new GameOverPhase()); + globalScene.phaseManager.unshiftPhase(new GameOverPhase()); } const loadEnemyAssets: Promise[] = []; @@ -438,9 +438,9 @@ export class EncounterPhase extends BattlePhase { const doTrainerSummon = () => { this.hideEnemyTrainer(); const availablePartyMembers = globalScene.getEnemyParty().filter(p => !p.isFainted()).length; - globalScene.unshiftPhase(new SummonPhase(0, false)); + globalScene.phaseManager.unshiftPhase(new SummonPhase(0, false)); if (globalScene.currentBattle.double && availablePartyMembers > 1) { - globalScene.unshiftPhase(new SummonPhase(1, false)); + globalScene.phaseManager.unshiftPhase(new SummonPhase(1, false)); } this.end(); }; @@ -496,7 +496,7 @@ export class EncounterPhase extends BattlePhase { globalScene.ui.clearText(); globalScene.ui.getMessageHandler().hideNameText(); - globalScene.unshiftPhase(new MysteryEncounterPhase()); + globalScene.phaseManager.unshiftPhase(new MysteryEncounterPhase()); this.end(); }; @@ -554,7 +554,7 @@ export class EncounterPhase extends BattlePhase { enemyField.forEach((enemyPokemon, e) => { if (enemyPokemon.isShiny(true)) { - globalScene.unshiftPhase(new ShinySparklePhase(BattlerIndex.ENEMY + e)); + globalScene.phaseManager.unshiftPhase(new ShinySparklePhase(BattlerIndex.ENEMY + e)); } /** This sets Eternatus' held item to be untransferrable, preventing it from being stolen */ if ( @@ -576,7 +576,7 @@ export class EncounterPhase extends BattlePhase { if (![BattleType.TRAINER, BattleType.MYSTERY_ENCOUNTER].includes(globalScene.currentBattle.battleType)) { enemyField.map(p => - globalScene.pushConditionalPhase(new PostSummonPhase(p.getBattlerIndex()), () => { + globalScene.phaseManager.pushConditionalPhase(new PostSummonPhase(p.getBattlerIndex()), () => { // if there is not a player party, we can't continue if (!globalScene.getPlayerParty().length) { return false; @@ -594,7 +594,7 @@ export class EncounterPhase extends BattlePhase { ); const ivScannerModifier = globalScene.findModifier(m => m instanceof IvScannerModifier); if (ivScannerModifier) { - enemyField.map(p => globalScene.pushPhase(new ScanIvsPhase(p.getBattlerIndex()))); + enemyField.map(p => globalScene.phaseManager.pushPhase(new ScanIvsPhase(p.getBattlerIndex()))); } } @@ -602,21 +602,21 @@ export class EncounterPhase extends BattlePhase { const availablePartyMembers = globalScene.getPokemonAllowedInBattle(); if (!availablePartyMembers[0].isOnField()) { - globalScene.pushPhase(new SummonPhase(0)); + globalScene.phaseManager.pushPhase(new SummonPhase(0)); } if (globalScene.currentBattle.double) { if (availablePartyMembers.length > 1) { - globalScene.pushPhase(new ToggleDoublePositionPhase(true)); + globalScene.phaseManager.pushPhase(new ToggleDoublePositionPhase(true)); if (!availablePartyMembers[1].isOnField()) { - globalScene.pushPhase(new SummonPhase(1)); + globalScene.phaseManager.pushPhase(new SummonPhase(1)); } } } else { if (availablePartyMembers.length > 1 && availablePartyMembers[1].isOnField()) { - globalScene.pushPhase(new ReturnPhase(1)); + globalScene.phaseManager.pushPhase(new ReturnPhase(1)); } - globalScene.pushPhase(new ToggleDoublePositionPhase(false)); + globalScene.phaseManager.pushPhase(new ToggleDoublePositionPhase(false)); } if ( @@ -625,9 +625,9 @@ export class EncounterPhase extends BattlePhase { ) { const minPartySize = globalScene.currentBattle.double ? 2 : 1; if (availablePartyMembers.length > minPartySize) { - globalScene.pushPhase(new CheckSwitchPhase(0, globalScene.currentBattle.double)); + globalScene.phaseManager.pushPhase(new CheckSwitchPhase(0, globalScene.currentBattle.double)); if (globalScene.currentBattle.double) { - globalScene.pushPhase(new CheckSwitchPhase(1, globalScene.currentBattle.double)); + globalScene.phaseManager.pushPhase(new CheckSwitchPhase(1, globalScene.currentBattle.double)); } } } diff --git a/src/phases/evolution-phase.ts b/src/phases/evolution-phase.ts index 5e635f4cd82..937a7d31542 100644 --- a/src/phases/evolution-phase.ts +++ b/src/phases/evolution-phase.ts @@ -262,7 +262,7 @@ export class EvolutionPhase extends Phase { SoundFade.fadeOut(globalScene, this.evolutionBgm, 100); - globalScene.unshiftPhase(new EndEvolutionPhase()); + globalScene.phaseManager.unshiftPhase(new EndEvolutionPhase()); globalScene.ui.showText( i18next.t("menu:stoppedEvolving", { @@ -355,9 +355,11 @@ export class EvolutionPhase extends Phase { .getLevelMoves(this.lastLevel + 1, true, false, false, learnSituation) .filter(lm => lm[0] === EVOLVE_MOVE); for (const lm of levelMoves) { - globalScene.unshiftPhase(new LearnMovePhase(globalScene.getPlayerParty().indexOf(this.pokemon), lm[1])); + globalScene.phaseManager.unshiftPhase( + new LearnMovePhase(globalScene.getPlayerParty().indexOf(this.pokemon), lm[1]), + ); } - globalScene.unshiftPhase(new EndEvolutionPhase()); + globalScene.phaseManager.unshiftPhase(new EndEvolutionPhase()); globalScene.playSound("se/shine"); this.doSpray(); diff --git a/src/phases/exp-phase.ts b/src/phases/exp-phase.ts index 14d7d7578f8..8084ae78221 100644 --- a/src/phases/exp-phase.ts +++ b/src/phases/exp-phase.ts @@ -34,7 +34,7 @@ export class ExpPhase extends PlayerPartyMemberPokemonPhase { pokemon.addExp(exp.value); const newLevel = pokemon.level; if (newLevel > lastLevel) { - globalScene.unshiftPhase(new LevelUpPhase(this.partyMemberIndex, lastLevel, newLevel)); + globalScene.phaseManager.unshiftPhase(new LevelUpPhase(this.partyMemberIndex, lastLevel, newLevel)); } pokemon.updateInfo().then(() => this.end()); }, diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index fac0947c4e7..41e21162dbf 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -115,7 +115,7 @@ export class FaintPhase extends PokemonPhase { }); } - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battle:fainted", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), @@ -166,7 +166,7 @@ export class FaintPhase extends PokemonPhase { const legalPlayerPartyPokemon = legalPlayerPokemon.filter(p => !p.isActive(true)); if (!legalPlayerPokemon.length) { /** If the player doesn't have any legal Pokemon, end the game */ - globalScene.unshiftPhase(new GameOverPhase()); + globalScene.phaseManager.unshiftPhase(new GameOverPhase()); } else if ( globalScene.currentBattle.double && legalPlayerPokemon.length === 1 && @@ -176,23 +176,25 @@ export class FaintPhase extends PokemonPhase { * If the player has exactly one Pokemon in total at this point in a double battle, and that Pokemon * is already on the field, unshift a phase that moves that Pokemon to center position. */ - globalScene.unshiftPhase(new ToggleDoublePositionPhase(true)); + globalScene.phaseManager.unshiftPhase(new ToggleDoublePositionPhase(true)); } else if (legalPlayerPartyPokemon.length > 0) { /** * If previous conditions weren't met, and the player has at least 1 legal Pokemon off the field, * push a phase that prompts the player to summon a Pokemon from their party. */ - globalScene.pushPhase(new SwitchPhase(SwitchType.SWITCH, this.fieldIndex, true, false)); + globalScene.phaseManager.pushPhase(new SwitchPhase(SwitchType.SWITCH, this.fieldIndex, true, false)); } } else { - globalScene.unshiftPhase(new VictoryPhase(this.battlerIndex)); + globalScene.phaseManager.unshiftPhase(new VictoryPhase(this.battlerIndex)); if ([BattleType.TRAINER, BattleType.MYSTERY_ENCOUNTER].includes(globalScene.currentBattle.battleType)) { const hasReservePartyMember = !!globalScene .getEnemyParty() .filter(p => p.isActive() && !p.isOnField() && p.trainerSlot === (pokemon as EnemyPokemon).trainerSlot) .length; if (hasReservePartyMember) { - globalScene.pushPhase(new SwitchSummonPhase(SwitchType.SWITCH, this.fieldIndex, -1, false, false)); + globalScene.phaseManager.pushPhase( + new SwitchSummonPhase(SwitchType.SWITCH, this.fieldIndex, -1, false, false), + ); } } } @@ -247,7 +249,7 @@ export class FaintPhase extends PokemonPhase { } else { // Final boss' HP threshold has been bypassed; cancel faint and force check for 2nd phase enemy.hp++; - globalScene.unshiftPhase(new DamageAnimPhase(enemy.getBattlerIndex(), 0, HitResult.INDIRECT)); + globalScene.phaseManager.unshiftPhase(new DamageAnimPhase(enemy.getBattlerIndex(), 0, HitResult.INDIRECT)); this.end(); } return true; diff --git a/src/phases/form-change-phase.ts b/src/phases/form-change-phase.ts index f5e428c6d3d..c0d2a9a11eb 100644 --- a/src/phases/form-change-phase.ts +++ b/src/phases/form-change-phase.ts @@ -100,7 +100,7 @@ export class FormChangePhase extends EvolutionPhase { globalScene.time.delayedCall(900, () => { this.pokemon.changeForm(this.formChange).then(() => { if (!this.modal) { - globalScene.unshiftPhase(new EndEvolutionPhase()); + globalScene.phaseManager.unshiftPhase(new EndEvolutionPhase()); } globalScene.playSound("se/shine"); diff --git a/src/phases/game-over-phase.ts b/src/phases/game-over-phase.ts index 1d03739d610..166bb955c24 100644 --- a/src/phases/game-over-phase.ts +++ b/src/phases/game-over-phase.ts @@ -47,7 +47,7 @@ export class GameOverPhase extends BattlePhase { start() { super.start(); - globalScene.hideAbilityBar(); + globalScene.phaseManager.hideAbilityBar(); // Failsafe if players somehow skip floor 200 in classic mode if (globalScene.gameMode.isClassic && globalScene.currentBattle.waveIndex > 200) { @@ -84,23 +84,23 @@ export class GameOverPhase extends BattlePhase { () => { globalScene.ui.fadeOut(1250).then(() => { globalScene.reset(); - globalScene.clearPhaseQueue(); + globalScene.phaseManager.clearPhaseQueue(); globalScene.gameData.loadSession(globalScene.sessionSlotId).then(() => { - globalScene.pushPhase(new EncounterPhase(true)); + globalScene.phaseManager.pushPhase(new EncounterPhase(true)); const availablePartyMembers = globalScene.getPokemonAllowedInBattle().length; - globalScene.pushPhase(new SummonPhase(0)); + globalScene.phaseManager.pushPhase(new SummonPhase(0)); if (globalScene.currentBattle.double && availablePartyMembers > 1) { - globalScene.pushPhase(new SummonPhase(1)); + globalScene.phaseManager.pushPhase(new SummonPhase(1)); } if ( globalScene.currentBattle.waveIndex > 1 && globalScene.currentBattle.battleType !== BattleType.TRAINER ) { - globalScene.pushPhase(new CheckSwitchPhase(0, globalScene.currentBattle.double)); + globalScene.phaseManager.pushPhase(new CheckSwitchPhase(0, globalScene.currentBattle.double)); if (globalScene.currentBattle.double && availablePartyMembers > 1) { - globalScene.pushPhase(new CheckSwitchPhase(1, globalScene.currentBattle.double)); + globalScene.phaseManager.pushPhase(new CheckSwitchPhase(1, globalScene.currentBattle.double)); } } @@ -148,7 +148,7 @@ export class GameOverPhase extends BattlePhase { globalScene.ui.fadeOut(fadeDuration).then(() => { activeBattlers.map(a => a.setVisible(false)); globalScene.setFieldScale(1, true); - globalScene.clearPhaseQueue(); + globalScene.phaseManager.clearPhaseQueue(); globalScene.ui.clearText(); if (this.isVictory && globalScene.gameMode.isChallenge) { @@ -160,15 +160,17 @@ export class GameOverPhase extends BattlePhase { this.handleUnlocks(); for (const species of this.firstRibbons) { - globalScene.unshiftPhase(new RibbonModifierRewardPhase(modifierTypes.VOUCHER_PLUS, species)); + globalScene.phaseManager.unshiftPhase( + new RibbonModifierRewardPhase(modifierTypes.VOUCHER_PLUS, species), + ); } if (!firstClear) { - globalScene.unshiftPhase(new GameOverModifierRewardPhase(modifierTypes.VOUCHER_PREMIUM)); + globalScene.phaseManager.unshiftPhase(new GameOverModifierRewardPhase(modifierTypes.VOUCHER_PREMIUM)); } } this.getRunHistoryEntry().then(runHistoryEntry => { globalScene.gameData.saveRunHistory(runHistoryEntry, this.isVictory); - globalScene.pushPhase(new PostGameOverPhase(endCardPhase)); + globalScene.phaseManager.pushPhase(new PostGameOverPhase(endCardPhase)); this.end(); }); }; @@ -198,7 +200,7 @@ export class GameOverPhase extends BattlePhase { globalScene.ui.fadeOut(500).then(() => { globalScene.charSprite.hide().then(() => { const endCardPhase = new EndCardPhase(); - globalScene.unshiftPhase(endCardPhase); + globalScene.phaseManager.unshiftPhase(endCardPhase); clear(endCardPhase); }); }); @@ -208,7 +210,7 @@ export class GameOverPhase extends BattlePhase { }); } else { const endCardPhase = new EndCardPhase(); - globalScene.unshiftPhase(endCardPhase); + globalScene.phaseManager.unshiftPhase(endCardPhase); clear(endCardPhase); } } else { @@ -230,9 +232,9 @@ export class GameOverPhase extends BattlePhase { }) .then(success => doGameOver(!globalScene.gameMode.isDaily || !!success)) .catch(_err => { - globalScene.clearPhaseQueue(); - globalScene.clearPhaseQueueSplice(); - globalScene.unshiftPhase(new MessagePhase(i18next.t("menu:serverCommunicationFailed"), 2500)); + globalScene.phaseManager.clearPhaseQueue(); + globalScene.phaseManager.clearPhaseQueueSplice(); + globalScene.phaseManager.unshiftPhase(new MessagePhase(i18next.t("menu:serverCommunicationFailed"), 2500)); // force the game to reload after 2 seconds. setTimeout(() => { window.location.reload(); @@ -251,22 +253,22 @@ export class GameOverPhase extends BattlePhase { handleUnlocks(): void { if (this.isVictory && globalScene.gameMode.isClassic) { if (!globalScene.gameData.unlocks[Unlockables.ENDLESS_MODE]) { - globalScene.unshiftPhase(new UnlockPhase(Unlockables.ENDLESS_MODE)); + globalScene.phaseManager.unshiftPhase(new UnlockPhase(Unlockables.ENDLESS_MODE)); } if ( globalScene.getPlayerParty().filter(p => p.fusionSpecies).length && !globalScene.gameData.unlocks[Unlockables.SPLICED_ENDLESS_MODE] ) { - globalScene.unshiftPhase(new UnlockPhase(Unlockables.SPLICED_ENDLESS_MODE)); + globalScene.phaseManager.unshiftPhase(new UnlockPhase(Unlockables.SPLICED_ENDLESS_MODE)); } if (!globalScene.gameData.unlocks[Unlockables.MINI_BLACK_HOLE]) { - globalScene.unshiftPhase(new UnlockPhase(Unlockables.MINI_BLACK_HOLE)); + globalScene.phaseManager.unshiftPhase(new UnlockPhase(Unlockables.MINI_BLACK_HOLE)); } if ( !globalScene.gameData.unlocks[Unlockables.EVIOLITE] && globalScene.getPlayerParty().some(p => p.getSpeciesForm(true).speciesId in pokemonEvolutions) ) { - globalScene.unshiftPhase(new UnlockPhase(Unlockables.EVIOLITE)); + globalScene.phaseManager.unshiftPhase(new UnlockPhase(Unlockables.EVIOLITE)); } } } diff --git a/src/phases/learn-move-phase.ts b/src/phases/learn-move-phase.ts index d455ed35591..7464cebe7da 100644 --- a/src/phases/learn-move-phase.ts +++ b/src/phases/learn-move-phase.ts @@ -195,7 +195,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { pokemon.usedTMs = []; } pokemon.usedTMs.push(this.moveId); - globalScene.tryRemovePhase(phase => phase.is("SelectModifierPhase")); + globalScene.phaseManager.tryRemovePhase(phase => phase.is("SelectModifierPhase")); } else if (this.learnMoveType === LearnMoveType.MEMORY) { if (this.cost !== -1) { if (!Overrides.WAIVE_ROLL_FEE_OVERRIDE) { @@ -205,7 +205,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { } globalScene.playSound("se/buy"); } else { - globalScene.tryRemovePhase(phase => phase.is("SelectModifierPhase")); + globalScene.phaseManager.tryRemovePhase(phase => phase.is("SelectModifierPhase")); } } pokemon.setMove(index, this.moveId); diff --git a/src/phases/level-up-phase.ts b/src/phases/level-up-phase.ts index 7cf86a313df..b3b82f13f42 100644 --- a/src/phases/level-up-phase.ts +++ b/src/phases/level-up-phase.ts @@ -66,14 +66,14 @@ export class LevelUpPhase extends PlayerPartyMemberPokemonPhase { // this feels like an unnecessary optimization const levelMoves = this.getPokemon().getLevelMoves(this.lastLevel + 1); for (const lm of levelMoves) { - globalScene.unshiftPhase(new LearnMovePhase(this.partyMemberIndex, lm[1])); + globalScene.phaseManager.unshiftPhase(new LearnMovePhase(this.partyMemberIndex, lm[1])); } } if (!this.pokemon.pauseEvolutions) { const evolution = this.pokemon.getEvolution(); if (evolution) { this.pokemon.breakIllusion(); - globalScene.unshiftPhase(new EvolutionPhase(this.pokemon, evolution, this.lastLevel)); + globalScene.phaseManager.unshiftPhase(new EvolutionPhase(this.pokemon, evolution, this.lastLevel)); } } return super.end(); diff --git a/src/phases/login-phase.ts b/src/phases/login-phase.ts index ec12b5ddaa4..5e1728d4415 100644 --- a/src/phases/login-phase.ts +++ b/src/phases/login-phase.ts @@ -70,7 +70,7 @@ export class LoginPhase extends Phase { }); }, () => { - globalScene.unshiftPhase(new LoginPhase(false)); + globalScene.phaseManager.unshiftPhase(new LoginPhase(false)); this.end(); }, ], @@ -94,7 +94,7 @@ export class LoginPhase extends Phase { removeCookie(sessionIdKey); globalScene.reset(true, true); } else { - globalScene.unshiftPhase(new UnavailablePhase()); + globalScene.phaseManager.unshiftPhase(new UnavailablePhase()); super.end(); } return null; @@ -114,7 +114,7 @@ export class LoginPhase extends Phase { globalScene.ui.setMode(UiMode.MESSAGE); if (!globalScene.gameData.gender) { - globalScene.unshiftPhase(new SelectGenderPhase()); + globalScene.phaseManager.unshiftPhase(new SelectGenderPhase()); } handleTutorial(Tutorial.Intro).then(() => super.end()); diff --git a/src/phases/message-phase.ts b/src/phases/message-phase.ts index 335258abe5c..2a485d837b0 100644 --- a/src/phases/message-phase.ts +++ b/src/phases/message-phase.ts @@ -44,7 +44,7 @@ export class MessagePhase extends Phase { page0 = page0.split(repname[p]).join(pokename[p]); page1 = page1.split(repname[p]).join(pokename[p]); } - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new MessagePhase(page1, this.callbackDelay, this.prompt, this.promptDelay, this.speaker), ); this.text = page0.trim(); diff --git a/src/phases/move-charge-phase.ts b/src/phases/move-charge-phase.ts index 789651623fa..263306acbf2 100644 --- a/src/phases/move-charge-phase.ts +++ b/src/phases/move-charge-phase.ts @@ -62,9 +62,9 @@ export class MoveChargePhase extends PokemonPhase { if (instantCharge.value) { // this MoveEndPhase will be duplicated by the queued MovePhase if not removed - globalScene.tryRemovePhase(phase => phase.is("MoveEndPhase") && phase.getPokemon() === user); + globalScene.phaseManager.tryRemovePhase(phase => phase.is("MoveEndPhase") && phase.getPokemon() === user); // queue a new MovePhase for this move's attack phase - globalScene.unshiftPhase(new MovePhase(user, [this.targetIndex], this.move, false)); + globalScene.phaseManager.unshiftPhase(new MovePhase(user, [this.targetIndex], this.move, false)); } else { user.getMoveQueue().push({ move: move.id, targets: [this.targetIndex] }); } diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index e62f65b029b..e135f5bd161 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -221,7 +221,7 @@ export class MoveEffectPhase extends PokemonPhase { break; // biome-ignore lint/suspicious/noFallthroughSwitchClause: The fallthrough is intentional case HitCheckResult.NO_EFFECT: - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t(this.move.id === MoveId.SHEER_COLD ? "battle:hitResultImmune" : "battle:hitResultNoEffect", { pokemonName: getPokemonNameWithAffix(target), }), @@ -232,7 +232,7 @@ export class MoveEffectPhase extends PokemonPhase { applyMoveAttrs(NoEffectAttr, user, target, this.move); break; case HitCheckResult.MISS: - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battle:attackMissed", { pokemonNameWithAffix: getPokemonNameWithAffix(target) }), ); applyMoveAttrs(MissEffectAttr, user, target, this.move); @@ -384,7 +384,7 @@ export class MoveEffectPhase extends PokemonPhase { } if (this.queuedPhases.length) { - globalScene.appendToPhase(this.queuedPhases, MoveEndPhase); + globalScene.phaseManager.appendToPhase(this.queuedPhases, MoveEndPhase); } const moveType = user.getMoveType(this.move, true); if (this.move.category !== MoveCategory.STATUS && !user.stellarTypesBoosted.includes(moveType)) { @@ -410,14 +410,14 @@ export class MoveEffectPhase extends PokemonPhase { */ if (user) { if (user.turnData.hitsLeft && --user.turnData.hitsLeft >= 1 && this.getFirstTarget()?.isActive()) { - globalScene.unshiftPhase(this.getNewHitPhase()); + globalScene.phaseManager.unshiftPhase(this.getNewHitPhase()); } else { // Queue message for number of hits made by multi-move // If multi-hit attack only hits once, still want to render a message const hitsTotal = user.turnData.hitCount - Math.max(user.turnData.hitsLeft, 0); if (hitsTotal > 1 || (user.turnData.hitsLeft && user.turnData.hitsLeft > 0)) { // If there are multiple hits, or if there are hits of the multi-hit move left - globalScene.queueMessage(i18next.t("battle:attackHitsCount", { count: hitsTotal })); + globalScene.phaseManager.queueMessage(i18next.t("battle:attackHitsCount", { count: hitsTotal })); } globalScene.applyModifiers(HitHealModifier, this.player, user); this.getTargets().forEach(target => (target.turnData.moveEffectiveness = null)); @@ -858,7 +858,7 @@ export class MoveEffectPhase extends PokemonPhase { }); if (isCritical) { - globalScene.queueMessage(i18next.t("battle:hitResultCriticalHit")); + globalScene.phaseManager.queueMessage(i18next.t("battle:hitResultCriticalHit")); } if (damage <= 0) { @@ -901,9 +901,9 @@ export class MoveEffectPhase extends PokemonPhase { */ protected onFaintTarget(user: Pokemon, target: Pokemon): void { // set splice index here, so future scene queues happen before FaintedPhase - globalScene.setPhaseQueueSplice(); + globalScene.phaseManager.setPhaseQueueSplice(); - globalScene.unshiftPhase(new FaintPhase(target.getBattlerIndex(), false, user)); + globalScene.phaseManager.unshiftPhase(new FaintPhase(target.getBattlerIndex(), false, user)); target.destroySubstitute(); target.lapseTag(BattlerTagType.COMMANDED); @@ -936,7 +936,7 @@ export class MoveEffectPhase extends PokemonPhase { break; } if (msg) { - globalScene.queueMessage(msg); + globalScene.phaseManager.queueMessage(msg); } } diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index 300c27e01fc..03f94ad3d1d 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -268,10 +268,10 @@ export class MovePhase extends BattlePhase { if (activated) { this.cancel(); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( getStatusEffectActivationText(this.pokemon.status.effect, getPokemonNameWithAffix(this.pokemon)), ); - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new CommonAnimPhase( this.pokemon.getBattlerIndex(), undefined, @@ -279,7 +279,7 @@ export class MovePhase extends BattlePhase { ), ); } else if (healed) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( getStatusEffectHealText(this.pokemon.status.effect, getPokemonNameWithAffix(this.pokemon)), ); this.pokemon.resetStatus(); @@ -407,7 +407,7 @@ export class MovePhase extends BattlePhase { if (success) { const move = this.move.getMove(); applyPreAttackAbAttrs(PokemonTypeChangeAbAttr, this.pokemon, null, move); - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new MoveEffectPhase(this.pokemon.getBattlerIndex(), this.targets, move, this.reflected, this.move.virtual), ); } else { @@ -457,7 +457,9 @@ export class MovePhase extends BattlePhase { applyPreAttackAbAttrs(PokemonTypeChangeAbAttr, this.pokemon, null, this.move.getMove()); this.showMoveText(); - globalScene.unshiftPhase(new MoveChargePhase(this.pokemon.getBattlerIndex(), this.targets[0], this.move)); + globalScene.phaseManager.unshiftPhase( + new MoveChargePhase(this.pokemon.getBattlerIndex(), this.targets[0], this.move), + ); } else { this.pokemon.pushMoveHistory({ move: this.move.moveId, @@ -479,7 +481,7 @@ export class MovePhase extends BattlePhase { * Queues a {@linkcode MoveEndPhase} and then ends the phase */ public end(): void { - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new MoveEndPhase(this.pokemon.getBattlerIndex(), this.getActiveTargetPokemon(), this.followUp), ); @@ -545,12 +547,12 @@ export class MovePhase extends BattlePhase { if (this.pokemon.hasAbilityWithAttr(BlockRedirectAbAttr)) { redirectTarget.value = currentTarget; // TODO: Ability displays should be handled by the ability - globalScene.queueAbilityDisplay( + globalScene.phaseManager.queueAbilityDisplay( this.pokemon, this.pokemon.getPassiveAbility().hasAttr(BlockRedirectAbAttr), true, ); - globalScene.queueAbilityDisplay( + globalScene.phaseManager.queueAbilityDisplay( this.pokemon, this.pokemon.getPassiveAbility().hasAttr(BlockRedirectAbAttr), false, @@ -649,7 +651,7 @@ export class MovePhase extends BattlePhase { return; } - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t(this.reflected ? "battle:magicCoatActivated" : "battle:useMove", { pokemonNameWithAffix: getPokemonNameWithAffix(this.pokemon), moveName: this.move.getName(), @@ -660,6 +662,6 @@ export class MovePhase extends BattlePhase { } public showFailedText(failedText: string = i18next.t("battle:attackFailed")): void { - globalScene.queueMessage(failedText); + globalScene.phaseManager.queueMessage(failedText); } } diff --git a/src/phases/mystery-encounter-phases.ts b/src/phases/mystery-encounter-phases.ts index 5365ab3da32..b1ca11d45a5 100644 --- a/src/phases/mystery-encounter-phases.ts +++ b/src/phases/mystery-encounter-phases.ts @@ -58,8 +58,8 @@ export class MysteryEncounterPhase extends Phase { super.start(); // Clears out queued phases that are part of standard battle - globalScene.clearPhaseQueue(); - globalScene.clearPhaseQueueSplice(); + globalScene.phaseManager.clearPhaseQueue(); + globalScene.phaseManager.clearPhaseQueueSplice(); const encounter = globalScene.currentBattle.mysteryEncounter!; encounter.updateSeedOffset(); @@ -124,7 +124,7 @@ export class MysteryEncounterPhase extends Phase { */ continueEncounter() { const endDialogueAndContinueEncounter = () => { - globalScene.pushPhase(new MysteryEncounterOptionSelectedPhase()); + globalScene.phaseManager.pushPhase(new MysteryEncounterOptionSelectedPhase()); this.end(); }; @@ -247,8 +247,8 @@ export class MysteryEncounterBattleStartCleanupPhase extends Phase { }); // Remove any status tick phases - while (globalScene.findPhase(p => p.is("PostTurnStatusEffectPhase"))) { - globalScene.tryRemovePhase(p => p.is("PostTurnStatusEffectPhase")); + while (globalScene.phaseManager.findPhase(p => p.is("PostTurnStatusEffectPhase"))) { + globalScene.phaseManager.tryRemovePhase(p => p.is("PostTurnStatusEffectPhase")); } // The total number of Pokemon in the player's party that can legally fight @@ -256,7 +256,7 @@ export class MysteryEncounterBattleStartCleanupPhase extends Phase { // The total number of legal player Pokemon that aren't currently on the field const legalPlayerPartyPokemon = legalPlayerPokemon.filter(p => !p.isActive(true)); if (!legalPlayerPokemon.length) { - globalScene.unshiftPhase(new GameOverPhase()); + globalScene.phaseManager.unshiftPhase(new GameOverPhase()); return this.end(); } @@ -265,13 +265,13 @@ export class MysteryEncounterBattleStartCleanupPhase extends Phase { const playerField = globalScene.getPlayerField(); playerField.forEach((pokemon, i) => { if (!pokemon.isAllowedInBattle() && legalPlayerPartyPokemon.length > i) { - globalScene.unshiftPhase(new SwitchPhase(SwitchType.SWITCH, i, true, false)); + globalScene.phaseManager.unshiftPhase(new SwitchPhase(SwitchType.SWITCH, i, true, false)); } }); // THEN, if is a double battle, and player only has 1 summoned pokemon, center pokemon on field if (globalScene.currentBattle.double && legalPlayerPokemon.length === 1 && legalPlayerPartyPokemon.length === 0) { - globalScene.unshiftPhase(new ToggleDoublePositionPhase(true)); + globalScene.phaseManager.unshiftPhase(new ToggleDoublePositionPhase(true)); } this.end(); @@ -348,9 +348,9 @@ export class MysteryEncounterBattlePhase extends Phase { globalScene.playBgm(); } const availablePartyMembers = globalScene.getEnemyParty().filter(p => !p.isFainted()).length; - globalScene.unshiftPhase(new SummonPhase(0, false)); + globalScene.phaseManager.unshiftPhase(new SummonPhase(0, false)); if (globalScene.currentBattle.double && availablePartyMembers > 1) { - globalScene.unshiftPhase(new SummonPhase(1, false)); + globalScene.phaseManager.unshiftPhase(new SummonPhase(1, false)); } if (!globalScene.currentBattle.mysteryEncounter?.hideBattleIntroMessage) { @@ -368,9 +368,9 @@ export class MysteryEncounterBattlePhase extends Phase { const doTrainerSummon = () => { this.hideEnemyTrainer(); const availablePartyMembers = globalScene.getEnemyParty().filter(p => !p.isFainted()).length; - globalScene.unshiftPhase(new SummonPhase(0, false)); + globalScene.phaseManager.unshiftPhase(new SummonPhase(0, false)); if (globalScene.currentBattle.double && availablePartyMembers > 1) { - globalScene.unshiftPhase(new SummonPhase(1, false)); + globalScene.phaseManager.unshiftPhase(new SummonPhase(1, false)); } this.endBattleSetup(); }; @@ -426,37 +426,37 @@ export class MysteryEncounterBattlePhase extends Phase { if (encounterMode !== MysteryEncounterMode.TRAINER_BATTLE) { const ivScannerModifier = globalScene.findModifier(m => m instanceof IvScannerModifier); if (ivScannerModifier) { - enemyField.map(p => globalScene.pushPhase(new ScanIvsPhase(p.getBattlerIndex()))); + enemyField.map(p => globalScene.phaseManager.pushPhase(new ScanIvsPhase(p.getBattlerIndex()))); } } const availablePartyMembers = globalScene.getPlayerParty().filter(p => p.isAllowedInBattle()); if (!availablePartyMembers[0].isOnField()) { - globalScene.pushPhase(new SummonPhase(0)); + globalScene.phaseManager.pushPhase(new SummonPhase(0)); } if (globalScene.currentBattle.double) { if (availablePartyMembers.length > 1) { - globalScene.pushPhase(new ToggleDoublePositionPhase(true)); + globalScene.phaseManager.pushPhase(new ToggleDoublePositionPhase(true)); if (!availablePartyMembers[1].isOnField()) { - globalScene.pushPhase(new SummonPhase(1)); + globalScene.phaseManager.pushPhase(new SummonPhase(1)); } } } else { if (availablePartyMembers.length > 1 && availablePartyMembers[1].isOnField()) { globalScene.getPlayerField().forEach(pokemon => pokemon.lapseTag(BattlerTagType.COMMANDED)); - globalScene.pushPhase(new ReturnPhase(1)); + globalScene.phaseManager.pushPhase(new ReturnPhase(1)); } - globalScene.pushPhase(new ToggleDoublePositionPhase(false)); + globalScene.phaseManager.pushPhase(new ToggleDoublePositionPhase(false)); } if (encounterMode !== MysteryEncounterMode.TRAINER_BATTLE && !this.disableSwitch) { const minPartySize = globalScene.currentBattle.double ? 2 : 1; if (availablePartyMembers.length > minPartySize) { - globalScene.pushPhase(new CheckSwitchPhase(0, globalScene.currentBattle.double)); + globalScene.phaseManager.pushPhase(new CheckSwitchPhase(0, globalScene.currentBattle.double)); if (globalScene.currentBattle.double) { - globalScene.pushPhase(new CheckSwitchPhase(1, globalScene.currentBattle.double)); + globalScene.phaseManager.pushPhase(new CheckSwitchPhase(1, globalScene.currentBattle.double)); } } } @@ -562,8 +562,8 @@ export class MysteryEncounterRewardsPhase extends Phase { if (encounter.doEncounterRewards) { encounter.doEncounterRewards(); } else if (this.addHealPhase) { - globalScene.tryRemovePhase(p => p.is("SelectModifierPhase")); - globalScene.unshiftPhase( + globalScene.phaseManager.tryRemovePhase(p => p.is("SelectModifierPhase")); + globalScene.phaseManager.unshiftPhase( new SelectModifierPhase(0, undefined, { fillRemaining: false, rerollMultiplier: -1, @@ -571,7 +571,7 @@ export class MysteryEncounterRewardsPhase extends Phase { ); } - globalScene.pushPhase(new PostMysteryEncounterPhase()); + globalScene.phaseManager.pushPhase(new PostMysteryEncounterPhase()); this.end(); } } @@ -618,10 +618,10 @@ export class PostMysteryEncounterPhase extends Phase { continueEncounter() { const endPhase = () => { if (globalScene.gameMode.hasRandomBiomes || globalScene.isNewBiome()) { - globalScene.pushPhase(new SelectBiomePhase()); + globalScene.phaseManager.pushPhase(new SelectBiomePhase()); } - globalScene.pushPhase(new NewBattlePhase()); + globalScene.phaseManager.pushPhase(new NewBattlePhase()); this.end(); }; diff --git a/src/phases/new-battle-phase.ts b/src/phases/new-battle-phase.ts index c4cfc72fb53..65ecc81df2d 100644 --- a/src/phases/new-battle-phase.ts +++ b/src/phases/new-battle-phase.ts @@ -7,9 +7,11 @@ export class NewBattlePhase extends BattlePhase { super.start(); // cull any extra `NewBattle` phases from the queue. - globalScene.phaseQueue = globalScene.phaseQueue.filter(phase => !phase.is("NewBattlePhase")); + globalScene.phaseManager.phaseQueue = globalScene.phaseManager.phaseQueue.filter( + phase => !phase.is("NewBattlePhase"), + ); // `phaseQueuePrepend` is private, so we have to use this inefficient loop. - while (globalScene.tryRemoveUnshiftedPhase(phase => phase.is("NewBattlePhase"))) {} + while (globalScene.phaseManager.tryRemoveUnshiftedPhase(phase => phase.is("NewBattlePhase"))) {} globalScene.newBattle(); diff --git a/src/phases/obtain-status-effect-phase.ts b/src/phases/obtain-status-effect-phase.ts index 820db910681..2982bc982d9 100644 --- a/src/phases/obtain-status-effect-phase.ts +++ b/src/phases/obtain-status-effect-phase.ts @@ -41,7 +41,7 @@ export class ObtainStatusEffectPhase extends PokemonPhase { } pokemon.updateInfo(true); new CommonBattleAnim(CommonAnim.POISON + (this.statusEffect! - 1), pokemon).play(false, () => { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( getStatusEffectObtainText( this.statusEffect, getPokemonNameWithAffix(pokemon), @@ -59,7 +59,7 @@ export class ObtainStatusEffectPhase extends PokemonPhase { return; } } else if (pokemon.status?.effect === this.statusEffect) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( getStatusEffectOverlapText(this.statusEffect ?? StatusEffect.NONE, getPokemonNameWithAffix(pokemon)), ); } diff --git a/src/phases/pokemon-heal-phase.ts b/src/phases/pokemon-heal-phase.ts index 60bbb17c30a..6e9b6b5c622 100644 --- a/src/phases/pokemon-heal-phase.ts +++ b/src/phases/pokemon-heal-phase.ts @@ -68,7 +68,7 @@ export class PokemonHealPhase extends CommonAnimPhase { let lastStatusEffect = StatusEffect.NONE; if (healBlock && this.hpHealed > 0) { - globalScene.queueMessage(healBlock.onActivation(pokemon)); + globalScene.phaseManager.queueMessage(healBlock.onActivation(pokemon)); this.message = null; return super.end(); } @@ -119,11 +119,13 @@ export class PokemonHealPhase extends CommonAnimPhase { } if (this.message) { - globalScene.queueMessage(this.message); + globalScene.phaseManager.queueMessage(this.message); } if (this.healStatus && lastStatusEffect && !hasMessage) { - globalScene.queueMessage(getStatusEffectHealText(lastStatusEffect, getPokemonNameWithAffix(pokemon))); + globalScene.phaseManager.queueMessage( + getStatusEffectHealText(lastStatusEffect, getPokemonNameWithAffix(pokemon)), + ); } if (!healOrDamage && !lastStatusEffect) { diff --git a/src/phases/pokemon-transform-phase.ts b/src/phases/pokemon-transform-phase.ts index c0f3b048003..4f18a19b2fb 100644 --- a/src/phases/pokemon-transform-phase.ts +++ b/src/phases/pokemon-transform-phase.ts @@ -65,7 +65,7 @@ export class PokemonTransformPhase extends PokemonPhase { globalScene.playSound("battle_anims/PRSFX- Transform"); } - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("abilityTriggers:postSummonTransform", { pokemonNameWithAffix: getPokemonNameWithAffix(user), targetName: target.name, diff --git a/src/phases/post-game-over-phase.ts b/src/phases/post-game-over-phase.ts index f985419da7a..37a3297cc52 100644 --- a/src/phases/post-game-over-phase.ts +++ b/src/phases/post-game-over-phase.ts @@ -28,7 +28,7 @@ export class PostGameOverPhase extends Phase { return globalScene.reset(true); } globalScene.reset(); - globalScene.unshiftPhase(new TitlePhase()); + globalScene.phaseManager.unshiftPhase(new TitlePhase()); this.end(); }); }); diff --git a/src/phases/post-turn-status-effect-phase.ts b/src/phases/post-turn-status-effect-phase.ts index 47a84059745..33fb012492d 100644 --- a/src/phases/post-turn-status-effect-phase.ts +++ b/src/phases/post-turn-status-effect-phase.ts @@ -32,7 +32,7 @@ export class PostTurnStatusEffectPhase extends PokemonPhase { applyAbAttrs(BlockStatusDamageAbAttr, pokemon, cancelled); if (!cancelled.value) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( getStatusEffectActivationText(pokemon.status.effect, getPokemonNameWithAffix(pokemon)), ); const damage = new NumberHolder(0); diff --git a/src/phases/quiet-form-change-phase.ts b/src/phases/quiet-form-change-phase.ts index f677dcc48df..363b026831f 100644 --- a/src/phases/quiet-form-change-phase.ts +++ b/src/phases/quiet-form-change-phase.ts @@ -159,7 +159,7 @@ export class QuietFormChangePhase extends BattlePhase { this.pokemon.findAndRemoveTags(t => t.tagType === BattlerTagType.AUTOTOMIZED); if (globalScene?.currentBattle.battleSpec === BattleSpec.FINAL_BOSS && this.pokemon.isEnemy()) { globalScene.playBgm(); - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new PokemonHealPhase(this.pokemon.getBattlerIndex(), this.pokemon.getMaxHp(), null, false, false, false, true), ); this.pokemon.findAndRemoveTags(() => true); @@ -168,7 +168,9 @@ export class QuietFormChangePhase extends BattlePhase { this.pokemon.initBattleInfo(); this.pokemon.cry(); - const movePhase = globalScene.findPhase(p => p.is("MovePhase") && p.pokemon === this.pokemon) as MovePhase; + const movePhase = globalScene.phaseManager.findPhase( + p => p.is("MovePhase") && p.pokemon === this.pokemon, + ) as MovePhase; if (movePhase) { movePhase.cancel(); } diff --git a/src/phases/revival-blessing-phase.ts b/src/phases/revival-blessing-phase.ts index 3f70c93dd7a..2db73103a88 100644 --- a/src/phases/revival-blessing-phase.ts +++ b/src/phases/revival-blessing-phase.ts @@ -35,7 +35,7 @@ export class RevivalBlessingPhase extends BattlePhase { pokemon.resetTurnData(); pokemon.resetStatus(true, false, false, false); pokemon.heal(Math.min(toDmgValue(0.5 * pokemon.getMaxHp()), pokemon.getMaxHp())); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("moveTriggers:revivalBlessing", { pokemonName: pokemon.name, }), @@ -51,16 +51,16 @@ export class RevivalBlessingPhase extends BattlePhase { ) { if (slotIndex <= 1) { // Revived ally pokemon - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new SwitchSummonPhase(SwitchType.SWITCH, pokemon.getFieldIndex(), slotIndex, false, true), ); - globalScene.unshiftPhase(new ToggleDoublePositionPhase(true)); + globalScene.phaseManager.unshiftPhase(new ToggleDoublePositionPhase(true)); } else if (allyPokemon.isFainted()) { // Revived party pokemon, and ally pokemon is fainted - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new SwitchSummonPhase(SwitchType.SWITCH, allyPokemon.getFieldIndex(), slotIndex, false, true), ); - globalScene.unshiftPhase(new ToggleDoublePositionPhase(true)); + globalScene.phaseManager.unshiftPhase(new ToggleDoublePositionPhase(true)); } } } diff --git a/src/phases/select-biome-phase.ts b/src/phases/select-biome-phase.ts index ef6b39e8b8f..633bf20d34c 100644 --- a/src/phases/select-biome-phase.ts +++ b/src/phases/select-biome-phase.ts @@ -22,9 +22,9 @@ export class SelectBiomePhase extends BattlePhase { const setNextBiome = (nextBiome: BiomeId) => { if (nextWaveIndex % 10 === 1) { globalScene.applyModifiers(MoneyInterestModifier, true); - globalScene.unshiftPhase(new PartyHealPhase(false)); + globalScene.phaseManager.unshiftPhase(new PartyHealPhase(false)); } - globalScene.unshiftPhase(new SwitchBiomePhase(nextBiome)); + globalScene.phaseManager.unshiftPhase(new SwitchBiomePhase(nextBiome)); this.end(); }; diff --git a/src/phases/select-modifier-phase.ts b/src/phases/select-modifier-phase.ts index 6e429d9ad7f..5ac3b9e6d76 100644 --- a/src/phases/select-modifier-phase.ts +++ b/src/phases/select-modifier-phase.ts @@ -123,7 +123,7 @@ export class SelectModifierPhase extends BattlePhase { return false; } globalScene.reroll = true; - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new SelectModifierPhase( this.rerollCount + 1, this.typeOptions.map(o => o.type?.tier).filter(t => t !== undefined) as ModifierTier[], @@ -247,7 +247,7 @@ export class SelectModifierPhase extends BattlePhase { // If the player selects either of these, then escapes out of consuming them, // they are returned to a shop in the same state. if (modifier.type instanceof RememberMoveModifierType || modifier.type instanceof TmModifierType) { - globalScene.unshiftPhase(this.copy()); + globalScene.phaseManager.unshiftPhase(this.copy()); } if (cost && !(modifier.type instanceof RememberMoveModifierType)) { diff --git a/src/phases/select-starter-phase.ts b/src/phases/select-starter-phase.ts index d25c2dd7211..2b60fcaf054 100644 --- a/src/phases/select-starter-phase.ts +++ b/src/phases/select-starter-phase.ts @@ -25,8 +25,8 @@ export class SelectStarterPhase extends Phase { globalScene.ui.clearText(); globalScene.ui.setMode(UiMode.SAVE_SLOT, SaveSlotUiMode.SAVE, (slotId: number) => { if (slotId === -1) { - globalScene.clearPhaseQueue(); - globalScene.pushPhase(new TitlePhase()); + globalScene.phaseManager.clearPhaseQueue(); + globalScene.phaseManager.pushPhase(new TitlePhase()); return this.end(); } globalScene.sessionSlotId = slotId; diff --git a/src/phases/select-target-phase.ts b/src/phases/select-target-phase.ts index 46ba378a56c..515f7ed98ca 100644 --- a/src/phases/select-target-phase.ts +++ b/src/phases/select-target-phase.ts @@ -28,12 +28,12 @@ export class SelectTargetPhase extends PokemonPhase { const errorMessage = user .getRestrictingTag(move!, user, fieldSide[targets[0]])! .selectionDeniedText(user, moveObject.id); - globalScene.queueMessage(i18next.t(errorMessage, { moveName: moveObject.name }), 0, true); + globalScene.phaseManager.queueMessage(i18next.t(errorMessage, { moveName: moveObject.name }), 0, true); targets = []; } if (targets.length < 1) { globalScene.currentBattle.turnCommands[this.fieldIndex] = null; - globalScene.unshiftPhase(new CommandPhase(this.fieldIndex)); + globalScene.phaseManager.unshiftPhase(new CommandPhase(this.fieldIndex)); } else { turnCommand!.targets = targets; //TODO: is the bang correct here? } diff --git a/src/phases/show-ability-phase.ts b/src/phases/show-ability-phase.ts index 81aa69537e5..e4be6124784 100644 --- a/src/phases/show-ability-phase.ts +++ b/src/phases/show-ability-phase.ts @@ -36,8 +36,8 @@ export class ShowAbilityPhase extends PokemonPhase { // If the bar is already out, hide it before showing the new one if (globalScene.abilityBar.isVisible()) { - globalScene.unshiftPhase(new HideAbilityPhase()); - globalScene.unshiftPhase(new ShowAbilityPhase(this.battlerIndex, this.passive)); + globalScene.phaseManager.unshiftPhase(new HideAbilityPhase()); + globalScene.phaseManager.unshiftPhase(new ShowAbilityPhase(this.battlerIndex, this.passive)); return this.end(); } diff --git a/src/phases/show-party-exp-bar-phase.ts b/src/phases/show-party-exp-bar-phase.ts index 6b4236f0868..765bd498f66 100644 --- a/src/phases/show-party-exp-bar-phase.ts +++ b/src/phases/show-party-exp-bar-phase.ts @@ -29,9 +29,9 @@ export class ShowPartyExpBarPhase extends PlayerPartyMemberPokemonPhase { pokemon.addExp(exp.value); const newLevel = pokemon.level; if (newLevel > lastLevel) { - globalScene.unshiftPhase(new LevelUpPhase(this.partyMemberIndex, lastLevel, newLevel)); + globalScene.phaseManager.unshiftPhase(new LevelUpPhase(this.partyMemberIndex, lastLevel, newLevel)); } - globalScene.unshiftPhase(new HidePartyExpBarPhase()); + globalScene.phaseManager.unshiftPhase(new HidePartyExpBarPhase()); pokemon.updateInfo(); if (globalScene.expParty === ExpNotification.SKIP) { diff --git a/src/phases/stat-stage-change-phase.ts b/src/phases/stat-stage-change-phase.ts index baa93c63099..49f3952ef01 100644 --- a/src/phases/stat-stage-change-phase.ts +++ b/src/phases/stat-stage-change-phase.ts @@ -72,7 +72,7 @@ export class StatStageChangePhase extends PokemonPhase { if (this.stats.length > 1) { for (let i = 0; i < this.stats.length; i++) { const stat = [this.stats[i]]; - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new StatStageChangePhase( this.battlerIndex, this.selfTarget, @@ -212,7 +212,7 @@ export class StatStageChangePhase extends PokemonPhase { if (this.showMessage) { const messages = this.getStatStageChangeMessages(filteredStats, stages.value, relLevels); for (const message of messages) { - globalScene.queueMessage(message); + globalScene.phaseManager.queueMessage(message); } } @@ -235,7 +235,7 @@ export class StatStageChangePhase extends PokemonPhase { applyPostStatStageChangeAbAttrs(PostStatStageChangeAbAttr, pokemon, filteredStats, this.stages, this.selfTarget); // Look for any other stat change phases; if this is the last one, do White Herb check - const existingPhase = globalScene.findPhase( + const existingPhase = globalScene.phaseManager.findPhase( p => p.is("StatStageChangePhase") && p.battlerIndex === this.battlerIndex, ); if (!existingPhase?.is("StatStageChangePhase")) { @@ -315,7 +315,7 @@ export class StatStageChangePhase extends PokemonPhase { let existingPhase: StatStageChangePhase; if (this.stats.length === 1) { while ( - (existingPhase = globalScene.findPhase( + (existingPhase = globalScene.phaseManager.findPhase( p => p.is("StatStageChangePhase") && p.battlerIndex === this.battlerIndex && @@ -328,13 +328,13 @@ export class StatStageChangePhase extends PokemonPhase { ) { this.stages += existingPhase.stages; - if (!globalScene.tryRemovePhase(p => p === existingPhase)) { + if (!globalScene.phaseManager.tryRemovePhase(p => p === existingPhase)) { break; } } } while ( - (existingPhase = globalScene.findPhase( + (existingPhase = globalScene.phaseManager.findPhase( p => p.is("StatStageChangePhase") && p.battlerIndex === this.battlerIndex && @@ -346,7 +346,7 @@ export class StatStageChangePhase extends PokemonPhase { ) as StatStageChangePhase) ) { this.stats.push(...existingPhase.stats); - if (!globalScene.tryRemovePhase(p => p === existingPhase)) { + if (!globalScene.phaseManager.tryRemovePhase(p => p === existingPhase)) { break; } } diff --git a/src/phases/summon-phase.ts b/src/phases/summon-phase.ts index 2cd7b122bb3..15f42e76a5a 100644 --- a/src/phases/summon-phase.ts +++ b/src/phases/summon-phase.ts @@ -57,8 +57,8 @@ export class SummonPhase extends PartyMemberPokemonPhase { if (legalIndex === -1) { console.error("Party Details:\n", party); console.error("All available Pokemon were fainted or illegal!"); - globalScene.clearPhaseQueue(); - globalScene.unshiftPhase(new GameOverPhase()); + globalScene.phaseManager.clearPhaseQueue(); + globalScene.phaseManager.unshiftPhase(new GameOverPhase()); this.end(); return; } @@ -275,7 +275,7 @@ export class SummonPhase extends PartyMemberPokemonPhase { const pokemon = this.getPokemon(); if (pokemon.isShiny(true)) { - globalScene.unshiftPhase(new ShinySparklePhase(pokemon.getBattlerIndex())); + globalScene.phaseManager.unshiftPhase(new ShinySparklePhase(pokemon.getBattlerIndex())); } pokemon.resetTurnData(); @@ -291,7 +291,7 @@ export class SummonPhase extends PartyMemberPokemonPhase { } queuePostSummon(): void { - globalScene.pushPhase(new PostSummonPhase(this.getPokemon().getBattlerIndex())); + globalScene.phaseManager.pushPhase(new PostSummonPhase(this.getPokemon().getBattlerIndex())); } end() { diff --git a/src/phases/switch-phase.ts b/src/phases/switch-phase.ts index 6017aa0fa70..5f2ae55900e 100644 --- a/src/phases/switch-phase.ts +++ b/src/phases/switch-phase.ts @@ -76,9 +76,13 @@ export class SwitchPhase extends BattlePhase { if (slotIndex >= globalScene.currentBattle.getBattlerCount() && slotIndex < 6) { // Remove any pre-existing PostSummonPhase under the same field index. // Pre-existing PostSummonPhases may occur when this phase is invoked during a prompt to switch at the start of a wave. - globalScene.tryRemovePhase(p => p.is("PostSummonPhase") && p.player && p.fieldIndex === this.fieldIndex); + globalScene.phaseManager.tryRemovePhase( + p => p.is("PostSummonPhase") && p.player && p.fieldIndex === this.fieldIndex, + ); const switchType = option === PartyOption.PASS_BATON ? SwitchType.BATON_PASS : this.switchType; - globalScene.unshiftPhase(new SwitchSummonPhase(switchType, fieldIndex, slotIndex, this.doReturn)); + globalScene.phaseManager.unshiftPhase( + new SwitchSummonPhase(switchType, fieldIndex, slotIndex, this.doReturn), + ); } globalScene.ui.setMode(UiMode.MESSAGE).then(() => super.end()); }, diff --git a/src/phases/switch-summon-phase.ts b/src/phases/switch-summon-phase.ts index 1872dae1f1f..de8b9f3a5d9 100644 --- a/src/phases/switch-summon-phase.ts +++ b/src/phases/switch-summon-phase.ts @@ -265,6 +265,6 @@ export class SwitchSummonPhase extends SummonPhase { } queuePostSummon(): void { - globalScene.unshiftPhase(new PostSummonPhase(this.getPokemon().getBattlerIndex())); + globalScene.phaseManager.unshiftPhase(new PostSummonPhase(this.getPokemon().getBattlerIndex())); } } diff --git a/src/phases/tera-phase.ts b/src/phases/tera-phase.ts index 5e4ea2fe54e..5f403f5419e 100644 --- a/src/phases/tera-phase.ts +++ b/src/phases/tera-phase.ts @@ -21,7 +21,7 @@ export class TeraPhase extends BattlePhase { start() { super.start(); - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( i18next.t("battle:pokemonTerastallized", { pokemonNameWithAffix: getPokemonNameWithAffix(this.pokemon), type: i18next.t(`pokemonInfo:Type.${PokemonType[this.pokemon.getTeraType()]}`), diff --git a/src/phases/title-phase.ts b/src/phases/title-phase.ts index aa9ae49ca8b..fb980d87359 100644 --- a/src/phases/title-phase.ts +++ b/src/phases/title-phase.ts @@ -124,8 +124,8 @@ export class TitlePhase extends Phase { options.push({ label: i18next.t("menu:cancel"), handler: () => { - globalScene.clearPhaseQueue(); - globalScene.pushPhase(new TitlePhase()); + globalScene.phaseManager.clearPhaseQueue(); + globalScene.phaseManager.pushPhase(new TitlePhase()); super.end(); return true; }, @@ -198,9 +198,9 @@ export class TitlePhase extends Phase { initDailyRun(): void { globalScene.ui.clearText(); globalScene.ui.setMode(UiMode.SAVE_SLOT, SaveSlotUiMode.SAVE, (slotId: number) => { - globalScene.clearPhaseQueue(); + globalScene.phaseManager.clearPhaseQueue(); if (slotId === -1) { - globalScene.pushPhase(new TitlePhase()); + globalScene.phaseManager.pushPhase(new TitlePhase()); return super.end(); } globalScene.sessionSlotId = slotId; @@ -304,23 +304,23 @@ export class TitlePhase extends Phase { globalScene.arena.preloadBgm(); globalScene.gameMode = getGameMode(this.gameMode); if (this.gameMode === GameModes.CHALLENGE) { - globalScene.pushPhase(new SelectChallengePhase()); + globalScene.phaseManager.pushPhase(new SelectChallengePhase()); } else { - globalScene.pushPhase(new SelectStarterPhase()); + globalScene.phaseManager.pushPhase(new SelectStarterPhase()); } globalScene.newArena(globalScene.gameMode.getStartingBiome()); } else { globalScene.playBgm(); } - globalScene.pushPhase(new EncounterPhase(this.loaded)); + globalScene.phaseManager.pushPhase(new EncounterPhase(this.loaded)); if (this.loaded) { const availablePartyMembers = globalScene.getPokemonAllowedInBattle().length; - globalScene.pushPhase(new SummonPhase(0, true, true)); + globalScene.phaseManager.pushPhase(new SummonPhase(0, true, true)); if (globalScene.currentBattle.double && availablePartyMembers > 1) { - globalScene.pushPhase(new SummonPhase(1, true, true)); + globalScene.phaseManager.pushPhase(new SummonPhase(1, true, true)); } if ( @@ -329,9 +329,9 @@ export class TitlePhase extends Phase { ) { const minPartySize = globalScene.currentBattle.double ? 2 : 1; if (availablePartyMembers > minPartySize) { - globalScene.pushPhase(new CheckSwitchPhase(0, globalScene.currentBattle.double)); + globalScene.phaseManager.pushPhase(new CheckSwitchPhase(0, globalScene.currentBattle.double)); if (globalScene.currentBattle.double) { - globalScene.pushPhase(new CheckSwitchPhase(1, globalScene.currentBattle.double)); + globalScene.phaseManager.pushPhase(new CheckSwitchPhase(1, globalScene.currentBattle.double)); } } } diff --git a/src/phases/trainer-victory-phase.ts b/src/phases/trainer-victory-phase.ts index bd035248530..5b7b26d52fb 100644 --- a/src/phases/trainer-victory-phase.ts +++ b/src/phases/trainer-victory-phase.ts @@ -20,11 +20,13 @@ export class TrainerVictoryPhase extends BattlePhase { globalScene.playBgm(globalScene.currentBattle.trainer?.config.victoryBgm); - globalScene.unshiftPhase(new MoneyRewardPhase(globalScene.currentBattle.trainer?.config.moneyMultiplier!)); // TODO: is this bang correct? + globalScene.phaseManager.unshiftPhase( + new MoneyRewardPhase(globalScene.currentBattle.trainer?.config.moneyMultiplier!), + ); // TODO: is this bang correct? const modifierRewardFuncs = globalScene.currentBattle.trainer?.config.modifierRewardFuncs!; // TODO: is this bang correct? for (const modifierRewardFunc of modifierRewardFuncs) { - globalScene.unshiftPhase(new ModifierRewardPhase(modifierRewardFunc)); + globalScene.phaseManager.unshiftPhase(new ModifierRewardPhase(modifierRewardFunc)); } const trainerType = globalScene.currentBattle.trainer?.config.trainerType!; // TODO: is this bang correct? @@ -35,7 +37,7 @@ export class TrainerVictoryPhase extends BattlePhase { globalScene.currentBattle.trainer?.config.isBoss ) { if (timedEventManager.getUpgradeUnlockedVouchers()) { - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new ModifierRewardPhase( [ modifierTypes.VOUCHER_PLUS, @@ -46,7 +48,7 @@ export class TrainerVictoryPhase extends BattlePhase { ), ); } else { - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new ModifierRewardPhase( [modifierTypes.VOUCHER, modifierTypes.VOUCHER, modifierTypes.VOUCHER_PLUS, modifierTypes.VOUCHER_PREMIUM][ vouchers[TrainerType[trainerType]].voucherType diff --git a/src/phases/turn-end-phase.ts b/src/phases/turn-end-phase.ts index 4d486c4bbd6..832f60043ce 100644 --- a/src/phases/turn-end-phase.ts +++ b/src/phases/turn-end-phase.ts @@ -25,7 +25,7 @@ export class TurnEndPhase extends FieldPhase { globalScene.currentBattle.incrementTurn(); globalScene.eventTarget.dispatchEvent(new TurnEndEvent(globalScene.currentBattle.turn)); - globalScene.hideAbilityBar(); + globalScene.phaseManager.hideAbilityBar(); const handlePokemon = (pokemon: Pokemon) => { if (!pokemon.switchOutStatus) { @@ -34,7 +34,7 @@ export class TurnEndPhase extends FieldPhase { globalScene.applyModifiers(TurnHealModifier, pokemon.isPlayer(), pokemon); if (globalScene.arena.terrain?.terrainType === TerrainType.GRASSY && pokemon.isGrounded()) { - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new PokemonHealPhase( pokemon.getBattlerIndex(), Math.max(pokemon.getMaxHp() >> 4, 1), diff --git a/src/phases/turn-init-phase.ts b/src/phases/turn-init-phase.ts index 7f94acd3b32..61ec5fd8a71 100644 --- a/src/phases/turn-init-phase.ts +++ b/src/phases/turn-init-phase.ts @@ -22,14 +22,18 @@ export class TurnInitPhase extends FieldPhase { globalScene.getPlayerField().forEach(p => { // If this pokemon is in play and evolved into something illegal under the current challenge, force a switch if (p.isOnField() && !p.isAllowedInBattle()) { - globalScene.queueMessage(i18next.t("challenges:illegalEvolution", { pokemon: p.name }), null, true); + globalScene.phaseManager.queueMessage( + i18next.t("challenges:illegalEvolution", { pokemon: p.name }), + null, + true, + ); const allowedPokemon = globalScene.getPokemonAllowedInBattle(); if (!allowedPokemon.length) { // If there are no longer any legal pokemon in the party, game over. - globalScene.clearPhaseQueue(); - globalScene.unshiftPhase(new GameOverPhase()); + globalScene.phaseManager.clearPhaseQueue(); + globalScene.phaseManager.unshiftPhase(new GameOverPhase()); } else if ( allowedPokemon.length >= globalScene.currentBattle.getBattlerCount() || (globalScene.currentBattle.double && !allowedPokemon[0].isActive(true)) @@ -42,7 +46,7 @@ export class TurnInitPhase extends FieldPhase { p.leaveField(); } if (allowedPokemon.length === 1 && globalScene.currentBattle.double) { - globalScene.unshiftPhase(new ToggleDoublePositionPhase(true)); + globalScene.phaseManager.unshiftPhase(new ToggleDoublePositionPhase(true)); } } }); @@ -65,11 +69,13 @@ export class TurnInitPhase extends FieldPhase { pokemon.resetTurnData(); - globalScene.pushPhase(pokemon.isPlayer() ? new CommandPhase(i) : new EnemyCommandPhase(i - BattlerIndex.ENEMY)); + globalScene.phaseManager.pushPhase( + pokemon.isPlayer() ? new CommandPhase(i) : new EnemyCommandPhase(i - BattlerIndex.ENEMY), + ); } }); - globalScene.pushPhase(new TurnStartPhase()); + globalScene.phaseManager.pushPhase(new TurnStartPhase()); this.end(); } diff --git a/src/phases/turn-start-phase.ts b/src/phases/turn-start-phase.ts index 2d009b30bf3..c07feac0888 100644 --- a/src/phases/turn-start-phase.ts +++ b/src/phases/turn-start-phase.ts @@ -153,7 +153,7 @@ export class TurnStartPhase extends FieldPhase { switch (preTurnCommand?.command) { case Command.TERA: - globalScene.pushPhase(new TeraPhase(pokemon)); + globalScene.phaseManager.pushPhase(new TeraPhase(pokemon)); } } @@ -176,11 +176,13 @@ export class TurnStartPhase extends FieldPhase { pokemon.getMoveset().find(m => m.moveId === queuedMove.move && m.ppUsed < m.getMovePp()) || new PokemonMove(queuedMove.move); if (move.getMove().hasAttr(MoveHeaderAttr)) { - globalScene.unshiftPhase(new MoveHeaderPhase(pokemon, move)); + globalScene.phaseManager.unshiftPhase(new MoveHeaderPhase(pokemon, move)); } if (pokemon.isPlayer()) { if (turnCommand.cursor === -1) { - globalScene.pushPhase(new MovePhase(pokemon, turnCommand.targets || turnCommand.move!.targets, move)); //TODO: is the bang correct here? + globalScene.phaseManager.pushPhase( + new MovePhase(pokemon, turnCommand.targets || turnCommand.move!.targets, move), + ); //TODO: is the bang correct here? } else { const playerPhase = new MovePhase( pokemon, @@ -189,10 +191,10 @@ export class TurnStartPhase extends FieldPhase { false, queuedMove.ignorePP, ); //TODO: is the bang correct here? - globalScene.pushPhase(playerPhase); + globalScene.phaseManager.pushPhase(playerPhase); } } else { - globalScene.pushPhase( + globalScene.phaseManager.pushPhase( new MovePhase( pokemon, turnCommand.targets || turnCommand.move!.targets, @@ -204,11 +206,13 @@ export class TurnStartPhase extends FieldPhase { } break; case Command.BALL: - globalScene.unshiftPhase(new AttemptCapturePhase(turnCommand.targets![0] % 2, turnCommand.cursor!)); //TODO: is the bang correct here? + globalScene.phaseManager.unshiftPhase( + new AttemptCapturePhase(turnCommand.targets![0] % 2, turnCommand.cursor!), + ); //TODO: is the bang correct here? break; case Command.POKEMON: const switchType = turnCommand.args?.[0] ? SwitchType.BATON_PASS : SwitchType.SWITCH; - globalScene.unshiftPhase( + globalScene.phaseManager.unshiftPhase( new SwitchSummonPhase(switchType, pokemon.getFieldIndex(), turnCommand.cursor!, true, pokemon.isPlayer()), ); break; @@ -233,18 +237,18 @@ export class TurnStartPhase extends FieldPhase { runningPokemon = hasRunAway !== undefined ? hasRunAway : fasterPokemon; } } - globalScene.unshiftPhase(new AttemptRunPhase(runningPokemon.getFieldIndex())); + globalScene.phaseManager.unshiftPhase(new AttemptRunPhase(runningPokemon.getFieldIndex())); break; } } - globalScene.pushPhase(new WeatherEffectPhase()); - globalScene.pushPhase(new BerryPhase()); + globalScene.phaseManager.pushPhase(new WeatherEffectPhase()); + globalScene.phaseManager.pushPhase(new BerryPhase()); /** Add a new phase to check who should be taking status damage */ - globalScene.pushPhase(new CheckStatusEffectPhase(moveOrder)); + globalScene.phaseManager.pushPhase(new CheckStatusEffectPhase(moveOrder)); - globalScene.pushPhase(new TurnEndPhase()); + globalScene.phaseManager.pushPhase(new TurnEndPhase()); /** * this.end() will call shiftPhase(), which dumps everything from PrependQueue (aka everything that is unshifted()) to the front diff --git a/src/phases/unavailable-phase.ts b/src/phases/unavailable-phase.ts index 4c4333ceb90..a6fc4a1be61 100644 --- a/src/phases/unavailable-phase.ts +++ b/src/phases/unavailable-phase.ts @@ -7,7 +7,7 @@ export class UnavailablePhase extends Phase { public readonly phaseName = "UnavailablePhase"; start(): void { globalScene.ui.setMode(UiMode.UNAVAILABLE, () => { - globalScene.unshiftPhase(new LoginPhase(true)); + globalScene.phaseManager.unshiftPhase(new LoginPhase(true)); this.end(); }); } diff --git a/src/phases/victory-phase.ts b/src/phases/victory-phase.ts index 2d21f8abc08..0a08e010720 100644 --- a/src/phases/victory-phase.ts +++ b/src/phases/victory-phase.ts @@ -51,12 +51,12 @@ export class VictoryPhase extends PokemonPhase { .getEnemyParty() .find(p => (globalScene.currentBattle.battleType === BattleType.WILD ? p.isOnField() : !p?.isFainted(true))) ) { - globalScene.pushPhase(new BattleEndPhase(true)); + globalScene.phaseManager.pushPhase(new BattleEndPhase(true)); if (globalScene.currentBattle.battleType === BattleType.TRAINER) { - globalScene.pushPhase(new TrainerVictoryPhase()); + globalScene.phaseManager.pushPhase(new TrainerVictoryPhase()); } if (globalScene.gameMode.isEndless || !globalScene.gameMode.isWaveFinal(globalScene.currentBattle.waveIndex)) { - globalScene.pushPhase(new EggLapsePhase()); + globalScene.phaseManager.pushPhase(new EggLapsePhase()); if (globalScene.gameMode.isClassic) { switch (globalScene.currentBattle.waveIndex) { case ClassicFixedBossWaves.RIVAL_1: @@ -64,34 +64,36 @@ export class VictoryPhase extends PokemonPhase { // Get event modifiers for this wave timedEventManager .getFixedBattleEventRewards(globalScene.currentBattle.waveIndex) - .map(r => globalScene.pushPhase(new ModifierRewardPhase(modifierTypes[r]))); + .map(r => globalScene.phaseManager.pushPhase(new ModifierRewardPhase(modifierTypes[r]))); break; case ClassicFixedBossWaves.EVIL_BOSS_2: // Should get Lock Capsule on 165 before shop phase so it can be used in the rewards shop - globalScene.pushPhase(new ModifierRewardPhase(modifierTypes.LOCK_CAPSULE)); + globalScene.phaseManager.pushPhase(new ModifierRewardPhase(modifierTypes.LOCK_CAPSULE)); break; } } if (globalScene.currentBattle.waveIndex % 10) { - globalScene.pushPhase(new SelectModifierPhase(undefined, undefined, this.getFixedBattleCustomModifiers())); + globalScene.phaseManager.pushPhase( + new SelectModifierPhase(undefined, undefined, this.getFixedBattleCustomModifiers()), + ); } else if (globalScene.gameMode.isDaily) { - globalScene.pushPhase(new ModifierRewardPhase(modifierTypes.EXP_CHARM)); + globalScene.phaseManager.pushPhase(new ModifierRewardPhase(modifierTypes.EXP_CHARM)); if ( globalScene.currentBattle.waveIndex > 10 && !globalScene.gameMode.isWaveFinal(globalScene.currentBattle.waveIndex) ) { - globalScene.pushPhase(new ModifierRewardPhase(modifierTypes.GOLDEN_POKEBALL)); + globalScene.phaseManager.pushPhase(new ModifierRewardPhase(modifierTypes.GOLDEN_POKEBALL)); } } else { const superExpWave = !globalScene.gameMode.isEndless ? (globalScene.offsetGym ? 0 : 20) : 10; if (globalScene.gameMode.isEndless && globalScene.currentBattle.waveIndex === 10) { - globalScene.pushPhase(new ModifierRewardPhase(modifierTypes.EXP_SHARE)); + globalScene.phaseManager.pushPhase(new ModifierRewardPhase(modifierTypes.EXP_SHARE)); } if ( globalScene.currentBattle.waveIndex <= 750 && (globalScene.currentBattle.waveIndex <= 500 || globalScene.currentBattle.waveIndex % 30 === superExpWave) ) { - globalScene.pushPhase( + globalScene.phaseManager.pushPhase( new ModifierRewardPhase( globalScene.currentBattle.waveIndex % 30 !== superExpWave || globalScene.currentBattle.waveIndex > 250 ? modifierTypes.EXP_CHARM @@ -100,30 +102,30 @@ export class VictoryPhase extends PokemonPhase { ); } if (globalScene.currentBattle.waveIndex <= 150 && !(globalScene.currentBattle.waveIndex % 50)) { - globalScene.pushPhase(new ModifierRewardPhase(modifierTypes.GOLDEN_POKEBALL)); + globalScene.phaseManager.pushPhase(new ModifierRewardPhase(modifierTypes.GOLDEN_POKEBALL)); } if (globalScene.gameMode.isEndless && !(globalScene.currentBattle.waveIndex % 50)) { - globalScene.pushPhase( + globalScene.phaseManager.pushPhase( new ModifierRewardPhase( !(globalScene.currentBattle.waveIndex % 250) ? modifierTypes.VOUCHER_PREMIUM : modifierTypes.VOUCHER_PLUS, ), ); - globalScene.pushPhase(new AddEnemyBuffModifierPhase()); + globalScene.phaseManager.pushPhase(new AddEnemyBuffModifierPhase()); } } if (globalScene.gameMode.hasRandomBiomes || globalScene.isNewBiome()) { - globalScene.pushPhase(new SelectBiomePhase()); + globalScene.phaseManager.pushPhase(new SelectBiomePhase()); } - globalScene.pushPhase(new NewBattlePhase()); + globalScene.phaseManager.pushPhase(new NewBattlePhase()); } else { globalScene.currentBattle.battleType = BattleType.CLEAR; globalScene.score += globalScene.gameMode.getClearScoreBonus(); globalScene.updateScoreText(); - globalScene.pushPhase(new GameOverPhase(true)); + globalScene.phaseManager.pushPhase(new GameOverPhase(true)); } } diff --git a/src/phases/weather-effect-phase.ts b/src/phases/weather-effect-phase.ts index cd91b89771c..2918cd462df 100644 --- a/src/phases/weather-effect-phase.ts +++ b/src/phases/weather-effect-phase.ts @@ -65,7 +65,7 @@ export class WeatherEffectPhase extends CommonAnimPhase { const damage = toDmgValue(pokemon.getMaxHp() / 16); - globalScene.queueMessage(getWeatherDamageMessage(this.weather!.weatherType, pokemon) ?? ""); + globalScene.phaseManager.queueMessage(getWeatherDamageMessage(this.weather!.weatherType, pokemon) ?? ""); pokemon.damageAndUpdate(damage, { result: HitResult.INDIRECT, ignoreSegments: true }); }; diff --git a/src/system/game-data.ts b/src/system/game-data.ts index d9b8d73d3c3..9a24194b8e9 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -426,8 +426,8 @@ export class GameData { globalScene.ui.savingIcon.hide(); if (error) { if (error.startsWith("session out of date")) { - globalScene.clearPhaseQueue(); - globalScene.unshiftPhase(new ReloadSessionPhase()); + globalScene.phaseManager.clearPhaseQueue(); + globalScene.phaseManager.unshiftPhase(new ReloadSessionPhase()); } console.error(error); return resolve(false); @@ -459,7 +459,7 @@ export class GameData { saveDataOrErr[0] !== "{" ) { if (saveDataOrErr === 404) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( "Save data could not be found. If this is a new account, you can safely ignore this message.", null, true, @@ -467,7 +467,7 @@ export class GameData { return resolve(true); } if (typeof saveDataOrErr === "string" && saveDataOrErr?.includes("Too many connections")) { - globalScene.queueMessage( + globalScene.phaseManager.queueMessage( "Too many people are trying to connect and the server is overloaded. Please try again later.", null, true, @@ -746,8 +746,8 @@ export class GameData { }); if (systemData) { - globalScene.clearPhaseQueue(); - globalScene.unshiftPhase(new ReloadSessionPhase(JSON.stringify(systemData))); + globalScene.phaseManager.clearPhaseQueue(); + globalScene.phaseManager.unshiftPhase(new ReloadSessionPhase(JSON.stringify(systemData))); this.clearLocalData(); return false; } @@ -1248,8 +1248,8 @@ export class GameData { pokerogueApi.savedata.session.delete({ slot: slotId, clientSessionId }).then(error => { if (error) { if (error.startsWith("session out of date")) { - globalScene.clearPhaseQueue(); - globalScene.unshiftPhase(new ReloadSessionPhase()); + globalScene.phaseManager.clearPhaseQueue(); + globalScene.phaseManager.unshiftPhase(new ReloadSessionPhase()); } console.error(error); resolve(false); @@ -1320,8 +1320,8 @@ export class GameData { localStorage.removeItem(`sessionData${slotId ? slotId : ""}_${loggedInUser?.username}`); } else { if (jsonResponse?.error?.startsWith("session out of date")) { - globalScene.clearPhaseQueue(); - globalScene.unshiftPhase(new ReloadSessionPhase()); + globalScene.phaseManager.clearPhaseQueue(); + globalScene.phaseManager.unshiftPhase(new ReloadSessionPhase()); } console.error(jsonResponse); @@ -1458,8 +1458,8 @@ export class GameData { } if (error) { if (error.startsWith("session out of date")) { - globalScene.clearPhaseQueue(); - globalScene.unshiftPhase(new ReloadSessionPhase()); + globalScene.phaseManager.clearPhaseQueue(); + globalScene.phaseManager.unshiftPhase(new ReloadSessionPhase()); } console.error(error); return resolve(false); diff --git a/src/ui/ball-ui-handler.ts b/src/ui/ball-ui-handler.ts index 66d7847213f..bb1e8d0e85e 100644 --- a/src/ui/ball-ui-handler.ts +++ b/src/ui/ball-ui-handler.ts @@ -78,7 +78,7 @@ export default class BallUiHandler extends UiHandler { const pokeballTypeCount = Object.keys(globalScene.pokeballCounts).length; if (button === Button.ACTION || button === Button.CANCEL) { - const commandPhase = globalScene.getCurrentPhase() as CommandPhase; + const commandPhase = globalScene.phaseManager.getCurrentPhase() as CommandPhase; success = true; if (button === Button.ACTION && this.cursor < pokeballTypeCount) { if (globalScene.pokeballCounts[this.cursor]) { diff --git a/src/ui/challenges-select-ui-handler.ts b/src/ui/challenges-select-ui-handler.ts index d1df16a457b..d2c2dbc6c0d 100644 --- a/src/ui/challenges-select-ui-handler.ts +++ b/src/ui/challenges-select-ui-handler.ts @@ -383,16 +383,16 @@ export default class GameChallengesUiHandler extends UiHandler { this.cursorObj?.setVisible(true); this.updateChallengeArrows(this.startCursor.visible); } else { - globalScene.clearPhaseQueue(); - globalScene.pushPhase(new TitlePhase()); - globalScene.getCurrentPhase()?.end(); + globalScene.phaseManager.clearPhaseQueue(); + globalScene.phaseManager.pushPhase(new TitlePhase()); + globalScene.phaseManager.getCurrentPhase()?.end(); } success = true; } else if (button === Button.SUBMIT || button === Button.ACTION) { if (this.hasSelectedChallenge) { if (this.startCursor.visible) { - globalScene.unshiftPhase(new SelectStarterPhase()); - globalScene.getCurrentPhase()?.end(); + globalScene.phaseManager.unshiftPhase(new SelectStarterPhase()); + globalScene.phaseManager.getCurrentPhase()?.end(); } else { this.startCursor.setVisible(true); this.cursorObj?.setVisible(false); diff --git a/src/ui/command-ui-handler.ts b/src/ui/command-ui-handler.ts index 0d67fdea624..0d38672323a 100644 --- a/src/ui/command-ui-handler.ts +++ b/src/ui/command-ui-handler.ts @@ -74,11 +74,11 @@ export default class CommandUiHandler extends UiHandler { this.commandsContainer.setVisible(true); let commandPhase: CommandPhase; - const currentPhase = globalScene.getCurrentPhase(); + const currentPhase = globalScene.phaseManager.getCurrentPhase(); if (currentPhase?.is("CommandPhase")) { commandPhase = currentPhase; } else { - commandPhase = globalScene.getStandbyPhase() as CommandPhase; + commandPhase = globalScene.phaseManager.getStandbyPhase() as CommandPhase; } if (this.canTera()) { @@ -124,7 +124,7 @@ export default class CommandUiHandler extends UiHandler { switch (cursor) { // Fight case Command.FIGHT: - ui.setMode(UiMode.FIGHT, (globalScene.getCurrentPhase() as CommandPhase).getFieldIndex()); + ui.setMode(UiMode.FIGHT, (globalScene.phaseManager.getCurrentPhase() as CommandPhase).getFieldIndex()); success = true; break; // Ball @@ -137,7 +137,7 @@ export default class CommandUiHandler extends UiHandler { ui.setMode( UiMode.PARTY, PartyUiMode.SWITCH, - (globalScene.getCurrentPhase() as CommandPhase).getPokemon().getFieldIndex(), + (globalScene.phaseManager.getCurrentPhase() as CommandPhase).getPokemon().getFieldIndex(), null, PartyUiHandler.FilterNonFainted, ); @@ -145,16 +145,20 @@ export default class CommandUiHandler extends UiHandler { break; // Run case Command.RUN: - (globalScene.getCurrentPhase() as CommandPhase).handleCommand(Command.RUN, 0); + (globalScene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(Command.RUN, 0); success = true; break; case Command.TERA: - ui.setMode(UiMode.FIGHT, (globalScene.getCurrentPhase() as CommandPhase).getFieldIndex(), Command.TERA); + ui.setMode( + UiMode.FIGHT, + (globalScene.phaseManager.getCurrentPhase() as CommandPhase).getFieldIndex(), + Command.TERA, + ); success = true; break; } } else { - (globalScene.getCurrentPhase() as CommandPhase).cancel(); + (globalScene.phaseManager.getCurrentPhase() as CommandPhase).cancel(); } } else { switch (button) { diff --git a/src/ui/egg-hatch-scene-handler.ts b/src/ui/egg-hatch-scene-handler.ts index b2863a213f8..85c4199ff1d 100644 --- a/src/ui/egg-hatch-scene-handler.ts +++ b/src/ui/egg-hatch-scene-handler.ts @@ -44,7 +44,7 @@ export default class EggHatchSceneHandler extends UiHandler { processInput(button: Button): boolean { if (button === Button.ACTION || button === Button.CANCEL) { - const phase = globalScene.getCurrentPhase(); + const phase = globalScene.phaseManager.getCurrentPhase(); if (phase?.is("EggHatchPhase") && phase.trySkip()) { return true; } diff --git a/src/ui/egg-summary-ui-handler.ts b/src/ui/egg-summary-ui-handler.ts index ed2506ba0c1..90dc60e16b7 100644 --- a/src/ui/egg-summary-ui-handler.ts +++ b/src/ui/egg-summary-ui-handler.ts @@ -221,7 +221,7 @@ export default class EggSummaryUiHandler extends MessageUiHandler { let error = false; if (button === Button.CANCEL) { if (!this.blockExit) { - const phase = globalScene.getCurrentPhase(); + const phase = globalScene.phaseManager.getCurrentPhase(); if (phase?.is("EggSummaryPhase")) { phase.end(); } diff --git a/src/ui/fight-ui-handler.ts b/src/ui/fight-ui-handler.ts index 208e627023b..3fe06cdf039 100644 --- a/src/ui/fight-ui-handler.ts +++ b/src/ui/fight-ui-handler.ts @@ -126,7 +126,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { messageHandler.bg.setVisible(false); messageHandler.commandWindow.setVisible(false); messageHandler.movesWindowContainer.setVisible(true); - const pokemon = (globalScene.getCurrentPhase() as CommandPhase).getPokemon(); + const pokemon = (globalScene.phaseManager.getCurrentPhase() as CommandPhase).getPokemon(); if (pokemon.tempSummonData.turnCount <= 1) { this.setCursor(0); } else { @@ -147,7 +147,9 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { if (button === Button.CANCEL || button === Button.ACTION) { if (button === Button.ACTION) { - if ((globalScene.getCurrentPhase() as CommandPhase).handleCommand(this.fromCommand, cursor, false)) { + if ( + (globalScene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(this.fromCommand, cursor, false) + ) { success = true; } else { ui.playError(); @@ -237,7 +239,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { ui.add(this.cursorObj); } - const pokemon = (globalScene.getCurrentPhase() as CommandPhase).getPokemon(); + const pokemon = (globalScene.phaseManager.getCurrentPhase() as CommandPhase).getPokemon(); const moveset = pokemon.getMoveset(); const hasMove = cursor < moveset.length; @@ -318,7 +320,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { } displayMoves() { - const pokemon = (globalScene.getCurrentPhase() as CommandPhase).getPokemon(); + const pokemon = (globalScene.phaseManager.getCurrentPhase() as CommandPhase).getPokemon(); const moveset = pokemon.getMoveset(); for (let moveIndex = 0; moveIndex < 4; moveIndex++) { @@ -389,7 +391,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { clearMoves() { this.movesContainer.removeAll(true); - const opponents = (globalScene.getCurrentPhase() as CommandPhase).getPokemon().getOpponents(); + const opponents = (globalScene.phaseManager.getCurrentPhase() as CommandPhase).getPokemon().getOpponents(); opponents.forEach(opponent => { (opponent as EnemyPokemon).updateEffectiveness(); }); diff --git a/src/ui/menu-ui-handler.ts b/src/ui/menu-ui-handler.ts index b6c3a9d7b8e..e68cc706aba 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -125,7 +125,7 @@ export default class MenuUiHandler extends MessageUiHandler { const ui = this.getUi(); this.excludedMenus = () => [ { - condition: !!globalScene.getCurrentPhase()?.is("SelectModifierPhase"), + condition: !!globalScene.phaseManager.getCurrentPhase()?.is("SelectModifierPhase"), options: [MenuOptions.EGG_GACHA], }, { condition: bypassLogin, options: [MenuOptions.LOG_OUT] }, diff --git a/src/ui/mystery-encounter-ui-handler.ts b/src/ui/mystery-encounter-ui-handler.ts index 0866ed8788e..83ce88714f5 100644 --- a/src/ui/mystery-encounter-ui-handler.ts +++ b/src/ui/mystery-encounter-ui-handler.ts @@ -156,7 +156,9 @@ export default class MysteryEncounterUiHandler extends UiHandler { ) { success = false; } else { - if ((globalScene.getCurrentPhase() as MysteryEncounterPhase).handleOptionSelect(selected, cursor)) { + if ( + (globalScene.phaseManager.getCurrentPhase() as MysteryEncounterPhase).handleOptionSelect(selected, cursor) + ) { success = true; } else { ui.playError(); diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index e26ecb531e9..6ce192751df 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -750,7 +750,7 @@ export default class PartyUiHandler extends MessageUiHandler { // TODO: This risks hitting the other options (.MOVE_i and ALL) so does it? Do we need an extra check? if ( option >= PartyOption.FORM_CHANGE_ITEM && - globalScene.getCurrentPhase()?.is("SelectModifierPhase") && + globalScene.phaseManager.getCurrentPhase()?.is("SelectModifierPhase") && this.partyUiMode === PartyUiMode.CHECK ) { const formChangeItemModifiers = this.getFormChangeItemsModifiers(pokemon); @@ -804,7 +804,7 @@ export default class PartyUiHandler extends MessageUiHandler { this.partyUiMode === PartyUiMode.SWITCH ) { this.clearOptions(); - (globalScene.getCurrentPhase() as CommandPhase).handleCommand( + (globalScene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand( Command.POKEMON, this.cursor, option === PartyOption.PASS_BATON, @@ -1337,7 +1337,7 @@ export default class PartyUiHandler extends MessageUiHandler { this.addCommonOptions(pokemon); break; case PartyUiMode.CHECK: - if (globalScene.getCurrentPhase()?.is("SelectModifierPhase")) { + if (globalScene.phaseManager.getCurrentPhase()?.is("SelectModifierPhase")) { const formChangeItemModifiers = this.getFormChangeItemsModifiers(pokemon); for (let i = 0; i < formChangeItemModifiers.length; i++) { this.options.push(PartyOption.FORM_CHANGE_ITEM + i); diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index 5875e3394a2..a81265e1a55 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -666,7 +666,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { show(args: any[]): boolean { // Allow the use of candies if we are in one of the whitelisted phases this.canUseCandies = ["TitlePhase", "SelectStarterPhase", "CommandPhase"].includes( - globalScene.getCurrentPhase()?.phaseName ?? "", + globalScene.phaseManager.getCurrentPhase()?.phaseName ?? "", ); if (args.length >= 1 && args[0] === "refresh") { diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index b7a7e0f3e6e..973805e4ca1 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -4305,15 +4305,15 @@ export default class StarterSelectUiHandler extends MessageUiHandler { UiMode.CONFIRM, () => { ui.setMode(UiMode.STARTER_SELECT); - globalScene.clearPhaseQueue(); + globalScene.phaseManager.clearPhaseQueue(); if (globalScene.gameMode.isChallenge) { - globalScene.pushPhase(new SelectChallengePhase()); - globalScene.pushPhase(new EncounterPhase()); + globalScene.phaseManager.pushPhase(new SelectChallengePhase()); + globalScene.phaseManager.pushPhase(new EncounterPhase()); } else { - globalScene.pushPhase(new TitlePhase()); + globalScene.phaseManager.pushPhase(new TitlePhase()); } this.clearText(); - globalScene.getCurrentPhase()?.end(); + globalScene.phaseManager.getCurrentPhase()?.end(); }, cancel, null, diff --git a/test/abilities/cud_chew.test.ts b/test/abilities/cud_chew.test.ts index 3c918f01330..8a80c6625cc 100644 --- a/test/abilities/cud_chew.test.ts +++ b/test/abilities/cud_chew.test.ts @@ -67,7 +67,7 @@ describe("Abilities - Cud Chew", () => { }); it("shows ability popup for eating berry, even if berry is useless", async () => { - const abDisplaySpy = vi.spyOn(globalScene, "queueAbilityDisplay"); + const abDisplaySpy = vi.spyOn(globalScene.phaseManager, "queueAbilityDisplay"); game.override.enemyMoveset([MoveId.SPLASH, MoveId.HEAL_PULSE]); await game.classicMode.startBattle([SpeciesId.FARIGIRAF]); @@ -89,7 +89,7 @@ describe("Abilities - Cud Chew", () => { await game.move.selectEnemyMove(MoveId.HEAL_PULSE); await game.phaseInterceptor.to("TurnEndPhase"); - // globalScene.queueAbilityDisplay should be called twice: + // globalScene.phaseManager.queueAbilityDisplay should be called twice: // once to show cud chew text before regurgitating berries, // once to hide ability text after finishing. expect(abDisplaySpy).toBeCalledTimes(2); diff --git a/test/abilities/dancer.test.ts b/test/abilities/dancer.test.ts index 086c69300b4..ae702e4b1e7 100644 --- a/test/abilities/dancer.test.ts +++ b/test/abilities/dancer.test.ts @@ -44,7 +44,7 @@ describe("Abilities - Dancer", () => { await game.phaseInterceptor.to("MovePhase"); // feebas uses swords dance await game.phaseInterceptor.to("MovePhase", false); // oricorio copies swords dance - let currentPhase = game.scene.getCurrentPhase() as MovePhase; + let currentPhase = game.scene.phaseManager.getCurrentPhase() as MovePhase; expect(currentPhase.pokemon).toBe(oricorio); expect(currentPhase.move.moveId).toBe(MoveId.SWORDS_DANCE); @@ -54,7 +54,7 @@ describe("Abilities - Dancer", () => { await game.phaseInterceptor.to("MovePhase"); // magikarp (left) uses victory dance await game.phaseInterceptor.to("MovePhase", false); // oricorio copies magikarp's victory dance - currentPhase = game.scene.getCurrentPhase() as MovePhase; + currentPhase = game.scene.phaseManager.getCurrentPhase() as MovePhase; expect(currentPhase.pokemon).toBe(oricorio); expect(currentPhase.move.moveId).toBe(MoveId.VICTORY_DANCE); @@ -91,13 +91,13 @@ describe("Abilities - Dancer", () => { await game.phaseInterceptor.to("MovePhase"); // shuckle 2 mirror moves oricorio await game.phaseInterceptor.to("MovePhase"); // calls instructed rev dance - let currentPhase = game.scene.getCurrentPhase() as MovePhase; + let currentPhase = game.scene.phaseManager.getCurrentPhase() as MovePhase; expect(currentPhase.pokemon).toBe(shuckle2); expect(currentPhase.move.moveId).toBe(MoveId.REVELATION_DANCE); await game.phaseInterceptor.to("MovePhase"); // shuckle 1 instructs oricorio await game.phaseInterceptor.to("MovePhase"); - currentPhase = game.scene.getCurrentPhase() as MovePhase; + currentPhase = game.scene.phaseManager.getCurrentPhase() as MovePhase; expect(currentPhase.pokemon).toBe(oricorio); expect(currentPhase.move.moveId).toBe(MoveId.REVELATION_DANCE); }); diff --git a/test/abilities/desolate-land.test.ts b/test/abilities/desolate-land.test.ts index c5238a40762..bcd980187ac 100644 --- a/test/abilities/desolate-land.test.ts +++ b/test/abilities/desolate-land.test.ts @@ -146,7 +146,7 @@ describe("Abilities - Desolate Land", () => { vi.spyOn(game.scene.getPlayerPokemon()!, "randBattleSeedInt").mockReturnValue(0); - const commandPhase = game.scene.getCurrentPhase() as CommandPhase; + const commandPhase = game.scene.phaseManager.getCurrentPhase() as CommandPhase; commandPhase.handleCommand(Command.RUN, 0); await game.phaseInterceptor.to("BerryPhase"); diff --git a/test/abilities/disguise.test.ts b/test/abilities/disguise.test.ts index dd05c540620..15ded41527a 100644 --- a/test/abilities/disguise.test.ts +++ b/test/abilities/disguise.test.ts @@ -201,7 +201,7 @@ describe("Abilities - Disguise", () => { game.move.select(MoveId.SHADOW_SNEAK); await game.toNextWave(); - expect(game.scene.getCurrentPhase()?.constructor.name).toBe("CommandPhase"); + expect(game.scene.phaseManager.getCurrentPhase()?.constructor.name).toBe("CommandPhase"); expect(game.scene.currentBattle.waveIndex).toBe(2); }); diff --git a/test/abilities/honey_gather.test.ts b/test/abilities/honey_gather.test.ts index e2f87f0af37..a069654ae21 100644 --- a/test/abilities/honey_gather.test.ts +++ b/test/abilities/honey_gather.test.ts @@ -64,7 +64,7 @@ describe("Abilities - Honey Gather", () => { const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "scene", "get").mockReturnValue(game.scene); - const commandPhase = game.scene.getCurrentPhase() as CommandPhase; + const commandPhase = game.scene.phaseManager.getCurrentPhase() as CommandPhase; commandPhase.handleCommand(Command.RUN, 0); await game.toNextTurn(); diff --git a/test/abilities/imposter.test.ts b/test/abilities/imposter.test.ts index c27e679ec54..e9ae6bd64bb 100644 --- a/test/abilities/imposter.test.ts +++ b/test/abilities/imposter.test.ts @@ -140,7 +140,7 @@ describe("Abilities - Imposter", () => { await game.doKillOpponents(); await game.toNextWave(); - expect(game.scene.getCurrentPhase()?.constructor.name).toBe("CommandPhase"); + expect(game.scene.phaseManager.getCurrentPhase()?.constructor.name).toBe("CommandPhase"); expect(game.scene.currentBattle.waveIndex).toBe(2); await game.reload.reloadSession(); @@ -176,7 +176,7 @@ describe("Abilities - Imposter", () => { await game.doKillOpponents(); await game.toNextWave(); - expect(game.scene.getCurrentPhase()?.constructor.name).toBe("CommandPhase"); + expect(game.scene.phaseManager.getCurrentPhase()?.constructor.name).toBe("CommandPhase"); expect(game.scene.currentBattle.waveIndex).toBe(2); await game.reload.reloadSession(); diff --git a/test/abilities/mycelium_might.test.ts b/test/abilities/mycelium_might.test.ts index 6e4da4bc933..1f236f2c2fe 100644 --- a/test/abilities/mycelium_might.test.ts +++ b/test/abilities/mycelium_might.test.ts @@ -52,7 +52,7 @@ describe("Abilities - Mycelium Might", () => { game.move.select(MoveId.BABY_DOLL_EYES); await game.phaseInterceptor.to(TurnStartPhase, false); - const phase = game.scene.getCurrentPhase() as TurnStartPhase; + const phase = game.scene.phaseManager.getCurrentPhase() as TurnStartPhase; const speedOrder = phase.getSpeedOrder(); const commandOrder = phase.getCommandOrder(); // The opponent Pokemon (without Mycelium Might) goes first despite having lower speed than the player Pokemon. @@ -76,7 +76,7 @@ describe("Abilities - Mycelium Might", () => { game.move.select(MoveId.BABY_DOLL_EYES); await game.phaseInterceptor.to(TurnStartPhase, false); - const phase = game.scene.getCurrentPhase() as TurnStartPhase; + const phase = game.scene.phaseManager.getCurrentPhase() as TurnStartPhase; const speedOrder = phase.getSpeedOrder(); const commandOrder = phase.getCommandOrder(); // The player Pokemon (with M.M.) goes first because its move is still within a higher priority bracket than its opponent. @@ -97,7 +97,7 @@ describe("Abilities - Mycelium Might", () => { game.move.select(MoveId.QUICK_ATTACK); await game.phaseInterceptor.to(TurnStartPhase, false); - const phase = game.scene.getCurrentPhase() as TurnStartPhase; + const phase = game.scene.phaseManager.getCurrentPhase() as TurnStartPhase; const speedOrder = phase.getSpeedOrder(); const commandOrder = phase.getCommandOrder(); // The player Pokemon (with M.M.) goes first because it has a higher speed and did not use a status move. diff --git a/test/abilities/neutralizing_gas.test.ts b/test/abilities/neutralizing_gas.test.ts index 7c78cc9db64..2d1fef29688 100644 --- a/test/abilities/neutralizing_gas.test.ts +++ b/test/abilities/neutralizing_gas.test.ts @@ -166,7 +166,7 @@ describe("Abilities - Neutralizing Gas", () => { vi.spyOn(game.scene.getPlayerPokemon()!, "randBattleSeedInt").mockReturnValue(0); - const commandPhase = game.scene.getCurrentPhase() as CommandPhase; + const commandPhase = game.scene.phaseManager.getCurrentPhase() as CommandPhase; commandPhase.handleCommand(Command.RUN, 0); await game.phaseInterceptor.to("BerryPhase"); diff --git a/test/abilities/no_guard.test.ts b/test/abilities/no_guard.test.ts index 1cb5945e9ff..5b127204f9f 100644 --- a/test/abilities/no_guard.test.ts +++ b/test/abilities/no_guard.test.ts @@ -45,7 +45,7 @@ describe("Abilities - No Guard", () => { await game.phaseInterceptor.to(MoveEffectPhase, false); - const moveEffectPhase = game.scene.getCurrentPhase() as MoveEffectPhase; + const moveEffectPhase = game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase; vi.spyOn(moveEffectPhase, "hitCheck"); await game.phaseInterceptor.to(MoveEndPhase); diff --git a/test/abilities/shield_dust.test.ts b/test/abilities/shield_dust.test.ts index e99b7563cb7..03b175c3ca5 100644 --- a/test/abilities/shield_dust.test.ts +++ b/test/abilities/shield_dust.test.ts @@ -51,7 +51,7 @@ describe("Abilities - Shield Dust", () => { await game.phaseInterceptor.to(MoveEffectPhase, false); // Shield Dust negates secondary effect - const phase = game.scene.getCurrentPhase() as MoveEffectPhase; + const phase = game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase; const move = phase.move; expect(move.id).toBe(MoveId.AIR_SLASH); diff --git a/test/abilities/speed_boost.test.ts b/test/abilities/speed_boost.test.ts index 9890f22ffcd..245bf22345d 100644 --- a/test/abilities/speed_boost.test.ts +++ b/test/abilities/speed_boost.test.ts @@ -98,9 +98,9 @@ describe("Abilities - Speed Boost", () => { it("should not trigger if pokemon fails to escape", async () => { await game.classicMode.startBattle([SpeciesId.SHUCKLE]); - const commandPhase = game.scene.getCurrentPhase() as CommandPhase; + const commandPhase = game.scene.phaseManager.getCurrentPhase() as CommandPhase; commandPhase.handleCommand(Command.RUN, 0); - const runPhase = game.scene.getCurrentPhase() as AttemptRunPhase; + const runPhase = game.scene.phaseManager.getCurrentPhase() as AttemptRunPhase; runPhase.forceFailEscape = true; await game.phaseInterceptor.to(AttemptRunPhase); await game.toNextTurn(); diff --git a/test/abilities/stall.test.ts b/test/abilities/stall.test.ts index 78e7d49b48b..df40bed3e90 100644 --- a/test/abilities/stall.test.ts +++ b/test/abilities/stall.test.ts @@ -46,7 +46,7 @@ describe("Abilities - Stall", () => { game.move.select(MoveId.QUICK_ATTACK); await game.phaseInterceptor.to(TurnStartPhase, false); - const phase = game.scene.getCurrentPhase() as TurnStartPhase; + const phase = game.scene.phaseManager.getCurrentPhase() as TurnStartPhase; const speedOrder = phase.getSpeedOrder(); const commandOrder = phase.getCommandOrder(); // The player Pokemon (without Stall) goes first despite having lower speed than the opponent. @@ -64,7 +64,7 @@ describe("Abilities - Stall", () => { game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnStartPhase, false); - const phase = game.scene.getCurrentPhase() as TurnStartPhase; + const phase = game.scene.phaseManager.getCurrentPhase() as TurnStartPhase; const speedOrder = phase.getSpeedOrder(); const commandOrder = phase.getCommandOrder(); // The opponent Pokemon (with Stall) goes first because its move is still within a higher priority bracket than its opponent. @@ -83,7 +83,7 @@ describe("Abilities - Stall", () => { game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnStartPhase, false); - const phase = game.scene.getCurrentPhase() as TurnStartPhase; + const phase = game.scene.phaseManager.getCurrentPhase() as TurnStartPhase; const speedOrder = phase.getSpeedOrder(); const commandOrder = phase.getCommandOrder(); diff --git a/test/battle/battle-order.test.ts b/test/battle/battle-order.test.ts index 7983f1db1d2..c12760a7f30 100644 --- a/test/battle/battle-order.test.ts +++ b/test/battle/battle-order.test.ts @@ -44,7 +44,7 @@ describe("Battle order", () => { const playerPokemonIndex = playerPokemon.getBattlerIndex(); const enemyPokemonIndex = enemyPokemon.getBattlerIndex(); - const phase = game.scene.getCurrentPhase() as TurnStartPhase; + const phase = game.scene.phaseManager.getCurrentPhase() as TurnStartPhase; const order = phase.getCommandOrder(); expect(order[0]).toBe(enemyPokemonIndex); expect(order[1]).toBe(playerPokemonIndex); @@ -63,7 +63,7 @@ describe("Battle order", () => { const playerPokemonIndex = playerPokemon.getBattlerIndex(); const enemyPokemonIndex = enemyPokemon.getBattlerIndex(); - const phase = game.scene.getCurrentPhase() as TurnStartPhase; + const phase = game.scene.phaseManager.getCurrentPhase() as TurnStartPhase; const order = phase.getCommandOrder(); expect(order[0]).toBe(playerPokemonIndex); expect(order[1]).toBe(enemyPokemonIndex); @@ -85,7 +85,7 @@ describe("Battle order", () => { game.move.select(MoveId.TACKLE, 1); await game.phaseInterceptor.runFrom(SelectTargetPhase).to(TurnStartPhase, false); - const phase = game.scene.getCurrentPhase() as TurnStartPhase; + const phase = game.scene.phaseManager.getCurrentPhase() as TurnStartPhase; const order = phase.getCommandOrder(); expect(order.slice(0, 2).includes(enemyIndices[0])).toBe(true); expect(order.slice(0, 2).includes(enemyIndices[1])).toBe(true); @@ -109,7 +109,7 @@ describe("Battle order", () => { game.move.select(MoveId.TACKLE, 1); await game.phaseInterceptor.runFrom(SelectTargetPhase).to(TurnStartPhase, false); - const phase = game.scene.getCurrentPhase() as TurnStartPhase; + const phase = game.scene.phaseManager.getCurrentPhase() as TurnStartPhase; const order = phase.getCommandOrder(); expect(order[0]).toBe(enemyIndices[1]); expect(order.slice(1, 4).includes(enemyIndices[0])).toBe(true); @@ -134,7 +134,7 @@ describe("Battle order", () => { game.move.select(MoveId.TACKLE, 1); await game.phaseInterceptor.runFrom(SelectTargetPhase).to(TurnStartPhase, false); - const phase = game.scene.getCurrentPhase() as TurnStartPhase; + const phase = game.scene.phaseManager.getCurrentPhase() as TurnStartPhase; const order = phase.getCommandOrder(); expect(order.slice(0, 2).includes(playerIndices[1])).toBe(true); expect(order.slice(0, 2).includes(enemyIndices[1])).toBe(true); diff --git a/test/battle/battle.test.ts b/test/battle/battle.test.ts index 03faf369dd7..b93c913d09a 100644 --- a/test/battle/battle.test.ts +++ b/test/battle/battle.test.ts @@ -87,7 +87,7 @@ describe("Test Battle Phase", () => { it("newGame one-liner", async () => { await game.classicMode.startBattle(); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); + expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("do attack wave 3 - single battle - regular - OHKO", async () => { @@ -196,7 +196,7 @@ describe("Test Battle Phase", () => { game.scene.gameMode = getGameMode(GameModes.CLASSIC); const starters = generateStarter(game.scene); const selectStarterPhase = new SelectStarterPhase(); - game.scene.pushPhase(new EncounterPhase(false)); + game.scene.phaseManager.pushPhase(new EncounterPhase(false)); selectStarterPhase.initBattle(starters); }); await game.phaseInterceptor.runFrom(SelectGenderPhase).to(SummonPhase); @@ -209,7 +209,7 @@ describe("Test Battle Phase", () => { game.override.ability(AbilityId.HYDRATION); await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); + expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("1vs1", async () => { @@ -219,7 +219,7 @@ describe("Test Battle Phase", () => { game.override.ability(AbilityId.HYDRATION); await game.classicMode.startBattle([SpeciesId.BLASTOISE]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); + expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("2vs2", async () => { @@ -230,7 +230,7 @@ describe("Test Battle Phase", () => { game.override.startingWave(3); await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); + expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("4vs2", async () => { @@ -241,7 +241,7 @@ describe("Test Battle Phase", () => { game.override.startingWave(3); await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD, SpeciesId.DARKRAI, SpeciesId.GABITE]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); + expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("kill opponent pokemon", async () => { diff --git a/test/battle/special_battle.test.ts b/test/battle/special_battle.test.ts index c1a948a0759..f0c77668093 100644 --- a/test/battle/special_battle.test.ts +++ b/test/battle/special_battle.test.ts @@ -36,62 +36,62 @@ describe("Test Battle Phase", () => { game.override.battleStyle("single").startingWave(10); await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); + expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs2 boss", async () => { game.override.battleStyle("double").startingWave(10); await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); + expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs2 trainer", async () => { game.override.battleStyle("double").startingWave(5); await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); + expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs1 trainer", async () => { game.override.battleStyle("single").startingWave(5); await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); + expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs1 rival", async () => { game.override.battleStyle("single").startingWave(8); await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); + expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs2 rival", async () => { game.override.battleStyle("double").startingWave(8); await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); + expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 1vs1 trainer", async () => { game.override.battleStyle("single").startingWave(5); await game.classicMode.startBattle([SpeciesId.BLASTOISE]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); + expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 2vs2 trainer", async () => { game.override.battleStyle("double").startingWave(5); await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); + expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); it("startBattle 4vs2 trainer", async () => { game.override.battleStyle("double").startingWave(5); await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD, SpeciesId.DARKRAI, SpeciesId.GABITE]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); + expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); }, 20000); }); diff --git a/test/battlerTags/octolock.test.ts b/test/battlerTags/octolock.test.ts index 6189bd7febe..63784ed7f1b 100644 --- a/test/battlerTags/octolock.test.ts +++ b/test/battlerTags/octolock.test.ts @@ -28,7 +28,7 @@ describe("BattlerTag - OctolockTag", () => { const subject = new OctolockTag(1); - vi.spyOn(game.scene, "unshiftPhase").mockImplementation(phase => { + vi.spyOn(game.scene.phaseManager, "unshiftPhase").mockImplementation(phase => { expect(phase).toBeInstanceOf(StatStageChangePhase); expect((phase as StatStageChangePhase)["stages"]).toEqual(-1); expect((phase as StatStageChangePhase)["stats"]).toEqual([Stat.DEF, Stat.SPDEF]); @@ -36,7 +36,7 @@ describe("BattlerTag - OctolockTag", () => { subject.lapse(mockPokemon, BattlerTagLapseType.TURN_END); - expect(game.scene.unshiftPhase).toBeCalledTimes(1); + expect(game.scene.phaseManager.unshiftPhase).toBeCalledTimes(1); }); }); diff --git a/test/battlerTags/stockpiling.test.ts b/test/battlerTags/stockpiling.test.ts index 20fade13d92..37873db9eab 100644 --- a/test/battlerTags/stockpiling.test.ts +++ b/test/battlerTags/stockpiling.test.ts @@ -32,11 +32,11 @@ describe("BattlerTag - StockpilingTag", () => { getBattlerIndex: () => 0, } as Pokemon; - vi.spyOn(game.scene, "queueMessage").mockImplementation(() => {}); + vi.spyOn(game.scene.phaseManager, "queueMessage").mockImplementation(() => {}); const subject = new StockpilingTag(1); - vi.spyOn(game.scene, "unshiftPhase").mockImplementation(phase => { + vi.spyOn(game.scene.phaseManager, "unshiftPhase").mockImplementation(phase => { expect(phase).toBeInstanceOf(StatStageChangePhase); expect((phase as StatStageChangePhase)["stages"]).toEqual(1); expect((phase as StatStageChangePhase)["stats"]).toEqual(expect.arrayContaining([Stat.DEF, Stat.SPDEF])); @@ -46,7 +46,7 @@ describe("BattlerTag - StockpilingTag", () => { subject.onAdd(mockPokemon); - expect(game.scene.unshiftPhase).toBeCalledTimes(1); + expect(game.scene.phaseManager.unshiftPhase).toBeCalledTimes(1); }); it("unshifts a StatStageChangePhase with expected stat changes on add (one stat maxed)", async () => { @@ -55,14 +55,14 @@ describe("BattlerTag - StockpilingTag", () => { getBattlerIndex: () => 0, } as unknown as Pokemon; - vi.spyOn(game.scene, "queueMessage").mockImplementation(() => {}); + vi.spyOn(game.scene.phaseManager, "queueMessage").mockImplementation(() => {}); mockPokemon.summonData.statStages[Stat.DEF - 1] = 6; mockPokemon.summonData.statStages[Stat.SPD - 1] = 5; const subject = new StockpilingTag(1); - vi.spyOn(game.scene, "unshiftPhase").mockImplementation(phase => { + vi.spyOn(game.scene.phaseManager, "unshiftPhase").mockImplementation(phase => { expect(phase).toBeInstanceOf(StatStageChangePhase); expect((phase as StatStageChangePhase)["stages"]).toEqual(1); expect((phase as StatStageChangePhase)["stats"]).toEqual(expect.arrayContaining([Stat.DEF, Stat.SPDEF])); @@ -72,7 +72,7 @@ describe("BattlerTag - StockpilingTag", () => { subject.onAdd(mockPokemon); - expect(game.scene.unshiftPhase).toBeCalledTimes(1); + expect(game.scene.phaseManager.unshiftPhase).toBeCalledTimes(1); }); }); @@ -82,11 +82,11 @@ describe("BattlerTag - StockpilingTag", () => { getBattlerIndex: () => 0, } as Pokemon; - vi.spyOn(game.scene, "queueMessage").mockImplementation(() => {}); + vi.spyOn(game.scene.phaseManager, "queueMessage").mockImplementation(() => {}); const subject = new StockpilingTag(1); - vi.spyOn(game.scene, "unshiftPhase").mockImplementation(phase => { + vi.spyOn(game.scene.phaseManager, "unshiftPhase").mockImplementation(phase => { expect(phase).toBeInstanceOf(StatStageChangePhase); expect((phase as StatStageChangePhase)["stages"]).toEqual(1); expect((phase as StatStageChangePhase)["stats"]).toEqual(expect.arrayContaining([Stat.DEF, Stat.SPDEF])); @@ -96,7 +96,7 @@ describe("BattlerTag - StockpilingTag", () => { subject.onOverlap(mockPokemon); - expect(game.scene.unshiftPhase).toBeCalledTimes(1); + expect(game.scene.phaseManager.unshiftPhase).toBeCalledTimes(1); }); }); @@ -107,14 +107,14 @@ describe("BattlerTag - StockpilingTag", () => { getBattlerIndex: () => 0, } as Pokemon; - vi.spyOn(game.scene, "queueMessage").mockImplementation(() => {}); + vi.spyOn(game.scene.phaseManager, "queueMessage").mockImplementation(() => {}); mockPokemon.summonData.statStages[Stat.DEF - 1] = 5; mockPokemon.summonData.statStages[Stat.SPD - 1] = 4; const subject = new StockpilingTag(1); - vi.spyOn(game.scene, "unshiftPhase").mockImplementationOnce(phase => { + vi.spyOn(game.scene.phaseManager, "unshiftPhase").mockImplementationOnce(phase => { expect(phase).toBeInstanceOf(StatStageChangePhase); expect((phase as StatStageChangePhase)["stages"]).toEqual(1); expect((phase as StatStageChangePhase)["stats"]).toEqual(expect.arrayContaining([Stat.DEF, Stat.SPDEF])); @@ -126,7 +126,7 @@ describe("BattlerTag - StockpilingTag", () => { subject.onAdd(mockPokemon); expect(subject.stockpiledCount).toBe(1); - vi.spyOn(game.scene, "unshiftPhase").mockImplementationOnce(phase => { + vi.spyOn(game.scene.phaseManager, "unshiftPhase").mockImplementationOnce(phase => { expect(phase).toBeInstanceOf(StatStageChangePhase); expect((phase as StatStageChangePhase)["stages"]).toEqual(1); expect((phase as StatStageChangePhase)["stats"]).toEqual(expect.arrayContaining([Stat.DEF, Stat.SPDEF])); @@ -138,7 +138,7 @@ describe("BattlerTag - StockpilingTag", () => { subject.onOverlap(mockPokemon); expect(subject.stockpiledCount).toBe(2); - vi.spyOn(game.scene, "unshiftPhase").mockImplementationOnce(phase => { + vi.spyOn(game.scene.phaseManager, "unshiftPhase").mockImplementationOnce(phase => { expect(phase).toBeInstanceOf(StatStageChangePhase); expect((phase as StatStageChangePhase)["stages"]).toEqual(1); expect((phase as StatStageChangePhase)["stats"]).toEqual(expect.arrayContaining([Stat.DEF, Stat.SPDEF])); @@ -149,7 +149,7 @@ describe("BattlerTag - StockpilingTag", () => { subject.onOverlap(mockPokemon); expect(subject.stockpiledCount).toBe(3); - vi.spyOn(game.scene, "unshiftPhase").mockImplementationOnce(_phase => { + vi.spyOn(game.scene.phaseManager, "unshiftPhase").mockImplementationOnce(_phase => { throw new Error("Should not be called a fourth time"); }); @@ -162,14 +162,14 @@ describe("BattlerTag - StockpilingTag", () => { }); // removing tag should reverse stat changes - vi.spyOn(game.scene, "unshiftPhase").mockImplementationOnce(phase => { + vi.spyOn(game.scene.phaseManager, "unshiftPhase").mockImplementationOnce(phase => { expect(phase).toBeInstanceOf(StatStageChangePhase); expect((phase as StatStageChangePhase)["stages"]).toEqual(-2); expect((phase as StatStageChangePhase)["stats"]).toEqual(expect.arrayContaining([Stat.SPDEF])); }); subject.onRemove(mockPokemon); - expect(game.scene.unshiftPhase).toHaveBeenCalledOnce(); // note that re-spying each add/overlap has been refreshing call count + expect(game.scene.phaseManager.unshiftPhase).toHaveBeenCalledOnce(); // note that re-spying each add/overlap has been refreshing call count }); }); }); diff --git a/test/battlerTags/substitute.test.ts b/test/battlerTags/substitute.test.ts index ce16cfdbcd9..703e0ae75f6 100644 --- a/test/battlerTags/substitute.test.ts +++ b/test/battlerTags/substitute.test.ts @@ -55,7 +55,7 @@ describe("BattlerTag - SubstituteTag", () => { const subject = new SubstituteTag(MoveId.SUBSTITUTE, mockPokemon.id); vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockReturnValue(true); - vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); + vi.spyOn((mockPokemon.scene as BattleScene).phaseManager, "queueMessage").mockReturnValue(); subject.onAdd(mockPokemon); @@ -72,19 +72,19 @@ describe("BattlerTag - SubstituteTag", () => { }, ); - vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); + const msgSpy = vi.spyOn((mockPokemon.scene as BattleScene).phaseManager, "queueMessage").mockReturnValue(); subject.onAdd(mockPokemon); expect(subject.sourceInFocus).toBeFalsy(); expect((mockPokemon.scene as BattleScene).triggerPokemonBattleAnim).toHaveBeenCalledTimes(1); - expect((mockPokemon.scene as BattleScene).queueMessage).toHaveBeenCalledTimes(1); + expect(msgSpy).toHaveBeenCalledOnce(); }); it("removes effects that trap the source", async () => { const subject = new SubstituteTag(MoveId.SUBSTITUTE, mockPokemon.id); - vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); + vi.spyOn((mockPokemon.scene as BattleScene).phaseManager, "queueMessage").mockReturnValue(); subject.onAdd(mockPokemon); expect(mockPokemon.findAndRemoveTags).toHaveBeenCalledTimes(1); @@ -114,12 +114,12 @@ describe("BattlerTag - SubstituteTag", () => { }, ); - vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); + const msgSpy = vi.spyOn((mockPokemon.scene as BattleScene).phaseManager, "queueMessage").mockReturnValue(); subject.onRemove(mockPokemon); expect((mockPokemon.scene as BattleScene).triggerPokemonBattleAnim).toHaveBeenCalledTimes(1); - expect((mockPokemon.scene as BattleScene).queueMessage).toHaveBeenCalledTimes(1); + expect(msgSpy).toHaveBeenCalledOnce(); }); }); @@ -150,13 +150,12 @@ describe("BattlerTag - SubstituteTag", () => { }, ); - vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); + vi.spyOn((mockPokemon.scene as BattleScene).phaseManager, "queueMessage").mockReturnValue(); expect(subject.lapse(mockPokemon, BattlerTagLapseType.PRE_MOVE)).toBeTruthy(); expect(subject.sourceInFocus).toBeTruthy(); expect((mockPokemon.scene as BattleScene).triggerPokemonBattleAnim).toHaveBeenCalledTimes(1); - expect((mockPokemon.scene as BattleScene).queueMessage).not.toHaveBeenCalled(); }); it("AFTER_MOVE lapse triggers post-move animation", async () => { @@ -169,13 +168,13 @@ describe("BattlerTag - SubstituteTag", () => { }, ); - vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); + const msgSpy = vi.spyOn((mockPokemon.scene as BattleScene).phaseManager, "queueMessage").mockReturnValue(); expect(subject.lapse(mockPokemon, BattlerTagLapseType.AFTER_MOVE)).toBeTruthy(); expect(subject.sourceInFocus).toBeFalsy(); expect((mockPokemon.scene as BattleScene).triggerPokemonBattleAnim).toHaveBeenCalledTimes(1); - expect((mockPokemon.scene as BattleScene).queueMessage).not.toHaveBeenCalled(); + expect(msgSpy).not.toHaveBeenCalled(); }); // TODO: Figure out how to mock a MoveEffectPhase correctly for this test @@ -183,27 +182,27 @@ describe("BattlerTag - SubstituteTag", () => { const subject = new SubstituteTag(MoveId.SUBSTITUTE, mockPokemon.id); vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockReturnValue(true); - vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); + const msgSpy = vi.spyOn((mockPokemon.scene as BattleScene).phaseManager, "queueMessage").mockReturnValue(); const moveEffectPhase = { move: allMoves[MoveId.TACKLE], getUserPokemon: vi.fn().mockReturnValue(undefined) as MoveEffectPhase["getUserPokemon"], } as MoveEffectPhase; - vi.spyOn(mockPokemon.scene as BattleScene, "getCurrentPhase").mockReturnValue(moveEffectPhase); + vi.spyOn((mockPokemon.scene as BattleScene).phaseManager, "getCurrentPhase").mockReturnValue(moveEffectPhase); vi.spyOn(allMoves[MoveId.TACKLE], "hitsSubstitute").mockReturnValue(true); expect(subject.lapse(mockPokemon, BattlerTagLapseType.HIT)).toBeTruthy(); expect((mockPokemon.scene as BattleScene).triggerPokemonBattleAnim).not.toHaveBeenCalled(); - expect((mockPokemon.scene as BattleScene).queueMessage).toHaveBeenCalledTimes(1); + expect(msgSpy).toHaveBeenCalledOnce(); }); it("CUSTOM lapse flags the tag for removal", async () => { const subject = new SubstituteTag(MoveId.SUBSTITUTE, mockPokemon.id); vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockReturnValue(true); - vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); + vi.spyOn((mockPokemon.scene as BattleScene).phaseManager, "queueMessage").mockReturnValue(); expect(subject.lapse(mockPokemon, BattlerTagLapseType.CUSTOM)).toBeFalsy(); }); @@ -212,12 +211,12 @@ describe("BattlerTag - SubstituteTag", () => { const subject = new SubstituteTag(MoveId.SUBSTITUTE, mockPokemon.id); vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockReturnValue(true); - vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); + const msgSpy = vi.spyOn((mockPokemon.scene as BattleScene).phaseManager, "queueMessage").mockReturnValue(); expect(subject.lapse(mockPokemon, BattlerTagLapseType.TURN_END)).toBeTruthy(); expect((mockPokemon.scene as BattleScene).triggerPokemonBattleAnim).not.toHaveBeenCalled(); - expect((mockPokemon.scene as BattleScene).queueMessage).not.toHaveBeenCalled(); + expect(msgSpy).not.toHaveBeenCalled(); }); }); }); diff --git a/test/escape-calculations.test.ts b/test/escape-calculations.test.ts index 854274eb948..fd1e411e786 100644 --- a/test/escape-calculations.test.ts +++ b/test/escape-calculations.test.ts @@ -40,11 +40,11 @@ describe("Escape chance calculations", () => { // set enemyPokemon's speed to 100 vi.spyOn(enemyField[0], "stats", "get").mockReturnValue([20, 20, 20, 20, 20, enemySpeed]); - const commandPhase = game.scene.getCurrentPhase() as CommandPhase; + const commandPhase = game.scene.phaseManager.getCurrentPhase() as CommandPhase; commandPhase.handleCommand(Command.RUN, 0); await game.phaseInterceptor.to(AttemptRunPhase, false); - const phase = game.scene.getCurrentPhase() as AttemptRunPhase; + const phase = game.scene.phaseManager.getCurrentPhase() as AttemptRunPhase; const escapePercentage = new NumberHolder(0); // this sets up an object for multiple attempts. The pokemonSpeedRatio is your speed divided by the enemy speed, the escapeAttempts are the number of escape attempts and the expectedEscapeChance is the chance it should be escaping @@ -113,11 +113,11 @@ describe("Escape chance calculations", () => { // set enemyBPokemon's speed to 30 vi.spyOn(enemyField[1], "stats", "get").mockReturnValue([20, 20, 20, 20, 20, enemyBSpeed]); - const commandPhase = game.scene.getCurrentPhase() as CommandPhase; + const commandPhase = game.scene.phaseManager.getCurrentPhase() as CommandPhase; commandPhase.handleCommand(Command.RUN, 0); await game.phaseInterceptor.to(AttemptRunPhase, false); - const phase = game.scene.getCurrentPhase() as AttemptRunPhase; + const phase = game.scene.phaseManager.getCurrentPhase() as AttemptRunPhase; const escapePercentage = new NumberHolder(0); // this sets up an object for multiple attempts. The pokemonSpeedRatio is your speed divided by the enemy speed, the escapeAttempts are the number of escape attempts and the expectedEscapeChance is the chance it should be escaping @@ -192,11 +192,11 @@ describe("Escape chance calculations", () => { // set enemyPokemon's speed to 100 vi.spyOn(enemyField[0], "stats", "get").mockReturnValue([20, 20, 20, 20, 20, enemySpeed]); - const commandPhase = game.scene.getCurrentPhase() as CommandPhase; + const commandPhase = game.scene.phaseManager.getCurrentPhase() as CommandPhase; commandPhase.handleCommand(Command.RUN, 0); await game.phaseInterceptor.to(AttemptRunPhase, false); - const phase = game.scene.getCurrentPhase() as AttemptRunPhase; + const phase = game.scene.phaseManager.getCurrentPhase() as AttemptRunPhase; const escapePercentage = new NumberHolder(0); // this sets up an object for multiple attempts. The pokemonSpeedRatio is your speed divided by the enemy speed, the escapeAttempts are the number of escape attempts and the expectedEscapeChance is the chance it should be escaping @@ -279,11 +279,11 @@ describe("Escape chance calculations", () => { // set enemyBPokemon's speed to 30 vi.spyOn(enemyField[1], "stats", "get").mockReturnValue([20, 20, 20, 20, 20, enemyBSpeed]); - const commandPhase = game.scene.getCurrentPhase() as CommandPhase; + const commandPhase = game.scene.phaseManager.getCurrentPhase() as CommandPhase; commandPhase.handleCommand(Command.RUN, 0); await game.phaseInterceptor.to(AttemptRunPhase, false); - const phase = game.scene.getCurrentPhase() as AttemptRunPhase; + const phase = game.scene.phaseManager.getCurrentPhase() as AttemptRunPhase; const escapePercentage = new NumberHolder(0); // this sets up an object for multiple attempts. The pokemonSpeedRatio is your speed divided by the enemy speed, the escapeAttempts are the number of escape attempts and the expectedEscapeChance is the chance it should be escaping diff --git a/test/items/lock_capsule.test.ts b/test/items/lock_capsule.test.ts index 15a1b4e73d1..292031a2bf0 100644 --- a/test/items/lock_capsule.test.ts +++ b/test/items/lock_capsule.test.ts @@ -34,7 +34,7 @@ describe("Items - Lock Capsule", () => { it("doesn't set the cost of common tier items to 0", async () => { await game.classicMode.startBattle(); - game.scene.overridePhase( + game.scene.phaseManager.overridePhase( new SelectModifierPhase(0, undefined, { guaranteedModifierTiers: [ModifierTier.COMMON, ModifierTier.COMMON, ModifierTier.COMMON], fillRemaining: false, @@ -42,7 +42,7 @@ describe("Items - Lock Capsule", () => { ); game.onNextPrompt("SelectModifierPhase", UiMode.MODIFIER_SELECT, () => { - const selectModifierPhase = game.scene.getCurrentPhase() as SelectModifierPhase; + const selectModifierPhase = game.scene.phaseManager.getCurrentPhase() as SelectModifierPhase; const rerollCost = selectModifierPhase.getRerollCost(true); expect(rerollCost).toBe(150); }); diff --git a/test/moves/after_you.test.ts b/test/moves/after_you.test.ts index adf9cae707a..0e5ee1e7a8f 100644 --- a/test/moves/after_you.test.ts +++ b/test/moves/after_you.test.ts @@ -42,7 +42,7 @@ describe("Moves - After You", () => { await game.phaseInterceptor.to("MoveEffectPhase"); await game.phaseInterceptor.to(MovePhase, false); - const phase = game.scene.getCurrentPhase() as MovePhase; + const phase = game.scene.phaseManager.getCurrentPhase() as MovePhase; expect(phase.pokemon).toBe(game.scene.getPlayerField()[1]); await game.phaseInterceptor.to("MoveEndPhase"); }); diff --git a/test/moves/dynamax_cannon.test.ts b/test/moves/dynamax_cannon.test.ts index ada3361f3ef..6207ef9b6ca 100644 --- a/test/moves/dynamax_cannon.test.ts +++ b/test/moves/dynamax_cannon.test.ts @@ -56,7 +56,7 @@ describe("Moves - Dynamax Cannon", () => { game.move.select(dynamaxCannon.id); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(dynamaxCannon.id); + expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(dynamaxCannon.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(dynamaxCannon.calculateBattlePower).toHaveLastReturnedWith(100); }, 20000); @@ -68,7 +68,7 @@ describe("Moves - Dynamax Cannon", () => { game.move.select(dynamaxCannon.id); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(dynamaxCannon.id); + expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(dynamaxCannon.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(dynamaxCannon.calculateBattlePower).toHaveLastReturnedWith(100); }, 20000); @@ -80,7 +80,7 @@ describe("Moves - Dynamax Cannon", () => { game.move.select(dynamaxCannon.id); await game.phaseInterceptor.to(MoveEffectPhase, false); - const phase = game.scene.getCurrentPhase() as MoveEffectPhase; + const phase = game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase; expect(phase.move.id).toBe(dynamaxCannon.id); // Force level cap to be 100 vi.spyOn(game.scene, "getMaxExpLevel").mockReturnValue(100); @@ -95,7 +95,7 @@ describe("Moves - Dynamax Cannon", () => { game.move.select(dynamaxCannon.id); await game.phaseInterceptor.to(MoveEffectPhase, false); - const phase = game.scene.getCurrentPhase() as MoveEffectPhase; + const phase = game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase; expect(phase.move.id).toBe(dynamaxCannon.id); // Force level cap to be 100 vi.spyOn(game.scene, "getMaxExpLevel").mockReturnValue(100); @@ -110,7 +110,7 @@ describe("Moves - Dynamax Cannon", () => { game.move.select(dynamaxCannon.id); await game.phaseInterceptor.to(MoveEffectPhase, false); - const phase = game.scene.getCurrentPhase() as MoveEffectPhase; + const phase = game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase; expect(phase.move.id).toBe(dynamaxCannon.id); // Force level cap to be 100 vi.spyOn(game.scene, "getMaxExpLevel").mockReturnValue(100); @@ -125,7 +125,7 @@ describe("Moves - Dynamax Cannon", () => { game.move.select(dynamaxCannon.id); await game.phaseInterceptor.to(MoveEffectPhase, false); - const phase = game.scene.getCurrentPhase() as MoveEffectPhase; + const phase = game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase; expect(phase.move.id).toBe(dynamaxCannon.id); // Force level cap to be 100 vi.spyOn(game.scene, "getMaxExpLevel").mockReturnValue(100); @@ -140,7 +140,7 @@ describe("Moves - Dynamax Cannon", () => { game.move.select(dynamaxCannon.id); await game.phaseInterceptor.to(MoveEffectPhase, false); - const phase = game.scene.getCurrentPhase() as MoveEffectPhase; + const phase = game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase; expect(phase.move.id).toBe(dynamaxCannon.id); // Force level cap to be 100 vi.spyOn(game.scene, "getMaxExpLevel").mockReturnValue(100); @@ -156,7 +156,7 @@ describe("Moves - Dynamax Cannon", () => { await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(dynamaxCannon.id); + expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(dynamaxCannon.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(dynamaxCannon.calculateBattlePower).toHaveLastReturnedWith(200); }, 20000); diff --git a/test/moves/focus_punch.test.ts b/test/moves/focus_punch.test.ts index 9734f9f6422..38b57b201c0 100644 --- a/test/moves/focus_punch.test.ts +++ b/test/moves/focus_punch.test.ts @@ -115,8 +115,8 @@ describe("Moves - Focus Punch", () => { await game.phaseInterceptor.to(TurnStartPhase); - expect(game.scene.getCurrentPhase() instanceof SwitchSummonPhase).toBeTruthy(); - expect(game.scene.phaseQueue.find(phase => phase instanceof MoveHeaderPhase)).toBeDefined(); + expect(game.scene.phaseManager.getCurrentPhase() instanceof SwitchSummonPhase).toBeTruthy(); + expect(game.scene.phaseManager.phaseQueue.find(phase => phase instanceof MoveHeaderPhase)).toBeDefined(); }); it("should replace the 'but it failed' text when the user gets hit", async () => { game.override.enemyMoveset([MoveId.TACKLE]); diff --git a/test/moves/fusion_flare_bolt.test.ts b/test/moves/fusion_flare_bolt.test.ts index bceb2c862b5..1a5d9e44bab 100644 --- a/test/moves/fusion_flare_bolt.test.ts +++ b/test/moves/fusion_flare_bolt.test.ts @@ -56,12 +56,12 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); + expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionFlare.calculateBattlePower).toHaveLastReturnedWith(100); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); + expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionBolt.calculateBattlePower).toHaveLastReturnedWith(200); }, 20000); @@ -76,12 +76,12 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); + expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionBolt.calculateBattlePower).toHaveLastReturnedWith(100); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); + expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionFlare.calculateBattlePower).toHaveLastReturnedWith(200); }, 20000); @@ -96,7 +96,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); + expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionFlare.calculateBattlePower).toHaveLastReturnedWith(100); @@ -106,7 +106,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { await game.phaseInterceptor.runFrom(MovePhase).to(MoveEndPhase); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); + expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionBolt.calculateBattlePower).toHaveLastReturnedWith(200); }, 20000); @@ -122,7 +122,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); + expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionFlare.calculateBattlePower).toHaveLastReturnedWith(100); @@ -131,7 +131,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { await game.phaseInterceptor.runFrom(MovePhase).to(MoveEndPhase); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); + expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionBolt.calculateBattlePower).toHaveLastReturnedWith(100); }, 20000); @@ -146,12 +146,12 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); + expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionBolt.calculateBattlePower).toHaveLastReturnedWith(100); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); + expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionFlare.calculateBattlePower).toHaveLastReturnedWith(200); }, 20000); @@ -190,22 +190,22 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); + expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionBolt.calculateBattlePower).toHaveLastReturnedWith(100); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); + expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionFlare.calculateBattlePower).toHaveLastReturnedWith(200); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); + expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionBolt.calculateBattlePower).toHaveLastReturnedWith(200); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); + expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionFlare.calculateBattlePower).toHaveLastReturnedWith(200); }, 20000); @@ -244,22 +244,22 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); + expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionBolt.calculateBattlePower).toHaveLastReturnedWith(100); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); + expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionFlare.calculateBattlePower).toHaveLastReturnedWith(200); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); + expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionBolt.calculateBattlePower).toHaveLastReturnedWith(200); await game.phaseInterceptor.to(MoveEffectPhase, false); - expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); + expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionFlare.calculateBattlePower).toHaveLastReturnedWith(200); }, 20000); diff --git a/test/moves/instruct.test.ts b/test/moves/instruct.test.ts index 4a701ed6ac5..e0cfa93cf59 100644 --- a/test/moves/instruct.test.ts +++ b/test/moves/instruct.test.ts @@ -56,12 +56,12 @@ describe("Moves - Instruct", () => { await game.phaseInterceptor.to("MovePhase"); // enemy attacks us await game.phaseInterceptor.to("MovePhase", false); // instruct - let currentPhase = game.scene.getCurrentPhase() as MovePhase; + let currentPhase = game.scene.phaseManager.getCurrentPhase() as MovePhase; expect(currentPhase.pokemon).toBe(game.scene.getPlayerPokemon()); await game.phaseInterceptor.to("MoveEndPhase"); await game.phaseInterceptor.to("MovePhase", false); // enemy repeats move - currentPhase = game.scene.getCurrentPhase() as MovePhase; + currentPhase = game.scene.phaseManager.getCurrentPhase() as MovePhase; expect(currentPhase.pokemon).toBe(enemy); expect(currentPhase.move.moveId).toBe(MoveId.SONIC_BOOM); await game.phaseInterceptor.to("TurnEndPhase", false); diff --git a/test/moves/round.test.ts b/test/moves/round.test.ts index c42734bdc41..503ce125582 100644 --- a/test/moves/round.test.ts +++ b/test/moves/round.test.ts @@ -54,7 +54,9 @@ describe("Moves - Round", () => { for (let i = 0; i < 4; i++) { await game.phaseInterceptor.to("MoveEffectPhase", false); - actualTurnOrder.push((game.scene.getCurrentPhase() as MoveEffectPhase).getUserPokemon()!.getBattlerIndex()); + actualTurnOrder.push( + (game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).getUserPokemon()!.getBattlerIndex(), + ); await game.phaseInterceptor.to("MoveEndPhase"); } diff --git a/test/moves/shell_trap.test.ts b/test/moves/shell_trap.test.ts index 4dfc0e72d0a..9a38bf4486b 100644 --- a/test/moves/shell_trap.test.ts +++ b/test/moves/shell_trap.test.ts @@ -50,7 +50,7 @@ describe("Moves - Shell Trap", () => { await game.phaseInterceptor.to(MoveEndPhase); - const movePhase = game.scene.getCurrentPhase(); + const movePhase = game.scene.phaseManager.getCurrentPhase(); expect(movePhase instanceof MovePhase).toBeTruthy(); expect((movePhase as MovePhase).pokemon).toBe(playerPokemon[1]); @@ -73,7 +73,7 @@ describe("Moves - Shell Trap", () => { await game.phaseInterceptor.to(MoveEndPhase); - const movePhase = game.scene.getCurrentPhase(); + const movePhase = game.scene.phaseManager.getCurrentPhase(); expect(movePhase instanceof MovePhase).toBeTruthy(); expect((movePhase as MovePhase).pokemon).not.toBe(playerPokemon[1]); @@ -96,7 +96,7 @@ describe("Moves - Shell Trap", () => { await game.phaseInterceptor.to(MoveEndPhase); - const movePhase = game.scene.getCurrentPhase(); + const movePhase = game.scene.phaseManager.getCurrentPhase(); expect(movePhase instanceof MovePhase).toBeTruthy(); expect((movePhase as MovePhase).pokemon).not.toBe(playerPokemon[1]); @@ -117,7 +117,7 @@ describe("Moves - Shell Trap", () => { await game.phaseInterceptor.to(MoveEndPhase); - const movePhase = game.scene.getCurrentPhase(); + const movePhase = game.scene.phaseManager.getCurrentPhase(); expect(movePhase instanceof MovePhase).toBeTruthy(); expect((movePhase as MovePhase).pokemon).not.toBe(playerPokemon[1]); diff --git a/test/moves/substitute.test.ts b/test/moves/substitute.test.ts index 97296be7d8f..454e729a67b 100644 --- a/test/moves/substitute.test.ts +++ b/test/moves/substitute.test.ts @@ -400,7 +400,7 @@ describe("Moves - Substitute", () => { // Simulate a Baton switch for the player this turn game.onNextPrompt("CommandPhase", UiMode.COMMAND, () => { - (game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.POKEMON, 1, true); + (game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(Command.POKEMON, 1, true); }); await game.phaseInterceptor.to("MovePhase", false); diff --git a/test/moves/transform.test.ts b/test/moves/transform.test.ts index e8ed133b827..ca326da5748 100644 --- a/test/moves/transform.test.ts +++ b/test/moves/transform.test.ts @@ -132,7 +132,7 @@ describe("Moves - Transform", () => { await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextWave(); - expect(game.scene.getCurrentPhase()?.constructor.name).toBe("CommandPhase"); + expect(game.scene.phaseManager.getCurrentPhase()?.constructor.name).toBe("CommandPhase"); expect(game.scene.currentBattle.waveIndex).toBe(2); await game.reload.reloadSession(); @@ -173,7 +173,7 @@ describe("Moves - Transform", () => { await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextWave(); - expect(game.scene.getCurrentPhase()?.constructor.name).toBe("CommandPhase"); + expect(game.scene.phaseManager.getCurrentPhase()?.constructor.name).toBe("CommandPhase"); expect(game.scene.currentBattle.waveIndex).toBe(2); await game.reload.reloadSession(); diff --git a/test/moves/whirlwind.test.ts b/test/moves/whirlwind.test.ts index 56c4017fbb5..c457bdb67d7 100644 --- a/test/moves/whirlwind.test.ts +++ b/test/moves/whirlwind.test.ts @@ -180,7 +180,7 @@ describe("Moves - Whirlwind", () => { expect(eligibleEnemy.length).toBe(1); // Spy on the queueMessage function - const queueSpy = vi.spyOn(globalScene, "queueMessage"); + const queueSpy = vi.spyOn(globalScene.phaseManager, "queueMessage"); // Player uses Whirlwind; opponent uses Splash game.move.select(MoveId.WHIRLWIND); diff --git a/test/mystery-encounter/encounter-test-utils.ts b/test/mystery-encounter/encounter-test-utils.ts index 977f40bc90e..6954d6212cc 100644 --- a/test/mystery-encounter/encounter-test-utils.ts +++ b/test/mystery-encounter/encounter-test-utils.ts @@ -71,9 +71,9 @@ export async function runMysteryEncounterToEnd( // If a battle is started, fast forward to end of the battle game.onNextPrompt("CommandPhase", UiMode.COMMAND, () => { - game.scene.clearPhaseQueue(); - game.scene.clearPhaseQueueSplice(); - game.scene.unshiftPhase(new VictoryPhase(0)); + game.scene.phaseManager.clearPhaseQueue(); + game.scene.phaseManager.clearPhaseQueueSplice(); + game.scene.phaseManager.unshiftPhase(new VictoryPhase(0)); game.endPhase(); }); @@ -197,14 +197,14 @@ async function handleSecondaryOptionSelect(game: GameManager, pokemonNo: number, * @param runRewardsPhase */ export async function skipBattleRunMysteryEncounterRewardsPhase(game: GameManager, runRewardsPhase = true) { - game.scene.clearPhaseQueue(); - game.scene.clearPhaseQueueSplice(); + game.scene.phaseManager.clearPhaseQueue(); + game.scene.phaseManager.clearPhaseQueueSplice(); game.scene.getEnemyParty().forEach(p => { p.hp = 0; p.status = new Status(StatusEffect.FAINT); game.scene.field.remove(p); }); - game.scene.pushPhase(new VictoryPhase(0)); + game.scene.phaseManager.pushPhase(new VictoryPhase(0)); game.phaseInterceptor.superEndPhase(); game.setMode(UiMode.MESSAGE); await game.phaseInterceptor.to(MysteryEncounterRewardsPhase, runRewardsPhase); diff --git a/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts b/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts index 3c6305a77dc..d713db0aff8 100644 --- a/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts +++ b/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts @@ -107,7 +107,7 @@ describe("A Trainer's Test - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyField = scene.getEnemyField(); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyField.length).toBe(1); expect(scene.currentBattle.trainer).toBeDefined(); expect( @@ -132,7 +132,7 @@ describe("A Trainer's Test - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); const eggsAfter = scene.gameData.eggs; expect(eggsAfter).toBeDefined(); @@ -162,7 +162,7 @@ describe("A Trainer's Test - Mystery Encounter", () => { }); it("Should fully heal the party", async () => { - const phaseSpy = vi.spyOn(scene, "unshiftPhase"); + const phaseSpy = vi.spyOn(scene.phaseManager, "unshiftPhase"); await game.runToMysteryEncounter(MysteryEncounterType.A_TRAINERS_TEST, defaultParty); await runMysteryEncounterToEnd(game, 2); @@ -180,7 +180,7 @@ describe("A Trainer's Test - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 2); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); const eggsAfter = scene.gameData.eggs; expect(eggsAfter).toBeDefined(); diff --git a/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts b/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts index f13f6e0b072..f5bc1a62528 100644 --- a/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts +++ b/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts @@ -129,13 +129,13 @@ describe("Absolute Avarice - Mystery Encounter", () => { }); it("should start battle against Greedent", async () => { - const phaseSpy = vi.spyOn(scene, "pushPhase"); + const phaseSpy = vi.spyOn(scene.phaseManager, "pushPhase"); await game.runToMysteryEncounter(MysteryEncounterType.ABSOLUTE_AVARICE, defaultParty); await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyField = scene.getEnemyField(); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(SpeciesId.GREEDENT); const moveset = enemyField[0].moveset.map(m => m.moveId); @@ -152,7 +152,7 @@ describe("Absolute Avarice - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); for (const partyPokemon of scene.getPlayerParty()) { const pokemonId = partyPokemon.id; diff --git a/test/mystery-encounter/encounters/berries-abound-encounter.test.ts b/test/mystery-encounter/encounters/berries-abound-encounter.test.ts index c3af2d9fe13..566576995a5 100644 --- a/test/mystery-encounter/encounters/berries-abound-encounter.test.ts +++ b/test/mystery-encounter/encounters/berries-abound-encounter.test.ts @@ -116,7 +116,7 @@ describe("Berries Abound - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyField = scene.getEnemyField(); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(speciesToSpawn); }); @@ -137,7 +137,7 @@ describe("Berries Abound - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); const berriesAfter = scene.findModifiers(m => m instanceof BerryModifier) as BerryModifier[]; const berriesAfterCount = berriesAfter.reduce((a, b) => a + b.stackCount, 0); @@ -150,7 +150,7 @@ describe("Berries Abound - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -190,7 +190,7 @@ describe("Berries Abound - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 2, undefined, true); const enemyField = scene.getEnemyField(); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(speciesToSpawn); @@ -214,7 +214,7 @@ describe("Berries Abound - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 2, undefined, true); const enemyField = scene.getEnemyField(); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(speciesToSpawn); @@ -235,7 +235,7 @@ describe("Berries Abound - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 2); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); diff --git a/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts b/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts index 0cc990a405a..7e569d0cdf7 100644 --- a/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts +++ b/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts @@ -232,7 +232,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyParty = scene.getEnemyParty(); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyParty.length).toBe(2); expect(scene.currentBattle.trainer?.config.trainerType).toBe(TrainerType.BUG_TYPE_SUPERFAN); expect(enemyParty[0].species.speciesId).toBe(SpeciesId.BEEDRILL); @@ -245,7 +245,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyParty = scene.getEnemyParty(); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyParty.length).toBe(3); expect(scene.currentBattle.trainer?.config.trainerType).toBe(TrainerType.BUG_TYPE_SUPERFAN); expect(enemyParty[0].species.speciesId).toBe(SpeciesId.BEEDRILL); @@ -259,7 +259,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyParty = scene.getEnemyParty(); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyParty.length).toBe(4); expect(scene.currentBattle.trainer?.config.trainerType).toBe(TrainerType.BUG_TYPE_SUPERFAN); expect(enemyParty[0].species.speciesId).toBe(SpeciesId.BEEDRILL); @@ -274,7 +274,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyParty = scene.getEnemyParty(); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyParty.length).toBe(5); expect(scene.currentBattle.trainer?.config.trainerType).toBe(TrainerType.BUG_TYPE_SUPERFAN); expect(enemyParty[0].species.speciesId).toBe(SpeciesId.BEEDRILL); @@ -290,7 +290,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyParty = scene.getEnemyParty(); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyParty.length).toBe(5); expect(scene.currentBattle.trainer?.config.trainerType).toBe(TrainerType.BUG_TYPE_SUPERFAN); expect(enemyParty[0].species.speciesId).toBe(SpeciesId.BEEDRILL); @@ -308,7 +308,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyParty = scene.getEnemyParty(); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyParty.length).toBe(5); expect(scene.currentBattle.trainer?.config.trainerType).toBe(TrainerType.BUG_TYPE_SUPERFAN); expect(enemyParty[0].species.speciesId).toBe(SpeciesId.BEEDRILL); @@ -326,7 +326,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyParty = scene.getEnemyParty(); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyParty.length).toBe(5); expect(scene.currentBattle.trainer?.config.trainerType).toBe(TrainerType.BUG_TYPE_SUPERFAN); expect(enemyParty[0].species.speciesId).toBe(SpeciesId.BEEDRILL); @@ -344,7 +344,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyParty = scene.getEnemyParty(); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyParty.length).toBe(5); expect(scene.currentBattle.trainer?.config.trainerType).toBe(TrainerType.BUG_TYPE_SUPERFAN); expect(enemyParty[0].species.speciesId).toBe(SpeciesId.BEEDRILL); @@ -366,7 +366,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game, false); - expect(scene.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterRewardsPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterRewardsPhase.name); game.phaseInterceptor["prompts"] = []; // Clear out prompt handlers game.onNextPrompt("MysteryEncounterRewardsPhase", UiMode.OPTION_SELECT, () => { game.phaseInterceptor.superEndPhase(); @@ -398,7 +398,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, [SpeciesId.ABRA]); await game.phaseInterceptor.to(MysteryEncounterPhase, false); - const encounterPhase = scene.getCurrentPhase(); + const encounterPhase = scene.phaseManager.getCurrentPhase(); expect(encounterPhase?.constructor.name).toBe(MysteryEncounterPhase.name); const mysteryEncounterPhase = encounterPhase as MysteryEncounterPhase; vi.spyOn(mysteryEncounterPhase, "continueEncounter"); @@ -407,7 +407,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 2); - expect(scene.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); @@ -417,7 +417,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, defaultParty); await runMysteryEncounterToEnd(game, 2); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -436,7 +436,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { ]); await runMysteryEncounterToEnd(game, 2); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -458,7 +458,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { ]); await runMysteryEncounterToEnd(game, 2); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -482,7 +482,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { ]); await runMysteryEncounterToEnd(game, 2); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -534,7 +534,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await game.phaseInterceptor.to(MysteryEncounterPhase, false); game.scene.modifiers = []; - const encounterPhase = scene.getCurrentPhase(); + const encounterPhase = scene.phaseManager.getCurrentPhase(); expect(encounterPhase?.constructor.name).toBe(MysteryEncounterPhase.name); const mysteryEncounterPhase = encounterPhase as MysteryEncounterPhase; vi.spyOn(mysteryEncounterPhase, "continueEncounter"); @@ -543,7 +543,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 3); - expect(scene.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); @@ -558,7 +558,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1 }); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); diff --git a/test/mystery-encounter/encounters/clowning-around-encounter.test.ts b/test/mystery-encounter/encounters/clowning-around-encounter.test.ts index d83f8d0642c..fc0ef0e5a86 100644 --- a/test/mystery-encounter/encounters/clowning-around-encounter.test.ts +++ b/test/mystery-encounter/encounters/clowning-around-encounter.test.ts @@ -167,13 +167,13 @@ describe("Clowning Around - Mystery Encounter", () => { }); it("should start double battle against the clown", async () => { - const phaseSpy = vi.spyOn(scene, "pushPhase"); + const phaseSpy = vi.spyOn(scene.phaseManager, "pushPhase"); await game.runToMysteryEncounter(MysteryEncounterType.CLOWNING_AROUND, defaultParty); await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyField = scene.getEnemyField(); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyField.length).toBe(2); expect(enemyField[0].species.speciesId).toBe(SpeciesId.MR_MIME); expect(enemyField[0].moveset).toEqual([ @@ -202,7 +202,7 @@ describe("Clowning Around - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); const abilityToTrain = scene.currentBattle.mysteryEncounter?.misc.ability; @@ -217,7 +217,7 @@ describe("Clowning Around - Mystery Encounter", () => { vi.spyOn(partyUiHandler, "show"); game.endPhase(); await game.phaseInterceptor.to(PostMysteryEncounterPhase); - expect(scene.getCurrentPhase()?.constructor.name).toBe(PostMysteryEncounterPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(PostMysteryEncounterPhase.name); // Wait for Yes/No confirmation to appear await vi.waitFor(() => expect(optionSelectUiHandler.show).toHaveBeenCalled()); diff --git a/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts b/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts index 501ff0c45e8..76a562b5851 100644 --- a/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts +++ b/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts @@ -98,7 +98,7 @@ describe("Dancing Lessons - Mystery Encounter", () => { }); it("should start battle against Oricorio", async () => { - const phaseSpy = vi.spyOn(scene, "pushPhase"); + const phaseSpy = vi.spyOn(scene.phaseManager, "pushPhase"); await game.runToMysteryEncounter(MysteryEncounterType.DANCING_LESSONS, defaultParty); // Make party lead's level arbitrarily high to not get KOed by move @@ -108,7 +108,7 @@ describe("Dancing Lessons - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyField = scene.getEnemyField(); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(SpeciesId.ORICORIO); expect(enemyField[0].summonData.statStages).toEqual([1, 1, 1, 1, 0, 0, 0]); @@ -129,7 +129,7 @@ describe("Dancing Lessons - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -158,7 +158,7 @@ describe("Dancing Lessons - Mystery Encounter", () => { }); it("Should select a pokemon to learn Revelation Dance", async () => { - const phaseSpy = vi.spyOn(scene, "unshiftPhase"); + const phaseSpy = vi.spyOn(scene.phaseManager, "unshiftPhase"); await game.runToMysteryEncounter(MysteryEncounterType.DANCING_LESSONS, defaultParty); scene.getPlayerParty()[0].moveset = []; @@ -219,7 +219,7 @@ describe("Dancing Lessons - Mystery Encounter", () => { scene.getPlayerParty().forEach(p => (p.moveset = [])); await game.phaseInterceptor.to(MysteryEncounterPhase, false); - const encounterPhase = scene.getCurrentPhase(); + const encounterPhase = scene.phaseManager.getCurrentPhase(); expect(encounterPhase?.constructor.name).toBe(MysteryEncounterPhase.name); const mysteryEncounterPhase = encounterPhase as MysteryEncounterPhase; vi.spyOn(mysteryEncounterPhase, "continueEncounter"); @@ -229,7 +229,7 @@ describe("Dancing Lessons - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 3); const partyCountAfter = scene.getPlayerParty().length; - expect(scene.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); diff --git a/test/mystery-encounter/encounters/delibirdy-encounter.test.ts b/test/mystery-encounter/encounters/delibirdy-encounter.test.ts index 58496e957c0..0d1094831bc 100644 --- a/test/mystery-encounter/encounters/delibirdy-encounter.test.ts +++ b/test/mystery-encounter/encounters/delibirdy-encounter.test.ts @@ -153,7 +153,7 @@ describe("Delibird-y - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.DELIBIRDY, defaultParty); await game.phaseInterceptor.to(MysteryEncounterPhase, false); - const encounterPhase = scene.getCurrentPhase(); + const encounterPhase = scene.phaseManager.getCurrentPhase(); expect(encounterPhase?.constructor.name).toBe(MysteryEncounterPhase.name); const mysteryEncounterPhase = encounterPhase as MysteryEncounterPhase; vi.spyOn(mysteryEncounterPhase, "continueEncounter"); @@ -162,7 +162,7 @@ describe("Delibird-y - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 1); - expect(scene.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); @@ -308,7 +308,7 @@ describe("Delibird-y - Mystery Encounter", () => { await game.phaseInterceptor.to(MysteryEncounterPhase, false); - const encounterPhase = scene.getCurrentPhase(); + const encounterPhase = scene.phaseManager.getCurrentPhase(); expect(encounterPhase?.constructor.name).toBe(MysteryEncounterPhase.name); const mysteryEncounterPhase = encounterPhase as MysteryEncounterPhase; vi.spyOn(mysteryEncounterPhase, "continueEncounter"); @@ -317,7 +317,7 @@ describe("Delibird-y - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 2); - expect(scene.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); @@ -441,7 +441,7 @@ describe("Delibird-y - Mystery Encounter", () => { await game.phaseInterceptor.to(MysteryEncounterPhase, false); - const encounterPhase = scene.getCurrentPhase(); + const encounterPhase = scene.phaseManager.getCurrentPhase(); expect(encounterPhase?.constructor.name).toBe(MysteryEncounterPhase.name); const mysteryEncounterPhase = encounterPhase as MysteryEncounterPhase; vi.spyOn(mysteryEncounterPhase, "continueEncounter"); @@ -450,7 +450,7 @@ describe("Delibird-y - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 3); - expect(scene.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); diff --git a/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts b/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts index c2974def16e..3feb44bbe91 100644 --- a/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts +++ b/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts @@ -95,7 +95,7 @@ describe("Department Store Sale - Mystery Encounter", () => { it("should have shop with only TMs", async () => { await game.runToMysteryEncounter(MysteryEncounterType.DEPARTMENT_STORE_SALE, defaultParty); await runMysteryEncounterToEnd(game, 1); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -132,7 +132,7 @@ describe("Department Store Sale - Mystery Encounter", () => { it("should have shop with only Vitamins", async () => { await game.runToMysteryEncounter(MysteryEncounterType.DEPARTMENT_STORE_SALE, defaultParty); await runMysteryEncounterToEnd(game, 2); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -172,7 +172,7 @@ describe("Department Store Sale - Mystery Encounter", () => { it("should have shop with only X Items", async () => { await game.runToMysteryEncounter(MysteryEncounterType.DEPARTMENT_STORE_SALE, defaultParty); await runMysteryEncounterToEnd(game, 3); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -212,7 +212,7 @@ describe("Department Store Sale - Mystery Encounter", () => { it("should have shop with only Pokeballs", async () => { await game.runToMysteryEncounter(MysteryEncounterType.DEPARTMENT_STORE_SALE, defaultParty); await runMysteryEncounterToEnd(game, 4); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); diff --git a/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts b/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts index ba9ea4126da..76b15106ef1 100644 --- a/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts +++ b/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts @@ -157,13 +157,13 @@ describe("Fiery Fallout - Mystery Encounter", () => { }); it("should start battle against 2 Volcarona", async () => { - const phaseSpy = vi.spyOn(scene, "pushPhase"); + const phaseSpy = vi.spyOn(scene.phaseManager, "pushPhase"); await game.runToMysteryEncounter(MysteryEncounterType.FIERY_FALLOUT, defaultParty); await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyField = scene.getEnemyField(); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyField.length).toBe(2); expect(enemyField[0].species.speciesId).toBe(SpeciesId.VOLCARONA); expect(enemyField[1].species.speciesId).toBe(SpeciesId.VOLCARONA); @@ -179,7 +179,7 @@ describe("Fiery Fallout - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); const leadPokemonId = scene.getPlayerParty()?.[0].id; const leadPokemonItems = scene.findModifiers( @@ -268,7 +268,7 @@ describe("Fiery Fallout - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.FIERY_FALLOUT, defaultParty); await runMysteryEncounterToEnd(game, 3); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); const leadPokemonItems = scene.getPlayerParty()?.[0].getHeldItems() as PokemonHeldItemModifier[]; const item = leadPokemonItems.find(i => i instanceof AttackTypeBoosterModifier); @@ -288,13 +288,13 @@ describe("Fiery Fallout - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.FIERY_FALLOUT, [SpeciesId.MAGIKARP]); await game.phaseInterceptor.to(MysteryEncounterPhase, false); - const encounterPhase = scene.getCurrentPhase(); + const encounterPhase = scene.phaseManager.getCurrentPhase(); expect(encounterPhase?.constructor.name).toBe(MysteryEncounterPhase.name); const continueEncounterSpy = vi.spyOn(encounterPhase as MysteryEncounterPhase, "continueEncounter"); await runSelectMysteryEncounterOption(game, 3); - expect(scene.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); expect(continueEncounterSpy).not.toHaveBeenCalled(); }); }); diff --git a/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts b/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts index 1b5bd9fc649..7038fff3117 100644 --- a/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts +++ b/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts @@ -111,7 +111,7 @@ describe("Fight or Flight - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyField = scene.getEnemyField(); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(speciesToSpawn); }); @@ -124,7 +124,7 @@ describe("Fight or Flight - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -158,7 +158,7 @@ describe("Fight or Flight - Mystery Encounter", () => { scene.getPlayerParty().forEach(p => (p.moveset = [])); await game.phaseInterceptor.to(MysteryEncounterPhase, false); - const encounterPhase = scene.getCurrentPhase(); + const encounterPhase = scene.phaseManager.getCurrentPhase(); expect(encounterPhase?.constructor.name).toBe(MysteryEncounterPhase.name); const mysteryEncounterPhase = encounterPhase as MysteryEncounterPhase; vi.spyOn(mysteryEncounterPhase, "continueEncounter"); @@ -167,7 +167,7 @@ describe("Fight or Flight - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 2); - expect(scene.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); @@ -184,7 +184,7 @@ describe("Fight or Flight - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 2); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); diff --git a/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts b/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts index fcc2eda28f7..4eaf2cef1da 100644 --- a/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts +++ b/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts @@ -123,7 +123,7 @@ describe("Fun And Games! - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.FUN_AND_GAMES, defaultParty); await game.phaseInterceptor.to(MysteryEncounterPhase, false); - const encounterPhase = scene.getCurrentPhase(); + const encounterPhase = scene.phaseManager.getCurrentPhase(); expect(encounterPhase?.constructor.name).toBe(MysteryEncounterPhase.name); const mysteryEncounterPhase = encounterPhase as MysteryEncounterPhase; vi.spyOn(mysteryEncounterPhase, "continueEncounter"); @@ -132,7 +132,7 @@ describe("Fun And Games! - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 1); - expect(scene.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); @@ -144,7 +144,7 @@ describe("Fun And Games! - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.FUN_AND_GAMES, defaultParty); await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1 }, true); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(scene.getEnemyPokemon()?.species.speciesId).toBe(SpeciesId.WOBBUFFET); expect(scene.getEnemyPokemon()?.ivs).toEqual([0, 0, 0, 0, 0, 0]); expect(scene.getEnemyPokemon()?.nature).toBe(Nature.MILD); @@ -154,19 +154,19 @@ describe("Fun And Games! - Mystery Encounter", () => { }); // Turn 1 - (game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, false); + (game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, false); await game.phaseInterceptor.to(CommandPhase); // Turn 2 - (game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, false); + (game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, false); await game.phaseInterceptor.to(CommandPhase); // Turn 3 - (game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, false); + (game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, false); await game.phaseInterceptor.to(SelectModifierPhase, false); // Rewards - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); }); it("should have no items in rewards if Wubboffet doesn't take enough damage", async () => { @@ -174,18 +174,18 @@ describe("Fun And Games! - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.FUN_AND_GAMES, defaultParty); await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1 }, true); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); game.onNextPrompt("MessagePhase", UiMode.MESSAGE, () => { game.endPhase(); }); // Skip minigame scene.currentBattle.mysteryEncounter!.misc.turnsRemaining = 0; - (game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, false); + (game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, false); await game.phaseInterceptor.to(SelectModifierPhase, false); // Rewards - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -201,7 +201,7 @@ describe("Fun And Games! - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.FUN_AND_GAMES, defaultParty); await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1 }, true); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); game.onNextPrompt("MessagePhase", UiMode.MESSAGE, () => { game.endPhase(); }); @@ -210,11 +210,11 @@ describe("Fun And Games! - Mystery Encounter", () => { const wobbuffet = scene.getEnemyPokemon()!; wobbuffet.hp = Math.floor(0.2 * wobbuffet.getMaxHp()); scene.currentBattle.mysteryEncounter!.misc.turnsRemaining = 0; - (game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, false); + (game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, false); await game.phaseInterceptor.to(SelectModifierPhase, false); // Rewards - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -231,7 +231,7 @@ describe("Fun And Games! - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.FUN_AND_GAMES, defaultParty); await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1 }, true); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); game.onNextPrompt("MessagePhase", UiMode.MESSAGE, () => { game.endPhase(); }); @@ -240,11 +240,11 @@ describe("Fun And Games! - Mystery Encounter", () => { const wobbuffet = scene.getEnemyPokemon()!; wobbuffet.hp = Math.floor(0.1 * wobbuffet.getMaxHp()); scene.currentBattle.mysteryEncounter!.misc.turnsRemaining = 0; - (game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, false); + (game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, false); await game.phaseInterceptor.to(SelectModifierPhase, false); // Rewards - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -261,7 +261,7 @@ describe("Fun And Games! - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.FUN_AND_GAMES, defaultParty); await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1 }, true); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); game.onNextPrompt("MessagePhase", UiMode.MESSAGE, () => { game.endPhase(); }); @@ -270,11 +270,11 @@ describe("Fun And Games! - Mystery Encounter", () => { const wobbuffet = scene.getEnemyPokemon()!; wobbuffet.hp = 1; scene.currentBattle.mysteryEncounter!.misc.turnsRemaining = 0; - (game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, false); + (game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, false); await game.phaseInterceptor.to(SelectModifierPhase, false); // Rewards - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); diff --git a/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts b/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts index 73bf3cc4eba..96c4adf67c2 100644 --- a/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts +++ b/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts @@ -228,7 +228,7 @@ describe("Global Trade System - Mystery Encounter", () => { await scene.updateModifiers(true); await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1 }); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); diff --git a/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts b/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts index 10b96d84667..8f041a14002 100644 --- a/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts +++ b/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts @@ -137,7 +137,7 @@ describe("Lost at Sea - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.LOST_AT_SEA, [SpeciesId.ARCANINE]); await game.phaseInterceptor.to(MysteryEncounterPhase, false); - const encounterPhase = scene.getCurrentPhase(); + const encounterPhase = scene.phaseManager.getCurrentPhase(); expect(encounterPhase?.constructor.name).toBe(MysteryEncounterPhase.name); const mysteryEncounterPhase = encounterPhase as MysteryEncounterPhase; vi.spyOn(mysteryEncounterPhase, "continueEncounter"); @@ -146,7 +146,7 @@ describe("Lost at Sea - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 1); - expect(scene.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); @@ -202,7 +202,7 @@ describe("Lost at Sea - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.LOST_AT_SEA, [SpeciesId.ARCANINE]); await game.phaseInterceptor.to(MysteryEncounterPhase, false); - const encounterPhase = scene.getCurrentPhase(); + const encounterPhase = scene.phaseManager.getCurrentPhase(); expect(encounterPhase?.constructor.name).toBe(MysteryEncounterPhase.name); const mysteryEncounterPhase = encounterPhase as MysteryEncounterPhase; vi.spyOn(mysteryEncounterPhase, "continueEncounter"); @@ -211,7 +211,7 @@ describe("Lost at Sea - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 2); - expect(scene.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); diff --git a/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts b/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts index b93fbeb2673..948e42547de 100644 --- a/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts +++ b/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts @@ -155,7 +155,7 @@ describe("Mysterious Challengers - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.MYSTERIOUS_CHALLENGERS, defaultParty); await runMysteryEncounterToEnd(game, 1, undefined, true); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(scene.currentBattle.trainer).toBeDefined(); expect(scene.currentBattle.mysteryEncounter?.encounterMode).toBe(MysteryEncounterMode.TRAINER_BATTLE); }); @@ -165,7 +165,7 @@ describe("Mysterious Challengers - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -199,7 +199,7 @@ describe("Mysterious Challengers - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.MYSTERIOUS_CHALLENGERS, defaultParty); await runMysteryEncounterToEnd(game, 2, undefined, true); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(scene.currentBattle.trainer).toBeDefined(); expect(scene.currentBattle.mysteryEncounter?.encounterMode).toBe(MysteryEncounterMode.TRAINER_BATTLE); }); @@ -209,7 +209,7 @@ describe("Mysterious Challengers - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 2, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -256,7 +256,7 @@ describe("Mysterious Challengers - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.MYSTERIOUS_CHALLENGERS, defaultParty); await runMysteryEncounterToEnd(game, 3, undefined, true); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(scene.currentBattle.trainer).toBeDefined(); expect(scene.currentBattle.mysteryEncounter?.encounterMode).toBe(MysteryEncounterMode.TRAINER_BATTLE); }); @@ -266,7 +266,7 @@ describe("Mysterious Challengers - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 3, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); diff --git a/test/mystery-encounter/encounters/part-timer-encounter.test.ts b/test/mystery-encounter/encounters/part-timer-encounter.test.ts index 1b9d24b5ce6..fa85f373a35 100644 --- a/test/mystery-encounter/encounters/part-timer-encounter.test.ts +++ b/test/mystery-encounter/encounters/part-timer-encounter.test.ts @@ -238,7 +238,7 @@ describe("Part-Timer - Mystery Encounter", () => { scene.getPlayerParty().forEach(p => (p.moveset = [])); await game.phaseInterceptor.to(MysteryEncounterPhase, false); - const encounterPhase = scene.getCurrentPhase(); + const encounterPhase = scene.phaseManager.getCurrentPhase(); expect(encounterPhase?.constructor.name).toBe(MysteryEncounterPhase.name); const mysteryEncounterPhase = encounterPhase as MysteryEncounterPhase; vi.spyOn(mysteryEncounterPhase, "continueEncounter"); @@ -247,7 +247,7 @@ describe("Part-Timer - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 3); - expect(scene.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); diff --git a/test/mystery-encounter/encounters/safari-zone.test.ts b/test/mystery-encounter/encounters/safari-zone.test.ts index c6bde3a7e7a..dcaf25dd512 100644 --- a/test/mystery-encounter/encounters/safari-zone.test.ts +++ b/test/mystery-encounter/encounters/safari-zone.test.ts @@ -115,7 +115,7 @@ describe("Safari Zone - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.SAFARI_ZONE, defaultParty); await game.phaseInterceptor.to(MysteryEncounterPhase, false); - const encounterPhase = scene.getCurrentPhase(); + const encounterPhase = scene.phaseManager.getCurrentPhase(); expect(encounterPhase?.constructor.name).toBe(MysteryEncounterPhase.name); const mysteryEncounterPhase = encounterPhase as MysteryEncounterPhase; vi.spyOn(mysteryEncounterPhase, "continueEncounter"); @@ -124,7 +124,7 @@ describe("Safari Zone - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 1); - expect(scene.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); diff --git a/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts b/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts index 039b1dacf31..6c8daed998c 100644 --- a/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts +++ b/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts @@ -153,7 +153,7 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, defaultParty); await game.phaseInterceptor.to(MysteryEncounterPhase, false); - const encounterPhase = scene.getCurrentPhase(); + const encounterPhase = scene.phaseManager.getCurrentPhase(); expect(encounterPhase?.constructor.name).toBe(MysteryEncounterPhase.name); const mysteryEncounterPhase = encounterPhase as MysteryEncounterPhase; vi.spyOn(mysteryEncounterPhase, "continueEncounter"); @@ -162,7 +162,7 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 1); - expect(scene.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); @@ -172,7 +172,7 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, defaultParty); await runMysteryEncounterToEnd(game, 1, undefined, true); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); }); it("should transport to a new area", async () => { @@ -225,7 +225,7 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, [SpeciesId.BLASTOISE]); await game.phaseInterceptor.to(MysteryEncounterPhase, false); - const encounterPhase = scene.getCurrentPhase(); + const encounterPhase = scene.phaseManager.getCurrentPhase(); expect(encounterPhase?.constructor.name).toBe(MysteryEncounterPhase.name); const mysteryEncounterPhase = encounterPhase as MysteryEncounterPhase; vi.spyOn(mysteryEncounterPhase, "continueEncounter"); @@ -234,7 +234,7 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 2); - expect(scene.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); @@ -244,7 +244,7 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, [SpeciesId.METAGROSS]); await runMysteryEncounterToEnd(game, 2, undefined, true); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); }); it("should transport to a new area", async () => { @@ -305,7 +305,7 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 3, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); diff --git a/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts b/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts index 14c9287f5f3..0d5f67b8815 100644 --- a/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts @@ -160,7 +160,7 @@ describe("The Expert Pokémon Breeder - Mystery Encounter", () => { expect(successfullyLoaded).toBe(true); // Check usual battle stuff - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(scene.currentBattle.trainer).toBeDefined(); expect(scene.currentBattle.mysteryEncounter?.encounterMode).toBe(MysteryEncounterMode.TRAINER_BATTLE); expect(scene.getPlayerParty().length).toBe(1); @@ -179,7 +179,7 @@ describe("The Expert Pokémon Breeder - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); const eggsAfter = scene.gameData.eggs; const commonEggs = scene.currentBattle.mysteryEncounter!.misc.pokemon1CommonEggs; @@ -245,7 +245,7 @@ describe("The Expert Pokémon Breeder - Mystery Encounter", () => { expect(successfullyLoaded).toBe(true); // Check usual battle stuff - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(scene.currentBattle.trainer).toBeDefined(); expect(scene.currentBattle.mysteryEncounter?.encounterMode).toBe(MysteryEncounterMode.TRAINER_BATTLE); expect(scene.getPlayerParty().length).toBe(1); @@ -264,7 +264,7 @@ describe("The Expert Pokémon Breeder - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 2, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); const eggsAfter = scene.gameData.eggs; const commonEggs = scene.currentBattle.mysteryEncounter!.misc.pokemon2CommonEggs; @@ -327,7 +327,7 @@ describe("The Expert Pokémon Breeder - Mystery Encounter", () => { expect(successfullyLoaded).toBe(true); // Check usual battle stuff - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(scene.currentBattle.trainer).toBeDefined(); expect(scene.currentBattle.mysteryEncounter?.encounterMode).toBe(MysteryEncounterMode.TRAINER_BATTLE); expect(scene.getPlayerParty().length).toBe(1); @@ -346,7 +346,7 @@ describe("The Expert Pokémon Breeder - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 3, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); const eggsAfter = scene.gameData.eggs; const commonEggs = scene.currentBattle.mysteryEncounter!.misc.pokemon3CommonEggs; diff --git a/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts b/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts index 73632990dbf..13d7c2502a6 100644 --- a/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts @@ -175,7 +175,7 @@ describe("The Pokemon Salesman - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.THE_POKEMON_SALESMAN, defaultParty); await game.phaseInterceptor.to(MysteryEncounterPhase, false); - const encounterPhase = scene.getCurrentPhase(); + const encounterPhase = scene.phaseManager.getCurrentPhase(); expect(encounterPhase?.constructor.name).toBe(MysteryEncounterPhase.name); const mysteryEncounterPhase = encounterPhase as MysteryEncounterPhase; vi.spyOn(mysteryEncounterPhase, "continueEncounter"); @@ -184,7 +184,7 @@ describe("The Pokemon Salesman - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 1); - expect(scene.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); diff --git a/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts b/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts index 2187bad5775..e50a19a0a80 100644 --- a/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts @@ -189,13 +189,13 @@ describe("The Strong Stuff - Mystery Encounter", () => { }); it("should start battle against Shuckle", async () => { - const phaseSpy = vi.spyOn(scene, "pushPhase"); + const phaseSpy = vi.spyOn(scene.phaseManager, "pushPhase"); await game.runToMysteryEncounter(MysteryEncounterType.THE_STRONG_STUFF, defaultParty); await runMysteryEncounterToEnd(game, 2, undefined, true); const enemyField = scene.getEnemyField(); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(SpeciesId.SHUCKLE); expect(enemyField[0].summonData.statStages).toEqual([0, 1, 0, 1, 0, 0, 0]); @@ -233,7 +233,7 @@ describe("The Strong Stuff - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 2, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); diff --git a/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts b/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts index 57b6e881683..87a3852615d 100644 --- a/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts @@ -265,7 +265,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.THE_WINSTRATE_CHALLENGE, defaultParty); await runMysteryEncounterToEnd(game, 1, undefined, true); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(scene.currentBattle.trainer).toBeDefined(); expect(scene.currentBattle.trainer!.config.trainerType).toBe(TrainerType.VICTOR); expect(scene.currentBattle.mysteryEncounter?.enemyPartyConfigs.length).toBe(4); @@ -298,7 +298,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { // Should have Macho Brace in the rewards await skipBattleToNextBattle(game, true); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -328,7 +328,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { }); it("Should fully heal the party", async () => { - const phaseSpy = vi.spyOn(scene, "unshiftPhase"); + const phaseSpy = vi.spyOn(scene.phaseManager, "unshiftPhase"); await game.runToMysteryEncounter(MysteryEncounterType.THE_WINSTRATE_CHALLENGE, defaultParty); await runMysteryEncounterToEnd(game, 2); @@ -340,7 +340,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { it("should have a Rarer Candy in the rewards", async () => { await game.runToMysteryEncounter(MysteryEncounterType.THE_WINSTRATE_CHALLENGE, defaultParty); await runMysteryEncounterToEnd(game, 2); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -359,8 +359,8 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { * @param isFinalBattle */ async function skipBattleToNextBattle(game: GameManager, isFinalBattle = false) { - game.scene.clearPhaseQueue(); - game.scene.clearPhaseQueueSplice(); + game.scene.phaseManager.clearPhaseQueue(); + game.scene.phaseManager.clearPhaseQueueSplice(); const commandUiHandler = game.scene.ui.handlers[UiMode.COMMAND]; commandUiHandler.clear(); game.scene.getEnemyParty().forEach(p => { @@ -369,7 +369,7 @@ async function skipBattleToNextBattle(game: GameManager, isFinalBattle = false) game.scene.field.remove(p); }); game.phaseInterceptor["onHold"] = []; - game.scene.pushPhase(new VictoryPhase(0)); + game.scene.phaseManager.pushPhase(new VictoryPhase(0)); game.phaseInterceptor.superEndPhase(); if (isFinalBattle) { await game.phaseInterceptor.to(MysteryEncounterRewardsPhase); diff --git a/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts b/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts index 94011b4b01d..999936c8832 100644 --- a/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts +++ b/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts @@ -173,7 +173,7 @@ describe("Trash to Treasure - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.TRASH_TO_TREASURE, defaultParty); await runMysteryEncounterToEnd(game, 1); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); const leftovers = scene.findModifier(m => m instanceof TurnHealModifier) as TurnHealModifier; expect(leftovers).toBeDefined(); @@ -215,13 +215,13 @@ describe("Trash to Treasure - Mystery Encounter", () => { }); it("should start battle against Garbodor", async () => { - const phaseSpy = vi.spyOn(scene, "pushPhase"); + const phaseSpy = vi.spyOn(scene.phaseManager, "pushPhase"); await game.runToMysteryEncounter(MysteryEncounterType.TRASH_TO_TREASURE, defaultParty); await runMysteryEncounterToEnd(game, 2, undefined, true); const enemyField = scene.getEnemyField(); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(SpeciesId.GARBODOR); expect(enemyField[0].moveset).toEqual([ @@ -243,7 +243,7 @@ describe("Trash to Treasure - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 2, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); diff --git a/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts b/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts index 4fb0a231853..0c3131de1d2 100644 --- a/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts +++ b/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts @@ -113,8 +113,8 @@ describe("Uncommon Breed - Mystery Encounter", () => { }); it.skip("should start a fight against the boss below wave 50", async () => { - const phaseSpy = vi.spyOn(scene, "pushPhase"); - const unshiftPhaseSpy = vi.spyOn(scene, "unshiftPhase"); + const phaseSpy = vi.spyOn(scene.phaseManager, "pushPhase"); + const unshiftPhaseSpy = vi.spyOn(scene.phaseManager, "unshiftPhase"); await game.runToMysteryEncounter(MysteryEncounterType.UNCOMMON_BREED, defaultParty); const config = game.scene.currentBattle.mysteryEncounter!.enemyPartyConfigs[0]; @@ -123,7 +123,7 @@ describe("Uncommon Breed - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyField = scene.getEnemyField(); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(speciesToSpawn); @@ -140,8 +140,8 @@ describe("Uncommon Breed - Mystery Encounter", () => { it.skip("should start a fight against the boss above wave 50", async () => { game.override.startingWave(57); - const phaseSpy = vi.spyOn(scene, "pushPhase"); - const unshiftPhaseSpy = vi.spyOn(scene, "unshiftPhase"); + const phaseSpy = vi.spyOn(scene.phaseManager, "pushPhase"); + const unshiftPhaseSpy = vi.spyOn(scene.phaseManager, "unshiftPhase"); await game.runToMysteryEncounter(MysteryEncounterType.UNCOMMON_BREED, defaultParty); const config = game.scene.currentBattle.mysteryEncounter!.enemyPartyConfigs[0]; @@ -150,7 +150,7 @@ describe("Uncommon Breed - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyField = scene.getEnemyField(); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(speciesToSpawn); @@ -193,7 +193,7 @@ describe("Uncommon Breed - Mystery Encounter", () => { await scene.updateModifiers(true); await game.phaseInterceptor.to(MysteryEncounterPhase, false); - const encounterPhase = scene.getCurrentPhase(); + const encounterPhase = scene.phaseManager.getCurrentPhase(); expect(encounterPhase?.constructor.name).toBe(MysteryEncounterPhase.name); const mysteryEncounterPhase = encounterPhase as MysteryEncounterPhase; vi.spyOn(mysteryEncounterPhase, "continueEncounter"); @@ -202,7 +202,7 @@ describe("Uncommon Breed - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 2); - expect(scene.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); @@ -253,7 +253,7 @@ describe("Uncommon Breed - Mystery Encounter", () => { scene.getPlayerParty().forEach(p => (p.moveset = [])); await game.phaseInterceptor.to(MysteryEncounterPhase, false); - const encounterPhase = scene.getCurrentPhase(); + const encounterPhase = scene.phaseManager.getCurrentPhase(); expect(encounterPhase?.constructor.name).toBe(MysteryEncounterPhase.name); const mysteryEncounterPhase = encounterPhase as MysteryEncounterPhase; vi.spyOn(mysteryEncounterPhase, "continueEncounter"); @@ -262,7 +262,7 @@ describe("Uncommon Breed - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 3); - expect(scene.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); diff --git a/test/mystery-encounter/encounters/weird-dream-encounter.test.ts b/test/mystery-encounter/encounters/weird-dream-encounter.test.ts index 163a15a715f..2ad74b48540 100644 --- a/test/mystery-encounter/encounters/weird-dream-encounter.test.ts +++ b/test/mystery-encounter/encounters/weird-dream-encounter.test.ts @@ -118,7 +118,7 @@ describe("Weird Dream - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); const pokemonAfter = scene.getPlayerParty(); const bstsAfter = pokemonAfter.map(pokemon => pokemon.getSpeciesForm().getBaseStatTotal()); @@ -141,7 +141,7 @@ describe("Weird Dream - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.WEIRD_DREAM, defaultParty); await runMysteryEncounterToEnd(game, 1); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -187,7 +187,7 @@ describe("Weird Dream - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 2, undefined, true); const enemyField = scene.getEnemyField(); - expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyField.length).toBe(1); expect(scene.getEnemyParty().length).toBe(scene.getPlayerParty().length); }); @@ -197,7 +197,7 @@ describe("Weird Dream - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 2, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); diff --git a/test/mystery-encounter/mystery-encounter-utils.test.ts b/test/mystery-encounter/mystery-encounter-utils.test.ts index cd29a203e62..80e2fb77f2b 100644 --- a/test/mystery-encounter/mystery-encounter-utils.test.ts +++ b/test/mystery-encounter/mystery-encounter-utils.test.ts @@ -291,8 +291,8 @@ describe("Mystery Encounter Utils", () => { it("queues a message with encounter dialogue tokens", async () => { scene.currentBattle.mysteryEncounter = new MysteryEncounter(null); scene.currentBattle.mysteryEncounter.setDialogueToken("test", "value"); - const spy = vi.spyOn(game.scene, "queueMessage"); - const phaseSpy = vi.spyOn(game.scene, "unshiftPhase"); + const spy = vi.spyOn(game.scene.phaseManager, "queueMessage"); + const phaseSpy = vi.spyOn(game.scene.phaseManager, "unshiftPhase"); queueEncounterMessage("mysteryEncounter:unit_test_dialogue"); expect(spy).toHaveBeenCalledWith("mysteryEncounter:unit_test_dialogue", null, true); diff --git a/test/mystery-encounter/mystery-encounter.test.ts b/test/mystery-encounter/mystery-encounter.test.ts index 19dd17d5381..1f1d0f5826e 100644 --- a/test/mystery-encounter/mystery-encounter.test.ts +++ b/test/mystery-encounter/mystery-encounter.test.ts @@ -35,7 +35,7 @@ describe("Mystery Encounters", () => { ]); await game.phaseInterceptor.to(MysteryEncounterPhase, false); - expect(game.scene.getCurrentPhase()!.constructor.name).toBe(MysteryEncounterPhase.name); + expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(MysteryEncounterPhase.name); }); it("Encounters should not run below wave 10", async () => { diff --git a/test/phases/mystery-encounter-phase.test.ts b/test/phases/mystery-encounter-phase.test.ts index ece5a221e00..d078c2398b4 100644 --- a/test/phases/mystery-encounter-phase.test.ts +++ b/test/phases/mystery-encounter-phase.test.ts @@ -41,7 +41,7 @@ describe("Mystery Encounter Phases", () => { ]); await game.phaseInterceptor.to(MysteryEncounterPhase, false); - expect(game.scene.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(game.scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); }); it("Runs MysteryEncounterPhase", async () => { @@ -87,7 +87,9 @@ describe("Mystery Encounter Phases", () => { // Waitfor required so that option select messages and preOptionPhase logic are handled await vi.waitFor(() => - expect(game.scene.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterOptionSelectedPhase.name), + expect(game.scene.phaseManager.getCurrentPhase()?.constructor.name).toBe( + MysteryEncounterOptionSelectedPhase.name, + ), ); expect(ui.getMode()).toBe(UiMode.MESSAGE); expect(ui.showDialogue).toHaveBeenCalledTimes(1); diff --git a/test/phases/phases.test.ts b/test/phases/phases.test.ts index 2483cfb317f..8f7b1a1ea66 100644 --- a/test/phases/phases.test.ts +++ b/test/phases/phases.test.ts @@ -30,7 +30,7 @@ describe("Phases", () => { describe("LoginPhase", () => { it("should start the login phase", async () => { const loginPhase = new LoginPhase(); - scene.unshiftPhase(loginPhase); + scene.phaseManager.unshiftPhase(loginPhase); await game.phaseInterceptor.to(LoginPhase); expect(scene.ui.getMode()).to.equal(UiMode.MESSAGE); }); @@ -39,7 +39,7 @@ describe("Phases", () => { describe("TitlePhase", () => { it("should start the title phase", async () => { const titlePhase = new TitlePhase(); - scene.unshiftPhase(titlePhase); + scene.phaseManager.unshiftPhase(titlePhase); await game.phaseInterceptor.to(TitlePhase); expect(scene.ui.getMode()).to.equal(UiMode.TITLE); }); @@ -48,7 +48,7 @@ describe("Phases", () => { describe("UnavailablePhase", () => { it("should start the unavailable phase", async () => { const unavailablePhase = new UnavailablePhase(); - scene.unshiftPhase(unavailablePhase); + scene.phaseManager.unshiftPhase(unavailablePhase); await game.phaseInterceptor.to(UnavailablePhase); expect(scene.ui.getMode()).to.equal(UiMode.UNAVAILABLE); }, 20000); diff --git a/test/phases/select-modifier-phase.test.ts b/test/phases/select-modifier-phase.test.ts index 72496d5f17b..083b7d16f10 100644 --- a/test/phases/select-modifier-phase.test.ts +++ b/test/phases/select-modifier-phase.test.ts @@ -48,7 +48,7 @@ describe("SelectModifierPhase", () => { it("should start a select modifier phase", async () => { initSceneWithoutEncounterPhase(scene, [SpeciesId.ABRA, SpeciesId.VOLCARONA]); const selectModifierPhase = new SelectModifierPhase(); - scene.unshiftPhase(selectModifierPhase); + scene.phaseManager.unshiftPhase(selectModifierPhase); await game.phaseInterceptor.to(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -96,7 +96,7 @@ describe("SelectModifierPhase", () => { await game.phaseInterceptor.to("SelectModifierPhase"); // TODO: nagivate the ui to reroll somehow - //const smphase = scene.getCurrentPhase() as SelectModifierPhase; + //const smphase = scene.phaseManager.getCurrentPhase() as SelectModifierPhase; expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( h => h instanceof ModifierSelectUiHandler, @@ -164,7 +164,7 @@ describe("SelectModifierPhase", () => { ], }; const selectModifierPhase = new SelectModifierPhase(0, undefined, customModifiers); - scene.unshiftPhase(selectModifierPhase); + scene.phaseManager.unshiftPhase(selectModifierPhase); game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("SelectModifierPhase"); @@ -201,7 +201,7 @@ describe("SelectModifierPhase", () => { scene.getPlayerParty().push(pokemon, pokemon, pokemon, pokemon, pokemon, pokemon); const selectModifierPhase = new SelectModifierPhase(0, undefined, customModifiers); - scene.unshiftPhase(selectModifierPhase); + scene.phaseManager.unshiftPhase(selectModifierPhase); game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("SelectModifierPhase"); @@ -240,7 +240,7 @@ describe("SelectModifierPhase", () => { guaranteedModifierTiers: [ModifierTier.MASTER, ModifierTier.MASTER], }; const selectModifierPhase = new SelectModifierPhase(0, undefined, customModifiers); - scene.unshiftPhase(selectModifierPhase); + scene.phaseManager.unshiftPhase(selectModifierPhase); game.move.select(MoveId.SPLASH); await game.phaseInterceptor.run(SelectModifierPhase); @@ -264,7 +264,7 @@ describe("SelectModifierPhase", () => { fillRemaining: true, }; const selectModifierPhase = new SelectModifierPhase(0, undefined, customModifiers); - scene.unshiftPhase(selectModifierPhase); + scene.phaseManager.unshiftPhase(selectModifierPhase); game.move.select(MoveId.SPLASH); await game.phaseInterceptor.run(SelectModifierPhase); diff --git a/test/testUtils/gameManager.ts b/test/testUtils/gameManager.ts index 68d218b3988..edf0301447d 100644 --- a/test/testUtils/gameManager.ts +++ b/test/testUtils/gameManager.ts @@ -101,13 +101,13 @@ export default class GameManager { if (!firstTimeScene) { this.scene.reset(false, true); (this.scene.ui.handlers[UiMode.STARTER_SELECT] as StarterSelectUiHandler).clearStarterPreferences(); - this.scene.clearAllPhases(); + this.scene.phaseManager.clearAllPhases(); // Must be run after phase interceptor has been initialized. - this.scene.pushPhase(new LoginPhase()); - this.scene.pushPhase(new TitlePhase()); - this.scene.shiftPhase(); + this.scene.phaseManager.pushPhase(new LoginPhase()); + this.scene.phaseManager.pushPhase(new TitlePhase()); + this.scene.phaseManager.shiftPhase(); this.gameWrapper.scene = this.scene; } @@ -154,7 +154,7 @@ export default class GameManager { * Ends the current phase. */ endPhase() { - this.scene.getCurrentPhase()?.end(); + this.scene.phaseManager.getCurrentPhase()?.end(); } /** @@ -211,7 +211,7 @@ export default class GameManager { this.scene.gameMode = getGameMode(mode); const starters = generateStarter(this.scene, species); const selectStarterPhase = new SelectStarterPhase(); - this.scene.pushPhase(new EncounterPhase(false)); + this.scene.phaseManager.pushPhase(new EncounterPhase(false)); selectStarterPhase.initBattle(starters); }); @@ -247,7 +247,7 @@ export default class GameManager { this.scene.gameMode = getGameMode(GameModes.CLASSIC); const starters = generateStarter(this.scene, species); const selectStarterPhase = new SelectStarterPhase(); - this.scene.pushPhase(new EncounterPhase(false)); + this.scene.phaseManager.pushPhase(new EncounterPhase(false)); selectStarterPhase.initBattle(starters); }, () => this.isCurrentPhase(EncounterPhase), @@ -282,7 +282,7 @@ export default class GameManager { UiMode.TARGET_SELECT, () => { const handler = this.scene.ui.getHandler() as TargetSelectUiHandler; - const move = (this.scene.getCurrentPhase() as SelectTargetPhase) + const move = (this.scene.phaseManager.getCurrentPhase() as SelectTargetPhase) .getPokemon() .getMoveset() [movePosition].getMove(); @@ -397,7 +397,7 @@ export default class GameManager { */ isCurrentPhase(phaseTarget) { const targetName = typeof phaseTarget === "string" ? phaseTarget : phaseTarget.name; - return this.scene.getCurrentPhase()?.constructor.name === targetName; + return this.scene.phaseManager.getCurrentPhase()?.constructor.name === targetName; } /** @@ -449,7 +449,7 @@ export default class GameManager { async killPokemon(pokemon: PlayerPokemon | EnemyPokemon) { return new Promise(async (resolve, reject) => { pokemon.hp = 0; - this.scene.pushPhase(new FaintPhase(pokemon.getBattlerIndex(), true)); + this.scene.phaseManager.pushPhase(new FaintPhase(pokemon.getBattlerIndex(), true)); await this.phaseInterceptor.to(FaintPhase).catch(e => reject(e)); resolve(); }); @@ -529,7 +529,7 @@ export default class GameManager { async setTurnOrder(order: BattlerIndex[]): Promise { await this.phaseInterceptor.to(TurnStartPhase, false); - vi.spyOn(this.scene.getCurrentPhase() as TurnStartPhase, "getSpeedOrder").mockReturnValue(order); + vi.spyOn(this.scene.phaseManager.getCurrentPhase() as TurnStartPhase, "getSpeedOrder").mockReturnValue(order); } /** diff --git a/test/testUtils/helpers/challengeModeHelper.ts b/test/testUtils/helpers/challengeModeHelper.ts index d0533d3b5ba..f0b4b151d22 100644 --- a/test/testUtils/helpers/challengeModeHelper.ts +++ b/test/testUtils/helpers/challengeModeHelper.ts @@ -45,7 +45,7 @@ export class ChallengeModeHelper extends GameManagerHelper { this.game.scene.gameMode.challenges = this.challenges; const starters = generateStarter(this.game.scene, species); const selectStarterPhase = new SelectStarterPhase(); - this.game.scene.pushPhase(new EncounterPhase(false)); + this.game.scene.phaseManager.pushPhase(new EncounterPhase(false)); selectStarterPhase.initBattle(starters); }); diff --git a/test/testUtils/helpers/classicModeHelper.ts b/test/testUtils/helpers/classicModeHelper.ts index d5f0ceb4072..575000c2193 100644 --- a/test/testUtils/helpers/classicModeHelper.ts +++ b/test/testUtils/helpers/classicModeHelper.ts @@ -30,7 +30,7 @@ export class ClassicModeHelper extends GameManagerHelper { this.game.scene.gameMode = getGameMode(GameModes.CLASSIC); const starters = generateStarter(this.game.scene, species); const selectStarterPhase = new SelectStarterPhase(); - this.game.scene.pushPhase(new EncounterPhase(false)); + this.game.scene.phaseManager.pushPhase(new EncounterPhase(false)); selectStarterPhase.initBattle(starters); }); diff --git a/test/testUtils/helpers/moveHelper.ts b/test/testUtils/helpers/moveHelper.ts index 02b1efd837f..878a265ce84 100644 --- a/test/testUtils/helpers/moveHelper.ts +++ b/test/testUtils/helpers/moveHelper.ts @@ -23,7 +23,7 @@ export class MoveHelper extends GameManagerHelper { */ public async forceHit(): Promise { await this.game.phaseInterceptor.to(MoveEffectPhase, false); - const moveEffectPhase = this.game.scene.getCurrentPhase() as MoveEffectPhase; + const moveEffectPhase = this.game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase; vi.spyOn(moveEffectPhase.move, "calculateBattleAccuracy").mockReturnValue(-1); } @@ -34,7 +34,7 @@ export class MoveHelper extends GameManagerHelper { */ public async forceMiss(firstTargetOnly = false): Promise { await this.game.phaseInterceptor.to(MoveEffectPhase, false); - const moveEffectPhase = this.game.scene.getCurrentPhase() as MoveEffectPhase; + const moveEffectPhase = this.game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase; const accuracy = vi.spyOn(moveEffectPhase.move, "calculateBattleAccuracy"); if (firstTargetOnly) { @@ -54,10 +54,17 @@ export class MoveHelper extends GameManagerHelper { const movePosition = getMovePosition(this.game.scene, pkmIndex, move); this.game.onNextPrompt("CommandPhase", UiMode.COMMAND, () => { - this.game.scene.ui.setMode(UiMode.FIGHT, (this.game.scene.getCurrentPhase() as CommandPhase).getFieldIndex()); + this.game.scene.ui.setMode( + UiMode.FIGHT, + (this.game.scene.phaseManager.getCurrentPhase() as CommandPhase).getFieldIndex(), + ); }); this.game.onNextPrompt("CommandPhase", UiMode.FIGHT, () => { - (this.game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, movePosition, false); + (this.game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand( + Command.FIGHT, + movePosition, + false, + ); }); if (targetIndex !== null) { @@ -79,12 +86,12 @@ export class MoveHelper extends GameManagerHelper { this.game.onNextPrompt("CommandPhase", UiMode.COMMAND, () => { this.game.scene.ui.setMode( UiMode.FIGHT, - (this.game.scene.getCurrentPhase() as CommandPhase).getFieldIndex(), + (this.game.scene.phaseManager.getCurrentPhase() as CommandPhase).getFieldIndex(), Command.TERA, ); }); this.game.onNextPrompt("CommandPhase", UiMode.FIGHT, () => { - (this.game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.TERA, movePosition, false); + (this.game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(Command.TERA, movePosition, false); }); if (targetIndex !== null) { @@ -171,7 +178,9 @@ export class MoveHelper extends GameManagerHelper { // Wait for the next EnemyCommandPhase to start await this.game.phaseInterceptor.to("EnemyCommandPhase", false); const enemy = - this.game.scene.getEnemyField()[(this.game.scene.getCurrentPhase() as EnemyCommandPhase).getFieldIndex()]; + this.game.scene.getEnemyField()[ + (this.game.scene.phaseManager.getCurrentPhase() as EnemyCommandPhase).getFieldIndex() + ]; const legalTargets = getMoveTargets(enemy, moveId); vi.spyOn(enemy, "getNextMove").mockReturnValueOnce({ @@ -205,7 +214,9 @@ export class MoveHelper extends GameManagerHelper { await this.game.phaseInterceptor.to("EnemyCommandPhase", false); const enemy = - this.game.scene.getEnemyField()[(this.game.scene.getCurrentPhase() as EnemyCommandPhase).getFieldIndex()]; + this.game.scene.getEnemyField()[ + (this.game.scene.phaseManager.getCurrentPhase() as EnemyCommandPhase).getFieldIndex() + ]; if ([Overrides.OPP_MOVESET_OVERRIDE].flat().length > 0) { vi.spyOn(Overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([]); diff --git a/test/testUtils/helpers/reloadHelper.ts b/test/testUtils/helpers/reloadHelper.ts index 4a9e5356968..4f9d6c810f8 100644 --- a/test/testUtils/helpers/reloadHelper.ts +++ b/test/testUtils/helpers/reloadHelper.ts @@ -35,7 +35,7 @@ export class ReloadHelper extends GameManagerHelper { const scene = this.game.scene; const titlePhase = new TitlePhase(); - scene.clearPhaseQueue(); + scene.phaseManager.clearPhaseQueue(); // Set the last saved session to the desired session data vi.spyOn(scene.gameData, "getSession").mockReturnValue( @@ -43,7 +43,7 @@ export class ReloadHelper extends GameManagerHelper { resolve(this.sessionData); }), ); - scene.unshiftPhase(titlePhase); + scene.phaseManager.unshiftPhase(titlePhase); this.game.endPhase(); // End the currently ongoing battle // remove all persistent mods before loading diff --git a/test/testUtils/phaseInterceptor.ts b/test/testUtils/phaseInterceptor.ts index b7577550568..34fba2c145d 100644 --- a/test/testUtils/phaseInterceptor.ts +++ b/test/testUtils/phaseInterceptor.ts @@ -301,7 +301,7 @@ export default class PhaseInterceptor { pop() { this.onHold.pop(); - this.scene.shiftPhase(); + this.scene.phaseManager.shiftPhase(); } /** @@ -316,7 +316,7 @@ export default class PhaseInterceptor { shift(shouldRun = false): void { this.onHold.shift(); if (shouldRun) { - this.scene.shiftPhase(); + this.scene.phaseManager.shiftPhase(); } } @@ -345,7 +345,7 @@ export default class PhaseInterceptor { */ startPhase(phase: PhaseClass) { this.log.push(phase.name); - const instance = this.scene.getCurrentPhase(); + const instance = this.scene.phaseManager.getCurrentPhase(); this.onHold.push({ name: phase.name, call: () => { @@ -364,7 +364,7 @@ export default class PhaseInterceptor { * @param phase - The phase to start. */ superEndPhase() { - const instance = this.scene.getCurrentPhase(); + const instance = this.scene.phaseManager.getCurrentPhase(); this.originalSuperEnd.apply(instance); this.inProgress?.callback(); this.inProgress = undefined; @@ -376,7 +376,7 @@ export default class PhaseInterceptor { * @param args - Additional arguments to pass to the original method. */ setMode(mode: UiMode, ...args: unknown[]): Promise { - const currentPhase = this.scene.getCurrentPhase(); + const currentPhase = this.scene.phaseManager.getCurrentPhase(); const instance = this.scene.ui; console.log("setMode", `${UiMode[mode]} (=${mode})`, args); const ret = this.originalSetMode.apply(instance, [mode, ...args]); @@ -413,7 +413,7 @@ export default class PhaseInterceptor { const actionForNextPrompt = this.prompts[0]; const expireFn = actionForNextPrompt.expireFn?.(); const currentMode = this.scene.ui.getMode(); - const currentPhase = this.scene.getCurrentPhase()?.constructor.name; + const currentPhase = this.scene.phaseManager.getCurrentPhase()?.constructor.name; const currentHandler = this.scene.ui.getHandler(); if (expireFn) { this.prompts.shift(); diff --git a/test/ui/starter-select.test.ts b/test/ui/starter-select.test.ts index 10a804b805d..2884323b4ea 100644 --- a/test/ui/starter-select.test.ts +++ b/test/ui/starter-select.test.ts @@ -45,7 +45,7 @@ describe("UI - Starter select", () => { expect(caughtCount).toBe(Object.keys(allSpecies).length); await game.runToTitle(); game.onNextPrompt("TitlePhase", UiMode.TITLE, () => { - const currentPhase = game.scene.getCurrentPhase() as TitlePhase; + const currentPhase = game.scene.phaseManager.getCurrentPhase() as TitlePhase; currentPhase.gameMode = GameModes.CLASSIC; currentPhase.end(); }); @@ -105,7 +105,7 @@ describe("UI - Starter select", () => { expect(caughtCount).toBe(Object.keys(allSpecies).length); await game.runToTitle(); game.onNextPrompt("TitlePhase", UiMode.TITLE, () => { - const currentPhase = game.scene.getCurrentPhase() as TitlePhase; + const currentPhase = game.scene.phaseManager.getCurrentPhase() as TitlePhase; currentPhase.gameMode = GameModes.CLASSIC; currentPhase.end(); }); @@ -167,7 +167,7 @@ describe("UI - Starter select", () => { expect(caughtCount).toBe(Object.keys(allSpecies).length); await game.runToTitle(); game.onNextPrompt("TitlePhase", UiMode.TITLE, () => { - const currentPhase = game.scene.getCurrentPhase() as TitlePhase; + const currentPhase = game.scene.phaseManager.getCurrentPhase() as TitlePhase; currentPhase.gameMode = GameModes.CLASSIC; currentPhase.end(); }); @@ -232,7 +232,7 @@ describe("UI - Starter select", () => { expect(caughtCount).toBe(Object.keys(allSpecies).length); await game.runToTitle(); game.onNextPrompt("TitlePhase", UiMode.TITLE, () => { - const currentPhase = game.scene.getCurrentPhase() as TitlePhase; + const currentPhase = game.scene.phaseManager.getCurrentPhase() as TitlePhase; currentPhase.gameMode = GameModes.CLASSIC; currentPhase.end(); }); @@ -293,7 +293,7 @@ describe("UI - Starter select", () => { expect(caughtCount).toBe(Object.keys(allSpecies).length); await game.runToTitle(); game.onNextPrompt("TitlePhase", UiMode.TITLE, () => { - const currentPhase = game.scene.getCurrentPhase() as TitlePhase; + const currentPhase = game.scene.phaseManager.getCurrentPhase() as TitlePhase; currentPhase.gameMode = GameModes.CLASSIC; currentPhase.end(); }); @@ -353,7 +353,7 @@ describe("UI - Starter select", () => { expect(caughtCount).toBe(Object.keys(allSpecies).length); await game.runToTitle(); game.onNextPrompt("TitlePhase", UiMode.TITLE, () => { - const currentPhase = game.scene.getCurrentPhase() as TitlePhase; + const currentPhase = game.scene.phaseManager.getCurrentPhase() as TitlePhase; currentPhase.gameMode = GameModes.CLASSIC; currentPhase.end(); }); @@ -415,7 +415,7 @@ describe("UI - Starter select", () => { expect(caughtCount).toBe(Object.keys(allSpecies).length); await game.runToTitle(); game.onNextPrompt("TitlePhase", UiMode.TITLE, () => { - const currentPhase = game.scene.getCurrentPhase() as TitlePhase; + const currentPhase = game.scene.phaseManager.getCurrentPhase() as TitlePhase; currentPhase.gameMode = GameModes.CLASSIC; currentPhase.end(); }); @@ -476,7 +476,7 @@ describe("UI - Starter select", () => { expect(caughtCount).toBe(Object.keys(allSpecies).length); await game.runToTitle(); game.onNextPrompt("TitlePhase", UiMode.TITLE, () => { - const currentPhase = game.scene.getCurrentPhase() as TitlePhase; + const currentPhase = game.scene.phaseManager.getCurrentPhase() as TitlePhase; currentPhase.gameMode = GameModes.CLASSIC; currentPhase.end(); }); @@ -540,7 +540,7 @@ describe("UI - Starter select", () => { expect(caughtCount).toBe(Object.keys(allSpecies).length); await game.runToTitle(); game.onNextPrompt("TitlePhase", UiMode.TITLE, () => { - const currentPhase = game.scene.getCurrentPhase() as TitlePhase; + const currentPhase = game.scene.phaseManager.getCurrentPhase() as TitlePhase; currentPhase.gameMode = GameModes.CLASSIC; currentPhase.end(); }); From 09e30070f904c7993fa621a924fb057546591233 Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Sat, 7 Jun 2025 21:02:25 -0400 Subject: [PATCH 217/262] [Docs] Fixed test helper functions to conform with TSDoc standard; deprecated `runToSummon`/`startBattle` without args (#5912) * Updated doc comments for test-related functions * Marked `classicMode.runToSummon` and `classicMode.startBattle` without species as deprecated Having the species being used depend on daily run RNG is both unintuitive, janky and prone to flaking out (as happened with the Gastro Acid tests) * Fixed the bug * Update field-helper.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- test/testUtils/helpers/classicModeHelper.ts | 25 ++++++++++++++--- test/testUtils/helpers/field-helper.ts | 30 +++++++++++---------- test/testUtils/helpers/moveHelper.ts | 26 +++++++++++------- 3 files changed, 55 insertions(+), 26 deletions(-) diff --git a/test/testUtils/helpers/classicModeHelper.ts b/test/testUtils/helpers/classicModeHelper.ts index 575000c2193..c4f086bd628 100644 --- a/test/testUtils/helpers/classicModeHelper.ts +++ b/test/testUtils/helpers/classicModeHelper.ts @@ -11,14 +11,24 @@ import { generateStarter } from "../gameManagerUtils"; import { GameManagerHelper } from "./gameManagerHelper"; /** - * Helper to handle classic mode specifics + * Helper to handle classic-mode specific operations. */ export class ClassicModeHelper extends GameManagerHelper { /** * Runs the classic game to the summon phase. - * @param species - Optional array of species to summon. + * @param species - An array of {@linkcode Species} to summon. * @returns A promise that resolves when the summon phase is reached. */ + async runToSummon(species: SpeciesId[]): Promise; + /** + * Runs the classic game to the summon phase. + * Selects 3 daily run starters with a fixed seed of "test" + * (see `DailyRunConfig.getDailyRunStarters` in `daily-run.ts` for more info). + * @returns A promise that resolves when the summon phase is reached. + * @deprecated - Specifying the starters helps prevent inconsistencies from internal RNG changes. + */ + async runToSummon(): Promise; + async runToSummon(species: SpeciesId[] | undefined): Promise; async runToSummon(species?: SpeciesId[]): Promise { await this.game.runToTitle(); @@ -42,9 +52,18 @@ export class ClassicModeHelper extends GameManagerHelper { /** * Transitions to the start of a battle. - * @param species - Optional array of species to start the battle with. + * @param species - An array of {@linkcode Species} to start the battle with. * @returns A promise that resolves when the battle is started. */ + async startBattle(species: SpeciesId[]): Promise; + /** + * Transitions to the start of a battle. + * Will select 3 daily run starters with a fixed seed of "test" + * (see `DailyRunConfig.getDailyRunStarters` in `daily-run.ts` for more info). + * @returns A promise that resolves when the battle is started. + * @deprecated - Specifying the starters helps prevent inconsistencies from internal RNG changes. + */ + async startBattle(): Promise; async startBattle(species?: SpeciesId[]): Promise { await this.runToSummon(species); diff --git a/test/testUtils/helpers/field-helper.ts b/test/testUtils/helpers/field-helper.ts index 08b7a210e68..aa01ef7497d 100644 --- a/test/testUtils/helpers/field-helper.ts +++ b/test/testUtils/helpers/field-helper.ts @@ -20,9 +20,9 @@ export class FieldHelper extends GameManagerHelper { * Passthrough for {@linkcode globalScene.getPlayerPokemon} that adds an `undefined` check for * the Pokemon so that the return type for the function doesn't have `undefined`. * This removes the need to add a `!` like when calling `game.scene.getPlayerPokemon()!`. - * @param includeSwitching Whether a pokemon that is currently switching out is valid, default `true` - * @returns The first {@linkcode PlayerPokemon} that is {@linkcode globalScene.getPlayerField on the field} - * and {@linkcode PlayerPokemon.isActive is active} + * @param includeSwitching - Whether a pokemon that is currently switching out is valid, default `true` + * @returns The first {@linkcode PlayerPokemon} that is {@linkcode globalScene.getPlayerField | on the field} + * and {@linkcode PlayerPokemon.isActive | is active} * (aka {@linkcode PlayerPokemon.isAllowedInBattle is allowed in battle}). */ public getPlayerPokemon(includeSwitching = true): PlayerPokemon { @@ -36,9 +36,9 @@ export class FieldHelper extends GameManagerHelper { * the Pokemon so that the return type for the function doesn't have `undefined`. * This removes the need to add a `!` like when calling `game.scene.getEnemyPokemon()!`. * @param includeSwitching Whether a pokemon that is currently switching out is valid, default `true` - * @returns The first {@linkcode EnemyPokemon} that is {@linkcode globalScene.getEnemyField on the field} - * and {@linkcode EnemyPokemon.isActive is active} - * (aka {@linkcode EnemyPokemon.isAllowedInBattle is allowed in battle}). + * @returns The first {@linkcode EnemyPokemon} that is {@linkcode globalScene.getEnemyField | on the field} + * and {@linkcode EnemyPokemon.isActive | is active} + * (aka {@linkcode EnemyPokemon.isAllowedInBattle | is allowed in battle}). */ public getEnemyPokemon(includeSwitching = true): EnemyPokemon { const pokemon = this.game.scene.getEnemyPokemon(includeSwitching); @@ -50,7 +50,9 @@ export class FieldHelper extends GameManagerHelper { * @returns The {@linkcode BattlerIndex | indexes} of Pokemon on the field in order of decreasing Speed. * Speed ties are returned in increasing order of index. * - * Note: Trick Room does not modify the speed of Pokemon on the field. + * @remarks + * This does not account for Trick Room as it does not modify the _speed_ of Pokemon on the field, + * only their turn order. */ public getSpeedOrder(): BattlerIndex[] { return this.game.scene @@ -60,7 +62,8 @@ export class FieldHelper extends GameManagerHelper { } /** - * Mocks a pokemon's ability, overriding its existing ability (takes precedence over global overrides) + * Mocks a pokemon's ability, overriding its existing ability (takes precedence over global overrides). + * Useful for giving exactly 1 Pokemon in a double battle a certain ability (rather than all pokemon). * @param pokemon - The pokemon to mock the ability of * @param ability - The ability to be mocked * @returns A {@linkcode MockInstance} object @@ -72,16 +75,15 @@ export class FieldHelper extends GameManagerHelper { } /** - * Forces a pokemon to be terastallized. Defaults to the pokemon's primary type if not specified. - * - * This function only mocks the Pokemon's tera-related variables; it does NOT activate any tera-related abilities. + * Force a given Pokemon to be terastallized to the given type. * * @param pokemon - The pokemon to terastallize. - * @param teraType - (optional) The {@linkcode PokemonType} to terastallize it as. + * @param teraType - The {@linkcode PokemonType} to terastallize into; defaults to the pokemon's primary type. + * @remarks + * This function only mocks the Pokemon's tera-related variables; it does NOT activate any tera-related abilities. */ - public forceTera(pokemon: Pokemon, teraType?: PokemonType): void { + public forceTera(pokemon: Pokemon, teraType: PokemonType = pokemon.getSpeciesForm(true).type1): void { vi.spyOn(pokemon, "isTerastallized", "get").mockReturnValue(true); - teraType ??= pokemon.getSpeciesForm(true).type1; vi.spyOn(pokemon, "teraType", "get").mockReturnValue(teraType); } } diff --git a/test/testUtils/helpers/moveHelper.ts b/test/testUtils/helpers/moveHelper.ts index 878a265ce84..c7dea05b095 100644 --- a/test/testUtils/helpers/moveHelper.ts +++ b/test/testUtils/helpers/moveHelper.ts @@ -154,7 +154,7 @@ export class MoveHelper extends GameManagerHelper { * Changes a pokemon's moveset to the given move(s). * Used when the normal moveset override can't be used (such as when it's necessary to check or update properties of the moveset). * @param pokemon - The {@linkcode Pokemon} being modified - * @param moveset - The {@linkcode MoveId} (single or array) to change the Pokemon's moveset to + * @param moveset - The {@linkcode MoveId} (single or array) to change the Pokemon's moveset to. */ public changeMoveset(pokemon: Pokemon, moveset: MoveId | MoveId[]): void { if (!Array.isArray(moveset)) { @@ -169,10 +169,14 @@ export class MoveHelper extends GameManagerHelper { } /** - * Forces the next enemy selecting a move to use the given move in its moveset + * Forces the next enemy selecting a move to use the given move _in its moveset_ * against the given target (if applicable). - * @param moveId The {@linkcode MoveId | move} the enemy will use - * @param target (Optional) the {@linkcode BattlerIndex | target} which the enemy will use the given move against + * @param moveId - The {@linkcode Move | move ID} the enemy will be forced to use. + * @param target - The {@linkcode BattlerIndex | target} against which the enemy will use the given move; + * defaults to normal target selection priorities if omitted or not single-target. + * @remarks + * If you do not need to check for changes in the enemy's moveset as part of the test, it may be + * best to use {@linkcode forceEnemyMove} instead. */ public async selectEnemyMove(moveId: MoveId, target?: BattlerIndex) { // Wait for the next EnemyCommandPhase to start @@ -200,14 +204,18 @@ export class MoveHelper extends GameManagerHelper { } /** - * Forces the next enemy selecting a move to use the given move against the given target (if applicable). + * Modify the moveset of the next enemy selecting a move to contain only the given move, and then + * selects it to be used during the next {@linkcode EnemyCommandPhase} against the given targets. * - * Warning: Overwrites the pokemon's moveset and disables the moveset override! + * Does not require the given move to be in the enemy's moveset beforehand, + * but **overwrites the pokemon's moveset** and **disables any prior moveset overrides**! * - * Note: If you need to check for changes in the enemy's moveset as part of the test, it may be + * @param moveId - The {@linkcode Move | move ID} the enemy will be forced to use. + * @param target - The {@linkcode BattlerIndex | target} against which the enemy will use the given move; + * defaults to normal target selection priorities if omitted or not single-target. + * @remarks + * If you need to check for changes in the enemy's moveset as part of the test, it may be * best to use {@linkcode changeMoveset} and {@linkcode selectEnemyMove} instead. - * @param moveId The {@linkcode MoveId | move} the enemy will use - * @param target (Optional) the {@linkcode BattlerIndex | target} which the enemy will use the given move against */ public async forceEnemyMove(moveId: MoveId, target?: BattlerIndex) { // Wait for the next EnemyCommandPhase to start From 35a09af4750229c7fb588affd0c59cf40c6db4f7 Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Sat, 7 Jun 2025 22:29:10 -0400 Subject: [PATCH 218/262] [Utils] Create utility function `randSeedFloat` (#5767) --- src/battle.ts | 3 ++- src/data/abilities/ability.ts | 6 +++--- src/data/moves/move.ts | 6 +++--- src/data/pokemon-species.ts | 16 ++++++++++++---- src/field/pokemon.ts | 3 ++- src/modifier/modifier.ts | 28 ++++++++++++++-------------- src/utils/common.ts | 31 +++++++++++++++++++++++-------- 7 files changed, 59 insertions(+), 34 deletions(-) diff --git a/src/battle.ts b/src/battle.ts index dbfed57ae41..2ebfb634751 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -8,6 +8,7 @@ import { shiftCharCodes, randSeedItem, randInt, + randSeedFloat, } from "#app/utils/common"; import Trainer, { TrainerVariant } from "./field/trainer"; import type { GameMode } from "./game-mode"; @@ -150,7 +151,7 @@ export default class Battle { randSeedGaussForLevel(value: number): number { let rand = 0; for (let i = value; i > 0; i--) { - rand += Phaser.Math.RND.realInRange(0, 1); + rand += randSeedFloat(); } return rand / value; } diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index e680a12f9fe..8c95364237b 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -1,5 +1,5 @@ import { HitResult, MoveResult, PlayerPokemon } from "#app/field/pokemon"; -import { BooleanHolder, NumberHolder, toDmgValue, isNullOrUndefined, randSeedItem, randSeedInt, type Constructor } from "#app/utils/common"; +import { BooleanHolder, NumberHolder, toDmgValue, isNullOrUndefined, randSeedItem, randSeedInt, type Constructor, randSeedFloat } from "#app/utils/common"; import { getPokemonNameWithAffix } from "#app/messages"; import { BattlerTagLapseType, GroundedTag } from "#app/data/battler-tags"; import { getNonVolatileStatusEffects, getStatusEffectDescriptor, getStatusEffectHealText } from "#app/data/status-effect"; @@ -4092,8 +4092,8 @@ export class PostTurnRestoreBerryAbAttr extends PostTurnAbAttr { } // Clamp procChance to [0, 1]. Skip if didn't proc (less than pass) - const pass = Phaser.Math.RND.realInRange(0, 1); - return Phaser.Math.Clamp(this.procChance(pokemon), 0, 1) >= pass; + const pass = randSeedFloat(); + return this.procChance(pokemon) >= pass; } override applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 94d0ae50523..d44ecbed4cf 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -29,7 +29,7 @@ import { } from "../status-effect"; import { getTypeDamageMultiplier } from "../type"; import { PokemonType } from "#enums/pokemon-type"; -import { BooleanHolder, NumberHolder, isNullOrUndefined, toDmgValue, randSeedItem, randSeedInt, getEnumValues, toReadableString, type Constructor } from "#app/utils/common"; +import { BooleanHolder, NumberHolder, isNullOrUndefined, toDmgValue, randSeedItem, randSeedInt, getEnumValues, toReadableString, type Constructor, randSeedFloat } from "#app/utils/common"; import { WeatherType } from "#enums/weather-type"; import type { ArenaTrapTag } from "../arena-tag"; import { ArenaTagSide, WeakenMoveTypeTag } from "../arena-tag"; @@ -2547,8 +2547,8 @@ export class StealHeldItemChanceAttr extends MoveEffectAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const rand = Phaser.Math.RND.realInRange(0, 1); - if (rand >= this.chance) { + const rand = randSeedFloat(); + if (rand > this.chance) { return false; } diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index c5d798b5841..36a8bbb0520 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -8,7 +8,14 @@ import type { AnySound } from "#app/battle-scene"; import { globalScene } from "#app/global-scene"; import type { GameMode } from "#app/game-mode"; import { DexAttr, type StarterMoveset } from "#app/system/game-data"; -import { isNullOrUndefined, capitalizeString, randSeedInt, randSeedGauss, randSeedItem } from "#app/utils/common"; +import { + isNullOrUndefined, + capitalizeString, + randSeedInt, + randSeedGauss, + randSeedItem, + randSeedFloat, +} from "#app/utils/common"; import { uncatchableSpecies } from "#app/data/balance/biomes"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { GrowthRate } from "#app/data/exp"; @@ -750,7 +757,7 @@ export abstract class PokemonSpeciesForm { let paletteColors: Map = new Map(); const originalRandom = Math.random; - Math.random = Phaser.Math.RND.frac; + Math.random = randSeedFloat; globalScene.executeWithSeedOffset( () => { @@ -773,6 +780,7 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali readonly mythical: boolean; readonly species: string; readonly growthRate: GrowthRate; + /** The chance (as a decimal) for this Species to be male, or `null` for genderless species */ readonly malePercent: number | null; readonly genderDiffs: boolean; readonly canChangeForm: boolean; @@ -889,7 +897,7 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali return Gender.GENDERLESS; } - if (Phaser.Math.RND.realInRange(0, 1) <= this.malePercent) { + if (randSeedFloat() <= this.malePercent) { return Gender.MALE; } return Gender.FEMALE; @@ -1138,7 +1146,7 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali } } - if (noEvolutionChance === 1 || Phaser.Math.RND.realInRange(0, 1) < noEvolutionChance) { + if (noEvolutionChance === 1 || randSeedFloat() <= noEvolutionChance) { return this.speciesId; } diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index a6d41074700..5b38419e708 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -65,6 +65,7 @@ import { rgbToHsv, deltaRgb, isBetween, + randSeedFloat, type nil, type Constructor, randSeedIntRange, @@ -5225,7 +5226,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { let fusionPaletteColors: Map; const originalRandom = Math.random; - Math.random = () => Phaser.Math.RND.realInRange(0, 1); + Math.random = () => randSeedFloat(); globalScene.executeWithSeedOffset( () => { diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index e1517b3bcde..81d9bf7189c 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -15,7 +15,7 @@ import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; import type { VoucherType } from "#app/system/voucher"; import { Command } from "#app/ui/command-ui-handler"; import { addTextObject, TextStyle } from "#app/ui/text"; -import { BooleanHolder, hslToHex, isNullOrUndefined, NumberHolder, toDmgValue } from "#app/utils/common"; +import { BooleanHolder, hslToHex, isNullOrUndefined, NumberHolder, randSeedFloat, toDmgValue } from "#app/utils/common"; import { BattlerTagType } from "#enums/battler-tag-type"; import { BerryType } from "#enums/berry-type"; import type { MoveId } from "#enums/move-id"; @@ -3351,7 +3351,7 @@ export class ContactHeldItemTransferChanceModifier extends HeldItemTransferModif } getTransferredItemCount(): number { - return Phaser.Math.RND.realInRange(0, 1) < this.chance * this.getStackCount() ? 1 : 0; + return randSeedFloat() <= this.chance * this.getStackCount() ? 1 : 0; } getTransferMessage(pokemon: Pokemon, targetPokemon: Pokemon, item: ModifierType): string { @@ -3629,7 +3629,7 @@ export class EnemyAttackStatusEffectChanceModifier extends EnemyPersistentModifi * @returns `true` if the {@linkcode Pokemon} was affected */ override apply(enemyPokemon: Pokemon): boolean { - if (Phaser.Math.RND.realInRange(0, 1) < this.chance * this.getStackCount()) { + if (randSeedFloat() <= this.chance * this.getStackCount()) { return enemyPokemon.trySetStatus(this.effect, true); } @@ -3664,21 +3664,21 @@ export class EnemyStatusEffectHealChanceModifier extends EnemyPersistentModifier } /** - * Applies {@linkcode EnemyStatusEffectHealChanceModifier} - * @param enemyPokemon The {@linkcode Pokemon} to heal + * Applies {@linkcode EnemyStatusEffectHealChanceModifier} to randomly heal status. + * @param enemyPokemon - The {@linkcode Pokemon} to heal * @returns `true` if the {@linkcode Pokemon} was healed */ override apply(enemyPokemon: Pokemon): boolean { - if (enemyPokemon.status && Phaser.Math.RND.realInRange(0, 1) < this.chance * this.getStackCount()) { - globalScene.phaseManager.queueMessage( - getStatusEffectHealText(enemyPokemon.status.effect, getPokemonNameWithAffix(enemyPokemon)), - ); - enemyPokemon.resetStatus(); - enemyPokemon.updateInfo(); - return true; + if (!enemyPokemon.status || randSeedFloat() > this.chance * this.getStackCount()) { + return false; } - return false; + globalScene.phaseManager.queueMessage( + getStatusEffectHealText(enemyPokemon.status.effect, getPokemonNameWithAffix(enemyPokemon)), + ); + enemyPokemon.resetStatus(); + enemyPokemon.updateInfo(); + return true; } getMaxStackCount(): number { @@ -3757,7 +3757,7 @@ export class EnemyFusionChanceModifier extends EnemyPersistentModifier { * @returns `true` if the {@linkcode EnemyPokemon} is a fusion */ override apply(isFusion: BooleanHolder): boolean { - if (Phaser.Math.RND.realInRange(0, 1) >= this.chance * this.getStackCount()) { + if (randSeedFloat() > this.chance * this.getStackCount()) { return false; } diff --git a/src/utils/common.ts b/src/utils/common.ts index 29923d7ddd4..56fa3b5c698 100644 --- a/src/utils/common.ts +++ b/src/utils/common.ts @@ -58,8 +58,8 @@ export function randSeedGauss(stdev: number, mean = 0): number { if (!stdev) { return 0; } - const u = 1 - Phaser.Math.RND.realInRange(0, 1); - const v = Phaser.Math.RND.realInRange(0, 1); + const u = 1 - randSeedFloat(); + const v = randSeedFloat(); const z = Math.sqrt(-2.0 * Math.log(u)) * Math.cos(2.0 * Math.PI * v); return z * stdev + mean; } @@ -88,9 +88,9 @@ export function randInt(range: number, min = 0): number { } /** - * Generates a random number using the global seed, or the current battle's seed if called via `Battle.randSeedInt` - * @param range How large of a range of random numbers to choose from. If {@linkcode range} <= 1, returns {@linkcode min} - * @param min The minimum integer to pick, default `0` + * Generate a random integer using the global seed, or the current battle's seed if called via `Battle.randSeedInt` + * @param range - How large of a range of random numbers to choose from. If {@linkcode range} <= 1, returns {@linkcode min} + * @param min - The minimum integer to pick, default `0` * @returns A random integer between {@linkcode min} and ({@linkcode min} + {@linkcode range} - 1) */ export function randSeedInt(range: number, min = 0): number { @@ -119,6 +119,14 @@ export function randIntRange(min: number, max: number): number { return randInt(max - min, min); } +/** + * Generate and return a random real number between `0` and `1` using the global seed. + * @returns A random floating-point number between `0` and `1` + */ +export function randSeedFloat(): number { + return Phaser.Math.RND.frac(); +} + export function randItem(items: T[]): T { return items.length === 1 ? items[0] : items[randInt(items.length)]; } @@ -517,12 +525,19 @@ export function capitalizeString(str: string, sep: string, lowerFirstChar = true return null; } -export function isNullOrUndefined(object: any): object is null | undefined { - return object === null || object === undefined; +/** + * Report whether a given value is nullish (`null`/`undefined`). + * @param val - The value whose nullishness is being checked + * @returns `true` if `val` is either `null` or `undefined` + */ +export function isNullOrUndefined(val: any): val is null | undefined { + return val === null || val === undefined; } /** - * Capitalizes the first letter of a string + * Capitalize the first letter of a string. + * @param str - The string whose first letter is being capitalized + * @return The original string with its first letter capitalized */ export function capitalizeFirstLetter(str: string) { return str.charAt(0).toUpperCase() + str.slice(1); From 75beec12a892d28b51d8cbd859a28fc793617736 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Sat, 7 Jun 2025 21:43:30 -0700 Subject: [PATCH 219/262] [Dev] Enable Biome checking of `ability.ts` (#5948) --- biome.jsonc | 1 - src/data/abilities/ability.ts | 4084 +++++++++++++++++++++++---------- 2 files changed, 2915 insertions(+), 1170 deletions(-) diff --git a/biome.jsonc b/biome.jsonc index 141c44dc87d..82ce7c308dc 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -31,7 +31,6 @@ "src/overrides.ts", // TODO: these files are too big and complex, ignore them until their respective refactors "src/data/moves/move.ts", - "src/data/abilities/ability.ts", // this file is just too big: "src/data/balance/tms.ts" diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 8c95364237b..9269f84d269 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -1,8 +1,21 @@ -import { HitResult, MoveResult, PlayerPokemon } from "#app/field/pokemon"; -import { BooleanHolder, NumberHolder, toDmgValue, isNullOrUndefined, randSeedItem, randSeedInt, type Constructor, randSeedFloat } from "#app/utils/common"; +import { HitResult, MoveResult } from "#app/field/pokemon"; +import { + BooleanHolder, + NumberHolder, + toDmgValue, + isNullOrUndefined, + randSeedItem, + randSeedInt, + type Constructor, + randSeedFloat, +} from "#app/utils/common"; import { getPokemonNameWithAffix } from "#app/messages"; import { BattlerTagLapseType, GroundedTag } from "#app/data/battler-tags"; -import { getNonVolatileStatusEffects, getStatusEffectDescriptor, getStatusEffectHealText } from "#app/data/status-effect"; +import { + getNonVolatileStatusEffects, + getStatusEffectDescriptor, + getStatusEffectHealText, +} from "#app/data/status-effect"; import { Gender } from "#app/data/gender"; import { AttackMove, @@ -24,7 +37,11 @@ import { allMoves } from "../data-lists"; import { ArenaTagSide } from "#app/data/arena-tag"; import { BerryModifier, HitHealModifier, PokemonHeldItemModifier } from "#app/modifier/modifier"; import { TerrainType } from "#app/data/terrain"; -import { SpeciesFormChangeAbilityTrigger, SpeciesFormChangeRevertWeatherFormTrigger, SpeciesFormChangeWeatherTrigger } from "#app/data/pokemon-forms"; +import { + SpeciesFormChangeAbilityTrigger, + SpeciesFormChangeRevertWeatherFormTrigger, + SpeciesFormChangeWeatherTrigger, +} from "#app/data/pokemon-forms"; import i18next from "i18next"; import { Command } from "#app/ui/command-ui-handler"; import { BerryModifierType } from "#app/modifier/modifier-type"; @@ -65,13 +82,19 @@ import { CommonAnim } from "../battle-anims"; import { getBerryEffectFunc } from "../berry"; import { BerryUsedEvent } from "#app/events/battle-scene"; - // Type imports import type { EnemyPokemon, PokemonMove } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import type { Weather } from "#app/data/weather"; import type { BattlerTag } from "#app/data/battler-tags"; -import type { AbAttrCondition, PokemonDefendCondition, PokemonStatStageChangeCondition, PokemonAttackCondition, AbAttrApplyFunc, AbAttrSuccessFunc } from "#app/@types/ability-types"; +import type { + AbAttrCondition, + PokemonDefendCondition, + PokemonStatStageChangeCondition, + PokemonAttackCondition, + AbAttrApplyFunc, + AbAttrSuccessFunc, +} from "#app/@types/ability-types"; import type { BattlerIndex } from "#app/battle"; import type Move from "#app/data/moves/move"; import type { ArenaTrapTag, SuppressAbilitiesTag } from "#app/data/arena-tag"; @@ -83,12 +106,21 @@ export class BlockRecoilDamageAttr extends AbAttr { super(false); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + cancelled: BooleanHolder, + _args: any[], + ): void { cancelled.value = true; } getTriggerMessage(pokemon: Pokemon, abilityName: string, ..._args: any[]) { - return i18next.t("abilityTriggers:blockRecoilDamage", { pokemonName: getPokemonNameWithAffix(pokemon), abilityName: abilityName }); + return i18next.t("abilityTriggers:blockRecoilDamage", { + pokemonName: getPokemonNameWithAffix(pokemon), + abilityName: abilityName, + }); } } @@ -106,7 +138,13 @@ export class DoubleBattleChanceAbAttr extends AbAttr { * Increases the chance of a double battle occurring * @param args [0] {@linkcode NumberHolder} for double battle chance */ - override apply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _cancelled: BooleanHolder, args: any[]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _cancelled: BooleanHolder, + args: any[], + ): void { const doubleBattleChance = args[0] as NumberHolder; // This is divided because the chance is generated as a number from 0 to doubleBattleChance.value using Utils.randSeedInt // A double battle will initiate if the generated number is 0 @@ -115,28 +153,28 @@ export class DoubleBattleChanceAbAttr extends AbAttr { } export class PostBattleInitAbAttr extends AbAttr { - canApplyPostBattleInit(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + canApplyPostBattleInit(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { return true; } - applyPostBattleInit(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void {} + applyPostBattleInit(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): void {} } export class PostBattleInitFormChangeAbAttr extends PostBattleInitAbAttr { private formFunc: (p: Pokemon) => number; - constructor(formFunc: ((p: Pokemon) => number)) { + constructor(formFunc: (p: Pokemon) => number) { super(false); this.formFunc = formFunc; } - override canApplyPostBattleInit(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApplyPostBattleInit(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): boolean { const formIndex = this.formFunc(pokemon); return formIndex !== pokemon.formIndex && !simulated; } - override applyPostBattleInit(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostBattleInit(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): void { globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeAbilityTrigger, false); } } @@ -152,7 +190,13 @@ export class PostTeraFormChangeStatChangeAbAttr extends AbAttr { this.stages = stages; } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder | null, args: any[]): void { + override apply( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + _cancelled: BooleanHolder | null, + _args: any[], + ): void { const statStageChangePhases: StatStageChangePhase[] = []; if (!simulated) { @@ -180,11 +224,17 @@ export class ClearWeatherAbAttr extends AbAttr { this.weather = weather; } - public override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + public override canApply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { return globalScene.arena.canSetWeather(WeatherType.NONE); } - public override apply(pokemon: Pokemon, passive: boolean, simulated:boolean, cancelled: BooleanHolder, args: any[]): void { + public override apply( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + _cancelled: BooleanHolder, + _args: any[], + ): void { if (!simulated) { globalScene.arena.trySetWeather(WeatherType.NONE, pokemon); } @@ -206,11 +256,17 @@ export class ClearTerrainAbAttr extends AbAttr { this.terrain = terrain; } - public override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + public override canApply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { return globalScene.arena.canSetTerrain(TerrainType.NONE); } - public override apply(pokemon: Pokemon, passive: boolean, simulated:boolean, cancelled: BooleanHolder, args: any[]): void { + public override apply( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + _cancelled: BooleanHolder, + _args: any[], + ): void { if (!simulated) { globalScene.arena.trySetTerrain(TerrainType.NONE, true, pokemon); } @@ -221,35 +277,56 @@ type PreDefendAbAttrCondition = (pokemon: Pokemon, attacker: Pokemon, move: Move export class PreDefendAbAttr extends AbAttr { canApplyPreDefend( - pokemon: Pokemon, - passive: boolean, - simulated: boolean, - attacker: Pokemon, - move: Move | null, - cancelled: BooleanHolder | null, - args: any[]): boolean { + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _attacker: Pokemon, + _move: Move | null, + _cancelled: BooleanHolder | null, + _args: any[], + ): boolean { return true; } applyPreDefend( - pokemon: Pokemon, - passive: boolean, - simulated: boolean, - attacker: Pokemon, - move: Move | null, - cancelled: BooleanHolder | null, - args: any[], + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _attacker: Pokemon, + _move: Move | null, + _cancelled: BooleanHolder | null, + _args: any[], ): void {} } export class PreDefendFullHpEndureAbAttr extends PreDefendAbAttr { - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move | null, cancelled: BooleanHolder | null, args: any[]): boolean { - return pokemon.isFullHp() - && pokemon.getMaxHp() > 1 //Checks if pokemon has wonder_guard (which forces 1hp) - && (args[0] as NumberHolder).value >= pokemon.hp; //Damage >= hp + override canApplyPreDefend( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _attacker: Pokemon, + _move: Move | null, + _cancelled: BooleanHolder | null, + args: any[], + ): boolean { + return ( + pokemon.isFullHp() && + // Checks if pokemon has wonder_guard (which forces 1hp) + pokemon.getMaxHp() > 1 && + // Damage >= hp + (args[0] as NumberHolder).value >= pokemon.hp + ); } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { + override applyPreDefend( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + _attacker: Pokemon, + _move: Move, + _cancelled: BooleanHolder, + _args: any[], + ): void { if (!simulated) { pokemon.addTag(BattlerTagType.STURDY, 1); } @@ -257,14 +334,20 @@ export class PreDefendFullHpEndureAbAttr extends PreDefendAbAttr { } export class BlockItemTheftAbAttr extends AbAttr { - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + cancelled: BooleanHolder, + _args: any[], + ): void { cancelled.value = true; } - getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]) { + getTriggerMessage(pokemon: Pokemon, abilityName: string, ..._args: any[]) { return i18next.t("abilityTriggers:blockItemTheft", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - abilityName + abilityName, }); } } @@ -274,11 +357,17 @@ export class StabBoostAbAttr extends AbAttr { super(false); } - override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, args: any[]): boolean { return (args[0] as NumberHolder).value > 1; } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _cancelled: BooleanHolder, + args: any[], + ): void { (args[0] as NumberHolder).value += 0.5; } } @@ -287,18 +376,34 @@ export class ReceivedMoveDamageMultiplierAbAttr extends PreDefendAbAttr { protected condition: PokemonDefendCondition; private damageMultiplier: number; - constructor(condition: PokemonDefendCondition, damageMultiplier: number, showAbility: boolean = false) { + constructor(condition: PokemonDefendCondition, damageMultiplier: number, showAbility = false) { super(showAbility); this.condition = condition; this.damageMultiplier = damageMultiplier; } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + attacker: Pokemon, + move: Move, + _cancelled: BooleanHolder | null, + _args: any[], + ): boolean { return this.condition(pokemon, attacker, move); } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { + override applyPreDefend( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _attacker: Pokemon, + _move: Move, + _cancelled: BooleanHolder, + args: any[], + ): void { (args[0] as NumberHolder).value = toDmgValue((args[0] as NumberHolder).value * this.damageMultiplier); } } @@ -320,7 +425,15 @@ export class AlliedFieldDamageReductionAbAttr extends PreDefendAbAttr { * @param args * - `[0]` {@linkcode NumberHolder} - The damage being dealt */ - override applyPreDefend(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _attacker: Pokemon, _move: Move, _cancelled: BooleanHolder, args: any[]): void { + override applyPreDefend( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _attacker: Pokemon, + _move: Move, + _cancelled: BooleanHolder, + args: any[], + ): void { const damage = args[0] as NumberHolder; damage.value = toDmgValue(damage.value * this.damageMultiplier); } @@ -328,7 +441,7 @@ export class AlliedFieldDamageReductionAbAttr extends PreDefendAbAttr { export class ReceivedTypeDamageMultiplierAbAttr extends ReceivedMoveDamageMultiplierAbAttr { constructor(moveType: PokemonType, damageMultiplier: number) { - super((target, user, move) => user.getMoveType(move) === moveType, damageMultiplier, false); + super((_target, user, move) => user.getMoveType(move) === moveType, damageMultiplier, false); } } @@ -342,6 +455,7 @@ export class TypeImmunityAbAttr extends PreDefendAbAttr { private immuneType: PokemonType | null; private condition: AbAttrCondition | null; + // TODO: `immuneType` shouldn't be able to be `null` constructor(immuneType: PokemonType | null, condition?: AbAttrCondition) { super(true); @@ -349,21 +463,41 @@ export class TypeImmunityAbAttr extends PreDefendAbAttr { this.condition = condition ?? null; } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { - return ![ MoveTarget.BOTH_SIDES, MoveTarget.ENEMY_SIDE, MoveTarget.USER_SIDE ].includes(move.moveTarget) && attacker !== pokemon && attacker.getMoveType(move) === this.immuneType; + override canApplyPreDefend( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + attacker: Pokemon, + move: Move, + _cancelled: BooleanHolder | null, + _args: any[], + ): boolean { + return ( + ![MoveTarget.BOTH_SIDES, MoveTarget.ENEMY_SIDE, MoveTarget.USER_SIDE].includes(move.moveTarget) && + attacker !== pokemon && + attacker.getMoveType(move) === this.immuneType + ); } /** * Applies immunity if this ability grants immunity to the type of the given move. - * @param pokemon {@linkcode Pokemon} The defending Pokemon. - * @param passive - Whether the ability is passive. - * @param attacker {@linkcode Pokemon} The attacking Pokemon. - * @param move {@linkcode Move} The attacking move. - * @param cancelled {@linkcode BooleanHolder} - A holder for a boolean value indicating if the move was cancelled. + * @param _pokemon {@linkcode Pokemon} The defending Pokemon. + * @param _passive - Whether the ability is passive. + * @param _attacker {@linkcode Pokemon} The attacking Pokemon. + * @param _move {@linkcode Move} The attacking move. + * @param _cancelled {@linkcode BooleanHolder} - A holder for a boolean value indicating if the move was cancelled. * @param args [0] {@linkcode NumberHolder} gets set to 0 if move is immuned by an ability. * @param args [1] - Whether the move is simulated. */ - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { + override applyPreDefend( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _attacker: Pokemon, + _move: Move, + _cancelled: BooleanHolder, + args: any[], + ): void { (args[0] as NumberHolder).value = 0; } @@ -377,13 +511,25 @@ export class TypeImmunityAbAttr extends PreDefendAbAttr { } export class AttackTypeImmunityAbAttr extends TypeImmunityAbAttr { + // biome-ignore lint/complexity/noUselessConstructor: Changes the type of `immuneType` constructor(immuneType: PokemonType, condition?: AbAttrCondition) { super(immuneType, condition); } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { - return move.category !== MoveCategory.STATUS && !move.hasAttr(NeutralDamageAgainstFlyingTypeMultiplierAttr) - && super.canApplyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); + override canApplyPreDefend( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + attacker: Pokemon, + move: Move, + cancelled: BooleanHolder | null, + args: any[], + ): boolean { + return ( + move.category !== MoveCategory.STATUS && + !move.hasAttr(NeutralDamageAgainstFlyingTypeMultiplierAttr) && + super.canApplyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args) + ); } /** @@ -391,27 +537,61 @@ export class AttackTypeImmunityAbAttr extends TypeImmunityAbAttr { * Type immunity abilities that do not give additional benefits (HP recovery, stat boosts, etc) are not immune to status moves of the type * Example: Levitate */ - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { + override applyPreDefend( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + attacker: Pokemon, + move: Move, + cancelled: BooleanHolder, + args: any[], + ): void { // this is a hacky way to fix the Levitate/Thousand Arrows interaction, but it works for now... super.applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); } } export class TypeImmunityHealAbAttr extends TypeImmunityAbAttr { + // biome-ignore lint/complexity/noUselessConstructor: Changes the type of `immuneType` constructor(immuneType: PokemonType) { super(immuneType); } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + attacker: Pokemon, + move: Move, + cancelled: BooleanHolder | null, + args: any[], + ): boolean { return super.canApplyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { + override applyPreDefend( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + attacker: Pokemon, + move: Move, + cancelled: BooleanHolder, + args: any[], + ): void { super.applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); if (!pokemon.isFullHp() && !simulated) { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; - globalScene.phaseManager.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), - toDmgValue(pokemon.getMaxHp() / 4), i18next.t("abilityTriggers:typeImmunityHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }), true)); + globalScene.phaseManager.unshiftPhase( + new PokemonHealPhase( + pokemon.getBattlerIndex(), + toDmgValue(pokemon.getMaxHp() / 4), + i18next.t("abilityTriggers:typeImmunityHeal", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + abilityName, + }), + true, + ), + ); cancelled.value = true; // Suppresses "No Effect" message } } @@ -428,15 +608,33 @@ class TypeImmunityStatStageChangeAbAttr extends TypeImmunityAbAttr { this.stages = stages; } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + attacker: Pokemon, + move: Move, + cancelled: BooleanHolder | null, + args: any[], + ): boolean { return super.canApplyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { + override applyPreDefend( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + attacker: Pokemon, + move: Move, + cancelled: BooleanHolder, + args: any[], + ): void { super.applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); cancelled.value = true; // Suppresses "No Effect" message if (!simulated) { - globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ this.stat ], this.stages)); + globalScene.phaseManager.unshiftPhase( + new StatStageChangePhase(pokemon.getBattlerIndex(), true, [this.stat], this.stages), + ); } } } @@ -452,11 +650,27 @@ class TypeImmunityAddBattlerTagAbAttr extends TypeImmunityAbAttr { this.turnCount = turnCount; } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + attacker: Pokemon, + move: Move, + cancelled: BooleanHolder | null, + args: any[], + ): boolean { return super.canApplyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { + override applyPreDefend( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + attacker: Pokemon, + move: Move, + cancelled: BooleanHolder, + args: any[], + ): void { super.applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); cancelled.value = true; // Suppresses "No Effect" message if (!simulated) { @@ -470,22 +684,39 @@ export class NonSuperEffectiveImmunityAbAttr extends TypeImmunityAbAttr { super(null, condition); } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { - const modifierValue = args.length > 0 - ? (args[0] as NumberHolder).value - : pokemon.getAttackTypeEffectiveness(attacker.getMoveType(move), attacker, undefined, undefined, move); + override canApplyPreDefend( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + attacker: Pokemon, + move: Move, + _cancelled: BooleanHolder | null, + args: any[], + ): boolean { + const modifierValue = + args.length > 0 + ? (args[0] as NumberHolder).value + : pokemon.getAttackTypeEffectiveness(attacker.getMoveType(move), attacker, undefined, undefined, move); return move instanceof AttackMove && modifierValue < 2; } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { + override applyPreDefend( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _attacker: Pokemon, + _move: Move, + cancelled: BooleanHolder, + args: any[], + ): void { cancelled.value = true; // Suppresses "No Effect" message (args[0] as NumberHolder).value = 0; } - getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { + getTriggerMessage(pokemon: Pokemon, abilityName: string, ..._args: any[]): string { return i18next.t("abilityTriggers:nonSuperEffectiveImmunity", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - abilityName + abilityName, }); } } @@ -496,94 +727,128 @@ export class NonSuperEffectiveImmunityAbAttr extends TypeImmunityAbAttr { * @extends PreDefendAbAttr */ export class FullHpResistTypeAbAttr extends PreDefendAbAttr { - - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move | null, cancelled: BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _attacker: Pokemon, + move: Move | null, + _cancelled: BooleanHolder | null, + args: any[], + ): boolean { const typeMultiplier = args[0]; - return (typeMultiplier && typeMultiplier instanceof NumberHolder) && !(move && move.hasAttr(FixedDamageAttr)) && pokemon.isFullHp() && typeMultiplier.value > 0.5; + return ( + typeMultiplier instanceof NumberHolder && + !move?.hasAttr(FixedDamageAttr) && + pokemon.isFullHp() && + typeMultiplier.value > 0.5 + ); } /** * Reduces a type multiplier to 0.5 if the source is at full HP. * @param pokemon {@linkcode Pokemon} the Pokemon with this ability - * @param passive n/a - * @param simulated n/a (this doesn't change game state) - * @param attacker n/a - * @param move {@linkcode Move} the move being used on the source - * @param cancelled n/a + * @param _passive n/a + * @param _simulated n/a (this doesn't change game state) + * @param _attacker n/a + * @param _move {@linkcode Move} the move being used on the source + * @param _cancelled n/a * @param args `[0]` a container for the move's current type effectiveness multiplier */ override applyPreDefend( pokemon: Pokemon, - passive: boolean, - simulated: boolean, - attacker: Pokemon, - move: Move | null, - cancelled: BooleanHolder | null, - args: any[]): void { + _passive: boolean, + _simulated: boolean, + _attacker: Pokemon, + _move: Move | null, + _cancelled: BooleanHolder | null, + args: any[], + ): void { const typeMultiplier = args[0]; typeMultiplier.value = 0.5; pokemon.turnData.moveEffectiveness = 0.5; } - getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { + getTriggerMessage(pokemon: Pokemon, _abilityName: string, ..._args: any[]): string { return i18next.t("abilityTriggers:fullHpResistType", { - pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }); } } export class PostDefendAbAttr extends AbAttr { canApplyPostDefend( - pokemon: Pokemon, - passive: boolean, - simulated: boolean, - attacker: Pokemon, - move: Move, - hitResult: HitResult | null, - args: any[]): boolean { + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _attacker: Pokemon, + _move: Move, + _hitResult: HitResult | null, + _args: any[], + ): boolean { return true; } applyPostDefend( - pokemon: Pokemon, - passive: boolean, - simulated: boolean, - attacker: Pokemon, - move: Move, - hitResult: HitResult | null, - args: any[], + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _attacker: Pokemon, + _move: Move, + _hitResult: HitResult | null, + _args: any[], ): void {} } export class FieldPriorityMoveImmunityAbAttr extends PreDefendAbAttr { - - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { - return !(move.moveTarget === MoveTarget.USER || move.moveTarget === MoveTarget.NEAR_ALLY) && move.getPriority(attacker) > 0 && !move.isMultiTarget(); + override canApplyPreDefend( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + attacker: Pokemon, + move: Move, + _cancelled: BooleanHolder | null, + _args: any[], + ): boolean { + return ( + !(move.moveTarget === MoveTarget.USER || move.moveTarget === MoveTarget.NEAR_ALLY) && + move.getPriority(attacker) > 0 && + !move.isMultiTarget() + ); } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { + override applyPreDefend( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _attacker: Pokemon, + _move: Move, + cancelled: BooleanHolder, + _args: any[], + ): void { cancelled.value = true; } } export class PostStatStageChangeAbAttr extends AbAttr { canApplyPostStatStageChange( - pokemon: Pokemon, - simulated: boolean, - statsChanged: BattleStat[], - stagesChanged: number, - selfTarget: boolean, - args: any[]): boolean { + _pokemon: Pokemon, + _simulated: boolean, + _statsChanged: BattleStat[], + _stagesChanged: number, + _selfTarget: boolean, + _args: any[], + ): boolean { return true; } applyPostStatStageChange( - pokemon: Pokemon, - simulated: boolean, - statsChanged: BattleStat[], - stagesChanged: number, - selfTarget: boolean, - args: any[], + _pokemon: Pokemon, + _simulated: boolean, + _statsChanged: BattleStat[], + _stagesChanged: number, + _selfTarget: boolean, + _args: any[], ): void {} } @@ -596,15 +861,31 @@ export class MoveImmunityAbAttr extends PreDefendAbAttr { this.immuneCondition = immuneCondition; } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + attacker: Pokemon, + move: Move, + _cancelled: BooleanHolder | null, + _args: any[], + ): boolean { return this.immuneCondition(pokemon, attacker, move); } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { + override applyPreDefend( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _attacker: Pokemon, + _move: Move, + cancelled: BooleanHolder, + _args: any[], + ): void { cancelled.value = true; } - getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { + getTriggerMessage(pokemon: Pokemon, _abilityName: string, ..._args: any[]): string { return i18next.t("abilityTriggers:moveImmunity", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }); } } @@ -616,17 +897,32 @@ export class MoveImmunityAbAttr extends PreDefendAbAttr { * @extends PreDefendAbAttr */ export class WonderSkinAbAttr extends PreDefendAbAttr { - constructor() { super(false); } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _attacker: Pokemon, + move: Move, + _cancelled: BooleanHolder | null, + args: any[], + ): boolean { const moveAccuracy = args[0] as NumberHolder; return move.category === MoveCategory.STATUS && moveAccuracy.value >= 50; } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { + override applyPreDefend( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _attacker: Pokemon, + _move: Move, + _cancelled: BooleanHolder, + args: any[], + ): void { const moveAccuracy = args[0] as NumberHolder; moveAccuracy.value = 50; } @@ -642,13 +938,31 @@ export class MoveImmunityStatStageChangeAbAttr extends MoveImmunityAbAttr { this.stages = stages; } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + attacker: Pokemon, + move: Move, + cancelled: BooleanHolder | null, + args: any[], + ): boolean { return !simulated && super.canApplyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { + override applyPreDefend( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + attacker: Pokemon, + move: Move, + cancelled: BooleanHolder, + args: any[], + ): void { super.applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); - globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ this.stat ], this.stages)); + globalScene.phaseManager.unshiftPhase( + new StatStageChangePhase(pokemon.getBattlerIndex(), true, [this.stat], this.stages), + ); } } /** @@ -657,8 +971,15 @@ export class MoveImmunityStatStageChangeAbAttr extends MoveImmunityAbAttr { * @see {@linkcode applyPostDefend} */ export class ReverseDrainAbAttr extends PostDefendAbAttr { - - override canApplyPostDefend(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _attacker: Pokemon, move: Move, _hitResult: HitResult | null, args: any[]): boolean { + override canApplyPostDefend( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _attacker: Pokemon, + move: Move, + _hitResult: HitResult | null, + _args: any[], + ): boolean { return move.hasAttr(HitHealAttr); } @@ -666,16 +987,26 @@ export class ReverseDrainAbAttr extends PostDefendAbAttr { * Determines if a damage and draining move was used to check if this ability should stop the healing. * Examples include: Absorb, Draining Kiss, Bitter Blade, etc. * Also displays a message to show this ability was activated. - * @param pokemon {@linkcode Pokemon} with this ability + * @param _pokemon {@linkcode Pokemon} with this ability * @param _passive N/A * @param attacker {@linkcode Pokemon} that is attacking this Pokemon - * @param move {@linkcode PokemonMove} that is being used + * @param _move {@linkcode PokemonMove} that is being used * @param _hitResult N/A * @param _args N/A */ - override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { + override applyPostDefend( + _pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + attacker: Pokemon, + _move: Move, + _hitResult: HitResult, + _args: any[], + ): void { if (!simulated) { - globalScene.phaseManager.queueMessage(i18next.t("abilityTriggers:reverseDrain", { pokemonNameWithAffix: getPokemonNameWithAffix(attacker) })); + globalScene.phaseManager.queueMessage( + i18next.t("abilityTriggers:reverseDrain", { pokemonNameWithAffix: getPokemonNameWithAffix(attacker) }), + ); } } } @@ -687,7 +1018,13 @@ export class PostDefendStatStageChangeAbAttr extends PostDefendAbAttr { private selfTarget: boolean; private allOthers: boolean; - constructor(condition: PokemonDefendCondition, stat: BattleStat, stages: number, selfTarget = true, allOthers = false) { + constructor( + condition: PokemonDefendCondition, + stat: BattleStat, + stages: number, + selfTarget = true, + allOthers = false, + ) { super(true); this.condition = condition; @@ -697,23 +1034,48 @@ export class PostDefendStatStageChangeAbAttr extends PostDefendAbAttr { this.allOthers = allOthers; } - override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { + override canApplyPostDefend( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + attacker: Pokemon, + move: Move, + _hitResult: HitResult | null, + _args: any[], + ): boolean { return this.condition(pokemon, attacker, move); } - override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { + override applyPostDefend( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + attacker: Pokemon, + _move: Move, + _hitResult: HitResult, + _args: any[], + ): void { if (simulated) { return; } if (this.allOthers) { const ally = pokemon.getAlly(); - const otherPokemon = !isNullOrUndefined(ally) ? pokemon.getOpponents().concat([ ally ]) : pokemon.getOpponents(); + const otherPokemon = !isNullOrUndefined(ally) ? pokemon.getOpponents().concat([ally]) : pokemon.getOpponents(); for (const other of otherPokemon) { - globalScene.phaseManager.unshiftPhase(new StatStageChangePhase((other).getBattlerIndex(), false, [ this.stat ], this.stages)); + globalScene.phaseManager.unshiftPhase( + new StatStageChangePhase(other.getBattlerIndex(), false, [this.stat], this.stages), + ); } } else { - globalScene.phaseManager.unshiftPhase(new StatStageChangePhase((this.selfTarget ? pokemon : attacker).getBattlerIndex(), this.selfTarget, [ this.stat ], this.stages)); + globalScene.phaseManager.unshiftPhase( + new StatStageChangePhase( + (this.selfTarget ? pokemon : attacker).getBattlerIndex(), + this.selfTarget, + [this.stat], + this.stages, + ), + ); } } } @@ -725,7 +1087,13 @@ export class PostDefendHpGatedStatStageChangeAbAttr extends PostDefendAbAttr { private stages: number; private selfTarget: boolean; - constructor(condition: PokemonDefendCondition, hpGate: number, stats: BattleStat[], stages: number, selfTarget = true) { + constructor( + condition: PokemonDefendCondition, + hpGate: number, + stats: BattleStat[], + stages: number, + selfTarget = true, + ) { super(true); this.condition = condition; @@ -735,16 +1103,41 @@ export class PostDefendHpGatedStatStageChangeAbAttr extends PostDefendAbAttr { this.selfTarget = selfTarget; } - override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { + override canApplyPostDefend( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + attacker: Pokemon, + move: Move, + _hitResult: HitResult | null, + _args: any[], + ): boolean { const hpGateFlat: number = Math.ceil(pokemon.getMaxHp() * this.hpGate); const lastAttackReceived = pokemon.turnData.attacksReceived[pokemon.turnData.attacksReceived.length - 1]; const damageReceived = lastAttackReceived?.damage || 0; - return this.condition(pokemon, attacker, move) && (pokemon.hp <= hpGateFlat && (pokemon.hp + damageReceived) > hpGateFlat); + return ( + this.condition(pokemon, attacker, move) && pokemon.hp <= hpGateFlat && pokemon.hp + damageReceived > hpGateFlat + ); } - override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { + override applyPostDefend( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + attacker: Pokemon, + _move: Move, + _hitResult: HitResult, + _args: any[], + ): void { if (!simulated) { - globalScene.phaseManager.unshiftPhase(new StatStageChangePhase((this.selfTarget ? pokemon : attacker).getBattlerIndex(), true, this.stats, this.stages)); + globalScene.phaseManager.unshiftPhase( + new StatStageChangePhase( + (this.selfTarget ? pokemon : attacker).getBattlerIndex(), + true, + this.stats, + this.stages, + ), + ); } } } @@ -760,15 +1153,38 @@ export class PostDefendApplyArenaTrapTagAbAttr extends PostDefendAbAttr { this.tagType = tagType; } - override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { + override canApplyPostDefend( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + attacker: Pokemon, + move: Move, + _hitResult: HitResult | null, + _args: any[], + ): boolean { const tag = globalScene.arena.getTag(this.tagType) as ArenaTrapTag; - return (this.condition(pokemon, attacker, move)) - && (!globalScene.arena.getTag(this.tagType) || tag.layers < tag.maxLayers); + return ( + this.condition(pokemon, attacker, move) && (!globalScene.arena.getTag(this.tagType) || tag.layers < tag.maxLayers) + ); } - override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { + override applyPostDefend( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + _attacker: Pokemon, + _move: Move, + _hitResult: HitResult, + _args: any[], + ): void { if (!simulated) { - globalScene.arena.addTag(this.tagType, 0, undefined, pokemon.id, pokemon.isPlayer() ? ArenaTagSide.ENEMY : ArenaTagSide.PLAYER); + globalScene.arena.addTag( + this.tagType, + 0, + undefined, + pokemon.id, + pokemon.isPlayer() ? ArenaTagSide.ENEMY : ArenaTagSide.PLAYER, + ); } } } @@ -783,14 +1199,35 @@ export class PostDefendApplyBattlerTagAbAttr extends PostDefendAbAttr { this.tagType = tagType; } - override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { + override canApplyPostDefend( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + attacker: Pokemon, + move: Move, + _hitResult: HitResult | null, + _args: any[], + ): boolean { return this.condition(pokemon, attacker, move); } - override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { + override applyPostDefend( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + _attacker: Pokemon, + move: Move, + _hitResult: HitResult, + _args: any[], + ): void { if (!pokemon.getTag(this.tagType) && !simulated) { pokemon.addTag(this.tagType, undefined, undefined, pokemon.id); - globalScene.phaseManager.queueMessage(i18next.t("abilityTriggers:windPowerCharged", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: move.name })); + globalScene.phaseManager.queueMessage( + i18next.t("abilityTriggers:windPowerCharged", { + pokemonName: getPokemonNameWithAffix(pokemon), + moveName: move.name, + }), + ); } } } @@ -798,22 +1235,38 @@ export class PostDefendApplyBattlerTagAbAttr extends PostDefendAbAttr { export class PostDefendTypeChangeAbAttr extends PostDefendAbAttr { private type: PokemonType; - override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { + override canApplyPostDefend( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + attacker: Pokemon, + move: Move, + hitResult: HitResult, + _args: any[], + ): boolean { this.type = attacker.getMoveType(move); const pokemonTypes = pokemon.getTypes(true); return hitResult < HitResult.NO_EFFECT && (simulated || pokemonTypes.length !== 1 || pokemonTypes[0] !== this.type); } - override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, _args: any[]): void { + override applyPostDefend( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + attacker: Pokemon, + move: Move, + _hitResult: HitResult, + _args: any[], + ): void { const type = attacker.getMoveType(move); - pokemon.summonData.types = [ type ]; + pokemon.summonData.types = [type]; } override getTriggerMessage(pokemon: Pokemon, abilityName: string, ..._args: any[]): string { return i18next.t("abilityTriggers:postDefendTypeChange", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName, - typeName: i18next.t(`pokemonInfo:Type.${PokemonType[this.type]}`) + typeName: i18next.t(`pokemonInfo:Type.${PokemonType[this.type]}`), }); } } @@ -827,11 +1280,27 @@ export class PostDefendTerrainChangeAbAttr extends PostDefendAbAttr { this.terrainType = terrainType; } - override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { + override canApplyPostDefend( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _attacker: Pokemon, + _move: Move, + hitResult: HitResult, + _args: any[], + ): boolean { return hitResult < HitResult.NO_EFFECT && globalScene.arena.canSetTerrain(this.terrainType); } - override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, _args: any[]): void { + override applyPostDefend( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + _attacker: Pokemon, + _move: Move, + _hitResult: HitResult, + _args: any[], + ): void { if (!simulated) { globalScene.arena.trySetTerrain(this.terrainType, false, pokemon); } @@ -849,15 +1318,36 @@ export class PostDefendContactApplyStatusEffectAbAttr extends PostDefendAbAttr { this.effects = effects; } - override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - const effect = this.effects.length === 1 ? this.effects[0] : this.effects[pokemon.randBattleSeedInt(this.effects.length)]; - return move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) && !attacker.status - && (this.chance === -1 || pokemon.randBattleSeedInt(100) < this.chance) - && attacker.canSetStatus(effect, true, false, pokemon); + override canApplyPostDefend( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + attacker: Pokemon, + move: Move, + _hitResult: HitResult | null, + _args: any[], + ): boolean { + const effect = + this.effects.length === 1 ? this.effects[0] : this.effects[pokemon.randBattleSeedInt(this.effects.length)]; + return ( + move.doesFlagEffectApply({ flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon }) && + !attacker.status && + (this.chance === -1 || pokemon.randBattleSeedInt(100) < this.chance) && + attacker.canSetStatus(effect, true, false, pokemon) + ); } - override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { - const effect = this.effects.length === 1 ? this.effects[0] : this.effects[pokemon.randBattleSeedInt(this.effects.length)]; + override applyPostDefend( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + attacker: Pokemon, + _move: Move, + _hitResult: HitResult, + _args: any[], + ): void { + const effect = + this.effects.length === 1 ? this.effects[0] : this.effects[pokemon.randBattleSeedInt(this.effects.length)]; attacker.trySetStatus(effect, true, pokemon); } } @@ -867,12 +1357,30 @@ export class EffectSporeAbAttr extends PostDefendContactApplyStatusEffectAbAttr super(10, StatusEffect.POISON, StatusEffect.PARALYSIS, StatusEffect.SLEEP); } - override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - return !(attacker.hasAbility(AbilityId.OVERCOAT) || attacker.isOfType(PokemonType.GRASS)) - && super.canApplyPostDefend(pokemon, passive, simulated, attacker, move, hitResult, args); + override canApplyPostDefend( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + attacker: Pokemon, + move: Move, + hitResult: HitResult | null, + args: any[], + ): boolean { + return ( + !(attacker.hasAbility(AbilityId.OVERCOAT) || attacker.isOfType(PokemonType.GRASS)) && + super.canApplyPostDefend(pokemon, passive, simulated, attacker, move, hitResult, args) + ); } - override applyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): void { + override applyPostDefend( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + attacker: Pokemon, + move: Move, + hitResult: HitResult, + args: any[], + ): void { super.applyPostDefend(pokemon, passive, simulated, attacker, move, hitResult, args); } } @@ -890,12 +1398,31 @@ export class PostDefendContactApplyTagChanceAbAttr extends PostDefendAbAttr { this.turnCount = turnCount; } - override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - return move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) && pokemon.randBattleSeedInt(100) < this.chance - && attacker.canAddTag(this.tagType); + override canApplyPostDefend( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + attacker: Pokemon, + move: Move, + _hitResult: HitResult | null, + _args: any[], + ): boolean { + return ( + move.doesFlagEffectApply({ flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon }) && + pokemon.randBattleSeedInt(100) < this.chance && + attacker.canAddTag(this.tagType) + ); } - override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { + override applyPostDefend( + _pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + attacker: Pokemon, + move: Move, + _hitResult: HitResult, + _args: any[], + ): void { if (!simulated) { attacker.addTag(this.tagType, this.turnCount, move.id, attacker.id); } @@ -913,14 +1440,26 @@ export class PostDefendCritStatStageChangeAbAttr extends PostDefendAbAttr { this.stages = stages; } - override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { + override applyPostDefend( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + _attacker: Pokemon, + _move: Move, + _hitResult: HitResult, + _args: any[], + ): void { if (!simulated) { - globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ this.stat ], this.stages)); + globalScene.phaseManager.unshiftPhase( + new StatStageChangePhase(pokemon.getBattlerIndex(), true, [this.stat], this.stages), + ); } } override getCondition(): AbAttrCondition { - return (pokemon: Pokemon) => pokemon.turnData.attacksReceived.length !== 0 && pokemon.turnData.attacksReceived[pokemon.turnData.attacksReceived.length - 1].critical; + return (pokemon: Pokemon) => + pokemon.turnData.attacksReceived.length !== 0 && + pokemon.turnData.attacksReceived[pokemon.turnData.attacksReceived.length - 1].critical; } } @@ -933,12 +1472,31 @@ export class PostDefendContactDamageAbAttr extends PostDefendAbAttr { this.damageRatio = damageRatio; } - override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - return !simulated && move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) - && !attacker.hasAbilityWithAttr(BlockNonDirectDamageAbAttr); + override canApplyPostDefend( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + attacker: Pokemon, + move: Move, + _hitResult: HitResult | null, + _args: any[], + ): boolean { + return ( + !simulated && + move.doesFlagEffectApply({ flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon }) && + !attacker.hasAbilityWithAttr(BlockNonDirectDamageAbAttr) + ); } - override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { + override applyPostDefend( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + attacker: Pokemon, + _move: Move, + _hitResult: HitResult, + _args: any[], + ): void { attacker.damageAndUpdate(toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)), { result: HitResult.INDIRECT }); attacker.turnData.damageTaken += toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)); } @@ -946,7 +1504,7 @@ export class PostDefendContactDamageAbAttr extends PostDefendAbAttr { override getTriggerMessage(pokemon: Pokemon, abilityName: string, ..._args: any[]): string { return i18next.t("abilityTriggers:postDefendContactDamage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - abilityName + abilityName, }); } } @@ -966,11 +1524,30 @@ export class PostDefendPerishSongAbAttr extends PostDefendAbAttr { this.turns = turns; } - override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - return move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) && !attacker.getTag(BattlerTagType.PERISH_SONG); + override canApplyPostDefend( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + attacker: Pokemon, + move: Move, + _hitResult: HitResult | null, + _args: any[], + ): boolean { + return ( + move.doesFlagEffectApply({ flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon }) && + !attacker.getTag(BattlerTagType.PERISH_SONG) + ); } - override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { + override applyPostDefend( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + attacker: Pokemon, + _move: Move, + _hitResult: HitResult, + _args: any[], + ): void { if (!simulated) { attacker.addTag(BattlerTagType.PERISH_SONG, this.turns); pokemon.addTag(BattlerTagType.PERISH_SONG, this.turns); @@ -978,7 +1555,10 @@ export class PostDefendPerishSongAbAttr extends PostDefendAbAttr { } override getTriggerMessage(pokemon: Pokemon, abilityName: string, ..._args: any[]): string { - return i18next.t("abilityTriggers:perishBody", { pokemonName: getPokemonNameWithAffix(pokemon), abilityName: abilityName }); + return i18next.t("abilityTriggers:perishBody", { + pokemonName: getPokemonNameWithAffix(pokemon), + abilityName: abilityName, + }); } } @@ -993,12 +1573,31 @@ export class PostDefendWeatherChangeAbAttr extends PostDefendAbAttr { this.condition = condition; } - override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - return (!(this.condition && !this.condition(pokemon, attacker, move)) - && !globalScene.arena.weather?.isImmutable() && globalScene.arena.canSetWeather(this.weatherType)); + override canApplyPostDefend( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + attacker: Pokemon, + move: Move, + _hitResult: HitResult | null, + _args: any[], + ): boolean { + return ( + !(this.condition && !this.condition(pokemon, attacker, move)) && + !globalScene.arena.weather?.isImmutable() && + globalScene.arena.canSetWeather(this.weatherType) + ); } - override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { + override applyPostDefend( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + _attacker: Pokemon, + _move: Move, + _hitResult: HitResult, + _args: any[], + ): void { if (!simulated) { globalScene.arena.trySetWeather(this.weatherType, pokemon); } @@ -1006,16 +1605,30 @@ export class PostDefendWeatherChangeAbAttr extends PostDefendAbAttr { } export class PostDefendAbilitySwapAbAttr extends PostDefendAbAttr { - constructor() { - super(); + override canApplyPostDefend( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + attacker: Pokemon, + move: Move, + _hitResult: HitResult | null, + _args: any[], + ): boolean { + return ( + move.doesFlagEffectApply({ flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon }) && + attacker.getAbility().isSwappable + ); } - override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - return move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) - && attacker.getAbility().isSwappable; - } - - override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, args: any[]): void { + override applyPostDefend( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + attacker: Pokemon, + _move: Move, + _hitResult: HitResult, + _args: any[], + ): void { if (!simulated) { const tempAbility = attacker.getAbility(); attacker.setTempAbility(pokemon.getAbility()); @@ -1024,7 +1637,9 @@ export class PostDefendAbilitySwapAbAttr extends PostDefendAbAttr { } override getTriggerMessage(pokemon: Pokemon, _abilityName: string, ..._args: any[]): string { - return i18next.t("abilityTriggers:postDefendAbilitySwap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }); + return i18next.t("abilityTriggers:postDefendAbilitySwap", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + }); } } @@ -1036,12 +1651,31 @@ export class PostDefendAbilityGiveAbAttr extends PostDefendAbAttr { this.ability = ability; } - override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - return move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) && attacker.getAbility().isSuppressable - && !attacker.getAbility().hasAttr(PostDefendAbilityGiveAbAttr); + override canApplyPostDefend( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + attacker: Pokemon, + move: Move, + _hitResult: HitResult | null, + _args: any[], + ): boolean { + return ( + move.doesFlagEffectApply({ flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon }) && + attacker.getAbility().isSuppressable && + !attacker.getAbility().hasAttr(PostDefendAbilityGiveAbAttr) + ); } - override applyPostDefend(_pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { + override applyPostDefend( + _pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + attacker: Pokemon, + _move: Move, + _hitResult: HitResult, + _args: any[], + ): void { if (!simulated) { attacker.setTempAbility(allAbilities[this.ability]); } @@ -1050,7 +1684,7 @@ export class PostDefendAbilityGiveAbAttr extends PostDefendAbAttr { override getTriggerMessage(pokemon: Pokemon, abilityName: string, ..._args: any[]): string { return i18next.t("abilityTriggers:postDefendAbilityGive", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - abilityName + abilityName, }); } } @@ -1066,12 +1700,31 @@ export class PostDefendMoveDisableAbAttr extends PostDefendAbAttr { this.chance = chance; } - override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - return attacker.getTag(BattlerTagType.DISABLED) === null - && move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) && (this.chance === -1 || pokemon.randBattleSeedInt(100) < this.chance); + override canApplyPostDefend( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + attacker: Pokemon, + move: Move, + _hitResult: HitResult | null, + _args: any[], + ): boolean { + return ( + attacker.getTag(BattlerTagType.DISABLED) === null && + move.doesFlagEffectApply({ flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon }) && + (this.chance === -1 || pokemon.randBattleSeedInt(100) < this.chance) + ); } - override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { + override applyPostDefend( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + attacker: Pokemon, + move: Move, + _hitResult: HitResult, + _args: any[], + ): void { if (!simulated) { this.attacker = attacker; this.move = move; @@ -1093,35 +1746,52 @@ export class PostStatStageChangeStatStageChangeAbAttr extends PostStatStageChang this.stages = stages; } - override canApplyPostStatStageChange(pokemon: Pokemon, simulated: boolean, statStagesChanged: BattleStat[], stagesChanged: integer, selfTarget: boolean, args: any[]): boolean { + override canApplyPostStatStageChange( + pokemon: Pokemon, + _simulated: boolean, + statStagesChanged: BattleStat[], + stagesChanged: number, + selfTarget: boolean, + _args: any[], + ): boolean { return this.condition(pokemon, statStagesChanged, stagesChanged) && !selfTarget; } - override applyPostStatStageChange(pokemon: Pokemon, simulated: boolean, statStagesChanged: BattleStat[], stagesChanged: number, selfTarget: boolean, args: any[]): void { + override applyPostStatStageChange( + pokemon: Pokemon, + simulated: boolean, + _statStagesChanged: BattleStat[], + _stagesChanged: number, + _selfTarget: boolean, + _args: any[], + ): void { if (!simulated) { - globalScene.phaseManager.unshiftPhase(new StatStageChangePhase((pokemon).getBattlerIndex(), true, this.statsToChange, this.stages)); + globalScene.phaseManager.unshiftPhase( + new StatStageChangePhase(pokemon.getBattlerIndex(), true, this.statsToChange, this.stages), + ); } } } export class PreAttackAbAttr extends AbAttr { canApplyPreAttack( - pokemon: Pokemon, - passive: boolean, - simulated: boolean, - defender: Pokemon | null, - move: Move, - args: any[]): boolean { + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _defender: Pokemon | null, + _move: Move, + _args: any[], + ): boolean { return true; } applyPreAttack( - pokemon: Pokemon, - passive: boolean, - simulated: boolean, - defender: Pokemon | null, - move: Move, - args: any[], + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _defender: Pokemon | null, + _move: Move, + _args: any[], ): void {} } @@ -1138,8 +1808,8 @@ export class MoveEffectChanceMultiplierAbAttr extends AbAttr { this.chanceMultiplier = chanceMultiplier; } - override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - const exceptMoves = [ MoveId.ORDER_UP, MoveId.ELECTRO_SHOT ]; + override canApply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, args: any[]): boolean { + const exceptMoves = [MoveId.ORDER_UP, MoveId.ELECTRO_SHOT]; return !((args[0] as NumberHolder).value <= 0 || exceptMoves.includes((args[1] as Move).id)); } @@ -1147,7 +1817,13 @@ export class MoveEffectChanceMultiplierAbAttr extends AbAttr { * @param args [0]: {@linkcode NumberHolder} Move additional effect chance. Has to be higher than or equal to 0. * [1]: {@linkcode MoveId } Move used by the ability user. */ - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _cancelled: BooleanHolder, + args: any[], + ): void { (args[0] as NumberHolder).value *= this.chanceMultiplier; (args[0] as NumberHolder).value = Math.min((args[0] as NumberHolder).value, 100); } @@ -1159,35 +1835,58 @@ export class MoveEffectChanceMultiplierAbAttr extends AbAttr { * @see {@linkcode applyPreDefend} */ export class IgnoreMoveEffectsAbAttr extends PreDefendAbAttr { - constructor(showAbility: boolean = false) { + constructor(showAbility = false) { super(showAbility); } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move | null, cancelled: BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _attacker: Pokemon, + _move: Move | null, + _cancelled: BooleanHolder | null, + args: any[], + ): boolean { return (args[0] as NumberHolder).value > 0; } /** * @param args [0]: {@linkcode NumberHolder} Move additional effect chance. */ - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { + override applyPreDefend( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _attacker: Pokemon, + _move: Move, + _cancelled: BooleanHolder, + args: any[], + ): void { (args[0] as NumberHolder).value = 0; } } export class VariableMovePowerAbAttr extends PreAttackAbAttr { - override canApplyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, args: any[]): boolean { + override canApplyPreAttack( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _defender: Pokemon, + _move: Move, + _args: any[], + ): boolean { return true; } } export class FieldPreventExplosiveMovesAbAttr extends AbAttr { override apply( - pokemon: Pokemon, - passive: boolean, - simulated: boolean, + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, cancelled: BooleanHolder, - args: any[], + _args: any[], ): void { cancelled.value = true; } @@ -1213,33 +1912,56 @@ export class FieldMultiplyStatAbAttr extends AbAttr { this.canStack = canStack; } - canApplyFieldStat(pokemon: Pokemon, passive: boolean, simulated: boolean, stat: Stat, statValue: NumberHolder, checkedPokemon: Pokemon, hasApplied: BooleanHolder, args: any[]): boolean { - return this.canStack || !hasApplied.value - && this.stat === stat && checkedPokemon.getAbilityAttrs(FieldMultiplyStatAbAttr).every(attr => (attr as FieldMultiplyStatAbAttr).stat !== stat); + canApplyFieldStat( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + stat: Stat, + _statValue: NumberHolder, + checkedPokemon: Pokemon, + hasApplied: BooleanHolder, + _args: any[], + ): boolean { + return ( + this.canStack || + (!hasApplied.value && + this.stat === stat && + checkedPokemon + .getAbilityAttrs(FieldMultiplyStatAbAttr) + .every(attr => (attr as FieldMultiplyStatAbAttr).stat !== stat)) + ); } /** * applyFieldStat: Tries to multiply a Pokemon's Stat - * @param pokemon {@linkcode Pokemon} the Pokemon using this ability - * @param passive {@linkcode boolean} unused - * @param stat {@linkcode Stat} the type of the checked stat + * @param _pokemon {@linkcode Pokemon} the Pokemon using this ability + * @param _passive {@linkcode boolean} unused + * @param _stat {@linkcode Stat} the type of the checked stat * @param statValue {@linkcode NumberHolder} the value of the checked stat - * @param checkedPokemon {@linkcode Pokemon} the Pokemon this ability is targeting + * @param _checkedPokemon {@linkcode Pokemon} the Pokemon this ability is targeting * @param hasApplied {@linkcode BooleanHolder} whether or not another multiplier has been applied to this stat - * @param args {any[]} unused + * @param _args {any[]} unused */ - applyFieldStat(pokemon: Pokemon, passive: boolean, simulated: boolean, stat: Stat, statValue: NumberHolder, checkedPokemon: Pokemon, hasApplied: BooleanHolder, args: any[]): void { + applyFieldStat( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _stat: Stat, + statValue: NumberHolder, + _checkedPokemon: Pokemon, + hasApplied: BooleanHolder, + _args: any[], + ): void { statValue.value *= this.multiplier; hasApplied.value = true; } - } export class MoveTypeChangeAbAttr extends PreAttackAbAttr { constructor( private newType: PokemonType, private powerMultiplier: number, - private condition?: PokemonAttackCondition + private condition?: PokemonAttackCondition, ) { super(false); } @@ -1260,23 +1982,41 @@ export class MoveTypeChangeAbAttr extends PreAttackAbAttr { * @param _args - args[0] holds the type that the move is changed to, args[1] holds the multiplier * @returns whether the move type change attribute can be applied */ - override canApplyPreAttack(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _defender: Pokemon | null, move: Move, _args: [NumberHolder?, NumberHolder?, ...any]): boolean { - return (!this.condition || this.condition(pokemon, _defender, move)) && - !noAbilityTypeOverrideMoves.has(move.id) && - (!pokemon.isTerastallized || - (move.id !== MoveId.TERA_BLAST && - (move.id !== MoveId.TERA_STARSTORM || pokemon.getTeraType() !== PokemonType.STELLAR || !pokemon.hasSpecies(SpeciesId.TERAPAGOS)))); + override canApplyPreAttack( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _defender: Pokemon | null, + move: Move, + _args: [NumberHolder?, NumberHolder?, ...any], + ): boolean { + return ( + (!this.condition || this.condition(pokemon, _defender, move)) && + !noAbilityTypeOverrideMoves.has(move.id) && + (!pokemon.isTerastallized || + (move.id !== MoveId.TERA_BLAST && + (move.id !== MoveId.TERA_STARSTORM || + pokemon.getTeraType() !== PokemonType.STELLAR || + !pokemon.hasSpecies(SpeciesId.TERAPAGOS)))) + ); } /** - * @param pokemon - The pokemon that has the move type changing ability and is using the attacking move - * @param passive - Unused - * @param simulated - Unused - * @param defender - The pokemon being attacked (unused) - * @param move - The move being used + * @param _pokemon - The pokemon that has the move type changing ability and is using the attacking move + * @param _passive - Unused + * @param _simulated - Unused + * @param _defender - The pokemon being attacked (unused) + * @param _move - The move being used * @param args - args[0] holds the type that the move is changed to, args[1] holds the multiplier */ - override applyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, args: [NumberHolder?, NumberHolder?, ...any]): void { + override applyPreAttack( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _defender: Pokemon, + _move: Move, + args: [NumberHolder?, NumberHolder?, ...any], + ): void { if (args[0] && args[0] instanceof NumberHolder) { args[0].value = this.newType; } @@ -1294,20 +2034,31 @@ export class PokemonTypeChangeAbAttr extends PreAttackAbAttr { super(true); } - override canApplyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon | null, move: Move, args: any[]): boolean { - if (!pokemon.isTerastallized && - move.id !== MoveId.STRUGGLE && - /** - * Skip moves that call other moves because these moves generate a following move that will trigger this ability attribute - * @see {@link https://bulbapedia.bulbagarden.net/wiki/Category:Moves_that_call_other_moves} - */ - !move.findAttr((attr) => - attr instanceof RandomMovesetMoveAttr || - attr instanceof RandomMoveAttr || - attr instanceof NaturePowerAttr || - attr instanceof CopyMoveAttr)) { + override canApplyPreAttack( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _defender: Pokemon | null, + move: Move, + _args: any[], + ): boolean { + if ( + !pokemon.isTerastallized && + move.id !== MoveId.STRUGGLE && + /** + * Skip moves that call other moves because these moves generate a following move that will trigger this ability attribute + * @see {@link https://bulbapedia.bulbagarden.net/wiki/Category:Moves_that_call_other_moves} + */ + !move.findAttr( + attr => + attr instanceof RandomMovesetMoveAttr || + attr instanceof RandomMoveAttr || + attr instanceof NaturePowerAttr || + attr instanceof CopyMoveAttr, + ) + ) { const moveType = pokemon.getMoveType(move); - if (pokemon.getTypes().some((t) => t !== moveType)) { + if (pokemon.getTypes().some(t => t !== moveType)) { this.moveType = moveType; return true; } @@ -1315,17 +2066,24 @@ export class PokemonTypeChangeAbAttr extends PreAttackAbAttr { return false; } - override applyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, args: any[]): void { + override applyPreAttack( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + _defender: Pokemon, + move: Move, + _args: any[], + ): void { const moveType = pokemon.getMoveType(move); if (!simulated) { this.moveType = moveType; - pokemon.summonData.types = [ moveType ]; + pokemon.summonData.types = [moveType]; pokemon.updateInfo(); } } - getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { + getTriggerMessage(pokemon: Pokemon, _abilityName: string, ..._args: any[]): string { return i18next.t("abilityTriggers:pokemonTypeChange", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveType: i18next.t(`pokemonInfo:Type.${PokemonType[this.moveType]}`), @@ -1346,7 +2104,14 @@ export class AddSecondStrikeAbAttr extends PreAttackAbAttr { this.damageMultiplier = damageMultiplier; } - override canApplyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon | null, move: Move, args: any[]): boolean { + override canApplyPreAttack( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _defender: Pokemon | null, + move: Move, + _args: any[], + ): boolean { return move.canBeMultiStrikeEnhanced(pokemon, true); } @@ -1354,14 +2119,21 @@ export class AddSecondStrikeAbAttr extends PreAttackAbAttr { * If conditions are met, this doubles the move's hit count (via args[1]) * or multiplies the damage of secondary strikes (via args[2]) * @param pokemon the {@linkcode Pokemon} using the move - * @param passive n/a - * @param defender n/a - * @param move the {@linkcode Move} used by the ability source + * @param _passive n/a + * @param _defender n/a + * @param _move the {@linkcode Move} used by the ability source * @param args Additional arguments: * - `[0]` the number of strikes this move currently has ({@linkcode NumberHolder}) * - `[1]` the damage multiplier for the current strike ({@linkcode NumberHolder}) */ - override applyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, args: any[]): void { + override applyPreAttack( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _defender: Pokemon, + _move: Move, + args: any[], + ): void { const hitCount = args[0] as NumberHolder; const multiplier = args[1] as NumberHolder; if (hitCount?.value) { @@ -1390,19 +2162,33 @@ export class DamageBoostAbAttr extends PreAttackAbAttr { this.condition = condition; } - override canApplyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon | null, move: Move, args: any[]): boolean { + override canApplyPreAttack( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + defender: Pokemon | null, + move: Move, + _args: any[], + ): boolean { return this.condition(pokemon, defender, move); } /** * - * @param pokemon the attacker pokemon - * @param passive N/A - * @param defender the target pokemon - * @param move the move used by the attacker pokemon + * @param _pokemon the attacker pokemon + * @param _passive N/A + * @param _defender the target pokemon + * @param _move the move used by the attacker pokemon * @param args Utils.NumberHolder as damage */ - override applyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, args: any[]): void { + override applyPreAttack( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _defender: Pokemon, + _move: Move, + args: any[], + ): void { const power = args[0] as NumberHolder; power.value = toDmgValue(power.value * this.damageMultiplier); } @@ -1412,34 +2198,49 @@ export class MovePowerBoostAbAttr extends VariableMovePowerAbAttr { private condition: PokemonAttackCondition; private powerMultiplier: number; - constructor(condition: PokemonAttackCondition, powerMultiplier: number, showAbility: boolean = false) { + constructor(condition: PokemonAttackCondition, powerMultiplier: number, showAbility = false) { super(showAbility); this.condition = condition; this.powerMultiplier = powerMultiplier; } - override canApplyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon | null, move: Move, args: any[]): boolean { + override canApplyPreAttack( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + defender: Pokemon | null, + move: Move, + _args: any[], + ): boolean { return this.condition(pokemon, defender, move); } - override applyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, args: any[]): void { + override applyPreAttack( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _defender: Pokemon, + _move: Move, + args: any[], + ): void { (args[0] as NumberHolder).value *= this.powerMultiplier; } } export class MoveTypePowerBoostAbAttr extends MovePowerBoostAbAttr { constructor(boostedType: PokemonType, powerMultiplier?: number) { - super((pokemon, defender, move) => pokemon?.getMoveType(move) === boostedType, powerMultiplier || 1.5, false); + super((pokemon, _defender, move) => pokemon?.getMoveType(move) === boostedType, powerMultiplier || 1.5, false); } } export class LowHpMoveTypePowerBoostAbAttr extends MoveTypePowerBoostAbAttr { + // biome-ignore lint/complexity/noUselessConstructor: Changes the constructor params constructor(boostedType: PokemonType) { super(boostedType); } getCondition(): AbAttrCondition { - return (pokemon) => pokemon.getHpRatio() <= 0.33; + return pokemon => pokemon.getHpRatio() <= 0.33; } } @@ -1460,11 +2261,25 @@ export class VariableMovePowerBoostAbAttr extends VariableMovePowerAbAttr { this.mult = mult; } - override canApplyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, args: any[]): boolean { + override canApplyPreAttack( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + defender: Pokemon, + move: Move, + _args: any[], + ): boolean { return this.mult(pokemon, defender, move) !== 1; } - override applyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, args: any[]): void { + override applyPreAttack( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + defender: Pokemon, + move: Move, + args: any[], + ): void { const multiplier = this.mult(pokemon, defender, move); (args[0] as NumberHolder).value *= multiplier; } @@ -1489,11 +2304,25 @@ export class FieldMovePowerBoostAbAttr extends AbAttr { this.powerMultiplier = powerMultiplier; } - canApplyPreAttack(pokemon: Pokemon | null, passive: boolean | null, simulated: boolean, defender: Pokemon | null, move: Move, args: any[]): boolean { + canApplyPreAttack( + _pokemon: Pokemon | null, + _passive: boolean | null, + _simulated: boolean, + _defender: Pokemon | null, + _move: Move, + _args: any[], + ): boolean { return true; // logic for this attr is handled in move.ts instead of normally } - applyPreAttack(pokemon: Pokemon | null, passive: boolean | null, simulated: boolean, defender: Pokemon | null, move: Move, args: any[]): void { + applyPreAttack( + pokemon: Pokemon | null, + _passive: boolean | null, + _simulated: boolean, + defender: Pokemon | null, + move: Move, + args: any[], + ): void { if (this.condition(pokemon, defender, move)) { (args[0] as NumberHolder).value *= this.powerMultiplier; } @@ -1510,7 +2339,7 @@ export class PreAttackFieldMoveTypePowerBoostAbAttr extends FieldMovePowerBoostA * @param powerMultiplier - The multiplier to apply to the move's power, defaults to 1.5 if not provided. */ constructor(boostedType: PokemonType, powerMultiplier?: number) { - super((pokemon, defender, move) => pokemon?.getMoveType(move) === boostedType, powerMultiplier || 1.5); + super((pokemon, _defender, move) => pokemon?.getMoveType(move) === boostedType, powerMultiplier || 1.5); } } @@ -1518,13 +2347,13 @@ export class PreAttackFieldMoveTypePowerBoostAbAttr extends FieldMovePowerBoostA * Boosts the power of a specific type of move for all Pokemon in the field. * @extends PreAttackFieldMoveTypePowerBoostAbAttr */ -export class FieldMoveTypePowerBoostAbAttr extends PreAttackFieldMoveTypePowerBoostAbAttr { } +export class FieldMoveTypePowerBoostAbAttr extends PreAttackFieldMoveTypePowerBoostAbAttr {} /** * Boosts the power of a specific type of move for the user and its allies. * @extends PreAttackFieldMoveTypePowerBoostAbAttr */ -export class UserFieldMoveTypePowerBoostAbAttr extends PreAttackFieldMoveTypePowerBoostAbAttr { } +export class UserFieldMoveTypePowerBoostAbAttr extends PreAttackFieldMoveTypePowerBoostAbAttr {} /** * Boosts the power of moves in specified categories. @@ -1536,7 +2365,7 @@ export class AllyMoveCategoryPowerBoostAbAttr extends FieldMovePowerBoostAbAttr * @param powerMultiplier - The multiplier to apply to the move's power. */ constructor(boostedCategories: MoveCategory[], powerMultiplier: number) { - super((pokemon, defender, move) => boostedCategories.includes(move.category), powerMultiplier); + super((_pokemon, _defender, move) => boostedCategories.includes(move.category), powerMultiplier); } } @@ -1556,21 +2385,23 @@ export class StatMultiplierAbAttr extends AbAttr { canApplyStatStage( pokemon: Pokemon, _passive: boolean, - simulated: boolean, + _simulated: boolean, stat: BattleStat, - statValue: NumberHolder, - args: any[]): boolean { - const move = (args[0] as Move); + _statValue: NumberHolder, + args: any[], + ): boolean { + const move = args[0] as Move; return stat === this.stat && (!this.condition || this.condition(pokemon, null, move)); } applyStatStage( - pokemon: Pokemon, + _pokemon: Pokemon, _passive: boolean, - simulated: boolean, - stat: BattleStat, + _simulated: boolean, + _stat: BattleStat, statValue: NumberHolder, - args: any[]): void { + _args: any[], + ): void { statValue.value *= this.multiplier; } } @@ -1579,7 +2410,10 @@ export class PostAttackAbAttr extends AbAttr { private attackCondition: PokemonAttackCondition; /** The default attackCondition requires that the selected move is a damaging move */ - constructor(attackCondition: PokemonAttackCondition = (user, target, move) => (move.category !== MoveCategory.STATUS), showAbility = true) { + constructor( + attackCondition: PokemonAttackCondition = (_user, _target, move) => move.category !== MoveCategory.STATUS, + showAbility = true, + ) { super(showAbility); this.attackCondition = attackCondition; @@ -1592,25 +2426,27 @@ export class PostAttackAbAttr extends AbAttr { */ canApplyPostAttack( pokemon: Pokemon, - passive: boolean, - simulated: boolean, + _passive: boolean, + _simulated: boolean, defender: Pokemon, move: Move, - hitResult: HitResult | null, - args: any[]): boolean { + _hitResult: HitResult | null, + _args: any[], + ): boolean { // When attackRequired is true, we require the move to be an attack move and to deal damage before checking secondary requirements. // If attackRequired is false, we always defer to the secondary requirements. return this.attackCondition(pokemon, defender, move); } applyPostAttack( - pokemon: Pokemon, - passive: boolean, - simulated: boolean, - defender: Pokemon, - move: Move, - hitResult: HitResult | null, - args: any[]): void {} + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _defender: Pokemon, + _move: Move, + _hitResult: HitResult | null, + _args: any[], + ): void {} } /** @@ -1628,7 +2464,7 @@ export class AllyStatMultiplierAbAttr extends AbAttr { * @param multipler - The multiplier to apply to the stat * @param ignorable - Whether the multiplier can be ignored by mold breaker-like moves and abilities */ - constructor(stat: BattleStat, multiplier: number, ignorable: boolean = true) { + constructor(stat: BattleStat, multiplier: number, ignorable = true) { super(false); this.stat = stat; @@ -1648,23 +2484,41 @@ export class AllyStatMultiplierAbAttr extends AbAttr { * @param _args - unused * @returns `true` if this changed the checked stat, `false` otherwise. */ - applyAllyStat(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _stat: BattleStat, statValue: NumberHolder, _checkedPokemon: Pokemon, _ignoreAbility: boolean, _args: any[]) { + applyAllyStat( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _stat: BattleStat, + statValue: NumberHolder, + _checkedPokemon: Pokemon, + _ignoreAbility: boolean, + _args: any[], + ) { statValue.value *= this.multiplier; } /** * Check if this ability can apply to the checked stat. - * @param pokemon - The ally {@linkcode Pokemon} with the ability (unused) + * @param _pokemon - The ally {@linkcode Pokemon} with the ability (unused) * @param passive - unused - * @param simulated - Whether the ability is being simulated (unused) + * @param _simulated - Whether the ability is being simulated (unused) * @param stat - The type of the checked {@linkcode Stat} - * @param statValue - {@linkcode NumberHolder} containing the value of the checked stat - * @param checkedPokemon - The {@linkcode Pokemon} this ability is targeting (unused) + * @param _statValue - {@linkcode NumberHolder} containing the value of the checked stat + * @param _checkedPokemon - The {@linkcode Pokemon} this ability is targeting (unused) * @param ignoreAbility - Whether the ability should be ignored if possible - * @param args - unused + * @param _args - unused * @returns `true` if this can apply to the checked stat, `false` otherwise. */ - canApplyAllyStat(pokemon: Pokemon, _passive: boolean, simulated: boolean, stat: BattleStat, statValue: NumberHolder, checkedPokemon: Pokemon, ignoreAbility: boolean, args: any[]): boolean { + canApplyAllyStat( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + stat: BattleStat, + _statValue: NumberHolder, + _checkedPokemon: Pokemon, + ignoreAbility: boolean, + _args: any[], + ): boolean { return stat === this.stat && !(ignoreAbility && this.ignorable); } } @@ -1675,7 +2529,7 @@ export class AllyStatMultiplierAbAttr extends AbAttr { */ export class GorillaTacticsAbAttr extends PostAttackAbAttr { constructor() { - super((user, target, move) => true, false); + super((_user, _target, _move) => true, false); } override canApplyPostAttack( @@ -1685,29 +2539,33 @@ export class GorillaTacticsAbAttr extends PostAttackAbAttr { defender: Pokemon, move: Move, hitResult: HitResult | null, - args: any[]): boolean { - return super.canApplyPostAttack(pokemon, passive, simulated, defender, move, hitResult, args) - && simulated || !pokemon.getTag(BattlerTagType.GORILLA_TACTICS); + args: any[], + ): boolean { + return ( + (super.canApplyPostAttack(pokemon, passive, simulated, defender, move, hitResult, args) && simulated) || + !pokemon.getTag(BattlerTagType.GORILLA_TACTICS) + ); } /** * * @param {Pokemon} pokemon the {@linkcode Pokemon} with this ability - * @param passive n/a + * @param _passive n/a * @param simulated whether the ability is being simulated - * @param defender n/a - * @param move n/a - * @param hitResult n/a - * @param args n/a + * @param _defender n/a + * @param _move n/a + * @param _hitResult n/a + * @param _args n/a */ override applyPostAttack( pokemon: Pokemon, - passive: boolean, + _passive: boolean, simulated: boolean, - defender: Pokemon, - move: Move, - hitResult: HitResult | null, - args: any[]): void { + _defender: Pokemon, + _move: Move, + _hitResult: HitResult | null, + _args: any[], + ): void { if (!simulated) { pokemon.addTag(BattlerTagType.GORILLA_TACTICS); } @@ -1731,14 +2589,15 @@ export class PostAttackStealHeldItemAbAttr extends PostAttackAbAttr { defender: Pokemon, move: Move, hitResult: HitResult, - args: any[]): boolean { + args: any[], + ): boolean { if ( super.canApplyPostAttack(pokemon, passive, simulated, defender, move, hitResult, args) && !simulated && hitResult < HitResult.NO_EFFECT && (!this.stealCondition || this.stealCondition(pokemon, defender, move)) ) { - const heldItems = this.getTargetHeldItems(defender).filter((i) => i.isTransferable); + const heldItems = this.getTargetHeldItems(defender).filter(i => i.isTransferable); if (heldItems.length) { // Ensure that the stolen item in testing is the same as when the effect is applied this.stolenItem = heldItems[pokemon.randBattleSeedInt(heldItems.length)]; @@ -1753,14 +2612,14 @@ export class PostAttackStealHeldItemAbAttr extends PostAttackAbAttr { override applyPostAttack( pokemon: Pokemon, - passive: boolean, - simulated: boolean, + _passive: boolean, + _simulated: boolean, defender: Pokemon, - move: Move, - hitResult: HitResult, - args: any[], + _move: Move, + _hitResult: HitResult, + _args: any[], ): void { - const heldItems = this.getTargetHeldItems(defender).filter((i) => i.isTransferable); + const heldItems = this.getTargetHeldItems(defender).filter(i => i.isTransferable); if (!this.stolenItem) { this.stolenItem = heldItems[pokemon.randBattleSeedInt(heldItems.length)]; } @@ -1777,8 +2636,10 @@ export class PostAttackStealHeldItemAbAttr extends PostAttackAbAttr { } getTargetHeldItems(target: Pokemon): PokemonHeldItemModifier[] { - return globalScene.findModifiers(m => m instanceof PokemonHeldItemModifier - && m.pokemonId === target.id, target.isPlayer()) as PokemonHeldItemModifier[]; + return globalScene.findModifiers( + m => m instanceof PokemonHeldItemModifier && m.pokemonId === target.id, + target.isPlayer(), + ) as PokemonHeldItemModifier[]; } } @@ -1795,21 +2656,44 @@ export class PostAttackApplyStatusEffectAbAttr extends PostAttackAbAttr { this.effects = effects; } - override canApplyPostAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { + override canApplyPostAttack( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + attacker: Pokemon, + move: Move, + hitResult: HitResult | null, + args: any[], + ): boolean { if ( - super.canApplyPostAttack(pokemon, passive, simulated, attacker, move, hitResult, args) - && (simulated || !attacker.hasAbilityWithAttr(IgnoreMoveEffectsAbAttr) && pokemon !== attacker - && (!this.contactRequired || move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon})) && pokemon.randBattleSeedInt(100) < this.chance && !pokemon.status) + super.canApplyPostAttack(pokemon, passive, simulated, attacker, move, hitResult, args) && + (simulated || + (!attacker.hasAbilityWithAttr(IgnoreMoveEffectsAbAttr) && + pokemon !== attacker && + (!this.contactRequired || + move.doesFlagEffectApply({ flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon })) && + pokemon.randBattleSeedInt(100) < this.chance && + !pokemon.status)) ) { - const effect = this.effects.length === 1 ? this.effects[0] : this.effects[pokemon.randBattleSeedInt(this.effects.length)]; + const effect = + this.effects.length === 1 ? this.effects[0] : this.effects[pokemon.randBattleSeedInt(this.effects.length)]; return simulated || attacker.canSetStatus(effect, true, false, pokemon); } return false; } - applyPostAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): void { - const effect = this.effects.length === 1 ? this.effects[0] : this.effects[pokemon.randBattleSeedInt(this.effects.length)]; + applyPostAttack( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + attacker: Pokemon, + _move: Move, + _hitResult: HitResult, + _args: any[], + ): void { + const effect = + this.effects.length === 1 ? this.effects[0] : this.effects[pokemon.randBattleSeedInt(this.effects.length)]; attacker.trySetStatus(effect, true, pokemon); } } @@ -1825,8 +2709,11 @@ export class PostAttackApplyBattlerTagAbAttr extends PostAttackAbAttr { private chance: (user: Pokemon, target: Pokemon, move: Move) => number; private effects: BattlerTagType[]; - - constructor(contactRequired: boolean, chance: (user: Pokemon, target: Pokemon, move: Move) => number, ...effects: BattlerTagType[]) { + constructor( + contactRequired: boolean, + chance: (user: Pokemon, target: Pokemon, move: Move) => number, + ...effects: BattlerTagType[] + ) { super(undefined, false); this.contactRequired = contactRequired; @@ -1834,17 +2721,39 @@ export class PostAttackApplyBattlerTagAbAttr extends PostAttackAbAttr { this.effects = effects; } - override canApplyPostAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { + override canApplyPostAttack( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + attacker: Pokemon, + move: Move, + hitResult: HitResult | null, + args: any[], + ): boolean { /**Battler tags inflicted by abilities post attacking are also considered additional effects.*/ - return super.canApplyPostAttack(pokemon, passive, simulated, attacker, move, hitResult, args) && - !attacker.hasAbilityWithAttr(IgnoreMoveEffectsAbAttr) && pokemon !== attacker && - (!this.contactRequired || move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon})) && - pokemon.randBattleSeedInt(100) < this.chance(attacker, pokemon, move) && !pokemon.status; + return ( + super.canApplyPostAttack(pokemon, passive, simulated, attacker, move, hitResult, args) && + !attacker.hasAbilityWithAttr(IgnoreMoveEffectsAbAttr) && + pokemon !== attacker && + (!this.contactRequired || + move.doesFlagEffectApply({ flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon })) && + pokemon.randBattleSeedInt(100) < this.chance(attacker, pokemon, move) && + !pokemon.status + ); } - override applyPostAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): void { + override applyPostAttack( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + attacker: Pokemon, + _move: Move, + _hitResult: HitResult, + _args: any[], + ): void { if (!simulated) { - const effect = this.effects.length === 1 ? this.effects[0] : this.effects[pokemon.randBattleSeedInt(this.effects.length)]; + const effect = + this.effects.length === 1 ? this.effects[0] : this.effects[pokemon.randBattleSeedInt(this.effects.length)]; attacker.addTag(effect); } } @@ -1860,13 +2769,17 @@ export class PostDefendStealHeldItemAbAttr extends PostDefendAbAttr { this.condition = condition; } - override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { - if ( - !simulated && - hitResult < HitResult.NO_EFFECT && - (!this.condition || this.condition(pokemon, attacker, move)) - ) { - const heldItems = this.getTargetHeldItems(attacker).filter((i) => i.isTransferable); + override canApplyPostDefend( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + attacker: Pokemon, + move: Move, + hitResult: HitResult, + _args: any[], + ): boolean { + if (!simulated && hitResult < HitResult.NO_EFFECT && (!this.condition || this.condition(pokemon, attacker, move))) { + const heldItems = this.getTargetHeldItems(attacker).filter(i => i.isTransferable); if (heldItems.length) { this.stolenItem = heldItems[pokemon.randBattleSeedInt(heldItems.length)]; if (globalScene.canTransferHeldItemModifier(this.stolenItem, pokemon)) { @@ -1880,14 +2793,13 @@ export class PostDefendStealHeldItemAbAttr extends PostDefendAbAttr { override applyPostDefend( pokemon: Pokemon, _passive: boolean, - simulated: boolean, + _simulated: boolean, attacker: Pokemon, - move: Move, - hitResult: HitResult, + _move: Move, + _hitResult: HitResult, _args: any[], ): void { - - const heldItems = this.getTargetHeldItems(attacker).filter((i) => i.isTransferable); + const heldItems = this.getTargetHeldItems(attacker).filter(i => i.isTransferable); if (!this.stolenItem) { this.stolenItem = heldItems[pokemon.randBattleSeedInt(heldItems.length)]; } @@ -1904,8 +2816,10 @@ export class PostDefendStealHeldItemAbAttr extends PostDefendAbAttr { } getTargetHeldItems(target: Pokemon): PokemonHeldItemModifier[] { - return globalScene.findModifiers(m => m instanceof PokemonHeldItemModifier - && m.pokemonId === target.id, target.isPlayer()) as PokemonHeldItemModifier[]; + return globalScene.findModifiers( + m => m instanceof PokemonHeldItemModifier && m.pokemonId === target.id, + target.isPlayer(), + ) as PokemonHeldItemModifier[]; } } @@ -1915,30 +2829,31 @@ export class PostDefendStealHeldItemAbAttr extends PostDefendAbAttr { */ export class PostSetStatusAbAttr extends AbAttr { canApplyPostSetStatus( - pokemon: Pokemon, - sourcePokemon: Pokemon | null = null, - passive: boolean, - effect: StatusEffect, - simulated: boolean, - rgs: any[]): boolean { + _pokemon: Pokemon, + _sourcePokemon: Pokemon | null = null, + _passive: boolean, + _effect: StatusEffect, + _simulated: boolean, + _rgs: any[], + ): boolean { return true; } /** * Does nothing after a status condition is set. - * @param pokemon {@linkcode Pokemon} that status condition was set on. - * @param sourcePokemon {@linkcode Pokemon} that that set the status condition. Is `null` if status was not set by a Pokemon. - * @param passive Whether this ability is a passive. - * @param effect {@linkcode StatusEffect} that was set. - * @param args Set of unique arguments needed by this attribute. + * @param _pokemon {@linkcode Pokemon} that status condition was set on. + * @param _sourcePokemon {@linkcode Pokemon} that that set the status condition. Is `null` if status was not set by a Pokemon. + * @param _passive Whether this ability is a passive. + * @param _effect {@linkcode StatusEffect} that was set. + * @param _args Set of unique arguments needed by this attribute. */ applyPostSetStatus( - pokemon: Pokemon, - sourcePokemon: Pokemon | null = null, - passive: boolean, - effect: StatusEffect, - simulated: boolean, - args: any[], + _pokemon: Pokemon, + _sourcePokemon: Pokemon | null = null, + _passive: boolean, + _effect: StatusEffect, + _simulated: boolean, + _args: any[], ): void {} } @@ -1948,17 +2863,24 @@ export class PostSetStatusAbAttr extends AbAttr { * ability attribute. For Synchronize ability. */ export class SynchronizeStatusAbAttr extends PostSetStatusAbAttr { - override canApplyPostSetStatus(pokemon: Pokemon, sourcePokemon: (Pokemon | null) | undefined, passive: boolean, effect: StatusEffect, simulated: boolean, args: any[]): boolean { + override canApplyPostSetStatus( + _pokemon: Pokemon, + sourcePokemon: (Pokemon | null) | undefined, + _passive: boolean, + effect: StatusEffect, + _simulated: boolean, + _args: any[], + ): boolean { /** Synchronizable statuses */ const syncStatuses = new Set([ StatusEffect.BURN, StatusEffect.PARALYSIS, StatusEffect.POISON, - StatusEffect.TOXIC + StatusEffect.TOXIC, ]); // synchronize does not need to check canSetStatus because the ability shows even if it fails to set the status - return ((sourcePokemon ?? false) && syncStatuses.has(effect)); + return (sourcePokemon ?? false) && syncStatuses.has(effect); } /** @@ -1966,11 +2888,18 @@ export class SynchronizeStatusAbAttr extends PostSetStatusAbAttr { * was set by a source Pokemon, set the source Pokemon's status to the same `StatusEffect`. * @param pokemon {@linkcode Pokemon} that status condition was set on. * @param sourcePokemon {@linkcode Pokemon} that that set the status condition. Is null if status was not set by a Pokemon. - * @param passive Whether this ability is a passive. + * @param _passive Whether this ability is a passive. * @param effect {@linkcode StatusEffect} that was set. - * @param args Set of unique arguments needed by this attribute. + * @param _args Set of unique arguments needed by this attribute. */ - override applyPostSetStatus(pokemon: Pokemon, sourcePokemon: Pokemon | null = null, passive: boolean, effect: StatusEffect, simulated: boolean, args: any[]): void { + override applyPostSetStatus( + pokemon: Pokemon, + sourcePokemon: Pokemon | null = null, + _passive: boolean, + effect: StatusEffect, + simulated: boolean, + _args: any[], + ): void { if (!simulated && sourcePokemon) { sourcePokemon.trySetStatus(effect, true, pokemon); } @@ -1978,11 +2907,11 @@ export class SynchronizeStatusAbAttr extends PostSetStatusAbAttr { } export class PostVictoryAbAttr extends AbAttr { - canApplyPostVictory(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + canApplyPostVictory(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { return true; } - applyPostVictory(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void {} + applyPostVictory(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): void {} } class PostVictoryStatStageChangeAbAttr extends PostVictoryAbAttr { @@ -1996,10 +2925,12 @@ class PostVictoryStatStageChangeAbAttr extends PostVictoryAbAttr { this.stages = stages; } - override applyPostVictory(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostVictory(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { const stat = typeof this.stat === "function" ? this.stat(pokemon) : this.stat; if (!simulated) { - globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ stat ], this.stages)); + globalScene.phaseManager.unshiftPhase( + new StatStageChangePhase(pokemon.getBattlerIndex(), true, [stat], this.stages), + ); } } } @@ -2007,18 +2938,18 @@ class PostVictoryStatStageChangeAbAttr extends PostVictoryAbAttr { export class PostVictoryFormChangeAbAttr extends PostVictoryAbAttr { private formFunc: (p: Pokemon) => number; - constructor(formFunc: ((p: Pokemon) => number)) { + constructor(formFunc: (p: Pokemon) => number) { super(true); this.formFunc = formFunc; } - override canApplyPostVictory(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApplyPostVictory(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { const formIndex = this.formFunc(pokemon); return formIndex !== pokemon.formIndex; } - override applyPostVictory(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostVictory(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { if (!simulated) { globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeAbilityTrigger, false); } @@ -2026,11 +2957,23 @@ export class PostVictoryFormChangeAbAttr extends PostVictoryAbAttr { } export class PostKnockOutAbAttr extends AbAttr { - canApplyPostKnockOut(pokemon: Pokemon, passive: boolean, simulated: boolean, knockedOut: Pokemon, args: any[]): boolean { + canApplyPostKnockOut( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _knockedOut: Pokemon, + _args: any[], + ): boolean { return true; } - applyPostKnockOut(pokemon: Pokemon, passive: boolean, simulated: boolean, knockedOut: Pokemon, args: any[]): void {} + applyPostKnockOut( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _knockedOut: Pokemon, + _args: any[], + ): void {} } export class PostKnockOutStatStageChangeAbAttr extends PostKnockOutAbAttr { @@ -2044,27 +2987,48 @@ export class PostKnockOutStatStageChangeAbAttr extends PostKnockOutAbAttr { this.stages = stages; } - override applyPostKnockOut(pokemon: Pokemon, passive: boolean, simulated: boolean, knockedOut: Pokemon, args: any[]): void { + override applyPostKnockOut( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + _knockedOut: Pokemon, + _args: any[], + ): void { const stat = typeof this.stat === "function" ? this.stat(pokemon) : this.stat; if (!simulated) { - globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ stat ], this.stages)); + globalScene.phaseManager.unshiftPhase( + new StatStageChangePhase(pokemon.getBattlerIndex(), true, [stat], this.stages), + ); } } } export class CopyFaintedAllyAbilityAbAttr extends PostKnockOutAbAttr { - constructor() { - super(); - } - - override canApplyPostKnockOut(pokemon: Pokemon, passive: boolean, simulated: boolean, knockedOut: Pokemon, args: any[]): boolean { + override canApplyPostKnockOut( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + knockedOut: Pokemon, + _args: any[], + ): boolean { return pokemon.isPlayer() === knockedOut.isPlayer() && knockedOut.getAbility().isCopiable; } - override applyPostKnockOut(pokemon: Pokemon, passive: boolean, simulated: boolean, knockedOut: Pokemon, args: any[]): void { + override applyPostKnockOut( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + knockedOut: Pokemon, + _args: any[], + ): void { if (!simulated) { pokemon.setTempAbility(knockedOut.getAbility()); - globalScene.phaseManager.queueMessage(i18next.t("abilityTriggers:copyFaintedAllyAbility", { pokemonNameWithAffix: getPokemonNameWithAffix(knockedOut), abilityName: allAbilities[knockedOut.getAbility().id].name })); + globalScene.phaseManager.queueMessage( + i18next.t("abilityTriggers:copyFaintedAllyAbility", { + pokemonNameWithAffix: getPokemonNameWithAffix(knockedOut), + abilityName: allAbilities[knockedOut.getAbility().id].name, + }), + ); } } } @@ -2082,7 +3046,7 @@ export class IgnoreOpponentStatStagesAbAttr extends AbAttr { this.stats = stats ?? BATTLE_STATS; } - override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, args: any[]): boolean { return this.stats.includes(args[0]); } @@ -2090,11 +3054,17 @@ export class IgnoreOpponentStatStagesAbAttr extends AbAttr { * Modifies a BooleanHolder and returns the result to see if a stat is ignored or not * @param _pokemon n/a * @param _passive n/a - * @param simulated n/a + * @param _simulated n/a * @param _cancelled n/a * @param args A BooleanHolder that represents whether or not to ignore a stat's stat changes */ - override apply(_pokemon: Pokemon, _passive: boolean, simulated: boolean, _cancelled: BooleanHolder, args: any[]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _cancelled: BooleanHolder, + args: any[], + ): void { (args[1] as BooleanHolder).value = true; } } @@ -2104,14 +3074,20 @@ export class IntimidateImmunityAbAttr extends AbAttr { super(false); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + cancelled: BooleanHolder, + _args: any[], + ): void { cancelled.value = true; } - getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { + getTriggerMessage(pokemon: Pokemon, abilityName: string, ..._args: any[]): string { return i18next.t("abilityTriggers:intimidateImmunity", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - abilityName + abilityName, }); } } @@ -2128,9 +3104,17 @@ export class PostIntimidateStatStageChangeAbAttr extends AbAttr { this.overwrites = !!overwrites; } - override apply(pokemon: Pokemon, passive: boolean, simulated:boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + cancelled: BooleanHolder, + _args: any[], + ): void { if (!simulated) { - globalScene.phaseManager.pushPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), false, this.stats, this.stages)); + globalScene.phaseManager.pushPhase( + new StatStageChangePhase(pokemon.getBattlerIndex(), false, this.stats, this.stages), + ); } cancelled.value = this.overwrites; } @@ -2156,17 +3140,17 @@ export class PostSummonAbAttr extends AbAttr { return this.activateOnGain; } - canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + canApplyPostSummon(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { return true; } /** * Applies ability post summon (after switching in) - * @param pokemon {@linkcode Pokemon} with this ability - * @param passive Whether this ability is a passive - * @param args Set of unique arguments needed by this attribute + * @param _pokemon {@linkcode Pokemon} with this ability + * @param _passive Whether this ability is a passive + * @param _args Set of unique arguments needed by this attribute */ - applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void {} + applyPostSummon(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): void {} } /** @@ -2189,11 +3173,11 @@ export class PostSummonRemoveArenaTagAbAttr extends PostSummonAbAttr { this.arenaTags = arenaTags; } - override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApplyPostSummon(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { return globalScene.arena.tags.some(tag => this.arenaTags.includes(tag.tagType)); } - override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostSummon(_pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { if (!simulated) { for (const arenaTag of this.arenaTags) { globalScene.arena.removeTag(arenaTag); @@ -2212,7 +3196,6 @@ export class PostSummonAddArenaTagAbAttr extends PostSummonAbAttr { private readonly quiet?: boolean; private sourceId: number; - constructor(showAbility: boolean, tagType: ArenaTagType, turnCount: number, side?: ArenaTagSide, quiet?: boolean) { super(showAbility); this.tagType = tagType; @@ -2221,7 +3204,7 @@ export class PostSummonAddArenaTagAbAttr extends PostSummonAbAttr { this.quiet = quiet; } - public override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + public override applyPostSummon(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { this.sourceId = pokemon.id; if (!simulated) { globalScene.arena.addTag(this.tagType, this.turnCount, undefined, this.sourceId, this.side, this.quiet); @@ -2238,7 +3221,7 @@ export class PostSummonMessageAbAttr extends PostSummonAbAttr { this.messageFunc = messageFunc; } - override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostSummon(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { if (!simulated) { globalScene.phaseManager.queueMessage(this.messageFunc(pokemon)); } @@ -2255,7 +3238,7 @@ export class PostSummonUnnamedMessageAbAttr extends PostSummonAbAttr { this.message = message; } - override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostSummon(_pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { if (!simulated) { globalScene.phaseManager.queueMessage(this.message); } @@ -2273,11 +3256,11 @@ export class PostSummonAddBattlerTagAbAttr extends PostSummonAbAttr { this.turnCount = turnCount; } - override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApplyPostSummon(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { return pokemon.canAddTag(this.tagType); } - override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostSummon(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { if (!simulated) { pokemon.addTag(this.tagType, this.turnCount); } @@ -2300,11 +3283,11 @@ export class PostSummonRemoveBattlerTagAbAttr extends PostSummonRemoveEffectAbAt this.immuneTags = immuneTags; } - public override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + public override canApplyPostSummon(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { return this.immuneTags.some(tagType => !!pokemon.getTag(tagType)); } - public override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + public override applyPostSummon(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): void { this.immuneTags.forEach(tagType => pokemon.removeTag(tagType)); } } @@ -2324,7 +3307,7 @@ export class PostSummonStatStageChangeAbAttr extends PostSummonAbAttr { this.intimidate = !!intimidate; } - override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostSummon(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { if (simulated) { return; } @@ -2332,7 +3315,9 @@ export class PostSummonStatStageChangeAbAttr extends PostSummonAbAttr { if (this.selfTarget) { // we unshift the StatStageChangePhase to put it right after the showAbility and not at the end of the // phase list (which could be after CommandPhase for example) - globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, this.stats, this.stages)); + globalScene.phaseManager.unshiftPhase( + new StatStageChangePhase(pokemon.getBattlerIndex(), true, this.stats, this.stages), + ); } else { for (const opponent of pokemon.getOpponents()) { const cancelled = new BooleanHolder(false); @@ -2345,7 +3330,9 @@ export class PostSummonStatStageChangeAbAttr extends PostSummonAbAttr { } } if (!cancelled.value) { - globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(opponent.getBattlerIndex(), false, this.stats, this.stages)); + globalScene.phaseManager.unshiftPhase( + new StatStageChangePhase(opponent.getBattlerIndex(), false, this.stats, this.stages), + ); } } } @@ -2363,15 +3350,25 @@ export class PostSummonAllyHealAbAttr extends PostSummonAbAttr { this.showAnim = showAnim; } - override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApplyPostSummon(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { return pokemon.getAlly()?.isActive(true) ?? false; } - override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostSummon(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { const target = pokemon.getAlly(); if (!simulated && !isNullOrUndefined(target)) { - globalScene.phaseManager.unshiftPhase(new PokemonHealPhase(target.getBattlerIndex(), - toDmgValue(pokemon.getMaxHp() / this.healRatio), i18next.t("abilityTriggers:postSummonAllyHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(target), pokemonName: pokemon.name }), true, !this.showAnim)); + globalScene.phaseManager.unshiftPhase( + new PokemonHealPhase( + target.getBattlerIndex(), + toDmgValue(pokemon.getMaxHp() / this.healRatio), + i18next.t("abilityTriggers:postSummonAllyHeal", { + pokemonNameWithAffix: getPokemonNameWithAffix(target), + pokemonName: pokemon.name, + }), + true, + !this.showAnim, + ), + ); } } } @@ -2385,22 +3382,22 @@ export class PostSummonAllyHealAbAttr extends PostSummonAbAttr { * @returns if the move was successful */ export class PostSummonClearAllyStatStagesAbAttr extends PostSummonAbAttr { - constructor() { - super(); - } - - override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApplyPostSummon(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { return pokemon.getAlly()?.isActive(true) ?? false; } - override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostSummon(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { const target = pokemon.getAlly(); if (!simulated && !isNullOrUndefined(target)) { for (const s of BATTLE_STATS) { target.setStatStage(s, 0); } - globalScene.phaseManager.queueMessage(i18next.t("abilityTriggers:postSummonClearAllyStats", { pokemonNameWithAffix: getPokemonNameWithAffix(target) })); + globalScene.phaseManager.queueMessage( + i18next.t("abilityTriggers:postSummonClearAllyStats", { + pokemonNameWithAffix: getPokemonNameWithAffix(target), + }), + ); } } } @@ -2418,7 +3415,7 @@ export class DownloadAbAttr extends PostSummonAbAttr { private enemyCountTally: number; private stats: BattleStat[]; - override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApplyPostSummon(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { this.enemyDef = 0; this.enemySpDef = 0; this.enemyCountTally = 0; @@ -2437,14 +3434,14 @@ export class DownloadAbAttr extends PostSummonAbAttr { * Checks to see if it is the opening turn (starting a new game), if so, Download won't work. This is because Download takes into account * vitamins and items, so it needs to use the Stat and the stat alone. * @param {Pokemon} pokemon Pokemon that is using the move, as well as seeing the opposing pokemon. - * @param {boolean} passive N/A - * @param {any[]} args N/A + * @param {boolean} _passive N/A + * @param {any[]} _args N/A */ - override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostSummon(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { if (this.enemyDef < this.enemySpDef) { - this.stats = [ Stat.ATK ]; + this.stats = [Stat.ATK]; } else { - this.stats = [ Stat.SPATK ]; + this.stats = [Stat.SPATK]; } if (!simulated) { @@ -2462,14 +3459,16 @@ export class PostSummonWeatherChangeAbAttr extends PostSummonAbAttr { this.weatherType = weatherType; } - override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - const weatherReplaceable = (this.weatherType === WeatherType.HEAVY_RAIN || + override canApplyPostSummon(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { + const weatherReplaceable = + this.weatherType === WeatherType.HEAVY_RAIN || this.weatherType === WeatherType.HARSH_SUN || - this.weatherType === WeatherType.STRONG_WINDS) || !globalScene.arena.weather?.isImmutable(); + this.weatherType === WeatherType.STRONG_WINDS || + !globalScene.arena.weather?.isImmutable(); return weatherReplaceable && globalScene.arena.canSetWeather(this.weatherType); } - override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostSummon(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { if (!simulated) { globalScene.arena.trySetWeather(this.weatherType, pokemon); } @@ -2485,11 +3484,11 @@ export class PostSummonTerrainChangeAbAttr extends PostSummonAbAttr { this.terrainType = terrainType; } - override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApplyPostSummon(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { return globalScene.arena.canSetTerrain(this.terrainType); } - override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostSummon(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { if (!simulated) { globalScene.arena.trySetTerrain(this.terrainType, false, pokemon); } @@ -2511,12 +3510,12 @@ export class PostSummonHealStatusAbAttr extends PostSummonRemoveEffectAbAttr { this.immuneEffects = immuneEffects; } - public override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + public override canApplyPostSummon(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { const status = pokemon.status?.effect; - return !isNullOrUndefined(status) && (this.immuneEffects.length < 1 || this.immuneEffects.includes(status)) + return !isNullOrUndefined(status) && (this.immuneEffects.length < 1 || this.immuneEffects.includes(status)); } - public override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + public override applyPostSummon(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): void { const status = pokemon.status?.effect; if (!isNullOrUndefined(status)) { this.statusHealed = status; @@ -2536,17 +3535,17 @@ export class PostSummonHealStatusAbAttr extends PostSummonRemoveEffectAbAttr { export class PostSummonFormChangeAbAttr extends PostSummonAbAttr { private formFunc: (p: Pokemon) => number; - constructor(formFunc: ((p: Pokemon) => number)) { + constructor(formFunc: (p: Pokemon) => number) { super(true); this.formFunc = formFunc; } - override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApplyPostSummon(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { return this.formFunc(pokemon) !== pokemon.formIndex; } - override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostSummon(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { if (!simulated) { globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeAbilityTrigger, false); } @@ -2558,7 +3557,7 @@ export class PostSummonCopyAbilityAbAttr extends PostSummonAbAttr { private target: Pokemon; private targetAbilityName: string; - override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApplyPostSummon(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { const targets = pokemon.getOpponents(); if (!targets.length) { return false; @@ -2566,7 +3565,7 @@ export class PostSummonCopyAbilityAbAttr extends PostSummonAbAttr { let target: Pokemon; if (targets.length > 1) { - globalScene.executeWithSeedOffset(() => target = randSeedItem(targets), globalScene.currentBattle.waveIndex); + globalScene.executeWithSeedOffset(() => (target = randSeedItem(targets)), globalScene.currentBattle.waveIndex); } else { target = targets[0]; } @@ -2584,7 +3583,7 @@ export class PostSummonCopyAbilityAbAttr extends PostSummonAbAttr { return true; } - override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostSummon(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { if (!simulated) { pokemon.setTempAbility(this.target!.getAbility()); setAbilityRevealed(this.target!); @@ -2592,7 +3591,7 @@ export class PostSummonCopyAbilityAbAttr extends PostSummonAbAttr { } } - getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { + getTriggerMessage(pokemon: Pokemon, _abilityName: string, ..._args: any[]): string { return i18next.t("abilityTriggers:trace", { pokemonName: getPokemonNameWithAffix(pokemon), targetName: getPokemonNameWithAffix(this.target), @@ -2616,7 +3615,7 @@ export class PostSummonUserFieldRemoveStatusEffectAbAttr extends PostSummonAbAtt this.statusEffect = statusEffect; } - override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApplyPostSummon(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { const party = pokemon.isPlayer() ? globalScene.getPlayerField() : globalScene.getEnemyField(); return party.filter(p => p.isAllowedInBattle()).length > 0; } @@ -2625,17 +3624,19 @@ export class PostSummonUserFieldRemoveStatusEffectAbAttr extends PostSummonAbAtt * Removes supplied status effect from the user's field when user of the ability is summoned. * * @param pokemon - The Pokémon that triggered the ability. - * @param passive - n/a - * @param args - n/a + * @param _passive - n/a + * @param _args - n/a */ - override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostSummon(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { const party = pokemon.isPlayer() ? globalScene.getPlayerField() : globalScene.getEnemyField(); const allowedParty = party.filter(p => p.isAllowedInBattle()); if (!simulated) { for (const pokemon of allowedParty) { if (pokemon.status && this.statusEffect.includes(pokemon.status.effect)) { - globalScene.phaseManager.queueMessage(getStatusEffectHealText(pokemon.status.effect, getPokemonNameWithAffix(pokemon))); + globalScene.phaseManager.queueMessage( + getStatusEffectHealText(pokemon.status.effect, getPokemonNameWithAffix(pokemon)), + ); pokemon.resetStatus(false); pokemon.updateInfo(); } @@ -2644,10 +3645,9 @@ export class PostSummonUserFieldRemoveStatusEffectAbAttr extends PostSummonAbAtt } } - /** Attempt to copy the stat changes on an ally pokemon */ export class PostSummonCopyAllyStatsAbAttr extends PostSummonAbAttr { - override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApplyPostSummon(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { if (!globalScene.currentBattle.double) { return false; } @@ -2656,7 +3656,7 @@ export class PostSummonCopyAllyStatsAbAttr extends PostSummonAbAttr { return !(isNullOrUndefined(ally) || ally.getStatStages().every(s => s === 0)); } - override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostSummon(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { const ally = pokemon.getAlly(); if (!simulated && !isNullOrUndefined(ally)) { for (const s of BATTLE_STATS) { @@ -2666,7 +3666,7 @@ export class PostSummonCopyAllyStatsAbAttr extends PostSummonAbAttr { } } - getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { + getTriggerMessage(pokemon: Pokemon, _abilityName: string, ..._args: any[]): string { return i18next.t("abilityTriggers:costar", { pokemonName: getPokemonNameWithAffix(pokemon), allyName: getPokemonNameWithAffix(pokemon.getAlly()), @@ -2691,7 +3691,8 @@ export class PostSummonTransformAbAttr extends PostSummonAbAttr { if (targets[0].fusionSpecies) { target = targets[1]; return; - } else if (targets[1].fusionSpecies) { + } + if (targets[1].fusionSpecies) { target = targets[0]; return; } @@ -2706,7 +3707,7 @@ export class PostSummonTransformAbAttr extends PostSummonAbAttr { return target; } - override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApplyPostSummon(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): boolean { const targets = pokemon.getOpponents(); const target = this.getTarget(targets); @@ -2722,11 +3723,12 @@ export class PostSummonTransformAbAttr extends PostSummonAbAttr { return !(this.getTarget(targets).fusionSpecies || pokemon.fusionSpecies); } - override applyPostSummon(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { + override applyPostSummon(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): void { const target = this.getTarget(pokemon.getOpponents()); - globalScene.phaseManager.unshiftPhase(new PokemonTransformPhase(pokemon.getBattlerIndex(), target.getBattlerIndex(), true)); - + globalScene.phaseManager.unshiftPhase( + new PokemonTransformPhase(pokemon.getBattlerIndex(), target.getBattlerIndex(), true), + ); } } @@ -2736,17 +3738,17 @@ export class PostSummonTransformAbAttr extends PostSummonAbAttr { * @extends PostSummonAbAttr */ export class PostSummonWeatherSuppressedFormChangeAbAttr extends PostSummonAbAttr { - override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApplyPostSummon(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { return getPokemonWithWeatherBasedForms().length > 0; } /** * Triggers {@linkcode Arena.triggerWeatherBasedFormChangesToNormal | triggerWeatherBasedFormChangesToNormal} - * @param {Pokemon} pokemon the Pokemon with this ability - * @param passive n/a - * @param args n/a + * @param {Pokemon} _pokemon the Pokemon with this ability + * @param _passive n/a + * @param _args n/a */ - override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostSummon(_pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { if (!simulated) { globalScene.arena.triggerWeatherBasedFormChangesToNormal(); } @@ -2767,9 +3769,11 @@ export class PostSummonFormChangeByWeatherAbAttr extends PostSummonAbAttr { this.ability = ability; } - override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - const isCastformWithForecast = (pokemon.species.speciesId === SpeciesId.CASTFORM && this.ability === AbilityId.FORECAST); - const isCherrimWithFlowerGift = (pokemon.species.speciesId === SpeciesId.CHERRIM && this.ability === AbilityId.FLOWER_GIFT); + override canApplyPostSummon(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { + const isCastformWithForecast = + pokemon.species.speciesId === SpeciesId.CASTFORM && this.ability === AbilityId.FORECAST; + const isCherrimWithFlowerGift = + pokemon.species.speciesId === SpeciesId.CHERRIM && this.ability === AbilityId.FLOWER_GIFT; return isCastformWithForecast || isCherrimWithFlowerGift; } @@ -2779,10 +3783,10 @@ export class PostSummonFormChangeByWeatherAbAttr extends PostSummonAbAttr { * {@linkcode SpeciesFormChange.SpeciesFormChangeWeatherTrigger | SpeciesFormChangeRevertWeatherFormTrigger} if it * is the specific Pokemon and ability * @param {Pokemon} pokemon the Pokemon with this ability - * @param passive n/a - * @param args n/a + * @param _passive n/a + * @param _args n/a */ - override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostSummon(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { if (!simulated) { globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeWeatherTrigger); globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeRevertWeatherFormTrigger); @@ -2801,17 +3805,21 @@ export class CommanderAbAttr extends AbAttr { super(true); } - override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApply(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { // If the ally Dondozo is fainted or was previously "commanded" by // another Pokemon, this effect cannot apply. // TODO: Should this work with X + Dondozo fusions? const ally = pokemon.getAlly(); - return globalScene.currentBattle?.double && !isNullOrUndefined(ally) && ally.species.speciesId === SpeciesId.DONDOZO - && !(ally.isFainted() || ally.getTag(BattlerTagType.COMMANDED)); + return ( + globalScene.currentBattle?.double && + !isNullOrUndefined(ally) && + ally.species.speciesId === SpeciesId.DONDOZO && + !(ally.isFainted() || ally.getTag(BattlerTagType.COMMANDED)) + ); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: null, args: any[]): void { + override apply(pokemon: Pokemon, _passive: boolean, simulated: boolean, _cancelled: null, _args: any[]): void { if (!simulated) { // Lapse the source's semi-invulnerable tags (to avoid visual inconsistencies) pokemon.lapseTags(BattlerTagLapseType.MOVE_EFFECT); @@ -2820,21 +3828,21 @@ export class CommanderAbAttr extends AbAttr { // Apply boosts from this effect to the ally Dondozo pokemon.getAlly()?.addTag(BattlerTagType.COMMANDED, 0, MoveId.NONE, pokemon.id); // Cancel the source Pokemon's next move (if a move is queued) - globalScene.phaseManager.tryRemovePhase((phase) => phase.is("MovePhase") && phase.pokemon === pokemon); + globalScene.phaseManager.tryRemovePhase(phase => phase.is("MovePhase") && phase.pokemon === pokemon); } } } export class PreSwitchOutAbAttr extends AbAttr { - constructor(showAbility: boolean = true) { + constructor(showAbility = true) { super(showAbility); } - canApplyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + canApplyPreSwitchOut(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { return true; } - applyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void {} + applyPreSwitchOut(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): void {} } export class PreSwitchOutResetStatusAbAttr extends PreSwitchOutAbAttr { @@ -2842,11 +3850,11 @@ export class PreSwitchOutResetStatusAbAttr extends PreSwitchOutAbAttr { super(false); } - override canApplyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApplyPreSwitchOut(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { return !isNullOrUndefined(pokemon.status); } - override applyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPreSwitchOut(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { if (!simulated) { pokemon.resetStatus(); pokemon.updateInfo(); @@ -2860,11 +3868,11 @@ export class PreSwitchOutResetStatusAbAttr extends PreSwitchOutAbAttr { export class PreSwitchOutClearWeatherAbAttr extends PreSwitchOutAbAttr { /** * @param pokemon The {@linkcode Pokemon} with the ability - * @param passive N/A - * @param args N/A + * @param _passive N/A + * @param _args N/A * @returns {boolean} Returns true if the weather clears, otherwise false. */ - override applyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override applyPreSwitchOut(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): boolean { const weatherType = globalScene.arena.weather?.weatherType; let turnOffWeather = false; @@ -2875,8 +3883,8 @@ export class PreSwitchOutClearWeatherAbAttr extends PreSwitchOutAbAttr { pokemon.hasAbility(AbilityId.DESOLATE_LAND) && globalScene .getField(true) - .filter((p) => p !== pokemon) - .filter((p) => p.hasAbility(AbilityId.DESOLATE_LAND)).length === 0 + .filter(p => p !== pokemon) + .filter(p => p.hasAbility(AbilityId.DESOLATE_LAND)).length === 0 ) { turnOffWeather = true; } @@ -2886,8 +3894,8 @@ export class PreSwitchOutClearWeatherAbAttr extends PreSwitchOutAbAttr { pokemon.hasAbility(AbilityId.PRIMORDIAL_SEA) && globalScene .getField(true) - .filter((p) => p !== pokemon) - .filter((p) => p.hasAbility(AbilityId.PRIMORDIAL_SEA)).length === 0 + .filter(p => p !== pokemon) + .filter(p => p.hasAbility(AbilityId.PRIMORDIAL_SEA)).length === 0 ) { turnOffWeather = true; } @@ -2897,8 +3905,8 @@ export class PreSwitchOutClearWeatherAbAttr extends PreSwitchOutAbAttr { pokemon.hasAbility(AbilityId.DELTA_STREAM) && globalScene .getField(true) - .filter((p) => p !== pokemon) - .filter((p) => p.hasAbility(AbilityId.DELTA_STREAM)).length === 0 + .filter(p => p !== pokemon) + .filter(p => p.hasAbility(AbilityId.DELTA_STREAM)).length === 0 ) { turnOffWeather = true; } @@ -2919,11 +3927,11 @@ export class PreSwitchOutClearWeatherAbAttr extends PreSwitchOutAbAttr { } export class PreSwitchOutHealAbAttr extends PreSwitchOutAbAttr { - override canApplyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApplyPreSwitchOut(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { return !pokemon.isFullHp(); } - override applyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPreSwitchOut(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { if (!simulated) { const healAmount = toDmgValue(pokemon.getMaxHp() * 0.33); pokemon.heal(healAmount); @@ -2940,62 +3948,75 @@ export class PreSwitchOutHealAbAttr extends PreSwitchOutAbAttr { export class PreSwitchOutFormChangeAbAttr extends PreSwitchOutAbAttr { private formFunc: (p: Pokemon) => number; - constructor(formFunc: ((p: Pokemon) => number)) { + constructor(formFunc: (p: Pokemon) => number) { super(); this.formFunc = formFunc; } - override canApplyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApplyPreSwitchOut(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { return this.formFunc(pokemon) !== pokemon.formIndex; } /** * On switch out, trigger the form change to the one defined in the ability * @param pokemon The pokemon switching out and changing form {@linkcode Pokemon} - * @param passive N/A - * @param args N/A + * @param _passive N/A + * @param _args N/A */ - override applyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPreSwitchOut(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { if (!simulated) { globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeAbilityTrigger, false); } } - } export class PreLeaveFieldAbAttr extends AbAttr { - canApplyPreLeaveField(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + canApplyPreLeaveField(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { return true; } - applyPreLeaveField(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void {} + applyPreLeaveField(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): void {} } /** * Clears Desolate Land/Primordial Sea/Delta Stream upon the Pokemon switching out. */ export class PreLeaveFieldClearWeatherAbAttr extends PreLeaveFieldAbAttr { - - override canApplyPreLeaveField(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApplyPreLeaveField(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { const weatherType = globalScene.arena.weather?.weatherType; // Clear weather only if user's ability matches the weather and no other pokemon has the ability. switch (weatherType) { - case (WeatherType.HARSH_SUN): - if (pokemon.hasAbility(AbilityId.DESOLATE_LAND) - && globalScene.getField(true).filter(p => p !== pokemon).filter(p => p.hasAbility(AbilityId.DESOLATE_LAND)).length === 0) { + case WeatherType.HARSH_SUN: + if ( + pokemon.hasAbility(AbilityId.DESOLATE_LAND) && + globalScene + .getField(true) + .filter(p => p !== pokemon) + .filter(p => p.hasAbility(AbilityId.DESOLATE_LAND)).length === 0 + ) { return true; } break; - case (WeatherType.HEAVY_RAIN): - if (pokemon.hasAbility(AbilityId.PRIMORDIAL_SEA) - && globalScene.getField(true).filter(p => p !== pokemon).filter(p => p.hasAbility(AbilityId.PRIMORDIAL_SEA)).length === 0) { + case WeatherType.HEAVY_RAIN: + if ( + pokemon.hasAbility(AbilityId.PRIMORDIAL_SEA) && + globalScene + .getField(true) + .filter(p => p !== pokemon) + .filter(p => p.hasAbility(AbilityId.PRIMORDIAL_SEA)).length === 0 + ) { return true; } break; - case (WeatherType.STRONG_WINDS): - if (pokemon.hasAbility(AbilityId.DELTA_STREAM) - && globalScene.getField(true).filter(p => p !== pokemon).filter(p => p.hasAbility(AbilityId.DELTA_STREAM)).length === 0) { + case WeatherType.STRONG_WINDS: + if ( + pokemon.hasAbility(AbilityId.DELTA_STREAM) && + globalScene + .getField(true) + .filter(p => p !== pokemon) + .filter(p => p.hasAbility(AbilityId.DELTA_STREAM)).length === 0 + ) { return true; } break; @@ -3004,11 +4025,11 @@ export class PreLeaveFieldClearWeatherAbAttr extends PreLeaveFieldAbAttr { } /** - * @param pokemon The {@linkcode Pokemon} with the ability - * @param passive N/A - * @param args N/A + * @param _pokemon The {@linkcode Pokemon} with the ability + * @param _passive N/A + * @param _args N/A */ - override applyPreLeaveField(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPreLeaveField(_pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { if (!simulated) { globalScene.arena.trySetWeather(WeatherType.NONE); } @@ -3023,11 +4044,16 @@ export class PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr extends PreLeaveFi super(false); } - public override canApplyPreLeaveField(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + public override canApplyPreLeaveField( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _args: any[], + ): boolean { return !!globalScene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS); } - public override applyPreLeaveField(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + public override applyPreLeaveField(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): void { const suppressTag = globalScene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS) as SuppressAbilitiesTag; suppressTag.onSourceLeave(globalScene.arena); } @@ -3035,22 +4061,23 @@ export class PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr extends PreLeaveFi export class PreStatStageChangeAbAttr extends AbAttr { canApplyPreStatStageChange( - pokemon: Pokemon | null, - passive: boolean, - simulated: boolean, - stat: BattleStat, - cancelled: BooleanHolder, - args: any[]): boolean { + _pokemon: Pokemon | null, + _passive: boolean, + _simulated: boolean, + _stat: BattleStat, + _cancelled: BooleanHolder, + _args: any[], + ): boolean { return true; } applyPreStatStageChange( - pokemon: Pokemon | null, - passive: boolean, - simulated: boolean, - stat: BattleStat, - cancelled: BooleanHolder, - args: any[], + _pokemon: Pokemon | null, + _passive: boolean, + _simulated: boolean, + _stat: BattleStat, + _cancelled: BooleanHolder, + _args: any[], ): void {} } @@ -3060,7 +4087,7 @@ export class PreStatStageChangeAbAttr extends AbAttr { */ export class ReflectStatStageChangeAbAttr extends PreStatStageChangeAbAttr { /** {@linkcode BattleStat} to reflect */ - private reflectedStat? : BattleStat; + private reflectedStat?: BattleStat; /** * Apply the {@linkcode ReflectStatStageChangeAbAttr} to an interaction @@ -3071,12 +4098,21 @@ export class ReflectStatStageChangeAbAttr extends PreStatStageChangeAbAttr { * @param cancelled The {@linkcode BooleanHolder} that will be set to true due to reflection * @param args */ - override applyPreStatStageChange(_pokemon: Pokemon, _passive: boolean, simulated: boolean, stat: BattleStat, cancelled: BooleanHolder, args: any[]): void { + override applyPreStatStageChange( + _pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + stat: BattleStat, + cancelled: BooleanHolder, + args: any[], + ): void { const attacker: Pokemon = args[0]; const stages = args[1]; this.reflectedStat = stat; if (!simulated) { - globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(attacker.getBattlerIndex(), false, [ stat ], stages, true, false, true, null, true)); + globalScene.phaseManager.unshiftPhase( + new StatStageChangePhase(attacker.getBattlerIndex(), false, [stat], stages, true, false, true, null, true), + ); } cancelled.value = true; } @@ -3085,7 +4121,7 @@ export class ReflectStatStageChangeAbAttr extends PreStatStageChangeAbAttr { return i18next.t("abilityTriggers:protectStat", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName, - statName: this.reflectedStat ? i18next.t(getStatKey(this.reflectedStat)) : i18next.t("battle:stats") + statName: this.reflectedStat ? i18next.t(getStatKey(this.reflectedStat)) : i18next.t("battle:stats"), }); } } @@ -3103,7 +4139,14 @@ export class ProtectStatAbAttr extends PreStatStageChangeAbAttr { this.protectedStat = protectedStat; } - override canApplyPreStatStageChange(pokemon: Pokemon | null, passive: boolean, simulated: boolean, stat: BattleStat, cancelled: BooleanHolder, args: any[]): boolean { + override canApplyPreStatStageChange( + _pokemon: Pokemon | null, + _passive: boolean, + _simulated: boolean, + stat: BattleStat, + _cancelled: BooleanHolder, + _args: any[], + ): boolean { return isNullOrUndefined(this.protectedStat) || stat === this.protectedStat; } @@ -3112,11 +4155,18 @@ export class ProtectStatAbAttr extends PreStatStageChangeAbAttr { * @param _pokemon * @param _passive * @param simulated - * @param stat the {@linkcode BattleStat} being affected + * @param _stat the {@linkcode BattleStat} being affected * @param cancelled The {@linkcode BooleanHolder} that will be set to true if the stat is protected * @param _args */ - override applyPreStatStageChange(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, stat: BattleStat, cancelled: BooleanHolder, _args: any[]): void { + override applyPreStatStageChange( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _stat: BattleStat, + cancelled: BooleanHolder, + _args: any[], + ): void { cancelled.value = true; } @@ -3124,7 +4174,7 @@ export class ProtectStatAbAttr extends PreStatStageChangeAbAttr { return i18next.t("abilityTriggers:protectStat", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName, - statName: this.protectedStat ? i18next.t(getStatKey(this.protectedStat)) : i18next.t("battle:stats") + statName: this.protectedStat ? i18next.t(getStatKey(this.protectedStat)) : i18next.t("battle:stats"), }); } } @@ -3142,26 +4192,45 @@ export class ConfusionOnStatusEffectAbAttr extends PostAttackAbAttr { constructor(...effects: StatusEffect[]) { /** This effect does not require a damaging move */ - super((user, target, move) => true); + super((_user, _target, _move) => true); this.effects = effects; } - override canApplyPostAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - return super.canApplyPostAttack(pokemon, passive, simulated, defender, move, hitResult, args) - && this.effects.indexOf(args[0]) > -1 && !defender.isFainted() && defender.canAddTag(BattlerTagType.CONFUSED); + override canApplyPostAttack( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + defender: Pokemon, + move: Move, + hitResult: HitResult | null, + args: any[], + ): boolean { + return ( + super.canApplyPostAttack(pokemon, passive, simulated, defender, move, hitResult, args) && + this.effects.indexOf(args[0]) > -1 && + !defender.isFainted() && + defender.canAddTag(BattlerTagType.CONFUSED) + ); } - /** * Applies confusion to the target pokemon. * @param pokemon {@link Pokemon} attacking - * @param passive N/A + * @param _passive N/A * @param defender {@link Pokemon} defending * @param move {@link Move} used to apply status effect and confusion - * @param hitResult N/A - * @param args [0] {@linkcode StatusEffect} applied by move + * @param _hitResult N/A + * @param _args [0] {@linkcode StatusEffect} applied by move */ - override applyPostAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, hitResult: HitResult, args: any[]): void { + override applyPostAttack( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + defender: Pokemon, + move: Move, + _hitResult: HitResult, + _args: any[], + ): void { if (!simulated) { defender.addTag(BattlerTagType.CONFUSED, pokemon.randBattleSeedIntRange(2, 5), move.id, defender.id); } @@ -3171,22 +4240,23 @@ export class ConfusionOnStatusEffectAbAttr extends PostAttackAbAttr { export class PreSetStatusAbAttr extends AbAttr { /** Return whether the ability attribute can be applied */ canApplyPreSetStatus( - pokemon: Pokemon, - passive: boolean, - simulated: boolean, - effect: StatusEffect | undefined, - cancelled: BooleanHolder, - args: any[]): boolean { + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _effect: StatusEffect | undefined, + _cancelled: BooleanHolder, + _args: any[], + ): boolean { return true; } applyPreSetStatus( - pokemon: Pokemon, - passive: boolean, - simulated: boolean, - effect: StatusEffect | undefined, - cancelled: BooleanHolder, - args: any[], + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _effect: StatusEffect | undefined, + _cancelled: BooleanHolder, + _args: any[], ): void {} } @@ -3206,35 +4276,49 @@ export class PreSetStatusEffectImmunityAbAttr extends PreSetStatusAbAttr { this.immuneEffects = immuneEffects; } - override canApplyPreSetStatus(pokemon: Pokemon, passive: boolean, simulated: boolean, effect: StatusEffect, cancelled: BooleanHolder, args: any[]): boolean { - return effect !== StatusEffect.FAINT && this.immuneEffects.length < 1 || this.immuneEffects.includes(effect); + override canApplyPreSetStatus( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + effect: StatusEffect, + _cancelled: BooleanHolder, + _args: any[], + ): boolean { + return (effect !== StatusEffect.FAINT && this.immuneEffects.length < 1) || this.immuneEffects.includes(effect); } /** * Applies immunity to supplied status effects. * - * @param pokemon - The Pokémon to which the status is being applied. - * @param passive - n/a + * @param _pokemon - The Pokémon to which the status is being applied. + * @param _passive - n/a * @param effect - The status effect being applied. * @param cancelled - A holder for a boolean value indicating if the status application was cancelled. - * @param args - n/a + * @param _args - n/a */ - override applyPreSetStatus(pokemon: Pokemon, passive: boolean, simulated: boolean, effect: StatusEffect, cancelled: BooleanHolder, args: any[]): void { + override applyPreSetStatus( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + effect: StatusEffect, + cancelled: BooleanHolder, + _args: any[], + ): void { cancelled.value = true; this.lastEffect = effect; } - getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { - return this.immuneEffects.length ? - i18next.t("abilityTriggers:statusEffectImmunityWithName", { - pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - abilityName, - statusEffectName: getStatusEffectDescriptor(this.lastEffect) - }) : - i18next.t("abilityTriggers:statusEffectImmunity", { - pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - abilityName - }); + getTriggerMessage(pokemon: Pokemon, abilityName: string, ..._args: any[]): string { + return this.immuneEffects.length + ? i18next.t("abilityTriggers:statusEffectImmunityWithName", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + abilityName, + statusEffectName: getStatusEffectDescriptor(this.lastEffect), + }) + : i18next.t("abilityTriggers:statusEffectImmunity", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + abilityName, + }); } } @@ -3242,13 +4326,13 @@ export class PreSetStatusEffectImmunityAbAttr extends PreSetStatusAbAttr { * Provides immunity to status effects to the user. * @extends PreSetStatusEffectImmunityAbAttr */ -export class StatusEffectImmunityAbAttr extends PreSetStatusEffectImmunityAbAttr { } +export class StatusEffectImmunityAbAttr extends PreSetStatusEffectImmunityAbAttr {} /** * Provides immunity to status effects to the user's field. * @extends PreSetStatusEffectImmunityAbAttr */ -export class UserFieldStatusEffectImmunityAbAttr extends PreSetStatusEffectImmunityAbAttr { } +export class UserFieldStatusEffectImmunityAbAttr extends PreSetStatusEffectImmunityAbAttr {} /** * Conditionally provides immunity to status effects to the user's field. @@ -3267,16 +4351,27 @@ export class ConditionalUserFieldStatusEffectImmunityAbAttr extends UserFieldSta /** * Evaluate the condition to determine if the {@linkcode ConditionalUserFieldStatusEffectImmunityAbAttr} can be applied. - * @param pokemon The pokemon with the ability - * @param passive unused - * @param simulated Whether the ability is being simulated + * @param _pokemon The pokemon with the ability + * @param _passive unused + * @param _simulated Whether the ability is being simulated * @param effect The status effect being applied * @param cancelled Holds whether the status effect was cancelled by a prior effect * @param args `Args[0]` is the target of the status effect, `Args[1]` is the source. * @returns Whether the ability can be applied to cancel the status effect. */ - override canApplyPreSetStatus(pokemon: Pokemon, passive: boolean, simulated: boolean, effect: StatusEffect, cancelled: BooleanHolder, args: [Pokemon, Pokemon | null, ...any]): boolean { - return (!cancelled.value && effect !== StatusEffect.FAINT && this.immuneEffects.length < 1 || this.immuneEffects.includes(effect)) && this.condition(args[0], args[1]); + override canApplyPreSetStatus( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + effect: StatusEffect, + cancelled: BooleanHolder, + args: [Pokemon, Pokemon | null, ...any], + ): boolean { + return ( + ((!cancelled.value && effect !== StatusEffect.FAINT && this.immuneEffects.length < 1) || + this.immuneEffects.includes(effect)) && + this.condition(args[0], args[1]) + ); } constructor(condition: (target: Pokemon, source: Pokemon | null) => boolean, ...immuneEffects: StatusEffect[]) { @@ -3298,27 +4393,38 @@ export class ConditionalUserFieldProtectStatAbAttr extends PreStatStageChangeAbA /** If the method evaluates to true, the stat will be protected. */ protected condition: (target: Pokemon) => boolean; - constructor(condition: (target: Pokemon) => boolean, protectedStat?: BattleStat) { + constructor(condition: (target: Pokemon) => boolean, _protectedStat?: BattleStat) { super(); this.condition = condition; } /** * Determine whether the {@linkcode ConditionalUserFieldProtectStatAbAttr} can be applied. - * @param pokemon The pokemon with the ability - * @param passive unused - * @param simulated Unused + * @param _pokemon The pokemon with the ability + * @param _passive unused + * @param _simulated Unused * @param stat The stat being affected * @param cancelled Holds whether the stat change was already prevented. * @param args Args[0] is the target pokemon of the stat change. * @returns */ - override canApplyPreStatStageChange(pokemon: Pokemon, passive: boolean, simulated: boolean, stat: BattleStat, cancelled: BooleanHolder, args: [Pokemon, ...any]): boolean { + override canApplyPreStatStageChange( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + stat: BattleStat, + cancelled: BooleanHolder, + args: [Pokemon, ...any], + ): boolean { const target = args[0]; if (!target) { return false; } - return !cancelled.value && (isNullOrUndefined(this.protectedStat) || stat === this.protectedStat) && this.condition(target); + return ( + !cancelled.value && + (isNullOrUndefined(this.protectedStat) || stat === this.protectedStat) && + this.condition(target) + ); } /** @@ -3330,31 +4436,37 @@ export class ConditionalUserFieldProtectStatAbAttr extends PreStatStageChangeAbA * @param cancelled Will be set to true if the stat change is prevented * @param _args unused */ - override applyPreStatStageChange(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _stat: BattleStat, cancelled: BooleanHolder, _args: any[]): void { + override applyPreStatStageChange( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _stat: BattleStat, + cancelled: BooleanHolder, + _args: any[], + ): void { cancelled.value = true; } } - export class PreApplyBattlerTagAbAttr extends AbAttr { canApplyPreApplyBattlerTag( - pokemon: Pokemon, - passive: boolean, - simulated: boolean, - tag: BattlerTag, - cancelled: BooleanHolder, - args: any[], + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _tag: BattlerTag, + _cancelled: BooleanHolder, + _args: any[], ): boolean { return true; } applyPreApplyBattlerTag( - pokemon: Pokemon, - passive: boolean, - simulated: boolean, - tag: BattlerTag, - cancelled: BooleanHolder, - args: any[], + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _tag: BattlerTag, + _cancelled: BooleanHolder, + _args: any[], ): void {} } @@ -3368,24 +4480,38 @@ export class PreApplyBattlerTagImmunityAbAttr extends PreApplyBattlerTagAbAttr { constructor(immuneTagTypes: BattlerTagType | BattlerTagType[]) { super(true); - this.immuneTagTypes = Array.isArray(immuneTagTypes) ? immuneTagTypes : [ immuneTagTypes ]; + this.immuneTagTypes = Array.isArray(immuneTagTypes) ? immuneTagTypes : [immuneTagTypes]; } - override canApplyPreApplyBattlerTag(pokemon: Pokemon, passive: boolean, simulated: boolean, tag: BattlerTag, cancelled: BooleanHolder, args: any[]): boolean { + override canApplyPreApplyBattlerTag( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + tag: BattlerTag, + cancelled: BooleanHolder, + _args: any[], + ): boolean { this.battlerTag = tag; return !cancelled.value && this.immuneTagTypes.includes(tag.tagType); } - override applyPreApplyBattlerTag(pokemon: Pokemon, passive: boolean, simulated: boolean, tag: BattlerTag, cancelled: BooleanHolder, args: any[]): void { + override applyPreApplyBattlerTag( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _tag: BattlerTag, + cancelled: BooleanHolder, + _args: any[], + ): void { cancelled.value = true; } - getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { + getTriggerMessage(pokemon: Pokemon, abilityName: string, ..._args: any[]): string { return i18next.t("abilityTriggers:battlerTagImmunity", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName, - battlerTagName: this.battlerTag.getDescriptor() + battlerTagName: this.battlerTag.getDescriptor(), }); } } @@ -3394,13 +4520,13 @@ export class PreApplyBattlerTagImmunityAbAttr extends PreApplyBattlerTagAbAttr { * Provides immunity to BattlerTags {@linkcode BattlerTag} to the user. * @extends PreApplyBattlerTagImmunityAbAttr */ -export class BattlerTagImmunityAbAttr extends PreApplyBattlerTagImmunityAbAttr { } +export class BattlerTagImmunityAbAttr extends PreApplyBattlerTagImmunityAbAttr {} /** * Provides immunity to BattlerTags {@linkcode BattlerTag} to the user's field. * @extends PreApplyBattlerTagImmunityAbAttr */ -export class UserFieldBattlerTagImmunityAbAttr extends PreApplyBattlerTagImmunityAbAttr { } +export class UserFieldBattlerTagImmunityAbAttr extends PreApplyBattlerTagImmunityAbAttr {} export class ConditionalUserFieldBattlerTagImmunityAbAttr extends UserFieldBattlerTagImmunityAbAttr { private condition: (target: Pokemon) => boolean; @@ -3415,8 +4541,17 @@ export class ConditionalUserFieldBattlerTagImmunityAbAttr extends UserFieldBattl * @param args Args[0] is the target that the tag is attempting to be applied to * @returns Whether the ability can be used to cancel the battler tag */ - override canApplyPreApplyBattlerTag(pokemon: Pokemon, passive: boolean, simulated: boolean, tag: BattlerTag, cancelled: BooleanHolder, args: [Pokemon, ...any]): boolean { - return super.canApplyPreApplyBattlerTag(pokemon, passive, simulated, tag, cancelled, args) && this.condition(args[0]); + override canApplyPreApplyBattlerTag( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + tag: BattlerTag, + cancelled: BooleanHolder, + args: [Pokemon, ...any], + ): boolean { + return ( + super.canApplyPreApplyBattlerTag(pokemon, passive, simulated, tag, cancelled, args) && this.condition(args[0]) + ); } constructor(condition: (target: Pokemon) => boolean, immuneTagTypes: BattlerTagType | BattlerTagType[]) { @@ -3435,8 +4570,14 @@ export class BlockCritAbAttr extends AbAttr { * Apply the block crit ability by setting the value in the provided boolean holder to false * @param args - [0] is a boolean holder representing whether the attack can crit */ - override apply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _cancelled: BooleanHolder, args: [BooleanHolder, ...any]): void { - (args[0]).value = false; + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _cancelled: BooleanHolder, + args: [BooleanHolder, ...any], + ): void { + args[0].value = false; } } @@ -3448,13 +4589,19 @@ export class BonusCritAbAttr extends AbAttr { /** * Apply the bonus crit ability by increasing the value in the provided number holder by 1 * - * @param pokemon The pokemon with the BonusCrit ability (unused) - * @param passive Unused - * @param simulated Unused - * @param cancelled Unused + * @param _pokemon The pokemon with the BonusCrit ability (unused) + * @param _passive Unused + * @param _simulated Unused + * @param _cancelled Unused * @param args Args[0] is a number holder containing the crit stage. */ - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: [NumberHolder, ...any]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _cancelled: BooleanHolder, + args: [NumberHolder, ...any], + ): void { (args[0] as NumberHolder).value += 1; } } @@ -3468,12 +4615,18 @@ export class MultCritAbAttr extends AbAttr { this.multAmount = multAmount; } - override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, args: any[]): boolean { const critMult = args[0] as NumberHolder; return critMult.value > 1; } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _cancelled: BooleanHolder, + args: any[], + ): void { const critMult = args[0] as NumberHolder; critMult.value *= this.multAmount; } @@ -3487,25 +4640,31 @@ export class MultCritAbAttr extends AbAttr { export class ConditionalCritAbAttr extends AbAttr { private condition: PokemonAttackCondition; - constructor(condition: PokemonAttackCondition, checkUser?: boolean) { + constructor(condition: PokemonAttackCondition, _checkUser?: boolean) { super(false); this.condition = condition; } - override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - const target = (args[1] as Pokemon); - const move = (args[2] as Move); + override canApply(pokemon: Pokemon, _passive: boolean, _simulated: boolean, args: any[]): boolean { + const target = args[1] as Pokemon; + const move = args[2] as Move; return this.condition(pokemon, target, move); } /** - * @param pokemon {@linkcode Pokemon} user. + * @param _pokemon {@linkcode Pokemon} user. * @param args [0] {@linkcode BooleanHolder} If true critical hit is guaranteed. * [1] {@linkcode Pokemon} Target. * [2] {@linkcode Move} used by ability user. */ - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _cancelled: BooleanHolder, + args: any[], + ): void { (args[0] as BooleanHolder).value = true; } } @@ -3515,7 +4674,13 @@ export class BlockNonDirectDamageAbAttr extends AbAttr { super(false); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + cancelled: BooleanHolder, + _args: any[], + ): void { cancelled.value = true; } } @@ -3535,23 +4700,35 @@ export class BlockStatusDamageAbAttr extends AbAttr { this.effects = effects; } - override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApply(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { return !!pokemon.status?.effect && this.effects.includes(pokemon.status.effect); } /** - * @param {Pokemon} pokemon The pokemon with the ability - * @param {boolean} passive N/A + * @param {Pokemon} _pokemon The pokemon with the ability + * @param {boolean} _passive N/A * @param {BooleanHolder} cancelled Whether to cancel the status damage - * @param {any[]} args N/A + * @param {any[]} _args N/A */ - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + cancelled: BooleanHolder, + _args: any[], + ): void { cancelled.value = true; } } export class BlockOneHitKOAbAttr extends AbAttr { - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + cancelled: BooleanHolder, + _args: any[], + ): void { cancelled.value = true; } } @@ -3576,39 +4753,46 @@ export class ChangeMovePriorityAbAttr extends AbAttr { this.changeAmount = changeAmount; } - override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApply(pokemon: Pokemon, _passive: boolean, _simulated: boolean, args: any[]): boolean { return this.moveFunc(pokemon, args[0] as Move); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _cancelled: BooleanHolder, + args: any[], + ): void { (args[1] as NumberHolder).value += this.changeAmount; } } -export class IgnoreContactAbAttr extends AbAttr { } +export class IgnoreContactAbAttr extends AbAttr {} export class PreWeatherEffectAbAttr extends AbAttr { canApplyPreWeatherEffect( - pokemon: Pokemon, - passive: Boolean, - simulated: boolean, - weather: Weather | null, - cancelled: BooleanHolder, - args: any[]): boolean { + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _weather: Weather | null, + _cancelled: BooleanHolder, + _args: any[], + ): boolean { return true; } applyPreWeatherEffect( - pokemon: Pokemon, - passive: boolean, - simulated: boolean, - weather: Weather | null, - cancelled: BooleanHolder, - args: any[], + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _weather: Weather | null, + _cancelled: BooleanHolder, + _args: any[], ): void {} } -export class PreWeatherDamageAbAttr extends PreWeatherEffectAbAttr { } +export class PreWeatherDamageAbAttr extends PreWeatherEffectAbAttr {} export class BlockWeatherDamageAttr extends PreWeatherDamageAbAttr { private weatherTypes: WeatherType[]; @@ -3619,11 +4803,25 @@ export class BlockWeatherDamageAttr extends PreWeatherDamageAbAttr { this.weatherTypes = weatherTypes; } - override canApplyPreWeatherEffect(pokemon: Pokemon, passive: Boolean, simulated: boolean, weather: Weather, cancelled: BooleanHolder, args: any[]): boolean { + override canApplyPreWeatherEffect( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + weather: Weather, + _cancelled: BooleanHolder, + _args: any[], + ): boolean { return !this.weatherTypes.length || this.weatherTypes.indexOf(weather?.weatherType) > -1; } - override applyPreWeatherEffect(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: Weather, cancelled: BooleanHolder, args: any[]): void { + override applyPreWeatherEffect( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _weather: Weather, + cancelled: BooleanHolder, + _args: any[], + ): void { cancelled.value = true; } } @@ -3637,11 +4835,25 @@ export class SuppressWeatherEffectAbAttr extends PreWeatherEffectAbAttr { this.affectsImmutable = !!affectsImmutable; } - override canApplyPreWeatherEffect(pokemon: Pokemon, passive: Boolean, simulated: boolean, weather: Weather, cancelled: BooleanHolder, args: any[]): boolean { + override canApplyPreWeatherEffect( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + weather: Weather, + _cancelled: BooleanHolder, + _args: any[], + ): boolean { return this.affectsImmutable || weather.isImmutable(); } - override applyPreWeatherEffect(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: Weather, cancelled: BooleanHolder, args: any[]): void { + override applyPreWeatherEffect( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _weather: Weather, + cancelled: BooleanHolder, + _args: any[], + ): void { cancelled.value = true; } } @@ -3665,7 +4877,8 @@ function getSheerForceHitDisableAbCondition(): AbAttrCondition { } /** `true` if the last move's chance is above 0 and the last attacker's ability is sheer force */ - const SheerForceAffected = allMoves[lastReceivedAttack.move].chance >= 0 && lastAttacker.hasAbility(AbilityId.SHEER_FORCE); + const SheerForceAffected = + allMoves[lastReceivedAttack.move].chance >= 0 && lastAttacker.hasAbility(AbilityId.SHEER_FORCE); return !SheerForceAffected; }; @@ -3693,7 +4906,10 @@ function getAnticipationCondition(): AbAttrCondition { continue; } // the move's base type (not accounting for variable type changes) is super effective - if (move.getMove() instanceof AttackMove && pokemon.getAttackTypeEffectiveness(move.getMove().type, opponent, true, undefined, move.getMove()) >= 2) { + if ( + move.getMove() instanceof AttackMove && + pokemon.getAttackTypeEffectiveness(move.getMove().type, opponent, true, undefined, move.getMove()) >= 2 + ) { return true; } // move is a OHKO @@ -3702,18 +4918,35 @@ function getAnticipationCondition(): AbAttrCondition { } // edge case for hidden power, type is computed if (move.getMove().id === MoveId.HIDDEN_POWER) { - const iv_val = Math.floor(((opponent.ivs[Stat.HP] & 1) - + (opponent.ivs[Stat.ATK] & 1) * 2 - + (opponent.ivs[Stat.DEF] & 1) * 4 - + (opponent.ivs[Stat.SPD] & 1) * 8 - + (opponent.ivs[Stat.SPATK] & 1) * 16 - + (opponent.ivs[Stat.SPDEF] & 1) * 32) * 15 / 63); + const iv_val = Math.floor( + (((opponent.ivs[Stat.HP] & 1) + + (opponent.ivs[Stat.ATK] & 1) * 2 + + (opponent.ivs[Stat.DEF] & 1) * 4 + + (opponent.ivs[Stat.SPD] & 1) * 8 + + (opponent.ivs[Stat.SPATK] & 1) * 16 + + (opponent.ivs[Stat.SPDEF] & 1) * 32) * + 15) / + 63, + ); const type = [ - PokemonType.FIGHTING, PokemonType.FLYING, PokemonType.POISON, PokemonType.GROUND, - PokemonType.ROCK, PokemonType.BUG, PokemonType.GHOST, PokemonType.STEEL, - PokemonType.FIRE, PokemonType.WATER, PokemonType.GRASS, PokemonType.ELECTRIC, - PokemonType.PSYCHIC, PokemonType.ICE, PokemonType.DRAGON, PokemonType.DARK ][iv_val]; + PokemonType.FIGHTING, + PokemonType.FLYING, + PokemonType.POISON, + PokemonType.GROUND, + PokemonType.ROCK, + PokemonType.BUG, + PokemonType.GHOST, + PokemonType.STEEL, + PokemonType.FIRE, + PokemonType.WATER, + PokemonType.GRASS, + PokemonType.ELECTRIC, + PokemonType.PSYCHIC, + PokemonType.ICE, + PokemonType.DRAGON, + PokemonType.DARK, + ][iv_val]; if (pokemon.getAttackTypeEffectiveness(type, opponent) >= 2) { return true; @@ -3743,7 +4976,7 @@ export class ForewarnAbAttr extends PostSummonAbAttr { super(true); } - override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostSummon(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { let maxPowerSeen = 0; let maxMove = ""; let movePower = 0; @@ -3753,7 +4986,11 @@ export class ForewarnAbAttr extends PostSummonAbAttr { movePower = 1; } else if (move?.getMove().hasAttr(OneHitKOAttr)) { movePower = 150; - } else if (move?.getMove().id === MoveId.COUNTER || move?.getMove().id === MoveId.MIRROR_COAT || move?.getMove().id === MoveId.METAL_BURST) { + } else if ( + move?.getMove().id === MoveId.COUNTER || + move?.getMove().id === MoveId.MIRROR_COAT || + move?.getMove().id === MoveId.METAL_BURST + ) { movePower = 120; } else if (move?.getMove().power === -1) { movePower = 80; @@ -3768,7 +5005,12 @@ export class ForewarnAbAttr extends PostSummonAbAttr { } } if (!simulated) { - globalScene.phaseManager.queueMessage(i18next.t("abilityTriggers:forewarn", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: maxMove })); + globalScene.phaseManager.queueMessage( + i18next.t("abilityTriggers:forewarn", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + moveName: maxMove, + }), + ); } } } @@ -3778,10 +5020,16 @@ export class FriskAbAttr extends PostSummonAbAttr { super(true); } - override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostSummon(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { if (!simulated) { for (const opponent of pokemon.getOpponents()) { - globalScene.phaseManager.queueMessage(i18next.t("abilityTriggers:frisk", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), opponentName: opponent.name, opponentAbilityName: opponent.getAbility().name })); + globalScene.phaseManager.queueMessage( + i18next.t("abilityTriggers:frisk", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + opponentName: opponent.name, + opponentAbilityName: opponent.getAbility().name, + }), + ); setAbilityRevealed(opponent); } } @@ -3789,11 +5037,23 @@ export class FriskAbAttr extends PostSummonAbAttr { } export class PostWeatherChangeAbAttr extends AbAttr { - canApplyPostWeatherChange(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: WeatherType, args: any[]): boolean { + canApplyPostWeatherChange( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _weather: WeatherType, + _args: any[], + ): boolean { return true; } - applyPostWeatherChange(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: WeatherType, args: any[]): void {} + applyPostWeatherChange( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _weather: WeatherType, + _args: any[], + ): void {} } /** @@ -3812,9 +5072,17 @@ export class PostWeatherChangeFormChangeAbAttr extends PostWeatherChangeAbAttr { this.formRevertingWeathers = formRevertingWeathers; } - override canApplyPostWeatherChange(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: WeatherType, args: any[]): boolean { - const isCastformWithForecast = (pokemon.species.speciesId === SpeciesId.CASTFORM && this.ability === AbilityId.FORECAST); - const isCherrimWithFlowerGift = (pokemon.species.speciesId === SpeciesId.CHERRIM && this.ability === AbilityId.FLOWER_GIFT); + override canApplyPostWeatherChange( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _weather: WeatherType, + _args: any[], + ): boolean { + const isCastformWithForecast = + pokemon.species.speciesId === SpeciesId.CASTFORM && this.ability === AbilityId.FORECAST; + const isCherrimWithFlowerGift = + pokemon.species.speciesId === SpeciesId.CHERRIM && this.ability === AbilityId.FLOWER_GIFT; return isCastformWithForecast || isCherrimWithFlowerGift; } @@ -3822,12 +5090,18 @@ export class PostWeatherChangeFormChangeAbAttr extends PostWeatherChangeAbAttr { /** * Calls {@linkcode Arena.triggerWeatherBasedFormChangesToNormal | triggerWeatherBasedFormChangesToNormal} when the * weather changed to form-reverting weather, otherwise calls {@linkcode Arena.triggerWeatherBasedFormChanges | triggerWeatherBasedFormChanges} - * @param {Pokemon} pokemon the Pokemon with this ability - * @param passive n/a - * @param weather n/a - * @param args n/a + * @param {Pokemon} _pokemon the Pokemon with this ability + * @param _passive n/a + * @param _weather n/a + * @param _args n/a */ - override applyPostWeatherChange(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: WeatherType, args: any[]): void { + override applyPostWeatherChange( + _pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + _weather: WeatherType, + _args: any[], + ): void { if (simulated) { return; } @@ -3855,11 +5129,23 @@ export class PostWeatherChangeAddBattlerTagAttr extends PostWeatherChangeAbAttr this.weatherTypes = weatherTypes; } - override canApplyPostWeatherChange(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: WeatherType, args: any[]): boolean { + override canApplyPostWeatherChange( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + weather: WeatherType, + _args: any[], + ): boolean { return !!this.weatherTypes.find(w => weather === w) && pokemon.canAddTag(this.tagType); } - override applyPostWeatherChange(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: WeatherType, args: any[]): void { + override applyPostWeatherChange( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + _weather: WeatherType, + _args: any[], + ): void { if (!simulated) { pokemon.addTag(this.tagType, this.turnCount); } @@ -3876,20 +5162,21 @@ export class PostWeatherLapseAbAttr extends AbAttr { } canApplyPostWeatherLapse( - pokemon: Pokemon, - passive: boolean, - simulated: boolean, - weather: Weather | null, - args: any[]): boolean { + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _weather: Weather | null, + _args: any[], + ): boolean { return true; } applyPostWeatherLapse( - pokemon: Pokemon, - passive: boolean, - simulated: boolean, - weather: Weather | null, - args: any[], + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _weather: Weather | null, + _args: any[], ): void {} getCondition(): AbAttrCondition { @@ -3906,15 +5193,36 @@ export class PostWeatherLapseHealAbAttr extends PostWeatherLapseAbAttr { this.healFactor = healFactor; } - override canApplyPostWeatherLapse(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: Weather | null, args: any[]): boolean { + override canApplyPostWeatherLapse( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _weather: Weather | null, + _args: any[], + ): boolean { return !pokemon.isFullHp(); } - override applyPostWeatherLapse(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: Weather, args: any[]): void { + override applyPostWeatherLapse( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + _weather: Weather, + _args: any[], + ): void { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; if (!simulated) { - globalScene.phaseManager.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), - toDmgValue(pokemon.getMaxHp() / (16 / this.healFactor)), i18next.t("abilityTriggers:postWeatherLapseHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }), true)); + globalScene.phaseManager.unshiftPhase( + new PokemonHealPhase( + pokemon.getBattlerIndex(), + toDmgValue(pokemon.getMaxHp() / (16 / this.healFactor)), + i18next.t("abilityTriggers:postWeatherLapseHeal", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + abilityName, + }), + true, + ), + ); } } } @@ -3928,25 +5236,56 @@ export class PostWeatherLapseDamageAbAttr extends PostWeatherLapseAbAttr { this.damageFactor = damageFactor; } - override canApplyPostWeatherLapse(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: Weather | null, args: any[]): boolean { + override canApplyPostWeatherLapse( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _weather: Weather | null, + _args: any[], + ): boolean { return !pokemon.hasAbilityWithAttr(BlockNonDirectDamageAbAttr); } - override applyPostWeatherLapse(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: Weather, args: any[]): void { + override applyPostWeatherLapse( + pokemon: Pokemon, + passive: boolean, + simulated: boolean, + _weather: Weather, + _args: any[], + ): void { if (!simulated) { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; - globalScene.phaseManager.queueMessage(i18next.t("abilityTriggers:postWeatherLapseDamage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName })); - pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / (16 / this.damageFactor)), { result: HitResult.INDIRECT }); + globalScene.phaseManager.queueMessage( + i18next.t("abilityTriggers:postWeatherLapseDamage", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + abilityName, + }), + ); + pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / (16 / this.damageFactor)), { + result: HitResult.INDIRECT, + }); } } } export class PostTerrainChangeAbAttr extends AbAttr { - canApplyPostTerrainChange(pokemon: Pokemon, passive: boolean, simulated: boolean, terrain: TerrainType, args: any[]): boolean { + canApplyPostTerrainChange( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _terrain: TerrainType, + _args: any[], + ): boolean { return true; } - applyPostTerrainChange(pokemon: Pokemon, passive: boolean, simulated: boolean, terrain: TerrainType, args: any[]): void {} + applyPostTerrainChange( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _terrain: TerrainType, + _args: any[], + ): void {} } export class PostTerrainChangeAddBattlerTagAttr extends PostTerrainChangeAbAttr { @@ -3962,11 +5301,23 @@ export class PostTerrainChangeAddBattlerTagAttr extends PostTerrainChangeAbAttr this.terrainTypes = terrainTypes; } - override canApplyPostTerrainChange(pokemon: Pokemon, passive: boolean, simulated: boolean, terrain: TerrainType, args: any[]): boolean { + override canApplyPostTerrainChange( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + terrain: TerrainType, + _args: any[], + ): boolean { return !!this.terrainTypes.find(t => t === terrain) && pokemon.canAddTag(this.tagType); } - override applyPostTerrainChange(pokemon: Pokemon, passive: boolean, simulated: boolean, terrain: TerrainType, args: any[]): void { + override applyPostTerrainChange( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + _terrain: TerrainType, + _args: any[], + ): void { if (!simulated) { pokemon.addTag(this.tagType, this.turnCount); } @@ -3974,18 +5325,18 @@ export class PostTerrainChangeAddBattlerTagAttr extends PostTerrainChangeAbAttr } function getTerrainCondition(...terrainTypes: TerrainType[]): AbAttrCondition { - return (pokemon: Pokemon) => { + return (_pokemon: Pokemon) => { const terrainType = globalScene.arena.terrain?.terrainType; return !!terrainType && terrainTypes.indexOf(terrainType) > -1; }; } export class PostTurnAbAttr extends AbAttr { - canApplyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + canApplyPostTurn(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { return true; } - applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void {} + applyPostTurn(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): void {} } /** @@ -4003,20 +5354,26 @@ export class PostTurnStatusHealAbAttr extends PostTurnAbAttr { this.effects = effects; } - override canApplyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApplyPostTurn(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { return !isNullOrUndefined(pokemon.status) && this.effects.includes(pokemon.status.effect) && !pokemon.isFullHp(); } /** * @param {Pokemon} pokemon The pokemon with the ability that will receive the healing * @param {Boolean} passive N/A - * @param {any[]} args N/A + * @param {any[]} _args N/A */ - override applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, _args: any[]): void { if (!simulated) { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; - globalScene.phaseManager.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), - toDmgValue(pokemon.getMaxHp() / 8), i18next.t("abilityTriggers:poisonHeal", { pokemonName: getPokemonNameWithAffix(pokemon), abilityName }), true)); + globalScene.phaseManager.unshiftPhase( + new PokemonHealPhase( + pokemon.getBattlerIndex(), + toDmgValue(pokemon.getMaxHp() / 8), + i18next.t("abilityTriggers:poisonHeal", { pokemonName: getPokemonNameWithAffix(pokemon), abilityName }), + true, + ), + ); } } } @@ -4034,7 +5391,7 @@ export class PostTurnResetStatusAbAttr extends PostTurnAbAttr { this.allyTarget = allyTarget; } - override canApplyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApplyPostTurn(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { if (this.allyTarget) { this.target = pokemon.getAlly(); } else { @@ -4045,9 +5402,11 @@ export class PostTurnResetStatusAbAttr extends PostTurnAbAttr { return !!effect && effect !== StatusEffect.FAINT; } - override applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostTurn(_pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { if (!simulated && this.target?.status) { - globalScene.phaseManager.queueMessage(getStatusEffectHealText(this.target.status?.effect, getPokemonNameWithAffix(this.target))); + globalScene.phaseManager.queueMessage( + getStatusEffectHealText(this.target.status?.effect, getPokemonNameWithAffix(this.target)), + ); this.target.resetStatus(false); this.target.updateInfo(); } @@ -4063,29 +5422,26 @@ export class PostTurnRestoreBerryAbAttr extends PostTurnAbAttr { * Array containing all {@linkcode BerryType | BerryTypes} that are under cap and able to be restored. * Stored inside the class for a minor performance boost */ - private berriesUnderCap: BerryType[] + private berriesUnderCap: BerryType[]; /** * @param procChance - function providing chance to restore an item * @see {@linkcode createEatenBerry()} */ - constructor( - private procChance: (pokemon: Pokemon) => number - ) { + constructor(private procChance: (pokemon: Pokemon) => number) { super(); } override canApplyPostTurn(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { // Ensure we have at least 1 recoverable berry (at least 1 berry in berriesEaten is not capped) const cappedBerries = new Set( - globalScene.getModifiers(BerryModifier, pokemon.isPlayer()).filter( - bm => bm.pokemonId === pokemon.id && bm.getCountUnderMax() < 1 - ).map(bm => bm.berryType) + globalScene + .getModifiers(BerryModifier, pokemon.isPlayer()) + .filter(bm => bm.pokemonId === pokemon.id && bm.getCountUnderMax() < 1) + .map(bm => bm.berryType), ); - this.berriesUnderCap = pokemon.battleData.berriesEaten.filter( - bt => !cappedBerries.has(bt) - ); + this.berriesUnderCap = pokemon.battleData.berriesEaten.filter(bt => !cappedBerries.has(bt)); if (!this.berriesUnderCap.length) { return false; @@ -4096,7 +5452,7 @@ export class PostTurnRestoreBerryAbAttr extends PostTurnAbAttr { return this.procChance(pokemon) >= pass; } - override applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostTurn(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { if (!simulated) { this.createEatenBerry(pokemon); } @@ -4116,12 +5472,12 @@ export class PostTurnRestoreBerryAbAttr extends PostTurnAbAttr { // Add the randomly chosen berry or update the existing one const berryModifier = globalScene.findModifier( - (m) => m instanceof BerryModifier && m.berryType === chosenBerryType && m.pokemonId == pokemon.id, - pokemon.isPlayer() + m => m instanceof BerryModifier && m.berryType === chosenBerryType && m.pokemonId === pokemon.id, + pokemon.isPlayer(), ) as BerryModifier | undefined; if (berryModifier) { - berryModifier.stackCount++ + berryModifier.stackCount++; } else { const newBerry = new BerryModifier(chosenBerry, pokemon.id, chosenBerryType, 1); if (pokemon.isPlayer()) { @@ -4132,15 +5488,20 @@ export class PostTurnRestoreBerryAbAttr extends PostTurnAbAttr { } globalScene.updateModifiers(pokemon.isPlayer()); - globalScene.phaseManager.queueMessage(i18next.t("abilityTriggers:postTurnLootCreateEatenBerry", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), berryName: chosenBerry.name })); + globalScene.phaseManager.queueMessage( + i18next.t("abilityTriggers:postTurnLootCreateEatenBerry", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + berryName: chosenBerry.name, + }), + ); return true; } } /** - * Attribute to track and re-trigger last turn's berries at the end of the `BerryPhase`. - * Used by {@linkcode AbilityId.CUD_CHEW}. -*/ + * Attribute to track and re-trigger last turn's berries at the end of the `BerryPhase`. + * Used by {@linkcode AbilityId.CUD_CHEW}. + */ export class RepeatBerryNextTurnAbAttr extends PostTurnAbAttr { /** * @returns `true` if the pokemon ate anything last turn @@ -4161,7 +5522,13 @@ export class RepeatBerryNextTurnAbAttr extends PostTurnAbAttr { * @param _cancelled - N/A * @param _args - N/A */ - override apply(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _cancelled: BooleanHolder | null, _args: any[]): void { + override apply( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _cancelled: BooleanHolder | null, + _args: any[], + ): void { globalScene.phaseManager.unshiftPhase( new CommonAnimPhase(pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.USE_ITEM), ); @@ -4181,7 +5548,7 @@ export class RepeatBerryNextTurnAbAttr extends PostTurnAbAttr { /** * @returns always `true` as we always want to move berries into summon data */ - override canApplyPostTurn(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { + override canApplyPostTurn(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { this.showAbility = false; // don't show popup for turn end berry moving (should ideally be hidden) return true; } @@ -4210,15 +5577,15 @@ export class MoodyAbAttr extends PostTurnAbAttr { /** * Randomly increases one stat stage by 2 and decreases a different stat stage by 1 * @param {Pokemon} pokemon Pokemon that has this ability - * @param passive N/A + * @param _passive N/A * @param simulated true if applying in a simulated call. - * @param args N/A + * @param _args N/A * * Any stat stages at +6 or -6 are excluded from being increased or decreased, respectively * If the pokemon already has all stat stages raised to 6, it will only decrease one stat stage by 1 * If the pokemon already has all stat stages lowered to -6, it will only increase one stat stage by 2 */ - override applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostTurn(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { const canRaise = EFFECTIVE_STATS.filter(s => pokemon.getStatStage(s) < 6); let canLower = EFFECTIVE_STATS.filter(s => pokemon.getStatStage(s) > -6); @@ -4226,41 +5593,53 @@ export class MoodyAbAttr extends PostTurnAbAttr { if (canRaise.length > 0) { const raisedStat = canRaise[pokemon.randBattleSeedInt(canRaise.length)]; canLower = canRaise.filter(s => s !== raisedStat); - globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ raisedStat ], 2)); + globalScene.phaseManager.unshiftPhase( + new StatStageChangePhase(pokemon.getBattlerIndex(), true, [raisedStat], 2), + ); } if (canLower.length > 0) { const loweredStat = canLower[pokemon.randBattleSeedInt(canLower.length)]; - globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ loweredStat ], -1)); + globalScene.phaseManager.unshiftPhase( + new StatStageChangePhase(pokemon.getBattlerIndex(), true, [loweredStat], -1), + ); } } } } export class SpeedBoostAbAttr extends PostTurnAbAttr { - constructor() { super(true); } - override canApplyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApplyPostTurn(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): boolean { return simulated || (!pokemon.turnData.switchedInThisTurn && !pokemon.turnData.failedRunAway); } - override applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { - globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ Stat.SPD ], 1)); + override applyPostTurn(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): void { + globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [Stat.SPD], 1)); } } export class PostTurnHealAbAttr extends PostTurnAbAttr { - override canApplyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApplyPostTurn(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { return !pokemon.isFullHp(); } - override applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, _args: any[]): void { if (!simulated) { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; - globalScene.phaseManager.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), - toDmgValue(pokemon.getMaxHp() / 16), i18next.t("abilityTriggers:postTurnHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }), true)); + globalScene.phaseManager.unshiftPhase( + new PokemonHealPhase( + pokemon.getBattlerIndex(), + toDmgValue(pokemon.getMaxHp() / 16), + i18next.t("abilityTriggers:postTurnHeal", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + abilityName, + }), + true, + ), + ); } } } @@ -4268,79 +5647,91 @@ export class PostTurnHealAbAttr extends PostTurnAbAttr { export class PostTurnFormChangeAbAttr extends PostTurnAbAttr { private formFunc: (p: Pokemon) => number; - constructor(formFunc: ((p: Pokemon) => number)) { + constructor(formFunc: (p: Pokemon) => number) { super(true); this.formFunc = formFunc; } - override canApplyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApplyPostTurn(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { return this.formFunc(pokemon) !== pokemon.formIndex; } - override applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostTurn(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { if (!simulated) { globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeAbilityTrigger, false); } } } - /** * Attribute used for abilities (Bad Dreams) that damages the opponents for being asleep */ export class PostTurnHurtIfSleepingAbAttr extends PostTurnAbAttr { - override canApplyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - return pokemon.getOpponents().some(opp => (opp.status?.effect === StatusEffect.SLEEP || opp.hasAbility(AbilityId.COMATOSE)) && !opp.hasAbilityWithAttr(BlockNonDirectDamageAbAttr) && !opp.switchOutStatus); + override canApplyPostTurn(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { + return pokemon + .getOpponents() + .some( + opp => + (opp.status?.effect === StatusEffect.SLEEP || opp.hasAbility(AbilityId.COMATOSE)) && + !opp.hasAbilityWithAttr(BlockNonDirectDamageAbAttr) && + !opp.switchOutStatus, + ); } /** * Deals damage to all sleeping opponents equal to 1/8 of their max hp (min 1) * @param pokemon {@linkcode Pokemon} with this ability - * @param passive N/A + * @param _passive N/A * @param simulated `true` if applying in a simulated call. - * @param args N/A + * @param _args N/A */ - override applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostTurn(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { for (const opp of pokemon.getOpponents()) { - if ((opp.status?.effect === StatusEffect.SLEEP || opp.hasAbility(AbilityId.COMATOSE)) && !opp.hasAbilityWithAttr(BlockNonDirectDamageAbAttr) && !opp.switchOutStatus) { + if ( + (opp.status?.effect === StatusEffect.SLEEP || opp.hasAbility(AbilityId.COMATOSE)) && + !opp.hasAbilityWithAttr(BlockNonDirectDamageAbAttr) && + !opp.switchOutStatus + ) { if (!simulated) { opp.damageAndUpdate(toDmgValue(opp.getMaxHp() / 8), { result: HitResult.INDIRECT }); - globalScene.phaseManager.queueMessage(i18next.t("abilityTriggers:badDreams", { pokemonName: getPokemonNameWithAffix(opp) })); + globalScene.phaseManager.queueMessage( + i18next.t("abilityTriggers:badDreams", { pokemonName: getPokemonNameWithAffix(opp) }), + ); } } } } } - /** * Grabs the last failed Pokeball used * @extends PostTurnAbAttr * @see {@linkcode applyPostTurn} */ export class FetchBallAbAttr extends PostTurnAbAttr { - constructor() { - super(); - } - - override canApplyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApplyPostTurn(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): boolean { return !simulated && !isNullOrUndefined(globalScene.currentBattle.lastUsedPokeball) && !!pokemon.isPlayer; } /** * Adds the last used Pokeball back into the player's inventory * @param pokemon {@linkcode Pokemon} with this ability - * @param passive N/A - * @param args N/A + * @param _passive N/A + * @param _args N/A */ - override applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostTurn(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): void { const lastUsed = globalScene.currentBattle.lastUsedPokeball; globalScene.pokeballCounts[lastUsed!]++; globalScene.currentBattle.lastUsedPokeball = null; - globalScene.phaseManager.queueMessage(i18next.t("abilityTriggers:fetchBall", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), pokeballName: getPokeballName(lastUsed!) })); + globalScene.phaseManager.queueMessage( + i18next.t("abilityTriggers:fetchBall", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + pokeballName: getPokeballName(lastUsed!), + }), + ); } } -export class PostBiomeChangeAbAttr extends AbAttr { } +export class PostBiomeChangeAbAttr extends AbAttr {} export class PostBiomeChangeWeatherChangeAbAttr extends PostBiomeChangeAbAttr { private weatherType: WeatherType; @@ -4351,11 +5742,17 @@ export class PostBiomeChangeWeatherChangeAbAttr extends PostBiomeChangeAbAttr { this.weatherType = weatherType; } - override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - return ((globalScene.arena.weather?.isImmutable() ?? false) && globalScene.arena.canSetWeather(this.weatherType)); + override canApply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { + return (globalScene.arena.weather?.isImmutable() ?? false) && globalScene.arena.canSetWeather(this.weatherType); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + _cancelled: BooleanHolder, + _args: any[], + ): void { if (!simulated) { globalScene.arena.trySetWeather(this.weatherType, pokemon); } @@ -4371,11 +5768,17 @@ export class PostBiomeChangeTerrainChangeAbAttr extends PostBiomeChangeAbAttr { this.terrainType = terrainType; } - override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { return globalScene.arena.canSetTerrain(this.terrainType); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + _cancelled: BooleanHolder, + _args: any[], + ): void { if (!simulated) { globalScene.arena.trySetTerrain(this.terrainType, false, pokemon); } @@ -4388,22 +5791,23 @@ export class PostBiomeChangeTerrainChangeAbAttr extends PostBiomeChangeAbAttr { */ export class PostMoveUsedAbAttr extends AbAttr { canApplyPostMoveUsed( - pokemon: Pokemon, - move: PokemonMove, - source: Pokemon, - targets: BattlerIndex[], - simulated: boolean, - args: any[]): boolean { + _pokemon: Pokemon, + _move: PokemonMove, + _source: Pokemon, + _targets: BattlerIndex[], + _simulated: boolean, + _args: any[], + ): boolean { return true; } applyPostMoveUsed( - pokemon: Pokemon, - move: PokemonMove, - source: Pokemon, - targets: BattlerIndex[], - simulated: boolean, - args: any[], + _pokemon: Pokemon, + _move: PokemonMove, + _source: Pokemon, + _targets: BattlerIndex[], + _simulated: boolean, + _args: any[], ): void {} } @@ -4412,13 +5816,26 @@ export class PostMoveUsedAbAttr extends AbAttr { * @extends PostMoveUsedAbAttr */ export class PostDancingMoveAbAttr extends PostMoveUsedAbAttr { - override canApplyPostMoveUsed(dancer: Pokemon, move: PokemonMove, source: Pokemon, targets: BattlerIndex[], simulated: boolean, args: any[]): boolean { + override canApplyPostMoveUsed( + dancer: Pokemon, + _move: PokemonMove, + source: Pokemon, + _targets: BattlerIndex[], + _simulated: boolean, + _args: any[], + ): boolean { // List of tags that prevent the Dancer from replicating the move - const forbiddenTags = [ BattlerTagType.FLYING, BattlerTagType.UNDERWATER, - BattlerTagType.UNDERGROUND, BattlerTagType.HIDDEN ]; + const forbiddenTags = [ + BattlerTagType.FLYING, + BattlerTagType.UNDERWATER, + BattlerTagType.UNDERGROUND, + BattlerTagType.HIDDEN, + ]; // The move to replicate cannot come from the Dancer - return source.getBattlerIndex() !== dancer.getBattlerIndex() - && !dancer.summonData.tags.some(tag => forbiddenTags.includes(tag.tagType)); + return ( + source.getBattlerIndex() !== dancer.getBattlerIndex() && + !dancer.summonData.tags.some(tag => forbiddenTags.includes(tag.tagType)) + ); } /** @@ -4428,7 +5845,7 @@ export class PostDancingMoveAbAttr extends PostMoveUsedAbAttr { * @param move {@linkcode PokemonMove} Dancing move used by the source * @param source {@linkcode Pokemon} that used the dancing move * @param targets {@linkcode BattlerIndex}Targets of the dancing move - * @param args N/A + * @param _args N/A */ override applyPostMoveUsed( dancer: Pokemon, @@ -4436,7 +5853,8 @@ export class PostDancingMoveAbAttr extends PostMoveUsedAbAttr { source: Pokemon, targets: BattlerIndex[], simulated: boolean, - args: any[]): void { + _args: any[], + ): void { if (!simulated) { dancer.turnData.extraTurns++; // If the move is an AttackMove or a StatusMove the Dancer must replicate the move on the source of the Dance @@ -4445,7 +5863,7 @@ export class PostDancingMoveAbAttr extends PostMoveUsedAbAttr { globalScene.phaseManager.unshiftPhase(new MovePhase(dancer, target, move, true, true)); } else if (move.getMove() instanceof SelfStatusMove) { // If the move is a SelfStatusMove (ie. Swords Dance) the Dancer should replicate it on itself - globalScene.phaseManager.unshiftPhase(new MovePhase(dancer, [ dancer.getBattlerIndex() ], move, true, true)); + globalScene.phaseManager.unshiftPhase(new MovePhase(dancer, [dancer.getBattlerIndex()], move, true, true)); } } } @@ -4457,11 +5875,11 @@ export class PostDancingMoveAbAttr extends PostMoveUsedAbAttr { * @param source {@linkcode Pokemon} Source of the dancing move * @param targets {@linkcode BattlerIndex} Targets of the dancing move */ - getTarget(dancer: Pokemon, source: Pokemon, targets: BattlerIndex[]) : BattlerIndex[] { + getTarget(dancer: Pokemon, source: Pokemon, targets: BattlerIndex[]): BattlerIndex[] { if (dancer.isPlayer()) { - return source.isPlayer() ? targets : [ source.getBattlerIndex() ]; + return source.isPlayer() ? targets : [source.getBattlerIndex()]; } - return source.isPlayer() ? [ source.getBattlerIndex() ] : targets; + return source.isPlayer() ? [source.getBattlerIndex()] : targets; } } @@ -4470,11 +5888,11 @@ export class PostDancingMoveAbAttr extends PostMoveUsedAbAttr { * @extends AbAttr */ export class PostItemLostAbAttr extends AbAttr { - canApplyPostItemLost(pokemon: Pokemon, simulated: boolean, args: any[]): boolean { + canApplyPostItemLost(_pokemon: Pokemon, _simulated: boolean, _args: any[]): boolean { return true; } - applyPostItemLost(pokemon: Pokemon, simulated: boolean, args: any[]): void {} + applyPostItemLost(_pokemon: Pokemon, _simulated: boolean, _args: any[]): void {} } /** @@ -4488,16 +5906,16 @@ export class PostItemLostApplyBattlerTagAbAttr extends PostItemLostAbAttr { this.tagType = tagType; } - override canApplyPostItemLost(pokemon: Pokemon, simulated: boolean, args: any[]): boolean { + override canApplyPostItemLost(pokemon: Pokemon, simulated: boolean, _args: any[]): boolean { return !pokemon.getTag(this.tagType) && !simulated; } /** * Adds the last used Pokeball back into the player's inventory * @param pokemon {@linkcode Pokemon} with this ability - * @param args N/A + * @param _args N/A */ - override applyPostItemLost(pokemon: Pokemon, simulated: boolean, args: any[]): void { + override applyPostItemLost(pokemon: Pokemon, _simulated: boolean, _args: any[]): void { pokemon.addTag(this.tagType); } } @@ -4511,7 +5929,13 @@ export class StatStageChangeMultiplierAbAttr extends AbAttr { this.multiplier = multiplier; } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _cancelled: BooleanHolder, + args: any[], + ): void { (args[0] as NumberHolder).value *= this.multiplier; } } @@ -4519,13 +5943,23 @@ export class StatStageChangeMultiplierAbAttr extends AbAttr { export class StatStageChangeCopyAbAttr extends AbAttr { override apply( pokemon: Pokemon, - passive: boolean, + _passive: boolean, simulated: boolean, - cancelled: BooleanHolder, + _cancelled: BooleanHolder, args: any[], ): void { if (!simulated) { - globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, (args[0] as BattleStat[]), (args[1] as number), true, false, false)); + globalScene.phaseManager.unshiftPhase( + new StatStageChangePhase( + pokemon.getBattlerIndex(), + true, + args[0] as BattleStat[], + args[1] as number, + true, + false, + false, + ), + ); } } } @@ -4535,7 +5969,13 @@ export class BypassBurnDamageReductionAbAttr extends AbAttr { super(false); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + cancelled: BooleanHolder, + _args: any[], + ): void { cancelled.value = true; } } @@ -4543,7 +5983,7 @@ export class BypassBurnDamageReductionAbAttr extends AbAttr { /** * Causes Pokemon to take reduced damage from the {@linkcode StatusEffect.BURN | Burn} status * @param multiplier Multiplied with the damage taken -*/ + */ export class ReduceBurnDamageAbAttr extends AbAttr { constructor(protected multiplier: number) { super(false); @@ -4551,18 +5991,30 @@ export class ReduceBurnDamageAbAttr extends AbAttr { /** * Applies the damage reduction - * @param pokemon N/A - * @param passive N/A - * @param cancelled N/A + * @param _pokemon N/A + * @param _passive N/A + * @param _cancelled N/A * @param args `[0]` {@linkcode NumberHolder} The damage value being modified */ - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _cancelled: BooleanHolder, + args: any[], + ): void { (args[0] as NumberHolder).value = toDmgValue((args[0] as NumberHolder).value * this.multiplier); } } export class DoubleBerryEffectAbAttr extends AbAttr { - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _cancelled: BooleanHolder, + args: any[], + ): void { (args[0] as NumberHolder).value *= 2; } } @@ -4600,7 +6052,7 @@ export class HealFromBerryUseAbAttr extends AbAttr { this.healPercent = Math.max(Math.min(healPercent, 1), 0); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, ...args: [BooleanHolder, any[]]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, ..._args: [BooleanHolder, any[]]): void { if (simulated) { return; } @@ -4610,15 +6062,24 @@ export class HealFromBerryUseAbAttr extends AbAttr { new PokemonHealPhase( pokemon.getBattlerIndex(), toDmgValue(pokemon.getMaxHp() * this.healPercent), - i18next.t("abilityTriggers:healFromBerryUse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }), - true - ) - ); + i18next.t("abilityTriggers:healFromBerryUse", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + abilityName, + }), + true, + ), + ); } } export class RunSuccessAbAttr extends AbAttr { - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _cancelled: BooleanHolder, + args: any[], + ): void { (args[0] as NumberHolder).value = 256; } } @@ -4640,23 +6101,23 @@ export class CheckTrappedAbAttr extends AbAttr { } canApplyCheckTrapped( - pokemon: Pokemon, - passive: boolean, - simulated: boolean, - trapped: BooleanHolder, - otherPokemon: Pokemon, - args: any[], + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _trapped: BooleanHolder, + _otherPokemon: Pokemon, + _args: any[], ): boolean { return true; } applyCheckTrapped( - pokemon: Pokemon, - passive: boolean, - simulated: boolean, - trapped: BooleanHolder, - otherPokemon: Pokemon, - args: any[], + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _trapped: BooleanHolder, + _otherPokemon: Pokemon, + _args: any[], ): void {} } @@ -4667,10 +6128,23 @@ export class CheckTrappedAbAttr extends AbAttr { * @see {@linkcode applyCheckTrapped} */ export class ArenaTrapAbAttr extends CheckTrappedAbAttr { - override canApplyCheckTrapped(pokemon: Pokemon, passive: boolean, simulated: boolean, trapped: BooleanHolder, otherPokemon: Pokemon, args: any[]): boolean { - return this.arenaTrapCondition(pokemon, otherPokemon) - && !(otherPokemon.getTypes(true).includes(PokemonType.GHOST) || (otherPokemon.getTypes(true).includes(PokemonType.STELLAR) && otherPokemon.getTypes().includes(PokemonType.GHOST))) - && !otherPokemon.hasAbility(AbilityId.RUN_AWAY); + override canApplyCheckTrapped( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _trapped: BooleanHolder, + otherPokemon: Pokemon, + _args: any[], + ): boolean { + return ( + this.arenaTrapCondition(pokemon, otherPokemon) && + !( + otherPokemon.getTypes(true).includes(PokemonType.GHOST) || + (otherPokemon.getTypes(true).includes(PokemonType.STELLAR) && + otherPokemon.getTypes().includes(PokemonType.GHOST)) + ) && + !otherPokemon.hasAbility(AbilityId.RUN_AWAY) + ); } /** @@ -4679,18 +6153,28 @@ export class ArenaTrapAbAttr extends CheckTrappedAbAttr { * If the enemy has the ability Run Away, it is not trapped. * If the user has Magnet Pull and the enemy is not a Steel type, it is not trapped. * If the user has Arena Trap and the enemy is not grounded, it is not trapped. - * @param pokemon The {@link Pokemon} with this {@link AbAttr} - * @param passive N/A + * @param _pokemon The {@link Pokemon} with this {@link AbAttr} + * @param _passive N/A * @param trapped {@link BooleanHolder} indicating whether the other Pokemon is trapped or not - * @param otherPokemon The {@link Pokemon} that is affected by an Arena Trap ability - * @param args N/A + * @param _otherPokemon The {@link Pokemon} that is affected by an Arena Trap ability + * @param _args N/A */ - override applyCheckTrapped(pokemon: Pokemon, passive: boolean, simulated: boolean, trapped: BooleanHolder, otherPokemon: Pokemon, args: any[]): void { + override applyCheckTrapped( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + trapped: BooleanHolder, + _otherPokemon: Pokemon, + _args: any[], + ): void { trapped.value = true; } - getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { - return i18next.t("abilityTriggers:arenaTrap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }); + getTriggerMessage(pokemon: Pokemon, abilityName: string, ..._args: any[]): string { + return i18next.t("abilityTriggers:arenaTrap", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + abilityName, + }); } } @@ -4699,27 +6183,33 @@ export class MaxMultiHitAbAttr extends AbAttr { super(false); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _cancelled: BooleanHolder, + args: any[], + ): void { (args[0] as NumberHolder).value = 0; } } export class PostBattleAbAttr extends AbAttr { - constructor(showAbility: boolean = true) { + constructor(showAbility = true) { super(showAbility); } - canApplyPostBattle(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + canApplyPostBattle(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { return true; } - applyPostBattle(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void {} + applyPostBattle(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): void {} } export class PostBattleLootAbAttr extends PostBattleAbAttr { private randItem?: PokemonHeldItemModifier; - override canApplyPostBattle(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApplyPostBattle(pokemon: Pokemon, _passive: boolean, simulated: boolean, args: any[]): boolean { const postBattleLoot = globalScene.currentBattle.postBattleLoot; if (!simulated && postBattleLoot.length && args[0]) { this.randItem = randSeedItem(postBattleLoot); @@ -4729,9 +6219,9 @@ export class PostBattleLootAbAttr extends PostBattleAbAttr { } /** - * @param args - `[0]`: boolean for if the battle ended in a victory + * @param _args - `[0]`: boolean for if the battle ended in a victory */ - override applyPostBattle(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostBattle(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): void { const postBattleLoot = globalScene.currentBattle.postBattleLoot; if (!this.randItem) { this.randItem = randSeedItem(postBattleLoot); @@ -4739,18 +6229,39 @@ export class PostBattleLootAbAttr extends PostBattleAbAttr { if (globalScene.tryTransferHeldItemModifier(this.randItem, pokemon, true, 1, true, undefined, false)) { postBattleLoot.splice(postBattleLoot.indexOf(this.randItem), 1); - globalScene.phaseManager.queueMessage(i18next.t("abilityTriggers:postBattleLoot", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), itemName: this.randItem.type.name })); + globalScene.phaseManager.queueMessage( + i18next.t("abilityTriggers:postBattleLoot", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + itemName: this.randItem.type.name, + }), + ); } this.randItem = undefined; } } export class PostFaintAbAttr extends AbAttr { - canApplyPostFaint(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker?: Pokemon, move?: Move, hitResult?: HitResult, ...args: any[]): boolean { + canApplyPostFaint( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _attacker?: Pokemon, + _move?: Move, + _hitResult?: HitResult, + ..._args: any[] + ): boolean { return true; } - applyPostFaint(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker?: Pokemon, move?: Move, hitResult?: HitResult, ...args: any[]): void {} + applyPostFaint( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _attacker?: Pokemon, + _move?: Move, + _hitResult?: HitResult, + ..._args: any[] + ): void {} } /** @@ -4759,21 +6270,37 @@ export class PostFaintAbAttr extends AbAttr { * @extends PostFaintAbAttr */ export class PostFaintUnsuppressedWeatherFormChangeAbAttr extends PostFaintAbAttr { - override canApplyPostFaint(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker?: Pokemon, move?: Move, hitResult?: HitResult, ...args: any[]): boolean { + override canApplyPostFaint( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _attacker?: Pokemon, + _move?: Move, + _hitResult?: HitResult, + ..._args: any[] + ): boolean { return getPokemonWithWeatherBasedForms().length > 0; } /** * Triggers {@linkcode Arena.triggerWeatherBasedFormChanges | triggerWeatherBasedFormChanges} * when the user of the ability faints - * @param {Pokemon} pokemon the fainted Pokemon - * @param passive n/a - * @param attacker n/a - * @param move n/a - * @param hitResult n/a - * @param args n/a + * @param {Pokemon} _pokemon the fainted Pokemon + * @param _passive n/a + * @param _attacker n/a + * @param _move n/a + * @param _hitResult n/a + * @param _args n/a */ - override applyPostFaint(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): void { + override applyPostFaint( + _pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + _attacker: Pokemon, + _move: Move, + _hitResult: HitResult, + _args: any[], + ): void { if (!simulated) { globalScene.arena.triggerWeatherBasedFormChanges(); } @@ -4789,22 +6316,46 @@ export class PostFaintContactDamageAbAttr extends PostFaintAbAttr { this.damageRatio = damageRatio; } - override canApplyPostFaint(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker?: Pokemon, move?: Move, hitResult?: HitResult, ...args: any[]): boolean { - const diedToDirectDamage = move !== undefined && attacker !== undefined && move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}); + override canApplyPostFaint( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + attacker?: Pokemon, + move?: Move, + _hitResult?: HitResult, + ..._args: any[] + ): boolean { + const diedToDirectDamage = + move !== undefined && + attacker !== undefined && + move.doesFlagEffectApply({ flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon }); const cancelled = new BooleanHolder(false); globalScene.getField(true).map(p => applyAbAttrs(FieldPreventExplosiveMovesAbAttr, p, cancelled, simulated)); return !(!diedToDirectDamage || cancelled.value || attacker!.hasAbilityWithAttr(BlockNonDirectDamageAbAttr)); } - override applyPostFaint(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker?: Pokemon, move?: Move, hitResult?: HitResult, ...args: any[]): void { + override applyPostFaint( + _pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + attacker?: Pokemon, + _move?: Move, + _hitResult?: HitResult, + ..._args: any[] + ): void { if (!simulated) { - attacker!.damageAndUpdate(toDmgValue(attacker!.getMaxHp() * (1 / this.damageRatio)), { result: HitResult.INDIRECT }); + attacker!.damageAndUpdate(toDmgValue(attacker!.getMaxHp() * (1 / this.damageRatio)), { + result: HitResult.INDIRECT, + }); attacker!.turnData.damageTaken += toDmgValue(attacker!.getMaxHp() * (1 / this.damageRatio)); } } - getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { - return i18next.t("abilityTriggers:postFaintContactDamage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }); + getTriggerMessage(pokemon: Pokemon, abilityName: string, ..._args: any[]): string { + return i18next.t("abilityTriggers:postFaintContactDamage", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + abilityName, + }); } } @@ -4812,20 +6363,28 @@ export class PostFaintContactDamageAbAttr extends PostFaintAbAttr { * Attribute used for abilities (Innards Out) that damage the opponent based on how much HP the last attack used to knock out the owner of the ability. */ export class PostFaintHPDamageAbAttr extends PostFaintAbAttr { - constructor() { - super (); - } - - override applyPostFaint(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker?: Pokemon, move?: Move, hitResult?: HitResult, ...args: any[]): void { - if (move !== undefined && attacker !== undefined && !simulated) { //If the mon didn't die to indirect damage + override applyPostFaint( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + attacker?: Pokemon, + move?: Move, + _hitResult?: HitResult, + ..._args: any[] + ): void { + //If the mon didn't die to indirect damage + if (move !== undefined && attacker !== undefined && !simulated) { const damage = pokemon.turnData.attacksReceived[0].damage; - attacker.damageAndUpdate((damage), { result: HitResult.INDIRECT }); + attacker.damageAndUpdate(damage, { result: HitResult.INDIRECT }); attacker.turnData.damageTaken += damage; } } - getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { - return i18next.t("abilityTriggers:postFaintHpDamage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }); + getTriggerMessage(pokemon: Pokemon, abilityName: string, ..._args: any[]): string { + return i18next.t("abilityTriggers:postFaintHpDamage", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + abilityName, + }); } } @@ -4841,7 +6400,7 @@ export class RedirectMoveAbAttr extends AbAttr { * - `[2]` - The Pokemon that used the move being redirected */ - override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApply(pokemon: Pokemon, _passive: boolean, _simulated: boolean, args: any[]): boolean { if (!this.canRedirect(args[0] as MoveId, args[2] as Pokemon)) { return false; } @@ -4850,15 +6409,21 @@ export class RedirectMoveAbAttr extends AbAttr { return target.value !== newTarget; } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _cancelled: BooleanHolder, + args: any[], + ): void { const target = args[1] as NumberHolder; const newTarget = pokemon.getBattlerIndex(); target.value = newTarget; } - canRedirect(moveId: MoveId, user: Pokemon): boolean { + canRedirect(moveId: MoveId, _user: Pokemon): boolean { const move = allMoves[moveId]; - return !![ MoveTarget.NEAR_OTHER, MoveTarget.OTHER ].find(t => move.moveTarget === t); + return !![MoveTarget.NEAR_OTHER, MoveTarget.OTHER].find(t => move.moveTarget === t); } } @@ -4875,7 +6440,7 @@ export class RedirectTypeMoveAbAttr extends RedirectMoveAbAttr { } } -export class BlockRedirectAbAttr extends AbAttr { } +export class BlockRedirectAbAttr extends AbAttr {} /** * Used by Early Bird, makes the pokemon wake up faster @@ -4891,7 +6456,7 @@ export class ReduceStatusEffectDurationAbAttr extends AbAttr { this.statusEffect = statusEffect; } - override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, args: any[]): boolean { return args[1] instanceof NumberHolder && args[0] === this.statusEffect; } @@ -4901,7 +6466,13 @@ export class ReduceStatusEffectDurationAbAttr extends AbAttr { * - `[0]` - The {@linkcode StatusEffect} of the Pokemon * - `[1]` - The number of turns remaining until the status is healed */ - override apply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _cancelled: BooleanHolder, args: any[]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _cancelled: BooleanHolder, + args: any[], + ): void { args[1].value -= 1; } } @@ -4919,23 +6490,35 @@ export class FlinchStatStageChangeAbAttr extends FlinchEffectAbAttr { constructor(stats: BattleStat[], stages: number) { super(); - this.stats = Array.isArray(stats) - ? stats - : [ stats ]; + this.stats = Array.isArray(stats) ? stats : [stats]; this.stages = stages; } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + _cancelled: BooleanHolder, + _args: any[], + ): void { if (!simulated) { - globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, this.stats, this.stages)); + globalScene.phaseManager.unshiftPhase( + new StatStageChangePhase(pokemon.getBattlerIndex(), true, this.stats, this.stages), + ); } } } -export class IncreasePpAbAttr extends AbAttr { } +export class IncreasePpAbAttr extends AbAttr {} export class ForceSwitchOutImmunityAbAttr extends AbAttr { - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + cancelled: BooleanHolder, + _args: any[], + ): void { cancelled.value = true; } } @@ -4945,12 +6528,18 @@ export class ReduceBerryUseThresholdAbAttr extends AbAttr { super(false); } - override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApply(pokemon: Pokemon, _passive: boolean, _simulated: boolean, args: any[]): boolean { const hpRatio = pokemon.getHpRatio(); return args[0].value < hpRatio; } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _cancelled: BooleanHolder, + args: any[], + ): void { args[0].value *= 2; } } @@ -4968,7 +6557,13 @@ export class WeightMultiplierAbAttr extends AbAttr { this.multiplier = multiplier; } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _cancelled: BooleanHolder, + args: any[], + ): void { (args[0] as NumberHolder).value *= this.multiplier; } } @@ -4978,7 +6573,13 @@ export class SyncEncounterNatureAbAttr extends AbAttr { super(false); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _cancelled: BooleanHolder, + args: any[], + ): void { (args[0] as Pokemon).setNature(pokemon.getNature()); } } @@ -4989,22 +6590,28 @@ export class MoveAbilityBypassAbAttr extends AbAttr { constructor(moveIgnoreFunc?: (pokemon: Pokemon, move: Move) => boolean) { super(false); - this.moveIgnoreFunc = moveIgnoreFunc || ((pokemon, move) => true); + this.moveIgnoreFunc = moveIgnoreFunc || ((_pokemon, _move) => true); } - override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - return this.moveIgnoreFunc(pokemon, (args[0] as Move)); + override canApply(pokemon: Pokemon, _passive: boolean, _simulated: boolean, args: any[]): boolean { + return this.moveIgnoreFunc(pokemon, args[0] as Move); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + cancelled: BooleanHolder, + _args: any[], + ): void { cancelled.value = true; } } -export class AlwaysHitAbAttr extends AbAttr { } +export class AlwaysHitAbAttr extends AbAttr {} /** Attribute for abilities that allow moves that make contact to ignore protection (i.e. Unseen Fist) */ -export class IgnoreProtectOnContactAbAttr extends AbAttr { } +export class IgnoreProtectOnContactAbAttr extends AbAttr {} /** * Attribute implementing the effects of {@link https://bulbapedia.bulbagarden.net/wiki/Infiltrator_(Ability) | Infiltrator}. @@ -5015,19 +6622,19 @@ export class InfiltratorAbAttr extends AbAttr { super(false); } - override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, args: any[]): boolean { return args[0] instanceof BooleanHolder; } /** * Sets a flag to bypass screens, Substitute, Safeguard, and Mist - * @param pokemon n/a - * @param passive n/a - * @param simulated n/a - * @param cancelled n/a + * @param _pokemon n/a + * @param _passive n/a + * @param _simulated n/a + * @param _cancelled n/a * @param args `[0]` a {@linkcode BooleanHolder | BooleanHolder} containing the flag */ - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: null, args: any[]): void { + override apply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _cancelled: null, args: any[]): void { const bypassed = args[0]; bypassed.value = true; } @@ -5038,7 +6645,7 @@ export class InfiltratorAbAttr extends AbAttr { * Allows the source to bounce back {@linkcode MoveFlags.REFLECTABLE | Reflectable} * moves as if the user had used {@linkcode MoveId.MAGIC_COAT | Magic Coat}. */ -export class ReflectStatusMoveAbAttr extends AbAttr { } +export class ReflectStatusMoveAbAttr extends AbAttr {} export class NoTransformAbilityAbAttr extends AbAttr { constructor() { @@ -5062,11 +6669,17 @@ export class IgnoreTypeImmunityAbAttr extends AbAttr { this.allowedMoveTypes = allowedMoveTypes; } - override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, args: any[]): boolean { return this.defenderType === (args[1] as PokemonType) && this.allowedMoveTypes.includes(args[0] as PokemonType); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + cancelled: BooleanHolder, + _args: any[], + ): void { cancelled.value = true; } } @@ -5085,11 +6698,17 @@ export class IgnoreTypeStatusEffectImmunityAbAttr extends AbAttr { this.defenderType = defenderType; } - override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, args: any[]): boolean { return this.statusEffect.includes(args[0] as StatusEffect) && this.defenderType.includes(args[1] as PokemonType); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + cancelled: BooleanHolder, + _args: any[], + ): void { cancelled.value = true; } } @@ -5101,20 +6720,16 @@ export class IgnoreTypeStatusEffectImmunityAbAttr extends AbAttr { * @see {@linkcode applyPostBattle} */ export class MoneyAbAttr extends PostBattleAbAttr { - constructor() { - super(); - } - - override canApplyPostBattle(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApplyPostBattle(_pokemon: Pokemon, _passive: boolean, simulated: boolean, args: any[]): boolean { return !simulated && args[0]; } /** - * @param pokemon {@linkcode Pokemon} that is the user of this ability. - * @param passive N/A - * @param args - `[0]`: boolean for if the battle ended in a victory + * @param _pokemon {@linkcode Pokemon} that is the user of this ability. + * @param _passive N/A + * @param _args - `[0]`: boolean for if the battle ended in a victory */ - override applyPostBattle(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostBattle(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): void { globalScene.currentBattle.moneyScattered += globalScene.getWaveMoneyAmount(0.2); } } @@ -5139,14 +6754,16 @@ export class PostSummonStatStageChangeOnArenaAbAttr extends PostSummonStatStageC * @param {ArenaTagType} tagType - The type of arena tag to check for. */ constructor(tagType: ArenaTagType) { - super([ Stat.ATK ], 1, true, false); + super([Stat.ATK], 1, true, false); this.tagType = tagType; } override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { const side = pokemon.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; - return (globalScene.arena.getTagOnSide(this.tagType, side) ?? false) - && super.canApplyPostSummon(pokemon, passive, simulated, args); + return ( + (globalScene.arena.getTagOnSide(this.tagType, side) ?? false) && + super.canApplyPostSummon(pokemon, passive, simulated, args) + ); } /** @@ -5172,10 +6789,16 @@ export class PostSummonStatStageChangeOnArenaAbAttr extends PostSummonStatStageC export class FormBlockDamageAbAttr extends ReceivedMoveDamageMultiplierAbAttr { private multiplier: number; private tagType: BattlerTagType; - private recoilDamageFunc?: ((pokemon: Pokemon) => number); + private recoilDamageFunc?: (pokemon: Pokemon) => number; private triggerMessageFunc: (pokemon: Pokemon, abilityName: string) => string; - constructor(condition: PokemonDefendCondition, multiplier: number, tagType: BattlerTagType, triggerMessageFunc: (pokemon: Pokemon, abilityName: string) => string, recoilDamageFunc?: (pokemon: Pokemon) => number) { + constructor( + condition: PokemonDefendCondition, + multiplier: number, + tagType: BattlerTagType, + triggerMessageFunc: (pokemon: Pokemon, abilityName: string) => string, + recoilDamageFunc?: (pokemon: Pokemon) => number, + ) { super(condition, multiplier); this.multiplier = multiplier; @@ -5184,7 +6807,15 @@ export class FormBlockDamageAbAttr extends ReceivedMoveDamageMultiplierAbAttr { this.triggerMessageFunc = triggerMessageFunc; } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + attacker: Pokemon, + move: Move, + _cancelled: BooleanHolder | null, + _args: any[], + ): boolean { return this.condition(pokemon, attacker, move) && !move.hitsSubstitute(attacker, pokemon); } @@ -5194,17 +6825,29 @@ export class FormBlockDamageAbAttr extends ReceivedMoveDamageMultiplierAbAttr { * * @param pokemon The Pokémon with the ability. * @param _passive n/a - * @param attacker The attacking Pokémon. - * @param move The move being used. + * @param _attacker The attacking Pokémon. + * @param _move The move being used. * @param _cancelled n/a * @param args Additional arguments. */ - override applyPreDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _cancelled: BooleanHolder, args: any[]): void { + override applyPreDefend( + pokemon: Pokemon, + _passive: boolean, + simulated: boolean, + _attacker: Pokemon, + _move: Move, + _cancelled: BooleanHolder, + args: any[], + ): void { if (!simulated) { (args[0] as NumberHolder).value = this.multiplier; pokemon.removeTag(this.tagType); if (this.recoilDamageFunc) { - pokemon.damageAndUpdate(this.recoilDamageFunc(pokemon), { result: HitResult.INDIRECT, ignoreSegments: true, ignoreFaintPhase: true }); + pokemon.damageAndUpdate(this.recoilDamageFunc(pokemon), { + result: HitResult.INDIRECT, + ignoreSegments: true, + ignoreFaintPhase: true, + }); } } } @@ -5227,9 +6870,9 @@ export class FormBlockDamageAbAttr extends ReceivedMoveDamageMultiplierAbAttr { * @see {@linkcode applyPreSummon()} */ export class PreSummonAbAttr extends AbAttr { - applyPreSummon(pokemon: Pokemon, passive: boolean, args: any[]): void {} + applyPreSummon(_pokemon: Pokemon, _passive: boolean, _args: any[]): void {} - canApplyPreSummon(pokemon: Pokemon, passive: boolean, args: any[]): boolean { + canApplyPreSummon(_pokemon: Pokemon, _passive: boolean, _args: any[]): boolean { return true; } } @@ -5239,27 +6882,32 @@ export class IllusionPreSummonAbAttr extends PreSummonAbAttr { * Apply a new illusion when summoning Zoroark if the illusion is available * * @param pokemon - The Pokémon with the Illusion ability. - * @param passive - N/A - * @param args - N/A + * @param _passive - N/A + * @param _args - N/A * @returns Whether the illusion was applied. */ - override applyPreSummon(pokemon: Pokemon, passive: boolean, args: any[]): void { - const party: Pokemon[] = (pokemon.isPlayer() ? globalScene.getPlayerParty() : globalScene.getEnemyParty()).filter(p => p.isAllowedInBattle()); - const lastPokemon: Pokemon = party.filter(p => p !==pokemon).at(-1) || pokemon; + override applyPreSummon(pokemon: Pokemon, _passive: boolean, _args: any[]): void { + const party: Pokemon[] = (pokemon.isPlayer() ? globalScene.getPlayerParty() : globalScene.getEnemyParty()).filter( + p => p.isAllowedInBattle(), + ); + const lastPokemon: Pokemon = party.filter(p => p !== pokemon).at(-1) || pokemon; pokemon.setIllusion(lastPokemon); } - override canApplyPreSummon(pokemon: Pokemon, passive: boolean, args: any[]): boolean { + override canApplyPreSummon(pokemon: Pokemon, _passive: boolean, _args: any[]): boolean { if (pokemon.hasTrainer()) { - const party: Pokemon[] = (pokemon.isPlayer() ? globalScene.getPlayerParty() : globalScene.getEnemyParty()).filter(p => p.isAllowedInBattle()); - const lastPokemon: Pokemon = party.filter(p => p !==pokemon).at(-1) || pokemon; + const party: Pokemon[] = (pokemon.isPlayer() ? globalScene.getPlayerParty() : globalScene.getEnemyParty()).filter( + p => p.isAllowedInBattle(), + ); + const lastPokemon: Pokemon = party.filter(p => p !== pokemon).at(-1) || pokemon; const speciesId = lastPokemon.species.speciesId; // If the last conscious Pokémon in the party is a Terastallized Ogerpon or Terapagos, Illusion will not activate. // Illusion will also not activate if the Pokémon with Illusion is Terastallized and the last Pokémon in the party is Ogerpon or Terapagos. if ( lastPokemon === pokemon || - ((speciesId === SpeciesId.OGERPON || speciesId === SpeciesId.TERAPAGOS) && (lastPokemon.isTerastallized || pokemon.isTerastallized)) + ((speciesId === SpeciesId.OGERPON || speciesId === SpeciesId.TERAPAGOS) && + (lastPokemon.isTerastallized || pokemon.isTerastallized)) ) { return false; } @@ -5269,7 +6917,13 @@ export class IllusionPreSummonAbAttr extends PreSummonAbAttr { } export class IllusionBreakAbAttr extends AbAttr { - override apply(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _cancelled: BooleanHolder | null, _args: any[]): void { + override apply( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _cancelled: BooleanHolder | null, + _args: any[], + ): void { pokemon.breakIllusion(); pokemon.summonData.illusionBroken = true; } @@ -5280,21 +6934,42 @@ export class PostDefendIllusionBreakAbAttr extends PostDefendAbAttr { * Destroy the illusion upon taking damage * * @param pokemon - The Pokémon with the Illusion ability. - * @param passive - unused - * @param attacker - The attacking Pokémon. - * @param move - The move being used. - * @param hitResult - The type of hitResult the pokemon got - * @param args - unused + * @param _passive - unused + * @param _attacker - The attacking Pokémon. + * @param _move - The move being used. + * @param _hitResult - The type of hitResult the pokemon got + * @param _args - unused * @returns - Whether the illusion was destroyed. */ - override applyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): void { + override applyPostDefend( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _attacker: Pokemon, + _move: Move, + _hitResult: HitResult, + _args: any[], + ): void { pokemon.breakIllusion(); pokemon.summonData.illusionBroken = true; } - override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { - const breakIllusion: HitResult[] = [ HitResult.EFFECTIVE, HitResult.SUPER_EFFECTIVE, HitResult.NOT_VERY_EFFECTIVE, HitResult.ONE_HIT_KO ]; - return breakIllusion.includes(hitResult) && !!pokemon.summonData.illusion + override canApplyPostDefend( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _attacker: Pokemon, + _move: Move, + hitResult: HitResult, + _args: any[], + ): boolean { + const breakIllusion: HitResult[] = [ + HitResult.EFFECTIVE, + HitResult.SUPER_EFFECTIVE, + HitResult.NOT_VERY_EFFECTIVE, + HitResult.ONE_HIT_KO, + ]; + return breakIllusion.includes(hitResult) && !!pokemon.summonData.illusion; } } @@ -5303,16 +6978,15 @@ export class IllusionPostBattleAbAttr extends PostBattleAbAttr { * Break the illusion once the battle ends * * @param pokemon - The Pokémon with the Illusion ability. - * @param passive - Unused - * @param args - Unused + * @param _passive - Unused + * @param _args - Unused * @returns - Whether the illusion was applied. */ - override applyPostBattle(pokemon: Pokemon, passive: boolean, simulated:boolean, args: any[]): void { - pokemon.breakIllusion() + override applyPostBattle(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): void { + pokemon.breakIllusion(); } } - /** * If a Pokémon with this Ability selects a damaging move, it has a 30% chance of going first in its priority bracket. If the Ability activates, this is announced at the start of the turn (after move selection). * @@ -5329,28 +7003,36 @@ export class BypassSpeedChanceAbAttr extends AbAttr { this.chance = chance; } - override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApply(pokemon: Pokemon, _passive: boolean, simulated: boolean, args: any[]): boolean { const bypassSpeed = args[0] as BooleanHolder; const turnCommand = globalScene.currentBattle.turnCommands[pokemon.getBattlerIndex()]; const isCommandFight = turnCommand?.command === Command.FIGHT; const move = turnCommand?.move?.move ? allMoves[turnCommand.move.move] : null; const isDamageMove = move?.category === MoveCategory.PHYSICAL || move?.category === MoveCategory.SPECIAL; - return !simulated && !bypassSpeed.value && pokemon.randBattleSeedInt(100) < this.chance && isCommandFight && isDamageMove; + return ( + !simulated && !bypassSpeed.value && pokemon.randBattleSeedInt(100) < this.chance && isCommandFight && isDamageMove + ); } /** * bypass move order in their priority bracket when pokemon choose damaging move - * @param {Pokemon} pokemon {@linkcode Pokemon} the Pokemon applying this ability - * @param {boolean} passive N/A - * @param {BooleanHolder} cancelled N/A + * @param {Pokemon} _pokemon {@linkcode Pokemon} the Pokemon applying this ability + * @param {boolean} _passive N/A + * @param {BooleanHolder} _cancelled N/A * @param {any[]} args [0] {@linkcode BooleanHolder} set to true when the ability activated */ - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _cancelled: BooleanHolder, + args: any[], + ): void { const bypassSpeed = args[0] as BooleanHolder; bypassSpeed.value = true; } - getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { + getTriggerMessage(pokemon: Pokemon, _abilityName: string, ..._args: any[]): string { return i18next.t("abilityTriggers:quickDraw", { pokemonName: getPokemonNameWithAffix(pokemon) }); } } @@ -5358,9 +7040,9 @@ export class BypassSpeedChanceAbAttr extends AbAttr { /** * This attribute checks if a Pokemon's move meets a provided condition to determine if the Pokemon can use Quick Claw * It was created because Pokemon with the ability Mycelium Might cannot access Quick Claw's benefits when using status moves. -*/ + */ export class PreventBypassSpeedChanceAbAttr extends AbAttr { - private condition: ((pokemon: Pokemon, move: Move) => boolean); + private condition: (pokemon: Pokemon, move: Move) => boolean; /** * @param {function} condition - checks if a move meets certain conditions @@ -5370,7 +7052,7 @@ export class PreventBypassSpeedChanceAbAttr extends AbAttr { this.condition = condition; } - override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApply(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { const turnCommand = globalScene.currentBattle.turnCommands[pokemon.getBattlerIndex()]; const isCommandFight = turnCommand?.command === Command.FIGHT; const move = turnCommand?.move?.move ? allMoves[turnCommand.move.move] : null; @@ -5381,7 +7063,13 @@ export class PreventBypassSpeedChanceAbAttr extends AbAttr { * @argument {boolean} bypassSpeed - determines if a Pokemon is able to bypass speed at the moment * @argument {boolean} canCheckHeldItems - determines if a Pokemon has access to Quick Claw's effects or not */ - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + override apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _cancelled: BooleanHolder, + args: any[], + ): void { const bypassSpeed = args[0] as BooleanHolder; const canCheckHeldItems = args[1] as BooleanHolder; bypassSpeed.value = false; @@ -5398,11 +7086,17 @@ export class TerrainEventTypeChangeAbAttr extends PostSummonAbAttr { super(true); } - override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + override canApply(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { return !pokemon.isTerastallized; } - override apply(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _cancelled: BooleanHolder, _args: any[]): void { + override apply( + pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _cancelled: BooleanHolder, + _args: any[], + ): void { const currentTerrain = globalScene.arena.getTerrainType(); const typeChange: PokemonType[] = this.determineTypeChange(pokemon, currentTerrain); if (typeChange.length !== 0) { @@ -5445,26 +7139,24 @@ export class TerrainEventTypeChangeAbAttr extends PostSummonAbAttr { } override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - return globalScene.arena.getTerrainType() !== TerrainType.NONE && - this.canApply(pokemon, passive, simulated, args); + return globalScene.arena.getTerrainType() !== TerrainType.NONE && this.canApply(pokemon, passive, simulated, args); } /** * Checks if the Pokemon should change types if summoned into an active terrain */ - override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, _args: any[]): void { this.apply(pokemon, passive, simulated, new BooleanHolder(false), []); } - override getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]) { + override getTriggerMessage(pokemon: Pokemon, _abilityName: string, ..._args: any[]) { const currentTerrain = globalScene.arena.getTerrainType(); const pokemonNameWithAffix = getPokemonNameWithAffix(pokemon); if (currentTerrain === TerrainType.NONE) { return i18next.t("abilityTriggers:pokemonTypeChangeRevert", { pokemonNameWithAffix }); - } else { - const moveType = i18next.t(`pokemonInfo:Type.${PokemonType[this.determineTypeChange(pokemon, currentTerrain)[0]]}`); - return i18next.t("abilityTriggers:pokemonTypeChange", { pokemonNameWithAffix, moveType }); } + const moveType = i18next.t(`pokemonInfo:Type.${PokemonType[this.determineTypeChange(pokemon, currentTerrain)[0]]}`); + return i18next.t("abilityTriggers:pokemonTypeChange", { pokemonNameWithAffix, moveType }); } } @@ -5475,23 +7167,26 @@ function applySingleAbAttrs( applyFunc: AbAttrApplyFunc, successFunc: AbAttrSuccessFunc, args: any[], - gainedMidTurn: boolean = false, - simulated: boolean = false, - messages: string[] = [] + gainedMidTurn = false, + simulated = false, + messages: string[] = [], ) { - if (!pokemon?.canApplyAbility(passive) || (passive && (pokemon.getPassiveAbility().id === pokemon.getAbility().id))) { + if (!pokemon?.canApplyAbility(passive) || (passive && pokemon.getPassiveAbility().id === pokemon.getAbility().id)) { return; } const ability = passive ? pokemon.getPassiveAbility() : pokemon.getAbility(); - if (gainedMidTurn && ability.getAttrs(attrType).some(attr => attr instanceof PostSummonAbAttr && !attr.shouldActivateOnGain())) { + if ( + gainedMidTurn && + ability.getAttrs(attrType).some(attr => attr instanceof PostSummonAbAttr && !attr.shouldActivateOnGain()) + ) { return; } for (const attr of ability.getAttrs(attrType)) { const condition = attr.getCondition(); let abShown = false; - if (condition && !condition(pokemon) || !successFunc(attr, passive)) { + if ((condition && !condition(pokemon)) || !successFunc(attr, passive)) { continue; } @@ -5540,33 +7235,41 @@ class ForceSwitchOutHelper { * - If the Pokémon is still alive (hp > 0), and if so, it leaves the field and a new SwitchPhase is initiated. */ if (switchOutTarget.isPlayer()) { - if (globalScene.getPlayerParty().filter((p) => p.isAllowedInBattle() && !p.isOnField()).length < 1) { + if (globalScene.getPlayerParty().filter(p => p.isAllowedInBattle() && !p.isOnField()).length < 1) { return false; } if (switchOutTarget.hp > 0) { switchOutTarget.leaveField(this.switchType === SwitchType.SWITCH); - globalScene.phaseManager.prependToPhase(new SwitchPhase(this.switchType, switchOutTarget.getFieldIndex(), true, true), MoveEndPhase); + globalScene.phaseManager.prependToPhase( + new SwitchPhase(this.switchType, switchOutTarget.getFieldIndex(), true, true), + MoveEndPhase, + ); return true; } - /** - * For non-wild battles, it checks if the opposing party has any available Pokémon to switch in. - * If yes, the Pokémon leaves the field and a new SwitchSummonPhase is initiated. - */ + /** + * For non-wild battles, it checks if the opposing party has any available Pokémon to switch in. + * If yes, the Pokémon leaves the field and a new SwitchSummonPhase is initiated. + */ } else if (globalScene.currentBattle.battleType !== BattleType.WILD) { - if (globalScene.getEnemyParty().filter((p) => p.isAllowedInBattle() && !p.isOnField()).length < 1) { + if (globalScene.getEnemyParty().filter(p => p.isAllowedInBattle() && !p.isOnField()).length < 1) { return false; } if (switchOutTarget.hp > 0) { switchOutTarget.leaveField(this.switchType === SwitchType.SWITCH); - const summonIndex = (globalScene.currentBattle.trainer ? globalScene.currentBattle.trainer.getNextSummonIndex((switchOutTarget as EnemyPokemon).trainerSlot) : 0); - globalScene.phaseManager.prependToPhase(new SwitchSummonPhase(this.switchType, switchOutTarget.getFieldIndex(), summonIndex, false, false), MoveEndPhase); + const summonIndex = globalScene.currentBattle.trainer + ? globalScene.currentBattle.trainer.getNextSummonIndex((switchOutTarget as EnemyPokemon).trainerSlot) + : 0; + globalScene.phaseManager.prependToPhase( + new SwitchSummonPhase(this.switchType, switchOutTarget.getFieldIndex(), summonIndex, false, false), + MoveEndPhase, + ); return true; } - /** - * For wild Pokémon battles, the Pokémon will flee if the conditions are met (waveIndex and double battles). - * It will not flee if it is a Mystery Encounter with fleeing disabled (checked in `getSwitchOutCondition()`) or if it is a wave 10x wild boss - */ + /** + * For wild Pokémon battles, the Pokémon will flee if the conditions are met (waveIndex and double battles). + * It will not flee if it is a Mystery Encounter with fleeing disabled (checked in `getSwitchOutCondition()`) or if it is a wave 10x wild boss + */ } else { const allyPokemon = switchOutTarget.getAlly(); @@ -5576,7 +7279,12 @@ class ForceSwitchOutHelper { if (switchOutTarget.hp > 0) { switchOutTarget.leaveField(false); - globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:fled", { pokemonName: getPokemonNameWithAffix(switchOutTarget) }), null, true, 500); + globalScene.phaseManager.queueMessage( + i18next.t("moveTriggers:fled", { pokemonName: getPokemonNameWithAffix(switchOutTarget) }), + null, + true, + 500, + ); if (globalScene.currentBattle.double && !isNullOrUndefined(allyPokemon)) { globalScene.redirectPokemonMoves(switchOutTarget, allyPokemon); } @@ -5622,14 +7330,24 @@ class ForceSwitchOutHelper { } } - if (!player && globalScene.currentBattle.isBattleMysteryEncounter() && !globalScene.currentBattle.mysteryEncounter?.fleeAllowed) { + if ( + !player && + globalScene.currentBattle.isBattleMysteryEncounter() && + !globalScene.currentBattle.mysteryEncounter?.fleeAllowed + ) { return false; } const party = player ? globalScene.getPlayerParty() : globalScene.getEnemyParty(); - return (!player && globalScene.currentBattle.battleType === BattleType.WILD) - || party.filter(p => p.isAllowedInBattle() && !p.isOnField() - && (player || (p as EnemyPokemon).trainerSlot === (switchOutTarget as EnemyPokemon).trainerSlot)).length > 0; + return ( + (!player && globalScene.currentBattle.battleType === BattleType.WILD) || + party.filter( + p => + p.isAllowedInBattle() && + !p.isOnField() && + (player || (p as EnemyPokemon).trainerSlot === (switchOutTarget as EnemyPokemon).trainerSlot), + ).length > 0 + ); } /** @@ -5641,7 +7359,9 @@ class ForceSwitchOutHelper { public getFailedText(target: Pokemon): string | null { const blockedByAbility = new BooleanHolder(false); applyAbAttrs(ForceSwitchOutImmunityAbAttr, target, blockedByAbility); - return blockedByAbility.value ? i18next.t("moveTriggers:cannotBeSwitchedOut", { pokemonName: getPokemonNameWithAffix(target) }) : null; + return blockedByAbility.value + ? i18next.t("moveTriggers:cannotBeSwitchedOut", { pokemonName: getPokemonNameWithAffix(target) }) + : null; } } @@ -5669,22 +7389,23 @@ function calculateShellBellRecovery(pokemon: Pokemon): number { */ export class PostDamageAbAttr extends AbAttr { public canApplyPostDamage( - pokemon: Pokemon, - damage: number, - passive: boolean, - simulated: boolean, - args: any[], - source?: Pokemon): boolean { + _pokemon: Pokemon, + _damage: number, + _passive: boolean, + _simulated: boolean, + _args: any[], + _source?: Pokemon, + ): boolean { return true; } public applyPostDamage( - pokemon: Pokemon, - damage: number, - passive: boolean, - simulated: boolean, - args: any[], - source?: Pokemon, + _pokemon: Pokemon, + _damage: number, + _passive: boolean, + _simulated: boolean, + _args: any[], + _source?: Pokemon, ): void {} } @@ -5711,13 +7432,14 @@ export class PostDamageForceSwitchAbAttr extends PostDamageAbAttr { public override canApplyPostDamage( pokemon: Pokemon, damage: number, - passive: boolean, - simulated: boolean, - args: any[], - source?: Pokemon): boolean { + _passive: boolean, + _simulated: boolean, + _args: any[], + source?: Pokemon, + ): boolean { const moveHistory = pokemon.getMoveHistory(); // Will not activate when the Pokémon's HP is lowered by cutting its own HP - const fordbiddenAttackingMoves = [ MoveId.BELLY_DRUM, MoveId.SUBSTITUTE, MoveId.CURSE, MoveId.PAIN_SPLIT ]; + const fordbiddenAttackingMoves = [MoveId.BELLY_DRUM, MoveId.SUBSTITUTE, MoveId.CURSE, MoveId.PAIN_SPLIT]; if (moveHistory.length > 0) { const lastMoveUsed = moveHistory[moveHistory.length - 1]; if (fordbiddenAttackingMoves.includes(lastMoveUsed.move)) { @@ -5726,20 +7448,25 @@ export class PostDamageForceSwitchAbAttr extends PostDamageAbAttr { } // Dragon Tail and Circle Throw switch out Pokémon before the Ability activates. - const fordbiddenDefendingMoves = [ MoveId.DRAGON_TAIL, MoveId.CIRCLE_THROW ]; + const fordbiddenDefendingMoves = [MoveId.DRAGON_TAIL, MoveId.CIRCLE_THROW]; if (source) { const enemyMoveHistory = source.getMoveHistory(); if (enemyMoveHistory.length > 0) { const enemyLastMoveUsed = enemyMoveHistory[enemyMoveHistory.length - 1]; // Will not activate if the Pokémon's HP falls below half while it is in the air during Sky Drop. - if (fordbiddenDefendingMoves.includes(enemyLastMoveUsed.move) || enemyLastMoveUsed.move === MoveId.SKY_DROP && enemyLastMoveUsed.result === MoveResult.OTHER) { + if ( + fordbiddenDefendingMoves.includes(enemyLastMoveUsed.move) || + (enemyLastMoveUsed.move === MoveId.SKY_DROP && enemyLastMoveUsed.result === MoveResult.OTHER) + ) { return false; - // Will not activate if the Pokémon's HP falls below half by a move affected by Sheer Force. - // TODO: Make this use the sheer force disable condition - } else if (allMoves[enemyLastMoveUsed.move].chance >= 0 && source.hasAbility(AbilityId.SHEER_FORCE)) { + // Will not activate if the Pokémon's HP falls below half by a move affected by Sheer Force. + // TODO: Make this use the sheer force disable condition + } + if (allMoves[enemyLastMoveUsed.move].chance >= 0 && source.hasAbility(AbilityId.SHEER_FORCE)) { return false; + } // Activate only after the last hit of multistrike moves - } else if (source.turnData.hitsLeft > 1) { + if (source.turnData.hitsLeft > 1) { return false; } if (source.turnData.hitCount > 1) { @@ -5769,13 +7496,20 @@ export class PostDamageForceSwitchAbAttr extends PostDamageAbAttr { * the Pokémon's health after damage to determine whether the switch-out should occur. * * @param pokemon The Pokémon that took damage. - * @param damage N/A - * @param passive N/A - * @param simulated Whether the ability is being simulated. - * @param args N/A - * @param source N/A + * @param _damage N/A + * @param _passive N/A + * @param _simulated Whether the ability is being simulated. + * @param _args N/A + * @param _source N/A */ - public override applyPostDamage(pokemon: Pokemon, damage: number, passive: boolean, simulated: boolean, args: any[], source?: Pokemon): void { + public override applyPostDamage( + pokemon: Pokemon, + _damage: number, + _passive: boolean, + _simulated: boolean, + _args: any[], + _source?: Pokemon, + ): void { this.helper.switchOutLogic(pokemon); } } @@ -5785,11 +7519,11 @@ function applyAbAttrsInternal( applyFunc: AbAttrApplyFunc, successFunc: AbAttrSuccessFunc, args: any[], - simulated: boolean = false, + simulated = false, messages: string[] = [], - gainedMidTurn = false + gainedMidTurn = false, ) { - for (const passive of [ false, true ]) { + for (const passive of [false, true]) { if (pokemon) { applySingleAbAttrs(pokemon, passive, attrType, applyFunc, successFunc, args, gainedMidTurn, simulated, messages); globalScene.phaseManager.clearPhaseQueueSplice(); @@ -5862,7 +7596,8 @@ export function applyPostDefendAbAttrs( attrType, pokemon, (attr, passive) => attr.applyPostDefend(pokemon, passive, simulated, attacker, move, hitResult, args), - (attr, passive) => attr.canApplyPostDefend(pokemon, passive, simulated, attacker, move, hitResult, args), args, + (attr, passive) => attr.canApplyPostDefend(pokemon, passive, simulated, attacker, move, hitResult, args), + args, simulated, ); } @@ -5879,8 +7614,8 @@ export function applyPostMoveUsedAbAttrs( applyAbAttrsInternal( attrType, pokemon, - (attr, passive) => attr.applyPostMoveUsed(pokemon, move, source, targets, simulated, args), - (attr, passive) => attr.canApplyPostMoveUsed(pokemon, move, source, targets, simulated, args), + (attr, _passive) => attr.applyPostMoveUsed(pokemon, move, source, targets, simulated, args), + (attr, _passive) => attr.canApplyPostMoveUsed(pokemon, move, source, targets, simulated, args), args, simulated, ); @@ -5913,14 +7648,23 @@ export function applyStatMultiplierAbAttrs( * @param ignoreAbility - Whether or not the ability should be ignored by the pokemon or its move. * @param args - unused */ -export function applyAllyStatMultiplierAbAttrs(attrType: Constructor, - pokemon: Pokemon, stat: BattleStat, statValue: NumberHolder, simulated: boolean = false, checkedPokemon: Pokemon, ignoreAbility: boolean, ...args: any[] +export function applyAllyStatMultiplierAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + stat: BattleStat, + statValue: NumberHolder, + simulated = false, + checkedPokemon: Pokemon, + ignoreAbility: boolean, + ...args: any[] ): void { - return applyAbAttrsInternal( + applyAbAttrsInternal( attrType, pokemon, - (attr, passive) => attr.applyAllyStat(pokemon, passive, simulated, stat, statValue, checkedPokemon, ignoreAbility, args), - (attr, passive) => attr.canApplyAllyStat(pokemon, passive, simulated, stat, statValue, checkedPokemon, ignoreAbility, args), + (attr, passive) => + attr.applyAllyStat(pokemon, passive, simulated, stat, statValue, checkedPokemon, ignoreAbility, args), + (attr, passive) => + attr.canApplyAllyStat(pokemon, passive, simulated, stat, statValue, checkedPokemon, ignoreAbility, args), args, simulated, ); @@ -5948,7 +7692,7 @@ export function applyPostDamageAbAttrs( attrType: Constructor, pokemon: Pokemon, damage: number, - passive: boolean, + _passive: boolean, simulated = false, args: any[], source?: Pokemon, @@ -5985,8 +7729,11 @@ export function applyFieldStatMultiplierAbAttrs( applyAbAttrsInternal( attrType, pokemon, - (attr, passive) => attr.applyFieldStat(pokemon, passive, simulated, stat, statValue, checkedPokemon, hasApplied, args), - (attr, passive) => attr.canApplyFieldStat(pokemon, passive, simulated, stat, statValue, checkedPokemon, hasApplied, args), args, + (attr, passive) => + attr.applyFieldStat(pokemon, passive, simulated, stat, statValue, checkedPokemon, hasApplied, args), + (attr, passive) => + attr.canApplyFieldStat(pokemon, passive, simulated, stat, statValue, checkedPokemon, hasApplied, args), + args, ); } @@ -6021,7 +7768,8 @@ export function applyPostAttackAbAttrs( attrType, pokemon, (attr, passive) => attr.applyPostAttack(pokemon, passive, simulated, defender, move, hitResult, args), - (attr, passive) => attr.canApplyPostAttack(pokemon, passive, simulated, defender, move, hitResult, args), args, + (attr, passive) => attr.canApplyPostAttack(pokemon, passive, simulated, defender, move, hitResult, args), + args, simulated, ); } @@ -6075,17 +7823,13 @@ export function applyPostSummonAbAttrs( ); } -export function applyPreSummonAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - ...args: any[] -): void { +export function applyPreSummonAbAttrs(attrType: Constructor, pokemon: Pokemon, ...args: any[]): void { applyAbAttrsInternal( attrType, pokemon, (attr, passive) => attr.applyPreSummon(pokemon, passive, args), (attr, passive) => attr.canApplyPreSummon(pokemon, passive, args), - args + args, ); } @@ -6111,18 +7855,17 @@ export function applyPreLeaveFieldAbAttrs( simulated = false, ...args: any[] ): void { - return applyAbAttrsInternal( + applyAbAttrsInternal( attrType, pokemon, - (attr, passive) => - attr.applyPreLeaveField(pokemon, passive, simulated, args), + (attr, passive) => attr.applyPreLeaveField(pokemon, passive, simulated, args), (attr, passive) => attr.canApplyPreLeaveField(pokemon, passive, simulated, args), args, - simulated + simulated, ); } -export function applyPreStatStageChangeAbAttrs ( +export function applyPreStatStageChangeAbAttrs( attrType: Constructor, pokemon: Pokemon | null, stat: BattleStat, @@ -6144,7 +7887,7 @@ export function applyPostStatStageChangeAbAttrs( attrType: Constructor, pokemon: Pokemon, stats: BattleStat[], - stages: integer, + stages: number, selfTarget: boolean, simulated = false, ...args: any[] @@ -6153,7 +7896,8 @@ export function applyPostStatStageChangeAbAttrs( attrType, pokemon, (attr, _passive) => attr.applyPostStatStageChange(pokemon, simulated, stats, stages, selfTarget, args), - (attr, _passive) => attr.canApplyPostStatStageChange(pokemon, simulated, stats, stages, selfTarget, args), args, + (attr, _passive) => attr.canApplyPostStatStageChange(pokemon, simulated, stats, stages, selfTarget, args), + args, simulated, ); } @@ -6292,7 +8036,8 @@ export function applyCheckTrappedAbAttrs( attrType, pokemon, (attr, passive) => attr.applyCheckTrapped(pokemon, passive, simulated, trapped, otherPokemon, args), - (attr, passive) => attr.canApplyCheckTrapped(pokemon, passive, simulated, trapped, otherPokemon, args), args, + (attr, passive) => attr.canApplyCheckTrapped(pokemon, passive, simulated, trapped, otherPokemon, args), + args, simulated, messages, ); @@ -6342,8 +8087,8 @@ export function applyPostItemLostAbAttrs( applyAbAttrsInternal( attrType, pokemon, - (attr, passive) => attr.applyPostItemLost(pokemon, simulated, args), - (attr, passive) => attr.canApplyPostItemLost(pokemon, simulated, args), + (attr, _passive) => attr.applyPostItemLost(pokemon, simulated, args), + (attr, _passive) => attr.canApplyPostItemLost(pokemon, simulated, args), args, ); } @@ -6353,11 +8098,7 @@ export function applyPostItemLostAbAttrs( * * Ignores passives as they don't change and shouldn't be reapplied when main abilities change */ -export function applyOnGainAbAttrs( - pokemon: Pokemon, - passive: boolean = false, - simulated: boolean = false, - ...args: any[]): void { +export function applyOnGainAbAttrs(pokemon: Pokemon, passive = false, simulated = false, ...args: any[]): void { applySingleAbAttrs( pokemon, passive, @@ -6378,11 +8119,12 @@ export function applyOnLoseAbAttrs(pokemon: Pokemon, passive = false, simulated pokemon, passive, PreLeaveFieldAbAttr, - (attr, passive) => attr.applyPreLeaveField(pokemon, passive, simulated, [ ...args, true ]), - (attr, passive) => attr.canApplyPreLeaveField(pokemon, passive, simulated, [ ...args, true ]), + (attr, passive) => attr.applyPreLeaveField(pokemon, passive, simulated, [...args, true]), + (attr, passive) => attr.canApplyPreLeaveField(pokemon, passive, simulated, [...args, true]), args, true, - simulated); + simulated, + ); applySingleAbAttrs( pokemon, @@ -6392,8 +8134,8 @@ export function applyOnLoseAbAttrs(pokemon: Pokemon, passive = false, simulated (attr, passive) => attr.canApply(pokemon, passive, simulated, args), args, true, - simulated - ) + simulated, + ); } /** @@ -6408,12 +8150,16 @@ function setAbilityRevealed(pokemon: Pokemon): void { * Returns all Pokemon on field with weather-based forms */ function getPokemonWithWeatherBasedForms() { - return globalScene.getField(true).filter(p => - (p.hasAbility(AbilityId.FORECAST) && p.species.speciesId === SpeciesId.CASTFORM) - || (p.hasAbility(AbilityId.FLOWER_GIFT) && p.species.speciesId === SpeciesId.CHERRIM) - ); + return globalScene + .getField(true) + .filter( + p => + (p.hasAbility(AbilityId.FORECAST) && p.species.speciesId === SpeciesId.CASTFORM) || + (p.hasAbility(AbilityId.FLOWER_GIFT) && p.species.speciesId === SpeciesId.CHERRIM), + ); } +// biome-ignore format: prevent biome from removing the newlines (e.g. prevent `new Ability(...).attr(...)`) export function initAbilities() { allAbilities.push( new Ability(AbilityId.NONE, 3), @@ -6553,7 +8299,7 @@ export function initAbilities() { .attr(PostSummonHealStatusAbAttr, StatusEffect.BURN) .ignorable(), new Ability(AbilityId.MAGNET_PULL, 3) - .attr(ArenaTrapAbAttr, (user, target) => { + .attr(ArenaTrapAbAttr, (_user, target) => { return target.getTypes(true).includes(PokemonType.STEEL) || (target.getTypes(true).includes(PokemonType.STELLAR) && target.getTypes().includes(PokemonType.STEEL)); }), new Ability(AbilityId.SOUNDPROOF, 3) @@ -6609,7 +8355,7 @@ export function initAbilities() { .bypassFaint() .ignorable(), new Ability(AbilityId.SHED_SKIN, 3) - .conditionalAttr(pokemon => !randSeedInt(3), PostTurnResetStatusAbAttr), + .conditionalAttr(_pokemon => !randSeedInt(3), PostTurnResetStatusAbAttr), new Ability(AbilityId.GUTS, 3) .attr(BypassBurnDamageReductionAbAttr) .conditionalAttr(pokemon => !!pokemon.status || pokemon.hasAbility(AbilityId.COMATOSE), StatMultiplierAbAttr, Stat.ATK, 1.5), @@ -6632,7 +8378,7 @@ export function initAbilities() { .attr(PostSummonWeatherChangeAbAttr, WeatherType.SUNNY) .attr(PostBiomeChangeWeatherChangeAbAttr, WeatherType.SUNNY), new Ability(AbilityId.ARENA_TRAP, 3) - .attr(ArenaTrapAbAttr, (user, target) => target.isGrounded()) + .attr(ArenaTrapAbAttr, (_user, target) => target.isGrounded()) .attr(DoubleBattleChanceAbAttr), new Ability(AbilityId.VITAL_SPIRIT, 3) .attr(StatusEffectImmunityAbAttr, StatusEffect.SLEEP) @@ -6660,8 +8406,8 @@ export function initAbilities() { .attr(TypeImmunityStatStageChangeAbAttr, PokemonType.ELECTRIC, Stat.SPD, 1) .ignorable(), new Ability(AbilityId.RIVALRY, 4) - .attr(MovePowerBoostAbAttr, (user, target, move) => user?.gender !== Gender.GENDERLESS && target?.gender !== Gender.GENDERLESS && user?.gender === target?.gender, 1.25, true) - .attr(MovePowerBoostAbAttr, (user, target, move) => user?.gender !== Gender.GENDERLESS && target?.gender !== Gender.GENDERLESS && user?.gender !== target?.gender, 0.75), + .attr(MovePowerBoostAbAttr, (user, target, _move) => user?.gender !== Gender.GENDERLESS && target?.gender !== Gender.GENDERLESS && user?.gender === target?.gender, 1.25, true) + .attr(MovePowerBoostAbAttr, (user, target, _move) => user?.gender !== Gender.GENDERLESS && target?.gender !== Gender.GENDERLESS && user?.gender !== target?.gender, 0.75), new Ability(AbilityId.STEADFAST, 4) .attr(FlinchStatStageChangeAbAttr, [ Stat.SPD ], 1), new Ability(AbilityId.SNOW_CLOAK, 4) @@ -6693,7 +8439,7 @@ export function initAbilities() { new Ability(AbilityId.DOWNLOAD, 4) .attr(DownloadAbAttr), new Ability(AbilityId.IRON_FIST, 4) - .attr(MovePowerBoostAbAttr, (user, target, move) => move.hasFlag(MoveFlags.PUNCHING_MOVE), 1.2), + .attr(MovePowerBoostAbAttr, (_user, _target, move) => move.hasFlag(MoveFlags.PUNCHING_MOVE), 1.2), new Ability(AbilityId.POISON_HEAL, 4) .attr(PostTurnStatusHealAbAttr, StatusEffect.TOXIC, StatusEffect.POISON) .attr(BlockStatusDamageAbAttr, StatusEffect.TOXIC, StatusEffect.POISON), @@ -6721,7 +8467,7 @@ export function initAbilities() { .attr(AlwaysHitAbAttr) .attr(DoubleBattleChanceAbAttr), new Ability(AbilityId.STALL, 4) - .attr(ChangeMovePriorityAbAttr, (pokemon, move: Move) => true, -0.2), + .attr(ChangeMovePriorityAbAttr, (_pokemon, _move: Move) => true, -0.2), new Ability(AbilityId.TECHNICIAN, 4) .attr(MovePowerBoostAbAttr, (user, target, move) => { const power = new NumberHolder(move.power); @@ -6778,7 +8524,7 @@ export function initAbilities() { new Ability(AbilityId.FRISK, 4) .attr(FriskAbAttr), new Ability(AbilityId.RECKLESS, 4) - .attr(MovePowerBoostAbAttr, (user, target, move) => move.hasFlag(MoveFlags.RECKLESS_MOVE), 1.2), + .attr(MovePowerBoostAbAttr, (_user, _target, move) => move.hasFlag(MoveFlags.RECKLESS_MOVE), 1.2), new Ability(AbilityId.MULTITYPE, 4) .attr(NoFusionAbilityAbAttr) .uncopiable() @@ -6801,7 +8547,7 @@ export function initAbilities() { .attr(PostDefendStealHeldItemAbAttr, (target, user, move) => move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user, target})) .condition(getSheerForceHitDisableAbCondition()), new Ability(AbilityId.SHEER_FORCE, 5) - .attr(MovePowerBoostAbAttr, (user, target, move) => move.chance >= 1, 1.3) + .attr(MovePowerBoostAbAttr, (_user, _target, move) => move.chance >= 1, 1.3) .attr(MoveEffectChanceMultiplierAbAttr, 0), // This attribute does not seem to function - Should disable life orb, eject button, red card, kee/maranga berry if they get implemented new Ability(AbilityId.CONTRARY, 5) .attr(StatStageChangeMultiplierAbAttr, -1) @@ -6809,7 +8555,7 @@ export function initAbilities() { new Ability(AbilityId.UNNERVE, 5) .attr(PreventBerryUseAbAttr), new Ability(AbilityId.DEFIANT, 5) - .attr(PostStatStageChangeStatStageChangeAbAttr, (target, statsChanged, stages) => stages < 0, [ Stat.ATK ], 2), + .attr(PostStatStageChangeStatStageChangeAbAttr, (_target, _statsChanged, stages) => stages < 0, [ Stat.ATK ], 2), new Ability(AbilityId.DEFEATIST, 5) .attr(StatMultiplierAbAttr, Stat.ATK, 0.5) .attr(StatMultiplierAbAttr, Stat.SPATK, 0.5) @@ -6823,8 +8569,8 @@ export function initAbilities() { .attr(AlliedFieldDamageReductionAbAttr, 0.75) .ignorable(), new Ability(AbilityId.WEAK_ARMOR, 5) - .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => move.category === MoveCategory.PHYSICAL, Stat.DEF, -1) - .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => move.category === MoveCategory.PHYSICAL, Stat.SPD, 2), + .attr(PostDefendStatStageChangeAbAttr, (_target, _user, move) => move.category === MoveCategory.PHYSICAL, Stat.DEF, -1) + .attr(PostDefendStatStageChangeAbAttr, (_target, _user, move) => move.category === MoveCategory.PHYSICAL, Stat.SPD, 2), new Ability(AbilityId.HEAVY_METAL, 5) .attr(WeightMultiplierAbAttr, 2) .ignorable(), @@ -6832,12 +8578,12 @@ export function initAbilities() { .attr(WeightMultiplierAbAttr, 0.5) .ignorable(), new Ability(AbilityId.MULTISCALE, 5) - .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => target.isFullHp(), 0.5) + .attr(ReceivedMoveDamageMultiplierAbAttr, (target, _user, _move) => target.isFullHp(), 0.5) .ignorable(), new Ability(AbilityId.TOXIC_BOOST, 5) - .attr(MovePowerBoostAbAttr, (user, target, move) => move.category === MoveCategory.PHYSICAL && (user?.status?.effect === StatusEffect.POISON || user?.status?.effect === StatusEffect.TOXIC), 1.5), + .attr(MovePowerBoostAbAttr, (user, _target, move) => move.category === MoveCategory.PHYSICAL && (user?.status?.effect === StatusEffect.POISON || user?.status?.effect === StatusEffect.TOXIC), 1.5), new Ability(AbilityId.FLARE_BOOST, 5) - .attr(MovePowerBoostAbAttr, (user, target, move) => move.category === MoveCategory.SPECIAL && user?.status?.effect === StatusEffect.BURN, 1.5), + .attr(MovePowerBoostAbAttr, (user, _target, move) => move.category === MoveCategory.SPECIAL && user?.status?.effect === StatusEffect.BURN, 1.5), new Ability(AbilityId.HARVEST, 5) .attr( PostTurnRestoreBerryAbAttr, @@ -6869,7 +8615,7 @@ export function initAbilities() { .attr(WonderSkinAbAttr) .ignorable(), new Ability(AbilityId.ANALYTIC, 5) - .attr(MovePowerBoostAbAttr, (user, target, move) => { + .attr(MovePowerBoostAbAttr, (user, _target, _move) => { const movePhase = globalScene.phaseManager.findPhase((phase) => phase.is("MovePhase") && phase.pokemon.id !== user?.id); return isNullOrUndefined(movePhase); }, 1.3), @@ -6897,9 +8643,9 @@ export function initAbilities() { new Ability(AbilityId.MOXIE, 5) .attr(PostVictoryStatStageChangeAbAttr, Stat.ATK, 1), new Ability(AbilityId.JUSTIFIED, 5) - .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => user.getMoveType(move) === PokemonType.DARK && move.category !== MoveCategory.STATUS, Stat.ATK, 1), + .attr(PostDefendStatStageChangeAbAttr, (_target, user, move) => user.getMoveType(move) === PokemonType.DARK && move.category !== MoveCategory.STATUS, Stat.ATK, 1), new Ability(AbilityId.RATTLED, 5) - .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => { + .attr(PostDefendStatStageChangeAbAttr, (_target, user, move) => { const moveType = user.getMoveType(move); return move.category !== MoveCategory.STATUS && (moveType === PokemonType.DARK || moveType === PokemonType.BUG || moveType === PokemonType.GHOST); @@ -6915,7 +8661,7 @@ export function initAbilities() { .attr(TypeImmunityStatStageChangeAbAttr, PokemonType.GRASS, Stat.ATK, 1) .ignorable(), new Ability(AbilityId.PRANKSTER, 5) - .attr(ChangeMovePriorityAbAttr, (pokemon, move: Move) => move.category === MoveCategory.STATUS, 1), + .attr(ChangeMovePriorityAbAttr, (_pokemon, move: Move) => move.category === MoveCategory.STATUS, 1), new Ability(AbilityId.SAND_FORCE, 5) .attr(MoveTypePowerBoostAbAttr, PokemonType.ROCK, 1.3) .attr(MoveTypePowerBoostAbAttr, PokemonType.GROUND, 1.3) @@ -6966,7 +8712,7 @@ export function initAbilities() { .attr(PokemonTypeChangeAbAttr), //.condition((p) => !p.summonData.abilitiesApplied.includes(AbilityId.PROTEAN)), //Gen 9 Implementation new Ability(AbilityId.FUR_COAT, 6) - .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => move.category === MoveCategory.PHYSICAL, 0.5) + .attr(ReceivedMoveDamageMultiplierAbAttr, (_target, _user, move) => move.category === MoveCategory.PHYSICAL, 0.5) .ignorable(), new Ability(AbilityId.MAGICIAN, 6) .attr(PostAttackStealHeldItemAbAttr), @@ -6974,11 +8720,11 @@ export function initAbilities() { .attr(MoveImmunityAbAttr, (pokemon, attacker, move) => pokemon !== attacker && move.hasFlag(MoveFlags.BALLBOMB_MOVE)) .ignorable(), new Ability(AbilityId.COMPETITIVE, 6) - .attr(PostStatStageChangeStatStageChangeAbAttr, (target, statsChanged, stages) => stages < 0, [ Stat.SPATK ], 2), + .attr(PostStatStageChangeStatStageChangeAbAttr, (_target, _statsChanged, stages) => stages < 0, [ Stat.SPATK ], 2), new Ability(AbilityId.STRONG_JAW, 6) - .attr(MovePowerBoostAbAttr, (user, target, move) => move.hasFlag(MoveFlags.BITING_MOVE), 1.5), + .attr(MovePowerBoostAbAttr, (_user, _target, move) => move.hasFlag(MoveFlags.BITING_MOVE), 1.5), new Ability(AbilityId.REFRIGERATE, 6) - .attr(MoveTypeChangeAbAttr, PokemonType.ICE, 1.2, (user, target, move) => move.type === PokemonType.NORMAL), + .attr(MoveTypeChangeAbAttr, PokemonType.ICE, 1.2, (_user, _target, move) => move.type === PokemonType.NORMAL), new Ability(AbilityId.SWEET_VEIL, 6) .attr(UserFieldStatusEffectImmunityAbAttr, StatusEffect.SLEEP) .attr(PostSummonUserFieldRemoveStatusEffectAbAttr, StatusEffect.SLEEP) @@ -6993,20 +8739,20 @@ export function initAbilities() { new Ability(AbilityId.GALE_WINGS, 6) .attr(ChangeMovePriorityAbAttr, (pokemon, move) => pokemon.isFullHp() && pokemon.getMoveType(move) === PokemonType.FLYING, 1), new Ability(AbilityId.MEGA_LAUNCHER, 6) - .attr(MovePowerBoostAbAttr, (user, target, move) => move.hasFlag(MoveFlags.PULSE_MOVE), 1.5), + .attr(MovePowerBoostAbAttr, (_user, _target, move) => move.hasFlag(MoveFlags.PULSE_MOVE), 1.5), new Ability(AbilityId.GRASS_PELT, 6) .conditionalAttr(getTerrainCondition(TerrainType.GRASSY), StatMultiplierAbAttr, Stat.DEF, 1.5) .ignorable(), new Ability(AbilityId.SYMBIOSIS, 6) .unimplemented(), new Ability(AbilityId.TOUGH_CLAWS, 6) - .attr(MovePowerBoostAbAttr, (user, target, move) => move.hasFlag(MoveFlags.MAKES_CONTACT), 1.3), + .attr(MovePowerBoostAbAttr, (_user, _target, move) => move.hasFlag(MoveFlags.MAKES_CONTACT), 1.3), new Ability(AbilityId.PIXILATE, 6) - .attr(MoveTypeChangeAbAttr, PokemonType.FAIRY, 1.2, (user, target, move) => move.type === PokemonType.NORMAL), + .attr(MoveTypeChangeAbAttr, PokemonType.FAIRY, 1.2, (_user, _target, move) => move.type === PokemonType.NORMAL), new Ability(AbilityId.GOOEY, 6) - .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => move.hasFlag(MoveFlags.MAKES_CONTACT), Stat.SPD, -1, false), + .attr(PostDefendStatStageChangeAbAttr, (_target, _user, move) => move.hasFlag(MoveFlags.MAKES_CONTACT), Stat.SPD, -1, false), new Ability(AbilityId.AERILATE, 6) - .attr(MoveTypeChangeAbAttr, PokemonType.FLYING, 1.2, (user, target, move) => move.type === PokemonType.NORMAL), + .attr(MoveTypeChangeAbAttr, PokemonType.FLYING, 1.2, (_user, _target, move) => move.type === PokemonType.NORMAL), new Ability(AbilityId.PARENTAL_BOND, 6) .attr(AddSecondStrikeAbAttr, 0.25), new Ability(AbilityId.DARK_AURA, 6) @@ -7017,9 +8763,9 @@ export function initAbilities() { .attr(FieldMoveTypePowerBoostAbAttr, PokemonType.FAIRY, 4 / 3), new Ability(AbilityId.AURA_BREAK, 6) .ignorable() - .conditionalAttr(pokemon => globalScene.getField(true).some(p => p.hasAbility(AbilityId.DARK_AURA)), FieldMoveTypePowerBoostAbAttr, PokemonType.DARK, 9 / 16) - .conditionalAttr(pokemon => globalScene.getField(true).some(p => p.hasAbility(AbilityId.FAIRY_AURA)), FieldMoveTypePowerBoostAbAttr, PokemonType.FAIRY, 9 / 16) - .conditionalAttr(pokemon => globalScene.getField(true).some(p => p.hasAbility(AbilityId.DARK_AURA) || p.hasAbility(AbilityId.FAIRY_AURA)), + .conditionalAttr(_pokemon => globalScene.getField(true).some(p => p.hasAbility(AbilityId.DARK_AURA)), FieldMoveTypePowerBoostAbAttr, PokemonType.DARK, 9 / 16) + .conditionalAttr(_pokemon => globalScene.getField(true).some(p => p.hasAbility(AbilityId.FAIRY_AURA)), FieldMoveTypePowerBoostAbAttr, PokemonType.FAIRY, 9 / 16) + .conditionalAttr(_pokemon => globalScene.getField(true).some(p => p.hasAbility(AbilityId.DARK_AURA) || p.hasAbility(AbilityId.FAIRY_AURA)), PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonAuraBreak", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })), new Ability(AbilityId.PRIMORDIAL_SEA, 6) .attr(PostSummonWeatherChangeAbAttr, WeatherType.HEAVY_RAIN) @@ -7037,7 +8783,7 @@ export function initAbilities() { .attr(PreLeaveFieldClearWeatherAbAttr) .bypassFaint(), new Ability(AbilityId.STAMINA, 7) - .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, Stat.DEF, 1), + .attr(PostDefendStatStageChangeAbAttr, (_target, _user, move) => move.category !== MoveCategory.STATUS, Stat.DEF, 1), new Ability(AbilityId.WIMP_OUT, 7) .attr(PostDamageForceSwitchAbAttr) .edgeCase(), // Should not trigger when hurting itself in confusion, causes Fake Out to fail turn 1 and succeed turn 2 if pokemon is switched out before battle start via playing in Switch Mode @@ -7045,9 +8791,9 @@ export function initAbilities() { .attr(PostDamageForceSwitchAbAttr) .edgeCase(), // Should not trigger when hurting itself in confusion, causes Fake Out to fail turn 1 and succeed turn 2 if pokemon is switched out before battle start via playing in Switch Mode new Ability(AbilityId.WATER_COMPACTION, 7) - .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => user.getMoveType(move) === PokemonType.WATER && move.category !== MoveCategory.STATUS, Stat.DEF, 2), + .attr(PostDefendStatStageChangeAbAttr, (_target, user, move) => user.getMoveType(move) === PokemonType.WATER && move.category !== MoveCategory.STATUS, Stat.DEF, 2), new Ability(AbilityId.MERCILESS, 7) - .attr(ConditionalCritAbAttr, (user, target, move) => target?.status?.effect === StatusEffect.TOXIC || target?.status?.effect === StatusEffect.POISON), + .attr(ConditionalCritAbAttr, (_user, target, _move) => target?.status?.effect === StatusEffect.TOXIC || target?.status?.effect === StatusEffect.POISON), new Ability(AbilityId.SHIELDS_DOWN, 7) .attr(PostBattleInitFormChangeAbAttr, () => 0) .attr(PostSummonFormChangeAbAttr, p => p.formIndex % 7 + (p.getHpRatio() <= 0.5 ? 7 : 0)) @@ -7061,7 +8807,7 @@ export function initAbilities() { .unsuppressable() .bypassFaint(), new Ability(AbilityId.STAKEOUT, 7) - .attr(MovePowerBoostAbAttr, (user, target, move) => !!target?.turnData.switchedInThisTurn, 2), + .attr(MovePowerBoostAbAttr, (_user, target, _move) => !!target?.turnData.switchedInThisTurn, 2), new Ability(AbilityId.WATER_BUBBLE, 7) .attr(ReceivedTypeDamageMultiplierAbAttr, PokemonType.FIRE, 0.5) .attr(MoveTypePowerBoostAbAttr, PokemonType.WATER, 2) @@ -7071,7 +8817,7 @@ export function initAbilities() { new Ability(AbilityId.STEELWORKER, 7) .attr(MoveTypePowerBoostAbAttr, PokemonType.STEEL), new Ability(AbilityId.BERSERK, 7) - .attr(PostDefendHpGatedStatStageChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, 0.5, [ Stat.SPATK ], 1) + .attr(PostDefendHpGatedStatStageChangeAbAttr, (_target, _user, move) => move.category !== MoveCategory.STATUS, 0.5, [ Stat.SPATK ], 1) .condition(getSheerForceHitDisableAbCondition()), new Ability(AbilityId.SLUSH_RUSH, 7) .attr(StatMultiplierAbAttr, Stat.SPD, 2) @@ -7079,9 +8825,9 @@ export function initAbilities() { new Ability(AbilityId.LONG_REACH, 7) .attr(IgnoreContactAbAttr), new Ability(AbilityId.LIQUID_VOICE, 7) - .attr(MoveTypeChangeAbAttr, PokemonType.WATER, 1, (user, target, move) => move.hasFlag(MoveFlags.SOUND_BASED)), + .attr(MoveTypeChangeAbAttr, PokemonType.WATER, 1, (_user, _target, move) => move.hasFlag(MoveFlags.SOUND_BASED)), new Ability(AbilityId.TRIAGE, 7) - .attr(ChangeMovePriorityAbAttr, (pokemon, move) => move.hasFlag(MoveFlags.TRIAGE_MOVE), 3), + .attr(ChangeMovePriorityAbAttr, (_pokemon, move) => move.hasFlag(MoveFlags.TRIAGE_MOVE), 3), new Ability(AbilityId.GALVANIZE, 7) .attr(MoveTypeChangeAbAttr, PokemonType.ELECTRIC, 1.2, (_user, _target, move) => move.type === PokemonType.NORMAL), new Ability(AbilityId.SURGE_SURFER, 7) @@ -7151,7 +8897,7 @@ export function initAbilities() { .attr(AllyMoveCategoryPowerBoostAbAttr, [ MoveCategory.SPECIAL ], 1.3), new Ability(AbilityId.FLUFFY, 7) .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user, target}), 0.5) - .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => user.getMoveType(move) === PokemonType.FIRE, 2) + .attr(ReceivedMoveDamageMultiplierAbAttr, (_target, user, move) => user.getMoveType(move) === PokemonType.FIRE, 2) .ignorable(), new Ability(AbilityId.DAZZLING, 7) .attr(FieldPriorityMoveImmunityAbAttr) @@ -7199,7 +8945,7 @@ export function initAbilities() { new Ability(AbilityId.FULL_METAL_BODY, 7) .attr(ProtectStatAbAttr), new Ability(AbilityId.SHADOW_SHIELD, 7) - .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => target.isFullHp(), 0.5), + .attr(ReceivedMoveDamageMultiplierAbAttr, (target, _user, _move) => target.isFullHp(), 0.5), new Ability(AbilityId.PRISM_ARMOR, 7) .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => target.getMoveEffectiveness(user, move) >= 2, 0.75), new Ability(AbilityId.NEUROFORCE, 7) @@ -7215,7 +8961,7 @@ export function initAbilities() { .attr(FetchBallAbAttr) .condition(getOncePerBattleCondition(AbilityId.BALL_FETCH)), new Ability(AbilityId.COTTON_DOWN, 8) - .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, Stat.SPD, -1, false, true) + .attr(PostDefendStatStageChangeAbAttr, (_target, _user, move) => move.category !== MoveCategory.STATUS, Stat.SPD, -1, false, true) .bypassFaint(), new Ability(AbilityId.PROPELLER_TAIL, 8) .attr(BlockRedirectAbAttr), @@ -7238,20 +8984,20 @@ export function initAbilities() { new Ability(AbilityId.STALWART, 8) .attr(BlockRedirectAbAttr), new Ability(AbilityId.STEAM_ENGINE, 8) - .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => { + .attr(PostDefendStatStageChangeAbAttr, (_target, user, move) => { const moveType = user.getMoveType(move); return move.category !== MoveCategory.STATUS && (moveType === PokemonType.FIRE || moveType === PokemonType.WATER); }, Stat.SPD, 6), new Ability(AbilityId.PUNK_ROCK, 8) - .attr(MovePowerBoostAbAttr, (user, target, move) => move.hasFlag(MoveFlags.SOUND_BASED), 1.3) - .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => move.hasFlag(MoveFlags.SOUND_BASED), 0.5) + .attr(MovePowerBoostAbAttr, (_user, _target, move) => move.hasFlag(MoveFlags.SOUND_BASED), 1.3) + .attr(ReceivedMoveDamageMultiplierAbAttr, (_target, _user, move) => move.hasFlag(MoveFlags.SOUND_BASED), 0.5) .ignorable(), new Ability(AbilityId.SAND_SPIT, 8) - .attr(PostDefendWeatherChangeAbAttr, WeatherType.SANDSTORM, (target, user, move) => move.category !== MoveCategory.STATUS) + .attr(PostDefendWeatherChangeAbAttr, WeatherType.SANDSTORM, (_target, _user, move) => move.category !== MoveCategory.STATUS) .bypassFaint(), new Ability(AbilityId.ICE_SCALES, 8) - .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => move.category === MoveCategory.SPECIAL, 0.5) + .attr(ReceivedMoveDamageMultiplierAbAttr, (_target, _user, move) => move.category === MoveCategory.SPECIAL, 0.5) .ignorable(), new Ability(AbilityId.RIPEN, 8) .attr(DoubleBerryEffectAbAttr), @@ -7265,7 +9011,7 @@ export function initAbilities() { // When weather changes to HAIL or SNOW while pokemon is fielded, add BattlerTagType.ICE_FACE .attr(PostWeatherChangeAddBattlerTagAttr, BattlerTagType.ICE_FACE, 0, WeatherType.HAIL, WeatherType.SNOW) .attr(FormBlockDamageAbAttr, - (target, user, move) => move.category === MoveCategory.PHYSICAL && !!target.getTag(BattlerTagType.ICE_FACE), 0, BattlerTagType.ICE_FACE, + (target, _user, move) => move.category === MoveCategory.PHYSICAL && !!target.getTag(BattlerTagType.ICE_FACE), 0, BattlerTagType.ICE_FACE, (pokemon, abilityName) => i18next.t("abilityTriggers:iceFaceAvoidedDamage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName: abilityName })) .attr(PostBattleInitFormChangeAbAttr, () => 0) .uncopiable() @@ -7343,13 +9089,13 @@ export function initAbilities() { .attr(PostDefendTerrainChangeAbAttr, TerrainType.GRASSY) .bypassFaint(), new Ability(AbilityId.THERMAL_EXCHANGE, 9) - .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => user.getMoveType(move) === PokemonType.FIRE && move.category !== MoveCategory.STATUS, Stat.ATK, 1) + .attr(PostDefendStatStageChangeAbAttr, (_target, user, move) => user.getMoveType(move) === PokemonType.FIRE && move.category !== MoveCategory.STATUS, Stat.ATK, 1) .attr(StatusEffectImmunityAbAttr, StatusEffect.BURN) .attr(PostSummonHealStatusAbAttr, StatusEffect.BURN) .ignorable(), new Ability(AbilityId.ANGER_SHELL, 9) - .attr(PostDefendHpGatedStatStageChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, 0.5, [ Stat.ATK, Stat.SPATK, Stat.SPD ], 1) - .attr(PostDefendHpGatedStatStageChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, 0.5, [ Stat.DEF, Stat.SPDEF ], -1) + .attr(PostDefendHpGatedStatStageChangeAbAttr, (_target, _user, move) => move.category !== MoveCategory.STATUS, 0.5, [ Stat.ATK, Stat.SPATK, Stat.SPD ], 1) + .attr(PostDefendHpGatedStatStageChangeAbAttr, (_target, _user, move) => move.category !== MoveCategory.STATUS, 0.5, [ Stat.DEF, Stat.SPDEF ], -1) .condition(getSheerForceHitDisableAbCondition()), new Ability(AbilityId.PURIFYING_SALT, 9) .attr(StatusEffectImmunityAbAttr) @@ -7369,7 +9115,7 @@ export function initAbilities() { new Ability(AbilityId.ROCKY_PAYLOAD, 9) .attr(MoveTypePowerBoostAbAttr, PokemonType.ROCK), new Ability(AbilityId.WIND_POWER, 9) - .attr(PostDefendApplyBattlerTagAbAttr, (target, user, move) => move.hasFlag(MoveFlags.WIND_MOVE), BattlerTagType.CHARGED), + .attr(PostDefendApplyBattlerTagAbAttr, (_target, _user, move) => move.hasFlag(MoveFlags.WIND_MOVE), BattlerTagType.CHARGED), new Ability(AbilityId.ZERO_TO_HERO, 9) .uncopiable() .unreplaceable() @@ -7386,7 +9132,7 @@ export function initAbilities() { .unreplaceable() .edgeCase(), // Encore, Frenzy, and other non-`TURN_END` tags don't lapse correctly on the commanding Pokemon. new Ability(AbilityId.ELECTROMORPHOSIS, 9) - .attr(PostDefendApplyBattlerTagAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, BattlerTagType.CHARGED), + .attr(PostDefendApplyBattlerTagAbAttr, (_target, _user, move) => move.category !== MoveCategory.STATUS, BattlerTagType.CHARGED), new Ability(AbilityId.PROTOSYNTHESIS, 9) .conditionalAttr(getWeatherCondition(WeatherType.SUNNY, WeatherType.HARSH_SUN), PostSummonAddBattlerTagAbAttr, BattlerTagType.PROTOSYNTHESIS, 0, true) .attr(PostWeatherChangeAddBattlerTagAttr, BattlerTagType.PROTOSYNTHESIS, 0, WeatherType.SUNNY, WeatherType.HARSH_SUN) @@ -7432,14 +9178,14 @@ export function initAbilities() { new Ability(AbilityId.CUD_CHEW, 9) .attr(RepeatBerryNextTurnAbAttr), new Ability(AbilityId.SHARPNESS, 9) - .attr(MovePowerBoostAbAttr, (user, target, move) => move.hasFlag(MoveFlags.SLICING_MOVE), 1.5), + .attr(MovePowerBoostAbAttr, (_user, _target, move) => move.hasFlag(MoveFlags.SLICING_MOVE), 1.5), new Ability(AbilityId.SUPREME_OVERLORD, 9) - .attr(VariableMovePowerBoostAbAttr, (user, target, move) => 1 + 0.1 * Math.min(user.isPlayer() ? globalScene.arena.playerFaints : globalScene.currentBattle.enemyFaints, 5)) + .attr(VariableMovePowerBoostAbAttr, (user, _target, _move) => 1 + 0.1 * Math.min(user.isPlayer() ? globalScene.arena.playerFaints : globalScene.currentBattle.enemyFaints, 5)) .partial(), // Should only boost once, on summon new Ability(AbilityId.COSTAR, 9) .attr(PostSummonCopyAllyStatsAbAttr), new Ability(AbilityId.TOXIC_DEBRIS, 9) - .attr(PostDefendApplyArenaTrapTagAbAttr, (target, user, move) => move.category === MoveCategory.PHYSICAL, ArenaTagType.TOXIC_SPIKES) + .attr(PostDefendApplyArenaTrapTagAbAttr, (_target, _user, move) => move.category === MoveCategory.PHYSICAL, ArenaTagType.TOXIC_SPIKES) .bypassFaint(), new Ability(AbilityId.ARMOR_TAIL, 9) .attr(FieldPriorityMoveImmunityAbAttr) @@ -7448,9 +9194,9 @@ export function initAbilities() { .attr(TypeImmunityHealAbAttr, PokemonType.GROUND) .ignorable(), new Ability(AbilityId.MYCELIUM_MIGHT, 9) - .attr(ChangeMovePriorityAbAttr, (pokemon, move) => move.category === MoveCategory.STATUS, -0.2) - .attr(PreventBypassSpeedChanceAbAttr, (pokemon, move) => move.category === MoveCategory.STATUS) - .attr(MoveAbilityBypassAbAttr, (pokemon, move: Move) => move.category === MoveCategory.STATUS), + .attr(ChangeMovePriorityAbAttr, (_pokemon, move) => move.category === MoveCategory.STATUS, -0.2) + .attr(PreventBypassSpeedChanceAbAttr, (_pokemon, move) => move.category === MoveCategory.STATUS) + .attr(MoveAbilityBypassAbAttr, (_pokemon, move: Move) => move.category === MoveCategory.STATUS), new Ability(AbilityId.MINDS_EYE, 9) .attr(IgnoreTypeImmunityAbAttr, PokemonType.GHOST, [ PokemonType.NORMAL, PokemonType.FIGHTING ]) .attr(ProtectStatAbAttr, Stat.ACC) From 1c4edabd1dde2b30179aebe08f9a3bdfad199bc3 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Sun, 8 Jun 2025 01:55:30 -0500 Subject: [PATCH 220/262] [Refactor] Ensure that new phases are created through the phase manager https://github.com/pagefaultgames/pokerogue/pull/5955 * Add newPhase method to phase-manager * Update calls to append/prepend phase to use string phase * Replace instantiations of new phase with phase manager --- src/@types/phase-types.ts | 299 +--------------- src/battle-scene.ts | 47 +-- src/data/abilities/ability.ts | 325 ++++++++++-------- src/data/arena-tag.ts | 61 ++-- src/data/battler-tags.ts | 226 ++++++------ src/data/berry.ts | 37 +- src/data/moves/move.ts | 105 +++--- .../encounters/a-trainers-test-encounter.ts | 3 +- .../encounters/absolute-avarice-encounter.ts | 9 +- .../an-offer-you-cant-refuse-encounter.ts | 3 +- .../encounters/berries-abound-encounter.ts | 9 +- .../encounters/bug-type-superfan-encounter.ts | 7 +- .../encounters/dancing-lessons-encounter.ts | 21 +- .../encounters/dark-deal-encounter.ts | 3 +- .../encounters/delibirdy-encounter.ts | 13 +- .../encounters/fiery-fallout-encounter.ts | 17 +- .../encounters/fight-or-flight-encounter.ts | 9 +- .../encounters/fun-and-games-encounter.ts | 6 +- .../encounters/mysterious-chest-encounter.ts | 3 +- .../encounters/safari-zone-encounter.ts | 6 +- .../slumbering-snorlax-encounter.ts | 3 +- .../teleporting-hijinks-encounter.ts | 9 +- .../encounters/the-strong-stuff-encounter.ts | 9 +- .../the-winstrate-challenge-encounter.ts | 9 +- .../encounters/uncommon-breed-encounter.ts | 9 +- .../utils/encounter-phase-utils.ts | 56 ++- .../utils/encounter-pokemon-utils.ts | 3 +- src/field/arena.ts | 26 +- src/field/pokemon.ts | 51 ++- src/modifier/modifier.ts | 126 ++++--- src/phase-manager.ts | 294 +++++++++++++++- src/phases/attempt-capture-phase.ts | 3 +- src/phases/attempt-run-phase.ts | 9 +- src/phases/battle-end-phase.ts | 3 +- src/phases/berry-phase.ts | 8 +- src/phases/check-status-effect-phase.ts | 3 +- src/phases/check-switch-phase.ts | 8 +- src/phases/command-phase.ts | 9 +- src/phases/egg-lapse-phase.ts | 6 +- src/phases/encounter-phase.ts | 71 ++-- src/phases/evolution-phase.ts | 12 +- src/phases/exp-phase.ts | 3 +- src/phases/faint-phase.ts | 20 +- src/phases/form-change-phase.ts | 3 +- src/phases/game-over-phase.ts | 42 +-- src/phases/level-up-phase.ts | 6 +- src/phases/login-phase.ts | 8 +- src/phases/message-phase.ts | 9 +- src/phases/move-charge-phase.ts | 3 +- src/phases/move-effect-phase.ts | 27 +- src/phases/move-phase.ts | 38 +- src/phases/mystery-encounter-phases.ts | 58 ++-- src/phases/post-game-over-phase.ts | 3 +- src/phases/quiet-form-change-phase.ts | 12 +- src/phases/revival-blessing-phase.ts | 24 +- src/phases/select-biome-phase.ts | 6 +- src/phases/select-modifier-phase.ts | 12 +- src/phases/select-starter-phase.ts | 3 +- src/phases/select-target-phase.ts | 3 +- src/phases/show-ability-phase.ts | 5 +- src/phases/show-party-exp-bar-phase.ts | 6 +- src/phases/stat-stage-change-phase.ts | 23 +- src/phases/summon-phase.ts | 9 +- src/phases/switch-phase.ts | 5 +- src/phases/switch-summon-phase.ts | 3 +- src/phases/title-phase.ts | 23 +- src/phases/trainer-victory-phase.ts | 36 +- src/phases/turn-end-phase.ts | 18 +- src/phases/turn-init-phase.ts | 19 +- src/phases/turn-start-phase.ts | 138 ++++---- src/phases/unavailable-phase.ts | 3 +- src/phases/victory-phase.ts | 62 ++-- src/system/game-data.ts | 11 +- src/ui/challenges-select-ui-handler.ts | 6 +- src/ui/starter-select-ui-handler.ts | 9 +- test/testUtils/gameManager.ts | 4 +- 76 files changed, 1302 insertions(+), 1294 deletions(-) diff --git a/src/@types/phase-types.ts b/src/@types/phase-types.ts index 596d9b15723..1d68c7921dd 100644 --- a/src/@types/phase-types.ts +++ b/src/@types/phase-types.ts @@ -1,286 +1,25 @@ -import type { MoveAnim } from "#app/data/battle-anims"; -import type { AddEnemyBuffModifierPhase } from "#app/phases/add-enemy-buff-modifier-phase"; -import type { AttemptCapturePhase } from "#app/phases/attempt-capture-phase"; -import type { AttemptRunPhase } from "#app/phases/attempt-run-phase"; -import type { BattleEndPhase } from "#app/phases/battle-end-phase"; -import type { BerryPhase } from "#app/phases/berry-phase"; -import type { CheckStatusEffectPhase } from "#app/phases/check-status-effect-phase"; -import type { CheckSwitchPhase } from "#app/phases/check-switch-phase"; -import type { CommandPhase } from "#app/phases/command-phase"; -import type { CommonAnimPhase } from "#app/phases/common-anim-phase"; -import type { DamageAnimPhase } from "#app/phases/damage-anim-phase"; -import type { EggHatchPhase } from "#app/phases/egg-hatch-phase"; -import type { EggLapsePhase } from "#app/phases/egg-lapse-phase"; -import type { EggSummaryPhase } from "#app/phases/egg-summary-phase"; -import type { EncounterPhase } from "#app/phases/encounter-phase"; -import type { EndCardPhase } from "#app/phases/end-card-phase"; -import type { EndEvolutionPhase } from "#app/phases/end-evolution-phase"; -import type { EnemyCommandPhase } from "#app/phases/enemy-command-phase"; -import type { EvolutionPhase } from "#app/phases/evolution-phase"; -import type { ExpPhase } from "#app/phases/exp-phase"; -import type { FaintPhase } from "#app/phases/faint-phase"; -import type { FormChangePhase } from "#app/phases/form-change-phase"; -import type { GameOverModifierRewardPhase } from "#app/phases/game-over-modifier-reward-phase"; -import type { GameOverPhase } from "#app/phases/game-over-phase"; -import type { HideAbilityPhase } from "#app/phases/hide-ability-phase"; -import type { HidePartyExpBarPhase } from "#app/phases/hide-party-exp-bar-phase"; -import type { LearnMovePhase } from "#app/phases/learn-move-phase"; -import type { LevelCapPhase } from "#app/phases/level-cap-phase"; -import type { LevelUpPhase } from "#app/phases/level-up-phase"; -import type { LoadMoveAnimPhase } from "#app/phases/load-move-anim-phase"; -import type { LoginPhase } from "#app/phases/login-phase"; -import type { MessagePhase } from "#app/phases/message-phase"; -import type { ModifierRewardPhase } from "#app/phases/modifier-reward-phase"; -import type { MoneyRewardPhase } from "#app/phases/money-reward-phase"; -import type { MoveAnimPhase } from "#app/phases/move-anim-phase"; -import type { MoveChargePhase } from "#app/phases/move-charge-phase"; -import type { MoveEffectPhase } from "#app/phases/move-effect-phase"; -import type { MoveEndPhase } from "#app/phases/move-end-phase"; -import type { MoveHeaderPhase } from "#app/phases/move-header-phase"; -import type { MovePhase } from "#app/phases/move-phase"; -import type { - MysteryEncounterPhase, - MysteryEncounterOptionSelectedPhase, - MysteryEncounterBattlePhase, - MysteryEncounterRewardsPhase, - PostMysteryEncounterPhase, - MysteryEncounterBattleStartCleanupPhase, -} from "#app/phases/mystery-encounter-phases"; -import type { NewBattlePhase } from "#app/phases/new-battle-phase"; -import type { NewBiomeEncounterPhase } from "#app/phases/new-biome-encounter-phase"; -import type { NextEncounterPhase } from "#app/phases/next-encounter-phase"; -import type { ObtainStatusEffectPhase } from "#app/phases/obtain-status-effect-phase"; -import type { PartyExpPhase } from "#app/phases/party-exp-phase"; -import type { PartyHealPhase } from "#app/phases/party-heal-phase"; -import type { PokemonAnimPhase } from "#app/phases/pokemon-anim-phase"; -import type { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; -import type { PokemonTransformPhase } from "#app/phases/pokemon-transform-phase"; -import type { PostGameOverPhase } from "#app/phases/post-game-over-phase"; -import type { PostSummonPhase } from "#app/phases/post-summon-phase"; -import type { PostTurnStatusEffectPhase } from "#app/phases/post-turn-status-effect-phase"; -import type { QuietFormChangePhase } from "#app/phases/quiet-form-change-phase"; -import type { ReloadSessionPhase } from "#app/phases/reload-session-phase"; -import type { ResetStatusPhase } from "#app/phases/reset-status-phase"; -import type { ReturnPhase } from "#app/phases/return-phase"; -import type { RevivalBlessingPhase } from "#app/phases/revival-blessing-phase"; -import type { RibbonModifierRewardPhase } from "#app/phases/ribbon-modifier-reward-phase"; -import type { ScanIvsPhase } from "#app/phases/scan-ivs-phase"; -import type { SelectBiomePhase } from "#app/phases/select-biome-phase"; -import type { SelectChallengePhase } from "#app/phases/select-challenge-phase"; -import type { SelectGenderPhase } from "#app/phases/select-gender-phase"; -import type { SelectModifierPhase } from "#app/phases/select-modifier-phase"; -import type { SelectStarterPhase } from "#app/phases/select-starter-phase"; -import type { SelectTargetPhase } from "#app/phases/select-target-phase"; -import type { ShinySparklePhase } from "#app/phases/shiny-sparkle-phase"; -import type { ShowAbilityPhase } from "#app/phases/show-ability-phase"; -import type { ShowPartyExpBarPhase } from "#app/phases/show-party-exp-bar-phase"; -import type { ShowTrainerPhase } from "#app/phases/show-trainer-phase"; -import type { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; -import type { SummonMissingPhase } from "#app/phases/summon-missing-phase"; -import type { SummonPhase } from "#app/phases/summon-phase"; -import type { SwitchBiomePhase } from "#app/phases/switch-biome-phase"; -import type { SwitchPhase } from "#app/phases/switch-phase"; -import type { SwitchSummonPhase } from "#app/phases/switch-summon-phase"; -import type { TeraPhase } from "#app/phases/tera-phase"; -import type { TitlePhase } from "#app/phases/title-phase"; -import type { ToggleDoublePositionPhase } from "#app/phases/toggle-double-position-phase"; -import type { TrainerVictoryPhase } from "#app/phases/trainer-victory-phase"; -import type { TurnEndPhase } from "#app/phases/turn-end-phase"; -import type { TurnInitPhase } from "#app/phases/turn-init-phase"; -import type { TurnStartPhase } from "#app/phases/turn-start-phase"; -import type { UnavailablePhase } from "#app/phases/unavailable-phase"; -import type { UnlockPhase } from "#app/phases/unlock-phase"; -import type { VictoryPhase } from "#app/phases/victory-phase"; -import type { WeatherEffectPhase } from "#app/phases/weather-effect-phase"; +import type { PhaseConstructorMap } from "#app/phase-manager"; -export type PhaseClass = - | typeof AddEnemyBuffModifierPhase - | typeof AttemptCapturePhase - | typeof AttemptRunPhase - | typeof BattleEndPhase - | typeof BerryPhase - | typeof CheckStatusEffectPhase - | typeof CheckSwitchPhase - | typeof CommandPhase - | typeof CommonAnimPhase - | typeof DamageAnimPhase - | typeof EggHatchPhase - | typeof EggLapsePhase - | typeof EggSummaryPhase - | typeof EncounterPhase - | typeof EndCardPhase - | typeof EndEvolutionPhase - | typeof EnemyCommandPhase - | typeof EvolutionPhase - | typeof FormChangePhase - | typeof ExpPhase - | typeof FaintPhase - | typeof FormChangePhase - | typeof GameOverPhase - | typeof GameOverModifierRewardPhase - | typeof HideAbilityPhase - | typeof HidePartyExpBarPhase - | typeof LearnMovePhase - | typeof LevelUpPhase - | typeof LevelCapPhase - | typeof LoadMoveAnimPhase - | typeof LoginPhase - | typeof MessagePhase - | typeof ModifierRewardPhase - | typeof MoneyRewardPhase - | typeof MoveAnimPhase - | typeof MoveChargePhase - | typeof MoveEffectPhase - | typeof MoveEndPhase - | typeof MoveHeaderPhase - | typeof MovePhase - | typeof MysteryEncounterPhase - | typeof MysteryEncounterOptionSelectedPhase - | typeof MysteryEncounterBattlePhase - | typeof MysteryEncounterRewardsPhase - | typeof MysteryEncounterBattleStartCleanupPhase - | typeof MysteryEncounterRewardsPhase - | typeof PostMysteryEncounterPhase - | typeof NewBattlePhase - | typeof NewBiomeEncounterPhase - | typeof NextEncounterPhase - | typeof ObtainStatusEffectPhase - | typeof PartyExpPhase - | typeof PartyHealPhase - | typeof PokemonAnimPhase - | typeof PokemonHealPhase - | typeof PokemonTransformPhase - | typeof PostGameOverPhase - | typeof PostSummonPhase - | typeof PostTurnStatusEffectPhase - | typeof QuietFormChangePhase - | typeof ReloadSessionPhase - | typeof ResetStatusPhase - | typeof ReturnPhase - | typeof RevivalBlessingPhase - | typeof RibbonModifierRewardPhase - | typeof ScanIvsPhase - | typeof SelectBiomePhase - | typeof SelectChallengePhase - | typeof SelectGenderPhase - | typeof SelectModifierPhase - | typeof SelectStarterPhase - | typeof SelectTargetPhase - | typeof ShinySparklePhase - | typeof ShowAbilityPhase - | typeof ShowTrainerPhase - | typeof ShowPartyExpBarPhase - | typeof StatStageChangePhase - | typeof SummonMissingPhase - | typeof SummonPhase - | typeof SwitchBiomePhase - | typeof SwitchPhase - | typeof SwitchSummonPhase - | typeof TeraPhase - | typeof TitlePhase - | typeof ToggleDoublePositionPhase - | typeof TrainerVictoryPhase - | typeof TurnEndPhase - | typeof TurnInitPhase - | typeof TurnStartPhase - | typeof UnavailablePhase - | typeof UnlockPhase - | typeof VictoryPhase - | typeof WeatherEffectPhase; +// Intentionally export the types of everything in phase-manager, as this file is meant to be +// the centralized place for type definitions for the phase system. +export type * from "#app/phase-manager"; -/** Typescript map used to map a string phase to the actual phase type */ +// This file includes helpful types for the phase system. +// It intentionally imports the phase constructor map from the phase manager (and re-exports it) + +/** + * Map of phase names to constructors for said phase + */ export type PhaseMap = { - AddEnemyBuffModifierPhase: AddEnemyBuffModifierPhase; - AttemptCapturePhase: AttemptCapturePhase; - AttemptRunPhase: AttemptRunPhase; - BattleEndPhase: BattleEndPhase; - BerryPhase: BerryPhase; - CheckStatusEffectPhase: CheckStatusEffectPhase; - CheckSwitchPhase: CheckSwitchPhase; - CommandPhase: CommandPhase; - CommonAnimPhase: CommonAnimPhase; - DamageAnimPhase: DamageAnimPhase; - EggHatchPhase: EggHatchPhase; - EggLapsePhase: EggLapsePhase; - EggSummaryPhase: EggSummaryPhase; - EncounterPhase: EncounterPhase; - EndCardPhase: EndCardPhase; - EndEvolutionPhase: EndEvolutionPhase; - EnemyCommandPhase: EnemyCommandPhase; - EvolutionPhase: EvolutionPhase; - ExpPhase: ExpPhase; - FaintPhase: FaintPhase; - FormChangePhase: FormChangePhase; - GameOverPhase: GameOverPhase; - GameOverModifierRewardPhase: GameOverModifierRewardPhase; - HideAbilityPhase: HideAbilityPhase; - HidePartyExpBarPhase: HidePartyExpBarPhase; - LearnMovePhase: LearnMovePhase; - LevelCapPhase: LevelCapPhase; - LevelUpPhase: LevelUpPhase; - LoadMoveAnimPhase: LoadMoveAnimPhase; - LoginPhase: LoginPhase; - MessagePhase: MessagePhase; - ModifierRewardPhase: ModifierRewardPhase; - MoneyRewardPhase: MoneyRewardPhase; - MoveAnimPhase: MoveAnimPhase; - MoveChargePhase: MoveChargePhase; - MoveEffectPhase: MoveEffectPhase; - MoveEndPhase: MoveEndPhase; - MoveHeaderPhase: MoveHeaderPhase; - MovePhase: MovePhase; - MysteryEncounterPhase: MysteryEncounterPhase; - MysteryEncounterOptionSelectedPhase: MysteryEncounterOptionSelectedPhase; - MysteryEncounterBattlePhase: MysteryEncounterBattlePhase; - MysteryEncounterBattleStartCleanupPhase: MysteryEncounterBattleStartCleanupPhase; - MysteryEncounterRewardsPhase: MysteryEncounterRewardsPhase; - PostMysteryEncounterPhase: PostMysteryEncounterPhase; - NewBattlePhase: NewBattlePhase; - NewBiomeEncounterPhase: NewBiomeEncounterPhase; - NextEncounterPhase: NextEncounterPhase; - ObtainStatusEffectPhase: ObtainStatusEffectPhase; - PartyExpPhase: PartyExpPhase; - PartyHealPhase: PartyHealPhase; - PokemonAnimPhase: PokemonAnimPhase; - PokemonHealPhase: PokemonHealPhase; - PokemonTransformPhase: PokemonTransformPhase; - PostGameOverPhase: PostGameOverPhase; - PostSummonPhase: PostSummonPhase; - PostTurnStatusEffectPhase: PostTurnStatusEffectPhase; - QuietFormChangePhase: QuietFormChangePhase; - ReloadSessionPhase: ReloadSessionPhase; - ResetStatusPhase: ResetStatusPhase; - ReturnPhase: ReturnPhase; - RevivalBlessingPhase: RevivalBlessingPhase; - RibbonModifierRewardPhase: RibbonModifierRewardPhase; - ScanIvsPhase: ScanIvsPhase; - SelectBiomePhase: SelectBiomePhase; - SelectChallengePhase: SelectChallengePhase; - SelectGenderPhase: SelectGenderPhase; - SelectModifierPhase: SelectModifierPhase; - SelectStarterPhase: SelectStarterPhase; - SelectTargetPhase: SelectTargetPhase; - ShinySparklePhase: ShinySparklePhase; - ShowAbilityPhase: ShowAbilityPhase; - ShowPartyExpBarPhase: ShowPartyExpBarPhase; - ShowTrainerPhase: ShowTrainerPhase; - StatStageChangePhase: StatStageChangePhase; - SummonMissingPhase: SummonMissingPhase; - SummonPhase: SummonPhase; - SwitchBiomePhase: SwitchBiomePhase; - SwitchPhase: SwitchPhase; - SwitchSummonPhase: SwitchSummonPhase; - TeraPhase: TeraPhase; - TitlePhase: TitlePhase; - ToggleDoublePositionPhase: ToggleDoublePositionPhase; - TrainerVictoryPhase: TrainerVictoryPhase; - TurnEndPhase: TurnEndPhase; - TurnInitPhase: TurnInitPhase; - TurnStartPhase: TurnStartPhase; - UnavailablePhase: UnavailablePhase; - UnlockPhase: UnlockPhase; - VictoryPhase: VictoryPhase; - WeatherEffectPhase: WeatherEffectPhase; + [K in keyof PhaseConstructorMap]: InstanceType; }; +/** + * Union type of all phase constructors. + */ +export type PhaseClass = PhaseConstructorMap[keyof PhaseConstructorMap]; + +/** + * Union type of all phase names as strings. + */ export type PhaseString = keyof PhaseMap; diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 23601910e4d..7743302cf94 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -108,7 +108,6 @@ import { SpeciesFormChangeManualTrigger, SpeciesFormChangeTimeOfDayTrigger, } from "#app/data/pokemon-forms"; -import { FormChangePhase } from "#app/phases/form-change-phase"; import { getTypeRgb } from "#app/data/type"; import { PokemonType } from "#enums/pokemon-type"; import PokemonSpriteSparkleHandler from "#app/field/pokemon-sprite-sparkle-handler"; @@ -142,18 +141,7 @@ import i18next from "i18next"; import { TrainerType } from "#enums/trainer-type"; import { battleSpecDialogue } from "#app/data/dialogue"; import { LoadingScene } from "#app/loading-scene"; -import { LevelCapPhase } from "#app/phases/level-cap-phase"; -import { LoginPhase } from "#app/phases/login-phase"; import type { MovePhase } from "#app/phases/move-phase"; -import { NewBiomeEncounterPhase } from "#app/phases/new-biome-encounter-phase"; -import { NextEncounterPhase } from "#app/phases/next-encounter-phase"; -import { PokemonAnimPhase } from "#app/phases/pokemon-anim-phase"; -import { QuietFormChangePhase } from "#app/phases/quiet-form-change-phase"; -import { ReturnPhase } from "#app/phases/return-phase"; -import { ShowTrainerPhase } from "#app/phases/show-trainer-phase"; -import { SummonPhase } from "#app/phases/summon-phase"; -import { TitlePhase } from "#app/phases/title-phase"; -import { ToggleDoublePositionPhase } from "#app/phases/toggle-double-position-phase"; import { ShopCursorTarget } from "#app/enums/shop-cursor-target"; import MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { @@ -168,8 +156,6 @@ import { MysteryEncounterSaveData } from "#app/data/mystery-encounters/mystery-e import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import type HeldModifierConfig from "#app/@types/held-modifier-config"; -import { ExpPhase } from "#app/phases/exp-phase"; -import { ShowPartyExpBarPhase } from "#app/phases/show-party-exp-bar-phase"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; import { ExpGainsSpeed } from "#enums/exp-gains-speed"; import { BattlerTagType } from "#enums/battler-tag-type"; @@ -699,8 +685,8 @@ export default class BattleScene extends SceneBase { ).then(() => loadMoveAnimAssets(defaultMoves, true)), this.initStarterColors(), ]).then(() => { - this.phaseManager.pushPhase(new LoginPhase()); - this.phaseManager.pushPhase(new TitlePhase()); + this.phaseManager.pushNew("LoginPhase"); + this.phaseManager.pushNew("TitlePhase"); this.phaseManager.shiftPhase(); }); @@ -1475,7 +1461,7 @@ export default class BattleScene extends SceneBase { playerField.forEach((pokemon, p) => { if (pokemon.isOnField()) { - this.phaseManager.pushPhase(new ReturnPhase(p)); + this.phaseManager.pushNew("ReturnPhase", p); } }); @@ -1492,7 +1478,7 @@ export default class BattleScene extends SceneBase { } if (!this.trainer.visible) { - this.phaseManager.pushPhase(new ShowTrainerPhase()); + this.phaseManager.pushNew("ShowTrainerPhase"); } } @@ -1501,13 +1487,13 @@ export default class BattleScene extends SceneBase { } if (!this.gameMode.hasRandomBiomes && !isNewBiome) { - this.phaseManager.pushPhase(new NextEncounterPhase()); + this.phaseManager.pushNew("NextEncounterPhase"); } else { - this.phaseManager.pushPhase(new NewBiomeEncounterPhase()); + this.phaseManager.pushNew("NewBiomeEncounterPhase"); const newMaxExpLevel = this.getMaxExpLevel(); if (newMaxExpLevel > maxExpLevel) { - this.phaseManager.pushPhase(new LevelCapPhase()); + this.phaseManager.pushNew("LevelCapPhase"); } } } @@ -3199,9 +3185,9 @@ export default class BattleScene extends SceneBase { if (matchingFormChange) { let phase: Phase; if (pokemon.isPlayer() && !matchingFormChange.quiet) { - phase = new FormChangePhase(pokemon, matchingFormChange, modal); + phase = this.phaseManager.create("FormChangePhase", pokemon, matchingFormChange, modal); } else { - phase = new QuietFormChangePhase(pokemon, matchingFormChange); + phase = this.phaseManager.create("QuietFormChangePhase", pokemon, matchingFormChange); } if (pokemon.isPlayer() && !matchingFormChange.quiet && modal) { this.phaseManager.overridePhase(phase); @@ -3223,11 +3209,12 @@ export default class BattleScene extends SceneBase { fieldAssets?: Phaser.GameObjects.Sprite[], delayed = false, ): boolean { - const phase: Phase = new PokemonAnimPhase(battleAnimType, pokemon, fieldAssets); + const phaseManager = this.phaseManager; + const phase: Phase = phaseManager.create("PokemonAnimPhase", battleAnimType, pokemon, fieldAssets); if (delayed) { - this.phaseManager.pushPhase(phase); + phaseManager.pushPhase(phase); } else { - this.phaseManager.unshiftPhase(phase); + phaseManager.unshiftPhase(phase); } return true; } @@ -3335,9 +3322,9 @@ export default class BattleScene extends SceneBase { this.currentBattle.double = true; const availablePartyMembers = this.getPlayerParty().filter(p => p.isAllowedInBattle()); if (availablePartyMembers.length > 1) { - this.phaseManager.pushPhase(new ToggleDoublePositionPhase(true)); + this.phaseManager.pushNew("ToggleDoublePositionPhase", true); if (!availablePartyMembers[1].isOnField()) { - this.phaseManager.pushPhase(new SummonPhase(1)); + this.phaseManager.pushNew("SummonPhase", 1); } } @@ -3461,8 +3448,8 @@ export default class BattleScene extends SceneBase { const partyMemberIndex = party.indexOf(expPartyMembers[pm]); this.phaseManager.unshiftPhase( expPartyMembers[pm].isOnField() - ? new ExpPhase(partyMemberIndex, exp) - : new ShowPartyExpBarPhase(partyMemberIndex, exp), + ? this.phaseManager.create("ExpPhase", partyMemberIndex, exp) + : this.phaseManager.create("ShowPartyExpBarPhase", partyMemberIndex, exp), ); } } diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 9269f84d269..a79e2206348 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -47,16 +47,8 @@ import { Command } from "#app/ui/command-ui-handler"; import { BerryModifierType } from "#app/modifier/modifier-type"; import { getPokeballName } from "#app/data/pokeball"; import { BattleType } from "#enums/battle-type"; -import { MovePhase } from "#app/phases/move-phase"; -import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; -import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; +import type { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { globalScene } from "#app/global-scene"; -import { SwitchPhase } from "#app/phases/switch-phase"; -import { SwitchSummonPhase } from "#app/phases/switch-summon-phase"; -import { BattleEndPhase } from "#app/phases/battle-end-phase"; -import { NewBattlePhase } from "#app/phases/new-battle-phase"; -import { MoveEndPhase } from "#app/phases/move-end-phase"; -import { PokemonTransformPhase } from "#app/phases/pokemon-transform-phase"; import { allAbilities } from "#app/data/data-lists"; import { AbAttr } from "#app/data/abilities/ab-attrs/ab-attr"; import { Ability } from "#app/data/abilities/ability-class"; @@ -77,7 +69,6 @@ import { MoveFlags } from "#enums/MoveFlags"; import { MoveTarget } from "#enums/MoveTarget"; import { MoveCategory } from "#enums/MoveCategory"; import type { BerryType } from "#enums/berry-type"; -import { CommonAnimPhase } from "#app/phases/common-anim-phase"; import { CommonAnim } from "../battle-anims"; import { getBerryEffectFunc } from "../berry"; import { BerryUsedEvent } from "#app/events/battle-scene"; @@ -98,7 +89,6 @@ import type { import type { BattlerIndex } from "#app/battle"; import type Move from "#app/data/moves/move"; import type { ArenaTrapTag, SuppressAbilitiesTag } from "#app/data/arena-tag"; -import { SelectBiomePhase } from "#app/phases/select-biome-phase"; import { noAbilityTypeOverrideMoves } from "../moves/invalid-moves"; export class BlockRecoilDamageAttr extends AbAttr { @@ -200,10 +190,13 @@ export class PostTeraFormChangeStatChangeAbAttr extends AbAttr { const statStageChangePhases: StatStageChangePhase[] = []; if (!simulated) { - statStageChangePhases.push(new StatStageChangePhase(pokemon.getBattlerIndex(), true, this.stats, this.stages)); + const phaseManager = globalScene.phaseManager; + statStageChangePhases.push( + phaseManager.create("StatStageChangePhase", pokemon.getBattlerIndex(), true, this.stats, this.stages), + ); for (const statStageChangePhase of statStageChangePhases) { - globalScene.phaseManager.unshiftPhase(statStageChangePhase); + phaseManager.unshiftPhase(statStageChangePhase); } } } @@ -581,16 +574,15 @@ export class TypeImmunityHealAbAttr extends TypeImmunityAbAttr { super.applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); if (!pokemon.isFullHp() && !simulated) { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; - globalScene.phaseManager.unshiftPhase( - new PokemonHealPhase( - pokemon.getBattlerIndex(), - toDmgValue(pokemon.getMaxHp() / 4), - i18next.t("abilityTriggers:typeImmunityHeal", { - pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - abilityName, - }), - true, - ), + globalScene.phaseManager.unshiftNew( + "PokemonHealPhase", + pokemon.getBattlerIndex(), + toDmgValue(pokemon.getMaxHp() / 4), + i18next.t("abilityTriggers:typeImmunityHeal", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + abilityName, + }), + true, ); cancelled.value = true; // Suppresses "No Effect" message } @@ -632,8 +624,12 @@ class TypeImmunityStatStageChangeAbAttr extends TypeImmunityAbAttr { super.applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); cancelled.value = true; // Suppresses "No Effect" message if (!simulated) { - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(pokemon.getBattlerIndex(), true, [this.stat], this.stages), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + pokemon.getBattlerIndex(), + true, + [this.stat], + this.stages, ); } } @@ -960,8 +956,12 @@ export class MoveImmunityStatStageChangeAbAttr extends MoveImmunityAbAttr { args: any[], ): void { super.applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(pokemon.getBattlerIndex(), true, [this.stat], this.stages), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + pokemon.getBattlerIndex(), + true, + [this.stat], + this.stages, ); } } @@ -1063,18 +1063,21 @@ export class PostDefendStatStageChangeAbAttr extends PostDefendAbAttr { const ally = pokemon.getAlly(); const otherPokemon = !isNullOrUndefined(ally) ? pokemon.getOpponents().concat([ally]) : pokemon.getOpponents(); for (const other of otherPokemon) { - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(other.getBattlerIndex(), false, [this.stat], this.stages), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + other.getBattlerIndex(), + false, + [this.stat], + this.stages, ); } } else { - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase( - (this.selfTarget ? pokemon : attacker).getBattlerIndex(), - this.selfTarget, - [this.stat], - this.stages, - ), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + (this.selfTarget ? pokemon : attacker).getBattlerIndex(), + this.selfTarget, + [this.stat], + this.stages, ); } } @@ -1130,13 +1133,12 @@ export class PostDefendHpGatedStatStageChangeAbAttr extends PostDefendAbAttr { _args: any[], ): void { if (!simulated) { - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase( - (this.selfTarget ? pokemon : attacker).getBattlerIndex(), - true, - this.stats, - this.stages, - ), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + (this.selfTarget ? pokemon : attacker).getBattlerIndex(), + true, + this.stats, + this.stages, ); } } @@ -1450,8 +1452,12 @@ export class PostDefendCritStatStageChangeAbAttr extends PostDefendAbAttr { _args: any[], ): void { if (!simulated) { - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(pokemon.getBattlerIndex(), true, [this.stat], this.stages), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + pokemon.getBattlerIndex(), + true, + [this.stat], + this.stages, ); } } @@ -1766,8 +1772,12 @@ export class PostStatStageChangeStatStageChangeAbAttr extends PostStatStageChang _args: any[], ): void { if (!simulated) { - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(pokemon.getBattlerIndex(), true, this.statsToChange, this.stages), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + pokemon.getBattlerIndex(), + true, + this.statsToChange, + this.stages, ); } } @@ -2928,9 +2938,7 @@ class PostVictoryStatStageChangeAbAttr extends PostVictoryAbAttr { override applyPostVictory(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { const stat = typeof this.stat === "function" ? this.stat(pokemon) : this.stat; if (!simulated) { - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(pokemon.getBattlerIndex(), true, [stat], this.stages), - ); + globalScene.phaseManager.unshiftNew("StatStageChangePhase", pokemon.getBattlerIndex(), true, [stat], this.stages); } } } @@ -2996,9 +3004,7 @@ export class PostKnockOutStatStageChangeAbAttr extends PostKnockOutAbAttr { ): void { const stat = typeof this.stat === "function" ? this.stat(pokemon) : this.stat; if (!simulated) { - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(pokemon.getBattlerIndex(), true, [stat], this.stages), - ); + globalScene.phaseManager.unshiftNew("StatStageChangePhase", pokemon.getBattlerIndex(), true, [stat], this.stages); } } } @@ -3112,8 +3118,12 @@ export class PostIntimidateStatStageChangeAbAttr extends AbAttr { _args: any[], ): void { if (!simulated) { - globalScene.phaseManager.pushPhase( - new StatStageChangePhase(pokemon.getBattlerIndex(), false, this.stats, this.stages), + globalScene.phaseManager.pushNew( + "StatStageChangePhase", + pokemon.getBattlerIndex(), + false, + this.stats, + this.stages, ); } cancelled.value = this.overwrites; @@ -3315,8 +3325,12 @@ export class PostSummonStatStageChangeAbAttr extends PostSummonAbAttr { if (this.selfTarget) { // we unshift the StatStageChangePhase to put it right after the showAbility and not at the end of the // phase list (which could be after CommandPhase for example) - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(pokemon.getBattlerIndex(), true, this.stats, this.stages), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + pokemon.getBattlerIndex(), + true, + this.stats, + this.stages, ); } else { for (const opponent of pokemon.getOpponents()) { @@ -3330,8 +3344,12 @@ export class PostSummonStatStageChangeAbAttr extends PostSummonAbAttr { } } if (!cancelled.value) { - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(opponent.getBattlerIndex(), false, this.stats, this.stages), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + opponent.getBattlerIndex(), + false, + this.stats, + this.stages, ); } } @@ -3357,17 +3375,16 @@ export class PostSummonAllyHealAbAttr extends PostSummonAbAttr { override applyPostSummon(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { const target = pokemon.getAlly(); if (!simulated && !isNullOrUndefined(target)) { - globalScene.phaseManager.unshiftPhase( - new PokemonHealPhase( - target.getBattlerIndex(), - toDmgValue(pokemon.getMaxHp() / this.healRatio), - i18next.t("abilityTriggers:postSummonAllyHeal", { - pokemonNameWithAffix: getPokemonNameWithAffix(target), - pokemonName: pokemon.name, - }), - true, - !this.showAnim, - ), + globalScene.phaseManager.unshiftNew( + "PokemonHealPhase", + target.getBattlerIndex(), + toDmgValue(pokemon.getMaxHp() / this.healRatio), + i18next.t("abilityTriggers:postSummonAllyHeal", { + pokemonNameWithAffix: getPokemonNameWithAffix(target), + pokemonName: pokemon.name, + }), + true, + !this.showAnim, ); } } @@ -3445,7 +3462,7 @@ export class DownloadAbAttr extends PostSummonAbAttr { } if (!simulated) { - globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), false, this.stats, 1)); + globalScene.phaseManager.unshiftNew("StatStageChangePhase", pokemon.getBattlerIndex(), false, this.stats, 1); } } } @@ -3726,8 +3743,11 @@ export class PostSummonTransformAbAttr extends PostSummonAbAttr { override applyPostSummon(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): void { const target = this.getTarget(pokemon.getOpponents()); - globalScene.phaseManager.unshiftPhase( - new PokemonTransformPhase(pokemon.getBattlerIndex(), target.getBattlerIndex(), true), + globalScene.phaseManager.unshiftNew( + "PokemonTransformPhase", + pokemon.getBattlerIndex(), + target.getBattlerIndex(), + true, ); } } @@ -4110,8 +4130,17 @@ export class ReflectStatStageChangeAbAttr extends PreStatStageChangeAbAttr { const stages = args[1]; this.reflectedStat = stat; if (!simulated) { - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(attacker.getBattlerIndex(), false, [stat], stages, true, false, true, null, true), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + attacker.getBattlerIndex(), + false, + [stat], + stages, + true, + false, + true, + null, + true, ); } cancelled.value = true; @@ -5212,16 +5241,15 @@ export class PostWeatherLapseHealAbAttr extends PostWeatherLapseAbAttr { ): void { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; if (!simulated) { - globalScene.phaseManager.unshiftPhase( - new PokemonHealPhase( - pokemon.getBattlerIndex(), - toDmgValue(pokemon.getMaxHp() / (16 / this.healFactor)), - i18next.t("abilityTriggers:postWeatherLapseHeal", { - pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - abilityName, - }), - true, - ), + globalScene.phaseManager.unshiftNew( + "PokemonHealPhase", + pokemon.getBattlerIndex(), + toDmgValue(pokemon.getMaxHp() / (16 / this.healFactor)), + i18next.t("abilityTriggers:postWeatherLapseHeal", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + abilityName, + }), + true, ); } } @@ -5366,13 +5394,12 @@ export class PostTurnStatusHealAbAttr extends PostTurnAbAttr { override applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, _args: any[]): void { if (!simulated) { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; - globalScene.phaseManager.unshiftPhase( - new PokemonHealPhase( - pokemon.getBattlerIndex(), - toDmgValue(pokemon.getMaxHp() / 8), - i18next.t("abilityTriggers:poisonHeal", { pokemonName: getPokemonNameWithAffix(pokemon), abilityName }), - true, - ), + globalScene.phaseManager.unshiftNew( + "PokemonHealPhase", + pokemon.getBattlerIndex(), + toDmgValue(pokemon.getMaxHp() / 8), + i18next.t("abilityTriggers:poisonHeal", { pokemonName: getPokemonNameWithAffix(pokemon), abilityName }), + true, ); } } @@ -5529,8 +5556,11 @@ export class RepeatBerryNextTurnAbAttr extends PostTurnAbAttr { _cancelled: BooleanHolder | null, _args: any[], ): void { - globalScene.phaseManager.unshiftPhase( - new CommonAnimPhase(pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.USE_ITEM), + globalScene.phaseManager.unshiftNew( + "CommonAnimPhase", + pokemon.getBattlerIndex(), + pokemon.getBattlerIndex(), + CommonAnim.USE_ITEM, ); // Re-apply effects of all berries previously scarfed. @@ -5593,15 +5623,11 @@ export class MoodyAbAttr extends PostTurnAbAttr { if (canRaise.length > 0) { const raisedStat = canRaise[pokemon.randBattleSeedInt(canRaise.length)]; canLower = canRaise.filter(s => s !== raisedStat); - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(pokemon.getBattlerIndex(), true, [raisedStat], 2), - ); + globalScene.phaseManager.unshiftNew("StatStageChangePhase", pokemon.getBattlerIndex(), true, [raisedStat], 2); } if (canLower.length > 0) { const loweredStat = canLower[pokemon.randBattleSeedInt(canLower.length)]; - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(pokemon.getBattlerIndex(), true, [loweredStat], -1), - ); + globalScene.phaseManager.unshiftNew("StatStageChangePhase", pokemon.getBattlerIndex(), true, [loweredStat], -1); } } } @@ -5617,7 +5643,7 @@ export class SpeedBoostAbAttr extends PostTurnAbAttr { } override applyPostTurn(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): void { - globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [Stat.SPD], 1)); + globalScene.phaseManager.unshiftNew("StatStageChangePhase", pokemon.getBattlerIndex(), true, [Stat.SPD], 1); } } @@ -5629,16 +5655,15 @@ export class PostTurnHealAbAttr extends PostTurnAbAttr { override applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, _args: any[]): void { if (!simulated) { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; - globalScene.phaseManager.unshiftPhase( - new PokemonHealPhase( - pokemon.getBattlerIndex(), - toDmgValue(pokemon.getMaxHp() / 16), - i18next.t("abilityTriggers:postTurnHeal", { - pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - abilityName, - }), - true, - ), + globalScene.phaseManager.unshiftNew( + "PokemonHealPhase", + pokemon.getBattlerIndex(), + toDmgValue(pokemon.getMaxHp() / 16), + i18next.t("abilityTriggers:postTurnHeal", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + abilityName, + }), + true, ); } } @@ -5857,13 +5882,14 @@ export class PostDancingMoveAbAttr extends PostMoveUsedAbAttr { ): void { if (!simulated) { dancer.turnData.extraTurns++; + const phaseManager = globalScene.phaseManager; // If the move is an AttackMove or a StatusMove the Dancer must replicate the move on the source of the Dance if (move.getMove() instanceof AttackMove || move.getMove() instanceof StatusMove) { const target = this.getTarget(dancer, source, targets); - globalScene.phaseManager.unshiftPhase(new MovePhase(dancer, target, move, true, true)); + phaseManager.unshiftNew("MovePhase", dancer, target, move, true, true); } else if (move.getMove() instanceof SelfStatusMove) { // If the move is a SelfStatusMove (ie. Swords Dance) the Dancer should replicate it on itself - globalScene.phaseManager.unshiftPhase(new MovePhase(dancer, [dancer.getBattlerIndex()], move, true, true)); + phaseManager.unshiftNew("MovePhase", dancer, [dancer.getBattlerIndex()], move, true, true); } } } @@ -5949,16 +5975,15 @@ export class StatStageChangeCopyAbAttr extends AbAttr { args: any[], ): void { if (!simulated) { - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase( - pokemon.getBattlerIndex(), - true, - args[0] as BattleStat[], - args[1] as number, - true, - false, - false, - ), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + pokemon.getBattlerIndex(), + true, + args[0] as BattleStat[], + args[1] as number, + true, + false, + false, ); } } @@ -6058,16 +6083,15 @@ export class HealFromBerryUseAbAttr extends AbAttr { } const { name: abilityName } = passive ? pokemon.getPassiveAbility() : pokemon.getAbility(); - globalScene.phaseManager.unshiftPhase( - new PokemonHealPhase( - pokemon.getBattlerIndex(), - toDmgValue(pokemon.getMaxHp() * this.healPercent), - i18next.t("abilityTriggers:healFromBerryUse", { - pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - abilityName, - }), - true, - ), + globalScene.phaseManager.unshiftNew( + "PokemonHealPhase", + pokemon.getBattlerIndex(), + toDmgValue(pokemon.getMaxHp() * this.healPercent), + i18next.t("abilityTriggers:healFromBerryUse", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + abilityName, + }), + true, ); } } @@ -6502,8 +6526,12 @@ export class FlinchStatStageChangeAbAttr extends FlinchEffectAbAttr { _args: any[], ): void { if (!simulated) { - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(pokemon.getBattlerIndex(), true, this.stats, this.stages), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + pokemon.getBattlerIndex(), + true, + this.stats, + this.stages, ); } } @@ -7241,9 +7269,13 @@ class ForceSwitchOutHelper { if (switchOutTarget.hp > 0) { switchOutTarget.leaveField(this.switchType === SwitchType.SWITCH); - globalScene.phaseManager.prependToPhase( - new SwitchPhase(this.switchType, switchOutTarget.getFieldIndex(), true, true), - MoveEndPhase, + globalScene.phaseManager.prependNewToPhase( + "MoveEndPhase", + "SwitchPhase", + this.switchType, + switchOutTarget.getFieldIndex(), + true, + true, ); return true; } @@ -7260,9 +7292,14 @@ class ForceSwitchOutHelper { const summonIndex = globalScene.currentBattle.trainer ? globalScene.currentBattle.trainer.getNextSummonIndex((switchOutTarget as EnemyPokemon).trainerSlot) : 0; - globalScene.phaseManager.prependToPhase( - new SwitchSummonPhase(this.switchType, switchOutTarget.getFieldIndex(), summonIndex, false, false), - MoveEndPhase, + globalScene.phaseManager.prependNewToPhase( + "MoveEndPhase", + "SwitchSummonPhase", + this.switchType, + switchOutTarget.getFieldIndex(), + summonIndex, + false, + false, ); return true; } @@ -7294,13 +7331,13 @@ class ForceSwitchOutHelper { globalScene.clearEnemyHeldItemModifiers(); if (switchOutTarget.hp) { - globalScene.phaseManager.pushPhase(new BattleEndPhase(false)); + globalScene.phaseManager.pushNew("BattleEndPhase", false); if (globalScene.gameMode.hasRandomBiomes || globalScene.isNewBiome()) { - globalScene.phaseManager.pushPhase(new SelectBiomePhase()); + globalScene.phaseManager.pushNew("SelectBiomePhase"); } - globalScene.phaseManager.pushPhase(new NewBattlePhase()); + globalScene.phaseManager.pushNew("NewBattlePhase"); } } } diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index 70fceb17c49..28b8c6acd41 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -26,10 +26,6 @@ import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; import { MoveId } from "#enums/move-id"; -import { MoveEffectPhase } from "#app/phases/move-effect-phase"; -import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; -import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; -import { CommonAnimPhase } from "#app/phases/common-anim-phase"; export enum ArenaTagSide { BOTH, @@ -568,9 +564,7 @@ class WishTag extends ArenaTag { const target = globalScene.getField()[this.battlerIndex]; if (target?.isActive(true)) { globalScene.phaseManager.queueMessage(this.triggerMessage); - globalScene.phaseManager.unshiftPhase( - new PokemonHealPhase(target.getBattlerIndex(), this.healHp, null, true, false), - ); + globalScene.phaseManager.unshiftNew("PokemonHealPhase", target.getBattlerIndex(), this.healHp, null, true, false); } } } @@ -893,8 +887,13 @@ export class DelayedAttackTag extends ArenaTag { const ret = super.lapse(arena); if (!ret) { - globalScene.phaseManager.unshiftPhase( - new MoveEffectPhase(this.sourceId!, [this.targetIndex], allMoves[this.sourceMove!], false, true), + globalScene.phaseManager.unshiftNew( + "MoveEffectPhase", + this.sourceId!, + [this.targetIndex], + allMoves[this.sourceMove!], + false, + true, ); // TODO: are those bangs correct? } @@ -1028,19 +1027,18 @@ class StickyWebTag extends ArenaTrapTag { }), ); const stages = new NumberHolder(-1); - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase( - pokemon.getBattlerIndex(), - false, - [Stat.SPD], - stages.value, - true, - false, - true, - null, - false, - true, - ), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + pokemon.getBattlerIndex(), + false, + [Stat.SPD], + stages.value, + true, + false, + true, + null, + false, + true, ); return true; } @@ -1138,26 +1136,26 @@ class TailwindTag extends ArenaTag { const source = globalScene.getPokemonById(this.sourceId!); //TODO: this bang is questionable! const party = (source?.isPlayer() ? globalScene.getPlayerField() : globalScene.getEnemyField()) ?? []; + const phaseManager = globalScene.phaseManager; for (const pokemon of party) { // Apply the CHARGED tag to party members with the WIND_POWER ability if (pokemon.hasAbility(AbilityId.WIND_POWER) && !pokemon.getTag(BattlerTagType.CHARGED)) { pokemon.addTag(BattlerTagType.CHARGED); - globalScene.phaseManager.queueMessage( + phaseManager.queueMessage( i18next.t("abilityTriggers:windPowerCharged", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: this.getMoveName(), }), ); } + // Raise attack by one stage if party member has WIND_RIDER ability // TODO: Ability displays should be handled by the ability if (pokemon.hasAbility(AbilityId.WIND_RIDER)) { - globalScene.phaseManager.queueAbilityDisplay(pokemon, false, true); - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(pokemon.getBattlerIndex(), true, [Stat.ATK], 1, true), - ); - globalScene.phaseManager.queueAbilityDisplay(pokemon, false, false); + phaseManager.queueAbilityDisplay(pokemon, false, true); + phaseManager.unshiftNew("StatStageChangePhase", pokemon.getBattlerIndex(), true, [Stat.ATK], 1, true); + phaseManager.queueAbilityDisplay(pokemon, false, false); } } } @@ -1319,8 +1317,11 @@ class FireGrassPledgeTag extends ArenaTag { }), ); // TODO: Replace this with a proper animation - globalScene.phaseManager.unshiftPhase( - new CommonAnimPhase(pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.MAGMA_STORM), + globalScene.phaseManager.unshiftNew( + "CommonAnimPhase", + pokemon.getBattlerIndex(), + pokemon.getBattlerIndex(), + CommonAnim.MAGMA_STORM, ); pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 8), { result: HitResult.INDIRECT }); }); diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index d0b4620d8eb..d4f62237446 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -27,12 +27,9 @@ import { PokemonType } from "#enums/pokemon-type"; import type Pokemon from "#app/field/pokemon"; import { HitResult, MoveResult } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; -import { CommonAnimPhase } from "#app/phases/common-anim-phase"; import type { MoveEffectPhase } from "#app/phases/move-effect-phase"; -import { MovePhase } from "#app/phases/move-phase"; -import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; +import type { MovePhase } from "#app/phases/move-phase"; import type { StatStageChangeCallback } from "#app/phases/stat-stage-change-phase"; -import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import i18next from "#app/plugins/i18n"; import { BooleanHolder, getFrameMs, NumberHolder, toDmgValue } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; @@ -560,7 +557,7 @@ export class ShellTrapTag extends BattlerTag { // Only shift MovePhase timing if it's not already next up if (shellTrapPhaseIndex !== -1 && shellTrapPhaseIndex !== firstMovePhaseIndex) { const shellTrapMovePhase = globalScene.phaseManager.phaseQueue.splice(shellTrapPhaseIndex, 1)[0]; - globalScene.phaseManager.prependToPhase(shellTrapMovePhase, MovePhase); + globalScene.phaseManager.prependToPhase(shellTrapMovePhase, "MovePhase"); } this.activated = true; @@ -719,9 +716,7 @@ export class ConfusedTag extends BattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - globalScene.phaseManager.unshiftPhase( - new CommonAnimPhase(pokemon.getBattlerIndex(), undefined, CommonAnim.CONFUSION), - ); + globalScene.phaseManager.unshiftNew("CommonAnimPhase", pokemon.getBattlerIndex(), undefined, CommonAnim.CONFUSION); globalScene.phaseManager.queueMessage( i18next.t("battlerTags:confusedOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), @@ -756,14 +751,14 @@ export class ConfusedTag extends BattlerTag { return false; } - globalScene.phaseManager.queueMessage( + const phaseManager = globalScene.phaseManager; + + phaseManager.queueMessage( i18next.t("battlerTags:confusedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), ); - globalScene.phaseManager.unshiftPhase( - new CommonAnimPhase(pokemon.getBattlerIndex(), undefined, CommonAnim.CONFUSION), - ); + phaseManager.unshiftNew("CommonAnimPhase", pokemon.getBattlerIndex(), undefined, CommonAnim.CONFUSION); // 1/3 chance of hitting self with a 40 base power move if (pokemon.randBattleSeedInt(3) === 0 || Overrides.CONFUSION_ACTIVATION_OVERRIDE === true) { @@ -773,9 +768,9 @@ export class ConfusedTag extends BattlerTag { ((((2 * pokemon.level) / 5 + 2) * 40 * atk) / def / 50 + 2) * (pokemon.randBattleSeedIntRange(85, 100) / 100), ); // Intentionally don't increment rage fist's hitCount - globalScene.phaseManager.queueMessage(i18next.t("battlerTags:confusedLapseHurtItself")); + phaseManager.queueMessage(i18next.t("battlerTags:confusedLapseHurtItself")); pokemon.damageAndUpdate(damage, { result: HitResult.CONFUSION }); - (globalScene.phaseManager.getCurrentPhase() as MovePhase).cancel(); + (phaseManager.getCurrentPhase() as MovePhase).cancel(); } return true; @@ -881,24 +876,24 @@ export class InfatuatedTag extends BattlerTag { lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { const ret = lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType); + const phaseManager = globalScene.phaseManager; + if (ret) { - globalScene.phaseManager.queueMessage( + phaseManager.queueMessage( i18next.t("battlerTags:infatuatedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), sourcePokemonName: getPokemonNameWithAffix(globalScene.getPokemonById(this.sourceId!) ?? undefined), // TODO: is that bang correct? }), ); - globalScene.phaseManager.unshiftPhase( - new CommonAnimPhase(pokemon.getBattlerIndex(), undefined, CommonAnim.ATTRACT), - ); + phaseManager.unshiftNew("CommonAnimPhase", pokemon.getBattlerIndex(), undefined, CommonAnim.ATTRACT); if (pokemon.randBattleSeedInt(2)) { - globalScene.phaseManager.queueMessage( + phaseManager.queueMessage( i18next.t("battlerTags:infatuatedLapseImmobilize", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), ); - (globalScene.phaseManager.getCurrentPhase() as MovePhase).cancel(); + (phaseManager.getCurrentPhase() as MovePhase).cancel(); } } @@ -965,26 +960,28 @@ export class SeedTag extends BattlerTag { applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); if (!cancelled.value) { - globalScene.phaseManager.unshiftPhase( - new CommonAnimPhase(source.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.LEECH_SEED), + globalScene.phaseManager.unshiftNew( + "CommonAnimPhase", + source.getBattlerIndex(), + pokemon.getBattlerIndex(), + CommonAnim.LEECH_SEED, ); const damage = pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 8), { result: HitResult.INDIRECT }); const reverseDrain = pokemon.hasAbilityWithAttr(ReverseDrainAbAttr, false); - globalScene.phaseManager.unshiftPhase( - new PokemonHealPhase( - source.getBattlerIndex(), - !reverseDrain ? damage : damage * -1, - !reverseDrain - ? i18next.t("battlerTags:seededLapse", { - pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - }) - : i18next.t("battlerTags:seededLapseShed", { - pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - }), - false, - true, - ), + globalScene.phaseManager.unshiftNew( + "PokemonHealPhase", + source.getBattlerIndex(), + !reverseDrain ? damage : damage * -1, + !reverseDrain + ? i18next.t("battlerTags:seededLapse", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + }) + : i18next.t("battlerTags:seededLapseShed", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + }), + false, + true, ); } } @@ -1039,9 +1036,9 @@ export class PowderTag extends BattlerTag { movePhase.fail(); movePhase.showMoveText(); - globalScene.phaseManager.unshiftPhase( - new CommonAnimPhase(pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.POWDER), - ); + const idx = pokemon.getBattlerIndex(); + + globalScene.phaseManager.unshiftNew("CommonAnimPhase", idx, idx, CommonAnim.POWDER); const cancelDamage = new BooleanHolder(false); applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelDamage); @@ -1088,14 +1085,13 @@ export class NightmareTag extends BattlerTag { const ret = lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType); if (ret) { - globalScene.phaseManager.queueMessage( + const phaseManager = globalScene.phaseManager; + phaseManager.queueMessage( i18next.t("battlerTags:nightmareLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), ); - globalScene.phaseManager.unshiftPhase( - new CommonAnimPhase(pokemon.getBattlerIndex(), undefined, CommonAnim.CURSE), - ); // TODO: Update animation type + phaseManager.unshiftNew("CommonAnimPhase", pokemon.getBattlerIndex(), undefined, CommonAnim.CURSE); // TODO: Update animation type const cancelled = new BooleanHolder(false); applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); @@ -1194,7 +1190,7 @@ export class EncoreTag extends MoveRestrictionBattlerTag { const lastMove = pokemon.getLastXMoves(1)[0]; globalScene.phaseManager.tryReplacePhase( m => m.is("MovePhase") && m.pokemon === pokemon, - new MovePhase(pokemon, lastMove.targets ?? [], movesetMove), + globalScene.phaseManager.create("MovePhase", pokemon, lastMove.targets ?? [], movesetMove), ); } } @@ -1276,15 +1272,14 @@ export class IngrainTag extends TrappedTag { const ret = lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType); if (ret) { - globalScene.phaseManager.unshiftPhase( - new PokemonHealPhase( - pokemon.getBattlerIndex(), - toDmgValue(pokemon.getMaxHp() / 16), - i18next.t("battlerTags:ingrainLapse", { - pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - }), - true, - ), + globalScene.phaseManager.unshiftNew( + "PokemonHealPhase", + pokemon.getBattlerIndex(), + toDmgValue(pokemon.getMaxHp() / 16), + i18next.t("battlerTags:ingrainLapse", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + }), + true, ); } @@ -1315,8 +1310,12 @@ export class OctolockTag extends TrappedTag { const shouldLapse = lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType); if (shouldLapse) { - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(pokemon.getBattlerIndex(), false, [Stat.DEF, Stat.SPDEF], -1), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + pokemon.getBattlerIndex(), + false, + [Stat.DEF, Stat.SPDEF], + -1, ); return true; } @@ -1344,16 +1343,15 @@ export class AquaRingTag extends BattlerTag { const ret = lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType); if (ret) { - globalScene.phaseManager.unshiftPhase( - new PokemonHealPhase( - pokemon.getBattlerIndex(), - toDmgValue(pokemon.getMaxHp() / 16), - i18next.t("battlerTags:aquaRingLapse", { - moveName: this.getMoveName(), - pokemonName: getPokemonNameWithAffix(pokemon), - }), - true, - ), + globalScene.phaseManager.unshiftNew( + "PokemonHealPhase", + pokemon.getBattlerIndex(), + toDmgValue(pokemon.getMaxHp() / 16), + i18next.t("battlerTags:aquaRingLapse", { + moveName: this.getMoveName(), + pokemonName: getPokemonNameWithAffix(pokemon), + }), + true, ); } @@ -1445,13 +1443,14 @@ export abstract class DamagingTrapTag extends TrappedTag { const ret = super.lapse(pokemon, lapseType); if (ret) { - globalScene.phaseManager.queueMessage( + const phaseManager = globalScene.phaseManager; + phaseManager.queueMessage( i18next.t("battlerTags:damagingTrapLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: this.getMoveName(), }), ); - globalScene.phaseManager.unshiftPhase(new CommonAnimPhase(pokemon.getBattlerIndex(), undefined, this.commonAnim)); + phaseManager.unshiftNew("CommonAnimPhase", pokemon.getBattlerIndex(), undefined, this.commonAnim); const cancelled = new BooleanHolder(false); applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); @@ -1764,8 +1763,12 @@ export class ContactStatStageChangeProtectedTag extends DamageProtectedTag { * @param user - The pokemon that is being attacked and has the tag */ override onContact(attacker: Pokemon, _user: Pokemon): void { - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(attacker.getBattlerIndex(), false, [this.stat], this.levels), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + attacker.getBattlerIndex(), + false, + [this.stat], + this.levels, ); } } @@ -2281,8 +2284,11 @@ export class SaltCuredTag extends BattlerTag { const ret = lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType); if (ret) { - globalScene.phaseManager.unshiftPhase( - new CommonAnimPhase(pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.SALT_CURE), + globalScene.phaseManager.unshiftNew( + "CommonAnimPhase", + pokemon.getBattlerIndex(), + pokemon.getBattlerIndex(), + CommonAnim.SALT_CURE, ); const cancelled = new BooleanHolder(false); @@ -2332,8 +2338,11 @@ export class CursedTag extends BattlerTag { const ret = lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType); if (ret) { - globalScene.phaseManager.unshiftPhase( - new CommonAnimPhase(pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.SALT_CURE), + globalScene.phaseManager.unshiftNew( + "CommonAnimPhase", + pokemon.getBattlerIndex(), + pokemon.getBattlerIndex(), + CommonAnim.SALT_CURE, ); const cancelled = new BooleanHolder(false); @@ -2509,13 +2518,12 @@ export class CommandedTag extends BattlerTag { /** Caches the Tatsugiri's form key and sharply boosts the tagged Pokemon's stats */ override onAdd(pokemon: Pokemon): void { this._tatsugiriFormKey = this.getSourcePokemon()?.getFormKey() ?? "curly"; - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase( - pokemon.getBattlerIndex(), - true, - [Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD], - 2, - ), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + pokemon.getBattlerIndex(), + true, + [Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD], + 2, ); } @@ -2592,17 +2600,16 @@ export class StockpilingTag extends BattlerTag { ); // Attempt to increase DEF and SPDEF by one stage, keeping track of successful changes. - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase( - pokemon.getBattlerIndex(), - true, - [Stat.SPDEF, Stat.DEF], - 1, - true, - false, - true, - this.onStatStagesChanged, - ), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + pokemon.getBattlerIndex(), + true, + [Stat.SPDEF, Stat.DEF], + 1, + true, + false, + true, + this.onStatStagesChanged, ); } } @@ -2620,14 +2627,28 @@ export class StockpilingTag extends BattlerTag { const spDefChange = this.statChangeCounts[Stat.SPDEF]; if (defChange) { - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(pokemon.getBattlerIndex(), true, [Stat.DEF], -defChange, true, false, true), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + pokemon.getBattlerIndex(), + true, + [Stat.DEF], + -defChange, + true, + false, + true, ); } if (spDefChange) { - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(pokemon.getBattlerIndex(), true, [Stat.SPDEF], -spDefChange, true, false, true), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + pokemon.getBattlerIndex(), + true, + [Stat.SPDEF], + -spDefChange, + true, + false, + true, ); } } @@ -2667,9 +2688,7 @@ export class GulpMissileTag extends BattlerTag { } if (this.tagType === BattlerTagType.GULP_MISSILE_ARROKUDA) { - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(attacker.getBattlerIndex(), false, [Stat.DEF], -1), - ); + globalScene.phaseManager.unshiftNew("StatStageChangePhase", attacker.getBattlerIndex(), false, [Stat.DEF], -1); } else { attacker.trySetStatus(StatusEffect.PARALYSIS, true, pokemon); } @@ -3290,8 +3309,15 @@ export class SyrupBombTag extends BattlerTag { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), ); - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(pokemon.getBattlerIndex(), true, [Stat.SPD], -1, true, false, true), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + pokemon.getBattlerIndex(), + true, + [Stat.SPD], + -1, + true, + false, + true, ); return --this.turnCount > 0; } diff --git a/src/data/berry.ts b/src/data/berry.ts index defc9b85541..52ea1c44391 100644 --- a/src/data/berry.ts +++ b/src/data/berry.ts @@ -8,8 +8,6 @@ import i18next from "i18next"; import { BattlerTagType } from "#enums/battler-tag-type"; import { BerryType } from "#enums/berry-type"; import { Stat, type BattleStat } from "#app/enums/stat"; -import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; -import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { globalScene } from "#app/global-scene"; export function getBerryName(berryType: BerryType): string { @@ -75,16 +73,15 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { { const hpHealed = new NumberHolder(toDmgValue(consumer.getMaxHp() / 4)); applyAbAttrs(DoubleBerryEffectAbAttr, consumer, null, false, hpHealed); - globalScene.phaseManager.unshiftPhase( - new PokemonHealPhase( - consumer.getBattlerIndex(), - hpHealed.value, - i18next.t("battle:hpHealBerry", { - pokemonNameWithAffix: getPokemonNameWithAffix(consumer), - berryName: getBerryName(berryType), - }), - true, - ), + globalScene.phaseManager.unshiftNew( + "PokemonHealPhase", + consumer.getBattlerIndex(), + hpHealed.value, + i18next.t("battle:hpHealBerry", { + pokemonNameWithAffix: getPokemonNameWithAffix(consumer), + berryName: getBerryName(berryType), + }), + true, ); } break; @@ -109,8 +106,12 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { const stat: BattleStat = berryType - BerryType.ENIGMA; const statStages = new NumberHolder(1); applyAbAttrs(DoubleBerryEffectAbAttr, consumer, null, false, statStages); - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(consumer.getBattlerIndex(), true, [stat], statStages.value), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + consumer.getBattlerIndex(), + true, + [stat], + statStages.value, ); } break; @@ -126,8 +127,12 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { const randStat = randSeedInt(Stat.SPD, Stat.ATK); const stages = new NumberHolder(2); applyAbAttrs(DoubleBerryEffectAbAttr, consumer, null, false, stages); - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(consumer.getBattlerIndex(), true, [randStat], stages.value), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + consumer.getBattlerIndex(), + true, + [randStat], + stages.value, ); } break; diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index d44ecbed4cf..976c0cd7d97 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -1890,8 +1890,8 @@ export class HealAttr extends MoveEffectAttr { * This heals the target and shows the appropriate message. */ addHealPhase(target: Pokemon, healRatio: number) { - globalScene.phaseManager.unshiftPhase(new PokemonHealPhase(target.getBattlerIndex(), - toDmgValue(target.getMaxHp() * healRatio), i18next.t("moveTriggers:healHp", { pokemonName: getPokemonNameWithAffix(target) }), true, !this.showAnim)); + globalScene.phaseManager.unshiftNew("PokemonHealPhase", target.getBattlerIndex(), + toDmgValue(target.getMaxHp() * healRatio), i18next.t("moveTriggers:healHp", { pokemonName: getPokemonNameWithAffix(target) }), true, !this.showAnim); } getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { @@ -2021,8 +2021,10 @@ export class SacrificialFullRestoreAttr extends SacrificialAttr { const party = user.isPlayer() ? globalScene.getPlayerParty() : globalScene.getEnemyParty(); const maxPartyMemberHp = party.map(p => p.getMaxHp()).reduce((maxHp: number, hp: number) => Math.max(hp, maxHp), 0); - globalScene.phaseManager.pushPhase( - new PokemonHealPhase( + const pm = globalScene.phaseManager; + + pm.pushPhase( + pm.create("PokemonHealPhase", user.getBattlerIndex(), maxPartyMemberHp, i18next.t(this.moveMessage, { pokemonName: getPokemonNameWithAffix(user) }), @@ -2233,7 +2235,7 @@ export class HitHealAttr extends MoveEffectAttr { message = ""; } } - globalScene.phaseManager.unshiftPhase(new PokemonHealPhase(user.getBattlerIndex(), healAmount, message, false, true)); + globalScene.phaseManager.unshiftNew("PokemonHealPhase", user.getBattlerIndex(), healAmount, message, false, true); return true; } @@ -3067,7 +3069,7 @@ export class DelayedAttackAttr extends OverrideMoveEffectAttr { if (!virtual) { overridden.value = true; - globalScene.phaseManager.unshiftPhase(new MoveAnimPhase(new MoveChargeAnim(this.chargeAnim, move.id, user))); + globalScene.phaseManager.unshiftNew("MoveAnimPhase", new MoveChargeAnim(this.chargeAnim, move.id, user)); globalScene.phaseManager.queueMessage(this.chargeText.replace("{TARGET}", getPokemonNameWithAffix(target)).replace("{USER}", getPokemonNameWithAffix(user))); user.pushMoveHistory({ move: move.id, targets: [ target.getBattlerIndex() ], result: MoveResult.OTHER }); const side = target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; @@ -3125,7 +3127,7 @@ export class AwaitCombinedPledgeAttr extends OverrideMoveEffectAttr { const allyMovePhaseIndex = globalScene.phaseManager.phaseQueue.indexOf(allyMovePhase); const firstMovePhaseIndex = globalScene.phaseManager.phaseQueue.findIndex((phase) => phase.is("MovePhase")); if (allyMovePhaseIndex !== firstMovePhaseIndex) { - globalScene.phaseManager.prependToPhase(globalScene.phaseManager.phaseQueue.splice(allyMovePhaseIndex, 1)[0], MovePhase); + globalScene.phaseManager.prependToPhase(globalScene.phaseManager.phaseQueue.splice(allyMovePhaseIndex, 1)[0], "MovePhase"); } overridden.value = true; @@ -3207,7 +3209,7 @@ export class StatStageChangeAttr extends MoveEffectAttr { const moveChance = this.getMoveChance(user, target, move, this.selfTarget, true); if (moveChance < 0 || moveChance === 100 || user.randBattleSeedInt(100) < moveChance) { const stages = this.getLevels(user); - globalScene.phaseManager.unshiftPhase(new StatStageChangePhase((this.selfTarget ? user : target).getBattlerIndex(), this.selfTarget, this.stats, stages, this.showMessage)); + globalScene.phaseManager.unshiftNew("StatStageChangePhase", (this.selfTarget ? user : target).getBattlerIndex(), this.selfTarget, this.stats, stages, this.showMessage); return true; } @@ -3432,7 +3434,7 @@ export class AcupressureStatStageChangeAttr extends MoveEffectAttr { const randStats = BATTLE_STATS.filter((s) => target.getStatStage(s) < 6); if (randStats.length > 0) { const boostStat = [ randStats[user.randBattleSeedInt(randStats.length)] ]; - globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(target.getBattlerIndex(), this.selfTarget, boostStat, 2)); + globalScene.phaseManager.unshiftNew("StatStageChangePhase", target.getBattlerIndex(), this.selfTarget, boostStat, 2); return true; } return false; @@ -3510,7 +3512,7 @@ export class OrderUpStatBoostAttr extends MoveEffectAttr { break; } - globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(user.getBattlerIndex(), this.selfTarget, [ increasedStat ], 1)); + globalScene.phaseManager.unshiftNew("StatStageChangePhase", user.getBattlerIndex(), this.selfTarget, [ increasedStat ], 1); return true; } } @@ -4227,8 +4229,8 @@ export class PresentPowerAttr extends VariablePowerAttr { // If this move is multi-hit, disable all other hits user.turnData.hitCount = 1; user.turnData.hitsLeft = 1; - globalScene.phaseManager.unshiftPhase(new PokemonHealPhase(target.getBattlerIndex(), - toDmgValue(target.getMaxHp() / 4), i18next.t("moveTriggers:regainedHealth", { pokemonName: getPokemonNameWithAffix(target) }), true)); + globalScene.phaseManager.unshiftNew("PokemonHealPhase", target.getBattlerIndex(), + toDmgValue(target.getMaxHp() / 4), i18next.t("moveTriggers:regainedHealth", { pokemonName: getPokemonNameWithAffix(target) }), true); } return true; @@ -4488,7 +4490,7 @@ export class CueNextRoundAttr extends MoveEffectAttr { const nextRoundIndex = globalScene.phaseManager.phaseQueue.indexOf(nextRoundPhase); const nextMoveIndex = globalScene.phaseManager.phaseQueue.findIndex(phase => phase.is("MovePhase")); if (nextRoundIndex !== nextMoveIndex) { - globalScene.phaseManager.prependToPhase(globalScene.phaseManager.phaseQueue.splice(nextRoundIndex, 1)[0], MovePhase); + globalScene.phaseManager.prependToPhase(globalScene.phaseManager.phaseQueue.splice(nextRoundIndex, 1)[0], "MovePhase"); } // Mark the corresponding Pokemon as having "joined the Round" (for doubling power later) @@ -4546,7 +4548,7 @@ export class SpectralThiefAttr extends StatChangeBeforeDmgCalcAttr { */ const availableToSteal = Math.min(statStageValueTarget, 6 - statStageValueUser); - globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(user.getBattlerIndex(), this.selfTarget, [ s ], availableToSteal)); + globalScene.phaseManager.unshiftNew("StatStageChangePhase", user.getBattlerIndex(), this.selfTarget, [ s ], availableToSteal); target.setStatStage(s, statStageValueTarget - availableToSteal); } } @@ -5680,8 +5682,8 @@ export class CurseAttr extends MoveEffectAttr { target.addTag(BattlerTagType.CURSED, 0, move.id, user.id); return true; } else { - globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(user.getBattlerIndex(), true, [ Stat.ATK, Stat.DEF ], 1)); - globalScene.phaseManager.unshiftPhase(new StatStageChangePhase(user.getBattlerIndex(), true, [ Stat.SPD ], -1)); + globalScene.phaseManager.unshiftNew("StatStageChangePhase", user.getBattlerIndex(), true, [ Stat.ATK, Stat.DEF ], 1); + globalScene.phaseManager.unshiftNew("StatStageChangePhase", user.getBattlerIndex(), true, [ Stat.SPD ], -1); return true; } } @@ -6154,7 +6156,7 @@ export class RevivalBlessingAttr extends MoveEffectAttr { override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { // If user is player, checks if the user has fainted pokemon if (user.isPlayer()) { - globalScene.phaseManager.unshiftPhase(new RevivalBlessingPhase(user)); + globalScene.phaseManager.unshiftNew("RevivalBlessingPhase", user); return true; } else if (user.isEnemy() && user.hasTrainer() && globalScene.getEnemyParty().findIndex((p) => p.isFainted() && !p.isBoss()) > -1) { // If used by an enemy trainer with at least one fainted non-boss Pokemon, this @@ -6177,7 +6179,7 @@ export class RevivalBlessingAttr extends MoveEffectAttr { if (user.fieldPosition === FieldPosition.CENTER) { user.setFieldPosition(FieldPosition.LEFT); } - globalScene.phaseManager.unshiftPhase(new SwitchSummonPhase(SwitchType.SWITCH, allyPokemon.getFieldIndex(), slotIndex, false, false)); + globalScene.phaseManager.unshiftNew("SwitchSummonPhase", SwitchType.SWITCH, allyPokemon.getFieldIndex(), slotIndex, false, false); } } return true; @@ -6255,26 +6257,23 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { if (this.switchType === SwitchType.FORCE_SWITCH) { switchOutTarget.leaveField(true); const slotIndex = eligibleNewIndices[user.randBattleSeedInt(eligibleNewIndices.length)]; - globalScene.phaseManager.prependToPhase( - new SwitchSummonPhase( - this.switchType, - switchOutTarget.getFieldIndex(), - slotIndex, - false, - true - ), - MoveEndPhase + globalScene.phaseManager.prependNewToPhase( + "MoveEndPhase", + "SwitchSummonPhase", + this.switchType, + switchOutTarget.getFieldIndex(), + slotIndex, + false, + true ); } else { switchOutTarget.leaveField(this.switchType === SwitchType.SWITCH); - globalScene.phaseManager.prependToPhase( - new SwitchPhase( + globalScene.phaseManager.prependNewToPhase("MoveEndPhase", + "SwitchPhase", this.switchType, switchOutTarget.getFieldIndex(), true, true - ), - MoveEndPhase ); return true; } @@ -6298,27 +6297,23 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { if (this.switchType === SwitchType.FORCE_SWITCH) { switchOutTarget.leaveField(true); const slotIndex = eligibleNewIndices[user.randBattleSeedInt(eligibleNewIndices.length)]; - globalScene.phaseManager.prependToPhase( - new SwitchSummonPhase( + globalScene.phaseManager.prependNewToPhase("MoveEndPhase", + "SwitchSummonPhase", this.switchType, switchOutTarget.getFieldIndex(), slotIndex, false, false - ), - MoveEndPhase ); } else { switchOutTarget.leaveField(this.switchType === SwitchType.SWITCH); - globalScene.phaseManager.prependToPhase( - new SwitchSummonPhase( - this.switchType, - switchOutTarget.getFieldIndex(), - (globalScene.currentBattle.trainer ? globalScene.currentBattle.trainer.getNextSummonIndex((switchOutTarget as EnemyPokemon).trainerSlot) : 0), - false, - false - ), - MoveEndPhase + globalScene.phaseManager.prependNewToPhase("MoveEndPhase", + "SwitchSummonPhase", + this.switchType, + switchOutTarget.getFieldIndex(), + (globalScene.currentBattle.trainer ? globalScene.currentBattle.trainer.getNextSummonIndex((switchOutTarget as EnemyPokemon).trainerSlot) : 0), + false, + false ); } } @@ -6351,13 +6346,13 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { globalScene.clearEnemyHeldItemModifiers(switchOutTarget); if (!allyPokemon?.isActive(true) && switchOutTarget.hp) { - globalScene.phaseManager.pushPhase(new BattleEndPhase(false)); + globalScene.phaseManager.pushNew("BattleEndPhase", false); if (globalScene.gameMode.hasRandomBiomes || globalScene.isNewBiome()) { - globalScene.phaseManager.pushPhase(new SelectBiomePhase()); + globalScene.phaseManager.pushNew("SelectBiomePhase"); } - globalScene.phaseManager.pushPhase(new NewBattlePhase()); + globalScene.phaseManager.pushNew("NewBattlePhase"); } } @@ -6733,8 +6728,8 @@ class CallMoveAttr extends OverrideMoveEffectAttr { ? moveTargets.targets : [ this.hasTarget ? target.getBattlerIndex() : moveTargets.targets[user.randBattleSeedInt(moveTargets.targets.length)] ]; // account for Mirror Move having a target already user.getMoveQueue().push({ move: move.id, targets: targets, virtual: true, ignorePP: true }); - globalScene.phaseManager.unshiftPhase(new LoadMoveAnimPhase(move.id)); - globalScene.phaseManager.unshiftPhase(new MovePhase(user, targets, new PokemonMove(move.id, 0, 0, true), true, true)); + globalScene.phaseManager.unshiftNew("LoadMoveAnimPhase", move.id); + globalScene.phaseManager.unshiftNew("MovePhase", user, targets, new PokemonMove(move.id, 0, 0, true), true, true); return true; } } @@ -6962,8 +6957,8 @@ export class NaturePowerAttr extends OverrideMoveEffectAttr { } user.getMoveQueue().push({ move: moveId, targets: [ target.getBattlerIndex() ], ignorePP: true }); - globalScene.phaseManager.unshiftPhase(new LoadMoveAnimPhase(moveId)); - globalScene.phaseManager.unshiftPhase(new MovePhase(user, [ target.getBattlerIndex() ], new PokemonMove(moveId, 0, 0, true), true)); + globalScene.phaseManager.unshiftNew("LoadMoveAnimPhase", moveId); + globalScene.phaseManager.unshiftNew("MovePhase", user, [ target.getBattlerIndex() ], new PokemonMove(moveId, 0, 0, true), true); return true; } } @@ -7050,7 +7045,7 @@ export class RepeatMoveAttr extends MoveEffectAttr { })); target.getMoveQueue().unshift({ move: lastMove.move, targets: moveTargets, ignorePP: false }); target.turnData.extraTurns++; - globalScene.phaseManager.appendToPhase(new MovePhase(target, moveTargets, movesetMove), MoveEndPhase); + globalScene.phaseManager.appendNewToPhase("MoveEndPhase", "MovePhase", target, moveTargets, movesetMove); return true; } @@ -7550,7 +7545,7 @@ export class TransformAttr extends MoveEffectAttr { return false; } - globalScene.phaseManager.unshiftPhase(new PokemonTransformPhase(user.getBattlerIndex(), target.getBattlerIndex())); + globalScene.phaseManager.unshiftNew("PokemonTransformPhase", user.getBattlerIndex(), target.getBattlerIndex()); globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:transformedIntoTarget", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) })); @@ -7852,7 +7847,7 @@ export class AfterYouAttr extends MoveEffectAttr { //Will find next acting phase of the targeted pokémon, delete it and queue it next on successful delete. const nextAttackPhase = globalScene.phaseManager.findPhase((phase) => phase.pokemon === target); if (nextAttackPhase && globalScene.phaseManager.tryRemovePhase((phase: MovePhase) => phase.pokemon === target)) { - globalScene.phaseManager.prependToPhase(new MovePhase(target, [ ...nextAttackPhase.targets ], nextAttackPhase.move), MovePhase); + globalScene.phaseManager.prependNewToPhase("MovePhase", "MovePhase", target, [ ...nextAttackPhase.targets ], nextAttackPhase.move); } return true; @@ -7889,7 +7884,7 @@ export class ForceLastAttr extends MoveEffectAttr { globalScene.phaseManager.phaseQueue.splice( globalScene.phaseManager.phaseQueue.indexOf(prependPhase), 0, - new MovePhase(target, [ ...targetMovePhase.targets ], targetMovePhase.move, false, false, false, true) + globalScene.phaseManager.create("MovePhase", target, [ ...targetMovePhase.targets ], targetMovePhase.move, false, false, false, true) ); } } diff --git a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts index 5f69090064f..11081892205 100644 --- a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts +++ b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts @@ -19,7 +19,6 @@ import i18next from "i18next"; import type { IEggOptions } from "#app/data/egg"; import { EggSourceType } from "#enums/egg-source-types"; import { EggTier } from "#enums/egg-type"; -import { PartyHealPhase } from "#app/phases/party-heal-phase"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { modifierTypes } from "#app/modifier/modifier-type"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; @@ -182,7 +181,7 @@ export const ATrainersTestEncounter: MysteryEncounter = MysteryEncounterBuilder. async () => { const encounter = globalScene.currentBattle.mysteryEncounter!; // Full heal party - globalScene.phaseManager.unshiftPhase(new PartyHealPhase(true)); + globalScene.phaseManager.unshiftNew("PartyHealPhase", true); const eggOptions: IEggOptions = { pulled: false, diff --git a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts index e23b5024599..82fbc0efd69 100644 --- a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts +++ b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts @@ -35,7 +35,6 @@ import { TrainerSlot } from "#enums/trainer-slot"; import { PokeballType } from "#enums/pokeball"; import type HeldModifierConfig from "#app/@types/held-modifier-config"; import type { BerryType } from "#enums/berry-type"; -import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { Stat } from "#enums/stat"; import i18next from "i18next"; @@ -237,8 +236,12 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = MysteryEncounterBuilde tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { queueEncounterMessage(`${namespace}:option.1.boss_enraged`); - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(pokemon.getBattlerIndex(), true, statChangesForBattle, 1), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + pokemon.getBattlerIndex(), + true, + statChangesForBattle, + 1, ); }, }, diff --git a/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts b/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts index 87cd8f207c4..cdb98c56ed1 100644 --- a/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts +++ b/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts @@ -22,7 +22,6 @@ import { getPokemonSpecies } from "#app/data/pokemon-species"; import { speciesStarterCosts } from "#app/data/balance/starters"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; -import { ModifierRewardPhase } from "#app/phases/modifier-reward-phase"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import i18next from "i18next"; @@ -137,7 +136,7 @@ export const AnOfferYouCantRefuseEncounter: MysteryEncounter = MysteryEncounterB }) .withOptionPhase(async () => { // Give the player a Shiny Charm - globalScene.phaseManager.unshiftPhase(new ModifierRewardPhase(modifierTypes.SHINY_CHARM)); + globalScene.phaseManager.unshiftNew("ModifierRewardPhase", modifierTypes.SHINY_CHARM); leaveEncounterWithoutBattle(true); }) .build(), diff --git a/src/data/mystery-encounters/encounters/berries-abound-encounter.ts b/src/data/mystery-encounters/encounters/berries-abound-encounter.ts index 3de16c7086e..65ae3ea6c4f 100644 --- a/src/data/mystery-encounters/encounters/berries-abound-encounter.ts +++ b/src/data/mystery-encounters/encounters/berries-abound-encounter.ts @@ -35,7 +35,6 @@ import { BerryModifier } from "#app/modifier/modifier"; import i18next from "#app/plugins/i18n"; import { BerryType } from "#enums/berry-type"; import { PERMANENT_STATS, Stat } from "#enums/stat"; -import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; /** the i18n namespace for the encounter */ @@ -237,8 +236,12 @@ export const BerriesAboundEncounter: MysteryEncounter = MysteryEncounterBuilder. config.pokemonConfigs![0].tags = [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON]; config.pokemonConfigs![0].mysteryEncounterBattleEffects = (pokemon: Pokemon) => { queueEncounterMessage(`${namespace}:option.2.boss_enraged`); - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(pokemon.getBattlerIndex(), true, statChangesForBattle, 1), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + pokemon.getBattlerIndex(), + true, + statChangesForBattle, + 1, ); }; setEncounterRewards( diff --git a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts index cd8289163eb..938a136bced 100644 --- a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts +++ b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts @@ -26,7 +26,6 @@ import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { PokemonMove } from "#app/field/pokemon"; import { getEncounterText, showEncounterDialogue } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; -import { LearnMovePhase } from "#app/phases/learn-move-phase"; import { MoveId } from "#enums/move-id"; import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; @@ -766,8 +765,10 @@ function doBugTypeMoveTutor(): Promise { // Option select complete, handle if they are learning a move if (result && result.selectedOptionIndex < moveOptions.length) { - globalScene.phaseManager.unshiftPhase( - new LearnMovePhase(result.selectedPokemonIndex, moveOptions[result.selectedOptionIndex].moveId), + globalScene.phaseManager.unshiftNew( + "LearnMovePhase", + result.selectedPokemonIndex, + moveOptions[result.selectedOptionIndex].moveId, ); } diff --git a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts index 66cd1ae0509..80465e1d20c 100644 --- a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts +++ b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts @@ -26,8 +26,6 @@ import type Pokemon from "#app/field/pokemon"; import { EnemyPokemon, PokemonMove } from "#app/field/pokemon"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { modifierTypes } from "#app/modifier/modifier-type"; -import { LearnMovePhase } from "#app/phases/learn-move-phase"; -import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import PokemonData from "#app/system/pokemon-data"; import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import { BattlerTagType } from "#enums/battler-tag-type"; @@ -176,13 +174,12 @@ export const DancingLessonsEncounter: MysteryEncounter = MysteryEncounterBuilder tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { queueEncounterMessage(`${namespace}:option.1.boss_enraged`); - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase( - pokemon.getBattlerIndex(), - true, - [Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF], - 1, - ), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + pokemon.getBattlerIndex(), + true, + [Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF], + 1, ); }, }, @@ -245,8 +242,10 @@ export const DancingLessonsEncounter: MysteryEncounter = MysteryEncounterBuilder const onPokemonSelected = (pokemon: PlayerPokemon) => { encounter.setDialogueToken("selectedPokemon", pokemon.getNameToRender()); - globalScene.phaseManager.unshiftPhase( - new LearnMovePhase(globalScene.getPlayerParty().indexOf(pokemon), MoveId.REVELATION_DANCE), + globalScene.phaseManager.unshiftNew( + "LearnMovePhase", + globalScene.getPlayerParty().indexOf(pokemon), + MoveId.REVELATION_DANCE, ); // Play animation again to "learn" the dance diff --git a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts index 1385e9c5a75..6474df3570e 100644 --- a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts +++ b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts @@ -16,7 +16,6 @@ import { } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; -import { ModifierRewardPhase } from "#app/phases/modifier-reward-phase"; import type { PokemonHeldItemModifier } from "#app/modifier/modifier"; import { PokemonFormChangeItemModifier } from "#app/modifier/modifier"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; @@ -165,7 +164,7 @@ export const DarkDealEncounter: MysteryEncounter = MysteryEncounterBuilder.withE .withOptionPhase(async () => { // Give the player 5 Rogue Balls const encounter = globalScene.currentBattle.mysteryEncounter!; - globalScene.phaseManager.unshiftPhase(new ModifierRewardPhase(modifierTypes.ROGUE_BALL)); + globalScene.phaseManager.unshiftNew("ModifierRewardPhase", modifierTypes.ROGUE_BALL); // Start encounter with random legendary (7-10 starter strength) that has level additive // If this is a mono-type challenge, always ensure the required type is filtered for diff --git a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts index c321b5f9674..40893d93930 100644 --- a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts +++ b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts @@ -29,7 +29,6 @@ import { } from "#app/modifier/modifier"; import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; import { modifierTypes } from "#app/modifier/modifier-type"; -import { ModifierRewardPhase } from "#app/phases/modifier-reward-phase"; import i18next from "#app/plugins/i18n"; import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import { randSeedItem } from "#app/utils/common"; @@ -65,10 +64,10 @@ const doEventReward = () => { return !(existingCharm && existingCharm.getStackCount() >= existingCharm.getMaxStackCount()); }); if (candidates.length > 0) { - globalScene.phaseManager.unshiftPhase(new ModifierRewardPhase(modifierTypes[randSeedItem(candidates)])); + globalScene.phaseManager.unshiftNew("ModifierRewardPhase", modifierTypes[randSeedItem(candidates)]); } else { // At max stacks, give a Voucher instead - globalScene.phaseManager.unshiftPhase(new ModifierRewardPhase(modifierTypes.VOUCHER)); + globalScene.phaseManager.unshiftNew("ModifierRewardPhase", modifierTypes.VOUCHER); } } }; @@ -181,7 +180,7 @@ export const DelibirdyEncounter: MysteryEncounter = MysteryEncounterBuilder.with ); doEventReward(); } else { - globalScene.phaseManager.unshiftPhase(new ModifierRewardPhase(modifierTypes.AMULET_COIN)); + globalScene.phaseManager.unshiftNew("ModifierRewardPhase", modifierTypes.AMULET_COIN); doEventReward(); } @@ -266,7 +265,7 @@ export const DelibirdyEncounter: MysteryEncounter = MysteryEncounterBuilder.with ); doEventReward(); } else { - globalScene.phaseManager.unshiftPhase(new ModifierRewardPhase(modifierTypes.CANDY_JAR)); + globalScene.phaseManager.unshiftNew("ModifierRewardPhase", modifierTypes.CANDY_JAR); doEventReward(); } } else { @@ -288,7 +287,7 @@ export const DelibirdyEncounter: MysteryEncounter = MysteryEncounterBuilder.with ); doEventReward(); } else { - globalScene.phaseManager.unshiftPhase(new ModifierRewardPhase(modifierTypes.BERRY_POUCH)); + globalScene.phaseManager.unshiftNew("ModifierRewardPhase", modifierTypes.BERRY_POUCH); doEventReward(); } } @@ -372,7 +371,7 @@ export const DelibirdyEncounter: MysteryEncounter = MysteryEncounterBuilder.with ); doEventReward(); } else { - globalScene.phaseManager.unshiftPhase(new ModifierRewardPhase(modifierTypes.HEALING_CHARM)); + globalScene.phaseManager.unshiftNew("ModifierRewardPhase", modifierTypes.HEALING_CHARM); doEventReward(); } diff --git a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts index ced04ce224d..8b0e5a08020 100644 --- a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts +++ b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts @@ -44,7 +44,6 @@ import { EncounterAnim } from "#enums/encounter-anims"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { Stat } from "#enums/stat"; import { Ability } from "#app/data/abilities/ability-class"; import { FIRE_RESISTANT_ABILITIES } from "#app/data/mystery-encounters/requirements/requirement-groups"; @@ -92,8 +91,12 @@ export const FieryFalloutEncounter: MysteryEncounter = MysteryEncounterBuilder.w gender: Gender.MALE, tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(pokemon.getBattlerIndex(), true, [Stat.SPDEF, Stat.SPD], 1), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + pokemon.getBattlerIndex(), + true, + [Stat.SPDEF, Stat.SPD], + 1, ); }, }, @@ -103,8 +106,12 @@ export const FieryFalloutEncounter: MysteryEncounter = MysteryEncounterBuilder.w gender: Gender.FEMALE, tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(pokemon.getBattlerIndex(), true, [Stat.SPDEF, Stat.SPD], 1), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + pokemon.getBattlerIndex(), + true, + [Stat.SPDEF, Stat.SPD], + 1, ); }, }, diff --git a/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts b/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts index 6df8ca8b167..83538e9e0e9 100644 --- a/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts +++ b/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts @@ -32,7 +32,6 @@ import PokemonData from "#app/system/pokemon-data"; import { BattlerTagType } from "#enums/battler-tag-type"; import { queueEncounterMessage } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { randSeedInt } from "#app/utils/common"; -import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; /** the i18n namespace for the encounter */ @@ -76,8 +75,12 @@ export const FightOrFlightEncounter: MysteryEncounter = MysteryEncounterBuilder. queueEncounterMessage(`${namespace}:option.1.stat_boost`); // Randomly boost 1 stat 2 stages // Cannot boost Spd, Acc, or Evasion - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(pokemon.getBattlerIndex(), true, [randSeedInt(4, 1)], 2), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + pokemon.getBattlerIndex(), + true, + [randSeedInt(4, 1)], + 2, ); }, }, diff --git a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts index 42bfe76d98e..a52641f857d 100644 --- a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts +++ b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts @@ -25,9 +25,7 @@ import { getPokemonNameWithAffix } from "#app/messages"; import { PlayerGender } from "#enums/player-gender"; import { getPokeballAtlasKey, getPokeballTintColor } from "#app/data/pokeball"; import { addPokeballOpenParticles } from "#app/field/anims"; -import { ShinySparklePhase } from "#app/phases/shiny-sparkle-phase"; import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms"; -import { PostSummonPhase } from "#app/phases/post-summon-phase"; import { modifierTypes } from "#app/modifier/modifier-type"; import { Nature } from "#enums/nature"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; @@ -411,13 +409,13 @@ function summonPlayerPokemonAnimation(pokemon: PlayerPokemon): Promise { pokemon.resetSummonData(); globalScene.time.delayedCall(1000, () => { if (pokemon.isShiny()) { - globalScene.phaseManager.unshiftPhase(new ShinySparklePhase(pokemon.getBattlerIndex())); + globalScene.phaseManager.unshiftNew("ShinySparklePhase", pokemon.getBattlerIndex()); } pokemon.resetTurnData(); globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeActiveTrigger, true); - globalScene.phaseManager.pushPhase(new PostSummonPhase(pokemon.getBattlerIndex())); + globalScene.phaseManager.pushNew("PostSummonPhase", pokemon.getBattlerIndex()); resolve(); }); }, diff --git a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts index 42167d240f9..62029eb1847 100644 --- a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts @@ -17,7 +17,6 @@ import { import { getPokemonSpecies } from "#app/data/pokemon-species"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { ModifierTier } from "#app/modifier/modifier-tier"; -import { GameOverPhase } from "#app/phases/game-over-phase"; import { randSeedInt } from "#app/utils/common"; import { MoveId } from "#enums/move-id"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; @@ -190,7 +189,7 @@ export const MysteriousChestEncounter: MysteryEncounter = MysteryEncounterBuilde if (allowedPokemon.length === 0) { // If there are no longer any legal pokemon in the party, game over. globalScene.phaseManager.clearPhaseQueue(); - globalScene.phaseManager.unshiftPhase(new GameOverPhase()); + globalScene.phaseManager.unshiftNew("GameOverPhase"); } else { // Show which Pokemon was KOed, then start battle against Gimmighoul await transitionMysteryEncounterIntroVisuals(true, true, 500); diff --git a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts index 54e15dcb102..d324e9f9b6c 100644 --- a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts +++ b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts @@ -29,8 +29,6 @@ import { getEncounterText, showEncounterText } from "#app/data/mystery-encounter import { getPokemonNameWithAffix } from "#app/messages"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; -import { ScanIvsPhase } from "#app/phases/scan-ivs-phase"; -import { SummonPhase } from "#app/phases/summon-phase"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { NON_LEGEND_PARADOX_POKEMON } from "#app/data/balance/special-species-groups"; @@ -325,7 +323,7 @@ async function summonSafariPokemon() { encounter.misc.pokemon = pokemon; encounter.misc.safariPokemonRemaining -= 1; - globalScene.phaseManager.unshiftPhase(new SummonPhase(0, false)); + globalScene.phaseManager.unshiftNew("SummonPhase", 0, false); encounter.setDialogueToken("pokemonName", getPokemonNameWithAffix(pokemon)); @@ -336,7 +334,7 @@ async function summonSafariPokemon() { const ivScannerModifier = globalScene.findModifier(m => m instanceof IvScannerModifier); if (ivScannerModifier) { - globalScene.phaseManager.pushPhase(new ScanIvsPhase(pokemon.getBattlerIndex())); + globalScene.phaseManager.pushNew("ScanIvsPhase", pokemon.getBattlerIndex()); } } diff --git a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts index a0898f7cfec..bb1529e3695 100644 --- a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts +++ b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts @@ -26,7 +26,6 @@ import { AiType, PokemonMove } from "#app/field/pokemon"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; -import { PartyHealPhase } from "#app/phases/party-heal-phase"; import { BerryType } from "#enums/berry-type"; import { Stat } from "#enums/stat"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; @@ -155,7 +154,7 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = MysteryEncounterBuil async () => { // Fall asleep waiting for Snorlax // Full heal party - globalScene.phaseManager.unshiftPhase(new PartyHealPhase(true)); + globalScene.phaseManager.unshiftNew("PartyHealPhase", true); queueEncounterMessage(`${namespace}:option.2.rest_result`); leaveEncounterWithoutBattle(); }, diff --git a/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts b/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts index b101837adb9..edc9cf13834 100644 --- a/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts +++ b/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts @@ -27,7 +27,6 @@ import { getPartyLuckValue, modifierTypes } from "#app/modifier/modifier-type"; import { TrainerSlot } from "#enums/trainer-slot"; import { BattlerTagType } from "#enums/battler-tag-type"; import { getPokemonNameWithAffix } from "#app/messages"; -import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { Stat } from "#enums/stat"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { @@ -227,8 +226,12 @@ async function doBiomeTransitionDialogueAndBattleInit() { tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { queueEncounterMessage(`${namespace}:boss_enraged`); - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(pokemon.getBattlerIndex(), true, statChangesForBattle, 1), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + pokemon.getBattlerIndex(), + true, + statChangesForBattle, + 1, ); }, }, diff --git a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts index e2b6d62745b..be347fb0035 100644 --- a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts @@ -27,7 +27,6 @@ import { BerryType } from "#enums/berry-type"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import { Stat } from "#enums/stat"; -import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; /** the i18n namespace for the encounter */ @@ -116,8 +115,12 @@ export const TheStrongStuffEncounter: MysteryEncounter = MysteryEncounterBuilder tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { queueEncounterMessage(`${namespace}:option.2.stat_boost`); - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(pokemon.getBattlerIndex(), true, [Stat.DEF, Stat.SPDEF], 1), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + pokemon.getBattlerIndex(), + true, + [Stat.DEF, Stat.SPDEF], + 1, ); }, }, diff --git a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts index 05e036e9189..4b17260098f 100644 --- a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts @@ -27,9 +27,6 @@ import { SpeciesFormChangeAbilityTrigger } from "#app/data/pokemon-forms"; import { applyPostBattleInitAbAttrs, PostBattleInitAbAttr } from "#app/data/abilities/ability"; import { showEncounterDialogue, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; -import { PartyHealPhase } from "#app/phases/party-heal-phase"; -import { ShowTrainerPhase } from "#app/phases/show-trainer-phase"; -import { ReturnPhase } from "#app/phases/return-phase"; import i18next from "i18next"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; @@ -143,7 +140,7 @@ export const TheWinstrateChallengeEncounter: MysteryEncounter = MysteryEncounter }, async () => { // Refuse the challenge, they full heal the party and give the player a Rarer Candy - globalScene.phaseManager.unshiftPhase(new PartyHealPhase(true)); + globalScene.phaseManager.unshiftNew("PartyHealPhase", true); setEncounterRewards({ guaranteedModifierTypeFuncs: [modifierTypes.RARER_CANDY], fillRemaining: false, @@ -209,7 +206,7 @@ function endTrainerBattleAndShowDialogue(): Promise { for (const pokemon of playerField) { pokemon.lapseTag(BattlerTagType.COMMANDED); } - playerField.forEach((_, p) => globalScene.phaseManager.unshiftPhase(new ReturnPhase(p))); + playerField.forEach((_, p) => globalScene.phaseManager.unshiftNew("ReturnPhase", p)); for (const pokemon of globalScene.getPlayerParty()) { // Only trigger form change when Eiscue is in Noice form @@ -227,7 +224,7 @@ function endTrainerBattleAndShowDialogue(): Promise { applyPostBattleInitAbAttrs(PostBattleInitAbAttr, pokemon); } - globalScene.phaseManager.unshiftPhase(new ShowTrainerPhase()); + globalScene.phaseManager.unshiftNew("ShowTrainerPhase"); // Hide the trainer and init next battle const trainer = globalScene.currentBattle.trainer; // Unassign previous trainer from battle so it isn't destroyed before animation completes diff --git a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts index e917574a065..411ecdec080 100644 --- a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts +++ b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts @@ -35,7 +35,6 @@ import { PokeballType } from "#enums/pokeball"; import { BattlerTagType } from "#enums/battler-tag-type"; import { queueEncounterMessage } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { BerryModifier } from "#app/modifier/modifier"; -import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { Stat } from "#enums/stat"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; @@ -103,8 +102,12 @@ export const UncommonBreedEncounter: MysteryEncounter = MysteryEncounterBuilder. tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { queueEncounterMessage(`${namespace}:option.1.stat_boost`); - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(pokemon.getBattlerIndex(), true, statChangesForBattle, 1), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + pokemon.getBattlerIndex(), + true, + statChangesForBattle, + 1, ); }, }, diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index c566ed68476..b86cbaa18c9 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -20,12 +20,6 @@ import { modifierTypes, regenerateModifierPoolThresholds, } from "#app/modifier/modifier-type"; -import { - MysteryEncounterBattlePhase, - MysteryEncounterBattleStartCleanupPhase, - MysteryEncounterPhase, - MysteryEncounterRewardsPhase, -} from "#app/phases/mystery-encounter-phases"; import type PokemonData from "#app/system/pokemon-data"; import type { OptionSelectConfig, OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import type { PartyOption, PokemonSelectFilter } from "#app/ui/party-ui-handler"; @@ -51,13 +45,6 @@ import type { IEggOptions } from "#app/data/egg"; import { Egg } from "#app/data/egg"; import type { CustomPokemonData } from "#app/data/custom-pokemon-data"; import type HeldModifierConfig from "#app/@types/held-modifier-config"; -import { MovePhase } from "#app/phases/move-phase"; -import { EggLapsePhase } from "#app/phases/egg-lapse-phase"; -import { TrainerVictoryPhase } from "#app/phases/trainer-victory-phase"; -import { BattleEndPhase } from "#app/phases/battle-end-phase"; -import { GameOverPhase } from "#app/phases/game-over-phase"; -import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; -import { PartyExpPhase } from "#app/phases/party-exp-phase"; import type { Variant } from "#app/sprites/variant"; import { StatusEffect } from "#enums/status-effect"; import { globalScene } from "#app/global-scene"; @@ -428,7 +415,7 @@ export async function initBattleWithEnemyConfig(partyConfig: EnemyPartyConfig): console.log("Moveset:", moveset); }); - globalScene.phaseManager.pushPhase(new MysteryEncounterBattlePhase(partyConfig.disableSwitch)); + globalScene.phaseManager.pushNew("MysteryEncounterBattlePhase", partyConfig.disableSwitch); await Promise.all(loadEnemyAssets); battle.enemyParty.forEach((enemyPokemon_2, e_1) => { @@ -767,7 +754,7 @@ export function setEncounterRewards( } if (customShopRewards) { - globalScene.phaseManager.unshiftPhase(new SelectModifierPhase(0, undefined, customShopRewards)); + globalScene.phaseManager.unshiftNew("SelectModifierPhase", 0, undefined, customShopRewards); } else { globalScene.phaseManager.tryRemovePhase(p => p.is("MysteryEncounterRewardsPhase")); } @@ -807,7 +794,7 @@ export function setEncounterExp(participantId: number | number[], baseExpValue: const participantIds = Array.isArray(participantId) ? participantId : [participantId]; globalScene.currentBattle.mysteryEncounter!.doEncounterExp = () => { - globalScene.phaseManager.unshiftPhase(new PartyExpPhase(baseExpValue, useWaveIndex, new Set(participantIds))); + globalScene.phaseManager.unshiftNew("PartyExpPhase", baseExpValue, useWaveIndex, new Set(participantIds)); return true; }; @@ -829,7 +816,7 @@ export class OptionSelectSettings { * @param optionSelectSettings */ export function initSubsequentOptionSelect(optionSelectSettings: OptionSelectSettings) { - globalScene.phaseManager.pushPhase(new MysteryEncounterPhase(optionSelectSettings)); + globalScene.phaseManager.pushNew("MysteryEncounterPhase", optionSelectSettings); } /** @@ -858,7 +845,7 @@ export function handleMysteryEncounterVictory(addHealPhase = false, doNotContinu if (allowedPkm.length === 0) { globalScene.phaseManager.clearPhaseQueue(); - globalScene.phaseManager.unshiftPhase(new GameOverPhase()); + globalScene.phaseManager.unshiftNew("GameOverPhase"); return; } @@ -869,8 +856,8 @@ export function handleMysteryEncounterVictory(addHealPhase = false, doNotContinu return; } if (encounter.encounterMode === MysteryEncounterMode.NO_BATTLE) { - globalScene.phaseManager.pushPhase(new MysteryEncounterRewardsPhase(addHealPhase)); - globalScene.phaseManager.pushPhase(new EggLapsePhase()); + globalScene.phaseManager.pushNew("MysteryEncounterRewardsPhase", addHealPhase); + globalScene.phaseManager.pushNew("EggLapsePhase"); } else if ( !globalScene .getEnemyParty() @@ -878,15 +865,15 @@ export function handleMysteryEncounterVictory(addHealPhase = false, doNotContinu encounter.encounterMode !== MysteryEncounterMode.TRAINER_BATTLE ? p.isOnField() : !p?.isFainted(true), ) ) { - globalScene.phaseManager.pushPhase(new BattleEndPhase(true)); + globalScene.phaseManager.pushNew("BattleEndPhase", true); if (encounter.encounterMode === MysteryEncounterMode.TRAINER_BATTLE) { - globalScene.phaseManager.pushPhase(new TrainerVictoryPhase()); + globalScene.phaseManager.pushNew("TrainerVictoryPhase"); } if (globalScene.gameMode.isEndless || !globalScene.gameMode.isWaveFinal(globalScene.currentBattle.waveIndex)) { - globalScene.phaseManager.pushPhase(new MysteryEncounterRewardsPhase(addHealPhase)); + globalScene.phaseManager.pushNew("MysteryEncounterRewardsPhase", addHealPhase); if (!encounter.doContinueEncounter) { // Only lapse eggs once for multi-battle encounters - globalScene.phaseManager.pushPhase(new EggLapsePhase()); + globalScene.phaseManager.pushNew("EggLapsePhase"); } } } @@ -901,7 +888,7 @@ export function handleMysteryEncounterBattleFailed(addHealPhase = false, doNotCo if (allowedPkm.length === 0) { globalScene.phaseManager.clearPhaseQueue(); - globalScene.phaseManager.unshiftPhase(new GameOverPhase()); + globalScene.phaseManager.unshiftNew("GameOverPhase"); return; } @@ -912,14 +899,14 @@ export function handleMysteryEncounterBattleFailed(addHealPhase = false, doNotCo return; } if (encounter.encounterMode !== MysteryEncounterMode.NO_BATTLE) { - globalScene.phaseManager.pushPhase(new BattleEndPhase(false)); + globalScene.phaseManager.pushNew("BattleEndPhase", false); } - globalScene.phaseManager.pushPhase(new MysteryEncounterRewardsPhase(addHealPhase)); + globalScene.phaseManager.pushNew("MysteryEncounterRewardsPhase", addHealPhase); if (!encounter.doContinueEncounter) { // Only lapse eggs once for multi-battle encounters - globalScene.phaseManager.pushPhase(new EggLapsePhase()); + globalScene.phaseManager.pushNew("EggLapsePhase"); } } @@ -1004,14 +991,19 @@ export function handleMysteryEncounterBattleStartEffects() { } else { source = globalScene.getEnemyField()[0]; } - globalScene.phaseManager.pushPhase( - // @ts-ignore: source cannot be undefined - new MovePhase(source, effect.targets, effect.move, effect.followUp, effect.ignorePp), + globalScene.phaseManager.pushNew( + "MovePhase", + // @ts-expect-error: source is guaranteed to be defined + source, + effect.targets, + effect.move, + effect.followUp, + effect.ignorePp, ); }); // Pseudo turn end phase to reset flinch states, Endure, etc. - globalScene.phaseManager.pushPhase(new MysteryEncounterBattleStartCleanupPhase()); + globalScene.phaseManager.pushNew("MysteryEncounterBattleStartCleanupPhase"); encounter.startOfBattleEffectsComplete = true; } diff --git a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts index 757d8173820..e8a3db46cff 100644 --- a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts @@ -32,7 +32,6 @@ import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; import { modifierTypes } from "#app/modifier/modifier-type"; import { Gender } from "#app/data/gender"; import type { PermanentStat } from "#enums/stat"; -import { VictoryPhase } from "#app/phases/victory-phase"; import { SummaryUiMode } from "#app/ui/summary-ui-handler"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import type { AbilityId } from "#enums/ability-id"; @@ -675,7 +674,7 @@ export async function catchPokemon( if (!globalScene.getEnemyParty().some(p => p.id === pokemon.id)) { globalScene.getEnemyParty().push(pokemon); } - globalScene.phaseManager.unshiftPhase(new VictoryPhase(pokemon.id, true)); + globalScene.phaseManager.unshiftNew("VictoryPhase", pokemon.id, true); globalScene.pokemonInfoContainer.hide(); if (pokeball) { removePb(pokeball); diff --git a/src/field/arena.ts b/src/field/arena.ts index 1c54382c89b..82a8afbedad 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -38,7 +38,6 @@ import { TimeOfDay } from "#enums/time-of-day"; import { TrainerType } from "#enums/trainer-type"; import { AbilityId } from "#enums/ability-id"; import { SpeciesFormChangeRevertWeatherFormTrigger, SpeciesFormChangeWeatherTrigger } from "#app/data/pokemon-forms"; -import { CommonAnimPhase } from "#app/phases/common-anim-phase"; import { WeatherType } from "#enums/weather-type"; import { FieldEffectModifier } from "#app/modifier/modifier"; @@ -297,7 +296,7 @@ export class Arena { */ trySetWeatherOverride(weather: WeatherType): boolean { this.weather = new Weather(weather, 0); - globalScene.phaseManager.unshiftPhase(new CommonAnimPhase(undefined, undefined, CommonAnim.SUNNY + (weather - 1))); + globalScene.phaseManager.unshiftNew("CommonAnimPhase", undefined, undefined, CommonAnim.SUNNY + (weather - 1)); globalScene.phaseManager.queueMessage(getWeatherStartMessage(weather)!); // TODO: is this bang correct? return true; } @@ -328,8 +327,12 @@ export class Arena { this.weather?.isImmutable() && ![WeatherType.HARSH_SUN, WeatherType.HEAVY_RAIN, WeatherType.STRONG_WINDS, WeatherType.NONE].includes(weather) ) { - globalScene.phaseManager.unshiftPhase( - new CommonAnimPhase(undefined, undefined, CommonAnim.SUNNY + (oldWeatherType - 1), true), + globalScene.phaseManager.unshiftNew( + "CommonAnimPhase", + undefined, + undefined, + CommonAnim.SUNNY + (oldWeatherType - 1), + true, ); globalScene.phaseManager.queueMessage(getLegendaryWeatherContinuesMessage(oldWeatherType)!); return false; @@ -348,8 +351,12 @@ export class Arena { ); // TODO: is this bang correct? if (this.weather) { - globalScene.phaseManager.unshiftPhase( - new CommonAnimPhase(undefined, undefined, CommonAnim.SUNNY + (weather - 1), true), + globalScene.phaseManager.unshiftNew( + "CommonAnimPhase", + undefined, + undefined, + CommonAnim.SUNNY + (weather - 1), + true, ); globalScene.phaseManager.queueMessage(getWeatherStartMessage(weather)!); // TODO: is this bang correct? } else { @@ -433,8 +440,11 @@ export class Arena { if (this.terrain) { if (!ignoreAnim) { - globalScene.phaseManager.unshiftPhase( - new CommonAnimPhase(undefined, undefined, CommonAnim.MISTY_TERRAIN + (terrain - 1)), + globalScene.phaseManager.unshiftNew( + "CommonAnimPhase", + undefined, + undefined, + CommonAnim.MISTY_TERRAIN + (terrain - 1), ); } globalScene.phaseManager.queueMessage(getTerrainStartMessage(terrain)!); // TODO: is this bang correct? diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 5b38419e708..71b21076ae6 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -230,13 +230,6 @@ import { BiomeId } from "#enums/biome-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; import { getPokemonNameWithAffix } from "#app/messages"; -import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; -import { FaintPhase } from "#app/phases/faint-phase"; -import { LearnMovePhase } from "#app/phases/learn-move-phase"; -import { MoveEndPhase } from "#app/phases/move-end-phase"; -import { ObtainStatusEffectPhase } from "#app/phases/obtain-status-effect-phase"; -import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; -import { SwitchSummonPhase } from "#app/phases/switch-summon-phase"; import { Challenges } from "#enums/challenges"; import { PokemonAnimType } from "#enums/pokemon-anim-type"; import { PLAYER_PARTY_MAX_SIZE } from "#app/constants"; @@ -256,7 +249,6 @@ import { doShinySparkleAnim } from "#app/field/anims"; import { MoveFlags } from "#enums/MoveFlags"; import { timedEventManager } from "#app/global-event-manager"; import { loadMoveAnimations } from "#app/sprites/pokemon-asset-loader"; -import { ResetStatusPhase } from "#app/phases/reset-status-phase"; export enum LearnMoveSituation { MISC, @@ -4013,7 +4005,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * Once the MoveEffectPhase is over (and calls it's .end() function, shiftPhase() will reset the PhaseQueueSplice via clearPhaseQueueSplice() ) */ globalScene.phaseManager.setPhaseQueueSplice(); - globalScene.phaseManager.unshiftPhase(new FaintPhase(this.getBattlerIndex(), preventEndure)); + globalScene.phaseManager.unshiftNew("FaintPhase", this.getBattlerIndex(), preventEndure); this.destroySubstitute(); this.lapseTag(BattlerTagType.COMMANDED); } @@ -4049,7 +4041,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } = {}, ): number { const isIndirectDamage = [HitResult.INDIRECT, HitResult.INDIRECT_KO].includes(result); - const damagePhase = new DamageAnimPhase(this.getBattlerIndex(), damage, result as DamageResult, isCritical); + const damagePhase = globalScene.phaseManager.create( + "DamageAnimPhase", + this.getBattlerIndex(), + damage, + result as DamageResult, + isCritical, + ); globalScene.phaseManager.unshiftPhase(damagePhase); if (this.switchOutStatus && source) { damage = 0; @@ -4778,8 +4776,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (overrideStatus) { this.resetStatus(false); } - globalScene.phaseManager.unshiftPhase( - new ObtainStatusEffectPhase(this.getBattlerIndex(), effect, turnsRemaining, sourceText, sourcePokemon), + globalScene.phaseManager.unshiftNew( + "ObtainStatusEffectPhase", + this.getBattlerIndex(), + effect, + turnsRemaining, + sourceText, + sourcePokemon, ); return true; } @@ -4828,7 +4831,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } if (asPhase) { - globalScene.phaseManager.unshiftPhase(new ResetStatusPhase(this, confusion, reloadAssets)); + globalScene.phaseManager.unshiftNew("ResetStatusPhase", this, confusion, reloadAssets); } else { this.clearStatus(confusion, reloadAssets); } @@ -5635,9 +5638,13 @@ export class PlayerPokemon extends Pokemon { this.getFieldIndex(), (slotIndex: number, _option: PartyOption) => { if (slotIndex >= globalScene.currentBattle.getBattlerCount() && slotIndex < 6) { - globalScene.phaseManager.prependToPhase( - new SwitchSummonPhase(switchType, this.getFieldIndex(), slotIndex, false), - MoveEndPhase, + globalScene.phaseManager.prependNewToPhase( + "MoveEndPhase", + "SwitchSummonPhase", + switchType, + this.getFieldIndex(), + slotIndex, + false, ); } globalScene.ui.setMode(UiMode.MESSAGE).then(resolve); @@ -6001,7 +6008,7 @@ export class PlayerPokemon extends Pokemon { pokemon .getMoveset(true) .map((m: PokemonMove) => - globalScene.phaseManager.unshiftPhase(new LearnMovePhase(newPartyMemberIndex, m.getMove().id)), + globalScene.phaseManager.unshiftNew("LearnMovePhase", newPartyMemberIndex, m.getMove().id), ); pokemon.destroy(); this.updateFusionPalette(); @@ -6644,8 +6651,14 @@ export class EnemyPokemon extends Pokemon { stages++; } - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase(this.getBattlerIndex(), true, [boostedStat!], stages, true, true), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + this.getBattlerIndex(), + true, + [boostedStat!], + stages, + true, + true, ); this.bossSegmentIndex--; } diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 81d9bf7189c..b6f96db751a 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -8,10 +8,7 @@ import { getStatusEffectHealText } from "#app/data/status-effect"; import Pokemon, { type PlayerPokemon } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import Overrides from "#app/overrides"; -import { EvolutionPhase } from "#app/phases/evolution-phase"; -import { LearnMovePhase, LearnMoveType } from "#app/phases/learn-move-phase"; -import { LevelUpPhase } from "#app/phases/level-up-phase"; -import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; +import { LearnMoveType } from "#app/phases/learn-move-phase"; import type { VoucherType } from "#app/system/voucher"; import { Command } from "#app/ui/command-ui-handler"; import { addTextObject, TextStyle } from "#app/ui/text"; @@ -1684,16 +1681,15 @@ export class TurnHealModifier extends PokemonHeldItemModifier { */ override apply(pokemon: Pokemon): boolean { if (!pokemon.isFullHp()) { - globalScene.phaseManager.unshiftPhase( - new PokemonHealPhase( - pokemon.getBattlerIndex(), - toDmgValue(pokemon.getMaxHp() / 16) * this.stackCount, - i18next.t("modifier:turnHealApply", { - pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - typeName: this.type.name, - }), - true, - ), + globalScene.phaseManager.unshiftNew( + "PokemonHealPhase", + pokemon.getBattlerIndex(), + toDmgValue(pokemon.getMaxHp() / 16) * this.stackCount, + i18next.t("modifier:turnHealApply", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + typeName: this.type.name, + }), + true, ); return true; } @@ -1782,16 +1778,15 @@ export class HitHealModifier extends PokemonHeldItemModifier { override apply(pokemon: Pokemon): boolean { if (pokemon.turnData.totalDamageDealt && !pokemon.isFullHp()) { // TODO: this shouldn't be undefined AFAIK - globalScene.phaseManager.unshiftPhase( - new PokemonHealPhase( - pokemon.getBattlerIndex(), - toDmgValue(pokemon.turnData.totalDamageDealt / 8) * this.stackCount, - i18next.t("modifier:hitHealApply", { - pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - typeName: this.type.name, - }), - true, - ), + globalScene.phaseManager.unshiftNew( + "PokemonHealPhase", + pokemon.getBattlerIndex(), + toDmgValue(pokemon.turnData.totalDamageDealt / 8) * this.stackCount, + i18next.t("modifier:hitHealApply", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + typeName: this.type.name, + }), + true, ); } @@ -1950,18 +1945,17 @@ export class PokemonInstantReviveModifier extends PokemonHeldItemModifier { */ override apply(pokemon: Pokemon): boolean { // Restore the Pokemon to half HP - globalScene.phaseManager.unshiftPhase( - new PokemonHealPhase( - pokemon.getBattlerIndex(), - toDmgValue(pokemon.getMaxHp() / 2), - i18next.t("modifier:pokemonInstantReviveApply", { - pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - typeName: this.type.name, - }), - false, - false, - true, - ), + globalScene.phaseManager.unshiftNew( + "PokemonHealPhase", + pokemon.getBattlerIndex(), + toDmgValue(pokemon.getMaxHp() / 2), + i18next.t("modifier:pokemonInstantReviveApply", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + typeName: this.type.name, + }), + false, + false, + true, ); // Remove the Pokemon's FAINT status @@ -2323,12 +2317,11 @@ export class PokemonLevelIncrementModifier extends ConsumablePokemonModifier { playerPokemon.addFriendship(FRIENDSHIP_GAIN_FROM_RARE_CANDY); - globalScene.phaseManager.unshiftPhase( - new LevelUpPhase( - globalScene.getPlayerParty().indexOf(playerPokemon), - playerPokemon.level - levelCount.value, - playerPokemon.level, - ), + globalScene.phaseManager.unshiftNew( + "LevelUpPhase", + globalScene.getPlayerParty().indexOf(playerPokemon), + playerPokemon.level - levelCount.value, + playerPokemon.level, ); return true; @@ -2344,8 +2337,11 @@ export class TmModifier extends ConsumablePokemonModifier { * @returns always `true` */ override apply(playerPokemon: PlayerPokemon): boolean { - globalScene.phaseManager.unshiftPhase( - new LearnMovePhase(globalScene.getPlayerParty().indexOf(playerPokemon), this.type.moveId, LearnMoveType.TM), + globalScene.phaseManager.unshiftNew( + "LearnMovePhase", + globalScene.getPlayerParty().indexOf(playerPokemon), + this.type.moveId, + LearnMoveType.TM, ); return true; @@ -2367,13 +2363,12 @@ export class RememberMoveModifier extends ConsumablePokemonModifier { * @returns always `true` */ override apply(playerPokemon: PlayerPokemon, cost?: number): boolean { - globalScene.phaseManager.unshiftPhase( - new LearnMovePhase( - globalScene.getPlayerParty().indexOf(playerPokemon), - playerPokemon.getLearnableLevelMoves()[this.levelMoveIndex], - LearnMoveType.MEMORY, - cost, - ), + globalScene.phaseManager.unshiftNew( + "LearnMovePhase", + globalScene.getPlayerParty().indexOf(playerPokemon), + playerPokemon.getLearnableLevelMoves()[this.levelMoveIndex], + LearnMoveType.MEMORY, + cost, ); return true; @@ -2410,9 +2405,7 @@ export class EvolutionItemModifier extends ConsumablePokemonModifier { } if (matchingEvolution) { - globalScene.phaseManager.unshiftPhase( - new EvolutionPhase(playerPokemon, matchingEvolution, playerPokemon.level - 1), - ); + globalScene.phaseManager.unshiftNew("EvolutionPhase", playerPokemon, matchingEvolution, playerPokemon.level - 1); return true; } @@ -3574,19 +3567,18 @@ export class EnemyTurnHealModifier extends EnemyPersistentModifier { */ override apply(enemyPokemon: Pokemon): boolean { if (!enemyPokemon.isFullHp()) { - globalScene.phaseManager.unshiftPhase( - new PokemonHealPhase( - enemyPokemon.getBattlerIndex(), - Math.max(Math.floor(enemyPokemon.getMaxHp() / (100 / this.healPercent)) * this.stackCount, 1), - i18next.t("modifier:enemyTurnHealApply", { - pokemonNameWithAffix: getPokemonNameWithAffix(enemyPokemon), - }), - true, - false, - false, - false, - true, - ), + globalScene.phaseManager.unshiftNew( + "PokemonHealPhase", + enemyPokemon.getBattlerIndex(), + Math.max(Math.floor(enemyPokemon.getMaxHp() / (100 / this.healPercent)) * this.stackCount, 1), + i18next.t("modifier:enemyTurnHealApply", { + pokemonNameWithAffix: getPokemonNameWithAffix(enemyPokemon), + }), + true, + false, + false, + false, + true, ); return true; } diff --git a/src/phase-manager.ts b/src/phase-manager.ts index 8869f4b27b7..230e0331caf 100644 --- a/src/phase-manager.ts +++ b/src/phase-manager.ts @@ -1,11 +1,100 @@ -import { HideAbilityPhase } from "./phases/hide-ability-phase"; -import { ShowAbilityPhase } from "./phases/show-ability-phase"; -import { TurnInitPhase } from "./phases/turn-init-phase"; import type { Phase } from "#app/phase"; import type { default as Pokemon } from "#app/field/pokemon"; -import type { Constructor } from "#app/utils/common"; -import { MessagePhase } from "./phases/message-phase"; +import type { PhaseMap, PhaseString } from "./@types/phase-types"; import { globalScene } from "#app/global-scene"; +import { AddEnemyBuffModifierPhase } from "#app/phases/add-enemy-buff-modifier-phase"; +import { AttemptCapturePhase } from "#app/phases/attempt-capture-phase"; +import { AttemptRunPhase } from "#app/phases/attempt-run-phase"; +import { BattleEndPhase } from "#app/phases/battle-end-phase"; +import { BerryPhase } from "#app/phases/berry-phase"; +import { CheckStatusEffectPhase } from "#app/phases/check-status-effect-phase"; +import { CheckSwitchPhase } from "#app/phases/check-switch-phase"; +import { CommandPhase } from "#app/phases/command-phase"; +import { CommonAnimPhase } from "#app/phases/common-anim-phase"; +import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; +import { EggHatchPhase } from "#app/phases/egg-hatch-phase"; +import { EggLapsePhase } from "#app/phases/egg-lapse-phase"; +import { EggSummaryPhase } from "#app/phases/egg-summary-phase"; +import { EncounterPhase } from "#app/phases/encounter-phase"; +import { EndCardPhase } from "#app/phases/end-card-phase"; +import { EndEvolutionPhase } from "#app/phases/end-evolution-phase"; +import { EnemyCommandPhase } from "#app/phases/enemy-command-phase"; +import { EvolutionPhase } from "#app/phases/evolution-phase"; +import { ExpPhase } from "#app/phases/exp-phase"; +import { FaintPhase } from "#app/phases/faint-phase"; +import { FormChangePhase } from "#app/phases/form-change-phase"; +import { GameOverModifierRewardPhase } from "#app/phases/game-over-modifier-reward-phase"; +import { GameOverPhase } from "#app/phases/game-over-phase"; +import { HideAbilityPhase } from "#app/phases/hide-ability-phase"; +import { HidePartyExpBarPhase } from "#app/phases/hide-party-exp-bar-phase"; +import { LearnMovePhase } from "#app/phases/learn-move-phase"; +import { LevelCapPhase } from "#app/phases/level-cap-phase"; +import { LevelUpPhase } from "#app/phases/level-up-phase"; +import { LoadMoveAnimPhase } from "#app/phases/load-move-anim-phase"; +import { LoginPhase } from "#app/phases/login-phase"; +import { MessagePhase } from "#app/phases/message-phase"; +import { ModifierRewardPhase } from "#app/phases/modifier-reward-phase"; +import { MoneyRewardPhase } from "#app/phases/money-reward-phase"; +import { MoveAnimPhase } from "#app/phases/move-anim-phase"; +import { MoveChargePhase } from "#app/phases/move-charge-phase"; +import { MoveEffectPhase } from "#app/phases/move-effect-phase"; +import { MoveEndPhase } from "#app/phases/move-end-phase"; +import { MoveHeaderPhase } from "#app/phases/move-header-phase"; +import { MovePhase } from "#app/phases/move-phase"; +import { + MysteryEncounterPhase, + MysteryEncounterOptionSelectedPhase, + MysteryEncounterBattlePhase, + MysteryEncounterRewardsPhase, + PostMysteryEncounterPhase, + MysteryEncounterBattleStartCleanupPhase, +} from "#app/phases/mystery-encounter-phases"; +import { NewBattlePhase } from "#app/phases/new-battle-phase"; +import { NewBiomeEncounterPhase } from "#app/phases/new-biome-encounter-phase"; +import { NextEncounterPhase } from "#app/phases/next-encounter-phase"; +import { ObtainStatusEffectPhase } from "#app/phases/obtain-status-effect-phase"; +import { PartyExpPhase } from "#app/phases/party-exp-phase"; +import { PartyHealPhase } from "#app/phases/party-heal-phase"; +import { PokemonAnimPhase } from "#app/phases/pokemon-anim-phase"; +import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; +import { PokemonTransformPhase } from "#app/phases/pokemon-transform-phase"; +import { PostGameOverPhase } from "#app/phases/post-game-over-phase"; +import { PostSummonPhase } from "#app/phases/post-summon-phase"; +import { PostTurnStatusEffectPhase } from "#app/phases/post-turn-status-effect-phase"; +import { QuietFormChangePhase } from "#app/phases/quiet-form-change-phase"; +import { ReloadSessionPhase } from "#app/phases/reload-session-phase"; +import { ResetStatusPhase } from "#app/phases/reset-status-phase"; +import { ReturnPhase } from "#app/phases/return-phase"; +import { RevivalBlessingPhase } from "#app/phases/revival-blessing-phase"; +import { RibbonModifierRewardPhase } from "#app/phases/ribbon-modifier-reward-phase"; +import { ScanIvsPhase } from "#app/phases/scan-ivs-phase"; +import { SelectBiomePhase } from "#app/phases/select-biome-phase"; +import { SelectChallengePhase } from "#app/phases/select-challenge-phase"; +import { SelectGenderPhase } from "#app/phases/select-gender-phase"; +import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; +import { SelectStarterPhase } from "#app/phases/select-starter-phase"; +import { SelectTargetPhase } from "#app/phases/select-target-phase"; +import { ShinySparklePhase } from "#app/phases/shiny-sparkle-phase"; +import { ShowAbilityPhase } from "#app/phases/show-ability-phase"; +import { ShowPartyExpBarPhase } from "#app/phases/show-party-exp-bar-phase"; +import { ShowTrainerPhase } from "#app/phases/show-trainer-phase"; +import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; +import { SummonMissingPhase } from "#app/phases/summon-missing-phase"; +import { SummonPhase } from "#app/phases/summon-phase"; +import { SwitchBiomePhase } from "#app/phases/switch-biome-phase"; +import { SwitchPhase } from "#app/phases/switch-phase"; +import { SwitchSummonPhase } from "#app/phases/switch-summon-phase"; +import { TeraPhase } from "#app/phases/tera-phase"; +import { TitlePhase } from "#app/phases/title-phase"; +import { ToggleDoublePositionPhase } from "#app/phases/toggle-double-position-phase"; +import { TrainerVictoryPhase } from "#app/phases/trainer-victory-phase"; +import { TurnEndPhase } from "#app/phases/turn-end-phase"; +import { TurnInitPhase } from "#app/phases/turn-init-phase"; +import { TurnStartPhase } from "#app/phases/turn-start-phase"; +import { UnavailablePhase } from "#app/phases/unavailable-phase"; +import { UnlockPhase } from "#app/phases/unlock-phase"; +import { VictoryPhase } from "#app/phases/victory-phase"; +import { WeatherEffectPhase } from "#app/phases/weather-effect-phase"; /** * Manager for phases used by battle scene. @@ -13,6 +102,115 @@ import { globalScene } from "#app/global-scene"; * *This file must not be imported or used directly. The manager is exclusively used by the battle scene and is not intended for external use.* */ +/** + * Object that holds all of the phase constructors. + * This is used to create new phases dynamically using the `newPhase` method in the `PhaseManager`. + * + * @remarks + * The keys of this object are the names of the phases, and the values are the constructors of the phases. + * This allows for easy creation of new phases without needing to import each phase individually. + */ +const PHASES = Object.freeze({ + AddEnemyBuffModifierPhase, + AttemptCapturePhase, + AttemptRunPhase, + BattleEndPhase, + BerryPhase, + CheckStatusEffectPhase, + CheckSwitchPhase, + CommandPhase, + CommonAnimPhase, + DamageAnimPhase, + EggHatchPhase, + EggLapsePhase, + EggSummaryPhase, + EncounterPhase, + EndCardPhase, + EndEvolutionPhase, + EnemyCommandPhase, + EvolutionPhase, + ExpPhase, + FaintPhase, + FormChangePhase, + GameOverPhase, + GameOverModifierRewardPhase, + HideAbilityPhase, + HidePartyExpBarPhase, + LearnMovePhase, + LevelCapPhase, + LevelUpPhase, + LoadMoveAnimPhase, + LoginPhase, + MessagePhase, + ModifierRewardPhase, + MoneyRewardPhase, + MoveAnimPhase, + MoveChargePhase, + MoveEffectPhase, + MoveEndPhase, + MoveHeaderPhase, + MovePhase, + MysteryEncounterPhase, + MysteryEncounterOptionSelectedPhase, + MysteryEncounterBattlePhase, + MysteryEncounterBattleStartCleanupPhase, + MysteryEncounterRewardsPhase, + PostMysteryEncounterPhase, + NewBattlePhase, + NewBiomeEncounterPhase, + NextEncounterPhase, + ObtainStatusEffectPhase, + PartyExpPhase, + PartyHealPhase, + PokemonAnimPhase, + PokemonHealPhase, + PokemonTransformPhase, + PostGameOverPhase, + PostSummonPhase, + PostTurnStatusEffectPhase, + QuietFormChangePhase, + ReloadSessionPhase, + ResetStatusPhase, + ReturnPhase, + RevivalBlessingPhase, + RibbonModifierRewardPhase, + ScanIvsPhase, + SelectBiomePhase, + SelectChallengePhase, + SelectGenderPhase, + SelectModifierPhase, + SelectStarterPhase, + SelectTargetPhase, + ShinySparklePhase, + ShowAbilityPhase, + ShowPartyExpBarPhase, + ShowTrainerPhase, + StatStageChangePhase, + SummonMissingPhase, + SummonPhase, + SwitchBiomePhase, + SwitchPhase, + SwitchSummonPhase, + TeraPhase, + TitlePhase, + ToggleDoublePositionPhase, + TrainerVictoryPhase, + TurnEndPhase, + TurnInitPhase, + TurnStartPhase, + UnavailablePhase, + UnlockPhase, + VictoryPhase, + WeatherEffectPhase, +}); + +// This type export cannot be moved to `@types`, as `Phases` is intentionally private to this file +/** Maps Phase strings to their constructors */ +export type PhaseConstructorMap = typeof PHASES; + +/** + * PhaseManager is responsible for managing the phases in the battle scene + */ export class PhaseManager { /** PhaseQueue: dequeue/remove the first element to get the next phase */ public phaseQueue: Phase[] = []; @@ -213,15 +411,16 @@ export class PhaseManager { /** * Tries to add the input phase to index before target phase in the phaseQueue, else simply calls unshiftPhase() - * @param phase {@linkcode Phase} the phase to be added - * @param targetPhase {@linkcode Phase} the type of phase to search for in phaseQueue + * @param phase - The phase to be added + * @param targetPhase - The phase to search for in phaseQueue * @returns boolean if a targetPhase was found and added */ - prependToPhase(phase: Phase | Phase[], targetPhase: Constructor): boolean { + prependToPhase(phase: Phase | Phase[], targetPhase: PhaseString): boolean { if (!Array.isArray(phase)) { phase = [phase]; } - const targetIndex = this.phaseQueue.findIndex(ph => ph instanceof targetPhase); + const target = PHASES[targetPhase]; + const targetIndex = this.phaseQueue.findIndex(ph => ph instanceof target); if (targetIndex !== -1) { this.phaseQueue.splice(targetIndex, 0, ...phase); @@ -234,14 +433,15 @@ export class PhaseManager { /** * Attempt to add the input phase(s) to index after target phase in the {@linkcode phaseQueue}, else simply calls {@linkcode unshiftPhase()} * @param phase - The phase(s) to be added - * @param targetPhase - The type of phase to search for in {@linkcode phaseQueue} + * @param targetPhase - The phase to search for in phaseQueue * @returns `true` if a `targetPhase` was found to append to */ - appendToPhase(phase: Phase | Phase[], targetPhase: Constructor): boolean { + appendToPhase(phase: Phase | Phase[], targetPhase: PhaseString): boolean { if (!Array.isArray(phase)) { phase = [phase]; } - const targetIndex = this.phaseQueue.findIndex(ph => ph instanceof targetPhase); + const target = PHASES[targetPhase]; + const targetIndex = this.phaseQueue.findIndex(ph => ph instanceof target); if (targetIndex !== -1 && this.phaseQueue.length > targetIndex) { this.phaseQueue.splice(targetIndex + 1, 0, ...phase); @@ -308,4 +508,74 @@ export class PhaseManager { } this.phaseQueue.push(new TurnInitPhase()); } + + /** + * Dynamically create the named phase from the provided arguments + * + * @remarks + * Used to avoid importing each phase individually, allowing for dynamic creation of phases. + * @param phase - The name of the phase to create. + * @param args - The arguments to pass to the phase constructor. + * @returns The requested phase instance + */ + public create(phase: T, ...args: ConstructorParameters): PhaseMap[T] { + const PhaseClass = PHASES[phase]; + + if (!PhaseClass) { + throw new Error(`Phase ${phase} does not exist in PhaseMap.`); + } + + // @ts-expect-error: Typescript does not support narrowing the type of operands in generic methods (see https://stackoverflow.com/a/72891234) + return new PhaseClass(...args); + } + + /** + * Create a new phase and immediately push it to the phase queue. Equivalent to calling {@linkcode create} followed by {@linkcode pushPhase}. + * @param phase - The name of the phase to create + * @param args - The arguments to pass to the phase constructor + */ + public pushNew(phase: T, ...args: ConstructorParameters): void { + this.pushPhase(this.create(phase, ...args)); + } + + /** + * Create a new phase and immediately unshift it to the phase queue. Equivalent to calling {@linkcode create} followed by {@linkcode unshiftPhase}. + * @param phase - The name of the phase to create + * @param args - The arguments to pass to the phase constructor + */ + public unshiftNew(phase: T, ...args: ConstructorParameters): void { + this.unshiftPhase(this.create(phase, ...args)); + } + + /** + * Create a new phase and immediately prepend it to an existing phase in the phase queue. + * Equivalent to calling {@linkcode create} followed by {@linkcode prependToPhase}. + * @param targetPhase - The phase to search for in phaseQueue + * @param phase - The name of the phase to create + * @param args - The arguments to pass to the phase constructor + * @returns `true` if a `targetPhase` was found to prepend to + */ + public prependNewToPhase( + targetPhase: PhaseString, + phase: T, + ...args: ConstructorParameters + ): boolean { + return this.prependToPhase(this.create(phase, ...args), targetPhase); + } + + /** + * Create a new phase and immediately append it to an existing phase the phase queue. + * Equivalent to calling {@linkcode create} followed by {@linkcode appendToPhase}. + * @param targetPhase - The phase to search for in phaseQueue + * @param phase - The name of the phase to create + * @param args - The arguments to pass to the phase constructor + * @returns `true` if a `targetPhase` was found to append to + */ + public appendNewToPhase( + targetPhase: PhaseString, + phase: T, + ...args: ConstructorParameters + ): boolean { + return this.appendToPhase(this.create(phase, ...args), targetPhase); + } } diff --git a/src/phases/attempt-capture-phase.ts b/src/phases/attempt-capture-phase.ts index 09eeb6e0a19..4f3f54a7e5b 100644 --- a/src/phases/attempt-capture-phase.ts +++ b/src/phases/attempt-capture-phase.ts @@ -14,7 +14,6 @@ import type { EnemyPokemon } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { PokemonHeldItemModifier } from "#app/modifier/modifier"; import { PokemonPhase } from "#app/phases/pokemon-phase"; -import { VictoryPhase } from "#app/phases/victory-phase"; import { achvs } from "#app/system/achv"; import type { PartyOption } from "#app/ui/party-ui-handler"; import { PartyUiMode } from "#app/ui/party-ui-handler"; @@ -257,7 +256,7 @@ export class AttemptCapturePhase extends PokemonPhase { null, () => { const end = () => { - globalScene.phaseManager.unshiftPhase(new VictoryPhase(this.battlerIndex)); + globalScene.phaseManager.unshiftNew("VictoryPhase", this.battlerIndex); globalScene.pokemonInfoContainer.hide(); this.removePb(); this.end(); diff --git a/src/phases/attempt-run-phase.ts b/src/phases/attempt-run-phase.ts index 2bf6ba2fb5b..525be8c21ab 100644 --- a/src/phases/attempt-run-phase.ts +++ b/src/phases/attempt-run-phase.ts @@ -10,11 +10,8 @@ import type { PlayerPokemon, EnemyPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import i18next from "i18next"; import { NumberHolder } from "#app/utils/common"; -import { BattleEndPhase } from "./battle-end-phase"; -import { NewBattlePhase } from "./new-battle-phase"; import { PokemonPhase } from "./pokemon-phase"; import { globalScene } from "#app/global-scene"; -import { SelectBiomePhase } from "./select-biome-phase"; export class AttemptRunPhase extends PokemonPhase { public readonly phaseName = "AttemptRunPhase"; @@ -60,13 +57,13 @@ export class AttemptRunPhase extends PokemonPhase { enemyPokemon.trySetStatus(StatusEffect.FAINT); }); - globalScene.phaseManager.pushPhase(new BattleEndPhase(false)); + globalScene.phaseManager.pushNew("BattleEndPhase", false); if (globalScene.gameMode.hasRandomBiomes || globalScene.isNewBiome()) { - globalScene.phaseManager.pushPhase(new SelectBiomePhase()); + globalScene.phaseManager.pushNew("SelectBiomePhase"); } - globalScene.phaseManager.pushPhase(new NewBattlePhase()); + globalScene.phaseManager.pushNew("NewBattlePhase"); } else { playerPokemon.turnData.failedRunAway = true; globalScene.phaseManager.queueMessage(i18next.t("battle:runAwayCannotEscape"), null, true, 500); diff --git a/src/phases/battle-end-phase.ts b/src/phases/battle-end-phase.ts index 4e3543be03a..e169de58cb3 100644 --- a/src/phases/battle-end-phase.ts +++ b/src/phases/battle-end-phase.ts @@ -2,7 +2,6 @@ import { globalScene } from "#app/global-scene"; import { applyPostBattleAbAttrs, PostBattleAbAttr } from "#app/data/abilities/ability"; import { LapsingPersistentModifier, LapsingPokemonHeldItemModifier } from "#app/modifier/modifier"; import { BattlePhase } from "./battle-phase"; -import { GameOverPhase } from "./game-over-phase"; export class BattleEndPhase extends BattlePhase { public readonly phaseName = "BattleEndPhase"; @@ -56,7 +55,7 @@ export class BattleEndPhase extends BattlePhase { // Endless graceful end if (globalScene.gameMode.isEndless && globalScene.currentBattle.waveIndex >= 5850) { globalScene.phaseManager.clearPhaseQueue(); - globalScene.phaseManager.unshiftPhase(new GameOverPhase(true)); + globalScene.phaseManager.unshiftNew("GameOverPhase", true); } for (const pokemon of globalScene.getField()) { diff --git a/src/phases/berry-phase.ts b/src/phases/berry-phase.ts index e9e177a8fe4..6e40e299e7c 100644 --- a/src/phases/berry-phase.ts +++ b/src/phases/berry-phase.ts @@ -11,7 +11,6 @@ import { BerryModifier } from "#app/modifier/modifier"; import i18next from "i18next"; import { BooleanHolder } from "#app/utils/common"; import { FieldPhase } from "./field-phase"; -import { CommonAnimPhase } from "./common-anim-phase"; import { globalScene } from "#app/global-scene"; import type Pokemon from "#app/field/pokemon"; @@ -58,8 +57,11 @@ export class BerryPhase extends FieldPhase { return; } - globalScene.phaseManager.unshiftPhase( - new CommonAnimPhase(pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.USE_ITEM), + globalScene.phaseManager.unshiftNew( + "CommonAnimPhase", + pokemon.getBattlerIndex(), + pokemon.getBattlerIndex(), + CommonAnim.USE_ITEM, ); for (const berryModifier of globalScene.applyModifiers(BerryModifier, pokemon.isPlayer(), pokemon)) { diff --git a/src/phases/check-status-effect-phase.ts b/src/phases/check-status-effect-phase.ts index ec15676ebcc..e4793fae076 100644 --- a/src/phases/check-status-effect-phase.ts +++ b/src/phases/check-status-effect-phase.ts @@ -1,4 +1,3 @@ -import { PostTurnStatusEffectPhase } from "#app/phases/post-turn-status-effect-phase"; import { Phase } from "#app/phase"; import type { BattlerIndex } from "#app/battle"; import { globalScene } from "#app/global-scene"; @@ -15,7 +14,7 @@ export class CheckStatusEffectPhase extends Phase { const field = globalScene.getField(); for (const o of this.order) { if (field[o].status?.isPostTurn()) { - globalScene.phaseManager.unshiftPhase(new PostTurnStatusEffectPhase(o)); + globalScene.phaseManager.unshiftNew("PostTurnStatusEffectPhase", o); } } this.end(); diff --git a/src/phases/check-switch-phase.ts b/src/phases/check-switch-phase.ts index 2299bf0c0a5..97f4092096f 100644 --- a/src/phases/check-switch-phase.ts +++ b/src/phases/check-switch-phase.ts @@ -5,8 +5,6 @@ import { getPokemonNameWithAffix } from "#app/messages"; import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; import { BattlePhase } from "./battle-phase"; -import { SummonMissingPhase } from "./summon-missing-phase"; -import { SwitchPhase } from "./switch-phase"; import { SwitchType } from "#enums/switch-type"; export class CheckSwitchPhase extends BattlePhase { @@ -35,7 +33,7 @@ export class CheckSwitchPhase extends BattlePhase { // ...if the checked Pokemon is somehow not on the field if (globalScene.field.getAll().indexOf(pokemon) === -1) { - globalScene.phaseManager.unshiftPhase(new SummonMissingPhase(this.fieldIndex)); + globalScene.phaseManager.unshiftNew("SummonMissingPhase", this.fieldIndex); return super.end(); } @@ -68,9 +66,7 @@ export class CheckSwitchPhase extends BattlePhase { UiMode.CONFIRM, () => { globalScene.ui.setMode(UiMode.MESSAGE); - globalScene.phaseManager.unshiftPhase( - new SwitchPhase(SwitchType.INITIAL_SWITCH, this.fieldIndex, false, true), - ); + globalScene.phaseManager.unshiftNew("SwitchPhase", SwitchType.INITIAL_SWITCH, this.fieldIndex, false, true); this.end(); }, () => { diff --git a/src/phases/command-phase.ts b/src/phases/command-phase.ts index 7a2e427ecce..afd9cb3bf93 100644 --- a/src/phases/command-phase.ts +++ b/src/phases/command-phase.ts @@ -18,7 +18,6 @@ import { Command } from "#app/ui/command-ui-handler"; import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; import { FieldPhase } from "./field-phase"; -import { SelectTargetPhase } from "./select-target-phase"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; import { isNullOrUndefined } from "#app/utils/common"; import { ArenaTagSide } from "#app/data/arena-tag"; @@ -192,7 +191,7 @@ export class CommandPhase extends FieldPhase { } console.log(moveTargets, getPokemonNameWithAffix(playerPokemon)); if (moveTargets.targets.length > 1 && moveTargets.multiple) { - globalScene.phaseManager.unshiftPhase(new SelectTargetPhase(this.fieldIndex)); + globalScene.phaseManager.unshiftNew("SelectTargetPhase", this.fieldIndex); } if (turnCommand.move && (moveTargets.targets.length <= 1 || moveTargets.multiple)) { turnCommand.move.targets = moveTargets.targets; @@ -203,7 +202,7 @@ export class CommandPhase extends FieldPhase { ) { turnCommand.move.targets = playerPokemon.getMoveQueue()[0].targets; } else { - globalScene.phaseManager.unshiftPhase(new SelectTargetPhase(this.fieldIndex)); + globalScene.phaseManager.unshiftNew("SelectTargetPhase", this.fieldIndex); } globalScene.currentBattle.preTurnCommands[this.fieldIndex] = preTurnCommand; globalScene.currentBattle.turnCommands[this.fieldIndex] = turnCommand; @@ -457,8 +456,8 @@ export class CommandPhase extends FieldPhase { cancel() { if (this.fieldIndex) { - globalScene.phaseManager.unshiftPhase(new CommandPhase(0)); - globalScene.phaseManager.unshiftPhase(new CommandPhase(1)); + globalScene.phaseManager.unshiftNew("CommandPhase", 0); + globalScene.phaseManager.unshiftNew("CommandPhase", 1); this.end(); } } diff --git a/src/phases/egg-lapse-phase.ts b/src/phases/egg-lapse-phase.ts index a19bf8f50e5..206bef1a33c 100644 --- a/src/phases/egg-lapse-phase.ts +++ b/src/phases/egg-lapse-phase.ts @@ -4,11 +4,9 @@ import { EGG_SEED } from "#app/data/egg"; import { Phase } from "#app/phase"; import i18next from "i18next"; import Overrides from "#app/overrides"; -import { EggHatchPhase } from "./egg-hatch-phase"; import { UiMode } from "#enums/ui-mode"; import { achvs } from "#app/system/achv"; import type { PlayerPokemon } from "#app/field/pokemon"; -import { EggSummaryPhase } from "./egg-summary-phase"; import { EggHatchData } from "#app/data/egg-hatch-data"; /** @@ -83,7 +81,7 @@ export class EggLapsePhase extends Phase { hatchEggsRegular(eggsToHatch: Egg[]) { let eggsToHatchCount: number = eggsToHatch.length; for (const egg of eggsToHatch) { - globalScene.phaseManager.unshiftPhase(new EggHatchPhase(this, egg, eggsToHatchCount)); + globalScene.phaseManager.unshiftNew("EggHatchPhase", this, egg, eggsToHatchCount); eggsToHatchCount--; } } @@ -99,7 +97,7 @@ export class EggLapsePhase extends Phase { } showSummary() { - globalScene.phaseManager.unshiftPhase(new EggSummaryPhase(this.eggHatchData)); + globalScene.phaseManager.unshiftNew("EggSummaryPhase", this.eggHatchData); this.end(); } diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index cdd17c6d6d6..e3b33122ac2 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -23,15 +23,6 @@ import { BoostBugSpawnModifier, IvScannerModifier, TurnHeldItemTransferModifier import { ModifierPoolType, regenerateModifierPoolThresholds } from "#app/modifier/modifier-type"; import Overrides from "#app/overrides"; import { BattlePhase } from "#app/phases/battle-phase"; -import { CheckSwitchPhase } from "#app/phases/check-switch-phase"; -import { GameOverPhase } from "#app/phases/game-over-phase"; -import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; -import { PostSummonPhase } from "#app/phases/post-summon-phase"; -import { ReturnPhase } from "#app/phases/return-phase"; -import { ScanIvsPhase } from "#app/phases/scan-ivs-phase"; -import { ShinySparklePhase } from "#app/phases/shiny-sparkle-phase"; -import { SummonPhase } from "#app/phases/summon-phase"; -import { ToggleDoublePositionPhase } from "#app/phases/toggle-double-position-phase"; import { achvs } from "#app/system/achv"; import { handleTutorial, Tutorial } from "#app/tutorial"; import { UiMode } from "#enums/ui-mode"; @@ -68,7 +59,7 @@ export class EncounterPhase extends BattlePhase { // Failsafe if players somehow skip floor 200 in classic mode if (globalScene.gameMode.isClassic && globalScene.currentBattle.waveIndex > 200) { - globalScene.phaseManager.unshiftPhase(new GameOverPhase()); + globalScene.phaseManager.unshiftNew("GameOverPhase"); } const loadEnemyAssets: Promise[] = []; @@ -438,9 +429,9 @@ export class EncounterPhase extends BattlePhase { const doTrainerSummon = () => { this.hideEnemyTrainer(); const availablePartyMembers = globalScene.getEnemyParty().filter(p => !p.isFainted()).length; - globalScene.phaseManager.unshiftPhase(new SummonPhase(0, false)); + globalScene.phaseManager.unshiftNew("SummonPhase", 0, false); if (globalScene.currentBattle.double && availablePartyMembers > 1) { - globalScene.phaseManager.unshiftPhase(new SummonPhase(1, false)); + globalScene.phaseManager.unshiftNew("SummonPhase", 1, false); } this.end(); }; @@ -496,7 +487,7 @@ export class EncounterPhase extends BattlePhase { globalScene.ui.clearText(); globalScene.ui.getMessageHandler().hideNameText(); - globalScene.phaseManager.unshiftPhase(new MysteryEncounterPhase()); + globalScene.phaseManager.unshiftNew("MysteryEncounterPhase"); this.end(); }; @@ -554,7 +545,7 @@ export class EncounterPhase extends BattlePhase { enemyField.forEach((enemyPokemon, e) => { if (enemyPokemon.isShiny(true)) { - globalScene.phaseManager.unshiftPhase(new ShinySparklePhase(BattlerIndex.ENEMY + e)); + globalScene.phaseManager.unshiftNew("ShinySparklePhase", BattlerIndex.ENEMY + e); } /** This sets Eternatus' held item to be untransferrable, preventing it from being stolen */ if ( @@ -576,25 +567,31 @@ export class EncounterPhase extends BattlePhase { if (![BattleType.TRAINER, BattleType.MYSTERY_ENCOUNTER].includes(globalScene.currentBattle.battleType)) { enemyField.map(p => - globalScene.phaseManager.pushConditionalPhase(new PostSummonPhase(p.getBattlerIndex()), () => { - // if there is not a player party, we can't continue - if (!globalScene.getPlayerParty().length) { - return false; - } - // how many player pokemon are on the field ? - const pokemonsOnFieldCount = globalScene.getPlayerParty().filter(p => p.isOnField()).length; - // if it's a 2vs1, there will never be a 2nd pokemon on our field even - const requiredPokemonsOnField = Math.min(globalScene.getPlayerParty().filter(p => !p.isFainted()).length, 2); - // if it's a double, there should be 2, otherwise 1 - if (globalScene.currentBattle.double) { - return pokemonsOnFieldCount === requiredPokemonsOnField; - } - return pokemonsOnFieldCount === 1; - }), + globalScene.phaseManager.pushConditionalPhase( + globalScene.phaseManager.create("PostSummonPhase", p.getBattlerIndex()), + () => { + // if there is not a player party, we can't continue + if (!globalScene.getPlayerParty().length) { + return false; + } + // how many player pokemon are on the field ? + const pokemonsOnFieldCount = globalScene.getPlayerParty().filter(p => p.isOnField()).length; + // if it's a 2vs1, there will never be a 2nd pokemon on our field even + const requiredPokemonsOnField = Math.min( + globalScene.getPlayerParty().filter(p => !p.isFainted()).length, + 2, + ); + // if it's a double, there should be 2, otherwise 1 + if (globalScene.currentBattle.double) { + return pokemonsOnFieldCount === requiredPokemonsOnField; + } + return pokemonsOnFieldCount === 1; + }, + ), ); const ivScannerModifier = globalScene.findModifier(m => m instanceof IvScannerModifier); if (ivScannerModifier) { - enemyField.map(p => globalScene.phaseManager.pushPhase(new ScanIvsPhase(p.getBattlerIndex()))); + enemyField.map(p => globalScene.phaseManager.pushNew("ScanIvsPhase", p.getBattlerIndex())); } } @@ -602,21 +599,21 @@ export class EncounterPhase extends BattlePhase { const availablePartyMembers = globalScene.getPokemonAllowedInBattle(); if (!availablePartyMembers[0].isOnField()) { - globalScene.phaseManager.pushPhase(new SummonPhase(0)); + globalScene.phaseManager.pushNew("SummonPhase", 0); } if (globalScene.currentBattle.double) { if (availablePartyMembers.length > 1) { - globalScene.phaseManager.pushPhase(new ToggleDoublePositionPhase(true)); + globalScene.phaseManager.pushNew("ToggleDoublePositionPhase", true); if (!availablePartyMembers[1].isOnField()) { - globalScene.phaseManager.pushPhase(new SummonPhase(1)); + globalScene.phaseManager.pushNew("SummonPhase", 1); } } } else { if (availablePartyMembers.length > 1 && availablePartyMembers[1].isOnField()) { - globalScene.phaseManager.pushPhase(new ReturnPhase(1)); + globalScene.phaseManager.pushNew("ReturnPhase", 1); } - globalScene.phaseManager.pushPhase(new ToggleDoublePositionPhase(false)); + globalScene.phaseManager.pushNew("ToggleDoublePositionPhase", false); } if ( @@ -625,9 +622,9 @@ export class EncounterPhase extends BattlePhase { ) { const minPartySize = globalScene.currentBattle.double ? 2 : 1; if (availablePartyMembers.length > minPartySize) { - globalScene.phaseManager.pushPhase(new CheckSwitchPhase(0, globalScene.currentBattle.double)); + globalScene.phaseManager.pushNew("CheckSwitchPhase", 0, globalScene.currentBattle.double); if (globalScene.currentBattle.double) { - globalScene.phaseManager.pushPhase(new CheckSwitchPhase(1, globalScene.currentBattle.double)); + globalScene.phaseManager.pushNew("CheckSwitchPhase", 1, globalScene.currentBattle.double); } } } diff --git a/src/phases/evolution-phase.ts b/src/phases/evolution-phase.ts index 937a7d31542..eaedb6d32b0 100644 --- a/src/phases/evolution-phase.ts +++ b/src/phases/evolution-phase.ts @@ -14,8 +14,6 @@ import { LearnMoveSituation } from "#app/field/pokemon"; import { getTypeRgb } from "#app/data/type"; import i18next from "i18next"; import { getPokemonNameWithAffix } from "#app/messages"; -import { LearnMovePhase } from "#app/phases/learn-move-phase"; -import { EndEvolutionPhase } from "#app/phases/end-evolution-phase"; import { EVOLVE_MOVE } from "#app/data/balance/pokemon-level-moves"; export class EvolutionPhase extends Phase { @@ -262,7 +260,7 @@ export class EvolutionPhase extends Phase { SoundFade.fadeOut(globalScene, this.evolutionBgm, 100); - globalScene.phaseManager.unshiftPhase(new EndEvolutionPhase()); + globalScene.phaseManager.unshiftNew("EndEvolutionPhase"); globalScene.ui.showText( i18next.t("menu:stoppedEvolving", { @@ -355,11 +353,13 @@ export class EvolutionPhase extends Phase { .getLevelMoves(this.lastLevel + 1, true, false, false, learnSituation) .filter(lm => lm[0] === EVOLVE_MOVE); for (const lm of levelMoves) { - globalScene.phaseManager.unshiftPhase( - new LearnMovePhase(globalScene.getPlayerParty().indexOf(this.pokemon), lm[1]), + globalScene.phaseManager.unshiftNew( + "LearnMovePhase", + globalScene.getPlayerParty().indexOf(this.pokemon), + lm[1], ); } - globalScene.phaseManager.unshiftPhase(new EndEvolutionPhase()); + globalScene.phaseManager.unshiftNew("EndEvolutionPhase"); globalScene.playSound("se/shine"); this.doSpray(); diff --git a/src/phases/exp-phase.ts b/src/phases/exp-phase.ts index 8084ae78221..74768e86186 100644 --- a/src/phases/exp-phase.ts +++ b/src/phases/exp-phase.ts @@ -4,7 +4,6 @@ import { ExpBoosterModifier } from "#app/modifier/modifier"; import i18next from "i18next"; import { NumberHolder } from "#app/utils/common"; import { PlayerPartyMemberPokemonPhase } from "./player-party-member-pokemon-phase"; -import { LevelUpPhase } from "./level-up-phase"; export class ExpPhase extends PlayerPartyMemberPokemonPhase { public readonly phaseName = "ExpPhase"; @@ -34,7 +33,7 @@ export class ExpPhase extends PlayerPartyMemberPokemonPhase { pokemon.addExp(exp.value); const newLevel = pokemon.level; if (newLevel > lastLevel) { - globalScene.phaseManager.unshiftPhase(new LevelUpPhase(this.partyMemberIndex, lastLevel, newLevel)); + globalScene.phaseManager.unshiftNew("LevelUpPhase", this.partyMemberIndex, lastLevel, newLevel); } pokemon.updateInfo().then(() => this.end()); }, diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index 41e21162dbf..38376af4356 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -24,13 +24,7 @@ import { getPokemonNameWithAffix } from "#app/messages"; import { PokemonInstantReviveModifier } from "#app/modifier/modifier"; import { SwitchType } from "#enums/switch-type"; import i18next from "i18next"; -import { DamageAnimPhase } from "./damage-anim-phase"; -import { GameOverPhase } from "./game-over-phase"; import { PokemonPhase } from "./pokemon-phase"; -import { SwitchPhase } from "./switch-phase"; -import { SwitchSummonPhase } from "./switch-summon-phase"; -import { ToggleDoublePositionPhase } from "./toggle-double-position-phase"; -import { VictoryPhase } from "./victory-phase"; import { isNullOrUndefined } from "#app/utils/common"; import { FRIENDSHIP_LOSS_FROM_FAINT } from "#app/data/balance/starters"; import { BattlerTagType } from "#enums/battler-tag-type"; @@ -166,7 +160,7 @@ export class FaintPhase extends PokemonPhase { const legalPlayerPartyPokemon = legalPlayerPokemon.filter(p => !p.isActive(true)); if (!legalPlayerPokemon.length) { /** If the player doesn't have any legal Pokemon, end the game */ - globalScene.phaseManager.unshiftPhase(new GameOverPhase()); + globalScene.phaseManager.unshiftNew("GameOverPhase"); } else if ( globalScene.currentBattle.double && legalPlayerPokemon.length === 1 && @@ -176,25 +170,23 @@ export class FaintPhase extends PokemonPhase { * If the player has exactly one Pokemon in total at this point in a double battle, and that Pokemon * is already on the field, unshift a phase that moves that Pokemon to center position. */ - globalScene.phaseManager.unshiftPhase(new ToggleDoublePositionPhase(true)); + globalScene.phaseManager.unshiftNew("ToggleDoublePositionPhase", true); } else if (legalPlayerPartyPokemon.length > 0) { /** * If previous conditions weren't met, and the player has at least 1 legal Pokemon off the field, * push a phase that prompts the player to summon a Pokemon from their party. */ - globalScene.phaseManager.pushPhase(new SwitchPhase(SwitchType.SWITCH, this.fieldIndex, true, false)); + globalScene.phaseManager.pushNew("SwitchPhase", SwitchType.SWITCH, this.fieldIndex, true, false); } } else { - globalScene.phaseManager.unshiftPhase(new VictoryPhase(this.battlerIndex)); + globalScene.phaseManager.unshiftNew("VictoryPhase", this.battlerIndex); if ([BattleType.TRAINER, BattleType.MYSTERY_ENCOUNTER].includes(globalScene.currentBattle.battleType)) { const hasReservePartyMember = !!globalScene .getEnemyParty() .filter(p => p.isActive() && !p.isOnField() && p.trainerSlot === (pokemon as EnemyPokemon).trainerSlot) .length; if (hasReservePartyMember) { - globalScene.phaseManager.pushPhase( - new SwitchSummonPhase(SwitchType.SWITCH, this.fieldIndex, -1, false, false), - ); + globalScene.phaseManager.pushNew("SwitchSummonPhase", SwitchType.SWITCH, this.fieldIndex, -1, false, false); } } } @@ -249,7 +241,7 @@ export class FaintPhase extends PokemonPhase { } else { // Final boss' HP threshold has been bypassed; cancel faint and force check for 2nd phase enemy.hp++; - globalScene.phaseManager.unshiftPhase(new DamageAnimPhase(enemy.getBattlerIndex(), 0, HitResult.INDIRECT)); + globalScene.phaseManager.unshiftNew("DamageAnimPhase", enemy.getBattlerIndex(), 0, HitResult.INDIRECT); this.end(); } return true; diff --git a/src/phases/form-change-phase.ts b/src/phases/form-change-phase.ts index c0d2a9a11eb..3813359d432 100644 --- a/src/phases/form-change-phase.ts +++ b/src/phases/form-change-phase.ts @@ -7,7 +7,6 @@ import type { PlayerPokemon } from "../field/pokemon"; import { UiMode } from "#enums/ui-mode"; import type PartyUiHandler from "../ui/party-ui-handler"; import { getPokemonNameWithAffix } from "../messages"; -import { EndEvolutionPhase } from "./end-evolution-phase"; import { EvolutionPhase } from "./evolution-phase"; import { BattlerTagType } from "#enums/battler-tag-type"; import { SpeciesFormKey } from "#enums/species-form-key"; @@ -100,7 +99,7 @@ export class FormChangePhase extends EvolutionPhase { globalScene.time.delayedCall(900, () => { this.pokemon.changeForm(this.formChange).then(() => { if (!this.modal) { - globalScene.phaseManager.unshiftPhase(new EndEvolutionPhase()); + globalScene.phaseManager.unshiftNew("EndEvolutionPhase"); } globalScene.playSound("se/shine"); diff --git a/src/phases/game-over-phase.ts b/src/phases/game-over-phase.ts index 166bb955c24..5fabc5cee81 100644 --- a/src/phases/game-over-phase.ts +++ b/src/phases/game-over-phase.ts @@ -9,14 +9,7 @@ import { trainerConfigs } from "#app/data/trainers/trainer-config"; import type Pokemon from "#app/field/pokemon"; import { modifierTypes } from "#app/modifier/modifier-type"; import { BattlePhase } from "#app/phases/battle-phase"; -import { CheckSwitchPhase } from "#app/phases/check-switch-phase"; -import { EncounterPhase } from "#app/phases/encounter-phase"; -import { EndCardPhase } from "#app/phases/end-card-phase"; -import { GameOverModifierRewardPhase } from "#app/phases/game-over-modifier-reward-phase"; -import { PostGameOverPhase } from "#app/phases/post-game-over-phase"; -import { RibbonModifierRewardPhase } from "#app/phases/ribbon-modifier-reward-phase"; -import { SummonPhase } from "#app/phases/summon-phase"; -import { UnlockPhase } from "#app/phases/unlock-phase"; +import type { EndCardPhase } from "#app/phases/end-card-phase"; import { achvs, ChallengeAchv } from "#app/system/achv"; import { Unlockables } from "#app/system/unlockables"; import { UiMode } from "#enums/ui-mode"; @@ -31,7 +24,6 @@ import ChallengeData from "#app/system/challenge-data"; import TrainerData from "#app/system/trainer-data"; import ArenaData from "#app/system/arena-data"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; -import { MessagePhase } from "./message-phase"; export class GameOverPhase extends BattlePhase { public readonly phaseName = "GameOverPhase"; @@ -86,21 +78,21 @@ export class GameOverPhase extends BattlePhase { globalScene.reset(); globalScene.phaseManager.clearPhaseQueue(); globalScene.gameData.loadSession(globalScene.sessionSlotId).then(() => { - globalScene.phaseManager.pushPhase(new EncounterPhase(true)); + globalScene.phaseManager.pushNew("EncounterPhase", true); const availablePartyMembers = globalScene.getPokemonAllowedInBattle().length; - globalScene.phaseManager.pushPhase(new SummonPhase(0)); + globalScene.phaseManager.pushNew("SummonPhase", 0); if (globalScene.currentBattle.double && availablePartyMembers > 1) { - globalScene.phaseManager.pushPhase(new SummonPhase(1)); + globalScene.phaseManager.pushNew("SummonPhase", 1); } if ( globalScene.currentBattle.waveIndex > 1 && globalScene.currentBattle.battleType !== BattleType.TRAINER ) { - globalScene.phaseManager.pushPhase(new CheckSwitchPhase(0, globalScene.currentBattle.double)); + globalScene.phaseManager.pushNew("CheckSwitchPhase", 0, globalScene.currentBattle.double); if (globalScene.currentBattle.double && availablePartyMembers > 1) { - globalScene.phaseManager.pushPhase(new CheckSwitchPhase(1, globalScene.currentBattle.double)); + globalScene.phaseManager.pushNew("CheckSwitchPhase", 1, globalScene.currentBattle.double); } } @@ -160,17 +152,15 @@ export class GameOverPhase extends BattlePhase { this.handleUnlocks(); for (const species of this.firstRibbons) { - globalScene.phaseManager.unshiftPhase( - new RibbonModifierRewardPhase(modifierTypes.VOUCHER_PLUS, species), - ); + globalScene.phaseManager.unshiftNew("RibbonModifierRewardPhase", modifierTypes.VOUCHER_PLUS, species); } if (!firstClear) { - globalScene.phaseManager.unshiftPhase(new GameOverModifierRewardPhase(modifierTypes.VOUCHER_PREMIUM)); + globalScene.phaseManager.unshiftNew("GameOverModifierRewardPhase", modifierTypes.VOUCHER_PREMIUM); } } this.getRunHistoryEntry().then(runHistoryEntry => { globalScene.gameData.saveRunHistory(runHistoryEntry, this.isVictory); - globalScene.phaseManager.pushPhase(new PostGameOverPhase(endCardPhase)); + globalScene.phaseManager.pushNew("PostGameOverPhase", endCardPhase); this.end(); }); }; @@ -199,7 +189,7 @@ export class GameOverPhase extends BattlePhase { () => { globalScene.ui.fadeOut(500).then(() => { globalScene.charSprite.hide().then(() => { - const endCardPhase = new EndCardPhase(); + const endCardPhase = globalScene.phaseManager.create("EndCardPhase"); globalScene.phaseManager.unshiftPhase(endCardPhase); clear(endCardPhase); }); @@ -209,7 +199,7 @@ export class GameOverPhase extends BattlePhase { }); }); } else { - const endCardPhase = new EndCardPhase(); + const endCardPhase = globalScene.phaseManager.create("EndCardPhase"); globalScene.phaseManager.unshiftPhase(endCardPhase); clear(endCardPhase); } @@ -234,7 +224,7 @@ export class GameOverPhase extends BattlePhase { .catch(_err => { globalScene.phaseManager.clearPhaseQueue(); globalScene.phaseManager.clearPhaseQueueSplice(); - globalScene.phaseManager.unshiftPhase(new MessagePhase(i18next.t("menu:serverCommunicationFailed"), 2500)); + globalScene.phaseManager.unshiftNew("MessagePhase", i18next.t("menu:serverCommunicationFailed"), 2500); // force the game to reload after 2 seconds. setTimeout(() => { window.location.reload(); @@ -253,22 +243,22 @@ export class GameOverPhase extends BattlePhase { handleUnlocks(): void { if (this.isVictory && globalScene.gameMode.isClassic) { if (!globalScene.gameData.unlocks[Unlockables.ENDLESS_MODE]) { - globalScene.phaseManager.unshiftPhase(new UnlockPhase(Unlockables.ENDLESS_MODE)); + globalScene.phaseManager.unshiftNew("UnlockPhase", Unlockables.ENDLESS_MODE); } if ( globalScene.getPlayerParty().filter(p => p.fusionSpecies).length && !globalScene.gameData.unlocks[Unlockables.SPLICED_ENDLESS_MODE] ) { - globalScene.phaseManager.unshiftPhase(new UnlockPhase(Unlockables.SPLICED_ENDLESS_MODE)); + globalScene.phaseManager.unshiftNew("UnlockPhase", Unlockables.SPLICED_ENDLESS_MODE); } if (!globalScene.gameData.unlocks[Unlockables.MINI_BLACK_HOLE]) { - globalScene.phaseManager.unshiftPhase(new UnlockPhase(Unlockables.MINI_BLACK_HOLE)); + globalScene.phaseManager.unshiftNew("UnlockPhase", Unlockables.MINI_BLACK_HOLE); } if ( !globalScene.gameData.unlocks[Unlockables.EVIOLITE] && globalScene.getPlayerParty().some(p => p.getSpeciesForm(true).speciesId in pokemonEvolutions) ) { - globalScene.phaseManager.unshiftPhase(new UnlockPhase(Unlockables.EVIOLITE)); + globalScene.phaseManager.unshiftNew("UnlockPhase", Unlockables.EVIOLITE); } } } diff --git a/src/phases/level-up-phase.ts b/src/phases/level-up-phase.ts index b3b82f13f42..c78a1798304 100644 --- a/src/phases/level-up-phase.ts +++ b/src/phases/level-up-phase.ts @@ -2,8 +2,6 @@ import { globalScene } from "#app/global-scene"; import { ExpNotification } from "#app/enums/exp-notification"; import type { PlayerPokemon } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; -import { EvolutionPhase } from "#app/phases/evolution-phase"; -import { LearnMovePhase } from "#app/phases/learn-move-phase"; import { PlayerPartyMemberPokemonPhase } from "#app/phases/player-party-member-pokemon-phase"; import { LevelAchv } from "#app/system/achv"; import { NumberHolder } from "#app/utils/common"; @@ -66,14 +64,14 @@ export class LevelUpPhase extends PlayerPartyMemberPokemonPhase { // this feels like an unnecessary optimization const levelMoves = this.getPokemon().getLevelMoves(this.lastLevel + 1); for (const lm of levelMoves) { - globalScene.phaseManager.unshiftPhase(new LearnMovePhase(this.partyMemberIndex, lm[1])); + globalScene.phaseManager.unshiftNew("LearnMovePhase", this.partyMemberIndex, lm[1]); } } if (!this.pokemon.pauseEvolutions) { const evolution = this.pokemon.getEvolution(); if (evolution) { this.pokemon.breakIllusion(); - globalScene.phaseManager.unshiftPhase(new EvolutionPhase(this.pokemon, evolution, this.lastLevel)); + globalScene.phaseManager.unshiftNew("EvolutionPhase", this.pokemon, evolution, this.lastLevel); } } return super.end(); diff --git a/src/phases/login-phase.ts b/src/phases/login-phase.ts index 5e1728d4415..de426866baa 100644 --- a/src/phases/login-phase.ts +++ b/src/phases/login-phase.ts @@ -7,8 +7,6 @@ import { UiMode } from "#enums/ui-mode"; import i18next, { t } from "i18next"; import { sessionIdKey, executeIf } from "#app/utils/common"; import { getCookie, removeCookie } from "#app/utils/cookies"; -import { SelectGenderPhase } from "./select-gender-phase"; -import { UnavailablePhase } from "./unavailable-phase"; export class LoginPhase extends Phase { public readonly phaseName = "LoginPhase"; @@ -70,7 +68,7 @@ export class LoginPhase extends Phase { }); }, () => { - globalScene.phaseManager.unshiftPhase(new LoginPhase(false)); + globalScene.phaseManager.unshiftNew("LoginPhase", false); this.end(); }, ], @@ -94,7 +92,7 @@ export class LoginPhase extends Phase { removeCookie(sessionIdKey); globalScene.reset(true, true); } else { - globalScene.phaseManager.unshiftPhase(new UnavailablePhase()); + globalScene.phaseManager.unshiftNew("UnavailablePhase"); super.end(); } return null; @@ -114,7 +112,7 @@ export class LoginPhase extends Phase { globalScene.ui.setMode(UiMode.MESSAGE); if (!globalScene.gameData.gender) { - globalScene.phaseManager.unshiftPhase(new SelectGenderPhase()); + globalScene.phaseManager.unshiftNew("SelectGenderPhase"); } handleTutorial(Tutorial.Intro).then(() => super.end()); diff --git a/src/phases/message-phase.ts b/src/phases/message-phase.ts index 2a485d837b0..61f9b74a037 100644 --- a/src/phases/message-phase.ts +++ b/src/phases/message-phase.ts @@ -44,8 +44,13 @@ export class MessagePhase extends Phase { page0 = page0.split(repname[p]).join(pokename[p]); page1 = page1.split(repname[p]).join(pokename[p]); } - globalScene.phaseManager.unshiftPhase( - new MessagePhase(page1, this.callbackDelay, this.prompt, this.promptDelay, this.speaker), + globalScene.phaseManager.unshiftNew( + "MessagePhase", + page1, + this.callbackDelay, + this.prompt, + this.promptDelay, + this.speaker, ); this.text = page0.trim(); } else { diff --git a/src/phases/move-charge-phase.ts b/src/phases/move-charge-phase.ts index 263306acbf2..a481f4e37b8 100644 --- a/src/phases/move-charge-phase.ts +++ b/src/phases/move-charge-phase.ts @@ -6,7 +6,6 @@ import type { PokemonMove } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { MoveResult } from "#app/field/pokemon"; import { BooleanHolder } from "#app/utils/common"; -import { MovePhase } from "#app/phases/move-phase"; import { PokemonPhase } from "#app/phases/pokemon-phase"; import { BattlerTagType } from "#enums/battler-tag-type"; @@ -64,7 +63,7 @@ export class MoveChargePhase extends PokemonPhase { // this MoveEndPhase will be duplicated by the queued MovePhase if not removed globalScene.phaseManager.tryRemovePhase(phase => phase.is("MoveEndPhase") && phase.getPokemon() === user); // queue a new MovePhase for this move's attack phase - globalScene.phaseManager.unshiftPhase(new MovePhase(user, [this.targetIndex], this.move, false)); + globalScene.phaseManager.unshiftNew("MovePhase", user, [this.targetIndex], this.move, false); } else { user.getMoveQueue().push({ move: move.id, targets: [this.targetIndex] }); } diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index e135f5bd161..e0fa381447b 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -68,15 +68,10 @@ import { BattlerTagType } from "#enums/battler-tag-type"; import { MoveId } from "#enums/move-id"; import i18next from "i18next"; import type { Phase } from "#app/phase"; -import { ShowAbilityPhase } from "./show-ability-phase"; -import { MovePhase } from "./move-phase"; -import { MoveEndPhase } from "./move-end-phase"; -import { HideAbilityPhase } from "#app/phases/hide-ability-phase"; import type { TypeDamageMultiplier } from "#app/data/type"; import { HitCheckResult } from "#enums/hit-check-result"; import type Move from "#app/data/moves/move"; import { isFieldTargeted } from "#app/data/moves/move-utils"; -import { FaintPhase } from "./faint-phase"; import { DamageAchv } from "#app/system/achv"; type HitCheckEntry = [HitCheckResult, TypeDamageMultiplier]; @@ -191,13 +186,25 @@ export class MoveEffectPhase extends PokemonPhase { // TODO: ability displays should be handled by the ability if (!target.getTag(BattlerTagType.MAGIC_COAT)) { this.queuedPhases.push( - new ShowAbilityPhase(target.getBattlerIndex(), target.getPassiveAbility().hasAttr(ReflectStatusMoveAbAttr)), + globalScene.phaseManager.create( + "ShowAbilityPhase", + target.getBattlerIndex(), + target.getPassiveAbility().hasAttr(ReflectStatusMoveAbAttr), + ), ); - this.queuedPhases.push(new HideAbilityPhase()); + this.queuedPhases.push(globalScene.phaseManager.create("HideAbilityPhase")); } this.queuedPhases.push( - new MovePhase(target, newTargets, new PokemonMove(this.move.id, 0, 0, true), true, true, true), + globalScene.phaseManager.create( + "MovePhase", + target, + newTargets, + new PokemonMove(this.move.id, 0, 0, true), + true, + true, + true, + ), ); } @@ -384,7 +391,7 @@ export class MoveEffectPhase extends PokemonPhase { } if (this.queuedPhases.length) { - globalScene.phaseManager.appendToPhase(this.queuedPhases, MoveEndPhase); + globalScene.phaseManager.appendToPhase(this.queuedPhases, "MoveEndPhase"); } const moveType = user.getMoveType(this.move, true); if (this.move.category !== MoveCategory.STATUS && !user.stellarTypesBoosted.includes(moveType)) { @@ -903,7 +910,7 @@ export class MoveEffectPhase extends PokemonPhase { // set splice index here, so future scene queues happen before FaintedPhase globalScene.phaseManager.setPhaseQueueSplice(); - globalScene.phaseManager.unshiftPhase(new FaintPhase(target.getBattlerIndex(), false, user)); + globalScene.phaseManager.unshiftNew("FaintPhase", target.getBattlerIndex(), false, user); target.destroySubstitute(); target.lapseTag(BattlerTagType.COMMANDED); diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index 03f94ad3d1d..7fc6a86e3f7 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -39,10 +39,6 @@ import { MoveResult } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import Overrides from "#app/overrides"; import { BattlePhase } from "#app/phases/battle-phase"; -import { CommonAnimPhase } from "#app/phases/common-anim-phase"; -import { MoveChargePhase } from "#app/phases/move-charge-phase"; -import { MoveEffectPhase } from "#app/phases/move-effect-phase"; -import { MoveEndPhase } from "#app/phases/move-end-phase"; import { NumberHolder } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; @@ -271,12 +267,11 @@ export class MovePhase extends BattlePhase { globalScene.phaseManager.queueMessage( getStatusEffectActivationText(this.pokemon.status.effect, getPokemonNameWithAffix(this.pokemon)), ); - globalScene.phaseManager.unshiftPhase( - new CommonAnimPhase( - this.pokemon.getBattlerIndex(), - undefined, - CommonAnim.POISON + (this.pokemon.status.effect - 1), - ), + globalScene.phaseManager.unshiftNew( + "CommonAnimPhase", + this.pokemon.getBattlerIndex(), + undefined, + CommonAnim.POISON + (this.pokemon.status.effect - 1), ); } else if (healed) { globalScene.phaseManager.queueMessage( @@ -407,8 +402,13 @@ export class MovePhase extends BattlePhase { if (success) { const move = this.move.getMove(); applyPreAttackAbAttrs(PokemonTypeChangeAbAttr, this.pokemon, null, move); - globalScene.phaseManager.unshiftPhase( - new MoveEffectPhase(this.pokemon.getBattlerIndex(), this.targets, move, this.reflected, this.move.virtual), + globalScene.phaseManager.unshiftNew( + "MoveEffectPhase", + this.pokemon.getBattlerIndex(), + this.targets, + move, + this.reflected, + this.move.virtual, ); } else { if ([MoveId.ROAR, MoveId.WHIRLWIND, MoveId.TRICK_OR_TREAT, MoveId.FORESTS_CURSE].includes(this.move.moveId)) { @@ -457,8 +457,11 @@ export class MovePhase extends BattlePhase { applyPreAttackAbAttrs(PokemonTypeChangeAbAttr, this.pokemon, null, this.move.getMove()); this.showMoveText(); - globalScene.phaseManager.unshiftPhase( - new MoveChargePhase(this.pokemon.getBattlerIndex(), this.targets[0], this.move), + globalScene.phaseManager.unshiftNew( + "MoveChargePhase", + this.pokemon.getBattlerIndex(), + this.targets[0], + this.move, ); } else { this.pokemon.pushMoveHistory({ @@ -481,8 +484,11 @@ export class MovePhase extends BattlePhase { * Queues a {@linkcode MoveEndPhase} and then ends the phase */ public end(): void { - globalScene.phaseManager.unshiftPhase( - new MoveEndPhase(this.pokemon.getBattlerIndex(), this.getActiveTargetPokemon(), this.followUp), + globalScene.phaseManager.unshiftNew( + "MoveEndPhase", + this.pokemon.getBattlerIndex(), + this.getActiveTargetPokemon(), + this.followUp, ); super.end(); diff --git a/src/phases/mystery-encounter-phases.ts b/src/phases/mystery-encounter-phases.ts index b1ca11d45a5..1f27db7ff64 100644 --- a/src/phases/mystery-encounter-phases.ts +++ b/src/phases/mystery-encounter-phases.ts @@ -3,15 +3,6 @@ import type { OptionPhaseCallback } from "#app/data/mystery-encounters/mystery-e import type MysteryEncounterOption from "#app/data/mystery-encounters/mystery-encounter-option"; import { SeenEncounterData } from "#app/data/mystery-encounters/mystery-encounter-save-data"; import { getEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; -import { CheckSwitchPhase } from "#app/phases/check-switch-phase"; -import { GameOverPhase } from "#app/phases/game-over-phase"; -import { NewBattlePhase } from "#app/phases/new-battle-phase"; -import { ReturnPhase } from "#app/phases/return-phase"; -import { ScanIvsPhase } from "#app/phases/scan-ivs-phase"; -import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; -import { SummonPhase } from "#app/phases/summon-phase"; -import { SwitchPhase } from "#app/phases/switch-phase"; -import { ToggleDoublePositionPhase } from "#app/phases/toggle-double-position-phase"; import { BattleSpec } from "#enums/battle-spec"; import { BattlerTagType } from "#enums/battler-tag-type"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; @@ -26,7 +17,6 @@ import { IvScannerModifier } from "../modifier/modifier"; import { Phase } from "../phase"; import { UiMode } from "#enums/ui-mode"; import { isNullOrUndefined, randSeedItem } from "#app/utils/common"; -import { SelectBiomePhase } from "./select-biome-phase"; /** * Will handle (in order): @@ -124,7 +114,7 @@ export class MysteryEncounterPhase extends Phase { */ continueEncounter() { const endDialogueAndContinueEncounter = () => { - globalScene.phaseManager.pushPhase(new MysteryEncounterOptionSelectedPhase()); + globalScene.phaseManager.pushNew("MysteryEncounterOptionSelectedPhase"); this.end(); }; @@ -256,7 +246,7 @@ export class MysteryEncounterBattleStartCleanupPhase extends Phase { // The total number of legal player Pokemon that aren't currently on the field const legalPlayerPartyPokemon = legalPlayerPokemon.filter(p => !p.isActive(true)); if (!legalPlayerPokemon.length) { - globalScene.phaseManager.unshiftPhase(new GameOverPhase()); + globalScene.phaseManager.unshiftNew("GameOverPhase"); return this.end(); } @@ -265,13 +255,13 @@ export class MysteryEncounterBattleStartCleanupPhase extends Phase { const playerField = globalScene.getPlayerField(); playerField.forEach((pokemon, i) => { if (!pokemon.isAllowedInBattle() && legalPlayerPartyPokemon.length > i) { - globalScene.phaseManager.unshiftPhase(new SwitchPhase(SwitchType.SWITCH, i, true, false)); + globalScene.phaseManager.unshiftNew("SwitchPhase", SwitchType.SWITCH, i, true, false); } }); // THEN, if is a double battle, and player only has 1 summoned pokemon, center pokemon on field if (globalScene.currentBattle.double && legalPlayerPokemon.length === 1 && legalPlayerPartyPokemon.length === 0) { - globalScene.phaseManager.unshiftPhase(new ToggleDoublePositionPhase(true)); + globalScene.phaseManager.unshiftNew("ToggleDoublePositionPhase", true); } this.end(); @@ -348,9 +338,9 @@ export class MysteryEncounterBattlePhase extends Phase { globalScene.playBgm(); } const availablePartyMembers = globalScene.getEnemyParty().filter(p => !p.isFainted()).length; - globalScene.phaseManager.unshiftPhase(new SummonPhase(0, false)); + globalScene.phaseManager.unshiftNew("SummonPhase", 0, false); if (globalScene.currentBattle.double && availablePartyMembers > 1) { - globalScene.phaseManager.unshiftPhase(new SummonPhase(1, false)); + globalScene.phaseManager.unshiftNew("SummonPhase", 1, false); } if (!globalScene.currentBattle.mysteryEncounter?.hideBattleIntroMessage) { @@ -368,9 +358,9 @@ export class MysteryEncounterBattlePhase extends Phase { const doTrainerSummon = () => { this.hideEnemyTrainer(); const availablePartyMembers = globalScene.getEnemyParty().filter(p => !p.isFainted()).length; - globalScene.phaseManager.unshiftPhase(new SummonPhase(0, false)); + globalScene.phaseManager.unshiftNew("SummonPhase", 0, false); if (globalScene.currentBattle.double && availablePartyMembers > 1) { - globalScene.phaseManager.unshiftPhase(new SummonPhase(1, false)); + globalScene.phaseManager.unshiftNew("SummonPhase", 1, false); } this.endBattleSetup(); }; @@ -426,37 +416,37 @@ export class MysteryEncounterBattlePhase extends Phase { if (encounterMode !== MysteryEncounterMode.TRAINER_BATTLE) { const ivScannerModifier = globalScene.findModifier(m => m instanceof IvScannerModifier); if (ivScannerModifier) { - enemyField.map(p => globalScene.phaseManager.pushPhase(new ScanIvsPhase(p.getBattlerIndex()))); + enemyField.map(p => globalScene.phaseManager.pushNew("ScanIvsPhase", p.getBattlerIndex())); } } const availablePartyMembers = globalScene.getPlayerParty().filter(p => p.isAllowedInBattle()); if (!availablePartyMembers[0].isOnField()) { - globalScene.phaseManager.pushPhase(new SummonPhase(0)); + globalScene.phaseManager.pushNew("SummonPhase", 0); } if (globalScene.currentBattle.double) { if (availablePartyMembers.length > 1) { - globalScene.phaseManager.pushPhase(new ToggleDoublePositionPhase(true)); + globalScene.phaseManager.pushNew("ToggleDoublePositionPhase", true); if (!availablePartyMembers[1].isOnField()) { - globalScene.phaseManager.pushPhase(new SummonPhase(1)); + globalScene.phaseManager.pushNew("SummonPhase", 1); } } } else { if (availablePartyMembers.length > 1 && availablePartyMembers[1].isOnField()) { globalScene.getPlayerField().forEach(pokemon => pokemon.lapseTag(BattlerTagType.COMMANDED)); - globalScene.phaseManager.pushPhase(new ReturnPhase(1)); + globalScene.phaseManager.pushNew("ReturnPhase", 1); } - globalScene.phaseManager.pushPhase(new ToggleDoublePositionPhase(false)); + globalScene.phaseManager.pushNew("ToggleDoublePositionPhase", false); } if (encounterMode !== MysteryEncounterMode.TRAINER_BATTLE && !this.disableSwitch) { const minPartySize = globalScene.currentBattle.double ? 2 : 1; if (availablePartyMembers.length > minPartySize) { - globalScene.phaseManager.pushPhase(new CheckSwitchPhase(0, globalScene.currentBattle.double)); + globalScene.phaseManager.pushNew("CheckSwitchPhase", 0, globalScene.currentBattle.double); if (globalScene.currentBattle.double) { - globalScene.phaseManager.pushPhase(new CheckSwitchPhase(1, globalScene.currentBattle.double)); + globalScene.phaseManager.pushNew("CheckSwitchPhase", 1, globalScene.currentBattle.double); } } } @@ -563,15 +553,13 @@ export class MysteryEncounterRewardsPhase extends Phase { encounter.doEncounterRewards(); } else if (this.addHealPhase) { globalScene.phaseManager.tryRemovePhase(p => p.is("SelectModifierPhase")); - globalScene.phaseManager.unshiftPhase( - new SelectModifierPhase(0, undefined, { - fillRemaining: false, - rerollMultiplier: -1, - }), - ); + globalScene.phaseManager.unshiftNew("SelectModifierPhase", 0, undefined, { + fillRemaining: false, + rerollMultiplier: -1, + }); } - globalScene.phaseManager.pushPhase(new PostMysteryEncounterPhase()); + globalScene.phaseManager.pushNew("PostMysteryEncounterPhase"); this.end(); } } @@ -618,10 +606,10 @@ export class PostMysteryEncounterPhase extends Phase { continueEncounter() { const endPhase = () => { if (globalScene.gameMode.hasRandomBiomes || globalScene.isNewBiome()) { - globalScene.phaseManager.pushPhase(new SelectBiomePhase()); + globalScene.phaseManager.pushNew("SelectBiomePhase"); } - globalScene.phaseManager.pushPhase(new NewBattlePhase()); + globalScene.phaseManager.pushNew("NewBattlePhase"); this.end(); }; diff --git a/src/phases/post-game-over-phase.ts b/src/phases/post-game-over-phase.ts index 37a3297cc52..8e19dcd5498 100644 --- a/src/phases/post-game-over-phase.ts +++ b/src/phases/post-game-over-phase.ts @@ -1,7 +1,6 @@ import { globalScene } from "#app/global-scene"; import { Phase } from "#app/phase"; import type { EndCardPhase } from "./end-card-phase"; -import { TitlePhase } from "./title-phase"; export class PostGameOverPhase extends Phase { public readonly phaseName = "PostGameOverPhase"; @@ -28,7 +27,7 @@ export class PostGameOverPhase extends Phase { return globalScene.reset(true); } globalScene.reset(); - globalScene.phaseManager.unshiftPhase(new TitlePhase()); + globalScene.phaseManager.unshiftNew("TitlePhase"); this.end(); }); }); diff --git a/src/phases/quiet-form-change-phase.ts b/src/phases/quiet-form-change-phase.ts index 363b026831f..6b65c2a5140 100644 --- a/src/phases/quiet-form-change-phase.ts +++ b/src/phases/quiet-form-change-phase.ts @@ -9,7 +9,6 @@ import type Pokemon from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { BattlePhase } from "./battle-phase"; import type { MovePhase } from "./move-phase"; -import { PokemonHealPhase } from "./pokemon-heal-phase"; import { applyAbAttrs, ClearTerrainAbAttr, @@ -159,8 +158,15 @@ export class QuietFormChangePhase extends BattlePhase { this.pokemon.findAndRemoveTags(t => t.tagType === BattlerTagType.AUTOTOMIZED); if (globalScene?.currentBattle.battleSpec === BattleSpec.FINAL_BOSS && this.pokemon.isEnemy()) { globalScene.playBgm(); - globalScene.phaseManager.unshiftPhase( - new PokemonHealPhase(this.pokemon.getBattlerIndex(), this.pokemon.getMaxHp(), null, false, false, false, true), + globalScene.phaseManager.unshiftNew( + "PokemonHealPhase", + this.pokemon.getBattlerIndex(), + this.pokemon.getMaxHp(), + null, + false, + false, + false, + true, ); this.pokemon.findAndRemoveTags(() => true); this.pokemon.bossSegments = 5; diff --git a/src/phases/revival-blessing-phase.ts b/src/phases/revival-blessing-phase.ts index 2db73103a88..e3e69f7ef25 100644 --- a/src/phases/revival-blessing-phase.ts +++ b/src/phases/revival-blessing-phase.ts @@ -6,8 +6,6 @@ import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; import { toDmgValue, isNullOrUndefined } from "#app/utils/common"; import { BattlePhase } from "#app/phases/battle-phase"; -import { SwitchSummonPhase } from "#app/phases/switch-summon-phase"; -import { ToggleDoublePositionPhase } from "#app/phases/toggle-double-position-phase"; import type { PlayerPokemon } from "#app/field/pokemon"; /** @@ -51,16 +49,26 @@ export class RevivalBlessingPhase extends BattlePhase { ) { if (slotIndex <= 1) { // Revived ally pokemon - globalScene.phaseManager.unshiftPhase( - new SwitchSummonPhase(SwitchType.SWITCH, pokemon.getFieldIndex(), slotIndex, false, true), + globalScene.phaseManager.unshiftNew( + "SwitchSummonPhase", + SwitchType.SWITCH, + pokemon.getFieldIndex(), + slotIndex, + false, + true, ); - globalScene.phaseManager.unshiftPhase(new ToggleDoublePositionPhase(true)); + globalScene.phaseManager.unshiftNew("ToggleDoublePositionPhase", true); } else if (allyPokemon.isFainted()) { // Revived party pokemon, and ally pokemon is fainted - globalScene.phaseManager.unshiftPhase( - new SwitchSummonPhase(SwitchType.SWITCH, allyPokemon.getFieldIndex(), slotIndex, false, true), + globalScene.phaseManager.unshiftNew( + "SwitchSummonPhase", + SwitchType.SWITCH, + allyPokemon.getFieldIndex(), + slotIndex, + false, + true, ); - globalScene.phaseManager.unshiftPhase(new ToggleDoublePositionPhase(true)); + globalScene.phaseManager.unshiftNew("ToggleDoublePositionPhase", true); } } } diff --git a/src/phases/select-biome-phase.ts b/src/phases/select-biome-phase.ts index 633bf20d34c..e8b4946b6d1 100644 --- a/src/phases/select-biome-phase.ts +++ b/src/phases/select-biome-phase.ts @@ -6,8 +6,6 @@ import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler" import { UiMode } from "#enums/ui-mode"; import { BattlePhase } from "./battle-phase"; import { randSeedInt } from "#app/utils/common"; -import { PartyHealPhase } from "./party-heal-phase"; -import { SwitchBiomePhase } from "./switch-biome-phase"; export class SelectBiomePhase extends BattlePhase { public readonly phaseName = "SelectBiomePhase"; @@ -22,9 +20,9 @@ export class SelectBiomePhase extends BattlePhase { const setNextBiome = (nextBiome: BiomeId) => { if (nextWaveIndex % 10 === 1) { globalScene.applyModifiers(MoneyInterestModifier, true); - globalScene.phaseManager.unshiftPhase(new PartyHealPhase(false)); + globalScene.phaseManager.unshiftNew("PartyHealPhase", false); } - globalScene.phaseManager.unshiftPhase(new SwitchBiomePhase(nextBiome)); + globalScene.phaseManager.unshiftNew("SwitchBiomePhase", nextBiome); this.end(); }; diff --git a/src/phases/select-modifier-phase.ts b/src/phases/select-modifier-phase.ts index 5ac3b9e6d76..4d790e70e1b 100644 --- a/src/phases/select-modifier-phase.ts +++ b/src/phases/select-modifier-phase.ts @@ -123,11 +123,10 @@ export class SelectModifierPhase extends BattlePhase { return false; } globalScene.reroll = true; - globalScene.phaseManager.unshiftPhase( - new SelectModifierPhase( - this.rerollCount + 1, - this.typeOptions.map(o => o.type?.tier).filter(t => t !== undefined) as ModifierTier[], - ), + globalScene.phaseManager.unshiftNew( + "SelectModifierPhase", + this.rerollCount + 1, + this.typeOptions.map(o => o.type?.tier).filter(t => t !== undefined) as ModifierTier[], ); globalScene.ui.clearText(); globalScene.ui.setMode(UiMode.MESSAGE).then(() => super.end()); @@ -419,7 +418,8 @@ export class SelectModifierPhase extends BattlePhase { } copy(): SelectModifierPhase { - return new SelectModifierPhase( + return globalScene.phaseManager.create( + "SelectModifierPhase", this.rerollCount, this.modifierTiers, { diff --git a/src/phases/select-starter-phase.ts b/src/phases/select-starter-phase.ts index 2b60fcaf054..88d4fe06a9b 100644 --- a/src/phases/select-starter-phase.ts +++ b/src/phases/select-starter-phase.ts @@ -6,7 +6,6 @@ import { getPokemonSpecies } from "#app/data/pokemon-species"; import { overrideHeldItems, overrideModifiers } from "#app/modifier/modifier"; import Overrides from "#app/overrides"; import { Phase } from "#app/phase"; -import { TitlePhase } from "#app/phases/title-phase"; import { SaveSlotUiMode } from "#app/ui/save-slot-select-ui-handler"; import type { Starter } from "#app/ui/starter-select-ui-handler"; import { UiMode } from "#enums/ui-mode"; @@ -26,7 +25,7 @@ export class SelectStarterPhase extends Phase { globalScene.ui.setMode(UiMode.SAVE_SLOT, SaveSlotUiMode.SAVE, (slotId: number) => { if (slotId === -1) { globalScene.phaseManager.clearPhaseQueue(); - globalScene.phaseManager.pushPhase(new TitlePhase()); + globalScene.phaseManager.pushNew("TitlePhase"); return this.end(); } globalScene.sessionSlotId = slotId; diff --git a/src/phases/select-target-phase.ts b/src/phases/select-target-phase.ts index 515f7ed98ca..fcbd3aeb679 100644 --- a/src/phases/select-target-phase.ts +++ b/src/phases/select-target-phase.ts @@ -2,7 +2,6 @@ import { globalScene } from "#app/global-scene"; import type { BattlerIndex } from "#app/battle"; import { Command } from "#app/ui/command-ui-handler"; import { UiMode } from "#enums/ui-mode"; -import { CommandPhase } from "./command-phase"; import { PokemonPhase } from "./pokemon-phase"; import i18next from "#app/plugins/i18n"; import { allMoves } from "#app/data/data-lists"; @@ -33,7 +32,7 @@ export class SelectTargetPhase extends PokemonPhase { } if (targets.length < 1) { globalScene.currentBattle.turnCommands[this.fieldIndex] = null; - globalScene.phaseManager.unshiftPhase(new CommandPhase(this.fieldIndex)); + globalScene.phaseManager.unshiftNew("CommandPhase", this.fieldIndex); } else { turnCommand!.targets = targets; //TODO: is the bang correct here? } diff --git a/src/phases/show-ability-phase.ts b/src/phases/show-ability-phase.ts index e4be6124784..af295b72622 100644 --- a/src/phases/show-ability-phase.ts +++ b/src/phases/show-ability-phase.ts @@ -2,7 +2,6 @@ import { globalScene } from "#app/global-scene"; import type { BattlerIndex } from "#app/battle"; import { PokemonPhase } from "./pokemon-phase"; import { getPokemonNameWithAffix } from "#app/messages"; -import { HideAbilityPhase } from "#app/phases/hide-ability-phase"; export class ShowAbilityPhase extends PokemonPhase { public readonly phaseName = "ShowAbilityPhase"; @@ -36,8 +35,8 @@ export class ShowAbilityPhase extends PokemonPhase { // If the bar is already out, hide it before showing the new one if (globalScene.abilityBar.isVisible()) { - globalScene.phaseManager.unshiftPhase(new HideAbilityPhase()); - globalScene.phaseManager.unshiftPhase(new ShowAbilityPhase(this.battlerIndex, this.passive)); + globalScene.phaseManager.unshiftNew("HideAbilityPhase"); + globalScene.phaseManager.unshiftNew("ShowAbilityPhase", this.battlerIndex, this.passive); return this.end(); } diff --git a/src/phases/show-party-exp-bar-phase.ts b/src/phases/show-party-exp-bar-phase.ts index 765bd498f66..4849526b639 100644 --- a/src/phases/show-party-exp-bar-phase.ts +++ b/src/phases/show-party-exp-bar-phase.ts @@ -3,8 +3,6 @@ import { ExpGainsSpeed } from "#app/enums/exp-gains-speed"; import { ExpNotification } from "#app/enums/exp-notification"; import { ExpBoosterModifier } from "#app/modifier/modifier"; import { NumberHolder } from "#app/utils/common"; -import { HidePartyExpBarPhase } from "./hide-party-exp-bar-phase"; -import { LevelUpPhase } from "./level-up-phase"; import { PlayerPartyMemberPokemonPhase } from "./player-party-member-pokemon-phase"; export class ShowPartyExpBarPhase extends PlayerPartyMemberPokemonPhase { @@ -29,9 +27,9 @@ export class ShowPartyExpBarPhase extends PlayerPartyMemberPokemonPhase { pokemon.addExp(exp.value); const newLevel = pokemon.level; if (newLevel > lastLevel) { - globalScene.phaseManager.unshiftPhase(new LevelUpPhase(this.partyMemberIndex, lastLevel, newLevel)); + globalScene.phaseManager.unshiftNew("LevelUpPhase", this.partyMemberIndex, lastLevel, newLevel); } - globalScene.phaseManager.unshiftPhase(new HidePartyExpBarPhase()); + globalScene.phaseManager.unshiftNew("HidePartyExpBarPhase"); pokemon.updateInfo(); if (globalScene.expParty === ExpNotification.SKIP) { diff --git a/src/phases/stat-stage-change-phase.ts b/src/phases/stat-stage-change-phase.ts index 49f3952ef01..ad2eeae1c48 100644 --- a/src/phases/stat-stage-change-phase.ts +++ b/src/phases/stat-stage-change-phase.ts @@ -72,18 +72,17 @@ export class StatStageChangePhase extends PokemonPhase { if (this.stats.length > 1) { for (let i = 0; i < this.stats.length; i++) { const stat = [this.stats[i]]; - globalScene.phaseManager.unshiftPhase( - new StatStageChangePhase( - this.battlerIndex, - this.selfTarget, - stat, - this.stages, - this.showMessage, - this.ignoreAbilities, - this.canBeCopied, - this.onChange, - this.comingFromMirrorArmorUser, - ), + globalScene.phaseManager.unshiftNew( + "StatStageChangePhase", + this.battlerIndex, + this.selfTarget, + stat, + this.stages, + this.showMessage, + this.ignoreAbilities, + this.canBeCopied, + this.onChange, + this.comingFromMirrorArmorUser, ); } return this.end(); diff --git a/src/phases/summon-phase.ts b/src/phases/summon-phase.ts index 15f42e76a5a..921466dfead 100644 --- a/src/phases/summon-phase.ts +++ b/src/phases/summon-phase.ts @@ -9,9 +9,6 @@ import { FieldPosition } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import i18next from "i18next"; import { PartyMemberPokemonPhase } from "./party-member-pokemon-phase"; -import { PostSummonPhase } from "./post-summon-phase"; -import { GameOverPhase } from "./game-over-phase"; -import { ShinySparklePhase } from "./shiny-sparkle-phase"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; import { applyPreSummonAbAttrs, PreSummonAbAttr } from "#app/data/abilities/ability"; import { globalScene } from "#app/global-scene"; @@ -58,7 +55,7 @@ export class SummonPhase extends PartyMemberPokemonPhase { console.error("Party Details:\n", party); console.error("All available Pokemon were fainted or illegal!"); globalScene.phaseManager.clearPhaseQueue(); - globalScene.phaseManager.unshiftPhase(new GameOverPhase()); + globalScene.phaseManager.unshiftNew("GameOverPhase"); this.end(); return; } @@ -275,7 +272,7 @@ export class SummonPhase extends PartyMemberPokemonPhase { const pokemon = this.getPokemon(); if (pokemon.isShiny(true)) { - globalScene.phaseManager.unshiftPhase(new ShinySparklePhase(pokemon.getBattlerIndex())); + globalScene.phaseManager.unshiftNew("ShinySparklePhase", pokemon.getBattlerIndex()); } pokemon.resetTurnData(); @@ -291,7 +288,7 @@ export class SummonPhase extends PartyMemberPokemonPhase { } queuePostSummon(): void { - globalScene.phaseManager.pushPhase(new PostSummonPhase(this.getPokemon().getBattlerIndex())); + globalScene.phaseManager.pushNew("PostSummonPhase", this.getPokemon().getBattlerIndex()); } end() { diff --git a/src/phases/switch-phase.ts b/src/phases/switch-phase.ts index 5f2ae55900e..8d18e29e6a6 100644 --- a/src/phases/switch-phase.ts +++ b/src/phases/switch-phase.ts @@ -3,7 +3,6 @@ import PartyUiHandler, { PartyOption, PartyUiMode } from "#app/ui/party-ui-handl import { UiMode } from "#enums/ui-mode"; import { SwitchType } from "#enums/switch-type"; import { BattlePhase } from "./battle-phase"; -import { SwitchSummonPhase } from "./switch-summon-phase"; /** * Opens the party selector UI and transitions into a {@linkcode SwitchSummonPhase} @@ -80,9 +79,7 @@ export class SwitchPhase extends BattlePhase { p => p.is("PostSummonPhase") && p.player && p.fieldIndex === this.fieldIndex, ); const switchType = option === PartyOption.PASS_BATON ? SwitchType.BATON_PASS : this.switchType; - globalScene.phaseManager.unshiftPhase( - new SwitchSummonPhase(switchType, fieldIndex, slotIndex, this.doReturn), - ); + globalScene.phaseManager.unshiftNew("SwitchSummonPhase", switchType, fieldIndex, slotIndex, this.doReturn); } globalScene.ui.setMode(UiMode.MESSAGE).then(() => super.end()); }, diff --git a/src/phases/switch-summon-phase.ts b/src/phases/switch-summon-phase.ts index de8b9f3a5d9..103af3db275 100644 --- a/src/phases/switch-summon-phase.ts +++ b/src/phases/switch-summon-phase.ts @@ -16,7 +16,6 @@ import { getPokemonNameWithAffix } from "#app/messages"; import { SwitchEffectTransferModifier } from "#app/modifier/modifier"; import { Command } from "#app/ui/command-ui-handler"; import i18next from "i18next"; -import { PostSummonPhase } from "./post-summon-phase"; import { SummonPhase } from "./summon-phase"; import { SubstituteTag } from "#app/data/battler-tags"; import { SwitchType } from "#enums/switch-type"; @@ -265,6 +264,6 @@ export class SwitchSummonPhase extends SummonPhase { } queuePostSummon(): void { - globalScene.phaseManager.unshiftPhase(new PostSummonPhase(this.getPokemon().getBattlerIndex())); + globalScene.phaseManager.unshiftNew("PostSummonPhase", this.getPokemon().getBattlerIndex()); } } diff --git a/src/phases/title-phase.ts b/src/phases/title-phase.ts index fb980d87359..37ce294f237 100644 --- a/src/phases/title-phase.ts +++ b/src/phases/title-phase.ts @@ -20,11 +20,6 @@ import { SaveSlotUiMode } from "#app/ui/save-slot-select-ui-handler"; import { UiMode } from "#enums/ui-mode"; import { isLocal, isLocalServerConnected, isNullOrUndefined } from "#app/utils/common"; import i18next from "i18next"; -import { CheckSwitchPhase } from "./check-switch-phase"; -import { EncounterPhase } from "./encounter-phase"; -import { SelectChallengePhase } from "./select-challenge-phase"; -import { SelectStarterPhase } from "./select-starter-phase"; -import { SummonPhase } from "./summon-phase"; import { globalScene } from "#app/global-scene"; import Overrides from "#app/overrides"; @@ -125,7 +120,7 @@ export class TitlePhase extends Phase { label: i18next.t("menu:cancel"), handler: () => { globalScene.phaseManager.clearPhaseQueue(); - globalScene.phaseManager.pushPhase(new TitlePhase()); + globalScene.phaseManager.pushNew("TitlePhase"); super.end(); return true; }, @@ -200,7 +195,7 @@ export class TitlePhase extends Phase { globalScene.ui.setMode(UiMode.SAVE_SLOT, SaveSlotUiMode.SAVE, (slotId: number) => { globalScene.phaseManager.clearPhaseQueue(); if (slotId === -1) { - globalScene.phaseManager.pushPhase(new TitlePhase()); + globalScene.phaseManager.pushNew("TitlePhase"); return super.end(); } globalScene.sessionSlotId = slotId; @@ -304,23 +299,23 @@ export class TitlePhase extends Phase { globalScene.arena.preloadBgm(); globalScene.gameMode = getGameMode(this.gameMode); if (this.gameMode === GameModes.CHALLENGE) { - globalScene.phaseManager.pushPhase(new SelectChallengePhase()); + globalScene.phaseManager.pushNew("SelectChallengePhase"); } else { - globalScene.phaseManager.pushPhase(new SelectStarterPhase()); + globalScene.phaseManager.pushNew("SelectStarterPhase"); } globalScene.newArena(globalScene.gameMode.getStartingBiome()); } else { globalScene.playBgm(); } - globalScene.phaseManager.pushPhase(new EncounterPhase(this.loaded)); + globalScene.phaseManager.pushNew("EncounterPhase", this.loaded); if (this.loaded) { const availablePartyMembers = globalScene.getPokemonAllowedInBattle().length; - globalScene.phaseManager.pushPhase(new SummonPhase(0, true, true)); + globalScene.phaseManager.pushNew("SummonPhase", 0, true, true); if (globalScene.currentBattle.double && availablePartyMembers > 1) { - globalScene.phaseManager.pushPhase(new SummonPhase(1, true, true)); + globalScene.phaseManager.pushNew("SummonPhase", 1, true, true); } if ( @@ -329,9 +324,9 @@ export class TitlePhase extends Phase { ) { const minPartySize = globalScene.currentBattle.double ? 2 : 1; if (availablePartyMembers > minPartySize) { - globalScene.phaseManager.pushPhase(new CheckSwitchPhase(0, globalScene.currentBattle.double)); + globalScene.phaseManager.pushNew("CheckSwitchPhase", 0, globalScene.currentBattle.double); if (globalScene.currentBattle.double) { - globalScene.phaseManager.pushPhase(new CheckSwitchPhase(1, globalScene.currentBattle.double)); + globalScene.phaseManager.pushNew("CheckSwitchPhase", 1, globalScene.currentBattle.double); } } } diff --git a/src/phases/trainer-victory-phase.ts b/src/phases/trainer-victory-phase.ts index 5b7b26d52fb..5d35dd5d375 100644 --- a/src/phases/trainer-victory-phase.ts +++ b/src/phases/trainer-victory-phase.ts @@ -5,8 +5,6 @@ import { vouchers } from "#app/system/voucher"; import i18next from "i18next"; import { randSeedItem } from "#app/utils/common"; import { BattlePhase } from "./battle-phase"; -import { ModifierRewardPhase } from "./modifier-reward-phase"; -import { MoneyRewardPhase } from "./money-reward-phase"; import { TrainerSlot } from "#enums/trainer-slot"; import { globalScene } from "#app/global-scene"; import { BiomeId } from "#enums/biome-id"; @@ -20,13 +18,11 @@ export class TrainerVictoryPhase extends BattlePhase { globalScene.playBgm(globalScene.currentBattle.trainer?.config.victoryBgm); - globalScene.phaseManager.unshiftPhase( - new MoneyRewardPhase(globalScene.currentBattle.trainer?.config.moneyMultiplier!), - ); // TODO: is this bang correct? + globalScene.phaseManager.unshiftNew("MoneyRewardPhase", globalScene.currentBattle.trainer?.config.moneyMultiplier!); // TODO: is this bang correct? const modifierRewardFuncs = globalScene.currentBattle.trainer?.config.modifierRewardFuncs!; // TODO: is this bang correct? for (const modifierRewardFunc of modifierRewardFuncs) { - globalScene.phaseManager.unshiftPhase(new ModifierRewardPhase(modifierRewardFunc)); + globalScene.phaseManager.unshiftNew("ModifierRewardPhase", modifierRewardFunc); } const trainerType = globalScene.currentBattle.trainer?.config.trainerType!; // TODO: is this bang correct? @@ -37,23 +33,21 @@ export class TrainerVictoryPhase extends BattlePhase { globalScene.currentBattle.trainer?.config.isBoss ) { if (timedEventManager.getUpgradeUnlockedVouchers()) { - globalScene.phaseManager.unshiftPhase( - new ModifierRewardPhase( - [ - modifierTypes.VOUCHER_PLUS, - modifierTypes.VOUCHER_PLUS, - modifierTypes.VOUCHER_PLUS, - modifierTypes.VOUCHER_PREMIUM, - ][vouchers[TrainerType[trainerType]].voucherType], - ), + globalScene.phaseManager.unshiftNew( + "ModifierRewardPhase", + [ + modifierTypes.VOUCHER_PLUS, + modifierTypes.VOUCHER_PLUS, + modifierTypes.VOUCHER_PLUS, + modifierTypes.VOUCHER_PREMIUM, + ][vouchers[TrainerType[trainerType]].voucherType], ); } else { - globalScene.phaseManager.unshiftPhase( - new ModifierRewardPhase( - [modifierTypes.VOUCHER, modifierTypes.VOUCHER, modifierTypes.VOUCHER_PLUS, modifierTypes.VOUCHER_PREMIUM][ - vouchers[TrainerType[trainerType]].voucherType - ], - ), + globalScene.phaseManager.unshiftNew( + "ModifierRewardPhase", + [modifierTypes.VOUCHER, modifierTypes.VOUCHER, modifierTypes.VOUCHER_PLUS, modifierTypes.VOUCHER_PREMIUM][ + vouchers[TrainerType[trainerType]].voucherType + ], ); } } diff --git a/src/phases/turn-end-phase.ts b/src/phases/turn-end-phase.ts index 832f60043ce..85590d667d6 100644 --- a/src/phases/turn-end-phase.ts +++ b/src/phases/turn-end-phase.ts @@ -14,7 +14,6 @@ import { } from "#app/modifier/modifier"; import i18next from "i18next"; import { FieldPhase } from "./field-phase"; -import { PokemonHealPhase } from "./pokemon-heal-phase"; import { globalScene } from "#app/global-scene"; export class TurnEndPhase extends FieldPhase { @@ -34,15 +33,14 @@ export class TurnEndPhase extends FieldPhase { globalScene.applyModifiers(TurnHealModifier, pokemon.isPlayer(), pokemon); if (globalScene.arena.terrain?.terrainType === TerrainType.GRASSY && pokemon.isGrounded()) { - globalScene.phaseManager.unshiftPhase( - new PokemonHealPhase( - pokemon.getBattlerIndex(), - Math.max(pokemon.getMaxHp() >> 4, 1), - i18next.t("battle:turnEndHpRestore", { - pokemonName: getPokemonNameWithAffix(pokemon), - }), - true, - ), + globalScene.phaseManager.unshiftNew( + "PokemonHealPhase", + pokemon.getBattlerIndex(), + Math.max(pokemon.getMaxHp() >> 4, 1), + i18next.t("battle:turnEndHpRestore", { + pokemonName: getPokemonNameWithAffix(pokemon), + }), + true, ); } diff --git a/src/phases/turn-init-phase.ts b/src/phases/turn-init-phase.ts index 61ec5fd8a71..e9d6f60af5e 100644 --- a/src/phases/turn-init-phase.ts +++ b/src/phases/turn-init-phase.ts @@ -6,12 +6,7 @@ import { import { TurnInitEvent } from "#app/events/battle-scene"; import type { PlayerPokemon } from "#app/field/pokemon"; import i18next from "i18next"; -import { CommandPhase } from "./command-phase"; -import { EnemyCommandPhase } from "./enemy-command-phase"; import { FieldPhase } from "./field-phase"; -import { GameOverPhase } from "./game-over-phase"; -import { ToggleDoublePositionPhase } from "./toggle-double-position-phase"; -import { TurnStartPhase } from "./turn-start-phase"; import { globalScene } from "#app/global-scene"; export class TurnInitPhase extends FieldPhase { @@ -33,7 +28,7 @@ export class TurnInitPhase extends FieldPhase { if (!allowedPokemon.length) { // If there are no longer any legal pokemon in the party, game over. globalScene.phaseManager.clearPhaseQueue(); - globalScene.phaseManager.unshiftPhase(new GameOverPhase()); + globalScene.phaseManager.unshiftNew("GameOverPhase"); } else if ( allowedPokemon.length >= globalScene.currentBattle.getBattlerCount() || (globalScene.currentBattle.double && !allowedPokemon[0].isActive(true)) @@ -46,7 +41,7 @@ export class TurnInitPhase extends FieldPhase { p.leaveField(); } if (allowedPokemon.length === 1 && globalScene.currentBattle.double) { - globalScene.phaseManager.unshiftPhase(new ToggleDoublePositionPhase(true)); + globalScene.phaseManager.unshiftNew("ToggleDoublePositionPhase", true); } } }); @@ -69,13 +64,15 @@ export class TurnInitPhase extends FieldPhase { pokemon.resetTurnData(); - globalScene.phaseManager.pushPhase( - pokemon.isPlayer() ? new CommandPhase(i) : new EnemyCommandPhase(i - BattlerIndex.ENEMY), - ); + if (pokemon.isPlayer()) { + globalScene.phaseManager.pushNew("CommandPhase", i); + } else { + globalScene.phaseManager.pushNew("EnemyCommandPhase", i - BattlerIndex.ENEMY); + } } }); - globalScene.phaseManager.pushPhase(new TurnStartPhase()); + globalScene.phaseManager.pushNew("TurnStartPhase"); this.end(); } diff --git a/src/phases/turn-start-phase.ts b/src/phases/turn-start-phase.ts index c07feac0888..557b67b6091 100644 --- a/src/phases/turn-start-phase.ts +++ b/src/phases/turn-start-phase.ts @@ -8,21 +8,11 @@ import { PokemonMove } from "#app/field/pokemon"; import { BypassSpeedChanceModifier } from "#app/modifier/modifier"; import { Command } from "#app/ui/command-ui-handler"; import { randSeedShuffle, BooleanHolder } from "#app/utils/common"; -import { AttemptCapturePhase } from "./attempt-capture-phase"; -import { AttemptRunPhase } from "./attempt-run-phase"; -import { BerryPhase } from "./berry-phase"; import { FieldPhase } from "./field-phase"; -import { MoveHeaderPhase } from "./move-header-phase"; -import { MovePhase } from "./move-phase"; -import { SwitchSummonPhase } from "./switch-summon-phase"; -import { TurnEndPhase } from "./turn-end-phase"; -import { WeatherEffectPhase } from "./weather-effect-phase"; -import { CheckStatusEffectPhase } from "#app/phases/check-status-effect-phase"; import { BattlerIndex } from "#app/battle"; import { TrickRoomTag } from "#app/data/arena-tag"; import { SwitchType } from "#enums/switch-type"; import { globalScene } from "#app/global-scene"; -import { TeraPhase } from "./tera-phase"; export class TurnStartPhase extends FieldPhase { public readonly phaseName = "TurnStartPhase"; @@ -153,10 +143,12 @@ export class TurnStartPhase extends FieldPhase { switch (preTurnCommand?.command) { case Command.TERA: - globalScene.phaseManager.pushPhase(new TeraPhase(pokemon)); + globalScene.phaseManager.pushNew("TeraPhase", pokemon); } } + const phaseManager = globalScene.phaseManager; + for (const o of moveOrder) { const pokemon = field[o]; const turnCommand = globalScene.currentBattle.turnCommands[o]; @@ -167,88 +159,94 @@ export class TurnStartPhase extends FieldPhase { switch (turnCommand?.command) { case Command.FIGHT: - const queuedMove = turnCommand.move; - pokemon.turnData.order = orderIndex++; - if (!queuedMove) { - continue; - } - const move = - pokemon.getMoveset().find(m => m.moveId === queuedMove.move && m.ppUsed < m.getMovePp()) || - new PokemonMove(queuedMove.move); - if (move.getMove().hasAttr(MoveHeaderAttr)) { - globalScene.phaseManager.unshiftPhase(new MoveHeaderPhase(pokemon, move)); - } - if (pokemon.isPlayer()) { - if (turnCommand.cursor === -1) { - globalScene.phaseManager.pushPhase( - new MovePhase(pokemon, turnCommand.targets || turnCommand.move!.targets, move), - ); //TODO: is the bang correct here? - } else { - const playerPhase = new MovePhase( - pokemon, - turnCommand.targets || turnCommand.move!.targets, - move, - false, - queuedMove.ignorePP, - ); //TODO: is the bang correct here? - globalScene.phaseManager.pushPhase(playerPhase); + { + const queuedMove = turnCommand.move; + pokemon.turnData.order = orderIndex++; + if (!queuedMove) { + continue; } - } else { - globalScene.phaseManager.pushPhase( - new MovePhase( + const move = + pokemon.getMoveset().find(m => m.moveId === queuedMove.move && m.ppUsed < m.getMovePp()) || + new PokemonMove(queuedMove.move); + if (move.getMove().hasAttr(MoveHeaderAttr)) { + phaseManager.unshiftNew("MoveHeaderPhase", pokemon, move); + } + if (pokemon.isPlayer()) { + if (turnCommand.cursor === -1) { + phaseManager.pushNew("MovePhase", pokemon, turnCommand.targets || turnCommand.move!.targets, move); + } else { + phaseManager.pushNew( + "MovePhase", + pokemon, + turnCommand.targets || turnCommand.move!.targets, // TODO: is the bang correct here? + move, + false, + queuedMove.ignorePP, + ); + } + } else { + phaseManager.pushNew( + "MovePhase", pokemon, turnCommand.targets || turnCommand.move!.targets, move, false, queuedMove.ignorePP, - ), - ); //TODO: is the bang correct here? + ); + } } break; case Command.BALL: - globalScene.phaseManager.unshiftPhase( - new AttemptCapturePhase(turnCommand.targets![0] % 2, turnCommand.cursor!), - ); //TODO: is the bang correct here? + phaseManager.unshiftNew("AttemptCapturePhase", turnCommand.targets![0] % 2, turnCommand.cursor!); //TODO: is the bang correct here? break; case Command.POKEMON: - const switchType = turnCommand.args?.[0] ? SwitchType.BATON_PASS : SwitchType.SWITCH; - globalScene.phaseManager.unshiftPhase( - new SwitchSummonPhase(switchType, pokemon.getFieldIndex(), turnCommand.cursor!, true, pokemon.isPlayer()), - ); + { + const switchType = turnCommand.args?.[0] ? SwitchType.BATON_PASS : SwitchType.SWITCH; + phaseManager.unshiftNew( + "SwitchSummonPhase", + switchType, + pokemon.getFieldIndex(), + turnCommand.cursor!, + true, + pokemon.isPlayer(), + ); + } break; case Command.RUN: - let runningPokemon = pokemon; - if (globalScene.currentBattle.double) { - const playerActivePokemon = field.filter(pokemon => { - if (pokemon) { - return pokemon.isPlayer() && pokemon.isActive(); + { + let runningPokemon = pokemon; + if (globalScene.currentBattle.double) { + const playerActivePokemon = field.filter(pokemon => { + if (pokemon) { + return pokemon.isPlayer() && pokemon.isActive(); + } + return; + }); + // if only one pokemon is alive, use that one + if (playerActivePokemon.length > 1) { + // find which active pokemon has faster speed + const fasterPokemon = + playerActivePokemon[0].getStat(Stat.SPD) > playerActivePokemon[1].getStat(Stat.SPD) + ? playerActivePokemon[0] + : playerActivePokemon[1]; + // check if either active pokemon has the ability "Run Away" + const hasRunAway = playerActivePokemon.find(p => p.hasAbility(AbilityId.RUN_AWAY)); + runningPokemon = hasRunAway !== undefined ? hasRunAway : fasterPokemon; } - return; - }); - // if only one pokemon is alive, use that one - if (playerActivePokemon.length > 1) { - // find which active pokemon has faster speed - const fasterPokemon = - playerActivePokemon[0].getStat(Stat.SPD) > playerActivePokemon[1].getStat(Stat.SPD) - ? playerActivePokemon[0] - : playerActivePokemon[1]; - // check if either active pokemon has the ability "Run Away" - const hasRunAway = playerActivePokemon.find(p => p.hasAbility(AbilityId.RUN_AWAY)); - runningPokemon = hasRunAway !== undefined ? hasRunAway : fasterPokemon; } + phaseManager.unshiftNew("AttemptRunPhase", runningPokemon.getFieldIndex()); } - globalScene.phaseManager.unshiftPhase(new AttemptRunPhase(runningPokemon.getFieldIndex())); break; } } - globalScene.phaseManager.pushPhase(new WeatherEffectPhase()); - globalScene.phaseManager.pushPhase(new BerryPhase()); + phaseManager.pushNew("WeatherEffectPhase"); + phaseManager.pushNew("BerryPhase"); /** Add a new phase to check who should be taking status damage */ - globalScene.phaseManager.pushPhase(new CheckStatusEffectPhase(moveOrder)); + phaseManager.pushNew("CheckStatusEffectPhase", moveOrder); - globalScene.phaseManager.pushPhase(new TurnEndPhase()); + phaseManager.pushNew("TurnEndPhase"); /** * this.end() will call shiftPhase(), which dumps everything from PrependQueue (aka everything that is unshifted()) to the front diff --git a/src/phases/unavailable-phase.ts b/src/phases/unavailable-phase.ts index a6fc4a1be61..8b5bb5f7508 100644 --- a/src/phases/unavailable-phase.ts +++ b/src/phases/unavailable-phase.ts @@ -1,13 +1,12 @@ import { globalScene } from "#app/global-scene"; import { Phase } from "#app/phase"; import { UiMode } from "#enums/ui-mode"; -import { LoginPhase } from "./login-phase"; export class UnavailablePhase extends Phase { public readonly phaseName = "UnavailablePhase"; start(): void { globalScene.ui.setMode(UiMode.UNAVAILABLE, () => { - globalScene.phaseManager.unshiftPhase(new LoginPhase(true)); + globalScene.phaseManager.unshiftNew("LoginPhase", true); this.end(); }); } diff --git a/src/phases/victory-phase.ts b/src/phases/victory-phase.ts index 0a08e010720..ca24e474cde 100644 --- a/src/phases/victory-phase.ts +++ b/src/phases/victory-phase.ts @@ -3,19 +3,10 @@ import { ClassicFixedBossWaves } from "#enums/fixed-boss-waves"; import { BattleType } from "#enums/battle-type"; import type { CustomModifierSettings } from "#app/modifier/modifier-type"; import { modifierTypes } from "#app/modifier/modifier-type"; -import { BattleEndPhase } from "./battle-end-phase"; -import { NewBattlePhase } from "./new-battle-phase"; import { PokemonPhase } from "./pokemon-phase"; -import { AddEnemyBuffModifierPhase } from "./add-enemy-buff-modifier-phase"; -import { EggLapsePhase } from "./egg-lapse-phase"; -import { GameOverPhase } from "./game-over-phase"; -import { ModifierRewardPhase } from "./modifier-reward-phase"; -import { SelectModifierPhase } from "./select-modifier-phase"; -import { TrainerVictoryPhase } from "./trainer-victory-phase"; import { handleMysteryEncounterVictory } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { globalScene } from "#app/global-scene"; import { timedEventManager } from "#app/global-event-manager"; -import { SelectBiomePhase } from "./select-biome-phase"; export class VictoryPhase extends PokemonPhase { public readonly phaseName = "VictoryPhase"; @@ -51,12 +42,12 @@ export class VictoryPhase extends PokemonPhase { .getEnemyParty() .find(p => (globalScene.currentBattle.battleType === BattleType.WILD ? p.isOnField() : !p?.isFainted(true))) ) { - globalScene.phaseManager.pushPhase(new BattleEndPhase(true)); + globalScene.phaseManager.pushNew("BattleEndPhase", true); if (globalScene.currentBattle.battleType === BattleType.TRAINER) { - globalScene.phaseManager.pushPhase(new TrainerVictoryPhase()); + globalScene.phaseManager.pushNew("TrainerVictoryPhase"); } if (globalScene.gameMode.isEndless || !globalScene.gameMode.isWaveFinal(globalScene.currentBattle.waveIndex)) { - globalScene.phaseManager.pushPhase(new EggLapsePhase()); + globalScene.phaseManager.pushNew("EggLapsePhase"); if (globalScene.gameMode.isClassic) { switch (globalScene.currentBattle.waveIndex) { case ClassicFixedBossWaves.RIVAL_1: @@ -64,68 +55,67 @@ export class VictoryPhase extends PokemonPhase { // Get event modifiers for this wave timedEventManager .getFixedBattleEventRewards(globalScene.currentBattle.waveIndex) - .map(r => globalScene.phaseManager.pushPhase(new ModifierRewardPhase(modifierTypes[r]))); + .map(r => globalScene.phaseManager.pushNew("ModifierRewardPhase", modifierTypes[r])); break; case ClassicFixedBossWaves.EVIL_BOSS_2: // Should get Lock Capsule on 165 before shop phase so it can be used in the rewards shop - globalScene.phaseManager.pushPhase(new ModifierRewardPhase(modifierTypes.LOCK_CAPSULE)); + globalScene.phaseManager.pushNew("ModifierRewardPhase", modifierTypes.LOCK_CAPSULE); break; } } if (globalScene.currentBattle.waveIndex % 10) { - globalScene.phaseManager.pushPhase( - new SelectModifierPhase(undefined, undefined, this.getFixedBattleCustomModifiers()), + globalScene.phaseManager.pushNew( + "SelectModifierPhase", + undefined, + undefined, + this.getFixedBattleCustomModifiers(), ); } else if (globalScene.gameMode.isDaily) { - globalScene.phaseManager.pushPhase(new ModifierRewardPhase(modifierTypes.EXP_CHARM)); + globalScene.phaseManager.pushNew("ModifierRewardPhase", modifierTypes.EXP_CHARM); if ( globalScene.currentBattle.waveIndex > 10 && !globalScene.gameMode.isWaveFinal(globalScene.currentBattle.waveIndex) ) { - globalScene.phaseManager.pushPhase(new ModifierRewardPhase(modifierTypes.GOLDEN_POKEBALL)); + globalScene.phaseManager.pushNew("ModifierRewardPhase", modifierTypes.GOLDEN_POKEBALL); } } else { const superExpWave = !globalScene.gameMode.isEndless ? (globalScene.offsetGym ? 0 : 20) : 10; if (globalScene.gameMode.isEndless && globalScene.currentBattle.waveIndex === 10) { - globalScene.phaseManager.pushPhase(new ModifierRewardPhase(modifierTypes.EXP_SHARE)); + globalScene.phaseManager.pushNew("ModifierRewardPhase", modifierTypes.EXP_SHARE); } if ( globalScene.currentBattle.waveIndex <= 750 && (globalScene.currentBattle.waveIndex <= 500 || globalScene.currentBattle.waveIndex % 30 === superExpWave) ) { - globalScene.phaseManager.pushPhase( - new ModifierRewardPhase( - globalScene.currentBattle.waveIndex % 30 !== superExpWave || globalScene.currentBattle.waveIndex > 250 - ? modifierTypes.EXP_CHARM - : modifierTypes.SUPER_EXP_CHARM, - ), + globalScene.phaseManager.pushNew( + "ModifierRewardPhase", + globalScene.currentBattle.waveIndex % 30 !== superExpWave || globalScene.currentBattle.waveIndex > 250 + ? modifierTypes.EXP_CHARM + : modifierTypes.SUPER_EXP_CHARM, ); } if (globalScene.currentBattle.waveIndex <= 150 && !(globalScene.currentBattle.waveIndex % 50)) { - globalScene.phaseManager.pushPhase(new ModifierRewardPhase(modifierTypes.GOLDEN_POKEBALL)); + globalScene.phaseManager.pushNew("ModifierRewardPhase", modifierTypes.GOLDEN_POKEBALL); } if (globalScene.gameMode.isEndless && !(globalScene.currentBattle.waveIndex % 50)) { - globalScene.phaseManager.pushPhase( - new ModifierRewardPhase( - !(globalScene.currentBattle.waveIndex % 250) - ? modifierTypes.VOUCHER_PREMIUM - : modifierTypes.VOUCHER_PLUS, - ), + globalScene.phaseManager.pushNew( + "ModifierRewardPhase", + !(globalScene.currentBattle.waveIndex % 250) ? modifierTypes.VOUCHER_PREMIUM : modifierTypes.VOUCHER_PLUS, ); - globalScene.phaseManager.pushPhase(new AddEnemyBuffModifierPhase()); + globalScene.phaseManager.pushNew("AddEnemyBuffModifierPhase"); } } if (globalScene.gameMode.hasRandomBiomes || globalScene.isNewBiome()) { - globalScene.phaseManager.pushPhase(new SelectBiomePhase()); + globalScene.phaseManager.pushNew("SelectBiomePhase"); } - globalScene.phaseManager.pushPhase(new NewBattlePhase()); + globalScene.phaseManager.pushNew("NewBattlePhase"); } else { globalScene.currentBattle.battleType = BattleType.CLEAR; globalScene.score += globalScene.gameMode.getClearScoreBonus(); globalScene.updateScoreText(); - globalScene.phaseManager.pushPhase(new GameOverPhase(true)); + globalScene.phaseManager.pushNew("GameOverPhase", true); } } diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 9a24194b8e9..2949ecd51cf 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -49,7 +49,6 @@ import { SpeciesId } from "#enums/species-id"; import { applyChallenges, ChallengeType } from "#app/data/challenge"; import { WeatherType } from "#enums/weather-type"; import { TerrainType } from "#app/data/terrain"; -import { ReloadSessionPhase } from "#app/phases/reload-session-phase"; import { RUN_HISTORY_LIMIT } from "#app/ui/run-history-ui-handler"; import { applySessionVersionMigration, @@ -427,7 +426,7 @@ export class GameData { if (error) { if (error.startsWith("session out of date")) { globalScene.phaseManager.clearPhaseQueue(); - globalScene.phaseManager.unshiftPhase(new ReloadSessionPhase()); + globalScene.phaseManager.unshiftNew("ReloadSessionPhase"); } console.error(error); return resolve(false); @@ -747,7 +746,7 @@ export class GameData { if (systemData) { globalScene.phaseManager.clearPhaseQueue(); - globalScene.phaseManager.unshiftPhase(new ReloadSessionPhase(JSON.stringify(systemData))); + globalScene.phaseManager.unshiftNew("ReloadSessionPhase", JSON.stringify(systemData)); this.clearLocalData(); return false; } @@ -1249,7 +1248,7 @@ export class GameData { if (error) { if (error.startsWith("session out of date")) { globalScene.phaseManager.clearPhaseQueue(); - globalScene.phaseManager.unshiftPhase(new ReloadSessionPhase()); + globalScene.phaseManager.unshiftNew("ReloadSessionPhase"); } console.error(error); resolve(false); @@ -1321,7 +1320,7 @@ export class GameData { } else { if (jsonResponse?.error?.startsWith("session out of date")) { globalScene.phaseManager.clearPhaseQueue(); - globalScene.phaseManager.unshiftPhase(new ReloadSessionPhase()); + globalScene.phaseManager.unshiftNew("ReloadSessionPhase"); } console.error(jsonResponse); @@ -1459,7 +1458,7 @@ export class GameData { if (error) { if (error.startsWith("session out of date")) { globalScene.phaseManager.clearPhaseQueue(); - globalScene.phaseManager.unshiftPhase(new ReloadSessionPhase()); + globalScene.phaseManager.unshiftNew("ReloadSessionPhase"); } console.error(error); return resolve(false); diff --git a/src/ui/challenges-select-ui-handler.ts b/src/ui/challenges-select-ui-handler.ts index d2c2dbc6c0d..b02bf4abaef 100644 --- a/src/ui/challenges-select-ui-handler.ts +++ b/src/ui/challenges-select-ui-handler.ts @@ -9,8 +9,6 @@ import { getLocalizedSpriteKey } from "#app/utils/common"; import { Challenges } from "#app/enums/challenges"; import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; import { Color, ShadowColor } from "#app/enums/color"; -import { SelectStarterPhase } from "#app/phases/select-starter-phase"; -import { TitlePhase } from "#app/phases/title-phase"; import { globalScene } from "#app/global-scene"; /** @@ -384,14 +382,14 @@ export default class GameChallengesUiHandler extends UiHandler { this.updateChallengeArrows(this.startCursor.visible); } else { globalScene.phaseManager.clearPhaseQueue(); - globalScene.phaseManager.pushPhase(new TitlePhase()); + globalScene.phaseManager.pushNew("TitlePhase"); globalScene.phaseManager.getCurrentPhase()?.end(); } success = true; } else if (button === Button.SUBMIT || button === Button.ACTION) { if (this.hasSelectedChallenge) { if (this.startCursor.visible) { - globalScene.phaseManager.unshiftPhase(new SelectStarterPhase()); + globalScene.phaseManager.unshiftNew("SelectStarterPhase"); globalScene.phaseManager.getCurrentPhase()?.end(); } else { this.startCursor.setVisible(true); diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 973805e4ca1..47226de3354 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -51,9 +51,6 @@ import { StarterContainer } from "#app/ui/starter-container"; import { FilterBar } from "#app/ui/filter-bar"; import { DropDownColumn } from "#enums/drop-down-column"; import { ScrollBar } from "#app/ui/scroll-bar"; -import { SelectChallengePhase } from "#app/phases/select-challenge-phase"; -import { EncounterPhase } from "#app/phases/encounter-phase"; -import { TitlePhase } from "#app/phases/title-phase"; import { AbilityId } from "#enums/ability-id"; import { getPassiveCandyCount, @@ -4307,10 +4304,10 @@ export default class StarterSelectUiHandler extends MessageUiHandler { ui.setMode(UiMode.STARTER_SELECT); globalScene.phaseManager.clearPhaseQueue(); if (globalScene.gameMode.isChallenge) { - globalScene.phaseManager.pushPhase(new SelectChallengePhase()); - globalScene.phaseManager.pushPhase(new EncounterPhase()); + globalScene.phaseManager.pushNew("SelectChallengePhase"); + globalScene.phaseManager.pushNew("EncounterPhase"); } else { - globalScene.phaseManager.pushPhase(new TitlePhase()); + globalScene.phaseManager.pushNew("TitlePhase"); } this.clearText(); globalScene.phaseManager.getCurrentPhase()?.end(); diff --git a/test/testUtils/gameManager.ts b/test/testUtils/gameManager.ts index edf0301447d..437c8d9f083 100644 --- a/test/testUtils/gameManager.ts +++ b/test/testUtils/gameManager.ts @@ -105,8 +105,8 @@ export default class GameManager { // Must be run after phase interceptor has been initialized. - this.scene.phaseManager.pushPhase(new LoginPhase()); - this.scene.phaseManager.pushPhase(new TitlePhase()); + this.scene.phaseManager.pushNew("LoginPhase"); + this.scene.phaseManager.pushNew("TitlePhase"); this.scene.phaseManager.shiftPhase(); this.gameWrapper.scene = this.scene; From 37767799cdd608608d77bd8ae33c5fcd11d6fdff Mon Sep 17 00:00:00 2001 From: Tiago Rodrigues Date: Sun, 8 Jun 2025 17:52:48 +0100 Subject: [PATCH 221/262] [Bug] Gorilla Tactics now activates on protect and miss (#5567) * [Bug] Fix #5112: Gorilla Tactics only registers succesful moves as move usage * Apply small fixes from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/data/abilities/ability.ts | 82 ++++++++++++++------------ src/phases/move-effect-phase.ts | 3 + test/abilities/gorilla_tactics.test.ts | 29 +++++++++ 3 files changed, 76 insertions(+), 38 deletions(-) diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index a79e2206348..34ae8be78b6 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -2534,48 +2534,38 @@ export class AllyStatMultiplierAbAttr extends AbAttr { } /** - * Ability attribute for Gorilla Tactics - * @extends PostAttackAbAttr + * Takes effect whenever a move succesfully executes, such as gorilla tactics' move-locking. + * (More specifically, whenever a move is pushed to the move history) + * @extends AbAttr */ -export class GorillaTacticsAbAttr extends PostAttackAbAttr { - constructor() { - super((_user, _target, _move) => true, false); - } - - override canApplyPostAttack( - pokemon: Pokemon, - passive: boolean, - simulated: boolean, - defender: Pokemon, - move: Move, - hitResult: HitResult | null, - args: any[], +export class ExecutedMoveAbAttr extends AbAttr { + canApplyExecutedMove( + _pokemon: Pokemon, + _simulated: boolean, ): boolean { - return ( - (super.canApplyPostAttack(pokemon, passive, simulated, defender, move, hitResult, args) && simulated) || - !pokemon.getTag(BattlerTagType.GORILLA_TACTICS) - ); + return true; } - /** - * - * @param {Pokemon} pokemon the {@linkcode Pokemon} with this ability - * @param _passive n/a - * @param simulated whether the ability is being simulated - * @param _defender n/a - * @param _move n/a - * @param _hitResult n/a - * @param _args n/a - */ - override applyPostAttack( - pokemon: Pokemon, - _passive: boolean, - simulated: boolean, - _defender: Pokemon, - _move: Move, - _hitResult: HitResult | null, - _args: any[], - ): void { + applyExecutedMove( + _pokemon: Pokemon, + _simulated: boolean, + ): void {} +} + +/** + * Ability attribute for Gorilla Tactics + * @extends ExecutedMoveAbAttr + */ +export class GorillaTacticsAbAttr extends ExecutedMoveAbAttr { + constructor(showAbility: boolean = false) { + super(showAbility); + } + + override canApplyExecutedMove(pokemon: Pokemon, simulated: boolean): boolean { + return simulated || !pokemon.getTag(BattlerTagType.GORILLA_TACTICS); + } + + override applyExecutedMove(pokemon: Pokemon, simulated: boolean): void { if (!simulated) { pokemon.addTag(BattlerTagType.GORILLA_TACTICS); } @@ -7792,6 +7782,22 @@ export function applyPreAttackAbAttrs( ); } +export function applyExecutedMoveAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + simulated: boolean = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + attr => attr.applyExecutedMove(pokemon, simulated), + attr => attr.canApplyExecutedMove(pokemon, simulated), + args, + simulated, + ); +} + export function applyPostAttackAbAttrs( attrType: Constructor, pokemon: Pokemon, diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index e0fa381447b..84072b393f1 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -3,10 +3,12 @@ import { globalScene } from "#app/global-scene"; import { AddSecondStrikeAbAttr, AlwaysHitAbAttr, + applyExecutedMoveAbAttrs, applyPostAttackAbAttrs, applyPostDamageAbAttrs, applyPostDefendAbAttrs, applyPreAttackAbAttrs, + ExecutedMoveAbAttr, IgnoreMoveEffectsAbAttr, MaxMultiHitAbAttr, PostAttackAbAttr, @@ -380,6 +382,7 @@ export class MoveEffectPhase extends PokemonPhase { // Add to the move history entry if (this.firstHit) { user.pushMoveHistory(this.moveHistoryEntry); + applyExecutedMoveAbAttrs(ExecutedMoveAbAttr, user); } try { diff --git a/test/abilities/gorilla_tactics.test.ts b/test/abilities/gorilla_tactics.test.ts index 55b8a4addcd..3ad138749a8 100644 --- a/test/abilities/gorilla_tactics.test.ts +++ b/test/abilities/gorilla_tactics.test.ts @@ -73,9 +73,38 @@ describe("Abilities - Gorilla Tactics", () => { await game.toNextTurn(); game.move.select(MoveId.TACKLE); + await game.move.forceEnemyMove(MoveId.SPLASH); //prevent protect from being used by the enemy await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); expect(darmanitan.hp).toBeLessThan(darmanitan.getMaxHp()); }); + + it("should activate when the opponenet protects", async () => { + await game.classicMode.startBattle([SpeciesId.GALAR_DARMANITAN]); + + const darmanitan = game.field.getPlayerPokemon(); + + game.move.select(MoveId.TACKLE); + await game.move.selectEnemyMove(MoveId.PROTECT); + + await game.toEndOfTurn(); + expect(darmanitan.isMoveRestricted(MoveId.SPLASH)).toBe(true); + expect(darmanitan.isMoveRestricted(MoveId.TACKLE)).toBe(false); + }); + + it("should activate when a move is succesfully executed but misses", async () => { + await game.classicMode.startBattle([SpeciesId.GALAR_DARMANITAN]); + + const darmanitan = game.field.getPlayerPokemon(); + + game.move.select(MoveId.TACKLE); + await game.move.selectEnemyMove(MoveId.SPLASH); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.move.forceMiss(); + await game.toEndOfTurn(); + + expect(darmanitan.isMoveRestricted(MoveId.SPLASH)).toBe(true); + expect(darmanitan.isMoveRestricted(MoveId.TACKLE)).toBe(false); + }); }); From 5ef88a6d4de250679c9117668d312762e7957eb8 Mon Sep 17 00:00:00 2001 From: Wlowscha <54003515+Wlowscha@users.noreply.github.com> Date: Mon, 9 Jun 2025 00:13:26 +0200 Subject: [PATCH 222/262] [Refactor] Refactor select-modifier-phase.ts (#5886) * Refactored select-modifier-phase.ts * Added some missing type signatures * Changes from suggestions * Added ModifierSelectCallback type --- src/phases/select-modifier-phase.ts | 548 +++++++++++++++------------- 1 file changed, 295 insertions(+), 253 deletions(-) diff --git a/src/phases/select-modifier-phase.ts b/src/phases/select-modifier-phase.ts index 4d790e70e1b..f99c921412f 100644 --- a/src/phases/select-modifier-phase.ts +++ b/src/phases/select-modifier-phase.ts @@ -31,6 +31,8 @@ import Overrides from "#app/overrides"; import type { CustomModifierSettings } from "#app/modifier/modifier-type"; import { isNullOrUndefined, NumberHolder } from "#app/utils/common"; +export type ModifierSelectCallback = (rowCursor: number, cursor: number) => boolean; + export class SelectModifierPhase extends BattlePhase { public readonly phaseName = "SelectModifierPhase"; private rerollCount: number; @@ -57,6 +59,10 @@ export class SelectModifierPhase extends BattlePhase { start() { super.start(); + if (!this.isPlayer()) { + return false; + } + if (!this.rerollCount && !this.isCopy) { this.updateSeed(); } else if (this.rerollCount) { @@ -67,27 +73,9 @@ export class SelectModifierPhase extends BattlePhase { if (!this.isCopy) { regenerateModifierPoolThresholds(party, this.getPoolType(), this.rerollCount); } - const modifierCount = new NumberHolder(3); - if (this.isPlayer()) { - globalScene.applyModifiers(ExtraModifierModifier, true, modifierCount); - globalScene.applyModifiers(TempExtraModifierModifier, true, modifierCount); - } + const modifierCount = this.getModifierCount(); - // If custom modifiers are specified, overrides default item count - if (this.customModifierSettings) { - const newItemCount = - (this.customModifierSettings.guaranteedModifierTiers?.length || 0) + - (this.customModifierSettings.guaranteedModifierTypeOptions?.length || 0) + - (this.customModifierSettings.guaranteedModifierTypeFuncs?.length || 0); - if (this.customModifierSettings.fillRemaining) { - const originalCount = modifierCount.value; - modifierCount.value = originalCount > newItemCount ? originalCount : newItemCount; - } else { - modifierCount.value = newItemCount; - } - } - - this.typeOptions = this.getModifierTypeOptions(modifierCount.value); + this.typeOptions = this.getModifierTypeOptions(modifierCount); const modifierSelectCallback = (rowCursor: number, cursor: number) => { if (rowCursor < 0 || cursor < 0) { @@ -99,258 +87,312 @@ export class SelectModifierPhase extends BattlePhase { globalScene.ui.setMode(UiMode.MESSAGE); super.end(); }, - () => - globalScene.ui.setMode( - UiMode.MODIFIER_SELECT, - this.isPlayer(), - this.typeOptions, - modifierSelectCallback, - this.getRerollCost(globalScene.lockModifierTiers), - ), + () => this.resetModifierSelect(modifierSelectCallback), ); }); return false; } - let modifierType: ModifierType; - let cost: number; - const rerollCost = this.getRerollCost(globalScene.lockModifierTiers); + switch (rowCursor) { + // Execute one of the options from the bottom row case 0: switch (cursor) { case 0: - if (rerollCost < 0 || globalScene.money < rerollCost) { - globalScene.ui.playError(); - return false; - } - globalScene.reroll = true; - globalScene.phaseManager.unshiftNew( - "SelectModifierPhase", - this.rerollCount + 1, - this.typeOptions.map(o => o.type?.tier).filter(t => t !== undefined) as ModifierTier[], - ); - globalScene.ui.clearText(); - globalScene.ui.setMode(UiMode.MESSAGE).then(() => super.end()); - if (!Overrides.WAIVE_ROLL_FEE_OVERRIDE) { - globalScene.money -= rerollCost; - globalScene.updateMoneyText(); - globalScene.animateMoneyChanged(false); - } - globalScene.playSound("se/buy"); - break; + return this.rerollModifiers(); case 1: - globalScene.ui.setModeWithoutClear( - UiMode.PARTY, - PartyUiMode.MODIFIER_TRANSFER, - -1, - (fromSlotIndex: number, itemIndex: number, itemQuantity: number, toSlotIndex: number) => { - if ( - toSlotIndex !== undefined && - fromSlotIndex < 6 && - toSlotIndex < 6 && - fromSlotIndex !== toSlotIndex && - itemIndex > -1 - ) { - const itemModifiers = globalScene.findModifiers( - m => - m instanceof PokemonHeldItemModifier && - m.isTransferable && - m.pokemonId === party[fromSlotIndex].id, - ) as PokemonHeldItemModifier[]; - const itemModifier = itemModifiers[itemIndex]; - globalScene.tryTransferHeldItemModifier( - itemModifier, - party[toSlotIndex], - true, - itemQuantity, - undefined, - undefined, - false, - ); - } else { - globalScene.ui.setMode( - UiMode.MODIFIER_SELECT, - this.isPlayer(), - this.typeOptions, - modifierSelectCallback, - this.getRerollCost(globalScene.lockModifierTiers), - ); - } - }, - PartyUiHandler.FilterItemMaxStacks, - ); - break; + return this.openModifierTransferScreen(modifierSelectCallback); + // Check the party, pass a callback to restore the modifier select screen. case 2: globalScene.ui.setModeWithoutClear(UiMode.PARTY, PartyUiMode.CHECK, -1, () => { - globalScene.ui.setMode( - UiMode.MODIFIER_SELECT, - this.isPlayer(), - this.typeOptions, - modifierSelectCallback, - this.getRerollCost(globalScene.lockModifierTiers), - ); + this.resetModifierSelect(modifierSelectCallback); }); - break; + return true; case 3: - if (rerollCost < 0) { - // Reroll lock button is also disabled when reroll is disabled - globalScene.ui.playError(); - return false; - } - globalScene.lockModifierTiers = !globalScene.lockModifierTiers; - const uiHandler = globalScene.ui.getHandler() as ModifierSelectUiHandler; - uiHandler.setRerollCost(this.getRerollCost(globalScene.lockModifierTiers)); - uiHandler.updateLockRaritiesText(); - uiHandler.updateRerollCostText(); + return this.toggleRerollLock(); + default: return false; } - return true; + // Pick an option from the rewards case 1: - if (this.typeOptions.length === 0) { - globalScene.ui.clearText(); - globalScene.ui.setMode(UiMode.MESSAGE); - super.end(); - return true; - } - if (this.typeOptions[cursor].type) { - modifierType = this.typeOptions[cursor].type; - } - break; - default: - const shopOptions = getPlayerShopModifierTypeOptionsForWave( - globalScene.currentBattle.waveIndex, - globalScene.getWaveMoneyAmount(1), - ); - const shopOption = - shopOptions[ - rowCursor > 2 || shopOptions.length <= SHOP_OPTIONS_ROW_LIMIT ? cursor : cursor + SHOP_OPTIONS_ROW_LIMIT - ]; - if (shopOption.type) { - modifierType = shopOption.type; - } - // Apply Black Sludge to healing item cost - const healingItemCost = new NumberHolder(shopOption.cost); - globalScene.applyModifier(HealShopCostModifier, true, healingItemCost); - cost = healingItemCost.value; - break; - } - - if (cost! && globalScene.money < cost && !Overrides.WAIVE_ROLL_FEE_OVERRIDE) { - // TODO: is the bang on cost correct? - globalScene.ui.playError(); - return false; - } - - const applyModifier = (modifier: Modifier, playSound = false) => { - const result = globalScene.addModifier(modifier, false, playSound, undefined, undefined, cost); - // Queue a copy of this phase when applying a TM or Memory Mushroom. - // If the player selects either of these, then escapes out of consuming them, - // they are returned to a shop in the same state. - if (modifier.type instanceof RememberMoveModifierType || modifier.type instanceof TmModifierType) { - globalScene.phaseManager.unshiftPhase(this.copy()); + return this.selectRewardModifierOption(cursor, modifierSelectCallback); + // Pick an option from the shop + default: { + return this.selectShopModifierOption(rowCursor, cursor, modifierSelectCallback); } - - if (cost && !(modifier.type instanceof RememberMoveModifierType)) { - if (result) { - if (!Overrides.WAIVE_ROLL_FEE_OVERRIDE) { - globalScene.money -= cost; - globalScene.updateMoneyText(); - globalScene.animateMoneyChanged(false); - } - globalScene.playSound("se/buy"); - (globalScene.ui.getHandler() as ModifierSelectUiHandler).updateCostText(); - } else { - globalScene.ui.playError(); - } - } else { - globalScene.ui.clearText(); - globalScene.ui.setMode(UiMode.MESSAGE); - super.end(); - } - }; - - if (modifierType! instanceof PokemonModifierType) { - //TODO: is the bang correct? - if (modifierType instanceof FusePokemonModifierType) { - globalScene.ui.setModeWithoutClear( - UiMode.PARTY, - PartyUiMode.SPLICE, - -1, - (fromSlotIndex: number, spliceSlotIndex: number) => { - if ( - spliceSlotIndex !== undefined && - fromSlotIndex < 6 && - spliceSlotIndex < 6 && - fromSlotIndex !== spliceSlotIndex - ) { - globalScene.ui.setMode(UiMode.MODIFIER_SELECT, this.isPlayer()).then(() => { - const modifier = modifierType.newModifier(party[fromSlotIndex], party[spliceSlotIndex])!; //TODO: is the bang correct? - applyModifier(modifier, true); - }); - } else { - globalScene.ui.setMode( - UiMode.MODIFIER_SELECT, - this.isPlayer(), - this.typeOptions, - modifierSelectCallback, - this.getRerollCost(globalScene.lockModifierTiers), - ); - } - }, - modifierType.selectFilter, - ); - } else { - const pokemonModifierType = modifierType as PokemonModifierType; - const isMoveModifier = modifierType instanceof PokemonMoveModifierType; - const isTmModifier = modifierType instanceof TmModifierType; - const isRememberMoveModifier = modifierType instanceof RememberMoveModifierType; - const isPpRestoreModifier = - modifierType instanceof PokemonPpRestoreModifierType || modifierType instanceof PokemonPpUpModifierType; - const partyUiMode = isMoveModifier - ? PartyUiMode.MOVE_MODIFIER - : isTmModifier - ? PartyUiMode.TM_MODIFIER - : isRememberMoveModifier - ? PartyUiMode.REMEMBER_MOVE_MODIFIER - : PartyUiMode.MODIFIER; - const tmMoveId = isTmModifier ? (modifierType as TmModifierType).moveId : undefined; - globalScene.ui.setModeWithoutClear( - UiMode.PARTY, - partyUiMode, - -1, - (slotIndex: number, option: PartyOption) => { - if (slotIndex < 6) { - globalScene.ui.setMode(UiMode.MODIFIER_SELECT, this.isPlayer()).then(() => { - const modifier = !isMoveModifier - ? !isRememberMoveModifier - ? modifierType.newModifier(party[slotIndex]) - : modifierType.newModifier(party[slotIndex], option as number) - : modifierType.newModifier(party[slotIndex], option - PartyOption.MOVE_1); - applyModifier(modifier!, true); // TODO: is the bang correct? - }); - } else { - globalScene.ui.setMode( - UiMode.MODIFIER_SELECT, - this.isPlayer(), - this.typeOptions, - modifierSelectCallback, - this.getRerollCost(globalScene.lockModifierTiers), - ); - } - }, - pokemonModifierType.selectFilter, - modifierType instanceof PokemonMoveModifierType - ? (modifierType as PokemonMoveModifierType).moveSelectFilter - : undefined, - tmMoveId, - isPpRestoreModifier, - ); - } - } else { - applyModifier(modifierType!.newModifier()!); // TODO: is the bang correct? } - - return !cost!; // TODO: is the bang correct? }; + + this.resetModifierSelect(modifierSelectCallback); + } + + // Pick a modifier from among the rewards and apply it + private selectRewardModifierOption(cursor: number, modifierSelectCallback: ModifierSelectCallback): boolean { + if (this.typeOptions.length === 0) { + globalScene.ui.clearText(); + globalScene.ui.setMode(UiMode.MESSAGE); + super.end(); + return true; + } + const modifierType = this.typeOptions[cursor].type; + return this.applyChosenModifier(modifierType, 0, modifierSelectCallback); + } + + // Pick a modifier from the shop and apply it + private selectShopModifierOption( + rowCursor: number, + cursor: number, + modifierSelectCallback: ModifierSelectCallback, + ): boolean { + const shopOptions = getPlayerShopModifierTypeOptionsForWave( + globalScene.currentBattle.waveIndex, + globalScene.getWaveMoneyAmount(1), + ); + const shopOption = + shopOptions[ + rowCursor > 2 || shopOptions.length <= SHOP_OPTIONS_ROW_LIMIT ? cursor : cursor + SHOP_OPTIONS_ROW_LIMIT + ]; + const modifierType = shopOption.type; + // Apply Black Sludge to healing item cost + const healingItemCost = new NumberHolder(shopOption.cost); + globalScene.applyModifier(HealShopCostModifier, true, healingItemCost); + const cost = healingItemCost.value; + + if (globalScene.money < cost && !Overrides.WAIVE_ROLL_FEE_OVERRIDE) { + globalScene.ui.playError(); + return false; + } + + return this.applyChosenModifier(modifierType, cost, modifierSelectCallback); + } + + // Apply a chosen modifier: do an effect or open the party menu + private applyChosenModifier( + modifierType: ModifierType, + cost: number, + modifierSelectCallback: ModifierSelectCallback, + ): boolean { + if (modifierType instanceof PokemonModifierType) { + if (modifierType instanceof FusePokemonModifierType) { + this.openFusionMenu(modifierType, cost, modifierSelectCallback); + } else { + this.openModifierMenu(modifierType, cost, modifierSelectCallback); + } + } else { + this.applyModifier(modifierType.newModifier()!); + } + return !cost; + } + + // Reroll rewards + private rerollModifiers() { + const rerollCost = this.getRerollCost(globalScene.lockModifierTiers); + if (rerollCost < 0 || globalScene.money < rerollCost) { + globalScene.ui.playError(); + return false; + } + globalScene.reroll = true; + globalScene.phaseManager.unshiftNew( + "SelectModifierPhase", + this.rerollCount + 1, + this.typeOptions.map(o => o.type?.tier).filter(t => t !== undefined) as ModifierTier[], + ); + globalScene.ui.clearText(); + globalScene.ui.setMode(UiMode.MESSAGE).then(() => super.end()); + if (!Overrides.WAIVE_ROLL_FEE_OVERRIDE) { + globalScene.money -= rerollCost; + globalScene.updateMoneyText(); + globalScene.animateMoneyChanged(false); + } + globalScene.playSound("se/buy"); + return true; + } + + // Transfer modifiers among party pokemon + private openModifierTransferScreen(modifierSelectCallback: ModifierSelectCallback) { + const party = globalScene.getPlayerParty(); + globalScene.ui.setModeWithoutClear( + UiMode.PARTY, + PartyUiMode.MODIFIER_TRANSFER, + -1, + (fromSlotIndex: number, itemIndex: number, itemQuantity: number, toSlotIndex: number) => { + if ( + toSlotIndex !== undefined && + fromSlotIndex < 6 && + toSlotIndex < 6 && + fromSlotIndex !== toSlotIndex && + itemIndex > -1 + ) { + const itemModifiers = globalScene.findModifiers( + m => m instanceof PokemonHeldItemModifier && m.isTransferable && m.pokemonId === party[fromSlotIndex].id, + ) as PokemonHeldItemModifier[]; + const itemModifier = itemModifiers[itemIndex]; + globalScene.tryTransferHeldItemModifier( + itemModifier, + party[toSlotIndex], + true, + itemQuantity, + undefined, + undefined, + false, + ); + } else { + this.resetModifierSelect(modifierSelectCallback); + } + }, + PartyUiHandler.FilterItemMaxStacks, + ); + return true; + } + + // Toggle reroll lock + private toggleRerollLock() { + const rerollCost = this.getRerollCost(globalScene.lockModifierTiers); + if (rerollCost < 0) { + // Reroll lock button is also disabled when reroll is disabled + globalScene.ui.playError(); + return false; + } + globalScene.lockModifierTiers = !globalScene.lockModifierTiers; + const uiHandler = globalScene.ui.getHandler() as ModifierSelectUiHandler; + uiHandler.setRerollCost(this.getRerollCost(globalScene.lockModifierTiers)); + uiHandler.updateLockRaritiesText(); + uiHandler.updateRerollCostText(); + return false; + } + + // Applies the effects of the chosen modifier + private applyModifier(modifier: Modifier, cost = 0, playSound = false): void { + const result = globalScene.addModifier(modifier, false, playSound, undefined, undefined, cost); + // Queue a copy of this phase when applying a TM or Memory Mushroom. + // If the player selects either of these, then escapes out of consuming them, + // they are returned to a shop in the same state. + if (modifier.type instanceof RememberMoveModifierType || modifier.type instanceof TmModifierType) { + globalScene.phaseManager.unshiftPhase(this.copy()); + } + + if (cost && !(modifier.type instanceof RememberMoveModifierType)) { + if (result) { + if (!Overrides.WAIVE_ROLL_FEE_OVERRIDE) { + globalScene.money -= cost; + globalScene.updateMoneyText(); + globalScene.animateMoneyChanged(false); + } + globalScene.playSound("se/buy"); + (globalScene.ui.getHandler() as ModifierSelectUiHandler).updateCostText(); + } else { + globalScene.ui.playError(); + } + } else { + globalScene.ui.clearText(); + globalScene.ui.setMode(UiMode.MESSAGE); + super.end(); + } + } + + // Opens the party menu specifically for fusions + private openFusionMenu( + modifierType: PokemonModifierType, + cost: number, + modifierSelectCallback: ModifierSelectCallback, + ): void { + const party = globalScene.getPlayerParty(); + globalScene.ui.setModeWithoutClear( + UiMode.PARTY, + PartyUiMode.SPLICE, + -1, + (fromSlotIndex: number, spliceSlotIndex: number) => { + if ( + spliceSlotIndex !== undefined && + fromSlotIndex < 6 && + spliceSlotIndex < 6 && + fromSlotIndex !== spliceSlotIndex + ) { + globalScene.ui.setMode(UiMode.MODIFIER_SELECT, this.isPlayer()).then(() => { + const modifier = modifierType.newModifier(party[fromSlotIndex], party[spliceSlotIndex])!; //TODO: is the bang correct? + this.applyModifier(modifier, cost, true); + }); + } else { + this.resetModifierSelect(modifierSelectCallback); + } + }, + modifierType.selectFilter, + ); + } + + // Opens the party menu to apply one of various modifiers + private openModifierMenu( + modifierType: PokemonModifierType, + cost: number, + modifierSelectCallback: ModifierSelectCallback, + ): void { + const party = globalScene.getPlayerParty(); + const pokemonModifierType = modifierType as PokemonModifierType; + const isMoveModifier = modifierType instanceof PokemonMoveModifierType; + const isTmModifier = modifierType instanceof TmModifierType; + const isRememberMoveModifier = modifierType instanceof RememberMoveModifierType; + const isPpRestoreModifier = + modifierType instanceof PokemonPpRestoreModifierType || modifierType instanceof PokemonPpUpModifierType; + const partyUiMode = isMoveModifier + ? PartyUiMode.MOVE_MODIFIER + : isTmModifier + ? PartyUiMode.TM_MODIFIER + : isRememberMoveModifier + ? PartyUiMode.REMEMBER_MOVE_MODIFIER + : PartyUiMode.MODIFIER; + const tmMoveId = isTmModifier ? (modifierType as TmModifierType).moveId : undefined; + globalScene.ui.setModeWithoutClear( + UiMode.PARTY, + partyUiMode, + -1, + (slotIndex: number, option: PartyOption) => { + if (slotIndex < 6) { + globalScene.ui.setMode(UiMode.MODIFIER_SELECT, this.isPlayer()).then(() => { + const modifier = !isMoveModifier + ? !isRememberMoveModifier + ? modifierType.newModifier(party[slotIndex]) + : modifierType.newModifier(party[slotIndex], option as number) + : modifierType.newModifier(party[slotIndex], option - PartyOption.MOVE_1); + this.applyModifier(modifier!, cost, true); // TODO: is the bang correct? + }); + } else { + this.resetModifierSelect(modifierSelectCallback); + } + }, + pokemonModifierType.selectFilter, + modifierType instanceof PokemonMoveModifierType + ? (modifierType as PokemonMoveModifierType).moveSelectFilter + : undefined, + tmMoveId, + isPpRestoreModifier, + ); + } + + // Function that determines how many reward slots are available + private getModifierCount(): number { + const modifierCountHolder = new NumberHolder(3); + globalScene.applyModifiers(ExtraModifierModifier, true, modifierCountHolder); + globalScene.applyModifiers(TempExtraModifierModifier, true, modifierCountHolder); + + // If custom modifiers are specified, overrides default item count + if (this.customModifierSettings) { + const newItemCount = + (this.customModifierSettings.guaranteedModifierTiers?.length ?? 0) + + (this.customModifierSettings.guaranteedModifierTypeOptions?.length ?? 0) + + (this.customModifierSettings.guaranteedModifierTypeFuncs?.length ?? 0); + if (this.customModifierSettings.fillRemaining) { + const originalCount = modifierCountHolder.value; + modifierCountHolder.value = originalCount > newItemCount ? originalCount : newItemCount; + } else { + modifierCountHolder.value = newItemCount; + } + } + + return modifierCountHolder.value; + } + + // Function that resets the reward selection screen, + // e.g. after pressing cancel in the party ui or while learning a move + private resetModifierSelect(modifierSelectCallback: ModifierSelectCallback) { globalScene.ui.setMode( UiMode.MODIFIER_SELECT, this.isPlayer(), From d2ace47e1e6ece668c4827d73244bef7f053625e Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Sun, 8 Jun 2025 15:36:01 -0700 Subject: [PATCH 223/262] [Test] Add missing ability override to Dancer tests --- test/abilities/dancer.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/abilities/dancer.test.ts b/test/abilities/dancer.test.ts index ae702e4b1e7..518c96ea124 100644 --- a/test/abilities/dancer.test.ts +++ b/test/abilities/dancer.test.ts @@ -25,7 +25,7 @@ describe("Abilities - Dancer", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("double"); + game.override.battleStyle("double").enemyAbility(AbilityId.BALL_FETCH); }); // Reference Link: https://bulbapedia.bulbagarden.net/wiki/Dancer_(Ability) From b1c50dd69fa78f3b0e63ade7aeadb79828f5b2d7 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Sun, 8 Jun 2025 19:49:50 -0400 Subject: [PATCH 224/262] [Bug] Fix TM compatibility for Terapagos and Knock Off (#5958) Fix TM compatibility for Terapagos and Knock Off --- src/data/balance/tms.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/data/balance/tms.ts b/src/data/balance/tms.ts index e95fa12151d..2b0e8f5142d 100644 --- a/src/data/balance/tms.ts +++ b/src/data/balance/tms.ts @@ -5988,6 +5988,7 @@ export const tmSpecies: TmSpecies = { SpeciesId.FEZANDIPITI, SpeciesId.ARCHALUDON, SpeciesId.IRON_CROWN, + SpeciesId.TERAPAGOS, SpeciesId.ALOLA_RATICATE, SpeciesId.ALOLA_RAICHU, SpeciesId.ALOLA_SANDSLASH, @@ -16248,6 +16249,7 @@ export const tmSpecies: TmSpecies = { SpeciesId.CALYREX, SpeciesId.SANDY_SHOCKS, SpeciesId.IRON_JUGULIS, + SpeciesId.TERAPAGOS, SpeciesId.ALOLA_DUGTRIO, SpeciesId.GALAR_SLOWPOKE, SpeciesId.GALAR_SLOWBRO, @@ -39466,6 +39468,8 @@ export const tmSpecies: TmSpecies = { SpeciesId.FARFETCHD, SpeciesId.DODUO, SpeciesId.DODRIO, + SpeciesId.DEWGONG, + SpeciesId.GRIMER, SpeciesId.MUK, SpeciesId.GASTLY, SpeciesId.HAUNTER, @@ -39477,6 +39481,7 @@ export const tmSpecies: TmSpecies = { SpeciesId.CUBONE, SpeciesId.MAROWAK, SpeciesId.HITMONLEE, + SpeciesId.HITMONCHAN, SpeciesId.LICKITUNG, SpeciesId.TANGELA, SpeciesId.GOLDEEN, @@ -48806,6 +48811,7 @@ export const tmSpecies: TmSpecies = { SpeciesId.GARGANACL, SpeciesId.GLIMMET, SpeciesId.GLIMMORA, + SpeciesId.TERAPAGOS, SpeciesId.ALOLA_GEODUDE, SpeciesId.ALOLA_GRAVELER, SpeciesId.ALOLA_GOLEM, @@ -53077,6 +53083,7 @@ export const tmSpecies: TmSpecies = { SpeciesId.MIRAIDON, SpeciesId.ARCHALUDON, SpeciesId.IRON_CROWN, + SpeciesId.TERAPAGOS, [ SpeciesId.WORMADAM, "trash", From 48e911e03cc71e6bec3883acb9fc8ca045364a1c Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Mon, 9 Jun 2025 18:24:13 -0500 Subject: [PATCH 225/262] [Refactor] Remove circular deps 3 (#5959) * Move game-mode to its own file Reduces circular imports to 325 * Move battler-index to own file Reduces circular deps to 314 * Move trainer-variant to own file Reduces circ deps to 313 * Move enums in pokemon to their own file * Move arena-tag-type to its own file * Move pokemon-moves to its own file * Move command to own file * Move learnMoveType to own file * Move form change item to own file * Move battlerTagLapseType to own file * Move anim enums to own shared file * Move enums out of challenges * Move species form change triggers to own file Reduces circ imports to 291 * Update test importing pokemon move * Replace move attribute imports with string names * Untangle circular deps from game data * Fix missing string call in switch summon phase * Apply kev's suggestions from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Ensure ChargeMove's is method calls super * Use InstanceType for proper narrowing * Apply kev's suggestions from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/@types/move-types.ts | 56 ++ src/battle-scene.ts | 19 +- src/battle.ts | 14 +- src/constants.ts | 37 ++ src/data/abilities/ability.ts | 86 ++- src/data/arena-tag.ts | 14 +- src/data/battle-anims.ts | 117 +--- src/data/battler-tags.ts | 35 +- src/data/berry.ts | 2 +- src/data/challenge.ts | 92 +-- src/data/moves/apply-attrs.ts | 58 ++ src/data/moves/move-utils.ts | 96 ++- src/data/moves/move.ts | 546 ++++++++++++------ src/data/moves/pokemon-move.ts | 93 +++ .../encounters/absolute-avarice-encounter.ts | 5 +- .../encounters/bug-type-superfan-encounter.ts | 2 +- .../encounters/clowning-around-encounter.ts | 4 +- .../encounters/dancing-lessons-encounter.ts | 5 +- .../encounters/field-trip-encounter.ts | 3 +- .../encounters/fiery-fallout-encounter.ts | 4 +- .../encounters/fun-and-games-encounter.ts | 4 +- .../global-trade-system-encounter.ts | 3 +- .../encounters/lost-at-sea-encounter.ts | 2 +- .../slumbering-snorlax-encounter.ts | 5 +- .../encounters/the-strong-stuff-encounter.ts | 4 +- .../the-winstrate-challenge-encounter.ts | 2 +- .../encounters/training-session-encounter.ts | 2 +- .../encounters/trash-to-treasure-encounter.ts | 4 +- .../encounters/uncommon-breed-encounter.ts | 7 +- .../encounters/weird-dream-encounter.ts | 2 +- .../mystery-encounter-requirements.ts | 4 +- .../mystery-encounters/mystery-encounter.ts | 7 +- .../can-learn-move-requirement.ts | 2 +- .../utils/encounter-phase-utils.ts | 12 +- src/data/pokemon-forms.ts | 484 +--------------- .../pokemon-forms/form-change-triggers.ts | 348 +++++++++++ src/data/pokemon-species.ts | 3 +- src/data/terrain.ts | 5 +- src/data/trainers/TrainerPartyTemplate.ts | 2 +- src/data/trainers/trainer-config.ts | 4 +- src/data/weather.ts | 5 +- src/enums/ability-attr.ts | 11 + src/enums/ai-type.ts | 5 + src/enums/arena-tag-side.ts | 5 + src/enums/battler-index.ts | 7 + src/enums/battler-tag-lapse-type.ts | 12 + src/enums/challenge-type.ts | 69 +++ src/enums/command.ts | 7 + src/enums/dex-attr.ts | 11 + src/enums/field-position.ts | 5 + src/enums/form-change-item.ts | 119 ++++ src/enums/game-modes.ts | 7 + src/enums/hit-result.ts | 15 + src/enums/learn-move-situation.ts | 8 + src/enums/learn-move-type.ts | 8 + src/enums/move-anims-common.ts | 95 +++ src/enums/move-result.ts | 7 + src/enums/move-source-type.ts | 12 + src/enums/trainer-variant.ts | 5 + src/events/arena.ts | 2 +- src/field/arena.ts | 12 +- src/field/damage-number-handler.ts | 4 +- src/field/pokemon.ts | 257 ++------- src/field/trainer.ts | 10 +- src/game-mode.ts | 12 +- src/modifier/modifier-type.ts | 15 +- src/modifier/modifier.ts | 7 +- src/overrides.ts | 2 +- src/phases/attempt-capture-phase.ts | 2 +- src/phases/berry-phase.ts | 2 +- src/phases/check-status-effect-phase.ts | 2 +- src/phases/command-phase.ts | 8 +- src/phases/common-anim-phase.ts | 4 +- src/phases/damage-anim-phase.ts | 5 +- src/phases/encounter-phase.ts | 4 +- src/phases/enemy-command-phase.ts | 4 +- src/phases/evolution-phase.ts | 2 +- src/phases/faint-phase.ts | 12 +- src/phases/form-change-phase.ts | 2 +- src/phases/learn-move-phase.ts | 12 +- src/phases/move-charge-phase.ts | 12 +- src/phases/move-effect-phase.ts | 62 +- src/phases/move-end-phase.ts | 4 +- src/phases/move-header-phase.ts | 6 +- src/phases/move-phase.ts | 47 +- src/phases/mystery-encounter-phases.ts | 2 +- src/phases/obtain-status-effect-phase.ts | 7 +- src/phases/pokemon-heal-phase.ts | 6 +- src/phases/pokemon-phase.ts | 2 +- src/phases/pokemon-transform-phase.ts | 4 +- src/phases/post-turn-status-effect-phase.ts | 5 +- src/phases/quiet-form-change-phase.ts | 5 +- src/phases/return-phase.ts | 2 +- src/phases/scan-ivs-phase.ts | 2 +- src/phases/select-starter-phase.ts | 5 +- src/phases/select-target-phase.ts | 4 +- src/phases/shiny-sparkle-phase.ts | 2 +- src/phases/show-ability-phase.ts | 2 +- src/phases/stat-stage-change-phase.ts | 5 +- src/phases/summon-phase.ts | 4 +- src/phases/switch-summon-phase.ts | 7 +- src/phases/tera-phase.ts | 5 +- src/phases/title-phase.ts | 3 +- src/phases/toggle-double-position-phase.ts | 2 +- src/phases/turn-end-phase.ts | 2 +- src/phases/turn-init-phase.ts | 2 +- src/phases/turn-start-phase.ts | 9 +- src/phases/victory-phase.ts | 2 +- src/phases/weather-effect-phase.ts | 4 +- src/system/game-data.ts | 111 +--- src/system/pokemon-data.ts | 3 +- src/system/trainer-data.ts | 3 +- src/system/unlockables.ts | 3 +- .../version_migration/versions/v1_0_4.ts | 4 +- .../version_migration/versions/v1_7_0.ts | 3 +- .../version_migration/versions/v1_8_3.ts | 3 +- .../version_migration/versions/v1_9_0.ts | 2 +- src/ui/arena-flyout.ts | 3 +- src/ui/ball-ui-handler.ts | 2 +- src/ui/command-ui-handler.ts | 9 +- src/ui/fight-ui-handler.ts | 5 +- src/ui/game-stats-ui-handler.ts | 2 +- src/ui/hatched-pokemon-container.ts | 2 +- src/ui/party-ui-handler.ts | 16 +- src/ui/pokedex-page-ui-handler.ts | 3 +- src/ui/pokedex-ui-handler.ts | 7 +- src/ui/pokemon-info-container.ts | 2 +- src/ui/run-history-ui-handler.ts | 4 +- src/ui/run-info-ui-handler.ts | 4 +- src/ui/starter-select-ui-handler.ts | 12 +- src/ui/summary-ui-handler.ts | 3 +- src/ui/target-select-ui-handler.ts | 4 +- src/utils/data.ts | 47 ++ test/abilities/analytic.test.ts | 2 +- test/abilities/aroma_veil.test.ts | 2 +- test/abilities/battle_bond.test.ts | 3 +- test/abilities/beast_boost.test.ts | 2 +- test/abilities/commander.test.ts | 4 +- test/abilities/dancer.test.ts | 4 +- test/abilities/desolate-land.test.ts | 2 +- test/abilities/disguise.test.ts | 2 +- test/abilities/early_bird.test.ts | 2 +- test/abilities/flash_fire.test.ts | 2 +- test/abilities/flower_gift.test.ts | 2 +- test/abilities/flower_veil.test.ts | 2 +- test/abilities/forecast.test.ts | 2 +- test/abilities/friend_guard.test.ts | 2 +- test/abilities/good_as_gold.test.ts | 4 +- test/abilities/gorilla_tactics.test.ts | 2 +- test/abilities/gulp_missile.test.ts | 2 +- test/abilities/harvest.test.ts | 2 +- test/abilities/honey_gather.test.ts | 2 +- test/abilities/ice_face.test.ts | 2 +- test/abilities/infiltrator.test.ts | 2 +- test/abilities/lightningrod.test.ts | 2 +- test/abilities/magic_bounce.test.ts | 4 +- test/abilities/magic_guard.test.ts | 3 +- test/abilities/mirror_armor.test.ts | 2 +- test/abilities/mold_breaker.test.ts | 2 +- test/abilities/moxie.test.ts | 2 +- test/abilities/neutralizing_gas.test.ts | 4 +- test/abilities/no_guard.test.ts | 2 +- .../abilities/normal-move-type-change.test.ts | 2 +- test/abilities/pastel_veil.test.ts | 2 +- test/abilities/protosynthesis.test.ts | 2 +- test/abilities/serene_grace.test.ts | 5 +- test/abilities/sheer_force.test.ts | 7 +- test/abilities/shield_dust.test.ts | 2 +- test/abilities/speed_boost.test.ts | 2 +- test/abilities/stakeout.test.ts | 2 +- test/abilities/storm_drain.test.ts | 2 +- test/abilities/supreme_overlord.test.ts | 2 +- test/abilities/sweet_veil.test.ts | 2 +- test/abilities/tera_shell.test.ts | 2 +- test/abilities/unburden.test.ts | 2 +- test/abilities/victory_star.test.ts | 2 +- test/abilities/volt_absorb.test.ts | 2 +- test/abilities/wimp_out.test.ts | 4 +- test/arena/arena_gravity.test.ts | 2 +- test/arena/weather_hail.test.ts | 2 +- test/battle/battle.test.ts | 3 +- test/battle/double_battle.test.ts | 3 +- test/battle/inverse_battle.test.ts | 2 +- test/battlerTags/octolock.test.ts | 3 +- test/battlerTags/substitute.test.ts | 5 +- test/data/status_effect.test.ts | 2 +- test/endless_boss.test.ts | 2 +- test/enemy_command.test.ts | 2 +- test/escape-calculations.test.ts | 2 +- test/final_boss.test.ts | 2 +- test/game-mode.test.ts | 3 +- test/imports.test.ts | 2 +- test/items/grip_claw.test.ts | 2 +- test/items/multi_lens.test.ts | 2 +- test/items/reviver_seed.test.ts | 2 +- test/moves/after_you.test.ts | 4 +- test/moves/alluring_voice.test.ts | 2 +- test/moves/assist.test.ts | 4 +- test/moves/aurora_veil.test.ts | 5 +- test/moves/baneful_bunker.test.ts | 2 +- test/moves/baton_pass.test.ts | 2 +- test/moves/burning_jealousy.test.ts | 2 +- test/moves/camouflage.test.ts | 2 +- test/moves/ceaseless_edge.test.ts | 3 +- test/moves/chloroblast.test.ts | 2 +- test/moves/copycat.test.ts | 8 +- test/moves/destiny_bond.test.ts | 4 +- test/moves/dig.test.ts | 4 +- test/moves/disable.test.ts | 4 +- test/moves/dive.test.ts | 2 +- test/moves/doodle.test.ts | 2 +- test/moves/dragon_cheer.test.ts | 2 +- test/moves/dragon_tail.test.ts | 2 +- test/moves/dynamax_cannon.test.ts | 2 +- test/moves/electrify.test.ts | 2 +- test/moves/electro_shot.test.ts | 2 +- test/moves/encore.test.ts | 4 +- test/moves/fairy_lock.test.ts | 2 +- test/moves/false_swipe.test.ts | 2 +- test/moves/fly.test.ts | 4 +- test/moves/follow_me.test.ts | 2 +- test/moves/freeze_dry.test.ts | 2 +- test/moves/fusion_flare_bolt.test.ts | 2 +- test/moves/gastro_acid.test.ts | 4 +- test/moves/geomancy.test.ts | 2 +- test/moves/gigaton_hammer.test.ts | 2 +- test/moves/grudge.test.ts | 2 +- test/moves/heal_block.test.ts | 4 +- test/moves/instruct.test.ts | 4 +- test/moves/jaw_lock.test.ts | 2 +- test/moves/lash_out.test.ts | 2 +- test/moves/last-resort.test.ts | 4 +- test/moves/last_respects.test.ts | 2 +- test/moves/light_screen.test.ts | 5 +- test/moves/magic_coat.test.ts | 6 +- test/moves/metal_burst.test.ts | 4 +- test/moves/metronome.test.ts | 4 +- test/moves/miracle_eye.test.ts | 2 +- test/moves/mirror_move.test.ts | 4 +- test/moves/moongeist_beam.test.ts | 3 +- test/moves/multi_target.test.ts | 2 +- test/moves/order_up.test.ts | 2 +- test/moves/plasma_fists.test.ts | 2 +- test/moves/pledge_moves.test.ts | 7 +- test/moves/pollen_puff.test.ts | 2 +- test/moves/powder.test.ts | 5 +- test/moves/protect.test.ts | 7 +- test/moves/purify.test.ts | 2 +- test/moves/quash.test.ts | 4 +- test/moves/quick_guard.test.ts | 4 +- test/moves/rage_fist.test.ts | 2 +- test/moves/rage_powder.test.ts | 2 +- test/moves/reflect.test.ts | 5 +- test/moves/revival_blessing.test.ts | 4 +- test/moves/roost.test.ts | 2 +- test/moves/round.test.ts | 2 +- test/moves/safeguard.test.ts | 2 +- test/moves/scale_shot.test.ts | 2 +- test/moves/secret_power.test.ts | 4 +- test/moves/shed_tail.test.ts | 2 +- test/moves/shell_side_arm.test.ts | 6 +- test/moves/shell_trap.test.ts | 4 +- test/moves/sketch.test.ts | 5 +- test/moves/sleep_talk.test.ts | 2 +- test/moves/solar_beam.test.ts | 2 +- test/moves/spectral_thief.test.ts | 2 +- test/moves/spikes.test.ts | 3 +- test/moves/spit_up.test.ts | 2 +- test/moves/spotlight.test.ts | 2 +- test/moves/steamroller.test.ts | 2 +- test/moves/stockpile.test.ts | 2 +- test/moves/substitute.test.ts | 8 +- test/moves/swallow.test.ts | 2 +- test/moves/syrup_bomb.test.ts | 2 +- test/moves/tailwind.test.ts | 2 +- test/moves/tar_shot.test.ts | 2 +- test/moves/taunt.test.ts | 2 +- test/moves/telekinesis.test.ts | 4 +- test/moves/tera_blast.test.ts | 6 +- test/moves/tera_starstorm.test.ts | 2 +- test/moves/throat_chop.test.ts | 2 +- test/moves/torment.test.ts | 2 +- test/moves/toxic.test.ts | 2 +- test/moves/toxic_spikes.test.ts | 5 +- test/moves/transform.test.ts | 2 +- test/moves/triple_arrows.test.ts | 6 +- test/moves/upper_hand.test.ts | 4 +- test/moves/whirlwind.test.ts | 4 +- test/moves/will_o_wisp.test.ts | 2 +- ...an-offer-you-cant-refuse-encounter.test.ts | 2 +- .../bug-type-superfan-encounter.test.ts | 2 +- .../clowning-around-encounter.test.ts | 2 +- .../dancing-lessons-encounter.test.ts | 2 +- .../fight-or-flight-encounter.test.ts | 2 +- .../fun-and-games-encounter.test.ts | 2 +- .../encounters/part-timer-encounter.test.ts | 2 +- .../the-strong-stuff-encounter.test.ts | 2 +- .../trash-to-treasure-encounter.test.ts | 2 +- .../uncommon-breed-encounter.test.ts | 2 +- test/phases/frenzy-move-reset.test.ts | 2 +- test/reload.test.ts | 2 +- test/testUtils/gameManager.ts | 5 +- test/testUtils/gameManagerUtils.ts | 3 +- test/testUtils/helpers/classicModeHelper.ts | 3 +- test/testUtils/helpers/field-helper.ts | 2 +- test/testUtils/helpers/moveHelper.ts | 8 +- test/ui/starter-select.test.ts | 2 +- 307 files changed, 2185 insertions(+), 1774 deletions(-) create mode 100644 src/@types/move-types.ts create mode 100644 src/data/moves/apply-attrs.ts create mode 100644 src/data/moves/pokemon-move.ts create mode 100644 src/data/pokemon-forms/form-change-triggers.ts create mode 100644 src/enums/ability-attr.ts create mode 100644 src/enums/ai-type.ts create mode 100644 src/enums/arena-tag-side.ts create mode 100644 src/enums/battler-index.ts create mode 100644 src/enums/battler-tag-lapse-type.ts create mode 100644 src/enums/challenge-type.ts create mode 100644 src/enums/command.ts create mode 100644 src/enums/dex-attr.ts create mode 100644 src/enums/field-position.ts create mode 100644 src/enums/form-change-item.ts create mode 100644 src/enums/game-modes.ts create mode 100644 src/enums/hit-result.ts create mode 100644 src/enums/learn-move-situation.ts create mode 100644 src/enums/learn-move-type.ts create mode 100644 src/enums/move-anims-common.ts create mode 100644 src/enums/move-result.ts create mode 100644 src/enums/move-source-type.ts create mode 100644 src/enums/trainer-variant.ts diff --git a/src/@types/move-types.ts b/src/@types/move-types.ts new file mode 100644 index 00000000000..d9a06fd20ee --- /dev/null +++ b/src/@types/move-types.ts @@ -0,0 +1,56 @@ +import type { + AttackMove, + StatusMove, + SelfStatusMove, + ChargingAttackMove, + ChargingSelfStatusMove, + MoveAttrConstructorMap, + MoveAttr, +} from "#app/data/moves/move"; + +export type MoveAttrFilter = (attr: MoveAttr) => boolean; + +export type * from "#app/data/moves/move"; + +/** + * Map of move subclass names to their respective classes. + * Does not include the ChargeMove subclasses. For that, use `ChargingMoveClassMap`. + * + * @privateremarks + * The `never` field (`declare private _: never`) in some classes is necessary + * to ensure typescript does not improperly narrow a failed `is` guard to `never`. + * + * For example, if we did not have the never, and wrote + * ``` + * function Foo(move: Move) { + * if (move.is("AttackMove")) { + * + * } else if (move.is("StatusMove")) { // typescript errors on the `is`, saying that `move` is `never` + * + * } + * ``` + */ +export type MoveClassMap = { + AttackMove: AttackMove; + StatusMove: StatusMove; + SelfStatusMove: SelfStatusMove; +}; + +/** + * Union type of all move subclass names + */ +export type MoveKindString = "AttackMove" | "StatusMove" | "SelfStatusMove"; + +/** + * Map of move attribute names to attribute instances. + */ +export type MoveAttrMap = { + [K in keyof MoveAttrConstructorMap]: InstanceType; +}; + +/** + * Union type of all move attribute names as strings. + */ +export type MoveAttrString = keyof MoveAttrMap; + +export type ChargingMove = ChargingAttackMove | ChargingSelfStatusMove; diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 7743302cf94..5586691a48d 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -80,13 +80,15 @@ import type { FixedBattleConfig } from "#app/battle"; import Battle from "#app/battle"; import { BattleType } from "#enums/battle-type"; import type { GameMode } from "#app/game-mode"; -import { GameModes, getGameMode } from "#app/game-mode"; +import { getGameMode } from "#app/game-mode"; +import { GameModes } from "#enums/game-modes"; import FieldSpritePipeline from "#app/pipelines/field-sprite"; import SpritePipeline from "#app/pipelines/sprite"; import PartyExpBar from "#app/ui/party-exp-bar"; import type { TrainerSlot } from "./enums/trainer-slot"; import { trainerConfigs } from "#app/data/trainers/trainer-config"; -import Trainer, { TrainerVariant } from "#app/field/trainer"; +import Trainer from "#app/field/trainer"; +import { TrainerVariant } from "#enums/trainer-variant"; import type TrainerData from "#app/system/trainer-data"; import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; @@ -101,13 +103,12 @@ import type UIPlugin from "phaser3-rex-plugins/templates/ui/ui-plugin"; import { addUiThemeOverrides } from "#app/ui/ui-theme"; import type PokemonData from "#app/system/pokemon-data"; import { Nature } from "#enums/nature"; -import type { SpeciesFormChange, SpeciesFormChangeTrigger } from "#app/data/pokemon-forms"; -import { - FormChangeItem, - pokemonFormChanges, - SpeciesFormChangeManualTrigger, - SpeciesFormChangeTimeOfDayTrigger, -} from "#app/data/pokemon-forms"; +import type { SpeciesFormChange } from "#app/data/pokemon-forms"; +import type { SpeciesFormChangeTrigger } from "./data/pokemon-forms/form-change-triggers"; +import { pokemonFormChanges } from "#app/data/pokemon-forms"; +import { SpeciesFormChangeTimeOfDayTrigger } from "./data/pokemon-forms/form-change-triggers"; +import { SpeciesFormChangeManualTrigger } from "./data/pokemon-forms/form-change-triggers"; +import { FormChangeItem } from "#enums/form-change-item"; import { getTypeRgb } from "#app/data/type"; import { PokemonType } from "#enums/pokemon-type"; import PokemonSpriteSparkleHandler from "#app/field/pokemon-sprite-sparkle-handler"; diff --git a/src/battle.ts b/src/battle.ts index 2ebfb634751..0cf01a0873d 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import type { Command } from "./ui/command-ui-handler"; +import type { Command } from "#enums/command"; import { randomString, getEnumValues, @@ -10,7 +10,8 @@ import { randInt, randSeedFloat, } from "#app/utils/common"; -import Trainer, { TrainerVariant } from "./field/trainer"; +import Trainer from "./field/trainer"; +import { TrainerVariant } from "#enums/trainer-variant"; import type { GameMode } from "./game-mode"; import { MoneyMultiplierModifier, PokemonHeldItemModifier } from "./modifier/modifier"; import type { PokeballType } from "#enums/pokeball"; @@ -33,14 +34,7 @@ import { ModifierTier } from "#app/modifier/modifier-tier"; import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { BattleType } from "#enums/battle-type"; import { ClassicFixedBossWaves } from "#enums/fixed-boss-waves"; - -export enum BattlerIndex { - ATTACKER = -1, - PLAYER, - PLAYER_2, - ENEMY, - ENEMY_2, -} +import { BattlerIndex } from "#enums/battler-index"; export interface TurnCommand { command: Command; diff --git a/src/constants.ts b/src/constants.ts index d3594c389b6..62056ecc0d4 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -1,3 +1,5 @@ +import { SpeciesId } from "#enums/species-id"; + /** The maximum size of the player's party */ export const PLAYER_PARTY_MAX_SIZE: number = 6; @@ -17,3 +19,38 @@ export const CHALLENGE_MODE_MYSTERY_ENCOUNTER_WAVES: [number, number] = [10, 180 /** The raw percentage power boost for type boost items*/ export const TYPE_BOOST_ITEM_BOOST_PERCENT = 20; + +/** + * The default species that a new player can choose from + */ +export const defaultStarterSpecies: SpeciesId[] = [ + SpeciesId.BULBASAUR, + SpeciesId.CHARMANDER, + SpeciesId.SQUIRTLE, + SpeciesId.CHIKORITA, + SpeciesId.CYNDAQUIL, + SpeciesId.TOTODILE, + SpeciesId.TREECKO, + SpeciesId.TORCHIC, + SpeciesId.MUDKIP, + SpeciesId.TURTWIG, + SpeciesId.CHIMCHAR, + SpeciesId.PIPLUP, + SpeciesId.SNIVY, + SpeciesId.TEPIG, + SpeciesId.OSHAWOTT, + SpeciesId.CHESPIN, + SpeciesId.FENNEKIN, + SpeciesId.FROAKIE, + SpeciesId.ROWLET, + SpeciesId.LITTEN, + SpeciesId.POPPLIO, + SpeciesId.GROOKEY, + SpeciesId.SCORBUNNY, + SpeciesId.SOBBLE, + SpeciesId.SPRIGATITO, + SpeciesId.FUECOCO, + SpeciesId.QUAXLY, +]; + +export const saveKey = "x0i2O7WRiANTqPmZ"; // Temporary; secure encryption is not yet necessary diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 34ae8be78b6..128e772217f 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -1,4 +1,5 @@ -import { HitResult, MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; +import { HitResult } from "#enums/hit-result"; import { BooleanHolder, NumberHolder, @@ -10,40 +11,26 @@ import { randSeedFloat, } from "#app/utils/common"; import { getPokemonNameWithAffix } from "#app/messages"; -import { BattlerTagLapseType, GroundedTag } from "#app/data/battler-tags"; +import { GroundedTag } from "#app/data/battler-tags"; +import { BattlerTagLapseType } from "#enums/battler-tag-lapse-type"; import { getNonVolatileStatusEffects, getStatusEffectDescriptor, getStatusEffectHealText, } from "#app/data/status-effect"; import { Gender } from "#app/data/gender"; -import { - AttackMove, - FlinchAttr, - OneHitKOAttr, - HitHealAttr, - StatusMove, - SelfStatusMove, - VariablePowerAttr, - applyMoveAttrs, - RandomMovesetMoveAttr, - RandomMoveAttr, - NaturePowerAttr, - CopyMoveAttr, - NeutralDamageAgainstFlyingTypeMultiplierAttr, - FixedDamageAttr, -} from "#app/data/moves/move"; +import { applyMoveAttrs } from "../moves/apply-attrs"; import { allMoves } from "../data-lists"; -import { ArenaTagSide } from "#app/data/arena-tag"; +import { ArenaTagSide } from "#enums/arena-tag-side"; import { BerryModifier, HitHealModifier, PokemonHeldItemModifier } from "#app/modifier/modifier"; import { TerrainType } from "#app/data/terrain"; import { - SpeciesFormChangeAbilityTrigger, SpeciesFormChangeRevertWeatherFormTrigger, SpeciesFormChangeWeatherTrigger, -} from "#app/data/pokemon-forms"; +} from "../pokemon-forms/form-change-triggers"; +import { SpeciesFormChangeAbilityTrigger } from "../pokemon-forms/form-change-triggers"; import i18next from "i18next"; -import { Command } from "#app/ui/command-ui-handler"; +import { Command } from "#enums/command"; import { BerryModifierType } from "#app/modifier/modifier-type"; import { getPokeballName } from "#app/data/pokeball"; import { BattleType } from "#enums/battle-type"; @@ -69,12 +56,13 @@ import { MoveFlags } from "#enums/MoveFlags"; import { MoveTarget } from "#enums/MoveTarget"; import { MoveCategory } from "#enums/MoveCategory"; import type { BerryType } from "#enums/berry-type"; -import { CommonAnim } from "../battle-anims"; +import { CommonAnim } from "#enums/move-anims-common"; import { getBerryEffectFunc } from "../berry"; import { BerryUsedEvent } from "#app/events/battle-scene"; // Type imports -import type { EnemyPokemon, PokemonMove } from "#app/field/pokemon"; +import type { EnemyPokemon } from "#app/field/pokemon"; +import type { PokemonMove } from "../moves/pokemon-move"; import type Pokemon from "#app/field/pokemon"; import type { Weather } from "#app/data/weather"; import type { BattlerTag } from "#app/data/battler-tags"; @@ -86,7 +74,7 @@ import type { AbAttrApplyFunc, AbAttrSuccessFunc, } from "#app/@types/ability-types"; -import type { BattlerIndex } from "#app/battle"; +import type { BattlerIndex } from "#enums/battler-index"; import type Move from "#app/data/moves/move"; import type { ArenaTrapTag, SuppressAbilitiesTag } from "#app/data/arena-tag"; import { noAbilityTypeOverrideMoves } from "../moves/invalid-moves"; @@ -520,7 +508,7 @@ export class AttackTypeImmunityAbAttr extends TypeImmunityAbAttr { ): boolean { return ( move.category !== MoveCategory.STATUS && - !move.hasAttr(NeutralDamageAgainstFlyingTypeMultiplierAttr) && + !move.hasAttr("NeutralDamageAgainstFlyingTypeMultiplierAttr") && super.canApplyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args) ); } @@ -693,7 +681,7 @@ export class NonSuperEffectiveImmunityAbAttr extends TypeImmunityAbAttr { args.length > 0 ? (args[0] as NumberHolder).value : pokemon.getAttackTypeEffectiveness(attacker.getMoveType(move), attacker, undefined, undefined, move); - return move instanceof AttackMove && modifierValue < 2; + return move.is("AttackMove") && modifierValue < 2; } override applyPreDefend( @@ -735,7 +723,7 @@ export class FullHpResistTypeAbAttr extends PreDefendAbAttr { const typeMultiplier = args[0]; return ( typeMultiplier instanceof NumberHolder && - !move?.hasAttr(FixedDamageAttr) && + !move?.hasAttr("FixedDamageAttr") && pokemon.isFullHp() && typeMultiplier.value > 0.5 ); @@ -980,7 +968,7 @@ export class ReverseDrainAbAttr extends PostDefendAbAttr { _hitResult: HitResult | null, _args: any[], ): boolean { - return move.hasAttr(HitHealAttr); + return move.hasAttr("HitHealAttr"); } /** @@ -2061,10 +2049,10 @@ export class PokemonTypeChangeAbAttr extends PreAttackAbAttr { */ !move.findAttr( attr => - attr instanceof RandomMovesetMoveAttr || - attr instanceof RandomMoveAttr || - attr instanceof NaturePowerAttr || - attr instanceof CopyMoveAttr, + attr.is("RandomMovesetMoveAttr") || + attr.is("RandomMoveAttr") || + attr.is("NaturePowerAttr") || + attr.is("CopyMoveAttr"), ) ) { const moveType = pokemon.getMoveType(move); @@ -2539,17 +2527,11 @@ export class AllyStatMultiplierAbAttr extends AbAttr { * @extends AbAttr */ export class ExecutedMoveAbAttr extends AbAttr { - canApplyExecutedMove( - _pokemon: Pokemon, - _simulated: boolean, - ): boolean { + canApplyExecutedMove(_pokemon: Pokemon, _simulated: boolean): boolean { return true; } - applyExecutedMove( - _pokemon: Pokemon, - _simulated: boolean, - ): void {} + applyExecutedMove(_pokemon: Pokemon, _simulated: boolean): void {} } /** @@ -2557,7 +2539,7 @@ export class ExecutedMoveAbAttr extends AbAttr { * @extends ExecutedMoveAbAttr */ export class GorillaTacticsAbAttr extends ExecutedMoveAbAttr { - constructor(showAbility: boolean = false) { + constructor(showAbility = false) { super(showAbility); } @@ -4926,13 +4908,13 @@ function getAnticipationCondition(): AbAttrCondition { } // the move's base type (not accounting for variable type changes) is super effective if ( - move.getMove() instanceof AttackMove && + move.getMove().is("AttackMove") && pokemon.getAttackTypeEffectiveness(move.getMove().type, opponent, true, undefined, move.getMove()) >= 2 ) { return true; } // move is a OHKO - if (move.getMove().hasAttr(OneHitKOAttr)) { + if (move.getMove().hasAttr("OneHitKOAttr")) { return true; } // edge case for hidden power, type is computed @@ -5001,9 +4983,9 @@ export class ForewarnAbAttr extends PostSummonAbAttr { let movePower = 0; for (const opponent of pokemon.getOpponents()) { for (const move of opponent.moveset) { - if (move?.getMove() instanceof StatusMove) { + if (move?.getMove().is("StatusMove")) { movePower = 1; - } else if (move?.getMove().hasAttr(OneHitKOAttr)) { + } else if (move?.getMove().hasAttr("OneHitKOAttr")) { movePower = 150; } else if ( move?.getMove().id === MoveId.COUNTER || @@ -5874,10 +5856,10 @@ export class PostDancingMoveAbAttr extends PostMoveUsedAbAttr { dancer.turnData.extraTurns++; const phaseManager = globalScene.phaseManager; // If the move is an AttackMove or a StatusMove the Dancer must replicate the move on the source of the Dance - if (move.getMove() instanceof AttackMove || move.getMove() instanceof StatusMove) { + if (move.getMove().is("AttackMove") || move.getMove().is("StatusMove")) { const target = this.getTarget(dancer, source, targets); phaseManager.unshiftNew("MovePhase", dancer, target, move, true, true); - } else if (move.getMove() instanceof SelfStatusMove) { + } else if (move.getMove().is("SelfStatusMove")) { // If the move is a SelfStatusMove (ie. Swords Dance) the Dancer should replicate it on itself phaseManager.unshiftNew("MovePhase", dancer, [dancer.getBattlerIndex()], move, true, true); } @@ -7785,7 +7767,7 @@ export function applyPreAttackAbAttrs( export function applyExecutedMoveAbAttrs( attrType: Constructor, pokemon: Pokemon, - simulated: boolean = false, + simulated = false, ...args: any[] ): void { applyAbAttrsInternal( @@ -8207,7 +8189,7 @@ export function initAbilities() { allAbilities.push( new Ability(AbilityId.NONE, 3), new Ability(AbilityId.STENCH, 3) - .attr(PostAttackApplyBattlerTagAbAttr, false, (user, target, move) => !move.hasAttr(FlinchAttr) && !move.hitsSubstitute(user, target) ? 10 : 0, BattlerTagType.FLINCHED), + .attr(PostAttackApplyBattlerTagAbAttr, false, (user, target, move) => !move.hasAttr("FlinchAttr") && !move.hitsSubstitute(user, target) ? 10 : 0, BattlerTagType.FLINCHED), new Ability(AbilityId.DRIZZLE, 3) .attr(PostSummonWeatherChangeAbAttr, WeatherType.RAIN) .attr(PostBiomeChangeWeatherChangeAbAttr, WeatherType.RAIN), @@ -8514,7 +8496,7 @@ export function initAbilities() { new Ability(AbilityId.TECHNICIAN, 4) .attr(MovePowerBoostAbAttr, (user, target, move) => { const power = new NumberHolder(move.power); - applyMoveAttrs(VariablePowerAttr, user, target, move, power); + applyMoveAttrs("VariablePowerAttr", user, target, move, power); return power.value <= 60; }, 1.5), new Ability(AbilityId.LEAF_GUARD, 4) @@ -8635,7 +8617,7 @@ export function initAbilities() { ) .edgeCase(), // Cannot recover berries used up by fling or natural gift (unimplemented) new Ability(AbilityId.TELEPATHY, 5) - .attr(MoveImmunityAbAttr, (pokemon, attacker, move) => pokemon.getAlly() === attacker && move instanceof AttackMove) + .attr(MoveImmunityAbAttr, (pokemon, attacker, move) => pokemon.getAlly() === attacker && move.is("AttackMove")) .ignorable(), new Ability(AbilityId.MOODY, 5) .attr(MoodyAbAttr), diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index 28b8c6acd41..e18ee5ac556 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -7,9 +7,9 @@ import { MoveTarget } from "#enums/MoveTarget"; import { MoveCategory } from "#enums/MoveCategory"; import { getPokemonNameWithAffix } from "#app/messages"; import type Pokemon from "#app/field/pokemon"; -import { HitResult } from "#app/field/pokemon"; +import { HitResult } from "#enums/hit-result"; import { StatusEffect } from "#enums/status-effect"; -import type { BattlerIndex } from "#app/battle"; +import type { BattlerIndex } from "#enums/battler-index"; import { BlockNonDirectDamageAbAttr, InfiltratorAbAttr, @@ -20,18 +20,14 @@ import { applyOnLoseAbAttrs, } from "#app/data/abilities/ability"; import { Stat } from "#enums/stat"; -import { CommonAnim, CommonBattleAnim } from "#app/data/battle-anims"; +import { CommonBattleAnim } from "#app/data/battle-anims"; +import { CommonAnim } from "#enums/move-anims-common"; import i18next from "i18next"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; import { MoveId } from "#enums/move-id"; - -export enum ArenaTagSide { - BOTH, - PLAYER, - ENEMY, -} +import { ArenaTagSide } from "#enums/arena-tag-side"; export abstract class ArenaTag { constructor( diff --git a/src/data/battle-anims.ts b/src/data/battle-anims.ts index 321d9938b2f..0b40469b255 100644 --- a/src/data/battle-anims.ts +++ b/src/data/battle-anims.ts @@ -1,111 +1,15 @@ import { globalScene } from "#app/global-scene"; -import { AttackMove, BeakBlastHeaderAttr, DelayedAttackAttr, SelfStatusMove } from "./moves/move"; import { allMoves } from "./data-lists"; import { MoveFlags } from "#enums/MoveFlags"; import type Pokemon from "../field/pokemon"; import { type nil, getFrameMs, getEnumKeys, getEnumValues, animationFileName } from "../utils/common"; -import type { BattlerIndex } from "../battle"; +import type { BattlerIndex } from "#enums/battler-index"; import { MoveId } from "#enums/move-id"; import { SubstituteTag } from "./battler-tags"; import { isNullOrUndefined } from "../utils/common"; import Phaser from "phaser"; import { EncounterAnim } from "#enums/encounter-anims"; - -export enum AnimFrameTarget { - USER, - TARGET, - GRAPHIC, -} - -enum AnimFocus { - TARGET = 1, - USER, - USER_TARGET, - SCREEN, -} - -enum AnimBlendType { - NORMAL, - ADD, - SUBTRACT, -} - -export enum ChargeAnim { - FLY_CHARGING = 1000, - BOUNCE_CHARGING, - DIG_CHARGING, - FUTURE_SIGHT_CHARGING, - DIVE_CHARGING, - SOLAR_BEAM_CHARGING, - SHADOW_FORCE_CHARGING, - SKULL_BASH_CHARGING, - FREEZE_SHOCK_CHARGING, - SKY_DROP_CHARGING, - SKY_ATTACK_CHARGING, - ICE_BURN_CHARGING, - DOOM_DESIRE_CHARGING, - RAZOR_WIND_CHARGING, - PHANTOM_FORCE_CHARGING, - GEOMANCY_CHARGING, - SHADOW_BLADE_CHARGING, - SOLAR_BLADE_CHARGING, - BEAK_BLAST_CHARGING, - METEOR_BEAM_CHARGING, - ELECTRO_SHOT_CHARGING, -} - -export enum CommonAnim { - USE_ITEM = 2000, - HEALTH_UP, - TERASTALLIZE, - POISON = 2010, - TOXIC, - PARALYSIS, - SLEEP, - FROZEN, - BURN, - CONFUSION, - ATTRACT, - BIND, - WRAP, - CURSE_NO_GHOST, - LEECH_SEED, - FIRE_SPIN, - PROTECT, - COVET, - WHIRLPOOL, - BIDE, - SAND_TOMB, - QUICK_GUARD, - WIDE_GUARD, - CURSE, - MAGMA_STORM, - CLAMP, - SNAP_TRAP, - THUNDER_CAGE, - INFESTATION, - ORDER_UP_CURLY, - ORDER_UP_DROOPY, - ORDER_UP_STRETCHY, - RAGING_BULL_FIRE, - RAGING_BULL_WATER, - SALT_CURE, - POWDER, - SUNNY = 2100, - RAIN, - SANDSTORM, - HAIL, - SNOW, - WIND, - HEAVY_RAIN, - HARSH_SUN, - STRONG_WINDS, - MISTY_TERRAIN = 2110, - ELECTRIC_TERRAIN, - GRASSY_TERRAIN, - PSYCHIC_TERRAIN, - LOCK_ON = 2120, -} +import { AnimBlendType, AnimFrameTarget, AnimFocus, ChargeAnim, CommonAnim } from "#enums/move-anims-common"; export class AnimConfig { public id: number; @@ -531,7 +435,7 @@ export function initMoveAnim(move: MoveId): Promise { if (moveAnims.get(move) !== null) { const chargeAnimSource = allMoves[move].isChargingMove() ? allMoves[move] - : (allMoves[move].getAttrs(DelayedAttackAttr)[0] ?? allMoves[move].getAttrs(BeakBlastHeaderAttr)[0]); + : (allMoves[move].getAttrs("DelayedAttackAttr")[0] ?? allMoves[move].getAttrs("BeakBlastHeaderAttr")[0]); if (chargeAnimSource && chargeAnims.get(chargeAnimSource.chargeAnim) === null) { return; } @@ -542,12 +446,11 @@ export function initMoveAnim(move: MoveId): Promise { } } else { moveAnims.set(move, null); - const defaultMoveAnim = - allMoves[move] instanceof AttackMove - ? MoveId.TACKLE - : allMoves[move] instanceof SelfStatusMove - ? MoveId.FOCUS_ENERGY - : MoveId.TAIL_WHIP; + const defaultMoveAnim = allMoves[move].is("AttackMove") + ? MoveId.TACKLE + : allMoves[move].is("SelfStatusMove") + ? MoveId.FOCUS_ENERGY + : MoveId.TAIL_WHIP; const fetchAnimAndResolve = (move: MoveId) => { globalScene @@ -570,7 +473,7 @@ export function initMoveAnim(move: MoveId): Promise { } const chargeAnimSource = allMoves[move].isChargingMove() ? allMoves[move] - : (allMoves[move].getAttrs(DelayedAttackAttr)[0] ?? allMoves[move].getAttrs(BeakBlastHeaderAttr)[0]); + : (allMoves[move].getAttrs("DelayedAttackAttr")[0] ?? allMoves[move].getAttrs("BeakBlastHeaderAttr")[0]); if (chargeAnimSource) { initMoveChargeAnim(chargeAnimSource.chargeAnim).then(() => resolve()); } else { @@ -703,7 +606,7 @@ export function loadMoveAnimAssets(moveIds: MoveId[], startLoad?: boolean): Prom for (const moveId of moveIds) { const chargeAnimSource = allMoves[moveId].isChargingMove() ? allMoves[moveId] - : (allMoves[moveId].getAttrs(DelayedAttackAttr)[0] ?? allMoves[moveId].getAttrs(BeakBlastHeaderAttr)[0]); + : (allMoves[moveId].getAttrs("DelayedAttackAttr")[0] ?? allMoves[moveId].getAttrs("BeakBlastHeaderAttr")[0]); if (chargeAnimSource) { const moveChargeAnims = chargeAnims.get(chargeAnimSource.chargeAnim); moveAnimations.push(moveChargeAnims instanceof AnimConfig ? moveChargeAnims : moveChargeAnims![0]); // TODO: is the bang correct? diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index d4f62237446..ffa179c6aab 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -9,23 +9,20 @@ import { ReverseDrainAbAttr, } from "#app/data/abilities/ability"; import { allAbilities } from "./data-lists"; -import { ChargeAnim, CommonAnim, CommonBattleAnim, MoveChargeAnim } from "#app/data/battle-anims"; +import { CommonBattleAnim, MoveChargeAnim } from "#app/data/battle-anims"; +import { ChargeAnim, CommonAnim } from "#enums/move-anims-common"; import type Move from "#app/data/moves/move"; -import { - applyMoveAttrs, - ConsecutiveUseDoublePowerAttr, - HealOnAllyAttr, - StatusCategoryOnAllyAttr, -} from "#app/data/moves/move"; +import { applyMoveAttrs } from "./moves/apply-attrs"; import { allMoves } from "./data-lists"; import { MoveFlags } from "#enums/MoveFlags"; import { MoveCategory } from "#enums/MoveCategory"; -import { SpeciesFormChangeAbilityTrigger } from "#app/data/pokemon-forms"; +import { SpeciesFormChangeAbilityTrigger } from "./pokemon-forms/form-change-triggers"; import { getStatusEffectHealText } from "#app/data/status-effect"; import { TerrainType } from "#app/data/terrain"; import { PokemonType } from "#enums/pokemon-type"; import type Pokemon from "#app/field/pokemon"; -import { HitResult, MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; +import { HitResult } from "#enums/hit-result"; import { getPokemonNameWithAffix } from "#app/messages"; import type { MoveEffectPhase } from "#app/phases/move-effect-phase"; import type { MovePhase } from "#app/phases/move-phase"; @@ -41,19 +38,7 @@ import { EFFECTIVE_STATS, getStatKey, Stat, type BattleStat, type EffectiveStat import { StatusEffect } from "#enums/status-effect"; import { WeatherType } from "#enums/weather-type"; import { isNullOrUndefined } from "#app/utils/common"; - -export enum BattlerTagLapseType { - FAINT, - MOVE, - PRE_MOVE, - AFTER_MOVE, - MOVE_EFFECT, - TURN_END, - HIT, - /** Tag lapses AFTER_HIT, applying its effects even if the user faints */ - AFTER_HIT, - CUSTOM, -} +import { BattlerTagLapseType } from "#enums/battler-tag-lapse-type"; export class BattlerTag { public tagType: BattlerTagType; @@ -2804,8 +2789,8 @@ export class HealBlockTag extends MoveRestrictionBattlerTag { */ override isMoveTargetRestricted(move: MoveId, user: Pokemon, target: Pokemon) { const moveCategory = new NumberHolder(allMoves[move].category); - applyMoveAttrs(StatusCategoryOnAllyAttr, user, target, allMoves[move], moveCategory); - return allMoves[move].hasAttr(HealOnAllyAttr) && moveCategory.value === MoveCategory.STATUS; + applyMoveAttrs("StatusCategoryOnAllyAttr", user, target, allMoves[move], moveCategory); + return allMoves[move].hasAttr("HealOnAllyAttr") && moveCategory.value === MoveCategory.STATUS; } /** @@ -3141,7 +3126,7 @@ export class TormentTag extends MoveRestrictionBattlerTag { // This checks for locking / momentum moves like Rollout and Hydro Cannon + if the user is under the influence of BattlerTagType.FRENZY // Because Uproar's unique behavior is not implemented, it does not check for Uproar. Torment has been marked as partial in moves.ts const moveObj = allMoves[lastMove.move]; - const isUnaffected = moveObj.hasAttr(ConsecutiveUseDoublePowerAttr) || user.getTag(BattlerTagType.FRENZY); + const isUnaffected = moveObj.hasAttr("ConsecutiveUseDoublePowerAttr") || user.getTag(BattlerTagType.FRENZY); const validLastMoveResult = lastMove.result === MoveResult.SUCCESS || lastMove.result === MoveResult.MISS; return lastMove.move === move && validLastMoveResult && lastMove.move !== MoveId.STRUGGLE && !isUnaffected; } diff --git a/src/data/berry.ts b/src/data/berry.ts index 52ea1c44391..df500fa0609 100644 --- a/src/data/berry.ts +++ b/src/data/berry.ts @@ -1,6 +1,6 @@ import { getPokemonNameWithAffix } from "../messages"; import type Pokemon from "../field/pokemon"; -import { HitResult } from "../field/pokemon"; +import { HitResult } from "#enums/hit-result"; import { getStatusEffectHealText } from "./status-effect"; import { NumberHolder, toDmgValue, randSeedInt } from "#app/utils/common"; import { DoubleBerryEffectAbAttr, ReduceBerryUseThresholdAbAttr, applyAbAttrs } from "./abilities/ability"; diff --git a/src/data/challenge.ts b/src/data/challenge.ts index 8dd303c34fd..8bdccb6d5fd 100644 --- a/src/data/challenge.ts +++ b/src/data/challenge.ts @@ -2,17 +2,18 @@ import { BooleanHolder, type NumberHolder, randSeedItem } from "#app/utils/commo import { deepCopy } from "#app/utils/data"; import i18next from "i18next"; import type { DexAttrProps, GameData } from "#app/system/game-data"; -import { defaultStarterSpecies } from "#app/system/game-data"; +import { defaultStarterSpecies } from "#app/constants"; import type PokemonSpecies from "#app/data/pokemon-species"; import { getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; import { speciesStarterCosts } from "#app/data/balance/starters"; import type Pokemon from "#app/field/pokemon"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "./moves/pokemon-move"; import type { FixedBattleConfig } from "#app/battle"; import { getRandomTrainerFunc } from "#app/battle"; import { ClassicFixedBossWaves } from "#enums/fixed-boss-waves"; import { BattleType } from "#enums/battle-type"; -import Trainer, { TrainerVariant } from "#app/field/trainer"; +import Trainer from "#app/field/trainer"; +import { TrainerVariant } from "#enums/trainer-variant"; import { PokemonType } from "#enums/pokemon-type"; import { Challenges } from "#enums/challenges"; import { SpeciesId } from "#enums/species-id"; @@ -24,93 +25,12 @@ import { ModifierTier } from "#app/modifier/modifier-tier"; import { globalScene } from "#app/global-scene"; import { pokemonFormChanges } from "./pokemon-forms"; import { pokemonEvolutions } from "./balance/pokemon-evolutions"; +import { ChallengeType } from "#enums/challenge-type"; +import type { MoveSourceType } from "#enums/move-source-type"; /** A constant for the default max cost of the starting party before a run */ const DEFAULT_PARTY_MAX_COST = 10; -/** - * An enum for all the challenge types. The parameter entries on these describe the - * parameters to use when calling the applyChallenges function. - */ -export enum ChallengeType { - /** - * Challenges which modify what starters you can choose - * @see {@link Challenge.applyStarterChoice} - */ - STARTER_CHOICE, - /** - * Challenges which modify how many starter points you have - * @see {@link Challenge.applyStarterPoints} - */ - STARTER_POINTS, - /** - * Challenges which modify how many starter points you have - * @see {@link Challenge.applyStarterPointCost} - */ - STARTER_COST, - /** - * Challenges which modify your starters in some way - * @see {@link Challenge.applyStarterModify} - */ - STARTER_MODIFY, - /** - * Challenges which limit which pokemon you can have in battle. - * @see {@link Challenge.applyPokemonInBattle} - */ - POKEMON_IN_BATTLE, - /** - * Adds or modifies the fixed battles in a run - * @see {@link Challenge.applyFixedBattle} - */ - FIXED_BATTLES, - /** - * Modifies the effectiveness of Type matchups in battle - * @see {@linkcode Challenge.applyTypeEffectiveness} - */ - TYPE_EFFECTIVENESS, - /** - * Modifies what level the AI pokemon are. UNIMPLEMENTED. - */ - AI_LEVEL, - /** - * Modifies how many move slots the AI has. UNIMPLEMENTED. - */ - AI_MOVE_SLOTS, - /** - * Modifies if a pokemon has its passive. UNIMPLEMENTED. - */ - PASSIVE_ACCESS, - /** - * Modifies the game mode settings in some way. UNIMPLEMENTED. - */ - GAME_MODE_MODIFY, - /** - * Modifies what level AI pokemon can access a move. UNIMPLEMENTED. - */ - MOVE_ACCESS, - /** - * Modifies what weight AI pokemon have when generating movesets. UNIMPLEMENTED. - */ - MOVE_WEIGHT, - /** - * Modifies what the pokemon stats for Flip Stat Mode. - */ - FLIP_STAT, -} - -/** - * Used for challenge types that modify movesets, these denote the various sources of moves for pokemon. - */ -export enum MoveSourceType { - LEVEL_UP, // Currently unimplemented for move access - RELEARNER, // Relearner moves currently unimplemented - COMMON_TM, - GREAT_TM, - ULTRA_TM, - COMMON_EGG, - RARE_EGG, -} - /** * A challenge object. Exists only to serve as a base class. */ diff --git a/src/data/moves/apply-attrs.ts b/src/data/moves/apply-attrs.ts new file mode 100644 index 00000000000..98e7b6d791f --- /dev/null +++ b/src/data/moves/apply-attrs.ts @@ -0,0 +1,58 @@ +/** + * Module holding functions to apply move attributes. + * Must not import anything that is not a type. + */ +import type Pokemon from "#app/field/pokemon"; +import type { default as Move, MoveAttr } from "./move"; +import type { ChargingMove } from "#app/@types/move-types"; +import type { MoveAttrFilter, MoveAttrString } from "#app/@types/move-types"; + +function applyMoveAttrsInternal( + attrFilter: MoveAttrFilter, + user: Pokemon | null, + target: Pokemon | null, + move: Move, + args: any[], +): void { + move.attrs.filter(attr => attrFilter(attr)).forEach(attr => attr.apply(user, target, move, args)); +} + +function applyMoveChargeAttrsInternal( + attrFilter: MoveAttrFilter, + user: Pokemon | null, + target: Pokemon | null, + move: ChargingMove, + args: any[], +): void { + move.chargeAttrs.filter(attr => attrFilter(attr)).forEach(attr => attr.apply(user, target, move, args)); +} + +export function applyMoveAttrs( + attrType: MoveAttrString, + user: Pokemon | null, + target: Pokemon | null, + move: Move, + ...args: any[] +): void { + applyMoveAttrsInternal((attr: MoveAttr) => attr.is(attrType), user, target, move, args); +} + +export function applyFilteredMoveAttrs( + attrFilter: MoveAttrFilter, + user: Pokemon, + target: Pokemon | null, + move: Move, + ...args: any[] +): void { + applyMoveAttrsInternal(attrFilter, user, target, move, args); +} + +export function applyMoveChargeAttrs( + attrType: MoveAttrString, + user: Pokemon | null, + target: Pokemon | null, + move: ChargingMove, + ...args: any[] +): void { + applyMoveChargeAttrsInternal((attr: MoveAttr) => attr.is(attrType), user, target, move, args); +} diff --git a/src/data/moves/move-utils.ts b/src/data/moves/move-utils.ts index 3323d6f4a0c..20723ab0347 100644 --- a/src/data/moves/move-utils.ts +++ b/src/data/moves/move-utils.ts @@ -1,5 +1,14 @@ -import { MoveTarget } from "#enums/MoveTarget"; +import type Pokemon from "#app/field/pokemon"; +import type { BattlerIndex } from "#enums/battler-index"; +import type { MoveId } from "#enums/move-id"; +import type { MoveTargetSet, UserMoveConditionFunc } from "./move"; import type Move from "./move"; +import { NumberHolder, isNullOrUndefined } from "#app/utils/common"; +import { MoveTarget } from "#enums/MoveTarget"; +import { PokemonType } from "#enums/pokemon-type"; +import { allMoves } from "#app/data/data-lists"; +import { applyMoveAttrs } from "./apply-attrs"; +import { BattlerTagType } from "#enums/battler-tag-type"; /** * Return whether the move targets the field @@ -18,3 +27,88 @@ export function isFieldTargeted(move: Move): boolean { } return false; } + +export function getMoveTargets(user: Pokemon, move: MoveId, replaceTarget?: MoveTarget): MoveTargetSet { + const variableTarget = new NumberHolder(0); + user.getOpponents(false).forEach(p => applyMoveAttrs("VariableTargetAttr", user, p, allMoves[move], variableTarget)); + + let moveTarget: MoveTarget | undefined; + if (allMoves[move].hasAttr("VariableTargetAttr")) { + moveTarget = variableTarget.value; + } else if (replaceTarget !== undefined) { + moveTarget = replaceTarget; + } else if (move) { + moveTarget = allMoves[move].moveTarget; + } else if (move === undefined) { + moveTarget = MoveTarget.NEAR_ENEMY; + } + const opponents = user.getOpponents(false); + + let set: Pokemon[] = []; + let multiple = false; + const ally: Pokemon | undefined = user.getAlly(); + + switch (moveTarget) { + case MoveTarget.USER: + case MoveTarget.PARTY: + set = [user]; + break; + case MoveTarget.NEAR_OTHER: + case MoveTarget.OTHER: + case MoveTarget.ALL_NEAR_OTHERS: + case MoveTarget.ALL_OTHERS: + set = !isNullOrUndefined(ally) ? opponents.concat([ally]) : opponents; + multiple = moveTarget === MoveTarget.ALL_NEAR_OTHERS || moveTarget === MoveTarget.ALL_OTHERS; + break; + case MoveTarget.NEAR_ENEMY: + case MoveTarget.ALL_NEAR_ENEMIES: + case MoveTarget.ALL_ENEMIES: + case MoveTarget.ENEMY_SIDE: + set = opponents; + multiple = moveTarget !== MoveTarget.NEAR_ENEMY; + break; + case MoveTarget.RANDOM_NEAR_ENEMY: + set = [opponents[user.randBattleSeedInt(opponents.length)]]; + break; + case MoveTarget.ATTACKER: + return { targets: [-1 as BattlerIndex], multiple: false }; + case MoveTarget.NEAR_ALLY: + case MoveTarget.ALLY: + set = !isNullOrUndefined(ally) ? [ally] : []; + break; + case MoveTarget.USER_OR_NEAR_ALLY: + case MoveTarget.USER_AND_ALLIES: + case MoveTarget.USER_SIDE: + set = !isNullOrUndefined(ally) ? [user, ally] : [user]; + multiple = moveTarget !== MoveTarget.USER_OR_NEAR_ALLY; + break; + case MoveTarget.ALL: + case MoveTarget.BOTH_SIDES: + set = (!isNullOrUndefined(ally) ? [user, ally] : [user]).concat(opponents); + multiple = true; + break; + case MoveTarget.CURSE: + { + const extraTargets = !isNullOrUndefined(ally) ? [ally] : []; + set = user.getTypes(true).includes(PokemonType.GHOST) ? opponents.concat(extraTargets) : [user]; + } + break; + } + + return { + targets: set + .filter(p => p?.isActive(true)) + .map(p => p.getBattlerIndex()) + .filter(t => t !== undefined), + multiple, + }; +} + +export const frenzyMissFunc: UserMoveConditionFunc = (user: Pokemon, move: Move) => { + while (user.getMoveQueue().length && user.getMoveQueue()[0].move === move.id) { + user.getMoveQueue().shift(); + } + user.removeTag(BattlerTagType.FRENZY); // FRENZY tag should be disrupted on miss/no effect + + return true; +}; diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 976c0cd7d97..57660b51391 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -1,4 +1,5 @@ -import { ChargeAnim, MoveChargeAnim } from "../battle-anims"; +import { MoveChargeAnim } from "../battle-anims"; +import { ChargeAnim } from "#enums/move-anims-common"; import { CommandedTag, EncoreTag, @@ -14,14 +15,11 @@ import { import { getPokemonNameWithAffix } from "../../messages"; import type { AttackMoveResult, TurnMove } from "../../field/pokemon"; import type Pokemon from "../../field/pokemon"; -import { - EnemyPokemon, - FieldPosition, - HitResult, - MoveResult, - PlayerPokemon, - PokemonMove, -} from "../../field/pokemon"; +import type { EnemyPokemon } from "#app/field/pokemon"; +import { PokemonMove } from "./pokemon-move"; +import { MoveResult } from "#enums/move-result"; +import { HitResult } from "#enums/hit-result"; +import { FieldPosition } from "#enums/field-position"; import { getNonVolatileStatusEffects, getStatusEffectHealText, @@ -32,7 +30,8 @@ import { PokemonType } from "#enums/pokemon-type"; import { BooleanHolder, NumberHolder, isNullOrUndefined, toDmgValue, randSeedItem, randSeedInt, getEnumValues, toReadableString, type Constructor, randSeedFloat } from "#app/utils/common"; import { WeatherType } from "#enums/weather-type"; import type { ArenaTrapTag } from "../arena-tag"; -import { ArenaTagSide, WeakenMoveTypeTag } from "../arena-tag"; +import { WeakenMoveTypeTag } from "../arena-tag"; +import { ArenaTagSide } from "#enums/arena-tag-side"; import { AllyMoveCategoryPowerBoostAbAttr, applyAbAttrs, @@ -75,11 +74,11 @@ import { PokemonMultiHitModifier, PreserveBerryModifier, } from "../../modifier/modifier"; -import type { BattlerIndex } from "../../battle"; +import type { BattlerIndex } from "#enums/battler-index"; import { BattleType } from "#enums/battle-type"; import { TerrainType } from "../terrain"; import { ModifierPoolType } from "#app/modifier/modifier-type"; -import { Command } from "../../ui/command-ui-handler"; +import { Command } from "#enums/command"; import i18next from "i18next"; import type { Localizable } from "#app/@types/locales"; import { getBerryEffectFunc } from "../berry"; @@ -105,9 +104,10 @@ import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { SwitchPhase } from "#app/phases/switch-phase"; import { SwitchSummonPhase } from "#app/phases/switch-summon-phase"; -import { SpeciesFormChangeRevertWeatherFormTrigger } from "../pokemon-forms"; +import { SpeciesFormChangeRevertWeatherFormTrigger } from "../pokemon-forms/form-change-triggers"; import type { GameMode } from "#app/game-mode"; -import { applyChallenges, ChallengeType } from "../challenge"; +import { applyChallenges } from "../challenge"; +import { ChallengeType } from "#enums/challenge-type"; import { SwitchType } from "#enums/switch-type"; import { StatusEffect } from "#enums/status-effect"; import { globalScene } from "#app/global-scene"; @@ -123,11 +123,14 @@ import { MoveEffectTrigger } from "#enums/MoveEffectTrigger"; import { MultiHitType } from "#enums/MultiHitType"; import { invalidAssistMoves, invalidCopycatMoves, invalidMetronomeMoves, invalidMirrorMoveMoves, invalidSleepTalkMoves } from "./invalid-moves"; import { SelectBiomePhase } from "#app/phases/select-biome-phase"; +import { ChargingMove, MoveAttrMap, MoveAttrString, MoveKindString, MoveClassMap } from "#app/@types/move-types"; +import { applyMoveAttrs } from "./apply-attrs"; +import { frenzyMissFunc, getMoveTargets } from "./move-utils"; type MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => boolean; -type UserMoveConditionFunc = (user: Pokemon, move: Move) => boolean; +export type UserMoveConditionFunc = (user: Pokemon, move: Move) => boolean; -export default class Move implements Localizable { +export default abstract class Move implements Localizable { public id: MoveId; public name: string; private _type: PokemonType; @@ -147,6 +150,17 @@ export default class Move implements Localizable { private flags: number = 0; private nameAppend: string = ""; + /** + * Check if the move is of the given subclass without requiring `instanceof`. + * + * ⚠️ Does _not_ work for {@linkcode ChargingAttackMove} and {@linkcode ChargingSelfStatusMove} subclasses. For those, + * use {@linkcode isChargingMove} instead. + * + * @param moveKind - The string name of the move to check against + * @returns Whether this move is of the provided type. + */ + public abstract is(moveKind: K): this is MoveClassMap[K]; + constructor(id: MoveId, type: PokemonType, category: MoveCategory, defaultMoveTarget: MoveTarget, power: number, accuracy: number, pp: number, chance: number, priority: number, generation: number) { this.id = id; this._type = type; @@ -188,8 +202,12 @@ export default class Move implements Localizable { * @param attrType any attribute that extends {@linkcode MoveAttr} * @returns Array of attributes that match `attrType`, Empty Array if none match. */ - getAttrs(attrType: Constructor): T[] { - return this.attrs.filter((a): a is T => a instanceof attrType); + getAttrs(attrType: T): (MoveAttrMap[T])[] { + const targetAttr = MoveAttrs[attrType]; + if (!targetAttr) { + return []; + } + return this.attrs.filter((a): a is MoveAttrMap[T] => a instanceof targetAttr); } /** @@ -197,8 +215,13 @@ export default class Move implements Localizable { * @param attrType any attribute that extends {@linkcode MoveAttr} * @returns true if the move has attribute `attrType` */ - hasAttr(attrType: Constructor): boolean { - return this.attrs.some((attr) => attr instanceof attrType); + hasAttr(attrType: MoveAttrString): boolean { + const targetAttr = MoveAttrs[attrType]; + // Guard against invalid attrType + if (!targetAttr) { + return false; + } + return this.attrs.some((attr) => attr instanceof targetAttr); } /** @@ -768,14 +791,14 @@ export default class Move implements Localizable { calculateBattleAccuracy(user: Pokemon, target: Pokemon, simulated: boolean = false) { const moveAccuracy = new NumberHolder(this.accuracy); - applyMoveAttrs(VariableAccuracyAttr, user, target, this, moveAccuracy); + applyMoveAttrs("VariableAccuracyAttr", user, target, this, moveAccuracy); applyPreDefendAbAttrs(WonderSkinAbAttr, target, user, this, { value: false }, simulated, moveAccuracy); if (moveAccuracy.value === -1) { return moveAccuracy.value; } - const isOhko = this.hasAttr(OneHitKOAccuracyAttr); + const isOhko = this.hasAttr("OneHitKOAccuracyAttr"); if (!isOhko) { globalScene.applyModifiers(PokemonMoveAccuracyBoosterModifier, user.isPlayer(), user, moveAccuracy); @@ -815,7 +838,7 @@ export default class Move implements Localizable { applyPreAttackAbAttrs(MoveTypeChangeAbAttr, source, target, this, true, typeChangeHolder, typeChangeMovePowerMultiplier); const sourceTeraType = source.getTeraType(); - if (source.isTerastallized && sourceTeraType === this.type && power.value < 60 && this.priority <= 0 && !this.hasAttr(MultiHitAttr) && !globalScene.findModifier(m => m instanceof PokemonMultiHitModifier && m.pokemonId === source.id)) { + if (source.isTerastallized && sourceTeraType === this.type && power.value < 60 && this.priority <= 0 && !this.hasAttr("MultiHitAttr") && !globalScene.findModifier(m => m instanceof PokemonMultiHitModifier && m.pokemonId === source.id)) { power.value = 60; } @@ -847,9 +870,9 @@ export default class Move implements Localizable { power.value *= typeBoost.boostValue; } - applyMoveAttrs(VariablePowerAttr, source, target, this, power); + applyMoveAttrs("VariablePowerAttr", source, target, this, power); - if (!this.hasAttr(TypelessAttr)) { + if (!this.hasAttr("TypelessAttr")) { globalScene.arena.applyTags(WeakenMoveTypeTag, simulated, typeChangeHolder.value, power); globalScene.applyModifiers(AttackTypeBoosterModifier, source.isPlayer(), source, typeChangeHolder.value, power); } @@ -864,7 +887,7 @@ export default class Move implements Localizable { getPriority(user: Pokemon, simulated: boolean = true) { const priority = new NumberHolder(this.priority); - applyMoveAttrs(IncrementMovePriorityAttr, user, null, this, priority); + applyMoveAttrs("IncrementMovePriorityAttr", user, null, this, priority); applyAbAttrs(ChangeMovePriorityAbAttr, user, null, simulated, this, priority); return priority.value; @@ -885,7 +908,7 @@ export default class Move implements Localizable { } else if (this.id === MoveId.TRIPLE_KICK) { effectivePower = 47.07; } else { - const multiHitAttr = this.getAttrs(MultiHitAttr)[0]; + const multiHitAttr = this.getAttrs("MultiHitAttr")[0]; if (multiHitAttr) { effectivePower = multiHitAttr.calculateExpectedHitCount(this) * this.power; } else { @@ -898,10 +921,10 @@ export default class Move implements Localizable { // These are intentionally not else-if statements even though there are no // pokemon moves that have more than one of these attributes. This allows // the function to future proof new moves / custom move behaviors. - if (this.hasAttr(DelayedAttackAttr)) { + if (this.hasAttr("DelayedAttackAttr")) { numTurns += 2; } - if (this.hasAttr(RechargeAttr)) { + if (this.hasAttr("RechargeAttr")) { numTurns += 1; } if (this.isChargingMove()) { @@ -927,10 +950,10 @@ export default class Move implements Localizable { const isMultiTarget = multiple && targets.length > 1; // ...cannot enhance multi-hit or sacrificial moves - const exceptAttrs: Constructor[] = [ - MultiHitAttr, - SacrificialAttr, - SacrificialAttrOnHit + const exceptAttrs: MoveAttrString[] = [ + "MultiHitAttr", + "SacrificialAttr", + "SacrificialAttrOnHit" ]; // ...and cannot enhance these specific moves @@ -956,6 +979,13 @@ export default class Move implements Localizable { } export class AttackMove extends Move { + /** This field does not exist at runtime and must not be used. + * Its sole purpose is to ensure that typescript is able to properly narrow when the `is` method is called. + */ + declare private _: never; + override is(moveKind: K): this is MoveClassMap[K] { + return moveKind === "AttackMove"; + } constructor(id: MoveId, type: PokemonType, category: MoveCategory, power: number, accuracy: number, pp: number, chance: number, priority: number, generation: number) { super(id, type, category, MoveTarget.NEAR_OTHER, power, accuracy, pp, chance, priority, generation); @@ -985,7 +1015,7 @@ export class AttackMove extends Move { const [ thisStat, offStat ]: EffectiveStat[] = this.category === MoveCategory.PHYSICAL ? [ Stat.ATK, Stat.SPATK ] : [ Stat.SPATK, Stat.ATK ]; const statHolder = new NumberHolder(user.getEffectiveStat(thisStat, target)); const offStatValue = user.getEffectiveStat(offStat, target); - applyMoveAttrs(VariableAtkAttr, user, target, move, statHolder); + applyMoveAttrs("VariableAtkAttr", user, target, move, statHolder); const statRatio = offStatValue / statHolder.value; if (statRatio <= 0.75) { attackScore *= 2; @@ -994,7 +1024,7 @@ export class AttackMove extends Move { } const power = new NumberHolder(this.calculateEffectivePower()); - applyMoveAttrs(VariablePowerAttr, user, target, move, power); + applyMoveAttrs("VariablePowerAttr", user, target, move, power); attackScore += Math.floor(power.value / 5); @@ -1003,20 +1033,42 @@ export class AttackMove extends Move { } export class StatusMove extends Move { + /** This field does not exist at runtime and must not be used. + * Its sole purpose is to ensure that typescript is able to properly narrow when the `is` method is called. + */ + declare private _: never; constructor(id: MoveId, type: PokemonType, accuracy: number, pp: number, chance: number, priority: number, generation: number) { super(id, type, MoveCategory.STATUS, MoveTarget.NEAR_OTHER, -1, accuracy, pp, chance, priority, generation); } + + override is(moveKind: K): this is MoveClassMap[K] { + return moveKind === "StatusMove"; + } } export class SelfStatusMove extends Move { + /** This field does not exist at runtime and must not be used. + * Its sole purpose is to ensure that typescript is able to properly narrow when the `is` method is called. + */ + declare private _: never; constructor(id: MoveId, type: PokemonType, accuracy: number, pp: number, chance: number, priority: number, generation: number) { super(id, type, MoveCategory.STATUS, MoveTarget.USER, -1, accuracy, pp, chance, priority, generation); } + + override is(moveKind: K): this is MoveClassMap[K] { + return moveKind === "SelfStatusMove"; + } } -type SubMove = new (...args: any[]) => Move; +// TODO: Figure out how to improve the signature of this so that +// the `ChargeMove` function knows that the argument `Base` is a specific subclass of move that cannot +// be abstract. +// Right now, I only know how to do this by using the type conjunction (the & operators) +type SubMove = new (...args: any[]) => Move & { + is(moveKind: K): this is MoveClassMap[K]; +}; -function ChargeMove(Base: TBase) { +function ChargeMove(Base: TBase, nameAppend: string) { return class extends Base { /** The animation to play during the move's charging phase */ public readonly chargeAnim: ChargeAnim = ChargeAnim[`${MoveId[this.id]}_CHARGING`]; @@ -1060,8 +1112,12 @@ function ChargeMove(Base: TBase) { * @returns Array of attributes that match `attrType`, or an empty array if * no matches are found. */ - getChargeAttrs(attrType: Constructor): T[] { - return this.chargeAttrs.filter((attr): attr is T => attr instanceof attrType); + getChargeAttrs(attrType: T): (MoveAttrMap[T])[] { + const targetAttr = MoveAttrs[attrType]; + if (!targetAttr) { + return []; + } + return this.chargeAttrs.filter((attr): attr is MoveAttrMap[T] => attr instanceof targetAttr); } /** @@ -1069,8 +1125,12 @@ function ChargeMove(Base: TBase) { * @param attrType any attribute that extends {@linkcode MoveAttr} * @returns `true` if a matching attribute is found; `false` otherwise */ - hasChargeAttr(attrType: Constructor): boolean { - return this.chargeAttrs.some((attr) => attr instanceof attrType); + hasChargeAttr(attrType: T): boolean { + const targetAttr = MoveAttrs[attrType]; + if (!targetAttr) { + return false; + } + return this.chargeAttrs.some((attr) => attr instanceof targetAttr); } /** @@ -1088,10 +1148,8 @@ function ChargeMove(Base: TBase) { }; } -export class ChargingAttackMove extends ChargeMove(AttackMove) {} -export class ChargingSelfStatusMove extends ChargeMove(SelfStatusMove) {} - -export type ChargingMove = ChargingAttackMove | ChargingSelfStatusMove; +export class ChargingAttackMove extends ChargeMove(AttackMove, "ChargingAttackMove") {} +export class ChargingSelfStatusMove extends ChargeMove(SelfStatusMove, "ChargingSelfStatusMove") {} /** * Base class defining all {@linkcode Move} Attributes @@ -1102,6 +1160,22 @@ export abstract class MoveAttr { /** Should this {@linkcode Move} target the user? */ public selfTarget: boolean; + /** + * Return whether this attribute is of the given type. + * + * @remarks + * Used to avoid requring the caller to have imported the specific attribute type, avoiding circular dependencies. + * @param attr - The attribute to check against + * @returns Whether the attribute is an instance of the given type. + */ + public is(attr: T): this is MoveAttrMap[T] { + const targetAttr = MoveAttrs[attr]; + if (!targetAttr) { + return false; + } + return this instanceof targetAttr; + } + constructor(selfTarget: boolean = false) { this.selfTarget = selfTarget; } @@ -1268,7 +1342,7 @@ export class MoveEffectAttr extends MoveAttr { applyAbAttrs(MoveEffectChanceMultiplierAbAttr, user, null, !showAbility, moveChance, move); - if ((!move.hasAttr(FlinchAttr) || moveChance.value <= move.chance) && !move.hasAttr(SecretPowerAttr)) { + if ((!move.hasAttr("FlinchAttr") || moveChance.value <= move.chance) && !move.hasAttr("SecretPowerAttr")) { const userSide = user.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; globalScene.arena.applyTagsForSide(ArenaTagType.WATER_FIRE_PLEDGE, userSide, false, moveChance); } @@ -2331,7 +2405,7 @@ export class MultiHitAttr extends MoveAttr { */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const hitType = new NumberHolder(this.intrinsicMultiHitType); - applyMoveAttrs(ChangeMultiHitTypeAttr, user, target, move, hitType); + applyMoveAttrs("ChangeMultiHitTypeAttr", user, target, move, hitType); this.multiHitType = hitType.value; (args[0] as NumberHolder).value = this.getHitCount(user, target); @@ -3032,7 +3106,11 @@ export class WeatherInstantChargeAttr extends InstantChargeAttr { } export class OverrideMoveEffectAttr extends MoveAttr { - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + /** This field does not exist at runtime and must not be used. + * Its sole purpose is to ensure that typescript is able to properly narrow when the `is` method is called. + */ + declare private _: never; + override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { return true; } } @@ -3114,7 +3192,7 @@ export class AwaitCombinedPledgeAttr extends OverrideMoveEffectAttr { const allyMovePhase = globalScene.phaseManager.findPhase((phase) => phase.is("MovePhase") && phase.pokemon.isPlayer() === user.isPlayer()); if (allyMovePhase) { const allyMove = allyMovePhase.move.getMove(); - if (allyMove !== move && allyMove.hasAttr(AwaitCombinedPledgeAttr)) { + if (allyMove !== move && allyMove.hasAttr("AwaitCombinedPledgeAttr")) { [ user, allyMovePhase.pokemon ].forEach((p) => p.turnData.combiningPledge = move.id); // "{userPokemonName} is waiting for {allyPokemonName}'s move..." @@ -3235,22 +3313,22 @@ export class StatStageChangeAttr extends MoveEffectAttr { switch (stat) { case Stat.ATK: if (this.selfTarget) { - noEffect = !user.getMoveset().find(m => m instanceof AttackMove && m.category === MoveCategory.PHYSICAL); + noEffect = !user.getMoveset().find(m => {const mv = m.getMove(); return mv.is("AttackMove") && mv.category === MoveCategory.PHYSICAL;} ); } break; case Stat.DEF: if (!this.selfTarget) { - noEffect = !user.getMoveset().find(m => m instanceof AttackMove && m.category === MoveCategory.PHYSICAL); + noEffect = !user.getMoveset().find(m => {const mv = m.getMove(); return mv.is("AttackMove") && mv.category === MoveCategory.PHYSICAL;} ); } break; case Stat.SPATK: if (this.selfTarget) { - noEffect = !user.getMoveset().find(m => m instanceof AttackMove && m.category === MoveCategory.SPECIAL); + noEffect = !user.getMoveset().find(m => {const mv = m.getMove(); return mv.is("AttackMove") && mv.category === MoveCategory.PHYSICAL;} ); } break; case Stat.SPDEF: if (!this.selfTarget) { - noEffect = !user.getMoveset().find(m => m instanceof AttackMove && m.category === MoveCategory.SPECIAL); + noEffect = !user.getMoveset().find(m => {const mv = m.getMove(); return mv.is("AttackMove") && mv.category === MoveCategory.PHYSICAL;} ); } break; } @@ -5410,7 +5488,7 @@ export class FrenzyAttr extends MoveEffectAttr { new Array(turnCount).fill(null).map(() => user.getMoveQueue().push({ move: move.id, targets: [ target.getBattlerIndex() ], ignorePP: true })); user.addTag(BattlerTagType.FRENZY, turnCount, move.id, user.id); } else { - applyMoveAttrs(AddBattlerTagAttr, user, target, move, args); + applyMoveAttrs("AddBattlerTagAttr", user, target, move, args); user.lapseTag(BattlerTagType.FRENZY); // if FRENZY is already in effect (moveQueue.length > 0), lapse the tag } @@ -5418,15 +5496,6 @@ export class FrenzyAttr extends MoveEffectAttr { } } -export const frenzyMissFunc: UserMoveConditionFunc = (user: Pokemon, move: Move) => { - while (user.getMoveQueue().length && user.getMoveQueue()[0].move === move.id) { - user.getMoveQueue().shift(); - } - user.removeTag(BattlerTagType.FRENZY); // FRENZY tag should be disrupted on miss/no effect - - return true; -}; - /** * Attribute that grants {@link https://bulbapedia.bulbagarden.net/wiki/Semi-invulnerable_turn | semi-invulnerability} to the user during * the associated move's charging phase. Should only be used for {@linkcode ChargingMove | ChargingMoves} as a `chargeAttr`. @@ -5781,7 +5850,7 @@ export class ProtectAttr extends AddBattlerTagAttr { while (moveHistory.length) { turnMove = moveHistory.shift(); - if (!allMoves[turnMove?.move ?? MoveId.NONE].hasAttr(ProtectAttr) || turnMove?.result !== MoveResult.SUCCESS) { + if (!allMoves[turnMove?.move ?? MoveId.NONE].hasAttr("ProtectAttr") || turnMove?.result !== MoveResult.SUCCESS) { break; } timesUsed++; @@ -5912,7 +5981,7 @@ export class AddArenaTagAttr extends MoveEffectAttr { } if ((move.chance < 0 || move.chance === 100 || user.randBattleSeedInt(100) < move.chance) && user.getLastXMoves(1)[0]?.result === MoveResult.SUCCESS) { - const side = ((this.selfSideTarget ? user : target).isPlayer() !== (move.hasAttr(AddArenaTrapTagAttr) && target === user)) ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + const side = ((this.selfSideTarget ? user : target).isPlayer() !== (move.hasAttr("AddArenaTrapTagAttr") && target === user)) ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; globalScene.arena.addTag(this.tagType, this.turnCount, move.id, user.id, side); return true; } @@ -6376,7 +6445,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { return (user, target, move) => { const switchOutTarget = (this.selfSwitch ? user : target); const player = switchOutTarget.isPlayer(); - const forceSwitchAttr = move.getAttrs(ForceSwitchOutAttr).find(attr => attr.switchType === SwitchType.FORCE_SWITCH); + const forceSwitchAttr = move.getAttrs("ForceSwitchOutAttr").find(attr => attr.switchType === SwitchType.FORCE_SWITCH); if (!this.selfSwitch) { if (move.hitsSubstitute(user, target)) { @@ -7945,58 +8014,6 @@ const attackedByItemMessageFunc = (user: Pokemon, target: Pokemon, move: Move) = return message; }; -export type MoveAttrFilter = (attr: MoveAttr) => boolean; - -function applyMoveAttrsInternal( - attrFilter: MoveAttrFilter, - user: Pokemon | null, - target: Pokemon | null, - move: Move, - args: any[], -): void { - move.attrs.filter((attr) => attrFilter(attr)).forEach((attr) => attr.apply(user, target, move, args)); -} - -function applyMoveChargeAttrsInternal( - attrFilter: MoveAttrFilter, - user: Pokemon | null, - target: Pokemon | null, - move: ChargingMove, - args: any[], -): void { - move.chargeAttrs.filter((attr) => attrFilter(attr)).forEach((attr) => attr.apply(user, target, move, args)); -} - -export function applyMoveAttrs( - attrType: Constructor, - user: Pokemon | null, - target: Pokemon | null, - move: Move, - ...args: any[] -): void { - applyMoveAttrsInternal((attr: MoveAttr) => attr instanceof attrType, user, target, move, args); -} - -export function applyFilteredMoveAttrs( - attrFilter: MoveAttrFilter, - user: Pokemon, - target: Pokemon | null, - move: Move, - ...args: any[] -): void { - applyMoveAttrsInternal(attrFilter, user, target, move, args); -} - -export function applyMoveChargeAttrs( - attrType: Constructor, - user: Pokemon | null, - target: Pokemon | null, - move: ChargingMove, - ...args: any[] -): void { - applyMoveChargeAttrsInternal((attr: MoveAttr) => attr instanceof attrType, user, target, move, args); -} - export class MoveCondition { protected func: MoveConditionFunc; @@ -8175,73 +8192,232 @@ export type MoveTargetSet = { multiple: boolean; }; -export function getMoveTargets(user: Pokemon, move: MoveId, replaceTarget?: MoveTarget): MoveTargetSet { - const variableTarget = new NumberHolder(0); - user.getOpponents(false).forEach(p => applyMoveAttrs(VariableTargetAttr, user, p, allMoves[move], variableTarget)); +/** + * Map of Move attributes to their respective classes. Used for instanceof checks. + */ +const MoveAttrs = Object.freeze({ + MoveEffectAttr, + MoveHeaderAttr, + MessageHeaderAttr, + AddBattlerTagAttr, + AddBattlerTagHeaderAttr, + BeakBlastHeaderAttr, + PreMoveMessageAttr, + PreUseInterruptAttr, + RespectAttackTypeImmunityAttr, + IgnoreOpponentStatStagesAttr, + HighCritAttr, + CritOnlyAttr, + FixedDamageAttr, + UserHpDamageAttr, + TargetHalfHpDamageAttr, + MatchHpAttr, + CounterDamageAttr, + LevelDamageAttr, + RandomLevelDamageAttr, + ModifiedDamageAttr, + SurviveDamageAttr, + SplashAttr, + CelebrateAttr, + RecoilAttr, + SacrificialAttr, + SacrificialAttrOnHit, + HalfSacrificialAttr, + AddSubstituteAttr, + HealAttr, + PartyStatusCureAttr, + FlameBurstAttr, + SacrificialFullRestoreAttr, + IgnoreWeatherTypeDebuffAttr, + WeatherHealAttr, + PlantHealAttr, + SandHealAttr, + BoostHealAttr, + HealOnAllyAttr, + HitHealAttr, + IncrementMovePriorityAttr, + MultiHitAttr, + ChangeMultiHitTypeAttr, + WaterShurikenMultiHitTypeAttr, + StatusEffectAttr, + MultiStatusEffectAttr, + PsychoShiftEffectAttr, + StealHeldItemChanceAttr, + RemoveHeldItemAttr, + EatBerryAttr, + StealEatBerryAttr, + HealStatusEffectAttr, + BypassSleepAttr, + BypassBurnDamageReductionAttr, + WeatherChangeAttr, + ClearWeatherAttr, + TerrainChangeAttr, + ClearTerrainAttr, + OneHitKOAttr, + InstantChargeAttr, + WeatherInstantChargeAttr, + OverrideMoveEffectAttr, + DelayedAttackAttr, + AwaitCombinedPledgeAttr, + StatStageChangeAttr, + SecretPowerAttr, + PostVictoryStatStageChangeAttr, + AcupressureStatStageChangeAttr, + GrowthStatStageChangeAttr, + CutHpStatStageBoostAttr, + OrderUpStatBoostAttr, + CopyStatsAttr, + InvertStatsAttr, + ResetStatsAttr, + SwapStatStagesAttr, + HpSplitAttr, + VariablePowerAttr, + LessPPMorePowerAttr, + MovePowerMultiplierAttr, + BeatUpAttr, + DoublePowerChanceAttr, + ConsecutiveUsePowerMultiplierAttr, + ConsecutiveUseDoublePowerAttr, + ConsecutiveUseMultiBasePowerAttr, + WeightPowerAttr, + ElectroBallPowerAttr, + GyroBallPowerAttr, + LowHpPowerAttr, + CompareWeightPowerAttr, + HpPowerAttr, + OpponentHighHpPowerAttr, + FirstAttackDoublePowerAttr, + TurnDamagedDoublePowerAttr, + MagnitudePowerAttr, + AntiSunlightPowerDecreaseAttr, + FriendshipPowerAttr, + RageFistPowerAttr, + PositiveStatStagePowerAttr, + PunishmentPowerAttr, + PresentPowerAttr, + WaterShurikenPowerAttr, + SpitUpPowerAttr, + SwallowHealAttr, + MultiHitPowerIncrementAttr, + LastMoveDoublePowerAttr, + CombinedPledgePowerAttr, + CombinedPledgeStabBoostAttr, + RoundPowerAttr, + CueNextRoundAttr, + StatChangeBeforeDmgCalcAttr, + SpectralThiefAttr, + VariableAtkAttr, + TargetAtkUserAtkAttr, + DefAtkAttr, + VariableDefAttr, + DefDefAttr, + VariableAccuracyAttr, + ThunderAccuracyAttr, + StormAccuracyAttr, + AlwaysHitMinimizeAttr, + ToxicAccuracyAttr, + BlizzardAccuracyAttr, + VariableMoveCategoryAttr, + PhotonGeyserCategoryAttr, + TeraMoveCategoryAttr, + TeraBlastPowerAttr, + StatusCategoryOnAllyAttr, + ShellSideArmCategoryAttr, + VariableMoveTypeAttr, + FormChangeItemTypeAttr, + TechnoBlastTypeAttr, + AuraWheelTypeAttr, + RagingBullTypeAttr, + IvyCudgelTypeAttr, + WeatherBallTypeAttr, + TerrainPulseTypeAttr, + HiddenPowerTypeAttr, + TeraBlastTypeAttr, + TeraStarstormTypeAttr, + MatchUserTypeAttr, + CombinedPledgeTypeAttr, + VariableMoveTypeMultiplierAttr, + NeutralDamageAgainstFlyingTypeMultiplierAttr, + IceNoEffectTypeAttr, + FlyingTypeMultiplierAttr, + VariableMoveTypeChartAttr, + FreezeDryAttr, + OneHitKOAccuracyAttr, + SheerColdAccuracyAttr, + MissEffectAttr, + NoEffectAttr, + TypelessAttr, + BypassRedirectAttr, + FrenzyAttr, + SemiInvulnerableAttr, + LeechSeedAttr, + FallDownAttr, + GulpMissileTagAttr, + JawLockAttr, + CurseAttr, + LapseBattlerTagAttr, + RemoveBattlerTagAttr, + FlinchAttr, + ConfuseAttr, + RechargeAttr, + TrapAttr, + ProtectAttr, + IgnoreAccuracyAttr, + FaintCountdownAttr, + RemoveAllSubstitutesAttr, + HitsTagAttr, + HitsTagForDoubleDamageAttr, + AddArenaTagAttr, + RemoveArenaTagsAttr, + AddArenaTrapTagAttr, + AddArenaTrapTagHitAttr, + RemoveArenaTrapAttr, + RemoveScreensAttr, + SwapArenaTagsAttr, + AddPledgeEffectAttr, + RevivalBlessingAttr, + ForceSwitchOutAttr, + ChillyReceptionAttr, + RemoveTypeAttr, + CopyTypeAttr, + CopyBiomeTypeAttr, + ChangeTypeAttr, + AddTypeAttr, + FirstMoveTypeAttr, + CallMoveAttr, + RandomMoveAttr, + RandomMovesetMoveAttr, + NaturePowerAttr, + CopyMoveAttr, + RepeatMoveAttr, + ReducePpMoveAttr, + AttackReducePpMoveAttr, + MovesetCopyMoveAttr, + SketchAttr, + AbilityChangeAttr, + AbilityCopyAttr, + AbilityGiveAttr, + SwitchAbilitiesAttr, + SuppressAbilitiesAttr, + TransformAttr, + SwapStatAttr, + ShiftStatAttr, + AverageStatsAttr, + MoneyAttr, + DestinyBondAttr, + AddBattlerTagIfBoostedAttr, + StatusIfBoostedAttr, + LastResortAttr, + VariableTargetAttr, + AfterYouAttr, + ForceLastAttr, + HitsSameTypeAttr, + ResistLastMoveTypeAttr, + ExposedMoveAttr, +}); - let moveTarget: MoveTarget | undefined; - if (allMoves[move].hasAttr(VariableTargetAttr)) { - moveTarget = variableTarget.value; - } else if (replaceTarget !== undefined) { - moveTarget = replaceTarget; - } else if (move) { - moveTarget = allMoves[move].moveTarget; - } else if (move === undefined) { - moveTarget = MoveTarget.NEAR_ENEMY; - } - const opponents = user.getOpponents(false); - - let set: Pokemon[] = []; - let multiple = false; - const ally: Pokemon | undefined = user.getAlly(); - - switch (moveTarget) { - case MoveTarget.USER: - case MoveTarget.PARTY: - set = [ user ]; - break; - case MoveTarget.NEAR_OTHER: - case MoveTarget.OTHER: - case MoveTarget.ALL_NEAR_OTHERS: - case MoveTarget.ALL_OTHERS: - set = !isNullOrUndefined(ally) ? (opponents.concat([ ally ])) : opponents; - multiple = moveTarget === MoveTarget.ALL_NEAR_OTHERS || moveTarget === MoveTarget.ALL_OTHERS; - break; - case MoveTarget.NEAR_ENEMY: - case MoveTarget.ALL_NEAR_ENEMIES: - case MoveTarget.ALL_ENEMIES: - case MoveTarget.ENEMY_SIDE: - set = opponents; - multiple = moveTarget !== MoveTarget.NEAR_ENEMY; - break; - case MoveTarget.RANDOM_NEAR_ENEMY: - set = [ opponents[user.randBattleSeedInt(opponents.length)] ]; - break; - case MoveTarget.ATTACKER: - return { targets: [ -1 as BattlerIndex ], multiple: false }; - case MoveTarget.NEAR_ALLY: - case MoveTarget.ALLY: - set = !isNullOrUndefined(ally) ? [ ally ] : []; - break; - case MoveTarget.USER_OR_NEAR_ALLY: - case MoveTarget.USER_AND_ALLIES: - case MoveTarget.USER_SIDE: - set = !isNullOrUndefined(ally) ? [ user, ally ] : [ user ]; - multiple = moveTarget !== MoveTarget.USER_OR_NEAR_ALLY; - break; - case MoveTarget.ALL: - case MoveTarget.BOTH_SIDES: - set = (!isNullOrUndefined(ally) ? [ user, ally ] : [ user ]).concat(opponents); - multiple = true; - break; - case MoveTarget.CURSE: - const extraTargets = !isNullOrUndefined(ally) ? [ ally ] : []; - set = user.getTypes(true).includes(PokemonType.GHOST) ? (opponents.concat(extraTargets)) : [ user ]; - break; - } - - return { targets: set.filter(p => p?.isActive(true)).map(p => p.getBattlerIndex()).filter(t => t !== undefined), multiple }; -} +/** Map of of move attribute names to their constructors */ +export type MoveAttrConstructorMap = typeof MoveAttrs; export const selfStatLowerMoves: MoveId[] = []; @@ -11255,7 +11431,7 @@ export function initMoves() { .attr(StatusEffectAttr, StatusEffect.TOXIC) ); allMoves.map(m => { - if (m.getAttrs(StatStageChangeAttr).some(a => a.selfTarget && a.stages < 0)) { + if (m.getAttrs("StatStageChangeAttr").some(a => a.selfTarget && a.stages < 0)) { selfStatLowerMoves.push(m.id); } }); diff --git a/src/data/moves/pokemon-move.ts b/src/data/moves/pokemon-move.ts new file mode 100644 index 00000000000..da46caa819f --- /dev/null +++ b/src/data/moves/pokemon-move.ts @@ -0,0 +1,93 @@ +import type Pokemon from "#app/field/pokemon"; +import { toDmgValue } from "#app/utils/common"; +import type { MoveId } from "#enums/move-id"; +import { allMoves } from "../data-lists"; +import type Move from "./move"; + +/** + * Wrapper class for the {@linkcode Move} class for Pokemon to interact with. + * These are the moves assigned to a {@linkcode Pokemon} object. + * It links to {@linkcode Move} class via the move ID. + * Compared to {@linkcode Move}, this class also tracks things like + * PP Ups recieved, PP used, etc. + * @see {@linkcode isUsable} - checks if move is restricted, out of PP, or not implemented. + * @see {@linkcode getMove} - returns {@linkcode Move} object by looking it up via ID. + * @see {@linkcode usePp} - removes a point of PP from the move. + * @see {@linkcode getMovePp} - returns amount of PP a move currently has. + * @see {@linkcode getPpRatio} - returns the current PP amount / max PP amount. + * @see {@linkcode getName} - returns name of {@linkcode Move}. + **/ +export class PokemonMove { + public moveId: MoveId; + public ppUsed: number; + public ppUp: number; + public virtual: boolean; + + /** + * If defined and nonzero, overrides the maximum PP of the move (e.g., due to move being copied by Transform). + * This also nullifies all effects of `ppUp`. + */ + public maxPpOverride?: number; + + constructor(moveId: MoveId, ppUsed = 0, ppUp = 0, virtual = false, maxPpOverride?: number) { + this.moveId = moveId; + this.ppUsed = ppUsed; + this.ppUp = ppUp; + this.virtual = virtual; + this.maxPpOverride = maxPpOverride; + } + + /** + * Checks whether the move can be selected or performed by a Pokemon, without consideration for the move's targets. + * The move is unusable if it is out of PP, restricted by an effect, or unimplemented. + * + * @param pokemon - {@linkcode Pokemon} that would be using this move + * @param ignorePp - If `true`, skips the PP check + * @param ignoreRestrictionTags - If `true`, skips the check for move restriction tags (see {@link MoveRestrictionBattlerTag}) + * @returns `true` if the move can be selected and used by the Pokemon, otherwise `false`. + */ + isUsable(pokemon: Pokemon, ignorePp = false, ignoreRestrictionTags = false): boolean { + if (this.moveId && !ignoreRestrictionTags && pokemon.isMoveRestricted(this.moveId, pokemon)) { + return false; + } + + if (this.getMove().name.endsWith(" (N)")) { + return false; + } + + return ignorePp || this.ppUsed < this.getMovePp() || this.getMove().pp === -1; + } + + getMove(): Move { + return allMoves[this.moveId]; + } + + /** + * Sets {@link ppUsed} for this move and ensures the value does not exceed {@link getMovePp} + * @param count Amount of PP to use + */ + usePp(count = 1) { + this.ppUsed = Math.min(this.ppUsed + count, this.getMovePp()); + } + + getMovePp(): number { + return this.maxPpOverride || this.getMove().pp + this.ppUp * toDmgValue(this.getMove().pp / 5); + } + + getPpRatio(): number { + return 1 - this.ppUsed / this.getMovePp(); + } + + getName(): string { + return this.getMove().name; + } + + /** + * Copies an existing move or creates a valid {@linkcode PokemonMove} object from json representing one + * @param source The data for the move to copy; can be a {@linkcode PokemonMove} or JSON object representing one + * @returns A valid {@linkcode PokemonMove} object + */ + static loadMove(source: PokemonMove | any): PokemonMove { + return new PokemonMove(source.moveId, source.ppUsed, source.ppUp, source.virtual, source.maxPpOverride); + } +} diff --git a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts index 82fbc0efd69..2213dc4afaa 100644 --- a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts +++ b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts @@ -7,7 +7,8 @@ import { transitionMysteryEncounterIntroVisuals, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import type Pokemon from "#app/field/pokemon"; -import { EnemyPokemon, PokemonMove } from "#app/field/pokemon"; +import { EnemyPokemon } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import type { BerryModifierType, PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; import { modifierTypes } from "#app/modifier/modifier-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; @@ -25,7 +26,7 @@ import { getPokemonSpecies } from "#app/data/pokemon-species"; import { MoveId } from "#enums/move-id"; import { BattlerTagType } from "#enums/battler-tag-type"; import { randInt } from "#app/utils/common"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { applyModifierTypeToPlayerPokemon, catchPokemon, diff --git a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts index 938a136bced..c318efc0cb3 100644 --- a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts +++ b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts @@ -24,7 +24,7 @@ import { TrainerType } from "#enums/trainer-type"; import { SpeciesId } from "#enums/species-id"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { getEncounterText, showEncounterDialogue } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { MoveId } from "#enums/move-id"; import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; diff --git a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts index 19c4948aeab..a81dcc841b7 100644 --- a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts +++ b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts @@ -37,11 +37,11 @@ import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; import type { OptionSelectConfig } from "#app/ui/abstact-option-select-ui-handler"; import type { PlayerPokemon } from "#app/field/pokemon"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { Ability } from "#app/data/abilities/ability-class"; import { BerryModifier } from "#app/modifier/modifier"; import { BerryType } from "#enums/berry-type"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { MoveId } from "#enums/move-id"; import { EncounterBattleAnim } from "#app/data/battle-anims"; import { MoveCategory } from "#enums/MoveCategory"; diff --git a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts index 80465e1d20c..a74980919d6 100644 --- a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts +++ b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { globalScene } from "#app/global-scene"; import { EncounterBattleAnim } from "#app/data/battle-anims"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; @@ -23,7 +23,8 @@ import { getPokemonSpecies } from "#app/data/pokemon-species"; import { TrainerSlot } from "#enums/trainer-slot"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { EnemyPokemon, PokemonMove } from "#app/field/pokemon"; +import { EnemyPokemon } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { modifierTypes } from "#app/modifier/modifier-type"; import PokemonData from "#app/system/pokemon-data"; diff --git a/src/data/mystery-encounters/encounters/field-trip-encounter.ts b/src/data/mystery-encounters/encounters/field-trip-encounter.ts index 2cd6123838b..82fbfd51eec 100644 --- a/src/data/mystery-encounters/encounters/field-trip-encounter.ts +++ b/src/data/mystery-encounters/encounters/field-trip-encounter.ts @@ -7,7 +7,8 @@ import { setEncounterExp, setEncounterRewards, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import type { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import type { PokemonMove } from "#app/data/moves/pokemon-move"; import { modifierTypes } from "#app/modifier/modifier-type"; import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; diff --git a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts index 8b0e5a08020..d42778cb17c 100644 --- a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts +++ b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts @@ -24,9 +24,9 @@ import { SpeciesId } from "#enums/species-id"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { Gender } from "#app/data/gender"; import { PokemonType } from "#enums/pokemon-type"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import type Pokemon from "#app/field/pokemon"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { MoveId } from "#enums/move-id"; import { EncounterBattleAnim } from "#app/data/battle-anims"; import { WeatherType } from "#enums/weather-type"; diff --git a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts index a52641f857d..456562ca70e 100644 --- a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts +++ b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts @@ -13,7 +13,7 @@ import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/myst import { TrainerSlot } from "#enums/trainer-slot"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { FieldPosition } from "#app/field/pokemon"; +import { FieldPosition } from "#enums/field-position"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { MoneyRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import { queueEncounterMessage, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; @@ -25,7 +25,7 @@ import { getPokemonNameWithAffix } from "#app/messages"; import { PlayerGender } from "#enums/player-gender"; import { getPokeballAtlasKey, getPokeballTintColor } from "#app/data/pokeball"; import { addPokeballOpenParticles } from "#app/field/anims"; -import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms"; +import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms/form-change-triggers"; import { modifierTypes } from "#app/modifier/modifier-type"; import { Nature } from "#enums/nature"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; diff --git a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts index 6ecce46ae24..a84b0af30ed 100644 --- a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts +++ b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts @@ -33,7 +33,8 @@ import { } from "#app/utils/common"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { EnemyPokemon, PokemonMove } from "#app/field/pokemon"; +import { EnemyPokemon } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import type { PokemonHeldItemModifier } from "#app/modifier/modifier"; import { HiddenAbilityRateBoosterModifier, diff --git a/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts b/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts index 009639291de..8eea0623cd4 100644 --- a/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts +++ b/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts @@ -11,7 +11,7 @@ import { applyDamageToPokemon } from "#app/data/mystery-encounters/utils/encount import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; const OPTION_1_REQUIRED_MOVE = MoveId.SURF; const OPTION_2_REQUIRED_MOVE = MoveId.FLY; diff --git a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts index bb1529e3695..1ecd73143fc 100644 --- a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts +++ b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts @@ -21,8 +21,9 @@ import { import { queueEncounterMessage } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { Nature } from "#enums/nature"; import { MoveId } from "#enums/move-id"; -import { BattlerIndex } from "#app/battle"; -import { AiType, PokemonMove } from "#app/field/pokemon"; +import { BattlerIndex } from "#enums/battler-index"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { AiType } from "#enums/ai-type"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; diff --git a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts index be347fb0035..a3eb78f479e 100644 --- a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts @@ -17,11 +17,11 @@ import { getPokemonSpecies } from "#app/data/pokemon-species"; import { SpeciesId } from "#enums/species-id"; import { Nature } from "#enums/nature"; import type Pokemon from "#app/field/pokemon"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { queueEncounterMessage, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { modifyPlayerPokemonBST } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import { MoveId } from "#enums/move-id"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { BattlerTagType } from "#enums/battler-tag-type"; import { BerryType } from "#enums/berry-type"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; diff --git a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts index 4b17260098f..91754629821 100644 --- a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts @@ -23,7 +23,7 @@ import { Nature } from "#enums/nature"; import { PokemonType } from "#enums/pokemon-type"; import { BerryType } from "#enums/berry-type"; import { Stat } from "#enums/stat"; -import { SpeciesFormChangeAbilityTrigger } from "#app/data/pokemon-forms"; +import { SpeciesFormChangeAbilityTrigger } from "#app/data/pokemon-forms/form-change-triggers"; import { applyPostBattleInitAbAttrs, PostBattleInitAbAttr } from "#app/data/abilities/ability"; import { showEncounterDialogue, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; diff --git a/src/data/mystery-encounters/encounters/training-session-encounter.ts b/src/data/mystery-encounters/encounters/training-session-encounter.ts index b17a39ae694..9ab91f439bf 100644 --- a/src/data/mystery-encounters/encounters/training-session-encounter.ts +++ b/src/data/mystery-encounters/encounters/training-session-encounter.ts @@ -12,7 +12,7 @@ import { speciesStarterCosts } from "#app/data/balance/starters"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import type { PokemonHeldItemModifier } from "#app/modifier/modifier"; -import { AbilityAttr } from "#app/system/game-data"; +import { AbilityAttr } from "#enums/ability-attr"; import PokemonData from "#app/system/pokemon-data"; import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import { isNullOrUndefined, randSeedShuffle } from "#app/utils/common"; diff --git a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts index a0051058d02..8bcd024de5c 100644 --- a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts +++ b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts @@ -24,8 +24,8 @@ import i18next from "#app/plugins/i18n"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { MoveId } from "#enums/move-id"; -import { BattlerIndex } from "#app/battle"; -import { PokemonMove } from "#app/field/pokemon"; +import { BattlerIndex } from "#enums/battler-index"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { randSeedInt } from "#app/utils/common"; diff --git a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts index 411ecdec080..c48f93a9a9d 100644 --- a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts +++ b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts @@ -10,7 +10,7 @@ import { import { CHARMING_MOVES } from "#app/data/mystery-encounters/requirements/requirement-groups"; import type Pokemon from "#app/field/pokemon"; import type { EnemyPokemon } from "#app/field/pokemon"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { globalScene } from "#app/global-scene"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; @@ -29,8 +29,7 @@ import { import PokemonData from "#app/system/pokemon-data"; import { isNullOrUndefined, randSeedInt } from "#app/utils/common"; import type { MoveId } from "#enums/move-id"; -import { BattlerIndex } from "#app/battle"; -import { SelfStatusMove } from "#app/data/moves/move"; +import { BattlerIndex } from "#enums/battler-index"; import { PokeballType } from "#enums/pokeball"; import { BattlerTagType } from "#enums/battler-tag-type"; import { queueEncounterMessage } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; @@ -175,7 +174,7 @@ export const UncommonBreedEncounter: MysteryEncounter = MysteryEncounterBuilder. // Check what type of move the egg move is to determine target const pokemonMove = new PokemonMove(eggMove); const move = pokemonMove.getMove(); - const target = move instanceof SelfStatusMove ? BattlerIndex.ENEMY : BattlerIndex.PLAYER; + const target = move.is("SelfStatusMove") ? BattlerIndex.ENEMY : BattlerIndex.PLAYER; encounter.startOfBattleEffects.push({ sourceBattlerIndex: BattlerIndex.ENEMY, diff --git a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts index 2b1f775b78e..fe1911c9007 100644 --- a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts +++ b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts @@ -16,7 +16,7 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { NumberHolder, isNullOrUndefined, randSeedInt, randSeedShuffle } from "#app/utils/common"; import type PokemonSpecies from "#app/data/pokemon-species"; import { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species"; diff --git a/src/data/mystery-encounters/mystery-encounter-requirements.ts b/src/data/mystery-encounters/mystery-encounter-requirements.ts index 88d9ba402a9..bca34be723b 100644 --- a/src/data/mystery-encounters/mystery-encounter-requirements.ts +++ b/src/data/mystery-encounters/mystery-encounter-requirements.ts @@ -2,7 +2,9 @@ import { globalScene } from "#app/global-scene"; import { allAbilities } from "../data-lists"; import { EvolutionItem, pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { Nature } from "#enums/nature"; -import { FormChangeItem, pokemonFormChanges, SpeciesFormChangeItemTrigger } from "#app/data/pokemon-forms"; +import { pokemonFormChanges } from "#app/data/pokemon-forms"; +import { SpeciesFormChangeItemTrigger } from "../pokemon-forms/form-change-triggers"; +import { FormChangeItem } from "#enums/form-change-item"; import { StatusEffect } from "#enums/status-effect"; import { PokemonType } from "#enums/pokemon-type"; import { WeatherType } from "#enums/weather-type"; diff --git a/src/data/mystery-encounters/mystery-encounter.ts b/src/data/mystery-encounters/mystery-encounter.ts index e305252ed0f..6510e32fe76 100644 --- a/src/data/mystery-encounters/mystery-encounter.ts +++ b/src/data/mystery-encounters/mystery-encounter.ts @@ -1,5 +1,6 @@ import type { EnemyPartyConfig } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import type { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import type { PokemonMove } from "../moves/pokemon-move"; import type Pokemon from "#app/field/pokemon"; import { capitalizeFirstLetter, isNullOrUndefined } from "#app/utils/common"; import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; @@ -20,11 +21,11 @@ import { StatusEffectRequirement, WaveRangeRequirement, } from "./mystery-encounter-requirements"; -import type { BattlerIndex } from "#app/battle"; +import type { BattlerIndex } from "#enums/battler-index"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; -import type { GameModes } from "#app/game-mode"; +import type { GameModes } from "#enums/game-modes"; import type { EncounterAnim } from "#enums/encounter-anims"; import type { Challenges } from "#enums/challenges"; import { globalScene } from "#app/global-scene"; diff --git a/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts b/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts index 7698be7b15d..c0e45d5401c 100644 --- a/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts +++ b/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts @@ -1,6 +1,6 @@ import type { MoveId } from "#enums/move-id"; import type { PlayerPokemon } from "#app/field/pokemon"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { isNullOrUndefined } from "#app/utils/common"; import { EncounterPokemonRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import { globalScene } from "#app/global-scene"; diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index b86cbaa18c9..69984229681 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -1,5 +1,5 @@ import type Battle from "#app/battle"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { BattleType } from "#enums/battle-type"; import { biomeLinks, BiomePoolTier } from "#app/data/balance/biomes"; import type MysteryEncounterOption from "#app/data/mystery-encounters/mystery-encounter-option"; @@ -8,9 +8,12 @@ import { WEIGHT_INCREMENT_ON_SPAWN_MISS, } from "#app/data/mystery-encounters/mystery-encounters"; import { showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; -import type { AiType, PlayerPokemon } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import type { AiType } from "#enums/ai-type"; import type Pokemon from "#app/field/pokemon"; -import { EnemyPokemon, FieldPosition, PokemonMove } from "#app/field/pokemon"; +import { EnemyPokemon } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { FieldPosition } from "#enums/field-position"; import type { CustomModifierSettings, ModifierType } from "#app/modifier/modifier-type"; import { getPartyLuckValue, @@ -30,7 +33,8 @@ import type { BattlerTagType } from "#enums/battler-tag-type"; import { BiomeId } from "#enums/biome-id"; import type { TrainerType } from "#enums/trainer-type"; import i18next from "i18next"; -import Trainer, { TrainerVariant } from "#app/field/trainer"; +import Trainer from "#app/field/trainer"; +import { TrainerVariant } from "#enums/trainer-variant"; import type { Gender } from "#app/data/gender"; import type { Nature } from "#enums/nature"; import type { MoveId } from "#enums/move-id"; diff --git a/src/data/pokemon-forms.ts b/src/data/pokemon-forms.ts index 47eb355c8b6..ea129454034 100644 --- a/src/data/pokemon-forms.ts +++ b/src/data/pokemon-forms.ts @@ -1,139 +1,30 @@ -import { PokemonFormChangeItemModifier } from "../modifier/modifier"; import type Pokemon from "../field/pokemon"; -import { StatusEffect } from "#enums/status-effect"; import { allMoves } from "./data-lists"; import { MoveCategory } from "#enums/MoveCategory"; import type { Constructor, nil } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; -import type { TimeOfDay } from "#enums/time-of-day"; -import { getPokemonNameWithAffix } from "#app/messages"; -import i18next from "i18next"; import { WeatherType } from "#enums/weather-type"; -import { Challenges } from "#app/enums/challenges"; import { SpeciesFormKey } from "#enums/species-form-key"; import { globalScene } from "#app/global-scene"; - -export enum FormChangeItem { - NONE, - - ABOMASITE, - ABSOLITE, - AERODACTYLITE, - AGGRONITE, - ALAKAZITE, - ALTARIANITE, - AMPHAROSITE, - AUDINITE, - BANETTITE, - BEEDRILLITE, - BLASTOISINITE, - BLAZIKENITE, - CAMERUPTITE, - CHARIZARDITE_X, - CHARIZARDITE_Y, - DIANCITE, - GALLADITE, - GARCHOMPITE, - GARDEVOIRITE, - GENGARITE, - GLALITITE, - GYARADOSITE, - HERACRONITE, - HOUNDOOMINITE, - KANGASKHANITE, - LATIASITE, - LATIOSITE, - LOPUNNITE, - LUCARIONITE, - MANECTITE, - MAWILITE, - MEDICHAMITE, - METAGROSSITE, - MEWTWONITE_X, - MEWTWONITE_Y, - PIDGEOTITE, - PINSIRITE, - RAYQUAZITE, - SABLENITE, - SALAMENCITE, - SCEPTILITE, - SCIZORITE, - SHARPEDONITE, - SLOWBRONITE, - STEELIXITE, - SWAMPERTITE, - TYRANITARITE, - VENUSAURITE, - - BLUE_ORB = 50, - RED_ORB, - ADAMANT_CRYSTAL, - LUSTROUS_GLOBE, - GRISEOUS_CORE, - REVEAL_GLASS, - MAX_MUSHROOMS, - DARK_STONE, - LIGHT_STONE, - PRISON_BOTTLE, - RUSTED_SWORD, - RUSTED_SHIELD, - ICY_REINS_OF_UNITY, - SHADOW_REINS_OF_UNITY, - ULTRANECROZIUM_Z, - - SHARP_METEORITE = 100, - HARD_METEORITE, - SMOOTH_METEORITE, - GRACIDEA, - SHOCK_DRIVE, - BURN_DRIVE, - CHILL_DRIVE, - DOUSE_DRIVE, - N_SOLARIZER, - N_LUNARIZER, - WELLSPRING_MASK, - HEARTHFLAME_MASK, - CORNERSTONE_MASK, - FIST_PLATE, - SKY_PLATE, - TOXIC_PLATE, - EARTH_PLATE, - STONE_PLATE, - INSECT_PLATE, - SPOOKY_PLATE, - IRON_PLATE, - FLAME_PLATE, - SPLASH_PLATE, - MEADOW_PLATE, - ZAP_PLATE, - MIND_PLATE, - ICICLE_PLATE, - DRACO_PLATE, - DREAD_PLATE, - PIXIE_PLATE, - BLANK_PLATE, // TODO: Find a potential use for this - LEGEND_PLATE, // TODO: Find a potential use for this - FIGHTING_MEMORY, - FLYING_MEMORY, - POISON_MEMORY, - GROUND_MEMORY, - ROCK_MEMORY, - BUG_MEMORY, - GHOST_MEMORY, - STEEL_MEMORY, - FIRE_MEMORY, - WATER_MEMORY, - GRASS_MEMORY, - ELECTRIC_MEMORY, - PSYCHIC_MEMORY, - ICE_MEMORY, - DRAGON_MEMORY, - DARK_MEMORY, - FAIRY_MEMORY, - NORMAL_MEMORY, // TODO: Find a potential use for this -} +import { FormChangeItem } from "#enums/form-change-item"; +import { + MeloettaFormChangePostMoveTrigger, + SpeciesDefaultFormMatchTrigger, + SpeciesFormChangeAbilityTrigger, + SpeciesFormChangeActiveTrigger, + SpeciesFormChangeCompoundTrigger, + SpeciesFormChangeItemTrigger, + SpeciesFormChangeLapseTeraTrigger, + SpeciesFormChangeManualTrigger, + SpeciesFormChangeMoveLearnedTrigger, + SpeciesFormChangePreMoveTrigger, + SpeciesFormChangeRevertWeatherFormTrigger, + SpeciesFormChangeTeraTrigger, + type SpeciesFormChangeTrigger, + SpeciesFormChangeWeatherTrigger, +} from "./pokemon-forms/form-change-triggers"; export type SpeciesFormChangeConditionPredicate = (p: Pokemon) => boolean; export type SpeciesFormChangeConditionEnforceFunc = (p: Pokemon) => void; @@ -214,347 +105,6 @@ export class SpeciesFormChangeCondition { } } -export abstract class SpeciesFormChangeTrigger { - public description = ""; - - canChange(_pokemon: Pokemon): boolean { - return true; - } - - hasTriggerType(triggerType: Constructor): boolean { - return this instanceof triggerType; - } -} - -export class SpeciesFormChangeManualTrigger extends SpeciesFormChangeTrigger {} - -export class SpeciesFormChangeAbilityTrigger extends SpeciesFormChangeTrigger { - public description: string = i18next.t("pokemonEvolutions:Forms.ability"); -} - -export class SpeciesFormChangeCompoundTrigger { - public description = ""; - public triggers: SpeciesFormChangeTrigger[]; - - constructor(...triggers: SpeciesFormChangeTrigger[]) { - this.triggers = triggers; - this.description = this.triggers - .filter(trigger => trigger?.description?.length > 0) - .map(trigger => trigger.description) - .join(", "); - } - - canChange(pokemon: Pokemon): boolean { - for (const trigger of this.triggers) { - if (!trigger.canChange(pokemon)) { - return false; - } - } - - return true; - } - - hasTriggerType(triggerType: Constructor): boolean { - return !!this.triggers.find(t => t.hasTriggerType(triggerType)); - } -} - -export class SpeciesFormChangeItemTrigger extends SpeciesFormChangeTrigger { - public item: FormChangeItem; - public active: boolean; - - constructor(item: FormChangeItem, active = true) { - super(); - this.item = item; - this.active = active; - this.description = this.active - ? i18next.t("pokemonEvolutions:Forms.item", { - item: i18next.t(`modifierType:FormChangeItem.${FormChangeItem[this.item]}`), - }) - : i18next.t("pokemonEvolutions:Forms.deactivateItem", { - item: i18next.t(`modifierType:FormChangeItem.${FormChangeItem[this.item]}`), - }); - } - - canChange(pokemon: Pokemon): boolean { - return !!globalScene.findModifier( - m => - m instanceof PokemonFormChangeItemModifier && - m.pokemonId === pokemon.id && - m.formChangeItem === this.item && - m.active === this.active, - ); - } -} - -export class SpeciesFormChangeTimeOfDayTrigger extends SpeciesFormChangeTrigger { - public timesOfDay: TimeOfDay[]; - - constructor(...timesOfDay: TimeOfDay[]) { - super(); - this.timesOfDay = timesOfDay; - this.description = i18next.t("pokemonEvolutions:Forms.timeOfDay"); - } - - canChange(_pokemon: Pokemon): boolean { - return this.timesOfDay.indexOf(globalScene.arena.getTimeOfDay()) > -1; - } -} - -export class SpeciesFormChangeActiveTrigger extends SpeciesFormChangeTrigger { - public active: boolean; - - constructor(active = false) { - super(); - this.active = active; - this.description = this.active - ? i18next.t("pokemonEvolutions:Forms.enter") - : i18next.t("pokemonEvolutions:Forms.leave"); - } - - canChange(pokemon: Pokemon): boolean { - return pokemon.isActive(true) === this.active; - } -} - -export class SpeciesFormChangeStatusEffectTrigger extends SpeciesFormChangeTrigger { - public statusEffects: StatusEffect[]; - public invert: boolean; - - constructor(statusEffects: StatusEffect | StatusEffect[], invert = false) { - super(); - if (!Array.isArray(statusEffects)) { - statusEffects = [statusEffects]; - } - this.statusEffects = statusEffects; - this.invert = invert; - this.description = i18next.t("pokemonEvolutions:Forms.statusEffect"); - } - - canChange(pokemon: Pokemon): boolean { - return this.statusEffects.indexOf(pokemon.status?.effect || StatusEffect.NONE) > -1 !== this.invert; - } -} - -export class SpeciesFormChangeMoveLearnedTrigger extends SpeciesFormChangeTrigger { - public move: MoveId; - public known: boolean; - - constructor(move: MoveId, known = true) { - super(); - this.move = move; - this.known = known; - const moveKey = MoveId[this.move] - .split("_") - .filter(f => f) - .map((f, i) => (i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase())) - .join("") as unknown as string; - this.description = known - ? i18next.t("pokemonEvolutions:Forms.moveLearned", { - move: i18next.t(`move:${moveKey}.name`), - }) - : i18next.t("pokemonEvolutions:Forms.moveForgotten", { - move: i18next.t(`move:${moveKey}.name`), - }); - } - - canChange(pokemon: Pokemon): boolean { - return !!pokemon.moveset.filter(m => m.moveId === this.move).length === this.known; - } -} - -export abstract class SpeciesFormChangeMoveTrigger extends SpeciesFormChangeTrigger { - public movePredicate: (m: MoveId) => boolean; - public used: boolean; - - constructor(move: MoveId | ((m: MoveId) => boolean), used = true) { - super(); - this.movePredicate = typeof move === "function" ? move : (m: MoveId) => m === move; - this.used = used; - } -} - -export class SpeciesFormChangePreMoveTrigger extends SpeciesFormChangeMoveTrigger { - description = i18next.t("pokemonEvolutions:Forms.preMove"); - - canChange(pokemon: Pokemon): boolean { - const command = globalScene.currentBattle.turnCommands[pokemon.getBattlerIndex()]; - return !!command?.move && this.movePredicate(command.move.move) === this.used; - } -} - -export class SpeciesFormChangePostMoveTrigger extends SpeciesFormChangeMoveTrigger { - description = i18next.t("pokemonEvolutions:Forms.postMove"); - - canChange(pokemon: Pokemon): boolean { - return ( - pokemon.summonData && !!pokemon.getLastXMoves(1).filter(m => this.movePredicate(m.move)).length === this.used - ); - } -} - -export class MeloettaFormChangePostMoveTrigger extends SpeciesFormChangePostMoveTrigger { - override canChange(pokemon: Pokemon): boolean { - if (globalScene.gameMode.hasChallenge(Challenges.SINGLE_TYPE)) { - return false; - } - // Meloetta will not transform if it has the ability Sheer Force when using Relic Song - if (pokemon.hasAbility(AbilityId.SHEER_FORCE)) { - return false; - } - return super.canChange(pokemon); - } -} - -export class SpeciesDefaultFormMatchTrigger extends SpeciesFormChangeTrigger { - private formKey: string; - - constructor(formKey: string) { - super(); - this.formKey = formKey; - this.description = ""; - } - - canChange(pokemon: Pokemon): boolean { - return ( - this.formKey === - pokemon.species.forms[globalScene.getSpeciesFormIndex(pokemon.species, pokemon.gender, pokemon.getNature(), true)] - .formKey - ); - } -} - -/** - * Class used for triggering form changes based on the user's Tera type. - * Used by Ogerpon and Terapagos. - * @extends SpeciesFormChangeTrigger - */ -export class SpeciesFormChangeTeraTrigger extends SpeciesFormChangeTrigger { - description = i18next.t("pokemonEvolutions:Forms.tera"); -} - -/** - * Class used for triggering form changes based on the user's lapsed Tera type. - * Used by Ogerpon and Terapagos. - * @extends SpeciesFormChangeTrigger - */ -export class SpeciesFormChangeLapseTeraTrigger extends SpeciesFormChangeTrigger { - description = i18next.t("pokemonEvolutions:Forms.teraLapse"); -} - -/** - * Class used for triggering form changes based on weather. - * Used by Castform and Cherrim. - * @extends SpeciesFormChangeTrigger - */ -export class SpeciesFormChangeWeatherTrigger extends SpeciesFormChangeTrigger { - /** The ability that triggers the form change */ - public ability: AbilityId; - /** The list of weathers that trigger the form change */ - public weathers: WeatherType[]; - - constructor(ability: AbilityId, weathers: WeatherType[]) { - super(); - this.ability = ability; - this.weathers = weathers; - this.description = i18next.t("pokemonEvolutions:Forms.weather"); - } - - /** - * Checks if the Pokemon has the required ability and is in the correct weather while - * the weather or ability is also not suppressed. - * @param {Pokemon} pokemon the pokemon that is trying to do the form change - * @returns `true` if the Pokemon can change forms, `false` otherwise - */ - canChange(pokemon: Pokemon): boolean { - const currentWeather = globalScene.arena.weather?.weatherType ?? WeatherType.NONE; - const isWeatherSuppressed = globalScene.arena.weather?.isEffectSuppressed(); - const isAbilitySuppressed = pokemon.summonData.abilitySuppressed; - - return ( - !isAbilitySuppressed && - !isWeatherSuppressed && - pokemon.hasAbility(this.ability) && - this.weathers.includes(currentWeather) - ); - } -} - -/** - * Class used for reverting to the original form when the weather runs out - * or when the user loses the ability/is suppressed. - * Used by Castform and Cherrim. - * @extends SpeciesFormChangeTrigger - */ -export class SpeciesFormChangeRevertWeatherFormTrigger extends SpeciesFormChangeTrigger { - /** The ability that triggers the form change*/ - public ability: AbilityId; - /** The list of weathers that will also trigger a form change to original form */ - public weathers: WeatherType[]; - - constructor(ability: AbilityId, weathers: WeatherType[]) { - super(); - this.ability = ability; - this.weathers = weathers; - this.description = i18next.t("pokemonEvolutions:Forms.weatherRevert"); - } - - /** - * Checks if the Pokemon has the required ability and the weather is one that will revert - * the Pokemon to its original form or the weather or ability is suppressed - * @param {Pokemon} pokemon the pokemon that is trying to do the form change - * @returns `true` if the Pokemon will revert to its original form, `false` otherwise - */ - canChange(pokemon: Pokemon): boolean { - if (pokemon.hasAbility(this.ability, false, true)) { - const currentWeather = globalScene.arena.weather?.weatherType ?? WeatherType.NONE; - const isWeatherSuppressed = globalScene.arena.weather?.isEffectSuppressed(); - const isAbilitySuppressed = pokemon.summonData.abilitySuppressed; - const summonDataAbility = pokemon.summonData.ability; - const isAbilityChanged = summonDataAbility !== this.ability && summonDataAbility !== AbilityId.NONE; - - if (this.weathers.includes(currentWeather) || isWeatherSuppressed || isAbilitySuppressed || isAbilityChanged) { - return true; - } - } - return false; - } -} - -export function getSpeciesFormChangeMessage(pokemon: Pokemon, formChange: SpeciesFormChange, preName: string): string { - const isMega = formChange.formKey.indexOf(SpeciesFormKey.MEGA) > -1; - const isGmax = formChange.formKey.indexOf(SpeciesFormKey.GIGANTAMAX) > -1; - const isEmax = formChange.formKey.indexOf(SpeciesFormKey.ETERNAMAX) > -1; - const isRevert = !isMega && formChange.formKey === pokemon.species.forms[0].formKey; - if (isMega) { - return i18next.t("battlePokemonForm:megaChange", { - preName, - pokemonName: pokemon.name, - }); - } - if (isGmax) { - return i18next.t("battlePokemonForm:gigantamaxChange", { - preName, - pokemonName: pokemon.name, - }); - } - if (isEmax) { - return i18next.t("battlePokemonForm:eternamaxChange", { - preName, - pokemonName: pokemon.name, - }); - } - if (isRevert) { - return i18next.t("battlePokemonForm:revertChange", { - pokemonName: getPokemonNameWithAffix(pokemon), - }); - } - if (pokemon.getAbility().id === AbilityId.DISGUISE) { - return i18next.t("battlePokemonForm:disguiseChange"); - } - return i18next.t("battlePokemonForm:formChange", { preName }); -} - /** * Gives a condition for form changing checking if a species is registered as caught in the player's dex data. * Used for fusion forms such as Kyurem and Necrozma. diff --git a/src/data/pokemon-forms/form-change-triggers.ts b/src/data/pokemon-forms/form-change-triggers.ts new file mode 100644 index 00000000000..eb2c0a557c2 --- /dev/null +++ b/src/data/pokemon-forms/form-change-triggers.ts @@ -0,0 +1,348 @@ +import i18next from "i18next"; +import type { Constructor } from "#app/utils/common"; +import type { TimeOfDay } from "#enums/time-of-day"; +import type Pokemon from "#app/field/pokemon"; +import type { SpeciesFormChange } from "#app/data/pokemon-forms"; +import type { PokemonFormChangeItemModifier } from "#app/modifier/modifier"; +import { getPokemonNameWithAffix } from "#app/messages"; +import { globalScene } from "#app/global-scene"; +import { FormChangeItem } from "#enums/form-change-item"; +import { AbilityId } from "#enums/ability-id"; +import { Challenges } from "#enums/challenges"; +import { MoveId } from "#enums/move-id"; +import { SpeciesFormKey } from "#enums/species-form-key"; +import { StatusEffect } from "#enums/status-effect"; +import { WeatherType } from "#enums/weather-type"; + +export abstract class SpeciesFormChangeTrigger { + public description = ""; + + canChange(_pokemon: Pokemon): boolean { + return true; + } + + hasTriggerType(triggerType: Constructor): boolean { + return this instanceof triggerType; + } +} + +export class SpeciesFormChangeManualTrigger extends SpeciesFormChangeTrigger {} + +export class SpeciesFormChangeAbilityTrigger extends SpeciesFormChangeTrigger { + public description: string = i18next.t("pokemonEvolutions:Forms.ability"); +} + +export class SpeciesFormChangeCompoundTrigger { + public description = ""; + public triggers: SpeciesFormChangeTrigger[]; + + constructor(...triggers: SpeciesFormChangeTrigger[]) { + this.triggers = triggers; + this.description = this.triggers + .filter(trigger => trigger?.description?.length > 0) + .map(trigger => trigger.description) + .join(", "); + } + + canChange(pokemon: Pokemon): boolean { + for (const trigger of this.triggers) { + if (!trigger.canChange(pokemon)) { + return false; + } + } + + return true; + } + + hasTriggerType(triggerType: Constructor): boolean { + return !!this.triggers.find(t => t.hasTriggerType(triggerType)); + } +} + +export class SpeciesFormChangeItemTrigger extends SpeciesFormChangeTrigger { + public item: FormChangeItem; + public active: boolean; + + constructor(item: FormChangeItem, active = true) { + super(); + this.item = item; + this.active = active; + this.description = this.active + ? i18next.t("pokemonEvolutions:Forms.item", { + item: i18next.t(`modifierType:FormChangeItem.${FormChangeItem[this.item]}`), + }) + : i18next.t("pokemonEvolutions:Forms.deactivateItem", { + item: i18next.t(`modifierType:FormChangeItem.${FormChangeItem[this.item]}`), + }); + } + + canChange(pokemon: Pokemon): boolean { + return !!globalScene.findModifier(r => { + // Assume that if m has the `formChangeItem` property, then it is a PokemonFormChangeItemModifier + const m = r as PokemonFormChangeItemModifier; + return ( + "formChangeItem" in m && + m.pokemonId === pokemon.id && + m.formChangeItem === this.item && + m.active === this.active + ); + }); + } +} + +export class SpeciesFormChangeTimeOfDayTrigger extends SpeciesFormChangeTrigger { + public timesOfDay: TimeOfDay[]; + + constructor(...timesOfDay: TimeOfDay[]) { + super(); + this.timesOfDay = timesOfDay; + this.description = i18next.t("pokemonEvolutions:Forms.timeOfDay"); + } + + canChange(_pokemon: Pokemon): boolean { + return this.timesOfDay.indexOf(globalScene.arena.getTimeOfDay()) > -1; + } +} +export class SpeciesFormChangeActiveTrigger extends SpeciesFormChangeTrigger { + public active: boolean; + + constructor(active = false) { + super(); + this.active = active; + this.description = this.active + ? i18next.t("pokemonEvolutions:Forms.enter") + : i18next.t("pokemonEvolutions:Forms.leave"); + } + + canChange(pokemon: Pokemon): boolean { + return pokemon.isActive(true) === this.active; + } +} + +export class SpeciesFormChangeStatusEffectTrigger extends SpeciesFormChangeTrigger { + public statusEffects: StatusEffect[]; + public invert: boolean; + + constructor(statusEffects: StatusEffect | StatusEffect[], invert = false) { + super(); + if (!Array.isArray(statusEffects)) { + statusEffects = [statusEffects]; + } + this.statusEffects = statusEffects; + this.invert = invert; + // this.description = i18next.t("pokemonEvolutions:Forms.statusEffect"); + } + + canChange(pokemon: Pokemon): boolean { + return this.statusEffects.indexOf(pokemon.status?.effect || StatusEffect.NONE) > -1 !== this.invert; + } +} + +export class SpeciesFormChangeMoveLearnedTrigger extends SpeciesFormChangeTrigger { + public move: MoveId; + public known: boolean; + + constructor(move: MoveId, known = true) { + super(); + this.move = move; + this.known = known; + const moveKey = MoveId[this.move] + .split("_") + .filter(f => f) + .map((f, i) => (i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase())) + .join("") as unknown as string; + this.description = known + ? i18next.t("pokemonEvolutions:Forms.moveLearned", { + move: i18next.t(`move:${moveKey}.name`), + }) + : i18next.t("pokemonEvolutions:Forms.moveForgotten", { + move: i18next.t(`move:${moveKey}.name`), + }); + } + + canChange(pokemon: Pokemon): boolean { + return !!pokemon.moveset.filter(m => m.moveId === this.move).length === this.known; + } +} + +export abstract class SpeciesFormChangeMoveTrigger extends SpeciesFormChangeTrigger { + public movePredicate: (m: MoveId) => boolean; + public used: boolean; + + constructor(move: MoveId | ((m: MoveId) => boolean), used = true) { + super(); + this.movePredicate = typeof move === "function" ? move : (m: MoveId) => m === move; + this.used = used; + } +} + +export class SpeciesFormChangePreMoveTrigger extends SpeciesFormChangeMoveTrigger { + description = i18next.t("pokemonEvolutions:Forms.preMove"); + canChange(pokemon: Pokemon): boolean { + const command = globalScene.currentBattle.turnCommands[pokemon.getBattlerIndex()]; + return !!command?.move && this.movePredicate(command.move.move) === this.used; + } +} + +export class SpeciesFormChangePostMoveTrigger extends SpeciesFormChangeMoveTrigger { + description = i18next.t("pokemonEvolutions:Forms.postMove"); + canChange(pokemon: Pokemon): boolean { + return ( + pokemon.summonData && !!pokemon.getLastXMoves(1).filter(m => this.movePredicate(m.move)).length === this.used + ); + } +} + +export class MeloettaFormChangePostMoveTrigger extends SpeciesFormChangePostMoveTrigger { + override canChange(pokemon: Pokemon): boolean { + if (globalScene.gameMode.hasChallenge(Challenges.SINGLE_TYPE)) { + return false; + } + // Meloetta will not transform if it has the ability Sheer Force when using Relic Song + if (pokemon.hasAbility(AbilityId.SHEER_FORCE)) { + return false; + } + return super.canChange(pokemon); + } +} + +export class SpeciesDefaultFormMatchTrigger extends SpeciesFormChangeTrigger { + private formKey: string; + + constructor(formKey: string) { + super(); + this.formKey = formKey; + this.description = ""; + } + + canChange(pokemon: Pokemon): boolean { + return ( + this.formKey === + pokemon.species.forms[globalScene.getSpeciesFormIndex(pokemon.species, pokemon.gender, pokemon.getNature(), true)] + .formKey + ); + } +} + +/** + * Class used for triggering form changes based on the user's Tera type. + * Used by Ogerpon and Terapagos. + */ +export class SpeciesFormChangeTeraTrigger extends SpeciesFormChangeTrigger {} + +/** + * Class used for triggering form changes based on the user's lapsed Tera type. + * Used by Ogerpon and Terapagos. + */ +export class SpeciesFormChangeLapseTeraTrigger extends SpeciesFormChangeTrigger {} + +/** + * Class used for triggering form changes based on weather. + * Used by Castform and Cherrim. + */ +export class SpeciesFormChangeWeatherTrigger extends SpeciesFormChangeTrigger { + /** The ability that triggers the form change */ + public ability: AbilityId; + /** The list of weathers that trigger the form change */ + public weathers: WeatherType[]; + + constructor(ability: AbilityId, weathers: WeatherType[]) { + super(); + this.ability = ability; + this.weathers = weathers; + this.description = i18next.t("pokemonEvolutions:Forms.weather"); + } + + /** + * Checks if the Pokemon has the required ability and is in the correct weather while + * the weather or ability is also not suppressed. + * @param pokemon - The pokemon that is trying to do the form change + * @returns `true` if the Pokemon can change forms, `false` otherwise + */ + canChange(pokemon: Pokemon): boolean { + const currentWeather = globalScene.arena.weather?.weatherType ?? WeatherType.NONE; + const isWeatherSuppressed = globalScene.arena.weather?.isEffectSuppressed(); + const isAbilitySuppressed = pokemon.summonData.abilitySuppressed; + + return ( + !isAbilitySuppressed && + !isWeatherSuppressed && + pokemon.hasAbility(this.ability) && + this.weathers.includes(currentWeather) + ); + } +} + +/** + * Class used for reverting to the original form when the weather runs out + * or when the user loses the ability/is suppressed. + * Used by Castform and Cherrim. + */ +export class SpeciesFormChangeRevertWeatherFormTrigger extends SpeciesFormChangeTrigger { + /** The ability that triggers the form change*/ + public ability: AbilityId; + /** The list of weathers that will also trigger a form change to original form */ + public weathers: WeatherType[]; + + constructor(ability: AbilityId, weathers: WeatherType[]) { + super(); + this.ability = ability; + this.weathers = weathers; + this.description = i18next.t("pokemonEvolutions:Forms.weatherRevert"); + } + + /** + * Checks if the Pokemon has the required ability and the weather is one that will revert + * the Pokemon to its original form or the weather or ability is suppressed + * @param {Pokemon} pokemon the pokemon that is trying to do the form change + * @returns `true` if the Pokemon will revert to its original form, `false` otherwise + */ + canChange(pokemon: Pokemon): boolean { + if (pokemon.hasAbility(this.ability, false, true)) { + const currentWeather = globalScene.arena.weather?.weatherType ?? WeatherType.NONE; + const isWeatherSuppressed = globalScene.arena.weather?.isEffectSuppressed(); + const isAbilitySuppressed = pokemon.summonData.abilitySuppressed; + const summonDataAbility = pokemon.summonData.ability; + const isAbilityChanged = summonDataAbility !== this.ability && summonDataAbility !== AbilityId.NONE; + + if (this.weathers.includes(currentWeather) || isWeatherSuppressed || isAbilitySuppressed || isAbilityChanged) { + return true; + } + } + return false; + } +} + +export function getSpeciesFormChangeMessage(pokemon: Pokemon, formChange: SpeciesFormChange, preName: string): string { + const isMega = formChange.formKey.indexOf(SpeciesFormKey.MEGA) > -1; + const isGmax = formChange.formKey.indexOf(SpeciesFormKey.GIGANTAMAX) > -1; + const isEmax = formChange.formKey.indexOf(SpeciesFormKey.ETERNAMAX) > -1; + const isRevert = !isMega && formChange.formKey === pokemon.species.forms[0].formKey; + if (isMega) { + return i18next.t("battlePokemonForm:megaChange", { + preName, + pokemonName: pokemon.name, + }); + } + if (isGmax) { + return i18next.t("battlePokemonForm:gigantamaxChange", { + preName, + pokemonName: pokemon.name, + }); + } + if (isEmax) { + return i18next.t("battlePokemonForm:eternamaxChange", { + preName, + pokemonName: pokemon.name, + }); + } + if (isRevert) { + return i18next.t("battlePokemonForm:revertChange", { + pokemonName: getPokemonNameWithAffix(pokemon), + }); + } + if (pokemon.getAbility().id === AbilityId.DISGUISE) { + return i18next.t("battlePokemonForm:disguiseChange"); + } + return i18next.t("battlePokemonForm:formChange", { preName }); +} diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 36a8bbb0520..56dc649afac 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -7,7 +7,8 @@ import i18next from "i18next"; import type { AnySound } from "#app/battle-scene"; import { globalScene } from "#app/global-scene"; import type { GameMode } from "#app/game-mode"; -import { DexAttr, type StarterMoveset } from "#app/system/game-data"; +import type { StarterMoveset } from "#app/system/game-data"; +import { DexAttr } from "#enums/dex-attr"; import { isNullOrUndefined, capitalizeString, diff --git a/src/data/terrain.ts b/src/data/terrain.ts index 5b6063cee68..b3ee62ac2f9 100644 --- a/src/data/terrain.ts +++ b/src/data/terrain.ts @@ -1,8 +1,7 @@ import type Pokemon from "../field/pokemon"; import type Move from "./moves/move"; import { PokemonType } from "#enums/pokemon-type"; -import { ProtectAttr } from "./moves/move"; -import type { BattlerIndex } from "#app/battle"; +import type { BattlerIndex } from "#enums/battler-index"; import i18next from "i18next"; export enum TerrainType { @@ -55,7 +54,7 @@ export class Terrain { isMoveTerrainCancelled(user: Pokemon, targets: BattlerIndex[], move: Move): boolean { switch (this.terrainType) { case TerrainType.PSYCHIC: - if (!move.hasAttr(ProtectAttr)) { + if (!move.hasAttr("ProtectAttr")) { // Cancels move if the move has positive priority and targets a Pokemon grounded on the Psychic Terrain return ( move.getPriority(user) > 0 && diff --git a/src/data/trainers/TrainerPartyTemplate.ts b/src/data/trainers/TrainerPartyTemplate.ts index 86201589276..135fe669825 100644 --- a/src/data/trainers/TrainerPartyTemplate.ts +++ b/src/data/trainers/TrainerPartyTemplate.ts @@ -1,7 +1,7 @@ import { startingWave } from "#app/starting-wave"; import { globalScene } from "#app/global-scene"; import { PartyMemberStrength } from "#enums/party-member-strength"; -import { GameModes } from "#app/game-mode"; +import { GameModes } from "#enums/game-modes"; import { ClassicFixedBossWaves } from "#enums/fixed-boss-waves"; export class TrainerPartyTemplate { diff --git a/src/data/trainers/trainer-config.ts b/src/data/trainers/trainer-config.ts index 8e704b0b301..2f1f7ed07a8 100644 --- a/src/data/trainers/trainer-config.ts +++ b/src/data/trainers/trainer-config.ts @@ -1,12 +1,12 @@ import { globalScene } from "#app/global-scene"; import { modifierTypes } from "#app/modifier/modifier-type"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "../moves/pokemon-move"; import { toReadableString, isNullOrUndefined, randSeedItem, randSeedInt, randSeedIntRange } from "#app/utils/common"; import { pokemonEvolutions, pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { tmSpecies } from "#app/data/balance/tms"; import { doubleBattleDialogue } from "#app/data/dialogue"; -import { TrainerVariant } from "#app/field/trainer"; +import { TrainerVariant } from "#enums/trainer-variant"; import { getIsInitialized, initI18n } from "#app/plugins/i18n"; import i18next from "i18next"; import { Gender } from "#app/data/gender"; diff --git a/src/data/weather.ts b/src/data/weather.ts index 3bd2e38824d..822e5aa8303 100644 --- a/src/data/weather.ts +++ b/src/data/weather.ts @@ -4,7 +4,6 @@ import { getPokemonNameWithAffix } from "../messages"; import type Pokemon from "../field/pokemon"; import { PokemonType } from "#enums/pokemon-type"; import type Move from "./moves/move"; -import { AttackMove } from "./moves/move"; import { randSeedInt } from "#app/utils/common"; import { SuppressWeatherEffectAbAttr } from "./abilities/ability"; import { TerrainType, getTerrainName } from "./terrain"; @@ -95,9 +94,9 @@ export class Weather { switch (this.weatherType) { case WeatherType.HARSH_SUN: - return move instanceof AttackMove && moveType === PokemonType.WATER; + return move.is("AttackMove") && moveType === PokemonType.WATER; case WeatherType.HEAVY_RAIN: - return move instanceof AttackMove && moveType === PokemonType.FIRE; + return move.is("AttackMove") && moveType === PokemonType.FIRE; } return false; diff --git a/src/enums/ability-attr.ts b/src/enums/ability-attr.ts new file mode 100644 index 00000000000..5f7d107f2d1 --- /dev/null +++ b/src/enums/ability-attr.ts @@ -0,0 +1,11 @@ +/** + * Not to be confused with an Ability Attribute. + * This is an object literal storing the slot that an ability can occupy. + */ +export const AbilityAttr = Object.freeze({ + ABILITY_1: 1, + ABILITY_2: 2, + ABILITY_HIDDEN: 4, +}); + +export type AbilityAttr = typeof AbilityAttr[keyof typeof AbilityAttr]; \ No newline at end of file diff --git a/src/enums/ai-type.ts b/src/enums/ai-type.ts new file mode 100644 index 00000000000..13931172a4a --- /dev/null +++ b/src/enums/ai-type.ts @@ -0,0 +1,5 @@ +export enum AiType { + RANDOM, + SMART_RANDOM, + SMART +} diff --git a/src/enums/arena-tag-side.ts b/src/enums/arena-tag-side.ts new file mode 100644 index 00000000000..3e326ce158a --- /dev/null +++ b/src/enums/arena-tag-side.ts @@ -0,0 +1,5 @@ +export enum ArenaTagSide { + BOTH, + PLAYER, + ENEMY +} diff --git a/src/enums/battler-index.ts b/src/enums/battler-index.ts new file mode 100644 index 00000000000..32b1684c86c --- /dev/null +++ b/src/enums/battler-index.ts @@ -0,0 +1,7 @@ +export enum BattlerIndex { + ATTACKER = -1, + PLAYER, + PLAYER_2, + ENEMY, + ENEMY_2 +} diff --git a/src/enums/battler-tag-lapse-type.ts b/src/enums/battler-tag-lapse-type.ts new file mode 100644 index 00000000000..355a084148b --- /dev/null +++ b/src/enums/battler-tag-lapse-type.ts @@ -0,0 +1,12 @@ +export enum BattlerTagLapseType { + FAINT, + MOVE, + PRE_MOVE, + AFTER_MOVE, + MOVE_EFFECT, + TURN_END, + HIT, + /** Tag lapses AFTER_HIT, applying its effects even if the user faints */ + AFTER_HIT, + CUSTOM +} diff --git a/src/enums/challenge-type.ts b/src/enums/challenge-type.ts new file mode 100644 index 00000000000..d9b1fce3e6e --- /dev/null +++ b/src/enums/challenge-type.ts @@ -0,0 +1,69 @@ +/** + * An enum for all the challenge types. The parameter entries on these describe the + * parameters to use when calling the applyChallenges function. + */ +export enum ChallengeType { + /** + * Challenges which modify what starters you can choose + * @see {@link Challenge.applyStarterChoice} + */ + STARTER_CHOICE, + /** + * Challenges which modify how many starter points you have + * @see {@link Challenge.applyStarterPoints} + */ + STARTER_POINTS, + /** + * Challenges which modify how many starter points you have + * @see {@link Challenge.applyStarterPointCost} + */ + STARTER_COST, + /** + * Challenges which modify your starters in some way + * @see {@link Challenge.applyStarterModify} + */ + STARTER_MODIFY, + /** + * Challenges which limit which pokemon you can have in battle. + * @see {@link Challenge.applyPokemonInBattle} + */ + POKEMON_IN_BATTLE, + /** + * Adds or modifies the fixed battles in a run + * @see {@link Challenge.applyFixedBattle} + */ + FIXED_BATTLES, + /** + * Modifies the effectiveness of Type matchups in battle + * @see {@linkcode Challenge.applyTypeEffectiveness} + */ + TYPE_EFFECTIVENESS, + /** + * Modifies what level the AI pokemon are. UNIMPLEMENTED. + */ + AI_LEVEL, + /** + * Modifies how many move slots the AI has. UNIMPLEMENTED. + */ + AI_MOVE_SLOTS, + /** + * Modifies if a pokemon has its passive. UNIMPLEMENTED. + */ + PASSIVE_ACCESS, + /** + * Modifies the game mode settings in some way. UNIMPLEMENTED. + */ + GAME_MODE_MODIFY, + /** + * Modifies what level AI pokemon can access a move. UNIMPLEMENTED. + */ + MOVE_ACCESS, + /** + * Modifies what weight AI pokemon have when generating movesets. UNIMPLEMENTED. + */ + MOVE_WEIGHT, + /** + * Modifies what the pokemon stats for Flip Stat Mode. + */ + FLIP_STAT +} diff --git a/src/enums/command.ts b/src/enums/command.ts new file mode 100644 index 00000000000..4cd626bb066 --- /dev/null +++ b/src/enums/command.ts @@ -0,0 +1,7 @@ +export enum Command { + FIGHT = 0, + BALL, + POKEMON, + RUN, + TERA +} diff --git a/src/enums/dex-attr.ts b/src/enums/dex-attr.ts new file mode 100644 index 00000000000..ee5ceb43ef2 --- /dev/null +++ b/src/enums/dex-attr.ts @@ -0,0 +1,11 @@ +export const DexAttr = Object.freeze({ + NON_SHINY: 1n, + SHINY: 2n, + MALE: 4n, + FEMALE: 8n, + DEFAULT_VARIANT: 16n, + VARIANT_2: 32n, + VARIANT_3: 64n, + DEFAULT_FORM: 128n, +}); +export type DexAttr = typeof DexAttr[keyof typeof DexAttr]; diff --git a/src/enums/field-position.ts b/src/enums/field-position.ts new file mode 100644 index 00000000000..5b7f9c6c570 --- /dev/null +++ b/src/enums/field-position.ts @@ -0,0 +1,5 @@ +export enum FieldPosition { + CENTER, + LEFT, + RIGHT +} diff --git a/src/enums/form-change-item.ts b/src/enums/form-change-item.ts new file mode 100644 index 00000000000..15620eafd0a --- /dev/null +++ b/src/enums/form-change-item.ts @@ -0,0 +1,119 @@ +export enum FormChangeItem { + NONE, + + ABOMASITE, + ABSOLITE, + AERODACTYLITE, + AGGRONITE, + ALAKAZITE, + ALTARIANITE, + AMPHAROSITE, + AUDINITE, + BANETTITE, + BEEDRILLITE, + BLASTOISINITE, + BLAZIKENITE, + CAMERUPTITE, + CHARIZARDITE_X, + CHARIZARDITE_Y, + DIANCITE, + GALLADITE, + GARCHOMPITE, + GARDEVOIRITE, + GENGARITE, + GLALITITE, + GYARADOSITE, + HERACRONITE, + HOUNDOOMINITE, + KANGASKHANITE, + LATIASITE, + LATIOSITE, + LOPUNNITE, + LUCARIONITE, + MANECTITE, + MAWILITE, + MEDICHAMITE, + METAGROSSITE, + MEWTWONITE_X, + MEWTWONITE_Y, + PIDGEOTITE, + PINSIRITE, + RAYQUAZITE, + SABLENITE, + SALAMENCITE, + SCEPTILITE, + SCIZORITE, + SHARPEDONITE, + SLOWBRONITE, + STEELIXITE, + SWAMPERTITE, + TYRANITARITE, + VENUSAURITE, + + BLUE_ORB = 50, + RED_ORB, + ADAMANT_CRYSTAL, + LUSTROUS_GLOBE, + GRISEOUS_CORE, + REVEAL_GLASS, + MAX_MUSHROOMS, + DARK_STONE, + LIGHT_STONE, + PRISON_BOTTLE, + RUSTED_SWORD, + RUSTED_SHIELD, + ICY_REINS_OF_UNITY, + SHADOW_REINS_OF_UNITY, + ULTRANECROZIUM_Z, + + SHARP_METEORITE = 100, + HARD_METEORITE, + SMOOTH_METEORITE, + GRACIDEA, + SHOCK_DRIVE, + BURN_DRIVE, + CHILL_DRIVE, + DOUSE_DRIVE, + N_SOLARIZER, + N_LUNARIZER, + WELLSPRING_MASK, + HEARTHFLAME_MASK, + CORNERSTONE_MASK, + FIST_PLATE, + SKY_PLATE, + TOXIC_PLATE, + EARTH_PLATE, + STONE_PLATE, + INSECT_PLATE, + SPOOKY_PLATE, + IRON_PLATE, + FLAME_PLATE, + SPLASH_PLATE, + MEADOW_PLATE, + ZAP_PLATE, + MIND_PLATE, + ICICLE_PLATE, + DRACO_PLATE, + DREAD_PLATE, + PIXIE_PLATE, + BLANK_PLATE,// TODO: Find a potential use for this + LEGEND_PLATE,// TODO: Find a potential use for this + FIGHTING_MEMORY, + FLYING_MEMORY, + POISON_MEMORY, + GROUND_MEMORY, + ROCK_MEMORY, + BUG_MEMORY, + GHOST_MEMORY, + STEEL_MEMORY, + FIRE_MEMORY, + WATER_MEMORY, + GRASS_MEMORY, + ELECTRIC_MEMORY, + PSYCHIC_MEMORY, + ICE_MEMORY, + DRAGON_MEMORY, + DARK_MEMORY, + FAIRY_MEMORY, + NORMAL_MEMORY +} diff --git a/src/enums/game-modes.ts b/src/enums/game-modes.ts new file mode 100644 index 00000000000..837b634621c --- /dev/null +++ b/src/enums/game-modes.ts @@ -0,0 +1,7 @@ +export enum GameModes { + CLASSIC, + ENDLESS, + SPLICED_ENDLESS, + DAILY, + CHALLENGE +} diff --git a/src/enums/hit-result.ts b/src/enums/hit-result.ts new file mode 100644 index 00000000000..3e62587dd6c --- /dev/null +++ b/src/enums/hit-result.ts @@ -0,0 +1,15 @@ +export enum HitResult { + EFFECTIVE = 1, + SUPER_EFFECTIVE, + NOT_VERY_EFFECTIVE, + ONE_HIT_KO, + NO_EFFECT, + STATUS, + HEAL, + FAIL, + MISS, + INDIRECT, + IMMUNE, + CONFUSION, + INDIRECT_KO +} diff --git a/src/enums/learn-move-situation.ts b/src/enums/learn-move-situation.ts new file mode 100644 index 00000000000..9b329d0f3de --- /dev/null +++ b/src/enums/learn-move-situation.ts @@ -0,0 +1,8 @@ +export enum LearnMoveSituation { + MISC, + LEVEL_UP, + RELEARN, + EVOLUTION, + EVOLUTION_FUSED,// If fusionSpecies has Evolved + EVOLUTION_FUSED_BASE +} diff --git a/src/enums/learn-move-type.ts b/src/enums/learn-move-type.ts new file mode 100644 index 00000000000..442639c1bc7 --- /dev/null +++ b/src/enums/learn-move-type.ts @@ -0,0 +1,8 @@ +export enum LearnMoveType { + /** For learning a move via level-up, evolution, or other non-item-based event */ + LEARN_MOVE, + /** For learning a move via Memory Mushroom */ + MEMORY, + /** For learning a move via TM */ + TM +} diff --git a/src/enums/move-anims-common.ts b/src/enums/move-anims-common.ts new file mode 100644 index 00000000000..f21e4c8be4a --- /dev/null +++ b/src/enums/move-anims-common.ts @@ -0,0 +1,95 @@ +export enum AnimFrameTarget { + USER, + TARGET, + GRAPHIC +} + +export enum AnimFocus { + TARGET = 1, + USER, + USER_TARGET, + SCREEN +} + +export enum AnimBlendType { + NORMAL, + ADD, + SUBTRACT +} + +export enum ChargeAnim { + FLY_CHARGING = 1000, + BOUNCE_CHARGING, + DIG_CHARGING, + FUTURE_SIGHT_CHARGING, + DIVE_CHARGING, + SOLAR_BEAM_CHARGING, + SHADOW_FORCE_CHARGING, + SKULL_BASH_CHARGING, + FREEZE_SHOCK_CHARGING, + SKY_DROP_CHARGING, + SKY_ATTACK_CHARGING, + ICE_BURN_CHARGING, + DOOM_DESIRE_CHARGING, + RAZOR_WIND_CHARGING, + PHANTOM_FORCE_CHARGING, + GEOMANCY_CHARGING, + SHADOW_BLADE_CHARGING, + SOLAR_BLADE_CHARGING, + BEAK_BLAST_CHARGING, + METEOR_BEAM_CHARGING, + ELECTRO_SHOT_CHARGING +} + +export enum CommonAnim { + USE_ITEM = 2000, + HEALTH_UP, + TERASTALLIZE, + POISON = 2010, + TOXIC, + PARALYSIS, + SLEEP, + FROZEN, + BURN, + CONFUSION, + ATTRACT, + BIND, + WRAP, + CURSE_NO_GHOST, + LEECH_SEED, + FIRE_SPIN, + PROTECT, + COVET, + WHIRLPOOL, + BIDE, + SAND_TOMB, + QUICK_GUARD, + WIDE_GUARD, + CURSE, + MAGMA_STORM, + CLAMP, + SNAP_TRAP, + THUNDER_CAGE, + INFESTATION, + ORDER_UP_CURLY, + ORDER_UP_DROOPY, + ORDER_UP_STRETCHY, + RAGING_BULL_FIRE, + RAGING_BULL_WATER, + SALT_CURE, + POWDER, + SUNNY = 2100, + RAIN, + SANDSTORM, + HAIL, + SNOW, + WIND, + HEAVY_RAIN, + HARSH_SUN, + STRONG_WINDS, + MISTY_TERRAIN = 2110, + ELECTRIC_TERRAIN, + GRASSY_TERRAIN, + PSYCHIC_TERRAIN, + LOCK_ON = 2120 +} diff --git a/src/enums/move-result.ts b/src/enums/move-result.ts new file mode 100644 index 00000000000..d402f5b1aed --- /dev/null +++ b/src/enums/move-result.ts @@ -0,0 +1,7 @@ +export enum MoveResult { + PENDING, + SUCCESS, + FAIL, + MISS, + OTHER +} diff --git a/src/enums/move-source-type.ts b/src/enums/move-source-type.ts new file mode 100644 index 00000000000..d9afb07e7f7 --- /dev/null +++ b/src/enums/move-source-type.ts @@ -0,0 +1,12 @@ +/** + * Used for challenge types that modify movesets, these denote the various sources of moves for pokemon. + */ +export enum MoveSourceType { + LEVEL_UP,// Currently unimplemented for move access + RELEARNER,// Relearner moves currently unimplemented + COMMON_TM, + GREAT_TM, + ULTRA_TM, + COMMON_EGG, + RARE_EGG +} diff --git a/src/enums/trainer-variant.ts b/src/enums/trainer-variant.ts new file mode 100644 index 00000000000..cd8d71cc1b9 --- /dev/null +++ b/src/enums/trainer-variant.ts @@ -0,0 +1,5 @@ +export enum TrainerVariant { + DEFAULT, + FEMALE, + DOUBLE +} diff --git a/src/events/arena.ts b/src/events/arena.ts index ad77289b76b..3b65506db98 100644 --- a/src/events/arena.ts +++ b/src/events/arena.ts @@ -1,4 +1,4 @@ -import type { ArenaTagSide } from "#app/data/arena-tag"; +import type { ArenaTagSide } from "#enums/arena-tag-side"; import type { ArenaTagType } from "#enums/arena-tag-type"; import type { TerrainType } from "#app/data/terrain"; import type { WeatherType } from "#enums/weather-type"; diff --git a/src/field/arena.ts b/src/field/arena.ts index 82a8afbedad..fffbf8dfa26 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -12,12 +12,13 @@ import { getLegendaryWeatherContinuesMessage, Weather, } from "#app/data/weather"; -import { CommonAnim } from "#app/data/battle-anims"; +import { CommonAnim } from "#enums/move-anims-common"; import type { PokemonType } from "#enums/pokemon-type"; import type Move from "#app/data/moves/move"; import type { ArenaTag } from "#app/data/arena-tag"; -import { ArenaTagSide, ArenaTrapTag, getArenaTag } from "#app/data/arena-tag"; -import type { BattlerIndex } from "#app/battle"; +import { ArenaTrapTag, getArenaTag } from "#app/data/arena-tag"; +import { ArenaTagSide } from "#enums/arena-tag-side"; +import type { BattlerIndex } from "#enums/battler-index"; import { Terrain, TerrainType } from "#app/data/terrain"; import { applyAbAttrs, @@ -37,7 +38,10 @@ import { SpeciesId } from "#enums/species-id"; import { TimeOfDay } from "#enums/time-of-day"; import { TrainerType } from "#enums/trainer-type"; import { AbilityId } from "#enums/ability-id"; -import { SpeciesFormChangeRevertWeatherFormTrigger, SpeciesFormChangeWeatherTrigger } from "#app/data/pokemon-forms"; +import { + SpeciesFormChangeRevertWeatherFormTrigger, + SpeciesFormChangeWeatherTrigger, +} from "#app/data/pokemon-forms/form-change-triggers"; import { WeatherType } from "#enums/weather-type"; import { FieldEffectModifier } from "#app/modifier/modifier"; diff --git a/src/field/damage-number-handler.ts b/src/field/damage-number-handler.ts index bfb85018dd6..b8b3ed76e18 100644 --- a/src/field/damage-number-handler.ts +++ b/src/field/damage-number-handler.ts @@ -1,9 +1,9 @@ import { TextStyle, addTextObject } from "../ui/text"; import type { DamageResult } from "./pokemon"; import type Pokemon from "./pokemon"; -import { HitResult } from "./pokemon"; +import { HitResult } from "#enums/hit-result"; import { formatStat, fixedInt } from "#app/utils/common"; -import type { BattlerIndex } from "../battle"; +import type { BattlerIndex } from "#enums/battler-index"; import { globalScene } from "#app/global-scene"; type TextAndShadowArr = [string | null, string | null]; diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 71b21076ae6..7032cd06131 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -9,36 +9,8 @@ import BattleInfo from "#app/ui/battle-info/battle-info"; import { EnemyBattleInfo } from "#app/ui/battle-info/enemy-battle-info"; import { PlayerBattleInfo } from "#app/ui/battle-info/player-battle-info"; import type Move from "#app/data/moves/move"; -import { - HighCritAttr, - HitsTagAttr, - applyMoveAttrs, - FixedDamageAttr, - VariableAtkAttr, - TypelessAttr, - CritOnlyAttr, - getMoveTargets, - OneHitKOAttr, - VariableMoveTypeAttr, - VariableDefAttr, - AttackMove, - ModifiedDamageAttr, - VariableMoveTypeMultiplierAttr, - IgnoreOpponentStatStagesAttr, - SacrificialAttr, - VariableMoveCategoryAttr, - CounterDamageAttr, - StatStageChangeAttr, - RechargeAttr, - IgnoreWeatherTypeDebuffAttr, - BypassBurnDamageReductionAttr, - SacrificialAttrOnHit, - OneHitKOAccuracyAttr, - RespectAttackTypeImmunityAttr, - CombinedPledgeStabBoostAttr, - VariableMoveTypeChartAttr, - HpSplitAttr, -} from "#app/data/moves/move"; +import { getMoveTargets } from "#app/data/moves/move-utils"; +import { applyMoveAttrs } from "#app/data/moves/apply-attrs"; import { allMoves } from "#app/data/data-lists"; import { MoveTarget } from "#enums/MoveTarget"; import { MoveCategory } from "#enums/MoveCategory"; @@ -116,7 +88,6 @@ import { import { reverseCompatibleTms, tmSpecies, tmPoolTiers } from "#app/data/balance/tms"; import { BattlerTag, - BattlerTagLapseType, EncoreTag, GroundedTag, HighestStatBoostTag, @@ -135,8 +106,10 @@ import { loadBattlerTag, type GrudgeTag, } from "../data/battler-tags"; +import { BattlerTagLapseType } from "#enums/battler-tag-lapse-type"; import { WeatherType } from "#enums/weather-type"; -import { ArenaTagSide, NoCritTag, WeakenMoveScreenTag } from "#app/data/arena-tag"; +import { NoCritTag, WeakenMoveScreenTag } from "#app/data/arena-tag"; +import { ArenaTagSide } from "#enums/arena-tag-side"; import type { SuppressAbilitiesTag } from "#app/data/arena-tag"; import type { Ability } from "#app/data/abilities/ability-class"; import type { AbAttr } from "#app/data/abilities/ab-attrs/ab-attr"; @@ -195,7 +168,7 @@ import { } from "#app/data/abilities/ability"; import { allAbilities } from "#app/data/data-lists"; import type PokemonData from "#app/system/pokemon-data"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { UiMode } from "#enums/ui-mode"; import type { PartyOption } from "#app/ui/party-ui-handler"; import PartyUiHandler, { PartyUiMode } from "#app/ui/party-ui-handler"; @@ -204,7 +177,7 @@ import type { LevelMoves } from "#app/data/balance/pokemon-level-moves"; import { EVOLVE_MOVE, RELEARN_MOVE } from "#app/data/balance/pokemon-level-moves"; import { achvs } from "#app/system/achv"; import type { StarterDataEntry, StarterMoveset } from "#app/system/game-data"; -import { DexAttr } from "#app/system/game-data"; +import { DexAttr } from "#enums/dex-attr"; import { QuantizerCelebi, argbFromRgba, rgbaFromArgb } from "@material/material-color-utilities"; import { getNatureStatMultiplier } from "#app/data/nature"; import type { SpeciesFormChange } from "#app/data/pokemon-forms"; @@ -213,14 +186,15 @@ import { SpeciesFormChangeLapseTeraTrigger, SpeciesFormChangeMoveLearnedTrigger, SpeciesFormChangePostMoveTrigger, -} from "#app/data/pokemon-forms"; +} from "#app/data/pokemon-forms/form-change-triggers"; import { TerrainType } from "#app/data/terrain"; import type { TrainerSlot } from "#enums/trainer-slot"; import Overrides from "#app/overrides"; import i18next from "i18next"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { ModifierTier } from "#app/modifier/modifier-tier"; -import { applyChallenges, ChallengeType } from "#app/data/challenge"; +import { applyChallenges } from "#app/data/challenge"; +import { ChallengeType } from "#enums/challenge-type"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattleSpec } from "#enums/battle-spec"; @@ -249,21 +223,12 @@ import { doShinySparkleAnim } from "#app/field/anims"; import { MoveFlags } from "#enums/MoveFlags"; import { timedEventManager } from "#app/global-event-manager"; import { loadMoveAnimations } from "#app/sprites/pokemon-asset-loader"; - -export enum LearnMoveSituation { - MISC, - LEVEL_UP, - RELEARN, - EVOLUTION, - EVOLUTION_FUSED, // If fusionSpecies has Evolved - EVOLUTION_FUSED_BASE, // If fusion's base species has Evolved -} - -export enum FieldPosition { - CENTER, - LEFT, - RIGHT, -} +import { FieldPosition } from "#enums/field-position"; +import { LearnMoveSituation } from "#enums/learn-move-situation"; +import { HitResult } from "#enums/hit-result"; +import { AiType } from "#enums/ai-type"; +import type { MoveResult } from "#enums/move-result"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; /** Base typeclass for damage parameter methods, used for DRY */ type damageParams = { @@ -1435,7 +1400,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { */ getCritStage(source: Pokemon, move: Move): number { const critStage = new NumberHolder(0); - applyMoveAttrs(HighCritAttr, source, this, move, critStage); + applyMoveAttrs("HighCritAttr", source, this, move, critStage); globalScene.applyModifiers(CritBoosterModifier, source.isPlayer(), source, critStage); globalScene.applyModifiers(TempCritBoosterModifier, source.isPlayer(), critStage); applyAbAttrs(BonusCritAbAttr, source, null, false, critStage); @@ -1461,7 +1426,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { */ getMoveCategory(target: Pokemon, move: Move): MoveCategory { const moveCategory = new NumberHolder(move.category); - applyMoveAttrs(VariableMoveCategoryAttr, this, target, move, moveCategory); + applyMoveAttrs("VariableMoveCategoryAttr", this, target, move, moveCategory); return moveCategory.value; } @@ -2356,7 +2321,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { public getMoveType(move: Move, simulated = true): PokemonType { const moveTypeHolder = new NumberHolder(move.type); - applyMoveAttrs(VariableMoveTypeAttr, this, null, move, moveTypeHolder); + applyMoveAttrs("VariableMoveTypeAttr", this, null, move, moveTypeHolder); applyPreAttackAbAttrs(MoveTypeChangeAbAttr, this, null, move, simulated, moveTypeHolder); // If the user is terastallized and the move is tera blast, or tera starstorm that is stellar type, @@ -2400,18 +2365,18 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return this.turnData?.moveEffectiveness; } - if (move.hasAttr(TypelessAttr)) { + if (move.hasAttr("TypelessAttr")) { return 1; } const moveType = source.getMoveType(move); const typeMultiplier = new NumberHolder( - move.category !== MoveCategory.STATUS || move.hasAttr(RespectAttackTypeImmunityAttr) + move.category !== MoveCategory.STATUS || move.hasAttr("RespectAttackTypeImmunityAttr") ? this.getAttackTypeEffectiveness(moveType, source, false, simulated, move, useIllusion) : 1, ); - applyMoveAttrs(VariableMoveTypeMultiplierAttr, source, this, move, typeMultiplier); + applyMoveAttrs("VariableMoveTypeMultiplierAttr", source, this, move, typeMultiplier); if (this.getTypes(true, true).find(t => move.isTypeImmune(source, this, t))) { typeMultiplier.value = 0; } @@ -2438,7 +2403,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const immuneTags = this.findTags(tag => tag instanceof TypeImmuneTag && tag.immuneType === moveType); for (const tag of immuneTags) { - if (move && !move.getAttrs(HitsTagAttr).some(attr => attr.tagType === tag.tagType)) { + if (move && !move.getAttrs("HitsTagAttr").some(attr => attr.tagType === tag.tagType)) { typeMultiplier.value = 0; break; } @@ -2494,7 +2459,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const multiplier = new NumberHolder(getTypeDamageMultiplier(moveType, defType)); applyChallenges(ChallengeType.TYPE_EFFECTIVENESS, multiplier); if (move) { - applyMoveAttrs(VariableMoveTypeChartAttr, null, this, move, multiplier, defType); + applyMoveAttrs("VariableMoveTypeChartAttr", null, this, move, multiplier, defType); } if (source) { const ignoreImmunity = new BooleanHolder(false); @@ -3130,24 +3095,26 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // Bosses never get self ko moves or Pain Split if (this.isBoss()) { - movePool = movePool.filter(m => !allMoves[m[0]].hasAttr(SacrificialAttr) && !allMoves[m[0]].hasAttr(HpSplitAttr)); + movePool = movePool.filter( + m => !allMoves[m[0]].hasAttr("SacrificialAttr") && !allMoves[m[0]].hasAttr("HpSplitAttr"), + ); } // No one gets Memento or Final Gambit - movePool = movePool.filter(m => !allMoves[m[0]].hasAttr(SacrificialAttrOnHit)); + movePool = movePool.filter(m => !allMoves[m[0]].hasAttr("SacrificialAttrOnHit")); if (this.hasTrainer()) { // Trainers never get OHKO moves - movePool = movePool.filter(m => !allMoves[m[0]].hasAttr(OneHitKOAttr)); + movePool = movePool.filter(m => !allMoves[m[0]].hasAttr("OneHitKOAttr")); // Half the weight of self KO moves - movePool = movePool.map(m => [m[0], m[1] * (allMoves[m[0]].hasAttr(SacrificialAttr) ? 0.5 : 1)]); + movePool = movePool.map(m => [m[0], m[1] * (allMoves[m[0]].hasAttr("SacrificialAttr") ? 0.5 : 1)]); // Trainers get a weight bump to stat buffing moves movePool = movePool.map(m => [ m[0], - m[1] * (allMoves[m[0]].getAttrs(StatStageChangeAttr).some(a => a.stages > 1 && a.selfTarget) ? 1.25 : 1), + m[1] * (allMoves[m[0]].getAttrs("StatStageChangeAttr").some(a => a.stages > 1 && a.selfTarget) ? 1.25 : 1), ]); // Trainers get a weight decrease to multiturn moves movePool = movePool.map(m => [ m[0], - m[1] * (!!allMoves[m[0]].isChargingMove() || !!allMoves[m[0]].hasAttr(RechargeAttr) ? 0.7 : 1), + m[1] * (!!allMoves[m[0]].isChargingMove() || !!allMoves[m[0]].hasAttr("RechargeAttr") ? 0.7 : 1), ]); } @@ -3214,7 +3181,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { !this.moveset.some( mo => m[0] === mo.moveId || - (allMoves[m[0]].hasAttr(SacrificialAttr) && mo.getMove().hasAttr(SacrificialAttr)), // Only one self-KO move allowed + (allMoves[m[0]].hasAttr("SacrificialAttr") && mo.getMove().hasAttr("SacrificialAttr")), // Only one self-KO move allowed ), ) .map(m => { @@ -3243,7 +3210,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { !this.moveset.some( mo => m[0] === mo.moveId || - (allMoves[m[0]].hasAttr(SacrificialAttr) && mo.getMove().hasAttr(SacrificialAttr)), // Only one self-KO move allowed + (allMoves[m[0]].hasAttr("SacrificialAttr") && mo.getMove().hasAttr("SacrificialAttr")), // Only one self-KO move allowed ), ); } @@ -3451,7 +3418,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { applyAbAttrs(IgnoreOpponentStatStagesAbAttr, opponent, null, simulated, stat, ignoreStatStage); } if (move) { - applyMoveAttrs(IgnoreOpponentStatStagesAttr, this, opponent, move, ignoreStatStage); + applyMoveAttrs("IgnoreOpponentStatStagesAttr", this, opponent, move, ignoreStatStage); } } @@ -3476,7 +3443,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @returns The calculated accuracy multiplier. */ getAccuracyMultiplier(target: Pokemon, sourceMove: Move): number { - const isOhko = sourceMove.hasAttr(OneHitKOAccuracyAttr); + const isOhko = sourceMove.hasAttr("OneHitKOAccuracyAttr"); if (isOhko) { return 1; } @@ -3489,7 +3456,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { applyAbAttrs(IgnoreOpponentStatStagesAbAttr, target, null, false, Stat.ACC, ignoreAccStatStage); applyAbAttrs(IgnoreOpponentStatStagesAbAttr, this, null, false, Stat.EVA, ignoreEvaStatStage); - applyMoveAttrs(IgnoreOpponentStatStagesAttr, this, target, sourceMove, ignoreEvaStatStage); + applyMoveAttrs("IgnoreOpponentStatStagesAttr", this, target, sourceMove, ignoreEvaStatStage); globalScene.applyModifiers(TempStatStageBoosterModifier, this.isPlayer(), Stat.ACC, userAccStage); @@ -3572,7 +3539,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { simulated, ), ); - applyMoveAttrs(VariableAtkAttr, source, this, move, sourceAtk); + applyMoveAttrs("VariableAtkAttr", source, this, move, sourceAtk); /** * This Pokemon's defensive stat for the given move's category. @@ -3590,7 +3557,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { simulated, ), ); - applyMoveAttrs(VariableDefAttr, source, this, move, targetDef); + applyMoveAttrs("VariableDefAttr", source, this, move, targetDef); /** * The attack's base damage, as determined by the source's level, move power @@ -3617,7 +3584,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { */ calculateStabMultiplier(source: Pokemon, move: Move, ignoreSourceAbility: boolean, simulated: boolean): number { // If the move has the Typeless attribute, it doesn't get STAB (e.g. struggle) - if (move.hasAttr(TypelessAttr)) { + if (move.hasAttr("TypelessAttr")) { return 1; } const sourceTypes = source.getTypes(); @@ -3629,7 +3596,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { stabMultiplier.value += 0.5; } - applyMoveAttrs(CombinedPledgeStabBoostAttr, source, this, move, stabMultiplier); + applyMoveAttrs("CombinedPledgeStabBoostAttr", source, this, move, stabMultiplier); if (!ignoreSourceAbility) { applyAbAttrs(StabBoostAbAttr, source, null, simulated, stabMultiplier); @@ -3678,7 +3645,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const defendingSide = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; const variableCategory = new NumberHolder(move.category); - applyMoveAttrs(VariableMoveCategoryAttr, source, this, move, variableCategory); + applyMoveAttrs("VariableMoveCategoryAttr", source, this, move, variableCategory); const moveCategory = variableCategory.value as MoveCategory; /** The move's type after type-changing effects are applied */ @@ -3703,7 +3670,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const arenaAttackTypeMultiplier = new NumberHolder( globalScene.arena.getAttackTypeMultiplier(moveType, source.isGrounded()), ); - applyMoveAttrs(IgnoreWeatherTypeDebuffAttr, source, this, move, arenaAttackTypeMultiplier); + applyMoveAttrs("IgnoreWeatherTypeDebuffAttr", source, this, move, arenaAttackTypeMultiplier); const isTypeImmune = typeMultiplier * arenaAttackTypeMultiplier.value === 0; @@ -3717,7 +3684,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // If the attack deals fixed damage, return a result with that much damage const fixedDamage = new NumberHolder(0); - applyMoveAttrs(FixedDamageAttr, source, this, move, fixedDamage); + applyMoveAttrs("FixedDamageAttr", source, this, move, fixedDamage); if (fixedDamage.value) { const multiLensMultiplier = new NumberHolder(1); globalScene.applyModifiers( @@ -3739,7 +3706,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // If the attack is a one-hit KO move, return a result with damage equal to this Pokemon's HP const isOneHitKo = new BooleanHolder(false); - applyMoveAttrs(OneHitKOAttr, source, this, move, isOneHitKo); + applyMoveAttrs("OneHitKOAttr", source, this, move, isOneHitKo); if (isOneHitKo.value) { return { cancelled: false, @@ -3816,7 +3783,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { isPhysical && source.status && source.status.effect === StatusEffect.BURN && - !move.hasAttr(BypassBurnDamageReductionAttr) + !move.hasAttr("BypassBurnDamageReductionAttr") ) { const burnDamageReductionCancelled = new BooleanHolder(false); if (!ignoreSourceAbility) { @@ -3850,7 +3817,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { */ const hitsTagMultiplier = new NumberHolder(1); move - .getAttrs(HitsTagAttr) + .getAttrs("HitsTagAttr") .filter(hta => hta.doubleDamage) .forEach(hta => { if (this.getTag(hta.tagType)) { @@ -3907,7 +3874,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } // This attribute may modify damage arbitrarily, so be careful about changing its order of application. - applyMoveAttrs(ModifiedDamageAttr, source, this, move, damage); + applyMoveAttrs("ModifiedDamageAttr", source, this, move, damage); if (this.isFullHp() && !ignoreAbility) { applyPreDefendAbAttrs(PreDefendFullHpEndureAbAttr, this, source, move, cancelled, false, damage); @@ -3943,7 +3910,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { getCriticalHitResult(source: Pokemon, move: Move, simulated = true): boolean { const defendingSide = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; const noCritTag = globalScene.arena.getTagOnSide(NoCritTag, defendingSide); - if (noCritTag || Overrides.NEVER_CRIT_OVERRIDE || move.hasAttr(FixedDamageAttr)) { + if (noCritTag || Overrides.NEVER_CRIT_OVERRIDE || move.hasAttr("FixedDamageAttr")) { return false; } const isCritical = new BooleanHolder(false); @@ -3951,7 +3918,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (source.getTag(BattlerTagType.ALWAYS_CRIT)) { isCritical.value = true; } - applyMoveAttrs(CritOnlyAttr, source, this, move, isCritical); + applyMoveAttrs("CritOnlyAttr", source, this, move, isCritical); applyAbAttrs(ConditionalCritAbAttr, source, null, simulated, isCritical, this, move); if (!isCritical.value) { const critChance = [24, 8, 2, 1][Math.max(0, Math.min(this.getCritStage(source, move), 3))]; @@ -6272,7 +6239,7 @@ export class EnemyPokemon extends Pokemon { .targets.map(ind => fieldPokemon[ind]) .filter(p => this.isPlayer() !== p.isPlayer()); // Only considers critical hits for crit-only moves or when this Pokemon is under the effect of Laser Focus - const isCritical = move.hasAttr(CritOnlyAttr) || !!this.getTag(BattlerTagType.ALWAYS_CRIT); + const isCritical = move.hasAttr("CritOnlyAttr") || !!this.getTag(BattlerTagType.ALWAYS_CRIT); return ( move.category !== MoveCategory.STATUS && @@ -6341,7 +6308,7 @@ export class EnemyPokemon extends Pokemon { ![MoveId.SUCKER_PUNCH, MoveId.UPPER_HAND, MoveId.THUNDERCLAP].includes(move.id) ) { targetScore = -20; - } else if (move instanceof AttackMove) { + } else if (move.is("AttackMove")) { /** * Attack moves are given extra multipliers to their base benefit score based on * the move's type effectiveness against the target and whether the move is a STAB move. @@ -6462,7 +6429,7 @@ export class EnemyPokemon extends Pokemon { if (!sortedBenefitScores.length) { // Set target to BattlerIndex.ATTACKER when using a counter move // This is the same as when the player does so - if (move.hasAttr(CounterDamageAttr)) { + if (move.hasAttr("CounterDamageAttr")) { return [BattlerIndex.ATTACKER]; } @@ -6945,36 +6912,6 @@ export class PokemonTurnData { public berriesEaten: BerryType[] = []; } -export enum AiType { - RANDOM, - SMART_RANDOM, - SMART, -} - -export enum MoveResult { - PENDING, - SUCCESS, - FAIL, - MISS, - OTHER, -} - -export enum HitResult { - EFFECTIVE = 1, - SUPER_EFFECTIVE, - NOT_VERY_EFFECTIVE, - ONE_HIT_KO, - NO_EFFECT, - STATUS, - HEAL, - FAIL, - MISS, - INDIRECT, - IMMUNE, - CONFUSION, - INDIRECT_KO, -} - export type DamageResult = | HitResult.EFFECTIVE | HitResult.SUPER_EFFECTIVE @@ -6993,91 +6930,3 @@ export interface DamageCalculationResult { /** The damage dealt by the move */ damage: number; } - -/** - * Wrapper class for the {@linkcode Move} class for Pokemon to interact with. - * These are the moves assigned to a {@linkcode Pokemon} object. - * It links to {@linkcode Move} class via the move ID. - * Compared to {@linkcode Move}, this class also tracks things like - * PP Ups recieved, PP used, etc. - * @see {@linkcode isUsable} - checks if move is restricted, out of PP, or not implemented. - * @see {@linkcode getMove} - returns {@linkcode Move} object by looking it up via ID. - * @see {@linkcode usePp} - removes a point of PP from the move. - * @see {@linkcode getMovePp} - returns amount of PP a move currently has. - * @see {@linkcode getPpRatio} - returns the current PP amount / max PP amount. - * @see {@linkcode getName} - returns name of {@linkcode Move}. - **/ -export class PokemonMove { - public moveId: MoveId; - public ppUsed: number; - public ppUp: number; - public virtual: boolean; - - /** - * If defined and nonzero, overrides the maximum PP of the move (e.g., due to move being copied by Transform). - * This also nullifies all effects of `ppUp`. - */ - public maxPpOverride?: number; - - constructor(moveId: MoveId, ppUsed = 0, ppUp = 0, virtual = false, maxPpOverride?: number) { - this.moveId = moveId; - this.ppUsed = ppUsed; - this.ppUp = ppUp; - this.virtual = virtual; - this.maxPpOverride = maxPpOverride; - } - - /** - * Checks whether the move can be selected or performed by a Pokemon, without consideration for the move's targets. - * The move is unusable if it is out of PP, restricted by an effect, or unimplemented. - * - * @param pokemon - {@linkcode Pokemon} that would be using this move - * @param ignorePp - If `true`, skips the PP check - * @param ignoreRestrictionTags - If `true`, skips the check for move restriction tags (see {@link MoveRestrictionBattlerTag}) - * @returns `true` if the move can be selected and used by the Pokemon, otherwise `false`. - */ - isUsable(pokemon: Pokemon, ignorePp = false, ignoreRestrictionTags = false): boolean { - if (this.moveId && !ignoreRestrictionTags && pokemon.isMoveRestricted(this.moveId, pokemon)) { - return false; - } - - if (this.getMove().name.endsWith(" (N)")) { - return false; - } - - return ignorePp || this.ppUsed < this.getMovePp() || this.getMove().pp === -1; - } - - getMove(): Move { - return allMoves[this.moveId]; - } - - /** - * Sets {@link ppUsed} for this move and ensures the value does not exceed {@link getMovePp} - * @param count Amount of PP to use - */ - usePp(count = 1) { - this.ppUsed = Math.min(this.ppUsed + count, this.getMovePp()); - } - - getMovePp(): number { - return this.maxPpOverride || this.getMove().pp + this.ppUp * toDmgValue(this.getMove().pp / 5); - } - - getPpRatio(): number { - return 1 - this.ppUsed / this.getMovePp(); - } - - getName(): string { - return this.getMove().name; - } - - /** - * Copies an existing move or creates a valid {@linkcode PokemonMove} object from json representing one - * @param source The data for the move to copy; can be a {@linkcode PokemonMove} or JSON object representing one - * @returns A valid {@linkcode PokemonMove} object - */ - static loadMove(source: PokemonMove | any): PokemonMove { - return new PokemonMove(source.moveId, source.ppUsed, source.ppUp, source.virtual, source.maxPpOverride); - } -} diff --git a/src/field/trainer.ts b/src/field/trainer.ts index 244a23185da..8d950b08507 100644 --- a/src/field/trainer.ts +++ b/src/field/trainer.ts @@ -13,19 +13,15 @@ import { TeraAIMode } from "#enums/tera-ai-mode"; import type { EnemyPokemon } from "#app/field/pokemon"; import { randSeedWeightedItem, randSeedItem, randSeedInt } from "#app/utils/common"; import type { PersistentModifier } from "#app/modifier/modifier"; -import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; +import { ArenaTrapTag } from "#app/data/arena-tag"; +import { ArenaTagSide } from "#enums/arena-tag-side"; import { getIsInitialized, initI18n } from "#app/plugins/i18n"; import i18next from "i18next"; import { PartyMemberStrength } from "#enums/party-member-strength"; import { SpeciesId } from "#enums/species-id"; import { TrainerType } from "#enums/trainer-type"; import { signatureSpecies } from "#app/data/balance/signature-species"; - -export enum TrainerVariant { - DEFAULT, - FEMALE, - DOUBLE, -} +import { TrainerVariant } from "#enums/trainer-variant"; export default class Trainer extends Phaser.GameObjects.Container { public config: TrainerConfig; diff --git a/src/game-mode.ts b/src/game-mode.ts index 7ad8a6a83e9..a6fc8195175 100644 --- a/src/game-mode.ts +++ b/src/game-mode.ts @@ -2,7 +2,8 @@ import i18next from "i18next"; import type { FixedBattleConfigs } from "./battle"; import { classicFixedBattles, FixedBattleConfig } from "./battle"; import type { Challenge } from "./data/challenge"; -import { allChallenges, applyChallenges, ChallengeType, copyChallenge } from "./data/challenge"; +import { allChallenges, applyChallenges, copyChallenge } from "./data/challenge"; +import { ChallengeType } from "#enums/challenge-type"; import type PokemonSpecies from "./data/pokemon-species"; import { allSpecies } from "./data/pokemon-species"; import type { Arena } from "./field/arena"; @@ -14,14 +15,7 @@ import { Challenges } from "./enums/challenges"; import { globalScene } from "#app/global-scene"; import { getDailyStartingBiome } from "./data/daily-run"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES, CHALLENGE_MODE_MYSTERY_ENCOUNTER_WAVES } from "./constants"; - -export enum GameModes { - CLASSIC, - ENDLESS, - SPLICED_ENDLESS, - DAILY, - CHALLENGE, -} +import { GameModes } from "#enums/game-modes"; interface GameModeConfig { isClassic?: boolean; diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index ccbc202407b..b37ed7dea3b 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -2,19 +2,16 @@ import { globalScene } from "#app/global-scene"; import { EvolutionItem, pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { tmPoolTiers, tmSpecies } from "#app/data/balance/tms"; import { getBerryEffectDescription, getBerryName } from "#app/data/berry"; -import { AttackMove } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; import { getNatureName, getNatureStatMultiplier } from "#app/data/nature"; import { getPokeballCatchMultiplier, getPokeballName, MAX_PER_TYPE_POKEBALLS } from "#app/data/pokeball"; -import { - FormChangeItem, - pokemonFormChanges, - SpeciesFormChangeCondition, - SpeciesFormChangeItemTrigger, -} from "#app/data/pokemon-forms"; +import { pokemonFormChanges, SpeciesFormChangeCondition } from "#app/data/pokemon-forms"; +import { SpeciesFormChangeItemTrigger } from "#app/data/pokemon-forms/form-change-triggers"; +import { FormChangeItem } from "#enums/form-change-item"; import { getStatusEffectDescriptor } from "#app/data/status-effect"; import { PokemonType } from "#enums/pokemon-type"; -import type { EnemyPokemon, PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; +import type { PokemonMove } from "#app/data/moves/pokemon-move"; import type Pokemon from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { @@ -1339,7 +1336,7 @@ class AttackTypeBoosterModifierTypeGenerator extends ModifierTypeGenerator { p .getMoveset() .map(m => m.getMove()) - .filter(m => m instanceof AttackMove) + .filter(m => m.is("AttackMove")) .map(m => m.type), ); if (!attackMoveTypes.length) { diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index b6f96db751a..bfea061b1e8 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -3,14 +3,15 @@ import { getBerryEffectFunc, getBerryPredicate } from "#app/data/berry"; import { getLevelTotalExp } from "#app/data/exp"; import { allMoves } from "#app/data/data-lists"; import { MAX_PER_TYPE_POKEBALLS } from "#app/data/pokeball"; -import { type FormChangeItem, SpeciesFormChangeItemTrigger } from "#app/data/pokemon-forms"; +import { SpeciesFormChangeItemTrigger } from "#app/data/pokemon-forms/form-change-triggers"; +import type { FormChangeItem } from "#enums/form-change-item"; import { getStatusEffectHealText } from "#app/data/status-effect"; import Pokemon, { type PlayerPokemon } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import Overrides from "#app/overrides"; -import { LearnMoveType } from "#app/phases/learn-move-phase"; +import { LearnMoveType } from "#enums/learn-move-type"; import type { VoucherType } from "#app/system/voucher"; -import { Command } from "#app/ui/command-ui-handler"; +import { Command } from "#enums/command"; import { addTextObject, TextStyle } from "#app/ui/text"; import { BooleanHolder, hslToHex, isNullOrUndefined, NumberHolder, randSeedFloat, toDmgValue } from "#app/utils/common"; import { BattlerTagType } from "#enums/battler-tag-type"; diff --git a/src/overrides.ts b/src/overrides.ts index 86e1708248d..1fbca8e8de1 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -1,7 +1,7 @@ import { type PokeballCounts } from "#app/battle-scene"; import { EvolutionItem } from "#app/data/balance/pokemon-evolutions"; import { Gender } from "#app/data/gender"; -import { FormChangeItem } from "#app/data/pokemon-forms"; +import { FormChangeItem } from "#enums/form-change-item"; import { type ModifierOverride } from "#app/modifier/modifier-type"; import { Variant } from "#app/sprites/variant"; import { Unlockables } from "#app/system/unlockables"; diff --git a/src/phases/attempt-capture-phase.ts b/src/phases/attempt-capture-phase.ts index 4f3f54a7e5b..f4e6725935a 100644 --- a/src/phases/attempt-capture-phase.ts +++ b/src/phases/attempt-capture-phase.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { PLAYER_PARTY_MAX_SIZE } from "#app/constants"; import { SubstituteTag } from "#app/data/battler-tags"; import { diff --git a/src/phases/berry-phase.ts b/src/phases/berry-phase.ts index 6e40e299e7c..cc990d1e2ae 100644 --- a/src/phases/berry-phase.ts +++ b/src/phases/berry-phase.ts @@ -4,7 +4,7 @@ import { HealFromBerryUseAbAttr, RepeatBerryNextTurnAbAttr, } from "#app/data/abilities/ability"; -import { CommonAnim } from "#app/data/battle-anims"; +import { CommonAnim } from "#enums/move-anims-common"; import { BerryUsedEvent } from "#app/events/battle-scene"; import { getPokemonNameWithAffix } from "#app/messages"; import { BerryModifier } from "#app/modifier/modifier"; diff --git a/src/phases/check-status-effect-phase.ts b/src/phases/check-status-effect-phase.ts index e4793fae076..43495e038e9 100644 --- a/src/phases/check-status-effect-phase.ts +++ b/src/phases/check-status-effect-phase.ts @@ -1,5 +1,5 @@ import { Phase } from "#app/phase"; -import type { BattlerIndex } from "#app/battle"; +import type { BattlerIndex } from "#enums/battler-index"; import { globalScene } from "#app/global-scene"; export class CheckStatusEffectPhase extends Phase { diff --git a/src/phases/command-phase.ts b/src/phases/command-phase.ts index afd9cb3bf93..d7264b4aff2 100644 --- a/src/phases/command-phase.ts +++ b/src/phases/command-phase.ts @@ -4,7 +4,7 @@ import { BattleType } from "#enums/battle-type"; import type { EncoreTag } from "#app/data/battler-tags"; import { TrappedTag } from "#app/data/battler-tags"; import type { MoveTargetSet } from "#app/data/moves/move"; -import { getMoveTargets } from "#app/data/moves/move"; +import { getMoveTargets } from "#app/data/moves/move-utils"; import { speciesStarterCosts } from "#app/data/balance/starters"; import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#app/enums/battler-tag-type"; @@ -12,15 +12,15 @@ import { BiomeId } from "#enums/biome-id"; import { MoveId } from "#enums/move-id"; import { PokeballType } from "#enums/pokeball"; import type { PlayerPokemon, TurnMove } from "#app/field/pokemon"; -import { FieldPosition } from "#app/field/pokemon"; +import { FieldPosition } from "#enums/field-position"; import { getPokemonNameWithAffix } from "#app/messages"; -import { Command } from "#app/ui/command-ui-handler"; +import { Command } from "#enums/command"; import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; import { FieldPhase } from "./field-phase"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; import { isNullOrUndefined } from "#app/utils/common"; -import { ArenaTagSide } from "#app/data/arena-tag"; +import { ArenaTagSide } from "#enums/arena-tag-side"; import { ArenaTagType } from "#app/enums/arena-tag-type"; export class CommandPhase extends FieldPhase { diff --git a/src/phases/common-anim-phase.ts b/src/phases/common-anim-phase.ts index 4a27db3a651..abfe8ed99f0 100644 --- a/src/phases/common-anim-phase.ts +++ b/src/phases/common-anim-phase.ts @@ -1,6 +1,6 @@ -import type { BattlerIndex } from "#app/battle"; +import type { BattlerIndex } from "#enums/battler-index"; import { globalScene } from "#app/global-scene"; -import type { CommonAnim } from "#app/data/battle-anims"; +import type { CommonAnim } from "#enums/move-anims-common"; import { CommonBattleAnim } from "#app/data/battle-anims"; import { PokemonPhase } from "./pokemon-phase"; diff --git a/src/phases/damage-anim-phase.ts b/src/phases/damage-anim-phase.ts index 85cb26e0a09..aa5a0a6c3e6 100644 --- a/src/phases/damage-anim-phase.ts +++ b/src/phases/damage-anim-phase.ts @@ -1,7 +1,8 @@ import { globalScene } from "#app/global-scene"; -import type { BattlerIndex } from "#app/battle"; +import type { BattlerIndex } from "#enums/battler-index"; import { BattleSpec } from "#enums/battle-spec"; -import { type DamageResult, HitResult } from "#app/field/pokemon"; +import type { DamageResult } from "#app/field/pokemon"; +import { HitResult } from "#enums/hit-result"; import { fixedInt } from "#app/utils/common"; import { PokemonPhase } from "#app/phases/pokemon-phase"; diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index e3b33122ac2..74623f947ee 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { BattleType } from "#enums/battle-type"; import { globalScene } from "#app/global-scene"; import { PLAYER_PARTY_MAX_SIZE } from "#app/constants"; @@ -17,7 +17,7 @@ import { TrainerSlot } from "#enums/trainer-slot"; import { getRandomWeatherType } from "#app/data/weather"; import { EncounterPhaseEvent } from "#app/events/battle-scene"; import type Pokemon from "#app/field/pokemon"; -import { FieldPosition } from "#app/field/pokemon"; +import { FieldPosition } from "#enums/field-position"; import { getPokemonNameWithAffix } from "#app/messages"; import { BoostBugSpawnModifier, IvScannerModifier, TurnHeldItemTransferModifier } from "#app/modifier/modifier"; import { ModifierPoolType, regenerateModifierPoolThresholds } from "#app/modifier/modifier-type"; diff --git a/src/phases/enemy-command-phase.ts b/src/phases/enemy-command-phase.ts index a81fc4d2107..0dc41a592e0 100644 --- a/src/phases/enemy-command-phase.ts +++ b/src/phases/enemy-command-phase.ts @@ -1,6 +1,6 @@ import { globalScene } from "#app/global-scene"; -import { BattlerIndex } from "#app/battle"; -import { Command } from "#app/ui/command-ui-handler"; +import { BattlerIndex } from "#enums/battler-index"; +import { Command } from "#enums/command"; import { FieldPhase } from "./field-phase"; import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; diff --git a/src/phases/evolution-phase.ts b/src/phases/evolution-phase.ts index eaedb6d32b0..bcc93b028bd 100644 --- a/src/phases/evolution-phase.ts +++ b/src/phases/evolution-phase.ts @@ -10,7 +10,7 @@ import { UiMode } from "#enums/ui-mode"; import { cos, sin } from "#app/field/anims"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { LearnMoveSituation } from "#app/field/pokemon"; +import { LearnMoveSituation } from "#enums/learn-move-situation"; import { getTypeRgb } from "#app/data/type"; import i18next from "i18next"; import { getPokemonNameWithAffix } from "#app/messages"; diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index 38376af4356..ca23b20be12 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -1,4 +1,4 @@ -import type { BattlerIndex } from "#app/battle"; +import type { BattlerIndex } from "#enums/battler-index"; import { BattleType } from "#enums/battle-type"; import { globalScene } from "#app/global-scene"; import { @@ -9,16 +9,16 @@ import { PostKnockOutAbAttr, PostVictoryAbAttr, } from "#app/data/abilities/ability"; -import { BattlerTagLapseType } from "#app/data/battler-tags"; +import { BattlerTagLapseType } from "#enums/battler-tag-lapse-type"; import { battleSpecDialogue } from "#app/data/dialogue"; -import { PostVictoryStatStageChangeAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; -import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms"; +import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms/form-change-triggers"; import { BattleSpec } from "#app/enums/battle-spec"; import { StatusEffect } from "#app/enums/status-effect"; import type { EnemyPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { HitResult, PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { HitResult } from "#enums/hit-result"; import type { PlayerPokemon } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { PokemonInstantReviveModifier } from "#app/modifier/modifier"; @@ -144,7 +144,7 @@ export class FaintPhase extends PokemonPhase { if (defeatSource?.isOnField()) { applyPostVictoryAbAttrs(PostVictoryAbAttr, defeatSource); const pvmove = allMoves[pokemon.turnData.attacksReceived[0].move]; - const pvattrs = pvmove.getAttrs(PostVictoryStatStageChangeAttr); + const pvattrs = pvmove.getAttrs("PostVictoryStatStageChangeAttr"); if (pvattrs.length) { for (const pvattr of pvattrs) { pvattr.applyPostVictory(defeatSource, defeatSource, pvmove); diff --git a/src/phases/form-change-phase.ts b/src/phases/form-change-phase.ts index 3813359d432..13cd410ef87 100644 --- a/src/phases/form-change-phase.ts +++ b/src/phases/form-change-phase.ts @@ -2,7 +2,7 @@ import { globalScene } from "#app/global-scene"; import { fixedInt } from "#app/utils/common"; import { achvs } from "../system/achv"; import type { SpeciesFormChange } from "../data/pokemon-forms"; -import { getSpeciesFormChangeMessage } from "../data/pokemon-forms"; +import { getSpeciesFormChangeMessage } from "#app/data/pokemon-forms/form-change-triggers"; import type { PlayerPokemon } from "../field/pokemon"; import { UiMode } from "#enums/ui-mode"; import type PartyUiHandler from "../ui/party-ui-handler"; diff --git a/src/phases/learn-move-phase.ts b/src/phases/learn-move-phase.ts index 7464cebe7da..e24efa63b5a 100644 --- a/src/phases/learn-move-phase.ts +++ b/src/phases/learn-move-phase.ts @@ -2,7 +2,7 @@ import { globalScene } from "#app/global-scene"; import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims"; import type Move from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; -import { SpeciesFormChangeMoveLearnedTrigger } from "#app/data/pokemon-forms"; +import { SpeciesFormChangeMoveLearnedTrigger } from "#app/data/pokemon-forms/form-change-triggers"; import { MoveId } from "#enums/move-id"; import { getPokemonNameWithAffix } from "#app/messages"; import Overrides from "#app/overrides"; @@ -12,15 +12,7 @@ import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; import { PlayerPartyMemberPokemonPhase } from "#app/phases/player-party-member-pokemon-phase"; import type Pokemon from "#app/field/pokemon"; - -export enum LearnMoveType { - /** For learning a move via level-up, evolution, or other non-item-based event */ - LEARN_MOVE, - /** For learning a move via Memory Mushroom */ - MEMORY, - /** For learning a move via TM */ - TM, -} +import { LearnMoveType } from "#enums/learn-move-type"; export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { public readonly phaseName = "LearnMovePhase"; diff --git a/src/phases/move-charge-phase.ts b/src/phases/move-charge-phase.ts index a481f4e37b8..15a98ebabd2 100644 --- a/src/phases/move-charge-phase.ts +++ b/src/phases/move-charge-phase.ts @@ -1,10 +1,10 @@ import { globalScene } from "#app/global-scene"; -import type { BattlerIndex } from "#app/battle"; +import type { BattlerIndex } from "#enums/battler-index"; import { MoveChargeAnim } from "#app/data/battle-anims"; -import { applyMoveChargeAttrs, MoveEffectAttr, InstantChargeAttr } from "#app/data/moves/move"; -import type { PokemonMove } from "#app/field/pokemon"; +import { applyMoveChargeAttrs } from "#app/data/moves/apply-attrs"; +import type { PokemonMove } from "#app/data/moves/pokemon-move"; import type Pokemon from "#app/field/pokemon"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import { BooleanHolder } from "#app/utils/common"; import { PokemonPhase } from "#app/phases/pokemon-phase"; import { BattlerTagType } from "#enums/battler-tag-type"; @@ -43,7 +43,7 @@ export class MoveChargePhase extends PokemonPhase { new MoveChargeAnim(move.chargeAnim, move.id, user).play(false, () => { move.showChargeText(user, target); - applyMoveChargeAttrs(MoveEffectAttr, user, target, move); + applyMoveChargeAttrs("MoveEffectAttr", user, target, move); user.addTag(BattlerTagType.CHARGING, 1, move.id, user.id); this.end(); }); @@ -57,7 +57,7 @@ export class MoveChargePhase extends PokemonPhase { if (move.isChargingMove()) { const instantCharge = new BooleanHolder(false); - applyMoveChargeAttrs(InstantChargeAttr, user, null, move, instantCharge); + applyMoveChargeAttrs("InstantChargeAttr", user, null, move, instantCharge); if (instantCharge.value) { // this MoveEndPhase will be duplicated by the queued MovePhase if not removed diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index 84072b393f1..68c96ddce1e 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { globalScene } from "#app/global-scene"; import { AddSecondStrikeAbAttr, @@ -16,43 +16,31 @@ import { PostDefendAbAttr, ReflectStatusMoveAbAttr, } from "#app/data/abilities/ability"; -import { ArenaTagSide, ConditionalProtectTag } from "#app/data/arena-tag"; +import { ConditionalProtectTag } from "#app/data/arena-tag"; +import { ArenaTagSide } from "#enums/arena-tag-side"; import { MoveAnim } from "#app/data/battle-anims"; import { - BattlerTagLapseType, DamageProtectedTag, ProtectedTag, SemiInvulnerableTag, SubstituteTag, TypeBoostTag, } from "#app/data/battler-tags"; +import { BattlerTagLapseType } from "#enums/battler-tag-lapse-type"; import type { MoveAttr } from "#app/data/moves/move"; -import { - applyFilteredMoveAttrs, - applyMoveAttrs, - AttackMove, - DelayedAttackAttr, - FlinchAttr, - getMoveTargets, - HitsTagAttr, - MissEffectAttr, - MoveEffectAttr, - MultiHitAttr, - NoEffectAttr, - OneHitKOAttr, - OverrideMoveEffectAttr, - StatChangeBeforeDmgCalcAttr, - ToxicAccuracyAttr, -} from "#app/data/moves/move"; +import { getMoveTargets } from "#app/data/moves/move-utils"; +import { applyFilteredMoveAttrs, applyMoveAttrs } from "#app/data/moves/apply-attrs"; import { MoveEffectTrigger } from "#enums/MoveEffectTrigger"; import { MoveFlags } from "#enums/MoveFlags"; import { MoveTarget } from "#enums/MoveTarget"; import { MoveCategory } from "#enums/MoveCategory"; -import { SpeciesFormChangePostMoveTrigger } from "#app/data/pokemon-forms"; +import { SpeciesFormChangePostMoveTrigger } from "#app/data/pokemon-forms/form-change-triggers"; import { PokemonType } from "#enums/pokemon-type"; -import { type DamageResult, PokemonMove, type TurnMove } from "#app/field/pokemon"; +import type { DamageResult, TurnMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import type Pokemon from "#app/field/pokemon"; -import { HitResult, MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; +import { HitResult } from "#enums/hit-result"; import { getPokemonNameWithAffix } from "#app/messages"; import { ContactHeldItemTransferChanceModifier, @@ -238,13 +226,13 @@ export class MoveEffectPhase extends PokemonPhase { case HitCheckResult.NO_EFFECT_NO_MESSAGE: case HitCheckResult.PROTECTED: case HitCheckResult.TARGET_NOT_ON_FIELD: - applyMoveAttrs(NoEffectAttr, user, target, this.move); + applyMoveAttrs("NoEffectAttr", user, target, this.move); break; case HitCheckResult.MISS: globalScene.phaseManager.queueMessage( i18next.t("battle:attackMissed", { pokemonNameWithAffix: getPokemonNameWithAffix(target) }), ); - applyMoveAttrs(MissEffectAttr, user, target, this.move); + applyMoveAttrs("MissEffectAttr", user, target, this.move); break; case HitCheckResult.REFLECTED: this.queueReflectedMove(user, target); @@ -274,7 +262,7 @@ export class MoveEffectPhase extends PokemonPhase { globalScene.currentBattle.lastPlayerInvolved = this.fieldIndex; } - const isDelayedAttack = this.move.hasAttr(DelayedAttackAttr); + const isDelayedAttack = this.move.hasAttr("DelayedAttackAttr"); /** If the user was somehow removed from the field and it's not a delayed attack, end this phase */ if (!user.isOnField()) { if (!isDelayedAttack) { @@ -300,7 +288,7 @@ export class MoveEffectPhase extends PokemonPhase { const move = this.move; // Assume single target for override - applyMoveAttrs(OverrideMoveEffectAttr, user, this.getFirstTarget() ?? null, move, overridden, this.virtual); + applyMoveAttrs("OverrideMoveEffectAttr", user, this.getFirstTarget() ?? null, move, overridden, this.virtual); // If other effects were overriden, stop this phase before they can be applied if (overridden.value) { @@ -327,7 +315,7 @@ export class MoveEffectPhase extends PokemonPhase { if (user.turnData.hitsLeft === -1) { const hitCount = new NumberHolder(1); // Assume single target for multi hit - applyMoveAttrs(MultiHitAttr, user, this.getFirstTarget() ?? null, move, hitCount); + applyMoveAttrs("MultiHitAttr", user, this.getFirstTarget() ?? null, move, hitCount); // If Parental Bond is applicable, add another hit applyPreAttackAbAttrs(AddSecondStrikeAbAttr, user, null, move, false, hitCount, null); // If Multi-Lens is applicable, add hits equal to the number of held Multi-Lenses @@ -359,7 +347,7 @@ export class MoveEffectPhase extends PokemonPhase { // Play the animation if the move was successful against any of its targets or it has a POST_TARGET effect (like self destruct) if ( this.moveHistoryEntry.result === MoveResult.SUCCESS || - move.getAttrs(MoveEffectAttr).some(attr => attr.trigger === MoveEffectTrigger.POST_TARGET) + move.getAttrs("MoveEffectAttr").some(attr => attr.trigger === MoveEffectTrigger.POST_TARGET) ) { const firstTarget = this.getFirstTarget(); new MoveAnim( @@ -458,7 +446,7 @@ export class MoveEffectPhase extends PokemonPhase { * @returns a function intended to be passed into a `then()` call. */ protected applyHeldItemFlinchCheck(user: Pokemon, target: Pokemon, dealsDamage: boolean): void { - if (this.move.hasAttr(FlinchAttr)) { + if (this.move.hasAttr("FlinchAttr")) { return; } @@ -600,7 +588,7 @@ export class MoveEffectPhase extends PokemonPhase { const bypassAccuracy = bypassAccAndInvuln || target.getTag(BattlerTagType.ALWAYS_GET_HIT) || - (target.getTag(BattlerTagType.TELEKINESIS) && !this.move.hasAttr(OneHitKOAttr)); + (target.getTag(BattlerTagType.TELEKINESIS) && !this.move.hasAttr("OneHitKOAttr")); if (moveAccuracy === -1 || bypassAccuracy) { return [HitCheckResult.HIT, effectiveness]; @@ -641,7 +629,7 @@ export class MoveEffectPhase extends PokemonPhase { if (user.hasAbilityWithAttr(AlwaysHitAbAttr) || target.hasAbilityWithAttr(AlwaysHitAbAttr)) { return true; } - if (this.move.hasAttr(ToxicAccuracyAttr) && user.isOfType(PokemonType.POISON)) { + if (this.move.hasAttr("ToxicAccuracyAttr") && user.isOfType(PokemonType.POISON)) { return true; } // TODO: Fix lock on / mind reader check. @@ -666,7 +654,7 @@ export class MoveEffectPhase extends PokemonPhase { return false; } const move = this.move; - return move.getAttrs(HitsTagAttr).some(hta => hta.tagType === semiInvulnerableTag.tagType); + return move.getAttrs("HitsTagAttr").some(hta => hta.tagType === semiInvulnerableTag.tagType); } /** @returns The {@linkcode Pokemon} using this phase's invoked move */ @@ -757,7 +745,7 @@ export class MoveEffectPhase extends PokemonPhase { ): void { applyFilteredMoveAttrs( (attr: MoveAttr) => - attr instanceof MoveEffectAttr && + attr.is("MoveEffectAttr") && attr.trigger === triggerType && (isNullOrUndefined(selfTarget) || attr.selfTarget === selfTarget) && (!attr.firstHitOnly || this.firstHit) && @@ -820,7 +808,7 @@ export class MoveEffectPhase extends PokemonPhase { * Apply stat changes from {@linkcode move} and gives it to {@linkcode source} * before damage calculation */ - applyMoveAttrs(StatChangeBeforeDmgCalcAttr, user, target, this.move); + applyMoveAttrs("StatChangeBeforeDmgCalcAttr", user, target, this.move); const { result, damage: dmg } = target.getAttackDamage({ source: user, @@ -998,12 +986,12 @@ export class MoveEffectPhase extends PokemonPhase { applyPostAttackAbAttrs(PostAttackAbAttr, user, target, this.move, hitResult); // We assume only enemy Pokemon are able to have the EnemyAttackStatusEffectChanceModifier from tokens - if (!user.isPlayer() && this.move instanceof AttackMove) { + if (!user.isPlayer() && this.move.is("AttackMove")) { globalScene.applyShuffledModifiers(EnemyAttackStatusEffectChanceModifier, false, target); } // Apply Grip Claw's chance to steal an item from the target - if (this.move instanceof AttackMove) { + if (this.move.is("AttackMove")) { globalScene.applyModifiers(ContactHeldItemTransferChanceModifier, this.player, user, target); } } diff --git a/src/phases/move-end-phase.ts b/src/phases/move-end-phase.ts index 6642b97773b..e5f87089fae 100644 --- a/src/phases/move-end-phase.ts +++ b/src/phases/move-end-phase.ts @@ -1,7 +1,7 @@ import { globalScene } from "#app/global-scene"; -import { BattlerTagLapseType } from "#app/data/battler-tags"; +import { BattlerTagLapseType } from "#enums/battler-tag-lapse-type"; import { PokemonPhase } from "./pokemon-phase"; -import type { BattlerIndex } from "#app/battle"; +import type { BattlerIndex } from "#enums/battler-index"; import { applyPostSummonAbAttrs, PostSummonRemoveEffectAbAttr } from "#app/data/abilities/ability"; import type Pokemon from "#app/field/pokemon"; diff --git a/src/phases/move-header-phase.ts b/src/phases/move-header-phase.ts index 50100e827d6..8c2d184c3f5 100644 --- a/src/phases/move-header-phase.ts +++ b/src/phases/move-header-phase.ts @@ -1,5 +1,5 @@ -import { applyMoveAttrs, MoveHeaderAttr } from "#app/data/moves/move"; -import type { PokemonMove } from "#app/field/pokemon"; +import { applyMoveAttrs } from "#app/data/moves/apply-attrs"; +import type { PokemonMove } from "#app/data/moves/pokemon-move"; import type Pokemon from "#app/field/pokemon"; import { BattlePhase } from "./battle-phase"; @@ -23,7 +23,7 @@ export class MoveHeaderPhase extends BattlePhase { super.start(); if (this.canMove()) { - applyMoveAttrs(MoveHeaderAttr, this.pokemon, null, this.move.getMove()); + applyMoveAttrs("MoveHeaderAttr", this.pokemon, null, this.move.getMove()); } this.end(); } diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index 7fc6a86e3f7..ca66ca745e7 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { globalScene } from "#app/global-scene"; import { applyAbAttrs, @@ -12,30 +12,21 @@ import { ReduceStatusEffectDurationAbAttr, } from "#app/data/abilities/ability"; import type { DelayedAttackTag } from "#app/data/arena-tag"; -import { CommonAnim } from "#app/data/battle-anims"; -import { BattlerTagLapseType, CenterOfAttentionTag } from "#app/data/battler-tags"; -import { - AddArenaTrapTagAttr, - applyMoveAttrs, - BypassRedirectAttr, - BypassSleepAttr, - CopyMoveAttr, - DelayedAttackAttr, - frenzyMissFunc, - HealStatusEffectAttr, - PreMoveMessageAttr, - PreUseInterruptAttr, -} from "#app/data/moves/move"; +import { CommonAnim } from "#enums/move-anims-common"; +import { CenterOfAttentionTag } from "#app/data/battler-tags"; +import { BattlerTagLapseType } from "#enums/battler-tag-lapse-type"; +import type { HealStatusEffectAttr } from "#app/data/moves/move"; +import { applyMoveAttrs } from "#app/data/moves/apply-attrs"; import { allMoves } from "#app/data/data-lists"; import { MoveFlags } from "#enums/MoveFlags"; -import { SpeciesFormChangePreMoveTrigger } from "#app/data/pokemon-forms"; +import { SpeciesFormChangePreMoveTrigger } from "#app/data/pokemon-forms/form-change-triggers"; import { getStatusEffectActivationText, getStatusEffectHealText } from "#app/data/status-effect"; import { PokemonType } from "#enums/pokemon-type"; import { getTerrainBlockMessage, getWeatherBlockMessage } from "#app/data/weather"; import { MoveUsedEvent } from "#app/events/battle-scene"; -import type { PokemonMove } from "#app/field/pokemon"; +import type { PokemonMove } from "#app/data/moves/pokemon-move"; import type Pokemon from "#app/field/pokemon"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import { getPokemonNameWithAffix } from "#app/messages"; import Overrides from "#app/overrides"; import { BattlePhase } from "#app/phases/battle-phase"; @@ -46,6 +37,7 @@ import { BattlerTagType } from "#enums/battler-tag-type"; import { MoveId } from "#enums/move-id"; import { StatusEffect } from "#enums/status-effect"; import i18next from "i18next"; +import { frenzyMissFunc } from "#app/data/moves/move-utils"; export class MovePhase extends BattlePhase { public readonly phaseName = "MovePhase"; @@ -204,7 +196,7 @@ export class MovePhase extends BattlePhase { const moveQueue = this.pokemon.getMoveQueue(); if ( - (targets.length === 0 && !this.move.getMove().hasAttr(AddArenaTrapTagAttr)) || + (targets.length === 0 && !this.move.getMove().hasAttr("AddArenaTrapTagAttr")) || (moveQueue.length && moveQueue[0].move === MoveId.NONE) ) { this.showMoveText(); @@ -233,7 +225,7 @@ export class MovePhase extends BattlePhase { Overrides.STATUS_ACTIVATION_OVERRIDE !== false; break; case StatusEffect.SLEEP: { - applyMoveAttrs(BypassSleepAttr, this.pokemon, null, this.move.getMove()); + applyMoveAttrs("BypassSleepAttr", this.pokemon, null, this.move.getMove()); const turnsRemaining = new NumberHolder(this.pokemon.status.sleepTurnsRemaining ?? 0); applyAbAttrs( ReduceStatusEffectDurationAbAttr, @@ -253,7 +245,10 @@ export class MovePhase extends BattlePhase { !!this.move .getMove() .findAttr( - attr => attr instanceof HealStatusEffectAttr && attr.selfTarget && attr.isOfEffect(StatusEffect.FREEZE), + attr => + attr.is("HealStatusEffectAttr") && + attr.selfTarget && + (attr as unknown as HealStatusEffectAttr).isOfEffect(StatusEffect.FREEZE), ) || (!this.pokemon.randBattleSeedInt(5) && Overrides.STATUS_ACTIVATION_OVERRIDE !== true) || Overrides.STATUS_ACTIVATION_OVERRIDE === false; @@ -303,7 +298,7 @@ export class MovePhase extends BattlePhase { // form changes happen even before we know that the move wll execute. globalScene.triggerPokemonFormChange(this.pokemon, SpeciesFormChangePreMoveTrigger); - const isDelayedAttack = this.move.getMove().hasAttr(DelayedAttackAttr); + const isDelayedAttack = this.move.getMove().hasAttr("DelayedAttackAttr"); if (isDelayedAttack) { // Check the player side arena if future sight is active const futureSightTags = globalScene.arena.findTags(t => t.tagType === ArenaTagType.FUTURE_SIGHT); @@ -331,7 +326,7 @@ export class MovePhase extends BattlePhase { let success = true; // Check if there are any attributes that can interrupt the move, overriding the fail message. - for (const move of this.move.getMove().getAttrs(PreUseInterruptAttr)) { + for (const move of this.move.getMove().getAttrs("PreUseInterruptAttr")) { if (move.apply(this.pokemon, targets[0], this.move.getMove())) { success = false; break; @@ -386,7 +381,7 @@ export class MovePhase extends BattlePhase { } // Update the battle's "last move" pointer, unless we're currently mimicking a move. - if (!allMoves[this.move.moveId].hasAttr(CopyMoveAttr)) { + if (!allMoves[this.move.moveId].hasAttr("CopyMoveAttr")) { // The last move used is unaffected by moves that fail if (success) { globalScene.currentBattle.lastMove = this.move.moveId; @@ -543,7 +538,7 @@ export class MovePhase extends BattlePhase { }); if (currentTarget !== redirectTarget.value) { - const bypassRedirectAttrs = this.move.getMove().getAttrs(BypassRedirectAttr); + const bypassRedirectAttrs = this.move.getMove().getAttrs("BypassRedirectAttr"); bypassRedirectAttrs.forEach(attr => { if (!attr.abilitiesOnly || redirectedByAbility) { redirectTarget.value = currentTarget; @@ -664,7 +659,7 @@ export class MovePhase extends BattlePhase { }), 500, ); - applyMoveAttrs(PreMoveMessageAttr, this.pokemon, this.pokemon.getOpponents(false)[0], this.move.getMove()); + applyMoveAttrs("PreMoveMessageAttr", this.pokemon, this.pokemon.getOpponents(false)[0], this.move.getMove()); } public showFailedText(failedText: string = i18next.t("battle:attackFailed")): void { diff --git a/src/phases/mystery-encounter-phases.ts b/src/phases/mystery-encounter-phases.ts index 1f27db7ff64..9aae796211f 100644 --- a/src/phases/mystery-encounter-phases.ts +++ b/src/phases/mystery-encounter-phases.ts @@ -1,4 +1,4 @@ -import { BattlerTagLapseType } from "#app/data/battler-tags"; +import { BattlerTagLapseType } from "#enums/battler-tag-lapse-type"; import type { OptionPhaseCallback } from "#app/data/mystery-encounters/mystery-encounter-option"; import type MysteryEncounterOption from "#app/data/mystery-encounters/mystery-encounter-option"; import { SeenEncounterData } from "#app/data/mystery-encounters/mystery-encounter-save-data"; diff --git a/src/phases/obtain-status-effect-phase.ts b/src/phases/obtain-status-effect-phase.ts index 2982bc982d9..bf172269d5f 100644 --- a/src/phases/obtain-status-effect-phase.ts +++ b/src/phases/obtain-status-effect-phase.ts @@ -1,12 +1,13 @@ import { globalScene } from "#app/global-scene"; -import type { BattlerIndex } from "#app/battle"; -import { CommonBattleAnim, CommonAnim } from "#app/data/battle-anims"; +import type { BattlerIndex } from "#enums/battler-index"; +import { CommonBattleAnim } from "#app/data/battle-anims"; +import { CommonAnim } from "#enums/move-anims-common"; import { getStatusEffectObtainText, getStatusEffectOverlapText } from "#app/data/status-effect"; import { StatusEffect } from "#app/enums/status-effect"; import type Pokemon from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { PokemonPhase } from "./pokemon-phase"; -import { SpeciesFormChangeStatusEffectTrigger } from "#app/data/pokemon-forms"; +import { SpeciesFormChangeStatusEffectTrigger } from "#app/data/pokemon-forms/form-change-triggers"; import { applyPostSetStatusAbAttrs, PostSetStatusAbAttr } from "#app/data/abilities/ability"; import { isNullOrUndefined } from "#app/utils/common"; diff --git a/src/phases/pokemon-heal-phase.ts b/src/phases/pokemon-heal-phase.ts index 6e9b6b5c622..cf6cf40a923 100644 --- a/src/phases/pokemon-heal-phase.ts +++ b/src/phases/pokemon-heal-phase.ts @@ -1,9 +1,9 @@ import { globalScene } from "#app/global-scene"; -import type { BattlerIndex } from "#app/battle"; -import { CommonAnim } from "#app/data/battle-anims"; +import type { BattlerIndex } from "#enums/battler-index"; +import { CommonAnim } from "#enums/move-anims-common"; import { getStatusEffectHealText } from "#app/data/status-effect"; import { StatusEffect } from "#app/enums/status-effect"; -import { HitResult } from "#app/field/pokemon"; +import { HitResult } from "#enums/hit-result"; import { getPokemonNameWithAffix } from "#app/messages"; import { HealingBoosterModifier } from "#app/modifier/modifier"; import { HealAchv } from "#app/system/achv"; diff --git a/src/phases/pokemon-phase.ts b/src/phases/pokemon-phase.ts index 8c30512cdc4..d7fe58d0b80 100644 --- a/src/phases/pokemon-phase.ts +++ b/src/phases/pokemon-phase.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import type Pokemon from "#app/field/pokemon"; import { FieldPhase } from "./field-phase"; diff --git a/src/phases/pokemon-transform-phase.ts b/src/phases/pokemon-transform-phase.ts index 4f18a19b2fb..ab0949c42b9 100644 --- a/src/phases/pokemon-transform-phase.ts +++ b/src/phases/pokemon-transform-phase.ts @@ -1,8 +1,8 @@ -import type { BattlerIndex } from "#app/battle"; +import type { BattlerIndex } from "#enums/battler-index"; import { BattlerTagType } from "#enums/battler-tag-type"; import { MoveId } from "#enums/move-id"; import { EFFECTIVE_STATS, BATTLE_STATS } from "#enums/stat"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { globalScene } from "#app/global-scene"; import { PokemonPhase } from "./pokemon-phase"; import { getPokemonNameWithAffix } from "#app/messages"; diff --git a/src/phases/post-turn-status-effect-phase.ts b/src/phases/post-turn-status-effect-phase.ts index 33fb012492d..c868b963f39 100644 --- a/src/phases/post-turn-status-effect-phase.ts +++ b/src/phases/post-turn-status-effect-phase.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import type { BattlerIndex } from "#app/battle"; +import type { BattlerIndex } from "#enums/battler-index"; import { applyAbAttrs, applyPostDamageAbAttrs, @@ -8,7 +8,8 @@ import { PostDamageAbAttr, ReduceBurnDamageAbAttr, } from "#app/data/abilities/ability"; -import { CommonBattleAnim, CommonAnim } from "#app/data/battle-anims"; +import { CommonBattleAnim } from "#app/data/battle-anims"; +import { CommonAnim } from "#enums/move-anims-common"; import { getStatusEffectActivationText } from "#app/data/status-effect"; import { BattleSpec } from "#app/enums/battle-spec"; import { StatusEffect } from "#app/enums/status-effect"; diff --git a/src/phases/quiet-form-change-phase.ts b/src/phases/quiet-form-change-phase.ts index 6b65c2a5140..cfd9c521e2b 100644 --- a/src/phases/quiet-form-change-phase.ts +++ b/src/phases/quiet-form-change-phase.ts @@ -1,7 +1,10 @@ import { globalScene } from "#app/global-scene"; import { SemiInvulnerableTag } from "#app/data/battler-tags"; import type { SpeciesFormChange } from "#app/data/pokemon-forms"; -import { getSpeciesFormChangeMessage, SpeciesFormChangeTeraTrigger } from "#app/data/pokemon-forms"; +import { + getSpeciesFormChangeMessage, + SpeciesFormChangeTeraTrigger, +} from "#app/data/pokemon-forms/form-change-triggers"; import { getTypeRgb } from "#app/data/type"; import { BattleSpec } from "#app/enums/battle-spec"; import { BattlerTagType } from "#app/enums/battler-tag-type"; diff --git a/src/phases/return-phase.ts b/src/phases/return-phase.ts index 6365256d40a..a8233f98bd1 100644 --- a/src/phases/return-phase.ts +++ b/src/phases/return-phase.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms"; +import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms/form-change-triggers"; import { SwitchType } from "#enums/switch-type"; import { SwitchSummonPhase } from "./switch-summon-phase"; diff --git a/src/phases/scan-ivs-phase.ts b/src/phases/scan-ivs-phase.ts index df68a2d1cab..d296d87ca88 100644 --- a/src/phases/scan-ivs-phase.ts +++ b/src/phases/scan-ivs-phase.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import type { BattlerIndex } from "#app/battle"; +import type { BattlerIndex } from "#enums/battler-index"; import { PERMANENT_STATS, Stat } from "#app/enums/stat"; import { getPokemonNameWithAffix } from "#app/messages"; import { getTextColor, TextStyle } from "#app/ui/text"; diff --git a/src/phases/select-starter-phase.ts b/src/phases/select-starter-phase.ts index 88d4fe06a9b..e7e87f5a25f 100644 --- a/src/phases/select-starter-phase.ts +++ b/src/phases/select-starter-phase.ts @@ -1,7 +1,8 @@ import { globalScene } from "#app/global-scene"; -import { applyChallenges, ChallengeType } from "#app/data/challenge"; +import { applyChallenges } from "#app/data/challenge"; +import { ChallengeType } from "#enums/challenge-type"; import { Gender } from "#app/data/gender"; -import { SpeciesFormChangeMoveLearnedTrigger } from "#app/data/pokemon-forms"; +import { SpeciesFormChangeMoveLearnedTrigger } from "#app/data/pokemon-forms/form-change-triggers"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { overrideHeldItems, overrideModifiers } from "#app/modifier/modifier"; import Overrides from "#app/overrides"; diff --git a/src/phases/select-target-phase.ts b/src/phases/select-target-phase.ts index fcbd3aeb679..6d47ac18021 100644 --- a/src/phases/select-target-phase.ts +++ b/src/phases/select-target-phase.ts @@ -1,6 +1,6 @@ import { globalScene } from "#app/global-scene"; -import type { BattlerIndex } from "#app/battle"; -import { Command } from "#app/ui/command-ui-handler"; +import type { BattlerIndex } from "#enums/battler-index"; +import { Command } from "#enums/command"; import { UiMode } from "#enums/ui-mode"; import { PokemonPhase } from "./pokemon-phase"; import i18next from "#app/plugins/i18n"; diff --git a/src/phases/shiny-sparkle-phase.ts b/src/phases/shiny-sparkle-phase.ts index 93d7dd67209..53866af89e6 100644 --- a/src/phases/shiny-sparkle-phase.ts +++ b/src/phases/shiny-sparkle-phase.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import type { BattlerIndex } from "#app/battle"; +import type { BattlerIndex } from "#enums/battler-index"; import { PokemonPhase } from "./pokemon-phase"; export class ShinySparklePhase extends PokemonPhase { diff --git a/src/phases/show-ability-phase.ts b/src/phases/show-ability-phase.ts index af295b72622..0f568819cde 100644 --- a/src/phases/show-ability-phase.ts +++ b/src/phases/show-ability-phase.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import type { BattlerIndex } from "#app/battle"; +import type { BattlerIndex } from "#enums/battler-index"; import { PokemonPhase } from "./pokemon-phase"; import { getPokemonNameWithAffix } from "#app/messages"; diff --git a/src/phases/stat-stage-change-phase.ts b/src/phases/stat-stage-change-phase.ts index ad2eeae1c48..9c351096180 100644 --- a/src/phases/stat-stage-change-phase.ts +++ b/src/phases/stat-stage-change-phase.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import type { BattlerIndex } from "#app/battle"; +import type { BattlerIndex } from "#enums/battler-index"; import { applyAbAttrs, applyPostStatStageChangeAbAttrs, @@ -11,7 +11,8 @@ import { StatStageChangeCopyAbAttr, StatStageChangeMultiplierAbAttr, } from "#app/data/abilities/ability"; -import { ArenaTagSide, MistTag } from "#app/data/arena-tag"; +import { MistTag } from "#app/data/arena-tag"; +import { ArenaTagSide } from "#enums/arena-tag-side"; import type { ArenaTag } from "#app/data/arena-tag"; import type Pokemon from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; diff --git a/src/phases/summon-phase.ts b/src/phases/summon-phase.ts index 921466dfead..e902fd0183e 100644 --- a/src/phases/summon-phase.ts +++ b/src/phases/summon-phase.ts @@ -1,11 +1,11 @@ import { BattleType } from "#enums/battle-type"; import { getPokeballAtlasKey, getPokeballTintColor } from "#app/data/pokeball"; -import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms"; +import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms/form-change-triggers"; import { TrainerSlot } from "#enums/trainer-slot"; import { PlayerGender } from "#app/enums/player-gender"; import { addPokeballOpenParticles } from "#app/field/anims"; import type Pokemon from "#app/field/pokemon"; -import { FieldPosition } from "#app/field/pokemon"; +import { FieldPosition } from "#enums/field-position"; import { getPokemonNameWithAffix } from "#app/messages"; import i18next from "i18next"; import { PartyMemberPokemonPhase } from "./party-member-pokemon-phase"; diff --git a/src/phases/switch-summon-phase.ts b/src/phases/switch-summon-phase.ts index 103af3db275..f6395397920 100644 --- a/src/phases/switch-summon-phase.ts +++ b/src/phases/switch-summon-phase.ts @@ -6,15 +6,14 @@ import { PreSummonAbAttr, PreSwitchOutAbAttr, } from "#app/data/abilities/ability"; -import { ForceSwitchOutAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; import { getPokeballTintColor } from "#app/data/pokeball"; -import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms"; +import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms/form-change-triggers"; import { TrainerSlot } from "#enums/trainer-slot"; import type Pokemon from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { SwitchEffectTransferModifier } from "#app/modifier/modifier"; -import { Command } from "#app/ui/command-ui-handler"; +import { Command } from "#enums/command"; import i18next from "i18next"; import { SummonPhase } from "./summon-phase"; import { SubstituteTag } from "#app/data/battler-tags"; @@ -226,7 +225,7 @@ export class SwitchSummonPhase extends SummonPhase { const currentCommand = globalScene.currentBattle.turnCommands[this.fieldIndex]?.command; const lastPokemonIsForceSwitchedAndNotFainted = - lastUsedMove?.hasAttr(ForceSwitchOutAttr) && !this.lastPokemon.isFainted(); + lastUsedMove?.hasAttr("ForceSwitchOutAttr") && !this.lastPokemon.isFainted(); const lastPokemonHasForceSwitchAbAttr = this.lastPokemon.hasAbilityWithAttr(PostDamageForceSwitchAbAttr) && !this.lastPokemon.isFainted(); diff --git a/src/phases/tera-phase.ts b/src/phases/tera-phase.ts index 5f403f5419e..a6025e20488 100644 --- a/src/phases/tera-phase.ts +++ b/src/phases/tera-phase.ts @@ -5,8 +5,9 @@ import i18next from "i18next"; import { globalScene } from "#app/global-scene"; import { PokemonType } from "#enums/pokemon-type"; import { achvs } from "#app/system/achv"; -import { SpeciesFormChangeTeraTrigger } from "#app/data/pokemon-forms"; -import { CommonAnim, CommonBattleAnim } from "#app/data/battle-anims"; +import { SpeciesFormChangeTeraTrigger } from "#app/data/pokemon-forms/form-change-triggers"; +import { CommonBattleAnim } from "#app/data/battle-anims"; +import { CommonAnim } from "#enums/move-anims-common"; export class TeraPhase extends BattlePhase { public readonly phaseName = "TeraPhase"; diff --git a/src/phases/title-phase.ts b/src/phases/title-phase.ts index 37ce294f237..26311d52ab8 100644 --- a/src/phases/title-phase.ts +++ b/src/phases/title-phase.ts @@ -3,7 +3,8 @@ import { BattleType } from "#enums/battle-type"; import { fetchDailyRunSeed, getDailyRunStarters } from "#app/data/daily-run"; import { Gender } from "#app/data/gender"; import { getBiomeKey } from "#app/field/arena"; -import { GameMode, GameModes, getGameMode } from "#app/game-mode"; +import { GameMode, getGameMode } from "#app/game-mode"; +import { GameModes } from "#enums/game-modes"; import type { Modifier } from "#app/modifier/modifier"; import { getDailyRunStarterModifiers, diff --git a/src/phases/toggle-double-position-phase.ts b/src/phases/toggle-double-position-phase.ts index a6b8705f580..596bf87eb5b 100644 --- a/src/phases/toggle-double-position-phase.ts +++ b/src/phases/toggle-double-position-phase.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import { FieldPosition } from "#app/field/pokemon"; +import { FieldPosition } from "#enums/field-position"; import { BattlePhase } from "./battle-phase"; export class ToggleDoublePositionPhase extends BattlePhase { diff --git a/src/phases/turn-end-phase.ts b/src/phases/turn-end-phase.ts index 85590d667d6..a539b234a18 100644 --- a/src/phases/turn-end-phase.ts +++ b/src/phases/turn-end-phase.ts @@ -1,5 +1,5 @@ import { applyPostTurnAbAttrs, PostTurnAbAttr } from "#app/data/abilities/ability"; -import { BattlerTagLapseType } from "#app/data/battler-tags"; +import { BattlerTagLapseType } from "#enums/battler-tag-lapse-type"; import { TerrainType } from "#app/data/terrain"; import { WeatherType } from "#app/enums/weather-type"; import { TurnEndEvent } from "#app/events/battle-scene"; diff --git a/src/phases/turn-init-phase.ts b/src/phases/turn-init-phase.ts index e9d6f60af5e..8d0508c5ebb 100644 --- a/src/phases/turn-init-phase.ts +++ b/src/phases/turn-init-phase.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { handleMysteryEncounterBattleStartEffects, handleMysteryEncounterTurnStartEffects, diff --git a/src/phases/turn-start-phase.ts b/src/phases/turn-start-phase.ts index 557b67b6091..e9a8a82afdc 100644 --- a/src/phases/turn-start-phase.ts +++ b/src/phases/turn-start-phase.ts @@ -1,15 +1,14 @@ import { applyAbAttrs, BypassSpeedChanceAbAttr, PreventBypassSpeedChanceAbAttr } from "#app/data/abilities/ability"; -import { MoveHeaderAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { Stat } from "#app/enums/stat"; import type Pokemon from "#app/field/pokemon"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { BypassSpeedChanceModifier } from "#app/modifier/modifier"; -import { Command } from "#app/ui/command-ui-handler"; +import { Command } from "#enums/command"; import { randSeedShuffle, BooleanHolder } from "#app/utils/common"; import { FieldPhase } from "./field-phase"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { TrickRoomTag } from "#app/data/arena-tag"; import { SwitchType } from "#enums/switch-type"; import { globalScene } from "#app/global-scene"; @@ -168,7 +167,7 @@ export class TurnStartPhase extends FieldPhase { const move = pokemon.getMoveset().find(m => m.moveId === queuedMove.move && m.ppUsed < m.getMovePp()) || new PokemonMove(queuedMove.move); - if (move.getMove().hasAttr(MoveHeaderAttr)) { + if (move.getMove().hasAttr("MoveHeaderAttr")) { phaseManager.unshiftNew("MoveHeaderPhase", pokemon, move); } if (pokemon.isPlayer()) { diff --git a/src/phases/victory-phase.ts b/src/phases/victory-phase.ts index ca24e474cde..bf6ea6d4a43 100644 --- a/src/phases/victory-phase.ts +++ b/src/phases/victory-phase.ts @@ -1,4 +1,4 @@ -import type { BattlerIndex } from "#app/battle"; +import type { BattlerIndex } from "#enums/battler-index"; import { ClassicFixedBossWaves } from "#enums/fixed-boss-waves"; import { BattleType } from "#enums/battle-type"; import type { CustomModifierSettings } from "#app/modifier/modifier-type"; diff --git a/src/phases/weather-effect-phase.ts b/src/phases/weather-effect-phase.ts index 2918cd462df..0873283652e 100644 --- a/src/phases/weather-effect-phase.ts +++ b/src/phases/weather-effect-phase.ts @@ -8,13 +8,13 @@ import { applyPostWeatherLapseAbAttrs, PostWeatherLapseAbAttr, } from "#app/data/abilities/ability"; -import { CommonAnim } from "#app/data/battle-anims"; +import { CommonAnim } from "#enums/move-anims-common"; import type { Weather } from "#app/data/weather"; import { getWeatherDamageMessage, getWeatherLapseMessage } from "#app/data/weather"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { WeatherType } from "#app/enums/weather-type"; import type Pokemon from "#app/field/pokemon"; -import { HitResult } from "#app/field/pokemon"; +import { HitResult } from "#enums/hit-result"; import { BooleanHolder, toDmgValue } from "#app/utils/common"; import { CommonAnimPhase } from "./common-anim-phase"; diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 2949ecd51cf..31c7ad7e41c 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -14,7 +14,8 @@ import PokemonData from "#app/system/pokemon-data"; import PersistentModifierData from "#app/system/modifier-data"; import ArenaData from "#app/system/arena-data"; import { Unlockables } from "#app/system/unlockables"; -import { GameModes, getGameMode } from "#app/game-mode"; +import { getGameMode } from "#app/game-mode"; +import { GameModes } from "#enums/game-modes"; import { BattleType } from "#enums/battle-type"; import TrainerData from "#app/system/trainer-data"; import { trainerConfigs } from "#app/data/trainers/trainer-config"; @@ -31,7 +32,7 @@ import { GameStats } from "#app/system/game-stats"; import { Tutorial } from "#app/tutorial"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { allMoves } from "#app/data/data-lists"; -import { TrainerVariant } from "#app/field/trainer"; +import { TrainerVariant } from "#enums/trainer-variant"; import type { Variant } from "#app/sprites/variant"; import { setSettingGamepad, SettingGamepad, settingGamepadDefaults } from "#app/system/settings/settings-gamepad"; import type { SettingKeyboard } from "#app/system/settings/settings-keyboard"; @@ -46,7 +47,8 @@ import { GameDataType } from "#enums/game-data-type"; import type { MoveId } from "#enums/move-id"; import { PlayerGender } from "#enums/player-gender"; import { SpeciesId } from "#enums/species-id"; -import { applyChallenges, ChallengeType } from "#app/data/challenge"; +import { applyChallenges } from "#app/data/challenge"; +import { ChallengeType } from "#enums/challenge-type"; import { WeatherType } from "#enums/weather-type"; import { TerrainType } from "#app/data/terrain"; import { RUN_HISTORY_LIMIT } from "#app/ui/run-history-ui-handler"; @@ -62,40 +64,12 @@ import { ArenaTrapTag } from "#app/data/arena-tag"; import { pokemonFormChanges } from "#app/data/pokemon-forms"; import type { PokemonType } from "#enums/pokemon-type"; import type { DexData, DexEntry } from "../@types/dex-data"; +import { DexAttr } from "#enums/dex-attr"; +import { AbilityAttr } from "#enums/ability-attr"; +import { defaultStarterSpecies, saveKey } from "#app/constants"; +import { encrypt, decrypt } from "#app/utils/data"; -export const defaultStarterSpecies: SpeciesId[] = [ - SpeciesId.BULBASAUR, - SpeciesId.CHARMANDER, - SpeciesId.SQUIRTLE, - SpeciesId.CHIKORITA, - SpeciesId.CYNDAQUIL, - SpeciesId.TOTODILE, - SpeciesId.TREECKO, - SpeciesId.TORCHIC, - SpeciesId.MUDKIP, - SpeciesId.TURTWIG, - SpeciesId.CHIMCHAR, - SpeciesId.PIPLUP, - SpeciesId.SNIVY, - SpeciesId.TEPIG, - SpeciesId.OSHAWOTT, - SpeciesId.CHESPIN, - SpeciesId.FENNEKIN, - SpeciesId.FROAKIE, - SpeciesId.ROWLET, - SpeciesId.LITTEN, - SpeciesId.POPPLIO, - SpeciesId.GROOKEY, - SpeciesId.SCORBUNNY, - SpeciesId.SOBBLE, - SpeciesId.SPRIGATITO, - SpeciesId.FUECOCO, - SpeciesId.QUAXLY, -]; - -const saveKey = "x0i2O7WRiANTqPmZ"; // Temporary; secure encryption is not yet necessary - -export function getDataTypeKey(dataType: GameDataType, slotId = 0): string { +function getDataTypeKey(dataType: GameDataType, slotId = 0): string { switch (dataType) { case GameDataType.SYSTEM: return "data"; @@ -117,20 +91,6 @@ export function getDataTypeKey(dataType: GameDataType, slotId = 0): string { } } -export function encrypt(data: string, bypassLogin: boolean): string { - return (bypassLogin - ? (data: string) => btoa(encodeURIComponent(data)) - : (data: string) => AES.encrypt(data, saveKey))(data) as unknown as string; // TODO: is this correct? -} - -export function decrypt(data: string, bypassLogin: boolean): string { - return ( - bypassLogin - ? (data: string) => decodeURIComponent(atob(data)) - : (data: string) => AES.decrypt(data, saveKey).toString(enc.Utf8) - )(data); -} - // TODO: Move all these exported interfaces to @types export interface SystemSaveData { trainerId: number; @@ -214,10 +174,6 @@ export interface StarterAttributes { tera?: PokemonType; } -export interface StarterPreferences { - [key: number]: StarterAttributes; -} - export interface DexAttrProps { shiny: boolean; female: boolean; @@ -234,53 +190,6 @@ export interface RunEntry { isFavorite: boolean; } -export const DexAttr = { - NON_SHINY: 1n, - SHINY: 2n, - MALE: 4n, - FEMALE: 8n, - DEFAULT_VARIANT: 16n, - VARIANT_2: 32n, - VARIANT_3: 64n, - DEFAULT_FORM: 128n, -}; - -export const AbilityAttr = { - ABILITY_1: 1, - ABILITY_2: 2, - ABILITY_HIDDEN: 4, -}; - -// the latest data saved/loaded for the Starter Preferences. Required to reduce read/writes. Initialize as "{}", since this is the default value and no data needs to be stored if present. -// if they ever add private static variables, move this into StarterPrefs -const StarterPrefers_DEFAULT: string = "{}"; -let StarterPrefers_private_latest: string = StarterPrefers_DEFAULT; - -// called on starter selection show once -export function loadStarterPreferences(): StarterPreferences { - return JSON.parse( - (StarterPrefers_private_latest = - localStorage.getItem(`starterPrefs_${loggedInUser?.username}`) || StarterPrefers_DEFAULT), - ); -} - -// called on starter selection clear, always -export function saveStarterPreferences(prefs: StarterPreferences): void { - const pStr: string = JSON.stringify(prefs); - if (pStr !== StarterPrefers_private_latest) { - // something changed, store the update - localStorage.setItem(`starterPrefs_${loggedInUser?.username}`, pStr); - // update the latest prefs - StarterPrefers_private_latest = pStr; - } -} -// This is its own class as StarterPreferences... -// - don't need to be loaded on startup -// - isn't stored with other data -// - don't require to be encrypted -// - shouldn't require calls outside of the starter selection -export class StarterPrefs {} - export interface StarterDataEntry { moveset: StarterMoveset | StarterFormMoveData | null; eggMoves: number; diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index 62fb2f4a2e4..7571f0cc82f 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -5,7 +5,8 @@ import { Nature } from "#enums/nature"; import { PokeballType } from "#enums/pokeball"; import { getPokemonSpecies, getPokemonSpeciesForm } from "../data/pokemon-species"; import { Status } from "../data/status-effect"; -import Pokemon, { EnemyPokemon, PokemonBattleData, PokemonMove, PokemonSummonData } from "../field/pokemon"; +import Pokemon, { EnemyPokemon, PokemonBattleData, PokemonSummonData } from "../field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { TrainerSlot } from "#enums/trainer-slot"; import type { Variant } from "#app/sprites/variant"; import type { BiomeId } from "#enums/biome-id"; diff --git a/src/system/trainer-data.ts b/src/system/trainer-data.ts index 0e6298309bc..7c9bffd99ee 100644 --- a/src/system/trainer-data.ts +++ b/src/system/trainer-data.ts @@ -1,5 +1,6 @@ import type { TrainerType } from "#enums/trainer-type"; -import Trainer, { TrainerVariant } from "../field/trainer"; +import Trainer from "../field/trainer"; +import { TrainerVariant } from "#enums/trainer-variant"; export default class TrainerData { public trainerType: TrainerType; diff --git a/src/system/unlockables.ts b/src/system/unlockables.ts index 2c396aad1f9..f64d4d33966 100644 --- a/src/system/unlockables.ts +++ b/src/system/unlockables.ts @@ -1,5 +1,6 @@ import i18next from "i18next"; -import { GameMode, GameModes } from "../game-mode"; +import { GameMode } from "../game-mode"; +import { GameModes } from "#enums/game-modes"; export enum Unlockables { ENDLESS_MODE, diff --git a/src/system/version_migration/versions/v1_0_4.ts b/src/system/version_migration/versions/v1_0_4.ts index 9e30ccdc2a7..fbbde49bc08 100644 --- a/src/system/version_migration/versions/v1_0_4.ts +++ b/src/system/version_migration/versions/v1_0_4.ts @@ -1,6 +1,8 @@ import { SettingKeys } from "#app/system/settings/settings"; import type { SystemSaveData, SessionSaveData } from "#app/system/game-data"; -import { AbilityAttr, defaultStarterSpecies, DexAttr } from "#app/system/game-data"; +import { defaultStarterSpecies } from "#app/constants"; +import { AbilityAttr } from "#enums/ability-attr"; +import { DexAttr } from "#enums/dex-attr"; import { allSpecies } from "#app/data/pokemon-species"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import { isNullOrUndefined } from "#app/utils/common"; diff --git a/src/system/version_migration/versions/v1_7_0.ts b/src/system/version_migration/versions/v1_7_0.ts index dc7c0f48640..e309959317e 100644 --- a/src/system/version_migration/versions/v1_7_0.ts +++ b/src/system/version_migration/versions/v1_7_0.ts @@ -2,7 +2,8 @@ import type { SessionSaveMigrator } from "#app/@types/SessionSaveMigrator"; import type { SystemSaveMigrator } from "#app/@types/SystemSaveMigrator"; import { getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; import { globalScene } from "#app/global-scene"; -import { DexAttr, type SessionSaveData, type SystemSaveData } from "#app/system/game-data"; +import type { SessionSaveData, SystemSaveData } from "#app/system/game-data"; +import { DexAttr } from "#enums/dex-attr"; import { isNullOrUndefined } from "#app/utils/common"; /** diff --git a/src/system/version_migration/versions/v1_8_3.ts b/src/system/version_migration/versions/v1_8_3.ts index cce37a53767..bd963290800 100644 --- a/src/system/version_migration/versions/v1_8_3.ts +++ b/src/system/version_migration/versions/v1_8_3.ts @@ -1,6 +1,7 @@ import type { SystemSaveMigrator } from "#app/@types/SystemSaveMigrator"; import { getPokemonSpecies } from "#app/data/pokemon-species"; -import { DexAttr, type SystemSaveData } from "#app/system/game-data"; +import type { SystemSaveData } from "#app/system/game-data"; +import { DexAttr } from "#enums/dex-attr"; import { SpeciesId } from "#enums/species-id"; /** diff --git a/src/system/version_migration/versions/v1_9_0.ts b/src/system/version_migration/versions/v1_9_0.ts index 0f22b85d072..0bd5a422ffb 100644 --- a/src/system/version_migration/versions/v1_9_0.ts +++ b/src/system/version_migration/versions/v1_9_0.ts @@ -1,5 +1,5 @@ import type { SessionSaveMigrator } from "#app/@types/SessionSaveMigrator"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import type { SessionSaveData } from "#app/system/game-data"; import type PokemonData from "#app/system/pokemon-data"; import { MoveId } from "#enums/move-id"; diff --git a/src/ui/arena-flyout.ts b/src/ui/arena-flyout.ts index ab3bd13b47a..fec02ffb660 100644 --- a/src/ui/arena-flyout.ts +++ b/src/ui/arena-flyout.ts @@ -1,6 +1,7 @@ import { addTextObject, TextStyle } from "./text"; import { globalScene } from "#app/global-scene"; -import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; +import { ArenaTrapTag } from "#app/data/arena-tag"; +import { ArenaTagSide } from "#enums/arena-tag-side"; import { WeatherType } from "#enums/weather-type"; import { TerrainType } from "#app/data/terrain"; import { addWindow, WindowVariant } from "./ui-theme"; diff --git a/src/ui/ball-ui-handler.ts b/src/ui/ball-ui-handler.ts index bb1e8d0e85e..11fb485164a 100644 --- a/src/ui/ball-ui-handler.ts +++ b/src/ui/ball-ui-handler.ts @@ -1,6 +1,6 @@ import { getPokeballName } from "../data/pokeball"; import { addTextObject, getTextStyleOptions, TextStyle } from "./text"; -import { Command } from "./command-ui-handler"; +import { Command } from "#enums/command"; import { UiMode } from "#enums/ui-mode"; import UiHandler from "./ui-handler"; import { addWindow } from "./ui-theme"; diff --git a/src/ui/command-ui-handler.ts b/src/ui/command-ui-handler.ts index 0d38672323a..8df399b6d9b 100644 --- a/src/ui/command-ui-handler.ts +++ b/src/ui/command-ui-handler.ts @@ -11,14 +11,7 @@ import { TerastallizeAccessModifier } from "#app/modifier/modifier"; import { PokemonType } from "#enums/pokemon-type"; import { getTypeRgb } from "#app/data/type"; import { SpeciesId } from "#enums/species-id"; - -export enum Command { - FIGHT = 0, - BALL, - POKEMON, - RUN, - TERA, -} +import { Command } from "#enums/command"; export default class CommandUiHandler extends UiHandler { private commandsContainer: Phaser.GameObjects.Container; diff --git a/src/ui/fight-ui-handler.ts b/src/ui/fight-ui-handler.ts index 3fe06cdf039..f30c7a4935c 100644 --- a/src/ui/fight-ui-handler.ts +++ b/src/ui/fight-ui-handler.ts @@ -3,14 +3,15 @@ import { globalScene } from "#app/global-scene"; import { addTextObject, TextStyle } from "./text"; import { getTypeDamageMultiplierColor } from "#app/data/type"; import { PokemonType } from "#enums/pokemon-type"; -import { Command } from "./command-ui-handler"; +import { Command } from "#enums/command"; import { UiMode } from "#enums/ui-mode"; import UiHandler from "./ui-handler"; import { getLocalizedSpriteKey, fixedInt, padInt } from "#app/utils/common"; import { MoveCategory } from "#enums/MoveCategory"; import i18next from "i18next"; import { Button } from "#enums/buttons"; -import type { EnemyPokemon, PokemonMove } from "#app/field/pokemon"; +import type { EnemyPokemon } from "#app/field/pokemon"; +import type { PokemonMove } from "#app/data/moves/pokemon-move"; import type Pokemon from "#app/field/pokemon"; import type { CommandPhase } from "#app/phases/command-phase"; import MoveInfoOverlay from "./move-info-overlay"; diff --git a/src/ui/game-stats-ui-handler.ts b/src/ui/game-stats-ui-handler.ts index dc184a34866..4213a244fdb 100644 --- a/src/ui/game-stats-ui-handler.ts +++ b/src/ui/game-stats-ui-handler.ts @@ -5,7 +5,7 @@ import UiHandler from "#app/ui/ui-handler"; import { addWindow } from "#app/ui/ui-theme"; import { getPlayTimeString, formatFancyLargeNumber, toReadableString } from "#app/utils/common"; import type { GameData } from "#app/system/game-data"; -import { DexAttr } from "#app/system/game-data"; +import { DexAttr } from "#enums/dex-attr"; import { speciesStarterCosts } from "#app/data/balance/starters"; import { Button } from "#enums/buttons"; import i18next from "i18next"; diff --git a/src/ui/hatched-pokemon-container.ts b/src/ui/hatched-pokemon-container.ts index 9d1c13e19d5..8b9a5309a9c 100644 --- a/src/ui/hatched-pokemon-container.ts +++ b/src/ui/hatched-pokemon-container.ts @@ -1,7 +1,7 @@ import type { EggHatchData } from "#app/data/egg-hatch-data"; import { Gender } from "#app/data/gender"; import { getVariantTint } from "#app/sprites/variant"; -import { DexAttr } from "#app/system/game-data"; +import { DexAttr } from "#enums/dex-attr"; import { globalScene } from "#app/global-scene"; import type PokemonSpecies from "#app/data/pokemon-species"; import type PokemonIconAnimHandler from "./pokemon-icon-anim-handler"; diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 6ce192751df..f60bfa808ca 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -1,8 +1,9 @@ -import type { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import type { PokemonMove } from "#app/data/moves/pokemon-move"; import type Pokemon from "#app/field/pokemon"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import { addBBCodeTextObject, addTextObject, getTextColor, TextStyle } from "#app/ui/text"; -import { Command } from "#app/ui/command-ui-handler"; +import { Command } from "#enums/command"; import MessageUiHandler from "#app/ui/message-ui-handler"; import { UiMode } from "#enums/ui-mode"; import { BooleanHolder, toReadableString, randInt, getLocalizedSpriteKey } from "#app/utils/common"; @@ -11,17 +12,18 @@ import { PokemonHeldItemModifier, SwitchEffectTransferModifier, } from "#app/modifier/modifier"; -import { ForceSwitchOutAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; import { Gender, getGenderColor, getGenderSymbol } from "#app/data/gender"; import { StatusEffect } from "#enums/status-effect"; import PokemonIconAnimHandler, { PokemonIconAnimMode } from "#app/ui/pokemon-icon-anim-handler"; import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { addWindow } from "#app/ui/ui-theme"; -import { SpeciesFormChangeItemTrigger, FormChangeItem } from "#app/data/pokemon-forms"; +import { SpeciesFormChangeItemTrigger } from "#app/data/pokemon-forms/form-change-triggers"; +import { FormChangeItem } from "#enums/form-change-item"; import { getVariantTint } from "#app/sprites/variant"; import { Button } from "#enums/buttons"; -import { applyChallenges, ChallengeType } from "#app/data/challenge"; +import { applyChallenges } from "#app/data/challenge"; +import { ChallengeType } from "#enums/challenge-type"; import MoveInfoOverlay from "#app/ui/move-info-overlay"; import i18next from "i18next"; import type BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; @@ -1175,7 +1177,7 @@ export default class PartyUiHandler extends MessageUiHandler { return !!( this.partyUiMode === PartyUiMode.FAINT_SWITCH && moveHistory.length && - allMoves[moveHistory[moveHistory.length - 1].move].getAttrs(ForceSwitchOutAttr)[0]?.isBatonPass() && + allMoves[moveHistory[moveHistory.length - 1].move].getAttrs("ForceSwitchOutAttr")[0]?.isBatonPass() && moveHistory[moveHistory.length - 1].result === MoveResult.SUCCESS ); } diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index a81265e1a55..7ef4f8f920b 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -22,7 +22,8 @@ import { starterPassiveAbilities } from "#app/data/balance/passives"; import { PokemonType } from "#enums/pokemon-type"; import type { StarterAttributes } from "#app/system/game-data"; import type { DexEntry } from "#app/@types/dex-data"; -import { AbilityAttr, DexAttr } from "#app/system/game-data"; +import { AbilityAttr } from "#enums/ability-attr"; +import { DexAttr } from "#enums/dex-attr"; import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import MessageUiHandler from "#app/ui/message-ui-handler"; import { StatsContainer } from "#app/ui/stats-container"; diff --git a/src/ui/pokedex-ui-handler.ts b/src/ui/pokedex-ui-handler.ts index 96451041306..5b292e7232f 100644 --- a/src/ui/pokedex-ui-handler.ts +++ b/src/ui/pokedex-ui-handler.ts @@ -11,9 +11,12 @@ import { allSpecies, getPokemonSpeciesForm, getPokerusStarters, normalForm } fro import { getStarterValueFriendshipCap, speciesStarterCosts, POKERUS_STARTER_COUNT } from "#app/data/balance/starters"; import { catchableSpecies } from "#app/data/balance/biomes"; import { PokemonType } from "#enums/pokemon-type"; -import type { DexAttrProps, StarterAttributes, StarterPreferences } from "#app/system/game-data"; +import type { DexAttrProps, StarterAttributes } from "#app/system/game-data"; +import type { StarterPreferences } from "#app/utils/data"; import type { DexEntry } from "#app/@types/dex-data"; -import { AbilityAttr, DexAttr, loadStarterPreferences } from "#app/system/game-data"; +import { loadStarterPreferences } from "#app/utils/data"; +import { AbilityAttr } from "#enums/ability-attr"; +import { DexAttr } from "#enums/dex-attr"; import MessageUiHandler from "#app/ui/message-ui-handler"; import PokemonIconAnimHandler, { PokemonIconAnimMode } from "#app/ui/pokemon-icon-anim-handler"; import { TextStyle, addTextObject } from "#app/ui/text"; diff --git a/src/ui/pokemon-info-container.ts b/src/ui/pokemon-info-container.ts index 3dbe3b7af7d..0056c3e2f11 100644 --- a/src/ui/pokemon-info-container.ts +++ b/src/ui/pokemon-info-container.ts @@ -8,7 +8,7 @@ import type Pokemon from "../field/pokemon"; import i18next from "i18next"; import type { StarterDataEntry } from "../system/game-data"; import type { DexEntry } from "#app/@types/dex-data"; -import { DexAttr } from "../system/game-data"; +import { DexAttr } from "#enums/dex-attr"; import { fixedInt, getShinyDescriptor } from "#app/utils/common"; import ConfirmUiHandler from "./confirm-ui-handler"; import { StatsContainer } from "./stats-container"; diff --git a/src/ui/run-history-ui-handler.ts b/src/ui/run-history-ui-handler.ts index 92c5a2fde07..06ef590c1e8 100644 --- a/src/ui/run-history-ui-handler.ts +++ b/src/ui/run-history-ui-handler.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import { GameModes } from "../game-mode"; +import { GameModes } from "#enums/game-modes"; import { TextStyle, addTextObject } from "./text"; import { UiMode } from "#enums/ui-mode"; import { addWindow } from "./ui-theme"; @@ -11,7 +11,7 @@ import { Button } from "../enums/buttons"; import { BattleType } from "#enums/battle-type"; import type { RunEntry } from "../system/game-data"; import { PlayerGender } from "#enums/player-gender"; -import { TrainerVariant } from "../field/trainer"; +import { TrainerVariant } from "#enums/trainer-variant"; import { RunDisplayMode } from "#app/ui/run-info-ui-handler"; export type RunSelectCallback = (cursor: number) => void; diff --git a/src/ui/run-info-ui-handler.ts b/src/ui/run-info-ui-handler.ts index c8dade8878f..a4de2215fa4 100644 --- a/src/ui/run-info-ui-handler.ts +++ b/src/ui/run-info-ui-handler.ts @@ -1,4 +1,4 @@ -import { GameModes } from "../game-mode"; +import { GameModes } from "#enums/game-modes"; import UiHandler from "./ui-handler"; import type { SessionSaveData } from "../system/game-data"; import { TextStyle, addTextObject, addBBCodeTextObject, getTextColor } from "./text"; @@ -10,7 +10,7 @@ import type PokemonData from "../system/pokemon-data"; import i18next from "i18next"; import { Button } from "../enums/buttons"; import { BattleType } from "#enums/battle-type"; -import { TrainerVariant } from "../field/trainer"; +import { TrainerVariant } from "#enums/trainer-variant"; import { Challenges } from "#enums/challenges"; import { getLuckString, getLuckTextTint } from "../modifier/modifier-type"; import RoundRectangle from "phaser3-rex-plugins/plugins/roundrectangle"; diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 47226de3354..0b1e690a918 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -22,10 +22,13 @@ import type PokemonSpecies from "#app/data/pokemon-species"; import { allSpecies, getPokemonSpeciesForm, getPokerusStarters } from "#app/data/pokemon-species"; import { getStarterValueFriendshipCap, speciesStarterCosts, POKERUS_STARTER_COUNT } from "#app/data/balance/starters"; import { PokemonType } from "#enums/pokemon-type"; -import { GameModes } from "#app/game-mode"; -import type { DexAttrProps, StarterMoveset, StarterAttributes, StarterPreferences } from "#app/system/game-data"; +import { GameModes } from "#enums/game-modes"; +import type { DexAttrProps, StarterMoveset, StarterAttributes } from "#app/system/game-data"; +import type { StarterPreferences } from "#app/utils/data"; import type { DexEntry } from "#app/@types/dex-data"; -import { AbilityAttr, DexAttr, loadStarterPreferences, saveStarterPreferences } from "#app/system/game-data"; +import { loadStarterPreferences, saveStarterPreferences } from "#app/utils/data"; +import { AbilityAttr } from "#enums/ability-attr"; +import { DexAttr } from "#enums/dex-attr"; import { Tutorial, handleTutorial } from "#app/tutorial"; import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import MessageUiHandler from "#app/ui/message-ui-handler"; @@ -38,7 +41,8 @@ import { Egg } from "#app/data/egg"; import Overrides from "#app/overrides"; import { SettingKeyboard } from "#app/system/settings/settings-keyboard"; import { Passive as PassiveAttr } from "#enums/passive"; -import { applyChallenges, ChallengeType } from "#app/data/challenge"; +import { applyChallenges } from "#app/data/challenge"; +import { ChallengeType } from "#enums/challenge-type"; import MoveInfoOverlay from "#app/ui/move-info-overlay"; import { getEggTierForSpecies } from "#app/data/egg"; import { Device } from "#enums/devices"; diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index a6f640b436f..05b0ea2097f 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -13,7 +13,8 @@ import { formatStat, getShinyDescriptor, } from "#app/utils/common"; -import type { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import type { PokemonMove } from "#app/data/moves/pokemon-move"; import { getStarterValueFriendshipCap, speciesStarterCosts } from "#app/data/balance/starters"; import { argbFromRgba } from "@material/material-color-utilities"; import { getTypeRgb } from "#app/data/type"; diff --git a/src/ui/target-select-ui-handler.ts b/src/ui/target-select-ui-handler.ts index a2f89d38970..8106e4de2da 100644 --- a/src/ui/target-select-ui-handler.ts +++ b/src/ui/target-select-ui-handler.ts @@ -1,8 +1,8 @@ -import { BattlerIndex } from "../battle"; +import { BattlerIndex } from "#enums/battler-index"; import { UiMode } from "#enums/ui-mode"; import UiHandler from "./ui-handler"; import { isNullOrUndefined, fixedInt } from "#app/utils/common"; -import { getMoveTargets } from "../data/moves/move"; +import { getMoveTargets } from "#app/data/moves/move-utils"; import { Button } from "#enums/buttons"; import type { MoveId } from "#enums/move-id"; import type Pokemon from "#app/field/pokemon"; diff --git a/src/utils/data.ts b/src/utils/data.ts index 33623dc5e40..5a28657d034 100644 --- a/src/utils/data.ts +++ b/src/utils/data.ts @@ -1,3 +1,8 @@ +import { loggedInUser } from "#app/account"; +import type { StarterAttributes } from "#app/system/game-data"; +import { AES, enc } from "crypto-js"; +import { saveKey } from "#app/constants"; + /** * Perform a deep copy of an object. * @param values - The object to be deep copied. @@ -38,3 +43,45 @@ export function deepMergeSpriteData(dest: object, source: object) { } } } + +export function encrypt(data: string, bypassLogin: boolean): string { + return (bypassLogin + ? (data: string) => btoa(encodeURIComponent(data)) + : (data: string) => AES.encrypt(data, saveKey))(data) as unknown as string; // TODO: is this correct? +} + +export function decrypt(data: string, bypassLogin: boolean): string { + return ( + bypassLogin + ? (data: string) => decodeURIComponent(atob(data)) + : (data: string) => AES.decrypt(data, saveKey).toString(enc.Utf8) + )(data); +} + +// the latest data saved/loaded for the Starter Preferences. Required to reduce read/writes. Initialize as "{}", since this is the default value and no data needs to be stored if present. +// if they ever add private static variables, move this into StarterPrefs +const StarterPrefers_DEFAULT: string = "{}"; +let StarterPrefers_private_latest: string = StarterPrefers_DEFAULT; + +export interface StarterPreferences { + [key: number]: StarterAttributes; +} +// called on starter selection show once + +export function loadStarterPreferences(): StarterPreferences { + return JSON.parse( + (StarterPrefers_private_latest = + localStorage.getItem(`starterPrefs_${loggedInUser?.username}`) || StarterPrefers_DEFAULT), + ); +} +// called on starter selection clear, always + +export function saveStarterPreferences(prefs: StarterPreferences): void { + const pStr: string = JSON.stringify(prefs); + if (pStr !== StarterPrefers_private_latest) { + // something changed, store the update + localStorage.setItem(`starterPrefs_${loggedInUser?.username}`, pStr); + // update the latest prefs + StarterPrefers_private_latest = pStr; + } +} diff --git a/test/abilities/analytic.test.ts b/test/abilities/analytic.test.ts index bf6ef72c3f1..2cfea64d20e 100644 --- a/test/abilities/analytic.test.ts +++ b/test/abilities/analytic.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { isBetween, toDmgValue } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; diff --git a/test/abilities/aroma_veil.test.ts b/test/abilities/aroma_veil.test.ts index 00baa6b6268..56cce749b9f 100644 --- a/test/abilities/aroma_veil.test.ts +++ b/test/abilities/aroma_veil.test.ts @@ -6,7 +6,7 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import { BattlerTagType } from "#enums/battler-tag-type"; import { ArenaTagType } from "#enums/arena-tag-type"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import type { PlayerPokemon } from "#app/field/pokemon"; describe("Moves - Aroma Veil", () => { diff --git a/test/abilities/battle_bond.test.ts b/test/abilities/battle_bond.test.ts index b4ce73d107b..adb4a9c6e7a 100644 --- a/test/abilities/battle_bond.test.ts +++ b/test/abilities/battle_bond.test.ts @@ -1,4 +1,3 @@ -import { MultiHitAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; import { MultiHitType } from "#enums/MultiHitType"; import { Status } from "#app/data/status-effect"; @@ -66,7 +65,7 @@ describe("Abilities - BATTLE BOND", () => { vi.spyOn(waterShuriken, "calculateBattlePower"); let actualMultiHitType: MultiHitType | null = null; - const multiHitAttr = waterShuriken.getAttrs(MultiHitAttr)[0]; + const multiHitAttr = waterShuriken.getAttrs("MultiHitAttr")[0]; vi.spyOn(multiHitAttr, "getHitCount").mockImplementation(() => { actualMultiHitType = multiHitAttr.getMultiHitType(); return 3; diff --git a/test/abilities/beast_boost.test.ts b/test/abilities/beast_boost.test.ts index 17ba4020961..1d9eb5c5f2e 100644 --- a/test/abilities/beast_boost.test.ts +++ b/test/abilities/beast_boost.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/abilities/commander.test.ts b/test/abilities/commander.test.ts index bb2670ec2f0..39d9d0f4d7f 100644 --- a/test/abilities/commander.test.ts +++ b/test/abilities/commander.test.ts @@ -1,11 +1,11 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { BattlerTagType } from "#enums/battler-tag-type"; import { PokemonAnimType } from "#enums/pokemon-anim-type"; import type { EffectiveStat } from "#enums/stat"; import { Stat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; import { WeatherType } from "#enums/weather-type"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/abilities/dancer.test.ts b/test/abilities/dancer.test.ts index 518c96ea124..2a4a3c36bcc 100644 --- a/test/abilities/dancer.test.ts +++ b/test/abilities/dancer.test.ts @@ -1,5 +1,5 @@ -import { BattlerIndex } from "#app/battle"; -import { MoveResult } from "#app/field/pokemon"; +import { BattlerIndex } from "#enums/battler-index"; +import { MoveResult } from "#enums/move-result"; import type { MovePhase } from "#app/phases/move-phase"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; diff --git a/test/abilities/desolate-land.test.ts b/test/abilities/desolate-land.test.ts index bcd980187ac..90565d9caf8 100644 --- a/test/abilities/desolate-land.test.ts +++ b/test/abilities/desolate-land.test.ts @@ -1,7 +1,7 @@ import { PokeballType } from "#app/enums/pokeball"; import { WeatherType } from "#app/enums/weather-type"; import type { CommandPhase } from "#app/phases/command-phase"; -import { Command } from "#app/ui/command-ui-handler"; +import { Command } from "#enums/command"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/abilities/disguise.test.ts b/test/abilities/disguise.test.ts index 15ded41527a..64e0715774d 100644 --- a/test/abilities/disguise.test.ts +++ b/test/abilities/disguise.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { toDmgValue } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; diff --git a/test/abilities/early_bird.test.ts b/test/abilities/early_bird.test.ts index e158ce1888b..e19f2653b57 100644 --- a/test/abilities/early_bird.test.ts +++ b/test/abilities/early_bird.test.ts @@ -1,5 +1,5 @@ import { Status } from "#app/data/status-effect"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/abilities/flash_fire.test.ts b/test/abilities/flash_fire.test.ts index 8fabda95c80..92bd7b52e57 100644 --- a/test/abilities/flash_fire.test.ts +++ b/test/abilities/flash_fire.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { SpeciesId } from "#enums/species-id"; import { MovePhase } from "#app/phases/move-phase"; diff --git a/test/abilities/flower_gift.test.ts b/test/abilities/flower_gift.test.ts index d4a03bb2330..26180492cbd 100644 --- a/test/abilities/flower_gift.test.ts +++ b/test/abilities/flower_gift.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { allAbilities } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { Stat } from "#app/enums/stat"; diff --git a/test/abilities/flower_veil.test.ts b/test/abilities/flower_veil.test.ts index bd76541495d..c59d8c6eb29 100644 --- a/test/abilities/flower_veil.test.ts +++ b/test/abilities/flower_veil.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/abilities/forecast.test.ts b/test/abilities/forecast.test.ts index b87519ae80a..8d3a679c917 100644 --- a/test/abilities/forecast.test.ts +++ b/test/abilities/forecast.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { allAbilities } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { WeatherType } from "#app/enums/weather-type"; diff --git a/test/abilities/friend_guard.test.ts b/test/abilities/friend_guard.test.ts index d401fa96feb..c5809e18e96 100644 --- a/test/abilities/friend_guard.test.ts +++ b/test/abilities/friend_guard.test.ts @@ -4,7 +4,7 @@ import { AbilityId } from "#enums/ability-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { allAbilities } from "#app/data/data-lists"; import { allMoves } from "#app/data/data-lists"; import { MoveCategory } from "#enums/MoveCategory"; diff --git a/test/abilities/good_as_gold.test.ts b/test/abilities/good_as_gold.test.ts index d6c80a5347f..85fadd472dc 100644 --- a/test/abilities/good_as_gold.test.ts +++ b/test/abilities/good_as_gold.test.ts @@ -1,5 +1,5 @@ -import { BattlerIndex } from "#app/battle"; -import { ArenaTagSide } from "#app/data/arena-tag"; +import { BattlerIndex } from "#enums/battler-index"; +import { ArenaTagSide } from "#enums/arena-tag-side"; import { allAbilities } from "#app/data/data-lists"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import { BattlerTagType } from "#app/enums/battler-tag-type"; diff --git a/test/abilities/gorilla_tactics.test.ts b/test/abilities/gorilla_tactics.test.ts index 3ad138749a8..1759267f16d 100644 --- a/test/abilities/gorilla_tactics.test.ts +++ b/test/abilities/gorilla_tactics.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; import { Stat } from "#app/enums/stat"; diff --git a/test/abilities/gulp_missile.test.ts b/test/abilities/gulp_missile.test.ts index b56b316484f..b41eea9ce18 100644 --- a/test/abilities/gulp_missile.test.ts +++ b/test/abilities/gulp_missile.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import type Pokemon from "#app/field/pokemon"; import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; diff --git a/test/abilities/harvest.test.ts b/test/abilities/harvest.test.ts index 5a6ddf35459..40e6a6abd62 100644 --- a/test/abilities/harvest.test.ts +++ b/test/abilities/harvest.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { PostTurnRestoreBerryAbAttr } from "#app/data/abilities/ability"; import type Pokemon from "#app/field/pokemon"; import { BerryModifier, PreserveBerryModifier } from "#app/modifier/modifier"; diff --git a/test/abilities/honey_gather.test.ts b/test/abilities/honey_gather.test.ts index a069654ae21..06d351b2a61 100644 --- a/test/abilities/honey_gather.test.ts +++ b/test/abilities/honey_gather.test.ts @@ -1,5 +1,5 @@ import type { CommandPhase } from "#app/phases/command-phase"; -import { Command } from "#app/ui/command-ui-handler"; +import { Command } from "#enums/command"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/abilities/ice_face.test.ts b/test/abilities/ice_face.test.ts index 6ef91981cf3..2899120db5a 100644 --- a/test/abilities/ice_face.test.ts +++ b/test/abilities/ice_face.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; import { QuietFormChangePhase } from "#app/phases/quiet-form-change-phase"; diff --git a/test/abilities/infiltrator.test.ts b/test/abilities/infiltrator.test.ts index 891a716f7a4..03b55e925cd 100644 --- a/test/abilities/infiltrator.test.ts +++ b/test/abilities/infiltrator.test.ts @@ -1,4 +1,4 @@ -import { ArenaTagSide } from "#app/data/arena-tag"; +import { ArenaTagSide } from "#enums/arena-tag-side"; import { allMoves } from "#app/data/data-lists"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; diff --git a/test/abilities/lightningrod.test.ts b/test/abilities/lightningrod.test.ts index 777ccb88ba9..a69f5e94067 100644 --- a/test/abilities/lightningrod.test.ts +++ b/test/abilities/lightningrod.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/abilities/magic_bounce.test.ts b/test/abilities/magic_bounce.test.ts index 8c3eeec974c..3c4ff2ad909 100644 --- a/test/abilities/magic_bounce.test.ts +++ b/test/abilities/magic_bounce.test.ts @@ -1,6 +1,6 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { allAbilities } from "#app/data/data-lists"; -import { ArenaTagSide } from "#app/data/arena-tag"; +import { ArenaTagSide } from "#enums/arena-tag-side"; import { allMoves } from "#app/data/data-lists"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import { BattlerTagType } from "#app/enums/battler-tag-type"; diff --git a/test/abilities/magic_guard.test.ts b/test/abilities/magic_guard.test.ts index c36b35c09b7..40bb3203673 100644 --- a/test/abilities/magic_guard.test.ts +++ b/test/abilities/magic_guard.test.ts @@ -1,4 +1,5 @@ -import { ArenaTagSide, getArenaTag } from "#app/data/arena-tag"; +import { getArenaTag } from "#app/data/arena-tag"; +import { ArenaTagSide } from "#enums/arena-tag-side"; import { getStatusEffectCatchRateMultiplier } from "#app/data/status-effect"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { AbilityId } from "#enums/ability-id"; diff --git a/test/abilities/mirror_armor.test.ts b/test/abilities/mirror_armor.test.ts index 319e47cbfb3..540a3b5d426 100644 --- a/test/abilities/mirror_armor.test.ts +++ b/test/abilities/mirror_armor.test.ts @@ -5,7 +5,7 @@ import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; // TODO: When Magic Bounce is implemented, make a test for its interaction with mirror guard, use screech diff --git a/test/abilities/mold_breaker.test.ts b/test/abilities/mold_breaker.test.ts index 099fb54c998..e2e8a73da9d 100644 --- a/test/abilities/mold_breaker.test.ts +++ b/test/abilities/mold_breaker.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { globalScene } from "#app/global-scene"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; diff --git a/test/abilities/moxie.test.ts b/test/abilities/moxie.test.ts index 04ca68325e6..8b658f60bf6 100644 --- a/test/abilities/moxie.test.ts +++ b/test/abilities/moxie.test.ts @@ -5,7 +5,7 @@ import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { EnemyCommandPhase } from "#app/phases/enemy-command-phase"; import { VictoryPhase } from "#app/phases/victory-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; diff --git a/test/abilities/neutralizing_gas.test.ts b/test/abilities/neutralizing_gas.test.ts index 2d1fef29688..067d164e835 100644 --- a/test/abilities/neutralizing_gas.test.ts +++ b/test/abilities/neutralizing_gas.test.ts @@ -1,6 +1,6 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import type { CommandPhase } from "#app/phases/command-phase"; -import { Command } from "#app/ui/command-ui-handler"; +import { Command } from "#enums/command"; import { PostSummonWeatherChangeAbAttr } from "#app/data/abilities/ability"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; diff --git a/test/abilities/no_guard.test.ts b/test/abilities/no_guard.test.ts index 5b127204f9f..dc35e0e1b9a 100644 --- a/test/abilities/no_guard.test.ts +++ b/test/abilities/no_guard.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; import { AbilityId } from "#enums/ability-id"; diff --git a/test/abilities/normal-move-type-change.test.ts b/test/abilities/normal-move-type-change.test.ts index 578a6ad2a21..03fb5b2e7be 100644 --- a/test/abilities/normal-move-type-change.test.ts +++ b/test/abilities/normal-move-type-change.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { allMoves } from "#app/data/data-lists"; import { PokemonType } from "#enums/pokemon-type"; import { AbilityId } from "#enums/ability-id"; diff --git a/test/abilities/pastel_veil.test.ts b/test/abilities/pastel_veil.test.ts index 8a3aec918d0..b8e8873ed36 100644 --- a/test/abilities/pastel_veil.test.ts +++ b/test/abilities/pastel_veil.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { AbilityId } from "#enums/ability-id"; import { CommandPhase } from "#app/phases/command-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; diff --git a/test/abilities/protosynthesis.test.ts b/test/abilities/protosynthesis.test.ts index 3bf74acaca7..ba7bb5d084b 100644 --- a/test/abilities/protosynthesis.test.ts +++ b/test/abilities/protosynthesis.test.ts @@ -5,7 +5,7 @@ import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; describe("Abilities - Protosynthesis", () => { diff --git a/test/abilities/serene_grace.test.ts b/test/abilities/serene_grace.test.ts index bfdbd5324bb..c5c12fe217e 100644 --- a/test/abilities/serene_grace.test.ts +++ b/test/abilities/serene_grace.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; @@ -6,7 +6,6 @@ import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { allMoves } from "#app/data/data-lists"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { FlinchAttr } from "#app/data/moves/move"; describe("Abilities - Serene Grace", () => { let phaserGame: Phaser.Game; @@ -39,7 +38,7 @@ describe("Abilities - Serene Grace", () => { await game.classicMode.startBattle([SpeciesId.SHUCKLE]); const airSlashMove = allMoves[MoveId.AIR_SLASH]; - const airSlashFlinchAttr = airSlashMove.getAttrs(FlinchAttr)[0]; + const airSlashFlinchAttr = airSlashMove.getAttrs("FlinchAttr")[0]; vi.spyOn(airSlashFlinchAttr, "getMoveChance"); game.move.select(MoveId.AIR_SLASH); diff --git a/test/abilities/sheer_force.test.ts b/test/abilities/sheer_force.test.ts index a5b1cf3b5b2..922025d8be2 100644 --- a/test/abilities/sheer_force.test.ts +++ b/test/abilities/sheer_force.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { PokemonType } from "#enums/pokemon-type"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; @@ -7,7 +7,6 @@ import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { FlinchAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; describe("Abilities - Sheer Force", () => { @@ -43,7 +42,7 @@ describe("Abilities - Sheer Force", () => { const airSlashMove = allMoves[MoveId.AIR_SLASH]; vi.spyOn(airSlashMove, "calculateBattlePower"); - const airSlashFlinchAttr = airSlashMove.getAttrs(FlinchAttr)[0]; + const airSlashFlinchAttr = airSlashMove.getAttrs("FlinchAttr")[0]; vi.spyOn(airSlashFlinchAttr, "getMoveChance"); game.move.select(MoveId.AIR_SLASH); @@ -98,7 +97,7 @@ describe("Abilities - Sheer Force", () => { const enemyPokemon = game.scene.getEnemyPokemon(); const headbuttMove = allMoves[MoveId.HEADBUTT]; vi.spyOn(headbuttMove, "calculateBattlePower"); - const headbuttFlinchAttr = headbuttMove.getAttrs(FlinchAttr)[0]; + const headbuttFlinchAttr = headbuttMove.getAttrs("FlinchAttr")[0]; vi.spyOn(headbuttFlinchAttr, "getMoveChance"); game.move.select(MoveId.HEADBUTT); diff --git a/test/abilities/shield_dust.test.ts b/test/abilities/shield_dust.test.ts index 03b175c3ca5..e071cf7a245 100644 --- a/test/abilities/shield_dust.test.ts +++ b/test/abilities/shield_dust.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { applyAbAttrs, applyPreDefendAbAttrs, diff --git a/test/abilities/speed_boost.test.ts b/test/abilities/speed_boost.test.ts index 245bf22345d..a4445d085f3 100644 --- a/test/abilities/speed_boost.test.ts +++ b/test/abilities/speed_boost.test.ts @@ -6,7 +6,7 @@ import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import type { CommandPhase } from "#app/phases/command-phase"; -import { Command } from "#app/ui/command-ui-handler"; +import { Command } from "#enums/command"; import { AttemptRunPhase } from "#app/phases/attempt-run-phase"; describe("Abilities - Speed Boost", () => { diff --git a/test/abilities/stakeout.test.ts b/test/abilities/stakeout.test.ts index 24c8c47df5c..ba4325e0295 100644 --- a/test/abilities/stakeout.test.ts +++ b/test/abilities/stakeout.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { isBetween } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; diff --git a/test/abilities/storm_drain.test.ts b/test/abilities/storm_drain.test.ts index 36a2112edda..3a6c0aba100 100644 --- a/test/abilities/storm_drain.test.ts +++ b/test/abilities/storm_drain.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/abilities/supreme_overlord.test.ts b/test/abilities/supreme_overlord.test.ts index 6c2ca2d3677..7143b590f68 100644 --- a/test/abilities/supreme_overlord.test.ts +++ b/test/abilities/supreme_overlord.test.ts @@ -2,7 +2,7 @@ import { MoveId } from "#enums/move-id"; import type Move from "#app/data/moves/move"; import { AbilityId } from "#enums/ability-id"; import { SpeciesId } from "#enums/species-id"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; diff --git a/test/abilities/sweet_veil.test.ts b/test/abilities/sweet_veil.test.ts index 131feaf7f56..8a31e676ec5 100644 --- a/test/abilities/sweet_veil.test.ts +++ b/test/abilities/sweet_veil.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { CommandPhase } from "#app/phases/command-phase"; diff --git a/test/abilities/tera_shell.test.ts b/test/abilities/tera_shell.test.ts index 5889115ee95..26babca240d 100644 --- a/test/abilities/tera_shell.test.ts +++ b/test/abilities/tera_shell.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/abilities/unburden.test.ts b/test/abilities/unburden.test.ts index b1b10c378a3..9748b6340f0 100644 --- a/test/abilities/unburden.test.ts +++ b/test/abilities/unburden.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { PostItemLostAbAttr } from "#app/data/abilities/ability"; import { StealHeldItemChanceAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; diff --git a/test/abilities/victory_star.test.ts b/test/abilities/victory_star.test.ts index 77f5de41bb1..a15beac8b2c 100644 --- a/test/abilities/victory_star.test.ts +++ b/test/abilities/victory_star.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; diff --git a/test/abilities/volt_absorb.test.ts b/test/abilities/volt_absorb.test.ts index 2e6abf30885..34dbbbd4783 100644 --- a/test/abilities/volt_absorb.test.ts +++ b/test/abilities/volt_absorb.test.ts @@ -7,7 +7,7 @@ import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; // See also: TypeImmunityAbAttr describe("Abilities - Volt Absorb", () => { diff --git a/test/abilities/wimp_out.test.ts b/test/abilities/wimp_out.test.ts index 2c2ab636961..05c848a75c0 100644 --- a/test/abilities/wimp_out.test.ts +++ b/test/abilities/wimp_out.test.ts @@ -1,5 +1,5 @@ -import { BattlerIndex } from "#app/battle"; -import { ArenaTagSide } from "#app/data/arena-tag"; +import { BattlerIndex } from "#enums/battler-index"; +import { ArenaTagSide } from "#enums/arena-tag-side"; import { allMoves } from "#app/data/data-lists"; import GameManager from "#test/testUtils/gameManager"; import { toDmgValue } from "#app/utils/common"; diff --git a/test/arena/arena_gravity.test.ts b/test/arena/arena_gravity.test.ts index 776bfa0a564..36fe0b58308 100644 --- a/test/arena/arena_gravity.test.ts +++ b/test/arena/arena_gravity.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; diff --git a/test/arena/weather_hail.test.ts b/test/arena/weather_hail.test.ts index 072fbd20498..27cf46fa9f2 100644 --- a/test/arena/weather_hail.test.ts +++ b/test/arena/weather_hail.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; import { WeatherType } from "#enums/weather-type"; diff --git a/test/battle/battle.test.ts b/test/battle/battle.test.ts index b93c913d09a..3eab06e2f48 100644 --- a/test/battle/battle.test.ts +++ b/test/battle/battle.test.ts @@ -1,6 +1,7 @@ import { allSpecies } from "#app/data/pokemon-species"; import { Stat } from "#enums/stat"; -import { GameModes, getGameMode } from "#app/game-mode"; +import { getGameMode } from "#app/game-mode"; +import { GameModes } from "#enums/game-modes"; import { BattleEndPhase } from "#app/phases/battle-end-phase"; import { CommandPhase } from "#app/phases/command-phase"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; diff --git a/test/battle/double_battle.test.ts b/test/battle/double_battle.test.ts index 31bfc480c47..54c573813d7 100644 --- a/test/battle/double_battle.test.ts +++ b/test/battle/double_battle.test.ts @@ -1,6 +1,7 @@ import { Status } from "#app/data/status-effect"; import { AbilityId } from "#enums/ability-id"; -import { GameModes, getGameMode } from "#app/game-mode"; +import { getGameMode } from "#app/game-mode"; +import { GameModes } from "#enums/game-modes"; import { BattleEndPhase } from "#app/phases/battle-end-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; import { MoveId } from "#enums/move-id"; diff --git a/test/battle/inverse_battle.test.ts b/test/battle/inverse_battle.test.ts index b0d9c7bb755..66cab3e2d84 100644 --- a/test/battle/inverse_battle.test.ts +++ b/test/battle/inverse_battle.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { PokemonType } from "#enums/pokemon-type"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; diff --git a/test/battlerTags/octolock.test.ts b/test/battlerTags/octolock.test.ts index 63784ed7f1b..d0214f495fc 100644 --- a/test/battlerTags/octolock.test.ts +++ b/test/battlerTags/octolock.test.ts @@ -1,6 +1,7 @@ import { afterEach, beforeAll, describe, expect, it, vi } from "vitest"; import type Pokemon from "#app/field/pokemon"; -import { BattlerTagLapseType, OctolockTag, TrappedTag } from "#app/data/battler-tags"; +import { OctolockTag, TrappedTag } from "#app/data/battler-tags"; +import { BattlerTagLapseType } from "#enums/battler-tag-lapse-type"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; diff --git a/test/battlerTags/substitute.test.ts b/test/battlerTags/substitute.test.ts index 703e0ae75f6..06aedab19f4 100644 --- a/test/battlerTags/substitute.test.ts +++ b/test/battlerTags/substitute.test.ts @@ -1,9 +1,10 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import type { PokemonTurnData, TurnMove } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import type BattleScene from "#app/battle-scene"; -import { BattlerTagLapseType, BindTag, SubstituteTag } from "#app/data/battler-tags"; +import { BindTag, SubstituteTag } from "#app/data/battler-tags"; +import { BattlerTagLapseType } from "#enums/battler-tag-lapse-type"; import { MoveId } from "#enums/move-id"; import { PokemonAnimType } from "#app/enums/pokemon-anim-type"; import * as messages from "#app/messages"; diff --git a/test/data/status_effect.test.ts b/test/data/status_effect.test.ts index 4a543a04a1b..06e11dfeb76 100644 --- a/test/data/status_effect.test.ts +++ b/test/data/status_effect.test.ts @@ -6,7 +6,7 @@ import { getStatusEffectObtainText, getStatusEffectOverlapText, } from "#app/data/status-effect"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/endless_boss.test.ts b/test/endless_boss.test.ts index 05c6594bad6..6814cf5e12a 100644 --- a/test/endless_boss.test.ts +++ b/test/endless_boss.test.ts @@ -1,6 +1,6 @@ import { BiomeId } from "#enums/biome-id"; import { SpeciesId } from "#enums/species-id"; -import { GameModes } from "#app/game-mode"; +import { GameModes } from "#enums/game-modes"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import GameManager from "#test/testUtils/gameManager"; diff --git a/test/enemy_command.test.ts b/test/enemy_command.test.ts index 8d6d1756a69..fabb1f1fdb0 100644 --- a/test/enemy_command.test.ts +++ b/test/enemy_command.test.ts @@ -5,7 +5,7 @@ import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; import type { EnemyPokemon } from "#app/field/pokemon"; -import { AiType } from "#app/field/pokemon"; +import { AiType } from "#enums/ai-type"; import { randSeedInt } from "#app/utils/common"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; diff --git a/test/escape-calculations.test.ts b/test/escape-calculations.test.ts index fd1e411e786..ca51f40a509 100644 --- a/test/escape-calculations.test.ts +++ b/test/escape-calculations.test.ts @@ -1,6 +1,6 @@ import { AttemptRunPhase } from "#app/phases/attempt-run-phase"; import type { CommandPhase } from "#app/phases/command-phase"; -import { Command } from "#app/ui/command-ui-handler"; +import { Command } from "#enums/command"; import { NumberHolder } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/final_boss.test.ts b/test/final_boss.test.ts index f1f894a5984..d3fcd3214bb 100644 --- a/test/final_boss.test.ts +++ b/test/final_boss.test.ts @@ -1,4 +1,4 @@ -import { GameModes } from "#app/game-mode"; +import { GameModes } from "#enums/game-modes"; import { TurnHeldItemTransferModifier } from "#app/modifier/modifier"; import { AbilityId } from "#enums/ability-id"; import { BiomeId } from "#enums/biome-id"; diff --git a/test/game-mode.test.ts b/test/game-mode.test.ts index 0483d18e492..4a53739c45e 100644 --- a/test/game-mode.test.ts +++ b/test/game-mode.test.ts @@ -1,5 +1,6 @@ import type { GameMode } from "#app/game-mode"; -import { GameModes, getGameMode } from "#app/game-mode"; +import { getGameMode } from "#app/game-mode"; +import { GameModes } from "#enums/game-modes"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import * as Utils from "#app/utils/common"; import GameManager from "#test/testUtils/gameManager"; diff --git a/test/imports.test.ts b/test/imports.test.ts index 540620d8bb4..8a5c735e950 100644 --- a/test/imports.test.ts +++ b/test/imports.test.ts @@ -4,7 +4,7 @@ import { describe, expect, it } from "vitest"; async function importModule() { try { initStatsKeys(); - const { PokemonMove } = await import("#app/field/pokemon"); + const { PokemonMove } = await import("#app/data/moves/pokemon-move"); const { SpeciesId: Species } = await import("#enums/species-id"); return { PokemonMove, diff --git a/test/items/grip_claw.test.ts b/test/items/grip_claw.test.ts index 3c51e7f868d..9c3e6548140 100644 --- a/test/items/grip_claw.test.ts +++ b/test/items/grip_claw.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import type Pokemon from "#app/field/pokemon"; import type { ContactHeldItemTransferChanceModifier } from "#app/modifier/modifier"; import { AbilityId } from "#enums/ability-id"; diff --git a/test/items/multi_lens.test.ts b/test/items/multi_lens.test.ts index be697eabcf8..11e4c04ec21 100644 --- a/test/items/multi_lens.test.ts +++ b/test/items/multi_lens.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { Stat } from "#enums/stat"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; diff --git a/test/items/reviver_seed.test.ts b/test/items/reviver_seed.test.ts index 2ab3c5ffe74..54927130869 100644 --- a/test/items/reviver_seed.test.ts +++ b/test/items/reviver_seed.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { allMoves } from "#app/data/data-lists"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import type { PokemonInstantReviveModifier } from "#app/modifier/modifier"; diff --git a/test/moves/after_you.test.ts b/test/moves/after_you.test.ts index 0e5ee1e7a8f..78372de3fb6 100644 --- a/test/moves/after_you.test.ts +++ b/test/moves/after_you.test.ts @@ -1,6 +1,6 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { AbilityId } from "#enums/ability-id"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import { MovePhase } from "#app/phases/move-phase"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/moves/alluring_voice.test.ts b/test/moves/alluring_voice.test.ts index 2cfb7a76317..132f83cd4c1 100644 --- a/test/moves/alluring_voice.test.ts +++ b/test/moves/alluring_voice.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { BerryPhase } from "#app/phases/berry-phase"; diff --git a/test/moves/assist.test.ts b/test/moves/assist.test.ts index c0bdf2deea2..bc51f8bd06a 100644 --- a/test/moves/assist.test.ts +++ b/test/moves/assist.test.ts @@ -1,6 +1,6 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { Stat } from "#app/enums/stat"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import { CommandPhase } from "#app/phases/command-phase"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; diff --git a/test/moves/aurora_veil.test.ts b/test/moves/aurora_veil.test.ts index 7a00be40d3d..98b490b0e32 100644 --- a/test/moves/aurora_veil.test.ts +++ b/test/moves/aurora_veil.test.ts @@ -1,7 +1,6 @@ import type BattleScene from "#app/battle-scene"; -import { ArenaTagSide } from "#app/data/arena-tag"; +import { ArenaTagSide } from "#enums/arena-tag-side"; import type Move from "#app/data/moves/move"; -import { CritOnlyAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import type Pokemon from "#app/field/pokemon"; @@ -166,7 +165,7 @@ const getMockedMoveDamage = (defender: Pokemon, attacker: Pokemon, move: Move) = const side = defender.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; if (globalScene.arena.getTagOnSide(ArenaTagType.AURORA_VEIL, side)) { - if (move.getAttrs(CritOnlyAttr).length === 0) { + if (move.getAttrs("CritOnlyAttr").length === 0) { globalScene.arena.applyTagsForSide( ArenaTagType.AURORA_VEIL, side, diff --git a/test/moves/baneful_bunker.test.ts b/test/moves/baneful_bunker.test.ts index 80b9b5470b1..eddfa87ead4 100644 --- a/test/moves/baneful_bunker.test.ts +++ b/test/moves/baneful_bunker.test.ts @@ -4,7 +4,7 @@ import GameManager from "#test/testUtils/gameManager"; import { SpeciesId } from "#enums/species-id"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { StatusEffect } from "#app/enums/status-effect"; describe("Moves - Baneful Bunker", () => { diff --git a/test/moves/baton_pass.test.ts b/test/moves/baton_pass.test.ts index b39e51428b1..f6256e95ce8 100644 --- a/test/moves/baton_pass.test.ts +++ b/test/moves/baton_pass.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import GameManager from "#test/testUtils/gameManager"; import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; diff --git a/test/moves/burning_jealousy.test.ts b/test/moves/burning_jealousy.test.ts index 2a74f661922..9e1898d9cd1 100644 --- a/test/moves/burning_jealousy.test.ts +++ b/test/moves/burning_jealousy.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { StatusEffect } from "#app/enums/status-effect"; diff --git a/test/moves/camouflage.test.ts b/test/moves/camouflage.test.ts index 53c44f1386b..03364265179 100644 --- a/test/moves/camouflage.test.ts +++ b/test/moves/camouflage.test.ts @@ -3,7 +3,7 @@ import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; import { TerrainType } from "#app/data/terrain"; import { PokemonType } from "#enums/pokemon-type"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/test/moves/ceaseless_edge.test.ts b/test/moves/ceaseless_edge.test.ts index 65f9b69509d..fcaddfb0d76 100644 --- a/test/moves/ceaseless_edge.test.ts +++ b/test/moves/ceaseless_edge.test.ts @@ -1,4 +1,5 @@ -import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; +import { ArenaTrapTag } from "#app/data/arena-tag"; +import { ArenaTagSide } from "#enums/arena-tag-side"; import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#app/enums/arena-tag-type"; diff --git a/test/moves/chloroblast.test.ts b/test/moves/chloroblast.test.ts index 02f7ac2165c..cf5e791d0b9 100644 --- a/test/moves/chloroblast.test.ts +++ b/test/moves/chloroblast.test.ts @@ -1,4 +1,4 @@ -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/moves/copycat.test.ts b/test/moves/copycat.test.ts index 51d7d36535f..1691cc1478c 100644 --- a/test/moves/copycat.test.ts +++ b/test/moves/copycat.test.ts @@ -1,8 +1,8 @@ -import { BattlerIndex } from "#app/battle"; -import { RandomMoveAttr } from "#app/data/moves/move"; +import { BattlerIndex } from "#enums/battler-index"; +import type { RandomMoveAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; import { Stat } from "#app/enums/stat"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; @@ -27,7 +27,7 @@ describe("Moves - Copycat", () => { }); beforeEach(() => { - randomMoveAttr = allMoves[MoveId.METRONOME].getAttrs(RandomMoveAttr)[0]; + randomMoveAttr = allMoves[MoveId.METRONOME].getAttrs("RandomMoveAttr")[0]; game = new GameManager(phaserGame); game.override .moveset([MoveId.COPYCAT, MoveId.SPIKY_SHIELD, MoveId.SWORDS_DANCE, MoveId.SPLASH]) diff --git a/test/moves/destiny_bond.test.ts b/test/moves/destiny_bond.test.ts index 81c17551bec..a78d46b464b 100644 --- a/test/moves/destiny_bond.test.ts +++ b/test/moves/destiny_bond.test.ts @@ -1,5 +1,5 @@ import type { ArenaTrapTag } from "#app/data/arena-tag"; -import { ArenaTagSide } from "#app/data/arena-tag"; +import { ArenaTagSide } from "#enums/arena-tag-side"; import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; @@ -8,7 +8,7 @@ import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { StatusEffect } from "#enums/status-effect"; import { PokemonInstantReviveModifier } from "#app/modifier/modifier"; diff --git a/test/moves/dig.test.ts b/test/moves/dig.test.ts index 052845ec50d..73540c6ed48 100644 --- a/test/moves/dig.test.ts +++ b/test/moves/dig.test.ts @@ -1,11 +1,11 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import { describe, beforeAll, afterEach, beforeEach, it, expect } from "vitest"; import GameManager from "#test/testUtils/gameManager"; diff --git a/test/moves/disable.test.ts b/test/moves/disable.test.ts index eacf8bf4857..a269a8177aa 100644 --- a/test/moves/disable.test.ts +++ b/test/moves/disable.test.ts @@ -1,5 +1,5 @@ -import { BattlerIndex } from "#app/battle"; -import { MoveResult } from "#app/field/pokemon"; +import { BattlerIndex } from "#enums/battler-index"; +import { MoveResult } from "#enums/move-result"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/moves/dive.test.ts b/test/moves/dive.test.ts index cce1b5a6d26..9c467976775 100644 --- a/test/moves/dive.test.ts +++ b/test/moves/dive.test.ts @@ -1,6 +1,6 @@ import { BattlerTagType } from "#enums/battler-tag-type"; import { StatusEffect } from "#enums/status-effect"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/moves/doodle.test.ts b/test/moves/doodle.test.ts index 686bef144dd..d4d09b3a195 100644 --- a/test/moves/doodle.test.ts +++ b/test/moves/doodle.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { Stat } from "#app/enums/stat"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; diff --git a/test/moves/dragon_cheer.test.ts b/test/moves/dragon_cheer.test.ts index b1eaa3ad747..56feac513a1 100644 --- a/test/moves/dragon_cheer.test.ts +++ b/test/moves/dragon_cheer.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { PokemonType } from "#enums/pokemon-type"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/moves/dragon_tail.test.ts b/test/moves/dragon_tail.test.ts index 07441d9fb2d..8c456f27853 100644 --- a/test/moves/dragon_tail.test.ts +++ b/test/moves/dragon_tail.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { allMoves } from "#app/data/data-lists"; import { Status } from "#app/data/status-effect"; import { Challenges } from "#enums/challenges"; diff --git a/test/moves/dynamax_cannon.test.ts b/test/moves/dynamax_cannon.test.ts index 6207ef9b6ca..2cdba48c0ea 100644 --- a/test/moves/dynamax_cannon.test.ts +++ b/test/moves/dynamax_cannon.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { allMoves } from "#app/data/data-lists"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; diff --git a/test/moves/electrify.test.ts b/test/moves/electrify.test.ts index 00f96d570a3..b6a3cac9fff 100644 --- a/test/moves/electrify.test.ts +++ b/test/moves/electrify.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { PokemonType } from "#enums/pokemon-type"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; diff --git a/test/moves/electro_shot.test.ts b/test/moves/electro_shot.test.ts index 160f90163e3..3f751687c59 100644 --- a/test/moves/electro_shot.test.ts +++ b/test/moves/electro_shot.test.ts @@ -1,7 +1,7 @@ import { BattlerTagType } from "#enums/battler-tag-type"; import { Stat } from "#enums/stat"; import { WeatherType } from "#enums/weather-type"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/moves/encore.test.ts b/test/moves/encore.test.ts index cded90c4a73..120d065d528 100644 --- a/test/moves/encore.test.ts +++ b/test/moves/encore.test.ts @@ -1,6 +1,6 @@ import { BattlerTagType } from "#enums/battler-tag-type"; -import { BattlerIndex } from "#app/battle"; -import { MoveResult } from "#app/field/pokemon"; +import { BattlerIndex } from "#enums/battler-index"; +import { MoveResult } from "#enums/move-result"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/moves/fairy_lock.test.ts b/test/moves/fairy_lock.test.ts index 5624d038595..74524d67b38 100644 --- a/test/moves/fairy_lock.test.ts +++ b/test/moves/fairy_lock.test.ts @@ -1,4 +1,4 @@ -import { ArenaTagSide } from "#app/data/arena-tag"; +import { ArenaTagSide } from "#enums/arena-tag-side"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; diff --git a/test/moves/false_swipe.test.ts b/test/moves/false_swipe.test.ts index 48e4de6fb65..c98b76f1ef1 100644 --- a/test/moves/false_swipe.test.ts +++ b/test/moves/false_swipe.test.ts @@ -1,4 +1,4 @@ -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/moves/fly.test.ts b/test/moves/fly.test.ts index 964d1b65a1e..7d8a6ee659e 100644 --- a/test/moves/fly.test.ts +++ b/test/moves/fly.test.ts @@ -1,13 +1,13 @@ import { BattlerTagType } from "#enums/battler-tag-type"; import { StatusEffect } from "#enums/status-effect"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { allMoves } from "#app/data/data-lists"; describe("Moves - Fly", () => { diff --git a/test/moves/follow_me.test.ts b/test/moves/follow_me.test.ts index 567320a18e9..8279e7b325a 100644 --- a/test/moves/follow_me.test.ts +++ b/test/moves/follow_me.test.ts @@ -1,5 +1,5 @@ import { Stat } from "#enums/stat"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { AbilityId } from "#enums/ability-id"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { MoveId } from "#enums/move-id"; diff --git a/test/moves/freeze_dry.test.ts b/test/moves/freeze_dry.test.ts index dc6af507b16..f1577d3d6c5 100644 --- a/test/moves/freeze_dry.test.ts +++ b/test/moves/freeze_dry.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/moves/fusion_flare_bolt.test.ts b/test/moves/fusion_flare_bolt.test.ts index 1a5d9e44bab..f10ede8717c 100644 --- a/test/moves/fusion_flare_bolt.test.ts +++ b/test/moves/fusion_flare_bolt.test.ts @@ -1,5 +1,5 @@ import { Stat } from "#enums/stat"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { allMoves } from "#app/data/data-lists"; import type Move from "#app/data/moves/move"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; diff --git a/test/moves/gastro_acid.test.ts b/test/moves/gastro_acid.test.ts index 6e06f441959..28f2c8e8476 100644 --- a/test/moves/gastro_acid.test.ts +++ b/test/moves/gastro_acid.test.ts @@ -1,8 +1,8 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/test/moves/geomancy.test.ts b/test/moves/geomancy.test.ts index 16244fed93f..452022b4cf1 100644 --- a/test/moves/geomancy.test.ts +++ b/test/moves/geomancy.test.ts @@ -1,6 +1,6 @@ import type { EffectiveStat } from "#enums/stat"; import { Stat } from "#enums/stat"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/moves/gigaton_hammer.test.ts b/test/moves/gigaton_hammer.test.ts index e61a383acc5..be7adf53aa7 100644 --- a/test/moves/gigaton_hammer.test.ts +++ b/test/moves/gigaton_hammer.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import GameManager from "#test/testUtils/gameManager"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/moves/grudge.test.ts b/test/moves/grudge.test.ts index b6ef25d41ff..63018a419e3 100644 --- a/test/moves/grudge.test.ts +++ b/test/moves/grudge.test.ts @@ -1,7 +1,7 @@ import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; diff --git a/test/moves/heal_block.test.ts b/test/moves/heal_block.test.ts index 58e1a5e04a5..39e8efea827 100644 --- a/test/moves/heal_block.test.ts +++ b/test/moves/heal_block.test.ts @@ -1,5 +1,5 @@ -import { BattlerIndex } from "#app/battle"; -import { ArenaTagSide } from "#app/data/arena-tag"; +import { BattlerIndex } from "#enums/battler-index"; +import { ArenaTagSide } from "#enums/arena-tag-side"; import GameManager from "#test/testUtils/gameManager"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; diff --git a/test/moves/instruct.test.ts b/test/moves/instruct.test.ts index e0cfa93cf59..74de4c5da17 100644 --- a/test/moves/instruct.test.ts +++ b/test/moves/instruct.test.ts @@ -1,7 +1,7 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { allMoves } from "#app/data/data-lists"; import type Pokemon from "#app/field/pokemon"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import type { MovePhase } from "#app/phases/move-phase"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; diff --git a/test/moves/jaw_lock.test.ts b/test/moves/jaw_lock.test.ts index 6084a47ad99..e0815a4c3c9 100644 --- a/test/moves/jaw_lock.test.ts +++ b/test/moves/jaw_lock.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { BerryPhase } from "#app/phases/berry-phase"; diff --git a/test/moves/lash_out.test.ts b/test/moves/lash_out.test.ts index a63ab2a467c..c0c0881b340 100644 --- a/test/moves/lash_out.test.ts +++ b/test/moves/lash_out.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; diff --git a/test/moves/last-resort.test.ts b/test/moves/last-resort.test.ts index 0e6c1a6ba15..e4b8346053b 100644 --- a/test/moves/last-resort.test.ts +++ b/test/moves/last-resort.test.ts @@ -1,5 +1,5 @@ -import { BattlerIndex } from "#app/battle"; -import { MoveResult } from "#app/field/pokemon"; +import { BattlerIndex } from "#enums/battler-index"; +import { MoveResult } from "#enums/move-result"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/moves/last_respects.test.ts b/test/moves/last_respects.test.ts index 96a8b5955d0..b2eb4c6695b 100644 --- a/test/moves/last_respects.test.ts +++ b/test/moves/last_respects.test.ts @@ -1,5 +1,5 @@ import { MoveId } from "#enums/move-id"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { SpeciesId } from "#enums/species-id"; import { AbilityId } from "#enums/ability-id"; import GameManager from "#test/testUtils/gameManager"; diff --git a/test/moves/light_screen.test.ts b/test/moves/light_screen.test.ts index 4230790e688..404d30920c7 100644 --- a/test/moves/light_screen.test.ts +++ b/test/moves/light_screen.test.ts @@ -1,7 +1,6 @@ import type BattleScene from "#app/battle-scene"; -import { ArenaTagSide } from "#app/data/arena-tag"; +import { ArenaTagSide } from "#enums/arena-tag-side"; import type Move from "#app/data/moves/move"; -import { CritOnlyAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#app/enums/arena-tag-type"; @@ -129,7 +128,7 @@ const getMockedMoveDamage = (defender: Pokemon, attacker: Pokemon, move: Move) = const side = defender.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; if (globalScene.arena.getTagOnSide(ArenaTagType.LIGHT_SCREEN, side)) { - if (move.getAttrs(CritOnlyAttr).length === 0) { + if (move.getAttrs("CritOnlyAttr").length === 0) { globalScene.arena.applyTagsForSide( ArenaTagType.LIGHT_SCREEN, side, diff --git a/test/moves/magic_coat.test.ts b/test/moves/magic_coat.test.ts index 4f9e3977305..a20aaf38043 100644 --- a/test/moves/magic_coat.test.ts +++ b/test/moves/magic_coat.test.ts @@ -1,11 +1,11 @@ -import { BattlerIndex } from "#app/battle"; -import { ArenaTagSide } from "#app/data/arena-tag"; +import { BattlerIndex } from "#enums/battler-index"; +import { ArenaTagSide } from "#enums/arena-tag-side"; import { allMoves } from "#app/data/data-lists"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { Stat } from "#app/enums/stat"; import { StatusEffect } from "#app/enums/status-effect"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/moves/metal_burst.test.ts b/test/moves/metal_burst.test.ts index 0222dd222be..bcb9d938985 100644 --- a/test/moves/metal_burst.test.ts +++ b/test/moves/metal_burst.test.ts @@ -1,5 +1,5 @@ -import { BattlerIndex } from "#app/battle"; -import { MoveResult } from "#app/field/pokemon"; +import { BattlerIndex } from "#enums/battler-index"; +import { MoveResult } from "#enums/move-result"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/moves/metronome.test.ts b/test/moves/metronome.test.ts index 0e6db09ae5c..ec610eeed45 100644 --- a/test/moves/metronome.test.ts +++ b/test/moves/metronome.test.ts @@ -1,5 +1,5 @@ import { RechargingTag, SemiInvulnerableTag } from "#app/data/battler-tags"; -import { RandomMoveAttr } from "#app/data/moves/move"; +import type { RandomMoveAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { Stat } from "#app/enums/stat"; @@ -27,7 +27,7 @@ describe("Moves - Metronome", () => { }); beforeEach(() => { - randomMoveAttr = allMoves[MoveId.METRONOME].getAttrs(RandomMoveAttr)[0]; + randomMoveAttr = allMoves[MoveId.METRONOME].getAttrs("RandomMoveAttr")[0]; game = new GameManager(phaserGame); game.override .moveset([MoveId.METRONOME, MoveId.SPLASH]) diff --git a/test/moves/miracle_eye.test.ts b/test/moves/miracle_eye.test.ts index dd5fb1c355b..1238ae6a650 100644 --- a/test/moves/miracle_eye.test.ts +++ b/test/moves/miracle_eye.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; diff --git a/test/moves/mirror_move.test.ts b/test/moves/mirror_move.test.ts index 18e115745b9..fe40402e5a2 100644 --- a/test/moves/mirror_move.test.ts +++ b/test/moves/mirror_move.test.ts @@ -1,6 +1,6 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { Stat } from "#app/enums/stat"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/moves/moongeist_beam.test.ts b/test/moves/moongeist_beam.test.ts index f462d81943f..28bd3f70daa 100644 --- a/test/moves/moongeist_beam.test.ts +++ b/test/moves/moongeist_beam.test.ts @@ -1,4 +1,3 @@ -import { RandomMoveAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; @@ -49,7 +48,7 @@ describe("Moves - Moongeist Beam", () => { // Also covers Photon Geyser and Sunsteel Strike it("should not ignore enemy abilities when called by another move, such as metronome", async () => { await game.classicMode.startBattle([SpeciesId.MILOTIC]); - vi.spyOn(allMoves[MoveId.METRONOME].getAttrs(RandomMoveAttr)[0], "getMoveOverride").mockReturnValue( + vi.spyOn(allMoves[MoveId.METRONOME].getAttrs("RandomMoveAttr")[0], "getMoveOverride").mockReturnValue( MoveId.MOONGEIST_BEAM, ); diff --git a/test/moves/multi_target.test.ts b/test/moves/multi_target.test.ts index 4572097296c..139b669da7b 100644 --- a/test/moves/multi_target.test.ts +++ b/test/moves/multi_target.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { AbilityId } from "#enums/ability-id"; import { SpeciesId } from "#enums/species-id"; import { toDmgValue } from "#app/utils/common"; diff --git a/test/moves/order_up.test.ts b/test/moves/order_up.test.ts index c6ca7ac06da..adf37c0719e 100644 --- a/test/moves/order_up.test.ts +++ b/test/moves/order_up.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { BattlerTagType } from "#enums/battler-tag-type"; import { PokemonAnimType } from "#enums/pokemon-anim-type"; import type { EffectiveStat } from "#enums/stat"; diff --git a/test/moves/plasma_fists.test.ts b/test/moves/plasma_fists.test.ts index 9493f69d70f..7d1985be13e 100644 --- a/test/moves/plasma_fists.test.ts +++ b/test/moves/plasma_fists.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { PokemonType } from "#enums/pokemon-type"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; diff --git a/test/moves/pledge_moves.test.ts b/test/moves/pledge_moves.test.ts index 2500563d44e..f653e245f6f 100644 --- a/test/moves/pledge_moves.test.ts +++ b/test/moves/pledge_moves.test.ts @@ -1,7 +1,6 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { allAbilities } from "#app/data/data-lists"; -import { ArenaTagSide } from "#app/data/arena-tag"; -import { FlinchAttr } from "#app/data/moves/move"; +import { ArenaTagSide } from "#enums/arena-tag-side"; import { allMoves } from "#app/data/data-lists"; import { PokemonType } from "#enums/pokemon-type"; import { ArenaTagType } from "#enums/arena-tag-type"; @@ -228,7 +227,7 @@ describe("Moves - Pledge Moves", () => { await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); - const ironHeadFlinchAttr = allMoves[MoveId.IRON_HEAD].getAttrs(FlinchAttr)[0]; + const ironHeadFlinchAttr = allMoves[MoveId.IRON_HEAD].getAttrs("FlinchAttr")[0]; vi.spyOn(ironHeadFlinchAttr, "getMoveChance"); game.move.select(MoveId.WATER_PLEDGE, 0, BattlerIndex.ENEMY); diff --git a/test/moves/pollen_puff.test.ts b/test/moves/pollen_puff.test.ts index d61303bcfcc..e6dcd2c41d0 100644 --- a/test/moves/pollen_puff.test.ts +++ b/test/moves/pollen_puff.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/moves/powder.test.ts b/test/moves/powder.test.ts index d335e29996e..38e35d60335 100644 --- a/test/moves/powder.test.ts +++ b/test/moves/powder.test.ts @@ -1,5 +1,6 @@ -import { BattlerIndex } from "#app/battle"; -import { MoveResult, PokemonMove } from "#app/field/pokemon"; +import { BattlerIndex } from "#enums/battler-index"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { MoveResult } from "#enums/move-result"; import { BerryPhase } from "#app/phases/berry-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { AbilityId } from "#enums/ability-id"; diff --git a/test/moves/protect.test.ts b/test/moves/protect.test.ts index 519021023fa..754a3433701 100644 --- a/test/moves/protect.test.ts +++ b/test/moves/protect.test.ts @@ -6,9 +6,10 @@ import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { Stat } from "#enums/stat"; import { allMoves } from "#app/data/data-lists"; -import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; -import { BattlerIndex } from "#app/battle"; -import { MoveResult } from "#app/field/pokemon"; +import { ArenaTrapTag } from "#app/data/arena-tag"; +import { ArenaTagSide } from "#enums/arena-tag-side"; +import { BattlerIndex } from "#enums/battler-index"; +import { MoveResult } from "#enums/move-result"; describe("Moves - Protect", () => { let phaserGame: Phaser.Game; diff --git a/test/moves/purify.test.ts b/test/moves/purify.test.ts index cab0a70818f..0510260b755 100644 --- a/test/moves/purify.test.ts +++ b/test/moves/purify.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { Status } from "#app/data/status-effect"; import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; import { MoveEndPhase } from "#app/phases/move-end-phase"; diff --git a/test/moves/quash.test.ts b/test/moves/quash.test.ts index 88cb0aba31f..7c8306acd22 100644 --- a/test/moves/quash.test.ts +++ b/test/moves/quash.test.ts @@ -1,9 +1,9 @@ import { SpeciesId } from "#enums/species-id"; import { MoveId } from "#enums/move-id"; import { AbilityId } from "#enums/ability-id"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { WeatherType } from "#enums/weather-type"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { describe, beforeAll, afterEach, beforeEach, it, expect } from "vitest"; diff --git a/test/moves/quick_guard.test.ts b/test/moves/quick_guard.test.ts index 0c0ab8d6ad0..49f501fb839 100644 --- a/test/moves/quick_guard.test.ts +++ b/test/moves/quick_guard.test.ts @@ -5,8 +5,8 @@ import { SpeciesId } from "#enums/species-id"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { Stat } from "#enums/stat"; -import { BattlerIndex } from "#app/battle"; -import { MoveResult } from "#app/field/pokemon"; +import { BattlerIndex } from "#enums/battler-index"; +import { MoveResult } from "#enums/move-result"; describe("Moves - Quick Guard", () => { let phaserGame: Phaser.Game; diff --git a/test/moves/rage_fist.test.ts b/test/moves/rage_fist.test.ts index cd9147637a5..31dd987cb87 100644 --- a/test/moves/rage_fist.test.ts +++ b/test/moves/rage_fist.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/moves/rage_powder.test.ts b/test/moves/rage_powder.test.ts index e3212e9876c..807000a0ff0 100644 --- a/test/moves/rage_powder.test.ts +++ b/test/moves/rage_powder.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/moves/reflect.test.ts b/test/moves/reflect.test.ts index d13fb7a095c..5e10de42a3c 100644 --- a/test/moves/reflect.test.ts +++ b/test/moves/reflect.test.ts @@ -1,7 +1,6 @@ import type BattleScene from "#app/battle-scene"; -import { ArenaTagSide } from "#app/data/arena-tag"; +import { ArenaTagSide } from "#enums/arena-tag-side"; import type Move from "#app/data/moves/move"; -import { CritOnlyAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#app/enums/arena-tag-type"; @@ -145,7 +144,7 @@ const getMockedMoveDamage = (defender: Pokemon, attacker: Pokemon, move: Move) = const side = defender.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; if (globalScene.arena.getTagOnSide(ArenaTagType.REFLECT, side)) { - if (move.getAttrs(CritOnlyAttr).length === 0) { + if (move.getAttrs("CritOnlyAttr").length === 0) { globalScene.arena.applyTagsForSide(ArenaTagType.REFLECT, side, false, attacker, move.category, multiplierHolder); } } diff --git a/test/moves/revival_blessing.test.ts b/test/moves/revival_blessing.test.ts index 07ebf657c66..f22c0467378 100644 --- a/test/moves/revival_blessing.test.ts +++ b/test/moves/revival_blessing.test.ts @@ -1,5 +1,5 @@ -import { BattlerIndex } from "#app/battle"; -import { MoveResult } from "#app/field/pokemon"; +import { BattlerIndex } from "#enums/battler-index"; +import { MoveResult } from "#enums/move-result"; import { toDmgValue } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; diff --git a/test/moves/roost.test.ts b/test/moves/roost.test.ts index 76aab1e572f..1e588cb1e15 100644 --- a/test/moves/roost.test.ts +++ b/test/moves/roost.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { PokemonType } from "#enums/pokemon-type"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { MoveId } from "#enums/move-id"; diff --git a/test/moves/round.test.ts b/test/moves/round.test.ts index 503ce125582..630137b7dce 100644 --- a/test/moves/round.test.ts +++ b/test/moves/round.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { allMoves } from "#app/data/data-lists"; import type { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { AbilityId } from "#enums/ability-id"; diff --git a/test/moves/safeguard.test.ts b/test/moves/safeguard.test.ts index fc8bef80d6d..2ba53016833 100644 --- a/test/moves/safeguard.test.ts +++ b/test/moves/safeguard.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { PostDefendContactApplyStatusEffectAbAttr } from "#app/data/abilities/ability"; import { allAbilities } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; diff --git a/test/moves/scale_shot.test.ts b/test/moves/scale_shot.test.ts index f61a9a1e276..a5872579003 100644 --- a/test/moves/scale_shot.test.ts +++ b/test/moves/scale_shot.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { allMoves } from "#app/data/data-lists"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; diff --git a/test/moves/secret_power.test.ts b/test/moves/secret_power.test.ts index ac06f03698c..d555431656f 100644 --- a/test/moves/secret_power.test.ts +++ b/test/moves/secret_power.test.ts @@ -8,9 +8,9 @@ import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { StatusEffect } from "#enums/status-effect"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { ArenaTagType } from "#enums/arena-tag-type"; -import { ArenaTagSide } from "#app/data/arena-tag"; +import { ArenaTagSide } from "#enums/arena-tag-side"; import { MoveEffectChanceMultiplierAbAttr } from "#app/data/abilities/ability"; import { allAbilities } from "#app/data/data-lists"; diff --git a/test/moves/shed_tail.test.ts b/test/moves/shed_tail.test.ts index 84a5d5ba914..81ab9215bc9 100644 --- a/test/moves/shed_tail.test.ts +++ b/test/moves/shed_tail.test.ts @@ -1,5 +1,5 @@ import { SubstituteTag } from "#app/data/battler-tags"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/moves/shell_side_arm.test.ts b/test/moves/shell_side_arm.test.ts index ad79091a5e3..35246e10e3f 100644 --- a/test/moves/shell_side_arm.test.ts +++ b/test/moves/shell_side_arm.test.ts @@ -1,5 +1,5 @@ -import { BattlerIndex } from "#app/battle"; -import { ShellSideArmCategoryAttr } from "#app/data/moves/move"; +import { BattlerIndex } from "#enums/battler-index"; +import type { ShellSideArmCategoryAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; import type Move from "#app/data/moves/move"; import { AbilityId } from "#enums/ability-id"; @@ -27,7 +27,7 @@ describe("Moves - Shell Side Arm", () => { beforeEach(() => { shellSideArm = allMoves[MoveId.SHELL_SIDE_ARM]; - shellSideArmAttr = shellSideArm.getAttrs(ShellSideArmCategoryAttr)[0]; + shellSideArmAttr = shellSideArm.getAttrs("ShellSideArmCategoryAttr")[0]; game = new GameManager(phaserGame); game.override .moveset([MoveId.SHELL_SIDE_ARM, MoveId.SPLASH]) diff --git a/test/moves/shell_trap.test.ts b/test/moves/shell_trap.test.ts index 9a38bf4486b..a3f55cef10f 100644 --- a/test/moves/shell_trap.test.ts +++ b/test/moves/shell_trap.test.ts @@ -1,8 +1,8 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { allMoves } from "#app/data/data-lists"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import { BerryPhase } from "#app/phases/berry-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; import { MovePhase } from "#app/phases/move-phase"; diff --git a/test/moves/sketch.test.ts b/test/moves/sketch.test.ts index 23e7f4ef3ab..c6fb7b4a32a 100644 --- a/test/moves/sketch.test.ts +++ b/test/moves/sketch.test.ts @@ -1,12 +1,13 @@ import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; -import { MoveResult, PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; +import { MoveResult } from "#enums/move-result"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { StatusEffect } from "#app/enums/status-effect"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { RandomMoveAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; diff --git a/test/moves/sleep_talk.test.ts b/test/moves/sleep_talk.test.ts index 820a5f9082a..1d9aec77ea2 100644 --- a/test/moves/sleep_talk.test.ts +++ b/test/moves/sleep_talk.test.ts @@ -1,6 +1,6 @@ import { Stat } from "#app/enums/stat"; import { StatusEffect } from "#app/enums/status-effect"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/moves/solar_beam.test.ts b/test/moves/solar_beam.test.ts index 7515843a13f..55d2ee5d13c 100644 --- a/test/moves/solar_beam.test.ts +++ b/test/moves/solar_beam.test.ts @@ -1,7 +1,7 @@ import { allMoves } from "#app/data/data-lists"; import { BattlerTagType } from "#enums/battler-tag-type"; import { WeatherType } from "#enums/weather-type"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/moves/spectral_thief.test.ts b/test/moves/spectral_thief.test.ts index df560169078..808e9174caf 100644 --- a/test/moves/spectral_thief.test.ts +++ b/test/moves/spectral_thief.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { Stat } from "#enums/stat"; import { allMoves } from "#app/data/data-lists"; import { MoveId } from "#enums/move-id"; diff --git a/test/moves/spikes.test.ts b/test/moves/spikes.test.ts index 278c4510239..d847f296e59 100644 --- a/test/moves/spikes.test.ts +++ b/test/moves/spikes.test.ts @@ -4,7 +4,8 @@ import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; -import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; +import { ArenaTrapTag } from "#app/data/arena-tag"; +import { ArenaTagSide } from "#enums/arena-tag-side"; describe("Moves - Spikes", () => { let phaserGame: Phaser.Game; diff --git a/test/moves/spit_up.test.ts b/test/moves/spit_up.test.ts index 2d576168f4c..83549c28f40 100644 --- a/test/moves/spit_up.test.ts +++ b/test/moves/spit_up.test.ts @@ -3,7 +3,7 @@ import { StockpilingTag } from "#app/data/battler-tags"; import { allMoves } from "#app/data/data-lists"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import type { TurnMove } from "#app/field/pokemon"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import GameManager from "#test/testUtils/gameManager"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; diff --git a/test/moves/spotlight.test.ts b/test/moves/spotlight.test.ts index 2798dfa282a..602cedcaec9 100644 --- a/test/moves/spotlight.test.ts +++ b/test/moves/spotlight.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/moves/steamroller.test.ts b/test/moves/steamroller.test.ts index f4f8131ff7b..4eb011c47f5 100644 --- a/test/moves/steamroller.test.ts +++ b/test/moves/steamroller.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { allMoves } from "#app/data/data-lists"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import type { DamageCalculationResult } from "#app/field/pokemon"; diff --git a/test/moves/stockpile.test.ts b/test/moves/stockpile.test.ts index 5bf2b74d4d9..4baa7949bc6 100644 --- a/test/moves/stockpile.test.ts +++ b/test/moves/stockpile.test.ts @@ -1,7 +1,7 @@ import { Stat } from "#enums/stat"; import { StockpilingTag } from "#app/data/battler-tags"; import type { TurnMove } from "#app/field/pokemon"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import { CommandPhase } from "#app/phases/command-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; import { AbilityId } from "#enums/ability-id"; diff --git a/test/moves/substitute.test.ts b/test/moves/substitute.test.ts index 454e729a67b..857f20c7fa0 100644 --- a/test/moves/substitute.test.ts +++ b/test/moves/substitute.test.ts @@ -1,12 +1,12 @@ -import { BattlerIndex } from "#app/battle"; -import { ArenaTagSide } from "#app/data/arena-tag"; +import { BattlerIndex } from "#enums/battler-index"; +import { ArenaTagSide } from "#enums/arena-tag-side"; import { SubstituteTag, TrappedTag } from "#app/data/battler-tags"; import { StealHeldItemChanceAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import type { CommandPhase } from "#app/phases/command-phase"; import GameManager from "#test/testUtils/gameManager"; -import { Command } from "#app/ui/command-ui-handler"; +import { Command } from "#enums/command"; import { UiMode } from "#enums/ui-mode"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; diff --git a/test/moves/swallow.test.ts b/test/moves/swallow.test.ts index 4452636c3af..bb95c2c593d 100644 --- a/test/moves/swallow.test.ts +++ b/test/moves/swallow.test.ts @@ -2,7 +2,7 @@ import { Stat } from "#enums/stat"; import { StockpilingTag } from "#app/data/battler-tags"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import type { TurnMove } from "#app/field/pokemon"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import { MovePhase } from "#app/phases/move-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; import { AbilityId } from "#enums/ability-id"; diff --git a/test/moves/syrup_bomb.test.ts b/test/moves/syrup_bomb.test.ts index 76bc7e7bae0..4b2821b439c 100644 --- a/test/moves/syrup_bomb.test.ts +++ b/test/moves/syrup_bomb.test.ts @@ -5,7 +5,7 @@ import { BattlerTagType } from "#enums/battler-tag-type"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; describe("Moves - SYRUP BOMB", () => { diff --git a/test/moves/tailwind.test.ts b/test/moves/tailwind.test.ts index 83078d7bf58..874934fc8f3 100644 --- a/test/moves/tailwind.test.ts +++ b/test/moves/tailwind.test.ts @@ -1,4 +1,4 @@ -import { ArenaTagSide } from "#app/data/arena-tag"; +import { ArenaTagSide } from "#enums/arena-tag-side"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; diff --git a/test/moves/tar_shot.test.ts b/test/moves/tar_shot.test.ts index 21eace0ef1f..fefd1a30e1e 100644 --- a/test/moves/tar_shot.test.ts +++ b/test/moves/tar_shot.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { PokemonType } from "#enums/pokemon-type"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/moves/taunt.test.ts b/test/moves/taunt.test.ts index e214bd77ef7..fabb95f98b2 100644 --- a/test/moves/taunt.test.ts +++ b/test/moves/taunt.test.ts @@ -4,7 +4,7 @@ import { AbilityId } from "#enums/ability-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import { BattlerTagType } from "#enums/battler-tag-type"; describe("Moves - Taunt", () => { diff --git a/test/moves/telekinesis.test.ts b/test/moves/telekinesis.test.ts index 18df17f1587..5c9f1e22395 100644 --- a/test/moves/telekinesis.test.ts +++ b/test/moves/telekinesis.test.ts @@ -3,11 +3,11 @@ import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; describe("Moves - Telekinesis", () => { let phaserGame: Phaser.Game; diff --git a/test/moves/tera_blast.test.ts b/test/moves/tera_blast.test.ts index 4e3f9c6869b..2f3bdcebfcf 100644 --- a/test/moves/tera_blast.test.ts +++ b/test/moves/tera_blast.test.ts @@ -1,6 +1,6 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { Stat } from "#enums/stat"; -import { TeraMoveCategoryAttr } from "#app/data/moves/move"; +import type { TeraMoveCategoryAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; import type Move from "#app/data/moves/move"; import { PokemonType } from "#enums/pokemon-type"; @@ -23,7 +23,7 @@ describe("Moves - Tera Blast", () => { type: Phaser.HEADLESS, }); moveToCheck = allMoves[MoveId.TERA_BLAST]; - teraBlastAttr = moveToCheck.getAttrs(TeraMoveCategoryAttr)[0]; + teraBlastAttr = moveToCheck.getAttrs("TeraMoveCategoryAttr")[0]; }); afterEach(() => { diff --git a/test/moves/tera_starstorm.test.ts b/test/moves/tera_starstorm.test.ts index bd1fa14398d..2eaf2ec0372 100644 --- a/test/moves/tera_starstorm.test.ts +++ b/test/moves/tera_starstorm.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { PokemonType } from "#enums/pokemon-type"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; diff --git a/test/moves/throat_chop.test.ts b/test/moves/throat_chop.test.ts index c1c9c4e94ad..aa92f657c86 100644 --- a/test/moves/throat_chop.test.ts +++ b/test/moves/throat_chop.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; import { Stat } from "#app/enums/stat"; diff --git a/test/moves/torment.test.ts b/test/moves/torment.test.ts index b35b16249ef..e4d926d9601 100644 --- a/test/moves/torment.test.ts +++ b/test/moves/torment.test.ts @@ -4,7 +4,7 @@ import { AbilityId } from "#enums/ability-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import { BattlerTagType } from "#enums/battler-tag-type"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; diff --git a/test/moves/toxic.test.ts b/test/moves/toxic.test.ts index 5cdfe78d502..eb23885b4b5 100644 --- a/test/moves/toxic.test.ts +++ b/test/moves/toxic.test.ts @@ -4,7 +4,7 @@ import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { StatusEffect } from "#enums/status-effect"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { allMoves } from "#app/data/data-lists"; describe("Moves - Toxic", () => { diff --git a/test/moves/toxic_spikes.test.ts b/test/moves/toxic_spikes.test.ts index 11ed7514633..bf1f5acc1cb 100644 --- a/test/moves/toxic_spikes.test.ts +++ b/test/moves/toxic_spikes.test.ts @@ -1,7 +1,8 @@ import type { ArenaTrapTag } from "#app/data/arena-tag"; -import { ArenaTagSide } from "#app/data/arena-tag"; +import { ArenaTagSide } from "#enums/arena-tag-side"; import type { SessionSaveData } from "#app/system/game-data"; -import { decrypt, encrypt, GameData } from "#app/system/game-data"; +import { GameData } from "#app/system/game-data"; +import { decrypt, encrypt } from "#app/utils/data"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; import { MoveId } from "#enums/move-id"; diff --git a/test/moves/transform.test.ts b/test/moves/transform.test.ts index ca326da5748..8ee65802b37 100644 --- a/test/moves/transform.test.ts +++ b/test/moves/transform.test.ts @@ -6,7 +6,7 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { MoveId } from "#enums/move-id"; import { Stat, EFFECTIVE_STATS } from "#enums/stat"; import { AbilityId } from "#enums/ability-id"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; // TODO: Add more tests once Transform is fully implemented describe("Moves - Transform", () => { diff --git a/test/moves/triple_arrows.test.ts b/test/moves/triple_arrows.test.ts index 6a14a7642fa..89ccb4e5b04 100644 --- a/test/moves/triple_arrows.test.ts +++ b/test/moves/triple_arrows.test.ts @@ -1,4 +1,4 @@ -import { FlinchAttr, StatStageChangeAttr } from "#app/data/moves/move"; +import type { FlinchAttr, StatStageChangeAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; @@ -20,8 +20,8 @@ describe("Moves - Triple Arrows", () => { type: Phaser.HEADLESS, }); tripleArrows = allMoves[MoveId.TRIPLE_ARROWS]; - flinchAttr = tripleArrows.getAttrs(FlinchAttr)[0]; - defDropAttr = tripleArrows.getAttrs(StatStageChangeAttr)[0]; + flinchAttr = tripleArrows.getAttrs("FlinchAttr")[0]; + defDropAttr = tripleArrows.getAttrs("StatStageChangeAttr")[0]; }); afterEach(() => { diff --git a/test/moves/upper_hand.test.ts b/test/moves/upper_hand.test.ts index 741594c7e47..e3d490ba6fa 100644 --- a/test/moves/upper_hand.test.ts +++ b/test/moves/upper_hand.test.ts @@ -1,5 +1,5 @@ -import { BattlerIndex } from "#app/battle"; -import { MoveResult } from "#app/field/pokemon"; +import { BattlerIndex } from "#enums/battler-index"; +import { MoveResult } from "#enums/move-result"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/moves/whirlwind.test.ts b/test/moves/whirlwind.test.ts index c457bdb67d7..00d7c16561c 100644 --- a/test/moves/whirlwind.test.ts +++ b/test/moves/whirlwind.test.ts @@ -1,7 +1,7 @@ import { BattlerTagType } from "#enums/battler-tag-type"; import { Challenges } from "#enums/challenges"; import { PokemonType } from "#enums/pokemon-type"; -import { MoveResult } from "#app/field/pokemon"; +import { MoveResult } from "#enums/move-result"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; @@ -11,7 +11,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vite import { Status } from "#app/data/status-effect"; import { StatusEffect } from "#enums/status-effect"; import { globalScene } from "#app/global-scene"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { BattleType } from "#enums/battle-type"; import { TrainerType } from "#enums/trainer-type"; diff --git a/test/moves/will_o_wisp.test.ts b/test/moves/will_o_wisp.test.ts index ce747dbad0b..40495009d2a 100644 --- a/test/moves/will_o_wisp.test.ts +++ b/test/moves/will_o_wisp.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts b/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts index 786090aa8d6..d208a859825 100644 --- a/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts +++ b/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts @@ -8,7 +8,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vite import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { runMysteryEncounterToEnd } from "#test/mystery-encounter/encounter-test-utils"; import type BattleScene from "#app/battle-scene"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { AnOfferYouCantRefuseEncounter } from "#app/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; diff --git a/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts b/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts index 7e569d0cdf7..8e58a0ca242 100644 --- a/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts +++ b/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts @@ -11,7 +11,7 @@ import { } from "#test/mystery-encounter/encounter-test-utils"; import { MoveId } from "#enums/move-id"; import type BattleScene from "#app/battle-scene"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { UiMode } from "#enums/ui-mode"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; diff --git a/test/mystery-encounter/encounters/clowning-around-encounter.test.ts b/test/mystery-encounter/encounters/clowning-around-encounter.test.ts index fc0ef0e5a86..778f8397417 100644 --- a/test/mystery-encounter/encounters/clowning-around-encounter.test.ts +++ b/test/mystery-encounter/encounters/clowning-around-encounter.test.ts @@ -15,7 +15,7 @@ import { import { MoveId } from "#enums/move-id"; import type BattleScene from "#app/battle-scene"; import type Pokemon from "#app/field/pokemon"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { UiMode } from "#enums/ui-mode"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; diff --git a/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts b/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts index 76a562b5851..ee4aefd9904 100644 --- a/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts +++ b/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts @@ -17,7 +17,7 @@ import { MoveId } from "#enums/move-id"; import { DancingLessonsEncounter } from "#app/data/mystery-encounters/encounters/dancing-lessons-encounter"; import { UiMode } from "#enums/ui-mode"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import { CommandPhase } from "#app/phases/command-phase"; import { MovePhase } from "#app/phases/move-phase"; diff --git a/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts b/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts index 7038fff3117..e0e8b3d90d6 100644 --- a/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts +++ b/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts @@ -11,7 +11,7 @@ import { } from "#test/mystery-encounter/encounter-test-utils"; import { MoveId } from "#enums/move-id"; import type BattleScene from "#app/battle-scene"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { UiMode } from "#enums/ui-mode"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; diff --git a/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts b/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts index 4eaf2cef1da..e31a3a5cc3c 100644 --- a/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts +++ b/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts @@ -22,7 +22,7 @@ import { CommandPhase } from "#app/phases/command-phase"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import { FunAndGamesEncounter } from "#app/data/mystery-encounters/encounters/fun-and-games-encounter"; import { MoveId } from "#enums/move-id"; -import { Command } from "#app/ui/command-ui-handler"; +import { Command } from "#enums/command"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; const namespace = "mysteryEncounters/funAndGames"; diff --git a/test/mystery-encounter/encounters/part-timer-encounter.test.ts b/test/mystery-encounter/encounters/part-timer-encounter.test.ts index fa85f373a35..be985ea0593 100644 --- a/test/mystery-encounter/encounters/part-timer-encounter.test.ts +++ b/test/mystery-encounter/encounters/part-timer-encounter.test.ts @@ -14,7 +14,7 @@ import { CIVILIZATION_ENCOUNTER_BIOMES } from "#app/data/mystery-encounters/myst import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { PartTimerEncounter } from "#app/data/mystery-encounters/encounters/part-timer-encounter"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { MoveId } from "#enums/move-id"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; diff --git a/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts b/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts index e50a19a0a80..5926c1ed2e7 100644 --- a/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts @@ -17,7 +17,7 @@ import { TheStrongStuffEncounter } from "#app/data/mystery-encounters/encounters import { Nature } from "#enums/nature"; import { BerryType } from "#enums/berry-type"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { UiMode } from "#enums/ui-mode"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { BerryModifier, PokemonBaseStatTotalModifier } from "#app/modifier/modifier"; diff --git a/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts b/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts index 999936c8832..47c75eb19fc 100644 --- a/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts +++ b/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts @@ -12,7 +12,7 @@ import { getPokemonSpecies } from "#app/data/pokemon-species"; import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { SpeciesId } from "#enums/species-id"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { HealShopCostModifier, HitHealModifier, TurnHealModifier } from "#app/modifier/modifier"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { modifierTypes, type PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; diff --git a/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts b/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts index 0c3131de1d2..12545b8d70a 100644 --- a/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts +++ b/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts @@ -10,7 +10,7 @@ import { } from "#test/mystery-encounter/encounter-test-utils"; import { MoveId } from "#enums/move-id"; import type BattleScene from "#app/battle-scene"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; diff --git a/test/phases/frenzy-move-reset.test.ts b/test/phases/frenzy-move-reset.test.ts index 1879a14d301..878c58d8666 100644 --- a/test/phases/frenzy-move-reset.test.ts +++ b/test/phases/frenzy-move-reset.test.ts @@ -1,4 +1,4 @@ -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; import { StatusEffect } from "#enums/status-effect"; diff --git a/test/reload.test.ts b/test/reload.test.ts index 6c535ca4722..8b817bbfe97 100644 --- a/test/reload.test.ts +++ b/test/reload.test.ts @@ -1,4 +1,4 @@ -import { GameModes } from "#app/game-mode"; +import { GameModes } from "#enums/game-modes"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; import type OptionSelectUiHandler from "#app/ui/settings/option-select-ui-handler"; import { UiMode } from "#enums/ui-mode"; diff --git a/test/testUtils/gameManager.ts b/test/testUtils/gameManager.ts index 437c8d9f083..128217a6472 100644 --- a/test/testUtils/gameManager.ts +++ b/test/testUtils/gameManager.ts @@ -1,9 +1,10 @@ import { updateUserInfo } from "#app/account"; -import { BattlerIndex } from "#app/battle"; +import { BattlerIndex } from "#enums/battler-index"; import BattleScene from "#app/battle-scene"; import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; import Trainer from "#app/field/trainer"; -import { GameModes, getGameMode } from "#app/game-mode"; +import { getGameMode } from "#app/game-mode"; +import { GameModes } from "#enums/game-modes"; import { globalScene } from "#app/global-scene"; import { ModifierTypeOption, modifierTypes } from "#app/modifier/modifier-type"; import overrides from "#app/overrides"; diff --git a/test/testUtils/gameManagerUtils.ts b/test/testUtils/gameManagerUtils.ts index 18dd83995a3..d582f8c04e3 100644 --- a/test/testUtils/gameManagerUtils.ts +++ b/test/testUtils/gameManagerUtils.ts @@ -5,7 +5,8 @@ import { getDailyRunStarters } from "#app/data/daily-run"; import { Gender } from "#app/data/gender"; import { getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; import { PlayerPokemon } from "#app/field/pokemon"; -import { GameModes, getGameMode } from "#app/game-mode"; +import { getGameMode } from "#app/game-mode"; +import { GameModes } from "#enums/game-modes"; import type { StarterMoveset } from "#app/system/game-data"; import type { Starter } from "#app/ui/starter-select-ui-handler"; import { MoveId } from "#enums/move-id"; diff --git a/test/testUtils/helpers/classicModeHelper.ts b/test/testUtils/helpers/classicModeHelper.ts index c4f086bd628..eff97483777 100644 --- a/test/testUtils/helpers/classicModeHelper.ts +++ b/test/testUtils/helpers/classicModeHelper.ts @@ -1,6 +1,7 @@ import { BattleStyle } from "#app/enums/battle-style"; import type { SpeciesId } from "#enums/species-id"; -import { GameModes, getGameMode } from "#app/game-mode"; +import { getGameMode } from "#app/game-mode"; +import { GameModes } from "#enums/game-modes"; import overrides from "#app/overrides"; import { CommandPhase } from "#app/phases/command-phase"; import { EncounterPhase } from "#app/phases/encounter-phase"; diff --git a/test/testUtils/helpers/field-helper.ts b/test/testUtils/helpers/field-helper.ts index aa01ef7497d..72498fd8e16 100644 --- a/test/testUtils/helpers/field-helper.ts +++ b/test/testUtils/helpers/field-helper.ts @@ -3,7 +3,7 @@ import type { globalScene } from "#app/global-scene"; // -- end tsdoc imports -- -import type { BattlerIndex } from "#app/battle"; +import type { BattlerIndex } from "#enums/battler-index"; import type { Ability } from "#app/data/abilities/ability-class"; import { allAbilities } from "#app/data/data-lists"; import type Pokemon from "#app/field/pokemon"; diff --git a/test/testUtils/helpers/moveHelper.ts b/test/testUtils/helpers/moveHelper.ts index c7dea05b095..1b799e12da7 100644 --- a/test/testUtils/helpers/moveHelper.ts +++ b/test/testUtils/helpers/moveHelper.ts @@ -1,12 +1,12 @@ -import type { BattlerIndex } from "#app/battle"; -import { getMoveTargets } from "#app/data/moves/move"; +import type { BattlerIndex } from "#enums/battler-index"; +import { getMoveTargets } from "#app/data/moves/move-utils"; import type Pokemon from "#app/field/pokemon"; -import { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/data/moves/pokemon-move"; import Overrides from "#app/overrides"; import type { CommandPhase } from "#app/phases/command-phase"; import type { EnemyCommandPhase } from "#app/phases/enemy-command-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; -import { Command } from "#app/ui/command-ui-handler"; +import { Command } from "#enums/command"; import { MoveId } from "#enums/move-id"; import { UiMode } from "#enums/ui-mode"; import { getMovePosition } from "#test/testUtils/gameManagerUtils"; diff --git a/test/ui/starter-select.test.ts b/test/ui/starter-select.test.ts index 2884323b4ea..be508a2b69c 100644 --- a/test/ui/starter-select.test.ts +++ b/test/ui/starter-select.test.ts @@ -1,7 +1,7 @@ import { Gender } from "#app/data/gender"; import { Nature } from "#enums/nature"; import { allSpecies } from "#app/data/pokemon-species"; -import { GameModes } from "#app/game-mode"; +import { GameModes } from "#enums/game-modes"; import { EncounterPhase } from "#app/phases/encounter-phase"; import { SelectStarterPhase } from "#app/phases/select-starter-phase"; import type { TitlePhase } from "#app/phases/title-phase"; From 60105f0402a4e8e58add1252246c31bb81ca89e8 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Mon, 9 Jun 2025 17:48:41 -0700 Subject: [PATCH 226/262] [Dev] Update test creation script (#5939) --- create-test-boilerplate.js | 172 ------------------------ package.json | 2 +- scripts/create-test/create-test.js | 147 ++++++++++++++++++++ scripts/create-test/test-boilerplate.ts | 44 ++++++ 4 files changed, 192 insertions(+), 173 deletions(-) delete mode 100644 create-test-boilerplate.js create mode 100644 scripts/create-test/create-test.js create mode 100644 scripts/create-test/test-boilerplate.ts diff --git a/create-test-boilerplate.js b/create-test-boilerplate.js deleted file mode 100644 index d47b7c4afeb..00000000000 --- a/create-test-boilerplate.js +++ /dev/null @@ -1,172 +0,0 @@ -/** - * This script creates a test boilerplate file in the appropriate - * directory based on the type selected. - * @example npm run create-test - */ - -import fs from "fs"; -import inquirer from "inquirer"; -import path from "path"; -import { fileURLToPath } from "url"; - -// Get the directory name of the current module file -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); -const typeChoices = ["Move", "Ability", "Item", "Mystery Encounter"]; - -/** - * Prompts the user to select a type via list. - * @returns {Promise<{selectedOption: string}>} the selected type - */ -async function promptTestType() { - const typeAnswer = await inquirer.prompt([ - { - type: "list", - name: "selectedOption", - message: "What type of test would you like to create:", - choices: [...typeChoices, "EXIT"], - }, - ]); - - if (typeAnswer.selectedOption === "EXIT") { - console.log("Exiting..."); - return process.exit(); - } - if (!typeChoices.includes(typeAnswer.selectedOption)) { - console.error(`Please provide a valid type (${typeChoices.join(", ")})!`); - return await promptTestType(); - } - - return typeAnswer; -} - -/** - * Prompts the user to provide a file name. - * @param {string} selectedType - * @returns {Promise<{userInput: string}>} the selected file name - */ -async function promptFileName(selectedType) { - const fileNameAnswer = await inquirer.prompt([ - { - type: "input", - name: "userInput", - message: `Please provide the name of the ${selectedType}:`, - }, - ]); - - if (!fileNameAnswer.userInput || fileNameAnswer.userInput.trim().length === 0) { - console.error("Please provide a valid file name!"); - return await promptFileName(selectedType); - } - - return fileNameAnswer; -} - -/** - * Runs the interactive create-test "CLI" - * @returns {Promise} - */ -async function runInteractive() { - const typeAnswer = await promptTestType(); - const fileNameAnswer = await promptFileName(typeAnswer.selectedOption); - - const type = typeAnswer.selectedOption.toLowerCase(); - // Convert fileName from kebab-case or camelCase to snake_case - const fileName = fileNameAnswer.userInput - .replace(/-+/g, "_") // Convert kebab-case (dashes) to underscores - .replace(/([a-z])([A-Z])/g, "$1_$2") // Convert camelCase to snake_case - .replace(/\s+/g, "_") // Replace spaces with underscores - .toLowerCase(); // Ensure all lowercase - // Format the description for the test case - - const formattedName = fileName.replace(/_/g, " ").replace(/\b\w/g, char => char.toUpperCase()); - // Determine the directory based on the type - let dir; - let description; - switch (type) { - case "move": - dir = path.join(__dirname, "test", "moves"); - description = `Moves - ${formattedName}`; - break; - case "ability": - dir = path.join(__dirname, "test", "abilities"); - description = `Abilities - ${formattedName}`; - break; - case "item": - dir = path.join(__dirname, "test", "items"); - description = `Items - ${formattedName}`; - break; - case "mystery encounter": - dir = path.join(__dirname, "test", "mystery-encounter", "encounters"); - description = `Mystery Encounter - ${formattedName}`; - break; - default: - console.error(`Invalid type. Please use one of the following: ${typeChoices.join(", ")}.`); - process.exit(1); - } - - // Define the content template - const content = `import { Abilities } from "#enums/abilities"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; -import GameManager from "#test/testUtils/gameManager"; -import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; - -describe("${description}", () => { - let phaserGame: Phaser.Game; - let game: GameManager; - - beforeAll(() => { - phaserGame = new Phaser.Game({ - type: Phaser.HEADLESS, - }); - }); - - afterEach(() => { - game.phaseInterceptor.restoreOg(); - }); - - beforeEach(() => { - game = new GameManager(phaserGame); - game.override - .moveset([ Moves.SPLASH ]) - .ability(Abilities.BALL_FETCH) - .battleType("single") - .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); - }); - - it("should do X", async () => { - await game.classicMode.startBattle([ Species.FEEBAS ]); - - game.move.select(Moves.SPLASH); - await game.phaseInterceptor.to("BerryPhase"); - - expect(true).toBe(true); - }); -}); -`; - - // Ensure the directory exists - if (!fs.existsSync(dir)) { - fs.mkdirSync(dir, { recursive: true }); - } - - // Create the file with the given name - const filePath = path.join(dir, `${fileName}.test.ts`); - - if (fs.existsSync(filePath)) { - console.error(`File "${fileName}.test.ts" already exists.`); - process.exit(1); - } - - // Write the template content to the file - fs.writeFileSync(filePath, content, "utf8"); - - console.log(`File created at: ${filePath}`); -} - -runInteractive(); diff --git a/package.json b/package.json index ce41dfc2a05..36c3c2b919f 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "test:cov": "vitest run --coverage --no-isolate", "test:watch": "vitest watch --coverage --no-isolate", "test:silent": "vitest run --silent --no-isolate", + "test:create": "node scripts/create-test/create-test.js", "typecheck": "tsc --noEmit", "eslint": "eslint --fix .", "eslint-ci": "eslint .", @@ -21,7 +22,6 @@ "docs": "typedoc", "depcruise": "depcruise src", "depcruise:graph": "depcruise src --output-type dot | node dependency-graph.js > dependency-graph.svg", - "create-test": "node ./create-test-boilerplate.js", "postinstall": "npx lefthook install && npx lefthook run post-merge", "update-version:patch": "npm version patch --force --no-git-tag-version", "update-version:minor": "npm version minor --force --no-git-tag-version", diff --git a/scripts/create-test/create-test.js b/scripts/create-test/create-test.js new file mode 100644 index 00000000000..e71994472f3 --- /dev/null +++ b/scripts/create-test/create-test.js @@ -0,0 +1,147 @@ +/** + * This script creates a test boilerplate file in the appropriate + * directory based on the type selected. + * @example npm run test:create + */ + +import chalk from "chalk"; +import inquirer from "inquirer"; +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +//#region Constants + +const version = "2.0.1"; +// Get the directory name of the current module file +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const projectRoot = path.join(__dirname, "..", ".."); +const boilerplateFilePath = path.join(__dirname, "test-boilerplate.ts"); +const choices = [ + { label: "Move", dir: "moves" }, + { label: "Ability", dir: "abilities" }, + { label: "Item", dir: "items" }, + { label: "Mystery Encounter", dir: "mystery-encounter/encounters" }, + { label: "Utils", dir: "utils" }, + { label: "UI", dir: "ui" }, +]; + +//#endregion +//#region Functions + +/** + * Get the path to a given folder in the test directory + * @param {...string} folders the subfolders to append to the base path + * @returns {string} the path to the requested folder + */ +function getTestFolderPath(...folders) { + return path.join(projectRoot, "test", ...folders); +} + +/** + * Prompts the user to select a type via list. + * @returns {Promise<{selectedOption: {label: string, dir: string}}>} the selected type + */ +async function promptTestType() { + const typeAnswer = await inquirer.prompt([ + { + type: "list", + name: "selectedOption", + message: "What type of test would you like to create:", + choices: [...choices.map(choice => ({ name: choice.label, value: choice })), "EXIT"], + }, + ]); + + if (typeAnswer.selectedOption === "EXIT") { + console.log("Exiting..."); + return process.exit(); + } + if (!choices.some(choice => choice.dir === typeAnswer.selectedOption.dir)) { + console.error(`Please provide a valid type: (${choices.map(choice => choice.label).join(", ")})!`); + return await promptTestType(); + } + + return typeAnswer; +} + +/** + * Prompts the user to provide a file name. + * @param {string} selectedType + * @returns {Promise<{userInput: string}>} the selected file name + */ +async function promptFileName(selectedType) { + /** @type {{userInput: string}} */ + const fileNameAnswer = await inquirer.prompt([ + { + type: "input", + name: "userInput", + message: `Please provide the name of the ${selectedType}:`, + }, + ]); + + if (!fileNameAnswer.userInput || fileNameAnswer.userInput.trim().length === 0) { + console.error("Please provide a valid file name!"); + return await promptFileName(selectedType); + } + + return fileNameAnswer; +} + +/** + * Runs the interactive test:create "CLI" + * @returns {Promise} + */ +async function runInteractive() { + console.group(chalk.grey(`Create Test - v${version}\n`)); + + try { + const typeAnswer = await promptTestType(); + const fileNameAnswer = await promptFileName(typeAnswer.selectedOption.label); + + const type = typeAnswer.selectedOption; + // Convert fileName from snake_case or camelCase to kebab-case + const fileName = fileNameAnswer.userInput + .replace(/_+/g, "-") // Convert snake_case (underscore) to kebab-case (dashes) + .replace(/([a-z])([A-Z])/g, "$1-$2") // Convert camelCase to kebab-case + .replace(/\s+/g, "-") // Replace spaces with dashes + .toLowerCase(); // Ensure all lowercase + // Format the description for the test case + + const formattedName = fileName.replace(/-/g, " ").replace(/\b\w/g, char => char.toUpperCase()); + // Determine the directory based on the type + const dir = getTestFolderPath(type.dir); + const description = `${type.label} - ${formattedName}`; + + // Define the content template + const content = fs.readFileSync(boilerplateFilePath, "utf8").replace("{{description}}", description); + + // Ensure the directory exists + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }); + } + + // Create the file with the given name + const filePath = path.join(dir, `${fileName}.test.ts`); + + if (fs.existsSync(filePath)) { + console.error(chalk.red.bold(`\n✗ File "${fileName}.test.ts" already exists!\n`)); + process.exit(1); + } + + // Write the template content to the file + fs.writeFileSync(filePath, content, "utf8"); + + console.log(chalk.green.bold(`\n✔ File created at: test/${type.dir}/${fileName}.test.ts\n`)); + console.groupEnd(); + } catch (err) { + console.error(chalk.red("✗ Error: ", err.message)); + } +} + +//#endregion +//#region Run + +runInteractive(); + +//#endregion diff --git a/scripts/create-test/test-boilerplate.ts b/scripts/create-test/test-boilerplate.ts new file mode 100644 index 00000000000..337b5269c3c --- /dev/null +++ b/scripts/create-test/test-boilerplate.ts @@ -0,0 +1,44 @@ +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("{{description}}", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .ability(AbilityId.BALL_FETCH) + .battleStyle("single") + .disableCrits() + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) + .startingLevel(100) + .enemyLevel(100); + }); + + it("should do X", async () => { + await game.classicMode.startBattle([SpeciesId.FEEBAS]); + + game.move.use(MoveId.SPLASH); + + await game.toEndOfTurn(); + + expect(true).toBe(true); + }); +}); From 581348ec0a079a1187e9cb33300ac7565d57f2e6 Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Mon, 9 Jun 2025 21:28:39 -0400 Subject: [PATCH 227/262] [Misc] Remove extra newline in test-boilerplate.ts (#5965) --- scripts/create-test/test-boilerplate.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/create-test/test-boilerplate.ts b/scripts/create-test/test-boilerplate.ts index 337b5269c3c..40912be6c5f 100644 --- a/scripts/create-test/test-boilerplate.ts +++ b/scripts/create-test/test-boilerplate.ts @@ -32,11 +32,10 @@ describe("{{description}}", () => { .enemyLevel(100); }); - it("should do X", async () => { + it("should do XYZ", async () => { await game.classicMode.startBattle([SpeciesId.FEEBAS]); game.move.use(MoveId.SPLASH); - await game.toEndOfTurn(); expect(true).toBe(true); From a9869569fa70e4fb069c9214fb7e83c6f55181cd Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Mon, 9 Jun 2025 23:24:39 -0500 Subject: [PATCH 228/262] Fix sprite variant recolor --- src/pipelines/glsl/spriteFragShader.frag | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pipelines/glsl/spriteFragShader.frag b/src/pipelines/glsl/spriteFragShader.frag index 03f8c8c27bc..7ab3e4add00 100644 --- a/src/pipelines/glsl/spriteFragShader.frag +++ b/src/pipelines/glsl/spriteFragShader.frag @@ -154,7 +154,7 @@ void main() { for (int i = 0; i < 32; i++) { if (baseVariantColors[i].a == 0.0) break; - if (texture.a > 0.0 && all(lessThan(abs(texture.rgb - baseVariantColors[i].rgb), vec3(1.0/255.0)))) { + if (texture.a > 0.0 && all(lessThan(abs(texture.rgb - baseVariantColors[i].rgb), vec3(0.5/255.0)))) { texture.rgb = variantColors[i].rgb; break; } @@ -163,7 +163,7 @@ void main() { for (int i = 0; i < 32; i++) { if (spriteColors[i][3] == 0.0) break; - if (texture.a > 0.0 && all(lessThan(abs(texture.rgb - spriteColors[i].rgb), vec3(1.0/255.0)))) { + if (texture.a > 0.0 && all(lessThan(abs(texture.rgb - spriteColors[i].rgb), vec3(0.5/255.0)))) { vec3 fusionColor = vec3(fusionSpriteColors[i].rgb) / 255.0; vec3 bg = spriteColors[i].rgb; float gray = (bg.r + bg.g + bg.b) / 3.0; From aea2c178c9fcf2aa7320f64d055333abeef00a5e Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Tue, 10 Jun 2025 19:54:44 -0400 Subject: [PATCH 229/262] [i18n] Added locales text for force switch moves (#5930) --- src/phases/switch-summon-phase.ts | 42 +++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/src/phases/switch-summon-phase.ts b/src/phases/switch-summon-phase.ts index f6395397920..71136be0c93 100644 --- a/src/phases/switch-summon-phase.ts +++ b/src/phases/switch-summon-phase.ts @@ -174,19 +174,7 @@ export class SwitchSummonPhase extends SummonPhase { party[this.slotIndex] = this.lastPokemon; party[this.fieldIndex] = switchedInPokemon; const showTextAndSummon = () => { - globalScene.ui.showText( - this.player - ? i18next.t("battle:playerGo", { - pokemonName: getPokemonNameWithAffix(switchedInPokemon), - }) - : i18next.t("battle:trainerGo", { - trainerName: globalScene.currentBattle.trainer?.getName( - !(this.fieldIndex % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER, - ), - pokemonName: this.getPokemon().getNameToRender(), - }), - ); - + globalScene.ui.showText(this.getSendOutText(switchedInPokemon)); /** * If this switch is passing a Substitute, make the switched Pokemon matches the returned Pokemon's state as it left. * Otherwise, clear any persisting tags on the returned Pokemon. @@ -265,4 +253,32 @@ export class SwitchSummonPhase extends SummonPhase { queuePostSummon(): void { globalScene.phaseManager.unshiftNew("PostSummonPhase", this.getPokemon().getBattlerIndex()); } + + /** + * Get the text to be displayed when a pokemon is forced to switch and leave the field. + * @param switchedInPokemon - The Pokemon having newly been sent in. + * @returns The text to display. + */ + private getSendOutText(switchedInPokemon: Pokemon): string { + if (this.switchType === SwitchType.FORCE_SWITCH) { + // "XYZ was dragged out!" + return i18next.t("battle:pokemonDraggedOut", { + pokemonName: getPokemonNameWithAffix(switchedInPokemon), + }); + } + if (this.player) { + // "Go! XYZ!" + return i18next.t("battle:playerGo", { + pokemonName: getPokemonNameWithAffix(switchedInPokemon), + }); + } + + // "Trainer sent out XYZ!" + return i18next.t("battle:trainerGo", { + trainerName: globalScene.currentBattle.trainer?.getName( + !(this.fieldIndex % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER, + ), + pokemonName: this.getPokemon().getNameToRender(), + }); + } } From f499ea056866c17bb2fbfce7292469a2a939cdc8 Mon Sep 17 00:00:00 2001 From: Lugiad <2070109+Adri1@users.noreply.github.com> Date: Wed, 11 Jun 2025 06:44:30 +0200 Subject: [PATCH 230/262] [UI/UX] [Localization] Type icons corrections (#5952) * Updated both Spanish type icons * Update Brazilian Portuguese type icons * Update Catalan type icons * Update Traditional Chinese type icons * Update Turkish type icons * Update Russian type icons * Update Catalan type icons * Delete error * Update Russian type icon * Update Russian type icons --- public/images/types_ca.png | Bin 6383 -> 6381 bytes public/images/types_es-ES.png | Bin 2388 -> 5902 bytes public/images/types_es-MX.png | Bin 6131 -> 6290 bytes public/images/types_pt-BR.png | Bin 2374 -> 5919 bytes public/images/types_ru.png | Bin 7570 -> 7637 bytes public/images/types_tr.png | Bin 4467 -> 6175 bytes public/images/types_zh-CN.png | Bin 4412 -> 5646 bytes 7 files changed, 0 insertions(+), 0 deletions(-) diff --git a/public/images/types_ca.png b/public/images/types_ca.png index e85c84ed9c987049fd9965771a4a64a12dcc6b0b..a1c295d7b9b1c737a045d399597b661ad82ca5a4 100644 GIT binary patch delta 4498 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 C4ruQH diff --git a/public/images/types_es-ES.png b/public/images/types_es-ES.png index 8a321e515c491a3589a7ff7fd2b0c9cd495e3602..3596b7f6a0abf9a35bf0c3f288eeae39a28ef0a8 100644 GIT binary patch literal 5902 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 literal 2388 zcmcJQi9gia8^_O#u^V(tiAG4%V93}hn#sO18iVYNX_E;z24%)lF}E5^((F$3bQPzBy=tpb}gN0My)+{t+w+?PiETcTb-yV&LO)wF5MDl5_*l)!iA;fO9XnH8tJF7vaQ%R&|2rsjF4HlB*h3HP}&+6T&JMtI+c=-&m&>m@hWIlPo&-@aPMbv{_9%P*2N7fl@s>b$3VVQ~Uhej6A6!ciONPkvZ-xcWo!)g+5~YqSYa*1p5Rmm1(JM z744pYvtv5wxR?jU;^H`DeX_N_3q%ivyLSci(Cni^H?^kRI zj}=l?=nHLk->i@I^n|TYY7=fBC8d2aAYF>wpV~+5Hyyow(jDO!c<;$!E=d`v-ys?B zZua(+=N=P@oC$vcG|>h|=7ukGVke{YJ;ffe^qX8RO@H-Ops!FLuEeZg<@aYDw2_?5 zo0q$CpP9+n-o_%>SP|m$D;|>U%lEI4R)$^va#@=?uIhRw`3lg zSXp*?Wvm&S*cVNro5!~Eqr)6L;HD;wDX};ucB;#|C{3g}&HOhOQ;eqKG*_r$Cohsn z)LV=Qv!33&kRfx;Nri+PyJGE@pg$4_g_jR!!`a zCefSq-e{Q=t%?o_P6j8@*kWH_Se;oOGXye7vmd^HP+{`Ox+gC9_}Z(;UZQvabwv8n z-dCW5La{7CI|1+a0@L?LF(n?Ge`aB}DPNS-Usd!z9&Po$Rm!@p6!nC|)y+CsviQ^K zw&LVpao!CYDXV&3j9`0MA6B3Du3A$wjO?vOaRHZ*)!2|?ZA0seq7&*$W9BPCjQtin zs{~~!OumG>%aiH)NQceb+Ys2TZoY2zL7Tmkwi;m_8lE!@WrD_VK6*fJToS~3?PM5? zr=zMv(WtoHKj*cFRB{`^fddi-cTBCta%{vnhQ|Y1IH^_iVl6jvrPuFiSj`NW3BM~i zJG_mdY*SQ@Y|>J;t%pD7dDM6@kRI*ojS{pYhA7g!Xf^JI+tp+=aq2CDZ(m(&+Y{YV zyKGcNnwk4&jbE7wmAWJ8DOb5g)+%{MaWrU$V#+QyLX87EGjwIAYrRrcbryPA7hFfO z5uPSI^cvURNTjKzHBBRA$3V_fr~I&j6C>ANP}uc6dK8Kqd17X+tB-%4eb5F*`|z7N zA*&`GKH0T{_{e#W8IN<=2{cy0FZ#%S(udcCF#hfy+;br2qxD{3B8swurBDn;ca>#K z$N7Ait`CH`HS$+t=1ckKpQxTFhWr_iSV3S< zbxqj&<1%8O)hz=C5%f9#UG1}NQ0SJx*B1W`Esc&irLIu*d%S$!}7=*;V}G*oA+4K zt;KkkB0mq$>3Rx8QSRZ&w`C8KTu)Zvr_8$?cCbLF6iFNY!Rq4bC<9q8#YvR*Tx-O; z)=TwB`5oAUu?R8MCMP*n^3b1ir?2Z#x>h%Y7(rS2>6MX(ko3Aq^!THmuS0+3dVV)E zwjcs+U>_B9ad!fDB{dzPIvDS$gkR2yfz{Paz`b=FXVYQ6($tX0{=2xHhAGsm=dx0x zFZDHFdyo;{bM{r%ve7;0&GZcG3e23W-JWNa&2A5uN=?pqP_v!A&?2+5`!3V%QBnYI z++CNZ>CX)H(*Q zN&f~3XLf5)zO452H5m*`279{TsIOOQ)mE#P+pDCC&t_0*;QcyfQ-=d4gAdw+#%e~h zk8_S5fDMOuUr+&aFXw63iIM{)QEZEHef;|0wWOUL!>iR6J~rS%s!V>E0`r$>c0WHm z3IPa&06gpE2SB0`?GV@)Ne5)e&{!m3-A|&j$ihq|M&Ifo53)kT^zEwq@E;(Y> zVN$jRXT@2{o_K5czaH_(UPVXy@o3_+?|t7|KCjJ>MozTSrRni&uHORI2#+9ZZEbxV z@AOa#p|RL&Y`y7utbKTDM9)&-2E6i4cGKp2r;Uw`^|+f&vm+yxf@2&nud(mV|6Z^> z0Lm*v&YdgQuUp?1xdGp7T`(S><-B{U@Gd`s8`MORoT<=>5ogrcyjhBAXv8@zEHt-` zkNY>KuZB!tT;D*2h+hEV|3aytP|T==DXGS~6y}F+aqmgbkwX{^i}=+ykNb^{eeC7p+H!pg_ON#$Ua5pL3YT< z2w6vV*3a+%_V?!hym+4bdamcbulvpCx<5Ozaq=-LWs0+d5VArMP{>Rf3D&=@v>L(yPuPz$^Ak+HV zn)m(E`>a8%>9>q?qrmC-A4_hY$HMCphhJGmzNcRi43IvIXxY`v6HbCJrL-;X|x$|Fry3DbsqU#ruIBfNQ-!K0kO+7=W;9p zH~KTP7YD(Be!VU3K)AtxbkJqMvvVjw-nl#Og`)(UpT}zUXY^__fUmPTWE?eWxNN>R^ehy2 zW42?eU{{L=oIh1K1U{^9N7UkFdrkHa+f{U7JT?P;t=_VB=CPxUhE zf{shc*tWOd+@SYt8)-dq_^yWq1TxRB1&dlu4N?GRq&I4p`}!-_jB2+w*xo9Mu|4&Z z3*zR53i@=V^Qw7YVVZ^3Wyn=1Y2XXmPDn8BoB++ib>6~{MVw7mrei{c`~hkAD#h2| zx7l<-{FW+WteXJcWAyU*@Cf(zfk_4cZ?SrXk0p2D{*|%QuEV!YoEx|@^FWod3XY7D zZCv&1?q=&XAZ~`890itok-A*gCM!ruyu#)y;MS)a9{!E2+q6Gxqad?`G6r=U^(&QQX1Thzc0G56wz}ZLwbHvkDOfE zj)~Y{g1#z1OC;q&SyEHH2X@;QhDut?sQ})$sYdPZ_9M(fIWBW3J1{N6Uw(VzwO^L( zbTMo1Zgo5J!csk8q?2^HMEh7xk;lwrnVZ^#{KSbKN69RWL{`}azSpq3$y5*w2(tvZ z>R#$`y103#-n?LzOv_z(xn1SC{(X4NL$5G(ItHQ@m~b!hY%0!M4rht5=skHvf5)Kb z{XGLZ^_0x}TPP-ew3l3F6=FMnU@lAQcqO;9_ge#z=J@p#!^N>hyN-Gi3t+}apIuL6 zCPa^ZtSCmVI<@CNCBA%N1eQyvNL=|T8Lf}CrYpJhQl8rHZF!oF(9V1j6IryjSiv&n zv*41#&D;1~jtc*Jc#b%l&4V!l)2VsWsQ|hlE>PTy{pLT!FgU7Z;p5q5M*2M$Q^P~e ziQ(?n@;vyq;_=z{2hroOFD*QJlP^zL&_PIJWyan>=9CmSpRQI>L-3Af1im_&9NVg5wcRKXpt=t9j;0I za-E_$5?zRmU!4>)0`xR$8vN;uwb;!Xp8A&<<9$1NY+!^xHAYCP9fsI(E&2DfypOAK zZMwh9l;U363OugCfo;*g2=^C+hn(vAfdX5>?^=$E-Noh?7N(J?A#)qQ)1N4d!I}XX z*@1ehB`R<^M*i9I>cKiLwUlTxlFVus39MgbPbV^D+31Y7sDMIrt6Cyx$#`p~DHZaJ z{8@^*btYLKAF*LH%$+>Y?zhN<;2cI$XnYpZMW}XWLp=n4Q_+ysUCxt4F=cPRyjJQw zCyf3QK&?@QYm4kw=IQ=g%di|Cy?;*BcH_|i6#vRPy|2(a@1{tIN=iG$fAzW&R~D>` zemxuA;mIW(jJOgh7J}WIg58a-*?Br6E{nQw2#4%(sRBwaxJAr`J%elLqT+EAMG2Xh zwARm1F#Cd-Q!L=h+yLTohJ>w8A2GgC-{3Brgpj)O>$g_3a>8PZ7#xN0t;rGHG$6kv0P zhAT(^<$Nm1(bP3ATE+yJYUEMiOE(shDv-Tj3RTh zr_;j3S`yhxe6aoj%}2Xe_GXO=5zuRJ#R@4=hx?seV@Q{B^POdM2hYcunz0)Di5~E_ zusLn>cZZEIibmpk7}Wt}p67?oYI*JcyYT1`>x8&OsBLR-8Pn9%mbW6ubTjMGaPowA zi%b%8%l7m93~{nNsW^wK&?ik0>Di@g3XLg79^%4+(@~C*Mf_cprWo#d+KT&sqmFiA z;V#KvimeT9@{-%+Ey&%yv5HGa1et?Ye;f-FViS+NZyB63`>7^>Y(ACYy)h~(K9>~S zA{8%+q6QWi?q11!>-q+r-%v75sy*s`d~h7?4r4v-Kd~^l@-``L zmT8mG`Kav;T`${S59S0c-z(C?Vj|W z{=L6e>3wF&DL#CMZp-9Nj`K#yJVxLmJ{3n*L1|Kdhvp#=i~}+ev|b2gRHvu5Cq461S_q z2hBHKt32xi`nPtv-#)i){RKEimh8Zs z#Q&jc$lgKiHQj}&m1;hGs2vpC(dr~d)bdvk99J%Wah4_BE~+YPrj-Z@F`lt)mFF`r zXAMaJGL_h|VAxd`a=eW{YPDXRjGs@TG&ya8%?tHf_=co8S^6!}TR-81JIPG~h>vPd zv4a0%FvJtBgvYX|FA>h!$k}Dnv}ga$+6@Quw-C)IAuQyey1nFfkpB@y1Jv<%KpRpP zyxCpb4_|1>c-pO-*?!Mf?Rm%Yt)YbIbH7xnOwwcEj4@FFeOhmA`mp=Fd;+SCrQByTls4< zgN9vTE{;CsY{s(}`s$6g?e>OhLW!lE-G1rx8VBQdJrOO2DuIuI=7F<}@uJ0@J%K^f z&qEG<2T3WJjgoh8cAo0Lm&>&H#>8_T)+r2(q1{K%UNx696rC~$6z1eC8_W?te0yJs z!H6O6Bg0<2y2`GOBzH?cRP4S7UCStYp8%l1%b`0RCofn-S68+j52Gg52!_9w`KV=I zWr=D5Do|h_E&vb^TTxP_2@bAl91J*q>Z8~&Jk{|z(IHwzfJ%Hpl46q zqtm9KsN`SGQC2w=y3MJae+SRZXtu!f-BYTcQ}&T9AB~T|CubGJD*lH#fu`;iv?w1A z%~=Cb94O)qy2Jc$suQ=M}L#gxm^du7^U;W}I zb+ad8%V+Y|af6LKi$LZuzrj9Mrcq-vi$%UXt4(Hn`XQd3c}aD#yNgwb5JhIU;7U=@ zSWeIo6Gp|7tmrUdlH3e`^2EPhr{J-z4z~LSeN%-ejxlT^3b3{z8Q_p~tJnD;BjJi~ zUZ)#M2w2ILXPuS)4~b)=F{e=-7qkx+8Dz?qEM?p&4<;Vx-%AM4 z1Tkq4vYYCZaJ^@=+83%ds9t~Zcu{guvKeluWxOoTqLM!n*0QP7bE36aV-h7U^Wt5p zYg>6D)kO%knZz6dcD(~m?bm1iKHQWwJpRj`d;np_{P+e1-$CM|RY1<;4#>@YelYcH zygOzD+5LhA6ZJEEp1J^?ij(&a3jq1%UaqT*?y@Id6;0#(u9bOg$!@AWuh;e5ko*Q= zmdt0scV`vxR0cIB97|gYJ_^e|8yKyK2G3mbPLFT_)MzkD>Y=Q+4!T~8h^3u<96G5jOOaG9qS$g15QsD#*m*Wm!uRc?61uM&G+=rzz z2!#ue8iVM`fk}@{*2E0msST6^!{A7q#9N|~bgBbe{V#)c(MVehu4AeSc4i|Tk40;M zU^{al41#8d(x~y-+^2!@}8$zkM&zp zM2Xs7MmJjgiWBybX-)U?@1J~x^u~<6sB-NXRpCE=zm02uh4eqgiQ%96ooTfoWm0WI*6AdO76)nM)b!lt9W{HJ0P|<%PcCAON^`mMuIKgx`CItj|8h zp73zp{`|35gQqc6$-1%#X)vHYIe}>6;QRsoOuuhJrjo|j_*yAW<}Nkq-|@N2Mwrey z#M9AUam{JKj+=8pV(RuQk59eB=f}*4Y-euct)%1>o|%5O^0;#v1%&h~C32t;xF~&{ LJKAMhcF+F3SBk{eipHfE6QJPD7L&!ElO=F$tt-VLMnQ z(o`DK&57(b*)w#(Fl4cX(Fcmx1&*M|GBV*UDvWHA$XZo?zEYr}m2fVW=$ z9q!t2pYiA3==&*2}-c z=-$0i$*u{3cAKb!-MbeW0IXP_uOthjdj~b`B&h=cRm-5c0Fd_%?NSo` z>)+l?v^@vYlx{-oIhaNQfq?N>zCPJ_q+@Jb)VGq0^r(#fxd5PYLke17zKqHZDF!jx zFI=Vf3s;R9zvRNjXsqP zynV_vMrFJX3#u=I=_I5Msgt2&=TP&*V#5gq9b*IVI@Av<6G2!Da+jwI4XtLu%B|W` z1laW1rA?G(9x{Hy2!F6MXV*F!IHjHO9Bn!jup3|%0@h+l-z#SVk z&2_wskUa-4J8MUQZ7p+=lV6L1WseKTk9QHG)oi&Gm)Sc7H-AvG<&x>%Eo zBb8aT!3wfgK4G-uA>+quwp=2nqga%#NMwA<9n%koTeIQ81^_TQrZOJeTIOOK8jzD; zi)|3=c2IMt!HBG08-_(ZKO}!dR9?1fHm|1Z=t^0h?B8E0S3eby+E~ zGS)FK<8^5OUVkRC1%S96M6yVrn@a`yPCuhp!>pB0D9OT!qfhJAkPtQ1P}4NcMF=4n zz9T9Jvv&-mu_zUF-g!~k6GDhahO(lXeXPMlEQYcO{o|kc^sY@Y9-Z`9Io}ugpnqYt zps^@bia4)FGXenBK0oSFX`3LyEa8h7Q6>82dm+sNj25*+qY;ga%hrF`!p5tK@Lq4ZR#JU z)NVqnfq$gNBzTTC3EQGRD--EiLHb22>U3+q7XZ*a=*8B2FPh;Emkox?npS#*KBeEl zz(V9qR>s3N1I>e8DVeOT2(}s6njcD~olMp?Vgf+)sg>1>XcJn2rdwvl(gav%wCyAV z^jVAatf2lNaylsD3D40cy&68evRX+No#%z09Ck>RIE z;1_B>VL^tUBHB!`+9xQ&E<>$r*wk-GO+~HWkA~D#)a1^C)-`O%SRFdX_E~?d%$5LE zmI13ri2*PO(??duldwDqMQmmCYI5g=1%I;hCA>4L_4}c94P*O|{qsk)et(#b)-^1Y zM?|0@HC1XEL^`s|M-i7LxF!Txu)Cg}p-Cptv9hxzAX20o%c^gs!}}9uNBKdNAiG=R zf$c-VXG&{R)I3w#a5?x)>1Dr~*9}urHO+O|PsnS>0xII;vY!yGZO_b&@l0u1p??Nn z-*#c!YK(Y9 zEh?z7y`=2Msb4xSB%lHbb~B1Me1Co0^=eqOrB+E6d@nZW)o^6LnrfJRuco<1_7n2! zo<0@vF|wZ!ZOfL|Z=8F>mX^CsgSq!?LDu4phMev5?V&ebbhL9MK$Uq?R5tX+i^2BY zrZ%+;$;5Ud62f96QnZ?ZXxyqTLKp#>N|rI3UJ5?#A~=l;3Ghq6%48fyYJVpz$61Rv zhNVuFN)cI+FFVBa|A3Qo5n5XA#)-3CVgh#QXWJrKG;IJ-eh?+F>A2oFakfjZhIiy` zQj&$^M>_Rtc!2aNA+S~}&|C*dA31!YO+|bhAbmuuIbM8YRKsmcLz}U*DhuDJ%)qv# zT}GSN6Y0=)_l^@nUu>Vkbbk(%R%ICu-f0~RV@m_@I=p^qRhH?|$}Wrm024baIO(wC zR&5GXF`}vC(Fn#ulO zb*qSv&nB9Q*89(^Zj5SJ@Z>>5Sf0HY9V2Hg`&K%o-d38AK|Ji9obVz{{d009?lni*~$2P`rZknenPa3#}$9*l^3)xor_b?K4WUPFP&@r@qJcC?RbAyV}RsI zm|anek+ue8SJawhPH0~`*U+Q(nLiPH@YxBhkyTsPo`;aYNPnC2%WqUiG^BxfjAZ@U4NduYaEMZBgG&-_Ev2@CvO_jyt-0O$vo26(}z)MtNzmX-p*R=fNrj`W zWd`ivb{9CxXfPRD9-+JAAX_I;o$}IRQvg1gj4vRHSIuNoYn2sS0x|}GTxw!|3hu3FgC_ji2oMsYF?DoH)SHtYIhm~Yus6*ZqX z{Qlo*8u{%jWcvAIF*!==uY)(^L3mOZMP!%!@PBe>Q>%X()9j-SP9Z!Alltq7zb60r zFgcYa_16Iaykjq!WW1dnEQ^sh<3Yo@H{(I$k(Ggy(`>LhPMNW-1tMcl>LMcuJ8so> zf^`PQUeX`wjDoWT0K~B7@&tl`fzXU(((4_22{ZTC$4-C^4Cw3Yk#NlK7bi&H9eXn# zG=FwDyXkb&%GgIcf0hKUClX{2jCi2Qe_pSK z)oI^Tl7+?#|E^cV&q=Qm0yk;Jn(K4YO9s1MQ4t@XlU|}7?A&-`yo-j%s*-l2UHL#Z zHb0bUl1C$phyXPPfY#SWQ29W%@feNFihqRTNhmV3lF^`cdOU11(E6JG11nBx6a}QV zPO$$$r3bQ&lwvt5x>tFR^oY6MF(dZ0$ znaI`($`7Ihnave1?E1|qy&9IU$yAbsjyF%~)$q)RYMv=w^0%7iI`bhR-G>L9wSVJ) zGanM7)ps4b@v5PxI2QnLe?=wo3(AEu+NZMqwpLT$%FdC1r#Kh)S5yK3`rBF!=e&&7 zV*@+c@gyt{A`#pCg7UDSyq=Yv6@&!XblN%NXGQI-(k+6p7~Nk{88%Z2PjM~=`#KCg zkzIdVtDzGW0l+?Oc6zdQ6jIfY-GAlmtXUa*RXEw%5?~c+o8Nq*%_wWfL-|3JAiG)O zfx*5Gy&A4AD_4?*f!!T?H9UA&O*OpxTbkxNc$kn{MZc?c@Gv1-PMez9Q`r7nK2SD` zfwEal`06cXc5U8P1j~bHpllY4+>HQ$^F7sA7a-wCVcgJHT+tUS4kE=@Od>C z0PK2dN!Z|Re_{V+X#`-FZ9=1g10 z$Ou@x0qR7u(F~ktz7B9AElf3Wvm07L$7+(}vj0{^D;zbMN=F$iH-M zwCo200aEqQ5>x+YWiTH9^wVVHZ*paUp;NzLiK%bMzL%lDi{|$7Wq$^teI@Ni|76E$ zta~U2zz^|HCGA-EP!5(P>Uy3Z-wpuyDmDBt5tt7I2K0Z=ZyxML(_&r6bM_>f?py#5 zfTlYa1Z5Y|bmxN5LA0=7fhjW!3lsg><)}y9|Kmzb=AD(~$o8aZhd)HZODQ1ZZ#o1_=N- z(z(MlHs|UZqy+SK-li(dd~z?^r@n>?0OPYCVED>$hQKO#a(}B#L1|zr^W;|P1ZF-- z#PpeD06^EzmtkYD&5zA|l8EW_&}YZ*EGxpHGs&m`aOG+MmjctK*^bYCfHmp)Mw@~z z0T3)kqi^UxqOjr~4_4e`?k9aEfaE1X$4hT943Bi~Ffsw`!0T_nZj7y6UI+w9@t~Pn zhE*7!{Q%lG@_(vK$ME76n{jq@7m~iB8)vR{V>&$xXS;XmU69oYkq)O)(kfJoH zDoV3brAU`*K?FpK5SqM$?f&If8UWpsjjr{GQq1j4PS zt8EJ2p%4hm0S;PGB7grDsfhenayAp`b00U|V*gH~HV6)Y=FsLI*1!jpgL>jtk0S=D3zV5(jUn4W3 zuQO4R1XELmDtqHW11aKvp;m^cpjtF{ z0E(5BhZ9k9Xedrm7A22VM9axQ(MS{yfy5zD7&sDzN6O-_Qs zKB>SQ7z|fD0^#N5CF_NerMcT9P>PC*2qYSTM#Dh_obE$q5WL}3y6A5U+5nyC?&!*J zq*0+;772DV4~7a1WcpKri|Ze=RQj(lfdNB!6I>A}S>%?aA3zfE56;!Yo$|vuiHHCw zfD1rn&_OKf57yOz#-Pz1X#a=lKi&W201U06;U6FWl8cMW9~X4SaZgajuYmkZG~LX{ z6+oB*bee}d5jgG%(iGiN&uSK7WVG!;v^Mlp-F5!pq_Q2?{P4 z5`jVZk6;oJPo}xM5J0((E(Ci3;YziKLH`61uSKKK+(E}6JIoIjhK6`ODxE=~5&=DJ z6&R>k*3prK$0!g81hO3#PQU?*a57pB3s=Npk#H;;kXJw|0%#II`aNEoM)cU4*Wcqw z|IhKp?v7wy5h(w)9dP~sL*Z{L8lWONIC1n}*`Z0W|J9;6s{YJG5{(E_{l`!RI}DCY zCdtD|0Dyzb5#;3H3RpQZ9EC-q3Gx`SJQ7V(Mru=ptn@ecw2O8bvg!RtD1#lq(o>(hYSAO6rE*?}hzx3XRZM%-HNTXXyK zwc~%iHhzxxasWW1|0WTB!ss+I!;9b!XxM}6=s%{C$@ry7PH zHqp=v=Coh=Am!YnqZ__M@UO7jh1#VOI$p7q66q@<*X%uTjo}uRcSIPdlOfy%yjyPexU4KFGnR-@u76nE%inESY@FdQDpZi$zaJJ2Vb_j=Y-AH}vGqUDCGP@D*W%=UB zlgCLoj38vX*87q=%i)Jp)Yh`i@$H=#nQG?GUVgtO5VrKJwlXjW9h3Ai#oyu>h-j`G$E5*t%i~d9!wPLNT zkqax3J<4`W8ynx&hcibMA~z#^VmYc&FB5n*=f+ z=#r@g?Hljztx~P-OWEk{Kf7$`a2R4$W0w`dbQrSS_LIF(_r)?;bE z8mGO(b!GfzkMvkVf-FS+%ai<9kJR+?20J_V9bK-)P!{V~&uZufd9p(`W_Jk*FW{vX zMrWpV`(&S=S(Z4Mb|0^LfF@d67L43RkpenjWq7@l7ORU)HLQ}!l&uF%l7=$G(scIP zon@6y+o$b0z3-iFP=?=|@ZS3_3CBim2|Latl`2qwRU|*eM8YH$h%4?42z#i4vo%bs}@q(!hZ2~F1Hn2YAYzVl406ePtho{Apr8G3QQp3v&TEZ} zt7|)Ym$y&jh3q(Q$z*(YV^9?iP>-`XBV2qdnnis@lYio<|9zb&vmm)u3$bI3!L#k& zt~h1CO??}aYq_h0v+I|}o|_P8^5b`*UdGOvhj|NQKFA;uuE`(65=|4_soH>gs12uo^=96LL9v=&3T^2kf3&yV45_m61yM7R*5w_B5tOVAM4_XLb7h}T5LOM;?2H1!eO>>~6R8@3^|0r=v&ctx|iOa=tJz{x2cghLM z%#)K3F0`(Na@rU!Twmi-S1J&I~=W#zp4g0j2fO@ztIJW+OYln&fg= zWIXKz@dj#-0bA1omQP7qAjb3d^as#fze8DR zHwWOyH7~EVp-IBVj+ju+@asDr_r;ar0(|=VD%1)a}bx z9GrW<&-XmUQ7GrB_@r+*=V_(BaoLEp{g zq|izE92UqxRYvEB8IG=l6AIN!Gr5P>&Y8tiGFTv1X7Pu}Eln1WVs1F!U$0KooSu&zhx21_t+yNRh!smS>q zea(Q0d1(h3=Fh&!WO{AR@S zpcAzn@MQ$O!hLg`%PkSMYO@{vJ;~4KfIbSCVskoeV(PH7Zb$4SSJdmv85w1#C-yJr48ksJ=top@|X!^zfZKIf!(m7VzjZf2(=cG^(K->Pgd9Xv&N09=27R=CMzyoA(k5nx8}s zrVI4XsmdkHha58^i^YZveYd=QN1|vOKUHUSf;(_7H2Jkqz-)E0PQV;{60<)%51-s| zZpVdrL9>e!kLIsk@KP(k_fRduX)&5TmuFa@J)XUM3UKNvOn|3L>_nWA&iEB9|=$MnN zG4#LzjvKm1pVUP6y7>eCi)?*$K{g{!;gKsV<7|`FM34qCv@CWvhxK-fYu0%UrF-`@ zAM8FwRDDj7=pKGZNHZ0_SU&YSrp^pzHOq|?SG_C7b?)`%)f%B;G3%2Y z237@7cj{Kv--8kU`r4?EDN@ELq zy&yqW^{z`IW-6(X)0sDodLlo6itfHICUeU!eUkJ^hO>RKG>hzEk#?s4{)ZS?9eYk% z*h$+7XY>7%tQ1=b>++h;sJX9Ys@1yZrK&hYZE=G$jHnH0cXn2(?n_N@$E=!~7^^*w zG4K1fFgA+7t0dn2D3BI_DVPn-I+E`bL9V~xkZivwsyPs~crPrfBZ{Nr^Wg4#fg`8b zyF?qgdE)cy_NHQcP`Gf%^jGAo`#%!MZ1QLq}j|hEjc?J?kxOK~(4m6Qu z?uLZfq?;Hv=t}Gf%DcR0vHWv2f$9?y^Wj0D*S#8{C1H~?A=wLe9n)(>ue|A7FR}<+ z;ckHsM<{OhKuNTFUEzV3_4_Wy9!za;6T$c1=Ohl@7RX&~ru|jB9(ubhw!dgiJw=7LF`{Y6(M@bVgq7{QGXxFGkbU41L_C9QRD z#|w3&e4g+X_*w6T6zD@Q=jqoGsdE;h6$}O}O~{JZRw=7gbw%^mK4Fn!;-FDBMIbX@ zJ+(^{m2_aLsMqT$Z9fw{;N~K0~NI5zWp( zZt{Pd84B`bF51jjV}=?6=D#GCT#r6f;tlz1_E?0y4RwJ_A>jZSzj5Er!Kd({SQl|~ zCc;9yK{qUzi#4TAmF1oP*A%g0Y_G%ShX|kd8B1|V=`oUx%gF=A%53kL&!fg~)Jh-p z2{qiX<}#R3hpJ2QJ$`>uC;dBrYw%UASrQ|DQE;YX+eAtE=wXQ3Gd2DSTgQ5pufsWm z=KPZjFY-Q11m4|~r^W?wT~in6x#*FS_T8l5f}D^N3wTw^TRSi%(7GG0E$Q4+TbEpV zv=NGC0-yBx1>%8&^K^4b-NUI6h~J7DX78uh$lPV=&1->rYwVEG>f$AIxZ!i?^H* z4=M{ZcrjWLyXz9g?5(BK&Xe0tTYL2Aq}9dmIf_IH?twV0O@tidYFbx>BE)CDcr{FZy z9(j{zjoPPK2Hn0sY0st7KTiC$zk<0=W~zz33uLlg?lrO#DRuK5xAu16iMUA5*mm#S zYSk12eP@bWIKEciC0S#9HPCnmWPRntOEixxfvK2TR}caJ^%m&?d{N5Zk7W8 zkT@K|-SO=}A9E8Z8f$9_)DB90;~t;{3ug-eXvpUOeU^uNr-O0ASvO3vgQ+>&+uJCN zIg^t_ZXK+sA zRLsUYi(XFgbahzCDwrII?4sx z0m(AT0pfDOy0CyFVxG#Ffz$2hbqIQH1i!oO2uuJ4bHhyGI6})48#RFKSSHz#P_ig> zlk?gNsAvpH+cw!=!`TRbQJa|WspE;(apv0C^(ixzn}TAnE^dEq`M(FCmsQ!!t++4J z&N~_agkJnzpq5)<-vI!oW{` zC2_kcs?=N#=ddv$=)&y@7F3oH?W&~f8x*(YK%rq+Vc@KeY4|Waet#CLjMW_8&V5q1{@p1q{~O=Nf!*xs*)4!L0chC3W*+8C#LpjrAuba zk;FBsDj=Vh%AN!vFB6~4Q$dvqkU5uB)JrU5&#OKp658Al5pDRDXyW-&E`TWX!@*ri=ArPZ?MCf%ZU0Clm0Jcf}&XDOWmchCo3zij593B@_Gc zsg-_E`Xb}>&urTOV1NV&V5YO*4d~=RVlz_p?&k!b4&$=Mag^J|`mtCpi>wuLNNG(U zKin8{puov-ovEC2r}{9{uy#*~a~4`Ob=YY+P@te}USPdcAlR<;?4LqP<@ahX<2{bz z=8KAT_@5rp3U-BrlAGcr3d(=QyBzYyYd57RkZRmHysfOqhqnaxZU8}Ns)6vV-Pbi! zWNE_+tvpDqy@HyNhUkPOmo|)}=n{&I5HdJLLKg*T9J)Q6t^n&i;87e%_3HwPgrxgL zL%k5TJR1eWR=i};8)BKn41(NP*+rwRM*35-p&!NCea9&1MW6kw*=MxUd%KSxMNe6{ zL$?nXr%$sNTqF#HUwAc6cz_BF@g;$6qDzn51^-Y$PSiZ}h_uM>2!!I{oiG~_jyyM#z5N~XZNi5Mg2xvtG@4XnO`q5bR}Z8vJ_tX+fPUmio*145#tWFY`G50n#fjyb-Ls5pNHP5N=NcY*90}e@E7m9K@!l? z42P$tXr`lK}dR%4CWP)P9O*hCA zq~VRfV{G1JTLH+HgSL>!*SajPhi9lQ;kO`$CZR(3hJG1y+rFRU-X}xUGIx78%F?*8 z8uW_0C~Nj6t@Lxt_=w=&{y!_k|2+PjK}!Y|Iy;N$^58w9LuULi6bI+d;h_bKKTOCy zMo$H#>QA)}^DOx>oWu3kCgi`M@Zn~S8eHq{p%=Zm0_j|0t4XQWO7cQJkr~pGxZ4EU zUh5r34c+cf{`HIO`V1wk2=E_!J8?%Xo1sTj1NxeyzEqdMs56T#)c8uk0Gyp@jZlFs zf#)WZ+0%wFNwMjw!aKdRSat*}M78gJT~RCd4VD9mzrh;nWx>hzUf@HAFek~_ulXQ# z6Iw4F!W?W18<;x)6dpw|^%YL8!08P~i)DcJ5TwlTvbm#WRS8eV$0qKGYIC-Jw(IP6 z@l|RSpIq9jp;Hp@8#h430S~0X^?0A}JaTQ`kearq-(XlekGfyxT>?K~h-C3hzZTP) zVId{#Ge-|Amik%|i?+B!WTitzJzlGZG-Xkq$Vr6dP=75T4Mg(u!KR@G!2x+f%#F({ z)Sx`5xm~sB~ajiC>+)8zt}9Sbl+ujH;(8W(1Fmux6V_F4nF%3(FW2 zw^!K+<-X=@ce8>-oQ9^RS^ST$DnIQWNaWr2VdWjbu-N0UpGAB+_|fsEv{DS-|yciKW*PX>YIM^h0BLa z>$8HD^?5dF-y=+0_9S7M{Acx-#N-q|F@+wy!23`C?C###**X6_;?Lgha?!-Z1bu+6 zF@8djx6XarG!-;>{!7OzxnMU|$oL{Jyb UjQiS2?q3SnTf3lZE%7P;0bJ6D7ytkO diff --git a/public/images/types_ru.png b/public/images/types_ru.png index 571e162e8dc9f3da298566982b2634402f9ff570..1e0615f721f27d8cccceed1245195bea8eab43ac 100644 GIT binary patch delta 4800 zcma);c|6qL_s8F3Uz&`uRmgMJ2#}H_+dCNUqwTVpQDSTpQDzeA4Y{AA%&2IOa0&Aq&R9rK?MalSClkT8jf&v z#K4`ANEF;j8tDp`mv?eR$f2At&Q9`)G@^p8PEHCKR~c!zysMKdTn2$ez@6lrUEtCv zXIU9%gd7HmP^dAYkp(5O( zO9E@`;$6d>4i%EamXmZF2)8#p{Nhh~7?1v)f>fsT2u7$!GP&FXo628=aEY4;Q-7j~ z{702@xu)lxlb=vD+G%2z@6Bt<+FJVBlaK*ai7nQ^gj!c-ffoI{mK&YgE28v9pi5t(m`DxXaK3cGsvcGWg7=qL)e|;n}4^! zHyqhVy6-GL)Ne^k3m54^HQTTCu8}6*q^tdDn>4Lo=umiuL_7`YM{jpVy-4% zZA;ic$`%b~S%3#Xhf@;URU_r>NvUg!Us+$5kMLBeT_K1$>O1n?JGl#l6^wfn{VH73 zV|7dAVatS{(@8y+-7pIu`^K$5*Zt6( z{mZ{`eXMI04z5jhblE|H{U8YS$tB4ihgH=9o-Nwj;^Maj5@Jq!vl6|FMr=-#{Zb~M z`6|Dz+ZkS89op3~(t)r{s@o`r@c`6@YM_3`-eyu- z?OY|yxjOlVpM7HyCE9x2Ci!nKDkt1U!7R^Crii$_;@*;VP;nBZw1j>XJw|=lj}q9* zy5OHtQ(YtaZ1QqB^Db%pO<^gBmt;3iMm7Z9EO{ybBdsFv1B9q$!;+;94h^2IOd@YM z#cpt93;+&$+zEAkS=L*t@e|{6RD#dd{g6oA8HK3nlDD^*CKGmaL`5UK$h5Wk)Z3bZ zOij-G(aDtT0g#jXMEsBQOW|;TezAX}p=v8Ei71iL%*nz8I>B8}xiT0~)#kn;-uDVUK% z>XK=v>U(4Ff9U|vb*6RxMD8T8vJ845k+;os~ z-`}z?mBEg|OjqUnX~8){to$Nu|JblPn5hqI_6kS15~Dm@F(GK2n{!xPwSyGdJg zOG@;V@k8aRmTKN)@<1%S!zCC0jOn7&FR4YIR23d~4i!_^ppsZ)TuM z4_syv6~P@E=C76JM+0*eIGX@PH7qy~>*-CIPGm@@v50yerN=aTu4KxcSG-@#do%SU za9Jrn5;V>A3e;%D>LBgUQ{|4mr-xT&>LHdNN9K>JkR(bgpGWf|%LhslG)jdpx^B+b z*t+h*830Hc;mgbfBtHkXJAK)^m14b;=yPjZ4|9hl*;d73LB*lSddH6lAK_ss_z;_7 ztKz(zxsW(h@u?M}QVRuaD^Pye?a?P4sWy)X+@L%YT_P-C)hrR) z$WoRkhI`i*sepiDM1I(f>lm?^X;5XI45I~Fs^6gpKdw#DOZV#2(Kyv`Y0!I)91mbw z5V2J;>L(8SQ&Ue9ht+Hn_TDWL*>Z4azO?J7NvxMoO=6`>hFkW>SMl?{_w|2by;nxS z?lVraSc~%AHM(Su3MdrT0==y|=TMTw74o|7p@z+?gs~gix-6YlT(w@s-Aho~9Kx?E zEC_}tFf@Yw+i8JK4c?ltuIo$zwN?E=6I3yK)k|oCj7n;)o_&n+PX7`PvTjj9iB>DJ zgi~&c8*F_v*@kCK%qZsJ>`g7pM90SHzlT06XgUmAyXfA(prVVC|8A? za2kHxFE!Z?Sq`CU_vZ_uE|lCHK7d8=M2xAqQhQ60Z)|#yHXE}M#tG~^E|8Pm-hC&S&2#ONWMx%K&3fV#a3p2&|8)xO% zqHZHp-*%jW%)RU~MYL*DIrxs7wlHQ)MyB#;Y$Wlu5YrmBE>P}tyfM1>}C;w$$IDv_Hr2$(`JII?jG?;^-tPbvN*f3}F3dcT# ztJAcw%ZH1F?O*g&9GIRnd$oq2WC0GC6G;1pA;Xzx?~9F_P|1;EW(P-@dgKVw6a5j%|16 zygqFIHvDem(c97>Vj7)rJaW2DmI220NtD(|pgzKvX*GVRWKAmZ>F0>ozTOTQ)PBOA zM9zg#85_h&M61@AJAzQ}6A zABI}r7JcBcJ~T5MHk*MD`ZuKiM5bimnjxC=bu4A=sD}H+09Q9Z068wjS>OJN%I_%} znsxZ*u7qM`Jso{6pF{rMwcGj?T)<#?t(+WT(P1R;V*nidin|gnhQ{UHj!~fUT=i)N zVA3MK?CSGd;z8*FpyH878Z;1+S(bH9+S_(x9EzWZcF>WN@g07q7Pmy~qVY4=5?-Bp z(P6w`9Bke{vcE;S6nc2Nr)HbV|E*%P(RwHJw6JgeV|?ZSn3Td%+B;8Fz`d+Z4tvQ4H7?h zQUg@zl_m%jf6dAwyTqnprH=HEyV6DT6f!Z1r`lir8MNxJ3x{Gi3{N3)__WC7Y3Pa7 zFF~ahz*Kq+Z`X6>YAp_V28>QMIwdYNuz7j$c1%Pw8+^Cn-c-t_L_fA(vEeRIrtMN{ z(T(qc8L)U=tbm{TuvxEx(0lZJP$+T!ykjLx-h;%)j*85T?@m z3`wqT65U&ea*Gp-_Rli`s)jeUk4xF(O@yH3{M*g%4O2xL;ZzLJ^oT~j9oSZwh1s$J zz#CN0<6&iEsG<1N^NN$ zKlr^Q)0RSIX)|;=*XM&BYO0YLsdo=wEY@9{^;tqi9vPC{2@`}-OW%d)k6(1_oEI*( zvbFEfSciLaZOnu_{CH!r_UgMh5cYX6);WqzHI5MD=ItjX4{#)ncg7Yx^Y3oG(Bi-MExcH?!ZSc(yUl!LxzjyQDQ0)h<8T{pw0dQUZJB`Jasj2(5e3BmOq*o{_vF!~l`HDGx zlflJ;F6*hGgq>;{k?!^?(#A%QL;m^yBWQTe+w*M2@{sh4L9H;h)!LZJ9aGkc{L4gsRwX&~eP*E3%mLGF z7(P}OK$ZSde3iYj(uRKW)>rt&)l77{TVDik%(+N7=l{fJm%h<%mfKi&PiVk%UsaW3 z!gd7dpWP|F##@rOP(~2ZheKoy6RI(EfuMs@}h(I^wcBLeWsD7(y?<%(GlclE!LSyWg>{A zRrkvsnjPxWOn$30$ppK|kXwTffp>t@+YK8qN35I<9IC;gJuc2^ba8Y1*O-QesvECZ zF|U+Y!(e;U5P;A!a}O%D;_+K8_4kB*i%-Y{*dh7E{&neH9AUumCZiuaA8{?Y8QBPRymp$&J{8plXi&MuGyxg zFaQCM=>Bailf5bt3|j54xhi|sH|ZmB$PK6ua80v_M4#=-Cev;5zUH%R+RF+ZJMKU= zF3WW6MDGVTD!X2;F0MwwP2*~HkQ9bEf-65x(Dp!D8`1ir@=SfwA!9bV-W~9=8 zP0%wlA);r9>N(|J_i*s1<*uoKrQMetO>DQiQv<9GuYkoC&EP)E=5AsSejJ5|3DE&Y z{@8mfqA(@n=1M(-ukESfn4UGUcJ*Eu!EG+?F-h%HOWDy*Ppw&xPR?h`Z_S}e5Ej4_ z%)T_~q1OEkAH@!|4gL~5dATz;Mt2eTp?pAtxa~s?jMhqMlIubr?a@!CS*V^32c3QR zO)}or*hDzf&`IXOlqAC*3fER9u~JF->KALCr#=|>(lH{tW-8^pa34>$Y`THXqftTC zuG$>!39r7pZ*cSD&s?qxgtZ{kbx5LV`17%uc#1v#-l{mG`fL2<^KR-G@- z3}i(4z!>QV_&(7$s1A35+FHt1BgaT>e+v)?0(TjKHiw{}RVQnG_M?3wX}KSY;z<)a z%D8K^X~n9WL^;$t^5Ip$0fvaNOnTEo+C4a->lV5ESnu;CqyiV{ZW@uR&28b&MF0-f zvk#5(!GC*v7D)xr##JCabsC0+6cum2$9C<`z74Mm3fvVY?dZ;qlI>4!j+XCjSofY$ XZ=e_v*!$`#;d+ULWIgxE>Ww=Ny#dk$;he5 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 Date: Thu, 12 Jun 2025 08:24:27 +0900 Subject: [PATCH 231/262] [UI/UX] Default cursor to no when stop trying to teach move https://github.com/pagefaultgames/pokerogue/pull/5924 * [UI/UX] "Stop trying to teach move" Defaulting to "No" * [Test] setCursor to 0, 'Yes' to end learning move * Move confirmUIMode to its own file in enums, add docs --------- Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> --- src/enums/confirm-ui-mode.ts | 13 +++++++++++++ src/phases/learn-move-phase.ts | 5 +++++ src/ui/confirm-ui-handler.ts | 14 +++++++++++++- test/phases/learn-move-phase.test.ts | 4 ++++ 4 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 src/enums/confirm-ui-mode.ts diff --git a/src/enums/confirm-ui-mode.ts b/src/enums/confirm-ui-mode.ts new file mode 100644 index 00000000000..46bc42374cd --- /dev/null +++ b/src/enums/confirm-ui-mode.ts @@ -0,0 +1,13 @@ +// biome-ignore lint/correctness/noUnusedImports: Used in tsdoc +import type ConfirmUiHandler from "#app/ui/confirm-ui-handler"; + +/** + * Used by {@linkcode ConfirmUiHandler} to determine whether the cursor should start on Yes or No + */ +export const ConfirmUiMode = Object.freeze({ + /** Start cursor on Yes */ + DEFAULT_YES: 1, + /** Start cursor on No */ + DEFAULT_NO: 2 +}); +export type ConfirmUiMode = typeof ConfirmUiMode[keyof typeof ConfirmUiMode]; \ No newline at end of file diff --git a/src/phases/learn-move-phase.ts b/src/phases/learn-move-phase.ts index e24efa63b5a..e197f876d76 100644 --- a/src/phases/learn-move-phase.ts +++ b/src/phases/learn-move-phase.ts @@ -12,6 +12,7 @@ import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; import { PlayerPartyMemberPokemonPhase } from "#app/phases/player-party-member-pokemon-phase"; import type Pokemon from "#app/field/pokemon"; +import { ConfirmUiMode } from "#enums/confirm-ui-mode"; import { LearnMoveType } from "#enums/learn-move-type"; export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { @@ -163,6 +164,10 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { globalScene.ui.setMode(this.messageMode); this.replaceMoveCheck(move, pokemon); }, + false, + 0, + 0, + ConfirmUiMode.DEFAULT_NO, ); } diff --git a/src/ui/confirm-ui-handler.ts b/src/ui/confirm-ui-handler.ts index 7b5ca3d7e63..37fd50ca671 100644 --- a/src/ui/confirm-ui-handler.ts +++ b/src/ui/confirm-ui-handler.ts @@ -4,8 +4,11 @@ import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; import { Button } from "#enums/buttons"; import { globalScene } from "#app/global-scene"; +import { ConfirmUiMode } from "#enums/confirm-ui-mode"; export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler { + private confirmUiMode: ConfirmUiMode; + public static readonly windowWidth: number = 48; private switchCheck: boolean; @@ -105,7 +108,16 @@ export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler { this.optionSelectContainer.setPosition(globalScene.game.canvas.width / 6 - 1 + xOffset, -48 + yOffset); - this.setCursor(this.switchCheck ? this.switchCheckCursor : 0); + this.confirmUiMode = args.length >= 6 ? (args[5] as ConfirmUiMode) : ConfirmUiMode.DEFAULT_YES; + + switch (this.confirmUiMode) { + case ConfirmUiMode.DEFAULT_YES: + this.setCursor(this.switchCheck ? this.switchCheckCursor : 0); + break; + case ConfirmUiMode.DEFAULT_NO: + this.setCursor(this.switchCheck ? this.switchCheckCursor : 1); + break; + } return true; } diff --git a/test/phases/learn-move-phase.test.ts b/test/phases/learn-move-phase.test.ts index 88b8187069b..05dbf71d1f4 100644 --- a/test/phases/learn-move-phase.test.ts +++ b/test/phases/learn-move-phase.test.ts @@ -92,6 +92,10 @@ describe("Learn Move Phase", () => { game.onNextPrompt("LearnMovePhase", UiMode.CONFIRM, () => { game.scene.ui.processInput(Button.ACTION); }); + game.onNextPrompt("LearnMovePhase", UiMode.CONFIRM, () => { + game.scene.ui.setCursor(0); + game.scene.ui.processInput(Button.ACTION); + }); await game.phaseInterceptor.to(LearnMovePhase); const levelReq = bulbasaur.getLevelMoves(5)[0][0]; From 1029afcdbf538b84942ef17b4c4c83ac29543702 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Wed, 11 Jun 2025 21:42:04 -0500 Subject: [PATCH 232/262] [Refactor] Remove circular dependencies (part 4) (#5964) * Add abilityAttr.is methods * [WIP] move modifier stuff around * Untangle circular deps from modifiers * Move unlockables to own file * Untangle all circular deps outside of MEs * Move constants in MEs to their own files * Re-add missing import to battle.ts * Add necessary overload for getTag * Add missing type import in weather.ts * Init modifier types and pools in loading-scene * Remove stray commented code * Apply kev's suggestions from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/@types/ability-types.ts | 22 +- src/@types/modifier-types.ts | 32 + src/battle-scene.ts | 35 +- src/battle.ts | 6 +- src/constants.ts | 40 + src/data/abilities/ab-attrs/ab-attr.ts | 58 - src/data/abilities/ability-class.ts | 137 -- src/data/abilities/ability.ts | 1167 +++++++---------- src/data/abilities/apply-ab-attrs.ts | 829 ++++++++++++ src/data/arena-tag.ts | 26 +- src/data/balance/pokemon-evolutions.ts | 11 +- src/data/balance/tms.ts | 2 +- src/data/battle-anims.ts | 3 +- src/data/battler-tags.ts | 33 +- src/data/berry.ts | 16 +- src/data/challenge.ts | 2 +- src/data/data-lists.ts | 6 +- src/data/dialogue.ts | 43 - src/data/double-battle-dialogue.ts | 44 + src/data/moves/move.ts | 106 +- .../encounters/a-trainers-test-encounter.ts | 4 +- .../encounters/absolute-avarice-encounter.ts | 2 +- .../an-offer-you-cant-refuse-encounter.ts | 2 +- .../encounters/berries-abound-encounter.ts | 4 +- .../encounters/bug-type-superfan-encounter.ts | 4 +- .../encounters/clowning-around-encounter.ts | 9 +- .../encounters/dancing-lessons-encounter.ts | 2 +- .../encounters/dark-deal-encounter.ts | 2 +- .../encounters/delibirdy-encounter.ts | 2 +- .../department-store-sale-encounter.ts | 4 +- .../encounters/field-trip-encounter.ts | 2 +- .../encounters/fiery-fallout-encounter.ts | 6 +- .../encounters/fight-or-flight-encounter.ts | 4 +- .../encounters/fun-and-games-encounter.ts | 2 +- .../global-trade-system-encounter.ts | 4 +- .../mysterious-challengers-encounter.ts | 4 +- .../encounters/mysterious-chest-encounter.ts | 2 +- .../shady-vitamin-dealer-encounter.ts | 2 +- .../slumbering-snorlax-encounter.ts | 2 +- .../teleporting-hijinks-encounter.ts | 3 +- .../the-expert-pokemon-breeder-encounter.ts | 2 +- .../encounters/the-strong-stuff-encounter.ts | 2 +- .../the-winstrate-challenge-encounter.ts | 8 +- .../encounters/training-session-encounter.ts | 2 +- .../encounters/trash-to-treasure-encounter.ts | 4 +- .../encounters/weird-dream-encounter.ts | 4 +- .../mystery-encounter-save-data.ts | 2 +- .../mystery-encounters/mystery-encounters.ts | 36 - .../utils/encounter-phase-utils.ts | 9 +- .../utils/encounter-pokemon-utils.ts | 2 +- src/data/pokeball.ts | 3 +- src/data/trainers/trainer-config.ts | 6 +- src/data/weather.ts | 6 +- src/enums/modifier-pool-type.ts | 7 + src/{modifier => enums}/modifier-tier.ts | 0 src/enums/unlockables.ts | 7 + src/field/arena.ts | 11 +- src/field/pokemon.ts | 179 ++- src/loading-scene.ts | 5 + src/modifier/init-modifier-pools.ts | 854 ++++++++++++ src/modifier/modifier-pools.ts | 16 + src/modifier/modifier-type.ts | 946 ++----------- src/modifier/modifier.ts | 177 ++- src/overrides.ts | 2 +- src/phases/add-enemy-buff-modifier-phase.ts | 4 +- src/phases/attempt-run-phase.ts | 11 +- src/phases/battle-end-phase.ts | 4 +- src/phases/berry-phase.ts | 13 +- src/phases/encounter-phase.ts | 16 +- src/phases/faint-phase.ts | 13 +- src/phases/game-over-phase.ts | 4 +- src/phases/modifier-reward-phase.ts | 5 +- src/phases/move-effect-phase.ts | 33 +- src/phases/move-end-phase.ts | 4 +- src/phases/move-phase.ts | 34 +- src/phases/new-biome-encounter-phase.ts | 4 +- src/phases/obtain-status-effect-phase.ts | 4 +- src/phases/post-summon-phase.ts | 6 +- src/phases/post-turn-status-effect-phase.ts | 17 +- src/phases/quiet-form-change-phase.ts | 13 +- src/phases/ribbon-modifier-reward-phase.ts | 2 +- src/phases/select-modifier-phase.ts | 4 +- src/phases/stat-stage-change-phase.ts | 28 +- src/phases/summon-phase.ts | 4 +- src/phases/switch-summon-phase.ts | 14 +- src/phases/title-phase.ts | 11 +- src/phases/trainer-victory-phase.ts | 2 +- src/phases/turn-end-phase.ts | 4 +- src/phases/turn-start-phase.ts | 6 +- src/phases/unlock-phase.ts | 2 +- src/phases/victory-phase.ts | 2 +- src/phases/weather-effect-phase.ts | 14 +- src/system/game-data.ts | 2 +- src/system/unlockables.ts | 8 +- src/ui/party-ui-handler.ts | 21 +- src/ui/starter-select-ui-handler.ts | 2 +- src/ui/summary-ui-handler.ts | 2 +- src/ui/text.ts | 2 +- src/utils/modifier-utils.ts | 35 + test/abilities/healer.test.ts | 4 +- test/abilities/neutralizing_gas.test.ts | 3 +- .../abilities/normal-move-type-change.test.ts | 5 +- test/abilities/quick_draw.test.ts | 9 +- test/abilities/sand_veil.test.ts | 3 +- test/abilities/shield_dust.test.ts | 11 +- test/abilities/unburden.test.ts | 3 +- test/battle/damage_calculation.test.ts | 2 +- test/items/light_ball.test.ts | 2 +- test/items/lock_capsule.test.ts | 2 +- test/items/metal_powder.test.ts | 2 +- test/items/quick_powder.test.ts | 2 +- test/items/thick_club.test.ts | 2 +- test/moves/safeguard.test.ts | 3 +- test/moves/secret_power.test.ts | 3 +- .../clowning-around-encounter.test.ts | 4 +- .../encounters/delibirdy-encounter.test.ts | 2 +- .../global-trade-system-encounter.test.ts | 4 +- .../mysterious-challengers-encounter.test.ts | 2 +- .../trash-to-treasure-encounter.test.ts | 5 +- .../uncommon-breed-encounter.test.ts | 2 +- .../encounters/weird-dream-encounter.test.ts | 2 +- test/phases/form-change-phase.test.ts | 2 +- test/phases/game-over-phase.test.ts | 2 +- test/phases/select-modifier-phase.test.ts | 5 +- test/testUtils/gameManager.ts | 3 +- test/testUtils/helpers/field-helper.ts | 2 +- test/testUtils/helpers/overridesHelper.ts | 2 +- test/testUtils/testFileInitialization.ts | 4 + 128 files changed, 2994 insertions(+), 2427 deletions(-) create mode 100644 src/@types/modifier-types.ts delete mode 100644 src/data/abilities/ab-attrs/ab-attr.ts delete mode 100644 src/data/abilities/ability-class.ts create mode 100644 src/data/abilities/apply-ab-attrs.ts create mode 100644 src/data/double-battle-dialogue.ts create mode 100644 src/enums/modifier-pool-type.ts rename src/{modifier => enums}/modifier-tier.ts (100%) create mode 100644 src/enums/unlockables.ts create mode 100644 src/modifier/init-modifier-pools.ts create mode 100644 src/modifier/modifier-pools.ts create mode 100644 src/utils/modifier-utils.ts diff --git a/src/@types/ability-types.ts b/src/@types/ability-types.ts index 5d21aaaa844..6f21a012b64 100644 --- a/src/@types/ability-types.ts +++ b/src/@types/ability-types.ts @@ -1,11 +1,27 @@ -import type { AbAttr } from "#app/data/abilities/ab-attrs/ab-attr"; +import type { AbAttr } from "#app/data/abilities/ability"; import type Move from "#app/data/moves/move"; import type Pokemon from "#app/field/pokemon"; import type { BattleStat } from "#enums/stat"; +import type { AbAttrConstructorMap } from "#app/data/abilities/ability"; -export type AbAttrApplyFunc = (attr: TAttr, passive: boolean) => void; -export type AbAttrSuccessFunc = (attr: TAttr, passive: boolean) => boolean; +// Intentionally re-export all types from the ability attributes module +export type * from "#app/data/abilities/ability"; + +export type AbAttrApplyFunc = (attr: TAttr, passive: boolean, ...args: any[]) => void; +export type AbAttrSuccessFunc = (attr: TAttr, passive: boolean, ...args: any[]) => boolean; export type AbAttrCondition = (pokemon: Pokemon) => boolean; export type PokemonAttackCondition = (user: Pokemon | null, target: Pokemon | null, move: Move) => boolean; export type PokemonDefendCondition = (target: Pokemon, user: Pokemon, move: Move) => boolean; export type PokemonStatStageChangeCondition = (target: Pokemon, statsChanged: BattleStat[], stages: number) => boolean; + +/** + * Union type of all ability attribute class names as strings + */ +export type AbAttrString = keyof AbAttrConstructorMap; + +/** + * Map of ability attribute class names to an instance of the class. + */ +export type AbAttrMap = { + [K in keyof AbAttrConstructorMap]: InstanceType; +}; diff --git a/src/@types/modifier-types.ts b/src/@types/modifier-types.ts new file mode 100644 index 00000000000..6c0136e655e --- /dev/null +++ b/src/@types/modifier-types.ts @@ -0,0 +1,32 @@ +/** + * Re-exports of all the types defined in the modifier module. + */ + +import type Pokemon from "#app/field/pokemon"; +import type { ModifierConstructorMap } from "#app/modifier/modifier"; +import type { ModifierType, WeightedModifierType } from "#app/modifier/modifier-type"; +export type ModifierTypeFunc = () => ModifierType; +export type WeightedModifierTypeWeightFunc = (party: Pokemon[], rerollCount?: number) => number; + +export type { ModifierConstructorMap } from "#app/modifier/modifier"; + +/** + * Map of modifier names to their respective instance types + */ +export type ModifierInstanceMap = { + [K in keyof ModifierConstructorMap]: InstanceType; +}; + +/** + * Union type of all modifier constructors. + */ +export type ModifierClass = ModifierConstructorMap[keyof ModifierConstructorMap]; + +/** + * Union type of all modifier names as strings. + */ +export type ModifierString = keyof ModifierConstructorMap; + +export type ModifierPool = { + [tier: string]: WeightedModifierType[]; +} \ No newline at end of file diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 5586691a48d..d5cb5dcae42 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -58,23 +58,15 @@ import { getEnemyModifierTypesForWave, getLuckString, getLuckTextTint, - getModifierPoolForType, - getModifierType, getPartyLuckValue, - ModifierPoolType, - modifierTypes, PokemonHeldItemModifierType, } from "#app/modifier/modifier-type"; +import { getModifierType } from "./utils/modifier-utils"; +import { modifierTypes } from "./data/data-lists"; +import { getModifierPoolForType } from "./utils/modifier-utils"; +import { ModifierPoolType } from "#enums/modifier-pool-type"; import AbilityBar from "#app/ui/ability-bar"; -import { - applyAbAttrs, - applyPostBattleInitAbAttrs, - applyPostItemLostAbAttrs, - BlockItemTheftAbAttr, - DoubleBattleChanceAbAttr, - PostBattleInitAbAttr, - PostItemLostAbAttr, -} from "#app/data/abilities/ability"; +import { applyAbAttrs, applyPostBattleInitAbAttrs, applyPostItemLostAbAttrs } from "./data/abilities/apply-ab-attrs"; import { allAbilities } from "./data/data-lists"; import type { FixedBattleConfig } from "#app/battle"; import Battle from "#app/battle"; @@ -145,14 +137,13 @@ import { LoadingScene } from "#app/loading-scene"; import type { MovePhase } from "#app/phases/move-phase"; import { ShopCursorTarget } from "#app/enums/shop-cursor-target"; import MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { allMysteryEncounters, mysteryEncountersByBiome } from "#app/data/mystery-encounters/mystery-encounters"; import { - allMysteryEncounters, ANTI_VARIANCE_WEIGHT_MODIFIER, AVERAGE_ENCOUNTERS_PER_RUN_TARGET, BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT, MYSTERY_ENCOUNTER_SPAWN_MAX_WEIGHT, - mysteryEncountersByBiome, -} from "#app/data/mystery-encounters/mystery-encounters"; +} from "./constants"; import { MysteryEncounterSaveData } from "#app/data/mystery-encounters/mystery-encounter-save-data"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; @@ -1264,7 +1255,7 @@ export default class BattleScene extends SceneBase { const doubleChance = new NumberHolder(newWaveIndex % 10 === 0 ? 32 : 8); this.applyModifiers(DoubleBattleChanceBoosterModifier, true, doubleChance); for (const p of playerField) { - applyAbAttrs(DoubleBattleChanceAbAttr, p, null, false, doubleChance); + applyAbAttrs("DoubleBattleChanceAbAttr", p, null, false, doubleChance); } return Math.max(doubleChance.value, 1); } @@ -1469,7 +1460,7 @@ export default class BattleScene extends SceneBase { for (const pokemon of this.getPlayerParty()) { pokemon.resetBattleAndWaveData(); pokemon.resetTera(); - applyPostBattleInitAbAttrs(PostBattleInitAbAttr, pokemon); + applyPostBattleInitAbAttrs("PostBattleInitAbAttr", pokemon); if ( pokemon.hasSpecies(SpeciesId.TERAPAGOS) || (this.gameMode.isClassic && this.currentBattle.waveIndex > 180 && this.currentBattle.waveIndex <= 190) @@ -2745,7 +2736,7 @@ export default class BattleScene extends SceneBase { const cancelled = new BooleanHolder(false); if (source && source.isPlayer() !== target.isPlayer()) { - applyAbAttrs(BlockItemTheftAbAttr, source, cancelled); + applyAbAttrs("BlockItemTheftAbAttr", source, cancelled); } if (cancelled.value) { @@ -2785,13 +2776,13 @@ export default class BattleScene extends SceneBase { if (target.isPlayer()) { this.addModifier(newItemModifier, ignoreUpdate, playSound, false, instant); if (source && itemLost) { - applyPostItemLostAbAttrs(PostItemLostAbAttr, source, false); + applyPostItemLostAbAttrs("PostItemLostAbAttr", source, false); } return true; } this.addEnemyModifier(newItemModifier, ignoreUpdate, instant); if (source && itemLost) { - applyPostItemLostAbAttrs(PostItemLostAbAttr, source, false); + applyPostItemLostAbAttrs("PostItemLostAbAttr", source, false); } return true; } @@ -2814,7 +2805,7 @@ export default class BattleScene extends SceneBase { const cancelled = new BooleanHolder(false); if (source && source.isPlayer() !== target.isPlayer()) { - applyAbAttrs(BlockItemTheftAbAttr, source, cancelled); + applyAbAttrs("BlockItemTheftAbAttr", source, cancelled); } if (cancelled.value) { diff --git a/src/battle.ts b/src/battle.ts index 0cf01a0873d..245705f4801 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -13,7 +13,7 @@ import { import Trainer from "./field/trainer"; import { TrainerVariant } from "#enums/trainer-variant"; import type { GameMode } from "./game-mode"; -import { MoneyMultiplierModifier, PokemonHeldItemModifier } from "./modifier/modifier"; +import { MoneyMultiplierModifier, type PokemonHeldItemModifier } from "./modifier/modifier"; import type { PokeballType } from "#enums/pokeball"; import { trainerConfigs } from "#app/data/trainers/trainer-config"; import { SpeciesFormKey } from "#enums/species-form-key"; @@ -30,7 +30,7 @@ import i18next from "#app/plugins/i18n"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; import type { CustomModifierSettings } from "#app/modifier/modifier-type"; -import { ModifierTier } from "#app/modifier/modifier-tier"; +import { ModifierTier } from "#enums/modifier-tier"; import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { BattleType } from "#enums/battle-type"; import { ClassicFixedBossWaves } from "#enums/fixed-boss-waves"; @@ -173,7 +173,7 @@ export default class Battle { this.postBattleLoot.push( ...globalScene .findModifiers( - m => m instanceof PokemonHeldItemModifier && m.pokemonId === enemyPokemon.id && m.isTransferable, + m => m.is("PokemonHeldItemModifier") && m.pokemonId === enemyPokemon.id && m.isTransferable, false, ) .map(i => { diff --git a/src/constants.ts b/src/constants.ts index 62056ecc0d4..f3b37563d11 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -54,3 +54,43 @@ export const defaultStarterSpecies: SpeciesId[] = [ ]; export const saveKey = "x0i2O7WRiANTqPmZ"; // Temporary; secure encryption is not yet necessary + +/** + * Spawn chance: (BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT + WIGHT_INCREMENT_ON_SPAWN_MISS * ) / MYSTERY_ENCOUNTER_SPAWN_MAX_WEIGHT + */ +export const BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT = 3; + +/** + * The divisor for determining ME spawns, defines the "maximum" weight required for a spawn + * If spawn_weight === MYSTERY_ENCOUNTER_SPAWN_MAX_WEIGHT, 100% chance to spawn a ME + */ +export const MYSTERY_ENCOUNTER_SPAWN_MAX_WEIGHT = 256; + +/** + * When an ME spawn roll fails, WEIGHT_INCREMENT_ON_SPAWN_MISS is added to future rolls for ME spawn checks. + * These values are cleared whenever the next ME spawns, and spawn weight returns to BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT + */ +export const WEIGHT_INCREMENT_ON_SPAWN_MISS = 3; + +/** + * Specifies the target average for total ME spawns in a single Classic run. + * Used by anti-variance mechanic to check whether a run is above or below the target on a given wave. + */ +export const AVERAGE_ENCOUNTERS_PER_RUN_TARGET = 12; + +/** + * Will increase/decrease the chance of spawning a ME based on the current run's total MEs encountered vs AVERAGE_ENCOUNTERS_PER_RUN_TARGET + * Example: + * AVERAGE_ENCOUNTERS_PER_RUN_TARGET = 17 (expects avg 1 ME every 10 floors) + * ANTI_VARIANCE_WEIGHT_MODIFIER = 15 + * + * On wave 20, if 1 ME has been encountered, the difference from expected average is 0 MEs. + * So anti-variance adds 0/256 to the spawn weight check for ME spawn. + * + * On wave 20, if 0 MEs have been encountered, the difference from expected average is 1 ME. + * So anti-variance adds 15/256 to the spawn weight check for ME spawn. + * + * On wave 20, if 2 MEs have been encountered, the difference from expected average is -1 ME. + * So anti-variance adds -15/256 to the spawn weight check for ME spawn. + */ +export const ANTI_VARIANCE_WEIGHT_MODIFIER = 15; diff --git a/src/data/abilities/ab-attrs/ab-attr.ts b/src/data/abilities/ab-attrs/ab-attr.ts deleted file mode 100644 index 24fbb6dc338..00000000000 --- a/src/data/abilities/ab-attrs/ab-attr.ts +++ /dev/null @@ -1,58 +0,0 @@ -import type { AbAttrCondition } from "#app/@types/ability-types"; -import type Pokemon from "#app/field/pokemon"; -import type { BooleanHolder } from "#app/utils/common"; - -export abstract class AbAttr { - public showAbility: boolean; - private extraCondition: AbAttrCondition; - - /** - * @param showAbility - Whether to show this ability as a flyout during battle; default `true`. - * Should be kept in parity with mainline where possible. - */ - constructor(showAbility = true) { - this.showAbility = showAbility; - } - - /** - * Applies ability effects without checking conditions - * @param _pokemon - The pokemon to apply this ability to - * @param _passive - Whether or not the ability is a passive - * @param _simulated - Whether the call is simulated - * @param _args - Extra args passed to the function. Handled by child classes. - * @see {@linkcode canApply} - */ - apply( - _pokemon: Pokemon, - _passive: boolean, - _simulated: boolean, - _cancelled: BooleanHolder | null, - _args: any[], - ): void {} - - getTriggerMessage(_pokemon: Pokemon, _abilityName: string, ..._args: any[]): string | null { - return null; - } - - getCondition(): AbAttrCondition | null { - return this.extraCondition || null; - } - - addCondition(condition: AbAttrCondition): AbAttr { - this.extraCondition = condition; - return this; - } - - /** - * Returns a boolean describing whether the ability can be applied under current conditions - * @param _pokemon - The pokemon to apply this ability to - * @param _passive - Whether or not the ability is a passive - * @param _simulated - Whether the call is simulated - * @param _args - Extra args passed to the function. Handled by child classes. - * @returns `true` if the ability can be applied, `false` otherwise - * @see {@linkcode apply} - */ - canApply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { - return true; - } -} diff --git a/src/data/abilities/ability-class.ts b/src/data/abilities/ability-class.ts deleted file mode 100644 index 10bd01f3987..00000000000 --- a/src/data/abilities/ability-class.ts +++ /dev/null @@ -1,137 +0,0 @@ -import { AbilityId } from "#enums/ability-id"; -import type { AbAttrCondition } from "#app/@types/ability-types"; -import type { AbAttr } from "#app/data/abilities/ab-attrs/ab-attr"; -import i18next from "i18next"; -import type { Localizable } from "#app/@types/locales"; -import type { Constructor } from "#app/utils/common"; - -export class Ability implements Localizable { - public id: AbilityId; - - private nameAppend: string; - public name: string; - public description: string; - public generation: number; - public isBypassFaint: boolean; - public isIgnorable: boolean; - public isSuppressable = true; - public isCopiable = true; - public isReplaceable = true; - public attrs: AbAttr[]; - public conditions: AbAttrCondition[]; - - constructor(id: AbilityId, generation: number) { - this.id = id; - - this.nameAppend = ""; - this.generation = generation; - this.attrs = []; - this.conditions = []; - - this.isSuppressable = true; - this.isCopiable = true; - this.isReplaceable = true; - - this.localize(); - } - - public get isSwappable(): boolean { - return this.isCopiable && this.isReplaceable; - } - localize(): void { - const i18nKey = AbilityId[this.id] - .split("_") - .filter(f => f) - .map((f, i) => (i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase())) - .join("") as string; - - this.name = this.id ? `${i18next.t(`ability:${i18nKey}.name`) as string}${this.nameAppend}` : ""; - this.description = this.id ? (i18next.t(`ability:${i18nKey}.description`) as string) : ""; - } - - /** - * Get all ability attributes that match `attrType` - * @param attrType any attribute that extends {@linkcode AbAttr} - * @returns Array of attributes that match `attrType`, Empty Array if none match. - */ - getAttrs(attrType: Constructor): T[] { - return this.attrs.filter((a): a is T => a instanceof attrType); - } - - /** - * Check if an ability has an attribute that matches `attrType` - * @param attrType any attribute that extends {@linkcode AbAttr} - * @returns true if the ability has attribute `attrType` - */ - hasAttr(attrType: Constructor): boolean { - return this.attrs.some(attr => attr instanceof attrType); - } - - attr>(AttrType: T, ...args: ConstructorParameters): Ability { - const attr = new AttrType(...args); - this.attrs.push(attr); - - return this; - } - - conditionalAttr>( - condition: AbAttrCondition, - AttrType: T, - ...args: ConstructorParameters - ): Ability { - const attr = new AttrType(...args); - attr.addCondition(condition); - this.attrs.push(attr); - - return this; - } - - bypassFaint(): Ability { - this.isBypassFaint = true; - return this; - } - - ignorable(): Ability { - this.isIgnorable = true; - return this; - } - - unsuppressable(): Ability { - this.isSuppressable = false; - return this; - } - - uncopiable(): Ability { - this.isCopiable = false; - return this; - } - - unreplaceable(): Ability { - this.isReplaceable = false; - return this; - } - - condition(condition: AbAttrCondition): Ability { - this.conditions.push(condition); - - return this; - } - - partial(): this { - this.nameAppend += " (P)"; - return this; - } - - unimplemented(): this { - this.nameAppend += " (N)"; - return this; - } - - /** - * Internal flag used for developers to document edge cases. When using this, please be sure to document the edge case. - * @returns the ability - */ - edgeCase(): this { - return this; - } -} diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 128e772217f..2efe3607b4f 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -37,8 +37,6 @@ import { BattleType } from "#enums/battle-type"; import type { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { globalScene } from "#app/global-scene"; import { allAbilities } from "#app/data/data-lists"; -import { AbAttr } from "#app/data/abilities/ab-attrs/ab-attr"; -import { Ability } from "#app/data/abilities/ability-class"; // Enum imports import { Stat, type BattleStat, BATTLE_STATS, EFFECTIVE_STATS, getStatKey, type EffectiveStat } from "#enums/stat"; @@ -71,13 +69,223 @@ import type { PokemonDefendCondition, PokemonStatStageChangeCondition, PokemonAttackCondition, - AbAttrApplyFunc, - AbAttrSuccessFunc, + AbAttrString, + AbAttrMap, } from "#app/@types/ability-types"; import type { BattlerIndex } from "#enums/battler-index"; import type Move from "#app/data/moves/move"; import type { ArenaTrapTag, SuppressAbilitiesTag } from "#app/data/arena-tag"; import { noAbilityTypeOverrideMoves } from "../moves/invalid-moves"; +import type { Localizable } from "#app/@types/locales"; +import { applyAbAttrs } from "./apply-ab-attrs"; + +export class Ability implements Localizable { + public id: AbilityId; + + private nameAppend: string; + public name: string; + public description: string; + public generation: number; + public isBypassFaint: boolean; + public isIgnorable: boolean; + public isSuppressable = true; + public isCopiable = true; + public isReplaceable = true; + public attrs: AbAttr[]; + public conditions: AbAttrCondition[]; + + constructor(id: AbilityId, generation: number) { + this.id = id; + + this.nameAppend = ""; + this.generation = generation; + this.attrs = []; + this.conditions = []; + + this.localize(); + } + + public get isSwappable(): boolean { + return this.isCopiable && this.isReplaceable; + } + + localize(): void { + const i18nKey = AbilityId[this.id] + .split("_") + .filter(f => f) + .map((f, i) => (i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase())) + .join("") as string; + + this.name = this.id ? `${i18next.t(`ability:${i18nKey}.name`) as string}${this.nameAppend}` : ""; + this.description = this.id ? (i18next.t(`ability:${i18nKey}.description`) as string) : ""; + } + + /** + * Get all ability attributes that match `attrType` + * @param attrType - any attribute that extends {@linkcode AbAttr} + * @returns Array of attributes that match `attrType`, Empty Array if none match. + */ + getAttrs(attrType: T): AbAttrMap[T][] { + const targetAttr = AbilityAttrs[attrType]; + if (!targetAttr) { + return []; + } + return this.attrs.filter((a): a is AbAttrMap[T] => a instanceof targetAttr); + } + + /** + * Check if an ability has an attribute that matches `attrType` + * @param attrType - any attribute that extends {@linkcode AbAttr} + * @returns true if the ability has attribute `attrType` + */ + hasAttr(attrType: T): boolean { + const targetAttr = AbilityAttrs[attrType]; + if (!targetAttr) { + return false; + } + return this.attrs.some(attr => attr instanceof targetAttr); + } + + attr>(AttrType: T, ...args: ConstructorParameters): Ability { + const attr = new AttrType(...args); + this.attrs.push(attr); + + return this; + } + + conditionalAttr>( + condition: AbAttrCondition, + AttrType: T, + ...args: ConstructorParameters + ): Ability { + const attr = new AttrType(...args); + attr.addCondition(condition); + this.attrs.push(attr); + + return this; + } + + bypassFaint(): Ability { + this.isBypassFaint = true; + return this; + } + + ignorable(): Ability { + this.isIgnorable = true; + return this; + } + + unsuppressable(): Ability { + this.isSuppressable = false; + return this; + } + + uncopiable(): Ability { + this.isCopiable = false; + return this; + } + + unreplaceable(): Ability { + this.isReplaceable = false; + return this; + } + + condition(condition: AbAttrCondition): Ability { + this.conditions.push(condition); + + return this; + } + + partial(): this { + this.nameAppend += " (P)"; + return this; + } + + unimplemented(): this { + this.nameAppend += " (N)"; + return this; + } + + /** + * Internal flag used for developers to document edge cases. When using this, please be sure to document the edge case. + * @returns the ability + */ + edgeCase(): this { + return this; + } +} + +export abstract class AbAttr { + public showAbility: boolean; + private extraCondition: AbAttrCondition; + + /** + * Return whether this attribute is of the given type. + * + * @remarks + * Used to avoid requiring the caller to have imported the specific attribute type, avoiding circular dependencies. + * + * @param attr - The attribute to check against + * @returns Whether the attribute is an instance of the given type + */ + public is(attr: K): this is AbAttrMap[K] { + const targetAttr = AbilityAttrs[attr]; + if (!targetAttr) { + return false; + } + return this instanceof targetAttr; + } + + /** + * @param showAbility - Whether to show this ability as a flyout during battle; default `true`. + * Should be kept in parity with mainline where possible. + */ + constructor(showAbility = true) { + this.showAbility = showAbility; + } + + /** + * Applies ability effects without checking conditions + * @param _pokemon - The pokemon to apply this ability to + * @param _passive - Whether or not the ability is a passive + * @param _simulated - Whether the call is simulated + * @param _args - Extra args passed to the function. Handled by child classes. + * @see {@linkcode canApply} + */ + apply( + _pokemon: Pokemon, + _passive: boolean, + _simulated: boolean, + _cancelled: BooleanHolder | null, + _args: any[], + ): void {} + + getTriggerMessage(_pokemon: Pokemon, _abilityName: string, ..._args: any[]): string | null { + return null; + } + + getCondition(): AbAttrCondition | null { + return this.extraCondition || null; + } + + addCondition(condition: AbAttrCondition): AbAttr { + this.extraCondition = condition; + return this; + } + + /** + * Returns a boolean describing whether the ability can be applied under current conditions + * @param _pokemon - The pokemon to apply this ability to + * @param _passive - Whether or not the ability is a passive + * @param _simulated - Whether the call is simulated + * @param _args - Extra args passed to the function. Handled by child classes. + * @returns `true` if the ability can be applied, `false` otherwise + * @see {@linkcode apply} + */ + canApply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { + return true; + } +} export class BlockRecoilDamageAttr extends AbAttr { constructor() { @@ -131,11 +339,11 @@ export class DoubleBattleChanceAbAttr extends AbAttr { } export class PostBattleInitAbAttr extends AbAttr { - canApplyPostBattleInit(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { + canApplyPostBattleInit(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args?: any[]): boolean { return true; } - applyPostBattleInit(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): void {} + applyPostBattleInit(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args?: any[]): void {} } export class PostBattleInitFormChangeAbAttr extends PostBattleInitAbAttr { @@ -147,7 +355,7 @@ export class PostBattleInitFormChangeAbAttr extends PostBattleInitAbAttr { this.formFunc = formFunc; } - override canApplyPostBattleInit(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): boolean { + override canApplyPostBattleInit(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: never[]): boolean { const formIndex = this.formFunc(pokemon); return formIndex !== pokemon.formIndex && !simulated; } @@ -1478,7 +1686,7 @@ export class PostDefendContactDamageAbAttr extends PostDefendAbAttr { return ( !simulated && move.doesFlagEffectApply({ flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon }) && - !attacker.hasAbilityWithAttr(BlockNonDirectDamageAbAttr) + !attacker.hasAbilityWithAttr("BlockNonDirectDamageAbAttr") ); } @@ -1657,7 +1865,7 @@ export class PostDefendAbilityGiveAbAttr extends PostDefendAbAttr { return ( move.doesFlagEffectApply({ flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon }) && attacker.getAbility().isSuppressable && - !attacker.getAbility().hasAttr(PostDefendAbilityGiveAbAttr) + !attacker.getAbility().hasAttr("PostDefendAbilityGiveAbAttr") ); } @@ -1924,9 +2132,7 @@ export class FieldMultiplyStatAbAttr extends AbAttr { this.canStack || (!hasApplied.value && this.stat === stat && - checkedPokemon - .getAbilityAttrs(FieldMultiplyStatAbAttr) - .every(attr => (attr as FieldMultiplyStatAbAttr).stat !== stat)) + checkedPokemon.getAbilityAttrs("FieldMultiplyStatAbAttr").every(attr => attr.stat !== stat)) ); } @@ -2650,7 +2856,7 @@ export class PostAttackApplyStatusEffectAbAttr extends PostAttackAbAttr { if ( super.canApplyPostAttack(pokemon, passive, simulated, attacker, move, hitResult, args) && (simulated || - (!attacker.hasAbilityWithAttr(IgnoreMoveEffectsAbAttr) && + (!attacker.hasAbilityWithAttr("IgnoreMoveEffectsAbAttr") && pokemon !== attacker && (!this.contactRequired || move.doesFlagEffectApply({ flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon })) && @@ -2715,7 +2921,7 @@ export class PostAttackApplyBattlerTagAbAttr extends PostAttackAbAttr { /**Battler tags inflicted by abilities post attacking are also considered additional effects.*/ return ( super.canApplyPostAttack(pokemon, passive, simulated, attacker, move, hitResult, args) && - !attacker.hasAbilityWithAttr(IgnoreMoveEffectsAbAttr) && + !attacker.hasAbilityWithAttr("IgnoreMoveEffectsAbAttr") && pokemon !== attacker && (!this.contactRequired || move.doesFlagEffectApply({ flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon })) && @@ -3308,8 +3514,8 @@ export class PostSummonStatStageChangeAbAttr extends PostSummonAbAttr { for (const opponent of pokemon.getOpponents()) { const cancelled = new BooleanHolder(false); if (this.intimidate) { - applyAbAttrs(IntimidateImmunityAbAttr, opponent, cancelled, simulated); - applyAbAttrs(PostIntimidateStatStageChangeAbAttr, opponent, cancelled, simulated); + applyAbAttrs("IntimidateImmunityAbAttr", opponent, cancelled, simulated); + applyAbAttrs("PostIntimidateStatStageChangeAbAttr", opponent, cancelled, simulated); if (opponent.getTag(BattlerTagType.SUBSTITUTE)) { cancelled.value = true; @@ -5243,7 +5449,7 @@ export class PostWeatherLapseDamageAbAttr extends PostWeatherLapseAbAttr { _weather: Weather | null, _args: any[], ): boolean { - return !pokemon.hasAbilityWithAttr(BlockNonDirectDamageAbAttr); + return !pokemon.hasAbilityWithAttr("BlockNonDirectDamageAbAttr"); } override applyPostWeatherLapse( @@ -5544,7 +5750,7 @@ export class RepeatBerryNextTurnAbAttr extends PostTurnAbAttr { } // uncomment to make cheek pouch work with cud chew - // applyAbAttrs(HealFromBerryUseAbAttr, pokemon, new BooleanHolder(false)); + // applyAbAttrs("HealFromBerryUseAbAttr", pokemon, new BooleanHolder(false)); } /** @@ -5671,7 +5877,7 @@ export class PostTurnHurtIfSleepingAbAttr extends PostTurnAbAttr { .some( opp => (opp.status?.effect === StatusEffect.SLEEP || opp.hasAbility(AbilityId.COMATOSE)) && - !opp.hasAbilityWithAttr(BlockNonDirectDamageAbAttr) && + !opp.hasAbilityWithAttr("BlockNonDirectDamageAbAttr") && !opp.switchOutStatus, ); } @@ -5686,7 +5892,7 @@ export class PostTurnHurtIfSleepingAbAttr extends PostTurnAbAttr { for (const opp of pokemon.getOpponents()) { if ( (opp.status?.effect === StatusEffect.SLEEP || opp.hasAbility(AbilityId.COMATOSE)) && - !opp.hasAbilityWithAttr(BlockNonDirectDamageAbAttr) && + !opp.hasAbilityWithAttr("BlockNonDirectDamageAbAttr") && !opp.switchOutStatus ) { if (!simulated) { @@ -6326,8 +6532,8 @@ export class PostFaintContactDamageAbAttr extends PostFaintAbAttr { attacker !== undefined && move.doesFlagEffectApply({ flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon }); const cancelled = new BooleanHolder(false); - globalScene.getField(true).map(p => applyAbAttrs(FieldPreventExplosiveMovesAbAttr, p, cancelled, simulated)); - return !(!diedToDirectDamage || cancelled.value || attacker!.hasAbilityWithAttr(BlockNonDirectDamageAbAttr)); + globalScene.getField(true).map(p => applyAbAttrs("FieldPreventExplosiveMovesAbAttr", p, cancelled, simulated)); + return !(!diedToDirectDamage || cancelled.value || attacker!.hasAbilityWithAttr("BlockNonDirectDamageAbAttr")); } override applyPostFaint( @@ -7160,64 +7366,6 @@ export class TerrainEventTypeChangeAbAttr extends PostSummonAbAttr { } } -function applySingleAbAttrs( - pokemon: Pokemon, - passive: boolean, - attrType: Constructor, - applyFunc: AbAttrApplyFunc, - successFunc: AbAttrSuccessFunc, - args: any[], - gainedMidTurn = false, - simulated = false, - messages: string[] = [], -) { - if (!pokemon?.canApplyAbility(passive) || (passive && pokemon.getPassiveAbility().id === pokemon.getAbility().id)) { - return; - } - - const ability = passive ? pokemon.getPassiveAbility() : pokemon.getAbility(); - if ( - gainedMidTurn && - ability.getAttrs(attrType).some(attr => attr instanceof PostSummonAbAttr && !attr.shouldActivateOnGain()) - ) { - return; - } - - for (const attr of ability.getAttrs(attrType)) { - const condition = attr.getCondition(); - let abShown = false; - if ((condition && !condition(pokemon)) || !successFunc(attr, passive)) { - continue; - } - - globalScene.phaseManager.setPhaseQueueSplice(); - - if (attr.showAbility && !simulated) { - globalScene.phaseManager.queueAbilityDisplay(pokemon, passive, true); - abShown = true; - } - const message = attr.getTriggerMessage(pokemon, ability.name, args); - if (message) { - if (!simulated) { - globalScene.phaseManager.queueMessage(message); - } - messages.push(message); - } - - applyFunc(attr, passive); - - if (abShown) { - globalScene.phaseManager.queueAbilityDisplay(pokemon, passive, false); - } - - if (!simulated) { - pokemon.waveData.abilitiesApplied.add(ability.id); - } - - globalScene.phaseManager.clearPhaseQueueSplice(); - } -} - class ForceSwitchOutHelper { constructor(private switchType: SwitchType) {} @@ -7329,7 +7477,7 @@ class ForceSwitchOutHelper { if (player) { const blockedByAbility = new BooleanHolder(false); - applyAbAttrs(ForceSwitchOutImmunityAbAttr, opponent, blockedByAbility); + applyAbAttrs("ForceSwitchOutImmunityAbAttr", opponent, blockedByAbility); return !blockedByAbility.value; } @@ -7367,7 +7515,7 @@ class ForceSwitchOutHelper { */ public getFailedText(target: Pokemon): string | null { const blockedByAbility = new BooleanHolder(false); - applyAbAttrs(ForceSwitchOutImmunityAbAttr, target, blockedByAbility); + applyAbAttrs("ForceSwitchOutImmunityAbAttr", target, blockedByAbility); return blockedByAbility.value ? i18next.t("moveTriggers:cannotBeSwitchedOut", { pokemonName: getPokemonNameWithAffix(target) }) : null; @@ -7522,646 +7670,233 @@ export class PostDamageForceSwitchAbAttr extends PostDamageAbAttr { this.helper.switchOutLogic(pokemon); } } -function applyAbAttrsInternal( - attrType: Constructor, - pokemon: Pokemon | null, - applyFunc: AbAttrApplyFunc, - successFunc: AbAttrSuccessFunc, - args: any[], - simulated = false, - messages: string[] = [], - gainedMidTurn = false, -) { - for (const passive of [false, true]) { - if (pokemon) { - applySingleAbAttrs(pokemon, passive, attrType, applyFunc, successFunc, args, gainedMidTurn, simulated, messages); - globalScene.phaseManager.clearPhaseQueueSplice(); - } - } -} - -export function applyAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - cancelled: BooleanHolder | null, - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, passive) => attr.apply(pokemon, passive, simulated, cancelled, args), - (attr, passive) => attr.canApply(pokemon, passive, simulated, args), - args, - simulated, - ); -} - -export function applyPostBattleInitAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, passive) => attr.applyPostBattleInit(pokemon, passive, simulated, args), - (attr, passive) => attr.canApplyPostBattleInit(pokemon, passive, simulated, args), - args, - simulated, - ); -} - -export function applyPreDefendAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - attacker: Pokemon, - move: Move | null, - cancelled: BooleanHolder | null, - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, passive) => attr.applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args), - (attr, passive) => attr.canApplyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args), - args, - simulated, - ); -} - -export function applyPostDefendAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - attacker: Pokemon, - move: Move, - hitResult: HitResult | null, - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, passive) => attr.applyPostDefend(pokemon, passive, simulated, attacker, move, hitResult, args), - (attr, passive) => attr.canApplyPostDefend(pokemon, passive, simulated, attacker, move, hitResult, args), - args, - simulated, - ); -} - -export function applyPostMoveUsedAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - move: PokemonMove, - source: Pokemon, - targets: BattlerIndex[], - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, _passive) => attr.applyPostMoveUsed(pokemon, move, source, targets, simulated, args), - (attr, _passive) => attr.canApplyPostMoveUsed(pokemon, move, source, targets, simulated, args), - args, - simulated, - ); -} - -export function applyStatMultiplierAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - stat: BattleStat, - statValue: NumberHolder, - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, passive) => attr.applyStatStage(pokemon, passive, simulated, stat, statValue, args), - (attr, passive) => attr.canApplyStatStage(pokemon, passive, simulated, stat, statValue, args), - args, - ); -} /** - * Applies an ally's Stat multiplier attribute - * @param attrType - {@linkcode AllyStatMultiplierAbAttr} should always be AllyStatMultiplierAbAttr for the time being - * @param pokemon - The {@linkcode Pokemon} with the ability - * @param stat - The type of the checked {@linkcode Stat} - * @param statValue - {@linkcode NumberHolder} containing the value of the checked stat - * @param checkedPokemon - The {@linkcode Pokemon} with the checked stat - * @param ignoreAbility - Whether or not the ability should be ignored by the pokemon or its move. - * @param args - unused + * Map of all ability attribute constructors, for use with the `.is` method. */ -export function applyAllyStatMultiplierAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - stat: BattleStat, - statValue: NumberHolder, - simulated = false, - checkedPokemon: Pokemon, - ignoreAbility: boolean, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, passive) => - attr.applyAllyStat(pokemon, passive, simulated, stat, statValue, checkedPokemon, ignoreAbility, args), - (attr, passive) => - attr.canApplyAllyStat(pokemon, passive, simulated, stat, statValue, checkedPokemon, ignoreAbility, args), - args, - simulated, - ); -} - -export function applyPostSetStatusAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - effect: StatusEffect, - sourcePokemon?: Pokemon | null, - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, passive) => attr.applyPostSetStatus(pokemon, sourcePokemon, passive, effect, simulated, args), - (attr, passive) => attr.canApplyPostSetStatus(pokemon, sourcePokemon, passive, effect, simulated, args), - args, - simulated, - ); -} - -export function applyPostDamageAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - damage: number, - _passive: boolean, - simulated = false, - args: any[], - source?: Pokemon, -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, passive) => attr.applyPostDamage(pokemon, damage, passive, simulated, args, source), - (attr, passive) => attr.canApplyPostDamage(pokemon, damage, passive, simulated, args, source), - args, - ); -} +const AbilityAttrs = Object.freeze({ + BlockRecoilDamageAttr, + DoubleBattleChanceAbAttr, + PostBattleInitAbAttr, + PostBattleInitFormChangeAbAttr, + PostTeraFormChangeStatChangeAbAttr, + ClearWeatherAbAttr, + ClearTerrainAbAttr, + PreDefendAbAttr, + PreDefendFullHpEndureAbAttr, + BlockItemTheftAbAttr, + StabBoostAbAttr, + ReceivedMoveDamageMultiplierAbAttr, + AlliedFieldDamageReductionAbAttr, + ReceivedTypeDamageMultiplierAbAttr, + TypeImmunityAbAttr, + AttackTypeImmunityAbAttr, + TypeImmunityHealAbAttr, + NonSuperEffectiveImmunityAbAttr, + FullHpResistTypeAbAttr, + PostDefendAbAttr, + FieldPriorityMoveImmunityAbAttr, + PostStatStageChangeAbAttr, + MoveImmunityAbAttr, + WonderSkinAbAttr, + MoveImmunityStatStageChangeAbAttr, + ReverseDrainAbAttr, + PostDefendStatStageChangeAbAttr, + PostDefendHpGatedStatStageChangeAbAttr, + PostDefendApplyArenaTrapTagAbAttr, + PostDefendApplyBattlerTagAbAttr, + PostDefendTypeChangeAbAttr, + PostDefendTerrainChangeAbAttr, + PostDefendContactApplyStatusEffectAbAttr, + EffectSporeAbAttr, + PostDefendContactApplyTagChanceAbAttr, + PostDefendCritStatStageChangeAbAttr, + PostDefendContactDamageAbAttr, + PostDefendPerishSongAbAttr, + PostDefendWeatherChangeAbAttr, + PostDefendAbilitySwapAbAttr, + PostDefendAbilityGiveAbAttr, + PostDefendMoveDisableAbAttr, + PostStatStageChangeStatStageChangeAbAttr, + PreAttackAbAttr, + MoveEffectChanceMultiplierAbAttr, + IgnoreMoveEffectsAbAttr, + VariableMovePowerAbAttr, + FieldPreventExplosiveMovesAbAttr, + FieldMultiplyStatAbAttr, + MoveTypeChangeAbAttr, + PokemonTypeChangeAbAttr, + AddSecondStrikeAbAttr, + DamageBoostAbAttr, + MovePowerBoostAbAttr, + MoveTypePowerBoostAbAttr, + LowHpMoveTypePowerBoostAbAttr, + VariableMovePowerBoostAbAttr, + FieldMovePowerBoostAbAttr, + PreAttackFieldMoveTypePowerBoostAbAttr, + FieldMoveTypePowerBoostAbAttr, + UserFieldMoveTypePowerBoostAbAttr, + AllyMoveCategoryPowerBoostAbAttr, + StatMultiplierAbAttr, + PostAttackAbAttr, + AllyStatMultiplierAbAttr, + ExecutedMoveAbAttr, + GorillaTacticsAbAttr, + PostAttackStealHeldItemAbAttr, + PostAttackApplyStatusEffectAbAttr, + PostAttackContactApplyStatusEffectAbAttr, + PostAttackApplyBattlerTagAbAttr, + PostDefendStealHeldItemAbAttr, + PostSetStatusAbAttr, + SynchronizeStatusAbAttr, + PostVictoryAbAttr, + PostVictoryFormChangeAbAttr, + PostKnockOutAbAttr, + PostKnockOutStatStageChangeAbAttr, + CopyFaintedAllyAbilityAbAttr, + IgnoreOpponentStatStagesAbAttr, + IntimidateImmunityAbAttr, + PostIntimidateStatStageChangeAbAttr, + PostSummonAbAttr, + PostSummonRemoveEffectAbAttr, + PostSummonRemoveArenaTagAbAttr, + PostSummonAddArenaTagAbAttr, + PostSummonMessageAbAttr, + PostSummonUnnamedMessageAbAttr, + PostSummonAddBattlerTagAbAttr, + PostSummonRemoveBattlerTagAbAttr, + PostSummonStatStageChangeAbAttr, + PostSummonAllyHealAbAttr, + PostSummonClearAllyStatStagesAbAttr, + DownloadAbAttr, + PostSummonWeatherChangeAbAttr, + PostSummonTerrainChangeAbAttr, + PostSummonHealStatusAbAttr, + PostSummonFormChangeAbAttr, + PostSummonCopyAbilityAbAttr, + PostSummonUserFieldRemoveStatusEffectAbAttr, + PostSummonCopyAllyStatsAbAttr, + PostSummonTransformAbAttr, + PostSummonWeatherSuppressedFormChangeAbAttr, + PostSummonFormChangeByWeatherAbAttr, + CommanderAbAttr, + PreSwitchOutAbAttr, + PreSwitchOutResetStatusAbAttr, + PreSwitchOutClearWeatherAbAttr, + PreSwitchOutHealAbAttr, + PreSwitchOutFormChangeAbAttr, + PreLeaveFieldAbAttr, + PreLeaveFieldClearWeatherAbAttr, + PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr, + PreStatStageChangeAbAttr, + ReflectStatStageChangeAbAttr, + ProtectStatAbAttr, + ConfusionOnStatusEffectAbAttr, + PreSetStatusAbAttr, + PreSetStatusEffectImmunityAbAttr, + StatusEffectImmunityAbAttr, + UserFieldStatusEffectImmunityAbAttr, + ConditionalUserFieldStatusEffectImmunityAbAttr, + ConditionalUserFieldProtectStatAbAttr, + PreApplyBattlerTagAbAttr, + PreApplyBattlerTagImmunityAbAttr, + BattlerTagImmunityAbAttr, + UserFieldBattlerTagImmunityAbAttr, + ConditionalUserFieldBattlerTagImmunityAbAttr, + BlockCritAbAttr, + BonusCritAbAttr, + MultCritAbAttr, + ConditionalCritAbAttr, + BlockNonDirectDamageAbAttr, + BlockStatusDamageAbAttr, + BlockOneHitKOAbAttr, + ChangeMovePriorityAbAttr, + IgnoreContactAbAttr, + PreWeatherEffectAbAttr, + PreWeatherDamageAbAttr, + SuppressWeatherEffectAbAttr, + ForewarnAbAttr, + FriskAbAttr, + PostWeatherChangeAbAttr, + PostWeatherChangeFormChangeAbAttr, + PostWeatherLapseAbAttr, + PostWeatherLapseHealAbAttr, + PostWeatherLapseDamageAbAttr, + PostTerrainChangeAbAttr, + PostTurnAbAttr, + PostTurnStatusHealAbAttr, + PostTurnResetStatusAbAttr, + PostTurnRestoreBerryAbAttr, + RepeatBerryNextTurnAbAttr, + MoodyAbAttr, + SpeedBoostAbAttr, + PostTurnHealAbAttr, + PostTurnFormChangeAbAttr, + PostTurnHurtIfSleepingAbAttr, + FetchBallAbAttr, + PostBiomeChangeAbAttr, + PostBiomeChangeWeatherChangeAbAttr, + PostBiomeChangeTerrainChangeAbAttr, + PostMoveUsedAbAttr, + PostDancingMoveAbAttr, + PostItemLostAbAttr, + PostItemLostApplyBattlerTagAbAttr, + StatStageChangeMultiplierAbAttr, + StatStageChangeCopyAbAttr, + BypassBurnDamageReductionAbAttr, + ReduceBurnDamageAbAttr, + DoubleBerryEffectAbAttr, + PreventBerryUseAbAttr, + HealFromBerryUseAbAttr, + RunSuccessAbAttr, + CheckTrappedAbAttr, + ArenaTrapAbAttr, + MaxMultiHitAbAttr, + PostBattleAbAttr, + PostBattleLootAbAttr, + PostFaintAbAttr, + PostFaintUnsuppressedWeatherFormChangeAbAttr, + PostFaintContactDamageAbAttr, + PostFaintHPDamageAbAttr, + RedirectMoveAbAttr, + RedirectTypeMoveAbAttr, + BlockRedirectAbAttr, + ReduceStatusEffectDurationAbAttr, + FlinchEffectAbAttr, + FlinchStatStageChangeAbAttr, + IncreasePpAbAttr, + ForceSwitchOutImmunityAbAttr, + ReduceBerryUseThresholdAbAttr, + WeightMultiplierAbAttr, + SyncEncounterNatureAbAttr, + MoveAbilityBypassAbAttr, + AlwaysHitAbAttr, + IgnoreProtectOnContactAbAttr, + InfiltratorAbAttr, + ReflectStatusMoveAbAttr, + NoTransformAbilityAbAttr, + NoFusionAbilityAbAttr, + IgnoreTypeImmunityAbAttr, + IgnoreTypeStatusEffectImmunityAbAttr, + MoneyAbAttr, + PostSummonStatStageChangeOnArenaAbAttr, + FormBlockDamageAbAttr, + PreSummonAbAttr, + IllusionPreSummonAbAttr, + IllusionBreakAbAttr, + PostDefendIllusionBreakAbAttr, + IllusionPostBattleAbAttr, + BypassSpeedChanceAbAttr, + PreventBypassSpeedChanceAbAttr, + TerrainEventTypeChangeAbAttr, + PostDamageAbAttr, + PostDamageForceSwitchAbAttr, +}); /** - * Applies a field Stat multiplier attribute - * @param attrType {@linkcode FieldMultiplyStatAbAttr} should always be FieldMultiplyBattleStatAbAttr for the time being - * @param pokemon {@linkcode Pokemon} the Pokemon applying this ability - * @param stat {@linkcode Stat} the type of the checked stat - * @param statValue {@linkcode NumberHolder} the value of the checked stat - * @param checkedPokemon {@linkcode Pokemon} the Pokemon with the checked stat - * @param hasApplied {@linkcode BooleanHolder} whether or not a FieldMultiplyBattleStatAbAttr has already affected this stat - * @param args unused + * A map of of all {@linkcode AbAttr} constructors */ -export function applyFieldStatMultiplierAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - stat: Stat, - statValue: NumberHolder, - checkedPokemon: Pokemon, - hasApplied: BooleanHolder, - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, passive) => - attr.applyFieldStat(pokemon, passive, simulated, stat, statValue, checkedPokemon, hasApplied, args), - (attr, passive) => - attr.canApplyFieldStat(pokemon, passive, simulated, stat, statValue, checkedPokemon, hasApplied, args), - args, - ); -} - -export function applyPreAttackAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - defender: Pokemon | null, - move: Move, - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, passive) => attr.applyPreAttack(pokemon, passive, simulated, defender, move, args), - (attr, passive) => attr.canApplyPreAttack(pokemon, passive, simulated, defender, move, args), - args, - simulated, - ); -} - -export function applyExecutedMoveAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - attr => attr.applyExecutedMove(pokemon, simulated), - attr => attr.canApplyExecutedMove(pokemon, simulated), - args, - simulated, - ); -} - -export function applyPostAttackAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - defender: Pokemon, - move: Move, - hitResult: HitResult | null, - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, passive) => attr.applyPostAttack(pokemon, passive, simulated, defender, move, hitResult, args), - (attr, passive) => attr.canApplyPostAttack(pokemon, passive, simulated, defender, move, hitResult, args), - args, - simulated, - ); -} - -export function applyPostKnockOutAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - knockedOut: Pokemon, - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, passive) => attr.applyPostKnockOut(pokemon, passive, simulated, knockedOut, args), - (attr, passive) => attr.canApplyPostKnockOut(pokemon, passive, simulated, knockedOut, args), - args, - simulated, - ); -} - -export function applyPostVictoryAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, passive) => attr.applyPostVictory(pokemon, passive, simulated, args), - (attr, passive) => attr.canApplyPostVictory(pokemon, passive, simulated, args), - args, - simulated, - ); -} - -export function applyPostSummonAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, passive) => attr.applyPostSummon(pokemon, passive, simulated, args), - (attr, passive) => attr.canApplyPostSummon(pokemon, passive, simulated, args), - args, - simulated, - ); -} - -export function applyPreSummonAbAttrs(attrType: Constructor, pokemon: Pokemon, ...args: any[]): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, passive) => attr.applyPreSummon(pokemon, passive, args), - (attr, passive) => attr.canApplyPreSummon(pokemon, passive, args), - args, - ); -} - -export function applyPreSwitchOutAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, passive) => attr.applyPreSwitchOut(pokemon, passive, simulated, args), - (attr, passive) => attr.canApplyPreSwitchOut(pokemon, passive, simulated, args), - args, - simulated, - ); -} - -export function applyPreLeaveFieldAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, passive) => attr.applyPreLeaveField(pokemon, passive, simulated, args), - (attr, passive) => attr.canApplyPreLeaveField(pokemon, passive, simulated, args), - args, - simulated, - ); -} - -export function applyPreStatStageChangeAbAttrs( - attrType: Constructor, - pokemon: Pokemon | null, - stat: BattleStat, - cancelled: BooleanHolder, - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, passive) => attr.applyPreStatStageChange(pokemon, passive, simulated, stat, cancelled, args), - (attr, passive) => attr.canApplyPreStatStageChange(pokemon, passive, simulated, stat, cancelled, args), - args, - simulated, - ); -} - -export function applyPostStatStageChangeAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - stats: BattleStat[], - stages: number, - selfTarget: boolean, - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, _passive) => attr.applyPostStatStageChange(pokemon, simulated, stats, stages, selfTarget, args), - (attr, _passive) => attr.canApplyPostStatStageChange(pokemon, simulated, stats, stages, selfTarget, args), - args, - simulated, - ); -} - -export function applyPreSetStatusAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - effect: StatusEffect | undefined, - cancelled: BooleanHolder, - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, passive) => attr.applyPreSetStatus(pokemon, passive, simulated, effect, cancelled, args), - (attr, passive) => attr.canApplyPreSetStatus(pokemon, passive, simulated, effect, cancelled, args), - args, - simulated, - ); -} - -export function applyPreApplyBattlerTagAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - tag: BattlerTag, - cancelled: BooleanHolder, - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, passive) => attr.applyPreApplyBattlerTag(pokemon, passive, simulated, tag, cancelled, args), - (attr, passive) => attr.canApplyPreApplyBattlerTag(pokemon, passive, simulated, tag, cancelled, args), - args, - simulated, - ); -} - -export function applyPreWeatherEffectAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - weather: Weather | null, - cancelled: BooleanHolder, - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, passive) => attr.applyPreWeatherEffect(pokemon, passive, simulated, weather, cancelled, args), - (attr, passive) => attr.canApplyPreWeatherEffect(pokemon, passive, simulated, weather, cancelled, args), - args, - simulated, - ); -} - -export function applyPostTurnAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, passive) => attr.applyPostTurn(pokemon, passive, simulated, args), - (attr, passive) => attr.canApplyPostTurn(pokemon, passive, simulated, args), - args, - simulated, - ); -} - -export function applyPostWeatherChangeAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - weather: WeatherType, - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, passive) => attr.applyPostWeatherChange(pokemon, passive, simulated, weather, args), - (attr, passive) => attr.canApplyPostWeatherChange(pokemon, passive, simulated, weather, args), - args, - simulated, - ); -} - -export function applyPostWeatherLapseAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - weather: Weather | null, - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, passive) => attr.applyPostWeatherLapse(pokemon, passive, simulated, weather, args), - (attr, passive) => attr.canApplyPostWeatherLapse(pokemon, passive, simulated, weather, args), - args, - simulated, - ); -} - -export function applyPostTerrainChangeAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - terrain: TerrainType, - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, passive) => attr.applyPostTerrainChange(pokemon, passive, simulated, terrain, args), - (attr, passive) => attr.canApplyPostTerrainChange(pokemon, passive, simulated, terrain, args), - args, - simulated, - ); -} - -export function applyCheckTrappedAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - trapped: BooleanHolder, - otherPokemon: Pokemon, - messages: string[], - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, passive) => attr.applyCheckTrapped(pokemon, passive, simulated, trapped, otherPokemon, args), - (attr, passive) => attr.canApplyCheckTrapped(pokemon, passive, simulated, trapped, otherPokemon, args), - args, - simulated, - messages, - ); -} - -export function applyPostBattleAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, passive) => attr.applyPostBattle(pokemon, passive, simulated, args), - (attr, passive) => attr.canApplyPostBattle(pokemon, passive, simulated, args), - args, - simulated, - ); -} - -export function applyPostFaintAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - attacker?: Pokemon, - move?: Move, - hitResult?: HitResult, - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, passive) => attr.applyPostFaint(pokemon, passive, simulated, attacker, move, hitResult, args), - (attr, passive) => attr.canApplyPostFaint(pokemon, passive, simulated, attacker, move, hitResult, args), - args, - simulated, - ); -} - -export function applyPostItemLostAbAttrs( - attrType: Constructor, - pokemon: Pokemon, - simulated = false, - ...args: any[] -): void { - applyAbAttrsInternal( - attrType, - pokemon, - (attr, _passive) => attr.applyPostItemLost(pokemon, simulated, args), - (attr, _passive) => attr.canApplyPostItemLost(pokemon, simulated, args), - args, - ); -} - -/** - * Applies abilities when they become active mid-turn (ability switch) - * - * Ignores passives as they don't change and shouldn't be reapplied when main abilities change - */ -export function applyOnGainAbAttrs(pokemon: Pokemon, passive = false, simulated = false, ...args: any[]): void { - applySingleAbAttrs( - pokemon, - passive, - PostSummonAbAttr, - (attr, passive) => attr.applyPostSummon(pokemon, passive, simulated, args), - (attr, passive) => attr.canApplyPostSummon(pokemon, passive, simulated, args), - args, - true, - simulated, - ); -} - -/** - * Applies ability attributes which activate when the ability is lost or suppressed (i.e. primal weather) - */ -export function applyOnLoseAbAttrs(pokemon: Pokemon, passive = false, simulated = false, ...args: any[]): void { - applySingleAbAttrs( - pokemon, - passive, - PreLeaveFieldAbAttr, - (attr, passive) => attr.applyPreLeaveField(pokemon, passive, simulated, [...args, true]), - (attr, passive) => attr.canApplyPreLeaveField(pokemon, passive, simulated, [...args, true]), - args, - true, - simulated, - ); - - applySingleAbAttrs( - pokemon, - passive, - IllusionBreakAbAttr, - (attr, passive) => attr.apply(pokemon, passive, simulated, null, args), - (attr, passive) => attr.canApply(pokemon, passive, simulated, args), - args, - true, - simulated, - ); -} +export type AbAttrConstructorMap = typeof AbilityAttrs; /** * Sets the ability of a Pokémon as revealed. diff --git a/src/data/abilities/apply-ab-attrs.ts b/src/data/abilities/apply-ab-attrs.ts new file mode 100644 index 00000000000..e2f8ec9c14c --- /dev/null +++ b/src/data/abilities/apply-ab-attrs.ts @@ -0,0 +1,829 @@ +import type { AbAttrApplyFunc, AbAttrMap, AbAttrString, AbAttrSuccessFunc } from "#app/@types/ability-types"; +import type Pokemon from "#app/field/pokemon"; +import { globalScene } from "#app/global-scene"; +import type { BooleanHolder, NumberHolder } from "#app/utils/common"; +import type { BattlerIndex } from "#enums/battler-index"; +import type { HitResult } from "#enums/hit-result"; +import type { BattleStat, Stat } from "#enums/stat"; +import type { StatusEffect } from "#enums/status-effect"; +import type { WeatherType } from "#enums/weather-type"; +import type { BattlerTag } from "../battler-tags"; +import type Move from "../moves/move"; +import type { PokemonMove } from "../moves/pokemon-move"; +import type { TerrainType } from "../terrain"; +import type { Weather } from "../weather"; +import type { + PostBattleInitAbAttr, + PreDefendAbAttr, + PostDefendAbAttr, + PostMoveUsedAbAttr, + StatMultiplierAbAttr, + AllyStatMultiplierAbAttr, + PostSetStatusAbAttr, + PostDamageAbAttr, + FieldMultiplyStatAbAttr, + PreAttackAbAttr, + ExecutedMoveAbAttr, + PostAttackAbAttr, + PostKnockOutAbAttr, + PostVictoryAbAttr, + PostSummonAbAttr, + PreSummonAbAttr, + PreSwitchOutAbAttr, + PreLeaveFieldAbAttr, + PreStatStageChangeAbAttr, + PostStatStageChangeAbAttr, + PreSetStatusAbAttr, + PreApplyBattlerTagAbAttr, + PreWeatherEffectAbAttr, + PreWeatherDamageAbAttr, + PostTurnAbAttr, + PostWeatherChangeAbAttr, + PostWeatherLapseAbAttr, + PostTerrainChangeAbAttr, + CheckTrappedAbAttr, + PostBattleAbAttr, + PostFaintAbAttr, + PostItemLostAbAttr, +} from "./ability"; + +function applySingleAbAttrs( + pokemon: Pokemon, + passive: boolean, + attrType: T, + applyFunc: AbAttrApplyFunc, + successFunc: AbAttrSuccessFunc, + args: any[], + gainedMidTurn = false, + simulated = false, + messages: string[] = [], +) { + if (!pokemon?.canApplyAbility(passive) || (passive && pokemon.getPassiveAbility().id === pokemon.getAbility().id)) { + return; + } + + const ability = passive ? pokemon.getPassiveAbility() : pokemon.getAbility(); + if ( + gainedMidTurn && + ability.getAttrs(attrType).some(attr => { + attr.is("PostSummonAbAttr") && !attr.shouldActivateOnGain(); + }) + ) { + return; + } + + for (const attr of ability.getAttrs(attrType)) { + const condition = attr.getCondition(); + let abShown = false; + if ((condition && !condition(pokemon)) || !successFunc(attr, passive)) { + continue; + } + + globalScene.phaseManager.setPhaseQueueSplice(); + + if (attr.showAbility && !simulated) { + globalScene.phaseManager.queueAbilityDisplay(pokemon, passive, true); + abShown = true; + } + const message = attr.getTriggerMessage(pokemon, ability.name, args); + if (message) { + if (!simulated) { + globalScene.phaseManager.queueMessage(message); + } + messages.push(message); + } + + applyFunc(attr, passive); + + if (abShown) { + globalScene.phaseManager.queueAbilityDisplay(pokemon, passive, false); + } + + if (!simulated) { + pokemon.waveData.abilitiesApplied.add(ability.id); + } + + globalScene.phaseManager.clearPhaseQueueSplice(); + } +} + +function applyAbAttrsInternal( + attrType: T, + pokemon: Pokemon | null, + applyFunc: AbAttrApplyFunc, + successFunc: AbAttrSuccessFunc, + args: any[], + simulated = false, + messages: string[] = [], + gainedMidTurn = false, +) { + for (const passive of [false, true]) { + if (pokemon) { + applySingleAbAttrs(pokemon, passive, attrType, applyFunc, successFunc, args, gainedMidTurn, simulated, messages); + globalScene.phaseManager.clearPhaseQueueSplice(); + } + } +} + +export function applyAbAttrs( + attrType: T, + pokemon: Pokemon, + cancelled: BooleanHolder | null, + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + // @ts-expect-error: TODO: fix the error on `cancelled` + (attr, passive) => attr.apply(pokemon, passive, simulated, cancelled, args), + (attr, passive) => attr.canApply(pokemon, passive, simulated, args), + args, + simulated, + ); +} + +// TODO: Improve the type signatures of the following methods / refactor the apply methods + +export function applyPostBattleInitAbAttrs( + attrType: AbAttrMap[K] extends PostBattleInitAbAttr ? K : never, + pokemon: Pokemon, + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => (attr as PostBattleInitAbAttr).applyPostBattleInit(pokemon, passive, simulated, args), + (attr, passive) => (attr as PostBattleInitAbAttr).canApplyPostBattleInit(pokemon, passive, simulated, args), + args, + simulated, + ); +} + +export function applyPreDefendAbAttrs( + attrType: AbAttrMap[K] extends PreDefendAbAttr ? K : never, + pokemon: Pokemon, + attacker: Pokemon, + move: Move | null, + cancelled: BooleanHolder | null, + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => + (attr as PreDefendAbAttr).applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args), + (attr, passive) => + (attr as PreDefendAbAttr).canApplyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args), + args, + simulated, + ); +} + +export function applyPostDefendAbAttrs( + attrType: AbAttrMap[K] extends PostDefendAbAttr ? K : never, + pokemon: Pokemon, + attacker: Pokemon, + move: Move, + hitResult: HitResult | null, + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => + (attr as PostDefendAbAttr).applyPostDefend(pokemon, passive, simulated, attacker, move, hitResult, args), + (attr, passive) => + (attr as PostDefendAbAttr).canApplyPostDefend(pokemon, passive, simulated, attacker, move, hitResult, args), + args, + simulated, + ); +} + +export function applyPostMoveUsedAbAttrs( + attrType: AbAttrMap[K] extends PostMoveUsedAbAttr ? K : never, + pokemon: Pokemon, + move: PokemonMove, + source: Pokemon, + targets: BattlerIndex[], + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, _passive) => (attr as PostMoveUsedAbAttr).applyPostMoveUsed(pokemon, move, source, targets, simulated, args), + (attr, _passive) => + (attr as PostMoveUsedAbAttr).canApplyPostMoveUsed(pokemon, move, source, targets, simulated, args), + args, + simulated, + ); +} + +export function applyStatMultiplierAbAttrs( + attrType: AbAttrMap[K] extends StatMultiplierAbAttr ? K : never, + pokemon: Pokemon, + stat: BattleStat, + statValue: NumberHolder, + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => + (attr as StatMultiplierAbAttr).applyStatStage(pokemon, passive, simulated, stat, statValue, args), + (attr, passive) => + (attr as StatMultiplierAbAttr).canApplyStatStage(pokemon, passive, simulated, stat, statValue, args), + args, + ); +} + +/** + * Applies an ally's Stat multiplier attribute + * @param attrType - {@linkcode AllyStatMultiplierAbAttr} should always be AllyStatMultiplierAbAttr for the time being + * @param pokemon - The {@linkcode Pokemon} with the ability + * @param stat - The type of the checked {@linkcode Stat} + * @param statValue - {@linkcode NumberHolder} containing the value of the checked stat + * @param checkedPokemon - The {@linkcode Pokemon} with the checked stat + * @param ignoreAbility - Whether or not the ability should be ignored by the pokemon or its move. + * @param args - unused + */ +export function applyAllyStatMultiplierAbAttrs( + attrType: AbAttrMap[K] extends AllyStatMultiplierAbAttr ? K : never, + pokemon: Pokemon, + stat: BattleStat, + statValue: NumberHolder, + simulated = false, + checkedPokemon: Pokemon, + ignoreAbility: boolean, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => + (attr as AllyStatMultiplierAbAttr).applyAllyStat( + pokemon, + passive, + simulated, + stat, + statValue, + checkedPokemon, + ignoreAbility, + args, + ), + (attr, passive) => + (attr as AllyStatMultiplierAbAttr).canApplyAllyStat( + pokemon, + passive, + simulated, + stat, + statValue, + checkedPokemon, + ignoreAbility, + args, + ), + args, + simulated, + ); +} + +export function applyPostSetStatusAbAttrs( + attrType: AbAttrMap[K] extends PostSetStatusAbAttr ? K : never, + pokemon: Pokemon, + effect: StatusEffect, + sourcePokemon?: Pokemon | null, + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => + (attr as PostSetStatusAbAttr).applyPostSetStatus(pokemon, sourcePokemon, passive, effect, simulated, args), + (attr, passive) => + (attr as PostSetStatusAbAttr).canApplyPostSetStatus(pokemon, sourcePokemon, passive, effect, simulated, args), + args, + simulated, + ); +} + +export function applyPostDamageAbAttrs( + attrType: AbAttrMap[K] extends PostDamageAbAttr ? K : never, + pokemon: Pokemon, + damage: number, + _passive: boolean, + simulated = false, + args: any[], + source?: Pokemon, +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => (attr as PostDamageAbAttr).applyPostDamage(pokemon, damage, passive, simulated, args, source), + (attr, passive) => (attr as PostDamageAbAttr).canApplyPostDamage(pokemon, damage, passive, simulated, args, source), + args, + ); +} +/** + * Applies a field Stat multiplier attribute + * @param attrType {@linkcode FieldMultiplyStatAbAttr} should always be FieldMultiplyBattleStatAbAttr for the time being + * @param pokemon {@linkcode Pokemon} the Pokemon applying this ability + * @param stat {@linkcode Stat} the type of the checked stat + * @param statValue {@linkcode NumberHolder} the value of the checked stat + * @param checkedPokemon {@linkcode Pokemon} the Pokemon with the checked stat + * @param hasApplied {@linkcode BooleanHolder} whether or not a FieldMultiplyBattleStatAbAttr has already affected this stat + * @param args unused + */ + +export function applyFieldStatMultiplierAbAttrs( + attrType: AbAttrMap[K] extends FieldMultiplyStatAbAttr ? K : never, + pokemon: Pokemon, + stat: Stat, + statValue: NumberHolder, + checkedPokemon: Pokemon, + hasApplied: BooleanHolder, + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => + (attr as FieldMultiplyStatAbAttr).applyFieldStat( + pokemon, + passive, + simulated, + stat, + statValue, + checkedPokemon, + hasApplied, + args, + ), + (attr, passive) => + (attr as FieldMultiplyStatAbAttr).canApplyFieldStat( + pokemon, + passive, + simulated, + stat, + statValue, + checkedPokemon, + hasApplied, + args, + ), + args, + ); +} + +export function applyPreAttackAbAttrs( + attrType: AbAttrMap[K] extends PreAttackAbAttr ? K : never, + pokemon: Pokemon, + defender: Pokemon | null, + move: Move, + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => (attr as PreAttackAbAttr).applyPreAttack(pokemon, passive, simulated, defender, move, args), + (attr, passive) => (attr as PreAttackAbAttr).canApplyPreAttack(pokemon, passive, simulated, defender, move, args), + args, + simulated, + ); +} + +export function applyExecutedMoveAbAttrs( + attrType: AbAttrMap[K] extends ExecutedMoveAbAttr ? K : never, + pokemon: Pokemon, + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + attr => (attr as ExecutedMoveAbAttr).applyExecutedMove(pokemon, simulated), + attr => (attr as ExecutedMoveAbAttr).canApplyExecutedMove(pokemon, simulated), + args, + simulated, + ); +} + +export function applyPostAttackAbAttrs( + attrType: AbAttrMap[K] extends PostAttackAbAttr ? K : never, + pokemon: Pokemon, + defender: Pokemon, + move: Move, + hitResult: HitResult | null, + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => + (attr as PostAttackAbAttr).applyPostAttack(pokemon, passive, simulated, defender, move, hitResult, args), + (attr, passive) => + (attr as PostAttackAbAttr).canApplyPostAttack(pokemon, passive, simulated, defender, move, hitResult, args), + args, + simulated, + ); +} + +export function applyPostKnockOutAbAttrs( + attrType: AbAttrMap[K] extends PostKnockOutAbAttr ? K : never, + pokemon: Pokemon, + knockedOut: Pokemon, + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => (attr as PostKnockOutAbAttr).applyPostKnockOut(pokemon, passive, simulated, knockedOut, args), + (attr, passive) => (attr as PostKnockOutAbAttr).canApplyPostKnockOut(pokemon, passive, simulated, knockedOut, args), + args, + simulated, + ); +} + +export function applyPostVictoryAbAttrs( + attrType: AbAttrMap[K] extends PostVictoryAbAttr ? K : never, + pokemon: Pokemon, + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => (attr as PostVictoryAbAttr).applyPostVictory(pokemon, passive, simulated, args), + (attr, passive) => (attr as PostVictoryAbAttr).canApplyPostVictory(pokemon, passive, simulated, args), + args, + simulated, + ); +} + +export function applyPostSummonAbAttrs( + attrType: AbAttrMap[K] extends PostSummonAbAttr ? K : never, + pokemon: Pokemon, + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => (attr as PostSummonAbAttr).applyPostSummon(pokemon, passive, simulated, args), + (attr, passive) => (attr as PostSummonAbAttr).canApplyPostSummon(pokemon, passive, simulated, args), + args, + simulated, + ); +} + +export function applyPreSummonAbAttrs( + attrType: AbAttrMap[K] extends PreSummonAbAttr ? K : never, + pokemon: Pokemon, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => (attr as PreSummonAbAttr).applyPreSummon(pokemon, passive, args), + (attr, passive) => (attr as PreSummonAbAttr).canApplyPreSummon(pokemon, passive, args), + args, + ); +} + +export function applyPreSwitchOutAbAttrs( + attrType: AbAttrMap[K] extends PreSwitchOutAbAttr ? K : never, + pokemon: Pokemon, + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => (attr as PreSwitchOutAbAttr).applyPreSwitchOut(pokemon, passive, simulated, args), + (attr, passive) => (attr as PreSwitchOutAbAttr).canApplyPreSwitchOut(pokemon, passive, simulated, args), + args, + simulated, + ); +} + +export function applyPreLeaveFieldAbAttrs( + attrType: AbAttrMap[K] extends PreLeaveFieldAbAttr ? K : never, + pokemon: Pokemon, + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => (attr as PreLeaveFieldAbAttr).applyPreLeaveField(pokemon, passive, simulated, args), + (attr, passive) => (attr as PreLeaveFieldAbAttr).canApplyPreLeaveField(pokemon, passive, simulated, args), + args, + simulated, + ); +} + +export function applyPreStatStageChangeAbAttrs( + attrType: AbAttrMap[K] extends PreStatStageChangeAbAttr ? K : never, + pokemon: Pokemon | null, + stat: BattleStat, + cancelled: BooleanHolder, + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => + (attr as PreStatStageChangeAbAttr).applyPreStatStageChange(pokemon, passive, simulated, stat, cancelled, args), + (attr, passive) => + (attr as PreStatStageChangeAbAttr).canApplyPreStatStageChange(pokemon, passive, simulated, stat, cancelled, args), + args, + simulated, + ); +} + +export function applyPostStatStageChangeAbAttrs( + attrType: AbAttrMap[K] extends PostStatStageChangeAbAttr ? K : never, + pokemon: Pokemon, + stats: BattleStat[], + stages: number, + selfTarget: boolean, + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, _passive) => + (attr as PostStatStageChangeAbAttr).applyPostStatStageChange(pokemon, simulated, stats, stages, selfTarget, args), + (attr, _passive) => + (attr as PostStatStageChangeAbAttr).canApplyPostStatStageChange( + pokemon, + simulated, + stats, + stages, + selfTarget, + args, + ), + args, + simulated, + ); +} + +export function applyPreSetStatusAbAttrs( + attrType: AbAttrMap[K] extends PreSetStatusAbAttr ? K : never, + pokemon: Pokemon, + effect: StatusEffect | undefined, + cancelled: BooleanHolder, + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => + (attr as PreSetStatusAbAttr).applyPreSetStatus(pokemon, passive, simulated, effect, cancelled, args), + (attr, passive) => + (attr as PreSetStatusAbAttr).canApplyPreSetStatus(pokemon, passive, simulated, effect, cancelled, args), + args, + simulated, + ); +} + +export function applyPreApplyBattlerTagAbAttrs( + attrType: AbAttrMap[K] extends PreApplyBattlerTagAbAttr ? K : never, + pokemon: Pokemon, + tag: BattlerTag, + cancelled: BooleanHolder, + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => + (attr as PreApplyBattlerTagAbAttr).applyPreApplyBattlerTag(pokemon, passive, simulated, tag, cancelled, args), + (attr, passive) => + (attr as PreApplyBattlerTagAbAttr).canApplyPreApplyBattlerTag(pokemon, passive, simulated, tag, cancelled, args), + args, + simulated, + ); +} + +export function applyPreWeatherEffectAbAttrs( + attrType: AbAttrMap[K] extends PreWeatherEffectAbAttr ? K : never, + pokemon: Pokemon, + weather: Weather | null, + cancelled: BooleanHolder, + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => + (attr as PreWeatherDamageAbAttr).applyPreWeatherEffect(pokemon, passive, simulated, weather, cancelled, args), + (attr, passive) => + (attr as PreWeatherDamageAbAttr).canApplyPreWeatherEffect(pokemon, passive, simulated, weather, cancelled, args), + args, + simulated, + ); +} + +export function applyPostTurnAbAttrs( + attrType: AbAttrMap[K] extends PostTurnAbAttr ? K : never, + pokemon: Pokemon, + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => (attr as PostTurnAbAttr).applyPostTurn(pokemon, passive, simulated, args), + (attr, passive) => (attr as PostTurnAbAttr).canApplyPostTurn(pokemon, passive, simulated, args), + args, + simulated, + ); +} + +export function applyPostWeatherChangeAbAttrs( + attrType: AbAttrMap[K] extends PostWeatherChangeAbAttr ? K : never, + pokemon: Pokemon, + weather: WeatherType, + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => + (attr as PostWeatherChangeAbAttr).applyPostWeatherChange(pokemon, passive, simulated, weather, args), + (attr, passive) => + (attr as PostWeatherChangeAbAttr).canApplyPostWeatherChange(pokemon, passive, simulated, weather, args), + args, + simulated, + ); +} + +export function applyPostWeatherLapseAbAttrs( + attrType: AbAttrMap[K] extends PostWeatherLapseAbAttr ? K : never, + pokemon: Pokemon, + weather: Weather | null, + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => + (attr as PostWeatherLapseAbAttr).applyPostWeatherLapse(pokemon, passive, simulated, weather, args), + (attr, passive) => + (attr as PostWeatherLapseAbAttr).canApplyPostWeatherLapse(pokemon, passive, simulated, weather, args), + args, + simulated, + ); +} + +export function applyPostTerrainChangeAbAttrs( + attrType: AbAttrMap[K] extends PostTerrainChangeAbAttr ? K : never, + pokemon: Pokemon, + terrain: TerrainType, + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => + (attr as PostTerrainChangeAbAttr).applyPostTerrainChange(pokemon, passive, simulated, terrain, args), + (attr, passive) => + (attr as PostTerrainChangeAbAttr).canApplyPostTerrainChange(pokemon, passive, simulated, terrain, args), + args, + simulated, + ); +} + +export function applyCheckTrappedAbAttrs( + attrType: AbAttrMap[K] extends CheckTrappedAbAttr ? K : never, + pokemon: Pokemon, + trapped: BooleanHolder, + otherPokemon: Pokemon, + messages: string[], + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => + (attr as CheckTrappedAbAttr).applyCheckTrapped(pokemon, passive, simulated, trapped, otherPokemon, args), + (attr, passive) => + (attr as CheckTrappedAbAttr).canApplyCheckTrapped(pokemon, passive, simulated, trapped, otherPokemon, args), + args, + simulated, + messages, + ); +} + +export function applyPostBattleAbAttrs( + attrType: AbAttrMap[K] extends PostBattleAbAttr ? K : never, + pokemon: Pokemon, + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => (attr as PostBattleAbAttr).applyPostBattle(pokemon, passive, simulated, args), + (attr, passive) => (attr as PostBattleAbAttr).canApplyPostBattle(pokemon, passive, simulated, args), + args, + simulated, + ); +} + +export function applyPostFaintAbAttrs( + attrType: AbAttrMap[K] extends PostFaintAbAttr ? K : never, + pokemon: Pokemon, + attacker?: Pokemon, + move?: Move, + hitResult?: HitResult, + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => + (attr as PostFaintAbAttr).applyPostFaint(pokemon, passive, simulated, attacker, move, hitResult, args), + (attr, passive) => + (attr as PostFaintAbAttr).canApplyPostFaint(pokemon, passive, simulated, attacker, move, hitResult, args), + args, + simulated, + ); +} + +export function applyPostItemLostAbAttrs( + attrType: AbAttrMap[K] extends PostItemLostAbAttr ? K : never, + pokemon: Pokemon, + simulated = false, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, _passive) => (attr as PostItemLostAbAttr).applyPostItemLost(pokemon, simulated, args), + (attr, _passive) => (attr as PostItemLostAbAttr).canApplyPostItemLost(pokemon, simulated, args), + args, + ); +} + +/** + * Applies abilities when they become active mid-turn (ability switch) + * + * Ignores passives as they don't change and shouldn't be reapplied when main abilities change + */ +export function applyOnGainAbAttrs(pokemon: Pokemon, passive = false, simulated = false, ...args: any[]): void { + applySingleAbAttrs( + pokemon, + passive, + "PostSummonAbAttr", + (attr, passive) => attr.applyPostSummon(pokemon, passive, simulated, args), + (attr, passive) => attr.canApplyPostSummon(pokemon, passive, simulated, args), + args, + true, + simulated, + ); +} +/** + * Applies ability attributes which activate when the ability is lost or suppressed (i.e. primal weather) + */ +export function applyOnLoseAbAttrs(pokemon: Pokemon, passive = false, simulated = false, ...args: any[]): void { + applySingleAbAttrs( + pokemon, + passive, + "PreLeaveFieldAbAttr", + (attr, passive) => attr.applyPreLeaveField(pokemon, passive, simulated, [...args, true]), + (attr, passive) => attr.canApplyPreLeaveField(pokemon, passive, simulated, [...args, true]), + args, + true, + simulated, + ); + + applySingleAbAttrs( + pokemon, + passive, + "IllusionBreakAbAttr", + (attr, passive) => attr.apply(pokemon, passive, simulated, null, args), + (attr, passive) => attr.canApply(pokemon, passive, simulated, args), + args, + true, + simulated, + ); +} diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index e18ee5ac556..da1bbbda2e9 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -10,15 +10,7 @@ import type Pokemon from "#app/field/pokemon"; import { HitResult } from "#enums/hit-result"; import { StatusEffect } from "#enums/status-effect"; import type { BattlerIndex } from "#enums/battler-index"; -import { - BlockNonDirectDamageAbAttr, - InfiltratorAbAttr, - PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr, - ProtectStatAbAttr, - applyAbAttrs, - applyOnGainAbAttrs, - applyOnLoseAbAttrs, -} from "#app/data/abilities/ability"; +import { applyAbAttrs, applyOnGainAbAttrs, applyOnLoseAbAttrs } from "./abilities/apply-ab-attrs"; import { Stat } from "#enums/stat"; import { CommonBattleAnim } from "#app/data/battle-anims"; import { CommonAnim } from "#enums/move-anims-common"; @@ -144,7 +136,7 @@ export class MistTag extends ArenaTag { if (attacker) { const bypassed = new BooleanHolder(false); // TODO: Allow this to be simulated - applyAbAttrs(InfiltratorAbAttr, attacker, null, false, bypassed); + applyAbAttrs("InfiltratorAbAttr", attacker, null, false, bypassed); if (bypassed.value) { return false; } @@ -209,7 +201,7 @@ export class WeakenMoveScreenTag extends ArenaTag { ): boolean { if (this.weakenedCategories.includes(moveCategory)) { const bypassed = new BooleanHolder(false); - applyAbAttrs(InfiltratorAbAttr, attacker, null, false, bypassed); + applyAbAttrs("InfiltratorAbAttr", attacker, null, false, bypassed); if (bypassed.value) { return false; } @@ -765,7 +757,7 @@ class SpikesTag extends ArenaTrapTag { } const cancelled = new BooleanHolder(false); - applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); + applyAbAttrs("BlockNonDirectDamageAbAttr", pokemon, cancelled); if (simulated || cancelled.value) { return !cancelled.value; } @@ -953,7 +945,7 @@ class StealthRockTag extends ArenaTrapTag { override activateTrap(pokemon: Pokemon, simulated: boolean): boolean { const cancelled = new BooleanHolder(false); - applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); + applyAbAttrs("BlockNonDirectDamageAbAttr", pokemon, cancelled); if (cancelled.value) { return false; } @@ -1010,7 +1002,7 @@ class StickyWebTag extends ArenaTrapTag { override activateTrap(pokemon: Pokemon, simulated: boolean): boolean { if (pokemon.isGrounded()) { const cancelled = new BooleanHolder(false); - applyAbAttrs(ProtectStatAbAttr, pokemon, cancelled); + applyAbAttrs("ProtectStatAbAttr", pokemon, cancelled); if (simulated) { return !cancelled.value; @@ -1444,8 +1436,8 @@ export class SuppressAbilitiesTag extends ArenaTag { // Could have a custom message that plays when a specific pokemon's NG ends? This entire thing exists due to passives after all const setter = globalScene .getField() - .filter(p => p?.hasAbilityWithAttr(PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr, false))[0]; - applyOnGainAbAttrs(setter, setter.getAbility().hasAttr(PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr)); + .filter(p => p?.hasAbilityWithAttr("PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr", false))[0]; + applyOnGainAbAttrs(setter, setter.getAbility().hasAttr("PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr")); } } @@ -1457,7 +1449,7 @@ export class SuppressAbilitiesTag extends ArenaTag { for (const pokemon of globalScene.getField(true)) { // There is only one pokemon with this attr on the field on removal, so its abilities are already active - if (pokemon && !pokemon.hasAbilityWithAttr(PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr, false)) { + if (pokemon && !pokemon.hasAbilityWithAttr("PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr", false)) { [true, false].forEach(passive => applyOnGainAbAttrs(pokemon, passive)); } } diff --git a/src/data/balance/pokemon-evolutions.ts b/src/data/balance/pokemon-evolutions.ts index 298cf2d0719..d307f5cfbf6 100644 --- a/src/data/balance/pokemon-evolutions.ts +++ b/src/data/balance/pokemon-evolutions.ts @@ -11,7 +11,6 @@ import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; import { SpeciesFormKey } from "#enums/species-form-key"; import { TimeOfDay } from "#enums/time-of-day"; -import { DamageMoneyRewardModifier, ExtraModifierModifier, MoneyMultiplierModifier, SpeciesStatBoosterModifier, TempExtraModifierModifier } from "#app/modifier/modifier"; import type { SpeciesStatBoosterModifierType } from "#app/modifier/modifier-type"; import { speciesStarterCosts } from "./starters"; import i18next from "i18next"; @@ -275,9 +274,9 @@ class MoveTypeEvolutionCondition extends SpeciesEvolutionCondition { class TreasureEvolutionCondition extends SpeciesEvolutionCondition { constructor() { super(p => p.evoCounter - + p.getHeldItems().filter(m => m instanceof DamageMoneyRewardModifier).length - + globalScene.findModifiers(m => m instanceof MoneyMultiplierModifier - || m instanceof ExtraModifierModifier || m instanceof TempExtraModifierModifier).length > 9); + + p.getHeldItems().filter(m => m.is("DamageMoneyRewardModifier")).length + + globalScene.findModifiers(m => m.is("MoneyMultiplierModifier") + || m.is("ExtraModifierModifier") || m.is("TempExtraModifierModifier")).length > 9); this.description = i18next.t("pokemonEvolutions:treasure"); } } @@ -1794,8 +1793,8 @@ export const pokemonEvolutions: PokemonEvolutions = { ], [SpeciesId.CLAMPERL]: [ // TODO: Change the SpeciesEvolutionConditions here to use a bespoke HeldItemEvolutionCondition after the modifier rework - new SpeciesEvolution(SpeciesId.HUNTAIL, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => p.getHeldItems().some(m => m instanceof SpeciesStatBoosterModifier && (m.type as SpeciesStatBoosterModifierType).key === "DEEP_SEA_TOOTH")), SpeciesWildEvolutionDelay.VERY_LONG), - new SpeciesEvolution(SpeciesId.GOREBYSS, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => p.getHeldItems().some(m => m instanceof SpeciesStatBoosterModifier && (m.type as SpeciesStatBoosterModifierType).key === "DEEP_SEA_SCALE")), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(SpeciesId.HUNTAIL, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => p.getHeldItems().some(m => m.is("SpeciesStatBoosterModifier") && (m.type as SpeciesStatBoosterModifierType).key === "DEEP_SEA_TOOTH")), SpeciesWildEvolutionDelay.VERY_LONG), + new SpeciesEvolution(SpeciesId.GOREBYSS, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => p.getHeldItems().some(m => m.is("SpeciesStatBoosterModifier") && (m.type as SpeciesStatBoosterModifierType).key === "DEEP_SEA_SCALE")), SpeciesWildEvolutionDelay.VERY_LONG) ], [SpeciesId.BOLDORE]: [ new SpeciesEvolution(SpeciesId.GIGALITH, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) diff --git a/src/data/balance/tms.ts b/src/data/balance/tms.ts index 2b0e8f5142d..e194dc4040c 100644 --- a/src/data/balance/tms.ts +++ b/src/data/balance/tms.ts @@ -1,4 +1,4 @@ -import { ModifierTier } from "#app/modifier/modifier-tier"; +import { ModifierTier } from "#enums/modifier-tier"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; diff --git a/src/data/battle-anims.ts b/src/data/battle-anims.ts index 0b40469b255..7aa419ca470 100644 --- a/src/data/battle-anims.ts +++ b/src/data/battle-anims.ts @@ -10,6 +10,7 @@ import { isNullOrUndefined } from "../utils/common"; import Phaser from "phaser"; import { EncounterAnim } from "#enums/encounter-anims"; import { AnimBlendType, AnimFrameTarget, AnimFocus, ChargeAnim, CommonAnim } from "#enums/move-anims-common"; +import { BattlerTagType } from "#enums/battler-tag-type"; export class AnimConfig { public id: number; @@ -770,7 +771,7 @@ export abstract class BattleAnim { const user = !isOppAnim ? this.user : this.target; const target = !isOppAnim ? this.target : this.user; - const targetSubstitute = onSubstitute && user !== target ? target!.getTag(SubstituteTag) : null; + const targetSubstitute = onSubstitute && user !== target ? target!.getTag(BattlerTagType.SUBSTITUTE) : null; const userInitialX = user!.x; // TODO: is this bang correct? const userInitialY = user!.y; // TODO: is this bang correct? diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index ffa179c6aab..0daf1913737 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -1,13 +1,6 @@ import { globalScene } from "#app/global-scene"; import Overrides from "#app/overrides"; -import { - applyAbAttrs, - BlockNonDirectDamageAbAttr, - FlinchEffectAbAttr, - ProtectStatAbAttr, - ConditionalUserFieldProtectStatAbAttr, - ReverseDrainAbAttr, -} from "#app/data/abilities/ability"; +import { applyAbAttrs } from "./abilities/apply-ab-attrs"; import { allAbilities } from "./data-lists"; import { CommonBattleAnim, MoveChargeAnim } from "#app/data/battle-anims"; import { ChargeAnim, CommonAnim } from "#enums/move-anims-common"; @@ -648,7 +641,7 @@ export class FlinchedTag extends BattlerTag { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), ); - applyAbAttrs(FlinchEffectAbAttr, pokemon, null); + applyAbAttrs("FlinchEffectAbAttr", pokemon, null); return true; } @@ -942,7 +935,7 @@ export class SeedTag extends BattlerTag { const source = pokemon.getOpponents().find(o => o.getBattlerIndex() === this.sourceIndex); if (source) { const cancelled = new BooleanHolder(false); - applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); + applyAbAttrs("BlockNonDirectDamageAbAttr", pokemon, cancelled); if (!cancelled.value) { globalScene.phaseManager.unshiftNew( @@ -953,7 +946,7 @@ export class SeedTag extends BattlerTag { ); const damage = pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 8), { result: HitResult.INDIRECT }); - const reverseDrain = pokemon.hasAbilityWithAttr(ReverseDrainAbAttr, false); + const reverseDrain = pokemon.hasAbilityWithAttr("ReverseDrainAbAttr", false); globalScene.phaseManager.unshiftNew( "PokemonHealPhase", source.getBattlerIndex(), @@ -1026,7 +1019,7 @@ export class PowderTag extends BattlerTag { globalScene.phaseManager.unshiftNew("CommonAnimPhase", idx, idx, CommonAnim.POWDER); const cancelDamage = new BooleanHolder(false); - applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelDamage); + applyAbAttrs("BlockNonDirectDamageAbAttr", pokemon, cancelDamage); if (!cancelDamage.value) { pokemon.damageAndUpdate(Math.floor(pokemon.getMaxHp() / 4), { result: HitResult.INDIRECT }); } @@ -1079,7 +1072,7 @@ export class NightmareTag extends BattlerTag { phaseManager.unshiftNew("CommonAnimPhase", pokemon.getBattlerIndex(), undefined, CommonAnim.CURSE); // TODO: Update animation type const cancelled = new BooleanHolder(false); - applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); + applyAbAttrs("BlockNonDirectDamageAbAttr", pokemon, cancelled); if (!cancelled.value) { pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 4), { result: HitResult.INDIRECT }); @@ -1438,7 +1431,7 @@ export abstract class DamagingTrapTag extends TrappedTag { phaseManager.unshiftNew("CommonAnimPhase", pokemon.getBattlerIndex(), undefined, this.commonAnim); const cancelled = new BooleanHolder(false); - applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); + applyAbAttrs("BlockNonDirectDamageAbAttr", pokemon, cancelled); if (!cancelled.value) { pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 8), { result: HitResult.INDIRECT }); @@ -1681,7 +1674,7 @@ export class ContactDamageProtectedTag extends ContactProtectedTag { */ override onContact(attacker: Pokemon, user: Pokemon): void { const cancelled = new BooleanHolder(false); - applyAbAttrs(BlockNonDirectDamageAbAttr, user, cancelled); + applyAbAttrs("BlockNonDirectDamageAbAttr", user, cancelled); if (!cancelled.value) { attacker.damageAndUpdate(toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)), { result: HitResult.INDIRECT, @@ -2277,7 +2270,7 @@ export class SaltCuredTag extends BattlerTag { ); const cancelled = new BooleanHolder(false); - applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); + applyAbAttrs("BlockNonDirectDamageAbAttr", pokemon, cancelled); if (!cancelled.value) { const pokemonSteelOrWater = pokemon.isOfType(PokemonType.STEEL) || pokemon.isOfType(PokemonType.WATER); @@ -2331,7 +2324,7 @@ export class CursedTag extends BattlerTag { ); const cancelled = new BooleanHolder(false); - applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); + applyAbAttrs("BlockNonDirectDamageAbAttr", pokemon, cancelled); if (!cancelled.value) { pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 4), { result: HitResult.INDIRECT }); @@ -2666,7 +2659,7 @@ export class GulpMissileTag extends BattlerTag { } const cancelled = new BooleanHolder(false); - applyAbAttrs(BlockNonDirectDamageAbAttr, attacker, cancelled); + applyAbAttrs("BlockNonDirectDamageAbAttr", attacker, cancelled); if (!cancelled.value) { attacker.damageAndUpdate(Math.max(1, Math.floor(attacker.getMaxHp() / 4)), { result: HitResult.INDIRECT }); @@ -3056,8 +3049,8 @@ export class MysteryEncounterPostSummonTag extends BattlerTag { if (lapseType === BattlerTagLapseType.CUSTOM) { const cancelled = new BooleanHolder(false); - applyAbAttrs(ProtectStatAbAttr, pokemon, cancelled); - applyAbAttrs(ConditionalUserFieldProtectStatAbAttr, pokemon, cancelled, false, pokemon); + applyAbAttrs("ProtectStatAbAttr", pokemon, cancelled); + applyAbAttrs("ConditionalUserFieldProtectStatAbAttr", pokemon, cancelled, false, pokemon); if (!cancelled.value) { if (pokemon.mysteryEncounterBattleEffects) { pokemon.mysteryEncounterBattleEffects(pokemon); diff --git a/src/data/berry.ts b/src/data/berry.ts index df500fa0609..7d1e62362a8 100644 --- a/src/data/berry.ts +++ b/src/data/berry.ts @@ -3,7 +3,7 @@ import type Pokemon from "../field/pokemon"; import { HitResult } from "#enums/hit-result"; import { getStatusEffectHealText } from "./status-effect"; import { NumberHolder, toDmgValue, randSeedInt } from "#app/utils/common"; -import { DoubleBerryEffectAbAttr, ReduceBerryUseThresholdAbAttr, applyAbAttrs } from "./abilities/ability"; +import { applyAbAttrs } from "./abilities/apply-ab-attrs"; import i18next from "i18next"; import { BattlerTagType } from "#enums/battler-tag-type"; import { BerryType } from "#enums/berry-type"; @@ -38,25 +38,25 @@ export function getBerryPredicate(berryType: BerryType): BerryPredicate { const threshold = new NumberHolder(0.25); // Offset BerryType such that LIECHI -> Stat.ATK = 1, GANLON -> Stat.DEF = 2, so on and so forth const stat: BattleStat = berryType - BerryType.ENIGMA; - applyAbAttrs(ReduceBerryUseThresholdAbAttr, pokemon, null, false, threshold); + applyAbAttrs("ReduceBerryUseThresholdAbAttr", pokemon, null, false, threshold); return pokemon.getHpRatio() < threshold.value && pokemon.getStatStage(stat) < 6; }; case BerryType.LANSAT: return (pokemon: Pokemon) => { const threshold = new NumberHolder(0.25); - applyAbAttrs(ReduceBerryUseThresholdAbAttr, pokemon, null, false, threshold); + applyAbAttrs("ReduceBerryUseThresholdAbAttr", pokemon, null, false, threshold); return pokemon.getHpRatio() < 0.25 && !pokemon.getTag(BattlerTagType.CRIT_BOOST); }; case BerryType.STARF: return (pokemon: Pokemon) => { const threshold = new NumberHolder(0.25); - applyAbAttrs(ReduceBerryUseThresholdAbAttr, pokemon, null, false, threshold); + applyAbAttrs("ReduceBerryUseThresholdAbAttr", pokemon, null, false, threshold); return pokemon.getHpRatio() < 0.25; }; case BerryType.LEPPA: return (pokemon: Pokemon) => { const threshold = new NumberHolder(0.25); - applyAbAttrs(ReduceBerryUseThresholdAbAttr, pokemon, null, false, threshold); + applyAbAttrs("ReduceBerryUseThresholdAbAttr", pokemon, null, false, threshold); return !!pokemon.getMoveset().find(m => !m.getPpRatio()); }; } @@ -72,7 +72,7 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { case BerryType.ENIGMA: { const hpHealed = new NumberHolder(toDmgValue(consumer.getMaxHp() / 4)); - applyAbAttrs(DoubleBerryEffectAbAttr, consumer, null, false, hpHealed); + applyAbAttrs("DoubleBerryEffectAbAttr", consumer, null, false, hpHealed); globalScene.phaseManager.unshiftNew( "PokemonHealPhase", consumer.getBattlerIndex(), @@ -105,7 +105,7 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { // Offset BerryType such that LIECHI --> Stat.ATK = 1, GANLON --> Stat.DEF = 2, etc etc. const stat: BattleStat = berryType - BerryType.ENIGMA; const statStages = new NumberHolder(1); - applyAbAttrs(DoubleBerryEffectAbAttr, consumer, null, false, statStages); + applyAbAttrs("DoubleBerryEffectAbAttr", consumer, null, false, statStages); globalScene.phaseManager.unshiftNew( "StatStageChangePhase", consumer.getBattlerIndex(), @@ -126,7 +126,7 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { { const randStat = randSeedInt(Stat.SPD, Stat.ATK); const stages = new NumberHolder(2); - applyAbAttrs(DoubleBerryEffectAbAttr, consumer, null, false, stages); + applyAbAttrs("DoubleBerryEffectAbAttr", consumer, null, false, stages); globalScene.phaseManager.unshiftNew( "StatStageChangePhase", consumer.getBattlerIndex(), diff --git a/src/data/challenge.ts b/src/data/challenge.ts index 8bdccb6d5fd..683fb48a9ba 100644 --- a/src/data/challenge.ts +++ b/src/data/challenge.ts @@ -21,7 +21,7 @@ import { TrainerType } from "#enums/trainer-type"; import { Nature } from "#enums/nature"; import type { MoveId } from "#enums/move-id"; import { TypeColor, TypeShadow } from "#enums/color"; -import { ModifierTier } from "#app/modifier/modifier-tier"; +import { ModifierTier } from "#enums/modifier-tier"; import { globalScene } from "#app/global-scene"; import { pokemonFormChanges } from "./pokemon-forms"; import { pokemonEvolutions } from "./balance/pokemon-evolutions"; diff --git a/src/data/data-lists.ts b/src/data/data-lists.ts index c763a001280..4d482dc2d7d 100644 --- a/src/data/data-lists.ts +++ b/src/data/data-lists.ts @@ -1,5 +1,9 @@ -import type { Ability } from "./abilities/ability-class"; +import type { ModifierTypes } from "#app/modifier/modifier-type"; +import type { Ability } from "./abilities/ability"; import type Move from "./moves/move"; export const allAbilities: Ability[] = []; export const allMoves: Move[] = []; + +// TODO: Figure out what this is used for and provide an appropriate tsdoc comment +export const modifierTypes = {} as ModifierTypes; diff --git a/src/data/dialogue.ts b/src/data/dialogue.ts index fa640e92b00..6bb96f0efb2 100644 --- a/src/data/dialogue.ts +++ b/src/data/dialogue.ts @@ -1723,49 +1723,6 @@ export const trainerTypeDialogue: TrainerTypeDialogue = { ], }; -export const doubleBattleDialogue = { - blue_red_double: { - encounter: ["doubleBattleDialogue:blue_red_double.encounter.1"], - victory: ["doubleBattleDialogue:blue_red_double.victory.1"], - }, - red_blue_double: { - encounter: ["doubleBattleDialogue:red_blue_double.encounter.1"], - victory: ["doubleBattleDialogue:red_blue_double.victory.1"], - }, - tate_liza_double: { - encounter: ["doubleBattleDialogue:tate_liza_double.encounter.1"], - victory: ["doubleBattleDialogue:tate_liza_double.victory.1"], - }, - liza_tate_double: { - encounter: ["doubleBattleDialogue:liza_tate_double.encounter.1"], - victory: ["doubleBattleDialogue:liza_tate_double.victory.1"], - }, - wallace_steven_double: { - encounter: ["doubleBattleDialogue:wallace_steven_double.encounter.1"], - victory: ["doubleBattleDialogue:wallace_steven_double.victory.1"], - }, - steven_wallace_double: { - encounter: ["doubleBattleDialogue:steven_wallace_double.encounter.1"], - victory: ["doubleBattleDialogue:steven_wallace_double.victory.1"], - }, - alder_iris_double: { - encounter: ["doubleBattleDialogue:alder_iris_double.encounter.1"], - victory: ["doubleBattleDialogue:alder_iris_double.victory.1"], - }, - iris_alder_double: { - encounter: ["doubleBattleDialogue:iris_alder_double.encounter.1"], - victory: ["doubleBattleDialogue:iris_alder_double.victory.1"], - }, - marnie_piers_double: { - encounter: ["doubleBattleDialogue:marnie_piers_double.encounter.1"], - victory: ["doubleBattleDialogue:marnie_piers_double.victory.1"], - }, - piers_marnie_double: { - encounter: ["doubleBattleDialogue:piers_marnie_double.encounter.1"], - victory: ["doubleBattleDialogue:piers_marnie_double.victory.1"], - }, -}; - export const battleSpecDialogue = { [BattleSpec.FINAL_BOSS]: { encounter: "battleSpecDialogue:encounter", diff --git a/src/data/double-battle-dialogue.ts b/src/data/double-battle-dialogue.ts new file mode 100644 index 00000000000..f15b74e4729 --- /dev/null +++ b/src/data/double-battle-dialogue.ts @@ -0,0 +1,44 @@ +// TODO: Move this back into `dialogue.ts` after finding a suitable way to remove the circular dependencies +// that caused this to be moved out in the first place +export const doubleBattleDialogue = { + blue_red_double: { + encounter: ["doubleBattleDialogue:blue_red_double.encounter.1"], + victory: ["doubleBattleDialogue:blue_red_double.victory.1"], + }, + red_blue_double: { + encounter: ["doubleBattleDialogue:red_blue_double.encounter.1"], + victory: ["doubleBattleDialogue:red_blue_double.victory.1"], + }, + tate_liza_double: { + encounter: ["doubleBattleDialogue:tate_liza_double.encounter.1"], + victory: ["doubleBattleDialogue:tate_liza_double.victory.1"], + }, + liza_tate_double: { + encounter: ["doubleBattleDialogue:liza_tate_double.encounter.1"], + victory: ["doubleBattleDialogue:liza_tate_double.victory.1"], + }, + wallace_steven_double: { + encounter: ["doubleBattleDialogue:wallace_steven_double.encounter.1"], + victory: ["doubleBattleDialogue:wallace_steven_double.victory.1"], + }, + steven_wallace_double: { + encounter: ["doubleBattleDialogue:steven_wallace_double.encounter.1"], + victory: ["doubleBattleDialogue:steven_wallace_double.victory.1"], + }, + alder_iris_double: { + encounter: ["doubleBattleDialogue:alder_iris_double.encounter.1"], + victory: ["doubleBattleDialogue:alder_iris_double.victory.1"], + }, + iris_alder_double: { + encounter: ["doubleBattleDialogue:iris_alder_double.encounter.1"], + victory: ["doubleBattleDialogue:iris_alder_double.victory.1"], + }, + marnie_piers_double: { + encounter: ["doubleBattleDialogue:marnie_piers_double.encounter.1"], + victory: ["doubleBattleDialogue:marnie_piers_double.victory.1"], + }, + piers_marnie_double: { + encounter: ["doubleBattleDialogue:piers_marnie_double.encounter.1"], + victory: ["doubleBattleDialogue:piers_marnie_double.victory.1"], + }, +}; diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 57660b51391..e713020cf9c 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -33,38 +33,12 @@ import type { ArenaTrapTag } from "../arena-tag"; import { WeakenMoveTypeTag } from "../arena-tag"; import { ArenaTagSide } from "#enums/arena-tag-side"; import { - AllyMoveCategoryPowerBoostAbAttr, applyAbAttrs, applyPostAttackAbAttrs, applyPostItemLostAbAttrs, applyPreAttackAbAttrs, - applyPreDefendAbAttrs, - BlockItemTheftAbAttr, - BlockNonDirectDamageAbAttr, - BlockOneHitKOAbAttr, - BlockRecoilDamageAttr, - ChangeMovePriorityAbAttr, - ConfusionOnStatusEffectAbAttr, - FieldMoveTypePowerBoostAbAttr, - FieldPreventExplosiveMovesAbAttr, - ForceSwitchOutImmunityAbAttr, - HealFromBerryUseAbAttr, - IgnoreContactAbAttr, - IgnoreMoveEffectsAbAttr, - IgnoreProtectOnContactAbAttr, - InfiltratorAbAttr, - MaxMultiHitAbAttr, - MoveAbilityBypassAbAttr, - MoveEffectChanceMultiplierAbAttr, - MoveTypeChangeAbAttr, - PostDamageForceSwitchAbAttr, - PostItemLostAbAttr, - ReflectStatusMoveAbAttr, - ReverseDrainAbAttr, - UserFieldMoveTypePowerBoostAbAttr, - VariableMovePowerAbAttr, - WonderSkinAbAttr, -} from "../abilities/ability"; + applyPreDefendAbAttrs +} from "../abilities/apply-ab-attrs"; import { allAbilities, allMoves } from "../data-lists"; import { AttackTypeBoosterModifier, @@ -77,7 +51,7 @@ import { import type { BattlerIndex } from "#enums/battler-index"; import { BattleType } from "#enums/battle-type"; import { TerrainType } from "../terrain"; -import { ModifierPoolType } from "#app/modifier/modifier-type"; +import { ModifierPoolType } from "#enums/modifier-pool-type"; import { Command } from "#enums/command"; import i18next from "i18next"; import type { Localizable } from "#app/@types/locales"; @@ -377,7 +351,7 @@ export default abstract class Move implements Localizable { const bypassed = new BooleanHolder(false); // TODO: Allow this to be simulated - applyAbAttrs(InfiltratorAbAttr, user, null, false, bypassed); + applyAbAttrs("InfiltratorAbAttr", user, null, false, bypassed); return !bypassed.value && !this.hasFlag(MoveFlags.SOUND_BASED) @@ -668,14 +642,14 @@ export default abstract class Move implements Localizable { // special cases below, eg: if the move flag is MAKES_CONTACT, and the user pokemon has an ability that ignores contact (like "Long Reach"), then overrides and move does not make contact switch (flag) { case MoveFlags.MAKES_CONTACT: - if (user.hasAbilityWithAttr(IgnoreContactAbAttr) || this.hitsSubstitute(user, target)) { + if (user.hasAbilityWithAttr("IgnoreContactAbAttr") || this.hitsSubstitute(user, target)) { return false; } break; case MoveFlags.IGNORE_ABILITIES: - if (user.hasAbilityWithAttr(MoveAbilityBypassAbAttr)) { + if (user.hasAbilityWithAttr("MoveAbilityBypassAbAttr")) { const abilityEffectsIgnored = new BooleanHolder(false); - applyAbAttrs(MoveAbilityBypassAbAttr, user, abilityEffectsIgnored, false, this); + applyAbAttrs("MoveAbilityBypassAbAttr", user, abilityEffectsIgnored, false, this); if (abilityEffectsIgnored.value) { return true; } @@ -684,7 +658,7 @@ export default abstract class Move implements Localizable { } return this.hasFlag(MoveFlags.IGNORE_ABILITIES) && !isFollowUp; case MoveFlags.IGNORE_PROTECT: - if (user.hasAbilityWithAttr(IgnoreProtectOnContactAbAttr) + if (user.hasAbilityWithAttr("IgnoreProtectOnContactAbAttr") && this.doesFlagEffectApply({ flag: MoveFlags.MAKES_CONTACT, user })) { return true; } @@ -695,7 +669,7 @@ export default abstract class Move implements Localizable { target?.getTag(SemiInvulnerableTag) || !(target?.getTag(BattlerTagType.MAGIC_COAT) || (!this.doesFlagEffectApply({ flag: MoveFlags.IGNORE_ABILITIES, user, target }) && - target?.hasAbilityWithAttr(ReflectStatusMoveAbAttr))) + target?.hasAbilityWithAttr("ReflectStatusMoveAbAttr"))) ) { return false; } @@ -792,7 +766,7 @@ export default abstract class Move implements Localizable { const moveAccuracy = new NumberHolder(this.accuracy); applyMoveAttrs("VariableAccuracyAttr", user, target, this, moveAccuracy); - applyPreDefendAbAttrs(WonderSkinAbAttr, target, user, this, { value: false }, simulated, moveAccuracy); + applyPreDefendAbAttrs("WonderSkinAbAttr", target, user, this, { value: false }, simulated, moveAccuracy); if (moveAccuracy.value === -1) { return moveAccuracy.value; @@ -835,25 +809,25 @@ export default abstract class Move implements Localizable { const typeChangeMovePowerMultiplier = new NumberHolder(1); const typeChangeHolder = new NumberHolder(this.type); - applyPreAttackAbAttrs(MoveTypeChangeAbAttr, source, target, this, true, typeChangeHolder, typeChangeMovePowerMultiplier); + applyPreAttackAbAttrs("MoveTypeChangeAbAttr", source, target, this, true, typeChangeHolder, typeChangeMovePowerMultiplier); const sourceTeraType = source.getTeraType(); if (source.isTerastallized && sourceTeraType === this.type && power.value < 60 && this.priority <= 0 && !this.hasAttr("MultiHitAttr") && !globalScene.findModifier(m => m instanceof PokemonMultiHitModifier && m.pokemonId === source.id)) { power.value = 60; } - applyPreAttackAbAttrs(VariableMovePowerAbAttr, source, target, this, simulated, power); + applyPreAttackAbAttrs("VariableMovePowerAbAttr", source, target, this, simulated, power); const ally = source.getAlly(); if (!isNullOrUndefined(ally)) { - applyPreAttackAbAttrs(AllyMoveCategoryPowerBoostAbAttr, ally, target, this, simulated, power); + applyPreAttackAbAttrs("AllyMoveCategoryPowerBoostAbAttr", ally, target, this, simulated, power); } const fieldAuras = new Set( globalScene.getField(true) - .map((p) => p.getAbilityAttrs(FieldMoveTypePowerBoostAbAttr).filter(attr => { + .map((p) => p.getAbilityAttrs("FieldMoveTypePowerBoostAbAttr").filter(attr => { const condition = attr.getCondition(); return (!condition || condition(p)); - }) as FieldMoveTypePowerBoostAbAttr[]) + })) .flat(), ); for (const aura of fieldAuras) { @@ -861,7 +835,7 @@ export default abstract class Move implements Localizable { } const alliedField: Pokemon[] = source.isPlayer() ? globalScene.getPlayerField() : globalScene.getEnemyField(); - alliedField.forEach(p => applyPreAttackAbAttrs(UserFieldMoveTypePowerBoostAbAttr, p, target, this, simulated, power)); + alliedField.forEach(p => applyPreAttackAbAttrs("UserFieldMoveTypePowerBoostAbAttr", p, target, this, simulated, power)); power.value *= typeChangeMovePowerMultiplier.value; @@ -888,7 +862,7 @@ export default abstract class Move implements Localizable { const priority = new NumberHolder(this.priority); applyMoveAttrs("IncrementMovePriorityAttr", user, null, this, priority); - applyAbAttrs(ChangeMovePriorityAbAttr, user, null, simulated, this, priority); + applyAbAttrs("ChangeMovePriorityAbAttr", user, null, simulated, this, priority); return priority.value; } @@ -1340,7 +1314,7 @@ export class MoveEffectAttr extends MoveAttr { getMoveChance(user: Pokemon, target: Pokemon, move: Move, selfEffect?: Boolean, showAbility?: Boolean): number { const moveChance = new NumberHolder(this.effectChanceOverride ?? move.chance); - applyAbAttrs(MoveEffectChanceMultiplierAbAttr, user, null, !showAbility, moveChance, move); + applyAbAttrs("MoveEffectChanceMultiplierAbAttr", user, null, !showAbility, moveChance, move); if ((!move.hasAttr("FlinchAttr") || moveChance.value <= move.chance) && !move.hasAttr("SecretPowerAttr")) { const userSide = user.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; @@ -1348,7 +1322,7 @@ export class MoveEffectAttr extends MoveAttr { } if (!selfEffect) { - applyPreDefendAbAttrs(IgnoreMoveEffectsAbAttr, target, user, null, null, !showAbility, moveChance); + applyPreDefendAbAttrs("IgnoreMoveEffectsAbAttr", target, user, null, null, !showAbility, moveChance); } return moveChance.value; } @@ -1726,8 +1700,8 @@ export class RecoilAttr extends MoveEffectAttr { const cancelled = new BooleanHolder(false); if (!this.unblockable) { - applyAbAttrs(BlockRecoilDamageAttr, user, cancelled); - applyAbAttrs(BlockNonDirectDamageAbAttr, user, cancelled); + applyAbAttrs("BlockRecoilDamageAttr", user, cancelled); + applyAbAttrs("BlockNonDirectDamageAbAttr", user, cancelled); } if (cancelled.value) { @@ -1860,7 +1834,7 @@ export class HalfSacrificialAttr extends MoveEffectAttr { const cancelled = new BooleanHolder(false); // Check to see if the Pokemon has an ability that blocks non-direct damage - applyAbAttrs(BlockNonDirectDamageAbAttr, user, cancelled); + applyAbAttrs("BlockNonDirectDamageAbAttr", user, cancelled); if (!cancelled.value) { user.damageAndUpdate(toDmgValue(user.getMaxHp() / 2), { result: HitResult.INDIRECT, ignoreSegments: true }); globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:cutHpPowerUpMove", { pokemonName: getPokemonNameWithAffix(user) })); // Queue recoil message @@ -2059,7 +2033,7 @@ export class FlameBurstAttr extends MoveEffectAttr { const cancelled = new BooleanHolder(false); if (!isNullOrUndefined(targetAlly)) { - applyAbAttrs(BlockNonDirectDamageAbAttr, targetAlly, cancelled); + applyAbAttrs("BlockNonDirectDamageAbAttr", targetAlly, cancelled); } if (cancelled.value || !targetAlly || targetAlly.switchOutStatus) { @@ -2289,7 +2263,7 @@ export class HitHealAttr extends MoveEffectAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { let healAmount = 0; let message = ""; - const reverseDrain = target.hasAbilityWithAttr(ReverseDrainAbAttr, false); + const reverseDrain = target.hasAbilityWithAttr("ReverseDrainAbAttr", false); if (this.healStat !== null) { // Strength Sap formula healAmount = target.getEffectiveStat(this.healStat); @@ -2300,7 +2274,7 @@ export class HitHealAttr extends MoveEffectAttr { message = i18next.t("battle:regainHealth", { pokemonName: getPokemonNameWithAffix(user) }); } if (reverseDrain) { - if (user.hasAbilityWithAttr(BlockNonDirectDamageAbAttr)) { + if (user.hasAbilityWithAttr("BlockNonDirectDamageAbAttr")) { healAmount = 0; message = ""; } else { @@ -2430,7 +2404,7 @@ export class MultiHitAttr extends MoveAttr { { const rand = user.randBattleSeedInt(20); const hitValue = new NumberHolder(rand); - applyAbAttrs(MaxMultiHitAbAttr, user, null, false, hitValue); + applyAbAttrs("MaxMultiHitAbAttr", user, null, false, hitValue); if (hitValue.value >= 13) { return 2; } else if (hitValue.value >= 6) { @@ -2538,7 +2512,7 @@ export class StatusEffectAttr extends MoveEffectAttr { } if (((!pokemon.status || this.overrideStatus) || (pokemon.status.effect === this.effect && moveChance < 0)) && pokemon.trySetStatus(this.effect, true, user, this.turnsRemaining, null, this.overrideStatus, quiet)) { - applyPostAttackAbAttrs(ConfusionOnStatusEffectAbAttr, user, target, move, null, false, this.effect); + applyPostAttackAbAttrs("ConfusionOnStatusEffectAbAttr", user, target, move, null, false, this.effect); return true; } } @@ -2694,7 +2668,7 @@ export class RemoveHeldItemAttr extends MoveEffectAttr { // Check for abilities that block item theft // TODO: This should not trigger if the target would faint beforehand const cancelled = new BooleanHolder(false); - applyAbAttrs(BlockItemTheftAbAttr, target, cancelled); + applyAbAttrs("BlockItemTheftAbAttr", target, cancelled); if (cancelled.value) { return false; @@ -2811,8 +2785,8 @@ export class EatBerryAttr extends MoveEffectAttr { protected eatBerry(consumer: Pokemon, berryOwner: Pokemon = consumer, updateHarvest = consumer === berryOwner) { // consumer eats berry, owner triggers unburden and similar effects getBerryEffectFunc(this.chosenBerry.berryType)(consumer); - applyPostItemLostAbAttrs(PostItemLostAbAttr, berryOwner, false); - applyAbAttrs(HealFromBerryUseAbAttr, consumer, new BooleanHolder(false)); + applyPostItemLostAbAttrs("PostItemLostAbAttr", berryOwner, false); + applyAbAttrs("HealFromBerryUseAbAttr", consumer, new BooleanHolder(false)); consumer.recordEatenBerry(this.chosenBerry.berryType, updateHarvest); } } @@ -2837,7 +2811,7 @@ export class StealEatBerryAttr extends EatBerryAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { // check for abilities that block item theft const cancelled = new BooleanHolder(false); - applyAbAttrs(BlockItemTheftAbAttr, target, cancelled); + applyAbAttrs("BlockItemTheftAbAttr", target, cancelled); if (cancelled.value === true) { return false; } @@ -2851,7 +2825,7 @@ export class StealEatBerryAttr extends EatBerryAttr { // pick a random berry and eat it this.chosenBerry = heldBerries[user.randBattleSeedInt(heldBerries.length)]; - applyPostItemLostAbAttrs(PostItemLostAbAttr, target, false); + applyPostItemLostAbAttrs("PostItemLostAbAttr", target, false); const message = i18next.t("battle:stealEatBerry", { pokemonName: user.name, targetName: target.name, berryName: this.chosenBerry.type.name }); globalScene.phaseManager.queueMessage(message); this.reduceBerryModifier(target); @@ -2892,7 +2866,7 @@ export class HealStatusEffectAttr extends MoveEffectAttr { // Special edge case for shield dust blocking Sparkling Aria curing burn const moveTargets = getMoveTargets(user, move.id); - if (target.hasAbilityWithAttr(IgnoreMoveEffectsAbAttr) && move.id === MoveId.SPARKLING_ARIA && moveTargets.targets.length === 1) { + if (target.hasAbilityWithAttr("IgnoreMoveEffectsAbAttr") && move.id === MoveId.SPARKLING_ARIA && moveTargets.targets.length === 1) { return false; } @@ -3042,7 +3016,7 @@ export class OneHitKOAttr extends MoveAttr { getCondition(): MoveConditionFunc { return (user, target, move) => { const cancelled = new BooleanHolder(false); - applyAbAttrs(BlockOneHitKOAbAttr, target, cancelled); + applyAbAttrs("BlockOneHitKOAbAttr", target, cancelled); return !cancelled.value && user.level >= target.level; }; } @@ -5442,7 +5416,7 @@ export class NoEffectAttr extends MoveAttr { const crashDamageFunc = (user: Pokemon, move: Move) => { const cancelled = new BooleanHolder(false); - applyAbAttrs(BlockNonDirectDamageAbAttr, user, cancelled); + applyAbAttrs("BlockNonDirectDamageAbAttr", user, cancelled); if (cancelled.value) { return false; } @@ -6302,7 +6276,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { * Check if Wimp Out/Emergency Exit activates due to being hit by U-turn or Volt Switch * If it did, the user of U-turn or Volt Switch will not be switched out. */ - if (target.getAbility().hasAttr(PostDamageForceSwitchAbAttr) + if (target.getAbility().hasAttr("PostDamageForceSwitchAbAttr") && [ MoveId.U_TURN, MoveId.VOLT_SWITCH, MoveId.FLIP_TURN ].includes(move.id) ) { if (this.hpDroppedBelowHalf(target)) { @@ -6391,7 +6365,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { * Check if Wimp Out/Emergency Exit activates due to being hit by U-turn or Volt Switch * If it did, the user of U-turn or Volt Switch will not be switched out. */ - if (target.getAbility().hasAttr(PostDamageForceSwitchAbAttr) + if (target.getAbility().hasAttr("PostDamageForceSwitchAbAttr") && [ MoveId.U_TURN, MoveId.VOLT_SWITCH, MoveId.FLIP_TURN ].includes(move.id) ) { if (this.hpDroppedBelowHalf(target)) { @@ -6434,7 +6408,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { getFailedText(_user: Pokemon, target: Pokemon, _move: Move): string | undefined { const blockedByAbility = new BooleanHolder(false); - applyAbAttrs(ForceSwitchOutImmunityAbAttr, target, blockedByAbility); + applyAbAttrs("ForceSwitchOutImmunityAbAttr", target, blockedByAbility); if (blockedByAbility.value) { return i18next.t("moveTriggers:cannotBeSwitchedOut", { pokemonName: getPokemonNameWithAffix(target) }); } @@ -6474,7 +6448,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { } const blockedByAbility = new BooleanHolder(false); - applyAbAttrs(ForceSwitchOutImmunityAbAttr, target, blockedByAbility); + applyAbAttrs("ForceSwitchOutImmunityAbAttr", target, blockedByAbility); if (blockedByAbility.value) { return false; } @@ -7981,7 +7955,7 @@ const failIfSingleBattle: MoveConditionFunc = (user, target, move) => globalScen const failIfDampCondition: MoveConditionFunc = (user, target, move) => { const cancelled = new BooleanHolder(false); - globalScene.getField(true).map(p=>applyAbAttrs(FieldPreventExplosiveMovesAbAttr, p, cancelled)); + globalScene.getField(true).map(p=>applyAbAttrs("FieldPreventExplosiveMovesAbAttr", p, cancelled)); // Queue a message if an ability prevented usage of the move if (cancelled.value) { globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:cannotUseMove", { pokemonName: getPokemonNameWithAffix(user), moveName: move.name })); diff --git a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts index 11081892205..7a1c9821e89 100644 --- a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts +++ b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts @@ -19,8 +19,8 @@ import i18next from "i18next"; import type { IEggOptions } from "#app/data/egg"; import { EggSourceType } from "#enums/egg-source-types"; import { EggTier } from "#enums/egg-type"; -import { ModifierTier } from "#app/modifier/modifier-tier"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { ModifierTier } from "#enums/modifier-tier"; +import { modifierTypes } from "#app/data/data-lists"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; /** the i18n namespace for the encounter */ diff --git a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts index 2213dc4afaa..3eda96e4028 100644 --- a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts +++ b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts @@ -10,7 +10,7 @@ import type Pokemon from "#app/field/pokemon"; import { EnemyPokemon } from "#app/field/pokemon"; import { PokemonMove } from "#app/data/moves/pokemon-move"; import type { BerryModifierType, PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { SpeciesId } from "#enums/species-id"; import { globalScene } from "#app/global-scene"; diff --git a/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts b/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts index cdb98c56ed1..271346616d1 100644 --- a/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts +++ b/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts @@ -4,7 +4,7 @@ import { setEncounterExp, updatePlayerMoney, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { SpeciesId } from "#enums/species-id"; import { globalScene } from "#app/global-scene"; diff --git a/src/data/mystery-encounters/encounters/berries-abound-encounter.ts b/src/data/mystery-encounters/encounters/berries-abound-encounter.ts index 65ae3ea6c4f..d86a8439804 100644 --- a/src/data/mystery-encounters/encounters/berries-abound-encounter.ts +++ b/src/data/mystery-encounters/encounters/berries-abound-encounter.ts @@ -12,7 +12,9 @@ import { import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import type { BerryModifierType, ModifierTypeOption } from "#app/modifier/modifier-type"; -import { ModifierPoolType, modifierTypes, regenerateModifierPoolThresholds } from "#app/modifier/modifier-type"; +import { regenerateModifierPoolThresholds } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; +import { ModifierPoolType } from "#enums/modifier-pool-type"; import { randSeedInt } from "#app/utils/common"; import { BattlerTagType } from "#enums/battler-tag-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; diff --git a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts index c318efc0cb3..df06f40c159 100644 --- a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts +++ b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts @@ -38,7 +38,7 @@ import { } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import { PokemonType } from "#enums/pokemon-type"; import type { AttackTypeBoosterModifierType, ModifierTypeOption } from "#app/modifier/modifier-type"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import type { PokemonHeldItemModifier } from "#app/modifier/modifier"; import { AttackTypeBoosterModifier, @@ -50,7 +50,7 @@ import { import i18next from "i18next"; import MoveInfoOverlay from "#app/ui/move-info-overlay"; import { allMoves } from "#app/data/data-lists"; -import { ModifierTier } from "#app/modifier/modifier-tier"; +import { ModifierTier } from "#enums/modifier-tier"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { getSpriteKeysFromSpecies } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; diff --git a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts index a81dcc841b7..542bd163713 100644 --- a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts +++ b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts @@ -11,9 +11,10 @@ import { import { trainerConfigs } from "#app/data/trainers/trainer-config"; import { TrainerPartyCompoundTemplate } from "#app/data/trainers/TrainerPartyTemplate"; import { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate"; -import { ModifierTier } from "#app/modifier/modifier-tier"; +import { ModifierTier } from "#enums/modifier-tier"; import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; -import { ModifierPoolType, modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; +import { ModifierPoolType } from "#enums/modifier-pool-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { PartyMemberStrength } from "#enums/party-member-strength"; import { globalScene } from "#app/global-scene"; @@ -38,7 +39,6 @@ import i18next from "i18next"; import type { OptionSelectConfig } from "#app/ui/abstact-option-select-ui-handler"; import type { PlayerPokemon } from "#app/field/pokemon"; import { PokemonMove } from "#app/data/moves/pokemon-move"; -import { Ability } from "#app/data/abilities/ability-class"; import { BerryModifier } from "#app/modifier/modifier"; import { BerryType } from "#enums/berry-type"; import { BattlerIndex } from "#enums/battler-index"; @@ -49,6 +49,7 @@ import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { EncounterAnim } from "#enums/encounter-anims"; import { Challenges } from "#enums/challenges"; +import { allAbilities } from "#app/data/data-lists"; /** the i18n namespace for the encounter */ const namespace = "mysteryEncounters/clowningAround"; @@ -139,7 +140,7 @@ export const ClowningAroundEncounter: MysteryEncounter = MysteryEncounterBuilder // Generate random ability for Blacephalon from pool const ability = RANDOM_ABILITY_POOL[randSeedInt(RANDOM_ABILITY_POOL.length)]; - encounter.setDialogueToken("ability", new Ability(ability, 3).name); + encounter.setDialogueToken("ability", allAbilities[ability].name); encounter.misc = { ability }; // Decide the random types for Blacephalon. They should not be the same. diff --git a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts index a74980919d6..4444a2e6b1b 100644 --- a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts +++ b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts @@ -26,7 +26,7 @@ import type Pokemon from "#app/field/pokemon"; import { EnemyPokemon } from "#app/field/pokemon"; import { PokemonMove } from "#app/data/moves/pokemon-move"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import PokemonData from "#app/system/pokemon-data"; import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import { BattlerTagType } from "#enums/battler-tag-type"; diff --git a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts index 6474df3570e..002b38f445d 100644 --- a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts +++ b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts @@ -3,7 +3,7 @@ import { isNullOrUndefined, randSeedInt } from "#app/utils/common"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { SpeciesId } from "#enums/species-id"; import { globalScene } from "#app/global-scene"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; diff --git a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts index 40893d93930..692ffe6e80e 100644 --- a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts +++ b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts @@ -28,7 +28,7 @@ import { PreserveBerryModifier, } from "#app/modifier/modifier"; import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import i18next from "#app/plugins/i18n"; import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import { randSeedItem } from "#app/utils/common"; diff --git a/src/data/mystery-encounters/encounters/department-store-sale-encounter.ts b/src/data/mystery-encounters/encounters/department-store-sale-encounter.ts index 2b6ac9b7cf3..46152a7dc41 100644 --- a/src/data/mystery-encounters/encounters/department-store-sale-encounter.ts +++ b/src/data/mystery-encounters/encounters/department-store-sale-encounter.ts @@ -2,8 +2,8 @@ import { leaveEncounterWithoutBattle, setEncounterRewards, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import type { ModifierTypeFunc } from "#app/modifier/modifier-type"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import type { ModifierTypeFunc } from "#app/@types/modifier-types"; +import { modifierTypes } from "#app/data/data-lists"; import { randSeedInt } from "#app/utils/common"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { SpeciesId } from "#enums/species-id"; diff --git a/src/data/mystery-encounters/encounters/field-trip-encounter.ts b/src/data/mystery-encounters/encounters/field-trip-encounter.ts index 82fbfd51eec..6ab0f8a6a4b 100644 --- a/src/data/mystery-encounters/encounters/field-trip-encounter.ts +++ b/src/data/mystery-encounters/encounters/field-trip-encounter.ts @@ -9,7 +9,7 @@ import { } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import type { PlayerPokemon } from "#app/field/pokemon"; import type { PokemonMove } from "#app/data/moves/pokemon-move"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { globalScene } from "#app/global-scene"; diff --git a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts index d42778cb17c..4b24bf9cada 100644 --- a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts +++ b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts @@ -10,7 +10,7 @@ import { generateModifierType, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import type { AttackTypeBoosterModifierType } from "#app/modifier/modifier-type"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { globalScene } from "#app/global-scene"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; @@ -45,8 +45,8 @@ import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; import { Stat } from "#enums/stat"; -import { Ability } from "#app/data/abilities/ability-class"; import { FIRE_RESISTANT_ABILITIES } from "#app/data/mystery-encounters/requirements/requirement-groups"; +import { allAbilities } from "#app/data/data-lists"; /** the i18n namespace for the encounter */ const namespace = "mysteryEncounters/fieryFallout"; @@ -246,7 +246,7 @@ export const FieryFalloutEncounter: MysteryEncounter = MysteryEncounterBuilder.w if (chosenPokemon.trySetStatus(StatusEffect.BURN)) { // Burn applied encounter.setDialogueToken("burnedPokemon", chosenPokemon.getNameToRender()); - encounter.setDialogueToken("abilityName", new Ability(AbilityId.HEATPROOF, 3).name); + encounter.setDialogueToken("abilityName", allAbilities[AbilityId.HEATPROOF].name); queueEncounterMessage(`${namespace}:option.2.target_burned`); // Also permanently change the burned Pokemon's ability to Heatproof diff --git a/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts b/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts index 83538e9e0e9..f925452e143 100644 --- a/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts +++ b/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts @@ -9,13 +9,13 @@ import { } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { STEALING_MOVES } from "#app/data/mystery-encounters/requirements/requirement-groups"; import type Pokemon from "#app/field/pokemon"; -import { ModifierTier } from "#app/modifier/modifier-tier"; +import { ModifierTier } from "#enums/modifier-tier"; import type { ModifierTypeOption } from "#app/modifier/modifier-type"; import { getPlayerModifierTypeOptions, - ModifierPoolType, regenerateModifierPoolThresholds, } from "#app/modifier/modifier-type"; +import { ModifierPoolType } from "#enums/modifier-pool-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { globalScene } from "#app/global-scene"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; diff --git a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts index 456562ca70e..48557541512 100644 --- a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts +++ b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts @@ -26,7 +26,7 @@ import { PlayerGender } from "#enums/player-gender"; import { getPokeballAtlasKey, getPokeballTintColor } from "#app/data/pokeball"; import { addPokeballOpenParticles } from "#app/field/anims"; import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms/form-change-triggers"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import { Nature } from "#enums/nature"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { isPokemonValidForEncounterOptionSelection } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; diff --git a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts index a84b0af30ed..1b188915de7 100644 --- a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts +++ b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts @@ -4,14 +4,14 @@ import { setEncounterRewards, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { TrainerSlot } from "#enums/trainer-slot"; -import { ModifierTier } from "#app/modifier/modifier-tier"; +import { ModifierTier } from "#enums/modifier-tier"; import { MusicPreference } from "#app/system/settings/settings"; import type { ModifierTypeOption } from "#app/modifier/modifier-type"; import { getPlayerModifierTypeOptions, - ModifierPoolType, regenerateModifierPoolThresholds, } from "#app/modifier/modifier-type"; +import { ModifierPoolType } from "#enums/modifier-pool-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { globalScene } from "#app/global-scene"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; diff --git a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts index 6907e18cfdc..010358ea3b2 100644 --- a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts @@ -7,8 +7,8 @@ import { trainerConfigs } from "#app/data/trainers/trainer-config"; import { trainerPartyTemplates } from "#app/data/trainers/TrainerPartyTemplate"; import { TrainerPartyCompoundTemplate } from "#app/data/trainers/TrainerPartyTemplate"; import { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate"; -import { ModifierTier } from "#app/modifier/modifier-tier"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { ModifierTier } from "#enums/modifier-tier"; +import { modifierTypes } from "#app/data/data-lists"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { PartyMemberStrength } from "#enums/party-member-strength"; import { globalScene } from "#app/global-scene"; diff --git a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts index 62029eb1847..022b0125fde 100644 --- a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts @@ -16,7 +16,7 @@ import { } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; -import { ModifierTier } from "#app/modifier/modifier-tier"; +import { ModifierTier } from "#enums/modifier-tier"; import { randSeedInt } from "#app/utils/common"; import { MoveId } from "#enums/move-id"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; diff --git a/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts b/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts index 1afc67e1d12..967c105c740 100644 --- a/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts +++ b/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts @@ -7,7 +7,7 @@ import { } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import { randSeedInt } from "#app/utils/common"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { SpeciesId } from "#enums/species-id"; diff --git a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts index 1ecd73143fc..483c577e851 100644 --- a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts +++ b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts @@ -1,6 +1,6 @@ import { STEALING_MOVES } from "#app/data/mystery-encounters/requirements/requirement-groups"; import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { SpeciesId } from "#enums/species-id"; import { globalScene } from "#app/global-scene"; diff --git a/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts b/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts index edc9cf13834..9c9232612c6 100644 --- a/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts +++ b/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts @@ -23,7 +23,8 @@ import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode import { BiomeId } from "#enums/biome-id"; import { getBiomeKey } from "#app/field/arena"; import { PokemonType } from "#enums/pokemon-type"; -import { getPartyLuckValue, modifierTypes } from "#app/modifier/modifier-type"; +import { getPartyLuckValue } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import { TrainerSlot } from "#enums/trainer-slot"; import { BattlerTagType } from "#enums/battler-tag-type"; import { getPokemonNameWithAffix } from "#app/messages"; diff --git a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts index fdfcc8f2f13..0676b40c548 100644 --- a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts @@ -26,7 +26,7 @@ import { EggSourceType } from "#enums/egg-source-types"; import { EggTier } from "#enums/egg-type"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import { PokemonType } from "#enums/pokemon-type"; import { getPokeballTintColor } from "#app/data/pokeball"; diff --git a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts index a3eb78f479e..61d9dcfccfd 100644 --- a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts @@ -8,7 +8,7 @@ import { generateModifierType, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { globalScene } from "#app/global-scene"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; diff --git a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts index 91754629821..e2c87d8c0ae 100644 --- a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts @@ -8,7 +8,7 @@ import { transitionMysteryEncounterIntroVisuals, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { globalScene } from "#app/global-scene"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; @@ -24,11 +24,11 @@ import { PokemonType } from "#enums/pokemon-type"; import { BerryType } from "#enums/berry-type"; import { Stat } from "#enums/stat"; import { SpeciesFormChangeAbilityTrigger } from "#app/data/pokemon-forms/form-change-triggers"; -import { applyPostBattleInitAbAttrs, PostBattleInitAbAttr } from "#app/data/abilities/ability"; +import { applyPostBattleInitAbAttrs } from "#app/data/abilities/apply-ab-attrs"; import { showEncounterDialogue, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; import i18next from "i18next"; -import { ModifierTier } from "#app/modifier/modifier-tier"; +import { ModifierTier } from "#enums/modifier-tier"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { BattlerTagType } from "#enums/battler-tag-type"; @@ -221,7 +221,7 @@ function endTrainerBattleAndShowDialogue(): Promise { // Each trainer battle is supposed to be a new fight, so reset all per-battle activation effects pokemon.resetBattleAndWaveData(); - applyPostBattleInitAbAttrs(PostBattleInitAbAttr, pokemon); + applyPostBattleInitAbAttrs("PostBattleInitAbAttr", pokemon); } globalScene.phaseManager.unshiftNew("ShowTrainerPhase"); diff --git a/src/data/mystery-encounters/encounters/training-session-encounter.ts b/src/data/mystery-encounters/encounters/training-session-encounter.ts index 9ab91f439bf..04e64083602 100644 --- a/src/data/mystery-encounters/encounters/training-session-encounter.ts +++ b/src/data/mystery-encounters/encounters/training-session-encounter.ts @@ -1,4 +1,4 @@ -import type { Ability } from "#app/data/abilities/ability-class"; +import type { Ability } from "#app/data/abilities/ability"; import { allAbilities } from "#app/data/data-lists"; import type { EnemyPartyConfig } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { diff --git a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts index 8bcd024de5c..1416c63dd28 100644 --- a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts +++ b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts @@ -8,7 +8,7 @@ import { transitionMysteryEncounterIntroVisuals, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { globalScene } from "#app/global-scene"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; @@ -21,7 +21,7 @@ import { HitHealModifier, PokemonHeldItemModifier, TurnHealModifier } from "#app import { applyModifierTypeToPlayerPokemon } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import { showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import i18next from "#app/plugins/i18n"; -import { ModifierTier } from "#app/modifier/modifier-tier"; +import { ModifierTier } from "#enums/modifier-tier"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { MoveId } from "#enums/move-id"; import { BattlerIndex } from "#enums/battler-index"; diff --git a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts index fe1911c9007..83e876d1aa8 100644 --- a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts +++ b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts @@ -25,7 +25,7 @@ import { HiddenAbilityRateBoosterModifier, PokemonFormChangeItemModifier } from import { achvs } from "#app/system/achv"; import { showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import i18next from "#app/plugins/i18n"; import { doPokemonTransformationSequence, @@ -34,7 +34,7 @@ import { import { getLevelTotalExp } from "#app/data/exp"; import { Stat } from "#enums/stat"; import { Challenges } from "#enums/challenges"; -import { ModifierTier } from "#app/modifier/modifier-tier"; +import { ModifierTier } from "#enums/modifier-tier"; import { PlayerGender } from "#enums/player-gender"; import { TrainerType } from "#enums/trainer-type"; import PokemonData from "#app/system/pokemon-data"; diff --git a/src/data/mystery-encounters/mystery-encounter-save-data.ts b/src/data/mystery-encounters/mystery-encounter-save-data.ts index dd633390e46..20c10c7c5b9 100644 --- a/src/data/mystery-encounters/mystery-encounter-save-data.ts +++ b/src/data/mystery-encounters/mystery-encounter-save-data.ts @@ -1,5 +1,5 @@ import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; -import { BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT } from "#app/data/mystery-encounters/mystery-encounters"; +import { BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT } from "#app/constants"; import { isNullOrUndefined } from "#app/utils/common"; import type { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; diff --git a/src/data/mystery-encounters/mystery-encounters.ts b/src/data/mystery-encounters/mystery-encounters.ts index 3a1d3760c83..5ee289a6c56 100644 --- a/src/data/mystery-encounters/mystery-encounters.ts +++ b/src/data/mystery-encounters/mystery-encounters.ts @@ -34,42 +34,6 @@ import { GlobalTradeSystemEncounter } from "#app/data/mystery-encounters/encount import { TheExpertPokemonBreederEncounter } from "#app/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter"; import { getBiomeName } from "#app/data/balance/biomes"; -/** - * Spawn chance: (BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT + WIGHT_INCREMENT_ON_SPAWN_MISS * ) / MYSTERY_ENCOUNTER_SPAWN_MAX_WEIGHT - */ -export const BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT = 3; -/** - * The divisor for determining ME spawns, defines the "maximum" weight required for a spawn - * If spawn_weight === MYSTERY_ENCOUNTER_SPAWN_MAX_WEIGHT, 100% chance to spawn a ME - */ -export const MYSTERY_ENCOUNTER_SPAWN_MAX_WEIGHT = 256; -/** - * When an ME spawn roll fails, WEIGHT_INCREMENT_ON_SPAWN_MISS is added to future rolls for ME spawn checks. - * These values are cleared whenever the next ME spawns, and spawn weight returns to BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT - */ -export const WEIGHT_INCREMENT_ON_SPAWN_MISS = 3; -/** - * Specifies the target average for total ME spawns in a single Classic run. - * Used by anti-variance mechanic to check whether a run is above or below the target on a given wave. - */ -export const AVERAGE_ENCOUNTERS_PER_RUN_TARGET = 12; -/** - * Will increase/decrease the chance of spawning a ME based on the current run's total MEs encountered vs AVERAGE_ENCOUNTERS_PER_RUN_TARGET - * Example: - * AVERAGE_ENCOUNTERS_PER_RUN_TARGET = 17 (expects avg 1 ME every 10 floors) - * ANTI_VARIANCE_WEIGHT_MODIFIER = 15 - * - * On wave 20, if 1 ME has been encountered, the difference from expected average is 0 MEs. - * So anti-variance adds 0/256 to the spawn weight check for ME spawn. - * - * On wave 20, if 0 MEs have been encountered, the difference from expected average is 1 ME. - * So anti-variance adds 15/256 to the spawn weight check for ME spawn. - * - * On wave 20, if 2 MEs have been encountered, the difference from expected average is -1 ME. - * So anti-variance adds -15/256 to the spawn weight check for ME spawn. - */ -export const ANTI_VARIANCE_WEIGHT_MODIFIER = 15; - export const EXTREME_ENCOUNTER_BIOMES = [ BiomeId.SEA, BiomeId.SEABED, diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index 69984229681..599edb11628 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -3,10 +3,7 @@ import { BattlerIndex } from "#enums/battler-index"; import { BattleType } from "#enums/battle-type"; import { biomeLinks, BiomePoolTier } from "#app/data/balance/biomes"; import type MysteryEncounterOption from "#app/data/mystery-encounters/mystery-encounter-option"; -import { - AVERAGE_ENCOUNTERS_PER_RUN_TARGET, - WEIGHT_INCREMENT_ON_SPAWN_MISS, -} from "#app/data/mystery-encounters/mystery-encounters"; +import { AVERAGE_ENCOUNTERS_PER_RUN_TARGET, WEIGHT_INCREMENT_ON_SPAWN_MISS } from "#app/constants"; import { showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import type { PlayerPokemon } from "#app/field/pokemon"; import type { AiType } from "#enums/ai-type"; @@ -17,12 +14,12 @@ import { FieldPosition } from "#enums/field-position"; import type { CustomModifierSettings, ModifierType } from "#app/modifier/modifier-type"; import { getPartyLuckValue, - ModifierPoolType, ModifierTypeGenerator, ModifierTypeOption, - modifierTypes, regenerateModifierPoolThresholds, } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; +import { ModifierPoolType } from "#enums/modifier-pool-type"; import type PokemonData from "#app/system/pokemon-data"; import type { OptionSelectConfig, OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import type { PartyOption, PokemonSelectFilter } from "#app/ui/party-ui-handler"; diff --git a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts index e8a3db46cff..4671869a2ba 100644 --- a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts @@ -29,7 +29,7 @@ import { } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { getPokemonNameWithAffix } from "#app/messages"; import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import { Gender } from "#app/data/gender"; import type { PermanentStat } from "#enums/stat"; import { SummaryUiMode } from "#app/ui/summary-ui-handler"; diff --git a/src/data/pokeball.ts b/src/data/pokeball.ts index 7a44ebdda7c..a479fd8068a 100644 --- a/src/data/pokeball.ts +++ b/src/data/pokeball.ts @@ -1,5 +1,4 @@ import { globalScene } from "#app/global-scene"; -import { CriticalCatchChanceBoosterModifier } from "#app/modifier/modifier"; import { NumberHolder } from "#app/utils/common"; import { PokeballType } from "#enums/pokeball"; import i18next from "i18next"; @@ -94,7 +93,7 @@ export function getCriticalCaptureChance(modifiedCatchRate: number): number { } const dexCount = globalScene.gameData.getSpeciesCount(d => !!d.caughtAttr); const catchingCharmMultiplier = new NumberHolder(1); - globalScene.findModifier(m => m instanceof CriticalCatchChanceBoosterModifier)?.apply(catchingCharmMultiplier); + globalScene.findModifier(m => m.is("CriticalCatchChanceBoosterModifier"))?.apply(catchingCharmMultiplier); const dexMultiplier = globalScene.gameMode.isDaily || dexCount > 800 ? 2.5 diff --git a/src/data/trainers/trainer-config.ts b/src/data/trainers/trainer-config.ts index 2f1f7ed07a8..8c065666202 100644 --- a/src/data/trainers/trainer-config.ts +++ b/src/data/trainers/trainer-config.ts @@ -1,11 +1,11 @@ import { globalScene } from "#app/global-scene"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "../data-lists"; import { PokemonMove } from "../moves/pokemon-move"; import { toReadableString, isNullOrUndefined, randSeedItem, randSeedInt, randSeedIntRange } from "#app/utils/common"; import { pokemonEvolutions, pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { tmSpecies } from "#app/data/balance/tms"; -import { doubleBattleDialogue } from "#app/data/dialogue"; +import { doubleBattleDialogue } from "../double-battle-dialogue"; import { TrainerVariant } from "#enums/trainer-variant"; import { getIsInitialized, initI18n } from "#app/plugins/i18n"; import i18next from "i18next"; @@ -37,7 +37,7 @@ import { timedEventManager } from "#app/global-event-manager"; // Type imports import type { PokemonSpeciesFilter } from "#app/data/pokemon-species"; import type PokemonSpecies from "#app/data/pokemon-species"; -import type { ModifierTypeFunc } from "#app/modifier/modifier-type"; +import type { ModifierTypeFunc } from "#app/@types/modifier-types"; import type { EnemyPokemon } from "#app/field/pokemon"; import type { EvilTeam } from "./evil-admin-trainer-pools"; import type { diff --git a/src/data/weather.ts b/src/data/weather.ts index 822e5aa8303..425e15b12a8 100644 --- a/src/data/weather.ts +++ b/src/data/weather.ts @@ -5,12 +5,12 @@ import type Pokemon from "../field/pokemon"; import { PokemonType } from "#enums/pokemon-type"; import type Move from "./moves/move"; import { randSeedInt } from "#app/utils/common"; -import { SuppressWeatherEffectAbAttr } from "./abilities/ability"; import { TerrainType, getTerrainName } from "./terrain"; import i18next from "i18next"; import { globalScene } from "#app/global-scene"; import type { Arena } from "#app/field/arena"; import { timedEventManager } from "#app/global-event-manager"; +import type { SuppressWeatherEffectAbAttr } from "./abilities/ability"; export class Weather { public weatherType: WeatherType; @@ -108,10 +108,10 @@ export class Weather { for (const pokemon of field) { let suppressWeatherEffectAbAttr: SuppressWeatherEffectAbAttr | null = pokemon .getAbility() - .getAttrs(SuppressWeatherEffectAbAttr)[0]; + .getAttrs("SuppressWeatherEffectAbAttr")[0]; if (!suppressWeatherEffectAbAttr) { suppressWeatherEffectAbAttr = pokemon.hasPassive() - ? pokemon.getPassiveAbility().getAttrs(SuppressWeatherEffectAbAttr)[0] + ? pokemon.getPassiveAbility().getAttrs("SuppressWeatherEffectAbAttr")[0] : null; } if (suppressWeatherEffectAbAttr && (!this.isImmutable() || suppressWeatherEffectAbAttr.affectsImmutable)) { diff --git a/src/enums/modifier-pool-type.ts b/src/enums/modifier-pool-type.ts new file mode 100644 index 00000000000..0d2b92ba80d --- /dev/null +++ b/src/enums/modifier-pool-type.ts @@ -0,0 +1,7 @@ +export enum ModifierPoolType { + PLAYER, + WILD, + TRAINER, + ENEMY_BUFF, + DAILY_STARTER +} diff --git a/src/modifier/modifier-tier.ts b/src/enums/modifier-tier.ts similarity index 100% rename from src/modifier/modifier-tier.ts rename to src/enums/modifier-tier.ts diff --git a/src/enums/unlockables.ts b/src/enums/unlockables.ts new file mode 100644 index 00000000000..77b39a17e90 --- /dev/null +++ b/src/enums/unlockables.ts @@ -0,0 +1,7 @@ + +export enum Unlockables { + ENDLESS_MODE, + MINI_BLACK_HOLE, + SPLICED_ENDLESS_MODE, + EVIOLITE +} diff --git a/src/field/arena.ts b/src/field/arena.ts index fffbf8dfa26..c77c9a5b3ce 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -24,10 +24,7 @@ import { applyAbAttrs, applyPostTerrainChangeAbAttrs, applyPostWeatherChangeAbAttrs, - PostTerrainChangeAbAttr, - PostWeatherChangeAbAttr, - TerrainEventTypeChangeAbAttr, -} from "#app/data/abilities/ability"; +} from "#app/data/abilities/apply-ab-attrs"; import type Pokemon from "#app/field/pokemon"; import Overrides from "#app/overrides"; import { TagAddedEvent, TagRemovedEvent, TerrainChangedEvent, WeatherChangedEvent } from "#app/events/arena"; @@ -374,7 +371,7 @@ export class Arena { pokemon.findAndRemoveTags( t => "weatherTypes" in t && !(t.weatherTypes as WeatherType[]).find(t => t === weather), ); - applyPostWeatherChangeAbAttrs(PostWeatherChangeAbAttr, pokemon, weather); + applyPostWeatherChangeAbAttrs("PostWeatherChangeAbAttr", pokemon, weather); }); return true; @@ -463,8 +460,8 @@ export class Arena { pokemon.findAndRemoveTags( t => "terrainTypes" in t && !(t.terrainTypes as TerrainType[]).find(t => t === terrain), ); - applyPostTerrainChangeAbAttrs(PostTerrainChangeAbAttr, pokemon, terrain); - applyAbAttrs(TerrainEventTypeChangeAbAttr, pokemon, null, false); + applyPostTerrainChangeAbAttrs("PostTerrainChangeAbAttr", pokemon, terrain); + applyAbAttrs("TerrainEventTypeChangeAbAttr", pokemon, null, false); }); return true; diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 7032cd06131..6a34d936a51 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -111,61 +111,23 @@ import { WeatherType } from "#enums/weather-type"; import { NoCritTag, WeakenMoveScreenTag } from "#app/data/arena-tag"; import { ArenaTagSide } from "#enums/arena-tag-side"; import type { SuppressAbilitiesTag } from "#app/data/arena-tag"; -import type { Ability } from "#app/data/abilities/ability-class"; -import type { AbAttr } from "#app/data/abilities/ab-attrs/ab-attr"; +import type { Ability } from "#app/data/abilities/ability"; import { - StatMultiplierAbAttr, - BlockCritAbAttr, - BonusCritAbAttr, - BypassBurnDamageReductionAbAttr, - FieldPriorityMoveImmunityAbAttr, - IgnoreOpponentStatStagesAbAttr, - MoveImmunityAbAttr, - PreDefendFullHpEndureAbAttr, - ReceivedMoveDamageMultiplierAbAttr, - StabBoostAbAttr, - StatusEffectImmunityAbAttr, - TypeImmunityAbAttr, - WeightMultiplierAbAttr, applyAbAttrs, applyStatMultiplierAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, - NoFusionAbilityAbAttr, - MultCritAbAttr, - IgnoreTypeImmunityAbAttr, - DamageBoostAbAttr, - IgnoreTypeStatusEffectImmunityAbAttr, - ConditionalCritAbAttr, applyFieldStatMultiplierAbAttrs, - FieldMultiplyStatAbAttr, - AddSecondStrikeAbAttr, - UserFieldStatusEffectImmunityAbAttr, - UserFieldBattlerTagImmunityAbAttr, - BattlerTagImmunityAbAttr, - MoveTypeChangeAbAttr, - FullHpResistTypeAbAttr, applyCheckTrappedAbAttrs, - CheckTrappedAbAttr, - InfiltratorAbAttr, - AlliedFieldDamageReductionAbAttr, - PostDamageAbAttr, applyPostDamageAbAttrs, - CommanderAbAttr, applyPostItemLostAbAttrs, - PostItemLostAbAttr, applyOnGainAbAttrs, - PreLeaveFieldAbAttr, applyPreLeaveFieldAbAttrs, applyOnLoseAbAttrs, - PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr, applyAllyStatMultiplierAbAttrs, - AllyStatMultiplierAbAttr, - MoveAbilityBypassAbAttr, - PreSummonAbAttr, -} from "#app/data/abilities/ability"; +} from "#app/data/abilities/apply-ab-attrs"; import { allAbilities } from "#app/data/data-lists"; import type PokemonData from "#app/system/pokemon-data"; import { BattlerIndex } from "#enums/battler-index"; @@ -192,7 +154,7 @@ import type { TrainerSlot } from "#enums/trainer-slot"; import Overrides from "#app/overrides"; import i18next from "i18next"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; -import { ModifierTier } from "#app/modifier/modifier-tier"; +import { ModifierTier } from "#enums/modifier-tier"; import { applyChallenges } from "#app/data/challenge"; import { ChallengeType } from "#enums/challenge-type"; import { AbilityId } from "#enums/ability-id"; @@ -229,6 +191,7 @@ import { HitResult } from "#enums/hit-result"; import { AiType } from "#enums/ai-type"; import type { MoveResult } from "#enums/move-result"; import { PokemonMove } from "#app/data/moves/pokemon-move"; +import type { AbAttrMap, AbAttrString } from "#app/@types/ability-types"; /** Base typeclass for damage parameter methods, used for DRY */ type damageParams = { @@ -1403,7 +1366,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { applyMoveAttrs("HighCritAttr", source, this, move, critStage); globalScene.applyModifiers(CritBoosterModifier, source.isPlayer(), source, critStage); globalScene.applyModifiers(TempCritBoosterModifier, source.isPlayer(), critStage); - applyAbAttrs(BonusCritAbAttr, source, null, false, critStage); + applyAbAttrs("BonusCritAbAttr", source, null, false, critStage); const critBoostTag = source.getTag(CritBoostTag); if (critBoostTag) { if (critBoostTag instanceof DragonCheerTag) { @@ -1464,19 +1427,27 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // The Ruin abilities here are never ignored, but they reveal themselves on summon anyway const fieldApplied = new BooleanHolder(false); for (const pokemon of globalScene.getField(true)) { - applyFieldStatMultiplierAbAttrs(FieldMultiplyStatAbAttr, pokemon, stat, statValue, this, fieldApplied, simulated); + applyFieldStatMultiplierAbAttrs( + "FieldMultiplyStatAbAttr", + pokemon, + stat, + statValue, + this, + fieldApplied, + simulated, + ); if (fieldApplied.value) { break; } } if (!ignoreAbility) { - applyStatMultiplierAbAttrs(StatMultiplierAbAttr, this, stat, statValue, simulated); + applyStatMultiplierAbAttrs("StatMultiplierAbAttr", this, stat, statValue, simulated); } const ally = this.getAlly(); if (!isNullOrUndefined(ally)) { applyAllyStatMultiplierAbAttrs( - AllyStatMultiplierAbAttr, + "AllyStatMultiplierAbAttr", ally, stat, statValue, @@ -2059,15 +2030,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param ignoreOverride - Whether to ignore ability changing effects; Default `false` * @returns An array of all the ability attributes on this ability. */ - public getAbilityAttrs( - attrType: { new (...args: any[]): T }, - canApply = true, - ignoreOverride = false, - ): T[] { - const abilityAttrs: T[] = []; + public getAbilityAttrs(attrType: T, canApply = true, ignoreOverride = false): AbAttrMap[T][] { + const abilityAttrs: AbAttrMap[T][] = []; if (!canApply || this.canApplyAbility()) { - abilityAttrs.push(...this.getAbility(ignoreOverride).getAttrs(attrType)); + abilityAttrs.push(...this.getAbility(ignoreOverride).getAttrs(attrType)); } if (!canApply || this.canApplyAbility(true)) { @@ -2152,7 +2119,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return false; } const ability = !passive ? this.getAbility() : this.getPassiveAbility(); - if (this.isFusion() && ability.hasAttr(NoFusionAbilityAbAttr)) { + if (this.isFusion() && ability.hasAttr("NoFusionAbilityAbAttr")) { return false; } const arena = globalScene?.arena; @@ -2163,10 +2130,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return false; } const suppressAbilitiesTag = arena.getTag(ArenaTagType.NEUTRALIZING_GAS) as SuppressAbilitiesTag; - const suppressOffField = ability.hasAttr(PreSummonAbAttr); + const suppressOffField = ability.hasAttr("PreSummonAbAttr"); if ((this.isOnField() || suppressOffField) && suppressAbilitiesTag && !suppressAbilitiesTag.isBeingRemoved()) { - const thisAbilitySuppressing = ability.hasAttr(PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr); - const hasSuppressingAbility = this.hasAbilityWithAttr(PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr, false); + const thisAbilitySuppressing = ability.hasAttr("PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr"); + const hasSuppressingAbility = this.hasAbilityWithAttr("PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr", false); // Neutralizing gas is up - suppress abilities unless they are unsuppressable or this pokemon is responsible for the gas // (Balance decided that the other ability of a neutralizing gas pokemon should not be neutralized) // If the ability itself is neutralizing gas, don't suppress it (handled through arena tag) @@ -2207,7 +2174,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param ignoreOverride Whether to ignore ability changing effects; default `false` * @returns `true` if an ability with the given {@linkcode AbAttr} is present and active */ - public hasAbilityWithAttr(attrType: Constructor, canApply = true, ignoreOverride = false): boolean { + public hasAbilityWithAttr(attrType: AbAttrString, canApply = true, ignoreOverride = false): boolean { if ((!canApply || this.canApplyAbility()) && this.getAbility(ignoreOverride).hasAttr(attrType)) { return true; } @@ -2229,7 +2196,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const weight = new NumberHolder(this.species.weight - weightRemoved); // This will trigger the ability overlay so only call this function when necessary - applyAbAttrs(WeightMultiplierAbAttr, this, null, false, weight); + applyAbAttrs("WeightMultiplierAbAttr", this, null, false, weight); return Math.max(minWeight, weight.value); } @@ -2300,7 +2267,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const opposingField = opposingFieldUnfiltered.filter(enemyPkm => enemyPkm.switchOutStatus === false); for (const opponent of opposingField) { - applyCheckTrappedAbAttrs(CheckTrappedAbAttr, opponent, trappedByAbility, this, trappedAbMessages, simulated); + applyCheckTrappedAbAttrs("CheckTrappedAbAttr", opponent, trappedByAbility, this, trappedAbMessages, simulated); } const side = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; @@ -2322,7 +2289,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const moveTypeHolder = new NumberHolder(move.type); applyMoveAttrs("VariableMoveTypeAttr", this, null, move, moveTypeHolder); - applyPreAttackAbAttrs(MoveTypeChangeAbAttr, this, null, move, simulated, moveTypeHolder); + applyPreAttackAbAttrs("MoveTypeChangeAbAttr", this, null, move, simulated, moveTypeHolder); // If the user is terastallized and the move is tera blast, or tera starstorm that is stellar type, // then bypass the check for ion deluge and electrify @@ -2387,16 +2354,16 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const cancelledHolder = cancelled ?? new BooleanHolder(false); if (!ignoreAbility) { - applyPreDefendAbAttrs(TypeImmunityAbAttr, this, source, move, cancelledHolder, simulated, typeMultiplier); + applyPreDefendAbAttrs("TypeImmunityAbAttr", this, source, move, cancelledHolder, simulated, typeMultiplier); if (!cancelledHolder.value) { - applyPreDefendAbAttrs(MoveImmunityAbAttr, this, source, move, cancelledHolder, simulated, typeMultiplier); + applyPreDefendAbAttrs("MoveImmunityAbAttr", this, source, move, cancelledHolder, simulated, typeMultiplier); } if (!cancelledHolder.value) { const defendingSidePlayField = this.isPlayer() ? globalScene.getPlayerField() : globalScene.getEnemyField(); defendingSidePlayField.forEach(p => - applyPreDefendAbAttrs(FieldPriorityMoveImmunityAbAttr, p, source, move, cancelledHolder), + applyPreDefendAbAttrs("FieldPriorityMoveImmunityAbAttr", p, source, move, cancelledHolder), ); } } @@ -2411,7 +2378,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // Apply Tera Shell's effect to attacks after all immunities are accounted for if (!ignoreAbility && move.category !== MoveCategory.STATUS) { - applyPreDefendAbAttrs(FullHpResistTypeAbAttr, this, source, move, cancelledHolder, simulated, typeMultiplier); + applyPreDefendAbAttrs("FullHpResistTypeAbAttr", this, source, move, cancelledHolder, simulated, typeMultiplier); } if (move.category === MoveCategory.STATUS && move.hitsSubstitute(source, this)) { @@ -2463,8 +2430,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } if (source) { const ignoreImmunity = new BooleanHolder(false); - if (source.isActive(true) && source.hasAbilityWithAttr(IgnoreTypeImmunityAbAttr)) { - applyAbAttrs(IgnoreTypeImmunityAbAttr, source, ignoreImmunity, simulated, moveType, defType); + if (source.isActive(true) && source.hasAbilityWithAttr("IgnoreTypeImmunityAbAttr")) { + applyAbAttrs("IgnoreTypeImmunityAbAttr", source, ignoreImmunity, simulated, moveType, defType); } if (ignoreImmunity.value) { if (multiplier.value === 0) { @@ -3415,7 +3382,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } if (!ignoreOppAbility) { - applyAbAttrs(IgnoreOpponentStatStagesAbAttr, opponent, null, simulated, stat, ignoreStatStage); + applyAbAttrs("IgnoreOpponentStatStagesAbAttr", opponent, null, simulated, stat, ignoreStatStage); } if (move) { applyMoveAttrs("IgnoreOpponentStatStagesAttr", this, opponent, move, ignoreStatStage); @@ -3454,8 +3421,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const ignoreAccStatStage = new BooleanHolder(false); const ignoreEvaStatStage = new BooleanHolder(false); - applyAbAttrs(IgnoreOpponentStatStagesAbAttr, target, null, false, Stat.ACC, ignoreAccStatStage); - applyAbAttrs(IgnoreOpponentStatStagesAbAttr, this, null, false, Stat.EVA, ignoreEvaStatStage); + applyAbAttrs("IgnoreOpponentStatStagesAbAttr", target, null, false, Stat.ACC, ignoreAccStatStage); + applyAbAttrs("IgnoreOpponentStatStagesAbAttr", this, null, false, Stat.EVA, ignoreEvaStatStage); applyMoveAttrs("IgnoreOpponentStatStagesAttr", this, target, sourceMove, ignoreEvaStatStage); globalScene.applyModifiers(TempStatStageBoosterModifier, this.isPlayer(), Stat.ACC, userAccStage); @@ -3475,16 +3442,33 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { : 3 / (3 + Math.min(targetEvaStage.value - userAccStage.value, 6)); } - applyStatMultiplierAbAttrs(StatMultiplierAbAttr, this, Stat.ACC, accuracyMultiplier, false, sourceMove); + applyStatMultiplierAbAttrs("StatMultiplierAbAttr", this, Stat.ACC, accuracyMultiplier, false, sourceMove); const evasionMultiplier = new NumberHolder(1); - applyStatMultiplierAbAttrs(StatMultiplierAbAttr, target, Stat.EVA, evasionMultiplier); + applyStatMultiplierAbAttrs("StatMultiplierAbAttr", target, Stat.EVA, evasionMultiplier); const ally = this.getAlly(); if (!isNullOrUndefined(ally)) { - const ignore = this.hasAbilityWithAttr(MoveAbilityBypassAbAttr) || sourceMove.hasFlag(MoveFlags.IGNORE_ABILITIES); - applyAllyStatMultiplierAbAttrs(AllyStatMultiplierAbAttr, ally, Stat.ACC, accuracyMultiplier, false, this, ignore); - applyAllyStatMultiplierAbAttrs(AllyStatMultiplierAbAttr, ally, Stat.EVA, evasionMultiplier, false, this, ignore); + const ignore = + this.hasAbilityWithAttr("MoveAbilityBypassAbAttr") || sourceMove.hasFlag(MoveFlags.IGNORE_ABILITIES); + applyAllyStatMultiplierAbAttrs( + "AllyStatMultiplierAbAttr", + ally, + Stat.ACC, + accuracyMultiplier, + false, + this, + ignore, + ); + applyAllyStatMultiplierAbAttrs( + "AllyStatMultiplierAbAttr", + ally, + Stat.EVA, + evasionMultiplier, + false, + this, + ignore, + ); } return accuracyMultiplier.value / evasionMultiplier.value; @@ -3599,7 +3583,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { applyMoveAttrs("CombinedPledgeStabBoostAttr", source, this, move, stabMultiplier); if (!ignoreSourceAbility) { - applyAbAttrs(StabBoostAbAttr, source, null, simulated, stabMultiplier); + applyAbAttrs("StabBoostAbAttr", source, null, simulated, stabMultiplier); } if (source.isTerastallized && sourceTeraType === moveType && moveType !== PokemonType.STELLAR) { @@ -3748,7 +3732,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ); if (!ignoreSourceAbility) { applyPreAttackAbAttrs( - AddSecondStrikeAbAttr, + "AddSecondStrikeAbAttr", source, this, move, @@ -3766,7 +3750,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** The damage multiplier when the given move critically hits */ const criticalMultiplier = new NumberHolder(isCritical ? 1.5 : 1); - applyAbAttrs(MultCritAbAttr, source, null, simulated, criticalMultiplier); + applyAbAttrs("MultCritAbAttr", source, null, simulated, criticalMultiplier); /** * A multiplier for random damage spread in the range [0.85, 1] @@ -3787,7 +3771,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ) { const burnDamageReductionCancelled = new BooleanHolder(false); if (!ignoreSourceAbility) { - applyAbAttrs(BypassBurnDamageReductionAbAttr, source, burnDamageReductionCancelled, simulated); + applyAbAttrs("BypassBurnDamageReductionAbAttr", source, burnDamageReductionCancelled, simulated); } if (!burnDamageReductionCancelled.value) { burnMultiplier = 0.5; @@ -3851,7 +3835,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** Doubles damage if the attacker has Tinted Lens and is using a resisted move */ if (!ignoreSourceAbility) { - applyPreAttackAbAttrs(DamageBoostAbAttr, source, this, move, simulated, damage); + applyPreAttackAbAttrs("DamageBoostAbAttr", source, this, move, simulated, damage); } /** Apply the enemy's Damage and Resistance tokens */ @@ -3864,12 +3848,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** Apply this Pokemon's post-calc defensive modifiers (e.g. Fur Coat) */ if (!ignoreAbility) { - applyPreDefendAbAttrs(ReceivedMoveDamageMultiplierAbAttr, this, source, move, cancelled, simulated, damage); + applyPreDefendAbAttrs("ReceivedMoveDamageMultiplierAbAttr", this, source, move, cancelled, simulated, damage); const ally = this.getAlly(); /** Additionally apply friend guard damage reduction if ally has it. */ if (globalScene.currentBattle.double && !isNullOrUndefined(ally) && ally.isActive(true)) { - applyPreDefendAbAttrs(AlliedFieldDamageReductionAbAttr, ally, source, move, cancelled, simulated, damage); + applyPreDefendAbAttrs("AlliedFieldDamageReductionAbAttr", ally, source, move, cancelled, simulated, damage); } } @@ -3877,7 +3861,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { applyMoveAttrs("ModifiedDamageAttr", source, this, move, damage); if (this.isFullHp() && !ignoreAbility) { - applyPreDefendAbAttrs(PreDefendFullHpEndureAbAttr, this, source, move, cancelled, false, damage); + applyPreDefendAbAttrs("PreDefendFullHpEndureAbAttr", this, source, move, cancelled, false, damage); } // debug message for when damage is applied (i.e. not simulated) @@ -3919,13 +3903,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { isCritical.value = true; } applyMoveAttrs("CritOnlyAttr", source, this, move, isCritical); - applyAbAttrs(ConditionalCritAbAttr, source, null, simulated, isCritical, this, move); + applyAbAttrs("ConditionalCritAbAttr", source, null, simulated, isCritical, this, move); if (!isCritical.value) { const critChance = [24, 8, 2, 1][Math.max(0, Math.min(this.getCritStage(source, move), 3))]; isCritical.value = critChance === 1 || !globalScene.randBattleSeedInt(critChance); } - applyAbAttrs(BlockCritAbAttr, this, null, simulated, isCritical); + applyAbAttrs("BlockCritAbAttr", this, null, simulated, isCritical); return isCritical.value; } @@ -4032,7 +4016,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * Multi-hits are handled in move-effect-phase.ts for PostDamageAbAttr */ if (!source || source.turnData.hitCount <= 1) { - applyPostDamageAbAttrs(PostDamageAbAttr, this, damage, this.hasPassive(), false, [], source); + applyPostDamageAbAttrs("PostDamageAbAttr", this, damage, this.hasPassive(), false, [], source); } return damage; } @@ -4080,11 +4064,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const stubTag = new BattlerTag(tagType, 0, 0); const cancelled = new BooleanHolder(false); - applyPreApplyBattlerTagAbAttrs(BattlerTagImmunityAbAttr, this, stubTag, cancelled, true); + applyPreApplyBattlerTagAbAttrs("BattlerTagImmunityAbAttr", this, stubTag, cancelled, true); const userField = this.getAlliedField(); userField.forEach(pokemon => - applyPreApplyBattlerTagAbAttrs(UserFieldBattlerTagImmunityAbAttr, pokemon, stubTag, cancelled, true, this), + applyPreApplyBattlerTagAbAttrs("UserFieldBattlerTagImmunityAbAttr", pokemon, stubTag, cancelled, true, this), ); return !cancelled.value; @@ -4100,13 +4084,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const newTag = getBattlerTag(tagType, turnCount, sourceMove!, sourceId!); // TODO: are the bangs correct? const cancelled = new BooleanHolder(false); - applyPreApplyBattlerTagAbAttrs(BattlerTagImmunityAbAttr, this, newTag, cancelled); + applyPreApplyBattlerTagAbAttrs("BattlerTagImmunityAbAttr", this, newTag, cancelled); if (cancelled.value) { return false; } for (const pokemon of this.getAlliedField()) { - applyPreApplyBattlerTagAbAttrs(UserFieldBattlerTagImmunityAbAttr, pokemon, newTag, cancelled, false, this); + applyPreApplyBattlerTagAbAttrs("UserFieldBattlerTagImmunityAbAttr", pokemon, newTag, cancelled, false, this); if (cancelled.value) { return false; } @@ -4124,6 +4108,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /**@overload */ getTag(tagType: BattlerTagType.GRUDGE): GrudgeTag | nil; + /** @overload */ + getTag(tagType: BattlerTagType.SUBSTITUTE): SubstituteTag | undefined; + /** @overload */ getTag(tagType: BattlerTagType): BattlerTag | undefined; @@ -4626,7 +4613,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // Check if the source Pokemon has an ability that cancels the Poison/Toxic immunity const cancelImmunity = new BooleanHolder(false); if (sourcePokemon) { - applyAbAttrs(IgnoreTypeStatusEffectImmunityAbAttr, sourcePokemon, cancelImmunity, false, effect, defType); + applyAbAttrs("IgnoreTypeStatusEffectImmunityAbAttr", sourcePokemon, cancelImmunity, false, effect, defType); if (cancelImmunity.value) { return false; } @@ -4675,14 +4662,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } const cancelled = new BooleanHolder(false); - applyPreSetStatusAbAttrs(StatusEffectImmunityAbAttr, this, effect, cancelled, quiet); + applyPreSetStatusAbAttrs("StatusEffectImmunityAbAttr", this, effect, cancelled, quiet); if (cancelled.value) { return false; } for (const pokemon of this.getAlliedField()) { applyPreSetStatusAbAttrs( - UserFieldStatusEffectImmunityAbAttr, + "UserFieldStatusEffectImmunityAbAttr", pokemon, effect, cancelled, @@ -4839,7 +4826,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (globalScene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, defendingSide)) { const bypassed = new BooleanHolder(false); if (attacker) { - applyAbAttrs(InfiltratorAbAttr, attacker, null, false, bypassed); + applyAbAttrs("InfiltratorAbAttr", attacker, null, false, bypassed); } return !bypassed.value; } @@ -4863,7 +4850,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // If this Pokemon has Commander and Dondozo as an active ally, hide this Pokemon's sprite. if ( - this.hasAbilityWithAttr(CommanderAbAttr) && + this.hasAbilityWithAttr("CommanderAbAttr") && globalScene.currentBattle.double && this.getAlly()?.species.speciesId === SpeciesId.DONDOZO ) { @@ -5388,7 +5375,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.hideInfo(); } // Trigger abilities that activate upon leaving the field - applyPreLeaveFieldAbAttrs(PreLeaveFieldAbAttr, this); + applyPreLeaveFieldAbAttrs("PreLeaveFieldAbAttr", this); this.setSwitchOutStatus(true); globalScene.triggerPokemonFormChange(this, SpeciesFormChangeActiveTrigger, true); globalScene.field.remove(this, destroy); @@ -5448,7 +5435,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { globalScene.removeModifier(heldItem, this.isEnemy()); } if (forBattle) { - applyPostItemLostAbAttrs(PostItemLostAbAttr, this, false); + applyPostItemLostAbAttrs("PostItemLostAbAttr", this, false); } return true; diff --git a/src/loading-scene.ts b/src/loading-scene.ts index 67ca9a28bc5..f67d19e1027 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -21,6 +21,8 @@ import { initVouchers } from "#app/system/voucher"; import { BiomeId } from "#enums/biome-id"; import { initMysteryEncounters } from "#app/data/mystery-encounters/mystery-encounters"; import { timedEventManager } from "./global-event-manager"; +import { initModifierPools } from "./modifier/init-modifier-pools"; +import { initModifierTypes } from "./modifier/modifier-type"; export class LoadingScene extends SceneBase { public static readonly KEY = "loading"; @@ -363,6 +365,9 @@ export class LoadingScene extends SceneBase { this.loadLoadingScreen(); + initModifierTypes(); + initModifierPools(); + initAchievements(); initVouchers(); initStatsKeys(); diff --git a/src/modifier/init-modifier-pools.ts b/src/modifier/init-modifier-pools.ts new file mode 100644 index 00000000000..60697333600 --- /dev/null +++ b/src/modifier/init-modifier-pools.ts @@ -0,0 +1,854 @@ +import type Pokemon from "#app/field/pokemon"; +import { + dailyStarterModifierPool, + enemyBuffModifierPool, + modifierPool, + trainerModifierPool, + wildModifierPool, +} from "#app/modifier/modifier-pools"; +import { globalScene } from "#app/global-scene"; +import { DoubleBattleChanceBoosterModifier, SpeciesCritBoosterModifier, TurnStatusEffectModifier } from "./modifier"; +import { WeightedModifierType } from "./modifier-type"; +import { ModifierTier } from "../enums/modifier-tier"; +import type { WeightedModifierTypeWeightFunc } from "#app/@types/modifier-types"; +import { modifierTypes } from "#app/data/data-lists"; +import { PokeballType } from "#enums/pokeball"; +import { BerryModifier } from "./modifier"; +import { BerryType } from "#enums/berry-type"; +import { SpeciesId } from "#enums/species-id"; +import { timedEventManager } from "#app/global-event-manager"; +import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; +import { Unlockables } from "#enums/unlockables"; +import { isNullOrUndefined } from "#app/utils/common"; +import { MoveId } from "#enums/move-id"; +import { StatusEffect } from "#enums/status-effect"; +import { AbilityId } from "#enums/ability-id"; +import { MAX_PER_TYPE_POKEBALLS } from "#app/data/pokeball"; +// biome-ignore lint/correctness/noUnusedImports: This is used in a tsdoc comment +import type { initModifierTypes } from "./modifier-type"; + +/** + * Initialize the wild modifier pool + */ +function initWildModifierPool() { + wildModifierPool[ModifierTier.COMMON] = [new WeightedModifierType(modifierTypes.BERRY, 1)].map(m => { + m.setTier(ModifierTier.COMMON); + return m; + }); + wildModifierPool[ModifierTier.GREAT] = [new WeightedModifierType(modifierTypes.BASE_STAT_BOOSTER, 1)].map(m => { + m.setTier(ModifierTier.GREAT); + return m; + }); + wildModifierPool[ModifierTier.ULTRA] = [ + new WeightedModifierType(modifierTypes.ATTACK_TYPE_BOOSTER, 10), + new WeightedModifierType(modifierTypes.WHITE_HERB, 0), + ].map(m => { + m.setTier(ModifierTier.ULTRA); + return m; + }); + wildModifierPool[ModifierTier.ROGUE] = [new WeightedModifierType(modifierTypes.LUCKY_EGG, 4)].map(m => { + m.setTier(ModifierTier.ROGUE); + return m; + }); + wildModifierPool[ModifierTier.MASTER] = [new WeightedModifierType(modifierTypes.GOLDEN_EGG, 1)].map(m => { + m.setTier(ModifierTier.MASTER); + return m; + }); +} + +/** + * Initialize the common modifier pool + */ +function initCommonModifierPool() { + modifierPool[ModifierTier.COMMON] = [ + new WeightedModifierType(modifierTypes.POKEBALL, () => (hasMaximumBalls(PokeballType.POKEBALL) ? 0 : 6), 6), + new WeightedModifierType(modifierTypes.RARE_CANDY, 2), + new WeightedModifierType( + modifierTypes.POTION, + (party: Pokemon[]) => { + const thresholdPartyMemberCount = Math.min( + party.filter(p => p.getInverseHp() >= 10 && p.getHpRatio() <= 0.875 && !p.isFainted()).length, + 3, + ); + return thresholdPartyMemberCount * 3; + }, + 9, + ), + new WeightedModifierType( + modifierTypes.SUPER_POTION, + (party: Pokemon[]) => { + const thresholdPartyMemberCount = Math.min( + party.filter(p => p.getInverseHp() >= 25 && p.getHpRatio() <= 0.75 && !p.isFainted()).length, + 3, + ); + return thresholdPartyMemberCount; + }, + 3, + ), + new WeightedModifierType( + modifierTypes.ETHER, + (party: Pokemon[]) => { + const thresholdPartyMemberCount = Math.min( + party.filter( + p => + p.hp && + !p.getHeldItems().some(m => m instanceof BerryModifier && m.berryType === BerryType.LEPPA) && + p + .getMoveset() + .filter(m => m.ppUsed && m.getMovePp() - m.ppUsed <= 5 && m.ppUsed > Math.floor(m.getMovePp() / 2)) + .length, + ).length, + 3, + ); + return thresholdPartyMemberCount * 3; + }, + 9, + ), + new WeightedModifierType( + modifierTypes.MAX_ETHER, + (party: Pokemon[]) => { + const thresholdPartyMemberCount = Math.min( + party.filter( + p => + p.hp && + !p.getHeldItems().some(m => m instanceof BerryModifier && m.berryType === BerryType.LEPPA) && + p + .getMoveset() + .filter(m => m.ppUsed && m.getMovePp() - m.ppUsed <= 5 && m.ppUsed > Math.floor(m.getMovePp() / 2)) + .length, + ).length, + 3, + ); + return thresholdPartyMemberCount; + }, + 3, + ), + new WeightedModifierType(modifierTypes.LURE, lureWeightFunc(10, 2)), + new WeightedModifierType(modifierTypes.TEMP_STAT_STAGE_BOOSTER, 4), + new WeightedModifierType(modifierTypes.BERRY, 2), + new WeightedModifierType(modifierTypes.TM_COMMON, 2), + ].map(m => { + m.setTier(ModifierTier.COMMON); + return m; + }); +} + +/** + * Initialize the Great modifier pool + */ +function initGreatModifierPool() { + modifierPool[ModifierTier.GREAT] = [ + new WeightedModifierType(modifierTypes.GREAT_BALL, () => (hasMaximumBalls(PokeballType.GREAT_BALL) ? 0 : 6), 6), + new WeightedModifierType(modifierTypes.PP_UP, 2), + new WeightedModifierType( + modifierTypes.FULL_HEAL, + (party: Pokemon[]) => { + const statusEffectPartyMemberCount = Math.min( + party.filter( + p => + p.hp && + !!p.status && + !p.getHeldItems().some(i => { + if (i instanceof TurnStatusEffectModifier) { + return (i as TurnStatusEffectModifier).getStatusEffect() === p.status?.effect; + } + return false; + }), + ).length, + 3, + ); + return statusEffectPartyMemberCount * 6; + }, + 18, + ), + new WeightedModifierType( + modifierTypes.REVIVE, + (party: Pokemon[]) => { + const faintedPartyMemberCount = Math.min(party.filter(p => p.isFainted()).length, 3); + return faintedPartyMemberCount * 9; + }, + 27, + ), + new WeightedModifierType( + modifierTypes.MAX_REVIVE, + (party: Pokemon[]) => { + const faintedPartyMemberCount = Math.min(party.filter(p => p.isFainted()).length, 3); + return faintedPartyMemberCount * 3; + }, + 9, + ), + new WeightedModifierType( + modifierTypes.SACRED_ASH, + (party: Pokemon[]) => { + return party.filter(p => p.isFainted()).length >= Math.ceil(party.length / 2) ? 1 : 0; + }, + 1, + ), + new WeightedModifierType( + modifierTypes.HYPER_POTION, + (party: Pokemon[]) => { + const thresholdPartyMemberCount = Math.min( + party.filter(p => p.getInverseHp() >= 100 && p.getHpRatio() <= 0.625 && !p.isFainted()).length, + 3, + ); + return thresholdPartyMemberCount * 3; + }, + 9, + ), + new WeightedModifierType( + modifierTypes.MAX_POTION, + (party: Pokemon[]) => { + const thresholdPartyMemberCount = Math.min( + party.filter(p => p.getInverseHp() >= 100 && p.getHpRatio() <= 0.5 && !p.isFainted()).length, + 3, + ); + return thresholdPartyMemberCount; + }, + 3, + ), + new WeightedModifierType( + modifierTypes.FULL_RESTORE, + (party: Pokemon[]) => { + const statusEffectPartyMemberCount = Math.min( + party.filter( + p => + p.hp && + !!p.status && + !p.getHeldItems().some(i => { + if (i instanceof TurnStatusEffectModifier) { + return (i as TurnStatusEffectModifier).getStatusEffect() === p.status?.effect; + } + return false; + }), + ).length, + 3, + ); + const thresholdPartyMemberCount = Math.floor( + (Math.min(party.filter(p => p.getInverseHp() >= 100 && p.getHpRatio() <= 0.5 && !p.isFainted()).length, 3) + + statusEffectPartyMemberCount) / + 2, + ); + return thresholdPartyMemberCount; + }, + 3, + ), + new WeightedModifierType( + modifierTypes.ELIXIR, + (party: Pokemon[]) => { + const thresholdPartyMemberCount = Math.min( + party.filter( + p => + p.hp && + !p.getHeldItems().some(m => m instanceof BerryModifier && m.berryType === BerryType.LEPPA) && + p + .getMoveset() + .filter(m => m.ppUsed && m.getMovePp() - m.ppUsed <= 5 && m.ppUsed > Math.floor(m.getMovePp() / 2)) + .length, + ).length, + 3, + ); + return thresholdPartyMemberCount * 3; + }, + 9, + ), + new WeightedModifierType( + modifierTypes.MAX_ELIXIR, + (party: Pokemon[]) => { + const thresholdPartyMemberCount = Math.min( + party.filter( + p => + p.hp && + !p.getHeldItems().some(m => m instanceof BerryModifier && m.berryType === BerryType.LEPPA) && + p + .getMoveset() + .filter(m => m.ppUsed && m.getMovePp() - m.ppUsed <= 5 && m.ppUsed > Math.floor(m.getMovePp() / 2)) + .length, + ).length, + 3, + ); + return thresholdPartyMemberCount; + }, + 3, + ), + new WeightedModifierType(modifierTypes.DIRE_HIT, 4), + new WeightedModifierType(modifierTypes.SUPER_LURE, lureWeightFunc(15, 4)), + new WeightedModifierType(modifierTypes.NUGGET, skipInLastClassicWaveOrDefault(5)), + new WeightedModifierType(modifierTypes.SPECIES_STAT_BOOSTER, 4), + new WeightedModifierType( + modifierTypes.EVOLUTION_ITEM, + () => { + return Math.min(Math.ceil(globalScene.currentBattle.waveIndex / 15), 8); + }, + 8, + ), + new WeightedModifierType( + modifierTypes.MAP, + () => (globalScene.gameMode.isClassic && globalScene.currentBattle.waveIndex < 180 ? 2 : 0), + 2, + ), + new WeightedModifierType(modifierTypes.SOOTHE_BELL, 2), + new WeightedModifierType(modifierTypes.TM_GREAT, 3), + new WeightedModifierType( + modifierTypes.MEMORY_MUSHROOM, + (party: Pokemon[]) => { + if (!party.find(p => p.getLearnableLevelMoves().length)) { + return 0; + } + const highestPartyLevel = party + .map(p => p.level) + .reduce((highestLevel: number, level: number) => Math.max(highestLevel, level), 1); + return Math.min(Math.ceil(highestPartyLevel / 20), 4); + }, + 4, + ), + new WeightedModifierType(modifierTypes.BASE_STAT_BOOSTER, 3), + new WeightedModifierType(modifierTypes.TERA_SHARD, (party: Pokemon[]) => + party.filter( + p => + !(p.hasSpecies(SpeciesId.TERAPAGOS) || p.hasSpecies(SpeciesId.OGERPON) || p.hasSpecies(SpeciesId.SHEDINJA)), + ).length > 0 + ? 1 + : 0, + ), + new WeightedModifierType( + modifierTypes.DNA_SPLICERS, + (party: Pokemon[]) => { + if (party.filter(p => !p.fusionSpecies).length > 1) { + if (globalScene.gameMode.isSplicedOnly) { + return 4; + } + if (globalScene.gameMode.isClassic && timedEventManager.areFusionsBoosted()) { + return 2; + } + } + return 0; + }, + 4, + ), + new WeightedModifierType( + modifierTypes.VOUCHER, + (_party: Pokemon[], rerollCount: number) => (!globalScene.gameMode.isDaily ? Math.max(1 - rerollCount, 0) : 0), + 1, + ), + ].map(m => { + m.setTier(ModifierTier.GREAT); + return m; + }); +} + +/** + * Initialize the Ultra modifier pool + */ +function initUltraModifierPool() { + modifierPool[ModifierTier.ULTRA] = [ + new WeightedModifierType(modifierTypes.ULTRA_BALL, () => (hasMaximumBalls(PokeballType.ULTRA_BALL) ? 0 : 15), 15), + new WeightedModifierType(modifierTypes.MAX_LURE, lureWeightFunc(30, 4)), + new WeightedModifierType(modifierTypes.BIG_NUGGET, skipInLastClassicWaveOrDefault(12)), + new WeightedModifierType(modifierTypes.PP_MAX, 3), + new WeightedModifierType(modifierTypes.MINT, 4), + new WeightedModifierType( + modifierTypes.RARE_EVOLUTION_ITEM, + () => Math.min(Math.ceil(globalScene.currentBattle.waveIndex / 15) * 4, 32), + 32, + ), + new WeightedModifierType( + modifierTypes.FORM_CHANGE_ITEM, + () => Math.min(Math.ceil(globalScene.currentBattle.waveIndex / 50), 4) * 6, + 24, + ), + new WeightedModifierType(modifierTypes.AMULET_COIN, skipInLastClassicWaveOrDefault(3)), + new WeightedModifierType(modifierTypes.EVIOLITE, (party: Pokemon[]) => { + const { gameMode, gameData } = globalScene; + if (gameMode.isDaily || (!gameMode.isFreshStartChallenge() && gameData.isUnlocked(Unlockables.EVIOLITE))) { + return party.some(p => { + // Check if Pokemon's species (or fusion species, if applicable) can evolve or if they're G-Max'd + if ( + !p.isMax() && + (p.getSpeciesForm(true).speciesId in pokemonEvolutions || + (p.isFusion() && p.getFusionSpeciesForm(true).speciesId in pokemonEvolutions)) + ) { + // Check if Pokemon is already holding an Eviolite + return !p.getHeldItems().some(i => i.type.id === "EVIOLITE"); + } + return false; + }) + ? 10 + : 0; + } + return 0; + }), + new WeightedModifierType(modifierTypes.RARE_SPECIES_STAT_BOOSTER, 12), + new WeightedModifierType( + modifierTypes.LEEK, + (party: Pokemon[]) => { + const checkedSpecies = [SpeciesId.FARFETCHD, SpeciesId.GALAR_FARFETCHD, SpeciesId.SIRFETCHD]; + // If a party member doesn't already have a Leek and is one of the relevant species, Leek can appear + return party.some( + p => + !p.getHeldItems().some(i => i instanceof SpeciesCritBoosterModifier) && + (checkedSpecies.includes(p.getSpeciesForm(true).speciesId) || + (p.isFusion() && checkedSpecies.includes(p.getFusionSpeciesForm(true).speciesId))), + ) + ? 12 + : 0; + }, + 12, + ), + new WeightedModifierType( + modifierTypes.TOXIC_ORB, + (party: Pokemon[]) => { + return party.some(p => { + const isHoldingOrb = p.getHeldItems().some(i => i.type.id === "FLAME_ORB" || i.type.id === "TOXIC_ORB"); + + if (!isHoldingOrb) { + const moveset = p + .getMoveset(true) + .filter(m => !isNullOrUndefined(m)) + .map(m => m.moveId); + const canSetStatus = p.canSetStatus(StatusEffect.TOXIC, true, true, null, true); + + // Moves that take advantage of obtaining the actual status effect + const hasStatusMoves = [MoveId.FACADE, MoveId.PSYCHO_SHIFT].some(m => moveset.includes(m)); + // Moves that take advantage of being able to give the target a status orb + // TODO: Take moves (Trick, Fling, Switcheroo) from comment when they are implemented + const hasItemMoves = [ + /* MoveId.TRICK, MoveId.FLING, MoveId.SWITCHEROO */ + ].some(m => moveset.includes(m)); + + if (canSetStatus) { + // Abilities that take advantage of obtaining the actual status effect, separated based on specificity to the orb + const hasGeneralAbility = [ + AbilityId.QUICK_FEET, + AbilityId.GUTS, + AbilityId.MARVEL_SCALE, + AbilityId.MAGIC_GUARD, + ].some(a => p.hasAbility(a, false, true)); + const hasSpecificAbility = [AbilityId.TOXIC_BOOST, AbilityId.POISON_HEAL].some(a => + p.hasAbility(a, false, true), + ); + const hasOppositeAbility = [AbilityId.FLARE_BOOST].some(a => p.hasAbility(a, false, true)); + + return hasSpecificAbility || (hasGeneralAbility && !hasOppositeAbility) || hasStatusMoves; + } + return hasItemMoves; + } + + return false; + }) + ? 10 + : 0; + }, + 10, + ), + new WeightedModifierType( + modifierTypes.FLAME_ORB, + (party: Pokemon[]) => { + return party.some(p => { + const isHoldingOrb = p.getHeldItems().some(i => i.type.id === "FLAME_ORB" || i.type.id === "TOXIC_ORB"); + + if (!isHoldingOrb) { + const moveset = p + .getMoveset(true) + .filter(m => !isNullOrUndefined(m)) + .map(m => m.moveId); + const canSetStatus = p.canSetStatus(StatusEffect.BURN, true, true, null, true); + + // Moves that take advantage of obtaining the actual status effect + const hasStatusMoves = [MoveId.FACADE, MoveId.PSYCHO_SHIFT].some(m => moveset.includes(m)); + // Moves that take advantage of being able to give the target a status orb + // TODO: Take moves (Trick, Fling, Switcheroo) from comment when they are implemented + const hasItemMoves = [ + /* MoveId.TRICK, MoveId.FLING, MoveId.SWITCHEROO */ + ].some(m => moveset.includes(m)); + + if (canSetStatus) { + // Abilities that take advantage of obtaining the actual status effect, separated based on specificity to the orb + const hasGeneralAbility = [ + AbilityId.QUICK_FEET, + AbilityId.GUTS, + AbilityId.MARVEL_SCALE, + AbilityId.MAGIC_GUARD, + ].some(a => p.hasAbility(a, false, true)); + const hasSpecificAbility = [AbilityId.FLARE_BOOST].some(a => p.hasAbility(a, false, true)); + const hasOppositeAbility = [AbilityId.TOXIC_BOOST, AbilityId.POISON_HEAL].some(a => + p.hasAbility(a, false, true), + ); + + return hasSpecificAbility || (hasGeneralAbility && !hasOppositeAbility) || hasStatusMoves; + } + return hasItemMoves; + } + + return false; + }) + ? 10 + : 0; + }, + 10, + ), + new WeightedModifierType( + modifierTypes.MYSTICAL_ROCK, + (party: Pokemon[]) => { + return party.some(p => { + let isHoldingMax = false; + for (const i of p.getHeldItems()) { + if (i.type.id === "MYSTICAL_ROCK") { + isHoldingMax = i.getStackCount() === i.getMaxStackCount(); + break; + } + } + + if (!isHoldingMax) { + const moveset = p.getMoveset(true).map(m => m.moveId); + + const hasAbility = [ + AbilityId.DROUGHT, + AbilityId.ORICHALCUM_PULSE, + AbilityId.DRIZZLE, + AbilityId.SAND_STREAM, + AbilityId.SAND_SPIT, + AbilityId.SNOW_WARNING, + AbilityId.ELECTRIC_SURGE, + AbilityId.HADRON_ENGINE, + AbilityId.PSYCHIC_SURGE, + AbilityId.GRASSY_SURGE, + AbilityId.SEED_SOWER, + AbilityId.MISTY_SURGE, + ].some(a => p.hasAbility(a, false, true)); + + const hasMoves = [ + MoveId.SUNNY_DAY, + MoveId.RAIN_DANCE, + MoveId.SANDSTORM, + MoveId.SNOWSCAPE, + MoveId.HAIL, + MoveId.CHILLY_RECEPTION, + MoveId.ELECTRIC_TERRAIN, + MoveId.PSYCHIC_TERRAIN, + MoveId.GRASSY_TERRAIN, + MoveId.MISTY_TERRAIN, + ].some(m => moveset.includes(m)); + + return hasAbility || hasMoves; + } + return false; + }) + ? 10 + : 0; + }, + 10, + ), + new WeightedModifierType(modifierTypes.REVIVER_SEED, 4), + new WeightedModifierType(modifierTypes.CANDY_JAR, skipInLastClassicWaveOrDefault(5)), + new WeightedModifierType(modifierTypes.ATTACK_TYPE_BOOSTER, 9), + new WeightedModifierType(modifierTypes.TM_ULTRA, 11), + new WeightedModifierType(modifierTypes.RARER_CANDY, 4), + new WeightedModifierType(modifierTypes.GOLDEN_PUNCH, skipInLastClassicWaveOrDefault(2)), + new WeightedModifierType(modifierTypes.IV_SCANNER, skipInLastClassicWaveOrDefault(4)), + new WeightedModifierType(modifierTypes.EXP_CHARM, skipInLastClassicWaveOrDefault(8)), + new WeightedModifierType(modifierTypes.EXP_SHARE, skipInLastClassicWaveOrDefault(10)), + new WeightedModifierType( + modifierTypes.TERA_ORB, + () => + !globalScene.gameMode.isClassic + ? Math.min(Math.max(Math.floor(globalScene.currentBattle.waveIndex / 50) * 2, 1), 4) + : 0, + 4, + ), + new WeightedModifierType(modifierTypes.QUICK_CLAW, 3), + new WeightedModifierType(modifierTypes.WIDE_LENS, 7), + ].map(m => { + m.setTier(ModifierTier.ULTRA); + return m; + }); +} + +function initRogueModifierPool() { + modifierPool[ModifierTier.ROGUE] = [ + new WeightedModifierType(modifierTypes.ROGUE_BALL, () => (hasMaximumBalls(PokeballType.ROGUE_BALL) ? 0 : 16), 16), + new WeightedModifierType(modifierTypes.RELIC_GOLD, skipInLastClassicWaveOrDefault(2)), + new WeightedModifierType(modifierTypes.LEFTOVERS, 3), + new WeightedModifierType(modifierTypes.SHELL_BELL, 3), + new WeightedModifierType(modifierTypes.BERRY_POUCH, 4), + new WeightedModifierType(modifierTypes.GRIP_CLAW, 5), + new WeightedModifierType(modifierTypes.SCOPE_LENS, 4), + new WeightedModifierType(modifierTypes.BATON, 2), + new WeightedModifierType(modifierTypes.SOUL_DEW, 7), + new WeightedModifierType(modifierTypes.CATCHING_CHARM, () => (!globalScene.gameMode.isClassic ? 4 : 0), 4), + new WeightedModifierType(modifierTypes.ABILITY_CHARM, skipInClassicAfterWave(189, 6)), + new WeightedModifierType(modifierTypes.FOCUS_BAND, 5), + new WeightedModifierType(modifierTypes.KINGS_ROCK, 3), + new WeightedModifierType(modifierTypes.LOCK_CAPSULE, () => (globalScene.gameMode.isClassic ? 0 : 3)), + new WeightedModifierType(modifierTypes.SUPER_EXP_CHARM, skipInLastClassicWaveOrDefault(8)), + new WeightedModifierType( + modifierTypes.RARE_FORM_CHANGE_ITEM, + () => Math.min(Math.ceil(globalScene.currentBattle.waveIndex / 50), 4) * 6, + 24, + ), + new WeightedModifierType( + modifierTypes.MEGA_BRACELET, + () => Math.min(Math.ceil(globalScene.currentBattle.waveIndex / 50), 4) * 9, + 36, + ), + new WeightedModifierType( + modifierTypes.DYNAMAX_BAND, + () => Math.min(Math.ceil(globalScene.currentBattle.waveIndex / 50), 4) * 9, + 36, + ), + new WeightedModifierType( + modifierTypes.VOUCHER_PLUS, + (_party: Pokemon[], rerollCount: number) => + !globalScene.gameMode.isDaily ? Math.max(3 - rerollCount * 1, 0) : 0, + 3, + ), + ].map(m => { + m.setTier(ModifierTier.ROGUE); + return m; + }); +} + +/** + * Initialize the Master modifier pool + */ +function initMasterModifierPool() { + modifierPool[ModifierTier.MASTER] = [ + new WeightedModifierType(modifierTypes.MASTER_BALL, () => (hasMaximumBalls(PokeballType.MASTER_BALL) ? 0 : 24), 24), + new WeightedModifierType(modifierTypes.SHINY_CHARM, 14), + new WeightedModifierType(modifierTypes.HEALING_CHARM, 18), + new WeightedModifierType(modifierTypes.MULTI_LENS, 18), + new WeightedModifierType( + modifierTypes.VOUCHER_PREMIUM, + (_party: Pokemon[], rerollCount: number) => + !globalScene.gameMode.isDaily && !globalScene.gameMode.isEndless && !globalScene.gameMode.isSplicedOnly + ? Math.max(5 - rerollCount * 2, 0) + : 0, + 5, + ), + new WeightedModifierType( + modifierTypes.DNA_SPLICERS, + (party: Pokemon[]) => + !(globalScene.gameMode.isClassic && timedEventManager.areFusionsBoosted()) && + !globalScene.gameMode.isSplicedOnly && + party.filter(p => !p.fusionSpecies).length > 1 + ? 24 + : 0, + 24, + ), + new WeightedModifierType( + modifierTypes.MINI_BLACK_HOLE, + () => + globalScene.gameMode.isDaily || + (!globalScene.gameMode.isFreshStartChallenge() && globalScene.gameData.isUnlocked(Unlockables.MINI_BLACK_HOLE)) + ? 1 + : 0, + 1, + ), + ].map(m => { + m.setTier(ModifierTier.MASTER); + return m; + }); +} + +function initTrainerModifierPool() { + trainerModifierPool[ModifierTier.COMMON] = [ + new WeightedModifierType(modifierTypes.BERRY, 8), + new WeightedModifierType(modifierTypes.BASE_STAT_BOOSTER, 3), + ].map(m => { + m.setTier(ModifierTier.COMMON); + return m; + }); + trainerModifierPool[ModifierTier.GREAT] = [new WeightedModifierType(modifierTypes.BASE_STAT_BOOSTER, 3)].map(m => { + m.setTier(ModifierTier.GREAT); + return m; + }); + trainerModifierPool[ModifierTier.ULTRA] = [ + new WeightedModifierType(modifierTypes.ATTACK_TYPE_BOOSTER, 10), + new WeightedModifierType(modifierTypes.WHITE_HERB, 0), + ].map(m => { + m.setTier(ModifierTier.ULTRA); + return m; + }); + trainerModifierPool[ModifierTier.ROGUE] = [ + new WeightedModifierType(modifierTypes.FOCUS_BAND, 2), + new WeightedModifierType(modifierTypes.LUCKY_EGG, 4), + new WeightedModifierType(modifierTypes.QUICK_CLAW, 1), + new WeightedModifierType(modifierTypes.GRIP_CLAW, 1), + new WeightedModifierType(modifierTypes.WIDE_LENS, 1), + ].map(m => { + m.setTier(ModifierTier.ROGUE); + return m; + }); + trainerModifierPool[ModifierTier.MASTER] = [ + new WeightedModifierType(modifierTypes.KINGS_ROCK, 1), + new WeightedModifierType(modifierTypes.LEFTOVERS, 1), + new WeightedModifierType(modifierTypes.SHELL_BELL, 1), + new WeightedModifierType(modifierTypes.SCOPE_LENS, 1), + ].map(m => { + m.setTier(ModifierTier.MASTER); + return m; + }); +} + +/** + * Initialize the enemy buff modifier pool + */ +function initEnemyBuffModifierPool() { + enemyBuffModifierPool[ModifierTier.COMMON] = [ + new WeightedModifierType(modifierTypes.ENEMY_DAMAGE_BOOSTER, 9), + new WeightedModifierType(modifierTypes.ENEMY_DAMAGE_REDUCTION, 9), + new WeightedModifierType(modifierTypes.ENEMY_ATTACK_POISON_CHANCE, 3), + new WeightedModifierType(modifierTypes.ENEMY_ATTACK_PARALYZE_CHANCE, 3), + new WeightedModifierType(modifierTypes.ENEMY_ATTACK_BURN_CHANCE, 3), + new WeightedModifierType(modifierTypes.ENEMY_STATUS_EFFECT_HEAL_CHANCE, 9), + new WeightedModifierType(modifierTypes.ENEMY_ENDURE_CHANCE, 4), + new WeightedModifierType(modifierTypes.ENEMY_FUSED_CHANCE, 1), + ].map(m => { + m.setTier(ModifierTier.COMMON); + return m; + }); + enemyBuffModifierPool[ModifierTier.GREAT] = [ + new WeightedModifierType(modifierTypes.ENEMY_DAMAGE_BOOSTER, 5), + new WeightedModifierType(modifierTypes.ENEMY_DAMAGE_REDUCTION, 5), + new WeightedModifierType(modifierTypes.ENEMY_STATUS_EFFECT_HEAL_CHANCE, 5), + new WeightedModifierType(modifierTypes.ENEMY_ENDURE_CHANCE, 5), + new WeightedModifierType(modifierTypes.ENEMY_FUSED_CHANCE, 1), + ].map(m => { + m.setTier(ModifierTier.GREAT); + return m; + }); + enemyBuffModifierPool[ModifierTier.ULTRA] = [ + new WeightedModifierType(modifierTypes.ENEMY_DAMAGE_BOOSTER, 10), + new WeightedModifierType(modifierTypes.ENEMY_DAMAGE_REDUCTION, 10), + new WeightedModifierType(modifierTypes.ENEMY_HEAL, 10), + new WeightedModifierType(modifierTypes.ENEMY_STATUS_EFFECT_HEAL_CHANCE, 10), + new WeightedModifierType(modifierTypes.ENEMY_ENDURE_CHANCE, 10), + new WeightedModifierType(modifierTypes.ENEMY_FUSED_CHANCE, 5), + ].map(m => { + m.setTier(ModifierTier.ULTRA); + return m; + }); + enemyBuffModifierPool[ModifierTier.ROGUE] = [].map((m: WeightedModifierType) => { + m.setTier(ModifierTier.ROGUE); + return m; + }); + enemyBuffModifierPool[ModifierTier.MASTER] = [].map((m: WeightedModifierType) => { + m.setTier(ModifierTier.MASTER); + return m; + }); +} + +/** + * Initialize the daily starter modifier pool + */ +function initDailyStarterModifierPool() { + dailyStarterModifierPool[ModifierTier.COMMON] = [ + new WeightedModifierType(modifierTypes.BASE_STAT_BOOSTER, 1), + new WeightedModifierType(modifierTypes.BERRY, 3), + ].map(m => { + m.setTier(ModifierTier.COMMON); + return m; + }); + dailyStarterModifierPool[ModifierTier.GREAT] = [new WeightedModifierType(modifierTypes.ATTACK_TYPE_BOOSTER, 5)].map( + m => { + m.setTier(ModifierTier.GREAT); + return m; + }, + ); + dailyStarterModifierPool[ModifierTier.ULTRA] = [ + new WeightedModifierType(modifierTypes.REVIVER_SEED, 4), + new WeightedModifierType(modifierTypes.SOOTHE_BELL, 1), + new WeightedModifierType(modifierTypes.SOUL_DEW, 1), + new WeightedModifierType(modifierTypes.GOLDEN_PUNCH, 1), + ].map(m => { + m.setTier(ModifierTier.ULTRA); + return m; + }); + dailyStarterModifierPool[ModifierTier.ROGUE] = [ + new WeightedModifierType(modifierTypes.GRIP_CLAW, 5), + new WeightedModifierType(modifierTypes.BATON, 2), + new WeightedModifierType(modifierTypes.FOCUS_BAND, 5), + new WeightedModifierType(modifierTypes.QUICK_CLAW, 3), + new WeightedModifierType(modifierTypes.KINGS_ROCK, 3), + ].map(m => { + m.setTier(ModifierTier.ROGUE); + return m; + }); + dailyStarterModifierPool[ModifierTier.MASTER] = [ + new WeightedModifierType(modifierTypes.LEFTOVERS, 1), + new WeightedModifierType(modifierTypes.SHELL_BELL, 1), + ].map(m => { + m.setTier(ModifierTier.MASTER); + return m; + }); +} + +/** + * Initialize {@linkcode modifierPool} with the initial set of modifier types. + * {@linkcode initModifierTypes} MUST be called before this function. + */ +export function initModifierPools() { + // The modifier pools the player chooses from during modifier selection + initCommonModifierPool(); + initGreatModifierPool(); + initUltraModifierPool(); + initRogueModifierPool(); + initMasterModifierPool(); + + // Modifier pools for specific scenarios + initWildModifierPool(); + initTrainerModifierPool(); + initEnemyBuffModifierPool(); + initDailyStarterModifierPool(); +} + +/** + * High order function that returns a WeightedModifierTypeWeightFunc that will only be applied on + * classic and skip an ModifierType if current wave is greater or equal to the one passed down + * @param wave - Wave where we should stop showing the modifier + * @param defaultWeight - ModifierType default weight + * @returns A WeightedModifierTypeWeightFunc + */ +function skipInClassicAfterWave(wave: number, defaultWeight: number): WeightedModifierTypeWeightFunc { + return () => { + const gameMode = globalScene.gameMode; + const currentWave = globalScene.currentBattle.waveIndex; + return gameMode.isClassic && currentWave >= wave ? 0 : defaultWeight; + }; +} + +/** + * High order function that returns a WeightedModifierTypeWeightFunc that will only be applied on + * classic and it will skip a ModifierType if it is the last wave pull. + * @param defaultWeight ModifierType default weight + * @returns A WeightedModifierTypeWeightFunc + */ +function skipInLastClassicWaveOrDefault(defaultWeight: number): WeightedModifierTypeWeightFunc { + return skipInClassicAfterWave(199, defaultWeight); +} + +/** + * High order function that returns a WeightedModifierTypeWeightFunc to ensure Lures don't spawn on Classic 199 + * or if the lure still has over 60% of its duration left + * @param maxBattles The max battles the lure type in question lasts. 10 for green, 15 for Super, 30 for Max + * @param weight The desired weight for the lure when it does spawn + * @returns A WeightedModifierTypeWeightFunc + */ +function lureWeightFunc(maxBattles: number, weight: number): WeightedModifierTypeWeightFunc { + return () => { + const lures = globalScene.getModifiers(DoubleBattleChanceBoosterModifier); + return !(globalScene.gameMode.isClassic && globalScene.currentBattle.waveIndex === 199) && + (lures.length === 0 || + lures.filter(m => m.getMaxBattles() === maxBattles && m.getBattleCount() >= maxBattles * 0.6).length === 0) + ? weight + : 0; + }; +} + +/** + * Used to check if the player has max of a given ball type in Classic + * @param ballType The {@linkcode PokeballType} being checked + * @returns boolean: true if the player has the maximum of a given ball type + */ +function hasMaximumBalls(ballType: PokeballType): boolean { + return globalScene.gameMode.isClassic && globalScene.pokeballCounts[ballType] >= MAX_PER_TYPE_POKEBALLS; +} diff --git a/src/modifier/modifier-pools.ts b/src/modifier/modifier-pools.ts new file mode 100644 index 00000000000..3396dca1f93 --- /dev/null +++ b/src/modifier/modifier-pools.ts @@ -0,0 +1,16 @@ +/** + * Contains modifier pools for different contexts in the game. + * Can be safely imported without worrying about circular dependencies. + */ + +import type { ModifierPool } from "#app/@types/modifier-types"; + +export const modifierPool: ModifierPool = {}; + +export const wildModifierPool: ModifierPool = {}; + +export const trainerModifierPool: ModifierPool = {}; + +export const enemyBuffModifierPool: ModifierPool = {}; + +export const dailyStarterModifierPool: ModifierPool = {}; diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index b37ed7dea3b..2c848c69e18 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -2,9 +2,9 @@ import { globalScene } from "#app/global-scene"; import { EvolutionItem, pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { tmPoolTiers, tmSpecies } from "#app/data/balance/tms"; import { getBerryEffectDescription, getBerryName } from "#app/data/berry"; -import { allMoves } from "#app/data/data-lists"; +import { allMoves, modifierTypes } from "#app/data/data-lists"; import { getNatureName, getNatureStatMultiplier } from "#app/data/nature"; -import { getPokeballCatchMultiplier, getPokeballName, MAX_PER_TYPE_POKEBALLS } from "#app/data/pokeball"; +import { getPokeballCatchMultiplier, getPokeballName } from "#app/data/pokeball"; import { pokemonFormChanges, SpeciesFormChangeCondition } from "#app/data/pokemon-forms"; import { SpeciesFormChangeItemTrigger } from "#app/data/pokemon-forms/form-change-triggers"; import { FormChangeItem } from "#enums/form-change-item"; @@ -97,9 +97,8 @@ import { CriticalCatchChanceBoosterModifier, FieldEffectModifier, } from "#app/modifier/modifier"; -import { ModifierTier } from "#app/modifier/modifier-tier"; +import { ModifierTier } from "#enums/modifier-tier"; import Overrides from "#app/overrides"; -import { Unlockables } from "#app/system/unlockables"; import { getVoucherTypeIcon, getVoucherTypeName, VoucherType } from "#app/system/voucher"; import type { PokemonMoveSelectFilter, PokemonSelectFilter } from "#app/ui/party-ui-handler"; import PartyUiHandler from "#app/ui/party-ui-handler"; @@ -113,7 +112,6 @@ import { padInt, randSeedInt, } from "#app/utils/common"; -import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; import { BerryType } from "#enums/berry-type"; import { MoveId } from "#enums/move-id"; @@ -127,18 +125,13 @@ import { StatusEffect } from "#enums/status-effect"; import i18next from "i18next"; import { timedEventManager } from "#app/global-event-manager"; import { TYPE_BOOST_ITEM_BOOST_PERCENT } from "#app/constants"; +import { ModifierPoolType } from "#enums/modifier-pool-type"; +import { getModifierPoolForType, getModifierType } from "#app/utils/modifier-utils"; +import type { ModifierTypeFunc, WeightedModifierTypeWeightFunc } from "#app/@types/modifier-types"; const outputModifierData = false; const useMaxWeightForOutput = false; -export enum ModifierPoolType { - PLAYER, - WILD, - TRAINER, - ENEMY_BUFF, - DAILY_STARTER, -} - type NewModifierFunc = (type: ModifierType, args: any[]) => Modifier; export class ModifierType { @@ -150,6 +143,19 @@ export class ModifierType { public tier: ModifierTier; protected newModifierFunc: NewModifierFunc | null; + /** + * Checks if the modifier type is of a specific type + * @param modifierType - The type to check against + * @return Whether the modifier type is of the specified type + */ + public is(modifierType: K): this is ModifierTypeInstanceMap[K] { + const targetType = ModifierTypeConstructorMap[modifierType]; + if (!targetType) { + return false; + } + return this instanceof targetType; + } + constructor( localeKey: string | null, iconImage: string | null, @@ -218,7 +224,7 @@ export class ModifierType { * @param func */ withIdFromFunc(func: ModifierTypeFunc): ModifierType { - this.id = Object.keys(modifierTypes).find(k => modifierTypes[k] === func)!; // TODO: is this bang correct? + this.id = Object.keys(modifierTypeInitObj).find(k => modifierTypeInitObj[k] === func)!; // TODO: is this bang correct? return this; } @@ -299,7 +305,7 @@ export interface GeneratedPersistentModifierType { getPregenArgs(): any[]; } -class AddPokeballModifierType extends ModifierType { +export class AddPokeballModifierType extends ModifierType { private pokeballType: PokeballType; private count: number; @@ -329,7 +335,7 @@ class AddPokeballModifierType extends ModifierType { } } -class AddVoucherModifierType extends ModifierType { +export class AddVoucherModifierType extends ModifierType { private voucherType: VoucherType; private count: number; @@ -1631,7 +1637,7 @@ class EvolutionItemModifierTypeGenerator extends ModifierTypeGenerator { } } -class FormChangeItemModifierTypeGenerator extends ModifierTypeGenerator { +export class FormChangeItemModifierTypeGenerator extends ModifierTypeGenerator { constructor(isRareFormChangeItem: boolean) { super((party: Pokemon[], pregenArgs?: any[]) => { if (pregenArgs && pregenArgs.length === 1 && pregenArgs[0] in FormChangeItem) { @@ -1794,52 +1800,7 @@ export class EnemyEndureChanceModifierType extends ModifierType { } } -export type ModifierTypeFunc = () => ModifierType; -type WeightedModifierTypeWeightFunc = (party: Pokemon[], rerollCount?: number) => number; - -/** - * High order function that returns a WeightedModifierTypeWeightFunc that will only be applied on - * classic and skip an ModifierType if current wave is greater or equal to the one passed down - * @param wave - Wave where we should stop showing the modifier - * @param defaultWeight - ModifierType default weight - * @returns A WeightedModifierTypeWeightFunc - */ -function skipInClassicAfterWave(wave: number, defaultWeight: number): WeightedModifierTypeWeightFunc { - return () => { - const gameMode = globalScene.gameMode; - const currentWave = globalScene.currentBattle.waveIndex; - return gameMode.isClassic && currentWave >= wave ? 0 : defaultWeight; - }; -} - -/** - * High order function that returns a WeightedModifierTypeWeightFunc that will only be applied on - * classic and it will skip a ModifierType if it is the last wave pull. - * @param defaultWeight ModifierType default weight - * @returns A WeightedModifierTypeWeightFunc - */ -function skipInLastClassicWaveOrDefault(defaultWeight: number): WeightedModifierTypeWeightFunc { - return skipInClassicAfterWave(199, defaultWeight); -} - -/** - * High order function that returns a WeightedModifierTypeWeightFunc to ensure Lures don't spawn on Classic 199 - * or if the lure still has over 60% of its duration left - * @param maxBattles The max battles the lure type in question lasts. 10 for green, 15 for Super, 30 for Max - * @param weight The desired weight for the lure when it does spawn - * @returns A WeightedModifierTypeWeightFunc - */ -function lureWeightFunc(maxBattles: number, weight: number): WeightedModifierTypeWeightFunc { - return () => { - const lures = globalScene.getModifiers(DoubleBattleChanceBoosterModifier); - return !(globalScene.gameMode.isClassic && globalScene.currentBattle.waveIndex === 199) && - (lures.length === 0 || - lures.filter(m => m.getMaxBattles() === maxBattles && m.getBattleCount() >= maxBattles * 0.6).length === 0) - ? weight - : 0; - }; -} -class WeightedModifierType { +export class WeightedModifierType { public modifierType: ModifierType; public weight: number | WeightedModifierTypeWeightFunc; public maxWeight: number | WeightedModifierTypeWeightFunc; @@ -1850,7 +1811,7 @@ class WeightedModifierType { maxWeight?: number | WeightedModifierTypeWeightFunc, ) { this.modifierType = modifierTypeFunc(); - this.modifierType.id = Object.keys(modifierTypes).find(k => modifierTypes[k] === modifierTypeFunc)!; // TODO: is this bang correct? + this.modifierType.id = Object.keys(modifierTypeInitObj).find(k => modifierTypeInitObj[k] === modifierTypeFunc)!; // TODO: is this bang correct? this.weight = weight; this.maxWeight = maxWeight || (!(weight instanceof Function) ? weight : 0); } @@ -1870,39 +1831,39 @@ export type GeneratorModifierOverride = { count?: number; } & ( | { - name: keyof Pick; + name: keyof Pick; type?: SpeciesStatBoosterItem; } | { - name: keyof Pick; + name: keyof Pick; type?: TempBattleStat; } | { - name: keyof Pick; + name: keyof Pick; type?: Stat; } | { - name: keyof Pick; + name: keyof Pick; type?: Nature; } | { - name: keyof Pick; + name: keyof Pick; type?: PokemonType; } | { - name: keyof Pick; + name: keyof Pick; type?: BerryType; } | { - name: keyof Pick; + name: keyof Pick; type?: EvolutionItem; } | { - name: keyof Pick; + name: keyof Pick; type?: FormChangeItem; } | { - name: keyof Pick; + name: keyof Pick; type?: MoveId; } ); @@ -1910,9 +1871,9 @@ export type GeneratorModifierOverride = { /** Type used to construct modifiers and held items for overriding purposes. */ export type ModifierOverride = GeneratorModifierOverride | BaseModifierOverride; -export type ModifierTypeKeys = keyof typeof modifierTypes; +export type ModifierTypeKeys = keyof typeof modifierTypeInitObj; -export const modifierTypes = { +const modifierTypeInitObj = Object.freeze({ POKEBALL: () => new AddPokeballModifierType("pb", PokeballType.POKEBALL, 5), GREAT_BALL: () => new AddPokeballModifierType("gb", PokeballType.GREAT_BALL, 5), ULTRA_BALL: () => new AddPokeballModifierType("ub", PokeballType.ULTRA_BALL, 5), @@ -2421,748 +2382,18 @@ export const modifierTypes = { "golden_net", (type, _args) => new BoostBugSpawnModifier(type), ), -}; +}); -interface ModifierPool { +/** + * The initial set of modifier types, used to generate the modifier pool. + */ +export type ModifierTypes = typeof modifierTypeInitObj; + +export interface ModifierPool { [tier: string]: WeightedModifierType[]; } -/** - * Used to check if the player has max of a given ball type in Classic - * @param ballType The {@linkcode PokeballType} being checked - * @returns boolean: true if the player has the maximum of a given ball type - */ -function hasMaximumBalls(ballType: PokeballType): boolean { - return globalScene.gameMode.isClassic && globalScene.pokeballCounts[ballType] >= MAX_PER_TYPE_POKEBALLS; -} - -const modifierPool: ModifierPool = { - [ModifierTier.COMMON]: [ - new WeightedModifierType(modifierTypes.POKEBALL, () => (hasMaximumBalls(PokeballType.POKEBALL) ? 0 : 6), 6), - new WeightedModifierType(modifierTypes.RARE_CANDY, 2), - new WeightedModifierType( - modifierTypes.POTION, - (party: Pokemon[]) => { - const thresholdPartyMemberCount = Math.min( - party.filter(p => p.getInverseHp() >= 10 && p.getHpRatio() <= 0.875 && !p.isFainted()).length, - 3, - ); - return thresholdPartyMemberCount * 3; - }, - 9, - ), - new WeightedModifierType( - modifierTypes.SUPER_POTION, - (party: Pokemon[]) => { - const thresholdPartyMemberCount = Math.min( - party.filter(p => p.getInverseHp() >= 25 && p.getHpRatio() <= 0.75 && !p.isFainted()).length, - 3, - ); - return thresholdPartyMemberCount; - }, - 3, - ), - new WeightedModifierType( - modifierTypes.ETHER, - (party: Pokemon[]) => { - const thresholdPartyMemberCount = Math.min( - party.filter( - p => - p.hp && - !p.getHeldItems().some(m => m instanceof BerryModifier && m.berryType === BerryType.LEPPA) && - p - .getMoveset() - .filter(m => m.ppUsed && m.getMovePp() - m.ppUsed <= 5 && m.ppUsed > Math.floor(m.getMovePp() / 2)) - .length, - ).length, - 3, - ); - return thresholdPartyMemberCount * 3; - }, - 9, - ), - new WeightedModifierType( - modifierTypes.MAX_ETHER, - (party: Pokemon[]) => { - const thresholdPartyMemberCount = Math.min( - party.filter( - p => - p.hp && - !p.getHeldItems().some(m => m instanceof BerryModifier && m.berryType === BerryType.LEPPA) && - p - .getMoveset() - .filter(m => m.ppUsed && m.getMovePp() - m.ppUsed <= 5 && m.ppUsed > Math.floor(m.getMovePp() / 2)) - .length, - ).length, - 3, - ); - return thresholdPartyMemberCount; - }, - 3, - ), - new WeightedModifierType(modifierTypes.LURE, lureWeightFunc(10, 2)), - new WeightedModifierType(modifierTypes.TEMP_STAT_STAGE_BOOSTER, 4), - new WeightedModifierType(modifierTypes.BERRY, 2), - new WeightedModifierType(modifierTypes.TM_COMMON, 2), - ].map(m => { - m.setTier(ModifierTier.COMMON); - return m; - }), - [ModifierTier.GREAT]: [ - new WeightedModifierType(modifierTypes.GREAT_BALL, () => (hasMaximumBalls(PokeballType.GREAT_BALL) ? 0 : 6), 6), - new WeightedModifierType(modifierTypes.PP_UP, 2), - new WeightedModifierType( - modifierTypes.FULL_HEAL, - (party: Pokemon[]) => { - const statusEffectPartyMemberCount = Math.min( - party.filter( - p => - p.hp && - !!p.status && - !p.getHeldItems().some(i => { - if (i instanceof TurnStatusEffectModifier) { - return (i as TurnStatusEffectModifier).getStatusEffect() === p.status?.effect; - } - return false; - }), - ).length, - 3, - ); - return statusEffectPartyMemberCount * 6; - }, - 18, - ), - new WeightedModifierType( - modifierTypes.REVIVE, - (party: Pokemon[]) => { - const faintedPartyMemberCount = Math.min(party.filter(p => p.isFainted()).length, 3); - return faintedPartyMemberCount * 9; - }, - 27, - ), - new WeightedModifierType( - modifierTypes.MAX_REVIVE, - (party: Pokemon[]) => { - const faintedPartyMemberCount = Math.min(party.filter(p => p.isFainted()).length, 3); - return faintedPartyMemberCount * 3; - }, - 9, - ), - new WeightedModifierType( - modifierTypes.SACRED_ASH, - (party: Pokemon[]) => { - return party.filter(p => p.isFainted()).length >= Math.ceil(party.length / 2) ? 1 : 0; - }, - 1, - ), - new WeightedModifierType( - modifierTypes.HYPER_POTION, - (party: Pokemon[]) => { - const thresholdPartyMemberCount = Math.min( - party.filter(p => p.getInverseHp() >= 100 && p.getHpRatio() <= 0.625 && !p.isFainted()).length, - 3, - ); - return thresholdPartyMemberCount * 3; - }, - 9, - ), - new WeightedModifierType( - modifierTypes.MAX_POTION, - (party: Pokemon[]) => { - const thresholdPartyMemberCount = Math.min( - party.filter(p => p.getInverseHp() >= 100 && p.getHpRatio() <= 0.5 && !p.isFainted()).length, - 3, - ); - return thresholdPartyMemberCount; - }, - 3, - ), - new WeightedModifierType( - modifierTypes.FULL_RESTORE, - (party: Pokemon[]) => { - const statusEffectPartyMemberCount = Math.min( - party.filter( - p => - p.hp && - !!p.status && - !p.getHeldItems().some(i => { - if (i instanceof TurnStatusEffectModifier) { - return (i as TurnStatusEffectModifier).getStatusEffect() === p.status?.effect; - } - return false; - }), - ).length, - 3, - ); - const thresholdPartyMemberCount = Math.floor( - (Math.min(party.filter(p => p.getInverseHp() >= 100 && p.getHpRatio() <= 0.5 && !p.isFainted()).length, 3) + - statusEffectPartyMemberCount) / - 2, - ); - return thresholdPartyMemberCount; - }, - 3, - ), - new WeightedModifierType( - modifierTypes.ELIXIR, - (party: Pokemon[]) => { - const thresholdPartyMemberCount = Math.min( - party.filter( - p => - p.hp && - !p.getHeldItems().some(m => m instanceof BerryModifier && m.berryType === BerryType.LEPPA) && - p - .getMoveset() - .filter(m => m.ppUsed && m.getMovePp() - m.ppUsed <= 5 && m.ppUsed > Math.floor(m.getMovePp() / 2)) - .length, - ).length, - 3, - ); - return thresholdPartyMemberCount * 3; - }, - 9, - ), - new WeightedModifierType( - modifierTypes.MAX_ELIXIR, - (party: Pokemon[]) => { - const thresholdPartyMemberCount = Math.min( - party.filter( - p => - p.hp && - !p.getHeldItems().some(m => m instanceof BerryModifier && m.berryType === BerryType.LEPPA) && - p - .getMoveset() - .filter(m => m.ppUsed && m.getMovePp() - m.ppUsed <= 5 && m.ppUsed > Math.floor(m.getMovePp() / 2)) - .length, - ).length, - 3, - ); - return thresholdPartyMemberCount; - }, - 3, - ), - new WeightedModifierType(modifierTypes.DIRE_HIT, 4), - new WeightedModifierType(modifierTypes.SUPER_LURE, lureWeightFunc(15, 4)), - new WeightedModifierType(modifierTypes.NUGGET, skipInLastClassicWaveOrDefault(5)), - new WeightedModifierType(modifierTypes.SPECIES_STAT_BOOSTER, 4), - new WeightedModifierType( - modifierTypes.EVOLUTION_ITEM, - () => { - return Math.min(Math.ceil(globalScene.currentBattle.waveIndex / 15), 8); - }, - 8, - ), - new WeightedModifierType( - modifierTypes.MAP, - () => (globalScene.gameMode.isClassic && globalScene.currentBattle.waveIndex < 180 ? 2 : 0), - 2, - ), - new WeightedModifierType(modifierTypes.SOOTHE_BELL, 2), - new WeightedModifierType(modifierTypes.TM_GREAT, 3), - new WeightedModifierType( - modifierTypes.MEMORY_MUSHROOM, - (party: Pokemon[]) => { - if (!party.find(p => p.getLearnableLevelMoves().length)) { - return 0; - } - const highestPartyLevel = party - .map(p => p.level) - .reduce((highestLevel: number, level: number) => Math.max(highestLevel, level), 1); - return Math.min(Math.ceil(highestPartyLevel / 20), 4); - }, - 4, - ), - new WeightedModifierType(modifierTypes.BASE_STAT_BOOSTER, 3), - new WeightedModifierType(modifierTypes.TERA_SHARD, (party: Pokemon[]) => - party.filter( - p => - !(p.hasSpecies(SpeciesId.TERAPAGOS) || p.hasSpecies(SpeciesId.OGERPON) || p.hasSpecies(SpeciesId.SHEDINJA)), - ).length > 0 - ? 1 - : 0, - ), - new WeightedModifierType( - modifierTypes.DNA_SPLICERS, - (party: Pokemon[]) => { - if (party.filter(p => !p.fusionSpecies).length > 1) { - if (globalScene.gameMode.isSplicedOnly) { - return 4; - } - if (globalScene.gameMode.isClassic && timedEventManager.areFusionsBoosted()) { - return 2; - } - } - return 0; - }, - 4, - ), - new WeightedModifierType( - modifierTypes.VOUCHER, - (_party: Pokemon[], rerollCount: number) => (!globalScene.gameMode.isDaily ? Math.max(1 - rerollCount, 0) : 0), - 1, - ), - ].map(m => { - m.setTier(ModifierTier.GREAT); - return m; - }), - [ModifierTier.ULTRA]: [ - new WeightedModifierType(modifierTypes.ULTRA_BALL, () => (hasMaximumBalls(PokeballType.ULTRA_BALL) ? 0 : 15), 15), - new WeightedModifierType(modifierTypes.MAX_LURE, lureWeightFunc(30, 4)), - new WeightedModifierType(modifierTypes.BIG_NUGGET, skipInLastClassicWaveOrDefault(12)), - new WeightedModifierType(modifierTypes.PP_MAX, 3), - new WeightedModifierType(modifierTypes.MINT, 4), - new WeightedModifierType( - modifierTypes.RARE_EVOLUTION_ITEM, - () => Math.min(Math.ceil(globalScene.currentBattle.waveIndex / 15) * 4, 32), - 32, - ), - new WeightedModifierType( - modifierTypes.FORM_CHANGE_ITEM, - () => Math.min(Math.ceil(globalScene.currentBattle.waveIndex / 50), 4) * 6, - 24, - ), - new WeightedModifierType(modifierTypes.AMULET_COIN, skipInLastClassicWaveOrDefault(3)), - new WeightedModifierType(modifierTypes.EVIOLITE, (party: Pokemon[]) => { - const { gameMode, gameData } = globalScene; - if (gameMode.isDaily || (!gameMode.isFreshStartChallenge() && gameData.isUnlocked(Unlockables.EVIOLITE))) { - return party.some(p => { - // Check if Pokemon's species (or fusion species, if applicable) can evolve or if they're G-Max'd - if ( - !p.isMax() && - (p.getSpeciesForm(true).speciesId in pokemonEvolutions || - (p.isFusion() && p.getFusionSpeciesForm(true).speciesId in pokemonEvolutions)) - ) { - // Check if Pokemon is already holding an Eviolite - return !p.getHeldItems().some(i => i.type.id === "EVIOLITE"); - } - return false; - }) - ? 10 - : 0; - } - return 0; - }), - new WeightedModifierType(modifierTypes.RARE_SPECIES_STAT_BOOSTER, 12), - new WeightedModifierType( - modifierTypes.LEEK, - (party: Pokemon[]) => { - const checkedSpecies = [SpeciesId.FARFETCHD, SpeciesId.GALAR_FARFETCHD, SpeciesId.SIRFETCHD]; - // If a party member doesn't already have a Leek and is one of the relevant species, Leek can appear - return party.some( - p => - !p.getHeldItems().some(i => i instanceof SpeciesCritBoosterModifier) && - (checkedSpecies.includes(p.getSpeciesForm(true).speciesId) || - (p.isFusion() && checkedSpecies.includes(p.getFusionSpeciesForm(true).speciesId))), - ) - ? 12 - : 0; - }, - 12, - ), - new WeightedModifierType( - modifierTypes.TOXIC_ORB, - (party: Pokemon[]) => { - return party.some(p => { - const isHoldingOrb = p.getHeldItems().some(i => i.type.id === "FLAME_ORB" || i.type.id === "TOXIC_ORB"); - - if (!isHoldingOrb) { - const moveset = p - .getMoveset(true) - .filter(m => !isNullOrUndefined(m)) - .map(m => m.moveId); - const canSetStatus = p.canSetStatus(StatusEffect.TOXIC, true, true, null, true); - - // Moves that take advantage of obtaining the actual status effect - const hasStatusMoves = [MoveId.FACADE, MoveId.PSYCHO_SHIFT].some(m => moveset.includes(m)); - // Moves that take advantage of being able to give the target a status orb - // TODO: Take moves (Trick, Fling, Switcheroo) from comment when they are implemented - const hasItemMoves = [ - /* MoveId.TRICK, MoveId.FLING, MoveId.SWITCHEROO */ - ].some(m => moveset.includes(m)); - - if (canSetStatus) { - // Abilities that take advantage of obtaining the actual status effect, separated based on specificity to the orb - const hasGeneralAbility = [ - AbilityId.QUICK_FEET, - AbilityId.GUTS, - AbilityId.MARVEL_SCALE, - AbilityId.MAGIC_GUARD, - ].some(a => p.hasAbility(a, false, true)); - const hasSpecificAbility = [AbilityId.TOXIC_BOOST, AbilityId.POISON_HEAL].some(a => - p.hasAbility(a, false, true), - ); - const hasOppositeAbility = [AbilityId.FLARE_BOOST].some(a => p.hasAbility(a, false, true)); - - return hasSpecificAbility || (hasGeneralAbility && !hasOppositeAbility) || hasStatusMoves; - } - return hasItemMoves; - } - - return false; - }) - ? 10 - : 0; - }, - 10, - ), - new WeightedModifierType( - modifierTypes.FLAME_ORB, - (party: Pokemon[]) => { - return party.some(p => { - const isHoldingOrb = p.getHeldItems().some(i => i.type.id === "FLAME_ORB" || i.type.id === "TOXIC_ORB"); - - if (!isHoldingOrb) { - const moveset = p - .getMoveset(true) - .filter(m => !isNullOrUndefined(m)) - .map(m => m.moveId); - const canSetStatus = p.canSetStatus(StatusEffect.BURN, true, true, null, true); - - // Moves that take advantage of obtaining the actual status effect - const hasStatusMoves = [MoveId.FACADE, MoveId.PSYCHO_SHIFT].some(m => moveset.includes(m)); - // Moves that take advantage of being able to give the target a status orb - // TODO: Take moves (Trick, Fling, Switcheroo) from comment when they are implemented - const hasItemMoves = [ - /* MoveId.TRICK, MoveId.FLING, MoveId.SWITCHEROO */ - ].some(m => moveset.includes(m)); - - if (canSetStatus) { - // Abilities that take advantage of obtaining the actual status effect, separated based on specificity to the orb - const hasGeneralAbility = [ - AbilityId.QUICK_FEET, - AbilityId.GUTS, - AbilityId.MARVEL_SCALE, - AbilityId.MAGIC_GUARD, - ].some(a => p.hasAbility(a, false, true)); - const hasSpecificAbility = [AbilityId.FLARE_BOOST].some(a => p.hasAbility(a, false, true)); - const hasOppositeAbility = [AbilityId.TOXIC_BOOST, AbilityId.POISON_HEAL].some(a => - p.hasAbility(a, false, true), - ); - - return hasSpecificAbility || (hasGeneralAbility && !hasOppositeAbility) || hasStatusMoves; - } - return hasItemMoves; - } - - return false; - }) - ? 10 - : 0; - }, - 10, - ), - new WeightedModifierType( - modifierTypes.MYSTICAL_ROCK, - (party: Pokemon[]) => { - return party.some(p => { - let isHoldingMax = false; - for (const i of p.getHeldItems()) { - if (i.type.id === "MYSTICAL_ROCK") { - isHoldingMax = i.getStackCount() === i.getMaxStackCount(); - break; - } - } - - if (!isHoldingMax) { - const moveset = p.getMoveset(true).map(m => m.moveId); - - const hasAbility = [ - AbilityId.DROUGHT, - AbilityId.ORICHALCUM_PULSE, - AbilityId.DRIZZLE, - AbilityId.SAND_STREAM, - AbilityId.SAND_SPIT, - AbilityId.SNOW_WARNING, - AbilityId.ELECTRIC_SURGE, - AbilityId.HADRON_ENGINE, - AbilityId.PSYCHIC_SURGE, - AbilityId.GRASSY_SURGE, - AbilityId.SEED_SOWER, - AbilityId.MISTY_SURGE, - ].some(a => p.hasAbility(a, false, true)); - - const hasMoves = [ - MoveId.SUNNY_DAY, - MoveId.RAIN_DANCE, - MoveId.SANDSTORM, - MoveId.SNOWSCAPE, - MoveId.HAIL, - MoveId.CHILLY_RECEPTION, - MoveId.ELECTRIC_TERRAIN, - MoveId.PSYCHIC_TERRAIN, - MoveId.GRASSY_TERRAIN, - MoveId.MISTY_TERRAIN, - ].some(m => moveset.includes(m)); - - return hasAbility || hasMoves; - } - return false; - }) - ? 10 - : 0; - }, - 10, - ), - new WeightedModifierType(modifierTypes.REVIVER_SEED, 4), - new WeightedModifierType(modifierTypes.CANDY_JAR, skipInLastClassicWaveOrDefault(5)), - new WeightedModifierType(modifierTypes.ATTACK_TYPE_BOOSTER, 9), - new WeightedModifierType(modifierTypes.TM_ULTRA, 11), - new WeightedModifierType(modifierTypes.RARER_CANDY, 4), - new WeightedModifierType(modifierTypes.GOLDEN_PUNCH, skipInLastClassicWaveOrDefault(2)), - new WeightedModifierType(modifierTypes.IV_SCANNER, skipInLastClassicWaveOrDefault(4)), - new WeightedModifierType(modifierTypes.EXP_CHARM, skipInLastClassicWaveOrDefault(8)), - new WeightedModifierType(modifierTypes.EXP_SHARE, skipInLastClassicWaveOrDefault(10)), - new WeightedModifierType( - modifierTypes.TERA_ORB, - () => - !globalScene.gameMode.isClassic - ? Math.min(Math.max(Math.floor(globalScene.currentBattle.waveIndex / 50) * 2, 1), 4) - : 0, - 4, - ), - new WeightedModifierType(modifierTypes.QUICK_CLAW, 3), - new WeightedModifierType(modifierTypes.WIDE_LENS, 7), - ].map(m => { - m.setTier(ModifierTier.ULTRA); - return m; - }), - [ModifierTier.ROGUE]: [ - new WeightedModifierType(modifierTypes.ROGUE_BALL, () => (hasMaximumBalls(PokeballType.ROGUE_BALL) ? 0 : 16), 16), - new WeightedModifierType(modifierTypes.RELIC_GOLD, skipInLastClassicWaveOrDefault(2)), - new WeightedModifierType(modifierTypes.LEFTOVERS, 3), - new WeightedModifierType(modifierTypes.SHELL_BELL, 3), - new WeightedModifierType(modifierTypes.BERRY_POUCH, 4), - new WeightedModifierType(modifierTypes.GRIP_CLAW, 5), - new WeightedModifierType(modifierTypes.SCOPE_LENS, 4), - new WeightedModifierType(modifierTypes.BATON, 2), - new WeightedModifierType(modifierTypes.SOUL_DEW, 7), - new WeightedModifierType(modifierTypes.CATCHING_CHARM, () => (!globalScene.gameMode.isClassic ? 4 : 0), 4), - new WeightedModifierType(modifierTypes.ABILITY_CHARM, skipInClassicAfterWave(189, 6)), - new WeightedModifierType(modifierTypes.FOCUS_BAND, 5), - new WeightedModifierType(modifierTypes.KINGS_ROCK, 3), - new WeightedModifierType(modifierTypes.LOCK_CAPSULE, () => (globalScene.gameMode.isClassic ? 0 : 3)), - new WeightedModifierType(modifierTypes.SUPER_EXP_CHARM, skipInLastClassicWaveOrDefault(8)), - new WeightedModifierType( - modifierTypes.RARE_FORM_CHANGE_ITEM, - () => Math.min(Math.ceil(globalScene.currentBattle.waveIndex / 50), 4) * 6, - 24, - ), - new WeightedModifierType( - modifierTypes.MEGA_BRACELET, - () => Math.min(Math.ceil(globalScene.currentBattle.waveIndex / 50), 4) * 9, - 36, - ), - new WeightedModifierType( - modifierTypes.DYNAMAX_BAND, - () => Math.min(Math.ceil(globalScene.currentBattle.waveIndex / 50), 4) * 9, - 36, - ), - new WeightedModifierType( - modifierTypes.VOUCHER_PLUS, - (_party: Pokemon[], rerollCount: number) => - !globalScene.gameMode.isDaily ? Math.max(3 - rerollCount * 1, 0) : 0, - 3, - ), - ].map(m => { - m.setTier(ModifierTier.ROGUE); - return m; - }), - [ModifierTier.MASTER]: [ - new WeightedModifierType(modifierTypes.MASTER_BALL, () => (hasMaximumBalls(PokeballType.MASTER_BALL) ? 0 : 24), 24), - new WeightedModifierType(modifierTypes.SHINY_CHARM, 14), - new WeightedModifierType(modifierTypes.HEALING_CHARM, 18), - new WeightedModifierType(modifierTypes.MULTI_LENS, 18), - new WeightedModifierType( - modifierTypes.VOUCHER_PREMIUM, - (_party: Pokemon[], rerollCount: number) => - !globalScene.gameMode.isDaily && !globalScene.gameMode.isEndless && !globalScene.gameMode.isSplicedOnly - ? Math.max(5 - rerollCount * 2, 0) - : 0, - 5, - ), - new WeightedModifierType( - modifierTypes.DNA_SPLICERS, - (party: Pokemon[]) => - !(globalScene.gameMode.isClassic && timedEventManager.areFusionsBoosted()) && - !globalScene.gameMode.isSplicedOnly && - party.filter(p => !p.fusionSpecies).length > 1 - ? 24 - : 0, - 24, - ), - new WeightedModifierType( - modifierTypes.MINI_BLACK_HOLE, - () => - globalScene.gameMode.isDaily || - (!globalScene.gameMode.isFreshStartChallenge() && globalScene.gameData.isUnlocked(Unlockables.MINI_BLACK_HOLE)) - ? 1 - : 0, - 1, - ), - ].map(m => { - m.setTier(ModifierTier.MASTER); - return m; - }), -}; - -const wildModifierPool: ModifierPool = { - [ModifierTier.COMMON]: [new WeightedModifierType(modifierTypes.BERRY, 1)].map(m => { - m.setTier(ModifierTier.COMMON); - return m; - }), - [ModifierTier.GREAT]: [new WeightedModifierType(modifierTypes.BASE_STAT_BOOSTER, 1)].map(m => { - m.setTier(ModifierTier.GREAT); - return m; - }), - [ModifierTier.ULTRA]: [ - new WeightedModifierType(modifierTypes.ATTACK_TYPE_BOOSTER, 10), - new WeightedModifierType(modifierTypes.WHITE_HERB, 0), - ].map(m => { - m.setTier(ModifierTier.ULTRA); - return m; - }), - [ModifierTier.ROGUE]: [new WeightedModifierType(modifierTypes.LUCKY_EGG, 4)].map(m => { - m.setTier(ModifierTier.ROGUE); - return m; - }), - [ModifierTier.MASTER]: [new WeightedModifierType(modifierTypes.GOLDEN_EGG, 1)].map(m => { - m.setTier(ModifierTier.MASTER); - return m; - }), -}; - -const trainerModifierPool: ModifierPool = { - [ModifierTier.COMMON]: [ - new WeightedModifierType(modifierTypes.BERRY, 8), - new WeightedModifierType(modifierTypes.BASE_STAT_BOOSTER, 3), - ].map(m => { - m.setTier(ModifierTier.COMMON); - return m; - }), - [ModifierTier.GREAT]: [new WeightedModifierType(modifierTypes.BASE_STAT_BOOSTER, 3)].map(m => { - m.setTier(ModifierTier.GREAT); - return m; - }), - [ModifierTier.ULTRA]: [ - new WeightedModifierType(modifierTypes.ATTACK_TYPE_BOOSTER, 10), - new WeightedModifierType(modifierTypes.WHITE_HERB, 0), - ].map(m => { - m.setTier(ModifierTier.ULTRA); - return m; - }), - [ModifierTier.ROGUE]: [ - new WeightedModifierType(modifierTypes.FOCUS_BAND, 2), - new WeightedModifierType(modifierTypes.LUCKY_EGG, 4), - new WeightedModifierType(modifierTypes.QUICK_CLAW, 1), - new WeightedModifierType(modifierTypes.GRIP_CLAW, 1), - new WeightedModifierType(modifierTypes.WIDE_LENS, 1), - ].map(m => { - m.setTier(ModifierTier.ROGUE); - return m; - }), - [ModifierTier.MASTER]: [ - new WeightedModifierType(modifierTypes.KINGS_ROCK, 1), - new WeightedModifierType(modifierTypes.LEFTOVERS, 1), - new WeightedModifierType(modifierTypes.SHELL_BELL, 1), - new WeightedModifierType(modifierTypes.SCOPE_LENS, 1), - ].map(m => { - m.setTier(ModifierTier.MASTER); - return m; - }), -}; - -const enemyBuffModifierPool: ModifierPool = { - [ModifierTier.COMMON]: [ - new WeightedModifierType(modifierTypes.ENEMY_DAMAGE_BOOSTER, 9), - new WeightedModifierType(modifierTypes.ENEMY_DAMAGE_REDUCTION, 9), - new WeightedModifierType(modifierTypes.ENEMY_ATTACK_POISON_CHANCE, 3), - new WeightedModifierType(modifierTypes.ENEMY_ATTACK_PARALYZE_CHANCE, 3), - new WeightedModifierType(modifierTypes.ENEMY_ATTACK_BURN_CHANCE, 3), - new WeightedModifierType(modifierTypes.ENEMY_STATUS_EFFECT_HEAL_CHANCE, 9), - new WeightedModifierType(modifierTypes.ENEMY_ENDURE_CHANCE, 4), - new WeightedModifierType(modifierTypes.ENEMY_FUSED_CHANCE, 1), - ].map(m => { - m.setTier(ModifierTier.COMMON); - return m; - }), - [ModifierTier.GREAT]: [ - new WeightedModifierType(modifierTypes.ENEMY_DAMAGE_BOOSTER, 5), - new WeightedModifierType(modifierTypes.ENEMY_DAMAGE_REDUCTION, 5), - new WeightedModifierType(modifierTypes.ENEMY_STATUS_EFFECT_HEAL_CHANCE, 5), - new WeightedModifierType(modifierTypes.ENEMY_ENDURE_CHANCE, 5), - new WeightedModifierType(modifierTypes.ENEMY_FUSED_CHANCE, 1), - ].map(m => { - m.setTier(ModifierTier.GREAT); - return m; - }), - [ModifierTier.ULTRA]: [ - new WeightedModifierType(modifierTypes.ENEMY_DAMAGE_BOOSTER, 10), - new WeightedModifierType(modifierTypes.ENEMY_DAMAGE_REDUCTION, 10), - new WeightedModifierType(modifierTypes.ENEMY_HEAL, 10), - new WeightedModifierType(modifierTypes.ENEMY_STATUS_EFFECT_HEAL_CHANCE, 10), - new WeightedModifierType(modifierTypes.ENEMY_ENDURE_CHANCE, 10), - new WeightedModifierType(modifierTypes.ENEMY_FUSED_CHANCE, 5), - ].map(m => { - m.setTier(ModifierTier.ULTRA); - return m; - }), - [ModifierTier.ROGUE]: [].map((m: WeightedModifierType) => { - m.setTier(ModifierTier.ROGUE); - return m; - }), - [ModifierTier.MASTER]: [].map((m: WeightedModifierType) => { - m.setTier(ModifierTier.MASTER); - return m; - }), -}; - -const dailyStarterModifierPool: ModifierPool = { - [ModifierTier.COMMON]: [ - new WeightedModifierType(modifierTypes.BASE_STAT_BOOSTER, 1), - new WeightedModifierType(modifierTypes.BERRY, 3), - ].map(m => { - m.setTier(ModifierTier.COMMON); - return m; - }), - [ModifierTier.GREAT]: [new WeightedModifierType(modifierTypes.ATTACK_TYPE_BOOSTER, 5)].map(m => { - m.setTier(ModifierTier.GREAT); - return m; - }), - [ModifierTier.ULTRA]: [ - new WeightedModifierType(modifierTypes.REVIVER_SEED, 4), - new WeightedModifierType(modifierTypes.SOOTHE_BELL, 1), - new WeightedModifierType(modifierTypes.SOUL_DEW, 1), - new WeightedModifierType(modifierTypes.GOLDEN_PUNCH, 1), - ].map(m => { - m.setTier(ModifierTier.ULTRA); - return m; - }), - [ModifierTier.ROGUE]: [ - new WeightedModifierType(modifierTypes.GRIP_CLAW, 5), - new WeightedModifierType(modifierTypes.BATON, 2), - new WeightedModifierType(modifierTypes.FOCUS_BAND, 5), - new WeightedModifierType(modifierTypes.QUICK_CLAW, 3), - new WeightedModifierType(modifierTypes.KINGS_ROCK, 3), - ].map(m => { - m.setTier(ModifierTier.ROGUE); - return m; - }), - [ModifierTier.MASTER]: [ - new WeightedModifierType(modifierTypes.LEFTOVERS, 1), - new WeightedModifierType(modifierTypes.SHELL_BELL, 1), - ].map(m => { - m.setTier(ModifierTier.MASTER); - return m; - }), -}; - -export function getModifierType(modifierTypeFunc: ModifierTypeFunc): ModifierType { - const modifierType = modifierTypeFunc(); - if (!modifierType.id) { - modifierType.id = Object.keys(modifierTypes).find(k => modifierTypes[k] === modifierTypeFunc)!; // TODO: is this bang correct? - } - return modifierType; -} +const modifierPool: ModifierPool = {}; let modifierPoolThresholds = {}; let ignoredPoolIndexes = {}; @@ -3179,28 +2410,6 @@ let enemyBuffModifierPoolThresholds = {}; // biome-ignore lint/correctness/noUnusedVariables: TODO explain why this is marked as OK let enemyBuffIgnoredPoolIndexes = {}; -export function getModifierPoolForType(poolType: ModifierPoolType): ModifierPool { - let pool: ModifierPool; - switch (poolType) { - case ModifierPoolType.PLAYER: - pool = modifierPool; - break; - case ModifierPoolType.WILD: - pool = wildModifierPool; - break; - case ModifierPoolType.TRAINER: - pool = trainerModifierPool; - break; - case ModifierPoolType.ENEMY_BUFF: - pool = enemyBuffModifierPool; - break; - case ModifierPoolType.DAILY_STARTER: - pool = dailyStarterModifierPool; - break; - } - return pool; -} - const tierWeights = [768 / 1024, 195 / 1024, 48 / 1024, 12 / 1024, 1 / 1024]; /** * Allows a unit test to check if an item exists in the Modifier Pool. Checks the pool directly, rather than attempting to reroll for the item. @@ -3314,7 +2523,7 @@ export interface CustomModifierSettings { } export function getModifierTypeFuncById(id: string): ModifierTypeFunc { - return modifierTypes[id]; + return modifierTypeInitObj[id]; } /** @@ -3367,12 +2576,12 @@ export function getPlayerModifierTypeOptions( customModifierSettings.guaranteedModifierTypeFuncs.length > 0 ) { customModifierSettings.guaranteedModifierTypeFuncs!.forEach((mod, _i) => { - const modifierId = Object.keys(modifierTypes).find(k => modifierTypes[k] === mod) as string; - let guaranteedMod: ModifierType = modifierTypes[modifierId]?.(); + const modifierId = Object.keys(modifierTypeInitObj).find(k => modifierTypeInitObj[k] === mod) as string; + let guaranteedMod: ModifierType = modifierTypeInitObj[modifierId]?.(); // Populates item id and tier guaranteedMod = guaranteedMod - .withIdFromFunc(modifierTypes[modifierId]) + .withIdFromFunc(modifierTypeInitObj[modifierId]) .withTierFromPool(ModifierPoolType.PLAYER, party); const modType = @@ -3451,7 +2660,7 @@ export function overridePlayerModifierTypeOptions(options: ModifierTypeOption[], const minLength = Math.min(options.length, Overrides.ITEM_REWARD_OVERRIDE.length); for (let i = 0; i < minLength; i++) { const override: ModifierOverride = Overrides.ITEM_REWARD_OVERRIDE[i]; - const modifierFunc = modifierTypes[override.name]; + const modifierFunc = modifierTypeInitObj[override.name]; let modifierType: ModifierType | null = modifierFunc(); if (modifierType instanceof ModifierTypeGenerator) { @@ -3472,29 +2681,29 @@ export function getPlayerShopModifierTypeOptionsForWave(waveIndex: number, baseC const options = [ [ - new ModifierTypeOption(modifierTypes.POTION(), 0, baseCost * 0.2), - new ModifierTypeOption(modifierTypes.ETHER(), 0, baseCost * 0.4), - new ModifierTypeOption(modifierTypes.REVIVE(), 0, baseCost * 2), + new ModifierTypeOption(modifierTypeInitObj.POTION(), 0, baseCost * 0.2), + new ModifierTypeOption(modifierTypeInitObj.ETHER(), 0, baseCost * 0.4), + new ModifierTypeOption(modifierTypeInitObj.REVIVE(), 0, baseCost * 2), ], [ - new ModifierTypeOption(modifierTypes.SUPER_POTION(), 0, baseCost * 0.45), - new ModifierTypeOption(modifierTypes.FULL_HEAL(), 0, baseCost), + new ModifierTypeOption(modifierTypeInitObj.SUPER_POTION(), 0, baseCost * 0.45), + new ModifierTypeOption(modifierTypeInitObj.FULL_HEAL(), 0, baseCost), ], [ - new ModifierTypeOption(modifierTypes.ELIXIR(), 0, baseCost), - new ModifierTypeOption(modifierTypes.MAX_ETHER(), 0, baseCost), + new ModifierTypeOption(modifierTypeInitObj.ELIXIR(), 0, baseCost), + new ModifierTypeOption(modifierTypeInitObj.MAX_ETHER(), 0, baseCost), ], [ - new ModifierTypeOption(modifierTypes.HYPER_POTION(), 0, baseCost * 0.8), - new ModifierTypeOption(modifierTypes.MAX_REVIVE(), 0, baseCost * 2.75), - new ModifierTypeOption(modifierTypes.MEMORY_MUSHROOM(), 0, baseCost * 4), + new ModifierTypeOption(modifierTypeInitObj.HYPER_POTION(), 0, baseCost * 0.8), + new ModifierTypeOption(modifierTypeInitObj.MAX_REVIVE(), 0, baseCost * 2.75), + new ModifierTypeOption(modifierTypeInitObj.MEMORY_MUSHROOM(), 0, baseCost * 4), ], [ - new ModifierTypeOption(modifierTypes.MAX_POTION(), 0, baseCost * 1.5), - new ModifierTypeOption(modifierTypes.MAX_ELIXIR(), 0, baseCost * 2.5), + new ModifierTypeOption(modifierTypeInitObj.MAX_POTION(), 0, baseCost * 1.5), + new ModifierTypeOption(modifierTypeInitObj.MAX_ELIXIR(), 0, baseCost * 2.5), ], - [new ModifierTypeOption(modifierTypes.FULL_RESTORE(), 0, baseCost * 2.25)], - [new ModifierTypeOption(modifierTypes.SACRED_ASH(), 0, baseCost * 10)], + [new ModifierTypeOption(modifierTypeInitObj.FULL_RESTORE(), 0, baseCost * 2.25)], + [new ModifierTypeOption(modifierTypeInitObj.SACRED_ASH(), 0, baseCost * 10)], ]; return options.slice(0, Math.ceil(Math.max(waveIndex + 10, 0) / 30)).flat(); } @@ -3549,7 +2758,7 @@ export function getEnemyModifierTypesForWave( ?.type as PokemonHeldItemModifierType, ); if (!(waveIndex % 1000)) { - ret.push(getModifierType(modifierTypes.MINI_BLACK_HOLE) as PokemonHeldItemModifierType); + ret.push(getModifierType(modifierTypeInitObj.MINI_BLACK_HOLE) as PokemonHeldItemModifierType); } return ret; } @@ -3779,3 +2988,30 @@ export function getLuckTextTint(luckValue: number): number { } return getModifierTierTextTint(modifierTier); } + +export function initModifierTypes() { + for (const [key, value] of Object.entries(modifierTypeInitObj)) { + modifierTypes[key] = value; + } +} + +// TODO: If necessary, add the rest of the modifier types here. +// For now, doing the minimal work until the modifier rework lands. +const ModifierTypeConstructorMap = Object.freeze({ + ModifierTypeGenerator, + PokemonHeldItemModifierType, +}); + +/** + * Map of of modifier type strings to their constructor type + */ +export type ModifierTypeConstructorMap = typeof ModifierTypeConstructorMap; + +/** + * Map of modifier type strings to their instance type + */ +export type ModifierTypeInstanceMap = { + [K in keyof ModifierTypeConstructorMap]: InstanceType; +}; + +export type ModifierTypeString = keyof ModifierTypeConstructorMap; diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index bfea061b1e8..e11f2c07ce8 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -1,12 +1,13 @@ import { FusionSpeciesFormEvolution, pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { getBerryEffectFunc, getBerryPredicate } from "#app/data/berry"; import { getLevelTotalExp } from "#app/data/exp"; -import { allMoves } from "#app/data/data-lists"; +import { allMoves, modifierTypes } from "#app/data/data-lists"; import { MAX_PER_TYPE_POKEBALLS } from "#app/data/pokeball"; import { SpeciesFormChangeItemTrigger } from "#app/data/pokemon-forms/form-change-triggers"; import type { FormChangeItem } from "#enums/form-change-item"; import { getStatusEffectHealText } from "#app/data/status-effect"; -import Pokemon, { type PlayerPokemon } from "#app/field/pokemon"; +import type { PlayerPokemon } from "#app/field/pokemon"; +import type Pokemon from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import Overrides from "#app/overrides"; import { LearnMoveType } from "#enums/learn-move-type"; @@ -24,33 +25,26 @@ import { type PermanentStat, type TempBattleStat, BATTLE_STATS, Stat, TEMP_BATTL import { StatusEffect } from "#enums/status-effect"; import type { PokemonType } from "#enums/pokemon-type"; import i18next from "i18next"; -import { - type DoubleBattleChanceBoosterModifierType, - type EvolutionItemModifierType, - type FormChangeItemModifierType, - type ModifierOverride, - type ModifierType, - type PokemonBaseStatTotalModifierType, - type PokemonExpBoosterModifierType, - type PokemonFriendshipBoosterModifierType, - type PokemonMoveAccuracyBoosterModifierType, - type PokemonMultiHitModifierType, - type TerastallizeModifierType, - type TmModifierType, - getModifierType, - ModifierTypeGenerator, - modifierTypes, - PokemonHeldItemModifierType, +import type { + DoubleBattleChanceBoosterModifierType, + EvolutionItemModifierType, + FormChangeItemModifierType, + ModifierOverride, + ModifierType, + PokemonBaseStatTotalModifierType, + PokemonExpBoosterModifierType, + PokemonFriendshipBoosterModifierType, + PokemonMoveAccuracyBoosterModifierType, + PokemonMultiHitModifierType, + TerastallizeModifierType, + TmModifierType, } from "./modifier-type"; +import { getModifierType } from "#app/utils/modifier-utils"; import { Color, ShadowColor } from "#enums/color"; import { FRIENDSHIP_GAIN_FROM_RARE_CANDY } from "#app/data/balance/starters"; -import { - applyAbAttrs, - applyPostItemLostAbAttrs, - CommanderAbAttr, - PostItemLostAbAttr, -} from "#app/data/abilities/ability"; +import { applyAbAttrs, applyPostItemLostAbAttrs } from "#app/data/abilities/apply-ab-attrs"; import { globalScene } from "#app/global-scene"; +import type { ModifierInstanceMap, ModifierString } from "#app/@types/modifier-types"; export type ModifierPredicate = (modifier: Modifier) => boolean; @@ -164,6 +158,23 @@ export abstract class Modifier { this.type = type; } + /** + * Return whether this modifier is of the given class + * + * @remarks + * Used to avoid requiring the caller to have imported the specific modifier class, avoiding circular dependencies. + * + * @param modifier - The modifier to check against + * @returns Whether the modiifer is an instance of the given type + */ + public is(modifier: T): this is ModifierInstanceMap[T] { + const targetModifier = ModifierClassMap[modifier]; + if (!targetModifier) { + return false; + } + return this instanceof targetModifier; + } + match(_modifier: Modifier): boolean { return false; } @@ -188,6 +199,11 @@ export abstract class PersistentModifier extends Modifier { public stackCount: number; public virtualStackCount: number; + /** This field does not exist at runtime and must not be used. + * Its sole purpose is to ensure that typescript is able to properly narrow when the `is` method is called. + */ + private declare _: never; + constructor(type: ModifierType, stackCount = 1) { super(type); this.stackCount = stackCount; @@ -1593,7 +1609,7 @@ export class BypassSpeedChanceModifier extends PokemonHeldItemModifier { doBypassSpeed.value = true; const isCommandFight = globalScene.currentBattle.turnCommands[pokemon.getBattlerIndex()]?.command === Command.FIGHT; - const hasQuickClaw = this.type instanceof PokemonHeldItemModifierType && this.type.id === "QUICK_CLAW"; + const hasQuickClaw = this.type.is("PokemonHeldItemModifierType") && this.type.id === "QUICK_CLAW"; if (isCommandFight && hasQuickClaw) { globalScene.phaseManager.queueMessage( @@ -1877,7 +1893,7 @@ export class BerryModifier extends PokemonHeldItemModifier { // munch the berry and trigger unburden-like effects getBerryEffectFunc(this.berryType)(pokemon); - applyPostItemLostAbAttrs(PostItemLostAbAttr, pokemon, false); + applyPostItemLostAbAttrs("PostItemLostAbAttr", pokemon, false); // Update berry eaten trackers for Belch, Harvest, Cud Chew, etc. // Don't recover it if we proc berry pouch (no item duplication) @@ -1965,7 +1981,7 @@ export class PokemonInstantReviveModifier extends PokemonHeldItemModifier { // Reapply Commander on the Pokemon's side of the field, if applicable const field = pokemon.isPlayer() ? globalScene.getPlayerField() : globalScene.getEnemyField(); for (const p of field) { - applyAbAttrs(CommanderAbAttr, p, null, false); + applyAbAttrs("CommanderAbAttr", p, null, false); } return true; } @@ -3215,7 +3231,7 @@ export abstract class HeldItemTransferModifier extends PokemonHeldItemModifier { * @returns the opponents of the source {@linkcode Pokemon} */ getTargets(pokemon?: Pokemon, ..._args: unknown[]): Pokemon[] { - return pokemon instanceof Pokemon ? pokemon.getOpponents() : []; + return pokemon?.getOpponents?.() ?? []; } /** @@ -3787,7 +3803,7 @@ export function overrideModifiers(isPlayer = true): void { const modifierFunc = modifierTypes[item.name]; let modifierType: ModifierType | null = modifierFunc(); - if (modifierType instanceof ModifierTypeGenerator) { + if (modifierType.is("ModifierTypeGenerator")) { const pregenArgs = "type" in item && item.type !== null ? [item.type] : undefined; modifierType = modifierType.generateType([], pregenArgs); } @@ -3829,7 +3845,7 @@ export function overrideHeldItems(pokemon: Pokemon, isPlayer = true): void { let modifierType: ModifierType | null = modifierFunc(); const qty = item.count || 1; - if (modifierType instanceof ModifierTypeGenerator) { + if (modifierType.is("ModifierTypeGenerator")) { const pregenArgs = "type" in item && item.type !== null ? [item.type] : undefined; modifierType = modifierType.generateType([], pregenArgs); } @@ -3847,3 +3863,102 @@ export function overrideHeldItems(pokemon: Pokemon, isPlayer = true): void { } } } + +/** + * Private map from modifier strings to their constructors. + * + * @remarks + * Used for {@linkcode Modifier.is} to check if a modifier is of a certain type without + * requiring modifier types to be imported in every file. + */ +const ModifierClassMap = Object.freeze({ + PersistentModifier, + ConsumableModifier, + AddPokeballModifier, + AddVoucherModifier, + LapsingPersistentModifier, + DoubleBattleChanceBoosterModifier, + TempStatStageBoosterModifier, + TempCritBoosterModifier, + MapModifier, + MegaEvolutionAccessModifier, + GigantamaxAccessModifier, + TerastallizeAccessModifier, + PokemonHeldItemModifier, + LapsingPokemonHeldItemModifier, + BaseStatModifier, + EvoTrackerModifier, + PokemonBaseStatTotalModifier, + PokemonBaseStatFlatModifier, + PokemonIncrementingStatModifier, + StatBoosterModifier, + SpeciesStatBoosterModifier, + CritBoosterModifier, + SpeciesCritBoosterModifier, + AttackTypeBoosterModifier, + SurviveDamageModifier, + BypassSpeedChanceModifier, + FlinchChanceModifier, + TurnHealModifier, + TurnStatusEffectModifier, + HitHealModifier, + LevelIncrementBoosterModifier, + BerryModifier, + PreserveBerryModifier, + PokemonInstantReviveModifier, + ResetNegativeStatStageModifier, + FieldEffectModifier, + ConsumablePokemonModifier, + TerrastalizeModifier, + PokemonHpRestoreModifier, + PokemonStatusHealModifier, + ConsumablePokemonMoveModifier, + PokemonPpRestoreModifier, + PokemonAllMovePpRestoreModifier, + PokemonPpUpModifier, + PokemonNatureChangeModifier, + PokemonLevelIncrementModifier, + TmModifier, + RememberMoveModifier, + EvolutionItemModifier, + FusePokemonModifier, + MultipleParticipantExpBonusModifier, + HealingBoosterModifier, + ExpBoosterModifier, + PokemonExpBoosterModifier, + ExpShareModifier, + ExpBalanceModifier, + PokemonFriendshipBoosterModifier, + PokemonNatureWeightModifier, + PokemonMoveAccuracyBoosterModifier, + PokemonMultiHitModifier, + PokemonFormChangeItemModifier, + MoneyRewardModifier, + DamageMoneyRewardModifier, + MoneyInterestModifier, + HiddenAbilityRateBoosterModifier, + ShinyRateBoosterModifier, + CriticalCatchChanceBoosterModifier, + LockModifierTiersModifier, + HealShopCostModifier, + BoostBugSpawnModifier, + SwitchEffectTransferModifier, + HeldItemTransferModifier, + TurnHeldItemTransferModifier, + ContactHeldItemTransferChanceModifier, + IvScannerModifier, + ExtraModifierModifier, + TempExtraModifierModifier, + EnemyPersistentModifier, + EnemyDamageMultiplierModifier, + EnemyDamageBoosterModifier, + EnemyDamageReducerModifier, + EnemyTurnHealModifier, + EnemyAttackStatusEffectChanceModifier, + EnemyStatusEffectHealChanceModifier, + EnemyEndureChanceModifier, + EnemyFusionChanceModifier, + MoneyMultiplierModifier, +}); + +export type ModifierConstructorMap = typeof ModifierClassMap; diff --git a/src/overrides.ts b/src/overrides.ts index 1fbca8e8de1..b5df1073c28 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -4,7 +4,7 @@ import { Gender } from "#app/data/gender"; import { FormChangeItem } from "#enums/form-change-item"; import { type ModifierOverride } from "#app/modifier/modifier-type"; import { Variant } from "#app/sprites/variant"; -import { Unlockables } from "#app/system/unlockables"; +import { Unlockables } from "#enums/unlockables"; import { AbilityId } from "#enums/ability-id"; import { BattleType } from "#enums/battle-type"; import { BerryType } from "#enums/berry-type"; diff --git a/src/phases/add-enemy-buff-modifier-phase.ts b/src/phases/add-enemy-buff-modifier-phase.ts index 28eaf0dc4df..185464670d3 100644 --- a/src/phases/add-enemy-buff-modifier-phase.ts +++ b/src/phases/add-enemy-buff-modifier-phase.ts @@ -1,9 +1,9 @@ -import { ModifierTier } from "#app/modifier/modifier-tier"; +import { ModifierTier } from "#enums/modifier-tier"; import { regenerateModifierPoolThresholds, - ModifierPoolType, getEnemyBuffModifierForWave, } from "#app/modifier/modifier-type"; +import { ModifierPoolType } from "#enums/modifier-pool-type"; import { EnemyPersistentModifier } from "#app/modifier/modifier"; import { Phase } from "#app/phase"; import { globalScene } from "#app/global-scene"; diff --git a/src/phases/attempt-run-phase.ts b/src/phases/attempt-run-phase.ts index 525be8c21ab..5e24f3474a6 100644 --- a/src/phases/attempt-run-phase.ts +++ b/src/phases/attempt-run-phase.ts @@ -1,9 +1,4 @@ -import { - applyAbAttrs, - applyPreLeaveFieldAbAttrs, - PreLeaveFieldAbAttr, - RunSuccessAbAttr, -} from "#app/data/abilities/ability"; +import { applyAbAttrs, applyPreLeaveFieldAbAttrs } from "#app/data/abilities/apply-ab-attrs"; import { Stat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; import type { PlayerPokemon, EnemyPokemon } from "#app/field/pokemon"; @@ -30,10 +25,10 @@ export class AttemptRunPhase extends PokemonPhase { this.attemptRunAway(playerField, enemyField, escapeChance); - applyAbAttrs(RunSuccessAbAttr, playerPokemon, null, false, escapeChance); + applyAbAttrs("RunSuccessAbAttr", playerPokemon, null, false, escapeChance); if (playerPokemon.randBattleSeedInt(100) < escapeChance.value && !this.forceFailEscape) { - enemyField.forEach(enemyPokemon => applyPreLeaveFieldAbAttrs(PreLeaveFieldAbAttr, enemyPokemon)); + enemyField.forEach(enemyPokemon => applyPreLeaveFieldAbAttrs("PreLeaveFieldAbAttr", enemyPokemon)); globalScene.playSound("se/flee"); globalScene.phaseManager.queueMessage(i18next.t("battle:runAwaySuccess"), null, true, 500); diff --git a/src/phases/battle-end-phase.ts b/src/phases/battle-end-phase.ts index e169de58cb3..e1bf4c2296c 100644 --- a/src/phases/battle-end-phase.ts +++ b/src/phases/battle-end-phase.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import { applyPostBattleAbAttrs, PostBattleAbAttr } from "#app/data/abilities/ability"; +import { applyPostBattleAbAttrs } from "#app/data/abilities/apply-ab-attrs"; import { LapsingPersistentModifier, LapsingPokemonHeldItemModifier } from "#app/modifier/modifier"; import { BattlePhase } from "./battle-phase"; @@ -65,7 +65,7 @@ export class BattleEndPhase extends BattlePhase { } for (const pokemon of globalScene.getPokemonAllowedInBattle()) { - applyPostBattleAbAttrs(PostBattleAbAttr, pokemon, false, this.isVictory); + applyPostBattleAbAttrs("PostBattleAbAttr", pokemon, false, this.isVictory); } if (globalScene.currentBattle.moneyScattered) { diff --git a/src/phases/berry-phase.ts b/src/phases/berry-phase.ts index cc990d1e2ae..c126f3306b9 100644 --- a/src/phases/berry-phase.ts +++ b/src/phases/berry-phase.ts @@ -1,9 +1,4 @@ -import { - applyAbAttrs, - PreventBerryUseAbAttr, - HealFromBerryUseAbAttr, - RepeatBerryNextTurnAbAttr, -} from "#app/data/abilities/ability"; +import { applyAbAttrs } from "#app/data/abilities/apply-ab-attrs"; import { CommonAnim } from "#enums/move-anims-common"; import { BerryUsedEvent } from "#app/events/battle-scene"; import { getPokemonNameWithAffix } from "#app/messages"; @@ -25,7 +20,7 @@ export class BerryPhase extends FieldPhase { this.executeForAll(pokemon => { this.eatBerries(pokemon); - applyAbAttrs(RepeatBerryNextTurnAbAttr, pokemon, null); + applyAbAttrs("RepeatBerryNextTurnAbAttr", pokemon, null); }); this.end(); @@ -47,7 +42,7 @@ export class BerryPhase extends FieldPhase { // TODO: If both opponents on field have unnerve, which one displays its message? const cancelled = new BooleanHolder(false); - pokemon.getOpponents().forEach(opp => applyAbAttrs(PreventBerryUseAbAttr, opp, cancelled)); + pokemon.getOpponents().forEach(opp => applyAbAttrs("PreventBerryUseAbAttr", opp, cancelled)); if (cancelled.value) { globalScene.phaseManager.queueMessage( i18next.t("abilityTriggers:preventBerryUse", { @@ -75,6 +70,6 @@ export class BerryPhase extends FieldPhase { globalScene.updateModifiers(pokemon.isPlayer()); // AbilityId.CHEEK_POUCH only works once per round of nom noms - applyAbAttrs(HealFromBerryUseAbAttr, pokemon, new BooleanHolder(false)); + applyAbAttrs("HealFromBerryUseAbAttr", pokemon, new BooleanHolder(false)); } } diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index 74623f947ee..f2c23384627 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -2,12 +2,7 @@ import { BattlerIndex } from "#enums/battler-index"; import { BattleType } from "#enums/battle-type"; import { globalScene } from "#app/global-scene"; import { PLAYER_PARTY_MAX_SIZE } from "#app/constants"; -import { - applyAbAttrs, - SyncEncounterNatureAbAttr, - applyPreSummonAbAttrs, - PreSummonAbAttr, -} from "#app/data/abilities/ability"; +import { applyAbAttrs, applyPreSummonAbAttrs } from "#app/data/abilities/apply-ab-attrs"; import { initEncounterAnims, loadEncounterAnimAssets } from "#app/data/battle-anims"; import { getCharVariantFromDialogue } from "#app/data/dialogue"; import { getEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; @@ -20,7 +15,8 @@ import type Pokemon from "#app/field/pokemon"; import { FieldPosition } from "#enums/field-position"; import { getPokemonNameWithAffix } from "#app/messages"; import { BoostBugSpawnModifier, IvScannerModifier, TurnHeldItemTransferModifier } from "#app/modifier/modifier"; -import { ModifierPoolType, regenerateModifierPoolThresholds } from "#app/modifier/modifier-type"; +import { regenerateModifierPoolThresholds } from "#app/modifier/modifier-type"; +import { ModifierPoolType } from "#enums/modifier-pool-type"; import Overrides from "#app/overrides"; import { BattlePhase } from "#app/phases/battle-phase"; import { achvs } from "#app/system/achv"; @@ -34,7 +30,7 @@ import { PlayerGender } from "#enums/player-gender"; import { SpeciesId } from "#enums/species-id"; import { overrideHeldItems, overrideModifiers } from "#app/modifier/modifier"; import i18next from "i18next"; -import { WEIGHT_INCREMENT_ON_SPAWN_MISS } from "#app/data/mystery-encounters/mystery-encounters"; +import { WEIGHT_INCREMENT_ON_SPAWN_MISS } from "#app/constants"; import { getNatureName } from "#app/data/nature"; export class EncounterPhase extends BattlePhase { @@ -132,7 +128,7 @@ export class EncounterPhase extends BattlePhase { .slice(0, !battle.double ? 1 : 2) .reverse() .forEach(playerPokemon => { - applyAbAttrs(SyncEncounterNatureAbAttr, playerPokemon, null, false, battle.enemyParty[e]); + applyAbAttrs("SyncEncounterNatureAbAttr", playerPokemon, null, false, battle.enemyParty[e]); }); } } @@ -253,7 +249,7 @@ export class EncounterPhase extends BattlePhase { if (e < (battle.double ? 2 : 1)) { if (battle.battleType === BattleType.WILD) { for (const pokemon of globalScene.getField()) { - applyPreSummonAbAttrs(PreSummonAbAttr, pokemon, []); + applyPreSummonAbAttrs("PreSummonAbAttr", pokemon, []); } globalScene.field.add(enemyPokemon); battle.seenEnemyPartyMemberIds.add(enemyPokemon.id); diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index ca23b20be12..675a198d096 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -5,10 +5,7 @@ import { applyPostFaintAbAttrs, applyPostKnockOutAbAttrs, applyPostVictoryAbAttrs, - PostFaintAbAttr, - PostKnockOutAbAttr, - PostVictoryAbAttr, -} from "#app/data/abilities/ability"; +} from "#app/data/abilities/apply-ab-attrs"; import { BattlerTagLapseType } from "#enums/battler-tag-lapse-type"; import { battleSpecDialogue } from "#app/data/dialogue"; import { allMoves } from "#app/data/data-lists"; @@ -123,7 +120,7 @@ export class FaintPhase extends PokemonPhase { if (pokemon.turnData.attacksReceived?.length) { const lastAttack = pokemon.turnData.attacksReceived[0]; applyPostFaintAbAttrs( - PostFaintAbAttr, + "PostFaintAbAttr", pokemon, globalScene.getPokemonById(lastAttack.sourceId)!, new PokemonMove(lastAttack.move).getMove(), @@ -131,18 +128,18 @@ export class FaintPhase extends PokemonPhase { ); // TODO: is this bang correct? } else { //If killed by indirect damage, apply post-faint abilities without providing a last move - applyPostFaintAbAttrs(PostFaintAbAttr, pokemon); + applyPostFaintAbAttrs("PostFaintAbAttr", pokemon); } const alivePlayField = globalScene.getField(true); for (const p of alivePlayField) { - applyPostKnockOutAbAttrs(PostKnockOutAbAttr, p, pokemon); + applyPostKnockOutAbAttrs("PostKnockOutAbAttr", p, pokemon); } if (pokemon.turnData.attacksReceived?.length) { const defeatSource = this.source; if (defeatSource?.isOnField()) { - applyPostVictoryAbAttrs(PostVictoryAbAttr, defeatSource); + applyPostVictoryAbAttrs("PostVictoryAbAttr", defeatSource); const pvmove = allMoves[pokemon.turnData.attacksReceived[0].move]; const pvattrs = pvmove.getAttrs("PostVictoryStatStageChangeAttr"); if (pvattrs.length) { diff --git a/src/phases/game-over-phase.ts b/src/phases/game-over-phase.ts index 5fabc5cee81..2cd8bf120b5 100644 --- a/src/phases/game-over-phase.ts +++ b/src/phases/game-over-phase.ts @@ -7,11 +7,11 @@ import type PokemonSpecies from "#app/data/pokemon-species"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { trainerConfigs } from "#app/data/trainers/trainer-config"; import type Pokemon from "#app/field/pokemon"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import { BattlePhase } from "#app/phases/battle-phase"; import type { EndCardPhase } from "#app/phases/end-card-phase"; import { achvs, ChallengeAchv } from "#app/system/achv"; -import { Unlockables } from "#app/system/unlockables"; +import { Unlockables } from "#enums/unlockables"; import { UiMode } from "#enums/ui-mode"; import { isLocal, isLocalServerConnected } from "#app/utils/common"; import { PlayerGender } from "#enums/player-gender"; diff --git a/src/phases/modifier-reward-phase.ts b/src/phases/modifier-reward-phase.ts index 83bd8704f59..29bbe215fc0 100644 --- a/src/phases/modifier-reward-phase.ts +++ b/src/phases/modifier-reward-phase.ts @@ -1,6 +1,7 @@ import { globalScene } from "#app/global-scene"; -import type { ModifierType, ModifierTypeFunc } from "#app/modifier/modifier-type"; -import { getModifierType } from "#app/modifier/modifier-type"; +import type { ModifierType } from "#app/modifier/modifier-type"; +import type { ModifierTypeFunc } from "#app/@types/modifier-types"; +import { getModifierType } from "#app/utils/modifier-utils"; import i18next from "i18next"; import { BattlePhase } from "./battle-phase"; diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index 68c96ddce1e..770d9c79a2a 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -1,21 +1,12 @@ import { BattlerIndex } from "#enums/battler-index"; import { globalScene } from "#app/global-scene"; import { - AddSecondStrikeAbAttr, - AlwaysHitAbAttr, applyExecutedMoveAbAttrs, applyPostAttackAbAttrs, applyPostDamageAbAttrs, applyPostDefendAbAttrs, applyPreAttackAbAttrs, - ExecutedMoveAbAttr, - IgnoreMoveEffectsAbAttr, - MaxMultiHitAbAttr, - PostAttackAbAttr, - PostDamageAbAttr, - PostDefendAbAttr, - ReflectStatusMoveAbAttr, -} from "#app/data/abilities/ability"; +} from "#app/data/abilities/apply-ab-attrs"; import { ConditionalProtectTag } from "#app/data/arena-tag"; import { ArenaTagSide } from "#enums/arena-tag-side"; import { MoveAnim } from "#app/data/battle-anims"; @@ -179,7 +170,7 @@ export class MoveEffectPhase extends PokemonPhase { globalScene.phaseManager.create( "ShowAbilityPhase", target.getBattlerIndex(), - target.getPassiveAbility().hasAttr(ReflectStatusMoveAbAttr), + target.getPassiveAbility().hasAttr("ReflectStatusMoveAbAttr"), ), ); this.queuedPhases.push(globalScene.phaseManager.create("HideAbilityPhase")); @@ -317,7 +308,7 @@ export class MoveEffectPhase extends PokemonPhase { // Assume single target for multi hit applyMoveAttrs("MultiHitAttr", user, this.getFirstTarget() ?? null, move, hitCount); // If Parental Bond is applicable, add another hit - applyPreAttackAbAttrs(AddSecondStrikeAbAttr, user, null, move, false, hitCount, null); + applyPreAttackAbAttrs("AddSecondStrikeAbAttr", user, null, move, false, hitCount, null); // If Multi-Lens is applicable, add hits equal to the number of held Multi-Lenses globalScene.applyModifiers(PokemonMultiHitModifier, user.isPlayer(), user, move.id, hitCount); // Set the user's relevant turnData fields to reflect the final hit count @@ -370,7 +361,7 @@ export class MoveEffectPhase extends PokemonPhase { // Add to the move history entry if (this.firstHit) { user.pushMoveHistory(this.moveHistoryEntry); - applyExecutedMoveAbAttrs(ExecutedMoveAbAttr, user); + applyExecutedMoveAbAttrs("ExecutedMoveAbAttr", user); } try { @@ -434,7 +425,7 @@ export class MoveEffectPhase extends PokemonPhase { * @returns a `Promise` intended to be passed into a `then()` call. */ protected applyOnGetHitAbEffects(user: Pokemon, target: Pokemon, hitResult: HitResult): void { - applyPostDefendAbAttrs(PostDefendAbAttr, target, user, this.move, hitResult); + applyPostDefendAbAttrs("PostDefendAbAttr", target, user, this.move, hitResult); target.lapseTags(BattlerTagLapseType.AFTER_HIT); } @@ -450,7 +441,11 @@ export class MoveEffectPhase extends PokemonPhase { return; } - if (dealsDamage && !target.hasAbilityWithAttr(IgnoreMoveEffectsAbAttr) && !this.move.hitsSubstitute(user, target)) { + if ( + dealsDamage && + !target.hasAbilityWithAttr("IgnoreMoveEffectsAbAttr") && + !this.move.hitsSubstitute(user, target) + ) { const flinched = new BooleanHolder(false); globalScene.applyModifiers(FlinchChanceModifier, user.isPlayer(), user, flinched); if (flinched.value) { @@ -580,7 +575,7 @@ export class MoveEffectPhase extends PokemonPhase { // Strikes after the first in a multi-strike move are guaranteed to hit, // unless the move is flagged to check all hits and the user does not have Skill Link. if (user.turnData.hitsLeft < user.turnData.hitCount) { - if (!move.hasFlag(MoveFlags.CHECK_ALL_HITS) || user.hasAbilityWithAttr(MaxMultiHitAbAttr)) { + if (!move.hasFlag(MoveFlags.CHECK_ALL_HITS) || user.hasAbilityWithAttr("MaxMultiHitAbAttr")) { return [HitCheckResult.HIT, effectiveness]; } } @@ -626,7 +621,7 @@ export class MoveEffectPhase extends PokemonPhase { if (!user) { return false; } - if (user.hasAbilityWithAttr(AlwaysHitAbAttr) || target.hasAbilityWithAttr(AlwaysHitAbAttr)) { + if (user.hasAbilityWithAttr("AlwaysHitAbAttr") || target.hasAbilityWithAttr("AlwaysHitAbAttr")) { return true; } if (this.move.hasAttr("ToxicAccuracyAttr") && user.isOfType(PokemonType.POISON)) { @@ -789,7 +784,7 @@ export class MoveEffectPhase extends PokemonPhase { // Multi-hit check for Wimp Out/Emergency Exit if (user.turnData.hitCount > 1) { - applyPostDamageAbAttrs(PostDamageAbAttr, target, 0, target.hasPassive(), false, [], user); + applyPostDamageAbAttrs("PostDamageAbAttr", target, 0, target.hasPassive(), false, [], user); } } } @@ -983,7 +978,7 @@ export class MoveEffectPhase extends PokemonPhase { this.triggerMoveEffects(MoveEffectTrigger.POST_APPLY, user, target, firstTarget, false); this.applyHeldItemFlinchCheck(user, target, dealsDamage); this.applyOnGetHitAbEffects(user, target, hitResult); - applyPostAttackAbAttrs(PostAttackAbAttr, user, target, this.move, hitResult); + applyPostAttackAbAttrs("PostAttackAbAttr", user, target, this.move, hitResult); // We assume only enemy Pokemon are able to have the EnemyAttackStatusEffectChanceModifier from tokens if (!user.isPlayer() && this.move.is("AttackMove")) { diff --git a/src/phases/move-end-phase.ts b/src/phases/move-end-phase.ts index e5f87089fae..953f8eae4ce 100644 --- a/src/phases/move-end-phase.ts +++ b/src/phases/move-end-phase.ts @@ -2,7 +2,7 @@ import { globalScene } from "#app/global-scene"; import { BattlerTagLapseType } from "#enums/battler-tag-lapse-type"; import { PokemonPhase } from "./pokemon-phase"; import type { BattlerIndex } from "#enums/battler-index"; -import { applyPostSummonAbAttrs, PostSummonRemoveEffectAbAttr } from "#app/data/abilities/ability"; +import { applyPostSummonAbAttrs } from "#app/data/abilities/apply-ab-attrs"; import type Pokemon from "#app/field/pokemon"; export class MoveEndPhase extends PokemonPhase { @@ -30,7 +30,7 @@ export class MoveEndPhase extends PokemonPhase { // Remove effects which were set on a Pokemon which removes them on summon (i.e. via Mold Breaker) for (const target of this.targets) { if (target) { - applyPostSummonAbAttrs(PostSummonRemoveEffectAbAttr, target); + applyPostSummonAbAttrs("PostSummonRemoveEffectAbAttr", target); } } diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index ca66ca745e7..d72c7396f1f 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -1,16 +1,6 @@ import { BattlerIndex } from "#enums/battler-index"; import { globalScene } from "#app/global-scene"; -import { - applyAbAttrs, - applyPostMoveUsedAbAttrs, - applyPreAttackAbAttrs, - BlockRedirectAbAttr, - IncreasePpAbAttr, - PokemonTypeChangeAbAttr, - PostMoveUsedAbAttr, - RedirectMoveAbAttr, - ReduceStatusEffectDurationAbAttr, -} from "#app/data/abilities/ability"; +import { applyAbAttrs, applyPostMoveUsedAbAttrs, applyPreAttackAbAttrs } from "#app/data/abilities/apply-ab-attrs"; import type { DelayedAttackTag } from "#app/data/arena-tag"; import { CommonAnim } from "#enums/move-anims-common"; import { CenterOfAttentionTag } from "#app/data/battler-tags"; @@ -228,7 +218,7 @@ export class MovePhase extends BattlePhase { applyMoveAttrs("BypassSleepAttr", this.pokemon, null, this.move.getMove()); const turnsRemaining = new NumberHolder(this.pokemon.status.sleepTurnsRemaining ?? 0); applyAbAttrs( - ReduceStatusEffectDurationAbAttr, + "ReduceStatusEffectDurationAbAttr", this.pokemon, null, false, @@ -396,7 +386,7 @@ export class MovePhase extends BattlePhase { */ if (success) { const move = this.move.getMove(); - applyPreAttackAbAttrs(PokemonTypeChangeAbAttr, this.pokemon, null, move); + applyPreAttackAbAttrs("PokemonTypeChangeAbAttr", this.pokemon, null, move); globalScene.phaseManager.unshiftNew( "MoveEffectPhase", this.pokemon.getBattlerIndex(), @@ -407,7 +397,7 @@ export class MovePhase extends BattlePhase { ); } else { if ([MoveId.ROAR, MoveId.WHIRLWIND, MoveId.TRICK_OR_TREAT, MoveId.FORESTS_CURSE].includes(this.move.moveId)) { - applyPreAttackAbAttrs(PokemonTypeChangeAbAttr, this.pokemon, null, this.move.getMove()); + applyPreAttackAbAttrs("PokemonTypeChangeAbAttr", this.pokemon, null, this.move.getMove()); } this.pokemon.pushMoveHistory({ @@ -437,7 +427,7 @@ export class MovePhase extends BattlePhase { // Note that the `!this.followUp` check here prevents an infinite Dancer loop. if (this.move.getMove().hasFlag(MoveFlags.DANCE_MOVE) && !this.followUp) { globalScene.getField(true).forEach(pokemon => { - applyPostMoveUsedAbAttrs(PostMoveUsedAbAttr, pokemon, this.move, this.pokemon, this.targets); + applyPostMoveUsedAbAttrs("PostMoveUsedAbAttr", pokemon, this.move, this.pokemon, this.targets); }); } } @@ -449,7 +439,7 @@ export class MovePhase extends BattlePhase { if (move.applyConditions(this.pokemon, targets[0], move)) { // Protean and Libero apply on the charging turn of charge moves - applyPreAttackAbAttrs(PokemonTypeChangeAbAttr, this.pokemon, null, this.move.getMove()); + applyPreAttackAbAttrs("PokemonTypeChangeAbAttr", this.pokemon, null, this.move.getMove()); this.showMoveText(); globalScene.phaseManager.unshiftNew( @@ -498,7 +488,7 @@ export class MovePhase extends BattlePhase { public getPpIncreaseFromPressure(targets: Pokemon[]): number { const foesWithPressure = this.pokemon .getOpponents() - .filter(o => targets.includes(o) && o.isActive(true) && o.hasAbilityWithAttr(IncreasePpAbAttr)); + .filter(o => targets.includes(o) && o.isActive(true) && o.hasAbilityWithAttr("IncreasePpAbAttr")); return foesWithPressure.length; } @@ -516,7 +506,9 @@ export class MovePhase extends BattlePhase { globalScene .getField(true) .filter(p => p !== this.pokemon) - .forEach(p => applyAbAttrs(RedirectMoveAbAttr, p, null, false, this.move.moveId, redirectTarget, this.pokemon)); + .forEach(p => + applyAbAttrs("RedirectMoveAbAttr", p, null, false, this.move.moveId, redirectTarget, this.pokemon), + ); /** `true` if an Ability is responsible for redirecting the move to another target; `false` otherwise */ let redirectedByAbility = currentTarget !== redirectTarget.value; @@ -545,17 +537,17 @@ export class MovePhase extends BattlePhase { } }); - if (this.pokemon.hasAbilityWithAttr(BlockRedirectAbAttr)) { + if (this.pokemon.hasAbilityWithAttr("BlockRedirectAbAttr")) { redirectTarget.value = currentTarget; // TODO: Ability displays should be handled by the ability globalScene.phaseManager.queueAbilityDisplay( this.pokemon, - this.pokemon.getPassiveAbility().hasAttr(BlockRedirectAbAttr), + this.pokemon.getPassiveAbility().hasAttr("BlockRedirectAbAttr"), true, ); globalScene.phaseManager.queueAbilityDisplay( this.pokemon, - this.pokemon.getPassiveAbility().hasAttr(BlockRedirectAbAttr), + this.pokemon.getPassiveAbility().hasAttr("BlockRedirectAbAttr"), false, ); } diff --git a/src/phases/new-biome-encounter-phase.ts b/src/phases/new-biome-encounter-phase.ts index 29ba67cb797..5aad607764f 100644 --- a/src/phases/new-biome-encounter-phase.ts +++ b/src/phases/new-biome-encounter-phase.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import { applyAbAttrs, PostBiomeChangeAbAttr } from "#app/data/abilities/ability"; +import { applyAbAttrs } from "#app/data/abilities/apply-ab-attrs"; import { getRandomWeatherType } from "#app/data/weather"; import { NextEncounterPhase } from "./next-encounter-phase"; @@ -14,7 +14,7 @@ export class NewBiomeEncounterPhase extends NextEncounterPhase { if (pokemon) { pokemon.resetBattleAndWaveData(); if (pokemon.isOnField()) { - applyAbAttrs(PostBiomeChangeAbAttr, pokemon, null); + applyAbAttrs("PostBiomeChangeAbAttr", pokemon, null); } } } diff --git a/src/phases/obtain-status-effect-phase.ts b/src/phases/obtain-status-effect-phase.ts index bf172269d5f..dc26d070029 100644 --- a/src/phases/obtain-status-effect-phase.ts +++ b/src/phases/obtain-status-effect-phase.ts @@ -8,7 +8,7 @@ import type Pokemon from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { PokemonPhase } from "./pokemon-phase"; import { SpeciesFormChangeStatusEffectTrigger } from "#app/data/pokemon-forms/form-change-triggers"; -import { applyPostSetStatusAbAttrs, PostSetStatusAbAttr } from "#app/data/abilities/ability"; +import { applyPostSetStatusAbAttrs } from "#app/data/abilities/apply-ab-attrs"; import { isNullOrUndefined } from "#app/utils/common"; export class ObtainStatusEffectPhase extends PokemonPhase { @@ -53,7 +53,7 @@ export class ObtainStatusEffectPhase extends PokemonPhase { globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeStatusEffectTrigger, true); // If mold breaker etc was used to set this status, it shouldn't apply to abilities activated afterwards globalScene.arena.setIgnoreAbilities(false); - applyPostSetStatusAbAttrs(PostSetStatusAbAttr, pokemon, this.statusEffect, this.sourcePokemon); + applyPostSetStatusAbAttrs("PostSetStatusAbAttr", pokemon, this.statusEffect, this.sourcePokemon); } this.end(); }); diff --git a/src/phases/post-summon-phase.ts b/src/phases/post-summon-phase.ts index a7faf614292..3acd7ca24e9 100644 --- a/src/phases/post-summon-phase.ts +++ b/src/phases/post-summon-phase.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import { applyAbAttrs, applyPostSummonAbAttrs, CommanderAbAttr, PostSummonAbAttr } from "#app/data/abilities/ability"; +import { applyAbAttrs, applyPostSummonAbAttrs } from "#app/data/abilities/apply-ab-attrs"; import { ArenaTrapTag } from "#app/data/arena-tag"; import { StatusEffect } from "#app/enums/status-effect"; import { PokemonPhase } from "./pokemon-phase"; @@ -26,10 +26,10 @@ export class PostSummonPhase extends PokemonPhase { pokemon.lapseTag(BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON); } - applyPostSummonAbAttrs(PostSummonAbAttr, pokemon); + applyPostSummonAbAttrs("PostSummonAbAttr", pokemon); const field = pokemon.isPlayer() ? globalScene.getPlayerField() : globalScene.getEnemyField(); for (const p of field) { - applyAbAttrs(CommanderAbAttr, p, null, false); + applyAbAttrs("CommanderAbAttr", p, null, false); } this.end(); diff --git a/src/phases/post-turn-status-effect-phase.ts b/src/phases/post-turn-status-effect-phase.ts index c868b963f39..e0a3bb5c00b 100644 --- a/src/phases/post-turn-status-effect-phase.ts +++ b/src/phases/post-turn-status-effect-phase.ts @@ -1,13 +1,6 @@ import { globalScene } from "#app/global-scene"; import type { BattlerIndex } from "#enums/battler-index"; -import { - applyAbAttrs, - applyPostDamageAbAttrs, - BlockNonDirectDamageAbAttr, - BlockStatusDamageAbAttr, - PostDamageAbAttr, - ReduceBurnDamageAbAttr, -} from "#app/data/abilities/ability"; +import { applyAbAttrs, applyPostDamageAbAttrs } from "#app/data/abilities/apply-ab-attrs"; import { CommonBattleAnim } from "#app/data/battle-anims"; import { CommonAnim } from "#enums/move-anims-common"; import { getStatusEffectActivationText } from "#app/data/status-effect"; @@ -29,8 +22,8 @@ export class PostTurnStatusEffectPhase extends PokemonPhase { if (pokemon?.isActive(true) && pokemon.status && pokemon.status.isPostTurn() && !pokemon.switchOutStatus) { pokemon.status.incrementTurn(); const cancelled = new BooleanHolder(false); - applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); - applyAbAttrs(BlockStatusDamageAbAttr, pokemon, cancelled); + applyAbAttrs("BlockNonDirectDamageAbAttr", pokemon, cancelled); + applyAbAttrs("BlockStatusDamageAbAttr", pokemon, cancelled); if (!cancelled.value) { globalScene.phaseManager.queueMessage( @@ -46,14 +39,14 @@ export class PostTurnStatusEffectPhase extends PokemonPhase { break; case StatusEffect.BURN: damage.value = Math.max(pokemon.getMaxHp() >> 4, 1); - applyAbAttrs(ReduceBurnDamageAbAttr, pokemon, null, false, damage); + applyAbAttrs("ReduceBurnDamageAbAttr", pokemon, null, false, damage); break; } if (damage.value) { // Set preventEndure flag to avoid pokemon surviving thanks to focus band, sturdy, endure ... globalScene.damageNumberHandler.add(this.getPokemon(), pokemon.damage(damage.value, false, true)); pokemon.updateInfo(); - applyPostDamageAbAttrs(PostDamageAbAttr, pokemon, damage.value, pokemon.hasPassive(), false, []); + applyPostDamageAbAttrs("PostDamageAbAttr", pokemon, damage.value, pokemon.hasPassive(), false, []); } new CommonBattleAnim(CommonAnim.POISON + (pokemon.status.effect - 1), pokemon).play(false, () => this.end()); } else { diff --git a/src/phases/quiet-form-change-phase.ts b/src/phases/quiet-form-change-phase.ts index cfd9c521e2b..e6a00c73756 100644 --- a/src/phases/quiet-form-change-phase.ts +++ b/src/phases/quiet-form-change-phase.ts @@ -12,12 +12,7 @@ import type Pokemon from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { BattlePhase } from "./battle-phase"; import type { MovePhase } from "./move-phase"; -import { - applyAbAttrs, - ClearTerrainAbAttr, - ClearWeatherAbAttr, - PostTeraFormChangeStatChangeAbAttr, -} from "#app/data/abilities/ability"; +import { applyAbAttrs } from "#app/data/abilities/apply-ab-attrs"; export class QuietFormChangePhase extends BattlePhase { public readonly phaseName = "QuietFormChangePhase"; @@ -185,9 +180,9 @@ export class QuietFormChangePhase extends BattlePhase { } } if (this.formChange.trigger instanceof SpeciesFormChangeTeraTrigger) { - applyAbAttrs(PostTeraFormChangeStatChangeAbAttr, this.pokemon, null); - applyAbAttrs(ClearWeatherAbAttr, this.pokemon, null); - applyAbAttrs(ClearTerrainAbAttr, this.pokemon, null); + applyAbAttrs("PostTeraFormChangeStatChangeAbAttr", this.pokemon, null); + applyAbAttrs("ClearWeatherAbAttr", this.pokemon, null); + applyAbAttrs("ClearTerrainAbAttr", this.pokemon, null); } super.end(); diff --git a/src/phases/ribbon-modifier-reward-phase.ts b/src/phases/ribbon-modifier-reward-phase.ts index 949f7af0302..10d63ba707f 100644 --- a/src/phases/ribbon-modifier-reward-phase.ts +++ b/src/phases/ribbon-modifier-reward-phase.ts @@ -1,6 +1,6 @@ import { globalScene } from "#app/global-scene"; import type PokemonSpecies from "#app/data/pokemon-species"; -import type { ModifierTypeFunc } from "#app/modifier/modifier-type"; +import type { ModifierTypeFunc } from "#app/@types/modifier-types"; import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; import { ModifierRewardPhase } from "./modifier-reward-phase"; diff --git a/src/phases/select-modifier-phase.ts b/src/phases/select-modifier-phase.ts index f99c921412f..34a905f64c6 100644 --- a/src/phases/select-modifier-phase.ts +++ b/src/phases/select-modifier-phase.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import type { ModifierTier } from "#app/modifier/modifier-tier"; +import type { ModifierTier } from "#enums/modifier-tier"; import type { ModifierTypeOption, ModifierType } from "#app/modifier/modifier-type"; import { regenerateModifierPoolThresholds, @@ -11,9 +11,9 @@ import { RememberMoveModifierType, PokemonPpRestoreModifierType, PokemonPpUpModifierType, - ModifierPoolType, getPlayerModifierTypeOptions, } from "#app/modifier/modifier-type"; +import { ModifierPoolType } from "#enums/modifier-pool-type"; import type { Modifier } from "#app/modifier/modifier"; import { ExtraModifierModifier, diff --git a/src/phases/stat-stage-change-phase.ts b/src/phases/stat-stage-change-phase.ts index 9c351096180..e73f72f7a63 100644 --- a/src/phases/stat-stage-change-phase.ts +++ b/src/phases/stat-stage-change-phase.ts @@ -4,13 +4,7 @@ import { applyAbAttrs, applyPostStatStageChangeAbAttrs, applyPreStatStageChangeAbAttrs, - ConditionalUserFieldProtectStatAbAttr, - PostStatStageChangeAbAttr, - ProtectStatAbAttr, - ReflectStatStageChangeAbAttr, - StatStageChangeCopyAbAttr, - StatStageChangeMultiplierAbAttr, -} from "#app/data/abilities/ability"; +} from "#app/data/abilities/apply-ab-attrs"; import { MistTag } from "#app/data/arena-tag"; import { ArenaTagSide } from "#enums/arena-tag-side"; import type { ArenaTag } from "#app/data/arena-tag"; @@ -132,7 +126,7 @@ export class StatStageChangePhase extends PokemonPhase { const stages = new NumberHolder(this.stages); if (!this.ignoreAbilities) { - applyAbAttrs(StatStageChangeMultiplierAbAttr, pokemon, null, false, stages); + applyAbAttrs("StatStageChangeMultiplierAbAttr", pokemon, null, false, stages); } let simulate = false; @@ -152,9 +146,9 @@ export class StatStageChangePhase extends PokemonPhase { } if (!cancelled.value && !this.selfTarget && stages.value < 0) { - applyPreStatStageChangeAbAttrs(ProtectStatAbAttr, pokemon, stat, cancelled, simulate); + applyPreStatStageChangeAbAttrs("ProtectStatAbAttr", pokemon, stat, cancelled, simulate); applyPreStatStageChangeAbAttrs( - ConditionalUserFieldProtectStatAbAttr, + "ConditionalUserFieldProtectStatAbAttr", pokemon, stat, cancelled, @@ -164,7 +158,7 @@ export class StatStageChangePhase extends PokemonPhase { const ally = pokemon.getAlly(); if (!isNullOrUndefined(ally)) { applyPreStatStageChangeAbAttrs( - ConditionalUserFieldProtectStatAbAttr, + "ConditionalUserFieldProtectStatAbAttr", ally, stat, cancelled, @@ -180,7 +174,7 @@ export class StatStageChangePhase extends PokemonPhase { !this.comingFromMirrorArmorUser ) { applyPreStatStageChangeAbAttrs( - ReflectStatStageChangeAbAttr, + "ReflectStatStageChangeAbAttr", pokemon, stat, cancelled, @@ -228,11 +222,17 @@ export class StatStageChangePhase extends PokemonPhase { if (stages.value > 0 && this.canBeCopied) { for (const opponent of pokemon.getOpponents()) { - applyAbAttrs(StatStageChangeCopyAbAttr, opponent, null, false, this.stats, stages.value); + applyAbAttrs("StatStageChangeCopyAbAttr", opponent, null, false, this.stats, stages.value); } } - applyPostStatStageChangeAbAttrs(PostStatStageChangeAbAttr, pokemon, filteredStats, this.stages, this.selfTarget); + applyPostStatStageChangeAbAttrs( + "PostStatStageChangeAbAttr", + pokemon, + filteredStats, + this.stages, + this.selfTarget, + ); // Look for any other stat change phases; if this is the last one, do White Herb check const existingPhase = globalScene.phaseManager.findPhase( diff --git a/src/phases/summon-phase.ts b/src/phases/summon-phase.ts index e902fd0183e..ad93452331f 100644 --- a/src/phases/summon-phase.ts +++ b/src/phases/summon-phase.ts @@ -10,7 +10,7 @@ import { getPokemonNameWithAffix } from "#app/messages"; import i18next from "i18next"; import { PartyMemberPokemonPhase } from "./party-member-pokemon-phase"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; -import { applyPreSummonAbAttrs, PreSummonAbAttr } from "#app/data/abilities/ability"; +import { applyPreSummonAbAttrs } from "#app/data/abilities/apply-ab-attrs"; import { globalScene } from "#app/global-scene"; export class SummonPhase extends PartyMemberPokemonPhase { @@ -27,7 +27,7 @@ export class SummonPhase extends PartyMemberPokemonPhase { start() { super.start(); - applyPreSummonAbAttrs(PreSummonAbAttr, this.getPokemon()); + applyPreSummonAbAttrs("PreSummonAbAttr", this.getPokemon()); this.preSummon(); } diff --git a/src/phases/switch-summon-phase.ts b/src/phases/switch-summon-phase.ts index 71136be0c93..6b76d4e8926 100644 --- a/src/phases/switch-summon-phase.ts +++ b/src/phases/switch-summon-phase.ts @@ -1,11 +1,5 @@ import { globalScene } from "#app/global-scene"; -import { - applyPreSummonAbAttrs, - applyPreSwitchOutAbAttrs, - PostDamageForceSwitchAbAttr, - PreSummonAbAttr, - PreSwitchOutAbAttr, -} from "#app/data/abilities/ability"; +import { applyPreSummonAbAttrs, applyPreSwitchOutAbAttrs } from "#app/data/abilities/apply-ab-attrs"; import { allMoves } from "#app/data/data-lists"; import { getPokeballTintColor } from "#app/data/pokeball"; import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms/form-change-triggers"; @@ -130,8 +124,8 @@ export class SwitchSummonPhase extends SummonPhase { switchedInPokemon.resetSummonData(); switchedInPokemon.loadAssets(true); - applyPreSummonAbAttrs(PreSummonAbAttr, switchedInPokemon); - applyPreSwitchOutAbAttrs(PreSwitchOutAbAttr, this.lastPokemon); + applyPreSummonAbAttrs("PreSummonAbAttr", switchedInPokemon); + applyPreSwitchOutAbAttrs("PreSwitchOutAbAttr", this.lastPokemon); if (!switchedInPokemon) { this.end(); return; @@ -215,7 +209,7 @@ export class SwitchSummonPhase extends SummonPhase { const lastPokemonIsForceSwitchedAndNotFainted = lastUsedMove?.hasAttr("ForceSwitchOutAttr") && !this.lastPokemon.isFainted(); const lastPokemonHasForceSwitchAbAttr = - this.lastPokemon.hasAbilityWithAttr(PostDamageForceSwitchAbAttr) && !this.lastPokemon.isFainted(); + this.lastPokemon.hasAbilityWithAttr("PostDamageForceSwitchAbAttr") && !this.lastPokemon.isFainted(); // Compensate for turn spent summoning/forced switch if switched out pokemon is not fainted. // Needed as we increment turn counters in `TurnEndPhase`. diff --git a/src/phases/title-phase.ts b/src/phases/title-phase.ts index 26311d52ab8..5e36081b899 100644 --- a/src/phases/title-phase.ts +++ b/src/phases/title-phase.ts @@ -6,15 +6,12 @@ import { getBiomeKey } from "#app/field/arena"; import { GameMode, getGameMode } from "#app/game-mode"; import { GameModes } from "#enums/game-modes"; import type { Modifier } from "#app/modifier/modifier"; -import { - getDailyRunStarterModifiers, - ModifierPoolType, - modifierTypes, - regenerateModifierPoolThresholds, -} from "#app/modifier/modifier-type"; +import { getDailyRunStarterModifiers, regenerateModifierPoolThresholds } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; +import { ModifierPoolType } from "#enums/modifier-pool-type"; import { Phase } from "#app/phase"; import type { SessionSaveData } from "#app/system/game-data"; -import { Unlockables } from "#app/system/unlockables"; +import { Unlockables } from "#enums/unlockables"; import { vouchers } from "#app/system/voucher"; import type { OptionSelectConfig, OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import { SaveSlotUiMode } from "#app/ui/save-slot-select-ui-handler"; diff --git a/src/phases/trainer-victory-phase.ts b/src/phases/trainer-victory-phase.ts index 5d35dd5d375..554b8109f02 100644 --- a/src/phases/trainer-victory-phase.ts +++ b/src/phases/trainer-victory-phase.ts @@ -1,6 +1,6 @@ import { getCharVariantFromDialogue } from "#app/data/dialogue"; import { TrainerType } from "#app/enums/trainer-type"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import { vouchers } from "#app/system/voucher"; import i18next from "i18next"; import { randSeedItem } from "#app/utils/common"; diff --git a/src/phases/turn-end-phase.ts b/src/phases/turn-end-phase.ts index a539b234a18..ab46292c1d2 100644 --- a/src/phases/turn-end-phase.ts +++ b/src/phases/turn-end-phase.ts @@ -1,4 +1,4 @@ -import { applyPostTurnAbAttrs, PostTurnAbAttr } from "#app/data/abilities/ability"; +import { applyPostTurnAbAttrs } from "#app/data/abilities/apply-ab-attrs"; import { BattlerTagLapseType } from "#enums/battler-tag-lapse-type"; import { TerrainType } from "#app/data/terrain"; import { WeatherType } from "#app/enums/weather-type"; @@ -49,7 +49,7 @@ export class TurnEndPhase extends FieldPhase { globalScene.applyModifier(EnemyStatusEffectHealChanceModifier, false, pokemon); } - applyPostTurnAbAttrs(PostTurnAbAttr, pokemon); + applyPostTurnAbAttrs("PostTurnAbAttr", pokemon); } globalScene.applyModifiers(TurnStatusEffectModifier, pokemon.isPlayer(), pokemon); diff --git a/src/phases/turn-start-phase.ts b/src/phases/turn-start-phase.ts index e9a8a82afdc..6f062cb5fbe 100644 --- a/src/phases/turn-start-phase.ts +++ b/src/phases/turn-start-phase.ts @@ -1,4 +1,4 @@ -import { applyAbAttrs, BypassSpeedChanceAbAttr, PreventBypassSpeedChanceAbAttr } from "#app/data/abilities/ability"; +import { applyAbAttrs } from "#app/data/abilities/apply-ab-attrs"; import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { Stat } from "#app/enums/stat"; @@ -66,8 +66,8 @@ export class TurnStartPhase extends FieldPhase { globalScene.getField(true).map(p => { const bypassSpeed = new BooleanHolder(false); const canCheckHeldItems = new BooleanHolder(true); - applyAbAttrs(BypassSpeedChanceAbAttr, p, null, false, bypassSpeed); - applyAbAttrs(PreventBypassSpeedChanceAbAttr, p, null, false, bypassSpeed, canCheckHeldItems); + applyAbAttrs("BypassSpeedChanceAbAttr", p, null, false, bypassSpeed); + applyAbAttrs("PreventBypassSpeedChanceAbAttr", p, null, false, bypassSpeed, canCheckHeldItems); if (canCheckHeldItems.value) { globalScene.applyModifiers(BypassSpeedChanceModifier, p.isPlayer(), p, bypassSpeed); } diff --git a/src/phases/unlock-phase.ts b/src/phases/unlock-phase.ts index 839ac31dc5d..76719847f92 100644 --- a/src/phases/unlock-phase.ts +++ b/src/phases/unlock-phase.ts @@ -1,6 +1,6 @@ import { globalScene } from "#app/global-scene"; import { Phase } from "#app/phase"; -import type { Unlockables } from "#app/system/unlockables"; +import type { Unlockables } from "#enums/unlockables"; import { getUnlockableName } from "#app/system/unlockables"; import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; diff --git a/src/phases/victory-phase.ts b/src/phases/victory-phase.ts index bf6ea6d4a43..ae5b727c2a6 100644 --- a/src/phases/victory-phase.ts +++ b/src/phases/victory-phase.ts @@ -2,7 +2,7 @@ import type { BattlerIndex } from "#enums/battler-index"; import { ClassicFixedBossWaves } from "#enums/fixed-boss-waves"; import { BattleType } from "#enums/battle-type"; import type { CustomModifierSettings } from "#app/modifier/modifier-type"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import { PokemonPhase } from "./pokemon-phase"; import { handleMysteryEncounterVictory } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { globalScene } from "#app/global-scene"; diff --git a/src/phases/weather-effect-phase.ts b/src/phases/weather-effect-phase.ts index 0873283652e..d9239220376 100644 --- a/src/phases/weather-effect-phase.ts +++ b/src/phases/weather-effect-phase.ts @@ -1,13 +1,9 @@ import { globalScene } from "#app/global-scene"; import { applyPreWeatherEffectAbAttrs, - SuppressWeatherEffectAbAttr, - PreWeatherDamageAbAttr, applyAbAttrs, - BlockNonDirectDamageAbAttr, applyPostWeatherLapseAbAttrs, - PostWeatherLapseAbAttr, -} from "#app/data/abilities/ability"; +} from "#app/data/abilities/apply-ab-attrs"; import { CommonAnim } from "#enums/move-anims-common"; import type { Weather } from "#app/data/weather"; import { getWeatherDamageMessage, getWeatherLapseMessage } from "#app/data/weather"; @@ -45,15 +41,15 @@ export class WeatherEffectPhase extends CommonAnimPhase { const cancelled = new BooleanHolder(false); this.executeForAll((pokemon: Pokemon) => - applyPreWeatherEffectAbAttrs(SuppressWeatherEffectAbAttr, pokemon, this.weather, cancelled), + applyPreWeatherEffectAbAttrs("SuppressWeatherEffectAbAttr", pokemon, this.weather, cancelled), ); if (!cancelled.value) { const inflictDamage = (pokemon: Pokemon) => { const cancelled = new BooleanHolder(false); - applyPreWeatherEffectAbAttrs(PreWeatherDamageAbAttr, pokemon, this.weather, cancelled); - applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); + applyPreWeatherEffectAbAttrs("PreWeatherDamageAbAttr", pokemon, this.weather, cancelled); + applyAbAttrs("BlockNonDirectDamageAbAttr", pokemon, cancelled); if ( cancelled.value || @@ -84,7 +80,7 @@ export class WeatherEffectPhase extends CommonAnimPhase { globalScene.ui.showText(getWeatherLapseMessage(this.weather.weatherType) ?? "", null, () => { this.executeForAll((pokemon: Pokemon) => { if (!pokemon.switchOutStatus) { - applyPostWeatherLapseAbAttrs(PostWeatherLapseAbAttr, pokemon, this.weather); + applyPostWeatherLapseAbAttrs("PostWeatherLapseAbAttr", pokemon, this.weather); } }); diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 31c7ad7e41c..00b46b9e5f4 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -13,7 +13,7 @@ import Overrides from "#app/overrides"; import PokemonData from "#app/system/pokemon-data"; import PersistentModifierData from "#app/system/modifier-data"; import ArenaData from "#app/system/arena-data"; -import { Unlockables } from "#app/system/unlockables"; +import { Unlockables } from "#enums/unlockables"; import { getGameMode } from "#app/game-mode"; import { GameModes } from "#enums/game-modes"; import { BattleType } from "#enums/battle-type"; diff --git a/src/system/unlockables.ts b/src/system/unlockables.ts index f64d4d33966..72588858eae 100644 --- a/src/system/unlockables.ts +++ b/src/system/unlockables.ts @@ -1,13 +1,7 @@ import i18next from "i18next"; import { GameMode } from "../game-mode"; import { GameModes } from "#enums/game-modes"; - -export enum Unlockables { - ENDLESS_MODE, - MINI_BLACK_HOLE, - SPLICED_ENDLESS_MODE, - EVIOLITE, -} +import { Unlockables } from "#enums/unlockables"; export function getUnlockableName(unlockable: Unlockables) { switch (unlockable) { diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index f60bfa808ca..a2dfe83e996 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -7,11 +7,7 @@ import { Command } from "#enums/command"; import MessageUiHandler from "#app/ui/message-ui-handler"; import { UiMode } from "#enums/ui-mode"; import { BooleanHolder, toReadableString, randInt, getLocalizedSpriteKey } from "#app/utils/common"; -import { - PokemonFormChangeItemModifier, - PokemonHeldItemModifier, - SwitchEffectTransferModifier, -} from "#app/modifier/modifier"; +import type { PokemonFormChangeItemModifier, PokemonHeldItemModifier } from "#app/modifier/modifier"; import { allMoves } from "#app/data/data-lists"; import { Gender, getGenderColor, getGenderSymbol } from "#app/data/gender"; import { StatusEffect } from "#enums/status-effect"; @@ -226,7 +222,7 @@ export default class PartyUiHandler extends MessageUiHandler { public static FilterItemMaxStacks = (pokemon: PlayerPokemon, modifier: PokemonHeldItemModifier) => { const matchingModifier = globalScene.findModifier( - m => m instanceof PokemonHeldItemModifier && m.pokemonId === pokemon.id && m.matchType(modifier), + m => m.is("PokemonHeldItemModifier") && m.pokemonId === pokemon.id && m.matchType(modifier), ) as PokemonHeldItemModifier; if (matchingModifier && matchingModifier.stackCount === matchingModifier.getMaxStackCount()) { return i18next.t("partyUiHandler:tooManyItems", { pokemonName: getPokemonNameWithAffix(pokemon, false) }); @@ -554,7 +550,7 @@ export default class PartyUiHandler extends MessageUiHandler { // this returns `undefined` if the new pokemon doesn't have the item at all, otherwise it returns the `pokemonHeldItemModifier` for that item const matchingModifier = globalScene.findModifier( m => - m instanceof PokemonHeldItemModifier && + m.is("PokemonHeldItemModifier") && m.pokemonId === newPokemon.id && m.matchType(this.getTransferrableItemsFromPokemon(pokemon)[this.transferOptionCursor]), ) as PokemonHeldItemModifier; @@ -687,7 +683,7 @@ export default class PartyUiHandler extends MessageUiHandler { private getTransferrableItemsFromPokemon(pokemon: PlayerPokemon) { return globalScene.findModifiers( - m => m instanceof PokemonHeldItemModifier && m.isTransferable && m.pokemonId === pokemon.id, + m => m.is("PokemonHeldItemModifier") && m.isTransferable && m.pokemonId === pokemon.id, ) as PokemonHeldItemModifier[]; } @@ -928,7 +924,7 @@ export default class PartyUiHandler extends MessageUiHandler { /** Initialize item quantities for the selected Pokemon */ const itemModifiers = globalScene.findModifiers( m => - m instanceof PokemonHeldItemModifier && + m.is("PokemonHeldItemModifier") && m.isTransferable && m.pokemonId === globalScene.getPlayerParty()[this.cursor].id, ) as PokemonHeldItemModifier[]; @@ -1165,8 +1161,7 @@ export default class PartyUiHandler extends MessageUiHandler { return !!( this.partyUiMode !== PartyUiMode.FAINT_SWITCH && globalScene.findModifier( - m => - m instanceof SwitchEffectTransferModifier && m.pokemonId === globalScene.getPlayerField()[this.fieldIndex].id, + m => m.is("SwitchEffectTransferModifier") && m.pokemonId === globalScene.getPlayerField()[this.fieldIndex].id, ) ); } @@ -1185,7 +1180,7 @@ export default class PartyUiHandler extends MessageUiHandler { private getItemModifiers(pokemon: Pokemon): PokemonHeldItemModifier[] { return ( (globalScene.findModifiers( - m => m instanceof PokemonHeldItemModifier && m.isTransferable && m.pokemonId === pokemon.id, + m => m.is("PokemonHeldItemModifier") && m.isTransferable && m.pokemonId === pokemon.id, ) as PokemonHeldItemModifier[]) ?? [] ); } @@ -1565,7 +1560,7 @@ export default class PartyUiHandler extends MessageUiHandler { getFormChangeItemsModifiers(pokemon: Pokemon) { let formChangeItemModifiers = globalScene.findModifiers( - m => m instanceof PokemonFormChangeItemModifier && m.pokemonId === pokemon.id, + m => m.is("PokemonFormChangeItemModifier") && m.pokemonId === pokemon.id, ) as PokemonFormChangeItemModifier[]; const ultraNecrozmaModifiers = formChangeItemModifiers.filter( m => m.active && m.formChangeItem === FormChangeItem.ULTRANECROZIUM_Z, diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 0b1e690a918..88f881746bb 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -8,7 +8,7 @@ import i18next from "i18next"; import type BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; import { starterColors } from "#app/global-vars/starter-colors"; import { globalScene } from "#app/global-scene"; -import type { Ability } from "#app/data/abilities/ability-class"; +import type { Ability } from "#app/data/abilities/ability"; import { allAbilities } from "#app/data/data-lists"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { GrowthRate, getGrowthRateColor } from "#app/data/exp"; diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index 05b0ea2097f..d30322de293 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -33,7 +33,7 @@ import { loggedInUser } from "#app/account"; import type { Variant } from "#app/sprites/variant"; import { getVariantTint } from "#app/sprites/variant"; import { Button } from "#enums/buttons"; -import type { Ability } from "#app/data/abilities/ability-class"; +import type { Ability } from "#app/data/abilities/ability"; import i18next from "i18next"; import { modifierSortFunc } from "#app/modifier/modifier"; import { PlayerGender } from "#enums/player-gender"; diff --git a/src/ui/text.ts b/src/ui/text.ts index d3afdef666f..8812d8ee4a8 100644 --- a/src/ui/text.ts +++ b/src/ui/text.ts @@ -4,7 +4,7 @@ import type Phaser from "phaser"; import BBCodeText from "phaser3-rex-plugins/plugins/gameobjects/tagtext/bbcodetext/BBCodeText"; import InputText from "phaser3-rex-plugins/plugins/inputtext"; import { globalScene } from "#app/global-scene"; -import { ModifierTier } from "../modifier/modifier-tier"; +import { ModifierTier } from "../enums/modifier-tier"; import i18next from "#app/plugins/i18n"; export enum TextStyle { diff --git a/src/utils/modifier-utils.ts b/src/utils/modifier-utils.ts new file mode 100644 index 00000000000..3be4af3730c --- /dev/null +++ b/src/utils/modifier-utils.ts @@ -0,0 +1,35 @@ +import { ModifierPoolType } from "#enums/modifier-pool-type"; +import { + dailyStarterModifierPool, + enemyBuffModifierPool, + modifierPool, + trainerModifierPool, + wildModifierPool, +} from "#app/modifier/modifier-pools"; +import type { ModifierPool, ModifierTypeFunc } from "#app/@types/modifier-types"; +import { modifierTypes } from "#app/data/data-lists"; +import type { ModifierType } from "#app/modifier/modifier-type"; + +export function getModifierPoolForType(poolType: ModifierPoolType): ModifierPool { + switch (poolType) { + case ModifierPoolType.PLAYER: + return modifierPool; + case ModifierPoolType.WILD: + return wildModifierPool; + case ModifierPoolType.TRAINER: + return trainerModifierPool; + case ModifierPoolType.ENEMY_BUFF: + return enemyBuffModifierPool; + case ModifierPoolType.DAILY_STARTER: + return dailyStarterModifierPool; + } +} + +// TODO: document this +export function getModifierType(modifierTypeFunc: ModifierTypeFunc): ModifierType { + const modifierType = modifierTypeFunc(); + if (!modifierType.id) { + modifierType.id = Object.keys(modifierTypes).find(k => modifierTypes[k] === modifierTypeFunc)!; // TODO: is this bang correct? + } + return modifierType; +} diff --git a/test/abilities/healer.test.ts b/test/abilities/healer.test.ts index 7f71be7b86e..9d252523cc8 100644 --- a/test/abilities/healer.test.ts +++ b/test/abilities/healer.test.ts @@ -6,9 +6,9 @@ import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi, type MockInstance } from "vitest"; import { isNullOrUndefined } from "#app/utils/common"; -import { PostTurnResetStatusAbAttr } from "#app/data/abilities/ability"; import { allAbilities } from "#app/data/data-lists"; import type Pokemon from "#app/field/pokemon"; +import type { PostTurnResetStatusAbAttr } from "#app/@types/ability-types"; describe("Abilities - Healer", () => { let phaserGame: Phaser.Game; @@ -38,7 +38,7 @@ describe("Abilities - Healer", () => { .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); - healerAttr = allAbilities[AbilityId.HEALER].getAttrs(PostTurnResetStatusAbAttr)[0]; + healerAttr = allAbilities[AbilityId.HEALER].getAttrs("PostTurnResetStatusAbAttr")[0]; healerAttrSpy = vi .spyOn(healerAttr, "getCondition") .mockReturnValue((pokemon: Pokemon) => !isNullOrUndefined(pokemon.getAlly())); diff --git a/test/abilities/neutralizing_gas.test.ts b/test/abilities/neutralizing_gas.test.ts index 067d164e835..51d2bed3ff0 100644 --- a/test/abilities/neutralizing_gas.test.ts +++ b/test/abilities/neutralizing_gas.test.ts @@ -1,7 +1,6 @@ import { BattlerIndex } from "#enums/battler-index"; import type { CommandPhase } from "#app/phases/command-phase"; import { Command } from "#enums/command"; -import { PostSummonWeatherChangeAbAttr } from "#app/data/abilities/ability"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; import { MoveId } from "#enums/move-id"; @@ -178,7 +177,7 @@ describe("Abilities - Neutralizing Gas", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const enemy = game.scene.getEnemyPokemon()!; - const weatherChangeAttr = enemy.getAbilityAttrs(PostSummonWeatherChangeAbAttr, false)[0]; + const weatherChangeAttr = enemy.getAbilityAttrs("PostSummonWeatherChangeAbAttr", false)[0]; vi.spyOn(weatherChangeAttr, "applyPostSummon"); expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeDefined(); diff --git a/test/abilities/normal-move-type-change.test.ts b/test/abilities/normal-move-type-change.test.ts index 03fb5b2e7be..d9e39b32a7c 100644 --- a/test/abilities/normal-move-type-change.test.ts +++ b/test/abilities/normal-move-type-change.test.ts @@ -9,7 +9,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { TYPE_BOOST_ITEM_BOOST_PERCENT } from "#app/constants"; import { allAbilities } from "#app/data/data-lists"; -import { MoveTypeChangeAbAttr } from "#app/data/abilities/ability"; import { toDmgValue } from "#app/utils/common"; /** @@ -160,7 +159,7 @@ describe.each([ // get the power boost from the ability so we can compare it to the item // @ts-expect-error power multiplier is private - const boost = allAbilities[ab]?.getAttrs(MoveTypeChangeAbAttr)[0]?.powerMultiplier; + const boost = allAbilities[ab]?.getAttrs("MoveTypeChangeAbAttr")[0]?.powerMultiplier; expect(boost, "power boost should be defined").toBeDefined(); const powerSpy = vi.spyOn(testMoveInstance, "calculateBattlePower"); @@ -177,7 +176,7 @@ describe.each([ // get the power boost from the ability so we can compare it to the item // @ts-expect-error power multiplier is private - const boost = allAbilities[ab]?.getAttrs(MoveTypeChangeAbAttr)[0]?.powerMultiplier; + const boost = allAbilities[ab]?.getAttrs("MoveTypeChangeAbAttr")[0]?.powerMultiplier; expect(boost, "power boost should be defined").toBeDefined(); const tackle = allMoves[MoveId.TACKLE]; diff --git a/test/abilities/quick_draw.test.ts b/test/abilities/quick_draw.test.ts index 70b8637aa37..5e5e57fb056 100644 --- a/test/abilities/quick_draw.test.ts +++ b/test/abilities/quick_draw.test.ts @@ -1,4 +1,3 @@ -import { BypassSpeedChanceAbAttr } from "#app/data/abilities/ability"; import { allAbilities } from "#app/data/data-lists"; import { FaintPhase } from "#app/phases/faint-phase"; import { AbilityId } from "#enums/ability-id"; @@ -35,9 +34,11 @@ describe("Abilities - Quick Draw", () => { game.override.enemyAbility(AbilityId.BALL_FETCH); game.override.enemyMoveset([MoveId.TACKLE]); - vi.spyOn(allAbilities[AbilityId.QUICK_DRAW].getAttrs(BypassSpeedChanceAbAttr)[0], "chance", "get").mockReturnValue( - 100, - ); + vi.spyOn( + allAbilities[AbilityId.QUICK_DRAW].getAttrs("BypassSpeedChanceAbAttr")[0], + "chance", + "get", + ).mockReturnValue(100); }); test("makes pokemon going first in its priority bracket", async () => { diff --git a/test/abilities/sand_veil.test.ts b/test/abilities/sand_veil.test.ts index f4b322dc2e9..35a0a3347ff 100644 --- a/test/abilities/sand_veil.test.ts +++ b/test/abilities/sand_veil.test.ts @@ -1,4 +1,3 @@ -import { StatMultiplierAbAttr } from "#app/data/abilities/ability"; import { allAbilities } from "#app/data/data-lists"; import { CommandPhase } from "#app/phases/command-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; @@ -46,7 +45,7 @@ describe("Abilities - Sand Veil", () => { vi.spyOn(leadPokemon[0], "getAbility").mockReturnValue(allAbilities[AbilityId.SAND_VEIL]); - const sandVeilAttr = allAbilities[AbilityId.SAND_VEIL].getAttrs(StatMultiplierAbAttr)[0]; + const sandVeilAttr = allAbilities[AbilityId.SAND_VEIL].getAttrs("StatMultiplierAbAttr")[0]; vi.spyOn(sandVeilAttr, "applyStatStage").mockImplementation( (_pokemon, _passive, _simulated, stat, statValue, _args) => { if (stat === Stat.EVA && game.scene.arena.weather?.weatherType === WeatherType.SANDSTORM) { diff --git a/test/abilities/shield_dust.test.ts b/test/abilities/shield_dust.test.ts index e071cf7a245..db1266d3088 100644 --- a/test/abilities/shield_dust.test.ts +++ b/test/abilities/shield_dust.test.ts @@ -1,10 +1,5 @@ import { BattlerIndex } from "#enums/battler-index"; -import { - applyAbAttrs, - applyPreDefendAbAttrs, - IgnoreMoveEffectsAbAttr, - MoveEffectChanceMultiplierAbAttr, -} from "#app/data/abilities/ability"; +import { applyAbAttrs, applyPreDefendAbAttrs } from "#app/data/abilities/apply-ab-attrs"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { NumberHolder } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; @@ -57,7 +52,7 @@ describe("Abilities - Shield Dust", () => { const chance = new NumberHolder(move.chance); await applyAbAttrs( - MoveEffectChanceMultiplierAbAttr, + "MoveEffectChanceMultiplierAbAttr", phase.getUserPokemon()!, null, false, @@ -67,7 +62,7 @@ describe("Abilities - Shield Dust", () => { false, ); await applyPreDefendAbAttrs( - IgnoreMoveEffectsAbAttr, + "IgnoreMoveEffectsAbAttr", phase.getFirstTarget()!, phase.getUserPokemon()!, null, diff --git a/test/abilities/unburden.test.ts b/test/abilities/unburden.test.ts index 9748b6340f0..6e24e10d168 100644 --- a/test/abilities/unburden.test.ts +++ b/test/abilities/unburden.test.ts @@ -1,5 +1,4 @@ import { BattlerIndex } from "#enums/battler-index"; -import { PostItemLostAbAttr } from "#app/data/abilities/ability"; import { StealHeldItemChanceAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; import type Pokemon from "#app/field/pokemon"; @@ -277,7 +276,7 @@ describe("Abilities - Unburden", () => { const [treecko, purrloin] = game.scene.getPlayerParty(); const initialTreeckoSpeed = treecko.getStat(Stat.SPD); const initialPurrloinSpeed = purrloin.getStat(Stat.SPD); - const unburdenAttr = treecko.getAbilityAttrs(PostItemLostAbAttr)[0]; + const unburdenAttr = treecko.getAbilityAttrs("PostItemLostAbAttr")[0]; vi.spyOn(unburdenAttr, "applyPostItemLost"); // Player uses Baton Pass, which also passes the Baton item diff --git a/test/battle/damage_calculation.test.ts b/test/battle/damage_calculation.test.ts index a054ad0f468..555b3a9c554 100644 --- a/test/battle/damage_calculation.test.ts +++ b/test/battle/damage_calculation.test.ts @@ -1,6 +1,6 @@ import { allMoves } from "#app/data/data-lists"; import type { EnemyPersistentModifier } from "#app/modifier/modifier"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; import { MoveId } from "#enums/move-id"; diff --git a/test/items/light_ball.test.ts b/test/items/light_ball.test.ts index 84a1689260f..a0269506909 100644 --- a/test/items/light_ball.test.ts +++ b/test/items/light_ball.test.ts @@ -1,6 +1,6 @@ import { Stat } from "#enums/stat"; import { SpeciesStatBoosterModifier } from "#app/modifier/modifier"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import i18next from "#app/plugins/i18n"; import { NumberHolder } from "#app/utils/common"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/items/lock_capsule.test.ts b/test/items/lock_capsule.test.ts index 292031a2bf0..640da4a299e 100644 --- a/test/items/lock_capsule.test.ts +++ b/test/items/lock_capsule.test.ts @@ -1,6 +1,6 @@ import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; -import { ModifierTier } from "#app/modifier/modifier-tier"; +import { ModifierTier } from "#enums/modifier-tier"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import { UiMode } from "#enums/ui-mode"; import GameManager from "#test/testUtils/gameManager"; diff --git a/test/items/metal_powder.test.ts b/test/items/metal_powder.test.ts index 20b0b90a766..576b4923d6d 100644 --- a/test/items/metal_powder.test.ts +++ b/test/items/metal_powder.test.ts @@ -1,6 +1,6 @@ import { Stat } from "#enums/stat"; import { SpeciesStatBoosterModifier } from "#app/modifier/modifier"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import i18next from "#app/plugins/i18n"; import { NumberHolder } from "#app/utils/common"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/items/quick_powder.test.ts b/test/items/quick_powder.test.ts index 0192dec4635..af99f51273d 100644 --- a/test/items/quick_powder.test.ts +++ b/test/items/quick_powder.test.ts @@ -1,6 +1,6 @@ import { Stat } from "#enums/stat"; import { SpeciesStatBoosterModifier } from "#app/modifier/modifier"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import i18next from "#app/plugins/i18n"; import { NumberHolder } from "#app/utils/common"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/items/thick_club.test.ts b/test/items/thick_club.test.ts index cff080d0e42..bc019ee99f8 100644 --- a/test/items/thick_club.test.ts +++ b/test/items/thick_club.test.ts @@ -1,6 +1,6 @@ import { Stat } from "#enums/stat"; import { SpeciesStatBoosterModifier } from "#app/modifier/modifier"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import i18next from "#app/plugins/i18n"; import { NumberHolder, randInt } from "#app/utils/common"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/moves/safeguard.test.ts b/test/moves/safeguard.test.ts index 2ba53016833..6cd90bf8ac6 100644 --- a/test/moves/safeguard.test.ts +++ b/test/moves/safeguard.test.ts @@ -1,5 +1,4 @@ import { BattlerIndex } from "#enums/battler-index"; -import { PostDefendContactApplyStatusEffectAbAttr } from "#app/data/abilities/ability"; import { allAbilities } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { StatusEffect } from "#app/enums/status-effect"; @@ -139,7 +138,7 @@ describe("Moves - Safeguard", () => { it("protects from ability-inflicted status", async () => { game.override.ability(AbilityId.STATIC); vi.spyOn( - allAbilities[AbilityId.STATIC].getAttrs(PostDefendContactApplyStatusEffectAbAttr)[0], + allAbilities[AbilityId.STATIC].getAttrs("PostDefendContactApplyStatusEffectAbAttr")[0], "chance", "get", ).mockReturnValue(100); diff --git a/test/moves/secret_power.test.ts b/test/moves/secret_power.test.ts index d555431656f..39498782b58 100644 --- a/test/moves/secret_power.test.ts +++ b/test/moves/secret_power.test.ts @@ -11,7 +11,6 @@ import { StatusEffect } from "#enums/status-effect"; import { BattlerIndex } from "#enums/battler-index"; import { ArenaTagType } from "#enums/arena-tag-type"; import { ArenaTagSide } from "#enums/arena-tag-side"; -import { MoveEffectChanceMultiplierAbAttr } from "#app/data/abilities/ability"; import { allAbilities } from "#app/data/data-lists"; describe("Moves - Secret Power", () => { @@ -68,7 +67,7 @@ describe("Moves - Secret Power", () => { .battleStyle("double"); await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); - const sereneGraceAttr = allAbilities[AbilityId.SERENE_GRACE].getAttrs(MoveEffectChanceMultiplierAbAttr)[0]; + const sereneGraceAttr = allAbilities[AbilityId.SERENE_GRACE].getAttrs("MoveEffectChanceMultiplierAbAttr")[0]; vi.spyOn(sereneGraceAttr, "canApply"); game.move.select(MoveId.WATER_PLEDGE, 0, BattlerIndex.ENEMY); diff --git a/test/mystery-encounter/encounters/clowning-around-encounter.test.ts b/test/mystery-encounter/encounters/clowning-around-encounter.test.ts index 778f8397417..526a3a0ab67 100644 --- a/test/mystery-encounter/encounters/clowning-around-encounter.test.ts +++ b/test/mystery-encounter/encounters/clowning-around-encounter.test.ts @@ -20,7 +20,7 @@ import { UiMode } from "#enums/ui-mode"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; -import { ModifierTier } from "#app/modifier/modifier-tier"; +import { ModifierTier } from "#enums/modifier-tier"; import { ClowningAroundEncounter } from "#app/data/mystery-encounters/encounters/clowning-around-encounter"; import { TrainerType } from "#enums/trainer-type"; import { AbilityId } from "#enums/ability-id"; @@ -29,7 +29,7 @@ import { Button } from "#enums/buttons"; import type PartyUiHandler from "#app/ui/party-ui-handler"; import type OptionSelectUiHandler from "#app/ui/settings/option-select-ui-handler"; import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import { BerryType } from "#enums/berry-type"; import type { PokemonHeldItemModifier } from "#app/modifier/modifier"; import { PokemonType } from "#enums/pokemon-type"; diff --git a/test/mystery-encounter/encounters/delibirdy-encounter.test.ts b/test/mystery-encounter/encounters/delibirdy-encounter.test.ts index 0d1094831bc..e569c1d7789 100644 --- a/test/mystery-encounter/encounters/delibirdy-encounter.test.ts +++ b/test/mystery-encounter/encounters/delibirdy-encounter.test.ts @@ -26,7 +26,7 @@ import { } from "#app/modifier/modifier"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import { generateModifierType } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import { BerryType } from "#enums/berry-type"; const namespace = "mysteryEncounters/delibirdy"; diff --git a/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts b/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts index 96c4adf67c2..0aa1886b8e1 100644 --- a/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts +++ b/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts @@ -11,13 +11,13 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; import { PokemonNatureWeightModifier } from "#app/modifier/modifier"; import { generateModifierType } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import { GlobalTradeSystemEncounter } from "#app/data/mystery-encounters/encounters/global-trade-system-encounter"; import { CIVILIZATION_ENCOUNTER_BIOMES } from "#app/data/mystery-encounters/mystery-encounters"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import { UiMode } from "#enums/ui-mode"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; -import { ModifierTier } from "#app/modifier/modifier-tier"; +import { ModifierTier } from "#enums/modifier-tier"; import * as Utils from "#app/utils/common"; const namespace = "mysteryEncounters/globalTradeSystem"; diff --git a/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts b/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts index 948e42547de..9c5660cb25c 100644 --- a/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts +++ b/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts @@ -14,7 +14,7 @@ import { UiMode } from "#enums/ui-mode"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; -import { ModifierTier } from "#app/modifier/modifier-tier"; +import { ModifierTier } from "#enums/modifier-tier"; import { MysteriousChallengersEncounter } from "#app/data/mystery-encounters/encounters/mysterious-challengers-encounter"; import { TrainerConfig } from "#app/data/trainers/trainer-config"; import { TrainerPartyCompoundTemplate } from "#app/data/trainers/TrainerPartyTemplate"; diff --git a/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts b/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts index 47c75eb19fc..2014cb215a4 100644 --- a/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts +++ b/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts @@ -14,8 +14,9 @@ import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { SpeciesId } from "#enums/species-id"; import { PokemonMove } from "#app/data/moves/pokemon-move"; import { HealShopCostModifier, HitHealModifier, TurnHealModifier } from "#app/modifier/modifier"; -import { ModifierTier } from "#app/modifier/modifier-tier"; -import { modifierTypes, type PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; +import { ModifierTier } from "#enums/modifier-tier"; +import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import { CommandPhase } from "#app/phases/command-phase"; import { MovePhase } from "#app/phases/move-phase"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; diff --git a/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts b/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts index 12545b8d70a..60ca87d3ae2 100644 --- a/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts +++ b/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts @@ -26,7 +26,7 @@ import { BerryType } from "#enums/berry-type"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { Stat } from "#enums/stat"; import type { BerryModifier } from "#app/modifier/modifier"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; const namespace = "mysteryEncounters/uncommonBreed"; diff --git a/test/mystery-encounter/encounters/weird-dream-encounter.test.ts b/test/mystery-encounter/encounters/weird-dream-encounter.test.ts index 2ad74b48540..dc5c53a75e7 100644 --- a/test/mystery-encounter/encounters/weird-dream-encounter.test.ts +++ b/test/mystery-encounter/encounters/weird-dream-encounter.test.ts @@ -19,7 +19,7 @@ import { WeirdDreamEncounter } from "#app/data/mystery-encounters/encounters/wei import * as EncounterTransformationSequence from "#app/data/mystery-encounters/utils/encounter-transformation-sequence"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import { CommandPhase } from "#app/phases/command-phase"; -import { ModifierTier } from "#app/modifier/modifier-tier"; +import { ModifierTier } from "#enums/modifier-tier"; const namespace = "mysteryEncounters/weirdDream"; const defaultParty = [SpeciesId.MAGBY, SpeciesId.HAUNTER, SpeciesId.ABRA]; diff --git a/test/phases/form-change-phase.test.ts b/test/phases/form-change-phase.test.ts index 8531375a48b..99c072bdafe 100644 --- a/test/phases/form-change-phase.test.ts +++ b/test/phases/form-change-phase.test.ts @@ -6,7 +6,7 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import { PokemonType } from "#enums/pokemon-type"; import { generateModifierType } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; describe("Form Change Phase", () => { let phaserGame: Phaser.Game; diff --git a/test/phases/game-over-phase.test.ts b/test/phases/game-over-phase.test.ts index c430223b774..d45330697fc 100644 --- a/test/phases/game-over-phase.test.ts +++ b/test/phases/game-over-phase.test.ts @@ -6,7 +6,7 @@ import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { achvs } from "#app/system/achv"; -import { Unlockables } from "#app/system/unlockables"; +import { Unlockables } from "#enums/unlockables"; describe("Game Over Phase", () => { let phaserGame: Phaser.Game; diff --git a/test/phases/select-modifier-phase.test.ts b/test/phases/select-modifier-phase.test.ts index 083b7d16f10..3639d34d25e 100644 --- a/test/phases/select-modifier-phase.test.ts +++ b/test/phases/select-modifier-phase.test.ts @@ -1,9 +1,10 @@ import type BattleScene from "#app/battle-scene"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { PlayerPokemon } from "#app/field/pokemon"; -import { ModifierTier } from "#app/modifier/modifier-tier"; +import { ModifierTier } from "#enums/modifier-tier"; import type { CustomModifierSettings } from "#app/modifier/modifier-type"; -import { ModifierTypeOption, modifierTypes } from "#app/modifier/modifier-type"; +import { ModifierTypeOption } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { UiMode } from "#enums/ui-mode"; diff --git a/test/testUtils/gameManager.ts b/test/testUtils/gameManager.ts index 128217a6472..5d3ed3b6c8c 100644 --- a/test/testUtils/gameManager.ts +++ b/test/testUtils/gameManager.ts @@ -6,7 +6,8 @@ import Trainer from "#app/field/trainer"; import { getGameMode } from "#app/game-mode"; import { GameModes } from "#enums/game-modes"; import { globalScene } from "#app/global-scene"; -import { ModifierTypeOption, modifierTypes } from "#app/modifier/modifier-type"; +import { ModifierTypeOption } from "#app/modifier/modifier-type"; +import { modifierTypes } from "#app/data/data-lists"; import overrides from "#app/overrides"; import { CheckSwitchPhase } from "#app/phases/check-switch-phase"; import { CommandPhase } from "#app/phases/command-phase"; diff --git a/test/testUtils/helpers/field-helper.ts b/test/testUtils/helpers/field-helper.ts index 72498fd8e16..2866c01209f 100644 --- a/test/testUtils/helpers/field-helper.ts +++ b/test/testUtils/helpers/field-helper.ts @@ -4,7 +4,7 @@ import type { globalScene } from "#app/global-scene"; // -- end tsdoc imports -- import type { BattlerIndex } from "#enums/battler-index"; -import type { Ability } from "#app/data/abilities/ability-class"; +import type { Ability } from "#app/data/abilities/ability"; import { allAbilities } from "#app/data/data-lists"; import type Pokemon from "#app/field/pokemon"; import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; diff --git a/test/testUtils/helpers/overridesHelper.ts b/test/testUtils/helpers/overridesHelper.ts index 32219fa833c..c01acbe0f2e 100644 --- a/test/testUtils/helpers/overridesHelper.ts +++ b/test/testUtils/helpers/overridesHelper.ts @@ -4,7 +4,7 @@ import { AbilityId } from "#enums/ability-id"; import type { ModifierOverride } from "#app/modifier/modifier-type"; import type { BattleStyle } from "#app/overrides"; import Overrides, { defaultOverrides } from "#app/overrides"; -import type { Unlockables } from "#app/system/unlockables"; +import type { Unlockables } from "#enums/unlockables"; import { BiomeId } from "#enums/biome-id"; import { MoveId } from "#enums/move-id"; import type { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; diff --git a/test/testUtils/testFileInitialization.ts b/test/testUtils/testFileInitialization.ts index ba90cba7d5b..da390870300 100644 --- a/test/testUtils/testFileInitialization.ts +++ b/test/testUtils/testFileInitialization.ts @@ -5,6 +5,7 @@ import { initBiomes } from "#app/data/balance/biomes"; import { initEggMoves } from "#app/data/balance/egg-moves"; import { initPokemonPrevolutions, initPokemonStarters } from "#app/data/balance/pokemon-evolutions"; import { initMoves } from "#app/data/moves/move"; +import { initModifierPools } from "#app/modifier/init-modifier-pools"; import { initMysteryEncounters } from "#app/data/mystery-encounters/mystery-encounters"; import { initPokemonForms } from "#app/data/pokemon-forms"; import { initSpecies } from "#app/data/pokemon-species"; @@ -22,6 +23,7 @@ import InputText from "phaser3-rex-plugins/plugins/inputtext"; import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; import { manageListeners } from "./listenersManager"; import { initI18n } from "#app/plugins/i18n"; +import { initModifierTypes } from "#app/modifier/modifier-type"; let wasInitialized = false; /** @@ -88,6 +90,8 @@ export function initTestFile() { if (!wasInitialized) { wasInitialized = true; initI18n(); + initModifierTypes(); + initModifierPools(); initVouchers(); initAchievements(); initStatsKeys(); From ff9aefb0e549aa225ac7259cfd48888592665d06 Mon Sep 17 00:00:00 2001 From: Dean <69436131+emdeann@users.noreply.github.com> Date: Wed, 11 Jun 2025 22:28:27 -0700 Subject: [PATCH 233/262] [Bug] Activate `PostSummon` Abilities in Speed and Priority Order https://github.com/pagefaultgames/pokerogue/pull/5513 * Add prependToPhaseWithCondition and use it in SummonPhase to determine speed order * Move logic to PostSummonPhase * Add test base * Pivot to using sort strategy instead * Add and update tests * Support priority ability activations * Ensure priority abilities are still activated on switch in * Add test for priority * Update to use priority numbers instead of a boolean * Add ability priorities to constructors * Move sorting to BattleScene * Rename phase file * Update import * Move application to applyPostSummonAbAttrs and stop assuming no other phases in queue * Ensure all PostSummonPhases from encounters are added at the same time * Switch to priority queue approach * Ensure that zero/negative priority activations happen after postsummonphase * Revert 07646fe (not needed due to stable sort) * Always create separate ability phases for passive and use boolean instead of priority number when applying * Add test for dynamic updates * Add BattlerIndex import * Clear queues for testing * Benjie suggestion * Split files * Update import in battlescene * Remove extra spaces added by VSCode * Fix other conflicts * Update PhaseManager * Update to use PhaseManager * Immediately start postsummons * Fix test * Fix BattlerIndex import * Remove unused imports * Fix postsummon application * Make priority readonly --- src/data/abilities/ability.ts | 36 +++--- src/data/abilities/apply-ab-attrs.ts | 7 +- src/data/phase-priority-queue.ts | 97 ++++++++++++++++ src/enums/dynamic-phase-type.ts | 6 + src/field/pokemon.ts | 4 + src/phase-manager.ts | 108 ++++++++++++++++-- src/phases/activate-priority-queue-phase.ts | 23 ++++ .../post-summon-activate-ability-phase.ts | 27 +++++ src/phases/post-summon-phase.ts | 7 +- src/phases/switch-summon-phase.ts | 2 +- .../ability_activation_order.test.ts | 95 +++++++++++++++ 11 files changed, 382 insertions(+), 30 deletions(-) create mode 100644 src/data/phase-priority-queue.ts create mode 100644 src/enums/dynamic-phase-type.ts create mode 100644 src/phases/activate-priority-queue-phase.ts create mode 100644 src/phases/post-summon-activate-ability-phase.ts create mode 100644 test/abilities/ability_activation_order.test.ts diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 2efe3607b4f..d8743a0effe 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -86,6 +86,7 @@ export class Ability implements Localizable { public name: string; public description: string; public generation: number; + public readonly postSummonPriority: number; public isBypassFaint: boolean; public isIgnorable: boolean; public isSuppressable = true; @@ -94,11 +95,12 @@ export class Ability implements Localizable { public attrs: AbAttr[]; public conditions: AbAttrCondition[]; - constructor(id: AbilityId, generation: number) { + constructor(id: AbilityId, generation: number, postSummonPriority = 0) { this.id = id; this.nameAppend = ""; this.generation = generation; + this.postSummonPriority = postSummonPriority; this.attrs = []; this.conditions = []; @@ -8104,7 +8106,7 @@ export function initAbilities() { .conditionalAttr(p => globalScene.currentBattle.double && [ AbilityId.PLUS, AbilityId.MINUS ].some(a => (p.getAlly()?.hasAbility(a) ?? false)), StatMultiplierAbAttr, Stat.SPATK, 1.5), new Ability(AbilityId.MINUS, 3) .conditionalAttr(p => globalScene.currentBattle.double && [ AbilityId.PLUS, AbilityId.MINUS ].some(a => (p.getAlly()?.hasAbility(a) ?? false)), StatMultiplierAbAttr, Stat.SPATK, 1.5), - new Ability(AbilityId.FORECAST, 3) + new Ability(AbilityId.FORECAST, 3, -2) .uncopiable() .unreplaceable() .attr(NoFusionAbilityAbAttr) @@ -8238,7 +8240,7 @@ export function initAbilities() { .attr(StatusEffectImmunityAbAttr) .condition(getWeatherCondition(WeatherType.SUNNY, WeatherType.HARSH_SUN)) .ignorable(), - new Ability(AbilityId.KLUTZ, 4) + new Ability(AbilityId.KLUTZ, 4, 1) .unimplemented(), new Ability(AbilityId.MOLD_BREAKER, 4) .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonMoldBreaker", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) @@ -8290,7 +8292,7 @@ export function initAbilities() { .uncopiable() .unsuppressable() .unreplaceable(), - new Ability(AbilityId.FLOWER_GIFT, 4) + new Ability(AbilityId.FLOWER_GIFT, 4, -2) .conditionalAttr(getWeatherCondition(WeatherType.SUNNY || WeatherType.HARSH_SUN), StatMultiplierAbAttr, Stat.ATK, 1.5) .conditionalAttr(getWeatherCondition(WeatherType.SUNNY || WeatherType.HARSH_SUN), StatMultiplierAbAttr, Stat.SPDEF, 1.5) .conditionalAttr(getWeatherCondition(WeatherType.SUNNY || WeatherType.HARSH_SUN), AllyStatMultiplierAbAttr, Stat.ATK, 1.5) @@ -8312,7 +8314,7 @@ export function initAbilities() { new Ability(AbilityId.CONTRARY, 5) .attr(StatStageChangeMultiplierAbAttr, -1) .ignorable(), - new Ability(AbilityId.UNNERVE, 5) + new Ability(AbilityId.UNNERVE, 5, 1) .attr(PreventBerryUseAbAttr), new Ability(AbilityId.DEFIANT, 5) .attr(PostStatStageChangeStatStageChangeAbAttr, (_target, _statsChanged, stages) => stages < 0, [ Stat.ATK ], 2), @@ -8554,7 +8556,7 @@ export function initAbilities() { .attr(PostDefendStatStageChangeAbAttr, (_target, user, move) => user.getMoveType(move) === PokemonType.WATER && move.category !== MoveCategory.STATUS, Stat.DEF, 2), new Ability(AbilityId.MERCILESS, 7) .attr(ConditionalCritAbAttr, (_user, target, _move) => target?.status?.effect === StatusEffect.TOXIC || target?.status?.effect === StatusEffect.POISON), - new Ability(AbilityId.SHIELDS_DOWN, 7) + new Ability(AbilityId.SHIELDS_DOWN, 7, -1) .attr(PostBattleInitFormChangeAbAttr, () => 0) .attr(PostSummonFormChangeAbAttr, p => p.formIndex % 7 + (p.getHpRatio() <= 0.5 ? 7 : 0)) .attr(PostTurnFormChangeAbAttr, p => p.formIndex % 7 + (p.getHpRatio() <= 0.5 ? 7 : 0)) @@ -8592,7 +8594,7 @@ export function initAbilities() { .attr(MoveTypeChangeAbAttr, PokemonType.ELECTRIC, 1.2, (_user, _target, move) => move.type === PokemonType.NORMAL), new Ability(AbilityId.SURGE_SURFER, 7) .conditionalAttr(getTerrainCondition(TerrainType.ELECTRIC), StatMultiplierAbAttr, Stat.SPD, 2), - new Ability(AbilityId.SCHOOLING, 7) + new Ability(AbilityId.SCHOOLING, 7, -1) .attr(PostBattleInitFormChangeAbAttr, () => 0) .attr(PostSummonFormChangeAbAttr, p => p.level < 20 || p.getHpRatio() <= 0.25 ? 0 : 1) .attr(PostTurnFormChangeAbAttr, p => p.level < 20 || p.getHpRatio() <= 0.25 ? 0 : 1) @@ -8761,7 +8763,7 @@ export function initAbilities() { .ignorable(), new Ability(AbilityId.RIPEN, 8) .attr(DoubleBerryEffectAbAttr), - new Ability(AbilityId.ICE_FACE, 8) + new Ability(AbilityId.ICE_FACE, 8, -2) .attr(NoTransformAbilityAbAttr) .attr(NoFusionAbilityAbAttr) // Add BattlerTagType.ICE_FACE if the pokemon is in ice face form @@ -8781,7 +8783,7 @@ export function initAbilities() { .ignorable(), new Ability(AbilityId.POWER_SPOT, 8) .attr(AllyMoveCategoryPowerBoostAbAttr, [ MoveCategory.SPECIAL, MoveCategory.PHYSICAL ], 1.3), - new Ability(AbilityId.MIMICRY, 8) + new Ability(AbilityId.MIMICRY, 8, -1) .attr(TerrainEventTypeChangeAbAttr), new Ability(AbilityId.SCREEN_CLEANER, 8) .attr(PostSummonRemoveArenaTagAbAttr, [ ArenaTagType.AURORA_VEIL, ArenaTagType.LIGHT_SCREEN, ArenaTagType.REFLECT ]), @@ -8796,7 +8798,7 @@ export function initAbilities() { .edgeCase(), // interacts incorrectly with rock head. It's meant to switch abilities before recoil would apply so that a pokemon with rock head would lose rock head first and still take the recoil new Ability(AbilityId.GORILLA_TACTICS, 8) .attr(GorillaTacticsAbAttr), - new Ability(AbilityId.NEUTRALIZING_GAS, 8) + new Ability(AbilityId.NEUTRALIZING_GAS, 8, 2) .attr(PostSummonAddArenaTagAbAttr, true, ArenaTagType.NEUTRALIZING_GAS, 0) .attr(PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr) .uncopiable() @@ -8828,14 +8830,14 @@ export function initAbilities() { .attr(PostVictoryStatStageChangeAbAttr, Stat.ATK, 1), new Ability(AbilityId.GRIM_NEIGH, 8) .attr(PostVictoryStatStageChangeAbAttr, Stat.SPATK, 1), - new Ability(AbilityId.AS_ONE_GLASTRIER, 8) + new Ability(AbilityId.AS_ONE_GLASTRIER, 8, 1) .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonAsOneGlastrier", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) .attr(PreventBerryUseAbAttr) .attr(PostVictoryStatStageChangeAbAttr, Stat.ATK, 1) .uncopiable() .unreplaceable() .unsuppressable(), - new Ability(AbilityId.AS_ONE_SPECTRIER, 8) + new Ability(AbilityId.AS_ONE_SPECTRIER, 8, 1) .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonAsOneSpectrier", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) .attr(PreventBerryUseAbAttr) .attr(PostVictoryStatStageChangeAbAttr, Stat.SPATK, 1) @@ -8893,12 +8895,12 @@ export function initAbilities() { .edgeCase(), // Encore, Frenzy, and other non-`TURN_END` tags don't lapse correctly on the commanding Pokemon. new Ability(AbilityId.ELECTROMORPHOSIS, 9) .attr(PostDefendApplyBattlerTagAbAttr, (_target, _user, move) => move.category !== MoveCategory.STATUS, BattlerTagType.CHARGED), - new Ability(AbilityId.PROTOSYNTHESIS, 9) + new Ability(AbilityId.PROTOSYNTHESIS, 9, -2) .conditionalAttr(getWeatherCondition(WeatherType.SUNNY, WeatherType.HARSH_SUN), PostSummonAddBattlerTagAbAttr, BattlerTagType.PROTOSYNTHESIS, 0, true) .attr(PostWeatherChangeAddBattlerTagAttr, BattlerTagType.PROTOSYNTHESIS, 0, WeatherType.SUNNY, WeatherType.HARSH_SUN) .uncopiable() .attr(NoTransformAbilityAbAttr), - new Ability(AbilityId.QUARK_DRIVE, 9) + new Ability(AbilityId.QUARK_DRIVE, 9, -2) .conditionalAttr(getTerrainCondition(TerrainType.ELECTRIC), PostSummonAddBattlerTagAbAttr, BattlerTagType.QUARK_DRIVE, 0, true) .attr(PostTerrainChangeAddBattlerTagAttr, BattlerTagType.QUARK_DRIVE, 0, TerrainType.ELECTRIC) .uncopiable() @@ -8942,7 +8944,7 @@ export function initAbilities() { new Ability(AbilityId.SUPREME_OVERLORD, 9) .attr(VariableMovePowerBoostAbAttr, (user, _target, _move) => 1 + 0.1 * Math.min(user.isPlayer() ? globalScene.arena.playerFaints : globalScene.currentBattle.enemyFaints, 5)) .partial(), // Should only boost once, on summon - new Ability(AbilityId.COSTAR, 9) + new Ability(AbilityId.COSTAR, 9, -2) .attr(PostSummonCopyAllyStatsAbAttr), new Ability(AbilityId.TOXIC_DEBRIS, 9) .attr(PostDefendApplyArenaTrapTagAbAttr, (_target, _user, move) => move.category === MoveCategory.PHYSICAL, ArenaTagType.TOXIC_SPIKES) @@ -8964,7 +8966,7 @@ export function initAbilities() { .ignorable(), new Ability(AbilityId.SUPERSWEET_SYRUP, 9) .attr(PostSummonStatStageChangeAbAttr, [ Stat.EVA ], -1), - new Ability(AbilityId.HOSPITALITY, 9) + new Ability(AbilityId.HOSPITALITY, 9, -2) .attr(PostSummonAllyHealAbAttr, 4, true), new Ability(AbilityId.TOXIC_CHAIN, 9) .attr(PostAttackApplyStatusEffectAbAttr, false, 30, StatusEffect.TOXIC), @@ -8988,7 +8990,7 @@ export function initAbilities() { .uncopiable() .unreplaceable() .attr(NoTransformAbilityAbAttr), - new Ability(AbilityId.TERA_SHIFT, 9) + new Ability(AbilityId.TERA_SHIFT, 9, 2) .attr(PostSummonFormChangeAbAttr, p => p.getFormKey() ? 0 : 1) .uncopiable() .unreplaceable() diff --git a/src/data/abilities/apply-ab-attrs.ts b/src/data/abilities/apply-ab-attrs.ts index e2f8ec9c14c..fdbd2652698 100644 --- a/src/data/abilities/apply-ab-attrs.ts +++ b/src/data/abilities/apply-ab-attrs.ts @@ -470,15 +470,18 @@ export function applyPostVictoryAbAttrs( export function applyPostSummonAbAttrs( attrType: AbAttrMap[K] extends PostSummonAbAttr ? K : never, pokemon: Pokemon, + passive = false, simulated = false, ...args: any[] ): void { - applyAbAttrsInternal( - attrType, + applySingleAbAttrs( pokemon, + passive, + attrType, (attr, passive) => (attr as PostSummonAbAttr).applyPostSummon(pokemon, passive, simulated, args), (attr, passive) => (attr as PostSummonAbAttr).canApplyPostSummon(pokemon, passive, simulated, args), args, + false, simulated, ); } diff --git a/src/data/phase-priority-queue.ts b/src/data/phase-priority-queue.ts new file mode 100644 index 00000000000..b815a6ac34f --- /dev/null +++ b/src/data/phase-priority-queue.ts @@ -0,0 +1,97 @@ +import { globalScene } from "#app/global-scene"; +import type { Phase } from "#app/phase"; +import { ActivatePriorityQueuePhase } from "#app/phases/activate-priority-queue-phase"; +import type { PostSummonPhase } from "#app/phases/post-summon-phase"; +import { PostSummonActivateAbilityPhase } from "#app/phases/post-summon-activate-ability-phase"; +import { Stat } from "#enums/stat"; +import { BooleanHolder } from "#app/utils/common"; +import { TrickRoomTag } from "#app/data/arena-tag"; +import { DynamicPhaseType } from "#enums/dynamic-phase-type"; + +/** + * Stores a list of {@linkcode Phase}s + * + * Dynamically updates ordering to always pop the highest "priority", based on implementation of {@linkcode reorder} + */ +export abstract class PhasePriorityQueue { + protected abstract queue: Phase[]; + + /** + * Sorts the elements in the queue + */ + public abstract reorder(): void; + + /** + * Calls {@linkcode reorder} and shifts the queue + * @returns The front element of the queue after sorting + */ + public pop(): Phase | undefined { + this.reorder(); + return this.queue.shift(); + } + + /** + * Adds a phase to the queue + * @param phase The phase to add + */ + public push(phase: Phase): void { + this.queue.push(phase); + } + + /** + * Removes all phases from the queue + */ + public clear(): void { + this.queue.splice(0, this.queue.length); + } +} + +/** + * Priority Queue for {@linkcode PostSummonPhase} and {@linkcode PostSummonActivateAbilityPhase} + * + * Orders phases first by ability priority, then by the {@linkcode Pokemon}'s effective speed + */ +export class PostSummonPhasePriorityQueue extends PhasePriorityQueue { + protected override queue: PostSummonPhase[] = []; + + public override reorder(): void { + this.queue.sort((phaseA: PostSummonPhase, phaseB: PostSummonPhase) => { + if (phaseA.getPriority() === phaseB.getPriority()) { + return ( + (phaseB.getPokemon().getEffectiveStat(Stat.SPD) - phaseA.getPokemon().getEffectiveStat(Stat.SPD)) * + (isTrickRoom() ? -1 : 1) + ); + } + + return phaseB.getPriority() - phaseA.getPriority(); + }); + } + + public override push(phase: PostSummonPhase): void { + super.push(phase); + this.queueAbilityPhase(phase); + } + + /** + * Queues all necessary {@linkcode PostSummonActivateAbilityPhase}s for each pushed {@linkcode PostSummonPhase} + * @param phase The {@linkcode PostSummonPhase} that was pushed onto the queue + */ + private queueAbilityPhase(phase: PostSummonPhase): void { + const phasePokemon = phase.getPokemon(); + + phasePokemon.getAbilityPriorities().forEach((priority, idx) => { + this.queue.push(new PostSummonActivateAbilityPhase(phasePokemon.getBattlerIndex(), priority, !!idx)); + globalScene.phaseManager.appendToPhase( + new ActivatePriorityQueuePhase(DynamicPhaseType.POST_SUMMON), + "ActivatePriorityQueuePhase", + (p: ActivatePriorityQueuePhase) => p.getType() === DynamicPhaseType.POST_SUMMON, + ); + }); + } +} + +function isTrickRoom(): boolean { + const speedReversed = new BooleanHolder(false); + globalScene.arena.applyTags(TrickRoomTag, false, speedReversed); + return speedReversed.value; +} diff --git a/src/enums/dynamic-phase-type.ts b/src/enums/dynamic-phase-type.ts new file mode 100644 index 00000000000..a34ac371668 --- /dev/null +++ b/src/enums/dynamic-phase-type.ts @@ -0,0 +1,6 @@ +/** + * Enum representation of the phase types held by implementations of {@linkcode PhasePriorityQueue} + */ +export enum DynamicPhaseType { + POST_SUMMON +} diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 6a34d936a51..964d66d352e 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -2181,6 +2181,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return this.hasPassive() && (!canApply || this.canApplyAbility(true)) && this.getPassiveAbility().hasAttr(attrType); } + public getAbilityPriorities(): [number, number] { + return [this.getAbility().postSummonPriority, this.getPassiveAbility().postSummonPriority]; + } + /** * Gets the weight of the Pokemon with subtractive modifiers (Autotomize) happening first * and then multiplicative modifiers happening after (Heavy Metal and Light Metal) diff --git a/src/phase-manager.ts b/src/phase-manager.ts index 230e0331caf..b4fefe3f2d6 100644 --- a/src/phase-manager.ts +++ b/src/phase-manager.ts @@ -2,6 +2,7 @@ import type { Phase } from "#app/phase"; import type { default as Pokemon } from "#app/field/pokemon"; import type { PhaseMap, PhaseString } from "./@types/phase-types"; import { globalScene } from "#app/global-scene"; +import { ActivatePriorityQueuePhase } from "#app/phases/activate-priority-queue-phase"; import { AddEnemyBuffModifierPhase } from "#app/phases/add-enemy-buff-modifier-phase"; import { AttemptCapturePhase } from "#app/phases/attempt-capture-phase"; import { AttemptRunPhase } from "#app/phases/attempt-run-phase"; @@ -11,7 +12,9 @@ import { CheckStatusEffectPhase } from "#app/phases/check-status-effect-phase"; import { CheckSwitchPhase } from "#app/phases/check-switch-phase"; import { CommandPhase } from "#app/phases/command-phase"; import { CommonAnimPhase } from "#app/phases/common-anim-phase"; +import type { Constructor } from "#app/utils/common"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; +import type { DynamicPhaseType } from "#enums/dynamic-phase-type"; import { EggHatchPhase } from "#app/phases/egg-hatch-phase"; import { EggLapsePhase } from "#app/phases/egg-lapse-phase"; import { EggSummaryPhase } from "#app/phases/egg-summary-phase"; @@ -55,6 +58,7 @@ import { NextEncounterPhase } from "#app/phases/next-encounter-phase"; import { ObtainStatusEffectPhase } from "#app/phases/obtain-status-effect-phase"; import { PartyExpPhase } from "#app/phases/party-exp-phase"; import { PartyHealPhase } from "#app/phases/party-heal-phase"; +import { type PhasePriorityQueue, PostSummonPhasePriorityQueue } from "#app/data/phase-priority-queue"; import { PokemonAnimPhase } from "#app/phases/pokemon-anim-phase"; import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; import { PokemonTransformPhase } from "#app/phases/pokemon-transform-phase"; @@ -111,6 +115,7 @@ import { WeatherEffectPhase } from "#app/phases/weather-effect-phase"; * This allows for easy creation of new phases without needing to import each phase individually. */ const PHASES = Object.freeze({ + ActivatePriorityQueuePhase, AddEnemyBuffModifierPhase, AttemptCapturePhase, AttemptRunPhase, @@ -222,9 +227,19 @@ export class PhaseManager { private phaseQueuePrependSpliceIndex = -1; private nextCommandPhaseQueue: Phase[] = []; + /** Storage for {@linkcode PhasePriorityQueue}s which hold phases whose order dynamically changes */ + private dynamicPhaseQueues: PhasePriorityQueue[]; + /** Parallel array to {@linkcode dynamicPhaseQueues} - matches phase types to their queues */ + private dynamicPhaseTypes: Constructor[]; + private currentPhase: Phase | null = null; private standbyPhase: Phase | null = null; + constructor() { + this.dynamicPhaseQueues = [new PostSummonPhasePriorityQueue()]; + this.dynamicPhaseTypes = [PostSummonPhase]; + } + /* Phase Functions */ getCurrentPhase(): Phase | null { return this.currentPhase; @@ -254,7 +269,11 @@ export class PhaseManager { * @param defer boolean on which queue to add to, defaults to false, and adds to phaseQueue */ pushPhase(phase: Phase, defer = false): void { - (!defer ? this.phaseQueue : this.nextCommandPhaseQueue).push(phase); + if (this.getDynamicPhaseType(phase) !== undefined) { + this.pushDynamicPhase(phase); + } else { + (!defer ? this.phaseQueue : this.nextCommandPhaseQueue).push(phase); + } } /** @@ -283,6 +302,7 @@ export class PhaseManager { for (const queue of [this.phaseQueue, this.phaseQueuePrepend, this.conditionalQueue, this.nextCommandPhaseQueue]) { queue.splice(0, queue.length); } + this.dynamicPhaseQueues.forEach(queue => queue.clear()); this.currentPhase = null; this.standbyPhase = null; this.clearPhaseQueueSplice(); @@ -333,8 +353,9 @@ export class PhaseManager { this.currentPhase = this.phaseQueue.shift() ?? null; + const unactivatedConditionalPhases: [() => boolean, Phase][] = []; // Check if there are any conditional phases queued - if (this.conditionalQueue?.length) { + while (this.conditionalQueue?.length) { // Retrieve the first conditional phase from the queue const conditionalPhase = this.conditionalQueue.shift(); // Evaluate the condition associated with the phase @@ -343,11 +364,12 @@ export class PhaseManager { this.pushPhase(conditionalPhase[1]); } else if (conditionalPhase) { // If the condition is not met, re-add the phase back to the front of the conditional queue - this.conditionalQueue.unshift(conditionalPhase); + unactivatedConditionalPhases.push(conditionalPhase); } else { console.warn("condition phase is undefined/null!", conditionalPhase); } } + this.conditionalQueue.push(...unactivatedConditionalPhases); if (this.currentPhase) { console.log(`%cStart Phase ${this.currentPhase.constructor.name}`, "color:green;"); @@ -431,17 +453,18 @@ export class PhaseManager { } /** - * Attempt to add the input phase(s) to index after target phase in the {@linkcode phaseQueue}, else simply calls {@linkcode unshiftPhase()} - * @param phase - The phase(s) to be added - * @param targetPhase - The phase to search for in phaseQueue + * Tries to add the input phase(s) to index after target phase in the {@linkcode phaseQueue}, else simply calls {@linkcode unshiftPhase()} + * @param phase {@linkcode Phase} the phase(s) to be added + * @param targetPhase {@linkcode Phase} the type of phase to search for in {@linkcode phaseQueue} + * @param condition Condition the target phase must meet to be appended to * @returns `true` if a `targetPhase` was found to append to */ - appendToPhase(phase: Phase | Phase[], targetPhase: PhaseString): boolean { + appendToPhase(phase: Phase | Phase[], targetPhase: PhaseString, condition?: (p: Phase) => boolean): boolean { if (!Array.isArray(phase)) { phase = [phase]; } const target = PHASES[targetPhase]; - const targetIndex = this.phaseQueue.findIndex(ph => ph instanceof target); + const targetIndex = this.phaseQueue.findIndex(ph => ph instanceof target && (!condition || condition(ph))); if (targetIndex !== -1 && this.phaseQueue.length > targetIndex) { this.phaseQueue.splice(targetIndex + 1, 0, ...phase); @@ -451,6 +474,68 @@ export class PhaseManager { return false; } + /** + * Checks a phase and returns the matching {@linkcode DynamicPhaseType}, or undefined if it does not match one + * @param phase The phase to check + * @returns The corresponding {@linkcode DynamicPhaseType} or `undefined` + */ + public getDynamicPhaseType(phase: Phase | null): DynamicPhaseType | undefined { + let phaseType: DynamicPhaseType | undefined; + this.dynamicPhaseTypes.forEach((cls, index) => { + if (phase instanceof cls) { + phaseType = index; + } + }); + + return phaseType; + } + + /** + * Pushes a phase onto its corresponding dynamic queue and marks the activation point in {@linkcode phaseQueue} + * + * The {@linkcode ActivatePriorityQueuePhase} will run the top phase in the dynamic queue (not necessarily {@linkcode phase}) + * @param phase The phase to push + */ + public pushDynamicPhase(phase: Phase): void { + const type = this.getDynamicPhaseType(phase); + if (type === undefined) { + return; + } + + this.pushPhase(new ActivatePriorityQueuePhase(type)); + this.dynamicPhaseQueues[type].push(phase); + } + + /** + * Unshifts the top phase from the corresponding dynamic queue onto {@linkcode phaseQueue} + * @param type {@linkcode DynamicPhaseType} The type of dynamic phase to start + */ + public startDynamicPhaseType(type: DynamicPhaseType): void { + const phase = this.dynamicPhaseQueues[type].pop(); + if (phase) { + this.unshiftPhase(phase); + } + } + + /** + * Unshifts an {@linkcode ActivatePriorityQueuePhase} for {@linkcode phase}, then pushes {@linkcode phase} to its dynamic queue + * + * This is the same as {@linkcode pushDynamicPhase}, except the activation phase is unshifted + * + * {@linkcode phase} is not guaranteed to be the next phase from the queue to run (if the queue is not empty) + * @param phase The phase to add + * @returns + */ + public startDynamicPhase(phase: Phase): void { + const type = this.getDynamicPhaseType(phase); + if (type === undefined) { + return; + } + + this.unshiftPhase(new ActivatePriorityQueuePhase(type)); + this.dynamicPhaseQueues[type].push(phase); + } + /** * Adds a MessagePhase, either to PhaseQueuePrepend or nextCommandPhaseQueue * @param message - string for MessagePhase @@ -578,4 +663,11 @@ export class PhaseManager { ): boolean { return this.appendToPhase(this.create(phase, ...args), targetPhase); } + + public startNewDynamicPhase( + phase: T, + ...args: ConstructorParameters + ): void { + this.startDynamicPhase(this.create(phase, ...args)); + } } diff --git a/src/phases/activate-priority-queue-phase.ts b/src/phases/activate-priority-queue-phase.ts new file mode 100644 index 00000000000..df42c491676 --- /dev/null +++ b/src/phases/activate-priority-queue-phase.ts @@ -0,0 +1,23 @@ +import type { DynamicPhaseType } from "#enums/dynamic-phase-type"; +import { globalScene } from "#app/global-scene"; +import { Phase } from "#app/phase"; + +export class ActivatePriorityQueuePhase extends Phase { + public readonly phaseName = "ActivatePriorityQueuePhase"; + private type: DynamicPhaseType; + + constructor(type: DynamicPhaseType) { + super(); + this.type = type; + } + + override start() { + super.start(); + globalScene.phaseManager.startDynamicPhaseType(this.type); + this.end(); + } + + public getType(): DynamicPhaseType { + return this.type; + } +} diff --git a/src/phases/post-summon-activate-ability-phase.ts b/src/phases/post-summon-activate-ability-phase.ts new file mode 100644 index 00000000000..ba6c80d4ee0 --- /dev/null +++ b/src/phases/post-summon-activate-ability-phase.ts @@ -0,0 +1,27 @@ +import { applyPostSummonAbAttrs } from "#app/data/abilities/apply-ab-attrs"; +import { PostSummonPhase } from "#app/phases/post-summon-phase"; +import type { BattlerIndex } from "#enums/battler-index"; + +/** + * Helper to {@linkcode PostSummonPhase} which applies abilities + */ +export class PostSummonActivateAbilityPhase extends PostSummonPhase { + private priority: number; + private passive: boolean; + + constructor(battlerIndex: BattlerIndex, priority: number, passive: boolean) { + super(battlerIndex); + this.priority = priority; + this.passive = passive; + } + + start() { + applyPostSummonAbAttrs("PostSummonAbAttr", this.getPokemon(), this.passive, false); + + this.end(); + } + + public override getPriority() { + return this.priority; + } +} diff --git a/src/phases/post-summon-phase.ts b/src/phases/post-summon-phase.ts index 3acd7ca24e9..26fffd1b024 100644 --- a/src/phases/post-summon-phase.ts +++ b/src/phases/post-summon-phase.ts @@ -1,10 +1,10 @@ import { globalScene } from "#app/global-scene"; -import { applyAbAttrs, applyPostSummonAbAttrs } from "#app/data/abilities/apply-ab-attrs"; import { ArenaTrapTag } from "#app/data/arena-tag"; import { StatusEffect } from "#app/enums/status-effect"; import { PokemonPhase } from "./pokemon-phase"; import { MysteryEncounterPostSummonTag } from "#app/data/battler-tags"; import { BattlerTagType } from "#enums/battler-tag-type"; +import { applyAbAttrs } from "#app/data/abilities/apply-ab-attrs"; export class PostSummonPhase extends PokemonPhase { public readonly phaseName = "PostSummonPhase"; @@ -26,7 +26,6 @@ export class PostSummonPhase extends PokemonPhase { pokemon.lapseTag(BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON); } - applyPostSummonAbAttrs("PostSummonAbAttr", pokemon); const field = pokemon.isPlayer() ? globalScene.getPlayerField() : globalScene.getEnemyField(); for (const p of field) { applyAbAttrs("CommanderAbAttr", p, null, false); @@ -34,4 +33,8 @@ export class PostSummonPhase extends PokemonPhase { this.end(); } + + public getPriority() { + return 0; + } } diff --git a/src/phases/switch-summon-phase.ts b/src/phases/switch-summon-phase.ts index 6b76d4e8926..af03cc42b54 100644 --- a/src/phases/switch-summon-phase.ts +++ b/src/phases/switch-summon-phase.ts @@ -245,7 +245,7 @@ export class SwitchSummonPhase extends SummonPhase { } queuePostSummon(): void { - globalScene.phaseManager.unshiftNew("PostSummonPhase", this.getPokemon().getBattlerIndex()); + globalScene.phaseManager.startNewDynamicPhase("PostSummonPhase", this.getPokemon().getBattlerIndex()); } /** diff --git a/test/abilities/ability_activation_order.test.ts b/test/abilities/ability_activation_order.test.ts new file mode 100644 index 00000000000..04adf40b623 --- /dev/null +++ b/test/abilities/ability_activation_order.test.ts @@ -0,0 +1,95 @@ +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; +import { Stat } from "#enums/stat"; +import { WeatherType } from "#enums/weather-type"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Ability Activation Order", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH) + .battleStyle("single") + .disableCrits() + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH); + }); + + it("should activate the ability of the faster Pokemon first", async () => { + game.override.enemyLevel(100).ability(AbilityId.DRIZZLE).enemyAbility(AbilityId.DROUGHT); + await game.classicMode.startBattle([SpeciesId.SLOWPOKE]); + + // Enemy's ability should activate first, so sun ends up replaced with rain + expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.RAIN); + }); + + it("should consider base stat boosting items in determining order", async () => { + game.override + .startingLevel(25) + .enemyLevel(50) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.DROUGHT) + .ability(AbilityId.DRIZZLE) + .startingHeldItems([{ name: "BASE_STAT_BOOSTER", type: Stat.SPD, count: 100 }]); + + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); + expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SUNNY); + }); + + it("should consider stat boosting items in determining order", async () => { + game.override + .startingLevel(35) + .enemyLevel(50) + .enemySpecies(SpeciesId.DITTO) + .enemyAbility(AbilityId.DROUGHT) + .ability(AbilityId.DRIZZLE) + .startingHeldItems([{ name: "SPECIES_STAT_BOOSTER", type: "QUICK_POWDER" }]); + + await game.classicMode.startBattle([SpeciesId.DITTO]); + expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SUNNY); + }); + + it("should activate priority abilities first", async () => { + game.override + .startingLevel(1) + .enemyLevel(100) + .enemySpecies(SpeciesId.ACCELGOR) + .enemyAbility(AbilityId.DROUGHT) + .ability(AbilityId.NEUTRALIZING_GAS); + + await game.classicMode.startBattle([SpeciesId.SLOWPOKE]); + expect(game.scene.arena.weather).toBeUndefined(); + }); + + it("should update dynamically based on speed order", async () => { + game.override + .startingLevel(35) + .enemyLevel(50) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.SLOW_START) + .enemyPassiveAbility(AbilityId.DROUGHT) + .ability(AbilityId.DRIZZLE); + + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); + // Slow start activates and makes enemy slower, so drought activates after drizzle + expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SUNNY); + }); +}); From 425985a05687896fa72e48ae252b43c25b81ae50 Mon Sep 17 00:00:00 2001 From: Mourouh <61661226+Mourouh@users.noreply.github.com> Date: Thu, 12 Jun 2025 23:56:37 +0200 Subject: [PATCH 234/262] [Balance] Add wild encounter chance to Maushold and Dudunsparce forms (#5975) Added wild encounter chance to Maushold and Dudunsparce forms --- src/battle-scene.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index d5cb5dcae42..81c65d85e06 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1635,6 +1635,9 @@ export default class BattleScene extends SceneBase { case SpeciesId.TATSUGIRI: case SpeciesId.PALDEA_TAUROS: return randSeedInt(species.forms.length); + case SpeciesId.MAUSHOLD: + case SpeciesId.DUDUNSPARCE: + return !randSeedInt(4) ? 1 : 0; case SpeciesId.PIKACHU: if (this.currentBattle?.battleType === BattleType.TRAINER && this.currentBattle?.waveIndex < 30) { return 0; // Ban Cosplay and Partner Pika from Trainers before wave 30 From 7c6189e8126242c1b9dcec5b0ca274ee4d85758c Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Thu, 12 Jun 2025 21:30:01 -0700 Subject: [PATCH 235/262] [Refactor] Create utility function `coerceArray` (#5723) * [Refactor] Create utility function `makeArray` This replaces the `if(!Array.isArray(var)) { var = [var] }` pattern * Replace `if` with ternary, rename to `coerceArray` * Add TSDocs * Improve type inferencing * Replace missed `Array.isArray` checks * Apply Biome * Re-apply changes to phase manager * Re-apply to `SpeciesFormChangeStatusEffectTrigger` constructor Apply to new instances in test mocks --- src/data/abilities/ability.ts | 5 +-- src/data/battle-anims.ts | 4 +-- src/data/battler-tags.ts | 4 +-- .../mystery-encounter-requirements.ts | 30 +++++++++--------- .../mystery-encounters/mystery-encounter.ts | 8 ++--- .../can-learn-move-requirement.ts | 4 +-- .../utils/encounter-phase-utils.ts | 6 ++-- .../pokemon-forms/form-change-triggers.ts | 7 ++--- src/data/trainers/trainer-config.ts | 31 +++++++------------ src/field/pokemon-sprite-sparkle-handler.ts | 10 ++---- src/field/pokemon.ts | 5 ++- src/phase-manager.ts | 10 ++---- src/plugins/cache-busted-loader-plugin.ts | 10 ++---- src/plugins/vite/vite-minify-json-plugin.ts | 4 +-- src/scene-base.ts | 6 ++-- src/ui/pokemon-icon-anim-handler.ts | 10 ++---- src/utils/common.ts | 9 ++++++ test/testUtils/helpers/moveHelper.ts | 5 ++- test/testUtils/helpers/overridesHelper.ts | 10 ++---- .../mocks/mocksContainer/mockContainer.ts | 17 +++------- .../mocks/mocksContainer/mockRectangle.ts | 7 ++--- .../mocks/mocksContainer/mockSprite.ts | 10 +++--- 22 files changed, 88 insertions(+), 124 deletions(-) diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index d8743a0effe..ef4529c361e 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -9,6 +9,7 @@ import { randSeedInt, type Constructor, randSeedFloat, + coerceArray, } from "#app/utils/common"; import { getPokemonNameWithAffix } from "#app/messages"; import { GroundedTag } from "#app/data/battler-tags"; @@ -4689,7 +4690,7 @@ export class PreApplyBattlerTagImmunityAbAttr extends PreApplyBattlerTagAbAttr { constructor(immuneTagTypes: BattlerTagType | BattlerTagType[]) { super(true); - this.immuneTagTypes = Array.isArray(immuneTagTypes) ? immuneTagTypes : [immuneTagTypes]; + this.immuneTagTypes = coerceArray(immuneTagTypes); } override canApplyPreApplyBattlerTag( @@ -6694,7 +6695,7 @@ export class FlinchStatStageChangeAbAttr extends FlinchEffectAbAttr { constructor(stats: BattleStat[], stages: number) { super(); - this.stats = Array.isArray(stats) ? stats : [stats]; + this.stats = stats; this.stages = stages; } diff --git a/src/data/battle-anims.ts b/src/data/battle-anims.ts index 7aa419ca470..131086625df 100644 --- a/src/data/battle-anims.ts +++ b/src/data/battle-anims.ts @@ -2,7 +2,7 @@ import { globalScene } from "#app/global-scene"; import { allMoves } from "./data-lists"; import { MoveFlags } from "#enums/MoveFlags"; import type Pokemon from "../field/pokemon"; -import { type nil, getFrameMs, getEnumKeys, getEnumValues, animationFileName } from "../utils/common"; +import { type nil, getFrameMs, getEnumKeys, getEnumValues, animationFileName, coerceArray } from "../utils/common"; import type { BattlerIndex } from "#enums/battler-index"; import { MoveId } from "#enums/move-id"; import { SubstituteTag } from "./battler-tags"; @@ -520,7 +520,7 @@ function logMissingMoveAnim(move: MoveId, ...optionalParams: any[]) { * @param encounterAnim one or more animations to fetch */ export async function initEncounterAnims(encounterAnim: EncounterAnim | EncounterAnim[]): Promise { - const anims = Array.isArray(encounterAnim) ? encounterAnim : [encounterAnim]; + const anims = coerceArray(encounterAnim); const encounterAnimNames = getEnumKeys(EncounterAnim); const encounterAnimFetches: Promise>[] = []; for (const anim of anims) { diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 0daf1913737..89d5a76159f 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -21,7 +21,7 @@ import type { MoveEffectPhase } from "#app/phases/move-effect-phase"; import type { MovePhase } from "#app/phases/move-phase"; import type { StatStageChangeCallback } from "#app/phases/stat-stage-change-phase"; import i18next from "#app/plugins/i18n"; -import { BooleanHolder, getFrameMs, NumberHolder, toDmgValue } from "#app/utils/common"; +import { BooleanHolder, coerceArray, getFrameMs, NumberHolder, toDmgValue } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; import { MoveId } from "#enums/move-id"; @@ -50,7 +50,7 @@ export class BattlerTag { isBatonPassable = false, ) { this.tagType = tagType; - this.lapseTypes = Array.isArray(lapseType) ? lapseType : [lapseType]; + this.lapseTypes = coerceArray(lapseType); this.turnCount = turnCount; this.sourceMove = sourceMove!; // TODO: is this bang correct? this.sourceId = sourceId; diff --git a/src/data/mystery-encounters/mystery-encounter-requirements.ts b/src/data/mystery-encounters/mystery-encounter-requirements.ts index bca34be723b..a6e6e84846f 100644 --- a/src/data/mystery-encounters/mystery-encounter-requirements.ts +++ b/src/data/mystery-encounters/mystery-encounter-requirements.ts @@ -11,7 +11,7 @@ import { WeatherType } from "#enums/weather-type"; import type { PlayerPokemon } from "#app/field/pokemon"; import { AttackTypeBoosterModifier } from "#app/modifier/modifier"; import type { AttackTypeBoosterModifierType } from "#app/modifier/modifier-type"; -import { isNullOrUndefined } from "#app/utils/common"; +import { coerceArray, isNullOrUndefined } from "#app/utils/common"; import type { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; @@ -272,7 +272,7 @@ export class TimeOfDayRequirement extends EncounterSceneRequirement { constructor(timeOfDay: TimeOfDay | TimeOfDay[]) { super(); - this.requiredTimeOfDay = Array.isArray(timeOfDay) ? timeOfDay : [timeOfDay]; + this.requiredTimeOfDay = coerceArray(timeOfDay); } override meetsRequirement(): boolean { @@ -294,7 +294,7 @@ export class WeatherRequirement extends EncounterSceneRequirement { constructor(weather: WeatherType | WeatherType[]) { super(); - this.requiredWeather = Array.isArray(weather) ? weather : [weather]; + this.requiredWeather = coerceArray(weather); } override meetsRequirement(): boolean { @@ -360,7 +360,7 @@ export class PersistentModifierRequirement extends EncounterSceneRequirement { constructor(heldItem: string | string[], minNumberOfItems = 1) { super(); this.minNumberOfItems = minNumberOfItems; - this.requiredHeldItemModifiers = Array.isArray(heldItem) ? heldItem : [heldItem]; + this.requiredHeldItemModifiers = coerceArray(heldItem); } override meetsRequirement(): boolean { @@ -426,7 +426,7 @@ export class SpeciesRequirement extends EncounterPokemonRequirement { super(); this.minNumberOfPokemon = minNumberOfPokemon; this.invertQuery = invertQuery; - this.requiredSpecies = Array.isArray(species) ? species : [species]; + this.requiredSpecies = coerceArray(species); } override meetsRequirement(): boolean { @@ -466,7 +466,7 @@ export class NatureRequirement extends EncounterPokemonRequirement { super(); this.minNumberOfPokemon = minNumberOfPokemon; this.invertQuery = invertQuery; - this.requiredNature = Array.isArray(nature) ? nature : [nature]; + this.requiredNature = coerceArray(nature); } override meetsRequirement(): boolean { @@ -504,7 +504,7 @@ export class TypeRequirement extends EncounterPokemonRequirement { this.excludeFainted = excludeFainted; this.minNumberOfPokemon = minNumberOfPokemon; this.invertQuery = invertQuery; - this.requiredType = Array.isArray(type) ? type : [type]; + this.requiredType = coerceArray(type); } override meetsRequirement(): boolean { @@ -558,7 +558,7 @@ export class MoveRequirement extends EncounterPokemonRequirement { this.excludeDisallowedPokemon = excludeDisallowedPokemon; this.minNumberOfPokemon = minNumberOfPokemon; this.invertQuery = invertQuery; - this.requiredMoves = Array.isArray(moves) ? moves : [moves]; + this.requiredMoves = coerceArray(moves); } override meetsRequirement(): boolean { @@ -609,7 +609,7 @@ export class CompatibleMoveRequirement extends EncounterPokemonRequirement { super(); this.minNumberOfPokemon = minNumberOfPokemon; this.invertQuery = invertQuery; - this.requiredMoves = Array.isArray(learnableMove) ? learnableMove : [learnableMove]; + this.requiredMoves = coerceArray(learnableMove); } override meetsRequirement(): boolean { @@ -665,7 +665,7 @@ export class AbilityRequirement extends EncounterPokemonRequirement { this.excludeDisallowedPokemon = excludeDisallowedPokemon; this.minNumberOfPokemon = minNumberOfPokemon; this.invertQuery = invertQuery; - this.requiredAbilities = Array.isArray(abilities) ? abilities : [abilities]; + this.requiredAbilities = coerceArray(abilities); } override meetsRequirement(): boolean { @@ -710,7 +710,7 @@ export class StatusEffectRequirement extends EncounterPokemonRequirement { super(); this.minNumberOfPokemon = minNumberOfPokemon; this.invertQuery = invertQuery; - this.requiredStatusEffect = Array.isArray(statusEffect) ? statusEffect : [statusEffect]; + this.requiredStatusEffect = coerceArray(statusEffect); } override meetsRequirement(): boolean { @@ -785,7 +785,7 @@ export class CanFormChangeWithItemRequirement extends EncounterPokemonRequiremen super(); this.minNumberOfPokemon = minNumberOfPokemon; this.invertQuery = invertQuery; - this.requiredFormChangeItem = Array.isArray(formChangeItem) ? formChangeItem : [formChangeItem]; + this.requiredFormChangeItem = coerceArray(formChangeItem); } override meetsRequirement(): boolean { @@ -843,7 +843,7 @@ export class CanEvolveWithItemRequirement extends EncounterPokemonRequirement { super(); this.minNumberOfPokemon = minNumberOfPokemon; this.invertQuery = invertQuery; - this.requiredEvolutionItem = Array.isArray(evolutionItems) ? evolutionItems : [evolutionItems]; + this.requiredEvolutionItem = coerceArray(evolutionItems); } override meetsRequirement(): boolean { @@ -908,7 +908,7 @@ export class HeldItemRequirement extends EncounterPokemonRequirement { super(); this.minNumberOfPokemon = minNumberOfPokemon; this.invertQuery = invertQuery; - this.requiredHeldItemModifiers = Array.isArray(heldItem) ? heldItem : [heldItem]; + this.requiredHeldItemModifiers = coerceArray(heldItem); this.requireTransferable = requireTransferable; } @@ -972,7 +972,7 @@ export class AttackTypeBoosterHeldItemTypeRequirement extends EncounterPokemonRe super(); this.minNumberOfPokemon = minNumberOfPokemon; this.invertQuery = invertQuery; - this.requiredHeldItemTypes = Array.isArray(heldItemTypes) ? heldItemTypes : [heldItemTypes]; + this.requiredHeldItemTypes = coerceArray(heldItemTypes); this.requireTransferable = requireTransferable; } diff --git a/src/data/mystery-encounters/mystery-encounter.ts b/src/data/mystery-encounters/mystery-encounter.ts index 6510e32fe76..bd3082afe19 100644 --- a/src/data/mystery-encounters/mystery-encounter.ts +++ b/src/data/mystery-encounters/mystery-encounter.ts @@ -2,7 +2,7 @@ import type { EnemyPartyConfig } from "#app/data/mystery-encounters/utils/encoun import type { PlayerPokemon } from "#app/field/pokemon"; import type { PokemonMove } from "../moves/pokemon-move"; import type Pokemon from "#app/field/pokemon"; -import { capitalizeFirstLetter, isNullOrUndefined } from "#app/utils/common"; +import { capitalizeFirstLetter, coerceArray, isNullOrUndefined } from "#app/utils/common"; import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; import type { MysteryEncounterSpriteConfig } from "#app/field/mystery-encounter-intro"; import MysteryEncounterIntroVisuals from "#app/field/mystery-encounter-intro"; @@ -717,7 +717,7 @@ export class MysteryEncounterBuilder implements Partial { withAnimations( ...encounterAnimations: EncounterAnim[] ): this & Required> { - const animations = Array.isArray(encounterAnimations) ? encounterAnimations : [encounterAnimations]; + const animations = coerceArray(encounterAnimations); return Object.assign(this, { encounterAnimations: animations }); } @@ -729,7 +729,7 @@ export class MysteryEncounterBuilder implements Partial { withDisallowedGameModes( ...disallowedGameModes: GameModes[] ): this & Required> { - const gameModes = Array.isArray(disallowedGameModes) ? disallowedGameModes : [disallowedGameModes]; + const gameModes = coerceArray(disallowedGameModes); return Object.assign(this, { disallowedGameModes: gameModes }); } @@ -741,7 +741,7 @@ export class MysteryEncounterBuilder implements Partial { withDisallowedChallenges( ...disallowedChallenges: Challenges[] ): this & Required> { - const challenges = Array.isArray(disallowedChallenges) ? disallowedChallenges : [disallowedChallenges]; + const challenges = coerceArray(disallowedChallenges); return Object.assign(this, { disallowedChallenges: challenges }); } diff --git a/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts b/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts index c0e45d5401c..0123ea7d6ba 100644 --- a/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts +++ b/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts @@ -1,7 +1,7 @@ import type { MoveId } from "#enums/move-id"; import type { PlayerPokemon } from "#app/field/pokemon"; import { PokemonMove } from "#app/data/moves/pokemon-move"; -import { isNullOrUndefined } from "#app/utils/common"; +import { coerceArray, isNullOrUndefined } from "#app/utils/common"; import { EncounterPokemonRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import { globalScene } from "#app/global-scene"; @@ -29,7 +29,7 @@ export class CanLearnMoveRequirement extends EncounterPokemonRequirement { constructor(requiredMoves: MoveId | MoveId[], options: CanLearnMoveRequirementOptions = {}) { super(); - this.requiredMoves = Array.isArray(requiredMoves) ? requiredMoves : [requiredMoves]; + this.requiredMoves = coerceArray(requiredMoves); this.excludeLevelMoves = options.excludeLevelMoves ?? false; this.excludeTmMoves = options.excludeTmMoves ?? false; diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index 599edb11628..e2b92230985 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -25,7 +25,7 @@ import type { OptionSelectConfig, OptionSelectItem } from "#app/ui/abstact-optio import type { PartyOption, PokemonSelectFilter } from "#app/ui/party-ui-handler"; import { PartyUiMode } from "#app/ui/party-ui-handler"; import { UiMode } from "#enums/ui-mode"; -import { isNullOrUndefined, randSeedInt, randomString, randSeedItem } from "#app/utils/common"; +import { isNullOrUndefined, randSeedInt, randomString, randSeedItem, coerceArray } from "#app/utils/common"; import type { BattlerTagType } from "#enums/battler-tag-type"; import { BiomeId } from "#enums/biome-id"; import type { TrainerType } from "#enums/trainer-type"; @@ -449,7 +449,7 @@ export async function initBattleWithEnemyConfig(partyConfig: EnemyPartyConfig): * @param moves */ export function loadCustomMovesForEncounter(moves: MoveId | MoveId[]) { - moves = Array.isArray(moves) ? moves : [moves]; + moves = coerceArray(moves); return Promise.all(moves.map(move => initMoveAnim(move))).then(() => loadMoveAnimAssets(moves)); } @@ -792,7 +792,7 @@ export function setEncounterRewards( * @param useWaveIndex - set to false when directly passing the the full exp value instead of baseExpValue */ export function setEncounterExp(participantId: number | number[], baseExpValue: number, useWaveIndex = true) { - const participantIds = Array.isArray(participantId) ? participantId : [participantId]; + const participantIds = coerceArray(participantId); globalScene.currentBattle.mysteryEncounter!.doEncounterExp = () => { globalScene.phaseManager.unshiftNew("PartyExpPhase", baseExpValue, useWaveIndex, new Set(participantIds)); diff --git a/src/data/pokemon-forms/form-change-triggers.ts b/src/data/pokemon-forms/form-change-triggers.ts index eb2c0a557c2..3726781d9e3 100644 --- a/src/data/pokemon-forms/form-change-triggers.ts +++ b/src/data/pokemon-forms/form-change-triggers.ts @@ -1,5 +1,5 @@ import i18next from "i18next"; -import type { Constructor } from "#app/utils/common"; +import { coerceArray, type Constructor } from "#app/utils/common"; import type { TimeOfDay } from "#enums/time-of-day"; import type Pokemon from "#app/field/pokemon"; import type { SpeciesFormChange } from "#app/data/pokemon-forms"; @@ -125,10 +125,7 @@ export class SpeciesFormChangeStatusEffectTrigger extends SpeciesFormChangeTrigg constructor(statusEffects: StatusEffect | StatusEffect[], invert = false) { super(); - if (!Array.isArray(statusEffects)) { - statusEffects = [statusEffects]; - } - this.statusEffects = statusEffects; + this.statusEffects = coerceArray(statusEffects); this.invert = invert; // this.description = i18next.t("pokemonEvolutions:Forms.statusEffect"); } diff --git a/src/data/trainers/trainer-config.ts b/src/data/trainers/trainer-config.ts index 8c065666202..063dddafee8 100644 --- a/src/data/trainers/trainer-config.ts +++ b/src/data/trainers/trainer-config.ts @@ -1,7 +1,14 @@ import { globalScene } from "#app/global-scene"; import { modifierTypes } from "../data-lists"; import { PokemonMove } from "../moves/pokemon-move"; -import { toReadableString, isNullOrUndefined, randSeedItem, randSeedInt, randSeedIntRange } from "#app/utils/common"; +import { + toReadableString, + isNullOrUndefined, + randSeedItem, + randSeedInt, + coerceArray, + randSeedIntRange, +} from "#app/utils/common"; import { pokemonEvolutions, pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { tmSpecies } from "#app/data/balance/tms"; @@ -554,10 +561,7 @@ export class TrainerConfig { this.speciesPools = evilAdminTrainerPools[poolName]; signatureSpecies.forEach((speciesPool, s) => { - if (!Array.isArray(speciesPool)) { - speciesPool = [speciesPool]; - } - this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); + this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(coerceArray(speciesPool))); }); const nameForCall = this.name.toLowerCase().replace(/\s/g, "_"); @@ -620,10 +624,7 @@ export class TrainerConfig { this.setPartyTemplates(trainerPartyTemplates.RIVAL_5); } signatureSpecies.forEach((speciesPool, s) => { - if (!Array.isArray(speciesPool)) { - speciesPool = [speciesPool]; - } - this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); + this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(coerceArray(speciesPool))); }); if (!isNullOrUndefined(specialtyType)) { this.setSpeciesFilter(p => p.isOfType(specialtyType)); @@ -668,12 +669,8 @@ export class TrainerConfig { // Set up party members with their corresponding species. signatureSpecies.forEach((speciesPool, s) => { - // Ensure speciesPool is an array. - if (!Array.isArray(speciesPool)) { - speciesPool = [speciesPool]; - } // Set a function to get a random party member from the species pool. - this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); + this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(coerceArray(speciesPool))); }); // If specialty type is provided, set species filter and specialty type. @@ -729,12 +726,8 @@ export class TrainerConfig { // Set up party members with their corresponding species. signatureSpecies.forEach((speciesPool, s) => { - // Ensure speciesPool is an array. - if (!Array.isArray(speciesPool)) { - speciesPool = [speciesPool]; - } // Set a function to get a random party member from the species pool. - this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); + this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(coerceArray(speciesPool))); }); // Set species filter and specialty type if provided, otherwise filter by base total. diff --git a/src/field/pokemon-sprite-sparkle-handler.ts b/src/field/pokemon-sprite-sparkle-handler.ts index cceb0bd7717..bda9414bb92 100644 --- a/src/field/pokemon-sprite-sparkle-handler.ts +++ b/src/field/pokemon-sprite-sparkle-handler.ts @@ -1,6 +1,6 @@ import { globalScene } from "#app/global-scene"; import Pokemon from "./pokemon"; -import { fixedInt, randInt } from "#app/utils/common"; +import { fixedInt, coerceArray, randInt } from "#app/utils/common"; export default class PokemonSpriteSparkleHandler { private sprites: Set; @@ -57,9 +57,7 @@ export default class PokemonSpriteSparkleHandler { } add(sprites: Phaser.GameObjects.Sprite | Phaser.GameObjects.Sprite[]): void { - if (!Array.isArray(sprites)) { - sprites = [sprites]; - } + sprites = coerceArray(sprites); for (const s of sprites) { if (this.sprites.has(s)) { continue; @@ -69,9 +67,7 @@ export default class PokemonSpriteSparkleHandler { } remove(sprites: Phaser.GameObjects.Sprite | Phaser.GameObjects.Sprite[]): void { - if (!Array.isArray(sprites)) { - sprites = [sprites]; - } + sprites = coerceArray(sprites); for (const s of sprites) { this.sprites.delete(s); } diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 964d66d352e..834c65437af 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -41,6 +41,7 @@ import { type nil, type Constructor, randSeedIntRange, + coerceArray, } from "#app/utils/common"; import type { TypeDamageMultiplier } from "#app/data/type"; import { getTypeDamageMultiplier, getTypeRgb } from "#app/data/type"; @@ -1774,9 +1775,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { let overrideArray: MoveId | Array = this.isPlayer() ? Overrides.MOVESET_OVERRIDE : Overrides.OPP_MOVESET_OVERRIDE; - if (!Array.isArray(overrideArray)) { - overrideArray = [overrideArray]; - } + overrideArray = coerceArray(overrideArray); if (overrideArray.length > 0) { if (!this.isPlayer()) { this.moveset = []; diff --git a/src/phase-manager.ts b/src/phase-manager.ts index b4fefe3f2d6..8c22a45758c 100644 --- a/src/phase-manager.ts +++ b/src/phase-manager.ts @@ -12,7 +12,7 @@ import { CheckStatusEffectPhase } from "#app/phases/check-status-effect-phase"; import { CheckSwitchPhase } from "#app/phases/check-switch-phase"; import { CommandPhase } from "#app/phases/command-phase"; import { CommonAnimPhase } from "#app/phases/common-anim-phase"; -import type { Constructor } from "#app/utils/common"; +import { coerceArray, type Constructor } from "#app/utils/common"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import type { DynamicPhaseType } from "#enums/dynamic-phase-type"; import { EggHatchPhase } from "#app/phases/egg-hatch-phase"; @@ -438,9 +438,7 @@ export class PhaseManager { * @returns boolean if a targetPhase was found and added */ prependToPhase(phase: Phase | Phase[], targetPhase: PhaseString): boolean { - if (!Array.isArray(phase)) { - phase = [phase]; - } + phase = coerceArray(phase); const target = PHASES[targetPhase]; const targetIndex = this.phaseQueue.findIndex(ph => ph instanceof target); @@ -460,9 +458,7 @@ export class PhaseManager { * @returns `true` if a `targetPhase` was found to append to */ appendToPhase(phase: Phase | Phase[], targetPhase: PhaseString, condition?: (p: Phase) => boolean): boolean { - if (!Array.isArray(phase)) { - phase = [phase]; - } + phase = coerceArray(phase); const target = PHASES[targetPhase]; const targetIndex = this.phaseQueue.findIndex(ph => ph instanceof target && (!condition || condition(ph))); diff --git a/src/plugins/cache-busted-loader-plugin.ts b/src/plugins/cache-busted-loader-plugin.ts index e5b1abb5903..4ae9b352ae3 100644 --- a/src/plugins/cache-busted-loader-plugin.ts +++ b/src/plugins/cache-busted-loader-plugin.ts @@ -1,10 +1,8 @@ +import { coerceArray } from "#app/utils/common"; + let manifest: object; export default class CacheBustedLoaderPlugin extends Phaser.Loader.LoaderPlugin { - constructor(scene: Phaser.Scene) { - super(scene); - } - get manifest() { return manifest; } @@ -14,9 +12,7 @@ export default class CacheBustedLoaderPlugin extends Phaser.Loader.LoaderPlugin } addFile(file): void { - if (!Array.isArray(file)) { - file = [file]; - } + file = coerceArray(file); file.forEach(item => { if (manifest) { diff --git a/src/plugins/vite/vite-minify-json-plugin.ts b/src/plugins/vite/vite-minify-json-plugin.ts index f14fdf7042d..38f299eea50 100644 --- a/src/plugins/vite/vite-minify-json-plugin.ts +++ b/src/plugins/vite/vite-minify-json-plugin.ts @@ -41,9 +41,9 @@ export function minifyJsonPlugin(basePath: string | string[], recursive?: boolea }, async closeBundle() { console.log("Minifying JSON files..."); - const basePathes = Array.isArray(basePath) ? basePath : [basePath]; + const basePaths = Array.isArray(basePath) ? basePath : [basePath]; - basePathes.forEach(basePath => { + basePaths.forEach(basePath => { const baseDir = path.resolve(buildDir, basePath); if (fs.existsSync(baseDir)) { applyToDir(baseDir, recursive); diff --git a/src/scene-base.ts b/src/scene-base.ts index 430a9bc8aac..ccea373fca0 100644 --- a/src/scene-base.ts +++ b/src/scene-base.ts @@ -1,3 +1,5 @@ +import { coerceArray } from "#app/utils/common"; + export const legacyCompatibleImages: string[] = []; export class SceneBase extends Phaser.Scene { @@ -88,9 +90,7 @@ export class SceneBase extends Phaser.Scene { } else { folder += "/"; } - if (!Array.isArray(filenames)) { - filenames = [filenames]; - } + filenames = coerceArray(filenames); for (const f of filenames as string[]) { this.load.audio(folder + key, this.getCachedUrl(`audio/${folder}${f}`)); } diff --git a/src/ui/pokemon-icon-anim-handler.ts b/src/ui/pokemon-icon-anim-handler.ts index 253ccbe3623..8a206167a94 100644 --- a/src/ui/pokemon-icon-anim-handler.ts +++ b/src/ui/pokemon-icon-anim-handler.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import { fixedInt } from "#app/utils/common"; +import { fixedInt, coerceArray } from "#app/utils/common"; export enum PokemonIconAnimMode { NONE, @@ -49,9 +49,7 @@ export default class PokemonIconAnimHandler { } addOrUpdate(icons: PokemonIcon | PokemonIcon[], mode: PokemonIconAnimMode): void { - if (!Array.isArray(icons)) { - icons = [icons]; - } + icons = coerceArray(icons); for (const i of icons) { if (this.icons.has(i) && this.icons.get(i) === mode) { continue; @@ -66,9 +64,7 @@ export default class PokemonIconAnimHandler { } remove(icons: PokemonIcon | PokemonIcon[]): void { - if (!Array.isArray(icons)) { - icons = [icons]; - } + icons = coerceArray(icons); for (const i of icons) { if (this.toggled) { const icon = this.icons.get(i); diff --git a/src/utils/common.ts b/src/utils/common.ts index 56fa3b5c698..c8b37c4e3fd 100644 --- a/src/utils/common.ts +++ b/src/utils/common.ts @@ -611,3 +611,12 @@ export function getShinyDescriptor(variant: Variant): string { return i18next.t("common:commonShiny"); } } + +/** + * If the input isn't already an array, turns it into one. + * @returns An array with the same type as the type of the input + */ +export function coerceArray(input: T): T extends any[] ? T : [T]; +export function coerceArray(input: T): T | [T] { + return Array.isArray(input) ? input : [input]; +} diff --git a/test/testUtils/helpers/moveHelper.ts b/test/testUtils/helpers/moveHelper.ts index 1b799e12da7..0f87fa9a4c1 100644 --- a/test/testUtils/helpers/moveHelper.ts +++ b/test/testUtils/helpers/moveHelper.ts @@ -12,6 +12,7 @@ import { UiMode } from "#enums/ui-mode"; import { getMovePosition } from "#test/testUtils/gameManagerUtils"; import { GameManagerHelper } from "#test/testUtils/helpers/gameManagerHelper"; import { vi } from "vitest"; +import { coerceArray } from "#app/utils/common"; /** * Helper to handle a Pokemon's move @@ -157,9 +158,7 @@ export class MoveHelper extends GameManagerHelper { * @param moveset - The {@linkcode MoveId} (single or array) to change the Pokemon's moveset to. */ public changeMoveset(pokemon: Pokemon, moveset: MoveId | MoveId[]): void { - if (!Array.isArray(moveset)) { - moveset = [moveset]; - } + moveset = coerceArray(moveset); pokemon.moveset = []; moveset.forEach(move => { pokemon.moveset.push(new PokemonMove(move)); diff --git a/test/testUtils/helpers/overridesHelper.ts b/test/testUtils/helpers/overridesHelper.ts index c01acbe0f2e..9869c7450e2 100644 --- a/test/testUtils/helpers/overridesHelper.ts +++ b/test/testUtils/helpers/overridesHelper.ts @@ -14,7 +14,7 @@ import { StatusEffect } from "#enums/status-effect"; import type { WeatherType } from "#enums/weather-type"; import { expect, vi } from "vitest"; import { GameManagerHelper } from "./gameManagerHelper"; -import { shiftCharCodes } from "#app/utils/common"; +import { coerceArray, shiftCharCodes } from "#app/utils/common"; import type { RandomTrainerOverride } from "#app/overrides"; import type { BattleType } from "#enums/battle-type"; @@ -202,9 +202,7 @@ export class OverridesHelper extends GameManagerHelper { */ public moveset(moveset: MoveId | MoveId[]): this { vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue(moveset); - if (!Array.isArray(moveset)) { - moveset = [moveset]; - } + moveset = coerceArray(moveset); const movesetStr = moveset.map(moveId => MoveId[moveId]).join(", "); this.log(`Player Pokemon moveset set to ${movesetStr} (=[${moveset.join(", ")}])!`); return this; @@ -382,9 +380,7 @@ export class OverridesHelper extends GameManagerHelper { */ public enemyMoveset(moveset: MoveId | MoveId[]): this { vi.spyOn(Overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue(moveset); - if (!Array.isArray(moveset)) { - moveset = [moveset]; - } + moveset = coerceArray(moveset); const movesetStr = moveset.map(moveId => MoveId[moveId]).join(", "); this.log(`Enemy Pokemon moveset set to ${movesetStr} (=[${moveset.join(", ")}])!`); return this; diff --git a/test/testUtils/mocks/mocksContainer/mockContainer.ts b/test/testUtils/mocks/mocksContainer/mockContainer.ts index f1371643ce3..d31165bb847 100644 --- a/test/testUtils/mocks/mocksContainer/mockContainer.ts +++ b/test/testUtils/mocks/mocksContainer/mockContainer.ts @@ -1,3 +1,4 @@ +import { coerceArray } from "#app/utils/common"; import type MockTextureManager from "#test/testUtils/mocks/mockTextureManager"; import type { MockGameObject } from "../mockGameObject"; @@ -216,11 +217,7 @@ export default class MockContainer implements MockGameObject { } add(obj: MockGameObject | MockGameObject[]): this { - if (Array.isArray(obj)) { - this.list.push(...obj); - } else { - this.list.push(obj); - } + this.list.push(...coerceArray(obj)); return this; } @@ -232,18 +229,12 @@ export default class MockContainer implements MockGameObject { addAt(obj: MockGameObject | MockGameObject[], index = 0): this { // Adds a Game Object to this Container at the given index. - if (!Array.isArray(obj)) { - obj = [obj]; - } - this.list.splice(index, 0, ...obj); + this.list.splice(index, 0, ...coerceArray(obj)); return this; } remove(obj: MockGameObject | MockGameObject[], destroyChild = false): this { - if (!Array.isArray(obj)) { - obj = [obj]; - } - for (const item of obj) { + for (const item of coerceArray(obj)) { const index = this.list.indexOf(item); if (index !== -1) { this.list.splice(index, 1); diff --git a/test/testUtils/mocks/mocksContainer/mockRectangle.ts b/test/testUtils/mocks/mocksContainer/mockRectangle.ts index 7f54a0e255f..a8eeb370115 100644 --- a/test/testUtils/mocks/mocksContainer/mockRectangle.ts +++ b/test/testUtils/mocks/mocksContainer/mockRectangle.ts @@ -1,3 +1,4 @@ +import { coerceArray } from "#app/utils/common"; import type { MockGameObject } from "../mockGameObject"; export default class MockRectangle implements MockGameObject { @@ -50,11 +51,7 @@ export default class MockRectangle implements MockGameObject { add(obj: MockGameObject | MockGameObject[]): this { // Adds a child to this Game Object. - if (Array.isArray(obj)) { - this.list.push(...obj); - } else { - this.list.push(obj); - } + this.list.push(...coerceArray(obj)); return this; } diff --git a/test/testUtils/mocks/mocksContainer/mockSprite.ts b/test/testUtils/mocks/mocksContainer/mockSprite.ts index df36b3a29fd..ed1f1df6609 100644 --- a/test/testUtils/mocks/mocksContainer/mockSprite.ts +++ b/test/testUtils/mocks/mocksContainer/mockSprite.ts @@ -1,6 +1,8 @@ +import { coerceArray } from "#app/utils/common"; import Phaser from "phaser"; import type { MockGameObject } from "../mockGameObject"; -import Frame = Phaser.Textures.Frame; + +type Frame = Phaser.Textures.Frame; export default class MockSprite implements MockGameObject { private phaserSprite; @@ -204,11 +206,7 @@ export default class MockSprite implements MockGameObject { add(obj: MockGameObject | MockGameObject[]): this { // Adds a child to this Game Object. - if (Array.isArray(obj)) { - this.list.push(...obj); - } else { - this.list.push(obj); - } + this.list.push(...coerceArray(obj)); return this; } From 718d6f61cf435e69cb6dd9d070d4a8d0d69db089 Mon Sep 17 00:00:00 2001 From: damocleas Date: Fri, 13 Jun 2025 21:10:38 -0400 Subject: [PATCH 236/262] [Bug] Fix Fog interactions with Morning Sun/Synthesis/Moonlight and Solar Beam/Blade (#5987) Fix Weather based Healing Moves and Solar Beam/Blade not interacting with Fog Update move.ts --- src/data/moves/move.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index e713020cf9c..b46f109db9e 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -2156,6 +2156,7 @@ export class PlantHealAttr extends WeatherHealAttr { case WeatherType.SANDSTORM: case WeatherType.HAIL: case WeatherType.SNOW: + case WeatherType.FOG: case WeatherType.HEAVY_RAIN: return 0.25; default: @@ -4157,6 +4158,7 @@ export class AntiSunlightPowerDecreaseAttr extends VariablePowerAttr { case WeatherType.SANDSTORM: case WeatherType.HAIL: case WeatherType.SNOW: + case WeatherType.FOG: case WeatherType.HEAVY_RAIN: power.value *= 0.5; return true; From d91a6ee11ee2436cc477b1e47616291ef57af70f Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Fri, 13 Jun 2025 21:38:54 -0400 Subject: [PATCH 237/262] [Github] Update `pull_request_template.md` with more labels https://github.com/pagefaultgames/pokerogue/pull/5974 * Update pull_request_template.md with more labels More better * Fix create test script name post refactor Forgot to change it earlier --- .github/pull_request_template.md | 37 +++++++++++++++++--------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index a25a2f807f3..c7d8b1e4d9c 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -2,25 +2,28 @@ + ## What are the changes the user will see? @@ -66,11 +69,11 @@ Do the reviewers need to do something special in order to test your changes? - [ ] Have I provided a clear explanation of the changes? - [ ] Have I tested the changes manually? - [ ] Are all unit tests still passing? (`npm run test:silent`) - - [ ] Have I created new automated tests (`npm run create-test`) or updated existing tests related to the PR's changes? + - [ ] Have I created new automated tests (`npm run test:create`) or updated existing tests related to the PR's changes? - [ ] Have I provided screenshots/videos of the changes (if applicable)? - [ ] Have I made sure that any UI change works for both UI themes (default and legacy)? Are there any localization additions or changes? If so: - [ ] Has a locales PR been created on the [locales](https://github.com/pagefaultgames/pokerogue-locales) repo? - [ ] If so, please leave a link to it here: -- [ ] Has the translation team been contacted for proofreading/translation? \ No newline at end of file +- [ ] Has the translation team been contacted for proofreading/translation? From 9a525ac8fd89743e9c8d4c8f4c96d369af5a9763 Mon Sep 17 00:00:00 2001 From: fabske0 <192151969+fabske0@users.noreply.github.com> Date: Sat, 14 Jun 2025 05:19:05 +0200 Subject: [PATCH 238/262] [UI/UX] Position setting Icons dynamically (#5969) * position setting icons dynamically * add comment for potential overlap --- src/ui/settings/abstract-control-settings-ui-handler.ts | 9 +++++++-- src/ui/settings/abstract-settings-ui-handler.ts | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/ui/settings/abstract-control-settings-ui-handler.ts b/src/ui/settings/abstract-control-settings-ui-handler.ts index 495a0f68540..e3631c062df 100644 --- a/src/ui/settings/abstract-control-settings-ui-handler.ts +++ b/src/ui/settings/abstract-control-settings-ui-handler.ts @@ -126,6 +126,11 @@ export default abstract class AbstractControlSettingsUiHandler extends UiHandler ); this.actionsBg.setOrigin(0, 0); + /* + * If there isn't enough space to fit all the icons and texts, there will be an overlap + * This currently doesn't happen, but it's something to keep in mind. + */ + const iconAction = globalScene.add.sprite(0, 0, "keyboard"); iconAction.setOrigin(0, -0.1); iconAction.setPositionRelative(this.actionsBg, this.navigationContainer.width - 32, 4); @@ -137,7 +142,7 @@ export default abstract class AbstractControlSettingsUiHandler extends UiHandler const iconCancel = globalScene.add.sprite(0, 0, "keyboard"); iconCancel.setOrigin(0, -0.1); - iconCancel.setPositionRelative(this.actionsBg, this.navigationContainer.width - 100, 4); + iconCancel.setPositionRelative(this.actionsBg, actionText.x - 28, 4); this.navigationIcons["BUTTON_CANCEL"] = iconCancel; const cancelText = addTextObject(0, 0, i18next.t("settings:back"), TextStyle.SETTINGS_LABEL); @@ -146,7 +151,7 @@ export default abstract class AbstractControlSettingsUiHandler extends UiHandler const iconReset = globalScene.add.sprite(0, 0, "keyboard"); iconReset.setOrigin(0, -0.1); - iconReset.setPositionRelative(this.actionsBg, this.navigationContainer.width - 180, 4); + iconReset.setPositionRelative(this.actionsBg, cancelText.x - 28, 4); this.navigationIcons["BUTTON_HOME"] = iconReset; const resetText = addTextObject(0, 0, i18next.t("settings:reset"), TextStyle.SETTINGS_LABEL); diff --git a/src/ui/settings/abstract-settings-ui-handler.ts b/src/ui/settings/abstract-settings-ui-handler.ts index 1fb4b6d34dc..a621b056e28 100644 --- a/src/ui/settings/abstract-settings-ui-handler.ts +++ b/src/ui/settings/abstract-settings-ui-handler.ts @@ -94,7 +94,7 @@ export default class AbstractSettingsUiHandler extends MessageUiHandler { const iconCancel = globalScene.add.sprite(0, 0, "keyboard"); iconCancel.setOrigin(0, -0.1); - iconCancel.setPositionRelative(actionsBg, this.navigationContainer.width - 100, 4); + iconCancel.setPositionRelative(actionsBg, actionText.x - 28, 4); this.navigationIcons["BUTTON_CANCEL"] = iconCancel; const cancelText = addTextObject(0, 0, i18next.t("settings:back"), TextStyle.SETTINGS_LABEL); From a41de39d4f0d7a6bc287a10de5837a219e53c4d7 Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Sat, 14 Jun 2025 03:59:34 -0400 Subject: [PATCH 239/262] [Misc] Run biome on all files; update some rules to be errors now https://github.com/pagefaultgames/pokerogue/pull/5962/ * Fixed lint issue; ran biome on entire repository * Fixed biome.jsonc * Trimmed trailing whitespace... again... * Fixed PR template md * Fixed package json * Fixed void return issues + ran biome again * ran biome --- .dependency-cruiser.cjs | 10 +++---- .github/CODEOWNERS | 2 +- .github/workflows/deploy.yml | 2 +- .github/workflows/quality.yml | 2 +- biome.jsonc | 6 ++-- global.d.ts | 2 +- package.json | 2 +- src/@types/modifier-types.ts | 2 +- src/data/battler-tags.ts | 20 ------------- .../encounters/fight-or-flight-encounter.ts | 5 +--- .../global-trade-system-encounter.ts | 5 +--- src/field/arena.ts | 3 +- src/field/pokemon.ts | 9 ++++-- src/overrides.ts | 4 +-- src/phases/add-enemy-buff-modifier-phase.ts | 5 +--- src/phases/command-phase.ts | 9 ++++-- src/phases/move-phase.ts | 6 ++-- src/phases/pokemon-anim-phase.ts | 30 ++++++++++++------- src/phases/pokemon-transform-phase.ts | 3 +- src/phases/quiet-form-change-phase.ts | 3 +- src/pipelines/glsl/fieldSpriteFragShader.frag | 14 ++++----- src/pipelines/glsl/spriteFragShader.frag | 12 ++++---- src/plugins/i18n.ts | 19 +++++++++++- src/system/settings/settings-gamepad.ts | 5 +++- src/system/settings/settings.ts | 6 ++-- src/ui/abstact-option-select-ui-handler.ts | 4 --- src/ui/admin-ui-handler.ts | 3 +- src/ui/daily-run-scoreboard.ts | 3 +- src/ui/egg-gacha-ui-handler.ts | 6 ++-- src/ui/menu-ui-handler.ts | 3 +- src/ui/party-ui-handler.ts | 6 ++-- src/ui/run-info-ui-handler.ts | 9 ++++-- .../settings/abstract-settings-ui-handler.ts | 3 +- .../settings/move-touch-controls-handler.ts | 2 +- src/ui/starter-select-ui-handler.ts | 3 +- src/ui/test-dialogue-ui-handler.ts | 4 --- 36 files changed, 124 insertions(+), 108 deletions(-) diff --git a/.dependency-cruiser.cjs b/.dependency-cruiser.cjs index 40a9785aeaf..eccec089f1e 100644 --- a/.dependency-cruiser.cjs +++ b/.dependency-cruiser.cjs @@ -218,7 +218,7 @@ module.exports = { module systems it knows of. It's the default because it's the safe option It might come at a performance penalty, though. moduleSystems: ['amd', 'cjs', 'es6', 'tsd'] - + As in practice only commonjs ('cjs') and ecmascript modules ('es6') are widely used, you can limit the moduleSystems to those. */ @@ -226,7 +226,7 @@ module.exports = { // moduleSystems: ['cjs', 'es6'], /* prefix for links in html and svg output (e.g. 'https://github.com/you/yourrepo/blob/main/' - to open it on your online repo or `vscode://file/${process.cwd()}/` to + to open it on your online repo or `vscode://file/${process.cwd()}/` to open it in visual studio code), */ // prefix: `vscode://file/${process.cwd()}/`, @@ -271,7 +271,7 @@ module.exports = { to './webpack.conf.js'. The (optional) `env` and `arguments` attributes contain the parameters - to be passed if your webpack config is a function and takes them (see + to be passed if your webpack config is a function and takes them (see webpack documentation for details) */ // webpackConfig: { @@ -322,8 +322,8 @@ module.exports = { A list of alias fields in package.jsons See [this specification](https://github.com/defunctzombie/package-browser-field-spec) and the webpack [resolve.alias](https://webpack.js.org/configuration/resolve/#resolvealiasfields) - documentation - + documentation + Defaults to an empty array (= don't use alias fields). */ // aliasFields: ["browser"], diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 79ab1bdc38a..979b94f84d6 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -8,7 +8,7 @@ # Art Team /public/**/*.png @pagefaultgames/art-team -/public/**/*.json @pagefaultgames/art-team +/public/**/*.json @pagefaultgames/art-team /public/images @pagefaultgames/art-team /public/battle-anims @pagefaultgames/art-team diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 00190e477d5..a233a2fccab 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -35,7 +35,7 @@ jobs: ssh-keyscan -H ${{ secrets.SSH_HOST }} >> ~/.ssh/known_hosts - name: Deploy build on server if: github.event_name == 'push' && github.ref_name == 'main' - run: | + run: | rsync --del --no-times --checksum -vrm dist/* ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:${{ secrets.DESTINATION_DIR }} ssh -t ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} "~/prmanifest --inpath ${{ secrets.DESTINATION_DIR }} --outpath ${{ secrets.DESTINATION_DIR }}/manifest.json" - name: Purge Cloudflare Cache diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml index d9592662998..36233248472 100644 --- a/.github/workflows/quality.yml +++ b/.github/workflows/quality.yml @@ -33,7 +33,7 @@ jobs: - name: Install Node.js dependencies # Step to install Node.js dependencies run: npm ci # Use 'npm ci' to install dependencies - + - name: eslint # Step to run linters run: npm run eslint-ci diff --git a/biome.jsonc b/biome.jsonc index 82ce7c308dc..f427debb198 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -47,8 +47,8 @@ "correctness": { "noUndeclaredVariables": "off", "noUnusedVariables": "error", - "noSwitchDeclarations": "warn", // TODO: refactor and make this an error - "noVoidTypeReturn": "warn", // TODO: Refactor and make this an error + "noSwitchDeclarations": "error", + "noVoidTypeReturn": "error", "noUnusedImports": "error" }, "style": { @@ -85,7 +85,7 @@ "useLiteralKeys": "off", "noForEach": "off", // Foreach vs for of is not that simple. "noUselessSwitchCase": "off", // Explicit > Implicit - "noUselessConstructor": "warn", // TODO: Refactor and make this an error + "noUselessConstructor": "error", "noBannedTypes": "warn" // TODO: Refactor and make this an error }, "nursery": { diff --git a/global.d.ts b/global.d.ts index c896a4983e4..d2ed6438c0b 100644 --- a/global.d.ts +++ b/global.d.ts @@ -7,7 +7,7 @@ declare global { * Only used in testing. * Can technically be undefined/null but for ease of use we are going to assume it is always defined. * Used to load i18n files exclusively. - * + * * To set up your own server in a test see `game_data.test.ts` */ var server: SetupServerApi; diff --git a/package.json b/package.json index 36c3c2b919f..b927542788d 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "eslint": "eslint --fix .", "eslint-ci": "eslint .", "biome": "biome check --write --changed --no-errors-on-unmatched", - "biome-ci": "biome ci --diagnostic-level=error --reporter=github --changed --no-errors-on-unmatched", + "biome-ci": "biome ci --diagnostic-level=error --reporter=github --no-errors-on-unmatched", "docs": "typedoc", "depcruise": "depcruise src", "depcruise:graph": "depcruise src --output-type dot | node dependency-graph.js > dependency-graph.svg", diff --git a/src/@types/modifier-types.ts b/src/@types/modifier-types.ts index 6c0136e655e..80b92c35622 100644 --- a/src/@types/modifier-types.ts +++ b/src/@types/modifier-types.ts @@ -29,4 +29,4 @@ export type ModifierString = keyof ModifierConstructorMap; export type ModifierPool = { [tier: string]: WeightedModifierType[]; -} \ No newline at end of file +}; diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 89d5a76159f..98cefb78bd5 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -125,16 +125,6 @@ export interface TerrainBattlerTag { * Players and enemies should not be allowed to select restricted moves. */ export abstract class MoveRestrictionBattlerTag extends BattlerTag { - constructor( - tagType: BattlerTagType, - lapseType: BattlerTagLapseType | BattlerTagLapseType[], - turnCount: number, - sourceMove?: MoveId, - sourceId?: number, - ) { - super(tagType, lapseType, turnCount, sourceMove, sourceId); - } - /** @override */ override lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { if (lapseType === BattlerTagLapseType.PRE_MOVE) { @@ -1470,16 +1460,6 @@ export class WrapTag extends DamagingTrapTag { } export abstract class VortexTrapTag extends DamagingTrapTag { - constructor( - tagType: BattlerTagType, - commonAnim: CommonAnim, - turnCount: number, - sourceMove: MoveId, - sourceId: number, - ) { - super(tagType, commonAnim, turnCount, sourceMove, sourceId); - } - getTrapMessage(pokemon: Pokemon): string { return i18next.t("battlerTags:vortexOnTrap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), diff --git a/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts b/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts index f925452e143..c53ff610c48 100644 --- a/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts +++ b/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts @@ -11,10 +11,7 @@ import { STEALING_MOVES } from "#app/data/mystery-encounters/requirements/requir import type Pokemon from "#app/field/pokemon"; import { ModifierTier } from "#enums/modifier-tier"; import type { ModifierTypeOption } from "#app/modifier/modifier-type"; -import { - getPlayerModifierTypeOptions, - regenerateModifierPoolThresholds, -} from "#app/modifier/modifier-type"; +import { getPlayerModifierTypeOptions, regenerateModifierPoolThresholds } from "#app/modifier/modifier-type"; import { ModifierPoolType } from "#enums/modifier-pool-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { globalScene } from "#app/global-scene"; diff --git a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts index 1b188915de7..0393bcdaa62 100644 --- a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts +++ b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts @@ -7,10 +7,7 @@ import { TrainerSlot } from "#enums/trainer-slot"; import { ModifierTier } from "#enums/modifier-tier"; import { MusicPreference } from "#app/system/settings/settings"; import type { ModifierTypeOption } from "#app/modifier/modifier-type"; -import { - getPlayerModifierTypeOptions, - regenerateModifierPoolThresholds, -} from "#app/modifier/modifier-type"; +import { getPlayerModifierTypeOptions, regenerateModifierPoolThresholds } from "#app/modifier/modifier-type"; import { ModifierPoolType } from "#enums/modifier-pool-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { globalScene } from "#app/global-scene"; diff --git a/src/field/arena.ts b/src/field/arena.ts index c77c9a5b3ce..22cb9e32863 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -262,7 +262,7 @@ export class Arena { return 5; } break; - case SpeciesId.LYCANROC: + case SpeciesId.LYCANROC: { const timeOfDay = this.getTimeOfDay(); switch (timeOfDay) { case TimeOfDay.DAY: @@ -274,6 +274,7 @@ export class Arena { return 1; } break; + } } return 0; diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 834c65437af..0205b5bf4b2 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -4385,14 +4385,16 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // biome-ignore lint: there are a ton of issues.. faintCry(callback: Function): void { if (this.fusionSpecies && this.getSpeciesForm() !== this.getFusionSpeciesForm()) { - return this.fusionFaintCry(callback); + this.fusionFaintCry(callback); + return; } const key = this.species.getCryKey(this.formIndex); let rate = 0.85; const cry = globalScene.playSound(key, { rate: rate }) as AnySound; if (!cry || globalScene.fieldVolume === 0) { - return callback(); + callback(); + return; } const sprite = this.getSprite(); const tintSprite = this.getTintSprite(); @@ -4460,7 +4462,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { rate: rate, }) as AnySound; if (!cry || !fusionCry || globalScene.fieldVolume === 0) { - return callback(); + callback(); + return; } fusionCry.stop(); duration = Math.min(duration, fusionCry.totalDuration * 1000); diff --git a/src/overrides.ts b/src/overrides.ts index b5df1073c28..6086f75a58e 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -272,7 +272,7 @@ class DefaultOverrides { /** * Set all non-scripted waves to use the selected battle type. - * + * * Ignored if set to {@linkcode BattleType.TRAINER} and `DISABLE_STANDARD_TRAINERS_OVERRIDE` is `true`. */ readonly BATTLE_TYPE_OVERRIDE: Exclude | null = null; @@ -298,4 +298,4 @@ export type RandomTrainerOverride = { } /** The type of the {@linkcode DefaultOverrides} class */ -export type OverridesType = typeof DefaultOverrides; \ No newline at end of file +export type OverridesType = typeof DefaultOverrides; diff --git a/src/phases/add-enemy-buff-modifier-phase.ts b/src/phases/add-enemy-buff-modifier-phase.ts index 185464670d3..218a3a653ff 100644 --- a/src/phases/add-enemy-buff-modifier-phase.ts +++ b/src/phases/add-enemy-buff-modifier-phase.ts @@ -1,8 +1,5 @@ import { ModifierTier } from "#enums/modifier-tier"; -import { - regenerateModifierPoolThresholds, - getEnemyBuffModifierForWave, -} from "#app/modifier/modifier-type"; +import { regenerateModifierPoolThresholds, getEnemyBuffModifierForWave } from "#app/modifier/modifier-type"; import { ModifierPoolType } from "#enums/modifier-pool-type"; import { EnemyPersistentModifier } from "#app/modifier/modifier"; import { Phase } from "#app/phase"; diff --git a/src/phases/command-phase.ts b/src/phases/command-phase.ts index d7264b4aff2..e796f22921c 100644 --- a/src/phases/command-phase.ts +++ b/src/phases/command-phase.ts @@ -149,7 +149,7 @@ export class CommandPhase extends FieldPhase { switch (command) { case Command.TERA: - case Command.FIGHT: + case Command.FIGHT: { let useStruggle = false; const turnMove: TurnMove | undefined = args.length === 2 ? (args[1] as TurnMove) : undefined; if ( @@ -233,7 +233,8 @@ export class CommandPhase extends FieldPhase { ); } break; - case Command.BALL: + } + case Command.BALL: { const notInDex = globalScene .getEnemyField() @@ -337,8 +338,9 @@ export class CommandPhase extends FieldPhase { } } break; + } case Command.POKEMON: - case Command.RUN: + case Command.RUN: { const isSwitch = command === Command.POKEMON; const { currentBattle, arena } = globalScene; const mysteryEncounterFleeAllowed = currentBattle.mysteryEncounter?.fleeAllowed; @@ -445,6 +447,7 @@ export class CommandPhase extends FieldPhase { } } break; + } } if (success) { diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index d72c7396f1f..a14327749f7 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -135,7 +135,8 @@ export class MovePhase extends BattlePhase { this.showMoveText(); this.showFailedText(); } - return this.end(); + this.end(); + return; } this.pokemon.turnData.acted = true; @@ -310,7 +311,8 @@ export class MovePhase extends BattlePhase { if (fail) { this.showMoveText(); this.showFailedText(); - return this.end(); + this.end(); + return; } } diff --git a/src/phases/pokemon-anim-phase.ts b/src/phases/pokemon-anim-phase.ts index b1a21446996..314bddb981d 100644 --- a/src/phases/pokemon-anim-phase.ts +++ b/src/phases/pokemon-anim-phase.ts @@ -53,7 +53,8 @@ export class PokemonAnimPhase extends BattlePhase { private doSubstituteAddAnim(): void { const substitute = this.pokemon.getTag(SubstituteTag); if (isNullOrUndefined(substitute)) { - return this.end(); + this.end(); + return; } const getSprite = () => { @@ -116,12 +117,14 @@ export class PokemonAnimPhase extends BattlePhase { private doSubstitutePreMoveAnim(): void { if (this.fieldAssets.length !== 1) { - return this.end(); + this.end(); + return; } const subSprite = this.fieldAssets[0]; if (subSprite === undefined) { - return this.end(); + this.end(); + return; } globalScene.tweens.add({ @@ -145,12 +148,14 @@ export class PokemonAnimPhase extends BattlePhase { private doSubstitutePostMoveAnim(): void { if (this.fieldAssets.length !== 1) { - return this.end(); + this.end(); + return; } const subSprite = this.fieldAssets[0]; if (subSprite === undefined) { - return this.end(); + this.end(); + return; } globalScene.tweens.add({ @@ -174,12 +179,14 @@ export class PokemonAnimPhase extends BattlePhase { private doSubstituteRemoveAnim(): void { if (this.fieldAssets.length !== 1) { - return this.end(); + this.end(); + return; } const subSprite = this.fieldAssets[0]; if (subSprite === undefined) { - return this.end(); + this.end(); + return; } const getSprite = () => { @@ -244,12 +251,14 @@ export class PokemonAnimPhase extends BattlePhase { private doCommanderApplyAnim(): void { if (!globalScene.currentBattle?.double) { - return this.end(); + this.end(); + return; } const dondozo = this.pokemon.getAlly(); if (dondozo?.species?.speciesId !== SpeciesId.DONDOZO) { - return this.end(); + this.end(); + return; } const tatsugiriX = this.pokemon.x + this.pokemon.getSprite().x; @@ -329,7 +338,8 @@ export class PokemonAnimPhase extends BattlePhase { const tatsugiri = this.pokemon.getAlly(); if (isNullOrUndefined(tatsugiri)) { console.warn("Aborting COMMANDER_REMOVE anim: Tatsugiri is undefined"); - return this.end(); + this.end(); + return; } const tatsuSprite = globalScene.addPokemonSprite( diff --git a/src/phases/pokemon-transform-phase.ts b/src/phases/pokemon-transform-phase.ts index ab0949c42b9..65fccb24d99 100644 --- a/src/phases/pokemon-transform-phase.ts +++ b/src/phases/pokemon-transform-phase.ts @@ -29,7 +29,8 @@ export class PokemonTransformPhase extends PokemonPhase { const target = globalScene.getField(true).find(p => p.getBattlerIndex() === this.targetIndex); if (!target) { - return this.end(); + this.end(); + return; } user.summonData.speciesForm = target.getSpeciesForm(); diff --git a/src/phases/quiet-form-change-phase.ts b/src/phases/quiet-form-change-phase.ts index e6a00c73756..41b691844bf 100644 --- a/src/phases/quiet-form-change-phase.ts +++ b/src/phases/quiet-form-change-phase.ts @@ -29,7 +29,8 @@ export class QuietFormChangePhase extends BattlePhase { super.start(); if (this.pokemon.formIndex === this.pokemon.species.forms.findIndex(f => f.formKey === this.formChange.formKey)) { - return this.end(); + this.end(); + return; } const preName = getPokemonNameWithAffix(this.pokemon); diff --git a/src/pipelines/glsl/fieldSpriteFragShader.frag b/src/pipelines/glsl/fieldSpriteFragShader.frag index e79dea86fe9..0eb95ece5e3 100644 --- a/src/pipelines/glsl/fieldSpriteFragShader.frag +++ b/src/pipelines/glsl/fieldSpriteFragShader.frag @@ -51,7 +51,7 @@ float hue2rgb(float f1, float f2, float hue) { vec3 rgb2hsl(vec3 color) { vec3 hsl; - + float fmin = min(min(color.r, color.g), color.b); float fmax = max(max(color.r, color.g), color.b); float delta = fmax - fmin; @@ -66,7 +66,7 @@ vec3 rgb2hsl(vec3 color) { hsl.y = delta / (fmax + fmin); else hsl.y = delta / (2.0 - fmax - fmin); - + float deltaR = (((fmax - color.r) / 6.0) + (delta / 2.0)) / delta; float deltaG = (((fmax - color.g) / 6.0) + (delta / 2.0)) / delta; float deltaB = (((fmax - color.b) / 6.0) + (delta / 2.0)) / delta; @@ -89,24 +89,24 @@ vec3 rgb2hsl(vec3 color) { vec3 hsl2rgb(vec3 hsl) { vec3 rgb; - + if (hsl.y == 0.0) rgb = vec3(hsl.z); else { float f2; - + if (hsl.z < 0.5) f2 = hsl.z * (1.0 + hsl.y); else f2 = (hsl.z + hsl.y) - (hsl.y * hsl.z); - + float f1 = 2.0 * hsl.z - f2; - + rgb.r = hue2rgb(f1, f2, hsl.x + (1.0/3.0)); rgb.g = hue2rgb(f1, f2, hsl.x); rgb.b = hue2rgb(f1, f2, hsl.x - (1.0/3.0)); } - + return rgb; } diff --git a/src/pipelines/glsl/spriteFragShader.frag b/src/pipelines/glsl/spriteFragShader.frag index 03f8c8c27bc..9328cc4d96d 100644 --- a/src/pipelines/glsl/spriteFragShader.frag +++ b/src/pipelines/glsl/spriteFragShader.frag @@ -83,7 +83,7 @@ vec3 rgb2hsl(vec3 color) { hsl.y = delta / (fmax + fmin); else hsl.y = delta / (2.0 - fmax - fmin); - + float deltaR = (((fmax - color.r) / 6.0) + (delta / 2.0)) / delta; float deltaG = (((fmax - color.g) / 6.0) + (delta / 2.0)) / delta; float deltaB = (((fmax - color.b) / 6.0) + (delta / 2.0)) / delta; @@ -106,24 +106,24 @@ vec3 rgb2hsl(vec3 color) { vec3 hsl2rgb(vec3 hsl) { vec3 rgb; - + if (hsl.y == 0.0) rgb = vec3(hsl.z); else { float f2; - + if (hsl.z < 0.5) f2 = hsl.z * (1.0 + hsl.y); else f2 = (hsl.z + hsl.y) - (hsl.y * hsl.z); - + float f1 = 2.0 * hsl.z - f2; - + rgb.r = hue2rgb(f1, f2, hsl.x + (1.0/3.0)); rgb.g = hue2rgb(f1, f2, hsl.x); rgb.b= hue2rgb(f1, f2, hsl.x - (1.0/3.0)); } - + return rgb; } diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts index 515d9aec528..8ca9005096f 100644 --- a/src/plugins/i18n.ts +++ b/src/plugins/i18n.ts @@ -174,7 +174,24 @@ export async function initI18n(): Promise { "es-MX": ["es-ES", "en"], default: ["en"], }, - supportedLngs: ["en", "es-ES", "es-MX", "fr", "it", "de", "zh-CN", "zh-TW", "pt-BR", "ko", "ja", "ca", "da", "tr", "ro", "ru"], + supportedLngs: [ + "en", + "es-ES", + "es-MX", + "fr", + "it", + "de", + "zh-CN", + "zh-TW", + "pt-BR", + "ko", + "ja", + "ca", + "da", + "tr", + "ro", + "ru", + ], backend: { loadPath(lng: string, [ns]: string[]) { let fileName: string; diff --git a/src/system/settings/settings-gamepad.ts b/src/system/settings/settings-gamepad.ts index d39d5cf5a41..8a28e9fbf14 100644 --- a/src/system/settings/settings-gamepad.ts +++ b/src/system/settings/settings-gamepad.ts @@ -32,7 +32,10 @@ const pressAction = i18next.t("settings:pressActionToAssign"); export const settingGamepadOptions = { [SettingGamepad.Controller]: [i18next.t("settings:controllerDefault"), i18next.t("settings:controllerChange")], - [SettingGamepad.Gamepad_Support]: [i18next.t("settings:gamepadSupportAuto"), i18next.t("settings:gamepadSupportDisabled")], + [SettingGamepad.Gamepad_Support]: [ + i18next.t("settings:gamepadSupportAuto"), + i18next.t("settings:gamepadSupportDisabled"), + ], [SettingGamepad.Button_Up]: [`KEY ${Button.UP.toString()}`, pressAction], [SettingGamepad.Button_Down]: [`KEY ${Button.DOWN.toString()}`, pressAction], [SettingGamepad.Button_Left]: [`KEY ${Button.LEFT.toString()}`, pressAction], diff --git a/src/system/settings/settings.ts b/src/system/settings/settings.ts index 69abc669870..ca5395a5af7 100644 --- a/src/system/settings/settings.ts +++ b/src/system/settings/settings.ts @@ -959,7 +959,7 @@ export function setSetting(setting: string, value: number): boolean { }, { label: "Türkçe (Needs Help)", - handler: () => changeLocaleHandler("tr") + handler: () => changeLocaleHandler("tr"), }, { label: "Русский (Needs Help)", @@ -967,11 +967,11 @@ export function setSetting(setting: string, value: number): boolean { }, { label: "Dansk (Needs Help)", - handler: () => changeLocaleHandler("da") + handler: () => changeLocaleHandler("da"), }, { label: "Română (Needs Help)", - handler: () => changeLocaleHandler("ro") + handler: () => changeLocaleHandler("ro"), }, { label: i18next.t("settings:back"), diff --git a/src/ui/abstact-option-select-ui-handler.ts b/src/ui/abstact-option-select-ui-handler.ts index 07609648a4e..e1263bc088c 100644 --- a/src/ui/abstact-option-select-ui-handler.ts +++ b/src/ui/abstact-option-select-ui-handler.ts @@ -56,10 +56,6 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { protected defaultTextStyle: TextStyle = TextStyle.WINDOW; protected textContent: string; - constructor(mode: UiMode | null) { - super(mode); - } - abstract getWindowWidth(): number; getWindowHeight(): number { diff --git a/src/ui/admin-ui-handler.ts b/src/ui/admin-ui-handler.ts index 67ae3118863..c8c8e43802b 100644 --- a/src/ui/admin-ui-handler.ts +++ b/src/ui/admin-ui-handler.ts @@ -69,7 +69,7 @@ export default class AdminUiHandler extends FormModalUiHandler { case AdminMode.SEARCH: inputFieldConfigs.push({ label: "Username" }); break; - case AdminMode.ADMIN: + case AdminMode.ADMIN: { const adminResult = this.adminResult ?? { username: "", discordId: "", @@ -90,6 +90,7 @@ export default class AdminUiHandler extends FormModalUiHandler { inputFieldConfigs.push({ label: "Last played", isReadOnly: true }); inputFieldConfigs.push({ label: "Registered", isReadOnly: true }); break; + } } return inputFieldConfigs; } diff --git a/src/ui/daily-run-scoreboard.ts b/src/ui/daily-run-scoreboard.ts index 076a782908b..e19882b09cc 100644 --- a/src/ui/daily-run-scoreboard.ts +++ b/src/ui/daily-run-scoreboard.ts @@ -169,12 +169,13 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container { entryContainer.add(scoreLabel); switch (this.category) { - case ScoreboardCategory.DAILY: + case ScoreboardCategory.DAILY: { const waveLabel = addTextObject(68, 0, wave, TextStyle.WINDOW, { fontSize: "54px", }); entryContainer.add(waveLabel); break; + } case ScoreboardCategory.WEEKLY: scoreLabel.x -= 16; break; diff --git a/src/ui/egg-gacha-ui-handler.ts b/src/ui/egg-gacha-ui-handler.ts index d6b1b630a05..1b1aed91203 100644 --- a/src/ui/egg-gacha-ui-handler.ts +++ b/src/ui/egg-gacha-ui-handler.ts @@ -131,7 +131,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { gachaInfoContainer.add(gachaUpLabel); switch (gachaType as GachaType) { - case GachaType.LEGENDARY: + case GachaType.LEGENDARY: { if (["de", "es-ES"].includes(currentLanguage)) { gachaUpLabel.setAlign("center"); gachaUpLabel.setY(0); @@ -152,6 +152,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { gachaInfoContainer.add(pokemonIcon); break; + } case GachaType.MOVE: if (["de", "es-ES", "fr", "pt-BR", "ru"].includes(currentLanguage)) { gachaUpLabel.setAlign("center"); @@ -623,11 +624,12 @@ export default class EggGachaUiHandler extends MessageUiHandler { updateGachaInfo(gachaType: GachaType): void { const infoContainer = this.gachaInfoContainers[gachaType]; switch (gachaType as GachaType) { - case GachaType.LEGENDARY: + case GachaType.LEGENDARY: { const species = getPokemonSpecies(getLegendaryGachaSpeciesForTimestamp(new Date().getTime())); const pokemonIcon = infoContainer.getAt(1) as Phaser.GameObjects.Sprite; pokemonIcon.setTexture(species.getIconAtlasKey(), species.getIconId(false)); break; + } } } diff --git a/src/ui/menu-ui-handler.ts b/src/ui/menu-ui-handler.ts index e68cc706aba..5ab1d4f9e96 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -686,7 +686,7 @@ export default class MenuUiHandler extends MessageUiHandler { error = true; } break; - case MenuOptions.LOG_OUT: + case MenuOptions.LOG_OUT: { success = true; const doLogout = () => { ui.setMode(UiMode.LOADING, { @@ -718,6 +718,7 @@ export default class MenuUiHandler extends MessageUiHandler { doLogout(); } break; + } } } else if (button === Button.CANCEL) { success = true; diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index a2dfe83e996..8e197c08ef3 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -1385,7 +1385,7 @@ export default class PartyUiHandler extends MessageUiHandler { case PartyOption.MOVE_1: case PartyOption.MOVE_2: case PartyOption.MOVE_3: - case PartyOption.MOVE_4: + case PartyOption.MOVE_4: { const move = pokemon.moveset[option - PartyOption.MOVE_1]; if (this.showMovePp) { const maxPP = move.getMovePp(); @@ -1395,7 +1395,8 @@ export default class PartyUiHandler extends MessageUiHandler { optionName = move.getName(); } break; - default: + } + default: { const formChangeItemModifiers = this.getFormChangeItemsModifiers(pokemon); if (formChangeItemModifiers && option >= PartyOption.FORM_CHANGE_ITEM) { const modifier = formChangeItemModifiers[option - PartyOption.FORM_CHANGE_ITEM]; @@ -1410,6 +1411,7 @@ export default class PartyUiHandler extends MessageUiHandler { } } break; + } } } else if (this.partyUiMode === PartyUiMode.REMEMBER_MOVE_MODIFIER) { const learnableLevelMoves = pokemon.getLearnableLevelMoves(); diff --git a/src/ui/run-info-ui-handler.ts b/src/ui/run-info-ui-handler.ts index a4de2215fa4..78ab4a40407 100644 --- a/src/ui/run-info-ui-handler.ts +++ b/src/ui/run-info-ui-handler.ts @@ -567,7 +567,7 @@ export default class RunInfoUiHandler extends UiHandler { case GameModes.SPLICED_ENDLESS: modeText.appendText(`${i18next.t("gameMode:endlessSpliced")}`, false); break; - case GameModes.CHALLENGE: + case GameModes.CHALLENGE: { modeText.appendText(`${i18next.t("gameMode:challenge")}`, false); modeText.appendText(`${i18next.t("runHistory:challengeRules")}: `); modeText.setWrapMode(1); // wrap by word @@ -582,6 +582,7 @@ export default class RunInfoUiHandler extends UiHandler { } } break; + } case GameModes.ENDLESS: modeText.appendText(`${i18next.t("gameMode:endless")}`, false); break; @@ -687,7 +688,7 @@ export default class RunInfoUiHandler extends UiHandler { case Challenges.SINGLE_GENERATION: rules.push(i18next.t(`runHistory:challengeMonoGen${this.runInfo.challenges[i].value}`)); break; - case Challenges.SINGLE_TYPE: + case Challenges.SINGLE_TYPE: { const typeRule = PokemonType[this.runInfo.challenges[i].value - 1]; const typeTextColor = `[color=${TypeColor[typeRule]}]`; const typeShadowColor = `[shadow=${TypeShadow[typeRule]}]`; @@ -695,16 +696,18 @@ export default class RunInfoUiHandler extends UiHandler { typeTextColor + typeShadowColor + i18next.t(`pokemonInfo:Type.${typeRule}`)! + "[/color]" + "[/shadow]"; rules.push(typeText); break; + } case Challenges.INVERSE_BATTLE: rules.push(i18next.t("challenges:inverseBattle.shortName")); break; - default: + default: { const localisationKey = Challenges[this.runInfo.challenges[i].id] .split("_") .map((f, i) => (i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase())) .join(""); rules.push(i18next.t(`challenges:${localisationKey}.name`)); break; + } } } } diff --git a/src/ui/settings/abstract-settings-ui-handler.ts b/src/ui/settings/abstract-settings-ui-handler.ts index a621b056e28..6db9840a818 100644 --- a/src/ui/settings/abstract-settings-ui-handler.ts +++ b/src/ui/settings/abstract-settings-ui-handler.ts @@ -332,12 +332,13 @@ export default class AbstractSettingsUiHandler extends MessageUiHandler { case Button.CYCLE_SHINY: success = this.navigationContainer.navigate(button); break; - case Button.ACTION: + case Button.ACTION: { const setting: Setting = this.settings[cursor]; if (setting?.activatable) { success = this.activateSetting(setting); } break; + } } } diff --git a/src/ui/settings/move-touch-controls-handler.ts b/src/ui/settings/move-touch-controls-handler.ts index 44377c8c2ab..f684d27f748 100644 --- a/src/ui/settings/move-touch-controls-handler.ts +++ b/src/ui/settings/move-touch-controls-handler.ts @@ -98,7 +98,7 @@ export default class MoveTouchControlsHandler {

      -
      +
      ${i18next.t("settings:orientation")} ${this.isLandscapeMode ? i18next.t("settings:landscape") : i18next.t("settings:portrait")} diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 88f881746bb..7c8b05b6f76 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -1763,7 +1763,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } } else if (this.randomCursorObj.visible) { switch (button) { - case Button.ACTION: + case Button.ACTION: { if (this.starterSpecies.length >= 6) { error = true; break; @@ -1815,6 +1815,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } }); break; + } case Button.UP: this.randomCursorObj.setVisible(false); this.filterBarCursor = this.filterBar.numFilters - 1; diff --git a/src/ui/test-dialogue-ui-handler.ts b/src/ui/test-dialogue-ui-handler.ts index 9ecf1641e7b..b1e5047955a 100644 --- a/src/ui/test-dialogue-ui-handler.ts +++ b/src/ui/test-dialogue-ui-handler.ts @@ -10,10 +10,6 @@ import { UiMode } from "#enums/ui-mode"; export default class TestDialogueUiHandler extends FormModalUiHandler { keys: string[]; - constructor(mode) { - super(mode); - } - setup() { super.setup(); From fd1404706ac9b6163eb46d7aedee849e980f48a4 Mon Sep 17 00:00:00 2001 From: Wlowscha <54003515+Wlowscha@users.noreply.github.com> Date: Sat, 14 Jun 2025 14:01:29 +0200 Subject: [PATCH 240/262] [Bug] Remove empty `modifierPool` (#5988) --- src/modifier/modifier-type.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 2c848c69e18..cf373e6441a 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -2393,8 +2393,6 @@ export interface ModifierPool { [tier: string]: WeightedModifierType[]; } -const modifierPool: ModifierPool = {}; - let modifierPoolThresholds = {}; let ignoredPoolIndexes = {}; @@ -2859,7 +2857,7 @@ function getNewModifierTypeOption( } tier += upgradeCount; - while (tier && (!modifierPool.hasOwnProperty(tier) || !modifierPool[tier].length)) { + while (tier && (!pool.hasOwnProperty(tier) || !pool[tier].length)) { tier--; if (upgradeCount) { upgradeCount--; @@ -2870,7 +2868,7 @@ function getNewModifierTypeOption( if (tier < ModifierTier.MASTER && allowLuckUpgrades) { const partyLuckValue = getPartyLuckValue(party); const upgradeOdds = Math.floor(128 / ((partyLuckValue + 4) / 4)); - while (modifierPool.hasOwnProperty(tier + upgradeCount + 1) && modifierPool[tier + upgradeCount + 1].length) { + while (pool.hasOwnProperty(tier + upgradeCount + 1) && pool[tier + upgradeCount + 1].length) { if (randSeedInt(upgradeOdds) < 4) { upgradeCount++; } else { @@ -2920,6 +2918,7 @@ function getNewModifierTypeOption( } export function getDefaultModifierTypeForTier(tier: ModifierTier): ModifierType { + const modifierPool = getModifierPoolForType(ModifierPoolType.PLAYER); let modifierType: ModifierType | WeightedModifierType = modifierPool[tier || ModifierTier.COMMON][0]; if (modifierType instanceof WeightedModifierType) { modifierType = (modifierType as WeightedModifierType).modifierType; From 7cf51d48a78bf4037c23e61fa2b319d032a71815 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Sat, 14 Jun 2025 05:06:46 -0700 Subject: [PATCH 241/262] [Test] Make sure items are removed from enemies in Last Respects test --- test/moves/last_respects.test.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/test/moves/last_respects.test.ts b/test/moves/last_respects.test.ts index b2eb4c6695b..08256d3ebfb 100644 --- a/test/moves/last_respects.test.ts +++ b/test/moves/last_respects.test.ts @@ -164,15 +164,13 @@ describe("Moves - Last Respects", () => { await game.toNextWave(); expect(game.scene.currentBattle.enemyFaints).toBe(0); + game.removeEnemyHeldItems(); + game.move.select(MoveId.LAST_RESPECTS); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("MoveEndPhase"); - const enemy = game.field.getEnemyPokemon(); - const player = game.field.getPlayerPokemon(); - const items = `Player items: ${player.getHeldItems()} | Enemy Items: ${enemy.getHeldItems()} |`; - - expect(move.calculateBattlePower, items).toHaveLastReturnedWith(50); + expect(move.calculateBattlePower).toHaveLastReturnedWith(50); }); it("should reset playerFaints count if we enter new trainer battle", async () => { From 73e0a2905b750853da6526d4bf6cc5fe499f1f98 Mon Sep 17 00:00:00 2001 From: damocleas Date: Sat, 14 Jun 2025 17:40:18 -0400 Subject: [PATCH 242/262] [Beta] Revert "[UI/UX] Default cursor to no when stop trying to teach move" (#5990) Revert "[UI/UX] Default cursor to no when stop trying to teach move" This reverts commit ba2158ec640da8913e7b8de39b79c0dd7392aa70. --- src/enums/confirm-ui-mode.ts | 13 ------------- src/phases/learn-move-phase.ts | 5 ----- src/ui/confirm-ui-handler.ts | 14 +------------- test/phases/learn-move-phase.test.ts | 4 ---- 4 files changed, 1 insertion(+), 35 deletions(-) delete mode 100644 src/enums/confirm-ui-mode.ts diff --git a/src/enums/confirm-ui-mode.ts b/src/enums/confirm-ui-mode.ts deleted file mode 100644 index 46bc42374cd..00000000000 --- a/src/enums/confirm-ui-mode.ts +++ /dev/null @@ -1,13 +0,0 @@ -// biome-ignore lint/correctness/noUnusedImports: Used in tsdoc -import type ConfirmUiHandler from "#app/ui/confirm-ui-handler"; - -/** - * Used by {@linkcode ConfirmUiHandler} to determine whether the cursor should start on Yes or No - */ -export const ConfirmUiMode = Object.freeze({ - /** Start cursor on Yes */ - DEFAULT_YES: 1, - /** Start cursor on No */ - DEFAULT_NO: 2 -}); -export type ConfirmUiMode = typeof ConfirmUiMode[keyof typeof ConfirmUiMode]; \ No newline at end of file diff --git a/src/phases/learn-move-phase.ts b/src/phases/learn-move-phase.ts index e197f876d76..e24efa63b5a 100644 --- a/src/phases/learn-move-phase.ts +++ b/src/phases/learn-move-phase.ts @@ -12,7 +12,6 @@ import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; import { PlayerPartyMemberPokemonPhase } from "#app/phases/player-party-member-pokemon-phase"; import type Pokemon from "#app/field/pokemon"; -import { ConfirmUiMode } from "#enums/confirm-ui-mode"; import { LearnMoveType } from "#enums/learn-move-type"; export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { @@ -164,10 +163,6 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { globalScene.ui.setMode(this.messageMode); this.replaceMoveCheck(move, pokemon); }, - false, - 0, - 0, - ConfirmUiMode.DEFAULT_NO, ); } diff --git a/src/ui/confirm-ui-handler.ts b/src/ui/confirm-ui-handler.ts index 37fd50ca671..7b5ca3d7e63 100644 --- a/src/ui/confirm-ui-handler.ts +++ b/src/ui/confirm-ui-handler.ts @@ -4,11 +4,8 @@ import { UiMode } from "#enums/ui-mode"; import i18next from "i18next"; import { Button } from "#enums/buttons"; import { globalScene } from "#app/global-scene"; -import { ConfirmUiMode } from "#enums/confirm-ui-mode"; export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler { - private confirmUiMode: ConfirmUiMode; - public static readonly windowWidth: number = 48; private switchCheck: boolean; @@ -108,16 +105,7 @@ export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler { this.optionSelectContainer.setPosition(globalScene.game.canvas.width / 6 - 1 + xOffset, -48 + yOffset); - this.confirmUiMode = args.length >= 6 ? (args[5] as ConfirmUiMode) : ConfirmUiMode.DEFAULT_YES; - - switch (this.confirmUiMode) { - case ConfirmUiMode.DEFAULT_YES: - this.setCursor(this.switchCheck ? this.switchCheckCursor : 0); - break; - case ConfirmUiMode.DEFAULT_NO: - this.setCursor(this.switchCheck ? this.switchCheckCursor : 1); - break; - } + this.setCursor(this.switchCheck ? this.switchCheckCursor : 0); return true; } diff --git a/test/phases/learn-move-phase.test.ts b/test/phases/learn-move-phase.test.ts index 05dbf71d1f4..88b8187069b 100644 --- a/test/phases/learn-move-phase.test.ts +++ b/test/phases/learn-move-phase.test.ts @@ -92,10 +92,6 @@ describe("Learn Move Phase", () => { game.onNextPrompt("LearnMovePhase", UiMode.CONFIRM, () => { game.scene.ui.processInput(Button.ACTION); }); - game.onNextPrompt("LearnMovePhase", UiMode.CONFIRM, () => { - game.scene.ui.setCursor(0); - game.scene.ui.processInput(Button.ACTION); - }); await game.phaseInterceptor.to(LearnMovePhase); const levelReq = bulbasaur.getLevelMoves(5)[0][0]; From 18ba33e6f07abff75b12caf94980c3e6ec46ba2e Mon Sep 17 00:00:00 2001 From: Dean <69436131+emdeann@users.noreply.github.com> Date: Sun, 15 Jun 2025 00:36:28 -0700 Subject: [PATCH 243/262] [Bug] Fix zombie pokemon in Fun+Games ME (#5992) --- .../mystery-encounters/encounters/fun-and-games-encounter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts index 2d0828b8c0c..7b7317b8719 100644 --- a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts +++ b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts @@ -408,7 +408,7 @@ function summonPlayerPokemonAnimation(pokemon: PlayerPokemon): Promise { onComplete: () => { pokemon.cry(pokemon.getHpRatio() > 0.25 ? undefined : { rate: 0.85 }); pokemon.getSprite().clearTint(); - pokemon.resetSummonData(); + pokemon.fieldSetup(true); globalScene.time.delayedCall(1000, () => { if (pokemon.isShiny()) { globalScene.unshiftPhase(new ShinySparklePhase(pokemon.getBattlerIndex())); From 061c9872658011c1eefba3c10b2de33bdff8a0b0 Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Sun, 15 Jun 2025 03:40:41 -0400 Subject: [PATCH 244/262] [Test] Convert `game.override` calls into chained line where possible https://github.com/pagefaultgames/pokerogue/pull/5926 * Condensed all overrides into 1 line where possible I hope I got them all... * Fixed tests 0.5 * Cleaned up safeguard test to not use outdated code; fixed rest of errors * Fixed illusion test * Revert safeguart etst * Fixed battle tets * Fixed stuff * Fixed things2.0 * Fixed import issues * Revert changes outside of the tests directory * Revert changes outside of the tests directory --------- Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- test/abilities/battery.test.ts | 11 ++- test/abilities/costar.test.ts | 9 +- test/abilities/disguise.test.ts | 34 +++---- test/abilities/flash_fire.test.ts | 19 ++-- test/abilities/flower_gift.test.ts | 7 +- test/abilities/good_as_gold.test.ts | 16 ++- test/abilities/hustle.test.ts | 3 +- test/abilities/ice_face.test.ts | 25 ++--- test/abilities/illusion.test.ts | 15 ++- test/abilities/imposter.test.ts | 3 +- test/abilities/intimidate.test.ts | 3 +- test/abilities/intrepid_sword.test.ts | 9 +- test/abilities/libero.test.ts | 12 +-- test/abilities/magic_bounce.test.ts | 97 ++++++++----------- test/abilities/magic_guard.test.ts | 52 +++++----- test/abilities/mirror_armor.test.ts | 37 +++---- test/abilities/moxie.test.ts | 15 +-- test/abilities/normalize.test.ts | 10 +- test/abilities/parental_bond.test.ts | 39 +++----- test/abilities/perish_body.test.ts | 28 +++--- test/abilities/power_construct.test.ts | 6 +- test/abilities/power_spot.test.ts | 11 ++- test/abilities/protean.test.ts | 12 +-- test/abilities/quick_draw.test.ts | 19 ++-- test/abilities/sand_spit.test.ts | 17 ++-- test/abilities/schooling.test.ts | 3 +- test/abilities/screen_cleaner.test.ts | 4 +- test/abilities/seed_sower.test.ts | 17 ++-- test/abilities/shield_dust.test.ts | 13 +-- test/abilities/shields_down.test.ts | 38 ++++---- test/abilities/steely_spirit.test.ts | 11 ++- test/abilities/sturdy.test.ts | 17 ++-- test/abilities/sweet_veil.test.ts | 5 +- test/abilities/unseen_fist.test.ts | 3 +- test/abilities/volt_absorb.test.ts | 34 ++++--- test/abilities/wind_power.test.ts | 21 ++-- test/abilities/wonder_skin.test.ts | 13 +-- test/abilities/zen_mode.test.ts | 3 +- test/abilities/zero_to_hero.test.ts | 3 +- test/achievements/achievement.test.ts | 6 -- test/arena/weather_fog.test.ts | 14 +-- test/arena/weather_strong_winds.test.ts | 11 ++- test/battle/battle-order.test.ts | 11 ++- test/battle/battle.test.ts | 81 +++++++--------- test/escape-calculations.test.ts | 3 +- test/evolution.test.ts | 11 +-- test/field/pokemon.test.ts | 13 +-- test/items/exp_booster.test.ts | 4 +- test/moves/baneful_bunker.test.ts | 18 ++-- test/moves/baton_pass.test.ts | 13 +-- test/moves/beak_blast.test.ts | 3 +- test/moves/beat_up.test.ts | 17 ++-- test/moves/ceaseless_edge.test.ts | 20 ++-- test/moves/clangorous_soul.test.ts | 13 +-- test/moves/crafty_shield.test.ts | 21 ++-- test/moves/dragon_rage.test.ts | 30 +++--- test/moves/dynamax_cannon.test.ts | 10 +- test/moves/fillet_away.test.ts | 13 +-- test/moves/fissure.test.ts | 28 +++--- test/moves/flame_burst.test.ts | 17 ++-- test/moves/flower_shield.test.ts | 11 ++- test/moves/follow_me.test.ts | 20 ++-- test/moves/gastro_acid.test.ts | 17 ++-- test/moves/glaive_rush.test.ts | 21 ++-- test/moves/growth.test.ts | 11 ++- test/moves/hard_press.test.ts | 13 +-- test/moves/haze.test.ts | 19 ++-- test/moves/hyper_beam.test.ts | 16 +-- test/moves/lunar_blessing.test.ts | 15 ++- test/moves/magic_coat.test.ts | 44 ++++----- test/moves/make_it_rain.test.ts | 20 ++-- test/moves/mat_block.test.ts | 18 ++-- test/moves/parting_shot.test.ts | 11 ++- test/moves/powder.test.ts | 3 +- test/moves/protect.test.ts | 18 ++-- test/moves/purify.test.ts | 17 ++-- test/moves/quick_guard.test.ts | 24 ++--- test/moves/rage_powder.test.ts | 13 +-- test/moves/rollout.test.ts | 21 ++-- test/moves/roost.test.ts | 13 +-- test/moves/safeguard.test.ts | 39 ++++---- test/moves/spikes.test.ts | 4 +- test/moves/spit_up.test.ts | 17 ++-- test/moves/spotlight.test.ts | 15 +-- test/moves/stockpile.test.ts | 17 ++-- test/moves/substitute.test.ts | 30 ++---- test/moves/tackle.test.ts | 1 + test/moves/tail_whip.test.ts | 15 +-- test/moves/thousand_arrows.test.ts | 16 +-- test/moves/tidy_up.test.ts | 19 ++-- test/moves/toxic.test.ts | 3 +- test/moves/transform.test.ts | 3 +- test/moves/wide_guard.test.ts | 18 ++-- .../a-trainers-test-encounter.test.ts | 9 +- .../absolute-avarice-encounter.test.ts | 16 ++- ...an-offer-you-cant-refuse-encounter.test.ts | 3 +- .../bug-type-superfan-encounter.test.ts | 9 +- .../clowning-around-encounter.test.ts | 9 +- .../dancing-lessons-encounter.test.ts | 12 +-- .../encounters/delibirdy-encounter.test.ts | 9 +- .../department-store-sale-encounter.test.ts | 12 +-- .../encounters/field-trip-encounter.test.ts | 11 ++- .../fight-or-flight-encounter.test.ts | 9 +- .../fun-and-games-encounter.test.ts | 12 +-- .../global-trade-system-encounter.test.ts | 12 +-- .../encounters/lost-at-sea-encounter.test.ts | 12 +-- .../mysterious-challengers-encounter.test.ts | 12 +-- .../encounters/part-timer-encounter.test.ts | 12 +-- .../encounters/safari-zone.test.ts | 12 +-- .../teleporting-hijinks-encounter.test.ts | 9 +- .../the-expert-breeder-encounter.test.ts | 12 +-- .../the-pokemon-salesman-encounter.test.ts | 12 +-- .../the-strong-stuff-encounter.test.ts | 3 +- .../the-winstrate-challenge-encounter.test.ts | 12 +-- .../trash-to-treasure-encounter.test.ts | 9 +- .../encounters/weird-dream-encounter.test.ts | 9 +- .../mystery-encounter-utils.test.ts | 1 + .../mystery-encounter.test.ts | 3 +- test/phases/mystery-encounter-phase.test.ts | 5 +- test/testUtils/helpers/moveHelper.ts | 4 +- test/ui/pokedex.test.ts | 4 +- test/ui/transfer-item.test.ts | 23 ++--- 122 files changed, 877 insertions(+), 993 deletions(-) diff --git a/test/abilities/battery.test.ts b/test/abilities/battery.test.ts index 980eaa5b381..db129e72b0b 100644 --- a/test/abilities/battery.test.ts +++ b/test/abilities/battery.test.ts @@ -26,11 +26,12 @@ describe("Abilities - Battery", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("double"); - game.override.enemySpecies(SpeciesId.SHUCKLE); - game.override.enemyAbility(AbilityId.BALL_FETCH); - game.override.moveset([MoveId.TACKLE, MoveId.BREAKING_SWIPE, MoveId.SPLASH, MoveId.DAZZLING_GLEAM]); - game.override.enemyMoveset(MoveId.SPLASH); + game.override + .battleStyle("double") + .enemySpecies(SpeciesId.SHUCKLE) + .enemyAbility(AbilityId.BALL_FETCH) + .moveset([MoveId.TACKLE, MoveId.BREAKING_SWIPE, MoveId.SPLASH, MoveId.DAZZLING_GLEAM]) + .enemyMoveset(MoveId.SPLASH); }); it("raises the power of allies' special moves by 30%", async () => { diff --git a/test/abilities/costar.test.ts b/test/abilities/costar.test.ts index ae09aeea096..a40d84e72f5 100644 --- a/test/abilities/costar.test.ts +++ b/test/abilities/costar.test.ts @@ -24,10 +24,11 @@ describe("Abilities - COSTAR", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("double"); - game.override.ability(AbilityId.COSTAR); - game.override.moveset([MoveId.SPLASH, MoveId.NASTY_PLOT]); - game.override.enemyMoveset(MoveId.SPLASH); + game.override + .battleStyle("double") + .ability(AbilityId.COSTAR) + .moveset([MoveId.SPLASH, MoveId.NASTY_PLOT]) + .enemyMoveset(MoveId.SPLASH); }); test("ability copies positive stat stages", async () => { diff --git a/test/abilities/disguise.test.ts b/test/abilities/disguise.test.ts index 64e0715774d..4ccd825e574 100644 --- a/test/abilities/disguise.test.ts +++ b/test/abilities/disguise.test.ts @@ -66,8 +66,7 @@ describe("Abilities - Disguise", () => { }); it("takes no damage from the first hit of a multihit move and transforms to Busted form, then takes damage from the second hit", async () => { - game.override.moveset([MoveId.SURGING_STRIKES]); - game.override.enemyLevel(5); + game.override.moveset([MoveId.SURGING_STRIKES]).enemyLevel(5); await game.classicMode.startBattle(); const mimikyu = game.scene.getEnemyPokemon()!; @@ -106,8 +105,7 @@ describe("Abilities - Disguise", () => { }); it("persists form change when switched out", async () => { - game.override.enemyMoveset([MoveId.SHADOW_SNEAK]); - game.override.starterSpecies(0); + game.override.enemyMoveset([MoveId.SHADOW_SNEAK]).starterSpecies(0); await game.classicMode.startBattle([SpeciesId.MIMIKYU, SpeciesId.FURRET]); @@ -131,8 +129,7 @@ describe("Abilities - Disguise", () => { }); it("persists form change when wave changes with no arena reset", async () => { - game.override.starterSpecies(0); - game.override.starterForms({ + game.override.starterSpecies(0).starterForms({ [SpeciesId.MIMIKYU]: bustedForm, }); await game.classicMode.startBattle([SpeciesId.FURRET, SpeciesId.MIMIKYU]); @@ -148,11 +145,12 @@ describe("Abilities - Disguise", () => { }); it("reverts to Disguised form on arena reset", async () => { - game.override.startingWave(4); - game.override.starterSpecies(SpeciesId.MIMIKYU); - game.override.starterForms({ - [SpeciesId.MIMIKYU]: bustedForm, - }); + game.override + .startingWave(4) + .starterSpecies(SpeciesId.MIMIKYU) + .starterForms({ + [SpeciesId.MIMIKYU]: bustedForm, + }); await game.classicMode.startBattle(); @@ -168,11 +166,12 @@ describe("Abilities - Disguise", () => { }); it("reverts to Disguised form on biome change when fainted", async () => { - game.override.startingWave(10); - game.override.starterSpecies(0); - game.override.starterForms({ - [SpeciesId.MIMIKYU]: bustedForm, - }); + game.override + .startingWave(10) + .starterSpecies(0) + .starterForms({ + [SpeciesId.MIMIKYU]: bustedForm, + }); await game.classicMode.startBattle([SpeciesId.MIMIKYU, SpeciesId.FURRET]); @@ -206,8 +205,7 @@ describe("Abilities - Disguise", () => { }); it("activates when Aerilate circumvents immunity to the move's base type", async () => { - game.override.ability(AbilityId.AERILATE); - game.override.moveset([MoveId.TACKLE]); + game.override.ability(AbilityId.AERILATE).moveset([MoveId.TACKLE]); await game.classicMode.startBattle(); diff --git a/test/abilities/flash_fire.test.ts b/test/abilities/flash_fire.test.ts index 92bd7b52e57..c3477388912 100644 --- a/test/abilities/flash_fire.test.ts +++ b/test/abilities/flash_fire.test.ts @@ -73,8 +73,7 @@ describe("Abilities - Flash Fire", () => { }, 20000); it("activated after being frozen", async () => { - game.override.enemyMoveset([MoveId.EMBER]).moveset(MoveId.SPLASH); - game.override.statusEffect(StatusEffect.FREEZE); + game.override.enemyMoveset([MoveId.EMBER]).moveset(MoveId.SPLASH).statusEffect(StatusEffect.FREEZE); await game.classicMode.startBattle([SpeciesId.BLISSEY]); const blissey = game.scene.getPlayerPokemon()!; @@ -102,8 +101,11 @@ describe("Abilities - Flash Fire", () => { }, 20000); it("boosts Fire-type move when the ability is activated", async () => { - game.override.enemyMoveset([MoveId.FIRE_PLEDGE]).moveset([MoveId.EMBER, MoveId.SPLASH]); - game.override.enemyAbility(AbilityId.FLASH_FIRE).ability(AbilityId.NONE); + game.override + .enemyMoveset([MoveId.FIRE_PLEDGE]) + .moveset([MoveId.EMBER, MoveId.SPLASH]) + .enemyAbility(AbilityId.FLASH_FIRE) + .ability(AbilityId.NONE); await game.classicMode.startBattle([SpeciesId.BLISSEY]); const blissey = game.scene.getPlayerPokemon()!; const initialHP = 1000; @@ -127,9 +129,12 @@ describe("Abilities - Flash Fire", () => { }, 20000); it("still activates regardless of accuracy check", async () => { - game.override.moveset(MoveId.FIRE_PLEDGE).enemyMoveset(MoveId.EMBER); - game.override.enemyAbility(AbilityId.NONE).ability(AbilityId.FLASH_FIRE); - game.override.enemySpecies(SpeciesId.BLISSEY); + game.override + .moveset(MoveId.FIRE_PLEDGE) + .enemyMoveset(MoveId.EMBER) + .enemyAbility(AbilityId.NONE) + .ability(AbilityId.FLASH_FIRE) + .enemySpecies(SpeciesId.BLISSEY); await game.classicMode.startBattle([SpeciesId.RATTATA]); const blissey = game.scene.getEnemyPokemon()!; diff --git a/test/abilities/flower_gift.test.ts b/test/abilities/flower_gift.test.ts index 26180492cbd..f072afe7f34 100644 --- a/test/abilities/flower_gift.test.ts +++ b/test/abilities/flower_gift.test.ts @@ -47,9 +47,10 @@ describe("Abilities - Flower Gift", () => { allyAbility = AbilityId.BALL_FETCH, enemyAbility = AbilityId.BALL_FETCH, ): Promise<[number, number]> => { - game.override.battleStyle("double"); - game.override.moveset([MoveId.SPLASH, MoveId.SUNNY_DAY, move, MoveId.HEAL_PULSE]); - game.override.enemyMoveset([MoveId.SPLASH, MoveId.HEAL_PULSE]); + game.override + .battleStyle("double") + .moveset([MoveId.SPLASH, MoveId.SUNNY_DAY, move, MoveId.HEAL_PULSE]) + .enemyMoveset([MoveId.SPLASH, MoveId.HEAL_PULSE]); const target_index = allyAttacker ? BattlerIndex.ENEMY : BattlerIndex.PLAYER_2; const attacker_index = allyAttacker ? BattlerIndex.PLAYER_2 : BattlerIndex.ENEMY; const ally_move = allyAttacker ? move : MoveId.SPLASH; diff --git a/test/abilities/good_as_gold.test.ts b/test/abilities/good_as_gold.test.ts index 85fadd472dc..3b6600eabd4 100644 --- a/test/abilities/good_as_gold.test.ts +++ b/test/abilities/good_as_gold.test.ts @@ -63,9 +63,10 @@ describe("Abilities - Good As Gold", () => { }); it("should not block any status moves that target the field, one side, or all pokemon", async () => { - game.override.battleStyle("double"); - game.override.enemyMoveset([MoveId.STEALTH_ROCK, MoveId.HAZE]); - game.override.moveset([MoveId.SWORDS_DANCE, MoveId.SAFEGUARD]); + game.override + .battleStyle("double") + .enemyMoveset([MoveId.STEALTH_ROCK, MoveId.HAZE]) + .moveset([MoveId.SWORDS_DANCE, MoveId.SAFEGUARD]); await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS]); const [good_as_gold, ball_fetch] = game.scene.getPlayerField(); @@ -85,8 +86,7 @@ describe("Abilities - Good As Gold", () => { }); it("should not block field targeted effects in singles", async () => { - game.override.battleStyle("single"); - game.override.enemyMoveset([MoveId.SPIKES]); + game.override.battleStyle("single").enemyMoveset([MoveId.SPIKES]); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); game.move.select(MoveId.SPLASH, 0); @@ -96,8 +96,7 @@ describe("Abilities - Good As Gold", () => { }); it("should block the ally's helping hand", async () => { - game.override.battleStyle("double"); - game.override.moveset([MoveId.HELPING_HAND, MoveId.TACKLE]); + game.override.battleStyle("double").moveset([MoveId.HELPING_HAND, MoveId.TACKLE]); await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS]); game.move.select(MoveId.HELPING_HAND, 0); @@ -129,8 +128,7 @@ describe("Abilities - Good As Gold", () => { }); it("should not block field targeted effects like rain dance", async () => { - game.override.battleStyle("single"); - game.override.enemyMoveset([MoveId.RAIN_DANCE]); + game.override.battleStyle("single").enemyMoveset([MoveId.RAIN_DANCE]); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); game.move.use(MoveId.SPLASH, 0); diff --git a/test/abilities/hustle.test.ts b/test/abilities/hustle.test.ts index 58aa01bb39a..7ac636b15b2 100644 --- a/test/abilities/hustle.test.ts +++ b/test/abilities/hustle.test.ts @@ -75,8 +75,7 @@ describe("Abilities - Hustle", () => { }); it("does not affect OHKO moves", async () => { - game.override.startingLevel(100); - game.override.enemyLevel(30); + game.override.startingLevel(100).enemyLevel(30); await game.classicMode.startBattle([SpeciesId.PIKACHU]); const pikachu = game.scene.getPlayerPokemon()!; diff --git a/test/abilities/ice_face.test.ts b/test/abilities/ice_face.test.ts index 2899120db5a..c42713d7e6c 100644 --- a/test/abilities/ice_face.test.ts +++ b/test/abilities/ice_face.test.ts @@ -30,10 +30,11 @@ describe("Abilities - Ice Face", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.enemySpecies(SpeciesId.EISCUE); - game.override.enemyAbility(AbilityId.ICE_FACE); - game.override.moveset([MoveId.TACKLE, MoveId.ICE_BEAM, MoveId.TOXIC_THREAD, MoveId.HAIL]); + game.override + .battleStyle("single") + .enemySpecies(SpeciesId.EISCUE) + .enemyAbility(AbilityId.ICE_FACE) + .moveset([MoveId.TACKLE, MoveId.ICE_BEAM, MoveId.TOXIC_THREAD, MoveId.HAIL]); }); it("takes no damage from physical move and transforms to Noice", async () => { @@ -51,8 +52,7 @@ describe("Abilities - Ice Face", () => { }); it("takes no damage from the first hit of multihit physical move and transforms to Noice", async () => { - game.override.moveset([MoveId.SURGING_STRIKES]); - game.override.enemyLevel(1); + game.override.moveset([MoveId.SURGING_STRIKES]).enemyLevel(1); await game.classicMode.startBattle([SpeciesId.HITMONLEE]); game.move.select(MoveId.SURGING_STRIKES); @@ -196,12 +196,13 @@ describe("Abilities - Ice Face", () => { }); it("reverts to Ice Face on arena reset", async () => { - game.override.startingWave(4); - game.override.startingLevel(4); - game.override.enemySpecies(SpeciesId.MAGIKARP); - game.override.starterForms({ - [SpeciesId.EISCUE]: noiceForm, - }); + game.override + .startingWave(4) + .startingLevel(4) + .enemySpecies(SpeciesId.MAGIKARP) + .starterForms({ + [SpeciesId.EISCUE]: noiceForm, + }); await game.classicMode.startBattle([SpeciesId.EISCUE]); diff --git a/test/abilities/illusion.test.ts b/test/abilities/illusion.test.ts index 37e2ca59c6a..1c2809ad813 100644 --- a/test/abilities/illusion.test.ts +++ b/test/abilities/illusion.test.ts @@ -116,26 +116,23 @@ describe("Abilities - Illusion", () => { expect(psychicEffectiveness).above(flameThrowerEffectiveness); }); - it("does not break from indirect damage", async () => { - game.override.enemySpecies(SpeciesId.GIGALITH); - game.override.enemyAbility(AbilityId.SAND_STREAM); - game.override.enemyMoveset(MoveId.WILL_O_WISP); - game.override.moveset([MoveId.FLARE_BLITZ]); + it("should not break from indirect damage from status, weather or recoil", async () => { + game.override.enemySpecies(SpeciesId.GIGALITH).enemyAbility(AbilityId.SAND_STREAM); await game.classicMode.startBattle([SpeciesId.ZOROARK, SpeciesId.AZUMARILL]); - game.move.select(MoveId.FLARE_BLITZ); - - await game.phaseInterceptor.to("TurnEndPhase"); + game.move.use(MoveId.FLARE_BLITZ); + await game.move.forceEnemyMove(MoveId.WILL_O_WISP); + await game.toEndOfTurn(); const zoroark = game.scene.getPlayerPokemon()!; - expect(!!zoroark.summonData.illusion).equals(true); }); it("copies the the name, nickname, gender, shininess, and pokeball from the illusion source", async () => { game.override.enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([SpeciesId.ABRA, SpeciesId.ZOROARK, SpeciesId.AXEW]); + const axew = game.scene.getPlayerParty().at(2)!; axew.shiny = true; axew.nickname = btoa(unescape(encodeURIComponent("axew nickname"))); diff --git a/test/abilities/imposter.test.ts b/test/abilities/imposter.test.ts index e9ae6bd64bb..30491139877 100644 --- a/test/abilities/imposter.test.ts +++ b/test/abilities/imposter.test.ts @@ -162,8 +162,7 @@ describe("Abilities - Imposter", () => { }); it("should stay transformed with the correct form after reload", async () => { - game.override.moveset([MoveId.ABSORB]); - game.override.enemySpecies(SpeciesId.UNOWN); + game.override.moveset([MoveId.ABSORB]).enemySpecies(SpeciesId.UNOWN); await game.classicMode.startBattle([SpeciesId.DITTO]); const enemy = game.scene.getEnemyPokemon()!; diff --git a/test/abilities/intimidate.test.ts b/test/abilities/intimidate.test.ts index e72b9669b6e..cc75b257686 100644 --- a/test/abilities/intimidate.test.ts +++ b/test/abilities/intimidate.test.ts @@ -88,8 +88,7 @@ describe("Abilities - Intimidate", () => { }, 20000); it("should not activate again if there is no switch or new entry", async () => { - game.override.startingWave(2); - game.override.moveset([MoveId.SPLASH]); + game.override.startingWave(2).moveset([MoveId.SPLASH]); await game.classicMode.startBattle([SpeciesId.MIGHTYENA, SpeciesId.POOCHYENA]); const playerPokemon = game.scene.getPlayerPokemon()!; diff --git a/test/abilities/intrepid_sword.test.ts b/test/abilities/intrepid_sword.test.ts index 7cfa9581bb9..3a24f44a78e 100644 --- a/test/abilities/intrepid_sword.test.ts +++ b/test/abilities/intrepid_sword.test.ts @@ -22,10 +22,11 @@ describe("Abilities - Intrepid Sword", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.enemySpecies(SpeciesId.ZACIAN); - game.override.enemyAbility(AbilityId.INTREPID_SWORD); - game.override.ability(AbilityId.INTREPID_SWORD); + game.override + .battleStyle("single") + .enemySpecies(SpeciesId.ZACIAN) + .enemyAbility(AbilityId.INTREPID_SWORD) + .ability(AbilityId.INTREPID_SWORD); }); it("should raise ATK stat stage by 1 on entry", async () => { diff --git a/test/abilities/libero.test.ts b/test/abilities/libero.test.ts index 6cae83219fd..eaa2630e90d 100644 --- a/test/abilities/libero.test.ts +++ b/test/abilities/libero.test.ts @@ -108,8 +108,7 @@ describe("Abilities - Libero", () => { }); test("ability applies correctly even if the type has changed by another ability", async () => { - game.override.moveset([MoveId.TACKLE]); - game.override.passiveAbility(AbilityId.REFRIGERATE); + game.override.moveset([MoveId.TACKLE]).passiveAbility(AbilityId.REFRIGERATE); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); @@ -156,8 +155,7 @@ describe("Abilities - Libero", () => { }); test("ability applies correctly even if the pokemon's move misses", async () => { - game.override.moveset([MoveId.TACKLE]); - game.override.enemyMoveset(MoveId.SPLASH); + game.override.moveset([MoveId.TACKLE]).enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); @@ -188,8 +186,7 @@ describe("Abilities - Libero", () => { }); test("ability applies correctly even if the pokemon's move fails because of type immunity", async () => { - game.override.moveset([MoveId.TACKLE]); - game.override.enemySpecies(SpeciesId.GASTLY); + game.override.moveset([MoveId.TACKLE]).enemySpecies(SpeciesId.GASTLY); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); @@ -262,8 +259,7 @@ describe("Abilities - Libero", () => { }); test("ability applies correctly even if the pokemon's Trick-or-Treat fails", async () => { - game.override.moveset([MoveId.TRICK_OR_TREAT]); - game.override.enemySpecies(SpeciesId.GASTLY); + game.override.moveset([MoveId.TRICK_OR_TREAT]).enemySpecies(SpeciesId.GASTLY); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); diff --git a/test/abilities/magic_bounce.test.ts b/test/abilities/magic_bounce.test.ts index 3c4ff2ad909..fb4f273950a 100644 --- a/test/abilities/magic_bounce.test.ts +++ b/test/abilities/magic_bounce.test.ts @@ -41,18 +41,16 @@ describe("Abilities - Magic Bounce", () => { it("should reflect basic status moves", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(MoveId.GROWL); + game.move.use(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); }); it("should not bounce moves while the target is in the semi-invulnerable state", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.override.moveset([MoveId.GROWL]); - game.override.enemyMoveset([MoveId.FLY]); - game.move.select(MoveId.GROWL); - await game.move.selectEnemyMove(MoveId.FLY); + game.move.use(MoveId.GROWL); + await game.move.forceEnemyMove(MoveId.FLY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); @@ -61,11 +59,10 @@ describe("Abilities - Magic Bounce", () => { it("should individually bounce back multi-target moves", async () => { game.override.battleStyle("double"); - game.override.moveset([MoveId.GROWL, MoveId.SPLASH]); await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]); - game.move.select(MoveId.GROWL, 0); - game.move.select(MoveId.SPLASH, 1); + game.move.use(MoveId.GROWL, 0); + game.move.use(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); const user = game.scene.getPlayerField()[0]; @@ -75,9 +72,8 @@ describe("Abilities - Magic Bounce", () => { it("should still bounce back a move that would otherwise fail", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); game.scene.getEnemyPokemon()?.setStatStage(Stat.ATK, -6); - game.override.moveset([MoveId.GROWL]); - game.move.select(MoveId.GROWL); + game.move.use(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); @@ -107,29 +103,26 @@ describe("Abilities - Magic Bounce", () => { game.override.ability(AbilityId.MOLD_BREAKER); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(MoveId.GROWL); + game.move.use(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-1); }); it("should bounce back a spread status move against both pokemon", async () => { - game.override.battleStyle("double"); - game.override.moveset([MoveId.GROWL, MoveId.SPLASH]); - game.override.enemyMoveset([MoveId.SPLASH]); + game.override.battleStyle("double").enemyMoveset([MoveId.SPLASH]); await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]); - game.move.select(MoveId.GROWL, 0); - game.move.select(MoveId.SPLASH, 1); + game.move.use(MoveId.GROWL, 0); + game.move.use(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerField().every(p => p.getStatStage(Stat.ATK) === -2)).toBeTruthy(); }); it("should only bounce spikes back once in doubles when both targets have magic bounce", async () => { - game.override.battleStyle("double"); + game.override.battleStyle("double").moveset([MoveId.SPIKES]); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.override.moveset([MoveId.SPIKES]); game.move.select(MoveId.SPIKES); await game.phaseInterceptor.to("BerryPhase"); @@ -139,8 +132,7 @@ describe("Abilities - Magic Bounce", () => { }); it("should bounce spikes even when the target is protected", async () => { - game.override.moveset([MoveId.SPIKES]); - game.override.enemyMoveset([MoveId.PROTECT]); + game.override.moveset([MoveId.SPIKES]).enemyMoveset([MoveId.PROTECT]); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); game.move.select(MoveId.SPIKES); @@ -149,8 +141,7 @@ describe("Abilities - Magic Bounce", () => { }); it("should not bounce spikes when the target is in the semi-invulnerable state", async () => { - game.override.moveset([MoveId.SPIKES]); - game.override.enemyMoveset([MoveId.FLY]); + game.override.moveset([MoveId.SPIKES]).enemyMoveset([MoveId.FLY]); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); game.move.select(MoveId.SPIKES); @@ -160,9 +151,8 @@ describe("Abilities - Magic Bounce", () => { }); it("should not bounce back curse", async () => { - game.override.starterSpecies(SpeciesId.GASTLY); - await game.classicMode.startBattle([SpeciesId.GASTLY]); game.override.moveset([MoveId.CURSE]); + await game.classicMode.startBattle([SpeciesId.GASTLY]); game.move.select(MoveId.CURSE); await game.phaseInterceptor.to("BerryPhase"); @@ -171,8 +161,7 @@ describe("Abilities - Magic Bounce", () => { }); it("should not cause encore to be interrupted after bouncing", async () => { - game.override.moveset([MoveId.SPLASH, MoveId.GROWL, MoveId.ENCORE]); - game.override.enemyMoveset([MoveId.TACKLE, MoveId.GROWL]); + game.override.moveset([MoveId.SPLASH, MoveId.GROWL, MoveId.ENCORE]).enemyMoveset([MoveId.TACKLE, MoveId.GROWL]); // game.override.ability(AbilityId.MOLD_BREAKER); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -199,9 +188,10 @@ describe("Abilities - Magic Bounce", () => { // TODO: encore is failing if the last move was virtual. it.todo("should not cause the bounced move to count for encore", async () => { - game.override.moveset([MoveId.SPLASH, MoveId.GROWL, MoveId.ENCORE]); - game.override.enemyMoveset([MoveId.GROWL, MoveId.TACKLE]); - game.override.enemyAbility(AbilityId.MAGIC_BOUNCE); + game.override + .moveset([MoveId.SPLASH, MoveId.GROWL, MoveId.ENCORE]) + .enemyMoveset([MoveId.GROWL, MoveId.TACKLE]) + .enemyAbility(AbilityId.MAGIC_BOUNCE); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -227,9 +217,8 @@ describe("Abilities - Magic Bounce", () => { // TODO: stomping tantrum should consider moves that were bounced. it.todo("should cause stomping tantrum to double in power when the last move was bounced", async () => { - game.override.battleStyle("single"); + game.override.battleStyle("single").moveset([MoveId.STOMPING_TANTRUM, MoveId.CHARM]); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.override.moveset([MoveId.STOMPING_TANTRUM, MoveId.CHARM]); const stomping_tantrum = allMoves[MoveId.STOMPING_TANTRUM]; vi.spyOn(stomping_tantrum, "calculateBattlePower"); @@ -242,36 +231,30 @@ describe("Abilities - Magic Bounce", () => { expect(stomping_tantrum.calculateBattlePower).toHaveReturnedWith(150); }); - // TODO: stomping tantrum should consider moves that were bounced. - it.todo( - "should properly cause the enemy's stomping tantrum to be doubled in power after bouncing and failing", - async () => { - game.override.enemyMoveset([MoveId.STOMPING_TANTRUM, MoveId.SPLASH, MoveId.CHARM]); - await game.classicMode.startBattle([SpeciesId.BULBASAUR]); + // TODO: stomping tantrum should consider moves that were bounced + it.todo("should boost enemy's stomping tantrum after failed bounce", async () => { + game.override.enemyMoveset([MoveId.STOMPING_TANTRUM, MoveId.SPLASH, MoveId.CHARM]); + await game.classicMode.startBattle([SpeciesId.BULBASAUR]); - const stomping_tantrum = allMoves[MoveId.STOMPING_TANTRUM]; - const enemy = game.scene.getEnemyPokemon()!; - vi.spyOn(stomping_tantrum, "calculateBattlePower"); + const stomping_tantrum = allMoves[MoveId.STOMPING_TANTRUM]; + const enemy = game.scene.getEnemyPokemon()!; + vi.spyOn(stomping_tantrum, "calculateBattlePower"); - game.move.select(MoveId.SPORE); - await game.move.selectEnemyMove(MoveId.CHARM); - await game.phaseInterceptor.to("TurnEndPhase"); - expect(enemy.getLastXMoves(1)[0].result).toBe("success"); + // Spore gets reflected back onto us + game.move.select(MoveId.SPORE); + await game.move.selectEnemyMove(MoveId.CHARM); + await game.toNextTurn(); + expect(enemy.getLastXMoves(1)[0].result).toBe("success"); - await game.phaseInterceptor.to("BerryPhase"); - expect(stomping_tantrum.calculateBattlePower).toHaveReturnedWith(75); - - await game.toNextTurn(); - game.move.select(MoveId.GROWL); - await game.phaseInterceptor.to("BerryPhase"); - expect(stomping_tantrum.calculateBattlePower).toHaveReturnedWith(75); - }, - ); + game.move.select(MoveId.SPORE); + await game.move.selectEnemyMove(MoveId.STOMPING_TANTRUM); + await game.toNextTurn(); + expect(stomping_tantrum.calculateBattlePower).toHaveReturnedWith(150); + }); it("should respect immunities when bouncing a move", async () => { vi.spyOn(allMoves[MoveId.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100); - game.override.moveset([MoveId.THUNDER_WAVE, MoveId.GROWL]); - game.override.ability(AbilityId.SOUNDPROOF); + game.override.moveset([MoveId.THUNDER_WAVE, MoveId.GROWL]).ability(AbilityId.SOUNDPROOF); await game.classicMode.startBattle([SpeciesId.PHANPY]); // Turn 1 - thunder wave immunity test @@ -309,8 +292,7 @@ describe("Abilities - Magic Bounce", () => { }); it("should always apply the leftmost available target's magic bounce when bouncing moves like sticky webs in doubles", async () => { - game.override.battleStyle("double"); - game.override.moveset([MoveId.STICKY_WEB, MoveId.SPLASH, MoveId.TRICK_ROOM]); + game.override.battleStyle("double").moveset([MoveId.STICKY_WEB, MoveId.SPLASH, MoveId.TRICK_ROOM]); await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]); const [enemy_1, enemy_2] = game.scene.getEnemyField(); @@ -345,6 +327,7 @@ describe("Abilities - Magic Bounce", () => { it("should not bounce back status moves that hit through semi-invulnerable states", async () => { game.override.moveset([MoveId.TOXIC, MoveId.CHARM]); await game.classicMode.startBattle([SpeciesId.BULBASAUR]); + game.move.select(MoveId.TOXIC); await game.move.selectEnemyMove(MoveId.FLY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); diff --git a/test/abilities/magic_guard.test.ts b/test/abilities/magic_guard.test.ts index 40bb3203673..4274e692a2e 100644 --- a/test/abilities/magic_guard.test.ts +++ b/test/abilities/magic_guard.test.ts @@ -30,16 +30,16 @@ describe("Abilities - Magic Guard", () => { beforeEach(() => { game = new GameManager(phaserGame); - /** Player Pokemon overrides */ - game.override.ability(AbilityId.MAGIC_GUARD); - game.override.moveset([MoveId.SPLASH]); - game.override.startingLevel(100); - - /** Enemy Pokemon overrides */ - game.override.enemySpecies(SpeciesId.SNORLAX); - game.override.enemyAbility(AbilityId.INSOMNIA); - game.override.enemyMoveset(MoveId.SPLASH); - game.override.enemyLevel(100); + game.override + /** Player Pokemon overrides */ + .ability(AbilityId.MAGIC_GUARD) + .moveset([MoveId.SPLASH]) + .startingLevel(100) + /** Enemy Pokemon overrides */ + .enemySpecies(SpeciesId.SNORLAX) + .enemyAbility(AbilityId.INSOMNIA) + .enemyMoveset(MoveId.SPLASH) + .enemyLevel(100); }); //Bulbapedia Reference: https://bulbapedia.bulbagarden.net/wiki/Magic_Guard_(Ability) @@ -89,8 +89,9 @@ describe("Abilities - Magic Guard", () => { }); it("ability effect should not persist when the ability is replaced", async () => { - game.override.enemyMoveset([MoveId.WORRY_SEED, MoveId.WORRY_SEED, MoveId.WORRY_SEED, MoveId.WORRY_SEED]); - game.override.statusEffect(StatusEffect.POISON); + game.override + .enemyMoveset([MoveId.WORRY_SEED, MoveId.WORRY_SEED, MoveId.WORRY_SEED, MoveId.WORRY_SEED]) + .statusEffect(StatusEffect.POISON); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); @@ -108,8 +109,7 @@ describe("Abilities - Magic Guard", () => { }); it("Magic Guard prevents damage caused by burn but other non-damaging effects are still applied", async () => { - game.override.enemyStatusEffect(StatusEffect.BURN); - game.override.enemyAbility(AbilityId.MAGIC_GUARD); + game.override.enemyStatusEffect(StatusEffect.BURN).enemyAbility(AbilityId.MAGIC_GUARD); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); @@ -130,8 +130,7 @@ describe("Abilities - Magic Guard", () => { }); it("Magic Guard prevents damage caused by toxic but other non-damaging effects are still applied", async () => { - game.override.enemyStatusEffect(StatusEffect.TOXIC); - game.override.enemyAbility(AbilityId.MAGIC_GUARD); + game.override.enemyStatusEffect(StatusEffect.TOXIC).enemyAbility(AbilityId.MAGIC_GUARD); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); @@ -208,8 +207,7 @@ describe("Abilities - Magic Guard", () => { it("Magic Guard prevents against damage from volatile status effects", async () => { await game.classicMode.startBattle([SpeciesId.DUSKULL]); - game.override.moveset([MoveId.CURSE]); - game.override.enemyAbility(AbilityId.MAGIC_GUARD); + game.override.moveset([MoveId.CURSE]).enemyAbility(AbilityId.MAGIC_GUARD); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -331,8 +329,9 @@ describe("Abilities - Magic Guard", () => { //Tests the ability Bad Dreams game.override.statusEffect(StatusEffect.SLEEP); //enemy pokemon is given Spore just in case player pokemon somehow awakens during test - game.override.enemyMoveset([MoveId.SPORE, MoveId.SPORE, MoveId.SPORE, MoveId.SPORE]); - game.override.enemyAbility(AbilityId.BAD_DREAMS); + game.override + .enemyMoveset([MoveId.SPORE, MoveId.SPORE, MoveId.SPORE, MoveId.SPORE]) + .enemyAbility(AbilityId.BAD_DREAMS); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); @@ -353,8 +352,7 @@ describe("Abilities - Magic Guard", () => { it("Magic Guard prevents damage from abilities with PostFaintContactDamageAbAttr", async () => { //Tests the abilities Innards Out/Aftermath - game.override.moveset([MoveId.TACKLE]); - game.override.enemyAbility(AbilityId.AFTERMATH); + game.override.moveset([MoveId.TACKLE]).enemyAbility(AbilityId.AFTERMATH); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); @@ -377,8 +375,7 @@ describe("Abilities - Magic Guard", () => { it("Magic Guard prevents damage from abilities with PostDefendContactDamageAbAttr", async () => { //Tests the abilities Iron Barbs/Rough Skin - game.override.moveset([MoveId.TACKLE]); - game.override.enemyAbility(AbilityId.IRON_BARBS); + game.override.moveset([MoveId.TACKLE]).enemyAbility(AbilityId.IRON_BARBS); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); @@ -400,8 +397,7 @@ describe("Abilities - Magic Guard", () => { it("Magic Guard prevents damage from abilities with ReverseDrainAbAttr", async () => { //Tests the ability Liquid Ooze - game.override.moveset([MoveId.ABSORB]); - game.override.enemyAbility(AbilityId.LIQUID_OOZE); + game.override.moveset([MoveId.ABSORB]).enemyAbility(AbilityId.LIQUID_OOZE); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); @@ -422,9 +418,7 @@ describe("Abilities - Magic Guard", () => { }); it("Magic Guard prevents HP loss from abilities with PostWeatherLapseDamageAbAttr", async () => { - //Tests the abilities Solar Power/Dry Skin - game.override.passiveAbility(AbilityId.SOLAR_POWER); - game.override.weather(WeatherType.SUNNY); + game.override.passiveAbility(AbilityId.SOLAR_POWER).weather(WeatherType.SUNNY); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; diff --git a/test/abilities/mirror_armor.test.ts b/test/abilities/mirror_armor.test.ts index 540a3b5d426..71b072c7d06 100644 --- a/test/abilities/mirror_armor.test.ts +++ b/test/abilities/mirror_armor.test.ts @@ -37,8 +37,7 @@ describe("Ability - Mirror Armor", () => { }); it("Player side + single battle Intimidate - opponent loses stats", async () => { - game.override.ability(AbilityId.MIRROR_ARMOR); - game.override.enemyAbility(AbilityId.INTIMIDATE); + game.override.ability(AbilityId.MIRROR_ARMOR).enemyAbility(AbilityId.INTIMIDATE); await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -54,8 +53,7 @@ describe("Ability - Mirror Armor", () => { }); it("Enemy side + single battle Intimidate - player loses stats", async () => { - game.override.enemyAbility(AbilityId.MIRROR_ARMOR); - game.override.ability(AbilityId.INTIMIDATE); + game.override.enemyAbility(AbilityId.MIRROR_ARMOR).ability(AbilityId.INTIMIDATE); await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -71,9 +69,7 @@ describe("Ability - Mirror Armor", () => { }); it("Player side + double battle Intimidate - opponents each lose -2 atk", async () => { - game.override.battleStyle("double"); - game.override.ability(AbilityId.MIRROR_ARMOR); - game.override.enemyAbility(AbilityId.INTIMIDATE); + game.override.battleStyle("double").ability(AbilityId.MIRROR_ARMOR).enemyAbility(AbilityId.INTIMIDATE); await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER]); const [enemy1, enemy2] = game.scene.getEnemyField(); @@ -93,9 +89,7 @@ describe("Ability - Mirror Armor", () => { }); it("Enemy side + double battle Intimidate - players each lose -2 atk", async () => { - game.override.battleStyle("double"); - game.override.enemyAbility(AbilityId.MIRROR_ARMOR); - game.override.ability(AbilityId.INTIMIDATE); + game.override.battleStyle("double").enemyAbility(AbilityId.MIRROR_ARMOR).ability(AbilityId.INTIMIDATE); await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER]); const [enemy1, enemy2] = game.scene.getEnemyField(); @@ -115,8 +109,7 @@ describe("Ability - Mirror Armor", () => { }); it("Player side + single battle Intimidate + Tickle - opponent loses stats", async () => { - game.override.ability(AbilityId.MIRROR_ARMOR); - game.override.enemyAbility(AbilityId.INTIMIDATE); + game.override.ability(AbilityId.MIRROR_ARMOR).enemyAbility(AbilityId.INTIMIDATE); await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -134,9 +127,7 @@ describe("Ability - Mirror Armor", () => { }); it("Player side + double battle Intimidate + Tickle - opponents each lose -3 atk, -1 def", async () => { - game.override.battleStyle("double"); - game.override.ability(AbilityId.MIRROR_ARMOR); - game.override.enemyAbility(AbilityId.INTIMIDATE); + game.override.battleStyle("double").ability(AbilityId.MIRROR_ARMOR).enemyAbility(AbilityId.INTIMIDATE); await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER]); const [enemy1, enemy2] = game.scene.getEnemyField(); @@ -159,8 +150,7 @@ describe("Ability - Mirror Armor", () => { }); it("Enemy side + single battle Intimidate + Tickle - player loses stats", async () => { - game.override.enemyAbility(AbilityId.MIRROR_ARMOR); - game.override.ability(AbilityId.INTIMIDATE); + game.override.enemyAbility(AbilityId.MIRROR_ARMOR).ability(AbilityId.INTIMIDATE); await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -178,8 +168,7 @@ describe("Ability - Mirror Armor", () => { }); it("Player side + single battle Intimidate + oppoenent has white smoke - no one loses stats", async () => { - game.override.enemyAbility(AbilityId.WHITE_SMOKE); - game.override.ability(AbilityId.MIRROR_ARMOR); + game.override.enemyAbility(AbilityId.WHITE_SMOKE).ability(AbilityId.MIRROR_ARMOR); await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -197,8 +186,7 @@ describe("Ability - Mirror Armor", () => { }); it("Enemy side + single battle Intimidate + player has white smoke - no one loses stats", async () => { - game.override.ability(AbilityId.WHITE_SMOKE); - game.override.enemyAbility(AbilityId.MIRROR_ARMOR); + game.override.ability(AbilityId.WHITE_SMOKE).enemyAbility(AbilityId.MIRROR_ARMOR); await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -252,9 +240,7 @@ describe("Ability - Mirror Armor", () => { }); it("Both sides have mirror armor - does not loop, player loses attack", async () => { - game.override.enemyAbility(AbilityId.MIRROR_ARMOR); - game.override.ability(AbilityId.MIRROR_ARMOR); - game.override.ability(AbilityId.INTIMIDATE); + game.override.enemyAbility(AbilityId.MIRROR_ARMOR).ability(AbilityId.MIRROR_ARMOR).ability(AbilityId.INTIMIDATE); await game.classicMode.startBattle([SpeciesId.BULBASAUR]); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -288,8 +274,7 @@ describe("Ability - Mirror Armor", () => { }); it("Double battle + sticky web applied player side - player switches out and enemy 1 should lose -1 speed", async () => { - game.override.battleStyle("double"); - game.override.ability(AbilityId.MIRROR_ARMOR); + game.override.battleStyle("double").ability(AbilityId.MIRROR_ARMOR); await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER, SpeciesId.SQUIRTLE]); const [enemy1, enemy2] = game.scene.getEnemyField(); diff --git a/test/abilities/moxie.test.ts b/test/abilities/moxie.test.ts index 8b658f60bf6..7631a0dfd2d 100644 --- a/test/abilities/moxie.test.ts +++ b/test/abilities/moxie.test.ts @@ -27,13 +27,14 @@ describe("Abilities - Moxie", () => { beforeEach(() => { game = new GameManager(phaserGame); const moveToUse = MoveId.AERIAL_ACE; - game.override.battleStyle("single"); - game.override.enemySpecies(SpeciesId.RATTATA); - game.override.enemyAbility(AbilityId.MOXIE); - game.override.ability(AbilityId.MOXIE); - game.override.startingLevel(2000); - game.override.moveset([moveToUse]); - game.override.enemyMoveset(MoveId.SPLASH); + game.override + .battleStyle("single") + .enemySpecies(SpeciesId.RATTATA) + .enemyAbility(AbilityId.MOXIE) + .ability(AbilityId.MOXIE) + .startingLevel(2000) + .moveset([moveToUse]) + .enemyMoveset(MoveId.SPLASH); }); it("should raise ATK stat stage by 1 when winning a battle", async () => { diff --git a/test/abilities/normalize.test.ts b/test/abilities/normalize.test.ts index 821ce9589a1..2e000e76a27 100644 --- a/test/abilities/normalize.test.ts +++ b/test/abilities/normalize.test.ts @@ -45,8 +45,9 @@ describe("Abilities - Normalize", () => { }); it("should not apply the old type boost item after changing a move's type", async () => { - game.override.startingHeldItems([{ name: "ATTACK_TYPE_BOOSTER", count: 1, type: PokemonType.GRASS }]); - game.override.moveset([MoveId.LEAFAGE]); + game.override + .startingHeldItems([{ name: "ATTACK_TYPE_BOOSTER", count: 1, type: PokemonType.GRASS }]) + .moveset([MoveId.LEAFAGE]); const powerSpy = vi.spyOn(allMoves[MoveId.LEAFAGE], "calculateBattlePower"); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); @@ -58,8 +59,9 @@ describe("Abilities - Normalize", () => { }); it("should apply silk scarf's power boost after changing a move's type", async () => { - game.override.startingHeldItems([{ name: "ATTACK_TYPE_BOOSTER", count: 1, type: PokemonType.NORMAL }]); - game.override.moveset([MoveId.LEAFAGE]); + game.override + .startingHeldItems([{ name: "ATTACK_TYPE_BOOSTER", count: 1, type: PokemonType.NORMAL }]) + .moveset([MoveId.LEAFAGE]); const powerSpy = vi.spyOn(allMoves[MoveId.LEAFAGE], "calculateBattlePower"); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); diff --git a/test/abilities/parental_bond.test.ts b/test/abilities/parental_bond.test.ts index 73efd0f57e2..f9bd703d751 100644 --- a/test/abilities/parental_bond.test.ts +++ b/test/abilities/parental_bond.test.ts @@ -26,14 +26,15 @@ describe("Abilities - Parental Bond", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.disableCrits(); - game.override.ability(AbilityId.PARENTAL_BOND); - game.override.enemySpecies(SpeciesId.SNORLAX); - game.override.enemyAbility(AbilityId.FUR_COAT); - game.override.enemyMoveset(MoveId.SPLASH); - game.override.startingLevel(100); - game.override.enemyLevel(100); + game.override + .battleStyle("single") + .disableCrits() + .ability(AbilityId.PARENTAL_BOND) + .enemySpecies(SpeciesId.SNORLAX) + .enemyAbility(AbilityId.FUR_COAT) + .enemyMoveset(MoveId.SPLASH) + .startingLevel(100) + .enemyLevel(100); }); it("should add second strike to attack move", async () => { @@ -61,8 +62,7 @@ describe("Abilities - Parental Bond", () => { }); it("should apply secondary effects to both strikes", async () => { - game.override.moveset([MoveId.POWER_UP_PUNCH]); - game.override.enemySpecies(SpeciesId.AMOONGUSS); + game.override.moveset([MoveId.POWER_UP_PUNCH]).enemySpecies(SpeciesId.AMOONGUSS); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); @@ -148,8 +148,7 @@ describe("Abilities - Parental Bond", () => { }); it("should not apply multiplier to counter moves", async () => { - game.override.moveset([MoveId.COUNTER]); - game.override.enemyMoveset([MoveId.TACKLE]); + game.override.moveset([MoveId.COUNTER]).enemyMoveset([MoveId.TACKLE]); await game.classicMode.startBattle([SpeciesId.SHUCKLE]); @@ -167,9 +166,7 @@ describe("Abilities - Parental Bond", () => { }); it("should not apply to multi-target moves", async () => { - game.override.battleStyle("double"); - game.override.moveset([MoveId.EARTHQUAKE]); - game.override.passiveAbility(AbilityId.LEVITATE); + game.override.battleStyle("double").moveset([MoveId.EARTHQUAKE]).passiveAbility(AbilityId.LEVITATE); await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS]); @@ -237,8 +234,7 @@ describe("Abilities - Parental Bond", () => { }); it("Moves boosted by this ability and Multi-Lens should strike 3 times", async () => { - game.override.moveset([MoveId.TACKLE]); - game.override.startingHeldItems([{ name: "MULTI_LENS", count: 1 }]); + game.override.moveset([MoveId.TACKLE]).startingHeldItems([{ name: "MULTI_LENS", count: 1 }]); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); @@ -252,8 +248,7 @@ describe("Abilities - Parental Bond", () => { }); it("Seismic Toss boosted by this ability and Multi-Lens should strike 3 times", async () => { - game.override.moveset([MoveId.SEISMIC_TOSS]); - game.override.startingHeldItems([{ name: "MULTI_LENS", count: 1 }]); + game.override.moveset([MoveId.SEISMIC_TOSS]).startingHeldItems([{ name: "MULTI_LENS", count: 1 }]); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); @@ -378,8 +373,7 @@ describe("Abilities - Parental Bond", () => { }); it("should not cause user to hit into King's Shield more than once", async () => { - game.override.moveset([MoveId.TACKLE]); - game.override.enemyMoveset([MoveId.KINGS_SHIELD]); + game.override.moveset([MoveId.TACKLE]).enemyMoveset([MoveId.KINGS_SHIELD]); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); @@ -393,8 +387,7 @@ describe("Abilities - Parental Bond", () => { }); it("should not cause user to hit into Storm Drain more than once", async () => { - game.override.moveset([MoveId.WATER_GUN]); - game.override.enemyAbility(AbilityId.STORM_DRAIN); + game.override.moveset([MoveId.WATER_GUN]).enemyAbility(AbilityId.STORM_DRAIN); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); diff --git a/test/abilities/perish_body.test.ts b/test/abilities/perish_body.test.ts index 9668bf349a8..5b98aab5f6c 100644 --- a/test/abilities/perish_body.test.ts +++ b/test/abilities/perish_body.test.ts @@ -21,19 +21,18 @@ describe("Abilities - Perish Song", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.disableCrits(); - - game.override.enemySpecies(SpeciesId.MAGIKARP); - game.override.enemyAbility(AbilityId.BALL_FETCH); - - game.override.starterSpecies(SpeciesId.CURSOLA); - game.override.ability(AbilityId.PERISH_BODY); - game.override.moveset([MoveId.SPLASH]); + game.override + .battleStyle("single") + .disableCrits() + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .starterSpecies(SpeciesId.CURSOLA) + .ability(AbilityId.PERISH_BODY) + .moveset([MoveId.SPLASH]) + .enemyMoveset([MoveId.AQUA_JET]); }); it("should trigger when hit with damaging move", async () => { - game.override.enemyMoveset([MoveId.AQUA_JET]); await game.classicMode.startBattle(); const cursola = game.scene.getPlayerPokemon(); const magikarp = game.scene.getEnemyPokemon(); @@ -46,7 +45,7 @@ describe("Abilities - Perish Song", () => { }); it("should trigger even when fainting", async () => { - game.override.enemyMoveset([MoveId.AQUA_JET]).enemyLevel(100).startingLevel(1); + game.override.enemyLevel(100).startingLevel(1); await game.classicMode.startBattle([SpeciesId.CURSOLA, SpeciesId.FEEBAS]); const magikarp = game.scene.getEnemyPokemon(); @@ -87,9 +86,10 @@ describe("Abilities - Perish Song", () => { }); it("should activate if cursola already has perish song, but not reset its counter", async () => { - game.override.enemyMoveset([MoveId.PERISH_SONG, MoveId.AQUA_JET, MoveId.SPLASH]); - game.override.moveset([MoveId.WHIRLWIND, MoveId.SPLASH]); - game.override.startingWave(5); + game.override + .enemyMoveset([MoveId.PERISH_SONG, MoveId.AQUA_JET, MoveId.SPLASH]) + .moveset([MoveId.WHIRLWIND, MoveId.SPLASH]) + .startingWave(5); await game.classicMode.startBattle([SpeciesId.CURSOLA]); const cursola = game.scene.getPlayerPokemon(); diff --git a/test/abilities/power_construct.test.ts b/test/abilities/power_construct.test.ts index f8e3de802e6..2ea14597ef9 100644 --- a/test/abilities/power_construct.test.ts +++ b/test/abilities/power_construct.test.ts @@ -35,8 +35,7 @@ describe("Abilities - POWER CONSTRUCT", () => { test("check if fainted 50% Power Construct Pokemon switches to base form on arena reset", async () => { const baseForm = 2, completeForm = 4; - game.override.startingWave(4); - game.override.starterForms({ + game.override.startingWave(4).starterForms({ [SpeciesId.ZYGARDE]: completeForm, }); @@ -62,8 +61,7 @@ describe("Abilities - POWER CONSTRUCT", () => { test("check if fainted 10% Power Construct Pokemon switches to base form on arena reset", async () => { const baseForm = 3, completeForm = 5; - game.override.startingWave(4); - game.override.starterForms({ + game.override.startingWave(4).starterForms({ [SpeciesId.ZYGARDE]: completeForm, }); diff --git a/test/abilities/power_spot.test.ts b/test/abilities/power_spot.test.ts index 5e6cbce7742..11f75588386 100644 --- a/test/abilities/power_spot.test.ts +++ b/test/abilities/power_spot.test.ts @@ -26,11 +26,12 @@ describe("Abilities - Power Spot", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("double"); - game.override.moveset([MoveId.TACKLE, MoveId.BREAKING_SWIPE, MoveId.SPLASH, MoveId.DAZZLING_GLEAM]); - game.override.enemyMoveset(MoveId.SPLASH); - game.override.enemySpecies(SpeciesId.SHUCKLE); - game.override.enemyAbility(AbilityId.BALL_FETCH); + game.override + .battleStyle("double") + .moveset([MoveId.TACKLE, MoveId.BREAKING_SWIPE, MoveId.SPLASH, MoveId.DAZZLING_GLEAM]) + .enemyMoveset(MoveId.SPLASH) + .enemySpecies(SpeciesId.SHUCKLE) + .enemyAbility(AbilityId.BALL_FETCH); }); it("raises the power of allies' special moves by 30%", async () => { diff --git a/test/abilities/protean.test.ts b/test/abilities/protean.test.ts index a0b04fa0be5..09c9addbc35 100644 --- a/test/abilities/protean.test.ts +++ b/test/abilities/protean.test.ts @@ -108,8 +108,7 @@ describe("Abilities - Protean", () => { }); test("ability applies correctly even if the type has changed by another ability", async () => { - game.override.moveset([MoveId.TACKLE]); - game.override.passiveAbility(AbilityId.REFRIGERATE); + game.override.moveset([MoveId.TACKLE]).passiveAbility(AbilityId.REFRIGERATE); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); @@ -156,8 +155,7 @@ describe("Abilities - Protean", () => { }); test("ability applies correctly even if the pokemon's move misses", async () => { - game.override.moveset([MoveId.TACKLE]); - game.override.enemyMoveset(MoveId.SPLASH); + game.override.moveset([MoveId.TACKLE]).enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); @@ -188,8 +186,7 @@ describe("Abilities - Protean", () => { }); test("ability applies correctly even if the pokemon's move fails because of type immunity", async () => { - game.override.moveset([MoveId.TACKLE]); - game.override.enemySpecies(SpeciesId.GASTLY); + game.override.moveset([MoveId.TACKLE]).enemySpecies(SpeciesId.GASTLY); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); @@ -262,8 +259,7 @@ describe("Abilities - Protean", () => { }); test("ability applies correctly even if the pokemon's Trick-or-Treat fails", async () => { - game.override.moveset([MoveId.TRICK_OR_TREAT]); - game.override.enemySpecies(SpeciesId.GASTLY); + game.override.moveset([MoveId.TRICK_OR_TREAT]).enemySpecies(SpeciesId.GASTLY); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); diff --git a/test/abilities/quick_draw.test.ts b/test/abilities/quick_draw.test.ts index 5e5e57fb056..02c2ff86a56 100644 --- a/test/abilities/quick_draw.test.ts +++ b/test/abilities/quick_draw.test.ts @@ -23,16 +23,15 @@ describe("Abilities - Quick Draw", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - - game.override.starterSpecies(SpeciesId.MAGIKARP); - game.override.ability(AbilityId.QUICK_DRAW); - game.override.moveset([MoveId.TACKLE, MoveId.TAIL_WHIP]); - - game.override.enemyLevel(100); - game.override.enemySpecies(SpeciesId.MAGIKARP); - game.override.enemyAbility(AbilityId.BALL_FETCH); - game.override.enemyMoveset([MoveId.TACKLE]); + game.override + .battleStyle("single") + .starterSpecies(SpeciesId.MAGIKARP) + .ability(AbilityId.QUICK_DRAW) + .moveset([MoveId.TACKLE, MoveId.TAIL_WHIP]) + .enemyLevel(100) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset([MoveId.TACKLE]); vi.spyOn( allAbilities[AbilityId.QUICK_DRAW].getAttrs("BypassSpeedChanceAbAttr")[0], diff --git a/test/abilities/sand_spit.test.ts b/test/abilities/sand_spit.test.ts index 96e6380ae88..9be23e7f7c2 100644 --- a/test/abilities/sand_spit.test.ts +++ b/test/abilities/sand_spit.test.ts @@ -22,15 +22,14 @@ describe("Abilities - Sand Spit", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.disableCrits(); - - game.override.enemySpecies(SpeciesId.MAGIKARP); - game.override.enemyAbility(AbilityId.BALL_FETCH); - - game.override.starterSpecies(SpeciesId.SILICOBRA); - game.override.ability(AbilityId.SAND_SPIT); - game.override.moveset([MoveId.SPLASH, MoveId.COIL]); + game.override + .battleStyle("single") + .disableCrits() + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .starterSpecies(SpeciesId.SILICOBRA) + .ability(AbilityId.SAND_SPIT) + .moveset([MoveId.SPLASH, MoveId.COIL]); }); it("should trigger when hit with damaging move", async () => { diff --git a/test/abilities/schooling.test.ts b/test/abilities/schooling.test.ts index 728e9bb7024..646beafb80f 100644 --- a/test/abilities/schooling.test.ts +++ b/test/abilities/schooling.test.ts @@ -31,8 +31,7 @@ describe("Abilities - SCHOOLING", () => { test("check if fainted pokemon switches to base form on arena reset", async () => { const soloForm = 0, schoolForm = 1; - game.override.startingWave(4); - game.override.starterForms({ + game.override.startingWave(4).starterForms({ [SpeciesId.WISHIWASHI]: schoolForm, }); diff --git a/test/abilities/screen_cleaner.test.ts b/test/abilities/screen_cleaner.test.ts index 619cc08bccf..e896d2e51f9 100644 --- a/test/abilities/screen_cleaner.test.ts +++ b/test/abilities/screen_cleaner.test.ts @@ -24,9 +24,7 @@ describe("Abilities - Screen Cleaner", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.ability(AbilityId.SCREEN_CLEANER); - game.override.enemySpecies(SpeciesId.SHUCKLE); + game.override.battleStyle("single").ability(AbilityId.SCREEN_CLEANER).enemySpecies(SpeciesId.SHUCKLE); }); it("removes Aurora Veil", async () => { diff --git a/test/abilities/seed_sower.test.ts b/test/abilities/seed_sower.test.ts index 761342bfb27..4b649275d83 100644 --- a/test/abilities/seed_sower.test.ts +++ b/test/abilities/seed_sower.test.ts @@ -22,15 +22,14 @@ describe("Abilities - Seed Sower", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.disableCrits(); - - game.override.enemySpecies(SpeciesId.MAGIKARP); - game.override.enemyAbility(AbilityId.BALL_FETCH); - - game.override.starterSpecies(SpeciesId.ARBOLIVA); - game.override.ability(AbilityId.SEED_SOWER); - game.override.moveset([MoveId.SPLASH]); + game.override + .battleStyle("single") + .disableCrits() + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .starterSpecies(SpeciesId.ARBOLIVA) + .ability(AbilityId.SEED_SOWER) + .moveset([MoveId.SPLASH]); }); it("should trigger when hit with damaging move", async () => { diff --git a/test/abilities/shield_dust.test.ts b/test/abilities/shield_dust.test.ts index db1266d3088..6bb63fd16a5 100644 --- a/test/abilities/shield_dust.test.ts +++ b/test/abilities/shield_dust.test.ts @@ -26,12 +26,13 @@ describe("Abilities - Shield Dust", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.enemySpecies(SpeciesId.ONIX); - game.override.enemyAbility(AbilityId.SHIELD_DUST); - game.override.startingLevel(100); - game.override.moveset(MoveId.AIR_SLASH); - game.override.enemyMoveset(MoveId.TACKLE); + game.override + .battleStyle("single") + .enemySpecies(SpeciesId.ONIX) + .enemyAbility(AbilityId.SHIELD_DUST) + .startingLevel(100) + .moveset(MoveId.AIR_SLASH) + .enemyMoveset(MoveId.TACKLE); }); it("Shield Dust", async () => { diff --git a/test/abilities/shields_down.test.ts b/test/abilities/shields_down.test.ts index 0a7270dff31..7b4803915f1 100644 --- a/test/abilities/shields_down.test.ts +++ b/test/abilities/shields_down.test.ts @@ -26,17 +26,17 @@ describe("Abilities - SHIELDS DOWN", () => { beforeEach(() => { game = new GameManager(phaserGame); const moveToUse = MoveId.SPLASH; - game.override.battleStyle("single"); - game.override.ability(AbilityId.SHIELDS_DOWN); - game.override.moveset([moveToUse]); - game.override.enemyMoveset([MoveId.TACKLE]); + game.override + .battleStyle("single") + .ability(AbilityId.SHIELDS_DOWN) + .moveset([moveToUse]) + .enemyMoveset([MoveId.TACKLE]); }); test("check if fainted pokemon switched to base form on arena reset", async () => { const meteorForm = 0, coreForm = 7; - game.override.startingWave(4); - game.override.starterForms({ + game.override.startingWave(4).starterForms({ [SpeciesId.MINIOR]: coreForm, }); @@ -70,8 +70,7 @@ describe("Abilities - SHIELDS DOWN", () => { }); test("should still ignore non-volatile status moves used by a pokemon with mold breaker", async () => { - game.override.enemyAbility(AbilityId.MOLD_BREAKER); - game.override.enemyMoveset([MoveId.SPORE]); + game.override.enemyAbility(AbilityId.MOLD_BREAKER).enemyMoveset([MoveId.SPORE]); await game.classicMode.startBattle([SpeciesId.MINIOR]); @@ -94,8 +93,7 @@ describe("Abilities - SHIELDS DOWN", () => { }); test("should ignore status moves even through mold breaker", async () => { - game.override.enemyMoveset([MoveId.SPORE]); - game.override.enemyAbility(AbilityId.MOLD_BREAKER); + game.override.enemyMoveset([MoveId.SPORE]).enemyAbility(AbilityId.MOLD_BREAKER); await game.classicMode.startBattle([SpeciesId.MINIOR]); @@ -108,8 +106,9 @@ describe("Abilities - SHIELDS DOWN", () => { // toxic spikes currently does not poison flying types when gravity is in effect test.todo("should become poisoned by toxic spikes when grounded", async () => { - game.override.enemyMoveset([MoveId.GRAVITY, MoveId.TOXIC_SPIKES, MoveId.SPLASH]); - game.override.moveset([MoveId.GRAVITY, MoveId.SPLASH]); + game.override + .enemyMoveset([MoveId.GRAVITY, MoveId.TOXIC_SPIKES, MoveId.SPLASH]) + .moveset([MoveId.GRAVITY, MoveId.SPLASH]); await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MINIOR]); @@ -155,9 +154,7 @@ describe("Abilities - SHIELDS DOWN", () => { // the `NoTransformAbilityAbAttr` attribute is not checked anywhere, so this test cannot pass. test.todo("ditto should not be immune to status after transforming", async () => { - game.override.enemySpecies(SpeciesId.DITTO); - game.override.enemyAbility(AbilityId.IMPOSTER); - game.override.moveset([MoveId.SPLASH, MoveId.SPORE]); + game.override.enemySpecies(SpeciesId.DITTO).enemyAbility(AbilityId.IMPOSTER).moveset([MoveId.SPLASH, MoveId.SPORE]); await game.classicMode.startBattle([SpeciesId.MINIOR]); @@ -169,11 +166,12 @@ describe("Abilities - SHIELDS DOWN", () => { }); test("should not prevent minior from receiving the fainted status effect in trainer battles", async () => { - game.override.enemyMoveset([MoveId.TACKLE]); - game.override.moveset([MoveId.THUNDERBOLT]); - game.override.startingLevel(100); - game.override.startingWave(5); - game.override.enemySpecies(SpeciesId.MINIOR); + game.override + .enemyMoveset([MoveId.TACKLE]) + .moveset([MoveId.THUNDERBOLT]) + .startingLevel(100) + .startingWave(5) + .enemySpecies(SpeciesId.MINIOR); await game.classicMode.startBattle([SpeciesId.REGIELEKI]); const minior = game.scene.getEnemyPokemon()!; diff --git a/test/abilities/steely_spirit.test.ts b/test/abilities/steely_spirit.test.ts index 481e037fb4b..7a2bd98b6b1 100644 --- a/test/abilities/steely_spirit.test.ts +++ b/test/abilities/steely_spirit.test.ts @@ -28,11 +28,12 @@ describe("Abilities - Steely Spirit", () => { beforeEach(() => { ironHeadPower = allMoves[moveToCheck].power; game = new GameManager(phaserGame); - game.override.battleStyle("double"); - game.override.enemySpecies(SpeciesId.SHUCKLE); - game.override.enemyAbility(AbilityId.BALL_FETCH); - game.override.moveset([MoveId.IRON_HEAD, MoveId.SPLASH]); - game.override.enemyMoveset(MoveId.SPLASH); + game.override + .battleStyle("double") + .enemySpecies(SpeciesId.SHUCKLE) + .enemyAbility(AbilityId.BALL_FETCH) + .moveset([MoveId.IRON_HEAD, MoveId.SPLASH]) + .enemyMoveset(MoveId.SPLASH); vi.spyOn(allMoves[moveToCheck], "calculateBattlePower"); }); diff --git a/test/abilities/sturdy.test.ts b/test/abilities/sturdy.test.ts index a50e2075fea..e7b2c05040d 100644 --- a/test/abilities/sturdy.test.ts +++ b/test/abilities/sturdy.test.ts @@ -24,15 +24,14 @@ describe("Abilities - Sturdy", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - - game.override.starterSpecies(SpeciesId.LUCARIO); - game.override.startingLevel(100); - game.override.moveset([MoveId.CLOSE_COMBAT, MoveId.FISSURE]); - - game.override.enemySpecies(SpeciesId.ARON); - game.override.enemyLevel(5); - game.override.enemyAbility(AbilityId.STURDY); + game.override + .battleStyle("single") + .starterSpecies(SpeciesId.LUCARIO) + .startingLevel(100) + .moveset([MoveId.CLOSE_COMBAT, MoveId.FISSURE]) + .enemySpecies(SpeciesId.ARON) + .enemyLevel(5) + .enemyAbility(AbilityId.STURDY); }); test("Sturdy activates when user is at full HP", async () => { diff --git a/test/abilities/sweet_veil.test.ts b/test/abilities/sweet_veil.test.ts index 8a31e676ec5..ed9cb20afcc 100644 --- a/test/abilities/sweet_veil.test.ts +++ b/test/abilities/sweet_veil.test.ts @@ -69,10 +69,7 @@ describe("Abilities - Sweet Veil", () => { }); it("prevents the user and its allies already drowsy due to Yawn from falling asleep.", async () => { - game.override.enemySpecies(SpeciesId.PIKACHU); - game.override.enemyLevel(5); - game.override.startingLevel(5); - game.override.enemyMoveset(MoveId.SPLASH); + game.override.enemySpecies(SpeciesId.PIKACHU).enemyLevel(5).startingLevel(5).enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([SpeciesId.SHUCKLE, SpeciesId.SHUCKLE, SpeciesId.SWIRLIX]); diff --git a/test/abilities/unseen_fist.test.ts b/test/abilities/unseen_fist.test.ts index 56408c6cbc3..26de77d4643 100644 --- a/test/abilities/unseen_fist.test.ts +++ b/test/abilities/unseen_fist.test.ts @@ -51,8 +51,7 @@ describe("Abilities - Unseen Fist", () => { await testUnseenFistHitResult(game, MoveId.BULLDOZE, MoveId.WIDE_GUARD, false)); it("should cause a contact move to ignore Protect, but not Substitute", async () => { - game.override.enemyLevel(1); - game.override.moveset([MoveId.TACKLE]); + game.override.enemyLevel(1).moveset([MoveId.TACKLE]); await game.classicMode.startBattle(); diff --git a/test/abilities/volt_absorb.test.ts b/test/abilities/volt_absorb.test.ts index 34dbbbd4783..707a889f951 100644 --- a/test/abilities/volt_absorb.test.ts +++ b/test/abilities/volt_absorb.test.ts @@ -3,11 +3,11 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; import { MoveId } from "#enums/move-id"; -import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import { BattlerIndex } from "#enums/battler-index"; +import { SpeciesId } from "#enums/species-id"; // See also: TypeImmunityAbAttr describe("Abilities - Volt Absorb", () => { @@ -26,19 +26,19 @@ describe("Abilities - Volt Absorb", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.disableCrits(); + game.override.battleStyle("single").disableCrits(); }); it("does not activate when CHARGE is used", async () => { const moveToUse = MoveId.CHARGE; const ability = AbilityId.VOLT_ABSORB; - game.override.moveset([moveToUse]); - game.override.ability(ability); - game.override.enemyMoveset([MoveId.SPLASH, MoveId.NONE, MoveId.NONE, MoveId.NONE]); - game.override.enemySpecies(SpeciesId.DUSKULL); - game.override.enemyAbility(AbilityId.BALL_FETCH); + game.override + .moveset([moveToUse]) + .ability(ability) + .enemyMoveset([MoveId.SPLASH]) + .enemySpecies(SpeciesId.DUSKULL) + .enemyAbility(AbilityId.BALL_FETCH); await game.classicMode.startBattle(); @@ -54,10 +54,11 @@ describe("Abilities - Volt Absorb", () => { }); it("should activate regardless of accuracy checks", async () => { - game.override.moveset(MoveId.THUNDERBOLT); - game.override.enemyMoveset(MoveId.SPLASH); - game.override.enemySpecies(SpeciesId.MAGIKARP); - game.override.enemyAbility(AbilityId.VOLT_ABSORB); + game.override + .moveset(MoveId.THUNDERBOLT) + .enemyMoveset(MoveId.SPLASH) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.VOLT_ABSORB); await game.classicMode.startBattle(); @@ -74,10 +75,11 @@ describe("Abilities - Volt Absorb", () => { }); it("regardless of accuracy should not trigger on pokemon in semi invulnerable state", async () => { - game.override.moveset(MoveId.THUNDERBOLT); - game.override.enemyMoveset(MoveId.DIVE); - game.override.enemySpecies(SpeciesId.MAGIKARP); - game.override.enemyAbility(AbilityId.VOLT_ABSORB); + game.override + .moveset(MoveId.THUNDERBOLT) + .enemyMoveset(MoveId.DIVE) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.VOLT_ABSORB); await game.classicMode.startBattle(); diff --git a/test/abilities/wind_power.test.ts b/test/abilities/wind_power.test.ts index a7b4d525a56..8e657997008 100644 --- a/test/abilities/wind_power.test.ts +++ b/test/abilities/wind_power.test.ts @@ -23,14 +23,15 @@ describe("Abilities - Wind Power", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.enemySpecies(SpeciesId.SHIFTRY); - game.override.enemyAbility(AbilityId.WIND_POWER); - game.override.moveset([MoveId.TAILWIND, MoveId.SPLASH, MoveId.PETAL_BLIZZARD, MoveId.SANDSTORM]); - game.override.enemyMoveset(MoveId.SPLASH); + game.override + .battleStyle("single") + .enemySpecies(SpeciesId.SHIFTRY) + .enemyAbility(AbilityId.WIND_POWER) + .moveset([MoveId.TAILWIND, MoveId.SPLASH, MoveId.PETAL_BLIZZARD, MoveId.SANDSTORM]) + .enemyMoveset(MoveId.SPLASH); }); - it("it becomes charged when hit by wind moves", async () => { + it("becomes charged when hit by wind moves", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const shiftry = game.scene.getEnemyPokemon()!; @@ -42,9 +43,8 @@ describe("Abilities - Wind Power", () => { expect(shiftry.getTag(BattlerTagType.CHARGED)).toBeDefined(); }); - it("it becomes charged when Tailwind takes effect on its side", async () => { - game.override.ability(AbilityId.WIND_POWER); - game.override.enemySpecies(SpeciesId.MAGIKARP); + it("becomes charged when Tailwind takes effect on its side", async () => { + game.override.ability(AbilityId.WIND_POWER).enemySpecies(SpeciesId.MAGIKARP); await game.classicMode.startBattle([SpeciesId.SHIFTRY]); const shiftry = game.scene.getPlayerPokemon()!; @@ -58,8 +58,7 @@ describe("Abilities - Wind Power", () => { }); it("does not become charged when Tailwind takes effect on opposing side", async () => { - game.override.enemySpecies(SpeciesId.MAGIKARP); - game.override.ability(AbilityId.WIND_POWER); + game.override.enemySpecies(SpeciesId.MAGIKARP).ability(AbilityId.WIND_POWER); await game.classicMode.startBattle([SpeciesId.SHIFTRY]); const magikarp = game.scene.getEnemyPokemon()!; diff --git a/test/abilities/wonder_skin.test.ts b/test/abilities/wonder_skin.test.ts index 933d3653580..886882ab6fd 100644 --- a/test/abilities/wonder_skin.test.ts +++ b/test/abilities/wonder_skin.test.ts @@ -23,12 +23,13 @@ describe("Abilities - Wonder Skin", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.moveset([MoveId.TACKLE, MoveId.CHARM]); - game.override.ability(AbilityId.BALL_FETCH); - game.override.enemySpecies(SpeciesId.SHUCKLE); - game.override.enemyAbility(AbilityId.WONDER_SKIN); - game.override.enemyMoveset(MoveId.SPLASH); + game.override + .battleStyle("single") + .moveset([MoveId.TACKLE, MoveId.CHARM]) + .ability(AbilityId.BALL_FETCH) + .enemySpecies(SpeciesId.SHUCKLE) + .enemyAbility(AbilityId.WONDER_SKIN) + .enemyMoveset(MoveId.SPLASH); }); it("lowers accuracy of status moves to 50%", async () => { diff --git a/test/abilities/zen_mode.test.ts b/test/abilities/zen_mode.test.ts index 163df7b1853..70d2f564218 100644 --- a/test/abilities/zen_mode.test.ts +++ b/test/abilities/zen_mode.test.ts @@ -85,8 +85,7 @@ describe("Abilities - ZEN MODE", () => { }); it("should switch to base form on arena reset", async () => { - game.override.startingWave(4); - game.override.starterForms({ + game.override.startingWave(4).starterForms({ [SpeciesId.DARMANITAN]: zenForm, }); diff --git a/test/abilities/zero_to_hero.test.ts b/test/abilities/zero_to_hero.test.ts index 90e10c89ca1..7d0128a4dbc 100644 --- a/test/abilities/zero_to_hero.test.ts +++ b/test/abilities/zero_to_hero.test.ts @@ -34,8 +34,7 @@ describe("Abilities - ZERO TO HERO", () => { }); it("should swap to base form on arena reset", async () => { - game.override.startingWave(4); - game.override.starterForms({ + game.override.startingWave(4).starterForms({ [SpeciesId.PALAFIN]: heroForm, }); diff --git a/test/achievements/achievement.test.ts b/test/achievements/achievement.test.ts index 0b49c4d23ab..5a74c77fe6a 100644 --- a/test/achievements/achievement.test.ts +++ b/test/achievements/achievement.test.ts @@ -130,12 +130,6 @@ describe("RibbonAchv", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.moveset([]); - game.override.startingLevel(0); - game.override.starterSpecies(0); - game.override.enemyMoveset([]); - game.override.enemySpecies(0); - game.override.startingWave(0); scene = game.scene; }); diff --git a/test/arena/weather_fog.test.ts b/test/arena/weather_fog.test.ts index 24c07d26cba..e6984e13bd0 100644 --- a/test/arena/weather_fog.test.ts +++ b/test/arena/weather_fog.test.ts @@ -24,12 +24,14 @@ describe("Weather - Fog", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.weather(WeatherType.FOG).battleStyle("single"); - game.override.moveset([MoveId.TACKLE]); - game.override.ability(AbilityId.BALL_FETCH); - game.override.enemyAbility(AbilityId.BALL_FETCH); - game.override.enemySpecies(SpeciesId.MAGIKARP); - game.override.enemyMoveset([MoveId.SPLASH]); + game.override + .weather(WeatherType.FOG) + .battleStyle("single") + .moveset([MoveId.TACKLE]) + .ability(AbilityId.BALL_FETCH) + .enemyAbility(AbilityId.BALL_FETCH) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyMoveset([MoveId.SPLASH]); }); it("move accuracy is multiplied by 90%", async () => { diff --git a/test/arena/weather_strong_winds.test.ts b/test/arena/weather_strong_winds.test.ts index 8b3c2562e6f..d0d256816eb 100644 --- a/test/arena/weather_strong_winds.test.ts +++ b/test/arena/weather_strong_winds.test.ts @@ -24,11 +24,12 @@ describe("Weather - Strong Winds", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.startingLevel(10); - game.override.enemySpecies(SpeciesId.TAILLOW); - game.override.enemyAbility(AbilityId.DELTA_STREAM); - game.override.moveset([MoveId.THUNDERBOLT, MoveId.ICE_BEAM, MoveId.ROCK_SLIDE]); + game.override + .battleStyle("single") + .startingLevel(10) + .enemySpecies(SpeciesId.TAILLOW) + .enemyAbility(AbilityId.DELTA_STREAM) + .moveset([MoveId.THUNDERBOLT, MoveId.ICE_BEAM, MoveId.ROCK_SLIDE]); }); it("electric type move is not very effective on Rayquaza", async () => { diff --git a/test/battle/battle-order.test.ts b/test/battle/battle-order.test.ts index c12760a7f30..c969e1767a3 100644 --- a/test/battle/battle-order.test.ts +++ b/test/battle/battle-order.test.ts @@ -24,11 +24,12 @@ describe("Battle order", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.enemySpecies(SpeciesId.MEWTWO); - game.override.enemyAbility(AbilityId.INSOMNIA); - game.override.ability(AbilityId.INSOMNIA); - game.override.moveset([MoveId.TACKLE]); + game.override + .battleStyle("single") + .enemySpecies(SpeciesId.MEWTWO) + .enemyAbility(AbilityId.INSOMNIA) + .ability(AbilityId.INSOMNIA) + .moveset([MoveId.TACKLE]); }); it("opponent faster than player 50 vs 150", async () => { diff --git a/test/battle/battle.test.ts b/test/battle/battle.test.ts index 3eab06e2f48..60e09607ffe 100644 --- a/test/battle/battle.test.ts +++ b/test/battle/battle.test.ts @@ -10,13 +10,11 @@ import { EnemyCommandPhase } from "#app/phases/enemy-command-phase"; import { LoginPhase } from "#app/phases/login-phase"; import { NextEncounterPhase } from "#app/phases/next-encounter-phase"; import { SelectGenderPhase } from "#app/phases/select-gender-phase"; -import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import { SelectStarterPhase } from "#app/phases/select-starter-phase"; import { SummonPhase } from "#app/phases/summon-phase"; import { SwitchPhase } from "#app/phases/switch-phase"; import { TitlePhase } from "#app/phases/title-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; -import { VictoryPhase } from "#app/phases/victory-phase"; import GameManager from "#test/testUtils/gameManager"; import { generateStarter } from "#test/testUtils/gameManagerUtils"; import { UiMode } from "#enums/ui-mode"; @@ -92,28 +90,22 @@ describe("Test Battle Phase", () => { }, 20000); it("do attack wave 3 - single battle - regular - OHKO", async () => { - game.override.starterSpecies(SpeciesId.MEWTWO); - game.override.enemySpecies(SpeciesId.RATTATA); - game.override.startingLevel(2000); - game.override.startingWave(3).battleStyle("single"); - game.override.moveset([MoveId.TACKLE]); - game.override.enemyAbility(AbilityId.HYDRATION); - game.override.enemyMoveset([MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE]); - await game.classicMode.startBattle(); - game.move.select(MoveId.TACKLE); - await game.phaseInterceptor.runFrom(EnemyCommandPhase).to(SelectModifierPhase, false); + game.override.enemySpecies(SpeciesId.RATTATA).startingLevel(2000).battleStyle("single"); + await game.classicMode.startBattle([SpeciesId.MEWTWO]); + game.move.use(MoveId.TACKLE); + await game.phaseInterceptor.to("SelectModifierPhase"); }, 20000); it("do attack wave 3 - single battle - regular - NO OHKO with opponent using non damage attack", async () => { - game.override.starterSpecies(SpeciesId.MEWTWO); - game.override.enemySpecies(SpeciesId.RATTATA); - game.override.startingLevel(5); - game.override.startingWave(3); - game.override.moveset([MoveId.TACKLE]); - game.override.enemyAbility(AbilityId.HYDRATION); - game.override.enemyMoveset([MoveId.TAIL_WHIP, MoveId.TAIL_WHIP, MoveId.TAIL_WHIP, MoveId.TAIL_WHIP]); - game.override.battleStyle("single"); - await game.classicMode.startBattle(); + game.override + .enemySpecies(SpeciesId.RATTATA) + .startingLevel(5) + .startingWave(3) + .moveset([MoveId.TACKLE]) + .enemyAbility(AbilityId.HYDRATION) + .enemyMoveset([MoveId.TAIL_WHIP, MoveId.TAIL_WHIP, MoveId.TAIL_WHIP, MoveId.TAIL_WHIP]) + .battleStyle("single"); + await game.classicMode.startBattle([SpeciesId.MEWTWO]); game.move.select(MoveId.TACKLE); await game.phaseInterceptor.runFrom(EnemyCommandPhase).to(TurnInitPhase, false); }, 20000); @@ -247,36 +239,37 @@ describe("Test Battle Phase", () => { it("kill opponent pokemon", async () => { const moveToUse = MoveId.SPLASH; - game.override.battleStyle("single"); - game.override.starterSpecies(SpeciesId.MEWTWO); - game.override.enemySpecies(SpeciesId.RATTATA); - game.override.enemyAbility(AbilityId.HYDRATION); - game.override.ability(AbilityId.ZEN_MODE); - game.override.startingLevel(2000); - game.override.startingWave(3); - game.override.moveset([moveToUse]); - game.override.enemyMoveset([MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE]); + game.override + .battleStyle("single") + .starterSpecies(SpeciesId.MEWTWO) + .enemySpecies(SpeciesId.RATTATA) + .enemyAbility(AbilityId.HYDRATION) + .ability(AbilityId.ZEN_MODE) + .startingLevel(2000) + .startingWave(3) + .moveset([moveToUse]) + .enemyMoveset([MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE]); await game.classicMode.startBattle([SpeciesId.DARMANITAN, SpeciesId.CHARIZARD]); game.move.select(moveToUse); await game.phaseInterceptor.to(DamageAnimPhase, false); await game.killPokemon(game.scene.currentBattle.enemyParty[0]); expect(game.scene.currentBattle.enemyParty[0].isFainted()).toBe(true); - await game.phaseInterceptor.to(VictoryPhase, false); - }, 200000); + await game.phaseInterceptor.to("VictoryPhase"); + }); it("to next turn", async () => { const moveToUse = MoveId.SPLASH; - game.override.battleStyle("single"); - game.override.starterSpecies(SpeciesId.MEWTWO); - game.override.enemySpecies(SpeciesId.RATTATA); - game.override.enemyAbility(AbilityId.HYDRATION); - game.override.ability(AbilityId.ZEN_MODE); - game.override.startingLevel(2000); - game.override.startingWave(3); - game.override.moveset([moveToUse]); - game.override.enemyMoveset([MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE]); - await game.classicMode.startBattle(); + game.override + .battleStyle("single") + .enemySpecies(SpeciesId.RATTATA) + .enemyAbility(AbilityId.HYDRATION) + .ability(AbilityId.ZEN_MODE) + .startingLevel(2000) + .startingWave(3) + .moveset([moveToUse]) + .enemyMoveset([MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE]); + await game.classicMode.startBattle([SpeciesId.MEWTWO]); const turn = game.scene.currentBattle.turn; game.move.select(moveToUse); await game.toNextTurn(); @@ -294,8 +287,8 @@ describe("Test Battle Phase", () => { .startingLevel(2000) .startingWave(3) .startingBiome(BiomeId.LAKE) - .moveset([moveToUse]); - game.override.enemyMoveset([MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE]); + .moveset([moveToUse]) + .enemyMoveset([MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE]); await game.classicMode.startBattle(); const waveIndex = game.scene.currentBattle.waveIndex; game.move.select(moveToUse); diff --git a/test/escape-calculations.test.ts b/test/escape-calculations.test.ts index ca51f40a509..8a81bf2c6b8 100644 --- a/test/escape-calculations.test.ts +++ b/test/escape-calculations.test.ts @@ -262,8 +262,7 @@ describe("Escape chance calculations", () => { }, 20000); it("double boss opponent", async () => { - game.override.battleStyle("double"); - game.override.startingWave(10); + game.override.battleStyle("double").startingWave(10); await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.ABOMASNOW]); const playerPokemon = game.scene.getPlayerField(); diff --git a/test/evolution.test.ts b/test/evolution.test.ts index b2e7a9243d0..c4bcca785c1 100644 --- a/test/evolution.test.ts +++ b/test/evolution.test.ts @@ -28,12 +28,11 @@ describe("Evolution", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - - game.override.enemySpecies(SpeciesId.MAGIKARP); - game.override.enemyAbility(AbilityId.BALL_FETCH); - - game.override.startingLevel(60); + game.override + .battleStyle("single") + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .startingLevel(60); }); it("should keep hidden ability after evolving", async () => { diff --git a/test/field/pokemon.test.ts b/test/field/pokemon.test.ts index 74ad973b51d..774d46b18fe 100644 --- a/test/field/pokemon.test.ts +++ b/test/field/pokemon.test.ts @@ -88,9 +88,7 @@ describe("Spec - Pokemon", () => { let scene: BattleScene; beforeEach(async () => { - game.override.enemySpecies(SpeciesId.ZUBAT); - game.override.starterSpecies(SpeciesId.ABRA); - game.override.enableStarterFusion(); + game.override.enemySpecies(SpeciesId.ZUBAT).starterSpecies(SpeciesId.ABRA).enableStarterFusion(); scene = game.scene; }); @@ -146,8 +144,7 @@ describe("Spec - Pokemon", () => { }); it("Fusing mons with one and two types", async () => { - game.override.starterSpecies(SpeciesId.CHARMANDER); - game.override.starterFusionSpecies(SpeciesId.HOUNDOUR); + game.override.starterSpecies(SpeciesId.CHARMANDER).starterFusionSpecies(SpeciesId.HOUNDOUR); await game.classicMode.startBattle(); const pokemon = scene.getPlayerParty()[0]; @@ -157,8 +154,7 @@ describe("Spec - Pokemon", () => { }); it("Fusing mons with two and one types", async () => { - game.override.starterSpecies(SpeciesId.NUMEL); - game.override.starterFusionSpecies(SpeciesId.CHARMANDER); + game.override.starterSpecies(SpeciesId.NUMEL).starterFusionSpecies(SpeciesId.CHARMANDER); await game.classicMode.startBattle(); const pokemon = scene.getPlayerParty()[0]; @@ -168,8 +164,7 @@ describe("Spec - Pokemon", () => { }); it("Fusing two mons with two types", async () => { - game.override.starterSpecies(SpeciesId.NATU); - game.override.starterFusionSpecies(SpeciesId.HOUNDOUR); + game.override.starterSpecies(SpeciesId.NATU).starterFusionSpecies(SpeciesId.HOUNDOUR); await game.classicMode.startBattle(); const pokemon = scene.getPlayerParty()[0]; diff --git a/test/items/exp_booster.test.ts b/test/items/exp_booster.test.ts index f5273a78a55..96a8571785e 100644 --- a/test/items/exp_booster.test.ts +++ b/test/items/exp_booster.test.ts @@ -22,9 +22,7 @@ describe("EXP Modifier Items", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.enemyAbility(AbilityId.BALL_FETCH); - game.override.ability(AbilityId.BALL_FETCH); - game.override.battleStyle("single"); + game.override.enemyAbility(AbilityId.BALL_FETCH).ability(AbilityId.BALL_FETCH).battleStyle("single"); }); it("EXP booster items stack multiplicatively", async () => { diff --git a/test/moves/baneful_bunker.test.ts b/test/moves/baneful_bunker.test.ts index eddfa87ead4..c9cc2025a58 100644 --- a/test/moves/baneful_bunker.test.ts +++ b/test/moves/baneful_bunker.test.ts @@ -24,16 +24,14 @@ describe("Moves - Baneful Bunker", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - - game.override.moveset(MoveId.SLASH); - - game.override.enemySpecies(SpeciesId.SNORLAX); - game.override.enemyAbility(AbilityId.INSOMNIA); - game.override.enemyMoveset(MoveId.BANEFUL_BUNKER); - - game.override.startingLevel(100); - game.override.enemyLevel(100); + game.override + .battleStyle("single") + .moveset(MoveId.SLASH) + .enemySpecies(SpeciesId.SNORLAX) + .enemyAbility(AbilityId.INSOMNIA) + .enemyMoveset(MoveId.BANEFUL_BUNKER) + .startingLevel(100) + .enemyLevel(100); }); test("should protect the user and poison attackers that make contact", async () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); diff --git a/test/moves/baton_pass.test.ts b/test/moves/baton_pass.test.ts index f6256e95ce8..42e46352a11 100644 --- a/test/moves/baton_pass.test.ts +++ b/test/moves/baton_pass.test.ts @@ -59,28 +59,23 @@ describe("Moves - Baton Pass", () => { it("passes stat stage buffs when AI uses it", async () => { // arrange - game.override.startingWave(5).enemyMoveset(new Array(4).fill([MoveId.NASTY_PLOT])); + game.override.startingWave(5).enemyMoveset([MoveId.NASTY_PLOT, MoveId.BATON_PASS]); await game.classicMode.startBattle([SpeciesId.RAICHU, SpeciesId.SHUCKLE]); // round 1 - ai buffs game.move.select(MoveId.SPLASH); + await game.move.forceEnemyMove(MoveId.NASTY_PLOT); await game.toNextTurn(); // round 2 - baton pass - game.scene.getEnemyPokemon()!.hp = 100; - game.override.enemyMoveset([MoveId.BATON_PASS]); - // Force moveset to update mid-battle - // TODO: replace with enemy ai control function when it's added - game.scene.getEnemyParty()[0].getMoveset(); game.move.select(MoveId.SPLASH); + await game.move.forceEnemyMove(MoveId.BATON_PASS); await game.phaseInterceptor.to("PostSummonPhase", false); - // assert // check buffs are still there - expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.SPATK)).toEqual(2); + expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.SPATK)).toEqual(2); // confirm that a switch actually happened. can't use species because I // can't find a way to override trainer parties with more than 1 pokemon species - expect(game.scene.getEnemyPokemon()!.hp).not.toEqual(100); expect(game.phaseInterceptor.log.slice(-4)).toEqual([ "MoveEffectPhase", "SwitchSummonPhase", diff --git a/test/moves/beak_blast.test.ts b/test/moves/beak_blast.test.ts index ad2959e5101..2cb9f9bdd6f 100644 --- a/test/moves/beak_blast.test.ts +++ b/test/moves/beak_blast.test.ts @@ -129,8 +129,7 @@ describe("Moves - Beak Blast", () => { }); it("should not burn a long reach enemy that hits the user with a contact move", async () => { - game.override.enemyAbility(AbilityId.LONG_REACH); - game.override.enemyMoveset([MoveId.FALSE_SWIPE]).enemyLevel(100); + game.override.enemyAbility(AbilityId.LONG_REACH).enemyMoveset([MoveId.FALSE_SWIPE]).enemyLevel(100); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); game.move.select(MoveId.BEAK_BLAST); await game.phaseInterceptor.to("BerryPhase", false); diff --git a/test/moves/beat_up.test.ts b/test/moves/beat_up.test.ts index 184204a91aa..7c4686ab4fa 100644 --- a/test/moves/beat_up.test.ts +++ b/test/moves/beat_up.test.ts @@ -23,15 +23,14 @@ describe("Moves - Beat Up", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - - game.override.enemySpecies(SpeciesId.SNORLAX); - game.override.enemyLevel(100); - game.override.enemyMoveset([MoveId.SPLASH]); - game.override.enemyAbility(AbilityId.INSOMNIA); - - game.override.startingLevel(100); - game.override.moveset([MoveId.BEAT_UP]); + game.override + .battleStyle("single") + .enemySpecies(SpeciesId.SNORLAX) + .enemyLevel(100) + .enemyMoveset([MoveId.SPLASH]) + .enemyAbility(AbilityId.INSOMNIA) + .startingLevel(100) + .moveset([MoveId.BEAT_UP]); }); it("should hit once for each healthy player Pokemon", async () => { diff --git a/test/moves/ceaseless_edge.test.ts b/test/moves/ceaseless_edge.test.ts index fcaddfb0d76..1dec98fe3a8 100644 --- a/test/moves/ceaseless_edge.test.ts +++ b/test/moves/ceaseless_edge.test.ts @@ -27,14 +27,15 @@ describe("Moves - Ceaseless Edge", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.enemySpecies(SpeciesId.RATTATA); - game.override.enemyAbility(AbilityId.RUN_AWAY); - game.override.enemyPassiveAbility(AbilityId.RUN_AWAY); - game.override.startingLevel(100); - game.override.enemyLevel(100); - game.override.moveset([MoveId.CEASELESS_EDGE, MoveId.SPLASH, MoveId.ROAR]); - game.override.enemyMoveset(MoveId.SPLASH); + game.override + .battleStyle("single") + .enemySpecies(SpeciesId.RATTATA) + .enemyAbility(AbilityId.RUN_AWAY) + .enemyPassiveAbility(AbilityId.RUN_AWAY) + .startingLevel(100) + .enemyLevel(100) + .moveset([MoveId.CEASELESS_EDGE, MoveId.SPLASH, MoveId.ROAR]) + .enemyMoveset(MoveId.SPLASH); vi.spyOn(allMoves[MoveId.CEASELESS_EDGE], "accuracy", "get").mockReturnValue(100); }); @@ -82,8 +83,7 @@ describe("Moves - Ceaseless Edge", () => { }); test("trainer - move should hit twice, apply two layers of spikes, force switch opponent - opponent takes damage", async () => { - game.override.startingHeldItems([{ name: "MULTI_LENS" }]); - game.override.startingWave(25); + game.override.startingHeldItems([{ name: "MULTI_LENS" }]).startingWave(25); await game.classicMode.startBattle([SpeciesId.ILLUMISE]); diff --git a/test/moves/clangorous_soul.test.ts b/test/moves/clangorous_soul.test.ts index 6f4c18852b0..f08503acdc6 100644 --- a/test/moves/clangorous_soul.test.ts +++ b/test/moves/clangorous_soul.test.ts @@ -27,12 +27,13 @@ describe("Moves - Clangorous Soul", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.starterSpecies(SpeciesId.MAGIKARP); - game.override.enemySpecies(SpeciesId.SNORLAX); - game.override.startingLevel(100); - game.override.enemyLevel(100); - game.override.moveset([MoveId.CLANGOROUS_SOUL]); - game.override.enemyMoveset(MoveId.SPLASH); + game.override + .starterSpecies(SpeciesId.MAGIKARP) + .enemySpecies(SpeciesId.SNORLAX) + .startingLevel(100) + .enemyLevel(100) + .moveset([MoveId.CLANGOROUS_SOUL]) + .enemyMoveset(MoveId.SPLASH); }); //Bulbapedia Reference: https://bulbapedia.bulbagarden.net/wiki/Clangorous_Soul_(move) diff --git a/test/moves/crafty_shield.test.ts b/test/moves/crafty_shield.test.ts index 01ab0416e5a..12a607a2a1b 100644 --- a/test/moves/crafty_shield.test.ts +++ b/test/moves/crafty_shield.test.ts @@ -26,16 +26,14 @@ describe("Moves - Crafty Shield", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("double"); - - game.override.moveset([MoveId.CRAFTY_SHIELD, MoveId.SPLASH, MoveId.SWORDS_DANCE]); - - game.override.enemySpecies(SpeciesId.SNORLAX); - game.override.enemyMoveset([MoveId.GROWL]); - game.override.enemyAbility(AbilityId.INSOMNIA); - - game.override.startingLevel(100); - game.override.enemyLevel(100); + game.override + .battleStyle("double") + .moveset([MoveId.CRAFTY_SHIELD, MoveId.SPLASH, MoveId.SWORDS_DANCE]) + .enemySpecies(SpeciesId.SNORLAX) + .enemyMoveset([MoveId.GROWL]) + .enemyAbility(AbilityId.INSOMNIA) + .startingLevel(100) + .enemyLevel(100); }); test("should protect the user and allies from status moves", async () => { @@ -73,8 +71,7 @@ describe("Moves - Crafty Shield", () => { }); test("should protect the user and allies from moves that ignore other protection", async () => { - game.override.enemySpecies(SpeciesId.DUSCLOPS); - game.override.enemyMoveset([MoveId.CURSE]); + game.override.enemySpecies(SpeciesId.DUSCLOPS).enemyMoveset([MoveId.CURSE]); await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); diff --git a/test/moves/dragon_rage.test.ts b/test/moves/dragon_rage.test.ts index c2a0a1bc979..f0be6748c7f 100644 --- a/test/moves/dragon_rage.test.ts +++ b/test/moves/dragon_rage.test.ts @@ -1,6 +1,5 @@ import { Stat } from "#enums/stat"; import { PokemonType } from "#enums/pokemon-type"; -import { SpeciesId } from "#enums/species-id"; import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { AbilityId } from "#enums/ability-id"; @@ -9,6 +8,7 @@ import { MoveId } from "#enums/move-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { SpeciesId } from "#enums/species-id"; describe("Moves - Dragon Rage", () => { let phaserGame: Phaser.Game; @@ -31,19 +31,18 @@ describe("Moves - Dragon Rage", () => { beforeEach(async () => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - - game.override.starterSpecies(SpeciesId.SNORLAX); - game.override.moveset([MoveId.DRAGON_RAGE]); - game.override.ability(AbilityId.BALL_FETCH); - game.override.passiveAbility(AbilityId.BALL_FETCH); - game.override.startingLevel(100); - - game.override.enemySpecies(SpeciesId.SNORLAX); - game.override.enemyMoveset(MoveId.SPLASH); - game.override.enemyAbility(AbilityId.BALL_FETCH); - game.override.enemyPassiveAbility(AbilityId.BALL_FETCH); - game.override.enemyLevel(100); + game.override + .battleStyle("single") + .starterSpecies(SpeciesId.SNORLAX) + .moveset([MoveId.DRAGON_RAGE]) + .ability(AbilityId.BALL_FETCH) + .passiveAbility(AbilityId.BALL_FETCH) + .startingLevel(100) + .enemySpecies(SpeciesId.SNORLAX) + .enemyMoveset(MoveId.SPLASH) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyPassiveAbility(AbilityId.BALL_FETCH) + .enemyLevel(100); await game.classicMode.startBattle(); @@ -101,8 +100,7 @@ describe("Moves - Dragon Rage", () => { }); it("ignores damage modification from abilities, for example ICE_SCALES", async () => { - game.override.disableCrits(); - game.override.enemyAbility(AbilityId.ICE_SCALES); + game.override.disableCrits().enemyAbility(AbilityId.ICE_SCALES); game.move.select(MoveId.DRAGON_RAGE); await game.phaseInterceptor.to(TurnEndPhase); diff --git a/test/moves/dynamax_cannon.test.ts b/test/moves/dynamax_cannon.test.ts index 2cdba48c0ea..c0b6d9e0b40 100644 --- a/test/moves/dynamax_cannon.test.ts +++ b/test/moves/dynamax_cannon.test.ts @@ -38,15 +38,7 @@ describe("Moves - Dynamax Cannon", () => { .enemySpecies(SpeciesId.MAGIKARP) .enemyMoveset(MoveId.SPLASH); - // Note that, for Waves 1-10, the level cap is 10 - game.override.startingWave(1); - game.override.battleStyle("single"); - game.override.disableCrits(); - - game.override.enemySpecies(SpeciesId.MAGIKARP); - game.override.enemyMoveset([MoveId.SPLASH, MoveId.SPLASH, MoveId.SPLASH, MoveId.SPLASH]); - - vi.spyOn(dynamaxCannon, "calculateBattlePower"); + vi.spyOn(allMoves[MoveId.DYNAMAX_CANNON], "calculateBattlePower"); }); it("should return 100 power against an enemy below level cap", async () => { diff --git a/test/moves/fillet_away.test.ts b/test/moves/fillet_away.test.ts index a24b5c4ae04..1e00f2ee02d 100644 --- a/test/moves/fillet_away.test.ts +++ b/test/moves/fillet_away.test.ts @@ -28,12 +28,13 @@ describe("Moves - FILLET AWAY", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.starterSpecies(SpeciesId.MAGIKARP); - game.override.enemySpecies(SpeciesId.SNORLAX); - game.override.startingLevel(100); - game.override.enemyLevel(100); - game.override.moveset([MoveId.FILLET_AWAY]); - game.override.enemyMoveset(MoveId.SPLASH); + game.override + .starterSpecies(SpeciesId.MAGIKARP) + .enemySpecies(SpeciesId.SNORLAX) + .startingLevel(100) + .enemyLevel(100) + .moveset([MoveId.FILLET_AWAY]) + .enemyMoveset(MoveId.SPLASH); }); //Bulbapedia Reference: https://bulbapedia.bulbagarden.net/wiki/fillet_away_(move) diff --git a/test/moves/fissure.test.ts b/test/moves/fissure.test.ts index 53327b505c4..231eab427e1 100644 --- a/test/moves/fissure.test.ts +++ b/test/moves/fissure.test.ts @@ -1,5 +1,4 @@ import { Stat } from "#enums/stat"; -import { SpeciesId } from "#enums/species-id"; import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; @@ -8,6 +7,7 @@ import { MoveId } from "#enums/move-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { SpeciesId } from "#enums/species-id"; describe("Moves - Fissure", () => { let phaserGame: Phaser.Game; @@ -28,18 +28,17 @@ describe("Moves - Fissure", () => { beforeEach(async () => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.disableCrits(); - - game.override.starterSpecies(SpeciesId.SNORLAX); - game.override.moveset([MoveId.FISSURE]); - game.override.passiveAbility(AbilityId.BALL_FETCH); - game.override.startingLevel(100); - - game.override.enemySpecies(SpeciesId.SNORLAX); - game.override.enemyMoveset(MoveId.SPLASH); - game.override.enemyPassiveAbility(AbilityId.BALL_FETCH); - game.override.enemyLevel(100); + game.override + .battleStyle("single") + .disableCrits() + .starterSpecies(SpeciesId.SNORLAX) + .moveset([MoveId.FISSURE]) + .passiveAbility(AbilityId.BALL_FETCH) + .startingLevel(100) + .enemySpecies(SpeciesId.SNORLAX) + .enemyMoveset(MoveId.SPLASH) + .enemyPassiveAbility(AbilityId.BALL_FETCH) + .enemyLevel(100); await game.classicMode.startBattle(); @@ -48,8 +47,7 @@ describe("Moves - Fissure", () => { }); it("ignores damage modification from abilities, for example FUR_COAT", async () => { - game.override.ability(AbilityId.NO_GUARD); - game.override.enemyAbility(AbilityId.FUR_COAT); + game.override.ability(AbilityId.NO_GUARD).enemyAbility(AbilityId.FUR_COAT); game.move.select(MoveId.FISSURE); await game.phaseInterceptor.to(DamageAnimPhase, true); diff --git a/test/moves/flame_burst.test.ts b/test/moves/flame_burst.test.ts index 1d61daaacb5..e994dc3e568 100644 --- a/test/moves/flame_burst.test.ts +++ b/test/moves/flame_burst.test.ts @@ -35,14 +35,15 @@ describe("Moves - Flame Burst", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("double"); - game.override.moveset([MoveId.FLAME_BURST, MoveId.SPLASH]); - game.override.disableCrits(); - game.override.ability(AbilityId.UNNERVE); - game.override.startingWave(4); - game.override.enemySpecies(SpeciesId.SHUCKLE); - game.override.enemyAbility(AbilityId.BALL_FETCH); - game.override.enemyMoveset([MoveId.SPLASH]); + game.override + .battleStyle("double") + .moveset([MoveId.FLAME_BURST, MoveId.SPLASH]) + .disableCrits() + .ability(AbilityId.UNNERVE) + .startingWave(4) + .enemySpecies(SpeciesId.SHUCKLE) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset([MoveId.SPLASH]); }); it("inflicts damage to the target's ally equal to 1/16 of its max HP", async () => { diff --git a/test/moves/flower_shield.test.ts b/test/moves/flower_shield.test.ts index 3561d396ef9..c3c5e5cf870 100644 --- a/test/moves/flower_shield.test.ts +++ b/test/moves/flower_shield.test.ts @@ -26,11 +26,12 @@ describe("Moves - Flower Shield", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.ability(AbilityId.NONE); - game.override.enemyAbility(AbilityId.NONE); - game.override.battleStyle("single"); - game.override.moveset([MoveId.FLOWER_SHIELD, MoveId.SPLASH]); - game.override.enemyMoveset(MoveId.SPLASH); + game.override + .ability(AbilityId.NONE) + .enemyAbility(AbilityId.NONE) + .battleStyle("single") + .moveset([MoveId.FLOWER_SHIELD, MoveId.SPLASH]) + .enemyMoveset(MoveId.SPLASH); }); it("raises DEF stat stage by 1 for all Grass-type Pokemon on the field by one stage - single battle", async () => { diff --git a/test/moves/follow_me.test.ts b/test/moves/follow_me.test.ts index 8279e7b325a..a99ac0b6c00 100644 --- a/test/moves/follow_me.test.ts +++ b/test/moves/follow_me.test.ts @@ -24,14 +24,15 @@ describe("Moves - Follow Me", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("double"); - game.override.starterSpecies(SpeciesId.AMOONGUSS); - game.override.ability(AbilityId.BALL_FETCH); - game.override.enemySpecies(SpeciesId.SNORLAX); - game.override.startingLevel(100); - game.override.enemyLevel(100); - game.override.moveset([MoveId.FOLLOW_ME, MoveId.RAGE_POWDER, MoveId.SPOTLIGHT, MoveId.QUICK_ATTACK]); - game.override.enemyMoveset([MoveId.TACKLE, MoveId.FOLLOW_ME, MoveId.SPLASH]); + game.override + .battleStyle("double") + .starterSpecies(SpeciesId.AMOONGUSS) + .ability(AbilityId.BALL_FETCH) + .enemySpecies(SpeciesId.SNORLAX) + .startingLevel(100) + .enemyLevel(100) + .moveset([MoveId.FOLLOW_ME, MoveId.RAGE_POWDER, MoveId.SPOTLIGHT, MoveId.QUICK_ATTACK]) + .enemyMoveset([MoveId.TACKLE, MoveId.FOLLOW_ME, MoveId.SPLASH]); }); test("move should redirect enemy attacks to the user", async () => { @@ -73,8 +74,7 @@ describe("Moves - Follow Me", () => { }); test("move effect should be bypassed by Stalwart", async () => { - game.override.ability(AbilityId.STALWART); - game.override.moveset([MoveId.QUICK_ATTACK]); + game.override.ability(AbilityId.STALWART).moveset([MoveId.QUICK_ATTACK]); await game.classicMode.startBattle([SpeciesId.AMOONGUSS, SpeciesId.CHARIZARD]); diff --git a/test/moves/gastro_acid.test.ts b/test/moves/gastro_acid.test.ts index 28f2c8e8476..dbaa53dcb4f 100644 --- a/test/moves/gastro_acid.test.ts +++ b/test/moves/gastro_acid.test.ts @@ -22,14 +22,15 @@ describe("Moves - Gastro Acid", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("double"); - game.override.startingLevel(1); - game.override.enemyLevel(100); - game.override.ability(AbilityId.BALL_FETCH); - game.override.moveset([MoveId.GASTRO_ACID, MoveId.WATER_GUN, MoveId.SPLASH, MoveId.CORE_ENFORCER]); - game.override.enemySpecies(SpeciesId.BIDOOF); - game.override.enemyMoveset(MoveId.SPLASH); - game.override.enemyAbility(AbilityId.WATER_ABSORB); + game.override + .battleStyle("double") + .startingLevel(1) + .enemyLevel(100) + .ability(AbilityId.NONE) + .moveset([MoveId.GASTRO_ACID, MoveId.WATER_GUN, MoveId.SPLASH, MoveId.CORE_ENFORCER]) + .enemySpecies(SpeciesId.BIDOOF) + .enemyMoveset(MoveId.SPLASH) + .enemyAbility(AbilityId.WATER_ABSORB); }); it("suppresses effect of ability", async () => { diff --git a/test/moves/glaive_rush.test.ts b/test/moves/glaive_rush.test.ts index 768c4a691b0..2aead405fb6 100644 --- a/test/moves/glaive_rush.test.ts +++ b/test/moves/glaive_rush.test.ts @@ -28,13 +28,12 @@ describe("Moves - Glaive Rush", () => { .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset([MoveId.GLAIVE_RUSH]) - .starterSpecies(SpeciesId.KLINK) .ability(AbilityId.BALL_FETCH) .moveset([MoveId.SHADOW_SNEAK, MoveId.AVALANCHE, MoveId.SPLASH, MoveId.GLAIVE_RUSH]); }); it("takes double damage from attacks", async () => { - await game.classicMode.startBattle(); + await game.classicMode.startBattle([SpeciesId.KLINK]); const enemy = game.scene.getEnemyPokemon()!; enemy.hp = 1000; @@ -49,7 +48,7 @@ describe("Moves - Glaive Rush", () => { }); it("always gets hit by attacks", async () => { - await game.classicMode.startBattle(); + await game.classicMode.startBattle([SpeciesId.KLINK]); const enemy = game.scene.getEnemyPokemon()!; enemy.hp = 1000; @@ -62,7 +61,7 @@ describe("Moves - Glaive Rush", () => { it("interacts properly with multi-lens", async () => { game.override.startingHeldItems([{ name: "MULTI_LENS", count: 2 }]).enemyMoveset([MoveId.AVALANCHE]); - await game.classicMode.startBattle(); + await game.classicMode.startBattle([SpeciesId.KLINK]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -82,7 +81,7 @@ describe("Moves - Glaive Rush", () => { it("secondary effects only last until next move", async () => { game.override.enemyMoveset([MoveId.SHADOW_SNEAK]); - await game.classicMode.startBattle(); + await game.classicMode.startBattle([SpeciesId.KLINK]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -106,7 +105,7 @@ describe("Moves - Glaive Rush", () => { }); it("secondary effects are removed upon switching", async () => { - game.override.enemyMoveset([MoveId.SHADOW_SNEAK]).starterSpecies(0); + game.override.enemyMoveset([MoveId.SHADOW_SNEAK]); await game.classicMode.startBattle([SpeciesId.KLINK, SpeciesId.FEEBAS]); const player = game.scene.getPlayerPokemon()!; @@ -127,8 +126,10 @@ describe("Moves - Glaive Rush", () => { }); it("secondary effects don't activate if move fails", async () => { - game.override.moveset([MoveId.SHADOW_SNEAK, MoveId.PROTECT, MoveId.SPLASH, MoveId.GLAIVE_RUSH]); - await game.classicMode.startBattle(); + game.override + .moveset([MoveId.SHADOW_SNEAK, MoveId.PROTECT, MoveId.SPLASH, MoveId.GLAIVE_RUSH]) + .enemyMoveset([MoveId.GLAIVE_RUSH, MoveId.SPLASH]); + await game.classicMode.startBattle([SpeciesId.KLINK]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -137,15 +138,17 @@ describe("Moves - Glaive Rush", () => { player.hp = 1000; game.move.select(MoveId.PROTECT); + await game.move.forceEnemyMove(MoveId.GLAIVE_RUSH); await game.phaseInterceptor.to("TurnEndPhase"); game.move.select(MoveId.SHADOW_SNEAK); + await game.move.forceEnemyMove(MoveId.GLAIVE_RUSH); await game.phaseInterceptor.to("TurnEndPhase"); - game.override.enemyMoveset([MoveId.SPLASH]); const damagedHP1 = 1000 - enemy.hp; enemy.hp = 1000; game.move.select(MoveId.SHADOW_SNEAK); + await game.move.forceEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); const damagedHP2 = 1000 - enemy.hp; diff --git a/test/moves/growth.test.ts b/test/moves/growth.test.ts index d468523aca7..a7078961e2a 100644 --- a/test/moves/growth.test.ts +++ b/test/moves/growth.test.ts @@ -24,11 +24,12 @@ describe("Moves - Growth", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.enemyAbility(AbilityId.MOXIE); - game.override.ability(AbilityId.INSOMNIA); - game.override.moveset([MoveId.GROWTH]); - game.override.enemyMoveset(MoveId.SPLASH); + game.override + .battleStyle("single") + .enemyAbility(AbilityId.MOXIE) + .ability(AbilityId.INSOMNIA) + .moveset([MoveId.GROWTH]) + .enemyMoveset(MoveId.SPLASH); }); it("should raise SPATK stat stage by 1", async () => { diff --git a/test/moves/hard_press.test.ts b/test/moves/hard_press.test.ts index 88a8c4a025b..e57c9af981f 100644 --- a/test/moves/hard_press.test.ts +++ b/test/moves/hard_press.test.ts @@ -27,12 +27,13 @@ describe("Moves - Hard Press", () => { beforeEach(() => { moveToCheck = allMoves[MoveId.HARD_PRESS]; game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.ability(AbilityId.BALL_FETCH); - game.override.enemySpecies(SpeciesId.MUNCHLAX); - game.override.enemyAbility(AbilityId.BALL_FETCH); - game.override.enemyMoveset(MoveId.SPLASH); - game.override.moveset([MoveId.HARD_PRESS]); + game.override + .battleStyle("single") + .ability(AbilityId.BALL_FETCH) + .enemySpecies(SpeciesId.MUNCHLAX) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) + .moveset([MoveId.HARD_PRESS]); vi.spyOn(moveToCheck, "calculateBattlePower"); }); diff --git a/test/moves/haze.test.ts b/test/moves/haze.test.ts index e77542227b8..f3e3dafae0a 100644 --- a/test/moves/haze.test.ts +++ b/test/moves/haze.test.ts @@ -23,16 +23,15 @@ describe("Moves - Haze", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - - game.override.enemySpecies(SpeciesId.RATTATA); - game.override.enemyLevel(100); - game.override.enemyMoveset(MoveId.SPLASH); - game.override.enemyAbility(AbilityId.NONE); - - game.override.startingLevel(100); - game.override.moveset([MoveId.HAZE, MoveId.SWORDS_DANCE, MoveId.CHARM, MoveId.SPLASH]); - game.override.ability(AbilityId.NONE); + game.override + .battleStyle("single") + .enemySpecies(SpeciesId.RATTATA) + .enemyLevel(100) + .enemyMoveset(MoveId.SPLASH) + .enemyAbility(AbilityId.BALL_FETCH) + .startingLevel(100) + .moveset([MoveId.HAZE, MoveId.SWORDS_DANCE, MoveId.CHARM, MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH); }); it("should reset all stat changes of all Pokemon on field", async () => { diff --git a/test/moves/hyper_beam.test.ts b/test/moves/hyper_beam.test.ts index 083482d16ef..bca7cba4e9a 100644 --- a/test/moves/hyper_beam.test.ts +++ b/test/moves/hyper_beam.test.ts @@ -26,14 +26,14 @@ describe("Moves - Hyper Beam", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.ability(AbilityId.BALL_FETCH); - game.override.enemySpecies(SpeciesId.SNORLAX); - game.override.enemyAbility(AbilityId.BALL_FETCH); - game.override.enemyMoveset([MoveId.SPLASH]); - game.override.enemyLevel(100); - - game.override.moveset([MoveId.HYPER_BEAM, MoveId.TACKLE]); + game.override + .battleStyle("single") + .ability(AbilityId.BALL_FETCH) + .enemySpecies(SpeciesId.SNORLAX) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset([MoveId.SPLASH]) + .enemyLevel(100) + .moveset([MoveId.HYPER_BEAM, MoveId.TACKLE]); vi.spyOn(allMoves[MoveId.HYPER_BEAM], "accuracy", "get").mockReturnValue(100); }); diff --git a/test/moves/lunar_blessing.test.ts b/test/moves/lunar_blessing.test.ts index 59d0c662859..2709ccbacf3 100644 --- a/test/moves/lunar_blessing.test.ts +++ b/test/moves/lunar_blessing.test.ts @@ -22,14 +22,13 @@ describe("Moves - Lunar Blessing", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("double"); - - game.override.enemySpecies(SpeciesId.SHUCKLE); - game.override.enemyMoveset(MoveId.SPLASH); - game.override.enemyAbility(AbilityId.BALL_FETCH); - - game.override.moveset([MoveId.LUNAR_BLESSING, MoveId.SPLASH]); - game.override.ability(AbilityId.BALL_FETCH); + game.override + .battleStyle("double") + .enemySpecies(SpeciesId.SHUCKLE) + .enemyMoveset(MoveId.SPLASH) + .enemyAbility(AbilityId.BALL_FETCH) + .moveset([MoveId.LUNAR_BLESSING, MoveId.SPLASH]) + .ability(AbilityId.BALL_FETCH); }); it("should restore 25% HP of the user and its ally", async () => { diff --git a/test/moves/magic_coat.test.ts b/test/moves/magic_coat.test.ts index a20aaf38043..7bbd4779da6 100644 --- a/test/moves/magic_coat.test.ts +++ b/test/moves/magic_coat.test.ts @@ -56,8 +56,7 @@ describe("Moves - Magic Coat", () => { }); it("should not reflect moves used on the next turn", async () => { - game.override.moveset([MoveId.GROWL, MoveId.SPLASH]); - game.override.enemyMoveset([MoveId.MAGIC_COAT, MoveId.SPLASH]); + game.override.moveset([MoveId.GROWL, MoveId.SPLASH]).enemyMoveset([MoveId.MAGIC_COAT, MoveId.SPLASH]); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); // turn 1 @@ -82,8 +81,7 @@ describe("Moves - Magic Coat", () => { }); it("should individually bounce back multi-target moves when used by both targets in doubles", async () => { - game.override.battleStyle("double"); - game.override.moveset([MoveId.GROWL, MoveId.SPLASH]); + game.override.battleStyle("double").moveset([MoveId.GROWL, MoveId.SPLASH]); await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]); game.move.select(MoveId.GROWL, 0); @@ -95,9 +93,10 @@ describe("Moves - Magic Coat", () => { }); it("should bounce back a spread status move against both pokemon", async () => { - game.override.battleStyle("double"); - game.override.moveset([MoveId.GROWL, MoveId.SPLASH]); - game.override.enemyMoveset([MoveId.SPLASH, MoveId.MAGIC_COAT]); + game.override + .battleStyle("double") + .moveset([MoveId.GROWL, MoveId.SPLASH]) + .enemyMoveset([MoveId.SPLASH, MoveId.MAGIC_COAT]); await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]); game.move.select(MoveId.GROWL, 0); @@ -121,10 +120,11 @@ describe("Moves - Magic Coat", () => { }); it("should not bounce back a move that was just bounced", async () => { - game.override.battleStyle("double"); - game.override.ability(AbilityId.MAGIC_BOUNCE); - game.override.moveset([MoveId.GROWL, MoveId.MAGIC_COAT]); - game.override.enemyMoveset([MoveId.SPLASH, MoveId.MAGIC_COAT]); + game.override + .battleStyle("double") + .ability(AbilityId.MAGIC_BOUNCE) + .moveset([MoveId.GROWL, MoveId.MAGIC_COAT]) + .enemyMoveset([MoveId.SPLASH, MoveId.MAGIC_COAT]); await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]); game.move.select(MoveId.MAGIC_COAT, 0); @@ -147,8 +147,7 @@ describe("Moves - Magic Coat", () => { }); it("should still bounce back a move from a mold breaker user", async () => { - game.override.ability(AbilityId.MOLD_BREAKER); - game.override.moveset([MoveId.GROWL]); + game.override.ability(AbilityId.MOLD_BREAKER).moveset([MoveId.GROWL]); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); game.move.select(MoveId.GROWL); @@ -159,9 +158,8 @@ describe("Moves - Magic Coat", () => { }); it("should only bounce spikes back once when both targets use magic coat in doubles", async () => { - game.override.battleStyle("double"); + game.override.battleStyle("double").moveset([MoveId.SPIKES]); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.override.moveset([MoveId.SPIKES]); game.move.select(MoveId.SPIKES); await game.phaseInterceptor.to("BerryPhase"); @@ -171,9 +169,8 @@ describe("Moves - Magic Coat", () => { }); it("should not bounce back curse", async () => { - game.override.starterSpecies(SpeciesId.GASTLY); - await game.classicMode.startBattle([SpeciesId.GASTLY]); game.override.moveset([MoveId.CURSE]); + await game.classicMode.startBattle([SpeciesId.GASTLY]); game.move.select(MoveId.CURSE); await game.phaseInterceptor.to("BerryPhase"); @@ -183,9 +180,10 @@ describe("Moves - Magic Coat", () => { // TODO: encore is failing if the last move was virtual. it.todo("should not cause the bounced move to count for encore", async () => { - game.override.moveset([MoveId.GROWL, MoveId.ENCORE]); - game.override.enemyMoveset([MoveId.MAGIC_COAT, MoveId.TACKLE]); - game.override.enemyAbility(AbilityId.MAGIC_BOUNCE); + game.override + .moveset([MoveId.GROWL, MoveId.ENCORE]) + .enemyMoveset([MoveId.MAGIC_COAT, MoveId.TACKLE]) + .enemyAbility(AbilityId.MAGIC_BOUNCE); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -206,9 +204,8 @@ describe("Moves - Magic Coat", () => { // TODO: stomping tantrum should consider moves that were bounced. it.todo("should cause stomping tantrum to double in power when the last move was bounced", async () => { - game.override.battleStyle("single"); + game.override.battleStyle("single").moveset([MoveId.STOMPING_TANTRUM, MoveId.CHARM]); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.override.moveset([MoveId.STOMPING_TANTRUM, MoveId.CHARM]); const stomping_tantrum = allMoves[MoveId.STOMPING_TANTRUM]; vi.spyOn(stomping_tantrum, "calculateBattlePower"); @@ -249,8 +246,7 @@ describe("Moves - Magic Coat", () => { it("should respect immunities when bouncing a move", async () => { vi.spyOn(allMoves[MoveId.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100); - game.override.moveset([MoveId.THUNDER_WAVE, MoveId.GROWL]); - game.override.ability(AbilityId.SOUNDPROOF); + game.override.moveset([MoveId.THUNDER_WAVE, MoveId.GROWL]).ability(AbilityId.SOUNDPROOF); await game.classicMode.startBattle([SpeciesId.PHANPY]); // Turn 1 - thunder wave immunity test diff --git a/test/moves/make_it_rain.test.ts b/test/moves/make_it_rain.test.ts index 0089dfb642d..13b8e8f1853 100644 --- a/test/moves/make_it_rain.test.ts +++ b/test/moves/make_it_rain.test.ts @@ -24,13 +24,14 @@ describe("Moves - Make It Rain", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("double"); - game.override.moveset([MoveId.MAKE_IT_RAIN, MoveId.SPLASH]); - game.override.enemySpecies(SpeciesId.SNORLAX); - game.override.enemyAbility(AbilityId.INSOMNIA); - game.override.enemyMoveset(MoveId.SPLASH); - game.override.startingLevel(100); - game.override.enemyLevel(100); + game.override + .battleStyle("double") + .moveset([MoveId.MAKE_IT_RAIN, MoveId.SPLASH]) + .enemySpecies(SpeciesId.SNORLAX) + .enemyAbility(AbilityId.INSOMNIA) + .enemyMoveset(MoveId.SPLASH) + .startingLevel(100) + .enemyLevel(100); }); it("should only lower SPATK stat stage by 1 once in a double battle", async () => { @@ -47,8 +48,9 @@ describe("Moves - Make It Rain", () => { }); it("should apply effects even if the target faints", async () => { - game.override.enemyLevel(1); // ensures the enemy will faint - game.override.battleStyle("single"); + game.override + .enemyLevel(1) // ensures the enemy will faint + .battleStyle("single"); await game.classicMode.startBattle([SpeciesId.CHARIZARD]); diff --git a/test/moves/mat_block.test.ts b/test/moves/mat_block.test.ts index c512503c9c4..d77f538a973 100644 --- a/test/moves/mat_block.test.ts +++ b/test/moves/mat_block.test.ts @@ -26,16 +26,14 @@ describe("Moves - Mat Block", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("double"); - - game.override.moveset([MoveId.MAT_BLOCK, MoveId.SPLASH]); - - game.override.enemySpecies(SpeciesId.SNORLAX); - game.override.enemyMoveset([MoveId.TACKLE]); - game.override.enemyAbility(AbilityId.INSOMNIA); - - game.override.startingLevel(100); - game.override.enemyLevel(100); + game.override + .battleStyle("double") + .moveset([MoveId.MAT_BLOCK, MoveId.SPLASH]) + .enemySpecies(SpeciesId.SNORLAX) + .enemyMoveset([MoveId.TACKLE]) + .enemyAbility(AbilityId.INSOMNIA) + .startingLevel(100) + .enemyLevel(100); }); test("should protect the user and allies from attack moves", async () => { diff --git a/test/moves/parting_shot.test.ts b/test/moves/parting_shot.test.ts index f7a1b86fb34..fdeab6bfc7c 100644 --- a/test/moves/parting_shot.test.ts +++ b/test/moves/parting_shot.test.ts @@ -26,11 +26,12 @@ describe("Moves - Parting Shot", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.moveset([MoveId.PARTING_SHOT, MoveId.SPLASH]); - game.override.enemyMoveset(MoveId.SPLASH); - game.override.startingLevel(5); - game.override.enemyLevel(5); + game.override + .battleStyle("single") + .moveset([MoveId.PARTING_SHOT, MoveId.SPLASH]) + .enemyMoveset(MoveId.SPLASH) + .startingLevel(5) + .enemyLevel(5); }); test("Parting Shot when buffed by prankster should fail against dark types", async () => { diff --git a/test/moves/powder.test.ts b/test/moves/powder.test.ts index 38e35d60335..889e660f167 100644 --- a/test/moves/powder.test.ts +++ b/test/moves/powder.test.ts @@ -28,9 +28,8 @@ describe("Moves - Powder", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override + .battleStyle("single") .enemySpecies(SpeciesId.SNORLAX) .enemyLevel(100) .enemyMoveset(MoveId.EMBER) diff --git a/test/moves/protect.test.ts b/test/moves/protect.test.ts index 754a3433701..601afb43ec3 100644 --- a/test/moves/protect.test.ts +++ b/test/moves/protect.test.ts @@ -28,16 +28,14 @@ describe("Moves - Protect", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - - game.override.moveset([MoveId.PROTECT]); - game.override.enemySpecies(SpeciesId.SNORLAX); - - game.override.enemyAbility(AbilityId.INSOMNIA); - game.override.enemyMoveset([MoveId.TACKLE]); - - game.override.startingLevel(100); - game.override.enemyLevel(100); + game.override + .battleStyle("single") + .moveset([MoveId.PROTECT]) + .enemySpecies(SpeciesId.SNORLAX) + .enemyAbility(AbilityId.INSOMNIA) + .enemyMoveset([MoveId.TACKLE]) + .startingLevel(100) + .enemyLevel(100); }); test("should protect the user from attacks", async () => { diff --git a/test/moves/purify.test.ts b/test/moves/purify.test.ts index 0510260b755..2e8e312f23c 100644 --- a/test/moves/purify.test.ts +++ b/test/moves/purify.test.ts @@ -25,15 +25,14 @@ describe("Moves - Purify", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - - game.override.starterSpecies(SpeciesId.PYUKUMUKU); - game.override.startingLevel(10); - game.override.moveset([MoveId.PURIFY, MoveId.SIZZLY_SLIDE]); - - game.override.enemySpecies(SpeciesId.MAGIKARP); - game.override.enemyLevel(10); - game.override.enemyMoveset([MoveId.SPLASH, MoveId.NONE, MoveId.NONE, MoveId.NONE]); + game.override + .battleStyle("single") + .starterSpecies(SpeciesId.PYUKUMUKU) + .startingLevel(10) + .moveset([MoveId.PURIFY, MoveId.SIZZLY_SLIDE]) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyLevel(10) + .enemyMoveset([MoveId.SPLASH]); }); test("Purify heals opponent status effect and restores user hp", async () => { diff --git a/test/moves/quick_guard.test.ts b/test/moves/quick_guard.test.ts index 49f501fb839..7146b804ffa 100644 --- a/test/moves/quick_guard.test.ts +++ b/test/moves/quick_guard.test.ts @@ -25,16 +25,14 @@ describe("Moves - Quick Guard", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("double"); - - game.override.moveset([MoveId.QUICK_GUARD, MoveId.SPLASH, MoveId.FOLLOW_ME]); - - game.override.enemySpecies(SpeciesId.SNORLAX); - game.override.enemyMoveset([MoveId.QUICK_ATTACK]); - game.override.enemyAbility(AbilityId.INSOMNIA); - - game.override.startingLevel(100); - game.override.enemyLevel(100); + game.override + .battleStyle("double") + .moveset([MoveId.QUICK_GUARD, MoveId.SPLASH, MoveId.FOLLOW_ME]) + .enemySpecies(SpeciesId.SNORLAX) + .enemyMoveset([MoveId.QUICK_ATTACK]) + .enemyAbility(AbilityId.INSOMNIA) + .startingLevel(100) + .enemyLevel(100); }); test("should protect the user and allies from priority moves", async () => { @@ -51,8 +49,7 @@ describe("Moves - Quick Guard", () => { }); test("should protect the user and allies from Prankster-boosted moves", async () => { - game.override.enemyAbility(AbilityId.PRANKSTER); - game.override.enemyMoveset([MoveId.GROWL]); + game.override.enemyAbility(AbilityId.PRANKSTER).enemyMoveset([MoveId.GROWL]); await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); @@ -84,8 +81,7 @@ describe("Moves - Quick Guard", () => { }); test("should fail if the user is the last to move in the turn", async () => { - game.override.battleStyle("single"); - game.override.enemyMoveset([MoveId.QUICK_GUARD]); + game.override.battleStyle("single").enemyMoveset([MoveId.QUICK_GUARD]); await game.classicMode.startBattle([SpeciesId.CHARIZARD]); diff --git a/test/moves/rage_powder.test.ts b/test/moves/rage_powder.test.ts index 807000a0ff0..845bff33d04 100644 --- a/test/moves/rage_powder.test.ts +++ b/test/moves/rage_powder.test.ts @@ -22,12 +22,13 @@ describe("Moves - Rage Powder", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("double"); - game.override.enemySpecies(SpeciesId.SNORLAX); - game.override.startingLevel(100); - game.override.enemyLevel(100); - game.override.moveset([MoveId.FOLLOW_ME, MoveId.RAGE_POWDER, MoveId.SPOTLIGHT, MoveId.QUICK_ATTACK]); - game.override.enemyMoveset([MoveId.RAGE_POWDER, MoveId.TACKLE, MoveId.SPLASH]); + game.override + .battleStyle("double") + .enemySpecies(SpeciesId.SNORLAX) + .startingLevel(100) + .enemyLevel(100) + .moveset([MoveId.FOLLOW_ME, MoveId.RAGE_POWDER, MoveId.SPOTLIGHT, MoveId.QUICK_ATTACK]) + .enemyMoveset([MoveId.RAGE_POWDER, MoveId.TACKLE, MoveId.SPLASH]); }); test("move effect should be bypassed by Grass type", async () => { diff --git a/test/moves/rollout.test.ts b/test/moves/rollout.test.ts index de990a1a750..b9faf438ae5 100644 --- a/test/moves/rollout.test.ts +++ b/test/moves/rollout.test.ts @@ -23,18 +23,19 @@ describe("Moves - Rollout", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.disableCrits(); - game.override.battleStyle("single"); - game.override.starterSpecies(SpeciesId.RATTATA); - game.override.ability(AbilityId.BALL_FETCH); - game.override.enemySpecies(SpeciesId.BIDOOF); - game.override.enemyAbility(AbilityId.BALL_FETCH); - game.override.startingLevel(100); - game.override.enemyLevel(100); - game.override.enemyMoveset(MoveId.SPLASH); + game.override + .disableCrits() + .battleStyle("single") + .starterSpecies(SpeciesId.RATTATA) + .ability(AbilityId.BALL_FETCH) + .enemySpecies(SpeciesId.BIDOOF) + .enemyAbility(AbilityId.BALL_FETCH) + .startingLevel(100) + .enemyLevel(100) + .enemyMoveset(MoveId.SPLASH); }); - it("should double it's dmg on sequential uses but reset after 5", async () => { + it("should double its dmg on sequential uses but reset after 5", async () => { game.override.moveset([MoveId.ROLLOUT]); vi.spyOn(allMoves[MoveId.ROLLOUT], "accuracy", "get").mockReturnValue(100); //always hit diff --git a/test/moves/roost.test.ts b/test/moves/roost.test.ts index 1e588cb1e15..3707e0ead45 100644 --- a/test/moves/roost.test.ts +++ b/test/moves/roost.test.ts @@ -25,12 +25,13 @@ describe("Moves - Roost", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.enemySpecies(SpeciesId.RELICANTH); - game.override.startingLevel(100); - game.override.enemyLevel(100); - game.override.enemyMoveset(MoveId.EARTHQUAKE); - game.override.moveset([MoveId.ROOST, MoveId.BURN_UP, MoveId.DOUBLE_SHOCK]); + game.override + .battleStyle("single") + .enemySpecies(SpeciesId.RELICANTH) + .startingLevel(100) + .enemyLevel(100) + .enemyMoveset(MoveId.EARTHQUAKE) + .moveset([MoveId.ROOST, MoveId.BURN_UP, MoveId.DOUBLE_SHOCK]); }); /** diff --git a/test/moves/safeguard.test.ts b/test/moves/safeguard.test.ts index 6cd90bf8ac6..8d5303e3feb 100644 --- a/test/moves/safeguard.test.ts +++ b/test/moves/safeguard.test.ts @@ -1,12 +1,12 @@ import { BattlerIndex } from "#enums/battler-index"; import { allAbilities } from "#app/data/data-lists"; -import { AbilityId } from "#enums/ability-id"; import { StatusEffect } from "#app/enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { AbilityId } from "#enums/ability-id"; describe("Moves - Safeguard", () => { let phaserGame: Phaser.Game; @@ -109,49 +109,50 @@ describe("Moves - Safeguard", () => { game.move.select(MoveId.SPLASH); await game.toNextTurn(); - expect(enemyPokemon.status?.effect).toEqual(StatusEffect.SLEEP); + expect(enemyPokemon.status?.effect).toBe(StatusEffect.SLEEP); }); - it("doesn't protect from self-inflicted via Rest or Flame Orb", async () => { + it("doesn't protect from self-inflicted status from Rest or Flame Orb", async () => { game.override.enemyHeldItems([{ name: "FLAME_ORB" }]); await game.classicMode.startBattle(); const enemyPokemon = game.scene.getEnemyPokemon()!; + enemyPokemon.hp = 1; game.move.select(MoveId.SPLASH); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.move.forceEnemyMove(MoveId.SAFEGUARD); await game.toNextTurn(); - enemyPokemon.damageAndUpdate(1); - expect(enemyPokemon.status?.effect).toEqual(StatusEffect.BURN); + expect(enemyPokemon.status?.effect).toBe(StatusEffect.BURN); + + enemyPokemon.resetStatus(); - game.override.enemyMoveset([MoveId.REST]); - // Force the moveset to update mid-battle - // TODO: Remove after enemy AI rework is in - enemyPokemon.getMoveset(); game.move.select(MoveId.SPLASH); - enemyPokemon.damageAndUpdate(1); + await game.move.forceEnemyMove(MoveId.REST); await game.toNextTurn(); - expect(enemyPokemon.status?.effect).toEqual(StatusEffect.SLEEP); + expect(enemyPokemon.status?.effect).toBe(StatusEffect.SLEEP); }); it("protects from ability-inflicted status", async () => { - game.override.ability(AbilityId.STATIC); + await game.classicMode.startBattle(); + + const player = game.field.getPlayerPokemon(); + game.field.mockAbility(player, AbilityId.STATIC); vi.spyOn( allAbilities[AbilityId.STATIC].getAttrs("PostDefendContactApplyStatusEffectAbAttr")[0], "chance", "get", ).mockReturnValue(100); - await game.classicMode.startBattle(); - const enemyPokemon = game.scene.getEnemyPokemon()!; game.move.select(MoveId.SPLASH); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); - await game.toNextTurn(); - game.override.enemyMoveset([MoveId.TACKLE]); - game.move.select(MoveId.SPLASH); + await game.move.forceEnemyMove(MoveId.SAFEGUARD); await game.toNextTurn(); + game.move.select(MoveId.SPLASH); + await game.move.forceEnemyMove(MoveId.TACKLE); + await game.toNextTurn(); + + const enemyPokemon = game.field.getEnemyPokemon(); expect(enemyPokemon.status).toBeUndefined(); }); }); diff --git a/test/moves/spikes.test.ts b/test/moves/spikes.test.ts index d847f296e59..a2d72054020 100644 --- a/test/moves/spikes.test.ts +++ b/test/moves/spikes.test.ts @@ -81,9 +81,7 @@ describe("Moves - Spikes", () => { }, 20000); it("should work when all targets fainted", async () => { - game.override.enemySpecies(SpeciesId.DIGLETT); - game.override.battleStyle("double"); - game.override.startingLevel(50); + game.override.enemySpecies(SpeciesId.DIGLETT).battleStyle("double").startingLevel(50); await game.classicMode.startBattle([SpeciesId.RAYQUAZA, SpeciesId.ROWLET]); game.move.select(MoveId.EARTHQUAKE); diff --git a/test/moves/spit_up.test.ts b/test/moves/spit_up.test.ts index 83549c28f40..fee58ef99f7 100644 --- a/test/moves/spit_up.test.ts +++ b/test/moves/spit_up.test.ts @@ -32,15 +32,14 @@ describe("Moves - Spit Up", () => { spitUp = allMoves[MoveId.SPIT_UP]; game = new GameManager(phaserGame); - game.override.battleStyle("single"); - - game.override.enemySpecies(SpeciesId.RATTATA); - game.override.enemyMoveset(MoveId.SPLASH); - game.override.enemyAbility(AbilityId.NONE); - game.override.enemyLevel(2000); - - game.override.moveset(new Array(4).fill(spitUp.id)); - game.override.ability(AbilityId.NONE); + game.override + .battleStyle("single") + .enemySpecies(SpeciesId.RATTATA) + .enemyMoveset(MoveId.SPLASH) + .enemyAbility(AbilityId.NONE) + .enemyLevel(2000) + .moveset(MoveId.SPIT_UP) + .ability(AbilityId.NONE); vi.spyOn(spitUp, "calculateBattlePower"); }); diff --git a/test/moves/spotlight.test.ts b/test/moves/spotlight.test.ts index 602cedcaec9..a9e8cd7e2b6 100644 --- a/test/moves/spotlight.test.ts +++ b/test/moves/spotlight.test.ts @@ -22,13 +22,14 @@ describe("Moves - Spotlight", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("double"); - game.override.starterSpecies(SpeciesId.AMOONGUSS); - game.override.enemySpecies(SpeciesId.SNORLAX); - game.override.startingLevel(100); - game.override.enemyLevel(100); - game.override.moveset([MoveId.FOLLOW_ME, MoveId.RAGE_POWDER, MoveId.SPOTLIGHT, MoveId.QUICK_ATTACK]); - game.override.enemyMoveset([MoveId.FOLLOW_ME, MoveId.SPLASH]); + game.override + .battleStyle("double") + .starterSpecies(SpeciesId.AMOONGUSS) + .enemySpecies(SpeciesId.SNORLAX) + .startingLevel(100) + .enemyLevel(100) + .moveset([MoveId.FOLLOW_ME, MoveId.RAGE_POWDER, MoveId.SPOTLIGHT, MoveId.QUICK_ATTACK]) + .enemyMoveset([MoveId.FOLLOW_ME, MoveId.SPLASH]); }); test("move should redirect attacks to the target", async () => { diff --git a/test/moves/stockpile.test.ts b/test/moves/stockpile.test.ts index 4baa7949bc6..342ca43c27f 100644 --- a/test/moves/stockpile.test.ts +++ b/test/moves/stockpile.test.ts @@ -27,15 +27,14 @@ describe("Moves - Stockpile", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - - game.override.enemySpecies(SpeciesId.RATTATA); - game.override.enemyMoveset(MoveId.SPLASH); - game.override.enemyAbility(AbilityId.NONE); - - game.override.startingLevel(2000); - game.override.moveset([MoveId.STOCKPILE, MoveId.SPLASH]); - game.override.ability(AbilityId.NONE); + game.override + .battleStyle("single") + .enemySpecies(SpeciesId.RATTATA) + .enemyMoveset(MoveId.SPLASH) + .enemyAbility(AbilityId.NONE) + .startingLevel(2000) + .moveset([MoveId.STOCKPILE, MoveId.SPLASH]) + .ability(AbilityId.NONE); }); it("gains a stockpile stack and raises user's DEF and SPDEF stat stages by 1 on each use, fails at max stacks (3)", async () => { diff --git a/test/moves/substitute.test.ts b/test/moves/substitute.test.ts index 857f20c7fa0..182fefb74d7 100644 --- a/test/moves/substitute.test.ts +++ b/test/moves/substitute.test.ts @@ -138,8 +138,7 @@ describe("Moves - Substitute", () => { }); it("should be bypassed by attackers with Infiltrator", async () => { - game.override.enemyMoveset(MoveId.TACKLE); - game.override.enemyAbility(AbilityId.INFILTRATOR); + game.override.enemyMoveset(MoveId.TACKLE).enemyAbility(AbilityId.INFILTRATOR); await game.classicMode.startBattle([SpeciesId.BLASTOISE]); @@ -230,8 +229,7 @@ describe("Moves - Substitute", () => { }); it("should protect the user from flinching", async () => { - game.override.enemyMoveset(MoveId.FAKE_OUT); - game.override.startingLevel(1); // Ensures the Substitute will break + game.override.enemyMoveset(MoveId.FAKE_OUT).startingLevel(1); // Ensures the Substitute will break await game.classicMode.startBattle([SpeciesId.BLASTOISE]); @@ -298,9 +296,8 @@ describe("Moves - Substitute", () => { }); it("should prevent the user's items from being stolen", async () => { - game.override.enemyMoveset(MoveId.THIEF); + game.override.enemyMoveset(MoveId.THIEF).startingHeldItems([{ name: "BERRY", type: BerryType.SITRUS }]); vi.spyOn(allMoves[MoveId.THIEF], "attrs", "get").mockReturnValue([new StealHeldItemChanceAttr(1.0)]); // give Thief 100% steal rate - game.override.startingHeldItems([{ name: "BERRY", type: BerryType.SITRUS }]); await game.classicMode.startBattle([SpeciesId.BLASTOISE]); @@ -316,8 +313,7 @@ describe("Moves - Substitute", () => { }); it("should prevent the user's items from being removed", async () => { - game.override.moveset([MoveId.KNOCK_OFF]); - game.override.enemyHeldItems([{ name: "BERRY", type: BerryType.SITRUS }]); + game.override.moveset([MoveId.KNOCK_OFF]).enemyHeldItems([{ name: "BERRY", type: BerryType.SITRUS }]); await game.classicMode.startBattle([SpeciesId.BLASTOISE]); @@ -334,8 +330,7 @@ describe("Moves - Substitute", () => { }); it("move effect should prevent the user's berries from being stolen and eaten", async () => { - game.override.enemyMoveset(MoveId.BUG_BITE); - game.override.startingHeldItems([{ name: "BERRY", type: BerryType.SITRUS }]); + game.override.enemyMoveset(MoveId.BUG_BITE).startingHeldItems([{ name: "BERRY", type: BerryType.SITRUS }]); await game.classicMode.startBattle([SpeciesId.BLASTOISE]); @@ -412,8 +407,7 @@ describe("Moves - Substitute", () => { }); it("should prevent the source's Rough Skin from activating when hit", async () => { - game.override.enemyMoveset(MoveId.TACKLE); - game.override.ability(AbilityId.ROUGH_SKIN); + game.override.enemyMoveset(MoveId.TACKLE).ability(AbilityId.ROUGH_SKIN); await game.classicMode.startBattle([SpeciesId.BLASTOISE]); @@ -427,8 +421,7 @@ describe("Moves - Substitute", () => { }); it("should prevent the source's Focus Punch from failing when hit", async () => { - game.override.enemyMoveset(MoveId.TACKLE); - game.override.moveset([MoveId.FOCUS_PUNCH]); + game.override.enemyMoveset(MoveId.TACKLE).moveset([MoveId.FOCUS_PUNCH]); // Make Focus Punch 40 power to avoid a KO vi.spyOn(allMoves[MoveId.FOCUS_PUNCH], "calculateBattlePower").mockReturnValue(40); @@ -449,8 +442,7 @@ describe("Moves - Substitute", () => { }); it("should not allow Shell Trap to activate when attacked", async () => { - game.override.enemyMoveset(MoveId.TACKLE); - game.override.moveset([MoveId.SHELL_TRAP]); + game.override.enemyMoveset(MoveId.TACKLE).moveset([MoveId.SHELL_TRAP]); await game.classicMode.startBattle([SpeciesId.BLASTOISE]); @@ -466,8 +458,7 @@ describe("Moves - Substitute", () => { }); it("should not allow Beak Blast to burn opponents when hit", async () => { - game.override.enemyMoveset(MoveId.TACKLE); - game.override.moveset([MoveId.BEAK_BLAST]); + game.override.enemyMoveset(MoveId.TACKLE).moveset([MoveId.BEAK_BLAST]); await game.classicMode.startBattle([SpeciesId.BLASTOISE]); @@ -484,8 +475,7 @@ describe("Moves - Substitute", () => { }); it("should cause incoming attacks to not activate Counter", async () => { - game.override.enemyMoveset(MoveId.TACKLE); - game.override.moveset([MoveId.COUNTER]); + game.override.enemyMoveset(MoveId.TACKLE).moveset([MoveId.COUNTER]); await game.classicMode.startBattle([SpeciesId.BLASTOISE]); diff --git a/test/moves/tackle.test.ts b/test/moves/tackle.test.ts index 83a267dc7e4..61780044f49 100644 --- a/test/moves/tackle.test.ts +++ b/test/moves/tackle.test.ts @@ -37,6 +37,7 @@ describe("Moves - Tackle", () => { it("TACKLE against ghost", async () => { const moveToUse = MoveId.TACKLE; game.override.enemySpecies(SpeciesId.GENGAR); + await game.classicMode.startBattle([SpeciesId.MIGHTYENA]); const hpOpponent = game.scene.currentBattle.enemyParty[0].hp; game.move.select(moveToUse); diff --git a/test/moves/tail_whip.test.ts b/test/moves/tail_whip.test.ts index 5118897a7cb..9c9ac736ece 100644 --- a/test/moves/tail_whip.test.ts +++ b/test/moves/tail_whip.test.ts @@ -25,13 +25,14 @@ describe("Moves - Tail whip", () => { beforeEach(() => { game = new GameManager(phaserGame); const moveToUse = MoveId.TAIL_WHIP; - game.override.battleStyle("single"); - game.override.enemySpecies(SpeciesId.RATTATA); - game.override.enemyAbility(AbilityId.INSOMNIA); - game.override.ability(AbilityId.INSOMNIA); - game.override.startingLevel(2000); - game.override.moveset([moveToUse]); - game.override.enemyMoveset(MoveId.SPLASH); + game.override + .battleStyle("single") + .enemySpecies(SpeciesId.RATTATA) + .enemyAbility(AbilityId.INSOMNIA) + .ability(AbilityId.INSOMNIA) + .startingLevel(2000) + .moveset([moveToUse]) + .enemyMoveset(MoveId.SPLASH); }); it("should lower DEF stat stage by 1", async () => { diff --git a/test/moves/thousand_arrows.test.ts b/test/moves/thousand_arrows.test.ts index 428e7c4fbe4..9ecdd94a94f 100644 --- a/test/moves/thousand_arrows.test.ts +++ b/test/moves/thousand_arrows.test.ts @@ -24,12 +24,13 @@ describe("Moves - Thousand Arrows", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.enemySpecies(SpeciesId.TOGETIC); - game.override.startingLevel(100); - game.override.enemyLevel(100); - game.override.moveset([MoveId.THOUSAND_ARROWS]); - game.override.enemyMoveset([MoveId.SPLASH, MoveId.SPLASH, MoveId.SPLASH, MoveId.SPLASH]); + game.override + .battleStyle("single") + .enemySpecies(SpeciesId.TOGETIC) + .startingLevel(100) + .enemyLevel(100) + .moveset([MoveId.THOUSAND_ARROWS]) + .enemyMoveset(MoveId.SPLASH); }); it("move should hit and ground Flying-type targets", async () => { @@ -50,8 +51,7 @@ describe("Moves - Thousand Arrows", () => { }); it("move should hit and ground targets with Levitate", async () => { - game.override.enemySpecies(SpeciesId.SNORLAX); - game.override.enemyAbility(AbilityId.LEVITATE); + game.override.enemySpecies(SpeciesId.SNORLAX).enemyAbility(AbilityId.LEVITATE); await game.classicMode.startBattle([SpeciesId.ILLUMISE]); diff --git a/test/moves/tidy_up.test.ts b/test/moves/tidy_up.test.ts index 8e79b6b130a..636946c2e6a 100644 --- a/test/moves/tidy_up.test.ts +++ b/test/moves/tidy_up.test.ts @@ -4,11 +4,11 @@ import { MoveEndPhase } from "#app/phases/move-end-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; -import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import { SubstituteTag } from "#app/data/battler-tags"; +import { SpeciesId } from "#enums/species-id"; describe("Moves - Tidy Up", () => { let phaserGame: Phaser.Game; @@ -26,14 +26,15 @@ describe("Moves - Tidy Up", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.enemySpecies(SpeciesId.MAGIKARP); - game.override.enemyAbility(AbilityId.BALL_FETCH); - game.override.enemyMoveset(MoveId.SPLASH); - game.override.starterSpecies(SpeciesId.FEEBAS); - game.override.ability(AbilityId.BALL_FETCH); - game.override.moveset([MoveId.TIDY_UP]); - game.override.startingLevel(50); + game.override + .battleStyle("single") + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) + .starterSpecies(SpeciesId.FEEBAS) + .ability(AbilityId.BALL_FETCH) + .moveset([MoveId.TIDY_UP]) + .startingLevel(50); }); it("spikes are cleared", async () => { diff --git a/test/moves/toxic.test.ts b/test/moves/toxic.test.ts index eb23885b4b5..a7ba52eb963 100644 --- a/test/moves/toxic.test.ts +++ b/test/moves/toxic.test.ts @@ -75,8 +75,7 @@ describe("Moves - Toxic", () => { }); it("moves other than Toxic should not hit semi-invulnerable targets even if user is Poison-type", async () => { - game.override.moveset(MoveId.SWIFT); - game.override.enemyMoveset(MoveId.FLY); + game.override.moveset(MoveId.SWIFT).enemyMoveset(MoveId.FLY); await game.classicMode.startBattle([SpeciesId.TOXAPEX]); game.move.select(MoveId.SWIFT); diff --git a/test/moves/transform.test.ts b/test/moves/transform.test.ts index 8ee65802b37..4fbaf0136ab 100644 --- a/test/moves/transform.test.ts +++ b/test/moves/transform.test.ts @@ -154,8 +154,7 @@ describe("Moves - Transform", () => { }); it("should stay transformed with the correct form after reload", async () => { - game.override.enemyMoveset([]).moveset([]); - game.override.enemySpecies(SpeciesId.DARMANITAN); + game.override.enemyMoveset([]).moveset([]).enemySpecies(SpeciesId.DARMANITAN); await game.classicMode.startBattle([SpeciesId.DITTO]); diff --git a/test/moves/wide_guard.test.ts b/test/moves/wide_guard.test.ts index 65c3a0a805f..07c02158e94 100644 --- a/test/moves/wide_guard.test.ts +++ b/test/moves/wide_guard.test.ts @@ -25,16 +25,14 @@ describe("Moves - Wide Guard", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("double"); - - game.override.moveset([MoveId.WIDE_GUARD, MoveId.SPLASH, MoveId.SURF]); - - game.override.enemySpecies(SpeciesId.SNORLAX); - game.override.enemyMoveset([MoveId.SWIFT]); - game.override.enemyAbility(AbilityId.INSOMNIA); - - game.override.startingLevel(100); - game.override.enemyLevel(100); + game.override + .battleStyle("double") + .moveset([MoveId.WIDE_GUARD, MoveId.SPLASH, MoveId.SURF]) + .enemySpecies(SpeciesId.SNORLAX) + .enemyMoveset(MoveId.SWIFT) + .enemyAbility(AbilityId.INSOMNIA) + .startingLevel(100) + .enemyLevel(100); }); test("should protect the user and allies from multi-target attack moves", async () => { diff --git a/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts b/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts index d713db0aff8..e3368d339cd 100644 --- a/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts +++ b/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts @@ -38,10 +38,11 @@ describe("A Trainer's Test - Mystery Encounter", () => { beforeEach(async () => { game = new GameManager(phaserGame); scene = game.scene; - game.override.mysteryEncounterChance(100); - game.override.startingWave(defaultWave); - game.override.startingBiome(defaultBiome); - game.override.disableTrainerWaves(); + game.override + .mysteryEncounterChance(100) + .startingWave(defaultWave) + .startingBiome(defaultBiome) + .disableTrainerWaves(); const biomeMap = new Map([ [BiomeId.VOLCANO, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], diff --git a/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts b/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts index f5bc1a62528..304ca87e0e6 100644 --- a/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts +++ b/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts @@ -38,10 +38,11 @@ describe("Absolute Avarice - Mystery Encounter", () => { beforeEach(async () => { game = new GameManager(phaserGame); scene = game.scene; - game.override.mysteryEncounterChance(100); - game.override.startingWave(defaultWave); - game.override.startingBiome(defaultBiome); - game.override.disableTrainerWaves(); + game.override + .mysteryEncounterChance(100) + .startingWave(defaultWave) + .startingBiome(defaultBiome) + .disableTrainerWaves(); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([ @@ -71,8 +72,7 @@ describe("Absolute Avarice - Mystery Encounter", () => { }); it("should not spawn outside of proper biomes", async () => { - game.override.mysteryEncounterTier(MysteryEncounterTier.GREAT); - game.override.startingBiome(BiomeId.VOLCANO); + game.override.mysteryEncounterTier(MysteryEncounterTier.GREAT).startingBiome(BiomeId.VOLCANO); await game.runToMysteryEncounter(); expect(game.scene.currentBattle.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.ABSOLUTE_AVARICE); @@ -87,8 +87,7 @@ describe("Absolute Avarice - Mystery Encounter", () => { }); it("should spawn if player has enough berries", async () => { - game.override.mysteryEncounterTier(MysteryEncounterTier.GREAT); - game.override.startingHeldItems([ + game.override.mysteryEncounterTier(MysteryEncounterTier.GREAT).startingHeldItems([ { name: "BERRY", count: 2, type: BerryType.SITRUS }, { name: "BERRY", count: 3, type: BerryType.GANLON }, { name: "BERRY", count: 2, type: BerryType.APICOT }, @@ -139,7 +138,6 @@ describe("Absolute Avarice - Mystery Encounter", () => { expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(SpeciesId.GREEDENT); const moveset = enemyField[0].moveset.map(m => m.moveId); - expect(moveset?.length).toBe(4); expect(moveset).toEqual([MoveId.THRASH, MoveId.CRUNCH, MoveId.BODY_PRESS, MoveId.SLACK_OFF]); const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof MovePhase).map(p => p[0]); diff --git a/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts b/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts index d208a859825..8e8253fd912 100644 --- a/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts +++ b/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts @@ -79,8 +79,7 @@ describe("An Offer You Can't Refuse - Mystery Encounter", () => { }); it("should not spawn outside of HUMAN_TRANSITABLE_BIOMES", async () => { - game.override.mysteryEncounterTier(MysteryEncounterTier.GREAT); - game.override.startingBiome(BiomeId.VOLCANO); + game.override.mysteryEncounterTier(MysteryEncounterTier.GREAT).startingBiome(BiomeId.VOLCANO); await game.runToMysteryEncounter(); expect(scene.currentBattle?.mysteryEncounter?.encounterType).not.toBe( diff --git a/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts b/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts index 8e58a0ca242..d5527d208fd 100644 --- a/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts +++ b/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts @@ -154,10 +154,11 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { beforeEach(async () => { game = new GameManager(phaserGame); scene = game.scene; - game.override.mysteryEncounterChance(100); - game.override.startingWave(defaultWave); - game.override.startingBiome(defaultBiome); - game.override.disableTrainerWaves(); + game.override + .mysteryEncounterChance(100) + .startingWave(defaultWave) + .startingBiome(defaultBiome) + .disableTrainerWaves(); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([[BiomeId.CAVE, [MysteryEncounterType.BUG_TYPE_SUPERFAN]]]), diff --git a/test/mystery-encounter/encounters/clowning-around-encounter.test.ts b/test/mystery-encounter/encounters/clowning-around-encounter.test.ts index 526a3a0ab67..9965b90a981 100644 --- a/test/mystery-encounter/encounters/clowning-around-encounter.test.ts +++ b/test/mystery-encounter/encounters/clowning-around-encounter.test.ts @@ -55,10 +55,11 @@ describe("Clowning Around - Mystery Encounter", () => { beforeEach(async () => { game = new GameManager(phaserGame); scene = game.scene; - game.override.mysteryEncounterChance(100); - game.override.startingWave(defaultWave); - game.override.startingBiome(defaultBiome); - game.override.disableTrainerWaves(); + game.override + .mysteryEncounterChance(100) + .startingWave(defaultWave) + .startingBiome(defaultBiome) + .disableTrainerWaves(); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([[BiomeId.CAVE, [MysteryEncounterType.CLOWNING_AROUND]]]), diff --git a/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts b/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts index ee4aefd9904..f74100d7e35 100644 --- a/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts +++ b/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts @@ -41,10 +41,11 @@ describe("Dancing Lessons - Mystery Encounter", () => { beforeEach(async () => { game = new GameManager(phaserGame); scene = game.scene; - game.override.mysteryEncounterChance(100); - game.override.startingWave(defaultWave); - game.override.startingBiome(defaultBiome); - game.override.disableTrainerWaves(); + game.override + .mysteryEncounterChance(100) + .startingWave(defaultWave) + .startingBiome(defaultBiome) + .disableTrainerWaves(); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([ @@ -74,8 +75,7 @@ describe("Dancing Lessons - Mystery Encounter", () => { }); it("should not spawn outside of proper biomes", async () => { - game.override.mysteryEncounterTier(MysteryEncounterTier.GREAT); - game.override.startingBiome(BiomeId.SPACE); + game.override.mysteryEncounterTier(MysteryEncounterTier.GREAT).startingBiome(BiomeId.SPACE); await game.runToMysteryEncounter(); expect(game.scene.currentBattle.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.DANCING_LESSONS); diff --git a/test/mystery-encounter/encounters/delibirdy-encounter.test.ts b/test/mystery-encounter/encounters/delibirdy-encounter.test.ts index e569c1d7789..0b6f7453522 100644 --- a/test/mystery-encounter/encounters/delibirdy-encounter.test.ts +++ b/test/mystery-encounter/encounters/delibirdy-encounter.test.ts @@ -46,10 +46,11 @@ describe("Delibird-y - Mystery Encounter", () => { beforeEach(async () => { game = new GameManager(phaserGame); scene = game.scene; - game.override.mysteryEncounterChance(100); - game.override.startingWave(defaultWave); - game.override.startingBiome(defaultBiome); - game.override.disableTrainerWaves(); + game.override + .mysteryEncounterChance(100) + .startingWave(defaultWave) + .startingBiome(defaultBiome) + .disableTrainerWaves(); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([[BiomeId.CAVE, [MysteryEncounterType.DELIBIRDY]]]), diff --git a/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts b/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts index 3feb44bbe91..470d41060fb 100644 --- a/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts +++ b/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts @@ -32,10 +32,11 @@ describe("Department Store Sale - Mystery Encounter", () => { beforeEach(async () => { game = new GameManager(phaserGame); scene = game.scene; - game.override.mysteryEncounterChance(100); - game.override.startingWave(defaultWave); - game.override.startingBiome(defaultBiome); - game.override.disableTrainerWaves(); + game.override + .mysteryEncounterChance(100) + .startingWave(defaultWave) + .startingBiome(defaultBiome) + .disableTrainerWaves(); const biomeMap = new Map([ [BiomeId.VOLCANO, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], @@ -74,8 +75,7 @@ describe("Department Store Sale - Mystery Encounter", () => { }); it("should not spawn outside of CIVILIZATION_ENCOUNTER_BIOMES", async () => { - game.override.mysteryEncounterTier(MysteryEncounterTier.COMMON); - game.override.startingBiome(BiomeId.VOLCANO); + game.override.mysteryEncounterTier(MysteryEncounterTier.COMMON).startingBiome(BiomeId.VOLCANO); await game.runToMysteryEncounter(); expect(scene.currentBattle?.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.DEPARTMENT_STORE_SALE); diff --git a/test/mystery-encounter/encounters/field-trip-encounter.test.ts b/test/mystery-encounter/encounters/field-trip-encounter.test.ts index f93de7dc955..e059827fa17 100644 --- a/test/mystery-encounter/encounters/field-trip-encounter.test.ts +++ b/test/mystery-encounter/encounters/field-trip-encounter.test.ts @@ -33,11 +33,12 @@ describe("Field Trip - Mystery Encounter", () => { beforeEach(async () => { game = new GameManager(phaserGame); scene = game.scene; - game.override.mysteryEncounterChance(100); - game.override.startingWave(defaultWave); - game.override.startingBiome(defaultBiome); - game.override.disableTrainerWaves(); - game.override.moveset([MoveId.TACKLE, MoveId.UPROAR, MoveId.SWORDS_DANCE]); + game.override + .mysteryEncounterChance(100) + .startingWave(defaultWave) + .startingBiome(defaultBiome) + .disableTrainerWaves() + .moveset([MoveId.TACKLE, MoveId.UPROAR, MoveId.SWORDS_DANCE]); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([[BiomeId.CAVE, [MysteryEncounterType.FIELD_TRIP]]]), diff --git a/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts b/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts index e0e8b3d90d6..bf5d58fdad3 100644 --- a/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts +++ b/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts @@ -40,10 +40,11 @@ describe("Fight or Flight - Mystery Encounter", () => { beforeEach(async () => { game = new GameManager(phaserGame); scene = game.scene; - game.override.mysteryEncounterChance(100); - game.override.startingWave(defaultWave); - game.override.startingBiome(defaultBiome); - game.override.disableTrainerWaves(); + game.override + .mysteryEncounterChance(100) + .startingWave(defaultWave) + .startingBiome(defaultBiome) + .disableTrainerWaves(); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([[BiomeId.CAVE, [MysteryEncounterType.FIGHT_OR_FLIGHT]]]), diff --git a/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts b/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts index e31a3a5cc3c..9f2057080f9 100644 --- a/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts +++ b/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts @@ -42,10 +42,11 @@ describe("Fun And Games! - Mystery Encounter", () => { beforeEach(async () => { game = new GameManager(phaserGame); scene = game.scene; - game.override.mysteryEncounterChance(100); - game.override.startingWave(defaultWave); - game.override.startingBiome(defaultBiome); - game.override.disableTrainerWaves(); + game.override + .mysteryEncounterChance(100) + .startingWave(defaultWave) + .startingBiome(defaultBiome) + .disableTrainerWaves(); const biomeMap = new Map([ [BiomeId.VOLCANO, [MysteryEncounterType.FIGHT_OR_FLIGHT]], @@ -81,8 +82,7 @@ describe("Fun And Games! - Mystery Encounter", () => { }); it("should not spawn outside of CIVILIZATIONN biomes", async () => { - game.override.mysteryEncounterTier(MysteryEncounterTier.GREAT); - game.override.startingBiome(BiomeId.VOLCANO); + game.override.mysteryEncounterTier(MysteryEncounterTier.GREAT).startingBiome(BiomeId.VOLCANO); await game.runToMysteryEncounter(); expect(scene.currentBattle?.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.FUN_AND_GAMES); diff --git a/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts b/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts index 0aa1886b8e1..02ffc56fb2e 100644 --- a/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts +++ b/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts @@ -37,10 +37,11 @@ describe("Global Trade System - Mystery Encounter", () => { beforeEach(async () => { game = new GameManager(phaserGame); scene = game.scene; - game.override.mysteryEncounterChance(100); - game.override.startingWave(defaultWave); - game.override.startingBiome(defaultBiome); - game.override.disableTrainerWaves(); + game.override + .mysteryEncounterChance(100) + .startingWave(defaultWave) + .startingBiome(defaultBiome) + .disableTrainerWaves(); const biomeMap = new Map([ [BiomeId.VOLCANO, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], @@ -85,8 +86,7 @@ describe("Global Trade System - Mystery Encounter", () => { }); it("should not spawn outside of CIVILIZATION_ENCOUNTER_BIOMES", async () => { - game.override.mysteryEncounterTier(MysteryEncounterTier.COMMON); - game.override.startingBiome(BiomeId.VOLCANO); + game.override.mysteryEncounterTier(MysteryEncounterTier.COMMON).startingBiome(BiomeId.VOLCANO); await game.runToMysteryEncounter(); expect(scene.currentBattle?.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.GLOBAL_TRADE_SYSTEM); diff --git a/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts b/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts index 8f041a14002..971cd938925 100644 --- a/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts +++ b/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts @@ -34,10 +34,11 @@ describe("Lost at Sea - Mystery Encounter", () => { beforeEach(async () => { game = new GameManager(phaserGame); scene = game.scene; - game.override.mysteryEncounterChance(100); - game.override.startingWave(defaultWave); - game.override.startingBiome(defaultBiome); - game.override.disableTrainerWaves(); + game.override + .mysteryEncounterChance(100) + .startingWave(defaultWave) + .startingBiome(defaultBiome) + .disableTrainerWaves(); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([ @@ -67,8 +68,7 @@ describe("Lost at Sea - Mystery Encounter", () => { }); it("should not spawn outside of sea biome", async () => { - game.override.mysteryEncounterTier(MysteryEncounterTier.COMMON); - game.override.startingBiome(BiomeId.MOUNTAIN); + game.override.mysteryEncounterTier(MysteryEncounterTier.COMMON).startingBiome(BiomeId.MOUNTAIN); await game.runToMysteryEncounter(); expect(game.scene.currentBattle.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.LOST_AT_SEA); diff --git a/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts b/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts index 9c5660cb25c..04b611e1143 100644 --- a/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts +++ b/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts @@ -43,10 +43,11 @@ describe("Mysterious Challengers - Mystery Encounter", () => { beforeEach(async () => { game = new GameManager(phaserGame); scene = game.scene; - game.override.mysteryEncounterChance(100); - game.override.startingWave(defaultWave); - game.override.startingBiome(defaultBiome); - game.override.disableTrainerWaves(); + game.override + .mysteryEncounterChance(100) + .startingWave(defaultWave) + .startingBiome(defaultBiome) + .disableTrainerWaves(); const biomeMap = new Map([ [BiomeId.VOLCANO, [MysteryEncounterType.FIGHT_OR_FLIGHT]], @@ -79,8 +80,7 @@ describe("Mysterious Challengers - Mystery Encounter", () => { }); it("should not spawn outside of HUMAN_TRANSITABLE_BIOMES", async () => { - game.override.mysteryEncounterTier(MysteryEncounterTier.GREAT); - game.override.startingBiome(BiomeId.VOLCANO); + game.override.mysteryEncounterTier(MysteryEncounterTier.GREAT).startingBiome(BiomeId.VOLCANO); await game.runToMysteryEncounter(); expect(scene.currentBattle?.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.MYSTERIOUS_CHALLENGERS); diff --git a/test/mystery-encounter/encounters/part-timer-encounter.test.ts b/test/mystery-encounter/encounters/part-timer-encounter.test.ts index be985ea0593..4436f2e19fe 100644 --- a/test/mystery-encounter/encounters/part-timer-encounter.test.ts +++ b/test/mystery-encounter/encounters/part-timer-encounter.test.ts @@ -36,10 +36,11 @@ describe("Part-Timer - Mystery Encounter", () => { beforeEach(async () => { game = new GameManager(phaserGame); scene = game.scene; - game.override.mysteryEncounterChance(100); - game.override.startingWave(defaultWave); - game.override.startingBiome(defaultBiome); - game.override.disableTrainerWaves(); + game.override + .mysteryEncounterChance(100) + .startingWave(defaultWave) + .startingBiome(defaultBiome) + .disableTrainerWaves(); const biomeMap = new Map([ [BiomeId.VOLCANO, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], @@ -76,8 +77,7 @@ describe("Part-Timer - Mystery Encounter", () => { }); it("should not spawn outside of CIVILIZATION_ENCOUNTER_BIOMES", async () => { - game.override.mysteryEncounterTier(MysteryEncounterTier.COMMON); - game.override.startingBiome(BiomeId.VOLCANO); + game.override.mysteryEncounterTier(MysteryEncounterTier.COMMON).startingBiome(BiomeId.VOLCANO); await game.runToMysteryEncounter(); expect(scene.currentBattle?.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.PART_TIMER); diff --git a/test/mystery-encounter/encounters/safari-zone.test.ts b/test/mystery-encounter/encounters/safari-zone.test.ts index dcaf25dd512..a086272c721 100644 --- a/test/mystery-encounter/encounters/safari-zone.test.ts +++ b/test/mystery-encounter/encounters/safari-zone.test.ts @@ -38,10 +38,11 @@ describe("Safari Zone - Mystery Encounter", () => { beforeEach(async () => { game = new GameManager(phaserGame); scene = game.scene; - game.override.mysteryEncounterChance(100); - game.override.startingWave(defaultWave); - game.override.startingBiome(defaultBiome); - game.override.disableTrainerWaves(); + game.override + .mysteryEncounterChance(100) + .startingWave(defaultWave) + .startingBiome(defaultBiome) + .disableTrainerWaves(); const biomeMap = new Map([ [BiomeId.VOLCANO, [MysteryEncounterType.FIGHT_OR_FLIGHT]], @@ -72,8 +73,7 @@ describe("Safari Zone - Mystery Encounter", () => { }); it("should not spawn outside of the forest, swamp, or jungle biomes", async () => { - game.override.mysteryEncounterTier(MysteryEncounterTier.GREAT); - game.override.startingBiome(BiomeId.VOLCANO); + game.override.mysteryEncounterTier(MysteryEncounterTier.GREAT).startingBiome(BiomeId.VOLCANO); await game.runToMysteryEncounter(); expect(scene.currentBattle?.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.SAFARI_ZONE); diff --git a/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts b/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts index 6c8daed998c..12398049abd 100644 --- a/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts +++ b/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts @@ -82,8 +82,7 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { }); it("should run in waves that are X1", async () => { - game.override.startingWave(11); - game.override.mysteryEncounterTier(MysteryEncounterTier.COMMON); + game.override.startingWave(11).mysteryEncounterTier(MysteryEncounterTier.COMMON); await game.runToMysteryEncounter(); @@ -91,8 +90,7 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { }); it("should run in waves that are X2", async () => { - game.override.startingWave(32); - game.override.mysteryEncounterTier(MysteryEncounterTier.COMMON); + game.override.startingWave(32).mysteryEncounterTier(MysteryEncounterTier.COMMON); await game.runToMysteryEncounter(); @@ -100,8 +98,7 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { }); it("should run in waves that are X3", async () => { - game.override.startingWave(23); - game.override.mysteryEncounterTier(MysteryEncounterTier.COMMON); + game.override.startingWave(23).mysteryEncounterTier(MysteryEncounterTier.COMMON); await game.runToMysteryEncounter(); diff --git a/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts b/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts index 0d5f67b8815..ed6d1c5bc4f 100644 --- a/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts @@ -40,10 +40,11 @@ describe("The Expert Pokémon Breeder - Mystery Encounter", () => { beforeEach(async () => { game = new GameManager(phaserGame); scene = game.scene; - game.override.mysteryEncounterChance(100); - game.override.startingWave(defaultWave); - game.override.startingBiome(defaultBiome); - game.override.disableTrainerWaves(); + game.override + .mysteryEncounterChance(100) + .startingWave(defaultWave) + .startingBiome(defaultBiome) + .disableTrainerWaves(); const biomeMap = new Map([ [BiomeId.VOLCANO, [MysteryEncounterType.FIGHT_OR_FLIGHT]], @@ -84,8 +85,7 @@ describe("The Expert Pokémon Breeder - Mystery Encounter", () => { }); it("should not spawn outside of HUMAN_TRANSITABLE_BIOMES", async () => { - game.override.mysteryEncounterTier(MysteryEncounterTier.GREAT); - game.override.startingBiome(BiomeId.VOLCANO); + game.override.mysteryEncounterTier(MysteryEncounterTier.GREAT).startingBiome(BiomeId.VOLCANO); await game.runToMysteryEncounter(); expect(scene.currentBattle?.mysteryEncounter?.encounterType).not.toBe( diff --git a/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts b/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts index 13d7c2502a6..ee2d7d8039b 100644 --- a/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts @@ -38,10 +38,11 @@ describe("The Pokemon Salesman - Mystery Encounter", () => { beforeEach(async () => { game = new GameManager(phaserGame); scene = game.scene; - game.override.mysteryEncounterChance(100); - game.override.startingWave(defaultWave); - game.override.startingBiome(defaultBiome); - game.override.disableTrainerWaves(); + game.override + .mysteryEncounterChance(100) + .startingWave(defaultWave) + .startingBiome(defaultBiome) + .disableTrainerWaves(); const biomeMap = new Map([ [BiomeId.VOLCANO, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], @@ -78,8 +79,7 @@ describe("The Pokemon Salesman - Mystery Encounter", () => { }); it("should not spawn outside of HUMAN_TRANSITABLE_BIOMES", async () => { - game.override.mysteryEncounterTier(MysteryEncounterTier.ULTRA); - game.override.startingBiome(BiomeId.VOLCANO); + game.override.mysteryEncounterTier(MysteryEncounterTier.ULTRA).startingBiome(BiomeId.VOLCANO); await game.runToMysteryEncounter(); expect(scene.currentBattle?.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.THE_POKEMON_SALESMAN); diff --git a/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts b/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts index 5926c1ed2e7..5f7c0f5a0fd 100644 --- a/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts @@ -83,8 +83,7 @@ describe("The Strong Stuff - Mystery Encounter", () => { }); it("should not spawn outside of CAVE biome", async () => { - game.override.mysteryEncounterTier(MysteryEncounterTier.COMMON); - game.override.startingBiome(BiomeId.MOUNTAIN); + game.override.mysteryEncounterTier(MysteryEncounterTier.COMMON).startingBiome(BiomeId.MOUNTAIN); await game.runToMysteryEncounter(); expect(scene.currentBattle?.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.THE_STRONG_STUFF); diff --git a/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts b/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts index 87a3852615d..72f76358398 100644 --- a/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts @@ -44,10 +44,11 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { beforeEach(async () => { game = new GameManager(phaserGame); scene = game.scene; - game.override.mysteryEncounterChance(100); - game.override.startingWave(defaultWave); - game.override.startingBiome(defaultBiome); - game.override.disableTrainerWaves(); + game.override + .mysteryEncounterChance(100) + .startingWave(defaultWave) + .startingBiome(defaultBiome) + .disableTrainerWaves(); const biomeMap = new Map([ [BiomeId.VOLCANO, [MysteryEncounterType.FIGHT_OR_FLIGHT]], @@ -86,8 +87,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { }); it("should not spawn outside of HUMAN_TRANSITABLE_BIOMES", async () => { - game.override.mysteryEncounterTier(MysteryEncounterTier.GREAT); - game.override.startingBiome(BiomeId.VOLCANO); + game.override.mysteryEncounterTier(MysteryEncounterTier.GREAT).startingBiome(BiomeId.VOLCANO); await game.runToMysteryEncounter(); expect(scene.currentBattle?.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.THE_WINSTRATE_CHALLENGE); diff --git a/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts b/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts index 2014cb215a4..6e2da14dffc 100644 --- a/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts +++ b/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts @@ -51,10 +51,11 @@ describe("Trash to Treasure - Mystery Encounter", () => { beforeEach(async () => { game = new GameManager(phaserGame); scene = game.scene; - game.override.mysteryEncounterChance(100); - game.override.startingWave(defaultWave); - game.override.startingBiome(defaultBiome); - game.override.disableTrainerWaves(); + game.override + .mysteryEncounterChance(100) + .startingWave(defaultWave) + .startingBiome(defaultBiome) + .disableTrainerWaves(); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([[BiomeId.CAVE, [MysteryEncounterType.TRASH_TO_TREASURE]]]), diff --git a/test/mystery-encounter/encounters/weird-dream-encounter.test.ts b/test/mystery-encounter/encounters/weird-dream-encounter.test.ts index dc5c53a75e7..27d41ec66cb 100644 --- a/test/mystery-encounter/encounters/weird-dream-encounter.test.ts +++ b/test/mystery-encounter/encounters/weird-dream-encounter.test.ts @@ -38,10 +38,11 @@ describe("Weird Dream - Mystery Encounter", () => { beforeEach(async () => { game = new GameManager(phaserGame); scene = game.scene; - game.override.mysteryEncounterChance(100); - game.override.startingWave(defaultWave); - game.override.startingBiome(defaultBiome); - game.override.disableTrainerWaves(); + game.override + .mysteryEncounterChance(100) + .startingWave(defaultWave) + .startingBiome(defaultBiome) + .disableTrainerWaves(); vi.spyOn(EncounterTransformationSequence, "doPokemonTransformationSequence").mockImplementation( () => new Promise(resolve => resolve()), ); diff --git a/test/mystery-encounter/mystery-encounter-utils.test.ts b/test/mystery-encounter/mystery-encounter-utils.test.ts index 80e2fb77f2b..f327d8f9e9c 100644 --- a/test/mystery-encounter/mystery-encounter-utils.test.ts +++ b/test/mystery-encounter/mystery-encounter-utils.test.ts @@ -250,6 +250,7 @@ describe("Mystery Encounter Utils", () => { it("gets species of specified types", () => { // Only 9 tiers are: Kyogre, Groudon, Rayquaza, Arceus, Zacian, Koraidon, Miraidon, Terapagos + // TODO: This has to be changed const result = getRandomSpeciesByStarterCost(9, undefined, [PokemonType.GROUND]); const pokeSpecies = getPokemonSpecies(result); expect(pokeSpecies.speciesId).toBe(SpeciesId.GROUDON); diff --git a/test/mystery-encounter/mystery-encounter.test.ts b/test/mystery-encounter/mystery-encounter.test.ts index 1f1d0f5826e..be1f153f8b1 100644 --- a/test/mystery-encounter/mystery-encounter.test.ts +++ b/test/mystery-encounter/mystery-encounter.test.ts @@ -24,8 +24,7 @@ describe("Mystery Encounters", () => { beforeEach(() => { game = new GameManager(phaserGame); scene = game.scene; - game.override.startingWave(11); - game.override.mysteryEncounterChance(100); + game.override.startingWave(11).mysteryEncounterChance(100); }); it("Spawns a mystery encounter", async () => { diff --git a/test/phases/mystery-encounter-phase.test.ts b/test/phases/mystery-encounter-phase.test.ts index d078c2398b4..b17682d6c74 100644 --- a/test/phases/mystery-encounter-phase.test.ts +++ b/test/phases/mystery-encounter-phase.test.ts @@ -27,10 +27,7 @@ describe("Mystery Encounter Phases", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.startingWave(11); - game.override.mysteryEncounterChance(100); - // Seed guarantees wild encounter to be replaced by ME - game.override.seed("test"); + game.override.startingWave(11).mysteryEncounterChance(100).seed("test"); // Seed guarantees wild encounter to be replaced by ME }); describe("MysteryEncounterPhase", () => { diff --git a/test/testUtils/helpers/moveHelper.ts b/test/testUtils/helpers/moveHelper.ts index 0f87fa9a4c1..d8c79c3bca8 100644 --- a/test/testUtils/helpers/moveHelper.ts +++ b/test/testUtils/helpers/moveHelper.ts @@ -21,6 +21,7 @@ export class MoveHelper extends GameManagerHelper { /** * Intercepts {@linkcode MoveEffectPhase} and mocks the phase's move's * accuracy to -1, guaranteeing a hit. + * @returns A promise that resolves once the next MoveEffectPhase has been reached (not run). */ public async forceHit(): Promise { await this.game.phaseInterceptor.to(MoveEffectPhase, false); @@ -31,7 +32,8 @@ export class MoveHelper extends GameManagerHelper { /** * Intercepts {@linkcode MoveEffectPhase} and mocks the phase's move's accuracy * to 0, guaranteeing a miss. - * @param firstTargetOnly - Whether the move should force miss on the first target only, in the case of multi-target moves. + * @param firstTargetOnly - Whether to only force a miss on the first target hit; default `false`. + * @returns A promise that resolves once the next MoveEffectPhase has been reached (not run). */ public async forceMiss(firstTargetOnly = false): Promise { await this.game.phaseInterceptor.to(MoveEffectPhase, false); diff --git a/test/ui/pokedex.test.ts b/test/ui/pokedex.test.ts index 573ce3fef89..53ebe04a4ed 100644 --- a/test/ui/pokedex.test.ts +++ b/test/ui/pokedex.test.ts @@ -502,13 +502,13 @@ describe("UI - Pokedex", () => { // Nab the pokemon that is selected for comparison later. // @ts-expect-error - `lastSpecies` is private - const selectedPokemon = pokedexHandler.lastSpecies.speciesId; + const selectedPokemon = pokedexHandler.lastSpeciesId.speciesId; for (let i = 0; i < 11; i++) { pokedexHandler.processInput(Button.DOWN); } // @ts-expect-error `lastSpecies` is private - expect(selectedPokemon).toEqual(pokedexHandler.lastSpecies.speciesId); + expect(selectedPokemon).toEqual(pokedexHandler.lastSpeciesId.speciesId); }, ); diff --git a/test/ui/transfer-item.test.ts b/test/ui/transfer-item.test.ts index b08c9823dcd..ef0fe502c6e 100644 --- a/test/ui/transfer-item.test.ts +++ b/test/ui/transfer-item.test.ts @@ -26,17 +26,18 @@ describe("UI - Transfer Items", () => { beforeEach(async () => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.startingLevel(100); - game.override.startingWave(1); - game.override.startingHeldItems([ - { name: "BERRY", count: 1, type: BerryType.SITRUS }, - { name: "BERRY", count: 2, type: BerryType.APICOT }, - { name: "BERRY", count: 2, type: BerryType.LUM }, - ]); - game.override.moveset([MoveId.DRAGON_CLAW]); - game.override.enemySpecies(SpeciesId.MAGIKARP); - game.override.enemyMoveset([MoveId.SPLASH]); + game.override + .battleStyle("single") + .startingLevel(100) + .startingWave(1) + .startingHeldItems([ + { name: "BERRY", count: 1, type: BerryType.SITRUS }, + { name: "BERRY", count: 2, type: BerryType.APICOT }, + { name: "BERRY", count: 2, type: BerryType.LUM }, + ]) + .moveset([MoveId.DRAGON_CLAW]) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyMoveset([MoveId.SPLASH]); await game.classicMode.startBattle([SpeciesId.RAYQUAZA, SpeciesId.RAYQUAZA, SpeciesId.RAYQUAZA]); From 0918985a63cc8795bc9a45d8ceacdfaca5f12ee7 Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Sun, 15 Jun 2025 03:48:16 -0400 Subject: [PATCH 245/262] [Test] Remove unneeded `mockRestore` and `testTimeout` calls in tests https://github.com/pagefaultgames/pokerogue/pull/5927/ * Removed unnecessary test timeout parameters from test files We set it in vitest config anyways * Removed unneeded `mockRestore` calls We call `restoreAllMocks` after each test runs anyhow * Removed accidentall forgotten-about timeout * Revdrt magic bounce test file for now * Fixed ting * Fixed bug * Fixed import * Update test/data/status_effect.test.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update battle.test.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Ran bim --------- Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- test/abilities/ability_timing.test.ts | 2 +- test/abilities/beast_boost.test.ts | 6 +-- test/abilities/contrary.test.ts | 2 +- test/abilities/flash_fire.test.ts | 14 +++---- test/abilities/flower_veil.test.ts | 1 - test/abilities/healer.test.ts | 23 ++++------ test/abilities/intimidate.test.ts | 8 ++-- test/abilities/intrepid_sword.test.ts | 2 +- test/abilities/moxie.test.ts | 2 +- test/abilities/mycelium_might.test.ts | 6 +-- test/abilities/quick_draw.test.ts | 8 ++-- test/abilities/sand_spit.test.ts | 4 +- test/abilities/sheer_force.test.ts | 2 +- test/abilities/simple.test.ts | 2 +- test/abilities/stall.test.ts | 6 +-- test/abilities/super_luck.test.ts | 8 ++-- test/abilities/tera_shell.test.ts | 3 -- test/battle/battle-order.test.ts | 22 +++++----- test/battle/battle.test.ts | 42 ++++++++++--------- test/battle/double_battle.test.ts | 2 +- test/battle/special_battle.test.ts | 38 ++++++++--------- test/data/status_effect.test.ts | 6 +-- test/eggs/egg.test.ts | 1 - test/eggs/manaphy-egg.test.ts | 1 - test/escape-calculations.test.ts | 8 ++-- test/game-mode.test.ts | 2 - test/items/dire_hit.test.ts | 6 +-- test/items/exp_booster.test.ts | 2 +- test/items/leek.test.ts | 12 +++--- test/items/leftovers.test.ts | 2 +- test/items/light_ball.test.ts | 8 ++-- test/items/lock_capsule.test.ts | 2 +- test/items/metal_powder.test.ts | 8 ++-- test/items/scope_lens.test.ts | 4 +- test/items/temp_stat_stage_booster.test.ts | 10 ++--- test/moves/baton_pass.test.ts | 6 +-- test/moves/disable.test.ts | 12 +++--- test/moves/dynamax_cannon.test.ts | 16 +++---- test/moves/fusion_bolt.test.ts | 2 +- test/moves/fusion_flare_bolt.test.ts | 14 +++---- test/moves/gigaton_hammer.test.ts | 4 +- test/moves/growth.test.ts | 2 +- test/moves/guard_split.test.ts | 4 +- test/moves/magnet_rise.test.ts | 4 +- test/moves/power_split.test.ts | 4 +- test/moves/speed_swap.test.ts | 2 +- test/moves/spikes.test.ts | 8 ++-- test/moves/struggle.test.ts | 5 --- test/moves/tackle.test.ts | 4 +- test/moves/tail_whip.test.ts | 2 +- test/moves/tera_blast.test.ts | 2 +- test/moves/tidy_up.test.ts | 12 +++--- test/moves/u_turn.test.ts | 6 +-- .../a-trainers-test-encounter.test.ts | 2 - .../absolute-avarice-encounter.test.ts | 2 - ...an-offer-you-cant-refuse-encounter.test.ts | 2 - .../berries-abound-encounter.test.ts | 2 - .../bug-type-superfan-encounter.test.ts | 2 - .../clowning-around-encounter.test.ts | 2 - .../dancing-lessons-encounter.test.ts | 2 - .../encounters/delibirdy-encounter.test.ts | 2 - .../department-store-sale-encounter.test.ts | 2 - .../encounters/field-trip-encounter.test.ts | 2 - .../fiery-fallout-encounter.test.ts | 2 - .../fight-or-flight-encounter.test.ts | 2 - .../fun-and-games-encounter.test.ts | 2 - .../global-trade-system-encounter.test.ts | 2 - .../encounters/lost-at-sea-encounter.test.ts | 2 - .../mysterious-challengers-encounter.test.ts | 2 - .../encounters/part-timer-encounter.test.ts | 2 - .../encounters/safari-zone.test.ts | 2 - .../teleporting-hijinks-encounter.test.ts | 2 - .../the-expert-breeder-encounter.test.ts | 2 - .../the-pokemon-salesman-encounter.test.ts | 2 - .../the-strong-stuff-encounter.test.ts | 2 - .../the-winstrate-challenge-encounter.test.ts | 4 +- .../trash-to-treasure-encounter.test.ts | 2 - .../uncommon-breed-encounter.test.ts | 2 - .../encounters/weird-dream-encounter.test.ts | 2 - test/phases/phases.test.ts | 2 +- test/phases/select-modifier-phase.test.ts | 2 - test/reload.test.ts | 16 +++---- test/ui/pokedex.test.ts | 14 +++---- test/ui/starter-select.test.ts | 18 ++++---- test/ui/transfer-item.test.ts | 4 +- 85 files changed, 207 insertions(+), 287 deletions(-) diff --git a/test/abilities/ability_timing.test.ts b/test/abilities/ability_timing.test.ts index 2ba1e821f8a..124591597be 100644 --- a/test/abilities/ability_timing.test.ts +++ b/test/abilities/ability_timing.test.ts @@ -50,5 +50,5 @@ describe("Ability Timing", () => { await game.phaseInterceptor.to("MessagePhase"); expect(i18next.t).toHaveBeenCalledWith("battle:statFell", expect.objectContaining({ count: 1 })); - }, 5000); + }); }); diff --git a/test/abilities/beast_boost.test.ts b/test/abilities/beast_boost.test.ts index 1d9eb5c5f2e..8be9156ce07 100644 --- a/test/abilities/beast_boost.test.ts +++ b/test/abilities/beast_boost.test.ts @@ -47,7 +47,7 @@ describe("Abilities - Beast Boost", () => { await game.phaseInterceptor.to("VictoryPhase"); expect(playerPokemon.getStatStage(Stat.DEF)).toBe(1); - }, 20000); + }); it("should use in-battle overriden stats when determining the stat stage to raise by 1", async () => { game.override.enemyMoveset([MoveId.GUARD_SPLIT]); @@ -66,7 +66,7 @@ describe("Abilities - Beast Boost", () => { await game.phaseInterceptor.to("VictoryPhase"); expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(1); - }, 20000); + }); it("should have order preference in case of stat ties", async () => { // Order preference follows the order of EFFECTIVE_STAT @@ -84,5 +84,5 @@ describe("Abilities - Beast Boost", () => { await game.phaseInterceptor.to("VictoryPhase"); expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(1); - }, 20000); + }); }); diff --git a/test/abilities/contrary.test.ts b/test/abilities/contrary.test.ts index 0e47862f3e8..6962abb0fec 100644 --- a/test/abilities/contrary.test.ts +++ b/test/abilities/contrary.test.ts @@ -36,7 +36,7 @@ describe("Abilities - Contrary", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(1); - }, 20000); + }); describe("With Clear Body", () => { it("should apply positive effects", async () => { diff --git a/test/abilities/flash_fire.test.ts b/test/abilities/flash_fire.test.ts index c3477388912..fe17013f49f 100644 --- a/test/abilities/flash_fire.test.ts +++ b/test/abilities/flash_fire.test.ts @@ -44,7 +44,7 @@ describe("Abilities - Flash Fire", () => { game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); expect(blissey.hp).toBe(blissey.getMaxHp()); - }, 20000); + }); it("not activate if the Pokémon is protected from the Fire-type move", async () => { game.override.enemyMoveset([MoveId.EMBER]).moveset([MoveId.PROTECT]); @@ -55,7 +55,7 @@ describe("Abilities - Flash Fire", () => { game.move.select(MoveId.PROTECT); await game.phaseInterceptor.to(TurnEndPhase); expect(blissey!.getTag(BattlerTagType.FIRE_BOOST)).toBeUndefined(); - }, 20000); + }); it("activated by Will-O-Wisp", async () => { game.override.enemyMoveset([MoveId.WILL_O_WISP]).moveset(MoveId.SPLASH); @@ -70,7 +70,7 @@ describe("Abilities - Flash Fire", () => { await game.phaseInterceptor.to(TurnEndPhase); expect(blissey!.getTag(BattlerTagType.FIRE_BOOST)).toBeDefined(); - }, 20000); + }); it("activated after being frozen", async () => { game.override.enemyMoveset([MoveId.EMBER]).moveset(MoveId.SPLASH).statusEffect(StatusEffect.FREEZE); @@ -82,7 +82,7 @@ describe("Abilities - Flash Fire", () => { await game.phaseInterceptor.to(TurnEndPhase); expect(blissey!.getTag(BattlerTagType.FIRE_BOOST)).toBeDefined(); - }, 20000); + }); it("not passing with baton pass", async () => { game.override.enemyMoveset([MoveId.EMBER]).moveset([MoveId.BATON_PASS]); @@ -98,7 +98,7 @@ describe("Abilities - Flash Fire", () => { const chansey = game.scene.getPlayerPokemon()!; expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(SpeciesId.CHANSEY); expect(chansey!.getTag(BattlerTagType.FIRE_BOOST)).toBeUndefined(); - }, 20000); + }); it("boosts Fire-type move when the ability is activated", async () => { game.override @@ -126,7 +126,7 @@ describe("Abilities - Flash Fire", () => { const flashFireDmg = initialHP - blissey.hp; expect(flashFireDmg).toBeGreaterThan(originalDmg); - }, 20000); + }); it("still activates regardless of accuracy check", async () => { game.override @@ -158,5 +158,5 @@ describe("Abilities - Flash Fire", () => { const flashFireDmg = initialHP - blissey.hp; expect(flashFireDmg).toBeGreaterThan(originalDmg); - }, 20000); + }); }); diff --git a/test/abilities/flower_veil.test.ts b/test/abilities/flower_veil.test.ts index c59d8c6eb29..d3e99185c2f 100644 --- a/test/abilities/flower_veil.test.ts +++ b/test/abilities/flower_veil.test.ts @@ -89,7 +89,6 @@ describe("Abilities - Flower Veil", () => { await game.move.selectEnemyMove(MoveId.THUNDER_WAVE); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); - vi.spyOn(allMoves[MoveId.THUNDER_WAVE], "accuracy", "get").mockClear(); }); it("should not prevent status conditions for a non-grass user and its non-grass allies", async () => { diff --git a/test/abilities/healer.test.ts b/test/abilities/healer.test.ts index 9d252523cc8..94272848e16 100644 --- a/test/abilities/healer.test.ts +++ b/test/abilities/healer.test.ts @@ -4,17 +4,15 @@ import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, it, vi, type MockInstance } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { isNullOrUndefined } from "#app/utils/common"; import { allAbilities } from "#app/data/data-lists"; import type Pokemon from "#app/field/pokemon"; -import type { PostTurnResetStatusAbAttr } from "#app/@types/ability-types"; +import { PostTurnResetStatusAbAttr } from "#app/data/abilities/ability"; describe("Abilities - Healer", () => { let phaserGame: Phaser.Game; let game: GameManager; - let healerAttrSpy: MockInstance; - let healerAttr: PostTurnResetStatusAbAttr; beforeAll(() => { phaserGame = new Phaser.Game({ @@ -24,7 +22,6 @@ describe("Abilities - Healer", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - healerAttrSpy.mockRestore(); }); beforeEach(() => { @@ -38,30 +35,28 @@ describe("Abilities - Healer", () => { .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); - healerAttr = allAbilities[AbilityId.HEALER].getAttrs("PostTurnResetStatusAbAttr")[0]; - healerAttrSpy = vi - .spyOn(healerAttr, "getCondition") - .mockReturnValue((pokemon: Pokemon) => !isNullOrUndefined(pokemon.getAlly())); + // Mock healer to have a 100% chance of healing its ally + vi.spyOn(allAbilities[AbilityId.HEALER].getAttrs("PostTurnResetStatusAbAttr")[0], "getCondition").mockReturnValue( + (pokemon: Pokemon) => !isNullOrUndefined(pokemon.getAlly()), + ); }); it("should not queue a message phase for healing if the ally has fainted", async () => { + const abSpy = vi.spyOn(PostTurnResetStatusAbAttr.prototype, "canApplyPostTurn"); game.override.moveset([MoveId.SPLASH, MoveId.LUNAR_DANCE]); await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]); + const user = game.scene.getPlayerPokemon()!; - // Only want one magikarp to have the ability. + // Only want one magikarp to have the ability vi.spyOn(user, "getAbility").mockReturnValue(allAbilities[AbilityId.HEALER]); game.move.select(MoveId.SPLASH); // faint the ally game.move.select(MoveId.LUNAR_DANCE, 1); - const abSpy = vi.spyOn(healerAttr, "canApplyPostTurn"); await game.phaseInterceptor.to("TurnEndPhase"); // It's not enough to just test that the ally still has its status. // We need to ensure that the ability failed to meet its condition expect(abSpy).toHaveReturnedWith(false); - - // Explicitly restore the mock to ensure pollution doesn't happen - abSpy.mockRestore(); }); it("should heal the status of an ally if the ally has a status", async () => { diff --git a/test/abilities/intimidate.test.ts b/test/abilities/intimidate.test.ts index cc75b257686..3dcd9bcd129 100644 --- a/test/abilities/intimidate.test.ts +++ b/test/abilities/intimidate.test.ts @@ -62,7 +62,7 @@ describe("Abilities - Intimidate", () => { expect(playerPokemon.species.speciesId).toBe(SpeciesId.POOCHYENA); expect(playerPokemon.getStatStage(Stat.ATK)).toBe(0); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(-2); - }, 20000); + }); it("should lower ATK stat stage by 1 for every enemy Pokemon in a double battle on entry", async () => { game.override.battleStyle("double").startingWave(3); @@ -85,7 +85,7 @@ describe("Abilities - Intimidate", () => { expect(enemyField[1].getStatStage(Stat.ATK)).toBe(-2); expect(playerField[0].getStatStage(Stat.ATK)).toBe(-2); expect(playerField[1].getStatStage(Stat.ATK)).toBe(-2); - }, 20000); + }); it("should not activate again if there is no switch or new entry", async () => { game.override.startingWave(2).moveset([MoveId.SPLASH]); @@ -102,7 +102,7 @@ describe("Abilities - Intimidate", () => { expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(-1); expect(playerPokemon.getStatStage(Stat.ATK)).toBe(-1); - }, 20000); + }); it("should lower ATK stat stage by 1 for every switch", async () => { game.override.moveset([MoveId.SPLASH]).enemyMoveset([MoveId.VOLT_SWITCH]).startingWave(5); @@ -129,5 +129,5 @@ describe("Abilities - Intimidate", () => { expect(playerPokemon.getStatStage(Stat.ATK)).toBe(-3); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(0); - }, 200000); + }); }); diff --git a/test/abilities/intrepid_sword.test.ts b/test/abilities/intrepid_sword.test.ts index 3a24f44a78e..d9b81e9552e 100644 --- a/test/abilities/intrepid_sword.test.ts +++ b/test/abilities/intrepid_sword.test.ts @@ -39,5 +39,5 @@ describe("Abilities - Intrepid Sword", () => { expect(playerPokemon.getStatStage(Stat.ATK)).toBe(1); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(1); - }, 20000); + }); }); diff --git a/test/abilities/moxie.test.ts b/test/abilities/moxie.test.ts index 7631a0dfd2d..a85ed081448 100644 --- a/test/abilities/moxie.test.ts +++ b/test/abilities/moxie.test.ts @@ -49,7 +49,7 @@ describe("Abilities - Moxie", () => { await game.phaseInterceptor.runFrom(EnemyCommandPhase).to(VictoryPhase); expect(playerPokemon.getStatStage(Stat.ATK)).toBe(1); - }, 20000); + }); // TODO: Activate this test when MOXIE is corrected to work on faint and not on battle victory it.todo( diff --git a/test/abilities/mycelium_might.test.ts b/test/abilities/mycelium_might.test.ts index 1f236f2c2fe..7bfb3fb7b81 100644 --- a/test/abilities/mycelium_might.test.ts +++ b/test/abilities/mycelium_might.test.ts @@ -63,7 +63,7 @@ describe("Abilities - Mycelium Might", () => { // Despite the opponent's ability (Clear Body), its ATK stat stage is still reduced. expect(enemyPokemon?.getStatStage(Stat.ATK)).toBe(-1); - }, 20000); + }); it("will still go first if a status move that is in a higher priority bracket than the opponent's move is used", async () => { game.override.enemyMoveset(MoveId.TACKLE); @@ -86,7 +86,7 @@ describe("Abilities - Mycelium Might", () => { await game.phaseInterceptor.to(TurnEndPhase); // Despite the opponent's ability (Clear Body), its ATK stat stage is still reduced. expect(enemyPokemon?.getStatStage(Stat.ATK)).toBe(-1); - }, 20000); + }); it("will not affect non-status moves", async () => { await game.classicMode.startBattle([SpeciesId.REGIELEKI]); @@ -105,5 +105,5 @@ describe("Abilities - Mycelium Might", () => { // This means that the commandOrder should be identical to the speedOrder expect(speedOrder).toEqual([playerIndex, enemyIndex]); expect(commandOrder).toEqual([playerIndex, enemyIndex]); - }, 20000); + }); }); diff --git a/test/abilities/quick_draw.test.ts b/test/abilities/quick_draw.test.ts index 02c2ff86a56..11418f31375 100644 --- a/test/abilities/quick_draw.test.ts +++ b/test/abilities/quick_draw.test.ts @@ -54,8 +54,8 @@ describe("Abilities - Quick Draw", () => { expect(pokemon.isFainted()).toBe(false); expect(enemy.isFainted()).toBe(true); - expect(pokemon.waveData.abilitiesApplied).contain(AbilityId.QUICK_DRAW); - }, 20000); + expect(pokemon.waveData.abilitiesApplied).toContain(AbilityId.QUICK_DRAW); + }); test( "does not triggered by non damage moves", @@ -96,6 +96,6 @@ describe("Abilities - Quick Draw", () => { expect(pokemon.isFainted()).toBe(true); expect(enemy.isFainted()).toBe(false); - expect(pokemon.waveData.abilitiesApplied).contain(AbilityId.QUICK_DRAW); - }, 20000); + expect(pokemon.waveData.abilitiesApplied).toContain(AbilityId.QUICK_DRAW); + }); }); diff --git a/test/abilities/sand_spit.test.ts b/test/abilities/sand_spit.test.ts index 9be23e7f7c2..62d5d782fc5 100644 --- a/test/abilities/sand_spit.test.ts +++ b/test/abilities/sand_spit.test.ts @@ -40,7 +40,7 @@ describe("Abilities - Sand Spit", () => { await game.toNextTurn(); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SANDSTORM); - }, 20000); + }); it("should trigger even when fainting", async () => { game.override.enemyMoveset([MoveId.TACKLE]).enemyLevel(100).startingLevel(1); @@ -61,5 +61,5 @@ describe("Abilities - Sand Spit", () => { await game.toNextTurn(); expect(game.scene.arena.weather?.weatherType).not.toBe(WeatherType.SANDSTORM); - }, 20000); + }); }); diff --git a/test/abilities/sheer_force.test.ts b/test/abilities/sheer_force.test.ts index 922025d8be2..b597afd8293 100644 --- a/test/abilities/sheer_force.test.ts +++ b/test/abilities/sheer_force.test.ts @@ -69,7 +69,7 @@ describe("Abilities - Sheer Force", () => { await game.phaseInterceptor.to("BerryPhase", false); expect(bindMove.calculateBattlePower).toHaveLastReturnedWith(bindMove.power); - }, 20000); + }); it("Sheer Force does not boost the base damage of moves with no secondary effect", async () => { game.override.moveset([MoveId.TACKLE]); diff --git a/test/abilities/simple.test.ts b/test/abilities/simple.test.ts index 9df70848f70..703f8fcffac 100644 --- a/test/abilities/simple.test.ts +++ b/test/abilities/simple.test.ts @@ -36,5 +36,5 @@ describe("Abilities - Simple", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(-2); - }, 20000); + }); }); diff --git a/test/abilities/stall.test.ts b/test/abilities/stall.test.ts index df40bed3e90..74fd2f67f83 100644 --- a/test/abilities/stall.test.ts +++ b/test/abilities/stall.test.ts @@ -53,7 +53,7 @@ describe("Abilities - Stall", () => { // The opponent Pokemon (with Stall) goes last despite having higher speed than the player Pokemon. expect(speedOrder).toEqual([enemyIndex, playerIndex]); expect(commandOrder).toEqual([playerIndex, enemyIndex]); - }, 20000); + }); it("Pokemon with Stall will go first if a move that is in a higher priority bracket than the opponent's move is used", async () => { await game.classicMode.startBattle([SpeciesId.SHUCKLE]); @@ -71,7 +71,7 @@ describe("Abilities - Stall", () => { // The player Pokemon goes second because its move is in a lower priority bracket. expect(speedOrder).toEqual([enemyIndex, playerIndex]); expect(commandOrder).toEqual([enemyIndex, playerIndex]); - }, 20000); + }); it("If both Pokemon have stall and use the same move, speed is used to determine who goes first.", async () => { game.override.ability(AbilityId.STALL); @@ -91,5 +91,5 @@ describe("Abilities - Stall", () => { // The player Pokemon (with Stall) goes second because its speed is lower. expect(speedOrder).toEqual([enemyIndex, playerIndex]); expect(commandOrder).toEqual([enemyIndex, playerIndex]); - }, 20000); + }); }); diff --git a/test/abilities/super_luck.test.ts b/test/abilities/super_luck.test.ts index e94a4cf21f0..60ed2534fe9 100644 --- a/test/abilities/super_luck.test.ts +++ b/test/abilities/super_luck.test.ts @@ -30,13 +30,13 @@ describe("Abilities - Super Luck", () => { .enemyMoveset(MoveId.SPLASH); }); - it("should increase the crit stage of a user by 1", async () => { + it("should increase the user's crit stage by 1", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); const enemy = game.scene.getEnemyPokemon()!; - const fn = vi.spyOn(enemy, "getCritStage"); + const critSpy = vi.spyOn(enemy, "getCritStage"); // crit stage is called on enemy + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("BerryPhase"); - expect(fn).toHaveReturnedWith(1); - fn.mockRestore(); + expect(critSpy).toHaveReturnedWith(1); }); }); diff --git a/test/abilities/tera_shell.test.ts b/test/abilities/tera_shell.test.ts index 26babca240d..a52a01862ff 100644 --- a/test/abilities/tera_shell.test.ts +++ b/test/abilities/tera_shell.test.ts @@ -93,8 +93,6 @@ describe("Abilities - Tera Shell", () => { await game.phaseInterceptor.to("BerryPhase", false); expect(spy).toHaveLastReturnedWith(1); expect(playerPokemon.hp).toBe(playerPokemon.getMaxHp() - 40); - - spy.mockRestore(); }); it("should change the effectiveness of all strikes of a multi-strike move", async () => { @@ -114,6 +112,5 @@ describe("Abilities - Tera Shell", () => { expect(spy).toHaveLastReturnedWith(0.5); } expect(spy).toHaveReturnedTimes(2); - spy.mockRestore(); }); }); diff --git a/test/battle/battle-order.test.ts b/test/battle/battle-order.test.ts index c969e1767a3..114592c8c8e 100644 --- a/test/battle/battle-order.test.ts +++ b/test/battle/battle-order.test.ts @@ -49,7 +49,7 @@ describe("Battle order", () => { const order = phase.getCommandOrder(); expect(order[0]).toBe(enemyPokemonIndex); expect(order[1]).toBe(playerPokemonIndex); - }, 20000); + }); it("Player faster than opponent 150 vs 50", async () => { await game.classicMode.startBattle([SpeciesId.BULBASAUR]); @@ -68,7 +68,7 @@ describe("Battle order", () => { const order = phase.getCommandOrder(); expect(order[0]).toBe(playerPokemonIndex); expect(order[1]).toBe(enemyPokemonIndex); - }, 20000); + }); it("double - both opponents faster than player 50/50 vs 150/150", async () => { game.override.battleStyle("double"); @@ -92,7 +92,7 @@ describe("Battle order", () => { expect(order.slice(0, 2).includes(enemyIndices[1])).toBe(true); expect(order.slice(2, 4).includes(playerIndices[0])).toBe(true); expect(order.slice(2, 4).includes(playerIndices[1])).toBe(true); - }, 20000); + }); it("double - speed tie except 1 - 100/100 vs 100/150", async () => { game.override.battleStyle("double"); @@ -112,11 +112,10 @@ describe("Battle order", () => { const phase = game.scene.phaseManager.getCurrentPhase() as TurnStartPhase; const order = phase.getCommandOrder(); + // enemy 2 should be first, followed by some other assortment of the other 3 pokemon expect(order[0]).toBe(enemyIndices[1]); - expect(order.slice(1, 4).includes(enemyIndices[0])).toBe(true); - expect(order.slice(1, 4).includes(playerIndices[0])).toBe(true); - expect(order.slice(1, 4).includes(playerIndices[1])).toBe(true); - }, 20000); + expect(order.slice(1, 4)).toEqual(expect.arrayContaining([enemyIndices[0], ...playerIndices])); + }); it("double - speed tie 100/150 vs 100/150", async () => { game.override.battleStyle("double"); @@ -137,9 +136,8 @@ describe("Battle order", () => { const phase = game.scene.phaseManager.getCurrentPhase() as TurnStartPhase; const order = phase.getCommandOrder(); - expect(order.slice(0, 2).includes(playerIndices[1])).toBe(true); - expect(order.slice(0, 2).includes(enemyIndices[1])).toBe(true); - expect(order.slice(2, 4).includes(playerIndices[0])).toBe(true); - expect(order.slice(2, 4).includes(enemyIndices[0])).toBe(true); - }, 20000); + // P2/E2 should be randomly first/second, then P1/E1 randomly 3rd/4th + expect(order.slice(0, 2)).toStrictEqual(expect.arrayContaining([playerIndices[1], enemyIndices[1]])); + expect(order.slice(2, 4)).toStrictEqual(expect.arrayContaining([playerIndices[0], enemyIndices[0]])); + }); }); diff --git a/test/battle/battle.test.ts b/test/battle/battle.test.ts index 60e09607ffe..a71dca111e3 100644 --- a/test/battle/battle.test.ts +++ b/test/battle/battle.test.ts @@ -60,7 +60,7 @@ describe("Test Battle Phase", () => { expect(game.scene.ui?.getMode()).toBe(UiMode.TITLE); expect(game.scene.gameData.gender).toBe(PlayerGender.MALE); - }, 20000); + }); it("test phase interceptor with prompt with preparation for a future prompt", async () => { await game.phaseInterceptor.run(LoginPhase); @@ -81,20 +81,20 @@ describe("Test Battle Phase", () => { expect(game.scene.ui?.getMode()).toBe(UiMode.TITLE); expect(game.scene.gameData.gender).toBe(PlayerGender.MALE); - }, 20000); + }); it("newGame one-liner", async () => { await game.classicMode.startBattle(); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); - }, 20000); + expect(game.scene.phaseManager.getCurrentPhase()?.phaseName).toBe("CommandPhase"); + }); it("do attack wave 3 - single battle - regular - OHKO", async () => { - game.override.enemySpecies(SpeciesId.RATTATA).startingLevel(2000).battleStyle("single"); + game.override.enemySpecies(SpeciesId.RATTATA).startingLevel(2000).battleStyle("single").startingWave(3); await game.classicMode.startBattle([SpeciesId.MEWTWO]); game.move.use(MoveId.TACKLE); await game.phaseInterceptor.to("SelectModifierPhase"); - }, 20000); + }); it("do attack wave 3 - single battle - regular - NO OHKO with opponent using non damage attack", async () => { game.override @@ -108,7 +108,7 @@ describe("Test Battle Phase", () => { await game.classicMode.startBattle([SpeciesId.MEWTWO]); game.move.select(MoveId.TACKLE); await game.phaseInterceptor.runFrom(EnemyCommandPhase).to(TurnInitPhase, false); - }, 20000); + }); it("load 100% data file", async () => { await game.importData("./test/testUtils/saves/everything.prsv"); @@ -117,14 +117,16 @@ describe("Test Battle Phase", () => { return species.caughtAttr !== 0n; }).length; expect(caughtCount).toBe(Object.keys(allSpecies).length); - }, 20000); + }); it("start battle with selected team", async () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.CHANSEY, SpeciesId.MEW]); - expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(SpeciesId.CHARIZARD); - expect(game.scene.getPlayerParty()[1].species.speciesId).toBe(SpeciesId.CHANSEY); - expect(game.scene.getPlayerParty()[2].species.speciesId).toBe(SpeciesId.MEW); - }, 20000); + expect(game.scene.getPlayerParty().map(p => p.species.speciesId)).toEqual([ + SpeciesId.CHARIZARD, + SpeciesId.CHANSEY, + SpeciesId.MEW, + ]); + }); it("test remove random battle seed int", async () => { for (let i = 0; i < 10; i++) { @@ -138,12 +140,12 @@ describe("Test Battle Phase", () => { await game.phaseInterceptor.run(LoginPhase).catch(e => { expect(e).toBe("Wrong phase: this is SelectGenderPhase and not LoginPhase"); }); - }, 20000); + }); it("wrong phase but skip", async () => { await game.phaseInterceptor.run(LoginPhase); await game.phaseInterceptor.run(LoginPhase, () => game.isCurrentPhase(SelectGenderPhase)); - }, 20000); + }); it("good run", async () => { await game.phaseInterceptor.run(LoginPhase); @@ -158,7 +160,7 @@ describe("Test Battle Phase", () => { ); await game.phaseInterceptor.run(SelectGenderPhase, () => game.isCurrentPhase(TitlePhase)); await game.phaseInterceptor.run(TitlePhase); - }, 20000); + }); it("good run from select gender to title", async () => { await game.phaseInterceptor.run(LoginPhase); @@ -172,7 +174,7 @@ describe("Test Battle Phase", () => { () => game.isCurrentPhase(TitlePhase), ); await game.phaseInterceptor.runFrom(SelectGenderPhase).to(TitlePhase); - }, 20000); + }); it("good run to SummonPhase phase", async () => { await game.phaseInterceptor.run(LoginPhase); @@ -193,7 +195,7 @@ describe("Test Battle Phase", () => { selectStarterPhase.initBattle(starters); }); await game.phaseInterceptor.runFrom(SelectGenderPhase).to(SummonPhase); - }, 20000); + }); it("2vs1", async () => { game.override.battleStyle("single"); @@ -274,7 +276,7 @@ describe("Test Battle Phase", () => { game.move.select(moveToUse); await game.toNextTurn(); expect(game.scene.currentBattle.turn).toBeGreaterThan(turn); - }, 20000); + }); it("does not set new weather if staying in same biome", async () => { const moveToUse = MoveId.SPLASH; @@ -298,7 +300,7 @@ describe("Test Battle Phase", () => { await game.toNextWave(); expect(game.scene.arena.trySetWeather).not.toHaveBeenCalled(); expect(game.scene.currentBattle.waveIndex).toBeGreaterThan(waveIndex); - }, 20000); + }); it("does not force switch if active pokemon faints at same time as enemy mon and is revived in post-battle", async () => { const moveToUse = MoveId.TAKE_DOWN; @@ -329,5 +331,5 @@ describe("Test Battle Phase", () => { () => game.isCurrentPhase(NextEncounterPhase), ); await game.phaseInterceptor.to(SwitchPhase); - }, 20000); + }); }); diff --git a/test/battle/double_battle.test.ts b/test/battle/double_battle.test.ts index 54c573813d7..8e606a99ae0 100644 --- a/test/battle/double_battle.test.ts +++ b/test/battle/double_battle.test.ts @@ -56,7 +56,7 @@ describe("Double Battles", () => { await game.phaseInterceptor.to(TurnInitPhase); expect(game.scene.getPlayerField().filter(p => !p.isFainted())).toHaveLength(2); - }, 20000); + }); it("randomly chooses between single and double battles if there is no battle type override", async () => { let rngSweepProgress = 0; // Will simulate RNG rolls by slowly increasing from 0 to 1 diff --git a/test/battle/special_battle.test.ts b/test/battle/special_battle.test.ts index f0c77668093..4988e526b1e 100644 --- a/test/battle/special_battle.test.ts +++ b/test/battle/special_battle.test.ts @@ -1,4 +1,3 @@ -import { CommandPhase } from "#app/phases/command-phase"; import { UiMode } from "#enums/ui-mode"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; @@ -32,66 +31,67 @@ describe("Test Battle Phase", () => { .enemyMoveset(MoveId.TACKLE); }); + // TODO: Make these into `it.each`es it("startBattle 2vs1 boss", async () => { game.override.battleStyle("single").startingWave(10); await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); - }, 20000); + expect(game.scene.phaseManager.getCurrentPhase()?.phaseName).toBe("CommandPhase"); + }); it("startBattle 2vs2 boss", async () => { game.override.battleStyle("double").startingWave(10); await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); - }, 20000); + expect(game.scene.phaseManager.getCurrentPhase()?.phaseName).toBe("CommandPhase"); + }); it("startBattle 2vs2 trainer", async () => { game.override.battleStyle("double").startingWave(5); await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); - }, 20000); + expect(game.scene.phaseManager.getCurrentPhase()?.phaseName).toBe("CommandPhase"); + }); it("startBattle 2vs1 trainer", async () => { game.override.battleStyle("single").startingWave(5); await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); - }, 20000); + expect(game.scene.phaseManager.getCurrentPhase()?.phaseName).toBe("CommandPhase"); + }); it("startBattle 2vs1 rival", async () => { game.override.battleStyle("single").startingWave(8); await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); - }, 20000); + expect(game.scene.phaseManager.getCurrentPhase()?.phaseName).toBe("CommandPhase"); + }); it("startBattle 2vs2 rival", async () => { game.override.battleStyle("double").startingWave(8); await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); - }, 20000); + expect(game.scene.phaseManager.getCurrentPhase()?.phaseName).toBe("CommandPhase"); + }); it("startBattle 1vs1 trainer", async () => { game.override.battleStyle("single").startingWave(5); await game.classicMode.startBattle([SpeciesId.BLASTOISE]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); - }, 20000); + expect(game.scene.phaseManager.getCurrentPhase()?.phaseName).toBe("CommandPhase"); + }); it("startBattle 2vs2 trainer", async () => { game.override.battleStyle("double").startingWave(5); await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); - }, 20000); + expect(game.scene.phaseManager.getCurrentPhase()?.phaseName).toBe("CommandPhase"); + }); it("startBattle 4vs2 trainer", async () => { game.override.battleStyle("double").startingWave(5); await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD, SpeciesId.DARKRAI, SpeciesId.GABITE]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(CommandPhase.name); - }, 20000); + expect(game.scene.phaseManager.getCurrentPhase()?.phaseName).toBe("CommandPhase"); + }); }); diff --git a/test/data/status_effect.test.ts b/test/data/status_effect.test.ts index 06e11dfeb76..bc2936d8fe2 100644 --- a/test/data/status_effect.test.ts +++ b/test/data/status_effect.test.ts @@ -13,7 +13,7 @@ import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import { mockI18next } from "#test/testUtils/testUtils"; -import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; const pokemonName = "PKM"; const sourceText = "SOURCE"; @@ -294,10 +294,6 @@ describe("Status Effect Messages", () => { expect(text).toBe("statusEffect:burn.overlap"); }); }); - - afterEach(() => { - vi.resetAllMocks(); - }); }); describe("Status Effects", () => { diff --git a/test/eggs/egg.test.ts b/test/eggs/egg.test.ts index e37a7c00aa9..7792756a8a3 100644 --- a/test/eggs/egg.test.ts +++ b/test/eggs/egg.test.ts @@ -25,7 +25,6 @@ describe("Egg Generation Tests", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.restoreAllMocks(); }); beforeEach(async () => { diff --git a/test/eggs/manaphy-egg.test.ts b/test/eggs/manaphy-egg.test.ts index 4dc38ef10b6..a58dfa9beba 100644 --- a/test/eggs/manaphy-egg.test.ts +++ b/test/eggs/manaphy-egg.test.ts @@ -21,7 +21,6 @@ describe("Manaphy Eggs", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.restoreAllMocks(); }); beforeEach(async () => { diff --git a/test/escape-calculations.test.ts b/test/escape-calculations.test.ts index 8a81bf2c6b8..2cc0934f7c1 100644 --- a/test/escape-calculations.test.ts +++ b/test/escape-calculations.test.ts @@ -94,7 +94,7 @@ describe("Escape chance calculations", () => { phase.attemptRunAway(playerPokemon, enemyField, escapePercentage); expect(escapePercentage.value).toBe(escapeChances[i].expectedEscapeChance); } - }, 20000); + }); it("double non-boss opponent", async () => { game.override.battleStyle("double"); @@ -180,7 +180,7 @@ describe("Escape chance calculations", () => { escapeChances[i].pokemonSpeedRatio * totalEnemySpeed, ); } - }, 20000); + }); it("single boss opponent", async () => { game.override.startingWave(10); @@ -259,7 +259,7 @@ describe("Escape chance calculations", () => { phase.attemptRunAway(playerPokemon, enemyField, escapePercentage); expect(escapePercentage.value).toBe(escapeChances[i].expectedEscapeChance); } - }, 20000); + }); it("double boss opponent", async () => { game.override.battleStyle("double").startingWave(10); @@ -357,5 +357,5 @@ describe("Escape chance calculations", () => { escapeChances[i].pokemonSpeedRatio * totalEnemySpeed, ); } - }, 20000); + }); }); diff --git a/test/game-mode.test.ts b/test/game-mode.test.ts index 4a53739c45e..c5ce1e02852 100644 --- a/test/game-mode.test.ts +++ b/test/game-mode.test.ts @@ -15,8 +15,6 @@ describe("game-mode", () => { }); afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.clearAllMocks(); - vi.resetAllMocks(); }); beforeEach(() => { game = new GameManager(phaserGame); diff --git a/test/items/dire_hit.test.ts b/test/items/dire_hit.test.ts index f60adebac36..25fe9c8b876 100644 --- a/test/items/dire_hit.test.ts +++ b/test/items/dire_hit.test.ts @@ -37,7 +37,7 @@ describe("Items - Dire Hit", () => { .moveset([MoveId.POUND]) .startingHeldItems([{ name: "DIRE_HIT" }]) .battleStyle("single"); - }, 20000); + }); it("should raise CRIT stage by 1", async () => { await game.classicMode.startBattle([SpeciesId.GASTLY]); @@ -51,7 +51,7 @@ describe("Items - Dire Hit", () => { await game.phaseInterceptor.to(TurnEndPhase); expect(enemyPokemon.getCritStage).toHaveReturnedWith(1); - }, 20000); + }); it("should renew how many battles are left of existing DIRE_HIT when picking up new DIRE_HIT", async () => { game.override.itemRewards([{ name: "DIRE_HIT" }]); @@ -93,5 +93,5 @@ describe("Items - Dire Hit", () => { } } expect(count).toBe(1); - }, 20000); + }); }); diff --git a/test/items/exp_booster.test.ts b/test/items/exp_booster.test.ts index 96a8571785e..44d7721aba2 100644 --- a/test/items/exp_booster.test.ts +++ b/test/items/exp_booster.test.ts @@ -34,5 +34,5 @@ describe("EXP Modifier Items", () => { const expHolder = new NumberHolder(partyMember.exp); game.scene.applyModifiers(PokemonExpBoosterModifier, true, partyMember, expHolder); expect(expHolder.value).toBe(440); - }, 20000); + }); }); diff --git a/test/items/leek.test.ts b/test/items/leek.test.ts index 05ee77c991a..eedb6667b9b 100644 --- a/test/items/leek.test.ts +++ b/test/items/leek.test.ts @@ -43,7 +43,7 @@ describe("Items - Leek", () => { await game.phaseInterceptor.to(TurnEndPhase); expect(enemyMember.getCritStage).toHaveReturnedWith(2); - }, 20000); + }); it("should raise CRIT stage by 2 when held by GALAR_FARFETCHD", async () => { await game.classicMode.startBattle([SpeciesId.GALAR_FARFETCHD]); @@ -57,7 +57,7 @@ describe("Items - Leek", () => { await game.phaseInterceptor.to(TurnEndPhase); expect(enemyMember.getCritStage).toHaveReturnedWith(2); - }, 20000); + }); it("should raise CRIT stage by 2 when held by SIRFETCHD", async () => { await game.classicMode.startBattle([SpeciesId.SIRFETCHD]); @@ -71,7 +71,7 @@ describe("Items - Leek", () => { await game.phaseInterceptor.to(TurnEndPhase); expect(enemyMember.getCritStage).toHaveReturnedWith(2); - }, 20000); + }); it("should raise CRIT stage by 2 when held by FARFETCHD line fused with Pokemon", async () => { // Randomly choose from the Farfetch'd line @@ -99,7 +99,7 @@ describe("Items - Leek", () => { await game.phaseInterceptor.to(TurnEndPhase); expect(enemyMember.getCritStage).toHaveReturnedWith(2); - }, 20000); + }); it("should raise CRIT stage by 2 when held by Pokemon fused with FARFETCHD line", async () => { // Randomly choose from the Farfetch'd line @@ -127,7 +127,7 @@ describe("Items - Leek", () => { await game.phaseInterceptor.to(TurnEndPhase); expect(enemyMember.getCritStage).toHaveReturnedWith(2); - }, 20000); + }); it("should not raise CRIT stage when held by a Pokemon outside of FARFETCHD line", async () => { await game.classicMode.startBattle([SpeciesId.PIKACHU]); @@ -141,5 +141,5 @@ describe("Items - Leek", () => { await game.phaseInterceptor.to(TurnEndPhase); expect(enemyMember.getCritStage).toHaveReturnedWith(0); - }, 20000); + }); }); diff --git a/test/items/leftovers.test.ts b/test/items/leftovers.test.ts index 1f42dbcf537..21319d2c9d7 100644 --- a/test/items/leftovers.test.ts +++ b/test/items/leftovers.test.ts @@ -56,5 +56,5 @@ describe("Items - Leftovers", () => { // Check if leftovers heal us await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.hp).toBeGreaterThan(leadHpAfterDamage); - }, 20000); + }); }); diff --git a/test/items/light_ball.test.ts b/test/items/light_ball.test.ts index a0269506909..6dfed3389b9 100644 --- a/test/items/light_ball.test.ts +++ b/test/items/light_ball.test.ts @@ -108,7 +108,7 @@ describe("Items - Light Ball", () => { expect(atkValue.value / atkStat).toBe(2); expect(spAtkValue.value / spAtkStat).toBe(2); - }, 20000); + }); it("LIGHT_BALL held by fused PIKACHU (base)", async () => { await game.classicMode.startBattle([SpeciesId.PIKACHU, SpeciesId.MAROWAK]); @@ -147,7 +147,7 @@ describe("Items - Light Ball", () => { expect(atkValue.value / atkStat).toBe(2); expect(spAtkValue.value / spAtkStat).toBe(2); - }, 20000); + }); it("LIGHT_BALL held by fused PIKACHU (part)", async () => { await game.classicMode.startBattle([SpeciesId.MAROWAK, SpeciesId.PIKACHU]); @@ -186,7 +186,7 @@ describe("Items - Light Ball", () => { expect(atkValue.value / atkStat).toBe(2); expect(spAtkValue.value / spAtkStat).toBe(2); - }, 20000); + }); it("LIGHT_BALL not held by PIKACHU", async () => { await game.classicMode.startBattle([SpeciesId.MAROWAK]); @@ -215,5 +215,5 @@ describe("Items - Light Ball", () => { expect(atkValue.value / atkStat).toBe(1); expect(spAtkValue.value / spAtkStat).toBe(1); - }, 20000); + }); }); diff --git a/test/items/lock_capsule.test.ts b/test/items/lock_capsule.test.ts index 640da4a299e..beacc3a3907 100644 --- a/test/items/lock_capsule.test.ts +++ b/test/items/lock_capsule.test.ts @@ -49,5 +49,5 @@ describe("Items - Lock Capsule", () => { game.doSelectModifier(); await game.phaseInterceptor.to("SelectModifierPhase"); - }, 20000); + }); }); diff --git a/test/items/metal_powder.test.ts b/test/items/metal_powder.test.ts index 576b4923d6d..e731f6e7295 100644 --- a/test/items/metal_powder.test.ts +++ b/test/items/metal_powder.test.ts @@ -102,7 +102,7 @@ describe("Items - Metal Powder", () => { game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); expect(defValue.value / defStat).toBe(2); - }, 20000); + }); it("METAL_POWDER held by fused DITTO (base)", async () => { await game.classicMode.startBattle([SpeciesId.DITTO, SpeciesId.MAROWAK]); @@ -135,7 +135,7 @@ describe("Items - Metal Powder", () => { game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); expect(defValue.value / defStat).toBe(2); - }, 20000); + }); it("METAL_POWDER held by fused DITTO (part)", async () => { await game.classicMode.startBattle([SpeciesId.MAROWAK, SpeciesId.DITTO]); @@ -168,7 +168,7 @@ describe("Items - Metal Powder", () => { game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); expect(defValue.value / defStat).toBe(2); - }, 20000); + }); it("METAL_POWDER not held by DITTO", async () => { await game.classicMode.startBattle([SpeciesId.MAROWAK]); @@ -191,5 +191,5 @@ describe("Items - Metal Powder", () => { game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); expect(defValue.value / defStat).toBe(1); - }, 20000); + }); }); diff --git a/test/items/scope_lens.test.ts b/test/items/scope_lens.test.ts index 2ec5260d092..16be8aab930 100644 --- a/test/items/scope_lens.test.ts +++ b/test/items/scope_lens.test.ts @@ -28,7 +28,7 @@ describe("Items - Scope Lens", () => { .moveset([MoveId.POUND]) .startingHeldItems([{ name: "SCOPE_LENS" }]) .battleStyle("single"); - }, 20000); + }); it("should raise CRIT stage by 1", async () => { await game.classicMode.startBattle([SpeciesId.GASTLY]); @@ -42,5 +42,5 @@ describe("Items - Scope Lens", () => { await game.phaseInterceptor.to(TurnEndPhase); expect(enemyPokemon.getCritStage).toHaveReturnedWith(1); - }, 20000); + }); }); diff --git a/test/items/temp_stat_stage_booster.test.ts b/test/items/temp_stat_stage_booster.test.ts index a58c2d611c9..b8cd0cde4eb 100644 --- a/test/items/temp_stat_stage_booster.test.ts +++ b/test/items/temp_stat_stage_booster.test.ts @@ -50,7 +50,7 @@ describe("Items - Temporary Stat Stage Boosters", () => { await game.phaseInterceptor.runFrom("EnemyCommandPhase").to(TurnEndPhase); expect(partyMember.getStatStageMultiplier).toHaveReturnedWith(1.3); - }, 20000); + }); it("should increase existing ACC stat stage by 1 for X_ACCURACY only", async () => { game.override.startingModifier([{ name: "TEMP_STAT_STAGE_BOOSTER", type: Stat.ACC }]).ability(AbilityId.SIMPLE); @@ -72,7 +72,7 @@ describe("Items - Temporary Stat Stage Boosters", () => { // ACC at +3 stat stages yields a x2 multiplier expect(partyMember.getAccuracyMultiplier).toHaveReturnedWith(2); - }, 20000); + }); it("should increase existing stat stage multiplier by 3/10 for the rest of the boosters", async () => { await game.classicMode.startBattle([SpeciesId.PIKACHU]); @@ -92,7 +92,7 @@ describe("Items - Temporary Stat Stage Boosters", () => { // ATK at +1 stat stage yields a x1.5 multiplier, add 0.3 from X_ATTACK expect(partyMember.getStatStageMultiplier).toHaveReturnedWith(1.8); - }, 20000); + }); it("should not increase past maximum stat stage multiplier", async () => { game.override.startingModifier([ @@ -116,7 +116,7 @@ describe("Items - Temporary Stat Stage Boosters", () => { expect(partyMember.getAccuracyMultiplier).toHaveReturnedWith(3); expect(partyMember.getStatStageMultiplier).toHaveReturnedWith(4); - }, 20000); + }); it("should renew how many battles are left of existing booster when picking up new booster of same type", async () => { game.override.startingLevel(200).itemRewards([{ name: "TEMP_STAT_STAGE_BOOSTER", type: Stat.ATK }]); @@ -161,5 +161,5 @@ describe("Items - Temporary Stat Stage Boosters", () => { } } expect(count).toBe(1); - }, 20000); + }); }); diff --git a/test/moves/baton_pass.test.ts b/test/moves/baton_pass.test.ts index 42e46352a11..a010636034a 100644 --- a/test/moves/baton_pass.test.ts +++ b/test/moves/baton_pass.test.ts @@ -55,7 +55,7 @@ describe("Moves - Baton Pass", () => { playerPokemon = game.scene.getPlayerPokemon()!; expect(playerPokemon.species.speciesId).toEqual(SpeciesId.SHUCKLE); expect(playerPokemon.getStatStage(Stat.SPATK)).toEqual(2); - }, 20000); + }); it("passes stat stage buffs when AI uses it", async () => { // arrange @@ -82,7 +82,7 @@ describe("Moves - Baton Pass", () => { "SummonPhase", "PostSummonPhase", ]); - }, 20000); + }); it("doesn't transfer effects that aren't transferrable", async () => { game.override.enemyMoveset([MoveId.SALT_CURE]); @@ -98,7 +98,7 @@ describe("Moves - Baton Pass", () => { await game.toNextTurn(); expect(player2.findTag(t => t.tagType === BattlerTagType.SALT_CURED)).toBeUndefined(); - }, 20000); + }); it("doesn't allow binding effects from the user to persist", async () => { game.override.moveset([MoveId.FIRE_SPIN, MoveId.BATON_PASS]); diff --git a/test/moves/disable.test.ts b/test/moves/disable.test.ts index a269a8177aa..127a5eaaa0c 100644 --- a/test/moves/disable.test.ts +++ b/test/moves/disable.test.ts @@ -60,7 +60,7 @@ describe("Moves - Disable", () => { result: MoveResult.FAIL, }); expect(enemyMon.isMoveRestricted(MoveId.SPLASH)).toBe(false); - }, 20000); + }); it("causes STRUGGLE if all usable moves are disabled", async () => { await game.classicMode.startBattle(); @@ -78,7 +78,7 @@ describe("Moves - Disable", () => { expect(enemyHistory).toHaveLength(2); expect(enemyHistory[0].move).toBe(MoveId.SPLASH); expect(enemyHistory[1].move).toBe(MoveId.STRUGGLE); - }, 20000); + }); it("cannot disable STRUGGLE", async () => { game.override.enemyMoveset([MoveId.STRUGGLE]); @@ -94,7 +94,7 @@ describe("Moves - Disable", () => { expect(playerMon.getLastXMoves()[0].result).toBe(MoveResult.FAIL); expect(enemyMon.getLastXMoves()[0].move).toBe(MoveId.STRUGGLE); expect(enemyMon.isMoveRestricted(MoveId.STRUGGLE)).toBe(false); - }, 20000); + }); it("interrupts target's move when target moves after", async () => { await game.classicMode.startBattle(); @@ -116,7 +116,7 @@ describe("Moves - Disable", () => { result: MoveResult.SUCCESS, }); expect(enemyHistory[1].result).toBe(MoveResult.FAIL); - }, 20000); + }); it("disables NATURE POWER, not the move invoked by it", async () => { game.override.enemyMoveset([MoveId.NATURE_POWER]); @@ -130,7 +130,7 @@ describe("Moves - Disable", () => { expect(enemyMon.isMoveRestricted(MoveId.NATURE_POWER)).toBe(true); expect(enemyMon.isMoveRestricted(enemyMon.getLastXMoves(2)[0].move)).toBe(false); - }, 20000); + }); it("disables most recent move", async () => { game.override.enemyMoveset([MoveId.SPLASH, MoveId.TACKLE]); @@ -150,5 +150,5 @@ describe("Moves - Disable", () => { expect(enemyMon.isMoveRestricted(MoveId.TACKLE)).toBe(true); expect(enemyMon.isMoveRestricted(MoveId.SPLASH)).toBe(false); - }, 20000); + }); }); diff --git a/test/moves/dynamax_cannon.test.ts b/test/moves/dynamax_cannon.test.ts index c0b6d9e0b40..bf8a63f044c 100644 --- a/test/moves/dynamax_cannon.test.ts +++ b/test/moves/dynamax_cannon.test.ts @@ -51,7 +51,7 @@ describe("Moves - Dynamax Cannon", () => { expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(dynamaxCannon.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(dynamaxCannon.calculateBattlePower).toHaveLastReturnedWith(100); - }, 20000); + }); it("should return 100 power against an enemy at level cap", async () => { game.override.enemyLevel(10); @@ -63,7 +63,7 @@ describe("Moves - Dynamax Cannon", () => { expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(dynamaxCannon.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(dynamaxCannon.calculateBattlePower).toHaveLastReturnedWith(100); - }, 20000); + }); it("should return 120 power against an enemy 1% above level cap", async () => { game.override.enemyLevel(101); @@ -78,7 +78,7 @@ describe("Moves - Dynamax Cannon", () => { vi.spyOn(game.scene, "getMaxExpLevel").mockReturnValue(100); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(dynamaxCannon.calculateBattlePower).toHaveLastReturnedWith(120); - }, 20000); + }); it("should return 140 power against an enemy 2% above level capp", async () => { game.override.enemyLevel(102); @@ -93,7 +93,7 @@ describe("Moves - Dynamax Cannon", () => { vi.spyOn(game.scene, "getMaxExpLevel").mockReturnValue(100); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(dynamaxCannon.calculateBattlePower).toHaveLastReturnedWith(140); - }, 20000); + }); it("should return 160 power against an enemy 3% above level cap", async () => { game.override.enemyLevel(103); @@ -108,7 +108,7 @@ describe("Moves - Dynamax Cannon", () => { vi.spyOn(game.scene, "getMaxExpLevel").mockReturnValue(100); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(dynamaxCannon.calculateBattlePower).toHaveLastReturnedWith(160); - }, 20000); + }); it("should return 180 power against an enemy 4% above level cap", async () => { game.override.enemyLevel(104); @@ -123,7 +123,7 @@ describe("Moves - Dynamax Cannon", () => { vi.spyOn(game.scene, "getMaxExpLevel").mockReturnValue(100); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(dynamaxCannon.calculateBattlePower).toHaveLastReturnedWith(180); - }, 20000); + }); it("should return 200 power against an enemy 5% above level cap", async () => { game.override.enemyLevel(105); @@ -138,7 +138,7 @@ describe("Moves - Dynamax Cannon", () => { vi.spyOn(game.scene, "getMaxExpLevel").mockReturnValue(100); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(dynamaxCannon.calculateBattlePower).toHaveLastReturnedWith(200); - }, 20000); + }); it("should return 200 power against an enemy way above level cap", async () => { game.override.enemyLevel(999); @@ -151,5 +151,5 @@ describe("Moves - Dynamax Cannon", () => { expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(dynamaxCannon.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(dynamaxCannon.calculateBattlePower).toHaveLastReturnedWith(200); - }, 20000); + }); }); diff --git a/test/moves/fusion_bolt.test.ts b/test/moves/fusion_bolt.test.ts index a5263bfa364..cb3d75f56eb 100644 --- a/test/moves/fusion_bolt.test.ts +++ b/test/moves/fusion_bolt.test.ts @@ -45,5 +45,5 @@ describe("Moves - Fusion Bolt", () => { await game.toNextTurn(); expect(initialHp - partyMember.hp).toBe(0); - }, 20000); + }); }); diff --git a/test/moves/fusion_flare_bolt.test.ts b/test/moves/fusion_flare_bolt.test.ts index f10ede8717c..f9e55b72f6c 100644 --- a/test/moves/fusion_flare_bolt.test.ts +++ b/test/moves/fusion_flare_bolt.test.ts @@ -64,7 +64,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionBolt.calculateBattlePower).toHaveLastReturnedWith(200); - }, 20000); + }); it("FUSION_BOLT should double power of subsequent FUSION_FLARE", async () => { await game.classicMode.startBattle([SpeciesId.ZEKROM, SpeciesId.ZEKROM]); @@ -84,7 +84,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionFlare.calculateBattlePower).toHaveLastReturnedWith(200); - }, 20000); + }); it("FUSION_FLARE should double power of subsequent FUSION_BOLT if a move failed in between", async () => { await game.classicMode.startBattle([SpeciesId.ZEKROM, SpeciesId.ZEKROM]); @@ -109,7 +109,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionBolt.calculateBattlePower).toHaveLastReturnedWith(200); - }, 20000); + }); it("FUSION_FLARE should not double power of subsequent FUSION_BOLT if a move succeeded in between", async () => { game.override.enemyMoveset(MoveId.SPLASH); @@ -134,7 +134,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionBolt.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionBolt.calculateBattlePower).toHaveLastReturnedWith(100); - }, 20000); + }); it("FUSION_FLARE should double power of subsequent FUSION_BOLT if moves are aimed at allies", async () => { await game.classicMode.startBattle([SpeciesId.ZEKROM, SpeciesId.RESHIRAM]); @@ -154,7 +154,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionFlare.calculateBattlePower).toHaveLastReturnedWith(200); - }, 20000); + }); it("FUSION_FLARE and FUSION_BOLT alternating throughout turn should double power of subsequent moves", async () => { game.override.enemyMoveset(fusionFlare.id); @@ -208,7 +208,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionFlare.calculateBattlePower).toHaveLastReturnedWith(200); - }, 20000); + }); it("FUSION_FLARE and FUSION_BOLT alternating throughout turn should double power of subsequent moves if moves are aimed at allies", async () => { game.override.enemyMoveset(fusionFlare.id); @@ -262,5 +262,5 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { expect((game.scene.phaseManager.getCurrentPhase() as MoveEffectPhase).move.id).toBe(fusionFlare.id); await game.phaseInterceptor.to(DamageAnimPhase, false); expect(fusionFlare.calculateBattlePower).toHaveLastReturnedWith(200); - }, 20000); + }); }); diff --git a/test/moves/gigaton_hammer.test.ts b/test/moves/gigaton_hammer.test.ts index be7adf53aa7..e8c9d316372 100644 --- a/test/moves/gigaton_hammer.test.ts +++ b/test/moves/gigaton_hammer.test.ts @@ -52,7 +52,7 @@ describe("Moves - Gigaton Hammer", () => { const enemy2 = game.scene.getEnemyPokemon()!; expect(enemy2.hp).toBe(enemy2.getMaxHp()); - }, 20000); + }); it("can be used again if recalled and sent back out", async () => { game.override.startingWave(4); @@ -75,5 +75,5 @@ describe("Moves - Gigaton Hammer", () => { const enemy2 = game.scene.getEnemyPokemon()!; expect(enemy2.hp).toBeLessThan(enemy2.getMaxHp()); - }, 20000); + }); }); diff --git a/test/moves/growth.test.ts b/test/moves/growth.test.ts index a7078961e2a..6eec30be49f 100644 --- a/test/moves/growth.test.ts +++ b/test/moves/growth.test.ts @@ -43,5 +43,5 @@ describe("Moves - Growth", () => { await game.phaseInterceptor.runFrom(EnemyCommandPhase).to(TurnInitPhase); expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(1); - }, 20000); + }); }); diff --git a/test/moves/guard_split.test.ts b/test/moves/guard_split.test.ts index 47edba49c9a..878bb80f251 100644 --- a/test/moves/guard_split.test.ts +++ b/test/moves/guard_split.test.ts @@ -50,7 +50,7 @@ describe("Moves - Guard Split", () => { expect(player.getStat(Stat.SPDEF, false)).toBe(avgSpDef); expect(enemy.getStat(Stat.SPDEF, false)).toBe(avgSpDef); - }, 20000); + }); it("should be idempotent", async () => { game.override.enemyMoveset([MoveId.GUARD_SPLIT]); @@ -73,5 +73,5 @@ describe("Moves - Guard Split", () => { expect(player.getStat(Stat.SPDEF, false)).toBe(avgSpDef); expect(enemy.getStat(Stat.SPDEF, false)).toBe(avgSpDef); - }, 20000); + }); }); diff --git a/test/moves/magnet_rise.test.ts b/test/moves/magnet_rise.test.ts index 16f449899ef..496c0609411 100644 --- a/test/moves/magnet_rise.test.ts +++ b/test/moves/magnet_rise.test.ts @@ -42,7 +42,7 @@ describe("Moves - Magnet Rise", () => { const finalHp = game.scene.getPlayerParty()[0].hp; const hpLost = finalHp - startingHp; expect(hpLost).toBe(0); - }, 20000); + }); it("MAGNET RISE - Gravity", async () => { await game.classicMode.startBattle(); @@ -58,5 +58,5 @@ describe("Moves - Magnet Rise", () => { finalHp = game.scene.getPlayerParty()[0].hp; hpLost = finalHp - startingHp; expect(hpLost).not.toBe(0); - }, 20000); + }); }); diff --git a/test/moves/power_split.test.ts b/test/moves/power_split.test.ts index 6e0763fb87d..c0fcd317182 100644 --- a/test/moves/power_split.test.ts +++ b/test/moves/power_split.test.ts @@ -50,7 +50,7 @@ describe("Moves - Power Split", () => { expect(player.getStat(Stat.SPATK, false)).toBe(avgSpAtk); expect(enemy.getStat(Stat.SPATK, false)).toBe(avgSpAtk); - }, 20000); + }); it("should be idempotent", async () => { game.override.enemyMoveset([MoveId.POWER_SPLIT]); @@ -73,5 +73,5 @@ describe("Moves - Power Split", () => { expect(player.getStat(Stat.SPATK, false)).toBe(avgSpAtk); expect(enemy.getStat(Stat.SPATK, false)).toBe(avgSpAtk); - }, 20000); + }); }); diff --git a/test/moves/speed_swap.test.ts b/test/moves/speed_swap.test.ts index aef0d981e98..3723e7db740 100644 --- a/test/moves/speed_swap.test.ts +++ b/test/moves/speed_swap.test.ts @@ -47,5 +47,5 @@ describe("Moves - Speed Swap", () => { expect(player.getStat(Stat.SPD, false)).toBe(enemySpd); expect(enemy.getStat(Stat.SPD, false)).toBe(playerSpd); - }, 20000); + }); }); diff --git a/test/moves/spikes.test.ts b/test/moves/spikes.test.ts index a2d72054020..49492701d18 100644 --- a/test/moves/spikes.test.ts +++ b/test/moves/spikes.test.ts @@ -49,7 +49,7 @@ describe("Moves - Spikes", () => { const player = game.scene.getPlayerParty()[0]; expect(player.hp).toBe(player.getMaxHp()); - }, 20000); + }); it("should damage opposing pokemon that are forced to switch in", async () => { game.override.startingWave(5); @@ -63,7 +63,7 @@ describe("Moves - Spikes", () => { const enemy = game.scene.getEnemyParty()[0]; expect(enemy.hp).toBeLessThan(enemy.getMaxHp()); - }, 20000); + }); it("should damage opposing pokemon that choose to switch in", async () => { game.override.startingWave(5); @@ -78,7 +78,7 @@ describe("Moves - Spikes", () => { const enemy = game.scene.getEnemyParty()[0]; expect(enemy.hp).toBeLessThan(enemy.getMaxHp()); - }, 20000); + }); it("should work when all targets fainted", async () => { game.override.enemySpecies(SpeciesId.DIGLETT).battleStyle("double").startingLevel(50); @@ -89,5 +89,5 @@ describe("Moves - Spikes", () => { await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.arena.getTagOnSide(ArenaTrapTag, ArenaTagSide.ENEMY)).toBeDefined(); - }, 20000); + }); }); diff --git a/test/moves/struggle.test.ts b/test/moves/struggle.test.ts index cd3c65217ed..2175dc557b3 100644 --- a/test/moves/struggle.test.ts +++ b/test/moves/struggle.test.ts @@ -43,8 +43,6 @@ describe("Moves - Struggle", () => { await game.phaseInterceptor.to("BerryPhase"); expect(stabSpy).toHaveReturnedWith(1); - - stabSpy.mockRestore(); }); it("should ignore type effectiveness", async () => { @@ -55,11 +53,8 @@ describe("Moves - Struggle", () => { game.move.select(MoveId.STRUGGLE); const moveEffectivenessSpy = vi.spyOn(enemy, "getMoveEffectiveness"); - await game.phaseInterceptor.to("BerryPhase"); expect(moveEffectivenessSpy).toHaveReturnedWith(1); - - moveEffectivenessSpy.mockRestore(); }); }); diff --git a/test/moves/tackle.test.ts b/test/moves/tackle.test.ts index 61780044f49..96faa27ad38 100644 --- a/test/moves/tackle.test.ts +++ b/test/moves/tackle.test.ts @@ -44,7 +44,7 @@ describe("Moves - Tackle", () => { await game.phaseInterceptor.runFrom(EnemyCommandPhase).to(TurnEndPhase); const hpLost = hpOpponent - game.scene.currentBattle.enemyParty[0].hp; expect(hpLost).toBe(0); - }, 20000); + }); it("TACKLE against not resistant", async () => { const moveToUse = MoveId.TACKLE; @@ -59,5 +59,5 @@ describe("Moves - Tackle", () => { const hpLost = hpOpponent - game.scene.currentBattle.enemyParty[0].hp; expect(hpLost).toBeGreaterThan(0); expect(hpLost).toBeLessThan(4); - }, 20000); + }); }); diff --git a/test/moves/tail_whip.test.ts b/test/moves/tail_whip.test.ts index 9c9ac736ece..e98194b52dd 100644 --- a/test/moves/tail_whip.test.ts +++ b/test/moves/tail_whip.test.ts @@ -46,5 +46,5 @@ describe("Moves - Tail whip", () => { await game.phaseInterceptor.runFrom(EnemyCommandPhase).to(TurnInitPhase); expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(-1); - }, 20000); + }); }); diff --git a/test/moves/tera_blast.test.ts b/test/moves/tera_blast.test.ts index 2f3bdcebfcf..3372fd21539 100644 --- a/test/moves/tera_blast.test.ts +++ b/test/moves/tera_blast.test.ts @@ -62,7 +62,7 @@ describe("Moves - Tera Blast", () => { await game.phaseInterceptor.to("MoveEffectPhase"); expect(spy).toHaveReturnedWith(2); - }, 20000); + }); it("increases power if user is Stellar tera type", async () => { await game.classicMode.startBattle(); diff --git a/test/moves/tidy_up.test.ts b/test/moves/tidy_up.test.ts index 636946c2e6a..69c9df42b36 100644 --- a/test/moves/tidy_up.test.ts +++ b/test/moves/tidy_up.test.ts @@ -46,7 +46,7 @@ describe("Moves - Tidy Up", () => { game.move.select(MoveId.TIDY_UP); await game.phaseInterceptor.to(MoveEndPhase); expect(game.scene.arena.getTag(ArenaTagType.SPIKES)).toBeUndefined(); - }, 20000); + }); it("stealth rocks are cleared", async () => { game.override.moveset([MoveId.STEALTH_ROCK, MoveId.TIDY_UP]).enemyMoveset(MoveId.STEALTH_ROCK); @@ -57,7 +57,7 @@ describe("Moves - Tidy Up", () => { game.move.select(MoveId.TIDY_UP); await game.phaseInterceptor.to(MoveEndPhase); expect(game.scene.arena.getTag(ArenaTagType.STEALTH_ROCK)).toBeUndefined(); - }, 20000); + }); it("toxic spikes are cleared", async () => { game.override.moveset([MoveId.TOXIC_SPIKES, MoveId.TIDY_UP]).enemyMoveset(MoveId.TOXIC_SPIKES); @@ -68,7 +68,7 @@ describe("Moves - Tidy Up", () => { game.move.select(MoveId.TIDY_UP); await game.phaseInterceptor.to(MoveEndPhase); expect(game.scene.arena.getTag(ArenaTagType.TOXIC_SPIKES)).toBeUndefined(); - }, 20000); + }); it("sticky webs are cleared", async () => { game.override.moveset([MoveId.STICKY_WEB, MoveId.TIDY_UP]).enemyMoveset(MoveId.STICKY_WEB); @@ -80,7 +80,7 @@ describe("Moves - Tidy Up", () => { game.move.select(MoveId.TIDY_UP); await game.phaseInterceptor.to(MoveEndPhase); expect(game.scene.arena.getTag(ArenaTagType.STICKY_WEB)).toBeUndefined(); - }, 20000); + }); it("substitutes are cleared", async () => { game.override.moveset([MoveId.SUBSTITUTE, MoveId.TIDY_UP]).enemyMoveset(MoveId.SUBSTITUTE); @@ -97,7 +97,7 @@ describe("Moves - Tidy Up", () => { expect(p).toBeDefined(); expect(p!.getTag(SubstituteTag)).toBeUndefined(); }); - }, 20000); + }); it("user's stats are raised with no traps set", async () => { await game.classicMode.startBattle(); @@ -112,5 +112,5 @@ describe("Moves - Tidy Up", () => { expect(playerPokemon.getStatStage(Stat.ATK)).toBe(1); expect(playerPokemon.getStatStage(Stat.SPD)).toBe(1); - }, 20000); + }); }); diff --git a/test/moves/u_turn.test.ts b/test/moves/u_turn.test.ts index 4212802298e..5d4cad3a5ad 100644 --- a/test/moves/u_turn.test.ts +++ b/test/moves/u_turn.test.ts @@ -50,7 +50,7 @@ describe("Moves - U-turn", () => { ); expect(game.phaseInterceptor.log).toContain("SwitchSummonPhase"); expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(SpeciesId.SHUCKLE); - }, 20000); + }); it("triggers rough skin on the u-turn user before a new pokemon is switched in", async () => { // arrange @@ -68,7 +68,7 @@ describe("Moves - U-turn", () => { expect(game.scene.getEnemyPokemon()!.waveData.abilityRevealed).toBe(true); // proxy for asserting ability activated expect(playerPkm.species.speciesId).toEqual(SpeciesId.RAICHU); expect(game.phaseInterceptor.log).not.toContain("SwitchSummonPhase"); - }, 20000); + }); it("triggers contact abilities on the u-turn user (eg poison point) before a new pokemon is switched in", async () => { // arrange @@ -86,7 +86,7 @@ describe("Moves - U-turn", () => { expect(playerPkm.species.speciesId).toEqual(SpeciesId.RAICHU); expect(game.scene.getEnemyPokemon()!.waveData.abilityRevealed).toBe(true); // proxy for asserting ability activated expect(game.phaseInterceptor.log).not.toContain("SwitchSummonPhase"); - }, 20000); + }); it("still forces a switch if u-turn KO's the opponent", async () => { game.override.startingLevel(1000); // Ensure that U-Turn KO's the opponent diff --git a/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts b/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts index e3368d339cd..82cac197fe9 100644 --- a/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts +++ b/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts @@ -55,8 +55,6 @@ describe("A Trainer's Test - Mystery Encounter", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.clearAllMocks(); - vi.resetAllMocks(); }); it("should have the correct properties", async () => { diff --git a/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts b/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts index 304ca87e0e6..b6c4e4d85fb 100644 --- a/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts +++ b/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts @@ -54,8 +54,6 @@ describe("Absolute Avarice - Mystery Encounter", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.clearAllMocks(); - vi.resetAllMocks(); }); it("should have the correct properties", async () => { diff --git a/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts b/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts index 8e8253fd912..4b0f1d50b74 100644 --- a/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts +++ b/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts @@ -56,8 +56,6 @@ describe("An Offer You Can't Refuse - Mystery Encounter", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.clearAllMocks(); - vi.resetAllMocks(); }); it("should have the correct properties", async () => { diff --git a/test/mystery-encounter/encounters/berries-abound-encounter.test.ts b/test/mystery-encounter/encounters/berries-abound-encounter.test.ts index 566576995a5..8c2c6c608cd 100644 --- a/test/mystery-encounter/encounters/berries-abound-encounter.test.ts +++ b/test/mystery-encounter/encounters/berries-abound-encounter.test.ts @@ -57,8 +57,6 @@ describe("Berries Abound - Mystery Encounter", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.clearAllMocks(); - vi.resetAllMocks(); }); it("should have the correct properties", async () => { diff --git a/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts b/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts index d5527d208fd..4da8ff7f643 100644 --- a/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts +++ b/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts @@ -167,8 +167,6 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.clearAllMocks(); - vi.resetAllMocks(); }); it("should have the correct properties", async () => { diff --git a/test/mystery-encounter/encounters/clowning-around-encounter.test.ts b/test/mystery-encounter/encounters/clowning-around-encounter.test.ts index 9965b90a981..738b3a54067 100644 --- a/test/mystery-encounter/encounters/clowning-around-encounter.test.ts +++ b/test/mystery-encounter/encounters/clowning-around-encounter.test.ts @@ -68,8 +68,6 @@ describe("Clowning Around - Mystery Encounter", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.clearAllMocks(); - vi.resetAllMocks(); }); it("should have the correct properties", async () => { diff --git a/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts b/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts index f74100d7e35..e47c7cc1a42 100644 --- a/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts +++ b/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts @@ -57,8 +57,6 @@ describe("Dancing Lessons - Mystery Encounter", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.clearAllMocks(); - vi.resetAllMocks(); }); it("should have the correct properties", async () => { diff --git a/test/mystery-encounter/encounters/delibirdy-encounter.test.ts b/test/mystery-encounter/encounters/delibirdy-encounter.test.ts index 0b6f7453522..3ef8431cc2c 100644 --- a/test/mystery-encounter/encounters/delibirdy-encounter.test.ts +++ b/test/mystery-encounter/encounters/delibirdy-encounter.test.ts @@ -59,8 +59,6 @@ describe("Delibird-y - Mystery Encounter", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.clearAllMocks(); - vi.resetAllMocks(); }); it("should have the correct properties", async () => { diff --git a/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts b/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts index 470d41060fb..a82734d0c03 100644 --- a/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts +++ b/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts @@ -49,8 +49,6 @@ describe("Department Store Sale - Mystery Encounter", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.clearAllMocks(); - vi.resetAllMocks(); }); it("should have the correct properties", async () => { diff --git a/test/mystery-encounter/encounters/field-trip-encounter.test.ts b/test/mystery-encounter/encounters/field-trip-encounter.test.ts index e059827fa17..f4b3c52eb65 100644 --- a/test/mystery-encounter/encounters/field-trip-encounter.test.ts +++ b/test/mystery-encounter/encounters/field-trip-encounter.test.ts @@ -47,8 +47,6 @@ describe("Field Trip - Mystery Encounter", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.clearAllMocks(); - vi.resetAllMocks(); }); it("should have the correct properties", async () => { diff --git a/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts b/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts index 76b15106ef1..5e6b8507a91 100644 --- a/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts +++ b/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts @@ -66,8 +66,6 @@ describe("Fiery Fallout - Mystery Encounter", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.clearAllMocks(); - vi.resetAllMocks(); }); it("should have the correct properties", async () => { diff --git a/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts b/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts index bf5d58fdad3..28db869004c 100644 --- a/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts +++ b/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts @@ -53,8 +53,6 @@ describe("Fight or Flight - Mystery Encounter", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.clearAllMocks(); - vi.resetAllMocks(); }); it("should have the correct properties", async () => { diff --git a/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts b/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts index 9f2057080f9..d5fe1ffc68a 100644 --- a/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts +++ b/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts @@ -59,8 +59,6 @@ describe("Fun And Games! - Mystery Encounter", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.clearAllMocks(); - vi.resetAllMocks(); }); it("should have the correct properties", async () => { diff --git a/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts b/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts index 02ffc56fb2e..bb598f4ae6e 100644 --- a/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts +++ b/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts @@ -54,8 +54,6 @@ describe("Global Trade System - Mystery Encounter", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.clearAllMocks(); - vi.resetAllMocks(); }); it("should have the correct properties", async () => { diff --git a/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts b/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts index 971cd938925..aa367277ac6 100644 --- a/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts +++ b/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts @@ -50,8 +50,6 @@ describe("Lost at Sea - Mystery Encounter", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.clearAllMocks(); - vi.resetAllMocks(); }); it("should have the correct properties", async () => { diff --git a/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts b/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts index 04b611e1143..478648d88a7 100644 --- a/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts +++ b/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts @@ -60,8 +60,6 @@ describe("Mysterious Challengers - Mystery Encounter", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.clearAllMocks(); - vi.resetAllMocks(); }); it("should have the correct properties", async () => { diff --git a/test/mystery-encounter/encounters/part-timer-encounter.test.ts b/test/mystery-encounter/encounters/part-timer-encounter.test.ts index 4436f2e19fe..d36b387cae1 100644 --- a/test/mystery-encounter/encounters/part-timer-encounter.test.ts +++ b/test/mystery-encounter/encounters/part-timer-encounter.test.ts @@ -53,8 +53,6 @@ describe("Part-Timer - Mystery Encounter", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.clearAllMocks(); - vi.resetAllMocks(); }); it("should have the correct properties", async () => { diff --git a/test/mystery-encounter/encounters/safari-zone.test.ts b/test/mystery-encounter/encounters/safari-zone.test.ts index a086272c721..7ac26f48e59 100644 --- a/test/mystery-encounter/encounters/safari-zone.test.ts +++ b/test/mystery-encounter/encounters/safari-zone.test.ts @@ -55,8 +55,6 @@ describe("Safari Zone - Mystery Encounter", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.clearAllMocks(); - vi.resetAllMocks(); }); it("should have the correct properties", async () => { diff --git a/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts b/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts index 12398049abd..2138298ee2b 100644 --- a/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts +++ b/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts @@ -64,8 +64,6 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.clearAllMocks(); - vi.resetAllMocks(); }); it("should have the correct properties", async () => { diff --git a/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts b/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts index ed6d1c5bc4f..c9d6f540191 100644 --- a/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts @@ -57,8 +57,6 @@ describe("The Expert Pokémon Breeder - Mystery Encounter", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.clearAllMocks(); - vi.resetAllMocks(); }); it("should have the correct properties", async () => { diff --git a/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts b/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts index ee2d7d8039b..990e39014e2 100644 --- a/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts @@ -55,8 +55,6 @@ describe("The Pokemon Salesman - Mystery Encounter", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.clearAllMocks(); - vi.resetAllMocks(); }); it("should have the correct properties", async () => { diff --git a/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts b/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts index 5f7c0f5a0fd..d8626a7bf8a 100644 --- a/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts @@ -65,8 +65,6 @@ describe("The Strong Stuff - Mystery Encounter", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.clearAllMocks(); - vi.resetAllMocks(); }); it("should have the correct properties", async () => { diff --git a/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts b/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts index 72f76358398..87caa6ccd40 100644 --- a/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts @@ -61,8 +61,6 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.clearAllMocks(); - vi.resetAllMocks(); }); it("should have the correct properties", async () => { @@ -307,7 +305,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { ) as ModifierSelectUiHandler; expect(modifierSelectHandler.options.length).toEqual(1); expect(modifierSelectHandler.options[0].modifierTypeOption.type.id).toBe("MYSTERY_ENCOUNTER_MACHO_BRACE"); - }, 15000); + }); }); describe("Option 2 - Refuse the Challenge", () => { diff --git a/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts b/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts index 6e2da14dffc..2bffa26ff4a 100644 --- a/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts +++ b/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts @@ -64,8 +64,6 @@ describe("Trash to Treasure - Mystery Encounter", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.clearAllMocks(); - vi.resetAllMocks(); }); it("should have the correct properties", async () => { diff --git a/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts b/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts index 60ca87d3ae2..65c266a5a6c 100644 --- a/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts +++ b/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts @@ -62,8 +62,6 @@ describe("Uncommon Breed - Mystery Encounter", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.clearAllMocks(); - vi.resetAllMocks(); }); it("should have the correct properties", async () => { diff --git a/test/mystery-encounter/encounters/weird-dream-encounter.test.ts b/test/mystery-encounter/encounters/weird-dream-encounter.test.ts index 27d41ec66cb..475d5cc3c6e 100644 --- a/test/mystery-encounter/encounters/weird-dream-encounter.test.ts +++ b/test/mystery-encounter/encounters/weird-dream-encounter.test.ts @@ -54,8 +54,6 @@ describe("Weird Dream - Mystery Encounter", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - vi.clearAllMocks(); - vi.resetAllMocks(); }); it("should have the correct properties", async () => { diff --git a/test/phases/phases.test.ts b/test/phases/phases.test.ts index 8f7b1a1ea66..9d1c1804615 100644 --- a/test/phases/phases.test.ts +++ b/test/phases/phases.test.ts @@ -51,6 +51,6 @@ describe("Phases", () => { scene.phaseManager.unshiftPhase(unavailablePhase); await game.phaseInterceptor.to(UnavailablePhase); expect(scene.ui.getMode()).to.equal(UiMode.UNAVAILABLE); - }, 20000); + }); }); }); diff --git a/test/phases/select-modifier-phase.test.ts b/test/phases/select-modifier-phase.test.ts index 3639d34d25e..6e92861260e 100644 --- a/test/phases/select-modifier-phase.test.ts +++ b/test/phases/select-modifier-phase.test.ts @@ -42,8 +42,6 @@ describe("SelectModifierPhase", () => { afterEach(() => { game.phaseInterceptor.restoreOg(); - - vi.clearAllMocks(); }); it("should start a select modifier phase", async () => { diff --git a/test/reload.test.ts b/test/reload.test.ts index 8b817bbfe97..8e39df23f47 100644 --- a/test/reload.test.ts +++ b/test/reload.test.ts @@ -43,7 +43,7 @@ describe("Reload", () => { const postReloadRngState = Phaser.Math.RND.state(); expect(preReloadRngState).toBe(postReloadRngState); - }, 20000); + }); it("should not have RNG inconsistencies after a biome switch", async () => { game.override @@ -75,7 +75,7 @@ describe("Reload", () => { const postReloadRngState = Phaser.Math.RND.state(); expect(preReloadRngState).toBe(postReloadRngState); - }, 20000); + }); it("should not have weather inconsistencies after a biome switch", async () => { game.override @@ -101,7 +101,7 @@ describe("Reload", () => { const postReloadWeather = game.scene.arena.weather; expect(postReloadWeather).toStrictEqual(preReloadWeather); - }, 20000); + }); it("should not have RNG inconsistencies at a Daily run wild Pokemon fight", async () => { await game.dailyMode.startBattle(); @@ -113,7 +113,7 @@ describe("Reload", () => { const postReloadRngState = Phaser.Math.RND.state(); expect(preReloadRngState).toBe(postReloadRngState); - }, 20000); + }); it("should not have RNG inconsistencies at a Daily run double battle", async () => { game.override.battleStyle("double"); @@ -126,7 +126,7 @@ describe("Reload", () => { const postReloadRngState = Phaser.Math.RND.state(); expect(preReloadRngState).toBe(postReloadRngState); - }, 20000); + }); it("should not have RNG inconsistencies at a Daily run Gym Leader fight", async () => { game.override.battleStyle("single").startingWave(40); @@ -139,7 +139,7 @@ describe("Reload", () => { const postReloadRngState = Phaser.Math.RND.state(); expect(preReloadRngState).toBe(postReloadRngState); - }, 20000); + }); it("should not have RNG inconsistencies at a Daily run regular trainer fight", async () => { game.override.battleStyle("single").startingWave(45); @@ -152,7 +152,7 @@ describe("Reload", () => { const postReloadRngState = Phaser.Math.RND.state(); expect(preReloadRngState).toBe(postReloadRngState); - }, 20000); + }); it("should not have RNG inconsistencies at a Daily run wave 50 Boss fight", async () => { game.override.battleStyle("single").startingWave(50); @@ -165,5 +165,5 @@ describe("Reload", () => { const postReloadRngState = Phaser.Math.RND.state(); expect(preReloadRngState).toBe(postReloadRngState); - }, 20000); + }); }); diff --git a/test/ui/pokedex.test.ts b/test/ui/pokedex.test.ts index 53ebe04a4ed..d3fc4b11968 100644 --- a/test/ui/pokedex.test.ts +++ b/test/ui/pokedex.test.ts @@ -1,6 +1,6 @@ import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, it, type MockInstance, vi } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import PokedexUiHandler from "#app/ui/pokedex-ui-handler"; import { FilterTextRow } from "#app/ui/filter-text"; import { allAbilities } from "#app/data/data-lists"; @@ -46,7 +46,6 @@ function permutations(array: T[], length: number): T[][] { describe("UI - Pokedex", () => { let phaserGame: Phaser.Game; let game: GameManager; - const mocks: MockInstance[] = []; beforeAll(() => { phaserGame = new Phaser.Game({ @@ -55,9 +54,6 @@ describe("UI - Pokedex", () => { }); afterEach(() => { - while (mocks.length > 0) { - mocks.pop()?.mockRestore(); - } game.phaseInterceptor.restoreOg(); }); @@ -185,10 +181,10 @@ describe("UI - Pokedex", () => { checks.push(...pokemon.forms); } for (const p of checks) { - mocks.push(vi.spyOn(p, "ability1", "get").mockReturnValue(ability)); - mocks.push(vi.spyOn(p, "ability2", "get").mockReturnValue(ability2)); - mocks.push(vi.spyOn(p, "abilityHidden", "get").mockReturnValue(hidden)); - mocks.push(vi.spyOn(p, "getPassiveAbility").mockReturnValue(passive)); + vi.spyOn(p, "ability1", "get").mockReturnValue(ability); + vi.spyOn(p, "ability2", "get").mockReturnValue(ability2); + vi.spyOn(p, "abilityHidden", "get").mockReturnValue(hidden); + vi.spyOn(p, "getPassiveAbility").mockReturnValue(passive); } } diff --git a/test/ui/starter-select.test.ts b/test/ui/starter-select.test.ts index be508a2b69c..3e540c4e2c5 100644 --- a/test/ui/starter-select.test.ts +++ b/test/ui/starter-select.test.ts @@ -94,7 +94,7 @@ describe("UI - Starter select", () => { expect(game.scene.getPlayerParty()[0].shiny).toBe(true); expect(game.scene.getPlayerParty()[0].variant).toBe(2); expect(game.scene.getPlayerParty()[0].gender).toBe(Gender.MALE); - }, 20000); + }); it("Bulbasaur - shiny - variant 2 female hardy overgrow", async () => { await game.importData("./test/testUtils/saves/everything.prsv"); @@ -156,7 +156,7 @@ describe("UI - Starter select", () => { expect(game.scene.getPlayerParty()[0].variant).toBe(2); expect(game.scene.getPlayerParty()[0].nature).toBe(Nature.HARDY); expect(game.scene.getPlayerParty()[0].getAbility().id).toBe(AbilityId.OVERGROW); - }, 20000); + }); it("Bulbasaur - shiny - variant 2 female lonely chlorophyl", async () => { await game.importData("./test/testUtils/saves/everything.prsv"); @@ -221,7 +221,7 @@ describe("UI - Starter select", () => { expect(game.scene.getPlayerParty()[0].gender).toBe(Gender.FEMALE); expect(game.scene.getPlayerParty()[0].nature).toBe(Nature.LONELY); expect(game.scene.getPlayerParty()[0].getAbility().id).toBe(AbilityId.CHLOROPHYLL); - }, 20000); + }); it("Bulbasaur - shiny - variant 2 female", async () => { await game.importData("./test/testUtils/saves/everything.prsv"); @@ -282,7 +282,7 @@ describe("UI - Starter select", () => { expect(game.scene.getPlayerParty()[0].shiny).toBe(true); expect(game.scene.getPlayerParty()[0].variant).toBe(2); expect(game.scene.getPlayerParty()[0].gender).toBe(Gender.FEMALE); - }, 20000); + }); it("Bulbasaur - not shiny", async () => { await game.importData("./test/testUtils/saves/everything.prsv"); @@ -342,7 +342,7 @@ describe("UI - Starter select", () => { expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(SpeciesId.BULBASAUR); expect(game.scene.getPlayerParty()[0].shiny).toBe(false); expect(game.scene.getPlayerParty()[0].variant).toBe(0); - }, 20000); + }); it("Bulbasaur - shiny - variant 1", async () => { await game.importData("./test/testUtils/saves/everything.prsv"); @@ -404,7 +404,7 @@ describe("UI - Starter select", () => { expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(SpeciesId.BULBASAUR); expect(game.scene.getPlayerParty()[0].shiny).toBe(true); expect(game.scene.getPlayerParty()[0].variant).toBe(1); - }, 20000); + }); it("Bulbasaur - shiny - variant 0", async () => { await game.importData("./test/testUtils/saves/everything.prsv"); @@ -465,7 +465,7 @@ describe("UI - Starter select", () => { expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(SpeciesId.BULBASAUR); expect(game.scene.getPlayerParty()[0].shiny).toBe(true); expect(game.scene.getPlayerParty()[0].variant).toBe(0); - }, 20000); + }); it("Check if first pokemon in party is caterpie from gen 1 and 1rd row, 3rd column", async () => { await game.importData("./test/testUtils/saves/everything.prsv"); @@ -529,7 +529,7 @@ describe("UI - Starter select", () => { }); await game.phaseInterceptor.whenAboutToRun(EncounterPhase); expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(SpeciesId.CATERPIE); - }, 20000); + }); it("Check if first pokemon in party is nidoran_m from gen 1 and 2nd row, 4th column (cursor (9+4)-1)", async () => { await game.importData("./test/testUtils/saves/everything.prsv"); @@ -595,5 +595,5 @@ describe("UI - Starter select", () => { }); await game.phaseInterceptor.whenAboutToRun(EncounterPhase); expect(game.scene.getPlayerParty()[0].species.speciesId).toBe(SpeciesId.NIDORAN_M); - }, 20000); + }); }); diff --git a/test/ui/transfer-item.test.ts b/test/ui/transfer-item.test.ts index ef0fe502c6e..572d56c5903 100644 --- a/test/ui/transfer-item.test.ts +++ b/test/ui/transfer-item.test.ts @@ -77,7 +77,7 @@ describe("UI - Transfer Items", () => { }); await game.phaseInterceptor.to("SelectModifierPhase"); - }, 20000); + }); it("check transfer option for pokemon to transfer to", async () => { game.onNextPrompt("SelectModifierPhase", UiMode.PARTY, () => { @@ -98,5 +98,5 @@ describe("UI - Transfer Items", () => { }); await game.phaseInterceptor.to("SelectModifierPhase"); - }, 20000); + }); }); From f8d8a3de84037fc35a54b7dc9a96f5d7707855a8 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Sun, 15 Jun 2025 00:51:21 -0700 Subject: [PATCH 246/262] [Dev] Enable dependency cruiser workflow (#5966) * Update `.dependency-cruiser.cjs` config file * Update GitHub workflow * Have `depcruise` check `test/` as well * Remove circular import between `battle-anims.ts` and `battler-tags.ts` --- .dependency-cruiser.cjs | 22 +++++++++--------- .github/workflows/linting.yml | 42 +++++++++++++++++++++++++++++++++++ .github/workflows/quality.yml | 41 ---------------------------------- package.json | 2 +- src/data/battle-anims.ts | 18 ++++++++++----- 5 files changed, 66 insertions(+), 59 deletions(-) create mode 100644 .github/workflows/linting.yml delete mode 100644 .github/workflows/quality.yml diff --git a/.dependency-cruiser.cjs b/.dependency-cruiser.cjs index eccec089f1e..84d01599727 100644 --- a/.dependency-cruiser.cjs +++ b/.dependency-cruiser.cjs @@ -4,7 +4,7 @@ module.exports = { { name: "only-type-imports", severity: "error", - comment: "Files in enums and @types may only use type imports.", + comment: "Files in 'enums/' and '@types/' must only use type imports.", from: { path: ["(^|/)src/@types", "(^|/)src/enums"], }, @@ -14,7 +14,7 @@ module.exports = { }, { name: "no-circular-at-runtime", - severity: "warn", + severity: "error", comment: "This dependency is part of a circular relationship. You might want to revise " + "your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ", @@ -34,7 +34,7 @@ module.exports = { "add an exception for it in your dependency-cruiser configuration. By default " + "this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration " + "files (.d.ts), tsconfig.json and some of the babel and webpack configs.", - severity: "warn", + severity: "error", from: { orphan: true, pathNot: [ @@ -42,8 +42,7 @@ module.exports = { "[.]d[.]ts$", // TypeScript declaration files "(^|/)tsconfig[.]json$", // TypeScript config "(^|/)(?:babel|webpack)[.]config[.](?:js|cjs|mjs|ts|cts|mts|json)$", // other configs - // anything in src/@types - "(^|/)src/@types/", + "(^|/)test/.+[.]setup[.]ts", // Vitest setup files ], }, to: {}, @@ -53,7 +52,7 @@ module.exports = { comment: "A module depends on a node core module that has been deprecated. Find an alternative - these are " + "bound to exist - node doesn't deprecate lightly.", - severity: "warn", + severity: "error", from: {}, to: { dependencyTypes: ["core"], @@ -86,7 +85,7 @@ module.exports = { comment: "This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later " + "version of that module, or find an alternative. Deprecated modules are a security risk.", - severity: "warn", + severity: "error", from: {}, to: { dependencyTypes: ["deprecated"], @@ -122,7 +121,7 @@ module.exports = { "Likely this module depends on an external ('npm') package that occurs more than once " + "in your package.json i.e. bot as a devDependencies and in dependencies. This will cause " + "maintenance problems later on.", - severity: "warn", + severity: "error", from: {}, to: { moreThanOneDependencyType: true, @@ -133,7 +132,7 @@ module.exports = { }, }, - /* rules you might want to tweak for your specific situation: */ + // rules you might want to tweak for your specific situation: { name: "not-to-spec", @@ -188,7 +187,7 @@ module.exports = { "in your package.json. This makes sense if your package is e.g. a plugin, but in " + "other cases - maybe not so much. If the use of a peer dependency is intentional " + "add an exception to your dependency-cruiser configuration.", - severity: "warn", + severity: "error", from: {}, to: { dependencyTypes: ["npm-peer"], @@ -196,6 +195,7 @@ module.exports = { }, ], options: { + exclude: ["src/plugins/vite/*", "src/vite.env.d.ts"], /* Which modules not to follow further when encountered */ doNotFollow: { /* path: an array of regular expressions in strings to match against */ @@ -235,7 +235,7 @@ module.exports = { true: also detect dependencies that only exist before typescript-to-javascript compilation "specify": for each dependency identify whether it only exists before compilation or also after */ - // tsPreCompilationDeps: false, + tsPreCompilationDeps: true, /* list of extensions to scan that aren't javascript or compile-to-javascript. Empty by default. Only put extensions in here that you want to take into diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml new file mode 100644 index 00000000000..0fdbc8b1952 --- /dev/null +++ b/.github/workflows/linting.yml @@ -0,0 +1,42 @@ +name: Linting + +on: + push: + branches: + - main + - beta + pull_request: + branches: + - main + - beta + merge_group: + types: [checks_requested] + +jobs: + run-linters: + name: Run linters + runs-on: ubuntu-latest + + steps: + - name: Check out Git repository + uses: actions/checkout@v4 + with: + submodules: 'recursive' + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version-file: '.nvmrc' + cache: 'npm' + + - name: Install Node.js dependencies + run: npm ci + + - name: Run ESLint + run: npm run eslint-ci + + - name: Lint with Biome + run: npm run biome-ci + + - name: Check dependencies with depcruise + run: npm run depcruise \ No newline at end of file diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml deleted file mode 100644 index 36233248472..00000000000 --- a/.github/workflows/quality.yml +++ /dev/null @@ -1,41 +0,0 @@ -name: Biome Code Quality - -on: - # Trigger the workflow on push or pull request, - # but only for the main branch - push: - branches: - - main # Trigger on push events to the main branch - - beta # Trigger on push events to the beta branch - pull_request: - branches: - - main # Trigger on pull request events targeting the main branch - - beta # Trigger on pull request events targeting the beta branch - merge_group: - types: [checks_requested] - -jobs: - run-linters: # Define a job named "run-linters" - name: Run linters # Human-readable name for the job - runs-on: ubuntu-latest # Specify the latest Ubuntu runner for the job - - steps: - - name: Check out Git repository # Step to check out the repository - uses: actions/checkout@v4 # Use the checkout action version 4 - with: - submodules: 'recursive' - - - name: Set up Node.js # Step to set up Node.js environment - uses: actions/setup-node@v4 # Use the setup-node action version 4 - with: - node-version-file: '.nvmrc' - cache: 'npm' - - - name: Install Node.js dependencies # Step to install Node.js dependencies - run: npm ci # Use 'npm ci' to install dependencies - - - name: eslint # Step to run linters - run: npm run eslint-ci - - - name: Lint with Biome # Step to run linters - run: npm run biome-ci \ No newline at end of file diff --git a/package.json b/package.json index b927542788d..cd2b7b18494 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "biome": "biome check --write --changed --no-errors-on-unmatched", "biome-ci": "biome ci --diagnostic-level=error --reporter=github --no-errors-on-unmatched", "docs": "typedoc", - "depcruise": "depcruise src", + "depcruise": "depcruise src test", "depcruise:graph": "depcruise src --output-type dot | node dependency-graph.js > dependency-graph.svg", "postinstall": "npx lefthook install && npx lefthook run post-merge", "update-version:patch": "npm version patch --force --no-git-tag-version", diff --git a/src/data/battle-anims.ts b/src/data/battle-anims.ts index 131086625df..be060b57e9c 100644 --- a/src/data/battle-anims.ts +++ b/src/data/battle-anims.ts @@ -1,12 +1,18 @@ import { globalScene } from "#app/global-scene"; -import { allMoves } from "./data-lists"; +import { allMoves } from "#app/data/data-lists"; import { MoveFlags } from "#enums/MoveFlags"; -import type Pokemon from "../field/pokemon"; -import { type nil, getFrameMs, getEnumKeys, getEnumValues, animationFileName, coerceArray } from "../utils/common"; +import type Pokemon from "#app/field/pokemon"; +import { + type nil, + getFrameMs, + getEnumKeys, + getEnumValues, + animationFileName, + coerceArray, + isNullOrUndefined, +} from "#app/utils/common"; import type { BattlerIndex } from "#enums/battler-index"; import { MoveId } from "#enums/move-id"; -import { SubstituteTag } from "./battler-tags"; -import { isNullOrUndefined } from "../utils/common"; import Phaser from "phaser"; import { EncounterAnim } from "#enums/encounter-anims"; import { AnimBlendType, AnimFrameTarget, AnimFocus, ChargeAnim, CommonAnim } from "#enums/move-anims-common"; @@ -845,7 +851,7 @@ export abstract class BattleAnim { return; } - const targetSubstitute = !!onSubstitute && user !== target ? target.getTag(SubstituteTag) : null; + const targetSubstitute = !!onSubstitute && user !== target ? target.getTag(BattlerTagType.SUBSTITUTE) : null; const userSprite = user.getSprite(); const targetSprite = targetSubstitute?.sprite ?? target.getSprite(); From 5efdb0dc0b5104ee54c35121710b8ac90adbfb3b Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Sun, 15 Jun 2025 13:52:44 -0400 Subject: [PATCH 247/262] [Refactor] Fix issues with "last move selected" vs "used" (#5810) * Added `MoveUseType` and refactored MEP * Fixed Wimp out tests & ME code finally i think all the booleans are gone i hope * Added version migration for last resort and co. buh gumbug * Fixed various bugs and added tests for previous bugfixes * Reverted a couple doc changes * WIP * Update pokemon-species.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update pokemon-phase.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Fixed remaining tests (I think) * Reverted rollout test changes * Fixed command phase bug causing metronome test timeout * Revert early_bird.test.ts * Fix biome.jsonc * Made `MoveUseType` start at 1 As per @DayKev's request * Fixed a thing * Fixed bolt beak condition to be marginally less jank * Applied some review suggestions * Reverted move phase operations * Added helper functions complete with markdown tables * Fixed things * Update battler-tags.ts * Fixed random issues * Fixed code * Fixed comment * Fixed import issues * Fix disable.test.ts conflicts * Update instruct.test.ts * Update `biome.jsonc` * Renamed `MoveUseType` to `MoveUseMode`; applied review comments * Fixed space * Fixed phasemanager bugs * Fixed instruct test to not bork * Fixed gorilla tactics bug * Battler Tags doc fixes * Fixed formatting and suttff * Minor comment updates and remove unused imports in `move.ts` * Re-add `public`, remove unnecessary default value in `battler-tags.ts` * Restore `{}` in `turn-start-phase.ts` Fixes `lint/correctness/noSwitchDeclarations` * Remove extra space in TSDoc in `move-phase.ts` * Use `game.field` instead of `game.scene` in `instruct.test.ts` Also `game.toEndOfTurn()` instead of `game.phaseInterceptor.to("BerryPhase")` * Use `game.field` instead of `game.scene` in `metronome.test.ts` * Use `toEndOfTurn()` instead of `to("BerryPhase")` in `powder.test.ts` * Convert `MoveUseMode` enum to `const` object * Update move-phase.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Add `enumValueToKey` utility function * Apply Biome --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- biome.jsonc | 23 +- src/data/abilities/ability.ts | 59 ++- src/data/arena-tag.ts | 5 +- src/data/battler-tags.ts | 199 +++++---- src/data/moves/invalid-moves.ts | 27 +- src/data/moves/move.ts | 405 ++++++++++-------- src/data/moves/pokemon-move.ts | 7 +- .../encounters/absolute-avarice-encounter.ts | 3 +- .../encounters/clowning-around-encounter.ts | 10 +- .../encounters/dancing-lessons-encounter.ts | 3 +- .../encounters/fiery-fallout-encounter.ts | 8 +- .../slumbering-snorlax-encounter.ts | 3 +- .../encounters/the-strong-stuff-encounter.ts | 5 +- .../encounters/trash-to-treasure-encounter.ts | 5 +- .../encounters/uncommon-breed-encounter.ts | 3 +- .../mystery-encounters/mystery-encounter.ts | 6 +- .../utils/encounter-phase-utils.ts | 30 +- src/data/pokemon-species.ts | 7 +- src/enums/battler-tag-lapse-type.ts | 29 +- src/enums/move-use-mode.ts | 149 +++++++ src/field/arena.ts | 3 + src/field/pokemon.ts | 101 +++-- src/overrides.ts | 8 +- src/phase-manager.ts | 2 +- src/phases/command-phase.ts | 26 +- src/phases/move-charge-phase.ts | 60 ++- src/phases/move-effect-phase.ts | 140 +++--- src/phases/move-end-phase.ts | 2 +- src/phases/move-phase.ts | 281 ++++++------ src/phases/pokemon-phase.ts | 12 +- src/phases/pokemon-transform-phase.ts | 2 +- src/phases/turn-start-phase.ts | 70 ++- .../version_migration/version_converter.ts | 5 + .../version_migration/versions/v1_10_0.ts | 48 +++ src/ui/fight-ui-handler.ts | 83 ++-- src/ui/party-ui-handler.ts | 12 +- src/utils/common.ts | 22 + test/abilities/gorilla_tactics.test.ts | 54 ++- test/data/status_effect.test.ts | 3 +- test/moves/after_you.test.ts | 34 ++ test/moves/copycat.test.ts | 30 +- test/moves/dig.test.ts | 20 +- test/moves/disable.test.ts | 127 +++--- test/moves/electro_shot.test.ts | 2 +- test/moves/instruct.test.ts | 194 ++++++--- test/moves/last-resort.test.ts | 10 +- test/moves/metronome.test.ts | 48 ++- test/moves/powder.test.ts | 16 +- test/moves/quash.test.ts | 38 +- test/moves/spit_up.test.ts | 7 +- test/moves/stockpile.test.ts | 3 +- test/moves/swallow.test.ts | 7 +- .../fun-and-games-encounter.test.ts | 15 +- test/testUtils/gameManager.ts | 12 +- test/testUtils/helpers/moveHelper.ts | 11 +- 55 files changed, 1594 insertions(+), 900 deletions(-) create mode 100644 src/enums/move-use-mode.ts create mode 100644 src/system/version_migration/versions/v1_10_0.ts diff --git a/biome.jsonc b/biome.jsonc index f427debb198..d183334ad58 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -28,7 +28,6 @@ ".vscode/*", "*.css", // TODO? "*.html", // TODO? - "src/overrides.ts", // TODO: these files are too big and complex, ignore them until their respective refactors "src/data/moves/move.ts", @@ -120,6 +119,28 @@ } } } + }, + + // Overrides to prevent unused import removal inside `overrides.ts` and enums files (for TSDoc linkcodes) + { + "include": ["src/overrides.ts", "src/enums/*"], + "linter": { + "rules": { + "correctness": { + "noUnusedImports": "off" + } + } + } + }, + { + "include": ["src/overrides.ts"], + "linter": { + "rules": { + "style": { + "useImportType": "off" + } + } + } } ] } diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index ef4529c361e..c9684986c46 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -7,7 +7,6 @@ import { isNullOrUndefined, randSeedItem, randSeedInt, - type Constructor, randSeedFloat, coerceArray, } from "#app/utils/common"; @@ -35,12 +34,11 @@ import { Command } from "#enums/command"; import { BerryModifierType } from "#app/modifier/modifier-type"; import { getPokeballName } from "#app/data/pokeball"; import { BattleType } from "#enums/battle-type"; -import type { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { globalScene } from "#app/global-scene"; import { allAbilities } from "#app/data/data-lists"; // Enum imports -import { Stat, type BattleStat, BATTLE_STATS, EFFECTIVE_STATS, getStatKey, type EffectiveStat } from "#enums/stat"; +import { Stat, BATTLE_STATS, EFFECTIVE_STATS, getStatKey } from "#enums/stat"; import { PokemonType } from "#enums/pokemon-type"; import { PokemonAnimType } from "#enums/pokemon-anim-type"; import { StatusEffect } from "#enums/status-effect"; @@ -54,12 +52,16 @@ import { SwitchType } from "#enums/switch-type"; import { MoveFlags } from "#enums/MoveFlags"; import { MoveTarget } from "#enums/MoveTarget"; import { MoveCategory } from "#enums/MoveCategory"; -import type { BerryType } from "#enums/berry-type"; import { CommonAnim } from "#enums/move-anims-common"; -import { getBerryEffectFunc } from "../berry"; +import { getBerryEffectFunc } from "#app/data/berry"; import { BerryUsedEvent } from "#app/events/battle-scene"; +import { noAbilityTypeOverrideMoves } from "#app/data/moves/invalid-moves"; +import { MoveUseMode } from "#enums/move-use-mode"; // Type imports +import type { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; +import type { BattleStat, EffectiveStat } from "#enums/stat"; +import type { BerryType } from "#enums/berry-type"; import type { EnemyPokemon } from "#app/field/pokemon"; import type { PokemonMove } from "../moves/pokemon-move"; import type Pokemon from "#app/field/pokemon"; @@ -76,7 +78,7 @@ import type { import type { BattlerIndex } from "#enums/battler-index"; import type Move from "#app/data/moves/move"; import type { ArenaTrapTag, SuppressAbilitiesTag } from "#app/data/arena-tag"; -import { noAbilityTypeOverrideMoves } from "../moves/invalid-moves"; +import type { Constructor } from "#app/utils/common"; import type { Localizable } from "#app/@types/locales"; import { applyAbAttrs } from "./apply-ab-attrs"; @@ -1915,7 +1917,7 @@ export class PostDefendMoveDisableAbAttr extends PostDefendAbAttr { _args: any[], ): boolean { return ( - attacker.getTag(BattlerTagType.DISABLED) === null && + isNullOrUndefined(attacker.getTag(BattlerTagType.DISABLED)) && move.doesFlagEffectApply({ flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon }) && (this.chance === -1 || pokemon.randBattleSeedInt(100) < this.chance) ); @@ -2733,7 +2735,6 @@ export class AllyStatMultiplierAbAttr extends AbAttr { /** * Takes effect whenever a move succesfully executes, such as gorilla tactics' move-locking. * (More specifically, whenever a move is pushed to the move history) - * @extends AbAttr */ export class ExecutedMoveAbAttr extends AbAttr { canApplyExecutedMove(_pokemon: Pokemon, _simulated: boolean): boolean { @@ -2744,16 +2745,16 @@ export class ExecutedMoveAbAttr extends AbAttr { } /** - * Ability attribute for Gorilla Tactics - * @extends ExecutedMoveAbAttr + * Ability attribute for {@linkcode AbilityId.GORILLA_TACTICS | Gorilla Tactics} + * to lock the user into its first selected move. */ export class GorillaTacticsAbAttr extends ExecutedMoveAbAttr { constructor(showAbility = false) { super(showAbility); } - override canApplyExecutedMove(pokemon: Pokemon, simulated: boolean): boolean { - return simulated || !pokemon.getTag(BattlerTagType.GORILLA_TACTICS); + override canApplyExecutedMove(pokemon: Pokemon, _simulated: boolean): boolean { + return !pokemon.getTag(BattlerTagType.GORILLA_TACTICS); } override applyExecutedMove(pokemon: Pokemon, simulated: boolean): void { @@ -6063,14 +6064,19 @@ export class PostDancingMoveAbAttr extends PostMoveUsedAbAttr { ): void { if (!simulated) { dancer.turnData.extraTurns++; - const phaseManager = globalScene.phaseManager; // If the move is an AttackMove or a StatusMove the Dancer must replicate the move on the source of the Dance if (move.getMove().is("AttackMove") || move.getMove().is("StatusMove")) { const target = this.getTarget(dancer, source, targets); - phaseManager.unshiftNew("MovePhase", dancer, target, move, true, true); + globalScene.phaseManager.unshiftNew("MovePhase", dancer, target, move, MoveUseMode.INDIRECT); } else if (move.getMove().is("SelfStatusMove")) { // If the move is a SelfStatusMove (ie. Swords Dance) the Dancer should replicate it on itself - phaseManager.unshiftNew("MovePhase", dancer, [dancer.getBattlerIndex()], move, true, true); + globalScene.phaseManager.unshiftNew( + "MovePhase", + dancer, + [dancer.getBattlerIndex()], + move, + MoveUseMode.INDIRECT, + ); } } } @@ -7378,6 +7384,7 @@ class ForceSwitchOutHelper { * @param pokemon The {@linkcode Pokemon} attempting to switch out. * @returns `true` if the switch is successful */ + // TODO: Make this cancel pending move phases on the switched out target public switchOutLogic(pokemon: Pokemon): boolean { const switchOutTarget = pokemon; /** @@ -8378,10 +8385,10 @@ export function initAbilities() { .attr(WonderSkinAbAttr) .ignorable(), new Ability(AbilityId.ANALYTIC, 5) - .attr(MovePowerBoostAbAttr, (user, _target, _move) => { - const movePhase = globalScene.phaseManager.findPhase((phase) => phase.is("MovePhase") && phase.pokemon.id !== user?.id); - return isNullOrUndefined(movePhase); - }, 1.3), + .attr(MovePowerBoostAbAttr, (user) => + // Boost power if all other Pokemon have already moved (no other moves are slated to execute) + !globalScene.phaseManager.findPhase((phase) => phase.is("MovePhase") && phase.pokemon.id !== user?.id), + 1.3), new Ability(AbilityId.ILLUSION, 5) // The Pokemon generate an illusion if it's available .attr(IllusionPreSummonAbAttr, false) @@ -8655,7 +8662,13 @@ export function initAbilities() { .attr(PostFaintHPDamageAbAttr) .bypassFaint(), new Ability(AbilityId.DANCER, 7) - .attr(PostDancingMoveAbAttr), + .attr(PostDancingMoveAbAttr) + /* Incorrect interations with: + * Petal Dance (should not lock in or count down timer; currently does both) + * Flinches (due to tag being removed earlier) + * Failed/protected moves (should not trigger if original move is protected against) + */ + .edgeCase(), new Ability(AbilityId.BATTERY, 7) .attr(AllyMoveCategoryPowerBoostAbAttr, [ MoveCategory.SPECIAL ], 1.3), new Ability(AbilityId.FLUFFY, 7) @@ -8796,9 +8809,11 @@ export function initAbilities() { new Ability(AbilityId.WANDERING_SPIRIT, 8) .attr(PostDefendAbilitySwapAbAttr) .bypassFaint() - .edgeCase(), // interacts incorrectly with rock head. It's meant to switch abilities before recoil would apply so that a pokemon with rock head would lose rock head first and still take the recoil + .edgeCase(), // interacts incorrectly with rock head. It's meant to switch abilities before recoil would apply so that a pokemon with rock head would lose rock head first and still take the recoil new Ability(AbilityId.GORILLA_TACTICS, 8) - .attr(GorillaTacticsAbAttr), + .attr(GorillaTacticsAbAttr) + // TODO: Verify whether Gorilla Tactics increases struggle's power or not + .edgeCase(), new Ability(AbilityId.NEUTRALIZING_GAS, 8, 2) .attr(PostSummonAddArenaTagAbAttr, true, ArenaTagType.NEUTRALIZING_GAS, 0) .attr(PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr) diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index da1bbbda2e9..494a0438b18 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -20,6 +20,7 @@ import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; import { MoveId } from "#enums/move-id"; import { ArenaTagSide } from "#enums/arena-tag-side"; +import { MoveUseMode } from "#enums/move-use-mode"; export abstract class ArenaTag { constructor( @@ -875,13 +876,13 @@ export class DelayedAttackTag extends ArenaTag { const ret = super.lapse(arena); if (!ret) { + // TODO: This should not add to move history (for Spite) globalScene.phaseManager.unshiftNew( "MoveEffectPhase", this.sourceId!, [this.targetIndex], allMoves[this.sourceMove!], - false, - true, + MoveUseMode.FOLLOW_UP, ); // TODO: are those bangs correct? } diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 98cefb78bd5..8405fd1dd4d 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -31,8 +31,15 @@ import { EFFECTIVE_STATS, getStatKey, Stat, type BattleStat, type EffectiveStat import { StatusEffect } from "#enums/status-effect"; import { WeatherType } from "#enums/weather-type"; import { isNullOrUndefined } from "#app/utils/common"; +import { MoveUseMode } from "#enums/move-use-mode"; +import { invalidEncoreMoves } from "./moves/invalid-moves"; import { BattlerTagLapseType } from "#enums/battler-tag-lapse-type"; +/** + * A {@linkcode BattlerTag} represents a semi-persistent effect that can be attached to a {@linkcode Pokemon}. + * Tags can trigger various effects throughout a turn, and are cleared on switching out + * or through their respective {@linkcode BattlerTag.lapse | lapse} methods. + */ export class BattlerTag { public tagType: BattlerTagType; public lapseTypes: BattlerTagLapseType[]; @@ -69,7 +76,7 @@ export class BattlerTag { /** * Tick down this {@linkcode BattlerTag}'s duration. - * @returns `true` if the tag should be kept (`turnCount` > 0`) + * @returns `true` if the tag should be kept (`turnCount > 0`) */ lapse(_pokemon: Pokemon, _lapseType: BattlerTagLapseType): boolean { // TODO: Maybe flip this (return `true` if tag needs removal) @@ -267,17 +274,18 @@ export class DisabledTag extends MoveRestrictionBattlerTag { /** * @override * - * Ensures that move history exists on `pokemon` and has a valid move. If so, sets the {@linkcode moveId} and shows a message. - * Otherwise the move ID will not get assigned and this tag will get removed next turn. + * Attempt to disable the target's last move by setting this tag's {@linkcode moveId} + * and showing a message. */ override onAdd(pokemon: Pokemon): void { - super.onAdd(pokemon); - - const move = pokemon.getLastXMoves(-1).find(m => !m.virtual); - if (isNullOrUndefined(move) || move.move === MoveId.STRUGGLE || move.move === MoveId.NONE) { + // Disable fails against struggle or an empty move history + // TODO: Confirm if this is redundant given Disable/Cursed Body's disable conditions + const move = pokemon.getLastNonVirtualMove(); + if (isNullOrUndefined(move) || move.move === MoveId.STRUGGLE) { return; } + super.onAdd(pokemon); this.moveId = move.move; globalScene.phaseManager.queueMessage( @@ -327,7 +335,6 @@ export class DisabledTag extends MoveRestrictionBattlerTag { /** * Tag used by Gorilla Tactics to restrict the user to using only one move. - * @extends MoveRestrictionBattlerTag */ export class GorillaTacticsTag extends MoveRestrictionBattlerTag { private moveId = MoveId.NONE; @@ -336,34 +343,30 @@ export class GorillaTacticsTag extends MoveRestrictionBattlerTag { super(BattlerTagType.GORILLA_TACTICS, BattlerTagLapseType.CUSTOM, 0); } - /** @override */ override isMoveRestricted(move: MoveId): boolean { return move !== this.moveId; } /** - * @override - * @param {Pokemon} pokemon the {@linkcode Pokemon} to check if the tag can be added - * @returns `true` if the pokemon has a valid move and no existing {@linkcode GorillaTacticsTag}; `false` otherwise + * Ensures that move history exists on {@linkcode Pokemon} and has a valid move to lock into. + * @param pokemon - The {@linkcode Pokemon} to add the tag to + * @returns `true` if the tag can be added */ override canAdd(pokemon: Pokemon): boolean { - return this.getLastValidMove(pokemon) !== undefined && !pokemon.getTag(GorillaTacticsTag); + // Choice items ignore struggle, so Gorilla Tactics should too + const lastSelectedMove = pokemon.getLastNonVirtualMove(); + return !isNullOrUndefined(lastSelectedMove) && lastSelectedMove.move !== MoveId.STRUGGLE; } /** - * Ensures that move history exists on {@linkcode Pokemon} and has a valid move. - * If so, sets the {@linkcode moveId} and increases the user's Attack by 50%. - * @override - * @param {Pokemon} pokemon the {@linkcode Pokemon} to add the tag to + * Sets this tag's {@linkcode moveId} and increases the user's Attack by 50%. + * @param pokemon - The {@linkcode Pokemon} to add the tag to */ override onAdd(pokemon: Pokemon): void { - const lastValidMove = this.getLastValidMove(pokemon); + super.onAdd(pokemon); - if (!lastValidMove) { - return; - } - - this.moveId = lastValidMove; + // Bang is justified as tag is not added if prior move doesn't exist + this.moveId = pokemon.getLastNonVirtualMove()!.move; pokemon.setStat(Stat.ATK, pokemon.getStat(Stat.ATK, false) * 1.5, false); } @@ -378,29 +381,16 @@ export class GorillaTacticsTag extends MoveRestrictionBattlerTag { } /** - * - * @override - * @param {Pokemon} pokemon n/a - * @param {MoveId} _move {@linkcode MoveId} ID of the move being denied - * @returns {string} text to display when the move is denied + * Return the text displayed when a move is restricted. + * @param pokemon - The {@linkcode Pokemon} with this tag. + * @returns A string containing the text to display when the move is denied */ - override selectionDeniedText(pokemon: Pokemon, _move: MoveId): string { + override selectionDeniedText(pokemon: Pokemon): string { return i18next.t("battle:canOnlyUseMove", { moveName: allMoves[this.moveId].name, pokemonName: getPokemonNameWithAffix(pokemon), }); } - - /** - * Gets the last valid move from the pokemon's move history. - * @param {Pokemon} pokemon {@linkcode Pokemon} to get the last valid move from - * @returns {MoveId | undefined} the last valid move from the pokemon's move history - */ - getLastValidMove(pokemon: Pokemon): MoveId | undefined { - const move = pokemon.getLastXMoves().find(m => m.move !== MoveId.NONE && m.move !== MoveId.STRUGGLE && !m.virtual); - - return move?.move; - } } /** @@ -414,8 +404,8 @@ export class RechargingTag extends BattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - // Queue a placeholder move for the Pokemon to "use" next turn - pokemon.getMoveQueue().push({ move: MoveId.NONE, targets: [] }); + // Queue a placeholder move for the Pokemon to "use" next turn. + pokemon.pushMoveQueue({ move: MoveId.NONE, targets: [], useMode: MoveUseMode.NORMAL }); } /** Cancels the source's move this turn and queues a "__ must recharge!" message */ @@ -660,6 +650,7 @@ export class InterruptedTag extends BattlerTag { move: MoveId.NONE, result: MoveResult.OTHER, targets: [], + useMode: MoveUseMode.NORMAL, }); } @@ -985,42 +976,45 @@ export class PowderTag extends BattlerTag { } /** - * Applies Powder's effects before the tag owner uses a Fire-type move. - * Also causes the tag to expire at the end of turn. - * @param pokemon {@linkcode Pokemon} the owner of this tag - * @param lapseType {@linkcode BattlerTagLapseType} the type of lapse functionality to carry out - * @returns `true` if the tag should not expire after this lapse; `false` otherwise. + * Applies Powder's effects before the tag owner uses a Fire-type move, damaging and canceling its action. + * Lasts until the end of the turn. + * @param pokemon - The {@linkcode Pokemon} with this tag. + * @param lapseType - The {@linkcode BattlerTagLapseType} dictating how this tag is being activated + * @returns `true` if the tag should remain active. */ lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { - if (lapseType === BattlerTagLapseType.PRE_MOVE) { - const movePhase = globalScene.phaseManager.getCurrentPhase(); - if (movePhase?.is("MovePhase")) { - const move = movePhase.move.getMove(); - const weather = globalScene.arena.weather; - if ( - pokemon.getMoveType(move) === PokemonType.FIRE && - !(weather && weather.weatherType === WeatherType.HEAVY_RAIN && !weather.isEffectSuppressed()) - ) { - movePhase.fail(); - movePhase.showMoveText(); + const movePhase = globalScene.phaseManager.getCurrentPhase(); + if (lapseType !== BattlerTagLapseType.PRE_MOVE || !movePhase?.is("MovePhase")) { + return false; + } - const idx = pokemon.getBattlerIndex(); - - globalScene.phaseManager.unshiftNew("CommonAnimPhase", idx, idx, CommonAnim.POWDER); - - const cancelDamage = new BooleanHolder(false); - applyAbAttrs("BlockNonDirectDamageAbAttr", pokemon, cancelDamage); - if (!cancelDamage.value) { - pokemon.damageAndUpdate(Math.floor(pokemon.getMaxHp() / 4), { result: HitResult.INDIRECT }); - } - - // "When the flame touched the powder\non the Pokémon, it exploded!" - globalScene.phaseManager.queueMessage(i18next.t("battlerTags:powderLapse", { moveName: move.name })); - } - } + const move = movePhase.move.getMove(); + const weather = globalScene.arena.weather; + if ( + pokemon.getMoveType(move) !== PokemonType.FIRE || + (weather?.weatherType === WeatherType.HEAVY_RAIN && !weather.isEffectSuppressed()) // Heavy rain takes priority over powder + ) { return true; } - return super.lapse(pokemon, lapseType); + + // Disable the target's fire type move and damage it (subject to Magic Guard) + movePhase.showMoveText(); + movePhase.fail(); + + const idx = pokemon.getBattlerIndex(); + + globalScene.phaseManager.unshiftNew("CommonAnimPhase", idx, idx, CommonAnim.POWDER); + + const cancelDamage = new BooleanHolder(false); + applyAbAttrs("BlockNonDirectDamageAbAttr", pokemon, cancelDamage); + if (!cancelDamage.value) { + pokemon.damageAndUpdate(Math.floor(pokemon.getMaxHp() / 4), { result: HitResult.INDIRECT }); + } + + // "When the flame touched the powder\non the Pokémon, it exploded!" + globalScene.phaseManager.queueMessage(i18next.t("battlerTags:powderLapse", { moveName: move.name })); + + return true; } } @@ -1115,34 +1109,22 @@ export class EncoreTag extends MoveRestrictionBattlerTag { } canAdd(pokemon: Pokemon): boolean { - const lastMoves = pokemon.getLastXMoves(1); - if (!lastMoves.length) { + const lastMove = pokemon.getLastNonVirtualMove(); + if (!lastMove) { return false; } - const repeatableMove = lastMoves[0]; - - if (!repeatableMove.move || repeatableMove.virtual) { + if (invalidEncoreMoves.has(lastMove.move)) { return false; } - switch (repeatableMove.move) { - case MoveId.MIMIC: - case MoveId.MIRROR_MOVE: - case MoveId.TRANSFORM: - case MoveId.STRUGGLE: - case MoveId.SKETCH: - case MoveId.SLEEP_TALK: - case MoveId.ENCORE: - return false; - } - - this.moveId = repeatableMove.move; + this.moveId = lastMove.move; return true; } onAdd(pokemon: Pokemon): void { + // TODO: shouldn't this be `onAdd`? super.onRemove(pokemon); globalScene.phaseManager.queueMessage( @@ -1158,7 +1140,13 @@ export class EncoreTag extends MoveRestrictionBattlerTag { const lastMove = pokemon.getLastXMoves(1)[0]; globalScene.phaseManager.tryReplacePhase( m => m.is("MovePhase") && m.pokemon === pokemon, - globalScene.phaseManager.create("MovePhase", pokemon, lastMove.targets ?? [], movesetMove), + globalScene.phaseManager.create( + "MovePhase", + pokemon, + lastMove.targets ?? [], + movesetMove, + MoveUseMode.NORMAL, + ), ); } } @@ -1884,24 +1872,29 @@ export class TruantTag extends AbilityBattlerTag { lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { if (!pokemon.hasAbility(AbilityId.TRUANT)) { + // remove tag if mon lacks ability return super.lapse(pokemon, lapseType); } - const passive = pokemon.getAbility().id !== AbilityId.TRUANT; - const lastMove = pokemon.getLastXMoves().find(() => true); + const lastMove = pokemon.getLastXMoves()[0]; - if (lastMove && lastMove.move !== MoveId.NONE) { - (globalScene.phaseManager.getCurrentPhase() as MovePhase).cancel(); - // TODO: Ability displays should be handled by the ability - globalScene.phaseManager.queueAbilityDisplay(pokemon, passive, true); - globalScene.phaseManager.queueMessage( - i18next.t("battlerTags:truantLapse", { - pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - }), - ); - globalScene.phaseManager.queueAbilityDisplay(pokemon, passive, false); + if (!lastMove) { + // Don't interrupt move if last move was `Moves.NONE` OR no prior move was found + return true; } + // Interrupt move usage in favor of slacking off + const passive = pokemon.getAbility().id !== AbilityId.TRUANT; + (globalScene.phaseManager.getCurrentPhase() as MovePhase).cancel(); + // TODO: Ability displays should be handled by the ability + globalScene.phaseManager.queueAbilityDisplay(pokemon, passive, true); + globalScene.phaseManager.queueMessage( + i18next.t("battlerTags:truantLapse", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + }), + ); + globalScene.phaseManager.queueAbilityDisplay(pokemon, passive, false); + return true; } } diff --git a/src/data/moves/invalid-moves.ts b/src/data/moves/invalid-moves.ts index 559b679752d..6d97d8faf1e 100644 --- a/src/data/moves/invalid-moves.ts +++ b/src/data/moves/invalid-moves.ts @@ -1,6 +1,6 @@ import { MoveId } from "#enums/move-id"; -/** Set of moves that cannot be called by {@linkcode MoveId.METRONOME Metronome} */ +/** Set of moves that cannot be called by {@linkcode MoveId.METRONOME | Metronome}. */ export const invalidMetronomeMoves: ReadonlySet = new Set([ MoveId.AFTER_YOU, MoveId.ASSIST, @@ -255,3 +255,28 @@ export const noAbilityTypeOverrideMoves: ReadonlySet = new Set([ MoveId.TECHNO_BLAST, MoveId.HIDDEN_POWER, ]); + +/** Set of all moves that cannot be copied by {@linkcode Moves.SKETCH}. */ +export const invalidSketchMoves: ReadonlySet = new Set([ + MoveId.NONE, + MoveId.CHATTER, + MoveId.MIRROR_MOVE, + MoveId.SLEEP_TALK, + MoveId.STRUGGLE, + MoveId.SKETCH, + MoveId.REVIVAL_BLESSING, + MoveId.TERA_STARSTORM, + MoveId.BREAKNECK_BLITZ__PHYSICAL, + MoveId.BREAKNECK_BLITZ__SPECIAL, +]); + +/** Set of all moves that cannot be locked into by {@linkcode Moves.ENCORE}. */ +export const invalidEncoreMoves: ReadonlySet = new Set([ + MoveId.MIMIC, + MoveId.MIRROR_MOVE, + MoveId.TRANSFORM, + MoveId.STRUGGLE, + MoveId.SKETCH, + MoveId.SLEEP_TALK, + MoveId.ENCORE, +]); diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index b46f109db9e..f61e8debc9f 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -70,13 +70,9 @@ import { getStatKey, Stat, } from "#app/enums/stat"; -import { BattleEndPhase } from "#app/phases/battle-end-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; import { MovePhase } from "#app/phases/move-phase"; -import { NewBattlePhase } from "#app/phases/new-battle-phase"; import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; -import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; -import { SwitchPhase } from "#app/phases/switch-phase"; import { SwitchSummonPhase } from "#app/phases/switch-summon-phase"; import { SpeciesFormChangeRevertWeatherFormTrigger } from "../pokemon-forms/form-change-triggers"; import type { GameMode } from "#app/game-mode"; @@ -85,18 +81,14 @@ import { ChallengeType } from "#enums/challenge-type"; import { SwitchType } from "#enums/switch-type"; import { StatusEffect } from "#enums/status-effect"; import { globalScene } from "#app/global-scene"; -import { RevivalBlessingPhase } from "#app/phases/revival-blessing-phase"; -import { LoadMoveAnimPhase } from "#app/phases/load-move-anim-phase"; -import { PokemonTransformPhase } from "#app/phases/pokemon-transform-phase"; -import { MoveAnimPhase } from "#app/phases/move-anim-phase"; import { loggedInUser } from "#app/account"; import { MoveCategory } from "#enums/MoveCategory"; import { MoveTarget } from "#enums/MoveTarget"; import { MoveFlags } from "#enums/MoveFlags"; import { MoveEffectTrigger } from "#enums/MoveEffectTrigger"; import { MultiHitType } from "#enums/MultiHitType"; -import { invalidAssistMoves, invalidCopycatMoves, invalidMetronomeMoves, invalidMirrorMoveMoves, invalidSleepTalkMoves } from "./invalid-moves"; -import { SelectBiomePhase } from "#app/phases/select-biome-phase"; +import { invalidAssistMoves, invalidCopycatMoves, invalidMetronomeMoves, invalidMirrorMoveMoves, invalidSleepTalkMoves, invalidSketchMoves } from "./invalid-moves"; +import { isVirtual, MoveUseMode } from "#enums/move-use-mode"; import { ChargingMove, MoveAttrMap, MoveAttrString, MoveKindString, MoveClassMap } from "#app/@types/move-types"; import { applyMoveAttrs } from "./apply-attrs"; import { frenzyMissFunc, getMoveTargets } from "./move-utils"; @@ -126,10 +118,10 @@ export default abstract class Move implements Localizable { /** * Check if the move is of the given subclass without requiring `instanceof`. - * + * * ⚠️ Does _not_ work for {@linkcode ChargingAttackMove} and {@linkcode ChargingSelfStatusMove} subclasses. For those, * use {@linkcode isChargingMove} instead. - * + * * @param moveKind - The string name of the move to check against * @returns Whether this move is of the provided type. */ @@ -3124,7 +3116,7 @@ export class DelayedAttackAttr extends OverrideMoveEffectAttr { overridden.value = true; globalScene.phaseManager.unshiftNew("MoveAnimPhase", new MoveChargeAnim(this.chargeAnim, move.id, user)); globalScene.phaseManager.queueMessage(this.chargeText.replace("{TARGET}", getPokemonNameWithAffix(target)).replace("{USER}", getPokemonNameWithAffix(user))); - user.pushMoveHistory({ move: move.id, targets: [ target.getBattlerIndex() ], result: MoveResult.OTHER }); + user.pushMoveHistory({ move: move.id, targets: [ target.getBattlerIndex() ], result: MoveResult.OTHER, useMode: MoveUseMode.NORMAL }); const side = target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; globalScene.arena.addTag(this.tagType, 3, move.id, user.id, side, false, target.getBattlerIndex()); } else { @@ -4081,15 +4073,26 @@ export class OpponentHighHpPowerAttr extends VariablePowerAttr { } } +/** + * Attribute to double this move's power if the target hasn't acted yet in the current turn. + * Used by {@linkcode Moves.BOLT_BEAK} and {@linkcode Moves.FISHIOUS_REND} + */ export class FirstAttackDoublePowerAttr extends VariablePowerAttr { - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - console.log(target.getLastXMoves(1), globalScene.currentBattle.turn); - if (!target.getLastXMoves(1).find(m => m.turn === globalScene.currentBattle.turn)) { - (args[0] as NumberHolder).value *= 2; - return true; + /** + * Double this move's power if the user is acting before the target. + * @param user - Unused + * @param target - The {@linkcode Pokemon} being targeted by this move + * @param move - Unused + * @param args `[0]` - A {@linkcode NumberHolder} containing move base power + * @returns Whether the attribute was successfully applied + */ + apply(_user: Pokemon, target: Pokemon, move: Move, args: [NumberHolder]): boolean { + if (target.turnData.acted) { + return false; } - return false; + args[0].value *= 2; + return true; } } @@ -5459,13 +5462,20 @@ export class FrenzyAttr extends MoveEffectAttr { return false; } - if (!user.getTag(BattlerTagType.FRENZY) && !user.getMoveQueue().length) { - const turnCount = user.randBattleSeedIntRange(1, 2); - new Array(turnCount).fill(null).map(() => user.getMoveQueue().push({ move: move.id, targets: [ target.getBattlerIndex() ], ignorePP: true })); + // TODO: Disable if used via dancer + // TODO: Add support for moves that don't add the frenzy tag (Uproar, Rollout, etc.) + + // If frenzy is not active, add a tag and push 1-2 extra turns of attacks to the user's move queue. + // Otherwise, tick down the existing tag. + if (!user.getTag(BattlerTagType.FRENZY) && user.getMoveQueue().length === 0) { + const turnCount = user.randBattleSeedIntRange(1, 2); // excludes initial use + for (let i = 0; i < turnCount; i++) { + user.pushMoveQueue({ move: move.id, targets: [ target.getBattlerIndex() ], useMode: MoveUseMode.IGNORE_PP }); + } user.addTag(BattlerTagType.FRENZY, turnCount, move.id, user.id); } else { applyMoveAttrs("AddBattlerTagAttr", user, target, move, args); - user.lapseTag(BattlerTagType.FRENZY); // if FRENZY is already in effect (moveQueue.length > 0), lapse the tag + user.lapseTag(BattlerTagType.FRENZY); } return true; @@ -6220,6 +6230,7 @@ export class RevivalBlessingAttr extends MoveEffectAttr { globalScene.phaseManager.tryRemovePhase((phase: SwitchSummonPhase) => phase.is("SwitchSummonPhase") && phase.getPokemon() === pokemon); // If the pokemon being revived was alive earlier in the turn, cancel its move // (revived pokemon can't move in the turn they're brought back) + // TODO: might make sense to move this to `FaintPhase` after checking for Rev Seed (rather than handling it in the move) globalScene.phaseManager.findPhase((phase: MovePhase) => phase.pokemon === pokemon)?.cancel(); if (user.fieldPosition === FieldPosition.CENTER) { user.setFieldPosition(FieldPosition.LEFT); @@ -6761,20 +6772,26 @@ export class FirstMoveTypeAttr extends MoveEffectAttr { class CallMoveAttr extends OverrideMoveEffectAttr { protected invalidMoves: ReadonlySet; protected hasTarget: boolean; + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + // Get eligible targets for move, failing if we can't target anything const replaceMoveTarget = move.moveTarget === MoveTarget.NEAR_OTHER ? MoveTarget.NEAR_ENEMY : undefined; const moveTargets = getMoveTargets(user, move.id, replaceMoveTarget); if (moveTargets.targets.length === 0) { globalScene.phaseManager.queueMessage(i18next.t("battle:attackFailed")); - console.log("CallMoveAttr failed due to no targets."); return false; } + + // Spread moves and ones with only 1 valid target will use their normal targeting. + // If not, target the Mirror Move recipient or else a random enemy in our target list const targets = moveTargets.multiple || moveTargets.targets.length === 1 ? moveTargets.targets - : [ this.hasTarget ? target.getBattlerIndex() : moveTargets.targets[user.randBattleSeedInt(moveTargets.targets.length)] ]; // account for Mirror Move having a target already - user.getMoveQueue().push({ move: move.id, targets: targets, virtual: true, ignorePP: true }); + : [this.hasTarget + ? target.getBattlerIndex() + : moveTargets.targets[user.randBattleSeedInt(moveTargets.targets.length)]]; + globalScene.phaseManager.unshiftNew("LoadMoveAnimPhase", move.id); - globalScene.phaseManager.unshiftNew("MovePhase", user, targets, new PokemonMove(move.id, 0, 0, true), true, true); + globalScene.phaseManager.unshiftNew("MovePhase", user, targets, new PokemonMove(move.id), MoveUseMode.FOLLOW_UP); return true; } } @@ -6869,9 +6886,10 @@ export class RandomMovesetMoveAttr extends CallMoveAttr { } } +// TODO: extend CallMoveAttr export class NaturePowerAttr extends OverrideMoveEffectAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - let moveId; + let moveId = MoveId.NONE; switch (globalScene.arena.getTerrainType()) { // this allows terrains to 'override' the biome move case TerrainType.NONE: @@ -6996,14 +7014,14 @@ export class NaturePowerAttr extends OverrideMoveEffectAttr { moveId = MoveId.PSYCHIC; break; default: - // Just in case there's no match + // Just in case there's no match moveId = MoveId.TRI_ATTACK; break; } - user.getMoveQueue().push({ move: moveId, targets: [ target.getBattlerIndex() ], ignorePP: true }); + // Load the move's animation if we didn't already and unshift a new usage phase globalScene.phaseManager.unshiftNew("LoadMoveAnimPhase", moveId); - globalScene.phaseManager.unshiftNew("MovePhase", user, [ target.getBattlerIndex() ], new PokemonMove(moveId, 0, 0, true), true); + globalScene.phaseManager.unshiftNew("MovePhase", user, [ target.getBattlerIndex() ], new PokemonMove(moveId), MoveUseMode.FOLLOW_UP); return true; } } @@ -7022,64 +7040,63 @@ export class CopyMoveAttr extends CallMoveAttr { this.invalidMoves = invalidMoves; } - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + apply(user: Pokemon, target: Pokemon, _move: Move, args: any[]): boolean { this.hasTarget = this.mirrorMove; - const lastMove = this.mirrorMove ? target.getLastXMoves()[0].move : globalScene.currentBattle.lastMove; + // bang is correct as condition func returns `false` and fails move if no last move exists + const lastMove = this.mirrorMove ? target.getLastNonVirtualMove(false, false)!.move : globalScene.currentBattle.lastMove; return super.apply(user, target, allMoves[lastMove], args); } getCondition(): MoveConditionFunc { - return (user, target, move) => { - if (this.mirrorMove) { - const lastMove = target.getLastXMoves()[0]?.move; - return !!lastMove && !this.invalidMoves.has(lastMove); - } else { - const lastMove = globalScene.currentBattle.lastMove; - return lastMove !== undefined && !this.invalidMoves.has(lastMove); - } + return (_user, target, _move) => { + const lastMove = this.mirrorMove ? target.getLastNonVirtualMove(false, false)?.move : globalScene.currentBattle.lastMove; + return !isNullOrUndefined(lastMove) && !this.invalidMoves.has(lastMove); }; } } /** - * Attribute used for moves that causes the target to repeat their last used move. + * Attribute used for moves that cause the target to repeat their last used move. * * Used for [Instruct](https://bulbapedia.bulbagarden.net/wiki/Instruct_(move)). */ export class RepeatMoveAttr extends MoveEffectAttr { + private movesetMove: PokemonMove; constructor() { super(false, { trigger: MoveEffectTrigger.POST_APPLY }); // needed to ensure correct protect interaction } /** - * Forces the target to re-use their last used move again - * - * @param user {@linkcode Pokemon} that used the attack - * @param target {@linkcode Pokemon} targeted by the attack - * @param move N/A - * @param args N/A + * Forces the target to re-use their last used move again. + * @param user - The {@linkcode Pokemon} using the attack + * @param target - The {@linkcode Pokemon} being targeted by the attack * @returns `true` if the move succeeds */ - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + apply(user: Pokemon, target: Pokemon): boolean { // get the last move used (excluding status based failures) as well as the corresponding moveset slot - const lastMove = target.getLastXMoves(-1).find(m => m.move !== MoveId.NONE)!; - const movesetMove = target.getMoveset().find(m => m.moveId === lastMove.move)!; - // If the last move used can hit more than one target or has variable targets, - // re-compute the targets for the attack - // (mainly for alternating double/single battle shenanigans) - // Rampaging moves (e.g. Outrage) are not included due to being incompatible with Instruct - // TODO: Fix this once dragon darts gets smart targeting - let moveTargets = movesetMove.getMove().isMultiTarget() ? getMoveTargets(target, lastMove.move).targets : lastMove.targets; + // bangs are justified as Instruct fails if no prior move or moveset move exists + // TODO: How does instruct work when copying a move called via Copycat that the user itself knows? + const lastMove = target.getLastNonVirtualMove()!; + const movesetMove = target.getMoveset().find(m => m.moveId === lastMove?.move)! - /** In the event the instructed move's only target is a fainted opponent, redirect it to an alive ally if possible - Normally, all yet-unexecuted move phases would swap over when the enemy in question faints - (see `redirectPokemonMoves` in `battle-scene.ts`), - but since instruct adds a new move phase pre-emptively, we need to handle this interaction manually. - */ + // If the last move used can hit more than one target or has variable targets, + // re-compute the targets for the attack (mainly for alternating double/single battles) + // Rampaging moves (e.g. Outrage) are not included due to being incompatible with Instruct, + // nor is Dragon Darts (due to its smart targeting bypassing normal target selection) + let moveTargets = this.movesetMove.getMove().isMultiTarget() ? getMoveTargets(target, this.movesetMove.moveId).targets : lastMove.targets; + + // In the event the instructed move's only target is a fainted opponent, redirect it to an alive ally if possible. + // Normally, all yet-unexecuted move phases would swap targets after any foe faints or flees (see `redirectPokemonMoves` in `battle-scene.ts`), + // but since Instruct adds a new move phase _after_ all that occurs, we need to handle this interaction manually. const firstTarget = globalScene.getField()[moveTargets[0]]; - if (globalScene.currentBattle.double && moveTargets.length === 1 && firstTarget.isFainted() && firstTarget !== target.getAlly()) { + if ( + globalScene.currentBattle.double + && moveTargets.length === 1 + && firstTarget.isFainted() + && firstTarget !== target.getAlly() + ) { const ally = firstTarget.getAlly(); - if (!isNullOrUndefined(ally) && ally.isActive()) { // ally exists, is not dead and can sponge the blast + if (!isNullOrUndefined(ally) && ally.isActive()) { moveTargets = [ ally.getBattlerIndex() ]; } } @@ -7088,15 +7105,15 @@ export class RepeatMoveAttr extends MoveEffectAttr { userPokemonName: getPokemonNameWithAffix(user), targetPokemonName: getPokemonNameWithAffix(target) })); - target.getMoveQueue().unshift({ move: lastMove.move, targets: moveTargets, ignorePP: false }); target.turnData.extraTurns++; - globalScene.phaseManager.appendNewToPhase("MoveEndPhase", "MovePhase", target, moveTargets, movesetMove); + globalScene.phaseManager.appendNewToPhase("MoveEndPhase", "MovePhase", target, moveTargets, movesetMove, MoveUseMode.NORMAL); return true; } getCondition(): MoveConditionFunc { - return (user, target, move) => { - const lastMove = target.getLastXMoves(-1).find(m => m.move !== MoveId.NONE); + return (_user, target, _move) => { + // TODO: Check instruct behavior with struggle - ignore, fail or success + const lastMove = target.getLastNonVirtualMove(); const movesetMove = target.getMoveset().find(m => m.moveId === lastMove?.move); const uninstructableMoves = [ // Locking/Continually Executed moves @@ -7106,6 +7123,7 @@ export class RepeatMoveAttr extends MoveEffectAttr { MoveId.PETAL_DANCE, MoveId.THRASH, MoveId.ICE_BALL, + MoveId.UPROAR, // Multi-turn Moves MoveId.BIDE, MoveId.SHELL_TRAP, @@ -7143,23 +7161,34 @@ export class RepeatMoveAttr extends MoveEffectAttr { MoveId.SOLAR_BEAM, MoveId.SOLAR_BLADE, MoveId.METEOR_BEAM, - // Other moves + // Copying/Move-Calling moves + MoveId.ASSIST, + MoveId.COPYCAT, + MoveId.ME_FIRST, + MoveId.METRONOME, + MoveId.MIRROR_MOVE, + MoveId.NATURE_POWER, + MoveId.SLEEP_TALK, + MoveId.SNATCH, MoveId.INSTRUCT, + // Misc moves MoveId.KINGS_SHIELD, MoveId.SKETCH, MoveId.TRANSFORM, MoveId.MIMIC, MoveId.STRUGGLE, - // TODO: Add Max/G-Move blockage if or when they are implemented + // TODO: Add Max/G-Max/Z-Move blockage if or when they are implemented ]; if (!lastMove?.move // no move to instruct || !movesetMove // called move not in target's moveset (forgetting the move, etc.) || movesetMove.ppUsed === movesetMove.getMovePp() // move out of pp + // TODO: This next line is likely redundant as all charging moves are in the above list || allMoves[lastMove.move].isChargingMove() // called move is a charging/recharging move || uninstructableMoves.includes(lastMove.move)) { // called move is in the banlist return false; } + this.movesetMove = movesetMove; return true; }; } @@ -7190,53 +7219,48 @@ export class ReducePpMoveAttr extends MoveEffectAttr { /** * Reduces the PP of the target's last-used move by an amount based on this attribute instance's {@linkcode reduction}. * - * @param user {@linkcode Pokemon} that used the attack - * @param target {@linkcode Pokemon} targeted by the attack - * @param move N/A - * @param args N/A - * @returns `true` + * @param user - N/A + * @param target - The {@linkcode Pokemon} targeted by the attack + * @param move - N/A + * @param args - N/A + * @returns always `true` */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - // Null checks can be skipped due to condition function - const lastMove = target.getLastXMoves()[0]; - const movesetMove = target.getMoveset().find(m => m.moveId === lastMove.move)!; + /** The last move the target themselves used */ + const lastMove = target.getLastNonVirtualMove(); + const movesetMove = target.getMoveset().find(m => m.moveId === lastMove?.move)!; // bang is correct as condition prevents this from being nullish const lastPpUsed = movesetMove.ppUsed; - movesetMove.ppUsed = Math.min((lastPpUsed) + this.reduction, movesetMove.getMovePp()); + movesetMove.ppUsed = Math.min(lastPpUsed + this.reduction, movesetMove.getMovePp()); - const message = i18next.t("battle:ppReduced", { targetName: getPokemonNameWithAffix(target), moveName: movesetMove.getName(), reduction: (movesetMove.ppUsed) - lastPpUsed }); globalScene.eventTarget.dispatchEvent(new MoveUsedEvent(target.id, movesetMove.getMove(), movesetMove.ppUsed)); - globalScene.phaseManager.queueMessage(message); + globalScene.phaseManager.queueMessage(i18next.t("battle:ppReduced", { targetName: getPokemonNameWithAffix(target), moveName: movesetMove.getName(), reduction: (movesetMove.ppUsed) - lastPpUsed })); return true; } getCondition(): MoveConditionFunc { return (user, target, move) => { - const lastMove = target.getLastXMoves()[0]; - if (lastMove) { - const movesetMove = target.getMoveset().find(m => m.moveId === lastMove.move); - return !!movesetMove?.getPpRatio(); - } - return false; + const lastMove = target.getLastNonVirtualMove(); + const movesetMove = target.getMoveset().find(m => m.moveId === lastMove?.move) + return !!movesetMove?.getPpRatio(); }; } getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { - const lastMove = target.getLastXMoves()[0]; - if (lastMove) { - const movesetMove = target.getMoveset().find(m => m.moveId === lastMove.move); - if (movesetMove) { - const maxPp = movesetMove.getMovePp(); - const ppLeft = maxPp - movesetMove.ppUsed; - const value = -(8 - Math.ceil(Math.min(maxPp, 30) / 5)); - if (ppLeft < 4) { - return (value / 4) * ppLeft; - } - return value; - } + const lastMove = target.getLastNonVirtualMove(); + const movesetMove = target.getMoveset().find(m => m.moveId === lastMove?.move) + if (!movesetMove) { + return 0; } - return 0; + const maxPp = movesetMove.getMovePp(); + const ppLeft = maxPp - movesetMove.ppUsed; + const value = -(8 - Math.ceil(Math.min(maxPp, 30) / 5)); + if (ppLeft < 4) { + return (value / 4) * ppLeft; + } + return value; + } } @@ -7252,40 +7276,36 @@ export class AttackReducePpMoveAttr extends ReducePpMoveAttr { /** * Checks if the target has used a move prior to the attack. PP-reduction is applied through the super class if so. * - * @param user {@linkcode Pokemon} that used the attack - * @param target {@linkcode Pokemon} targeted by the attack - * @param move {@linkcode Move} being used - * @param args N/A - * @returns {boolean} true + * @param user - The {@linkcode Pokemon} using the move + * @param target -The {@linkcode Pokemon} targeted by the attack + * @param move - The {@linkcode Move} being used + * @param args - N/A + * @returns - always `true` */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const lastMove = target.getLastXMoves().find(() => true); - if (lastMove) { - const movesetMove = target.getMoveset().find(m => m.moveId === lastMove.move); - if (Boolean(movesetMove?.getPpRatio())) { - super.apply(user, target, move, args); - } + const lastMove = target.getLastNonVirtualMove(); + const movesetMove = target.getMoveset().find(m => m.moveId === lastMove?.move); + if (movesetMove?.getPpRatio()) { + super.apply(user, target, move, args); } return true; } - // Override condition function to always perform damage. Instead, perform pp-reduction condition check in apply function above - getCondition(): MoveConditionFunc { - return (user, target, move) => true; + /** + * Override condition function to always perform damage. + * Instead, perform pp-reduction condition check in {@linkcode apply}. + * (A failed condition will prevent damage which is not what we want here) + * @returns always `true` + */ + override getCondition(): MoveConditionFunc { + return () => true; } } -// TODO: Review this const targetMoveCopiableCondition: MoveConditionFunc = (user, target, move) => { - const targetMoves = target.getMoveHistory().filter(m => !m.virtual); - if (!targetMoves.length) { - return false; - } - - const copiableMove = targetMoves[0]; - - if (!copiableMove.move) { + const copiableMove = target.getLastNonVirtualMove(); + if (!copiableMove?.move) { return false; } @@ -7298,14 +7318,18 @@ const targetMoveCopiableCondition: MoveConditionFunc = (user, target, move) => { return true; }; +/** + * Attribute to temporarily copy the last move in the target's moveset. + * Used by {@linkcode Moves.MIMIC}. + */ export class MovesetCopyMoveAttr extends OverrideMoveEffectAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const targetMoves = target.getMoveHistory().filter(m => !m.virtual); - if (!targetMoves.length) { + const lastMove = target.getLastNonVirtualMove() + if (!lastMove?.move) { return false; } - const copiedMove = allMoves[targetMoves[0].move]; + const copiedMove = allMoves[lastMove.move]; const thisMoveIndex = user.getMoveset().findIndex(m => m.moveId === move.id); @@ -7313,8 +7337,9 @@ export class MovesetCopyMoveAttr extends OverrideMoveEffectAttr { return false; } + // Populate summon data with a copy of the current moveset, replacing the copying move with the copied move user.summonData.moveset = user.getMoveset().slice(0); - user.summonData.moveset[thisMoveIndex] = new PokemonMove(copiedMove.id, 0, 0); + user.summonData.moveset[thisMoveIndex] = new PokemonMove(copiedMove.id); globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:copiedMove", { pokemonName: getPokemonNameWithAffix(user), moveName: copiedMove.name })); @@ -7352,9 +7377,9 @@ export class SketchAttr extends MoveEffectAttr { return false; } - const targetMove = target.getLastXMoves(-1) - .find(m => m.move !== MoveId.NONE && m.move !== MoveId.STRUGGLE && !m.virtual); + const targetMove = target.getLastNonVirtualMove() if (!targetMove) { + // failsafe for TS compiler return false; } @@ -7377,28 +7402,10 @@ export class SketchAttr extends MoveEffectAttr { return false; } - const targetMove = target.getMoveHistory().filter(m => !m.virtual).at(-1); - if (!targetMove) { - return false; - } - - const unsketchableMoves = [ - MoveId.CHATTER, - MoveId.MIRROR_MOVE, - MoveId.SLEEP_TALK, - MoveId.STRUGGLE, - MoveId.SKETCH, - MoveId.REVIVAL_BLESSING, - MoveId.TERA_STARSTORM, - MoveId.BREAKNECK_BLITZ__PHYSICAL, - MoveId.BREAKNECK_BLITZ__SPECIAL - ]; - - if (unsketchableMoves.includes(targetMove.move)) { - return false; - } - - return !user.getMoveset().some(m => m.moveId === targetMove.move); + const targetMove = target.getLastNonVirtualMove(); + return !isNullOrUndefined(targetMove) + && !invalidSketchMoves.has(targetMove.move) + && user.getMoveset().every(m => m.moveId !== targetMove.move) }; } } @@ -7838,19 +7845,19 @@ export class LastResortAttr extends MoveAttr { // TODO: Verify behavior as Bulbapedia page is _extremely_ poorly documented getCondition(): MoveConditionFunc { return (user: Pokemon, _target: Pokemon, move: Move) => { - const movesInMoveset = new Set(user.getMoveset().map(m => m.moveId)); - if (!movesInMoveset.delete(move.id) || !movesInMoveset.size) { + const otherMovesInMoveset = new Set(user.getMoveset().map(m => m.moveId)); + if (!otherMovesInMoveset.delete(move.id) || !otherMovesInMoveset.size) { return false; // Last resort fails if used when not in user's moveset or no other moves exist } - const movesInHistory = new Set( + const movesInHistory = new Set( user.getMoveHistory() - .filter(m => !m.virtual) // TODO: Change to (m) => m < MoveUseType.INDIRECT after Dancer PR refactors virtual into enum + .filter(m => !isVirtual(m.useMode)) // Last resort ignores virtual moves .map(m => m.move) ); - // Since `Set.intersection()` is only present in ESNext, we have to coerce it to an array to check inclusion - return [...movesInMoveset].every(m => movesInHistory.has(m)) + // Since `Set.intersection()` is only present in ESNext, we have to do this to check inclusion + return [...otherMovesInMoveset].every(m => movesInHistory.has(m)) }; } } @@ -7872,27 +7879,26 @@ export class VariableTargetAttr extends MoveAttr { } /** - * Attribute for {@linkcode MoveId.AFTER_YOU} + * Attribute to cause the target to move immediately after the user. * - * [After You - Move | Bulbapedia](https://bulbapedia.bulbagarden.net/wiki/After_You_(move)) + * Used by {@linkcode Moves.AFTER_YOU}. */ export class AfterYouAttr extends MoveEffectAttr { /** - * Allows the target of this move to act right after the user. - * - * @param user {@linkcode Pokemon} that is using the move. - * @param target {@linkcode Pokemon} that will move right after this move is used. - * @param move {@linkcode Move} {@linkcode MoveId.AFTER_YOU} - * @param _args N/A - * @returns true + * Cause the target of this move to act right after the user. + * @param user - Unused + * @param target - The {@linkcode Pokemon} targeted by this move + * @param _move - Unused + * @param _args - Unused + * @returns `true` */ override apply(user: Pokemon, target: Pokemon, _move: Move, _args: any[]): boolean { globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:afterYou", { targetName: getPokemonNameWithAffix(target) })); - //Will find next acting phase of the targeted pokémon, delete it and queue it next on successful delete. - const nextAttackPhase = globalScene.phaseManager.findPhase((phase) => phase.pokemon === target); - if (nextAttackPhase && globalScene.phaseManager.tryRemovePhase((phase: MovePhase) => phase.pokemon === target)) { - globalScene.phaseManager.prependNewToPhase("MovePhase", "MovePhase", target, [ ...nextAttackPhase.targets ], nextAttackPhase.move); + // Will find next acting phase of the targeted pokémon, delete it and queue it right after us. + const targetNextPhase = globalScene.phaseManager.findPhase(phase => phase.pokemon === target); + if (targetNextPhase && globalScene.phaseManager.tryRemovePhase((phase: MovePhase) => phase.pokemon === target)) { + globalScene.phaseManager.prependToPhase(targetNextPhase, "MovePhase"); } return true; @@ -7917,6 +7923,7 @@ export class ForceLastAttr extends MoveEffectAttr { override apply(user: Pokemon, target: Pokemon, _move: Move, _args: any[]): boolean { globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:forceLast", { targetPokemonName: getPokemonNameWithAffix(target) })); + // TODO: Refactor this to be more readable and less janky const targetMovePhase = globalScene.phaseManager.findPhase((phase) => phase.pokemon === target); if (targetMovePhase && !targetMovePhase.isForcedLast() && globalScene.phaseManager.tryRemovePhase((phase: MovePhase) => phase.pokemon === target)) { // Finding the phase to insert the move in front of - @@ -7929,7 +7936,7 @@ export class ForceLastAttr extends MoveEffectAttr { globalScene.phaseManager.phaseQueue.splice( globalScene.phaseManager.phaseQueue.indexOf(prependPhase), 0, - globalScene.phaseManager.create("MovePhase", target, [ ...targetMovePhase.targets ], targetMovePhase.move, false, false, false, true) + globalScene.phaseManager.create("MovePhase", target, [ ...targetMovePhase.targets ], targetMovePhase.move, targetMovePhase.useMode, true) ); } } @@ -7937,7 +7944,13 @@ export class ForceLastAttr extends MoveEffectAttr { } } -/** Returns whether a {@linkcode MovePhase} has been forced last and the corresponding pokemon is slower than {@linkcode target} */ +/** + * Returns whether a {@linkcode MovePhase} has been forced last and the corresponding pokemon is slower than {@linkcode target}. + + * TODO: + - Make this a class method + - Make this look at speed order from TurnStartPhase +*/ const phaseForcedSlower = (phase: MovePhase, target: Pokemon, trickRoom: boolean): boolean => { let slower: boolean; // quashed pokemon still have speed ties @@ -8032,8 +8045,7 @@ export class UpperHandCondition extends MoveCondition { super((user, target, move) => { const targetCommand = globalScene.currentBattle.turnCommands[target.getBattlerIndex()]; - return !!targetCommand - && targetCommand.command === Command.FIGHT + return targetCommand?.command === Command.FIGHT && !target.turnData.acted && !!targetCommand.move?.move && allMoves[targetCommand.move.move].category !== MoveCategory.STATUS @@ -8066,6 +8078,7 @@ export class ResistLastMoveTypeAttr extends MoveEffectAttr { constructor() { super(true); } + /** * User changes its type to a random type that resists the target's last used move * @param {Pokemon} user Pokemon that used the move and will change types @@ -8079,7 +8092,8 @@ export class ResistLastMoveTypeAttr extends MoveEffectAttr { return false; } - const [ targetMove ] = target.getLastXMoves(1); // target's most recent move + // TODO: Confirm how this interacts with status-induced failures and called moves + const targetMove = target.getLastXMoves(1)[0]; // target's most recent move if (!targetMove) { return false; } @@ -8121,9 +8135,9 @@ export class ResistLastMoveTypeAttr extends MoveEffectAttr { } getCondition(): MoveConditionFunc { + // TODO: Does this count dancer? return (user, target, move) => { - const moveHistory = target.getLastXMoves(); - return moveHistory.length !== 0; + return target.getLastXMoves(-1).some(tm => tm.move !== MoveId.NONE); }; } } @@ -8541,9 +8555,9 @@ export function initMoves() { .attr(FixedDamageAttr, 20), new StatusMove(MoveId.DISABLE, PokemonType.NORMAL, 100, 20, -1, 0, 1) .attr(AddBattlerTagAttr, BattlerTagType.DISABLED, false, true) - .condition((user, target, move) => { - const lastRealMove = target.getLastXMoves(-1).find(m => !m.virtual); - return !isNullOrUndefined(lastRealMove) && lastRealMove.move !== MoveId.NONE && lastRealMove.move !== MoveId.STRUGGLE; + .condition((_user, target, _move) => { + const lastNonVirtualMove = target.getLastNonVirtualMove(); + return !isNullOrUndefined(lastNonVirtualMove) && lastNonVirtualMove.move !== MoveId.STRUGGLE; }) .ignoresSubstitute() .reflectable(), @@ -9092,7 +9106,10 @@ export function initMoves() { .attr(AddBattlerTagAttr, BattlerTagType.ENCORE, false, true) .ignoresSubstitute() .condition((user, target, move) => new EncoreTag(user.id).canAdd(target)) - .reflectable(), + .reflectable() + // Can lock infinitely into struggle; has incorrect interactions with Blood Moon/Gigaton Hammer + // Also may or may not incorrectly select targets for replacement move (needs verification) + .edgeCase(), new AttackMove(MoveId.PURSUIT, PokemonType.DARK, MoveCategory.PHYSICAL, 40, 100, 20, -1, 0, 2) .partial(), // No effect implemented new AttackMove(MoveId.RAPID_SPIN, PokemonType.NORMAL, MoveCategory.PHYSICAL, 50, 100, 40, 100, 0, 2) @@ -9974,7 +9991,14 @@ export function initMoves() { .chargeAttr(SemiInvulnerableAttr, BattlerTagType.FLYING) .condition(failOnGravityCondition) .condition((user, target, move) => !target.getTag(BattlerTagType.SUBSTITUTE)) - .partial(), // Should immobilize the target, Flying types should take no damage. cf https://bulbapedia.bulbagarden.net/wiki/Sky_Drop_(move) and https://www.smogon.com/dex/sv/moves/sky-drop/ + /* + * Cf https://bulbapedia.bulbagarden.net/wiki/Sky_Drop_(move) and https://www.smogon.com/dex/sv/moves/sky-drop/: + * Should immobilize and give target semi-invulnerability + * Flying types should take no damage + * Should fail on targets above a certain weight threshold + * Should remove all redirection effects on successful takeoff (Rage Poweder, etc.) + */ + .partial(), new SelfStatusMove(MoveId.SHIFT_GEAR, PokemonType.STEEL, -1, 10, -1, 0, 5) .attr(StatStageChangeAttr, [ Stat.ATK ], 1, true) .attr(StatStageChangeAttr, [ Stat.SPD ], 2, true), @@ -10545,9 +10569,12 @@ export function initMoves() { new StatusMove(MoveId.INSTRUCT, PokemonType.PSYCHIC, -1, 15, -1, 0, 7) .ignoresSubstitute() .attr(RepeatMoveAttr) - // incorrect interactions with Gigaton Hammer, Blood Moon & Torment - // Also has incorrect interactions with Dancer due to the latter - // erroneously adding copied moves to move history. + /* + * Incorrect interactions with Gigaton Hammer, Blood Moon & Torment due to them _failing on use_, not merely being unselectable. + * Incorrectly ticks down Encore's fail counter + * TODO: Verify whether Instruct can repeat Struggle + * TODO: Verify whether Instruct can fail when using a copied move also in one's own moveset + */ .edgeCase(), new AttackMove(MoveId.BEAK_BLAST, PokemonType.FLYING, MoveCategory.PHYSICAL, 100, 100, 15, -1, -3, 7) .attr(BeakBlastHeaderAttr) @@ -10605,7 +10632,13 @@ export function initMoves() { .bitingMove() .attr(RemoveScreensAttr), new AttackMove(MoveId.STOMPING_TANTRUM, PokemonType.GROUND, MoveCategory.PHYSICAL, 75, 100, 10, -1, 0, 7) - .attr(MovePowerMultiplierAttr, (user, target, move) => user.getLastXMoves(2)[1]?.result === MoveResult.MISS || user.getLastXMoves(2)[1]?.result === MoveResult.FAIL ? 2 : 1), + .attr(MovePowerMultiplierAttr, (user) => { + // Stomping tantrum triggers on most failures (including sleep/freeze) + const lastNonDancerMove = user.getLastXMoves(2)[1] as TurnMove | undefined; + return lastNonDancerMove && (lastNonDancerMove.result === MoveResult.MISS || lastNonDancerMove.result === MoveResult.FAIL) ? 2 : 1 + }) + // TODO: Review mainline accuracy and draft tests as needed + .edgeCase(), new AttackMove(MoveId.SHADOW_BONE, PokemonType.GHOST, MoveCategory.PHYSICAL, 85, 100, 10, 20, 0, 7) .attr(StatStageChangeAttr, [ Stat.DEF ], -1) .makesContact(false), diff --git a/src/data/moves/pokemon-move.ts b/src/data/moves/pokemon-move.ts index da46caa819f..daad199fbbd 100644 --- a/src/data/moves/pokemon-move.ts +++ b/src/data/moves/pokemon-move.ts @@ -21,7 +21,6 @@ export class PokemonMove { public moveId: MoveId; public ppUsed: number; public ppUp: number; - public virtual: boolean; /** * If defined and nonzero, overrides the maximum PP of the move (e.g., due to move being copied by Transform). @@ -29,11 +28,10 @@ export class PokemonMove { */ public maxPpOverride?: number; - constructor(moveId: MoveId, ppUsed = 0, ppUp = 0, virtual = false, maxPpOverride?: number) { + constructor(moveId: MoveId, ppUsed = 0, ppUp = 0, maxPpOverride?: number) { this.moveId = moveId; this.ppUsed = ppUsed; this.ppUp = ppUp; - this.virtual = virtual; this.maxPpOverride = maxPpOverride; } @@ -47,6 +45,7 @@ export class PokemonMove { * @returns `true` if the move can be selected and used by the Pokemon, otherwise `false`. */ isUsable(pokemon: Pokemon, ignorePp = false, ignoreRestrictionTags = false): boolean { + // TODO: Add Sky Drop's 1 turn stall if (this.moveId && !ignoreRestrictionTags && pokemon.isMoveRestricted(this.moveId, pokemon)) { return false; } @@ -88,6 +87,6 @@ export class PokemonMove { * @returns A valid {@linkcode PokemonMove} object */ static loadMove(source: PokemonMove | any): PokemonMove { - return new PokemonMove(source.moveId, source.ppUsed, source.ppUp, source.virtual, source.maxPpOverride); + return new PokemonMove(source.moveId, source.ppUsed, source.ppUp, source.maxPpOverride); } } diff --git a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts index 3eda96e4028..e3741226335 100644 --- a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts +++ b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts @@ -38,6 +38,7 @@ import type HeldModifierConfig from "#app/@types/held-modifier-config"; import type { BerryType } from "#enums/berry-type"; import { Stat } from "#enums/stat"; import i18next from "i18next"; +import { MoveUseMode } from "#enums/move-use-mode"; /** the i18n namespace for this encounter */ const namespace = "mysteryEncounters/absoluteAvarice"; @@ -307,7 +308,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = MysteryEncounterBuilde sourceBattlerIndex: BattlerIndex.ENEMY, targets: [BattlerIndex.ENEMY], move: new PokemonMove(MoveId.STUFF_CHEEKS), - ignorePp: true, + useMode: MoveUseMode.IGNORE_PP, }); await transitionMysteryEncounterIntroVisuals(true, true, 500); diff --git a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts index 542bd163713..b873e30fe0c 100644 --- a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts +++ b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts @@ -13,7 +13,6 @@ import { TrainerPartyCompoundTemplate } from "#app/data/trainers/TrainerPartyTem import { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate"; import { ModifierTier } from "#enums/modifier-tier"; import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; -import { modifierTypes } from "#app/data/data-lists"; import { ModifierPoolType } from "#enums/modifier-pool-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { PartyMemberStrength } from "#enums/party-member-strength"; @@ -49,7 +48,8 @@ import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { EncounterAnim } from "#enums/encounter-anims"; import { Challenges } from "#enums/challenges"; -import { allAbilities } from "#app/data/data-lists"; +import { MoveUseMode } from "#enums/move-use-mode"; +import { allAbilities, modifierTypes } from "#app/data/data-lists"; /** the i18n namespace for the encounter */ const namespace = "mysteryEncounters/clowningAround"; @@ -210,19 +210,19 @@ export const ClowningAroundEncounter: MysteryEncounter = MysteryEncounterBuilder sourceBattlerIndex: BattlerIndex.ENEMY, targets: [BattlerIndex.ENEMY_2], move: new PokemonMove(MoveId.ROLE_PLAY), - ignorePp: true, + useMode: MoveUseMode.IGNORE_PP, }, { sourceBattlerIndex: BattlerIndex.ENEMY_2, targets: [BattlerIndex.PLAYER], move: new PokemonMove(MoveId.TAUNT), - ignorePp: true, + useMode: MoveUseMode.IGNORE_PP, }, { sourceBattlerIndex: BattlerIndex.ENEMY_2, targets: [BattlerIndex.PLAYER_2], move: new PokemonMove(MoveId.TAUNT), - ignorePp: true, + useMode: MoveUseMode.IGNORE_PP, }, ); diff --git a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts index 4444a2e6b1b..42af5339a80 100644 --- a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts +++ b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts @@ -40,6 +40,7 @@ import { PokeballType } from "#enums/pokeball"; import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; import i18next from "i18next"; +import { MoveUseMode } from "#enums/move-use-mode"; /** the i18n namespace for this encounter */ const namespace = "mysteryEncounters/dancingLessons"; @@ -214,7 +215,7 @@ export const DancingLessonsEncounter: MysteryEncounter = MysteryEncounterBuilder sourceBattlerIndex: BattlerIndex.ENEMY, targets: [BattlerIndex.PLAYER], move: new PokemonMove(MoveId.REVELATION_DANCE), - ignorePp: true, + useMode: MoveUseMode.IGNORE_PP, }); await hideOricorioPokemon(); diff --git a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts index 4b24bf9cada..94dc4ab6153 100644 --- a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts +++ b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts @@ -10,7 +10,6 @@ import { generateModifierType, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import type { AttackTypeBoosterModifierType } from "#app/modifier/modifier-type"; -import { modifierTypes } from "#app/data/data-lists"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { globalScene } from "#app/global-scene"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; @@ -46,7 +45,8 @@ import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; import { Stat } from "#enums/stat"; import { FIRE_RESISTANT_ABILITIES } from "#app/data/mystery-encounters/requirements/requirement-groups"; -import { allAbilities } from "#app/data/data-lists"; +import { MoveUseMode } from "#enums/move-use-mode"; +import { allAbilities, modifierTypes } from "#app/data/data-lists"; /** the i18n namespace for the encounter */ const namespace = "mysteryEncounters/fieryFallout"; @@ -201,13 +201,13 @@ export const FieryFalloutEncounter: MysteryEncounter = MysteryEncounterBuilder.w sourceBattlerIndex: BattlerIndex.ENEMY, targets: [BattlerIndex.PLAYER], move: new PokemonMove(MoveId.FIRE_SPIN), - ignorePp: true, + useMode: MoveUseMode.IGNORE_PP, }, { sourceBattlerIndex: BattlerIndex.ENEMY_2, targets: [BattlerIndex.PLAYER_2], move: new PokemonMove(MoveId.FIRE_SPIN), - ignorePp: true, + useMode: MoveUseMode.IGNORE_PP, }, ); await initBattleWithEnemyConfig(globalScene.currentBattle.mysteryEncounter!.enemyPartyConfigs[0]); diff --git a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts index 483c577e851..6b6cd71af1f 100644 --- a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts +++ b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts @@ -31,6 +31,7 @@ import { BerryType } from "#enums/berry-type"; import { Stat } from "#enums/stat"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import { randSeedInt } from "#app/utils/common"; +import { MoveUseMode } from "#enums/move-use-mode"; /** i18n namespace for the encounter */ const namespace = "mysteryEncounters/slumberingSnorlax"; @@ -137,7 +138,7 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = MysteryEncounterBuil sourceBattlerIndex: BattlerIndex.ENEMY, targets: [BattlerIndex.PLAYER], move: new PokemonMove(MoveId.SNORE), - ignorePp: true, + useMode: MoveUseMode.IGNORE_PP, }); await initBattleWithEnemyConfig(encounter.enemyPartyConfigs[0]); }, diff --git a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts index 61d9dcfccfd..adf4f9dde8f 100644 --- a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts @@ -28,6 +28,7 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import { Stat } from "#enums/stat"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; +import { MoveUseMode } from "#enums/move-use-mode"; /** the i18n namespace for the encounter */ const namespace = "mysteryEncounters/theStrongStuff"; @@ -214,13 +215,13 @@ export const TheStrongStuffEncounter: MysteryEncounter = MysteryEncounterBuilder sourceBattlerIndex: BattlerIndex.ENEMY, targets: [BattlerIndex.PLAYER], move: new PokemonMove(MoveId.GASTRO_ACID), - ignorePp: true, + useMode: MoveUseMode.IGNORE_PP, }, { sourceBattlerIndex: BattlerIndex.ENEMY, targets: [BattlerIndex.PLAYER], move: new PokemonMove(MoveId.STEALTH_ROCK), - ignorePp: true, + useMode: MoveUseMode.IGNORE_PP, }, ); diff --git a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts index 1416c63dd28..62413b96523 100644 --- a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts +++ b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts @@ -28,6 +28,7 @@ import { BattlerIndex } from "#enums/battler-index"; import { PokemonMove } from "#app/data/moves/pokemon-move"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { randSeedInt } from "#app/utils/common"; +import { MoveUseMode } from "#enums/move-use-mode"; /** the i18n namespace for this encounter */ const namespace = "mysteryEncounters/trashToTreasure"; @@ -207,13 +208,13 @@ export const TrashToTreasureEncounter: MysteryEncounter = MysteryEncounterBuilde sourceBattlerIndex: BattlerIndex.ENEMY, targets: [BattlerIndex.PLAYER], move: new PokemonMove(MoveId.TOXIC), - ignorePp: true, + useMode: MoveUseMode.IGNORE_PP, }, { sourceBattlerIndex: BattlerIndex.ENEMY, targets: [BattlerIndex.ENEMY], move: new PokemonMove(MoveId.STOCKPILE), - ignorePp: true, + useMode: MoveUseMode.IGNORE_PP, }, ); await initBattleWithEnemyConfig(encounter.enemyPartyConfigs[0]); diff --git a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts index c48f93a9a9d..44e578540dd 100644 --- a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts +++ b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts @@ -36,6 +36,7 @@ import { queueEncounterMessage } from "#app/data/mystery-encounters/utils/encoun import { BerryModifier } from "#app/modifier/modifier"; import { Stat } from "#enums/stat"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; +import { MoveUseMode } from "#enums/move-use-mode"; /** the i18n namespace for the encounter */ const namespace = "mysteryEncounters/uncommonBreed"; @@ -180,7 +181,7 @@ export const UncommonBreedEncounter: MysteryEncounter = MysteryEncounterBuilder. sourceBattlerIndex: BattlerIndex.ENEMY, targets: [target], move: pokemonMove, - ignorePp: true, + useMode: MoveUseMode.IGNORE_PP, }); } diff --git a/src/data/mystery-encounters/mystery-encounter.ts b/src/data/mystery-encounters/mystery-encounter.ts index bd3082afe19..fa97a7f4d40 100644 --- a/src/data/mystery-encounters/mystery-encounter.ts +++ b/src/data/mystery-encounters/mystery-encounter.ts @@ -29,14 +29,14 @@ import type { GameModes } from "#enums/game-modes"; import type { EncounterAnim } from "#enums/encounter-anims"; import type { Challenges } from "#enums/challenges"; import { globalScene } from "#app/global-scene"; +import type { MoveUseMode } from "#enums/move-use-mode"; export interface EncounterStartOfBattleEffect { sourcePokemon?: Pokemon; sourceBattlerIndex?: BattlerIndex; targets: BattlerIndex[]; move: PokemonMove; - ignorePp: boolean; - followUp?: boolean; + useMode: MoveUseMode; // TODO: This should always be ignore PP... } const DEFAULT_MAX_ALLOWED_ENCOUNTERS = 2; @@ -254,7 +254,7 @@ export default class MysteryEncounter implements IMysteryEncounter { */ selectedOption?: MysteryEncounterOption; /** - * Will be set by option select handlers automatically, and can be used to refer to which option was chosen by later phases + * Array containing data pertaining to free moves used at the start of a battle mystery envounter. */ startOfBattleEffects: EncounterStartOfBattleEffect[] = []; /** diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index e2b92230985..eaa4f08ef70 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -1,5 +1,4 @@ import type Battle from "#app/battle"; -import { BattlerIndex } from "#enums/battler-index"; import { BattleType } from "#enums/battle-type"; import { biomeLinks, BiomePoolTier } from "#app/data/balance/biomes"; import type MysteryEncounterOption from "#app/data/mystery-encounters/mystery-encounter-option"; @@ -974,33 +973,8 @@ export function handleMysteryEncounterBattleStartEffects() { ) { const effects = encounter.startOfBattleEffects; effects.forEach(effect => { - let source: EnemyPokemon | Pokemon; - if (effect.sourcePokemon) { - source = effect.sourcePokemon; - } else if (!isNullOrUndefined(effect.sourceBattlerIndex)) { - if (effect.sourceBattlerIndex === BattlerIndex.ATTACKER) { - source = globalScene.getEnemyField()[0]; - } else if (effect.sourceBattlerIndex === BattlerIndex.ENEMY) { - source = globalScene.getEnemyField()[0]; - } else if (effect.sourceBattlerIndex === BattlerIndex.ENEMY_2) { - source = globalScene.getEnemyField()[1]; - } else if (effect.sourceBattlerIndex === BattlerIndex.PLAYER) { - source = globalScene.getPlayerField()[0]; - } else if (effect.sourceBattlerIndex === BattlerIndex.PLAYER_2) { - source = globalScene.getPlayerField()[1]; - } - } else { - source = globalScene.getEnemyField()[0]; - } - globalScene.phaseManager.pushNew( - "MovePhase", - // @ts-expect-error: source is guaranteed to be defined - source, - effect.targets, - effect.move, - effect.followUp, - effect.ignorePp, - ); + const source = effect.sourcePokemon ?? globalScene.getField()[effect.sourceBattlerIndex ?? 0]; + globalScene.phaseManager.pushNew("MovePhase", source, effect.targets, effect.move, effect.useMode); }); // Pseudo turn end phase to reset flinch states, Endure, etc. diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 56dc649afac..bb6ede7731d 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -84,13 +84,14 @@ export const normalForm: SpeciesId[] = [ /** * Gets the {@linkcode PokemonSpecies} object associated with the {@linkcode SpeciesId} enum given - * @param species The species to fetch + * @param species - The {@linkcode SpeciesId} to fetch. + * If an array of `SpeciesId`s is passed (such as for named trainer spawn pools), + * one will be selected at random. * @returns The associated {@linkcode PokemonSpecies} object */ export function getPokemonSpecies(species: SpeciesId | SpeciesId[]): PokemonSpecies { - // If a special pool (named trainers) is used here it CAN happen that they have a array as species (which means choose one of those two). So we catch that with this code block if (Array.isArray(species)) { - // Pick a random species from the list + // TODO: this RNG roll should not be handled by this function species = species[Math.floor(Math.random() * species.length)]; } if (species >= 2000) { diff --git a/src/enums/battler-tag-lapse-type.ts b/src/enums/battler-tag-lapse-type.ts index 355a084148b..4375e87e4e0 100644 --- a/src/enums/battler-tag-lapse-type.ts +++ b/src/enums/battler-tag-lapse-type.ts @@ -1,12 +1,37 @@ +/** + * Enum representing the possible ways a given BattlerTag can activate and/or tick down. + * Each tag can have multiple different behaviors attached to different lapse types. + */ export enum BattlerTagLapseType { + // TODO: This is unused... FAINT, + /** + * Tag activate before the holder uses a non-virtual move, possibly interrupting its action. + * @see MoveUseMode for more information + */ MOVE, + /** Tag activates before the holder uses **any** move, triggering effects or interrupting its action. */ PRE_MOVE, + /** Tag activates immediately after the holder's move finishes triggering (successful or not). */ AFTER_MOVE, + /** + * Tag activates before move effects are applied. + * TODO: Stop using this as a catch-all "semi-invulnerability" tag + */ MOVE_EFFECT, + /** Tag activates at the end of the turn. */ TURN_END, + /** + * Tag activates after the holder is hit by an attack, but before damage is applied. + * Occurs even if the user's {@linkcode SubstituteTag | Substitute} is hit. + */ HIT, - /** Tag lapses AFTER_HIT, applying its effects even if the user faints */ + /** + * Tag activates after the holder is directly hit by an attack. + * Does **not** occur on hits to the holder's {@linkcode SubstituteTag | Substitute}, + * but still triggers on being KO'd. + */ AFTER_HIT, - CUSTOM + /** The tag has some other custom activation or removal condition. */ + CUSTOM, } diff --git a/src/enums/move-use-mode.ts b/src/enums/move-use-mode.ts new file mode 100644 index 00000000000..31694ad4081 --- /dev/null +++ b/src/enums/move-use-mode.ts @@ -0,0 +1,149 @@ +import type { PostDancingMoveAbAttr } from "#app/data/abilities/ability"; +import type { BattlerTagLapseType } from "#enums/battler-tag-lapse-type"; + +/** + * Enum representing all the possible means through which a given move can be executed. + * Each one inherits the properties (or exclusions) of all types preceding it. + * Properties newly found on a given use mode will be **bolded**, + * while oddities breaking a previous trend will be listed in _italics_. + + * Callers should refrain from performing non-equality checks on `MoveUseMode`s directly, + * instead using the available helper functions + * ({@linkcode isVirtual}, {@linkcode isIgnoreStatus}, {@linkcode isIgnorePP} and {@linkcode isReflected}). + */ +export const MoveUseMode = { + /** + * This move was used normally (i.e. clicking on the button) or called via Instruct. + * It deducts PP from the user's moveset (failing if out of PP), and interacts normally with other moves and abilities. + */ + NORMAL: 1, + + /** + * This move was called by an effect that ignores PP, such as a consecutively executed move (e.g. Outrage). + * + * PP-ignoring moves (as their name implies) **do not consume PP** when used + * and **will not fail** if none is left prior to execution. + * All other effects remain identical to {@linkcode MoveUseMode.NORMAL}. + * + * PP can still be reduced by other effects (such as Spite or Eerie Spell). + */ + IGNORE_PP: 2, + + /** + * This move was called indirectly by an out-of-turn effect other than Instruct or the user's previous move. + * Currently only used by {@linkcode PostDancingMoveAbAttr | Dancer}. + * + * Indirect moves ignore PP checks similar to {@linkcode MoveUseMode.IGNORE_PP}, but additionally **cannot be copied** + * by all move-copying effects (barring reflection). + * They are also **"skipped over" by most moveset and move history-related effects** (PP reduction, Last Resort, etc). + * + * They still respect the user's volatile status conditions and confusion (though will uniquely _cure freeze and sleep before use_). + */ + INDIRECT: 3, + + /** + * This move was called as part of another move's effect (such as for most {@link https://bulbapedia.bulbagarden.net/wiki/Category:Moves_that_call_other_moves | Move-calling moves}). + + * Follow-up moves **bypass cancellation** from all **non-volatile status conditions** and **{@linkcode BattlerTagLapseType.MOVE}-type effects** + * (having been checked already on the calling move). + + * They are _not ignored_ by other move-calling moves and abilities (unlike {@linkcode MoveUseMode.FOLLOW_UP} and {@linkcode MoveUseMode.REFLECTED}), + * but still inherit the former's disregard for moveset-related effects. + */ + FOLLOW_UP: 4, + + /** + * This move was reflected by Magic Coat or Magic Bounce. + + * Reflected moves ignore all the same cancellation checks as {@linkcode MoveUseMode.INDIRECT} + * and retain the same copy prevention as {@linkcode MoveUseMode.FOLLOW_UP}, but additionally + * **cannot be reflected by other reflecting effects**. + */ + REFLECTED: 5 + // TODO: Add use type TRANSPARENT for Future Sight and Doom Desire to prevent move history pushing +} as const; + +export type MoveUseMode = (typeof MoveUseMode)[keyof typeof MoveUseMode]; + +// # HELPER FUNCTIONS +// Please update the markdown tables if any new `MoveUseMode`s get added. + +/** + * Check if a given {@linkcode MoveUseMode} is virtual (i.e. called by another move or effect). + * Virtual moves are ignored by most moveset-related effects due to not being executed directly. + * @returns Whether {@linkcode useMode} is virtual. + * @remarks + * This function is equivalent to the following truth table: + * + * | Use Type | Returns | + * |------------------------------------|---------| + * | {@linkcode MoveUseMode.NORMAL} | `false` | + * | {@linkcode MoveUseMode.IGNORE_PP} | `false` | + * | {@linkcode MoveUseMode.INDIRECT} | `true` | + * | {@linkcode MoveUseMode.FOLLOW_UP} | `true` | + * | {@linkcode MoveUseMode.REFLECTED} | `true` | + */ +export function isVirtual(useMode: MoveUseMode): boolean { + return useMode >= MoveUseMode.INDIRECT +} + +/** + * Check if a given {@linkcode MoveUseMode} should ignore pre-move cancellation checks + * from {@linkcode StatusEffect.PARALYSIS} and {@linkcode BattlerTagLapseType.MOVE}-type effects. + * @param useMode - The {@linkcode MoveUseMode} to check. + * @returns Whether {@linkcode useMode} should ignore status and otehr cancellation checks. + * @remarks + * This function is equivalent to the following truth table: + * + * | Use Type | Returns | + * |------------------------------------|---------| + * | {@linkcode MoveUseMode.NORMAL} | `false` | + * | {@linkcode MoveUseMode.IGNORE_PP} | `false` | + * | {@linkcode MoveUseMode.INDIRECT} | `false` | + * | {@linkcode MoveUseMode.FOLLOW_UP} | `true` | + * | {@linkcode MoveUseMode.REFLECTED} | `true` | + */ +export function isIgnoreStatus(useMode: MoveUseMode): boolean { + return useMode >= MoveUseMode.FOLLOW_UP; +} + +/** + * Check if a given {@linkcode MoveUseMode} should ignore PP. + * PP-ignoring moves will ignore normal PP consumption as well as associated failure checks. + * @param useMode - The {@linkcode MoveUseMode} to check. + * @returns Whether {@linkcode useMode} ignores PP. + * @remarks + * This function is equivalent to the following truth table: + * + * | Use Type | Returns | + * |------------------------------------|---------| + * | {@linkcode MoveUseMode.NORMAL} | `false` | + * | {@linkcode MoveUseMode.IGNORE_PP} | `true` | + * | {@linkcode MoveUseMode.INDIRECT} | `true` | + * | {@linkcode MoveUseMode.FOLLOW_UP} | `true` | + * | {@linkcode MoveUseMode.REFLECTED} | `true` | + */ +export function isIgnorePP(useMode: MoveUseMode): boolean { + return useMode >= MoveUseMode.IGNORE_PP; +} + +/** + * Check if a given {@linkcode MoveUseMode} is reflected. + * Reflected moves cannot be reflected, copied, or cancelled by status effects, + * nor will they trigger {@linkcode PostDancingMoveAbAttr | Dancer}. + * @param useMode - The {@linkcode MoveUseMode} to check. + * @returns Whether {@linkcode useMode} is reflected. + * @remarks + * This function is equivalent to the following truth table: + * + * | Use Type | Returns | + * |------------------------------------|---------| + * | {@linkcode MoveUseMode.NORMAL} | `false` | + * | {@linkcode MoveUseMode.IGNORE_PP} | `false` | + * | {@linkcode MoveUseMode.INDIRECT} | `false` | + * | {@linkcode MoveUseMode.FOLLOW_UP} | `false` | + * | {@linkcode MoveUseMode.REFLECTED} | `true` | + */ +export function isReflected(useMode: MoveUseMode): boolean { + return useMode === MoveUseMode.REFLECTED; +} diff --git a/src/field/arena.ts b/src/field/arena.ts index 22cb9e32863..aece908d653 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -765,6 +765,9 @@ export class Arena { ); } + // TODO: Add an overload similar to `Array.prototype.find` if the predicate func is of the form + // `(x): x is T` + /** * Uses {@linkcode findTagsOnSide} to filter (using the parameter function) for specific tags that apply to both sides * @param tagPredicate a function mapping {@linkcode ArenaTag}s to `boolean`s diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 0205b5bf4b2..730d2ab2c2a 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -38,7 +38,6 @@ import { deltaRgb, isBetween, randSeedFloat, - type nil, type Constructor, randSeedIntRange, coerceArray, @@ -186,6 +185,7 @@ import { doShinySparkleAnim } from "#app/field/anims"; import { MoveFlags } from "#enums/MoveFlags"; import { timedEventManager } from "#app/global-event-manager"; import { loadMoveAnimations } from "#app/sprites/pokemon-asset-loader"; +import { isVirtual, isIgnorePP, MoveUseMode } from "#enums/move-use-mode"; import { FieldPosition } from "#enums/field-position"; import { LearnMoveSituation } from "#enums/learn-move-situation"; import { HitResult } from "#enums/hit-result"; @@ -324,7 +324,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { super(globalScene, x, y); if (!species.isObtainable() && this.isPlayer()) { - throw `Cannot create a player Pokemon for species '${species.getName(formIndex)}'`; + throw `Cannot create a player Pokemon for species "${species.getName(formIndex)}"`; } this.species = species; @@ -3137,7 +3137,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { while (rand > stabMovePool[index][1]) { rand -= stabMovePool[index++][1]; } - this.moveset.push(new PokemonMove(stabMovePool[index][0], 0, 0)); + this.moveset.push(new PokemonMove(stabMovePool[index][0])); } while (baseWeights.length > this.moveset.length && this.moveset.length < 4) { @@ -3190,7 +3190,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { while (rand > movePool[index][1]) { rand -= movePool[index++][1]; } - this.moveset.push(new PokemonMove(movePool[index][0], 0, 0)); + this.moveset.push(new PokemonMove(movePool[index][0])); } // Trigger FormChange, except for enemy Pokemon during Mystery Encounters, to avoid crashes @@ -4109,7 +4109,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } /**@overload */ - getTag(tagType: BattlerTagType.GRUDGE): GrudgeTag | nil; + getTag(tagType: BattlerTagType.GRUDGE): GrudgeTag | undefined; /** @overload */ getTag(tagType: BattlerTagType.SUBSTITUTE): SubstituteTag | undefined; @@ -4326,10 +4326,41 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return moveHistory.slice(0).reverse(); } + /** + * Return the most recently executed {@linkcode TurnMove} this {@linkcode Pokemon} has used that is: + * - Not {@linkcode MoveId.NONE} + * - Non-virtual ({@linkcode MoveUseMode | useMode} < {@linkcode MoveUseMode.INDIRECT}) + * @param ignoreStruggle - Whether to additionally ignore {@linkcode Moves.STRUGGLE}; default `false` + * @param ignoreFollowUp - Whether to ignore moves with a use type of {@linkcode MoveUseMode.FOLLOW_UP} + * (e.g. ones called by Copycat/Mirror Move); default `true`. + * @returns The last move this Pokemon has used satisfying the aforementioned conditions, + * or `undefined` if no applicable moves have been used since switching in. + */ + getLastNonVirtualMove(ignoreStruggle = false, ignoreFollowUp = true): TurnMove | undefined { + return this.getLastXMoves(-1).find( + m => + m.move !== MoveId.NONE && + (!ignoreStruggle || m.move !== MoveId.STRUGGLE) && + (!isVirtual(m.useMode) || (!ignoreFollowUp && m.useMode === MoveUseMode.FOLLOW_UP)), + ); + } + + /** + * Return this Pokemon's move queue, consisting of all the moves it is slated to perform. + * @returns An array of {@linkcode TurnMove}, as described above + */ getMoveQueue(): TurnMove[] { return this.summonData.moveQueue; } + /** + * Add a new entry to the end of this Pokemon's move queue. + * @param queuedMove - A {@linkcode TurnMove} to push to this Pokemon's queue. + */ + pushMoveQueue(queuedMove: TurnMove): void { + this.summonData.moveQueue.push(queuedMove); + } + changeForm(formChange: SpeciesFormChange): Promise { return new Promise(resolve => { this.formIndex = Math.max( @@ -5987,7 +6018,7 @@ export class PlayerPokemon extends Pokemon { copyMoveset(): PokemonMove[] { const newMoveset: PokemonMove[] = []; this.moveset.forEach(move => { - newMoveset.push(new PokemonMove(move.moveId, 0, move.ppUp, move.virtual, move.maxPpOverride)); + newMoveset.push(new PokemonMove(move.moveId, 0, move.ppUp, move.maxPpOverride)); }); return newMoveset; @@ -6167,33 +6198,39 @@ export class EnemyPokemon extends Pokemon { * the Pokemon the move will target. * @returns this Pokemon's next move in the format {move, moveTargets} */ + // TODO: split this up and move it elsewhere getNextMove(): TurnMove { - // If this Pokemon has a move already queued, return it. + // If this Pokemon has a usable move already queued, return it, + // removing all unusable moves before it in the queue. const moveQueue = this.getMoveQueue(); - if (moveQueue.length !== 0) { - const queuedMove = moveQueue[0]; - if (queuedMove) { - const moveIndex = this.getMoveset().findIndex(m => m.moveId === queuedMove.move); - if ( - (moveIndex > -1 && this.getMoveset()[moveIndex].isUsable(this, queuedMove.ignorePP)) || - queuedMove.virtual - ) { - return queuedMove; - } - this.getMoveQueue().shift(); - return this.getNextMove(); + for (const [i, queuedMove] of moveQueue.entries()) { + const movesetMove = this.getMoveset().find(m => m.moveId === queuedMove.move); + // If the queued move was called indirectly, ignore all PP and usability checks. + // Otherwise, ensure that the move being used is actually usable & in our moveset. + // TODO: What should happen if a pokemon forgets a charging move mid-use? + if (isVirtual(queuedMove.useMode) || movesetMove?.isUsable(this, isIgnorePP(queuedMove.useMode))) { + moveQueue.splice(0, i); // TODO: This should not be done here + return queuedMove; } } + // We went through the entire queue without a match; clear the entire thing. + this.summonData.moveQueue = []; + // Filter out any moves this Pokemon cannot use let movePool = this.getMoveset().filter(m => m.isUsable(this)); // If no moves are left, use Struggle. Otherwise, continue with move selection if (movePool.length) { // If there's only 1 move in the move pool, use it. if (movePool.length === 1) { - return { move: movePool[0].moveId, targets: this.getNextTargets(movePool[0].moveId) }; + return { + move: movePool[0].moveId, + targets: this.getNextTargets(movePool[0].moveId), + useMode: MoveUseMode.NORMAL, + }; } // If a move is forced because of Encore, use it. + // Said moves are executed normally const encoreTag = this.getTag(EncoreTag) as EncoreTag; if (encoreTag) { const encoreMove = movePool.find(m => m.moveId === encoreTag.moveId); @@ -6201,6 +6238,7 @@ export class EnemyPokemon extends Pokemon { return { move: encoreMove.moveId, targets: this.getNextTargets(encoreMove.moveId), + useMode: MoveUseMode.NORMAL, }; } } @@ -6208,7 +6246,7 @@ export class EnemyPokemon extends Pokemon { // No enemy should spawn with this AI type in-game case AiType.RANDOM: { const moveId = movePool[globalScene.randBattleSeedInt(movePool.length)].moveId; - return { move: moveId, targets: this.getNextTargets(moveId) }; + return { move: moveId, targets: this.getNextTargets(moveId), useMode: MoveUseMode.NORMAL }; } case AiType.SMART_RANDOM: case AiType.SMART: { @@ -6377,14 +6415,20 @@ export class EnemyPokemon extends Pokemon { r, sortedMovePool.map(m => m.getName()), ); - return { move: sortedMovePool[r]!.moveId, targets: moveTargets[sortedMovePool[r]!.moveId] }; + return { + move: sortedMovePool[r]!.moveId, + targets: moveTargets[sortedMovePool[r]!.moveId], + useMode: MoveUseMode.NORMAL, + }; } } } + // No moves left means struggle return { move: MoveId.STRUGGLE, targets: this.getNextTargets(MoveId.STRUGGLE), + useMode: MoveUseMode.IGNORE_PP, }; } @@ -6730,10 +6774,9 @@ interface IllusionData { export interface TurnMove { move: MoveId; targets: BattlerIndex[]; + useMode: MoveUseMode; result?: MoveResult; - virtual?: boolean; turn?: number; - ignorePP?: boolean; } export interface AttackMoveResult { @@ -6752,6 +6795,12 @@ export interface AttackMoveResult { export class PokemonSummonData { /** [Atk, Def, SpAtk, SpDef, Spd, Acc, Eva] */ public statStages: number[] = [0, 0, 0, 0, 0, 0, 0]; + /** + * A queue of moves yet to be executed, used by charging, recharging and frenzy moves. + * So long as this array is nonempty, this Pokemon's corresponding `CommandPhase` will be skipped over entirely + * in favor of using the queued move. + * TODO: Clean up a lot of the code surrounding the move queue. + */ public moveQueue: TurnMove[] = []; public tags: BattlerTag[] = []; public abilitySuppressed = false; @@ -6871,7 +6920,6 @@ export class PokemonWaveData { * Resets at the start of a new turn, as well as on switch. */ export class PokemonTurnData { - public flinched = false; public acted = false; /** How many times the current move should hit the target(s) */ public hitCount = 0; @@ -6893,8 +6941,9 @@ export class PokemonTurnData { public failedRunAway = false; public joinedRound = false; /** + * The amount of times this Pokemon has acted again and used a move in the current turn. * Used to make sure multi-hits occur properly when the user is - * forced to act again in the same turn + * forced to act again in the same turn, and **must be incremented** by any effects that grant extra actions. */ public extraTurns = 0; /** diff --git a/src/overrides.ts b/src/overrides.ts index 6086f75a58e..5858be77dac 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -285,17 +285,17 @@ export const defaultOverrides = new DefaultOverrides(); export default { ...defaultOverrides, - ...overrides + ...overrides, } satisfies InstanceType; export type BattleStyle = "double" | "single" | "even-doubles" | "odd-doubles"; export type RandomTrainerOverride = { /** The Type of trainer to force */ - trainerType: Exclude, + trainerType: Exclude; /* If the selected trainer type has a double version, it will always use its double version. */ - alwaysDouble?: boolean -} + alwaysDouble?: boolean; +}; /** The type of the {@linkcode DefaultOverrides} class */ export type OverridesType = typeof DefaultOverrides; diff --git a/src/phase-manager.ts b/src/phase-manager.ts index 8c22a45758c..9390e6dd75d 100644 --- a/src/phase-manager.ts +++ b/src/phase-manager.ts @@ -397,7 +397,7 @@ export class PhaseManager { * @returns the found phase or undefined if none found */ findPhase

      (phaseFilter: (phase: P) => boolean): P | undefined { - return this.phaseQueue.find(phaseFilter) as P; + return this.phaseQueue.find(phaseFilter) as P | undefined; } tryReplacePhase(phaseFilter: (phase: Phase) => boolean, phase: Phase): boolean { diff --git a/src/phases/command-phase.ts b/src/phases/command-phase.ts index e796f22921c..754d54de70a 100644 --- a/src/phases/command-phase.ts +++ b/src/phases/command-phase.ts @@ -22,6 +22,7 @@ import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; import { isNullOrUndefined } from "#app/utils/common"; import { ArenaTagSide } from "#enums/arena-tag-side"; import { ArenaTagType } from "#app/enums/arena-tag-type"; +import { isVirtual, isIgnorePP, MoveUseMode } from "#enums/move-use-mode"; export class CommandPhase extends FieldPhase { public readonly phaseName = "CommandPhase"; @@ -80,7 +81,7 @@ export class CommandPhase extends FieldPhase { ) { globalScene.currentBattle.turnCommands[this.fieldIndex] = { command: Command.FIGHT, - move: { move: MoveId.NONE, targets: [] }, + move: { move: MoveId.NONE, targets: [], useMode: MoveUseMode.NORMAL }, skip: true, }; } @@ -103,29 +104,31 @@ export class CommandPhase extends FieldPhase { moveQueue.length && moveQueue[0] && moveQueue[0].move && - !moveQueue[0].virtual && + !isVirtual(moveQueue[0].useMode) && (!playerPokemon.getMoveset().find(m => m.moveId === moveQueue[0].move) || !playerPokemon .getMoveset() [playerPokemon.getMoveset().findIndex(m => m.moveId === moveQueue[0].move)].isUsable( playerPokemon, - moveQueue[0].ignorePP, + isIgnorePP(moveQueue[0].useMode), )) ) { moveQueue.shift(); } + // TODO: Refactor this. I did a few simple find/replace matches but this is just ABHORRENTLY structured if (moveQueue.length > 0) { const queuedMove = moveQueue[0]; if (!queuedMove.move) { - this.handleCommand(Command.FIGHT, -1); + this.handleCommand(Command.FIGHT, -1, MoveUseMode.NORMAL); } else { const moveIndex = playerPokemon.getMoveset().findIndex(m => m.moveId === queuedMove.move); if ( - (moveIndex > -1 && playerPokemon.getMoveset()[moveIndex].isUsable(playerPokemon, queuedMove.ignorePP)) || - queuedMove.virtual + (moveIndex > -1 && + playerPokemon.getMoveset()[moveIndex].isUsable(playerPokemon, isIgnorePP(queuedMove.useMode))) || + isVirtual(queuedMove.useMode) ) { - this.handleCommand(Command.FIGHT, moveIndex, queuedMove.ignorePP, queuedMove); + this.handleCommand(Command.FIGHT, moveIndex, queuedMove.useMode, queuedMove); } else { globalScene.ui.setMode(UiMode.COMMAND, this.fieldIndex); } @@ -143,18 +146,23 @@ export class CommandPhase extends FieldPhase { } } + /** + * TODO: Remove `args` and clean this thing up + * Code will need to be copied over from pkty except replacing the `virtual` and `ignorePP` args with a corresponding `MoveUseMode`. + */ handleCommand(command: Command, cursor: number, ...args: any[]): boolean { const playerPokemon = globalScene.getPlayerField()[this.fieldIndex]; let success = false; switch (command) { + // TODO: We don't need 2 args for this - moveUseMode is carried over from queuedMove case Command.TERA: case Command.FIGHT: { let useStruggle = false; const turnMove: TurnMove | undefined = args.length === 2 ? (args[1] as TurnMove) : undefined; if ( cursor === -1 || - playerPokemon.trySelectMove(cursor, args[0] as boolean) || + playerPokemon.trySelectMove(cursor, isIgnorePP(args[0] as MoveUseMode)) || (useStruggle = cursor > -1 && !playerPokemon.getMoveset().filter(m => m.isUsable(playerPokemon)).length) ) { let moveId: MoveId; @@ -171,7 +179,7 @@ export class CommandPhase extends FieldPhase { const turnCommand: TurnCommand = { command: Command.FIGHT, cursor: cursor, - move: { move: moveId, targets: [], ignorePP: args[0] }, + move: { move: moveId, targets: [], useMode: args[0] }, args: args, }; const preTurnCommand: TurnCommand = { diff --git a/src/phases/move-charge-phase.ts b/src/phases/move-charge-phase.ts index 15a98ebabd2..51b8fe96ff6 100644 --- a/src/phases/move-charge-phase.ts +++ b/src/phases/move-charge-phase.ts @@ -8,10 +8,11 @@ import { MoveResult } from "#enums/move-result"; import { BooleanHolder } from "#app/utils/common"; import { PokemonPhase } from "#app/phases/pokemon-phase"; import { BattlerTagType } from "#enums/battler-tag-type"; +import type { MoveUseMode } from "#enums/move-use-mode"; +import type { ChargingMove } from "#app/@types/move-types"; /** * Phase for the "charging turn" of two-turn moves (e.g. Dig). - * @extends {@linkcode PokemonPhase} */ export class MoveChargePhase extends PokemonPhase { public readonly phaseName = "MoveChargePhase"; @@ -20,10 +21,21 @@ export class MoveChargePhase extends PokemonPhase { /** The field index targeted by the move (Charging moves assume single target) */ public targetIndex: BattlerIndex; - constructor(battlerIndex: BattlerIndex, targetIndex: BattlerIndex, move: PokemonMove) { + /** The {@linkcode MoveUseMode} of the move that triggered the charge; passed on from move phase */ + private useMode: MoveUseMode; + + /** + * Create a new MoveChargePhase. + * @param battlerIndex - The {@linkcode BattlerIndex} of the user. + * @param targetIndex - The {@linkcode BattlerIndex} of the target. + * @param move - The {@linkcode PokemonMove} being used + * @param useMode - The move's {@linkcode MoveUseMode} + */ + constructor(battlerIndex: BattlerIndex, targetIndex: BattlerIndex, move: PokemonMove, useMode: MoveUseMode) { super(battlerIndex); this.move = move; this.targetIndex = targetIndex; + this.useMode = useMode; } public override start() { @@ -37,7 +49,8 @@ export class MoveChargePhase extends PokemonPhase { // immediately end this phase. if (!target || !move.isChargingMove()) { console.warn("Invalid parameters for MoveChargePhase"); - return super.end(); + super.end(); + return; } new MoveChargeAnim(move.chargeAnim, move.id, user).play(false, () => { @@ -52,29 +65,30 @@ export class MoveChargePhase extends PokemonPhase { /** Checks the move's instant charge conditions, then ends this phase. */ public override end() { const user = this.getUserPokemon(); - const move = this.move.getMove(); + // Checked for `ChargingMove` in `this.start()` + const move = this.move.getMove() as ChargingMove; - if (move.isChargingMove()) { - const instantCharge = new BooleanHolder(false); + const instantCharge = new BooleanHolder(false); + applyMoveChargeAttrs("InstantChargeAttr", user, null, move, instantCharge); - applyMoveChargeAttrs("InstantChargeAttr", user, null, move, instantCharge); - - if (instantCharge.value) { - // this MoveEndPhase will be duplicated by the queued MovePhase if not removed - globalScene.phaseManager.tryRemovePhase(phase => phase.is("MoveEndPhase") && phase.getPokemon() === user); - // queue a new MovePhase for this move's attack phase - globalScene.phaseManager.unshiftNew("MovePhase", user, [this.targetIndex], this.move, false); - } else { - user.getMoveQueue().push({ move: move.id, targets: [this.targetIndex] }); - } - - // Add this move's charging phase to the user's move history - user.pushMoveHistory({ - move: this.move.moveId, - targets: [this.targetIndex], - result: MoveResult.OTHER, - }); + // If instantly charging, remove the pending MoveEndPhase and queue a new MovePhase for the "attack" portion of the move. + // Otherwise, add the attack portion to the user's move queue to execute next turn. + // TODO: This checks status twice for a single-turn usage... + if (instantCharge.value) { + globalScene.phaseManager.tryRemovePhase(phase => phase.is("MoveEndPhase") && phase.getPokemon() === user); + globalScene.phaseManager.unshiftNew("MovePhase", user, [this.targetIndex], this.move, this.useMode); + } else { + user.pushMoveQueue({ move: move.id, targets: [this.targetIndex], useMode: this.useMode }); } + + // Add this move's charging phase to the user's move history + user.pushMoveHistory({ + move: this.move.moveId, + targets: [this.targetIndex], + result: MoveResult.OTHER, + useMode: this.useMode, + }); + super.end(); } diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index 770d9c79a2a..35c803ee1d7 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -54,20 +54,25 @@ import { HitCheckResult } from "#enums/hit-check-result"; import type Move from "#app/data/moves/move"; import { isFieldTargeted } from "#app/data/moves/move-utils"; import { DamageAchv } from "#app/system/achv"; +import { isVirtual, isReflected, MoveUseMode } from "#enums/move-use-mode"; -type HitCheckEntry = [HitCheckResult, TypeDamageMultiplier]; +export type HitCheckEntry = [HitCheckResult, TypeDamageMultiplier]; export class MoveEffectPhase extends PokemonPhase { public readonly phaseName = "MoveEffectPhase"; public move: Move; - private virtual = false; protected targets: BattlerIndex[]; - protected reflected = false; + protected useMode: MoveUseMode; /** The result of the hit check against each target */ private hitChecks: HitCheckEntry[]; - /** The move history entry for the move */ + /** + * Log to be entered into the user's move history once the move result is resolved. + + * Note that `result` logs whether the move was successfully + * used in the sense of "Does it have an effect on the user?". + */ private moveHistoryEntry: TurnMove; /** Is this the first strike of a move? */ @@ -75,19 +80,20 @@ export class MoveEffectPhase extends PokemonPhase { /** Is this the last strike of a move? */ private lastHit: boolean; - /** Phases queued during moves */ + /** + * Phases queued during moves; used to add a new MovePhase for reflected moves after triggering. + * TODO: Remove this and move the reflection logic to ability-side + */ private queuedPhases: Phase[] = []; /** - * @param reflected Indicates that the move was reflected by the user due to magic coat or magic bounce - * @param virtual Indicates that the move is a virtual move (i.e. called by metronome) + * @param useMode - The {@linkcode MoveUseMode} corresponding to how this move was used. */ - constructor(battlerIndex: BattlerIndex, targets: BattlerIndex[], move: Move, reflected = false, virtual = false) { + constructor(battlerIndex: BattlerIndex, targets: BattlerIndex[], move: Move, useMode: MoveUseMode) { super(battlerIndex); this.move = move; - this.virtual = virtual; + this.useMode = useMode; - this.reflected = reflected; /** * In double battles, if the right Pokemon selects a spread move and the left Pokemon dies * with no party members available to switch in, then the right Pokemon takes the index @@ -158,7 +164,7 @@ export class MoveEffectPhase extends PokemonPhase { * Queue the phaes that should occur when the target reflects the move back to the user * @param user - The {@linkcode Pokemon} using this phase's invoked move * @param target - The {@linkcode Pokemon} that is reflecting the move - * + * TODO: Rework this to use `onApply` of Magic Coat */ private queueReflectedMove(user: Pokemon, target: Pokemon): void { const newTargets = this.move.isMultiTarget() @@ -181,10 +187,8 @@ export class MoveEffectPhase extends PokemonPhase { "MovePhase", target, newTargets, - new PokemonMove(this.move.id, 0, 0, true), - true, - true, - true, + new PokemonMove(this.move.id), + MoveUseMode.REFLECTED, ), ); } @@ -278,8 +282,18 @@ export class MoveEffectPhase extends PokemonPhase { const overridden = new BooleanHolder(false); const move = this.move; - // Assume single target for override - applyMoveAttrs("OverrideMoveEffectAttr", user, this.getFirstTarget() ?? null, move, overridden, this.virtual); + // Apply effects to override a move effect. + // Assuming single target here works as this is (currently) + // only used for Future Sight, calling and Pledge moves. + // TODO: change if any other move effect overrides are introduced + applyMoveAttrs( + "OverrideMoveEffectAttr", + user, + this.getFirstTarget() ?? null, + move, + overridden, + isVirtual(this.useMode), + ); // If other effects were overriden, stop this phase before they can be applied if (overridden.value) { @@ -290,8 +304,8 @@ export class MoveEffectPhase extends PokemonPhase { // Lapse `MOVE_EFFECT` effects (i.e. semi-invulnerability) when applicable user.lapseTags(BattlerTagLapseType.MOVE_EFFECT); - // If the user is acting again (such as due to Instruct), reset hitsLeft/hitCount so that - // the move executes correctly (ensures all hits of a multi-hit are properly calculated) + // If the user is acting again (such as due to Instruct or Dancer), reset hitsLeft/hitCount and + // recalculate hit count for multi-hit moves. if (user.turnData.hitsLeft === 0 && user.turnData.hitCount > 0 && user.turnData.extraTurns > 0) { user.turnData.hitsLeft = -1; user.turnData.hitCount = 0; @@ -316,16 +330,11 @@ export class MoveEffectPhase extends PokemonPhase { user.turnData.hitsLeft = hitCount.value; } - /* - * Log to be entered into the user's move history once the move result is resolved. - * Note that `result` logs whether the move was successfully - * used in the sense of "Does it have an effect on the user?". - */ this.moveHistoryEntry = { move: this.move.id, targets: this.targets, result: MoveResult.PENDING, - virtual: this.virtual, + useMode: this.useMode, }; const fieldMove = isFieldTargeted(move); @@ -390,29 +399,35 @@ export class MoveEffectPhase extends PokemonPhase { public override end(): void { const user = this.getUserPokemon(); - /** - * If this phase isn't for the invoked move's last strike, - * unshift another MoveEffectPhase for the next strike. - * Otherwise, queue a message indicating the number of times the move has struck - * (if the move has struck more than once), then apply the heal from Shell Bell - * to the user. - */ - if (user) { - if (user.turnData.hitsLeft && --user.turnData.hitsLeft >= 1 && this.getFirstTarget()?.isActive()) { - globalScene.phaseManager.unshiftPhase(this.getNewHitPhase()); - } else { - // Queue message for number of hits made by multi-move - // If multi-hit attack only hits once, still want to render a message - const hitsTotal = user.turnData.hitCount - Math.max(user.turnData.hitsLeft, 0); - if (hitsTotal > 1 || (user.turnData.hitsLeft && user.turnData.hitsLeft > 0)) { - // If there are multiple hits, or if there are hits of the multi-hit move left - globalScene.phaseManager.queueMessage(i18next.t("battle:attackHitsCount", { count: hitsTotal })); - } - globalScene.applyModifiers(HitHealModifier, this.player, user); - this.getTargets().forEach(target => (target.turnData.moveEffectiveness = null)); - } + if (!user) { + super.end(); + return; } + /** + * If this phase isn't for the invoked move's last strike (and we still have something to hit), + * unshift another MoveEffectPhase for the next strike before ending this phase. + */ + if (--user.turnData.hitsLeft >= 1 && this.getFirstTarget()) { + this.addNextHitPhase(); + super.end(); + return; + } + + /** + * All hits of the move have resolved by now. + * Queue message for multi-strike moves before applying Shell Bell heals & proccing Dancer-like effects. + */ + const hitsTotal = user.turnData.hitCount - Math.max(user.turnData.hitsLeft, 0); + if (hitsTotal > 1 || user.turnData.hitsLeft > 0) { + // Queue message if multiple hits occurred or were slated to occur (such as a Triple Axel miss) + globalScene.phaseManager.queueMessage(i18next.t("battle:attackHitsCount", { count: hitsTotal })); + } + + globalScene.applyModifiers(HitHealModifier, this.player, user); + this.getTargets().forEach(target => { + target.turnData.moveEffectiveness = null; + }); super.end(); } @@ -422,7 +437,6 @@ export class MoveEffectPhase extends PokemonPhase { * @param user - The {@linkcode Pokemon} using this phase's invoked move * @param target - {@linkcode Pokemon} the current target of this phase's invoked move * @param hitResult - The {@linkcode HitResult} of the attempted move - * @returns a `Promise` intended to be passed into a `then()` call. */ protected applyOnGetHitAbEffects(user: Pokemon, target: Pokemon, hitResult: HitResult): void { applyPostDefendAbAttrs("PostDefendAbAttr", target, user, this.move, hitResult); @@ -434,7 +448,6 @@ export class MoveEffectPhase extends PokemonPhase { * @param user - The {@linkcode Pokemon} using this phase's invoked move * @param target - {@linkcode Pokemon} the current target of this phase's invoked move * @param dealsDamage - `true` if the attempted move successfully dealt damage - * @returns a function intended to be passed into a `then()` call. */ protected applyHeldItemFlinchCheck(user: Pokemon, target: Pokemon, dealsDamage: boolean): void { if (this.move.hasAttr("FlinchAttr")) { @@ -458,8 +471,9 @@ export class MoveEffectPhase extends PokemonPhase { * @param user - The {@linkcode Pokemon} using this phase's invoked move * @param target - {@linkcode Pokemon} the target to check for protection * @param move - The {@linkcode Move} being used + * @returns Whether the pokemon was protected */ - private protectedCheck(user: Pokemon, target: Pokemon) { + private protectedCheck(user: Pokemon, target: Pokemon): boolean { /** The {@linkcode ArenaTagSide} to which the target belongs */ const targetSide = target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; /** Has the invoked move been cancelled by conditional protection (e.g Quick Guard)? */ @@ -480,14 +494,15 @@ export class MoveEffectPhase extends PokemonPhase { ); } + // TODO: Break up this chunky boolean to make it more palatable return ( ![MoveTarget.ENEMY_SIDE, MoveTarget.BOTH_SIDES].includes(this.move.moveTarget) && (bypassIgnoreProtect.value || !this.move.doesFlagEffectApply({ flag: MoveFlags.IGNORE_PROTECT, user, target })) && (hasConditionalProtectApplied.value || (!target.findTags(t => t instanceof DamageProtectedTag).length && - target.findTags(t => t instanceof ProtectedTag).find(t => target.lapseTag(t.tagType))) || + target.findTags(t => t instanceof ProtectedTag).some(t => target.lapseTag(t.tagType))) || (this.move.category !== MoveCategory.STATUS && - target.findTags(t => t instanceof DamageProtectedTag).find(t => target.lapseTag(t.tagType)))) + target.findTags(t => t instanceof DamageProtectedTag).some(t => target.lapseTag(t.tagType)))) ); } @@ -547,7 +562,8 @@ export class MoveEffectPhase extends PokemonPhase { return [HitCheckResult.PROTECTED, 0]; } - if (!this.reflected && move.doesFlagEffectApply({ flag: MoveFlags.REFLECTABLE, user, target })) { + // Reflected moves cannot be reflected again + if (!isReflected(this.useMode) && move.doesFlagEffectApply({ flag: MoveFlags.REFLECTABLE, user, target })) { return [HitCheckResult.REFLECTED, 0]; } @@ -660,12 +676,17 @@ export class MoveEffectPhase extends PokemonPhase { return (this.player ? globalScene.getPlayerField() : globalScene.getEnemyField())[this.fieldIndex]; } - /** @returns An array of all {@linkcode Pokemon} targeted by this phase's invoked move */ + /** + * @returns An array of {@linkcode Pokemon} that are: + * - On-field and active + * - Non-fainted + * - Targeted by this phase's invoked move + */ public getTargets(): Pokemon[] { return globalScene.getField(true).filter(p => this.targets.indexOf(p.getBattlerIndex()) > -1); } - /** @returns The first target of this phase's invoked move */ + /** @returns The first active, non-fainted target of this phase's invoked move. */ public getFirstTarget(): Pokemon | undefined { return this.getTargets()[0]; } @@ -705,9 +726,12 @@ export class MoveEffectPhase extends PokemonPhase { } } - /** @returns A new `MoveEffectPhase` with the same properties as this phase */ - protected getNewHitPhase(): MoveEffectPhase { - return new MoveEffectPhase(this.battlerIndex, this.targets, this.move, this.reflected, this.virtual); + /** + * Unshifts a new `MoveEffectPhase` with the same properties as this phase. + * Used to queue the next hit of multi-strike moves. + */ + protected addNextHitPhase(): void { + globalScene.phaseManager.unshiftNew("MoveEffectPhase", this.battlerIndex, this.targets, this.move, this.useMode); } /** Removes all substitutes that were broken by this phase's invoked move */ @@ -729,7 +753,6 @@ export class MoveEffectPhase extends PokemonPhase { * @param firstTarget Whether the target is the first to be hit by the current strike * @param selfTarget If defined, limits the effects triggered to either self-targeted * effects (if set to `true`) or targeted effects (if set to `false`). - * @returns a `Promise` applying the relevant move effects. */ protected triggerMoveEffects( triggerType: MoveEffectTrigger, @@ -775,6 +798,7 @@ export class MoveEffectPhase extends PokemonPhase { const hitResult = this.applyMove(user, target, effectiveness); + // Apply effects to the user (always) and the target (if not blocked by substitute). this.triggerMoveEffects(MoveEffectTrigger.POST_APPLY, user, target, firstTarget, true); if (!this.move.hitsSubstitute(user, target)) { this.applyOnTargetEffects(user, target, hitResult, firstTarget); diff --git a/src/phases/move-end-phase.ts b/src/phases/move-end-phase.ts index 953f8eae4ce..8c8f2ac5239 100644 --- a/src/phases/move-end-phase.ts +++ b/src/phases/move-end-phase.ts @@ -25,9 +25,9 @@ export class MoveEndPhase extends PokemonPhase { if (!this.wasFollowUp && pokemon?.isActive(true)) { pokemon.lapseTags(BattlerTagLapseType.AFTER_MOVE); } - globalScene.arena.setIgnoreAbilities(false); // Remove effects which were set on a Pokemon which removes them on summon (i.e. via Mold Breaker) + globalScene.arena.setIgnoreAbilities(false); for (const target of this.targets) { if (target) { applyPostSummonAbAttrs("PostSummonRemoveEffectAbAttr", target); diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index a14327749f7..41a1042387b 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -5,7 +5,6 @@ import type { DelayedAttackTag } from "#app/data/arena-tag"; import { CommonAnim } from "#enums/move-anims-common"; import { CenterOfAttentionTag } from "#app/data/battler-tags"; import { BattlerTagLapseType } from "#enums/battler-tag-lapse-type"; -import type { HealStatusEffectAttr } from "#app/data/moves/move"; import { applyMoveAttrs } from "#app/data/moves/apply-attrs"; import { allMoves } from "#app/data/data-lists"; import { MoveFlags } from "#enums/MoveFlags"; @@ -20,13 +19,14 @@ import { MoveResult } from "#enums/move-result"; import { getPokemonNameWithAffix } from "#app/messages"; import Overrides from "#app/overrides"; import { BattlePhase } from "#app/phases/battle-phase"; -import { NumberHolder } from "#app/utils/common"; +import { enumValueToKey, NumberHolder } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; import { MoveId } from "#enums/move-id"; import { StatusEffect } from "#enums/status-effect"; import i18next from "i18next"; +import { isVirtual, isIgnorePP, isReflected, MoveUseMode, isIgnoreStatus } from "#enums/move-use-mode"; import { frenzyMissFunc } from "#app/data/moves/move-utils"; export class MovePhase extends BattlePhase { @@ -34,17 +34,19 @@ export class MovePhase extends BattlePhase { protected _pokemon: Pokemon; protected _move: PokemonMove; protected _targets: BattlerIndex[]; - protected followUp: boolean; - protected ignorePp: boolean; + public readonly useMode: MoveUseMode; // Made public for quash protected forcedLast: boolean; + + /** Whether the current move should fail but still use PP */ protected failed = false; + /** Whether the current move should cancel and retain PP */ protected cancelled = false; - protected reflected = false; public get pokemon(): Pokemon { return this._pokemon; } + // TODO: Do we need public getters but only protected setters? protected set pokemon(pokemon: Pokemon) { this._pokemon = pokemon; } @@ -66,51 +68,42 @@ export class MovePhase extends BattlePhase { } /** - * @param followUp Indicates that the move being used is a "follow-up" - for example, a move being used by Metronome or Dancer. - * Follow-ups bypass a few failure conditions, including flinches, sleep/paralysis/freeze and volatile status checks, etc. - * @param reflected Indicates that the move was reflected by Magic Coat or Magic Bounce. - * Reflected moves cannot be reflected again and will not trigger Dancer. + * Create a new MovePhase for using moves. + * @param pokemon - The {@linkcode Pokemon} using the move + * @param move - The {@linkcode PokemonMove} to use + * @param useMode - The {@linkcode MoveUseMode} corresponding to this move's means of execution (usually `MoveUseMode.NORMAL`). + * Not marked optional to ensure callers correctly pass on `useModes`. + * @param forcedLast - Whether to force this phase to occur last in order (for {@linkcode MoveId.QUASH}); default `false` */ - - constructor( - pokemon: Pokemon, - targets: BattlerIndex[], - move: PokemonMove, - followUp = false, - ignorePp = false, - reflected = false, - forcedLast = false, - ) { + constructor(pokemon: Pokemon, targets: BattlerIndex[], move: PokemonMove, useMode: MoveUseMode, forcedLast = false) { super(); this.pokemon = pokemon; this.targets = targets; this.move = move; - this.followUp = followUp; - this.ignorePp = ignorePp; - this.reflected = reflected; + this.useMode = useMode; this.forcedLast = forcedLast; } /** - * Checks if the pokemon is active, if the move is usable, and that the move is targetting something. + * Checks if the pokemon is active, if the move is usable, and that the move is targeting something. * @param ignoreDisableTags `true` to not check if the move is disabled * @returns `true` if all the checks pass */ public canMove(ignoreDisableTags = false): boolean { return ( this.pokemon.isActive(true) && - this.move.isUsable(this.pokemon, this.ignorePp, ignoreDisableTags) && - !!this.targets.length + this.move.isUsable(this.pokemon, isIgnorePP(this.useMode), ignoreDisableTags) && + this.targets.length > 0 ); } - /**Signifies the current move should fail but still use PP */ + /** Signifies the current move should fail but still use PP */ public fail(): void { this.failed = true; } - /**Signifies the current move should cancel and retain PP */ + /** Signifies the current move should cancel and retain PP */ public cancel(): void { this.cancelled = true; } @@ -118,7 +111,7 @@ export class MovePhase extends BattlePhase { /** * Shows whether the current move has been forced to the end of the turn * Needed for speed order, see {@linkcode MoveId.QUASH} - * */ + */ public isForcedLast(): boolean { return this.forcedLast; } @@ -126,9 +119,10 @@ export class MovePhase extends BattlePhase { public start(): void { super.start(); - console.log(MoveId[this.move.moveId]); + console.log(MoveId[this.move.moveId], enumValueToKey(MoveUseMode, this.useMode)); - // Check if move is unusable (e.g. because it's out of PP due to a mid-turn Spite). + // Check if move is unusable (e.g. running out of PP due to a mid-turn Spite + // or the user no longer being on field), ending the phase early if not. if (!this.canMove(true)) { if (this.pokemon.isActive(true)) { this.fail(); @@ -142,20 +136,20 @@ export class MovePhase extends BattlePhase { this.pokemon.turnData.acted = true; // Reset hit-related turn data when starting follow-up moves (e.g. Metronomed moves, Dancer repeats) - if (this.followUp) { + if (isVirtual(this.useMode)) { this.pokemon.turnData.hitsLeft = -1; this.pokemon.turnData.hitCount = 0; } // Check move to see if arena.ignoreAbilities should be true. - if (!this.followUp || this.reflected) { - if ( - this.move - .getMove() - .doesFlagEffectApply({ flag: MoveFlags.IGNORE_ABILITIES, user: this.pokemon, isFollowUp: this.followUp }) - ) { - globalScene.arena.setIgnoreAbilities(true, this.pokemon.getBattlerIndex()); - } + if ( + this.move.getMove().doesFlagEffectApply({ + flag: MoveFlags.IGNORE_ABILITIES, + user: this.pokemon, + isFollowUp: isVirtual(this.useMode), // Sunsteel strike and co. don't work when called indirectly + }) + ) { + globalScene.arena.setIgnoreAbilities(true, this.pokemon.getBattlerIndex()); } this.resolveRedirectTarget(); @@ -188,7 +182,7 @@ export class MovePhase extends BattlePhase { if ( (targets.length === 0 && !this.move.getMove().hasAttr("AddArenaTrapTagAttr")) || - (moveQueue.length && moveQueue[0].move === MoveId.NONE) + (moveQueue.length > 0 && moveQueue[0].move === MoveId.NONE) ) { this.showMoveText(); this.showFailedText(); @@ -201,83 +195,98 @@ export class MovePhase extends BattlePhase { } /** - * Handles {@link StatusEffect.SLEEP Sleep}/{@link StatusEffect.PARALYSIS Paralysis}/{@link StatusEffect.FREEZE Freeze} rolls and side effects. + * Handles {@link StatusEffect.SLEEP | Sleep}/{@link StatusEffect.PARALYSIS | Paralysis}/{@link StatusEffect.FREEZE | Freeze} rolls and side effects. */ protected resolvePreMoveStatusEffects(): void { - if (!this.followUp && this.pokemon.status && !this.pokemon.status.isPostTurn()) { - this.pokemon.status.incrementTurn(); - let activated = false; - let healed = false; + // Skip for follow ups/reflected moves, no status condition or post turn statuses (e.g. Poison/Toxic) + if (!this.pokemon.status?.effect || this.pokemon.status.isPostTurn() || isIgnoreStatus(this.useMode)) { + return; + } - switch (this.pokemon.status.effect) { - case StatusEffect.PARALYSIS: - activated = - (!this.pokemon.randBattleSeedInt(4) || Overrides.STATUS_ACTIVATION_OVERRIDE === true) && - Overrides.STATUS_ACTIVATION_OVERRIDE !== false; - break; - case StatusEffect.SLEEP: { - applyMoveAttrs("BypassSleepAttr", this.pokemon, null, this.move.getMove()); - const turnsRemaining = new NumberHolder(this.pokemon.status.sleepTurnsRemaining ?? 0); - applyAbAttrs( - "ReduceStatusEffectDurationAbAttr", - this.pokemon, - null, - false, - this.pokemon.status.effect, - turnsRemaining, - ); - this.pokemon.status.sleepTurnsRemaining = turnsRemaining.value; - healed = this.pokemon.status.sleepTurnsRemaining <= 0; - activated = !healed && !this.pokemon.getTag(BattlerTagType.BYPASS_SLEEP); - break; - } - case StatusEffect.FREEZE: - healed = - !!this.move - .getMove() - .findAttr( - attr => - attr.is("HealStatusEffectAttr") && - attr.selfTarget && - (attr as unknown as HealStatusEffectAttr).isOfEffect(StatusEffect.FREEZE), - ) || - (!this.pokemon.randBattleSeedInt(5) && Overrides.STATUS_ACTIVATION_OVERRIDE !== true) || - Overrides.STATUS_ACTIVATION_OVERRIDE === false; + if ( + this.useMode === MoveUseMode.INDIRECT && + [StatusEffect.SLEEP, StatusEffect.FREEZE].includes(this.pokemon.status.effect) + ) { + // Dancer thaws out or wakes up a frozen/sleeping user prior to use + this.pokemon.resetStatus(false); + return; + } - activated = !healed; - break; + this.pokemon.status.incrementTurn(); + + /** Whether to prevent us from using the move */ + let activated = false; + /** Whether to cure the status */ + let healed = false; + + switch (this.pokemon.status.effect) { + case StatusEffect.PARALYSIS: + activated = + (this.pokemon.randBattleSeedInt(4) === 0 || Overrides.STATUS_ACTIVATION_OVERRIDE === true) && + Overrides.STATUS_ACTIVATION_OVERRIDE !== false; + break; + case StatusEffect.SLEEP: { + applyMoveAttrs("BypassSleepAttr", this.pokemon, null, this.move.getMove()); + const turnsRemaining = new NumberHolder(this.pokemon.status.sleepTurnsRemaining ?? 0); + applyAbAttrs( + "ReduceStatusEffectDurationAbAttr", + this.pokemon, + null, + false, + this.pokemon.status.effect, + turnsRemaining, + ); + this.pokemon.status.sleepTurnsRemaining = turnsRemaining.value; + healed = this.pokemon.status.sleepTurnsRemaining <= 0; + activated = !healed && !this.pokemon.getTag(BattlerTagType.BYPASS_SLEEP); + break; } + case StatusEffect.FREEZE: + healed = + !!this.move + .getMove() + .findAttr( + attr => attr.is("HealStatusEffectAttr") && attr.selfTarget && attr.isOfEffect(StatusEffect.FREEZE), + ) || + (!this.pokemon.randBattleSeedInt(5) && Overrides.STATUS_ACTIVATION_OVERRIDE !== true) || + Overrides.STATUS_ACTIVATION_OVERRIDE === false; - if (activated) { - this.cancel(); - globalScene.phaseManager.queueMessage( - getStatusEffectActivationText(this.pokemon.status.effect, getPokemonNameWithAffix(this.pokemon)), - ); - globalScene.phaseManager.unshiftNew( - "CommonAnimPhase", - this.pokemon.getBattlerIndex(), - undefined, - CommonAnim.POISON + (this.pokemon.status.effect - 1), - ); - } else if (healed) { - globalScene.phaseManager.queueMessage( - getStatusEffectHealText(this.pokemon.status.effect, getPokemonNameWithAffix(this.pokemon)), - ); - this.pokemon.resetStatus(); - this.pokemon.updateInfo(); - } + activated = !healed; + break; + } + + if (activated) { + // Cancel move activation and play effect + this.cancel(); + globalScene.phaseManager.queueMessage( + getStatusEffectActivationText(this.pokemon.status.effect, getPokemonNameWithAffix(this.pokemon)), + ); + globalScene.phaseManager.unshiftNew( + "CommonAnimPhase", + this.pokemon.getBattlerIndex(), + undefined, + CommonAnim.POISON + (this.pokemon.status.effect - 1), // offset anim # by effect # + ); + } else if (healed) { + // cure status and play effect + globalScene.phaseManager.queueMessage( + getStatusEffectHealText(this.pokemon.status.effect, getPokemonNameWithAffix(this.pokemon)), + ); + this.pokemon.resetStatus(); + this.pokemon.updateInfo(); } } /** - * Lapse {@linkcode BattlerTagLapseType.PRE_MOVE PRE_MOVE} tags that trigger before a move is used, regardless of whether or not it failed. - * Also lapse {@linkcode BattlerTagLapseType.MOVE MOVE} tags if the move should be successful. + * Lapse {@linkcode BattlerTagLapseType.PRE_MOVE | PRE_MOVE} tags that trigger before a move is used, regardless of whether or not it failed. + * Also lapse {@linkcode BattlerTagLapseType.MOVE | MOVE} tags if the move is successful and not called indirectly. */ protected lapsePreMoveAndMoveTags(): void { this.pokemon.lapseTags(BattlerTagLapseType.PRE_MOVE); // TODO: does this intentionally happen before the no targets/MoveId.NONE on queue cancellation case is checked? - if (!this.followUp && this.canMove() && !this.cancelled) { + // (In other words, check if truant can proc on a move w/o targets) + if (!isIgnoreStatus(this.useMode) && this.canMove() && !this.cancelled) { this.pokemon.lapseTags(BattlerTagLapseType.MOVE); } } @@ -285,11 +294,12 @@ export class MovePhase extends BattlePhase { protected useMove(): void { const targets = this.getActiveTargetPokemon(); const moveQueue = this.pokemon.getMoveQueue(); + const move = this.move.getMove(); // form changes happen even before we know that the move wll execute. globalScene.triggerPokemonFormChange(this.pokemon, SpeciesFormChangePreMoveTrigger); - const isDelayedAttack = this.move.getMove().hasAttr("DelayedAttackAttr"); + const isDelayedAttack = move.hasAttr("DelayedAttackAttr"); if (isDelayedAttack) { // Check the player side arena if future sight is active const futureSightTags = globalScene.arena.findTags(t => t.tagType === ArenaTagType.FUTURE_SIGHT); @@ -329,21 +339,21 @@ export class MovePhase extends BattlePhase { this.showMoveText(); } - if (moveQueue.length > 0) { - // Using .shift here clears out two turn moves once they've been used - this.ignorePp = moveQueue.shift()?.ignorePP ?? false; - } - + // Clear out any two turn moves once they've been used. + // TODO: Refactor move queues and remove this assignment; + // Move queues should be handled by the calling `CommandPhase` or a manager for it + // @ts-expect-error - useMode is readonly and shouldn't normally be assigned to + this.useMode = moveQueue.shift()?.useMode ?? this.useMode; if (this.pokemon.getTag(BattlerTagType.CHARGING)?.sourceMove === this.move.moveId) { this.pokemon.lapseTag(BattlerTagType.CHARGING); } - // "commit" to using the move, deducting PP. - if (!this.ignorePp) { + if (!isIgnorePP(this.useMode)) { + // "commit" to using the move, deducting PP. const ppUsed = 1 + this.getPpIncreaseFromPressure(targets); this.move.usePp(ppUsed); - globalScene.eventTarget.dispatchEvent(new MoveUsedEvent(this.pokemon?.id, this.move.getMove(), this.move.ppUsed)); + globalScene.eventTarget.dispatchEvent(new MoveUsedEvent(this.pokemon?.id, move, this.move.ppUsed)); } /** @@ -357,8 +367,6 @@ export class MovePhase extends BattlePhase { * TODO: These steps are straightforward, but the implementation below is extremely convoluted. */ - const move = this.move.getMove(); - /** * Move conditions assume the move has a single target * TODO: is this sustainable? @@ -394,8 +402,7 @@ export class MovePhase extends BattlePhase { this.pokemon.getBattlerIndex(), this.targets, move, - this.reflected, - this.move.virtual, + this.useMode, ); } else { if ([MoveId.ROAR, MoveId.WHIRLWIND, MoveId.TRICK_OR_TREAT, MoveId.FORESTS_CURSE].includes(this.move.moveId)) { @@ -406,7 +413,7 @@ export class MovePhase extends BattlePhase { move: this.move.moveId, targets: this.targets, result: MoveResult.FAIL, - virtual: this.move.virtual, + useMode: this.useMode, }); const failureMessage = move.getFailedText(this.pokemon, targets[0], move); @@ -426,8 +433,10 @@ export class MovePhase extends BattlePhase { } // Handle Dancer, which triggers immediately after a move is used (rather than waiting on `this.end()`). - // Note that the `!this.followUp` check here prevents an infinite Dancer loop. - if (this.move.getMove().hasFlag(MoveFlags.DANCE_MOVE) && !this.followUp) { + // Note the MoveUseMode check here prevents an infinite Dancer loop. + const dancerModes: MoveUseMode[] = [MoveUseMode.INDIRECT, MoveUseMode.REFLECTED] as const; + if (this.move.getMove().hasFlag(MoveFlags.DANCE_MOVE) && !dancerModes.includes(this.useMode)) { + // TODO: Fix in dancer PR to move to MEP for hit checks globalScene.getField(true).forEach(pokemon => { applyPostMoveUsedAbAttrs("PostMoveUsedAbAttr", pokemon, this.move, this.pokemon, this.targets); }); @@ -439,23 +448,16 @@ export class MovePhase extends BattlePhase { const move = this.move.getMove(); const targets = this.getActiveTargetPokemon(); - if (move.applyConditions(this.pokemon, targets[0], move)) { - // Protean and Libero apply on the charging turn of charge moves - applyPreAttackAbAttrs("PokemonTypeChangeAbAttr", this.pokemon, null, this.move.getMove()); + this.showMoveText(); - this.showMoveText(); - globalScene.phaseManager.unshiftNew( - "MoveChargePhase", - this.pokemon.getBattlerIndex(), - this.targets[0], - this.move, - ); - } else { + // Conditions currently assume single target + // TODO: Is this sustainable? + if (!move.applyConditions(this.pokemon, targets[0], move)) { this.pokemon.pushMoveHistory({ move: this.move.moveId, targets: this.targets, result: MoveResult.FAIL, - virtual: this.move.virtual, + useMode: this.useMode, }); const failureMessage = move.getFailedText(this.pokemon, targets[0], move); @@ -464,7 +466,19 @@ export class MovePhase extends BattlePhase { // Remove the user from its semi-invulnerable state (if applicable) this.pokemon.lapseTags(BattlerTagLapseType.MOVE_EFFECT); + return; } + + // Protean and Libero apply on the charging turn of charge moves + applyPreAttackAbAttrs("PokemonTypeChangeAbAttr", this.pokemon, null, this.move.getMove()); + + globalScene.phaseManager.unshiftNew( + "MoveChargePhase", + this.pokemon.getBattlerIndex(), + this.targets[0], + this.move, + this.useMode, + ); } /** @@ -475,7 +489,7 @@ export class MovePhase extends BattlePhase { "MoveEndPhase", this.pokemon.getBattlerIndex(), this.getActiveTargetPokemon(), - this.followUp, + isVirtual(this.useMode), ); super.end(); @@ -607,7 +621,7 @@ export class MovePhase extends BattlePhase { protected handlePreMoveFailures(): void { if (this.cancelled || this.failed) { if (this.failed) { - const ppUsed = this.ignorePp ? 0 : 1; + const ppUsed = isIgnorePP(this.useMode) ? 0 : 1; if (ppUsed) { this.move.usePp(); @@ -624,6 +638,7 @@ export class MovePhase extends BattlePhase { move: MoveId.NONE, result: MoveResult.FAIL, targets: this.targets, + useMode: this.useMode, }); this.pokemon.lapseTags(BattlerTagLapseType.MOVE_EFFECT); @@ -647,7 +662,7 @@ export class MovePhase extends BattlePhase { } globalScene.phaseManager.queueMessage( - i18next.t(this.reflected ? "battle:magicCoatActivated" : "battle:useMove", { + i18next.t(isReflected(this.useMode) ? "battle:magicCoatActivated" : "battle:useMove", { pokemonNameWithAffix: getPokemonNameWithAffix(this.pokemon), moveName: this.move.getName(), }), diff --git a/src/phases/pokemon-phase.ts b/src/phases/pokemon-phase.ts index d7fe58d0b80..cfa30f0d06e 100644 --- a/src/phases/pokemon-phase.ts +++ b/src/phases/pokemon-phase.ts @@ -4,6 +4,10 @@ import type Pokemon from "#app/field/pokemon"; import { FieldPhase } from "./field-phase"; export abstract class PokemonPhase extends FieldPhase { + /** + * The battler index this phase refers to, or the pokemon ID if greater than 3. + * TODO: Make this either use IDs or `BattlerIndex`es, not a weird mix of both + */ protected battlerIndex: BattlerIndex | number; public player: boolean; public fieldIndex: number; @@ -15,10 +19,12 @@ export abstract class PokemonPhase extends FieldPhase { battlerIndex ?? globalScene .getField() - .find(p => p?.isActive())! // TODO: is the bang correct here? - .getBattlerIndex(); + .find(p => p?.isActive()) + ?.getBattlerIndex(); if (battlerIndex === undefined) { - console.warn("There are no Pokemon on the field!"); // TODO: figure out a suitable fallback behavior + // TODO: figure out a suitable fallback behavior + console.warn("There are no Pokemon on the field!"); + battlerIndex = BattlerIndex.PLAYER; } this.battlerIndex = battlerIndex; diff --git a/src/phases/pokemon-transform-phase.ts b/src/phases/pokemon-transform-phase.ts index 65fccb24d99..938915309d9 100644 --- a/src/phases/pokemon-transform-phase.ts +++ b/src/phases/pokemon-transform-phase.ts @@ -53,7 +53,7 @@ export class PokemonTransformPhase extends PokemonPhase { user.summonData.moveset = target.getMoveset().map(m => { if (m) { // If PP value is less than 5, do nothing. If greater, we need to reduce the value to 5. - return new PokemonMove(m.moveId, 0, 0, false, Math.min(m.getMove().pp, 5)); + return new PokemonMove(m.moveId, 0, 0, Math.min(m.getMove().pp, 5)); } console.warn(`Transform: somehow iterating over a ${m} value when copying moveset!`); return new PokemonMove(MoveId.NONE); diff --git a/src/phases/turn-start-phase.ts b/src/phases/turn-start-phase.ts index 6f062cb5fbe..6219907fb68 100644 --- a/src/phases/turn-start-phase.ts +++ b/src/phases/turn-start-phase.ts @@ -63,7 +63,7 @@ export class TurnStartPhase extends FieldPhase { // This occurs before the main loop because of battles with more than two Pokemon const battlerBypassSpeed = {}; - globalScene.getField(true).map(p => { + globalScene.getField(true).forEach(p => { const bypassSpeed = new BooleanHolder(false); const canCheckHeldItems = new BooleanHolder(true); applyAbAttrs("BypassSpeedChanceAbAttr", p, null, false, bypassSpeed); @@ -124,6 +124,8 @@ export class TurnStartPhase extends FieldPhase { return moveOrder; } + // TODO: Refactor this alongside `CommandPhase.handleCommand` to use SEPARATE METHODS + // Also need a clearer distinction between "turn command" and queued moves start() { super.start(); @@ -157,44 +159,38 @@ export class TurnStartPhase extends FieldPhase { } switch (turnCommand?.command) { - case Command.FIGHT: - { - const queuedMove = turnCommand.move; - pokemon.turnData.order = orderIndex++; - if (!queuedMove) { - continue; - } - const move = - pokemon.getMoveset().find(m => m.moveId === queuedMove.move && m.ppUsed < m.getMovePp()) || - new PokemonMove(queuedMove.move); - if (move.getMove().hasAttr("MoveHeaderAttr")) { - phaseManager.unshiftNew("MoveHeaderPhase", pokemon, move); - } - if (pokemon.isPlayer()) { - if (turnCommand.cursor === -1) { - phaseManager.pushNew("MovePhase", pokemon, turnCommand.targets || turnCommand.move!.targets, move); - } else { - phaseManager.pushNew( - "MovePhase", - pokemon, - turnCommand.targets || turnCommand.move!.targets, // TODO: is the bang correct here? - move, - false, - queuedMove.ignorePP, - ); - } - } else { - phaseManager.pushNew( - "MovePhase", - pokemon, - turnCommand.targets || turnCommand.move!.targets, - move, - false, - queuedMove.ignorePP, - ); - } + case Command.FIGHT: { + const queuedMove = turnCommand.move; + pokemon.turnData.order = orderIndex++; + if (!queuedMove) { + continue; + } + const move = + pokemon.getMoveset().find(m => m.moveId === queuedMove.move && m.ppUsed < m.getMovePp()) ?? + new PokemonMove(queuedMove.move); + if (move.getMove().hasAttr("MoveHeaderAttr")) { + phaseManager.unshiftNew("MoveHeaderPhase", pokemon, move); + } + + if (pokemon.isPlayer() && turnCommand.cursor === -1) { + phaseManager.pushNew( + "MovePhase", + pokemon, + turnCommand.targets || turnCommand.move!.targets, + move, + turnCommand.move!.useMode, + ); //TODO: is the bang correct here? + } else { + phaseManager.pushNew( + "MovePhase", + pokemon, + turnCommand.targets || turnCommand.move!.targets, + move, + queuedMove.useMode, + ); // TODO: is the bang correct here? } break; + } case Command.BALL: phaseManager.unshiftNew("AttemptCapturePhase", turnCommand.targets![0] % 2, turnCommand.cursor!); //TODO: is the bang correct here? break; diff --git a/src/system/version_migration/version_converter.ts b/src/system/version_migration/version_converter.ts index 798115e0395..32e105aec66 100644 --- a/src/system/version_migration/version_converter.ts +++ b/src/system/version_migration/version_converter.ts @@ -63,6 +63,10 @@ import * as v1_8_3 from "./versions/v1_8_3"; // biome-ignore lint/style/noNamespaceImport: Convenience import * as v1_9_0 from "./versions/v1_9_0"; +// --- v1.10.0 PATCHES --- // +// biome-ignore lint/style/noNamespaceImport: Convenience +import * as v1_10_0 from "./versions/v1_10_0"; + /** Current game version */ const LATEST_VERSION = version; @@ -85,6 +89,7 @@ const sessionMigrators: SessionSaveMigrator[] = []; sessionMigrators.push(...v1_0_4.sessionMigrators); sessionMigrators.push(...v1_7_0.sessionMigrators); sessionMigrators.push(...v1_9_0.sessionMigrators); +sessionMigrators.push(...v1_10_0.sessionMigrators); /** All settings migrators */ const settingsMigrators: SettingsSaveMigrator[] = []; diff --git a/src/system/version_migration/versions/v1_10_0.ts b/src/system/version_migration/versions/v1_10_0.ts new file mode 100644 index 00000000000..4d1dedf701e --- /dev/null +++ b/src/system/version_migration/versions/v1_10_0.ts @@ -0,0 +1,48 @@ +import type { SessionSaveMigrator } from "#app/@types/SessionSaveMigrator"; +import type { BattlerIndex } from "#enums/battler-index"; +import type { TurnMove } from "#app/field/pokemon"; +import type { MoveResult } from "#enums/move-result"; +import type { SessionSaveData } from "#app/system/game-data"; +import { MoveUseMode } from "#enums/move-use-mode"; +import type { MoveId } from "#enums/move-id"; + +/** Prior signature of `TurnMove`; used to ensure parity */ +interface OldTurnMove { + move: MoveId; + targets: BattlerIndex[]; + result?: MoveResult; + turn?: number; + virtual?: boolean; + ignorePP?: boolean; +} + +/** + * Fix player pokemon move history entries with updated `MoveUseModes`, + * based on the prior values of `virtual` and `ignorePP`. + * Needed to ensure Last Resort and move-calling moves still work OK. + * @param data - {@linkcode SystemSaveData} + */ +const fixMoveHistory: SessionSaveMigrator = { + version: "1.10.0", + migrate: (data: SessionSaveData): void => { + const mapTurnMove = (tm: OldTurnMove): TurnMove => ({ + move: tm.move, + targets: tm.targets, + result: tm.result, + turn: tm.turn, + // NOTE: This unfortuately has to mis-classify Dancer and Magic Bounce-induced moves as `FOLLOW_UP`, + // given we previously had _no way_ of distinguishing them from follow-up moves post hoc. + useMode: tm.virtual ? MoveUseMode.FOLLOW_UP : tm.ignorePP ? MoveUseMode.IGNORE_PP : MoveUseMode.NORMAL, + }); + data.party.forEach(pkmn => { + pkmn.summonData.moveHistory = (pkmn.summonData.moveHistory as OldTurnMove[]).map(mapTurnMove); + pkmn.summonData.moveQueue = (pkmn.summonData.moveQueue as OldTurnMove[]).map(mapTurnMove); + }); + data.enemyParty.forEach(pkmn => { + pkmn.summonData.moveHistory = (pkmn.summonData.moveHistory as OldTurnMove[]).map(mapTurnMove); + pkmn.summonData.moveQueue = (pkmn.summonData.moveQueue as OldTurnMove[]).map(mapTurnMove); + }); + }, +}; + +export const sessionMigrators: Readonly = [fixMoveHistory] as const; diff --git a/src/ui/fight-ui-handler.ts b/src/ui/fight-ui-handler.ts index f30c7a4935c..14cd10d0d6f 100644 --- a/src/ui/fight-ui-handler.ts +++ b/src/ui/fight-ui-handler.ts @@ -16,6 +16,7 @@ import type Pokemon from "#app/field/pokemon"; import type { CommandPhase } from "#app/phases/command-phase"; import MoveInfoOverlay from "./move-info-overlay"; import { BattleType } from "#enums/battle-type"; +import { MoveUseMode } from "#enums/move-use-mode"; export default class FightUiHandler extends UiHandler implements InfoToggle { public static readonly MOVES_CONTAINER_NAME = "moves"; @@ -139,53 +140,63 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { return true; } + /** + * Process the player inputting the selected {@linkcode Button}. + * @param button - The {@linkcode Button} being pressed + * @returns Whether the input was successful (ie did anything). + */ processInput(button: Button): boolean { const ui = this.getUi(); - + const cursor = this.getCursor(); let success = false; - const cursor = this.getCursor(); - - if (button === Button.CANCEL || button === Button.ACTION) { - if (button === Button.ACTION) { + switch (button) { + case Button.CANCEL: + { + // Attempts to back out of the move selection pane are blocked in certain MEs + // TODO: Should we allow showing the summary menu at least? + const { battleType, mysteryEncounter } = globalScene.currentBattle; + if (battleType !== BattleType.MYSTERY_ENCOUNTER || !mysteryEncounter?.skipToFightInput) { + ui.setMode(UiMode.COMMAND, this.fieldIndex); + success = true; + } + } + break; + case Button.ACTION: if ( - (globalScene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(this.fromCommand, cursor, false) + (globalScene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand( + this.fromCommand, + cursor, + MoveUseMode.NORMAL, + ) ) { success = true; } else { ui.playError(); } - } else { - // Cannot back out of fight menu if skipToFightInput is enabled - const { battleType, mysteryEncounter } = globalScene.currentBattle; - if (battleType !== BattleType.MYSTERY_ENCOUNTER || !mysteryEncounter?.skipToFightInput) { - ui.setMode(UiMode.COMMAND, this.fieldIndex); - success = true; + break; + case Button.UP: + if (cursor >= 2) { + success = this.setCursor(cursor - 2); } - } - } else { - switch (button) { - case Button.UP: - if (cursor >= 2) { - success = this.setCursor(cursor - 2); - } - break; - case Button.DOWN: - if (cursor < 2) { - success = this.setCursor(cursor + 2); - } - break; - case Button.LEFT: - if (cursor % 2 === 1) { - success = this.setCursor(cursor - 1); - } - break; - case Button.RIGHT: - if (cursor % 2 === 0) { - success = this.setCursor(cursor + 1); - } - break; - } + break; + case Button.DOWN: + if (cursor < 2) { + success = this.setCursor(cursor + 2); + } + break; + case Button.LEFT: + if (cursor % 2 === 1) { + success = this.setCursor(cursor - 1); + } + break; + case Button.RIGHT: + if (cursor % 2 === 0) { + success = this.setCursor(cursor + 1); + } + break; + default: + // other inputs do nothing while in fight menu } if (success) { diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 8e197c08ef3..cf6333f4580 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -1,4 +1,4 @@ -import type { PlayerPokemon } from "#app/field/pokemon"; +import type { PlayerPokemon, TurnMove } from "#app/field/pokemon"; import type { PokemonMove } from "#app/data/moves/pokemon-move"; import type Pokemon from "#app/field/pokemon"; import { MoveResult } from "#enums/move-result"; @@ -1167,13 +1167,13 @@ export default class PartyUiHandler extends MessageUiHandler { } // TODO: add FORCED_SWITCH (and perhaps also BATON_PASS_SWITCH) to the modes + // TODO: refactor once moves in flight become a thing... private isBatonPassMove(): boolean { - const moveHistory = globalScene.getPlayerField()[this.fieldIndex].getMoveHistory(); - return !!( + const lastMove: TurnMove | undefined = globalScene.getPlayerField()[this.fieldIndex].getLastXMoves()[0]; + return ( this.partyUiMode === PartyUiMode.FAINT_SWITCH && - moveHistory.length && - allMoves[moveHistory[moveHistory.length - 1].move].getAttrs("ForceSwitchOutAttr")[0]?.isBatonPass() && - moveHistory[moveHistory.length - 1].result === MoveResult.SUCCESS + lastMove?.result === MoveResult.SUCCESS && + allMoves[lastMove.move].getAttrs("ForceSwitchOutAttr")[0]?.isBatonPass() ); } diff --git a/src/utils/common.ts b/src/utils/common.ts index c8b37c4e3fd..e19e5976507 100644 --- a/src/utils/common.ts +++ b/src/utils/common.ts @@ -620,3 +620,25 @@ export function coerceArray(input: T): T extends any[] ? T : [T]; export function coerceArray(input: T): T | [T] { return Array.isArray(input) ? input : [input]; } + +/** + * Returns the name of the key that matches the enum [object] value. + * @param input - The enum [object] to check + * @param val - The value to get the key of + * @returns The name of the key with the specified value + * @example + * const thing = { + * one: 1, + * two: 2, + * } as const; + * console.log(enumValueToKey(thing, thing.two)); // output: "two" + * @throws An `Error` if an invalid enum value is passed to the function + */ +export function enumValueToKey>(input: T, val: T[keyof T]): keyof T { + for (const [key, value] of Object.entries(input)) { + if (val === value) { + return key as keyof T; + } + } + throw new Error(`Invalid value passed to \`enumValueToKey\`! Value: ${val}`); +} diff --git a/test/abilities/gorilla_tactics.test.ts b/test/abilities/gorilla_tactics.test.ts index 1759267f16d..a8b09461ea0 100644 --- a/test/abilities/gorilla_tactics.test.ts +++ b/test/abilities/gorilla_tactics.test.ts @@ -1,15 +1,19 @@ import { BattlerIndex } from "#enums/battler-index"; +import { RandomMoveAttr } from "#app/data/moves/move"; import { MoveId } from "#enums/move-id"; +import { AbilityId } from "#enums/ability-id"; import { SpeciesId } from "#enums/species-id"; import { Stat } from "#app/enums/stat"; -import { AbilityId } from "#enums/ability-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { MoveResult } from "#enums/move-result"; +import { MoveUseMode } from "#enums/move-use-mode"; describe("Abilities - Gorilla Tactics", () => { let phaserGame: Phaser.Game; let game: GameManager; + beforeAll(() => { phaserGame = new Phaser.Game({ type: Phaser.HEADLESS, @@ -25,10 +29,9 @@ describe("Abilities - Gorilla Tactics", () => { game.override .battleStyle("single") .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset([MoveId.SPLASH, MoveId.DISABLE]) .enemySpecies(SpeciesId.MAGIKARP) .enemyLevel(30) - .moveset([MoveId.SPLASH, MoveId.TACKLE, MoveId.GROWL]) + .moveset([MoveId.SPLASH, MoveId.TACKLE, MoveId.GROWL, MoveId.METRONOME]) .ability(AbilityId.GORILLA_TACTICS); }); @@ -39,9 +42,8 @@ describe("Abilities - Gorilla Tactics", () => { const initialAtkStat = darmanitan.getStat(Stat.ATK); game.move.select(MoveId.SPLASH); - await game.move.selectEnemyMove(MoveId.SPLASH); - - await game.phaseInterceptor.to("TurnEndPhase"); + await game.move.forceEnemyMove(MoveId.SPLASH); + await game.toEndOfTurn(); expect(darmanitan.getStat(Stat.ATK, false)).toBeCloseTo(initialAtkStat * 1.5); // Other moves should be restricted @@ -52,32 +54,50 @@ describe("Abilities - Gorilla Tactics", () => { it("should struggle if the only usable move is disabled", async () => { await game.classicMode.startBattle([SpeciesId.GALAR_DARMANITAN]); - const darmanitan = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; + const darmanitan = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); // First turn, lock move to Growl game.move.select(MoveId.GROWL); - await game.move.selectEnemyMove(MoveId.SPLASH); - - // Second turn, Growl is interrupted by Disable + await game.move.forceEnemyMove(MoveId.SPLASH); await game.toNextTurn(); + // Second turn, Growl is interrupted by Disable game.move.select(MoveId.GROWL); - await game.move.selectEnemyMove(MoveId.DISABLE); + await game.move.forceEnemyMove(MoveId.DISABLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.toNextTurn(); - await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.getStatStage(Stat.ATK)).toBe(-1); // Only the effect of the first Growl should be applied // Third turn, Struggle is used - await game.toNextTurn(); - game.move.select(MoveId.TACKLE); await game.move.forceEnemyMove(MoveId.SPLASH); //prevent protect from being used by the enemy await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); - await game.phaseInterceptor.to("MoveEndPhase"); + expect(darmanitan.hp).toBeLessThan(darmanitan.getMaxHp()); + + await game.toNextTurn(); + expect(darmanitan.getLastXMoves()[0].move).toBe(MoveId.STRUGGLE); + }); + + it("should lock into calling moves, even if also in moveset", async () => { + vi.spyOn(RandomMoveAttr.prototype, "getMoveOverride").mockReturnValue(MoveId.TACKLE); + await game.classicMode.startBattle([SpeciesId.GALAR_DARMANITAN]); + + const darmanitan = game.scene.getPlayerPokemon()!; + + game.move.select(MoveId.METRONOME); + await game.phaseInterceptor.to("TurnEndPhase"); + + // Gorilla Tactics should bypass dancer and instruct + expect(darmanitan.isMoveRestricted(MoveId.TACKLE)).toBe(true); + expect(darmanitan.isMoveRestricted(MoveId.METRONOME)).toBe(false); + expect(darmanitan.getLastXMoves(-1)).toEqual([ + expect.objectContaining({ move: MoveId.TACKLE, result: MoveResult.SUCCESS, useMode: MoveUseMode.FOLLOW_UP }), + expect.objectContaining({ move: MoveId.METRONOME, result: MoveResult.SUCCESS, useMode: MoveUseMode.NORMAL }), + ]); }); it("should activate when the opponenet protects", async () => { diff --git a/test/data/status_effect.test.ts b/test/data/status_effect.test.ts index bc2936d8fe2..a5bfb33c023 100644 --- a/test/data/status_effect.test.ts +++ b/test/data/status_effect.test.ts @@ -18,6 +18,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; const pokemonName = "PKM"; const sourceText = "SOURCE"; +// TODO: Make this a giant it.each describe("Status Effect Messages", () => { describe("NONE", () => { const statusEffect = StatusEffect.NONE; @@ -386,7 +387,7 @@ describe("Status Effects", () => { game.move.select(MoveId.SPLASH); await game.toNextTurn(); - expect(player.status?.effect).toBeUndefined(); + expect(player.status).toBeFalsy(); expect(player.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); }); }); diff --git a/test/moves/after_you.test.ts b/test/moves/after_you.test.ts index 78372de3fb6..37186dcc7a5 100644 --- a/test/moves/after_you.test.ts +++ b/test/moves/after_you.test.ts @@ -2,6 +2,7 @@ import { BattlerIndex } from "#enums/battler-index"; import { AbilityId } from "#enums/ability-id"; import { MoveResult } from "#enums/move-result"; import { MovePhase } from "#app/phases/move-phase"; +import { MoveUseMode } from "#enums/move-use-mode"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; @@ -60,4 +61,37 @@ describe("Moves - After You", () => { expect(game.scene.getPlayerField()[1].getLastXMoves(1)[0].result).toBe(MoveResult.FAIL); }); + + // TODO: Enable once rampaging moves and move queue are fixed. + // Currently does literally nothing because `MoveUseMode` is overridden from move queue + // within `MovePhase`, but should be enabled once that jank is removed + it.todo("should maintain PP ignore status of rampaging moves", async () => { + game.override.moveset([]); + await game.classicMode.startBattle([SpeciesId.ACCELGOR, SpeciesId.RATTATA]); + + const [accelgor, rattata] = game.scene.getPlayerField(); + expect(accelgor).toBeDefined(); + expect(rattata).toBeDefined(); + + game.move.changeMoveset(accelgor, [MoveId.SPLASH, MoveId.AFTER_YOU]); + game.move.changeMoveset(rattata, MoveId.OUTRAGE); + + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.OUTRAGE, BattlerIndex.PLAYER_2); + await game.phaseInterceptor.to("TurnEndPhase"); + + const outrageMove = rattata.getMoveset().find(m => m.moveId === MoveId.OUTRAGE); + expect(outrageMove?.ppUsed).toBe(1); + + game.move.select(MoveId.AFTER_YOU, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(accelgor.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); + expect(outrageMove?.ppUsed).toBe(1); + expect(rattata.getLastXMoves()[0]).toMatchObject({ + move: MoveId.OUTRAGE, + result: MoveResult.SUCCESS, + useMode: MoveUseMode.IGNORE_PP, + }); + }); }); diff --git a/test/moves/copycat.test.ts b/test/moves/copycat.test.ts index 1691cc1478c..e11a2262a43 100644 --- a/test/moves/copycat.test.ts +++ b/test/moves/copycat.test.ts @@ -1,9 +1,9 @@ import { BattlerIndex } from "#enums/battler-index"; -import type { RandomMoveAttr } from "#app/data/moves/move"; -import { allMoves } from "#app/data/data-lists"; +import { RandomMoveAttr } from "#app/data/moves/move"; import { Stat } from "#app/enums/stat"; import { MoveResult } from "#enums/move-result"; import { AbilityId } from "#enums/ability-id"; +import { MoveUseMode } from "#enums/move-use-mode"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; @@ -14,8 +14,6 @@ describe("Moves - Copycat", () => { let phaserGame: Phaser.Game; let game: GameManager; - let randomMoveAttr: RandomMoveAttr; - beforeAll(() => { phaserGame = new Phaser.Game({ type: Phaser.HEADLESS, @@ -27,14 +25,12 @@ describe("Moves - Copycat", () => { }); beforeEach(() => { - randomMoveAttr = allMoves[MoveId.METRONOME].getAttrs("RandomMoveAttr")[0]; game = new GameManager(phaserGame); game.override .moveset([MoveId.COPYCAT, MoveId.SPIKY_SHIELD, MoveId.SWORDS_DANCE, MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() - .starterSpecies(SpeciesId.FEEBAS) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); @@ -42,7 +38,7 @@ describe("Moves - Copycat", () => { it("should copy the last move successfully executed", async () => { game.override.enemyMoveset(MoveId.SUCKER_PUNCH); - await game.classicMode.startBattle(); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); game.move.select(MoveId.SWORDS_DANCE); await game.toNextTurn(); @@ -55,7 +51,7 @@ describe("Moves - Copycat", () => { it("should fail when the last move used is not a valid Copycat move", async () => { game.override.enemyMoveset(MoveId.PROTECT); // Protect is not a valid move for Copycat to copy - await game.classicMode.startBattle(); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); game.move.select(MoveId.SPIKY_SHIELD); // Spiky Shield is not a valid move for Copycat to copy await game.toNextTurn(); @@ -68,19 +64,25 @@ describe("Moves - Copycat", () => { it("should copy the called move when the last move successfully calls another", async () => { game.override.moveset([MoveId.SPLASH, MoveId.METRONOME]).enemyMoveset(MoveId.COPYCAT); - await game.classicMode.startBattle(); - vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(MoveId.SWORDS_DANCE); + await game.classicMode.startBattle([SpeciesId.DRAMPA]); + vi.spyOn(RandomMoveAttr.prototype, "getMoveOverride").mockReturnValue(MoveId.SWORDS_DANCE); game.move.select(MoveId.METRONOME); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); // Player moves first, so enemy can copy Swords Dance + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); // Player moves first so enemy can copy Swords Dance await game.toNextTurn(); - expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(2); + const enemy = game.scene.getEnemyPokemon()!; + expect(enemy.getLastXMoves()[0]).toMatchObject({ + move: MoveId.SWORDS_DANCE, + result: MoveResult.SUCCESS, + useMode: MoveUseMode.FOLLOW_UP, + }); + expect(enemy.getStatStage(Stat.ATK)).toBe(2); }); - it("should apply secondary effects of a move", async () => { + it("should apply move secondary effects", async () => { game.override.enemyMoveset(MoveId.ACID_SPRAY); // Secondary effect lowers SpDef by 2 stages - await game.classicMode.startBattle(); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); game.move.select(MoveId.COPYCAT); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); diff --git a/test/moves/dig.test.ts b/test/moves/dig.test.ts index 73540c6ed48..a80ac0405fe 100644 --- a/test/moves/dig.test.ts +++ b/test/moves/dig.test.ts @@ -42,8 +42,8 @@ describe("Moves - Dig", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; game.move.select(MoveId.DIG); - await game.phaseInterceptor.to("TurnEndPhase"); + expect(playerPokemon.getTag(BattlerTagType.UNDERGROUND)).toBeDefined(); expect(enemyPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.MISS); expect(playerPokemon.hp).toBe(playerPokemon.getMaxHp()); @@ -53,9 +53,25 @@ describe("Moves - Dig", () => { await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getTag(BattlerTagType.UNDERGROUND)).toBeUndefined(); expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); + expect(playerPokemon.getMoveQueue()).toHaveLength(0); expect(playerPokemon.getMoveHistory()).toHaveLength(2); + }); - const playerDig = playerPokemon.getMoveset().find(mv => mv && mv.moveId === MoveId.DIG); + // TODO: Verify this on cartridge double battles + it.todo("should deduct PP only on the 2nd turn of the move", async () => { + game.override.moveset([]); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + game.move.changeMoveset(playerPokemon, MoveId.DIG); + + game.move.select(MoveId.DIG); + await game.phaseInterceptor.to("TurnEndPhase"); + + const playerDig = playerPokemon.getMoveset().find(mv => mv?.moveId === MoveId.DIG); + expect(playerDig?.ppUsed).toBe(0); + + await game.phaseInterceptor.to("TurnEndPhase"); expect(playerDig?.ppUsed).toBe(1); }); diff --git a/test/moves/disable.test.ts b/test/moves/disable.test.ts index 127a5eaaa0c..b113acb9525 100644 --- a/test/moves/disable.test.ts +++ b/test/moves/disable.test.ts @@ -1,10 +1,13 @@ import { BattlerIndex } from "#enums/battler-index"; import { MoveResult } from "#enums/move-result"; import { AbilityId } from "#enums/ability-id"; +import { MoveUseMode } from "#enums/move-use-mode"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; +import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; -import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { RandomMoveAttr } from "#app/data/moves/move"; describe("Moves - Disable", () => { let phaserGame: Phaser.Game; @@ -28,34 +31,39 @@ describe("Moves - Disable", () => { .enemyAbility(AbilityId.BALL_FETCH) .moveset([MoveId.DISABLE, MoveId.SPLASH]) .enemyMoveset(MoveId.SPLASH) - .starterSpecies(SpeciesId.PIKACHU) .enemySpecies(SpeciesId.SHUCKLE); }); - it("restricts moves", async () => { - await game.classicMode.startBattle(); + it("should restrict the last move used", async () => { + await game.classicMode.startBattle([SpeciesId.PIKACHU]); - const enemyMon = game.scene.getEnemyPokemon()!; + const enemyMon = game.field.getEnemyPokemon(); + + game.move.select(MoveId.SPLASH); + await game.move.forceEnemyMove(MoveId.GROWL); + await game.toNextTurn(); game.move.select(MoveId.DISABLE); + await game.move.forceEnemyMove(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); - expect(enemyMon.getMoveHistory()).toHaveLength(1); + expect(enemyMon.getLastXMoves(-1)).toHaveLength(2); expect(enemyMon.isMoveRestricted(MoveId.SPLASH)).toBe(true); + expect(enemyMon.isMoveRestricted(MoveId.GROWL)).toBe(false); }); - it("fails if enemy has no move history", async () => { - await game.classicMode.startBattle(); + it("should fail if enemy has no move history", async () => { + await game.classicMode.startBattle([SpeciesId.PIKACHU]); - const playerMon = game.scene.getPlayerPokemon()!; - const enemyMon = game.scene.getEnemyPokemon()!; + const playerMon = game.field.getPlayerPokemon(); + const enemyMon = game.field.getEnemyPokemon(); game.move.select(MoveId.DISABLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); - expect(playerMon.getMoveHistory()[0]).toMatchObject({ + expect(playerMon.getLastXMoves()[0]).toMatchObject({ move: MoveId.DISABLE, result: MoveResult.FAIL, }); @@ -63,9 +71,9 @@ describe("Moves - Disable", () => { }); it("causes STRUGGLE if all usable moves are disabled", async () => { - await game.classicMode.startBattle(); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); - const enemyMon = game.scene.getEnemyPokemon()!; + const enemyMon = game.field.getEnemyPokemon(); game.move.select(MoveId.DISABLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); @@ -74,20 +82,19 @@ describe("Moves - Disable", () => { game.move.select(MoveId.SPLASH); await game.toNextTurn(); - const enemyHistory = enemyMon.getMoveHistory(); + const enemyHistory = enemyMon.getLastXMoves(-1); expect(enemyHistory).toHaveLength(2); - expect(enemyHistory[0].move).toBe(MoveId.SPLASH); - expect(enemyHistory[1].move).toBe(MoveId.STRUGGLE); + expect(enemyHistory.map(m => m.move)).toEqual([MoveId.STRUGGLE, MoveId.SPLASH]); }); - it("cannot disable STRUGGLE", async () => { - game.override.enemyMoveset([MoveId.STRUGGLE]); - await game.classicMode.startBattle(); + it("should fail if it would otherwise disable struggle", async () => { + await game.classicMode.startBattle([SpeciesId.PIKACHU]); - const playerMon = game.scene.getPlayerPokemon()!; - const enemyMon = game.scene.getEnemyPokemon()!; + const playerMon = game.field.getPlayerPokemon(); + const enemyMon = game.field.getEnemyPokemon(); game.move.select(MoveId.DISABLE); + await game.move.forceEnemyMove(MoveId.STRUGGLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); @@ -96,59 +103,77 @@ describe("Moves - Disable", () => { expect(enemyMon.isMoveRestricted(MoveId.STRUGGLE)).toBe(false); }); - it("interrupts target's move when target moves after", async () => { - await game.classicMode.startBattle(); + it("should interrupt target's move if used first", async () => { + await game.classicMode.startBattle([SpeciesId.PIKACHU]); - const enemyMon = game.scene.getEnemyPokemon()!; + const enemyMon = game.field.getEnemyPokemon(); + // add splash to enemy move history + enemyMon.pushMoveHistory({ + move: MoveId.SPLASH, + targets: [BattlerIndex.ENEMY], + useMode: MoveUseMode.NORMAL, + }); - game.move.select(MoveId.SPLASH); - await game.toNextTurn(); - - // Both mons just used Splash last turn; now have player use Disable. game.move.select(MoveId.DISABLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); - const enemyHistory = enemyMon.getMoveHistory(); + const enemyHistory = enemyMon.getLastXMoves(-1); expect(enemyHistory).toHaveLength(2); - expect(enemyHistory[0]).toMatchObject({ - move: MoveId.SPLASH, - result: MoveResult.SUCCESS, - }); - expect(enemyHistory[1].result).toBe(MoveResult.FAIL); + expect(enemyHistory[0].result).toBe(MoveResult.FAIL); }); - it("disables NATURE POWER, not the move invoked by it", async () => { - game.override.enemyMoveset([MoveId.NATURE_POWER]); - await game.classicMode.startBattle(); + it.each([ + { name: "Nature Power", moveId: MoveId.NATURE_POWER }, + { name: "Mirror Move", moveId: MoveId.MIRROR_MOVE }, + { name: "Copycat", moveId: MoveId.COPYCAT }, + { name: "Metronome", moveId: MoveId.METRONOME }, + ])("should ignore virtual moves called by $name", async ({ moveId }) => { + vi.spyOn(RandomMoveAttr.prototype, "getMoveOverride").mockReturnValue(MoveId.ABSORB); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); - const enemyMon = game.scene.getEnemyPokemon()!; + const playerMon = game.scene.getPlayerPokemon()!; + playerMon.pushMoveHistory({ move: MoveId.SPLASH, targets: [BattlerIndex.ENEMY], useMode: MoveUseMode.NORMAL }); + game.scene.currentBattle.lastMove = MoveId.SPLASH; game.move.select(MoveId.DISABLE); + await game.move.forceEnemyMove(moveId); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); - expect(enemyMon.isMoveRestricted(MoveId.NATURE_POWER)).toBe(true); - expect(enemyMon.isMoveRestricted(enemyMon.getLastXMoves(2)[0].move)).toBe(false); + const enemyMon = game.scene.getEnemyPokemon()!; + expect(enemyMon.isMoveRestricted(moveId), `calling move ${MoveId[moveId]} was not disabled`).toBe(true); + expect(enemyMon.getLastXMoves(-1)).toHaveLength(2); + const calledMove = enemyMon.getLastXMoves()[0].move; + expect( + enemyMon.isMoveRestricted(calledMove), + `called move ${MoveId[calledMove]} (from ${MoveId[moveId]}) was incorrectly disabled`, + ).toBe(false); }); - it("disables most recent move", async () => { - game.override.enemyMoveset([MoveId.SPLASH, MoveId.TACKLE]); - await game.classicMode.startBattle(); + it("should ignore dancer copied moves, even if also in moveset", async () => { + game.override + .enemyAbility(AbilityId.DANCER) + .moveset([MoveId.DISABLE, MoveId.SWORDS_DANCE]) + .enemyMoveset([MoveId.SPLASH, MoveId.SWORDS_DANCE]); + await game.classicMode.startBattle([SpeciesId.PIKACHU]); - const enemyMon = game.scene.getEnemyPokemon()!; - - game.move.select(MoveId.SPLASH); - await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.SWORDS_DANCE); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); game.move.select(MoveId.DISABLE); - await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.move.selectEnemyMove(MoveId.SWORDS_DANCE); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); - expect(enemyMon.isMoveRestricted(MoveId.TACKLE)).toBe(true); - expect(enemyMon.isMoveRestricted(MoveId.SPLASH)).toBe(false); + // Dancer-induced Swords Dance was ignored in favor of splash, + // leaving the subsequent _normal_ swords dance free to work as normal + const shuckle = game.field.getEnemyPokemon(); + expect.soft(shuckle.isMoveRestricted(MoveId.SPLASH)).toBe(true); + expect.soft(shuckle.isMoveRestricted(MoveId.SWORDS_DANCE)).toBe(false); + expect(shuckle.getLastXMoves()[0]).toMatchObject({ move: MoveId.SWORDS_DANCE, result: MoveResult.SUCCESS }); + expect(shuckle.getStatStage(Stat.ATK)).toBe(4); }); }); diff --git a/test/moves/electro_shot.test.ts b/test/moves/electro_shot.test.ts index 3f751687c59..1d69e9c2fa7 100644 --- a/test/moves/electro_shot.test.ts +++ b/test/moves/electro_shot.test.ts @@ -80,7 +80,7 @@ describe("Moves - Electro Shot", () => { expect(playerPokemon.getTag(BattlerTagType.CHARGING)).toBeUndefined(); expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); expect(playerPokemon.getMoveHistory()).toHaveLength(2); - expect(playerPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); + expect(playerPokemon.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); const playerElectroShot = playerPokemon.getMoveset().find(mv => mv && mv.moveId === MoveId.ELECTRO_SHOT); expect(playerElectroShot?.ppUsed).toBe(1); diff --git a/test/moves/instruct.test.ts b/test/moves/instruct.test.ts index 74de4c5da17..6167b6fc4dd 100644 --- a/test/moves/instruct.test.ts +++ b/test/moves/instruct.test.ts @@ -1,9 +1,11 @@ import { BattlerIndex } from "#enums/battler-index"; +import { RandomMoveAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; import type Pokemon from "#app/field/pokemon"; import { MoveResult } from "#enums/move-result"; import type { MovePhase } from "#app/phases/move-phase"; import { AbilityId } from "#enums/ability-id"; +import { MoveUseMode } from "#enums/move-use-mode"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; import { Stat } from "#enums/stat"; @@ -141,6 +143,21 @@ describe("Moves - Instruct", () => { expect(game.scene.getPlayerPokemon()!.turnData.attacksReceived.length).toBe(3); }); + it("should fail on metronomed moves, even if also in moveset", async () => { + vi.spyOn(RandomMoveAttr.prototype, "getMoveOverride").mockReturnValue(MoveId.ABSORB); + await game.classicMode.startBattle([SpeciesId.AMOONGUSS]); + + const enemy = game.field.getEnemyPokemon(); + game.move.changeMoveset(enemy, [MoveId.METRONOME, MoveId.ABSORB]); + + game.move.use(MoveId.INSTRUCT); + await game.move.selectEnemyMove(MoveId.METRONOME); + await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.toEndOfTurn(); + + expect(game.field.getPlayerPokemon().getLastXMoves()[0].result).toBe(MoveResult.FAIL); + }); + it("should respect enemy's status condition", async () => { game.override.moveset([MoveId.INSTRUCT, MoveId.THUNDER_WAVE]).enemyMoveset(MoveId.SONIC_BOOM); await game.classicMode.startBattle([SpeciesId.AMOONGUSS]); @@ -152,7 +169,7 @@ describe("Moves - Instruct", () => { game.move.select(MoveId.INSTRUCT); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MovePhase"); - // force enemy's instructed move to bork and then immediately thaw out + // force enemy's instructed move (and only the instructed move) to fail await game.move.forceStatusActivation(true); await game.move.forceStatusActivation(false); await game.phaseInterceptor.to("TurnEndPhase", false); @@ -176,7 +193,7 @@ describe("Moves - Instruct", () => { await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase", false); - const playerMoves = game.scene.getPlayerPokemon()!.getLastXMoves(-1)!; + const playerMoves = game.field.getPlayerPokemon().getLastXMoves(-1); expect(playerMoves[0].result).toBe(MoveResult.FAIL); expect(enemyPokemon.getMoveHistory().length).toBe(1); }); @@ -203,6 +220,7 @@ describe("Moves - Instruct", () => { expect(karp1.isFainted()).toBe(true); expect(karp2.isFainted()).toBe(true); }); + it("should allow for dancer copying of instructed dance move", async () => { game.override.battleStyle("double").enemyMoveset([MoveId.INSTRUCT, MoveId.SPLASH]).enemyLevel(1000); await game.classicMode.startBattle([SpeciesId.ORICORIO, SpeciesId.VOLCARONA]); @@ -231,19 +249,18 @@ describe("Moves - Instruct", () => { const amoonguss = game.scene.getPlayerPokemon()!; game.move.changeMoveset(amoonguss, MoveId.SEED_BOMB); - amoonguss.summonData.moveHistory = [ - { - move: MoveId.SEED_BOMB, - targets: [BattlerIndex.ENEMY], - result: MoveResult.SUCCESS, - }, - ]; + amoonguss.pushMoveHistory({ + move: MoveId.SEED_BOMB, + targets: [BattlerIndex.ENEMY], + result: MoveResult.SUCCESS, + useMode: MoveUseMode.NORMAL, + }); game.doSwitchPokemon(1); await game.phaseInterceptor.to("TurnEndPhase", false); - const enemyMoves = game.scene.getEnemyPokemon()!.getLastXMoves(-1)!; - expect(enemyMoves[0].result).toBe(MoveResult.FAIL); + const enemyMoves = game.field.getEnemyPokemon().getLastXMoves(-1); + expect(enemyMoves[0]?.result).toBe(MoveResult.FAIL); }); it("should fail if no move has yet been used by target", async () => { @@ -272,15 +289,9 @@ describe("Moves - Instruct", () => { await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("TurnEndPhase", false); - expect(game.scene.getPlayerField()[0].getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); - const enemyMove = game.scene.getEnemyField()[0]!.getLastXMoves()[0]; - expect(enemyMove.result).toBe(MoveResult.FAIL); - expect( - game.scene - .getEnemyField()[0] - .getMoveset() - .find(m => m?.moveId === MoveId.SONIC_BOOM)?.ppUsed, - ).toBe(1); + expect(game.field.getPlayerPokemon().getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); + expect(enemy1.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + expect(enemy1.getMoveset().find(m => m.moveId === MoveId.SONIC_BOOM)?.ppUsed).toBe(1); }); it("should not repeat enemy's move through protect", async () => { @@ -304,14 +315,12 @@ describe("Moves - Instruct", () => { const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - enemy.summonData.moveHistory = [ - { - move: MoveId.SONIC_BOOM, - targets: [BattlerIndex.PLAYER], - result: MoveResult.SUCCESS, - virtual: false, - }, - ]; + enemy.pushMoveHistory({ + move: MoveId.SONIC_BOOM, + targets: [BattlerIndex.PLAYER], + result: MoveResult.SUCCESS, + useMode: MoveUseMode.NORMAL, + }); game.move.select(MoveId.INSTRUCT); await game.move.selectEnemyMove(MoveId.HYPER_BEAM); @@ -337,7 +346,7 @@ describe("Moves - Instruct", () => { move: MoveId.ELECTRO_DRIFT, targets: [BattlerIndex.PLAYER], result: MoveResult.SUCCESS, - virtual: false, + useMode: MoveUseMode.NORMAL, }); game.move.select(MoveId.SPLASH); @@ -351,14 +360,12 @@ describe("Moves - Instruct", () => { await game.classicMode.startBattle([SpeciesId.LUCARIO, SpeciesId.BANETTE]); const enemyPokemon = game.scene.getEnemyPokemon()!; - enemyPokemon.summonData.moveHistory = [ - { - move: MoveId.WHIRLWIND, - targets: [BattlerIndex.PLAYER], - result: MoveResult.SUCCESS, - virtual: false, - }, - ]; + enemyPokemon.pushMoveHistory({ + move: MoveId.WHIRLWIND, + targets: [BattlerIndex.PLAYER], + result: MoveResult.SUCCESS, + useMode: MoveUseMode.NORMAL, + }); game.move.select(MoveId.INSTRUCT); await game.move.selectEnemyMove(MoveId.SPLASH); @@ -378,11 +385,20 @@ describe("Moves - Instruct", () => { .enemyMoveset([MoveId.SPLASH, MoveId.PSYCHIC_TERRAIN]); await game.classicMode.startBattle([SpeciesId.BANETTE, SpeciesId.KLEFKI]); - game.move.select(MoveId.QUICK_ATTACK, BattlerIndex.PLAYER, BattlerIndex.ENEMY); // succeeds due to terrain no + const banette = game.field.getPlayerPokemon(); + + game.move.select(MoveId.QUICK_ATTACK, BattlerIndex.PLAYER, BattlerIndex.ENEMY); game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.move.selectEnemyMove(MoveId.SPLASH); await game.move.selectEnemyMove(MoveId.PSYCHIC_TERRAIN); await game.toNextTurn(); + expect(banette.getLastXMoves(-1)[0]).toEqual( + expect.objectContaining({ + move: MoveId.QUICK_ATTACK, + targets: [BattlerIndex.ENEMY], + result: MoveResult.SUCCESS, + }), + ); game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER); game.move.select(MoveId.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); @@ -390,32 +406,74 @@ describe("Moves - Instruct", () => { await game.phaseInterceptor.to("TurnEndPhase", false); // quick attack failed when instructed - const banette = game.scene.getPlayerPokemon()!; expect(banette.getLastXMoves(-1)[1].move).toBe(MoveId.QUICK_ATTACK); expect(banette.getLastXMoves(-1)[1].result).toBe(MoveResult.FAIL); }); - it("should still work w/ prankster in psychic terrain", async () => { - game.override.battleStyle("double").enemyMoveset([MoveId.SPLASH, MoveId.PSYCHIC_TERRAIN]); + // TODO: Enable once Sky Drop is fully implemented + it.todo("should not work against Sky Dropped targets, even if user/target have No Guard", async () => { + game.override.battleStyle("double").ability(AbilityId.NO_GUARD); await game.classicMode.startBattle([SpeciesId.BANETTE, SpeciesId.KLEFKI]); - const [banette, klefki] = game.scene.getPlayerField()!; - game.move.changeMoveset(banette, [MoveId.VINE_WHIP, MoveId.SPLASH]); - game.move.changeMoveset(klefki, [MoveId.INSTRUCT, MoveId.SPLASH]); + const [banette, klefki] = game.scene.getPlayerField(); + banette.pushMoveHistory({ + move: MoveId.VINE_WHIP, + targets: [BattlerIndex.ENEMY], + result: MoveResult.SUCCESS, + useMode: MoveUseMode.NORMAL, + }); - game.move.select(MoveId.VINE_WHIP, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(MoveId.SPLASH); - await game.move.selectEnemyMove(MoveId.PSYCHIC_TERRAIN); - await game.toNextTurn(); + // Attempt to instruct banette after having been sent airborne + game.move.use(MoveId.VINE_WHIP, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.use(MoveId.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); + await game.move.forceEnemyMove(MoveId.SKY_DROP, BattlerIndex.PLAYER); + await game.move.forceEnemyMove(MoveId.ASTONISH, BattlerIndex.PLAYER); + await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2]); + await game.phaseInterceptor.to("TurnEndPhase", false); - game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER); + // Klefki instruct fails due to banette being airborne, even though it got hit prior + expect(banette.visible).toBe(false); + expect(banette.isFullHp()).toBe(false); + expect(klefki.getLastXMoves()[0]).toMatchObject({ + move: MoveId.INSTRUCT, + targets: [BattlerIndex.PLAYER], + result: MoveResult.FAIL, + }); + }); + + it("should still work with prankster in psychic terrain", async () => { + game.override + .battleStyle("double") + .ability(AbilityId.PRANKSTER) + .enemyMoveset(MoveId.SPLASH) + .enemyAbility(AbilityId.PSYCHIC_SURGE); + await game.classicMode.startBattle([SpeciesId.BANETTE, SpeciesId.KLEFKI]); + + const [banette, klefki] = game.scene.getPlayerField(); + game.move.changeMoveset(banette, [MoveId.VINE_WHIP]); + game.move.changeMoveset(klefki, MoveId.INSTRUCT); + banette.pushMoveHistory({ + move: MoveId.VINE_WHIP, + targets: [BattlerIndex.ENEMY], + result: MoveResult.SUCCESS, + useMode: MoveUseMode.NORMAL, + }); + + game.move.select(MoveId.VINE_WHIP, BattlerIndex.PLAYER); game.move.select(MoveId.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); // copies vine whip await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("TurnEndPhase", false); + + // Klefki instructing a non-priority move succeeds, ignoring the priority of Instruct itself expect(banette.getLastXMoves(-1)[1].move).toBe(MoveId.VINE_WHIP); expect(banette.getLastXMoves(-1)[2].move).toBe(MoveId.VINE_WHIP); - expect(banette.getMoveset().find(m => m?.moveId === MoveId.VINE_WHIP)?.ppUsed).toBe(2); + expect(klefki.getLastXMoves(-1)[0]).toEqual( + expect.objectContaining({ + move: MoveId.INSTRUCT, + targets: [BattlerIndex.PLAYER], + result: MoveResult.SUCCESS, + }), + ); }); it("should cause spread moves to correctly hit targets in doubles after singles", async () => { @@ -424,14 +482,15 @@ describe("Moves - Instruct", () => { .moveset([MoveId.BREAKING_SWIPE, MoveId.INSTRUCT, MoveId.SPLASH]) .enemyMoveset(MoveId.SONIC_BOOM) .enemySpecies(SpeciesId.AXEW) - .startingLevel(500); + .startingLevel(500) + .enemyLevel(1); await game.classicMode.startBattle([SpeciesId.KORAIDON, SpeciesId.KLEFKI]); const koraidon = game.scene.getPlayerField()[0]!; game.move.select(MoveId.BREAKING_SWIPE); await game.phaseInterceptor.to("TurnEndPhase", false); - expect(koraidon.getInverseHp()).toBe(0); + expect(koraidon.hp).toBe(koraidon.getMaxHp()); expect(koraidon.getLastXMoves(-1)[0].targets).toEqual([BattlerIndex.ENEMY]); await game.toNextWave(); @@ -439,9 +498,10 @@ describe("Moves - Instruct", () => { game.move.select(MoveId.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("TurnEndPhase", false); + // did not take damage since enemies died beforehand; // last move used hit both enemies - expect(koraidon.getInverseHp()).toBe(0); + expect(koraidon.hp).toBe(koraidon.getMaxHp()); expect(koraidon.getLastXMoves(-1)[1].targets?.sort()).toEqual([BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); }); @@ -451,7 +511,8 @@ describe("Moves - Instruct", () => { .moveset([MoveId.BRUTAL_SWING, MoveId.INSTRUCT, MoveId.SPLASH]) .enemySpecies(SpeciesId.AXEW) .enemyMoveset(MoveId.SONIC_BOOM) - .startingLevel(500); + .startingLevel(500) + .enemyLevel(1); await game.classicMode.startBattle([SpeciesId.KORAIDON, SpeciesId.KLEFKI]); const koraidon = game.scene.getPlayerField()[0]!; @@ -459,22 +520,24 @@ describe("Moves - Instruct", () => { game.move.select(MoveId.BRUTAL_SWING); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("TurnEndPhase", false); - expect(koraidon.getInverseHp()).toBe(0); + + expect(koraidon.hp).toBe(koraidon.getMaxHp()); expect(koraidon.getLastXMoves(-1)[0].targets).toEqual([BattlerIndex.ENEMY]); + await game.toNextWave(); game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER); game.move.select(MoveId.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("TurnEndPhase", false); + // did not take damage since enemies died beforehand; // last move used hit everything around it - expect(koraidon.getInverseHp()).toBe(0); - expect(koraidon.getLastXMoves(-1)[1].targets?.sort()).toEqual([ - BattlerIndex.PLAYER_2, - BattlerIndex.ENEMY, - BattlerIndex.ENEMY_2, - ]); + expect(koraidon.hp).toBe(koraidon.getMaxHp()); + expect(koraidon.getLastXMoves(-1)[1].targets).toHaveLength(3); + expect(koraidon.getLastXMoves(-1)[1].targets).toEqual( + expect.arrayContaining([BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]), + ); }); it("should cause multi-hit moves to hit the appropriate number of times in singles", async () => { @@ -547,7 +610,12 @@ describe("Moves - Instruct", () => { // Fake enemy 1 having attacked prior const [, player2, enemy1, enemy2] = game.scene.getField(); - enemy1.pushMoveHistory({ move: MoveId.ABSORB, targets: [BattlerIndex.PLAYER] }); + enemy1.pushMoveHistory({ + move: MoveId.ABSORB, + targets: [BattlerIndex.PLAYER], + result: MoveResult.SUCCESS, + useMode: MoveUseMode.NORMAL, + }); game.field.mockAbility(enemy1, AbilityId.STEADFAST); game.move.use(MoveId.AIR_SLASH, BattlerIndex.PLAYER, BattlerIndex.ENEMY); diff --git a/test/moves/last-resort.test.ts b/test/moves/last-resort.test.ts index e4b8346053b..3b57bc5cf61 100644 --- a/test/moves/last-resort.test.ts +++ b/test/moves/last-resort.test.ts @@ -1,6 +1,7 @@ import { BattlerIndex } from "#enums/battler-index"; import { MoveResult } from "#enums/move-result"; import { AbilityId } from "#enums/ability-id"; +import { MoveUseMode } from "#enums/move-use-mode"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; @@ -53,19 +54,19 @@ describe("Moves - Last Resort", () => { expectLastResortFail(); // Splash (1/3) - blissey.pushMoveHistory({ move: MoveId.SPLASH, targets: [BattlerIndex.PLAYER] }); + blissey.pushMoveHistory({ move: MoveId.SPLASH, targets: [BattlerIndex.PLAYER], useMode: MoveUseMode.NORMAL }); game.move.select(MoveId.LAST_RESORT); await game.phaseInterceptor.to("TurnEndPhase"); expectLastResortFail(); // Growl (2/3) - blissey.pushMoveHistory({ move: MoveId.GROWL, targets: [BattlerIndex.ENEMY] }); + blissey.pushMoveHistory({ move: MoveId.GROWL, targets: [BattlerIndex.ENEMY], useMode: MoveUseMode.NORMAL }); game.move.select(MoveId.LAST_RESORT); await game.phaseInterceptor.to("TurnEndPhase"); expectLastResortFail(); // Were last resort itself counted, it would error here // Growth (3/3) - blissey.pushMoveHistory({ move: MoveId.GROWTH, targets: [BattlerIndex.PLAYER] }); + blissey.pushMoveHistory({ move: MoveId.GROWTH, targets: [BattlerIndex.PLAYER], useMode: MoveUseMode.NORMAL }); game.move.select(MoveId.LAST_RESORT); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.getPlayerPokemon()?.getLastXMoves()[0]).toEqual( @@ -117,11 +118,12 @@ describe("Moves - Last Resort", () => { expect.objectContaining({ move: MoveId.LAST_RESORT, result: MoveResult.SUCCESS, - virtual: true, + useMode: MoveUseMode.FOLLOW_UP, }), expect.objectContaining({ move: MoveId.SLEEP_TALK, result: MoveResult.SUCCESS, + useMode: MoveUseMode.NORMAL, }), ]); }); diff --git a/test/moves/metronome.test.ts b/test/moves/metronome.test.ts index ec610eeed45..670f7bb9b88 100644 --- a/test/moves/metronome.test.ts +++ b/test/moves/metronome.test.ts @@ -1,9 +1,13 @@ +import { BattlerIndex } from "#enums/battler-index"; import { RechargingTag, SemiInvulnerableTag } from "#app/data/battler-tags"; import type { RandomMoveAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { Stat } from "#app/enums/stat"; +import { MoveResult } from "#enums/move-result"; import { CommandPhase } from "#app/phases/command-phase"; +import { BattlerTagType } from "#enums/battler-tag-type"; +import { MoveUseMode } from "#enums/move-use-mode"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; @@ -33,7 +37,6 @@ describe("Moves - Metronome", () => { .moveset([MoveId.METRONOME, MoveId.SPLASH]) .battleStyle("single") .startingLevel(100) - .starterSpecies(SpeciesId.REGIELEKI) .enemyLevel(100) .enemySpecies(SpeciesId.SHUCKLE) .enemyMoveset(MoveId.SPLASH) @@ -41,7 +44,7 @@ describe("Moves - Metronome", () => { }); it("should have one semi-invulnerable turn and deal damage on the second turn when a semi-invulnerable move is called", async () => { - await game.classicMode.startBattle(); + await game.classicMode.startBattle([SpeciesId.REGIELEKI]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(MoveId.DIVE); @@ -57,7 +60,7 @@ describe("Moves - Metronome", () => { }); it("should apply secondary effects of a move", async () => { - await game.classicMode.startBattle(); + await game.classicMode.startBattle([SpeciesId.REGIELEKI]); const player = game.scene.getPlayerPokemon()!; vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(MoveId.WOOD_HAMMER); @@ -68,7 +71,7 @@ describe("Moves - Metronome", () => { }); it("should recharge after using recharge move", async () => { - await game.classicMode.startBattle(); + await game.classicMode.startBattle([SpeciesId.REGIELEKI]); const player = game.scene.getPlayerPokemon()!; vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(MoveId.HYPER_BEAM); vi.spyOn(allMoves[MoveId.HYPER_BEAM], "accuracy", "get").mockReturnValue(100); @@ -79,6 +82,41 @@ describe("Moves - Metronome", () => { expect(player.getTag(RechargingTag)).toBeTruthy(); }); + it("should charge for charging moves while still maintaining follow-up status", async () => { + game.override.moveset([]).enemyMoveset(MoveId.SPITE); + vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(MoveId.SOLAR_BEAM); + await game.classicMode.startBattle([SpeciesId.REGIELEKI]); + + const player = game.field.getPlayerPokemon(); + game.move.changeMoveset(player, [MoveId.METRONOME, MoveId.SOLAR_BEAM]); + + const [metronomeMove, solarBeamMove] = player.getMoveset(); + expect(metronomeMove).toBeDefined(); + expect(solarBeamMove).toBeDefined(); + + game.move.select(MoveId.METRONOME); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(player.getTag(BattlerTagType.CHARGING)).toBeTruthy(); + const turn1PpUsed = metronomeMove.ppUsed; + expect.soft(turn1PpUsed).toBeGreaterThan(1); + expect(solarBeamMove.ppUsed).toBe(0); + + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.toNextTurn(); + + expect(player.getTag(BattlerTagType.CHARGING)).toBeFalsy(); + const turn2PpUsed = metronomeMove.ppUsed - turn1PpUsed; + expect(turn2PpUsed).toBeGreaterThan(1); + expect(solarBeamMove.ppUsed).toBe(0); + expect(player.getLastXMoves()[0]).toMatchObject({ + move: MoveId.SOLAR_BEAM, + result: MoveResult.SUCCESS, + useMode: MoveUseMode.FOLLOW_UP, + }); + }); + it("should only target ally for Aromatic Mist", async () => { game.override.battleStyle("double"); await game.classicMode.startBattle([SpeciesId.REGIELEKI, SpeciesId.RATTATA]); @@ -98,7 +136,7 @@ describe("Moves - Metronome", () => { }); it("should cause opponent to flee, and not crash for Roar", async () => { - await game.classicMode.startBattle(); + await game.classicMode.startBattle([SpeciesId.REGIELEKI]); vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(MoveId.ROAR); const enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/test/moves/powder.test.ts b/test/moves/powder.test.ts index 889e660f167..8f47f2ff428 100644 --- a/test/moves/powder.test.ts +++ b/test/moves/powder.test.ts @@ -1,12 +1,10 @@ import { BattlerIndex } from "#enums/battler-index"; -import { PokemonMove } from "#app/data/moves/pokemon-move"; import { MoveResult } from "#enums/move-result"; import { BerryPhase } from "#app/phases/berry-phase"; -import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; -import { PokemonType } from "#enums/pokemon-type"; import { SpeciesId } from "#enums/species-id"; +import { PokemonType } from "#enums/pokemon-type"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -44,14 +42,14 @@ describe("Moves - Powder", () => { await game.classicMode.startBattle([SpeciesId.CHARIZARD]); const enemyPokemon = game.scene.getEnemyPokemon()!; - enemyPokemon.moveset = [new PokemonMove(MoveId.EMBER)]; + game.move.changeMoveset(enemyPokemon, MoveId.EMBER); game.move.select(MoveId.POWDER); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.FAIL); expect(enemyPokemon.hp).toBe(Math.ceil((3 * enemyPokemon.getMaxHp()) / 4)); - expect(enemyPokemon.moveset[0]!.ppUsed).toBe(1); + expect(enemyPokemon.moveset[0].ppUsed).toBe(1); await game.toNextTurn(); @@ -60,7 +58,7 @@ describe("Moves - Powder", () => { await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); expect(enemyPokemon.hp).toBe(Math.ceil((3 * enemyPokemon.getMaxHp()) / 4)); - expect(enemyPokemon.moveset[0]!.ppUsed).toBe(2); + expect(enemyPokemon.moveset[0].ppUsed).toBe(2); }); it("should have no effect against Grass-type Pokemon", async () => { @@ -167,10 +165,10 @@ describe("Moves - Powder", () => { game.move.select(MoveId.FIERY_DANCE, 0, BattlerIndex.ENEMY); game.move.select(MoveId.POWDER, 1, BattlerIndex.ENEMY); - await game.phaseInterceptor.to(MoveEffectPhase); + await game.phaseInterceptor.to("MoveEffectPhase"); const enemyStartingHp = enemyPokemon.hp; - await game.phaseInterceptor.to(BerryPhase, false); + await game.toEndOfTurn(); // player should not take damage expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.FAIL); @@ -181,7 +179,7 @@ describe("Moves - Powder", () => { ); }); - it("should cancel Fiery Dance, then prevent it from triggering Dancer", async () => { + it("should cancel Fiery Dance and prevent it from triggering Dancer", async () => { game.override.ability(AbilityId.DANCER).enemyMoveset(MoveId.FIERY_DANCE); await game.classicMode.startBattle([SpeciesId.CHARIZARD]); diff --git a/test/moves/quash.test.ts b/test/moves/quash.test.ts index 7c8306acd22..158c409cf05 100644 --- a/test/moves/quash.test.ts +++ b/test/moves/quash.test.ts @@ -7,6 +7,7 @@ import { MoveResult } from "#enums/move-result"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { describe, beforeAll, afterEach, beforeEach, it, expect } from "vitest"; +import { MoveUseMode } from "#enums/move-use-mode"; describe("Moves - Quash", () => { let phaserGame: Phaser.Game; @@ -49,8 +50,8 @@ describe("Moves - Quash", () => { it("fails if the target has already moved", async () => { await game.classicMode.startBattle([SpeciesId.ACCELGOR, SpeciesId.RATTATA]); - game.move.select(MoveId.SPLASH, 0); - game.move.select(MoveId.QUASH, 1, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.QUASH, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); await game.phaseInterceptor.to("MoveEndPhase"); await game.phaseInterceptor.to("MoveEndPhase"); @@ -58,6 +59,39 @@ describe("Moves - Quash", () => { expect(game.scene.getPlayerField()[1].getLastXMoves(1)[0].result).toBe(MoveResult.FAIL); }); + // TODO: Enable once rampaging moves and move queue are fixed. + // Currently does literally nothing because `MoveUseMode` is overridden from move queue + // within `MovePhase`, but should be enabled once that jank is removed + it.todo("should maintain PP ignore status of rampaging moves", async () => { + game.override.moveset([]); + await game.classicMode.startBattle([SpeciesId.ACCELGOR, SpeciesId.RATTATA]); + + const [accelgor, rattata] = game.scene.getPlayerField(); + expect(accelgor).toBeDefined(); + expect(rattata).toBeDefined(); + + game.move.changeMoveset(accelgor, [MoveId.SPLASH, MoveId.QUASH]); + game.move.changeMoveset(rattata, MoveId.OUTRAGE); + + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.OUTRAGE, BattlerIndex.PLAYER_2); + await game.phaseInterceptor.to("TurnEndPhase"); + + const outrageMove = rattata.getMoveset().find(m => m.moveId === MoveId.OUTRAGE); + expect(outrageMove?.ppUsed).toBe(1); + + game.move.select(MoveId.QUASH, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(accelgor.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); + expect(outrageMove?.ppUsed).toBe(1); + expect(rattata.getLastXMoves()[0]).toMatchObject({ + move: MoveId.OUTRAGE, + result: MoveResult.SUCCESS, + useMode: MoveUseMode.IGNORE_PP, + }); + }); + it("makes multiple quashed targets move in speed order at the end of the turn", async () => { game.override.enemySpecies(SpeciesId.NINJASK).enemyLevel(100); diff --git a/test/moves/spit_up.test.ts b/test/moves/spit_up.test.ts index fee58ef99f7..00cbe2fd0ad 100644 --- a/test/moves/spit_up.test.ts +++ b/test/moves/spit_up.test.ts @@ -2,7 +2,6 @@ import { Stat } from "#enums/stat"; import { StockpilingTag } from "#app/data/battler-tags"; import { allMoves } from "#app/data/data-lists"; import { BattlerTagType } from "#app/enums/battler-tag-type"; -import type { TurnMove } from "#app/field/pokemon"; import { MoveResult } from "#enums/move-result"; import GameManager from "#test/testUtils/gameManager"; import { AbilityId } from "#enums/ability-id"; @@ -126,7 +125,7 @@ describe("Moves - Spit Up", () => { game.move.select(MoveId.SPIT_UP); await game.phaseInterceptor.to(TurnInitPhase); - expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ + expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ move: MoveId.SPIT_UP, result: MoveResult.FAIL, targets: [game.scene.getEnemyPokemon()!.getBattlerIndex()], @@ -153,7 +152,7 @@ describe("Moves - Spit Up", () => { await game.phaseInterceptor.to(TurnInitPhase); - expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ + expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ move: MoveId.SPIT_UP, result: MoveResult.SUCCESS, targets: [game.scene.getEnemyPokemon()!.getBattlerIndex()], @@ -185,7 +184,7 @@ describe("Moves - Spit Up", () => { game.move.select(MoveId.SPIT_UP); await game.phaseInterceptor.to(TurnInitPhase); - expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ + expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ move: MoveId.SPIT_UP, result: MoveResult.SUCCESS, targets: [game.scene.getEnemyPokemon()!.getBattlerIndex()], diff --git a/test/moves/stockpile.test.ts b/test/moves/stockpile.test.ts index 342ca43c27f..3ad47d8d85e 100644 --- a/test/moves/stockpile.test.ts +++ b/test/moves/stockpile.test.ts @@ -1,6 +1,5 @@ import { Stat } from "#enums/stat"; import { StockpilingTag } from "#app/data/battler-tags"; -import type { TurnMove } from "#app/field/pokemon"; import { MoveResult } from "#enums/move-result"; import { CommandPhase } from "#app/phases/command-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; @@ -72,7 +71,7 @@ describe("Moves - Stockpile", () => { expect(user.getStatStage(Stat.SPDEF)).toBe(3); expect(stockpilingTag).toBeDefined(); expect(stockpilingTag.stockpiledCount).toBe(3); - expect(user.getMoveHistory().at(-1)).toMatchObject({ + expect(user.getMoveHistory().at(-1)).toMatchObject({ result: MoveResult.FAIL, move: MoveId.STOCKPILE, targets: [user.getBattlerIndex()], diff --git a/test/moves/swallow.test.ts b/test/moves/swallow.test.ts index bb95c2c593d..c511682011f 100644 --- a/test/moves/swallow.test.ts +++ b/test/moves/swallow.test.ts @@ -1,7 +1,6 @@ import { Stat } from "#enums/stat"; import { StockpilingTag } from "#app/data/battler-tags"; import { BattlerTagType } from "#app/enums/battler-tag-type"; -import type { TurnMove } from "#app/field/pokemon"; import { MoveResult } from "#enums/move-result"; import { MovePhase } from "#app/phases/move-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; @@ -134,7 +133,7 @@ describe("Moves - Swallow", () => { game.move.select(MoveId.SWALLOW); await game.phaseInterceptor.to(TurnInitPhase); - expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ + expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ move: MoveId.SWALLOW, result: MoveResult.FAIL, targets: [pokemon.getBattlerIndex()], @@ -159,7 +158,7 @@ describe("Moves - Swallow", () => { await game.phaseInterceptor.to(TurnInitPhase); - expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ + expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ move: MoveId.SWALLOW, result: MoveResult.SUCCESS, targets: [pokemon.getBattlerIndex()], @@ -190,7 +189,7 @@ describe("Moves - Swallow", () => { await game.phaseInterceptor.to(TurnInitPhase); - expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ + expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ move: MoveId.SWALLOW, result: MoveResult.SUCCESS, targets: [pokemon.getBattlerIndex()], diff --git a/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts b/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts index d5fe1ffc68a..ae7e269ea00 100644 --- a/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts +++ b/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts @@ -24,6 +24,7 @@ import { FunAndGamesEncounter } from "#app/data/mystery-encounters/encounters/fu import { MoveId } from "#enums/move-id"; import { Command } from "#enums/command"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import { MoveUseMode } from "#enums/move-use-mode"; const namespace = "mysteryEncounters/funAndGames"; const defaultParty = [SpeciesId.LAPRAS, SpeciesId.GENGAR, SpeciesId.ABRA]; @@ -152,15 +153,15 @@ describe("Fun And Games! - Mystery Encounter", () => { }); // Turn 1 - (game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, false); + (game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, MoveUseMode.NORMAL); await game.phaseInterceptor.to(CommandPhase); // Turn 2 - (game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, false); + (game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, MoveUseMode.NORMAL); await game.phaseInterceptor.to(CommandPhase); // Turn 3 - (game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, false); + (game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, MoveUseMode.NORMAL); await game.phaseInterceptor.to(SelectModifierPhase, false); // Rewards @@ -179,7 +180,7 @@ describe("Fun And Games! - Mystery Encounter", () => { // Skip minigame scene.currentBattle.mysteryEncounter!.misc.turnsRemaining = 0; - (game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, false); + (game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, MoveUseMode.NORMAL); await game.phaseInterceptor.to(SelectModifierPhase, false); // Rewards @@ -208,7 +209,7 @@ describe("Fun And Games! - Mystery Encounter", () => { const wobbuffet = scene.getEnemyPokemon()!; wobbuffet.hp = Math.floor(0.2 * wobbuffet.getMaxHp()); scene.currentBattle.mysteryEncounter!.misc.turnsRemaining = 0; - (game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, false); + (game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, MoveUseMode.NORMAL); await game.phaseInterceptor.to(SelectModifierPhase, false); // Rewards @@ -238,7 +239,7 @@ describe("Fun And Games! - Mystery Encounter", () => { const wobbuffet = scene.getEnemyPokemon()!; wobbuffet.hp = Math.floor(0.1 * wobbuffet.getMaxHp()); scene.currentBattle.mysteryEncounter!.misc.turnsRemaining = 0; - (game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, false); + (game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, MoveUseMode.NORMAL); await game.phaseInterceptor.to(SelectModifierPhase, false); // Rewards @@ -268,7 +269,7 @@ describe("Fun And Games! - Mystery Encounter", () => { const wobbuffet = scene.getEnemyPokemon()!; wobbuffet.hp = 1; scene.currentBattle.mysteryEncounter!.misc.turnsRemaining = 0; - (game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, false); + (game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, 0, MoveUseMode.NORMAL); await game.phaseInterceptor.to(SelectModifierPhase, false); // Rewards diff --git a/test/testUtils/gameManager.ts b/test/testUtils/gameManager.ts index 5d3ed3b6c8c..b9f499d4e0c 100644 --- a/test/testUtils/gameManager.ts +++ b/test/testUtils/gameManager.ts @@ -353,15 +353,20 @@ export default class GameManager { }; } - /** Transition to the first {@linkcode CommandPhase} of the next turn. */ + /** + * Transition to the first {@linkcode CommandPhase} of the next turn. + * @returns A promise that resolves once the next {@linkcode CommandPhase} has been reached. + */ async toNextTurn() { await this.phaseInterceptor.to("TurnInitPhase"); await this.phaseInterceptor.to("CommandPhase"); + console.log("==================[New Turn]=================="); } /** Transition to the {@linkcode TurnEndPhase | end of the current turn}. */ async toEndOfTurn() { await this.phaseInterceptor.to("TurnEndPhase"); + console.log("==================[End of Turn]=================="); } /** @@ -371,6 +376,7 @@ export default class GameManager { async toNextWave() { this.doSelectModifier(); + // forcibly end the message box for switching pokemon this.onNextPrompt( "CheckSwitchPhase", UiMode.CONFIRM, @@ -381,7 +387,9 @@ export default class GameManager { () => this.isCurrentPhase(TurnInitPhase), ); - await this.toNextTurn(); + await this.phaseInterceptor.to("TurnInitPhase"); + await this.phaseInterceptor.to("CommandPhase"); + console.log("==================[New Wave]=================="); } /** diff --git a/test/testUtils/helpers/moveHelper.ts b/test/testUtils/helpers/moveHelper.ts index d8c79c3bca8..ed1441a6a2f 100644 --- a/test/testUtils/helpers/moveHelper.ts +++ b/test/testUtils/helpers/moveHelper.ts @@ -13,6 +13,7 @@ import { getMovePosition } from "#test/testUtils/gameManagerUtils"; import { GameManagerHelper } from "#test/testUtils/helpers/gameManagerHelper"; import { vi } from "vitest"; import { coerceArray } from "#app/utils/common"; +import { MoveUseMode } from "#enums/move-use-mode"; /** * Helper to handle a Pokemon's move @@ -66,7 +67,7 @@ export class MoveHelper extends GameManagerHelper { (this.game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand( Command.FIGHT, movePosition, - false, + MoveUseMode.NORMAL, ); }); @@ -94,7 +95,11 @@ export class MoveHelper extends GameManagerHelper { ); }); this.game.onNextPrompt("CommandPhase", UiMode.FIGHT, () => { - (this.game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand(Command.TERA, movePosition, false); + (this.game.scene.phaseManager.getCurrentPhase() as CommandPhase).handleCommand( + Command.TERA, + movePosition, + MoveUseMode.NORMAL, + ); }); if (targetIndex !== null) { @@ -194,6 +199,7 @@ export class MoveHelper extends GameManagerHelper { target !== undefined && !legalTargets.multiple && legalTargets.targets.includes(target) ? [target] : enemy.getNextTargets(moveId), + useMode: MoveUseMode.NORMAL, }); /** @@ -242,6 +248,7 @@ export class MoveHelper extends GameManagerHelper { target !== undefined && !legalTargets.multiple && legalTargets.targets.includes(target) ? [target] : enemy.getNextTargets(moveId), + useMode: MoveUseMode.NORMAL, }); /** From ebc6ff2ed3f2dce4c59753f7d0290250de145982 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Mon, 16 Jun 2025 08:18:44 -0400 Subject: [PATCH 248/262] [Refactor] Clean up shiny/HA reroll methods (#5803) --- src/field/pokemon.ts | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 730d2ab2c2a..24399504eba 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -2785,17 +2785,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { */ public trySetShinySeed(thresholdOverride?: number, applyModifiersToOverride?: boolean): boolean { if (!this.shiny) { - const shinyThreshold = new NumberHolder(BASE_SHINY_CHANCE); - if (thresholdOverride === undefined || applyModifiersToOverride) { - if (thresholdOverride !== undefined && applyModifiersToOverride) { - shinyThreshold.value = thresholdOverride; - } + const shinyThreshold = new NumberHolder(thresholdOverride ?? BASE_SHINY_CHANCE); + if (applyModifiersToOverride) { if (timedEventManager.isEventActive()) { shinyThreshold.value *= timedEventManager.getShinyMultiplier(); } globalScene.applyModifiers(ShinyRateBoosterModifier, true, shinyThreshold); - } else { - shinyThreshold.value = thresholdOverride; } this.shiny = randSeedInt(65536) < shinyThreshold.value; @@ -2864,16 +2859,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (!this.species.abilityHidden) { return false; } - const haThreshold = new NumberHolder(BASE_HIDDEN_ABILITY_CHANCE); - if (thresholdOverride === undefined || applyModifiersToOverride) { - if (thresholdOverride !== undefined && applyModifiersToOverride) { - haThreshold.value = thresholdOverride; - } + const haThreshold = new NumberHolder(thresholdOverride ?? BASE_HIDDEN_ABILITY_CHANCE); + if (applyModifiersToOverride) { if (!this.hasTrainer()) { globalScene.applyModifiers(HiddenAbilityRateBoosterModifier, true, haThreshold); } - } else { - haThreshold.value = thresholdOverride; } if (randSeedInt(65536) < haThreshold.value) { From ccceaac877495d063a62238aa2c1d43cfe100213 Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Mon, 16 Jun 2025 08:36:09 -0400 Subject: [PATCH 249/262] [Test] Reworked crit override to allow for forced crits (#5738) * Crit override stuff * Update ability.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update pokemon.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update game-mode.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- .env.development | 1 + scripts/create-test/create-test.js | 2 +- scripts/create-test/test-boilerplate.ts | 2 +- src/battle-scene.ts | 21 +++-- src/data/abilities/ability.ts | 10 +-- src/field/pokemon.ts | 57 ++++++------ src/game-mode.ts | 5 +- src/overrides.ts | 6 +- src/phases/move-effect-phase.ts | 2 +- .../ability_activation_order.test.ts | 2 +- test/abilities/analytic.test.ts | 2 +- test/abilities/commander.test.ts | 2 +- test/abilities/corrosion.test.ts | 2 +- test/abilities/cud_chew.test.ts | 2 +- test/abilities/dry_skin.test.ts | 2 +- test/abilities/early_bird.test.ts | 2 +- test/abilities/flash_fire.test.ts | 2 +- test/abilities/flower_veil.test.ts | 2 +- test/abilities/good_as_gold.test.ts | 2 +- test/abilities/gulp_missile.test.ts | 2 +- test/abilities/harvest.test.ts | 2 +- test/abilities/healer.test.ts | 2 +- test/abilities/heatproof.test.ts | 2 +- test/abilities/honey_gather.test.ts | 2 +- test/abilities/hustle.test.ts | 2 +- test/abilities/immunity.test.ts | 2 +- test/abilities/infiltrator.test.ts | 2 +- test/abilities/insomnia.test.ts | 2 +- test/abilities/lightningrod.test.ts | 2 +- test/abilities/limber.test.ts | 2 +- test/abilities/magic_bounce.test.ts | 2 +- test/abilities/magic_guard.test.ts | 4 +- test/abilities/magma_armor.test.ts | 2 +- test/abilities/mimicry.test.ts | 2 +- test/abilities/mold_breaker.test.ts | 2 +- test/abilities/mummy.test.ts | 2 +- test/abilities/mycelium_might.test.ts | 2 +- test/abilities/neutralizing_gas.test.ts | 2 +- test/abilities/normalize.test.ts | 2 +- test/abilities/oblivious.test.ts | 2 +- test/abilities/own_tempo.test.ts | 2 +- test/abilities/parental_bond.test.ts | 2 +- test/abilities/perish_body.test.ts | 6 +- test/abilities/protosynthesis.test.ts | 2 +- test/abilities/sand_spit.test.ts | 2 +- test/abilities/sap_sipper.test.ts | 2 +- test/abilities/seed_sower.test.ts | 4 +- test/abilities/serene_grace.test.ts | 2 +- test/abilities/sheer_force.test.ts | 2 +- test/abilities/shell-armor.test.ts | 69 +++++++++++++++ test/abilities/stakeout.test.ts | 2 +- test/abilities/stall.test.ts | 2 +- test/abilities/storm_drain.test.ts | 2 +- test/abilities/thermal_exchange.test.ts | 2 +- test/abilities/trace.test.ts | 2 +- test/abilities/victory_star.test.ts | 2 +- test/abilities/vital_spirit.test.ts | 2 +- test/abilities/volt_absorb.test.ts | 2 +- test/abilities/wandering_spirit.test.ts | 2 +- test/abilities/water_bubble.test.ts | 2 +- test/abilities/water_veil.test.ts | 2 +- test/abilities/wimp_out.test.ts | 2 +- test/abilities/zen_mode.test.ts | 2 +- test/arena/grassy_terrain.test.ts | 2 +- test/battle/ability_swap.test.ts | 2 +- test/battle/damage_calculation.test.ts | 2 +- test/boss-pokemon.test.ts | 2 +- test/data/status_effect.test.ts | 4 +- test/endless_boss.test.ts | 2 +- test/final_boss.test.ts | 2 +- test/items/multi_lens.test.ts | 2 +- test/items/reviver_seed.test.ts | 2 +- test/moves/alluring_voice.test.ts | 2 +- test/moves/assist.test.ts | 2 +- test/moves/aurora_veil.test.ts | 2 +- test/moves/baton_pass.test.ts | 2 +- test/moves/burning_jealousy.test.ts | 2 +- test/moves/camouflage.test.ts | 2 +- test/moves/chloroblast.test.ts | 2 +- test/moves/copycat.test.ts | 2 +- test/moves/defog.test.ts | 2 +- test/moves/doodle.test.ts | 2 +- test/moves/double_team.test.ts | 2 +- test/moves/dragon_rage.test.ts | 10 +-- test/moves/dynamax_cannon.test.ts | 8 +- test/moves/encore.test.ts | 2 +- test/moves/endure.test.ts | 2 +- test/moves/entrainment.test.ts | 2 +- test/moves/fairy_lock.test.ts | 2 +- test/moves/fake_out.test.ts | 2 +- test/moves/false_swipe.test.ts | 2 +- test/moves/fell_stinger.test.ts | 2 +- test/moves/fissure.test.ts | 4 +- test/moves/flame_burst.test.ts | 4 +- test/moves/foresight.test.ts | 2 +- test/moves/forests_curse.test.ts | 2 +- test/moves/fusion_bolt.test.ts | 2 +- test/moves/fusion_flare.test.ts | 2 +- test/moves/fusion_flare_bolt.test.ts | 2 +- test/moves/gigaton_hammer.test.ts | 2 +- test/moves/glaive_rush.test.ts | 2 +- test/moves/grudge.test.ts | 2 +- test/moves/heal_block.test.ts | 2 +- test/moves/instruct.test.ts | 2 +- test/moves/jaw_lock.test.ts | 2 +- test/moves/lash_out.test.ts | 2 +- test/moves/last-resort.test.ts | 2 +- test/moves/last_respects.test.ts | 2 +- test/moves/light_screen.test.ts | 2 +- test/moves/lucky_chant.test.ts | 86 +++++++++++-------- test/moves/magic_coat.test.ts | 2 +- test/moves/magnet_rise.test.ts | 2 +- test/moves/metal_burst.test.ts | 2 +- test/moves/miracle_eye.test.ts | 2 +- test/moves/mirror_move.test.ts | 2 +- test/moves/mist.test.ts | 2 +- test/moves/moongeist_beam.test.ts | 2 +- test/moves/multi_target.test.ts | 2 +- test/moves/order_up.test.ts | 2 +- test/moves/pollen_puff.test.ts | 2 +- test/moves/psycho_shift.test.ts | 2 +- test/moves/reflect.test.ts | 2 +- test/moves/reflect_type.test.ts | 6 +- test/moves/retaliate.test.ts | 2 +- test/moves/revival_blessing.test.ts | 2 +- test/moves/role_play.test.ts | 2 +- test/moves/rollout.test.ts | 2 +- test/moves/round.test.ts | 2 +- test/moves/scale_shot.test.ts | 2 +- test/moves/secret_power.test.ts | 2 +- test/moves/simple_beam.test.ts | 2 +- test/moves/sketch.test.ts | 2 +- test/moves/skill_swap.test.ts | 2 +- test/moves/sleep_talk.test.ts | 2 +- test/moves/spectral_thief.test.ts | 3 +- test/moves/struggle.test.ts | 2 +- test/moves/synchronoise.test.ts | 2 +- test/moves/tackle.test.ts | 2 +- test/moves/tar_shot.test.ts | 2 +- test/moves/tera_blast.test.ts | 2 +- test/moves/trick_or_treat.test.ts | 2 +- test/moves/u_turn.test.ts | 2 +- test/moves/upper_hand.test.ts | 2 +- test/moves/will_o_wisp.test.ts | 2 +- test/phases/form-change-phase.test.ts | 2 +- test/phases/frenzy-move-reset.test.ts | 2 +- test/phases/game-over-phase.test.ts | 2 +- test/testUtils/gameManagerUtils.ts | 2 +- test/testUtils/helpers/dailyModeHelper.ts | 5 +- test/testUtils/helpers/overridesHelper.ts | 11 ++- test/testUtils/phaseInterceptor.ts | 4 +- 151 files changed, 345 insertions(+), 243 deletions(-) create mode 100644 test/abilities/shell-armor.test.ts diff --git a/.env.development b/.env.development index e4e5053016f..91c228d6761 100644 --- a/.env.development +++ b/.env.development @@ -1,6 +1,7 @@ VITE_BYPASS_LOGIN=1 VITE_BYPASS_TUTORIAL=0 VITE_SERVER_URL=http://localhost:8001 +# IDs for discord/google auth go unused due to VITE_BYPASS_LOGIN VITE_DISCORD_CLIENT_ID=1234567890 VITE_GOOGLE_CLIENT_ID=1234567890 VITE_I18N_DEBUG=0 diff --git a/scripts/create-test/create-test.js b/scripts/create-test/create-test.js index e71994472f3..d5cac5cd408 100644 --- a/scripts/create-test/create-test.js +++ b/scripts/create-test/create-test.js @@ -48,7 +48,7 @@ async function promptTestType() { { type: "list", name: "selectedOption", - message: "What type of test would you like to create:", + message: "What type of test would you like to create?", choices: [...choices.map(choice => ({ name: choice.label, value: choice })), "EXIT"], }, ]); diff --git a/scripts/create-test/test-boilerplate.ts b/scripts/create-test/test-boilerplate.ts index 40912be6c5f..1fbd3c8040a 100644 --- a/scripts/create-test/test-boilerplate.ts +++ b/scripts/create-test/test-boilerplate.ts @@ -24,7 +24,7 @@ describe("{{description}}", () => { game.override .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 81c65d85e06..14b0c6a3d19 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -2094,12 +2094,15 @@ export default class BattleScene extends SceneBase { } getMaxExpLevel(ignoreLevelCap = false): number { - if (Overrides.LEVEL_CAP_OVERRIDE > 0) { - return Overrides.LEVEL_CAP_OVERRIDE; + const capOverride = Overrides.LEVEL_CAP_OVERRIDE ?? 0; + if (capOverride > 0) { + return capOverride; } - if (ignoreLevelCap || Overrides.LEVEL_CAP_OVERRIDE < 0) { + + if (ignoreLevelCap || capOverride < 0) { return Number.MAX_SAFE_INTEGER; } + const waveIndex = Math.ceil((this.currentBattle?.waveIndex || 1) / 10) * 10; const difficultyWaveIndex = this.gameMode.getWaveForDifficulty(waveIndex); const baseLevel = (1 + difficultyWaveIndex / 2 + Math.pow(difficultyWaveIndex / 25, 2)) * 1.2; @@ -3492,17 +3495,13 @@ export default class BattleScene extends SceneBase { sessionEncounterRate + Math.min(currentRunDiffFromAvg * ANTI_VARIANCE_WEIGHT_MODIFIER, MYSTERY_ENCOUNTER_SPAWN_MAX_WEIGHT / 2); - const successRate = isNullOrUndefined(Overrides.MYSTERY_ENCOUNTER_RATE_OVERRIDE) - ? favoredEncounterRate - : Overrides.MYSTERY_ENCOUNTER_RATE_OVERRIDE!; + const successRate = Overrides.MYSTERY_ENCOUNTER_RATE_OVERRIDE ?? favoredEncounterRate; - // If the most recent ME was 3 or fewer waves ago, can never spawn a ME + // MEs can only spawn 3 or more waves after the previous ME, barring overrides const canSpawn = - encounteredEvents.length === 0 || - waveIndex - encounteredEvents[encounteredEvents.length - 1].waveIndex > 3 || - !isNullOrUndefined(Overrides.MYSTERY_ENCOUNTER_RATE_OVERRIDE); + encounteredEvents.length === 0 || waveIndex - encounteredEvents[encounteredEvents.length - 1].waveIndex > 3; - if (canSpawn) { + if (canSpawn || Overrides.MYSTERY_ENCOUNTER_RATE_OVERRIDE !== null) { let roll = MYSTERY_ENCOUNTER_SPAWN_MAX_WEIGHT; // Always rolls the check on the same offset to ensure no RNG changes from reloading session this.executeWithSeedOffset( diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index c9684986c46..3124f782ff5 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -4617,7 +4617,7 @@ export class ConditionalUserFieldProtectStatAbAttr extends PreStatStageChangeAbA * @param stat The stat being affected * @param cancelled Holds whether the stat change was already prevented. * @param args Args[0] is the target pokemon of the stat change. - * @returns + * @returns `true` if the ability can be applied */ override canApplyPreStatStageChange( _pokemon: Pokemon, @@ -4778,17 +4778,17 @@ export class BlockCritAbAttr extends AbAttr { } /** - * Apply the block crit ability by setting the value in the provided boolean holder to false - * @param args - [0] is a boolean holder representing whether the attack can crit + * Apply the block crit ability by setting the value in the provided boolean holder to `true`. + * @param args - `[0]`: A {@linkcode BooleanHolder} containing whether the attack is prevented from critting. */ override apply( _pokemon: Pokemon, _passive: boolean, _simulated: boolean, _cancelled: BooleanHolder, - args: [BooleanHolder, ...any], + args: [BooleanHolder], ): void { - args[0].value = false; + args[0].value = true; } } diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 24399504eba..fe89142b5c6 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1356,8 +1356,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } /** - * Calculate the critical-hit stage of a move used against this pokemon by - * the given source + * Calculate the critical-hit stage of a move used **against** this pokemon by + * the given source. + * * @param source - The {@linkcode Pokemon} using the move * @param move - The {@linkcode Move} being used * @returns The final critical-hit stage value @@ -1370,11 +1371,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { applyAbAttrs("BonusCritAbAttr", source, null, false, critStage); const critBoostTag = source.getTag(CritBoostTag); if (critBoostTag) { - if (critBoostTag instanceof DragonCheerTag) { - critStage.value += critBoostTag.typesOnAdd.includes(PokemonType.DRAGON) ? 2 : 1; - } else { - critStage.value += 2; - } + // Dragon cheer only gives +1 crit stage to non-dragon types + critStage.value += + critBoostTag instanceof DragonCheerTag && !critBoostTag.typesOnAdd.includes(PokemonType.DRAGON) ? 1 : 2; } console.log(`crit stage: +${critStage.value}`); @@ -3878,33 +3877,39 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { }; } - /** Calculate whether the given move critically hits this pokemon + /** + * Determine whether the given move will score a critical hit **against** this Pokemon. * @param source - The {@linkcode Pokemon} using the move * @param move - The {@linkcode Move} being used - * @param simulated - If `true`, suppresses changes to game state during calculation (defaults to `true`) - * @returns whether the move critically hits the pokemon + * @returns Whether the move will critically hit the defender. */ - getCriticalHitResult(source: Pokemon, move: Move, simulated = true): boolean { - const defendingSide = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; - const noCritTag = globalScene.arena.getTagOnSide(NoCritTag, defendingSide); - if (noCritTag || Overrides.NEVER_CRIT_OVERRIDE || move.hasAttr("FixedDamageAttr")) { + getCriticalHitResult(source: Pokemon, move: Move): boolean { + if (move.hasAttr("FixedDamageAttr")) { + // fixed damage moves (Dragon Rage, etc.) will nevet crit return false; } - const isCritical = new BooleanHolder(false); - if (source.getTag(BattlerTagType.ALWAYS_CRIT)) { - isCritical.value = true; - } - applyMoveAttrs("CritOnlyAttr", source, this, move, isCritical); - applyAbAttrs("ConditionalCritAbAttr", source, null, simulated, isCritical, this, move); - if (!isCritical.value) { - const critChance = [24, 8, 2, 1][Math.max(0, Math.min(this.getCritStage(source, move), 3))]; - isCritical.value = critChance === 1 || !globalScene.randBattleSeedInt(critChance); - } + const alwaysCrit = new BooleanHolder(false); + applyMoveAttrs("CritOnlyAttr", source, this, move, alwaysCrit); + applyAbAttrs("ConditionalCritAbAttr", source, null, false, alwaysCrit, this, move); + const alwaysCritTag = !!source.getTag(BattlerTagType.ALWAYS_CRIT); + const critChance = [24, 8, 2, 1][Phaser.Math.Clamp(this.getCritStage(source, move), 0, 3)]; - applyAbAttrs("BlockCritAbAttr", this, null, simulated, isCritical); + let isCritical = alwaysCrit.value || alwaysCritTag || critChance === 1; - return isCritical.value; + // If we aren't already guaranteed to crit, do a random roll & check overrides + isCritical ||= Overrides.CRITICAL_HIT_OVERRIDE ?? globalScene.randBattleSeedInt(critChance) === 0; + + // apply crit block effects from lucky chant & co., overriding previous effects + const blockCrit = new BooleanHolder(false); + applyAbAttrs("BlockCritAbAttr", this, null, false, blockCrit); + const blockCritTag = globalScene.arena.getTagOnSide( + NoCritTag, + this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY, + ); + isCritical &&= !blockCritTag && !blockCrit.value; // need to roll a crit and not be blocked by either crit prevention effect + + return isCritical; } /** diff --git a/src/game-mode.ts b/src/game-mode.ts index a6fc8195175..9722d564e09 100644 --- a/src/game-mode.ts +++ b/src/game-mode.ts @@ -90,13 +90,14 @@ export class GameMode implements GameModeConfig { } /** + * Helper function to get starting level for game mode. * @returns either: - * - override from overrides.ts + * - starting level override from overrides.ts * - 20 for Daily Runs * - 5 for all other modes */ getStartingLevel(): number { - if (Overrides.STARTING_LEVEL_OVERRIDE) { + if (Overrides.STARTING_LEVEL_OVERRIDE > 0) { return Overrides.STARTING_LEVEL_OVERRIDE; } switch (this.modeId) { diff --git a/src/overrides.ts b/src/overrides.ts index 5858be77dac..b390b9fa70f 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -80,7 +80,11 @@ class DefaultOverrides { /** Sets the level cap to this number during experience gain calculations. Set to `0` to disable override & use normal wave-based level caps, or any negative number to set it to 9 quadrillion (effectively disabling it). */ readonly LEVEL_CAP_OVERRIDE: number = 0; - readonly NEVER_CRIT_OVERRIDE: boolean = false; + /** + * If defined, overrides random critical hit rolls to always or never succeed. + * Ignored if the move is guaranteed to always/never crit. + */ + readonly CRITICAL_HIT_OVERRIDE: boolean | null = null; /** default 1000 */ readonly STARTING_MONEY_OVERRIDE: number = 0; /** Sets all shop item prices to 0 */ diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index 35c803ee1d7..d7da1ab996c 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -821,7 +821,7 @@ export class MoveEffectPhase extends PokemonPhase { * @param effectiveness - The effectiveness of the move against the target */ protected applyMoveDamage(user: Pokemon, target: Pokemon, effectiveness: TypeDamageMultiplier): HitResult { - const isCritical = target.getCriticalHitResult(user, this.move, false); + const isCritical = target.getCriticalHitResult(user, this.move); /* * Apply stat changes from {@linkcode move} and gives it to {@linkcode source} diff --git a/test/abilities/ability_activation_order.test.ts b/test/abilities/ability_activation_order.test.ts index 04adf40b623..0b8e354cc7d 100644 --- a/test/abilities/ability_activation_order.test.ts +++ b/test/abilities/ability_activation_order.test.ts @@ -27,7 +27,7 @@ describe("Ability Activation Order", () => { .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/abilities/analytic.test.ts b/test/abilities/analytic.test.ts index 2cfea64d20e..5dbf4365186 100644 --- a/test/abilities/analytic.test.ts +++ b/test/abilities/analytic.test.ts @@ -27,7 +27,7 @@ describe("Abilities - Analytic", () => { .moveset([MoveId.SPLASH, MoveId.TACKLE]) .ability(AbilityId.ANALYTIC) .battleStyle("single") - .disableCrits() + .criticalHits(false) .startingLevel(200) .enemyLevel(200) .enemySpecies(SpeciesId.SNORLAX) diff --git a/test/abilities/commander.test.ts b/test/abilities/commander.test.ts index 39d9d0f4d7f..99512d7a733 100644 --- a/test/abilities/commander.test.ts +++ b/test/abilities/commander.test.ts @@ -35,7 +35,7 @@ describe("Abilities - Commander", () => { .moveset([MoveId.LIQUIDATION, MoveId.MEMENTO, MoveId.SPLASH, MoveId.FLIP_TURN]) .ability(AbilityId.COMMANDER) .battleStyle("double") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.SNORLAX) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.TACKLE); diff --git a/test/abilities/corrosion.test.ts b/test/abilities/corrosion.test.ts index 81b04ef340c..2a0464d1146 100644 --- a/test/abilities/corrosion.test.ts +++ b/test/abilities/corrosion.test.ts @@ -24,7 +24,7 @@ describe("Abilities - Corrosion", () => { game.override .moveset([MoveId.SPLASH]) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.GRIMER) .enemyAbility(AbilityId.CORROSION) .enemyMoveset(MoveId.TOXIC); diff --git a/test/abilities/cud_chew.test.ts b/test/abilities/cud_chew.test.ts index 8a80c6625cc..70c282bf8a8 100644 --- a/test/abilities/cud_chew.test.ts +++ b/test/abilities/cud_chew.test.ts @@ -33,7 +33,7 @@ describe("Abilities - Cud Chew", () => { .startingHeldItems([{ name: "BERRY", type: BerryType.SITRUS, count: 1 }]) .ability(AbilityId.CUD_CHEW) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/abilities/dry_skin.test.ts b/test/abilities/dry_skin.test.ts index 549bb45ba9a..31620beb9bd 100644 --- a/test/abilities/dry_skin.test.ts +++ b/test/abilities/dry_skin.test.ts @@ -23,7 +23,7 @@ describe("Abilities - Dry Skin", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemyAbility(AbilityId.DRY_SKIN) .enemyMoveset(MoveId.SPLASH) .enemySpecies(SpeciesId.CHARMANDER) diff --git a/test/abilities/early_bird.test.ts b/test/abilities/early_bird.test.ts index e19f2653b57..dcdfd8e4956 100644 --- a/test/abilities/early_bird.test.ts +++ b/test/abilities/early_bird.test.ts @@ -28,7 +28,7 @@ describe("Abilities - Early Bird", () => { .moveset([MoveId.REST, MoveId.BELLY_DRUM, MoveId.SPLASH]) .ability(AbilityId.EARLY_BIRD) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/abilities/flash_fire.test.ts b/test/abilities/flash_fire.test.ts index fe17013f49f..3be156a1578 100644 --- a/test/abilities/flash_fire.test.ts +++ b/test/abilities/flash_fire.test.ts @@ -32,7 +32,7 @@ describe("Abilities - Flash Fire", () => { .enemyAbility(AbilityId.BALL_FETCH) .startingLevel(20) .enemyLevel(20) - .disableCrits(); + .criticalHits(false); }); it("immune to Fire-type moves", async () => { diff --git a/test/abilities/flower_veil.test.ts b/test/abilities/flower_veil.test.ts index d3e99185c2f..7cabfa23e96 100644 --- a/test/abilities/flower_veil.test.ts +++ b/test/abilities/flower_veil.test.ts @@ -32,7 +32,7 @@ describe("Abilities - Flower Veil", () => { .enemySpecies(SpeciesId.BULBASAUR) .ability(AbilityId.FLOWER_VEIL) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/abilities/good_as_gold.test.ts b/test/abilities/good_as_gold.test.ts index 3b6600eabd4..89e354b1f34 100644 --- a/test/abilities/good_as_gold.test.ts +++ b/test/abilities/good_as_gold.test.ts @@ -33,7 +33,7 @@ describe("Abilities - Good As Gold", () => { .moveset([MoveId.SPLASH]) .ability(AbilityId.GOOD_AS_GOLD) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/abilities/gulp_missile.test.ts b/test/abilities/gulp_missile.test.ts index b41eea9ce18..e47b22f0c06 100644 --- a/test/abilities/gulp_missile.test.ts +++ b/test/abilities/gulp_missile.test.ts @@ -41,7 +41,7 @@ describe("Abilities - Gulp Missile", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .disableCrits() + .criticalHits(false) .battleStyle("single") .moveset([MoveId.SURF, MoveId.DIVE, MoveId.SPLASH, MoveId.SUBSTITUTE]) .enemySpecies(SpeciesId.SNORLAX) diff --git a/test/abilities/harvest.test.ts b/test/abilities/harvest.test.ts index 40e6a6abd62..662eeed6dd0 100644 --- a/test/abilities/harvest.test.ts +++ b/test/abilities/harvest.test.ts @@ -47,7 +47,7 @@ describe("Abilities - Harvest", () => { .ability(AbilityId.HARVEST) .startingLevel(100) .battleStyle("single") - .disableCrits() + .criticalHits(false) .statusActivation(false) // Since we're using nuzzle to proc both enigma and sitrus berries .weather(WeatherType.SUNNY) // guaranteed recovery .enemyLevel(1) diff --git a/test/abilities/healer.test.ts b/test/abilities/healer.test.ts index 94272848e16..b37c9effeb0 100644 --- a/test/abilities/healer.test.ts +++ b/test/abilities/healer.test.ts @@ -30,7 +30,7 @@ describe("Abilities - Healer", () => { .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("double") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/abilities/heatproof.test.ts b/test/abilities/heatproof.test.ts index f705e8bf785..39c9dff8289 100644 --- a/test/abilities/heatproof.test.ts +++ b/test/abilities/heatproof.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Heatproof", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.CHARMANDER) .enemyAbility(AbilityId.HEATPROOF) .enemyMoveset(MoveId.SPLASH) diff --git a/test/abilities/honey_gather.test.ts b/test/abilities/honey_gather.test.ts index 06d351b2a61..f8700f3e6f7 100644 --- a/test/abilities/honey_gather.test.ts +++ b/test/abilities/honey_gather.test.ts @@ -29,7 +29,7 @@ describe("Abilities - Honey Gather", () => { .ability(AbilityId.HONEY_GATHER) .passiveAbility(AbilityId.RUN_AWAY) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/abilities/hustle.test.ts b/test/abilities/hustle.test.ts index 7ac636b15b2..57a1a2e1d86 100644 --- a/test/abilities/hustle.test.ts +++ b/test/abilities/hustle.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Hustle", () => { game.override .ability(AbilityId.HUSTLE) .moveset([MoveId.TACKLE, MoveId.GIGA_DRAIN, MoveId.FISSURE]) - .disableCrits() + .criticalHits(false) .battleStyle("single") .enemyMoveset(MoveId.SPLASH) .enemySpecies(SpeciesId.SHUCKLE) diff --git a/test/abilities/immunity.test.ts b/test/abilities/immunity.test.ts index b6ca34bfaa3..063ab57f11a 100644 --- a/test/abilities/immunity.test.ts +++ b/test/abilities/immunity.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Immunity", () => { .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/abilities/infiltrator.test.ts b/test/abilities/infiltrator.test.ts index 03b55e925cd..a5de035a136 100644 --- a/test/abilities/infiltrator.test.ts +++ b/test/abilities/infiltrator.test.ts @@ -31,7 +31,7 @@ describe("Abilities - Infiltrator", () => { .moveset([MoveId.TACKLE, MoveId.WATER_GUN, MoveId.SPORE, MoveId.BABY_DOLL_EYES]) .ability(AbilityId.INFILTRATOR) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.SNORLAX) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH) diff --git a/test/abilities/insomnia.test.ts b/test/abilities/insomnia.test.ts index 418e0ed1345..800663823c3 100644 --- a/test/abilities/insomnia.test.ts +++ b/test/abilities/insomnia.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Insomnia", () => { .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/abilities/lightningrod.test.ts b/test/abilities/lightningrod.test.ts index a69f5e94067..2dc29500454 100644 --- a/test/abilities/lightningrod.test.ts +++ b/test/abilities/lightningrod.test.ts @@ -27,7 +27,7 @@ describe("Abilities - Lightningrod", () => { .moveset([MoveId.SPLASH, MoveId.SHOCK_WAVE]) .ability(AbilityId.BALL_FETCH) .battleStyle("double") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/abilities/limber.test.ts b/test/abilities/limber.test.ts index 2ca469dcaa1..77acd8b3dab 100644 --- a/test/abilities/limber.test.ts +++ b/test/abilities/limber.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Limber", () => { .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/abilities/magic_bounce.test.ts b/test/abilities/magic_bounce.test.ts index fb4f273950a..04bfcbbfe8f 100644 --- a/test/abilities/magic_bounce.test.ts +++ b/test/abilities/magic_bounce.test.ts @@ -32,7 +32,7 @@ describe("Abilities - Magic Bounce", () => { .ability(AbilityId.BALL_FETCH) .battleStyle("single") .moveset([MoveId.GROWL, MoveId.SPLASH]) - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.MAGIC_BOUNCE) .enemyMoveset(MoveId.SPLASH); diff --git a/test/abilities/magic_guard.test.ts b/test/abilities/magic_guard.test.ts index 4274e692a2e..f135a761bba 100644 --- a/test/abilities/magic_guard.test.ts +++ b/test/abilities/magic_guard.test.ts @@ -89,9 +89,7 @@ describe("Abilities - Magic Guard", () => { }); it("ability effect should not persist when the ability is replaced", async () => { - game.override - .enemyMoveset([MoveId.WORRY_SEED, MoveId.WORRY_SEED, MoveId.WORRY_SEED, MoveId.WORRY_SEED]) - .statusEffect(StatusEffect.POISON); + game.override.enemyMoveset(MoveId.WORRY_SEED).statusEffect(StatusEffect.POISON); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); diff --git a/test/abilities/magma_armor.test.ts b/test/abilities/magma_armor.test.ts index 74493fac365..0a8f3024291 100644 --- a/test/abilities/magma_armor.test.ts +++ b/test/abilities/magma_armor.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Magma Armor", () => { .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/abilities/mimicry.test.ts b/test/abilities/mimicry.test.ts index df6facc3755..7ac7aeb599f 100644 --- a/test/abilities/mimicry.test.ts +++ b/test/abilities/mimicry.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Mimicry", () => { .moveset([MoveId.SPLASH]) .ability(AbilityId.MIMICRY) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyMoveset(MoveId.SPLASH); }); diff --git a/test/abilities/mold_breaker.test.ts b/test/abilities/mold_breaker.test.ts index e2e8a73da9d..28a077e8908 100644 --- a/test/abilities/mold_breaker.test.ts +++ b/test/abilities/mold_breaker.test.ts @@ -27,7 +27,7 @@ describe("Abilities - Mold Breaker", () => { .moveset([MoveId.SPLASH]) .ability(AbilityId.MOLD_BREAKER) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/abilities/mummy.test.ts b/test/abilities/mummy.test.ts index 2b35e801677..d6c40541d25 100644 --- a/test/abilities/mummy.test.ts +++ b/test/abilities/mummy.test.ts @@ -25,7 +25,7 @@ describe("Abilities - Mummy", () => { .moveset([MoveId.SPLASH]) .ability(AbilityId.MUMMY) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.TACKLE); diff --git a/test/abilities/mycelium_might.test.ts b/test/abilities/mycelium_might.test.ts index 7bfb3fb7b81..2cdda4353b5 100644 --- a/test/abilities/mycelium_might.test.ts +++ b/test/abilities/mycelium_might.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Mycelium Might", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.SHUCKLE) .enemyAbility(AbilityId.CLEAR_BODY) diff --git a/test/abilities/neutralizing_gas.test.ts b/test/abilities/neutralizing_gas.test.ts index 51d2bed3ff0..2408a78f11d 100644 --- a/test/abilities/neutralizing_gas.test.ts +++ b/test/abilities/neutralizing_gas.test.ts @@ -31,7 +31,7 @@ describe("Abilities - Neutralizing Gas", () => { .moveset([MoveId.SPLASH]) .ability(AbilityId.NEUTRALIZING_GAS) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/abilities/normalize.test.ts b/test/abilities/normalize.test.ts index 2e000e76a27..1a4b93f3f32 100644 --- a/test/abilities/normalize.test.ts +++ b/test/abilities/normalize.test.ts @@ -29,7 +29,7 @@ describe("Abilities - Normalize", () => { .moveset([MoveId.TACKLE]) .ability(AbilityId.NORMALIZE) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/abilities/oblivious.test.ts b/test/abilities/oblivious.test.ts index e340d3c867d..dab8394edd0 100644 --- a/test/abilities/oblivious.test.ts +++ b/test/abilities/oblivious.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Oblivious", () => { .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/abilities/own_tempo.test.ts b/test/abilities/own_tempo.test.ts index 1d6d8aa76e5..869953b4e93 100644 --- a/test/abilities/own_tempo.test.ts +++ b/test/abilities/own_tempo.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Own Tempo", () => { .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/abilities/parental_bond.test.ts b/test/abilities/parental_bond.test.ts index f9bd703d751..fd914b86100 100644 --- a/test/abilities/parental_bond.test.ts +++ b/test/abilities/parental_bond.test.ts @@ -28,7 +28,7 @@ describe("Abilities - Parental Bond", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .disableCrits() + .criticalHits(false) .ability(AbilityId.PARENTAL_BOND) .enemySpecies(SpeciesId.SNORLAX) .enemyAbility(AbilityId.FUR_COAT) diff --git a/test/abilities/perish_body.test.ts b/test/abilities/perish_body.test.ts index 5b98aab5f6c..4852533816b 100644 --- a/test/abilities/perish_body.test.ts +++ b/test/abilities/perish_body.test.ts @@ -23,13 +23,13 @@ describe("Abilities - Perish Song", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .starterSpecies(SpeciesId.CURSOLA) .ability(AbilityId.PERISH_BODY) - .moveset([MoveId.SPLASH]) - .enemyMoveset([MoveId.AQUA_JET]); + .moveset(MoveId.SPLASH) + .enemyMoveset(MoveId.AQUA_JET); }); it("should trigger when hit with damaging move", async () => { diff --git a/test/abilities/protosynthesis.test.ts b/test/abilities/protosynthesis.test.ts index ba7bb5d084b..ef860fc0cd5 100644 --- a/test/abilities/protosynthesis.test.ts +++ b/test/abilities/protosynthesis.test.ts @@ -28,7 +28,7 @@ describe("Abilities - Protosynthesis", () => { .moveset([MoveId.SPLASH, MoveId.TACKLE]) .ability(AbilityId.PROTOSYNTHESIS) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/abilities/sand_spit.test.ts b/test/abilities/sand_spit.test.ts index 62d5d782fc5..2b519745649 100644 --- a/test/abilities/sand_spit.test.ts +++ b/test/abilities/sand_spit.test.ts @@ -24,7 +24,7 @@ describe("Abilities - Sand Spit", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .starterSpecies(SpeciesId.SILICOBRA) diff --git a/test/abilities/sap_sipper.test.ts b/test/abilities/sap_sipper.test.ts index 16559fb563f..c70730f0711 100644 --- a/test/abilities/sap_sipper.test.ts +++ b/test/abilities/sap_sipper.test.ts @@ -31,7 +31,7 @@ describe("Abilities - Sap Sipper", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .disableCrits() + .criticalHits(false) .ability(AbilityId.SAP_SIPPER) .enemySpecies(SpeciesId.RATTATA) .enemyAbility(AbilityId.SAP_SIPPER) diff --git a/test/abilities/seed_sower.test.ts b/test/abilities/seed_sower.test.ts index 4b649275d83..7a898f5bcf9 100644 --- a/test/abilities/seed_sower.test.ts +++ b/test/abilities/seed_sower.test.ts @@ -24,12 +24,12 @@ describe("Abilities - Seed Sower", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .starterSpecies(SpeciesId.ARBOLIVA) .ability(AbilityId.SEED_SOWER) - .moveset([MoveId.SPLASH]); + .moveset(MoveId.SPLASH); }); it("should trigger when hit with damaging move", async () => { diff --git a/test/abilities/serene_grace.test.ts b/test/abilities/serene_grace.test.ts index c5c12fe217e..2acf2981537 100644 --- a/test/abilities/serene_grace.test.ts +++ b/test/abilities/serene_grace.test.ts @@ -24,7 +24,7 @@ describe("Abilities - Serene Grace", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .disableCrits() + .criticalHits(false) .battleStyle("single") .ability(AbilityId.SERENE_GRACE) .moveset([MoveId.AIR_SLASH]) diff --git a/test/abilities/sheer_force.test.ts b/test/abilities/sheer_force.test.ts index b597afd8293..e90b8d08611 100644 --- a/test/abilities/sheer_force.test.ts +++ b/test/abilities/sheer_force.test.ts @@ -31,7 +31,7 @@ describe("Abilities - Sheer Force", () => { .enemySpecies(SpeciesId.ONIX) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset([MoveId.SPLASH]) - .disableCrits(); + .criticalHits(false); }); const SHEER_FORCE_MULT = 1.3; diff --git a/test/abilities/shell-armor.test.ts b/test/abilities/shell-armor.test.ts new file mode 100644 index 00000000000..ea0ed4a95dd --- /dev/null +++ b/test/abilities/shell-armor.test.ts @@ -0,0 +1,69 @@ +import type Move from "#app/data/moves/move"; +import Pokemon from "#app/field/pokemon"; +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; +import { StatusEffect } from "#enums/status-effect"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi, type MockInstance } from "vitest"; + +describe("Abilities - Shell Armor", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + let critSpy: MockInstance<(source: Pokemon, move: Move, simulated?: boolean) => boolean>; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .ability(AbilityId.SHELL_ARMOR) + .battleStyle("single") + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .statusEffect(StatusEffect.POISON); + + critSpy = vi.spyOn(Pokemon.prototype, "getCriticalHitResult"); + }); + + it("should prevent natural crit rolls from suceeding", async () => { + game.override.criticalHits(true); // force random crit rolls to always succeed + await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); + + game.move.use(MoveId.SPLASH); + await game.move.forceEnemyMove(MoveId.TACKLE); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(critSpy).toHaveReturnedWith(false); + }); + + it("should prevent guaranteed-crit moves from critting", async () => { + await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); + + game.move.use(MoveId.SPLASH); + await game.move.forceEnemyMove(MoveId.FLOWER_TRICK); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(critSpy).toHaveReturnedWith(false); + }); + + it("should block Merciless guaranteed crits", async () => { + game.override.enemyAbility(AbilityId.MERCILESS); + await game.classicMode.startBattle([SpeciesId.ABOMASNOW]); + + game.move.use(MoveId.SPLASH); + await game.move.forceEnemyMove(MoveId.TACKLE); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(critSpy).toHaveReturnedWith(false); + }); +}); diff --git a/test/abilities/stakeout.test.ts b/test/abilities/stakeout.test.ts index ba4325e0295..b3844bf17ca 100644 --- a/test/abilities/stakeout.test.ts +++ b/test/abilities/stakeout.test.ts @@ -27,7 +27,7 @@ describe("Abilities - Stakeout", () => { .moveset([MoveId.SPLASH, MoveId.SURF]) .ability(AbilityId.STAKEOUT) .battleStyle("single") - .disableCrits() + .criticalHits(false) .startingLevel(100) .enemyLevel(100) .enemySpecies(SpeciesId.SNORLAX) diff --git a/test/abilities/stall.test.ts b/test/abilities/stall.test.ts index 74fd2f67f83..e8ee23fb972 100644 --- a/test/abilities/stall.test.ts +++ b/test/abilities/stall.test.ts @@ -24,7 +24,7 @@ describe("Abilities - Stall", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.REGIELEKI) .enemyAbility(AbilityId.STALL) .enemyMoveset(MoveId.QUICK_ATTACK) diff --git a/test/abilities/storm_drain.test.ts b/test/abilities/storm_drain.test.ts index 3a6c0aba100..8eedf0c7ce8 100644 --- a/test/abilities/storm_drain.test.ts +++ b/test/abilities/storm_drain.test.ts @@ -27,7 +27,7 @@ describe("Abilities - Storm Drain", () => { .moveset([MoveId.SPLASH, MoveId.WATER_GUN]) .ability(AbilityId.BALL_FETCH) .battleStyle("double") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/abilities/thermal_exchange.test.ts b/test/abilities/thermal_exchange.test.ts index f27e6da1d3b..70af864d413 100644 --- a/test/abilities/thermal_exchange.test.ts +++ b/test/abilities/thermal_exchange.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Thermal Exchange", () => { .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/abilities/trace.test.ts b/test/abilities/trace.test.ts index 9bfd2f021c8..f17bec159ab 100644 --- a/test/abilities/trace.test.ts +++ b/test/abilities/trace.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Trace", () => { .moveset([MoveId.SPLASH]) .ability(AbilityId.TRACE) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/abilities/victory_star.test.ts b/test/abilities/victory_star.test.ts index a15beac8b2c..4742dd96aa6 100644 --- a/test/abilities/victory_star.test.ts +++ b/test/abilities/victory_star.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Victory Star", () => { game.override .moveset([MoveId.TACKLE, MoveId.SPLASH]) .battleStyle("double") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/abilities/vital_spirit.test.ts b/test/abilities/vital_spirit.test.ts index c32454e9d31..18764f94a6b 100644 --- a/test/abilities/vital_spirit.test.ts +++ b/test/abilities/vital_spirit.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Vital Spirit", () => { .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/abilities/volt_absorb.test.ts b/test/abilities/volt_absorb.test.ts index 707a889f951..6bea70ee2a4 100644 --- a/test/abilities/volt_absorb.test.ts +++ b/test/abilities/volt_absorb.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Volt Absorb", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single").disableCrits(); + game.override.battleStyle("single").criticalHits(false); }); it("does not activate when CHARGE is used", async () => { diff --git a/test/abilities/wandering_spirit.test.ts b/test/abilities/wandering_spirit.test.ts index 360eedda4c9..950cec6d27c 100644 --- a/test/abilities/wandering_spirit.test.ts +++ b/test/abilities/wandering_spirit.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Wandering Spirit", () => { .moveset([MoveId.SPLASH]) .ability(AbilityId.WANDERING_SPIRIT) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.TACKLE); diff --git a/test/abilities/water_bubble.test.ts b/test/abilities/water_bubble.test.ts index 412c4a25035..455a2e368c4 100644 --- a/test/abilities/water_bubble.test.ts +++ b/test/abilities/water_bubble.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Water Bubble", () => { .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/abilities/water_veil.test.ts b/test/abilities/water_veil.test.ts index e67287d250f..2df06ec1a21 100644 --- a/test/abilities/water_veil.test.ts +++ b/test/abilities/water_veil.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Water Veil", () => { .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/abilities/wimp_out.test.ts b/test/abilities/wimp_out.test.ts index 05c848a75c0..1db0b80fcd0 100644 --- a/test/abilities/wimp_out.test.ts +++ b/test/abilities/wimp_out.test.ts @@ -39,7 +39,7 @@ describe("Abilities - Wimp Out", () => { .enemyLevel(70) .moveset([MoveId.SPLASH, MoveId.FALSE_SWIPE, MoveId.ENDURE]) .enemyMoveset(MoveId.FALSE_SWIPE) - .disableCrits(); + .criticalHits(false); }); function confirmSwitch(): void { diff --git a/test/abilities/zen_mode.test.ts b/test/abilities/zen_mode.test.ts index 70d2f564218..5df2b3a6bc7 100644 --- a/test/abilities/zen_mode.test.ts +++ b/test/abilities/zen_mode.test.ts @@ -27,7 +27,7 @@ describe("Abilities - ZEN MODE", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyLevel(5) diff --git a/test/arena/grassy_terrain.test.ts b/test/arena/grassy_terrain.test.ts index 832f4400cf4..5f78d8f801d 100644 --- a/test/arena/grassy_terrain.test.ts +++ b/test/arena/grassy_terrain.test.ts @@ -23,7 +23,7 @@ describe("Arena - Grassy Terrain", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemyLevel(1) .enemySpecies(SpeciesId.SHUCKLE) .enemyAbility(AbilityId.STURDY) diff --git a/test/battle/ability_swap.test.ts b/test/battle/ability_swap.test.ts index 64446d703ac..3dd92576e3b 100644 --- a/test/battle/ability_swap.test.ts +++ b/test/battle/ability_swap.test.ts @@ -27,7 +27,7 @@ describe("Test Ability Swapping", () => { .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/battle/damage_calculation.test.ts b/test/battle/damage_calculation.test.ts index 555b3a9c554..19cdf6b9237 100644 --- a/test/battle/damage_calculation.test.ts +++ b/test/battle/damage_calculation.test.ts @@ -32,7 +32,7 @@ describe("Battle Mechanics - Damage Calculation", () => { .enemyMoveset(MoveId.SPLASH) .startingLevel(100) .enemyLevel(100) - .disableCrits() + .criticalHits(false) .moveset([MoveId.TACKLE, MoveId.DRAGON_RAGE, MoveId.FISSURE, MoveId.JUMP_KICK]); }); diff --git a/test/boss-pokemon.test.ts b/test/boss-pokemon.test.ts index fdfca9249f7..afcf5e8fa77 100644 --- a/test/boss-pokemon.test.ts +++ b/test/boss-pokemon.test.ts @@ -28,7 +28,7 @@ describe("Boss Pokemon / Shields", () => { game.override .battleStyle("single") .disableTrainerWaves() - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.RATTATA) .enemyMoveset(MoveId.SPLASH) .enemyHeldItems([]) diff --git a/test/data/status_effect.test.ts b/test/data/status_effect.test.ts index a5bfb33c023..e697ee3f1c7 100644 --- a/test/data/status_effect.test.ts +++ b/test/data/status_effect.test.ts @@ -356,7 +356,7 @@ describe("Status Effects", () => { .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); @@ -412,7 +412,7 @@ describe("Status Effects", () => { .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.NUZZLE) diff --git a/test/endless_boss.test.ts b/test/endless_boss.test.ts index 6814cf5e12a..d219cacf317 100644 --- a/test/endless_boss.test.ts +++ b/test/endless_boss.test.ts @@ -21,7 +21,7 @@ describe("Endless Boss", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.startingBiome(BiomeId.END).disableCrits(); + game.override.startingBiome(BiomeId.END).criticalHits(false); }); afterEach(() => { diff --git a/test/final_boss.test.ts b/test/final_boss.test.ts index d3fcd3214bb..071f83285e7 100644 --- a/test/final_boss.test.ts +++ b/test/final_boss.test.ts @@ -27,7 +27,7 @@ describe("Final Boss", () => { game.override .startingWave(FinalWave.Classic) .startingBiome(BiomeId.END) - .disableCrits() + .criticalHits(false) .enemyMoveset(MoveId.SPLASH) .moveset([MoveId.SPLASH, MoveId.WILL_O_WISP, MoveId.DRAGON_PULSE]) .startingLevel(10000); diff --git a/test/items/multi_lens.test.ts b/test/items/multi_lens.test.ts index 11e4c04ec21..8a3161970c0 100644 --- a/test/items/multi_lens.test.ts +++ b/test/items/multi_lens.test.ts @@ -28,7 +28,7 @@ describe("Items - Multi Lens", () => { .ability(AbilityId.BALL_FETCH) .startingHeldItems([{ name: "MULTI_LENS" }]) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.SNORLAX) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH) diff --git a/test/items/reviver_seed.test.ts b/test/items/reviver_seed.test.ts index 54927130869..f444a6eac66 100644 --- a/test/items/reviver_seed.test.ts +++ b/test/items/reviver_seed.test.ts @@ -29,7 +29,7 @@ describe("Items - Reviver Seed", () => { .moveset([MoveId.SPLASH, MoveId.TACKLE, MoveId.ENDURE]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .startingHeldItems([{ name: "REVIVER_SEED" }]) diff --git a/test/moves/alluring_voice.test.ts b/test/moves/alluring_voice.test.ts index 132f83cd4c1..ba096391f1b 100644 --- a/test/moves/alluring_voice.test.ts +++ b/test/moves/alluring_voice.test.ts @@ -26,7 +26,7 @@ describe("Moves - Alluring Voice", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.ICE_SCALES) .enemyMoveset(MoveId.HOWL) diff --git a/test/moves/assist.test.ts b/test/moves/assist.test.ts index bc51f8bd06a..27aa5528f17 100644 --- a/test/moves/assist.test.ts +++ b/test/moves/assist.test.ts @@ -30,7 +30,7 @@ describe("Moves - Assist", () => { game.override .ability(AbilityId.BALL_FETCH) .battleStyle("double") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyLevel(100) .enemyAbility(AbilityId.BALL_FETCH) diff --git a/test/moves/aurora_veil.test.ts b/test/moves/aurora_veil.test.ts index 98b490b0e32..b9ae79e4155 100644 --- a/test/moves/aurora_veil.test.ts +++ b/test/moves/aurora_veil.test.ts @@ -42,7 +42,7 @@ describe("Moves - Aurora Veil", () => { .enemyLevel(100) .enemySpecies(SpeciesId.MAGIKARP) .enemyMoveset(MoveId.AURORA_VEIL) - .disableCrits() + .criticalHits(false) .weather(WeatherType.HAIL); }); diff --git a/test/moves/baton_pass.test.ts b/test/moves/baton_pass.test.ts index a010636034a..1b1b0620133 100644 --- a/test/moves/baton_pass.test.ts +++ b/test/moves/baton_pass.test.ts @@ -31,7 +31,7 @@ describe("Moves - Baton Pass", () => { .moveset([MoveId.BATON_PASS, MoveId.NASTY_PLOT, MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH) - .disableCrits(); + .criticalHits(false); }); it("transfers all stat stages when player uses it", async () => { diff --git a/test/moves/burning_jealousy.test.ts b/test/moves/burning_jealousy.test.ts index 9e1898d9cd1..ce0a1ce57c9 100644 --- a/test/moves/burning_jealousy.test.ts +++ b/test/moves/burning_jealousy.test.ts @@ -26,7 +26,7 @@ describe("Moves - Burning Jealousy", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.ICE_SCALES) .enemyMoveset([MoveId.HOWL]) diff --git a/test/moves/camouflage.test.ts b/test/moves/camouflage.test.ts index 03364265179..6f28493b1e5 100644 --- a/test/moves/camouflage.test.ts +++ b/test/moves/camouflage.test.ts @@ -28,7 +28,7 @@ describe("Moves - Camouflage", () => { .moveset([MoveId.CAMOUFLAGE]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.REGIELEKI) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.PSYCHIC_TERRAIN); diff --git a/test/moves/chloroblast.test.ts b/test/moves/chloroblast.test.ts index cf5e791d0b9..6c790bac150 100644 --- a/test/moves/chloroblast.test.ts +++ b/test/moves/chloroblast.test.ts @@ -25,7 +25,7 @@ describe("Moves - Chloroblast", () => { game.override .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH); }); diff --git a/test/moves/copycat.test.ts b/test/moves/copycat.test.ts index e11a2262a43..8d135d5e2c7 100644 --- a/test/moves/copycat.test.ts +++ b/test/moves/copycat.test.ts @@ -30,7 +30,7 @@ describe("Moves - Copycat", () => { .moveset([MoveId.COPYCAT, MoveId.SPIKY_SHIELD, MoveId.SWORDS_DANCE, MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/moves/defog.test.ts b/test/moves/defog.test.ts index d42682c7f3f..17dc0613e9b 100644 --- a/test/moves/defog.test.ts +++ b/test/moves/defog.test.ts @@ -26,7 +26,7 @@ describe("Moves - Defog", () => { .moveset([MoveId.MIST, MoveId.SAFEGUARD, MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.SHUCKLE) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset([MoveId.DEFOG, MoveId.GROWL]); diff --git a/test/moves/doodle.test.ts b/test/moves/doodle.test.ts index d4d09b3a195..2dbd5c08c8f 100644 --- a/test/moves/doodle.test.ts +++ b/test/moves/doodle.test.ts @@ -27,7 +27,7 @@ describe("Moves - Doodle", () => { .moveset([MoveId.SPLASH, MoveId.DOODLE]) .ability(AbilityId.ADAPTABILITY) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/moves/double_team.test.ts b/test/moves/double_team.test.ts index 9a17a542f47..d1f6c5be3e4 100644 --- a/test/moves/double_team.test.ts +++ b/test/moves/double_team.test.ts @@ -26,7 +26,7 @@ describe("Moves - Double Team", () => { game.override .battleStyle("single") .moveset([MoveId.DOUBLE_TEAM]) - .disableCrits() + .criticalHits(false) .ability(AbilityId.BALL_FETCH) .enemySpecies(SpeciesId.SHUCKLE) .enemyAbility(AbilityId.BALL_FETCH) diff --git a/test/moves/dragon_rage.test.ts b/test/moves/dragon_rage.test.ts index f0be6748c7f..c5bed3377fa 100644 --- a/test/moves/dragon_rage.test.ts +++ b/test/moves/dragon_rage.test.ts @@ -51,7 +51,7 @@ describe("Moves - Dragon Rage", () => { }); it("ignores weaknesses", async () => { - game.override.disableCrits(); + game.override.criticalHits(false); vi.spyOn(enemyPokemon, "getTypes").mockReturnValue([PokemonType.DRAGON]); game.move.select(MoveId.DRAGON_RAGE); @@ -61,7 +61,7 @@ describe("Moves - Dragon Rage", () => { }); it("ignores resistances", async () => { - game.override.disableCrits(); + game.override.criticalHits(false); vi.spyOn(enemyPokemon, "getTypes").mockReturnValue([PokemonType.STEEL]); game.move.select(MoveId.DRAGON_RAGE); @@ -71,7 +71,7 @@ describe("Moves - Dragon Rage", () => { }); it("ignores SPATK stat stages", async () => { - game.override.disableCrits(); + game.override.criticalHits(false); partyPokemon.setStatStage(Stat.SPATK, 2); game.move.select(MoveId.DRAGON_RAGE); @@ -81,7 +81,7 @@ describe("Moves - Dragon Rage", () => { }); it("ignores stab", async () => { - game.override.disableCrits(); + game.override.criticalHits(false); vi.spyOn(partyPokemon, "getTypes").mockReturnValue([PokemonType.DRAGON]); game.move.select(MoveId.DRAGON_RAGE); @@ -100,7 +100,7 @@ describe("Moves - Dragon Rage", () => { }); it("ignores damage modification from abilities, for example ICE_SCALES", async () => { - game.override.disableCrits().enemyAbility(AbilityId.ICE_SCALES); + game.override.criticalHits(false).enemyAbility(AbilityId.ICE_SCALES); game.move.select(MoveId.DRAGON_RAGE); await game.phaseInterceptor.to(TurnEndPhase); diff --git a/test/moves/dynamax_cannon.test.ts b/test/moves/dynamax_cannon.test.ts index bf8a63f044c..3febf918de8 100644 --- a/test/moves/dynamax_cannon.test.ts +++ b/test/moves/dynamax_cannon.test.ts @@ -32,13 +32,13 @@ describe("Moves - Dynamax Cannon", () => { game.override .moveset(MoveId.DYNAMAX_CANNON) .startingLevel(200) - .levelCap(10) + .levelCap(100) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyMoveset(MoveId.SPLASH); - vi.spyOn(allMoves[MoveId.DYNAMAX_CANNON], "calculateBattlePower"); + vi.spyOn(dynamaxCannon, "calculateBattlePower"); }); it("should return 100 power against an enemy below level cap", async () => { @@ -54,7 +54,7 @@ describe("Moves - Dynamax Cannon", () => { }); it("should return 100 power against an enemy at level cap", async () => { - game.override.enemyLevel(10); + game.override.enemyLevel(100); await game.classicMode.startBattle([SpeciesId.ETERNATUS]); game.move.select(dynamaxCannon.id); diff --git a/test/moves/encore.test.ts b/test/moves/encore.test.ts index 120d065d528..772b7c96060 100644 --- a/test/moves/encore.test.ts +++ b/test/moves/encore.test.ts @@ -28,7 +28,7 @@ describe("Moves - Encore", () => { .moveset([MoveId.SPLASH, MoveId.ENCORE]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset([MoveId.SPLASH, MoveId.TACKLE]) diff --git a/test/moves/endure.test.ts b/test/moves/endure.test.ts index 799be22ba45..7738f7426fe 100644 --- a/test/moves/endure.test.ts +++ b/test/moves/endure.test.ts @@ -26,7 +26,7 @@ describe("Moves - Endure", () => { .ability(AbilityId.SKILL_LINK) .startingLevel(100) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.NO_GUARD) .enemyMoveset(MoveId.ENDURE); diff --git a/test/moves/entrainment.test.ts b/test/moves/entrainment.test.ts index 0a0cbd3b5f9..65586149492 100644 --- a/test/moves/entrainment.test.ts +++ b/test/moves/entrainment.test.ts @@ -26,7 +26,7 @@ describe("Moves - Entrainment", () => { .moveset([MoveId.SPLASH, MoveId.ENTRAINMENT]) .ability(AbilityId.ADAPTABILITY) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/moves/fairy_lock.test.ts b/test/moves/fairy_lock.test.ts index 74524d67b38..b9f854cdc93 100644 --- a/test/moves/fairy_lock.test.ts +++ b/test/moves/fairy_lock.test.ts @@ -27,7 +27,7 @@ describe("Moves - Fairy Lock", () => { .moveset([MoveId.FAIRY_LOCK, MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("double") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset([MoveId.SPLASH, MoveId.U_TURN]); diff --git a/test/moves/fake_out.test.ts b/test/moves/fake_out.test.ts index 95f69fe792e..4fc83e5aa07 100644 --- a/test/moves/fake_out.test.ts +++ b/test/moves/fake_out.test.ts @@ -27,7 +27,7 @@ describe("Moves - Fake Out", () => { .enemyMoveset(MoveId.SPLASH) .enemyLevel(10) .startingLevel(1) // prevent LevelUpPhase from happening - .disableCrits(); + .criticalHits(false); }); it("should only work the first turn a pokemon is sent out in a battle", async () => { diff --git a/test/moves/false_swipe.test.ts b/test/moves/false_swipe.test.ts index c98b76f1ef1..bf9c8307c22 100644 --- a/test/moves/false_swipe.test.ts +++ b/test/moves/false_swipe.test.ts @@ -27,7 +27,7 @@ describe("Moves - False Swipe", () => { .ability(AbilityId.BALL_FETCH) .startingLevel(1000) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/moves/fell_stinger.test.ts b/test/moves/fell_stinger.test.ts index d5081a3ba30..0737db9105f 100644 --- a/test/moves/fell_stinger.test.ts +++ b/test/moves/fell_stinger.test.ts @@ -30,7 +30,7 @@ describe("Moves - Fell Stinger", () => { .battleStyle("single") .moveset([MoveId.FELL_STINGER, MoveId.SALT_CURE, MoveId.BIND, MoveId.LEECH_SEED]) .startingLevel(50) - .disableCrits() + .criticalHits(false) .enemyAbility(AbilityId.STURDY) .enemySpecies(SpeciesId.HYPNO) .enemyMoveset(MoveId.SPLASH) diff --git a/test/moves/fissure.test.ts b/test/moves/fissure.test.ts index 231eab427e1..27031a7736d 100644 --- a/test/moves/fissure.test.ts +++ b/test/moves/fissure.test.ts @@ -30,9 +30,9 @@ describe("Moves - Fissure", () => { game.override .battleStyle("single") - .disableCrits() + .criticalHits(false) .starterSpecies(SpeciesId.SNORLAX) - .moveset([MoveId.FISSURE]) + .moveset(MoveId.FISSURE) .passiveAbility(AbilityId.BALL_FETCH) .startingLevel(100) .enemySpecies(SpeciesId.SNORLAX) diff --git a/test/moves/flame_burst.test.ts b/test/moves/flame_burst.test.ts index e994dc3e568..0a378df1077 100644 --- a/test/moves/flame_burst.test.ts +++ b/test/moves/flame_burst.test.ts @@ -38,12 +38,12 @@ describe("Moves - Flame Burst", () => { game.override .battleStyle("double") .moveset([MoveId.FLAME_BURST, MoveId.SPLASH]) - .disableCrits() + .criticalHits(false) .ability(AbilityId.UNNERVE) .startingWave(4) .enemySpecies(SpeciesId.SHUCKLE) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset([MoveId.SPLASH]); + .enemyMoveset(MoveId.SPLASH); }); it("inflicts damage to the target's ally equal to 1/16 of its max HP", async () => { diff --git a/test/moves/foresight.test.ts b/test/moves/foresight.test.ts index a30b4d6a444..96a341582f9 100644 --- a/test/moves/foresight.test.ts +++ b/test/moves/foresight.test.ts @@ -22,7 +22,7 @@ describe("Moves - Foresight", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.GASTLY) .enemyMoveset(MoveId.SPLASH) .enemyLevel(5) diff --git a/test/moves/forests_curse.test.ts b/test/moves/forests_curse.test.ts index 77fec5d277d..81ced674a33 100644 --- a/test/moves/forests_curse.test.ts +++ b/test/moves/forests_curse.test.ts @@ -26,7 +26,7 @@ describe("Moves - Forest's Curse", () => { .moveset([MoveId.FORESTS_CURSE, MoveId.TRICK_OR_TREAT]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/moves/fusion_bolt.test.ts b/test/moves/fusion_bolt.test.ts index cb3d75f56eb..c92a483a497 100644 --- a/test/moves/fusion_bolt.test.ts +++ b/test/moves/fusion_bolt.test.ts @@ -31,7 +31,7 @@ describe("Moves - Fusion Bolt", () => { .enemyMoveset(MoveId.SPLASH) .battleStyle("single") .startingWave(97) - .disableCrits(); + .criticalHits(false); }); it("should not make contact", async () => { diff --git a/test/moves/fusion_flare.test.ts b/test/moves/fusion_flare.test.ts index df6d390686f..c0df347fcce 100644 --- a/test/moves/fusion_flare.test.ts +++ b/test/moves/fusion_flare.test.ts @@ -31,7 +31,7 @@ describe("Moves - Fusion Flare", () => { .enemyMoveset(MoveId.REST) .battleStyle("single") .startingWave(97) - .disableCrits(); + .criticalHits(false); }); it("should thaw freeze status condition", async () => { diff --git a/test/moves/fusion_flare_bolt.test.ts b/test/moves/fusion_flare_bolt.test.ts index f9e55b72f6c..1967e9f12d1 100644 --- a/test/moves/fusion_flare_bolt.test.ts +++ b/test/moves/fusion_flare_bolt.test.ts @@ -40,7 +40,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { .enemyMoveset(MoveId.REST) .battleStyle("double") .startingWave(97) - .disableCrits(); + .criticalHits(false); vi.spyOn(fusionFlare, "calculateBattlePower"); vi.spyOn(fusionBolt, "calculateBattlePower"); diff --git a/test/moves/gigaton_hammer.test.ts b/test/moves/gigaton_hammer.test.ts index e8c9d316372..d80743f4ed0 100644 --- a/test/moves/gigaton_hammer.test.ts +++ b/test/moves/gigaton_hammer.test.ts @@ -29,7 +29,7 @@ describe("Moves - Gigaton Hammer", () => { .startingLevel(10) .enemyLevel(100) .enemyMoveset(MoveId.SPLASH) - .disableCrits(); + .criticalHits(false); }); it("can't be used two turns in a row", async () => { diff --git a/test/moves/glaive_rush.test.ts b/test/moves/glaive_rush.test.ts index 2aead405fb6..0b6f30da71a 100644 --- a/test/moves/glaive_rush.test.ts +++ b/test/moves/glaive_rush.test.ts @@ -24,7 +24,7 @@ describe("Moves - Glaive Rush", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset([MoveId.GLAIVE_RUSH]) diff --git a/test/moves/grudge.test.ts b/test/moves/grudge.test.ts index 63018a419e3..36030c88bad 100644 --- a/test/moves/grudge.test.ts +++ b/test/moves/grudge.test.ts @@ -26,7 +26,7 @@ describe("Moves - Grudge", () => { .moveset([MoveId.EMBER, MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.SHEDINJA) .enemyAbility(AbilityId.WONDER_GUARD) .enemyMoveset([MoveId.GRUDGE, MoveId.SPLASH]); diff --git a/test/moves/heal_block.test.ts b/test/moves/heal_block.test.ts index 39e8efea827..77a10927930 100644 --- a/test/moves/heal_block.test.ts +++ b/test/moves/heal_block.test.ts @@ -33,7 +33,7 @@ describe("Moves - Heal Block", () => { .ability(AbilityId.NO_GUARD) .enemyAbility(AbilityId.BALL_FETCH) .enemySpecies(SpeciesId.BLISSEY) - .disableCrits(); + .criticalHits(false); }); it("shouldn't stop damage from HP-drain attacks, just HP restoration", async () => { diff --git a/test/moves/instruct.test.ts b/test/moves/instruct.test.ts index 6167b6fc4dd..d12859301b6 100644 --- a/test/moves/instruct.test.ts +++ b/test/moves/instruct.test.ts @@ -42,7 +42,7 @@ describe("Moves - Instruct", () => { .passiveAbility(AbilityId.NO_GUARD) .enemyLevel(100) .startingLevel(100) - .disableCrits(); + .criticalHits(false); }); it("should repeat target's last used move", async () => { diff --git a/test/moves/jaw_lock.test.ts b/test/moves/jaw_lock.test.ts index e0815a4c3c9..4e103c14f98 100644 --- a/test/moves/jaw_lock.test.ts +++ b/test/moves/jaw_lock.test.ts @@ -36,7 +36,7 @@ describe("Moves - Jaw Lock", () => { .moveset([MoveId.JAW_LOCK, MoveId.SPLASH]) .startingLevel(100) .enemyLevel(100) - .disableCrits(); + .criticalHits(false); }); it("should trap the move's user and target", async () => { diff --git a/test/moves/lash_out.test.ts b/test/moves/lash_out.test.ts index c0c0881b340..33a58914978 100644 --- a/test/moves/lash_out.test.ts +++ b/test/moves/lash_out.test.ts @@ -25,7 +25,7 @@ describe("Moves - Lash Out", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.FUR_COAT) .enemyMoveset([MoveId.GROWL]) diff --git a/test/moves/last-resort.test.ts b/test/moves/last-resort.test.ts index 3b57bc5cf61..3cb98a0cd92 100644 --- a/test/moves/last-resort.test.ts +++ b/test/moves/last-resort.test.ts @@ -35,7 +35,7 @@ describe("Moves - Last Resort", () => { game.override .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/moves/last_respects.test.ts b/test/moves/last_respects.test.ts index 08256d3ebfb..14aa5ad3309 100644 --- a/test/moves/last_respects.test.ts +++ b/test/moves/last_respects.test.ts @@ -32,7 +32,7 @@ describe("Moves - Last Respects", () => { basePower = move.power; game.override .battleStyle("single") - .disableCrits() + .criticalHits(false) .moveset([MoveId.LAST_RESPECTS, MoveId.EXPLOSION, MoveId.LUNAR_DANCE]) .ability(AbilityId.BALL_FETCH) .enemyAbility(AbilityId.BALL_FETCH) diff --git a/test/moves/light_screen.test.ts b/test/moves/light_screen.test.ts index 404d30920c7..8c436aacf6a 100644 --- a/test/moves/light_screen.test.ts +++ b/test/moves/light_screen.test.ts @@ -41,7 +41,7 @@ describe("Moves - Light Screen", () => { .enemyLevel(100) .enemySpecies(SpeciesId.MAGIKARP) .enemyMoveset(MoveId.LIGHT_SCREEN) - .disableCrits(); + .criticalHits(false); }); it("reduces damage of special attacks by half in a single battle", async () => { diff --git a/test/moves/lucky_chant.test.ts b/test/moves/lucky_chant.test.ts index 58944027398..a57d231134b 100644 --- a/test/moves/lucky_chant.test.ts +++ b/test/moves/lucky_chant.test.ts @@ -1,11 +1,10 @@ import { AbilityId } from "#enums/ability-id"; -import { BattlerTagType } from "#app/enums/battler-tag-type"; +import { BattlerTagType } from "#enums/battler-tag-type"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; -import { BerryPhase } from "#app/phases/berry-phase"; -import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import GameManager from "#test/testUtils/gameManager"; +import { BattlerIndex } from "#enums/battler-index"; describe("Moves - Lucky Chant", () => { let phaserGame: Phaser.Game; @@ -29,74 +28,91 @@ describe("Moves - Lucky Chant", () => { .moveset([MoveId.LUCKY_CHANT, MoveId.SPLASH, MoveId.FOLLOW_ME]) .enemySpecies(SpeciesId.SNORLAX) .enemyAbility(AbilityId.INSOMNIA) - .enemyMoveset([MoveId.FLOWER_TRICK]) + .enemyMoveset(MoveId.TACKLE) .startingLevel(100) .enemyLevel(100); }); - it("should prevent critical hits from moves", async () => { + it("should prevent random critical hits from moves", async () => { + game.override.criticalHits(true); await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const playerPokemon = game.scene.getPlayerPokemon()!; + const charizard = game.scene.getPlayerPokemon()!; + expect(charizard).toBeDefined(); + const critSpy = vi.spyOn(charizard, "getCriticalHitResult"); // called on the defender (ie player) game.move.select(MoveId.SPLASH); + await game.phaseInterceptor.to("TurnEndPhase"); - await game.phaseInterceptor.to(TurnEndPhase); - - const firstTurnDamage = playerPokemon.getMaxHp() - playerPokemon.hp; + expect(critSpy).toHaveLastReturnedWith(true); + const firstTurnDamage = charizard.getInverseHp(); game.move.select(MoveId.LUCKY_CHANT); + await game.phaseInterceptor.to("TurnEndPhase"); - await game.phaseInterceptor.to(BerryPhase, false); + expect(critSpy).toHaveLastReturnedWith(false); + const secondTurnDamage = charizard.getInverseHp() - firstTurnDamage; + expect(secondTurnDamage).toBeLessThan(firstTurnDamage); + }); - const secondTurnDamage = playerPokemon.getMaxHp() - playerPokemon.hp - firstTurnDamage; + it("should prevent guaranteed critical hits from moves", async () => { + game.override.enemyMoveset(MoveId.FLOWER_TRICK); + await game.classicMode.startBattle([SpeciesId.CHARIZARD]); + + const charizard = game.scene.getPlayerPokemon()!; + expect(charizard).toBeDefined(); + + game.move.select(MoveId.SPLASH); + await game.phaseInterceptor.to("TurnEndPhase"); + + const firstTurnDamage = charizard.getInverseHp(); + + game.move.select(MoveId.LUCKY_CHANT); + await game.phaseInterceptor.to("TurnEndPhase"); + + const secondTurnDamage = charizard.getInverseHp() - firstTurnDamage; expect(secondTurnDamage).toBeLessThan(firstTurnDamage); }); it("should prevent critical hits against the user's ally", async () => { - game.override.battleStyle("double"); + game.override.battleStyle("double").criticalHits(true); await game.classicMode.startBattle([SpeciesId.CHARIZARD, SpeciesId.BLASTOISE]); - const playerPokemon = game.scene.getPlayerField(); + const charizard = game.scene.getPlayerPokemon()!; + expect(charizard).toBeDefined(); - game.move.select(MoveId.FOLLOW_ME); - game.move.select(MoveId.SPLASH, 1); + game.move.select(MoveId.FOLLOW_ME, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); + await game.phaseInterceptor.to("TurnEndPhase"); - await game.phaseInterceptor.to(TurnEndPhase); + const firstTurnDamage = charizard.getInverseHp(); - const firstTurnDamage = playerPokemon[0].getMaxHp() - playerPokemon[0].hp; + game.move.select(MoveId.FOLLOW_ME, BattlerIndex.PLAYER); + game.move.select(MoveId.LUCKY_CHANT, BattlerIndex.PLAYER_2); - game.move.select(MoveId.FOLLOW_ME); - game.move.select(MoveId.LUCKY_CHANT, 1); + await game.phaseInterceptor.to("TurnEndPhase"); - await game.phaseInterceptor.to(BerryPhase, false); - - const secondTurnDamage = playerPokemon[0].getMaxHp() - playerPokemon[0].hp - firstTurnDamage; + const secondTurnDamage = charizard.getInverseHp() - firstTurnDamage; expect(secondTurnDamage).toBeLessThan(firstTurnDamage); }); it("should prevent critical hits from field effects", async () => { - game.override.enemyMoveset([MoveId.TACKLE]); - await game.classicMode.startBattle([SpeciesId.CHARIZARD]); - const playerPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; - - enemyPokemon.addTag(BattlerTagType.ALWAYS_CRIT, 2, MoveId.NONE, 0); + const charizard = game.field.getPlayerPokemon(); + const snorlax = game.field.getEnemyPokemon(); + snorlax.addTag(BattlerTagType.ALWAYS_CRIT, 2, MoveId.NONE, 0); game.move.select(MoveId.SPLASH); + await game.phaseInterceptor.to("TurnEndPhase"); - await game.phaseInterceptor.to(TurnEndPhase); - - const firstTurnDamage = playerPokemon.getMaxHp() - playerPokemon.hp; + const firstTurnDamage = charizard.getInverseHp(); game.move.select(MoveId.LUCKY_CHANT); + await game.phaseInterceptor.to("TurnEndPhase"); - await game.phaseInterceptor.to(BerryPhase, false); - - const secondTurnDamage = playerPokemon.getMaxHp() - playerPokemon.hp - firstTurnDamage; + const secondTurnDamage = charizard.getInverseHp() - firstTurnDamage; expect(secondTurnDamage).toBeLessThan(firstTurnDamage); }); }); diff --git a/test/moves/magic_coat.test.ts b/test/moves/magic_coat.test.ts index 7bbd4779da6..566c206f1ba 100644 --- a/test/moves/magic_coat.test.ts +++ b/test/moves/magic_coat.test.ts @@ -31,7 +31,7 @@ describe("Moves - Magic Coat", () => { game.override .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.MAGIC_COAT); diff --git a/test/moves/magnet_rise.test.ts b/test/moves/magnet_rise.test.ts index 496c0609411..d8fc6a74225 100644 --- a/test/moves/magnet_rise.test.ts +++ b/test/moves/magnet_rise.test.ts @@ -28,7 +28,7 @@ describe("Moves - Magnet Rise", () => { .starterSpecies(SpeciesId.MAGNEZONE) .enemySpecies(SpeciesId.RATTATA) .enemyMoveset(MoveId.DRILL_RUN) - .disableCrits() + .criticalHits(false) .enemyLevel(1) .moveset([moveToUse, MoveId.SPLASH, MoveId.GRAVITY, MoveId.BATON_PASS]); }); diff --git a/test/moves/metal_burst.test.ts b/test/moves/metal_burst.test.ts index bcb9d938985..4d07d59c16d 100644 --- a/test/moves/metal_burst.test.ts +++ b/test/moves/metal_burst.test.ts @@ -28,7 +28,7 @@ describe("Moves - Metal Burst", () => { .ability(AbilityId.PURE_POWER) .startingLevel(10) .battleStyle("double") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.PICHU) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.TACKLE); diff --git a/test/moves/miracle_eye.test.ts b/test/moves/miracle_eye.test.ts index 1238ae6a650..9281931621f 100644 --- a/test/moves/miracle_eye.test.ts +++ b/test/moves/miracle_eye.test.ts @@ -23,7 +23,7 @@ describe("Moves - Miracle Eye", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.UMBREON) .enemyMoveset(MoveId.SPLASH) .enemyLevel(5) diff --git a/test/moves/mirror_move.test.ts b/test/moves/mirror_move.test.ts index fe40402e5a2..03de93c56dc 100644 --- a/test/moves/mirror_move.test.ts +++ b/test/moves/mirror_move.test.ts @@ -28,7 +28,7 @@ describe("Moves - Mirror Move", () => { .moveset([MoveId.MIRROR_MOVE, MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/moves/mist.test.ts b/test/moves/mist.test.ts index ea4eb95a1eb..4191aae0a46 100644 --- a/test/moves/mist.test.ts +++ b/test/moves/mist.test.ts @@ -26,7 +26,7 @@ describe("Moves - Mist", () => { .moveset([MoveId.MIST, MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("double") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.SNORLAX) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.GROWL); diff --git a/test/moves/moongeist_beam.test.ts b/test/moves/moongeist_beam.test.ts index 28bd3f70daa..367fe67cff5 100644 --- a/test/moves/moongeist_beam.test.ts +++ b/test/moves/moongeist_beam.test.ts @@ -27,7 +27,7 @@ describe("Moves - Moongeist Beam", () => { .ability(AbilityId.BALL_FETCH) .startingLevel(200) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.STURDY) .enemyMoveset(MoveId.SPLASH); diff --git a/test/moves/multi_target.test.ts b/test/moves/multi_target.test.ts index 139b669da7b..bc6b24c474d 100644 --- a/test/moves/multi_target.test.ts +++ b/test/moves/multi_target.test.ts @@ -24,7 +24,7 @@ describe("Multi-target damage reduction", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .disableCrits() + .criticalHits(false) .battleStyle("double") .enemyLevel(100) .startingLevel(100) diff --git a/test/moves/order_up.test.ts b/test/moves/order_up.test.ts index adf37c0719e..fc505809fe6 100644 --- a/test/moves/order_up.test.ts +++ b/test/moves/order_up.test.ts @@ -30,7 +30,7 @@ describe("Moves - Order Up", () => { .moveset(MoveId.ORDER_UP) .ability(AbilityId.COMMANDER) .battleStyle("double") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.SNORLAX) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH) diff --git a/test/moves/pollen_puff.test.ts b/test/moves/pollen_puff.test.ts index e6dcd2c41d0..cd0a138e96c 100644 --- a/test/moves/pollen_puff.test.ts +++ b/test/moves/pollen_puff.test.ts @@ -26,7 +26,7 @@ describe("Moves - Pollen Puff", () => { .moveset([MoveId.POLLEN_PUFF]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/moves/psycho_shift.test.ts b/test/moves/psycho_shift.test.ts index f92eea5fd38..e4eb2bd8ef6 100644 --- a/test/moves/psycho_shift.test.ts +++ b/test/moves/psycho_shift.test.ts @@ -27,7 +27,7 @@ describe("Moves - Psycho Shift", () => { .ability(AbilityId.BALL_FETCH) .statusEffect(StatusEffect.POISON) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyLevel(20) .enemyAbility(AbilityId.SYNCHRONIZE) diff --git a/test/moves/reflect.test.ts b/test/moves/reflect.test.ts index 5e10de42a3c..ef8c80070bf 100644 --- a/test/moves/reflect.test.ts +++ b/test/moves/reflect.test.ts @@ -41,7 +41,7 @@ describe("Moves - Reflect", () => { .enemyLevel(100) .enemySpecies(SpeciesId.MAGIKARP) .enemyMoveset(MoveId.REFLECT) - .disableCrits(); + .criticalHits(false); }); it("reduces damage of physical attacks by half in a single battle", async () => { diff --git a/test/moves/reflect_type.test.ts b/test/moves/reflect_type.test.ts index 86c70ed62f1..0915069764c 100644 --- a/test/moves/reflect_type.test.ts +++ b/test/moves/reflect_type.test.ts @@ -22,7 +22,11 @@ describe("Moves - Reflect Type", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.ability(AbilityId.BALL_FETCH).battleStyle("single").disableCrits().enemyAbility(AbilityId.BALL_FETCH); + game.override + .ability(AbilityId.BALL_FETCH) + .battleStyle("single") + .criticalHits(false) + .enemyAbility(AbilityId.BALL_FETCH); }); it("will make the user Normal/Grass if targetting a typeless Pokemon affected by Forest's Curse", async () => { diff --git a/test/moves/retaliate.test.ts b/test/moves/retaliate.test.ts index 16261c71dc3..dd5029a7c83 100644 --- a/test/moves/retaliate.test.ts +++ b/test/moves/retaliate.test.ts @@ -32,7 +32,7 @@ describe("Moves - Retaliate", () => { .enemyLevel(100) .moveset([MoveId.RETALIATE, MoveId.SPLASH]) .startingLevel(80) - .disableCrits(); + .criticalHits(false); }); it("increases power if ally died previous turn", async () => { diff --git a/test/moves/revival_blessing.test.ts b/test/moves/revival_blessing.test.ts index f22c0467378..1f2ba869e4f 100644 --- a/test/moves/revival_blessing.test.ts +++ b/test/moves/revival_blessing.test.ts @@ -28,7 +28,7 @@ describe("Moves - Revival Blessing", () => { .moveset([MoveId.SPLASH, MoveId.REVIVAL_BLESSING, MoveId.MEMENTO]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/moves/role_play.test.ts b/test/moves/role_play.test.ts index 3c3f0afb1a3..cfa38ed38b7 100644 --- a/test/moves/role_play.test.ts +++ b/test/moves/role_play.test.ts @@ -26,7 +26,7 @@ describe("Moves - Role Play", () => { .moveset([MoveId.SPLASH, MoveId.ROLE_PLAY]) .ability(AbilityId.ADAPTABILITY) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/moves/rollout.test.ts b/test/moves/rollout.test.ts index b9faf438ae5..9639a2e5408 100644 --- a/test/moves/rollout.test.ts +++ b/test/moves/rollout.test.ts @@ -24,7 +24,7 @@ describe("Moves - Rollout", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .disableCrits() + .criticalHits(false) .battleStyle("single") .starterSpecies(SpeciesId.RATTATA) .ability(AbilityId.BALL_FETCH) diff --git a/test/moves/round.test.ts b/test/moves/round.test.ts index 630137b7dce..8e07a819131 100644 --- a/test/moves/round.test.ts +++ b/test/moves/round.test.ts @@ -28,7 +28,7 @@ describe("Moves - Round", () => { .moveset([MoveId.SPLASH, MoveId.ROUND]) .ability(AbilityId.BALL_FETCH) .battleStyle("double") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset([MoveId.SPLASH, MoveId.ROUND]) diff --git a/test/moves/scale_shot.test.ts b/test/moves/scale_shot.test.ts index a5872579003..e2c86091378 100644 --- a/test/moves/scale_shot.test.ts +++ b/test/moves/scale_shot.test.ts @@ -31,7 +31,7 @@ describe("Moves - Scale Shot", () => { game.override .moveset([MoveId.SCALE_SHOT]) .battleStyle("single") - .disableCrits() + .criticalHits(false) .ability(AbilityId.NO_GUARD) .passiveAbility(AbilityId.SKILL_LINK) .enemyMoveset(MoveId.SPLASH) diff --git a/test/moves/secret_power.test.ts b/test/moves/secret_power.test.ts index 39498782b58..adb91162ae8 100644 --- a/test/moves/secret_power.test.ts +++ b/test/moves/secret_power.test.ts @@ -33,7 +33,7 @@ describe("Moves - Secret Power", () => { .moveset([MoveId.SECRET_POWER]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyLevel(60) .enemyAbility(AbilityId.BALL_FETCH); diff --git a/test/moves/simple_beam.test.ts b/test/moves/simple_beam.test.ts index 94609c3c4ac..f8549944ed9 100644 --- a/test/moves/simple_beam.test.ts +++ b/test/moves/simple_beam.test.ts @@ -25,7 +25,7 @@ describe("Moves - Simple Beam", () => { .moveset([MoveId.SPLASH, MoveId.SIMPLE_BEAM]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/moves/sketch.test.ts b/test/moves/sketch.test.ts index c6fb7b4a32a..5e9ce9a9e84 100644 --- a/test/moves/sketch.test.ts +++ b/test/moves/sketch.test.ts @@ -30,7 +30,7 @@ describe("Moves - Sketch", () => { game.override .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.SHUCKLE) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/moves/skill_swap.test.ts b/test/moves/skill_swap.test.ts index c4fb6005e28..7c2e6f5fd0a 100644 --- a/test/moves/skill_swap.test.ts +++ b/test/moves/skill_swap.test.ts @@ -26,7 +26,7 @@ describe("Moves - Skill Swap", () => { .moveset([MoveId.SPLASH, MoveId.SKILL_SWAP]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/moves/sleep_talk.test.ts b/test/moves/sleep_talk.test.ts index 1d9aec77ea2..84e9d509a03 100644 --- a/test/moves/sleep_talk.test.ts +++ b/test/moves/sleep_talk.test.ts @@ -29,7 +29,7 @@ describe("Moves - Sleep Talk", () => { .statusEffect(StatusEffect.SLEEP) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH) diff --git a/test/moves/spectral_thief.test.ts b/test/moves/spectral_thief.test.ts index 808e9174caf..e7b19eda506 100644 --- a/test/moves/spectral_thief.test.ts +++ b/test/moves/spectral_thief.test.ts @@ -29,7 +29,8 @@ describe("Moves - Spectral Thief", () => { .enemyMoveset(MoveId.SPLASH) .enemyAbility(AbilityId.BALL_FETCH) .moveset([MoveId.SPECTRAL_THIEF, MoveId.SPLASH]) - .ability(AbilityId.BALL_FETCH).disableCrits; + .ability(AbilityId.BALL_FETCH) + .criticalHits(false); }); it("should steal max possible positive stat changes and ignore negative ones.", async () => { diff --git a/test/moves/struggle.test.ts b/test/moves/struggle.test.ts index 2175dc557b3..e1373b29d33 100644 --- a/test/moves/struggle.test.ts +++ b/test/moves/struggle.test.ts @@ -25,7 +25,7 @@ describe("Moves - Struggle", () => { .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/moves/synchronoise.test.ts b/test/moves/synchronoise.test.ts index 176137c8180..9068a40693b 100644 --- a/test/moves/synchronoise.test.ts +++ b/test/moves/synchronoise.test.ts @@ -26,7 +26,7 @@ describe("Moves - Synchronoise", () => { .moveset([MoveId.SYNCHRONOISE]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/moves/tackle.test.ts b/test/moves/tackle.test.ts index 96faa27ad38..f3c0db85a39 100644 --- a/test/moves/tackle.test.ts +++ b/test/moves/tackle.test.ts @@ -31,7 +31,7 @@ describe("Moves - Tackle", () => { .startingWave(97) .moveset([moveToUse]) .enemyMoveset(MoveId.GROWTH) - .disableCrits(); + .criticalHits(false); }); it("TACKLE against ghost", async () => { diff --git a/test/moves/tar_shot.test.ts b/test/moves/tar_shot.test.ts index fefd1a30e1e..8d5ea4b3582 100644 --- a/test/moves/tar_shot.test.ts +++ b/test/moves/tar_shot.test.ts @@ -30,7 +30,7 @@ describe("Moves - Tar Shot", () => { .enemySpecies(SpeciesId.TANGELA) .enemyLevel(1000) .moveset([MoveId.TAR_SHOT, MoveId.FIRE_PUNCH]) - .disableCrits(); + .criticalHits(false); }); it("lowers the target's Speed stat by one stage and doubles the effectiveness of Fire-type moves used on the target", async () => { diff --git a/test/moves/tera_blast.test.ts b/test/moves/tera_blast.test.ts index 3372fd21539..fbebd428cfd 100644 --- a/test/moves/tera_blast.test.ts +++ b/test/moves/tera_blast.test.ts @@ -35,7 +35,7 @@ describe("Moves - Tera Blast", () => { game.override .battleStyle("single") - .disableCrits() + .criticalHits(false) .starterSpecies(SpeciesId.FEEBAS) .moveset([MoveId.TERA_BLAST]) .ability(AbilityId.BALL_FETCH) diff --git a/test/moves/trick_or_treat.test.ts b/test/moves/trick_or_treat.test.ts index 366c6ee60fe..861115e2503 100644 --- a/test/moves/trick_or_treat.test.ts +++ b/test/moves/trick_or_treat.test.ts @@ -26,7 +26,7 @@ describe("Moves - Trick Or Treat", () => { .moveset([MoveId.FORESTS_CURSE, MoveId.TRICK_OR_TREAT]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/moves/u_turn.test.ts b/test/moves/u_turn.test.ts index 5d4cad3a5ad..a2e29899ad8 100644 --- a/test/moves/u_turn.test.ts +++ b/test/moves/u_turn.test.ts @@ -29,7 +29,7 @@ describe("Moves - U-turn", () => { .startingWave(97) .moveset([MoveId.U_TURN]) .enemyMoveset(MoveId.SPLASH) - .disableCrits(); + .criticalHits(false); }); it("triggers regenerator a single time when a regenerator user switches out with u-turn", async () => { diff --git a/test/moves/upper_hand.test.ts b/test/moves/upper_hand.test.ts index e3d490ba6fa..fe38e75cf9a 100644 --- a/test/moves/upper_hand.test.ts +++ b/test/moves/upper_hand.test.ts @@ -27,7 +27,7 @@ describe("Moves - Upper Hand", () => { .moveset(MoveId.UPPER_HAND) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.QUICK_ATTACK) diff --git a/test/moves/will_o_wisp.test.ts b/test/moves/will_o_wisp.test.ts index 40495009d2a..336e84129c5 100644 --- a/test/moves/will_o_wisp.test.ts +++ b/test/moves/will_o_wisp.test.ts @@ -27,7 +27,7 @@ describe("Moves - Will-O-Wisp", () => { .moveset([MoveId.WILL_O_WISP, MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/phases/form-change-phase.test.ts b/test/phases/form-change-phase.test.ts index 99c072bdafe..b025f72f5e4 100644 --- a/test/phases/form-change-phase.test.ts +++ b/test/phases/form-change-phase.test.ts @@ -28,7 +28,7 @@ describe("Form Change Phase", () => { .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH); diff --git a/test/phases/frenzy-move-reset.test.ts b/test/phases/frenzy-move-reset.test.ts index 878c58d8666..9c59e1da968 100644 --- a/test/phases/frenzy-move-reset.test.ts +++ b/test/phases/frenzy-move-reset.test.ts @@ -26,7 +26,7 @@ describe("Frenzy Move Reset", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .disableCrits() + .criticalHits(false) .starterSpecies(SpeciesId.MAGIKARP) .moveset(MoveId.THRASH) .statusEffect(StatusEffect.PARALYSIS) diff --git a/test/phases/game-over-phase.test.ts b/test/phases/game-over-phase.test.ts index d45330697fc..008f9fb68e8 100644 --- a/test/phases/game-over-phase.test.ts +++ b/test/phases/game-over-phase.test.ts @@ -28,7 +28,7 @@ describe("Game Over Phase", () => { .moveset([MoveId.MEMENTO, MoveId.ICE_BEAM, MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .disableCrits() + .criticalHits(false) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH) .startingWave(200) diff --git a/test/testUtils/gameManagerUtils.ts b/test/testUtils/gameManagerUtils.ts index d582f8c04e3..eda3921e9e0 100644 --- a/test/testUtils/gameManagerUtils.ts +++ b/test/testUtils/gameManagerUtils.ts @@ -97,7 +97,7 @@ export function waitUntil(truth): Promise { }); } -/** Get the index of `move` from the moveset of the pokemon on the player's field at location `pokemonIndex` */ +/** Get the index of `move` from the moveset of the pokemon on the player's field at location `pokemonIndex`. */ export function getMovePosition(scene: BattleScene, pokemonIndex: 0 | 1, move: MoveId): number { const playerPokemon = scene.getPlayerField()[pokemonIndex]; const moveSet = playerPokemon.getMoveset(); diff --git a/test/testUtils/helpers/dailyModeHelper.ts b/test/testUtils/helpers/dailyModeHelper.ts index 8ee03ce5f89..4672d4dc787 100644 --- a/test/testUtils/helpers/dailyModeHelper.ts +++ b/test/testUtils/helpers/dailyModeHelper.ts @@ -16,8 +16,9 @@ export class DailyModeHelper extends GameManagerHelper { /** * Runs the daily game to the summon phase. * @returns A promise that resolves when the summon phase is reached. + * @remarks Please do not use for starting normal battles - use {@linkcode startBattle} instead */ - async runToSummon() { + async runToSummon(): Promise { await this.game.runToTitle(); if (this.game.override.disableShinies) { @@ -45,7 +46,7 @@ export class DailyModeHelper extends GameManagerHelper { * Transitions to the start of a battle. * @returns A promise that resolves when the battle is started. */ - async startBattle() { + async startBattle(): Promise { await this.runToSummon(); if (this.game.scene.battleStyle === BattleStyle.SWITCH) { diff --git a/test/testUtils/helpers/overridesHelper.ts b/test/testUtils/helpers/overridesHelper.ts index 9869c7450e2..3bf0fbbda47 100644 --- a/test/testUtils/helpers/overridesHelper.ts +++ b/test/testUtils/helpers/overridesHelper.ts @@ -243,12 +243,15 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Override each wave to not have critical hits + * Force random critical hit rolls to always or never suceed. + * @param crits - `true` to guarantee crits on eligible moves, `false` to force rolls to fail, `null` to disable override + * @remarks This does not bypass effects that guarantee or block critical hits; it merely mocks the chance-based rolls. * @returns `this` */ - public disableCrits(): this { - vi.spyOn(Overrides, "NEVER_CRIT_OVERRIDE", "get").mockReturnValue(true); - this.log("Critical hits are disabled!"); + public criticalHits(crits: boolean | null): this { + vi.spyOn(Overrides, "CRITICAL_HIT_OVERRIDE", "get").mockReturnValue(crits); + const freq = crits === true ? "always" : crits === false ? "never" : "randomly"; + this.log(`Critical hit rolls set to ${freq} succeed!`); return this; } diff --git a/test/testUtils/phaseInterceptor.ts b/test/testUtils/phaseInterceptor.ts index 34fba2c145d..9d046fc85ba 100644 --- a/test/testUtils/phaseInterceptor.ts +++ b/test/testUtils/phaseInterceptor.ts @@ -210,7 +210,7 @@ export default class PhaseInterceptor { /** * Method to transition to a target phase. * @param phaseTo - The phase to transition to. - * @param runTarget - Whether or not to run the target phase. + * @param runTarget - Whether or not to run the target phase; default `true`. * @returns A promise that resolves when the transition is complete. */ async to(phaseTo: PhaseInterceptorPhase, runTarget = true): Promise { @@ -439,7 +439,7 @@ export default class PhaseInterceptor { * @param mode - The mode of the UI. * @param callback - The callback function to execute. * @param expireFn - The function to determine if the prompt has expired. - * @param awaitingActionInput + * @param awaitingActionInput - ???; default `false` */ addToNextPrompt( phaseTarget: string, From e3108603e36f6f8c10100c8adb6619c3f623f755 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Mon, 16 Jun 2025 08:57:51 -0400 Subject: [PATCH 250/262] [Refactor] Rework evolution conditions and descriptions (#5679) * Refactor evo conditions and descriptions * Fix test * Fix Shedinja * Simplify Gimmighoul evolution * Primeape and Stantler evolve by using their move 10 times * Basculin white stripe evolves by taking 294 recoil damage * Primeape and Stantler use modifiers for tracking * Basculin uses modifier too * Remove evo count from pokemon data * No more evo counter data, Gallade/Froslass * Fix allmoves import * Clamperl * Struggle shouldn't count for Basc recoil * Change to nicer type * Apply Benjie's suggestions Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> * Address formatting * Undo new evolution changes * Remove unused imports * Fix speciesid * Fixed up descriptions a little * Change a key name * Fix Gimmighoul * Apply Biome * Apply Biome unsafe fixes * Review suggestions - Convert `EvoCondKey` enum to `const` object - Use early returns in `SpeciesEvolutionCondition#description` and `SpeciesFormEvolution#description` - Replace `!!x.find` with `x.some` and `y.indexOf() > -1` with `y.includes()` - Implement `coerceArray` - Fix Shelmet evolution condition checking for Shelmet and not Karrablast - Remove unnecessary type casting in `battle-scene.ts` * Remove leftover enforce func loop * Fix circular imports issue - `getPokemonSpecies` moved to `src/utils/pokemon-utils.ts` - `allSpecies` moved to `src/data/data-lists.ts` --------- Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/battle-scene.ts | 10 +- src/data/balance/pokemon-evolutions.ts | 665 +++++++++--------- src/data/challenge.ts | 3 +- src/data/daily-run.ts | 3 +- src/data/data-lists.ts | 2 + src/data/egg.ts | 2 +- .../encounters/absolute-avarice-encounter.ts | 2 +- .../an-offer-you-cant-refuse-encounter.ts | 2 +- .../encounters/clowning-around-encounter.ts | 2 +- .../encounters/dancing-lessons-encounter.ts | 2 +- .../encounters/dark-deal-encounter.ts | 2 +- .../encounters/delibirdy-encounter.ts | 2 +- .../encounters/fiery-fallout-encounter.ts | 2 +- .../encounters/fun-and-games-encounter.ts | 2 +- .../global-trade-system-encounter.ts | 3 +- .../encounters/lost-at-sea-encounter.ts | 2 +- .../encounters/mysterious-chest-encounter.ts | 2 +- .../encounters/safari-zone-encounter.ts | 2 +- .../slumbering-snorlax-encounter.ts | 2 +- .../the-expert-pokemon-breeder-encounter.ts | 2 +- .../the-pokemon-salesman-encounter.ts | 2 +- .../encounters/the-strong-stuff-encounter.ts | 2 +- .../the-winstrate-challenge-encounter.ts | 2 +- .../encounters/trash-to-treasure-encounter.ts | 2 +- .../encounters/weird-dream-encounter.ts | 3 +- .../mystery-encounter-requirements.ts | 66 -- .../utils/encounter-phase-utils.ts | 2 +- .../utils/encounter-pokemon-utils.ts | 2 +- src/data/pokemon-species.ts | 22 +- src/data/trainers/trainer-config.ts | 2 +- src/field/arena.ts | 2 +- src/field/pokemon.ts | 55 +- src/field/trainer.ts | 2 +- src/game-mode.ts | 2 +- src/modifier/modifier-type.ts | 35 +- src/modifier/modifier.ts | 57 +- src/phases/game-over-phase.ts | 2 +- src/phases/select-starter-phase.ts | 2 +- src/system/game-data.ts | 3 +- src/system/pokemon-data.ts | 5 +- .../version_migration/versions/v1_0_4.ts | 2 +- .../version_migration/versions/v1_7_0.ts | 3 +- .../version_migration/versions/v1_8_3.ts | 2 +- src/ui/egg-gacha-ui-handler.ts | 2 +- src/ui/pokedex-page-ui-handler.ts | 4 +- src/ui/pokedex-scan-ui-handler.ts | 2 +- src/ui/pokedex-ui-handler.ts | 3 +- src/ui/starter-select-ui-handler.ts | 3 +- src/ui/title-ui-handler.ts | 2 +- src/utils/pokemon-utils.ts | 21 + test/battle/battle.test.ts | 2 +- test/boss-pokemon.test.ts | 2 +- test/eggs/egg.test.ts | 2 +- test/moves/effectiveness.test.ts | 2 +- ...an-offer-you-cant-refuse-encounter.test.ts | 2 +- .../clowning-around-encounter.test.ts | 2 +- .../fiery-fallout-encounter.test.ts | 2 +- .../encounters/lost-at-sea-encounter.test.ts | 2 +- .../the-strong-stuff-encounter.test.ts | 2 +- .../the-winstrate-challenge-encounter.test.ts | 2 +- .../trash-to-treasure-encounter.test.ts | 2 +- .../uncommon-breed-encounter.test.ts | 2 +- .../mystery-encounter-utils.test.ts | 2 +- test/phases/select-modifier-phase.test.ts | 2 +- test/testUtils/gameManagerUtils.ts | 3 +- test/ui/pokedex.test.ts | 4 +- test/ui/starter-select.test.ts | 2 +- 67 files changed, 465 insertions(+), 600 deletions(-) create mode 100644 src/utils/pokemon-utils.ts diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 14b0c6a3d19..b802466ee19 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -4,7 +4,8 @@ import type Pokemon from "#app/field/pokemon"; import { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; import type { PokemonSpeciesFilter } from "#app/data/pokemon-species"; import type PokemonSpecies from "#app/data/pokemon-species"; -import { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; +import { allSpecies } from "#app/data/data-lists"; import { fixedInt, getIvsFromId, @@ -2966,6 +2967,13 @@ export default class BattleScene extends SceneBase { ) { modifiers.splice(m--, 1); } + if ( + modifier instanceof PokemonHeldItemModifier && + !isNullOrUndefined(modifier.getSpecies()) && + !this.getPokemonById(modifier.pokemonId)?.hasSpecies(modifier.getSpecies()!) + ) { + modifiers.splice(m--, 1); + } } for (const modifier of modifiers) { if (modifier instanceof PersistentModifier) { diff --git a/src/data/balance/pokemon-evolutions.ts b/src/data/balance/pokemon-evolutions.ts index d307f5cfbf6..e97a51fed29 100644 --- a/src/data/balance/pokemon-evolutions.ts +++ b/src/data/balance/pokemon-evolutions.ts @@ -1,9 +1,9 @@ import { globalScene } from "#app/global-scene"; -import { Gender } from "#app/data/gender"; +import { Gender, getGenderSymbol } from "#app/data/gender"; import { PokeballType } from "#enums/pokeball"; import type Pokemon from "#app/field/pokemon"; import { PokemonType } from "#enums/pokemon-type"; -import { randSeedInt } from "#app/utils/common"; +import { coerceArray, isNullOrUndefined, randSeedInt } from "#app/utils/common"; import { WeatherType } from "#enums/weather-type"; import { Nature } from "#enums/nature"; import { BiomeId } from "#enums/biome-id"; @@ -11,10 +11,11 @@ import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; import { SpeciesFormKey } from "#enums/species-form-key"; import { TimeOfDay } from "#enums/time-of-day"; -import type { SpeciesStatBoosterModifierType } from "#app/modifier/modifier-type"; +import type { SpeciesStatBoosterItem, SpeciesStatBoosterModifierType } from "#app/modifier/modifier-type"; import { speciesStarterCosts } from "./starters"; import i18next from "i18next"; -import { initI18n } from "#app/plugins/i18n"; +import { allMoves } from "#app/data/data-lists"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; export enum SpeciesWildEvolutionDelay { NONE, @@ -74,6 +75,8 @@ export enum EvolutionItem { LEADERS_CREST } +type TyrogueMove = MoveId.LOW_SWEEP | MoveId.MACH_PUNCH | MoveId.RAPID_SPIN; + /** * Pokemon Evolution tuple type consisting of: * @property 0 {@linkcode SpeciesId} The species of the Pokemon. @@ -81,8 +84,132 @@ export enum EvolutionItem { */ export type EvolutionLevel = [species: SpeciesId, level: number]; -export type EvolutionConditionPredicate = (p: Pokemon) => boolean; -export type EvolutionConditionEnforceFunc = (p: Pokemon) => void; +const EvoCondKey = { + FRIENDSHIP: 1, + TIME: 2, + MOVE: 3, + MOVE_TYPE: 4, + PARTY_TYPE: 5, + WEATHER: 6, + BIOME: 7, + TYROGUE: 8, + SHEDINJA: 9, + EVO_TREASURE_TRACKER: 10, + RANDOM_FORM: 11, + SPECIES_CAUGHT: 12, + GENDER: 13, + NATURE: 14, + HELD_ITEM: 15, // Currently checks only for species stat booster items +} as const; + +type EvolutionConditionData = + {key: typeof EvoCondKey.FRIENDSHIP | typeof EvoCondKey.RANDOM_FORM | typeof EvoCondKey.EVO_TREASURE_TRACKER, value: number} | + {key: typeof EvoCondKey.MOVE, move: MoveId} | + {key: typeof EvoCondKey.TIME, time: TimeOfDay[]} | + {key: typeof EvoCondKey.BIOME, biome: BiomeId[]} | + {key: typeof EvoCondKey.GENDER, gender: Gender} | + {key: typeof EvoCondKey.MOVE_TYPE | typeof EvoCondKey.PARTY_TYPE, pkmnType: PokemonType} | + {key: typeof EvoCondKey.SPECIES_CAUGHT, speciesCaught: SpeciesId} | + {key: typeof EvoCondKey.HELD_ITEM, itemKey: SpeciesStatBoosterItem} | + {key: typeof EvoCondKey.NATURE, nature: Nature[]} | + {key: typeof EvoCondKey.WEATHER, weather: WeatherType[]} | + {key: typeof EvoCondKey.TYROGUE, move: TyrogueMove} | + {key: typeof EvoCondKey.SHEDINJA}; + +export class SpeciesEvolutionCondition { + public data: EvolutionConditionData[]; + private desc: string[]; + + constructor(...data: EvolutionConditionData[]) { + this.data = data; + } + + public get description(): string[] { + if (!isNullOrUndefined(this.desc)) { + return this.desc; + } + this.desc = this.data.map(cond => { + switch(cond.key) { + case EvoCondKey.FRIENDSHIP: + return i18next.t("pokemonEvolutions:friendship"); + case EvoCondKey.TIME: + return i18next.t(`pokemonEvolutions:timeOfDay.${TimeOfDay[cond.time[cond.time.length - 1]]}`); // For Day and Night evos, the key we want goes last + case EvoCondKey.MOVE_TYPE: + return i18next.t("pokemonEvolutions:moveType", {type: i18next.t(`pokemonInfo:Type.${PokemonType[cond.pkmnType]}`)}); + case EvoCondKey.PARTY_TYPE: + return i18next.t("pokemonEvolutions:partyType", {type: i18next.t(`pokemonInfo:Type.${PokemonType[cond.pkmnType]}`)}); + case EvoCondKey.GENDER: + return i18next.t("pokemonEvolutions:gender", {gender: getGenderSymbol(cond.gender)}); + case EvoCondKey.MOVE: + case EvoCondKey.TYROGUE: + return i18next.t("pokemonEvolutions:move", {move: allMoves[cond.move].name}); + case EvoCondKey.BIOME: + return i18next.t("pokemonEvolutions:biome"); + case EvoCondKey.NATURE: + return i18next.t("pokemonEvolutions:nature"); + case EvoCondKey.WEATHER: + return i18next.t("pokemonEvolutions:weather"); + case EvoCondKey.SHEDINJA: + return i18next.t("pokemonEvolutions:shedinja"); + case EvoCondKey.EVO_TREASURE_TRACKER: + return i18next.t("pokemonEvolutions:treasure"); + case EvoCondKey.SPECIES_CAUGHT: + return i18next.t("pokemonEvolutions:caught", {species: getPokemonSpecies(cond.speciesCaught).name}); + case EvoCondKey.HELD_ITEM: + return i18next.t(`pokemonEvolutions:heldItem.${cond.itemKey}`); + } + }).filter(s => !isNullOrUndefined(s)); // Filter out stringless conditions + return this.desc; + } + + public conditionsFulfilled(pokemon: Pokemon): boolean { + console.log(this.data); + return this.data.every(cond => { + switch (cond.key) { + case EvoCondKey.FRIENDSHIP: + return pokemon.friendship >= cond.value; + case EvoCondKey.TIME: + return cond.time.includes(globalScene.arena.getTimeOfDay()); + case EvoCondKey.MOVE: + return pokemon.moveset.some(m => m.moveId === cond.move); + case EvoCondKey.MOVE_TYPE: + return pokemon.moveset.some(m => m.getMove().type === cond.pkmnType); + case EvoCondKey.PARTY_TYPE: + return globalScene.getPlayerParty().some(p => p.getTypes(false, false, true).includes(cond.pkmnType)) + case EvoCondKey.EVO_TREASURE_TRACKER: + return pokemon.getHeldItems().some(m => + m.is("EvoTrackerModifier") && + m.getStackCount() + pokemon.getPersistentTreasureCount() >= cond.value + ); + case EvoCondKey.GENDER: + return pokemon.gender === cond.gender; + case EvoCondKey.SHEDINJA: // Shedinja cannot be evolved into directly + return false; + case EvoCondKey.BIOME: + return cond.biome.includes(globalScene.arena.biomeType); + case EvoCondKey.WEATHER: + return cond.weather.includes(globalScene.arena.getWeatherType()); + case EvoCondKey.TYROGUE: + return pokemon.getMoveset(true).find(m => m.moveId as TyrogueMove)?.moveId === cond.move; + case EvoCondKey.NATURE: + return cond.nature.includes(pokemon.getNature()); + case EvoCondKey.RANDOM_FORM: { + let ret = false; + globalScene.executeWithSeedOffset(() => ret = !randSeedInt(cond.value), pokemon.id); + return ret; + } + case EvoCondKey.SPECIES_CAUGHT: + return !!globalScene.gameData.dexData[cond.speciesCaught].caughtAttr; + case EvoCondKey.HELD_ITEM: + return pokemon.getHeldItems().some(m => m.is("SpeciesStatBoosterModifier") && (m.type as SpeciesStatBoosterModifierType).key === cond.itemKey) + } + }); + } +} + +export function validateShedinjaEvo(): boolean { + return globalScene.getPlayerParty().length < 6 && globalScene.pokeballCounts[PokeballType.POKEBALL] > 0; +} export class SpeciesFormEvolution { public speciesId: SpeciesId; @@ -92,41 +219,96 @@ export class SpeciesFormEvolution { public item: EvolutionItem | null; public condition: SpeciesEvolutionCondition | null; public wildDelay: SpeciesWildEvolutionDelay; - public description = ""; + public desc = ""; - constructor(speciesId: SpeciesId, preFormKey: string | null, evoFormKey: string | null, level: number, item: EvolutionItem | null, condition: SpeciesEvolutionCondition | null, wildDelay?: SpeciesWildEvolutionDelay) { - if (!i18next.isInitialized) { - initI18n(); - } + constructor(speciesId: SpeciesId, preFormKey: string | null, evoFormKey: string | null, level: number, item: EvolutionItem | null, condition: EvolutionConditionData | EvolutionConditionData[] | null, wildDelay?: SpeciesWildEvolutionDelay) { this.speciesId = speciesId; this.preFormKey = preFormKey; this.evoFormKey = evoFormKey; this.level = level; this.item = item || EvolutionItem.NONE; - this.condition = condition; + if (!isNullOrUndefined(condition)) { + this.condition = new SpeciesEvolutionCondition(...coerceArray(condition)); + } this.wildDelay = wildDelay ?? SpeciesWildEvolutionDelay.NONE; + } + + get description(): string { + if (this.desc.length > 0) { + return this.desc; + } const strings: string[] = []; + let len = 0; if (this.level > 1) { - strings.push(i18next.t("pokemonEvolutions:level") + ` ${this.level}`); + strings.push(i18next.t("pokemonEvolutions:atLevel", {lv: this.level})); } if (this.item) { const itemDescription = i18next.t(`modifierType:EvolutionItem.${EvolutionItem[this.item].toUpperCase()}`); const rarity = this.item > 50 ? i18next.t("pokemonEvolutions:ULTRA") : i18next.t("pokemonEvolutions:GREAT"); - strings.push(i18next.t("pokemonEvolutions:using") + itemDescription + ` (${rarity})`); + strings.push(i18next.t("pokemonEvolutions:using", {item: itemDescription, tier: rarity})); } if (this.condition) { - strings.push(this.condition.description); + if (strings.length === 0) { + strings.push(i18next.t("pokemonEvolutions:levelUp")); + } + strings.push(...this.condition.description); } - this.description = strings + this.desc = strings .filter(str => str !== "") - .map((str, index) => index > 0 ? str[0].toLowerCase() + str.slice(1) : str) - .join(i18next.t("pokemonEvolutions:connector")); + .map((str, index) => { + if (index === 0) { + len = str.length; + return str; + } + if (len + str.length > 60) { + len = str.length; + return "\n" + str[0].toLowerCase() + str.slice(1); + } + len += str.length; + return str[0].toLowerCase() + str.slice(1); + }) + .join(" ") + .replace(" \n", i18next.t("pokemonEvolutions:connector") + "\n"); + + return this.desc; + } + + /** + * Checks if a Pokemon fulfills the requirements of this evolution. + * @param pokemon {@linkcode Pokemon} who wants to evolve + * @param forFusion defaults to False. Whether this evolution is meant for the secondary fused mon. In that case, use their form key. + * @param item {@linkcode EvolutionItem} optional, check if the evolution uses a certain item + * @returns whether this evolution can apply to the Pokemon + */ + public validate(pokemon: Pokemon, forFusion = false, item?: EvolutionItem): boolean { + return ( + pokemon.level >= this.level && + // Check form key, using the fusion's form key if we're checking the fusion + (isNullOrUndefined(this.preFormKey) || (forFusion ? pokemon.getFusionFormKey() : pokemon.getFormKey()) === this.preFormKey) && + (isNullOrUndefined(this.condition) || this.condition.conditionsFulfilled(pokemon)) && + ((item ?? EvolutionItem.NONE) === (this.item ?? EvolutionItem.NONE)) + ); + } + + public isValidItemEvolution(pokemon: Pokemon, forFusion = false): boolean { + return ( + // If an item is given, check if it's the right one + !isNullOrUndefined(this.item) && + pokemon.level >= this.level && + // Check form key, using the fusion's form key if we're checking the fusion + (isNullOrUndefined(this.preFormKey) || (forFusion ? pokemon.getFormKey() : pokemon.getFusionFormKey()) === this.preFormKey) && + (isNullOrUndefined(this.condition) || this.condition.conditionsFulfilled(pokemon)) + ); + } + + public get evoItem(): EvolutionItem { + return this.item ?? EvolutionItem.NONE; } } export class SpeciesEvolution extends SpeciesFormEvolution { - constructor(speciesId: SpeciesId, level: number, item: EvolutionItem | null, condition: SpeciesEvolutionCondition | null, wildDelay?: SpeciesWildEvolutionDelay) { + constructor(speciesId: SpeciesId, level: number, item: EvolutionItem | null, condition: EvolutionConditionData | EvolutionConditionData[] | null, wildDelay?: SpeciesWildEvolutionDelay) { super(speciesId, null, null, level, item, condition, wildDelay); } } @@ -135,226 +317,12 @@ export class FusionSpeciesFormEvolution extends SpeciesFormEvolution { public primarySpeciesId: SpeciesId; constructor(primarySpeciesId: SpeciesId, evolution: SpeciesFormEvolution) { - super(evolution.speciesId, evolution.preFormKey, evolution.evoFormKey, evolution.level, evolution.item, evolution.condition, evolution.wildDelay); + super(evolution.speciesId, evolution.preFormKey, evolution.evoFormKey, evolution.level, evolution.item, evolution.condition?.data ?? null, evolution.wildDelay); this.primarySpeciesId = primarySpeciesId; } } -export class SpeciesEvolutionCondition { - public predicate: EvolutionConditionPredicate; - public enforceFunc?: EvolutionConditionEnforceFunc; - public description: string; - - constructor(predicate: EvolutionConditionPredicate, enforceFunc?: EvolutionConditionEnforceFunc) { - this.predicate = predicate; - this.enforceFunc = enforceFunc; - this.description = ""; - } -} - -class GenderEvolutionCondition extends SpeciesEvolutionCondition { - public gender: Gender; - constructor(gender: Gender) { - super(p => p.gender === gender, p => p.gender = gender); - this.gender = gender; - this.description = i18next.t("pokemonEvolutions:gender", { gender: i18next.t(`pokemonEvolutions:${Gender[gender]}`) }); - } -} - -class TimeOfDayEvolutionCondition extends SpeciesEvolutionCondition { - public timesOfDay: TimeOfDay[]; - constructor(tod: "day" | "night") { - if (tod === "day") { - super(() => globalScene.arena.getTimeOfDay() === TimeOfDay.DAWN || globalScene.arena.getTimeOfDay() === TimeOfDay.DAY); - this.timesOfDay = [ TimeOfDay.DAWN, TimeOfDay.DAY ]; - } else if (tod === "night") { - super(() => globalScene.arena.getTimeOfDay() === TimeOfDay.DUSK || globalScene.arena.getTimeOfDay() === TimeOfDay.NIGHT); - this.timesOfDay = [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]; - } else { - super(() => false); - this.timesOfDay = []; - } - this.description = i18next.t("pokemonEvolutions:timeOfDay", { tod: i18next.t(`pokemonEvolutions:${tod}`) }); - } -} - -class MoveEvolutionCondition extends SpeciesEvolutionCondition { - public move: MoveId; - constructor(move: MoveId) { - super(p => p.moveset.filter(m => m.moveId === move).length > 0); - this.move = move; - const moveKey = MoveId[this.move].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); - this.description = i18next.t("pokemonEvolutions:move", { move: i18next.t(`move:${moveKey}.name`) }); - } -} - -class FriendshipEvolutionCondition extends SpeciesEvolutionCondition { - public amount: number; - constructor(amount: number) { - super(p => p.friendship >= amount); - this.amount = amount; - this.description = i18next.t("pokemonEvolutions:friendship"); - } -} - -class FriendshipTimeOfDayEvolutionCondition extends SpeciesEvolutionCondition { - public amount: number; - public timesOfDay: TimeOfDay[]; - constructor(amount: number, tod: "day" | "night") { - if (tod === "day") { - super(p => p.friendship >= amount && (globalScene.arena.getTimeOfDay() === TimeOfDay.DAWN || globalScene.arena.getTimeOfDay() === TimeOfDay.DAY)); - this.timesOfDay = [ TimeOfDay.DAWN, TimeOfDay.DAY ]; - } else if (tod === "night") { - super(p => p.friendship >= amount && (globalScene.arena.getTimeOfDay() === TimeOfDay.DUSK || globalScene.arena.getTimeOfDay() === TimeOfDay.NIGHT)); - this.timesOfDay = [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]; - } else { - super(_p => false); - this.timesOfDay = []; - } - this.amount = amount; - this.description = i18next.t("pokemonEvolutions:friendshipTimeOfDay", { tod: i18next.t(`pokemonEvolutions:${tod}`) }); - } -} - -class FriendshipMoveTypeEvolutionCondition extends SpeciesEvolutionCondition { - public amount: number; - public type: PokemonType; - constructor(amount: number, type: PokemonType) { - super(p => p.friendship >= amount && !!p.getMoveset().find(m => m?.getMove().type === type)); - this.amount = amount; - this.type = type; - this.description = i18next.t("pokemonEvolutions:friendshipMoveType", { type: i18next.t(`pokemonInfo:Type.${PokemonType[this.type]}`) }); - } -} - -class ShedinjaEvolutionCondition extends SpeciesEvolutionCondition { - constructor() { - super(() => globalScene.getPlayerParty().length < 6 && globalScene.pokeballCounts[PokeballType.POKEBALL] > 0); - this.description = i18next.t("pokemonEvolutions:shedinja"); - } -} - -class PartyTypeEvolutionCondition extends SpeciesEvolutionCondition { - public type: PokemonType; - constructor(type: PokemonType) { - super(() => !!globalScene.getPlayerParty().find(p => p.getTypes(false, false, true).indexOf(type) > -1)); - this.type = type; - this.description = i18next.t("pokemonEvolutions:partyType", { type: i18next.t(`pokemonInfo:Type.${PokemonType[this.type]}`) }); - } -} - -class CaughtEvolutionCondition extends SpeciesEvolutionCondition { - public species: SpeciesId; - constructor(species: SpeciesId) { - super(() => !!globalScene.gameData.dexData[species].caughtAttr); - this.species = species; - this.description = i18next.t("pokemonEvolutions:caught", { species: i18next.t(`pokemon:${SpeciesId[this.species].toLowerCase()}`) }); - } -} - -class WeatherEvolutionCondition extends SpeciesEvolutionCondition { - public weatherTypes: WeatherType[]; - constructor(weatherTypes: WeatherType[]) { - super(() => weatherTypes.indexOf(globalScene.arena.weather?.weatherType || WeatherType.NONE) > -1); - this.weatherTypes = weatherTypes; - this.description = i18next.t("pokemonEvolutions:weather"); - } -} - -class MoveTypeEvolutionCondition extends SpeciesEvolutionCondition { - public type: PokemonType; - constructor(type: PokemonType) { - super(p => p.moveset.filter(m => m?.getMove().type === type).length > 0); - this.type = type; - this.description = i18next.t("pokemonEvolutions:moveType", { type: i18next.t(`pokemonInfo:Type.${PokemonType[this.type]}`) }); - } -} - -class TreasureEvolutionCondition extends SpeciesEvolutionCondition { - constructor() { - super(p => p.evoCounter - + p.getHeldItems().filter(m => m.is("DamageMoneyRewardModifier")).length - + globalScene.findModifiers(m => m.is("MoneyMultiplierModifier") - || m.is("ExtraModifierModifier") || m.is("TempExtraModifierModifier")).length > 9); - this.description = i18next.t("pokemonEvolutions:treasure"); - } -} - -class TyrogueEvolutionCondition extends SpeciesEvolutionCondition { - public move: MoveId; - constructor(move: MoveId) { - super(p => - p.getMoveset(true).find(m => m && [ MoveId.LOW_SWEEP, MoveId.MACH_PUNCH, MoveId.RAPID_SPIN ].includes(m.moveId))?.moveId === move); - this.move = move; - const moveKey = MoveId[this.move].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); - this.description = i18next.t("pokemonEvolutions:move", { move: i18next.t(`move:${moveKey}.name`) }); - } -} - -class NatureEvolutionCondition extends SpeciesEvolutionCondition { - public natures: Nature[]; - constructor(natures: Nature[]) { - super(p => natures.indexOf(p.getNature()) > -1); - this.natures = natures; - this.description = i18next.t("pokemonEvolutions:nature"); - } -} - -class MoveTimeOfDayEvolutionCondition extends SpeciesEvolutionCondition { - public move: MoveId; - public timesOfDay: TimeOfDay[]; - constructor(move: MoveId, tod: "day" | "night") { - if (tod === "day") { - super(p => p.moveset.filter(m => m.moveId === move).length > 0 && (globalScene.arena.getTimeOfDay() === TimeOfDay.DAWN || globalScene.arena.getTimeOfDay() === TimeOfDay.DAY)); - this.move = move; - this.timesOfDay = [ TimeOfDay.DAWN, TimeOfDay.DAY ]; - } else if (tod === "night") { - super(p => p.moveset.filter(m => m.moveId === move).length > 0 && (globalScene.arena.getTimeOfDay() === TimeOfDay.DUSK || globalScene.arena.getTimeOfDay() === TimeOfDay.NIGHT)); - this.move = move; - this.timesOfDay = [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]; - } else { - super(() => false); - this.timesOfDay = []; - } - const moveKey = MoveId[this.move].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); - this.description = i18next.t("pokemonEvolutions:moveTimeOfDay", { move: i18next.t(`move:${moveKey}.name`), tod: i18next.t(`pokemonEvolutions:${tod}`) }); - } -} - -class BiomeEvolutionCondition extends SpeciesEvolutionCondition { - public biomes: BiomeId[]; - constructor(biomes: BiomeId[]) { - super(() => biomes.filter(b => b === globalScene.arena.biomeType).length > 0); - this.biomes = biomes; - this.description = i18next.t("pokemonEvolutions:biome"); - } -} - -class DunsparceEvolutionCondition extends SpeciesEvolutionCondition { - constructor() { - super(p => { - let ret = false; - if (p.moveset.filter(m => m.moveId === MoveId.HYPER_DRILL).length > 0) { - globalScene.executeWithSeedOffset(() => ret = !randSeedInt(4), p.id); - } - return ret; - }); - const moveKey = MoveId[MoveId.HYPER_DRILL].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); - this.description = i18next.t("pokemonEvolutions:move", { move: i18next.t(`move:${moveKey}.name`) }); - } -} - -class TandemausEvolutionCondition extends SpeciesEvolutionCondition { - constructor() { - super(p => { - let ret = false; - globalScene.executeWithSeedOffset(() => ret = !randSeedInt(4), p.id); - return ret; - }); - } -} - interface PokemonEvolutions { [key: string]: SpeciesFormEvolution[] } @@ -488,8 +456,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.ELECTRODE, 30, null, null) ], [SpeciesId.CUBONE]: [ - new SpeciesEvolution(SpeciesId.ALOLA_MAROWAK, 28, null, new TimeOfDayEvolutionCondition("night")), - new SpeciesEvolution(SpeciesId.MAROWAK, 28, null, new TimeOfDayEvolutionCondition("day")) + new SpeciesEvolution(SpeciesId.ALOLA_MAROWAK, 28, null, {key: EvoCondKey.TIME, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}), + new SpeciesEvolution(SpeciesId.MAROWAK, 28, null, {key: EvoCondKey.TIME, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}) ], [SpeciesId.TYROGUE]: [ /** @@ -498,13 +466,13 @@ export const pokemonEvolutions: PokemonEvolutions = { * If Tyrogue knows multiple of these moves, its evolution is based on * the first qualifying move in its moveset. */ - new SpeciesEvolution(SpeciesId.HITMONLEE, 20, null, new TyrogueEvolutionCondition(MoveId.LOW_SWEEP)), - new SpeciesEvolution(SpeciesId.HITMONCHAN, 20, null, new TyrogueEvolutionCondition(MoveId.MACH_PUNCH)), - new SpeciesEvolution(SpeciesId.HITMONTOP, 20, null, new TyrogueEvolutionCondition(MoveId.RAPID_SPIN)), + new SpeciesEvolution(SpeciesId.HITMONLEE, 20, null, {key: EvoCondKey.TYROGUE, move: MoveId.LOW_SWEEP}), + new SpeciesEvolution(SpeciesId.HITMONCHAN, 20, null, {key: EvoCondKey.TYROGUE, move: MoveId.MACH_PUNCH}), + new SpeciesEvolution(SpeciesId.HITMONTOP, 20, null, {key: EvoCondKey.TYROGUE, move: MoveId.RAPID_SPIN}), ], [SpeciesId.KOFFING]: [ - new SpeciesEvolution(SpeciesId.GALAR_WEEZING, 35, null, new TimeOfDayEvolutionCondition("night")), - new SpeciesEvolution(SpeciesId.WEEZING, 35, null, new TimeOfDayEvolutionCondition("day")) + new SpeciesEvolution(SpeciesId.GALAR_WEEZING, 35, null, {key: EvoCondKey.TIME, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}), + new SpeciesEvolution(SpeciesId.WEEZING, 35, null, {key: EvoCondKey.TIME, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}) ], [SpeciesId.RHYHORN]: [ new SpeciesEvolution(SpeciesId.RHYDON, 42, null, null) @@ -549,8 +517,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.QUILAVA, 14, null, null) ], [SpeciesId.QUILAVA]: [ - new SpeciesEvolution(SpeciesId.HISUI_TYPHLOSION, 36, null, new TimeOfDayEvolutionCondition("night")), - new SpeciesEvolution(SpeciesId.TYPHLOSION, 36, null, new TimeOfDayEvolutionCondition("day")) + new SpeciesEvolution(SpeciesId.HISUI_TYPHLOSION, 36, null, {key: EvoCondKey.TIME, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}), + new SpeciesEvolution(SpeciesId.TYPHLOSION, 36, null, {key: EvoCondKey.TIME, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}) ], [SpeciesId.TOTODILE]: [ new SpeciesEvolution(SpeciesId.CROCONAW, 18, null, null) @@ -652,8 +620,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.LINOONE, 20, null, null) ], [SpeciesId.WURMPLE]: [ - new SpeciesEvolution(SpeciesId.SILCOON, 7, null, new TimeOfDayEvolutionCondition("day")), - new SpeciesEvolution(SpeciesId.CASCOON, 7, null, new TimeOfDayEvolutionCondition("night")) + new SpeciesEvolution(SpeciesId.SILCOON, 7, null, {key: EvoCondKey.TIME, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}), + new SpeciesEvolution(SpeciesId.CASCOON, 7, null, {key: EvoCondKey.TIME, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}) ], [SpeciesId.SILCOON]: [ new SpeciesEvolution(SpeciesId.BEAUTIFLY, 10, null, null) @@ -677,8 +645,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.KIRLIA, 20, null, null) ], [SpeciesId.KIRLIA]: [ - new SpeciesEvolution(SpeciesId.GARDEVOIR, 30, null, new GenderEvolutionCondition(Gender.FEMALE)), - new SpeciesEvolution(SpeciesId.GALLADE, 30, null, new GenderEvolutionCondition(Gender.MALE)) + new SpeciesEvolution(SpeciesId.GARDEVOIR, 30, null, {key: EvoCondKey.GENDER, gender: Gender.FEMALE}), + new SpeciesEvolution(SpeciesId.GALLADE, 30, null, {key: EvoCondKey.GENDER, gender: Gender.MALE}) ], [SpeciesId.SURSKIT]: [ new SpeciesEvolution(SpeciesId.MASQUERAIN, 22, null, null) @@ -694,7 +662,7 @@ export const pokemonEvolutions: PokemonEvolutions = { ], [SpeciesId.NINCADA]: [ new SpeciesEvolution(SpeciesId.NINJASK, 20, null, null), - new SpeciesEvolution(SpeciesId.SHEDINJA, 20, null, new ShedinjaEvolutionCondition()) + new SpeciesEvolution(SpeciesId.SHEDINJA, 20, null, {key: EvoCondKey.SHEDINJA}) ], [SpeciesId.WHISMUR]: [ new SpeciesEvolution(SpeciesId.LOUDRED, 20, null, null) @@ -766,8 +734,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.DUSCLOPS, 37, null, null) ], [SpeciesId.SNORUNT]: [ - new SpeciesEvolution(SpeciesId.GLALIE, 42, null, new GenderEvolutionCondition(Gender.MALE)), - new SpeciesEvolution(SpeciesId.FROSLASS, 42, null, new GenderEvolutionCondition(Gender.FEMALE)) + new SpeciesEvolution(SpeciesId.GLALIE, 42, null, {key: EvoCondKey.GENDER, gender: Gender.MALE}), + new SpeciesEvolution(SpeciesId.FROSLASS, 42, null, {key: EvoCondKey.GENDER, gender: Gender.FEMALE}) ], [SpeciesId.SPHEAL]: [ new SpeciesEvolution(SpeciesId.SEALEO, 32, null, null) @@ -830,11 +798,11 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.BASTIODON, 30, null, null) ], [SpeciesId.BURMY]: [ - new SpeciesEvolution(SpeciesId.MOTHIM, 20, null, new GenderEvolutionCondition(Gender.MALE)), - new SpeciesEvolution(SpeciesId.WORMADAM, 20, null, new GenderEvolutionCondition(Gender.FEMALE)) + new SpeciesEvolution(SpeciesId.MOTHIM, 20, null, {key: EvoCondKey.GENDER, gender: Gender.MALE}), + new SpeciesEvolution(SpeciesId.WORMADAM, 20, null, {key: EvoCondKey.GENDER, gender: Gender.FEMALE}) ], [SpeciesId.COMBEE]: [ - new SpeciesEvolution(SpeciesId.VESPIQUEN, 21, null, new GenderEvolutionCondition(Gender.FEMALE)) + new SpeciesEvolution(SpeciesId.VESPIQUEN, 21, null, {key: EvoCondKey.GENDER, gender: Gender.FEMALE}) ], [SpeciesId.BUIZEL]: [ new SpeciesEvolution(SpeciesId.FLOATZEL, 26, null, null) @@ -876,7 +844,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.LUMINEON, 31, null, null) ], [SpeciesId.MANTYKE]: [ - new SpeciesEvolution(SpeciesId.MANTINE, 32, null, new CaughtEvolutionCondition(SpeciesId.REMORAID), SpeciesWildEvolutionDelay.MEDIUM) + new SpeciesEvolution(SpeciesId.MANTINE, 32, null, {key: EvoCondKey.SPECIES_CAUGHT, speciesCaught: SpeciesId.REMORAID}, SpeciesWildEvolutionDelay.MEDIUM) ], [SpeciesId.SNOVER]: [ new SpeciesEvolution(SpeciesId.ABOMASNOW, 40, null, null) @@ -897,8 +865,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.DEWOTT, 17, null, null) ], [SpeciesId.DEWOTT]: [ - new SpeciesEvolution(SpeciesId.HISUI_SAMUROTT, 36, null, new TimeOfDayEvolutionCondition("night")), - new SpeciesEvolution(SpeciesId.SAMUROTT, 36, null, new TimeOfDayEvolutionCondition("day")) + new SpeciesEvolution(SpeciesId.HISUI_SAMUROTT, 36, null, {key: EvoCondKey.TIME, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}), + new SpeciesEvolution(SpeciesId.SAMUROTT, 36, null, {key: EvoCondKey.TIME, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}) ], [SpeciesId.PATRAT]: [ new SpeciesEvolution(SpeciesId.WATCHOG, 20, null, null) @@ -1048,8 +1016,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.KINGAMBIT, 1, EvolutionItem.LEADERS_CREST, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [SpeciesId.RUFFLET]: [ - new SpeciesEvolution(SpeciesId.HISUI_BRAVIARY, 54, null, new TimeOfDayEvolutionCondition("night")), - new SpeciesEvolution(SpeciesId.BRAVIARY, 54, null, new TimeOfDayEvolutionCondition("day")) + new SpeciesEvolution(SpeciesId.HISUI_BRAVIARY, 54, null, {key: EvoCondKey.TIME, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}), + new SpeciesEvolution(SpeciesId.BRAVIARY, 54, null, {key: EvoCondKey.TIME, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}) ], [SpeciesId.VULLABY]: [ new SpeciesEvolution(SpeciesId.MANDIBUZZ, 54, null, null) @@ -1106,11 +1074,11 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.GOGOAT, 32, null, null) ], [SpeciesId.PANCHAM]: [ - new SpeciesEvolution(SpeciesId.PANGORO, 32, null, new PartyTypeEvolutionCondition(PokemonType.DARK), SpeciesWildEvolutionDelay.MEDIUM) + new SpeciesEvolution(SpeciesId.PANGORO, 32, null, {key: EvoCondKey.PARTY_TYPE, pkmnType: PokemonType.DARK}, SpeciesWildEvolutionDelay.MEDIUM) ], [SpeciesId.ESPURR]: [ - new SpeciesFormEvolution(SpeciesId.MEOWSTIC, "", "female", 25, null, new GenderEvolutionCondition(Gender.FEMALE)), - new SpeciesFormEvolution(SpeciesId.MEOWSTIC, "", "", 25, null, new GenderEvolutionCondition(Gender.MALE)) + new SpeciesFormEvolution(SpeciesId.MEOWSTIC, "", "female", 25, null, {key: EvoCondKey.GENDER, gender: Gender.FEMALE}), + new SpeciesFormEvolution(SpeciesId.MEOWSTIC, "", "", 25, null, {key: EvoCondKey.GENDER, gender: Gender.MALE}) ], [SpeciesId.HONEDGE]: [ new SpeciesEvolution(SpeciesId.DOUBLADE, 35, null, null) @@ -1128,21 +1096,21 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.CLAWITZER, 37, null, null) ], [SpeciesId.TYRUNT]: [ - new SpeciesEvolution(SpeciesId.TYRANTRUM, 39, null, new TimeOfDayEvolutionCondition("day")) + new SpeciesEvolution(SpeciesId.TYRANTRUM, 39, null, {key: EvoCondKey.TIME, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}) ], [SpeciesId.AMAURA]: [ - new SpeciesEvolution(SpeciesId.AURORUS, 39, null, new TimeOfDayEvolutionCondition("night")) + new SpeciesEvolution(SpeciesId.AURORUS, 39, null, {key: EvoCondKey.TIME, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}) ], [SpeciesId.GOOMY]: [ - new SpeciesEvolution(SpeciesId.HISUI_SLIGGOO, 40, null, new TimeOfDayEvolutionCondition("night")), - new SpeciesEvolution(SpeciesId.SLIGGOO, 40, null, new TimeOfDayEvolutionCondition("day")) + new SpeciesEvolution(SpeciesId.HISUI_SLIGGOO, 40, null, {key: EvoCondKey.TIME, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}), + new SpeciesEvolution(SpeciesId.SLIGGOO, 40, null, {key: EvoCondKey.TIME, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}) ], [SpeciesId.SLIGGOO]: [ - new SpeciesEvolution(SpeciesId.GOODRA, 50, null, new WeatherEvolutionCondition([ WeatherType.RAIN, WeatherType.FOG, WeatherType.HEAVY_RAIN ]), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(SpeciesId.GOODRA, 50, null, {key: EvoCondKey.WEATHER, weather: [ WeatherType.RAIN, WeatherType.FOG, WeatherType.HEAVY_RAIN ]}, SpeciesWildEvolutionDelay.LONG) ], [SpeciesId.BERGMITE]: [ - new SpeciesEvolution(SpeciesId.HISUI_AVALUGG, 37, null, new TimeOfDayEvolutionCondition("night")), - new SpeciesEvolution(SpeciesId.AVALUGG, 37, null, new TimeOfDayEvolutionCondition("day")) + new SpeciesEvolution(SpeciesId.HISUI_AVALUGG, 37, null, {key: EvoCondKey.TIME, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}), + new SpeciesEvolution(SpeciesId.AVALUGG, 37, null, {key: EvoCondKey.TIME, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}) ], [SpeciesId.NOIBAT]: [ new SpeciesEvolution(SpeciesId.NOIVERN, 48, null, null) @@ -1151,8 +1119,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.DARTRIX, 17, null, null) ], [SpeciesId.DARTRIX]: [ - new SpeciesEvolution(SpeciesId.HISUI_DECIDUEYE, 36, null, new TimeOfDayEvolutionCondition("night")), - new SpeciesEvolution(SpeciesId.DECIDUEYE, 34, null, new TimeOfDayEvolutionCondition("day")) + new SpeciesEvolution(SpeciesId.HISUI_DECIDUEYE, 36, null, {key: EvoCondKey.TIME, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}), + new SpeciesEvolution(SpeciesId.DECIDUEYE, 34, null, {key: EvoCondKey.TIME, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}) ], [SpeciesId.LITTEN]: [ new SpeciesEvolution(SpeciesId.TORRACAT, 17, null, null) @@ -1173,7 +1141,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.TOUCANNON, 28, null, null) ], [SpeciesId.YUNGOOS]: [ - new SpeciesEvolution(SpeciesId.GUMSHOOS, 20, null, new TimeOfDayEvolutionCondition("day")) + new SpeciesEvolution(SpeciesId.GUMSHOOS, 20, null, {key: EvoCondKey.TIME, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}) ], [SpeciesId.GRUBBIN]: [ new SpeciesEvolution(SpeciesId.CHARJABUG, 20, null, null) @@ -1191,13 +1159,13 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.ARAQUANID, 22, null, null) ], [SpeciesId.FOMANTIS]: [ - new SpeciesEvolution(SpeciesId.LURANTIS, 34, null, new TimeOfDayEvolutionCondition("day")) + new SpeciesEvolution(SpeciesId.LURANTIS, 34, null, {key: EvoCondKey.TIME, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}) ], [SpeciesId.MORELULL]: [ new SpeciesEvolution(SpeciesId.SHIINOTIC, 24, null, null) ], [SpeciesId.SALANDIT]: [ - new SpeciesEvolution(SpeciesId.SALAZZLE, 33, null, new GenderEvolutionCondition(Gender.FEMALE)) + new SpeciesEvolution(SpeciesId.SALAZZLE, 33, null, {key: EvoCondKey.GENDER, gender: Gender.FEMALE}) ], [SpeciesId.STUFFUL]: [ new SpeciesEvolution(SpeciesId.BEWEAR, 27, null, null) @@ -1228,7 +1196,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.MELMETAL, 48, null, null) ], [SpeciesId.ALOLA_RATTATA]: [ - new SpeciesEvolution(SpeciesId.ALOLA_RATICATE, 20, null, new TimeOfDayEvolutionCondition("night")) + new SpeciesEvolution(SpeciesId.ALOLA_RATICATE, 20, null, {key: EvoCondKey.TIME, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}) ], [SpeciesId.ALOLA_DIGLETT]: [ new SpeciesEvolution(SpeciesId.ALOLA_DUGTRIO, 26, null, null) @@ -1301,7 +1269,7 @@ export const pokemonEvolutions: PokemonEvolutions = { ], [SpeciesId.TOXEL]: [ new SpeciesFormEvolution(SpeciesId.TOXTRICITY, "", "lowkey", 30, null, - new NatureEvolutionCondition([ Nature.LONELY, Nature.BOLD, Nature.RELAXED, Nature.TIMID, Nature.SERIOUS, Nature.MODEST, Nature.MILD, Nature.QUIET, Nature.BASHFUL, Nature.CALM, Nature.GENTLE, Nature.CAREFUL ]) + {key: EvoCondKey.NATURE, nature: [ Nature.LONELY, Nature.BOLD, Nature.RELAXED, Nature.TIMID, Nature.SERIOUS, Nature.MODEST, Nature.MILD, Nature.QUIET, Nature.BASHFUL, Nature.CALM, Nature.GENTLE, Nature.CAREFUL ]} ), new SpeciesFormEvolution(SpeciesId.TOXTRICITY, "", "amped", 30, null, null) ], @@ -1352,7 +1320,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.GALAR_LINOONE, 20, null, null) ], [SpeciesId.GALAR_LINOONE]: [ - new SpeciesEvolution(SpeciesId.OBSTAGOON, 35, null, new TimeOfDayEvolutionCondition("night")) + new SpeciesEvolution(SpeciesId.OBSTAGOON, 35, null, {key: EvoCondKey.TIME, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}) ], [SpeciesId.GALAR_YAMASK]: [ new SpeciesEvolution(SpeciesId.RUNERIGUS, 34, null, null) @@ -1361,7 +1329,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.HISUI_ZOROARK, 30, null, null) ], [SpeciesId.HISUI_SLIGGOO]: [ - new SpeciesEvolution(SpeciesId.HISUI_GOODRA, 50, null, new WeatherEvolutionCondition([ WeatherType.RAIN, WeatherType.FOG, WeatherType.HEAVY_RAIN ]), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(SpeciesId.HISUI_GOODRA, 50, null, {key: EvoCondKey.WEATHER, weather: [ WeatherType.RAIN, WeatherType.FOG, WeatherType.HEAVY_RAIN ]}, SpeciesWildEvolutionDelay.LONG) ], [SpeciesId.SPRIGATITO]: [ new SpeciesEvolution(SpeciesId.FLORAGATO, 16, null, null) @@ -1382,8 +1350,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.QUAQUAVAL, 36, null, null) ], [SpeciesId.LECHONK]: [ - new SpeciesFormEvolution(SpeciesId.OINKOLOGNE, "", "female", 18, null, new GenderEvolutionCondition(Gender.FEMALE)), - new SpeciesFormEvolution(SpeciesId.OINKOLOGNE, "", "", 18, null, new GenderEvolutionCondition(Gender.MALE)) + new SpeciesFormEvolution(SpeciesId.OINKOLOGNE, "", "female", 18, null, {key: EvoCondKey.GENDER, gender: Gender.FEMALE}), + new SpeciesFormEvolution(SpeciesId.OINKOLOGNE, "", "", 18, null, {key: EvoCondKey.GENDER, gender: Gender.MALE}) ], [SpeciesId.TAROUNTULA]: [ new SpeciesEvolution(SpeciesId.SPIDOPS, 15, null, null) @@ -1398,7 +1366,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.PAWMOT, 32, null, null) ], [SpeciesId.TANDEMAUS]: [ - new SpeciesFormEvolution(SpeciesId.MAUSHOLD, "", "three", 25, null, new TandemausEvolutionCondition()), + new SpeciesFormEvolution(SpeciesId.MAUSHOLD, "", "three", 25, null, {key: EvoCondKey.RANDOM_FORM, value: 4}), new SpeciesFormEvolution(SpeciesId.MAUSHOLD, "", "four", 25, null, null) ], [SpeciesId.FIDOUGH]: [ @@ -1456,7 +1424,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.GLIMMORA, 35, null, null) ], [SpeciesId.GREAVARD]: [ - new SpeciesEvolution(SpeciesId.HOUNDSTONE, 30, null, new TimeOfDayEvolutionCondition("night")) + new SpeciesEvolution(SpeciesId.HOUNDSTONE, 30, null, {key: EvoCondKey.TIME, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}) ], [SpeciesId.FRIGIBAX]: [ new SpeciesEvolution(SpeciesId.ARCTIBAX, 35, null, null) @@ -1513,21 +1481,21 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.EXEGGUTOR, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG) ], [SpeciesId.TANGELA]: [ - new SpeciesEvolution(SpeciesId.TANGROWTH, 34, null, new MoveEvolutionCondition(MoveId.ANCIENT_POWER), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(SpeciesId.TANGROWTH, 34, null, {key: EvoCondKey.MOVE, move: MoveId.ANCIENT_POWER}, SpeciesWildEvolutionDelay.LONG) ], [SpeciesId.LICKITUNG]: [ - new SpeciesEvolution(SpeciesId.LICKILICKY, 32, null, new MoveEvolutionCondition(MoveId.ROLLOUT), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(SpeciesId.LICKILICKY, 32, null, {key: EvoCondKey.MOVE, move: MoveId.ROLLOUT}, SpeciesWildEvolutionDelay.LONG) ], [SpeciesId.STARYU]: [ new SpeciesEvolution(SpeciesId.STARMIE, 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG) ], [SpeciesId.EEVEE]: [ - new SpeciesFormEvolution(SpeciesId.SYLVEON, "", "", 1, null, new FriendshipMoveTypeEvolutionCondition(120, PokemonType.FAIRY), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(SpeciesId.SYLVEON, "partner", "", 1, null, new FriendshipMoveTypeEvolutionCondition(120, PokemonType.FAIRY), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(SpeciesId.ESPEON, "", "", 1, null, new FriendshipTimeOfDayEvolutionCondition(120, "day"), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(SpeciesId.ESPEON, "partner", "", 1, null, new FriendshipTimeOfDayEvolutionCondition(120, "day"), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(SpeciesId.UMBREON, "", "", 1, null, new FriendshipTimeOfDayEvolutionCondition(120, "night"), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(SpeciesId.UMBREON, "partner", "", 1, null, new FriendshipTimeOfDayEvolutionCondition(120, "night"), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(SpeciesId.SYLVEON, "", "", 1, null, [{key: EvoCondKey.FRIENDSHIP, value: 120}, {key: EvoCondKey.MOVE_TYPE, pkmnType: PokemonType.FAIRY}], SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(SpeciesId.SYLVEON, "partner", "", 1, null, [{key: EvoCondKey.FRIENDSHIP, value: 120}, {key: EvoCondKey.MOVE_TYPE, pkmnType: PokemonType.FAIRY}], SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(SpeciesId.ESPEON, "", "", 1, null, [{key: EvoCondKey.FRIENDSHIP, value: 120}, {key: EvoCondKey.TIME, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}], SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(SpeciesId.ESPEON, "partner", "", 1, null, [{key: EvoCondKey.FRIENDSHIP, value: 120}, {key: EvoCondKey.TIME, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}], SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(SpeciesId.UMBREON, "", "", 1, null, [{key: EvoCondKey.FRIENDSHIP, value: 120}, {key: EvoCondKey.TIME, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}], SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(SpeciesId.UMBREON, "partner", "", 1, null, [{key: EvoCondKey.FRIENDSHIP, value: 120}, {key: EvoCondKey.TIME, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}], SpeciesWildEvolutionDelay.LONG), new SpeciesFormEvolution(SpeciesId.VAPOREON, "", "", 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG), new SpeciesFormEvolution(SpeciesId.VAPOREON, "partner", "", 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG), new SpeciesFormEvolution(SpeciesId.JOLTEON, "", "", 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG), @@ -1543,13 +1511,13 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.TOGEKISS, 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [SpeciesId.AIPOM]: [ - new SpeciesEvolution(SpeciesId.AMBIPOM, 32, null, new MoveEvolutionCondition(MoveId.DOUBLE_HIT), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(SpeciesId.AMBIPOM, 32, null, {key: EvoCondKey.MOVE, move: MoveId.DOUBLE_HIT}, SpeciesWildEvolutionDelay.LONG) ], [SpeciesId.SUNKERN]: [ new SpeciesEvolution(SpeciesId.SUNFLORA, 1, EvolutionItem.SUN_STONE, null, SpeciesWildEvolutionDelay.LONG) ], [SpeciesId.YANMA]: [ - new SpeciesEvolution(SpeciesId.YANMEGA, 33, null, new MoveEvolutionCondition(MoveId.ANCIENT_POWER), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(SpeciesId.YANMEGA, 33, null, {key: EvoCondKey.MOVE, move: MoveId.ANCIENT_POWER}, SpeciesWildEvolutionDelay.LONG) ], [SpeciesId.MURKROW]: [ new SpeciesEvolution(SpeciesId.HONCHKROW, 1, EvolutionItem.DUSK_STONE, null, SpeciesWildEvolutionDelay.VERY_LONG) @@ -1558,26 +1526,26 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.MISMAGIUS, 1, EvolutionItem.DUSK_STONE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [SpeciesId.GIRAFARIG]: [ - new SpeciesEvolution(SpeciesId.FARIGIRAF, 32, null, new MoveEvolutionCondition(MoveId.TWIN_BEAM), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(SpeciesId.FARIGIRAF, 32, null, {key: EvoCondKey.MOVE, move: MoveId.TWIN_BEAM}, SpeciesWildEvolutionDelay.LONG) ], [SpeciesId.DUNSPARCE]: [ - new SpeciesFormEvolution(SpeciesId.DUDUNSPARCE, "", "three-segment", 32, null, new DunsparceEvolutionCondition(), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(SpeciesId.DUDUNSPARCE, "", "two-segment", 32, null, new MoveEvolutionCondition(MoveId.HYPER_DRILL), SpeciesWildEvolutionDelay.LONG) + new SpeciesFormEvolution(SpeciesId.DUDUNSPARCE, "", "three-segment", 32, null, [{key: EvoCondKey.RANDOM_FORM, value: 4}, {key: EvoCondKey.MOVE, move: MoveId.HYPER_DRILL}], SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(SpeciesId.DUDUNSPARCE, "", "two-segment", 32, null, {key: EvoCondKey.MOVE, move: MoveId.HYPER_DRILL}, SpeciesWildEvolutionDelay.LONG) ], [SpeciesId.GLIGAR]: [ - new SpeciesEvolution(SpeciesId.GLISCOR, 1, EvolutionItem.RAZOR_FANG, new TimeOfDayEvolutionCondition("night") /* Razor fang at night*/, SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(SpeciesId.GLISCOR, 1, EvolutionItem.RAZOR_FANG, {key: EvoCondKey.TIME, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]} /* Razor fang at night*/, SpeciesWildEvolutionDelay.VERY_LONG) ], [SpeciesId.SNEASEL]: [ - new SpeciesEvolution(SpeciesId.WEAVILE, 1, EvolutionItem.RAZOR_CLAW, new TimeOfDayEvolutionCondition("night") /* Razor claw at night*/, SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(SpeciesId.WEAVILE, 1, EvolutionItem.RAZOR_CLAW, {key: EvoCondKey.TIME, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]} /* Razor claw at night*/, SpeciesWildEvolutionDelay.VERY_LONG) ], [SpeciesId.URSARING]: [ new SpeciesEvolution(SpeciesId.URSALUNA, 1, EvolutionItem.PEAT_BLOCK, null, SpeciesWildEvolutionDelay.VERY_LONG) //Ursaring does not evolve into Bloodmoon Ursaluna ], [SpeciesId.PILOSWINE]: [ - new SpeciesEvolution(SpeciesId.MAMOSWINE, 1, null, new MoveEvolutionCondition(MoveId.ANCIENT_POWER), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(SpeciesId.MAMOSWINE, 1, null, {key: EvoCondKey.MOVE, move: MoveId.ANCIENT_POWER}, SpeciesWildEvolutionDelay.VERY_LONG) ], [SpeciesId.STANTLER]: [ - new SpeciesEvolution(SpeciesId.WYRDEER, 25, null, new MoveEvolutionCondition(MoveId.PSYSHIELD_BASH), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(SpeciesId.WYRDEER, 25, null, {key: EvoCondKey.MOVE, move: MoveId.PSYSHIELD_BASH}, SpeciesWildEvolutionDelay.VERY_LONG) ], [SpeciesId.LOMBRE]: [ new SpeciesEvolution(SpeciesId.LUDICOLO, 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG) @@ -1595,11 +1563,11 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.ROSERADE, 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [SpeciesId.BONSLY]: [ - new SpeciesEvolution(SpeciesId.SUDOWOODO, 1, null, new MoveEvolutionCondition(MoveId.MIMIC), SpeciesWildEvolutionDelay.MEDIUM) + new SpeciesEvolution(SpeciesId.SUDOWOODO, 1, null, {key: EvoCondKey.MOVE, move: MoveId.MIMIC}, SpeciesWildEvolutionDelay.MEDIUM) ], [SpeciesId.MIME_JR]: [ - new SpeciesEvolution(SpeciesId.GALAR_MR_MIME, 1, null, new MoveTimeOfDayEvolutionCondition(MoveId.MIMIC, "night"), SpeciesWildEvolutionDelay.MEDIUM), - new SpeciesEvolution(SpeciesId.MR_MIME, 1, null, new MoveTimeOfDayEvolutionCondition(MoveId.MIMIC, "day"), SpeciesWildEvolutionDelay.MEDIUM) + new SpeciesEvolution(SpeciesId.GALAR_MR_MIME, 1, null, [{key: EvoCondKey.MOVE, move: MoveId.MIMIC}, {key: EvoCondKey.TIME, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}], SpeciesWildEvolutionDelay.MEDIUM), + new SpeciesEvolution(SpeciesId.MR_MIME, 1, null, [{key: EvoCondKey.MOVE, move: MoveId.MIMIC}, {key: EvoCondKey.TIME, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}], SpeciesWildEvolutionDelay.MEDIUM) ], [SpeciesId.PANSAGE]: [ new SpeciesEvolution(SpeciesId.SIMISAGE, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG) @@ -1621,8 +1589,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.LILLIGANT, 1, EvolutionItem.SUN_STONE, null, SpeciesWildEvolutionDelay.LONG) ], [SpeciesId.BASCULIN]: [ - new SpeciesFormEvolution(SpeciesId.BASCULEGION, "white-striped", "female", 40, null, new GenderEvolutionCondition(Gender.FEMALE), SpeciesWildEvolutionDelay.VERY_LONG), - new SpeciesFormEvolution(SpeciesId.BASCULEGION, "white-striped", "male", 40, null, new GenderEvolutionCondition(Gender.MALE), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesFormEvolution(SpeciesId.BASCULEGION, "white-striped", "female", 40, null, [{key: EvoCondKey.GENDER, gender: Gender.FEMALE}], SpeciesWildEvolutionDelay.VERY_LONG), + new SpeciesFormEvolution(SpeciesId.BASCULEGION, "white-striped", "male", 40, null, [{key: EvoCondKey.GENDER, gender: Gender.MALE}], SpeciesWildEvolutionDelay.VERY_LONG) ], [SpeciesId.MINCCINO]: [ new SpeciesEvolution(SpeciesId.CINCCINO, 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.LONG) @@ -1650,14 +1618,14 @@ export const pokemonEvolutions: PokemonEvolutions = { ], [SpeciesId.ROCKRUFF]: [ new SpeciesFormEvolution(SpeciesId.LYCANROC, "own-tempo", "dusk", 25, null, null), - new SpeciesFormEvolution(SpeciesId.LYCANROC, "", "midday", 25, null, new TimeOfDayEvolutionCondition("day")), - new SpeciesFormEvolution(SpeciesId.LYCANROC, "", "midnight", 25, null, new TimeOfDayEvolutionCondition("night")) + new SpeciesFormEvolution(SpeciesId.LYCANROC, "", "midday", 25, null, {key: EvoCondKey.TIME, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}), + new SpeciesFormEvolution(SpeciesId.LYCANROC, "", "midnight", 25, null, {key: EvoCondKey.TIME, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}) ], [SpeciesId.STEENEE]: [ - new SpeciesEvolution(SpeciesId.TSAREENA, 28, null, new MoveEvolutionCondition(MoveId.STOMP), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(SpeciesId.TSAREENA, 28, null, {key: EvoCondKey.MOVE, move: MoveId.STOMP}, SpeciesWildEvolutionDelay.LONG) ], [SpeciesId.POIPOLE]: [ - new SpeciesEvolution(SpeciesId.NAGANADEL, 1, null, new MoveEvolutionCondition(MoveId.DRAGON_PULSE), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(SpeciesId.NAGANADEL, 1, null, {key: EvoCondKey.MOVE, move: MoveId.DRAGON_PULSE}, SpeciesWildEvolutionDelay.LONG) ], [SpeciesId.ALOLA_SANDSHREW]: [ new SpeciesEvolution(SpeciesId.ALOLA_SANDSLASH, 1, EvolutionItem.ICE_STONE, null, SpeciesWildEvolutionDelay.LONG) @@ -1671,7 +1639,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.APPLETUN, 1, EvolutionItem.SWEET_APPLE, null, SpeciesWildEvolutionDelay.LONG) ], [SpeciesId.CLOBBOPUS]: [ - new SpeciesEvolution(SpeciesId.GRAPPLOCT, 35, null, new MoveEvolutionCondition(MoveId.TAUNT)/*Once Taunt is implemented, change evo level to 1 and delay to LONG*/) + new SpeciesEvolution(SpeciesId.GRAPPLOCT, 35, null, {key: EvoCondKey.MOVE, move: MoveId.TAUNT}/*Once Taunt is implemented, change evo level to 1 and delay to LONG*/) ], [SpeciesId.SINISTEA]: [ new SpeciesFormEvolution(SpeciesId.POLTEAGEIST, "phony", "phony", 1, EvolutionItem.CRACKED_POT, null, SpeciesWildEvolutionDelay.LONG), @@ -1679,31 +1647,31 @@ export const pokemonEvolutions: PokemonEvolutions = { ], [SpeciesId.MILCERY]: [ new SpeciesFormEvolution(SpeciesId.ALCREMIE, "", "vanilla-cream", 1, EvolutionItem.STRAWBERRY_SWEET, - new BiomeEvolutionCondition([ BiomeId.TOWN, BiomeId.PLAINS, BiomeId.GRASS, BiomeId.TALL_GRASS, BiomeId.METROPOLIS ]), + {key: EvoCondKey.BIOME, biome: [ BiomeId.TOWN, BiomeId.PLAINS, BiomeId.GRASS, BiomeId.TALL_GRASS, BiomeId.METROPOLIS ]}, SpeciesWildEvolutionDelay.LONG), new SpeciesFormEvolution(SpeciesId.ALCREMIE, "", "ruby-cream", 1, EvolutionItem.STRAWBERRY_SWEET, - new BiomeEvolutionCondition([ BiomeId.BADLANDS, BiomeId.VOLCANO, BiomeId.GRAVEYARD, BiomeId.FACTORY, BiomeId.SLUM ]), + {key: EvoCondKey.BIOME, biome: [ BiomeId.BADLANDS, BiomeId.VOLCANO, BiomeId.GRAVEYARD, BiomeId.FACTORY, BiomeId.SLUM ]}, SpeciesWildEvolutionDelay.LONG), new SpeciesFormEvolution(SpeciesId.ALCREMIE, "", "matcha-cream", 1, EvolutionItem.STRAWBERRY_SWEET, - new BiomeEvolutionCondition([ BiomeId.FOREST, BiomeId.SWAMP, BiomeId.MEADOW, BiomeId.JUNGLE ]), + {key: EvoCondKey.BIOME, biome: [ BiomeId.FOREST, BiomeId.SWAMP, BiomeId.MEADOW, BiomeId.JUNGLE ]}, SpeciesWildEvolutionDelay.LONG), new SpeciesFormEvolution(SpeciesId.ALCREMIE, "", "mint-cream", 1, EvolutionItem.STRAWBERRY_SWEET, - new BiomeEvolutionCondition([ BiomeId.SEA, BiomeId.BEACH, BiomeId.LAKE, BiomeId.SEABED ]), + {key: EvoCondKey.BIOME, biome: [ BiomeId.SEA, BiomeId.BEACH, BiomeId.LAKE, BiomeId.SEABED ]}, SpeciesWildEvolutionDelay.LONG), new SpeciesFormEvolution(SpeciesId.ALCREMIE, "", "lemon-cream", 1, EvolutionItem.STRAWBERRY_SWEET, - new BiomeEvolutionCondition([ BiomeId.DESERT, BiomeId.POWER_PLANT, BiomeId.DOJO, BiomeId.RUINS, BiomeId.CONSTRUCTION_SITE ]), + {key: EvoCondKey.BIOME, biome: [ BiomeId.DESERT, BiomeId.POWER_PLANT, BiomeId.DOJO, BiomeId.RUINS, BiomeId.CONSTRUCTION_SITE ]}, SpeciesWildEvolutionDelay.LONG), new SpeciesFormEvolution(SpeciesId.ALCREMIE, "", "salted-cream", 1, EvolutionItem.STRAWBERRY_SWEET, - new BiomeEvolutionCondition([ BiomeId.MOUNTAIN, BiomeId.CAVE, BiomeId.ICE_CAVE, BiomeId.FAIRY_CAVE, BiomeId.SNOWY_FOREST ]), + {key: EvoCondKey.BIOME, biome: [ BiomeId.MOUNTAIN, BiomeId.CAVE, BiomeId.ICE_CAVE, BiomeId.FAIRY_CAVE, BiomeId.SNOWY_FOREST ]}, SpeciesWildEvolutionDelay.LONG), new SpeciesFormEvolution(SpeciesId.ALCREMIE, "", "ruby-swirl", 1, EvolutionItem.STRAWBERRY_SWEET, - new BiomeEvolutionCondition([ BiomeId.WASTELAND, BiomeId.LABORATORY ]), + {key: EvoCondKey.BIOME, biome: [ BiomeId.WASTELAND, BiomeId.LABORATORY ]}, SpeciesWildEvolutionDelay.LONG), new SpeciesFormEvolution(SpeciesId.ALCREMIE, "", "caramel-swirl", 1, EvolutionItem.STRAWBERRY_SWEET, - new BiomeEvolutionCondition([ BiomeId.TEMPLE, BiomeId.ISLAND ]), + {key: EvoCondKey.BIOME, biome: [ BiomeId.TEMPLE, BiomeId.ISLAND ]}, SpeciesWildEvolutionDelay.LONG), new SpeciesFormEvolution(SpeciesId.ALCREMIE, "", "rainbow-swirl", 1, EvolutionItem.STRAWBERRY_SWEET, - new BiomeEvolutionCondition([ BiomeId.ABYSS, BiomeId.SPACE, BiomeId.END ]), + {key: EvoCondKey.BIOME, biome: [ BiomeId.ABYSS, BiomeId.SPACE, BiomeId.END ]}, SpeciesWildEvolutionDelay.LONG) ], [SpeciesId.DURALUDON]: [ @@ -1723,10 +1691,10 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.HISUI_ELECTRODE, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG) ], [SpeciesId.HISUI_QWILFISH]: [ - new SpeciesEvolution(SpeciesId.OVERQWIL, 28, null, new MoveEvolutionCondition(MoveId.BARB_BARRAGE), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(SpeciesId.OVERQWIL, 28, null, {key: EvoCondKey.MOVE, move: MoveId.BARB_BARRAGE}, SpeciesWildEvolutionDelay.LONG) ], [SpeciesId.HISUI_SNEASEL]: [ - new SpeciesEvolution(SpeciesId.SNEASLER, 1, EvolutionItem.RAZOR_CLAW, new TimeOfDayEvolutionCondition("day") /* Razor claw at day*/, SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(SpeciesId.SNEASLER, 1, EvolutionItem.RAZOR_CLAW, {key: EvoCondKey.TIME, time: [TimeOfDay.DAWN, TimeOfDay.DAY]} /* Razor claw at day*/, SpeciesWildEvolutionDelay.VERY_LONG) ], [SpeciesId.CHARCADET]: [ new SpeciesEvolution(SpeciesId.ARMAROUGE, 1, EvolutionItem.AUSPICIOUS_ARMOR, null, SpeciesWildEvolutionDelay.LONG), @@ -1746,7 +1714,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesFormEvolution(SpeciesId.SINISTCHA, "artisan", "masterpiece", 1, EvolutionItem.MASTERPIECE_TEACUP, null, SpeciesWildEvolutionDelay.LONG) ], [SpeciesId.DIPPLIN]: [ - new SpeciesEvolution(SpeciesId.HYDRAPPLE, 1, null, new MoveEvolutionCondition(MoveId.DRAGON_CHEER), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(SpeciesId.HYDRAPPLE, 1, null, {key: EvoCondKey.MOVE, move: MoveId.DRAGON_CHEER}, SpeciesWildEvolutionDelay.VERY_LONG) ], [SpeciesId.KADABRA]: [ new SpeciesEvolution(SpeciesId.ALAKAZAM, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) @@ -1761,7 +1729,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.GENGAR, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [SpeciesId.ONIX]: [ - new SpeciesEvolution(SpeciesId.STEELIX, 1, EvolutionItem.LINKING_CORD, new MoveTypeEvolutionCondition(PokemonType.STEEL), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(SpeciesId.STEELIX, 1, EvolutionItem.LINKING_CORD, {key: EvoCondKey.MOVE_TYPE, pkmnType: PokemonType.STEEL}, SpeciesWildEvolutionDelay.VERY_LONG) ], [SpeciesId.RHYDON]: [ new SpeciesEvolution(SpeciesId.RHYPERIOR, 1, EvolutionItem.PROTECTOR, null, SpeciesWildEvolutionDelay.VERY_LONG) @@ -1770,7 +1738,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.KINGDRA, 1, EvolutionItem.DRAGON_SCALE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [SpeciesId.SCYTHER]: [ - new SpeciesEvolution(SpeciesId.SCIZOR, 1, EvolutionItem.LINKING_CORD, new MoveTypeEvolutionCondition(PokemonType.STEEL), SpeciesWildEvolutionDelay.VERY_LONG), + new SpeciesEvolution(SpeciesId.SCIZOR, 1, EvolutionItem.LINKING_CORD, {key: EvoCondKey.MOVE_TYPE, pkmnType: PokemonType.STEEL}, SpeciesWildEvolutionDelay.VERY_LONG), new SpeciesEvolution(SpeciesId.KLEAVOR, 1, EvolutionItem.BLACK_AUGURITE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [SpeciesId.ELECTABUZZ]: [ @@ -1792,9 +1760,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.DUSKNOIR, 1, EvolutionItem.REAPER_CLOTH, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [SpeciesId.CLAMPERL]: [ - // TODO: Change the SpeciesEvolutionConditions here to use a bespoke HeldItemEvolutionCondition after the modifier rework - new SpeciesEvolution(SpeciesId.HUNTAIL, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => p.getHeldItems().some(m => m.is("SpeciesStatBoosterModifier") && (m.type as SpeciesStatBoosterModifierType).key === "DEEP_SEA_TOOTH")), SpeciesWildEvolutionDelay.VERY_LONG), - new SpeciesEvolution(SpeciesId.GOREBYSS, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => p.getHeldItems().some(m => m.is("SpeciesStatBoosterModifier") && (m.type as SpeciesStatBoosterModifierType).key === "DEEP_SEA_SCALE")), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(SpeciesId.HUNTAIL, 1, EvolutionItem.LINKING_CORD, {key: EvoCondKey.HELD_ITEM, itemKey: "DEEP_SEA_TOOTH"}, SpeciesWildEvolutionDelay.VERY_LONG), + new SpeciesEvolution(SpeciesId.GOREBYSS, 1, EvolutionItem.LINKING_CORD, {key: EvoCondKey.HELD_ITEM, itemKey: "DEEP_SEA_SCALE"}, SpeciesWildEvolutionDelay.VERY_LONG) ], [SpeciesId.BOLDORE]: [ new SpeciesEvolution(SpeciesId.GIGALITH, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) @@ -1803,10 +1770,10 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.CONKELDURR, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [SpeciesId.KARRABLAST]: [ - new SpeciesEvolution(SpeciesId.ESCAVALIER, 1, EvolutionItem.LINKING_CORD, new CaughtEvolutionCondition(SpeciesId.SHELMET), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(SpeciesId.ESCAVALIER, 1, EvolutionItem.LINKING_CORD, {key: EvoCondKey.SPECIES_CAUGHT, speciesCaught: SpeciesId.SHELMET}, SpeciesWildEvolutionDelay.VERY_LONG) ], [SpeciesId.SHELMET]: [ - new SpeciesEvolution(SpeciesId.ACCELGOR, 1, EvolutionItem.LINKING_CORD, new CaughtEvolutionCondition(SpeciesId.KARRABLAST), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(SpeciesId.ACCELGOR, 1, EvolutionItem.LINKING_CORD, {key: EvoCondKey.SPECIES_CAUGHT, speciesCaught: SpeciesId.KARRABLAST}, SpeciesWildEvolutionDelay.VERY_LONG) ], [SpeciesId.SPRITZEE]: [ new SpeciesEvolution(SpeciesId.AROMATISSE, 1, EvolutionItem.SACHET, null, SpeciesWildEvolutionDelay.VERY_LONG) @@ -1824,66 +1791,66 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(SpeciesId.ALOLA_GOLEM, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [SpeciesId.PRIMEAPE]: [ - new SpeciesEvolution(SpeciesId.ANNIHILAPE, 35, null, new MoveEvolutionCondition(MoveId.RAGE_FIST), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(SpeciesId.ANNIHILAPE, 35, null, {key: EvoCondKey.MOVE, move: MoveId.RAGE_FIST}, SpeciesWildEvolutionDelay.VERY_LONG) ], [SpeciesId.GOLBAT]: [ - new SpeciesEvolution(SpeciesId.CROBAT, 1, null, new FriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(SpeciesId.CROBAT, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 120}, SpeciesWildEvolutionDelay.VERY_LONG) ], [SpeciesId.CHANSEY]: [ - new SpeciesEvolution(SpeciesId.BLISSEY, 1, null, new FriendshipEvolutionCondition(200), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(SpeciesId.BLISSEY, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 200}, SpeciesWildEvolutionDelay.LONG) ], [SpeciesId.PICHU]: [ - new SpeciesFormEvolution(SpeciesId.PIKACHU, "spiky", "partner", 1, null, new FriendshipEvolutionCondition(90), SpeciesWildEvolutionDelay.SHORT), - new SpeciesFormEvolution(SpeciesId.PIKACHU, "", "", 1, null, new FriendshipEvolutionCondition(90), SpeciesWildEvolutionDelay.SHORT), + new SpeciesFormEvolution(SpeciesId.PIKACHU, "spiky", "partner", 1, null, {key: EvoCondKey.FRIENDSHIP, value: 90}, SpeciesWildEvolutionDelay.SHORT), + new SpeciesFormEvolution(SpeciesId.PIKACHU, "", "", 1, null, {key: EvoCondKey.FRIENDSHIP, value: 90}, SpeciesWildEvolutionDelay.SHORT), ], [SpeciesId.CLEFFA]: [ - new SpeciesEvolution(SpeciesId.CLEFAIRY, 1, null, new FriendshipEvolutionCondition(160), SpeciesWildEvolutionDelay.SHORT) + new SpeciesEvolution(SpeciesId.CLEFAIRY, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 160}, SpeciesWildEvolutionDelay.SHORT) ], [SpeciesId.IGGLYBUFF]: [ - new SpeciesEvolution(SpeciesId.JIGGLYPUFF, 1, null, new FriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.SHORT) + new SpeciesEvolution(SpeciesId.JIGGLYPUFF, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 70}, SpeciesWildEvolutionDelay.SHORT) ], [SpeciesId.TOGEPI]: [ - new SpeciesEvolution(SpeciesId.TOGETIC, 1, null, new FriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.SHORT) + new SpeciesEvolution(SpeciesId.TOGETIC, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 70}, SpeciesWildEvolutionDelay.SHORT) ], [SpeciesId.AZURILL]: [ - new SpeciesEvolution(SpeciesId.MARILL, 1, null, new FriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.SHORT) + new SpeciesEvolution(SpeciesId.MARILL, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 70}, SpeciesWildEvolutionDelay.SHORT) ], [SpeciesId.BUDEW]: [ - new SpeciesEvolution(SpeciesId.ROSELIA, 1, null, new FriendshipTimeOfDayEvolutionCondition(70, "day"), SpeciesWildEvolutionDelay.SHORT) + new SpeciesEvolution(SpeciesId.ROSELIA, 1, null, [{key: EvoCondKey.FRIENDSHIP, value: 70}, {key: EvoCondKey.TIME, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}], SpeciesWildEvolutionDelay.SHORT) ], [SpeciesId.BUNEARY]: [ - new SpeciesEvolution(SpeciesId.LOPUNNY, 1, null, new FriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.MEDIUM) + new SpeciesEvolution(SpeciesId.LOPUNNY, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 70}, SpeciesWildEvolutionDelay.MEDIUM) ], [SpeciesId.CHINGLING]: [ - new SpeciesEvolution(SpeciesId.CHIMECHO, 1, null, new FriendshipTimeOfDayEvolutionCondition(90, "night"), SpeciesWildEvolutionDelay.MEDIUM) + new SpeciesEvolution(SpeciesId.CHIMECHO, 1, null, [{key: EvoCondKey.FRIENDSHIP, value: 90}, {key: EvoCondKey.TIME, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}], SpeciesWildEvolutionDelay.MEDIUM) ], [SpeciesId.HAPPINY]: [ - new SpeciesEvolution(SpeciesId.CHANSEY, 1, null, new FriendshipEvolutionCondition(160), SpeciesWildEvolutionDelay.SHORT) + new SpeciesEvolution(SpeciesId.CHANSEY, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 160}, SpeciesWildEvolutionDelay.SHORT) ], [SpeciesId.MUNCHLAX]: [ - new SpeciesEvolution(SpeciesId.SNORLAX, 1, null, new FriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(SpeciesId.SNORLAX, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 120}, SpeciesWildEvolutionDelay.LONG) ], [SpeciesId.RIOLU]: [ - new SpeciesEvolution(SpeciesId.LUCARIO, 1, null, new FriendshipTimeOfDayEvolutionCondition(120, "day"), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(SpeciesId.LUCARIO, 1, null, [{key: EvoCondKey.FRIENDSHIP, value: 120}, {key: EvoCondKey.TIME, time: [TimeOfDay.DAWN, TimeOfDay.DAY]}], SpeciesWildEvolutionDelay.LONG) ], [SpeciesId.WOOBAT]: [ - new SpeciesEvolution(SpeciesId.SWOOBAT, 1, null, new FriendshipEvolutionCondition(90), SpeciesWildEvolutionDelay.MEDIUM) + new SpeciesEvolution(SpeciesId.SWOOBAT, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 90}, SpeciesWildEvolutionDelay.MEDIUM) ], [SpeciesId.SWADLOON]: [ - new SpeciesEvolution(SpeciesId.LEAVANNY, 1, null, new FriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(SpeciesId.LEAVANNY, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 120}, SpeciesWildEvolutionDelay.LONG) ], [SpeciesId.TYPE_NULL]: [ - new SpeciesEvolution(SpeciesId.SILVALLY, 1, null, new FriendshipEvolutionCondition(100), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(SpeciesId.SILVALLY, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 100}, SpeciesWildEvolutionDelay.LONG) ], [SpeciesId.ALOLA_MEOWTH]: [ - new SpeciesEvolution(SpeciesId.ALOLA_PERSIAN, 1, null, new FriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(SpeciesId.ALOLA_PERSIAN, 1, null, {key: EvoCondKey.FRIENDSHIP, value: 120}, SpeciesWildEvolutionDelay.LONG) ], [SpeciesId.SNOM]: [ - new SpeciesEvolution(SpeciesId.FROSMOTH, 1, null, new FriendshipTimeOfDayEvolutionCondition(90, "night"), SpeciesWildEvolutionDelay.MEDIUM) + new SpeciesEvolution(SpeciesId.FROSMOTH, 1, null, [{key: EvoCondKey.FRIENDSHIP, value: 90}, {key: EvoCondKey.TIME, time: [TimeOfDay.DUSK, TimeOfDay.NIGHT]}], SpeciesWildEvolutionDelay.MEDIUM) ], [SpeciesId.GIMMIGHOUL]: [ - new SpeciesFormEvolution(SpeciesId.GHOLDENGO, "chest", "", 1, null, new TreasureEvolutionCondition(), SpeciesWildEvolutionDelay.VERY_LONG), - new SpeciesFormEvolution(SpeciesId.GHOLDENGO, "roaming", "", 1, null, new TreasureEvolutionCondition(), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesFormEvolution(SpeciesId.GHOLDENGO, "chest", "", 1, null, {key: EvoCondKey.EVO_TREASURE_TRACKER, value: 10}, SpeciesWildEvolutionDelay.VERY_LONG), + new SpeciesFormEvolution(SpeciesId.GHOLDENGO, "roaming", "", 1, null, {key: EvoCondKey.EVO_TREASURE_TRACKER, value: 10}, SpeciesWildEvolutionDelay.VERY_LONG) ] }; diff --git a/src/data/challenge.ts b/src/data/challenge.ts index 683fb48a9ba..3fdd83c185d 100644 --- a/src/data/challenge.ts +++ b/src/data/challenge.ts @@ -4,7 +4,8 @@ import i18next from "i18next"; import type { DexAttrProps, GameData } from "#app/system/game-data"; import { defaultStarterSpecies } from "#app/constants"; import type PokemonSpecies from "#app/data/pokemon-species"; -import { getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; +import { getPokemonSpeciesForm } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { speciesStarterCosts } from "#app/data/balance/starters"; import type Pokemon from "#app/field/pokemon"; import { PokemonMove } from "./moves/pokemon-move"; diff --git a/src/data/daily-run.ts b/src/data/daily-run.ts index fc60e5795dc..e869ba7f28f 100644 --- a/src/data/daily-run.ts +++ b/src/data/daily-run.ts @@ -5,7 +5,8 @@ import { PlayerPokemon } from "#app/field/pokemon"; import type { Starter } from "#app/ui/starter-select-ui-handler"; import { randSeedGauss, randSeedInt, randSeedItem, getEnumValues } from "#app/utils/common"; import type { PokemonSpeciesForm } from "#app/data/pokemon-species"; -import PokemonSpecies, { getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; +import PokemonSpecies, { getPokemonSpeciesForm } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { speciesStarterCosts } from "#app/data/balance/starters"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; import { BiomeId } from "#enums/biome-id"; diff --git a/src/data/data-lists.ts b/src/data/data-lists.ts index 4d482dc2d7d..ed172846fe1 100644 --- a/src/data/data-lists.ts +++ b/src/data/data-lists.ts @@ -1,9 +1,11 @@ +import type PokemonSpecies from "#app/data/pokemon-species"; import type { ModifierTypes } from "#app/modifier/modifier-type"; import type { Ability } from "./abilities/ability"; import type Move from "./moves/move"; export const allAbilities: Ability[] = []; export const allMoves: Move[] = []; +export const allSpecies: PokemonSpecies[] = []; // TODO: Figure out what this is used for and provide an appropriate tsdoc comment export const modifierTypes = {} as ModifierTypes; diff --git a/src/data/egg.ts b/src/data/egg.ts index 67cdb7b1344..a6e2e04a5fe 100644 --- a/src/data/egg.ts +++ b/src/data/egg.ts @@ -1,7 +1,7 @@ import type BattleScene from "#app/battle-scene"; import { globalScene } from "#app/global-scene"; import type PokemonSpecies from "#app/data/pokemon-species"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { speciesStarterCosts } from "#app/data/balance/starters"; import { VariantTier } from "#enums/variant-tier"; import { randInt, randomString, randSeedInt, getIvsFromId } from "#app/utils/common"; diff --git a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts index e3741226335..bec75288837 100644 --- a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts +++ b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts @@ -22,7 +22,7 @@ import { queueEncounterMessage } from "#app/data/mystery-encounters/utils/encoun import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { BerryModifier, PokemonInstantReviveModifier } from "#app/modifier/modifier"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { MoveId } from "#enums/move-id"; import { BattlerTagType } from "#enums/battler-tag-type"; import { randInt } from "#app/utils/common"; diff --git a/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts b/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts index 271346616d1..f8a904cdb45 100644 --- a/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts +++ b/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts @@ -18,7 +18,7 @@ import { } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import { getHighestStatTotalPlayerPokemon } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import { EXTORTION_ABILITIES, EXTORTION_MOVES } from "#app/data/mystery-encounters/requirements/requirement-groups"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { speciesStarterCosts } from "#app/data/balance/starters"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; diff --git a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts index b873e30fe0c..9bdaa603540 100644 --- a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts +++ b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts @@ -22,7 +22,7 @@ import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-en import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { SpeciesId } from "#enums/species-id"; import { TrainerType } from "#enums/trainer-type"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { AbilityId } from "#enums/ability-id"; import { applyAbilityOverrideToPokemon, diff --git a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts index 42af5339a80..c68e395b379 100644 --- a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts +++ b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts @@ -19,7 +19,7 @@ import { getEncounterPokemonLevelForWave, STANDARD_ENCOUNTER_BOOSTED_LEVEL_MODIFIER, } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { TrainerSlot } from "#enums/trainer-slot"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; diff --git a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts index 002b38f445d..4056ba3532e 100644 --- a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts +++ b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts @@ -4,7 +4,7 @@ import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { SpeciesId } from "#enums/species-id"; import { globalScene } from "#app/global-scene"; import { modifierTypes } from "#app/data/data-lists"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; diff --git a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts index 692ffe6e80e..842fc9d73bd 100644 --- a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts +++ b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts @@ -15,7 +15,7 @@ import { updatePlayerMoney, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { applyModifierTypeToPlayerPokemon } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; diff --git a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts index 94dc4ab6153..e8900f8def4 100644 --- a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts +++ b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts @@ -20,7 +20,7 @@ import { TypeRequirement, } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import { SpeciesId } from "#enums/species-id"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { Gender } from "#app/data/gender"; import { PokemonType } from "#enums/pokemon-type"; import { BattlerIndex } from "#enums/battler-index"; diff --git a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts index 48557541512..c57232402dd 100644 --- a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts +++ b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts @@ -14,7 +14,7 @@ import { TrainerSlot } from "#enums/trainer-slot"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { FieldPosition } from "#enums/field-position"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { MoneyRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import { queueEncounterMessage, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; diff --git a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts index 0393bcdaa62..6bbc1a68772 100644 --- a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts +++ b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts @@ -16,7 +16,8 @@ import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-en import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { SpeciesId } from "#enums/species-id"; import type PokemonSpecies from "#app/data/pokemon-species"; -import { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; +import { allSpecies } from "#app/data/data-lists"; import { getTypeRgb } from "#app/data/type"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; diff --git a/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts b/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts index 8eea0623cd4..2b54b0a42f5 100644 --- a/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts +++ b/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts @@ -1,4 +1,4 @@ -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; diff --git a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts index 022b0125fde..321e65d7008 100644 --- a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts @@ -14,7 +14,7 @@ import { getHighestLevelPlayerPokemon, koPlayerPokemon, } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { ModifierTier } from "#enums/modifier-tier"; import { randSeedInt } from "#app/utils/common"; diff --git a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts index d324e9f9b6c..207e6ca400d 100644 --- a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts +++ b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts @@ -17,7 +17,7 @@ import { PokeballType } from "#enums/pokeball"; import { PlayerGender } from "#enums/player-gender"; import { NumberHolder, randSeedInt } from "#app/utils/common"; import type PokemonSpecies from "#app/data/pokemon-species"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { MoneyRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import { doPlayerFlee, diff --git a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts index 6b6cd71af1f..4169fd6d7c5 100644 --- a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts +++ b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts @@ -24,7 +24,7 @@ import { MoveId } from "#enums/move-id"; import { BattlerIndex } from "#enums/battler-index"; import { PokemonMove } from "#app/data/moves/pokemon-move"; import { AiType } from "#enums/ai-type"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { BerryType } from "#enums/berry-type"; diff --git a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts index 0676b40c548..03c09f6918e 100644 --- a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts @@ -15,7 +15,7 @@ import { BiomeId } from "#enums/biome-id"; import { TrainerType } from "#enums/trainer-type"; import i18next from "i18next"; import { SpeciesId } from "#enums/species-id"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { speciesStarterCosts } from "#app/data/balance/starters"; import { Nature } from "#enums/nature"; import { MoveId } from "#enums/move-id"; diff --git a/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts b/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts index 0ad209ae4c6..c3bcf9ceb24 100644 --- a/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts @@ -15,7 +15,7 @@ import { getSpriteKeysFromPokemon, } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import type PokemonSpecies from "#app/data/pokemon-species"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { speciesStarterCosts } from "#app/data/balance/starters"; import { SpeciesId } from "#enums/species-id"; import { PokeballType } from "#enums/pokeball"; diff --git a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts index adf4f9dde8f..37d16075543 100644 --- a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts @@ -13,7 +13,7 @@ import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { globalScene } from "#app/global-scene"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { SpeciesId } from "#enums/species-id"; import { Nature } from "#enums/nature"; import type Pokemon from "#app/field/pokemon"; diff --git a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts index e2c87d8c0ae..eba8a6ba00e 100644 --- a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts @@ -17,7 +17,7 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { TrainerType } from "#enums/trainer-type"; import { SpeciesId } from "#enums/species-id"; import { AbilityId } from "#enums/ability-id"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { MoveId } from "#enums/move-id"; import { Nature } from "#enums/nature"; import { PokemonType } from "#enums/pokemon-type"; diff --git a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts index 62413b96523..e2a740c4900 100644 --- a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts +++ b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts @@ -22,7 +22,7 @@ import { applyModifierTypeToPlayerPokemon } from "#app/data/mystery-encounters/u import { showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import i18next from "#app/plugins/i18n"; import { ModifierTier } from "#enums/modifier-tier"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { MoveId } from "#enums/move-id"; import { BattlerIndex } from "#enums/battler-index"; import { PokemonMove } from "#app/data/moves/pokemon-move"; diff --git a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts index 83e876d1aa8..1ba756c7f5d 100644 --- a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts +++ b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts @@ -19,7 +19,8 @@ import type Pokemon from "#app/field/pokemon"; import { PokemonMove } from "#app/data/moves/pokemon-move"; import { NumberHolder, isNullOrUndefined, randSeedInt, randSeedShuffle } from "#app/utils/common"; import type PokemonSpecies from "#app/data/pokemon-species"; -import { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; +import { allSpecies } from "#app/data/data-lists"; import type { PokemonHeldItemModifier } from "#app/modifier/modifier"; import { HiddenAbilityRateBoosterModifier, PokemonFormChangeItemModifier } from "#app/modifier/modifier"; import { achvs } from "#app/system/achv"; diff --git a/src/data/mystery-encounters/mystery-encounter-requirements.ts b/src/data/mystery-encounters/mystery-encounter-requirements.ts index a6e6e84846f..07fd155b2b2 100644 --- a/src/data/mystery-encounters/mystery-encounter-requirements.ts +++ b/src/data/mystery-encounters/mystery-encounter-requirements.ts @@ -1,6 +1,5 @@ import { globalScene } from "#app/global-scene"; import { allAbilities } from "../data-lists"; -import { EvolutionItem, pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { Nature } from "#enums/nature"; import { pokemonFormChanges } from "#app/data/pokemon-forms"; import { SpeciesFormChangeItemTrigger } from "../pokemon-forms/form-change-triggers"; @@ -16,7 +15,6 @@ import type { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { SpeciesId } from "#enums/species-id"; -import { SpeciesFormKey } from "#enums/species-form-key"; import { TimeOfDay } from "#enums/time-of-day"; export interface EncounterRequirement { @@ -834,70 +832,6 @@ export class CanFormChangeWithItemRequirement extends EncounterPokemonRequiremen } } -export class CanEvolveWithItemRequirement extends EncounterPokemonRequirement { - requiredEvolutionItem: EvolutionItem[]; - minNumberOfPokemon: number; - invertQuery: boolean; - - constructor(evolutionItems: EvolutionItem | EvolutionItem[], minNumberOfPokemon = 1, invertQuery = false) { - super(); - this.minNumberOfPokemon = minNumberOfPokemon; - this.invertQuery = invertQuery; - this.requiredEvolutionItem = coerceArray(evolutionItems); - } - - override meetsRequirement(): boolean { - const partyPokemon = globalScene.getPlayerParty(); - if (isNullOrUndefined(partyPokemon) || this.requiredEvolutionItem?.length < 0) { - return false; - } - return this.queryParty(partyPokemon).length >= this.minNumberOfPokemon; - } - - filterByEvo(pokemon, evolutionItem) { - if ( - pokemonEvolutions.hasOwnProperty(pokemon.species.speciesId) && - pokemonEvolutions[pokemon.species.speciesId].filter( - e => e.item === evolutionItem && (!e.condition || e.condition.predicate(pokemon)), - ).length && - pokemon.getFormKey() !== SpeciesFormKey.GIGANTAMAX - ) { - return true; - } - - return ( - pokemon.isFusion() && - pokemonEvolutions.hasOwnProperty(pokemon.fusionSpecies.speciesId) && - pokemonEvolutions[pokemon.fusionSpecies.speciesId].filter( - e => e.item === evolutionItem && (!e.condition || e.condition.predicate(pokemon)), - ).length && - pokemon.getFusionFormKey() !== SpeciesFormKey.GIGANTAMAX - ); - } - - override queryParty(partyPokemon: PlayerPokemon[]): PlayerPokemon[] { - if (!this.invertQuery) { - return partyPokemon.filter( - pokemon => - this.requiredEvolutionItem.filter(evolutionItem => this.filterByEvo(pokemon, evolutionItem)).length > 0, - ); - } - // for an inverted query, we only want to get the pokemon that don't have ANY of the listed evolutionItemss - return partyPokemon.filter( - pokemon => - this.requiredEvolutionItem.filter(evolutionItems => this.filterByEvo(pokemon, evolutionItems)).length === 0, - ); - } - - override getDialogueToken(pokemon?: PlayerPokemon): [string, string] { - const requiredItems = this.requiredEvolutionItem.filter(evoItem => this.filterByEvo(pokemon, evoItem)); - if (requiredItems.length > 0) { - return ["evolutionItem", EvolutionItem[requiredItems[0]]]; - } - return ["evolutionItem", ""]; - } -} - export class HeldItemRequirement extends EncounterPokemonRequirement { requiredHeldItemModifiers: string[]; minNumberOfPokemon: number; diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index eaa4f08ef70..bb74f11ce60 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -48,7 +48,7 @@ import type HeldModifierConfig from "#app/@types/held-modifier-config"; import type { Variant } from "#app/sprites/variant"; import { StatusEffect } from "#enums/status-effect"; import { globalScene } from "#app/global-scene"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { PokemonType } from "#enums/pokemon-type"; import { getNatureName } from "#app/data/nature"; import { getPokemonNameWithAffix } from "#app/messages"; diff --git a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts index 4671869a2ba..93abd432ef5 100644 --- a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts @@ -20,7 +20,7 @@ import { PartyUiMode } from "#app/ui/party-ui-handler"; import { SpeciesId } from "#enums/species-id"; import type { PokemonType } from "#enums/pokemon-type"; import type PokemonSpecies from "#app/data/pokemon-species"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { speciesStarterCosts } from "#app/data/balance/starters"; import { getEncounterText, diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index bb6ede7731d..8e7e029fd56 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -42,6 +42,8 @@ import { starterPassiveAbilities } from "#app/data/balance/passives"; import { loadPokemonVariantAssets } from "#app/sprites/pokemon-sprite"; import { hasExpSprite } from "#app/sprites/sprite-utils"; import { Gender } from "./gender"; +import { allSpecies } from "#app/data/data-lists"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; export enum Region { NORMAL, @@ -82,24 +84,6 @@ export const normalForm: SpeciesId[] = [ SpeciesId.CALYREX, ]; -/** - * Gets the {@linkcode PokemonSpecies} object associated with the {@linkcode SpeciesId} enum given - * @param species - The {@linkcode SpeciesId} to fetch. - * If an array of `SpeciesId`s is passed (such as for named trainer spawn pools), - * one will be selected at random. - * @returns The associated {@linkcode PokemonSpecies} object - */ -export function getPokemonSpecies(species: SpeciesId | SpeciesId[]): PokemonSpecies { - if (Array.isArray(species)) { - // TODO: this RNG roll should not be handled by this function - species = species[Math.floor(Math.random() * species.length)]; - } - if (species >= 2000) { - return allSpecies.find(s => s.speciesId === species)!; // TODO: is this bang correct? - } - return allSpecies[species - 1]; -} - export function getPokemonSpeciesForm(species: SpeciesId, formIndex: number): PokemonSpeciesForm { const retSpecies: PokemonSpecies = species >= 2000 @@ -1449,8 +1433,6 @@ export function getPokerusStarters(): PokemonSpecies[] { return pokerusStarters; } -export const allSpecies: PokemonSpecies[] = []; - // biome-ignore format: manually formatted export function initSpecies() { allSpecies.push( diff --git a/src/data/trainers/trainer-config.ts b/src/data/trainers/trainer-config.ts index 063dddafee8..6786aa00ef7 100644 --- a/src/data/trainers/trainer-config.ts +++ b/src/data/trainers/trainer-config.ts @@ -10,7 +10,7 @@ import { randSeedIntRange, } from "#app/utils/common"; import { pokemonEvolutions, pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { tmSpecies } from "#app/data/balance/tms"; import { doubleBattleDialogue } from "../double-battle-dialogue"; import { TrainerVariant } from "#enums/trainer-variant"; diff --git a/src/field/arena.ts b/src/field/arena.ts index aece908d653..8d7e5037852 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -3,7 +3,7 @@ import type { BiomeTierTrainerPools, PokemonPools } from "#app/data/balance/biom import { biomePokemonPools, BiomePoolTier, biomeTrainerPools } from "#app/data/balance/biomes"; import { randSeedInt, NumberHolder, isNullOrUndefined, type Constructor } from "#app/utils/common"; import type PokemonSpecies from "#app/data/pokemon-species"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { getTerrainClearMessage, getTerrainStartMessage, diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index fe89142b5c6..e9cc4f70d70 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -15,12 +15,8 @@ import { allMoves } from "#app/data/data-lists"; import { MoveTarget } from "#enums/MoveTarget"; import { MoveCategory } from "#enums/MoveCategory"; import type { PokemonSpeciesForm } from "#app/data/pokemon-species"; -import { - default as PokemonSpecies, - getFusedSpeciesName, - getPokemonSpecies, - getPokemonSpeciesForm, -} from "#app/data/pokemon-species"; +import { default as PokemonSpecies, getFusedSpeciesName, getPokemonSpeciesForm } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { getStarterValueFriendshipCap, speciesStarterCosts } from "#app/data/balance/starters"; import { NumberHolder, @@ -79,11 +75,12 @@ import { import { PokeballType } from "#enums/pokeball"; import { Gender } from "#app/data/gender"; import { Status, getRandomStatus } from "#app/data/status-effect"; -import type { SpeciesFormEvolution, SpeciesEvolutionCondition } from "#app/data/balance/pokemon-evolutions"; +import type { SpeciesFormEvolution } from "#app/data/balance/pokemon-evolutions"; import { pokemonEvolutions, pokemonPrevolutions, FusionSpeciesFormEvolution, + validateShedinjaEvo, } from "#app/data/balance/pokemon-evolutions"; import { reverseCompatibleTms, tmSpecies, tmPoolTiers } from "#app/data/balance/tms"; import { @@ -370,7 +367,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.metWave = dataSource.metWave ?? (this.metBiome === -1 ? -1 : 0); this.pauseEvolutions = dataSource.pauseEvolutions; this.pokerus = !!dataSource.pokerus; - this.evoCounter = dataSource.evoCounter ?? 0; this.fusionSpecies = dataSource.fusionSpecies instanceof PokemonSpecies ? dataSource.fusionSpecies @@ -2518,14 +2514,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (pokemonEvolutions.hasOwnProperty(this.species.speciesId)) { const evolutions = pokemonEvolutions[this.species.speciesId]; for (const e of evolutions) { - if ( - !e.item && - this.level >= e.level && - (isNullOrUndefined(e.preFormKey) || this.getFormKey() === e.preFormKey) - ) { - if (e.condition === null || (e.condition as SpeciesEvolutionCondition).predicate(this)) { - return e; - } + if (e.validate(this)) { + return e; } } } @@ -2535,14 +2525,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { e => new FusionSpeciesFormEvolution(this.species.speciesId, e), ); for (const fe of fusionEvolutions) { - if ( - !fe.item && - this.level >= fe.level && - (isNullOrUndefined(fe.preFormKey) || this.getFusionFormKey() === fe.preFormKey) - ) { - if (fe.condition === null || (fe.condition as SpeciesEvolutionCondition).predicate(this)) { - return fe; - } + if (fe.validate(this)) { + return fe; } } } @@ -5487,6 +5471,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } this.turnData.berriesEaten.push(berryType); } + + getPersistentTreasureCount(): number { + return ( + this.getHeldItems().filter(m => m.is("DamageMoneyRewardModifier")).length + + globalScene.findModifiers(m => m.is("MoneyMultiplierModifier") || m.is("ExtraModifierModifier")).length + ); + } } export class PlayerPokemon extends Pokemon { @@ -5825,7 +5816,7 @@ export class PlayerPokemon extends Pokemon { if (evoSpecies?.speciesId === SpeciesId.NINCADA && evolution.speciesId === SpeciesId.NINJASK) { const newEvolution = pokemonEvolutions[evoSpecies.speciesId][1]; - if (newEvolution.condition?.predicate(this)) { + if (validateShedinjaEvo()) { const newPokemon = globalScene.addPlayerPokemon( this.species, this.level, @@ -5855,7 +5846,6 @@ export class PlayerPokemon extends Pokemon { newPokemon.fusionLuck = this.fusionLuck; newPokemon.fusionTeraType = this.fusionTeraType; newPokemon.usedTMs = this.usedTMs; - newPokemon.evoCounter = this.evoCounter; globalScene.getPlayerParty().push(newPokemon); newPokemon.evolve(!isFusion ? newEvolution : new FusionSpeciesFormEvolution(this.id, newEvolution), evoSpecies); @@ -5944,7 +5934,6 @@ export class PlayerPokemon extends Pokemon { this.fusionGender = pokemon.gender; this.fusionLuck = pokemon.luck; this.fusionCustomPokemonData = pokemon.customPokemonData; - this.evoCounter = Math.max(pokemon.evoCounter, this.evoCounter); if (pokemon.pauseEvolutions || this.pauseEvolutions) { this.pauseEvolutions = true; } @@ -6100,18 +6089,6 @@ export class EnemyPokemon extends Pokemon { this.luck = (this.shiny ? this.variant + 1 : 0) + (this.fusionShiny ? this.fusionVariant + 1 : 0); - let prevolution: SpeciesId; - let speciesId = species.speciesId; - while ((prevolution = pokemonPrevolutions[speciesId])) { - const evolution = pokemonEvolutions[prevolution].find( - pe => pe.speciesId === speciesId && (!pe.evoFormKey || pe.evoFormKey === this.getFormKey()), - ); - if (evolution?.condition?.enforceFunc) { - evolution.condition.enforceFunc(this); - } - speciesId = prevolution; - } - if (this.hasTrainer() && globalScene.currentBattle) { const { waveIndex } = globalScene.currentBattle; const ivs: number[] = []; diff --git a/src/field/trainer.ts b/src/field/trainer.ts index 8d950b08507..b64821d259a 100644 --- a/src/field/trainer.ts +++ b/src/field/trainer.ts @@ -1,7 +1,7 @@ import { globalScene } from "#app/global-scene"; import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; import type PokemonSpecies from "#app/data/pokemon-species"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import type { TrainerConfig } from "#app/data/trainers/trainer-config"; import type { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate"; import { trainerConfigs } from "#app/data/trainers/trainer-config"; diff --git a/src/game-mode.ts b/src/game-mode.ts index 9722d564e09..da6ef62e33c 100644 --- a/src/game-mode.ts +++ b/src/game-mode.ts @@ -5,7 +5,7 @@ import type { Challenge } from "./data/challenge"; import { allChallenges, applyChallenges, copyChallenge } from "./data/challenge"; import { ChallengeType } from "#enums/challenge-type"; import type PokemonSpecies from "./data/pokemon-species"; -import { allSpecies } from "./data/pokemon-species"; +import { allSpecies } from "#app/data/data-lists"; import type { Arena } from "./field/arena"; import Overrides from "#app/overrides"; import { isNullOrUndefined, randSeedInt, randSeedItem } from "#app/utils/common"; diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index cf373e6441a..a22486210b0 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -1218,12 +1218,8 @@ export class EvolutionItemModifierType extends PokemonModifierType implements Ge (pokemon: PlayerPokemon) => { if ( pokemonEvolutions.hasOwnProperty(pokemon.species.speciesId) && - pokemonEvolutions[pokemon.species.speciesId].filter( - e => - e.item === this.evolutionItem && - (!e.condition || e.condition.predicate(pokemon)) && - (e.preFormKey === null || e.preFormKey === pokemon.getFormKey()), - ).length && + pokemonEvolutions[pokemon.species.speciesId].filter(e => e.validate(pokemon, false, this.evolutionItem)) + .length && pokemon.getFormKey() !== SpeciesFormKey.GIGANTAMAX ) { return null; @@ -1232,12 +1228,8 @@ export class EvolutionItemModifierType extends PokemonModifierType implements Ge pokemon.isFusion() && pokemon.fusionSpecies && pokemonEvolutions.hasOwnProperty(pokemon.fusionSpecies.speciesId) && - pokemonEvolutions[pokemon.fusionSpecies.speciesId].filter( - e => - e.item === this.evolutionItem && - (!e.condition || e.condition.predicate(pokemon)) && - (e.preFormKey === null || e.preFormKey === pokemon.getFusionFormKey()), - ).length && + pokemonEvolutions[pokemon.fusionSpecies.speciesId].filter(e => e.validate(pokemon, true, this.evolutionItem)) + .length && pokemon.getFusionFormKey() !== SpeciesFormKey.GIGANTAMAX ) { return null; @@ -1597,12 +1589,7 @@ class EvolutionItemModifierTypeGenerator extends ModifierTypeGenerator { ) .flatMap(p => { const evolutions = pokemonEvolutions[p.species.speciesId]; - return evolutions.filter( - e => - e.item !== EvolutionItem.NONE && - (e.evoFormKey === null || (e.preFormKey || "") === p.getFormKey()) && - (!e.condition || e.condition.predicate(p)), - ); + return evolutions.filter(e => e.isValidItemEvolution(p)); }), party .filter( @@ -1616,16 +1603,11 @@ class EvolutionItemModifierTypeGenerator extends ModifierTypeGenerator { ) .flatMap(p => { const evolutions = pokemonEvolutions[p.fusionSpecies!.speciesId]; - return evolutions.filter( - e => - e.item !== EvolutionItem.NONE && - (e.evoFormKey === null || (e.preFormKey || "") === p.getFusionFormKey()) && - (!e.condition || e.condition.predicate(p)), - ); + return evolutions.filter(e => e.validate(p, true)); }), ] .flat() - .flatMap(e => e.item) + .flatMap(e => e.evoItem) .filter(i => (!!i && i > 50) === rare); if (!evolutionItemPool.length) { @@ -1892,7 +1874,8 @@ const modifierTypeInitObj = Object.freeze({ new PokemonHeldItemModifierType( "modifierType:ModifierType.EVOLUTION_TRACKER_GIMMIGHOUL", "relic_gold", - (type, args) => new EvoTrackerModifier(type, (args[0] as Pokemon).id, SpeciesId.GIMMIGHOUL, 10), + (type, args) => + new EvoTrackerModifier(type, (args[0] as Pokemon).id, SpeciesId.GIMMIGHOUL, 10, (args[1] as number) ?? 1), ), MEGA_BRACELET: () => diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index e11f2c07ce8..54b7323569a 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -772,6 +772,10 @@ export abstract class PokemonHeldItemModifier extends PersistentModifier { return this.getMaxHeldItemCount(pokemon); } + getSpecies(): SpeciesId | null { + return null; + } + abstract getMaxHeldItemCount(pokemon?: Pokemon): number; } @@ -918,27 +922,14 @@ export class EvoTrackerModifier extends PokemonHeldItemModifier { return true; } - getIconStackText(virtual?: boolean): Phaser.GameObjects.BitmapText | null { - if (this.getMaxStackCount() === 1 || (virtual && !this.virtualStackCount)) { - return null; - } + getIconStackText(_virtual?: boolean): Phaser.GameObjects.BitmapText | null { + const pokemon = this.getPokemon(); - const pokemon = globalScene.getPokemonById(this.pokemonId); + const count = (pokemon?.getPersistentTreasureCount() || 0) + this.getStackCount(); - this.stackCount = pokemon - ? pokemon.evoCounter + - pokemon.getHeldItems().filter(m => m instanceof DamageMoneyRewardModifier).length + - globalScene.findModifiers( - m => - m instanceof MoneyMultiplierModifier || - m instanceof ExtraModifierModifier || - m instanceof TempExtraModifierModifier, - ).length - : this.stackCount; - - const text = globalScene.add.bitmapText(10, 15, "item-count", this.stackCount.toString(), 11); + const text = globalScene.add.bitmapText(10, 15, "item-count", count.toString(), 11); text.letterSpacing = -0.5; - if (this.getStackCount() >= this.required) { + if (count >= this.required) { text.setTint(0xf89890); } text.setOrigin(0, 0); @@ -946,18 +937,13 @@ export class EvoTrackerModifier extends PokemonHeldItemModifier { return text; } - getMaxHeldItemCount(pokemon: Pokemon): number { - this.stackCount = - pokemon.evoCounter + - pokemon.getHeldItems().filter(m => m instanceof DamageMoneyRewardModifier).length + - globalScene.findModifiers( - m => - m instanceof MoneyMultiplierModifier || - m instanceof ExtraModifierModifier || - m instanceof TempExtraModifierModifier, - ).length; + getMaxHeldItemCount(_pokemon: Pokemon): number { return 999; } + + override getSpecies(): SpeciesId { + return this.species; + } } /** @@ -2402,19 +2388,13 @@ export class EvolutionItemModifier extends ConsumablePokemonModifier { override apply(playerPokemon: PlayerPokemon): boolean { let matchingEvolution = pokemonEvolutions.hasOwnProperty(playerPokemon.species.speciesId) ? pokemonEvolutions[playerPokemon.species.speciesId].find( - e => - e.item === this.type.evolutionItem && - (e.evoFormKey === null || (e.preFormKey || "") === playerPokemon.getFormKey()) && - (!e.condition || e.condition.predicate(playerPokemon)), + e => e.evoItem === this.type.evolutionItem && e.validate(playerPokemon, false, e.item!), ) : null; if (!matchingEvolution && playerPokemon.isFusion()) { matchingEvolution = pokemonEvolutions[playerPokemon.fusionSpecies!.speciesId].find( - e => - e.item === this.type.evolutionItem && // TODO: is the bang correct? - (e.evoFormKey === null || (e.preFormKey || "") === playerPokemon.getFusionFormKey()) && - (!e.condition || e.condition.predicate(playerPokemon)), + e => e.evoItem === this.type.evolutionItem && e.validate(playerPokemon, true, e.item!), ); if (matchingEvolution) { matchingEvolution = new FusionSpeciesFormEvolution(playerPokemon.species.speciesId, matchingEvolution); @@ -2934,11 +2914,10 @@ export class MoneyRewardModifier extends ConsumableModifier { globalScene.getPlayerParty().map(p => { if (p.species?.speciesId === SpeciesId.GIMMIGHOUL || p.fusionSpecies?.speciesId === SpeciesId.GIMMIGHOUL) { - p.evoCounter - ? (p.evoCounter += Math.min(Math.floor(this.moneyMultiplier), 3)) - : (p.evoCounter = Math.min(Math.floor(this.moneyMultiplier), 3)); + const factor = Math.min(Math.floor(this.moneyMultiplier), 3); const modifier = getModifierType(modifierTypes.EVOLUTION_TRACKER_GIMMIGHOUL).newModifier( p, + factor, ) as EvoTrackerModifier; globalScene.addModifier(modifier); } diff --git a/src/phases/game-over-phase.ts b/src/phases/game-over-phase.ts index 2cd8bf120b5..eaf1e4f58d7 100644 --- a/src/phases/game-over-phase.ts +++ b/src/phases/game-over-phase.ts @@ -4,7 +4,7 @@ import { globalScene } from "#app/global-scene"; import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { getCharVariantFromDialogue } from "#app/data/dialogue"; import type PokemonSpecies from "#app/data/pokemon-species"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { trainerConfigs } from "#app/data/trainers/trainer-config"; import type Pokemon from "#app/field/pokemon"; import { modifierTypes } from "#app/data/data-lists"; diff --git a/src/phases/select-starter-phase.ts b/src/phases/select-starter-phase.ts index e7e87f5a25f..76247c14ce0 100644 --- a/src/phases/select-starter-phase.ts +++ b/src/phases/select-starter-phase.ts @@ -3,7 +3,7 @@ import { applyChallenges } from "#app/data/challenge"; import { ChallengeType } from "#enums/challenge-type"; import { Gender } from "#app/data/gender"; import { SpeciesFormChangeMoveLearnedTrigger } from "#app/data/pokemon-forms/form-change-triggers"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { overrideHeldItems, overrideModifiers } from "#app/modifier/modifier"; import Overrides from "#app/overrides"; import { Phase } from "#app/phase"; diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 00b46b9e5f4..e933c5704f9 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -6,7 +6,8 @@ import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; import type PokemonSpecies from "#app/data/pokemon-species"; -import { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; +import { allSpecies } from "#app/data/data-lists"; import { speciesStarterCosts } from "#app/data/balance/starters"; import { randInt, getEnumKeys, isLocal, executeIf, fixedInt, randSeedItem, NumberHolder } from "#app/utils/common"; import Overrides from "#app/overrides"; diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index 7571f0cc82f..050da57e0be 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -3,7 +3,8 @@ import { globalScene } from "#app/global-scene"; import type { Gender } from "../data/gender"; import { Nature } from "#enums/nature"; import { PokeballType } from "#enums/pokeball"; -import { getPokemonSpecies, getPokemonSpeciesForm } from "../data/pokemon-species"; +import { getPokemonSpeciesForm } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { Status } from "../data/status-effect"; import Pokemon, { EnemyPokemon, PokemonBattleData, PokemonSummonData } from "../field/pokemon"; import { PokemonMove } from "#app/data/moves/pokemon-move"; @@ -45,7 +46,6 @@ export default class PokemonData { public pauseEvolutions: boolean; public pokerus: boolean; public usedTMs: MoveId[]; - public evoCounter: number; public teraType: PokemonType; public isTerastallized: boolean; public stellarTypesBoosted: PokemonType[]; @@ -118,7 +118,6 @@ export default class PokemonData { this.pauseEvolutions = !!source.pauseEvolutions; this.pokerus = !!source.pokerus; this.usedTMs = source.usedTMs ?? []; - this.evoCounter = source.evoCounter ?? 0; this.teraType = source.teraType as PokemonType; this.isTerastallized = !!source.isTerastallized; this.stellarTypesBoosted = source.stellarTypesBoosted ?? []; diff --git a/src/system/version_migration/versions/v1_0_4.ts b/src/system/version_migration/versions/v1_0_4.ts index fbbde49bc08..a08327a3b70 100644 --- a/src/system/version_migration/versions/v1_0_4.ts +++ b/src/system/version_migration/versions/v1_0_4.ts @@ -3,7 +3,7 @@ import type { SystemSaveData, SessionSaveData } from "#app/system/game-data"; import { defaultStarterSpecies } from "#app/constants"; import { AbilityAttr } from "#enums/ability-attr"; import { DexAttr } from "#enums/dex-attr"; -import { allSpecies } from "#app/data/pokemon-species"; +import { allSpecies } from "#app/data/data-lists"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import { isNullOrUndefined } from "#app/utils/common"; import type { SystemSaveMigrator } from "#app/@types/SystemSaveMigrator"; diff --git a/src/system/version_migration/versions/v1_7_0.ts b/src/system/version_migration/versions/v1_7_0.ts index e309959317e..e3c599bf77b 100644 --- a/src/system/version_migration/versions/v1_7_0.ts +++ b/src/system/version_migration/versions/v1_7_0.ts @@ -1,6 +1,7 @@ import type { SessionSaveMigrator } from "#app/@types/SessionSaveMigrator"; import type { SystemSaveMigrator } from "#app/@types/SystemSaveMigrator"; -import { getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; +import { getPokemonSpeciesForm } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { globalScene } from "#app/global-scene"; import type { SessionSaveData, SystemSaveData } from "#app/system/game-data"; import { DexAttr } from "#enums/dex-attr"; diff --git a/src/system/version_migration/versions/v1_8_3.ts b/src/system/version_migration/versions/v1_8_3.ts index bd963290800..81430659e0b 100644 --- a/src/system/version_migration/versions/v1_8_3.ts +++ b/src/system/version_migration/versions/v1_8_3.ts @@ -1,5 +1,5 @@ import type { SystemSaveMigrator } from "#app/@types/SystemSaveMigrator"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import type { SystemSaveData } from "#app/system/game-data"; import { DexAttr } from "#enums/dex-attr"; import { SpeciesId } from "#enums/species-id"; diff --git a/src/ui/egg-gacha-ui-handler.ts b/src/ui/egg-gacha-ui-handler.ts index 1b1aed91203..0c8d90fa138 100644 --- a/src/ui/egg-gacha-ui-handler.ts +++ b/src/ui/egg-gacha-ui-handler.ts @@ -5,7 +5,7 @@ import { getEnumValues, getEnumKeys, fixedInt, randSeedShuffle } from "#app/util import type { IEggOptions } from "../data/egg"; import { Egg, getLegendaryGachaSpeciesForTimestamp } from "../data/egg"; import { VoucherType, getVoucherTypeIcon } from "../system/voucher"; -import { getPokemonSpecies } from "../data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { addWindow } from "./ui-theme"; import { Tutorial, handleTutorial } from "../tutorial"; import { Button } from "#enums/buttons"; diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index 7ef4f8f920b..50c15336e36 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -16,7 +16,9 @@ import { pokemonFormChanges } from "#app/data/pokemon-forms"; import type { LevelMoves } from "#app/data/balance/pokemon-level-moves"; import { pokemonFormLevelMoves, pokemonSpeciesLevelMoves } from "#app/data/balance/pokemon-level-moves"; import type PokemonSpecies from "#app/data/pokemon-species"; -import { allSpecies, getPokemonSpecies, getPokemonSpeciesForm, normalForm } from "#app/data/pokemon-species"; +import { getPokemonSpeciesForm, normalForm } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; +import { allSpecies } from "#app/data/data-lists"; import { getStarterValueFriendshipCap, speciesStarterCosts } from "#app/data/balance/starters"; import { starterPassiveAbilities } from "#app/data/balance/passives"; import { PokemonType } from "#enums/pokemon-type"; diff --git a/src/ui/pokedex-scan-ui-handler.ts b/src/ui/pokedex-scan-ui-handler.ts index df3e7cbc8c4..2bffc464793 100644 --- a/src/ui/pokedex-scan-ui-handler.ts +++ b/src/ui/pokedex-scan-ui-handler.ts @@ -8,7 +8,7 @@ import { UiMode } from "#enums/ui-mode"; import { FilterTextRow } from "./filter-text"; import { allAbilities } from "#app/data/data-lists"; import { allMoves } from "#app/data/data-lists"; -import { allSpecies } from "#app/data/pokemon-species"; +import { allSpecies } from "#app/data/data-lists"; import i18next from "i18next"; export default class PokedexScanUiHandler extends FormModalUiHandler { diff --git a/src/ui/pokedex-ui-handler.ts b/src/ui/pokedex-ui-handler.ts index 5b292e7232f..1732bb005d3 100644 --- a/src/ui/pokedex-ui-handler.ts +++ b/src/ui/pokedex-ui-handler.ts @@ -7,7 +7,8 @@ import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { pokemonFormLevelMoves, pokemonSpeciesLevelMoves } from "#app/data/balance/pokemon-level-moves"; import type { PokemonForm } from "#app/data/pokemon-species"; import type PokemonSpecies from "#app/data/pokemon-species"; -import { allSpecies, getPokemonSpeciesForm, getPokerusStarters, normalForm } from "#app/data/pokemon-species"; +import { getPokemonSpeciesForm, getPokerusStarters, normalForm } from "#app/data/pokemon-species"; +import { allSpecies } from "#app/data/data-lists"; import { getStarterValueFriendshipCap, speciesStarterCosts, POKERUS_STARTER_COUNT } from "#app/data/balance/starters"; import { catchableSpecies } from "#app/data/balance/biomes"; import { PokemonType } from "#enums/pokemon-type"; diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 7c8b05b6f76..20f613fb694 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -19,7 +19,8 @@ import { pokemonFormChanges } from "#app/data/pokemon-forms"; import type { LevelMoves } from "#app/data/balance/pokemon-level-moves"; import { pokemonFormLevelMoves, pokemonSpeciesLevelMoves } from "#app/data/balance/pokemon-level-moves"; import type PokemonSpecies from "#app/data/pokemon-species"; -import { allSpecies, getPokemonSpeciesForm, getPokerusStarters } from "#app/data/pokemon-species"; +import { getPokemonSpeciesForm, getPokerusStarters } from "#app/data/pokemon-species"; +import { allSpecies } from "#app/data/data-lists"; import { getStarterValueFriendshipCap, speciesStarterCosts, POKERUS_STARTER_COUNT } from "#app/data/balance/starters"; import { PokemonType } from "#enums/pokemon-type"; import { GameModes } from "#enums/game-modes"; diff --git a/src/ui/title-ui-handler.ts b/src/ui/title-ui-handler.ts index 29a354dbe01..50e77bbdd14 100644 --- a/src/ui/title-ui-handler.ts +++ b/src/ui/title-ui-handler.ts @@ -9,7 +9,7 @@ import { version } from "../../package.json"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; import { globalScene } from "#app/global-scene"; import type { SpeciesId } from "#enums/species-id"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { PlayerGender } from "#enums/player-gender"; import { timedEventManager } from "#app/global-event-manager"; diff --git a/src/utils/pokemon-utils.ts b/src/utils/pokemon-utils.ts new file mode 100644 index 00000000000..9f87c36b050 --- /dev/null +++ b/src/utils/pokemon-utils.ts @@ -0,0 +1,21 @@ +import { allSpecies } from "#app/data/data-lists"; +import type PokemonSpecies from "#app/data/pokemon-species"; +import type { SpeciesId } from "#enums/species-id"; + +/** + * Gets the {@linkcode PokemonSpecies} object associated with the {@linkcode SpeciesId} enum given + * @param species - The {@linkcode SpeciesId} to fetch. + * If an array of `SpeciesId`s is passed (such as for named trainer spawn pools), + * one will be selected at random. + * @returns The associated {@linkcode PokemonSpecies} object + */ +export function getPokemonSpecies(species: SpeciesId | SpeciesId[]): PokemonSpecies { + if (Array.isArray(species)) { + // TODO: this RNG roll should not be handled by this function + species = species[Math.floor(Math.random() * species.length)]; + } + if (species >= 2000) { + return allSpecies.find(s => s.speciesId === species)!; // TODO: is this bang correct? + } + return allSpecies[species - 1]; +} diff --git a/test/battle/battle.test.ts b/test/battle/battle.test.ts index a71dca111e3..bf2c3968aa6 100644 --- a/test/battle/battle.test.ts +++ b/test/battle/battle.test.ts @@ -1,4 +1,4 @@ -import { allSpecies } from "#app/data/pokemon-species"; +import { allSpecies } from "#app/data/data-lists"; import { Stat } from "#enums/stat"; import { getGameMode } from "#app/game-mode"; import { GameModes } from "#enums/game-modes"; diff --git a/test/boss-pokemon.test.ts b/test/boss-pokemon.test.ts index afcf5e8fa77..6eb6d262c56 100644 --- a/test/boss-pokemon.test.ts +++ b/test/boss-pokemon.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import GameManager from "#test/testUtils/gameManager"; import { SpeciesId } from "#enums/species-id"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { EFFECTIVE_STATS } from "#app/enums/stat"; diff --git a/test/eggs/egg.test.ts b/test/eggs/egg.test.ts index 7792756a8a3..0d5d09c5179 100644 --- a/test/eggs/egg.test.ts +++ b/test/eggs/egg.test.ts @@ -1,6 +1,6 @@ import { speciesEggTiers } from "#app/data/balance/species-egg-tiers"; import { Egg, getLegendaryGachaSpeciesForTimestamp, getValidLegendaryGachaSpecies } from "#app/data/egg"; -import { allSpecies } from "#app/data/pokemon-species"; +import { allSpecies } from "#app/data/data-lists"; import { EggSourceType } from "#app/enums/egg-source-types"; import { EggTier } from "#app/enums/egg-type"; import { VariantTier } from "#app/enums/variant-tier"; diff --git a/test/moves/effectiveness.test.ts b/test/moves/effectiveness.test.ts index b906e00e1a0..58b2d07b1b6 100644 --- a/test/moves/effectiveness.test.ts +++ b/test/moves/effectiveness.test.ts @@ -1,5 +1,5 @@ import { allMoves } from "#app/data/data-lists"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { TrainerSlot } from "#enums/trainer-slot"; import { PokemonType } from "#enums/pokemon-type"; import { AbilityId } from "#enums/ability-id"; diff --git a/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts b/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts index 4b0f1d50b74..4f986f58b88 100644 --- a/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts +++ b/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts @@ -13,7 +13,7 @@ import { AnOfferYouCantRefuseEncounter } from "#app/data/mystery-encounters/enco import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { MoveId } from "#enums/move-id"; import { ShinyRateBoosterModifier } from "#app/modifier/modifier"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; diff --git a/test/mystery-encounter/encounters/clowning-around-encounter.test.ts b/test/mystery-encounter/encounters/clowning-around-encounter.test.ts index 738b3a54067..85193d1ec72 100644 --- a/test/mystery-encounter/encounters/clowning-around-encounter.test.ts +++ b/test/mystery-encounter/encounters/clowning-around-encounter.test.ts @@ -4,7 +4,7 @@ import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import * as BattleAnims from "#app/data/battle-anims"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { generateModifierType } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; diff --git a/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts b/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts index 5e6b8507a91..16adc47ff11 100644 --- a/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts +++ b/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts @@ -6,7 +6,7 @@ import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { FieryFalloutEncounter } from "#app/data/mystery-encounters/encounters/fiery-fallout-encounter"; import { Gender } from "#app/data/gender"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import * as BattleAnims from "#app/data/battle-anims"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { diff --git a/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts b/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts index aa367277ac6..a55806e5f48 100644 --- a/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts +++ b/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts @@ -1,7 +1,7 @@ import { LostAtSeaEncounter } from "#app/data/mystery-encounters/encounters/lost-at-sea-encounter"; import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts b/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts index d8626a7bf8a..96060e4114c 100644 --- a/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts @@ -4,7 +4,7 @@ import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import * as BattleAnims from "#app/data/battle-anims"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { diff --git a/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts b/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts index 87caa6ccd40..012b88bcd73 100644 --- a/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts @@ -17,7 +17,7 @@ import MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { TrainerType } from "#enums/trainer-type"; import { Nature } from "#enums/nature"; import { MoveId } from "#enums/move-id"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { TheWinstrateChallengeEncounter } from "#app/data/mystery-encounters/encounters/the-winstrate-challenge-encounter"; import { Status } from "#app/data/status-effect"; import { MysteryEncounterRewardsPhase } from "#app/phases/mystery-encounter-phases"; diff --git a/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts b/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts index 2bffa26ff4a..9ab5f16d1b9 100644 --- a/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts +++ b/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts @@ -8,7 +8,7 @@ import { type EnemyPokemonConfig, generateModifierType, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { BiomeId } from "#enums/biome-id"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { SpeciesId } from "#enums/species-id"; diff --git a/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts b/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts index 65c266a5a6c..ec64a17d291 100644 --- a/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts +++ b/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts @@ -21,7 +21,7 @@ import { CommandPhase } from "#app/phases/command-phase"; import { UncommonBreedEncounter } from "#app/data/mystery-encounters/encounters/uncommon-breed-encounter"; import { MovePhase } from "#app/phases/move-phase"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { BerryType } from "#enums/berry-type"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { Stat } from "#enums/stat"; diff --git a/test/mystery-encounter/mystery-encounter-utils.test.ts b/test/mystery-encounter/mystery-encounter-utils.test.ts index f327d8f9e9c..b775ce8df60 100644 --- a/test/mystery-encounter/mystery-encounter-utils.test.ts +++ b/test/mystery-encounter/mystery-encounter-utils.test.ts @@ -14,7 +14,7 @@ import { getRandomSpeciesByStarterCost, koPlayerPokemon, } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { PokemonType } from "#enums/pokemon-type"; import { MessagePhase } from "#app/phases/message-phase"; import GameManager from "#test/testUtils/gameManager"; diff --git a/test/phases/select-modifier-phase.test.ts b/test/phases/select-modifier-phase.test.ts index 6e92861260e..b6c3089e236 100644 --- a/test/phases/select-modifier-phase.test.ts +++ b/test/phases/select-modifier-phase.test.ts @@ -1,5 +1,5 @@ import type BattleScene from "#app/battle-scene"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { PlayerPokemon } from "#app/field/pokemon"; import { ModifierTier } from "#enums/modifier-tier"; import type { CustomModifierSettings } from "#app/modifier/modifier-type"; diff --git a/test/testUtils/gameManagerUtils.ts b/test/testUtils/gameManagerUtils.ts index eda3921e9e0..57fd9b91d26 100644 --- a/test/testUtils/gameManagerUtils.ts +++ b/test/testUtils/gameManagerUtils.ts @@ -3,7 +3,8 @@ import { BattleType } from "#enums/battle-type"; import type BattleScene from "#app/battle-scene"; import { getDailyRunStarters } from "#app/data/daily-run"; import { Gender } from "#app/data/gender"; -import { getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; +import { getPokemonSpeciesForm } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import { PlayerPokemon } from "#app/field/pokemon"; import { getGameMode } from "#app/game-mode"; import { GameModes } from "#enums/game-modes"; diff --git a/test/ui/pokedex.test.ts b/test/ui/pokedex.test.ts index d3fc4b11968..13f595e0c60 100644 --- a/test/ui/pokedex.test.ts +++ b/test/ui/pokedex.test.ts @@ -6,7 +6,9 @@ import { FilterTextRow } from "#app/ui/filter-text"; import { allAbilities } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { SpeciesId } from "#enums/species-id"; -import { allSpecies, getPokemonSpecies, type PokemonForm } from "#app/data/pokemon-species"; +import type { PokemonForm } from "#app/data/pokemon-species"; +import { getPokemonSpecies } from "#app/utils/pokemon-utils"; +import { allSpecies } from "#app/data/data-lists"; import { Button } from "#enums/buttons"; import { DropDownColumn } from "#enums/drop-down-column"; import type PokemonSpecies from "#app/data/pokemon-species"; diff --git a/test/ui/starter-select.test.ts b/test/ui/starter-select.test.ts index 3e540c4e2c5..8167ab17957 100644 --- a/test/ui/starter-select.test.ts +++ b/test/ui/starter-select.test.ts @@ -1,6 +1,6 @@ import { Gender } from "#app/data/gender"; import { Nature } from "#enums/nature"; -import { allSpecies } from "#app/data/pokemon-species"; +import { allSpecies } from "#app/data/data-lists"; import { GameModes } from "#enums/game-modes"; import { EncounterPhase } from "#app/phases/encounter-phase"; import { SelectStarterPhase } from "#app/phases/select-starter-phase"; From 6ff258fb378590d0ac65576232520120105c368c Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Mon, 16 Jun 2025 08:02:09 -0500 Subject: [PATCH 251/262] [Bug] Fix weather form changes not changing with weather abilities https://github.com/pagefaultgames/pokerogue/pull/5857 * Add test for forecast * Fix PostSummonFormChangeByWeatherAbAttr * Fix overrides in forecast test * Remove a test whose trigger conditions can no longer happen * Update src/data/abilities/ability.ts Co-authored-by: Dean <69436131+emdeann@users.noreply.github.com> * Fix missing tsdoc param * Apply kev's suggestions from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Simplify PostSummonFormChangeByWeather's canApplyPostSummon * Fix unused params that messed up after rebase * Fix form change import Messed up due to improper rebase --------- Co-authored-by: Dean <69436131+emdeann@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/data/abilities/ability.ts | 44 +++++++++++++++++++-------------- test/abilities/forecast.test.ts | 40 ++++++++++++++---------------- 2 files changed, 43 insertions(+), 41 deletions(-) diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 3124f782ff5..70195d6a152 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -24,11 +24,11 @@ import { allMoves } from "../data-lists"; import { ArenaTagSide } from "#enums/arena-tag-side"; import { BerryModifier, HitHealModifier, PokemonHeldItemModifier } from "#app/modifier/modifier"; import { TerrainType } from "#app/data/terrain"; +import { pokemonFormChanges } from "../pokemon-forms"; import { - SpeciesFormChangeRevertWeatherFormTrigger, SpeciesFormChangeWeatherTrigger, + SpeciesFormChangeAbilityTrigger, } from "../pokemon-forms/form-change-triggers"; -import { SpeciesFormChangeAbilityTrigger } from "../pokemon-forms/form-change-triggers"; import i18next from "i18next"; import { Command } from "#enums/command"; import { BerryModifierType } from "#app/modifier/modifier-type"; @@ -3971,27 +3971,32 @@ export class PostSummonFormChangeByWeatherAbAttr extends PostSummonAbAttr { this.ability = ability; } + /** + * Determine if the pokemon has a forme change that is triggered by the weather + * + * @param pokemon - The pokemon with the forme change ability + * @param _passive - unused + * @param _simulated - unused + * @param _args - unused + */ override canApplyPostSummon(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _args: any[]): boolean { - const isCastformWithForecast = - pokemon.species.speciesId === SpeciesId.CASTFORM && this.ability === AbilityId.FORECAST; - const isCherrimWithFlowerGift = - pokemon.species.speciesId === SpeciesId.CHERRIM && this.ability === AbilityId.FLOWER_GIFT; - return isCastformWithForecast || isCherrimWithFlowerGift; + return !!pokemonFormChanges[pokemon.species.speciesId]?.some( + fc => fc.findTrigger(SpeciesFormChangeWeatherTrigger) && fc.canChange(pokemon), + ); } /** - * Calls the {@linkcode BattleScene.triggerPokemonFormChange | triggerPokemonFormChange} for both - * {@linkcode SpeciesFormChange.SpeciesFormChangeWeatherTrigger | SpeciesFormChangeWeatherTrigger} and - * {@linkcode SpeciesFormChange.SpeciesFormChangeWeatherTrigger | SpeciesFormChangeRevertWeatherFormTrigger} if it - * is the specific Pokemon and ability - * @param {Pokemon} pokemon the Pokemon with this ability - * @param _passive n/a - * @param _args n/a + * Trigger the pokemon's forme change by invoking + * {@linkcode BattleScene.triggerPokemonFormChange | triggerPokemonFormChange} + * + * @param pokemon - The Pokemon with this ability + * @param _passive - unused + * @param simulated - unused + * @param _args - unused */ override applyPostSummon(pokemon: Pokemon, _passive: boolean, simulated: boolean, _args: any[]): void { if (!simulated) { globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeWeatherTrigger); - globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeRevertWeatherFormTrigger); } } } @@ -5301,10 +5306,11 @@ export class PostWeatherChangeFormChangeAbAttr extends PostWeatherChangeAbAttr { /** * Calls {@linkcode Arena.triggerWeatherBasedFormChangesToNormal | triggerWeatherBasedFormChangesToNormal} when the * weather changed to form-reverting weather, otherwise calls {@linkcode Arena.triggerWeatherBasedFormChanges | triggerWeatherBasedFormChanges} - * @param {Pokemon} _pokemon the Pokemon with this ability - * @param _passive n/a - * @param _weather n/a - * @param _args n/a + * @param _pokemon - The Pokemon with this ability + * @param _passive - unused + * @param simulated - unused + * @param _weather - unused + * @param _args - unused */ override applyPostWeatherChange( _pokemon: Pokemon, diff --git a/test/abilities/forecast.test.ts b/test/abilities/forecast.test.ts index 8d3a679c917..9111766ebdf 100644 --- a/test/abilities/forecast.test.ts +++ b/test/abilities/forecast.test.ts @@ -21,26 +21,10 @@ describe("Abilities - Forecast", () => { const RAINY_FORM = 2; const SNOWY_FORM = 3; - /** - * Tests form changes based on weather changes - * @param {GameManager} game The game manager instance - * @param {WeatherType} weather The active weather to set - * @param form The expected form based on the active weather - * @param initialForm The initial form pre form change - */ - const testWeatherFormChange = async (game: GameManager, weather: WeatherType, form: number, initialForm?: number) => { - game.override.weather(weather).starterForms({ [SpeciesId.CASTFORM]: initialForm }); - await game.classicMode.startBattle([SpeciesId.CASTFORM]); - - game.move.select(MoveId.SPLASH); - - expect(game.scene.getPlayerPokemon()?.formIndex).toBe(form); - }; - /** * Tests reverting to normal form when Cloud Nine/Air Lock is active on the field - * @param {GameManager} game The game manager instance - * @param {AbilityId} ability The ability that is active on the field + * @param game - The game manager instance + * @param ability - The ability that is active on the field */ const testRevertFormAgainstAbility = async (game: GameManager, ability: AbilityId) => { game.override.starterForms({ [SpeciesId.CASTFORM]: SUNNY_FORM }).enemyAbility(ability); @@ -191,10 +175,6 @@ describe("Abilities - Forecast", () => { 30 * 1000, ); - it("reverts to Normal Form during Clear weather", async () => { - await testWeatherFormChange(game, WeatherType.NONE, NORMAL_FORM, SUNNY_FORM); - }); - it("reverts to Normal Form if a Pokémon on the field has Air Lock", async () => { await testRevertFormAgainstAbility(game, AbilityId.AIR_LOCK); }); @@ -277,4 +257,20 @@ describe("Abilities - Forecast", () => { expect(castform.formIndex).toBe(NORMAL_FORM); }); + + // NOTE: The following pairs of tests are intentionally testing the same scenario, switching the player and enemy pokemon + // as this is a regression test where the order of player and enemy mattered. + it("should trigger player's form change when summoned at the same time as an enemy with a weather changing ability", async () => { + game.override.enemyAbility(AbilityId.DROUGHT); + await game.classicMode.startBattle([SpeciesId.CASTFORM, SpeciesId.MAGIKARP]); + const castform = game.scene.getPlayerPokemon()!; + expect(castform.formIndex).toBe(SUNNY_FORM); + }); + + it("should trigger enemy's form change when summoned at the same time as a player with a weather changing ability", async () => { + game.override.ability(AbilityId.DROUGHT).enemySpecies(SpeciesId.CASTFORM).enemyAbility(AbilityId.FORECAST); + await game.classicMode.startBattle([SpeciesId.MAGIKARP]); + const castform = game.scene.getEnemyPokemon()!; + expect(castform.formIndex).toBe(SUNNY_FORM); + }); }); From 2065f4fd7f6f162653390b37a6065941614ea85f Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Tue, 17 Jun 2025 13:08:20 -0400 Subject: [PATCH 252/262] [Bug] Fix incorrect form key being checked for evo items (#5995) --- src/data/balance/pokemon-evolutions.ts | 9 +++++++-- src/modifier/modifier-type.ts | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/data/balance/pokemon-evolutions.ts b/src/data/balance/pokemon-evolutions.ts index e97a51fed29..5dda1912e44 100644 --- a/src/data/balance/pokemon-evolutions.ts +++ b/src/data/balance/pokemon-evolutions.ts @@ -291,13 +291,18 @@ export class SpeciesFormEvolution { ); } + /** + * Checks if this evolution is item-based and any conditions for it are fulfilled + * @param pokemon {@linkcode Pokemon} who wants to evolve + * @param forFusion defaults to False. Whether this evolution is meant for the secondary fused mon. In that case, use their form key. + * @returns whether this evolution uses an item and can apply to the Pokemon + */ public isValidItemEvolution(pokemon: Pokemon, forFusion = false): boolean { return ( - // If an item is given, check if it's the right one !isNullOrUndefined(this.item) && pokemon.level >= this.level && // Check form key, using the fusion's form key if we're checking the fusion - (isNullOrUndefined(this.preFormKey) || (forFusion ? pokemon.getFormKey() : pokemon.getFusionFormKey()) === this.preFormKey) && + (isNullOrUndefined(this.preFormKey) || (forFusion ? pokemon.getFusionFormKey() : pokemon.getFormKey()) === this.preFormKey) && (isNullOrUndefined(this.condition) || this.condition.conditionsFulfilled(pokemon)) ); } diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index a22486210b0..a04a5e2be47 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -1603,12 +1603,12 @@ class EvolutionItemModifierTypeGenerator extends ModifierTypeGenerator { ) .flatMap(p => { const evolutions = pokemonEvolutions[p.fusionSpecies!.speciesId]; - return evolutions.filter(e => e.validate(p, true)); + return evolutions.filter(e => e.isValidItemEvolution(p, true)); }), ] .flat() .flatMap(e => e.evoItem) - .filter(i => (!!i && i > 50) === rare); + .filter(i => !!i && i > 50 === rare); if (!evolutionItemPool.length) { return null; From 28b6c7e50db042e4d64acf2d3e0131448949f9b4 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Tue, 17 Jun 2025 12:35:39 -0700 Subject: [PATCH 253/262] [i18n] Map "biome" namespace to the filename change to "biomes" (#6001) * [i18n] Map "biome" to the filename "biomes" * Update locales submodule to bring in file rename --- public/locales | 2 +- src/plugins/i18n.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/public/locales b/public/locales index 4dab23d6a78..fade123e20f 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit 4dab23d6a78b6cf32db43c9953e3c2000f448007 +Subproject commit fade123e20ff951e199d7c0466686fe8c5511643 diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts index 8ca9005096f..eab427e7b4a 100644 --- a/src/plugins/i18n.ts +++ b/src/plugins/i18n.ts @@ -101,6 +101,7 @@ const namespaceMap = { doubleBattleDialogue: "dialogue-double-battle", splashMessages: "splash-texts", mysteryEncounterMessages: "mystery-encounter-texts", + biome: "biomes", }; //#region Functions From 4119dfbfecc0a0a6a5608881fdf672ee572e594f Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Tue, 17 Jun 2025 16:51:19 -0400 Subject: [PATCH 254/262] [Test] Fix flaky gastro acid test (#5996) --- test/moves/gastro_acid.test.ts | 104 ++++++++++++++++++--------------- 1 file changed, 57 insertions(+), 47 deletions(-) diff --git a/test/moves/gastro_acid.test.ts b/test/moves/gastro_acid.test.ts index dbaa53dcb4f..39167987809 100644 --- a/test/moves/gastro_acid.test.ts +++ b/test/moves/gastro_acid.test.ts @@ -3,6 +3,7 @@ import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; import { MoveResult } from "#enums/move-result"; +import { BattleType } from "#enums/battle-type"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -23,82 +24,91 @@ describe("Moves - Gastro Acid", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .battleStyle("double") + .battleStyle("single") + .ability(AbilityId.BALL_FETCH) .startingLevel(1) - .enemyLevel(100) - .ability(AbilityId.NONE) - .moveset([MoveId.GASTRO_ACID, MoveId.WATER_GUN, MoveId.SPLASH, MoveId.CORE_ENFORCER]) .enemySpecies(SpeciesId.BIDOOF) .enemyMoveset(MoveId.SPLASH) .enemyAbility(AbilityId.WATER_ABSORB); }); - it("suppresses effect of ability", async () => { - /* - * Expected flow (enemies have WATER ABSORD, can only use SPLASH) - * - player mon 1 uses GASTRO ACID, player mon 2 uses SPLASH - * - both player mons use WATER GUN on their respective enemy mon - * - player mon 1 should have dealt damage, player mon 2 should have not - */ + it("should suppress the target's ability", async () => { + game.override.battleStyle("double"); + await game.classicMode.startBattle([SpeciesId.BIDOOF, SpeciesId.BASCULIN]); - await game.classicMode.startBattle(); + game.move.use(MoveId.GASTRO_ACID, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.use(MoveId.SPLASH, BattlerIndex.PLAYER_2); + await game.toNextTurn(); - game.move.select(MoveId.GASTRO_ACID, 0, BattlerIndex.ENEMY); - game.move.select(MoveId.SPLASH, 1); + const [enemy1, enemy2] = game.scene.getEnemyField(); + expect(enemy1.summonData.abilitySuppressed).toBe(true); + expect(enemy2.summonData.abilitySuppressed).toBe(false); - await game.phaseInterceptor.to("TurnInitPhase"); + game.move.use(MoveId.WATER_GUN, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.use(MoveId.WATER_GUN, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY_2); + await game.toEndOfTurn(); - const enemyField = game.scene.getEnemyField(); - expect(enemyField[0].summonData.abilitySuppressed).toBe(true); - expect(enemyField[1].summonData.abilitySuppressed).toBe(false); - - game.move.select(MoveId.WATER_GUN, 0, BattlerIndex.ENEMY); - game.move.select(MoveId.WATER_GUN, 1, BattlerIndex.ENEMY_2); - - await game.phaseInterceptor.to("TurnEndPhase"); - - expect(enemyField[0].hp).toBeLessThan(enemyField[0].getMaxHp()); - expect(enemyField[1].isFullHp()).toBe(true); + expect(enemy1.summonData.abilitySuppressed).toBe(true); + expect(enemy2.summonData.abilitySuppressed).toBe(false); + expect(enemy1.hp).toBeLessThan(enemy1.getMaxHp()); + expect(enemy2.hp).toBe(enemy2.getMaxHp()); }); - it("fails if used on an enemy with an already-suppressed ability", async () => { - game.override.battleStyle("single"); + it("should be removed on switch", async () => { + game.override.battleType(BattleType.TRAINER); + await game.classicMode.startBattle([SpeciesId.BIDOOF]); - await game.classicMode.startBattle(); + game.move.use(MoveId.GASTRO_ACID); + await game.toNextTurn(); - game.move.select(MoveId.CORE_ENFORCER); + const enemy = game.field.getEnemyPokemon(); + expect(enemy.summonData.abilitySuppressed).toBe(true); + + // switch enemy out and back in, should be removed + game.move.use(MoveId.SPLASH); + game.forceEnemyToSwitch(); + await game.toNextTurn(); + game.move.use(MoveId.SPLASH); + game.forceEnemyToSwitch(); + await game.toNextTurn(); + + expect(game.field.getEnemyPokemon()).toBe(enemy); + expect(enemy.summonData.abilitySuppressed).toBe(false); + }); + + it("should fail if target's ability is already suppressed", async () => { + await game.classicMode.startBattle([SpeciesId.BIDOOF]); + + game.move.use(MoveId.CORE_ENFORCER); // Force player to be slower to enable Core Enforcer to proc its suppression effect await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.toNextTurn(); - await game.phaseInterceptor.to("TurnInitPhase"); + game.move.use(MoveId.GASTRO_ACID); + await game.toNextTurn(); - game.move.select(MoveId.GASTRO_ACID); - - await game.phaseInterceptor.to("TurnInitPhase"); - - expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + expect(game.field.getPlayerPokemon().getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); - it("should suppress the passive of a target even if its main ability is unsuppressable and not suppress main abli", async () => { - game.override - .enemyAbility(AbilityId.COMATOSE) - .enemyPassiveAbility(AbilityId.WATER_ABSORB) - .moveset([MoveId.SPLASH, MoveId.GASTRO_ACID, MoveId.WATER_GUN]); + it("should suppress target's passive even if its main ability is unsuppressable", async () => { + game.override.enemyAbility(AbilityId.COMATOSE).enemyPassiveAbility(AbilityId.WATER_ABSORB); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const enemyPokemon = game.scene.getEnemyPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); - game.move.select(MoveId.GASTRO_ACID); + game.move.use(MoveId.GASTRO_ACID); await game.toNextTurn(); - expect(enemyPokemon?.summonData.abilitySuppressed).toBe(true); + expect(enemyPokemon.summonData.abilitySuppressed).toBe(true); game.move.select(MoveId.WATER_GUN); await game.toNextTurn(); - expect(enemyPokemon?.getHpRatio()).toBeLessThan(1); + // water gun should've dealt damage due to suppressed Water Absorb + expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); game.move.select(MoveId.SPORE); - await game.phaseInterceptor.to("BerryPhase"); + await game.toEndOfTurn(); - expect(enemyPokemon?.status?.effect).toBeFalsy(); + // Comatose should block stauts effect + expect(enemyPokemon.status?.effect).toBeUndefined(); }); }); From 59a00e0af3136cafdc898db57789c1f1ca61b05d Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Tue, 17 Jun 2025 23:54:58 -0400 Subject: [PATCH 255/262] [Sprite] Fix Appletun variants (#6003) Fix Appletun variants --- public/images/pokemon/842.png | Bin 936 -> 945 bytes public/images/pokemon/variant/842.json | 78 +++++++++++++------------ 2 files changed, 40 insertions(+), 38 deletions(-) diff --git a/public/images/pokemon/842.png b/public/images/pokemon/842.png index 4e3fec8ef1b7ad2cf0c0edd8c072f7e55ec4cab6..ba1f379370c4c57e362c59c6a8eef4f6548e9097 100644 GIT binary patch delta 873 zcmV-v1D5=#2eAi`F#$G_GAMul?UnJ4j{N_IA3-Vlz=8G4UA(2o;Q#;t5_D2dQvm<} z|NsC0|NsC0|NsC0|NsA9!G=Bn00Rq2L_t(og{9Yla)TfY08k>(I^C%J|IaQ71Oj5K zHn-hbCC?DhZpOTe$K&ngGx2zSZS=(J^}0@Iy8`usuh*;NS!$%Ep zx@re9LL3_kh?q{3T2+6b;xln*`1Lmn9%AI9#z5r*;eUS{03-B<5aXUIAw)^R866PI z-taOBz-kMzc4hb|MC^^+Nfzi{m1qqwQ}ndcy5&?tDVL_UBbIWY3CJ_f0vVA7G}-x z0Z(wQ?`4ei1_Je7_I#li%J5M{)rm}83=*6s>>a{=M-b2v@pG02X6Jgs*!e6HXACza z=FbRcD`8KNa=?F-WDU6P+uF`2!?`aB=Z*<8Nu12z3DfkDnBWx96BVEs7`y!U!qBjA zg1|ph-w?Cw3=6IBeE$7CuNk%}V%CLPi=)a$5Q$$@@=jMGG z8w?3-L~X`Y2)$`Dv1Oqlcsa6z?@HRD$HX=wCcLW{bd`S)A)q6+p`og zNiCrSMc7>HM1pm-`aG~F20|IZx3<+{--p3lQ38WJgHh*n8mSAyHdlSg^c3D`EB88hn(1PiT7#jKJ8&}N(;hJE|oYPxi z{Pprd$PNpz6S&*^3&*AOXYrY_y!Af=*I*t0T9Rh@21s-a00000NkvXXu0mjf`iz^W delta 864 zcmV-m1E2h{2dD>-F##}VwV00Rn1L_t(og{9YvlB*yL08k>(cGV02|F<^@2?oUaXl8fDRdNgg z?bf+(@p^r|d?jA*pN*dI-rpyz;r-v=Zv+C*h-$EKpD<-S6&xs0gol3w8_xxu2?+^* z;Ryjsr2J5DK)Z{D^iZHOn8^9DfMvXZi+C)M0aU~ff)ICw$e~BTQBPe1mSssfQ_fOj zrnsm?&6iyKqeQ|W#hpR10DXQ%(j0SMz9Ml0Qc2TpU_00#Vp)!jm@L5QrX9#AacmeM zVLDA}F@Z`H;?TfWh!B4vB|d5lR8EK}X$oNE-cVxPQzPW0DLA78V%{53CjnS(C6=y? zn3PDpA)RD_?zIuE5p{}@c3QWbMyTbkYhMNub3L#G$c#lGBe8%+TLxv$vmQhvXc4gp zw0KH1Wu!vPv_+aS%rtZ?n=YbzsA`-L&R|)J5aBn1fR0G#Sr+(&&=byot|IA!5r)L)9N}yu>SRN zyx;%+z3&;mDPtl5jnPbkX$CaHh!{4*kIL|UGw9pTyD4H@*bqMZGFBK8*odteQzh)C z6=D^kA$U2&!FMHX(PLsA5fk234Z2E*63`LrP;e8@R}6okx#MyHXi`fU!4O_*ok;Lu zt6m27#6YMc_|{%KP`9yNR297475!^M{@ymx3Uzl8f%owQZ2Novq5(^+W$twz`~e8< zGqNMJaO{1IYazB)I2Jr_&yDbQ?eT(S0G3>Y)%OG;PDGcARd8R|``Wcdo Date: Wed, 18 Jun 2025 16:23:16 -0500 Subject: [PATCH 256/262] [Bug] Fix infinite memory mushrooms (#5993) * Set cost to -1 for modifiers chosen as rewards * Ensure apply modifier conditional retains original behavior --- src/phases/select-modifier-phase.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/phases/select-modifier-phase.ts b/src/phases/select-modifier-phase.ts index 34a905f64c6..53e1f5bc282 100644 --- a/src/phases/select-modifier-phase.ts +++ b/src/phases/select-modifier-phase.ts @@ -134,7 +134,7 @@ export class SelectModifierPhase extends BattlePhase { return true; } const modifierType = this.typeOptions[cursor].type; - return this.applyChosenModifier(modifierType, 0, modifierSelectCallback); + return this.applyChosenModifier(modifierType, -1, modifierSelectCallback); } // Pick a modifier from the shop and apply it @@ -260,8 +260,13 @@ export class SelectModifierPhase extends BattlePhase { return false; } - // Applies the effects of the chosen modifier - private applyModifier(modifier: Modifier, cost = 0, playSound = false): void { + /** + * Apply the effects of the chosen modifier + * @param modifier - The modifier to apply + * @param cost - The cost of the modifier if it was purchased, or -1 if selected as the modifier reward + * @param playSound - Whether the 'obtain modifier' sound should be played when adding the modifier. + */ + private applyModifier(modifier: Modifier, cost = -1, playSound = false): void { const result = globalScene.addModifier(modifier, false, playSound, undefined, undefined, cost); // Queue a copy of this phase when applying a TM or Memory Mushroom. // If the player selects either of these, then escapes out of consuming them, @@ -270,7 +275,7 @@ export class SelectModifierPhase extends BattlePhase { globalScene.phaseManager.unshiftPhase(this.copy()); } - if (cost && !(modifier.type instanceof RememberMoveModifierType)) { + if (cost !== -1 && !(modifier.type instanceof RememberMoveModifierType)) { if (result) { if (!Overrides.WAIVE_ROLL_FEE_OVERRIDE) { globalScene.money -= cost; From 80ae42d3bac2136f79a98bb6420b6749225d7a5d Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Wed, 18 Jun 2025 19:49:21 -0400 Subject: [PATCH 257/262] [Sprite] Minior and Ferrothorn variants (#6005) * Minior variants * Add Ferrothorn variants * Fix shiny Minior front and icons --- public/exp-sprites.json | 56 + public/images/pokemon/774-blue-meteor.json | 41 + public/images/pokemon/774-blue-meteor.png | Bin 0 -> 483 bytes public/images/pokemon/774-blue.png | Bin 410 -> 415 bytes public/images/pokemon/774-green-meteor.json | 41 + public/images/pokemon/774-green-meteor.png | Bin 0 -> 483 bytes public/images/pokemon/774-green.png | Bin 410 -> 415 bytes public/images/pokemon/774-indigo-meteor.json | 41 + public/images/pokemon/774-indigo-meteor.png | Bin 0 -> 483 bytes public/images/pokemon/774-indigo.png | Bin 410 -> 415 bytes public/images/pokemon/774-orange-meteor.json | 41 + public/images/pokemon/774-orange-meteor.png | Bin 0 -> 483 bytes public/images/pokemon/774-orange.png | Bin 410 -> 415 bytes public/images/pokemon/774-red-meteor.json | 41 + public/images/pokemon/774-red-meteor.png | Bin 0 -> 483 bytes public/images/pokemon/774-red.png | Bin 410 -> 415 bytes public/images/pokemon/774-violet-meteor.json | 41 + public/images/pokemon/774-violet-meteor.png | Bin 0 -> 483 bytes public/images/pokemon/774-violet.png | Bin 410 -> 415 bytes public/images/pokemon/774-yellow-meteor.json | 41 + public/images/pokemon/774-yellow-meteor.png | Bin 0 -> 483 bytes public/images/pokemon/774-yellow.png | Bin 410 -> 415 bytes public/images/pokemon/774.png | Bin 472 -> 483 bytes .../images/pokemon/back/774-blue-meteor.json | 41 + .../images/pokemon/back/774-blue-meteor.png | Bin 0 -> 491 bytes public/images/pokemon/back/774-blue.png | Bin 369 -> 374 bytes .../images/pokemon/back/774-green-meteor.json | 41 + .../images/pokemon/back/774-green-meteor.png | Bin 0 -> 491 bytes public/images/pokemon/back/774-green.png | Bin 369 -> 374 bytes .../pokemon/back/774-indigo-meteor.json | 41 + .../images/pokemon/back/774-indigo-meteor.png | Bin 0 -> 491 bytes public/images/pokemon/back/774-indigo.png | Bin 369 -> 374 bytes .../pokemon/back/774-orange-meteor.json | 41 + .../images/pokemon/back/774-orange-meteor.png | Bin 0 -> 491 bytes public/images/pokemon/back/774-orange.png | Bin 369 -> 374 bytes .../images/pokemon/back/774-red-meteor.json | 41 + public/images/pokemon/back/774-red-meteor.png | Bin 0 -> 491 bytes public/images/pokemon/back/774-red.png | Bin 369 -> 374 bytes .../pokemon/back/774-violet-meteor.json | 41 + .../images/pokemon/back/774-violet-meteor.png | Bin 0 -> 491 bytes public/images/pokemon/back/774-violet.png | Bin 369 -> 374 bytes .../pokemon/back/774-yellow-meteor.json | 41 + .../images/pokemon/back/774-yellow-meteor.png | Bin 0 -> 491 bytes public/images/pokemon/back/774-yellow.png | Bin 369 -> 374 bytes public/images/pokemon/back/774.png | Bin 470 -> 491 bytes .../pokemon/back/shiny/774-blue-meteor.json | 41 + .../pokemon/back/shiny/774-blue-meteor.png | Bin 0 -> 491 bytes .../images/pokemon/back/shiny/774-blue.json | 4 +- public/images/pokemon/back/shiny/774-blue.png | Bin 369 -> 374 bytes .../pokemon/back/shiny/774-green-meteor.json | 41 + .../pokemon/back/shiny/774-green-meteor.png | Bin 0 -> 491 bytes .../images/pokemon/back/shiny/774-green.png | Bin 369 -> 374 bytes .../pokemon/back/shiny/774-indigo-meteor.json | 41 + .../pokemon/back/shiny/774-indigo-meteor.png | Bin 0 -> 491 bytes .../images/pokemon/back/shiny/774-indigo.json | 4 +- .../images/pokemon/back/shiny/774-indigo.png | Bin 369 -> 374 bytes .../pokemon/back/shiny/774-orange-meteor.json | 41 + .../pokemon/back/shiny/774-orange-meteor.png | Bin 0 -> 491 bytes .../images/pokemon/back/shiny/774-orange.json | 4 +- .../images/pokemon/back/shiny/774-orange.png | Bin 369 -> 374 bytes .../pokemon/back/shiny/774-red-meteor.json | 41 + .../pokemon/back/shiny/774-red-meteor.png | Bin 0 -> 491 bytes public/images/pokemon/back/shiny/774-red.json | 4 +- public/images/pokemon/back/shiny/774-red.png | Bin 369 -> 374 bytes .../pokemon/back/shiny/774-violet-meteor.json | 41 + .../pokemon/back/shiny/774-violet-meteor.png | Bin 0 -> 491 bytes .../images/pokemon/back/shiny/774-violet.json | 4 +- .../images/pokemon/back/shiny/774-violet.png | Bin 369 -> 374 bytes .../pokemon/back/shiny/774-yellow-meteor.json | 41 + .../pokemon/back/shiny/774-yellow-meteor.png | Bin 0 -> 491 bytes .../images/pokemon/back/shiny/774-yellow.json | 4 +- .../images/pokemon/back/shiny/774-yellow.png | Bin 369 -> 374 bytes .../images/pokemon/exp/774-blue-meteor.json | 1994 ++++ public/images/pokemon/exp/774-blue-meteor.png | Bin 0 -> 2326 bytes public/images/pokemon/exp/774-blue.png | Bin 7735 -> 7714 bytes .../images/pokemon/exp/774-green-meteor.json | 1994 ++++ .../images/pokemon/exp/774-green-meteor.png | Bin 0 -> 2326 bytes public/images/pokemon/exp/774-green.png | Bin 7735 -> 18745 bytes .../images/pokemon/exp/774-indigo-meteor.json | 1994 ++++ .../images/pokemon/exp/774-indigo-meteor.png | Bin 0 -> 2326 bytes public/images/pokemon/exp/774-indigo.png | Bin 7735 -> 18828 bytes public/images/pokemon/exp/774-meteor.json | 1994 ++++ public/images/pokemon/exp/774-meteor.png | Bin 0 -> 2326 bytes .../images/pokemon/exp/774-orange-meteor.json | 1994 ++++ .../images/pokemon/exp/774-orange-meteor.png | Bin 0 -> 2326 bytes public/images/pokemon/exp/774-orange.png | Bin 7735 -> 19181 bytes public/images/pokemon/exp/774-red-meteor.json | 1994 ++++ public/images/pokemon/exp/774-red-meteor.png | Bin 0 -> 2326 bytes public/images/pokemon/exp/774-red.png | Bin 7735 -> 7714 bytes .../images/pokemon/exp/774-violet-meteor.json | 1994 ++++ .../images/pokemon/exp/774-violet-meteor.png | Bin 0 -> 2326 bytes public/images/pokemon/exp/774-violet.png | Bin 7735 -> 19217 bytes .../images/pokemon/exp/774-yellow-meteor.json | 1994 ++++ .../images/pokemon/exp/774-yellow-meteor.png | Bin 0 -> 2326 bytes public/images/pokemon/exp/774-yellow.png | Bin 7735 -> 7714 bytes .../pokemon/exp/back/774-blue-meteor.json | 1994 ++++ .../pokemon/exp/back/774-blue-meteor.png | Bin 0 -> 2424 bytes public/images/pokemon/exp/back/774-blue.png | Bin 6378 -> 6382 bytes .../pokemon/exp/back/774-green-meteor.json | 1994 ++++ .../pokemon/exp/back/774-green-meteor.png | Bin 0 -> 2424 bytes public/images/pokemon/exp/back/774-green.png | Bin 6378 -> 6382 bytes .../pokemon/exp/back/774-indigo-meteor.json | 1994 ++++ .../pokemon/exp/back/774-indigo-meteor.png | Bin 0 -> 2424 bytes public/images/pokemon/exp/back/774-indigo.png | Bin 6378 -> 6382 bytes .../images/pokemon/exp/back/774-meteor.json | 1994 ++++ public/images/pokemon/exp/back/774-meteor.png | Bin 0 -> 2424 bytes .../pokemon/exp/back/774-orange-meteor.json | 1994 ++++ .../pokemon/exp/back/774-orange-meteor.png | Bin 0 -> 2424 bytes public/images/pokemon/exp/back/774-orange.png | Bin 6378 -> 6382 bytes .../pokemon/exp/back/774-red-meteor.json | 1994 ++++ .../pokemon/exp/back/774-red-meteor.png | Bin 0 -> 2424 bytes public/images/pokemon/exp/back/774-red.png | Bin 6378 -> 6382 bytes .../pokemon/exp/back/774-violet-meteor.json | 1994 ++++ .../pokemon/exp/back/774-violet-meteor.png | Bin 0 -> 2424 bytes public/images/pokemon/exp/back/774-violet.png | Bin 6378 -> 6382 bytes .../pokemon/exp/back/774-yellow-meteor.json | 1994 ++++ .../pokemon/exp/back/774-yellow-meteor.png | Bin 0 -> 2424 bytes public/images/pokemon/exp/back/774-yellow.png | Bin 6378 -> 6382 bytes .../exp/back/shiny/774-blue-meteor.json | 1994 ++++ .../exp/back/shiny/774-blue-meteor.png | Bin 0 -> 2424 bytes .../pokemon/exp/back/shiny/774-blue.png | Bin 6378 -> 6382 bytes .../exp/back/shiny/774-green-meteor.json | 1994 ++++ .../exp/back/shiny/774-green-meteor.png | Bin 0 -> 2424 bytes .../pokemon/exp/back/shiny/774-green.json | 2 +- .../pokemon/exp/back/shiny/774-green.png | Bin 6378 -> 6382 bytes .../exp/back/shiny/774-indigo-meteor.json | 1994 ++++ .../exp/back/shiny/774-indigo-meteor.png | Bin 0 -> 2424 bytes .../pokemon/exp/back/shiny/774-indigo.json | 2 +- .../pokemon/exp/back/shiny/774-indigo.png | Bin 6378 -> 6382 bytes .../pokemon/exp/back/shiny/774-meteor.json | 1994 ++++ .../pokemon/exp/back/shiny/774-meteor.png | Bin 0 -> 2312 bytes .../exp/back/shiny/774-orange-meteor.json | 1994 ++++ .../exp/back/shiny/774-orange-meteor.png | Bin 0 -> 2424 bytes .../pokemon/exp/back/shiny/774-orange.json | 2 +- .../pokemon/exp/back/shiny/774-orange.png | Bin 6378 -> 6382 bytes .../exp/back/shiny/774-red-meteor.json | 1994 ++++ .../pokemon/exp/back/shiny/774-red-meteor.png | Bin 0 -> 2424 bytes .../pokemon/exp/back/shiny/774-red.json | 2 +- .../images/pokemon/exp/back/shiny/774-red.png | Bin 6378 -> 6382 bytes .../exp/back/shiny/774-violet-meteor.json | 1994 ++++ .../exp/back/shiny/774-violet-meteor.png | Bin 0 -> 2424 bytes .../pokemon/exp/back/shiny/774-violet.json | 2 +- .../pokemon/exp/back/shiny/774-violet.png | Bin 6378 -> 6382 bytes .../exp/back/shiny/774-yellow-meteor.json | 1994 ++++ .../exp/back/shiny/774-yellow-meteor.png | Bin 0 -> 2424 bytes .../pokemon/exp/back/shiny/774-yellow.json | 2 +- .../pokemon/exp/back/shiny/774-yellow.png | Bin 6378 -> 6382 bytes public/images/pokemon/exp/back/shiny/774.json | 2549 ++---- public/images/pokemon/exp/back/shiny/774.png | Bin 2312 -> 6382 bytes .../pokemon/exp/shiny/774-blue-meteor.json | 1994 ++++ .../pokemon/exp/shiny/774-blue-meteor.png | Bin 0 -> 2326 bytes public/images/pokemon/exp/shiny/774-blue.png | Bin 7735 -> 7724 bytes .../pokemon/exp/shiny/774-green-meteor.json | 1994 ++++ .../pokemon/exp/shiny/774-green-meteor.png | Bin 0 -> 2326 bytes .../images/pokemon/exp/shiny/774-green.json | 2 +- public/images/pokemon/exp/shiny/774-green.png | Bin 7735 -> 7724 bytes .../pokemon/exp/shiny/774-indigo-meteor.json | 1994 ++++ .../pokemon/exp/shiny/774-indigo-meteor.png | Bin 0 -> 2326 bytes .../images/pokemon/exp/shiny/774-indigo.json | 2 +- .../images/pokemon/exp/shiny/774-indigo.png | Bin 7735 -> 7724 bytes .../images/pokemon/exp/shiny/774-meteor.json | 1994 ++++ .../images/pokemon/exp/shiny/774-meteor.png | Bin 0 -> 2326 bytes .../pokemon/exp/shiny/774-orange-meteor.json | 1994 ++++ .../pokemon/exp/shiny/774-orange-meteor.png | Bin 0 -> 2326 bytes .../images/pokemon/exp/shiny/774-orange.json | 2 +- .../images/pokemon/exp/shiny/774-orange.png | Bin 7735 -> 7724 bytes .../pokemon/exp/shiny/774-red-meteor.json | 1994 ++++ .../pokemon/exp/shiny/774-red-meteor.png | Bin 0 -> 2326 bytes public/images/pokemon/exp/shiny/774-red.json | 2 +- public/images/pokemon/exp/shiny/774-red.png | Bin 7735 -> 7724 bytes .../pokemon/exp/shiny/774-violet-meteor.json | 1994 ++++ .../pokemon/exp/shiny/774-violet-meteor.png | Bin 0 -> 2326 bytes .../images/pokemon/exp/shiny/774-violet.json | 2 +- .../images/pokemon/exp/shiny/774-violet.png | Bin 7735 -> 7724 bytes .../pokemon/exp/shiny/774-yellow-meteor.json | 1994 ++++ .../pokemon/exp/shiny/774-yellow-meteor.png | Bin 0 -> 2326 bytes .../images/pokemon/exp/shiny/774-yellow.json | 2 +- .../images/pokemon/exp/shiny/774-yellow.png | Bin 7735 -> 7724 bytes public/images/pokemon/exp/shiny/774.json | 2377 +---- public/images/pokemon/exp/shiny/774.png | Bin 2326 -> 19533 bytes .../pokemon/icons/7/774-blue-meteor.png | Bin 0 -> 289 bytes .../pokemon/icons/7/774-green-meteor.png | Bin 0 -> 289 bytes .../pokemon/icons/7/774-indigo-meteor.png | Bin 0 -> 289 bytes .../pokemon/icons/7/774-orange-meteor.png | Bin 0 -> 289 bytes .../images/pokemon/icons/7/774-red-meteor.png | Bin 0 -> 289 bytes .../pokemon/icons/7/774-violet-meteor.png | Bin 0 -> 289 bytes .../pokemon/icons/7/774-yellow-meteor.png | Bin 0 -> 289 bytes .../pokemon/icons/7/774s-blue-meteor.png | Bin 0 -> 289 bytes public/images/pokemon/icons/7/774s-blue.png | Bin 392 -> 588 bytes .../pokemon/icons/7/774s-green-meteor.png | Bin 0 -> 289 bytes public/images/pokemon/icons/7/774s-green.png | Bin 390 -> 588 bytes .../pokemon/icons/7/774s-indigo-meteor.png | Bin 0 -> 289 bytes public/images/pokemon/icons/7/774s-indigo.png | Bin 385 -> 588 bytes .../pokemon/icons/7/774s-orange-meteor.png | Bin 0 -> 289 bytes public/images/pokemon/icons/7/774s-orange.png | Bin 377 -> 588 bytes .../pokemon/icons/7/774s-red-meteor.png | Bin 0 -> 289 bytes public/images/pokemon/icons/7/774s-red.png | Bin 379 -> 588 bytes .../pokemon/icons/7/774s-violet-meteor.png | Bin 0 -> 289 bytes public/images/pokemon/icons/7/774s-violet.png | Bin 383 -> 588 bytes .../pokemon/icons/7/774s-yellow-meteor.png | Bin 0 -> 289 bytes public/images/pokemon/icons/7/774s-yellow.png | Bin 371 -> 588 bytes .../images/pokemon/icons/variant/5/597_2.png | Bin 0 -> 510 bytes .../images/pokemon/icons/variant/5/597_3.png | Bin 0 -> 504 bytes .../images/pokemon/icons/variant/5/598_2.png | Bin 0 -> 762 bytes .../images/pokemon/icons/variant/5/598_3.png | Bin 0 -> 753 bytes .../icons/variant/7/774-blue-meteor_2.png | Bin 0 -> 276 bytes .../icons/variant/7/774-blue-meteor_3.png | Bin 0 -> 276 bytes .../pokemon/icons/variant/7/774-blue_2.png | Bin 0 -> 280 bytes .../pokemon/icons/variant/7/774-blue_3.png | Bin 0 -> 280 bytes .../icons/variant/7/774-green-meteor_2.png | Bin 0 -> 276 bytes .../icons/variant/7/774-green-meteor_3.png | Bin 0 -> 276 bytes .../pokemon/icons/variant/7/774-green_2.png | Bin 0 -> 280 bytes .../pokemon/icons/variant/7/774-green_3.png | Bin 0 -> 280 bytes .../icons/variant/7/774-indigo-meteor_2.png | Bin 0 -> 276 bytes .../icons/variant/7/774-indigo-meteor_3.png | Bin 0 -> 276 bytes .../pokemon/icons/variant/7/774-indigo_2.png | Bin 0 -> 280 bytes .../pokemon/icons/variant/7/774-indigo_3.png | Bin 0 -> 274 bytes .../icons/variant/7/774-orange-meteor_2.png | Bin 0 -> 276 bytes .../icons/variant/7/774-orange-meteor_3.png | Bin 0 -> 276 bytes .../pokemon/icons/variant/7/774-orange_2.png | Bin 0 -> 280 bytes .../pokemon/icons/variant/7/774-orange_3.png | Bin 0 -> 274 bytes .../icons/variant/7/774-red-meteor_2.png | Bin 0 -> 276 bytes .../icons/variant/7/774-red-meteor_3.png | Bin 0 -> 276 bytes .../pokemon/icons/variant/7/774-red_2.png | Bin 0 -> 280 bytes .../pokemon/icons/variant/7/774-red_3.png | Bin 0 -> 274 bytes .../icons/variant/7/774-violet-meteor_2.png | Bin 0 -> 276 bytes .../icons/variant/7/774-violet-meteor_3.png | Bin 0 -> 276 bytes .../pokemon/icons/variant/7/774-violet_2.png | Bin 0 -> 280 bytes .../pokemon/icons/variant/7/774-violet_3.png | Bin 0 -> 274 bytes .../icons/variant/7/774-yellow-meteor_2.png | Bin 0 -> 276 bytes .../icons/variant/7/774-yellow-meteor_3.png | Bin 0 -> 276 bytes .../pokemon/icons/variant/7/774-yellow_2.png | Bin 0 -> 280 bytes .../pokemon/icons/variant/7/774-yellow_3.png | Bin 0 -> 274 bytes .../images/pokemon/shiny/774-blue-meteor.json | 41 + .../images/pokemon/shiny/774-blue-meteor.png | Bin 0 -> 483 bytes public/images/pokemon/shiny/774-blue.png | Bin 412 -> 427 bytes .../pokemon/shiny/774-green-meteor.json | 41 + .../images/pokemon/shiny/774-green-meteor.png | Bin 0 -> 483 bytes public/images/pokemon/shiny/774-green.json | 4 +- public/images/pokemon/shiny/774-green.png | Bin 412 -> 427 bytes .../pokemon/shiny/774-indigo-meteor.json | 41 + .../pokemon/shiny/774-indigo-meteor.png | Bin 0 -> 483 bytes public/images/pokemon/shiny/774-indigo.json | 4 +- public/images/pokemon/shiny/774-indigo.png | Bin 412 -> 427 bytes .../pokemon/shiny/774-orange-meteor.json | 41 + .../pokemon/shiny/774-orange-meteor.png | Bin 0 -> 483 bytes public/images/pokemon/shiny/774-orange.json | 4 +- public/images/pokemon/shiny/774-orange.png | Bin 412 -> 427 bytes .../images/pokemon/shiny/774-red-meteor.json | 41 + .../images/pokemon/shiny/774-red-meteor.png | Bin 0 -> 483 bytes public/images/pokemon/shiny/774-red.json | 4 +- public/images/pokemon/shiny/774-red.png | Bin 412 -> 427 bytes .../pokemon/shiny/774-violet-meteor.json | 41 + .../pokemon/shiny/774-violet-meteor.png | Bin 0 -> 483 bytes public/images/pokemon/shiny/774-violet.json | 4 +- public/images/pokemon/shiny/774-violet.png | Bin 412 -> 427 bytes .../pokemon/shiny/774-yellow-meteor.json | 41 + .../pokemon/shiny/774-yellow-meteor.png | Bin 0 -> 483 bytes public/images/pokemon/shiny/774-yellow.json | 4 +- public/images/pokemon/shiny/774-yellow.png | Bin 412 -> 427 bytes public/images/pokemon/shiny/774.png | Bin 472 -> 427 bytes public/images/pokemon/variant/597.json | 24 + public/images/pokemon/variant/598.json | 24 + .../pokemon/variant/774-blue-meteor.json | 24 + public/images/pokemon/variant/774-blue.json | 24 + .../pokemon/variant/774-green-meteor.json | 24 + public/images/pokemon/variant/774-green.json | 24 + .../pokemon/variant/774-indigo-meteor.json | 24 + public/images/pokemon/variant/774-indigo.json | 24 + .../pokemon/variant/774-orange-meteor.json | 24 + public/images/pokemon/variant/774-orange.json | 23 + .../pokemon/variant/774-red-meteor.json | 24 + public/images/pokemon/variant/774-red.json | 25 + .../pokemon/variant/774-violet-meteor.json | 24 + public/images/pokemon/variant/774-violet.json | 24 + .../pokemon/variant/774-yellow-meteor.json | 24 + public/images/pokemon/variant/774-yellow.json | 24 + .../pokemon/variant/_exp_masterlist.json | 28 + .../images/pokemon/variant/_masterlist.json | 32 + public/images/pokemon/variant/back/597.json | 20 + public/images/pokemon/variant/back/598.json | 24 + .../pokemon/variant/back/774-blue-meteor.json | 28 + .../images/pokemon/variant/back/774-blue.json | 28 + .../variant/back/774-green-meteor.json | 28 + .../pokemon/variant/back/774-green.json | 28 + .../variant/back/774-indigo-meteor.json | 28 + .../pokemon/variant/back/774-indigo.json | 28 + .../variant/back/774-orange-meteor.json | 28 + .../pokemon/variant/back/774-orange.json | 28 + .../pokemon/variant/back/774-red-meteor.json | 28 + .../images/pokemon/variant/back/774-red.json | 28 + .../variant/back/774-violet-meteor.json | 28 + .../pokemon/variant/back/774-violet.json | 28 + .../variant/back/774-yellow-meteor.json | 28 + .../pokemon/variant/back/774-yellow.json | 28 + .../pokemon/variant/exp/774-blue-meteor.json | 24 + .../images/pokemon/variant/exp/774-blue.json | 24 + .../pokemon/variant/exp/774-green-meteor.json | 24 + .../images/pokemon/variant/exp/774-green.json | 24 + .../variant/exp/774-indigo-meteor.json | 24 + .../pokemon/variant/exp/774-indigo.json | 24 + .../variant/exp/774-orange-meteor.json | 24 + .../pokemon/variant/exp/774-orange.json | 24 + .../pokemon/variant/exp/774-red-meteor.json | 24 + .../images/pokemon/variant/exp/774-red.json | 25 + .../variant/exp/774-violet-meteor.json | 24 + .../pokemon/variant/exp/774-violet.json | 24 + .../variant/exp/774-yellow-meteor.json | 24 + .../pokemon/variant/exp/774-yellow.json | 24 + .../variant/exp/back/774-blue-meteor.json | 28 + .../pokemon/variant/exp/back/774-blue.json | 28 + .../variant/exp/back/774-green-meteor.json | 28 + .../pokemon/variant/exp/back/774-green.json | 28 + .../variant/exp/back/774-indigo-meteor.json | 28 + .../pokemon/variant/exp/back/774-indigo.json | 28 + .../variant/exp/back/774-orange-meteor.json | 28 + .../pokemon/variant/exp/back/774-orange.json | 28 + .../variant/exp/back/774-red-meteor.json | 28 + .../pokemon/variant/exp/back/774-red.json | 28 + .../variant/exp/back/774-violet-meteor.json | 28 + .../pokemon/variant/exp/back/774-violet.json | 28 + .../variant/exp/back/774-yellow-meteor.json | 28 + .../pokemon/variant/exp/back/774-yellow.json | 28 + public/images/pokemon_icons_5v.json | 8045 +++++------------ public/images/pokemon_icons_5v.png | Bin 51486 -> 143455 bytes public/images/pokemon_icons_7.json | 294 + public/images/pokemon_icons_7.png | Bin 51451 -> 52054 bytes public/images/pokemon_icons_7v.json | 4991 ++++------ public/images/pokemon_icons_7v.png | Bin 30580 -> 92194 bytes src/data/pokemon-species.ts | 14 +- 330 files changed, 72208 insertions(+), 12755 deletions(-) create mode 100644 public/images/pokemon/774-blue-meteor.json create mode 100644 public/images/pokemon/774-blue-meteor.png create mode 100644 public/images/pokemon/774-green-meteor.json create mode 100644 public/images/pokemon/774-green-meteor.png create mode 100644 public/images/pokemon/774-indigo-meteor.json create mode 100644 public/images/pokemon/774-indigo-meteor.png create mode 100644 public/images/pokemon/774-orange-meteor.json create mode 100644 public/images/pokemon/774-orange-meteor.png create mode 100644 public/images/pokemon/774-red-meteor.json create mode 100644 public/images/pokemon/774-red-meteor.png create mode 100644 public/images/pokemon/774-violet-meteor.json create mode 100644 public/images/pokemon/774-violet-meteor.png create mode 100644 public/images/pokemon/774-yellow-meteor.json create mode 100644 public/images/pokemon/774-yellow-meteor.png create mode 100644 public/images/pokemon/back/774-blue-meteor.json create mode 100644 public/images/pokemon/back/774-blue-meteor.png create mode 100644 public/images/pokemon/back/774-green-meteor.json create mode 100644 public/images/pokemon/back/774-green-meteor.png create mode 100644 public/images/pokemon/back/774-indigo-meteor.json create mode 100644 public/images/pokemon/back/774-indigo-meteor.png create mode 100644 public/images/pokemon/back/774-orange-meteor.json create mode 100644 public/images/pokemon/back/774-orange-meteor.png create mode 100644 public/images/pokemon/back/774-red-meteor.json create mode 100644 public/images/pokemon/back/774-red-meteor.png create mode 100644 public/images/pokemon/back/774-violet-meteor.json create mode 100644 public/images/pokemon/back/774-violet-meteor.png create mode 100644 public/images/pokemon/back/774-yellow-meteor.json create mode 100644 public/images/pokemon/back/774-yellow-meteor.png create mode 100644 public/images/pokemon/back/shiny/774-blue-meteor.json create mode 100644 public/images/pokemon/back/shiny/774-blue-meteor.png create mode 100644 public/images/pokemon/back/shiny/774-green-meteor.json create mode 100644 public/images/pokemon/back/shiny/774-green-meteor.png create mode 100644 public/images/pokemon/back/shiny/774-indigo-meteor.json create mode 100644 public/images/pokemon/back/shiny/774-indigo-meteor.png create mode 100644 public/images/pokemon/back/shiny/774-orange-meteor.json create mode 100644 public/images/pokemon/back/shiny/774-orange-meteor.png create mode 100644 public/images/pokemon/back/shiny/774-red-meteor.json create mode 100644 public/images/pokemon/back/shiny/774-red-meteor.png create mode 100644 public/images/pokemon/back/shiny/774-violet-meteor.json create mode 100644 public/images/pokemon/back/shiny/774-violet-meteor.png create mode 100644 public/images/pokemon/back/shiny/774-yellow-meteor.json create mode 100644 public/images/pokemon/back/shiny/774-yellow-meteor.png create mode 100644 public/images/pokemon/exp/774-blue-meteor.json create mode 100644 public/images/pokemon/exp/774-blue-meteor.png create mode 100644 public/images/pokemon/exp/774-green-meteor.json create mode 100644 public/images/pokemon/exp/774-green-meteor.png create mode 100644 public/images/pokemon/exp/774-indigo-meteor.json create mode 100644 public/images/pokemon/exp/774-indigo-meteor.png create mode 100644 public/images/pokemon/exp/774-meteor.json create mode 100644 public/images/pokemon/exp/774-meteor.png create mode 100644 public/images/pokemon/exp/774-orange-meteor.json create mode 100644 public/images/pokemon/exp/774-orange-meteor.png create mode 100644 public/images/pokemon/exp/774-red-meteor.json create mode 100644 public/images/pokemon/exp/774-red-meteor.png create mode 100644 public/images/pokemon/exp/774-violet-meteor.json create mode 100644 public/images/pokemon/exp/774-violet-meteor.png create mode 100644 public/images/pokemon/exp/774-yellow-meteor.json create mode 100644 public/images/pokemon/exp/774-yellow-meteor.png create mode 100644 public/images/pokemon/exp/back/774-blue-meteor.json create mode 100644 public/images/pokemon/exp/back/774-blue-meteor.png create mode 100644 public/images/pokemon/exp/back/774-green-meteor.json create mode 100644 public/images/pokemon/exp/back/774-green-meteor.png create mode 100644 public/images/pokemon/exp/back/774-indigo-meteor.json create mode 100644 public/images/pokemon/exp/back/774-indigo-meteor.png create mode 100644 public/images/pokemon/exp/back/774-meteor.json create mode 100644 public/images/pokemon/exp/back/774-meteor.png create mode 100644 public/images/pokemon/exp/back/774-orange-meteor.json create mode 100644 public/images/pokemon/exp/back/774-orange-meteor.png create mode 100644 public/images/pokemon/exp/back/774-red-meteor.json create mode 100644 public/images/pokemon/exp/back/774-red-meteor.png create mode 100644 public/images/pokemon/exp/back/774-violet-meteor.json create mode 100644 public/images/pokemon/exp/back/774-violet-meteor.png create mode 100644 public/images/pokemon/exp/back/774-yellow-meteor.json create mode 100644 public/images/pokemon/exp/back/774-yellow-meteor.png create mode 100644 public/images/pokemon/exp/back/shiny/774-blue-meteor.json create mode 100644 public/images/pokemon/exp/back/shiny/774-blue-meteor.png create mode 100644 public/images/pokemon/exp/back/shiny/774-green-meteor.json create mode 100644 public/images/pokemon/exp/back/shiny/774-green-meteor.png create mode 100644 public/images/pokemon/exp/back/shiny/774-indigo-meteor.json create mode 100644 public/images/pokemon/exp/back/shiny/774-indigo-meteor.png create mode 100644 public/images/pokemon/exp/back/shiny/774-meteor.json create mode 100644 public/images/pokemon/exp/back/shiny/774-meteor.png create mode 100644 public/images/pokemon/exp/back/shiny/774-orange-meteor.json create mode 100644 public/images/pokemon/exp/back/shiny/774-orange-meteor.png create mode 100644 public/images/pokemon/exp/back/shiny/774-red-meteor.json create mode 100644 public/images/pokemon/exp/back/shiny/774-red-meteor.png create mode 100644 public/images/pokemon/exp/back/shiny/774-violet-meteor.json create mode 100644 public/images/pokemon/exp/back/shiny/774-violet-meteor.png create mode 100644 public/images/pokemon/exp/back/shiny/774-yellow-meteor.json create mode 100644 public/images/pokemon/exp/back/shiny/774-yellow-meteor.png create mode 100644 public/images/pokemon/exp/shiny/774-blue-meteor.json create mode 100644 public/images/pokemon/exp/shiny/774-blue-meteor.png create mode 100644 public/images/pokemon/exp/shiny/774-green-meteor.json create mode 100644 public/images/pokemon/exp/shiny/774-green-meteor.png create mode 100644 public/images/pokemon/exp/shiny/774-indigo-meteor.json create mode 100644 public/images/pokemon/exp/shiny/774-indigo-meteor.png create mode 100644 public/images/pokemon/exp/shiny/774-meteor.json create mode 100644 public/images/pokemon/exp/shiny/774-meteor.png create mode 100644 public/images/pokemon/exp/shiny/774-orange-meteor.json create mode 100644 public/images/pokemon/exp/shiny/774-orange-meteor.png create mode 100644 public/images/pokemon/exp/shiny/774-red-meteor.json create mode 100644 public/images/pokemon/exp/shiny/774-red-meteor.png create mode 100644 public/images/pokemon/exp/shiny/774-violet-meteor.json create mode 100644 public/images/pokemon/exp/shiny/774-violet-meteor.png create mode 100644 public/images/pokemon/exp/shiny/774-yellow-meteor.json create mode 100644 public/images/pokemon/exp/shiny/774-yellow-meteor.png create mode 100644 public/images/pokemon/icons/7/774-blue-meteor.png create mode 100644 public/images/pokemon/icons/7/774-green-meteor.png create mode 100644 public/images/pokemon/icons/7/774-indigo-meteor.png create mode 100644 public/images/pokemon/icons/7/774-orange-meteor.png create mode 100644 public/images/pokemon/icons/7/774-red-meteor.png create mode 100644 public/images/pokemon/icons/7/774-violet-meteor.png create mode 100644 public/images/pokemon/icons/7/774-yellow-meteor.png create mode 100644 public/images/pokemon/icons/7/774s-blue-meteor.png create mode 100644 public/images/pokemon/icons/7/774s-green-meteor.png create mode 100644 public/images/pokemon/icons/7/774s-indigo-meteor.png create mode 100644 public/images/pokemon/icons/7/774s-orange-meteor.png create mode 100644 public/images/pokemon/icons/7/774s-red-meteor.png create mode 100644 public/images/pokemon/icons/7/774s-violet-meteor.png create mode 100644 public/images/pokemon/icons/7/774s-yellow-meteor.png create mode 100644 public/images/pokemon/icons/variant/5/597_2.png create mode 100644 public/images/pokemon/icons/variant/5/597_3.png create mode 100644 public/images/pokemon/icons/variant/5/598_2.png create mode 100644 public/images/pokemon/icons/variant/5/598_3.png create mode 100644 public/images/pokemon/icons/variant/7/774-blue-meteor_2.png create mode 100644 public/images/pokemon/icons/variant/7/774-blue-meteor_3.png create mode 100644 public/images/pokemon/icons/variant/7/774-blue_2.png create mode 100644 public/images/pokemon/icons/variant/7/774-blue_3.png create mode 100644 public/images/pokemon/icons/variant/7/774-green-meteor_2.png create mode 100644 public/images/pokemon/icons/variant/7/774-green-meteor_3.png create mode 100644 public/images/pokemon/icons/variant/7/774-green_2.png create mode 100644 public/images/pokemon/icons/variant/7/774-green_3.png create mode 100644 public/images/pokemon/icons/variant/7/774-indigo-meteor_2.png create mode 100644 public/images/pokemon/icons/variant/7/774-indigo-meteor_3.png create mode 100644 public/images/pokemon/icons/variant/7/774-indigo_2.png create mode 100644 public/images/pokemon/icons/variant/7/774-indigo_3.png create mode 100644 public/images/pokemon/icons/variant/7/774-orange-meteor_2.png create mode 100644 public/images/pokemon/icons/variant/7/774-orange-meteor_3.png create mode 100644 public/images/pokemon/icons/variant/7/774-orange_2.png create mode 100644 public/images/pokemon/icons/variant/7/774-orange_3.png create mode 100644 public/images/pokemon/icons/variant/7/774-red-meteor_2.png create mode 100644 public/images/pokemon/icons/variant/7/774-red-meteor_3.png create mode 100644 public/images/pokemon/icons/variant/7/774-red_2.png create mode 100644 public/images/pokemon/icons/variant/7/774-red_3.png create mode 100644 public/images/pokemon/icons/variant/7/774-violet-meteor_2.png create mode 100644 public/images/pokemon/icons/variant/7/774-violet-meteor_3.png create mode 100644 public/images/pokemon/icons/variant/7/774-violet_2.png create mode 100644 public/images/pokemon/icons/variant/7/774-violet_3.png create mode 100644 public/images/pokemon/icons/variant/7/774-yellow-meteor_2.png create mode 100644 public/images/pokemon/icons/variant/7/774-yellow-meteor_3.png create mode 100644 public/images/pokemon/icons/variant/7/774-yellow_2.png create mode 100644 public/images/pokemon/icons/variant/7/774-yellow_3.png create mode 100644 public/images/pokemon/shiny/774-blue-meteor.json create mode 100644 public/images/pokemon/shiny/774-blue-meteor.png create mode 100644 public/images/pokemon/shiny/774-green-meteor.json create mode 100644 public/images/pokemon/shiny/774-green-meteor.png create mode 100644 public/images/pokemon/shiny/774-indigo-meteor.json create mode 100644 public/images/pokemon/shiny/774-indigo-meteor.png create mode 100644 public/images/pokemon/shiny/774-orange-meteor.json create mode 100644 public/images/pokemon/shiny/774-orange-meteor.png create mode 100644 public/images/pokemon/shiny/774-red-meteor.json create mode 100644 public/images/pokemon/shiny/774-red-meteor.png create mode 100644 public/images/pokemon/shiny/774-violet-meteor.json create mode 100644 public/images/pokemon/shiny/774-violet-meteor.png create mode 100644 public/images/pokemon/shiny/774-yellow-meteor.json create mode 100644 public/images/pokemon/shiny/774-yellow-meteor.png create mode 100644 public/images/pokemon/variant/597.json create mode 100644 public/images/pokemon/variant/598.json create mode 100644 public/images/pokemon/variant/774-blue-meteor.json create mode 100644 public/images/pokemon/variant/774-blue.json create mode 100644 public/images/pokemon/variant/774-green-meteor.json create mode 100644 public/images/pokemon/variant/774-green.json create mode 100644 public/images/pokemon/variant/774-indigo-meteor.json create mode 100644 public/images/pokemon/variant/774-indigo.json create mode 100644 public/images/pokemon/variant/774-orange-meteor.json create mode 100644 public/images/pokemon/variant/774-orange.json create mode 100644 public/images/pokemon/variant/774-red-meteor.json create mode 100644 public/images/pokemon/variant/774-red.json create mode 100644 public/images/pokemon/variant/774-violet-meteor.json create mode 100644 public/images/pokemon/variant/774-violet.json create mode 100644 public/images/pokemon/variant/774-yellow-meteor.json create mode 100644 public/images/pokemon/variant/774-yellow.json create mode 100644 public/images/pokemon/variant/back/597.json create mode 100644 public/images/pokemon/variant/back/598.json create mode 100644 public/images/pokemon/variant/back/774-blue-meteor.json create mode 100644 public/images/pokemon/variant/back/774-blue.json create mode 100644 public/images/pokemon/variant/back/774-green-meteor.json create mode 100644 public/images/pokemon/variant/back/774-green.json create mode 100644 public/images/pokemon/variant/back/774-indigo-meteor.json create mode 100644 public/images/pokemon/variant/back/774-indigo.json create mode 100644 public/images/pokemon/variant/back/774-orange-meteor.json create mode 100644 public/images/pokemon/variant/back/774-orange.json create mode 100644 public/images/pokemon/variant/back/774-red-meteor.json create mode 100644 public/images/pokemon/variant/back/774-red.json create mode 100644 public/images/pokemon/variant/back/774-violet-meteor.json create mode 100644 public/images/pokemon/variant/back/774-violet.json create mode 100644 public/images/pokemon/variant/back/774-yellow-meteor.json create mode 100644 public/images/pokemon/variant/back/774-yellow.json create mode 100644 public/images/pokemon/variant/exp/774-blue-meteor.json create mode 100644 public/images/pokemon/variant/exp/774-blue.json create mode 100644 public/images/pokemon/variant/exp/774-green-meteor.json create mode 100644 public/images/pokemon/variant/exp/774-green.json create mode 100644 public/images/pokemon/variant/exp/774-indigo-meteor.json create mode 100644 public/images/pokemon/variant/exp/774-indigo.json create mode 100644 public/images/pokemon/variant/exp/774-orange-meteor.json create mode 100644 public/images/pokemon/variant/exp/774-orange.json create mode 100644 public/images/pokemon/variant/exp/774-red-meteor.json create mode 100644 public/images/pokemon/variant/exp/774-red.json create mode 100644 public/images/pokemon/variant/exp/774-violet-meteor.json create mode 100644 public/images/pokemon/variant/exp/774-violet.json create mode 100644 public/images/pokemon/variant/exp/774-yellow-meteor.json create mode 100644 public/images/pokemon/variant/exp/774-yellow.json create mode 100644 public/images/pokemon/variant/exp/back/774-blue-meteor.json create mode 100644 public/images/pokemon/variant/exp/back/774-blue.json create mode 100644 public/images/pokemon/variant/exp/back/774-green-meteor.json create mode 100644 public/images/pokemon/variant/exp/back/774-green.json create mode 100644 public/images/pokemon/variant/exp/back/774-indigo-meteor.json create mode 100644 public/images/pokemon/variant/exp/back/774-indigo.json create mode 100644 public/images/pokemon/variant/exp/back/774-orange-meteor.json create mode 100644 public/images/pokemon/variant/exp/back/774-orange.json create mode 100644 public/images/pokemon/variant/exp/back/774-red-meteor.json create mode 100644 public/images/pokemon/variant/exp/back/774-red.json create mode 100644 public/images/pokemon/variant/exp/back/774-violet-meteor.json create mode 100644 public/images/pokemon/variant/exp/back/774-violet.json create mode 100644 public/images/pokemon/variant/exp/back/774-yellow-meteor.json create mode 100644 public/images/pokemon/variant/exp/back/774-yellow.json diff --git a/public/exp-sprites.json b/public/exp-sprites.json index 2595b5a7983..45c1c1159c5 100644 --- a/public/exp-sprites.json +++ b/public/exp-sprites.json @@ -597,6 +597,20 @@ "774-yellow", "774", "774", + "774-blue-meteor", + "774-blue-meteor", + "774-green-meteor", + "774-green-meteor", + "774-indigo-meteor", + "774-indigo-meteor", + "774-orange-meteor", + "774-orange-meteor", + "774-red-meteor", + "774-red-meteor", + "774-violet-meteor", + "774-violet-meteor", + "774-yellow-meteor", + "774-yellow-meteor", "775", "775", "776", @@ -1709,6 +1723,20 @@ "774b-violet", "774b-yellow", "774b-yellow", + "774b-blue-meteor", + "774b-blue-meteor", + "774b-green-meteor", + "774b-green-meteor", + "774b-indigo-meteor", + "774b-indigo-meteor", + "774b-orange-meteor", + "774b-orange-meteor", + "774b-red-meteor", + "774b-red-meteor", + "774b-violet-meteor", + "774b-violet-meteor", + "774b-yellow-meteor", + "774b-yellow-meteor", "774b", "774b", "775b", @@ -2823,6 +2851,20 @@ "774sb-violet", "774sb-yellow", "774sb-yellow", + "774sb-blue-meteor", + "774sb-blue-meteor", + "774sb-green-meteor", + "774sb-green-meteor", + "774sb-indigo-meteor", + "774sb-indigo-meteor", + "774sb-orange-meteor", + "774sb-orange-meteor", + "774sb-red-meteor", + "774sb-red-meteor", + "774sb-violet-meteor", + "774sb-violet-meteor", + "774sb-yellow-meteor", + "774sb-yellow-meteor", "774sb", "774sb", "775sb", @@ -3942,6 +3984,20 @@ "774s-violet", "774s-yellow", "774s-yellow", + "774s-blue-meteor", + "774s-blue-meteor", + "774s-green-meteor", + "774s-green-meteor", + "774s-indigo-meteor", + "774s-indigo-meteor", + "774s-orange-meteor", + "774s-orange-meteor", + "774s-red-meteor", + "774s-red-meteor", + "774s-violet-meteor", + "774s-violet-meteor", + "774s-yellow-meteor", + "774s-yellow-meteor", "774s", "774s", "775s", diff --git a/public/images/pokemon/774-blue-meteor.json b/public/images/pokemon/774-blue-meteor.json new file mode 100644 index 00000000000..dc95d3df59a --- /dev/null +++ b/public/images/pokemon/774-blue-meteor.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "774.png", + "format": "RGBA8888", + "size": { + "w": 37, + "h": 37 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 37, + "h": 37 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 37, + "h": 37 + }, + "frame": { + "x": 0, + "y": 0, + "w": 37, + "h": 37 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:566b51540ed595250ead15a4733d98d6:172aa05dcc207383119cd2f2f7977e0e:37281ac0aa1e619ef385b889b64064b7$" + } +} diff --git a/public/images/pokemon/774-blue-meteor.png b/public/images/pokemon/774-blue-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..c693211a1b781457c44b6a892718726eb932d40a GIT binary patch literal 483 zcmV<90UZ8`P)Px#Ay7y2y9NEF#_57iVdJz*Il4%Xr`8gD|+ED5VJ zH)X8~1g6=#P%UPOtIn@Gyb8QA)*4%0!r}O2Dn+3>6m9|gDp+8vx~YRM7LEmWO4ZeY zO;Zleb+PpVrgM}(l(F2Sbxu8bD)h9rWOI$#MU!lGHjK0SJR*%9m&#n^oydb!FUQX+ z=DkbleaxCA+Z{|)s$R`^q9=OacOpCUFd}h5bf~I)VP0_EuViaBLx@sT)z1*9U2V!W zUQSPjW`+IgqL3E19x*A^S}b~kZmRvxW<@dV!S-c+QeCRQNPT!P`ihO literal 0 HcmV?d00001 diff --git a/public/images/pokemon/774-blue.png b/public/images/pokemon/774-blue.png index 7d7aecedfebcdfcc514b75c3e185882e957bb0d0..56404ee1a15b2afed970c5d2791b3f779a7adc20 100644 GIT binary patch delta 375 zcmV--0f_#Z1D^wsF@GUYOjJbx000mW5JionL9Nz%*XqCH;Lqsg^YimEnaekz$TynA zK%;d@0000BbW%=J0RR90|NsC0|NsAec74?V009+AL_t(Ijg8a?vcw<=0MGyu9SBjq**7{;FRnLRHQpkcB@qhP5u`qLy_yrNmjDOr_ z`hYzaMCCju`N&6BX)(7W1D&FpgrP-k$c7ro6z}N3>$_wSM9uP`W70BlUi?9P!S8 zi71dOqI7OlDWh>Hv_Sa`>Qjh($3UpFVQvm<}|NsC0|NsAfi4;}<009(9L_t(Ijg8ccwuB%E1<(MGIsgB|S3pde z?i6dyL)|HobsQ-;ciaV6dZqBpxYiewsd}F5m11-R=HDCT0)L?N_yw8E75})+j0s09 zNQ$rK@#&wQrNydOkqa{pXaH=hA?(&Y(>RUX|awwTqV|Blylvk zEu~Co8ts^i_=07yQ0&v!aq-xhF;&5+H-|$Y{cB%Sbq4P=7L|0>raIt#H>y1-%d2ID zT}7I*DbH)kK5N%2m{!Tx!mPa{<(FdoM2Tg41Q2W3=qGN1qz46D;JNCi75eL-HBayVM^;S%c_CRZW6;l0Hh5n6`buBf2T8`?te&MQ(h@AMiO0>(&J3 Qs{jB107*qoM6N<$g0S4VCjbBd diff --git a/public/images/pokemon/774-green-meteor.json b/public/images/pokemon/774-green-meteor.json new file mode 100644 index 00000000000..dc95d3df59a --- /dev/null +++ b/public/images/pokemon/774-green-meteor.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "774.png", + "format": "RGBA8888", + "size": { + "w": 37, + "h": 37 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 37, + "h": 37 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 37, + "h": 37 + }, + "frame": { + "x": 0, + "y": 0, + "w": 37, + "h": 37 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:566b51540ed595250ead15a4733d98d6:172aa05dcc207383119cd2f2f7977e0e:37281ac0aa1e619ef385b889b64064b7$" + } +} diff --git a/public/images/pokemon/774-green-meteor.png b/public/images/pokemon/774-green-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..c693211a1b781457c44b6a892718726eb932d40a GIT binary patch literal 483 zcmV<90UZ8`P)Px#Ay7y2y9NEF#_57iVdJz*Il4%Xr`8gD|+ED5VJ zH)X8~1g6=#P%UPOtIn@Gyb8QA)*4%0!r}O2Dn+3>6m9|gDp+8vx~YRM7LEmWO4ZeY zO;Zleb+PpVrgM}(l(F2Sbxu8bD)h9rWOI$#MU!lGHjK0SJR*%9m&#n^oydb!FUQX+ z=DkbleaxCA+Z{|)s$R`^q9=OacOpCUFd}h5bf~I)VP0_EuViaBLx@sT)z1*9U2V!W zUQSPjW`+IgqL3E19x*A^S}b~kZmRvxW<@dV!S-c+QeCRQNPT!P`ihO literal 0 HcmV?d00001 diff --git a/public/images/pokemon/774-green.png b/public/images/pokemon/774-green.png index 7297beac72dd69fc06bca9964b2f58c28dc3e6f4..6a7a608407eab9f0a75920e70d70281161dec831 100644 GIT binary patch delta 375 zcmV--0f_#Z1D^wsF@GUYOjJbx000mW5I2P^WUw`q-cr8qsLt)c^YimHkvTV&H8zqo zB19SBjq**7{;FRnLRHQpkcB@qhP5u`qLy_yrNmjDOr_ z`hYzaMCCju`N&6BX)(7W1D&FpgrP-k$c7ro6z}N3>$_wSM9uP`W70BlUi?9P!S8 zi71dOqI7OlDWh>Hv_Sa`>QjdOkqa{pXaH=hA?(&Y(>RUX|awwTqV|Blylvk zEu~Co8ts^i_=07yQ0&v!aq-xhF;&5+H-|$Y{cB%Sbq4P=7L|0>raIt#H>y1-%d2ID zT}7I*DbH)kK5N%2m{!Tx!mPa{<(FdoM2Tg41Q2W3=qGN1qz46D;JNCi75eL-HBayVM^;S%c_CRZW6;l0Hh5n6`buBf2T8`?te&MQ(h@AMiO0>(&J3 Qs{jB107*qoM6N<$f>tZF6#xJL diff --git a/public/images/pokemon/774-indigo-meteor.json b/public/images/pokemon/774-indigo-meteor.json new file mode 100644 index 00000000000..dc95d3df59a --- /dev/null +++ b/public/images/pokemon/774-indigo-meteor.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "774.png", + "format": "RGBA8888", + "size": { + "w": 37, + "h": 37 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 37, + "h": 37 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 37, + "h": 37 + }, + "frame": { + "x": 0, + "y": 0, + "w": 37, + "h": 37 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:566b51540ed595250ead15a4733d98d6:172aa05dcc207383119cd2f2f7977e0e:37281ac0aa1e619ef385b889b64064b7$" + } +} diff --git a/public/images/pokemon/774-indigo-meteor.png b/public/images/pokemon/774-indigo-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..c693211a1b781457c44b6a892718726eb932d40a GIT binary patch literal 483 zcmV<90UZ8`P)Px#Ay7y2y9NEF#_57iVdJz*Il4%Xr`8gD|+ED5VJ zH)X8~1g6=#P%UPOtIn@Gyb8QA)*4%0!r}O2Dn+3>6m9|gDp+8vx~YRM7LEmWO4ZeY zO;Zleb+PpVrgM}(l(F2Sbxu8bD)h9rWOI$#MU!lGHjK0SJR*%9m&#n^oydb!FUQX+ z=DkbleaxCA+Z{|)s$R`^q9=OacOpCUFd}h5bf~I)VP0_EuViaBLx@sT)z1*9U2V!W zUQSPjW`+IgqL3E19x*A^S}b~kZmRvxW<@dV!S-c+QeCRQNPT!P`ihO literal 0 HcmV?d00001 diff --git a/public/images/pokemon/774-indigo.png b/public/images/pokemon/774-indigo.png index a727cd986175ce86361761f39cee56b827e649b0..a214eaace27d615fea30a09aca48d3ca58dd0f1b 100644 GIT binary patch delta 375 zcmV--0f_#Z1D^wsF@GUYOjJbx000mW5GhA~Gi}B(uiuH$<*eD}^Yil_S)v|arX5_P z+Kbf;0000BbW%=J0RR90|NsC0|NsAec74?V009+AL_t(Ijg8a?vcw<=0MGyu9SBjq**7{;FRnLRHQpkcB@qhP5u`qLy_yrNmjDOr_ z`hYzaMCCju`N&6BX)(7W1D&FpgrP-k$c7ro6z}N3>$_wSM9uP`W70BlUi?9P!S8 zi71dOqI7OlDWh>Hv_Sa`>QjdOkqa{pXaH=hA?(&Y(>RUX|awwTqV|Blylvk zEu~Co8ts^i_=07yQ0&v!aq-xhF;&5+H-|$Y{cB%Sbq4P=7L|0>raIt#H>y1-%d2ID zT}7I*DbH)kK5N%2m{!Tx!mPa{<(FdoM2Tg41Q2W3=qGN1qz46D;JNCi75eL-HBayVM^;S%c_CRZW6;l0Hh5n6`buBf2T8`?te&MQ(h@AMiO0>(&J3 Qs{jB107*qoM6N<$fM1poj5 diff --git a/public/images/pokemon/774-orange-meteor.json b/public/images/pokemon/774-orange-meteor.json new file mode 100644 index 00000000000..dc95d3df59a --- /dev/null +++ b/public/images/pokemon/774-orange-meteor.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "774.png", + "format": "RGBA8888", + "size": { + "w": 37, + "h": 37 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 37, + "h": 37 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 37, + "h": 37 + }, + "frame": { + "x": 0, + "y": 0, + "w": 37, + "h": 37 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:566b51540ed595250ead15a4733d98d6:172aa05dcc207383119cd2f2f7977e0e:37281ac0aa1e619ef385b889b64064b7$" + } +} diff --git a/public/images/pokemon/774-orange-meteor.png b/public/images/pokemon/774-orange-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..c693211a1b781457c44b6a892718726eb932d40a GIT binary patch literal 483 zcmV<90UZ8`P)Px#Ay7y2y9NEF#_57iVdJz*Il4%Xr`8gD|+ED5VJ zH)X8~1g6=#P%UPOtIn@Gyb8QA)*4%0!r}O2Dn+3>6m9|gDp+8vx~YRM7LEmWO4ZeY zO;Zleb+PpVrgM}(l(F2Sbxu8bD)h9rWOI$#MU!lGHjK0SJR*%9m&#n^oydb!FUQX+ z=DkbleaxCA+Z{|)s$R`^q9=OacOpCUFd}h5bf~I)VP0_EuViaBLx@sT)z1*9U2V!W zUQSPjW`+IgqL3E19x*A^S}b~kZmRvxW<@dV!S-c+QeCRQNPT!P`ihO literal 0 HcmV?d00001 diff --git a/public/images/pokemon/774-orange.png b/public/images/pokemon/774-orange.png index cae4aa110129bc72616062c7fecca7df00cd3396..4f0333a772b0d1e129170d4aeb13e87a54c79712 100644 GIT binary patch delta 375 zcmV--0f_#Z1D^wsF@GUYOjJbx000mW5Uo%r>S!AGtUmnLq5S2-^Yio3VHVS87Sd)F z#3XvR0000BbW%=J0RR90|NsC0|NsAec74?V009+AL_t(Ijg8a?vcw<=0MGyu9SBjq**7{;FRnLRHQpkcB@qhP5u`qLy_yrNmjDOr_ z`hYzaMCCju`N&6BX)(7W1D&FpgrP-k$c7ro6z}N3>$_wSM9uP`W70BlUi?9P!S8 zi71dOqI7OlDWh>Hv_Sa`>QjS!AGtUmnLq4V?e(P0+TXBN_C6^nRT zsQ>@~3UpFVQvm<}|NsC0|NsAfi4;}<009(9L_t(Ijg8ccwuB%E1<(MGIsgB|S3pde z?i6dyL)|HobsQ-;ciaV6dZqBpxYiewsd}F5m11-R=HDCT0)L?N_yw8E75})+j0s09 zNQ$rK@#&wQrNydOkqa{pXaH=hA?(&Y(>RUX|awwTqV|Blylvk zEu~Co8ts^i_=07yQ0&v!aq-xhF;&5+H-|$Y{cB%Sbq4P=7L|0>raIt#H>y1-%d2ID zT}7I*DbH)kK5N%2m{!Tx!mPa{<(FdoM2Tg41Q2W3=qGN1qz46D;JNCi75eL-HBayVM^;S%c_CRZW6;l0Hh5n6`buBf2T8`?te&MQ(h@AMiO0>(&J3 Qs{jB107*qoM6N<$f+hR5Z~y=R diff --git a/public/images/pokemon/774-red-meteor.json b/public/images/pokemon/774-red-meteor.json new file mode 100644 index 00000000000..dc95d3df59a --- /dev/null +++ b/public/images/pokemon/774-red-meteor.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "774.png", + "format": "RGBA8888", + "size": { + "w": 37, + "h": 37 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 37, + "h": 37 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 37, + "h": 37 + }, + "frame": { + "x": 0, + "y": 0, + "w": 37, + "h": 37 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:566b51540ed595250ead15a4733d98d6:172aa05dcc207383119cd2f2f7977e0e:37281ac0aa1e619ef385b889b64064b7$" + } +} diff --git a/public/images/pokemon/774-red-meteor.png b/public/images/pokemon/774-red-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..c693211a1b781457c44b6a892718726eb932d40a GIT binary patch literal 483 zcmV<90UZ8`P)Px#Ay7y2y9NEF#_57iVdJz*Il4%Xr`8gD|+ED5VJ zH)X8~1g6=#P%UPOtIn@Gyb8QA)*4%0!r}O2Dn+3>6m9|gDp+8vx~YRM7LEmWO4ZeY zO;Zleb+PpVrgM}(l(F2Sbxu8bD)h9rWOI$#MU!lGHjK0SJR*%9m&#n^oydb!FUQX+ z=DkbleaxCA+Z{|)s$R`^q9=OacOpCUFd}h5bf~I)VP0_EuViaBLx@sT)z1*9U2V!W zUQSPjW`+IgqL3E19x*A^S}b~kZmRvxW<@dV!S-c+QeCRQNPT!P`ihO literal 0 HcmV?d00001 diff --git a/public/images/pokemon/774-red.png b/public/images/pokemon/774-red.png index 869e1a73af3d35d91f306d4c8c9dd5d26cf8d679..72bc071a8cdb4e77182fe8b2823bd1858e4fe5df 100644 GIT binary patch delta 375 zcmV--0f_#Z1D^wsF@GUYOjJbx000mW5Th_e&?{8(VUh8iv+}dV^Yin%9aO~~SHK-s z$}H}#0000BbW%=J0RR90|NsC0|NsAec74?V009+AL_t(Ijg8a?vcw<=0MGyu9SBjq**7{;FRnLRHQpkcB@qhP5u`qLy_yrNmjDOr_ z`hYzaMCCju`N&6BX)(7W1D&FpgrP-k$c7ro6z}N3>$_wSM9uP`W70BlUi?9P!S8 zi71dOqI7OlDWh>Hv_Sa`>QjdOkqa{pXaH=hA?(&Y(>RUX|awwTqV|Blylvk zEu~Co8ts^i_=07yQ0&v!aq-xhF;&5+H-|$Y{cB%Sbq4P=7L|0>raIt#H>y1-%d2ID zT}7I*DbH)kK5N%2m{!Tx!mPa{<(FdoM2Tg41Q2W3=qGN1qz46D;JNCi75eL-HBayVM^;S%c_CRZW6;l0Hh5n6`buBf2T8`?te&MQ(h@AMiO0>(&J3 Qs{jB107*qoM6N<$f{pyOH~;_u diff --git a/public/images/pokemon/774-violet-meteor.json b/public/images/pokemon/774-violet-meteor.json new file mode 100644 index 00000000000..dc95d3df59a --- /dev/null +++ b/public/images/pokemon/774-violet-meteor.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "774.png", + "format": "RGBA8888", + "size": { + "w": 37, + "h": 37 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 37, + "h": 37 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 37, + "h": 37 + }, + "frame": { + "x": 0, + "y": 0, + "w": 37, + "h": 37 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:566b51540ed595250ead15a4733d98d6:172aa05dcc207383119cd2f2f7977e0e:37281ac0aa1e619ef385b889b64064b7$" + } +} diff --git a/public/images/pokemon/774-violet-meteor.png b/public/images/pokemon/774-violet-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..c693211a1b781457c44b6a892718726eb932d40a GIT binary patch literal 483 zcmV<90UZ8`P)Px#Ay7y2y9NEF#_57iVdJz*Il4%Xr`8gD|+ED5VJ zH)X8~1g6=#P%UPOtIn@Gyb8QA)*4%0!r}O2Dn+3>6m9|gDp+8vx~YRM7LEmWO4ZeY zO;Zleb+PpVrgM}(l(F2Sbxu8bD)h9rWOI$#MU!lGHjK0SJR*%9m&#n^oydb!FUQX+ z=DkbleaxCA+Z{|)s$R`^q9=OacOpCUFd}h5bf~I)VP0_EuViaBLx@sT)z1*9U2V!W zUQSPjW`+IgqL3E19x*A^S}b~kZmRvxW<@dV!S-c+QeCRQNPT!P`ihO literal 0 HcmV?d00001 diff --git a/public/images/pokemon/774-violet.png b/public/images/pokemon/774-violet.png index d7b578e0e48349648e4d844a8812aa474c8630cb..1bc41fa06fdfaa5ad969f2ee0215270a9dd8b397 100644 GIT binary patch delta 375 zcmV--0f_#Z1D^wsF@GUYOjJbx000mW5L+~Zdp^dhVe-+s+11S1^Yim)H>zqlr)xQ= zC*Kfn0000BbW%=J0RR90|NsC0|NsAec74?V009+AL_t(Ijg8a?vcw<=0MGyu9SBjq**7{;FRnLRHQpkcB@qhP5u`qLy_yrNmjDOr_ z`hYzaMCCju`N&6BX)(7W1D&FpgrP-k$c7ro6z}N3>$_wSM9uP`W70BlUi?9P!S8 zi71dOqI7OlDWh>Hv_Sa`>QjdOkqa{pXaH=hA?(&Y(>RUX|awwTqV|Blylvk zEu~Co8ts^i_=07yQ0&v!aq-xhF;&5+H-|$Y{cB%Sbq4P=7L|0>raIt#H>y1-%d2ID zT}7I*DbH)kK5N%2m{!Tx!mPa{<(FdoM2Tg41Q2W3=qGN1qz46D;JNCi75eL-HBayVM^;S%c_CRZW6;l0Hh5n6`buBf2T8`?te&MQ(h@AMiO0>(&J3 Qs{jB107*qoM6N<$g8K-yi2wiq diff --git a/public/images/pokemon/774-yellow-meteor.json b/public/images/pokemon/774-yellow-meteor.json new file mode 100644 index 00000000000..dc95d3df59a --- /dev/null +++ b/public/images/pokemon/774-yellow-meteor.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "774.png", + "format": "RGBA8888", + "size": { + "w": 37, + "h": 37 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 37, + "h": 37 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 37, + "h": 37 + }, + "frame": { + "x": 0, + "y": 0, + "w": 37, + "h": 37 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:566b51540ed595250ead15a4733d98d6:172aa05dcc207383119cd2f2f7977e0e:37281ac0aa1e619ef385b889b64064b7$" + } +} diff --git a/public/images/pokemon/774-yellow-meteor.png b/public/images/pokemon/774-yellow-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..c693211a1b781457c44b6a892718726eb932d40a GIT binary patch literal 483 zcmV<90UZ8`P)Px#Ay7y2y9NEF#_57iVdJz*Il4%Xr`8gD|+ED5VJ zH)X8~1g6=#P%UPOtIn@Gyb8QA)*4%0!r}O2Dn+3>6m9|gDp+8vx~YRM7LEmWO4ZeY zO;Zleb+PpVrgM}(l(F2Sbxu8bD)h9rWOI$#MU!lGHjK0SJR*%9m&#n^oydb!FUQX+ z=DkbleaxCA+Z{|)s$R`^q9=OacOpCUFd}h5bf~I)VP0_EuViaBLx@sT)z1*9U2V!W zUQSPjW`+IgqL3E19x*A^S}b~kZmRvxW<@dV!S-c+QeCRQNPT!P`ihO literal 0 HcmV?d00001 diff --git a/public/images/pokemon/774-yellow.png b/public/images/pokemon/774-yellow.png index 66ee87b4c12b2d61413693bd3ce5ffce40c37ce4..98096ea9751d6c3155a04d86bb8984a08a38b55e 100644 GIT binary patch delta 375 zcmV--0f_#Z1D^wsF@GUYOjJbx000mW5Rq#h9SBjq**7{;FRnLRHQpkcB@qhP5u`qLy_yrNmjDOr_ z`hYzaMCCju`N&6BX)(7W1D&FpgrP-k$c7ro6z}N3>$_wSM9uP`W70BlUi?9P!S8 zi71dOqI7OlDWh>Hv_Sa`>QjdOkqa{pXaH=hA?(&Y(>RUX|awwTqV|Blylvk zEu~Co8ts^i_=07yQ0&v!aq-xhF;&5+H-|$Y{cB%Sbq4P=7L|0>raIt#H>y1-%d2ID zT}7I*DbH)kK5N%2m{!Tx!mPa{<(FdoM2Tg41Q2W3=qGN1qz46D;JNCi75eL-HBayVM^;S%c_CRZW6;l0Hh5n6`buBf2T8`?te&MQ(h@AMiO0>(&J3 Qs{jB107*qoM6N<$f^Gn}X8-^I diff --git a/public/images/pokemon/774.png b/public/images/pokemon/774.png index 7d9f5a9cb0099824892e27243ce9cd1f470efb77..c693211a1b781457c44b6a892718726eb932d40a 100644 GIT binary patch delta 425 zcmV;a0apIl1LFgb7#0Wv0002;K+rJ&0004VQb$4nuFf3kks&aD3v^OWQvm<}|NsC0 z|NsC0eRh4-00045Nklg3$i|2k+$(G>&bTnRc?~h=_KNV~Ms7 z?4q6YFLnK9?L1Fr{-r>=$alspBHh>*XK8@IR6noFc;DlLFu0*8sjI1A(iKmuV^82p z$}%;?f<~^akO;khp$)pjEzva)ClX7cOhg=6{qeauq_TSHWkJywCZ>VJH)X8~1g6=# zP%UPOtIn@Gyb8QA)*4%0!r}O2Dn+3>6m9|gDp+8vx~YRM7LEmWO4ZeYO;Zleb+PpV zrgM}(l(F2Sbxu8bD)h9rWOI$#MU!lGHjK0SJR*%9m&#m!QRD(1aQ>3z(a zCEFcLRH|OhccLeH-*+NA^DrWDL3F69d|_U2-LGV8HbaO~RMpQAs9kN!HC|3nhGvER z>Y|Vqw;nMm)mkiif^Mq)&Sph1?7{YBeNtVjzes&}F#DUH|I6r(p;ofx5Ap|Yb{2MO TmrSYv00008NkvXXu0mjfz75P4 delta 414 zcmV;P0b%~*1K0zQ7zqRe0000tustx5E--%qbW%=J06^y0W&i*IWl2OqRCr!(&oOV? zFc1Y`8iw~YP5waI?s91bO4p`)0Ya+wz>l{V=6M&S9vwNx^^3vnYwI|`%j@yZ!vh%Gxx4BJJ^}QasR0vG0)B7G548X>le0bi&emlzfP8Q<9y$)rm3IVB*gwP= z8(=>uE%cBH+o(ALysymSHn^H6JS97*QDv^b>>m!(Y(Z`LV;5sLo2Z$3i1EJMckChP z)mF(ck?v&{WHYVKg5ctjxdX;zz3zWdBUfjWWcRKHh$a$dJv?O-07?_a9(c~yK$K8I z=NF?{0#e8`2Pu{|lrV3tGbznn49?nY763`ct-bkJdbyN8!}_t&A$8^~)i0&LX<@%7Aq%R(000UA07*qo IM6N<$f>^J<;{X5v diff --git a/public/images/pokemon/back/774-blue-meteor.json b/public/images/pokemon/back/774-blue-meteor.json new file mode 100644 index 00000000000..78c5aa06158 --- /dev/null +++ b/public/images/pokemon/back/774-blue-meteor.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "774.png", + "format": "RGBA8888", + "size": { + "w": 37, + "h": 37 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 37, + "h": 37 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 37, + "h": 37 + }, + "frame": { + "x": 0, + "y": 0, + "w": 37, + "h": 37 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:241dff4083e172e8503b54a7f0210f8d:982b194223ffeef2ba672b3c5979a426:37281ac0aa1e619ef385b889b64064b7$" + } +} diff --git a/public/images/pokemon/back/774-blue-meteor.png b/public/images/pokemon/back/774-blue-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..bd27cc746e39437fe23d6624414141fa640650d7 GIT binary patch literal 491 zcmeAS@N?(olHy`uVBq!ia0vp^svyk43?x4}TrdPujKx9jP7LeL$-D$|)B}7%T!AzP z2Zyx0qJ@}PqPlusUS6?bXbAI#kWy%aa|j7njgc!Wp%dfiKPA4I+z;nJRX4&SN1z?S`k;U#7Xl~XSnj& z4IHKB2UOm*e+b#?Wc;-FgDywc+@$PeDUmm=Vvei%0;EenO}Z%6n!8c!g3%|(=V|K$ z&94}~pZU{*@78gLyXEVD+9;K6T+qPD+m+VsYSkKCzi*{M*b(oEjyG4Smfp*KP?fzi zGC0=gSpT+U^%X&iZXbJ1s?)jb?WNiFn;0B^_Tk3*YoZp5CMQqeb>hh~IlnL{z9YzQ zc35udM&S!Sy{0!b{^URD+;z5({cDfrS&_&$-FNH~)33cUo+*Fc@?#xy?CRqlk!4Q= b<0shv6&4qfn=SDl82SvJu6{1-oD!M(Y>nMWwmMJC&YI3u5zhxvZ4P_++n)oBz5MYtwE?inL0` zO$b~Wu}6nh^(*I29?q1lqDKW^PFTKaGB=})*QePMuGNX&Nnd*nthdea$@6+=T$~hX zbLQ83hFMTabM*`G<;*ULD978O6w_d)<*P_6~8j$aO_u2pdo2?z1kWb;o@|qJi+yh;unRE^DL`>BrW1L`!usj zV}tjEpBz>lrIVOXObc4rIc@3LCtWk5y(CoxeYWqc#_K#6BaTnJ!n6F9>2$sa4bXbAI#kWy%aa|j7njgc!Wp%dfiKPA4I+z;nJRX4&SN1z?S`k;U#7Xl~XSnj& z4IHKB2UOm*e+b#?Wc;-FgDywc+@$PeDUmm=Vvei%0;EenO}Z%6n!8c!g3%|(=V|K$ z&94}~pZU{*@78gLyXEVD+9;K6T+qPD+m+VsYSkKCzi*{M*b(oEjyG4Smfp*KP?fzi zGC0=gSpT+U^%X&iZXbJ1s?)jb?WNiFn;0B^_Tk3*YoZp5CMQqeb>hh~IlnL{z9YzQ zc35udM&S!Sy{0!b{^URD+;z5({cDfrS&_&$-FNH~)33cUo+*Fc@?#xy?CRqlk!4Q= b<0shv6&4qfn=SDl82SvJu6{1-oD!M^J`V}#>E)B_8RGMqNQ|Z~XAU02z%SwriPxi{V`LA2CHtm+ANULPr zgus;%dvsV;zjE&6;Y`^odQ|Y`gyowib2G|#eVQ%dTAk>f^tIQ(dfObIJg;}g#YvGi zXMVkBnB^7y=>Wqc#_K#6Tl$n&O1fRm){{MO_;~$iR*m~y9)AxMvH*R?;OXk;vd$@? F2>>zghKB$E delta 305 zcmeyy^pR_(h@PJj?1INsGA6KFw^> z*x)_kCx=x>=_KY8(}EUuPFs5RN!N^MFG&?a-|ibs8S|bRR28}AnqKw`PBGr2usmpE zMI@KktK^+LoGDvHj|#q=u>8|x0Y(|G&$BIDs}r-6zV;SaZ=2_n=k?B*`%$FLnP2Z2 zW_d+_I>7LV@jB1Nh~pEl@GO62I-T#q!^iu7GR0JKu{)iphyi+x!PC{xWt~$(69At` Bh^YVo diff --git a/public/images/pokemon/back/774-indigo-meteor.json b/public/images/pokemon/back/774-indigo-meteor.json new file mode 100644 index 00000000000..78c5aa06158 --- /dev/null +++ b/public/images/pokemon/back/774-indigo-meteor.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "774.png", + "format": "RGBA8888", + "size": { + "w": 37, + "h": 37 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 37, + "h": 37 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 37, + "h": 37 + }, + "frame": { + "x": 0, + "y": 0, + "w": 37, + "h": 37 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:241dff4083e172e8503b54a7f0210f8d:982b194223ffeef2ba672b3c5979a426:37281ac0aa1e619ef385b889b64064b7$" + } +} diff --git a/public/images/pokemon/back/774-indigo-meteor.png b/public/images/pokemon/back/774-indigo-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..bd27cc746e39437fe23d6624414141fa640650d7 GIT binary patch literal 491 zcmeAS@N?(olHy`uVBq!ia0vp^svyk43?x4}TrdPujKx9jP7LeL$-D$|)B}7%T!AzP z2Zyx0qJ@}PqPlusUS6?bXbAI#kWy%aa|j7njgc!Wp%dfiKPA4I+z;nJRX4&SN1z?S`k;U#7Xl~XSnj& z4IHKB2UOm*e+b#?Wc;-FgDywc+@$PeDUmm=Vvei%0;EenO}Z%6n!8c!g3%|(=V|K$ z&94}~pZU{*@78gLyXEVD+9;K6T+qPD+m+VsYSkKCzi*{M*b(oEjyG4Smfp*KP?fzi zGC0=gSpT+U^%X&iZXbJ1s?)jb?WNiFn;0B^_Tk3*YoZp5CMQqeb>hh~IlnL{z9YzQ zc35udM&S!Sy{0!b{^URD+;z5({cDfrS&_&$-FNH~)33cUo+*Fc@?#xy?CRqlk!4Q= b<0shv6&4qfn=SDl82SvJu6{1-oD!Mc9Wh%NI0+ zxJ){EhkbEDP}uU5EjiBGAC!5F4k#!kze?B}5wQNKlF*`k%-Tt1>)0J@j-CD7tgU9X zTyLpDQO=_y@{a5q{fZb`mxg34D$OCEc!O>&YHCe7ycMtHymUkG}^BS%5xc@O1TaS?83{ F1OV17hbRC5 delta 305 zcmeyy^pRxVjlO+L z*UfBRpgNwCAirRS{|LZ&BtQ)){@BySF~p*G>*bq#EebrW0r}o{pZ)(|9wjoN%fo2q z?*tLQQ?E>RPRP$-{mjwKW6*J8MwNcrtF6%yE>2g<6I{cs4%ue}A<+vfS?dA&2{eiUhQ=GS|M zSzghf4lq1oyv}nm;`qcXJj-91PUm~@@bUhiOfi*Q>`o^tVt^iF@O1TaS?83{1OV4$ Bh}-}G diff --git a/public/images/pokemon/back/774-orange-meteor.json b/public/images/pokemon/back/774-orange-meteor.json new file mode 100644 index 00000000000..78c5aa06158 --- /dev/null +++ b/public/images/pokemon/back/774-orange-meteor.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "774.png", + "format": "RGBA8888", + "size": { + "w": 37, + "h": 37 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 37, + "h": 37 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 37, + "h": 37 + }, + "frame": { + "x": 0, + "y": 0, + "w": 37, + "h": 37 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:241dff4083e172e8503b54a7f0210f8d:982b194223ffeef2ba672b3c5979a426:37281ac0aa1e619ef385b889b64064b7$" + } +} diff --git a/public/images/pokemon/back/774-orange-meteor.png b/public/images/pokemon/back/774-orange-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..bd27cc746e39437fe23d6624414141fa640650d7 GIT binary patch literal 491 zcmeAS@N?(olHy`uVBq!ia0vp^svyk43?x4}TrdPujKx9jP7LeL$-D$|)B}7%T!AzP z2Zyx0qJ@}PqPlusUS6?bXbAI#kWy%aa|j7njgc!Wp%dfiKPA4I+z;nJRX4&SN1z?S`k;U#7Xl~XSnj& z4IHKB2UOm*e+b#?Wc;-FgDywc+@$PeDUmm=Vvei%0;EenO}Z%6n!8c!g3%|(=V|K$ z&94}~pZU{*@78gLyXEVD+9;K6T+qPD+m+VsYSkKCzi*{M*b(oEjyG4Smfp*KP?fzi zGC0=gSpT+U^%X&iZXbJ1s?)jb?WNiFn;0B^_Tk3*YoZp5CMQqeb>hh~IlnL{z9YzQ zc35udM&S!Sy{0!b{^URD+;z5({cDfrS&_&$-FNH~)33cUo+*Fc@?#xy?CRqlk!4Q= b<0shv6&4qfn=SDl82SvJu6{1-oD!M(Y>nMWwmMJC&YI3u5zhxvZ4P_++n)oBz5MYtwE?inL0` zO$b~Wu}6nh^(*I29?q1lqDKW^PFTKaGB=})*QePMuGNX&Nnd*nthdea$@6+=T$~hX zbLQ83hFMS!AGtUmnLq4V?eiz^C_E(?({44OI- zqCXSjjEbZH000bhQchC<|NsC0|NsC0|Ns99#84&x0084jL_t(IjkVL+4ul{K1yFBG z-RA%QcUlyXibyh<`(PAK%IY+^kZ))O^9X|sFo?*QdM{?`wOd$3LezI)Ma&`eAc)Td ztN3D~3pVnZf+(;{kogEYh;@(O^et9XrARTdU8c=HPcR0 zWHY=Vr&6(aSqe((W4R0oWVIE=5$TYp@{I7NG5Yhv|{a67i1Om0fbXbAI#kWy%aa|j7njgc!Wp%dfiKPA4I+z;nJRX4&SN1z?S`k;U#7Xl~XSnj& z4IHKB2UOm*e+b#?Wc;-FgDywc+@$PeDUmm=Vvei%0;EenO}Z%6n!8c!g3%|(=V|K$ z&94}~pZU{*@78gLyXEVD+9;K6T+qPD+m+VsYSkKCzi*{M*b(oEjyG4Smfp*KP?fzi zGC0=gSpT+U^%X&iZXbJ1s?)jb?WNiFn;0B^_Tk3*YoZp5CMQqeb>hh~IlnL{z9YzQ zc35udM&S!Sy{0!b{^URD+;z5({cDfrS&_&$-FNH~)33cUo+*Fc@?#xy?CRqlk!4Q= b<0shv6&4qfn=SDl82SvJu6{1-oD!MB@M8Nu^N5E4tz&nrId=AQv$mSm za=oPrMLCa-$UCxc^ebX$T^f?Hs5IAjr_!@&L2RBbmz5G3pX`-!^Ix}OZQ3nKkygpL z34tpk_UN#xe&yWB!1(fn^|m=ad0y{~i<2U4 z&is1MFv~0Y(*cG@jMsTCw)82llytkAttWfn@bUW3tQz;ZJpLXiWC8k&!PC{xWt~$( F697bKhk*b9 delta 305 zcmeyy^pRTabM*`G<;*ULD978O6w_d)<*P_6~8j$aO_u2pdo2?z1kWb;o@|qJi+yh;unRE^DL`>BrW1L`!usj zV}tjEpBz>lrIVOXObc4rIc@3LCtWk5y(CoxeYWqc#_K#6BaTnJ!n6F9>2$sa4bXbAI#kWy%aa|j7njgc!Wp%dfiKPA4I+z;nJRX4&SN1z?S`k;U#7Xl~XSnj& z4IHKB2UOm*e+b#?Wc;-FgDywc+@$PeDUmm=Vvei%0;EenO}Z%6n!8c!g3%|(=V|K$ z&94}~pZU{*@78gLyXEVD+9;K6T+qPD+m+VsYSkKCzi*{M*b(oEjyG4Smfp*KP?fzi zGC0=gSpT+U^%X&iZXbJ1s?)jb?WNiFn;0B^_Tk3*YoZp5CMQqeb>hh~IlnL{z9YzQ zc35udM&S!Sy{0!b{^URD+;z5({cDfrS&_&$-FNH~)33cUo+*Fc@?#xy?CRqlk!4Q= b<0shv6&4qfn=SDl82SvJu6{1-oD!M^J`V}#>E)B_8RGMqNQ|Z~XAU02z%SwriPxi{V`LA2CHtm+ANULPr zgus;%dvsV;zjE&6;Y`^odQ|Y`gyowib2G|#eVQ%dTAk>f^tIQ(dfObIJg;}g#YvGi zXMVkBnB^7y=>Wqc#_K#6Tl$n&O1fRm){{MO_;~$iR*m~y9)AxMvH*R?;OXk;vd$@? F2>>w|h-Cl( delta 305 zcmeyy^pRrhB&Rx zk~fULKy^GNL4Lsu{}F)mNPrqp{IREtV~9oX*2_2fS`>I#1M1SRS;o zB9hDNRq{?A&Xld9M+IL_SpI3U0Hci8=h+sn)rr|jUwaFzx6Sj(^Ll5@{V3Ar%&+$h zv%I1|9bkCGc%A2B#PNw&c$U91ozC~*;p6>3nPMur*qu&P!~i|U;OXk;vd$@?2>|l@ BiQxbM diff --git a/public/images/pokemon/back/774-yellow-meteor.json b/public/images/pokemon/back/774-yellow-meteor.json new file mode 100644 index 00000000000..78c5aa06158 --- /dev/null +++ b/public/images/pokemon/back/774-yellow-meteor.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "774.png", + "format": "RGBA8888", + "size": { + "w": 37, + "h": 37 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 37, + "h": 37 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 37, + "h": 37 + }, + "frame": { + "x": 0, + "y": 0, + "w": 37, + "h": 37 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:241dff4083e172e8503b54a7f0210f8d:982b194223ffeef2ba672b3c5979a426:37281ac0aa1e619ef385b889b64064b7$" + } +} diff --git a/public/images/pokemon/back/774-yellow-meteor.png b/public/images/pokemon/back/774-yellow-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..bd27cc746e39437fe23d6624414141fa640650d7 GIT binary patch literal 491 zcmeAS@N?(olHy`uVBq!ia0vp^svyk43?x4}TrdPujKx9jP7LeL$-D$|)B}7%T!AzP z2Zyx0qJ@}PqPlusUS6?bXbAI#kWy%aa|j7njgc!Wp%dfiKPA4I+z;nJRX4&SN1z?S`k;U#7Xl~XSnj& z4IHKB2UOm*e+b#?Wc;-FgDywc+@$PeDUmm=Vvei%0;EenO}Z%6n!8c!g3%|(=V|K$ z&94}~pZU{*@78gLyXEVD+9;K6T+qPD+m+VsYSkKCzi*{M*b(oEjyG4Smfp*KP?fzi zGC0=gSpT+U^%X&iZXbJ1s?)jb?WNiFn;0B^_Tk3*YoZp5CMQqeb>hh~IlnL{z9YzQ zc35udM&S!Sy{0!b{^URD+;z5({cDfrS&_&$-FNH~)33cUo+*Fc@?#xy?CRqlk!4Q= b<0shv6&4qfn=SDl82SvJu6{1-oD!MmguF#X9 zJ~dP4nwkz!B?E6skY6yve*bq#EebrW0r}oXQ~&+1UcR6q z#AVXSJM4=Kg2I-cY{_xf{-DfbbU;BV`BlQ+h=BD+m4p`UW7bY8TgUELbL{NrW^FaA z<$6mMigF$uk#}U@=vTzhx-=wXQE9I6PNiqlg4jG=E-NK6KG`ed=D%*m+O%7eBCV2f z69QL8?9pLW{mQwMhcjiX=uyF!6P9n9%*`m{^=Y<*YjvV`($`)C>uqy<^1R*|7biv9 zocZ;hVU}0)rvnU+7_akOZ0S>8Dd~1KTTk}D;p6q6SvBr+dHg+4$O7`Sr>mdKI;Vst E0FZo$r~m)} delta 305 zcmeyy^pRTabM*`G<;*ULD978O6w_d)<*P_6~8j$aO_u2pdo2?z1kWb;o@|qJi+yh;unRE^DL`>BrW1L`!usj zV}tjEpBz>lrIVOXObc4rIc@3LCtWk5y(CoxeYWqc#_K#6BaTnJ!n6F9>2$sa4V;U6fg%&}p4p19)@{-XSg>A7a&@%Et=Vq@_ zH`FojnfW*l+Q&fMcdz+8B6hK$fC&wXW{X8Sg;RgNsW4W5#7mJu*{UUV-fiG|Yq?od zT{6axwqqx#QXxk1jWl~_3O_#^2EQ~g!{+eVuhtbfqLX8g4MGfRG|!<@Ux-ppn^tXg zu@lftjWyUP{BPumy3LLU^^7Ua6j|(x+&*Dv*6K5vAI~}Qegj>r$4FUr{r+R0=f!j(vQujbm=n5?a3qdRlD4!yo)-k@>3StZHB}mAzJ7mZ zdz6S#cGZ6B#~SvwO#d2(HB$iNbRI|`MgnfaTVeSfTLJ*R<>8PAgeZi}R-Wn-z^Jfr z!Cq$>s}D3_i4-UptuvN>cr!%OMbp!a)dmws6QZt+TXEOBA40lZh|Z0y zj7f#tj?dkpS$kPp5~NV2B~}Hy0$_hfcnOAWPnkl&>1e&@aJ`WPK;!Uf(Hnd6=Q<*d zt=X<0HyuD^c+ScsK$kbA({MWHJQ$BJln5|<_!xWD>w9l6qFw9C(#1R)d`wB&w1?3+ z9ALw}O?PLc2_bXbAI#kWy%aa|j7njgc!Wp%dfiKPA4I+z;nJRX4&SN1z?S`k;U#7Xl~XSnj& z4IHKB2UOm*e+b#?Wc;-FgDywc+@$PeDUmm=Vvei%0;EenO}Z%6n!8c!g3%|(=V|K$ z&94}~pZU{*@78gLyXEVD+9;K6T+qPD+m+VsYSkKCzi*{M*b(oEjyG4Smfp*KP?fzi zGC0=gSpT+U^%X&iZXbJ1s?)jb?WNiFn;0B^_Tk3*YoZp5CMQqeb>hh~IlnL{z9YzQ zc35udM&S!Sy{0!b{^URD+;z5({cDfrS&_&$-FNH~)33cUo+*Fc@?#xy?CRqlk!4Q= b<0shv6&4qfn=SDl82SvJu6{1-oD!MxsF@GmeOjJbx000mW5Gg4sIyyR8Sy^PTHRP@gdp^c9ZN{mouR*QW z^YinjrmV$w+`9k(01b3fPE!E?|NsC0|NsC0|Ns9j1VOC;0087kL_t(IjkVL+4ul{K z1yFB`jurp^d#9jm71U%h_rWNfl+|f6A=}Uk{2K;&!5|{<)PHlapdO1wBt-WPtccmU zI|$-4Zr=y4nCP6kl!C~yi4%VWH;8qTFHl%YgC<&*K9d?T_mnb7BAOlv3n1_1FnV%D ztu52epeW3+LPn)x@v;<@)F-4G63A*TiX+k?Pi4<0v-m_-dKZR4Mn5acyLzvxyEWST z25GUabj|rqj7OrausN~zMwlI&PbL>7*O@u7EFNb2cK}_bEqP!7@qk-~XhO%4)C{BA gHJ1)x@bTY#0lC==+fq{czyJUM07*qoM6N<$g342xJ^%m! delta 329 zcmV-P0k;130`UTnF@GdbOjJbx000mW5DYFZ5Ij5;P*GBfi}UmI(O^et9XrARTdU8c=HPcR0 zWHY=Vr&6(aSqe((W4R0oWVIE=5$TYp@@JD-d?G8o3y(oYKP$?++EbXbAI#kWy%aa|j7njgc!Wp%dfiKPA4I+z;nJRX4&SN1z?S`k;U#7Xl~XSnj& z4IHKB2UOm*e+b#?Wc;-FgDywc+@$PeDUmm=Vvei%0;EenO}Z%6n!8c!g3%|(=V|K$ z&94}~pZU{*@78gLyXEVD+9;K6T+qPD+m+VsYSkKCzi*{M*b(oEjyG4Smfp*KP?fzi zGC0=gSpT+U^%X&iZXbJ1s?)jb?WNiFn;0B^_Tk3*YoZp5CMQqeb>hh~IlnL{z9YzQ zc35udM&S!Sy{0!b{^URD+;z5({cDfrS&_&$-FNH~)33cUo+*Fc@?#xy?CRqlk!4Q= b<0shv6&4qfn=SDl82SvJu6{1-oD!MxsF@GmeOjJbx000mW5Gg4sIyyR8Sy^PTHRP@gdp^c9ZN{mouR*QW z^YinjrmV$w+`9k(01b3fPE!E?|NsC0|NsC0|Ns9j1VOC;0087kL_t(IjkVL+4ul{K z1yFB`jurp^d#9jm71U%h_rWNfl+|f6A=}Uk{2K;&!5|{<)PHlapdO1wBt-WPtccmU zI|$-4Zr=y4nCP6kl!C~yi4%VWH;8qTFHl%YgC<&*K9d?T_mnb7BAOlv3n1_1FnV%D ztu52epeW3+LPn)x@v;<@)F-4G63A*TiX+k?Pi4<0v-m_-dKZR4Mn5acyLzvxyEWST z25GUabj|rqj7OrausN~zMwlI&PbL>7*O@u7EFNb2cK}_bEqP!7@qk-~XhO%4)C{BA gHJ1)x@bTY#0lC==+fq{czyJUM07*qoM6N<$g342xJ^%m! delta 329 zcmV-P0k;130`UTnF@GdbOjJbx000mW5FaWMFg_teS1)&$Tl4et(O^et9XrARTdU8c=HPcR0 zWHY=Vr&6(aSqe((W4R0oWVIE=5$TYp@@JD-d?G8o3y(oYKP$?++EbXbAI#kWy%aa|j7njgc!Wp%dfiKPA4I+z;nJRX4&SN1z?S`k;U#7Xl~XSnj& z4IHKB2UOm*e+b#?Wc;-FgDywc+@$PeDUmm=Vvei%0;EenO}Z%6n!8c!g3%|(=V|K$ z&94}~pZU{*@78gLyXEVD+9;K6T+qPD+m+VsYSkKCzi*{M*b(oEjyG4Smfp*KP?fzi zGC0=gSpT+U^%X&iZXbJ1s?)jb?WNiFn;0B^_Tk3*YoZp5CMQqeb>hh~IlnL{z9YzQ zc35udM&S!Sy{0!b{^URD+;z5({cDfrS&_&$-FNH~)33cUo+*Fc@?#xy?CRqlk!4Q= b<0shv6&4qfn=SDl82SvJu6{1-oD!MxsF@GmeOjJbx000mW5Gg4sIyyR8Sy^PTHRP@gdp^c9ZN{mouR*QW z^YinjrmV$w+`9k(01b3fPE!E?|NsC0|NsC0|Ns9j1VOC;0087kL_t(IjkVL+4ul{K z1yFB`jurp^d#9jm71U%h_rWNfl+|f6A=}Uk{2K;&!5|{<)PHlapdO1wBt-WPtccmU zI|$-4Zr=y4nCP6kl!C~yi4%VWH;8qTFHl%YgC<&*K9d?T_mnb7BAOlv3n1_1FnV%D ztu52epeW3+LPn)x@v;<@)F-4G63A*TiX+k?Pi4<0v-m_-dKZR4Mn5acyLzvxyEWST z25GUabj|rqj7OrausN~zMwlI&PbL>7*O@u7EFNb2cK}_bEqP!7@qk-~XhO%4)C{BA gHJ1)x@bTY#0lC==+fq{czyJUM07*qoM6N<$g342xJ^%m! delta 329 zcmV-P0k;130`UTnF@GdbOjJbx000mW5DFbG4JJGhGEq=$mGkrS(O^et9XrARTdU8c=HPcR0 zWHY=Vr&6(aSqe((W4R0oWVIE=5$TYp@@JD-d?G8o3y(oYKP$?++EbXbAI#kWy%aa|j7njgc!Wp%dfiKPA4I+z;nJRX4&SN1z?S`k;U#7Xl~XSnj& z4IHKB2UOm*e+b#?Wc;-FgDywc+@$PeDUmm=Vvei%0;EenO}Z%6n!8c!g3%|(=V|K$ z&94}~pZU{*@78gLyXEVD+9;K6T+qPD+m+VsYSkKCzi*{M*b(oEjyG4Smfp*KP?fzi zGC0=gSpT+U^%X&iZXbJ1s?)jb?WNiFn;0B^_Tk3*YoZp5CMQqeb>hh~IlnL{z9YzQ zc35udM&S!Sy{0!b{^URD+;z5({cDfrS&_&$-FNH~)33cUo+*Fc@?#xy?CRqlk!4Q= b<0shv6&4qfn=SDl82SvJu6{1-oD!MxsF@GmeOjJbx000mW5Gg4sIyyR8Sy^PTHRP@gdp^c9ZN{mouR*QW z^YinjrmV$w+`9k(01b3fPE!E?|NsC0|NsC0|Ns9j1VOC;0087kL_t(IjkVL+4ul{K z1yFB`jurp^d#9jm71U%h_rWNfl+|f6A=}Uk{2K;&!5|{<)PHlapdO1wBt-WPtccmU zI|$-4Zr=y4nCP6kl!C~yi4%VWH;8qTFHl%YgC<&*K9d?T_mnb7BAOlv3n1_1FnV%D ztu52epeW3+LPn)x@v;<@)F-4G63A*TiX+k?Pi4<0v-m_-dKZR4Mn5acyLzvxyEWST z25GUabj|rqj7OrausN~zMwlI&PbL>7*O@u7EFNb2cK}_bEqP!7@qk-~XhO%4)C{BA gHJ1)x@bTY#0lC==+fq{czyJUM07*qoM6N<$g342xJ^%m! delta 329 zcmV-P0k;130`UTnF@GdbOjJbx000mW5HTefOgbiJPBfr`UGwwv(O^et9XrARTdU8c=HPcR0 zWHY=Vr&6(aSqe((W4R0oWVIE=5$TYp@@JD-d?G8o3y(oYKP$?++EbXbAI#kWy%aa|j7njgc!Wp%dfiKPA4I+z;nJRX4&SN1z?S`k;U#7Xl~XSnj& z4IHKB2UOm*e+b#?Wc;-FgDywc+@$PeDUmm=Vvei%0;EenO}Z%6n!8c!g3%|(=V|K$ z&94}~pZU{*@78gLyXEVD+9;K6T+qPD+m+VsYSkKCzi*{M*b(oEjyG4Smfp*KP?fzi zGC0=gSpT+U^%X&iZXbJ1s?)jb?WNiFn;0B^_Tk3*YoZp5CMQqeb>hh~IlnL{z9YzQ zc35udM&S!Sy{0!b{^URD+;z5({cDfrS&_&$-FNH~)33cUo+*Fc@?#xy?CRqlk!4Q= b<0shv6&4qfn=SDl82SvJu6{1-oD!MxsF@GmeOjJbx000mW5Gg4sIyyR8Sy^PTHRP@gdp^c9ZN{mouR*QW z^YinjrmV$w+`9k(01b3fPE!E?|NsC0|NsC0|Ns9j1VOC;0087kL_t(IjkVL+4ul{K z1yFB`jurp^d#9jm71U%h_rWNfl+|f6A=}Uk{2K;&!5|{<)PHlapdO1wBt-WPtccmU zI|$-4Zr=y4nCP6kl!C~yi4%VWH;8qTFHl%YgC<&*K9d?T_mnb7BAOlv3n1_1FnV%D ztu52epeW3+LPn)x@v;<@)F-4G63A*TiX+k?Pi4<0v-m_-dKZR4Mn5acyLzvxyEWST z25GUabj|rqj7OrausN~zMwlI&PbL>7*O@u7EFNb2cK}_bEqP!7@qk-~XhO%4)C{BA gHJ1)x@bTY#0lC==+fq{czyJUM07*qoM6N<$g342xJ^%m! delta 329 zcmV-P0k;130`UTnF@GdbOjJbx000mW5H}hpN+C63EkwqDoAdMY(O^et9XrARTdU8c=HPcR0 zWHY=Vr&6(aSqe((W4R0oWVIE=5$TYp@@JD-d?G8o3y(oYKP$?++EbXbAI#kWy%aa|j7njgc!Wp%dfiKPA4I+z;nJRX4&SN1z?S`k;U#7Xl~XSnj& z4IHKB2UOm*e+b#?Wc;-FgDywc+@$PeDUmm=Vvei%0;EenO}Z%6n!8c!g3%|(=V|K$ z&94}~pZU{*@78gLyXEVD+9;K6T+qPD+m+VsYSkKCzi*{M*b(oEjyG4Smfp*KP?fzi zGC0=gSpT+U^%X&iZXbJ1s?)jb?WNiFn;0B^_Tk3*YoZp5CMQqeb>hh~IlnL{z9YzQ zc35udM&S!Sy{0!b{^URD+;z5({cDfrS&_&$-FNH~)33cUo+*Fc@?#xy?CRqlk!4Q= b<0shv6&4qfn=SDl82SvJu6{1-oD!MxsF@GmeOjJbx000mW5Gg4sIyyR8Sy^PTHRP@gdp^c9ZN{mouR*QW z^YinjrmV$w+`9k(01b3fPE!E?|NsC0|NsC0|Ns9j1VOC;0087kL_t(IjkVL+4ul{K z1yFB`jurp^d#9jm71U%h_rWNfl+|f6A=}Uk{2K;&!5|{<)PHlapdO1wBt-WPtccmU zI|$-4Zr=y4nCP6kl!C~yi4%VWH;8qTFHl%YgC<&*K9d?T_mnb7BAOlv3n1_1FnV%D ztu52epeW3+LPn)x@v;<@)F-4G63A*TiX+k?Pi4<0v-m_-dKZR4Mn5acyLzvxyEWST z25GUabj|rqj7OrausN~zMwlI&PbL>7*O@u7EFNb2cK}_bEqP!7@qk-~XhO%4)C{BA gHJ1)x@bTY#0lC==+fq{czyJUM07*qoM6N<$g342xJ^%m! delta 329 zcmV-P0k;130`UTnF@GdbOjJbx000mW5GNNTIUzMrFG-hajq~&K(O^et9XrARTdU8c=HPcR0 zWHY=Vr&6(aSqe((W4R0oWVIE=5$TYp@@JD-d?G8o3y(oYKP$?++EbXbAI#kWy%aa|j7njgc!Wp%dfiKPA4I+z;nJRX4&SN1z?S`k;U#7Xl~XSnj& z4IHKB2UOm*e+b#?Wc;-FgDywc+@$PeDUmm=Vvei%0;EenO}Z%6n!8c!g3%|(=V|K$ z&94}~pZU{*@78gLyXEVD+9;K6T+qPD+m+VsYSkKCzi*{M*b(oEjyG4Smfp*KP?fzi zGC0=gSpT+U^%X&iZXbJ1s?)jb?WNiFn;0B^_Tk3*YoZp5CMQqeb>hh~IlnL{z9YzQ zc35udM&S!Sy{0!b{^URD+;z5({cDfrS&_&$-FNH~)33cUo+*Fc@?#xy?CRqlk!4Q= b<0shv6&4qfn=SDl82SvJu6{1-oD!MxsF@GmeOjJbx000mW5Gg4sIyyR8Sy^PTHRP@gdp^c9ZN{mouR*QW z^YinjrmV$w+`9k(01b3fPE!E?|NsC0|NsC0|Ns9j1VOC;0087kL_t(IjkVL+4ul{K z1yFB`jurp^d#9jm71U%h_rWNfl+|f6A=}Uk{2K;&!5|{<)PHlapdO1wBt-WPtccmU zI|$-4Zr=y4nCP6kl!C~yi4%VWH;8qTFHl%YgC<&*K9d?T_mnb7BAOlv3n1_1FnV%D ztu52epeW3+LPn)x@v;<@)F-4G63A*TiX+k?Pi4<0v-m_-dKZR4Mn5acyLzvxyEWST z25GUabj|rqj7OrausN~zMwlI&PbL>7*O@u7EFNb2cK}_bEqP!7@qk-~XhO%4)C{BA gHJ1)x@bTY#0lC==+fq{czyJUM07*qoM6N<$g342xJ^%m! delta 329 zcmV-P0k;130`UTnF@GdbOjJbx000mW5HBecMLr{7Rx!M(O^et9XrARTdU8c=HPcR0 zWHY=Vr&6(aSqe((W4R0oWVIE=5$TYp@@JD-d?G8o3y(oYKP$?++E1ONa+#zq&f?P31! z*azCnsufj6dmwFTYJF)B!C>%lDQP!3IUEibj69ZZVw9_Ml1io41^I4lZ0v#sW%h=E zcdwaS0d&6)dF}~{jW6n12RYA>+I(fS4|QUv(1k~5gEJaC+$Nkq&3|F~*%ma#>eNfvEurt%hT@>t|`!SsRdVZlg_cn=AIbN!N*m$vPK>>u~(Nj(D zigOeW*AMVQeW`_dIokFH4^OV#;#9QxpcDZ3OIw9@5Gu1irN6n_OeNy}Xq#|I*6)6; z-Rz|4p~h3U4!P%H2apDL6+pV5YI1@pm1~3`H}5yf4ePE>UUu!mj(-Y0zV1ijA6a<* zZIZ;F5vU$a852%HW>QPYZ552D<*<4Qd-=Hb4OP;uhd>U;%5{0oPfJ3}ph~czRchz6 zL4VAr>7Ga|#M0HJ`<|qEZv-~s%+MTP<}H+~(^xn_ULjB!Q6VujNV0;P$6Pl%g3he9cg(I4)`E3h2$C#l!Km=zg078!DF#pXziE~KrU5m-P4H;l{}~PrK`VO)3s2P3S?DuY{Ya!u)v+kkRdAkvN^|At@&1ufYZ)(q zO=4IZg^Y2362>J?y54A+=QL?B<4Q{K)FvxemDd5y{`d~f=RsB z5g^LZtgbLgJu4d^K>`^4!5w(L4RvisQ<#|LT*mSY{iQA}tG0C9Pg?Eja)yVsK%wsO z=TcqLDL}4|{^CQ1I!SE~D}S|f@||ijCKL^i%VC_B)MFWzHAgq8f5h1(UDn6eSEv*5 zfT;qPPok$m@2pZg!Gz`Nn`SGoRiNh$gGP`{ zBr3X7LFmC8qAVx!t0;`Z+{!I9bHI5m%{lElRO^D?%Op)`szeTZ&kV+M0gHN*D~Wf+ zY{wy#gS6e~53ILgO;$GU4@YP)aen{Dk$h#M?A4;W7#L*p`6_Ky_b_ad%V$4PjpM6O zy5(^D>|@~r2qFS5$qj39vSM%IJ{Dp{FRuc~ms0|HlC}{F{ONfqRll%0rBi49w4$3n z53Ds_;U%xk&ZSrC`@S$Ul^v{1jhihmu<^hCS!(U76(7Eqe_d za|=(YZ2zT`^t*4e!TG-j3sEz0(A+r%cCkw-b!S#6{)dkmFQ!w2T)GzP;>$> zq_{CWRSUjmz2uQswIW1?X!`2$m^~LzJARHgzljh3SUAIU=)9UG$LhFn*#R1n6+a(m zroGAQj#@sVrY;%53t_!nUl@(FcC+qHkY`g?3H`}NC9abjKLC2o{6TNeKV`kdj2pT$ z;4>|*unU6fg80~Rr6)yveZxizpPS0tpUugi%X0gvLaB(sNQz~QWzw9JP}9U9%o(3< z#lvuVu0~Bjn&gK})%w9Z5HeKjNH*kEhNN~pjqg+xZL9e~)mVh!bH-b$izo3Ky8n;< zlwON`kVywU)1%cWTzd{VI3PUY+Qm)8`@hmrFbKhdn{@JH5g zOVENQ6s-+eRV-p#z@mqR4M39)^u(5>@WSR8+`4iT0)@FhG42s4?bEVYVHCJR9shnm zOR%|`PskESr+0-^+r)F4Q}Mnf4-91K*HMbg0-f7)@3}wdn}}i{P3)<=eLuK}&E<39 zo-m7zEUw%^N+fNM6M=qaHZ}BdPr z^%lhjN6U~<3D|0Kz@3%-Biub!|iVGeYZLxtz== zj)SwNc11VNv%g_t*bMfG`Z09C_PChoGTz>xha;H8jUzl^^q9`&6s#6?)0>hh=WAT48NfTko|7F#_cU!-Julikxgsi_+ZG=?TmN4cUV)X^09&SJ3odEW+QyJDR0_%$JMPCOvz<3&8l2`Nb-I*T{bW__&Lb literal 0 HcmV?d00001 diff --git a/public/images/pokemon/exp/774-blue.png b/public/images/pokemon/exp/774-blue.png index 5678427bf7c4c468477ade57947326ba335f51f7..100fe4a151d6e81f494c97492ea5ad31e647410e 100644 GIT binary patch delta 7218 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 A7ytkO delta 7241 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 X(y(H^%r6yy00000NkvXXu0mjfY*r%O diff --git a/public/images/pokemon/exp/774-green-meteor.json b/public/images/pokemon/exp/774-green-meteor.json new file mode 100644 index 00000000000..72646f03857 --- /dev/null +++ b/public/images/pokemon/exp/774-green-meteor.json @@ -0,0 +1,1994 @@ +{ + "textures": [ + { + "image": "774.png", + "format": "RGBA8888", + "size": { + "w": 158, + "h": 158 + }, + "scale": 1, + "frames": [ + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 42, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 41, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 42, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 41, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 12, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 42, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0055.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 41, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0072.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 42, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0075.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 41, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0093.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 12, + "w": 42, + "h": 38 + }, + "frame": { + "x": 42, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 37, + "y": 14, + "w": 42, + "h": 37 + }, + "frame": { + "x": 84, + "y": 0, + "w": 42, + "h": 37 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 37, + "y": 14, + "w": 42, + "h": 37 + }, + "frame": { + "x": 84, + "y": 0, + "w": 42, + "h": 37 + } + }, + { + "filename": "0056.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 37, + "y": 14, + "w": 42, + "h": 37 + }, + "frame": { + "x": 84, + "y": 0, + "w": 42, + "h": 37 + } + }, + { + "filename": "0076.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 37, + "y": 14, + "w": 42, + "h": 37 + }, + "frame": { + "x": 84, + "y": 0, + "w": 42, + "h": 37 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0054.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0073.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0074.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 75, + "w": 40, + "h": 41 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 75, + "w": 40, + "h": 41 + } + }, + { + "filename": "0064.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 75, + "w": 40, + "h": 41 + } + }, + { + "filename": "0084.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 75, + "w": 40, + "h": 41 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0062.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0063.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0082.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0083.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 39, + "y": 116, + "w": 40, + "h": 40 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 39, + "y": 116, + "w": 40, + "h": 40 + } + }, + { + "filename": "0061.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 39, + "y": 116, + "w": 40, + "h": 40 + } + }, + { + "filename": "0081.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 39, + "y": 116, + "w": 40, + "h": 40 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 26, + "y": 11, + "w": 40, + "h": 40 + }, + "frame": { + "x": 40, + "y": 75, + "w": 40, + "h": 40 + } + }, + { + "filename": "0092.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 26, + "y": 11, + "w": 40, + "h": 40 + }, + "frame": { + "x": 79, + "y": 115, + "w": 40, + "h": 40 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 28, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 28, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0049.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0058.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 28, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0066.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0067.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0068.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0069.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0078.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 28, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0086.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0087.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0088.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0089.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0090.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 27, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 36, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 32, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 27, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 36, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 32, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 27, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0051.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 36, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0057.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 32, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0070.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 27, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0071.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 36, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0077.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 32, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0094.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 13, + "y": 1, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 6, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 13, + "y": 1, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 6, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0059.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0060.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 13, + "y": 1, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0065.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 6, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0079.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0080.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 13, + "y": 1, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0085.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 6, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0091.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:7aae9fa19bed844305af4b8fe4e51932:e292dad33ad7e92ac28b96bf10d16c70:37281ac0aa1e619ef385b889b64064b7$" + } +} diff --git a/public/images/pokemon/exp/774-green-meteor.png b/public/images/pokemon/exp/774-green-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..78e8242646344de4de4d3efd794acde3c07a26f5 GIT binary patch literal 2326 zcmZuzc{~%08{aIog%=$*C6aP%7|ZoW%~2s|xhcn+bK26Bt6}alSB{ok36n5mB21EF z%9cWMM&!1ONa+#zq&f?P31! z*azCnsufj6dmwFTYJF)B!C>%lDQP!3IUEibj69ZZVw9_Ml1io41^I4lZ0v#sW%h=E zcdwaS0d&6)dF}~{jW6n12RYA>+I(fS4|QUv(1k~5gEJaC+$Nkq&3|F~*%ma#>eNfvEurt%hT@>t|`!SsRdVZlg_cn=AIbN!N*m$vPK>>u~(Nj(D zigOeW*AMVQeW`_dIokFH4^OV#;#9QxpcDZ3OIw9@5Gu1irN6n_OeNy}Xq#|I*6)6; z-Rz|4p~h3U4!P%H2apDL6+pV5YI1@pm1~3`H}5yf4ePE>UUu!mj(-Y0zV1ijA6a<* zZIZ;F5vU$a852%HW>QPYZ552D<*<4Qd-=Hb4OP;uhd>U;%5{0oPfJ3}ph~czRchz6 zL4VAr>7Ga|#M0HJ`<|qEZv-~s%+MTP<}H+~(^xn_ULjB!Q6VujNV0;P$6Pl%g3he9cg(I4)`E3h2$C#l!Km=zg078!DF#pXziE~KrU5m-P4H;l{}~PrK`VO)3s2P3S?DuY{Ya!u)v+kkRdAkvN^|At@&1ufYZ)(q zO=4IZg^Y2362>J?y54A+=QL?B<4Q{K)FvxemDd5y{`d~f=RsB z5g^LZtgbLgJu4d^K>`^4!5w(L4RvisQ<#|LT*mSY{iQA}tG0C9Pg?Eja)yVsK%wsO z=TcqLDL}4|{^CQ1I!SE~D}S|f@||ijCKL^i%VC_B)MFWzHAgq8f5h1(UDn6eSEv*5 zfT;qPPok$m@2pZg!Gz`Nn`SGoRiNh$gGP`{ zBr3X7LFmC8qAVx!t0;`Z+{!I9bHI5m%{lElRO^D?%Op)`szeTZ&kV+M0gHN*D~Wf+ zY{wy#gS6e~53ILgO;$GU4@YP)aen{Dk$h#M?A4;W7#L*p`6_Ky_b_ad%V$4PjpM6O zy5(^D>|@~r2qFS5$qj39vSM%IJ{Dp{FRuc~ms0|HlC}{F{ONfqRll%0rBi49w4$3n z53Ds_;U%xk&ZSrC`@S$Ul^v{1jhihmu<^hCS!(U76(7Eqe_d za|=(YZ2zT`^t*4e!TG-j3sEz0(A+r%cCkw-b!S#6{)dkmFQ!w2T)GzP;>$> zq_{CWRSUjmz2uQswIW1?X!`2$m^~LzJARHgzljh3SUAIU=)9UG$LhFn*#R1n6+a(m zroGAQj#@sVrY;%53t_!nUl@(FcC+qHkY`g?3H`}NC9abjKLC2o{6TNeKV`kdj2pT$ z;4>|*unU6fg80~Rr6)yveZxizpPS0tpUugi%X0gvLaB(sNQz~QWzw9JP}9U9%o(3< z#lvuVu0~Bjn&gK})%w9Z5HeKjNH*kEhNN~pjqg+xZL9e~)mVh!bH-b$izo3Ky8n;< zlwON`kVywU)1%cWTzd{VI3PUY+Qm)8`@hmrFbKhdn{@JH5g zOVENQ6s-+eRV-p#z@mqR4M39)^u(5>@WSR8+`4iT0)@FhG42s4?bEVYVHCJR9shnm zOR%|`PskESr+0-^+r)F4Q}Mnf4-91K*HMbg0-f7)@3}wdn}}i{P3)<=eLuK}&E<39 zo-m7zEUw%^N+fNM6M=qaHZ}BdPr z^%lhjN6U~<3D|0Kz@3%-Biub!|iVGeYZLxtz== zj)SwNc11VNv%g_t*bMfG`Z09C_PChoGTz>xha;H8jUzl^^q9`&6s#6?)0>hh=WAT48NfTko|7F#_cU!-Julikxgsi_+ZG=?TmN4cUV)X^09&SJ3odEW+QyJDR0_%$JMPCOvz<3&8l2`Nb-I*T{bW__&Lb literal 0 HcmV?d00001 diff --git a/public/images/pokemon/exp/774-green.png b/public/images/pokemon/exp/774-green.png index e09fdab20c20b439ff2271e18ddd39d783a4ba53..8d2ceff5d40b692666926e7899d9b1862852096f 100644 GIT binary patch literal 18745 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 X^QRZV*oahM3rWTu?(NFnAC~qP1Tj3F literal 7735 zcmV-79?0Q|P)Px#9#BkFMF0Q*5D*YIg)C&SHI&{`zV4{=^Yb;4IX9IxHj*^W4FL22000VfQchC< z|NsC0|NsC0|9*)SRsaAUu}MThRCt{2o$GqzD6@qvOVG*v-|&tE1$Bfan{V7RJNnV{ z^kk)u=wR#Z;_>)BfaAGHvs{J?F&%6zZ;M2$Ww`K}7rRY!B_vuc!-ZI~xV1dD2Z>h8 zaN&;*N%oH01c{Kfv{Hr(vC^$|`!6WTTnAfAKf0N)h@Q{M6`RRMN>J8>W2aSzl>|uQ zM|Y%@j+wBievYA#sg8jTlr`ZriAy(4_L-0zess^H9wT8_9Teg7I$~9^_boc5UgIR1j74Ws;H5jFPMoW%=5SmpmaFyJWjzZg2a@qz_gF^Gk|*QA#j8ol$nPcF zl-oZ}biEVj?PBYlJP(#@+LYIWAC$#z7KxSp=ti^01K ztvxt@d6YzxWhtwDNL_X6gzTA}emN;TuB(L<_UJ?(w7o9l4ck%)rRwT$q*9WdEhgy| zOoGe4xJ)#H?h8`()2=2Pr%*(!u_8KgM#QpiFO^8DEM=x*ZiUx`Br(mEH6oB*OSs5} zDV)04o-7^W)-6d<9Wpv@j_bbMB(%9CWuDio{aiK*j?2!a9twHsFng(l;;OzvbN7-k zOWlIe<_#z!bI!3Oedkt?ajn@sOnyYPUrC8s;1j_^PyiXkC`mZf_rS--Y5w!3zPUM z$-a{)R0(t6B8Tj+x~BUvzh9M-Zg=T+cV%F3Og2jO^4eu#BewHduqy-ART81|b8vOr z=9C1IX;ly$m&KXt+J#AM*DH;^9&xHlcpWtforRR07n^N+O{RQC!ExEBU9EOD2U(Ky zauh)w>@R~2*m)bx&}G979V9RF*a>7&=qI+Fi42u-QX--Ba=Dgw$vpK8fr zGPqxZfChhye+kopvc(73*5Bh_d#vUGSDO0_(zqBKguSkGx*Ta-$OA40DL;ZV-oW=T zY!D_I*U^BBk;e6`8d{QdG~i->?=$$`T62qK=Qj=ja7Vf|Uf0rq_sPexu5o^t4&oz0 zqHz@sh=Gr=tiPiNbtrE+CmQEMhX!e7t0uq*JmdMRc^+(DiDZ#as7szq?+{pFbmluA0@aai>IM=knT*DNj|oRyu8u z0}Bp==mB??EbWebS;4%@EArgH-fJlcsO9>Gxse{NuZN$5fD0L_D1f`4l4Sa6;&h0j z0XNnzvX^*C90svCOtNsb{R*V>&_YrbA+5`#xRH&Z-^_`NS`yg_0~hKXN+&k@X+L#p zNz@|dD~PIl{@Gtkd8uXt+-=$A?L01zR2-1I8Y3u)(;VrjBBms^6Wpx??zTf*NxYKq zWJl&=e9xeYmVC1iT5@GqIVHZg9jqkciY%eQkUy^!~-SK-X0Y}?BP|GHM5cj?9>8VF5y z!of0&xn2!+kMfB|ekn;=J#mOsd*cjnx0SnF4Lp?n1V@h>wf@1s+t?~IQkF<@ZJznj>h+>B#B)SlUXF4q%_ev z=E_Hj#Q)KSLk(WkSWc|SPUYI!P(QS|z+EHX#;$w(3 zva@dl-0coW>2Y}pWDEDMO9QV0E^Io>zU?s5ct~AkckRQkv2Idse z*!-T&-U4$Y91x@dG4K(ST~C~n81%V35c8uX=6*38uw`KwxdDS119yn*`jjh(K@csB z`Mr{a^6T(>kU5iu3&};?qu2kb?Bb|4&iJ{;3=BBp_s%4=Uk9Xo69*JPq71H!Vg_-9 z7V2AzYs@fckypyW_*Jgn#{mby@jSNsve1hH5W`<`_`P`!i*Z1dd;Abb_cqd~%>4&& z!2d!HbgUh|x7zDsdyottzPEA}z+TZ*SMqy{hxx%NtQ`5bHjCxt8<;5!(ye3=KLN!2#0dLt{f3+SM~zfTZ&nKR*W~x*@5kWiHa@Lt_r) zCo{!J&}Zn@_d4#EoP!rdcaE9^k`PE+n}esJ!KakbBDG%)-Wd3JGPXvYfM7?^27@67=Yv7o9Fp#NUg7mrz0|}ax zG?jygM>@LXBw?rJRaw@#y5y5V+PndR&05^nAcxv80JzgR_-j+^LThdoDJyy}!K2{< zmFOx0mQp7&0NmLe`XonQlfh&_kwiEK5rV;97$CUmrRkjxt*_~(+r*o1S*5p@ry6q(i8ga{-O~NgS!MrTeCRP0;)B^I9l$ z#t^WyLTh*NyW_@_xL9Grp-Bv$tOWewllxXD@)Za$yR=Q6rCj%A1*N% z6KyhAe{S7uEM(Nynyu@%KM-lekA3D=Nk9xDN-B=9Jo(p1HCjv|x(N|&Fl~9)!b_?b zk04ktiFe}o2XVN!xiJ{s{FfXs`}9AKxdOf3Dak6f z5M~C^U2K=)dv_4Tx!0u#BD{<3T6_-X54UGKIqnw&L9eqKF(s zXY~2tkP?D`9G)pW8<0x^$j@O5ePiH^z9R;Q7@c#-!om1nNP2>^0ZH}hR6P(u+mt!aMiXjcn^@6p%oVho;3Tw#leXOR*g*)`xO z8E_|^Qoj&~i6&97p?0N}_V@r3^BA&$QKBOnn|?px(fEn1ed(pIrv_K+UmNj%Vbwc zXwa*GJe-iLKw}#bl&U3RtaFc<-jin{10?2^h-zSfK^eZsM(ec7T`zhSQm4E=&tIla zad_0=d+jF$BFF|VEGprQ!cfEaw)Ru8;LJ?L5=b(-m}z2f*0Y}Z)@TMsR7rD$@16g@ z43OfBMdN$DBptxW0&B69A1#AxnQ-utkMaw0RkBtWuOz93-mh}k+WAsvSUVw_&m4HA zUe*HJwONF8_h_wfjgzSm=?baPhp?$Lv5H%y!B#!V#tOee1;<-D(*N^MakMP~ifB$tyv z(Je`z`s7tWwzNt#thTYsbQ||-c^a{ZC2`05ML#_H0&#LZb>$?uZg5;CW2;Ls$!n8= zcWL$>o$>^kIV!q@^{c>_UQK67`n=EMXbaVuzGo@Kqz69kCA8EDJ}=c%*Y4uHa(1d7 zeY!YmX!7xZRDDJt>yD7pt7eKRzrD`XM6kS8)myAufbX&C zd-a?()EFD&C~k8WxZC=p)hN7;Fu&7XO!>J8;%I>27*)h}u~pPqy3S_@kn58d#p9v< zVwyidU?e3(`Hhh_eE1%)i*1#$vbofl=tHU}w$rai`8NpVtOiL+=2wO1BZ$TpJfkl| z+)$Nq-U`I`+Y$y@jez9cyzyp|Qp7UP(NVTP(t< zvA2*mPxcPI2WIig-nloZu_4k{-+;{lx%S=g8-0MYAk~e%bL%U=d(@b$NTtE*_rp^_ z?z&I}Gy32)7lh~eb?`m?J)HsH+Kb;%#;oazbfm2Yo@anu6V+s2=z|Wgu|^gzBUSxz zs{c{OI?|T;CuS|kuyDo1> z+KQsQS{ulY`odqrfE9h}sh%Jgz4P?|IjTr|Bka+8UZTzy(wZ%;FJ4u$dV(Oyg6NKl z_+4+2RY|0*yiw1}8Uv*2`&s@v$|K)uSj19|+trqn*LxY>kqFB($?AQAtBh?tYUUBr z8)=1HXxY(+FA4;$l2qkV)Y+@UGH9|Sd9s+=y7ViT)l9k)SyEWbv#J;am^8#e(G_B( zFXRG|=*n?mpuEE`=a=TU+S~N(mPDXsnUCO+GSx0RwUPx9%x=e2IvF0@61x|!s>C=q z!4w^W^ZH_yOIy28hCU_crB;b%&}uy43vh-}7LNp=CJkNC7|hNp(iwLC{fikSkwfpv z@Df{)oHXh(1|W*HbjbQX1m@NJTcmB{wu&L+0xDpg3P-b1CVRXFq0>+4G|roJG>?OGvi?jE}Z%fmLsHK;04 zxqLd9YK2>1?UPs~>VFZJb4?G1Bo%S&0Y=$f@e|D9vP?OU@tcNgZ#lG53;HF0a5 zGR!L1Qj>x+x64y0iBPdsn+|>((7Ocp+OdsY4XUPw(#fmS=8Bjq+cB8!d8$6{)y9US z0ePT$ztg%*Sl^vg3q?(Id@MW9ul9f@E@$olw(gVta}P5Iu^2lTd8-%6gB~;Mb7at0 zs&KvP*M|gsp(FIIx$=!Y>h8qssnsvZPD}Vm^%>Xx^A476eaIv*&&{Hp3uQUcha6Mk zOrQ05bjcVy%D-WtPfFgWgM#@@k+yB;52Hg_d3ed?LYM3U=1JHhn=IO`@bXKiYcS8P z*a|SOx4JQoW3i`r!5= zaJ@wk5K|CtH2c(L!z?iX6_0pOf#TV0WuK!tl zn94A1b6Yqd2d<`3e6Ps5UQyinj`Mr08`t0$qPe2}v2iJY(SenFQ^6kcf#P^A< zb63x|LtK)@xxr6tox7ZT!`BiL-~TIo4~lQ`zO#Qhz6V+S2+?>O-&@40fhD;;eeV;UZ1g)iWHZ^}TF3Pa2AcDVx%9c2jlZH}>7bTA(WAZ^afx8v~f zB8;{i4mjL|jH$lA6TKePsj}!&6dfw_H^m*w`b#VGMKivb+yRGLX*!Y1_zqoP79D$0 zH^lcsnYStKL>56~ejli7tEuuLy4)e9uO$8HdvOv0CGW~{xPwX!76`woqT zy=QNthpbw>pRki_L0*Sk-oePXS+2q0It7DSjLvScTi&WB`wHK0m#*A!2Vi4QCvo|e z(-QkcvZ5*rDO*-;CM&mgo@*0jwF4|WQ%L7vUbPQNWKdq}iFRFnMRa~+Pjfa2iEq{< zbQUeVSavuv0;F25+?F2sX1ATS+cwrjo6l-kSB?R9QYn`mhy2o^{i-B*$1)~!ttlET zaa#i4OFpe4t@ZP3$SIOv8=X{^d4&9w6>ilAwc+NuJXb{42Un?*yfE^OpI@U4$l!de zo?e~8ZQL<8I$S1H(j_?ZO>Ufx0dnZxzJ3yy+jxUo5nVi@a|p<_RJ+KaRIRJx#8G#M zpbaL2s3fNSeiGVk%(RVVeiBit=U<$ao{|~)HUQ*Ah3&Ys>8j&0aX~b&n#`iz`L$am zOTMgL=?NKQ_km#K+Z9%SDh=8oGH`jYB%_P_S|g*W#VK3J&w_7<7ac0&sixSN-FUVh zf-kBW&|2z`UjfnBqYL_4slmeTQ&A2#SDA$u-7P+@E|p_EkuK4x%5)ZxOP$886?Rg1 zlwAgaR@5xU)AvyD4VAeYnK~$ygZWv$sGse_c7@S-)Awi{4a390H&6ynqyy2izBY$_ z@T2qTLesGt-Z+bZLNm#FG8Co4(6Ta)a^5boH*Ez^Vh|n}9mvO_U>=B;VeM-6X06~! z$neHlVBp(zF~0%kO^~blzcuHDwTtXcTY;g9_rbSbI4i@!JP<8|+C}#6Oy8@T<`n?* zV(@Lk0_xM;Gj;L}7JnDN_p-r%J^l7d1|T^0 z0Z0z>3C?`G<9972x3Y4OPn<5g;TNQ7{_(ASF`w9ut(Ow_yO1wi+OwrI-)?m4V?@~e zSUU3!@75Cs$5!Hn$N~DqX1?9%77mU_|NG z?E#iV(@LoB?cG>`1NCWi^;v54r44l$gutwV+2A{!|Wt5W$L+BiS8b5opY3)yACS&sAB0SuQqsUc4<3MlUEe zZ~3R}cq$6)F>_yuAMGL8bNzmR)Wt z{ZxJ-sVr_5BzK3ol0jrm(Pb7I(=?c>+*jA>Zf!Q#{;rfmG9C~{uu?w>EBTiB;bs9; zgns+{^PninnxxAr`6k+G_#(|IvhJ(Bu}rQWHmFBtF<6O}q|KT;j=pK5n+0+dev7jV z%-Syd;2>9e4w}a)QuozpolU|ytou_sgHS2~D{W;bm@nc#fHc=W9K`}FLhE+p|Pu55vb@OH@YMa)RsJM zs8}_-v9`gHq9l4!7gCedW?Zo)m-X~LuU&>3+I)=Cju~}()sUVUiG9ZW6(SX%`J%` zOL?+o`jfxt9uI?qwQILBN7Lcx-qo(}FI0r>+9@wg0bF*pVQ#cubV>B(&;d{%jV>z0 za)_!a9IPMS93=FZQ`aBzu{Qs6mc{&GvvT zYnSEl+9ElPHK(ba4j#Uj>xm_yF~eoiC8C~Q&K0NH>yE!!g^gQBHrNC9q6gcPkvq?A zUJ}=*!)}vk@0?ldWd{oWICVRln=D7hSaeaDh*&fV%Gd0O|t&OJd zH8e+_&t7)-{bfAJ${eh1ONa+#zq&f?P31! z*azCnsufj6dmwFTYJF)B!C>%lDQP!3IUEibj69ZZVw9_Ml1io41^I4lZ0v#sW%h=E zcdwaS0d&6)dF}~{jW6n12RYA>+I(fS4|QUv(1k~5gEJaC+$Nkq&3|F~*%ma#>eNfvEurt%hT@>t|`!SsRdVZlg_cn=AIbN!N*m$vPK>>u~(Nj(D zigOeW*AMVQeW`_dIokFH4^OV#;#9QxpcDZ3OIw9@5Gu1irN6n_OeNy}Xq#|I*6)6; z-Rz|4p~h3U4!P%H2apDL6+pV5YI1@pm1~3`H}5yf4ePE>UUu!mj(-Y0zV1ijA6a<* zZIZ;F5vU$a852%HW>QPYZ552D<*<4Qd-=Hb4OP;uhd>U;%5{0oPfJ3}ph~czRchz6 zL4VAr>7Ga|#M0HJ`<|qEZv-~s%+MTP<}H+~(^xn_ULjB!Q6VujNV0;P$6Pl%g3he9cg(I4)`E3h2$C#l!Km=zg078!DF#pXziE~KrU5m-P4H;l{}~PrK`VO)3s2P3S?DuY{Ya!u)v+kkRdAkvN^|At@&1ufYZ)(q zO=4IZg^Y2362>J?y54A+=QL?B<4Q{K)FvxemDd5y{`d~f=RsB z5g^LZtgbLgJu4d^K>`^4!5w(L4RvisQ<#|LT*mSY{iQA}tG0C9Pg?Eja)yVsK%wsO z=TcqLDL}4|{^CQ1I!SE~D}S|f@||ijCKL^i%VC_B)MFWzHAgq8f5h1(UDn6eSEv*5 zfT;qPPok$m@2pZg!Gz`Nn`SGoRiNh$gGP`{ zBr3X7LFmC8qAVx!t0;`Z+{!I9bHI5m%{lElRO^D?%Op)`szeTZ&kV+M0gHN*D~Wf+ zY{wy#gS6e~53ILgO;$GU4@YP)aen{Dk$h#M?A4;W7#L*p`6_Ky_b_ad%V$4PjpM6O zy5(^D>|@~r2qFS5$qj39vSM%IJ{Dp{FRuc~ms0|HlC}{F{ONfqRll%0rBi49w4$3n z53Ds_;U%xk&ZSrC`@S$Ul^v{1jhihmu<^hCS!(U76(7Eqe_d za|=(YZ2zT`^t*4e!TG-j3sEz0(A+r%cCkw-b!S#6{)dkmFQ!w2T)GzP;>$> zq_{CWRSUjmz2uQswIW1?X!`2$m^~LzJARHgzljh3SUAIU=)9UG$LhFn*#R1n6+a(m zroGAQj#@sVrY;%53t_!nUl@(FcC+qHkY`g?3H`}NC9abjKLC2o{6TNeKV`kdj2pT$ z;4>|*unU6fg80~Rr6)yveZxizpPS0tpUugi%X0gvLaB(sNQz~QWzw9JP}9U9%o(3< z#lvuVu0~Bjn&gK})%w9Z5HeKjNH*kEhNN~pjqg+xZL9e~)mVh!bH-b$izo3Ky8n;< zlwON`kVywU)1%cWTzd{VI3PUY+Qm)8`@hmrFbKhdn{@JH5g zOVENQ6s-+eRV-p#z@mqR4M39)^u(5>@WSR8+`4iT0)@FhG42s4?bEVYVHCJR9shnm zOR%|`PskESr+0-^+r)F4Q}Mnf4-91K*HMbg0-f7)@3}wdn}}i{P3)<=eLuK}&E<39 zo-m7zEUw%^N+fNM6M=qaHZ}BdPr z^%lhjN6U~<3D|0Kz@3%-Biub!|iVGeYZLxtz== zj)SwNc11VNv%g_t*bMfG`Z09C_PChoGTz>xha;H8jUzl^^q9`&6s#6?)0>hh=WAT48NfTko|7F#_cU!-Julikxgsi_+ZG=?TmN4cUV)X^09&SJ3odEW+QyJDR0_%$JMPCOvz<3&8l2`Nb-I*T{bW__&Lb literal 0 HcmV?d00001 diff --git a/public/images/pokemon/exp/774-indigo.png b/public/images/pokemon/exp/774-indigo.png index ad750e0f0002213d5553a0a905d95af9f46e6edf..08c84600f38cdc98a0d7f85d5a68eed7cc62e037 100644 GIT binary patch literal 18828 zcmZ6TcQ~70{P%-am7=I>%~GSNRm4t})*h`{6{DybdsnQYW~|t|wThO;2%%PMh1z@7 ziald*&+Yqr#&tb^;JPH&eeRr`ob&#?-tSMsUu!6mlhTudKp=8urI%VD5CQe|4+$~w zA0e@KkAXh~u3Cz6pwb@3RS@VANcrUp9j}bdOwBMO-G=Q(TJ{^wPAe-pvGSDzB(Lsz z)3mCl+YZQu?=-2ZcChyaO5Z^_KeCpT`SybI)w`9z>Tb~(*=RD}3PF0dIOjEI9Z!mCGsuFf&|5Z|A}dwx)u@c^DTLH3Jn;PQkEur5VoAT%~Rtj(lb*umA{v)2uNJA!Wcd2zT5$|}p)3d+4 z$6$z+EqW%@-MGuV6et9ms{QCu>V^iM;GCSnQE?&|U7EE?U&xBpFP`WK&yynr*)dRp zV8eb{9|ryb&)pI>{pGPM9?idzb?MiOT^RJgib1xwKllAubeL6oEaKygZe^<5l<z;v>CAfNik;jKGmpB|a_eb*FXEp0vjGZid2*sQI%VFVc!!Rz zI#)f0fuU%~>#+@7k5s2eKyloJ4(UVU1TOL2Y)Q|FA0L zzPaoFbaJ}!oLuwjlx{FPhJORCF)QN$GW}<)1XqtSc%oSH7QRU~)y6fYi5vq2ZD*c-f%=2ouI`)sW2XG;F!(TR} zh-UOj?Sp3J5FC*pp6{-pqTHX{(54~lJfCcTqciUr!!lx`hI0?7v+^9Na@d%K5-PO- zm~Ha*w)=5f<1Ra`oG&#X>C^CI3ytIZ_q7ANQYmGptBpfi+@kY!O_16~@r6_k(TK%z zA#AV`Q&Rg+{2=kbL>m#K(U{SKDz_6W3_efK!sw83wrsJ^_OC`xoFknve8-~x=w!65 zW>10-Coz{!i6(4MjHhh*V{a+S{9@Yhs+drG_uZyw=~@>-J|1*Yz+}?S&tDd`eYLUN z46Dim(JMD!HPpHZazE_wfWY|qPipUhP3lrVWt4(aV02ygJGp4-9lx~pB&#n7pNJ{) zJ3+GL=;%G;-?)e>u%io!^7{)K>0S?If

      c;NQxv9zXAbeZ34dN#`|{i9u~_Y~yf@ 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 W)2T{VYJk31f}sz(IzB`NT=@qveB`PC literal 7735 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 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/exp/774-orange-meteor.json b/public/images/pokemon/exp/774-orange-meteor.json new file mode 100644 index 00000000000..72646f03857 --- /dev/null +++ b/public/images/pokemon/exp/774-orange-meteor.json @@ -0,0 +1,1994 @@ +{ + "textures": [ + { + "image": "774.png", + "format": "RGBA8888", + "size": { + "w": 158, + "h": 158 + }, + "scale": 1, + "frames": [ + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 42, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 41, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 42, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 41, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 12, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 42, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0055.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 41, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0072.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 42, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0075.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 41, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0093.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 12, + "w": 42, + "h": 38 + }, + "frame": { + "x": 42, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 37, + "y": 14, + "w": 42, + "h": 37 + }, + "frame": { + "x": 84, + "y": 0, + "w": 42, + "h": 37 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 37, + "y": 14, + "w": 42, + "h": 37 + }, + "frame": { + "x": 84, + "y": 0, + "w": 42, + "h": 37 + } + }, + { + "filename": "0056.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 37, + "y": 14, + "w": 42, + "h": 37 + }, + "frame": { + "x": 84, + "y": 0, + "w": 42, + "h": 37 + } + }, + { + "filename": "0076.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 37, + "y": 14, + "w": 42, + "h": 37 + }, + "frame": { + "x": 84, + "y": 0, + "w": 42, + "h": 37 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0054.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0073.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0074.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 75, + "w": 40, + "h": 41 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 75, + "w": 40, + "h": 41 + } + }, + { + "filename": "0064.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 75, + "w": 40, + "h": 41 + } + }, + { + "filename": "0084.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 75, + "w": 40, + "h": 41 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0062.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0063.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0082.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0083.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 39, + "y": 116, + "w": 40, + "h": 40 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 39, + "y": 116, + "w": 40, + "h": 40 + } + }, + { + "filename": "0061.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 39, + "y": 116, + "w": 40, + "h": 40 + } + }, + { + "filename": "0081.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 39, + "y": 116, + "w": 40, + "h": 40 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 26, + "y": 11, + "w": 40, + "h": 40 + }, + "frame": { + "x": 40, + "y": 75, + "w": 40, + "h": 40 + } + }, + { + "filename": "0092.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 26, + "y": 11, + "w": 40, + "h": 40 + }, + "frame": { + "x": 79, + "y": 115, + "w": 40, + "h": 40 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 28, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 28, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0049.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0058.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 28, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0066.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0067.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0068.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0069.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0078.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 28, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0086.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0087.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0088.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0089.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0090.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 27, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 36, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 32, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 27, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 36, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 32, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 27, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0051.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 36, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0057.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 32, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0070.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 27, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0071.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 36, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0077.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 32, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0094.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 13, + "y": 1, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 6, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 13, + "y": 1, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 6, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0059.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0060.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 13, + "y": 1, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0065.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 6, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0079.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0080.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 13, + "y": 1, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0085.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 6, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0091.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:7aae9fa19bed844305af4b8fe4e51932:e292dad33ad7e92ac28b96bf10d16c70:37281ac0aa1e619ef385b889b64064b7$" + } +} diff --git a/public/images/pokemon/exp/774-orange-meteor.png b/public/images/pokemon/exp/774-orange-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..78e8242646344de4de4d3efd794acde3c07a26f5 GIT binary patch literal 2326 zcmZuzc{~%08{aIog%=$*C6aP%7|ZoW%~2s|xhcn+bK26Bt6}alSB{ok36n5mB21EF z%9cWMM&!1ONa+#zq&f?P31! z*azCnsufj6dmwFTYJF)B!C>%lDQP!3IUEibj69ZZVw9_Ml1io41^I4lZ0v#sW%h=E zcdwaS0d&6)dF}~{jW6n12RYA>+I(fS4|QUv(1k~5gEJaC+$Nkq&3|F~*%ma#>eNfvEurt%hT@>t|`!SsRdVZlg_cn=AIbN!N*m$vPK>>u~(Nj(D zigOeW*AMVQeW`_dIokFH4^OV#;#9QxpcDZ3OIw9@5Gu1irN6n_OeNy}Xq#|I*6)6; z-Rz|4p~h3U4!P%H2apDL6+pV5YI1@pm1~3`H}5yf4ePE>UUu!mj(-Y0zV1ijA6a<* zZIZ;F5vU$a852%HW>QPYZ552D<*<4Qd-=Hb4OP;uhd>U;%5{0oPfJ3}ph~czRchz6 zL4VAr>7Ga|#M0HJ`<|qEZv-~s%+MTP<}H+~(^xn_ULjB!Q6VujNV0;P$6Pl%g3he9cg(I4)`E3h2$C#l!Km=zg078!DF#pXziE~KrU5m-P4H;l{}~PrK`VO)3s2P3S?DuY{Ya!u)v+kkRdAkvN^|At@&1ufYZ)(q zO=4IZg^Y2362>J?y54A+=QL?B<4Q{K)FvxemDd5y{`d~f=RsB z5g^LZtgbLgJu4d^K>`^4!5w(L4RvisQ<#|LT*mSY{iQA}tG0C9Pg?Eja)yVsK%wsO z=TcqLDL}4|{^CQ1I!SE~D}S|f@||ijCKL^i%VC_B)MFWzHAgq8f5h1(UDn6eSEv*5 zfT;qPPok$m@2pZg!Gz`Nn`SGoRiNh$gGP`{ zBr3X7LFmC8qAVx!t0;`Z+{!I9bHI5m%{lElRO^D?%Op)`szeTZ&kV+M0gHN*D~Wf+ zY{wy#gS6e~53ILgO;$GU4@YP)aen{Dk$h#M?A4;W7#L*p`6_Ky_b_ad%V$4PjpM6O zy5(^D>|@~r2qFS5$qj39vSM%IJ{Dp{FRuc~ms0|HlC}{F{ONfqRll%0rBi49w4$3n z53Ds_;U%xk&ZSrC`@S$Ul^v{1jhihmu<^hCS!(U76(7Eqe_d za|=(YZ2zT`^t*4e!TG-j3sEz0(A+r%cCkw-b!S#6{)dkmFQ!w2T)GzP;>$> zq_{CWRSUjmz2uQswIW1?X!`2$m^~LzJARHgzljh3SUAIU=)9UG$LhFn*#R1n6+a(m zroGAQj#@sVrY;%53t_!nUl@(FcC+qHkY`g?3H`}NC9abjKLC2o{6TNeKV`kdj2pT$ z;4>|*unU6fg80~Rr6)yveZxizpPS0tpUugi%X0gvLaB(sNQz~QWzw9JP}9U9%o(3< z#lvuVu0~Bjn&gK})%w9Z5HeKjNH*kEhNN~pjqg+xZL9e~)mVh!bH-b$izo3Ky8n;< zlwON`kVywU)1%cWTzd{VI3PUY+Qm)8`@hmrFbKhdn{@JH5g zOVENQ6s-+eRV-p#z@mqR4M39)^u(5>@WSR8+`4iT0)@FhG42s4?bEVYVHCJR9shnm zOR%|`PskESr+0-^+r)F4Q}Mnf4-91K*HMbg0-f7)@3}wdn}}i{P3)<=eLuK}&E<39 zo-m7zEUw%^N+fNM6M=qaHZ}BdPr z^%lhjN6U~<3D|0Kz@3%-Biub!|iVGeYZLxtz== zj)SwNc11VNv%g_t*bMfG`Z09C_PChoGTz>xha;H8jUzl^^q9`&6s#6?)0>hh=WAT48NfTko|7F#_cU!-Julikxgsi_+ZG=?TmN4cUV)X^09&SJ3odEW+QyJDR0_%$JMPCOvz<3&8l2`Nb-I*T{bW__&Lb literal 0 HcmV?d00001 diff --git a/public/images/pokemon/exp/774-orange.png b/public/images/pokemon/exp/774-orange.png index 134ae52d05ab2b1faf9ab7017f7984c782bd545e..64b579682af0e02597c756781eb6a0c8bf6a0164 100644 GIT binary patch literal 19181 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 literal 7735 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 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/exp/774-red.png b/public/images/pokemon/exp/774-red.png index 41804ecea1a2f70776e973994dd184d58c5fee72..c5fb20a672ad2d0a3c02eb145aa915e450e039af 100644 GIT binary patch delta 7218 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 X(y(H^%r6yy00000NkvXXu0mjf>bxMF diff --git a/public/images/pokemon/exp/774-violet-meteor.json b/public/images/pokemon/exp/774-violet-meteor.json new file mode 100644 index 00000000000..72646f03857 --- /dev/null +++ b/public/images/pokemon/exp/774-violet-meteor.json @@ -0,0 +1,1994 @@ +{ + "textures": [ + { + "image": "774.png", + "format": "RGBA8888", + "size": { + "w": 158, + "h": 158 + }, + "scale": 1, + "frames": [ + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 42, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 41, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 42, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 41, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 12, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 42, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0055.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 41, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0072.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 42, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0075.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 41, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0093.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 12, + "w": 42, + "h": 38 + }, + "frame": { + "x": 42, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 37, + "y": 14, + "w": 42, + "h": 37 + }, + "frame": { + "x": 84, + "y": 0, + "w": 42, + "h": 37 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 37, + "y": 14, + "w": 42, + "h": 37 + }, + "frame": { + "x": 84, + "y": 0, + "w": 42, + "h": 37 + } + }, + { + "filename": "0056.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 37, + "y": 14, + "w": 42, + "h": 37 + }, + "frame": { + "x": 84, + "y": 0, + "w": 42, + "h": 37 + } + }, + { + "filename": "0076.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 37, + "y": 14, + "w": 42, + "h": 37 + }, + "frame": { + "x": 84, + "y": 0, + "w": 42, + "h": 37 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0054.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0073.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0074.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 75, + "w": 40, + "h": 41 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 75, + "w": 40, + "h": 41 + } + }, + { + "filename": "0064.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 75, + "w": 40, + "h": 41 + } + }, + { + "filename": "0084.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 75, + "w": 40, + "h": 41 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0062.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0063.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0082.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0083.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 39, + "y": 116, + "w": 40, + "h": 40 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 39, + "y": 116, + "w": 40, + "h": 40 + } + }, + { + "filename": "0061.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 39, + "y": 116, + "w": 40, + "h": 40 + } + }, + { + "filename": "0081.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 39, + "y": 116, + "w": 40, + "h": 40 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 26, + "y": 11, + "w": 40, + "h": 40 + }, + "frame": { + "x": 40, + "y": 75, + "w": 40, + "h": 40 + } + }, + { + "filename": "0092.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 26, + "y": 11, + "w": 40, + "h": 40 + }, + "frame": { + "x": 79, + "y": 115, + "w": 40, + "h": 40 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 28, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 28, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0049.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0058.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 28, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0066.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0067.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0068.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0069.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0078.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 28, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0086.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0087.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0088.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0089.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0090.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 27, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 36, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 32, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 27, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 36, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 32, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 27, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0051.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 36, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0057.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 32, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0070.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 27, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0071.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 36, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0077.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 32, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0094.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 13, + "y": 1, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 6, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 13, + "y": 1, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 6, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0059.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0060.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 13, + "y": 1, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0065.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 6, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0079.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0080.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 13, + "y": 1, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0085.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 6, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0091.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:7aae9fa19bed844305af4b8fe4e51932:e292dad33ad7e92ac28b96bf10d16c70:37281ac0aa1e619ef385b889b64064b7$" + } +} diff --git a/public/images/pokemon/exp/774-violet-meteor.png b/public/images/pokemon/exp/774-violet-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..78e8242646344de4de4d3efd794acde3c07a26f5 GIT binary patch literal 2326 zcmZuzc{~%08{aIog%=$*C6aP%7|ZoW%~2s|xhcn+bK26Bt6}alSB{ok36n5mB21EF z%9cWMM&!1ONa+#zq&f?P31! z*azCnsufj6dmwFTYJF)B!C>%lDQP!3IUEibj69ZZVw9_Ml1io41^I4lZ0v#sW%h=E zcdwaS0d&6)dF}~{jW6n12RYA>+I(fS4|QUv(1k~5gEJaC+$Nkq&3|F~*%ma#>eNfvEurt%hT@>t|`!SsRdVZlg_cn=AIbN!N*m$vPK>>u~(Nj(D zigOeW*AMVQeW`_dIokFH4^OV#;#9QxpcDZ3OIw9@5Gu1irN6n_OeNy}Xq#|I*6)6; z-Rz|4p~h3U4!P%H2apDL6+pV5YI1@pm1~3`H}5yf4ePE>UUu!mj(-Y0zV1ijA6a<* zZIZ;F5vU$a852%HW>QPYZ552D<*<4Qd-=Hb4OP;uhd>U;%5{0oPfJ3}ph~czRchz6 zL4VAr>7Ga|#M0HJ`<|qEZv-~s%+MTP<}H+~(^xn_ULjB!Q6VujNV0;P$6Pl%g3he9cg(I4)`E3h2$C#l!Km=zg078!DF#pXziE~KrU5m-P4H;l{}~PrK`VO)3s2P3S?DuY{Ya!u)v+kkRdAkvN^|At@&1ufYZ)(q zO=4IZg^Y2362>J?y54A+=QL?B<4Q{K)FvxemDd5y{`d~f=RsB z5g^LZtgbLgJu4d^K>`^4!5w(L4RvisQ<#|LT*mSY{iQA}tG0C9Pg?Eja)yVsK%wsO z=TcqLDL}4|{^CQ1I!SE~D}S|f@||ijCKL^i%VC_B)MFWzHAgq8f5h1(UDn6eSEv*5 zfT;qPPok$m@2pZg!Gz`Nn`SGoRiNh$gGP`{ zBr3X7LFmC8qAVx!t0;`Z+{!I9bHI5m%{lElRO^D?%Op)`szeTZ&kV+M0gHN*D~Wf+ zY{wy#gS6e~53ILgO;$GU4@YP)aen{Dk$h#M?A4;W7#L*p`6_Ky_b_ad%V$4PjpM6O zy5(^D>|@~r2qFS5$qj39vSM%IJ{Dp{FRuc~ms0|HlC}{F{ONfqRll%0rBi49w4$3n z53Ds_;U%xk&ZSrC`@S$Ul^v{1jhihmu<^hCS!(U76(7Eqe_d za|=(YZ2zT`^t*4e!TG-j3sEz0(A+r%cCkw-b!S#6{)dkmFQ!w2T)GzP;>$> zq_{CWRSUjmz2uQswIW1?X!`2$m^~LzJARHgzljh3SUAIU=)9UG$LhFn*#R1n6+a(m zroGAQj#@sVrY;%53t_!nUl@(FcC+qHkY`g?3H`}NC9abjKLC2o{6TNeKV`kdj2pT$ z;4>|*unU6fg80~Rr6)yveZxizpPS0tpUugi%X0gvLaB(sNQz~QWzw9JP}9U9%o(3< z#lvuVu0~Bjn&gK})%w9Z5HeKjNH*kEhNN~pjqg+xZL9e~)mVh!bH-b$izo3Ky8n;< zlwON`kVywU)1%cWTzd{VI3PUY+Qm)8`@hmrFbKhdn{@JH5g zOVENQ6s-+eRV-p#z@mqR4M39)^u(5>@WSR8+`4iT0)@FhG42s4?bEVYVHCJR9shnm zOR%|`PskESr+0-^+r)F4Q}Mnf4-91K*HMbg0-f7)@3}wdn}}i{P3)<=eLuK}&E<39 zo-m7zEUw%^N+fNM6M=qaHZ}BdPr z^%lhjN6U~<3D|0Kz@3%-Biub!|iVGeYZLxtz== zj)SwNc11VNv%g_t*bMfG`Z09C_PChoGTz>xha;H8jUzl^^q9`&6s#6?)0>hh=WAT48NfTko|7F#_cU!-Julikxgsi_+ZG=?TmN4cUV)X^09&SJ3odEW+QyJDR0_%$JMPCOvz<3&8l2`Nb-I*T{bW__&Lb literal 0 HcmV?d00001 diff --git a/public/images/pokemon/exp/774-violet.png b/public/images/pokemon/exp/774-violet.png index 85372ec1ec8ec2f45aeafa8be93d04392b4088ee..e5cf3f02f8c49388878445d79a36cc7d5f0b3bed 100644 GIT binary patch literal 19217 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 Z!R}vwnwUE00z0nO!5p0Jsb_ps{tK~px&;6L literal 7735 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 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/exp/774-yellow.png b/public/images/pokemon/exp/774-yellow.png index e38e4ff8e9934d3c12eb36b83923d6aacae9f48c..153b6837fd4d904048feb43a76bfe89d1925ffbb 100644 GIT binary patch delta 7218 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 X(y(H^%r6yy00000NkvXXu0mjfuvQ`S diff --git a/public/images/pokemon/exp/back/774-blue-meteor.json b/public/images/pokemon/exp/back/774-blue-meteor.json new file mode 100644 index 00000000000..205b9b43c04 --- /dev/null +++ b/public/images/pokemon/exp/back/774-blue-meteor.json @@ -0,0 +1,1994 @@ +{ + "textures": [ + { + "image": "774.png", + "format": "RGBA8888", + "size": { + "w": 156, + "h": 156 + }, + "scale": 1, + "frames": [ + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 41 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 41 + } + }, + { + "filename": "0064.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 41 + } + }, + { + "filename": "0084.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 41 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 40, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 14, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 14, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 13, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0054.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0055.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0056.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 14, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0072.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0075.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0076.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 14, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0092.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 18, + "y": 13, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 41, + "w": 40, + "h": 40 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 41, + "w": 40, + "h": 40 + } + }, + { + "filename": "0061.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 41, + "w": 40, + "h": 40 + } + }, + { + "filename": "0081.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 41, + "w": 40, + "h": 40 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0062.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0063.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0082.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0083.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 12, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 81, + "w": 40, + "h": 40 + } + }, + { + "filename": "0093.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 12, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 81, + "w": 40, + "h": 40 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 79, + "y": 38, + "w": 42, + "h": 38 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 39, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0049.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0057.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0066.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0067.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0068.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0069.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0078.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0085.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 39, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0086.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0087.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0088.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0089.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0090.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 41, + "h": 38 + }, + "frame": { + "x": 40, + "y": 118, + "w": 41, + "h": 38 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 41, + "h": 38 + }, + "frame": { + "x": 40, + "y": 118, + "w": 41, + "h": 38 + } + }, + { + "filename": "0073.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 41, + "h": 38 + }, + "frame": { + "x": 40, + "y": 118, + "w": 41, + "h": 38 + } + }, + { + "filename": "0074.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 41, + "h": 38 + }, + "frame": { + "x": 40, + "y": 118, + "w": 41, + "h": 38 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 14, + "y": 11, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 31, + "y": 1, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 38, + "y": 9, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 31, + "y": 1, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0058.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 14, + "y": 11, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0059.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0060.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 31, + "y": 1, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0065.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 38, + "y": 9, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0079.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0080.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 31, + "y": 1, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0094.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 5, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 17, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 5, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0051.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0070.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 17, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0071.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0077.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0091.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:bfad3aac0a7883567d3a2355981c779c:60a889e61eda9926e91e6c953f5f7cc3:37281ac0aa1e619ef385b889b64064b7$" + } +} diff --git a/public/images/pokemon/exp/back/774-blue-meteor.png b/public/images/pokemon/exp/back/774-blue-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..52cb0fa19c709edb4fe1ea20e97f606c5e2e8741 GIT binary patch literal 2424 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 QB_qI4*F>jQ>we7t0CX^ca{vGU delta 5378 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 diff --git a/public/images/pokemon/exp/back/774-green-meteor.json b/public/images/pokemon/exp/back/774-green-meteor.json new file mode 100644 index 00000000000..205b9b43c04 --- /dev/null +++ b/public/images/pokemon/exp/back/774-green-meteor.json @@ -0,0 +1,1994 @@ +{ + "textures": [ + { + "image": "774.png", + "format": "RGBA8888", + "size": { + "w": 156, + "h": 156 + }, + "scale": 1, + "frames": [ + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 41 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 41 + } + }, + { + "filename": "0064.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 41 + } + }, + { + "filename": "0084.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 41 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 40, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 14, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 14, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 13, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0054.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0055.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0056.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 14, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0072.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0075.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0076.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 14, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0092.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 18, + "y": 13, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 41, + "w": 40, + "h": 40 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 41, + "w": 40, + "h": 40 + } + }, + { + "filename": "0061.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 41, + "w": 40, + "h": 40 + } + }, + { + "filename": "0081.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 41, + "w": 40, + "h": 40 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0062.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0063.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0082.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0083.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 12, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 81, + "w": 40, + "h": 40 + } + }, + { + "filename": "0093.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 12, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 81, + "w": 40, + "h": 40 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 79, + "y": 38, + "w": 42, + "h": 38 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 39, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0049.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0057.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0066.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0067.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0068.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0069.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0078.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0085.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 39, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0086.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0087.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0088.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0089.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0090.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 41, + "h": 38 + }, + "frame": { + "x": 40, + "y": 118, + "w": 41, + "h": 38 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 41, + "h": 38 + }, + "frame": { + "x": 40, + "y": 118, + "w": 41, + "h": 38 + } + }, + { + "filename": "0073.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 41, + "h": 38 + }, + "frame": { + "x": 40, + "y": 118, + "w": 41, + "h": 38 + } + }, + { + "filename": "0074.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 41, + "h": 38 + }, + "frame": { + "x": 40, + "y": 118, + "w": 41, + "h": 38 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 14, + "y": 11, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 31, + "y": 1, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 38, + "y": 9, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 31, + "y": 1, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0058.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 14, + "y": 11, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0059.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0060.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 31, + "y": 1, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0065.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 38, + "y": 9, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0079.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0080.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 31, + "y": 1, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0094.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 5, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 17, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 5, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0051.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0070.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 17, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0071.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0077.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0091.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:bfad3aac0a7883567d3a2355981c779c:60a889e61eda9926e91e6c953f5f7cc3:37281ac0aa1e619ef385b889b64064b7$" + } +} diff --git a/public/images/pokemon/exp/back/774-green-meteor.png b/public/images/pokemon/exp/back/774-green-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..52cb0fa19c709edb4fe1ea20e97f606c5e2e8741 GIT binary patch literal 2424 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 delta 5378 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 Rzm?1YBRx~y8tn%${{!p0e!Ktx delta 5378 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 f$oO86LkWH_w=zh?4eer()Qrd3# diff --git a/public/images/pokemon/exp/back/774-meteor.json b/public/images/pokemon/exp/back/774-meteor.json new file mode 100644 index 00000000000..205b9b43c04 --- /dev/null +++ b/public/images/pokemon/exp/back/774-meteor.json @@ -0,0 +1,1994 @@ +{ + "textures": [ + { + "image": "774.png", + "format": "RGBA8888", + "size": { + "w": 156, + "h": 156 + }, + "scale": 1, + "frames": [ + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 41 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 41 + } + }, + { + "filename": "0064.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 41 + } + }, + { + "filename": "0084.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 41 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 40, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 14, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 14, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 13, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0054.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0055.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0056.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 14, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0072.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0075.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0076.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 14, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0092.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 18, + "y": 13, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 41, + "w": 40, + "h": 40 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 41, + "w": 40, + "h": 40 + } + }, + { + "filename": "0061.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 41, + "w": 40, + "h": 40 + } + }, + { + "filename": "0081.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 41, + "w": 40, + "h": 40 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0062.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0063.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0082.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0083.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 12, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 81, + "w": 40, + "h": 40 + } + }, + { + "filename": "0093.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 12, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 81, + "w": 40, + "h": 40 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 79, + "y": 38, + "w": 42, + "h": 38 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 39, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0049.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0057.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0066.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0067.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0068.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0069.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0078.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0085.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 39, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0086.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0087.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0088.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0089.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0090.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 41, + "h": 38 + }, + "frame": { + "x": 40, + "y": 118, + "w": 41, + "h": 38 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 41, + "h": 38 + }, + "frame": { + "x": 40, + "y": 118, + "w": 41, + "h": 38 + } + }, + { + "filename": "0073.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 41, + "h": 38 + }, + "frame": { + "x": 40, + "y": 118, + "w": 41, + "h": 38 + } + }, + { + "filename": "0074.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 41, + "h": 38 + }, + "frame": { + "x": 40, + "y": 118, + "w": 41, + "h": 38 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 14, + "y": 11, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 31, + "y": 1, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 38, + "y": 9, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 31, + "y": 1, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0058.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 14, + "y": 11, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0059.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0060.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 31, + "y": 1, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0065.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 38, + "y": 9, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0079.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0080.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 31, + "y": 1, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0094.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 5, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 17, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 5, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0051.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0070.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 17, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0071.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0077.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0091.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:bfad3aac0a7883567d3a2355981c779c:60a889e61eda9926e91e6c953f5f7cc3:37281ac0aa1e619ef385b889b64064b7$" + } +} diff --git a/public/images/pokemon/exp/back/774-meteor.png b/public/images/pokemon/exp/back/774-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..52cb0fa19c709edb4fe1ea20e97f606c5e2e8741 GIT binary patch literal 2424 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 delta 5378 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

      `5V@CI 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 S^tX~3V5DcNTciCT`hNfhuYe)| delta 5378 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 diff --git a/public/images/pokemon/exp/back/774-yellow-meteor.json b/public/images/pokemon/exp/back/774-yellow-meteor.json new file mode 100644 index 00000000000..205b9b43c04 --- /dev/null +++ b/public/images/pokemon/exp/back/774-yellow-meteor.json @@ -0,0 +1,1994 @@ +{ + "textures": [ + { + "image": "774.png", + "format": "RGBA8888", + "size": { + "w": 156, + "h": 156 + }, + "scale": 1, + "frames": [ + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 41 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 41 + } + }, + { + "filename": "0064.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 41 + } + }, + { + "filename": "0084.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 41 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 40, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 14, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 14, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 13, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0054.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0055.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0056.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 14, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0072.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0075.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0076.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 14, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0092.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 18, + "y": 13, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 41, + "w": 40, + "h": 40 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 41, + "w": 40, + "h": 40 + } + }, + { + "filename": "0061.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 41, + "w": 40, + "h": 40 + } + }, + { + "filename": "0081.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 41, + "w": 40, + "h": 40 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0062.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0063.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0082.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0083.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 12, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 81, + "w": 40, + "h": 40 + } + }, + { + "filename": "0093.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 12, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 81, + "w": 40, + "h": 40 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 79, + "y": 38, + "w": 42, + "h": 38 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 39, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0049.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0057.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0066.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0067.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0068.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0069.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0078.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0085.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 39, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0086.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0087.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0088.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0089.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0090.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 41, + "h": 38 + }, + "frame": { + "x": 40, + "y": 118, + "w": 41, + "h": 38 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 41, + "h": 38 + }, + "frame": { + "x": 40, + "y": 118, + "w": 41, + "h": 38 + } + }, + { + "filename": "0073.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 41, + "h": 38 + }, + "frame": { + "x": 40, + "y": 118, + "w": 41, + "h": 38 + } + }, + { + "filename": "0074.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 41, + "h": 38 + }, + "frame": { + "x": 40, + "y": 118, + "w": 41, + "h": 38 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 14, + "y": 11, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 31, + "y": 1, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 38, + "y": 9, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 31, + "y": 1, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0058.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 14, + "y": 11, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0059.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0060.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 31, + "y": 1, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0065.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 38, + "y": 9, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0079.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0080.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 31, + "y": 1, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0094.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 5, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 17, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 5, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0051.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0070.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 17, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0071.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0077.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0091.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:bfad3aac0a7883567d3a2355981c779c:60a889e61eda9926e91e6c953f5f7cc3:37281ac0aa1e619ef385b889b64064b7$" + } +} diff --git a/public/images/pokemon/exp/back/774-yellow-meteor.png b/public/images/pokemon/exp/back/774-yellow-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..52cb0fa19c709edb4fe1ea20e97f606c5e2e8741 GIT binary patch literal 2424 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 SXTOz<03$t9-8yZTxc>ozlYlb- delta 5378 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 Sr@xiV03$t9-CFGjG5-U+@qQiv delta 5378 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 Sr@xiV03$t9-CFGjG5-U+@qQiv delta 5378 zcmYLNXFQvK-!)saW+PVYQJYe;u{T9+p|q$?<*&mGwMtVFv-XIV8r7Pm#FnVqo1%oO z+Cs#B^nc&a^IY$)^F8N#&UJpD-Bct64P}3hpIjnrD<<`l>AeyO0=B1#%(bW92xAcv}I@4{1umeCw>103EEZv=`{K>yqL##2En7s|HlRFaeiv&vFB#LhCuT+?vM#C9 z`H>tE-qq)$T=(%F*28@9^vr$GmOq_gaU)}$SYG&gn z-p!CT0brf&9S=4aeEs*y|2 zhpUKrzuV&*nBn%u*EDzfoz=?Ai;(c&7zU2rw;%3@^OO2X^%Oy$B}kBo#4WXoKbZ3Y zpo7B|iGA*-{O@jybu%ePyATp;=GPd8_`(KStRp}XVjIl%G&*nrg3!FKS%wgJ3uOCK z1X{ueiy$*R{t^g;$@xiPik>`+k~psFs6E2%h?F0QVBO$ktn|abcyDZP(%5GYbDmL3 z1o^);$T!rWid=y{W4|S$Gi2z8e2OIV=`rTW`Du*)3ox0c)UR&?LSI}}{pHAtE z2MoD_J(8cO-~T1)g2VSd5*10A4*>pUOL&3BN53(ox6&1iH4yJ=?EFI?(BqZ*j{Fq1 zKtA@*^bU5qT{TC=L5W>|CTlT&L<$cKOAJ05qOiRa;UKTxepvm(FDFc}&&&JPjR+e$ zx4e_O7Pe$JJ@o>L844kMcr(N7j%K%<-ii;DZHxIb$`<;)eVULRn2l@kZ zbBeNW3dU~4pPlc^09%Z+FRlxvjQ#3?DG5gpN+I9b%D~|>Y1ku{!EJhc!4Qf8i+XuS z8uQuULNKg#F$oijBeRE+c7=>NfLOa2y7JB7kcYEs+!%3RQ@r}CncS_iE^#;48qfkE z9300-2TL7zUl^q1m!BX|xpv{6@%&kW?}N_bi?AV%_?`Zc^#PMJW|N#9+*{c3+jdB= z{qHSi`{a^`FGWYa9KoeXXd{fecmSsaU3la{9gvBA$ws17DvW$}M}9OG<_12(^h3^x$@%R>pN+| zG+hpKczw4GCr`5N_IkADl$u3n59c!8oJuD*fTwy+s&+y+@oYi|8I2h~wtIG_Hr{c) zjd}3~CxA{AYS4na+ub6|ZDE*u*VoRo6iW?n`z;C#=$Ro8fH5!LYjjZ6z2S0ZjUf!5 z{>Xt6gaTq}^&wSR{A;MiJx~aCThv23SRnWAocA-R`nXrgROp1yALlH zq0AA6wd4i&{OgSpb32KT)-WymwsP9) zOv92;!uOoSfKo_RHov|Mc{G~ErzfNp3 z?RhM-j;su#p1w;JJ z)L-!`agO9T+^hv}iGaNrQZ+S=rWqzXa`ptMeGeFVa%WQp=p3j_Gr*uPyK*rR9etO( zcgitI3$HDp{ovKpet{c=I-QTq1FLra5uT5+JvY5x`n}sM@*P>1(wF-IW1f^*;fGh# z04xcYa#^r$3V3x3SI3h}g>;8F$GAP~jz`}v7GX$}$i4JT*Yab&R5rO>C_iCp) zh}k+0L-(r-=lc`t@*Y>yF~BNr-d=yh1eLz#{tNaFsgtBw%n@@2b6;PP=Ue&x$HMVZ z1|yoROR?!9n-MCXSAf`UjM@Ec!Y2_Lxa3+-!>2!Xd`ty1rsC;m?VL%{!0KvnzXlYs z$07{Iq;mg#RVCe_xIdpM zRTEX2>qxVp3d^ERhPX;1#DG>yiu{jNonCA1^M~tkHFD#K06s~oCb}}q5!PCg!2&*G zLFNT52S%t&9#7)Sn{VPVxA*+qGg3L|wb)OuxKF8+$;a2JE}4~h&KopP5=1o3=gZWm z^l`8+tk)@-u4DxXKUqT|>=ccyZ2*5hKPu(7gABTv-@6-qLp`;ztLtZ0L477+{HVs{ zJ27f(#%Em>HD%$#=&H(9!2PIXk4Fh@`n>#1x$4#pe%NxzD-OOPL9gp&Ksf9`(WrsW^NWaaqGV*T9ou~YC)@R1s@{MVE)|e zqXVvV4?6^?P#&FO@4b@A0e1FQ=NGnm6#@MRQw$m`lo{3`3)SdOuQMi$h zuR^L$L@{f7uqAu!iQ?g{1UCU$e1Z;1?gtZP?mQcC;}5cO5-3F(n@$6a3!Lgzkmbd% zzW8Z;fOlt><(S^)TPTYL2-IV8kp5UU`p4wY{2oZ?2fL;RWat7Lh^jb%VU>#duU6tagf3VpvooWu7c~%(c=u9#WN8Ys)GzY04}7m6EpQ^z6%&sp@1VoLE^phT_52pk&e&lzD!`bPK!;HiMa|i!~civKOK_FTeGx~&NO>FA z&+I}JN|Xs=>{5166v>%ilyKya61?jL>9so;^y44lhd=Qi%a2pXf~rV@L)S3-(yO(}`gQ1V{KFor5T_*vqq z96F!&%pIj6H&aETtXkCb?rR;aqJ12P+Jd@57a>l{ zcCoQGNtyBu66o<&gIQ3*YX>R21ih#)c_cyZMDGfn$!8I7p@g~O6`1?s-j`FSM2#Bq z`X}w*D@t64s{o&v#%lg3hniJ!Jii?Apm=Dj2S!W?b4PFULAYR+U5ae{=&KYQ1I73* zAZBsgCc!OxrX24#di*c}R}B>v_Dspe9*6k8Rln-{p(?=HCo*72Q1!j6lL9zjy_b2J z?GvuVg172(4`vRgs($11)`EzQWQ?LmetYzs1}E5m`nbb|ogaEzbHS=UOuVMNo~Wdv z_eMZ|uURy^V$#FgHgtllqizWo;)-Sxa01*a&(NLs>c$*mx)_zoL-As|6U*}y!9G10 zjFNm?@ih2-e))_4g-VrnsjWwdCh0KqpVqX`VJvP{+&nv0B548jXKzmoGUE4wCpzaT z?0tGMQ#U`e&@?&(o3!q1A~U_p0b9aY2XQd^KbaSaLN)+Suu;nsDT4$>6~FGa}n`+*PkpuYJduy4?9Xx zDe|m9${y<4llBf-OU|0M-#3p!tl{7O7pKf(lc{#7%PDm8BN92}l#6`-vYiCrJpYoJ z?V}LJQP|)g0rgSv4<5VJ{J`<%$zgI~R4*^`wU%YQ)s-Q* zyzM|pq%MtbU)5>EwTcesQ=U=ds%fMj&Yv@@T^w2_{~o*~#c>^AW{zd_gY2OSkjK%tIVrYF;;EJ^^}IK(pj-BkAQLfd`suvEZE)H) z+QHuyruCc#J%N22!VPDr0Q|Ol;?Ex9sAud5Q_uy~$9JE51XYa49$t?cXQu-H>iR0^ z<)w$L773zoJK{^Jifa>5xmGeLn1alRV?739I@vLoB`3Nu(ePx$4?2T|1J68+{~f(G z$gCW*ts%}k&S~_08@>szt3zS=&R$ir_ack|C-X7B{M24v2FSUm3Uyt?r$XYEFc{-s zAXO)y5(l}1mKhy=$?uHHyy?+Nw0R?ar7y%b*_N{m&O+}%TAgCBTV1hUrTmWG^ej<>lRza`*i;80LFT&nx=y0BR)boj^reZ>2SMrK0p>N6 zpWH@kviPrW@x7?v({jl72CMo=+xsMvc+D6gQ3OT-AnflYuJo3+-(aTpnlV6jMeuL} zdG7V@5JUnLtow{sgYFt7FjW>}1KSXka0J!5vgwwPc&1=yysi1lm&G;txG+;USDf+V z*55EgG)+X@Ias8N2zVpiHv!7Tj+UGAFJVt*q?me-Ix7Og3?(y6@803m0<-gH!~HkhPU8|eWKxwcF{~^s~$Nllw4qoFRX%_1jk1AD9yU=-E7JhpA^yLbgGlc zh^phhosSTn05J#MIb#OGoF{qpybK`#NpA-B4O1XCRwm-}i6(qBxgo7`dgmWfI72^2 zx2V~b$jh<`>v`x3T>aqM3$y39w~q$C6XH$My1bhZ<4*r5&4YZoO%zdC3Dbn{J8GOY z3ZTd`GNJK$V%{5sg z?b-bec=~^|iyoDgS83o4XIid*O&-^+vT=z2T~#dEHZsixjkCxe$yoICy`kJGy5-p) zAg=<8=W32+NWAUE~BBHF* z6bvrI=>YD{=W!sd=*F<7pgrg) diff --git a/public/images/pokemon/exp/back/shiny/774-indigo-meteor.json b/public/images/pokemon/exp/back/shiny/774-indigo-meteor.json new file mode 100644 index 00000000000..205b9b43c04 --- /dev/null +++ b/public/images/pokemon/exp/back/shiny/774-indigo-meteor.json @@ -0,0 +1,1994 @@ +{ + "textures": [ + { + "image": "774.png", + "format": "RGBA8888", + "size": { + "w": 156, + "h": 156 + }, + "scale": 1, + "frames": [ + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 41 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 41 + } + }, + { + "filename": "0064.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 41 + } + }, + { + "filename": "0084.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 41 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 40, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 14, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 14, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 13, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0054.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0055.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0056.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 14, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0072.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0075.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0076.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 14, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0092.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 18, + "y": 13, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 41, + "w": 40, + "h": 40 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 41, + "w": 40, + "h": 40 + } + }, + { + "filename": "0061.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 41, + "w": 40, + "h": 40 + } + }, + { + "filename": "0081.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 41, + "w": 40, + "h": 40 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0062.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0063.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0082.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0083.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 12, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 81, + "w": 40, + "h": 40 + } + }, + { + "filename": "0093.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 12, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 81, + "w": 40, + "h": 40 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 79, + "y": 38, + "w": 42, + "h": 38 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 39, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0049.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0057.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0066.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0067.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0068.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0069.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0078.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0085.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 39, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0086.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0087.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0088.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0089.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0090.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 41, + "h": 38 + }, + "frame": { + "x": 40, + "y": 118, + "w": 41, + "h": 38 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 41, + "h": 38 + }, + "frame": { + "x": 40, + "y": 118, + "w": 41, + "h": 38 + } + }, + { + "filename": "0073.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 41, + "h": 38 + }, + "frame": { + "x": 40, + "y": 118, + "w": 41, + "h": 38 + } + }, + { + "filename": "0074.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 41, + "h": 38 + }, + "frame": { + "x": 40, + "y": 118, + "w": 41, + "h": 38 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 14, + "y": 11, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 31, + "y": 1, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 38, + "y": 9, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 31, + "y": 1, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0058.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 14, + "y": 11, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0059.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0060.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 31, + "y": 1, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0065.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 38, + "y": 9, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0079.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0080.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 31, + "y": 1, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0094.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 5, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 17, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 5, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0051.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0070.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 17, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0071.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0077.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0091.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:bfad3aac0a7883567d3a2355981c779c:60a889e61eda9926e91e6c953f5f7cc3:37281ac0aa1e619ef385b889b64064b7$" + } +} diff --git a/public/images/pokemon/exp/back/shiny/774-indigo-meteor.png b/public/images/pokemon/exp/back/shiny/774-indigo-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..52cb0fa19c709edb4fe1ea20e97f606c5e2e8741 GIT binary patch literal 2424 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 Sr@xiV03$t9-CFGjG5-U+@qQiv delta 5378 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 Sr@xiV03$t9-CFGjG5-U+@qQiv delta 5378 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 diff --git a/public/images/pokemon/exp/back/shiny/774-red-meteor.json b/public/images/pokemon/exp/back/shiny/774-red-meteor.json new file mode 100644 index 00000000000..205b9b43c04 --- /dev/null +++ b/public/images/pokemon/exp/back/shiny/774-red-meteor.json @@ -0,0 +1,1994 @@ +{ + "textures": [ + { + "image": "774.png", + "format": "RGBA8888", + "size": { + "w": 156, + "h": 156 + }, + "scale": 1, + "frames": [ + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 41 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 41 + } + }, + { + "filename": "0064.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 41 + } + }, + { + "filename": "0084.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 41 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 40, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 14, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 14, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 13, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0054.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0055.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0056.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 14, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0072.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0075.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0076.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 14, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0092.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 18, + "y": 13, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 41, + "w": 40, + "h": 40 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 41, + "w": 40, + "h": 40 + } + }, + { + "filename": "0061.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 41, + "w": 40, + "h": 40 + } + }, + { + "filename": "0081.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 41, + "w": 40, + "h": 40 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0062.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0063.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0082.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0083.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 12, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 81, + "w": 40, + "h": 40 + } + }, + { + "filename": "0093.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 12, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 81, + "w": 40, + "h": 40 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 79, + "y": 38, + "w": 42, + "h": 38 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 39, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0049.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0057.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0066.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0067.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0068.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0069.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0078.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0085.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 39, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0086.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0087.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0088.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0089.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0090.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 41, + "h": 38 + }, + "frame": { + "x": 40, + "y": 118, + "w": 41, + "h": 38 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 41, + "h": 38 + }, + "frame": { + "x": 40, + "y": 118, + "w": 41, + "h": 38 + } + }, + { + "filename": "0073.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 41, + "h": 38 + }, + "frame": { + "x": 40, + "y": 118, + "w": 41, + "h": 38 + } + }, + { + "filename": "0074.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 41, + "h": 38 + }, + "frame": { + "x": 40, + "y": 118, + "w": 41, + "h": 38 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 14, + "y": 11, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 31, + "y": 1, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 38, + "y": 9, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 31, + "y": 1, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0058.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 14, + "y": 11, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0059.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0060.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 31, + "y": 1, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0065.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 38, + "y": 9, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0079.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0080.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 31, + "y": 1, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0094.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 5, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 17, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 5, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0051.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0070.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 17, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0071.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0077.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0091.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:bfad3aac0a7883567d3a2355981c779c:60a889e61eda9926e91e6c953f5f7cc3:37281ac0aa1e619ef385b889b64064b7$" + } +} diff --git a/public/images/pokemon/exp/back/shiny/774-red-meteor.png b/public/images/pokemon/exp/back/shiny/774-red-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..52cb0fa19c709edb4fe1ea20e97f606c5e2e8741 GIT binary patch literal 2424 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 Sr@xiV03$t9-CFGjG5-U+@qQiv delta 5378 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 Sr@xiV03$t9-CFGjG5-U+@qQiv delta 5378 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 diff --git a/public/images/pokemon/exp/back/shiny/774-yellow-meteor.json b/public/images/pokemon/exp/back/shiny/774-yellow-meteor.json new file mode 100644 index 00000000000..205b9b43c04 --- /dev/null +++ b/public/images/pokemon/exp/back/shiny/774-yellow-meteor.json @@ -0,0 +1,1994 @@ +{ + "textures": [ + { + "image": "774.png", + "format": "RGBA8888", + "size": { + "w": 156, + "h": 156 + }, + "scale": 1, + "frames": [ + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 41 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 41 + } + }, + { + "filename": "0064.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 41 + } + }, + { + "filename": "0084.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 41 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 40, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 14, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 14, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 13, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0054.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0055.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0056.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 14, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0072.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0075.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 2, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0076.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 14, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0092.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 18, + "y": 13, + "w": 42, + "h": 38 + }, + "frame": { + "x": 82, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 41, + "w": 40, + "h": 40 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 41, + "w": 40, + "h": 40 + } + }, + { + "filename": "0061.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 41, + "w": 40, + "h": 40 + } + }, + { + "filename": "0081.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 45, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 41, + "w": 40, + "h": 40 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0062.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0063.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0082.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0083.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 47, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 40, + "y": 38, + "w": 39, + "h": 41 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 12, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 81, + "w": 40, + "h": 40 + } + }, + { + "filename": "0093.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 12, + "w": 40, + "h": 40 + }, + "frame": { + "x": 0, + "y": 81, + "w": 40, + "h": 40 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 1, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 79, + "y": 38, + "w": 42, + "h": 38 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 39, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0049.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0057.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0066.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0067.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0068.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0069.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0078.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0085.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 39, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0086.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0087.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 24, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0088.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0089.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0090.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 40, + "y": 79, + "w": 39, + "h": 39 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 41, + "h": 38 + }, + "frame": { + "x": 40, + "y": 118, + "w": 41, + "h": 38 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 41, + "h": 38 + }, + "frame": { + "x": 40, + "y": 118, + "w": 41, + "h": 38 + } + }, + { + "filename": "0073.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 41, + "h": 38 + }, + "frame": { + "x": 40, + "y": 118, + "w": 41, + "h": 38 + } + }, + { + "filename": "0074.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 41, + "h": 38 + }, + "frame": { + "x": 40, + "y": 118, + "w": 41, + "h": 38 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 14, + "y": 11, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 31, + "y": 1, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 38, + "y": 9, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 31, + "y": 1, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0058.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 14, + "y": 11, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0059.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0060.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 31, + "y": 1, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0065.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 38, + "y": 9, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0079.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 20, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0080.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 31, + "y": 1, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0094.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 8, + "w": 40, + "h": 39 + }, + "frame": { + "x": 79, + "y": 76, + "w": 40, + "h": 39 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 5, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 17, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 16, + "y": 5, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0051.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 6, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0070.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 17, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0071.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0077.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 12, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + }, + { + "filename": "0091.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 86, + "h": 52 + }, + "spriteSourceSize": { + "x": 19, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 81, + "y": 115, + "w": 39, + "h": 39 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:bfad3aac0a7883567d3a2355981c779c:60a889e61eda9926e91e6c953f5f7cc3:37281ac0aa1e619ef385b889b64064b7$" + } +} diff --git a/public/images/pokemon/exp/back/shiny/774-yellow-meteor.png b/public/images/pokemon/exp/back/shiny/774-yellow-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..52cb0fa19c709edb4fe1ea20e97f606c5e2e8741 GIT binary patch literal 2424 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 Sr@xiV03$t9-CFGjG5-U+@qQiv delta 5378 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 diff --git a/public/images/pokemon/exp/back/shiny/774.json b/public/images/pokemon/exp/back/shiny/774.json index 205b9b43c04..d10223fe4b2 100644 --- a/public/images/pokemon/exp/back/shiny/774.json +++ b/public/images/pokemon/exp/back/shiny/774.json @@ -1,1994 +1,767 @@ { "textures": [ { - "image": "774.png", + "image": "774-blue.png", "format": "RGBA8888", - "size": { - "w": 156, - "h": 156 - }, + "size": {"w": 328,"h": 328}, "scale": 1, "frames": [ - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 45, - "y": 6, - "w": 40, - "h": 41 - }, - "frame": { - "x": 0, - "y": 0, - "w": 40, - "h": 41 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 45, - "y": 6, - "w": 40, - "h": 41 - }, - "frame": { - "x": 0, - "y": 0, - "w": 40, - "h": 41 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 45, - "y": 6, - "w": 40, - "h": 41 - }, - "frame": { - "x": 0, - "y": 0, - "w": 40, - "h": 41 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 45, - "y": 6, - "w": 40, - "h": 41 - }, - "frame": { - "x": 0, - "y": 0, - "w": 40, - "h": 41 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 7, - "w": 42, - "h": 38 - }, - "frame": { - "x": 40, - "y": 0, - "w": 42, - "h": 38 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 42, - "h": 38 - }, - "frame": { - "x": 82, - "y": 0, - "w": 42, - "h": 38 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 42, - "h": 38 - }, - "frame": { - "x": 82, - "y": 0, - "w": 42, - "h": 38 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 10, - "w": 42, - "h": 38 - }, - "frame": { - "x": 82, - "y": 0, - "w": 42, - "h": 38 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 6, - "y": 14, - "w": 42, - "h": 38 - }, - "frame": { - "x": 82, - "y": 0, - "w": 42, - "h": 38 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 42, - "h": 38 - }, - "frame": { - "x": 82, - "y": 0, - "w": 42, - "h": 38 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 10, - "w": 42, - "h": 38 - }, - "frame": { - "x": 82, - "y": 0, - "w": 42, - "h": 38 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 6, - "y": 14, - "w": 42, - "h": 38 - }, - "frame": { - "x": 82, - "y": 0, - "w": 42, - "h": 38 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 19, - "y": 13, - "w": 42, - "h": 38 - }, - "frame": { - "x": 82, - "y": 0, - "w": 42, - "h": 38 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 42, - "h": 38 - }, - "frame": { - "x": 82, - "y": 0, - "w": 42, - "h": 38 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 42, - "h": 38 - }, - "frame": { - "x": 82, - "y": 0, - "w": 42, - "h": 38 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 10, - "w": 42, - "h": 38 - }, - "frame": { - "x": 82, - "y": 0, - "w": 42, - "h": 38 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 6, - "y": 14, - "w": 42, - "h": 38 - }, - "frame": { - "x": 82, - "y": 0, - "w": 42, - "h": 38 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 42, - "h": 38 - }, - "frame": { - "x": 82, - "y": 0, - "w": 42, - "h": 38 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 2, - "y": 10, - "w": 42, - "h": 38 - }, - "frame": { - "x": 82, - "y": 0, - "w": 42, - "h": 38 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 6, - "y": 14, - "w": 42, - "h": 38 - }, - "frame": { - "x": 82, - "y": 0, - "w": 42, - "h": 38 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 18, - "y": 13, - "w": 42, - "h": 38 - }, - "frame": { - "x": 82, - "y": 0, - "w": 42, - "h": 38 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 45, - "y": 0, - "w": 40, - "h": 40 - }, - "frame": { - "x": 0, - "y": 41, - "w": 40, - "h": 40 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 45, - "y": 0, - "w": 40, - "h": 40 - }, - "frame": { - "x": 0, - "y": 41, - "w": 40, - "h": 40 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 45, - "y": 0, - "w": 40, - "h": 40 - }, - "frame": { - "x": 0, - "y": 41, - "w": 40, - "h": 40 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 45, - "y": 0, - "w": 40, - "h": 40 - }, - "frame": { - "x": 0, - "y": 41, - "w": 40, - "h": 40 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 47, - "y": 1, - "w": 39, - "h": 41 - }, - "frame": { - "x": 40, - "y": 38, - "w": 39, - "h": 41 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 47, - "y": 1, - "w": 39, - "h": 41 - }, - "frame": { - "x": 40, - "y": 38, - "w": 39, - "h": 41 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 47, - "y": 1, - "w": 39, - "h": 41 - }, - "frame": { - "x": 40, - "y": 38, - "w": 39, - "h": 41 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 47, - "y": 1, - "w": 39, - "h": 41 - }, - "frame": { - "x": 40, - "y": 38, - "w": 39, - "h": 41 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 47, - "y": 1, - "w": 39, - "h": 41 - }, - "frame": { - "x": 40, - "y": 38, - "w": 39, - "h": 41 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 47, - "y": 1, - "w": 39, - "h": 41 - }, - "frame": { - "x": 40, - "y": 38, - "w": 39, - "h": 41 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 47, - "y": 1, - "w": 39, - "h": 41 - }, - "frame": { - "x": 40, - "y": 38, - "w": 39, - "h": 41 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 47, - "y": 1, - "w": 39, - "h": 41 - }, - "frame": { - "x": 40, - "y": 38, - "w": 39, - "h": 41 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 20, - "y": 12, - "w": 40, - "h": 40 - }, - "frame": { - "x": 0, - "y": 81, - "w": 40, - "h": 40 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 19, - "y": 12, - "w": 40, - "h": 40 - }, - "frame": { - "x": 0, - "y": 81, - "w": 40, - "h": 40 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 7, - "w": 42, - "h": 38 - }, - "frame": { - "x": 79, - "y": 38, - "w": 42, - "h": 38 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 16, - "y": 8, - "w": 39, - "h": 39 - }, - "frame": { - "x": 40, - "y": 79, - "w": 39, - "h": 39 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 16, - "y": 8, - "w": 39, - "h": 39 - }, - "frame": { - "x": 40, - "y": 79, - "w": 39, - "h": 39 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 39, - "h": 39 - }, - "frame": { - "x": 40, - "y": 79, - "w": 39, - "h": 39 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 24, - "y": 9, - "w": 39, - "h": 39 - }, - "frame": { - "x": 40, - "y": 79, - "w": 39, - "h": 39 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 24, - "y": 9, - "w": 39, - "h": 39 - }, - "frame": { - "x": 40, - "y": 79, - "w": 39, - "h": 39 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 20, - "y": 8, - "w": 39, - "h": 39 - }, - "frame": { - "x": 40, - "y": 79, - "w": 39, - "h": 39 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 20, - "y": 8, - "w": 39, - "h": 39 - }, - "frame": { - "x": 40, - "y": 79, - "w": 39, - "h": 39 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 16, - "y": 11, - "w": 39, - "h": 39 - }, - "frame": { - "x": 40, - "y": 79, - "w": 39, - "h": 39 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 39, - "y": 9, - "w": 39, - "h": 39 - }, - "frame": { - "x": 40, - "y": 79, - "w": 39, - "h": 39 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 24, - "y": 9, - "w": 39, - "h": 39 - }, - "frame": { - "x": 40, - "y": 79, - "w": 39, - "h": 39 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 24, - "y": 9, - "w": 39, - "h": 39 - }, - "frame": { - "x": 40, - "y": 79, - "w": 39, - "h": 39 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 20, - "y": 8, - "w": 39, - "h": 39 - }, - "frame": { - "x": 40, - "y": 79, - "w": 39, - "h": 39 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 20, - "y": 8, - "w": 39, - "h": 39 - }, - "frame": { - "x": 40, - "y": 79, - "w": 39, - "h": 39 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 20, - "y": 8, - "w": 39, - "h": 39 - }, - "frame": { - "x": 40, - "y": 79, - "w": 39, - "h": 39 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 20, - "y": 8, - "w": 39, - "h": 39 - }, - "frame": { - "x": 40, - "y": 79, - "w": 39, - "h": 39 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 20, - "y": 8, - "w": 39, - "h": 39 - }, - "frame": { - "x": 40, - "y": 79, - "w": 39, - "h": 39 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 39, - "h": 39 - }, - "frame": { - "x": 40, - "y": 79, - "w": 39, - "h": 39 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 24, - "y": 9, - "w": 39, - "h": 39 - }, - "frame": { - "x": 40, - "y": 79, - "w": 39, - "h": 39 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 24, - "y": 9, - "w": 39, - "h": 39 - }, - "frame": { - "x": 40, - "y": 79, - "w": 39, - "h": 39 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 20, - "y": 8, - "w": 39, - "h": 39 - }, - "frame": { - "x": 40, - "y": 79, - "w": 39, - "h": 39 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 20, - "y": 8, - "w": 39, - "h": 39 - }, - "frame": { - "x": 40, - "y": 79, - "w": 39, - "h": 39 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 16, - "y": 11, - "w": 39, - "h": 39 - }, - "frame": { - "x": 40, - "y": 79, - "w": 39, - "h": 39 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 39, - "y": 9, - "w": 39, - "h": 39 - }, - "frame": { - "x": 40, - "y": 79, - "w": 39, - "h": 39 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 24, - "y": 9, - "w": 39, - "h": 39 - }, - "frame": { - "x": 40, - "y": 79, - "w": 39, - "h": 39 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 24, - "y": 9, - "w": 39, - "h": 39 - }, - "frame": { - "x": 40, - "y": 79, - "w": 39, - "h": 39 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 20, - "y": 8, - "w": 39, - "h": 39 - }, - "frame": { - "x": 40, - "y": 79, - "w": 39, - "h": 39 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 20, - "y": 8, - "w": 39, - "h": 39 - }, - "frame": { - "x": 40, - "y": 79, - "w": 39, - "h": 39 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 20, - "y": 8, - "w": 39, - "h": 39 - }, - "frame": { - "x": 40, - "y": 79, - "w": 39, - "h": 39 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 41, - "h": 38 - }, - "frame": { - "x": 40, - "y": 118, - "w": 41, - "h": 38 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 41, - "h": 38 - }, - "frame": { - "x": 40, - "y": 118, - "w": 41, - "h": 38 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 41, - "h": 38 - }, - "frame": { - "x": 40, - "y": 118, - "w": 41, - "h": 38 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 41, - "h": 38 - }, - "frame": { - "x": 40, - "y": 118, - "w": 41, - "h": 38 - } - }, { "filename": "0011.png", "rotated": false, "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 14, - "y": 11, - "w": 40, - "h": 39 - }, - "frame": { - "x": 79, - "y": 76, - "w": 40, - "h": 39 - } + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 11,"y": 10,"w": 41,"h": 37}, + "frame": {"x": 0,"y": 0,"w": 41,"h": 37} }, { "filename": "0012.png", "rotated": false, "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 20, - "y": 8, - "w": 40, - "h": 39 - }, - "frame": { - "x": 79, - "y": 76, - "w": 40, - "h": 39 - } + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 17,"y": 7,"w": 41,"h": 37}, + "frame": {"x": 0,"y": 0,"w": 41,"h": 37} }, { "filename": "0013.png", "rotated": false, "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 31, - "y": 1, - "w": 40, - "h": 39 - }, - "frame": { - "x": 79, - "y": 76, - "w": 40, - "h": 39 - } + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 28,"y": 0,"w": 41,"h": 37}, + "frame": {"x": 41,"y": 0,"w": 41,"h": 37} }, { "filename": "0018.png", "rotated": false, "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 38, - "y": 9, - "w": 40, - "h": 39 - }, - "frame": { - "x": 79, - "y": 76, - "w": 40, - "h": 39 - } + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 35,"y": 8,"w": 41,"h": 37}, + "frame": {"x": 82,"y": 0,"w": 41,"h": 37} }, { "filename": "0032.png", "rotated": false, "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 20, - "y": 8, - "w": 40, - "h": 39 - }, - "frame": { - "x": 79, - "y": 76, - "w": 40, - "h": 39 - } + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 17,"y": 7,"w": 41,"h": 37}, + "frame": {"x": 123,"y": 0,"w": 41,"h": 37} }, { "filename": "0033.png", "rotated": false, "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 31, - "y": 1, - "w": 40, - "h": 39 - }, - "frame": { - "x": 79, - "y": 76, - "w": 40, - "h": 39 - } + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 28,"y": 0,"w": 41,"h": 37}, + "frame": {"x": 164,"y": 0,"w": 41,"h": 37} }, { "filename": "0044.png", "rotated": false, "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 19, - "y": 8, - "w": 40, - "h": 39 - }, - "frame": { - "x": 79, - "y": 76, - "w": 40, - "h": 39 - } + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 16,"y": 7,"w": 41,"h": 37}, + "frame": {"x": 205,"y": 0,"w": 41,"h": 37} }, { "filename": "0058.png", "rotated": false, "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 14, - "y": 11, - "w": 40, - "h": 39 - }, - "frame": { - "x": 79, - "y": 76, - "w": 40, - "h": 39 - } + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 11,"y": 10,"w": 41,"h": 37}, + "frame": {"x": 246,"y": 0,"w": 41,"h": 37} }, { "filename": "0059.png", "rotated": false, "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 20, - "y": 8, - "w": 40, - "h": 39 - }, - "frame": { - "x": 79, - "y": 76, - "w": 40, - "h": 39 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 31, - "y": 1, - "w": 40, - "h": 39 - }, - "frame": { - "x": 79, - "y": 76, - "w": 40, - "h": 39 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 38, - "y": 9, - "w": 40, - "h": 39 - }, - "frame": { - "x": 79, - "y": 76, - "w": 40, - "h": 39 - } + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 17,"y": 7,"w": 41,"h": 37}, + "frame": {"x": 287,"y": 0,"w": 41,"h": 37} }, { "filename": "0079.png", "rotated": false, "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 20, - "y": 8, - "w": 40, - "h": 39 - }, - "frame": { - "x": 79, - "y": 76, - "w": 40, - "h": 39 - } + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 17,"y": 7,"w": 41,"h": 37}, + "frame": {"x": 287,"y": 0,"w": 41,"h": 37} + }, + { + "filename": "0060.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 28,"y": 0,"w": 41,"h": 37}, + "frame": {"x": 0,"y": 37,"w": 41,"h": 37} }, { "filename": "0080.png", "rotated": false, "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 31, - "y": 1, - "w": 40, - "h": 39 - }, - "frame": { - "x": 79, - "y": 76, - "w": 40, - "h": 39 - } + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 28,"y": 0,"w": 41,"h": 37}, + "frame": {"x": 0,"y": 37,"w": 41,"h": 37} + }, + { + "filename": "0065.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 35,"y": 8,"w": 41,"h": 37}, + "frame": {"x": 0,"y": 74,"w": 41,"h": 37} }, { "filename": "0094.png", "rotated": false, "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 19, - "y": 8, - "w": 40, - "h": 39 - }, - "frame": { - "x": 79, - "y": 76, - "w": 40, - "h": 39 - } + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 14,"y": 7,"w": 41,"h": 37}, + "frame": {"x": 0,"y": 111,"w": 41,"h": 37} + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 42,"y": 6,"w": 37,"h": 39}, + "frame": {"x": 0,"y": 148,"w": 37,"h": 39} + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 42,"y": 6,"w": 37,"h": 39}, + "frame": {"x": 0,"y": 187,"w": 37,"h": 39} + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 17,"y": 9,"w": 37,"h": 39}, + "frame": {"x": 0,"y": 226,"w": 37,"h": 39} + }, + { + "filename": "0064.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 42,"y": 6,"w": 37,"h": 39}, + "frame": {"x": 0,"y": 265,"w": 37,"h": 39} + }, + { + "filename": "0084.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 42,"y": 7,"w": 37,"h": 39}, + "frame": {"x": 0,"y": 265,"w": 37,"h": 39} + }, + { + "filename": "0081.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 42,"y": 0,"w": 37,"h": 39}, + "frame": {"x": 37,"y": 148,"w": 37,"h": 39} + }, + { + "filename": "0093.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 16,"y": 9,"w": 37,"h": 39}, + "frame": {"x": 41,"y": 37,"w": 37,"h": 39} + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 13,"y": 7,"w": 39,"h": 37}, + "frame": {"x": 41,"y": 76,"w": 39,"h": 37} + }, + { + "filename": "0086.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 21,"y": 8,"w": 39,"h": 37}, + "frame": {"x": 41,"y": 76,"w": 39,"h": 37} + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 13,"y": 7,"w": 39,"h": 37}, + "frame": {"x": 78,"y": 37,"w": 39,"h": 37} + }, + { + "filename": "0087.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 21,"y": 8,"w": 39,"h": 37}, + "frame": {"x": 78,"y": 37,"w": 39,"h": 37} + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 5,"y": 15,"w": 39,"h": 35}, + "frame": {"x": 41,"y": 113,"w": 39,"h": 35} }, { "filename": "0003.png", "rotated": false, "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 16, - "y": 5, - "w": 39, - "h": 39 - }, - "frame": { - "x": 81, - "y": 115, - "w": 39, - "h": 39 - } + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 13,"y": 4,"w": 39,"h": 37}, + "frame": {"x": 37,"y": 187,"w": 39,"h": 37} }, { "filename": "0004.png", "rotated": false, "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 39, - "h": 39 - }, - "frame": { - "x": 81, - "y": 115, - "w": 39, - "h": 39 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 17, - "y": 6, - "w": 39, - "h": 39 - }, - "frame": { - "x": 81, - "y": 115, - "w": 39, - "h": 39 - } + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 3,"y": 2,"w": 39,"h": 37}, + "frame": {"x": 74,"y": 148,"w": 39,"h": 37} }, { "filename": "0024.png", "rotated": false, "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 39, - "h": 39 - }, - "frame": { - "x": 81, - "y": 115, - "w": 39, - "h": 39 - } + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 5,"y": 2,"w": 39,"h": 37}, + "frame": {"x": 74,"y": 148,"w": 39,"h": 37} + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 10,"y": 10,"w": 39,"h": 37}, + "frame": {"x": 80,"y": 74,"w": 39,"h": 37} + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 21,"y": 8,"w": 39,"h": 37}, + "frame": {"x": 117,"y": 37,"w": 39,"h": 37} + }, + { + "filename": "0089.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 17,"y": 7,"w": 39,"h": 37}, + "frame": {"x": 117,"y": 37,"w": 39,"h": 37} + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 21,"y": 8,"w": 39,"h": 37}, + "frame": {"x": 80,"y": 111,"w": 39,"h": 37} + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 17,"y": 7,"w": 39,"h": 37}, + "frame": {"x": 37,"y": 224,"w": 39,"h": 37} + }, + { + "filename": "0066.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 21,"y": 8,"w": 39,"h": 37}, + "frame": {"x": 37,"y": 224,"w": 39,"h": 37} + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 17,"y": 7,"w": 39,"h": 37}, + "frame": {"x": 37,"y": 261,"w": 39,"h": 37} + }, + { + "filename": "0067.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 21,"y": 8,"w": 39,"h": 37}, + "frame": {"x": 37,"y": 261,"w": 39,"h": 37} + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 14,"y": 5,"w": 39,"h": 37}, + "frame": {"x": 76,"y": 185,"w": 39,"h": 37} }, { "filename": "0030.png", "rotated": false, "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 39, - "h": 39 - }, - "frame": { - "x": 81, - "y": 115, - "w": 39, - "h": 39 - } + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 9,"y": 10,"w": 39,"h": 37}, + "frame": {"x": 113,"y": 148,"w": 39,"h": 37} + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 13,"y": 10,"w": 39,"h": 37}, + "frame": {"x": 119,"y": 74,"w": 39,"h": 37} + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 36,"y": 8,"w": 39,"h": 37}, + "frame": {"x": 156,"y": 37,"w": 39,"h": 37} + }, + { + "filename": "0068.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 17,"y": 7,"w": 39,"h": 37}, + "frame": {"x": 156,"y": 37,"w": 39,"h": 37} + }, + { + "filename": "0078.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 13,"y": 10,"w": 39,"h": 37}, + "frame": {"x": 156,"y": 37,"w": 39,"h": 37} + }, + { + "filename": "0088.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 17,"y": 7,"w": 39,"h": 37}, + "frame": {"x": 156,"y": 37,"w": 39,"h": 37} + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 21,"y": 8,"w": 39,"h": 37}, + "frame": {"x": 119,"y": 111,"w": 39,"h": 37} + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 21,"y": 8,"w": 39,"h": 37}, + "frame": {"x": 76,"y": 222,"w": 39,"h": 37} + }, + { + "filename": "0085.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 36,"y": 8,"w": 39,"h": 37}, + "frame": {"x": 76,"y": 222,"w": 39,"h": 37} + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 17,"y": 7,"w": 39,"h": 37}, + "frame": {"x": 76,"y": 259,"w": 39,"h": 37} + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 17,"y": 7,"w": 39,"h": 37}, + "frame": {"x": 76,"y": 259,"w": 39,"h": 37} + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 17,"y": 7,"w": 39,"h": 37}, + "frame": {"x": 76,"y": 259,"w": 39,"h": 37} + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 17,"y": 7,"w": 39,"h": 37}, + "frame": {"x": 76,"y": 259,"w": 39,"h": 37} + }, + { + "filename": "0049.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 17,"y": 7,"w": 39,"h": 37}, + "frame": {"x": 76,"y": 259,"w": 39,"h": 37} }, { "filename": "0047.png", "rotated": false, "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 19, - "y": 8, - "w": 39, - "h": 39 - }, - "frame": { - "x": 81, - "y": 115, - "w": 39, - "h": 39 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 16, - "y": 5, - "w": 39, - "h": 39 - }, - "frame": { - "x": 81, - "y": 115, - "w": 39, - "h": 39 - } + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 17,"y": 6,"w": 39,"h": 37}, + "frame": {"x": 115,"y": 185,"w": 39,"h": 37} }, { "filename": "0051.png", "rotated": false, "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 39, - "h": 39 - }, - "frame": { - "x": 81, - "y": 115, - "w": 39, - "h": 39 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 17, - "y": 6, - "w": 39, - "h": 39 - }, - "frame": { - "x": 81, - "y": 115, - "w": 39, - "h": 39 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 39, - "h": 39 - }, - "frame": { - "x": 81, - "y": 115, - "w": 39, - "h": 39 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 39, - "h": 39 - }, - "frame": { - "x": 81, - "y": 115, - "w": 39, - "h": 39 - } + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 3,"y": 2,"w": 39,"h": 37}, + "frame": {"x": 115,"y": 185,"w": 39,"h": 37} }, { "filename": "0091.png", "rotated": false, "trimmed": true, - "sourceSize": { - "w": 86, - "h": 52 - }, - "spriteSourceSize": { - "x": 19, - "y": 8, - "w": 39, - "h": 39 - }, - "frame": { - "x": 81, - "y": 115, - "w": 39, - "h": 39 - } + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 17,"y": 6,"w": 39,"h": 37}, + "frame": {"x": 115,"y": 185,"w": 39,"h": 37} + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 13,"y": 4,"w": 39,"h": 37}, + "frame": {"x": 152,"y": 148,"w": 39,"h": 37} + }, + { + "filename": "0057.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 10,"y": 10,"w": 39,"h": 37}, + "frame": {"x": 158,"y": 74,"w": 39,"h": 37} + }, + { + "filename": "0069.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 17,"y": 7,"w": 39,"h": 37}, + "frame": {"x": 195,"y": 37,"w": 39,"h": 37} + }, + { + "filename": "0070.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 14,"y": 5,"w": 39,"h": 37}, + "frame": {"x": 158,"y": 111,"w": 39,"h": 37} + }, + { + "filename": "0071.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 5,"y": 2,"w": 39,"h": 37}, + "frame": {"x": 115,"y": 222,"w": 39,"h": 37} + }, + { + "filename": "0077.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 9,"y": 10,"w": 39,"h": 37}, + "frame": {"x": 115,"y": 259,"w": 39,"h": 37} + }, + { + "filename": "0090.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 17,"y": 7,"w": 39,"h": 37}, + "frame": {"x": 191,"y": 148,"w": 39,"h": 37} + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 42,"y": 0,"w": 37,"h": 38}, + "frame": {"x": 197,"y": 74,"w": 37,"h": 38} + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 42,"y": 0,"w": 37,"h": 38}, + "frame": {"x": 197,"y": 74,"w": 37,"h": 38} + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 0,"y": 8,"w": 39,"h": 36}, + "frame": {"x": 197,"y": 112,"w": 39,"h": 36} + }, + { + "filename": "0061.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 42,"y": 0,"w": 37,"h": 38}, + "frame": {"x": 234,"y": 37,"w": 37,"h": 38} + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 1,"y": 11,"w": 39,"h": 36}, + "frame": {"x": 234,"y": 75,"w": 39,"h": 36} + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 2,"y": 11,"w": 39,"h": 36}, + "frame": {"x": 234,"y": 75,"w": 39,"h": 36} + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 0,"y": 7,"w": 39,"h": 36}, + "frame": {"x": 271,"y": 37,"w": 39,"h": 36} + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 19,"y": 10,"w": 39,"h": 36}, + "frame": {"x": 273,"y": 73,"w": 39,"h": 36} + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 1,"y": 8,"w": 39,"h": 36}, + "frame": {"x": 273,"y": 109,"w": 39,"h": 36} + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 44,"y": 1,"w": 36,"h": 39}, + "frame": {"x": 236,"y": 111,"w": 36,"h": 39} + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 44,"y": 1,"w": 36,"h": 39}, + "frame": {"x": 236,"y": 111,"w": 36,"h": 39} + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 0,"y": 9,"w": 39,"h": 36}, + "frame": {"x": 272,"y": 145,"w": 39,"h": 36} + }, + { + "filename": "0054.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 0,"y": 9,"w": 39,"h": 36}, + "frame": {"x": 230,"y": 150,"w": 39,"h": 36} + }, + { + "filename": "0055.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 2,"y": 11,"w": 39,"h": 36}, + "frame": {"x": 269,"y": 181,"w": 39,"h": 36} + }, + { + "filename": "0075.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 2,"y": 11,"w": 39,"h": 36}, + "frame": {"x": 269,"y": 181,"w": 39,"h": 36} + }, + { + "filename": "0072.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 0,"y": 7,"w": 39,"h": 36}, + "frame": {"x": 154,"y": 185,"w": 39,"h": 36} + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 44,"y": 1,"w": 36,"h": 39}, + "frame": {"x": 193,"y": 185,"w": 36,"h": 39} + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 44,"y": 1,"w": 36,"h": 39}, + "frame": {"x": 193,"y": 185,"w": 36,"h": 39} + }, + { + "filename": "0092.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 18,"y": 10,"w": 39,"h": 36}, + "frame": {"x": 154,"y": 221,"w": 39,"h": 36} + }, + { + "filename": "0062.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 44,"y": 1,"w": 36,"h": 39}, + "frame": {"x": 229,"y": 186,"w": 36,"h": 39} + }, + { + "filename": "0082.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 44,"y": 2,"w": 36,"h": 39}, + "frame": {"x": 229,"y": 186,"w": 36,"h": 39} + }, + { + "filename": "0063.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 44,"y": 1,"w": 36,"h": 39}, + "frame": {"x": 193,"y": 224,"w": 36,"h": 39} + }, + { + "filename": "0083.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 44,"y": 2,"w": 36,"h": 39}, + "frame": {"x": 193,"y": 224,"w": 36,"h": 39} + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 0,"y": 9,"w": 38,"h": 36}, + "frame": {"x": 154,"y": 257,"w": 38,"h": 36} + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 6,"y": 15,"w": 39,"h": 35}, + "frame": {"x": 154,"y": 293,"w": 39,"h": 35} + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 0,"y": 9,"w": 38,"h": 36}, + "frame": {"x": 265,"y": 217,"w": 38,"h": 36} + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 0,"y": 8,"w": 38,"h": 36}, + "frame": {"x": 265,"y": 217,"w": 38,"h": 36} + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 0,"y": 8,"w": 38,"h": 36}, + "frame": {"x": 229,"y": 253,"w": 38,"h": 36} + }, + { + "filename": "0073.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 0,"y": 8,"w": 38,"h": 36}, + "frame": {"x": 267,"y": 253,"w": 38,"h": 36} + }, + { + "filename": "0074.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 0,"y": 8,"w": 38,"h": 36}, + "frame": {"x": 193,"y": 289,"w": 38,"h": 36} + }, + { + "filename": "0056.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 6,"y": 15,"w": 39,"h": 35}, + "frame": {"x": 231,"y": 289,"w": 39,"h": 35} + }, + { + "filename": "0076.png", + "rotated": false, + "trimmed": true, + "sourceSize": {"w": 80,"h": 50}, + "spriteSourceSize": {"x": 6,"y": 15,"w": 39,"h": 35}, + "frame": {"x": 231,"y": 289,"w": 39,"h": 35} } ] } ], "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:bfad3aac0a7883567d3a2355981c779c:60a889e61eda9926e91e6c953f5f7cc3:37281ac0aa1e619ef385b889b64064b7$" - } + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0"} } diff --git a/public/images/pokemon/exp/back/shiny/774.png b/public/images/pokemon/exp/back/shiny/774.png index fc3d180d8d4e27cfbebf14186880659631012cc6..dcfb487561c790f001b9fc9125814815331b4a6f 100644 GIT binary patch literal 6382 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 literal 2312 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 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/exp/shiny/774-blue.png b/public/images/pokemon/exp/shiny/774-blue.png index 89b283561730d78382be6742e14405221e5c8b0c..21dd00d307bbfb3c09cabdcc68f8e4ce8a7887ef 100644 GIT binary patch delta 7475 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 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/exp/shiny/774-green.json b/public/images/pokemon/exp/shiny/774-green.json index 90220f4dd67..b0c94749eaa 100644 --- a/public/images/pokemon/exp/shiny/774-green.json +++ b/public/images/pokemon/exp/shiny/774-green.json @@ -1,7 +1,7 @@ { "textures": [ { - "image": "774-green.png", + "image": "774-blue.png", "format": "RGBA8888", "size": {"w": 274, "h": 274}, "scale": 1, diff --git a/public/images/pokemon/exp/shiny/774-green.png b/public/images/pokemon/exp/shiny/774-green.png index 781e176c43dc15f7e9c5c1154fe3a140d5ddcfb3..21dd00d307bbfb3c09cabdcc68f8e4ce8a7887ef 100644 GIT binary patch delta 7475 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 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/exp/shiny/774-indigo.json b/public/images/pokemon/exp/shiny/774-indigo.json index d54b0a91175..b0c94749eaa 100644 --- a/public/images/pokemon/exp/shiny/774-indigo.json +++ b/public/images/pokemon/exp/shiny/774-indigo.json @@ -1,7 +1,7 @@ { "textures": [ { - "image": "774-indigo.png", + "image": "774-blue.png", "format": "RGBA8888", "size": {"w": 274, "h": 274}, "scale": 1, diff --git a/public/images/pokemon/exp/shiny/774-indigo.png b/public/images/pokemon/exp/shiny/774-indigo.png index b78e2baa7b7aef246e9cf2e5166bae6c224a0cf2..21dd00d307bbfb3c09cabdcc68f8e4ce8a7887ef 100644 GIT binary patch delta 7475 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 diff --git a/public/images/pokemon/exp/shiny/774-meteor.json b/public/images/pokemon/exp/shiny/774-meteor.json new file mode 100644 index 00000000000..72646f03857 --- /dev/null +++ b/public/images/pokemon/exp/shiny/774-meteor.json @@ -0,0 +1,1994 @@ +{ + "textures": [ + { + "image": "774.png", + "format": "RGBA8888", + "size": { + "w": 158, + "h": 158 + }, + "scale": 1, + "frames": [ + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 42, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 41, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 42, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 41, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 12, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 42, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0055.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 41, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0072.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 42, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0075.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 41, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0093.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 12, + "w": 42, + "h": 38 + }, + "frame": { + "x": 42, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 37, + "y": 14, + "w": 42, + "h": 37 + }, + "frame": { + "x": 84, + "y": 0, + "w": 42, + "h": 37 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 37, + "y": 14, + "w": 42, + "h": 37 + }, + "frame": { + "x": 84, + "y": 0, + "w": 42, + "h": 37 + } + }, + { + "filename": "0056.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 37, + "y": 14, + "w": 42, + "h": 37 + }, + "frame": { + "x": 84, + "y": 0, + "w": 42, + "h": 37 + } + }, + { + "filename": "0076.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 37, + "y": 14, + "w": 42, + "h": 37 + }, + "frame": { + "x": 84, + "y": 0, + "w": 42, + "h": 37 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0054.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0073.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0074.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 75, + "w": 40, + "h": 41 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 75, + "w": 40, + "h": 41 + } + }, + { + "filename": "0064.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 75, + "w": 40, + "h": 41 + } + }, + { + "filename": "0084.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 75, + "w": 40, + "h": 41 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0062.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0063.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0082.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0083.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 39, + "y": 116, + "w": 40, + "h": 40 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 39, + "y": 116, + "w": 40, + "h": 40 + } + }, + { + "filename": "0061.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 39, + "y": 116, + "w": 40, + "h": 40 + } + }, + { + "filename": "0081.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 39, + "y": 116, + "w": 40, + "h": 40 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 26, + "y": 11, + "w": 40, + "h": 40 + }, + "frame": { + "x": 40, + "y": 75, + "w": 40, + "h": 40 + } + }, + { + "filename": "0092.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 26, + "y": 11, + "w": 40, + "h": 40 + }, + "frame": { + "x": 79, + "y": 115, + "w": 40, + "h": 40 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 28, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 28, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0049.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0058.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 28, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0066.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0067.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0068.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0069.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0078.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 28, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0086.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0087.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0088.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0089.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0090.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 27, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 36, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 32, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 27, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 36, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 32, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 27, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0051.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 36, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0057.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 32, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0070.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 27, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0071.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 36, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0077.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 32, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0094.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 13, + "y": 1, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 6, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 13, + "y": 1, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 6, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0059.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0060.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 13, + "y": 1, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0065.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 6, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0079.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0080.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 13, + "y": 1, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0085.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 6, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0091.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:7aae9fa19bed844305af4b8fe4e51932:e292dad33ad7e92ac28b96bf10d16c70:37281ac0aa1e619ef385b889b64064b7$" + } +} diff --git a/public/images/pokemon/exp/shiny/774-meteor.png b/public/images/pokemon/exp/shiny/774-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..78e8242646344de4de4d3efd794acde3c07a26f5 GIT binary patch literal 2326 zcmZuzc{~%08{aIog%=$*C6aP%7|ZoW%~2s|xhcn+bK26Bt6}alSB{ok36n5mB21EF z%9cWMM&!1ONa+#zq&f?P31! z*azCnsufj6dmwFTYJF)B!C>%lDQP!3IUEibj69ZZVw9_Ml1io41^I4lZ0v#sW%h=E zcdwaS0d&6)dF}~{jW6n12RYA>+I(fS4|QUv(1k~5gEJaC+$Nkq&3|F~*%ma#>eNfvEurt%hT@>t|`!SsRdVZlg_cn=AIbN!N*m$vPK>>u~(Nj(D zigOeW*AMVQeW`_dIokFH4^OV#;#9QxpcDZ3OIw9@5Gu1irN6n_OeNy}Xq#|I*6)6; z-Rz|4p~h3U4!P%H2apDL6+pV5YI1@pm1~3`H}5yf4ePE>UUu!mj(-Y0zV1ijA6a<* zZIZ;F5vU$a852%HW>QPYZ552D<*<4Qd-=Hb4OP;uhd>U;%5{0oPfJ3}ph~czRchz6 zL4VAr>7Ga|#M0HJ`<|qEZv-~s%+MTP<}H+~(^xn_ULjB!Q6VujNV0;P$6Pl%g3he9cg(I4)`E3h2$C#l!Km=zg078!DF#pXziE~KrU5m-P4H;l{}~PrK`VO)3s2P3S?DuY{Ya!u)v+kkRdAkvN^|At@&1ufYZ)(q zO=4IZg^Y2362>J?y54A+=QL?B<4Q{K)FvxemDd5y{`d~f=RsB z5g^LZtgbLgJu4d^K>`^4!5w(L4RvisQ<#|LT*mSY{iQA}tG0C9Pg?Eja)yVsK%wsO z=TcqLDL}4|{^CQ1I!SE~D}S|f@||ijCKL^i%VC_B)MFWzHAgq8f5h1(UDn6eSEv*5 zfT;qPPok$m@2pZg!Gz`Nn`SGoRiNh$gGP`{ zBr3X7LFmC8qAVx!t0;`Z+{!I9bHI5m%{lElRO^D?%Op)`szeTZ&kV+M0gHN*D~Wf+ zY{wy#gS6e~53ILgO;$GU4@YP)aen{Dk$h#M?A4;W7#L*p`6_Ky_b_ad%V$4PjpM6O zy5(^D>|@~r2qFS5$qj39vSM%IJ{Dp{FRuc~ms0|HlC}{F{ONfqRll%0rBi49w4$3n z53Ds_;U%xk&ZSrC`@S$Ul^v{1jhihmu<^hCS!(U76(7Eqe_d za|=(YZ2zT`^t*4e!TG-j3sEz0(A+r%cCkw-b!S#6{)dkmFQ!w2T)GzP;>$> zq_{CWRSUjmz2uQswIW1?X!`2$m^~LzJARHgzljh3SUAIU=)9UG$LhFn*#R1n6+a(m zroGAQj#@sVrY;%53t_!nUl@(FcC+qHkY`g?3H`}NC9abjKLC2o{6TNeKV`kdj2pT$ z;4>|*unU6fg80~Rr6)yveZxizpPS0tpUugi%X0gvLaB(sNQz~QWzw9JP}9U9%o(3< z#lvuVu0~Bjn&gK})%w9Z5HeKjNH*kEhNN~pjqg+xZL9e~)mVh!bH-b$izo3Ky8n;< zlwON`kVywU)1%cWTzd{VI3PUY+Qm)8`@hmrFbKhdn{@JH5g zOVENQ6s-+eRV-p#z@mqR4M39)^u(5>@WSR8+`4iT0)@FhG42s4?bEVYVHCJR9shnm zOR%|`PskESr+0-^+r)F4Q}Mnf4-91K*HMbg0-f7)@3}wdn}}i{P3)<=eLuK}&E<39 zo-m7zEUw%^N+fNM6M=qaHZ}BdPr z^%lhjN6U~<3D|0Kz@3%-Biub!|iVGeYZLxtz== zj)SwNc11VNv%g_t*bMfG`Z09C_PChoGTz>xha;H8jUzl^^q9`&6s#6?)0>hh=WAT48NfTko|7F#_cU!-Julikxgsi_+ZG=?TmN4cUV)X^09&SJ3odEW+QyJDR0_%$JMPCOvz<3&8l2`Nb-I*T{bW__&Lb literal 0 HcmV?d00001 diff --git a/public/images/pokemon/exp/shiny/774-orange-meteor.json b/public/images/pokemon/exp/shiny/774-orange-meteor.json new file mode 100644 index 00000000000..72646f03857 --- /dev/null +++ b/public/images/pokemon/exp/shiny/774-orange-meteor.json @@ -0,0 +1,1994 @@ +{ + "textures": [ + { + "image": "774.png", + "format": "RGBA8888", + "size": { + "w": 158, + "h": 158 + }, + "scale": 1, + "frames": [ + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 42, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 41, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 42, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 41, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 12, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 42, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0055.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 41, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0072.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 42, + "y": 7, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0075.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 41, + "y": 10, + "w": 42, + "h": 38 + }, + "frame": { + "x": 0, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0093.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 12, + "w": 42, + "h": 38 + }, + "frame": { + "x": 42, + "y": 0, + "w": 42, + "h": 38 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 37, + "y": 14, + "w": 42, + "h": 37 + }, + "frame": { + "x": 84, + "y": 0, + "w": 42, + "h": 37 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 37, + "y": 14, + "w": 42, + "h": 37 + }, + "frame": { + "x": 84, + "y": 0, + "w": 42, + "h": 37 + } + }, + { + "filename": "0056.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 37, + "y": 14, + "w": 42, + "h": 37 + }, + "frame": { + "x": 84, + "y": 0, + "w": 42, + "h": 37 + } + }, + { + "filename": "0076.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 37, + "y": 14, + "w": 42, + "h": 37 + }, + "frame": { + "x": 84, + "y": 0, + "w": 42, + "h": 37 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0054.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0073.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0074.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 43, + "y": 8, + "w": 41, + "h": 38 + }, + "frame": { + "x": 84, + "y": 37, + "w": 41, + "h": 38 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 75, + "w": 40, + "h": 41 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 75, + "w": 40, + "h": 41 + } + }, + { + "filename": "0064.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 75, + "w": 40, + "h": 41 + } + }, + { + "filename": "0084.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 6, + "w": 40, + "h": 41 + }, + "frame": { + "x": 0, + "y": 75, + "w": 40, + "h": 41 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0062.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0063.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0082.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0083.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 39, + "h": 41 + }, + "frame": { + "x": 0, + "y": 116, + "w": 39, + "h": 41 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 39, + "y": 116, + "w": 40, + "h": 40 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 39, + "y": 116, + "w": 40, + "h": 40 + } + }, + { + "filename": "0061.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 39, + "y": 116, + "w": 40, + "h": 40 + } + }, + { + "filename": "0081.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 40, + "h": 40 + }, + "frame": { + "x": 39, + "y": 116, + "w": 40, + "h": 40 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 26, + "y": 11, + "w": 40, + "h": 40 + }, + "frame": { + "x": 40, + "y": 75, + "w": 40, + "h": 40 + } + }, + { + "filename": "0092.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 26, + "y": 11, + "w": 40, + "h": 40 + }, + "frame": { + "x": 79, + "y": 115, + "w": 40, + "h": 40 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 28, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 28, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0049.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0058.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 28, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0066.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0067.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0068.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0069.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0078.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 28, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0086.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0087.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 20, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0088.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0089.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0090.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 27, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 36, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 32, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 27, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 36, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 32, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 27, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0051.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 36, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0057.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 32, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0070.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 27, + "y": 6, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0071.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 36, + "y": 3, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0077.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 32, + "y": 11, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0094.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 80, + "y": 75, + "w": 39, + "h": 39 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 13, + "y": 1, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 6, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 13, + "y": 1, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 6, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0059.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0060.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 13, + "y": 1, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0065.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 6, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0079.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0080.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 13, + "y": 1, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0085.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 6, + "y": 9, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + }, + { + "filename": "0091.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 84, + "h": 51 + }, + "spriteSourceSize": { + "x": 24, + "y": 8, + "w": 39, + "h": 39 + }, + "frame": { + "x": 119, + "y": 114, + "w": 39, + "h": 39 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:7aae9fa19bed844305af4b8fe4e51932:e292dad33ad7e92ac28b96bf10d16c70:37281ac0aa1e619ef385b889b64064b7$" + } +} diff --git a/public/images/pokemon/exp/shiny/774-orange-meteor.png b/public/images/pokemon/exp/shiny/774-orange-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..78e8242646344de4de4d3efd794acde3c07a26f5 GIT binary patch literal 2326 zcmZuzc{~%08{aIog%=$*C6aP%7|ZoW%~2s|xhcn+bK26Bt6}alSB{ok36n5mB21EF z%9cWMM&!1ONa+#zq&f?P31! z*azCnsufj6dmwFTYJF)B!C>%lDQP!3IUEibj69ZZVw9_Ml1io41^I4lZ0v#sW%h=E zcdwaS0d&6)dF}~{jW6n12RYA>+I(fS4|QUv(1k~5gEJaC+$Nkq&3|F~*%ma#>eNfvEurt%hT@>t|`!SsRdVZlg_cn=AIbN!N*m$vPK>>u~(Nj(D zigOeW*AMVQeW`_dIokFH4^OV#;#9QxpcDZ3OIw9@5Gu1irN6n_OeNy}Xq#|I*6)6; z-Rz|4p~h3U4!P%H2apDL6+pV5YI1@pm1~3`H}5yf4ePE>UUu!mj(-Y0zV1ijA6a<* zZIZ;F5vU$a852%HW>QPYZ552D<*<4Qd-=Hb4OP;uhd>U;%5{0oPfJ3}ph~czRchz6 zL4VAr>7Ga|#M0HJ`<|qEZv-~s%+MTP<}H+~(^xn_ULjB!Q6VujNV0;P$6Pl%g3he9cg(I4)`E3h2$C#l!Km=zg078!DF#pXziE~KrU5m-P4H;l{}~PrK`VO)3s2P3S?DuY{Ya!u)v+kkRdAkvN^|At@&1ufYZ)(q zO=4IZg^Y2362>J?y54A+=QL?B<4Q{K)FvxemDd5y{`d~f=RsB z5g^LZtgbLgJu4d^K>`^4!5w(L4RvisQ<#|LT*mSY{iQA}tG0C9Pg?Eja)yVsK%wsO z=TcqLDL}4|{^CQ1I!SE~D}S|f@||ijCKL^i%VC_B)MFWzHAgq8f5h1(UDn6eSEv*5 zfT;qPPok$m@2pZg!Gz`Nn`SGoRiNh$gGP`{ zBr3X7LFmC8qAVx!t0;`Z+{!I9bHI5m%{lElRO^D?%Op)`szeTZ&kV+M0gHN*D~Wf+ zY{wy#gS6e~53ILgO;$GU4@YP)aen{Dk$h#M?A4;W7#L*p`6_Ky_b_ad%V$4PjpM6O zy5(^D>|@~r2qFS5$qj39vSM%IJ{Dp{FRuc~ms0|HlC}{F{ONfqRll%0rBi49w4$3n z53Ds_;U%xk&ZSrC`@S$Ul^v{1jhihmu<^hCS!(U76(7Eqe_d za|=(YZ2zT`^t*4e!TG-j3sEz0(A+r%cCkw-b!S#6{)dkmFQ!w2T)GzP;>$> zq_{CWRSUjmz2uQswIW1?X!`2$m^~LzJARHgzljh3SUAIU=)9UG$LhFn*#R1n6+a(m zroGAQj#@sVrY;%53t_!nUl@(FcC+qHkY`g?3H`}NC9abjKLC2o{6TNeKV`kdj2pT$ z;4>|*unU6fg80~Rr6)yveZxizpPS0tpUugi%X0gvLaB(sNQz~QWzw9JP}9U9%o(3< z#lvuVu0~Bjn&gK})%w9Z5HeKjNH*kEhNN~pjqg+xZL9e~)mVh!bH-b$izo3Ky8n;< zlwON`kVywU)1%cWTzd{VI3PUY+Qm)8`@hmrFbKhdn{@JH5g zOVENQ6s-+eRV-p#z@mqR4M39)^u(5>@WSR8+`4iT0)@FhG42s4?bEVYVHCJR9shnm zOR%|`PskESr+0-^+r)F4Q}Mnf4-91K*HMbg0-f7)@3}wdn}}i{P3)<=eLuK}&E<39 zo-m7zEUw%^N+fNM6M=qaHZ}BdPr z^%lhjN6U~<3D|0Kz@3%-Biub!|iVGeYZLxtz== zj)SwNc11VNv%g_t*bMfG`Z09C_PChoGTz>xha;H8jUzl^^q9`&6s#6?)0>hh=WAT48NfTko|7F#_cU!-Julikxgsi_+ZG=?TmN4cUV)X^09&SJ3odEW+QyJDR0_%$JMPCOvz<3&8l2`Nb-I*T{bW__&Lb literal 0 HcmV?d00001 diff --git a/public/images/pokemon/exp/shiny/774-orange.json b/public/images/pokemon/exp/shiny/774-orange.json index 77e0908b690..b0c94749eaa 100644 --- a/public/images/pokemon/exp/shiny/774-orange.json +++ b/public/images/pokemon/exp/shiny/774-orange.json @@ -1,7 +1,7 @@ { "textures": [ { - "image": "774-orange.png", + "image": "774-blue.png", "format": "RGBA8888", "size": {"w": 274, "h": 274}, "scale": 1, diff --git a/public/images/pokemon/exp/shiny/774-orange.png b/public/images/pokemon/exp/shiny/774-orange.png index f19ec226224038be8f189eeb4cbc079cb6a2a55f..21dd00d307bbfb3c09cabdcc68f8e4ce8a7887ef 100644 GIT binary patch delta 7475 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 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/exp/shiny/774-red.json b/public/images/pokemon/exp/shiny/774-red.json index bba5c5e837f..b0c94749eaa 100644 --- a/public/images/pokemon/exp/shiny/774-red.json +++ b/public/images/pokemon/exp/shiny/774-red.json @@ -1,7 +1,7 @@ { "textures": [ { - "image": "774-red.png", + "image": "774-blue.png", "format": "RGBA8888", "size": {"w": 274, "h": 274}, "scale": 1, diff --git a/public/images/pokemon/exp/shiny/774-red.png b/public/images/pokemon/exp/shiny/774-red.png index 9992e1c495f05cdff30963b51aafcc8429130ca0..21dd00d307bbfb3c09cabdcc68f8e4ce8a7887ef 100644 GIT binary patch delta 7475 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 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/exp/shiny/774-violet.json b/public/images/pokemon/exp/shiny/774-violet.json index 42c0105da2d..b0c94749eaa 100644 --- a/public/images/pokemon/exp/shiny/774-violet.json +++ b/public/images/pokemon/exp/shiny/774-violet.json @@ -1,7 +1,7 @@ { "textures": [ { - "image": "774-violet.png", + "image": "774-blue.png", "format": "RGBA8888", "size": {"w": 274, "h": 274}, "scale": 1, diff --git a/public/images/pokemon/exp/shiny/774-violet.png b/public/images/pokemon/exp/shiny/774-violet.png index 3e1b3411da87807ff650a491c7fc38a84ef12f74..21dd00d307bbfb3c09cabdcc68f8e4ce8a7887ef 100644 GIT binary patch delta 7475 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 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/exp/shiny/774-yellow.json b/public/images/pokemon/exp/shiny/774-yellow.json index 6f5d0a8121c..b0c94749eaa 100644 --- a/public/images/pokemon/exp/shiny/774-yellow.json +++ b/public/images/pokemon/exp/shiny/774-yellow.json @@ -1,7 +1,7 @@ { "textures": [ { - "image": "774-yellow.png", + "image": "774-blue.png", "format": "RGBA8888", "size": {"w": 274, "h": 274}, "scale": 1, diff --git a/public/images/pokemon/exp/shiny/774-yellow.png b/public/images/pokemon/exp/shiny/774-yellow.png index e08aa86a32bb7df3813eb89da5d9eae21bbcc118..21dd00d307bbfb3c09cabdcc68f8e4ce8a7887ef 100644 GIT binary patch delta 7475 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 diff --git a/public/images/pokemon/icons/7/774-blue-meteor.png b/public/images/pokemon/icons/7/774-blue-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..e506fe3a3ce30a47b8b5993ee9ea222150e29412 GIT binary patch literal 289 zcmV++0p9+JP)X0002!Nkl7V}_;m|{P6n8B{gWHOn| z&(imORke2P!j$(sp92X>^&E#y@X!hH)2on+c*T^1q)j(N3pFfnat5FPV&(CGFgMX00000NkvXXu0mjfnRR-| literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/7/774-green-meteor.png b/public/images/pokemon/icons/7/774-green-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..e506fe3a3ce30a47b8b5993ee9ea222150e29412 GIT binary patch literal 289 zcmV++0p9+JP)X0002!Nkl7V}_;m|{P6n8B{gWHOn| z&(imORke2P!j$(sp92X>^&E#y@X!hH)2on+c*T^1q)j(N3pFfnat5FPV&(CGFgMX00000NkvXXu0mjfnRR-| literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/7/774-indigo-meteor.png b/public/images/pokemon/icons/7/774-indigo-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..e506fe3a3ce30a47b8b5993ee9ea222150e29412 GIT binary patch literal 289 zcmV++0p9+JP)X0002!Nkl7V}_;m|{P6n8B{gWHOn| z&(imORke2P!j$(sp92X>^&E#y@X!hH)2on+c*T^1q)j(N3pFfnat5FPV&(CGFgMX00000NkvXXu0mjfnRR-| literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/7/774-orange-meteor.png b/public/images/pokemon/icons/7/774-orange-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..e506fe3a3ce30a47b8b5993ee9ea222150e29412 GIT binary patch literal 289 zcmV++0p9+JP)X0002!Nkl7V}_;m|{P6n8B{gWHOn| z&(imORke2P!j$(sp92X>^&E#y@X!hH)2on+c*T^1q)j(N3pFfnat5FPV&(CGFgMX00000NkvXXu0mjfnRR-| literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/7/774-red-meteor.png b/public/images/pokemon/icons/7/774-red-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..e506fe3a3ce30a47b8b5993ee9ea222150e29412 GIT binary patch literal 289 zcmV++0p9+JP)X0002!Nkl7V}_;m|{P6n8B{gWHOn| z&(imORke2P!j$(sp92X>^&E#y@X!hH)2on+c*T^1q)j(N3pFfnat5FPV&(CGFgMX00000NkvXXu0mjfnRR-| literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/7/774-violet-meteor.png b/public/images/pokemon/icons/7/774-violet-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..e506fe3a3ce30a47b8b5993ee9ea222150e29412 GIT binary patch literal 289 zcmV++0p9+JP)X0002!Nkl7V}_;m|{P6n8B{gWHOn| z&(imORke2P!j$(sp92X>^&E#y@X!hH)2on+c*T^1q)j(N3pFfnat5FPV&(CGFgMX00000NkvXXu0mjfnRR-| literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/7/774-yellow-meteor.png b/public/images/pokemon/icons/7/774-yellow-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..e506fe3a3ce30a47b8b5993ee9ea222150e29412 GIT binary patch literal 289 zcmV++0p9+JP)X0002!Nkl7V}_;m|{P6n8B{gWHOn| z&(imORke2P!j$(sp92X>^&E#y@X!hH)2on+c*T^1q)j(N3pFfnat5FPV&(CGFgMX00000NkvXXu0mjfnRR-| literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/7/774s-blue-meteor.png b/public/images/pokemon/icons/7/774s-blue-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..e506fe3a3ce30a47b8b5993ee9ea222150e29412 GIT binary patch literal 289 zcmV++0p9+JP)X0002!Nkl7V}_;m|{P6n8B{gWHOn| z&(imORke2P!j$(sp92X>^&E#y@X!hH)2on+c*T^1q)j(N3pFfnat5FPV&(CGFgMX00000NkvXXu0mjfnRR-| literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/7/774s-blue.png b/public/images/pokemon/icons/7/774s-blue.png index bc9aa6b260abe2cae883f24866e4d360f1a2d904..6b97dc055ac0d5af0673fa5dea0a86875de75f5d 100644 GIT binary patch delta 564 zcmV-40?Yk~1Iz@FBYyw^b5ch_0Itp)=>Px$>`6pHR9Hvt*0D=MK^zD0pF_|T@*tr} zEfQyi6s&Y=YZ59aAqWfy7ZIh&A(9ZmsiDa~K!lo%0tteQa11d*r6Dj7X=2A~RISh~!C8W;38=nr=zkfs*=*kcwOTF1_BCuH z;F`@Qbvp0l@vIq!Gz17-wfaC7%Ob02Fc_p-t!4;P8pz8Dkjv#FtJO-$WQqYZnG-6N zN|OTuS1w;uz5Yyv!a2hYuea?u-S7L9kx~f)n9rY4I(wPc~&Y*|^&gonoc^-*G$>CTbyWOt4+)_Y{lSboZ00JCe!$<%_p&jaWyWu1VGqM*5sRVh7`2W?uj%hdgO5yN9ze&W- zR{hJ9267}TF00008>C4= zK|zT`nq+`TsgdYC0}Et;DBVT>6QA|4Op?a$DDI>u*@rFv^xnO*DMARvJx7s&8JK|? zct^m$Mp>4D`0bkBf%C_zGk`I6=g)}jx+WPA5HO9&=A#qo3V&2N2|$a}IU)&;lLC2o z{q-GYZ*_y49*#|Lt}Jq25+Jy$sv6v2xeX6buMs9R*Vs(D0K0Ib^&!rI6mok?}K z3y|{iU~pgn65s@l$V<6xhK#mpqO{M0XCE)_3RBfP8 znp2j?&+kpsxM#0Hn<(9RS++TH+QftgM zNqnPR_CfcJy8V%$pi3=O`(IMvE$pqY8W-SyhQ+#mu;%|H8Q4So0CuySTdmbs`Tzg` M07*qoM6N<$f-8frcmMzZ diff --git a/public/images/pokemon/icons/7/774s-green-meteor.png b/public/images/pokemon/icons/7/774s-green-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..e506fe3a3ce30a47b8b5993ee9ea222150e29412 GIT binary patch literal 289 zcmV++0p9+JP)X0002!Nkl7V}_;m|{P6n8B{gWHOn| z&(imORke2P!j$(sp92X>^&E#y@X!hH)2on+c*T^1q)j(N3pFfnat5FPV&(CGFgMX00000NkvXXu0mjfnRR-| literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/7/774s-green.png b/public/images/pokemon/icons/7/774s-green.png index 51fd9b8516c55fffb1575c650e89df554880a76d..6b97dc055ac0d5af0673fa5dea0a86875de75f5d 100644 GIT binary patch delta 564 zcmV-40?Yk|1Iz@FBYyw^b5ch_0Itp)=>Px$>`6pHR9Hvt*0D=MK^zD0pF_|T@*tr} zEfQyi6s&Y=YZ59aAqWfy7ZIh&A(9ZmsiDa~K!lo%0tteQa11d*r6Dj7X=2A~RISh~!C8W;38=nr=zkfs*=*kcwOTF1_BCuH z;F`@Qbvp0l@vIq!Gz17-wfaC7%Ob02Fc_p-t!4;P8pz8Dkjv#FtJO-$WQqYZnG-6N zN|OTuS1w;uz5Yyv!a2hYuea?u-S7L9kx~f)n9rY4I(wPc~&Y*|^&gonoc^-*G$>CTbyWOt4+)_Y{lSboZ00JCe!$<%_p&jaWyWu1VGqM*5sRVh7`2W?uj%hdgO5yN9ze&W- zR{hJ9267}TF0000KJjNG77$;=TDsaUu| z2kyXx#0h$XUV@2BFq`~MzvyA5g(c4&Z0Sj<>!?3H``K<4La5F;ssb#)0xZBY0{+$N zx(>vtF_Qz=ckO5ZqrHAUM&#I-Y(PN3)K=T;QKTzS(@6l@?0=ULN${K%$d7+~?ZW;0 zRm62YX!Uk61VCkx_p$)NwQc)@=~2zYEG)OP2vbHGV>9Uj9K+o_UB*6;12oB`s@ny~ z^u|o}2rvK%aDrN-Eu2Y#s#btngUXt4wjUttlRlaokd^{@R_HrrkdSy4Q1L)X$l1wuz8;Us$}X0002!Nkl7V}_;m|{P6n8B{gWHOn| z&(imORke2P!j$(sp92X>^&E#y@X!hH)2on+c*T^1q)j(N3pFfnat5FPV&(CGFgMX00000NkvXXu0mjfnRR-| literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/7/774s-indigo.png b/public/images/pokemon/icons/7/774s-indigo.png index 8b99851a6287b3c5e6e07010b7bcc6b9b15ccc40..6b97dc055ac0d5af0673fa5dea0a86875de75f5d 100644 GIT binary patch delta 564 zcmV-40?Yk@1Iz@FBYyw^b5ch_0Itp)=>Px$>`6pHR9Hvt*0D=MK^zD0pF_|T@*tr} zEfQyi6s&Y=YZ59aAqWfy7ZIh&A(9ZmsiDa~K!lo%0tteQa11d*r6Dj7X=2A~RISh~!C8W;38=nr=zkfs*=*kcwOTF1_BCuH z;F`@Qbvp0l@vIq!Gz17-wfaC7%Ob02Fc_p-t!4;P8pz8Dkjv#FtJO-$WQqYZnG-6N zN|OTuS1w;uz5Yyv!a2hYuea?u-S7L9kx~f)n9rY4I(wPc~&Y*|^&gonoc^-*G$>CTbyWOt4+)_Y{lSboZ00JCe!$<%_p&jaWyWu1VGqM*5sRVh7`2W?uj%hdgO5yN9ze&W- zR{hJ9267}TF0000G1c3vPBYy!%Nkl zy+G-r*Ql<0iEeuf*CYSIFT8|A-QTVYx<>kTP zzyKt`2^x{-a@)ok6sT?ms5Pjp31{a8WRBqmWVC@CEA*R6%{fcL1xTsdK%q3JEI+Nj z>ZWmDgEmttp&!k)WVUEmZqoQeYpp@2kcIc+0R@*ALeGpCkhZh!Z>Gd&d(TYV`mB002ovPDHLk FV1m%et|I^d diff --git a/public/images/pokemon/icons/7/774s-orange-meteor.png b/public/images/pokemon/icons/7/774s-orange-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..e506fe3a3ce30a47b8b5993ee9ea222150e29412 GIT binary patch literal 289 zcmV++0p9+JP)X0002!Nkl7V}_;m|{P6n8B{gWHOn| z&(imORke2P!j$(sp92X>^&E#y@X!hH)2on+c*T^1q)j(N3pFfnat5FPV&(CGFgMX00000NkvXXu0mjfnRR-| literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/7/774s-orange.png b/public/images/pokemon/icons/7/774s-orange.png index 89deb40c5032388808b83363ec53c1b8879b18cb..6b97dc055ac0d5af0673fa5dea0a86875de75f5d 100644 GIT binary patch delta 564 zcmV-40?YmR0?Y)EBYyw^b5ch_0Itp)=>Px$>`6pHR9Hvt*0D=MK^zD0pF_|T@*tr} zEfQyi6s&Y=YZ59aAqWfy7ZIh&A(9ZmsiDa~K!lo%0tteQa11d*r6Dj7X=2A~RISh~!C8W;38=nr=zkfs*=*kcwOTF1_BCuH z;F`@Qbvp0l@vIq!Gz17-wfaC7%Ob02Fc_p-t!4;P8pz8Dkjv#FtJO-$WQqYZnG-6N zN|OTuS1w;uz5Yyv!a2hYuea?u-S7L9kx~f)n9rY4I(wPc~&Y*|^&gonoc^-*G$>CTbyWOt4+)_Y{lSboZ00JCe!$<%_p&jaWyWu1VGqM*5sRVh7`2W?uj%hdgO5yN9ze&W- zR{hJ9267}TF0000~HcnZ_Ngny-u{rOSV$Nm)E|wWY*fO&ygiy0w!Pr_6Yc^6-8kY z-^O$foXt&R0EYIyuN<;zOf(=sfU%v{Wg}7*$mv7?^gNCo5`Tf`s6aQJud97*OOLy4 zMn3S)EaH1nfWR4JJZ?A1?Rk+q7||FbGpPb>!tKq_^#Ms}m`PT*3J}wa9|i?0u zDv`2qItBV_t$KVug0jwPW2#8ibqqS(hQUzP)3H0oKk=V-A^CrQ8#;sYzGeL?Tq)T;mh002ovPDHLkV1f^2m#_c; diff --git a/public/images/pokemon/icons/7/774s-red-meteor.png b/public/images/pokemon/icons/7/774s-red-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..e506fe3a3ce30a47b8b5993ee9ea222150e29412 GIT binary patch literal 289 zcmV++0p9+JP)X0002!Nkl7V}_;m|{P6n8B{gWHOn| z&(imORke2P!j$(sp92X>^&E#y@X!hH)2on+c*T^1q)j(N3pFfnat5FPV&(CGFgMX00000NkvXXu0mjfnRR-| literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/7/774s-red.png b/public/images/pokemon/icons/7/774s-red.png index 1a6fd7cff01dfd142a7cd17439da6f591f970f97..6b97dc055ac0d5af0673fa5dea0a86875de75f5d 100644 GIT binary patch delta 564 zcmV-40?YmT0?Y)EBYyw^b5ch_0Itp)=>Px$>`6pHR9Hvt*0D=MK^zD0pF_|T@*tr} zEfQyi6s&Y=YZ59aAqWfy7ZIh&A(9ZmsiDa~K!lo%0tteQa11d*r6Dj7X=2A~RISh~!C8W;38=nr=zkfs*=*kcwOTF1_BCuH z;F`@Qbvp0l@vIq!Gz17-wfaC7%Ob02Fc_p-t!4;P8pz8Dkjv#FtJO-$WQqYZnG-6N zN|OTuS1w;uz5Yyv!a2hYuea?u-S7L9kx~f)n9rY4I(wPc~&Y*|^&gonoc^-*G$>CTbyWOt4+)_Y{lSboZ00JCe!$<%_p&jaWyWu1VGqM*5sRVh7`2W?uj%hdgO5yN9ze&W- zR{hJ9267}TF0000dGm delta 353 zcmV-n0iOQM1p5MzBYy!xNklb;z6vpu!B@-(<3k$4>Mq%l~T6IO70reCW zojR~0j)By%>KRx%GPwFj`l44Wv@ChfU`tO*Orres>}Q)Igis7QiVV!a49vg*0sm`d zSq9>-XL<)NAF9p(M*Dt0G{~-Jk^un$Q+r)KcOqSZ8cqVxWq-44kObFBfqeY>`4v9a z+ZK1OpW5JFS>(MWKyX!6wYdFg5{{Ea0~4BOY$jcRUAUKN-SmMJG|r@|+Xcw*@?j8Q z021H?wMbhyy#iIO05u1dHQ{W(fb`MafV3FMwL-rsi`+9MT!0K!3=~Rz%JOOU*cOfZ z9JHCz5DG5f+gf=3tCHQ987(C-P;fGs45&)BNQ=|_v)i8gR>x3kj@cryJBs^49Ul@D zRH=n({YwhGg}rsEaRJ`bEY|hFn*WnzU=Q&Fr&*M*te`Rb00000NkvXXu0mjfA@!ol diff --git a/public/images/pokemon/icons/7/774s-violet-meteor.png b/public/images/pokemon/icons/7/774s-violet-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..e506fe3a3ce30a47b8b5993ee9ea222150e29412 GIT binary patch literal 289 zcmV++0p9+JP)X0002!Nkl7V}_;m|{P6n8B{gWHOn| z&(imORke2P!j$(sp92X>^&E#y@X!hH)2on+c*T^1q)j(N3pFfnat5FPV&(CGFgMX00000NkvXXu0mjfnRR-| literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/7/774s-violet.png b/public/images/pokemon/icons/7/774s-violet.png index d8ed09076156a4d09b5d0e92afa55aaf1aee1e53..6b97dc055ac0d5af0673fa5dea0a86875de75f5d 100644 GIT binary patch delta 564 zcmV-40?YmX0?Y)EBYyw^b5ch_0Itp)=>Px$>`6pHR9Hvt*0D=MK^zD0pF_|T@*tr} zEfQyi6s&Y=YZ59aAqWfy7ZIh&A(9ZmsiDa~K!lo%0tteQa11d*r6Dj7X=2A~RISh~!C8W;38=nr=zkfs*=*kcwOTF1_BCuH z;F`@Qbvp0l@vIq!Gz17-wfaC7%Ob02Fc_p-t!4;P8pz8Dkjv#FtJO-$WQqYZnG-6N zN|OTuS1w;uz5Yyv!a2hYuea?u-S7L9kx~f)n9rY4I(wPc~&Y*|^&gonoc^-*G$>CTbyWOt4+)_Y{lSboZ00JCe!$<%_p&jaWyWu1VGqM*5sRVh7`2W?uj%hdgO5yN9ze&W- zR{hJ9267}TF00007doVQ3KF z#xxEbj-tu{3@uAv7FjjM84w`A*mjdkB~lg0=|li@+h!Jtz<+0_K)n3N)Mg zA^;>*B4yz;3S_kc$Ti5U&2t?4@k}84(A0ov62i}?8kCvh6kZZe;Iw=AsATnRhFeJ)NH{X+49H5BNQvY6lgFO=QHQDI8k0pLPZafy zx_n7sph_i_`=3)_9k%XPqXPV=Nv!IH)&D2)zy{(CKi9CHfkhNv00000NkvXXu0mjf D{?wqB diff --git a/public/images/pokemon/icons/7/774s-yellow-meteor.png b/public/images/pokemon/icons/7/774s-yellow-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..e506fe3a3ce30a47b8b5993ee9ea222150e29412 GIT binary patch literal 289 zcmV++0p9+JP)X0002!Nkl7V}_;m|{P6n8B{gWHOn| z&(imORke2P!j$(sp92X>^&E#y@X!hH)2on+c*T^1q)j(N3pFfnat5FPV&(CGFgMX00000NkvXXu0mjfnRR-| literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/7/774s-yellow.png b/public/images/pokemon/icons/7/774s-yellow.png index 2d4049c5d3ba5ccdbffd4e7c5654388b3cc03c94..6b97dc055ac0d5af0673fa5dea0a86875de75f5d 100644 GIT binary patch delta 564 zcmV-40?YmL0?Y)EBYyw^b5ch_0Itp)=>Px$>`6pHR9Hvt*0D=MK^zD0pF_|T@*tr} zEfQyi6s&Y=YZ59aAqWfy7ZIh&A(9ZmsiDa~K!lo%0tteQa11d*r6Dj7X=2A~RISh~!C8W;38=nr=zkfs*=*kcwOTF1_BCuH z;F`@Qbvp0l@vIq!Gz17-wfaC7%Ob02Fc_p-t!4;P8pz8Dkjv#FtJO-$WQqYZnG-6N zN|OTuS1w;uz5Yyv!a2hYuea?u-S7L9kx~f)n9rY4I(wPc~&Y*|^&gonoc^-*G$>CTbyWOt4+)_Y{lSboZ00JCe!$<%_p&jaWyWu1VGqM*5sRVh7`2W?uj%hdgO5yN9ze&W- zR{hJ9267}TF0000?g`ey z1K3#Y5j@Aj-oef)@>f26hS9Z|7mEZQ%)}Yy$4g!kLyR$ea)bgbzyd754+8$zs;Y{_ zt7lpV_6K!i0Hgi=_Abb#XR-kS0aN>4b{mndKn*7W=&%nLB!9tmRv;fg9e43()4Acc zU-#f%S>(MeKyY-oKC+~=Upl!j1n z0cWGfN_Jmnv{IC$K*7miHlQlmA}vny&u)9}TOC8GIcAH*?kMgHb$UopP^A{C^)D;% r8TQ$!#s&CJvsl*yYxz%7fGxxsPMvEMnL`J700000NkvXXu0mjfJUpH+ diff --git a/public/images/pokemon/icons/variant/5/597_2.png b/public/images/pokemon/icons/variant/5/597_2.png new file mode 100644 index 0000000000000000000000000000000000000000..2de9d56a74d689107163d5feb88dd78ac4d44282 GIT binary patch literal 510 zcmVX00001b5ch_0Itp) z=>Px$wn;=mR9HvtmOo1aF&M_*19ug=s&VL`po0#gsEET+6kNKL+KRZTUqBEi75oC~ zDppHf1*LRw@GlO!2<=eBSl5F336v)`=XrI?8_ErrrAHvSAHU~GdJctrI3eew2#}jl zWH2(wHNagTbuco>HNahOwSz*4F91m?t?g@VBM&ZyI9_&$Sq+QwMm}CLM-f3!+ItGNYcjBg-&IF)g z(iD;nsG|iOj8VDbMXYIC4yb$QxA&I6Cd3M3A5T(Q#lUm<;hfg0cSaVC3<40nTPi*) z2)8pv{lhaJlphSwoS2OO@lrrelwRn{?IrxquKxC~^j=rc`q04QVB3w+fnfpe#7F6D zH&404Wo0tEuR0000X00001b5ch_0Itp) z=>Px$vPnciR9HvtmcL8GKp2LUDP*7a`A4J#ERdI1} z)=?C6w9rLdMCerLP^^t$2SJhIkBrKD@ryA!-FK7>xh3J?t`E=q-lZ`L`G|#_k0L;6 zLXpA9pwxhLebm9opwxhLz0nR@mh}lB+qRAEYiuKiD;9Ee)od$qCP2l24A$5vP^NlH z3$rtHRLLs9(qU5!Y6KA0<{x`hF6F$+)f;WPPNkJiiAfP4?42x5(0JNX_6~|afJ_Q# znAC+719G&0gR#5&z85h=4jqtt=eO6btrB8|v6r5$tYYB(ru#v=4~~{aErS3=?~)z& zv}O}=n#+uMP<}AHOJddn#E$}U>3Eqg*3Svg{AS%dAh!cYLGz)3#r?OG)`1ZLZcW9h zwO6M1osNPV-JbS&p0IZMP0ivVCy z|F;+O7`kv+t8I{bIGIdP|7k$585|6)dxDJsa<5=>Wz0o9dv%`-uX{<00fWW>>4!4$ u??x2ypG?26ABnNxp2h+HgO<#N9`FnCJT0000X00001b5ch_0Itp) z=>Px%vq?ljR9Hvtls{-wQ542c7B^8LlS6zW9TLz%2T{?XloC2*=@MvDw3|+fAcB7= z{(<76Ak;;w^bcflagb1?h=SsvgF+ry#AgSmg1U;Je5d^$Czto~ZqjNqu@<*pHeuPfNqXlJ8iBA2_TH!2ZNU4ICZ5KXHZ`>!^}K-1G=FG`1HUrIez+_ zo>h2qRezx(ht5G=%ooS>mkL{Qn^Cu0v<0+*w;`u$m7$B0pS>@`d-5@;J%G?Uw*gvz z`%{*_ugUqL37w|(E*PH^0a*~5mGS|ZY<$+BbG*DguZq>CU&yQB{c>{Yi_FiR6&y}Q z?SZc!&q#IWxAmz~v1PxmibR#Wb4H}Tynb_Jr8+3VrAKklVQ=;5E~!mCP&imv2p6TY zcO+JokfkFdG4G*I4>NOTFPEwy)#Jxhk(KzgdQ+P3p2_8vHv&a9hvA|EyQ;!c4A_b_ zc!o1R%{mp3HWCow*DBm-2T&Q1s8m>p0a)}&s`}yg2?c_J_nyybR`FkRH(u@@5QhPP z%HY|;5!ym>j<9^T>e-@5D!`;d$*f{7N((a^FV(TVkNprT#tIt;d{oTrgK6b&=cy#D zOB#rR+fKGbK_58A0l)23=KFRnENT6gDCm0;UZ!0ObNAX7z;-RHCjhfrSZ1T{#IkO_ s^=V<;_rF_gduUb*!~1Om^i}>Z%9Fh=I~CbA00000NkvXXu0mjf0OrYL_W%F@ literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/598_3.png b/public/images/pokemon/icons/variant/5/598_3.png new file mode 100644 index 0000000000000000000000000000000000000000..3e2d73b23ef3327b484b8758038e279e45f7e059 GIT binary patch literal 753 zcmVX00001b5ch_0Itp) z=>Px%sYygZR9Hvtl)Y;dQ53~*K!Pin6e>0jE((62f~^wRV2~h*uuZhkLa+$I&MJR` zm5@SH2`RKNX%ddx7nTd`FrP{ zd%L8~qpQvNqyxCs40ROjD7aMxu)ka`|F-AEaU5)|;DxP%0&b?VZ`1aXg>MoH`A+}= z1pvame77N!s||%5JJ>B3PVALX$fg0^bm3B~2B843zqeOLcGne-YcSsoWH2DX+;jmD zFbrM})nugmE( zr*tV(?}G6=6OaV~uS}lZC1bCDs?ixYu3u5b`lhDk+NG*IdR~+6J2wTFQ&D^2+`^I! zH&%5Bp!U3$iUfeOSC2_;KGp-_m1=)k1|PpqjgIu*J@Q=|;|~-LDI7}XWTkQ|Rh5uO z4@W8Q$q&n3-`U6IDoFLXn6G9f_V=BakDn7sl0={=0)PN^RYgh>NGtZ>8<`1d*13R8 zBLQK4RH5}EAW^AEAp)@IlT`KIuj2{?1>dZ^Rj=Yde1~-{1L88InabeX!Vwy42+1+R zrVlgf*`mlQz^p>?Rxvl_nVF53>e$}Leh3w*u+2b-irzk$SN?XKN+NYx0hQf$vMmaR zz|ju)EmE2DMJ+6A|F$R?`Vc;*sD-&_?Fe8|3u_BNUkmd#>Sj{b%G!_?#&iFBifs?| jwJ^-@7+|RKe*ok;#xCM}V*~&I002ovPDHLkV1fVu0M1pz literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/774-blue-meteor_2.png b/public/images/pokemon/icons/variant/7/774-blue-meteor_2.png new file mode 100644 index 0000000000000000000000000000000000000000..665667749005ecf5c547e2f697044b0bd06c8de4 GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4$prX>xB_Vf z1qEGUo)QD?$jHpe{flqhdY`N=x-iu2d{@5TI&*KJ3a*kMzhH*{Fi_Vi5(X6Q^K@|x zvFLq!=^z)gAqUHaxrWKJ{{MgY>fIqHMYZWp{Byna_qotll`=fA`Zmo%}_snU$TJFBk${ O#^CAd=d#Wzp$P!=S8qlD literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/774-blue-meteor_3.png b/public/images/pokemon/icons/variant/7/774-blue-meteor_3.png new file mode 100644 index 0000000000000000000000000000000000000000..24c75f49ce0d403ee61577bc83ef5cbb71666ae5 GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4$prX>xB_Vf z1qD`3H8C+uZ6z;P$3pSM4#8>jq%R$h_ZZPS_7dh_|-g)L8XyE7Mj zJCK!Qpz?BFft~le*}hyFD~pz=tST@)v)Ccv`@X`g#OjT+{dYgD)5-6d#cY&e8*~fk OG6qjqKbLh*2~7Y|A8*M3 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/774-blue_2.png b/public/images/pokemon/icons/variant/7/774-blue_2.png new file mode 100644 index 0000000000000000000000000000000000000000..41ade4ded5e158e680c0aa87d713a89dc85b8348 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4aufr6LR^8g zf`UR&P>`&wth&0oxw*N=k(X=#gTQ^OlK(ZUS2%w73{=Ej666=m02T)mwPm$efx>;B zE{-7BmB^Bqy(VY$Hb@6ccVJ=>P*ZsS;nKgaS2FR@<%q#r5B)04Z*N!DG)C8~S@Ltc`*Ep|b=aSxP4^GQlSxfG- z_P;z*w7nrVM^j>5qg!Q3+{Q{*jlh!b3vZQ~l3Vx8KihBn(>}iXNnDt`dIxj8*_Dw0 QK$kIiy85}Sb4q9e0Bj+1mjD0& literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/774-blue_3.png b/public/images/pokemon/icons/variant/7/774-blue_3.png new file mode 100644 index 0000000000000000000000000000000000000000..db5d45512d15e824c8125e77b0acc7522084294d GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4aufr6LR^8g zf`Wo>crp+jJ9g~r*RO)p=1E^V{{R1f^G(Mx-v69%COZ$Ph`S`nFPH%+3I(-gwO4_{ zeV#6kAr`%FFYV@IQRHB~u=7*U|NqV69@}mt9Y~v`DJHyH_{*Z}U)L|^vM5>RE|lfA zmSuxWs1?U!)xgygA56^QoNjdY*&EN$vKwVPR5K@Pd}@1m=PZ{+v%&H$h5VWd)zM$S zgci*2TW@(bQ9N2`SN4KH8QJihI6xB_Vf z1qEGUo)QD?$jHpe{flqhdY`N=x-iu2d{@5TI&*KJ3a*kMzhH*{Fi_Vi5(X6Q^K@|x zvFLq!=^z)gAqUHaxrWKJ{{MgY>fIqHMYZWp{Byna_qotll`=fA`Zmo%}_snU$TJFBk${ O#^CAd=d#Wzp$P!=S8qlD literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/774-green-meteor_3.png b/public/images/pokemon/icons/variant/7/774-green-meteor_3.png new file mode 100644 index 0000000000000000000000000000000000000000..31bacd83c00f62ad4d3b508b0690eca7debfa8b9 GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4$prX>xB_Vf z1qDtmHZd_vZ6z;P$3nhrA(4F+-fs-5{)cYPJ^?b1t0c%TnBhMR)OCu40Y&>fT^vI! zdf#3;$i-~P!E#~l$r;D~|9|-E-61DMwdqd$bG`NWdmk14`Mj24cFvw_LJb@F*Qq?o zbGx<5x+(QZnAeMtWi{HIaR!GU%}+Q~w)=5vMUtv~a^~Tx$yPwwSCHp;LKx&?F@ NgQu&X%Q~loCIFsEZsq_0 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/774-green_2.png b/public/images/pokemon/icons/variant/7/774-green_2.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b94e4f5490fe746458e4f89726f094b41626c5 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4aufr6LR^8g zf`UR&P>`&wth&0oxw(1xrSyG2PyYY^ztMT~#jXFJ?}&N@RK#5pjwtZ3T;Tb4=r8}CZA*2xaV+bclGN++HAUiZ>EG8YnfT_up4hT0 zSewx&a4O%S3a@K9DitEL4@F1j6@Fb3TXutM$C4Lnf>(5SujlP+oY%5*NpH0Wr{%4z zCHGnTUmhvi-VmFkDY356t+FI;W2LJ`U`h9dx5`Y(t$XI5?YI4DA7A|>E=*p%gSp=9 TO2~hp%NRUe{an^LB{Ts5L2Gko literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/774-green_3.png b/public/images/pokemon/icons/variant/7/774-green_3.png new file mode 100644 index 0000000000000000000000000000000000000000..0bfd47ab01d0adddb8c23e3a1d67b611a36c0ff0 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4aufr6LR^8g zf`Wo>vKA_wb*ou7jK|8Exe*mfi7K-wftG2zw1Ulv{ex_&vAMaeREp)9wx zEE`-xtvDX52Ckm?U}6sEbfde^-gt(V-6-3knmJM9Q`^HkXSpnz4VG^y3 zv|xVUddstk;?Y98vKIu($cE>{33@%bYg6*OBQ_vxRL{r{c6F1K^~Rd%sc%;jAd S-*W(6#^CAd=d#Wzp$Pz&%yhB< literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/774-indigo-meteor_2.png b/public/images/pokemon/icons/variant/7/774-indigo-meteor_2.png new file mode 100644 index 0000000000000000000000000000000000000000..665667749005ecf5c547e2f697044b0bd06c8de4 GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4$prX>xB_Vf z1qEGUo)QD?$jHpe{flqhdY`N=x-iu2d{@5TI&*KJ3a*kMzhH*{Fi_Vi5(X6Q^K@|x zvFLq!=^z)gAqUHaxrWKJ{{MgY>fIqHMYZWp{Byna_qotll`=fA`Zmo%}_snU$TJFBk${ O#^CAd=d#Wzp$P!=S8qlD literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/774-indigo-meteor_3.png b/public/images/pokemon/icons/variant/7/774-indigo-meteor_3.png new file mode 100644 index 0000000000000000000000000000000000000000..0310d8f870bd418dc3103a833df74ddc7f8e1dee GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4$prX>xB_Vf z1qDt8Pcbn|Z6z;P$3iKC{brGGBBuUtn)Uy~O_Lm;3a*kMzhH*{Fi_Vi5(X6Q^K@|x zvFLq!=^z)gAqUHaxhH2F`~Uypt9OT-6xF6X@z3?vED(j}yCt+SMLYCENbH*7Qel$PfP}%N>!Ig(j&&=)-+NLwD_2%=v3tOJ(c4sd5 zb|5RqK;`AU0z2<_vwgWVRu(N!Syf`&wth&0oxw(1r#Ak=^{s#h)vPg}cX4iP+L}e6)4>2 z>Eak-(fjt2HQx~h9+nF{{|^1--?MG0?lz8Pol}x}UB0GB94`I)dLmdKI;Vst0N5*VG5`Po literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/774-indigo_3.png b/public/images/pokemon/icons/variant/7/774-indigo_3.png new file mode 100644 index 0000000000000000000000000000000000000000..e9f84feedce9a002e7dfe785c9bb0e85ec39f898 GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4$prX>xB_Vf z1qEH}jn)c-&rp4c(#^#3g!#=bxmTqQw%!3-c_FsSPk2?L7uc)B=- zSoFTVWX;E{$is3$_P^M>`iDKbOK&Kd`7RML6uLS&k>~o?_4%R&FAnvq*f_ayCd}OJ zE3okNrfUidgK}nW+jQsJE6v!lBWicTws=mdyqxh?kay4I71Q2Wc{!ymdKI;Vst06VR7K>z>% literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/774-orange-meteor_2.png b/public/images/pokemon/icons/variant/7/774-orange-meteor_2.png new file mode 100644 index 0000000000000000000000000000000000000000..665667749005ecf5c547e2f697044b0bd06c8de4 GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4$prX>xB_Vf z1qEGUo)QD?$jHpe{flqhdY`N=x-iu2d{@5TI&*KJ3a*kMzhH*{Fi_Vi5(X6Q^K@|x zvFLq!=^z)gAqUHaxrWKJ{{MgY>fIqHMYZWp{Byna_qotll`=fA`Zmo%}_snU$TJFBk${ O#^CAd=d#Wzp$P!=S8qlD literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/774-orange-meteor_3.png b/public/images/pokemon/icons/variant/7/774-orange-meteor_3.png new file mode 100644 index 0000000000000000000000000000000000000000..a1be7980ea8ff012d3608a36101e0cb43d051f50 GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4$prX>xB_Vf z1qEFpb}=zaZ6z;P$HG26ksDd!KUdoQpI62>yDu21f~zFRFPPy!4AgasgaJkSJY5_^ zEPCHwI>^Or$iZ@9?#UU){{MgY>fIqHMYZWp{Byna_nx-I)u% z9mvWtPE!p!Vm8XK4Y~z% O8H1;*pUXO@geCx5%x}^F literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/774-orange_2.png b/public/images/pokemon/icons/variant/7/774-orange_2.png new file mode 100644 index 0000000000000000000000000000000000000000..7351df92617e4ac23c601e3c78f0ad2e49872f09 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4aufr6LR^8g zf`UR&P>`&wth&0oxw-kXy6FG+kNyAuU$$m(^Vg?Yo~<=NMcgGpe!&btQ7EV_tGx;o z?(=kU46*2ad&!#bhyoAG1)hJ0{_^kHwp4c;$Fj~TNxd##QzQDof%vR=R2gmULfutIU+#x@Z2`e%qh+@zqb_!sOLEnCs21 Sg!~7(jKR~@&t;ucLK6U0K5{4k literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/774-orange_3.png b/public/images/pokemon/icons/variant/7/774-orange_3.png new file mode 100644 index 0000000000000000000000000000000000000000..15a9215207d0b8bfaa2c7c7e5ed3dc008f4208f9 GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4$prX>xB_Vf z1%+e--DAg&ef|3NMwa-`m3IIC|G$(b`v36M-o3pKfGW63g8YIRfT9pk*C`SP6z%bJ zaSXBOeS688k6Dq2<$~;gv3KQ}LGa^p;x zx!YG@;pt7+6cz^M%-pu=&b3#Xv1Lcp?u2deoKkr?*k$3Jnzr^?Y2esVfwEgF+F}e)4~(z OE(T9mKbLh*2~7Z6Vsyg* literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/774-red-meteor_2.png b/public/images/pokemon/icons/variant/7/774-red-meteor_2.png new file mode 100644 index 0000000000000000000000000000000000000000..665667749005ecf5c547e2f697044b0bd06c8de4 GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4$prX>xB_Vf z1qEGUo)QD?$jHpe{flqhdY`N=x-iu2d{@5TI&*KJ3a*kMzhH*{Fi_Vi5(X6Q^K@|x zvFLq!=^z)gAqUHaxrWKJ{{MgY>fIqHMYZWp{Byna_qotll`=fA`Zmo%}_snU$TJFBk${ O#^CAd=d#Wzp$P!=S8qlD literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/774-red-meteor_3.png b/public/images/pokemon/icons/variant/7/774-red-meteor_3.png new file mode 100644 index 0000000000000000000000000000000000000000..21288c0d8fd9d59d8745a987b2693da4d63716f5 GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4$prX>xB_Vf z1qEGp9x*XXZ6z;P$HG1lhfB(_|D%ilx6S_&r#1tqf~zFRFPPy!4AgasgaJkSJY5_^ zEPCHwI>^Or$iZ@9?#UU){{MgY>fIqHMYZWp{Byna_nx-I)u% z9mvWtPE!p!Vm8XK4Y~z% O8H1;*pUXO@geCyWd~j$0 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/774-red_2.png b/public/images/pokemon/icons/variant/7/774-red_2.png new file mode 100644 index 0000000000000000000000000000000000000000..4960190529c971d46d89610fa3009045bc408729 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4aufr6LR^8g zf`UR&P>`&wth&0oxw-k(=>Go~?*9M(f2Xeb*QNcM$Jd+yD&j5)@(X4Fib6qcS?yJz zaG$4(V~9oX+e_AbM-+HiF7W(2^p}6nwxzn;IF@xzN$Pd^nj&$y^zZAHOnh@+Pi)y0 ztj*{XIF;{Eh1azll?svBhoU3%3coIiExWr|u%!FKTVxB_Vf z1%+f?vt!4Oef|3Nl5*_-=;HtX|5x*y{O{RZtn}wBPz6^>kY6wZP!s~{Iz_^OqCK82 zjv*GkZ!cN%F)Q-0T#)@Q_OAY6kM7bNN@l)GL=1(lPEO>x{&ju6Xu*p^{VFz2Zk!1- zcl!z~JiY0f!or}OncFtqx%Nskw(N-7oveNO literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/774-violet-meteor_2.png b/public/images/pokemon/icons/variant/7/774-violet-meteor_2.png new file mode 100644 index 0000000000000000000000000000000000000000..665667749005ecf5c547e2f697044b0bd06c8de4 GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4$prX>xB_Vf z1qEGUo)QD?$jHpe{flqhdY`N=x-iu2d{@5TI&*KJ3a*kMzhH*{Fi_Vi5(X6Q^K@|x zvFLq!=^z)gAqUHaxrWKJ{{MgY>fIqHMYZWp{Byna_qotll`=fA`Zmo%}_snU$TJFBk${ O#^CAd=d#Wzp$P!=S8qlD literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/774-violet-meteor_3.png b/public/images/pokemon/icons/variant/7/774-violet-meteor_3.png new file mode 100644 index 0000000000000000000000000000000000000000..c88e9edebec35543766dfc2c13d4444a005bfefa GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4$prX>xB_Vf z1qDN%FflPpZ6z;P$HEfjg)KU_k3|1J*7JXHMXC!>1y@OsUogXe7^v$M2?L7udAc}; zSoFTVbdZbLkb~vI+>ZZPS_7dh_|-g)L8XyE7Mj zJCK!Qpz?BFft~le*}hyFD~pz=tST@)v)Ccv`@X`g#OjT+{dYgD)5-6d#cY&e8*~fk OG6qjqKbLh*2~7Z{;BkBa literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/774-violet_2.png b/public/images/pokemon/icons/variant/7/774-violet_2.png new file mode 100644 index 0000000000000000000000000000000000000000..3ccf9e19eb3f0bcf3ce839c62faf3fd9d8d1c017 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4aufr6LR^8g zf`UR&P>`&wth&0oxw-lBn)lBR|M~y_e?r3j8+voj?%01HsEE5H$S;@yC<+C&Wwlp< z!hN1Djv*GkZ!cN%9Z}$6xxn-9&|m&N+m`BX<5<=?C8^itYl_6-(!Z})GV#rQJ+Wn1 zur{Ml;8eat6<*hJR4PPfABv95EBv}7w(JJijwLVD1h44uUeDXtIIm^rlHO_$PRmz>@9@ZxB_Vf z1qCPFI^Fpt<_&lK%|_+x>tlxJrWjf*C-O$^$&Y=m)=k^^IalhD0FplBG2`&>+?kmUL5LIv2k+aOqjXb zS771kP1h6_2Ib7$w&~8bSDLY9N7U|wZSkB^c{$^)An%^ZE2h1%@^VUzPXDE6vHWo9 zeMgI<+nP$4c}_0=+;v#{kn4@!g~#1lQiAK|ojpA7&;0GSMfPF(uO2Zyemm2`6X-4m MPgg&ebxsLQ053swg8%>k literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/774-yellow-meteor_2.png b/public/images/pokemon/icons/variant/7/774-yellow-meteor_2.png new file mode 100644 index 0000000000000000000000000000000000000000..665667749005ecf5c547e2f697044b0bd06c8de4 GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4$prX>xB_Vf z1qEGUo)QD?$jHpe{flqhdY`N=x-iu2d{@5TI&*KJ3a*kMzhH*{Fi_Vi5(X6Q^K@|x zvFLq!=^z)gAqUHaxrWKJ{{MgY>fIqHMYZWp{Byna_qotll`=fA`Zmo%}_snU$TJFBk${ O#^CAd=d#Wzp$P!=S8qlD literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/774-yellow-meteor_3.png b/public/images/pokemon/icons/variant/7/774-yellow-meteor_3.png new file mode 100644 index 0000000000000000000000000000000000000000..20bd5baa6bc7599819ab9ea7bc85c9c4d60495ab GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4$prX>xB_Vf z1qCeyHZd_vZ6z;P$HK-Wu|xADKV38Ye<$wz*595$68$iGhI zNuJxSRn|?ZPr|%jge&@qT7q&dn?ao~A z?LbzJfy&Ey1$N%=X8Uq!tSnldvZ}!J%wmUt@B0d~600}P_TT-qPA9)-7PC=?ZO|>C P%NRUe{an^LB{Ts5#4K^I literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/774-yellow_2.png b/public/images/pokemon/icons/variant/7/774-yellow_2.png new file mode 100644 index 0000000000000000000000000000000000000000..610a30fa253ea3ac6aba9f9500fd074b8bf40d0e GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4aufr6LR^8g zf`UR&P>`&wth&0oxw-kJ11|snAN~LT|MbxJ2Nu3G``XkGRK#5pjwtZ3T;Tb4=r8}CZA*2xaV+bclGN++HAUiZ>EG8YnfT_up4hT0 zSewx&a4O%S3a@K9DitEL4@F1j6@Fb3TXutM$C4Lnf>(5SujlP+oY%5*NpH0Wr{%4z zCHGnTUmhvi-VmFkDY356t+FI;W2LJ`U`h9dx5`Y(t$XI5?YI4DA7A|>E=*p%gSp=9 TO2~hp%NRUe{an^LB{Ts5Q!jIJ literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/774-yellow_3.png b/public/images/pokemon/icons/variant/7/774-yellow_3.png new file mode 100644 index 0000000000000000000000000000000000000000..09e69b7193ff25306031ffd4bd11c3e22dc1e84e GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4$prX>xB_Vf z1%+f!-DAg&ef|3N&^*ac*9`yv|KCv{@b#ucmX+}#pbD;%AirP+peO{?b&7-mMSDD5 z978O6-(IrjV^-v0xgh&r>|OoC9^Iukl+1jWh!_f8ot(&X{p+qWQlry<=~*m4 zTzcQp;^?-f5@w#0i$8ZA);{EVqj%wPcb1gkx_M_0&-*ifyKRwunEtCrOpo8rwD1JF Oi^0>?&t;ucLK6U9GjnMG literal 0 HcmV?d00001 diff --git a/public/images/pokemon/shiny/774-blue-meteor.json b/public/images/pokemon/shiny/774-blue-meteor.json new file mode 100644 index 00000000000..dc95d3df59a --- /dev/null +++ b/public/images/pokemon/shiny/774-blue-meteor.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "774.png", + "format": "RGBA8888", + "size": { + "w": 37, + "h": 37 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 37, + "h": 37 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 37, + "h": 37 + }, + "frame": { + "x": 0, + "y": 0, + "w": 37, + "h": 37 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:566b51540ed595250ead15a4733d98d6:172aa05dcc207383119cd2f2f7977e0e:37281ac0aa1e619ef385b889b64064b7$" + } +} diff --git a/public/images/pokemon/shiny/774-blue-meteor.png b/public/images/pokemon/shiny/774-blue-meteor.png new file mode 100644 index 0000000000000000000000000000000000000000..c693211a1b781457c44b6a892718726eb932d40a GIT binary patch literal 483 zcmV<90UZ8`P)Px#Ay7y2y9NEF#_57iVdJz*Il4%Xr`8gD|+ED5VJ zH)X8~1g6=#P%UPOtIn@Gyb8QA)*4%0!r}O2Dn+3>6m9|gDp+8vx~YRM7LEmWO4ZeY zO;Zleb+PpVrgM}(l(F2Sbxu8bD)h9rWOI$#MU!lGHjK0SJR*%9m&#n^oydb!FUQX+ z=DkbleaxCA+Z{|)s$R`^q9=OacOpCUFd}h5bf~I)VP0_EuViaBLx@sT)z1*9U2V!W zUQSPjW`+IgqL3E19x*A^S}b~kZmRvxW<@dV!S-c+QeCRQNPT!P`ihO literal 0 HcmV?d00001 diff --git a/public/images/pokemon/shiny/774-blue.png b/public/images/pokemon/shiny/774-blue.png index 4526f830810305c47512e10c19158efbe4a781c3..b3987efb81fe97f7b092873d13ae9b8b85e13e1f 100644 GIT binary patch delta 387 zcmV-}0et?P1FHj&F@GmeOjJbx000mW5Gg4sIyyR8Sy}s|7L?vn``<$8M}$(T?U|XP zsj08?^Yh~`P$B>T01b3fPE!E?|NsC0|NsC0|Ns9j1VOC;009|EL_t(IjkVNSl7t`( z08mM=bt3ma?_?nXQcmm7q^cL-u|;s(Qb4Y_3uxt)qGtxJy?+=?)bn7k6c8f<_`Xr7 zL{vGxL4Z2q54V^;V2=r5y{<57MUz^P4i!iht!RUN-=$d*^_?o4 zQ8iRQK94yXDVAN-ecqi;B@9a#sfbBz!rGZDu;E+p+;^r-l(WLc?#Pk+)vr*@$SRe2 zCQY58HnO@Kb$mW3UDufvt;&~)i?Vf1tIzpzCRwt%C~}WUSy$>mo?=|C0Qnr+diX=Y zbWw;R_4POc(aH)Tq9ap?>D-7ChH)sQfcXr{Q{rogbChzUnk=F~5N<6cF)3Svg;$rX h?%xihM=tzt`~qYH6X-+L3%CFP002ovPDHLkV1oPDvm^ij delta 372 zcmV-)0gL{t1DpepF@GLVOjJbx000mW5DYFZ5Ij5;P*GBfi}UmIF|Xg0-ctMDLR9%p zaZb;p*HoRsJB>vpUA3tWc;Ag`56bdt zSz%X^rfkadT5Yn=^$Mm{^0hE)FG=~O7(Y>B*&YGJ8aDcgn;_{y0cPp_XgR{p2qF^5 zl}I`_s+7q*6xxt{2K6rW$57TFx=~e=AfBX;5+$Z>AMl87%If~@a9xob{~KS%ISlKa S%%~s$0000Px#Ay7y2y9NEF#_57iVdJz*Il4%Xr`8gD|+ED5VJ zH)X8~1g6=#P%UPOtIn@Gyb8QA)*4%0!r}O2Dn+3>6m9|gDp+8vx~YRM7LEmWO4ZeY zO;Zleb+PpVrgM}(l(F2Sbxu8bD)h9rWOI$#MU!lGHjK0SJR*%9m&#n^oydb!FUQX+ z=DkbleaxCA+Z{|)s$R`^q9=OacOpCUFd}h5bf~I)VP0_EuViaBLx@sT)z1*9U2V!W zUQSPjW`+IgqL3E19x*A^S}b~kZmRvxW<@dV!S-c+QeCRQNPT!P`ihO literal 0 HcmV?d00001 diff --git a/public/images/pokemon/shiny/774-green.json b/public/images/pokemon/shiny/774-green.json index d625483ab84..8ef1672fd02 100644 --- a/public/images/pokemon/shiny/774-green.json +++ b/public/images/pokemon/shiny/774-green.json @@ -1,7 +1,7 @@ { "textures": [ { - "image": "774-green.png", + "image": "774-blue.png", "format": "RGBA8888", "size": { "w": 37, @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:629ff6bb8e220a5fd9c7c6d05723591b:12276ca6d20dfb1e91ae04c798c20489:e4b1fffb78b8c0cdc557670bcee043ca$" + "smartupdate": "$TexturePacker:SmartUpdate:2414bcfae0bd84083e0b88e86461d897:b61b83191053ba4c1107ffa00ac21b90:0787168dbe37404ac3aa22b487979d47$" } } diff --git a/public/images/pokemon/shiny/774-green.png b/public/images/pokemon/shiny/774-green.png index 1797510a6e1c5dd82ed03d31646573c52f749df6..b3987efb81fe97f7b092873d13ae9b8b85e13e1f 100644 GIT binary patch delta 387 zcmV-}0et?P1FHj&F@GmeOjJbx000mW5Gg4sIyyR8Sy}s|7L?vn``<$8M}$(T?U|XP zsj08?^Yh~`P$B>T01b3fPE!E?|NsC0|NsC0|Ns9j1VOC;009|EL_t(IjkVNSl7t`( z08mM=bt3ma?_?nXQcmm7q^cL-u|;s(Qb4Y_3uxt)qGtxJy?+=?)bn7k6c8f<_`Xr7 zL{vGxL4Z2q54V^;V2=r5y{<57MUz^P4i!iht!RUN-=$d*^_?o4 zQ8iRQK94yXDVAN-ecqi;B@9a#sfbBz!rGZDu;E+p+;^r-l(WLc?#Pk+)vr*@$SRe2 zCQY58HnO@Kb$mW3UDufvt;&~)i?Vf1tIzpzCRwt%C~}WUSy$>mo?=|C0Qnr+diX=Y zbWw;R_4POc(aH)Tq9ap?>D-7ChH)sQfcXr{Q{rogbChzUnk=F~5N<6cF)3Svg;$rX h?%xihM=tzt`~qYH6X-+L3%CFP002ovPDHLkV1oPDvm^ij delta 372 zcmV-)0gL{t1DpepF@GLVOjJbx000mW5FaWMFg_teS1)&$Tl4etF|Xg0-ctMDLP-1A zzyJUM3UpFVQvm<}|NsC0|NsAfi4;}<009aZb;p*HoRsJB>vpUA3tWc;Ag`56bdt zSz%X^rfkadT5Yn=^$Mm{^0hE)FG=~O7(Y>B*&YGJ8aDcgn;_{y0cPp_XgR{p2qF^5 zl}I`_s+7q*6xxt{2K6rW$57TFx=~e=AfBX;5+$Z>AMl87%If~@a9xob{~KS%ISlKa S%%~s$0000Px#Ay7y2y9NEF#_57iVdJz*Il4%Xr`8gD|+ED5VJ zH)X8~1g6=#P%UPOtIn@Gyb8QA)*4%0!r}O2Dn+3>6m9|gDp+8vx~YRM7LEmWO4ZeY zO;Zleb+PpVrgM}(l(F2Sbxu8bD)h9rWOI$#MU!lGHjK0SJR*%9m&#n^oydb!FUQX+ z=DkbleaxCA+Z{|)s$R`^q9=OacOpCUFd}h5bf~I)VP0_EuViaBLx@sT)z1*9U2V!W zUQSPjW`+IgqL3E19x*A^S}b~kZmRvxW<@dV!S-c+QeCRQNPT!P`ihO literal 0 HcmV?d00001 diff --git a/public/images/pokemon/shiny/774-indigo.json b/public/images/pokemon/shiny/774-indigo.json index f9fd15b882a..8ef1672fd02 100644 --- a/public/images/pokemon/shiny/774-indigo.json +++ b/public/images/pokemon/shiny/774-indigo.json @@ -1,7 +1,7 @@ { "textures": [ { - "image": "774-indigo.png", + "image": "774-blue.png", "format": "RGBA8888", "size": { "w": 37, @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:3a92e92d47c0460929eddb792a3d1f69:b9f13490efe629e4c3fd679d9f33e485:f6d3104f6cc09a16e2cbfcba30e4d78a$" + "smartupdate": "$TexturePacker:SmartUpdate:2414bcfae0bd84083e0b88e86461d897:b61b83191053ba4c1107ffa00ac21b90:0787168dbe37404ac3aa22b487979d47$" } } diff --git a/public/images/pokemon/shiny/774-indigo.png b/public/images/pokemon/shiny/774-indigo.png index b1d01fb952f7bec7973dc92a707241466811d18a..b3987efb81fe97f7b092873d13ae9b8b85e13e1f 100644 GIT binary patch delta 387 zcmV-}0et?P1FHj&F@GmeOjJbx000mW5Gg4sIyyR8Sy}s|7L?vn``<$8M}$(T?U|XP zsj08?^Yh~`P$B>T01b3fPE!E?|NsC0|NsC0|Ns9j1VOC;009|EL_t(IjkVNSl7t`( z08mM=bt3ma?_?nXQcmm7q^cL-u|;s(Qb4Y_3uxt)qGtxJy?+=?)bn7k6c8f<_`Xr7 zL{vGxL4Z2q54V^;V2=r5y{<57MUz^P4i!iht!RUN-=$d*^_?o4 zQ8iRQK94yXDVAN-ecqi;B@9a#sfbBz!rGZDu;E+p+;^r-l(WLc?#Pk+)vr*@$SRe2 zCQY58HnO@Kb$mW3UDufvt;&~)i?Vf1tIzpzCRwt%C~}WUSy$>mo?=|C0Qnr+diX=Y zbWw;R_4POc(aH)Tq9ap?>D-7ChH)sQfcXr{Q{rogbChzUnk=F~5N<6cF)3Svg;$rX h?%xihM=tzt`~qYH6X-+L3%CFP002ovPDHLkV1oPDvm^ij delta 372 zcmV-)0gL{t1DpepF@GLVOjJbx000mW5DFbG4JJGhGEq=$mGkrSF|Xg0-ctMDLU<}0 zu>b%73UpFVQvm<}|NsC0|NsAfi4;}<009aZb;p*HoRsJB>vpUA3tWc;Ag`56bdt zSz%X^rfkadT5Yn=^$Mm{^0hE)FG=~O7(Y>B*&YGJ8aDcgn;_{y0cPp_XgR{p2qF^5 zl}I`_s+7q*6xxt{2K6rW$57TFx=~e=AfBX;5+$Z>AMl87%If~@a9xob{~KS%ISlKa S%%~s$0000Px#Ay7y2y9NEF#_57iVdJz*Il4%Xr`8gD|+ED5VJ zH)X8~1g6=#P%UPOtIn@Gyb8QA)*4%0!r}O2Dn+3>6m9|gDp+8vx~YRM7LEmWO4ZeY zO;Zleb+PpVrgM}(l(F2Sbxu8bD)h9rWOI$#MU!lGHjK0SJR*%9m&#n^oydb!FUQX+ z=DkbleaxCA+Z{|)s$R`^q9=OacOpCUFd}h5bf~I)VP0_EuViaBLx@sT)z1*9U2V!W zUQSPjW`+IgqL3E19x*A^S}b~kZmRvxW<@dV!S-c+QeCRQNPT!P`ihO literal 0 HcmV?d00001 diff --git a/public/images/pokemon/shiny/774-orange.json b/public/images/pokemon/shiny/774-orange.json index c83987abab9..8ef1672fd02 100644 --- a/public/images/pokemon/shiny/774-orange.json +++ b/public/images/pokemon/shiny/774-orange.json @@ -1,7 +1,7 @@ { "textures": [ { - "image": "774-orange.png", + "image": "774-blue.png", "format": "RGBA8888", "size": { "w": 37, @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:423c40c4f68985707f2cf6cdfc661eec:b255d7a13c363ee74ca11f183d77b5c5:44d5ed9bf64302a0edf6c65ea8033c12$" + "smartupdate": "$TexturePacker:SmartUpdate:2414bcfae0bd84083e0b88e86461d897:b61b83191053ba4c1107ffa00ac21b90:0787168dbe37404ac3aa22b487979d47$" } } diff --git a/public/images/pokemon/shiny/774-orange.png b/public/images/pokemon/shiny/774-orange.png index 32d659ecd561ba0f7cb89b4fdff3fa42e554fd3f..b3987efb81fe97f7b092873d13ae9b8b85e13e1f 100644 GIT binary patch delta 387 zcmV-}0et?P1FHj&F@GmeOjJbx000mW5Gg4sIyyR8Sy}s|7L?vn``<$8M}$(T?U|XP zsj08?^Yh~`P$B>T01b3fPE!E?|NsC0|NsC0|Ns9j1VOC;009|EL_t(IjkVNSl7t`( z08mM=bt3ma?_?nXQcmm7q^cL-u|;s(Qb4Y_3uxt)qGtxJy?+=?)bn7k6c8f<_`Xr7 zL{vGxL4Z2q54V^;V2=r5y{<57MUz^P4i!iht!RUN-=$d*^_?o4 zQ8iRQK94yXDVAN-ecqi;B@9a#sfbBz!rGZDu;E+p+;^r-l(WLc?#Pk+)vr*@$SRe2 zCQY58HnO@Kb$mW3UDufvt;&~)i?Vf1tIzpzCRwt%C~}WUSy$>mo?=|C0Qnr+diX=Y zbWw;R_4POc(aH)Tq9ap?>D-7ChH)sQfcXr{Q{rogbChzUnk=F~5N<6cF)3Svg;$rX h?%xihM=tzt`~qYH6X-+L3%CFP002ovPDHLkV1oPDvm^ij delta 372 zcmV-)0gL{t1DpepF@GLVOjJbx000mW5HTefOgbiJPBfr`UGwwvF|Xg0-ctMDLPS?A zT>t<83UpFVQvm<}|NsC0|NsAfi4;}<009aZb;p*HoRsJB>vpUA3tWc;Ag`56bdt zSz%X^rfkadT5Yn=^$Mm{^0hE)FG=~O7(Y>B*&YGJ8aDcgn;_{y0cPp_XgR{p2qF^5 zl}I`_s+7q*6xxt{2K6rW$57TFx=~e=AfBX;5+$Z>AMl87%If~@a9xob{~KS%ISlKa S%%~s$0000Px#Ay7y2y9NEF#_57iVdJz*Il4%Xr`8gD|+ED5VJ zH)X8~1g6=#P%UPOtIn@Gyb8QA)*4%0!r}O2Dn+3>6m9|gDp+8vx~YRM7LEmWO4ZeY zO;Zleb+PpVrgM}(l(F2Sbxu8bD)h9rWOI$#MU!lGHjK0SJR*%9m&#n^oydb!FUQX+ z=DkbleaxCA+Z{|)s$R`^q9=OacOpCUFd}h5bf~I)VP0_EuViaBLx@sT)z1*9U2V!W zUQSPjW`+IgqL3E19x*A^S}b~kZmRvxW<@dV!S-c+QeCRQNPT!P`ihO literal 0 HcmV?d00001 diff --git a/public/images/pokemon/shiny/774-red.json b/public/images/pokemon/shiny/774-red.json index de29373979d..8ef1672fd02 100644 --- a/public/images/pokemon/shiny/774-red.json +++ b/public/images/pokemon/shiny/774-red.json @@ -1,7 +1,7 @@ { "textures": [ { - "image": "774-red.png", + "image": "774-blue.png", "format": "RGBA8888", "size": { "w": 37, @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:80b8cd14f241bff63b73c4b206f4cfb1:e3a6e8678f3fe0a01e667860028423d1:cda0147f4d676691e1699693bc0ee567$" + "smartupdate": "$TexturePacker:SmartUpdate:2414bcfae0bd84083e0b88e86461d897:b61b83191053ba4c1107ffa00ac21b90:0787168dbe37404ac3aa22b487979d47$" } } diff --git a/public/images/pokemon/shiny/774-red.png b/public/images/pokemon/shiny/774-red.png index 074f04e36607d6ee651d80bcdb7bc5c988523bd6..b3987efb81fe97f7b092873d13ae9b8b85e13e1f 100644 GIT binary patch delta 387 zcmV-}0et?P1FHj&F@GmeOjJbx000mW5Gg4sIyyR8Sy}s|7L?vn``<$8M}$(T?U|XP zsj08?^Yh~`P$B>T01b3fPE!E?|NsC0|NsC0|Ns9j1VOC;009|EL_t(IjkVNSl7t`( z08mM=bt3ma?_?nXQcmm7q^cL-u|;s(Qb4Y_3uxt)qGtxJy?+=?)bn7k6c8f<_`Xr7 zL{vGxL4Z2q54V^;V2=r5y{<57MUz^P4i!iht!RUN-=$d*^_?o4 zQ8iRQK94yXDVAN-ecqi;B@9a#sfbBz!rGZDu;E+p+;^r-l(WLc?#Pk+)vr*@$SRe2 zCQY58HnO@Kb$mW3UDufvt;&~)i?Vf1tIzpzCRwt%C~}WUSy$>mo?=|C0Qnr+diX=Y zbWw;R_4POc(aH)Tq9ap?>D-7ChH)sQfcXr{Q{rogbChzUnk=F~5N<6cF)3Svg;$rX h?%xihM=tzt`~qYH6X-+L3%CFP002ovPDHLkV1oPDvm^ij delta 372 zcmV-)0gL{t1DpepF@GLVOjJbx000mW5H}hpN+C63EkwqDoAdMYF|Xg0-ctMDLLUR! zvH$=83UpFVQvm<}|NsC0|NsAfi4;}<009aZb;p*HoRsJB>vpUA3tWc;Ag`56bdt zSz%X^rfkadT5Yn=^$Mm{^0hE)FG=~O7(Y>B*&YGJ8aDcgn;_{y0cPp_XgR{p2qF^5 zl}I`_s+7q*6xxt{2K6rW$57TFx=~e=AfBX;5+$Z>AMl87%If~@a9xob{~KS%ISlKa S%%~s$0000Px#Ay7y2y9NEF#_57iVdJz*Il4%Xr`8gD|+ED5VJ zH)X8~1g6=#P%UPOtIn@Gyb8QA)*4%0!r}O2Dn+3>6m9|gDp+8vx~YRM7LEmWO4ZeY zO;Zleb+PpVrgM}(l(F2Sbxu8bD)h9rWOI$#MU!lGHjK0SJR*%9m&#n^oydb!FUQX+ z=DkbleaxCA+Z{|)s$R`^q9=OacOpCUFd}h5bf~I)VP0_EuViaBLx@sT)z1*9U2V!W zUQSPjW`+IgqL3E19x*A^S}b~kZmRvxW<@dV!S-c+QeCRQNPT!P`ihO literal 0 HcmV?d00001 diff --git a/public/images/pokemon/shiny/774-violet.json b/public/images/pokemon/shiny/774-violet.json index f89f01caab1..8ef1672fd02 100644 --- a/public/images/pokemon/shiny/774-violet.json +++ b/public/images/pokemon/shiny/774-violet.json @@ -1,7 +1,7 @@ { "textures": [ { - "image": "774-violet.png", + "image": "774-blue.png", "format": "RGBA8888", "size": { "w": 37, @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:74823ead0b4e5608ed8e6923bb5ab036:50510831b166aa0c1a50f453cfbafe2f:cafe7bbce21f2b95187ef35011084eca$" + "smartupdate": "$TexturePacker:SmartUpdate:2414bcfae0bd84083e0b88e86461d897:b61b83191053ba4c1107ffa00ac21b90:0787168dbe37404ac3aa22b487979d47$" } } diff --git a/public/images/pokemon/shiny/774-violet.png b/public/images/pokemon/shiny/774-violet.png index 5acae56a03e01f790b4faf11ef6961f7cdd37b2a..b3987efb81fe97f7b092873d13ae9b8b85e13e1f 100644 GIT binary patch delta 387 zcmV-}0et?P1FHj&F@GmeOjJbx000mW5Gg4sIyyR8Sy}s|7L?vn``<$8M}$(T?U|XP zsj08?^Yh~`P$B>T01b3fPE!E?|NsC0|NsC0|Ns9j1VOC;009|EL_t(IjkVNSl7t`( z08mM=bt3ma?_?nXQcmm7q^cL-u|;s(Qb4Y_3uxt)qGtxJy?+=?)bn7k6c8f<_`Xr7 zL{vGxL4Z2q54V^;V2=r5y{<57MUz^P4i!iht!RUN-=$d*^_?o4 zQ8iRQK94yXDVAN-ecqi;B@9a#sfbBz!rGZDu;E+p+;^r-l(WLc?#Pk+)vr*@$SRe2 zCQY58HnO@Kb$mW3UDufvt;&~)i?Vf1tIzpzCRwt%C~}WUSy$>mo?=|C0Qnr+diX=Y zbWw;R_4POc(aH)Tq9ap?>D-7ChH)sQfcXr{Q{rogbChzUnk=F~5N<6cF)3Svg;$rX h?%xihM=tzt`~qYH6X-+L3%CFP002ovPDHLkV1oPDvm^ij delta 372 zcmV-)0gL{t1DpepF@GLVOjJbx000mW5GNNTIUzMrFG-hajq~&KF|Xg0-ctMDLWkm) zx&QzG3UpFVQvm<}|NsC0|NsAfi4;}<009aZb;p*HoRsJB>vpUA3tWc;Ag`56bdt zSz%X^rfkadT5Yn=^$Mm{^0hE)FG=~O7(Y>B*&YGJ8aDcgn;_{y0cPp_XgR{p2qF^5 zl}I`_s+7q*6xxt{2K6rW$57TFx=~e=AfBX;5+$Z>AMl87%If~@a9xob{~KS%ISlKa S%%~s$0000Px#Ay7y2y9NEF#_57iVdJz*Il4%Xr`8gD|+ED5VJ zH)X8~1g6=#P%UPOtIn@Gyb8QA)*4%0!r}O2Dn+3>6m9|gDp+8vx~YRM7LEmWO4ZeY zO;Zleb+PpVrgM}(l(F2Sbxu8bD)h9rWOI$#MU!lGHjK0SJR*%9m&#n^oydb!FUQX+ z=DkbleaxCA+Z{|)s$R`^q9=OacOpCUFd}h5bf~I)VP0_EuViaBLx@sT)z1*9U2V!W zUQSPjW`+IgqL3E19x*A^S}b~kZmRvxW<@dV!S-c+QeCRQNPT!P`ihO literal 0 HcmV?d00001 diff --git a/public/images/pokemon/shiny/774-yellow.json b/public/images/pokemon/shiny/774-yellow.json index 362b580e146..8ef1672fd02 100644 --- a/public/images/pokemon/shiny/774-yellow.json +++ b/public/images/pokemon/shiny/774-yellow.json @@ -1,7 +1,7 @@ { "textures": [ { - "image": "774-yellow.png", + "image": "774-blue.png", "format": "RGBA8888", "size": { "w": 37, @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:19b96795d3881734c6dcb8a60c8213c1:8ffae71c8fd82950c45b3ec4e10790e3:a0f9f47b818f7e67dd381af2f205c265$" + "smartupdate": "$TexturePacker:SmartUpdate:2414bcfae0bd84083e0b88e86461d897:b61b83191053ba4c1107ffa00ac21b90:0787168dbe37404ac3aa22b487979d47$" } } diff --git a/public/images/pokemon/shiny/774-yellow.png b/public/images/pokemon/shiny/774-yellow.png index 0612a851314789e6eec2cda3afb24b6c67b41ad8..b3987efb81fe97f7b092873d13ae9b8b85e13e1f 100644 GIT binary patch delta 387 zcmV-}0et?P1FHj&F@GmeOjJbx000mW5Gg4sIyyR8Sy}s|7L?vn``<$8M}$(T?U|XP zsj08?^Yh~`P$B>T01b3fPE!E?|NsC0|NsC0|Ns9j1VOC;009|EL_t(IjkVNSl7t`( z08mM=bt3ma?_?nXQcmm7q^cL-u|;s(Qb4Y_3uxt)qGtxJy?+=?)bn7k6c8f<_`Xr7 zL{vGxL4Z2q54V^;V2=r5y{<57MUz^P4i!iht!RUN-=$d*^_?o4 zQ8iRQK94yXDVAN-ecqi;B@9a#sfbBz!rGZDu;E+p+;^r-l(WLc?#Pk+)vr*@$SRe2 zCQY58HnO@Kb$mW3UDufvt;&~)i?Vf1tIzpzCRwt%C~}WUSy$>mo?=|C0Qnr+diX=Y zbWw;R_4POc(aH)Tq9ap?>D-7ChH)sQfcXr{Q{rogbChzUnk=F~5N<6cF)3Svg;$rX h?%xihM=tzt`~qYH6X-+L3%CFP002ovPDHLkV1oPDvm^ij delta 372 zcmV-)0gL{t1DpepF@GLVOjJbx000mW5HBecMLr{7Rx!MaZb;p*HoRsJB>vpUA3tWc;Ag`56bdt zSz%X^rfkadT5Yn=^$Mm{^0hE)FG=~O7(Y>B*&YGJ8aDcgn;_{y0cPp_XgR{p2qF^5 zl}I`_s+7q*6xxt{2K6rW$57TFx=~e=AfBX;5+$Z>AMl87%If~@a9xob{~KS%ISlKa S%%~s$00005x1FHj&7=H)@0002;K+rJ&0004VQb$4nuFf3k0000dP)t-s0000G5D+OT zDLOhjSy@^8qZX9jQv2UR=|_Z8sqLAWqN%B`^YioLFHj-?000eiQchC<|NsC0|NsC0 z|NsC0Ed)WW0003QNkl(8XB7vQl)aNANq zuDAn%kPa0{6|HE4ecz>75%rxan^84XKR%B+8Yz}t)P3HaP9+RW7^#R!Y{J@^ zE3n~P@7#B$On;QK!o}{$k^I%KP|V0Gm3byjouM|ex*K&qC|%c?6|KsbiHovzO{>rO zawb`_xhQgvNm*CwKb~S-t^oNQ+Isjyz;scFBK7q+0@2C}A)+Hwi0Ryj5{7Xoq=5Mh z%2VQNh;x*3qna$DKoD*%B{3;mgN0X@tnS|qqem|MZx;LlWCIiEL)8no00000NkvXX Hu0mjfYWlfu delta 458 zcmV;*0X6=s1K0zQ7=Hu<0000tustvU001FSOjJex|Nm}oZu9f=2nYzWva(?(C$xBL zn>-+qOGq0ZA$czv0{VEP00001bW%=J06^y0W&i*IWl2OqRCr!(&oOV?Fc1Y`8iw~Y zP5waI?s91bO4p`)0Ya+wz>l{V=6M&S9YZKRwLjn5ZR>Y$X!VQ1?Q82ez{~6L&cg#3+qt{y2tEMePxyx&)Hv~W{o$(A zfZXGNr>}QasR0vG0)B7G548X>le0bi&emlzfP8Q<9y$)rm3IVB*gwP=8(=>uE%cBH z+o(ALysymSHh;L9Cp;xPs8MCEzw93l(`-R)`C}JjH=C%LdWiA9+;{9D=+#!qFp=(M z7GyK6&Vu0Lk+}oLWWDZCBUfjWWcRKHh$a$dJv?O-07?_a9(c~yK$K8I=NF?{0#e8` z2Pu{|lrV3tGbznn49?nY763`ct-bkJdbyN8!}_t(^b diff --git a/public/images/pokemon/variant/597.json b/public/images/pokemon/variant/597.json new file mode 100644 index 00000000000..481f8c154ee --- /dev/null +++ b/public/images/pokemon/variant/597.json @@ -0,0 +1,24 @@ +{ + "1": { + "b5bdbd": "ce6d9b", + "424242": "3f1827", + "8c8c8c": "9d4153", + "5a5a5a": "582f3e", + "b58c42": "4e96b2", + "00b55a": "00aa81", + "104221": "004333", + "efbd4a": "5ddaff", + "216b42": "006d5b" + }, + "2": { + "b5bdbd": "d3652c", + "424242": "59231a", + "8c8c8c": "b3532d", + "5a5a5a": "7d3223", + "b58c42": "5e9158", + "00b55a": "5d534a", + "104221": "2a1b18", + "efbd4a": "68c970", + "216b42": "3b342f" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/598.json b/public/images/pokemon/variant/598.json new file mode 100644 index 00000000000..cad6c012342 --- /dev/null +++ b/public/images/pokemon/variant/598.json @@ -0,0 +1,24 @@ +{ + "1": { + "b5bdbd": "ce6d9b", + "5a5a5a": "582f3e", + "84848c": "9d4153", + "efbd4a": "5ddaff", + "c58c29": "4e96b2", + "218c52": "006d5b", + "195231": "004333", + "313131": "3f1827", + "00b55a": "00aa81" + }, + "2": { + "b5bdbd": "605c5a", + "5a5a5a": "242121", + "84848c": "353535", + "efbd4a": "c5d7d0", + "c58c29": "9e9e9e", + "218c52": "bf5930", + "195231": "7d3223", + "313131": "191717", + "00b55a": "d66e39" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/774-blue-meteor.json b/public/images/pokemon/variant/774-blue-meteor.json new file mode 100644 index 00000000000..68727265c8f --- /dev/null +++ b/public/images/pokemon/variant/774-blue-meteor.json @@ -0,0 +1,24 @@ +{ + "1": { + "612727": "282836", + "6e6e6e": "632715", + "f3f3f3": "cf8a6f", + "792f1a": "595969", + "914b48": "938fa3", + "1b1f21": "2d130c", + "9b3c20": "74302b", + "b2b2b2": "a15536", + "b4786b": "d8daef" + }, + "2": { + "612727": "111134", + "6e6e6e": "176188", + "f3f3f3": "1bd2c7", + "792f1a": "191234", + "914b48": "2b224a", + "1b1f21": "062a27", + "9b3c20": "58ffdb", + "b2b2b2": "11969e", + "b4786b": "454171" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/774-blue.json b/public/images/pokemon/variant/774-blue.json new file mode 100644 index 00000000000..350e1bdd919 --- /dev/null +++ b/public/images/pokemon/variant/774-blue.json @@ -0,0 +1,24 @@ +{ + "1": { + "458da3": "1d1d1d", + "cfe8e5": "949494", + "7bd7ea": "373737", + "41add6": "272727", + "bfe3e0": "48c4e9", + "37a0c8": "ff7cab", + "3299cb": "df3a74", + "379ac4": "f9d2e2", + "f3f3f3": "adffff" + }, + "2": { + "458da3": "2d5763", + "cfe8e5": "f5f5f5", + "7bd7ea": "e8e8e8", + "41add6": "b5b5b5", + "bfe3e0": "11969e", + "37a0c8": "68eff9", + "3299cb": "1a9e9e", + "379ac4": "37b2c6", + "f3f3f3": "1bd2c7" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/774-green-meteor.json b/public/images/pokemon/variant/774-green-meteor.json new file mode 100644 index 00000000000..2bd11dc3ad0 --- /dev/null +++ b/public/images/pokemon/variant/774-green-meteor.json @@ -0,0 +1,24 @@ +{ + "1": { + "612727": "282836", + "6e6e6e": "632715", + "f3f3f3": "cf8a6f", + "792f1a": "595969", + "914b48": "938fa3", + "1b1f21": "2d130c", + "9b3c20": "74302b", + "b2b2b2": "a15536", + "b4786b": "d8daef" + }, + "2": { + "612727": "111134", + "6e6e6e": "0e6b12", + "f3f3f3": "4bec30", + "792f1a": "191234", + "914b48": "2b224a", + "1b1f21": "092a06", + "9b3c20": "7aff55", + "b2b2b2": "14be38", + "b4786b": "454171" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/774-green.json b/public/images/pokemon/variant/774-green.json new file mode 100644 index 00000000000..7f211e13ad6 --- /dev/null +++ b/public/images/pokemon/variant/774-green.json @@ -0,0 +1,24 @@ +{ + "1": { + "ceedc0": "949494", + "beeea8": "57d267", + "369234": "8143b3", + "379535": "a963cf", + "359139": "d1b5ff", + "f3f3f3": "bef9c9", + "37852c": "1d1d1d", + "94de52": "373737", + "64b035": "272727" + }, + "2": { + "ceedc0": "f5f5f5", + "beeea8": "14be38", + "369234": "33a130", + "379535": "75fc72", + "359139": "0e6b12", + "f3f3f3": "4bec30", + "37852c": "2d633e", + "94de52": "e8e8e8", + "64b035": "b5b5b5" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/774-indigo-meteor.json b/public/images/pokemon/variant/774-indigo-meteor.json new file mode 100644 index 00000000000..90bcb2fbea2 --- /dev/null +++ b/public/images/pokemon/variant/774-indigo-meteor.json @@ -0,0 +1,24 @@ +{ + "1": { + "612727": "282836", + "6e6e6e": "632715", + "f3f3f3": "cf8a6f", + "792f1a": "595969", + "914b48": "938fa3", + "1b1f21": "2d130c", + "9b3c20": "74302b", + "b2b2b2": "a15536", + "b4786b": "d8daef" + }, + "2": { + "612727": "111134", + "6e6e6e": "1a30bf", + "f3f3f3": "5895ff", + "792f1a": "191234", + "914b48": "2b224a", + "1b1f21": "081834", + "9b3c20": "829aff", + "b2b2b2": "3659ec", + "b4786b": "454171" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/774-indigo.json b/public/images/pokemon/variant/774-indigo.json new file mode 100644 index 00000000000..c0d6ba948bd --- /dev/null +++ b/public/images/pokemon/variant/774-indigo.json @@ -0,0 +1,24 @@ +{ + "1": { + "1e59a2": "28b966", + "31afdf": "373737", + "acd9e6": "949494", + "f3f3f3": "c3ddff", + "1e5fa6": "147659", + "1d5ca3": "70f2c3", + "29477e": "1d1d1d", + "336dc6": "272727", + "89d1e5": "6391e6" + }, + "2": { + "1e59a2": "176188", + "31afdf": "e8e8e8", + "acd9e6": "f5f5f5", + "f3f3f3": "5895ff", + "1e5fa6": "9acbff", + "1d5ca3": "4b8de6", + "29477e": "2d3b63", + "336dc6": "b5b5b5", + "89d1e5": "3659ec" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/774-orange-meteor.json b/public/images/pokemon/variant/774-orange-meteor.json new file mode 100644 index 00000000000..37e12925b33 --- /dev/null +++ b/public/images/pokemon/variant/774-orange-meteor.json @@ -0,0 +1,24 @@ +{ + "1": { + "612727": "282836", + "6e6e6e": "632715", + "f3f3f3": "cf8a6f", + "792f1a": "595969", + "914b48": "938fa3", + "1b1f21": "2d130c", + "9b3c20": "74302b", + "b2b2b2": "a15536", + "b4786b": "d8daef" + }, + "2": { + "612727": "111134", + "6e6e6e": "8e2e14", + "f3f3f3": "f9a93e", + "792f1a": "191234", + "914b48": "2b224a", + "1b1f21": "2d1207", + "9b3c20": "ff9e76", + "b2b2b2": "d86a17", + "b4786b": "454171" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/774-orange.json b/public/images/pokemon/variant/774-orange.json new file mode 100644 index 00000000000..1eb9c2b30ff --- /dev/null +++ b/public/images/pokemon/variant/774-orange.json @@ -0,0 +1,23 @@ +{ + "1": { + "fce5c2": "949494", + "f3f3f3": "ffdfc6", + "ad5027": "1d1d1d", + "d16116": "83f5e5", + "f7ac3e": "373737", + "d36716": "1dbbbb", + "d26615": "1d7ca3", + "fcd7a1": "e67e5b", + "ea681a": "272727" + }, + "2": { + "fce5c2": "f5f5f5", + "f3f3f3": "f9a93e", + "ad5027": "63302d", + "d16116": "984710", + "f7ac3e": "e8e8e8", + "d36716": "ffc395", + "fcd7a1": "d86a17", + "ea681a": "b5b5b5" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/774-red-meteor.json b/public/images/pokemon/variant/774-red-meteor.json new file mode 100644 index 00000000000..40afea69aca --- /dev/null +++ b/public/images/pokemon/variant/774-red-meteor.json @@ -0,0 +1,24 @@ +{ + "1": { + "612727": "282836", + "6e6e6e": "632715", + "f3f3f3": "cf8a6f", + "792f1a": "595969", + "914b48": "938fa3", + "1b1f21": "2d130c", + "9b3c20": "74302b", + "b2b2b2": "a15536", + "b4786b": "d8daef" + }, + "2": { + "612727": "111134", + "6e6e6e": "8e1440", + "f3f3f3": "ff5b73", + "792f1a": "191234", + "914b48": "2b224a", + "1b1f21": "2d070c", + "9b3c20": "ff869f", + "b2b2b2": "d2235d", + "b4786b": "454171" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/774-red.json b/public/images/pokemon/variant/774-red.json new file mode 100644 index 00000000000..5ffdf20ed26 --- /dev/null +++ b/public/images/pokemon/variant/774-red.json @@ -0,0 +1,25 @@ +{ + "1": { + "c51d57": "f5a58f", + "101010": "171717", + "f2b3c4": "949494", + "a33044": "1d1d1d", + "c01d56": "cb5729", + "ba1d54": "b92d37", + "f19cb3": "d55b8f", + "f3f3f3": "ffd0dd", + "f26191": "373737", + "d02b54": "272727" + }, + "2": { + "c51d57": "ff8cb3", + "f2b3c4": "f5f5f5", + "a33044": "632d36", + "c01d56": "ab1d4f", + "ba1d54": "7b0f34", + "f19cb3": "d2235d", + "f3f3f3": "ff5b73", + "f26191": "e8e8e8", + "d02b54": "b5b5b5" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/774-violet-meteor.json b/public/images/pokemon/variant/774-violet-meteor.json new file mode 100644 index 00000000000..6c528e251b0 --- /dev/null +++ b/public/images/pokemon/variant/774-violet-meteor.json @@ -0,0 +1,24 @@ +{ + "1": { + "612727": "282836", + "6e6e6e": "632715", + "f3f3f3": "cf8a6f", + "792f1a": "595969", + "914b48": "938fa3", + "1b1f21": "2d130c", + "9b3c20": "74302b", + "b2b2b2": "a15536", + "b4786b": "d8daef" + }, + "2": { + "612727": "111134", + "6e6e6e": "7423a1", + "f3f3f3": "c45bff", + "792f1a": "191234", + "914b48": "2b224a", + "1b1f21": "260b41", + "9b3c20": "c68cff", + "b2b2b2": "842cdb", + "b4786b": "454171" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/774-violet.json b/public/images/pokemon/variant/774-violet.json new file mode 100644 index 00000000000..2b3581fdf0e --- /dev/null +++ b/public/images/pokemon/variant/774-violet.json @@ -0,0 +1,24 @@ +{ + "1": { + "aa61f2": "373737", + "d5ccd9": "949494", + "6837aa": "6060df", + "d1bad9": "a77cef", + "f3f3f3": "e6c3fc", + "7b3ec6": "272727", + "6b39a8": "22083d", + "5b3483": "1d1d1d", + "6a38a7": "d82e9c" + }, + "2": { + "aa61f2": "e8e8e8", + "d5ccd9": "f5f5f5", + "6837aa": "6029ab", + "d1bad9": "842cdb", + "f3f3f3": "c45bff", + "7b3ec6": "b5b5b5", + "6b39a8": "8d4adf", + "5b3483": "422d63", + "6a38a7": "cda4ff" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/774-yellow-meteor.json b/public/images/pokemon/variant/774-yellow-meteor.json new file mode 100644 index 00000000000..61f9d242666 --- /dev/null +++ b/public/images/pokemon/variant/774-yellow-meteor.json @@ -0,0 +1,24 @@ +{ + "1": { + "612727": "282836", + "6e6e6e": "632715", + "f3f3f3": "cf8a6f", + "792f1a": "595969", + "914b48": "938fa3", + "1b1f21": "2d130c", + "9b3c20": "74302b", + "b2b2b2": "a15536", + "b4786b": "d8daef" + }, + "2": { + "612727": "111134", + "6e6e6e": "816216", + "f3f3f3": "f2d631", + "792f1a": "191234", + "914b48": "2b224a", + "1b1f21": "2a2006", + "9b3c20": "ffdc5e", + "b2b2b2": "c29e19", + "b4786b": "454171" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/774-yellow.json b/public/images/pokemon/variant/774-yellow.json new file mode 100644 index 00000000000..fb2b977c46c --- /dev/null +++ b/public/images/pokemon/variant/774-yellow.json @@ -0,0 +1,24 @@ +{ + "1": { + "fbdf42": "373737", + "916b1e": "1d1d1d", + "bc9c1b": "ca7fe8", + "fff798": "d2c044", + "e4ae0c": "272727", + "bfa71e": "9755ef", + "baa31d": "c0a1e9", + "fffac2": "949494", + "f3f3f3": "ffffc5" + }, + "2": { + "fbdf42": "e8e8e8", + "916b1e": "63492d", + "bc9c1b": "887010", + "fff798": "c29e19", + "e4ae0c": "b5b5b5", + "bfa71e": "f5d940", + "baa31d": "9e8b18", + "fffac2": "f5f5f5", + "f3f3f3": "f2d631" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/_exp_masterlist.json b/public/images/pokemon/variant/_exp_masterlist.json index 88c6f4a95c1..4bcbd3df1e8 100644 --- a/public/images/pokemon/variant/_exp_masterlist.json +++ b/public/images/pokemon/variant/_exp_masterlist.json @@ -158,6 +158,20 @@ "773-electric": [0, 1, 1], "773-flying": [0, 1, 1], "773-fire": [0, 1, 1], + "774-red-meteor": [0, 1, 1], + "774-orange-meteor": [0, 1, 1], + "774-yellow-meteor": [0, 1, 1], + "774-green-meteor": [0, 1, 1], + "774-blue-meteor": [0, 1, 1], + "774-indigo-meteor": [0, 1, 1], + "774-violet-meteor": [0, 1, 1], + "774-red": [0, 1, 1], + "774-orange": [0, 1, 1], + "774-yellow": [0, 1, 1], + "774-green": [0, 1, 1], + "774-blue": [0, 1, 1], + "774-indigo": [0, 1, 1], + "774-violet": [0, 1, 1], "776": [0, 1, 1], "777": [0, 1, 1], "778-busted": [0, 1, 1], @@ -493,6 +507,20 @@ "773-electric": [0, 1, 1], "773-flying": [0, 1, 1], "773-fire": [0, 1, 1], + "774-red-meteor": [0, 1, 1], + "774-orange-meteor": [0, 1, 1], + "774-yellow-meteor": [0, 1, 1], + "774-green-meteor": [0, 1, 1], + "774-blue-meteor": [0, 1, 1], + "774-indigo-meteor": [0, 1, 1], + "774-violet-meteor": [0, 1, 1], + "774-red": [0, 1, 1], + "774-orange": [0, 1, 1], + "774-yellow": [0, 1, 1], + "774-green": [0, 1, 1], + "774-blue": [0, 1, 1], + "774-indigo": [0, 1, 1], + "774-violet": [0, 1, 1], "776": [0, 2, 2], "777": [0, 1, 1], "778-busted": [0, 1, 1], diff --git a/public/images/pokemon/variant/_masterlist.json b/public/images/pokemon/variant/_masterlist.json index 719f3db3d86..ccb9228aa2c 100644 --- a/public/images/pokemon/variant/_masterlist.json +++ b/public/images/pokemon/variant/_masterlist.json @@ -533,6 +533,8 @@ "594": [0, 1, 2], "595": [0, 1, 1], "596": [0, 1, 1], + "597": [0, 1, 1], + "598": [0, 1, 1], "602": [0, 1, 1], "603": [0, 1, 1], "604": [0, 1, 1], @@ -709,6 +711,20 @@ "773-electric": [0, 1, 1], "773-flying": [0, 1, 1], "773-fire": [0, 1, 1], + "774-red-meteor": [0, 1, 1], + "774-orange-meteor": [0, 1, 1], + "774-yellow-meteor": [0, 1, 1], + "774-green-meteor": [0, 1, 1], + "774-blue-meteor": [0, 1, 1], + "774-indigo-meteor": [0, 1, 1], + "774-violet-meteor": [0, 1, 1], + "774-red": [0, 1, 1], + "774-orange": [0, 1, 1], + "774-yellow": [0, 1, 1], + "774-green": [0, 1, 1], + "774-blue": [0, 1, 1], + "774-indigo": [0, 1, 1], + "774-violet": [0, 1, 1], "776": [0, 1, 1], "777": [0, 1, 1], "778-busted": [0, 1, 1], @@ -1523,6 +1539,8 @@ "594": [0, 1, 2], "595": [0, 1, 1], "596": [0, 1, 1], + "597": [0, 1, 1], + "598": [0, 1, 1], "602": [0, 1, 1], "603": [0, 1, 1], "604": [0, 1, 1], @@ -1699,6 +1717,20 @@ "773-electric": [0, 1, 1], "773-flying": [0, 1, 1], "773-fire": [0, 1, 1], + "774-red-meteor": [0, 1, 1], + "774-orange-meteor": [0, 1, 1], + "774-yellow-meteor": [0, 1, 1], + "774-green-meteor": [0, 1, 1], + "774-blue-meteor": [0, 1, 1], + "774-indigo-meteor": [0, 1, 1], + "774-violet-meteor": [0, 1, 1], + "774-red": [0, 1, 1], + "774-orange": [0, 1, 1], + "774-yellow": [0, 1, 1], + "774-green": [0, 1, 1], + "774-blue": [0, 1, 1], + "774-indigo": [0, 1, 1], + "774-violet": [0, 1, 1], "776": [0, 1, 1], "777": [0, 1, 1], "778-busted": [0, 1, 1], diff --git a/public/images/pokemon/variant/back/597.json b/public/images/pokemon/variant/back/597.json new file mode 100644 index 00000000000..7e7e8befc2f --- /dev/null +++ b/public/images/pokemon/variant/back/597.json @@ -0,0 +1,20 @@ +{ + "1": { + "b5bdbd": "ce6d9b", + "5a5a5a": "582f3e", + "8c8c8c": "9d4153", + "424242": "3f1827", + "104221": "004333", + "00b55a": "00aa81", + "216b42": "006d5b" + }, + "2": { + "b5bdbd": "d3652c", + "5a5a5a": "7d3223", + "8c8c8c": "b3532d", + "424242": "59231a", + "104221": "2a1b18", + "00b55a": "5d534a", + "216b42": "3b342f" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/598.json b/public/images/pokemon/variant/back/598.json new file mode 100644 index 00000000000..00839c39392 --- /dev/null +++ b/public/images/pokemon/variant/back/598.json @@ -0,0 +1,24 @@ +{ + "1": { + "b5bdbd": "ce6d9b", + "5a5a5a": "582f3e", + "84848c": "9d4153", + "424242": "442530", + "212121": "291019", + "218c52": "006d5b", + "195231": "004333", + "313131": "3f1827", + "00b55a": "00aa81" + }, + "2": { + "b5bdbd": "605c5a", + "5a5a5a": "242121", + "84848c": "353535", + "424242": "1c1a1a", + "212121": "111010", + "218c52": "bf5930", + "195231": "7d3223", + "313131": "191717", + "00b55a": "d66e39" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/774-blue-meteor.json b/public/images/pokemon/variant/back/774-blue-meteor.json new file mode 100644 index 00000000000..0970df55158 --- /dev/null +++ b/public/images/pokemon/variant/back/774-blue-meteor.json @@ -0,0 +1,28 @@ +{ + "1": { + "733837": "595969", + "612727": "282836", + "6e6e6e": "632715", + "f3f3f3": "cf8a6f", + "381616": "0d0723", + "792f1a": "531414", + "b4786b": "d8daef", + "1b1f21": "2d130c", + "9b3c20": "74302b", + "b2b2b2": "a15536", + "914b48": "938fa3" + }, + "2": { + "733837": "1a1939", + "612727": "120f29", + "6e6e6e": "176788", + "f3f3f3": "1bd2c7", + "381616": "0d0723", + "792f1a": "1aa999", + "b4786b": "454171", + "1b1f21": "062a27", + "9b3c20": "58ffdb", + "b2b2b2": "11969e", + "914b48": "2b224a" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/774-blue.json b/public/images/pokemon/variant/back/774-blue.json new file mode 100644 index 00000000000..702097bc06c --- /dev/null +++ b/public/images/pokemon/variant/back/774-blue.json @@ -0,0 +1,28 @@ +{ + "1": { + "458da3": "1d1d1d", + "126a72": "df3a74", + "cfe8e5": "949494", + "7bd7ea": "494949", + "41add6": "292929", + "bfe3e0": "48c4e9", + "106870": "cf2c65", + "1e818a": "ff91b8", + "1a7981": "ff7cab", + "f3f3f3": "adffff", + "156e77": "f9d2e2" + }, + "2": { + "458da3": "2d5763", + "126a72": "1d9c9c", + "cfe8e5": "f5f5f5", + "7bd7ea": "d6d6d6", + "41add6": "b3b3b3", + "bfe3e0": "11969e", + "106870": "118686", + "1e818a": "9bf5fc", + "1a7981": "68eff9", + "f3f3f3": "1bd2c7", + "156e77": "3ebacf" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/774-green-meteor.json b/public/images/pokemon/variant/back/774-green-meteor.json new file mode 100644 index 00000000000..37fc7abdc8f --- /dev/null +++ b/public/images/pokemon/variant/back/774-green-meteor.json @@ -0,0 +1,28 @@ +{ + "1": { + "733837": "595969", + "612727": "282836", + "6e6e6e": "632715", + "f3f3f3": "cf8a6f", + "381616": "0d0723", + "792f1a": "531414", + "b4786b": "d8daef", + "1b1f21": "2d130c", + "9b3c20": "74302b", + "b2b2b2": "a15536", + "914b48": "938fa3" + }, + "2": { + "733837": "1a1939", + "612727": "120f29", + "6e6e6e": "0e6b12", + "f3f3f3": "7aff55", + "381616": "0d0723", + "792f1a": "0c7c2e", + "b4786b": "454171", + "1b1f21": "092a06", + "9b3c20": "14be38", + "b2b2b2": "4bec30", + "914b48": "2b224a" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/774-green.json b/public/images/pokemon/variant/back/774-green.json new file mode 100644 index 00000000000..fffb20f04bb --- /dev/null +++ b/public/images/pokemon/variant/back/774-green.json @@ -0,0 +1,28 @@ +{ + "1": { + "ceedc0": "949494", + "1a5c27": "6d24a9", + "beeea8": "57d267", + "175924": "8749b9", + "236a32": "d1b5ff", + "37852c": "1d1d1d", + "1d602b": "a963cf", + "f3f3f3": "bef9c9", + "297339": "dcc7ff", + "94de52": "494949", + "64b035": "292929" + }, + "2": { + "ceedc0": "f5f5f5", + "1a5c27": "0e6b12", + "beeea8": "14be38", + "175924": "1a8c1f", + "236a32": "75fc72", + "37852c": "2d633e", + "1d602b": "48bc45", + "f3f3f3": "4bec30", + "297339": "a1ff9f", + "94de52": "d6d6d6", + "64b035": "b3b3b3" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/774-indigo-meteor.json b/public/images/pokemon/variant/back/774-indigo-meteor.json new file mode 100644 index 00000000000..2d6ad120c37 --- /dev/null +++ b/public/images/pokemon/variant/back/774-indigo-meteor.json @@ -0,0 +1,28 @@ +{ + "1": { + "733837": "595969", + "612727": "282836", + "6e6e6e": "632715", + "f3f3f3": "cf8a6f", + "381616": "0d0723", + "792f1a": "531414", + "b4786b": "d8daef", + "1b1f21": "2d130c", + "9b3c20": "74302b", + "b2b2b2": "a15536", + "914b48": "938fa3" + }, + "2": { + "733837": "1a1939", + "612727": "120f29", + "6e6e6e": "1a30bf", + "f3f3f3": "5895ff", + "381616": "0d0723", + "792f1a": "556aef", + "b4786b": "454171", + "1b1f21": "081834", + "9b3c20": "829aff", + "b2b2b2": "3659ec", + "914b48": "2b224a" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/774-indigo.json b/public/images/pokemon/variant/back/774-indigo.json new file mode 100644 index 00000000000..cbc162166a5 --- /dev/null +++ b/public/images/pokemon/variant/back/774-indigo.json @@ -0,0 +1,28 @@ +{ + "1": { + "31afdf": "494949", + "acd9e6": "949494", + "1c2a6b": "188363", + "223173": "70f2c3", + "29397c": "28b966", + "29477e": "1d1d1d", + "2f3f84": "33dc7b", + "f3f3f3": "c3ddff", + "1f2e6f": "0e6c50", + "336dc6": "292929", + "89d1e5": "6391e6" + }, + "2": { + "31afdf": "d6d6d6", + "acd9e6": "f5f5f5", + "1c2a6b": "15658f", + "223173": "5395ef", + "29397c": "9acbff", + "29477e": "2d3b63", + "2f3f84": "b1d7ff", + "f3f3f3": "5895ff", + "1f2e6f": "267eac", + "336dc6": "b3b3b3", + "89d1e5": "3659ec" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/774-orange-meteor.json b/public/images/pokemon/variant/back/774-orange-meteor.json new file mode 100644 index 00000000000..3a74baebfa7 --- /dev/null +++ b/public/images/pokemon/variant/back/774-orange-meteor.json @@ -0,0 +1,28 @@ +{ + "1": { + "733837": "595969", + "612727": "282836", + "6e6e6e": "632715", + "f3f3f3": "cf8a6f", + "381616": "0d0723", + "792f1a": "531414", + "b4786b": "d8daef", + "1b1f21": "2d130c", + "9b3c20": "74302b", + "b2b2b2": "a15536", + "914b48": "938fa3" + }, + "2": { + "733837": "1a1939", + "612727": "120f29", + "6e6e6e": "8e2e14", + "f3f3f3": "f9a93e", + "381616": "0d0723", + "792f1a": "d26545", + "b4786b": "454171", + "1b1f21": "2d1207", + "9b3c20": "ff9e76", + "b2b2b2": "d86a17", + "914b48": "2b224a" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/774-orange.json b/public/images/pokemon/variant/back/774-orange.json new file mode 100644 index 00000000000..71196847f6c --- /dev/null +++ b/public/images/pokemon/variant/back/774-orange.json @@ -0,0 +1,28 @@ +{ + "1": { + "91310c": "1dbbbb", + "8e2e0b": "156c8f", + "fce5c2": "949494", + "ad5027": "1d1d1d", + "8b2b0a": "1d7ca3", + "f7ac3e": "494949", + "9a3a11": "83f5e5", + "a23f13": "9ffff2", + "f3f3f3": "ffdfc6", + "fcd7a1": "e67e5b", + "ea681a": "292929" + }, + "2": { + "91310c": "e27929", + "8e2e0b": "a65016", + "fce5c2": "f5f5f5", + "ad5027": "63302d", + "8b2b0a": "984710", + "f7ac3e": "d6d6d6", + "9a3a11": "fcba88", + "a23f13": "ffcda7", + "f3f3f3": "f9a93e", + "fcd7a1": "d86a17", + "ea681a": "b3b3b3" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/774-red-meteor.json b/public/images/pokemon/variant/back/774-red-meteor.json new file mode 100644 index 00000000000..f7d774813e3 --- /dev/null +++ b/public/images/pokemon/variant/back/774-red-meteor.json @@ -0,0 +1,28 @@ +{ + "1": { + "733837": "595969", + "612727": "282836", + "6e6e6e": "632715", + "f3f3f3": "cf8a6f", + "381616": "0d0723", + "792f1a": "531414", + "b4786b": "d8daef", + "1b1f21": "2d130c", + "9b3c20": "74302b", + "b2b2b2": "a15536", + "914b48": "938fa3" + }, + "2": { + "733837": "1a1939", + "612727": "120f29", + "6e6e6e": "8e1440", + "f3f3f3": "ff5b73", + "381616": "0d0723", + "792f1a": "cc376b", + "b4786b": "454171", + "1b1f21": "2d070c", + "9b3c20": "ff869f", + "b2b2b2": "d2235d", + "914b48": "2b224a" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/774-red.json b/public/images/pokemon/variant/back/774-red.json new file mode 100644 index 00000000000..621d3bf02d0 --- /dev/null +++ b/public/images/pokemon/variant/back/774-red.json @@ -0,0 +1,28 @@ +{ + "1": { + "912042": "ffbeac", + "872152": "cb5729", + "f3f3f3": "ffd0dd", + "851f4d": "d25e31", + "f2b3c4": "949494", + "832749": "ec8c71", + "891f3f": "b61a25", + "a33044": "1d1d1d", + "f19cb3": "d55b8f", + "f26191": "494949", + "d02b54": "292929" + }, + "2": { + "912042": "ff8eb4", + "872152": "9f1c49", + "f3f3f3": "ff5b73", + "851f4d": "9f1c49", + "f2b3c4": "f5f5f5", + "832749": "ffb1cb", + "891f3f": "e94a82", + "a33044": "632d36", + "f19cb3": "d2235d", + "f26191": "d6d6d6", + "d02b54": "b3b3b3" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/774-violet-meteor.json b/public/images/pokemon/variant/back/774-violet-meteor.json new file mode 100644 index 00000000000..9b85bf60848 --- /dev/null +++ b/public/images/pokemon/variant/back/774-violet-meteor.json @@ -0,0 +1,28 @@ +{ + "1": { + "733837": "595969", + "612727": "282836", + "6e6e6e": "632715", + "f3f3f3": "cf8a6f", + "381616": "0d0723", + "792f1a": "531414", + "b4786b": "d8daef", + "1b1f21": "2d130c", + "9b3c20": "74302b", + "b2b2b2": "a15536", + "914b48": "938fa3" + }, + "2": { + "733837": "1a1939", + "612727": "120f29", + "6e6e6e": "4d1d9c", + "f3f3f3": "c45bff", + "381616": "0d0723", + "792f1a": "a95cf5", + "b4786b": "454171", + "1b1f21": "260b41", + "9b3c20": "c68cff", + "b2b2b2": "842cdb", + "914b48": "2b224a" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/774-violet.json b/public/images/pokemon/variant/back/774-violet.json new file mode 100644 index 00000000000..0df83c881a2 --- /dev/null +++ b/public/images/pokemon/variant/back/774-violet.json @@ -0,0 +1,28 @@ +{ + "1": { + "aa61f2": "494949", + "45196f": "6041d2", + "d5ccd9": "949494", + "562580": "e948b0", + "5e2a89": "d82e9c", + "d1bad9": "a77cef", + "4d1f78": "22083d", + "7b3ec6": "292929", + "491c73": "6060f9", + "f3f3f3": "e6c3fc", + "5b3483": "1d1d1d" + }, + "2": { + "aa61f2": "d6d6d6", + "45196f": "55219c", + "d5ccd9": "f5f5f5", + "562580": "ddc2ff", + "5e2a89": "e4d0fc", + "d1bad9": "842cdb", + "4d1f78": "9d5dec", + "7b3ec6": "b3b3b3", + "491c73": "6e34bc", + "f3f3f3": "c45bff", + "5b3483": "422d63" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/774-yellow-meteor.json b/public/images/pokemon/variant/back/774-yellow-meteor.json new file mode 100644 index 00000000000..1c05fa08e78 --- /dev/null +++ b/public/images/pokemon/variant/back/774-yellow-meteor.json @@ -0,0 +1,28 @@ +{ + "1": { + "733837": "595969", + "612727": "282836", + "6e6e6e": "632715", + "f3f3f3": "cf8a6f", + "381616": "0d0723", + "792f1a": "531414", + "b4786b": "d8daef", + "1b1f21": "2d130c", + "9b3c20": "74302b", + "b2b2b2": "a15536", + "914b48": "938fa3" + }, + "2": { + "733837": "1a1939", + "612727": "120f29", + "6e6e6e": "816216", + "f3f3f3": "f2d631", + "381616": "0d0723", + "792f1a": "cc971f", + "b4786b": "454171", + "1b1f21": "2a2006", + "9b3c20": "ffdc5e", + "b2b2b2": "c29e19", + "914b48": "2b224a" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/774-yellow.json b/public/images/pokemon/variant/back/774-yellow.json new file mode 100644 index 00000000000..5b9e0be4f5e --- /dev/null +++ b/public/images/pokemon/variant/back/774-yellow.json @@ -0,0 +1,28 @@ +{ + "1": { + "8c6027": "c66ee9", + "fbdf42": "494949", + "f3f3f3": "ffffc5", + "7c4f1b": "8339e6", + "916b1e": "1d1d1d", + "95692c": "c271e2", + "fff798": "d2c044", + "e4ae0c": "292929", + "845720": "d4baf5", + "fffac2": "949494", + "80531d": "9755ef" + }, + "2": { + "8c6027": "f5d839", + "fbdf42": "d6d6d6", + "f3f3f3": "f2d631", + "7c4f1b": "836c10", + "916b1e": "63492d", + "95692c": "ffe867", + "fff798": "c29e19", + "e4ae0c": "b3b3b3", + "845720": "bca622", + "fffac2": "f5f5f5", + "80531d": "887010" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/774-blue-meteor.json b/public/images/pokemon/variant/exp/774-blue-meteor.json new file mode 100644 index 00000000000..f3e86ee641f --- /dev/null +++ b/public/images/pokemon/variant/exp/774-blue-meteor.json @@ -0,0 +1,24 @@ +{ + "1": { + "612727": "282836", + "6e6e6e": "632715", + "f3f3f3": "cf8a6f", + "792f1a": "595969", + "914b48": "938fa3", + "1b1f21": "2d130c", + "9b3c20": "74302b", + "b2b2b2": "a15536", + "b4786b": "d8daef" + }, + "2": { + "612727": "191234", + "6e6e6e": "176188", + "f3f3f3": "1bd2c7", + "792f1a": "111134", + "914b48": "2b224a", + "1b1f21": "062a27", + "9b3c20": "58ffdb", + "b2b2b2": "11969e", + "b4786b": "454171" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/774-blue.json b/public/images/pokemon/variant/exp/774-blue.json new file mode 100644 index 00000000000..8a9e5c570b0 --- /dev/null +++ b/public/images/pokemon/variant/exp/774-blue.json @@ -0,0 +1,24 @@ +{ + "1": { + "cdefec": "949494", + "379ec6": "ff7cab", + "41add6": "272727", + "3299cb": "f9d2e2", + "37a0c8": "df3a74", + "f3f3f3": "adffff", + "bfe3e0": "48c4e9", + "458da3": "1d1d1d", + "7bd7ea": "373737" + }, + "2": { + "cdefec": "f5f5f5", + "379ec6": "37b2c6", + "41add6": "b5b5b5", + "3299cb": "11969e", + "37a0c8": "68eff9", + "f3f3f3": "1bd2c7", + "bfe3e0": "0d9999", + "458da3": "2d5763", + "7bd7ea": "e8e8e8" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/774-green-meteor.json b/public/images/pokemon/variant/exp/774-green-meteor.json new file mode 100644 index 00000000000..fe6c03acf96 --- /dev/null +++ b/public/images/pokemon/variant/exp/774-green-meteor.json @@ -0,0 +1,24 @@ +{ + "1": { + "612727": "282836", + "6e6e6e": "632715", + "f3f3f3": "cf8a6f", + "792f1a": "595969", + "914b48": "938fa3", + "1b1f21": "2d130c", + "9b3c20": "74302b", + "b2b2b2": "a15536", + "b4786b": "d8daef" + }, + "2": { + "612727": "191234", + "6e6e6e": "0e6b12", + "f3f3f3": "7aff55", + "792f1a": "111134", + "914b48": "2b224a", + "1b1f21": "092a06", + "9b3c20": "14be38", + "b2b2b2": "4bec30", + "b4786b": "454171" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/774-green.json b/public/images/pokemon/variant/exp/774-green.json new file mode 100644 index 00000000000..c72dc65f64d --- /dev/null +++ b/public/images/pokemon/variant/exp/774-green.json @@ -0,0 +1,24 @@ +{ + "1": { + "d6fcc4": "949494", + "beeea8": "57d267", + "f3f3f3": "bef9c9", + "379535": "8143b3", + "359139": "d1b5ff", + "94de52": "373737", + "37852c": "1d1d1d", + "369234": "a963cf", + "64b035": "272727" + }, + "2": { + "d6fcc4": "f5f5f5", + "beeea8": "0ea62e", + "f3f3f3": "4bec30", + "379535": "75fc72", + "359139": "0e6b12", + "94de52": "e8e8e8", + "37852c": "2d633e", + "369234": "33a130", + "64b035": "b5b5b5" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/774-indigo-meteor.json b/public/images/pokemon/variant/exp/774-indigo-meteor.json new file mode 100644 index 00000000000..eb065fca2de --- /dev/null +++ b/public/images/pokemon/variant/exp/774-indigo-meteor.json @@ -0,0 +1,24 @@ +{ + "1": { + "612727": "282836", + "6e6e6e": "632715", + "f3f3f3": "cf8a6f", + "792f1a": "595969", + "914b48": "938fa3", + "1b1f21": "2d130c", + "9b3c20": "74302b", + "b2b2b2": "a15536", + "b4786b": "d8daef" + }, + "2": { + "612727": "191234", + "6e6e6e": "1a30bf", + "f3f3f3": "5895ff", + "792f1a": "111134", + "914b48": "2b224a", + "1b1f21": "081834", + "9b3c20": "829aff", + "b2b2b2": "3659ec", + "b4786b": "454171" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/774-indigo.json b/public/images/pokemon/variant/exp/774-indigo.json new file mode 100644 index 00000000000..bc32b6a68d8 --- /dev/null +++ b/public/images/pokemon/variant/exp/774-indigo.json @@ -0,0 +1,24 @@ +{ + "1": { + "1e59a2": "70f2c3", + "31afdf": "373737", + "1d5ca3": "28b966", + "f3f3f3": "c3ddff", + "1e5fa6": "147659", + "98dcef": "949494", + "29477e": "1d1d1d", + "336dc6": "272727", + "89d1e5": "6391e6" + }, + "2": { + "1e59a2": "176188", + "31afdf": "e8e8e8", + "1d5ca3": "3659ec", + "f3f3f3": "5895ff", + "1e5fa6": "88bef9", + "98dcef": "f5f5f5", + "29477e": "2d3b63", + "336dc6": "b5b5b5", + "89d1e5": "2a64b2" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/774-orange-meteor.json b/public/images/pokemon/variant/exp/774-orange-meteor.json new file mode 100644 index 00000000000..4ba7774031c --- /dev/null +++ b/public/images/pokemon/variant/exp/774-orange-meteor.json @@ -0,0 +1,24 @@ +{ + "1": { + "612727": "282836", + "6e6e6e": "632715", + "f3f3f3": "cf8a6f", + "792f1a": "595969", + "914b48": "938fa3", + "1b1f21": "2d130c", + "9b3c20": "74302b", + "b2b2b2": "a15536", + "b4786b": "d8daef" + }, + "2": { + "612727": "191234", + "6e6e6e": "8e2e14", + "f3f3f3": "f9a93e", + "792f1a": "111134", + "914b48": "2b224a", + "1b1f21": "2d1207", + "9b3c20": "ff9e76", + "b2b2b2": "d86a17", + "b4786b": "454171" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/774-orange.json b/public/images/pokemon/variant/exp/774-orange.json new file mode 100644 index 00000000000..e727d40504b --- /dev/null +++ b/public/images/pokemon/variant/exp/774-orange.json @@ -0,0 +1,24 @@ +{ + "1": { + "ffe3ba": "949494", + "d26615": "1dbbbb", + "f3f3f3": "ffdfc6", + "ad5027": "1d1d1d", + "d16116": "83f5e5", + "f7ac3e": "373737", + "d36716": "1d7ca3", + "ea681a": "272727", + "fcd7a1": "e67e5b" + }, + "2": { + "ffe3ba": "f5f5f5", + "d26615": "d86a17", + "f3f3f3": "f9a93e", + "ad5027": "63302d", + "d16116": "984710", + "f7ac3e": "e8e8e8", + "d36716": "ffc395", + "ea681a": "b5b5b5", + "fcd7a1": "d9551f" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/774-red-meteor.json b/public/images/pokemon/variant/exp/774-red-meteor.json new file mode 100644 index 00000000000..ceb3dd81226 --- /dev/null +++ b/public/images/pokemon/variant/exp/774-red-meteor.json @@ -0,0 +1,24 @@ +{ + "1": { + "612727": "282836", + "6e6e6e": "632715", + "f3f3f3": "cf8a6f", + "792f1a": "595969", + "914b48": "938fa3", + "1b1f21": "2d130c", + "9b3c20": "74302b", + "b2b2b2": "a15536", + "b4786b": "d8daef" + }, + "2": { + "612727": "191234", + "6e6e6e": "8e1440", + "f3f3f3": "ff5b73", + "792f1a": "111134", + "914b48": "2b224a", + "1b1f21": "2d070c", + "9b3c20": "ff869f", + "b2b2b2": "d2235d", + "b4786b": "454171" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/774-red.json b/public/images/pokemon/variant/exp/774-red.json new file mode 100644 index 00000000000..bbfc7164f30 --- /dev/null +++ b/public/images/pokemon/variant/exp/774-red.json @@ -0,0 +1,25 @@ +{ + "1": { + "c51d57": "f5a58f", + "101010": "171717", + "ba1d54": "b92d37", + "f19cb3": "d55b8f", + "a33044": "1d1d1d", + "f9a5bc": "949494", + "c01d56": "cb5729", + "f3f3f3": "ffd0dd", + "f26191": "373737", + "d02b54": "272727" + }, + "2": { + "c51d57": "ff8cb3", + "ba1d54": "7b0f34", + "f19cb3": "d2235d", + "a33044": "632d36", + "f9a5bc": "f5f5f5", + "c01d56": "ab1d4f", + "f3f3f3": "ff5b73", + "f26191": "e8e8e8", + "d02b54": "b5b5b5" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/774-violet-meteor.json b/public/images/pokemon/variant/exp/774-violet-meteor.json new file mode 100644 index 00000000000..0c633325a4c --- /dev/null +++ b/public/images/pokemon/variant/exp/774-violet-meteor.json @@ -0,0 +1,24 @@ +{ + "1": { + "612727": "282836", + "6e6e6e": "632715", + "f3f3f3": "cf8a6f", + "792f1a": "595969", + "914b48": "938fa3", + "1b1f21": "2d130c", + "9b3c20": "74302b", + "b2b2b2": "a15536", + "b4786b": "d8daef" + }, + "2": { + "612727": "191234", + "6e6e6e": "7423a1", + "f3f3f3": "c45bff", + "792f1a": "111134", + "914b48": "2b224a", + "1b1f21": "260b41", + "9b3c20": "c68cff", + "b2b2b2": "842cdb", + "b4786b": "454171" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/774-violet.json b/public/images/pokemon/variant/exp/774-violet.json new file mode 100644 index 00000000000..68a152c48a6 --- /dev/null +++ b/public/images/pokemon/variant/exp/774-violet.json @@ -0,0 +1,24 @@ +{ + "1": { + "d1bad9": "a77cef", + "7b3ec6": "272727", + "6b39a8": "22083d", + "5b3483": "1d1d1d", + "6837aa": "6060df", + "aa61f2": "373737", + "f3f3f3": "e6c3fc", + "6a38a7": "d82e9c", + "dfcbe6": "949494" + }, + "2": { + "d1bad9": "842cdb", + "7b3ec6": "b5b5b5", + "6b39a8": "8d4adf", + "5b3483": "422d63", + "6837aa": "6029ab", + "aa61f2": "e8e8e8", + "f3f3f3": "c45bff", + "6a38a7": "cda4ff", + "dfcbe6": "f5f5f5" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/774-yellow-meteor.json b/public/images/pokemon/variant/exp/774-yellow-meteor.json new file mode 100644 index 00000000000..5d0dfa7b3de --- /dev/null +++ b/public/images/pokemon/variant/exp/774-yellow-meteor.json @@ -0,0 +1,24 @@ +{ + "1": { + "612727": "282836", + "6e6e6e": "632715", + "f3f3f3": "cf8a6f", + "792f1a": "595969", + "914b48": "938fa3", + "1b1f21": "2d130c", + "9b3c20": "74302b", + "b2b2b2": "a15536", + "b4786b": "d8daef" + }, + "2": { + "612727": "191234", + "6e6e6e": "816216", + "f3f3f3": "f2d631", + "792f1a": "111134", + "914b48": "2b224a", + "1b1f21": "2a2006", + "9b3c20": "ffdc5e", + "b2b2b2": "c29e19", + "b4786b": "454171" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/774-yellow.json b/public/images/pokemon/variant/exp/774-yellow.json new file mode 100644 index 00000000000..a866edbf440 --- /dev/null +++ b/public/images/pokemon/variant/exp/774-yellow.json @@ -0,0 +1,24 @@ +{ + "1": { + "fff798": "d2c044", + "fbdf42": "373737", + "e4ae0c": "272727", + "baa31d": "ca7fe8", + "bfa71e": "9755ef", + "fff8ad": "949494", + "f3f3f3": "ffffc5", + "bc9c1b": "c0a1e9", + "916b1e": "1d1d1d" + }, + "2": { + "fff798": "9e7d18", + "fbdf42": "e8e8e8", + "e4ae0c": "b5b5b5", + "baa31d": "c29819", + "bfa71e": "f5d940", + "fff8ad": "f5f5f5", + "f3f3f3": "f2d631", + "bc9c1b": "887010", + "916b1e": "63492d" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/774-blue-meteor.json b/public/images/pokemon/variant/exp/back/774-blue-meteor.json new file mode 100644 index 00000000000..0970df55158 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/774-blue-meteor.json @@ -0,0 +1,28 @@ +{ + "1": { + "733837": "595969", + "612727": "282836", + "6e6e6e": "632715", + "f3f3f3": "cf8a6f", + "381616": "0d0723", + "792f1a": "531414", + "b4786b": "d8daef", + "1b1f21": "2d130c", + "9b3c20": "74302b", + "b2b2b2": "a15536", + "914b48": "938fa3" + }, + "2": { + "733837": "1a1939", + "612727": "120f29", + "6e6e6e": "176788", + "f3f3f3": "1bd2c7", + "381616": "0d0723", + "792f1a": "1aa999", + "b4786b": "454171", + "1b1f21": "062a27", + "9b3c20": "58ffdb", + "b2b2b2": "11969e", + "914b48": "2b224a" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/774-blue.json b/public/images/pokemon/variant/exp/back/774-blue.json new file mode 100644 index 00000000000..1df81d62d17 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/774-blue.json @@ -0,0 +1,28 @@ +{ + "1": { + "f3f3f3": "adffff", + "126a72": "cf2c65", + "7bd7ea": "494949", + "bfe3e0": "48c4e9", + "156e77": "f9d2e2", + "1a7981": "ff7cab", + "cdefec": "949494", + "458da3": "1d1d1d", + "106870": "df3a74", + "1e818a": "ff91b8", + "41add6": "292929" + }, + "2": { + "f3f3f3": "1bd2c7", + "126a72": "118686", + "7bd7ea": "d6d6d6", + "bfe3e0": "11969e", + "156e77": "3ebacf", + "1a7981": "68eff9", + "cdefec": "f5f5f5", + "458da3": "2d5763", + "106870": "1d9c9c", + "1e818a": "9bf5fc", + "41add6": "b3b3b3" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/774-green-meteor.json b/public/images/pokemon/variant/exp/back/774-green-meteor.json new file mode 100644 index 00000000000..37fc7abdc8f --- /dev/null +++ b/public/images/pokemon/variant/exp/back/774-green-meteor.json @@ -0,0 +1,28 @@ +{ + "1": { + "733837": "595969", + "612727": "282836", + "6e6e6e": "632715", + "f3f3f3": "cf8a6f", + "381616": "0d0723", + "792f1a": "531414", + "b4786b": "d8daef", + "1b1f21": "2d130c", + "9b3c20": "74302b", + "b2b2b2": "a15536", + "914b48": "938fa3" + }, + "2": { + "733837": "1a1939", + "612727": "120f29", + "6e6e6e": "0e6b12", + "f3f3f3": "7aff55", + "381616": "0d0723", + "792f1a": "0c7c2e", + "b4786b": "454171", + "1b1f21": "092a06", + "9b3c20": "14be38", + "b2b2b2": "4bec30", + "914b48": "2b224a" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/774-green.json b/public/images/pokemon/variant/exp/back/774-green.json new file mode 100644 index 00000000000..d25024a18e3 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/774-green.json @@ -0,0 +1,28 @@ +{ + "1": { + "f3f3f3": "bef9c9", + "195926": "8749b9", + "64b035": "292929", + "beeea8": "57d267", + "37852c": "1d1d1d", + "c8f5b3": "949494", + "1a5c27": "d1b5ff", + "297339": "dcc7ff", + "1b5927": "6d24a9", + "94de52": "494949", + "1d602b": "a963cf" + }, + "2": { + "f3f3f3": "4bec30", + "195926": "1a8c1f", + "64b035": "b3b3b3", + "beeea8": "14be38", + "37852c": "2d633e", + "c8f5b3": "f5f5f5", + "1a5c27": "75fc72", + "297339": "a1ff9f", + "1b5927": "0e6b12", + "94de52": "d6d6d6", + "1d602b": "48bc45" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/774-indigo-meteor.json b/public/images/pokemon/variant/exp/back/774-indigo-meteor.json new file mode 100644 index 00000000000..2d6ad120c37 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/774-indigo-meteor.json @@ -0,0 +1,28 @@ +{ + "1": { + "733837": "595969", + "612727": "282836", + "6e6e6e": "632715", + "f3f3f3": "cf8a6f", + "381616": "0d0723", + "792f1a": "531414", + "b4786b": "d8daef", + "1b1f21": "2d130c", + "9b3c20": "74302b", + "b2b2b2": "a15536", + "914b48": "938fa3" + }, + "2": { + "733837": "1a1939", + "612727": "120f29", + "6e6e6e": "1a30bf", + "f3f3f3": "5895ff", + "381616": "0d0723", + "792f1a": "556aef", + "b4786b": "454171", + "1b1f21": "081834", + "9b3c20": "829aff", + "b2b2b2": "3659ec", + "914b48": "2b224a" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/774-indigo.json b/public/images/pokemon/variant/exp/back/774-indigo.json new file mode 100644 index 00000000000..20f93a8f616 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/774-indigo.json @@ -0,0 +1,28 @@ +{ + "1": { + "f3f3f3": "c3ddff", + "29397c": "28b966", + "223173": "70f2c3", + "89d1e5": "6391e6", + "336dc6": "292929", + "29477e": "1d1d1d", + "1f2e6f": "188363", + "1c2a6b": "0e6c50", + "91d6e9": "949494", + "2f3f84": "33dc7b", + "31afdf": "494949" + }, + "2": { + "f3f3f3": "5895ff", + "29397c": "9acbff", + "223173": "5395ef", + "89d1e5": "3659ec", + "336dc6": "b3b3b3", + "29477e": "2d3b63", + "1f2e6f": "15658f", + "1c2a6b": "267eac", + "91d6e9": "f5f5f5", + "2f3f84": "b1d7ff", + "31afdf": "d6d6d6" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/774-orange-meteor.json b/public/images/pokemon/variant/exp/back/774-orange-meteor.json new file mode 100644 index 00000000000..3a74baebfa7 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/774-orange-meteor.json @@ -0,0 +1,28 @@ +{ + "1": { + "733837": "595969", + "612727": "282836", + "6e6e6e": "632715", + "f3f3f3": "cf8a6f", + "381616": "0d0723", + "792f1a": "531414", + "b4786b": "d8daef", + "1b1f21": "2d130c", + "9b3c20": "74302b", + "b2b2b2": "a15536", + "914b48": "938fa3" + }, + "2": { + "733837": "1a1939", + "612727": "120f29", + "6e6e6e": "8e2e14", + "f3f3f3": "f9a93e", + "381616": "0d0723", + "792f1a": "d26545", + "b4786b": "454171", + "1b1f21": "2d1207", + "9b3c20": "ff9e76", + "b2b2b2": "d86a17", + "914b48": "2b224a" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/774-orange.json b/public/images/pokemon/variant/exp/back/774-orange.json new file mode 100644 index 00000000000..80ce1afca7c --- /dev/null +++ b/public/images/pokemon/variant/exp/back/774-orange.json @@ -0,0 +1,28 @@ +{ + "1": { + "f3f3f3": "ffdfc6", + "8e2e0b": "1d7ca3", + "ffdfb1": "e67e5b", + "ea681a": "292929", + "ad5027": "1d1d1d", + "9a3a11": "83f5e5", + "f7ac3e": "494949", + "a23f13": "9ffff2", + "91310c": "1dbbbb", + "8b2b0a": "156c8f", + "ffe4bf": "949494" + }, + "2": { + "f3f3f3": "f9a93e", + "8e2e0b": "984710", + "ffdfb1": "d86a17", + "ea681a": "b3b3b3", + "ad5027": "63302d", + "9a3a11": "fcba88", + "f7ac3e": "d6d6d6", + "a23f13": "ffcda7", + "91310c": "e27929", + "8b2b0a": "a65016", + "ffe4bf": "f5f5f5" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/774-red-meteor.json b/public/images/pokemon/variant/exp/back/774-red-meteor.json new file mode 100644 index 00000000000..f7d774813e3 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/774-red-meteor.json @@ -0,0 +1,28 @@ +{ + "1": { + "733837": "595969", + "612727": "282836", + "6e6e6e": "632715", + "f3f3f3": "cf8a6f", + "381616": "0d0723", + "792f1a": "531414", + "b4786b": "d8daef", + "1b1f21": "2d130c", + "9b3c20": "74302b", + "b2b2b2": "a15536", + "914b48": "938fa3" + }, + "2": { + "733837": "1a1939", + "612727": "120f29", + "6e6e6e": "8e1440", + "f3f3f3": "ff5b73", + "381616": "0d0723", + "792f1a": "cc376b", + "b4786b": "454171", + "1b1f21": "2d070c", + "9b3c20": "ff869f", + "b2b2b2": "d2235d", + "914b48": "2b224a" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/774-red.json b/public/images/pokemon/variant/exp/back/774-red.json new file mode 100644 index 00000000000..15ebd71fedb --- /dev/null +++ b/public/images/pokemon/variant/exp/back/774-red.json @@ -0,0 +1,28 @@ +{ + "1": { + "f3f3f3": "ffd0dd", + "f19cb3": "d55b8f", + "a33044": "1d1d1d", + "851f4d": "cb5729", + "912042": "ffbeac", + "891f3f": "b61a25", + "832749": "ec8c71", + "f26191": "494949", + "872152": "d25e31", + "d02b54": "292929", + "f2a1b7": "949494" + }, + "2": { + "f3f3f3": "ff5b73", + "f19cb3": "d2235d", + "a33044": "632d36", + "851f4d": "9f1c49", + "912042": "ff8eb4", + "891f3f": "e94a82", + "832749": "ffb1cb", + "f26191": "d6d6d6", + "872152": "9f1c49", + "d02b54": "b3b3b3", + "f2a1b7": "f5f5f5" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/774-violet-meteor.json b/public/images/pokemon/variant/exp/back/774-violet-meteor.json new file mode 100644 index 00000000000..9b85bf60848 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/774-violet-meteor.json @@ -0,0 +1,28 @@ +{ + "1": { + "733837": "595969", + "612727": "282836", + "6e6e6e": "632715", + "f3f3f3": "cf8a6f", + "381616": "0d0723", + "792f1a": "531414", + "b4786b": "d8daef", + "1b1f21": "2d130c", + "9b3c20": "74302b", + "b2b2b2": "a15536", + "914b48": "938fa3" + }, + "2": { + "733837": "1a1939", + "612727": "120f29", + "6e6e6e": "4d1d9c", + "f3f3f3": "c45bff", + "381616": "0d0723", + "792f1a": "a95cf5", + "b4786b": "454171", + "1b1f21": "260b41", + "9b3c20": "c68cff", + "b2b2b2": "842cdb", + "914b48": "2b224a" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/774-violet.json b/public/images/pokemon/variant/exp/back/774-violet.json new file mode 100644 index 00000000000..3897dc38be3 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/774-violet.json @@ -0,0 +1,28 @@ +{ + "1": { + "f3f3f3": "e6c3fc", + "5b3483": "1d1d1d", + "aa61f2": "494949", + "491c73": "22083d", + "d7c1df": "949494", + "7b3ec6": "292929", + "562580": "6041d2", + "d1bad9": "a77cef", + "4d1f78": "d82e9c", + "45196f": "6060f9", + "5e2a89": "e948b0" + }, + "2": { + "f3f3f3": "c45bff", + "5b3483": "422d63", + "aa61f2": "d6d6d6", + "491c73": "9d5dec", + "d7c1df": "f5f5f5", + "7b3ec6": "b3b3b3", + "562580": "55219c", + "d1bad9": "842cdb", + "4d1f78": "e4d0fc", + "45196f": "6e34bc", + "5e2a89": "ddc2ff" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/774-yellow-meteor.json b/public/images/pokemon/variant/exp/back/774-yellow-meteor.json new file mode 100644 index 00000000000..1c05fa08e78 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/774-yellow-meteor.json @@ -0,0 +1,28 @@ +{ + "1": { + "733837": "595969", + "612727": "282836", + "6e6e6e": "632715", + "f3f3f3": "cf8a6f", + "381616": "0d0723", + "792f1a": "531414", + "b4786b": "d8daef", + "1b1f21": "2d130c", + "9b3c20": "74302b", + "b2b2b2": "a15536", + "914b48": "938fa3" + }, + "2": { + "733837": "1a1939", + "612727": "120f29", + "6e6e6e": "816216", + "f3f3f3": "f2d631", + "381616": "0d0723", + "792f1a": "cc971f", + "b4786b": "454171", + "1b1f21": "2a2006", + "9b3c20": "ffdc5e", + "b2b2b2": "c29e19", + "914b48": "2b224a" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/774-yellow.json b/public/images/pokemon/variant/exp/back/774-yellow.json new file mode 100644 index 00000000000..1e5bd5f8a4b --- /dev/null +++ b/public/images/pokemon/variant/exp/back/774-yellow.json @@ -0,0 +1,28 @@ +{ + "1": { + "f3f3f3": "ffffc5", + "fff9ae": "d2c044", + "fbdf42": "494949", + "fffbbf": "949494", + "845720": "d4baf5", + "7c4f1b": "9755ef", + "8f652b": "c271e2", + "95692c": "1d1d1d", + "80531d": "8339e6", + "8c6027": "c66ee9", + "e4ae0c": "292929" + }, + "2": { + "f3f3f3": "f2d631", + "fff9ae": "c29e19", + "fbdf42": "d6d6d6", + "fffbbf": "f5f5f5", + "845720": "bca622", + "7c4f1b": "887010", + "8f652b": "ffe867", + "95692c": "63492d", + "80531d": "836c10", + "8c6027": "f5d839", + "e4ae0c": "b3b3b3" + } +} \ No newline at end of file diff --git a/public/images/pokemon_icons_5v.json b/public/images/pokemon_icons_5v.json index d793ed1b650..03646529652 100644 --- a/public/images/pokemon_icons_5v.json +++ b/public/images/pokemon_icons_5v.json @@ -1,5606 +1,2441 @@ -{ - "textures": [ - { - "image": "pokemon_icons_5v.png", - "format": "RGBA8888", - "size": { - "w": 570, - "h": 570 - }, - "scale": 1, - "frames": [ - { - "filename": "494_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - } - }, - { - "filename": "494_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 40, - "y": 0, - "w": 40, - "h": 30 - } - }, - { - "filename": "495_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 80, - "y": 0, - "w": 40, - "h": 30 - } - }, - { - "filename": "495_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 120, - "y": 0, - "w": 40, - "h": 30 - } - }, - { - "filename": "496_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 160, - "y": 0, - "w": 40, - "h": 30 - } - }, - { - "filename": "496_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 200, - "y": 0, - "w": 40, - "h": 30 - } - }, - { - "filename": "497_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 240, - "y": 0, - "w": 40, - "h": 30 - } - }, - { - "filename": "497_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 280, - "y": 0, - "w": 40, - "h": 30 - } - }, - { - "filename": "498_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 320, - "y": 0, - "w": 40, - "h": 30 - } - }, - { - "filename": "498_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 360, - "y": 0, - "w": 40, - "h": 30 - } - }, - { - "filename": "499_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 400, - "y": 0, - "w": 40, - "h": 30 - } - }, - { - "filename": "499_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 440, - "y": 0, - "w": 40, - "h": 30 - } - }, - { - "filename": "500_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 480, - "y": 0, - "w": 40, - "h": 30 - } - }, - { - "filename": "500_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 520, - "y": 0, - "w": 40, - "h": 30 - } - }, - { - "filename": "501_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 0, - "y": 30, - "w": 40, - "h": 30 - } - }, - { - "filename": "501_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 40, - "y": 30, - "w": 40, - "h": 30 - } - }, - { - "filename": "502_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 80, - "y": 30, - "w": 40, - "h": 30 - } - }, - { - "filename": "502_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 120, - "y": 30, - "w": 40, - "h": 30 - } - }, - { - "filename": "503_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 160, - "y": 30, - "w": 40, - "h": 30 - } - }, - { - "filename": "503_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 200, - "y": 30, - "w": 40, - "h": 30 - } - }, - { - "filename": "511_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 240, - "y": 30, - "w": 40, - "h": 30 - } - }, - { - "filename": "511_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 280, - "y": 30, - "w": 40, - "h": 30 - } - }, - { - "filename": "512_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 320, - "y": 30, - "w": 40, - "h": 30 - } - }, - { - "filename": "512_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 360, - "y": 30, - "w": 40, - "h": 30 - } - }, - { - "filename": "513_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 400, - "y": 30, - "w": 40, - "h": 30 - } - }, - { - "filename": "513_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 440, - "y": 30, - "w": 40, - "h": 30 - } - }, - { - "filename": "514_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 480, - "y": 30, - "w": 40, - "h": 30 - } - }, - { - "filename": "514_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 520, - "y": 30, - "w": 40, - "h": 30 - } - }, - { - "filename": "515_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 0, - "y": 60, - "w": 40, - "h": 30 - } - }, - { - "filename": "515_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 40, - "y": 60, - "w": 40, - "h": 30 - } - }, - { - "filename": "516_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 80, - "y": 60, - "w": 40, - "h": 30 - } - }, - { - "filename": "516_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 120, - "y": 60, - "w": 40, - "h": 30 - } - }, - { - "filename": "517_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 160, - "y": 60, - "w": 40, - "h": 30 - } - }, - { - "filename": "517_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 200, - "y": 60, - "w": 40, - "h": 30 - } - }, - { - "filename": "518_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 240, - "y": 60, - "w": 40, - "h": 30 - } - }, - { - "filename": "518_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 280, - "y": 60, - "w": 40, - "h": 30 - } - }, - { - "filename": "522_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 320, - "y": 60, - "w": 40, - "h": 30 - } - }, - { - "filename": "522_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 360, - "y": 60, - "w": 40, - "h": 30 - } - }, - { - "filename": "523_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 400, - "y": 60, - "w": 40, - "h": 30 - } - }, - { - "filename": "523_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 440, - "y": 60, - "w": 40, - "h": 30 - } - }, - { - "filename": "524_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 480, - "y": 60, - "w": 40, - "h": 30 - } - }, - { - "filename": "524_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 520, - "y": 60, - "w": 40, - "h": 30 - } - }, - { - "filename": "525_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 0, - "y": 90, - "w": 40, - "h": 30 - } - }, - { - "filename": "525_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 40, - "y": 90, - "w": 40, - "h": 30 - } - }, - { - "filename": "526_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 80, - "y": 90, - "w": 40, - "h": 30 - } - }, - { - "filename": "526_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 120, - "y": 90, - "w": 40, - "h": 30 - } - }, - { - "filename": "527_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 160, - "y": 90, - "w": 40, - "h": 30 - } - }, - { - "filename": "527_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 200, - "y": 90, - "w": 40, - "h": 30 - } - }, - { - "filename": "528_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 240, - "y": 90, - "w": 40, - "h": 30 - } - }, - { - "filename": "528_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 280, - "y": 90, - "w": 40, - "h": 30 - } - }, - { - "filename": "529_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 320, - "y": 90, - "w": 40, - "h": 30 - } - }, - { - "filename": "529_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 360, - "y": 90, - "w": 40, - "h": 30 - } - }, - { - "filename": "530_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 400, - "y": 90, - "w": 40, - "h": 30 - } - }, - { - "filename": "530_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 440, - "y": 90, - "w": 40, - "h": 30 - } - }, - { - "filename": "531-mega_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 480, - "y": 90, - "w": 40, - "h": 30 - } - }, - { - "filename": "531-mega_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 520, - "y": 90, - "w": 40, - "h": 30 - } - }, - { - "filename": "531_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 0, - "y": 120, - "w": 40, - "h": 30 - } - }, - { - "filename": "531_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 40, - "y": 120, - "w": 40, - "h": 30 - } - }, - { - "filename": "532_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 80, - "y": 120, - "w": 40, - "h": 30 - } - }, - { - "filename": "532_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 120, - "y": 120, - "w": 40, - "h": 30 - } - }, - { - "filename": "533_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 160, - "y": 120, - "w": 40, - "h": 30 - } - }, - { - "filename": "533_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 200, - "y": 120, - "w": 40, - "h": 30 - } - }, - { - "filename": "534_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 240, - "y": 120, - "w": 40, - "h": 30 - } - }, - { - "filename": "534_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 280, - "y": 120, - "w": 40, - "h": 30 - } - }, - { - "filename": "535_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 320, - "y": 120, - "w": 40, - "h": 30 - } - }, - { - "filename": "535_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 360, - "y": 120, - "w": 40, - "h": 30 - } - }, - { - "filename": "536_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 400, - "y": 120, - "w": 40, - "h": 30 - } - }, - { - "filename": "536_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 440, - "y": 120, - "w": 40, - "h": 30 - } - }, - { - "filename": "537_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 480, - "y": 120, - "w": 40, - "h": 30 - } - }, - { - "filename": "537_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 520, - "y": 120, - "w": 40, - "h": 30 - } - }, - { - "filename": "538_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 0, - "y": 150, - "w": 40, - "h": 30 - } - }, - { - "filename": "538_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 40, - "y": 150, - "w": 40, - "h": 30 - } - }, - { - "filename": "539_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 80, - "y": 150, - "w": 40, - "h": 30 - } - }, - { - "filename": "539_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 120, - "y": 150, - "w": 40, - "h": 30 - } - }, - { - "filename": "540_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 160, - "y": 150, - "w": 40, - "h": 30 - } - }, - { - "filename": "540_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 200, - "y": 150, - "w": 40, - "h": 30 - } - }, - { - "filename": "541_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 240, - "y": 150, - "w": 40, - "h": 30 - } - }, - { - "filename": "541_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 280, - "y": 150, - "w": 40, - "h": 30 - } - }, - { - "filename": "542_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 320, - "y": 150, - "w": 40, - "h": 30 - } - }, - { - "filename": "542_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 360, - "y": 150, - "w": 40, - "h": 30 - } - }, - { - "filename": "543_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 400, - "y": 150, - "w": 40, - "h": 30 - } - }, - { - "filename": "543_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 440, - "y": 150, - "w": 40, - "h": 30 - } - }, - { - "filename": "544_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 480, - "y": 150, - "w": 40, - "h": 30 - } - }, - { - "filename": "544_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 520, - "y": 150, - "w": 40, - "h": 30 - } - }, - { - "filename": "545_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 0, - "y": 180, - "w": 40, - "h": 30 - } - }, - { - "filename": "545_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 40, - "y": 180, - "w": 40, - "h": 30 - } - }, - { - "filename": "546_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 80, - "y": 180, - "w": 40, - "h": 30 - } - }, - { - "filename": "546_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 120, - "y": 180, - "w": 40, - "h": 30 - } - }, - { - "filename": "547_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 160, - "y": 180, - "w": 40, - "h": 30 - } - }, - { - "filename": "547_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 200, - "y": 180, - "w": 40, - "h": 30 - } - }, - { - "filename": "548_1", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 240, - "y": 180, - "w": 40, - "h": 30 - } - }, - { - "filename": "548_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 280, - "y": 180, - "w": 40, - "h": 30 - } - }, - { - "filename": "548_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 320, - "y": 180, - "w": 40, - "h": 30 - } - }, - { - "filename": "549_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 360, - "y": 180, - "w": 40, - "h": 30 - } - }, - { - "filename": "549_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 400, - "y": 180, - "w": 40, - "h": 30 - } - }, - { - "filename": "551_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 440, - "y": 180, - "w": 40, - "h": 30 - } - }, - { - "filename": "551_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 480, - "y": 180, - "w": 40, - "h": 30 - } - }, - { - "filename": "552_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 520, - "y": 180, - "w": 40, - "h": 30 - } - }, - { - "filename": "552_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 0, - "y": 210, - "w": 40, - "h": 30 - } - }, - { - "filename": "553_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 40, - "y": 210, - "w": 40, - "h": 30 - } - }, - { - "filename": "553_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 80, - "y": 210, - "w": 40, - "h": 30 - } - }, - { - "filename": "554_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 120, - "y": 210, - "w": 40, - "h": 30 - } - }, - { - "filename": "554_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 160, - "y": 210, - "w": 40, - "h": 30 - } - }, - { - "filename": "555-zen_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 200, - "y": 210, - "w": 40, - "h": 30 - } - }, - { - "filename": "555-zen_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 240, - "y": 210, - "w": 40, - "h": 30 - } - }, - { - "filename": "555_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 280, - "y": 210, - "w": 40, - "h": 30 - } - }, - { - "filename": "555_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 320, - "y": 210, - "w": 40, - "h": 30 - } - }, - { - "filename": "556_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 360, - "y": 210, - "w": 40, - "h": 30 - } - }, - { - "filename": "556_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 400, - "y": 210, - "w": 40, - "h": 30 - } - }, - { - "filename": "559_1", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 440, - "y": 210, - "w": 40, - "h": 30 - } - }, - { - "filename": "559_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 480, - "y": 210, - "w": 40, - "h": 30 - } - }, - { - "filename": "559_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 520, - "y": 210, - "w": 40, - "h": 30 - } - }, - { - "filename": "560_1", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 0, - "y": 240, - "w": 40, - "h": 30 - } - }, - { - "filename": "560_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 40, - "y": 240, - "w": 40, - "h": 30 - } - }, - { - "filename": "560_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 80, - "y": 240, - "w": 40, - "h": 30 - } - }, - { - "filename": "562_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 120, - "y": 240, - "w": 40, - "h": 30 - } - }, - { - "filename": "562_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 160, - "y": 240, - "w": 40, - "h": 30 - } - }, - { - "filename": "563_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 200, - "y": 240, - "w": 40, - "h": 30 - } - }, - { - "filename": "563_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 240, - "y": 240, - "w": 40, - "h": 30 - } - }, - { - "filename": "566_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 280, - "y": 240, - "w": 40, - "h": 30 - } - }, - { - "filename": "566_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 320, - "y": 240, - "w": 40, - "h": 30 - } - }, - { - "filename": "567_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 360, - "y": 240, - "w": 40, - "h": 30 - } - }, - { - "filename": "567_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 400, - "y": 240, - "w": 40, - "h": 30 - } - }, - { - "filename": "568_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 440, - "y": 240, - "w": 40, - "h": 30 - } - }, - { - "filename": "568_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 480, - "y": 240, - "w": 40, - "h": 30 - } - }, - { - "filename": "569-gigantamax_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 520, - "y": 240, - "w": 40, - "h": 30 - } - }, - { - "filename": "569-gigantamax_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 0, - "y": 270, - "w": 40, - "h": 30 - } - }, - { - "filename": "569_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 40, - "y": 270, - "w": 40, - "h": 30 - } - }, - { - "filename": "569_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 80, - "y": 270, - "w": 40, - "h": 30 - } - }, - { - "filename": "570_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 120, - "y": 270, - "w": 40, - "h": 30 - } - }, - { - "filename": "570_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 160, - "y": 270, - "w": 40, - "h": 30 - } - }, - { - "filename": "571_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 200, - "y": 270, - "w": 40, - "h": 30 - } - }, - { - "filename": "571_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 240, - "y": 270, - "w": 40, - "h": 30 - } - }, - { - "filename": "572_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 280, - "y": 270, - "w": 40, - "h": 30 - } - }, - { - "filename": "572_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 320, - "y": 270, - "w": 40, - "h": 30 - } - }, - { - "filename": "573_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 360, - "y": 270, - "w": 40, - "h": 30 - } - }, - { - "filename": "573_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 400, - "y": 270, - "w": 40, - "h": 30 - } - }, - { - "filename": "577_1", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 440, - "y": 270, - "w": 40, - "h": 30 - } - }, - { - "filename": "577_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 480, - "y": 270, - "w": 40, - "h": 30 - } - }, - { - "filename": "577_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 520, - "y": 270, - "w": 40, - "h": 30 - } - }, - { - "filename": "578_1", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 0, - "y": 300, - "w": 40, - "h": 30 - } - }, - { - "filename": "578_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 40, - "y": 300, - "w": 40, - "h": 30 - } - }, - { - "filename": "578_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 80, - "y": 300, - "w": 40, - "h": 30 - } - }, - { - "filename": "579_1", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 120, - "y": 300, - "w": 40, - "h": 30 - } - }, - { - "filename": "579_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 160, - "y": 300, - "w": 40, - "h": 30 - } - }, - { - "filename": "579_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 200, - "y": 300, - "w": 40, - "h": 30 - } - }, - { - "filename": "585-autumn_1", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 240, - "y": 300, - "w": 40, - "h": 30 - } - }, - { - "filename": "585-spring_1", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 280, - "y": 300, - "w": 40, - "h": 30 - } - }, - { - "filename": "585-summer_1", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 320, - "y": 300, - "w": 40, - "h": 30 - } - }, - { - "filename": "585-winter_1", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 360, - "y": 300, - "w": 40, - "h": 30 - } - }, - { - "filename": "586-autumn_1", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 400, - "y": 300, - "w": 40, - "h": 30 - } - }, - { - "filename": "586-spring_1", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 440, - "y": 300, - "w": 40, - "h": 30 - } - }, - { - "filename": "586-summer_1", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 480, - "y": 300, - "w": 40, - "h": 30 - } - }, - { - "filename": "586-winter_1", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 520, - "y": 300, - "w": 40, - "h": 30 - } - }, - { - "filename": "587_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 0, - "y": 330, - "w": 40, - "h": 30 - } - }, - { - "filename": "587_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 40, - "y": 330, - "w": 40, - "h": 30 - } - }, - { - "filename": "588_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 80, - "y": 330, - "w": 40, - "h": 30 - } - }, - { - "filename": "588_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 120, - "y": 330, - "w": 40, - "h": 30 - } - }, - { - "filename": "589_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 160, - "y": 330, - "w": 40, - "h": 30 - } - }, - { - "filename": "589_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 200, - "y": 330, - "w": 40, - "h": 30 - } - }, - { - "filename": "590_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 240, - "y": 330, - "w": 40, - "h": 30 - } - }, - { - "filename": "590_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 280, - "y": 330, - "w": 40, - "h": 30 - } - }, - { - "filename": "591_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 320, - "y": 330, - "w": 40, - "h": 30 - } - }, - { - "filename": "591_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 360, - "y": 330, - "w": 40, - "h": 30 - } - }, - { - "filename": "592-f_1", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 400, - "y": 330, - "w": 40, - "h": 30 - } - }, - { - "filename": "592-f_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 440, - "y": 330, - "w": 40, - "h": 30 - } - }, - { - "filename": "592-f_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 480, - "y": 330, - "w": 40, - "h": 30 - } - }, - { - "filename": "592_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 520, - "y": 330, - "w": 40, - "h": 30 - } - }, - { - "filename": "592_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 0, - "y": 360, - "w": 40, - "h": 30 - } - }, - { - "filename": "593-f_1", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 40, - "y": 360, - "w": 40, - "h": 30 - } - }, - { - "filename": "593-f_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 80, - "y": 360, - "w": 40, - "h": 30 - } - }, - { - "filename": "593-f_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 120, - "y": 360, - "w": 40, - "h": 30 - } - }, - { - "filename": "593_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 160, - "y": 360, - "w": 40, - "h": 30 - } - }, - { - "filename": "593_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 200, - "y": 360, - "w": 40, - "h": 30 - } - }, - { - "filename": "594_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 240, - "y": 360, - "w": 40, - "h": 30 - } - }, - { - "filename": "594_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 280, - "y": 360, - "w": 40, - "h": 30 - } - }, - { - "filename": "595_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 320, - "y": 360, - "w": 40, - "h": 30 - } - }, - { - "filename": "595_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 360, - "y": 360, - "w": 40, - "h": 30 - } - }, - { - "filename": "596_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 400, - "y": 360, - "w": 40, - "h": 30 - } - }, - { - "filename": "596_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 440, - "y": 360, - "w": 40, - "h": 30 - } - }, - { - "filename": "602_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 480, - "y": 360, - "w": 40, - "h": 30 - } - }, - { - "filename": "602_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 520, - "y": 360, - "w": 40, - "h": 30 - } - }, - { - "filename": "603_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 0, - "y": 390, - "w": 40, - "h": 30 - } - }, - { - "filename": "603_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 40, - "y": 390, - "w": 40, - "h": 30 - } - }, - { - "filename": "604_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 80, - "y": 390, - "w": 40, - "h": 30 - } - }, - { - "filename": "604_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 120, - "y": 390, - "w": 40, - "h": 30 - } - }, - { - "filename": "605_1", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 160, - "y": 390, - "w": 40, - "h": 30 - } - }, - { - "filename": "605_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 200, - "y": 390, - "w": 40, - "h": 30 - } - }, - { - "filename": "605_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 240, - "y": 390, - "w": 40, - "h": 30 - } - }, - { - "filename": "606_1", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 280, - "y": 390, - "w": 40, - "h": 30 - } - }, - { - "filename": "606_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 320, - "y": 390, - "w": 40, - "h": 30 - } - }, - { - "filename": "606_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 360, - "y": 390, - "w": 40, - "h": 30 - } - }, - { - "filename": "607_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 400, - "y": 390, - "w": 40, - "h": 30 - } - }, - { - "filename": "607_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 440, - "y": 390, - "w": 40, - "h": 30 - } - }, - { - "filename": "608_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 480, - "y": 390, - "w": 40, - "h": 30 - } - }, - { - "filename": "608_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 520, - "y": 390, - "w": 40, - "h": 30 - } - }, - { - "filename": "609_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 0, - "y": 420, - "w": 40, - "h": 30 - } - }, - { - "filename": "609_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 40, - "y": 420, - "w": 40, - "h": 30 - } - }, - { - "filename": "610_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 80, - "y": 420, - "w": 40, - "h": 30 - } - }, - { - "filename": "610_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 120, - "y": 420, - "w": 40, - "h": 30 - } - }, - { - "filename": "611_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 160, - "y": 420, - "w": 40, - "h": 30 - } - }, - { - "filename": "611_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 200, - "y": 420, - "w": 40, - "h": 30 - } - }, - { - "filename": "612_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 240, - "y": 420, - "w": 40, - "h": 30 - } - }, - { - "filename": "612_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 280, - "y": 420, - "w": 40, - "h": 30 - } - }, - { - "filename": "616_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 320, - "y": 420, - "w": 40, - "h": 30 - } - }, - { - "filename": "616_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 360, - "y": 420, - "w": 40, - "h": 30 - } - }, - { - "filename": "617_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 400, - "y": 420, - "w": 40, - "h": 30 - } - }, - { - "filename": "617_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 440, - "y": 420, - "w": 40, - "h": 30 - } - }, - { - "filename": "618_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 480, - "y": 420, - "w": 40, - "h": 30 - } - }, - { - "filename": "618_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 520, - "y": 420, - "w": 40, - "h": 30 - } - }, - { - "filename": "619_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 0, - "y": 450, - "w": 40, - "h": 30 - } - }, - { - "filename": "619_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 40, - "y": 450, - "w": 40, - "h": 30 - } - }, - { - "filename": "620_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 80, - "y": 450, - "w": 40, - "h": 30 - } - }, - { - "filename": "620_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 120, - "y": 450, - "w": 40, - "h": 30 - } - }, - { - "filename": "621_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 160, - "y": 450, - "w": 40, - "h": 30 - } - }, - { - "filename": "621_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 200, - "y": 450, - "w": 40, - "h": 30 - } - }, - { - "filename": "622_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 240, - "y": 450, - "w": 40, - "h": 30 - } - }, - { - "filename": "622_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 280, - "y": 450, - "w": 40, - "h": 30 - } - }, - { - "filename": "623_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 320, - "y": 450, - "w": 40, - "h": 30 - } - }, - { - "filename": "623_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 360, - "y": 450, - "w": 40, - "h": 30 - } - }, - { - "filename": "626_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 400, - "y": 450, - "w": 40, - "h": 30 - } - }, - { - "filename": "626_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 440, - "y": 450, - "w": 40, - "h": 30 - } - }, - { - "filename": "631_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 480, - "y": 450, - "w": 40, - "h": 30 - } - }, - { - "filename": "631_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 520, - "y": 450, - "w": 40, - "h": 30 - } - }, - { - "filename": "632_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 0, - "y": 480, - "w": 40, - "h": 30 - } - }, - { - "filename": "632_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 40, - "y": 480, - "w": 40, - "h": 30 - } - }, - { - "filename": "633_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 80, - "y": 480, - "w": 40, - "h": 30 - } - }, - { - "filename": "633_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 120, - "y": 480, - "w": 40, - "h": 30 - } - }, - { - "filename": "634_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 160, - "y": 480, - "w": 40, - "h": 30 - } - }, - { - "filename": "634_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 200, - "y": 480, - "w": 40, - "h": 30 - } - }, - { - "filename": "635_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 240, - "y": 480, - "w": 40, - "h": 30 - } - }, - { - "filename": "635_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 280, - "y": 480, - "w": 40, - "h": 30 - } - }, - { - "filename": "636_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 320, - "y": 480, - "w": 40, - "h": 30 - } - }, - { - "filename": "636_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 360, - "y": 480, - "w": 40, - "h": 30 - } - }, - { - "filename": "637_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 400, - "y": 480, - "w": 40, - "h": 30 - } - }, - { - "filename": "637_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 440, - "y": 480, - "w": 40, - "h": 30 - } - }, - { - "filename": "640_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 480, - "y": 480, - "w": 40, - "h": 30 - } - }, - { - "filename": "640_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 520, - "y": 480, - "w": 40, - "h": 30 - } - }, - { - "filename": "643_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 0, - "y": 510, - "w": 40, - "h": 30 - } - }, - { - "filename": "643_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 40, - "y": 510, - "w": 40, - "h": 30 - } - }, - { - "filename": "644_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 80, - "y": 510, - "w": 40, - "h": 30 - } - }, - { - "filename": "644_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 120, - "y": 510, - "w": 40, - "h": 30 - } - }, - { - "filename": "646-black_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 160, - "y": 510, - "w": 40, - "h": 30 - } - }, - { - "filename": "646-black_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 200, - "y": 510, - "w": 40, - "h": 30 - } - }, - { - "filename": "646-white_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 240, - "y": 510, - "w": 40, - "h": 30 - } - }, - { - "filename": "646-white_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 280, - "y": 510, - "w": 40, - "h": 30 - } - }, - { - "filename": "646_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 320, - "y": 510, - "w": 40, - "h": 30 - } - }, - { - "filename": "646_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 360, - "y": 510, - "w": 40, - "h": 30 - } - }, - { - "filename": "647-ordinary_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 400, - "y": 510, - "w": 40, - "h": 30 - } - }, - { - "filename": "647-ordinary_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 440, - "y": 510, - "w": 40, - "h": 30 - } - }, - { - "filename": "647-resolute_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 480, - "y": 510, - "w": 40, - "h": 30 - } - }, - { - "filename": "647-resolute_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 520, - "y": 510, - "w": 40, - "h": 30 - } - }, - { - "filename": "648-aria_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 0, - "y": 540, - "w": 40, - "h": 30 - } - }, - { - "filename": "648-aria_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 40, - "y": 540, - "w": 40, - "h": 30 - } - }, - { - "filename": "648-pirouette_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 80, - "y": 540, - "w": 40, - "h": 30 - } - }, - { - "filename": "648-pirouette_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 120, - "y": 540, - "w": 40, - "h": 30 - } - }, - { - "filename": "649-burn_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 160, - "y": 540, - "w": 40, - "h": 30 - } - }, - { - "filename": "649-burn_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 200, - "y": 540, - "w": 40, - "h": 30 - } - }, - { - "filename": "649-chill_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 240, - "y": 540, - "w": 40, - "h": 30 - } - }, - { - "filename": "649-chill_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 280, - "y": 540, - "w": 40, - "h": 30 - } - }, - { - "filename": "649-douse_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 320, - "y": 540, - "w": 40, - "h": 30 - } - }, - { - "filename": "649-douse_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 360, - "y": 540, - "w": 40, - "h": 30 - } - }, - { - "filename": "649-shock_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 400, - "y": 540, - "w": 40, - "h": 30 - } - }, - { - "filename": "649-shock_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 440, - "y": 540, - "w": 40, - "h": 30 - } - }, - { - "filename": "649_2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 480, - "y": 540, - "w": 40, - "h": 30 - } - }, - { - "filename": "649_3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 40, - "h": 30 - }, - "frame": { - "x": 520, - "y": 540, - "w": 40, - "h": 30 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:d7ba1fabe0180573c58dd3fb1ea6e279:cbff8ace700a0111c2ee3279d01d11e4:f1931bc28ee7f32dba7543723757cf2a$" - } +{ "frames": [ + { + "filename": "494_2", + "frame": { "x": 0, "y": 0, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "494_3", + "frame": { "x": 37, "y": 0, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "495_2", + "frame": { "x": 74, "y": 0, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "495_3", + "frame": { "x": 111, "y": 0, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "496_2", + "frame": { "x": 148, "y": 0, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "496_3", + "frame": { "x": 185, "y": 0, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "497_2", + "frame": { "x": 222, "y": 0, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "497_3", + "frame": { "x": 259, "y": 0, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "498_2", + "frame": { "x": 296, "y": 0, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "498_3", + "frame": { "x": 333, "y": 0, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "499_2", + "frame": { "x": 370, "y": 0, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "499_3", + "frame": { "x": 407, "y": 0, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "500_2", + "frame": { "x": 444, "y": 0, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "500_3", + "frame": { "x": 481, "y": 0, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "501_2", + "frame": { "x": 518, "y": 0, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "501_3", + "frame": { "x": 555, "y": 0, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "502_2", + "frame": { "x": 592, "y": 0, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "502_3", + "frame": { "x": 0, "y": 30, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "503_2", + "frame": { "x": 37, "y": 30, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "503_3", + "frame": { "x": 74, "y": 30, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "511_2", + "frame": { "x": 111, "y": 30, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "511_3", + "frame": { "x": 148, "y": 30, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "512_2", + "frame": { "x": 185, "y": 30, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "512_3", + "frame": { "x": 222, "y": 30, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "513_2", + "frame": { "x": 259, "y": 30, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "513_3", + "frame": { "x": 296, "y": 30, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "514_2", + "frame": { "x": 333, "y": 30, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "514_3", + "frame": { "x": 370, "y": 30, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "515_2", + "frame": { "x": 407, "y": 30, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "515_3", + "frame": { "x": 444, "y": 30, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "516_2", + "frame": { "x": 481, "y": 30, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "516_3", + "frame": { "x": 518, "y": 30, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "517_2", + "frame": { "x": 555, "y": 30, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "517_3", + "frame": { "x": 592, "y": 30, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "518_2", + "frame": { "x": 0, "y": 60, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "518_3", + "frame": { "x": 37, "y": 60, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "522_2", + "frame": { "x": 74, "y": 60, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "522_3", + "frame": { "x": 111, "y": 60, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "523_2", + "frame": { "x": 148, "y": 60, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "523_3", + "frame": { "x": 185, "y": 60, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "524_2", + "frame": { "x": 222, "y": 60, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "524_3", + "frame": { "x": 259, "y": 60, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "525_2", + "frame": { "x": 296, "y": 60, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "525_3", + "frame": { "x": 333, "y": 60, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "526_2", + "frame": { "x": 370, "y": 60, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "526_3", + "frame": { "x": 407, "y": 60, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "527_2", + "frame": { "x": 444, "y": 60, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "527_3", + "frame": { "x": 481, "y": 60, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "528_2", + "frame": { "x": 518, "y": 60, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "528_3", + "frame": { "x": 555, "y": 60, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "529_2", + "frame": { "x": 592, "y": 60, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "529_3", + "frame": { "x": 0, "y": 90, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "530_2", + "frame": { "x": 37, "y": 90, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "530_3", + "frame": { "x": 74, "y": 90, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "531-mega_2", + "frame": { "x": 111, "y": 90, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "531-mega_3", + "frame": { "x": 148, "y": 90, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "531_2", + "frame": { "x": 185, "y": 90, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "531_3", + "frame": { "x": 222, "y": 90, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "532_2", + "frame": { "x": 259, "y": 90, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "532_3", + "frame": { "x": 296, "y": 90, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "533_2", + "frame": { "x": 333, "y": 90, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "533_3", + "frame": { "x": 370, "y": 90, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "534_2", + "frame": { "x": 407, "y": 90, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "534_3", + "frame": { "x": 444, "y": 90, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "535_2", + "frame": { "x": 481, "y": 90, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "535_3", + "frame": { "x": 518, "y": 90, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "536_2", + "frame": { "x": 555, "y": 90, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "536_3", + "frame": { "x": 592, "y": 90, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "537_2", + "frame": { "x": 0, "y": 120, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "537_3", + "frame": { "x": 37, "y": 120, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "538_2", + "frame": { "x": 74, "y": 120, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "538_3", + "frame": { "x": 111, "y": 120, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "539_2", + "frame": { "x": 148, "y": 120, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "539_3", + "frame": { "x": 185, "y": 120, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "540_2", + "frame": { "x": 222, "y": 120, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "540_3", + "frame": { "x": 259, "y": 120, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "541_2", + "frame": { "x": 296, "y": 120, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "541_3", + "frame": { "x": 333, "y": 120, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "542_2", + "frame": { "x": 370, "y": 120, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "542_3", + "frame": { "x": 407, "y": 120, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "543_2", + "frame": { "x": 444, "y": 120, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "543_3", + "frame": { "x": 481, "y": 120, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "544_2", + "frame": { "x": 518, "y": 120, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "544_3", + "frame": { "x": 555, "y": 120, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "545_2", + "frame": { "x": 592, "y": 120, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "545_3", + "frame": { "x": 0, "y": 150, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "546_2", + "frame": { "x": 37, "y": 150, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "546_3", + "frame": { "x": 74, "y": 150, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "547_2", + "frame": { "x": 111, "y": 150, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "547_3", + "frame": { "x": 148, "y": 150, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "548_1", + "frame": { "x": 185, "y": 150, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "548_2", + "frame": { "x": 222, "y": 150, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "548_3", + "frame": { "x": 259, "y": 150, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "549_2", + "frame": { "x": 296, "y": 150, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "549_3", + "frame": { "x": 333, "y": 150, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "551_2", + "frame": { "x": 370, "y": 150, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "551_3", + "frame": { "x": 407, "y": 150, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "552_2", + "frame": { "x": 444, "y": 150, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "552_3", + "frame": { "x": 481, "y": 150, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "553_2", + "frame": { "x": 518, "y": 150, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "553_3", + "frame": { "x": 555, "y": 150, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "554_2", + "frame": { "x": 592, "y": 150, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "554_3", + "frame": { "x": 0, "y": 180, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "555-zen_2", + "frame": { "x": 37, "y": 180, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "555-zen_3", + "frame": { "x": 74, "y": 180, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "555_2", + "frame": { "x": 111, "y": 180, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "555_3", + "frame": { "x": 148, "y": 180, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "556_2", + "frame": { "x": 185, "y": 180, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "556_3", + "frame": { "x": 222, "y": 180, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "559_1", + "frame": { "x": 259, "y": 180, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "559_2", + "frame": { "x": 296, "y": 180, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "559_3", + "frame": { "x": 333, "y": 180, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "560_1", + "frame": { "x": 370, "y": 180, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "560_2", + "frame": { "x": 407, "y": 180, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "560_3", + "frame": { "x": 444, "y": 180, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "562_2", + "frame": { "x": 481, "y": 180, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "562_3", + "frame": { "x": 518, "y": 180, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "563_2", + "frame": { "x": 555, "y": 180, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "563_3", + "frame": { "x": 592, "y": 180, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "566_2", + "frame": { "x": 0, "y": 210, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "566_3", + "frame": { "x": 37, "y": 210, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "567_2", + "frame": { "x": 74, "y": 210, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "567_3", + "frame": { "x": 111, "y": 210, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "568_2", + "frame": { "x": 148, "y": 210, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "568_3", + "frame": { "x": 185, "y": 210, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "569-gigantamax_2", + "frame": { "x": 222, "y": 210, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "569-gigantamax_3", + "frame": { "x": 259, "y": 210, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "569_2", + "frame": { "x": 296, "y": 210, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "569_3", + "frame": { "x": 333, "y": 210, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "570_2", + "frame": { "x": 370, "y": 210, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "570_3", + "frame": { "x": 407, "y": 210, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "571_2", + "frame": { "x": 444, "y": 210, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "571_3", + "frame": { "x": 481, "y": 210, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "572_2", + "frame": { "x": 518, "y": 210, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "572_3", + "frame": { "x": 555, "y": 210, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "573_2", + "frame": { "x": 592, "y": 210, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "573_3", + "frame": { "x": 0, "y": 240, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "577_1", + "frame": { "x": 37, "y": 240, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "577_2", + "frame": { "x": 74, "y": 240, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "577_3", + "frame": { "x": 111, "y": 240, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "578_1", + "frame": { "x": 148, "y": 240, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "578_2", + "frame": { "x": 185, "y": 240, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "578_3", + "frame": { "x": 222, "y": 240, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "579_1", + "frame": { "x": 259, "y": 240, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "579_2", + "frame": { "x": 296, "y": 240, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "579_3", + "frame": { "x": 333, "y": 240, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "585-autumn_1", + "frame": { "x": 370, "y": 240, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "585-spring_1", + "frame": { "x": 407, "y": 240, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "585-summer_1", + "frame": { "x": 444, "y": 240, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "585-winter_1", + "frame": { "x": 481, "y": 240, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "586-autumn_1", + "frame": { "x": 518, "y": 240, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "586-spring_1", + "frame": { "x": 555, "y": 240, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "586-summer_1", + "frame": { "x": 592, "y": 240, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "586-winter_1", + "frame": { "x": 0, "y": 270, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "587_2", + "frame": { "x": 37, "y": 270, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "587_3", + "frame": { "x": 74, "y": 270, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "588_2", + "frame": { "x": 111, "y": 270, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "588_3", + "frame": { "x": 148, "y": 270, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "589_2", + "frame": { "x": 185, "y": 270, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "589_3", + "frame": { "x": 222, "y": 270, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "590_2", + "frame": { "x": 259, "y": 270, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "590_3", + "frame": { "x": 296, "y": 270, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "591_2", + "frame": { "x": 333, "y": 270, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "591_3", + "frame": { "x": 370, "y": 270, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "592-f_1", + "frame": { "x": 407, "y": 270, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "592-f_2", + "frame": { "x": 444, "y": 270, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "592-f_3", + "frame": { "x": 481, "y": 270, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "592_2", + "frame": { "x": 518, "y": 270, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "592_3", + "frame": { "x": 555, "y": 270, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "593-f_1", + "frame": { "x": 592, "y": 270, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "593-f_2", + "frame": { "x": 0, "y": 300, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "593-f_3", + "frame": { "x": 37, "y": 300, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "593_2", + "frame": { "x": 74, "y": 300, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "593_3", + "frame": { "x": 111, "y": 300, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "594_2", + "frame": { "x": 148, "y": 300, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "594_3", + "frame": { "x": 185, "y": 300, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "595_2", + "frame": { "x": 222, "y": 300, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "595_3", + "frame": { "x": 259, "y": 300, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "596_2", + "frame": { "x": 296, "y": 300, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "596_3", + "frame": { "x": 333, "y": 300, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "597_2", + "frame": { "x": 370, "y": 300, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "597_3", + "frame": { "x": 407, "y": 300, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "598_2", + "frame": { "x": 444, "y": 300, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "598_3", + "frame": { "x": 481, "y": 300, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "602_2", + "frame": { "x": 518, "y": 300, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "602_3", + "frame": { "x": 555, "y": 300, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "603_2", + "frame": { "x": 592, "y": 300, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "603_3", + "frame": { "x": 0, "y": 330, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "604_2", + "frame": { "x": 37, "y": 330, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "604_3", + "frame": { "x": 74, "y": 330, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "605_1", + "frame": { "x": 111, "y": 330, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "605_2", + "frame": { "x": 148, "y": 330, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "605_3", + "frame": { "x": 185, "y": 330, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "606_1", + "frame": { "x": 222, "y": 330, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "606_2", + "frame": { "x": 259, "y": 330, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "606_3", + "frame": { "x": 296, "y": 330, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "607_2", + "frame": { "x": 333, "y": 330, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "607_3", + "frame": { "x": 370, "y": 330, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "608_2", + "frame": { "x": 407, "y": 330, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "608_3", + "frame": { "x": 444, "y": 330, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "609_2", + "frame": { "x": 481, "y": 330, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "609_3", + "frame": { "x": 518, "y": 330, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "610_2", + "frame": { "x": 555, "y": 330, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "610_3", + "frame": { "x": 592, "y": 330, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "611_2", + "frame": { "x": 0, "y": 360, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "611_3", + "frame": { "x": 37, "y": 360, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "612_2", + "frame": { "x": 74, "y": 360, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "612_3", + "frame": { "x": 111, "y": 360, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "616_2", + "frame": { "x": 148, "y": 360, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "616_3", + "frame": { "x": 185, "y": 360, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "617_2", + "frame": { "x": 222, "y": 360, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "617_3", + "frame": { "x": 259, "y": 360, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "618_2", + "frame": { "x": 296, "y": 360, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "618_3", + "frame": { "x": 333, "y": 360, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "619_2", + "frame": { "x": 370, "y": 360, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "619_3", + "frame": { "x": 407, "y": 360, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "620_2", + "frame": { "x": 444, "y": 360, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "620_3", + "frame": { "x": 481, "y": 360, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "621_2", + "frame": { "x": 518, "y": 360, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "621_3", + "frame": { "x": 555, "y": 360, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "622_2", + "frame": { "x": 592, "y": 360, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "622_3", + "frame": { "x": 0, "y": 390, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "623_2", + "frame": { "x": 37, "y": 390, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "623_3", + "frame": { "x": 74, "y": 390, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "626_2", + "frame": { "x": 111, "y": 390, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "626_3", + "frame": { "x": 148, "y": 390, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "631_2", + "frame": { "x": 185, "y": 390, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "631_3", + "frame": { "x": 222, "y": 390, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "632_2", + "frame": { "x": 259, "y": 390, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "632_3", + "frame": { "x": 296, "y": 390, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "633_2", + "frame": { "x": 333, "y": 390, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "633_3", + "frame": { "x": 370, "y": 390, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "634_2", + "frame": { "x": 407, "y": 390, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "634_3", + "frame": { "x": 444, "y": 390, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "635_2", + "frame": { "x": 481, "y": 390, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "635_3", + "frame": { "x": 518, "y": 390, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "636_2", + "frame": { "x": 555, "y": 390, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "636_3", + "frame": { "x": 592, "y": 390, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "637_2", + "frame": { "x": 0, "y": 420, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "637_3", + "frame": { "x": 37, "y": 420, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "640_2", + "frame": { "x": 74, "y": 420, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "640_3", + "frame": { "x": 111, "y": 420, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "643_2", + "frame": { "x": 148, "y": 420, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "643_3", + "frame": { "x": 185, "y": 420, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "644_2", + "frame": { "x": 222, "y": 420, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "644_3", + "frame": { "x": 259, "y": 420, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "646-black_2", + "frame": { "x": 296, "y": 420, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "646-black_3", + "frame": { "x": 333, "y": 420, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "646-white_2", + "frame": { "x": 370, "y": 420, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "646-white_3", + "frame": { "x": 407, "y": 420, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "646_2", + "frame": { "x": 444, "y": 420, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "646_3", + "frame": { "x": 481, "y": 420, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "647-ordinary_2", + "frame": { "x": 518, "y": 420, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "647-ordinary_3", + "frame": { "x": 555, "y": 420, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "647-resolute_2", + "frame": { "x": 592, "y": 420, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "647-resolute_3", + "frame": { "x": 0, "y": 450, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "648-aria_2", + "frame": { "x": 37, "y": 450, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "648-aria_3", + "frame": { "x": 74, "y": 450, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "648-pirouette_2", + "frame": { "x": 111, "y": 450, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "648-pirouette_3", + "frame": { "x": 148, "y": 450, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "649-burn_2", + "frame": { "x": 185, "y": 450, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "649-burn_3", + "frame": { "x": 222, "y": 450, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "649-chill_2", + "frame": { "x": 259, "y": 450, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "649-chill_3", + "frame": { "x": 296, "y": 450, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "649-douse_2", + "frame": { "x": 333, "y": 450, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "649-douse_3", + "frame": { "x": 370, "y": 450, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "649-shock_2", + "frame": { "x": 407, "y": 450, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "649-shock_3", + "frame": { "x": 444, "y": 450, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "649_2", + "frame": { "x": 481, "y": 450, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + }, + { + "filename": "649_3", + "frame": { "x": 518, "y": 450, "w": 37, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 37, "h": 30 }, + "sourceSize": { "w": 40, "h": 30 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "pokemon_icons_5v.png", + "format": "RGBA8888", + "size": { "w": 629, "h": 480 }, + "scale": "1" + } } diff --git a/public/images/pokemon_icons_5v.png b/public/images/pokemon_icons_5v.png index ba23de2e3f538d8e07dbbe1b7bf16b4d02c97c05..881f430447e9b984f64b416e71975fff419b21b3 100644 GIT binary patch literal 143455 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 RbEE(O002ovPDHLkV1h*wQAq#* diff --git a/public/images/pokemon_icons_7.json b/public/images/pokemon_icons_7.json index 03eeba88a70..853f8cfcc00 100644 --- a/public/images/pokemon_icons_7.json +++ b/public/images/pokemon_icons_7.json @@ -5763,6 +5763,153 @@ "h": 18 } }, + { + "filename": "774-red-meteor", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 8, + "w": 17, + "h": 18 + }, + "frame": { + "x": 406, + "y": 283, + "w": 17, + "h": 18 + } + }, + { + "filename": "774-blue-meteor", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 8, + "w": 17, + "h": 18 + }, + "frame": { + "x": 406, + "y": 283, + "w": 17, + "h": 18 + } + }, + { + "filename": "774-orange-meteor", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 8, + "w": 17, + "h": 18 + }, + "frame": { + "x": 406, + "y": 283, + "w": 17, + "h": 18 + } + }, + { + "filename": "774-yellow-meteor", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 8, + "w": 17, + "h": 18 + }, + "frame": { + "x": 406, + "y": 283, + "w": 17, + "h": 18 + } + }, + { + "filename": "774-green-meteor", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 8, + "w": 17, + "h": 18 + }, + "frame": { + "x": 406, + "y": 283, + "w": 17, + "h": 18 + } + }, + { + "filename": "774-indigo-meteor", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 8, + "w": 17, + "h": 18 + }, + "frame": { + "x": 406, + "y": 283, + "w": 17, + "h": 18 + } + }, + { + "filename": "774-violet-meteor", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 8, + "w": 17, + "h": 18 + }, + "frame": { + "x": 406, + "y": 283, + "w": 17, + "h": 18 + } + }, { "filename": "774", "rotated": false, @@ -5994,6 +6141,153 @@ "h": 18 } }, + { + "filename": "774s-red-meteor", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 8, + "w": 17, + "h": 18 + }, + "frame": { + "x": 453, + "y": 305, + "w": 17, + "h": 18 + } + }, + { + "filename": "774s-orange-meteor", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 8, + "w": 17, + "h": 18 + }, + "frame": { + "x": 453, + "y": 305, + "w": 17, + "h": 18 + } + }, + { + "filename": "774s-yellow-meteor", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 8, + "w": 17, + "h": 18 + }, + "frame": { + "x": 453, + "y": 305, + "w": 17, + "h": 18 + } + }, + { + "filename": "774s-green-meteor", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 8, + "w": 17, + "h": 18 + }, + "frame": { + "x": 453, + "y": 305, + "w": 17, + "h": 18 + } + }, + { + "filename": "774s-blue-meteor", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 8, + "w": 17, + "h": 18 + }, + "frame": { + "x": 453, + "y": 305, + "w": 17, + "h": 18 + } + }, + { + "filename": "774s-indigo-meteor", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 8, + "w": 17, + "h": 18 + }, + "frame": { + "x": 453, + "y": 305, + "w": 17, + "h": 18 + } + }, + { + "filename": "774s-violet-meteor", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 8, + "w": 17, + "h": 18 + }, + "frame": { + "x": 453, + "y": 305, + "w": 17, + "h": 18 + } + }, { "filename": "808s", "rotated": false, diff --git a/public/images/pokemon_icons_7.png b/public/images/pokemon_icons_7.png index 5e6421360fdbbcfce36acf687bd3395ea46656c1..e541af01c2d662037f0a30acaa4e782d6f7f8c0b 100644 GIT binary patch delta 51654 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 LNkvXXu0mjfCjCtL delta 51047 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%0Drj{7x27PK28ai=>yf2?ue6x(ZI1( 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 diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 5c97f360094..95511c3aae3 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -2712,13 +2712,13 @@ export function initSpecies() { new PokemonForm("Type: Fairy", "fairy", PokemonType.FAIRY, null, 2.3, 100.5, Abilities.RKS_SYSTEM, Abilities.NONE, Abilities.NONE, 570, 95, 95, 95, 95, 95, 95, 3, 0, 285), ), new PokemonSpecies(Species.MINIOR, 7, false, false, false, "Meteor Pokémon", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, GrowthRate.MEDIUM_SLOW, null, false, false, - new PokemonForm("Red Meteor Form", "red-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, "", true), - new PokemonForm("Orange Meteor Form", "orange-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, "", true), - new PokemonForm("Yellow Meteor Form", "yellow-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, "", true), - new PokemonForm("Green Meteor Form", "green-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, "", true), - new PokemonForm("Blue Meteor Form", "blue-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, "", true), - new PokemonForm("Indigo Meteor Form", "indigo-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, "", true), - new PokemonForm("Violet Meteor Form", "violet-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, "", true), + new PokemonForm("Red Meteor Form", "red-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, null, true), + new PokemonForm("Orange Meteor Form", "orange-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, null, true), + new PokemonForm("Yellow Meteor Form", "yellow-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, null, true), + new PokemonForm("Green Meteor Form", "green-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, null, true), + new PokemonForm("Blue Meteor Form", "blue-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, null, true), + new PokemonForm("Indigo Meteor Form", "indigo-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, null, true), + new PokemonForm("Violet Meteor Form", "violet-meteor", PokemonType.ROCK, PokemonType.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, null, true), new PokemonForm("Red Core Form", "red", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), new PokemonForm("Orange Core Form", "orange", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), new PokemonForm("Yellow Core Form", "yellow", PokemonType.ROCK, PokemonType.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 175, false, null, true), From 663e047af80f4452c440ff52838e6b60f6e5ed38 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Wed, 18 Jun 2025 19:52:40 -0400 Subject: [PATCH 258/262] [Event] W event (#6006) W event --- public/images/events/pride2025-de.png | Bin 0 -> 77209 bytes public/images/events/pride2025-en.png | Bin 0 -> 76235 bytes public/images/events/pride2025-es-ES.png | Bin 0 -> 77019 bytes public/images/events/pride2025-es-MX.png | Bin 0 -> 77104 bytes public/images/events/pride2025-fr.png | Bin 0 -> 77955 bytes public/images/events/pride2025-it.png | Bin 0 -> 76782 bytes public/images/events/pride2025-ja.png | Bin 0 -> 78367 bytes public/images/events/pride2025-ko.png | Bin 0 -> 82579 bytes public/images/events/pride2025-pt-BR.png | Bin 0 -> 76882 bytes public/images/events/pride2025-zh-CN.png | Bin 0 -> 79092 bytes public/images/events/pride2025-zh-TW.png | Bin 0 -> 78965 bytes src/timed-event-manager.ts | 30 +++++++++++++++++++++++ 12 files changed, 30 insertions(+) create mode 100644 public/images/events/pride2025-de.png create mode 100644 public/images/events/pride2025-en.png create mode 100644 public/images/events/pride2025-es-ES.png create mode 100644 public/images/events/pride2025-es-MX.png create mode 100644 public/images/events/pride2025-fr.png create mode 100644 public/images/events/pride2025-it.png create mode 100644 public/images/events/pride2025-ja.png create mode 100644 public/images/events/pride2025-ko.png create mode 100644 public/images/events/pride2025-pt-BR.png create mode 100644 public/images/events/pride2025-zh-CN.png create mode 100644 public/images/events/pride2025-zh-TW.png diff --git a/public/images/events/pride2025-de.png b/public/images/events/pride2025-de.png new file mode 100644 index 0000000000000000000000000000000000000000..8d205821b3ce9ea768b89d643a084328d626d440 GIT binary patch literal 77209 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 literal 0 HcmV?d00001 diff --git a/public/images/events/pride2025-en.png b/public/images/events/pride2025-en.png new file mode 100644 index 0000000000000000000000000000000000000000..5a81a32be5fc0ab00ea9f31734eb02a438d08cdd GIT binary patch literal 76235 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 UEMtEZP`~QZc|+}w=j?+22UNiPKmY&$ literal 0 HcmV?d00001 diff --git a/public/images/events/pride2025-es-ES.png b/public/images/events/pride2025-es-ES.png new file mode 100644 index 0000000000000000000000000000000000000000..52eba6ffe4581c4eff9ebf03eb13725588a8c36e GIT binary patch literal 77019 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�h& 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 literal 0 HcmV?d00001 diff --git a/public/images/events/pride2025-es-MX.png b/public/images/events/pride2025-es-MX.png new file mode 100644 index 0000000000000000000000000000000000000000..cb2100cd6012234884f284b1b5429c797e117f15 GIT binary patch literal 77104 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

      +r{M-@dT66GB4w#Xb>Hifsj~<$Guc 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≀hpncjP5}ZO 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 UMOPED$KY_;=drhZ&(WlR0Td4o2LJ#7 literal 0 HcmV?d00001 diff --git a/public/images/events/pride2025-zh-TW.png b/public/images/events/pride2025-zh-TW.png new file mode 100644 index 0000000000000000000000000000000000000000..aeffc354c7d53992674ba6602e7ac6290e522a50 GIT binary patch literal 78965 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 E|6~NKw*UYD literal 0 HcmV?d00001 diff --git a/src/timed-event-manager.ts b/src/timed-event-manager.ts index 163afdc098b..a6cc051150d 100644 --- a/src/timed-event-manager.ts +++ b/src/timed-event-manager.ts @@ -351,6 +351,36 @@ const timedEvents: TimedEvent[] = [ { wave: 25, type: "SHINY_CHARM" }, ], }, + { + name: "Pride 25", + eventType: EventType.SHINY, + startDate: new Date(Date.UTC(2025, 5, 18)), + endDate: new Date(Date.UTC(2025, 5, 30)), + bannerKey: "pride2025", + scale: 0.105, + availableLangs: ["en", "de", "it", "fr", "ja", "ko", "es-ES", "es-MX", "pt-BR", "zh-CN", "zh-TW"], + shinyMultiplier: 2, + eventEncounters: [ + { species: Species.CHARMANDER }, + { species: Species.SANDILE }, + { species: Species.FERROSEED }, + { species: Species.FOONGUS }, + { species: Species.CUTIEFLY }, + { species: Species.DEWPIDER }, + { species: Species.TYPE_NULL }, + { species: Species.MINIOR }, + { species: Species.SOBBLE }, + { species: Species.INDEEDEE }, + { species: Species.CAPSAKID }, + { species: Species.ALOLA_MEOWTH }, + ], + classicWaveRewards: [ + { wave: 8, type: "SHINY_CHARM" }, + { wave: 8, type: "ABILITY_CHARM" }, + { wave: 8, type: "CATCHING_CHARM" }, + { wave: 25, type: "SHINY_CHARM" }, + ], + }, ]; export class TimedEventManager { From 1d669719a00063edcaa7b8c2103a4957b7d750d9 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Wed, 18 Jun 2025 19:53:13 -0400 Subject: [PATCH 259/262] Bump version name to 1.9.6 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3e82c45af62..5ee523f965b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pokemon-rogue-battle", - "version": "1.9.5", + "version": "1.9.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pokemon-rogue-battle", - "version": "1.9.5", + "version": "1.9.6", "hasInstallScript": true, "dependencies": { "@material/material-color-utilities": "^0.2.7", diff --git a/package.json b/package.json index ce41dfc2a05..ae83ee6fc12 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.9.5", + "version": "1.9.6", "type": "module", "scripts": { "start": "vite", From 30b2f95a309870a280209533268d1ecb79e18295 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Tue, 17 Jun 2025 12:35:39 -0700 Subject: [PATCH 260/262] [i18n] Map "biome" namespace to the filename change to "biomes" (#6001) * [i18n] Map "biome" to the filename "biomes" * Update locales submodule to bring in file rename --- public/locales | 2 +- src/plugins/i18n.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/public/locales b/public/locales index e9ccbadb6ea..fade123e20f 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit e9ccbadb6eaa3b797f3dec919745befda2ec74bd +Subproject commit fade123e20ff951e199d7c0466686fe8c5511643 diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts index ff9e54fcf50..155006b3c95 100644 --- a/src/plugins/i18n.ts +++ b/src/plugins/i18n.ts @@ -101,6 +101,7 @@ const namespaceMap = { doubleBattleDialogue: "dialogue-double-battle", splashMessages: "splash-texts", mysteryEncounterMessages: "mystery-encounter-texts", + biome: "biomes", }; //#region Functions From 4de7858f00af00b4dcfa79bb5fa69a6074226e64 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Wed, 18 Jun 2025 21:19:25 -0400 Subject: [PATCH 261/262] [i18n] Update locales (#6010) Update locales --- public/locales | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/locales b/public/locales index fade123e20f..c49d936e924 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit fade123e20ff951e199d7c0466686fe8c5511643 +Subproject commit c49d936e92448370f68c5ed69ea30fec88c7f698 From 0ba3e52f77e83eb3a1e3f31759b7c09f647b0ae9 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Wed, 18 Jun 2025 18:30:22 -0700 Subject: [PATCH 262/262] Fix merge issue --- src/timed-event-manager.ts | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/timed-event-manager.ts b/src/timed-event-manager.ts index 9373b50fabc..f73c6dab1b2 100644 --- a/src/timed-event-manager.ts +++ b/src/timed-event-manager.ts @@ -361,18 +361,18 @@ const timedEvents: TimedEvent[] = [ availableLangs: ["en", "de", "it", "fr", "ja", "ko", "es-ES", "es-MX", "pt-BR", "zh-CN", "zh-TW"], shinyMultiplier: 2, eventEncounters: [ - { species: Species.CHARMANDER }, - { species: Species.SANDILE }, - { species: Species.FERROSEED }, - { species: Species.FOONGUS }, - { species: Species.CUTIEFLY }, - { species: Species.DEWPIDER }, - { species: Species.TYPE_NULL }, - { species: Species.MINIOR }, - { species: Species.SOBBLE }, - { species: Species.INDEEDEE }, - { species: Species.CAPSAKID }, - { species: Species.ALOLA_MEOWTH }, + { species: SpeciesId.CHARMANDER }, + { species: SpeciesId.SANDILE }, + { species: SpeciesId.FERROSEED }, + { species: SpeciesId.FOONGUS }, + { species: SpeciesId.CUTIEFLY }, + { species: SpeciesId.DEWPIDER }, + { species: SpeciesId.TYPE_NULL }, + { species: SpeciesId.MINIOR }, + { species: SpeciesId.SOBBLE }, + { species: SpeciesId.INDEEDEE }, + { species: SpeciesId.CAPSAKID }, + { species: SpeciesId.ALOLA_MEOWTH }, ], classicWaveRewards: [ { wave: 8, type: "SHINY_CHARM" },

      ;*4D* zxh{D81|_9#t8$xG0R@X~Q+r!BLHuLH4i2C9q`yVgS;lYozeUx|vFnm@A=h``KEJ%l z=U(zXRa`lbR$jaQ)OxBwlPVX(*xh|sOTmcrsb1KAUZj*FUAQcyW2^sDGk}R8N7JS> zgF>Tvk*HNRqNo7M*JT~sO(#{6t-;nTtj&eoXe(KxIIkPPPKRL2GrLPK9owmzzn+q^ z6aMjRTs-WL&Hd)cxRGr+*^`KIxN- z7+sw@Rc}L1;5DF)e99bs`?p_SgTomNr-Y3`^x0+Ln+BvE*y7wgk?rxil)2Yn`?aD9 z4SRQ_PNaNIl260Y^uMgCvwgzSNc-f^qg(hua|2a4c9Kv8l2ITrxZT-=rupetoT3HvPA{c(Q?VF0do$WnLOCi^1J1V>r z%-w73C!x}-!EEecYt;SvN6=bvRX+9=EIZ{|7ZSOa|6v9OHaYs%A)U1P=p;u94w>iY8<;X>1FVNpJ4G3kcT?v zz_@#vF3~9)VWR42S3}~gya8JIRMXh(mj4C%9EGmYNY+f>zD5jGl~vzUtMKv^5ceEB z-jk&mVL**{lYut$jio9L=5@#UNA>{UKIc|yTGAzM*XP>tey^!rqbWEg%bl(^w0sos z-FDl3^4dWHf}`(+L6AqYKxU9^5Y^<+K|(&4N$p$78_y*@_;9Wi5`dn3|B`J7KnYQB z3^D5lfuXf~J$k2;Qo|~GJAJ&Yhp0sbqMw`>T(At7CzrU()XL+i0~q0q@5=(9(a>!o zCsZ?Vt8xL6)1{_$Gp$X*6*Nex)CvTR6$Q57m~uJ}P6qIb4Zmle1h-&s;xUTxbzsb2 z+pv|9%xP^=A&Lcg@ARl)mJ3ocCPt|SY7Kh|Ue3Ss`=!|p_N<&$1H!PLo|a2H;cB*V zhRqp88rVo;*H%86lr?|ozr?LgNFErX$&pD&Mh9(w~nlxr3Gn}l`O z47YYl6#rZHEF~4291ph_5AX2En3SkETjxOe|8G4qAwxdWaYP|5oE>XqMJ6R-8^(Z3RTGigFq{gcbGMX zikAoCb3^Z1ZwH7TkMFIe7h9+y-u|$#*c*g$I5T!Q6nGFle6a9*&H9A7=N;>d0YK0L zwlyHQkdaFJr5K)vHIAWY9d3+*ws)8;2NrP8oJmI_-2VPTrKB%5-P;WZDjVPPLfZ>fKeT2=lmG+KeFO*sAi% zs6ZF`yLC$LqpT1B&GHfS=>)AVdjszQvj54@4&a%;35r1gwV$*usDtM<=4TmaY_?Q= zz|u>$12)h%hCovZ)s-LU(p`}}!M{P*-Wy9EnLl+=%2FRL|^0fFn-58Jly9-uw!waa@d$DME|uiJwp5x};Ns(UBjX1;Xm z3D4Vokh)gvUa0VsAA+BU4mxxImkmse=xvFU+eNLgfD#}KS7O+r>B4sqv8!}Sj2p>w zN7kq#)0bS4()}MFvb1Jyi)@E)_5P{Qj^gNg{HJ}#!WZk(MFH~mD&ymQQ|IK$Jf;!> zU%6Q=?KX%C`!5UIdJ2!JxL4_TCPMA4T*ytn3oW}KfeBRIJ?j))2rEWzVdY>+y)LW- zaX|7gd**Qj$ap*{4pu@ZdQXlB z9>|K|?L9~>Ha*0y@~U!l_=>vx(tm=*)s-q*K5boH4|4W(R`Bp`5K$G#+5aBH(ZLFV zjxold1mU@!0(!dE{Mqa(MD)pNfsa{vJCq+cY4c}yTql@w+0?}e33C(9xdX*D6A9@a z{;>}hRyQ$?7ej8DO&|$oFHUnoR3+#`mn8|6Ty+ZQDlXW?0fF^b)}0+W0X&=y$&Hop zbmMsAA!Npu7gV?B(+VLd9BVFJ|8aw`A8dp^&ATf?)^9#)&k_L5ZV0S#1F*j#XhdM4 zH?LbT!1_A7C~Uh}HB?r<)dWLww^fK%wUoK(NUbie5BzrSQ&nGb0>ilPEM~A4^W{Ae z&b{@@qS)SYPNZlKkzpkdZD?J6$@|TgA4XH{lcET?wG8j1KK9q)kb06JdbyfgAO^mcLkUh5>d zngWX$HMT|gzCua@_w1#V7>HW&i^ONd_^YL2@X2cHJJYYMnG4mf=0@f}XWJjkD9C0- zq>;JwD5M9!;T+W`(Az9769I64_-_B(|AD4Je5 z)QxmDLLfZ_9#(FGWTyI(o6U?Lu+s@EWyPTjpw?%jJftPvUmMuoSGtu(&>a(z_A=oG zENN{L_nEsv{9&yOY+T;t2L~6kxu4G_Yv07=vujG6kOLgd zfuH-}+g5`iAfO(z{gUYF>OrLAy4K%?gT3B_mst3LU^p`D^FALKJ|7)o$H+B9*~hs7 zuE>Y3IgU2i^sZe*5no|EKYVM4LHCr=so%N{VZ{Y=hyNc~L)-<=Y^#n55Z~n7i`rNrRm_Q_VSq{kO{aVN85O`5ugu$% z4gR!k5_Zym_%1OzYP6xfv}srC0v&x`Mf)(~uy~uQX36f*0%)y0{?#{;J5?SVed^XG zYTItDFaFj9=GFRz?ztf|7XL_reU`xf#f`Yy#4@yq82Ik0gCq9h%`_wjPyBXOFq5_Dn2kmMy&~~R(gTrQ! zVFcr!Qkou4izbKoDB=)|%8A&)YheGc#whZE`PVsW^Uw;1cW*Q`nl00tiJt;%Dg_U34PRU(FKAS; zegEi4{aq>>D`IGr-*KZc9(zvC0eia+IYsG@M7Yvi+VeXb+haOQ*>;s?U>}`lVV|9ydcAZA zcZY2@r_vW_-NU4i8X0N5Va2pc?5j&ClWE$V?ly8`_N3G&%Dv6mj8g+BtYHH3Np*wT zYB8B0rYYfl<$g(L=ZA2xT{;DxjXKU)0^PA!o6l_TdIOO;J&+@rT*b;-b+)L(K2kzj z=hH3Sqte(Kj)ieF(U(e?BUUTOdC>OMh!ujDKD1?n+kcLQa&;ZPr_>3hRJE&nOn=wH zO`J@M-{#JcE~M?L)pMDSpb0xf}u;dZ?Im^VWCJ#kBmC`UwJI`MPZ$%f%lcy zAZyf?^()~hV5JJ}&Zef|tXUBXKdX6Z+?71n(tf7wnlrs=L)&5D1&m+9>TesZQ6~Bo zJV%q*yX-!Z!jfyXA8E^uGSZS?%IwOMo!vCieFCb96zFl-9~y2pT}N*y%@5l*@HJOk zR5I^3%(q<5n!wq~dhNLcU_2U1 z1-@QIzVG057`v9lE$_)eKiM8$xw-CO z9t93$fw1M;y%zNV@i(Hxs_gu1rbfe7vf;2?jl`T5KqRNgLuP&BFJ~JMb$1l>tl4qo z#e7?0!LRwj+Mm`t#^I3B^ak1OfA1vWsTO>9ri4Z2IS0{MS%KTk-f?$*RUPSI*>Cs( zCoYZ(2KLofg!83E5cPWUbTQm`BPfwYlG(-v{Fw9>W8I(BN2 zhy*RUq-s}SU_^bYYmgDP%N8Vz21)wlP-M^^y?m!;I5cl9dGjxm0d8pDeJA@7TQYA& zO+4rrScG&0=auAib#&aipaYBCgszTeVz)Bb(6v)1m@T-)1ZxOzn(`YFYh(s|2uE3j zE8DSVm$%wNL8iCH3Dr8Jg#S=P;r+Y8;#fG^4UkiXAk-L(%^rvLBfmKP`@5>)cOX7S z3#?q^@Bt8{qFNfW>2+pMl-zxWMiKD2<#YkJPvUO>QV&d9|=Rz%G4v6SqEN(y6r{X+*$SC%d48N@CCI;K5gx%O~txItCtU6Ib6&>3lT zM&y|f?FoUa*fb8_vn-S{Ig?_3=qhvayaNuLSw*tZ+}aNaD33rcr#)X4tGTV`@4Wfg z>Lw#eVYjU&qvt*vIAi)iX>Bj1bv5-i>*^gGu=nU5&OqU~ZjlMizypySW_uy4BM_tg zVe8#PyeWT+hNqzMMr-@ze@ObDZHAz5I1N4?tn6S{%zpp@fSHt|J86obZX}oJC~PGZ zpbmZ@`n8BfJ^Zs~UB)Ib2Vcy|mjtb<3B`1*SsOS}|a3|z(mVrLTy}OGRjCQiU2W(fPBbois??4RZ*1KJD)fITfiU{(UDX2Wo$~tv#SoYIgpXX z%7JBDyLs+1m!!)S^5xUV-~^6*06=e;4S`7F_Rgd@;{u7TcNiJyA!*fE7g{Q$+jotd z3V$g9qzM%^+y_mTL!7akIQ9|+%vb+EUxg8Gw{R=OD`mr*z&aapg1hzke)joj22E?X zG!=AV0h|6IWK_$seEaE+C)X9E;{S~|$r4?RroS?9|36K|56m1ZcxX1l08{fD&$ZIe z#&Sz51p49K!AKwG@g>BCq5&4>IRVm&O4z4guJu1S7UtI|LO7uI#|gV6zLm#;FvC2A zP`AYG^Wds#;2-oA6L0>N9uMNFMiIOfGV_;5$3M4oYU96VM?E5r30I%3E_aBhCQC{u#I`yKC*=zxr z_Xj1g(+`e0%knC0?L1J12nf&ZI`~uBmmw10dm!h}ctCI~ho{I5WQM%V7$atB-C=jw zEbUxV;SRduA62g1)r+?O+Y1819Zcic{|eDGR_1;o??Pke&4tgF8U;P4>dRNgz##z# zjw0l)!@&R<=1r>N7ABX3b8HH8^V&FY`3jh#LmL3m9Q{8pb!TP166P5Ay@x5dgOzhi zj{U5NKT37Hl#>V(fr|0?Y^U7wW@qwz%sGqOlh5hG=K9c9;tCuz@nw}Y-<;QRck3nI z!EcK8hwTp>PVwD1fC%oNK=;vFDf_DH1m%suu_8)r5nZn^A8FDgZiUrU1@V zmHX}M$e}~WMgl#-mNR)xW<)p1D@x{l-Sg}zhX!2LWIkT=>0_#}h{3o06p_0ZEaR}2 ze>fnb&_&uV^kcJC)jZlN;?3ues~r*!UR$NZHKePNHbz4*`r>|{=acHgskRKSR#n?H z%eNo-#;`)DD!<`W-2c$(+^{*vj=Ii#Y$#OgnFf3aZw&XJF30qj^V6X+Q*scd2^}J;Q=+>S0 zOM!PHWq4XU{si8sq71(s%Hv>w5QFXqp1<;OzZPEcfrc2v%#OSNAHVWvO2|4@#O1vH zZ2#`_22i;pMsn+A`>!9H$Ex-_Gk4lkhOAspfm-)vx9!-UW3U&~Te?@bydi{-w% zIsfJOrN8Rug2(+=EMEKwb=tpvmssmDNzPv3Syz7Z=F0r~CBr#)y}wl(O^I-Fy7{7^n85-nrqWGFoA%N=2z$v<%AO@@e4|# zn0XmR84kMMhtBOXFkG4_%5voXzwOt7+o1kyF@zW~eqXs#^q2ZK7ic&sSU&!E>%#5N ze89CWYuh;)Rs+vO2{H174jeLgOui@d062>FV*ZWGFV&+MIx`j5Lv=FjT~f@j$+z)c zXhYjPrE$b6Mw<&;$U}sexAj literal 0 HcmV?d00001 diff --git a/public/images/events/pride2025-it.png b/public/images/events/pride2025-it.png new file mode 100644 index 0000000000000000000000000000000000000000..293d1f92ad886d620d2dedb305c226cd2ebe22c0 GIT binary patch literal 76782 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 literal 0 HcmV?d00001 diff --git a/public/images/events/pride2025-ja.png b/public/images/events/pride2025-ja.png new file mode 100644 index 0000000000000000000000000000000000000000..562e43e7d8e8debafcae8d361660674fddd52b53 GIT binary patch literal 78367 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%0AYvmgYKV;}-gBm-fjY5~Xf+KYut0hQRT2X{9U> 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 GPW%tfBy~ps literal 0 HcmV?d00001 diff --git a/public/images/events/pride2025-ko.png b/public/images/events/pride2025-ko.png new file mode 100644 index 0000000000000000000000000000000000000000..74be30ba4ef14dc1bed757dd5f1017aaa3e71d13 GIT binary patch literal 82579 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 literal 0 HcmV?d00001 diff --git a/public/images/events/pride2025-pt-BR.png b/public/images/events/pride2025-pt-BR.png new file mode 100644 index 0000000000000000000000000000000000000000..99269bd14951fae948d8ff7d5f07ab448204c97e GIT binary patch literal 76882 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

    2. < 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 literal 9783 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 literal 10434 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 XG(U~nGnM||RYb*4YO>WbCc*y$hwCkc diff --git a/public/images/pokemon/643.png b/public/images/pokemon/643.png index b7c2124816687387df14e98aab2dc8f781dff837..30d993791ab4e741f99cbd4c76966fc988985b32 100644 GIT binary patch literal 123461 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�pu-6YYGc9O>6Q>mG@?X>bC^6ORERFYS-67bD* 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 literal 40477 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 Pzf5fn{YO=5HsSvPpul68 diff --git a/public/images/pokemon/644.png b/public/images/pokemon/644.png index 4ccbb7700d54cdf64565097843b9cc29f6e24f41..14fce7e0bab9b4f3c8576bb6a6625c1b7955445f 100644 GIT binary patch literal 112789 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

      Iww1cqp<`m)g_-2maK3=g2wu%+X)E#}?>e{_y z`Lb}y6)c(2)ob@zWA#;oR?+dj<4)h51-o1+aK6?vS2fG)ESR>Q_aRlKdId+S>wolH zfKN`b*~bFC#F8SLLsO60l}1EBr_hGjd1`otn4GnY`ne2s3pgg)VD&7X@Ty#!yLtT2P{P!_?CNeEr3B zHR2!Nz6k8{a@29XJkfg$=$C=tET(^`k#{Fy@=QS%aJk%nUEO_L?b?iBa+2x?yiiEG zm9PFQG3LRA_s0;3Isx{-z5@8+UQzdxI!S3)wg-@Q2$A&&{h_9$Lk#B^Akh{sO=vg9zJ@pJf=sP#_ry!0(ap;< zG)tyavKJ#iJR3t=dF_UDdc!TJt6eI5`l}{43MxP4B-#fYm zc@?ZAjYz0*p|bO+JCCJrL(kHbz@top;~VSEy7fV#c9}TNwBt(B9Q$F){OEM{Yyyp`h^JFs{pUY>@X7rCfDm~ai)2MM zzc}vy0Pw}cze=5zt~RB0gT^<$&FF4GDav;3@C}~}*cYMu#9tb`Iudh|%ZYEs2D8=z z7F>1i{boV}fJ$CmmRwyCi%$_^?!nx}FCZZv8Z@8_Jw|d0)<7p+eJrWeOdt7wC3G(v z!NEF3;0h_%SIakm4xta5uPx`!Ymjr@1 z(3=gZnOBjZ;Uo~WG3COy*>{+~(@3@=*m$u9VmE9%wyR*LSv`A;0~xpSsw60=d(ng2 zgL+)~paug}bNMIg=&wn`i$93?n4XHoM4_oktX2_DV;2e^``%^0JI;XfU>me^XPo zdn@5$!ivjuKdgp$3Te*fP7>XkpIxh?dhX_gyYS51O?V#w5bPU@wUr{o5h!q^X||yF zD25ZF<4dsO;xvV6!Bm>^)0M%+=l6z=ZCZ&jT+xtE-m|a?RNkb(u$&{MgP9_S?RRdyRZA}ay170jnUO;HZVT>+< zjee+5B3%O1H3}htlEyzJatdYZc;`b#tVc-AlxBJl#-bR`l&qG4gY{U>N*4N^>UK_m z(mwNILMq=Snmw)@?|*7BEZ{WgNU1E#>>ow{<5uzdz5pLbK@;KYXJS9@2N#uacpqne zk02e1C?!7BbL%sD$~@J}lZoFTkn7lwpADG1&b#825ErHCKiKXlSQKJT2#`t0jW(0m zyWhIkfA$2>*q-I$>m0Mk;u%!weXfN9TGx z$K92cXe*rp3)+v6Cd50$E(J=xZU?Y5u51@sZm$fxJmuwwtsl-i3qDYI+o+`?mTTOV z&xib(C~(ojo3SwiBvs#oL4uNdmG?jw4H|l3(4eo^uxSGNda4t&+p^^ynlsz1W@JVy zC|D@~o|P{#L$l1zEn5BFVQ;C=Cjef})xA$?1GM8oy)klnx$G`=pPRe7t&)9JTbvyD z?neT(SAtD)=W;yyX;jCkL9Zz@9cFgN1S(u{PUYynAO%2$4@moG0e^a5zs1vW>0?3^ z8PX*WS0`J{Yb`9kMlqCiAh3MD+oGrMhd%rvsCryxZVvO3{Hc{7l39hK^-urdGandA zmqZo(n%%?mUQh)jJ=-i_-+&^=qVSG4@9n&$(R%AGMrBZK@aQVjAef-@19B4k{+#km z%xNbHrU;A0aEDY4G#~ogUpWRbWAI3^_iNZ(N30V_aG~a6-7oG{uyC!vatoU9KhZ=X z2MTCblG?Uc26g8o{#S})=L)uk_gP$PZu$i5@V9pvu0Ik=fQiI$zG6>B}pvB|^n7B~3WOWl1 zxMM)V#StJM ztu3OP^y`0Uh<`D*-slp~W+?hY$Gpw><~SV(8ODMNmk4T0Yw(UGz_f^w(DJupZp?Ly zg$CA|9sHRN-!Z_9pT*ZUuMuI|+$=F(`>M`bY1i?{^#h<{mJNi{5zQ491cLjZ-Qc(U z=KUJSz>J%&_WRIm-u&kM$etk+W3zJASI50F}l(bTnP#VS;d3- zX3?7JUsMwP#%tMAVT@svYI?SH8GqM_L|SX_0j9c9eFj^j&v}();@7W+2=U8}=OEYr z4

      U*EhNo#ikhFidlG}kj66G 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

      B>k`JD1)d$W4Nn(p!2VFlA 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 literal 51803 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 LNkvXXu0mjfYVY>t diff --git a/public/images/pokemon/646-white.png b/public/images/pokemon/646-white.png index 0de658c5a3954c45c30aea37f7ae6d6d555733ea..9907f8e278ca7b475bc0c08312e6aed9b6af209c 100644 GIT binary patch literal 214721 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

      OqEme50b13LeaOpDtBpc(AeGTe4PjrL!Ov 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�fQ>nx419x-xx; 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 P#7{**L%#8~)rbEF`Lq`q diff --git a/public/images/pokemon/746-school.png b/public/images/pokemon/746-school.png index e9d8bdbd94404c6ac6d2b66ee28cdfce732080ab..c592b71a66a0cf313ed726ca4e3de87f87a8f910 100644 GIT binary patch delta 1461 zcmV;m1xot(3cCxC7=H)@0001NTH%QR0004VQb$4nuFf3k0000sP)t-s000010RajY zClNMK5;;^5LwyrSgcoMUJ!aTJYTtQ;igcXzL+kT$@b;Y3{ienD&(YKS`}=6g0Dk}g z01|XkPE!E?|NsC0|NsC0|NsC0|NsC0UcrVw000FQNkl+RbM!t0-8HkLIO>HeOHq zE*`^!rY1WFK7Y*i3a{_uk?+(bcpL(Ny@k*C2LED)ALi&Ieg?qbdA`I~^vP&rGJGgT zc~%q}qR-*?0$TzE=0}##DF`3_=~_wHe@bi8rRp5A{dW$*Bg9 z;jHlCb&2o5C$4rE#YR5!V(?&xzZXuI zYVsp0>2?d^O@s?u9I*N_{FH#eH(>yp>3hLPx_|L->WX%eaOZZeb@2rK%#No0Kngs{ zVE97sEONQ5Yp$R9Hp(`3HeCG~nqx2gV$HO|Wa;c^SuB2RE#*^yY@ky&M*QC36*;Ks z%#;r-1SeUVO6JT4K;?tQBXrUqlbd3LT$%w>D?ZYtUFnz3M}U*g`S2(F%z9-2`=IIz z@qa{@Ie)%#`spjv<-y_PYF&zN@mwl4(Pzss>CjW~DYc|S$I9%}VUa?#T#-zdc;lm% z;yEL|E=?2hs!C|YhcA*Bri)-oF6%!tdNr|P-!#5pS_eg&T$uhqrY|03pKJb+sx9oy zXWgndfU*hWY@*PdzIbSE)ot2Ui&nOP)PE(};C*;_*yw8O7eJ$C>{AJcN>G1fin?}|4WA0Edh9tM77vVvd7xG)1Ae>%I`J?Eo(zUSc| z<4G;jHIT)~=RJ-3dNY^O9G2Jv-H`C=;SbAn2xYl=p;bN>n|EYxkWHnVB0i+d`G0L6 zuH}Eg_f%Q?`J%)3KKcuHfyW~cVkrVFT#&h`d@q|;^C6ubXwQcOw;vc7+JqcEzN)nY zokh{j8~jw34yQF_cZ_!ocXY&R=wIZP?#?__EUL&_jvm(ZYBE zx!{-4&qMEKtN7L+4imx(^|AaR9)Amm)yp82qV!%5pyq?h9c1r1hxoY71?s@$;c5VN zOQ!*JCY9rDeY|_er##hZ@-4sFd4uEtzZ-lzCnp{k`S)**tM1m`Hy(jAesAR8<_`}K z%yvP2CjUMkloCdt9Qm}%OZeO2!LAk@42`7ANI#X2Co?>bzjt6miDdYje1CY#og6jv zkk{X*{6O~}Y8Opyt1Ly=d_1?g;`^$!<_jeM;8qLAnJc zK5YQFy~*t{X0D06{Z@N)D9^4=Ps}Dau=RggfAKI=s4kozuj1|KE|u!p=*BuFr0Ghi&yAA P00000NkvXXu0mjffgkd_ delta 1393 zcmV-%1&;c=3-}6<7=Hu<0001~stkw#001peOjJex|NlX1-xElLrp5Pkoc5g4{c`a3 z0RaID7AF^G#u7PHd4!7l`}@z)(?jd?7JEvU00001bW%=J06^y0W&i*L`AI}URCr#s zma%TzRuqOAEfmy=3IoCEA|2maqJR#C^#Wv%pdnKY!VeHYK!59rbOli8hNjX$t4gD>0FuwEiKj$6_G9Kzl+t^7@y;^%G z9)-6P@8eGVvoRj+fIk`d!*P2T9?{>C$Nz`dbALkkBL`#>R@;9(Z-{nH{94V|tN75{ zA3-I57FPyB41XL!yz{W(xRN&}EyEF>fC~Oh0S#mRpaH{4oMiEkud{z+E_ssrGBKzv z68c-TtL%xF7d%OtOkmUo#A_u+J*bEynKvdh8DoQ=m-ssKl9W$|BJ5-9p07*h8$r%D z6wV6WK=Gq{e$IR&Rs5ftmnFW2#EXKLSD8-=+W%*cbAM6rExK?7nsyTCYFt7$A7|sF z%nwG2_rO^sbWu%PAzW84$7kNtJSsVValsn^Zd>yw7X^=Q0Eo8c_p%<^WY0Vo7`gTl zPdy7WdEE3H;5K5WHh6)#nxG3(wy(#0D3`zkq==T3HoDd-d%$P(^in%-QqVNz zkLPlh@%`86_GOB0Gk&$s_?5~}|8vrp_k0w`*@$XV;BzToyG`i5TD`y374KX~h;mfJ zO5`0y2J<$OfxQRNyUCvLwu9(sej%@>QeKwF-=`$Xev!cUH}SRVS0K7sp2c}DYq!LA z(0^0*i{x&7qwPQGo!0#>fDTORR#~;CO?-#^DEaLT9oQY&=L1a@KaGQeS7sf0r~Y2A zKlCX79ogpxmZ$^1n#QxB;Q1X~|N9Xjet-9w?2Cms=&I~doCo4fw)Sp6CIG*G%d3s9 zqj~7*7bS|yJip`#SjAdrai#rFWR`RhEFOPUVn&z>NJFUX%x z+3j^Gc057Mc-60r7|*}XYr+M>tTdX&aYS1?!(#qP`88+W0}H^$R?M0S?GLJ;&wt^$ zV17aTPqy#cLv*LiPuMh?O1J4vE(lT1@LeM>zcMWmTL?na{@J_{fKcaYn`#O=|qk5IYE) z_Jh_oKGfev76P=((+sxpCVC-am#z{b*uILlJ=4avDY_*OPu~3=|P6 z3GxeO_>T_a4z}3=Wj}kmIEH9Uti9AJ)}$c78qm==vE|JF|2OaHNbUT>=dP=FctY!k z$tyU`D?JS6n@n8idu_^=gWS*DBE6PQ(N6RDWvKRHiHv9K3oifT!YiVdTOH)wEL+ds zUR=4dwCY-=UVv);?_+;cM56M;xK}y7RLb=|ohdje`gK5YZJ36A_Qs}*feI_sj!rO5 zzgI7Mp+&6d{i3QoeVs@_pN&R4Z(Uf|Boh4eVe3TJaOvGnCy$HwCf1dQAF8s~o}x1M z)Aa;-6`PihHHZFfI-yW@;bF?{jEdzch95th{#{TKmG|Pshx#Au6wO349xmomXDL1J jvFqdU`lD@pFMI5E@8C^4uq3kr7yt~Ou6{1-oD!MR>K-HbupgDgATy;ts_`4-jI`o7b$_+DFJE zl*}2sC3Mo#XDE0~CEGFX4-e+kodkVSN*L#P*Afvg$3#Shyg-ZwnvgBUP~&_spGZn7 z5cPk2H1?=*W)0=Ys&^fvq3+SUa;w#L_m(c)`qUCd@U^GvW4B3(p2H%TPRN>{AFI#p z#=X5rG4SaH;6C4H>vfrtONX=913;4h5Hn?^{W2<_>?#Orwyfd0skvFUX6~HTr#8NI z28lVItzl)1Gm#i$zS*@>kXUnQ5BX-vtlB=S4$!8Qidm`dzcaxrh)=)J)g8swM02)& oj3W@II{IgB{Gqq;4MGj@2hb;Nvw4O&1^@s607*qoM6N<$f^24?L;wH) diff --git a/public/images/pokemon/782.json b/public/images/pokemon/782.json index 9b8f8e93d39..2a08877c58b 100644 --- a/public/images/pokemon/782.json +++ b/public/images/pokemon/782.json @@ -1,41 +1,1010 @@ -{ - "textures": [ - { - "image": "782.png", - "format": "RGBA8888", - "size": { - "w": 50, - "h": 50 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 46, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 50 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 50 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:350889f3e7d7ba0c8471435ab283acd5:fde1ef9d118b98abfede0d4980b8ef8d:d07862436676aa228a148ee1f1d82a8f$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 50, "y": 109, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0002.png", + "frame": { "x": 50, "y": 109, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0003.png", + "frame": { "x": 98, "y": 109, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0004.png", + "frame": { "x": 98, "y": 109, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0005.png", + "frame": { "x": 49, "y": 161, "w": 46, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 25, "w": 46, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0006.png", + "frame": { "x": 49, "y": 161, "w": 46, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 25, "w": 46, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0007.png", + "frame": { "x": 146, "y": 162, "w": 46, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 27, "w": 46, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0008.png", + "frame": { "x": 146, "y": 162, "w": 46, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 27, "w": 46, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0009.png", + "frame": { "x": 97, "y": 162, "w": 47, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 27, "w": 47, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0010.png", + "frame": { "x": 97, "y": 162, "w": 47, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 27, "w": 47, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0011.png", + "frame": { "x": 194, "y": 162, "w": 46, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 27, "w": 46, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0012.png", + "frame": { "x": 194, "y": 162, "w": 46, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 27, "w": 46, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0013.png", + "frame": { "x": 1, "y": 109, "w": 47, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 25, "w": 47, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0014.png", + "frame": { "x": 1, "y": 109, "w": 47, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 25, "w": 47, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0015.png", + "frame": { "x": 1, "y": 160, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0016.png", + "frame": { "x": 1, "y": 160, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0017.png", + "frame": { "x": 50, "y": 109, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0018.png", + "frame": { "x": 50, "y": 109, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0019.png", + "frame": { "x": 98, "y": 109, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0020.png", + "frame": { "x": 98, "y": 109, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0021.png", + "frame": { "x": 49, "y": 161, "w": 46, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 25, "w": 46, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0022.png", + "frame": { "x": 49, "y": 161, "w": 46, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 25, "w": 46, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0023.png", + "frame": { "x": 146, "y": 162, "w": 46, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 27, "w": 46, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0024.png", + "frame": { "x": 146, "y": 162, "w": 46, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 27, "w": 46, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0025.png", + "frame": { "x": 97, "y": 162, "w": 47, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 27, "w": 47, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0026.png", + "frame": { "x": 97, "y": 162, "w": 47, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 27, "w": 47, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0027.png", + "frame": { "x": 194, "y": 162, "w": 46, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 27, "w": 46, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0028.png", + "frame": { "x": 194, "y": 162, "w": 46, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 27, "w": 46, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0029.png", + "frame": { "x": 1, "y": 109, "w": 47, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 25, "w": 47, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0030.png", + "frame": { "x": 1, "y": 109, "w": 47, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 25, "w": 47, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0031.png", + "frame": { "x": 1, "y": 160, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0032.png", + "frame": { "x": 1, "y": 160, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0033.png", + "frame": { "x": 50, "y": 109, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0034.png", + "frame": { "x": 50, "y": 109, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0035.png", + "frame": { "x": 98, "y": 109, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0036.png", + "frame": { "x": 98, "y": 109, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0037.png", + "frame": { "x": 49, "y": 161, "w": 46, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 25, "w": 46, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0038.png", + "frame": { "x": 49, "y": 161, "w": 46, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 25, "w": 46, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0039.png", + "frame": { "x": 146, "y": 162, "w": 46, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 27, "w": 46, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0040.png", + "frame": { "x": 146, "y": 162, "w": 46, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 27, "w": 46, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0041.png", + "frame": { "x": 97, "y": 162, "w": 47, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 27, "w": 47, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0042.png", + "frame": { "x": 97, "y": 162, "w": 47, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 27, "w": 47, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0043.png", + "frame": { "x": 194, "y": 162, "w": 46, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 27, "w": 46, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0044.png", + "frame": { "x": 194, "y": 162, "w": 46, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 27, "w": 46, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0045.png", + "frame": { "x": 1, "y": 109, "w": 47, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 25, "w": 47, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0046.png", + "frame": { "x": 1, "y": 109, "w": 47, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 25, "w": 47, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0047.png", + "frame": { "x": 1, "y": 160, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0048.png", + "frame": { "x": 1, "y": 160, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0049.png", + "frame": { "x": 50, "y": 109, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0050.png", + "frame": { "x": 50, "y": 109, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0051.png", + "frame": { "x": 98, "y": 109, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0052.png", + "frame": { "x": 98, "y": 109, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0053.png", + "frame": { "x": 49, "y": 161, "w": 46, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 25, "w": 46, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0054.png", + "frame": { "x": 49, "y": 161, "w": 46, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 25, "w": 46, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0055.png", + "frame": { "x": 146, "y": 162, "w": 46, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 27, "w": 46, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0056.png", + "frame": { "x": 146, "y": 162, "w": 46, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 27, "w": 46, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0057.png", + "frame": { "x": 97, "y": 162, "w": 47, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 27, "w": 47, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0058.png", + "frame": { "x": 97, "y": 162, "w": 47, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 27, "w": 47, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0059.png", + "frame": { "x": 194, "y": 162, "w": 46, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 27, "w": 46, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0060.png", + "frame": { "x": 194, "y": 162, "w": 46, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 27, "w": 46, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0061.png", + "frame": { "x": 1, "y": 109, "w": 47, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 25, "w": 47, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0062.png", + "frame": { "x": 1, "y": 109, "w": 47, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 25, "w": 47, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0063.png", + "frame": { "x": 1, "y": 160, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0064.png", + "frame": { "x": 1, "y": 160, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0065.png", + "frame": { "x": 50, "y": 109, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0066.png", + "frame": { "x": 50, "y": 109, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0067.png", + "frame": { "x": 98, "y": 109, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0068.png", + "frame": { "x": 98, "y": 109, "w": 45, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 45, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0069.png", + "frame": { "x": 49, "y": 161, "w": 46, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 25, "w": 46, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0070.png", + "frame": { "x": 49, "y": 161, "w": 46, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 25, "w": 46, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0071.png", + "frame": { "x": 146, "y": 162, "w": 46, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 27, "w": 46, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0072.png", + "frame": { "x": 146, "y": 162, "w": 46, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 27, "w": 46, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0073.png", + "frame": { "x": 97, "y": 162, "w": 47, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 27, "w": 47, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0074.png", + "frame": { "x": 97, "y": 162, "w": 47, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 27, "w": 47, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0075.png", + "frame": { "x": 194, "y": 162, "w": 46, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 27, "w": 46, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0076.png", + "frame": { "x": 194, "y": 162, "w": 46, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 27, "w": 46, "h": 47 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0077.png", + "frame": { "x": 1, "y": 109, "w": 47, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 25, "w": 47, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0078.png", + "frame": { "x": 1, "y": 109, "w": 47, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 27, "y": 25, "w": 47, "h": 49 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0079.png", + "frame": { "x": 1, "y": 160, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0080.png", + "frame": { "x": 1, "y": 160, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0081.png", + "frame": { "x": 50, "y": 109, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0082.png", + "frame": { "x": 50, "y": 109, "w": 46, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 24, "w": 46, "h": 50 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0083.png", + "frame": { "x": 148, "y": 1, "w": 47, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 23, "w": 47, "h": 51 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0084.png", + "frame": { "x": 197, "y": 1, "w": 47, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 23, "w": 47, "h": 51 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0085.png", + "frame": { "x": 1, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0086.png", + "frame": { "x": 50, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0087.png", + "frame": { "x": 193, "y": 108, "w": 45, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 22, "w": 45, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0088.png", + "frame": { "x": 193, "y": 108, "w": 45, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 22, "w": 45, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0089.png", + "frame": { "x": 148, "y": 54, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0090.png", + "frame": { "x": 196, "y": 54, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0091.png", + "frame": { "x": 1, "y": 55, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0092.png", + "frame": { "x": 49, "y": 55, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0093.png", + "frame": { "x": 99, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0094.png", + "frame": { "x": 99, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0095.png", + "frame": { "x": 193, "y": 108, "w": 45, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 22, "w": 45, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0096.png", + "frame": { "x": 193, "y": 108, "w": 45, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 22, "w": 45, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0097.png", + "frame": { "x": 97, "y": 55, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0098.png", + "frame": { "x": 97, "y": 55, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0099.png", + "frame": { "x": 49, "y": 55, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0100.png", + "frame": { "x": 49, "y": 55, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0101.png", + "frame": { "x": 99, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0102.png", + "frame": { "x": 99, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0103.png", + "frame": { "x": 99, "y": 1, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 22, "w": 47, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0104.png", + "frame": { "x": 193, "y": 108, "w": 45, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 22, "w": 45, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0105.png", + "frame": { "x": 193, "y": 108, "w": 45, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 22, "w": 45, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0106.png", + "frame": { "x": 97, "y": 55, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0107.png", + "frame": { "x": 97, "y": 55, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0108.png", + "frame": { "x": 1, "y": 55, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0109.png", + "frame": { "x": 145, "y": 108, "w": 46, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 22, "w": 46, "h": 52 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0110.png", + "frame": { "x": 197, "y": 1, "w": 47, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 23, "w": 47, "h": 51 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + }, + { + "filename": "0111.png", + "frame": { "x": 148, "y": 1, "w": 47, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 23, "w": 47, "h": 51 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 50 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "782.png", + "format": "I8", + "size": { "w": 245, "h": 211 }, + "scale": "1" + } } diff --git a/public/images/pokemon/782.png b/public/images/pokemon/782.png index ad461fe00ae1d0241cbeaf99a4aa57321a9c676e..093d0189535e0891dd505593a8914e9661a49ebb 100644 GIT binary patch literal 3065 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 RD*XR9aORXFroqZH?%%wYv>gBd literal 569 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 M07*qoM6N<$f^H>civR!s literal 841 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 literal 1602 zcmV-I2EF--P)p;nhmr9|>TA+K~U7-&M5p^l#rh-sXSh27m8Lddb+QoGZ=s!mSNpfIQpA~-#Cf6{8F=kl|8}k4 zY9nUG6w5?gS=jG?^iqEt+I7*$Pr-E}izBVv@851-==W;?fXxiFFzshS!>blUM>qzQ ztSPvGQp#i#-+cL8|F%_Ph-E%(qLo4+btLcy|G-+CK!bI(yqA67m-38ZHGJL4QH5zu6`n6@mahG~ss0N3KEpBp^Z${aP;2~Tl`uR7$D+%=Z+&HMn z*S2d|Lq|hX{-(q-fY&`J%4Q4~yDA7FP$BgDZ76ebQ#T4FBx-%&b)}ScEbpt(HmXVq zh9xeZHz3(`>%A3vFo8yuA2htkuz-#{-U~4-O0SzjGfo@UWus(q@i*hkNc2fdN>14_ z(pXeb9hb3IvaB*X6IhY5<#kI|3ZGZ1Ha6k4&!^y9BsE;*F6{~QG&Fdel2ti|?YiU^ zW&Y(XB&w->4GRXu=NZ`yOFRywrC+2i4KHr9N=5|WyAjQuI>SV)sxkj%HyvOXThG&e z3OxWtbihew!?YKt;fS`Dh&I~w*9ZTh8m7-0jy4cayMr%h<)}LYy$HIUS?Q%Pw@$d! z^SE@?b=^zz;T_%{efl8*^oB#Q=fZ`J7F0Ft{iya}?Eep}%NqUdj(YBJcSk9I9=vmi zSW|zyANJhNZbyyy^H`k1-ev-KzKh`Q+MjM`=7)UAF^J zW#|))J=&jz!^(YV`VXFT&bS>qs~A#1ioFH{kHQ4rD+Xb+DBr!*`ldrwe?&{v3xKHS z`<&&@WQC@!VNt zDWaRM!ZN<+b9;Nky%CX}g{C|;K5(o;RRvremZ3IRiw0*N-q?4rRb&`#N@6Ee{MR{a=q9(9Opu5(>AJ&If*hNe<6WYP<9nQl3p zI-E*ammc*Z_(x-%s-A|bj5lvM0lREM+Kj#;58d-Iq|iiMb$Xy(3cUmhfi-_A9<_vx z6MP+}AtxkT!$Z7YsD{VT03aGqISaf5>Qz_m1e*L`cgoc{VYK%%hde2Pp<(Y{3@M)( zIbNsv9j@yqGYiv^N1QNzMvCBwdXMgbVd`_vBq0P0@5it~bSrB1(eRfeI}2Mx32X|N zb3f*qXNEr<9oYu&`&KQfyhKHwt)BJ^8z(kI zKKG8mK1VHqW|BIA<3OAcMO!#npM{U7p{Wk)R=r}25?+X*Jr8b4A;ExL1h?lxqxySu zOX`m8 z+FV5}$mAUZgTdfw&;T_CfDnwt{qybMYvZZ%tWrUE?5vYVgMZSDGsP7sJNfx;o&3rg z*eS@)1W94xwBIe(UrFHn0D&c}Lki|gFd^&y1+#_k&OZ6~!2kdN07*qoM6N<$fl6q$K(&%4om0X20otwa7$!`6=$Xc~3p+O_(;REqVM&_XFeWB(t~~?=14H zFPObbQ}$u5|NCQ-L*Ek@?$S4I=|U>TyB5qb7VZ`}z2j8a>tiw5sdJZgWfZL|S{pZK z+v)?3`6pRd?X|zpk$k+>tMH8X`(*v3qpPzu7q7U>D)guM?&GzlsvE_^!n_O2Ty%Kb z7luXVthi+I@B6{7HK&&@n4WkqUEtx@2)Q{*-;DdN)Cg6pX&!4(kvspqLA^%y0?WLe apSU-5NbGa1x^DsWGJ~h9pUXO@geCxy<*Swe literal 370 zcmV-&0ge8NP)g!A+10eghO<-VyWR};r6Zu$2&<#}9`J(JiEHDHtEY~Sn6MqzT^qr6pg(=Q zg~Jq*GICjm-O(o|keZ_#7Gp$0QG_!3>dg5>%sFG7Y$>WH#w^dQi@{DSV6vy=23Gfc zy+g20U06y6j7!(YzHBaOr81?l?9R*T;787f|8iw#;>y(eF2L@XITf}X*GfR)s!EOV zuZC8Lkw;=(ET`QSX0Wb0>`I(@ovv@>9&m0Q@EnkM*Y`2d13q5h02;gf16ynrNhp1A QX8-^I07*qoM6N<$f()3ZYybcN diff --git a/public/images/pokemon/841-gigantamax.png b/public/images/pokemon/841-gigantamax.png index 69c53677722c03ddb4566688d272324c3483df58..07121b9c12fdb374645b17745c040c64746f844b 100644 GIT binary patch literal 1128 zcmV-u1eg1XP)Px#NKi~vMF0Q*5D*Y|CMYaOC_;8Phb<$EGbxcgJf<-@jY28EY%$U~P1QtJ#dksI zL}odpJ+rK0#)?SdyH@GNSpUXq+R%&t@vHgy`5&yNZU6uP7<5ujQvm<}|NsC0|NsC0 z|NsC0|NsC0|NsC0|LNRBHUIzvs!2paR9J#7|p@n(1={xP&|TO+{yV;CVWDzp-h2ji%41)e0J zIgZx^5-c&IL_0cXuFxSw56(IG3*iLchKL7;zkov1nD!(d6n6x>)?oDRlza3}0<7Yo zdVSw_%d+(6k}v8;FyqT|1}|&h-tS%4UE`C57V!Js+&}_xf0oyk=WqA>%iKJmo%iQ) z30q%R4fGao%bRF_Iyg~jNjiJLMUd!w7mAnjJ%^S5}&3hicjyJgIykDw$ z2wZu6l>qP!FZ?>b0pwSF^S^jsE5P`#`RW9euQZ^z7`XZlu!&~_^L$>z+6-qN1t9Dj z37}{MYv(z~>3^uVc$*~lHLU%nFfdTp`Gi}FnV)`RH%w(SG(Vov1in8#E5rvyfQv$) z=mR-=i30xl`N;&#);V;E5`|}`j||wuUT*@*xaa+JBm-1WzEyVk#M_AL%+C4aV*z|J zTQOi^M#m8aaN=i$X|-f(IZmTlT#N9Uf(G-VB5Q2qE46BKYs$~WV`sV;N0Z^O1&DHn z#A0H6-zd*Gc2WUrXbYioCTj~Bc}!r6{Ag^#0m`my#)|=}AM%so!P^f!XG7^^1`ZWKh)qihxWMSFnPgaH{1U zW^BGr&hw+bK$N%V@q%yk&0ftLT8(dku6x6mi*^_P`YHrgd^#)bh7;cLk!Xd3fZO9^ z?6vJ_!)2CqMXM4g45W0Rk0c zJv{O%%)E%PR1jWf0PeaneKp`FX0^?ij(IOUmKt!k=87ow1L$aja|R(! z80Vp_$WsXexZfUT!GH@%z=d=W7T%Kp_QA7ozutkEK;aVQRET*p@YQvW`Sq4i_>9s; zP#A#YY{&RJ0p>$&Bm;Dy##8Y|KzUh#+zL7GRX`>74Fu<6D-;5#(C2X^5Y`d5ll~2l z|HlWBZH6<2&8ghDBZat`r(k;LRBv!{H!x1PPjrgyK9~gd!mQbS9$v=h1@^b{M+#ek uqoaV?lfaMnIb0-G!FMyd>QGtgHU9uBnXEWkAi4wq0000U literal 1110 zcmV-c1gZOpP)EF=r@2O5>`JVjF z&@blQ^8M)dd*?xNu4TjTI(9*o!9ZPD0#v(DO5tG@R4;A;2BiS1gZCxCdj@~}ZVR~E z-B9Jg1;&(kt?1$+_5fuKy8jz+1_1UOA$<)dtw+{7#Q@pUU}P&=2u*?@7+Hb4Es3<+ z0rJSE|3oe`3PuN!WnVGqP$zzOGx#3WL`~&dEOUkdS?BOPJ;RaI{?A`b};;*o~AEs|IOb${pH@#;$i4IR=E?tI(_4( z;l6Mz<9&Jh`q^2y?^x%jQ~&4cVJUF$s2q6XpM|BsYXGklcvdY3K1-`drGOA=>Upj` zaK9-BDo#n@+zK3)x%Hj&7U0jaV1Y}NxdPu>2urX5pf5po#Q!l}0uT=I5Nz=H^YYDHi?BH9jW zM3WsU@t_@jqFoFs;}ZtM4n3Aq9{2fiqQMr1xkW%?rRVZkNX}3&V-Sr1oT8QRf!p$G zY7F>Zt^u@Hz;OpRnsv+|lB+^&>p79(4gdui8o-Hul?4g5ih#3a1hYW6MWAK|!@}PT z0Apzl5P)7O@R*{Njq2;cj#%mc*4$kW)YbkRV4eX4fm;af#vg(1B@bWjCTb0+Bufxa zrS8Rzf5E}829Pg5Tjc=!Y`opmqsRc9`vBNMO~F9U)3 zNCCY10}mt2Ad`F~4EPeC<9B|2?M{mLz!Y2p0svXNQ>Hi?AcyNgC5E^H7Fv8|0#5By z(Etd;5dF{yDnyqcqbm1x0E{E(zeH%>2r8e7>LqxAf{lnQ0EGAmgjm_g5OEpDSqfn& cns8D7AN$D-+V%wh%K!iX07*qoM6N<$g0emOjQ{`u diff --git a/public/images/pokemon/841.png b/public/images/pokemon/841.png index 5e665960df446f48d17c3f048cc2be0ab0183b18..e7329f2eb97a0ceb3eca3601414a279a300bb82c 100644 GIT binary patch delta 844 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 xp2AvS?iPfx002ovPDHLkV1m+_9#8-P literal 1110 zcmV-c1gZOpP)EF=r@2O5>`JVjF z&@blQ^8M)dd*?xNu4TjTI(9*o!9ZPD0#v(DO5tG@R4;A;2BiS1gZCxCdj@~}ZVR~E z-B9Jg1;&(kt?1$+_5fuKy8jz+1_1UOA$<)dtw+{7#Q@pUU}P&=2u*?@7+Hb4Es3<+ z0rJSE|3oe`3PuN!WnVGqP$zzOGx#3WL`~&dEOUkdS?BOPJ;RaI{?A`b};;*o~AEs|IOb${pH@#;$i4IR=E?tI(_4( z;l6Mz<9&Jh`q^2y?^x%jQ~&4cVJUF$s2q6XpM|BsYXGklcvdY3K1-`drGOA=>Upj` zaK9-BDo#n@+zK3)x%Hj&7U0jaV1Y}NxdPu>2urX5pf5po#Q!l}0uT=I5Nz=H^YYDHi?BH9jW zM3WsU@t_@jqFoFs;}ZtM4n3Aq9{2fiqQMr1xkW%?rRVZkNX}3&V-Sr1oT8QRf!p$G zY7F>Zt^u@Hz;OpRnsv+|lB+^&>p79(4gdui8o-Hul?4g5ih#3a1hYW6MWAK|!@}PT z0Apzl5P)7O@R*{Njq2;cj#%mc*4$kW)YbkRV4eX4fm;af#vg(1B@bWjCTb0+Bufxa zrS8Rzf5E}829Pg5Tjc=!Y`opmqsRc9`vBNMO~F9U)3 zNCCY10}mt2Ad`F~4EPeC<9B|2?M{mLz!Y2p0svXNQ>Hi?AcyNgC5E^H7Fv8|0#5By z(Etd;5dF{yDnyqcqbm1x0E{E(zeH%>2r8e7>LqxAf{lnQ0EGAmgjm_g5OEpDSqfn& cns8D7AN$D-+V%wh%K!iX07*qoM6N<$g0emOjQ{`u diff --git a/public/images/pokemon/842.png b/public/images/pokemon/842.png index 468ca88562e45fa4f14a6dc789227c56f4d370ab..4e3fec8ef1b7ad2cf0c0edd8c072f7e55ec4cab6 100644 GIT binary patch literal 936 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 diff --git a/public/images/pokemon/back/1011.png b/public/images/pokemon/back/1011.png index 3e23fc1ebe31b6daef345dad43e6013f81e21f82..ab3cc75482d184c28178eaf07ea7cd092f0663c6 100644 GIT binary patch delta 570 zcmV-A0>%B41?dDXiBL{Q4GJ0x0000DNk~Le0000h0000&2m=5B0Qq>|U;qFB0drDE zLIAGL9O;oEJbw>#QchC<|NsC0|NsC0|NsC0|NrHUo~8f*0nbT9K~zYI-PGH9gCGn5 zV4Kz?=;Zw$cR6sfmp@YHfs#l zyPizA<5%x`WplCl%C^^|JzroCwPgyYwqmn?&}qVhz1*8vtx>$9f}vTsqD0J`QqIq3 z&dK6bE*h!xo zg>*^fUw?bjp(cV831)MQX05m) zqxv|?Li_Q=M)N`TGFJ--(5Y8;kbX9kuj^c{&VhQgL&|%~6t_Q8%?SQjl8X1Wu}HVZRXo{F`M z>n!Ya3n?WFJAH!I?N;;n0TB}!!P6r|M6`a{JZ|vt3t|!ZMUBM=D^|iUuA1*+zYviX z?CL%dSmCeW^jW+o`sf!yWWKAPu6I>OG`wC4~( z2hyxi9o0?Mq{v-D0q70@q!X1V+1M$zOF9FUDyJBQ;VT9sgn?6tZYbr7Tac?#=fC?T zrHo%AP8EWC4>crbg{aiYf3B$2?N$0kqs=36;HchsSICey{D`tFy9@?O<(0=oEQmn@Mr1Iklo0jldJ90Y8dlEQhFCDL!C6Hd zg?-}h07MIT?7T=Q$y9XhRy{|~;Qo>YGB#kD8L%)LzDVv@eEmgcIwg9VJM6IV2J ypP6v4J~d`m-5WuYY+Ik|Q<&yjcw>zoSHK^QOJNlpsSE`G0000zoC|Tl)IK&Z)h9e|@vs8|8Lqw5NKz|NPwVz59=MF?-i5a_c_{5TJMWWm@sX zBIt**H*fwTKE=yCd#?mv%?l%u{nA#$V)(*9t7t2yH-g)%!aX-(}Of2_{%v9C}Kb$1)!RvCjpdF(NM)rl(8YBL%Ohn@U9&1n6rsSqi8 z*YCx`@vKvNnwJ1K!7lwy#YzN?A?B!{bC|lSB>7D57eXBBSR@7$HZTM zwwVyIaQ9}^KaCQM$BsYW-dZqDlTf6410V73TWWdno8+DoO3?gqqZJyxrkOoP5*PDNTp<#94A8Ps?g%@Kt3X5f5b7v{7j#F6=j-kT~ zy6rjbFG>9!-5BU^>Oat}50vZvU!)Z@)dRJuNNd#opS@99pgh=@ODX@&y)XS|^>R6L z8|O%+g7^};pwPB?zX}zUG*$$gQL2t;m)`M=?rJezB|VxH9T9f*-X0W|D6>R=BdyV0 zn+a9L{P_4-z)N-KwujYpQL|Q8=M(RsHd7KPuzw2h*hqMF%=^5bl5mQv2;?MYIyh1HjC^5kus zCCp{-G%<>8S*7b0>58D+FNv!x&M7}0t!bsJxV8b~^CcB9o2oY4@~#$SsO)!$80B2Z zCBodW!+VL706{yC7BzV;6m1dxksDHqO)QpN94S$GF|PSM6;yL!t<5~y#&LfCV!7z~ ru9!R*z0FkK@$_j3-O1B3y9e4I2*WPD1hkOF00000NkvXXu0mjf=k)}a delta 955 zcmV;s14R752>u65m9_{vQq6zM`@Jlq`;Uv7 zqvtD18@~t;V08C&S;@j8z>(rC4Tyk-k#jVFQD`NLN;J-7X^PU!y<=WXV4eS>l6>u* zM^sFir>^#zrSr1nb>q{rp0-RIts3N&^nM2S>Dx*jZkq!jAvM7B9~dHk`t zBF4T!E!6810B2J*ZzX?F-u98A^5xx#ZPdA-jY-k2gz8s_N*Z6FGWNJ_D`4&XP?e3t zFXm}O+kbTxN{aqYX0vf{o6=?r2owC)blS9CqgkVhZeiN4!urX7Z-h9vv1kl9ml+kN zk-UheAB%iBXF`cZy0@Y6>6BtJcK&!hf$C)%igs_7U!waIX%>G5O-E~fd-Y=3BPy?Ew(0@BTuR|$o!G(#?upE0!?V+G!CK z?`4&qPoyV;m0ucH-JCh6bT_T^RM!hIxn5HNn`!EeN8Zx|)q00WP|1bfqL_FmrGQ|a zM~|8!7lz&uQStc`Fb( zK`~l;y*EIlb5gB;U*1+$*;{`GpI?czGLyeKk-9y*<6FMtW|*L$prD}qi=X_Grsl=0 z_U66G$;tHe^p#O*hX4Qo8+1}mQvm<}|NsC0|NsC0|NsC0|9}7g|NsC0|NsC0|HNr> zH2?qu#Ysd#RA_30g?7mS?*8V(lNgMQKUJ^0P#(lllRmHAC$;5+cakgqyHd+@KvhXF#GW_$iB7gkCNK`o9Zbuw7KmUGe@oiB7&EMEQiB-pwd9pwCPL<-?ra{lQ+xHFh zwN;~e=JYA|O-=it1%Qf6FMBpr$-feS=5T;XN9)y~vj8E%@;NHOS%9&O2b970ig1HJ zpy|Vj3Q(1<3PAV+(l>jT(vDxR*Cc>!rf*F^BW_VJS4;$Jde3*6cL9q5oDJo0(;E*!a1 z2MHivh!+SOm*(Bma!UFvkS{u9_BQBG@fN-H>BR54IowJV*|zES0y^dXf#FEx3qZ@{ zAYOtX|9{B#`Pl;8=@B~FXS|NSw?g786R(mJpzHJ~w0WEOkFN{?2x8~Y*%l1` z@z~0T4qK(e{&f6L`N#2k1=9A3P8$#l^J+iLPt`e%?{tV>xZZjA=!uNGdymh#?`Q{7 zkb-SY(?kNzr!KW5o;sgGa)wwz&`W8lw~p4lgMSC|FI4im#8hQ5&8U$Oa;i>5Uz1MS;xmfnot*OK2 zrtclT&VIDIEBsa+s#2$X5qhq?xQ0#w0rD*3_dzLs+q!(;zM$j_k-Evk_RGPy*rOol zWPjCFG;MFcmUQ}NOrUl6fY%w(fZ=pqkTta4M)`|-ggBli7)UCxSQO%?>Arn44S`hw z{2JZGx9K8D_;5=+zcnkfA6h3z7+w4--4j^jkMj*c4&4z*Un6oHV77t0^TrWK+Ly!m zJQ{qi`8j{Z{_hz#P;B1v*YLmRY`VK3hkuXw-#76x2mdtq_0*K(;rYzR2l<)!oVu3U zC;ZdLuiY$o{FJX}5xz7#VDR%r+4ghr%hZ=;C$Tz|n-YH7e%QQB{FayCE!}U+BKwiW zNQc;gP+~v0)_q9myN_RG%X2NT)W3`Ja!)g{JumP+e|d`rgHJEv&t}5UO<@deEORUn z!zUie;_vMO9u;urCVcwAAiyxd0<{9 M07*qoM6N<$g3p^&X8-^I delta 1018 zcmVWLF0004WQchC>>g)xs1KYvPKG&I34=#NDI1>Za# z#!M41)m=Ap)aGL%yJXNW_>S4>0I1tDkHYLo+W+s-qe(jlmGyXeCEBOivKYIOxt42W9s(43OAVf z8nss~6fbKkJb#;}KE4Ie_JBd<{W!VP2KsI7MDy5Mn+njjO22D6tep~|>!t*4FV5UH z1{8=i<2%6{w7uYEco(mHn(%>d9;P*Y2!!EXy7DDKpi3w|d_;a&vUl{8;!}c7)pw9h zM(}~JqsvW0mQqN9fM>SgIUeTfZaJF1h`?vZtXusU@_#2^qT4N9_|CE4hAYdkw0je9 zQT;o_Dn)(*SS9b`3G5sPy5I7%6KJO&&_%xDQ+Pio;%9cNYYN)uGjl{wkCFd=KC|%$ zA@Uu+`MsFJgnz&9^5ML9jvcS`kN$@--;^(OnE-!?kMmLfS)I@EE(LpDYuDl13z;2X zB5Szu|{In~q|Bzz-Mkl!Jdw`0v(~^blpXuASERv5yI*v93+{Ldi3AgGS(JH4A^yTHvx9==NE%O*I}n5 zdTset{`X7Av+HJTQ*7i{xTVHAR{UsE^kK2i+)y{r&&{|8@ck(f|Me3v^OWQvm<}|NsC0|NsC0eRh4- z0009JNkl;R_)UNTSuVyMJY8Yk$|)uRt)mZ4ZMuo*r`| z9UOxFTC7sVES}lqN)*yfn6qO@|wx5nsDsbRxAwwp4)%69Mb7D!38Le26KGklN zmS#CTCqy*qkbh^mhO`6yFt$pquQ!}aqKfe^;Upr$>Xg3xet}V+ zB*zG_OEs%DLrUS5Fjzd;0N_h0Kh&jX6cO}s1)Wm#bAS3KW&J|(1*}wwo5Pc|#DYLU z-en$AY_(VTOw6ZEqjnA%?i*?OhhU&kYTsK>BQLyiKp0g_5>qbOlPj!vvvP$j?K@1= zxg}X)Pb-{(n21j8-o8avWEMi-Wm-P@L8;UHz_wB86!=Bg4u*+J`DKb1x?!9Wz|Ri_ zNs+a*qJN5LShQ1&(XXhw1GY|yWe3YL4icSX-D-P#q!vk0`fsp&@0+N(=`fC3qIj$6 zX@OE(Oa}tAO;bBrJX)X>_!8!UkSF{)jTD_yDpkvpf-Z%m;)xKbTH;7`0Y-^$pN3Ov zq)L}M1=cv12(~;e9a~XRYMtBW?9%EsiFClM>3^L9Z`?LzH&DALrBq+QnOaDcD3hp4 zo1D+!RNp3+6hWl8ak`J%1+ZRrY^*#fUr30Jf|OOA;7X-ygrr5G>Cy5jk%FRBl-h?Y zmzH=%)%!(=QqlLOyKHi68ZhvrmK2VZw(CAs=V?ua67y&}NofIPXFsQ4gFKq@%uXAg zYk!E_Aox400*$g{(%AF$GcBJ~yQXZwqhLwtBkB-?hFrGJDCkn4f<&4d0=2Mw=U!D$ z|GEV2<24OvWg#|7f~lXS)$%hko?3xYN$xW6gSAXmbFG0^A?Zp!pxVQ3x0?~uGH*(r m8>D|co-yC}#y9>r{sBd%N>|gM$VvbJ00{s|MNUMnLSTXxCa}8z delta 871 zcmV-t1DO1p2l57x7=Hu<0002){@+3X0016POjJbx0001bwGa>xQDApwv)6{Gz_8Qm zz023?{{H>_{cv1#P5=M^0d!JMQvg8b*k%9#0|H4zK~#8N?bN|;+CUHn;MG=nfu4G_ z78xfu1hSI{=mS_r1DuVR_`H=__1HRCd#$P*`nH`Judx9qxqnw3$-eOE|A#?By)^*p zMI@HrtjmmAa#4g3tLsjwI92CmHYn^$ zRiY#?4@y{mQwYO1gBH6fqOl5nq9DKX80J15(qJcjVRol;RC(H+&PXyyB32Z*sW@uC z;;07qBh(`9q<^NZ0A%$PR=CGCF3vl(p@FmbW*bqE?a{A?Q&koAbC8p8BLG?73{gWC zZafc%#r*p5Wzj1(LuDVf=IEDSO(+~AY};OygtF|bU#&#p)ktMfPu{ZD>9r* z76q52GQ1gDE!SovD)nvjrh)=k&9lSGs7WQ24P>HFkbn9#t^88dlF)mq;q6y@bym;r zc(`1Q74KE{D$Smqb2Z7!xGH9ai!KT>N3$h)$=VsIeb%XTYkTD`N~@Wiq7n7TBB&#d zWE-cXmY%~jiNrbUM2!PWSZ9cf`%~U2+pCWD3Yj(f;Z>=mQ^}OV!x|fU-+t|zUL}JXvy#}p3Tjy1CP8-UP|)+_BT{-egpEWEVKCp6q-c9BLR6%; zLDger=n^VnVOT277DP%K6nIu#!(9>YSex*39fQh#Qemeo0g0+3%~33mW2G%eksulJ z!d>tHF_swh$`TeJdA&LwV9rYO?|4?ak8(w)sDBVQrP6;2Q90p}s*RI@8R9Zh%5V(< zR+g0%nxa!iWB*5}T`bEJ>7=vJDO+lM4vH$T6a+OdwX0Q_JD1o_X^}1-sc!)hu#>9B zpoYqDQIT;W=df5@s3>7z$=9UnICi4y=%SI87RA*zyqj&F>C^;nrm zTVU0xnwslb;p{2~fI^KF2?7Zh8p0+nsBD&!GRA#hsL>ch(kOm91ptq3nYiC-Vi+dY x7*?=#c3MTGEWd<7K^4=}eV`2unSW{i&tGMNh9yyr!-@a^002ovPDHLkV1mV2mKXp4 diff --git a/public/images/pokemon/back/332.png b/public/images/pokemon/back/332.png index a6940fbaba6afde97a2b62e33b278898de560844..a432b1af4b25ae452c9cd11ff315671ed04c0ae8 100644 GIT binary patch literal 19460 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

      7NFb; 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 m0Kg}kMwYtCVza91S2_ReuI4)>c`yN@5e33{mM- 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 literal 3986 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 diff --git a/public/images/pokemon/back/398.png b/public/images/pokemon/back/398.png index 57fbb92e12f05544df2b8ead3ab4abc1ec89b91b..63ed37bfd15aa8172361952cbbaefea445a36669 100644 GIT binary patch literal 9730 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 O;N+x~B&)@Z1OE?TW>Yx; literal 9131 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

      &J%Aj-pC5-Xza!&m{JoZk|>_ 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 z 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π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 ZfmnM~`_zl=>h8aWXsBo_7b#f<{|}vo)&u|m literal 34509 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

    5A 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%0D#n?FfXvgvS67%9)=BKQL0W{8LJALVC`)Lhw#w zaKXodH;OIBEQJSfvXhV=AE+~=-hiTC*!m}+2_)-LOrFg|1u0%d=T~0d9W?G)P}n|_C@3J?^ibI?ys@{eu~?YV1D#zosIJA9wany0%!_V z^+_NsM4HJh=M2|JSSWHN=A4;;p06s;onLuzAq#T7nKoQN{`C~eip_;AfA#@GwnmZD zw|_#AQH1I<=EhcCW;aO=naLs4s Nu(fiuyo2{i{U2J#)Jy;X diff --git a/public/images/pokemon/34.png b/public/images/pokemon/34.png index 3eec3a668054e7192811392c42fa0bdacc5fce4f..e697a987354cd2520b11677cadccad412a97a087 100644 GIT binary patch literal 39759 zcmY(r1yqz@)b>3zQUcNp4bmaqFw!V7goJd63Ia29NryB@Dcur+^w8Z%cXu~P$9waC zpXdG7=Yq9V=B{(jz0cm)@7jD*S5?5pqQC-yK)6bZvKk-|QrOcsCOYsxg3C?7KR`$h z8VavLC4=A{5Qr9}Bn#1UP1$cW{AjN8Q}AY+0mJi!dI)ReU?(f8iZohgS!Sj(kwa!} z=z3V`e2&cf=w~qZI`+b-VHkvEI*~Heew7;eU4F2v3TBVQf}Dq~^6tFn&*WuZ)M7hK z+2Md+TlFLA-7m0j=!3>G9Lnx(8$AxHE{tv!Mi)!|`IP-$`mJ#E=ss2NgJYII`m?}R zXTiz@_;Vb-GUtC})oC{3gtgAtv?!MD)#zfIA}5O~qPymk-D>{>9Mo=wsno1~h-p#! zX7IHmq481bkk-&&hJ;L_6txrQ!7qz$0tPRGSB7aZhvd9oyWE;gQbw3Ho0jROR9Oq^ zqgV^3s$#boC>~5=fP9$!@n!|)&Kgz_VUsP$63j=_1(hG1_fRq-W>$Vt-SQEKb^Zu{ z5u^E)5~TZ2qwCNXNBkhg!7N>lLBT#1kl}pc!An98IN3jqu{B1Jk65;R zuHOoRa*LBUEC(+!W6c$*`OK-Qy=cV;H?h}Ln12|uK7ec=el35E3|#E|cL{&&unel4a|IA(@f$}dp9F__se2bI6jcS>2 zsWU1DZ(xT9$%F^Bw_N_MS2q+jz^P#;v(+)Vk1O?ap!uFa!DNH%CuU}=etN*}l zY3e}0^WSVpla{5*B|(`@=YSE8P?r0&t`yBiNqHD`HEWQhkHUV)WJQ=YMjZcY;N+A= zbs@igZ$D8y!B*e&e3=Np1-XLGXxl=t5>qik?FjDue^24TXbDiHI-D7+z zUtsiCSvq7dzhLW_Lf@0tMGBRSZD6@i5Rd)e+ocVvNK(xYRGO=|9sZ>y?Z=4XLI#ZZ z+FJ`U+~8jmOX2RHYEg6ussGBs8X&0_5KM;_t+2s7zMGRV?>Kbo}LyW2N--PUXy0HEJ zpw+o!1$^JDs(`CM-ZM zL3n-Hb5pLSl!EZD&!;IHA&H1p7UBJ-!1hx#kexj2vw(P&I%t$%U1{bkQxoCt zB8@Q$c3-oM)LAF8cODEgAdCu#fb$87BNwe{bnk2ic5}cK@l&~?X(UT2ke?md(tOPI zgi)a_V@`TkJB!!A6k10pBgExZ`R%12>R1&aE*R~BB1SDktXmpg3?>MiHH|n0+DG16 zEIcG{TEz)JanXgMQ0b__ntcb^2>v!{Jb(I#3;`@yPew>F+a?JPJ|ImzJ98j*3OVrpBx*E) zusXCrQcOh_*~lnpbv)49`DVhmD?PoWw-mI%DaeKFTf+8mp`*1lR zRA!cP8~8}wM9UFOsLlv{1{o-{27b5A9>gYgX8S!5!JlXlRlSCW-+xkVJ@`0(LVe_( zExp=k^m)~O*7*|cZT^@a8Q3D%3--@IP{Ma$9_Cuh#8qp+UgEu@D-it7YyW%a3L;r7 z-(!McP7i;75(9`gxqfn#?uDtm59j&bT`N&@PwSj6D?;3P=~Nh}kAwxjwv313BbF{7 zU^36U#UuRg!1b9~5ickuHPzJ1%S>Qq0geA(4qA`Atms+CrJfYVx)tckOvY-Y(gw zwi)p$iyv>qgRFZ^Sg~cD4*54sE|M@l(f-%()+%oYk(83(J!>)G30mWFewcoJ)+M3q zG`A)WLWC{wD$q5N%F+5T@Hk$@UfmVfED$8Jb&G+;6lQGoneKMf9>eV((;s#EPmrTU zjffL1)(K@{d*Ufv-75# z1e{vb^AtXk6|t7J@hV)#{dt;p^jNM2jiJt@(`_Lw>;nO6k!}0urAxWzzkLI#D#aDp zPFVs->N^$Xsaz6jPVto6m>Mx-zgF;N)!j1Heh(|Votzq6_X~U_*^L#OHn@pEA zYS59H07xy7yu0(NO;b5z>$tc?3aPsK5E-%O2DYS>u57jYB&d88B_|78-gn#_ON^b}bL;>vg zy3TZ2v#irS2z6~BGhXg`z%J-rH_$&Jt1DF zvu#T=@KfOut8UOQE(^tq;Oz#7Y|n)SFxfA@4LiOqEAmsI)3YbZDi8bR+?R>PCTTQv zg8UhcSR{AUpX^}7N$!<>06(~^24m@VGp1L1Dv=}+=7!oPF>1#yYARnd2KwXK+oap?-(8^Eof0~*OvBn*SI4f64FkjK*SqtI#higWT zmA6|K;GEyIO6)|dACrt{5yLHHWMQ)H06vP8 z2;#;xHQ4n#W8o`i<8pH`uF}NgJYZUh@pn-Eeee()x%icm3eOTxCZKOdV2 zw&_DW*S9J{at9IeAH6jGHR#lP?_Z~XPF(kt4UBt6X85!coydx|MW3-H<6j{!pBxGk zch@&A*dJ|qh8l#@W)pP!o?OiS=@yJSByReBFgV#~9fNC#A6yyD_O+?fk8ETo=tME3 zk7-AvN^>%HqUv;ZLtrOS%hBTWltSaX0v774pBN+%aOhOFej=?{WtEdqd3%PcivD*I za8-Nyc{szdc-Y}ZYq$b!Lu3!?+`YF;O{7Xuz~}sM;45D(JxhpUCCk|-Y!(Svon6hu zF2MBUL?VOq)3tJ$w{g1-ak>rFI(kYK;$PAnMZ(~xm{By|mE&iqERD}av3=4HTFZc$ z1HRrFow0nV|4<)V3rzFxzqsjZ8(rK>)F^i7;gigTQCb zo*?keNd@3T0TseHyy( zt}wh{*>nyhpyTCM%IUcZ9_r^++$HyuW#{)-Mj%7e)nwmaHU!$jiU>#4y}iaW@(k4) z%lh}9#?hCePIsH{vbSDkt=%tsSHBj~K4E#?S%g(i?H=#T5CRF=^;nK@t6wu?hycb-NB7$j&S=vNyw4ENWPBLq&=_&6UlhWl~tPajTz(jRW6GPR_-^B*77fYU>^|G}wuf}6ST zmr7=U8lune#8HL2@lo8!{n4%A{^ZM&d6qq!!y#%DhJrIydH8EB=T+!G(Udn-3>a6n zafT>~f8}%OIe#Bp({ovF=n(g`NRT_mrAM{Aaq~&bUY>d_ZW~$TdwSLSX!FU?BbuYy zx>}*RQ-kjj3el-4NWq|miyY|%4Cx*J%)83P>0anpktdFNJ^n^ze%d>e2PnIM?F-}i z;_)-$WdYB57;5H7Qq9V@W^H-Sw@DvWm_A2*SNL0a=3~k1@l7m4#6mvO73b%}4KQ?E z>ChBAU;`1;?D_L8vc|B&FjBVR{NW7b^ZmO*BIQMvFZ(u-9v5bKc>JCD=VIIed^=hm z{!3hHy}5B;&eWw3zI(+h)1BE)6Fh*_k3ik@gsabdJ0e~_eH+Brvkeuo%ibr`nK4(Q z29nbZr^rA5h^P_Ayr$Fqt1PXwC*2}(PH%TC5bOI_`eAsElf<~2$HLePC{WCtjI7wh zBN~#6%jeirC59-EJB~MLkI$gQ0$8r&9cZkFW@O}|@%U#UN#WpT5?Jc%^(g77nr3fZ zbrIv$7nnNZ^6ixW3UDYh4J*8Y+_LA-52QEKITqopDPk~u+O6h zUSA(eJCjJ(twlLI%5wvpww3C^LoI#2*)}!Q)1SE?*BwXp3f_;F7}f^?5zox)9;3t_ z#*BQG?+91#c**5z8<%X$nG_|a2H#D@$%>hsvmPv2g2lnEifY@{I)HrMm5);i40## zmJ0l#uj;4FC%_w$#8%cZetNNha833r{nraz)%>y7*&{y-h>E7HJyK*!r!H9OI9Up5 z9murU+;;A_o&x*hNzo&6M%wRE?6QBF`-QVhM=X+=QUZdeU>Jv)1}!u%I)dZQ(y&Pw!j)J2Dly*DeCyCO5eWQ zaVFRDz)-~NZTZ{%b?zfB$K^?Iw)4tCl(*0=UV8Q`XZnjN8xz&jA1D+@X~q- zgLxku{a9wyM*#g|w{F9>&Z)0xaVoTKtBuvr1@?;uTT0WuH|LOQ(G6Le!Z*OF!M-Ov znago@ALN|_J%|I+&miChy81WN1X@j@?oD@G;(m>8cg73+fX|N}ei8hJHc8E7u%IV*dIVKC zD3V5@&obG9z=sm?3tuk(nJJtFo)jQe#uxT-bd=w?#e38!DXmDfV}R(r$oznx{$+7p z#M0xsP)SQ4J-#91tIs|an0XB9;`$6|;v#OS(h^Prcpa**ifrFpK2z5!rm*|dcOh=5 z>eM=Ax%hBZJr4a94u*t>T%SExICx#Kn4)qc2kL#pNAFj@C?`{0gPi2hSO3=n$PGb* zNnhh(I9LWgA4UIWYKkagmlqcsR!Btp*-ZY!{7br6+$J1Kix|v;76>mevyRV_;!gN6 zv8J)e(ywBnq_fI29+l~?%^NyC+4uSSeT}$Zb@d@X0{)^g#+^XwbFGbDNPGH# zX^4H@bAJ~{hgwhG?VP4GH{uiUvSHFj$or|B>$98y1qF$nH7y2^FhcrdVGgq8Fjh6T zc8zS~JsKgwTv+e5d?=ZBEpPULu8E7hmT?W!=Xw!$(MYLb_qc~{P3uP3d6M5Ze0Gjz zsjJlcB2ZzZ7M9)H;WOI&bgBd9egjhOsLhg7XAA&WGmyixgdr4LoK?4IEHI{3|>OX$lSv3 zwe4TQ!Ox|%4|83Qmm}0=TpY(`_P(Rf+EKmfHW_|o3vRXEtpp_p(MH>&Mc}P8bfIlk zPFZIM7Va_r@(8Zs*cHYbWQF7fMMrBWj{BE3#R%v zfBR7GU7{s#G>YGv+S%L7FyC}PHjO<8-8!*pPH- ztbPwq7S?17S7=(MVjd&*hr}{ZxTgQQi$TGHR}&G%Hid17fevwAQJ)AO1s^dd2buZC&hfY$%I~ zlF${JFQuT#s}$tpeHo<9vjULaPQa%8h=sbSZfH7)nJo)ba#eq-B^QZ2abD?HI2A-F z>03L~vQ#lEW+B04op@|}2nBzyAEZf0t|JSDbk`a6E>{fR18MCqL`f8Hlff$8Q26#* z))F;~Qi#C#>vhll`|dwTMo5J3(JV*MrB2i?D32*5U;Q(d-9m-+x-7=NQfy;h-ikY8 z)ht#iT7O@bVMp)P_38dQHC%e*JOppzewmK(AO4QZY zxl2$>Xs{I3{pNz(>egmto0}~^Go;isBk1&)flZ-ccRwc_(sj@k!Pazl8Z)GeW-3nI zMUC4+iuvhf^yddWS{L-Y8e!yRGf!VY6CTXe>oQe-w@^d|MKJaV1RAxwz67sZ9+*cejOyAyV?gOODsn-yzzz#T=3jSVv~D|0uMoLzL+j7 zL-u&LXgpFf!u26- znR~C^6`qFt#6h8q8Hu(eRIY7aQP!yil2S+;>GP6l1N)n&P33;APlI_NI%_q0n4#kM ziiRMC90t^noQlgo?L}PtZ)Ah!IRTGcU+f(r2`R;>>mS4ro=AE!{lV7(k-W%>U;H9S zo(AMRID972STZzTr2{HY0P&N(gykB_$qq1_xEFkrZx=aM+`tUcAOOK=rb5D|)ydGg zf{764?q6sWDr?xnoB98VDYujl*ftdTji&_m{XshOHB%ClX3~~-mwZM=D*50^U>4j( zPul9|oEPel$7214-^1Euh2MgJB6<+!hjuUXNjSlB*%7g>Ds(7HZVEN%>na+4?B|EG z-6tGSVBm{{D7DX^Q_0X)_fW_x*jN!v{6UHw%lIn}jS1on#V)<8(t7<;%tf3%M$sU6 zK)|CP@lb5ZS%4fjFcq;!dlbQc!gMVn-DTB?|34W4Au?t|pJR-uzT2{B=W zCGF7qj5_&=bA7+h7YVLXFy%*}m|jRQC-w_Rmm1{lfr9!uf5>jc;-o3Rbc!ZPgk;1j zP2zwB;`k|ktLqU#3)Aznmgr??h)_sjQ3()XGfNWHfbE4U6-+*xaRx8p&!oT|G)<2E zE#tfW=wR?~UbT-U8A(o&uW^0HI{{eiADuWHMF*j#l{4WoU7w!cq`wj5ep|DdmYC2X zJaaV9)0A;939TKMNTyTin6QiOq&@sNB?zk#Dai_kn%(E!OWnOHBupdUA$VTEZLfet zMcOyAP%b)kg`tL^;#*0tLTFCYMOtg4QL zu(8snx4x)e`$1WSunOcr4qMfLp?>;o@RT^e8`RQ8cL~EZzyz2RpYNN+m>#|Lkv{|$ zPz6Bn&>Jcwj<*ssy?Ysv1gJNo6|Wrut*r6$qD2owqTceWs2k4eYAfIFB0sH3j?GA%;+ z6E9Z(1OE@ApneOUn=cu!Ev!uAUU^y25w32DHeUoAgY5BQMMd0l!e3Tkwp;R&-3zLl zZiMFgXT~^2Cgw6<+G_uU0f~s2Gz_`K5o)vcACxMp7;0_Iqy3=f{WvbI|`vc%y4R z?`Mh#$H-oqQLs%xYh_tm{nNa}*>Jfi#c~9c9M)Ik0sozdk^}W=A6$C45E>dHHNLaG z=p=1U{{7jYTe}5F`MYWbJiCHdcqPNXQs!V~hlj}kb=AmFVJXuQk3pCJ$kG0CUyi+j z&)d(RP3)^o&gWW8o~f(+n+J%V=?kfJC)5-3D?XkcP#Q5x&Gt|^AYnC0TrGaDdlCEu zX#tu$WU1ebLmmxNsM$(wwp`U4u|#p|d{Nq9)G1r9<@$)D<6`H&+S2#VHP1gN4P8EI z`Y_j@;qA=+k#-$t_Va%?Y^V5LQC1xkx=%LarSP)*(V_UgdSobxc%hxE1Fu944Z^vj zwM@SaxfkrfuPlaQTq=N5Wzju5X6O$Z3}f9pBz45nUpS<}zg~!<_3(X3 zG*f|4AC3XAvjC9vS}A)!nrT=U<;IiW?|M8wXTGH6^Ag7LaWCCkqHx}LT9*0h$sbSO5&P{2)J$jrBQIf5 zKu_|ONE>2JPY!(O<9TZ3I75qPHWb8*&Lt7xWwh#$KT7v!Is1RT06zuTh%Lzj;wsC_ zR;~$*)7fp(_PRv741&dMm)j61C3xPbz|e^T0SK5dQUg;ZH;VY{F94W+=qUJCjh=80 z^3Y?%XxXUHnw2i7Tv_}|?5br+3PmuG$3Z%&8s9Bmql9x&Zqtp7>zOZ;_-lIj0mAG4 zyDy|Z4(`+PwL7QXZtGA(Edx1fr`oW7%EZp1j&xw)cya`@=E)GQ%Y8Cfw-&>#zh}7s z4x5(dxO+m{D(33Q^Xa|fsO?X*9#<6nZ(>GYL;Z?cjPZdh_2BnEO%)gj4!~!c<|yN_ z6qPKOJul=LP^lc%{)fW4WRm-b)~q;p#zTlh#DI}5>P*G?Z^b<=ks7k`T{|;=a2rMI z#z}8Rw$>m}tO3Nh-(201V-3ojwYJ7d@0G;l_us{-7C|B|`R^Fwn#Jv(2AhpO>X!ED z1jCPY55{r6+0AG8wSZR8RxpwDWmaP7AnszXt#Iy76vy*)3t5pU;1uUo z77XM!->;GvNsx%`r1=j+gg~?NXeZGahZa0_HW~iYXC?qjRcPS?P^xkF;T}+7EC0;@ z!8abHSl~^h&}w?g2~J2of{+l5Eh0;o_>3R4ElKr@$AS;>f`aOkp3V_AZS3>Peq?w- za+po2V}rmRaW^y>xh1Hfu2;{p_1$&7N4X|+#kTCf>$PyVvV0P?&-YNqXAZ?iJ}Fp@ z_UBgabKk0H$z9>10#>FX*2d3H;2qWEbj&Ttd3rS_H8m8HHme32a2&K)n02 z>MP^M58qR7Xp$p%EL4=V@#`%d=Y*&Fthu(FmtrN=1V+9K|4sxSQpSgRP|~`*)LZAp zo=375`Ze)JB|WpB-bHWJ5{`f%y&)0toXotpEY?senC!(hFpAT{D3_BU5D%@sC8;x} zF>&_R+m7B;KTrJ%AED${Q0NEU33k1_kZA{LGH3lkdt8>Kmc zE$@OAR>UJ*$yLZhfPJC%SwLCi_)%<=rZ}; zu(?(NC>vcd(v$Fz+_ClYxrBXGKJ)MzEW^!=IY+Q<4mQ6c@i!|OPE94G(ss~h zL2-yUO94*dAkE+id+FW$3*w`@vW*9okyor%>V`>E1xhEk-%C6qk<$5_63Y4{VRwx# zpY`e&AO!3=UW-7<4iMv&{e2vOY~T0ltB8C#?AR6_7>4o>Qoh3c?Ykkrq_?h0+O1eAg4<}KCRb{a5<7rxE{K zoi{h40Q5CftpKe?Jw%=wP#tyz+Rn87?qA5w&Q<)GHbQ($0g@9Vk1|{bk~dUEO@sozsj;SyK~U3yk92CBeR^dQbin4j%}3 zTA*yRO{U+H?pnFH#vzq*#@vpOXPFp+g_?t;QM4~%7RMIK{d06k%$hHvrq;zt!a94} zPoC^A8PMl-rAPx(GA@+V3NbGMZ%T%f%KQkj&qUKv-!U*mz;pb~0dwgm$^{er>QBT= z9AqS*;#%%89{18g-+A4y$Dygjd{1h2uvxh)2)xw7jq?R{pW^33$UtcxTo*nIS}hDF zdN(TKR7a5zfRNbm)l(LU`TgXQt}~>@ClQOvtn0)n=o;>l@J6DDmF^W-n*;X5KKIdtPxKAme>2 zkH|jtCE$|M(r$R=r#4{uA%+QO?VdNK$Hcx9v#hBBCs7jIJdUUNNWII;d3@)HQ&-}P zGX9A}j=6mN8mOfKvVt|s7Jm-d&m;!@N|Gt*R!KmjA2Y{x>W94l7lF+qtjMv&f%6)E zAjiTOz=bsOOYK3{za!Q|`j}z%ubNt($ZL8(6=$)2M~ zMJ)q{GqA|F(mZT)nTSgI16EuYJ6fE?a1GJ#%9+P3f3!2%KlGR;X^fv{3MfX?i_Z3O zi-yRN3CF|MlHGsV5LztzxbZgtATuVqb4IsQWPJ*Cpfp{>8MgZ2f6(5)Cs-%(2oQF> zA0sFYV%D9L@&tFYz0(RS0W=ezs*bD^vt<>qTdayZAIFxtdPZWwp{gY6{d6wXz+M?` zk!>`-MG%Dk?#|{w_6fLwc6uP$vb|3&pO)@Cg;Y`Z}s-=V+ad*d(G zvd7;cXX94_mi&50@b$ie8`Sc9s{5Jr$Ay03`ThOy=H2MnVhs)IXAS{!?b2|j4L}li zIg7OAA5akLfNGRvNMF%&x>VnZViuB%j!(#ixs^WjO9dIt0n$zkRq)3vEd`5HH)(nV zY-C4cC1tqwFGL)Uf^oGGop=%=bZ9fS9w}zv7h0bY%L3sah4L=4lz#-5K=h9ZIKo0K zb6? z8Bl%mkd1Ie40TWb0XR1vLt&lThkR(LM zd+M)aL_2P9uj=`-H31f%y?7rp6W|Xi8LdH|+&}kaAc82@H9epdmp+1gnqo&i#*P3? zh{v!t{4LGrqw*{Og7Jyf&_tzt8c3mGLgVB5la!&_Tio{1;GQ%o0MPZXtI8(%)BaGcQ}_5}k_&#y zs@2e`3fh?t_nS6g2q1#qtA=%&71n_r(L;XqH}r=a*MHu%GoUt1jhxB6fBY7@qMC)as7vEAVl8if1=$_8e06ALrl)) zFGjVkT7Zj^C`TOLjvKW77T0e@G%Quw8gPBu7YWi(yyQX;LhC}4(*nZM5gJ#M$nOjUva$Hr^Yv%ikz%YTIpBmnyUWTg1n8bD#6ipKhDq2_qz zmS%PHuTH%3&%Bs7GD@|CfW`1Iat4?u+bL8U8xm%E0@7k6H`d*odTwM;Q1foxQF2fw zJ4u+b+yrFrd!b-@)@U_4iT>W#!7Pg;p9ZQqa*~>9!@vFOk}cU=VKrIP2*bcj&OIGEz)7;`cpVV|MW zBVZkk5hx(6=MseO-)B?I%0V`TJ6Y6Tq5xAyXXKyV0)yN-B1VY#DxS2+(Jgt_6;7Hlb|+lWg(N7gtUd`6kAsPh#5Lawc}`3?^#00^Ev8<(#oC;N-`%$W!e zshjNRa1!P?-rgRZzN#SQu6=U_@N~?LGk~#7GUHY*iC#q5tYjReqW}B09CUQD7WJpf zNvDsQT)^nXO9q8(Dz4`Io+SnR;G$(NMf6Ymf={JlNzIuP&8s&8cskF^;YQ=xmg!6g zQ_!Ng)7`0d9hpOg1OT~PA|G^4BhBvmVcnq+AT3Y zY&QxAYxUJTSYbCm%#il!$+A)FbQ-D)%1;fTkkEb&VlTM`EH+WLv0Nzj$zm3mqg&eB z<;7=&KBFu0|(n?EMgIIhLU5-q`mwi(m(`H;Ycq{i-%f09=E!N}*~ z18oUHG&1xIQ+AEe{t9(7l#}hm_+ltmY{?P}OZXtt&fAmHXX)6$`%+HLp3VWs?B@_J z_<)Q=WThO_bx0nQ&Et2h7zO0TOMh5i9z472dYyqMygdTXXpo^Xk{9<{&tI*DYwz%B zI$z$?`yAJu7viRToJRN^vyk~P6DCmI5E2nMWQLYI{IL2WI*5FnHxIogYIT_yMOANl zL_JR9@8Rp8dN{_uv}+2QpwMkXiPcj7tvO7zma&gB?1Io+j!dMf#X0qnbF4EU=^O}e z*?`Uq(S4U&v-hVfx!oRM^O(%k8f77Xk;D=C%yD4{D71pJhL7h&6f<1Mi91cB84`Sj z*Et97yqX?vrWf{e!YV54KrIVU_BH4xkJm@Mn0h3d&{o(SdDnXJmsgNel*Eu#XoYjTgWv;P2WgaxB+M;I&8`R|TyVPc9?CSXR6=0k?Pgmv9Xg8pKq`L%BX!HI69GtsDYe@%DD1?O;xdbN|qtG^-+~pXhi2Fn-QG zr~7+pEf`C z+8G4yN66cT<#E8r$U9z61{WOI#pt0e8{6AX+3-_vp0B5deZxS&WGdeoIb7#ZlnY}S zppjegG9FkUm3J?k9FjfW3O%Ox8`|-o_L$+jRua6Sh=8nQ660>6QVF}Uvk>NZSWN5 z7g3-l&~zqn;>kX|j6p9SOzmSuZ4?aVd&zX|nNz$2*9b0h@R%k*M~AcYtHWAxU+XKg z`M*`V76{43OFiuc%zl@3;|cX4RanG`EO_?RFRkH^mB1Ha^VcNvCmZK@8lo%mjNHlZ z$bR0bUoFf?dH~yn5iptqG6+OW))kxzy{nZZ{3;*{1L9_+#c*903U=^doluHwT z@`Ch+1c?`P-cA>Zk}nV-pPf6eLWzC@HYFg@X>k5K$>kAkin2bV`!m!{8<9OV79-P^ zg=0YNsArJ!GQ^qyBHFaC3|RyW$p*wsOutYSY`*_hMjb7g0TLqN`d|NEB? z#K2!{B8$@IqFlOxqR&_1*RHIg89N8YQIxUP4(rf-K}P7;M5uG9AIB~{$syx1vO=wo zHm?HlSy`D94yrxrZSK=R`hD9*KlW5_Jp88n0 zx}hs^8<7^C;-eQ&#cp-cA0HQ2+7tZhIo*9NrR*aqywe^kUkvv0!F0=0H*H5fLCYx) z3uXm+D;RNHrPNN=ko>=5{fv$u_Yg(>O+EHfrRS&Lcw^}!Ql~%Bsm(*zWW7h_vUy$b zi&puD>TpnXFyH+i(?KgJ)>~ImdR7z~U}=xur~>&8L0X=Yx*Jh?(kX*Od~HYQO7R1}?KP#5_GN*RK1jj~WUw#L7MdV>+h*$CJ&5s6zrzK!xmZ zREFB=N1~MP{?3KA346m0SV8rU(GG@!cxK;1 z_Bq01^MY0LgH;upu${@3TY?vnRAnz`bZF|Vo^kM%hhw!H!k>gbR>$+P zOwAM9MNeWN$Bc`yBr!p}`A-J_0}mX743k-Y-DiGAp7BoOd!49)E%KRYSr5Z95ShnhEQ${E;` z>-|Vjl5-L>k+h@t)3wsJc|_S++y8uaUKraCI(lCA|HBimS}p(m7&jrPv2k(?+fTW`v$pYdNnJ8^jS$2if+2`XY zSaFT>AFLRkCI|)!v5kY?43rk{G>2@BZ(ip%lP2pt5@h+-8Q5Q}VyZJyz~)mxk4)P+ z2U-2%$AHBiKkXX2u<9&nN1~27`}aw?4*Ye5C^O;UJd8C*+$>r+Ih%?MaD-k>7{RFjD0yzezPd;)*mZ6+lA7h%P#|S^ss8x}6a87u91nyAO)y;g5VSMFMkEu8? zIQYb6sezG%J7i*9TBcoi2zT@-N->QddCRZwf!b0EHu`U}C6@X_DVqdA@c(NmYoToI zF%{)eoubA0mN!_4$`M+IU06{R{zNs1wK@tUAb=+5TvUzSBBErIJ?|*8Hh)5>rDY(n z7!H0J468#oRdkZAEh!7L-bQ3?8veSnqBFnz|5!%C>s<og|m6pm}IWvI^5fy(_=*^)4_#;37}4b?ITA=jbQ5~v=>MH0XpK) zDu3%KMavlGi-BDX^NT91=nKdGq67~Sn#C9cs(G^WP<{^ST9{&~%z=Ad7nh>0MHkoJ z8p^Nl0a-OHk$&xm?}a(U=KFCdor*wk3}v7h?Y?4=D%wzlh%bS|K?#f;vhOIe-xU9I zj96rV*L#SN@UP!YrN=ZCPDB~Dw9BnDdthWg)$;LW`fsYCFBa1l*wHC6tC0+9VG(*U zGFa~r;16=>?a@s6?7MIyVNVkL8zwSyQkuhP!Dm@)W@I5U#CG5Yf91)CB;p6*a*kkL za@6wPY^);tI^N)9Z9_p!7)jSO6Na%&42(Rudj+wlX;E*NDYaAAP=&4<*DdyrB0dyu zPDA%*o}ip7ST7M0$sw}9100H%uKm%edw8jc-#I{>LdWXd0vu*oyZP^?8@(=r&B;03n z$?4cE*|PmGenv*_;(5ond<_2|s-f@4)%|8GQmCzbLp=^cD+Ny?&QI0}zU5#TAvFy* zgag4<52&c%ENe%{-Cv^MvtDlsKdzhjE+2&uz3*J&Rn>Uor`=DtF!aXDExJ=%bOC7k z05IMz&q9I_UOH39q7{-b6&=tR64ca`f%Kp#OQQV*Ldw3gZUadwAia}reCw$z1CTBN zG85s7_lE#M@xB?8s*m)Gi@BMX3x?ontw&I*yax8=#_^7o$^*AzlK{T{mBJ1DB+AyO zMlS4CeryBf63E;Ra>$0`6N^z0Os1CHifm8L9iAq5kYFiUGVujW0+_(4cGsH=74{dE zp@8u$nS6kd_&yQqqK{qb^0@4*o5Wq{5GiTOvjBbI4T!$ulCGq;K%=_-J=yQN)awXn zf2<6k%!;fNydoC~P1>n*wG;VC`^^Ao^P%#+XGxh*fRz#iZcK`5pzjb>tf8T*>&dXrg`r~`R-N{5N)Xa z(gf3=r%%WJk5q48HLm}G$7Wr9bNzflH^Fwn>{OpWoaBy&#LfEpYSmYZ( z4&L4&f$@~MWQXtafzFl3ley+I;RRszCFFJ>CGz_W7tT>Dbnp?Mlo9Pq0CFpUC!Si* zu8}f+kA1LFgy+QSq54vaMFQ40Jbh*Jsb2#TR5~_LXs6)pg9UZqIdjX2?Hx&rr3oO7 z3H~14A5R0cS3esCdkjr}U_T=hnpuKyMqA*^c7FZ8eQ#_a*R0xNSy=hS5KlLW0v?hR zX_PV^E5n`|m>LNY^abeG+raa8V76^o!?Pp*aR}4~TO6{~l*E)zU2&h)Jb$2_c>LFC zRv}iG6EP5nbQYwA35ZU7q9j`R$$sGrG;e-)bVVvZ4*>SdPv#1JPeSPbYwo&>$=qov zAn3pPUPa$0stq_;G{*rSp@*97c6l2Oxd;qaDexyc0UVl36c3JV-yp~BWr#R^$+*GW z>yFV&m44YlT5w$z1Y>zWUgF#*EG5;w61A0ULY^pk^A_k-97%WdQotK?IysUGSA)5i zEHvL}`j5%y4EUi&D!`xtM*Pk&NSm@>Ct9(cQ(2W0X^SDq2+fcwL~Ivy?SAC>?jUY~ z-+heD*NRj;JNBgdsr4(@3?S2SyIaDYuaqrKM!j3l7Rx8)TPSCG2a%U5mDA22Yqv|Fjl|YRzJ|yk)iMCo zjbmU+Q&x|NfN2bOEjnYjFjjzQ*lEN|bVmPd+b9!zz;^yZL+#ef2QT|v#&+w8FVmK#FtI9T1evjk zmlqY#I<+oZZTW!=LhuUXBq$sW@J-H#0G zamZ|Iy6cxa_fC!^vGRWFNXBHK*_NM;7`&TKbuqv&t`|a(ib+VOp+#F;X5H+xA11HW z6-mqI>}Uu&1{w^J0;Ys4pH_`~Hk2cnF0Z+Kk3q(zK};TlQ%z)hXDr`!Ex1`W+ZhDH zv+G>AhQ?)OBLa%SOmpllq`cb7Zonsts;u>}M7&GYy+r5gd)ElfA}@Q@sA zT#&jjjA99%p9z~{ec#}ez4H4C<#gKJ4=}MsCWyAkS|xqRo7)?z2&2v4yABV1D}$C` z86ax18}3lDl6K)CzK2O%2|%pN+(*x^67kyG{ks`~s`*EfO9IY*C(rqu4{Eq7aOAN1 z(Gu-GzaZ8s{(^EsZ@$|4c`1r$F@YN3;sSS*2g>Nlx0a$EJFr$GPLCwMfrH|qiX_?gN>ilTB;RCG>%?e| zGAVErzihR5nsM#$ohXpMG^`ldd3Zl^otC4j)0!#F^fNKOBcd?nO{$Xwap{KxddWD( zf^e#3ZH+>uQ*KF4bBwEg*2A-zt3Vbkck@Ry7kfP-x)o*R(#$j0lY6AASwg2P6dyp+ zY*|bTJel@BZo~q9Cje>NGd3%BBPs6pvfBI_TKY84+)MKP(RRcAWE@HQ;dLzy9>LyG zR_teQn zU)O(FoAAEw9<~-0yM0NL=riTkL!?oK=)KNdZio9`u*1e(d4 z^p?=-5Xue2J5U;nQLsWR=j>4i#XprP;1?%&UQ7goQvQjRKTLfER8(QN_RtcdbayubQiFtaNH;?Y(%sUafOI1rLwAFubT>$McX$1V z?|ygPpT$}%VB*Xh``vp#ac-WAh+VM~bQSANs!%^k%`j(60BQ6Q0dXB)0xCN4;{E+Q z&<`Rot1o0sDs$J?z8zPQ2%N4bITt^KhabStkS)>GT%L+u3&=t3?pNIq|K{fafYsVs zbi?EMpyYt1EtmGd6YP^T-jn={hO0*IeV4vwBbz7?82n5j98pCj=w8m6S%>|PJJoXC=kzzfW^m(BJ zMF^b7sJssrO`41Rd&%!#tX_3#%dL(?uZ>@AT@85e)&@UP%#+o;v@$^V@+z&+ zhWoEz>~8>)?Jeo3tiB%-ecQ~iy;{-WkAkY1`dq5tQ1Tn}Aq^kzNB>{#q{G`6HKzv=!uSov^_1Ll|lZgHRVl7xZ zcvcyfbkXVPjx~H7+a0;7f(DN{+CwL0$g16DhPXKTXLY*m$NsR?^LdZ`)_cpDvNa&6 zrPC*YG5!kqe)*xPo!xhodz0Zxda9?Ayx$9x$X4lW4;ZqX6`Z|_=S=mzf~%`Fa(m>} z{nu6_>H+YQKh3hN8AFmoD@=JAt390PjA4J=)m0GbetD-BF+ttZHT4O$1_}|w_bK8u z5fkelTeL*!a}n<&tyi*X6h-C(HU%JE6K#Gz2WyvqDbH<^+|dd=V0OEI`9E~<0k`{& z7Ke-PieWI~$q~5zjI8aR?WPr=6<;L}TM6Od_D;W(f0eIL7x!%^9(}V-*q; z;ORcEk&J>-#P+B%Ek&`N)iSQD(d5e5ta*lw!za$vQ~`(b6vEHaQk`4jesWMsDeWcUxh4&viwy~)I%=X{35_IT9JTZ*1m)6y0PVfje#%D^f+t;>4gQ1iDBZ4EGL&1sE@=JTd{}M zp(sXYE>Cj$yOE;SoB;sOor-@bavUKE#4~qA&oMj{3pOvpH}8hg$HtoU5ezN^0Mr|y zyYO@8Y-5vdBc(kv=dt^oqNO@|blse^1;*p-GObfg6cJik!xc5`XI>}R#2Ru=8z6Y` zqmUx&C-T164W@|$nppsM$FAqfW3)D6FeMoHrNQMW`CwLjSuCGPkhW-prhpicqR*xu z7RTElUW6B7DuVi}Q-Anvx`h%mN`lED$d*fzXi59vS=*R67bD*}#KiZ1a5w~z%^%d@ z^k+8IDu&W7GQLkXiy$Fedk)n5l-t<&^K6NLACUGXTL_T2L)LjDQ~HZHtxjr^9XT36bL+mb_=; zbTQhb;GFsoG6_e?;)~JsHpJ+jERcTjNL9NUfbAKV$CVWBdDH5|Z8iZ80yfCmgHebo ziLwqrTX$`{IR%c^oFxx;|V6K}RRz0%yieEWc98CYy&Nbb;Ru9dv!ugaE1r zyVk+JBMHI8VOyAmaSX_ZrYdDK&#`l>A&F}u(}W3G&>bl>&iuMA-$TDHaz=31M(vFut1pK)K{L z$Y+kh0{Q3QH)T8d*l*@a{=x>{$yBRhaBG%Wo}=9W-BcdOgnxdhV7|sIGqCtKz`?P_^Jkr*8OTA4eUo%x&pvwqGGQlAf6WlsRMnTG$TZzbU)N>?uk^ux8?fcMSgKTCLAS&< z_-wD|N*Y+_l?fG{ZIr}(j;ny-Ihho}T(`oHz8NE&nw~b?bl&ymx9Nr9QEC<6SMzf5 zK4ES@qU+2ezp{;`WgD^e7(%#R{#*Bt`PX7vHk1Y22Z-TFAM7%zgW|A-ZGbKo8#|Ai zuWLJjZUIMb}TaSa3H0j+S%s=;YMNylg$holpxC6H}47iqym%4C}g(aIW)_k z+UN8|tkbg%HzH}?+pe#-m7x74xuuL#-E_dHdb4XUee%xj-8!biHEKYKCnc)pL|~Zg zF}12={hLM+18mkiUlBoqMA3wB``z6NKRj)vw6bbYmEoc9pLV#_z5R6*!nzN=ZGJ-{ zab^*zJtho)k=DZ_|Ez}GUCs2)L+RfDupP*^i9)6)?a*9U#@7wZNsiVKw|nLSYd9K1fZ-?ot{z^ zIq!>gaUdWNcjC;$tyfd=N!pC@AK(Z?B8`X)9P1r4 zehoQ0#XZh;f@%Tu3{W%DB_?JjMq1X`!zLi%?YSV?HOAopYAo0H(6GVKv!4%GQ@`ra z2%2Sroe=BMcNK}pGxrI>@v*^-s-8ZeGy~jx0&!2G?w5YlAM_`Z$|N~K4b)I#H3|P3_9N7CUDtL;kT*OZJ7+2 z*x0QERuph-R?F9;*s(&5&5Oc#7!pP15Q6A^E|+PGg9E2HQU7|-%W3!6h*ky3(W+vn zMJt}wB>k`eg#5%2IsEj$DoVQ9S%-`k*uIE=nOGR9=9u1T!Pj@Q=$i8SJi0>96F;g} zdJv2{Jm?!DJH1_8;Cz__f!%kk45$b}(2ADLER4_H`(|oxSLpHNThGuVOjgJr+KdlA zyAz2piVigtVW{L?4NKL7jyv%D78eK9V5;LJ9qmxA^)dfvWIIaSIoiP$9fT1YlSW|< zEeKa4_FFci_XhY*4OXgFu8VFl9Q09wiAHmpo5Lk)U7`S3HXWAsrqU|r=VT3FvQ`@L zQ@)qa;PbcBf}phT0EgZpn}cw8u?T=I(G(Cy^b-Q%XrsH8p9FAN)nZlt_+iNwXmL7R zT-DrOWF6K|ti_PoAojU)Sy%N}L~*FTud+C#Cq(AQVErQE=+foE!-3h+Lp#a(4>)WA zWc7lt;(xHt6|G&MS!bo4`&R{FgB3JULYc{QB&@ZWv(x~IVMgRbRl?=zRl8)D8KPlv zIyh|^lI~XeBS)noJCKVW)T2ZVDBJ9D!qR@1g+%yMt}~;~JwIm|8%sOWI^ZEx8OFqA zjU&5=tSaf^_EaJPU9Wkoo~#&g-L5s|sf?1DnGIu$3z8)^vo?kIiB&`KkqG@&=sO6q zqs(F@^RtDisLryyL4C}Kn|1&Y%HQCR7R+0W{M$A?=c3mHoySJ~L-|*ag9AWwC*1(w zOxJD?-)}Sz2@z1{{9E-_7sA?INGBP7{Ec8YRn7n4w{tL?wQW2^gp#nrr zYHYp;@fZIUYw<&b1yAK&6OWroY7fk%b>scFqk;It%!h1X4*@Lkls7q;9(Bd3U2xr1 z6~9}xOkLtPs-Y0to=ozwf%|LA;%9Pp`~goM(v~Z_Il%5nz@86a1_Bgi`xWoCKB7eX zl?8I*!cwhG>4M#-hg}JN(eD^`c@y$WO4}gM9Vuqa=G1(h9-WV-jGNJeB^`F=Zt@=`{Jy4k3i6NT_E29FL|Y6@ORg>{PTmoKn8Nxf#vDIYfz;xYurH{{BZiY7ncx zMD_)hYQG`KBI~=l&Y@WyPU%JPB8=X%FJDkI+&(}E2NYDm)m`{OqAh_cvZV0->$Eg|1h){o*uQ|kUB{9{jdF|)MS?$ zx6@$5HSiGH0m`M3t#SHuVsL!I8WUv)?;whPWsg@>cF!mMKbp)kNO!*weV=#0^=c1H z=RbgF)a_Omz8Vs~N~H$Dfx4SDLRwG1uM09q1GzEJ@M(hp2h0^~UwzVxo|Wvs#v`Y> z$Rs0G9U8`_0oZ( zDK|2H{)VQ@VRzSruTTCqe*qwSgiEvS|F{K;<&B2DlzRlyJeOuySbZ#ky zz2EC4=Qzb^(?sDFN-l9~%#LEO)}4KU3s$!)tT}t4VG^S}HdO)KU z>~kI7fFwtb+~a#+Iq6zQ50!(xKiL0ZUE%eynM#wR?)zUlHRwj4*M?QqqEm)HWd4x@ z;5!d*0A2KJz$bAQ3B(5ef5xy2h{iDI%jRUYW+Bu-Ee)`8`NOC~HH>$~f`IlGS>vbC z)pI=R0O5OwH-9^6qR8A2ZOC%IhZ{QdMr(}tUMAD;a!wu;USdaGOauIzB|*)*&#nNJ z+IfTmC^JA2RStc`Zy4C(#idq*8vqYSiB1ZMPQ%rQ?T?>71hRSsbI?2B(gq0>NA(;2 zW`>OrDAWEGAWUElRknwV<7&HM{}W4bkP35A+s)O0nO2Oh57F?mA})Tvp!I_RlVKk~ z-Yr!bWvCQ@1;xEcc2>)0ucdt|4f}OBMs$aBzmI~)4T5e0)Hz%B(=sJ+X<_PgQoop7 z-Ph%Yy4Lx_fL#TUz_}P5b?NL{|FiM{Jk}vV@^jBGz`Sy$sEPR9w<<+FH{YJUOSWDKTjK4n?_RGeWeR0KogA9hc~N06mZ9(F4$smj|%% zYIc!rg8*1CLAHa$NwwTECKwg76>y}rnRYod9y_}{S82)%CSMnmn^#{)j}S0W3yh#* z!qCINHC;nw456h)QOT!>W7PP*=T4dW1ob z?8-ptf<~ZWb{H##QC?JxD<$aeA~G~OdsFo&&c>jO5 zQk+XbE;mFCm>2!gql^`4f>MQI#FL=p#$F`!^iTw10_<>Z1oy`m_CBWuy<{OaMpvyV6Gj3gK26eD zpmCXz%Ao%c!&%v)+f4+D3V6Mg{}KDZ@Jf!sg5FZg#aL4(f0-(qvk}AOL8*MeMIXci zt*XeUKf|84{}dzlc_|@kHmc-ZsPVwR^a&m40a{?XXoGwqxF)E-wRYs=z_9)L*w0SJkr#-&j&y{a9KL_glOaIQxMa$q%nM*n zcv=$=56bYvkOD%}iB;AxPV!Wq0m@*giU+2JtQq;i7P=#g9voR_(*>t=qs0x&qp4-D zV@eqNUy7q5{3bPgeuELi^ah<=V%T#I`r)&+J|Mux@PS%|5rj7l5XMli#rhiWZ=V@B zyng_#O#uK&^mWf+9?8=dgG1vBQ#KdfGl210?rVot+&?(}s}q4TuOSggYB%uZW#;An zB>h2chUQ!3ue6_F5;cF`&p7bPQ{-FJ!J-3V#$OCCjCOqw?U9T%(2=`L-n)i!nJGo9 ztILkPy>1u>FO$ep=@iwg{1_s8Hv~0&_Dm)fp{cD2q=7|e1BjC%=-l#A`OtDoePZK7 z9k@Z3lPfyi73#OJUiCoN4ybn=yy)d#;sf9TXCT;lySF47v$f~RJCxbJteWt6?35w- z&pA;dD5)R6)&r~_)zE+Dg#3Wzrp*CSqeO1D6TX&c!lokb)_5KhL6w7x)T;yxfE&rF zW~&Gba^t3pj3W;$EDi3^NS}m=U6+uj03i(k2MfYIQvCpCH+?3v4Pe;1>11blG&3=y zDb1MkJ&#@+X14y59qAFCKDd#fno$~a$2ZJup@N_ASzndqEo-HOb-RvI2nPYJ~jL*6yKU8Vo_NDM=b7q?HuA#uuM9!`z`I ztOPe|kd!SN@L=1z5leLp!1)-v8O`0Iulj5Z?L-!6lIm=SweX^`>+Lg1T#?8O4|wE8 z|9%V@-@O9?GKU|frA@~k|7nbGZeoCZk|L?Nf!cTEJ2JilL-G7@rdy2%!GOSO+$ksQ$_>jQ6_nRumxYGOvwg zpkL~lWF)BKKqZZ0Y_01AtZT<=0qfdQKZN3AyPmsCv7X5~5AaFFu50$q-~6=j;GRfq zQ>f=1K>~G9(F7h_%O#y-E>=4(Fj$5E(Nz3iDmv=0@e)44koGnY@3mNQeT(u!6s+Eg zimK{w9O+Cg0yR+1|Bs-jlMHbH;&Vn368mdA*i@yP3Zv;@>#yn z6DQzHdF@Ft6~yelclk5)GcDFR&}QUx@@2c|59@p{3s>q_%O#3*t1=ImOA--anLbI+ zd~}H!i6h8l%?}>8S2i8SBSJ3fbJB94_peF;B=G-YfCThArE%l-zWOP_`Jy4fB%$nQ z6Ys;@Kph=1Dz0Jxc;O(k3tL4Zbac4dMn zp)Nx)^0P#K-%UJd4Wdyoxs{9EWV=>fF4%P?8)VxasQHb8j>vhZl^GTf>N%2B1mB5a z>}hhN#D`$l3Y9QfHa-Ok4xpUiZtdLJb!{{YyGr3ThIVblc^DH!_lZW043Luj07kw# z^6TQ;)KlS=l%cwPuBKN7D`JS*E8l~L;`6OihUW&d7ybveSO!LRp)Vm8M^Dn+==^}~ zbpxmCt|TrF+`jlHQkItUfzeN}H5a`J4?H|hTyXld*oip=c=+B%nXx-IjgZU4&!07yF~3^#y45=cw{ooC|QHkrUpP`|$FX)PClS#x*B z$^+9Yo#bM>_|@}xEC~bt`H%Uc+xuQf`Y*iXI?LLVCZX^UPF41j%i%L2?+4d(P$bxb zz*Im~u@oVC=xy)FjmA;jr;H4@xHE!nU;5aDeiKU54?xK|)tFbr7BZlE6gS?EJv?ZJ z{+o%u)(O*J5FbNcZ1MuIBko(emKS67FjRNKgdd;X!yo4j1TYEsyxi>0Y?bCd!~QT5 zuQn$VYB@$4Y?8p^W>&4HGk|K+OXBq{ByJ*36vGg;!O8295X#F^GE>0 zyNbi%?HX;T>n}pfWYk2CX;XfJEbQ8MN{p@{#s^45o;t{Au6`a>F$9D|3L0)v!uMU) zDn68Lg0THwwJPd}ZX9V#OQjEbp@V#F;m@xuo~zi$<^LLC@?7iFN4<^nvwD5QON8G? z$*xw))TSa5QLlpG##QvZf!^Scl1Wi#gdbnB%wN5tm*(g_Gyhd(65(8Qx7EB&J0=au z6#tM^8Hz;!7je$T7_SI8sT~6?F98CloSAm$M!`-zuS=!&$}nu z4LU|TBonhn`Ff?oSK7r{fy2?MQ z&Sv*c7oT0uHUKMo-JzbA5|po4wNIPQ*jq~TbC`HoXOa@eztCO`(=HuA6*hrh)GGO` z^N)ZZm`H%E8t-MlJOh}{xm15>l$bM})UGD)6}C=%^#v(Pt74i}h2}Ogm)DQujl?@X zcm{?7GOHhJ__-YHdu^*!GPne%-E4DOt10UJ8|;9-IDRWh_z>{0)Fa!OVHBN`PT^qX zgHZ8&7x^v})DT6#jEj&6wt#E$02x3_^xC4P7Zv15vl`W|=~Md%_|OJeWBLpaV)q|^ z*1rN8Wk!SZ3=ACG5~^X!YAY>8DM0}j`JC&?^`fx*9E4;kooTUFEU2eQOpJFM^8O9f z=q4B(LA)NQcBAojCp@ye|<{j9Ma|B+g zG!T)6k3^Pmbg*-R8HVRKDZHu-^dKuZpE;o$T>6>d91e!F_uZu%)xZqUF8egzWnDcC7)d_p$EzDB^vwtv9nO1jY`Y zS~BSf;%h(t5C`(k2d^H)uOp5FRmQ6v5;$az=7F5;VN-#)Zilaep^M>SCsc8-xuBe~ z%ZBFfiE)4%RZzQ7?4kC~$aq_2LY3mPXVrq!m(fo%F1;n7Wr`m}CLpiOclmtuHAqSC z24fgtT=7Y2#`Z3k9?}K9LU_DyWw(OVFmfr8Pi?|5!TiQ1si9{Gfa)Iz3Q~XOsL@tP zJx^-Z>P{@vAl+0OKv?vP{;(qQWmW(8z}SqT58G*vvnf|$B%;GY2+qnR8vwlQKq^HfS@98r*TioA#l@1czbW0rYwCc~JrsIr_m zk?6n{g{)|u$X+Fuq_y(?vfNN!pA3EQU;L6UhVJSgHoN33b|BbhxNIYn?mJ5!D_$qM zProkjM4|{#_V)I6mmOO@j$3wM$5Y={;Om~vf4S6)E8?Czo>cJR%b$6;e`CY5@J2aL z;6{JsE6|LPcR>Vc-ipctZ4(WhsHe+!@1D7Km~L~}b9RU%aUJHeQ{U&NWOfSn?Gb0b zBd)Q3d4}HJMS4GAHD3(-$Sqq*Y^*D(b*#KQO`-O7VgFKM%T|58ay_3tfG>4|wtZz| zB&p#80x5|W6C3mMFDR-O#z__`2shV|TGb3_sAMorp<50LugpWv7wS7kxA zEiA!!Y6!|jv+%kHtTsJQrCy8O{Xb8#F|f@bsD%AGc$0swm<`p& z`)+*YA)xP@d4R0U`btT|UH{VhY|~6YPQV;|v*Lr4CXY8+xbjO;`1=o$0WtoXlIWk! zuG$-iMC?*aNvaFvfl#6oWFBqH)J4#Ulv;&Rs!=J|=IW=YNu zRx{NU_V?f-J}__bu|xeyHe&w>IYdZYJsu7~z84p49AKslYAQ&lmmck3E@o;qk(4-3 zp8d055-TLNCh;G-K1WHm0rv)ZdHw9u`(=sMvD}x^aDC%MtN9^c20tRV@-th6^`qNr zchK7-ppaJ?J~R+9u={JEOXS5Uihd*9CMH)B;^>v+2ttmX3VM%CTGStr2-+$o1{>8 zscR{S2Q^m_F#zLR^_;qDRd=f8RV|TM{?W$qVvP++@O*A5OR^Qg+}ot~p}_tG%vPTD zk}zUs2PdC|HSIFLC9P_k(q5UECZ|SeM-K&1hBr%yTv>hY8MBuybMR1QY(D zKgM4OR6iY|E;vSox%Dp%$dCHtWv-2bN|uo=O0zvu?c@tI5RZB_fSSVTxs8W&V^bN`UE~+s`4D|^HSk{ua{H;qC zsL*~3*%zzqrQ1vYLhHGz50JQ=ZDzAMQ?Z&DNkkO=c%GEuy5!;O#c#gj1sUwKW>X3T zgLRCI&tRrj1ZMtqo>MB&-N%TgJx;@&oxPv|o@U^w z=CWAPSQqc`H+S#o<5%BKNk?Pej&i8pk2xbWz4OD+98L;tW_|QuuB?n#M@x5FlE5rL}`B4Df%r&vy zGdwO{JB!9c?4iMux&6SOTjDM?3P+g$i-ORWp(IcDCN_<8He<3c^e4V1Kup`P9ROV*|VTM1W4!6Vbzq@OycPB0m!BO?Jm`+ERx(IXd@Q_Q-;jQ|gc!B>s2U!IQZ0nnMhCRenu&U_RW|S1=8It^j4%&_0l_ zo+REZ#^plmh*26ow1lKa3yN|)g^o_h%TKuW{3Pl2aCAw*EL`(A*{g}IW0<7l5TR`@$Q-aX)^9g1@%eKN$aL>rIFm!X!Ul*6BJU9Cny-j}fW zZ=%&*ZMhoG^*q@+OP=`Hb_tM_% z?8H_}s^zjix#uv`famOFETr#&DHtKoxZ%BIMRxDC#DE>kPwO!|PwSJ)|G_8BmXzh- z6oN9BAfxqh^U}AX?xKC`vd@M4VV3({P!F!b-9u1SN@SaP-}6rd^yGYDJ6~k2V9wHc4XLv&0Q?A1ac$LYQb)sSK<}KMB21 z-aOqF2z1~;+}ZWF3jA-%73)yfE+Mn%%Gw{}t|8(n8`e8AS2ByoX0a86JdPeF@hHC( z24chQ@-ft8H%&zvR^>DGPY7n778-!t<#Z_0!pYLeMMtTB8DsR-e>~1_@P2Yp{l3m@ z{wDdfRY^!H)r?L7iz~9OY1v^e=%>|M;$t0RiD0S|pZ4rpzt)bQh!&R7&W?Up(=V^+@i^KJ&p39F=ZO(#x520Z5@E*b;CIpwRT1VV~buv6Ydd1^UPlRw}Jh;pa zx+C7Kt=SFM717Be-yD2uzWPTh`0^-SM)BzMUAusg3IXF`ZJrH$6ojHCMxWEKdA9`Vd)@5p z&Uly|ilGlCa8Ow7VSiV+pHX|~qh*y0y&&1M`h2Xp{gnvJ!UiK+H;7VYLY%&cpb(j) z%#gBr>Dir8el)=Q$p%V^!iOD6_r#*(lYPP#w=_?75A61 zwkv43%n;d%f^;PU(Rj5E0sPY$Q@%lGwUU}jz6e$zAQb&RRqKVH!|0n~#q-cuhJ(YcL#hRFy%i%-@ zet^M{5hn`C`}wd+D;~PRJUDJ$#h9>Zo;YP#{ssEgLh=;vJ!=phnf{H`5YG}}hl@$t za$Xoj_erB_h$B`oQsUVP=!P zu$vp!`b)lC3Z$1;6`JXHgJ=z8M>C$&4QZc)U9-6T*_k{KAmHbs;b+ZdNWKTsZT!j5+a_^0C7S zRfK9p*+tLTOdXf0mg8G)ZGGbAd&fkgCAE7iGGgaro38Q84kFXQ_r=@34!vbW`B2u* z>CaJ8@3?hxCsTGrXxr$)#;LD^d^!Dr-S@2ELxkV*&N*;n-q)Q9D!I$Q6j#7_9)l(O z5MJOg>hSew@jBSm8}P;cBKr1@&vPqc^ob?bgtw8NoK0cQdVf)j)ERQk3HcU;^mxbD zQq^#XkW(yqdgmAA^|O3`sPpIFLEVM2%RVFBkD9#h@$3{lf-osr=d7{N1$Ynpe_0WH ziQQ`$Y4U^Lm+ubtF9$gA!!TcD65RV@il>k>7IY0MS8; zFMu-j@=u+axVm*Uwlz8Pw#*>t#q4^tMW7VuwRsZ(HE!j7I7b``ZlV&h$_{{_P)v=- zo09DRhN71f7rT5iWj~i}}yU!&*dl->*_C-@!-K(H0wlIaSaaQSp<@SnpLbiEV<`#C$lv#66S z^m6d8ow5itBK$^#UpEAC`NAPqpTZRj186EVxk&nX8t9dv#LI-8E;>AR_nG8 z*n_Gf)iJzNLGmUcCdKGDGXVx)5KKy~%Aw(%Xz#dAM*3*JeAK4VI0_*SPc{3RLGlhH zCV%3TVIBA>1hzM015shELOW6cj|G?~e`u+~c#LrILk7}j;Sv4vY)rbSfjs3@SLT#W(le-KjwVrCrKt%fM zkP5s)L5m*BT>kJ9Fcn(0#SO!KdXdHDzLS%;e6>qUQwQ|JpSN7OTTTK|ilF`QJp1D> z?wP+KvxDD?RX|OENutu5=766?>*qt?s!Ll$oLeU&U=2bF?< z6LYm$n>yh-_&)U?6h&Rs@PP_@rMtpM1E=&r)JHTd5)l>4w}PP6Ln{m^D?g*yZSurQ z>f}el_j5r=$oF2Rbl<}kn2N1SCv1G8ZxDbBX|d-)$2a-+B~~U{<|iS=OIEKwo&1fZ zz0G5eYeH47XV^cZ$-beybK3m;GX>mX?b0dN21eFYy+zVpG_2Sqxk%s!yZzo%xPHSj z7`HLg+qWAvIg?zN&Isy-3H`{h-*zN-rk#jdYU{h#o&)%NXWMX)iR)&%+SO+B>zY!` zEEn~(PCAcheLmYNUZdl>^IJy4dP53-6H>e*6y{?5bC{Ctnfgbe_e(+Z(o)yx!S1QA zo&2Z?xN2o&#HI)?<KC;Q4zhUN?JuAkG@4z*DpXb1! zTJ7^(?6=Yc%&xq*Z4O^aJ|*xpBv;IZw!NFPwpBy`rDkMoJU$YGPA~T)&kUWMPHGsc zb`iH1sZc+w+2dQeT<$f9B@7I1oU)?kU1Q95lf#YG)3-dui?U8@NjDS`09&4)n(4N0$lK;J+oe z+|nd?YdNlgL|1U0E&@^|+&Ks|gTCPA$vwNT+f)n&@0-Ju*neTFfE^KL`u7SyG|XE_ zo(YRUe;plJTiF77GS>tYwA9Hxc8tFJE7HJ+cg+$6KLZdliyF`#FYLhHE&`{=4dS#W zFs?GIH))9%Heb)ubZI{?jQsnhYaZlW{1vZ^8wmt#4u<>|9c!Ay9W3F7KJXs5{e-pu zH6dtQHN04;+%bn1fr;$bxM@`O57DC`R}-wcV*QgWtzsJ3z#1K3wyv+a(}jF6Luo(_ z$}N~L@9PXwO<5aME26CY8JC@aQvIJ+TgvxGr#4(Lm}p8#G8Wl0zGQe!nl+Zcj<1EX zj;Tr@x*U66%$Yf9_?u4bi>K{D&VpFW+0!gc`ti(|fX-$6Xav$fg9;t%ZkGe@@3Ws| zz``V9SHL}MvHL57K1Z@n@U zt#%y$lJCRqqJ6gb1GO=~{P~utaMkW+?F--?iBUz{g^CdRMYS8g+$HIt!_wDv@z{9n z&=YKpVd6PqO?YvXC_-Y2Fwfj@wEhW<{$Rflz0Qe%vR)PDVh!YU^S`!DT_S0b^XcFa zf|SP}e}6@PhyG~l;X$O3;r%0DK}ZH6e9TK%FSLqibH`X_fcCwy&_@If8#eMPf}lg{ z9g>)9>)**r4M7;ochlR?TwRbdk19f7VdW2vpx+O?IFi zo@yT`rqA*cU|&a#ZfW~5xq_+!Km2aY`f>~$(&}`4xykQpF#aCM>;=-VHhOdUm!0}t zu22_9B42cj7>uMIqUqNoBCip2d&0xDj>_n1MJVAAT;)g6^Uk^sySE`g2xCFP=8_)F zh*ZFh{exGoV6%P%o$`j$lPJ)5dOy<$o;AOzsIE@I{{;Sc2WFmel7hM&TzdOi+jfC?;KwFGvzBillkls60gbG8L(d)+%Igy zxQDD~WpXijxc3WMi+)cMxds#%k?XGG%|e`qD0E1PGkU11vSUM9&ayGSIWGf2{55Ye zQSUVd&mo5Le~NvQOZ$!gg|^VQvapWmSm<|s#If}_ssFV-Ue-Lx`?+JE`V;EI?j1Vo zhR@B2kmrQ{2sJ6U z0JrZIAP0?8H!=P6wzpAVtyV!%&XjuosgB-tr@TPt0JFU9ngV}RCKdp}1a0y?Tw z*9p5#4wI9nYg~S~ct+bPiJz64UXx*YN9A17BR{Cw(ZL<3Z_>1R6!Frge}Z7`Dy$r( zn7QhH#SC=&43G+Agnl^v?y3$jC$^)v+bleo+N;@~$*Y}p1^vD8exmZcy3;Va(zW$$ zn|hNlX?^L-u$mJF zIj6=?-{q6C+K^*A9PPEHDmiC42KYaj3w8Xm6bx)c5)pWp3{89WKcGw$~sYRDn+UW9{-Pxp| zq8?p>Tw7c8PjdA{2h4xhP^H}w<<1s1 zkQKS=S?cm~emGeJmVmcVY|-|Kp+iGX7~AnAUq_Um|LsECeGspK0Qfhoiowa8ZN=oR zcUB8uULEbpf(hsICugFTshbL(f^7X0n(ZIfeIVJ`O;@tzA&A-*8t&kJL5vMFNN+_S zN0zRBkD8Dfl^E2V`1igb)T~z8q4RB&s?O$V1LZct`kQnK^FwBJmy++}!UYC8UEUzp z1aHZg$f}>Swn#;NudH4c5RmAK!kD>Mln)FFRYs@JYu->Eu?rbmi!XD23U98SjmNwyq`H zm9A0mTk{SwDeo0`zR~2~2IqsNhVm%0`)OCpN;pK^!X`>bY(ba=D~X#Zgp;;Z;1DJ} zQr6#w2}TMB+E{uef!}#PYHu5Ji?zlL#mOV*h5*|LGKa}tZ1jDxrjpIl;hRcy5MRT;o13nO3YihnQ=;wg(2_!133qU;g5?lOw#xImbSCbmn@GEGa7UFJ8TpPcxS4 zN;-cGQ}NytayYhw7*p?t&S4Xha$(7{c)*{MOG0=Pp3!= zmL}*?g75in+8+s%%nQCKcV9LTpI`J;nVVx{anu5>3D~bb9-GXzbrI^Rucfji2DX6+8+2tp5OW&4tp^CM_1;w70rJh&(O@ z^;#4s8{cUGLW)$=yp>sU4#N9ladbX+OpT3p_74u5&B?7DdrrYbR{^2dr({?@Z5Jur z61GdBq*(!QBh7s9%q9C?3PT9u-Jv{OawhGU?utxWhT4lWVsTMt5c< z3%glY|5|wa9NY-Q7s9~a_swN|lq%}vOgL&tS1Yc9AmMc0~yXrHi$5Ko|x3DF8i9QYRbMty5eNKF8Sy2Ah)y!kUmMOXkBw| zEt_X25QADWek>3EyQariCd#xtdRydncW%;wto-*=pucZ|Hl~miIvX5L znoBV^xuj_ZmEwz6T=`4y<{Dz25Ahs@#7OPY{?0BRKjwx1)45r1`3A{}TIxd-1j6a) zDEOxDfl&w~myWEmi)KUVGGwXR?dvYNA)XUf-xrA_n*SMsD-i#ARvBOUBi3V0sjb(+ z304L)xG^@x_15wgc>&M^!k^Fa?yh(ONItpWyDd8~qyPkGAY^qUlE1EyB(N?6Ic43+ zIpGqSBVPh-+a=jqtNb%eI=8^5C))cB z(?ZLBZw2uqxf>oqBJBreKE28H#I~nmpJ08T3GjtH*^(Fjun)DM$4ko(6)%CkUL?yu zUC1xTZXT9ouJ%YrT_QHdfT912E$oBv3zGRl(yAY&WpoJkFxL&e>=kQCM`YZr! zwjvk(c5oG*QcM?oqObf(5`1o7OsMwTAKt))k*liWiG)4>1hOyxyb}MyRVov0G3WBa zm2*X4*p<7>g3e~UoJQ_!)hP5#a4|coL4r5j1gCWT1XSL?q_rnaVHfM5(Fhp@&h6!* zPl>1YWw9bT-agfn@-?+U>#lI;+UJych7x=4^7b?8GNNbE+fysCe@a7(fm(u;gFAD| z(Af4AJ#H#UT`U!fMn#3ScEU~o+_yHFnL%A5i`N3yXV+e5-dD2VKU2fwxx;gG`|>Cn zNsDFq#VzGLZ@jLi$bc;;r0*-yy#|)SLjxqyK-^o##_iUEB5p2nZ-h5kwOaQ9_d@ z9i%A&k)ol7CPYF<=@7brg3<{=TIc~ol`a<%giBiJ9qC93y-P38zVDg$o#$V8_UsR9 z_J=il&8%{s$MKtUadlE@_rcP3JrW~z3M4OAYa1y+GUsHgboi{GB&hNSFu}<-!a7Ok z)^W4W1BvXp9#>z#q8Zz;o0w7AQp+XmlxPh1TOT6ZTn2VpFjbg~BuAqL$7gNX5+aSd z_LX-=z2^Ik4YTZmh#Z2}{FYkBULAjg($y9nQps_hO7B~&rK>*xA^a!J1z3x}%?Tiq zuWgH(IZM{N?df4ZbEvkpp^EX?A(v^-Ek#*xP5@eH+E`xwrkuBFQU0-Z(5KGD>$Jnl$?#$( z95AH-0iYz;FaJwx-&xDN=FG9ePo=FM4#_@0w(?95--YD|`F`1ShSMKA2(IlmeiL5R ze&;97>6tSzdM;4T_eo>+U81+s1mpi1-)LDz>O^wt_}Y%OG`|J9HHyjI^1NIG$2JbW z1}iU#<=m5h&U0yD6Zica-l(b7M~{=;k9xdqYRo25nZYvZ9=Ym2y1=E&*33h=PtCq~ zoRfQlO3hV8uiXCd^rEbO!L7$`!-T<|4r0A_z{$eo3i@ZWk9ZI;B2J|*~agke`%b6i!#p&_0n{kO56)b{gqsT7xU|BZD=dSCfFaLwfAK5cZNf zZ>dpJU9ktLdXw?wuf>g1X8$m5r6TQzdw;ivgv~k|>FRO{UT?J&#-4yT*uOX*0)8{~ zJ;qz;xxFj69^CQyX)Flz|6wDA!~O{+3P3*ydcPuZ8nH-B9x%-JduX@C6lc!*hz-G0 z(W)ajyma?`Vur#va|(3GZ3SMTg*T}(>T30^K1AycsZ@R}w+#w-dFFpIy3%e6|ME-x=mw|-sDOkcNj9dl&t zjqN6YCfPHP2=QE;eX2|mdVz0yP4uAv5v0^RB}c5J2Unr0CmMrcXaVCRt)2`Wj-r^H zk9Pu?hv-xZa(ZDBgg>^lgM1tv2Y%mq6Y>96YWr%k9P7p&Gi10+2S^>CME?7SytCJG zoAS3+(XhFQr>c|`_4O~}NiosniN(^lu*^7to)Fy;w~4gf&AcT4rO0KI&?X;7B8L8! zvbFq$j|G-2pCC?9F#RbSz?4sSI^`fJDS$D%5(Nj}Rh*{GnL3;_1c}~?61!y<9RzJ_ zhs+Ka_0Op1YOtMbLS{8iQz$=_^zr{SXxMQ^s69W9xCY!aF7NK}hS+NXP$x!Z!e^rb z8_yL#WY+48`QzCF36}AavVuHS{LcMlhc2g$m*!{nn!^D{O5+v~2}cbzT(2}`XY@0$gvViS#Xb;c1O6TlO&7YqGR{1bYq`@u|8iqke|+ zl=dIAzJu?YOEV3WHn3JAii9h89U`>`^2{AQxY?#EHsbl??2XpmB`+MA zBALO&&3c9NM9I7}`C|gvh-yjII;^XfDn1nmWXK>Fmp;*kn4*7bXBu!Xm^(F}(q$H7 zRsPi{h>Mh(94Mj>i3GNahue(7yDPyqmF5}{X)lwMIihfZui*Gf25@0gU z1KR?c)4{<(I_-mQai4`#NM;QVs{@z1peR{dJEiP zZQ_tV&7_=@qjvYG+WImwl=^iCMpAao%{MRA-z@`xl(u0ME>CUw<@IiimDK!!OtQ>8 zfduQLJ77r&wD-NBMT38q=H}jj79rDiLn7%^)Mr#Qczq}Nu>eD}5AF5tU(LtmN_1^& zN`&{C@|^16HTb`VDSlrx$VMZ-N!NYR>36BGD`q+r!oaJ^#;<)ODbX?BeBY;zJdZ6N zjVq~o&6Be_|1AsNUygKYJ44~2|TcDW4R3b#7WPQ(t$)xNE{F}8=KLX>5Jint} zyPNbQD9&3%_i8u?B>+Gf%Ou*Au*XhnVeI!$49M~C+XK68>OJII!UVBM`WSH>a>A!J zX0l$BJ6xjx42kZ$_?|-lT~ViOA{kkmD*UZI+k7)0Ozdh5|CtyaA6E4rP=WV(vUT_! z&#ds4@~TO%+{kgi$+v1nnna2RqqaeR+g^X#J4W%^%1S|@p&wV??O)#iY>bqD@mqpl zFn$GO6o9Q*n=()I^g#`Y>8iKL+qV1?vVw7JGZG6mO+qpUU(whr&FIsg%cp8Bb(?hC zWfq$t6?rPe+evv+AN)NeU{8_^UI6|hn^FOyXwl2JD%PQPT%0CKi1rqeTq9D`{1vsa zM741o*Dzrt9g^uznM`)kE6O%IKD+-u#6`9a#rLEkLEQ_9IK4ReJK+%l6VMed%HMSy zJ75KMnr`VlOn5pEZ&e<6)uH)2!h7DaolY_XhCqD=T~+$sJ}hRbRLG)H0QV|-v~D;^ zuTvv}o~E-!V5)?%T^n8=5*5N`-0gL)1dRy~K4bb4b zjj4J(8WHwA&%R}uSJfz7$mymC=0<35<0?Fi>jYndB0ovYpkw0D-lb6hA@R0Tfs}lq zl&Zzzu1q9`&}G2raJ|)5FuV(?P@&F#NDv#c?43q(Uz{2hE7zvyG#=}$5sy{UVT@CH zF39y%=1E0nuPjvA7rHBu74ObhUpGrJ3!oohJ9`wbNSZaUr_WSI${24CD*!C$TR{!O z#2YWRw7#>I+k0?(3#7S}%y~f=E3P?_#unB=O4Mz`W^>Z}q#z#aO|E?!vvzVDpE2HJ0vPybJEVy^Y(xxUxZaD|rojgZ4uvRBgYt zYTA3&_KOy#i5#zYj(+(-{g1lVCRIi5p(`c)Mp_Wjt-hhWi0IzOe8`M9U;aiJuRe-* zOIUq}#YDq7Pvzw8O;^^fHr z>f(-(KXHoLG_CIIfRFlVjdLe>9!3XRd3-G?MV_V$6NO5LoM&LEx=j#PtIOa_eUiW+ zr2>`(w)la>MRmZ~_?cMGAlppz{affdk7TcTqL0F5Fj#CNhtoJ@0R+sYzQ5<9nDzSg zy&~7!Ltf@Tr&^1lix42acsqTTRuUTOzsfaBno2184A9ehrebf!gk7)ZEVmIPY zP7(~c##Ym73BzyuW!0n%uZ-fnrGZmTJaaK@Cum=I{6^t)NQmnQ<#8JMRLRXNp$jpVibu$#~g{?Ix@uH`M3~=Keub zq9V8Cyh&}heBj8o57tGE3#n1>gwjeL;Ot!gg#ea|K$(_+T1=JJVb_c;tG@U*7yqK> zrF{V4Sg&$0jgR=Flo02YOPR>)-}0Q!{9iQuT`?j&G!x zGz+S!X47{YRuZeZCR5epgVJpcU7D@hT6mC^zQyVMll{P#!dMpBre$x_n==MFedGFW zN%NhR;6O1bC!_&oI{8-7b4_)u`(teP*NvOy1}m0xkIOYa3wL%ftHpr# zH8Yb9bNa--?M`c}y!p+~Hu^=oCl|pWo%g7+B1g8wT!`DEI8Iz!yp%L|oDW}q9QO5! zi4-=WMGlr?0ft!lHW!lCwVh<5>7k zKQ$LRrRI7V(w>LmUR_v8`5;WD?mzK?Z=hiuU;Xp6*}4NE^|~0a8#@X&C6MTPW^pG` zbxz21(G}1R2l<=K0Z(&-QwF^m+6GJu9?hd zK(Ulzui8+0{P|CvM<8Z<>0&zVZYP=pvHc;*6*}+CYd(iO6IXVz)2o~Wb&*Yuevqs0 zK-VlQUS6SNS6pGe|BT)eaYxT7Gjz*g`oXS@Jn|+f*`l&ECf)m{1p;e(UsvFRv3J}( zY`QvkxV3>!nUF_9ZnSA_0&VLKWShJ3jUN3}crj3!D=GD3#VZNRFpbOyFPxb4?&K~k z5e(#h5J}1HZeIFJRK}&^G$Um(k$Ldogis-Fm z$4ZLMQ^iWs?`?z6omV&Up=#6nbkHJ0`ST|TiLLG|$13e!Q}ry-A3+viLh!LTR?Mh< z&CCDUv_33l%NKGy|MI*3ZUx)!KR647RCe?p8gXy6tnp|{cjpY9IQ_ac!sQVU!_T1Q zAm9+s163HpU3T+zeOycr;l#MtZXU?F-NYSUZKR{XLoQ(~@$;4kL}$zM{qr{kgWL^= zYg`l&B+e&67r*503q6gqd?gT&Ahu6#({)oV(3MG>J=^7*uQ>EWKsjYoVf?MU{@(u! zaFL;9&k398x>8nQUh{(%f)JYTbb?I1@aG$J0O!9xZBPJmFOCA+E`4w)u&HFS>u2|4R&&Y zpF3SV84DG<@%FLnwk(5o=7KubRaR=wZ%7{|HZr$w0bO3tW>P%jn4jsqYtcr>E+i2E z2OG40VbaEjp|C(Fp-!}*$-r!9Lpfu+lRSkq7pB6fy<9@#w_?)DkC?u?r=d-J8H3lI zE8!fS7{$3TAfLLu)O26>WTE%RprHU(3nc`>3A~X9_@l2;b=QZ1norKGeFxS2iMJ7U zCkt-5BpIPp7+v_d{T|;Xq^uRpVm3(z>>#4{TT~A4c{)WJwa)!dRz&8xN_W|m1hAy^z>xrv&pCW5qSV)} zvjGj*XJD0)Ri09P0NS@KI@1evgam-^|JUCyk(W%yfBvL?8kU*@0gtAd&a+Zg%aH#8 DU)oINNMYbJlfy?x|B|+clOd&Fs0xAaJ{186F?IL zBic5!*zJSwRMth7;=a=BD}SUdw~k5X*3owsCm!~5yOrpDzeG;O0op&6T$8iG#P6 z&-)}XGizI343%M?Am!t3J?zcX)s{y;%IBg%*9r_!ImC8m5kDcGv%@OB1sB z>ar<|QMGnXE7e={ps}rgc6mItf3JUk&*?^sP++wxj0bhsAY$dfr{V>dj>dfTd;cTd z$~EoV=BwxJGvh)ULY|^OEiJ&NEU3yrWrx7QW{=nPmF}do%dJRv!ZYZ9Y5t1ZlBH)b z9~aZ+>0X0h^I;3@GG=wO-emt@;mpUM9|M*5La4w8L#MeNhJV`Dg@d{XE+h1D!&(UG zXhIOaUJT}b-30oqNc*%LW7K71XJP)CxOlkCuy6OB{9!jtE3R>Uu%?y@iu|fw>1%)& z*<{7&xJ4Rs&H}-)w#YPARBMk>zXYP8?iPYu&Qi%r_a7?`VN0Q`&7kZqKfv@y?1}q& zmJ?#+#K55qkf->&S_H^18qZ8iXwDn}ot;Yw7=m^|=cyr*l0Y z919sUC&=Y~0{{euISaHgRQi`Tavtq5Lk4LC z9VUips}c16YWF=%YGqaIhM2n+zG!NX*c5#?&p#1qlupWIy`*4+;Tmb8&q4R_4=!4O zKJDtKEKrF}U%wLMPga~iCSYEtP;vX$V`9}55E-Jnm`OM)4n`UTy*)WOm(jQ3!kUvt0-(dzBDdD%e_D#?z}y zN6RD@e&ei5TbKF6@ihXg1=6v{ZSbczJ1Ll_&{fG=k#Z&X7RugDO@yMJOVVh{t$b-QT5z zl^P#?2P4Hb+hB1G`>DtUG=St7j)BBwCPPNc4v<8QK|UxI8@Qc-&4xi1AS?3WK^o?) z;d)Iyzm=NmV_sNC8fn>8T-l!r74aNuk*FJ|;1N49vo{~1)^004@eAo7FCp}wcQ}lI zggyth^X76xH{HQu-y((}-)sw-6%=J=$Vk<6SBcOEC7iaFl08h2`{14&oFOI%9>5sFnyhi(%IvqyqGS-&t1-h4x#*m4a`LO4 zK}l#hy$K)tSXs#Vd%yHuHD6V`LtkAHZ~;YGqf^81&YkL%r2;LeHP9NbdjLrM|G*?G zn;1E9z0D7ui_j#Hk^e;SR$BZv`oXpiBnvcHkl2)*TVwukG5tV`vAE9unIV<3Q*#p4 zAF^8LFd#Ee<+o;RofSIy4OVAn9EFPFJIOiCc5Gp({N?UoFUy~n*u>cR{KrVw>dHGIJAuk zX4S?zrj;|Es%|fIg>ZNwgR#%4yPb zG{`sa1XR=~$jV`Dto}2j)$pu$70Vzy`|)h!naUk*o&Lk>3GB~((wSXV$Fr2#-zFO< z*}jo~#*kLNE1rxakhTd$5f?0?z7emY5Vyq#czfn=alhyO_V~onSNOlov=gpC;rHVuF+oSM8sa#i= zZ>amMhj>I~j=c%J0hz_@?gu?KgG2I4X@%JW_U+9w6sS` z!^MPdd1ciFg~V(>N9ql9v0q6{kFx#_{z38y;`AopKDv8Yzr2B=$>nT#o3Qo;I-k+x z#GApIzh#@p;>9)aFw=S8^E5Fh(oRD6RnsP4;^~l-j~{!X<2sM8D z^eokwui<2H;c5rs1ZTH`5<+QfMjz$-p^=2wBGmVN<~lI``U|%gvx%1lSp)zk|CYJ{ zi=S>ZY*kxEEzbS?-kZ~aNJ4uA1q@a!y$BJhr_4VMOEY?AOqnG`tg+Szg9XXGF8jFB zmcP$@&te@;=7@o)QlC)mg`f~a`lL$*7YKj4R3_s_i!{ng?wGOBoJ#rdIo6pqUslUz z6I9(gT5RBaB{j#QVC9xcfCR6I{D(`X8uR7_Q2LqrH2e`M=kJIh@WM;|K{kG1n< z@6{%FyVa5ZR@Nm?@DnU(*FEQU@6OwJBE<_X}zifSYiT>}$B{hAlS}K7xP2$7Of0)xLVMWTKt!Ii4KJBQGisG|00% zY*uPB>iX4TQ-+iGzS}|q)d9Y?Md(~D^I=Xj{o;``q4E9l6CO&JH7 zEu-dq;nAPFw%uQy-6j>u?Y!=Bg6R!zbtKZ4#OXzKQc|-NKpvwY4lW<~;QS4OH;>-# zl$5B~De2)Z%vAk&)+y2Pv=eGnh4$g(a@Vru%%pzdD-_`0_Vzps zU#Z&)wx+s6DM)$$@>==a?aZ_3X(is$CMvwXox_Q|)W+CJXS`XboATMq{`|Rh1>z+| z{B0NNcd)xbvvmLatuYS~?t{W8t+re0zmI}Dl2XOf{ zgwl2N(|rl(!@jDI$14cvs76IicFaFasYPK|zcol{GlMHd;AF>@fhytX?{oY!;b+i? zBTmYjz$x*L(Lsk5S&r+IK#2hj!0sXH(5`2j6 zI7)Aiz$h@|96eK!jH@Yc%)}50aZ*8R+Kg}6>^7|&!64-h%<8Cm545T$w&nC3pATe> z@}k7$XL>39mt^n%S1ZGh(W?GS9r2Ljo7w+qCI8ccocG3L$Cgq)?Id0 z-Y5ac#-qU)m5Zm&y{=%)1Wtn8(SB%i2dtDo`kGd5Et&QGKa%qk3Xlyh4=r=cM{UVR zgh6k{XgVl;b`|H-%Z9UO$r^iyjiQqn`Wpyabl#kjYarcTt7)n_!?}eejH`&t+9l)y z)4ctLIF}|v@w4)xzLTgVoTYuN4{OrfjwoeI(HIzq!Kvg+6v~044lmtvv_3_)(&%U= z)6pPo$r|Rr40o65vtjJ{IWX|}v?rqw6kA|HkxH~|o*n>2uLS2xs#(I`Xi(pwyf@_l zB#LLusvZZ;&>>Ahr$^CgKUMhE^f{EtzPghTR4bxNj8QQ=USWhG^)<7M8FU0pe&^^Z3i>YP29}_5NFIz z!zVvZym*xu;U4s%eQd1#HU#Tp&Z=9oX0aj}I-?1OzT6<9&m^Nqr=?oF{}8~SN^Q{L zl>P(jfeO)G)Gt@P5t>885g$7SGdky^ceiV1LBg8?jJFZ-=aNR-?5I^-n4pu6Rc)MF zNbDOP`$B9JbwEa)j}5=^F%1BWoYb(j2+HaqkP?TwA0aY95IVEV#Q!K`2r#&Ii>=?~ zv6P083`*m;j=(S4gUl(Pr`|T)izBjx-99$5=Xy2J{YvW?iabiU#~ley0EPBy$v~YX zwZX#=k^AVsCBc%%iIW6U?o4q8gf0i}(!pu=JBCs85~Q!z-w~AXxp}O4%CknO_+$i` z?9M#J8C>{`FN<*hiPPRXk+4V8!J!NO@YvZ3?~Bz>V&OT>N^6rWFbwC|P+sB~6C5Y7 z<>4mO1urFZcAt7$9~=LGE8=nl%zmE=R2Gz*UsuBa#4rqTk&3KCZwUkmM2tuvNvmC*uE}JJfbP<&E)P^v(C2>6wfdb(j1WMLM+n^dus%Xr(B4iOD;5mPT3~TI&f%PBuw7$-Qtc3u#VSS&y zgn>FB$HqwN6ZTnc0NtKqpP0g&J4#gcxT>YnY`VE|@=!=R?O6KRODt6?!5quD7fC%7 zxp~HHUn}H2>jTP?7@h=`%>H*cECvjc{GztmEECF-O#9@c;=!_h^o(fK{ITg-E0;gC z?j5bMaFRnfmm_V6_yB*Rw0h(WrkJY~p8}B4puOlFR-6XeWMc3ny|{*-0!G%WvsT(2 zzscMZjEM>IKzL;dWY!W%0nvclZyH+>ZC;gPM48yRb<4QK;!6-5od z5ABmK%jNw}UvcLq;BF#Sf@P-7N~QfcC6~&vrHkC%#U`s$el&3yL@{h~FKt*V;^!!A z%C-(es7=H=so+e>l!lJI+S=fpwSOZ4G{J&na_UdxF&|dzQzh)-SqmpqaF3?V(DYXu zinuVjw8_+%r`0=tuQRIdS=A%`4!Zt9LNA%paG+HUzi?ov$hq;SKaA19fj}u`dsYlQ zsm>gAU-8M{kaW11)`r(HCf444#!RQbSXe@kNnY9X99GSd;q=;2WsRhc*s31?NhS;8 zRyamaf8G^d!#AT&C1zzETQFKCv(zCW=n|z7&*RR)bt0{TEI0GfpeBm$YmQ_VQG9B|sL7OuVA%#b8_cdKxkPAn&w7@Y zQpiEhxX|e2EawZ)l-xZj{^F-`OwYmmT*1w-wLOkZoIGs*!%0u)4HOlF{QG@QKvoiK zzTWn=@vkWo%rpTp`Bu$6R*>&dT3zeISv_}`hKeSr< zm>Os)qzkk5so_$7?`)sJfDQh<%JC^;S~%i=9@yHa&JJuSg7x=o{^Bz{|E{BruT;xEkLe$W{|xD=t@o&xg-zma?g z#{EjKe4>ZAj04eLMB(_4@Ef6#%CrFk+rW)$UsAQJzp#LN@&C&g`h~xO|NOGj9h|a# zCdpvX&yw|-#QEvr6Xou+pp*QP4oY%uhiE?pr+qSp0G*$om!x}R)K6PVu(<)c9m zOO|h3`N?JT8{Fp>kzy3faQi)$tXh*EgYR8b5NZdF<>hqf&16?~P1rXGU4>wxIRF%S#UTv|OpWm_-I&O+!~Qf00^5~G)hQp) zmVmPKf+_>r={G`XHPR=2X{ZQ6k}WaH2mp8l#4p}V=;p#YmCR%aTjjR_d`^u5G#dlaQ@Wq;~?Ye_G9Q$6mDhx(^@ReniulBX%^ixIJa8POc)!je_(QCo?wZ@$*;%joD$n|j zPaXh!x!ZAbNFrIo~e_slwq(uq{ ze~U~4ps|5*R^6zn)JPRebfs+XmwL^xQh$sX-Cbt9xQ*;k)nX)5p-@wT14}vpNCeHY zeH_OS;9O!e9=A}53_#4hfS68_&mWkE+J=__(fUSJIN;fX|1ID0-ReCAXPxn~o@*&< zU*hJ1K~N4klM>u-YVjGCE~rZU#AZ8uT~?xnbcd_}5b#hiFNq!zm8V?dn8A=^nxM0v z#r0H2&Y+3eKNN&$TgO)-`^FDiqOeMRH#|Ir) znfO8t!dw=x5t9r76P*U&ASk&yXNK%^;5bhuNLqRPENL|nQiixVF$Imr^mAEXZ}eo{IT|Uy)k!fH zIsM@YQ>|waqCkMAlUR73AqJM#44~}~imkyUfQ(e`P-!S{#n8mr{%NA`4cv$Jn3;9? z-%nFmvYHwXcJSnf#LJ$x_QGJ2em$0tG(|FRBD38T20nTTCCKdRw8Df>7MNLi*lYD- zQ2+Q&EJRC6xfAja&~JnxN-~T782&7WA3lb zFyfSkLPf?h)kRBxGXnzLA^@r6MK>{?O{#aXcEN#@+cDCW`_+V6;9z zSH;^cdsvqUgF7LjeL2KFHE@|5t~dJ%E#;Nkr?nFvZHjFpzi0^#TF!|!7BrfdG=$U~ zBeO2)Euh-S^Gkg9yWC3LY!}Yyqn=(|jy{ZM5!5OMJ8x&j%LIh<$#$fnRR+Qo7e%0$ zQgX8}V5*{J`8$Bs0F@ST$_ei!@lMx#574P_N=Q>LRGG2wd_(b?jN8@fGbTrlQ-D)d9$i z&&p$Bl>vheCGo4=GN&A3jg4g;^!xrJKCQro!AS&XKdpERs=Z0jXEn)aqqy=J;N>ZAM-Yp8T{ zC*zxmG%H>4#STlGu?8VLbpXXhtKA&ASD}0n!zd4H^o>axVWShN@SODJ1e<$^KpN^F z*cTfU7;G6*S$)RzxF(&%b#lY^UoW=jBXp$Od1T%_Za9i5vasjg`4Ro`t$|&(C}vZ% zH&R;bF$TgArXDj|xwQc*nrf8=Ihv~O-^xh}KT}e<$v+)y35&C@aMM)(mH)1rxHd-n z^+9P|2rZ6|iXNUWGk9Rat%JU;>og;hlmc-7A%i*1R^GXQ1W5siSMEe)NG?l*M)&&* z4ejGMsV_~y-p9v8HD#pP>wgW|FRW;MPk2U)B@gmOnus0u^Xp0lLQ-|Ngql5ucD3fe zUiS|%QkG!904u+=Mfs9ar6+ds`iW+%?*DxIpPFr8iqEd%zmI9Lw35D)CjPap6j?g* zdYSF}gR}KBqQDOKf=%9M>B!1Ml&pP8tot)I#o@sAsN%J36<_{N7vgJ3B7lR9_vImLpOv%b4D*x;IfUH1Z+T{r;%V&s|lZS&?KTfFc0eRi)A~NQH(VcKtAp%enFYF1C zTgdoWn^Il>EQdba`m3Ev%p$jXX+XdC2cjIB`$}#b-7~sRS$L)wOiS$u{7l=|S?iB3 z`3-?4(>1$gN?-WiPr)nNH4nd~H#HqS9Kik1VBb2`GcH>Djo@Xx(nLaiTR{&Vl1=aF zYsCDorcwC3HWDSRi%x+$UniqEkj5e=N(@+eVVo;=t~Y~1`4HcT^c%1L#TScV5+`s4 zMH7zAvGygP)s(Ta{o?Oz;ucapUOKLzjn>O$a5}U2EVo1v6|FQIOIaHl2dvq?PMN)? z!{36Nt}$*-Aa9~n2cHQw+k9q4<+Nm0_%zg0Z$o`014amQFUR_#SfF!!NMPV|y!5<3 z6Su1NFRPeeAkCz67M50&Y8A(0^kr|PP zesR1c_MLr#zfSzbhN@xdIPd5o*5c@KF)c^EVX-1@zpR$;iJ6}WVQrx*?b;rC?Q}6Q zRLUK~L?>fuYz~?)$mH*|I7VtgZo?{CTVISLZa!GQBM)BYy4s#DCD%M{AT+NdqRRLg zsy^lqh;=OUscX9B@4T6oquN*={sPC>^nLkuoy$DfC@4%I{ujxEVSyoLwx{r+4^J(g z6ucEBeCa1x!K-d=bO&}wfh-@?!>w*1J9|c2gP^&@b9>5{HW1DKj*#M0Mf&7jqalr6 zbR-gMF@~%R_R{I(WpY4`1 z|ILGatIuNygcI}2B#YG^^3Z+|f*PNx4LT8@gV0&M-gS7xB8{rl2C;_b_3xiWAF%c@ zTy7mFP~=F+>e!AI4s%4}Ol7r^Q4R!Hg^yG7jRzeImr>_KzDV^imPXp;h<5a)oBfzB zRiF-Ze%p!*x{g+s=A3lqp*Y0o=UZlsNuJ_3aP(k}ValgQR78odCfcX2mDQ*W!RI!Q z0``XnyIftg&3;(+E{{|jY+?KC2&P-B2rN_KL^Z^uGSTq)zS}k_Z9}%*Bl_Le3?BIJ9~hlXux$ z-*`z3mtEJ*^w5iTqBwWTc~|gsM|4_?wsiD3pVUD$04l0mlW_${Wm1Gucm852`WUAo zf)XR0F=~cE<+QiBA8EHmR`3BhZCMXfNx-J~?B=#FK*hC4lVhJQ#g-r%Fp{Nps(dG! zca0xPfF4&`XA?Sk;Di`@iv;?z_4Wgv!C~j8rD2)XW|O?;|VD_)h=L z3)R%_^|H4;a~w|*6HjVLb=pt_=;zOlEas+o@*mjtv9T2}h)D%4FFI7iHywJ%Kgx)sLdBHKRngR=L zPYSS91d|+v(UO2_n4K&Vv z7SxfK-IK}k8V8+kmNN4Mz7*jK+t(wV#hbtOT0O-GigVMTO51(@S!~&hOGB{_X?nr-Voy||Na$0_-+y_cdfrhSY&mjjz=ty4LGsWt>f!pw zsme7q5f9GCm$z6lRWK0e!$~M;8x?_J?xA*}V6vyoqq*f2TtoHHWohJfB$y=e(;iHf zQl_JHCL!pzvyJKuQM4S=Xy)+#!rB9_iI9Jc#ZG;5%V7nnK>J4o0>2=z1``}DEB@Gc<4HnRqi`T}Db_w+d}Bn`B5vXZ{7G0cDW=IFb=C9HYexW~ zsjF5YOFw4Ew^I+Y*p7?NwmWbsvBwJ}rR(8w2a%}jJ-_I!V2tl1fPkHGSGlF>I~oXn=N^1m=KO-L$>tN+I8tsH@IwN8KqTf`uW%bsQX!hVMuRXmpY{n}i;#7Z3`^?xu#Y|=QwTVQjV#@rMVHC+E^)O#EYth1$tON)J+io@irjw zrXg+E$u7ZLM|zOLaAggIS;7aufApe^Z`*&a!ayAURnC*P?;jrF%Z}$*NaT zUrXEroe^}@GJR(>#+*c}o}dm?8+u&RU*fCrh0Q{_rGR#1PlYlFZ8To{0Ab-Fc=|~n zS4UALCb|TBOPpRel-Y&-%<=dVEB~?}O)WJt;f}QpJ!zhK`PSUSnejx~mXql^?i5NT z)!efF&;0Dz!bDQz-19;vB{LIivMsO82QkyGR+5^t8j^gGo&I&lJo~VDrNh6Crp(lu zNS@}F+JYc(X=ny`vkL;~`QQvrNFnx|b?6Ip#9XI9U{ggkCcxEbK1!S-s z%@eqp?n*qNiKfkfJ!1w;bm7m^PCyceuw#N;4bd~8VUP%}?4ml!LZj@Zpu-f$?%;Ig zJ{>CL+DWSEby(R{?m0OE1sa$|U4;Lza{t3R2>e+JwuhNJA+3}ACgy@dVQ_^nq;DQ7 zWOd2nq!SoT#sQu>CGi!-*(VUb)X0~@@}45WS2P!w#>lDNpuGRn)r$kx9_8{H4_Ljp zvhaORq5bvN{!=AW<)A5=?AxG{*v2;7 zD5uvgWhg4AOVA(MtfAR!#tO?@AwRja8K|c*x?Zcov2KqMPKfqGfjb*iict8AQ#jVU zo7&two;6}7duIi1*Y9-Z(PM_f%JA#d5-jVgHiUg_#7vsb3Ibs!zNxR+X7`wMa?w1J zQ->m6=ORCKdW@jK+IWS-Ugw;iX$G_d$1qZ5$_?-qtwpc}!#eqLH2D57HFBm-9?4OL zN|P2_{2lUaxMl=($)aD? zSJDs)Gdus{o0u9A0)>+Qa(*lC&q)Wi%y|H5{xQk_IPkhVXZ%<5!0O#&2}=wI$lzqQ z49L`Ye$TO#vTuSr2kvpSuM&8Tmoo}IXQY&lGepL9lv~vHBMS|&E}J78`leFhCv@GK zKIB5dA?KmVWidS0cc@^n*B zBlS0llZ%7bhV=$>;jj^0EEQ|SzxDnq3fB{W+k~vq#l0CCM2}u$BY71k5XcCCf6EVT zYRV-klS75V7Ogi7gk~1FCzU=*W(N82P z945slmSN@O61Ny=`%`M zH-ef$pnt1Ub)+J#>>;?Bkc7(z@AYyaH@+qvM5Ku}kxP(e=<&+vZrh z%k^$I=a7yko6mI2uR!ARDk$ii4gN$7!_Hqwza9fEm)BRXus*-hjK5B~eSIhC{B?~E zg(XK|gMbPp?q|fk&buC+deYbJ1_^|v_#k_)(PW%5qZL-!MiFueAj%kbRBIB=q~%|> zuzzVf<&Q4O9;lEv{Td=|=^612Cu3)Y;WT7YW}sgAI8uDo!^f12Bu$s}!rJ5B*5gd_ zLY#k8Svjv6UHXm8WVAK!(U@jXmK#4GybOeW%<5}NoH50b`umbY^p!{4x02^Kw&!Xc zw*`*$Pwz>iK=8jX9pNGbL#UE-Y?>j8Ouf=a^Y|^=b5c~Og}e;o;<>k#itm7 z`?NSz(U8+6RpCWz`5FTz22tRs!#d*1A&1_qEJ-~?4AAq><4Y3>VcQljXGQif>ZcbOH%DFPIpIQO^&Rc`UExaeS~m zk{K9{g8CQkkG#7UC+-P83`a4qdI|xU+BNK|-Y&NAPYe z7Dt^>Pz}5TtRat?w1!4w+|P=vCjw!F3gyh1ess#IdF;MmKkMKI*~lK6tvM6?jtxJR zh{h+qDFrW>PGB8MCY9UvE2*?f1j?Mnecsr8ir#q0j;l!6eG)Y&*Z1hE0cK@XGzH6F zyZmsNuXxQAf%m{u?uk%X#EVoK<2CzDpM_d6xM9tw->vp(Kb;wINbq57aI$Tu;hJ#) zK)YPP37<){Lt9Q*p-ftel_Q|J0Mt*LW-nX+wstS*SPD2d3~Fh^ZTwKsb&T6;t;WtAxQRqBym)>g`Q7FkQH zB%`RmVbU@iDA<_lr`;QV%dT}o(LHAZ>Wf|g_>670Y#jP3Z9ZhC=8Li{Yk>N+Oz&}D zNMh!$`gtwns>VY`$%D=#isDG7Ote%16PBa_vT9um!2U``se?*{H|v|k!!kkBXtE;x zs-6(S08Ar1m^V)V$GsQRy9@^f!G~JzZP4 zqcQb6EpKu|gzN%N#7rVMx)^m=!DZlI{f=VZo)BX^+6et<*Eu{|OsG)5GQMHRT!en` z`@JmJKf$3R0%1%M?Xgz&E{PWd{cc8G{WQ+z%f_c2%{xGe_jE3PA${p7Bp-3v^uBiP zMdn91&@j+7>a$5j6kR7;&1#Oq{xS-I!U0T$GAIc<8)<663V*Wqvxy^#9KJSFq>Yi+ zz>cQrIV1X8IxJmNxu6e$oFZ?;!XXk4mi+l~-hecF0@JqU!aNhKdZ=34P}b+c@SwwZn#>}d7B?wX*~qR#{-oiv9Zi?c zBC^7x4{hvD_+hY)EM1lEL!Y*DEw?qDr4Ev9gI?xdppm=49z)59op8L}YsR*MTeari zn7Nm+k99n}+S&R9JQ2SQMAi0>z`7M>Dc+ zg0x$8{WLthgC@^T*tA=yK7n!4^0zw=1ongBR(6!nCN&d#c+ju5*5Ie)oN@^YOfZo4{C@_?Z9z0E>aXp7}X;Tr7r5 z=esseqWTFKkMTX>Ky>U3^&lz zMugyc@>2YZ)j`lqr^h+!*S?>gMLm2`1~fnNsQg;)S!$lEvH23Nm}vQGl?S#v>u2Ji z!c?h@9G~5FR#wgy6}VHEjIh7=y*6;apIli9iVZG5h^lMaIeMnr?&^XTyI#?9e57bM zbL3r}>~b|!-10IuU|D^BEvA|$(Z3gAK{){EVYe2XDn-|C#On-5T47(MwNi!gIe_`% zYn^wqy$0KQWQNc1)Jdc-P8^;BAF!8z_E;gk80+~lrRC1M-Ztr0R?uW{sFfSJ9Ga3` zQyxC-mc3kk>_}Jw8>G}!;2v=L{_$+lU1`HS&0pMN6xT+IN~K7P1m$jjU_%GNZ(l`^>yir1RTf>EnedrcZ45 zOv8_jD1CF@HpCRW>m8%pPoK4t0HvU5lJRk}XN^#{dW@&R+`_xVT?>kMg$oii%<-|N zrlw;qVTt=PXlKVZO1|x;jfbSLYkNw8=h*z}bbB`WxEuUWtS8SefL$X?<6Q6XsdQXo zJ2AA6?VFonS6sQ>_9Qv+j$Bp_@@J3QT--s#jMVa2kZ;Z)0wIPBuK8!C{Cdj(2|BKU;428|j$7+|~-#Z)tntYiK8jM2-hOR7 zr(!MO#Ukagg&9sg`|L&nBySyAX$xCRInz&mBQZiVQ9B&ZkYBSxZ$|C&WnA1Tx{90g zAlzAo+y$%A+DE$2W#fqSdlw2xr69E zipcEMrp2?PqhLuOLZ)2CP@y6+L3p=Ofd44sr-PdhtFCRi9R@)R<+-nAcI#$@{?EfQ zcx}1#U=9y_K_)d$71QlHKY2%v~KM}+7S8q%9;Mf!NgC@8q##&WYrmS0W z(Cih0Xz?Q|-B6nG`5r7b^!n}7cx|fq5(-DFrf%P#_hRL@C>&uoa0_V4N0&OJjFr(n z$^2wNXWgJpsaBWzh6d&Xwf;)=E5n+13Uw7(A*9nz ze}6RAT}6ZCey2xU^10-D)EXsYyNS|i2f;#JT4&c!2uT-B_sZ&8yTr2e2_xCXLzhKV z!z#q0Fz?+tAqI6>8|r{u&P(~4_t^Hgw@JI=UBZ{;ZddaZB$FlHl3G@J0Al* zww(O#9Oj_=hVo6iRW>aiW8PV$x6I?0tOk%iwBSb2H)G6YtT8l}7IX9J93cN`lsl1c-ERa#TE*yT2F#s`+t-tLj^2;rf? zVxeoGqFlpu&eFKj1|`6X1ujvsxyuL~$Yh~2e*c$vN0DekNU3siPs!gUJU?Lx(1u(U z_ilY9r7KPX-9^VAZmWn%YrC>}*P+aO6c9=Z|4S6q}K@ zHR4VGrU0s5GP-Q2yM}XBfLK8mA^l|1&}7j~B+%@OM3*(K!WRm9h)^m11QDNHgZI3~ zh$bx?=X%NC;HsjkM+oIpl!AOy7dFgXAah&S~Hy zfvT&zFp=&xAgYEDsa(Dt{g^A=YmLp5R#6?+e^TuH6r}1oJt5(&xjqp80EV7< z`}=+CC&DUtZOSdDdf>q6y=M|VYuJ!lzW$BDAYY=OVrCDH*}ELg6wz$5 zbGH>jo41nW1~%c^*!nVSNSn8vcFZt#%=p(b zj96&G+5r!r(ujzk(HCiTg;PRzONW#{>n#qAt*fFoq$Q1O_&>`9{hg=8f0vxgDZKAn z#AUB3@Ifm;C2Y80KWpB&SNYde0ri!(pAqNkBl%*bOpZ~yJC9YSM{Nxi_WttWlP3&e z`p4?D-740T*382=cKs(8XlQtvO@py3-d_@gDL7LFcXwm!*Z)Lpa@r~#tqSeX%^Vax z`N1|iMQ$+hb59cx#_o*EH!*G8`s?b`?tp4)z^Yoai)~{T=L?roz4UCzxmif{SOwZP z*4R}YtBCoh0&B(dQ+nDJasz%G@DS9RjuBx0rn1v-Np6Kyi`7{*WMS~nwg^PD>@0+K zifvSfa&*#p@f3LpkRU~lJL|Xy`3_`3o23NU%K7!S z;ooo@`!fleGBDSTLptl%nJ%>pb@%*rXu*}k%+LR=o4q3iPB%_AJr+-s{!7GYG2o=+-s3ETooG3e#19PtC?h26~qU5SNLHSy@VhVX#tuMiY+dT z(JyF=Ns?H91QQZU1(rWClxlgnfxp4LC=`ky+ZG7>i49HhId@zh(WAptP5+X~^D^T6l0R%y0FZnO-4OY;EGuvh+3EF$03%K3E zVqXtXECu}TPzY<_sa@Klqk3B{ua|6c(F^@a^sVTYB_;cpsl*j1YWhJ)WV%-To*83p z!gwnUp}u7uR5JZ47#xdR8fZ9Oj*Psb`M$o=omKgx9+A}I#fD=sZ8s07@rt}+Wb+^< zctqQGK8B?E^LjMNIpDgGZbb^~Yi5t(IvAX`YT4CVJ;9Qz6~*E?T$lcXuJxhqiWTEi zQg4XVxj_d%^tID2*pumqJn=ExH+jmZJ9(A0V0|u(HG?YCF*rRacC)uR_3c(7R3xRyu(H?Zoow{% zF*}PMZ7BnS9bc#R`R*;|v26dxVQ;xm7soZ+n3R|pvRvC(LrAVI%P<*BgK5UtN-<;!7m2a`vt%1>)-Q z7cm;{Wt5B>J2jGh$!_MU`+1(X&w2Ize9!Nk^ZKyPQbaOgfU>PM2Ep-f=}9Z0EiHrH z-BW{uNtV*}BodiSrU!G-Cnwn)9PAt=Hk-}w9}W8%K6VF+qvz5$+iYV|_7+zuI;m6~1>xZ>m+uD$uqvy}dkTF+= zTLFAy|L3*a_T{1;`0IImQ>+nwv!1k$<|amKed{yFg|7vcW{d^MeEY)=mu;m0JU!MD zFOqQguc0Fu#aq@wDGl7Vm}Iu~sA#O=2TavQPOW9<+q_vLTh(Kc$1lZ4!MwSuTYi{R zIvO6_OgC1ASM1eMa9Ce(tLT@68m(gTF7R3ztGC z%sm%(bUo!XneCDyIZ%kZQbsWL9%~gI-BCNyNlfw`n`!O~lGPRHAeQ*lueu!2N_PkQ zObYFm%QQFy&K{pn@Y|D)M=`d~m}maJAR>>c@acd8dfhVK*Dp@pp1G30Gbs7YzorXf z!lQ2V!1=AqWYz_2&342(5Z7{zTc!H#qj!5M`vt6_^BorRK(DWnl~b0y{s*m(hs6)I zY)42wfbw7B+!#zSX)dU}jkKfLp3j-@w)^tyl^}1J_EY z4gcK#+w&lqQ;6u3cbA1ZG@XsFvVY$)Ya?#*hwHF%8Q4a)K5#Im5VOdD6MDyAc{@Hp zx!94@$fMIjEPDN7#^km5(%Av#d~TZF3y+gEWn=`|wcK0|v*#}~F#Jl5R22w@n1&>y zHL$QFmx{^{XRv_mT(R|Y+|KZTbloka!Q3lMM8zyxI#*t(Rykh%nia>4_WEd4gv!Wu zr2woqy4gpM`%Sl8P}I^_S_LEhibicex~Ud^ax5=IrX#9291^9RyX#wBQX_TgT!By9 z{#uSIjQxUrbhMmZT(gC?!`g>C|5%xtds`9kWi+iJI~dqLYQjVXIa=q|9i7QV?q+Ha zO2RE_;5p9Kns)FJ(IuS`8trlo<*ALlH+E>D^9C3R7NXSFC&%GOZjOjrAP?5N zhM~0g5Lc07%R;K3MpRDSc*7ATVA!i9l_4B7zg-+}Y!_HTkq+xuzoDgiwOX@B5^Ugc zZzMIe9Z2Xo2Ef*Gj?u-!M$f>W+1U#fX?7M;#qIhou#ouUIfO)oH|B>~RO>tKqEq*O zf{J3Z%)fB*fAD|Ie_I*~`uEH^`|GHooWK&6mEV=4#&jp-I2J1a@3=+=)=)DU7S;>* zn6XJALA)4&wA@znLycr5*{AvD1#>Cm_bE_|KtX?}kn$!!{bgvH5wp>&N03)>xKc(j z(@idL1?i4RV9_M+8+mGY^ayT#yHm6pNrWPs2D6|1lf0vu+6>)u2NN$J`=WKOAe~b& z+pRM@Q4zFCI=2bD13@L|VvR{C*?niC!m3u@`a2cq57g)q{&jUvwrMy{lvl|EOw{ZQ zKa{dYuIu10hZH_UTmJUbq@c@S&#eCOt<1rx^bb|1307i8w;(KJ<2UJ89Q3i_TwlQ! z#1h=-W>2iPRRaA=7B*oaVt88ZM zW@1d_wzL$C!oRBdYn|3z1N83{H?;K!;+|}G*%(q(%dI@$n)jwyPZ`w93?2Iv(KwKf zAQS5cbo`_PMw%4A^!0jMRrMzzl24zgAFy;6ur_hPNK#*G_ujt3Ve_Oc4A!cx*8u!w z1V9@<(h>c7sX_vY97U~KOtF@^%^=jvESt}g?~QYh`VgMJWv&%RH+#H1Wz;hM?lBaSz2;(v0M|4mFU1Wq@E`)waw zr%AjuIZ1I+7j0h!r^%IY`)ToBo-;T*1USH{RF?Wpt;l=)sr6?xsS=wa1DBY6730U? zz1!x;o=8w1R6m1--pgz{%Ifw)p#@LSg>K$9rate{W=IlJ>3r2ZA~y5@G@KgLv)yQP zBE3^vQ`w2|JUp9eViV8M{3ZL-J1^XSyX(?nkzI1DC{zwF=k{hbqfGYCE?WS!dXTTc znK}V8p|zAqaC#>DwHXP@ghmHstm(e8;6yI=Sk1?(5+32&vcE+U(m$;nbWih??}|^9 zi+v-syNTbq;rE-H*z)N(S^nAJ*rrjQ=w5aUwkI@TK>| z15z?n5P38$_0s5Mx^WT>+zVXRNm@Bgl;xiZ?!67>D?5nO2dT2~5_XF^Nvo&7^R%qt zb3a4G<9E12xZsg|6YX5wT}NFKF(-?!h6W%f)8lmdat=Cwn+;xCk*MvsQMZnmsw@?j zZ58w}j^ry?j{m~se?EDg=$>P8Duo7amP4+HZ6i}?=hpETGKUvT5I|^yUkHDAHF8>i zWikbcl8a#vPB^D=MR!ds2HvfG&{?>0ozd~4-U@WCH7t7kXj>i}uUh0QeH5F#p$3k3 z<*1q-!;V+}fh?(}G(##=wnDu8T5w_bmy3SWF(2rcCXvjYt(-9ls!gH??+5 z=9-P@wLP3E_4s%h04-dKOQE$t^2jSt0Ih6aa$grbGwfSH_$uLvOHFV#$e!g~m1oR+ zo-ASYzyEeA?t@j^qg0QL$r9$z8v)k%UbnpW`Bb5ZxFQ|VAI;1Uy!N5w)Ta(lIa_8K zVl6YOMZpW$Q}qg5q>$qMmlJ9$rx?_#n2m<)7IahJsEd`+KFO zWuzSBgm0#ZsE*C*Vh?qL3rjC*8iIDJMUXb%pZ2wc4GOaJUx8G|L!U7Xg?JZqC$#QE zX`g3bSTO}neR~-FD^~+Hn9Cwp{MKC*qp2h}ucIt_*YB_XKuY=kG^`@mZxeWxVK~Ty zIPbRp0yqp>mH#vYh445TG|$Se%1_Q5hftji;$}^MaX!~uD6M4oqbP5v&dRBNX9M58 z`*a7Nj4!avmav4qucso9{jIfi9HCl7i0+$p$Z$EVBDI7)rI-^hgmfS>`ro%~g>lvm zP&Gf(9A$N-V<2?T1d}Dlm7;9%ck+}<78TfM!aJMn*6SB4nDF)pIg1ILt;T23DzC$Yqq!a>jXV?yx9R_;p@O|y> zJ3HJak#DJ%>;C12yXKFVQ?D+!@8iJzd}hs02JadR;}ZX}EO{+kpRU)vaS@XA&wb#v z{)cZ>-HQz%CxKNidYk^EjuT!U#(Y{0ZDO77Ln&tEgo;bCP9?cXnTzwD;G#Htt}pi% z=ey)n6w+5!dKu5lR3OMV(Mu7Ex=q9#Id?zrEd6j^tncLGY^{sy>$i>TR8{qUt9II4 zG0QB}X=50zRAzLZ@wG}}N=PXUO1m)V`CqaH71km2y~8( zS}}Wmhh62aNtQN%`W4$Fe2<>*+&un=Tl0k+)DSM=- z@&cr)SSpuh(T%VuIqsxeuk&hhZqgDqbUUqH*hCJp`?y%#a%vhY9m7s67I#|wGt6)h YSR*Em-}op4`Sm7PAW&w{;5TCb1CgK;fdBvi diff --git a/public/images/pokemon/397.png b/public/images/pokemon/397.png index 0197ee7182eda0c9df8a1bd9684cb3736933859c..e9d14db7eab58a7b91ff5dd75c5f964549d485d3 100644 GIT binary patch literal 3936 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 diff --git a/public/images/pokemon/398.png b/public/images/pokemon/398.png index 55f8c7c09a322ad9a1ebff25d39dd5ed5f7ca82d..d1adb74b7caa7b63391851142db0c3ff45b3c7d7 100644 GIT binary patch literal 9849 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 WHknl4`tju#hKi!5!XG)y&;JL;1f9$P literal 9396 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